From bd559648927ed2acf8d0c73627a9fe89d973de5f Mon Sep 17 00:00:00 2001 From: Shawn Huckabay Date: Mon, 11 Mar 2024 09:18:38 -0500 Subject: [PATCH] update --- bundle/ruby/3.2.0/bin/coderay | 29 - bundle/ruby/3.2.0/bin/danger | 29 - bundle/ruby/3.2.0/bin/kramdown | 29 - bundle/ruby/3.2.0/bin/mdl | 29 - bundle/ruby/3.2.0/bin/pry | 29 - bundle/ruby/3.2.0/bin/racc | 29 - bundle/ruby/3.2.0/bin/rake | 29 - bundle/ruby/3.2.0/bin/rubocop | 29 - bundle/ruby/3.2.0/bin/ruby-parse | 29 - bundle/ruby/3.2.0/bin/ruby-rewrite | 29 - bundle/ruby/3.2.0/cache/addressable-2.8.6.gem | Bin 107008 -> 0 bytes bundle/ruby/3.2.0/cache/ast-2.4.2.gem | Bin 11776 -> 0 bytes bundle/ruby/3.2.0/cache/base64-0.2.0.gem | Bin 8704 -> 0 bytes bundle/ruby/3.2.0/cache/chef-utils-18.4.2.gem | Bin 34816 -> 0 bytes bundle/ruby/3.2.0/cache/claide-1.1.0.gem | Bin 28160 -> 0 bytes .../ruby/3.2.0/cache/claide-plugins-0.9.2.gem | Bin 20480 -> 0 bytes bundle/ruby/3.2.0/cache/coderay-1.1.3.gem | Bin 92672 -> 0 bytes bundle/ruby/3.2.0/cache/colored2-3.1.2.gem | Bin 10240 -> 0 bytes .../3.2.0/cache/concurrent-ruby-1.2.3.gem | Bin 348672 -> 0 bytes bundle/ruby/3.2.0/cache/cork-0.3.0.gem | Bin 9216 -> 0 bytes bundle/ruby/3.2.0/cache/danger-9.4.3.gem | Bin 88064 -> 0 bytes .../3.2.0/cache/danger-plugin-api-1.0.0.gem | Bin 8192 -> 0 bytes .../ruby/3.2.0/cache/danger-prose-2.0.7.gem | Bin 13312 -> 0 bytes .../3.2.0/cache/danger-rubocop-0.12.0.gem | Bin 13824 -> 0 bytes .../3.2.0/cache/danger-textlint-2.0.4.gem | Bin 15360 -> 0 bytes bundle/ruby/3.2.0/cache/faraday-2.9.0.gem | Bin 71168 -> 0 bytes .../3.2.0/cache/faraday-http-cache-2.5.1.gem | Bin 25600 -> 0 bytes .../3.2.0/cache/faraday-net_http-3.1.0.gem | Bin 8192 -> 0 bytes bundle/ruby/3.2.0/cache/git-1.19.1.gem | Bin 49664 -> 0 bytes bundle/ruby/3.2.0/cache/json-2.7.1.gem | Bin 68608 -> 0 bytes bundle/ruby/3.2.0/cache/kramdown-2.4.0.gem | Bin 122368 -> 0 bytes .../3.2.0/cache/kramdown-parser-gfm-1.1.0.gem | Bin 11776 -> 0 bytes .../language_server-protocol-3.17.0.3.gem | Bin 78336 -> 0 bytes bundle/ruby/3.2.0/cache/mdl-0.13.0.gem | Bin 21504 -> 0 bytes .../ruby/3.2.0/cache/method_source-1.0.0.gem | Bin 13824 -> 0 bytes bundle/ruby/3.2.0/cache/mixlib-cli-2.1.8.gem | Bin 13824 -> 0 bytes .../ruby/3.2.0/cache/mixlib-config-3.0.27.gem | Bin 14336 -> 0 bytes .../3.2.0/cache/mixlib-shellout-3.2.7.gem | Bin 27648 -> 0 bytes bundle/ruby/3.2.0/cache/nap-1.1.0.gem | Bin 156160 -> 0 bytes .../ruby/3.2.0/cache/no_proxy_fix-0.1.2.gem | Bin 9216 -> 0 bytes bundle/ruby/3.2.0/cache/octokit-8.1.0.gem | Bin 88576 -> 0 bytes bundle/ruby/3.2.0/cache/open4-1.3.4.gem | Bin 18944 -> 0 bytes bundle/ruby/3.2.0/cache/parallel-1.24.0.gem | Bin 10752 -> 0 bytes bundle/ruby/3.2.0/cache/parser-3.3.0.5.gem | Bin 954880 -> 0 bytes bundle/ruby/3.2.0/cache/pry-0.14.2.gem | Bin 154624 -> 0 bytes .../ruby/3.2.0/cache/public_suffix-5.0.4.gem | Bin 102912 -> 0 bytes bundle/ruby/3.2.0/cache/racc-1.7.3.gem | Bin 64000 -> 0 bytes bundle/ruby/3.2.0/cache/rainbow-3.1.1.gem | Bin 13824 -> 0 bytes bundle/ruby/3.2.0/cache/rake-13.1.0.gem | Bin 84992 -> 0 bytes bundle/ruby/3.2.0/cache/rb-readline-0.5.5.gem | Bin 96768 -> 0 bytes bundle/ruby/3.2.0/cache/rchardet-1.8.0.gem | Bin 153600 -> 0 bytes .../ruby/3.2.0/cache/regexp_parser-2.9.0.gem | Bin 58368 -> 0 bytes bundle/ruby/3.2.0/cache/rexml-3.2.6.gem | Bin 102400 -> 0 bytes bundle/ruby/3.2.0/cache/rubocop-1.61.0.gem | Bin 631808 -> 0 bytes .../ruby/3.2.0/cache/rubocop-ast-1.31.1.gem | Bin 57856 -> 0 bytes .../3.2.0/cache/ruby-progressbar-1.13.0.gem | Bin 19456 -> 0 bytes bundle/ruby/3.2.0/cache/sawyer-0.9.2.gem | Bin 13312 -> 0 bytes .../ruby/3.2.0/cache/terminal-table-3.0.2.gem | Bin 22016 -> 0 bytes bundle/ruby/3.2.0/cache/tomlrb-2.0.3.gem | Bin 13312 -> 0 bytes .../cache/unicode-display_width-2.5.0.gem | Bin 13312 -> 0 bytes bundle/ruby/3.2.0/cache/uri-0.13.0.gem | Bin 37888 -> 0 bytes .../3.2.0/json-2.7.1/gem.build_complete | 0 .../3.2.0/json-2.7.1/gem_make.out | 16 - .../3.2.0/json-2.7.1/json/ext/generator.so | Bin 215720 -> 0 bytes .../3.2.0/json-2.7.1/json/ext/parser.so | Bin 148112 -> 0 bytes .../3.2.0/racc-1.7.3/gem.build_complete | 0 .../3.2.0/racc-1.7.3/gem_make.out | 18 - .../3.2.0/racc-1.7.3/racc/cparse.so | Bin 130000 -> 0 bytes .../3.2.0/gems/addressable-2.8.6/CHANGELOG.md | 296 - .../ruby/3.2.0/gems/addressable-2.8.6/Gemfile | 30 - .../3.2.0/gems/addressable-2.8.6/LICENSE.txt | 202 - .../3.2.0/gems/addressable-2.8.6/README.md | 121 - .../3.2.0/gems/addressable-2.8.6/Rakefile | 40 - .../addressable-2.8.6/addressable.gemspec | 28 - .../gems/addressable-2.8.6/data/unicode.data | Bin 115740 -> 0 bytes .../gems/addressable-2.8.6/lib/addressable.rb | 4 - .../addressable-2.8.6/lib/addressable/idna.rb | 26 - .../lib/addressable/idna/native.rb | 66 - .../lib/addressable/idna/pure.rb | 505 - .../lib/addressable/template.rb | 1029 -- .../addressable-2.8.6/lib/addressable/uri.rb | 2602 --- .../lib/addressable/version.rb | 31 - .../spec/addressable/idna_spec.rb | 302 - .../spec/addressable/net_http_compat_spec.rb | 29 - .../spec/addressable/security_spec.rb | 58 - .../spec/addressable/template_spec.rb | 1264 -- .../spec/addressable/uri_spec.rb | 6840 ------- .../addressable-2.8.6/spec/spec_helper.rb | 33 - .../gems/addressable-2.8.6/tasks/clobber.rake | 4 - .../gems/addressable-2.8.6/tasks/gem.rake | 95 - .../gems/addressable-2.8.6/tasks/git.rake | 47 - .../gems/addressable-2.8.6/tasks/metrics.rake | 24 - .../gems/addressable-2.8.6/tasks/profile.rake | 72 - .../gems/addressable-2.8.6/tasks/rspec.rake | 23 - .../gems/addressable-2.8.6/tasks/yard.rake | 29 - bundle/ruby/3.2.0/gems/ast-2.4.2/LICENSE.MIT | 20 - .../ruby/3.2.0/gems/ast-2.4.2/README.YARD.md | 12 - bundle/ruby/3.2.0/gems/ast-2.4.2/lib/ast.rb | 17 - .../ruby/3.2.0/gems/ast-2.4.2/lib/ast/node.rb | 268 - .../3.2.0/gems/ast-2.4.2/lib/ast/processor.rb | 12 - .../gems/ast-2.4.2/lib/ast/processor/mixin.rb | 288 - .../ruby/3.2.0/gems/ast-2.4.2/lib/ast/sexp.rb | 30 - .../ruby/3.2.0/gems/base64-0.2.0/LICENSE.txt | 22 - bundle/ruby/3.2.0/gems/base64-0.2.0/README.md | 48 - .../3.2.0/gems/base64-0.2.0/lib/base64.rb | 363 - .../ruby/3.2.0/gems/chef-utils-18.4.2/LICENSE | 201 - .../3.2.0/gems/chef-utils-18.4.2/Rakefile | 15 - .../gems/chef-utils-18.4.2/chef-utils.gemspec | 50 - .../gems/chef-utils-18.4.2/lib/chef-utils.rb | 53 - .../chef-utils-18.4.2/lib/chef-utils/dist.rb | 154 - .../lib/chef-utils/dsl/architecture.rb | 150 - .../lib/chef-utils/dsl/cloud.rb | 155 - .../lib/chef-utils/dsl/default_paths.rb | 60 - .../lib/chef-utils/dsl/introspection.rb | 134 - .../lib/chef-utils/dsl/os.rb | 58 - .../lib/chef-utils/dsl/path_sanity.rb | 39 - .../lib/chef-utils/dsl/platform.rb | 387 - .../lib/chef-utils/dsl/platform_family.rb | 360 - .../lib/chef-utils/dsl/platform_version.rb | 41 - .../lib/chef-utils/dsl/service.rb | 112 - .../lib/chef-utils/dsl/train_helpers.rb | 87 - .../lib/chef-utils/dsl/virtualization.rb | 272 - .../lib/chef-utils/dsl/which.rb | 123 - .../lib/chef-utils/dsl/windows.rb | 86 - .../lib/chef-utils/internal.rb | 114 - .../chef-utils-18.4.2/lib/chef-utils/mash.rb | 263 - .../lib/chef-utils/parallel_map.rb | 131 - .../lib/chef-utils/version.rb | 20 - .../lib/chef-utils/version_string.rb | 160 - .../chef-utils-18.4.2/spec/spec_helper.rb | 100 - .../spec/unit/dsl/architecture_spec.rb | 151 - .../spec/unit/dsl/cloud_spec.rb | 93 - .../spec/unit/dsl/dsl_spec.rb | 34 - .../spec/unit/dsl/introspection_spec.rb | 201 - .../spec/unit/dsl/os_spec.rb | 175 - .../spec/unit/dsl/path_sanity_spec.rb | 86 - .../spec/unit/dsl/platform_family_spec.rb | 235 - .../spec/unit/dsl/platform_spec.rb | 252 - .../spec/unit/dsl/service_spec.rb | 117 - .../spec/unit/dsl/virtualization_spec.rb | 75 - .../spec/unit/dsl/which_spec.rb | 171 - .../spec/unit/dsl/windows_spec.rb | 84 - .../chef-utils-18.4.2/spec/unit/mash_spec.rb | 51 - .../spec/unit/parallel_map_spec.rb | 156 - .../claide-1.1.0/.github/workflows/ci.yml | 45 - .../ruby/3.2.0/gems/claide-1.1.0/.gitignore | 17 - bundle/ruby/3.2.0/gems/claide-1.1.0/.kick | 30 - .../ruby/3.2.0/gems/claide-1.1.0/.rubocop.yml | 6 - .../gems/claide-1.1.0/.rubocop_cocoapods.yml | 151 - .../3.2.0/gems/claide-1.1.0/.rubocop_todo.yml | 70 - bundle/ruby/3.2.0/gems/claide-1.1.0/.yardopts | 1 - .../ruby/3.2.0/gems/claide-1.1.0/CHANGELOG.md | 265 - bundle/ruby/3.2.0/gems/claide-1.1.0/Gemfile | 22 - .../ruby/3.2.0/gems/claide-1.1.0/Gemfile.lock | 79 - bundle/ruby/3.2.0/gems/claide-1.1.0/LICENSE | 21 - bundle/ruby/3.2.0/gems/claide-1.1.0/README.md | 115 - bundle/ruby/3.2.0/gems/claide-1.1.0/Rakefile | 57 - .../3.2.0/gems/claide-1.1.0/claide.gemspec | 23 - .../3.2.0/gems/claide-1.1.0/lib/claide.rb | 13 - .../gems/claide-1.1.0/lib/claide/ansi.rb | 126 - .../claide-1.1.0/lib/claide/ansi/cursor.rb | 69 - .../claide-1.1.0/lib/claide/ansi/graphics.rb | 72 - .../lib/claide/ansi/string_escaper.rb | 79 - .../gems/claide-1.1.0/lib/claide/argument.rb | 62 - .../gems/claide-1.1.0/lib/claide/argv.rb | 329 - .../gems/claide-1.1.0/lib/claide/command.rb | 669 - .../lib/claide/command/argument_suggester.rb | 99 - .../claide-1.1.0/lib/claide/command/banner.rb | 307 - .../lib/claide/command/plugin_manager.rb | 124 - .../claide-1.1.0/lib/claide/gem_version.rb | 7 - .../gems/claide-1.1.0/lib/claide/help.rb | 58 - .../lib/claide/informative_error.rb | 21 - .../gems/claide-plugins-0.9.2/.gitignore | 41 - .../gems/claide-plugins-0.9.2/.rubocop.yml | 4 - .../.rubocop_cocoapods.yml | 116 - .../gems/claide-plugins-0.9.2/.tm_properties | 2 - .../gems/claide-plugins-0.9.2/.travis.yml | 24 - .../gems/claide-plugins-0.9.2/CHANGELOG.md | 113 - .../3.2.0/gems/claide-plugins-0.9.2/Gemfile | 18 - .../gems/claide-plugins-0.9.2/Gemfile.lock | 90 - .../3.2.0/gems/claide-plugins-0.9.2/LICENSE | 21 - .../3.2.0/gems/claide-plugins-0.9.2/README.md | 73 - .../3.2.0/gems/claide-plugins-0.9.2/Rakefile | 90 - .../claide-plugins.gemspec | 33 - .../lib/claide/command/gem_helper.rb | 120 - .../lib/claide/command/gem_index_cache.rb | 87 - .../lib/claide/command/plugins.rb | 47 - .../lib/claide/command/plugins/create.rb | 71 - .../lib/claide/command/plugins/list.rb | 34 - .../lib/claide/command/plugins/search.rb | 60 - .../lib/claide/command/plugins_config.rb | 35 - .../lib/claide/command/plugins_helper.rb | 139 - .../lib/claide/command/template_runner.rb | 51 - .../lib/claide/executable.rb | 116 - .../claide-plugins-0.9.2/lib/claide_plugin.rb | 1 - .../lib/claide_plugins.rb | 3 - .../spec/command/gem_helper_spec.rb | 41 - .../spec/command/gem_index_cache_spec.rb | 38 - .../spec/command/plugins/create_spec.rb | 105 - .../spec/command/plugins/list_spec.rb | 29 - .../spec/command/plugins/search_spec.rb | 55 - .../spec/command/plugins_helper_spec.rb | 33 - .../spec/command/plugins_spec.rb | 45 - .../spec/fixtures/claide-foo1.gemspec | 10 - .../spec/fixtures/claide-foo2.gemspec | 9 - .../spec/fixtures/unprefixed.gemspec | 10 - .../claide-plugins-0.9.2/spec/spec_helper.rb | 106 - .../ruby/3.2.0/gems/coderay-1.1.3/MIT-LICENSE | 22 - .../gems/coderay-1.1.3/README_INDEX.rdoc | 123 - .../ruby/3.2.0/gems/coderay-1.1.3/bin/coderay | 215 - .../3.2.0/gems/coderay-1.1.3/lib/coderay.rb | 284 - .../gems/coderay-1.1.3/lib/coderay/duo.rb | 81 - .../coderay-1.1.3/lib/coderay/encoders.rb | 18 - .../lib/coderay/encoders/_map.rb | 17 - .../lib/coderay/encoders/comment_filter.rb | 25 - .../lib/coderay/encoders/count.rb | 39 - .../lib/coderay/encoders/debug.rb | 49 - .../lib/coderay/encoders/debug_lint.rb | 63 - .../coderay-1.1.3/lib/coderay/encoders/div.rb | 23 - .../lib/coderay/encoders/encoder.rb | 190 - .../lib/coderay/encoders/filter.rb | 58 - .../lib/coderay/encoders/html.rb | 333 - .../lib/coderay/encoders/html/css.rb | 65 - .../lib/coderay/encoders/html/numbering.rb | 108 - .../lib/coderay/encoders/html/output.rb | 164 - .../lib/coderay/encoders/json.rb | 83 - .../lib/coderay/encoders/lines_of_code.rb | 45 - .../lib/coderay/encoders/lint.rb | 59 - .../lib/coderay/encoders/null.rb | 18 - .../lib/coderay/encoders/page.rb | 24 - .../lib/coderay/encoders/span.rb | 23 - .../lib/coderay/encoders/statistic.rb | 95 - .../lib/coderay/encoders/terminal.rb | 195 - .../lib/coderay/encoders/text.rb | 46 - .../lib/coderay/encoders/token_kind_filter.rb | 111 - .../coderay-1.1.3/lib/coderay/encoders/xml.rb | 72 - .../lib/coderay/encoders/yaml.rb | 50 - .../coderay-1.1.3/lib/coderay/for_redcloth.rb | 95 - .../lib/coderay/helpers/file_type.rb | 151 - .../lib/coderay/helpers/plugin.rb | 55 - .../lib/coderay/helpers/plugin_host.rb | 221 - .../lib/coderay/helpers/word_list.rb | 72 - .../coderay-1.1.3/lib/coderay/scanners.rb | 27 - .../lib/coderay/scanners/_map.rb | 24 - .../coderay-1.1.3/lib/coderay/scanners/c.rb | 189 - .../lib/coderay/scanners/clojure.rb | 217 - .../coderay-1.1.3/lib/coderay/scanners/cpp.rb | 217 - .../coderay-1.1.3/lib/coderay/scanners/css.rb | 196 - .../lib/coderay/scanners/debug.rb | 75 - .../lib/coderay/scanners/delphi.rb | 144 - .../lib/coderay/scanners/diff.rb | 221 - .../coderay-1.1.3/lib/coderay/scanners/erb.rb | 81 - .../coderay-1.1.3/lib/coderay/scanners/go.rb | 208 - .../lib/coderay/scanners/groovy.rb | 268 - .../lib/coderay/scanners/haml.rb | 168 - .../lib/coderay/scanners/html.rb | 275 - .../lib/coderay/scanners/java.rb | 174 - .../coderay/scanners/java/builtin_types.rb | 421 - .../lib/coderay/scanners/java_script.rb | 236 - .../lib/coderay/scanners/json.rb | 98 - .../coderay-1.1.3/lib/coderay/scanners/lua.rb | 280 - .../coderay-1.1.3/lib/coderay/scanners/php.rb | 527 - .../lib/coderay/scanners/python.rb | 287 - .../lib/coderay/scanners/raydebug.rb | 75 - .../lib/coderay/scanners/ruby.rb | 477 - .../lib/coderay/scanners/ruby/patterns.rb | 178 - .../lib/coderay/scanners/ruby/string_state.rb | 79 - .../lib/coderay/scanners/sass.rb | 232 - .../lib/coderay/scanners/scanner.rb | 337 - .../coderay-1.1.3/lib/coderay/scanners/sql.rb | 169 - .../lib/coderay/scanners/taskpaper.rb | 36 - .../lib/coderay/scanners/text.rb | 26 - .../coderay-1.1.3/lib/coderay/scanners/xml.rb | 17 - .../lib/coderay/scanners/yaml.rb | 140 - .../gems/coderay-1.1.3/lib/coderay/styles.rb | 15 - .../coderay-1.1.3/lib/coderay/styles/_map.rb | 7 - .../coderay-1.1.3/lib/coderay/styles/alpha.rb | 153 - .../coderay-1.1.3/lib/coderay/styles/style.rb | 18 - .../coderay-1.1.3/lib/coderay/token_kinds.rb | 85 - .../gems/coderay-1.1.3/lib/coderay/tokens.rb | 164 - .../coderay-1.1.3/lib/coderay/tokens_proxy.rb | 55 - .../gems/coderay-1.1.3/lib/coderay/version.rb | 3 - bundle/ruby/3.2.0/gems/colored2-3.1.2/LICENSE | 23 - .../ruby/3.2.0/gems/colored2-3.1.2/README.md | 93 - .../ruby/3.2.0/gems/colored2-3.1.2/Rakefile | 13 - .../3.2.0/gems/colored2-3.1.2/lib/colored2.rb | 85 - .../lib/colored2/ascii_decorator.rb | 86 - .../gems/colored2-3.1.2/lib/colored2/codes.rb | 63 - .../colored2-3.1.2/lib/colored2/numbers.rb | 11 - .../colored2-3.1.2/lib/colored2/object.rb | 2 - .../colored2-3.1.2/lib/colored2/strings.rb | 2 - .../colored2-3.1.2/lib/colored2/version.rb | 3 - .../spec/colored2/numbers_spec.rb | 26 - .../spec/colored2/object_spec.rb | 24 - .../spec/colored2/strings_spec.rb | 77 - .../gems/colored2-3.1.2/spec/colored2_spec.rb | 23 - .../gems/colored2-3.1.2/spec/spec_helper.rb | 5 - .../gems/concurrent-ruby-1.2.3/CHANGELOG.md | 565 - .../3.2.0/gems/concurrent-ruby-1.2.3/Gemfile | 36 - .../gems/concurrent-ruby-1.2.3/LICENSE.txt | 21 - .../gems/concurrent-ruby-1.2.3/README.md | 407 - .../3.2.0/gems/concurrent-ruby-1.2.3/Rakefile | 319 - .../ConcurrentRubyService.java | 17 - .../ext/AtomicReferenceLibrary.java | 175 - .../ext/JRubyMapBackendLibrary.java | 248 - .../ext/JavaAtomicBooleanLibrary.java | 93 - .../ext/JavaAtomicFixnumLibrary.java | 113 - .../ext/JavaSemaphoreLibrary.java | 189 - .../ext/SynchronizationLibrary.java | 292 - .../ext/jsr166e/ConcurrentHashMap.java | 31 - .../ext/jsr166e/ConcurrentHashMapV8.java | 3863 ---- .../ext/jsr166e/LongAdder.java | 203 - .../ext/jsr166e/Striped64.java | 342 - .../jsr166e/nounsafe/ConcurrentHashMapV8.java | 3800 ---- .../ext/jsr166e/nounsafe/LongAdder.java | 204 - .../ext/jsr166e/nounsafe/Striped64.java | 291 - .../ext/jsr166y/ThreadLocalRandom.java | 199 - .../lib/concurrent-ruby/concurrent-ruby.rb | 5 - .../lib/concurrent-ruby/concurrent.rb | 134 - .../lib/concurrent-ruby/concurrent/agent.rb | 588 - .../lib/concurrent-ruby/concurrent/array.rb | 56 - .../lib/concurrent-ruby/concurrent/async.rb | 449 - .../lib/concurrent-ruby/concurrent/atom.rb | 222 - .../concurrent/atomic/atomic_boolean.rb | 127 - .../concurrent/atomic/atomic_fixnum.rb | 144 - .../atomic/atomic_markable_reference.rb | 167 - .../concurrent/atomic/atomic_reference.rb | 135 - .../concurrent/atomic/count_down_latch.rb | 100 - .../concurrent/atomic/cyclic_barrier.rb | 128 - .../concurrent/atomic/event.rb | 109 - .../concurrent/atomic/fiber_local_var.rb | 109 - .../atomic/java_count_down_latch.rb | 43 - .../concurrent/atomic/locals.rb | 189 - .../concurrent/atomic/lock_local_var.rb | 28 - .../concurrent/atomic/mutex_atomic_boolean.rb | 68 - .../concurrent/atomic/mutex_atomic_fixnum.rb | 81 - .../atomic/mutex_count_down_latch.rb | 44 - .../concurrent/atomic/mutex_semaphore.rb | 131 - .../concurrent/atomic/read_write_lock.rb | 255 - .../atomic/reentrant_read_write_lock.rb | 379 - .../concurrent/atomic/semaphore.rb | 163 - .../concurrent/atomic/thread_local_var.rb | 111 - .../atomic_reference/atomic_direct_update.rb | 37 - .../atomic_reference/mutex_atomic.rb | 67 - .../atomic_reference/numeric_cas_wrapper.rb | 28 - .../lib/concurrent-ruby/concurrent/atomics.rb | 10 - .../collection/copy_on_notify_observer_set.rb | 107 - .../collection/copy_on_write_observer_set.rb | 111 - .../java_non_concurrent_priority_queue.rb | 84 - .../concurrent/collection/lock_free_stack.rb | 160 - .../collection/map/mri_map_backend.rb | 66 - .../map/non_concurrent_map_backend.rb | 148 - .../map/synchronized_map_backend.rb | 85 - .../collection/map/truffleruby_map_backend.rb | 14 - .../non_concurrent_priority_queue.rb | 143 - .../ruby_non_concurrent_priority_queue.rb | 160 - .../concurrent/concern/deprecation.rb | 34 - .../concurrent/concern/dereferenceable.rb | 73 - .../concurrent/concern/logging.rb | 116 - .../concurrent/concern/obligation.rb | 220 - .../concurrent/concern/observable.rb | 110 - .../concurrent/concurrent_ruby.jar | Bin 136759 -> 0 bytes .../concurrent/configuration.rb | 105 - .../concurrent-ruby/concurrent/constants.rb | 8 - .../concurrent-ruby/concurrent/dataflow.rb | 81 - .../lib/concurrent-ruby/concurrent/delay.rb | 199 - .../lib/concurrent-ruby/concurrent/errors.rb | 74 - .../concurrent-ruby/concurrent/exchanger.rb | 353 - .../executor/abstract_executor_service.rb | 131 - .../concurrent/executor/cached_thread_pool.rb | 62 - .../concurrent/executor/executor_service.rb | 185 - .../concurrent/executor/fixed_thread_pool.rb | 224 - .../concurrent/executor/immediate_executor.rb | 66 - .../executor/indirect_immediate_executor.rb | 44 - .../executor/java_executor_service.rb | 104 - .../executor/java_single_thread_executor.rb | 30 - .../executor/java_thread_pool_executor.rb | 145 - .../executor/ruby_executor_service.rb | 82 - .../executor/ruby_single_thread_executor.rb | 21 - .../executor/ruby_thread_pool_executor.rb | 373 - .../concurrent/executor/safe_task_executor.rb | 35 - .../executor/serial_executor_service.rb | 34 - .../executor/serialized_execution.rb | 107 - .../serialized_execution_delegator.rb | 28 - .../executor/simple_executor_service.rb | 103 - .../executor/single_thread_executor.rb | 57 - .../executor/thread_pool_executor.rb | 88 - .../concurrent/executor/timer_set.rb | 176 - .../concurrent-ruby/concurrent/executors.rb | 20 - .../lib/concurrent-ruby/concurrent/future.rb | 141 - .../lib/concurrent-ruby/concurrent/hash.rb | 52 - .../concurrent/immutable_struct.rb | 101 - .../lib/concurrent-ruby/concurrent/ivar.rb | 208 - .../lib/concurrent-ruby/concurrent/map.rb | 350 - .../lib/concurrent-ruby/concurrent/maybe.rb | 229 - .../concurrent/mutable_struct.rb | 239 - .../lib/concurrent-ruby/concurrent/mvar.rb | 242 - .../lib/concurrent-ruby/concurrent/options.rb | 42 - .../lib/concurrent-ruby/concurrent/promise.rb | 580 - .../concurrent-ruby/concurrent/promises.rb | 2178 --- .../concurrent-ruby/concurrent/re_include.rb | 60 - .../concurrent/scheduled_task.rb | 331 - .../lib/concurrent-ruby/concurrent/set.rb | 64 - .../concurrent/settable_struct.rb | 139 - .../concurrent/synchronization.rb | 13 - .../abstract_lockable_object.rb | 102 - .../synchronization/abstract_object.rb | 22 - .../synchronization/abstract_struct.rb | 171 - .../concurrent/synchronization/condition.rb | 62 - .../synchronization/full_memory_barrier.rb | 29 - .../synchronization/jruby_lockable_object.rb | 15 - .../concurrent/synchronization/lock.rb | 38 - .../synchronization/lockable_object.rb | 75 - .../synchronization/mutex_lockable_object.rb | 89 - .../concurrent/synchronization/object.rb | 151 - .../synchronization/safe_initialization.rb | 36 - .../concurrent/synchronization/volatile.rb | 101 - .../thread_safe/synchronized_delegator.rb | 47 - .../concurrent/thread_safe/util.rb | 16 - .../concurrent/thread_safe/util/adder.rb | 74 - .../thread_safe/util/data_structures.rb | 52 - .../thread_safe/util/power_of_two_tuple.rb | 38 - .../concurrent/thread_safe/util/striped64.rb | 246 - .../concurrent/thread_safe/util/volatile.rb | 75 - .../thread_safe/util/xor_shift_random.rb | 50 - .../concurrent-ruby/concurrent/timer_task.rb | 361 - .../lib/concurrent-ruby/concurrent/tuple.rb | 82 - .../lib/concurrent-ruby/concurrent/tvar.rb | 222 - .../concurrent/utility/engine.rb | 45 - .../concurrent/utility/monotonic_time.rb | 19 - .../utility/native_extension_loader.rb | 77 - .../concurrent/utility/native_integer.rb | 54 - .../concurrent/utility/processor_counter.rb | 110 - .../lib/concurrent-ruby/concurrent/version.rb | 3 - .../ruby/3.2.0/gems/cork-0.3.0/CHANGELOG.md | 24 - bundle/ruby/3.2.0/gems/cork-0.3.0/LICENSE | 22 - bundle/ruby/3.2.0/gems/cork-0.3.0/README.md | 55 - bundle/ruby/3.2.0/gems/cork-0.3.0/lib/cork.rb | 5 - .../3.2.0/gems/cork-0.3.0/lib/cork/board.rb | 349 - .../gems/cork-0.3.0/lib/cork/gem_version.rb | 3 - .../gems/cork-0.3.0/lib/cork/text_wrapper.rb | 76 - bundle/ruby/3.2.0/gems/danger-9.4.3/LICENSE | 22 - bundle/ruby/3.2.0/gems/danger-9.4.3/README.md | 93 - .../ruby/3.2.0/gems/danger-9.4.3/bin/danger | 5 - .../lib/assets/DangerfileTemplate | 13 - .../3.2.0/gems/danger-9.4.3/lib/danger.rb | 45 - .../lib/danger/ci_source/appcenter.rb | 55 - .../lib/danger/ci_source/appcircle.rb | 83 - .../lib/danger/ci_source/appveyor.rb | 64 - .../lib/danger/ci_source/azure_pipelines.rb | 61 - .../lib/danger/ci_source/bamboo.rb | 41 - .../danger/ci_source/bitbucket_pipelines.rb | 37 - .../lib/danger/ci_source/bitrise.rb | 78 - .../lib/danger/ci_source/buddybuild.rb | 62 - .../lib/danger/ci_source/buildkite.rb | 51 - .../lib/danger/ci_source/ci_source.rb | 37 - .../lib/danger/ci_source/circle.rb | 94 - .../lib/danger/ci_source/circle_api.rb | 51 - .../lib/danger/ci_source/cirrus.rb | 31 - .../lib/danger/ci_source/code_build.rb | 71 - .../lib/danger/ci_source/codefresh.rb | 47 - .../lib/danger/ci_source/codemagic.rb | 58 - .../lib/danger/ci_source/codeship.rb | 44 - .../lib/danger/ci_source/concourse.rb | 60 - .../danger/ci_source/custom_ci_with_github.rb | 49 - .../lib/danger/ci_source/dotci.rb | 50 - .../lib/danger/ci_source/drone.rb | 71 - .../lib/danger/ci_source/github_actions.rb | 44 - .../lib/danger/ci_source/gitlab_ci.rb | 89 - .../lib/danger/ci_source/jenkins.rb | 148 - .../lib/danger/ci_source/local_git_repo.rb | 117 - .../danger/ci_source/local_only_git_repo.rb | 44 - .../lib/danger/ci_source/screwdriver.rb | 48 - .../lib/danger/ci_source/semaphore.rb | 37 - .../lib/danger/ci_source/support/commits.rb | 19 - .../support/find_repo_info_from_logs.rb | 35 - .../support/find_repo_info_from_url.rb | 43 - .../ci_source/support/local_pull_request.rb | 14 - .../ci_source/support/no_pull_request.rb | 7 - .../danger/ci_source/support/no_repo_info.rb | 5 - .../ci_source/support/pull_request_finder.rb | 190 - .../ci_source/support/remote_pull_request.rb | 15 - .../lib/danger/ci_source/support/repo_info.rb | 10 - .../danger-9.4.3/lib/danger/ci_source/surf.rb | 37 - .../lib/danger/ci_source/teamcity.rb | 163 - .../lib/danger/ci_source/travis.rb | 51 - .../lib/danger/ci_source/xcode_cloud.rb | 38 - .../lib/danger/ci_source/xcode_server.rb | 48 - .../lib/danger/clients/rubygems_client.rb | 14 - .../lib/danger/commands/dangerfile/gem.rb | 43 - .../lib/danger/commands/dangerfile/init.rb | 30 - .../lib/danger/commands/dry_run.rb | 54 - .../danger-9.4.3/lib/danger/commands/init.rb | 297 - .../commands/init_helpers/interviewer.rb | 92 - .../danger-9.4.3/lib/danger/commands/local.rb | 83 - .../commands/local_helpers/http_cache.rb | 38 - .../commands/local_helpers/local_setup.rb | 48 - .../commands/local_helpers/pry_setup.rb | 32 - .../danger/commands/plugins/plugin_json.rb | 44 - .../danger/commands/plugins/plugin_lint.rb | 52 - .../danger/commands/plugins/plugin_readme.rb | 42 - .../danger-9.4.3/lib/danger/commands/pr.rb | 93 - .../lib/danger/commands/runner.rb | 94 - .../lib/danger/commands/staging.rb | 53 - .../lib/danger/commands/systems.rb | 41 - .../bitbucket_server.md.erb | 20 - .../bitbucket_server_inline.md.erb | 15 - .../bitbucket_server_message_group.md.erb | 12 - .../danger/comment_generators/github.md.erb | 55 - .../comment_generators/github_inline.md.erb | 26 - .../danger/comment_generators/gitlab.md.erb | 40 - .../comment_generators/gitlab_inline.md.erb | 21 - .../lib/danger/comment_generators/vsts.md.erb | 20 - .../comment_generators/vsts_inline.md.erb | 17 - .../lib/danger/core_ext/file_list.rb | 18 - .../lib/danger/core_ext/string.rb | 20 - .../lib/danger/danger_core/dangerfile.rb | 348 - .../lib/danger/danger_core/dangerfile_dsl.rb | 29 - .../danger_core/dangerfile_generator.rb | 11 - .../danger/danger_core/environment_manager.rb | 126 - .../lib/danger/danger_core/executor.rb | 91 - .../danger/danger_core/message_aggregator.rb | 50 - .../lib/danger/danger_core/message_group.rb | 68 - .../lib/danger/danger_core/messages/base.rb | 57 - .../danger/danger_core/messages/markdown.rb | 41 - .../danger/danger_core/messages/violation.rb | 53 - .../dangerfile_bitbucket_cloud_plugin.rb | 142 - .../dangerfile_bitbucket_server_plugin.rb | 211 - .../plugins/dangerfile_danger_plugin.rb | 274 - .../plugins/dangerfile_git_plugin.rb | 159 - .../plugins/dangerfile_github_plugin.rb | 264 - .../plugins/dangerfile_gitlab_plugin.rb | 275 - .../plugins/dangerfile_local_only_plugin.rb | 43 - .../plugins/dangerfile_messaging_plugin.rb | 220 - .../plugins/dangerfile_vsts_plugin.rb | 191 - .../lib/danger/danger_core/standard_error.rb | 142 - .../lib/danger/helpers/array_subclass.rb | 61 - .../lib/danger/helpers/comment.rb | 32 - .../lib/danger/helpers/comments_helper.rb | 179 - .../danger/helpers/comments_parsing_helper.rb | 71 - .../lib/danger/helpers/emoji_mapper.rb | 41 - .../danger/helpers/find_max_num_violations.rb | 31 - .../helpers/message_groups_array_helper.rb | 31 - .../danger/plugin_support/gems_resolver.rb | 77 - .../lib/danger/plugin_support/plugin.rb | 52 - .../plugin_support/plugin_file_resolver.rb | 30 - .../danger/plugin_support/plugin_linter.rb | 162 - .../danger/plugin_support/plugin_parser.rb | 199 - .../templates/readme_table.html.erb | 26 - .../danger/request_sources/bitbucket_cloud.rb | 169 - .../request_sources/bitbucket_cloud_api.rb | 181 - .../request_sources/bitbucket_server.rb | 210 - .../request_sources/bitbucket_server_api.rb | 129 - .../request_sources/code_insights_api.rb | 142 - .../danger/request_sources/github/github.rb | 543 - .../request_sources/github/github_review.rb | 127 - .../github/github_review_resolver.rb | 17 - .../github/github_review_unsupported.rb | 23 - .../lib/danger/request_sources/gitlab.rb | 557 - .../lib/danger/request_sources/local_only.rb | 50 - .../danger/request_sources/request_source.rb | 97 - .../support/get_ignored_violation.rb | 17 - .../lib/danger/request_sources/vsts.rb | 278 - .../lib/danger/request_sources/vsts_api.rb | 172 - .../lib/danger/scm_source/git_repo.rb | 198 - .../gems/danger-9.4.3/lib/danger/version.rb | 4 - .../gems/danger-plugin-api-1.0.0/.gitignore | 10 - .../3.2.0/gems/danger-plugin-api-1.0.0/.rspec | 2 - .../gems/danger-plugin-api-1.0.0/.travis.yml | 5 - .../CODE_OF_CONDUCT.md | 49 - .../gems/danger-plugin-api-1.0.0/Gemfile | 4 - .../gems/danger-plugin-api-1.0.0/LICENSE.txt | 21 - .../gems/danger-plugin-api-1.0.0/README.md | 22 - .../gems/danger-plugin-api-1.0.0/Rakefile | 6 - .../gems/danger-plugin-api-1.0.0/bin/console | 14 - .../gems/danger-plugin-api-1.0.0/bin/setup | 8 - .../danger-plugin-api.gemspec | 27 - .../lib/danger/plugin/api.rb | 9 - .../lib/danger/plugin/api/version.rb | 7 - .../3.2.0/gems/danger-prose-2.0.7/.gitignore | 6 - .../3.2.0/gems/danger-prose-2.0.7/.travis.yml | 13 - .../gems/danger-prose-2.0.7/CHANGELOG.md | 20 - .../3.2.0/gems/danger-prose-2.0.7/Gemfile | 11 - .../gems/danger-prose-2.0.7/Gemfile.lock | 127 - .../3.2.0/gems/danger-prose-2.0.7/Guardfile | 21 - .../3.2.0/gems/danger-prose-2.0.7/LICENSE.txt | 22 - .../3.2.0/gems/danger-prose-2.0.7/README.md | 74 - .../3.2.0/gems/danger-prose-2.0.7/Rakefile | 5 - .../danger-prose-2.0.7/danger-prose.gemspec | 44 - .../danger-prose-2.0.7/lib/danger_plugin.rb | 228 - .../gems/danger-prose-2.0.7/lib/proselintrc | 82 - .../gems/danger-prose-2.0.7/lib/version.rb | 3 - .../spec/danger_plugin_spec.rb | 103 - .../spec/fixtures/blog_post.md | 4 - .../danger-prose-2.0.7/spec/spec_helper.rb | 41 - .../.circleci/config.yml | 30 - .../gems/danger-rubocop-0.12.0/.gitignore | 50 - .../3.2.0/gems/danger-rubocop-0.12.0/Gemfile | 12 - .../gems/danger-rubocop-0.12.0/Gemfile.lock | 170 - .../gems/danger-rubocop-0.12.0/Guardfile | 21 - .../3.2.0/gems/danger-rubocop-0.12.0/LICENSE | 21 - .../gems/danger-rubocop-0.12.0/README.md | 75 - .../3.2.0/gems/danger-rubocop-0.12.0/Rakefile | 6 - .../danger-rubocop.gemspec | 45 - .../lib/danger_plugin.rb | 164 - .../gems/danger-rubocop-0.12.0/lib/version.rb | 3 - .../spec/danger_plugin_spec.rb | 420 - .../spec/fixtures/ruby_file.rb | 1 - .../shellescape/ruby_file with spaces.rb | 1 - .../shellescape/ruby_file'with_quotes.rb | 1 - .../ruby_file_with_parens_(abc).rb | 1 - .../danger-rubocop-0.12.0/spec/spec_helper.rb | 44 - .../.dependabot/config.yml | 18 - .../.devcontainer/Dockerfile | 18 - .../.github/dependabot.yml | 12 - .../.github/release-drafter.yml | 40 - .../.github/workflows/ci.yml | 29 - .../.github/workflows/publish.yml | 63 - .../gems/danger-textlint-2.0.4/.gitignore | 4 - .../gems/danger-textlint-2.0.4/.rubocop.yml | 155 - .../3.2.0/gems/danger-textlint-2.0.4/Gemfile | 4 - .../gems/danger-textlint-2.0.4/Gemfile.lock | 172 - .../gems/danger-textlint-2.0.4/Guardfile | 19 - .../gems/danger-textlint-2.0.4/LICENSE.txt | 22 - .../gems/danger-textlint-2.0.4/README.md | 80 - .../3.2.0/gems/danger-textlint-2.0.4/Rakefile | 23 - .../danger-textlint.gemspec | 52 - .../lib/danger_plugin.rb | 1 - .../lib/danger_textlint.rb | 1 - .../lib/textlint/gem_version.rb | 3 - .../lib/textlint/plugin.rb | 115 - .../danger-textlint-2.0.4/spec/spec_helper.rb | 65 - .../spec/textlint_spec.rb | 158 - .../3.2.0/gems/faraday-2.9.0/CHANGELOG.md | 574 - .../ruby/3.2.0/gems/faraday-2.9.0/LICENSE.md | 20 - .../ruby/3.2.0/gems/faraday-2.9.0/README.md | 67 - bundle/ruby/3.2.0/gems/faraday-2.9.0/Rakefile | 9 - .../faraday-2.9.0/examples/client_spec.rb | 119 - .../faraday-2.9.0/examples/client_test.rb | 144 - .../3.2.0/gems/faraday-2.9.0/lib/faraday.rb | 157 - .../gems/faraday-2.9.0/lib/faraday/adapter.rb | 101 - .../faraday-2.9.0/lib/faraday/adapter/test.rb | 311 - .../lib/faraday/adapter_registry.rb | 30 - .../faraday-2.9.0/lib/faraday/connection.rb | 555 - .../faraday/encoders/flat_params_encoder.rb | 105 - .../faraday/encoders/nested_params_encoder.rb | 183 - .../gems/faraday-2.9.0/lib/faraday/error.rb | 161 - .../lib/faraday/logging/formatter.rb | 118 - .../gems/faraday-2.9.0/lib/faraday/methods.rb | 6 - .../faraday-2.9.0/lib/faraday/middleware.rb | 33 - .../lib/faraday/middleware_registry.rb | 83 - .../gems/faraday-2.9.0/lib/faraday/options.rb | 219 - .../lib/faraday/options/connection_options.rb | 23 - .../faraday-2.9.0/lib/faraday/options/env.rb | 204 - .../lib/faraday/options/proxy_options.rb | 36 - .../lib/faraday/options/request_options.rb | 23 - .../lib/faraday/options/ssl_options.rb | 70 - .../faraday-2.9.0/lib/faraday/parameters.rb | 5 - .../faraday-2.9.0/lib/faraday/rack_builder.rb | 251 - .../gems/faraday-2.9.0/lib/faraday/request.rb | 139 - .../lib/faraday/request/authorization.rb | 54 - .../lib/faraday/request/instrumentation.rb | 58 - .../faraday-2.9.0/lib/faraday/request/json.rb | 70 - .../lib/faraday/request/url_encoded.rb | 60 - .../faraday-2.9.0/lib/faraday/response.rb | 91 - .../lib/faraday/response/json.rb | 73 - .../lib/faraday/response/logger.rb | 37 - .../lib/faraday/response/raise_error.rb | 83 - .../gems/faraday-2.9.0/lib/faraday/utils.rb | 121 - .../lib/faraday/utils/headers.rb | 144 - .../lib/faraday/utils/params_hash.rb | 61 - .../gems/faraday-2.9.0/lib/faraday/version.rb | 5 - .../external_adapters/faraday_specs_setup.rb | 14 - .../spec/faraday/adapter/test_spec.rb | 442 - .../spec/faraday/adapter_registry_spec.rb | 28 - .../spec/faraday/adapter_spec.rb | 55 - .../spec/faraday/connection_spec.rb | 808 - .../faraday-2.9.0/spec/faraday/error_spec.rb | 85 - .../spec/faraday/middleware_registry_spec.rb | 31 - .../spec/faraday/middleware_spec.rb | 70 - .../spec/faraday/options/env_spec.rb | 76 - .../spec/faraday/options/options_spec.rb | 297 - .../faraday/options/proxy_options_spec.rb | 52 - .../faraday/options/request_options_spec.rb | 19 - .../spec/faraday/params_encoders/flat_spec.rb | 42 - .../faraday/params_encoders/nested_spec.rb | 150 - .../spec/faraday/rack_builder_spec.rb | 317 - .../faraday/request/authorization_spec.rb | 118 - .../faraday/request/instrumentation_spec.rb | 74 - .../spec/faraday/request/json_spec.rb | 199 - .../spec/faraday/request/url_encoded_spec.rb | 93 - .../spec/faraday/request_spec.rb | 110 - .../spec/faraday/response/json_spec.rb | 189 - .../spec/faraday/response/logger_spec.rb | 258 - .../spec/faraday/response/raise_error_spec.rb | 211 - .../spec/faraday/response_spec.rb | 77 - .../spec/faraday/utils/headers_spec.rb | 100 - .../faraday-2.9.0/spec/faraday/utils_spec.rb | 118 - .../gems/faraday-2.9.0/spec/faraday_spec.rb | 41 - .../gems/faraday-2.9.0/spec/spec_helper.rb | 133 - .../spec/support/disabling_stub.rb | 14 - .../spec/support/fake_safe_buffer.rb | 15 - .../spec/support/helper_methods.rb | 96 - .../spec/support/shared_examples/adapter.rb | 105 - .../support/shared_examples/params_encoder.rb | 18 - .../support/shared_examples/request_method.rb | 263 - .../support/streaming_response_checker.rb | 35 - .../gems/faraday-http-cache-2.5.1/LICENSE | 11 - .../gems/faraday-http-cache-2.5.1/README.md | 206 - .../lib/faraday-http-cache.rb | 1 - .../lib/faraday/http_cache.rb | 356 - .../lib/faraday/http_cache/cache_control.rb | 122 - .../lib/faraday/http_cache/memory_store.rb | 26 - .../lib/faraday/http_cache/request.rb | 50 - .../lib/faraday/http_cache/response.rb | 235 - .../lib/faraday/http_cache/storage.rb | 16 - .../lib/faraday/http_cache/strategies.rb | 4 - .../http_cache/strategies/base_strategy.rb | 94 - .../faraday/http_cache/strategies/by_url.rb | 118 - .../faraday/http_cache/strategies/by_vary.rb | 86 - .../spec/binary_spec.rb | 20 - .../spec/cache_control_spec.rb | 109 - .../spec/http_cache_spec.rb | 296 - .../spec/instrumentation_spec.rb | 82 - .../spec/json_spec.rb | 21 - .../spec/request_spec.rb | 49 - .../spec/response_spec.rb | 250 - .../spec/spec_helper.rb | 34 - .../spec/storage_spec.rb | 161 - .../spec/strategies/base_strategy_spec.rb | 27 - .../spec/strategies/by_url_spec.rb | 163 - .../spec/strategies/by_vary_spec.rb | 145 - .../spec/support/empty.png | Bin 266 -> 0 bytes .../spec/support/test_app.rb | 134 - .../spec/support/test_server.rb | 68 - .../spec/validation_spec.rb | 38 - .../gems/faraday-net_http-3.1.0/LICENSE.md | 21 - .../gems/faraday-net_http-3.1.0/README.md | 57 - .../lib/faraday/adapter/net_http.rb | 202 - .../lib/faraday/net_http.rb | 10 - .../lib/faraday/net_http/version.rb | 7 - .../3.2.0/gems/git-1.19.1/.github/stale.yml | 25 - .../workflows/continuous_integration.yml | 49 - bundle/ruby/3.2.0/gems/git-1.19.1/.gitignore | 10 - bundle/ruby/3.2.0/gems/git-1.19.1/.yardopts | 11 - .../ruby/3.2.0/gems/git-1.19.1/CHANGELOG.md | 285 - .../3.2.0/gems/git-1.19.1/CONTRIBUTING.md | 163 - .../gems/git-1.19.1/Dockerfile.changelog-rs | 12 - bundle/ruby/3.2.0/gems/git-1.19.1/Gemfile | 5 - .../3.2.0/gems/git-1.19.1/ISSUE_TEMPLATE.md | 15 - bundle/ruby/3.2.0/gems/git-1.19.1/LICENSE | 21 - .../ruby/3.2.0/gems/git-1.19.1/MAINTAINERS.md | 12 - .../gems/git-1.19.1/PULL_REQUEST_TEMPLATE.md | 9 - bundle/ruby/3.2.0/gems/git-1.19.1/README.md | 427 - .../ruby/3.2.0/gems/git-1.19.1/RELEASING.md | 70 - bundle/ruby/3.2.0/gems/git-1.19.1/Rakefile | 60 - bundle/ruby/3.2.0/gems/git-1.19.1/git.gemspec | 52 - bundle/ruby/3.2.0/gems/git-1.19.1/lib/git.rb | 383 - .../3.2.0/gems/git-1.19.1/lib/git/author.rb | 14 - .../3.2.0/gems/git-1.19.1/lib/git/base.rb | 711 - .../gems/git-1.19.1/lib/git/base/factory.rb | 99 - .../3.2.0/gems/git-1.19.1/lib/git/branch.rb | 143 - .../3.2.0/gems/git-1.19.1/lib/git/branches.rb | 71 - .../git-1.19.1/lib/git/command_line_result.rb | 86 - .../3.2.0/gems/git-1.19.1/lib/git/config.rb | 22 - .../3.2.0/gems/git-1.19.1/lib/git/diff.rb | 155 - .../gems/git-1.19.1/lib/git/encoding_utils.rb | 33 - .../gems/git-1.19.1/lib/git/escaped_path.rb | 77 - .../gems/git-1.19.1/lib/git/failed_error.rb | 53 - .../git-1.19.1/lib/git/git_execute_error.rb | 7 - .../3.2.0/gems/git-1.19.1/lib/git/index.rb | 5 - .../ruby/3.2.0/gems/git-1.19.1/lib/git/lib.rb | 1328 -- .../ruby/3.2.0/gems/git-1.19.1/lib/git/log.rb | 131 - .../3.2.0/gems/git-1.19.1/lib/git/object.rb | 312 - .../3.2.0/gems/git-1.19.1/lib/git/path.rb | 31 - .../3.2.0/gems/git-1.19.1/lib/git/remote.rb | 38 - .../gems/git-1.19.1/lib/git/repository.rb | 6 - .../gems/git-1.19.1/lib/git/signaled_error.rb | 50 - .../3.2.0/gems/git-1.19.1/lib/git/stash.rb | 27 - .../3.2.0/gems/git-1.19.1/lib/git/stashes.rb | 55 - .../3.2.0/gems/git-1.19.1/lib/git/status.rb | 198 - .../ruby/3.2.0/gems/git-1.19.1/lib/git/url.rb | 127 - .../3.2.0/gems/git-1.19.1/lib/git/version.rb | 5 - .../git-1.19.1/lib/git/working_directory.rb | 4 - .../3.2.0/gems/git-1.19.1/lib/git/worktree.rb | 38 - .../gems/git-1.19.1/lib/git/worktrees.rb | 47 - bundle/ruby/3.2.0/gems/json-2.7.1/CHANGES.md | 503 - bundle/ruby/3.2.0/gems/json-2.7.1/LICENSE | 56 - bundle/ruby/3.2.0/gems/json-2.7.1/README.md | 425 - .../3.2.0/gems/json-2.7.1/ext/json/Makefile | 205 - .../json-2.7.1/ext/json/ext/fbuffer/fbuffer.h | 187 - .../ext/json/ext/generator/Makefile | 270 - .../json-2.7.1/ext/json/ext/generator/depend | 1 - .../ext/json/ext/generator/extconf.rb | 4 - .../ext/json/ext/generator/generator.c | 1673 -- .../ext/json/ext/generator/generator.h | 177 - .../json-2.7.1/ext/json/ext/parser/Makefile | 270 - .../json-2.7.1/ext/json/ext/parser/depend | 1 - .../json-2.7.1/ext/json/ext/parser/extconf.rb | 32 - .../json-2.7.1/ext/json/ext/parser/parser.c | 2211 --- .../json-2.7.1/ext/json/ext/parser/parser.h | 96 - .../json-2.7.1/ext/json/ext/parser/parser.rl | 971 - .../3.2.0/gems/json-2.7.1/ext/json/extconf.rb | 3 - .../ruby/3.2.0/gems/json-2.7.1/json.gemspec | 68 - bundle/ruby/3.2.0/gems/json-2.7.1/lib/json.rb | 592 - .../json-2.7.1/lib/json/add/bigdecimal.rb | 58 - .../gems/json-2.7.1/lib/json/add/complex.rb | 51 - .../gems/json-2.7.1/lib/json/add/core.rb | 12 - .../gems/json-2.7.1/lib/json/add/date.rb | 54 - .../gems/json-2.7.1/lib/json/add/date_time.rb | 67 - .../gems/json-2.7.1/lib/json/add/exception.rb | 49 - .../gems/json-2.7.1/lib/json/add/ostruct.rb | 51 - .../gems/json-2.7.1/lib/json/add/range.rb | 54 - .../gems/json-2.7.1/lib/json/add/rational.rb | 49 - .../gems/json-2.7.1/lib/json/add/regexp.rb | 48 - .../3.2.0/gems/json-2.7.1/lib/json/add/set.rb | 48 - .../gems/json-2.7.1/lib/json/add/struct.rb | 52 - .../gems/json-2.7.1/lib/json/add/symbol.rb | 48 - .../gems/json-2.7.1/lib/json/add/time.rb | 59 - .../3.2.0/gems/json-2.7.1/lib/json/common.rb | 697 - .../3.2.0/gems/json-2.7.1/lib/json/ext.rb | 15 - .../gems/json-2.7.1/lib/json/ext/generator.so | Bin 215720 -> 0 bytes .../gems/json-2.7.1/lib/json/ext/parser.so | Bin 148112 -> 0 bytes .../json-2.7.1/lib/json/generic_object.rb | 71 - .../3.2.0/gems/json-2.7.1/lib/json/pure.rb | 15 - .../json-2.7.1/lib/json/pure/generator.rb | 513 - .../gems/json-2.7.1/lib/json/pure/parser.rb | 337 - .../3.2.0/gems/json-2.7.1/lib/json/version.rb | 9 - bundle/ruby/3.2.0/gems/kramdown-2.4.0/AUTHORS | 1 - .../3.2.0/gems/kramdown-2.4.0/CONTRIBUTERS | 84 - bundle/ruby/3.2.0/gems/kramdown-2.4.0/COPYING | 30 - .../ruby/3.2.0/gems/kramdown-2.4.0/README.md | 77 - bundle/ruby/3.2.0/gems/kramdown-2.4.0/VERSION | 1 - .../3.2.0/gems/kramdown-2.4.0/bin/kramdown | 132 - .../data/kramdown/document.html | 22 - .../data/kramdown/document.latex | 50 - .../3.2.0/gems/kramdown-2.4.0/lib/kramdown.rb | 10 - .../kramdown-2.4.0/lib/kramdown/converter.rb | 68 - .../lib/kramdown/converter/base.rb | 257 - .../lib/kramdown/converter/hash_ast.rb | 38 - .../lib/kramdown/converter/html.rb | 537 - .../lib/kramdown/converter/kramdown.rb | 453 - .../lib/kramdown/converter/latex.rb | 625 - .../lib/kramdown/converter/man.rb | 300 - .../kramdown/converter/math_engine/mathjax.rb | 32 - .../kramdown/converter/remove_html_tags.rb | 57 - .../kramdown/converter/syntax_highlighter.rb | 56 - .../converter/syntax_highlighter/minted.rb | 35 - .../converter/syntax_highlighter/rouge.rb | 85 - .../lib/kramdown/converter/toc.rb | 69 - .../kramdown-2.4.0/lib/kramdown/document.rb | 139 - .../kramdown-2.4.0/lib/kramdown/element.rb | 551 - .../gems/kramdown-2.4.0/lib/kramdown/error.rb | 17 - .../kramdown-2.4.0/lib/kramdown/options.rb | 617 - .../kramdown-2.4.0/lib/kramdown/parser.rb | 26 - .../lib/kramdown/parser/base.rb | 131 - .../lib/kramdown/parser/html.rb | 615 - .../lib/kramdown/parser/kramdown.rb | 376 - .../kramdown/parser/kramdown/abbreviation.rb | 78 - .../lib/kramdown/parser/kramdown/autolink.rb | 31 - .../kramdown/parser/kramdown/blank_line.rb | 30 - .../parser/kramdown/block_boundary.rb | 34 - .../kramdown/parser/kramdown/blockquote.rb | 38 - .../lib/kramdown/parser/kramdown/codeblock.rb | 57 - .../lib/kramdown/parser/kramdown/codespan.rb | 58 - .../lib/kramdown/parser/kramdown/emphasis.rb | 61 - .../lib/kramdown/parser/kramdown/eob.rb | 26 - .../kramdown/parser/kramdown/escaped_chars.rb | 25 - .../kramdown/parser/kramdown/extensions.rb | 214 - .../lib/kramdown/parser/kramdown/footnote.rb | 64 - .../lib/kramdown/parser/kramdown/header.rb | 70 - .../parser/kramdown/horizontal_rule.rb | 27 - .../lib/kramdown/parser/kramdown/html.rb | 162 - .../kramdown/parser/kramdown/html_entity.rb | 34 - .../kramdown/parser/kramdown/line_break.rb | 25 - .../lib/kramdown/parser/kramdown/link.rb | 149 - .../lib/kramdown/parser/kramdown/list.rb | 285 - .../lib/kramdown/parser/kramdown/math.rb | 53 - .../lib/kramdown/parser/kramdown/paragraph.rb | 62 - .../kramdown/parser/kramdown/smart_quotes.rb | 174 - .../lib/kramdown/parser/kramdown/table.rb | 171 - .../parser/kramdown/typographic_symbol.rb | 44 - .../lib/kramdown/parser/markdown.rb | 57 - .../gems/kramdown-2.4.0/lib/kramdown/utils.rb | 45 - .../lib/kramdown/utils/configurable.rb | 45 - .../lib/kramdown/utils/entities.rb | 344 - .../kramdown-2.4.0/lib/kramdown/utils/html.rb | 84 - .../lib/kramdown/utils/lru_cache.rb | 41 - .../lib/kramdown/utils/string_scanner.rb | 81 - .../lib/kramdown/utils/unidecoder.rb | 50 - .../kramdown-2.4.0/lib/kramdown/version.rb | 15 - .../gems/kramdown-2.4.0/man/man1/kramdown.1 | 355 - .../gems/kramdown-2.4.0/test/run_tests.rb | 46 - .../gems/kramdown-2.4.0/test/test_files.rb | 305 - .../gems/kramdown-2.4.0/test/test_location.rb | 216 - .../test/test_string_scanner_kramdown.rb | 27 - .../testcases/block/01_blank_line/spaces.html | 1 - .../testcases/block/01_blank_line/spaces.text | 3 - .../testcases/block/01_blank_line/tabs.html | 1 - .../testcases/block/01_blank_line/tabs.text | 6 - .../testcases/block/02_eob/beginning.html | 1 - .../testcases/block/02_eob/beginning.text | 3 - .../test/testcases/block/02_eob/end.html | 1 - .../test/testcases/block/02_eob/end.text | 3 - .../test/testcases/block/02_eob/middle.html | 1 - .../test/testcases/block/02_eob/middle.text | 5 - .../block/03_paragraph/indented.html | 18 - .../block/03_paragraph/indented.html.gfm | 18 - .../block/03_paragraph/indented.text | 19 - .../03_paragraph/line_break_last_line.html | 9 - .../03_paragraph/line_break_last_line.text | 9 - .../block/03_paragraph/no_newline_at_end.html | 5 - .../block/03_paragraph/no_newline_at_end.text | 5 - .../block/03_paragraph/one_para.html | 1 - .../block/03_paragraph/one_para.text | 1 - .../block/03_paragraph/standalone_image.html | 13 - .../block/03_paragraph/standalone_image.text | 9 - .../block/03_paragraph/to_kramdown.kramdown | 7 - .../block/03_paragraph/to_kramdown.text | 5 - .../block/03_paragraph/two_para.html | 4 - .../block/03_paragraph/two_para.text | 4 - .../03_paragraph/with_html_to_native.html | 1 - .../03_paragraph/with_html_to_native.options | 1 - .../03_paragraph/with_html_to_native.text | 1 - .../testcases/block/04_header/atx_header.html | 57 - .../testcases/block/04_header/atx_header.text | 54 - .../atx_header_no_newline_at_end.html | 1 - .../atx_header_no_newline_at_end.text | 1 - .../block/04_header/header_type_offset.html | 11 - .../04_header/header_type_offset.kramdown | 12 - .../block/04_header/header_type_offset.latex | 12 - .../04_header/header_type_offset.options | 2 - .../block/04_header/header_type_offset.text | 13 - .../block/04_header/setext_header.html | 32 - .../block/04_header/setext_header.text | 39 - .../setext_header_no_newline_at_end.html | 1 - .../setext_header_no_newline_at_end.text | 2 - .../block/04_header/with_auto_id_prefix.html | 3 - .../04_header/with_auto_id_prefix.options | 2 - .../block/04_header/with_auto_id_prefix.text | 3 - .../04_header/with_auto_id_stripping.html | 1 - .../04_header/with_auto_id_stripping.options | 1 - .../04_header/with_auto_id_stripping.text | 1 - .../block/04_header/with_auto_ids.html | 21 - .../block/04_header/with_auto_ids.options | 2 - .../block/04_header/with_auto_ids.text | 24 - .../block/05_blockquote/indented.html | 25 - .../block/05_blockquote/indented.text | 14 - .../testcases/block/05_blockquote/lazy.html | 34 - .../testcases/block/05_blockquote/lazy.text | 20 - .../testcases/block/05_blockquote/nested.html | 10 - .../testcases/block/05_blockquote/nested.text | 6 - .../05_blockquote/no_newline_at_end.html | 4 - .../05_blockquote/no_newline_at_end.text | 2 - .../block/05_blockquote/very_long_line.html | 3 - .../block/05_blockquote/very_long_line.text | 1 - .../block/05_blockquote/with_code_blocks.html | 15 - .../block/05_blockquote/with_code_blocks.text | 11 - .../06_codeblock/disable-highlighting.html | 4 - .../06_codeblock/disable-highlighting.options | 1 - .../06_codeblock/disable-highlighting.text | 4 - .../testcases/block/06_codeblock/error.html | 4 - .../testcases/block/06_codeblock/error.text | 4 - .../06_codeblock/guess_lang_css_class.html | 15 - .../06_codeblock/guess_lang_css_class.options | 2 - .../06_codeblock/guess_lang_css_class.text | 13 - .../highlighting-minted-with-opts.latex | 9 - .../highlighting-minted-with-opts.options | 4 - .../highlighting-minted-with-opts.text | 5 - .../06_codeblock/highlighting-minted.latex | 8 - .../06_codeblock/highlighting-minted.options | 3 - .../06_codeblock/highlighting-minted.text | 4 - .../block/06_codeblock/highlighting-opts.html | 6 - .../06_codeblock/highlighting-opts.options | 7 - .../block/06_codeblock/highlighting-opts.text | 4 - .../block/06_codeblock/highlighting.html | 5 - .../block/06_codeblock/highlighting.options | 5 - .../block/06_codeblock/highlighting.text | 4 - .../block/06_codeblock/issue_gh45.html | 164 - .../block/06_codeblock/issue_gh45.test | 188 - .../testcases/block/06_codeblock/lazy.html | 4 - .../testcases/block/06_codeblock/lazy.text | 5 - .../block/06_codeblock/no_newline_at_end.html | 2 - .../block/06_codeblock/no_newline_at_end.text | 1 - .../06_codeblock/no_newline_at_end_1.html | 2 - .../06_codeblock/no_newline_at_end_1.text | 2 - .../testcases/block/06_codeblock/normal.html | 13 - .../testcases/block/06_codeblock/normal.text | 10 - .../block/06_codeblock/rouge/disabled.html | 2 - .../block/06_codeblock/rouge/disabled.options | 4 - .../block/06_codeblock/rouge/disabled.text | 1 - .../block/06_codeblock/rouge/multiple.html | 11 - .../block/06_codeblock/rouge/multiple.options | 4 - .../block/06_codeblock/rouge/multiple.text | 11 - .../block/06_codeblock/rouge/simple.html | 10 - .../block/06_codeblock/rouge/simple.options | 3 - .../block/06_codeblock/rouge/simple.text | 9 - .../block/06_codeblock/tilde_syntax.html | 7 - .../block/06_codeblock/tilde_syntax.text | 9 - .../block/06_codeblock/whitespace.html | 3 - .../block/06_codeblock/whitespace.text | 3 - .../block/06_codeblock/with_blank_line.html | 13 - .../block/06_codeblock/with_blank_line.text | 12 - .../block/06_codeblock/with_eob_marker.html | 6 - .../block/06_codeblock/with_eob_marker.text | 5 - .../block/06_codeblock/with_ial.html | 6 - .../block/06_codeblock/with_ial.text | 5 - .../with_lang_in_fenced_block.html | 24 - .../with_lang_in_fenced_block.options | 2 - .../with_lang_in_fenced_block.text | 33 - .../with_lang_in_fenced_block_any_char.html | 8 - ...with_lang_in_fenced_block_any_char.options | 2 - .../with_lang_in_fenced_block_any_char.text | 11 - ...h_lang_in_fenced_block_name_with_dash.html | 3 - ...ang_in_fenced_block_name_with_dash.options | 2 - ...h_lang_in_fenced_block_name_with_dash.text | 4 - .../block/07_horizontal_rule/error.html | 7 - .../block/07_horizontal_rule/error.text | 7 - .../block/07_horizontal_rule/normal.html | 19 - .../block/07_horizontal_rule/normal.text | 20 - .../block/07_horizontal_rule/sepspaces.html | 3 - .../block/07_horizontal_rule/sepspaces.text | 3 - .../block/07_horizontal_rule/septabs.html | 3 - .../block/07_horizontal_rule/septabs.text | 3 - .../block/08_list/brackets_in_item.latex | 3 - .../block/08_list/brackets_in_item.text | 1 - .../testcases/block/08_list/escaping.html | 17 - .../testcases/block/08_list/escaping.text | 17 - .../testcases/block/08_list/item_ial.html | 10 - .../testcases/block/08_list/item_ial.text | 8 - .../test/testcases/block/08_list/lazy.html | 39 - .../test/testcases/block/08_list/lazy.text | 29 - .../block/08_list/lazy_and_nested.html | 9 - .../block/08_list/lazy_and_nested.text | 4 - .../testcases/block/08_list/list_and_hr.html | 9 - .../testcases/block/08_list/list_and_hr.text | 5 - .../block/08_list/list_and_others.html | 40 - .../block/08_list/list_and_others.text | 26 - .../test/testcases/block/08_list/mixed.html | 117 - .../test/testcases/block/08_list/mixed.text | 66 - .../test/testcases/block/08_list/nested.html | 17 - .../test/testcases/block/08_list/nested.text | 7 - .../block/08_list/other_first_element.html | 39 - .../block/08_list/other_first_element.text | 18 - .../testcases/block/08_list/simple_ol.html | 19 - .../testcases/block/08_list/simple_ol.text | 13 - .../testcases/block/08_list/simple_ul.html | 48 - .../testcases/block/08_list/simple_ul.text | 36 - .../testcases/block/08_list/single_item.html | 3 - .../testcases/block/08_list/single_item.text | 1 - .../block/08_list/special_cases.html | 62 - .../block/08_list/special_cases.text | 40 - .../test/testcases/block/09_html/comment.html | 18 - .../test/testcases/block/09_html/comment.text | 15 - .../block/09_html/content_model/deflists.html | 6 - .../09_html/content_model/deflists.options | 1 - .../block/09_html/content_model/deflists.text | 6 - .../block/09_html/content_model/tables.html | 14 - .../09_html/content_model/tables.options | 1 - .../block/09_html/content_model/tables.text | 14 - .../block/09_html/html5_attributes.html | 15 - .../block/09_html/html5_attributes.text | 15 - .../block/09_html/html_after_block.html | 7 - .../block/09_html/html_after_block.text | 5 - .../block/09_html/html_and_codeblocks.html | 15 - .../block/09_html/html_and_codeblocks.options | 1 - .../block/09_html/html_and_codeblocks.text | 13 - .../block/09_html/html_and_headers.html | 5 - .../block/09_html/html_and_headers.text | 6 - .../block/09_html/html_to_native/code.html | 10 - .../block/09_html/html_to_native/code.text | 9 - .../block/09_html/html_to_native/comment.html | 7 - .../block/09_html/html_to_native/comment.text | 8 - .../09_html/html_to_native/emphasis.html | 6 - .../09_html/html_to_native/emphasis.text | 6 - .../block/09_html/html_to_native/entity.html | 1 - .../block/09_html/html_to_native/entity.text | 1 - .../block/09_html/html_to_native/header.html | 6 - .../09_html/html_to_native/header.options | 2 - .../block/09_html/html_to_native/header.text | 6 - .../block/09_html/html_to_native/list_dl.html | 8 - .../block/09_html/html_to_native/list_dl.text | 8 - .../block/09_html/html_to_native/list_ol.html | 15 - .../block/09_html/html_to_native/list_ol.text | 17 - .../block/09_html/html_to_native/list_ul.html | 19 - .../block/09_html/html_to_native/list_ul.text | 22 - .../block/09_html/html_to_native/options | 1 - .../09_html/html_to_native/paragraph.html | 3 - .../09_html/html_to_native/paragraph.text | 4 - .../09_html/html_to_native/table_normal.html | 12 - .../09_html/html_to_native/table_normal.text | 12 - .../09_html/html_to_native/table_simple.html | 61 - .../09_html/html_to_native/table_simple.text | 71 - .../09_html/html_to_native/typography.html | 1 - .../09_html/html_to_native/typography.text | 1 - .../block/09_html/invalid_html_1.html | 5 - .../block/09_html/invalid_html_1.text | 5 - .../block/09_html/invalid_html_2.html | 5 - .../block/09_html/invalid_html_2.text | 5 - .../block/09_html/markdown_attr.html | 38 - .../block/09_html/markdown_attr.text | 38 - .../testcases/block/09_html/not_parsed.html | 24 - .../testcases/block/09_html/not_parsed.text | 24 - .../testcases/block/09_html/parse_as_raw.html | 35 - .../block/09_html/parse_as_raw.htmlinput | 34 - .../block/09_html/parse_as_raw.options | 1 - .../testcases/block/09_html/parse_as_raw.text | 33 - .../block/09_html/parse_as_span.html | 12 - .../block/09_html/parse_as_span.htmlinput | 12 - .../block/09_html/parse_as_span.options | 1 - .../block/09_html/parse_as_span.text | 9 - .../block/09_html/parse_block_html.html | 21 - .../block/09_html/parse_block_html.options | 1 - .../block/09_html/parse_block_html.text | 17 - .../block/09_html/processing_instruction.html | 12 - .../block/09_html/processing_instruction.text | 12 - .../test/testcases/block/09_html/simple.html | 60 - .../testcases/block/09_html/simple.options | 1 - .../test/testcases/block/09_html/simple.text | 55 - .../09_html/standalone_image_in_div.htmlinput | 7 - .../09_html/standalone_image_in_div.text | 8 - .../testcases/block/09_html/table.kramdown | 8 - .../test/testcases/block/09_html/table.text | 7 - .../testcases/block/09_html/textarea.html | 8 - .../testcases/block/09_html/textarea.text | 8 - .../test/testcases/block/09_html/xml.html | 8 - .../test/testcases/block/09_html/xml.text | 7 - .../test/testcases/block/10_ald/simple.html | 2 - .../test/testcases/block/10_ald/simple.text | 8 - .../block/11_ial/auto_id_and_ial.html | 1 - .../block/11_ial/auto_id_and_ial.options | 1 - .../block/11_ial/auto_id_and_ial.text | 2 - .../test/testcases/block/11_ial/nested.html | 11 - .../test/testcases/block/11_ial/nested.text | 15 - .../test/testcases/block/11_ial/simple.html | 29 - .../test/testcases/block/11_ial/simple.text | 41 - .../testcases/block/12_extension/comment.html | 8 - .../testcases/block/12_extension/comment.text | 12 - .../testcases/block/12_extension/ignored.html | 8 - .../testcases/block/12_extension/ignored.text | 8 - .../block/12_extension/nomarkdown.html | 10 - .../block/12_extension/nomarkdown.kramdown | 20 - .../block/12_extension/nomarkdown.latex | 13 - .../block/12_extension/nomarkdown.text | 21 - .../testcases/block/12_extension/options.html | 21 - .../testcases/block/12_extension/options.text | 23 - .../block/12_extension/options2.html | 10 - .../block/12_extension/options2.text | 5 - .../block/12_extension/options3.html | 8 - .../block/12_extension/options3.text | 7 - .../block/13_definition_list/auto_ids.html | 15 - .../block/13_definition_list/auto_ids.text | 18 - .../definition_at_beginning.html | 1 - .../definition_at_beginning.text | 1 - .../block/13_definition_list/deflist_ial.html | 4 - .../block/13_definition_list/deflist_ial.text | 4 - .../block/13_definition_list/item_ial.html | 17 - .../block/13_definition_list/item_ial.text | 16 - .../13_definition_list/multiple_terms.html | 13 - .../13_definition_list/multiple_terms.text | 10 - .../block/13_definition_list/no_def_list.html | 2 - .../block/13_definition_list/no_def_list.text | 2 - .../13_definition_list/para_wrapping.html | 10 - .../13_definition_list/para_wrapping.text | 6 - .../13_definition_list/separated_by_eob.html | 8 - .../13_definition_list/separated_by_eob.text | 5 - .../block/13_definition_list/simple.html | 10 - .../block/13_definition_list/simple.text | 10 - .../13_definition_list/styled_terms.html | 4 - .../13_definition_list/styled_terms.text | 2 - .../13_definition_list/too_much_space.html | 3 - .../13_definition_list/too_much_space.text | 4 - .../block/13_definition_list/with_blocks.html | 38 - .../block/13_definition_list/with_blocks.text | 24 - .../block/14_table/empty_tag_in_cell.html | 8 - .../block/14_table/empty_tag_in_cell.options | 1 - .../block/14_table/empty_tag_in_cell.text | 1 - .../test/testcases/block/14_table/errors.html | 12 - .../test/testcases/block/14_table/errors.text | 13 - .../testcases/block/14_table/escaping.html | 52 - .../testcases/block/14_table/escaping.text | 19 - .../test/testcases/block/14_table/footer.html | 65 - .../test/testcases/block/14_table/footer.text | 25 - .../test/testcases/block/14_table/header.html | 117 - .../test/testcases/block/14_table/header.text | 39 - .../testcases/block/14_table/no_table.html | 3 - .../testcases/block/14_table/no_table.text | 3 - .../test/testcases/block/14_table/simple.html | 192 - .../test/testcases/block/14_table/simple.text | 53 - .../block/14_table/table_with_footnote.html | 25 - .../block/14_table/table_with_footnote.latex | 11 - .../block/14_table/table_with_footnote.text | 6 - .../test/testcases/block/15_math/gh_128.html | 1 - .../test/testcases/block/15_math/gh_128.text | 1 - .../testcases/block/15_math/no_engine.html | 3 - .../testcases/block/15_math/no_engine.options | 1 - .../testcases/block/15_math/no_engine.text | 2 - .../test/testcases/block/15_math/normal.html | 30 - .../test/testcases/block/15_math/normal.text | 30 - .../test/testcases/block/16_toc/no_toc.html | 14 - .../test/testcases/block/16_toc/no_toc.text | 16 - .../testcases/block/16_toc/toc_exclude.html | 35 - .../block/16_toc/toc_exclude.options | 1 - .../testcases/block/16_toc/toc_exclude.text | 19 - .../testcases/block/16_toc/toc_levels.html | 24 - .../testcases/block/16_toc/toc_levels.options | 2 - .../testcases/block/16_toc/toc_levels.text | 16 - .../block/16_toc/toc_with_footnotes.html | 13 - .../block/16_toc/toc_with_footnotes.options | 1 - .../block/16_toc/toc_with_footnotes.text | 6 - .../block/16_toc/toc_with_links.html | 8 - .../block/16_toc/toc_with_links.options | 2 - .../block/16_toc/toc_with_links.text | 8 - .../test/testcases/cjk-line-break.html | 4 - .../test/testcases/cjk-line-break.options | 1 - .../test/testcases/cjk-line-break.text | 12 - .../test/testcases/encoding.html | 46 - .../test/testcases/encoding.text | 28 - .../test/testcases/man/example.man | 123 - .../test/testcases/man/example.text | 85 - .../man/heading-name-dash-description.man | 4 - .../man/heading-name-dash-description.text | 1 - .../man/heading-name-description.man | 4 - .../man/heading-name-description.text | 2 - .../man/heading-name-section-description.man | 4 - .../man/heading-name-section-description.text | 1 - .../testcases/man/heading-name-section.man | 2 - .../testcases/man/heading-name-section.text | 1 - .../test/testcases/man/heading-name.man | 2 - .../test/testcases/man/heading-name.text | 1 - .../test/testcases/man/sections.man | 4 - .../test/testcases/man/sections.text | 11 - .../test/testcases/man/text-escaping.man | 8 - .../test/testcases/man/text-escaping.text | 7 - .../test/testcases/span/01_link/empty.html | 5 - .../test/testcases/span/01_link/empty.text | 5 - .../span/01_link/empty_title.htmlinput | 3 - .../testcases/span/01_link/empty_title.text | 7 - .../testcases/span/01_link/image_in_a.html | 5 - .../testcases/span/01_link/image_in_a.text | 5 - .../testcases/span/01_link/imagelinks.html | 15 - .../testcases/span/01_link/imagelinks.text | 18 - .../test/testcases/span/01_link/inline.html | 46 - .../test/testcases/span/01_link/inline.text | 48 - .../span/01_link/latex_escaping.latex | 6 - .../span/01_link/latex_escaping.text | 5 - .../testcases/span/01_link/link_defs.html | 9 - .../testcases/span/01_link/link_defs.text | 27 - .../span/01_link/link_defs_with_ial.html | 4 - .../span/01_link/link_defs_with_ial.text | 16 - .../01_link/links_with_angle_brackets.html | 3 - .../01_link/links_with_angle_brackets.text | 3 - .../testcases/span/01_link/reference.html | 37 - .../testcases/span/01_link/reference.options | 3 - .../testcases/span/01_link/reference.text | 53 - .../testcases/span/02_emphasis/empty.html | 3 - .../testcases/span/02_emphasis/empty.text | 3 - .../testcases/span/02_emphasis/errors.html | 9 - .../testcases/span/02_emphasis/errors.text | 9 - .../testcases/span/02_emphasis/nesting.html | 41 - .../testcases/span/02_emphasis/nesting.text | 36 - .../testcases/span/02_emphasis/normal.html | 65 - .../testcases/span/02_emphasis/normal.options | 1 - .../testcases/span/02_emphasis/normal.text | 63 - .../testcases/span/03_codespan/empty.html | 5 - .../testcases/span/03_codespan/empty.text | 5 - .../testcases/span/03_codespan/errors.html | 1 - .../testcases/span/03_codespan/errors.text | 1 - .../03_codespan/highlighting-minted.latex | 2 - .../03_codespan/highlighting-minted.options | 1 - .../span/03_codespan/highlighting-minted.text | 1 - .../span/03_codespan/highlighting.html | 1 - .../span/03_codespan/highlighting.text | 1 - .../span/03_codespan/normal-css-class.html | 1 - .../span/03_codespan/normal-css-class.options | 2 - .../span/03_codespan/normal-css-class.text | 1 - .../testcases/span/03_codespan/normal.html | 20 - .../testcases/span/03_codespan/normal.text | 20 - .../span/03_codespan/rouge/disabled.html | 1 - .../span/03_codespan/rouge/disabled.options | 4 - .../span/03_codespan/rouge/disabled.text | 1 - .../span/03_codespan/rouge/simple.html | 1 - .../span/03_codespan/rouge/simple.options | 1 - .../span/03_codespan/rouge/simple.text | 1 - .../span/04_footnote/backlink_inline.html | 79 - .../span/04_footnote/backlink_inline.options | 1 - .../span/04_footnote/backlink_inline.text | 38 - .../span/04_footnote/backlink_text.html | 9 - .../span/04_footnote/backlink_text.options | 1 - .../span/04_footnote/backlink_text.text | 3 - .../span/04_footnote/definitions.html | 17 - .../span/04_footnote/definitions.latex | 17 - .../span/04_footnote/definitions.text | 24 - .../span/04_footnote/footnote_nr.html | 12 - .../span/04_footnote/footnote_nr.latex | 2 - .../span/04_footnote/footnote_nr.options | 1 - .../span/04_footnote/footnote_nr.text | 4 - .../span/04_footnote/footnote_prefix.html | 12 - .../span/04_footnote/footnote_prefix.options | 1 - .../span/04_footnote/footnote_prefix.text | 4 - .../span/04_footnote/inside_footnote.html | 17 - .../span/04_footnote/inside_footnote.text | 9 - .../testcases/span/04_footnote/markers.html | 46 - .../testcases/span/04_footnote/markers.latex | 23 - .../span/04_footnote/markers.options | 2 - .../testcases/span/04_footnote/markers.text | 27 - .../testcases/span/04_footnote/placement.html | 11 - .../span/04_footnote/placement.options | 1 - .../testcases/span/04_footnote/placement.text | 8 - .../span/04_footnote/regexp_problem.html | 14 - .../span/04_footnote/regexp_problem.options | 2 - .../span/04_footnote/regexp_problem.text | 52 - .../span/04_footnote/without_backlink.html | 9 - .../span/04_footnote/without_backlink.options | 1 - .../span/04_footnote/without_backlink.text | 3 - .../testcases/span/05_html/across_lines.html | 1 - .../testcases/span/05_html/across_lines.text | 2 - .../test/testcases/span/05_html/button.html | 7 - .../test/testcases/span/05_html/button.text | 7 - .../test/testcases/span/05_html/invalid.html | 1 - .../test/testcases/span/05_html/invalid.text | 1 - .../span/05_html/link_with_mailto.html | 1 - .../span/05_html/link_with_mailto.text | 1 - .../testcases/span/05_html/mark_element.html | 3 - .../testcases/span/05_html/mark_element.text | 3 - .../testcases/span/05_html/markdown_attr.html | 6 - .../testcases/span/05_html/markdown_attr.text | 6 - .../test/testcases/span/05_html/normal.html | 43 - .../test/testcases/span/05_html/normal.text | 43 - .../span/05_html/raw_span_elements.html | 2 - .../span/05_html/raw_span_elements.text | 2 - .../test/testcases/span/05_html/xml.html | 5 - .../test/testcases/span/05_html/xml.text | 5 - .../testcases/span/abbreviations/abbrev.html | 21 - .../testcases/span/abbreviations/abbrev.text | 34 - .../span/abbreviations/abbrev_defs.html | 2 - .../span/abbreviations/abbrev_defs.text | 5 - .../span/abbreviations/abbrev_in_html.html | 9 - .../span/abbreviations/abbrev_in_html.text | 10 - .../span/abbreviations/in_footnote.html | 9 - .../span/abbreviations/in_footnote.text | 5 - .../testcases/span/autolinks/url_links.html | 15 - .../testcases/span/autolinks/url_links.text | 16 - .../testcases/span/escaped_chars/normal.html | 47 - .../testcases/span/escaped_chars/normal.text | 47 - .../testcases/span/extension/comment.html | 6 - .../testcases/span/extension/comment.text | 6 - .../testcases/span/extension/ignored.html | 1 - .../testcases/span/extension/ignored.text | 1 - .../testcases/span/extension/nomarkdown.html | 1 - .../testcases/span/extension/nomarkdown.text | 1 - .../testcases/span/extension/options.html | 1 - .../testcases/span/extension/options.text | 1 - .../test/testcases/span/ial/simple.html | 6 - .../test/testcases/span/ial/simple.text | 6 - .../testcases/span/line_breaks/normal.html | 11 - .../testcases/span/line_breaks/normal.latex | 12 - .../testcases/span/line_breaks/normal.text | 11 - .../test/testcases/span/math/no_engine.html | 1 - .../testcases/span/math/no_engine.options | 1 - .../test/testcases/span/math/no_engine.text | 1 - .../test/testcases/span/math/normal.html | 10 - .../test/testcases/span/math/normal.text | 10 - .../span/text_substitutions/entities.html | 6 - .../span/text_substitutions/entities.options | 1 - .../span/text_substitutions/entities.text | 6 - .../text_substitutions/entities_as_char.html | 1 - .../entities_as_char.options | 2 - .../text_substitutions/entities_as_char.text | 1 - .../text_substitutions/entities_as_input.html | 1 - .../entities_as_input.options | 1 - .../text_substitutions/entities_as_input.text | 1 - .../text_substitutions/entities_numeric.html | 1 - .../entities_numeric.options | 1 - .../text_substitutions/entities_numeric.text | 1 - .../text_substitutions/entities_symbolic.html | 1 - .../entities_symbolic.options | 1 - .../text_substitutions/entities_symbolic.text | 1 - .../span/text_substitutions/greaterthan.html | 1 - .../span/text_substitutions/greaterthan.text | 1 - .../span/text_substitutions/lowerthan.html | 1 - .../span/text_substitutions/lowerthan.text | 1 - .../span/text_substitutions/typography.html | 40 - .../text_substitutions/typography.options | 1 - .../span/text_substitutions/typography.text | 40 - .../text_substitutions/typography_subst.html | 3 - .../text_substitutions/typography_subst.latex | 4 - .../typography_subst.options | 8 - .../text_substitutions/typography_subst.text | 3 - .../kramdown-parser-gfm-1.1.0/CONTRIBUTERS | 4 - .../gems/kramdown-parser-gfm-1.1.0/COPYING | 21 - .../gems/kramdown-parser-gfm-1.1.0/VERSION | 1 - .../lib/kramdown-parser-gfm.rb | 10 - .../lib/kramdown/parser/gfm.rb | 220 - .../lib/kramdown/parser/gfm/options.rb | 60 - .../test/test_files.rb | 36 - .../test/testcases/atx_header.html | 3 - .../test/testcases/atx_header.text | 3 - .../test/testcases/backticks_syntax.html | 14 - .../test/testcases/backticks_syntax.options | 1 - .../test/testcases/backticks_syntax.text | 19 - .../test/testcases/codeblock_fenced.html | 20 - .../test/testcases/codeblock_fenced.options | 1 - .../test/testcases/codeblock_fenced.text | 21 - .../test/testcases/hard_line_breaks.html | 3 - .../test/testcases/hard_line_breaks.text | 3 - .../test/testcases/hard_line_breaks_off.html | 5 - .../testcases/hard_line_breaks_off.options | 1 - .../test/testcases/hard_line_breaks_off.text | 5 - .../test/testcases/header_ids.html | 27 - .../test/testcases/header_ids.options | 1 - .../test/testcases/header_ids.text | 27 - .../testcases/header_ids_with_prefix.html | 3 - .../testcases/header_ids_with_prefix.options | 2 - .../testcases/header_ids_with_prefix.text | 3 - .../test/testcases/no_typographic.html | 3 - .../test/testcases/no_typographic.options | 1 - .../test/testcases/no_typographic.text | 3 - .../testcases/paragraph_end-disabled.html | 31 - .../testcases/paragraph_end-disabled.options | 1 - .../testcases/paragraph_end-disabled.text | 27 - .../test/testcases/paragraph_end.html | 38 - .../test/testcases/paragraph_end.text | 27 - .../test/testcases/strikethrough.html | 33 - .../test/testcases/strikethrough.text | 33 - .../test/testcases/task_list.html | 40 - .../test/testcases/task_list.text | 26 - .../testcases/two_para_hard_line_breaks.html | 4 - .../testcases/two_para_hard_line_breaks.text | 4 - .../LICENSE.txt | 21 - .../README.md | 88 - .../lib/language_server-protocol.rb | 1 - .../lib/language_server/protocol.rb | 4 - .../lib/language_server/protocol/constant.rb | 77 - .../protocol/constant/code_action_kind.rb | 85 - .../constant/code_action_trigger_kind.rb | 22 - .../protocol/constant/completion_item_kind.rb | 36 - .../protocol/constant/completion_item_tag.rb | 16 - .../constant/completion_trigger_kind.rb | 26 - .../protocol/constant/diagnostic_severity.rb | 24 - .../protocol/constant/diagnostic_tag.rb | 24 - .../document_diagnostic_report_kind.rb | 21 - .../constant/document_highlight_kind.rb | 23 - .../protocol/constant/error_codes.rb | 73 - .../constant/failure_handling_kind.rb | 30 - .../protocol/constant/file_change_type.rb | 23 - .../constant/file_operation_pattern_kind.rb | 20 - .../protocol/constant/folding_range_kind.rb | 24 - .../constant/initialize_error_codes.rb | 16 - .../protocol/constant/inlay_hint_kind.rb | 19 - .../protocol/constant/insert_text_format.rb | 25 - .../protocol/constant/insert_text_mode.rb | 30 - .../protocol/constant/markup_kind.rb | 23 - .../protocol/constant/message_type.rb | 24 - .../protocol/constant/moniker_kind.rb | 24 - .../protocol/constant/notebook_cell_kind.rb | 19 - .../constant/position_encoding_kind.rb | 32 - .../prepare_support_default_behavior.rb | 13 - .../constant/resource_operation_kind.rb | 23 - .../constant/semantic_token_modifiers.rb | 18 - .../protocol/constant/semantic_token_types.rb | 35 - .../constant/signature_help_trigger_kind.rb | 24 - .../protocol/constant/symbol_kind.rb | 37 - .../protocol/constant/symbol_tag.rb | 15 - .../constant/text_document_save_reason.rb | 24 - .../constant/text_document_sync_kind.rb | 27 - .../protocol/constant/token_format.rb | 9 - .../protocol/constant/uniqueness_level.rb | 31 - .../protocol/constant/watch_kind.rb | 20 - .../lib/language_server/protocol/interface.rb | 631 - .../protocol/interface/annotated_text_edit.rb | 56 - .../interface/apply_workspace_edit_params.rb | 44 - .../interface/apply_workspace_edit_result.rb | 56 - .../call_hierarchy_client_capabilities.rb | 36 - .../interface/call_hierarchy_incoming_call.rb | 43 - .../call_hierarchy_incoming_calls_params.rb | 49 - .../protocol/interface/call_hierarchy_item.rb | 100 - .../interface/call_hierarchy_options.rb | 30 - .../interface/call_hierarchy_outgoing_call.rb | 43 - .../call_hierarchy_outgoing_calls_params.rb | 49 - .../call_hierarchy_prepare_params.rb | 51 - .../call_hierarchy_registration_options.rb | 50 - .../protocol/interface/cancel_params.rb | 33 - .../protocol/interface/change_annotation.rb | 57 - .../protocol/interface/client_capabilities.rb | 78 - .../protocol/interface/code_action.rb | 127 - .../code_action_client_capabilities.rb | 95 - .../protocol/interface/code_action_context.rb | 63 - .../protocol/interface/code_action_options.rb | 52 - .../protocol/interface/code_action_params.rb | 73 - .../code_action_registration_options.rb | 62 - .../protocol/interface/code_description.rb | 36 - .../protocol/interface/code_lens.rb | 61 - .../code_lens_client_capabilities.rb | 33 - .../protocol/interface/code_lens_options.rb | 39 - .../protocol/interface/code_lens_params.rb | 52 - .../code_lens_registration_options.rb | 49 - ...code_lens_workspace_client_capabilities.rb | 39 - .../protocol/interface/color.rb | 63 - .../protocol/interface/color_information.rb | 42 - .../protocol/interface/color_presentation.rb | 57 - .../interface/color_presentation_params.rb | 70 - .../protocol/interface/command.rb | 52 - .../completion_client_capabilities.rb | 79 - .../protocol/interface/completion_context.rb | 48 - .../protocol/interface/completion_item.rb | 267 - .../completion_item_label_details.rb | 49 - .../protocol/interface/completion_list.rb | 69 - .../protocol/interface/completion_options.rb | 87 - .../protocol/interface/completion_params.rb | 72 - .../completion_registration_options.rb | 94 - .../protocol/interface/configuration_item.rb | 42 - .../interface/configuration_params.rb | 30 - .../protocol/interface/create_file.rb | 63 - .../protocol/interface/create_file_options.rb | 45 - .../protocol/interface/create_files_params.rb | 37 - .../declaration_client_capabilities.rb | 44 - .../protocol/interface/declaration_options.rb | 30 - .../protocol/interface/declaration_params.rb | 61 - .../declaration_registration_options.rb | 50 - .../definition_client_capabilities.rb | 42 - .../protocol/interface/definition_options.rb | 30 - .../protocol/interface/definition_params.rb | 61 - .../definition_registration_options.rb | 40 - .../protocol/interface/delete_file.rb | 63 - .../protocol/interface/delete_file_options.rb | 45 - .../protocol/interface/delete_files_params.rb | 37 - .../protocol/interface/diagnostic.rb | 110 - .../diagnostic_client_capabilities.rb | 49 - .../protocol/interface/diagnostic_options.rb | 64 - .../diagnostic_registration_options.rb | 84 - .../diagnostic_related_information.rb | 47 - .../diagnostic_server_cancellation_data.rb | 33 - ...iagnostic_workspace_client_capabilities.rb | 42 - ...hange_configuration_client_capabilities.rb | 33 - .../did_change_configuration_params.rb | 33 - .../did_change_notebook_document_params.rb | 56 - .../did_change_text_document_params.rb | 56 - ...hange_watched_files_client_capabilities.rb | 45 - .../did_change_watched_files_params.rb | 33 - ...ange_watched_files_registration_options.rb | 36 - .../did_change_workspace_folders_params.rb | 33 - .../did_close_notebook_document_params.rb | 46 - .../did_close_text_document_params.rb | 33 - .../did_open_notebook_document_params.rb | 46 - .../did_open_text_document_params.rb | 33 - .../did_save_notebook_document_params.rb | 36 - .../did_save_text_document_params.rb | 43 - .../document_color_client_capabilities.rb | 33 - .../interface/document_color_options.rb | 30 - .../interface/document_color_params.rb | 52 - .../document_color_registration_options.rb | 50 - .../interface/document_diagnostic_params.rb | 73 - ...cument_diagnostic_report_partial_result.rb | 33 - .../protocol/interface/document_filter.rb | 63 - ...document_formatting_client_capabilities.rb | 33 - .../interface/document_formatting_options.rb | 30 - .../interface/document_formatting_params.rb | 51 - ...ocument_formatting_registration_options.rb | 40 - .../protocol/interface/document_highlight.rb | 47 - .../document_highlight_client_capabilities.rb | 33 - .../interface/document_highlight_options.rb | 30 - .../interface/document_highlight_params.rb | 61 - ...document_highlight_registration_options.rb | 40 - .../protocol/interface/document_link.rb | 70 - .../document_link_client_capabilities.rb | 42 - .../interface/document_link_options.rb | 39 - .../interface/document_link_params.rb | 52 - .../document_link_registration_options.rb | 49 - ..._on_type_formatting_client_capabilities.rb | 33 - .../document_on_type_formatting_options.rb | 42 - .../document_on_type_formatting_params.rb | 65 - ...on_type_formatting_registration_options.rb | 52 - ...nt_range_formatting_client_capabilities.rb | 33 - .../document_range_formatting_options.rb | 30 - .../document_range_formatting_params.rb | 60 - ...t_range_formatting_registration_options.rb | 40 - .../protocol/interface/document_symbol.rb | 108 - .../document_symbol_client_capabilities.rb | 73 - .../interface/document_symbol_options.rb | 40 - .../interface/document_symbol_params.rb | 52 - .../document_symbol_registration_options.rb | 50 - .../execute_command_client_capabilities.rb | 33 - .../interface/execute_command_options.rb | 39 - .../interface/execute_command_params.rb | 51 - .../execute_command_registration_options.rb | 42 - .../protocol/interface/execution_summary.rb | 45 - .../protocol/interface/file_create.rb | 36 - .../protocol/interface/file_delete.rb | 36 - .../protocol/interface/file_event.rb | 45 - .../interface/file_operation_filter.rb | 46 - .../interface/file_operation_pattern.rb | 67 - .../file_operation_pattern_options.rb | 36 - .../file_operation_registration_options.rb | 36 - .../protocol/interface/file_rename.rb | 45 - .../protocol/interface/file_system_watcher.rb | 45 - .../protocol/interface/folding_range.rb | 94 - .../folding_range_client_capabilities.rb | 76 - .../interface/folding_range_options.rb | 30 - .../interface/folding_range_params.rb | 52 - .../folding_range_registration_options.rb | 50 - .../protocol/interface/formatting_options.rb | 72 - .../full_document_diagnostic_report.rb | 56 - .../protocol/interface/hover.rb | 46 - .../interface/hover_client_capabilities.rb | 44 - .../protocol/interface/hover_options.rb | 30 - .../protocol/interface/hover_params.rb | 51 - .../interface/hover_registration_options.rb | 40 - .../protocol/interface/hover_result.rb | 30 - .../implementation_client_capabilities.rb | 44 - .../interface/implementation_options.rb | 30 - .../interface/implementation_params.rb | 61 - .../implementation_registration_options.rb | 50 - .../protocol/interface/initialize_error.rb | 36 - .../protocol/interface/initialize_params.rb | 128 - .../protocol/interface/initialize_result.rb | 42 - .../protocol/interface/initialized_params.rb | 24 - .../protocol/interface/inlay_hint.rb | 122 - .../inlay_hint_client_capabilities.rb | 46 - .../interface/inlay_hint_label_part.rb | 79 - .../protocol/interface/inlay_hint_options.rb | 43 - .../protocol/interface/inlay_hint_params.rb | 54 - .../inlay_hint_registration_options.rb | 63 - ...nlay_hint_workspace_client_capabilities.rb | 42 - .../inline_value_client_capabilities.rb | 37 - .../interface/inline_value_context.rb | 44 - .../inline_value_evaluatable_expression.rb | 52 - .../interface/inline_value_options.rb | 33 - .../protocol/interface/inline_value_params.rb | 64 - .../inline_value_registration_options.rb | 53 - .../protocol/interface/inline_value_text.rb | 45 - .../interface/inline_value_variable_lookup.rb | 61 - ...ine_value_workspace_client_capabilities.rb | 42 - .../protocol/interface/insert_replace_edit.rb | 54 - ...inked_editing_range_client_capabilities.rb | 36 - .../interface/linked_editing_range_options.rb | 30 - .../interface/linked_editing_range_params.rb | 51 - ...nked_editing_range_registration_options.rb | 50 - .../interface/linked_editing_ranges.rb | 46 - .../protocol/interface/location.rb | 36 - .../protocol/interface/location_link.rb | 68 - .../protocol/interface/log_message_params.rb | 42 - .../protocol/interface/log_trace_params.rb | 43 - .../protocol/interface/markup_content.rb | 68 - .../protocol/interface/message.rb | 30 - .../protocol/interface/message_action_item.rb | 33 - .../protocol/interface/moniker.rb | 64 - .../interface/moniker_client_capabilities.rb | 36 - .../protocol/interface/moniker_options.rb | 30 - .../protocol/interface/moniker_params.rb | 61 - .../interface/moniker_registration_options.rb | 40 - .../protocol/interface/notebook_cell.rb | 69 - .../interface/notebook_cell_array_change.rb | 55 - .../notebook_cell_text_document_filter.rb | 52 - .../protocol/interface/notebook_document.rb | 74 - .../notebook_document_change_event.rb | 45 - .../notebook_document_client_capabilities.rb | 36 - .../interface/notebook_document_filter.rb | 79 - .../interface/notebook_document_identifier.rb | 36 - ...ebook_document_sync_client_capabilities.rb | 48 - .../notebook_document_sync_options.rb | 56 - ...book_document_sync_registration_options.rb | 56 - .../interface/notification_message.rb | 48 - ...onal_versioned_text_document_identifier.rb | 50 - .../interface/parameter_information.rb | 56 - .../interface/partial_result_params.rb | 34 - .../protocol/interface/position.rb | 46 - .../interface/prepare_rename_params.rb | 51 - .../protocol/interface/previous_result_id.rb | 46 - .../protocol/interface/progress_params.rb | 42 - ...publish_diagnostics_client_capabilities.rb | 73 - .../interface/publish_diagnostics_params.rb | 52 - .../protocol/interface/range.rb | 42 - .../reference_client_capabilities.rb | 33 - .../protocol/interface/reference_context.rb | 33 - .../protocol/interface/reference_options.rb | 30 - .../protocol/interface/reference_params.rb | 67 - .../reference_registration_options.rb | 40 - .../protocol/interface/registration.rb | 55 - .../protocol/interface/registration_params.rb | 30 - ...regular_expressions_client_capabilities.rb | 45 - ...related_full_document_diagnostic_report.rb | 69 - ...ed_unchanged_document_diagnostic_report.rb | 62 - .../protocol/interface/relative_pattern.rb | 48 - .../interface/rename_client_capabilities.rb | 69 - .../protocol/interface/rename_file.rb | 72 - .../protocol/interface/rename_file_options.rb | 45 - .../protocol/interface/rename_files_params.rb | 38 - .../protocol/interface/rename_options.rb | 39 - .../protocol/interface/rename_params.rb | 62 - .../interface/rename_registration_options.rb | 49 - .../protocol/interface/request_message.rb | 57 - .../protocol/interface/response_error.rb | 52 - .../protocol/interface/response_message.rb | 58 - .../protocol/interface/save_options.rb | 33 - .../protocol/interface/selection_range.rb | 43 - .../selection_range_client_capabilities.rb | 36 - .../interface/selection_range_options.rb | 30 - .../interface/selection_range_params.rb | 61 - .../selection_range_registration_options.rb | 50 - .../protocol/interface/semantic_tokens.rb | 45 - .../semantic_tokens_client_capabilities.rb | 125 - .../interface/semantic_tokens_delta.rb | 40 - .../interface/semantic_tokens_delta_params.rb | 62 - .../semantic_tokens_delta_partial_result.rb | 30 - .../interface/semantic_tokens_edit.rb | 51 - .../interface/semantic_tokens_legend.rb | 42 - .../interface/semantic_tokens_options.rb | 58 - .../interface/semantic_tokens_params.rb | 52 - .../semantic_tokens_partial_result.rb | 30 - .../interface/semantic_tokens_range_params.rb | 61 - .../semantic_tokens_registration_options.rb | 78 - ...ic_tokens_workspace_client_capabilities.rb | 39 - .../protocol/interface/server_capabilities.rb | 352 - .../protocol/interface/set_trace_params.rb | 33 - .../show_document_client_capabilities.rb | 37 - .../interface/show_document_params.rb | 71 - .../interface/show_document_result.rb | 36 - .../protocol/interface/show_message_params.rb | 42 - ...how_message_request_client_capabilities.rb | 36 - .../interface/show_message_request_params.rb | 51 - .../protocol/interface/signature_help.rb | 71 - .../signature_help_client_capabilities.rb | 55 - .../interface/signature_help_context.rb | 74 - .../interface/signature_help_options.rb | 53 - .../interface/signature_help_params.rb | 62 - .../signature_help_registration_options.rb | 63 - .../interface/signature_information.rb | 69 - .../interface/static_registration_options.rb | 37 - .../protocol/interface/symbol_information.rb | 93 - ...xt_document_change_registration_options.rb | 47 - .../text_document_client_capabilities.rb | 297 - .../text_document_content_change_event.rb | 59 - .../protocol/interface/text_document_edit.rb | 42 - .../interface/text_document_identifier.rb | 33 - .../protocol/interface/text_document_item.rb | 61 - .../text_document_position_params.rb | 42 - .../text_document_registration_options.rb | 37 - ...text_document_save_registration_options.rb | 43 - .../text_document_sync_client_capabilities.rb | 62 - .../interface/text_document_sync_options.rb | 78 - .../protocol/interface/text_edit.rb | 44 - .../type_definition_client_capabilities.rb | 44 - .../interface/type_definition_options.rb | 30 - .../interface/type_definition_params.rb | 61 - .../type_definition_registration_options.rb | 50 - .../protocol/interface/type_hierarchy_item.rb | 102 - .../interface/type_hierarchy_options.rb | 30 - .../type_hierarchy_prepare_params.rb | 51 - .../type_hierarchy_registration_options.rb | 50 - .../type_hierarchy_subtypes_params.rb | 49 - .../type_hierarchy_supertypes_params.rb | 49 - .../unchanged_document_diagnostic_report.rb | 50 - .../protocol/interface/unregistration.rb | 46 - .../interface/unregistration_params.rb | 30 - .../versioned_notebook_document_identifier.rb | 45 - .../versioned_text_document_identifier.rb | 45 - .../will_save_text_document_params.rb | 45 - .../interface/work_done_progress_begin.rb | 80 - .../work_done_progress_cancel_params.rb | 33 - .../work_done_progress_create_params.rb | 33 - .../interface/work_done_progress_end.rb | 40 - .../interface/work_done_progress_options.rb | 30 - .../interface/work_done_progress_params.rb | 33 - .../interface/work_done_progress_report.rb | 70 - .../interface/workspace_diagnostic_params.rb | 65 - .../interface/workspace_diagnostic_report.rb | 33 - ...kspace_diagnostic_report_partial_result.rb | 33 - .../protocol/interface/workspace_edit.rb | 68 - .../workspace_edit_client_capabilities.rb | 75 - .../protocol/interface/workspace_folder.rb | 43 - .../workspace_folders_change_event.rb | 45 - .../workspace_folders_server_capabilities.rb | 48 - ...rkspace_full_document_diagnostic_report.rb | 75 - .../protocol/interface/workspace_symbol.rb | 89 - .../workspace_symbol_client_capabilities.rb | 64 - .../interface/workspace_symbol_options.rb | 40 - .../interface/workspace_symbol_params.rb | 56 - .../workspace_symbol_registration_options.rb | 40 - ...ce_unchanged_document_diagnostic_report.rb | 68 - .../lib/language_server/protocol/transport.rb | 2 - .../language_server/protocol/transport/io.rb | 2 - .../protocol/transport/io/reader.rb | 31 - .../protocol/transport/io/writer.rb | 35 - .../protocol/transport/stdio.rb | 2 - .../protocol/transport/stdio/reader.rb | 13 - .../protocol/transport/stdio/writer.rb | 13 - .../lib/language_server/protocol/version.rb | 5 - bundle/ruby/3.2.0/gems/mdl-0.13.0/Gemfile | 2 - bundle/ruby/3.2.0/gems/mdl-0.13.0/LICENSE.txt | 22 - bundle/ruby/3.2.0/gems/mdl-0.13.0/bin/mdl | 10 - bundle/ruby/3.2.0/gems/mdl-0.13.0/lib/mdl.rb | 160 - .../ruby/3.2.0/gems/mdl-0.13.0/lib/mdl/cli.rb | 184 - .../3.2.0/gems/mdl-0.13.0/lib/mdl/config.rb | 10 - .../ruby/3.2.0/gems/mdl-0.13.0/lib/mdl/doc.rb | 309 - .../mdl-0.13.0/lib/mdl/formatters/sarif.rb | 89 - .../mdl-0.13.0/lib/mdl/kramdown_parser.rb | 21 - .../3.2.0/gems/mdl-0.13.0/lib/mdl/rules.rb | 890 - .../3.2.0/gems/mdl-0.13.0/lib/mdl/ruleset.rb | 144 - .../3.2.0/gems/mdl-0.13.0/lib/mdl/style.rb | 78 - .../gems/mdl-0.13.0/lib/mdl/styles/all.rb | 1 - .../mdl-0.13.0/lib/mdl/styles/cirosantilli.rb | 15 - .../gems/mdl-0.13.0/lib/mdl/styles/default.rb | 4 - .../gems/mdl-0.13.0/lib/mdl/styles/relaxed.rb | 11 - .../3.2.0/gems/mdl-0.13.0/lib/mdl/version.rb | 3 - bundle/ruby/3.2.0/gems/mdl-0.13.0/mdl.gemspec | 35 - .../method_source-1.0.0/.circleci/config.yml | 139 - .../3.2.0/gems/method_source-1.0.0/.gemtest | 0 .../3.2.0/gems/method_source-1.0.0/.yardopts | 1 - .../gems/method_source-1.0.0/CHANGELOG.md | 10 - .../3.2.0/gems/method_source-1.0.0/Gemfile | 2 - .../3.2.0/gems/method_source-1.0.0/LICENSE | 22 - .../gems/method_source-1.0.0/README.markdown | 93 - .../3.2.0/gems/method_source-1.0.0/Rakefile | 81 - .../method_source-1.0.0/lib/method_source.rb | 141 - .../lib/method_source/code_helpers.rb | 154 - .../lib/method_source/source_location.rb | 138 - .../lib/method_source/version.rb | 3 - .../method_source-1.0.0/method_source.gemspec | 33 - .../spec/method_source/code_helpers_spec.rb | 43 - .../spec/method_source_spec.rb | 143 - .../method_source-1.0.0/spec/spec_helper.rb | 101 - .../ruby/3.2.0/gems/mixlib-cli-2.1.8/LICENSE | 201 - .../ruby/3.2.0/gems/mixlib-cli-2.1.8/NOTICE | 26 - .../gems/mixlib-cli-2.1.8/lib/mixlib/cli.rb | 453 - .../lib/mixlib/cli/formatter.rb | 33 - .../lib/mixlib/cli/version.rb | 5 - .../3.2.0/gems/mixlib-config-3.0.27/LICENSE | 201 - .../3.2.0/gems/mixlib-config-3.0.27/NOTICE | 27 - .../mixlib-config-3.0.27/lib/mixlib/config.rb | 739 - .../lib/mixlib/config/configurable.rb | 90 - ..._config_context_with_configurable_error.rb | 24 - ..._configurable_with_config_context_error.rb | 24 - .../config/unknown_config_option_error.rb | 24 - .../lib/mixlib/config/version.rb | 25 - .../3.2.0/gems/mixlib-shellout-3.2.7/LICENSE | 201 - .../lib/mixlib/shellout.rb | 373 - .../lib/mixlib/shellout/exceptions.rb | 9 - .../lib/mixlib/shellout/helper.rb | 197 - .../lib/mixlib/shellout/unix.rb | 420 - .../lib/mixlib/shellout/version.rb | 5 - .../lib/mixlib/shellout/windows.rb | 431 - .../lib/mixlib/shellout/windows/core_ext.rb | 629 - bundle/ruby/3.2.0/gems/nap-1.1.0/LICENSE | 18 - bundle/ruby/3.2.0/gems/nap-1.1.0/README.md | 80 - bundle/ruby/3.2.0/gems/nap-1.1.0/lib/rest.rb | 106 - .../3.2.0/gems/nap-1.1.0/lib/rest/error.rb | 92 - .../3.2.0/gems/nap-1.1.0/lib/rest/request.rb | 196 - .../3.2.0/gems/nap-1.1.0/lib/rest/response.rb | 46 - .../3.2.0/gems/nap-1.1.0/support/cacert.pem | 3988 ---- .../3.2.0/gems/no_proxy_fix-0.1.2/.gitignore | 10 - .../ruby/3.2.0/gems/no_proxy_fix-0.1.2/.rspec | 2 - .../gems/no_proxy_fix-0.1.2/.rubocop.yml | 13 - .../gems/no_proxy_fix-0.1.2/.rubocop_todo.yml | 0 .../3.2.0/gems/no_proxy_fix-0.1.2/.travis.yml | 13 - .../3.2.0/gems/no_proxy_fix-0.1.2/Gemfile | 4 - .../3.2.0/gems/no_proxy_fix-0.1.2/Guardfile | 46 - .../3.2.0/gems/no_proxy_fix-0.1.2/LICENSE.txt | 21 - .../3.2.0/gems/no_proxy_fix-0.1.2/README.md | 46 - .../3.2.0/gems/no_proxy_fix-0.1.2/Rakefile | 23 - .../3.2.0/gems/no_proxy_fix-0.1.2/bin/console | 14 - .../3.2.0/gems/no_proxy_fix-0.1.2/bin/setup | 8 - .../lib/cext/generic_find_proxy.rb | 111 - .../no_proxy_fix-0.1.2/lib/no_proxy_fix.rb | 5 - .../lib/no_proxy_fix/version.rb | 3 - .../no_proxy_fix-0.1.2/no_proxy_fix.gemspec | 33 - .../ruby/3.2.0/gems/octokit-8.1.0/.document | 5 - .../3.2.0/gems/octokit-8.1.0/CONTRIBUTING.md | 23 - .../ruby/3.2.0/gems/octokit-8.1.0/LICENSE.md | 20 - .../ruby/3.2.0/gems/octokit-8.1.0/README.md | 813 - bundle/ruby/3.2.0/gems/octokit-8.1.0/Rakefile | 28 - .../octokit-8.1.0/lib/ext/sawyer/relation.rb | 12 - .../3.2.0/gems/octokit-8.1.0/lib/octokit.rb | 66 - .../octokit-8.1.0/lib/octokit/arguments.rb | 14 - .../lib/octokit/authentication.rb | 80 - .../gems/octokit-8.1.0/lib/octokit/client.rb | 278 - .../lib/octokit/client/actions_artifacts.rb | 71 - .../lib/octokit/client/actions_secrets.rb | 161 - .../octokit/client/actions_workflow_jobs.rb | 65 - .../octokit/client/actions_workflow_runs.rb | 125 - .../lib/octokit/client/actions_workflows.rb | 68 - .../octokit-8.1.0/lib/octokit/client/apps.rb | 247 - .../lib/octokit/client/checks.rb | 200 - .../lib/octokit/client/code_scanning.rb | 53 - .../lib/octokit/client/codespaces_secrets.rb | 108 - .../lib/octokit/client/commit_branches.rb | 20 - .../lib/octokit/client/commit_comments.rb | 95 - .../lib/octokit/client/commit_pulls.rb | 20 - .../lib/octokit/client/commits.rb | 236 - .../lib/octokit/client/community_profile.rb | 21 - .../lib/octokit/client/contents.rb | 167 - .../lib/octokit/client/dependabot_secrets.rb | 108 - .../lib/octokit/client/deployments.rb | 82 - .../lib/octokit/client/downloads.rb | 49 - .../lib/octokit/client/emojis.rb | 18 - .../lib/octokit/client/environments.rb | 55 - .../lib/octokit/client/events.rb | 151 - .../octokit-8.1.0/lib/octokit/client/feeds.rb | 32 - .../octokit-8.1.0/lib/octokit/client/gists.rb | 234 - .../lib/octokit/client/gitignore.rb | 43 - .../octokit-8.1.0/lib/octokit/client/hooks.rb | 287 - .../lib/octokit/client/issues.rb | 367 - .../lib/octokit/client/labels.rb | 156 - .../lib/octokit/client/legacy_search.rb | 42 - .../lib/octokit/client/licenses.rb | 42 - .../lib/octokit/client/markdown.rb | 27 - .../lib/octokit/client/marketplace.rb | 56 - .../octokit-8.1.0/lib/octokit/client/meta.rb | 20 - .../lib/octokit/client/milestones.rb | 87 - .../lib/octokit/client/notifications.rb | 167 - .../lib/octokit/client/oauth_applications.rb | 116 - .../lib/octokit/client/objects.rb | 141 - .../lib/octokit/client/organizations.rb | 864 - .../octokit-8.1.0/lib/octokit/client/pages.rb | 61 - .../lib/octokit/client/projects.rb | 294 - .../lib/octokit/client/pub_sub_hubbub.rb | 111 - .../lib/octokit/client/pull_requests.rb | 316 - .../lib/octokit/client/rate_limit.rb | 52 - .../lib/octokit/client/reactions.rb | 204 - .../octokit-8.1.0/lib/octokit/client/refs.rb | 131 - .../lib/octokit/client/releases.rb | 164 - .../lib/octokit/client/repositories.rb | 779 - .../octokit/client/repository_invitations.rb | 96 - .../lib/octokit/client/reviews.rb | 227 - .../octokit-8.1.0/lib/octokit/client/say.rb | 18 - .../lib/octokit/client/search.rb | 105 - .../lib/octokit/client/service_status.rb | 48 - .../lib/octokit/client/source_import.rb | 156 - .../octokit-8.1.0/lib/octokit/client/stats.rb | 108 - .../lib/octokit/client/statuses.rb | 47 - .../lib/octokit/client/tokens.rb | 31 - .../lib/octokit/client/traffic.rb | 64 - .../octokit-8.1.0/lib/octokit/client/users.rb | 462 - .../octokit-8.1.0/lib/octokit/configurable.rb | 155 - .../octokit-8.1.0/lib/octokit/connection.rb | 218 - .../gems/octokit-8.1.0/lib/octokit/default.rb | 189 - .../lib/octokit/enterprise_admin_client.rb | 46 - .../enterprise_admin_client/admin_stats.rb | 119 - .../enterprise_admin_client/license.rb | 17 - .../octokit/enterprise_admin_client/orgs.rb | 26 - .../search_indexing.rb | 82 - .../octokit/enterprise_admin_client/users.rb | 129 - .../enterprise_management_console_client.rb | 56 - .../management_console.rb | 176 - .../gems/octokit-8.1.0/lib/octokit/error.rb | 363 - .../gems/octokit-8.1.0/lib/octokit/gist.rb | 35 - .../octokit/middleware/follow_redirects.rb | 135 - .../octokit-8.1.0/lib/octokit/organization.rb | 19 - .../octokit-8.1.0/lib/octokit/rate_limit.rb | 35 - .../lib/octokit/repo_arguments.rb | 18 - .../octokit-8.1.0/lib/octokit/repository.rb | 96 - .../lib/octokit/response/base_middleware.rb | 10 - .../lib/octokit/response/feed_parser.rb | 17 - .../lib/octokit/response/raise_error.rb | 19 - .../gems/octokit-8.1.0/lib/octokit/user.rb | 21 - .../gems/octokit-8.1.0/lib/octokit/version.rb | 19 - .../octokit-8.1.0/lib/octokit/warnable.rb | 16 - .../3.2.0/gems/octokit-8.1.0/octokit.gemspec | 25 - bundle/ruby/3.2.0/gems/open4-1.3.4/LICENSE | 3 - bundle/ruby/3.2.0/gems/open4-1.3.4/README | 403 - bundle/ruby/3.2.0/gems/open4-1.3.4/README.erb | 403 - .../ruby/3.2.0/gems/open4-1.3.4/lib/open4.rb | 437 - .../ruby/3.2.0/gems/open4-1.3.4/open4.gemspec | 53 - bundle/ruby/3.2.0/gems/open4-1.3.4/rakefile | 394 - .../ruby/3.2.0/gems/open4-1.3.4/samples/bg.rb | 21 - .../3.2.0/gems/open4-1.3.4/samples/block.rb | 19 - .../gems/open4-1.3.4/samples/exception.rb | 3 - .../open4-1.3.4/samples/jesse-caldwell.rb | 131 - .../3.2.0/gems/open4-1.3.4/samples/pfork4.rb | 24 - .../3.2.0/gems/open4-1.3.4/samples/simple.rb | 15 - .../3.2.0/gems/open4-1.3.4/samples/spawn.rb | 16 - .../gems/open4-1.3.4/samples/stdin_timeout.rb | 9 - .../3.2.0/gems/open4-1.3.4/samples/timeout.rb | 37 - .../gems/open4-1.3.4/test/lib/test_case.rb | 23 - .../gems/open4-1.3.4/test/pfork4_test.rb | 150 - .../gems/open4-1.3.4/test/popen4_test.rb | 82 - .../gems/open4-1.3.4/test/popen4ext_test.rb | 89 - .../3.2.0/gems/open4-1.3.4/white_box/leak.rb | 17 - .../gems/parallel-1.24.0/MIT-LICENSE.txt | 20 - .../gems/parallel-1.24.0/lib/parallel.rb | 676 - .../parallel-1.24.0/lib/parallel/version.rb | 4 - .../3.2.0/gems/parser-3.3.0.5/LICENSE.txt | 25 - .../3.2.0/gems/parser-3.3.0.5/bin/ruby-parse | 7 - .../gems/parser-3.3.0.5/bin/ruby-rewrite | 7 - .../parser-3.3.0.5/lib/gauntlet_parser.rb | 123 - .../3.2.0/gems/parser-3.3.0.5/lib/parser.rb | 90 - .../gems/parser-3.3.0.5/lib/parser/all.rb | 17 - .../parser-3.3.0.5/lib/parser/ast/node.rb | 40 - .../lib/parser/ast/processor.rb | 291 - .../gems/parser-3.3.0.5/lib/parser/base.rb | 291 - .../lib/parser/builders/default.rb | 2338 --- .../lib/parser/clobbering_error.rb | 13 - .../gems/parser-3.3.0.5/lib/parser/color.rb | 32 - .../gems/parser-3.3.0.5/lib/parser/context.rb | 49 - .../gems/parser-3.3.0.5/lib/parser/current.rb | 137 - .../lib/parser/current_arg_stack.rb | 46 - .../parser-3.3.0.5/lib/parser/deprecation.rb | 13 - .../parser-3.3.0.5/lib/parser/diagnostic.rb | 163 - .../lib/parser/diagnostic/engine.rb | 104 - .../parser-3.3.0.5/lib/parser/lexer-F0.rb | 12922 ------------- .../parser-3.3.0.5/lib/parser/lexer-F1.rb | 14875 --------------- .../lib/parser/lexer-strings.rb | 5424 ------ .../lib/parser/lexer/dedenter.rb | 88 - .../lib/parser/lexer/explanation.rb | 55 - .../lib/parser/lexer/literal.rb | 284 - .../lib/parser/lexer/stack_state.rb | 49 - .../gems/parser-3.3.0.5/lib/parser/macruby.rb | 9634 ---------- .../lib/parser/max_numparam_stack.rb | 56 - .../parser-3.3.0.5/lib/parser/messages.rb | 125 - .../gems/parser-3.3.0.5/lib/parser/meta.rb | 40 - .../parser-3.3.0.5/lib/parser/rewriter.rb | 105 - .../gems/parser-3.3.0.5/lib/parser/ruby18.rb | 9272 ---------- .../gems/parser-3.3.0.5/lib/parser/ruby19.rb | 9558 ---------- .../gems/parser-3.3.0.5/lib/parser/ruby20.rb | 10229 ---------- .../gems/parser-3.3.0.5/lib/parser/ruby21.rb | 10203 ---------- .../gems/parser-3.3.0.5/lib/parser/ruby22.rb | 10302 ----------- .../gems/parser-3.3.0.5/lib/parser/ruby23.rb | 10322 ----------- .../gems/parser-3.3.0.5/lib/parser/ruby24.rb | 10454 ----------- .../gems/parser-3.3.0.5/lib/parser/ruby25.rb | 10374 ----------- .../gems/parser-3.3.0.5/lib/parser/ruby26.rb | 10352 ----------- .../gems/parser-3.3.0.5/lib/parser/ruby27.rb | 11947 ------------ .../gems/parser-3.3.0.5/lib/parser/ruby28.rb | 8047 -------- .../gems/parser-3.3.0.5/lib/parser/ruby30.rb | 12243 ------------ .../gems/parser-3.3.0.5/lib/parser/ruby31.rb | 12716 ------------- .../gems/parser-3.3.0.5/lib/parser/ruby32.rb | 12704 ------------- .../gems/parser-3.3.0.5/lib/parser/ruby33.rb | 12589 ------------- .../gems/parser-3.3.0.5/lib/parser/ruby34.rb | 12589 ------------- .../parser-3.3.0.5/lib/parser/rubymotion.rb | 9515 ---------- .../gems/parser-3.3.0.5/lib/parser/runner.rb | 298 - .../lib/parser/runner/ruby_parse.rb | 157 - .../lib/parser/runner/ruby_rewrite.rb | 101 - .../lib/parser/source/buffer.rb | 364 - .../lib/parser/source/comment.rb | 134 - .../lib/parser/source/comment/associator.rb | 233 - .../parser-3.3.0.5/lib/parser/source/map.rb | 186 - .../lib/parser/source/map/collection.rb | 18 - .../lib/parser/source/map/condition.rb | 21 - .../lib/parser/source/map/constant.rb | 32 - .../lib/parser/source/map/definition.rb | 23 - .../lib/parser/source/map/for.rb | 19 - .../lib/parser/source/map/heredoc.rb | 19 - .../lib/parser/source/map/index.rb | 33 - .../lib/parser/source/map/keyword.rb | 20 - .../parser/source/map/method_definition.rb | 25 - .../lib/parser/source/map/objc_kwarg.rb | 19 - .../lib/parser/source/map/operator.rb | 17 - .../lib/parser/source/map/rescue_body.rb | 21 - .../lib/parser/source/map/send.rb | 36 - .../lib/parser/source/map/ternary.rb | 18 - .../lib/parser/source/map/variable.rb | 31 - .../parser-3.3.0.5/lib/parser/source/range.rb | 326 - .../lib/parser/source/rewriter.rb | 513 - .../lib/parser/source/rewriter/action.rb | 44 - .../lib/parser/source/tree_rewriter.rb | 431 - .../lib/parser/source/tree_rewriter/action.rb | 242 - .../lib/parser/static_environment.rb | 99 - .../parser-3.3.0.5/lib/parser/syntax_error.rb | 21 - .../lib/parser/tree_rewriter.rb | 133 - .../lib/parser/variables_stack.rb | 36 - .../gems/parser-3.3.0.5/lib/parser/version.rb | 5 - .../3.2.0/gems/parser-3.3.0.5/parser.gemspec | 43 - .../ruby/3.2.0/gems/pry-0.14.2/CHANGELOG.md | 1141 -- bundle/ruby/3.2.0/gems/pry-0.14.2/LICENSE | 25 - bundle/ruby/3.2.0/gems/pry-0.14.2/README.md | 466 - bundle/ruby/3.2.0/gems/pry-0.14.2/bin/pry | 13 - bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry.rb | 145 - .../gems/pry-0.14.2/lib/pry/basic_object.rb | 10 - .../gems/pry-0.14.2/lib/pry/block_command.rb | 22 - .../gems/pry-0.14.2/lib/pry/class_command.rb | 194 - .../ruby/3.2.0/gems/pry-0.14.2/lib/pry/cli.rb | 207 - .../3.2.0/gems/pry-0.14.2/lib/pry/code.rb | 357 - .../gems/pry-0.14.2/lib/pry/code/code_file.rb | 114 - .../pry-0.14.2/lib/pry/code/code_range.rb | 73 - .../3.2.0/gems/pry-0.14.2/lib/pry/code/loc.rb | 105 - .../gems/pry-0.14.2/lib/pry/code_object.rb | 197 - .../gems/pry-0.14.2/lib/pry/color_printer.rb | 66 - .../3.2.0/gems/pry-0.14.2/lib/pry/command.rb | 520 - .../gems/pry-0.14.2/lib/pry/command_set.rb | 418 - .../gems/pry-0.14.2/lib/pry/command_state.rb | 31 - .../pry-0.14.2/lib/pry/commands/amend_line.rb | 103 - .../gems/pry-0.14.2/lib/pry/commands/bang.rb | 24 - .../pry-0.14.2/lib/pry/commands/bang_pry.rb | 21 - .../gems/pry-0.14.2/lib/pry/commands/cat.rb | 70 - .../pry/commands/cat/abstract_formatter.rb | 32 - .../pry/commands/cat/exception_formatter.rb | 90 - .../lib/pry/commands/cat/file_formatter.rb | 77 - .../cat/input_expression_formatter.rb | 48 - .../gems/pry-0.14.2/lib/pry/commands/cd.rb | 46 - .../lib/pry/commands/change_inspector.rb | 34 - .../lib/pry/commands/change_prompt.rb | 51 - .../lib/pry/commands/clear_screen.rb | 20 - .../lib/pry/commands/code_collector.rb | 182 - .../lib/pry/commands/disable_pry.rb | 31 - .../lib/pry/commands/easter_eggs.rb | 101 - .../gems/pry-0.14.2/lib/pry/commands/edit.rb | 223 - .../pry/commands/edit/exception_patcher.rb | 29 - .../commands/edit/file_and_line_locator.rb | 47 - .../gems/pry-0.14.2/lib/pry/commands/exit.rb | 47 - .../pry-0.14.2/lib/pry/commands/exit_all.rb | 33 - .../lib/pry/commands/exit_program.rb | 27 - .../lib/pry/commands/find_method.rb | 199 - .../pry-0.14.2/lib/pry/commands/fix_indent.rb | 23 - .../gems/pry-0.14.2/lib/pry/commands/help.rb | 171 - .../gems/pry-0.14.2/lib/pry/commands/hist.rb | 182 - .../pry-0.14.2/lib/pry/commands/import_set.rb | 27 - .../pry-0.14.2/lib/pry/commands/jump_to.rb | 33 - .../lib/pry/commands/list_inspectors.rb | 42 - .../gems/pry-0.14.2/lib/pry/commands/ls.rb | 135 - .../lib/pry/commands/ls/constants.rb | 75 - .../lib/pry/commands/ls/formatter.rb | 55 - .../pry-0.14.2/lib/pry/commands/ls/globals.rb | 50 - .../pry-0.14.2/lib/pry/commands/ls/grep.rb | 23 - .../lib/pry/commands/ls/instance_vars.rb | 40 - .../lib/pry/commands/ls/interrogatable.rb | 24 - .../lib/pry/commands/ls/jruby_hacks.rb | 55 - .../lib/pry/commands/ls/local_names.rb | 37 - .../lib/pry/commands/ls/local_vars.rb | 47 - .../lib/pry/commands/ls/ls_entity.rb | 65 - .../pry-0.14.2/lib/pry/commands/ls/methods.rb | 55 - .../lib/pry/commands/ls/methods_helper.rb | 50 - .../lib/pry/commands/ls/self_methods.rb | 34 - .../pry-0.14.2/lib/pry/commands/nesting.rb | 29 - .../gems/pry-0.14.2/lib/pry/commands/play.rb | 113 - .../lib/pry/commands/pry_backtrace.rb | 30 - .../lib/pry/commands/pry_version.rb | 21 - .../pry-0.14.2/lib/pry/commands/raise_up.rb | 38 - .../lib/pry/commands/reload_code.rb | 74 - .../gems/pry-0.14.2/lib/pry/commands/reset.rb | 22 - .../gems/pry-0.14.2/lib/pry/commands/ri.rb | 75 - .../pry-0.14.2/lib/pry/commands/save_file.rb | 63 - .../lib/pry/commands/shell_command.rb | 75 - .../pry-0.14.2/lib/pry/commands/shell_mode.rb | 29 - .../pry-0.14.2/lib/pry/commands/show_doc.rb | 93 - .../pry-0.14.2/lib/pry/commands/show_info.rb | 234 - .../pry-0.14.2/lib/pry/commands/show_input.rb | 22 - .../lib/pry/commands/show_source.rb | 118 - .../gems/pry-0.14.2/lib/pry/commands/stat.rb | 44 - .../pry-0.14.2/lib/pry/commands/switch_to.rb | 29 - .../lib/pry/commands/toggle_color.rb | 28 - .../lib/pry/commands/watch_expression.rb | 110 - .../commands/watch_expression/expression.rb | 43 - .../pry-0.14.2/lib/pry/commands/whereami.rb | 205 - .../gems/pry-0.14.2/lib/pry/commands/wtf.rb | 95 - .../3.2.0/gems/pry-0.14.2/lib/pry/config.rb | 314 - .../pry-0.14.2/lib/pry/config/attributable.rb | 22 - .../pry-0.14.2/lib/pry/config/lazy_value.rb | 29 - .../lib/pry/config/memoized_value.rb | 34 - .../gems/pry-0.14.2/lib/pry/config/value.rb | 24 - .../pry-0.14.2/lib/pry/control_d_handler.rb | 28 - .../pry-0.14.2/lib/pry/core_extensions.rb | 144 - .../3.2.0/gems/pry-0.14.2/lib/pry/editor.rb | 157 - .../ruby/3.2.0/gems/pry-0.14.2/lib/pry/env.rb | 18 - .../pry-0.14.2/lib/pry/exception_handler.rb | 43 - .../gems/pry-0.14.2/lib/pry/exceptions.rb | 73 - .../gems/pry-0.14.2/lib/pry/forwardable.rb | 27 - .../3.2.0/gems/pry-0.14.2/lib/pry/helpers.rb | 8 - .../lib/pry/helpers/base_helpers.rb | 71 - .../lib/pry/helpers/command_helpers.rb | 146 - .../lib/pry/helpers/documentation_helpers.rb | 84 - .../lib/pry/helpers/options_helpers.rb | 34 - .../pry-0.14.2/lib/pry/helpers/platform.rb | 55 - .../gems/pry-0.14.2/lib/pry/helpers/table.rb | 121 - .../gems/pry-0.14.2/lib/pry/helpers/text.rb | 118 - .../3.2.0/gems/pry-0.14.2/lib/pry/history.rb | 153 - .../3.2.0/gems/pry-0.14.2/lib/pry/hooks.rb | 180 - .../3.2.0/gems/pry-0.14.2/lib/pry/indent.rb | 412 - .../pry-0.14.2/lib/pry/input_completer.rb | 283 - .../gems/pry-0.14.2/lib/pry/input_lock.rb | 129 - .../gems/pry-0.14.2/lib/pry/inspector.rb | 39 - .../gems/pry-0.14.2/lib/pry/last_exception.rb | 61 - .../3.2.0/gems/pry-0.14.2/lib/pry/method.rb | 600 - .../pry-0.14.2/lib/pry/method/disowned.rb | 67 - .../gems/pry-0.14.2/lib/pry/method/patcher.rb | 131 - .../lib/pry/method/weird_method_locator.rb | 222 - .../gems/pry-0.14.2/lib/pry/object_path.rb | 91 - .../3.2.0/gems/pry-0.14.2/lib/pry/output.rb | 136 - .../3.2.0/gems/pry-0.14.2/lib/pry/pager.rb | 249 - .../3.2.0/gems/pry-0.14.2/lib/pry/prompt.rb | 214 - .../gems/pry-0.14.2/lib/pry/pry_class.rb | 396 - .../gems/pry-0.14.2/lib/pry/pry_instance.rb | 701 - .../3.2.0/gems/pry-0.14.2/lib/pry/repl.rb | 256 - .../pry-0.14.2/lib/pry/repl_file_loader.rb | 79 - .../3.2.0/gems/pry-0.14.2/lib/pry/ring.rb | 89 - .../3.2.0/gems/pry-0.14.2/lib/pry/slop.rb | 672 - .../gems/pry-0.14.2/lib/pry/slop/LICENSE | 20 - .../gems/pry-0.14.2/lib/pry/slop/commands.rb | 190 - .../gems/pry-0.14.2/lib/pry/slop/option.rb | 210 - .../pry-0.14.2/lib/pry/syntax_highlighter.rb | 26 - .../lib/pry/system_command_handler.rb | 17 - .../3.2.0/gems/pry-0.14.2/lib/pry/testable.rb | 68 - .../pry-0.14.2/lib/pry/testable/evalable.rb | 24 - .../pry-0.14.2/lib/pry/testable/mockable.rb | 22 - .../pry-0.14.2/lib/pry/testable/pry_tester.rb | 88 - .../pry-0.14.2/lib/pry/testable/utility.rb | 34 - .../pry-0.14.2/lib/pry/testable/variables.rb | 52 - .../3.2.0/gems/pry-0.14.2/lib/pry/version.rb | 5 - .../3.2.0/gems/pry-0.14.2/lib/pry/warning.rb | 20 - .../gems/pry-0.14.2/lib/pry/wrapped_module.rb | 382 - .../lib/pry/wrapped_module/candidate.rb | 139 - .../3.2.0/gems/public_suffix-5.0.4/.yardopts | 1 - .../gems/public_suffix-5.0.4/2.0-Upgrade.md | 52 - .../gems/public_suffix-5.0.4/CHANGELOG.md | 451 - .../gems/public_suffix-5.0.4/LICENSE.txt | 22 - .../3.2.0/gems/public_suffix-5.0.4/README.md | 224 - .../gems/public_suffix-5.0.4/SECURITY.md | 25 - .../gems/public_suffix-5.0.4/data/list.txt | 15431 ---------------- .../public_suffix-5.0.4/lib/public_suffix.rb | 177 - .../lib/public_suffix/domain.rb | 235 - .../lib/public_suffix/errors.rb | 41 - .../lib/public_suffix/list.rb | 247 - .../lib/public_suffix/rule.rb | 350 - .../lib/public_suffix/version.rb | 14 - bundle/ruby/3.2.0/gems/racc-1.7.3/COPYING | 22 - bundle/ruby/3.2.0/gems/racc-1.7.3/ChangeLog | 846 - .../ruby/3.2.0/gems/racc-1.7.3/README.ja.rdoc | 66 - bundle/ruby/3.2.0/gems/racc-1.7.3/README.rdoc | 60 - bundle/ruby/3.2.0/gems/racc-1.7.3/TODO | 5 - bundle/ruby/3.2.0/gems/racc-1.7.3/bin/racc | 326 - .../gems/racc-1.7.3/doc/en/grammar.en.rdoc | 226 - .../gems/racc-1.7.3/doc/en/grammar2.en.rdoc | 219 - .../gems/racc-1.7.3/doc/ja/command.ja.html | 99 - .../gems/racc-1.7.3/doc/ja/debug.ja.rdoc | 36 - .../gems/racc-1.7.3/doc/ja/grammar.ja.rdoc | 348 - .../gems/racc-1.7.3/doc/ja/index.ja.html | 10 - .../gems/racc-1.7.3/doc/ja/parser.ja.rdoc | 125 - .../gems/racc-1.7.3/doc/ja/usage.ja.html | 414 - .../gems/racc-1.7.3/ext/racc/cparse/Makefile | 269 - .../gems/racc-1.7.3/ext/racc/cparse/cparse.c | 840 - .../racc-1.7.3/ext/racc/cparse/extconf.rb | 8 - bundle/ruby/3.2.0/gems/racc-1.7.3/lib/racc.rb | 6 - .../3.2.0/gems/racc-1.7.3/lib/racc/compat.rb | 33 - .../3.2.0/gems/racc-1.7.3/lib/racc/cparse.so | Bin 130000 -> 0 bytes .../gems/racc-1.7.3/lib/racc/debugflags.rb | 60 - .../gems/racc-1.7.3/lib/racc/exception.rb | 16 - .../3.2.0/gems/racc-1.7.3/lib/racc/grammar.rb | 1114 -- .../racc-1.7.3/lib/racc/grammarfileparser.rb | 561 - .../3.2.0/gems/racc-1.7.3/lib/racc/info.rb | 18 - .../3.2.0/gems/racc-1.7.3/lib/racc/iset.rb | 92 - .../racc-1.7.3/lib/racc/logfilegenerator.rb | 212 - .../gems/racc-1.7.3/lib/racc/parser-text.rb | 648 - .../3.2.0/gems/racc-1.7.3/lib/racc/parser.rb | 634 - .../lib/racc/parserfilegenerator.rb | 473 - .../gems/racc-1.7.3/lib/racc/sourcetext.rb | 35 - .../3.2.0/gems/racc-1.7.3/lib/racc/state.rb | 972 - .../lib/racc/statetransitiontable.rb | 311 - .../3.2.0/gems/racc-1.7.3/lib/racc/static.rb | 5 - .../3.2.0/gems/rainbow-3.1.1/Changelog.md | 101 - bundle/ruby/3.2.0/gems/rainbow-3.1.1/LICENSE | 20 - .../3.2.0/gems/rainbow-3.1.1/README.markdown | 227 - .../3.2.0/gems/rainbow-3.1.1/lib/rainbow.rb | 13 - .../gems/rainbow-3.1.1/lib/rainbow/color.rb | 150 - .../rainbow-3.1.1/lib/rainbow/ext/string.rb | 64 - .../gems/rainbow-3.1.1/lib/rainbow/global.rb | 25 - .../lib/rainbow/null_presenter.rb | 100 - .../rainbow-3.1.1/lib/rainbow/presenter.rb | 144 - .../rainbow-3.1.1/lib/rainbow/refinement.rb | 14 - .../rainbow-3.1.1/lib/rainbow/string_utils.rb | 22 - .../gems/rainbow-3.1.1/lib/rainbow/version.rb | 5 - .../gems/rainbow-3.1.1/lib/rainbow/wrapper.rb | 22 - .../lib/rainbow/x11_color_names.rb | 153 - .../ruby/3.2.0/gems/rake-13.1.0/History.rdoc | 2403 --- .../ruby/3.2.0/gems/rake-13.1.0/MIT-LICENSE | 21 - .../ruby/3.2.0/gems/rake-13.1.0/README.rdoc | 155 - .../rake-13.1.0/doc/command_line_usage.rdoc | 158 - .../gems/rake-13.1.0/doc/example/Rakefile1 | 38 - .../gems/rake-13.1.0/doc/example/Rakefile2 | 35 - .../3.2.0/gems/rake-13.1.0/doc/example/a.c | 6 - .../3.2.0/gems/rake-13.1.0/doc/example/b.c | 6 - .../3.2.0/gems/rake-13.1.0/doc/example/main.c | 11 - .../3.2.0/gems/rake-13.1.0/doc/glossary.rdoc | 42 - .../ruby/3.2.0/gems/rake-13.1.0/doc/jamis.rb | 592 - .../gems/rake-13.1.0/doc/proto_rake.rdoc | 127 - bundle/ruby/3.2.0/gems/rake-13.1.0/doc/rake.1 | 156 - .../3.2.0/gems/rake-13.1.0/doc/rakefile.rdoc | 622 - .../3.2.0/gems/rake-13.1.0/doc/rational.rdoc | 151 - bundle/ruby/3.2.0/gems/rake-13.1.0/exe/rake | 27 - .../ruby/3.2.0/gems/rake-13.1.0/lib/rake.rb | 71 - .../gems/rake-13.1.0/lib/rake/application.rb | 855 - .../gems/rake-13.1.0/lib/rake/backtrace.rb | 24 - .../3.2.0/gems/rake-13.1.0/lib/rake/clean.rb | 78 - .../gems/rake-13.1.0/lib/rake/cloneable.rb | 17 - .../gems/rake-13.1.0/lib/rake/cpu_counter.rb | 107 - .../rake-13.1.0/lib/rake/default_loader.rb | 15 - .../rake-13.1.0/lib/rake/dsl_definition.rb | 195 - .../gems/rake-13.1.0/lib/rake/early_time.rb | 22 - .../gems/rake-13.1.0/lib/rake/ext/core.rb | 26 - .../gems/rake-13.1.0/lib/rake/ext/string.rb | 176 - .../lib/rake/file_creation_task.rb | 25 - .../gems/rake-13.1.0/lib/rake/file_list.rb | 435 - .../gems/rake-13.1.0/lib/rake/file_task.rb | 58 - .../gems/rake-13.1.0/lib/rake/file_utils.rb | 132 - .../rake-13.1.0/lib/rake/file_utils_ext.rb | 134 - .../rake-13.1.0/lib/rake/invocation_chain.rb | 57 - .../lib/rake/invocation_exception_mixin.rb | 17 - .../gems/rake-13.1.0/lib/rake/late_time.rb | 18 - .../gems/rake-13.1.0/lib/rake/linked_list.rb | 112 - .../rake-13.1.0/lib/rake/loaders/makefile.rb | 54 - .../gems/rake-13.1.0/lib/rake/multi_task.rb | 14 - .../gems/rake-13.1.0/lib/rake/name_space.rb | 38 - .../gems/rake-13.1.0/lib/rake/packagetask.rb | 222 - .../3.2.0/gems/rake-13.1.0/lib/rake/phony.rb | 16 - .../rake-13.1.0/lib/rake/private_reader.rb | 21 - .../gems/rake-13.1.0/lib/rake/promise.rb | 100 - .../rake-13.1.0/lib/rake/pseudo_status.rb | 30 - .../gems/rake-13.1.0/lib/rake/rake_module.rb | 67 - .../rake-13.1.0/lib/rake/rake_test_loader.rb | 27 - .../lib/rake/rule_recursion_overflow_error.rb | 20 - .../3.2.0/gems/rake-13.1.0/lib/rake/scope.rb | 43 - .../3.2.0/gems/rake-13.1.0/lib/rake/task.rb | 434 - .../lib/rake/task_argument_error.rb | 8 - .../rake-13.1.0/lib/rake/task_arguments.rb | 109 - .../gems/rake-13.1.0/lib/rake/task_manager.rb | 331 - .../gems/rake-13.1.0/lib/rake/tasklib.rb | 12 - .../gems/rake-13.1.0/lib/rake/testtask.rb | 189 - .../lib/rake/thread_history_display.rb | 49 - .../gems/rake-13.1.0/lib/rake/thread_pool.rb | 163 - .../gems/rake-13.1.0/lib/rake/trace_output.rb | 23 - .../gems/rake-13.1.0/lib/rake/version.rb | 10 - .../3.2.0/gems/rake-13.1.0/lib/rake/win32.rb | 51 - .../ruby/3.2.0/gems/rake-13.1.0/rake.gemspec | 101 - .../ruby/3.2.0/gems/rb-readline-0.5.5/CHANGES | 94 - .../ruby/3.2.0/gems/rb-readline-0.5.5/LICENSE | 25 - .../3.2.0/gems/rb-readline-0.5.5/README.md | 81 - .../3.2.0/gems/rb-readline-0.5.5/Rakefile | 25 - .../bench/_rl_adjust_point.rb | 26 - .../examples/example_readline.rb | 8 - .../example_readline_with_completion.rb | 18 - .../rb-readline-0.5.5/examples/tinyirb.rb | 11 - .../gems/rb-readline-0.5.5/lib/rb-readline.rb | 18 - .../gems/rb-readline-0.5.5/lib/rbreadline.rb | 8920 --------- .../lib/rbreadline/version.rb | 3 - .../gems/rb-readline-0.5.5/lib/readline.rb | 539 - .../rb-readline-0.5.5/rb-readline.gemspec | 51 - .../3.2.0/gems/rb-readline-0.5.5/setup.rb | 1585 -- .../support/filesystem_completion_helper.rb | 53 - .../rb-readline-0.5.5/test/test_completion.rb | 100 - .../test/test_filename_completion_proc.rb | 88 - .../rb-readline-0.5.5/test/test_history.rb | 29 - .../rb-readline-0.5.5/test/test_rbreadline.rb | 23 - .../rb-readline-0.5.5/test/test_readline.rb | 221 - .../3.2.0/gems/rchardet-1.8.0/lib/rchardet.rb | 67 - .../rchardet-1.8.0/lib/rchardet/big5freq.rb | 927 - .../rchardet-1.8.0/lib/rchardet/big5prober.rb | 42 - .../lib/rchardet/chardistribution.rb | 250 - .../lib/rchardet/charsetgroupprober.rb | 110 - .../lib/rchardet/charsetprober.rb | 70 - .../lib/rchardet/codingstatemachine.rb | 67 - .../rchardet-1.8.0/lib/rchardet/constants.rb | 42 - .../rchardet-1.8.0/lib/rchardet/escprober.rb | 90 - .../gems/rchardet-1.8.0/lib/rchardet/escsm.rb | 245 - .../lib/rchardet/eucjpprober.rb | 88 - .../rchardet-1.8.0/lib/rchardet/euckrfreq.rb | 597 - .../lib/rchardet/euckrprober.rb | 42 - .../rchardet-1.8.0/lib/rchardet/euctwfreq.rb | 431 - .../lib/rchardet/euctwprober.rb | 42 - .../lib/rchardet/gb18030freq.rb | 474 - .../lib/rchardet/gb18030prober.rb | 42 - .../lib/rchardet/hebrewprober.rb | 289 - .../rchardet-1.8.0/lib/rchardet/jisfreq.rb | 571 - .../rchardet-1.8.0/lib/rchardet/jpcntx.rb | 229 - .../lib/rchardet/langbulgarianmodel.rb | 229 - .../lib/rchardet/langcyrillicmodel.rb | 330 - .../lib/rchardet/langgreekmodel.rb | 227 - .../lib/rchardet/langhebrewmodel.rb | 202 - .../lib/rchardet/langhungarianmodel.rb | 226 - .../lib/rchardet/langthaimodel.rb | 201 - .../lib/rchardet/latin1prober.rb | 147 - .../lib/rchardet/mbcharsetprober.rb | 89 - .../lib/rchardet/mbcsgroupprober.rb | 47 - .../rchardet-1.8.0/lib/rchardet/mbcssm.rb | 542 - .../lib/rchardet/sbcharsetprober.rb | 122 - .../lib/rchardet/sbcsgroupprober.rb | 58 - .../rchardet-1.8.0/lib/rchardet/sjisprober.rb | 88 - .../lib/rchardet/universaldetector.rb | 179 - .../rchardet-1.8.0/lib/rchardet/utf8prober.rb | 87 - .../rchardet-1.8.0/lib/rchardet/version.rb | 3 - .../3.2.0/gems/regexp_parser-2.9.0/Gemfile | 15 - .../3.2.0/gems/regexp_parser-2.9.0/LICENSE | 22 - .../3.2.0/gems/regexp_parser-2.9.0/Rakefile | 23 - .../regexp_parser-2.9.0/lib/regexp_parser.rb | 6 - .../lib/regexp_parser/error.rb | 4 - .../lib/regexp_parser/expression.rb | 37 - .../lib/regexp_parser/expression/base.rb | 76 - .../expression/classes/alternation.rb | 10 - .../expression/classes/anchor.rb | 24 - .../expression/classes/backreference.rb | 75 - .../expression/classes/character_set.rb | 23 - .../classes/character_set/intersection.rb | 9 - .../expression/classes/character_set/range.rb | 19 - .../expression/classes/character_type.rb | 17 - .../expression/classes/conditional.rb | 64 - .../expression/classes/escape_sequence.rb | 102 - .../expression/classes/free_space.rb | 17 - .../regexp_parser/expression/classes/group.rb | 73 - .../regexp_parser/expression/classes/keep.rb | 7 - .../expression/classes/literal.rb | 3 - .../expression/classes/posix_class.rb | 11 - .../regexp_parser/expression/classes/root.rb | 9 - .../expression/classes/unicode_property.rb | 119 - .../expression/methods/construct.rb | 41 - .../expression/methods/human_name.rb | 43 - .../regexp_parser/expression/methods/match.rb | 13 - .../expression/methods/match_length.rb | 176 - .../expression/methods/negative.rb | 20 - .../expression/methods/options.rb | 35 - .../regexp_parser/expression/methods/parts.rb | 23 - .../expression/methods/printing.rb | 26 - .../expression/methods/strfregexp.rb | 114 - .../regexp_parser/expression/methods/tests.rb | 143 - .../expression/methods/traverse.rb | 80 - .../regexp_parser/expression/quantifier.rb | 84 - .../lib/regexp_parser/expression/sequence.rb | 31 - .../expression/sequence_operation.rb | 20 - .../lib/regexp_parser/expression/shared.rb | 111 - .../regexp_parser/expression/subexpression.rb | 67 - .../lib/regexp_parser/lexer.rb | 169 - .../lib/regexp_parser/parser.rb | 596 - .../lib/regexp_parser/scanner.rb | 2514 --- .../lib/regexp_parser/scanner/char_type.rl | 28 - .../scanner/errors/premature_end_error.rb | 8 - .../scanner/errors/scanner_error.rb | 6 - .../scanner/errors/validation_error.rb | 63 - .../lib/regexp_parser/scanner/property.rl | 30 - .../lib/regexp_parser/scanner/scanner.rl | 828 - .../lib/regexp_parser/syntax.rb | 11 - .../lib/regexp_parser/syntax/any.rb | 10 - .../lib/regexp_parser/syntax/base.rb | 120 - .../lib/regexp_parser/syntax/token.rb | 45 - .../lib/regexp_parser/syntax/token/anchor.rb | 15 - .../regexp_parser/syntax/token/assertion.rb | 13 - .../syntax/token/backreference.rb | 33 - .../syntax/token/character_set.rb | 16 - .../syntax/token/character_type.rb | 16 - .../regexp_parser/syntax/token/conditional.rb | 16 - .../lib/regexp_parser/syntax/token/escape.rb | 33 - .../lib/regexp_parser/syntax/token/group.rb | 23 - .../lib/regexp_parser/syntax/token/keep.rb | 12 - .../lib/regexp_parser/syntax/token/meta.rb | 20 - .../regexp_parser/syntax/token/posix_class.rb | 17 - .../regexp_parser/syntax/token/quantifier.rb | 35 - .../syntax/token/unicode_property.rb | 751 - .../lib/regexp_parser/syntax/token/virtual.rb | 11 - .../regexp_parser/syntax/version_lookup.rb | 65 - .../lib/regexp_parser/syntax/versions.rb | 8 - .../regexp_parser/syntax/versions/1.8.6.rb | 14 - .../regexp_parser/syntax/versions/1.9.1.rb | 11 - .../regexp_parser/syntax/versions/1.9.3.rb | 4 - .../regexp_parser/syntax/versions/2.0.0.rb | 10 - .../regexp_parser/syntax/versions/2.2.0.rb | 4 - .../regexp_parser/syntax/versions/2.3.0.rb | 4 - .../regexp_parser/syntax/versions/2.4.0.rb | 4 - .../regexp_parser/syntax/versions/2.4.1.rb | 3 - .../regexp_parser/syntax/versions/2.5.0.rb | 4 - .../regexp_parser/syntax/versions/2.6.0.rb | 4 - .../regexp_parser/syntax/versions/2.6.2.rb | 4 - .../regexp_parser/syntax/versions/2.6.3.rb | 4 - .../regexp_parser/syntax/versions/3.1.0.rb | 4 - .../regexp_parser/syntax/versions/3.2.0.rb | 4 - .../lib/regexp_parser/token.rb | 24 - .../lib/regexp_parser/version.rb | 5 - .../regexp_parser-2.9.0/regexp_parser.gemspec | 32 - .../ruby/3.2.0/gems/rexml-3.2.6/LICENSE.txt | 22 - bundle/ruby/3.2.0/gems/rexml-3.2.6/NEWS.md | 276 - bundle/ruby/3.2.0/gems/rexml-3.2.6/README.md | 57 - .../gems/rexml-3.2.6/doc/rexml/context.rdoc | 143 - .../doc/rexml/tasks/rdoc/child.rdoc | 87 - .../doc/rexml/tasks/rdoc/document.rdoc | 276 - .../doc/rexml/tasks/rdoc/element.rdoc | 602 - .../doc/rexml/tasks/rdoc/node.rdoc | 97 - .../doc/rexml/tasks/rdoc/parent.rdoc | 267 - .../doc/rexml/tasks/tocs/child_toc.rdoc | 12 - .../doc/rexml/tasks/tocs/document_toc.rdoc | 30 - .../doc/rexml/tasks/tocs/element_toc.rdoc | 55 - .../doc/rexml/tasks/tocs/master_toc.rdoc | 135 - .../doc/rexml/tasks/tocs/node_toc.rdoc | 16 - .../doc/rexml/tasks/tocs/parent_toc.rdoc | 25 - .../gems/rexml-3.2.6/doc/rexml/tutorial.rdoc | 1358 -- .../ruby/3.2.0/gems/rexml-3.2.6/lib/rexml.rb | 3 - .../gems/rexml-3.2.6/lib/rexml/attlistdecl.rb | 63 - .../gems/rexml-3.2.6/lib/rexml/attribute.rb | 210 - .../3.2.0/gems/rexml-3.2.6/lib/rexml/cdata.rb | 68 - .../3.2.0/gems/rexml-3.2.6/lib/rexml/child.rb | 97 - .../gems/rexml-3.2.6/lib/rexml/comment.rb | 80 - .../gems/rexml-3.2.6/lib/rexml/doctype.rb | 311 - .../gems/rexml-3.2.6/lib/rexml/document.rb | 451 - .../rexml-3.2.6/lib/rexml/dtd/attlistdecl.rb | 11 - .../gems/rexml-3.2.6/lib/rexml/dtd/dtd.rb | 47 - .../rexml-3.2.6/lib/rexml/dtd/elementdecl.rb | 18 - .../rexml-3.2.6/lib/rexml/dtd/entitydecl.rb | 57 - .../rexml-3.2.6/lib/rexml/dtd/notationdecl.rb | 40 - .../gems/rexml-3.2.6/lib/rexml/element.rb | 2599 --- .../gems/rexml-3.2.6/lib/rexml/encoding.rb | 51 - .../gems/rexml-3.2.6/lib/rexml/entity.rb | 181 - .../lib/rexml/formatters/default.rb | 116 - .../lib/rexml/formatters/pretty.rb | 142 - .../lib/rexml/formatters/transitive.rb | 58 - .../gems/rexml-3.2.6/lib/rexml/functions.rb | 447 - .../gems/rexml-3.2.6/lib/rexml/instruction.rb | 79 - .../gems/rexml-3.2.6/lib/rexml/light/node.rb | 188 - .../gems/rexml-3.2.6/lib/rexml/namespace.rb | 63 - .../3.2.0/gems/rexml-3.2.6/lib/rexml/node.rb | 76 - .../gems/rexml-3.2.6/lib/rexml/output.rb | 30 - .../gems/rexml-3.2.6/lib/rexml/parent.rb | 166 - .../rexml-3.2.6/lib/rexml/parseexception.rb | 52 - .../lib/rexml/parsers/baseparser.rb | 694 - .../lib/rexml/parsers/lightparser.rb | 59 - .../lib/rexml/parsers/pullparser.rb | 197 - .../lib/rexml/parsers/sax2parser.rb | 273 - .../lib/rexml/parsers/streamparser.rb | 61 - .../lib/rexml/parsers/treeparser.rb | 101 - .../lib/rexml/parsers/ultralightparser.rb | 57 - .../lib/rexml/parsers/xpathparser.rb | 739 - .../gems/rexml-3.2.6/lib/rexml/quickpath.rb | 266 - .../3.2.0/gems/rexml-3.2.6/lib/rexml/rexml.rb | 39 - .../rexml-3.2.6/lib/rexml/sax2listener.rb | 98 - .../gems/rexml-3.2.6/lib/rexml/security.rb | 28 - .../gems/rexml-3.2.6/lib/rexml/source.rb | 298 - .../rexml-3.2.6/lib/rexml/streamlistener.rb | 93 - .../3.2.0/gems/rexml-3.2.6/lib/rexml/text.rb | 426 - .../lib/rexml/undefinednamespaceexception.rb | 9 - .../lib/rexml/validation/relaxng.rb | 539 - .../lib/rexml/validation/validation.rb | 144 - .../rexml/validation/validationexception.rb | 10 - .../gems/rexml-3.2.6/lib/rexml/xmldecl.rb | 130 - .../gems/rexml-3.2.6/lib/rexml/xmltokens.rb | 85 - .../3.2.0/gems/rexml-3.2.6/lib/rexml/xpath.rb | 81 - .../rexml-3.2.6/lib/rexml/xpath_parser.rb | 974 - .../3.2.0/gems/rubocop-1.61.0/LICENSE.txt | 20 - .../ruby/3.2.0/gems/rubocop-1.61.0/README.md | 252 - .../3.2.0/gems/rubocop-1.61.0/assets/logo.png | Bin 5390 -> 0 bytes .../gems/rubocop-1.61.0/assets/output.css.erb | 159 - .../rubocop-1.61.0/assets/output.html.erb | 102 - .../gems/rubocop-1.61.0/config/default.yml | 5695 ------ .../gems/rubocop-1.61.0/config/obsoletion.yml | 238 - .../3.2.0/gems/rubocop-1.61.0/exe/rubocop | 23 - .../3.2.0/gems/rubocop-1.61.0/lib/rubocop.rb | 771 - .../lib/rubocop/arguments_env.rb | 17 - .../lib/rubocop/arguments_file.rb | 17 - .../rubocop-1.61.0/lib/rubocop/ast_aliases.rb | 8 - .../lib/rubocop/cache_config.rb | 29 - .../rubocop-1.61.0/lib/rubocop/cached_data.rb | 58 - .../gems/rubocop-1.61.0/lib/rubocop/cli.rb | 208 - .../rubocop-1.61.0/lib/rubocop/cli/command.rb | 22 - .../cli/command/auto_generate_config.rb | 159 - .../lib/rubocop/cli/command/base.rb | 35 - .../lib/rubocop/cli/command/execute_runner.rb | 105 - .../lib/rubocop/cli/command/init_dotfile.rb | 44 - .../lib/rubocop/cli/command/lsp.rb | 19 - .../lib/rubocop/cli/command/show_cops.rb | 74 - .../lib/rubocop/cli/command/show_docs_url.rb | 48 - .../rubocop/cli/command/suggest_extensions.rb | 126 - .../lib/rubocop/cli/command/version.rb | 18 - .../lib/rubocop/cli/environment.rb | 22 - .../lib/rubocop/comment_config.rb | 216 - .../gems/rubocop-1.61.0/lib/rubocop/config.rb | 328 - .../lib/rubocop/config_finder.rb | 78 - .../lib/rubocop/config_loader.rb | 258 - .../lib/rubocop/config_loader_resolver.rb | 281 - .../lib/rubocop/config_obsoletion.rb | 111 - .../changed_enforced_styles.rb | 33 - .../config_obsoletion/changed_parameter.rb | 26 - .../lib/rubocop/config_obsoletion/cop_rule.rb | 33 - .../config_obsoletion/extracted_cop.rb | 46 - .../config_obsoletion/parameter_rule.rb | 56 - .../rubocop/config_obsoletion/removed_cop.rb | 41 - .../rubocop/config_obsoletion/renamed_cop.rb | 34 - .../lib/rubocop/config_obsoletion/rule.rb | 41 - .../rubocop/config_obsoletion/split_cop.rb | 27 - .../lib/rubocop/config_regeneration.rb | 33 - .../lib/rubocop/config_store.rb | 72 - .../lib/rubocop/config_validator.rb | 279 - .../lib/rubocop/cop/autocorrect_logic.rb | 134 - .../rubocop-1.61.0/lib/rubocop/cop/badge.rb | 68 - .../rubocop-1.61.0/lib/rubocop/cop/base.rb | 497 - .../lib/rubocop/cop/bundler/duplicated_gem.rb | 94 - .../rubocop/cop/bundler/duplicated_group.rb | 127 - .../lib/rubocop/cop/bundler/gem_comment.rb | 171 - .../lib/rubocop/cop/bundler/gem_filename.rb | 103 - .../lib/rubocop/cop/bundler/gem_version.rb | 133 - .../cop/bundler/insecure_protocol_source.rb | 86 - .../lib/rubocop/cop/bundler/ordered_gems.rb | 70 - .../lib/rubocop/cop/commissioner.rb | 182 - .../rubocop-1.61.0/lib/rubocop/cop/cop.rb | 166 - .../lib/rubocop/cop/corrector.rb | 138 - .../cop/correctors/alignment_corrector.rb | 136 - .../cop/correctors/condition_corrector.rb | 25 - .../cop/correctors/each_to_for_corrector.rb | 47 - .../cop/correctors/empty_line_corrector.rb | 25 - .../cop/correctors/for_to_each_corrector.rb | 66 - .../cop/correctors/if_then_corrector.rb | 55 - .../lambda_literal_to_method_corrector.rb | 139 - .../cop/correctors/line_break_corrector.rb | 64 - .../multiline_literal_brace_corrector.rb | 113 - .../cop/correctors/ordered_gem_corrector.rb | 38 - .../cop/correctors/parentheses_corrector.rb | 86 - .../correctors/percent_literal_corrector.rb | 106 - .../cop/correctors/punctuation_corrector.rb | 27 - .../correctors/require_library_corrector.rb | 23 - .../rubocop/cop/correctors/space_corrector.rb | 46 - .../correctors/string_literal_corrector.rb | 23 - .../cop/correctors/unused_arg_corrector.rb | 40 - .../lib/rubocop/cop/documentation.rb | 39 - .../lib/rubocop/cop/exclude_limit.rb | 26 - .../rubocop-1.61.0/lib/rubocop/cop/force.rb | 43 - .../rubocop/cop/gemspec/dependency_version.rb | 154 - .../deprecated_attribute_assignment.rb | 92 - .../cop/gemspec/development_dependencies.rb | 107 - .../cop/gemspec/duplicated_assignment.rb | 89 - .../cop/gemspec/ordered_dependencies.rb | 101 - .../lib/rubocop/cop/gemspec/require_mfa.rb | 145 - .../cop/gemspec/required_ruby_version.rb | 129 - .../cop/gemspec/ruby_version_globals_usage.rb | 50 - .../lib/rubocop/cop/generator.rb | 217 - .../cop/generator/configuration_injector.rb | 65 - .../cop/generator/require_file_injector.rb | 75 - .../lib/rubocop/cop/ignored_node.rb | 36 - .../lib/rubocop/cop/internal_affairs.rb | 33 - .../cop/internal_affairs/cop_description.rb | 122 - .../cop/internal_affairs/create_empty_file.rb | 37 - ...e_between_expect_offense_and_correction.rb | 68 - .../internal_affairs/example_description.rb | 113 - .../example_heredoc_delimiter.rb | 111 - .../inherit_deprecated_cop_class.rb | 34 - .../cop/internal_affairs/lambda_or_proc.rb | 46 - .../internal_affairs/location_expression.rb | 37 - .../location_line_equality_comparison.rb | 62 - .../internal_affairs/method_name_end_with.rb | 82 - .../cop/internal_affairs/method_name_equal.rb | 49 - .../internal_affairs/node_destructuring.rb | 44 - .../node_first_or_last_argument.rb | 53 - .../node_matcher_directive.rb | 147 - .../internal_affairs/node_type_predicate.rb | 41 - .../cop/internal_affairs/numblock_handler.rb | 69 - .../offense_location_keyword.rb | 56 - .../processed_source_buffer_name.rb | 42 - .../redundant_context_config_parameter.rb | 46 - .../redundant_described_class_as_subject.rb | 62 - .../redundant_expect_offense_arguments.rb | 34 - .../redundant_let_rubocop_config_new.rb | 73 - .../redundant_location_argument.rb | 53 - .../redundant_message_argument.rb | 76 - .../redundant_method_dispatch_node.rb | 56 - .../redundant_source_range.rb | 66 - .../single_line_comparison.rb | 62 - .../style_detected_api_use.rb | 148 - .../cop/internal_affairs/undefined_config.rb | 73 - .../useless_message_assertion.rb | 54 - .../useless_restrict_on_send.rb | 60 - .../cop/layout/access_modifier_indentation.rb | 100 - .../rubocop/cop/layout/argument_alignment.rb | 158 - .../lib/rubocop/cop/layout/array_alignment.rb | 84 - .../cop/layout/assignment_indentation.rb | 56 - .../rubocop/cop/layout/begin_end_alignment.rb | 74 - .../lib/rubocop/cop/layout/block_alignment.rb | 240 - .../rubocop/cop/layout/block_end_newline.rb | 82 - .../rubocop/cop/layout/case_indentation.rb | 219 - .../lib/rubocop/cop/layout/class_structure.rb | 346 - .../cop/layout/closing_heredoc_indentation.rb | 123 - .../layout/closing_parenthesis_indentation.rb | 193 - .../rubocop/cop/layout/comment_indentation.rb | 168 - .../rubocop/cop/layout/condition_position.rb | 64 - .../rubocop/cop/layout/def_end_alignment.rb | 73 - .../lib/rubocop/cop/layout/dot_position.rb | 139 - .../lib/rubocop/cop/layout/else_alignment.rb | 156 - .../lib/rubocop/cop/layout/empty_comment.rb | 151 - .../layout/empty_line_after_guard_clause.rb | 214 - .../layout/empty_line_after_magic_comment.rb | 64 - .../empty_line_after_multiline_condition.rb | 136 - .../cop/layout/empty_line_between_defs.rb | 296 - .../lib/rubocop/cop/layout/empty_lines.rb | 73 - .../empty_lines_around_access_modifier.rb | 211 - .../layout/empty_lines_around_arguments.rb | 103 - .../empty_lines_around_attribute_accessor.rb | 139 - .../layout/empty_lines_around_begin_body.rb | 42 - .../layout/empty_lines_around_block_body.rb | 40 - .../layout/empty_lines_around_class_body.rb | 85 - ...ines_around_exception_handling_keywords.rb | 135 - .../layout/empty_lines_around_method_body.rb | 42 - .../layout/empty_lines_around_module_body.rb | 59 - .../lib/rubocop/cop/layout/end_alignment.rb | 210 - .../lib/rubocop/cop/layout/end_of_line.rb | 92 - .../lib/rubocop/cop/layout/extra_spacing.rb | 185 - .../cop/layout/first_argument_indentation.rb | 287 - .../layout/first_array_element_indentation.rb | 195 - .../layout/first_array_element_line_break.rb | 68 - .../layout/first_hash_element_indentation.rb | 239 - .../layout/first_hash_element_line_break.rb | 68 - .../first_method_argument_line_break.rb | 97 - .../first_method_parameter_line_break.rb | 75 - .../cop/layout/first_parameter_indentation.rb | 101 - .../lib/rubocop/cop/layout/hash_alignment.rb | 396 - .../heredoc_argument_closing_parenthesis.rb | 311 - .../rubocop/cop/layout/heredoc_indentation.rb | 165 - .../cop/layout/indentation_consistency.rb | 205 - .../rubocop/cop/layout/indentation_style.rb | 115 - .../rubocop/cop/layout/indentation_width.rb | 389 - .../rubocop/cop/layout/initial_indentation.rb | 55 - .../cop/layout/leading_comment_space.rb | 121 - .../rubocop/cop/layout/leading_empty_lines.rb | 48 - .../layout/line_continuation_leading_space.rb | 144 - .../cop/layout/line_continuation_spacing.rb | 140 - ...ne_end_string_concatenation_indentation.rb | 143 - .../lib/rubocop/cop/layout/line_length.rb | 276 - .../layout/multiline_array_brace_layout.rb | 115 - .../cop/layout/multiline_array_line_breaks.rb | 65 - .../cop/layout/multiline_assignment_layout.rb | 117 - .../cop/layout/multiline_block_layout.rb | 161 - .../cop/layout/multiline_hash_brace_layout.rb | 115 - .../layout/multiline_hash_key_line_breaks.rb | 74 - .../multiline_method_argument_line_breaks.rb | 87 - .../multiline_method_call_brace_layout.rb | 131 - .../multiline_method_call_indentation.rb | 263 - ...ultiline_method_definition_brace_layout.rb | 128 - .../multiline_method_parameter_line_breaks.rb | 77 - .../layout/multiline_operation_indentation.rb | 127 - .../rubocop/cop/layout/parameter_alignment.rb | 119 - .../cop/layout/redundant_line_break.rb | 155 - .../cop/layout/rescue_ensure_alignment.rb | 211 - .../cop/layout/single_line_block_chain.rb | 69 - .../rubocop/cop/layout/space_after_colon.rb | 49 - .../rubocop/cop/layout/space_after_comma.rb | 40 - .../cop/layout/space_after_method_name.rb | 39 - .../lib/rubocop/cop/layout/space_after_not.rb | 39 - .../cop/layout/space_after_semicolon.rb | 29 - .../layout/space_around_block_parameters.rb | 162 - ...pace_around_equals_in_parameter_default.rb | 89 - .../cop/layout/space_around_keyword.rb | 268 - .../space_around_method_call_operator.rb | 98 - .../cop/layout/space_around_operators.rb | 290 - .../cop/layout/space_before_block_braces.rb | 163 - .../cop/layout/space_before_brackets.rb | 73 - .../rubocop/cop/layout/space_before_comma.rb | 29 - .../cop/layout/space_before_comment.rb | 34 - .../cop/layout/space_before_first_arg.rb | 73 - .../cop/layout/space_before_semicolon.rb | 24 - .../cop/layout/space_in_lambda_literal.rb | 78 - .../space_inside_array_literal_brackets.rb | 224 - .../space_inside_array_percent_literal.rb | 46 - .../cop/layout/space_inside_block_braces.rb | 263 - .../space_inside_hash_literal_braces.rb | 208 - .../rubocop/cop/layout/space_inside_parens.rb | 176 - ...space_inside_percent_literal_delimiters.rb | 94 - .../cop/layout/space_inside_range_literal.rb | 54 - .../layout/space_inside_reference_brackets.rb | 143 - .../space_inside_string_interpolation.rb | 65 - .../cop/layout/trailing_empty_lines.rb | 113 - .../rubocop/cop/layout/trailing_whitespace.rb | 131 - .../rubocop/cop/legacy/corrections_proxy.rb | 43 - .../lib/rubocop/cop/legacy/corrector.rb | 27 - .../rubocop/cop/lint/ambiguous_assignment.rb | 54 - .../cop/lint/ambiguous_block_association.rb | 107 - .../rubocop/cop/lint/ambiguous_operator.rb | 107 - .../cop/lint/ambiguous_operator_precedence.rb | 111 - .../lib/rubocop/cop/lint/ambiguous_range.rb | 105 - .../cop/lint/ambiguous_regexp_literal.rb | 80 - .../cop/lint/assignment_in_condition.rb | 109 - .../lib/rubocop/cop/lint/big_decimal_new.rb | 44 - ...binary_operator_with_identical_operands.rb | 68 - .../lib/rubocop/cop/lint/boolean_symbol.rb | 63 - .../cop/lint/circular_argument_reference.rb | 72 - .../cop/lint/constant_definition_in_block.rb | 100 - .../lint/constant_overwritten_in_rescue.rb | 51 - .../rubocop/cop/lint/constant_resolution.rb | 93 - .../lib/rubocop/cop/lint/debugger.rb | 125 - .../cop/lint/deprecated_class_methods.rb | 118 - .../rubocop/cop/lint/deprecated_constants.rb | 88 - .../cop/lint/deprecated_open_ssl_constant.rb | 154 - .../disjunctive_assignment_in_constructor.rb | 110 - .../lib/rubocop/cop/lint/duplicate_branch.rb | 153 - .../cop/lint/duplicate_case_condition.rb | 43 - .../cop/lint/duplicate_elsif_condition.rb | 39 - .../rubocop/cop/lint/duplicate_hash_key.rb | 37 - .../cop/lint/duplicate_magic_comment.rb | 73 - .../cop/lint/duplicate_match_pattern.rb | 122 - .../lib/rubocop/cop/lint/duplicate_methods.rb | 268 - ...uplicate_regexp_character_class_element.rb | 121 - .../lib/rubocop/cop/lint/duplicate_require.rb | 56 - .../cop/lint/duplicate_rescue_exception.rb | 47 - .../cop/lint/each_with_object_argument.rb | 44 - .../lib/rubocop/cop/lint/else_layout.rb | 90 - .../lib/rubocop/cop/lint/empty_block.rb | 94 - .../lib/rubocop/cop/lint/empty_class.rb | 95 - .../cop/lint/empty_conditional_body.rb | 177 - .../lib/rubocop/cop/lint/empty_ensure.rb | 58 - .../lib/rubocop/cop/lint/empty_expression.rb | 42 - .../lib/rubocop/cop/lint/empty_file.rb | 48 - .../lib/rubocop/cop/lint/empty_in_pattern.rb | 64 - .../rubocop/cop/lint/empty_interpolation.rb | 33 - .../lib/rubocop/cop/lint/empty_when.rb | 63 - .../lib/rubocop/cop/lint/ensure_return.rb | 59 - .../lib/rubocop/cop/lint/erb_new_arguments.rb | 161 - .../lib/rubocop/cop/lint/flip_flop.rb | 38 - .../lib/rubocop/cop/lint/float_comparison.rb | 103 - .../rubocop/cop/lint/float_out_of_range.rb | 34 - .../cop/lint/format_parameter_mismatch.rb | 201 - .../cop/lint/hash_compare_by_identity.rb | 48 - .../cop/lint/heredoc_method_call_position.rb | 152 - .../rubocop/cop/lint/identity_comparison.rb | 50 - .../cop/lint/implicit_string_concatenation.rb | 101 - ...mpatible_io_select_with_fiber_scheduler.rb | 81 - .../cop/lint/ineffective_access_modifier.rb | 121 - .../lib/rubocop/cop/lint/inherit_exception.rb | 105 - .../rubocop/cop/lint/interpolation_check.rb | 59 - .../cop/lint/it_without_arguments_in_block.rb | 56 - .../cop/lint/lambda_without_literal_block.rb | 51 - .../rubocop/cop/lint/literal_as_condition.rb | 164 - .../lint/literal_assignment_in_condition.rb | 85 - .../cop/lint/literal_in_interpolation.rb | 173 - .../lib/rubocop/cop/lint/loop.rb | 86 - .../cop/lint/missing_cop_enable_directive.rb | 111 - .../lib/rubocop/cop/lint/missing_super.rb | 159 - .../lib/rubocop/cop/lint/mixed_case_range.rb | 111 - .../cop/lint/mixed_regexp_capture_types.rb | 37 - .../rubocop/cop/lint/multiple_comparison.rb | 48 - .../cop/lint/nested_method_definition.rb | 144 - .../cop/lint/nested_percent_literal.rb | 63 - .../cop/lint/next_without_accumulator.rb | 55 - .../cop/lint/no_return_in_begin_end_blocks.rb | 58 - .../cop/lint/non_atomic_file_operation.rb | 165 - .../lint/non_deterministic_require_order.rb | 183 - .../cop/lint/non_local_exit_from_iterator.rb | 86 - .../lib/rubocop/cop/lint/number_conversion.rb | 201 - .../cop/lint/numbered_parameter_assignment.rb | 47 - .../cop/lint/or_assignment_to_constant.rb | 42 - .../cop/lint/ordered_magic_comments.rb | 81 - .../cop/lint/out_of_range_regexp_ref.rb | 128 - .../lint/parentheses_as_grouped_expression.rb | 92 - .../rubocop/cop/lint/percent_string_array.rb | 78 - .../rubocop/cop/lint/percent_symbol_array.rb | 68 - .../lib/rubocop/cop/lint/raise_exception.rb | 91 - .../lib/rubocop/cop/lint/rand_one.rb | 46 - .../lint/redundant_cop_disable_directive.rb | 330 - .../lint/redundant_cop_enable_directive.rb | 133 - .../cop/lint/redundant_dir_glob_sort.rb | 62 - .../cop/lint/redundant_regexp_quantifiers.rb | 130 - .../cop/lint/redundant_require_statement.rb | 99 - .../cop/lint/redundant_safe_navigation.rb | 155 - .../cop/lint/redundant_splat_expansion.rb | 209 - .../cop/lint/redundant_string_coercion.rb | 72 - .../rubocop/cop/lint/redundant_with_index.rb | 80 - .../rubocop/cop/lint/redundant_with_object.rb | 79 - .../cop/lint/refinement_import_methods.rb | 52 - .../rubocop/cop/lint/regexp_as_condition.rb | 37 - .../rubocop/cop/lint/require_parentheses.rb | 66 - .../cop/lint/require_range_parentheses.rb | 57 - .../cop/lint/require_relative_self_path.rb | 50 - .../lib/rubocop/cop/lint/rescue_exception.rb | 45 - .../lib/rubocop/cop/lint/rescue_type.rb | 86 - .../cop/lint/return_in_void_context.rb | 59 - .../rubocop/cop/lint/safe_navigation_chain.rb | 104 - .../cop/lint/safe_navigation_consistency.rb | 92 - .../cop/lint/safe_navigation_with_empty.rb | 46 - .../lib/rubocop/cop/lint/script_permission.rb | 73 - .../lib/rubocop/cop/lint/self_assignment.rb | 116 - .../cop/lint/send_with_mixin_argument.rb | 83 - .../lib/rubocop/cop/lint/shadowed_argument.rb | 177 - .../rubocop/cop/lint/shadowed_exception.rb | 165 - .../lint/shadowing_outer_local_variable.rb | 108 - .../rubocop/cop/lint/struct_new_override.rb | 59 - .../rubocop/cop/lint/suppressed_exception.rb | 132 - .../lib/rubocop/cop/lint/symbol_conversion.rb | 184 - .../lib/rubocop/cop/lint/syntax.rb | 46 - .../lib/rubocop/cop/lint/to_enum_arguments.rb | 101 - .../lib/rubocop/cop/lint/to_json.rb | 49 - .../lint/top_level_return_with_argument.rb | 48 - ...trailing_comma_in_attribute_declaration.rb | 55 - .../lib/rubocop/cop/lint/triple_quotes.rb | 71 - .../lint/underscore_prefixed_variable_name.rb | 80 - .../cop/lint/unexpected_block_arity.rb | 90 - .../lib/rubocop/cop/lint/unified_integer.rb | 44 - .../cop/lint/unmodified_reduce_accumulator.rb | 204 - .../lib/rubocop/cop/lint/unreachable_code.rb | 97 - .../lib/rubocop/cop/lint/unreachable_loop.rb | 202 - .../rubocop/cop/lint/unused_block_argument.rb | 172 - .../cop/lint/unused_method_argument.rb | 121 - .../rubocop/cop/lint/uri_escape_unescape.rb | 79 - .../lib/rubocop/cop/lint/uri_regexp.rb | 38 - .../cop/lint/useless_access_modifier.rb | 295 - .../rubocop/cop/lint/useless_assignment.rb | 209 - .../cop/lint/useless_else_without_rescue.rb | 44 - .../cop/lint/useless_method_definition.rb | 77 - .../lib/rubocop/cop/lint/useless_rescue.rb | 89 - .../cop/lint/useless_ruby2_keywords.rb | 127 - .../rubocop/cop/lint/useless_setter_call.rb | 173 - .../lib/rubocop/cop/lint/useless_times.rb | 114 - .../lib/rubocop/cop/lint/void.rb | 241 - .../lib/rubocop/cop/message_annotator.rb | 130 - .../lib/rubocop/cop/metrics/abc_size.rb | 56 - .../lib/rubocop/cop/metrics/block_length.rb | 86 - .../lib/rubocop/cop/metrics/block_nesting.rb | 60 - .../lib/rubocop/cop/metrics/class_length.rb | 76 - .../cop/metrics/collection_literal_length.rb | 76 - .../cop/metrics/cyclomatic_complexity.rb | 55 - .../lib/rubocop/cop/metrics/method_length.rb | 71 - .../lib/rubocop/cop/metrics/module_length.rb | 61 - .../rubocop/cop/metrics/parameter_lists.rb | 147 - .../cop/metrics/perceived_complexity.rb | 59 - .../cop/metrics/utils/abc_size_calculator.rb | 140 - .../metrics/utils/code_length_calculator.rb | 210 - .../cop/metrics/utils/iterating_block.rb | 61 - .../utils/repeated_attribute_discount.rb | 143 - .../metrics/utils/repeated_csend_discount.rb | 42 - .../rubocop/cop/migration/department_name.rb | 81 - .../lib/rubocop/cop/mixin/alignment.rb | 81 - .../rubocop/cop/mixin/allowed_identifiers.rb | 18 - .../lib/rubocop/cop/mixin/allowed_methods.rb | 42 - .../lib/rubocop/cop/mixin/allowed_pattern.rb | 56 - .../rubocop/cop/mixin/allowed_receivers.rb | 34 - .../rubocop/cop/mixin/annotation_comment.rb | 72 - .../lib/rubocop/cop/mixin/array_min_size.rb | 57 - .../lib/rubocop/cop/mixin/array_syntax.rb | 17 - .../lib/rubocop/cop/mixin/auto_corrector.rb | 12 - .../lib/rubocop/cop/mixin/check_assignment.rb | 44 - .../rubocop/cop/mixin/check_line_breakable.rb | 227 - .../lib/rubocop/cop/mixin/code_length.rb | 59 - .../lib/rubocop/cop/mixin/comments_help.rb | 90 - .../cop/mixin/configurable_enforced_style.rb | 112 - .../cop/mixin/configurable_formatting.rb | 41 - .../lib/rubocop/cop/mixin/configurable_max.rb | 24 - .../rubocop/cop/mixin/configurable_naming.rb | 16 - .../cop/mixin/configurable_numbering.rb | 18 - .../lib/rubocop/cop/mixin/def_node.rb | 26 - .../cop/mixin/documentation_comment.rb | 52 - .../lib/rubocop/cop/mixin/duplication.rb | 46 - .../cop/mixin/empty_lines_around_body.rb | 172 - .../lib/rubocop/cop/mixin/empty_parameter.rb | 25 - .../cop/mixin/end_keyword_alignment.rb | 80 - .../rubocop/cop/mixin/enforce_superclass.rb | 44 - .../cop/mixin/first_element_line_break.rb | 50 - .../cop/mixin/frozen_string_literal.rb | 88 - .../lib/rubocop/cop/mixin/gem_declaration.rb | 13 - .../lib/rubocop/cop/mixin/gemspec_help.rb | 30 - .../cop/mixin/hash_alignment_styles.rb | 156 - .../cop/mixin/hash_shorthand_syntax.rb | 229 - .../cop/mixin/hash_transform_method.rb | 192 - .../lib/rubocop/cop/mixin/heredoc.rb | 41 - .../lib/rubocop/cop/mixin/integer_node.rb | 14 - .../lib/rubocop/cop/mixin/interpolation.rb | 25 - .../lib/rubocop/cop/mixin/line_length_help.rb | 110 - .../lib/rubocop/cop/mixin/match_range.rb | 23 - .../rubocop/cop/mixin/method_complexity.rb | 74 - .../rubocop/cop/mixin/method_preference.rb | 30 - .../lib/rubocop/cop/mixin/min_body_length.rb | 21 - .../rubocop/cop/mixin/min_branches_count.rb | 40 - .../mixin/multiline_element_indentation.rb | 109 - .../mixin/multiline_element_line_breaks.rb | 32 - .../mixin/multiline_expression_indentation.rb | 228 - .../mixin/multiline_literal_brace_layout.rb | 141 - .../rubocop/cop/mixin/negative_conditional.rb | 34 - .../lib/rubocop/cop/mixin/nil_methods.rb | 23 - .../rubocop/cop/mixin/on_normal_if_unless.rb | 14 - .../lib/rubocop/cop/mixin/ordered_gem_node.rb | 66 - .../lib/rubocop/cop/mixin/parentheses.rb | 16 - .../lib/rubocop/cop/mixin/percent_array.rb | 125 - .../lib/rubocop/cop/mixin/percent_literal.rb | 32 - .../mixin/preceding_following_alignment.rb | 181 - .../rubocop/cop/mixin/preferred_delimiters.rb | 50 - .../lib/rubocop/cop/mixin/range_help.rb | 149 - .../lib/rubocop/cop/mixin/rational_literal.rb | 19 - .../lib/rubocop/cop/mixin/require_library.rb | 61 - .../lib/rubocop/cop/mixin/rescue_node.rb | 30 - .../lib/rubocop/cop/mixin/safe_assignment.rb | 27 - .../cop/mixin/space_after_punctuation.rb | 54 - .../cop/mixin/space_before_punctuation.rb | 49 - .../rubocop/cop/mixin/statement_modifier.rb | 109 - .../lib/rubocop/cop/mixin/string_help.rb | 40 - .../rubocop/cop/mixin/string_literals_help.rb | 21 - .../rubocop/cop/mixin/surrounding_space.rb | 134 - .../lib/rubocop/cop/mixin/symbol_help.rb | 13 - .../rubocop/cop/mixin/target_ruby_version.rb | 20 - .../lib/rubocop/cop/mixin/trailing_body.rb | 25 - .../lib/rubocop/cop/mixin/trailing_comma.rb | 209 - .../rubocop/cop/mixin/uncommunicative_name.rb | 104 - .../lib/rubocop/cop/mixin/unused_argument.rb | 29 - .../lib/rubocop/cop/mixin/visibility_help.rb | 72 - .../cop/naming/accessor_method_name.rb | 73 - .../rubocop/cop/naming/ascii_identifiers.rb | 90 - .../naming/binary_operator_parameter_name.rb | 53 - .../rubocop/cop/naming/block_forwarding.rb | 133 - .../cop/naming/block_parameter_name.rb | 49 - .../cop/naming/class_and_module_camel_case.rb | 45 - .../lib/rubocop/cop/naming/constant_name.rb | 83 - .../lib/rubocop/cop/naming/file_name.rb | 247 - .../cop/naming/heredoc_delimiter_case.rb | 68 - .../cop/naming/heredoc_delimiter_naming.rb | 57 - .../rubocop/cop/naming/inclusive_language.rb | 289 - .../naming/memoized_instance_variable_name.rb | 295 - .../lib/rubocop/cop/naming/method_name.rb | 81 - .../cop/naming/method_parameter_name.rb | 58 - .../lib/rubocop/cop/naming/predicate_name.rb | 134 - .../rescued_exceptions_variable_name.rb | 171 - .../lib/rubocop/cop/naming/variable_name.rb | 68 - .../lib/rubocop/cop/naming/variable_number.rb | 156 - .../rubocop-1.61.0/lib/rubocop/cop/offense.rb | 239 - .../lib/rubocop/cop/registry.rb | 315 - .../lib/rubocop/cop/security/compound_hash.rb | 106 - .../lib/rubocop/cop/security/eval.rb | 33 - .../lib/rubocop/cop/security/io_methods.rb | 49 - .../lib/rubocop/cop/security/json_load.rb | 47 - .../lib/rubocop/cop/security/marshal_load.rb | 39 - .../lib/rubocop/cop/security/open.rb | 89 - .../lib/rubocop/cop/security/yaml_load.rb | 49 - .../lib/rubocop/cop/severity.rb | 67 - .../cop/style/access_modifier_declarations.rb | 225 - .../rubocop/cop/style/accessor_grouping.rb | 180 - .../lib/rubocop/cop/style/alias.rb | 157 - .../lib/rubocop/cop/style/and_or.rb | 158 - .../rubocop/cop/style/arguments_forwarding.rb | 503 - .../lib/rubocop/cop/style/array_coercion.rb | 87 - .../lib/rubocop/cop/style/array_first_last.rb | 64 - .../lib/rubocop/cop/style/array_intersect.rb | 119 - .../lib/rubocop/cop/style/array_join.rb | 39 - .../lib/rubocop/cop/style/ascii_comments.rb | 57 - .../lib/rubocop/cop/style/attr.rb | 80 - .../cop/style/auto_resource_cleanup.rb | 55 - .../cop/style/bare_percent_literals.rb | 76 - .../lib/rubocop/cop/style/begin_block.rb | 21 - .../cop/style/bisected_attr_accessor.rb | 125 - .../cop/style/bisected_attr_accessor/macro.rb | 60 - .../lib/rubocop/cop/style/block_comments.rb | 66 - .../lib/rubocop/cop/style/block_delimiters.rb | 472 - .../lib/rubocop/cop/style/case_equality.rb | 108 - .../lib/rubocop/cop/style/case_like_if.rb | 280 - .../rubocop/cop/style/character_literal.rb | 57 - .../cop/style/class_and_module_children.rb | 186 - .../lib/rubocop/cop/style/class_check.rb | 55 - .../cop/style/class_equality_comparison.rb | 134 - .../lib/rubocop/cop/style/class_methods.rb | 54 - .../cop/style/class_methods_definitions.rb | 158 - .../lib/rubocop/cop/style/class_vars.rb | 64 - .../rubocop/cop/style/collection_compact.rb | 143 - .../rubocop/cop/style/collection_methods.rb | 92 - .../rubocop/cop/style/colon_method_call.rb | 46 - .../cop/style/colon_method_definition.rb | 37 - .../lib/rubocop/cop/style/combinable_loops.rb | 123 - .../lib/rubocop/cop/style/command_literal.rb | 181 - .../rubocop/cop/style/comment_annotation.rb | 130 - .../rubocop/cop/style/commented_keyword.rb | 95 - .../lib/rubocop/cop/style/comparable_clamp.rb | 125 - .../cop/style/concat_array_literals.rb | 95 - .../cop/style/conditional_assignment.rb | 662 - .../rubocop/cop/style/constant_visibility.rb | 106 - .../lib/rubocop/cop/style/copyright.rb | 99 - .../lib/rubocop/cop/style/data_inheritance.rb | 75 - .../lib/rubocop/cop/style/date_time.rb | 94 - .../rubocop/cop/style/def_with_parentheses.rb | 59 - .../lib/rubocop/cop/style/dir.rb | 50 - .../lib/rubocop/cop/style/dir_empty.rb | 54 - ...sable_cops_within_source_code_directive.rb | 87 - .../style/document_dynamic_eval_definition.rb | 169 - .../lib/rubocop/cop/style/documentation.rb | 198 - .../rubocop/cop/style/documentation_method.rb | 132 - .../cop/style/double_cop_disable_directive.rb | 46 - .../lib/rubocop/cop/style/double_negation.rb | 159 - .../rubocop/cop/style/each_for_simple_loop.rb | 90 - .../lib/rubocop/cop/style/each_with_object.rb | 139 - .../cop/style/empty_block_parameter.rb | 47 - .../rubocop/cop/style/empty_case_condition.rb | 117 - .../lib/rubocop/cop/style/empty_else.rb | 204 - .../lib/rubocop/cop/style/empty_heredoc.rb | 73 - .../cop/style/empty_lambda_parameter.rb | 44 - .../lib/rubocop/cop/style/empty_literal.rb | 138 - .../lib/rubocop/cop/style/empty_method.rb | 119 - .../lib/rubocop/cop/style/encoding.rb | 63 - .../lib/rubocop/cop/style/end_block.rb | 28 - .../lib/rubocop/cop/style/endless_method.rb | 101 - .../lib/rubocop/cop/style/env_home.rb | 56 - .../rubocop/cop/style/eval_with_location.rb | 226 - .../lib/rubocop/cop/style/even_odd.rb | 56 - .../rubocop/cop/style/exact_regexp_match.rb | 69 - .../cop/style/expand_path_arguments.rb | 196 - .../cop/style/explicit_block_argument.rb | 153 - .../rubocop/cop/style/exponential_notation.rb | 116 - .../lib/rubocop/cop/style/fetch_env_var.rb | 132 - .../lib/rubocop/cop/style/file_empty.rb | 71 - .../lib/rubocop/cop/style/file_read.rb | 112 - .../lib/rubocop/cop/style/file_write.rb | 136 - .../lib/rubocop/cop/style/float_division.rb | 151 - .../lib/rubocop/cop/style/for.rb | 88 - .../lib/rubocop/cop/style/format_string.rb | 154 - .../rubocop/cop/style/format_string_token.rb | 228 - .../style/frozen_string_literal_comment.rb | 220 - .../rubocop/cop/style/global_std_stream.rb | 70 - .../lib/rubocop/cop/style/global_vars.rb | 80 - .../lib/rubocop/cop/style/guard_clause.rb | 303 - .../cop/style/hash_as_last_array_item.rb | 100 - .../lib/rubocop/cop/style/hash_conversion.rb | 144 - .../rubocop/cop/style/hash_each_methods.rb | 217 - .../lib/rubocop/cop/style/hash_except.rb | 189 - .../lib/rubocop/cop/style/hash_like_case.rb | 71 - .../lib/rubocop/cop/style/hash_syntax.rb | 283 - .../rubocop/cop/style/hash_transform_keys.rb | 95 - .../cop/style/hash_transform_values.rb | 93 - .../style/identical_conditional_branches.rb | 254 - .../lib/rubocop/cop/style/if_inside_else.rb | 156 - .../rubocop/cop/style/if_unless_modifier.rb | 295 - .../style/if_unless_modifier_of_if_unless.rb | 47 - .../style/if_with_boolean_literal_branches.rb | 163 - .../rubocop/cop/style/if_with_semicolon.rb | 78 - .../cop/style/implicit_runtime_error.rb | 34 - .../lib/rubocop/cop/style/in_pattern_then.rb | 56 - .../lib/rubocop/cop/style/infinite_loop.rb | 127 - .../lib/rubocop/cop/style/inline_comment.rb | 34 - .../lib/rubocop/cop/style/inverse_methods.rb | 197 - .../cop/style/invertible_unless_condition.rb | 160 - .../lib/rubocop/cop/style/ip_addresses.rb | 75 - .../cop/style/keyword_parameters_order.rb | 75 - .../lib/rubocop/cop/style/lambda.rb | 125 - .../lib/rubocop/cop/style/lambda_call.rb | 73 - .../cop/style/line_end_concatenation.rb | 137 - .../rubocop/cop/style/magic_comment_format.rb | 307 - .../map_compact_with_conditional_block.rb | 134 - .../lib/rubocop/cop/style/map_to_hash.rb | 81 - .../lib/rubocop/cop/style/map_to_set.rb | 64 - .../method_call_with_args_parentheses.rb | 246 - .../omit_parentheses.rb | 241 - .../require_parentheses.rb | 48 - .../method_call_without_args_parentheses.rb | 123 - .../style/method_called_on_do_end_block.rb | 56 - .../cop/style/method_def_parentheses.rb | 180 - .../lib/rubocop/cop/style/min_max.rb | 64 - .../rubocop/cop/style/min_max_comparison.rb | 83 - .../lib/rubocop/cop/style/missing_else.rb | 187 - .../cop/style/missing_respond_to_missing.rb | 52 - .../lib/rubocop/cop/style/mixin_grouping.rb | 135 - .../lib/rubocop/cop/style/mixin_usage.rb | 72 - .../lib/rubocop/cop/style/module_function.rb | 170 - .../cop/style/multiline_block_chain.rb | 50 - .../cop/style/multiline_if_modifier.rb | 56 - .../rubocop/cop/style/multiline_if_then.rb | 44 - .../cop/style/multiline_in_pattern_then.rb | 60 - .../cop/style/multiline_memoization.rb | 96 - .../cop/style/multiline_method_signature.rb | 94 - .../cop/style/multiline_ternary_operator.rb | 102 - .../rubocop/cop/style/multiline_when_then.rb | 64 - .../rubocop/cop/style/multiple_comparison.rb | 171 - .../lib/rubocop/cop/style/mutable_constant.rb | 247 - .../lib/rubocop/cop/style/negated_if.rb | 98 - .../cop/style/negated_if_else_condition.rb | 135 - .../lib/rubocop/cop/style/negated_unless.rb | 88 - .../lib/rubocop/cop/style/negated_while.rb | 40 - .../rubocop/cop/style/nested_file_dirname.rb | 66 - .../lib/rubocop/cop/style/nested_modifier.rb | 100 - .../cop/style/nested_parenthesized_calls.rb | 79 - .../cop/style/nested_ternary_operator.rb | 62 - .../lib/rubocop/cop/style/next.rb | 233 - .../lib/rubocop/cop/style/nil_comparison.rb | 83 - .../lib/rubocop/cop/style/nil_lambda.rb | 70 - .../lib/rubocop/cop/style/non_nil_check.rb | 158 - .../lib/rubocop/cop/style/not.rb | 76 - .../rubocop/cop/style/numbered_parameters.rb | 46 - .../cop/style/numbered_parameters_limit.rb | 58 - .../cop/style/numeric_literal_prefix.rb | 119 - .../lib/rubocop/cop/style/numeric_literals.rb | 129 - .../rubocop/cop/style/numeric_predicate.rb | 177 - .../lib/rubocop/cop/style/object_then.rb | 76 - .../rubocop/cop/style/one_line_conditional.rb | 123 - .../lib/rubocop/cop/style/open_struct_use.rb | 69 - .../rubocop/cop/style/operator_method_call.rb | 73 - .../lib/rubocop/cop/style/option_hash.rb | 54 - .../rubocop/cop/style/optional_arguments.rb | 59 - .../cop/style/optional_boolean_parameter.rb | 64 - .../lib/rubocop/cop/style/or_assignment.rb | 97 - .../rubocop/cop/style/parallel_assignment.rb | 298 - .../cop/style/parentheses_around_condition.rb | 136 - .../cop/style/percent_literal_delimiters.rb | 118 - .../rubocop/cop/style/percent_q_literals.rb | 70 - .../lib/rubocop/cop/style/perl_backrefs.rb | 127 - .../cop/style/preferred_hash_methods.rb | 74 - .../lib/rubocop/cop/style/proc.rb | 37 - .../lib/rubocop/cop/style/quoted_symbols.rb | 124 - .../lib/rubocop/cop/style/raise_args.rb | 158 - .../rubocop/cop/style/random_with_offset.rb | 153 - .../rubocop/cop/style/redundant_argument.rb | 104 - .../cop/style/redundant_array_constructor.rb | 77 - .../rubocop/cop/style/redundant_assignment.rb | 114 - .../lib/rubocop/cop/style/redundant_begin.rb | 200 - .../rubocop/cop/style/redundant_capital_w.rb | 46 - .../rubocop/cop/style/redundant_condition.rb | 270 - .../cop/style/redundant_conditional.rb | 84 - .../cop/style/redundant_constant_base.rb | 85 - .../redundant_current_directory_in_path.rb | 38 - .../redundant_double_splat_hash_braces.rb | 133 - .../lib/rubocop/cop/style/redundant_each.rb | 119 - .../rubocop/cop/style/redundant_exception.rb | 85 - .../cop/style/redundant_fetch_block.rb | 121 - .../redundant_file_extension_in_require.rb | 61 - .../cop/style/redundant_filter_chain.rb | 118 - .../lib/rubocop/cop/style/redundant_freeze.rb | 69 - .../redundant_heredoc_delimiter_quotes.rb | 58 - .../rubocop/cop/style/redundant_initialize.rb | 156 - .../cop/style/redundant_interpolation.rb | 138 - .../cop/style/redundant_line_continuation.rb | 203 - .../cop/style/redundant_parentheses.rb | 291 - .../rubocop/cop/style/redundant_percent_q.rb | 108 - .../cop/style/redundant_regexp_argument.rb | 100 - .../style/redundant_regexp_character_class.rb | 119 - .../cop/style/redundant_regexp_constructor.rb | 46 - .../cop/style/redundant_regexp_escape.rb | 136 - .../lib/rubocop/cop/style/redundant_return.rb | 189 - .../lib/rubocop/cop/style/redundant_self.rb | 218 - .../cop/style/redundant_self_assignment.rb | 118 - .../style/redundant_self_assignment_branch.rb | 90 - .../lib/rubocop/cop/style/redundant_sort.rb | 209 - .../rubocop/cop/style/redundant_sort_by.rb | 63 - .../cop/style/redundant_string_escape.rb | 185 - .../lib/rubocop/cop/style/regexp_literal.rb | 231 - .../lib/rubocop/cop/style/require_order.rb | 139 - .../lib/rubocop/cop/style/rescue_modifier.rb | 98 - .../cop/style/rescue_standard_error.rb | 126 - .../lib/rubocop/cop/style/return_nil.rb | 99 - ...turn_nil_in_predicate_method_definition.rb | 95 - .../lib/rubocop/cop/style/safe_navigation.rb | 326 - .../lib/rubocop/cop/style/sample.rb | 144 - .../lib/rubocop/cop/style/select_by_regexp.rb | 163 - .../lib/rubocop/cop/style/self_assignment.rb | 101 - .../lib/rubocop/cop/style/semicolon.rb | 172 - .../lib/rubocop/cop/style/send.rb | 29 - .../lib/rubocop/cop/style/signal_exception.rb | 218 - .../rubocop/cop/style/single_argument_dig.rb | 69 - .../cop/style/single_line_block_params.rb | 119 - .../cop/style/single_line_do_end_block.rb | 67 - .../rubocop/cop/style/single_line_methods.rb | 145 - .../rubocop/cop/style/slicing_with_range.rb | 117 - .../cop/style/sole_nested_conditional.rb | 252 - .../rubocop/cop/style/special_global_vars.rb | 260 - .../cop/style/stabby_lambda_parentheses.rb | 79 - .../lib/rubocop/cop/style/static_class.rb | 128 - .../lib/rubocop/cop/style/stderr_puts.rb | 57 - .../lib/rubocop/cop/style/string_chars.rb | 42 - .../rubocop/cop/style/string_concatenation.rb | 178 - .../lib/rubocop/cop/style/string_hash_keys.rb | 58 - .../lib/rubocop/cop/style/string_literals.rb | 129 - .../style/string_literals_in_interpolation.rb | 76 - .../lib/rubocop/cop/style/string_methods.rb | 36 - .../lib/rubocop/cop/style/strip.rb | 45 - .../rubocop/cop/style/struct_inheritance.rb | 72 - .../cop/style/super_with_args_parentheses.rb | 35 - .../lib/rubocop/cop/style/swap_values.rb | 112 - .../lib/rubocop/cop/style/symbol_array.rb | 133 - .../lib/rubocop/cop/style/symbol_literal.rb | 28 - .../lib/rubocop/cop/style/symbol_proc.rb | 246 - .../rubocop/cop/style/ternary_parentheses.rb | 219 - .../cop/style/top_level_method_definition.rb | 85 - .../cop/style/trailing_body_on_class.rb | 41 - .../trailing_body_on_method_definition.rb | 55 - .../cop/style/trailing_body_on_module.rb | 40 - .../cop/style/trailing_comma_in_arguments.rb | 106 - .../style/trailing_comma_in_array_literal.rb | 96 - .../cop/style/trailing_comma_in_block_args.rb | 105 - .../style/trailing_comma_in_hash_literal.rb | 97 - .../style/trailing_method_end_statement.rb | 62 - .../cop/style/trailing_underscore_variable.rb | 152 - .../rubocop/cop/style/trivial_accessors.rb | 254 - .../lib/rubocop/cop/style/unless_else.rb | 55 - .../cop/style/unless_logical_operators.rb | 106 - .../lib/rubocop/cop/style/unpack_first.rb | 59 - .../cop/style/variable_interpolation.rb | 45 - .../lib/rubocop/cop/style/when_then.rb | 37 - .../lib/rubocop/cop/style/while_until_do.rb | 49 - .../rubocop/cop/style/while_until_modifier.rb | 53 - .../lib/rubocop/cop/style/word_array.rb | 155 - .../lib/rubocop/cop/style/yaml_file_read.rb | 66 - .../lib/rubocop/cop/style/yoda_condition.rb | 181 - .../lib/rubocop/cop/style/yoda_expression.rb | 91 - .../cop/style/zero_length_predicate.rb | 146 - .../rubocop-1.61.0/lib/rubocop/cop/team.rb | 266 - .../rubocop-1.61.0/lib/rubocop/cop/util.rb | 203 - .../lib/rubocop/cop/utils/format_string.rb | 133 - .../lib/rubocop/cop/utils/regexp_ranges.rb | 113 - .../lib/rubocop/cop/variable_force.rb | 439 - .../rubocop/cop/variable_force/assignment.rb | 137 - .../lib/rubocop/cop/variable_force/branch.rb | 331 - .../rubocop/cop/variable_force/branchable.rb | 23 - .../rubocop/cop/variable_force/reference.rb | 47 - .../lib/rubocop/cop/variable_force/scope.rb | 106 - .../rubocop/cop/variable_force/variable.rb | 116 - .../cop/variable_force/variable_table.rb | 131 - .../rubocop/cops_documentation_generator.rb | 341 - .../lib/rubocop/core_ext/string.rb | 23 - .../lib/rubocop/directive_comment.rb | 144 - .../gems/rubocop-1.61.0/lib/rubocop/error.rb | 35 - .../rubocop-1.61.0/lib/rubocop/ext/comment.rb | 18 - .../lib/rubocop/ext/processed_source.rb | 20 - .../rubocop-1.61.0/lib/rubocop/ext/range.rb | 15 - .../lib/rubocop/ext/regexp_node.rb | 92 - .../lib/rubocop/ext/regexp_parser.rb | 95 - .../lib/rubocop/feature_loader.rb | 94 - .../rubocop-1.61.0/lib/rubocop/file_finder.rb | 38 - .../lib/rubocop/file_patterns.rb | 43 - .../rubocop-1.61.0/lib/rubocop/formatter.rb | 34 - .../formatter/auto_gen_config_formatter.rb | 17 - .../lib/rubocop/formatter/base_formatter.rb | 119 - .../formatter/clang_style_formatter.rb | 59 - .../lib/rubocop/formatter/colorizable.rb | 41 - .../formatter/disabled_config_formatter.rb | 278 - .../formatter/emacs_style_formatter.rb | 39 - .../rubocop/formatter/file_list_formatter.rb | 20 - .../lib/rubocop/formatter/formatter_set.rb | 108 - .../formatter/fuubar_style_formatter.rb | 80 - .../formatter/github_actions_formatter.rb | 57 - .../lib/rubocop/formatter/html_formatter.rb | 153 - .../lib/rubocop/formatter/json_formatter.rb | 79 - .../lib/rubocop/formatter/junit_formatter.rb | 96 - .../rubocop/formatter/markdown_formatter.rb | 78 - .../formatter/offense_count_formatter.rb | 93 - .../lib/rubocop/formatter/pacman_formatter.rb | 80 - .../rubocop/formatter/progress_formatter.rb | 62 - .../lib/rubocop/formatter/quiet_formatter.rb | 13 - .../formatter/simple_text_formatter.rb | 172 - .../lib/rubocop/formatter/tap_formatter.rb | 86 - .../lib/rubocop/formatter/text_util.rb | 20 - .../formatter/worst_offenders_formatter.rb | 64 - .../rubocop-1.61.0/lib/rubocop/lockfile.rb | 40 - .../gems/rubocop-1.61.0/lib/rubocop/lsp.rb | 29 - .../rubocop-1.61.0/lib/rubocop/lsp/logger.rb | 22 - .../rubocop-1.61.0/lib/rubocop/lsp/routes.rb | 246 - .../rubocop-1.61.0/lib/rubocop/lsp/runtime.rb | 99 - .../rubocop-1.61.0/lib/rubocop/lsp/server.rb | 71 - .../lib/rubocop/lsp/severity.rb | 27 - .../lib/rubocop/magic_comment.rb | 300 - .../lib/rubocop/name_similarity.rb | 29 - .../rubocop-1.61.0/lib/rubocop/options.rb | 644 - .../rubocop-1.61.0/lib/rubocop/path_util.rb | 115 - .../rubocop-1.61.0/lib/rubocop/platform.rb | 11 - .../rubocop-1.61.0/lib/rubocop/rake_task.rb | 106 - .../lib/rubocop/remote_config.rb | 108 - .../lib/rubocop/result_cache.rb | 240 - .../lib/rubocop/rspec/cop_helper.rb | 93 - .../lib/rubocop/rspec/expect_offense.rb | 335 - .../host_environment_simulation_helper.rb | 28 - .../lib/rubocop/rspec/parallel_formatter.rb | 90 - .../lib/rubocop/rspec/shared_contexts.rb | 187 - .../lib/rubocop/rspec/support.rb | 30 - .../gems/rubocop-1.61.0/lib/rubocop/runner.rb | 498 - .../gems/rubocop-1.61.0/lib/rubocop/server.rb | 53 - .../lib/rubocop/server/cache.rb | 155 - .../rubocop-1.61.0/lib/rubocop/server/cli.rb | 147 - .../lib/rubocop/server/client_command.rb | 26 - .../lib/rubocop/server/client_command/base.rb | 44 - .../lib/rubocop/server/client_command/exec.rb | 64 - .../rubocop/server/client_command/restart.rb | 25 - .../rubocop/server/client_command/start.rb | 48 - .../rubocop/server/client_command/status.rb | 28 - .../lib/rubocop/server/client_command/stop.rb | 31 - .../rubocop-1.61.0/lib/rubocop/server/core.rb | 111 - .../lib/rubocop/server/errors.rb | 23 - .../lib/rubocop/server/helper.rb | 34 - .../lib/rubocop/server/server_command.rb | 21 - .../lib/rubocop/server/server_command/base.rb | 50 - .../lib/rubocop/server/server_command/exec.rb | 33 - .../lib/rubocop/server/server_command/stop.rb | 24 - .../lib/rubocop/server/socket_reader.rb | 69 - .../lib/rubocop/string_interpreter.rb | 60 - .../lib/rubocop/target_finder.rb | 210 - .../rubocop-1.61.0/lib/rubocop/target_ruby.rb | 276 - .../gems/rubocop-1.61.0/lib/rubocop/util.rb | 16 - .../rubocop-1.61.0/lib/rubocop/version.rb | 102 - .../rubocop-1.61.0/lib/rubocop/warning.rb | 11 - .../lib/rubocop/yaml_duplication_checker.rb | 40 - .../3.2.0/gems/rubocop-ast-1.31.1/LICENSE.txt | 20 - .../3.2.0/gems/rubocop-ast-1.31.1/README.md | 56 - .../rubocop-ast-1.31.1/lib/rubocop-ast.rb | 3 - .../rubocop-ast-1.31.1/lib/rubocop/ast.rb | 96 - .../lib/rubocop/ast/builder.rb | 115 - .../lib/rubocop/ast/ext/range.rb | 28 - .../lib/rubocop/ast/ext/range_min_max.rb | 18 - .../lib/rubocop/ast/node.rb | 676 - .../lib/rubocop/ast/node/alias_node.rb | 24 - .../lib/rubocop/ast/node/and_asgn_node.rb | 17 - .../lib/rubocop/ast/node/and_node.rb | 29 - .../lib/rubocop/ast/node/arg_node.rb | 34 - .../lib/rubocop/ast/node/args_node.rb | 39 - .../lib/rubocop/ast/node/array_node.rb | 65 - .../lib/rubocop/ast/node/asgn_node.rb | 24 - .../lib/rubocop/ast/node/block_node.rb | 167 - .../lib/rubocop/ast/node/break_node.rb | 12 - .../lib/rubocop/ast/node/case_match_node.rb | 64 - .../lib/rubocop/ast/node/case_node.rb | 60 - .../lib/rubocop/ast/node/casgn_node.rb | 31 - .../lib/rubocop/ast/node/class_node.rb | 31 - .../lib/rubocop/ast/node/const_node.rb | 61 - .../lib/rubocop/ast/node/csend_node.rb | 14 - .../lib/rubocop/ast/node/def_node.rb | 68 - .../lib/rubocop/ast/node/defined_node.rb | 19 - .../lib/rubocop/ast/node/dstr_node.rb | 16 - .../lib/rubocop/ast/node/ensure_node.rb | 17 - .../lib/rubocop/ast/node/float_node.rb | 13 - .../lib/rubocop/ast/node/for_node.rb | 53 - .../lib/rubocop/ast/node/forward_args_node.rb | 33 - .../lib/rubocop/ast/node/hash_node.rb | 122 - .../lib/rubocop/ast/node/if_node.rb | 171 - .../lib/rubocop/ast/node/in_pattern_node.rb | 38 - .../lib/rubocop/ast/node/index_node.rb | 48 - .../lib/rubocop/ast/node/indexasgn_node.rb | 50 - .../lib/rubocop/ast/node/int_node.rb | 13 - .../rubocop/ast/node/keyword_splat_node.rb | 53 - .../lib/rubocop/ast/node/lambda_node.rb | 65 - .../ast/node/mixin/basic_literal_node.rb | 16 - .../ast/node/mixin/binary_operator_node.rb | 43 - .../rubocop/ast/node/mixin/collection_node.rb | 16 - .../ast/node/mixin/conditional_node.rb | 45 - .../lib/rubocop/ast/node/mixin/descendence.rb | 117 - .../ast/node/mixin/hash_element_node.rb | 125 - .../ast/node/mixin/method_dispatch_node.rb | 288 - .../mixin/method_identifier_predicates.rb | 219 - .../rubocop/ast/node/mixin/modifier_node.rb | 17 - .../rubocop/ast/node/mixin/numeric_node.rb | 22 - .../ast/node/mixin/parameterized_node.rb | 125 - .../ast/node/mixin/predicate_operator_node.rb | 39 - .../lib/rubocop/ast/node/module_node.rb | 24 - .../lib/rubocop/ast/node/next_node.rb | 12 - .../lib/rubocop/ast/node/op_asgn_node.rb | 36 - .../lib/rubocop/ast/node/or_asgn_node.rb | 17 - .../lib/rubocop/ast/node/or_node.rb | 29 - .../lib/rubocop/ast/node/pair_node.rb | 74 - .../lib/rubocop/ast/node/procarg0_node.rb | 17 - .../lib/rubocop/ast/node/range_node.rb | 18 - .../lib/rubocop/ast/node/regexp_node.rb | 103 - .../lib/rubocop/ast/node/resbody_node.rb | 45 - .../lib/rubocop/ast/node/rescue_node.rb | 49 - .../lib/rubocop/ast/node/return_node.rb | 12 - .../lib/rubocop/ast/node/self_class_node.rb | 24 - .../lib/rubocop/ast/node/send_node.rb | 29 - .../lib/rubocop/ast/node/str_node.rb | 20 - .../lib/rubocop/ast/node/super_node.rb | 23 - .../lib/rubocop/ast/node/symbol_node.rb | 12 - .../lib/rubocop/ast/node/until_node.rb | 35 - .../lib/rubocop/ast/node/when_node.rb | 47 - .../lib/rubocop/ast/node/while_node.rb | 35 - .../lib/rubocop/ast/node/yield_node.rb | 23 - .../lib/rubocop/ast/node_pattern.rb | 126 - .../lib/rubocop/ast/node_pattern/builder.rb | 72 - .../lib/rubocop/ast/node_pattern/comment.rb | 45 - .../lib/rubocop/ast/node_pattern/compiler.rb | 104 - .../node_pattern/compiler/atom_subcompiler.rb | 56 - .../ast/node_pattern/compiler/binding.rb | 78 - .../ast/node_pattern/compiler/debug.rb | 168 - .../compiler/node_pattern_subcompiler.rb | 146 - .../compiler/sequence_subcompiler.rb | 420 - .../ast/node_pattern/compiler/subcompiler.rb | 57 - .../lib/rubocop/ast/node_pattern/lexer.rb | 70 - .../lib/rubocop/ast/node_pattern/lexer.rex | 42 - .../lib/rubocop/ast/node_pattern/lexer.rex.rb | 185 - .../ast/node_pattern/method_definer.rb | 145 - .../lib/rubocop/ast/node_pattern/node.rb | 264 - .../rubocop/ast/node_pattern/parser.racc.rb | 470 - .../lib/rubocop/ast/node_pattern/parser.rb | 66 - .../lib/rubocop/ast/node_pattern/parser.y | 103 - .../lib/rubocop/ast/node_pattern/sets.rb | 37 - .../lib/rubocop/ast/node_pattern/with_meta.rb | 110 - .../lib/rubocop/ast/processed_source.rb | 347 - .../lib/rubocop/ast/rubocop_compatibility.rb | 31 - .../lib/rubocop/ast/sexp.rb | 17 - .../lib/rubocop/ast/token.rb | 130 - .../lib/rubocop/ast/traversal.rb | 182 - .../lib/rubocop/ast/version.rb | 9 - .../gems/ruby-progressbar-1.13.0/LICENSE.txt | 19 - .../gems/ruby-progressbar-1.13.0/README.md | 131 - .../gems/ruby-progressbar-1.13.0/Rakefile | 2 - .../lib/ruby-progressbar.rb | 12 - .../lib/ruby-progressbar/base.rb | 234 - .../ruby-progressbar/calculators/length.rb | 98 - .../lib/ruby-progressbar/components/bar.rb | 102 - .../ruby-progressbar/components/percentage.rb | 27 - .../lib/ruby-progressbar/components/rate.rb | 39 - .../lib/ruby-progressbar/components/time.rb | 101 - .../lib/ruby-progressbar/components/title.rb | 13 - .../errors/invalid_progress_error.rb | 4 - .../lib/ruby-progressbar/format/formatter.rb | 27 - .../lib/ruby-progressbar/format/molecule.rb | 61 - .../lib/ruby-progressbar/format/string.rb | 38 - .../lib/ruby-progressbar/output.rb | 71 - .../lib/ruby-progressbar/outputs/non_tty.rb | 47 - .../lib/ruby-progressbar/outputs/null.rb | 33 - .../lib/ruby-progressbar/outputs/tty.rb | 32 - .../lib/ruby-progressbar/progress.rb | 108 - .../lib/ruby-progressbar/projector.rb | 14 - .../projectors/smoothed_average.rb | 71 - .../lib/ruby-progressbar/refinements.rb | 1 - .../refinements/progress_enumerator.rb | 28 - .../lib/ruby-progressbar/throttle.rb | 25 - .../lib/ruby-progressbar/time.rb | 30 - .../lib/ruby-progressbar/timer.rb | 78 - .../lib/ruby-progressbar/version.rb | 3 - bundle/ruby/3.2.0/gems/sawyer-0.9.2/Gemfile | 13 - .../ruby/3.2.0/gems/sawyer-0.9.2/LICENSE.md | 20 - bundle/ruby/3.2.0/gems/sawyer-0.9.2/README.md | 62 - bundle/ruby/3.2.0/gems/sawyer-0.9.2/Rakefile | 12 - .../3.2.0/gems/sawyer-0.9.2/lib/sawyer.rb | 17 - .../gems/sawyer-0.9.2/lib/sawyer/agent.rb | 163 - .../lib/sawyer/link_parsers/hal.rb | 15 - .../lib/sawyer/link_parsers/simple.rb | 29 - .../gems/sawyer-0.9.2/lib/sawyer/relation.rb | 272 - .../gems/sawyer-0.9.2/lib/sawyer/resource.rb | 160 - .../gems/sawyer-0.9.2/lib/sawyer/response.rb | 72 - .../sawyer-0.9.2/lib/sawyer/serializer.rb | 129 - .../3.2.0/gems/sawyer-0.9.2/sawyer.gemspec | 31 - .../3.2.0/gems/sawyer-0.9.2/script/bootstrap | 5 - .../3.2.0/gems/sawyer-0.9.2/script/console | 8 - .../3.2.0/gems/sawyer-0.9.2/script/package | 8 - .../3.2.0/gems/sawyer-0.9.2/script/release | 16 - .../ruby/3.2.0/gems/sawyer-0.9.2/script/test | 6 - .../.github/workflows/ci.yml | 28 - .../gems/terminal-table-3.0.2/.gitignore | 11 - .../3.2.0/gems/terminal-table-3.0.2/Gemfile | 6 - .../gems/terminal-table-3.0.2/History.rdoc | 142 - .../gems/terminal-table-3.0.2/LICENSE.txt | 21 - .../3.2.0/gems/terminal-table-3.0.2/Manifest | 27 - .../3.2.0/gems/terminal-table-3.0.2/README.md | 417 - .../3.2.0/gems/terminal-table-3.0.2/Rakefile | 15 - .../3.2.0/gems/terminal-table-3.0.2/Todo.rdoc | 14 - .../terminal-table-3.0.2/examples/examples.rb | 83 - .../examples/examples_unicode.rb | 89 - .../terminal-table-3.0.2/examples/issue100.rb | 34 - .../terminal-table-3.0.2/examples/issue111.rb | 4 - .../terminal-table-3.0.2/examples/issue118.rb | 36 - .../terminal-table-3.0.2/examples/issue95.rb | 42 - .../examples/show_csv_table.rb | 34 - .../examples/strong_separator.rb | 23 - .../lib/terminal-table.rb | 26 - .../lib/terminal-table/cell.rb | 94 - .../lib/terminal-table/import.rb | 3 - .../lib/terminal-table/row.rb | 66 - .../lib/terminal-table/separator.rb | 66 - .../lib/terminal-table/style.rb | 284 - .../lib/terminal-table/table.rb | 372 - .../lib/terminal-table/table_helper.rb | 9 - .../lib/terminal-table/util.rb | 13 - .../lib/terminal-table/version.rb | 5 - .../terminal-table.gemspec | 26 - .../ruby/3.2.0/gems/tomlrb-2.0.3/LICENSE.txt | 21 - .../3.2.0/gems/tomlrb-2.0.3/lib/tomlrb.rb | 47 - .../lib/tomlrb/generated_parser.rb | 710 - .../gems/tomlrb-2.0.3/lib/tomlrb/handler.rb | 266 - .../tomlrb-2.0.3/lib/tomlrb/local_date.rb | 33 - .../lib/tomlrb/local_date_time.rb | 40 - .../tomlrb-2.0.3/lib/tomlrb/local_time.rb | 38 - .../gems/tomlrb-2.0.3/lib/tomlrb/parser.rb | 19 - .../gems/tomlrb-2.0.3/lib/tomlrb/parser.y | 196 - .../gems/tomlrb-2.0.3/lib/tomlrb/scanner.rb | 74 - .../tomlrb-2.0.3/lib/tomlrb/string_utils.rb | 39 - .../gems/tomlrb-2.0.3/lib/tomlrb/version.rb | 3 - .../unicode-display_width-2.5.0/CHANGELOG.md | 196 - .../MIT-LICENSE.txt | 22 - .../unicode-display_width-2.5.0/README.md | 171 - .../lib/unicode/display_width.rb | 123 - .../lib/unicode/display_width/constants.rb | 10 - .../lib/unicode/display_width/index.rb | 34 - .../unicode/display_width/no_string_ext.rb | 8 - .../lib/unicode/display_width/string_ext.rb | 9 - .../gems/uri-0.13.0/.github/dependabot.yml | 6 - .../uri-0.13.0/.github/workflows/gh-pages.yml | 46 - .../uri-0.13.0/.github/workflows/test.yml | 27 - bundle/ruby/3.2.0/gems/uri-0.13.0/.gitignore | 10 - bundle/ruby/3.2.0/gems/uri-0.13.0/Gemfile | 10 - bundle/ruby/3.2.0/gems/uri-0.13.0/LICENSE.txt | 22 - bundle/ruby/3.2.0/gems/uri-0.13.0/README.md | 55 - bundle/ruby/3.2.0/gems/uri-0.13.0/Rakefile | 18 - bundle/ruby/3.2.0/gems/uri-0.13.0/bin/console | 14 - bundle/ruby/3.2.0/gems/uri-0.13.0/bin/setup | 8 - bundle/ruby/3.2.0/gems/uri-0.13.0/lib/uri.rb | 104 - .../3.2.0/gems/uri-0.13.0/lib/uri/common.rb | 853 - .../3.2.0/gems/uri-0.13.0/lib/uri/file.rb | 100 - .../ruby/3.2.0/gems/uri-0.13.0/lib/uri/ftp.rb | 267 - .../3.2.0/gems/uri-0.13.0/lib/uri/generic.rb | 1588 -- .../3.2.0/gems/uri-0.13.0/lib/uri/http.rb | 125 - .../3.2.0/gems/uri-0.13.0/lib/uri/https.rb | 23 - .../3.2.0/gems/uri-0.13.0/lib/uri/ldap.rb | 261 - .../3.2.0/gems/uri-0.13.0/lib/uri/ldaps.rb | 22 - .../3.2.0/gems/uri-0.13.0/lib/uri/mailto.rb | 293 - .../gems/uri-0.13.0/lib/uri/rfc2396_parser.rb | 539 - .../gems/uri-0.13.0/lib/uri/rfc3986_parser.rb | 183 - .../3.2.0/gems/uri-0.13.0/lib/uri/version.rb | 6 - .../ruby/3.2.0/gems/uri-0.13.0/lib/uri/ws.rb | 83 - .../ruby/3.2.0/gems/uri-0.13.0/lib/uri/wss.rb | 23 - .../gems/uri-0.13.0/rakelib/sync_tool.rake | 17 - bundle/ruby/3.2.0/gems/uri-0.13.0/uri.gemspec | 39 - .../specifications/addressable-2.8.6.gemspec | 30 - .../3.2.0/specifications/ast-2.4.2.gemspec | 30 - .../3.2.0/specifications/base64-0.2.0.gemspec | 23 - .../specifications/chef-utils-18.4.2.gemspec | 25 - .../3.2.0/specifications/claide-1.1.0.gemspec | 20 - .../claide-plugins-0.9.2.gemspec | 29 - .../specifications/coderay-1.1.3.gemspec | 25 - .../specifications/colored2-3.1.2.gemspec | 27 - .../concurrent-ruby-1.2.3.gemspec | 24 - .../3.2.0/specifications/cork-0.3.0.gemspec | 27 - .../3.2.0/specifications/danger-9.4.3.gemspec | 38 - .../danger-plugin-api-1.0.0.gemspec | 28 - .../specifications/danger-prose-2.0.7.gemspec | 32 - .../danger-rubocop-0.12.0.gemspec | 33 - .../danger-textlint-2.0.4.gemspec | 34 - .../specifications/faraday-2.9.0.gemspec | Bin 1246 -> 0 bytes .../faraday-http-cache-2.5.1.gemspec | 25 - .../faraday-net_http-3.1.0.gemspec | 27 - .../3.2.0/specifications/git-1.19.1.gemspec | 37 - .../3.2.0/specifications/json-2.7.1.gemspec | Bin 1723 -> 0 bytes .../specifications/kramdown-2.4.0.gemspec | 31 - .../kramdown-parser-gfm-1.1.0.gemspec | 24 - .../language_server-protocol-3.17.0.3.gemspec | 31 - .../3.2.0/specifications/mdl-0.13.0.gemspec | 37 - .../method_source-1.0.0.gemspec | 25 - .../specifications/mixlib-cli-2.1.8.gemspec | 21 - .../mixlib-config-3.0.27.gemspec | 25 - .../mixlib-shellout-3.2.7.gemspec | 25 - .../3.2.0/specifications/nap-1.1.0.gemspec | 28 - .../specifications/no_proxy_fix-0.1.2.gemspec | 33 - .../specifications/octokit-8.1.0.gemspec | 28 - .../3.2.0/specifications/open4-1.3.4.gemspec | 20 - .../specifications/parallel-1.24.0.gemspec | 21 - .../specifications/parser-3.3.0.5.gemspec | 37 - .../3.2.0/specifications/pry-0.14.2.gemspec | 29 - .../public_suffix-5.0.4.gemspec | 24 - .../3.2.0/specifications/racc-1.7.3.gemspec | 27 - .../specifications/rainbow-3.1.1.gemspec | 25 - .../3.2.0/specifications/rake-13.1.0.gemspec | 26 - .../specifications/rb-readline-0.5.5.gemspec | 29 - .../specifications/rchardet-1.8.0.gemspec | 20 - .../regexp_parser-2.9.0.gemspec | 22 - .../3.2.0/specifications/rexml-3.2.6.gemspec | 30 - .../specifications/rubocop-1.61.0.gemspec | 39 - .../specifications/rubocop-ast-1.31.1.gemspec | 28 - .../ruby-progressbar-1.13.0.gemspec | 29 - .../3.2.0/specifications/sawyer-0.9.2.gemspec | 24 - .../terminal-table-3.0.2.gemspec | 28 - .../3.2.0/specifications/tomlrb-2.0.3.gemspec | 25 - .../unicode-display_width-2.5.0.gemspec | 29 - .../3.2.0/specifications/uri-0.13.0.gemspec | 23 - 3629 files changed, 611495 deletions(-) delete mode 100755 bundle/ruby/3.2.0/bin/coderay delete mode 100755 bundle/ruby/3.2.0/bin/danger delete mode 100755 bundle/ruby/3.2.0/bin/kramdown delete mode 100755 bundle/ruby/3.2.0/bin/mdl delete mode 100755 bundle/ruby/3.2.0/bin/pry delete mode 100755 bundle/ruby/3.2.0/bin/racc delete mode 100755 bundle/ruby/3.2.0/bin/rake delete mode 100755 bundle/ruby/3.2.0/bin/rubocop delete mode 100755 bundle/ruby/3.2.0/bin/ruby-parse delete mode 100755 bundle/ruby/3.2.0/bin/ruby-rewrite delete mode 100644 bundle/ruby/3.2.0/cache/addressable-2.8.6.gem delete mode 100644 bundle/ruby/3.2.0/cache/ast-2.4.2.gem delete mode 100644 bundle/ruby/3.2.0/cache/base64-0.2.0.gem delete mode 100644 bundle/ruby/3.2.0/cache/chef-utils-18.4.2.gem delete mode 100644 bundle/ruby/3.2.0/cache/claide-1.1.0.gem delete mode 100644 bundle/ruby/3.2.0/cache/claide-plugins-0.9.2.gem delete mode 100644 bundle/ruby/3.2.0/cache/coderay-1.1.3.gem delete mode 100644 bundle/ruby/3.2.0/cache/colored2-3.1.2.gem delete mode 100644 bundle/ruby/3.2.0/cache/concurrent-ruby-1.2.3.gem delete mode 100644 bundle/ruby/3.2.0/cache/cork-0.3.0.gem delete mode 100644 bundle/ruby/3.2.0/cache/danger-9.4.3.gem delete mode 100644 bundle/ruby/3.2.0/cache/danger-plugin-api-1.0.0.gem delete mode 100644 bundle/ruby/3.2.0/cache/danger-prose-2.0.7.gem delete mode 100644 bundle/ruby/3.2.0/cache/danger-rubocop-0.12.0.gem delete mode 100644 bundle/ruby/3.2.0/cache/danger-textlint-2.0.4.gem delete mode 100644 bundle/ruby/3.2.0/cache/faraday-2.9.0.gem delete mode 100644 bundle/ruby/3.2.0/cache/faraday-http-cache-2.5.1.gem delete mode 100644 bundle/ruby/3.2.0/cache/faraday-net_http-3.1.0.gem delete mode 100644 bundle/ruby/3.2.0/cache/git-1.19.1.gem delete mode 100644 bundle/ruby/3.2.0/cache/json-2.7.1.gem delete mode 100644 bundle/ruby/3.2.0/cache/kramdown-2.4.0.gem delete mode 100644 bundle/ruby/3.2.0/cache/kramdown-parser-gfm-1.1.0.gem delete mode 100644 bundle/ruby/3.2.0/cache/language_server-protocol-3.17.0.3.gem delete mode 100644 bundle/ruby/3.2.0/cache/mdl-0.13.0.gem delete mode 100644 bundle/ruby/3.2.0/cache/method_source-1.0.0.gem delete mode 100644 bundle/ruby/3.2.0/cache/mixlib-cli-2.1.8.gem delete mode 100644 bundle/ruby/3.2.0/cache/mixlib-config-3.0.27.gem delete mode 100644 bundle/ruby/3.2.0/cache/mixlib-shellout-3.2.7.gem delete mode 100644 bundle/ruby/3.2.0/cache/nap-1.1.0.gem delete mode 100644 bundle/ruby/3.2.0/cache/no_proxy_fix-0.1.2.gem delete mode 100644 bundle/ruby/3.2.0/cache/octokit-8.1.0.gem delete mode 100644 bundle/ruby/3.2.0/cache/open4-1.3.4.gem delete mode 100644 bundle/ruby/3.2.0/cache/parallel-1.24.0.gem delete mode 100644 bundle/ruby/3.2.0/cache/parser-3.3.0.5.gem delete mode 100644 bundle/ruby/3.2.0/cache/pry-0.14.2.gem delete mode 100644 bundle/ruby/3.2.0/cache/public_suffix-5.0.4.gem delete mode 100644 bundle/ruby/3.2.0/cache/racc-1.7.3.gem delete mode 100644 bundle/ruby/3.2.0/cache/rainbow-3.1.1.gem delete mode 100644 bundle/ruby/3.2.0/cache/rake-13.1.0.gem delete mode 100644 bundle/ruby/3.2.0/cache/rb-readline-0.5.5.gem delete mode 100644 bundle/ruby/3.2.0/cache/rchardet-1.8.0.gem delete mode 100644 bundle/ruby/3.2.0/cache/regexp_parser-2.9.0.gem delete mode 100644 bundle/ruby/3.2.0/cache/rexml-3.2.6.gem delete mode 100644 bundle/ruby/3.2.0/cache/rubocop-1.61.0.gem delete mode 100644 bundle/ruby/3.2.0/cache/rubocop-ast-1.31.1.gem delete mode 100644 bundle/ruby/3.2.0/cache/ruby-progressbar-1.13.0.gem delete mode 100644 bundle/ruby/3.2.0/cache/sawyer-0.9.2.gem delete mode 100644 bundle/ruby/3.2.0/cache/terminal-table-3.0.2.gem delete mode 100644 bundle/ruby/3.2.0/cache/tomlrb-2.0.3.gem delete mode 100644 bundle/ruby/3.2.0/cache/unicode-display_width-2.5.0.gem delete mode 100644 bundle/ruby/3.2.0/cache/uri-0.13.0.gem delete mode 100644 bundle/ruby/3.2.0/extensions/x86_64-linux/3.2.0/json-2.7.1/gem.build_complete delete mode 100644 bundle/ruby/3.2.0/extensions/x86_64-linux/3.2.0/json-2.7.1/gem_make.out delete mode 100755 bundle/ruby/3.2.0/extensions/x86_64-linux/3.2.0/json-2.7.1/json/ext/generator.so delete mode 100755 bundle/ruby/3.2.0/extensions/x86_64-linux/3.2.0/json-2.7.1/json/ext/parser.so delete mode 100644 bundle/ruby/3.2.0/extensions/x86_64-linux/3.2.0/racc-1.7.3/gem.build_complete delete mode 100644 bundle/ruby/3.2.0/extensions/x86_64-linux/3.2.0/racc-1.7.3/gem_make.out delete mode 100755 bundle/ruby/3.2.0/extensions/x86_64-linux/3.2.0/racc-1.7.3/racc/cparse.so delete mode 100644 bundle/ruby/3.2.0/gems/addressable-2.8.6/CHANGELOG.md delete mode 100644 bundle/ruby/3.2.0/gems/addressable-2.8.6/Gemfile delete mode 100644 bundle/ruby/3.2.0/gems/addressable-2.8.6/LICENSE.txt delete mode 100644 bundle/ruby/3.2.0/gems/addressable-2.8.6/README.md delete mode 100644 bundle/ruby/3.2.0/gems/addressable-2.8.6/Rakefile delete mode 100644 bundle/ruby/3.2.0/gems/addressable-2.8.6/addressable.gemspec delete mode 100644 bundle/ruby/3.2.0/gems/addressable-2.8.6/data/unicode.data delete mode 100644 bundle/ruby/3.2.0/gems/addressable-2.8.6/lib/addressable.rb delete mode 100644 bundle/ruby/3.2.0/gems/addressable-2.8.6/lib/addressable/idna.rb delete mode 100644 bundle/ruby/3.2.0/gems/addressable-2.8.6/lib/addressable/idna/native.rb delete mode 100644 bundle/ruby/3.2.0/gems/addressable-2.8.6/lib/addressable/idna/pure.rb delete mode 100644 bundle/ruby/3.2.0/gems/addressable-2.8.6/lib/addressable/template.rb delete mode 100644 bundle/ruby/3.2.0/gems/addressable-2.8.6/lib/addressable/uri.rb delete mode 100644 bundle/ruby/3.2.0/gems/addressable-2.8.6/lib/addressable/version.rb delete mode 100644 bundle/ruby/3.2.0/gems/addressable-2.8.6/spec/addressable/idna_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/addressable-2.8.6/spec/addressable/net_http_compat_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/addressable-2.8.6/spec/addressable/security_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/addressable-2.8.6/spec/addressable/template_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/addressable-2.8.6/spec/addressable/uri_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/addressable-2.8.6/spec/spec_helper.rb delete mode 100644 bundle/ruby/3.2.0/gems/addressable-2.8.6/tasks/clobber.rake delete mode 100644 bundle/ruby/3.2.0/gems/addressable-2.8.6/tasks/gem.rake delete mode 100644 bundle/ruby/3.2.0/gems/addressable-2.8.6/tasks/git.rake delete mode 100644 bundle/ruby/3.2.0/gems/addressable-2.8.6/tasks/metrics.rake delete mode 100644 bundle/ruby/3.2.0/gems/addressable-2.8.6/tasks/profile.rake delete mode 100644 bundle/ruby/3.2.0/gems/addressable-2.8.6/tasks/rspec.rake delete mode 100644 bundle/ruby/3.2.0/gems/addressable-2.8.6/tasks/yard.rake delete mode 100644 bundle/ruby/3.2.0/gems/ast-2.4.2/LICENSE.MIT delete mode 100644 bundle/ruby/3.2.0/gems/ast-2.4.2/README.YARD.md delete mode 100644 bundle/ruby/3.2.0/gems/ast-2.4.2/lib/ast.rb delete mode 100644 bundle/ruby/3.2.0/gems/ast-2.4.2/lib/ast/node.rb delete mode 100644 bundle/ruby/3.2.0/gems/ast-2.4.2/lib/ast/processor.rb delete mode 100644 bundle/ruby/3.2.0/gems/ast-2.4.2/lib/ast/processor/mixin.rb delete mode 100644 bundle/ruby/3.2.0/gems/ast-2.4.2/lib/ast/sexp.rb delete mode 100644 bundle/ruby/3.2.0/gems/base64-0.2.0/LICENSE.txt delete mode 100644 bundle/ruby/3.2.0/gems/base64-0.2.0/README.md delete mode 100644 bundle/ruby/3.2.0/gems/base64-0.2.0/lib/base64.rb delete mode 100644 bundle/ruby/3.2.0/gems/chef-utils-18.4.2/LICENSE delete mode 100644 bundle/ruby/3.2.0/gems/chef-utils-18.4.2/Rakefile delete mode 100644 bundle/ruby/3.2.0/gems/chef-utils-18.4.2/chef-utils.gemspec delete mode 100644 bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils.rb delete mode 100644 bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/dist.rb delete mode 100644 bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/dsl/architecture.rb delete mode 100644 bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/dsl/cloud.rb delete mode 100644 bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/dsl/default_paths.rb delete mode 100644 bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/dsl/introspection.rb delete mode 100644 bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/dsl/os.rb delete mode 100644 bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/dsl/path_sanity.rb delete mode 100644 bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/dsl/platform.rb delete mode 100644 bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/dsl/platform_family.rb delete mode 100644 bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/dsl/platform_version.rb delete mode 100644 bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/dsl/service.rb delete mode 100644 bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/dsl/train_helpers.rb delete mode 100644 bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/dsl/virtualization.rb delete mode 100644 bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/dsl/which.rb delete mode 100644 bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/dsl/windows.rb delete mode 100644 bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/internal.rb delete mode 100644 bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/mash.rb delete mode 100644 bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/parallel_map.rb delete mode 100644 bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/version.rb delete mode 100644 bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/version_string.rb delete mode 100644 bundle/ruby/3.2.0/gems/chef-utils-18.4.2/spec/spec_helper.rb delete mode 100644 bundle/ruby/3.2.0/gems/chef-utils-18.4.2/spec/unit/dsl/architecture_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/chef-utils-18.4.2/spec/unit/dsl/cloud_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/chef-utils-18.4.2/spec/unit/dsl/dsl_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/chef-utils-18.4.2/spec/unit/dsl/introspection_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/chef-utils-18.4.2/spec/unit/dsl/os_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/chef-utils-18.4.2/spec/unit/dsl/path_sanity_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/chef-utils-18.4.2/spec/unit/dsl/platform_family_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/chef-utils-18.4.2/spec/unit/dsl/platform_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/chef-utils-18.4.2/spec/unit/dsl/service_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/chef-utils-18.4.2/spec/unit/dsl/virtualization_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/chef-utils-18.4.2/spec/unit/dsl/which_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/chef-utils-18.4.2/spec/unit/dsl/windows_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/chef-utils-18.4.2/spec/unit/mash_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/chef-utils-18.4.2/spec/unit/parallel_map_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/claide-1.1.0/.github/workflows/ci.yml delete mode 100644 bundle/ruby/3.2.0/gems/claide-1.1.0/.gitignore delete mode 100644 bundle/ruby/3.2.0/gems/claide-1.1.0/.kick delete mode 100644 bundle/ruby/3.2.0/gems/claide-1.1.0/.rubocop.yml delete mode 100644 bundle/ruby/3.2.0/gems/claide-1.1.0/.rubocop_cocoapods.yml delete mode 100644 bundle/ruby/3.2.0/gems/claide-1.1.0/.rubocop_todo.yml delete mode 100644 bundle/ruby/3.2.0/gems/claide-1.1.0/.yardopts delete mode 100644 bundle/ruby/3.2.0/gems/claide-1.1.0/CHANGELOG.md delete mode 100644 bundle/ruby/3.2.0/gems/claide-1.1.0/Gemfile delete mode 100644 bundle/ruby/3.2.0/gems/claide-1.1.0/Gemfile.lock delete mode 100644 bundle/ruby/3.2.0/gems/claide-1.1.0/LICENSE delete mode 100644 bundle/ruby/3.2.0/gems/claide-1.1.0/README.md delete mode 100644 bundle/ruby/3.2.0/gems/claide-1.1.0/Rakefile delete mode 100644 bundle/ruby/3.2.0/gems/claide-1.1.0/claide.gemspec delete mode 100644 bundle/ruby/3.2.0/gems/claide-1.1.0/lib/claide.rb delete mode 100644 bundle/ruby/3.2.0/gems/claide-1.1.0/lib/claide/ansi.rb delete mode 100644 bundle/ruby/3.2.0/gems/claide-1.1.0/lib/claide/ansi/cursor.rb delete mode 100644 bundle/ruby/3.2.0/gems/claide-1.1.0/lib/claide/ansi/graphics.rb delete mode 100644 bundle/ruby/3.2.0/gems/claide-1.1.0/lib/claide/ansi/string_escaper.rb delete mode 100644 bundle/ruby/3.2.0/gems/claide-1.1.0/lib/claide/argument.rb delete mode 100644 bundle/ruby/3.2.0/gems/claide-1.1.0/lib/claide/argv.rb delete mode 100644 bundle/ruby/3.2.0/gems/claide-1.1.0/lib/claide/command.rb delete mode 100644 bundle/ruby/3.2.0/gems/claide-1.1.0/lib/claide/command/argument_suggester.rb delete mode 100644 bundle/ruby/3.2.0/gems/claide-1.1.0/lib/claide/command/banner.rb delete mode 100644 bundle/ruby/3.2.0/gems/claide-1.1.0/lib/claide/command/plugin_manager.rb delete mode 100644 bundle/ruby/3.2.0/gems/claide-1.1.0/lib/claide/gem_version.rb delete mode 100644 bundle/ruby/3.2.0/gems/claide-1.1.0/lib/claide/help.rb delete mode 100644 bundle/ruby/3.2.0/gems/claide-1.1.0/lib/claide/informative_error.rb delete mode 100644 bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/.gitignore delete mode 100644 bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/.rubocop.yml delete mode 100644 bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/.rubocop_cocoapods.yml delete mode 100644 bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/.tm_properties delete mode 100644 bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/.travis.yml delete mode 100644 bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/CHANGELOG.md delete mode 100644 bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/Gemfile delete mode 100644 bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/Gemfile.lock delete mode 100644 bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/LICENSE delete mode 100644 bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/README.md delete mode 100644 bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/Rakefile delete mode 100644 bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/claide-plugins.gemspec delete mode 100644 bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/lib/claide/command/gem_helper.rb delete mode 100644 bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/lib/claide/command/gem_index_cache.rb delete mode 100644 bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/lib/claide/command/plugins.rb delete mode 100644 bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/lib/claide/command/plugins/create.rb delete mode 100644 bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/lib/claide/command/plugins/list.rb delete mode 100644 bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/lib/claide/command/plugins/search.rb delete mode 100644 bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/lib/claide/command/plugins_config.rb delete mode 100644 bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/lib/claide/command/plugins_helper.rb delete mode 100644 bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/lib/claide/command/template_runner.rb delete mode 100644 bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/lib/claide/executable.rb delete mode 100644 bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/lib/claide_plugin.rb delete mode 100644 bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/lib/claide_plugins.rb delete mode 100644 bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/spec/command/gem_helper_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/spec/command/gem_index_cache_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/spec/command/plugins/create_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/spec/command/plugins/list_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/spec/command/plugins/search_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/spec/command/plugins_helper_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/spec/command/plugins_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/spec/fixtures/claide-foo1.gemspec delete mode 100644 bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/spec/fixtures/claide-foo2.gemspec delete mode 100644 bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/spec/fixtures/unprefixed.gemspec delete mode 100644 bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/spec/spec_helper.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/MIT-LICENSE delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/README_INDEX.rdoc delete mode 100755 bundle/ruby/3.2.0/gems/coderay-1.1.3/bin/coderay delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/duo.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/_map.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/comment_filter.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/count.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/debug.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/debug_lint.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/div.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/encoder.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/filter.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/html.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/html/css.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/html/numbering.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/html/output.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/json.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/lines_of_code.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/lint.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/null.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/page.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/span.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/statistic.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/terminal.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/text.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/token_kind_filter.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/xml.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/yaml.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/for_redcloth.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/helpers/file_type.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/helpers/plugin.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/helpers/plugin_host.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/helpers/word_list.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/_map.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/c.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/clojure.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/cpp.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/css.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/debug.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/delphi.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/diff.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/erb.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/go.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/groovy.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/haml.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/html.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/java.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/java/builtin_types.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/java_script.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/json.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/lua.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/php.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/python.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/raydebug.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/ruby.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/ruby/patterns.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/ruby/string_state.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/sass.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/scanner.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/sql.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/taskpaper.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/text.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/xml.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/yaml.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/styles.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/styles/_map.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/styles/alpha.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/styles/style.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/token_kinds.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/tokens.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/tokens_proxy.rb delete mode 100644 bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/version.rb delete mode 100644 bundle/ruby/3.2.0/gems/colored2-3.1.2/LICENSE delete mode 100644 bundle/ruby/3.2.0/gems/colored2-3.1.2/README.md delete mode 100644 bundle/ruby/3.2.0/gems/colored2-3.1.2/Rakefile delete mode 100644 bundle/ruby/3.2.0/gems/colored2-3.1.2/lib/colored2.rb delete mode 100644 bundle/ruby/3.2.0/gems/colored2-3.1.2/lib/colored2/ascii_decorator.rb delete mode 100644 bundle/ruby/3.2.0/gems/colored2-3.1.2/lib/colored2/codes.rb delete mode 100644 bundle/ruby/3.2.0/gems/colored2-3.1.2/lib/colored2/numbers.rb delete mode 100644 bundle/ruby/3.2.0/gems/colored2-3.1.2/lib/colored2/object.rb delete mode 100644 bundle/ruby/3.2.0/gems/colored2-3.1.2/lib/colored2/strings.rb delete mode 100644 bundle/ruby/3.2.0/gems/colored2-3.1.2/lib/colored2/version.rb delete mode 100644 bundle/ruby/3.2.0/gems/colored2-3.1.2/spec/colored2/numbers_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/colored2-3.1.2/spec/colored2/object_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/colored2-3.1.2/spec/colored2/strings_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/colored2-3.1.2/spec/colored2_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/colored2-3.1.2/spec/spec_helper.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/CHANGELOG.md delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/Gemfile delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/LICENSE.txt delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/README.md delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/Rakefile delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/ext/concurrent-ruby/ConcurrentRubyService.java delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/ext/concurrent-ruby/com/concurrent_ruby/ext/AtomicReferenceLibrary.java delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/ext/concurrent-ruby/com/concurrent_ruby/ext/JRubyMapBackendLibrary.java delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/ext/concurrent-ruby/com/concurrent_ruby/ext/JavaAtomicBooleanLibrary.java delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/ext/concurrent-ruby/com/concurrent_ruby/ext/JavaAtomicFixnumLibrary.java delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/ext/concurrent-ruby/com/concurrent_ruby/ext/JavaSemaphoreLibrary.java delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/ext/concurrent-ruby/com/concurrent_ruby/ext/SynchronizationLibrary.java delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166e/ConcurrentHashMap.java delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166e/ConcurrentHashMapV8.java delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166e/LongAdder.java delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166e/Striped64.java delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166e/nounsafe/ConcurrentHashMapV8.java delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166e/nounsafe/LongAdder.java delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166e/nounsafe/Striped64.java delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166y/ThreadLocalRandom.java delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent-ruby.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/agent.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/array.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/async.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atom.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/atomic_boolean.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/atomic_fixnum.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/atomic_markable_reference.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/atomic_reference.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/count_down_latch.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/cyclic_barrier.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/event.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/fiber_local_var.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/java_count_down_latch.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/locals.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/lock_local_var.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/mutex_atomic_boolean.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/mutex_atomic_fixnum.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/mutex_count_down_latch.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/mutex_semaphore.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/read_write_lock.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/reentrant_read_write_lock.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/semaphore.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/thread_local_var.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic_reference/atomic_direct_update.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic_reference/mutex_atomic.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic_reference/numeric_cas_wrapper.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomics.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/collection/copy_on_notify_observer_set.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/collection/copy_on_write_observer_set.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/collection/java_non_concurrent_priority_queue.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/collection/lock_free_stack.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/collection/map/mri_map_backend.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/collection/map/non_concurrent_map_backend.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/collection/map/synchronized_map_backend.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/collection/map/truffleruby_map_backend.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/collection/non_concurrent_priority_queue.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/collection/ruby_non_concurrent_priority_queue.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/concern/deprecation.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/concern/dereferenceable.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/concern/logging.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/concern/obligation.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/concern/observable.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/concurrent_ruby.jar delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/configuration.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/constants.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/dataflow.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/delay.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/errors.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/exchanger.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/abstract_executor_service.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/cached_thread_pool.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/executor_service.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/fixed_thread_pool.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/immediate_executor.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/indirect_immediate_executor.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/java_executor_service.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/java_single_thread_executor.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/java_thread_pool_executor.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/ruby_executor_service.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/ruby_single_thread_executor.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/safe_task_executor.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/serial_executor_service.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/serialized_execution.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/serialized_execution_delegator.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/simple_executor_service.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/single_thread_executor.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/thread_pool_executor.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/timer_set.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executors.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/future.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/hash.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/immutable_struct.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/ivar.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/map.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/maybe.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/mutable_struct.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/mvar.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/options.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/promise.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/promises.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/re_include.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/scheduled_task.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/set.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/settable_struct.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/synchronization.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/synchronization/abstract_lockable_object.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/synchronization/abstract_object.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/synchronization/abstract_struct.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/synchronization/condition.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/synchronization/full_memory_barrier.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/synchronization/jruby_lockable_object.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/synchronization/lock.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/synchronization/lockable_object.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/synchronization/mutex_lockable_object.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/synchronization/object.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/synchronization/safe_initialization.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/synchronization/volatile.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/thread_safe/synchronized_delegator.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/thread_safe/util.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/thread_safe/util/adder.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/thread_safe/util/data_structures.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/thread_safe/util/power_of_two_tuple.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/thread_safe/util/striped64.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/thread_safe/util/volatile.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/thread_safe/util/xor_shift_random.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/timer_task.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/tuple.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/tvar.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/utility/engine.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/utility/monotonic_time.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/utility/native_extension_loader.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/utility/native_integer.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/utility/processor_counter.rb delete mode 100644 bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/version.rb delete mode 100644 bundle/ruby/3.2.0/gems/cork-0.3.0/CHANGELOG.md delete mode 100644 bundle/ruby/3.2.0/gems/cork-0.3.0/LICENSE delete mode 100644 bundle/ruby/3.2.0/gems/cork-0.3.0/README.md delete mode 100644 bundle/ruby/3.2.0/gems/cork-0.3.0/lib/cork.rb delete mode 100644 bundle/ruby/3.2.0/gems/cork-0.3.0/lib/cork/board.rb delete mode 100644 bundle/ruby/3.2.0/gems/cork-0.3.0/lib/cork/gem_version.rb delete mode 100644 bundle/ruby/3.2.0/gems/cork-0.3.0/lib/cork/text_wrapper.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/LICENSE delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/README.md delete mode 100755 bundle/ruby/3.2.0/gems/danger-9.4.3/bin/danger delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/assets/DangerfileTemplate delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/appcenter.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/appcircle.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/appveyor.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/azure_pipelines.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/bamboo.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/bitbucket_pipelines.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/bitrise.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/buddybuild.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/buildkite.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/ci_source.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/circle.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/circle_api.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/cirrus.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/code_build.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/codefresh.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/codemagic.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/codeship.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/concourse.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/custom_ci_with_github.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/dotci.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/drone.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/github_actions.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/gitlab_ci.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/jenkins.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/local_git_repo.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/local_only_git_repo.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/screwdriver.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/semaphore.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/support/commits.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/support/find_repo_info_from_logs.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/support/find_repo_info_from_url.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/support/local_pull_request.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/support/no_pull_request.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/support/no_repo_info.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/support/pull_request_finder.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/support/remote_pull_request.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/support/repo_info.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/surf.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/teamcity.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/travis.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/xcode_cloud.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/xcode_server.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/clients/rubygems_client.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/commands/dangerfile/gem.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/commands/dangerfile/init.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/commands/dry_run.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/commands/init.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/commands/init_helpers/interviewer.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/commands/local.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/commands/local_helpers/http_cache.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/commands/local_helpers/local_setup.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/commands/local_helpers/pry_setup.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/commands/plugins/plugin_json.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/commands/plugins/plugin_lint.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/commands/plugins/plugin_readme.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/commands/pr.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/commands/runner.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/commands/staging.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/commands/systems.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/comment_generators/bitbucket_server.md.erb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/comment_generators/bitbucket_server_inline.md.erb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/comment_generators/bitbucket_server_message_group.md.erb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/comment_generators/github.md.erb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/comment_generators/github_inline.md.erb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/comment_generators/gitlab.md.erb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/comment_generators/gitlab_inline.md.erb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/comment_generators/vsts.md.erb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/comment_generators/vsts_inline.md.erb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/core_ext/file_list.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/core_ext/string.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/dangerfile.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/dangerfile_dsl.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/dangerfile_generator.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/environment_manager.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/executor.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/message_aggregator.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/message_group.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/messages/base.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/messages/markdown.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/messages/violation.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/plugins/dangerfile_bitbucket_cloud_plugin.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/plugins/dangerfile_bitbucket_server_plugin.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/plugins/dangerfile_danger_plugin.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/plugins/dangerfile_git_plugin.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/plugins/dangerfile_github_plugin.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/plugins/dangerfile_gitlab_plugin.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/plugins/dangerfile_local_only_plugin.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/plugins/dangerfile_messaging_plugin.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/plugins/dangerfile_vsts_plugin.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/standard_error.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/helpers/array_subclass.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/helpers/comment.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/helpers/comments_helper.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/helpers/comments_parsing_helper.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/helpers/emoji_mapper.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/helpers/find_max_num_violations.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/helpers/message_groups_array_helper.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/plugin_support/gems_resolver.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/plugin_support/plugin.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/plugin_support/plugin_file_resolver.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/plugin_support/plugin_linter.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/plugin_support/plugin_parser.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/plugin_support/templates/readme_table.html.erb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/request_sources/bitbucket_cloud.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/request_sources/bitbucket_cloud_api.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/request_sources/bitbucket_server.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/request_sources/bitbucket_server_api.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/request_sources/code_insights_api.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/request_sources/github/github.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/request_sources/github/github_review.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/request_sources/github/github_review_resolver.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/request_sources/github/github_review_unsupported.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/request_sources/gitlab.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/request_sources/local_only.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/request_sources/request_source.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/request_sources/support/get_ignored_violation.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/request_sources/vsts.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/request_sources/vsts_api.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/scm_source/git_repo.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/version.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-plugin-api-1.0.0/.gitignore delete mode 100644 bundle/ruby/3.2.0/gems/danger-plugin-api-1.0.0/.rspec delete mode 100644 bundle/ruby/3.2.0/gems/danger-plugin-api-1.0.0/.travis.yml delete mode 100644 bundle/ruby/3.2.0/gems/danger-plugin-api-1.0.0/CODE_OF_CONDUCT.md delete mode 100644 bundle/ruby/3.2.0/gems/danger-plugin-api-1.0.0/Gemfile delete mode 100644 bundle/ruby/3.2.0/gems/danger-plugin-api-1.0.0/LICENSE.txt delete mode 100644 bundle/ruby/3.2.0/gems/danger-plugin-api-1.0.0/README.md delete mode 100644 bundle/ruby/3.2.0/gems/danger-plugin-api-1.0.0/Rakefile delete mode 100755 bundle/ruby/3.2.0/gems/danger-plugin-api-1.0.0/bin/console delete mode 100755 bundle/ruby/3.2.0/gems/danger-plugin-api-1.0.0/bin/setup delete mode 100644 bundle/ruby/3.2.0/gems/danger-plugin-api-1.0.0/danger-plugin-api.gemspec delete mode 100644 bundle/ruby/3.2.0/gems/danger-plugin-api-1.0.0/lib/danger/plugin/api.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-plugin-api-1.0.0/lib/danger/plugin/api/version.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-prose-2.0.7/.gitignore delete mode 100644 bundle/ruby/3.2.0/gems/danger-prose-2.0.7/.travis.yml delete mode 100644 bundle/ruby/3.2.0/gems/danger-prose-2.0.7/CHANGELOG.md delete mode 100644 bundle/ruby/3.2.0/gems/danger-prose-2.0.7/Gemfile delete mode 100644 bundle/ruby/3.2.0/gems/danger-prose-2.0.7/Gemfile.lock delete mode 100644 bundle/ruby/3.2.0/gems/danger-prose-2.0.7/Guardfile delete mode 100644 bundle/ruby/3.2.0/gems/danger-prose-2.0.7/LICENSE.txt delete mode 100644 bundle/ruby/3.2.0/gems/danger-prose-2.0.7/README.md delete mode 100644 bundle/ruby/3.2.0/gems/danger-prose-2.0.7/Rakefile delete mode 100644 bundle/ruby/3.2.0/gems/danger-prose-2.0.7/danger-prose.gemspec delete mode 100644 bundle/ruby/3.2.0/gems/danger-prose-2.0.7/lib/danger_plugin.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-prose-2.0.7/lib/proselintrc delete mode 100644 bundle/ruby/3.2.0/gems/danger-prose-2.0.7/lib/version.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-prose-2.0.7/spec/danger_plugin_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-prose-2.0.7/spec/fixtures/blog_post.md delete mode 100644 bundle/ruby/3.2.0/gems/danger-prose-2.0.7/spec/spec_helper.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-rubocop-0.12.0/.circleci/config.yml delete mode 100644 bundle/ruby/3.2.0/gems/danger-rubocop-0.12.0/.gitignore delete mode 100755 bundle/ruby/3.2.0/gems/danger-rubocop-0.12.0/Gemfile delete mode 100644 bundle/ruby/3.2.0/gems/danger-rubocop-0.12.0/Gemfile.lock delete mode 100755 bundle/ruby/3.2.0/gems/danger-rubocop-0.12.0/Guardfile delete mode 100644 bundle/ruby/3.2.0/gems/danger-rubocop-0.12.0/LICENSE delete mode 100755 bundle/ruby/3.2.0/gems/danger-rubocop-0.12.0/README.md delete mode 100755 bundle/ruby/3.2.0/gems/danger-rubocop-0.12.0/Rakefile delete mode 100644 bundle/ruby/3.2.0/gems/danger-rubocop-0.12.0/danger-rubocop.gemspec delete mode 100755 bundle/ruby/3.2.0/gems/danger-rubocop-0.12.0/lib/danger_plugin.rb delete mode 100755 bundle/ruby/3.2.0/gems/danger-rubocop-0.12.0/lib/version.rb delete mode 100755 bundle/ruby/3.2.0/gems/danger-rubocop-0.12.0/spec/danger_plugin_spec.rb delete mode 100755 bundle/ruby/3.2.0/gems/danger-rubocop-0.12.0/spec/fixtures/ruby_file.rb delete mode 100755 bundle/ruby/3.2.0/gems/danger-rubocop-0.12.0/spec/fixtures/shellescape/ruby_file with spaces.rb delete mode 100755 bundle/ruby/3.2.0/gems/danger-rubocop-0.12.0/spec/fixtures/shellescape/ruby_file'with_quotes.rb delete mode 100755 bundle/ruby/3.2.0/gems/danger-rubocop-0.12.0/spec/fixtures/shellescape/ruby_file_with_parens_(abc).rb delete mode 100755 bundle/ruby/3.2.0/gems/danger-rubocop-0.12.0/spec/spec_helper.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/.dependabot/config.yml delete mode 100644 bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/.devcontainer/Dockerfile delete mode 100644 bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/.github/dependabot.yml delete mode 100644 bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/.github/release-drafter.yml delete mode 100644 bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/.github/workflows/ci.yml delete mode 100644 bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/.github/workflows/publish.yml delete mode 100644 bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/.gitignore delete mode 100644 bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/.rubocop.yml delete mode 100644 bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/Gemfile delete mode 100644 bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/Gemfile.lock delete mode 100644 bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/Guardfile delete mode 100644 bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/LICENSE.txt delete mode 100644 bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/README.md delete mode 100644 bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/Rakefile delete mode 100644 bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/danger-textlint.gemspec delete mode 100644 bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/lib/danger_plugin.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/lib/danger_textlint.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/lib/textlint/gem_version.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/lib/textlint/plugin.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/spec/spec_helper.rb delete mode 100644 bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/spec/textlint_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/CHANGELOG.md delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/LICENSE.md delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/README.md delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/Rakefile delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/examples/client_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/examples/client_test.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/adapter.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/adapter/test.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/adapter_registry.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/connection.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/encoders/flat_params_encoder.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/encoders/nested_params_encoder.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/error.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/logging/formatter.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/methods.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/middleware.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/middleware_registry.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/options.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/options/connection_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/options/env.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/options/proxy_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/options/request_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/options/ssl_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/parameters.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/rack_builder.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/request.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/request/authorization.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/request/instrumentation.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/request/json.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/request/url_encoded.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/response.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/response/json.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/response/logger.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/response/raise_error.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/utils.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/utils/headers.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/utils/params_hash.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/version.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/external_adapters/faraday_specs_setup.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/adapter/test_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/adapter_registry_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/adapter_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/connection_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/error_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/middleware_registry_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/middleware_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/options/env_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/options/options_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/options/proxy_options_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/options/request_options_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/params_encoders/flat_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/params_encoders/nested_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/rack_builder_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/request/authorization_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/request/instrumentation_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/request/json_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/request/url_encoded_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/request_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/response/json_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/response/logger_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/response/raise_error_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/response_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/utils/headers_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/utils_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/spec_helper.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/support/disabling_stub.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/support/fake_safe_buffer.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/support/helper_methods.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/support/shared_examples/adapter.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/support/shared_examples/params_encoder.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/support/shared_examples/request_method.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/support/streaming_response_checker.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/LICENSE delete mode 100644 bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/README.md delete mode 100644 bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/lib/faraday-http-cache.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/lib/faraday/http_cache.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/lib/faraday/http_cache/cache_control.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/lib/faraday/http_cache/memory_store.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/lib/faraday/http_cache/request.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/lib/faraday/http_cache/response.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/lib/faraday/http_cache/storage.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/lib/faraday/http_cache/strategies.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/lib/faraday/http_cache/strategies/base_strategy.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/lib/faraday/http_cache/strategies/by_url.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/lib/faraday/http_cache/strategies/by_vary.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/spec/binary_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/spec/cache_control_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/spec/http_cache_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/spec/instrumentation_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/spec/json_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/spec/request_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/spec/response_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/spec/spec_helper.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/spec/storage_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/spec/strategies/base_strategy_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/spec/strategies/by_url_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/spec/strategies/by_vary_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/spec/support/empty.png delete mode 100644 bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/spec/support/test_app.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/spec/support/test_server.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/spec/validation_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-net_http-3.1.0/LICENSE.md delete mode 100644 bundle/ruby/3.2.0/gems/faraday-net_http-3.1.0/README.md delete mode 100644 bundle/ruby/3.2.0/gems/faraday-net_http-3.1.0/lib/faraday/adapter/net_http.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-net_http-3.1.0/lib/faraday/net_http.rb delete mode 100644 bundle/ruby/3.2.0/gems/faraday-net_http-3.1.0/lib/faraday/net_http/version.rb delete mode 100644 bundle/ruby/3.2.0/gems/git-1.19.1/.github/stale.yml delete mode 100644 bundle/ruby/3.2.0/gems/git-1.19.1/.github/workflows/continuous_integration.yml delete mode 100644 bundle/ruby/3.2.0/gems/git-1.19.1/.gitignore delete mode 100644 bundle/ruby/3.2.0/gems/git-1.19.1/.yardopts delete mode 100644 bundle/ruby/3.2.0/gems/git-1.19.1/CHANGELOG.md delete mode 100644 bundle/ruby/3.2.0/gems/git-1.19.1/CONTRIBUTING.md delete mode 100644 bundle/ruby/3.2.0/gems/git-1.19.1/Dockerfile.changelog-rs delete mode 100644 bundle/ruby/3.2.0/gems/git-1.19.1/Gemfile delete mode 100644 bundle/ruby/3.2.0/gems/git-1.19.1/ISSUE_TEMPLATE.md delete mode 100644 bundle/ruby/3.2.0/gems/git-1.19.1/LICENSE delete mode 100644 bundle/ruby/3.2.0/gems/git-1.19.1/MAINTAINERS.md delete mode 100644 bundle/ruby/3.2.0/gems/git-1.19.1/PULL_REQUEST_TEMPLATE.md delete mode 100644 bundle/ruby/3.2.0/gems/git-1.19.1/README.md delete mode 100644 bundle/ruby/3.2.0/gems/git-1.19.1/RELEASING.md delete mode 100644 bundle/ruby/3.2.0/gems/git-1.19.1/Rakefile delete mode 100644 bundle/ruby/3.2.0/gems/git-1.19.1/git.gemspec delete mode 100644 bundle/ruby/3.2.0/gems/git-1.19.1/lib/git.rb delete mode 100644 bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/author.rb delete mode 100644 bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/base.rb delete mode 100644 bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/base/factory.rb delete mode 100644 bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/branch.rb delete mode 100644 bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/branches.rb delete mode 100644 bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/command_line_result.rb delete mode 100644 bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/config.rb delete mode 100644 bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/diff.rb delete mode 100644 bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/encoding_utils.rb delete mode 100644 bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/escaped_path.rb delete mode 100644 bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/failed_error.rb delete mode 100644 bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/git_execute_error.rb delete mode 100644 bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/index.rb delete mode 100644 bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/lib.rb delete mode 100644 bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/log.rb delete mode 100644 bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/object.rb delete mode 100644 bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/path.rb delete mode 100644 bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/remote.rb delete mode 100644 bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/repository.rb delete mode 100644 bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/signaled_error.rb delete mode 100644 bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/stash.rb delete mode 100644 bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/stashes.rb delete mode 100644 bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/status.rb delete mode 100644 bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/url.rb delete mode 100644 bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/version.rb delete mode 100644 bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/working_directory.rb delete mode 100644 bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/worktree.rb delete mode 100644 bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/worktrees.rb delete mode 100644 bundle/ruby/3.2.0/gems/json-2.7.1/CHANGES.md delete mode 100644 bundle/ruby/3.2.0/gems/json-2.7.1/LICENSE delete mode 100644 bundle/ruby/3.2.0/gems/json-2.7.1/README.md delete mode 100644 bundle/ruby/3.2.0/gems/json-2.7.1/ext/json/Makefile delete mode 100644 bundle/ruby/3.2.0/gems/json-2.7.1/ext/json/ext/fbuffer/fbuffer.h delete mode 100644 bundle/ruby/3.2.0/gems/json-2.7.1/ext/json/ext/generator/Makefile delete mode 100644 bundle/ruby/3.2.0/gems/json-2.7.1/ext/json/ext/generator/depend delete mode 100644 bundle/ruby/3.2.0/gems/json-2.7.1/ext/json/ext/generator/extconf.rb delete mode 100644 bundle/ruby/3.2.0/gems/json-2.7.1/ext/json/ext/generator/generator.c delete mode 100644 bundle/ruby/3.2.0/gems/json-2.7.1/ext/json/ext/generator/generator.h delete mode 100644 bundle/ruby/3.2.0/gems/json-2.7.1/ext/json/ext/parser/Makefile delete mode 100644 bundle/ruby/3.2.0/gems/json-2.7.1/ext/json/ext/parser/depend delete mode 100644 bundle/ruby/3.2.0/gems/json-2.7.1/ext/json/ext/parser/extconf.rb delete mode 100644 bundle/ruby/3.2.0/gems/json-2.7.1/ext/json/ext/parser/parser.c delete mode 100644 bundle/ruby/3.2.0/gems/json-2.7.1/ext/json/ext/parser/parser.h delete mode 100644 bundle/ruby/3.2.0/gems/json-2.7.1/ext/json/ext/parser/parser.rl delete mode 100644 bundle/ruby/3.2.0/gems/json-2.7.1/ext/json/extconf.rb delete mode 100644 bundle/ruby/3.2.0/gems/json-2.7.1/json.gemspec delete mode 100644 bundle/ruby/3.2.0/gems/json-2.7.1/lib/json.rb delete mode 100644 bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/add/bigdecimal.rb delete mode 100644 bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/add/complex.rb delete mode 100644 bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/add/core.rb delete mode 100644 bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/add/date.rb delete mode 100644 bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/add/date_time.rb delete mode 100644 bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/add/exception.rb delete mode 100644 bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/add/ostruct.rb delete mode 100644 bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/add/range.rb delete mode 100644 bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/add/rational.rb delete mode 100644 bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/add/regexp.rb delete mode 100644 bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/add/set.rb delete mode 100644 bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/add/struct.rb delete mode 100644 bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/add/symbol.rb delete mode 100644 bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/add/time.rb delete mode 100644 bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/common.rb delete mode 100644 bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/ext.rb delete mode 100755 bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/ext/generator.so delete mode 100755 bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/ext/parser.so delete mode 100644 bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/generic_object.rb delete mode 100644 bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/pure.rb delete mode 100644 bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/pure/generator.rb delete mode 100644 bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/pure/parser.rb delete mode 100644 bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/version.rb delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/AUTHORS delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/CONTRIBUTERS delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/COPYING delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/README.md delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/VERSION delete mode 100755 bundle/ruby/3.2.0/gems/kramdown-2.4.0/bin/kramdown delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/data/kramdown/document.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/data/kramdown/document.latex delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown.rb delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/converter.rb delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/converter/base.rb delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/converter/hash_ast.rb delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/converter/html.rb delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/converter/kramdown.rb delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/converter/latex.rb delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/converter/man.rb delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/converter/math_engine/mathjax.rb delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/converter/remove_html_tags.rb delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/converter/syntax_highlighter.rb delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/converter/syntax_highlighter/minted.rb delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/converter/syntax_highlighter/rouge.rb delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/converter/toc.rb delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/document.rb delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/element.rb delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/error.rb delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/options.rb delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser.rb delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/base.rb delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/html.rb delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown.rb delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/abbreviation.rb delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/autolink.rb delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/blank_line.rb delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/block_boundary.rb delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/blockquote.rb delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/codeblock.rb delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/codespan.rb delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/emphasis.rb delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/eob.rb delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/escaped_chars.rb delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/extensions.rb delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/footnote.rb delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/header.rb delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/horizontal_rule.rb delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/html.rb delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/html_entity.rb delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/line_break.rb delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/link.rb delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/list.rb delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/math.rb delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/paragraph.rb delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/smart_quotes.rb delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/table.rb delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/typographic_symbol.rb delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/markdown.rb delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/utils.rb delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/utils/configurable.rb delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/utils/entities.rb delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/utils/html.rb delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/utils/lru_cache.rb delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/utils/string_scanner.rb delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/utils/unidecoder.rb delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/version.rb delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/man/man1/kramdown.1 delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/run_tests.rb delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/test_files.rb delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/test_location.rb delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/test_string_scanner_kramdown.rb delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/01_blank_line/spaces.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/01_blank_line/spaces.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/01_blank_line/tabs.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/01_blank_line/tabs.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/02_eob/beginning.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/02_eob/beginning.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/02_eob/end.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/02_eob/end.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/02_eob/middle.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/02_eob/middle.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/indented.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/indented.html.gfm delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/indented.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/line_break_last_line.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/line_break_last_line.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/no_newline_at_end.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/no_newline_at_end.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/one_para.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/one_para.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/standalone_image.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/standalone_image.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/to_kramdown.kramdown delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/to_kramdown.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/two_para.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/two_para.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/with_html_to_native.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/with_html_to_native.options delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/with_html_to_native.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/atx_header.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/atx_header.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/atx_header_no_newline_at_end.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/atx_header_no_newline_at_end.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/header_type_offset.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/header_type_offset.kramdown delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/header_type_offset.latex delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/header_type_offset.options delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/header_type_offset.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/setext_header.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/setext_header.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/setext_header_no_newline_at_end.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/setext_header_no_newline_at_end.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/with_auto_id_prefix.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/with_auto_id_prefix.options delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/with_auto_id_prefix.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/with_auto_id_stripping.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/with_auto_id_stripping.options delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/with_auto_id_stripping.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/with_auto_ids.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/with_auto_ids.options delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/with_auto_ids.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/05_blockquote/indented.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/05_blockquote/indented.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/05_blockquote/lazy.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/05_blockquote/lazy.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/05_blockquote/nested.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/05_blockquote/nested.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/05_blockquote/no_newline_at_end.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/05_blockquote/no_newline_at_end.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/05_blockquote/very_long_line.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/05_blockquote/very_long_line.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/05_blockquote/with_code_blocks.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/05_blockquote/with_code_blocks.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/disable-highlighting.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/disable-highlighting.options delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/disable-highlighting.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/error.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/error.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/guess_lang_css_class.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/guess_lang_css_class.options delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/guess_lang_css_class.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/highlighting-minted-with-opts.latex delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/highlighting-minted-with-opts.options delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/highlighting-minted-with-opts.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/highlighting-minted.latex delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/highlighting-minted.options delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/highlighting-minted.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/highlighting-opts.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/highlighting-opts.options delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/highlighting-opts.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/highlighting.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/highlighting.options delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/highlighting.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/issue_gh45.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/issue_gh45.test delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/lazy.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/lazy.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/no_newline_at_end.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/no_newline_at_end.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/no_newline_at_end_1.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/no_newline_at_end_1.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/normal.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/normal.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/rouge/disabled.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/rouge/disabled.options delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/rouge/disabled.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/rouge/multiple.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/rouge/multiple.options delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/rouge/multiple.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/rouge/simple.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/rouge/simple.options delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/rouge/simple.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/tilde_syntax.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/tilde_syntax.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/whitespace.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/whitespace.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/with_blank_line.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/with_blank_line.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/with_eob_marker.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/with_eob_marker.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/with_ial.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/with_ial.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/with_lang_in_fenced_block.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/with_lang_in_fenced_block.options delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/with_lang_in_fenced_block.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/with_lang_in_fenced_block_any_char.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/with_lang_in_fenced_block_any_char.options delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/with_lang_in_fenced_block_any_char.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/with_lang_in_fenced_block_name_with_dash.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/with_lang_in_fenced_block_name_with_dash.options delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/with_lang_in_fenced_block_name_with_dash.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/07_horizontal_rule/error.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/07_horizontal_rule/error.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/07_horizontal_rule/normal.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/07_horizontal_rule/normal.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/07_horizontal_rule/sepspaces.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/07_horizontal_rule/sepspaces.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/07_horizontal_rule/septabs.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/07_horizontal_rule/septabs.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/brackets_in_item.latex delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/brackets_in_item.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/escaping.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/escaping.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/item_ial.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/item_ial.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/lazy.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/lazy.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/lazy_and_nested.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/lazy_and_nested.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/list_and_hr.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/list_and_hr.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/list_and_others.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/list_and_others.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/mixed.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/mixed.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/nested.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/nested.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/other_first_element.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/other_first_element.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/simple_ol.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/simple_ol.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/simple_ul.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/simple_ul.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/single_item.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/single_item.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/special_cases.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/special_cases.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/comment.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/comment.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/content_model/deflists.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/content_model/deflists.options delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/content_model/deflists.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/content_model/tables.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/content_model/tables.options delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/content_model/tables.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html5_attributes.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html5_attributes.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_after_block.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_after_block.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_and_codeblocks.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_and_codeblocks.options delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_and_codeblocks.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_and_headers.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_and_headers.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/code.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/code.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/comment.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/comment.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/emphasis.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/emphasis.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/entity.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/entity.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/header.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/header.options delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/header.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/list_dl.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/list_dl.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/list_ol.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/list_ol.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/list_ul.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/list_ul.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/options delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/paragraph.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/paragraph.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/table_normal.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/table_normal.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/table_simple.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/table_simple.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/typography.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/typography.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/invalid_html_1.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/invalid_html_1.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/invalid_html_2.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/invalid_html_2.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/markdown_attr.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/markdown_attr.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/not_parsed.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/not_parsed.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/parse_as_raw.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/parse_as_raw.htmlinput delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/parse_as_raw.options delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/parse_as_raw.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/parse_as_span.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/parse_as_span.htmlinput delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/parse_as_span.options delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/parse_as_span.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/parse_block_html.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/parse_block_html.options delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/parse_block_html.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/processing_instruction.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/processing_instruction.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/simple.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/simple.options delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/simple.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/standalone_image_in_div.htmlinput delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/standalone_image_in_div.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/table.kramdown delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/table.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/textarea.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/textarea.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/xml.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/xml.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/10_ald/simple.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/10_ald/simple.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/11_ial/auto_id_and_ial.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/11_ial/auto_id_and_ial.options delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/11_ial/auto_id_and_ial.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/11_ial/nested.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/11_ial/nested.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/11_ial/simple.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/11_ial/simple.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/12_extension/comment.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/12_extension/comment.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/12_extension/ignored.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/12_extension/ignored.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/12_extension/nomarkdown.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/12_extension/nomarkdown.kramdown delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/12_extension/nomarkdown.latex delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/12_extension/nomarkdown.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/12_extension/options.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/12_extension/options.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/12_extension/options2.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/12_extension/options2.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/12_extension/options3.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/12_extension/options3.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/auto_ids.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/auto_ids.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/definition_at_beginning.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/definition_at_beginning.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/deflist_ial.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/deflist_ial.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/item_ial.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/item_ial.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/multiple_terms.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/multiple_terms.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/no_def_list.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/no_def_list.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/para_wrapping.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/para_wrapping.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/separated_by_eob.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/separated_by_eob.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/simple.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/simple.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/styled_terms.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/styled_terms.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/too_much_space.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/too_much_space.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/with_blocks.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/with_blocks.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/empty_tag_in_cell.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/empty_tag_in_cell.options delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/empty_tag_in_cell.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/errors.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/errors.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/escaping.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/escaping.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/footer.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/footer.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/header.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/header.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/no_table.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/no_table.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/simple.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/simple.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/table_with_footnote.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/table_with_footnote.latex delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/table_with_footnote.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/15_math/gh_128.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/15_math/gh_128.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/15_math/no_engine.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/15_math/no_engine.options delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/15_math/no_engine.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/15_math/normal.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/15_math/normal.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/16_toc/no_toc.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/16_toc/no_toc.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/16_toc/toc_exclude.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/16_toc/toc_exclude.options delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/16_toc/toc_exclude.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/16_toc/toc_levels.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/16_toc/toc_levels.options delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/16_toc/toc_levels.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/16_toc/toc_with_footnotes.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/16_toc/toc_with_footnotes.options delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/16_toc/toc_with_footnotes.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/16_toc/toc_with_links.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/16_toc/toc_with_links.options delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/16_toc/toc_with_links.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/cjk-line-break.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/cjk-line-break.options delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/cjk-line-break.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/encoding.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/encoding.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/man/example.man delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/man/example.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/man/heading-name-dash-description.man delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/man/heading-name-dash-description.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/man/heading-name-description.man delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/man/heading-name-description.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/man/heading-name-section-description.man delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/man/heading-name-section-description.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/man/heading-name-section.man delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/man/heading-name-section.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/man/heading-name.man delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/man/heading-name.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/man/sections.man delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/man/sections.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/man/text-escaping.man delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/man/text-escaping.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/empty.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/empty.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/empty_title.htmlinput delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/empty_title.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/image_in_a.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/image_in_a.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/imagelinks.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/imagelinks.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/inline.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/inline.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/latex_escaping.latex delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/latex_escaping.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/link_defs.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/link_defs.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/link_defs_with_ial.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/link_defs_with_ial.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/links_with_angle_brackets.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/links_with_angle_brackets.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/reference.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/reference.options delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/reference.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/02_emphasis/empty.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/02_emphasis/empty.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/02_emphasis/errors.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/02_emphasis/errors.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/02_emphasis/nesting.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/02_emphasis/nesting.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/02_emphasis/normal.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/02_emphasis/normal.options delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/02_emphasis/normal.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/empty.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/empty.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/errors.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/errors.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/highlighting-minted.latex delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/highlighting-minted.options delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/highlighting-minted.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/highlighting.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/highlighting.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/normal-css-class.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/normal-css-class.options delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/normal-css-class.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/normal.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/normal.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/rouge/disabled.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/rouge/disabled.options delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/rouge/disabled.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/rouge/simple.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/rouge/simple.options delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/rouge/simple.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/backlink_inline.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/backlink_inline.options delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/backlink_inline.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/backlink_text.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/backlink_text.options delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/backlink_text.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/definitions.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/definitions.latex delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/definitions.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/footnote_nr.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/footnote_nr.latex delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/footnote_nr.options delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/footnote_nr.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/footnote_prefix.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/footnote_prefix.options delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/footnote_prefix.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/inside_footnote.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/inside_footnote.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/markers.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/markers.latex delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/markers.options delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/markers.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/placement.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/placement.options delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/placement.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/regexp_problem.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/regexp_problem.options delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/regexp_problem.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/without_backlink.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/without_backlink.options delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/without_backlink.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/across_lines.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/across_lines.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/button.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/button.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/invalid.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/invalid.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/link_with_mailto.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/link_with_mailto.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/mark_element.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/mark_element.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/markdown_attr.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/markdown_attr.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/normal.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/normal.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/raw_span_elements.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/raw_span_elements.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/xml.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/xml.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/abbreviations/abbrev.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/abbreviations/abbrev.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/abbreviations/abbrev_defs.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/abbreviations/abbrev_defs.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/abbreviations/abbrev_in_html.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/abbreviations/abbrev_in_html.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/abbreviations/in_footnote.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/abbreviations/in_footnote.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/autolinks/url_links.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/autolinks/url_links.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/escaped_chars/normal.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/escaped_chars/normal.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/extension/comment.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/extension/comment.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/extension/ignored.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/extension/ignored.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/extension/nomarkdown.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/extension/nomarkdown.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/extension/options.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/extension/options.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/ial/simple.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/ial/simple.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/line_breaks/normal.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/line_breaks/normal.latex delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/line_breaks/normal.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/math/no_engine.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/math/no_engine.options delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/math/no_engine.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/math/normal.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/math/normal.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/entities.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/entities.options delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/entities.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/entities_as_char.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/entities_as_char.options delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/entities_as_char.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/entities_as_input.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/entities_as_input.options delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/entities_as_input.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/entities_numeric.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/entities_numeric.options delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/entities_numeric.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/entities_symbolic.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/entities_symbolic.options delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/entities_symbolic.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/greaterthan.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/greaterthan.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/lowerthan.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/lowerthan.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/typography.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/typography.options delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/typography.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/typography_subst.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/typography_subst.latex delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/typography_subst.options delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/typography_subst.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/CONTRIBUTERS delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/COPYING delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/VERSION delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/lib/kramdown-parser-gfm.rb delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/lib/kramdown/parser/gfm.rb delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/lib/kramdown/parser/gfm/options.rb delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/test_files.rb delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/atx_header.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/atx_header.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/backticks_syntax.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/backticks_syntax.options delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/backticks_syntax.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/codeblock_fenced.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/codeblock_fenced.options delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/codeblock_fenced.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/hard_line_breaks.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/hard_line_breaks.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/hard_line_breaks_off.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/hard_line_breaks_off.options delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/hard_line_breaks_off.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/header_ids.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/header_ids.options delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/header_ids.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/header_ids_with_prefix.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/header_ids_with_prefix.options delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/header_ids_with_prefix.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/no_typographic.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/no_typographic.options delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/no_typographic.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/paragraph_end-disabled.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/paragraph_end-disabled.options delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/paragraph_end-disabled.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/paragraph_end.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/paragraph_end.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/strikethrough.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/strikethrough.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/task_list.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/task_list.text delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/two_para_hard_line_breaks.html delete mode 100644 bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/two_para_hard_line_breaks.text delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/LICENSE.txt delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/README.md delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server-protocol.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/code_action_kind.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/code_action_trigger_kind.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/completion_item_kind.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/completion_item_tag.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/completion_trigger_kind.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/diagnostic_severity.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/diagnostic_tag.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/document_diagnostic_report_kind.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/document_highlight_kind.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/error_codes.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/failure_handling_kind.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/file_change_type.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/file_operation_pattern_kind.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/folding_range_kind.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/initialize_error_codes.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/inlay_hint_kind.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/insert_text_format.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/insert_text_mode.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/markup_kind.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/message_type.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/moniker_kind.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/notebook_cell_kind.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/position_encoding_kind.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/prepare_support_default_behavior.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/resource_operation_kind.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/semantic_token_modifiers.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/semantic_token_types.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/signature_help_trigger_kind.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/symbol_kind.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/symbol_tag.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/text_document_save_reason.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/text_document_sync_kind.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/token_format.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/uniqueness_level.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/watch_kind.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/annotated_text_edit.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/apply_workspace_edit_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/apply_workspace_edit_result.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/call_hierarchy_client_capabilities.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/call_hierarchy_incoming_call.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/call_hierarchy_incoming_calls_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/call_hierarchy_item.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/call_hierarchy_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/call_hierarchy_outgoing_call.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/call_hierarchy_outgoing_calls_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/call_hierarchy_prepare_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/call_hierarchy_registration_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/cancel_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/change_annotation.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/client_capabilities.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/code_action.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/code_action_client_capabilities.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/code_action_context.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/code_action_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/code_action_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/code_action_registration_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/code_description.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/code_lens.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/code_lens_client_capabilities.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/code_lens_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/code_lens_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/code_lens_registration_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/code_lens_workspace_client_capabilities.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/color.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/color_information.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/color_presentation.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/color_presentation_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/command.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/completion_client_capabilities.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/completion_context.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/completion_item.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/completion_item_label_details.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/completion_list.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/completion_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/completion_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/completion_registration_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/configuration_item.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/configuration_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/create_file.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/create_file_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/create_files_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/declaration_client_capabilities.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/declaration_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/declaration_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/declaration_registration_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/definition_client_capabilities.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/definition_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/definition_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/definition_registration_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/delete_file.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/delete_file_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/delete_files_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/diagnostic.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/diagnostic_client_capabilities.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/diagnostic_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/diagnostic_registration_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/diagnostic_related_information.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/diagnostic_server_cancellation_data.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/diagnostic_workspace_client_capabilities.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/did_change_configuration_client_capabilities.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/did_change_configuration_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/did_change_notebook_document_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/did_change_text_document_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/did_change_watched_files_client_capabilities.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/did_change_watched_files_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/did_change_watched_files_registration_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/did_change_workspace_folders_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/did_close_notebook_document_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/did_close_text_document_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/did_open_notebook_document_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/did_open_text_document_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/did_save_notebook_document_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/did_save_text_document_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_color_client_capabilities.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_color_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_color_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_color_registration_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_diagnostic_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_diagnostic_report_partial_result.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_filter.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_formatting_client_capabilities.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_formatting_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_formatting_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_formatting_registration_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_highlight.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_highlight_client_capabilities.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_highlight_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_highlight_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_highlight_registration_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_link.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_link_client_capabilities.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_link_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_link_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_link_registration_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_on_type_formatting_client_capabilities.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_on_type_formatting_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_on_type_formatting_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_on_type_formatting_registration_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_range_formatting_client_capabilities.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_range_formatting_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_range_formatting_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_range_formatting_registration_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_symbol.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_symbol_client_capabilities.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_symbol_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_symbol_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_symbol_registration_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/execute_command_client_capabilities.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/execute_command_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/execute_command_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/execute_command_registration_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/execution_summary.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/file_create.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/file_delete.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/file_event.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/file_operation_filter.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/file_operation_pattern.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/file_operation_pattern_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/file_operation_registration_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/file_rename.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/file_system_watcher.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/folding_range.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/folding_range_client_capabilities.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/folding_range_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/folding_range_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/folding_range_registration_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/formatting_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/full_document_diagnostic_report.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/hover.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/hover_client_capabilities.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/hover_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/hover_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/hover_registration_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/hover_result.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/implementation_client_capabilities.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/implementation_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/implementation_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/implementation_registration_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/initialize_error.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/initialize_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/initialize_result.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/initialized_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/inlay_hint.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/inlay_hint_client_capabilities.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/inlay_hint_label_part.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/inlay_hint_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/inlay_hint_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/inlay_hint_registration_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/inlay_hint_workspace_client_capabilities.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/inline_value_client_capabilities.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/inline_value_context.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/inline_value_evaluatable_expression.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/inline_value_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/inline_value_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/inline_value_registration_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/inline_value_text.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/inline_value_variable_lookup.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/inline_value_workspace_client_capabilities.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/insert_replace_edit.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/linked_editing_range_client_capabilities.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/linked_editing_range_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/linked_editing_range_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/linked_editing_range_registration_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/linked_editing_ranges.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/location.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/location_link.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/log_message_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/log_trace_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/markup_content.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/message.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/message_action_item.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/moniker.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/moniker_client_capabilities.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/moniker_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/moniker_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/moniker_registration_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/notebook_cell.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/notebook_cell_array_change.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/notebook_cell_text_document_filter.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/notebook_document.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/notebook_document_change_event.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/notebook_document_client_capabilities.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/notebook_document_filter.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/notebook_document_identifier.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/notebook_document_sync_client_capabilities.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/notebook_document_sync_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/notebook_document_sync_registration_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/notification_message.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/optional_versioned_text_document_identifier.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/parameter_information.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/partial_result_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/position.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/prepare_rename_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/previous_result_id.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/progress_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/publish_diagnostics_client_capabilities.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/publish_diagnostics_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/range.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/reference_client_capabilities.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/reference_context.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/reference_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/reference_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/reference_registration_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/registration.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/registration_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/regular_expressions_client_capabilities.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/related_full_document_diagnostic_report.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/related_unchanged_document_diagnostic_report.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/relative_pattern.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/rename_client_capabilities.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/rename_file.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/rename_file_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/rename_files_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/rename_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/rename_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/rename_registration_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/request_message.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/response_error.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/response_message.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/save_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/selection_range.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/selection_range_client_capabilities.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/selection_range_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/selection_range_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/selection_range_registration_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/semantic_tokens.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/semantic_tokens_client_capabilities.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/semantic_tokens_delta.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/semantic_tokens_delta_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/semantic_tokens_delta_partial_result.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/semantic_tokens_edit.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/semantic_tokens_legend.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/semantic_tokens_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/semantic_tokens_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/semantic_tokens_partial_result.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/semantic_tokens_range_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/semantic_tokens_registration_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/semantic_tokens_workspace_client_capabilities.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/server_capabilities.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/set_trace_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/show_document_client_capabilities.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/show_document_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/show_document_result.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/show_message_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/show_message_request_client_capabilities.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/show_message_request_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/signature_help.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/signature_help_client_capabilities.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/signature_help_context.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/signature_help_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/signature_help_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/signature_help_registration_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/signature_information.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/static_registration_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/symbol_information.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/text_document_change_registration_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/text_document_client_capabilities.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/text_document_content_change_event.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/text_document_edit.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/text_document_identifier.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/text_document_item.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/text_document_position_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/text_document_registration_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/text_document_save_registration_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/text_document_sync_client_capabilities.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/text_document_sync_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/text_edit.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/type_definition_client_capabilities.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/type_definition_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/type_definition_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/type_definition_registration_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/type_hierarchy_item.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/type_hierarchy_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/type_hierarchy_prepare_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/type_hierarchy_registration_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/type_hierarchy_subtypes_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/type_hierarchy_supertypes_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/unchanged_document_diagnostic_report.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/unregistration.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/unregistration_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/versioned_notebook_document_identifier.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/versioned_text_document_identifier.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/will_save_text_document_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/work_done_progress_begin.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/work_done_progress_cancel_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/work_done_progress_create_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/work_done_progress_end.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/work_done_progress_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/work_done_progress_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/work_done_progress_report.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/workspace_diagnostic_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/workspace_diagnostic_report.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/workspace_diagnostic_report_partial_result.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/workspace_edit.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/workspace_edit_client_capabilities.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/workspace_folder.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/workspace_folders_change_event.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/workspace_folders_server_capabilities.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/workspace_full_document_diagnostic_report.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/workspace_symbol.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/workspace_symbol_client_capabilities.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/workspace_symbol_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/workspace_symbol_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/workspace_symbol_registration_options.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/workspace_unchanged_document_diagnostic_report.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/transport.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/transport/io.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/transport/io/reader.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/transport/io/writer.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/transport/stdio.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/transport/stdio/reader.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/transport/stdio/writer.rb delete mode 100644 bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/version.rb delete mode 100644 bundle/ruby/3.2.0/gems/mdl-0.13.0/Gemfile delete mode 100644 bundle/ruby/3.2.0/gems/mdl-0.13.0/LICENSE.txt delete mode 100755 bundle/ruby/3.2.0/gems/mdl-0.13.0/bin/mdl delete mode 100644 bundle/ruby/3.2.0/gems/mdl-0.13.0/lib/mdl.rb delete mode 100644 bundle/ruby/3.2.0/gems/mdl-0.13.0/lib/mdl/cli.rb delete mode 100644 bundle/ruby/3.2.0/gems/mdl-0.13.0/lib/mdl/config.rb delete mode 100644 bundle/ruby/3.2.0/gems/mdl-0.13.0/lib/mdl/doc.rb delete mode 100644 bundle/ruby/3.2.0/gems/mdl-0.13.0/lib/mdl/formatters/sarif.rb delete mode 100644 bundle/ruby/3.2.0/gems/mdl-0.13.0/lib/mdl/kramdown_parser.rb delete mode 100644 bundle/ruby/3.2.0/gems/mdl-0.13.0/lib/mdl/rules.rb delete mode 100644 bundle/ruby/3.2.0/gems/mdl-0.13.0/lib/mdl/ruleset.rb delete mode 100644 bundle/ruby/3.2.0/gems/mdl-0.13.0/lib/mdl/style.rb delete mode 100644 bundle/ruby/3.2.0/gems/mdl-0.13.0/lib/mdl/styles/all.rb delete mode 100644 bundle/ruby/3.2.0/gems/mdl-0.13.0/lib/mdl/styles/cirosantilli.rb delete mode 100644 bundle/ruby/3.2.0/gems/mdl-0.13.0/lib/mdl/styles/default.rb delete mode 100644 bundle/ruby/3.2.0/gems/mdl-0.13.0/lib/mdl/styles/relaxed.rb delete mode 100644 bundle/ruby/3.2.0/gems/mdl-0.13.0/lib/mdl/version.rb delete mode 100644 bundle/ruby/3.2.0/gems/mdl-0.13.0/mdl.gemspec delete mode 100644 bundle/ruby/3.2.0/gems/method_source-1.0.0/.circleci/config.yml delete mode 100644 bundle/ruby/3.2.0/gems/method_source-1.0.0/.gemtest delete mode 100644 bundle/ruby/3.2.0/gems/method_source-1.0.0/.yardopts delete mode 100644 bundle/ruby/3.2.0/gems/method_source-1.0.0/CHANGELOG.md delete mode 100644 bundle/ruby/3.2.0/gems/method_source-1.0.0/Gemfile delete mode 100644 bundle/ruby/3.2.0/gems/method_source-1.0.0/LICENSE delete mode 100644 bundle/ruby/3.2.0/gems/method_source-1.0.0/README.markdown delete mode 100644 bundle/ruby/3.2.0/gems/method_source-1.0.0/Rakefile delete mode 100644 bundle/ruby/3.2.0/gems/method_source-1.0.0/lib/method_source.rb delete mode 100644 bundle/ruby/3.2.0/gems/method_source-1.0.0/lib/method_source/code_helpers.rb delete mode 100644 bundle/ruby/3.2.0/gems/method_source-1.0.0/lib/method_source/source_location.rb delete mode 100644 bundle/ruby/3.2.0/gems/method_source-1.0.0/lib/method_source/version.rb delete mode 100644 bundle/ruby/3.2.0/gems/method_source-1.0.0/method_source.gemspec delete mode 100644 bundle/ruby/3.2.0/gems/method_source-1.0.0/spec/method_source/code_helpers_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/method_source-1.0.0/spec/method_source_spec.rb delete mode 100644 bundle/ruby/3.2.0/gems/method_source-1.0.0/spec/spec_helper.rb delete mode 100644 bundle/ruby/3.2.0/gems/mixlib-cli-2.1.8/LICENSE delete mode 100644 bundle/ruby/3.2.0/gems/mixlib-cli-2.1.8/NOTICE delete mode 100644 bundle/ruby/3.2.0/gems/mixlib-cli-2.1.8/lib/mixlib/cli.rb delete mode 100644 bundle/ruby/3.2.0/gems/mixlib-cli-2.1.8/lib/mixlib/cli/formatter.rb delete mode 100644 bundle/ruby/3.2.0/gems/mixlib-cli-2.1.8/lib/mixlib/cli/version.rb delete mode 100644 bundle/ruby/3.2.0/gems/mixlib-config-3.0.27/LICENSE delete mode 100644 bundle/ruby/3.2.0/gems/mixlib-config-3.0.27/NOTICE delete mode 100644 bundle/ruby/3.2.0/gems/mixlib-config-3.0.27/lib/mixlib/config.rb delete mode 100644 bundle/ruby/3.2.0/gems/mixlib-config-3.0.27/lib/mixlib/config/configurable.rb delete mode 100644 bundle/ruby/3.2.0/gems/mixlib-config-3.0.27/lib/mixlib/config/reopened_config_context_with_configurable_error.rb delete mode 100644 bundle/ruby/3.2.0/gems/mixlib-config-3.0.27/lib/mixlib/config/reopened_configurable_with_config_context_error.rb delete mode 100644 bundle/ruby/3.2.0/gems/mixlib-config-3.0.27/lib/mixlib/config/unknown_config_option_error.rb delete mode 100644 bundle/ruby/3.2.0/gems/mixlib-config-3.0.27/lib/mixlib/config/version.rb delete mode 100644 bundle/ruby/3.2.0/gems/mixlib-shellout-3.2.7/LICENSE delete mode 100644 bundle/ruby/3.2.0/gems/mixlib-shellout-3.2.7/lib/mixlib/shellout.rb delete mode 100644 bundle/ruby/3.2.0/gems/mixlib-shellout-3.2.7/lib/mixlib/shellout/exceptions.rb delete mode 100644 bundle/ruby/3.2.0/gems/mixlib-shellout-3.2.7/lib/mixlib/shellout/helper.rb delete mode 100644 bundle/ruby/3.2.0/gems/mixlib-shellout-3.2.7/lib/mixlib/shellout/unix.rb delete mode 100644 bundle/ruby/3.2.0/gems/mixlib-shellout-3.2.7/lib/mixlib/shellout/version.rb delete mode 100644 bundle/ruby/3.2.0/gems/mixlib-shellout-3.2.7/lib/mixlib/shellout/windows.rb delete mode 100644 bundle/ruby/3.2.0/gems/mixlib-shellout-3.2.7/lib/mixlib/shellout/windows/core_ext.rb delete mode 100644 bundle/ruby/3.2.0/gems/nap-1.1.0/LICENSE delete mode 100644 bundle/ruby/3.2.0/gems/nap-1.1.0/README.md delete mode 100644 bundle/ruby/3.2.0/gems/nap-1.1.0/lib/rest.rb delete mode 100644 bundle/ruby/3.2.0/gems/nap-1.1.0/lib/rest/error.rb delete mode 100644 bundle/ruby/3.2.0/gems/nap-1.1.0/lib/rest/request.rb delete mode 100644 bundle/ruby/3.2.0/gems/nap-1.1.0/lib/rest/response.rb delete mode 100644 bundle/ruby/3.2.0/gems/nap-1.1.0/support/cacert.pem delete mode 100644 bundle/ruby/3.2.0/gems/no_proxy_fix-0.1.2/.gitignore delete mode 100644 bundle/ruby/3.2.0/gems/no_proxy_fix-0.1.2/.rspec delete mode 100644 bundle/ruby/3.2.0/gems/no_proxy_fix-0.1.2/.rubocop.yml delete mode 100644 bundle/ruby/3.2.0/gems/no_proxy_fix-0.1.2/.rubocop_todo.yml delete mode 100644 bundle/ruby/3.2.0/gems/no_proxy_fix-0.1.2/.travis.yml delete mode 100644 bundle/ruby/3.2.0/gems/no_proxy_fix-0.1.2/Gemfile delete mode 100644 bundle/ruby/3.2.0/gems/no_proxy_fix-0.1.2/Guardfile delete mode 100644 bundle/ruby/3.2.0/gems/no_proxy_fix-0.1.2/LICENSE.txt delete mode 100644 bundle/ruby/3.2.0/gems/no_proxy_fix-0.1.2/README.md delete mode 100644 bundle/ruby/3.2.0/gems/no_proxy_fix-0.1.2/Rakefile delete mode 100755 bundle/ruby/3.2.0/gems/no_proxy_fix-0.1.2/bin/console delete mode 100755 bundle/ruby/3.2.0/gems/no_proxy_fix-0.1.2/bin/setup delete mode 100644 bundle/ruby/3.2.0/gems/no_proxy_fix-0.1.2/lib/cext/generic_find_proxy.rb delete mode 100644 bundle/ruby/3.2.0/gems/no_proxy_fix-0.1.2/lib/no_proxy_fix.rb delete mode 100644 bundle/ruby/3.2.0/gems/no_proxy_fix-0.1.2/lib/no_proxy_fix/version.rb delete mode 100644 bundle/ruby/3.2.0/gems/no_proxy_fix-0.1.2/no_proxy_fix.gemspec delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/.document delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/CONTRIBUTING.md delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/LICENSE.md delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/README.md delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/Rakefile delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/ext/sawyer/relation.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/arguments.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/authentication.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/actions_artifacts.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/actions_secrets.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/actions_workflow_jobs.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/actions_workflow_runs.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/actions_workflows.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/apps.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/checks.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/code_scanning.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/codespaces_secrets.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/commit_branches.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/commit_comments.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/commit_pulls.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/commits.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/community_profile.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/contents.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/dependabot_secrets.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/deployments.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/downloads.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/emojis.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/environments.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/events.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/feeds.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/gists.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/gitignore.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/hooks.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/issues.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/labels.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/legacy_search.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/licenses.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/markdown.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/marketplace.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/meta.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/milestones.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/notifications.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/oauth_applications.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/objects.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/organizations.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/pages.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/projects.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/pub_sub_hubbub.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/pull_requests.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/rate_limit.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/reactions.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/refs.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/releases.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/repositories.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/repository_invitations.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/reviews.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/say.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/search.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/service_status.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/source_import.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/stats.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/statuses.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/tokens.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/traffic.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/users.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/configurable.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/connection.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/default.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/enterprise_admin_client.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/enterprise_admin_client/admin_stats.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/enterprise_admin_client/license.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/enterprise_admin_client/orgs.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/enterprise_admin_client/search_indexing.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/enterprise_admin_client/users.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/enterprise_management_console_client.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/enterprise_management_console_client/management_console.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/error.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/gist.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/middleware/follow_redirects.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/organization.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/rate_limit.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/repo_arguments.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/repository.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/response/base_middleware.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/response/feed_parser.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/response/raise_error.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/user.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/version.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/warnable.rb delete mode 100644 bundle/ruby/3.2.0/gems/octokit-8.1.0/octokit.gemspec delete mode 100644 bundle/ruby/3.2.0/gems/open4-1.3.4/LICENSE delete mode 100644 bundle/ruby/3.2.0/gems/open4-1.3.4/README delete mode 100644 bundle/ruby/3.2.0/gems/open4-1.3.4/README.erb delete mode 100644 bundle/ruby/3.2.0/gems/open4-1.3.4/lib/open4.rb delete mode 100644 bundle/ruby/3.2.0/gems/open4-1.3.4/open4.gemspec delete mode 100644 bundle/ruby/3.2.0/gems/open4-1.3.4/rakefile delete mode 100644 bundle/ruby/3.2.0/gems/open4-1.3.4/samples/bg.rb delete mode 100644 bundle/ruby/3.2.0/gems/open4-1.3.4/samples/block.rb delete mode 100644 bundle/ruby/3.2.0/gems/open4-1.3.4/samples/exception.rb delete mode 100644 bundle/ruby/3.2.0/gems/open4-1.3.4/samples/jesse-caldwell.rb delete mode 100644 bundle/ruby/3.2.0/gems/open4-1.3.4/samples/pfork4.rb delete mode 100644 bundle/ruby/3.2.0/gems/open4-1.3.4/samples/simple.rb delete mode 100644 bundle/ruby/3.2.0/gems/open4-1.3.4/samples/spawn.rb delete mode 100644 bundle/ruby/3.2.0/gems/open4-1.3.4/samples/stdin_timeout.rb delete mode 100644 bundle/ruby/3.2.0/gems/open4-1.3.4/samples/timeout.rb delete mode 100644 bundle/ruby/3.2.0/gems/open4-1.3.4/test/lib/test_case.rb delete mode 100644 bundle/ruby/3.2.0/gems/open4-1.3.4/test/pfork4_test.rb delete mode 100644 bundle/ruby/3.2.0/gems/open4-1.3.4/test/popen4_test.rb delete mode 100644 bundle/ruby/3.2.0/gems/open4-1.3.4/test/popen4ext_test.rb delete mode 100644 bundle/ruby/3.2.0/gems/open4-1.3.4/white_box/leak.rb delete mode 100644 bundle/ruby/3.2.0/gems/parallel-1.24.0/MIT-LICENSE.txt delete mode 100644 bundle/ruby/3.2.0/gems/parallel-1.24.0/lib/parallel.rb delete mode 100644 bundle/ruby/3.2.0/gems/parallel-1.24.0/lib/parallel/version.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/LICENSE.txt delete mode 100755 bundle/ruby/3.2.0/gems/parser-3.3.0.5/bin/ruby-parse delete mode 100755 bundle/ruby/3.2.0/gems/parser-3.3.0.5/bin/ruby-rewrite delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/gauntlet_parser.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/all.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ast/node.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ast/processor.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/base.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/builders/default.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/clobbering_error.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/color.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/context.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/current.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/current_arg_stack.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/deprecation.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/diagnostic.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/diagnostic/engine.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/lexer-F0.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/lexer-F1.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/lexer-strings.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/lexer/dedenter.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/lexer/explanation.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/lexer/literal.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/lexer/stack_state.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/macruby.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/max_numparam_stack.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/messages.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/meta.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/rewriter.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ruby18.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ruby19.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ruby20.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ruby21.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ruby22.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ruby23.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ruby24.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ruby25.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ruby26.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ruby27.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ruby28.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ruby30.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ruby31.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ruby32.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ruby33.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ruby34.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/rubymotion.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/runner.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/runner/ruby_parse.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/runner/ruby_rewrite.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/buffer.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/comment.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/comment/associator.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/map.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/map/collection.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/map/condition.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/map/constant.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/map/definition.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/map/for.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/map/heredoc.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/map/index.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/map/keyword.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/map/method_definition.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/map/objc_kwarg.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/map/operator.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/map/rescue_body.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/map/send.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/map/ternary.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/map/variable.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/range.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/rewriter.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/rewriter/action.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/tree_rewriter.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/tree_rewriter/action.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/static_environment.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/syntax_error.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/tree_rewriter.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/variables_stack.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/version.rb delete mode 100644 bundle/ruby/3.2.0/gems/parser-3.3.0.5/parser.gemspec delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/CHANGELOG.md delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/LICENSE delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/README.md delete mode 100755 bundle/ruby/3.2.0/gems/pry-0.14.2/bin/pry delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/basic_object.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/block_command.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/class_command.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/cli.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/code.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/code/code_file.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/code/code_range.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/code/loc.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/code_object.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/color_printer.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/command.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/command_set.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/command_state.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/amend_line.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/bang.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/bang_pry.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/cat.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/cat/abstract_formatter.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/cat/exception_formatter.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/cat/file_formatter.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/cat/input_expression_formatter.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/cd.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/change_inspector.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/change_prompt.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/clear_screen.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/code_collector.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/disable_pry.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/easter_eggs.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/edit.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/edit/exception_patcher.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/edit/file_and_line_locator.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/exit.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/exit_all.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/exit_program.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/find_method.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/fix_indent.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/help.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/hist.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/import_set.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/jump_to.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/list_inspectors.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/ls.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/ls/constants.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/ls/formatter.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/ls/globals.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/ls/grep.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/ls/instance_vars.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/ls/interrogatable.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/ls/jruby_hacks.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/ls/local_names.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/ls/local_vars.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/ls/ls_entity.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/ls/methods.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/ls/methods_helper.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/ls/self_methods.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/nesting.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/play.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/pry_backtrace.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/pry_version.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/raise_up.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/reload_code.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/reset.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/ri.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/save_file.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/shell_command.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/shell_mode.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/show_doc.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/show_info.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/show_input.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/show_source.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/stat.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/switch_to.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/toggle_color.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/watch_expression.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/watch_expression/expression.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/whereami.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/wtf.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/config.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/config/attributable.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/config/lazy_value.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/config/memoized_value.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/config/value.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/control_d_handler.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/core_extensions.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/editor.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/env.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/exception_handler.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/exceptions.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/forwardable.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/helpers.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/helpers/base_helpers.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/helpers/command_helpers.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/helpers/documentation_helpers.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/helpers/options_helpers.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/helpers/platform.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/helpers/table.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/helpers/text.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/history.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/hooks.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/indent.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/input_completer.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/input_lock.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/inspector.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/last_exception.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/method.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/method/disowned.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/method/patcher.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/method/weird_method_locator.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/object_path.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/output.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/pager.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/prompt.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/pry_class.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/pry_instance.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/repl.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/repl_file_loader.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/ring.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/slop.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/slop/LICENSE delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/slop/commands.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/slop/option.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/syntax_highlighter.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/system_command_handler.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/testable.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/testable/evalable.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/testable/mockable.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/testable/pry_tester.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/testable/utility.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/testable/variables.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/version.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/warning.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/wrapped_module.rb delete mode 100644 bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/wrapped_module/candidate.rb delete mode 100644 bundle/ruby/3.2.0/gems/public_suffix-5.0.4/.yardopts delete mode 100644 bundle/ruby/3.2.0/gems/public_suffix-5.0.4/2.0-Upgrade.md delete mode 100644 bundle/ruby/3.2.0/gems/public_suffix-5.0.4/CHANGELOG.md delete mode 100644 bundle/ruby/3.2.0/gems/public_suffix-5.0.4/LICENSE.txt delete mode 100644 bundle/ruby/3.2.0/gems/public_suffix-5.0.4/README.md delete mode 100644 bundle/ruby/3.2.0/gems/public_suffix-5.0.4/SECURITY.md delete mode 100644 bundle/ruby/3.2.0/gems/public_suffix-5.0.4/data/list.txt delete mode 100644 bundle/ruby/3.2.0/gems/public_suffix-5.0.4/lib/public_suffix.rb delete mode 100644 bundle/ruby/3.2.0/gems/public_suffix-5.0.4/lib/public_suffix/domain.rb delete mode 100644 bundle/ruby/3.2.0/gems/public_suffix-5.0.4/lib/public_suffix/errors.rb delete mode 100644 bundle/ruby/3.2.0/gems/public_suffix-5.0.4/lib/public_suffix/list.rb delete mode 100644 bundle/ruby/3.2.0/gems/public_suffix-5.0.4/lib/public_suffix/rule.rb delete mode 100644 bundle/ruby/3.2.0/gems/public_suffix-5.0.4/lib/public_suffix/version.rb delete mode 100644 bundle/ruby/3.2.0/gems/racc-1.7.3/COPYING delete mode 100644 bundle/ruby/3.2.0/gems/racc-1.7.3/ChangeLog delete mode 100644 bundle/ruby/3.2.0/gems/racc-1.7.3/README.ja.rdoc delete mode 100644 bundle/ruby/3.2.0/gems/racc-1.7.3/README.rdoc delete mode 100644 bundle/ruby/3.2.0/gems/racc-1.7.3/TODO delete mode 100755 bundle/ruby/3.2.0/gems/racc-1.7.3/bin/racc delete mode 100644 bundle/ruby/3.2.0/gems/racc-1.7.3/doc/en/grammar.en.rdoc delete mode 100644 bundle/ruby/3.2.0/gems/racc-1.7.3/doc/en/grammar2.en.rdoc delete mode 100644 bundle/ruby/3.2.0/gems/racc-1.7.3/doc/ja/command.ja.html delete mode 100644 bundle/ruby/3.2.0/gems/racc-1.7.3/doc/ja/debug.ja.rdoc delete mode 100644 bundle/ruby/3.2.0/gems/racc-1.7.3/doc/ja/grammar.ja.rdoc delete mode 100644 bundle/ruby/3.2.0/gems/racc-1.7.3/doc/ja/index.ja.html delete mode 100644 bundle/ruby/3.2.0/gems/racc-1.7.3/doc/ja/parser.ja.rdoc delete mode 100644 bundle/ruby/3.2.0/gems/racc-1.7.3/doc/ja/usage.ja.html delete mode 100644 bundle/ruby/3.2.0/gems/racc-1.7.3/ext/racc/cparse/Makefile delete mode 100644 bundle/ruby/3.2.0/gems/racc-1.7.3/ext/racc/cparse/cparse.c delete mode 100644 bundle/ruby/3.2.0/gems/racc-1.7.3/ext/racc/cparse/extconf.rb delete mode 100644 bundle/ruby/3.2.0/gems/racc-1.7.3/lib/racc.rb delete mode 100644 bundle/ruby/3.2.0/gems/racc-1.7.3/lib/racc/compat.rb delete mode 100755 bundle/ruby/3.2.0/gems/racc-1.7.3/lib/racc/cparse.so delete mode 100644 bundle/ruby/3.2.0/gems/racc-1.7.3/lib/racc/debugflags.rb delete mode 100644 bundle/ruby/3.2.0/gems/racc-1.7.3/lib/racc/exception.rb delete mode 100644 bundle/ruby/3.2.0/gems/racc-1.7.3/lib/racc/grammar.rb delete mode 100644 bundle/ruby/3.2.0/gems/racc-1.7.3/lib/racc/grammarfileparser.rb delete mode 100644 bundle/ruby/3.2.0/gems/racc-1.7.3/lib/racc/info.rb delete mode 100644 bundle/ruby/3.2.0/gems/racc-1.7.3/lib/racc/iset.rb delete mode 100644 bundle/ruby/3.2.0/gems/racc-1.7.3/lib/racc/logfilegenerator.rb delete mode 100644 bundle/ruby/3.2.0/gems/racc-1.7.3/lib/racc/parser-text.rb delete mode 100644 bundle/ruby/3.2.0/gems/racc-1.7.3/lib/racc/parser.rb delete mode 100644 bundle/ruby/3.2.0/gems/racc-1.7.3/lib/racc/parserfilegenerator.rb delete mode 100644 bundle/ruby/3.2.0/gems/racc-1.7.3/lib/racc/sourcetext.rb delete mode 100644 bundle/ruby/3.2.0/gems/racc-1.7.3/lib/racc/state.rb delete mode 100644 bundle/ruby/3.2.0/gems/racc-1.7.3/lib/racc/statetransitiontable.rb delete mode 100644 bundle/ruby/3.2.0/gems/racc-1.7.3/lib/racc/static.rb delete mode 100644 bundle/ruby/3.2.0/gems/rainbow-3.1.1/Changelog.md delete mode 100644 bundle/ruby/3.2.0/gems/rainbow-3.1.1/LICENSE delete mode 100644 bundle/ruby/3.2.0/gems/rainbow-3.1.1/README.markdown delete mode 100644 bundle/ruby/3.2.0/gems/rainbow-3.1.1/lib/rainbow.rb delete mode 100644 bundle/ruby/3.2.0/gems/rainbow-3.1.1/lib/rainbow/color.rb delete mode 100644 bundle/ruby/3.2.0/gems/rainbow-3.1.1/lib/rainbow/ext/string.rb delete mode 100644 bundle/ruby/3.2.0/gems/rainbow-3.1.1/lib/rainbow/global.rb delete mode 100644 bundle/ruby/3.2.0/gems/rainbow-3.1.1/lib/rainbow/null_presenter.rb delete mode 100644 bundle/ruby/3.2.0/gems/rainbow-3.1.1/lib/rainbow/presenter.rb delete mode 100644 bundle/ruby/3.2.0/gems/rainbow-3.1.1/lib/rainbow/refinement.rb delete mode 100644 bundle/ruby/3.2.0/gems/rainbow-3.1.1/lib/rainbow/string_utils.rb delete mode 100644 bundle/ruby/3.2.0/gems/rainbow-3.1.1/lib/rainbow/version.rb delete mode 100644 bundle/ruby/3.2.0/gems/rainbow-3.1.1/lib/rainbow/wrapper.rb delete mode 100644 bundle/ruby/3.2.0/gems/rainbow-3.1.1/lib/rainbow/x11_color_names.rb delete mode 100644 bundle/ruby/3.2.0/gems/rake-13.1.0/History.rdoc delete mode 100644 bundle/ruby/3.2.0/gems/rake-13.1.0/MIT-LICENSE delete mode 100644 bundle/ruby/3.2.0/gems/rake-13.1.0/README.rdoc delete mode 100644 bundle/ruby/3.2.0/gems/rake-13.1.0/doc/command_line_usage.rdoc delete mode 100644 bundle/ruby/3.2.0/gems/rake-13.1.0/doc/example/Rakefile1 delete mode 100644 bundle/ruby/3.2.0/gems/rake-13.1.0/doc/example/Rakefile2 delete mode 100644 bundle/ruby/3.2.0/gems/rake-13.1.0/doc/example/a.c delete mode 100644 bundle/ruby/3.2.0/gems/rake-13.1.0/doc/example/b.c delete mode 100644 bundle/ruby/3.2.0/gems/rake-13.1.0/doc/example/main.c delete mode 100644 bundle/ruby/3.2.0/gems/rake-13.1.0/doc/glossary.rdoc delete mode 100644 bundle/ruby/3.2.0/gems/rake-13.1.0/doc/jamis.rb delete mode 100644 bundle/ruby/3.2.0/gems/rake-13.1.0/doc/proto_rake.rdoc delete mode 100644 bundle/ruby/3.2.0/gems/rake-13.1.0/doc/rake.1 delete mode 100644 bundle/ruby/3.2.0/gems/rake-13.1.0/doc/rakefile.rdoc delete mode 100644 bundle/ruby/3.2.0/gems/rake-13.1.0/doc/rational.rdoc delete mode 100755 bundle/ruby/3.2.0/gems/rake-13.1.0/exe/rake delete mode 100644 bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake.rb delete mode 100644 bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/application.rb delete mode 100644 bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/backtrace.rb delete mode 100644 bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/clean.rb delete mode 100644 bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/cloneable.rb delete mode 100644 bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/cpu_counter.rb delete mode 100644 bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/default_loader.rb delete mode 100644 bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/dsl_definition.rb delete mode 100644 bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/early_time.rb delete mode 100644 bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/ext/core.rb delete mode 100644 bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/ext/string.rb delete mode 100644 bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/file_creation_task.rb delete mode 100644 bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/file_list.rb delete mode 100644 bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/file_task.rb delete mode 100644 bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/file_utils.rb delete mode 100644 bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/file_utils_ext.rb delete mode 100644 bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/invocation_chain.rb delete mode 100644 bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/invocation_exception_mixin.rb delete mode 100644 bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/late_time.rb delete mode 100644 bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/linked_list.rb delete mode 100644 bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/loaders/makefile.rb delete mode 100644 bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/multi_task.rb delete mode 100644 bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/name_space.rb delete mode 100644 bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/packagetask.rb delete mode 100644 bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/phony.rb delete mode 100644 bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/private_reader.rb delete mode 100644 bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/promise.rb delete mode 100644 bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/pseudo_status.rb delete mode 100644 bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/rake_module.rb delete mode 100644 bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/rake_test_loader.rb delete mode 100644 bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/rule_recursion_overflow_error.rb delete mode 100644 bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/scope.rb delete mode 100644 bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/task.rb delete mode 100644 bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/task_argument_error.rb delete mode 100644 bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/task_arguments.rb delete mode 100644 bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/task_manager.rb delete mode 100644 bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/tasklib.rb delete mode 100644 bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/testtask.rb delete mode 100644 bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/thread_history_display.rb delete mode 100644 bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/thread_pool.rb delete mode 100644 bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/trace_output.rb delete mode 100644 bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/version.rb delete mode 100644 bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/win32.rb delete mode 100644 bundle/ruby/3.2.0/gems/rake-13.1.0/rake.gemspec delete mode 100644 bundle/ruby/3.2.0/gems/rb-readline-0.5.5/CHANGES delete mode 100644 bundle/ruby/3.2.0/gems/rb-readline-0.5.5/LICENSE delete mode 100644 bundle/ruby/3.2.0/gems/rb-readline-0.5.5/README.md delete mode 100644 bundle/ruby/3.2.0/gems/rb-readline-0.5.5/Rakefile delete mode 100644 bundle/ruby/3.2.0/gems/rb-readline-0.5.5/bench/_rl_adjust_point.rb delete mode 100644 bundle/ruby/3.2.0/gems/rb-readline-0.5.5/examples/example_readline.rb delete mode 100644 bundle/ruby/3.2.0/gems/rb-readline-0.5.5/examples/example_readline_with_completion.rb delete mode 100644 bundle/ruby/3.2.0/gems/rb-readline-0.5.5/examples/tinyirb.rb delete mode 100644 bundle/ruby/3.2.0/gems/rb-readline-0.5.5/lib/rb-readline.rb delete mode 100644 bundle/ruby/3.2.0/gems/rb-readline-0.5.5/lib/rbreadline.rb delete mode 100644 bundle/ruby/3.2.0/gems/rb-readline-0.5.5/lib/rbreadline/version.rb delete mode 100644 bundle/ruby/3.2.0/gems/rb-readline-0.5.5/lib/readline.rb delete mode 100644 bundle/ruby/3.2.0/gems/rb-readline-0.5.5/rb-readline.gemspec delete mode 100644 bundle/ruby/3.2.0/gems/rb-readline-0.5.5/setup.rb delete mode 100644 bundle/ruby/3.2.0/gems/rb-readline-0.5.5/test/support/filesystem_completion_helper.rb delete mode 100644 bundle/ruby/3.2.0/gems/rb-readline-0.5.5/test/test_completion.rb delete mode 100644 bundle/ruby/3.2.0/gems/rb-readline-0.5.5/test/test_filename_completion_proc.rb delete mode 100644 bundle/ruby/3.2.0/gems/rb-readline-0.5.5/test/test_history.rb delete mode 100644 bundle/ruby/3.2.0/gems/rb-readline-0.5.5/test/test_rbreadline.rb delete mode 100644 bundle/ruby/3.2.0/gems/rb-readline-0.5.5/test/test_readline.rb delete mode 100644 bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet.rb delete mode 100644 bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/big5freq.rb delete mode 100644 bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/big5prober.rb delete mode 100644 bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/chardistribution.rb delete mode 100644 bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/charsetgroupprober.rb delete mode 100644 bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/charsetprober.rb delete mode 100644 bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/codingstatemachine.rb delete mode 100644 bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/constants.rb delete mode 100644 bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/escprober.rb delete mode 100644 bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/escsm.rb delete mode 100644 bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/eucjpprober.rb delete mode 100644 bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/euckrfreq.rb delete mode 100644 bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/euckrprober.rb delete mode 100644 bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/euctwfreq.rb delete mode 100644 bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/euctwprober.rb delete mode 100644 bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/gb18030freq.rb delete mode 100644 bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/gb18030prober.rb delete mode 100644 bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/hebrewprober.rb delete mode 100644 bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/jisfreq.rb delete mode 100644 bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/jpcntx.rb delete mode 100644 bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/langbulgarianmodel.rb delete mode 100644 bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/langcyrillicmodel.rb delete mode 100644 bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/langgreekmodel.rb delete mode 100644 bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/langhebrewmodel.rb delete mode 100644 bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/langhungarianmodel.rb delete mode 100644 bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/langthaimodel.rb delete mode 100644 bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/latin1prober.rb delete mode 100644 bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/mbcharsetprober.rb delete mode 100644 bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/mbcsgroupprober.rb delete mode 100644 bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/mbcssm.rb delete mode 100644 bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/sbcharsetprober.rb delete mode 100644 bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/sbcsgroupprober.rb delete mode 100644 bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/sjisprober.rb delete mode 100644 bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/universaldetector.rb delete mode 100644 bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/utf8prober.rb delete mode 100644 bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/version.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/Gemfile delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/LICENSE delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/Rakefile delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/error.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/base.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/classes/alternation.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/classes/anchor.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/classes/backreference.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/classes/character_set.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/classes/character_set/intersection.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/classes/character_set/range.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/classes/character_type.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/classes/conditional.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/classes/escape_sequence.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/classes/free_space.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/classes/group.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/classes/keep.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/classes/literal.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/classes/posix_class.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/classes/root.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/classes/unicode_property.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/methods/construct.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/methods/human_name.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/methods/match.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/methods/match_length.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/methods/negative.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/methods/options.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/methods/parts.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/methods/printing.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/methods/strfregexp.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/methods/tests.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/methods/traverse.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/quantifier.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/sequence.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/sequence_operation.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/shared.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/subexpression.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/lexer.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/parser.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/scanner.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/scanner/char_type.rl delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/scanner/errors/premature_end_error.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/scanner/errors/scanner_error.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/scanner/errors/validation_error.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/scanner/property.rl delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/scanner/scanner.rl delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/any.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/base.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/token.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/token/anchor.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/token/assertion.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/token/backreference.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/token/character_set.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/token/character_type.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/token/conditional.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/token/escape.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/token/group.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/token/keep.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/token/meta.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/token/posix_class.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/token/quantifier.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/token/unicode_property.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/token/virtual.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/version_lookup.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/versions.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/versions/1.8.6.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/versions/1.9.1.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/versions/1.9.3.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/versions/2.0.0.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/versions/2.2.0.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/versions/2.3.0.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/versions/2.4.0.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/versions/2.4.1.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/versions/2.5.0.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/versions/2.6.0.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/versions/2.6.2.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/versions/2.6.3.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/versions/3.1.0.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/versions/3.2.0.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/token.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/version.rb delete mode 100644 bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/regexp_parser.gemspec delete mode 100644 bundle/ruby/3.2.0/gems/rexml-3.2.6/LICENSE.txt delete mode 100644 bundle/ruby/3.2.0/gems/rexml-3.2.6/NEWS.md delete mode 100644 bundle/ruby/3.2.0/gems/rexml-3.2.6/README.md delete mode 100644 bundle/ruby/3.2.0/gems/rexml-3.2.6/doc/rexml/context.rdoc delete mode 100644 bundle/ruby/3.2.0/gems/rexml-3.2.6/doc/rexml/tasks/rdoc/child.rdoc delete mode 100644 bundle/ruby/3.2.0/gems/rexml-3.2.6/doc/rexml/tasks/rdoc/document.rdoc delete mode 100644 bundle/ruby/3.2.0/gems/rexml-3.2.6/doc/rexml/tasks/rdoc/element.rdoc delete mode 100644 bundle/ruby/3.2.0/gems/rexml-3.2.6/doc/rexml/tasks/rdoc/node.rdoc delete mode 100644 bundle/ruby/3.2.0/gems/rexml-3.2.6/doc/rexml/tasks/rdoc/parent.rdoc delete mode 100644 bundle/ruby/3.2.0/gems/rexml-3.2.6/doc/rexml/tasks/tocs/child_toc.rdoc delete mode 100644 bundle/ruby/3.2.0/gems/rexml-3.2.6/doc/rexml/tasks/tocs/document_toc.rdoc delete mode 100644 bundle/ruby/3.2.0/gems/rexml-3.2.6/doc/rexml/tasks/tocs/element_toc.rdoc delete mode 100644 bundle/ruby/3.2.0/gems/rexml-3.2.6/doc/rexml/tasks/tocs/master_toc.rdoc delete mode 100644 bundle/ruby/3.2.0/gems/rexml-3.2.6/doc/rexml/tasks/tocs/node_toc.rdoc delete mode 100644 bundle/ruby/3.2.0/gems/rexml-3.2.6/doc/rexml/tasks/tocs/parent_toc.rdoc delete mode 100644 bundle/ruby/3.2.0/gems/rexml-3.2.6/doc/rexml/tutorial.rdoc delete mode 100644 bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml.rb delete mode 100644 bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/attlistdecl.rb delete mode 100644 bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/attribute.rb delete mode 100644 bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/cdata.rb delete mode 100644 bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/child.rb delete mode 100644 bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/comment.rb delete mode 100644 bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/doctype.rb delete mode 100644 bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/document.rb delete mode 100644 bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/dtd/attlistdecl.rb delete mode 100644 bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/dtd/dtd.rb delete mode 100644 bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/dtd/elementdecl.rb delete mode 100644 bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/dtd/entitydecl.rb delete mode 100644 bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/dtd/notationdecl.rb delete mode 100644 bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/element.rb delete mode 100644 bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/encoding.rb delete mode 100644 bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/entity.rb delete mode 100644 bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/formatters/default.rb delete mode 100644 bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/formatters/pretty.rb delete mode 100644 bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/formatters/transitive.rb delete mode 100644 bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/functions.rb delete mode 100644 bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/instruction.rb delete mode 100644 bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/light/node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/namespace.rb delete mode 100644 bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/output.rb delete mode 100644 bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/parent.rb delete mode 100644 bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/parseexception.rb delete mode 100644 bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/parsers/baseparser.rb delete mode 100644 bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/parsers/lightparser.rb delete mode 100644 bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/parsers/pullparser.rb delete mode 100644 bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/parsers/sax2parser.rb delete mode 100644 bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/parsers/streamparser.rb delete mode 100644 bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/parsers/treeparser.rb delete mode 100644 bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/parsers/ultralightparser.rb delete mode 100644 bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/parsers/xpathparser.rb delete mode 100644 bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/quickpath.rb delete mode 100644 bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/rexml.rb delete mode 100644 bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/sax2listener.rb delete mode 100644 bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/security.rb delete mode 100644 bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/source.rb delete mode 100644 bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/streamlistener.rb delete mode 100644 bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/text.rb delete mode 100644 bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/undefinednamespaceexception.rb delete mode 100644 bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/validation/relaxng.rb delete mode 100644 bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/validation/validation.rb delete mode 100644 bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/validation/validationexception.rb delete mode 100644 bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/xmldecl.rb delete mode 100644 bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/xmltokens.rb delete mode 100644 bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/xpath.rb delete mode 100644 bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/xpath_parser.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/LICENSE.txt delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/README.md delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/assets/logo.png delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/assets/output.css.erb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/assets/output.html.erb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/config/default.yml delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/config/obsoletion.yml delete mode 100755 bundle/ruby/3.2.0/gems/rubocop-1.61.0/exe/rubocop delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/arguments_env.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/arguments_file.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/ast_aliases.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cache_config.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cached_data.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cli.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cli/command.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cli/command/auto_generate_config.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cli/command/base.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cli/command/execute_runner.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cli/command/init_dotfile.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cli/command/lsp.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cli/command/show_cops.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cli/command/show_docs_url.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cli/command/suggest_extensions.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cli/command/version.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cli/environment.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/comment_config.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/config.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/config_finder.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/config_loader.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/config_loader_resolver.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/config_obsoletion.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/config_obsoletion/changed_enforced_styles.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/config_obsoletion/changed_parameter.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/config_obsoletion/cop_rule.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/config_obsoletion/extracted_cop.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/config_obsoletion/parameter_rule.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/config_obsoletion/removed_cop.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/config_obsoletion/renamed_cop.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/config_obsoletion/rule.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/config_obsoletion/split_cop.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/config_regeneration.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/config_store.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/config_validator.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/autocorrect_logic.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/badge.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/base.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/bundler/duplicated_gem.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/bundler/duplicated_group.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/bundler/gem_comment.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/bundler/gem_filename.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/bundler/gem_version.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/bundler/insecure_protocol_source.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/bundler/ordered_gems.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/commissioner.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/cop.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/corrector.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/correctors/alignment_corrector.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/correctors/condition_corrector.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/correctors/each_to_for_corrector.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/correctors/empty_line_corrector.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/correctors/for_to_each_corrector.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/correctors/if_then_corrector.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/correctors/line_break_corrector.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/correctors/ordered_gem_corrector.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/correctors/parentheses_corrector.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/correctors/percent_literal_corrector.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/correctors/punctuation_corrector.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/correctors/require_library_corrector.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/correctors/space_corrector.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/correctors/string_literal_corrector.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/correctors/unused_arg_corrector.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/documentation.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/exclude_limit.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/force.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/gemspec/dependency_version.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/gemspec/deprecated_attribute_assignment.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/gemspec/development_dependencies.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/gemspec/duplicated_assignment.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/gemspec/ordered_dependencies.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/gemspec/require_mfa.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/gemspec/required_ruby_version.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/generator.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/generator/configuration_injector.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/generator/require_file_injector.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/ignored_node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/cop_description.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/create_empty_file.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/empty_line_between_expect_offense_and_correction.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/example_description.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/example_heredoc_delimiter.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/inherit_deprecated_cop_class.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/lambda_or_proc.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/location_expression.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/location_line_equality_comparison.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/method_name_end_with.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/method_name_equal.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/node_destructuring.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/node_first_or_last_argument.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/node_matcher_directive.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/node_type_predicate.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/numblock_handler.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/processed_source_buffer_name.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/redundant_context_config_parameter.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/redundant_described_class_as_subject.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/redundant_expect_offense_arguments.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/redundant_let_rubocop_config_new.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/redundant_location_argument.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/redundant_method_dispatch_node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/redundant_source_range.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/single_line_comparison.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/style_detected_api_use.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/undefined_config.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/useless_restrict_on_send.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/access_modifier_indentation.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/argument_alignment.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/array_alignment.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/assignment_indentation.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/begin_end_alignment.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/block_alignment.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/block_end_newline.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/case_indentation.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/class_structure.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/closing_heredoc_indentation.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/closing_parenthesis_indentation.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/comment_indentation.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/condition_position.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/def_end_alignment.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/dot_position.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/else_alignment.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/empty_comment.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/empty_line_after_guard_clause.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/empty_line_after_magic_comment.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/empty_line_after_multiline_condition.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/empty_line_between_defs.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/empty_lines.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/empty_lines_around_access_modifier.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/empty_lines_around_arguments.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/empty_lines_around_attribute_accessor.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/empty_lines_around_begin_body.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/empty_lines_around_block_body.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/empty_lines_around_class_body.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/empty_lines_around_exception_handling_keywords.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/empty_lines_around_method_body.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/empty_lines_around_module_body.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/end_alignment.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/end_of_line.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/extra_spacing.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/first_argument_indentation.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/first_array_element_indentation.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/first_array_element_line_break.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/first_hash_element_indentation.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/first_hash_element_line_break.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/first_method_argument_line_break.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/first_method_parameter_line_break.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/first_parameter_indentation.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/hash_alignment.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/heredoc_argument_closing_parenthesis.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/heredoc_indentation.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/indentation_consistency.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/indentation_style.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/indentation_width.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/initial_indentation.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/leading_comment_space.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/leading_empty_lines.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/line_continuation_leading_space.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/line_continuation_spacing.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/line_end_string_concatenation_indentation.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/line_length.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/multiline_array_brace_layout.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/multiline_array_line_breaks.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/multiline_assignment_layout.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/multiline_block_layout.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/multiline_hash_brace_layout.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/multiline_hash_key_line_breaks.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/multiline_method_argument_line_breaks.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/multiline_method_call_brace_layout.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/multiline_method_call_indentation.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/multiline_method_definition_brace_layout.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/multiline_method_parameter_line_breaks.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/multiline_operation_indentation.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/parameter_alignment.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/redundant_line_break.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/rescue_ensure_alignment.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/single_line_block_chain.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/space_after_colon.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/space_after_comma.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/space_after_method_name.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/space_after_not.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/space_after_semicolon.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/space_around_block_parameters.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/space_around_equals_in_parameter_default.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/space_around_keyword.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/space_around_method_call_operator.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/space_around_operators.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/space_before_block_braces.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/space_before_brackets.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/space_before_comma.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/space_before_comment.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/space_before_first_arg.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/space_before_semicolon.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/space_in_lambda_literal.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/space_inside_array_literal_brackets.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/space_inside_array_percent_literal.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/space_inside_block_braces.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/space_inside_hash_literal_braces.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/space_inside_parens.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/space_inside_percent_literal_delimiters.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/space_inside_range_literal.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/space_inside_reference_brackets.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/space_inside_string_interpolation.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/trailing_empty_lines.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/trailing_whitespace.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/legacy/corrections_proxy.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/legacy/corrector.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/ambiguous_assignment.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/ambiguous_block_association.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/ambiguous_operator.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/ambiguous_operator_precedence.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/ambiguous_range.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/ambiguous_regexp_literal.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/assignment_in_condition.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/big_decimal_new.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/binary_operator_with_identical_operands.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/boolean_symbol.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/circular_argument_reference.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/constant_definition_in_block.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/constant_overwritten_in_rescue.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/constant_resolution.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/debugger.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/deprecated_class_methods.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/deprecated_constants.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/deprecated_open_ssl_constant.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/disjunctive_assignment_in_constructor.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/duplicate_branch.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/duplicate_case_condition.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/duplicate_elsif_condition.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/duplicate_hash_key.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/duplicate_magic_comment.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/duplicate_match_pattern.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/duplicate_methods.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/duplicate_regexp_character_class_element.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/duplicate_require.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/duplicate_rescue_exception.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/each_with_object_argument.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/else_layout.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/empty_block.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/empty_class.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/empty_conditional_body.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/empty_ensure.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/empty_expression.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/empty_file.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/empty_in_pattern.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/empty_interpolation.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/empty_when.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/ensure_return.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/erb_new_arguments.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/flip_flop.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/float_comparison.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/float_out_of_range.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/format_parameter_mismatch.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/hash_compare_by_identity.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/heredoc_method_call_position.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/identity_comparison.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/implicit_string_concatenation.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/incompatible_io_select_with_fiber_scheduler.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/ineffective_access_modifier.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/inherit_exception.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/interpolation_check.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/it_without_arguments_in_block.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/lambda_without_literal_block.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/literal_as_condition.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/literal_assignment_in_condition.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/literal_in_interpolation.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/loop.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/missing_cop_enable_directive.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/missing_super.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/mixed_case_range.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/mixed_regexp_capture_types.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/multiple_comparison.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/nested_method_definition.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/nested_percent_literal.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/next_without_accumulator.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/no_return_in_begin_end_blocks.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/non_atomic_file_operation.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/non_deterministic_require_order.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/non_local_exit_from_iterator.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/number_conversion.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/numbered_parameter_assignment.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/or_assignment_to_constant.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/ordered_magic_comments.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/parentheses_as_grouped_expression.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/percent_string_array.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/percent_symbol_array.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/raise_exception.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/rand_one.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/redundant_cop_disable_directive.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/redundant_cop_enable_directive.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/redundant_dir_glob_sort.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/redundant_regexp_quantifiers.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/redundant_require_statement.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/redundant_safe_navigation.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/redundant_splat_expansion.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/redundant_string_coercion.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/redundant_with_index.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/redundant_with_object.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/refinement_import_methods.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/regexp_as_condition.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/require_parentheses.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/require_range_parentheses.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/require_relative_self_path.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/rescue_exception.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/rescue_type.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/return_in_void_context.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/safe_navigation_chain.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/safe_navigation_consistency.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/safe_navigation_with_empty.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/script_permission.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/self_assignment.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/send_with_mixin_argument.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/shadowed_argument.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/shadowed_exception.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/shadowing_outer_local_variable.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/struct_new_override.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/suppressed_exception.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/symbol_conversion.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/syntax.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/to_enum_arguments.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/to_json.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/top_level_return_with_argument.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/trailing_comma_in_attribute_declaration.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/triple_quotes.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/underscore_prefixed_variable_name.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/unexpected_block_arity.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/unified_integer.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/unmodified_reduce_accumulator.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/unreachable_code.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/unreachable_loop.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/unused_block_argument.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/unused_method_argument.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/uri_escape_unescape.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/uri_regexp.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/useless_access_modifier.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/useless_assignment.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/useless_else_without_rescue.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/useless_method_definition.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/useless_rescue.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/useless_ruby2_keywords.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/useless_setter_call.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/useless_times.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/lint/void.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/message_annotator.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/metrics/abc_size.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/metrics/block_length.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/metrics/block_nesting.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/metrics/class_length.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/metrics/collection_literal_length.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/metrics/cyclomatic_complexity.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/metrics/method_length.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/metrics/module_length.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/metrics/parameter_lists.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/metrics/perceived_complexity.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/metrics/utils/abc_size_calculator.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/metrics/utils/code_length_calculator.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/metrics/utils/iterating_block.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/metrics/utils/repeated_attribute_discount.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/metrics/utils/repeated_csend_discount.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/migration/department_name.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/alignment.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/allowed_identifiers.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/allowed_methods.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/allowed_pattern.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/allowed_receivers.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/annotation_comment.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/array_min_size.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/array_syntax.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/auto_corrector.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/check_assignment.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/check_line_breakable.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/code_length.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/comments_help.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/configurable_enforced_style.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/configurable_formatting.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/configurable_max.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/configurable_naming.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/configurable_numbering.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/def_node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/documentation_comment.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/duplication.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/empty_lines_around_body.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/empty_parameter.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/end_keyword_alignment.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/enforce_superclass.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/first_element_line_break.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/frozen_string_literal.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/gem_declaration.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/gemspec_help.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/hash_alignment_styles.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/hash_shorthand_syntax.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/hash_transform_method.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/heredoc.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/integer_node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/interpolation.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/line_length_help.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/match_range.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/method_complexity.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/method_preference.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/min_body_length.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/min_branches_count.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/multiline_element_indentation.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/multiline_element_line_breaks.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/multiline_expression_indentation.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/multiline_literal_brace_layout.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/negative_conditional.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/nil_methods.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/on_normal_if_unless.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/ordered_gem_node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/parentheses.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/percent_array.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/percent_literal.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/preceding_following_alignment.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/preferred_delimiters.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/range_help.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/rational_literal.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/require_library.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/rescue_node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/safe_assignment.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/space_after_punctuation.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/space_before_punctuation.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/statement_modifier.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/string_help.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/string_literals_help.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/surrounding_space.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/symbol_help.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/target_ruby_version.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/trailing_body.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/trailing_comma.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/uncommunicative_name.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/unused_argument.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/mixin/visibility_help.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/naming/accessor_method_name.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/naming/ascii_identifiers.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/naming/binary_operator_parameter_name.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/naming/block_forwarding.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/naming/block_parameter_name.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/naming/class_and_module_camel_case.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/naming/constant_name.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/naming/file_name.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/naming/heredoc_delimiter_case.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/naming/heredoc_delimiter_naming.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/naming/inclusive_language.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/naming/memoized_instance_variable_name.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/naming/method_name.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/naming/method_parameter_name.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/naming/predicate_name.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/naming/rescued_exceptions_variable_name.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/naming/variable_name.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/naming/variable_number.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/offense.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/registry.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/security/compound_hash.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/security/eval.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/security/io_methods.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/security/json_load.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/security/marshal_load.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/security/open.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/security/yaml_load.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/severity.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/access_modifier_declarations.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/accessor_grouping.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/alias.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/and_or.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/arguments_forwarding.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/array_coercion.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/array_first_last.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/array_intersect.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/array_join.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/ascii_comments.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/attr.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/auto_resource_cleanup.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/bare_percent_literals.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/begin_block.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/bisected_attr_accessor.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/bisected_attr_accessor/macro.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/block_comments.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/block_delimiters.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/case_equality.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/case_like_if.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/character_literal.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/class_and_module_children.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/class_check.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/class_equality_comparison.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/class_methods.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/class_methods_definitions.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/class_vars.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/collection_compact.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/collection_methods.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/colon_method_call.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/colon_method_definition.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/combinable_loops.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/command_literal.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/comment_annotation.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/commented_keyword.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/comparable_clamp.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/concat_array_literals.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/conditional_assignment.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/constant_visibility.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/copyright.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/data_inheritance.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/date_time.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/def_with_parentheses.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/dir.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/dir_empty.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/disable_cops_within_source_code_directive.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/document_dynamic_eval_definition.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/documentation.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/documentation_method.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/double_cop_disable_directive.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/double_negation.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/each_for_simple_loop.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/each_with_object.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/empty_block_parameter.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/empty_case_condition.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/empty_else.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/empty_heredoc.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/empty_lambda_parameter.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/empty_literal.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/empty_method.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/encoding.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/end_block.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/endless_method.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/env_home.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/eval_with_location.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/even_odd.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/exact_regexp_match.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/expand_path_arguments.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/explicit_block_argument.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/exponential_notation.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/fetch_env_var.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/file_empty.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/file_read.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/file_write.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/float_division.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/for.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/format_string.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/format_string_token.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/frozen_string_literal_comment.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/global_std_stream.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/global_vars.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/guard_clause.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/hash_as_last_array_item.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/hash_conversion.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/hash_each_methods.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/hash_except.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/hash_like_case.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/hash_syntax.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/hash_transform_keys.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/hash_transform_values.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/identical_conditional_branches.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/if_inside_else.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/if_unless_modifier.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/if_unless_modifier_of_if_unless.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/if_with_boolean_literal_branches.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/if_with_semicolon.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/implicit_runtime_error.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/in_pattern_then.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/infinite_loop.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/inline_comment.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/inverse_methods.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/invertible_unless_condition.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/ip_addresses.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/keyword_parameters_order.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/lambda.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/lambda_call.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/line_end_concatenation.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/magic_comment_format.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/map_compact_with_conditional_block.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/map_to_hash.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/map_to_set.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/method_call_with_args_parentheses.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/method_call_with_args_parentheses/omit_parentheses.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/method_call_with_args_parentheses/require_parentheses.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/method_call_without_args_parentheses.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/method_called_on_do_end_block.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/method_def_parentheses.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/min_max.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/min_max_comparison.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/missing_else.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/missing_respond_to_missing.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/mixin_grouping.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/mixin_usage.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/module_function.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/multiline_block_chain.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/multiline_if_modifier.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/multiline_if_then.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/multiline_in_pattern_then.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/multiline_memoization.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/multiline_method_signature.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/multiline_ternary_operator.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/multiline_when_then.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/multiple_comparison.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/mutable_constant.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/negated_if.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/negated_if_else_condition.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/negated_unless.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/negated_while.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/nested_file_dirname.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/nested_modifier.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/nested_parenthesized_calls.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/nested_ternary_operator.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/next.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/nil_comparison.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/nil_lambda.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/non_nil_check.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/not.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/numbered_parameters.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/numbered_parameters_limit.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/numeric_literal_prefix.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/numeric_literals.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/numeric_predicate.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/object_then.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/one_line_conditional.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/open_struct_use.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/operator_method_call.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/option_hash.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/optional_arguments.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/optional_boolean_parameter.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/or_assignment.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/parallel_assignment.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/parentheses_around_condition.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/percent_literal_delimiters.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/percent_q_literals.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/perl_backrefs.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/preferred_hash_methods.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/proc.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/quoted_symbols.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/raise_args.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/random_with_offset.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/redundant_argument.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/redundant_array_constructor.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/redundant_assignment.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/redundant_begin.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/redundant_capital_w.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/redundant_condition.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/redundant_conditional.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/redundant_constant_base.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/redundant_current_directory_in_path.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/redundant_double_splat_hash_braces.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/redundant_each.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/redundant_exception.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/redundant_fetch_block.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/redundant_file_extension_in_require.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/redundant_filter_chain.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/redundant_freeze.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/redundant_heredoc_delimiter_quotes.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/redundant_initialize.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/redundant_interpolation.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/redundant_line_continuation.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/redundant_parentheses.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/redundant_percent_q.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/redundant_regexp_argument.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/redundant_regexp_character_class.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/redundant_regexp_constructor.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/redundant_regexp_escape.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/redundant_return.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/redundant_self.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/redundant_self_assignment.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/redundant_self_assignment_branch.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/redundant_sort.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/redundant_sort_by.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/redundant_string_escape.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/regexp_literal.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/require_order.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/rescue_modifier.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/rescue_standard_error.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/return_nil.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/return_nil_in_predicate_method_definition.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/safe_navigation.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/sample.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/select_by_regexp.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/self_assignment.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/semicolon.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/send.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/signal_exception.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/single_argument_dig.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/single_line_block_params.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/single_line_do_end_block.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/single_line_methods.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/slicing_with_range.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/sole_nested_conditional.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/special_global_vars.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/stabby_lambda_parentheses.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/static_class.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/stderr_puts.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/string_chars.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/string_concatenation.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/string_hash_keys.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/string_literals.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/string_literals_in_interpolation.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/string_methods.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/strip.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/struct_inheritance.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/super_with_args_parentheses.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/swap_values.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/symbol_array.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/symbol_literal.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/symbol_proc.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/ternary_parentheses.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/top_level_method_definition.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/trailing_body_on_class.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/trailing_body_on_method_definition.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/trailing_body_on_module.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/trailing_comma_in_arguments.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/trailing_comma_in_array_literal.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/trailing_comma_in_block_args.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/trailing_comma_in_hash_literal.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/trailing_method_end_statement.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/trailing_underscore_variable.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/trivial_accessors.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/unless_else.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/unless_logical_operators.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/unpack_first.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/variable_interpolation.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/when_then.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/while_until_do.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/while_until_modifier.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/word_array.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/yaml_file_read.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/yoda_condition.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/yoda_expression.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/style/zero_length_predicate.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/team.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/util.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/utils/format_string.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/utils/regexp_ranges.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/variable_force.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/variable_force/assignment.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/variable_force/branch.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/variable_force/branchable.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/variable_force/reference.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/variable_force/scope.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/variable_force/variable.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/variable_force/variable_table.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cops_documentation_generator.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/core_ext/string.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/directive_comment.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/error.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/ext/comment.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/ext/processed_source.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/ext/range.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/ext/regexp_node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/ext/regexp_parser.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/feature_loader.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/file_finder.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/file_patterns.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/formatter.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/formatter/auto_gen_config_formatter.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/formatter/base_formatter.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/formatter/clang_style_formatter.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/formatter/colorizable.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/formatter/disabled_config_formatter.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/formatter/emacs_style_formatter.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/formatter/file_list_formatter.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/formatter/formatter_set.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/formatter/fuubar_style_formatter.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/formatter/github_actions_formatter.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/formatter/html_formatter.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/formatter/json_formatter.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/formatter/junit_formatter.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/formatter/markdown_formatter.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/formatter/offense_count_formatter.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/formatter/pacman_formatter.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/formatter/progress_formatter.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/formatter/quiet_formatter.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/formatter/simple_text_formatter.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/formatter/tap_formatter.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/formatter/text_util.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/formatter/worst_offenders_formatter.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/lockfile.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/lsp.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/lsp/logger.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/lsp/routes.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/lsp/runtime.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/lsp/server.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/lsp/severity.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/magic_comment.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/name_similarity.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/options.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/path_util.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/platform.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/rake_task.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/remote_config.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/result_cache.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/rspec/cop_helper.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/rspec/expect_offense.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/rspec/host_environment_simulation_helper.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/rspec/parallel_formatter.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/rspec/shared_contexts.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/rspec/support.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/runner.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/server.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/server/cache.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/server/cli.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/server/client_command.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/server/client_command/base.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/server/client_command/exec.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/server/client_command/restart.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/server/client_command/start.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/server/client_command/status.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/server/client_command/stop.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/server/core.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/server/errors.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/server/helper.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/server/server_command.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/server/server_command/base.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/server/server_command/exec.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/server/server_command/stop.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/server/socket_reader.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/string_interpreter.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/target_finder.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/target_ruby.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/util.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/version.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/warning.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/yaml_duplication_checker.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/LICENSE.txt delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/README.md delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop-ast.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/builder.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/ext/range.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/ext/range_min_max.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node/alias_node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node/and_asgn_node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node/and_node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node/arg_node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node/args_node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node/array_node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node/asgn_node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node/block_node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node/break_node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node/case_match_node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node/case_node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node/casgn_node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node/class_node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node/const_node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node/csend_node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node/def_node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node/defined_node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node/dstr_node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node/ensure_node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node/float_node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node/for_node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node/forward_args_node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node/hash_node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node/if_node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node/in_pattern_node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node/index_node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node/indexasgn_node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node/int_node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node/keyword_splat_node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node/lambda_node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node/mixin/basic_literal_node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node/mixin/binary_operator_node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node/mixin/collection_node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node/mixin/conditional_node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node/mixin/descendence.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node/mixin/hash_element_node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node/mixin/method_dispatch_node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node/mixin/method_identifier_predicates.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node/mixin/modifier_node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node/mixin/numeric_node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node/mixin/parameterized_node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node/mixin/predicate_operator_node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node/module_node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node/next_node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node/op_asgn_node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node/or_asgn_node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node/or_node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node/pair_node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node/procarg0_node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node/range_node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node/regexp_node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node/resbody_node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node/rescue_node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node/return_node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node/self_class_node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node/send_node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node/str_node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node/super_node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node/symbol_node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node/until_node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node/when_node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node/while_node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node/yield_node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node_pattern.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node_pattern/builder.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node_pattern/comment.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node_pattern/compiler.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node_pattern/compiler/atom_subcompiler.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node_pattern/compiler/binding.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node_pattern/compiler/debug.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node_pattern/compiler/node_pattern_subcompiler.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node_pattern/compiler/sequence_subcompiler.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node_pattern/compiler/subcompiler.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node_pattern/lexer.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node_pattern/lexer.rex delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node_pattern/lexer.rex.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node_pattern/method_definer.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node_pattern/node.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node_pattern/parser.racc.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node_pattern/parser.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node_pattern/parser.y delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node_pattern/sets.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/node_pattern/with_meta.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/processed_source.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/rubocop_compatibility.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/sexp.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/token.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/traversal.rb delete mode 100644 bundle/ruby/3.2.0/gems/rubocop-ast-1.31.1/lib/rubocop/ast/version.rb delete mode 100644 bundle/ruby/3.2.0/gems/ruby-progressbar-1.13.0/LICENSE.txt delete mode 100644 bundle/ruby/3.2.0/gems/ruby-progressbar-1.13.0/README.md delete mode 100755 bundle/ruby/3.2.0/gems/ruby-progressbar-1.13.0/Rakefile delete mode 100644 bundle/ruby/3.2.0/gems/ruby-progressbar-1.13.0/lib/ruby-progressbar.rb delete mode 100644 bundle/ruby/3.2.0/gems/ruby-progressbar-1.13.0/lib/ruby-progressbar/base.rb delete mode 100644 bundle/ruby/3.2.0/gems/ruby-progressbar-1.13.0/lib/ruby-progressbar/calculators/length.rb delete mode 100644 bundle/ruby/3.2.0/gems/ruby-progressbar-1.13.0/lib/ruby-progressbar/components/bar.rb delete mode 100644 bundle/ruby/3.2.0/gems/ruby-progressbar-1.13.0/lib/ruby-progressbar/components/percentage.rb delete mode 100644 bundle/ruby/3.2.0/gems/ruby-progressbar-1.13.0/lib/ruby-progressbar/components/rate.rb delete mode 100644 bundle/ruby/3.2.0/gems/ruby-progressbar-1.13.0/lib/ruby-progressbar/components/time.rb delete mode 100644 bundle/ruby/3.2.0/gems/ruby-progressbar-1.13.0/lib/ruby-progressbar/components/title.rb delete mode 100644 bundle/ruby/3.2.0/gems/ruby-progressbar-1.13.0/lib/ruby-progressbar/errors/invalid_progress_error.rb delete mode 100644 bundle/ruby/3.2.0/gems/ruby-progressbar-1.13.0/lib/ruby-progressbar/format/formatter.rb delete mode 100644 bundle/ruby/3.2.0/gems/ruby-progressbar-1.13.0/lib/ruby-progressbar/format/molecule.rb delete mode 100644 bundle/ruby/3.2.0/gems/ruby-progressbar-1.13.0/lib/ruby-progressbar/format/string.rb delete mode 100644 bundle/ruby/3.2.0/gems/ruby-progressbar-1.13.0/lib/ruby-progressbar/output.rb delete mode 100644 bundle/ruby/3.2.0/gems/ruby-progressbar-1.13.0/lib/ruby-progressbar/outputs/non_tty.rb delete mode 100644 bundle/ruby/3.2.0/gems/ruby-progressbar-1.13.0/lib/ruby-progressbar/outputs/null.rb delete mode 100644 bundle/ruby/3.2.0/gems/ruby-progressbar-1.13.0/lib/ruby-progressbar/outputs/tty.rb delete mode 100644 bundle/ruby/3.2.0/gems/ruby-progressbar-1.13.0/lib/ruby-progressbar/progress.rb delete mode 100644 bundle/ruby/3.2.0/gems/ruby-progressbar-1.13.0/lib/ruby-progressbar/projector.rb delete mode 100644 bundle/ruby/3.2.0/gems/ruby-progressbar-1.13.0/lib/ruby-progressbar/projectors/smoothed_average.rb delete mode 100644 bundle/ruby/3.2.0/gems/ruby-progressbar-1.13.0/lib/ruby-progressbar/refinements.rb delete mode 100644 bundle/ruby/3.2.0/gems/ruby-progressbar-1.13.0/lib/ruby-progressbar/refinements/progress_enumerator.rb delete mode 100644 bundle/ruby/3.2.0/gems/ruby-progressbar-1.13.0/lib/ruby-progressbar/throttle.rb delete mode 100644 bundle/ruby/3.2.0/gems/ruby-progressbar-1.13.0/lib/ruby-progressbar/time.rb delete mode 100644 bundle/ruby/3.2.0/gems/ruby-progressbar-1.13.0/lib/ruby-progressbar/timer.rb delete mode 100644 bundle/ruby/3.2.0/gems/ruby-progressbar-1.13.0/lib/ruby-progressbar/version.rb delete mode 100644 bundle/ruby/3.2.0/gems/sawyer-0.9.2/Gemfile delete mode 100644 bundle/ruby/3.2.0/gems/sawyer-0.9.2/LICENSE.md delete mode 100644 bundle/ruby/3.2.0/gems/sawyer-0.9.2/README.md delete mode 100644 bundle/ruby/3.2.0/gems/sawyer-0.9.2/Rakefile delete mode 100644 bundle/ruby/3.2.0/gems/sawyer-0.9.2/lib/sawyer.rb delete mode 100644 bundle/ruby/3.2.0/gems/sawyer-0.9.2/lib/sawyer/agent.rb delete mode 100644 bundle/ruby/3.2.0/gems/sawyer-0.9.2/lib/sawyer/link_parsers/hal.rb delete mode 100644 bundle/ruby/3.2.0/gems/sawyer-0.9.2/lib/sawyer/link_parsers/simple.rb delete mode 100644 bundle/ruby/3.2.0/gems/sawyer-0.9.2/lib/sawyer/relation.rb delete mode 100644 bundle/ruby/3.2.0/gems/sawyer-0.9.2/lib/sawyer/resource.rb delete mode 100644 bundle/ruby/3.2.0/gems/sawyer-0.9.2/lib/sawyer/response.rb delete mode 100644 bundle/ruby/3.2.0/gems/sawyer-0.9.2/lib/sawyer/serializer.rb delete mode 100644 bundle/ruby/3.2.0/gems/sawyer-0.9.2/sawyer.gemspec delete mode 100755 bundle/ruby/3.2.0/gems/sawyer-0.9.2/script/bootstrap delete mode 100755 bundle/ruby/3.2.0/gems/sawyer-0.9.2/script/console delete mode 100755 bundle/ruby/3.2.0/gems/sawyer-0.9.2/script/package delete mode 100755 bundle/ruby/3.2.0/gems/sawyer-0.9.2/script/release delete mode 100755 bundle/ruby/3.2.0/gems/sawyer-0.9.2/script/test delete mode 100644 bundle/ruby/3.2.0/gems/terminal-table-3.0.2/.github/workflows/ci.yml delete mode 100644 bundle/ruby/3.2.0/gems/terminal-table-3.0.2/.gitignore delete mode 100644 bundle/ruby/3.2.0/gems/terminal-table-3.0.2/Gemfile delete mode 100644 bundle/ruby/3.2.0/gems/terminal-table-3.0.2/History.rdoc delete mode 100644 bundle/ruby/3.2.0/gems/terminal-table-3.0.2/LICENSE.txt delete mode 100644 bundle/ruby/3.2.0/gems/terminal-table-3.0.2/Manifest delete mode 100644 bundle/ruby/3.2.0/gems/terminal-table-3.0.2/README.md delete mode 100644 bundle/ruby/3.2.0/gems/terminal-table-3.0.2/Rakefile delete mode 100644 bundle/ruby/3.2.0/gems/terminal-table-3.0.2/Todo.rdoc delete mode 100755 bundle/ruby/3.2.0/gems/terminal-table-3.0.2/examples/examples.rb delete mode 100755 bundle/ruby/3.2.0/gems/terminal-table-3.0.2/examples/examples_unicode.rb delete mode 100755 bundle/ruby/3.2.0/gems/terminal-table-3.0.2/examples/issue100.rb delete mode 100755 bundle/ruby/3.2.0/gems/terminal-table-3.0.2/examples/issue111.rb delete mode 100755 bundle/ruby/3.2.0/gems/terminal-table-3.0.2/examples/issue118.rb delete mode 100755 bundle/ruby/3.2.0/gems/terminal-table-3.0.2/examples/issue95.rb delete mode 100755 bundle/ruby/3.2.0/gems/terminal-table-3.0.2/examples/show_csv_table.rb delete mode 100755 bundle/ruby/3.2.0/gems/terminal-table-3.0.2/examples/strong_separator.rb delete mode 100644 bundle/ruby/3.2.0/gems/terminal-table-3.0.2/lib/terminal-table.rb delete mode 100644 bundle/ruby/3.2.0/gems/terminal-table-3.0.2/lib/terminal-table/cell.rb delete mode 100644 bundle/ruby/3.2.0/gems/terminal-table-3.0.2/lib/terminal-table/import.rb delete mode 100644 bundle/ruby/3.2.0/gems/terminal-table-3.0.2/lib/terminal-table/row.rb delete mode 100644 bundle/ruby/3.2.0/gems/terminal-table-3.0.2/lib/terminal-table/separator.rb delete mode 100644 bundle/ruby/3.2.0/gems/terminal-table-3.0.2/lib/terminal-table/style.rb delete mode 100644 bundle/ruby/3.2.0/gems/terminal-table-3.0.2/lib/terminal-table/table.rb delete mode 100644 bundle/ruby/3.2.0/gems/terminal-table-3.0.2/lib/terminal-table/table_helper.rb delete mode 100644 bundle/ruby/3.2.0/gems/terminal-table-3.0.2/lib/terminal-table/util.rb delete mode 100644 bundle/ruby/3.2.0/gems/terminal-table-3.0.2/lib/terminal-table/version.rb delete mode 100644 bundle/ruby/3.2.0/gems/terminal-table-3.0.2/terminal-table.gemspec delete mode 100644 bundle/ruby/3.2.0/gems/tomlrb-2.0.3/LICENSE.txt delete mode 100644 bundle/ruby/3.2.0/gems/tomlrb-2.0.3/lib/tomlrb.rb delete mode 100644 bundle/ruby/3.2.0/gems/tomlrb-2.0.3/lib/tomlrb/generated_parser.rb delete mode 100644 bundle/ruby/3.2.0/gems/tomlrb-2.0.3/lib/tomlrb/handler.rb delete mode 100644 bundle/ruby/3.2.0/gems/tomlrb-2.0.3/lib/tomlrb/local_date.rb delete mode 100644 bundle/ruby/3.2.0/gems/tomlrb-2.0.3/lib/tomlrb/local_date_time.rb delete mode 100644 bundle/ruby/3.2.0/gems/tomlrb-2.0.3/lib/tomlrb/local_time.rb delete mode 100644 bundle/ruby/3.2.0/gems/tomlrb-2.0.3/lib/tomlrb/parser.rb delete mode 100644 bundle/ruby/3.2.0/gems/tomlrb-2.0.3/lib/tomlrb/parser.y delete mode 100644 bundle/ruby/3.2.0/gems/tomlrb-2.0.3/lib/tomlrb/scanner.rb delete mode 100644 bundle/ruby/3.2.0/gems/tomlrb-2.0.3/lib/tomlrb/string_utils.rb delete mode 100644 bundle/ruby/3.2.0/gems/tomlrb-2.0.3/lib/tomlrb/version.rb delete mode 100644 bundle/ruby/3.2.0/gems/unicode-display_width-2.5.0/CHANGELOG.md delete mode 100644 bundle/ruby/3.2.0/gems/unicode-display_width-2.5.0/MIT-LICENSE.txt delete mode 100644 bundle/ruby/3.2.0/gems/unicode-display_width-2.5.0/README.md delete mode 100644 bundle/ruby/3.2.0/gems/unicode-display_width-2.5.0/lib/unicode/display_width.rb delete mode 100644 bundle/ruby/3.2.0/gems/unicode-display_width-2.5.0/lib/unicode/display_width/constants.rb delete mode 100644 bundle/ruby/3.2.0/gems/unicode-display_width-2.5.0/lib/unicode/display_width/index.rb delete mode 100644 bundle/ruby/3.2.0/gems/unicode-display_width-2.5.0/lib/unicode/display_width/no_string_ext.rb delete mode 100644 bundle/ruby/3.2.0/gems/unicode-display_width-2.5.0/lib/unicode/display_width/string_ext.rb delete mode 100644 bundle/ruby/3.2.0/gems/uri-0.13.0/.github/dependabot.yml delete mode 100644 bundle/ruby/3.2.0/gems/uri-0.13.0/.github/workflows/gh-pages.yml delete mode 100644 bundle/ruby/3.2.0/gems/uri-0.13.0/.github/workflows/test.yml delete mode 100644 bundle/ruby/3.2.0/gems/uri-0.13.0/.gitignore delete mode 100644 bundle/ruby/3.2.0/gems/uri-0.13.0/Gemfile delete mode 100644 bundle/ruby/3.2.0/gems/uri-0.13.0/LICENSE.txt delete mode 100644 bundle/ruby/3.2.0/gems/uri-0.13.0/README.md delete mode 100644 bundle/ruby/3.2.0/gems/uri-0.13.0/Rakefile delete mode 100755 bundle/ruby/3.2.0/gems/uri-0.13.0/bin/console delete mode 100755 bundle/ruby/3.2.0/gems/uri-0.13.0/bin/setup delete mode 100644 bundle/ruby/3.2.0/gems/uri-0.13.0/lib/uri.rb delete mode 100644 bundle/ruby/3.2.0/gems/uri-0.13.0/lib/uri/common.rb delete mode 100644 bundle/ruby/3.2.0/gems/uri-0.13.0/lib/uri/file.rb delete mode 100644 bundle/ruby/3.2.0/gems/uri-0.13.0/lib/uri/ftp.rb delete mode 100644 bundle/ruby/3.2.0/gems/uri-0.13.0/lib/uri/generic.rb delete mode 100644 bundle/ruby/3.2.0/gems/uri-0.13.0/lib/uri/http.rb delete mode 100644 bundle/ruby/3.2.0/gems/uri-0.13.0/lib/uri/https.rb delete mode 100644 bundle/ruby/3.2.0/gems/uri-0.13.0/lib/uri/ldap.rb delete mode 100644 bundle/ruby/3.2.0/gems/uri-0.13.0/lib/uri/ldaps.rb delete mode 100644 bundle/ruby/3.2.0/gems/uri-0.13.0/lib/uri/mailto.rb delete mode 100644 bundle/ruby/3.2.0/gems/uri-0.13.0/lib/uri/rfc2396_parser.rb delete mode 100644 bundle/ruby/3.2.0/gems/uri-0.13.0/lib/uri/rfc3986_parser.rb delete mode 100644 bundle/ruby/3.2.0/gems/uri-0.13.0/lib/uri/version.rb delete mode 100644 bundle/ruby/3.2.0/gems/uri-0.13.0/lib/uri/ws.rb delete mode 100644 bundle/ruby/3.2.0/gems/uri-0.13.0/lib/uri/wss.rb delete mode 100644 bundle/ruby/3.2.0/gems/uri-0.13.0/rakelib/sync_tool.rake delete mode 100644 bundle/ruby/3.2.0/gems/uri-0.13.0/uri.gemspec delete mode 100644 bundle/ruby/3.2.0/specifications/addressable-2.8.6.gemspec delete mode 100644 bundle/ruby/3.2.0/specifications/ast-2.4.2.gemspec delete mode 100644 bundle/ruby/3.2.0/specifications/base64-0.2.0.gemspec delete mode 100644 bundle/ruby/3.2.0/specifications/chef-utils-18.4.2.gemspec delete mode 100644 bundle/ruby/3.2.0/specifications/claide-1.1.0.gemspec delete mode 100644 bundle/ruby/3.2.0/specifications/claide-plugins-0.9.2.gemspec delete mode 100644 bundle/ruby/3.2.0/specifications/coderay-1.1.3.gemspec delete mode 100644 bundle/ruby/3.2.0/specifications/colored2-3.1.2.gemspec delete mode 100644 bundle/ruby/3.2.0/specifications/concurrent-ruby-1.2.3.gemspec delete mode 100644 bundle/ruby/3.2.0/specifications/cork-0.3.0.gemspec delete mode 100644 bundle/ruby/3.2.0/specifications/danger-9.4.3.gemspec delete mode 100644 bundle/ruby/3.2.0/specifications/danger-plugin-api-1.0.0.gemspec delete mode 100644 bundle/ruby/3.2.0/specifications/danger-prose-2.0.7.gemspec delete mode 100644 bundle/ruby/3.2.0/specifications/danger-rubocop-0.12.0.gemspec delete mode 100644 bundle/ruby/3.2.0/specifications/danger-textlint-2.0.4.gemspec delete mode 100644 bundle/ruby/3.2.0/specifications/faraday-2.9.0.gemspec delete mode 100644 bundle/ruby/3.2.0/specifications/faraday-http-cache-2.5.1.gemspec delete mode 100644 bundle/ruby/3.2.0/specifications/faraday-net_http-3.1.0.gemspec delete mode 100644 bundle/ruby/3.2.0/specifications/git-1.19.1.gemspec delete mode 100644 bundle/ruby/3.2.0/specifications/json-2.7.1.gemspec delete mode 100644 bundle/ruby/3.2.0/specifications/kramdown-2.4.0.gemspec delete mode 100644 bundle/ruby/3.2.0/specifications/kramdown-parser-gfm-1.1.0.gemspec delete mode 100644 bundle/ruby/3.2.0/specifications/language_server-protocol-3.17.0.3.gemspec delete mode 100644 bundle/ruby/3.2.0/specifications/mdl-0.13.0.gemspec delete mode 100644 bundle/ruby/3.2.0/specifications/method_source-1.0.0.gemspec delete mode 100644 bundle/ruby/3.2.0/specifications/mixlib-cli-2.1.8.gemspec delete mode 100644 bundle/ruby/3.2.0/specifications/mixlib-config-3.0.27.gemspec delete mode 100644 bundle/ruby/3.2.0/specifications/mixlib-shellout-3.2.7.gemspec delete mode 100644 bundle/ruby/3.2.0/specifications/nap-1.1.0.gemspec delete mode 100644 bundle/ruby/3.2.0/specifications/no_proxy_fix-0.1.2.gemspec delete mode 100644 bundle/ruby/3.2.0/specifications/octokit-8.1.0.gemspec delete mode 100644 bundle/ruby/3.2.0/specifications/open4-1.3.4.gemspec delete mode 100644 bundle/ruby/3.2.0/specifications/parallel-1.24.0.gemspec delete mode 100644 bundle/ruby/3.2.0/specifications/parser-3.3.0.5.gemspec delete mode 100644 bundle/ruby/3.2.0/specifications/pry-0.14.2.gemspec delete mode 100644 bundle/ruby/3.2.0/specifications/public_suffix-5.0.4.gemspec delete mode 100644 bundle/ruby/3.2.0/specifications/racc-1.7.3.gemspec delete mode 100644 bundle/ruby/3.2.0/specifications/rainbow-3.1.1.gemspec delete mode 100644 bundle/ruby/3.2.0/specifications/rake-13.1.0.gemspec delete mode 100644 bundle/ruby/3.2.0/specifications/rb-readline-0.5.5.gemspec delete mode 100644 bundle/ruby/3.2.0/specifications/rchardet-1.8.0.gemspec delete mode 100644 bundle/ruby/3.2.0/specifications/regexp_parser-2.9.0.gemspec delete mode 100644 bundle/ruby/3.2.0/specifications/rexml-3.2.6.gemspec delete mode 100644 bundle/ruby/3.2.0/specifications/rubocop-1.61.0.gemspec delete mode 100644 bundle/ruby/3.2.0/specifications/rubocop-ast-1.31.1.gemspec delete mode 100644 bundle/ruby/3.2.0/specifications/ruby-progressbar-1.13.0.gemspec delete mode 100644 bundle/ruby/3.2.0/specifications/sawyer-0.9.2.gemspec delete mode 100644 bundle/ruby/3.2.0/specifications/terminal-table-3.0.2.gemspec delete mode 100644 bundle/ruby/3.2.0/specifications/tomlrb-2.0.3.gemspec delete mode 100644 bundle/ruby/3.2.0/specifications/unicode-display_width-2.5.0.gemspec delete mode 100644 bundle/ruby/3.2.0/specifications/uri-0.13.0.gemspec diff --git a/bundle/ruby/3.2.0/bin/coderay b/bundle/ruby/3.2.0/bin/coderay deleted file mode 100755 index 02bd186d..00000000 --- a/bundle/ruby/3.2.0/bin/coderay +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env ruby -# -# This file was generated by RubyGems. -# -# The application 'coderay' is installed as part of a gem, and -# this file is here to facilitate running it. -# - -require 'rubygems' - -Gem.use_gemdeps - -version = ">= 0.a" - -str = ARGV.first -if str - str = str.b[/\A_(.*)_\z/, 1] - if str and Gem::Version.correct?(str) - version = str - ARGV.shift - end -end - -if Gem.respond_to?(:activate_bin_path) -load Gem.activate_bin_path('coderay', 'coderay', version) -else -gem "coderay", version -load Gem.bin_path("coderay", "coderay", version) -end diff --git a/bundle/ruby/3.2.0/bin/danger b/bundle/ruby/3.2.0/bin/danger deleted file mode 100755 index 799b4b0d..00000000 --- a/bundle/ruby/3.2.0/bin/danger +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env ruby -# -# This file was generated by RubyGems. -# -# The application 'danger' is installed as part of a gem, and -# this file is here to facilitate running it. -# - -require 'rubygems' - -Gem.use_gemdeps - -version = ">= 0.a" - -str = ARGV.first -if str - str = str.b[/\A_(.*)_\z/, 1] - if str and Gem::Version.correct?(str) - version = str - ARGV.shift - end -end - -if Gem.respond_to?(:activate_bin_path) -load Gem.activate_bin_path('danger', 'danger', version) -else -gem "danger", version -load Gem.bin_path("danger", "danger", version) -end diff --git a/bundle/ruby/3.2.0/bin/kramdown b/bundle/ruby/3.2.0/bin/kramdown deleted file mode 100755 index 80d09075..00000000 --- a/bundle/ruby/3.2.0/bin/kramdown +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env ruby -# -# This file was generated by RubyGems. -# -# The application 'kramdown' is installed as part of a gem, and -# this file is here to facilitate running it. -# - -require 'rubygems' - -Gem.use_gemdeps - -version = ">= 0.a" - -str = ARGV.first -if str - str = str.b[/\A_(.*)_\z/, 1] - if str and Gem::Version.correct?(str) - version = str - ARGV.shift - end -end - -if Gem.respond_to?(:activate_bin_path) -load Gem.activate_bin_path('kramdown', 'kramdown', version) -else -gem "kramdown", version -load Gem.bin_path("kramdown", "kramdown", version) -end diff --git a/bundle/ruby/3.2.0/bin/mdl b/bundle/ruby/3.2.0/bin/mdl deleted file mode 100755 index 18c28ad0..00000000 --- a/bundle/ruby/3.2.0/bin/mdl +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env ruby -# -# This file was generated by RubyGems. -# -# The application 'mdl' is installed as part of a gem, and -# this file is here to facilitate running it. -# - -require 'rubygems' - -Gem.use_gemdeps - -version = ">= 0.a" - -str = ARGV.first -if str - str = str.b[/\A_(.*)_\z/, 1] - if str and Gem::Version.correct?(str) - version = str - ARGV.shift - end -end - -if Gem.respond_to?(:activate_bin_path) -load Gem.activate_bin_path('mdl', 'mdl', version) -else -gem "mdl", version -load Gem.bin_path("mdl", "mdl", version) -end diff --git a/bundle/ruby/3.2.0/bin/pry b/bundle/ruby/3.2.0/bin/pry deleted file mode 100755 index 67bb78b1..00000000 --- a/bundle/ruby/3.2.0/bin/pry +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env ruby -# -# This file was generated by RubyGems. -# -# The application 'pry' is installed as part of a gem, and -# this file is here to facilitate running it. -# - -require 'rubygems' - -Gem.use_gemdeps - -version = ">= 0.a" - -str = ARGV.first -if str - str = str.b[/\A_(.*)_\z/, 1] - if str and Gem::Version.correct?(str) - version = str - ARGV.shift - end -end - -if Gem.respond_to?(:activate_bin_path) -load Gem.activate_bin_path('pry', 'pry', version) -else -gem "pry", version -load Gem.bin_path("pry", "pry", version) -end diff --git a/bundle/ruby/3.2.0/bin/racc b/bundle/ruby/3.2.0/bin/racc deleted file mode 100755 index 9041ab6c..00000000 --- a/bundle/ruby/3.2.0/bin/racc +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env ruby -# -# This file was generated by RubyGems. -# -# The application 'racc' is installed as part of a gem, and -# this file is here to facilitate running it. -# - -require 'rubygems' - -Gem.use_gemdeps - -version = ">= 0.a" - -str = ARGV.first -if str - str = str.b[/\A_(.*)_\z/, 1] - if str and Gem::Version.correct?(str) - version = str - ARGV.shift - end -end - -if Gem.respond_to?(:activate_bin_path) -load Gem.activate_bin_path('racc', 'racc', version) -else -gem "racc", version -load Gem.bin_path("racc", "racc", version) -end diff --git a/bundle/ruby/3.2.0/bin/rake b/bundle/ruby/3.2.0/bin/rake deleted file mode 100755 index 3a26cbd4..00000000 --- a/bundle/ruby/3.2.0/bin/rake +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env ruby -# -# This file was generated by RubyGems. -# -# The application 'rake' is installed as part of a gem, and -# this file is here to facilitate running it. -# - -require 'rubygems' - -Gem.use_gemdeps - -version = ">= 0.a" - -str = ARGV.first -if str - str = str.b[/\A_(.*)_\z/, 1] - if str and Gem::Version.correct?(str) - version = str - ARGV.shift - end -end - -if Gem.respond_to?(:activate_bin_path) -load Gem.activate_bin_path('rake', 'rake', version) -else -gem "rake", version -load Gem.bin_path("rake", "rake", version) -end diff --git a/bundle/ruby/3.2.0/bin/rubocop b/bundle/ruby/3.2.0/bin/rubocop deleted file mode 100755 index 9115ca0b..00000000 --- a/bundle/ruby/3.2.0/bin/rubocop +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env ruby -# -# This file was generated by RubyGems. -# -# The application 'rubocop' is installed as part of a gem, and -# this file is here to facilitate running it. -# - -require 'rubygems' - -Gem.use_gemdeps - -version = ">= 0.a" - -str = ARGV.first -if str - str = str.b[/\A_(.*)_\z/, 1] - if str and Gem::Version.correct?(str) - version = str - ARGV.shift - end -end - -if Gem.respond_to?(:activate_bin_path) -load Gem.activate_bin_path('rubocop', 'rubocop', version) -else -gem "rubocop", version -load Gem.bin_path("rubocop", "rubocop", version) -end diff --git a/bundle/ruby/3.2.0/bin/ruby-parse b/bundle/ruby/3.2.0/bin/ruby-parse deleted file mode 100755 index 4cbe6e80..00000000 --- a/bundle/ruby/3.2.0/bin/ruby-parse +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env ruby -# -# This file was generated by RubyGems. -# -# The application 'parser' is installed as part of a gem, and -# this file is here to facilitate running it. -# - -require 'rubygems' - -Gem.use_gemdeps - -version = ">= 0.a" - -str = ARGV.first -if str - str = str.b[/\A_(.*)_\z/, 1] - if str and Gem::Version.correct?(str) - version = str - ARGV.shift - end -end - -if Gem.respond_to?(:activate_bin_path) -load Gem.activate_bin_path('parser', 'ruby-parse', version) -else -gem "parser", version -load Gem.bin_path("parser", "ruby-parse", version) -end diff --git a/bundle/ruby/3.2.0/bin/ruby-rewrite b/bundle/ruby/3.2.0/bin/ruby-rewrite deleted file mode 100755 index 00c71af8..00000000 --- a/bundle/ruby/3.2.0/bin/ruby-rewrite +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env ruby -# -# This file was generated by RubyGems. -# -# The application 'parser' is installed as part of a gem, and -# this file is here to facilitate running it. -# - -require 'rubygems' - -Gem.use_gemdeps - -version = ">= 0.a" - -str = ARGV.first -if str - str = str.b[/\A_(.*)_\z/, 1] - if str and Gem::Version.correct?(str) - version = str - ARGV.shift - end -end - -if Gem.respond_to?(:activate_bin_path) -load Gem.activate_bin_path('parser', 'ruby-rewrite', version) -else -gem "parser", version -load Gem.bin_path("parser", "ruby-rewrite", version) -end diff --git a/bundle/ruby/3.2.0/cache/addressable-2.8.6.gem b/bundle/ruby/3.2.0/cache/addressable-2.8.6.gem deleted file mode 100644 index 3413e0247e47ace16eff9dd972eea3ca64d83703..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 107008 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"xtV>#~|M*L~t7(-&#<^DNT&ap>GBM3tp04 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

FNe)e=sgw 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 diff --git a/bundle/ruby/3.2.0/cache/base64-0.2.0.gem b/bundle/ruby/3.2.0/cache/base64-0.2.0.gem deleted file mode 100644 index a45f09b731b8fac1047e7e4fb5adaa8581eef1b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8704 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 z zPu>?`P3~htL(Hz513nfdOfyI^1%!)`-(ItO^}(Q*+uaw-FT@uu0dK4JbIjH8#4qB1 z%C!YW9T6E>{?J%pFa*G^kxn2$>Hk8}`JdfkZewX~@9yd7&fyDjbogsjz<;zx z{)_$(7au?OpY%UI0j|IMKmW5r{x4VmQ~$I4Ad(1@Kt;M18Zk6wE4=5+aXegS3_%77 zH40pvY;+gpQB$W?ZJyrvJ>9*i6gwv!UF!tPjK~K(-XHy_^!gGp^Qz!+t7XN$Iv=M= zA1=g`lg{E?Ix<#uud5CJOaDP&BY5{W@w-<>YF}i1(NPZ+*jHpGv4%Pe88ge3cUw~1 zb`;U2Ak8-?%x_@+cKo0n`g0E~#nDl6W0fD{MwV6xK^6+}PI8%9qj&Q-Un|%H>*QGJ z8LMA2Upc-Zi{+xvJ*DtkP1wo(JO!#QBnf|M=k2lQk1Io;GSnZ=$B<~uIZm#PJ5cf> z+Fmt9?_5Q?IbTv)Yb7FbFzk|Z3y-H_T3x{~Gq9_%tK%hVI!ZR3n>+cwYGwr$(?8QZo!XKdTXf6sUC-P*11KJ3%tVf&$zR98}+ z>h!OZbYg4jVrXLMVn}c91@u3Q82=F~D=W}{l>g{ImrQJ|EI>@GY;4S|%uFmC>_Ci6 zEUawIKtzoHvlRO8$8~jfF?9N;lDmbesm*^c_)qo!k^KLi+kczff9n2!YLhS;3h0NV z(i8-AM19k4iyg`LRD;p;UZzCPKBfS9zNogx0ltLF0Mye$2?>o&yWvD^e`NOMk|*Uw zJ9>wNL4VWQa(2Oi)0uUs=+_x8=H>JBU;kjJ75KBt&Rd~zbr^yYwqXZ&baeb?F*s$< z2dG(6MLFJg(-5dqp2c^>W3djRo`b>`c@0)RQ4hFW*Ip9v9^tvCo!0$G9uEooSjh_4 zJ2vTXnq=)P@y@6Nf0BN13U2y^$9(_9Fh~>Hljvw8Km8p4l1ERrue8VO@E;+ZvjJ9v zkPyR>Q^()-*w%2qO@`K@E(o%}!Xl`)MN1Y~TVA{PVvb0;YqMyDB~gQIKop*9+uXCd#^Bb+X)OAM#R_d2Q**B}-JOSs3DX`O8de=3 z*Gf|ss*QR0K(&5m*=&p9mi<-O?nTMK?)dm7Qo`$NCJPYS1ZoC+h`Do(CD5~F1uBb; zwAtw^=a0B45bU~XX%WGzW z#+B8@8i2{8J>GU z9)Af88`XDXVVS_(eQN4*H?4TcwzhW()9a3%dpWFr#+~Q922mD=us%&T_*LY7oH6~1 zad&j08N1LpzHT(#*V;xCC+{kBY3W|@=a!QnXS7`6-Vcdk64882sHEc!CUDx_&}Np5 z%6M+j^EdtEE9}AXq=ASDV*RM>=Md?6p0|+Cau!d?*I*ACYbq=cf^9K2cY666#~FGa z#hCL+jU|3LJa5tLr=dS^ee-A2NMC2+*)0m}|EZ4u|LOJrVE;b^{NIQF94zdt%>O_9 zXJq=n`2W9R>HIhRzv}V!-(+uO?DqduDR@|q-I{!0b5q}Bb+s+MZ;HFlKW4p_`le11 zozPV&NyFTO$?(HoAh~E5lq1M_; zKtM2w;i~u&JexL^8=_-vy}DAh%I4_eM-s;{s~}&ez%Xlla6FRgp;DDLtoHnHad0%l z#80nOmAtg^ymGE!e>btQA+MFQW;^Cg(oaQOM~ni_6%qtxPq&J$xA`CnCK7#BfD1Ea z9a(nU@`k$b0*V~&CI#lkaHr#lN|=s>z;453h{hRNKMt3!B7b*UG`HDhh4R|k* z(A{oiH*_~l0MFu-AUY(* z%g$0921PVb94V@(X<+vq(M>UE0>(hT-h1qDSBB(4Y$@n{#0@Gaf2jg=p@p}~_>k8y z-f*is^;arb1P~6JEUT*(vVmMIB%~IEAR2yuAO&f+s~1$+b#tH(ACCpe*1^(spPk}w z{)7-JImH905aa@Av~VftE5$%i5BSaCKo0zjb~Fo65w5PjcSj+#eUUG^Up5)2aDaH1 zc6V(i5SWk&n75X1C`oSOBA_$3Tt+fK3Ns^uaw*A275ER!!Hpo-rI|(*hWbr6r2e+2 zRynd>kvF}*hQc^ni0z8qj_$|!vJnxd3fb1VytaG*d3(6yQr%T zx-k@`zVh&ozlb*w81JCGWTH|ASkk!9nrPIl^pM*(U2?5y*_tQh^G~5Ex zA_@&$gpCM=G8C3|;(iuZ_Aodthc4Z=EJ@*LfkLZV=5TTuf&gg^1QB74o_H})nlGjz zBHBr9(G6v=!Bkh@3udJwUdK(7`FcRwlOUjiY@nQ=OPFIzy$<1&%>E_&7X+D?Hg-!` z6Df0kAAo8j*vdukcODc3SrFqZeo1905OZZ$Vaj+F-w?alC#93+Gs6<=jc$#q4bJ>W zS2>B8Z6CrjQN6&L{V<``_@Y)ONrBqcUdm^JZp2R&Q~^7E*%!M~;tKXiJ^dAV_W+o7tMN>hfu~bc$b+Qj91ry0UCX z>IfDag6;+&m?yJBxXj2Ofxuq-kM&d1yRAJ1_II}w9az%RA<=f3-m_TotnD`tG%9fD6gk^m0(dzw@zA zrr-)uI>^s1NCLy>Eq(Kyiv7sG?hot3Q*6EYrhqwonx#S1TubF%6?E1V;5%9dZXiE) zWU%WG7i2dW$+HF~yrc}EwvQv`OWf@96keomO)D>{MR-bWdQNH&IA3EaJ6seVct6dJ zCh;+TCDG+7IFpd}2VNHD53q?KKwQY6nNI^=tZ}tZeh{me-(R+GQ+fqKw(BAie(xh9 z{vtZCoR`s|u2xndZ4d$-G<=My_^H;P8+pvR9r!}gQbLj{$*MgD3hb!CK~0Dy$~am+ zm$;OCv3L9RC& zp@~fk0R%K_;Hqlnv^rM4Um*ug3#F~7AaUW}Y+Y!+WeunD!eA!HhM{luBM!+GAsOvH z886$s*=Lx@wEq>s;z5p^Z{eXG43vhk?eH`Y+5Dv>hLWp-DbXGEvD{b}lG znhlZ4?7GqN5g9WXg_d9ux5$UG&n)~{1TDyi;1wmLi`-W*3Jmz@_AZ+%>Rv@ilqx-X z5)w`LT57S)n`ylr#17#wA`hju_K8^ETNvq=!52ksFrp(Yn+r57d}C5m))eA zxzq$SY4|avKvd+e6i^;1-uET}KB#kZKnxZo`gP zFkd=jsVCKBCok>5p)^vS0#3imP)+ZwGWjdhZkIGuO~%z0QdDDF%&nrF&G*yKrOZIW zMZiCPYLJu^Nm44^@TLL;RgP6v$z4KNS4@e30$elu!h;HD1cdObworx2Bhx{RfMn2@B^5m$<3c2xko2dB~f zGEj3tOQiATW#-*{1bDgP)|)MCoX2XL&zg`_N?{dKOLNELyK44;psm7eXazr3#JHG9 zV|hNaq_rcWxz!h6|4`_J8%)Tcrm`uDI0I9MNI^FN48G31@VwQ!KFtmFHq!{UwBjAG zjGVqSH?mkNK2TU*m*RLgXgTUmWiaQ6iENB6s4u-7iddeDM5E#(L2d&w)gUQYWLG5B zMh%`SzKWMw+y!myZ!QjExS@9N`%Ny7l%phzC9Y}#(Ps`hO|MKO#w(5WuB2K>I|Jp- z(!U-HCDK{64>Csc^J76VKe-72Dtwxf{p`7bNMVe$5nM#K?u4>&zYzK?ggh$f97p*6 zmq0)DY?dqjum$sqLWzsjHI2VN1KJux&HeH|Ux{9b#1@PY{&OG3GJ1IfV-BNZ3{NXy z*Rb&Ui2UtXJT88N_yGwp#z-fH+l}v0pdGq$0arop{;k*`>reZ|py3n;m%X|`E*A}i z*JUX4WL#{>AYI1bK6*(j&kG;EKnJpxki=2!BH_00WZxv}?y+46CC%NqM%zJG&+3@5 zGTN(xmkIb=#l$*4&})+P$D>hn=(XgQ#ff8m{Xgzk<1)xwo+25*Ti%v02Hr1S9-&bl zKw3g<7K80%*IE-2O~(NZ$~9@sC88u zV|74%#rg7c@^${C>YkonzWO!yxi82d?Yx~q9iGl^F68vPx_bJ{mE9~4zUk3nE`nW< z+gv6lagRjFTk;|-C;WlBgB8r+0DP;D!2}e$69QeL> zCW*B6kQ1zy`iKYwD1ifcsr!gxB3}p74LET!ZC&N)& zEFuI7C9Eq7%xYI51+bIo)Od%}zili=0%7SQ=x(>jto85tGej3tNW0*5B;~E0DmDJW z;RU>4u$?|}%WiwbcJnH88$SMhU1yYh={sW2fJ-QlX|YX0Bx;7@n6lo8@s6hpR*rj) z?6|58uZ3T97oJEF#Oz5g{XKC)Qw-n@`b z9f&7ED3Ob#bh(HKF@^1wGYX>F?By44fT}6C9JNbSm6XbCMaADjVsz~I6JdTu(gmGSTO(J5gQx;m0=krC=z`-?AavQj zPNeaftMaVoW$#&Iw)tlk9W=QWI0l&Xft#rw&1Riwwx{|xRu&G57#AL%yyrDTRX+Jo zN8^o+uIBGKfVcPO`M&-rz}w#2+x-~uP44%1VdFjgdPV8LBbWOO-r>uU24p7HT6sEB z7!-s3>aPxdmrgt_Cn3h)zjwcvlV~}`R7JtXMmMxUZ`oHv=6^%H`Ba@lzNiCri~l}+ ziPg#Zr8|;GG?awiEO{34c2fz_r$#+?r&Jn*=LJug%J*3)*<(|{_ip@@7~-xfPDrwa zpFb2ikg9*7)B))Q2}SGifwJ}qM|RN#QuuJ)rnCF^zRhX=*Os95TB2crAqzy|u}+N@ z(tKfoo3C*vD5`~g>DzUzNSLzxQ0x=hawW*Di)!>cHy-vh%iim1jKYK+^kX$%YCA# zYUBHPm(UM{t(yu-j@OFj5rU9H>EYk5REMWtP;+Oqc6X?FloI^m@9jp#)umxE4sH;^ zCa^1mU5b#vjy4~wz|nc7b01V;p^G*gv27kh2tLD@FU@9fs9|OVc@MW?3Lr*M=o@qUAtc}WOUkU zew8_E)Y1H*tmf@C5h|Nu0d=@Cq)cUUzL&@`b6K?(c}`OAR$ni|)!^w3Wl?4f~eM3+sF5 zXV+MMhK*x+ErVC`{atN&DVJP{Goz)44;Lj>l77Y4DMBzm}Ka1joRUh~i zl~8DKH;7d=>f-{7^s)tUd$@M`R5??|%u!aoFPES=m9d zu)%i!EQA&kh%Zoq24QT3s*YJ42uELCmtAiCK~!vMq+_2}ep6fo7EbdSjS;C9qi3=T zPE0rS_!lmc5#JbZGPlaA)xj_!x`9oq_Gg8WW#9lXfUkrg~4as`?SJ)El|LyWYkBkQGp7$*cC%&e`mW*nWX*GX4Q{Qfxmcw2#hVsaY!B;s!sXtWyCAoH8|SF*7WXxG6x z{!q9BCF6L3>H{B{5yNv76E;|KYhKedBcLL)Z)BgUS4Hr#>>%D^ST?~ z1@}2C+n8wqi^=j0v zZ1sA*C~R|)HS^m=n~_i^{&;Jl_cPhGgl!ZSrv}xS2w?{>V{NZP&^S^e*q1w~&0}uQ z^MjY`Qrbh#-S$~UmOZwv`0hA+uD}WLHVr82AotqaZo?xdl2u z;8RZVfdp}Q--m<1;8XmGn8;oPJH26zdp4q#oR>a!G3>}-H9*GB{KI)56<9uYm%hJO zzUNTR{J9RKr1{-66Vk%mVi0C3h!Z~Pxm6$jB>Euo?OSAryad+k>{ctSp$`f;nh3&( z@ClEhoKyA9B14ZCUfCOYtxvKu<0Ea5z)Q(0a$<2IB8X!^RHk3ltr**KwZ4f&fh8gH zz%*dtJCo`RsS+R^VUzr(h6^VuH#l+w>Ix6Tr}D|JWtpgmpOcSWDC-R)ZS(nuIV}W~ z-4kL5sVjmbwC)KH+Zjxg>JZ!#762F$e1qC*#2n($5H)XCN3jGu$bdb#L6ty}$y|Pq zOdb*=DEJdPov>dZMH7E1#PnOq+P{;CmQdl#JZ=QAc)ms@%MP#oI|I{0m^CJIML$M5 z{V10mez|Sj7FDTY`X?RT4L z-UreYtP)?lPq_hAZwet0PILl`*Eq*47rWZP9^8RD{T)uJcy3(Db zf*E8fYf$4|Yd=s3R9G?5?%^HxTH5lFO*3F1WrCEo#M~O$(5ws(EC($)uEN1wh|D8B{8VW>Dq3B5B|zBpx} zZY)XO*P!6>tn-E&x9U>J>)hi~`pU<|h$9RcDYC1TQo4+eHCd`{`QA^`!>%FApAtQ-b$O}of zURdLIj}JQ?#h{B)hU?%T$6CI;j^*9vCUfA*=#|4zsbt~Rc4#H(#A4-gW|hGKlDKU& zli70o)*qfWueMjUa#%`f{^9%dI}^8JXP#&5M1!9S=5vCjGdS|8eGP;bQ=sPptRf^u zQi`6DI0}|e=DU1x+b^;(8Z1i8y%2&)6pjJ(^k(Vqzjp)Fe2H5N8eZ~&0lPy(so& zxlC8Ii15muJx6lg;4fPMp$KG$?WyJa`CeCl*c{*e4dt%8?Nrx9v&BGECE?X7@LhCK zczDfek^b#kqWM(=$hJ+j-KD{AUVff{lcH7YO2DAQP*0z|0L)mB1aZ#IU25p~Vc$hQ zeQ!+9xA%wr*Tnd89_P7H`7MmQAkik>RyU1H;C>)uC~j!vU+yxJt(_b5|6rVhzR4sv zK0^*KdHA$`NKmfJP|CquNdBL=rRa{BOhme{H|AJMLA#1}Zh81mS*&g&i_^Qa15LpS z`MJc_=@J@a(S)3Iy-c9xD`PbGkMWNv&Ii897*<2%VC3OHk)IKj)UpKe0dO26pxJsR|3)XfM5A* z*zf|)d?2a8Ymb~5@NY-6#U<5bG>~ojF+CSi?s&i45O#MN(K<28e*f~S@=R|^7Ra`w zq?8r6J-*xuSvGwgxHu#)pd}U6+Qh>gqkFW_+Tv`;zH6N$c;Ya%_%folr3ep^sDIXk zr(xrQE!;Eo6!*A4~i$M2Q3&8jU6>fuq{6yX{Ft= z<69pse5!$rl{>i>?pr7d&xHj=h9ZUGeZkk_JNfV8L? z=~bqPCOxQuU1TdA`y0U(vMCN8*a^g ziig>=&;&!?&r_Cb@A2A+BYu0tdI;F+H7o!bq7Lsa!v9a_yj-fJ?vV{&fD9-<8UT)n=50AG#% zZjVr0r9fW^w(-v*#eQ3LK1Mo5VTW2E`f?Cw!;&_dsfriOd7XVi@Uv1yDl7`(0$18c zQoRv)`AR_3cB#>fJd*M^bgmQ5DfSR7j^p^f0dpgf?2FW=5GCePMOZ(l5>u?PaEd#l z-Q=$^y)=u@>&d=hxy+|jGu5)I%ZyJ%U|-g))M@@*WUArVw^GJNfXG)avx-BjT$m~CTNc+O+_y6 z_=235s+OR{Qo@j`R|-z9?#uh-P`E27`ti`9k^kyhF8Ak^z zdUtr3iJEya{eH#?NpGr&yOY~kW>YeSDTD?bL&x#aj^*N2m9Dm)P~1%;OVp$iG!jp2 zlO(>f(Z!_vu7iXrxHu{`#}WPZ0f|2R!-+r<_o*Y!LmOGxa-4i!LEM-=(x$c?g^MIL zB>r6yvOY;l4j<7v+Sn^7Tql#$NN+1Br+>IAqf@iF!2&}aK8Dn|-Kn{ZAa91pg!70vSnHBCR`ht^c$G&5S(x1C8GI@knn;k99tBk(r0wai^jR?89U6B(H3E?s+z72Dv-y#7-A{A6Hs6Nx<96 zrT*ygS+&W11R z*nDW%bxMz6Jbrq!5{6ZnZ!81f8Of3b(NcSchp?}u48J&KE zUXKXmLP71(fnVQXr7Ja8XqX8Q+dYlZt=hm00yEc@+Z?){e@1DWF?j7HbkeNEqF1C>VJg%?<{4C zNC4Z~fP(s8?t|@0TOSQy*8rQqfX{~d`#;sF(iHO#vQ)|P$a1l?$WR+eJ=IIBHeP}v z-JBg2itDm!8;K93Z#!iZe!2i{XR?@t3m96TEXtg9h0t?KI^U}CN+Ow*IA?{-?kxFu z=d_r7T035w-n<#C-BHdJ?6>Hm1u3bR4%O**Gvf4i6sk}aDS-uxS{s9^eBICdzBAUl z!yErLceloO0YrosjhDXEZ+laK&N={N51=4bDWQLU5sN`X6nR)&buq@_BcAh^MWwo40!mBovgb< z;}Ldj%c@yvCP&p^0;=Zu>yNQbi*_q=1!D*5YUbfcyo{rfGjg({zP4sSjUX9~;^&~O zeh{Vl-5%{2cCT24ER)SoL4D_y?)P*V06UcuqZle~0pNz<-t@kUh}f#}ETHjU9r~L= zMbz909_jnTifoZNYj6DF*9jY#-_@7l6ihqUjxXqqfAWU`um#UyKj^4 zc&HYz_!MBfd=vC}7s0(%<7b!Vy)Oyyk3~H8DTP}#8*{7*xV2v~r0(0cw7aZ|yx7QT zAo;oujxOKm{$PyW_113mdN4G}T^5%puIK*QU<#mI(Z%@dRxyE_~vo-Nj0-E?6Fm(Q5c=Td9c!vYLR)r4JE9-!x89`#r z4;xW*yMBe>=cLWk>*4JB@@TwgHS!ZQXnLXP>>IR2{BBHyr15Ghnl7l@ds`(;AN#;pLX`sZCRK8Tmg zy4!MCAB_QAXEPcZo1VPwfp0F&4Ww7ab5K?-_3lT(p zhFpZ<0)5JeHOxnEvrhe4T2QyGu&LX{!z&8`YS0PYRBS0HDGS`8?WBD~`!uO1S-|?Qz*3R)5Tpz)69VqL*XV_CC^Snt?20k0~^JNe}@u}=SG}Rj< z>Zat(zI>%axAok9eS};cLzeKrHG;<0IM8tSk8IpW(g%;6oS|JOtKm`uhs-iZx1Tg1btRFi zxBMDepo1^FJ>#!F#J1NwvqyoO+q#3k|8R1^Z7SfE8l3;cpQVw{fLR(-5;rlmg zcbg|kNw;pAb;U#~P$~l-0L99TJmF^WNsg_M6*Dn+j4~4QhZ%X(Gbi(J(?$?v#ZX=v zC>V;^3k982oyEgx_(+(eMSaO&EV&a)Zfe9MXC}gYVqKB*+4$38q~+yr+M{+tek+-y=#J@ZSP&6VHUoHb zxJtbHDeEKX3DSCfRe4EjijNH|X3uD9T$T#!>$Q=9wOVveW(uk6>o;|G$a+YXM|K+v zfeiS}#)aca)@y?fj&ShJ9Gl4%ujiBU-HUW{iB$%MTK(u#0A(xZ=jh*2BXv~=>n^S$ zN$%kE5=tv6E&&kere2pEBpl-zS$8j+i3c055Ue<7b>y&JdQm-KwE1HkrA({YyJ%2+ zG03I)2>dp-6s6xj0<=IN2&U;e-qwM!Z?*O+e<%S&D(e@eX63-kl2wVCq*!CQkr12RW z!_2Wc#{lI;4F@hN^2F>^W#@Mx1jVQx==5a8n9XXJtT6?rd7Ekd;i}kXik(_^T_F&c62*nwCCD???g2~8MV&all_BPMLo5NKGjiAmV5MJD{ zx{?qOFpoXzJZ^iWg=b9b_GS#Uw6@ERm&pBwMx~|{`I;SWYWPn(jXI&zrQ3-I-|&g$ zG%jL$30w(wP}km4X;LaI+A6CP{RvdsU2v069LS{PYO&TZ>hp-=OzE%%1W776{S*&E z)0hj2*K;@nv}k~r0>ogWCAh)nOR8#d{qneuD=;~0*S2@I(X$V>;**3U{ylLV!twY6 zcPJly%`%U!M(6`#a>jc#poPI14)7>49ICY9qGQ83F(O&f_mohS8&%&*QPX2w*SzAg zxF*u-=e+a_T+QPpxUyG9%ywjnP~INy!8jHZk#xZg2tmAx`~D?7cm8ZcJ+;>CmB9f2 ziY+SWm>PsBENOo(V{#$Yf=H^6pPFT~0*R zmY!ZO{XQZ7Zdp`5ZPEg@Mp9b^xuq@j!aEZS79_(IIIZU@Fdt9`T-d6x;)!O8%EZEX zUDg8bb!&{CH_9YzT`x5))l_I>LP}g++!h_dI1{=x_`@Ldp*WUS{Tbs>-c90HbP1!u zth3^9a=)l$K!#{w=p5-}mbr1870**4q&)Kwzi8t$Wi-|_hQ&Dcwkh$|Ms0Nejm^8O zR2<&D#O~{$Q--zoHn;6PX%(c?75BSnMH+6f-45yoRKNs#srtZ^>SbsppQtEao{a}k zQ3-?YE@EQ3Fyx+2i7}PkQBm=Cdo;#<+A6&>xH`}kq~;!*AqZEEGVy+Gsx`~G5Mv0> z7VL(t7AV&y}f4Pzebd9ylL|^J?x}K@E0*#!PO6Ze(710b0nWVF%-rbm+C4{FA`qD5E)GdDH zTuwfVAgZH_=$C~U8L!^_Cgex*^q|e3RQ`IP$V;1m6F_E4 zvDDQ{FrDwg#^q0uJpA*ha&5wCiV~Z6fRJiN&tpB&6S>=RV`nUy5WPH(gbz}AjxV0nX-PRiMuRaj?C$4&n z2Oss9bi=^~avJICwY*gxR76aB(2goLBb#GO+rt@()FO>rquqr4@`kj=IK&6pSj?%P za^qPRN#KNWL$v@lcf~p=8j_Y!WoM_}ll&Mrn&9e`Ps1T)%`-HZ%KKKtJ6UgDR7^7f zq>l_@YJho6|M=Ixvg!a{_Z&{otpLBT0af4rEda!A0Oaqb9j$asbW|!R?oUyt)qP%N zt=#cbrUu60YBdPv5ckVtb@flKa(Gs0Y5KF<5Zx7+bV$Po`j5C_0k8GV09d^Y(nA3HV>@($RcJvz?YBvcHQkd-Kf(B~QAb}CgX0$HDdjE?ne9E1 zunDfzljV6R)jgXSpWWB|y=C`#6&L-^lUwzCir$qs&J8Xcq!B_Nt^2^g3Y&8XS}2Kg z=u*m(%h)i*aF9xrLC4dUDoV(KyRXa>ugMRvyPhD%O(k7~11qLrQna(J@i$1whrz{0 zO42qCBqN#}PXKku_)9wAkes+S9*F}DA@%}=bbg+jLVa*3aR{rZT~kj_ys{!Ya<>v) zl#{JQSb~F4^#JSzC3~SXAKBH4sTK^>lL`~nvNCuzXegrrYNIf7WE>SzO$#2)1t@Pm z6Vn79%>m@|Z|_cQ0NmZw|K0hV0#@DueXn12aj!-FIp=TS7UIibp`fjif1^ogxXLkc zqr0fFe2e6FQ7z!lkI(Dss#0Cvbqb;%GDHE+W(rReVtuBFT(a4KNI&)YhGK35LrP1Y z63j{o30&?5zBM@L1~LUc8sRV)9|N)DTk;-%M)jK;cTD`6M3H#4CRZ(`H z(*teNdiAlvCRuLr=81QHq`Fx;n&XUNmVyGHV>mw-&&ig^1#+(XKZEsAZ0SESIF-U= zTpWVVL`1CDgP3x{Tp@p)FC}3hVtYVliq@Q@dTrQ2H>0LE39QoFKY+_0X#0!A0qQQU z=Y@v^kZO|Vw7e5Y@Z-U_p=!)W!wU#^#LC6-LcmT@zbi~zK>Aim z=dj~Rn4v)AlJ=`6F~zgSuMC%f65K88DUXY}fVuXbUwa1}27MlheK!e@0QV)hATyzLldOXDKxseL8Mg()dUgefyAj8eY8D*j+9CjdOi z(o}s;|0vN83I{-SI-B#j+k?6%e)=WkWDX43zi`@@J5=tlHkAW-QGfT>IPF_`w|50} zC5UV@P(`*zeDwjoj$6)#9fC5q6s)=Hs*zh?x;`7;zdQDvv=fZ4P1#E(Kc;{r%8PMc zgn%^1Pgu9Kf=?6m+kRF_H1NBAa9D@@%tf?~2LM9mFFT?n&b3kmz* zjd;@wH&zb>upSQH?4>_u=KN_h8R(j=1Je))!`u^hKb2iV0EHw)^;d&&GLomEtB67^ z!P@K;Bm9rnGV zg9$PhamqhGe3nl9h9xPBFpW&F6d-p28#+u9>G%86ks{UVdbLh+=QCmct@9{Va=N|H z6K&oXFs6}Qy!9mmV!K=7u&+Me>`ltNyc zky?i8xLQ4lVkI53T{4VtNT44}PF6lQL|*zuC)u{Q1O06Pe3YNd*Wfb2N=qFDpD>)A z(Ks#E<;o1V)pT}0noenU+e&CuGXG22uNbS!fvqS8cg0{;ZQ^(On^Z&M$h6&51d%sNOdl?Wga?sz(GD{U+W3WNarj3b z=tCZ0-%3T8e9AMPkhk2~d1um5vYQCS5q&86yUEh%zR?GtmlaQXG=*av4$IczplDFinYOSAQV~ zb4Q|yL&!T>iY{Os(!yzMjmgP4VYEQmXK4TRVL@))c?(mj2l-p`6nQenhc)wzBq2Dt zHXYPYwx2Fc}bK0><@2NS1?%`7Q7l zVC??sz<~QNbhw}c`W^t9@BY~(poqbCI8QR5^w)Sd(UBjZ2cX%H;fp(w=SdBy>%=xDfohZnPi(U)dj-kt zPry8X(7VLj1MF-%+jZ!ceWEZB@_X)W`H}nYywoMtvAZ^-KbTuscoD8@{S`b;Mu_@G z0>Hjdz7N;I)8`Suvqbke$Qjh0GU=9r#ds+HpRQGL5BW` z6oRse?+<;>Q+~pnI(`t(G`sWtIb}}dFY`J1%BW7oNyKCB1%ez|Cgt#(Wr|r-!Gp#l zfNQg}kW9p=c-=FaptCo0wrKV^mkd%y&<4#qdoI@5)m10&2y4H*f+GlEY5Rb+aFzIN%kb{H`qttDpFPM1-*m7vSY1|j)3qx9cZ9KM zV9GlGfLZ<;|A4vaFS1NTDqgsfoTW-iYyL=gyd0{I!nE_=8q3i`a^7jW4b{tu?Ed+h zCkuMGU~wCS+G{r{H1cvR(w=P3l%bj#xQLN@-IQT3e^^saa=#lg;_^X%pmm(^#NClE z$6xNg2r6kheY4AIC=Y}@R*PmNbYl<%)NIv*BoYS*5C#X*6Q*vO?p~n5RE`9EgG5YE$eLNgm8;eryt2>CtLava(|mE~pWs9ATW4M(83l zwd(f>HL>Ymh^+Xk2Tj@TcrK30Ml9}+a5q?gGWd*q!g-zcXXmh2#G^i`NpfR+H zVHb6v#*Iw6l?Aus{G{Gq2JAL%k37%l-CLUT0bF<5=055-^mz!zj}SpL+} z#N`GwSClt=WB|U(nkvOR{9_-18|ynhynDdrZeC#ZjDO|huK)8p)2VNGmX-18Z5s=n z4(}m(D9&He=X^JpR8_BYn^4#))>iNSC=zNkPoHUNZTZ2@d7@?KtU}eIKXQx1Hdf_~ z3&-U4ySgG*%QOW0MNwRE>bWa!>KsUHc?XaX?MLCTGGz%J&Z!tq1>tScdaiUXoT$hq z%;1G^`qBj0SR%ZOf4jy{^eSu?GCHTF4yW)eAG#r-5lzPy>pN+)$n^!m%RJ`F1EUT> z84Qco$&Vpa(;hggyDCR2JVLySYMC;P)OIKf0zXl!VEE{je{n;1&^m%Y8gw{wQp2Qx zwqE7NRx~e-!v4ae2+&(CFD^U7o@-L_Wd{Ss-DIqQGNe;NSJr$YYbDLLbeQ!IfRPz{ zgSK0(|6Ky@Ec^lLm~R$6G(7q2k zf@QY`pN)3IrNz(^s{i>SFbo;#nT&o-A4IUQhLOkO+IVC7&R#e2D~IZT6vD`hxJOOW z*&{e(UxR@N@0@L?s$yuA`sSf@#?uRpi#D%DeBv5eSh6!ZFZ zKln=VCi!k&3{Wbod=(=)+zOb_pob+I@4%-Gs{aaN|yf4u9A&`+EK zGzmp~QYl+Mh92M_YC7v}8lLM2ri{otySVAdU`KfOor@YQv(=%fie zal;$IxG56AcA8$*?MAZ9+WZ<5qcSrL+d@zoY#e3#f)~BI&8sz16IVsVsn80ll4KWV z_15(&U^J#zwLP2$8gW;i>!3;8(+n2i&IDt{c`j5np;Ig+Zg$eA}wSzJUVaqwR%2drIX(RrYkuCN#L? z5ogF23c8r9B||S`bJ-zcoGUj4QNW*&0<(&`YSHg+hl@|JJ+P@VVXQ0K-KP#^hdqsX zL%@lf^Oc(va!ie2W*CVqJZ6q-#RvL?I2vj1&2M=ZMgY-aRwNDodYV`eUFBpey{Q?< zSx4gRE3Vc5{xfC7`pvXoMHO)q1GjapA%rsDH14?aZl%yOv-w#K6=4!vBS0#j5QoR| z3Pd1e$}nR;6*gQ`UAfcK>-*)bf>y!i;2&5cZ87O0vcWj5VdZjHWyLx`>HGPiLWeBr z<@|E8aq&W0Iy;vrubYQQ0I2;1@ynR7pmA}vY!&3?BdCL2exC_+?DAsyp3c+pY4Lph z{Mmux{^98Zzn}-APV(U4?Be6;ZF+q^rOnsH%}cow435f1OZ4mO>FXHdN$t13KriFZ z**iHk|3D$J>*e`%95;_As1Zks>6^4({T#s8g-%xoH(&X{U|xkMnX~uPqIODWa6dsF zK~7KDvisA=nFZ(SFOY0HYf2X1&kC9N{86$upb7giIC1{W{qXxU20wMbWo^y#sDq-- zaw2yJZ#9XLfq}j-w3OD{K~P_x$Ei9b^muMAfn|t)Z@D^}uR?{S1xR&RURJD?Jr@_( zvH$%Eh`MAF25!yqc7GVzB+~rJ&oJS+8N9lWjuBcGMzO8_O0snA=e8-g`K=>Au}90n zFm++yJXBl7X2VVoor4s_3y)QIkOw-Yf}d(xnnCsyXBz+2gu!=Q9$ACP_f)s-zp+3) zyC<+^+E)1g!Tj9;G333gm+=F8R`Qj(>&GCxp(&TMCfu(2-j?rAOdNW^aqIFU)!o;) zJkM=nazfu=`&%y3#f2K3e*PRP*ag8zny;0cxp0x_TBo9eOefIn!JI|s{9=j~9J9$WBI8hP96wWL9$n{~;aOy63D!vZ5yG>lu z?U;Q{U(ht15HLvS_Xa^KlXt7|hjmPO)7)s}JWkZl-1~~F5VuS5A3x-`ng+0oC0O41 zZkj=K(GDbXLF0ucZ8$9ZlO9ik=Ty)}7B}m(=K_hXkMS_u-Vv*;8U4Z;&NuOCmz0?? z>#;)NNy_D|>Tp^DmigC|=dR;KGcgvl{LzEqZ)FYuMcV8)2B?UiNBHg!pyKM8BJ!5L zo*o|HPrXd72Rnbf9i%r&)WAmO#4^LOpkvt%y|gGt8^x-3?cVfM5*l~4zh)M5Qr;3d zarE8xwq$0T z29?S#py!K`J+=eIQ@Pv-(T2T3!qhHV2x&2YaFtkg%}V?`=D8Lbm^6hCp1p~3ce*HY ziXni@+ghOW!eEw=)fQZ8qia%EMhTJ&$U*X+9D%Q#-)l$gJN-qer!ywrS3#iqx2IF& zWMi(>!Noj@3vF-(OqZ)zJfYL!-g!TM$v9AmtrFJ-rjS`D4U&{a`Do4qVgY;81z$AM zXCf{Er^+&*OzZ8m0xh;TvxNC{s^s-Cl%kZ zsV@?}=!h}<^51^35S1(v1MgL*Q6S;#VF+5B7GfVb0)u#p&)}b7*B2T(&P7J{iV`(U zcCkpzJU+`^@n2wcxW<$I@>p0f*+2e3>&j!76O)50kxS<$I|)_4(o>-j87eLheR7jE zMk@Y%oo?dKZ~vzJVS-kz?3{Vp#8wP(xx`Xm#`YUK0*NGx@xs@R{FuXe3HLE=E-^6+ zm%gUC0$m--GvYnzRaC(pkzH8pNpkgu^J-5V$!m#AnAkRFQ4|z+M^sc3k+RTn6AHtS z_JTHGS4AP<&S#;;PYDj$Mb)cmB0WNlJD-?T#myRVApfC1f~?kL{rpUNoE=YZf0x(M z&tU`ZHTiFunQR=X^4{93_qhyZ(@(xMglVjfgw$u=62(FLtv&F;|g##ZgFrn$98 zk`S^;se1*nWEtAtYU~ske^1S5MiNKKUZ1Y6>bK$C5ZTz_9f8|(_V>>SmAdzeh9;}- z(Ku)N%B6J)6CY5sEXtzwN#9bJKDc0ou(52OZA&=2E@hx&XH4?J$b~`cIC(%~cVPrE zWI;ejbni|f&JVyETHeIfputcno{hA3zMJQ_2>M=S&{vgk9>$SJrr*P-!;b=X$nzh^ z!6F7<)GFwq)5ZaX4x&3>2vjOPOJ(vsb_IwG#o%A*0zdQ_{y5iX2d9$E)C*UV!H6&hjW4-B_6;Ft|&I$WJYct0emWN z^{7gg`lTUN-ywnpn2VJ(_4k>AQ~;Mnysf zTo=Zzf^&{Q6(41cs%El;+gP@s>WI#o>9vKJ%W%$N=cyuxxV-3V_xsPd7rC~~*NDo+ z!+0_lrf?Ln4jfM36~ufe>FUa0Q*02-FyvmO9NY`D4cn>?xO8($Wxy4b6x_?Dj{3-& zQ>5d6?j?MO3Km93DV-*ZNT>0lmc)y`AC1{Q|2*r*otz;{kK($i`~JJ>Q(Y30vM zm*7z{k~UMgkO@&$8e1|(+k_$;F`qf@@@q~AdSl$5S}JS7yQp=ERYG-aP~IeB`@0s& zn9~qT4n5ptXS$wa#R?#*crzp53=e$|jEM$rZg0=N`QzVQ;n#fqyOH#-eCt&QV5PgF z^t0X%VwQ0{2G{-h>>wB%F~_@|W5S91(W9y4u3|@AU9O3DD2jNjt3OK~VMGWX6s-9~ z+f%eWaM|OdCnU{Jr29}w*g-hy+Ijg9#wblQc~2!KMG>fc+aEwwu8dv4S7G{K6MZX% z{i6te{voLf_Q6SPUqO0By?r!+D>%(H(=>RPEp!=GVAtb0k}EPtN*64q#f-%70?*Jn zQ>qtQ8$o^$!O$2Sp~U4Ay)GltNZFzqGoYW{9bL>L+D899*Ci$>fvrWJg@+jcwNh@a zYD)=&{&1+^+vBFrx%yG$FelDS*I1F9kMpvBhWeIE6wXMQ-E7$o<^sBTcGZdw8Fh&| zV~=fM%)?k`Cgmdk+8Y@A8yCHKBS8;zWNJ@rixW@z4_+trfvx7056v~aq6J?& zF%6wjH#pmEx0EvmYMCLDCK+N_lYu@OlRjzdxfG;ruJ4pF$YNbZaamop+jLdgsE)ZB zEmL{3+&BzvE;nI^gIM5Q*eN|h9|ZE|aId=z|hCoGjy>iEUEZ8bOo z^T0xOyF}HxN?80oYFSm;gd%Z@wvI}UJpb{2WA@k|JT%q`^kjMG;lBBtoD2y$q1>FL zcOtoC9v&hDR&)SYV0uUAR2jYDt@S|5xOQzSYMA357l2gK^~ zv(jPx)2Q_&nUm8pq)h9Up3-nLc_BtBrlqpjra4kFSJXv*u#7C#QGtCwL#B3gx7H1v z?CvN6G^c4!;(DYv7Aaun9;@Z&^S?lCxL|SrQk4$`nkRH16sE(;%6W6e~4oa)E%cyzc1kQ`Sd$D!Jbh;lg|#z_mVuvK#2snWt@J8 z@9xZT-r3hS<)s-|f~a?MCSxDz7P}tkJ@RM&VaO@Z*gOiF8F!o{UEoJO9Un6aKjvt* zgdP$Ymz2G^R4IbV5n2mG-u(ey741LjZd*wpB)wF7MDwBg5LcDts|}YuMOe*BqI3ci z<$YiSv9pl^6$nRS4z>s5kn@wIoxBEx0`dWxbOGFrwo zG_lJaqA5D0TV>=atZ+-Afi!jPb&Vn!Mn@#?0*)&YYMc3)GHkS337lIJdF=8KN3BT@tspkyi}puko$uxfvmfY0yRkMU4No_gPja= zf#8u3Z~8Y??(D#ML6CE$_6SxLW$| zWqPbc%Z3(3zAoiwtxReA97-R{d#}d}64XQQHGb6rFqIDAVD_!A?cbaI%r#5w^HuTj zF#UY4UG3-Qb!X`FOtkCGL^+ z(W0Hr(KC#pd^F#CGlFBgl4*ax8hClg`($!UAMmv}6g&Uhq0N{cvVE)|3o?xP&r?Qh zdB4al4)U&R6xM$yW%sUM8>o3hsFwUy4Zkyib57cKu*x2Lu=ZMztxP>NEB+2hT=4EK z9vd*@2%eik^bbZ(5kWTE)7G;{Hck^M5+A(bmiDV8S{w|lZc$-@RXRBn7}P|J1sb6# z3`>fHi)JVJvcH2Ya!fTaD($+03Ec!b4#=3-1sO&v5BR5(@uWlzlw&UK@y!4wM@)?A zh=n>{I*a~J;ZW{oXzxJN;aSuAkH!J4&yFUa2?ocID4_ctPKA}$Lq?3=?2y8CPfXHD z-S?C%ed23#2bQRra|H&6&CQ2cp#xNYx)(lTpD$6_e1O5XVKca7zt11lyi!O!fi~ic zgL;7&qsp}mvdXnvRx1rOJ~>OsN@pE(GBh=RMzuJPvp-WyCh%PU?OeQ!`1r| z-7f9b2ww@k$QVcX{lP6(7RdU;%4^2Fk>qX4lK$_MfBo=+_6Pc(2o}(rQ|(k23o5_c zp9K6A>C00@rFr&0*T!9&v;?w_u%XD>-$~ET zLih3WW{G}T`5n(TtY+mtM(aZoy<7tQ-mW%peSfc~kEg3v<-LVQe#kRe!?^I5$@Ass ztfIz6pa8DqAp6hQ@UNGrucL!&DH$0FJY-qikP;*OLsA{T#w$-dfA~tEEhKkqmKMGH zWkr}SVru_3FK1(D?R<2@1hIWm9x3oSVX_$oL5VO>ws>6Y1nf571|h9PL{-pSaWD%6 z{_)Xig!1KJP?RS*#bGjlRIluZAx{dky^0c}rrBKSHl{(W+c*hmgyc%R{l#8{8wg zWjN;B8$J+`RAAq#c)5^3FK&x!dgm6BnV@sw;wu(?mC$r{JBt>X(u*pRbkiZ zajHP+!MXO+VyP`gqWPI?=?~zTdTRIL-7yY&K`esxokQHxUC8xzY3~mar7Mz{?ka1? zGd%EdHpa%2@B+XQ2>|&v)a+cwc_LG}9j+Lw&Nn%j9nKSM?DB9pnCbTNtWK)ZOzA~q z7k_CkC~ul?>FkKsqTnF48R!}&4j9y(AKL9fysrksTdMd9GSjGIq@HE}%yFU5v6Z%8 z6RQ?b5n?H*Vw3@D&})ZxA7ag%>?vgOtkedjo{bw{srSmB=v5X zj%LX>p7mni4|tji6d@BB#4#eV*bZhcs$8hM6<;w?c^(Z;IW-FLi`TG`JNY#1(Ro2d&ov$OKDSiSudEg5~8hq$#=*pUbn+=Qf?lc!ap?c6hq z{_o350hKy@(M(Vg;rnyy&zD%<<^lbVnULz&;z;@ot!4Jby{u+(ITc1;t$0j^Iq2vb z|DRi3xgl1{!l2BAtEg5g4A+b)`y`U@W22SWR9DfMe6tg97IA56ea_r}q>aluSUvHs zeGPt1pjC;4Cw6R>pzwMPR{MU;n+Wz83Yi zT5~wZ;A?lQwF}`u7>;3}^1xt9_FG9De*}KRltQI--mWtxBG6yeNg*=V(R-=Q=ukCq=t}-@OehB!v#{~kIWwL zi)tn&^^Z&B-}*oS4e;}FWR{ER1Iw9_XbUfljeOd_3;l|F$!HxzJ(O6A)k*3K$~3l2 zC5WHPtAnh-H=9k7QrQ!w=;@Zym6=O!B*ZBScxNGAOwV-C|J;m0?y7NdhxrG+n0Fqd z_$a&nGz7w8DmMW80r+;!q8^j1RgiAJ%_uH=*udMt>+KjIk@?ZDWuU<^P^%rJ=D}YH zHU7x2u&yOc^B48si)=B_CJICKCBdj&9g*;w-n-p~8R;2lZ9%|*Q!R1tVIvG_FCZ|> zmzKOAP!)%@jx<-N>sEt-8#KjKL2XYv)UJGj+wj0_y^{{BEVpjK1zR6`pRT;VG+ZFD z=WPF2d@c`)Yn60*qtB=EEGcA&Il#ApOY=DxSsaVQTvzlEOU0XUBzn{P@fJ`&$GjR|I4&ankN_T~@m9Uf-?n{#Kug zXxn_47H=6-fXAov7Xwa!KhW`?^;CP^U*jb&<(tX|IIp;=@#Sg5vp_mjNViKqbn<7y zSvzc@$K9WE5rqfLxz`_QQz2^0B!;iNMb>h=Ua!oEgC5Zx=2r8JhbG~xAHE$$icFn( z&h@pN9BxSqFis)t?A?;pne+-5J56}LS?+zwem(9JJYw$fbgkA6squ)UP_Xz^F2v%) zxhE&N`QN00ko6%-%6fprcS>O!s1vQ49<-5M98@b;rv^&t#men^`fRHgm)GnETB8g2 zjM}%Zzv08(xF!atVl@rGuR>5)0lGz`^@huCGOO!$$zlZjxpjmF+@E$!3DT)r@Tvpt zutbQ(iFr?M87Sbx$@MiPnz_MbDwnfUjT3#pNzzIOW^Rrg{MRcEzAbi>78pF^f7ctD z2N=l(x_i7J|JT=8?S+5Uf2$fUzPLPrLRY2(#(D90t7lmsm{6eM7&s6p1$YG+N>cXR z;$(l%I+wZ`zj#mFuc;01RYxkmOt3RCqN*GWuCXIJ(^sP=&)uFVBL)Hv!_>#qX;aZSG} zybaoT<&Y(%-VAJrlg z4W$xr4F7{YI1bpu0Fa@s{bgb*(p}hTET!&;O+sHjpua8_Q-|~bofP1Glg`9sEtkWt zPlpf!h({@M=N`=Gx$);5q(~spX4}ycTDFrvPb;HEDv&Dg_7JA@gCpA zh?zmX2w$;~5^?yHW>6g=U`)~WqS=2pIwq8(Pw@zNTa`|1XPU^Bp0LF|j?S{r@pFzL zc!{<@m8D7Q3x$b4tDA~>E1*;QpO|I*oTBk`V;7)2RZIy(7}ZOQ;xvqL_n59T+4-v^{@F!__j@hZ)AAjY zTt?%V7qdiA_n;i!BD-_xE!7Wm@VxB4_brq6H}En%um9V|7Le9`ZTsCCeEm-xmbUzT zdjarp1M*pY#S;N&9{RCo%>7&b1A!zR18j9Kj(N~K>t%_hH5WTdbph)54o zAiziAIpU6!8!4%Zo_l+TcS<2XbgDR$Su;4~76^>o|=3EAF2LFZPB$ zliZ3nW>~6fma7Ie@N!-{a>&wVQ@`=JZqcV(`)`n$Q~Mie-gXd|Aw^4T>~93-PyK* z)2B&Zz^q^7J~|%;=}eyfEuH6=F;E)bFbno|x^?TykyQ+yosg%usg+$uI1}o@@FwcC z%nbkVT?)az9z~3j*q%lZPXm7hu;J?w+$N358z^DcJ1Z7guLLE2ft*Ux9ib9!<1D|# zg`rg~qdm|*`&L~$+vrGj`P}RIz9n;}7xONpP~R=q!ThS5o&>Z;uMRLvn^A6;O?-sY z*YDCa?D$sPZ8z^WZB?V>X8K1msuSV^TCjshK~fJDt`dKNctZ# zu>;x`HMbcOjI;eEO>2$ge#`FBRB6v?3%iGv+Lv+wSwX8 z4xj#%UC#|{mgo`F>>>Joe%)QKw{&uKspF zG;g$}wm;v`trn!q2*(yh`IdPzo`m@i^YLcLei6=ARa+)mTkQb6JB%Q?px;UbF8traPj!2b4)fijRN^*;R3aZFgiC=NwwYpNaX< zL=XQO?^nyUl@)aZ966dV_3|#~P5+zU`Z{$LpGy0&6|?x3q_}UX%+i`=EQq-^(`W4A z9AoZgk*#PxbH0(j+1}GOb&hIBopqO6lW%CD4iix{xd;JY#!$2K^`xu6jys`G7c?m4 zREa108Sf}~&F`E1%ia#V{|)@5PG*8M0V_F=gStcz8-uX6N_H?t3;u$a#UvJfnkb)v z8Xj#SrMqYJ&jRzQ94l_oyPj!w@8&$Y-geiw^d$)hapapQae?trK`9C}} zc|Ty8*y@1;XhLxW-fmt5(%7(qjRtH? zr0aba2f!~=nWDS5D>}n|YKE}!QppRpy7ewU5H?Q`Q(7K^oXQ8-!2=GpUwP$9KQZ$v z*Z9l}ICwM=$R5oE8_JX0&R@g2@P#OgSP&S_aktaW@KgZ`KZ7oHb(dFhvA<8NQd#PX z6LJ<}5@|ycUNcxuo>r~kVgpDt?JsOfrCQ)d^QO|wSgBHn-vbbqw`jL8?Hs>!^_#za zXGjJUl&jnCn1F(q1>&A@2$Hb66Ca)TCIZi^eMBb8IkVfQ+=>4X(yxu)c?h@IxN)~` zj26j1em9a$tle0+bK=Z%bY#X{de-RClkuLmjCp=-hD5+{_ikut^4q@SpWkk*6qov< z32bX!!x4#za2(&kUk?`KtsaLW_4=oJ5BuGHLEW0%mCPOguJf(zw8S30ennLyvSSv`CEAX1>+6j|K9IDXppv&AIR@pcpz1dkiV@JP zCoBS9vod}=ra444n7sbQtQTXnFh6Z>>>OP0kmg($iyRq7Un*Bi4$s?AY54Iw+F5z{ zb^xVCLB6Q#E@i{|94cQ}p$=h7sffi%wo^;Yb2~Z2c0v5m7|xoC{Ai9?2Mev<4M`Nq z*-|^A%^p*f)4RRIV5A~J4Z9?j5+_4B=w8aaYEGcOBV!+|p5+H)vO6ZF!@L4VqKd;@ z(?pv#O-k(_EFRx8ogB&ja7uzb<_=rd>u!N&jz6mN3p^g3R7m{m;^g;!6LXs=Sn(qvkS>pq# z)*q^3H?Nqg=0s7$$yZ_p=|cs5uf*i@JRTg{UKpWdkzWdh%hTBC zV02O|e^5~=%2ZA#igpU>JffRW@@gi;Y-X||g|8C8w;BpVTqxzx>qv)`6Y%aWwP?>c zm3VkcW0xTNpO14lA9Kb9!ohW; z1;ZhiLx9Wr+#NTMyL_x(u(qudvjr<@e#)yJg&^-v!WGc~0&En#9pD#lU|$G@`9lEQWhJ5N@onU>{NQW4cl094ptGs&0h3M!TJbJ$avauVS02OSp+@iq=1Q7<%Ag)s{?(%k zFi77A{&Y(5id#6kKi)9$&A!T zOK_+_?sOWHK=(qzFP_mFl7tYnjM~@e!JrKZhRHXv0SvWQte@b6fTq<98n{#MLi5ds zSG5O^M7-ULT7cE)!^M-YaC5-!6fo=E|M;tx=}5OfzT%0gLxu4@ICwBuPSO?de^uXW9?n2Vh#7 zQnDB^XVZV(=-5n{glzzPeB7fc^yQ67iwf4&hE`o5(HuG8b^k}g8@TlMXAKm_(p6-q zJ!Mu&%m}CNdRW~_#s^{4f3vCIM9G0qYvJ3ITcKm`d%TJbxEjUqSItu}p}gfR_s+(E zT>7CZH8=i^yCqhj%d1ddFDiI9Qt)|3bR|U>MKi~z6$SEg7?0~4i)&2M4t+F?{S9J8 zt4c+&U;y`P7Sx%;iqsG?veKieMYI>F)G8a5`5_u_ZtrIm-UW*znnh8+lxrwlI;oPX zz3;fzd|loVGqpF3EPaBbR!8Np^jY{$kM#2e6?)D^MFgis)sm# z%E#OgM7OF@!tT&A`pLLTT#g-AdA*hZSdT_jpBA2VKmXhoFr%nAmfY7&5ibURnlTgrBtC`gK0 z>G@wjaPzf7^@s1M{00;x^H`O7!k?->Ti*5 zt5|^>lcF^Cx?7li{tRO-T#C4ETZn(Co3&|)(G96NYuDu1)d9yZHVVRhQI6TxD2P-o zkxg`RS(vtLrJD4^voIzATYa&8g)L4@;B`>v2Hs}zEjJ2mO^sKV-}uZ70*oRpimU`Z zZNQJUx|RXW5`V*i<$ofxAD_8IdM&J-DK&vKl4C1`2&QkcA_m4}gAvsPcJGXYx`W-@ zqbt}7mj!NUQvPYe9TM2%MuH*2tPZTg7nsVS+aF{&hbaY7OGh_Fx@;F>n{;Sh_IOsL zzQ=lR^K<-43;Hp*|JW_|s0XO`TZO*73PS*_p)z1sYzk7a)w- zx9_}!$axBJDJJP(9aqZD3a>HX_yiRm(ZY{|4m!!h;O!ThCC`AiM>?{E^K}>VKe2Fe zF_K-x2p5xP+{5TBWDwRLqh`9riP8=>lGS7?uuxrDTXTKwuK526HMnU6{5(B+J7QM` z?hjiv0#~nq9H0KvfM3SITX?0no5|7n+1s7(!UnV1r{Ko>P(&(hd16$4i<9BA*I1${ zQH8$uJj~R`PB%~5dR~!>AK6rS6EUNyykFw@zg{Ao!zgwqDd0zSgqrA$ynMITUIn1D zq5VlSQ7>TSR5Xajvkk>yTy+j0XUq)&ab?bBq@BgGro=iW8mV^P-|U++nbnr2evwsO z>=~0FTKw9vchBs(OJ>65Qgt^LGAL8;I>8#ShIBo-r{&{4ww+qz4X*U%Ke`oKM+Ki) zZFb%Zv=?te-Auo)#mmr^F-kQdk2eVH4Qv3SVh}_$I)Tcc9!kIMXMSX>AXVjE#oSD1 z1Fe&np`mN~38(YNVML>=ZjS2x&Ub}XndNGsE|1&rX|I))jxm0+k7`JsDKm_tq&tgB zyR$K(Lue2!a6Y`r&O{fz?`|P^%9rJ^vd#|Z5MuznJapCvO*0fv6fhq34CxCd4?8~f!j#rd}CZAg#*bdAq>u+6V=!{!4=AKbo+Jk2>AcPR88bzo`Fbo=~uIy0_p z{N3xZR0ZU^1j-AqLbzhjfo3t~)jB1!bfH6dT%rWp1kd?60js;G;J=&957Z0p;5-Eg zB2^Sf7~?>V{RLNdY%Q>Ecjo|nzi>-PVyLq5pPZyMH&0j7+Hz!luB!z_zAO}XKYJ|B zF$B*i&o+?s)FPE5WI1b7=PC%Ur_&%?3vEac_71Yzw=91J+3hlvz+piNbX48ND9h}n zU^QbD{I+j<6QW%o()Ti?G&n=6RqkVLL=G5(yoVKq^=uhL#QjR?F2xs~0b^#j?Ak+K zEV0lJL=t_E_<4nsv^rj0xPy$i?_;W=V?7a_wnD3GfUpNoFTRmPOTQC(YFWdGI~BE)G?yqlw0<0A|DcuGfaV4*brwHn9PdMFS1t} z0Tm>)R__^+@VF6;APTyR1FNZu0B39`ORk<#8Ar^Wa!gHfv<_nT{^b@cd~M00F{dR0 zkOIkfnhgrK9M>jM!okLgvi*Vg2}WeLoZ5I z$z+eTk-I@{^kr0$yg>)Ed%GWc6Apha47KcQGNtIRd+0TTYV=KjGUy;|`a+s>+ooJ# zu~5{SV00F<@SJMslr^ZMjZne0uY9(Ga)x@mU zmd0S-ymBx8chO)rEWVW%O6lz4#_sM2180OO=<;Arq)hGjpI4Ov{DKra@hvJwDhzRv7;o}kf|8+1)BL^u(Pv+{8#@k{@!P$cXsu5lTLm+cl)gjE)oGA z?tk}+Qa07+8r?TnnOWW~jpq`8vstpVb5elLPpPZ)v_uA4;O{V9?*HoLcZ!86R-&Av zuYHKS8E*-a*_g~2-D4$%2eHH;B-rdu-aj7)2YOv-Y_fJCK+B+A4Ta2MFM5{|Y%B?& z6q~~;oN(`NA<|)-WH-ApqN(YPiLEi5E042a#-k53c4mxfT>ZAzYD-oKiMsmuq*|Dx z=^oO;&H;(^bQ*a&c+j$W*w{HKgBuM%tT??(HvZdxZkrD7%6?EP*1s*e#tao)D;A+Z soF_BJz^$<9hk8*SmqujDbd0tH`u}4k{_~FiWZ*v;_)iA@|7PHS0mMR(U;qFB diff --git a/bundle/ruby/3.2.0/cache/claide-1.1.0.gem b/bundle/ruby/3.2.0/cache/claide-1.1.0.gem deleted file mode 100644 index 6b0fb2d28f319e5b8d8c1d8e837d35cb1e4682bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28160 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 J@c&bR{{?y3$B_U4 diff --git a/bundle/ruby/3.2.0/cache/claide-plugins-0.9.2.gem b/bundle/ruby/3.2.0/cache/claide-plugins-0.9.2.gem deleted file mode 100644 index 30dfcb29e157c01f99b92b8c1d6ee81c9397d887..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20480 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%0AS{hGs-6q+Wa>u2>KZ=x;LS&4E><(jM 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

LDSdgeEaiMx31jHg5RTioP#J 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 diff --git a/bundle/ruby/3.2.0/cache/colored2-3.1.2.gem b/bundle/ruby/3.2.0/cache/colored2-3.1.2.gem deleted file mode 100644 index 9757ae322b01983b295cf253b34353b9157d3498..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10240 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 diff --git a/bundle/ruby/3.2.0/cache/concurrent-ruby-1.2.3.gem b/bundle/ruby/3.2.0/cache/concurrent-ruby-1.2.3.gem deleted file mode 100644 index aebe5b25331e9845d10b1c5ea57fac81f4d415cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 348672 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�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

#q#BS!!TNY1_XNP1O7JlpU#zsGpgz%Ix=817 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

^ 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 J|JTAg_#b`L{}ggiYqTSh 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 diff --git a/bundle/ruby/3.2.0/cache/danger-9.4.3.gem b/bundle/ruby/3.2.0/cache/danger-9.4.3.gem deleted file mode 100644 index b7d4b3c41846281c84a666dfefaa166468ed8ddd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 88064 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 diff --git a/bundle/ruby/3.2.0/cache/danger-plugin-api-1.0.0.gem b/bundle/ruby/3.2.0/cache/danger-plugin-api-1.0.0.gem deleted file mode 100644 index 306c92c226f786e89490009f0687960939f7e67e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8192 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�JDRVo}PFA=t49Cd~jEF(8utQ+78=iF|?}~BKWs}1(!|g zY`imXuf{=2P)?}gu8uYVL}C}QNf&$yAUSh}M;y{t6mbJ^@Fq-^uei(cVLMSX*@Tt` zzdL|(7%eSNS=(}a^v#~!Oc0q9Ry+ihsP^Qn7r==?07 z*=UAqp$dX@j=PvvNUv6U}KLH(YUh(k7K!;oJF}NDeT=yZ)(IP(}0x*^9IO0}-i$ypfS#*wGql*+U=l_{$P?v?Dwx<{k%u<{Qc0avxk? zyIBd=NZZV|^S(QuTM9GCB0T-LuE`+#ir=K5aE0jd3320cv2t+PR--3(Ig$gnDh(k5 zTQ)vSAlMFrUK850d(%LL{<#IgkE~<}kH-E?yCX2rUnMZ7d7EH9koca%R!Lr?BAoqjSEcl9>$oK5MpyDZY##fD(X-epu45^CEg3z`* zG@J8>Uae;k_)zrb5OD;$uv{2M%&Yo&+kyAdY8#9)clIbIcKSRU&KH2aWvKS^+59rK zvU|`>b)M=p8II2C=jUSsx$e8S%1}ReEv+Tnwh8#Ld3En3hoLBFUUXV~xN9##qAtz& zGj}Kz?cqj1QB^R$8K%u{>PWi>9K6pLBT>LnxIm$BMhk)robmDgtbjD9W*r`pOhBB# zmV+uk#LxjE%aq2%&4NN3e!ewIea&}5Gg*3ONM4(^Z%w9v*_s!nkM>^E9p{NCE3Mg( zMc6Gx_tE0go7BUOD{iA);=T^1f=;3wXyA4!pPdt~c!1h6(meNay90_r_|T8C{He)Q z6zT%FF?@qOgSa7E3L*@&^7$%T?nW$c)Uo5^X_R2P@C7N(73EV5PCFK&eqqJ#OECE3 zG4R7z^csHu>17p&R6T^|MfFd>!dqGVt!|C%g-9@!XV>@j~`_s5u!hZ#{k0AqJGC z`emW+T+#aD7HHC<&J6P$4ReNEEO@&oVi~0@}1U8QY5Ya8e>SCSZ06G z{*5$-!hf-cf&RCm=>)Sv-lk<%r5j;ot%*Phwct2|x1hz*UAAaVOmCiut;yo#<}lYK z&0?07q9nYgr2v)E>W&_ha!K?I-XZSZY86&!@jo#^=(18dT4-D(SSNseE|hS+_z~;Q+`u zr(kOy-V%|W_A^`4)3Yo1K7fc1N}*j zWb5-8CVLLxo5?_`67#&zZ(ZA9BmQ0$Jh1KM<@6P}{^}q9EeddnOJ7V7PUk32`Q2r_ zGT2r8=|K(LjG5Mz9Mw(!Ak z7zM4#cH=^b&|mIBPBV0T3})ywevp{#!z@|C^ao7M*IX|iVz~PghgU{yU_OyHGEb!O z_pkf!h}Ya3^?%Nx{%n@~EO3K!9n@V?Kg!(e-?S$167X5jdbt%w*Xsb&2(Gg5(gQ|2 z_!f5f?sLGQ)a$1DYY-|z67b8N=Y_^C8?fSPsxP}D@1e;1ZPcM)2RU>-QqY@ME{T;Z z?k=F=-T(2o@Uyd*&4VELxyWrTL!6B;o*>is_+Uj?R=*?07Vr;+F(w#XEJ+R+~P!x#n5S6QgeH)u}e*0CLYIpitsynIduZgZnP<7@v> z68xUHNwVW_;dJHT7=K=b1<2iFJ!D2P$em-M^V$_30FqRPW}HAk_Z4FvD{v?Q%pc&w zv};n(e)(R8)}YTf;(8_U`U{XN27d_)sb~xFa;SBDzPEnY3tTD?1091QAt1nDXozc4 zLPUtl{}#o`--G-+Az*G}X>RZK&C!k3+tktFU!wy1hcx#8p#Np({@?V!+`NBP{jLA~ zzpzpML;q!&B%lq=jw1D%ONoattM8z9dU7HV%&YMWr0(K_t#D#}2R`xWGTPcU-VNw9 z7CSSwMe}`r>NPQXR}I%n4kttpE`g43P0?>$R^Uh3e7z7pKWnGkCthwvRw}lo%USY*ZA7P1tC|0K>xfu(tJfQZj@bje<6bJ6eJquc1TWZaBt~ zf%dIvb;*uKaE6=Vla{Spuv*C{ppwBcL)L}PVc?_cxrA;ZL$`*bEpQwu`+ErTFrO>R zwzhCFufjsupF$W*A^Q#(>c~9M%wyRdi*zAw)1ZjGj86m?J<-Ek?Z?$jxXUwSWp6x0 V@n1amxBZR4-w6DT!2eeW{0~$kg3JH_ diff --git a/bundle/ruby/3.2.0/cache/danger-rubocop-0.12.0.gem b/bundle/ruby/3.2.0/cache/danger-rubocop-0.12.0.gem deleted file mode 100644 index cbed0e02bc1ff5438f77b90cc7e4f29ccde22b66..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13824 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 NN8sNP_-~HD{{Y`;2*UsX diff --git a/bundle/ruby/3.2.0/cache/danger-textlint-2.0.4.gem b/bundle/ruby/3.2.0/cache/danger-textlint-2.0.4.gem deleted file mode 100644 index 0ca953d8f80cc6ee23c409b93f5f639133f877d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15360 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 diff --git a/bundle/ruby/3.2.0/cache/faraday-2.9.0.gem b/bundle/ruby/3.2.0/cache/faraday-2.9.0.gem deleted file mode 100644 index 101f508310494efb3ef5f437d7876ac01f74a9d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 71168 zcmeFYQ;;`26!5pU@$5cp+qP}nwrxFY+qP}nyZ^Oq+vwZ&;_G}j?M$cBUi91qC&`@T zWb&I#a%@dq3{4DO4C&0hfc~EnhW~_xg$3w;P5+bsIb~vCX9r?rVP#=wVq#`yVFzMh zWM*My2O?njf6Ac$dOdo>mo4!i6eFA2S))b3Ry`eH!BBRyiXo}S#EE|k7 z9Ggkv^AIH!<{P)TB86uHT4VMH=oO?*T~cY5M<+-tYlRDBq*E66D?)1J7t{eL^%kTD zsixQior0vKaJ&DqG%eq{kg?Q7T7?`77NLG6AvPAO4M6NaPW3~WqoSX!zP&m=96P*F zYt$@1Bh-heKY|^~1sxSK0^C^3w7vKlUfQc72vcEbXsc_G&(c(a8u_}ma1BZ1&pfor zH4nV+FX^M)_CimiH+vAs{90nw>teP1e%z(#4qB9rURmuJmtz_W!O)hlSR@Qew>wxI zcyzhe$9_F`ab!wGZMBgD6QMK2jK_SkxHYp?Ndw8pv8Gy4bVoh0cr+E{)(y-5E_Y9! z$-!mcz~EkOhfT?^s^j~2#Y)Ex#j)Sk@@?z826t6Wy|xXpdIPaT)9**5u*%6ZQO-Lo z8Q6?^T?*1*ZW1clB<;w`gF*i+{c%B(==Op@L*&I6wTe5aR)V38E#(+t2%?G=lXpvp zv4~k%nAh_Nt#P32KYiCy$7`s5&?)C}tO(P*&6Vy~8IFNO%9ehcWXT?y)hM#so&XC> z=s2UnSTe?}c71NnTiq{2oZ*yb5et>PRs`Bu2)0b+owp?}evSY5gbXb9rU|#7z7+zM zrC{+mOdN;1kKznt(|SP|@g-3{d?AbmYk94Ig9{>K9Bs04JV_v!9{ zPXo?8LRlj3gS)3BdGL^?CbPiTKhtl^98&;cqa63vYr`ld#WzbRb>ac+fkp`|W<82@ z2EB@*02-|*GOPIU%eg_~b2>g3#37PLHqCe08^3wF1>}u$C>Tqh|6l!}SM1H8eJnG~ z{a-6gJkd{@il}$Z4T^`;c0!*-sM$o2J?Dnc0`PIKam}3Oic6`@5ZGXFL_VpChM5)N zHNzeu_)Xx>QM=P+0A*Pc>!{qUubs9Ou+i3ZywXT-groDEokwLCNObK1m}; zW0;(`Vv0f&4z-c`Zx+iy61y7a1X`T4A#8I(IfODQB~vw07s%aHo+AjTS2No}^*iW=JN&sbns0qy3OA#=^U0oHm>*Jpm-#d109 zq*L38V#9!7zyQb`f@tsobQokiqrX`gx@Il#P|fV zl+W5XJg|hN#k=7|IQwZTn|jSqa)dgrEFWb&m7~` z{%E(+V_$SULnk*LQ|SVn9i3ON%;Cjx9Q7foOP z;<$MiC**Kh5tH1H=OJkSf>Yj>Rq6WD=sF*ZJm|J4fe zYgtTbSy-2}NW%K=_hCdtqXKV}wHF>S1s$R^xYHTdd}nxE^u0ik_m-*OSzPB*do-(s z1-gX^GbW$zxFpA-%c1bY8DSkS#C5NA-J2~^@4_wj-YVGQSl#9e58=uJ-+49tBWHWr z6WCdlK!rBe4=EzdCV(p*-PmbA)!4-5SV5X?1%2J)JqYnZOwRyv34&oi5fT$n_~&yQ z1N=RO(fNJW8_dt70et!?sZlVG->I$9&{{F?KN1XoRS`=aDAUOyA`b*Uo@)dgYh%0Z z%&V>4o^gwIA8y$-?1?$hKsfDg-^ah<>vspSjvC{B9aq*4Fzf%+tEy4+@~Z2h&Ok`W z{e!~52u03ZhuAb=I0TTm_+=Na+jT#4y}Y{dFVdb7KVM&G_ku@i3z(+_x| zNQ_|lP!ekdcJZY60#joR1@|gqgd^E7BI|+T%Vh?RFV*&-Gw5cOy?I`pMmDm738yjJ zSCQHGo)LCH;=B>x0fG#C-|FuP$oq<73}Ttt8xt58#GKosip3^+03wU|j=hlB#a zoqffn1wahNi-q)!F2Lr7gZ>EnmKhGx?4KFojG}&90xfw$z4GG#iqAyO%O1zEr?MD2 zg=mWY^`}Oc1rptTSMXy+G6eLI&jX*-M^Q(Zz@;O0abQ_K#X&p3eOfXHOW$fSRiW*( z6p+2SBJG5~E#%3>3y=1b>_OV2K`7~rJJS3->;J_4{(brQ`y}De=QtslvN|!9El1~o z9|*`5-(RclT=t1;TEPcqHb{4Xkv==rAu{L-s5#vsKxS`*QN||x3=-~41;B-ZczA>c z7S9AZHgMise4fxoR(>n4>En9))my#R9@+-S_`sV3VWYAxsTgI*ki$sJ^X8{jm*ynm!Px$^ zuY(CXN?`1C z(-_tSjyOsk!Hon7q{|Jjt0-3vaqi-S23gvEy}H!Se?#pk24(XS2O81@vLaANBJ1#CW_tLQ#~q*dUS_ zjg}G1kEuchxNu@w?Z zt|!MUNAy4*=_*pMrUdd&9wM|+*p2!Irth_w|BNiTh8N>6$v3$rLSPj8ilrOUeqjc(dM@+-7c5r@cV57_J!eMhlHchPf5@uYUJwnH1>-7 z%^2&)6aEEVKkRJaP(RJ7V|Li9ZY2zG)xfkk=}FV`fkxx$jOXoD?QxIbk4y_wlIy(i z*7+eIh|AGL#^BUY2<9S5x5oHLkF~a0xz4+dn1>c=?C^gsi0Fs*t zhm8oK^&P`c^^W8Z_4VbA^<%rKc{fgc?H|duPfiIVGeOZby^wdV=*As`t8&vJNEC~n zqF!-}6Qhvm*`OlR@WLAf@4#t{dDSv2xYzUw#laPKmK`L z!q;_W_by~hBB(4-k$FKvStR;BV5-2FJ?LGsavsVQO(rcCCEiLyv9Z%6jyAOAJ2Qyj zjZ9VeCYiNi{|Qnn5Xx-!)Q2{8)~4*PIXOJ}AgAb#%d%DRsOYM>vs)jH^x(<}AdxE< zO3ia~KFlh7x8HsBvuUe-Z{xT8q2>K`^ZTL5@#wcTA~PiR+z-5xvq7oFqzL`#pbvA; zAA9kYHQlteR;-cNTFTT@q3)w#JH}KqPe#crsl654&KVcnm%5Q=Z(XfU`GW9G|BT+kS1eDQP9K0y>Xx#B9$w1itu`~4h||>vitm{6_c$av4;>`f z_rRbO%bc@iK3QsB4#gR2)~{gb!t>;;FBi*Nj^(OKN}o64AUVM}f@GOBWSiEl(wXJW zn>yZ7CTGo*^~uv`UZkYwAeNwZ2$#rz5}>m2kxb*iJD$u z9D@c&L)AIK9#3n0;WGGZB~b5~z7E!+kZlbd!IQOy!p!6(xYXA%R|B}8!~_8r;*lUc zgqbWxb0cVA%MMscm0X?oX8o~(dbwgnbmf4zR-k5*<;=7Rj&*QN2e8E5mMbA)h)|3n z?1@(=w&-ip7Jgqz+os}~6t_)H6n!-Uj9YVyVQB|h_Izn>)VP!e4+-Y2(PIQ3?RM2~ z$h5?FTsgE8$}eYybO-_uFFmxC0rWr#m`Pjz<7zemtr1`)eO1;C1v;Fal7$Z?D-}jOdOrs&d zFDr-xE@PU>?BpXcUJ{GE{kh#E$U2X2fYm!l+bW1&up6%+9KPubS+ro7sjsjj{i@uL z;h0^saVP8)g!Vu=-q@V&oS7T04ByC^A7x)Q|N81b98_lm>FJGxJIU*Rsy|S42b@@w z@D+AMvSd#^$p+hW@->XX?x~v0b}%NH7=vzDP^WAMEP=ysF;Y=kI}Z8Pok_2;fr)!S zisaO>@(1Vt!`u65`>iSTQZWW#do!L>e2;@B7n;BKhD2dVCS!$lpWtcjc{kgd=s_6l zzjyH8CE$b-vnn zh-*h>gIZ#B?9O6(C@nw2?B!w+a(lQrJsy3-%pk(q@w{!u{(3U&(CenD4e>t1F&kfk z)+Q*a}>V+?ejy_`O1~Io^PJCSFt=2tg#~@w`~% zi4hM^Qgi4AHKt@)S?R9(^Ve&T%}lPvzPG{pG!HEkSG+EWL-k*HP%-NoG|(Fo+B09S zxplB*#JvhUY+}C~CySH=4udQYtm2^dWB%0Lfbzb6b`RD(2i3BSBkze;vJ?_aD^m|_ zITJ4~=9EVvjI(vWuSOcQ!kPu^sOYjd7bs*GA#6I66;R%Plr=@Vrm5PPYL58v+>uGR zi#Jmw7t!sL>8I;zjX}=>eRN>#8R<1%zwTW>|FMHnl5(65H3(3+d#RTJ5x~$?P={Fc z*=d&zX21)xj@z_0UB#?3;3v`%bHvognAqTcNO)Q}Lh1pHSA^{E54?%iI^hIri`tQS zmNrQJW(vHGB)j6(h^6FdTHdrNKqmd;i_RrtJ0_FR5?QSaH)B!gn zk~~xJauDx+R;)w9Fq9Z)uy(IIijJuC^Dll!Tln)2+&V87JQBaIrg?+>>GH*c zNb+dDZh=CS&dNhC)B{Q2_Ymb~E;%m~f(pp|jOLNV54L_jRp_ zSKqa9AoN1dw4M@TPTo4*1rGot6jz||=Pq(z4GYYh5`>>g_0iGSmaEz)L?3okw!Prw zq6%!V9ATPfvq;D3&YGE){FAi8Neo^s;`bw4_~OcB-0_^!Y49MlF^k*?+(56Nte+c- z>Z@FZma3nNma3Zts@Knji>tL+1XN*y>b&4oqHw+a+H8ptSCoI59_e!Vz+Ws*wc^+( zk%6|MeAe!$GG!~5qwT!U-dV1?o&)_%cBpN&ApFeF{T-Lzbveirg$qXq~=6unIB%SYQWJx1VnzzAuC8 zZM#&wJsSg<+gCt^{@HOU4||~juaO9xElyth-24!*i|^7VOZceW%{Rhr5-n3xe6dHD zUA-?aPIe1H+H5M*r!;WgxcwQ)AY&UQrJySZ6-9B!r&vwrMzfveeyq3dsp|igHLlTY z^rsLOn3nj`&o|8rGimg%*bRM{WA;kefs#Z7u;F8*wi5MwoCo)2@4s-n|AgQ;(HZ#1 zPaS~w4!hF{Wr@EOoO5q}JaKO}-q3vQx((!r;!me{gN-F(D!>hb-Yf}FvOJAPN^e*l zKKl4@Ca*qEoAN{IAqpJ^aG(10KMdPD;tG_1@WZK7zO(9p=L`TYG!NGd89nFr_Ye36XyK)2~wkY5rN7D17Eaa z&C2fO3URN&vyD6P%J0?W+auBGsutE9-x55p1_m?u)!;`i zUA;u7Al$n2=J({hj@k}<;JypRP-2v7HpnSr1v9j5j#P1MCkXV46uodAjHWT2t%=a&(Y7HG;0B1mw4@vHAPm6)NfTK<8H08}G zs(WUyoWF3&oG6A$FJVMFkLqu_=ux$8_Q;5@)W=g@!>Lr*fWPH?`?T(r+lL(e6rR<$J;9dwUhIM@JuhAY=VKhAq+N7C$MFZ~kY0f5(a0%E9M$Luaa~O2!Xk(U9a3j~kq`epIOLti=^>_NjB*myj-G#KR8f2} z5Ti)&?|O}wSSyau)29mJeG@F2c2K9W30TeApsKE2O-&7Gw?~jV*orH%nCs?bF!d^) zElg}Ef(O4q#e^0qQoGxL-E9Nd`=5?)?PTdS*2H1XBgl$=kVNZ39O3a4)W0}AK8efd zZ+FSr5rTPUcH(-(4750%;6?+B`XuEOP3ZiwJe-9MLlZI<7$#(rM#tR!=Ly9X6#ks* zwsPi?4uX8cDd_uvz*NC|bbYU<+5$wH6*hv^#_0T3DFr2MH|9dx#zB=UEixv!Ni2a4 zA(K1d{Pu`nJ>hdorV=bHY`F0+zEF$#o1&I}SdB6w)9^iBJM{iw=>^;gYt99z5I2$3 zljo2{ZZH8T;T}h{=N@VToyef^docX#qH*KLdDwV8%RFPU&4e>wppJTCxjDQ0kkq}Q zStUeZz73#&Ly2BQL%9_5Mc7i1vzK#3pQnnLWIZV%93g)M|9nNEu;o3?BZ}LHBKVMK zGUfal2YcM5)#06?etDLZNdpdO-y`#R$Elv#u?-Cu6V6}!^Quk6ut`)3*71N7NP|{p zm4Q9wgli3M=fsg;DHtYQ%mP{7IZ4O2m!rMA8OF(KUyfz*tWEH<7p>inSTB5m^`d2; z;+a)n&vV^R7tVPJNCUjXWjd6c@~XuBZBe|3kSt>)wr_pl=Tv-qbY!SRP`KqF?Pji* zov6b@b+MaK=4UCrcp7(gg1G$I!CxZ9OT_(jRJb0>>{j^&Xek(nJ^{CH^khUarQ=Cn zkXB4!dvUZap!eJJruyBy9=tCPNfGsoUevQiQ{3FbnI&c(|Di$}y`|?M)63SY!wX2i zgW#j5Di=x=y{Q?UTbRfl7kD5+gS7c&WFUfz5#>Depd#aBp)~xOHf0)XhTOd@de|#@ z`tH9LvIGoatM$qh*ze`J=J)?VuHFPO45{UB0w1)596b@QsfND_4Q0aH5(d(j7UKT` z^XZYXD?$}pM(Szw8-*Fu2k_^C#$kVY8Mz3in8cPf3KnPBDSB~;${WN+r))_e?#kqP zVWLU1@y%-%&S&VE?W}(*zz`!5M6lxs!vNpn5q^IO>U|DOBJRYTGD9xdC;w8^nF-h} zKR(buS^k^pq>gxj0{CRRvXfrX^7}=LJg0OADkItp04#X@nvZn^RH9}`MS6eI9ms$t zxj;yYGAP7qH4|uuiM6Q)0jErO0g;rFF!|Pu0@8S$H3eZ!HJFATR@74Ehs{^&*7OHH+BYSzz>Q@AmH1+KVN4v z`x7_%?udE~?UAX{oHt`$#%^wI8hDv6tc$^2cKdplP@)o&zi-}vT z$Qz-eMna%=_FyfPAhLj(oc(=VY?a=fv24kV6XgL7@tONJ4)eGwBZvsuYb9psmY?h1 zQ%4klh>1jsq&~T0E-Id7)mVF0!0cWVM&0<+6 zHkAbCHV3_hZMU6Ep>(F|kY&67nPCC-Z}4vZ^m#42dHik@|Mc!6|Ktu|bfKR=G31@D z$#5Q~u3^MCI6RAccv{Fdhn+)x?`Xw*I`*{S#{j+xWn>&w1w&W!G|`-0*_4H(Rr=IO zh?EL#UTci|Je}@NG1eCeMTEh75w8c!FPva0JzNuj`v9lApc!T-%K|S6(~$wQ5&@4^ zv1o6E&LSqpxUO3jAMoQ+tmSO(ffyt5Y`=^XVS62VUQM|LI}3tgHc%!GLI2`?i`nd{BmCH@RwWooFt z08U#1M>?$sm^l|k2rgruM9u|%@hLj^fv+LtHk{?6XvLb-xLOeSL_-4KksvX3eu zzbL-M-!Xa$tr~tJ>p^Pk5a1eO$r#hxQg{My*x6bq0KLGR58DWl4?^%*6|97eaZoCG z7#*VvUiF+^gR0+;OW-}q#&LYBS%sNrN)l$9owIEG^PlO6yCV&1jX@LZ@dPvH<=u?= zT1P3QxWodV$uyrowpGG;;yl7Xz5z2y`Ho7%*V+q(CY zdEZ}Ccbwj!L{dl0WFKR*{s1RXFcA`F-+ExQZ6({XnwJaP!Phh?t;UR;G@@Y39%2EZ zZ5oZ##3XkOiO2+t|Exks>L2RG2}Ll%&8~tUs)i<5LVXwEdEVb(c~c_)8pjO$6DLi& zvcmluOjuRLi&@f>kR-2Kh+6V1U-Yz~Cg_zrPEhhAVI57~J%p*kN24>&MK_#9Fmo7X z{614~KS31S`HK0ym*P@WzWT62tnvUfWR{N|O6gX^oO2T4El4L7!seQ$`xx)&!gU*q z;PO(Nj+!Jx+$SxMlmN~a)jVe&$o>M^3=p6bX8BUCrQw1Qf_I?=f^z@_u|( zj1V2RS=n(U343LcZPlGi3pD5YlOC*jW#b8HGx}`_g9d_e+#V1GWkoGu*(bB9*OZzm zX&^7=+?M5sVa^O91~7ld>Zf|*nrGmX=Z2=)@E$N2odilSaRWi}$`qgA3KT_0Ea(4u z^4W578{fdtdB%f1he8MU=?uH|xA-n3lc!natV{g;`c z5}P4_y-}Q5hdQgEv7umTe?GIJct*DMo>=-ZZE>kNx zaE@s6%baLR6!pnL@3mROirw{uJ}00KIWETLW2x@f)|aoOwFavHS117p773j)u;HV>ELEuE%v z3*AVC31z#w@mUCY)U^1H_kHy}&^RM|Rxu8HcJdsg;NSCmQWp>#a7EH`SZfJV1gn0N4*(n!iPSil^GbnR8$XbJvLNf^;f=!bK=rnJn@r4DV1+6Uojo$l> z!NOTPp!v9OsE6Wmoy)eWl1LYu0E-T}RrWLfv>ctbuPcsBmBodLObp4XX7Xxz- z(0}95ET=$%L_pTcqtH=gSwlrMuX}eEQ-f2OF($ISnwaT9;Vw(y;UUN;z6s>3BK5T(C>UAHu@!wqci4iZmAwpo`J@c&>Ws}==N8w-tY2o@-s-%Nezzc+pqg!`vX%E9l z%yIK_U*}!Jc?q;p#t`STYk{BlpML`+x|<0v%o(5N1Zf8!59gIGE!piN%}t)dE)TAs zet;tge%7r~azI09iZZ52Twh#`jCb)8N!ZO)BEvAcH5u=sMe^|jqtH;{OWyWn;2V@V=Fusv^ z(S|5{-a8z@TKaBqkMARSY;}-lo+0Xa{)R3>%bsXK!&)?wgve2%*h3Q$vse>V)eU?& z=BL>V2UFIa?ZW|-57{EdhbOtYE+|vCico=7&c*7d_A!xQ!ZG^fLDZOGC;$5qR~g&$ z`s2a%2P?>SZ_bqwtnxTydSBIbP`23|LGQaZ!neh~I1G7M3kPeGz%_Fa60(`Hw6&kC z7h%%i*mZjtT4VMoGiE;E`>*6I)nkhP&SI~Wc&z0PTSFmitUsx`09i{T@Ey}?bG#tw|mX)On!MliETAGGF|@@V|$JeDIqGG7r9i z95ze_p`?E~q9AV2wPn3Udh_wKHk~MCQz8sGoe!5sPay}te(MlkUUqSAe`A;NZz_N5 zSM)Zurk4CI?Cb1(YJTs;zl7C9*RMrv6)>(_TE?htUHmx*>yL(z%VFT}^X8$yOxNN7 zwx6^xh7FM_MOy~~@pJ(ZBo?;(aU{IJg+!jf$q<$<3`H2&PdiuSxp8chk>cmeobHWr zjQppPnHhAkLxJ+43)R9L$40qv)4CKO+F#ip{QzVp!Z*eQfueadT+pwBYLprRef zY7?L7(;uk%nLGe5w`_hwXlm50c@bOW7;k52qktxq>UPE$5PkkxL_tYdOA#kp5DGL7 zT&pf%q>cjl;ryYD{T@E0#z0P+_(Q`=9&nxjNw3Naavy1Y;IW!B3v1&(`Gc@v_Brg7Z+|cEW`7?Vgt*~>%eMaBC(_O3 z;p+e*Addi!P%eObCESORvid20=Hl4+d9}AZFd+|rf3SB1Kj;H2;6AdsU6d5u<6h?$ zH@xXCZjTuEYWQ}V!X9Riu+z;Er1+wL+sA1+Sk92V_Dk)9G)C{P-&0uNwmWbYXW{1^ zX7A6%_4acd;oB&%Zm z`^_n@H|XAN|Mz9yz5v8qh>+*50l12Xi&58~hhxV+e7h*vcq<-5JPZi04b=+=1?lY7 zEU#cs4fa$dAKK5)y*qFA`2FXGI>0qL=X!KzGOzdN^Y$W-G4tpAcJ#Ncb;bG1zpCXq z<@cBIIZqBhyLVm`BeSZUzS?cf>CC$-O~VjaxHR+rS@io#MN}q7m1_RfoAZyqDYhKe zrU+xKtbr=C%nH)8s|G44!wk{$#{yhYl_vxHR^%^+NsqFv`s5dp1Bbsy!!Lz>tUK+DYdzg;x95iM{n#!55#+jb2xrBgOi-2Ny=I@ zvN%AR*Sv!JCF4j>nLjk3Ne~#MCo% zSUjgo`jqK2WyccY|GTfANea&e*5>{TWlBa<@n zN$Fz@0LZE8lhG!8xstGC{_qAfKMo{^=0~tC{&RvSNYOAyTezukpG|KJr1)DKce8YH z#I2^GkELmE@0J-{W~dW`H5s{S(3TNuif)Q5De=t0p_q__9=bszCin zs;e>`j_jb6E_DpA#d1aBBR|}bOy?mYL9PZyw=)d+;xH;NlIQ?`hXrkF(^30hoI=tS zDW2Y;F$otHBHcN7+J6r!5#w8gn29u8Z%-);!qKIdMIR6s$ciI;^E0aQz$WZ{Xcv+A z3U?m3yGHaBk%{=?@_8EpFcUS~K+1gIdB31J@mxw37n2oXQ5u|T*g}_a#@rVFf-sF7 zGwVzAIv)DTn5^;`Crrxj0M!J6saSOfVgjSGfC+9!=RW4m73~+PeKOHtkm|%_%UQLbWD~2WQoe3Q}2D>U$kf$ol zQP%S3TKVv}N+D5P#I$~}To2fUCft{8!T zqmgW>ax}OI^;t>|7o-Y;6$}EaHkMnkG0I&xWf#_}61#Q_RtW`L^T5$x)T-N(b6W#x zE>>7LX@mjCs9M%8;b+M2!&u&~_ar z->}Nz^e%kaz2pG3bIoUB81h6;)%Zyx21qFztag0O05x)9Hqo0{YziRE2F@-aZQ z(@o$}2 zV8Mf)%xPR{FjtaXse%X5(~-)ge}=_qID9C=DN2bs?<~5~@<4@YL#cfqK4Z#@AmRD= z40zdBxqzJm1=%l}ytq-X(uWGYsDCV1nVEfS{lh zIksJ$ux;7&k;dRn3x?==Rb^gaMU9vG25*biuGb_7q{He|61bvwcnDRCPsQAjz@ zha0U?;?b;1zoQ=$)A!4tgKnRaGDmmg&3y4&@X{9(<9706 zZ)ack-}Ots|66~>lTNi({za*DO+`wiNR~Vq!%g%1pfFKXMCH-yV}?H8O4TvlcT{)^ zL1`b8vGotoGth>?`{B~Oj6xaIR@oc50_qo{kKj^B7V*^eQ03qTJtq8uL0DHiG2fPx zy3Q&BsD<8macgtuS77E2-TCNNJdUv&1*&`!4usWwO9bBC`EA)U5*QtSd2UA&2jWmB z{1hJA^P-k3dZr3CoG%Biyo>W<@5H?c4BY_PWE2XguQsHnJt?lZaS2{u#vk3=6#Lv=PL60@QRo`Mf*SFJ`N4QZ01?iw;KZ%O8& z#gYj7h!-kz`?qXN!A4HyFAQ2d_Q?>W;`U*(G&OlsM75j9a+ZUYy-VBoNY{%ImAeLd zn`PZa7^&X6k~mEurttBKwsf27@Yv?OEt-7w|`fKi}m+7$3xh z5{!R}sN!>LTMRLERr_Zdwly}qz(Z)c+MLJbjNjc~*2OBtksbzaqqqHMSi&B47UST9H@-n__fP5h_DV!BaZ?_*6qXT7ykQ?;2bsYZ9WL>M<$FP<%ZiE={mpy z*Z$VB`By&gh09LJ1Z=cBqwFbBKey&fi$n^l__&+NBcOy#3UO$XH`8{DxBlBuFWjZmov8Ko zQz3SEg)grc?}BXGHDaeSP;6|m>HaaHI6V4$;3o*)&b>Ywx~$;gMfrs-XT2A9UUBiA z;3gqW=ZdDMMMMXo700e@?k;l*1tanHUH)$a4|b)dk=G)Rm3ArXS)0x+Wa{1X%SF-z z46+M}!4>%#Oy4~#)olD~3v)=vG(M!+L7$X#*&2A+~*R8>;hQ#ipQH5EUZl_sMXZxE{8E1_XNr>{YXcPLV6nGd$mnh?p?`Xe zLBjV?_~cxV;i%J{C;OEiTPSy`FC>k$7|kZO<>64Fw@C)XO&dG7*uTjjw!l8}f;XD9 zHW6`p64B$yod&(N- zxQ%Q=8)q?OJ2Tq%K4f0qoF7CH#Z4|p|K{R)6H=lg4|jf(V(0!9d|L3QomL=7$v*|y zOZcy(#th{?2Oj{gJ5IG<@pSY*%~U?MytItGTlQs-!l#x4zHE9Prn4Ld z;v#)8;3ulZ?6)V(I|J5SKkfBR;MrKow9ysU(NFWDHGBxwo7Y@mkqA7nq z30FezR7x!{hCLWSjY*MIT(AW+bRNJ?BAu{Fh*?FKOtE#h#B_%=Q}s z@;rWLBwvrp+CG66RSC{SBgx*c+tO+GbS645!O;E@ny(t=xl*shIlnkH=tbIDIdqK6&_c}})q4pXiQ8qtnOCzf9-2JvtdBLv+h0%To3 z^qhdSX;f1aU4UO6>0|=M=je?J91HrGuax1minD37JeS^&-`odKi>AT;3yU}sQMnRv z;5$5n&QTRVZ8e-`1!{)uvwJD%=WyCYn{(xpp_$tPq}8voI4m3kL}qdFZ>pu$Ta=ak zm*6#OrBTcY2O5kUI41KYfI;zLnAUc77`YRkQU$M}OhfCV3cxeL(6j0V2Uz)dehsw@cF z@%HX;UI9g}E0hVjsActdO!%aGYXb)vHjk}KgQOW=9k&0=2qrLZzj4z*+pgfTj? zuWp(@)m@m#cjzx&gEu3)p@x+8{65<&EL6!y+uuN1GzeMuU&JvSVU|`7zRd_|2`@rnH{^+%WV8qs3a~hF^8Gs6vZK7HUR;pR2o zm4CLqsK7*dd2=y*&rsZrV zhd~Wk*TTqP)(MciA9j94{Qc&O5(I_8V!LCzF~FM+&3Hrj>!X5fZptj_UsRpik9J%v zy`E!rysir`0bfG#n4KA7c^PZNi>wtb3Gz+;K5Z(O`OX-|I+aZi2SiOPVbVw3oK^MQ z720<=j%yalp_Un@Ubg0|6eYuFg*Um^3YV@^pPr95fz8u0cY*j_pqQ4 z>d9@CD`}Z^18mw*I`11vglsV{*LH*lC8QW-MbEsdTk%+`o6~+|p6Z{KG9}gVlL0n{(QT z<>$>&+~h{<-F0TW-E+JES}5~E=ag(ds~xUrJGEQ_{Ij}|F?UAOVl~wY7Q@C$x*c|P zgygBHzGV~#!DnL-hNK|$&9-W*!nFK!(52FVKhiCj>F`fp4-s8O^7J|t7m457=mO!| zUt+k(1b%4MUl3d>Q44lr&luh4ACN?WY*V41cU=(_?$sG#Bf&$=R1SNnBbriwDYY6* z=uOT)v`916Rt4vsKig+t7KFgZjg-6cJT!iR`mS99gq^zEYM1AtvN7};#GBM}dC^3= z3&qxtA9aXWc_zQB5aV+{2o7Ptr(|T_Q^WptHoh&t{?ISK*{sePs=BS3R=oPCQaN1( z6}A>8hedkp$poj1fQ~tvaT15tWk)=N)j!g^#?a>X8|m|L$rE`Ioor3L8~%^q6VjXW zA5st)6Q(Uj+TzQdqj)EDAh=_d4t0tD99k1)dMU{sDw}4-j>n9zGcB~^(6ZaB3RILj zG>-gyjKZH5ea3X|khpt-27!d(tvmZAd*bI|m4Qk!g5fq*xKOhM*C69{*%A(k#-~}R z&V6E%>{hd6Xh>@`guN$Y)Ow3dUh`=S4!lEr23*JHr zsa!**3EL}vkl)CfLZc`{^i!I+iQg8PNzkHF#)|=z0Owj9_p_hFFLbSB6)Tno>a;)gbX>A)d4uPP@#^$SyI$W2R*-!M?`w ztt;t;`Bk2_*yHT(5O#y8*amkSA^q_ShQ2WVIEh%E)k(os-XW@^=Wt>~CcDMLSMK0N z*j8wf!KR{-(#BhUcAbPirw87oRBgHT7)w%eRdf%z*IDhG4{{4}q+f_~7~sysXG^Nb z=C@JG2?$DYU+m~Ck#@k(j9@1;&$PLW3$-)zx0LI6>4KSFUA@qmhQM)sP|~D5g=Xd@J{2 za@uWX_~Zh;Jady#@saBOS4S|~9ecjzQ;TQ;2!|Ueaw0zIIPZ|M2srlfrE$HP1vhsf zWE6y(>7MT`|8ZSVb#>5mj`^~Q9bFTUQ?Tzr8O?5!t#i9c=b_d8Y$-U2_girW?4n_# zDscDo3rzWO?m_xw?rZk9%-S2A!VB}|5S}{&l?8M> z{}3J%n3eE1mR{&r`+JKq;PJW7&D)t6agoTZap}n6j!FD)a@ujn|;fbbVVdKcd>y9XZf$mD*VUd z?9Js90fwR52C&{=xuQTDC%7JF)E{YpDVkK8BjDsKoijz1ijhwL2OIVxHqW3>NZ2Ss9GT7V^tEegLpQ-3-5J( z&SP{){YYv<6e$s9Oqq|p6iVfwUMENgCHjP@R+M_<$K%ahRY1kz+v)Pg+>reR|8HmI zYKW*7%B}GYnlDZyiseb^UXyG0fa+q09Tk;iog>{`&+rtma#HM(K#&15&BiDVcCWK~ z6K?8VGlyq8j(dReL8rl{qmphk4KKHC&NiKCC#?g@6xy5RE`06rm39U-&ojICfARhA zPCFyLx1yN+0b*x4d43+@;KObTj+F35<1#1Y=&uv#(X#&w08~J$zorGx8Qe;xnx8kP zq!l;l!sviLPzv{e(!i=3^#iT>se6r-4h1Q)S2W93$$*IaxY@AsyTe%S z9FJuH6;__*-L`c!^C!UgUbkx zcXsynUW(6B?r)yg9(H92I%7_5FMvA!&Yg4Huk&3eB5 z)^t-_r#`xtC}*eBxjMh6s&xL7S&<$%v#1=lVQ?)z@Y=S*ym=r00cuk`T&)9r8p7$6 zZ=V|oTi$!5OR_}VcPJ79xRWwelA&|)VG%%XShlF%J^1uDjy?VKq3L%2roj=yrw*^K z!F|t|yWRhkmEGvx;~7uC`wX}&j?lhEPfZlyL>5%z2yG-ac1gL!Qru`rCEFbr^s%R2 zn#@Z1JyX_(u8!F~Ju6@a9*BsjLorEI@uMFdIuT&zG)2K;%|4tK_CQUn2<0WU3@PH@ z#>)I|2L@ZZk1-vR+5_{sg}<=vZF4Ep+9g*))JsVj8x)->{u25@ttzUzqohc4`7 zH^P17j3*;Msf#DMR`f%y`UEavC;Ou{)V$Zcntot&MZ{?zTBG#NZ7d#4GtMz28^aqS zch0q9VN(l_6vJoBcEtiUORiRM$-Twxa``et%JWx?tw(S!(@|oCR=RBla!zE;$&QH3 zHlR|1oBDFvzc^WN@pK%srQomd+_0WJ7n9(l>+soi)Zul^>2>({I?nNR`21{f{ocD= zqSx^KX02u#jn1;SMz_?n4$JoA5FX)wX8aY68O(IGZan&zpJWJ}lwEgIdn$ z3%g6bSn;+;s5_ERmUS>L?l`!)2>V?0&g74v@Ip`koWf21bXLipqe65y*AeK%_}>~` zeu@(La9gQl6zd|piXmViuMss-X%ulY^jGfuvJzx&f@qzHn;?fhAu+S+p)5Xd-J`B|fe%PK#&=~nofwCh%Q!2IEn|iC{SFDd@1Xn2 zE_K&0DpZ*dbrZBebA$m}5xJ@*ih4P4{0~9Jsx}^W*NK=BjKVVjYz>H2Ed7B`X#_G} z4Ka{Vv#_&FxC9X1{}t`6r4x~b@W~@h&!seK_2__qS#YP z^zt@1dIj;h3q9!-sCRVQmWLMkKj3-4jlw~W+BV61t!&sFeR7%CPIjER>%{q5ZI_lm zAaz5P5uw~J%@;y4wqb8FX_)L*g%Urx*J8VR#WfZxSqj5-gqyZeS?<`4w59+W3vTh8 zO#6&inUx?aBTU^zsf&CHwYRXfM@GiTkYKu28DVBlvOWdO(D}J!J(YqS0$*rk)fNO} zc{a_I5}&cK7G{)dh@~LRzK4-p?eYiPTzxB+#LpFR*S{sz3zu-KL6GoeKB*ggmcd8! zfsOfI#Nl+#yD`l^!Sk;eYdUB259Yen-sHIL$FO{~jXvpUuD9SU^LESQ2$_ByoB z-cHV~j6A56`+)lGte)$KSeEO_9%PxG7J9Ics-w?28aQm0?VM#C_BzVHu4!D~w6mT; zbk%}hm+D#TzpxLA?$%%OLPXA1k=^43U}S`{A2BTl3*#wUS00V|4Q~Dv&mVeKn_R~In@%% z%vtQORR7|`&V)+a3U}85z`L7y`qtK7-ZRNa0>Ml`<~?-m6fc`z%FRBe1v>A0#FlYRoAaWZf{CWZO4RTg$(X=Gydo4*Q0CNfF*Ra}ulkvZH z4EpB`0iI9)H`d$hIsfn0_U2dm|7FJi?q!1m(PuZnYWH^5iAe;aew0v>!C=UVCymTh z;TjkC43don4mbkQdYxRZWE{%*i)@m{oJ+Y*NMw?NH^bRgm8)p^TQk0nvinYrp$e{KbJXmT84cfWN2BmYXY2y;RvXG*@1MLpe2$SR z%El!A?4RQJ+9tYf89SiJ~(`HyQJe& zvhhb85tXJSOOuO%*09P?yA#jX`NfEE3cQ@4$Qur1mc zjaO)tG95V5{}jEQ&s0P{(sIyqKwC6{tiv#nMOh{aGXYu}(c-D3(sWH&V~n3`aofm9 zoqm-AlbY}5q#HEH27uBIIC=cHW6%P=$(#J2W=Wx&Kx>}Mj12*PdLtqO9$VgS5u01 z*6C5|lvGTBwcxSC{52h}xQCwAUhA&2t2M^3H5O3GJ$3IuBw}7H{_>a=j7Eu9iY5DTHCVcv} ziybg=TFtr3xlB5iM5GzO!qT=80LXX8@*+!pFm`JATRnq2k(`V$;lD}aI&V7nkksc+ zNF9AQDl`ir$O_){4n@vq6m$rZzk zo(2G7L|Nc@f$N7m%L8L!GL>IMs}D`yKEo$h8L3D1t_#87JAW+A2W( zDbpbGg#e0hjUZ7FwVJZ}!dZnyP1feK^qVgeAfE0@jH^i=Ls zoe0p41V`v|<&OuKvusP{07)T^I!c}$$2#Iev)R0@mjQCoF*?g#M2cbhw43;HfA{&!s^Ah->w|Jd-fCNkA89RYQNjXzg``@fxpBzqUE@VnmEFH zA+oZ@PJ^ymd97mrk;SIrbggTl2b&hU^)_8iUTg5a*4>;wd?b3$%fkKhzOnolZcTX& z1s&^}No* zD7gOdw9w#QkpJYfUTE=$Txm_0{ytYa8#PV&=QFunjoA=mo8jk-Q@MpOHmVS$O2OT; zZKVs{y!+m|MQ&VyImfU{$`fD_nBtiE0zUcn@VG#){_lfF(k7T`(TwOTT@tRi3fJ#? zb5tfAtv+L5RYTYcX=f4D`Iw8SxEiz{4CQ;=;h4s477pyF%wL|WjE35d>Cq6NGJi1| zGiJm1q#O3`>jnD*FW3~(d=iDj=^z2l)L#D$*DUccS222fHVa14F6!RIZ(45Z*gRhS z{^0ned+>Y}y}a(cXVqOYoK^c}K(BBl@wzU5gP&87=&0wAZRe&x0_NT*lM=K|X zKkUExuC)6`tKeW%Y9~(cHm4P?GM~r6Cf#tg4BV@KGrF!Nx&lY@) zl$^3BXtJLw}!PCO!WgqyalVayC%9aar^0>C@dD)zpZRlRcVeF(3CRcoR zJjSYVu`7x$z5-k_F1#UL`eZNP%fU2}Vhp(EPewAQ$eEqPFsH(8t2wR`^*NptDGHaO zzwIl3Tgn%rceDA*e3;V`YA~E&B(bQIFHP!hX$q?QSP7Wj~z@y!pTYSKlqUy zL+L*|d3YIcDx(P{jc}bs-(nKk*foT(%!+mh^g9Ix9;p_fbokf)5OziN1_=oGw!{Dz zKghXO;+@4RPH7_$_^(Mu9qL*Ssf=oz5%I+tqjU;AHSds=&$4B1IHK4&^kR|H5&7mg ze1AYS#i}Js5~AZ>V+vBb-rm6OmfT)^w%U7W=Q|FA%*dYUk#Uvu!+jRqlUKzZkkk3sjn8NPl){PAd*ACHXqa)gu*r()HNGI`~Ib-8{kD< z(4qW6*8{1#<~Fk(<@_f8X6DWf96vb6VNMZ<0*4)wfz+lig<)2APfTe}xo~;z$iLF) zbNk0RVZPIGbc{~thy9<?ryv}iFmVQ z6bqfNh>`=9FaX!-w431vHaKm2x2H%Jc>9YyAFxn1kCuTz0Bu8)99oKd~9pRJ=hN24H!868NDxZ5Upk}aH& zW_KfJL*RL%8JZgbm9J%#Pfg)%_Z&|Kj`yN#z zh!xvZ*^pwV0tm;TE^^ZrG?wa>u+}vPDY<=yAZHF++YA*w;OYwVF(Hk|NXc)}VY=Dd zijc{Qjj&rRbZSM^jhCc9RKVXIC$?8wQb%iIrh zSJH0|GwgHHAL~rg(`Q)N?Ey9;IjRZgOeyZ3)IcCkX^d%rV%+iv^YM0d36{?q1p0>g z6uC`mLe9{{tH3EzO1X=8+OJhRSk>gu>$_D#K-fN2Fh@750|I-0GqN{}E(qxfuk9Q9 z(4h|%E0w16l5gvx>LMA=pUY}?ha6+C$I)G{pz90B~_=OlDYsy^UfGNRgh7O@m6B@}71qa#qq%v51c073EFi zc+|oFnbSm3;*L!N>m`MsQ3t04DICtNOb8^IQWAQKy5J~teyss9DNN8?-Y=2z5NS_s zvzOvGdZbk2Kcl4og)?yaD!95`8vJherisF^1wGBOoSx>}Y|p$Iz2sr2)Vkw(0x2QP zm}}H!F-vvg$=Fr`!ecz}CbFhG)f=MV7h^gpD4<*(mZhcz$EmJL)4vG9NMgIL6&bGS zPpV!}_)jWfQ36cfQk(dc+1&JxigK9D$T=j&0s&p~?2rjlD^1jwQd1z=H~?$Yx1eeA zXB_Z$soo^;g^b)HOvyg&I9ErrMf?!Wn~DoRU! z0oi5qk>}i{*JWBbNQ~@zXIt z=2*9jS4}OFJ*nIsjOgG@(RsL*&b!`OJ(CyD&hyW`;l^MAjxW4mJc2_ zZbZ(*Zq-#MflYK+uE2O=C1PYHMjl+7$n5u77PI^SEpn-^xH6TAAFz@<3U`kBNyazZ z+@?%x+|-+38m-6&aceXaJfETQ>O)pvBzijLeWmky%BU5q;te=nbCEY!zW%ijUPt`- z<}?i8TyD@iKa%pSA^IIv<7m(kOM6SV85?)i+kqYry&dR-|BJmI_II$$!@Yz_3R40sRqZqwdn`^*t1#^r+8=1< zttucfeb+YMwX0`mO=Gk?KPSV?H`S{9AZ~mci}q64yt}-kN>zamb^A4g`ea3aH6YM4 z$|r8X+&)~&c&u^vLL{}o=Uz$X46*ZYXIDNqAy4lct<-c7KKePl_UVkDPkukTFQ4Ye$w^P~qZ zMCDZu{=4XPhP;1R@|JeKJ6(c4OAWCEo#;Qe79uL`)&sXXBhr_34UWUE(Q-9^|35V^x-++GJgA@?*%lVA;cJ z-H=p#$ogmzD?ie$c7U?9RjiRuc8>@2vvV~8L+a?YKJf-geq^qxM}`)D?x^J^P1Y?l zlLo#CPTl#OuA!fZv7D%{>TVnKi!h}?)Hg1TvcAuRkJ-SBX~|DyuoUu4AFF&m3H3|r_L7*4ehLq!esmBMlbgqE)rm~ zm9jIO&LSu8VtGCtnOs%KU=Ptjh+oVAYs?+7`DN-e`BmNis{iNpf4Hs*)nEKP7J&Ks zf2+OL-pc6zXaM-C|9_eK|M9fHqP|9QL)d}xN?L}NMHk{+D=C{+eOP~fO)ubavEoW^ zqeS8xVp-`lXEuCRDV#*2^OQ*Kf?|=-v^}Y4r$$FROLapE*5H!Mu8MBu%tXoK3sp8h zRk{4CU4B8@C42^HzEr{FpHr2FKU+`ud5xxvvPsPapy1b2y=DPjCR0{9y$L*m3%Qcf zORXHLnMDzf75BbV@l_B!{Pu1Tj#$gBi(W|<(;lhh9D>Lzi%avKSngc39+u}k=3*fF zc6=14mUV%?Iuo~q#+7m;%V_cjSjDbvZ%`{;*`GI`Eq_3L_|Kcqm+r=~6bgaAA9h)L zGv_!Jm35|wlgk-E7TF9|uqb?=_62@va5R6(&LEwj$zdmdAmd7TZ8&=i38uS=3sqpt zftmxt(xE>40hwdU2?L~mqcC7If95nP`?iDuwuTf61IoNXvcTL31EK-nDsjQ&0cW53 zd-8n_Qi#d@i|YV{Q6!Z{&OxyEw=WnrX{s6Kj0hIFx2*_)e4l82J6DY}WspkWbnOil zm+u-4+_6IH?&ep%431i!kGSAXU=&Jcp}pDaMYSw7d80fpYxTK|E$6}!kNE}LA4CEo6?`lhD-+Yn|MYN&=iM%@b2Mq$%*Pg@&6 zYNu64oV^8T9@qPAQ-g6H*t_!aV}94tZ9pog$H{}wU`a~&{B!-ABWsZTZq8_2sJmoc z`B7AZ{0`k~)^rY(PXjSTW8@R{;@U~o6?<8y4EBsxl=)6AIfa{blDE|iz-GF>LWNsV zhbFqC-BCJqsdf>fUXmSL`6D8LIXZo1d{zfVOqqrh=@y|aGzxfZV;?|iQN%1J~*B*8d zTMAvcF7r;;842w~oq%0_M>{^_-O{-Q>^ur+S4J6#PER#%*ajGKTS!eX=rxZtfcr>4 z!Z(}g0OTUs;96gyn1xd^s9<7gQ#dT1!U=h?R?=ZQxW$tEN7CU41kM#;M9xH&82N_q zW-;fGa@#s4&UU2vKf;~lw;J$8Mg>8iOAj%`PNScAso7J~=olc1M}l0iGYo;gedvp#kAS z&iB;6r%L2RMmV+ZIKJq@f=$5V1N=6fYEjHWALJrRxt)p^`KhG^dUHQDvj7~4fu=T3 zH}eDH<)#WykTIC?H)u@~YUrKi4+XPOaBi38F2I7O_XNS|zcWzu*ZIz<8^FT29ewXQ zSp2!R{4KOG;ZC<`hJ#kO-xZvI9;V9`Db4dS`^>a@e( zoz0n$8?F0!XQbmwohhj==gr9q3I4njqWEKHHu%liT+36f`f1iMUi+Qw769+AIux#49?9KpKgEsghi~ zu&lH)%kvYZSgEh=5p@i?HEXpk?m%`HRu_T}^e*2Tx4nw`#vxVpc#~ws6l~0=T$lq; zm*N9}R27qSmlP=etN_ae!F4IB)*ONZihjBeJRL7S?@-y8Zrj1dBLC>M6z+{56s3`! zGbfE_3m{rrLvXP*GmSN zx<|h#Q)$7>U00x>V~^NUuPKft=&Anbm@X#?KdJBH0)m1o)7ZR_9vjfWP{4zoC(iuu z4FRJz9Py@TDjAW*N;N>#9-8NEBG82%`m_4(r%~tmTQzT|^eYiH!ATivtlOV)5}JYQ zU}0padL;viM9n3<59CP@DL`ljp^L2O^zsLQX;}L05{-UlnL~?4rAG%c?5Sp_DyMlO%2y!^M$QmpK+2@89c5YH*gEzDJ$4w63LeGsY2`e}|X^Fvq;H znl=2$UHw3p$%D(Wv9@N0N=JI;4OLzYJ(@N4XBe|pFy_0!Q|Z&>@b?*YyMeEh?v(86_>m&?1@y8N~%I`Do zj;V7gA=(8k!$0?7eGa*!;5bGG3swd_EYRg9g{lHmEn_W4$!QKn~j?)jK5*)G3o z-#zu^3vP8k^uSu{^vOoH<5vr?ytEXw%A85hRyuExvRjS(EB*>gYNT79_O<9GbO))i zXyiZ23UAwgN8!Zqe|5* z@HbaqykgWeX>Eb3aFBVxMv#cI;et*9pGaR*)h(nLSv`$3#^_!CzNdb9zW-wP-K&$X zE>gB5KBS3{IPe+tM_W<{Kgq`mA!Fecdo9B^~zsl5U%Aw!5 z3>kGy#?4NuhCSuqV0QdR`a_xrF0&F&=UK~CQ#T&xfA&v@vOh)7J(wA#nOEe~OT5up znn6*IaN05JIkVlki++dM(25J=y`G-?BQ6bbdRF8}=03Qpl{Z9(rrTh^_;dhM#@AQ& zQ0dUL?TytrSY&W*1;9=FAklU4fx2d<+YnXNxLUV!{R?)cylyHp(sY8n`xewbtQ#}y z@;YK1p=t7(-IjRT<7f)6YGydhu6^B9pSpI+MyomKj85)E4Gqm28Bof4$~jlfM>HJh z4tZei-iuV>UTohq(}!!bbZpdOSQX0-w@c!-bQ4rxy$i1WyKoz_<_UWrY-kH^gbOaS z6UJ77a#GGBqOK8wV}fA$ZIo#B6 zBeNSc6WU07%S_JJyMlG84S!u0Sqb%g&xQ=t`>#~z?{fcB z6Xj(!wRUTmF4tFFBpM&?kF^Ur%-Hv^z_>! ziS>IUmHpOn5d~SMA#^GDLZ47*p?yMA6WE7aJ! zx2R`1DpvZtNtQdAG!2v{{Eh)JL@ZG*hA;gn3|w*8YE-it6pp4FW`oS2-C!zRzgx`S zCDVnFd|#7=U>$n^1%DOn%_y`p@#8`rF!Z|>Scn^8b#c@evNkS}8SNG}Msn;B6w~4QBJ1x*{{eOR`h6Bga0mV0Xs>17f7;OF>-*0a_5L#sfxL!MwU8z34u{MM zJQb*iuR$UC#Byu$p<|pPKiMHDv*8t0p;)%q1M>za>u&)^NUhNfPY%0dmz$8Malwxi z6sp4TEuXX_J+bUeYBH{yGJMmBywrGJC6$pU6UtPm(ivKu()^?wg;gX_-#&LAY0@NqiiBKc5%^JV$X7@p3>tS%j@$>hTZj(0GVo;7z9E2$+h+ucH%QRoe`KLO!% z69ClQJ#Wyf1?KZoFBbW2M>@&@IJZl=1R&PC3dQATE^X~0RVhpBe`hZ>()HKOp-iNI zLAz!=3kH`UM5B^m!*rzCq7BF-V=BB@6isf|h_TbAkXipVp;e`*z${mhp}W$^R+E`W z!^&8l4s9oH(8U7OnS@oDGB0nVaPV0M{4|F&AK^|h@1 zceDL9|K}HK|2bBnF(A|*Q&8WnOe}4<37IS+et@0W@>Kg?3c4~gYsYyYndZpW~QeW6!w2HMyUQT^Rt{_*8SAD zWmWrAUt&e7Tx9~QlU-j~-k2PSRtx(O^0~tDDH~sA(w5p_xt(3BH1o2ZYh3J4MSI&} zk>qw~sgd?GM`*sWW290>WfF#zpGH=UPNf5Lw3V{yq|VocsdzFY4Mx(7iqPzX_{g6> z>e=u|{h(V8lKlT3)JR7+$b=s<=tSRT>pbA*bjud|DL7{ztAB38fB4V=2Oq5&mAF@? z-L;!z+NEB(XTrt1hO^xc{t&dYmZTSB>a#lsIuCQ@q+3`6lN+6#FrScPCxIt{F-bNs4#2Xbpi=l!l{E?*i+b8>d%HznRaE5rH!LUlDJn zs7Z%ESDfLXNwLOPv;|LW@YFWetvm3^0g#1zp=B(k%c*i0r}f|-v#bWSMuL{zy5OuY)Ct@@38 zL@{xz@vqILJ<&-T<6PpCf}Np$iuY=RXx+-A=J%(GG=iXOIK3bAtW1!Do*Gx~1exn= zo_(`F6ut)-IB-}YvM^?I?u~VBrOOs}RS70#7^^O8IAT1FxtIV}JsoPJD#57cUH){p zu99jDkdrdk&bCPzvaB#>?y1ROc}ihv_gAm`s$jo%&qEZ zAoaOg-ZG9y3$)@w(Ra5?!*Ca9EQ9OnSDWs?UHfmrY5z8p@SXmDYprbk=Z*ER{(oPn z{rBkuih8f;m&P<2Ut4Z5;j{-FlKm#a;M~8MMi^I%$=W7p3zlpe_8h?Y|0(LJJX=lm zQ#SHHwGykpwB(U*vZI?2)6^l34bdU$2mb|H3IE%l`XkD7j2XHbchPvAc?;{;cewyI zb~TxVRW!#!aMZ}m&`gx6mQmGwJ37^gT1-R0v^$u%;L!GjG(xKhJ7g|HFGUx4NysiKy&HJ)v`7;um7%kNw1~ z4fFR!>8{rfR6bJ5p1M3QGh-}aI>Wf085E?0pqq}I8}t{npeU(A%L$W9^tGwU=0)?a zQ7=6h^U}MLb$hO5lfig{d6U6;&`X1r#dJo8IFKd_(p^)sk|ZrKr5jY@(>WDRN##2N z+@?|scHUF?4nE#}Hj7RN6a>)hy%a~#i-;xyS4nzfc4D%7kjT|DLvc=5j2EFFtmq4S zhS(AC*6v1`=JZVA-WBzLUwb7z@Hb3oUeFEmd16w4UO_kg+ah<^O4VF)mx&a42=U7fFfBy#Z)P=wnrkPr+*;Yr z%2!MzXU+lU+pX`+=Io8CD983&#`fdvBn{joP(}3AedW8L5gb_=z+R`8$c|muRilmGpR$(l3m4fAvvA(%J%^G>@%$&O zuh#N>{&|bO;92an_LSTv%>FZCbXv@xA$5eA_OQFN*Yb9E_WI3y#|2iRIa*8vh?dvr z?(DSN-M{{|*%S{QPXU-rn#_1?$P>`bFJ{pQ6&n=x0cF(iAc=9DkQ&6cAQ+C15|PH6 zacU;T6eTqF%n6Dl%e*TSNIPvCb6zwCX8a7ZOsEMfk7YaP*Rodg`BmL?jYYNCspny> zonG$;!3s8W*e#68IJu->c8V#@T3}Q|7b}C;TC9|HjvEJM0ePR(6CY$^onf&f2zwz@ zc;>yM1Z4yMw)oEJKTq$9Qp5)Qi=$|c-gHDB?tj(Hxz96f`Z;u}{O3a4`}FYPuH0(| z_8GI#or}-f=5K~KUfbPIcZE2!-}>~J0#1>FcOXsxe6Hcz_kdD7QPF9rpolr2wEA69 z%#i`+er)?QiDw|!^Nu+c-3Q#^&{s5xf+g1`c%ap`)Yin9j)|~7b*rPGk+YOpEmGvm zDwk5ka@TV{gX#G4c3*tKPrt{O%=UWbQRFD1qM*R@~q5bv9LIf8f&jB_{ZT#N!KR(~?p`psS)|O&m?id}}`Fet!+yxu&T< zRiyn?;r9f_TNB2ku0m=|^-x3Vt!DShpEaKA-P^o4yOh(D9 zH;yn5x%W$$V!GgX6mGu`$BTFz#Pes+`MDkf1Z8IdL>nw5fR9!y^TP+v{6jjXaI2fX1Q!`qbk?#iQFanhQ`XqKr_77c|{5eKIE z67g>gzZpaA{FA>Xx!!*auaGso1XaBMcRSsEJO9Jp!@Kye&*c3FEu>37{lo9bXZq7W zwMN6?0#fc{Wa>0Hh1+fr8-<%pzW@V=oI%U@)v|0Y(g^HW8Mi-?eOH=<3QGUlMgjto zjZVU8DE~MBFMtG12k;;GI7`ww|IdNbRMms(UoHC2!A8|(-5q2s3pFaoWTtQ#Va8^7 z@jWo0Q;a{P5va{(Dq_{Hbdt~$g0mxiG+O_F1p{AMA#$LtvK}gqjY6`3I}D{2e?5e+;kKdh zf_CMZT61<8`I~aS09I}i?ho4V0j^;*h^RpgBekjBmDOAA01iQXQ2<4?zq<3u_@kWv zmY36h`$)II<_>l1ck5U;jrE$Z-!O{Dl}>rW z`2o`mDvtzwIZ{3W)nJV0dKer+0fQ9qNT3c~H3YPQy+=go4k}fXO0zH%*y_55Mq;6F zxox@LV?$9g;<|fAy{KGtgUcf9jC63@ImGpvF09}~aCbHPl=5GT9rzge|Mt7K|6g~f z)7iO`|DT8afAi+2tu&kj;7}*Hrqom6EKH*#rz@W{OfzC*_CR*$pw{TLGJ@0NC>r4l zDmy{qWL{&S0o=YUXP?p$!x)b%(T%{ssOXg*3uho58;48PSb5q>w=<43gp!4LnabFe z<(S>O7Q^-^nQo_xA?(61W;<|uwwO$|AMTVpMUDbU>R;yX;XQxq=}n5jz?HKCjNYV- z;JTNO)5GOyeBr%&#pcOYwb#Rcy_0zhP3iziw#Lb*outRx*?i38)mFE?-|lR)zu5PZ zTq%6uFt^$N+9&hrq=I;C1qV>}-HENl?;ra+e}xwp)~>Iwx@UBCkAS{-1L#ytTewLY zLp@hx^o2X0Hg25}*@0YZz+e6rLOIGePjlaW`{t<}T!U6fNDH|VN}AKt=-GJjeuP_W za#6l;-27WK%eu4UU{G7CJvQg@aX54D7s=$);C(b*Og(I=yfd}=j!u}OY>1btku$B0 zYh8txHAqX|d`;U4{`Z`eQQTSg=;d}R+5&BXkF~Y?Z8`C#Q9M{;8mu{z@MBI#L$P`~ z!TY7A!#U!kPDi1rO-B|zExcZ7zgbr++5qfEVjZugmzf?vs9N|Jw{mL7MMY;RsG+}- zsp=D4Kq^7-eTTO}DL@n+xKYcYa7wa18k@i;MP+$GEAO)NMyDbm zcbyWTBL4H?&cj^%=Ux4;+qVBXkML(&Ss zpo#!IC6dJ?O%}%|RN6b{;WSzbc(z`nQxD1|o<)-j^f8Pezc>Q{apw3IP3pRq+}%i| zu2KY`M!QJabbbEF4F4H2G!oFkvE;M&fp3Wq8^XdP_Xv-x!$24=zQ)i<4#i(7dc9xM z$qV{D2ZfWAL5aip0N>b250g-yQj1>iWjOzV{l1~+is#QID#Tt?C&(zmb<9rm(VS6` z$Q$tVRP=8B^3~w!>+gU4`Nhk(pyyM{1xS>u$}R=yhRm+7J+Na))vNPHrg=q+}xDP}a4KDh(QHIs#^o;sA zy8eZR*$*^rk=5$O_dmXQi)HWZ^$`_H6alTuRj4cr-$HiR>%s*Dp3gJ8g4HP{k;L4Z zcJ48D!$dXuz{6Jf!XtkY=(Qn8=adpKz=IIBG-5XZh6WNwf}&XLKk7>y*UB_zRV6*u z(lcqpL&o_h`Vdw((>0h+$=&qez)W|FFI<$Y7GI341;T`~NS_1VN&_vDfzl5eJ^11% z5I8Rhqp;MjIg+syg~fJp`WW475f zg`)rmZhVq5L~sj8SzTTE@IlB+$o#rtNbTIw?5LPyAC4|}c}muBniJeb`G@f8)x zeH4;=7ouK{wpOITSc4+u?4cX(l|zqjew_=18y4N?0`IlTgd#6=(Oll?=HMI5uPJ`U z!P!TgGZtFQDRJny$XQ{u;$n7aOHQkPo-lOhgk9fMJ5*$q!lUIC)pw;XVSMInog*hC zF4|1-jx?KXdgm$o54+$nIiM9s^PWy7>h_GZf|pqc+%xF~(D=;~BKkPu5qLCUA`o^L znG44RP(gW`J?|;r&tQRCDo=ofbPNHR#4XEcAOce2)MZS>U-JTjfk^#FwgaxCqv(7G zVbSy+JaA}J@|GmO(VNMWR| z()YXr|!gE-ATM%9#b0$kEVB{Qwlw%l!AvW$kik_z&SF7a^Ga`@g zp*4uI2i468hP`;eu%~B7DoF){eXNLP=ySp|D%DCaq~MrIGqlW16{&8pyB!M5x-XRw zNS})~bj@sMWDOHeyMlJ`R=y3E7f<|wdnhbM1bVx2iIom9Y6i)Q6pu>W!Yo zN;QPgjjH5Tvb7A;D9c$zT$W90P*~3q)wa&UqJvEcj`yR{y<85v!h}IDtdeQh{PzVl#omgbPOMjl=eD@uv4%sbBl% zFOx9HC>cV5Sp^&=*%msB#vvScWL%a8C;&!4xxXO-G^$pQ>VKDjmV(!eql7KkNyz9X zJa5=>Jdd&oJDA$sA2UkiyVxRQ3$@+$)j8-^psD_YX2@=-6^u-?igBuz8zi`n%I!;V z)>5m-qM0$e&o8{fRbxnWUSxu3?|Aojp4bQADDsX8m3Mv~HMed=L%I2?(heppXAl@J z98sjcBCEKVrpMf*9hnGTV!pxcU(#@lZay!SJ(sKkU+2vNbxc{pATkA7m6}eVN!wjp zxB8}5a#x{(n2;Kg7E-li!OO(^`LGQca}2m+DYpWuB!> zgrHz#K@7G5xbPOf)IZVnC3Z67{gr`IFYxR`8`MkjY|n&hFaZZcsD2grQ2yNS_^ffR z!QwUTc}9&4jDcja^S>EozVxJlUu)RjZXA zm5r5Nc*>tJKM^CrYTgcKrflpR?F*8E=OR|*Z+Zta!?2bgR*xp_Yt4j#^FS0TMki?F zBB8Q2Sj8X6vVc*f{FTtmE1{mXgzJE292Z879?xP!b_@PmD?%5vAB%ftyyt@ zT2BQSEpse3!gp2gkhkjN-H{vxC}~mjdq5XMQFN0MP#WDWGp%Wz%`Hpc%!Gk9%&=ji zDRdp}x+i{V&x4r|A@IFjmRVNHa90VFNfjS7Bn#_+ ztLD$S-6nuoT)7$6LkT4bh!kRUn-+RIG<4GErKllMFC_;%5;34bZ$?aCDB-I2r!|L_~AVbmlEWO`HAW1g2LIzT0-LbfZE~*Jzoi;%zxBt zb9-8Q!@I`vDe|DKk)MISJmM5C~=(=z%>ZwviPy#gq~XnDrO zvKdou8vbLZB6OS1(#vgaWb0TyV4W zn99Y}D4n_Q<&&{fJU>7ADf=(a=xl^*m}zr`8ssXpS%g(0_8H)Z*$zrG7)!iPgcekm z$3RD@C=u(=L7JTe6EJq7X^4V!Gja%QyC3^VmQY|WlPzHCy^scS0z=Pl9JsQ7PU(xm zcrg{*;8F<~r4sb?56Tt@%0LhQ-Ll0}&&w5z0w(McA6pW==h;?K&W1hDtay603c27x z4MMFl{xZd1FTha&>?~~4jYdg2=6;^g<|_`4T@1czn+%|S(dn*ztEzmNB%UMz_-=`I zdTw6bii=JPqS2wQmh~MuT=k|ZAFzPRpExXtTmyAT3B4J7)z5GHTr2p}XqU(!JG~+Q zwqF>Tg~`2vl$diop@&;d$(Qewrm?;dV#p@Zu%PL`V ztzsL}rz9!oV86H>@NbF^&s8n|nU(&mxefl20#qFKACtB>pZ{@pzmv=Vw0Bqk>vr0I zjO0x6z#vUudzBJz-A{E^(w~ww|9Z2{*Pg@clgpXEy#Tj+|Ean6rOyOEbHL~0@E*8| z^zEPEmXVLkehc3+t;B$9cNL2H(=-h(z7` z!t+D|^zc2{`oV@LeH(`83Iw4OWB!sT(9xk{Vn+fak%7n_c&t-SJN&A_)q{8F5yfW0 zP(DA2MkkoGQUe+(6r%Vn0skUKB1{Kvyzu9|+|iu{P;7Z$^5aN3lOQDz@Mrab@(T57@GW8DrqkRk3M&yQNO@Px=dJxL^Wy6%(|`{2 zCDYXBSQey1h3j2~TiCADdXNgpzt;O33ZB4<*Kh$>M}yr34fCimEQ*k*7-1t{ES-B1 z+`9zMxbkFL*pgK4mR4zdg|;c0k+FvMY-?yiJx55NA=R53e;obK(wT2M|L5-hqfS2m z=bird+30^in|hyOA5a2b8(w78{YR6*N_D<_vWO}5#l+xDn~>Yk21b| z3dy*rn&?G5I!Til0%c6EL>+{9MD~8wMs!aEBa~@GZ9q*eg;A~aw3)68*Ps$T@V2wX zFdL=OFl^*jocywh1wjfyF+N65_U{4eLmv!CQ<&2BY{3@NKfIsyz55ybf8&08_sGkdzIWf~;CY7(xi;m! zH>^wWwa{-dU%o&e_>l=) zx??XnpwlKaH>=kuW0_`-wZu*_hBRfH>q4Z=iAG>??ux@Bms{Qw1HMZ2g*vi$wysK3 z%>QYlB9=kOl2fp*dcDePng-Tw^`XIM1&wtvPLUuEm32L;qNOmoltt^5x;5&eOaB8) z=*P?dva|bew`=Er+26VI|GHKAU&uPXvON%OO=LdLRQ0|f^ZxzKtC!|Gor*5R^Iz%_ z=#f5!#2s+Di-NUi&_H8j!Y=2khKc4+0OmF2*gj4|tjKo~oQ1rdH(booi#_0PAkiGW z+cKjvuCyg#I2)kt{ruz4FShcI3*Yh)=II5+%E7Dwauo8ay}^VY9Rptf1W6A%$5hvn z|2;$1IHwWAu!Fb%^~(!%8k@}~{1o9Y7*?af>lfd@_y=oxKfV0ldh5nnJpQfS{_3}{ znvbF9|GL_!Vba0{81T}J1DJe+3tR64Bys;>T-eW49Ze!b19RAy>yei2irmm0og*2( za@gY!?|p7{K)V#$H}WmewDXN=B+9iq-03r=XUK>(z`}$12Aw`rVa&-;W|7>0hRp+> zj+DL3)p;$N($lJQ>1=Bycdg(#n*OUACYR08`gem7T}`*8e<5hTz_=t^_z^!y*!E1f~hciZAP4nUjGo==?*s_cV51F z`vMC!2=lxVr1)+#UQ8yN?^-DB@VQu%&q6A4dV22|n0G2-F`3So&=^MSbhv11gPKTM zZ2Cn5i;=q)6R3?p60vJAZ}A%PMXte+W_lj&jX<~t{TsRlk-1fxp1Fh4zxn2nYfu|O z>bi7A5d0rYL3HVV+Ee$(sQ<9L+j(f)|8_ce^?yEB`yY2F0+ohwlE{jeI_!WdDPE}w zkRK3C3`B7_W>TbAmS3;e(>J}^wEDN8ISIuMUVr_(&>;+Y2A~bS;INhvZyHU*fkPT_ z=N|d9t*O1=IzK<(0)=l&kw|;Ve!(?mrju?~_S*ze1wnj5trR3rl#L=`DsY@og$w;z z_nPFCp;k(73!k7q0*Gm}3^15`LBHG0tfURPI$a%aE zNNs_d+rloCYWv}4l&##`a9-8Y>*`v3X+K35AIwbcaW??g(oiDLdC_zw)6Tv8yRl3- z{#GlbE*;6`4Gp~?B6dO3_pldbmMK#IM{Sq(`qW3so(|=)LA~9}(p(q8%!h}%ic&c< z-8MBzQ%8EGnN^#2VX4>D|9B>yH3xuJ>3@5V?EKIBk9O|fe{Wa*XFdPBD=buI{z^j( z^uc1kv6aCF)5jDSbQa1bwJxi`ToFKLJ&k}wHC{xX&^O=)jSn5Dw9wfoS|srRuDzIp z4b+EW04X_Tx>S|OPEYU){k3X`kgkWrW2$SEoiOdydyEp8=kn>vTfCVOA`I9aa4}#o6l?}rl0*}W67Zz5~*ArOiTmoI=3k#dY^ z278wBWg8tPFTD@qn-8A&iypn6ActR-PAXgAz25v-vn_Az;}=j2e;9<#PX6ZS_@xXUmc1q-$q1&clkVz@R9LlJc{;i+5-VtsVp z=2I?WZ6l0DUp|N6$z?cuKNI2e(3;*oAaRWJ1dsR7L=_g1ozKBKp==q|6BJ1aOL~& z!(IFR_u>BTo&NVZz5i+|+dW8#fr_BW1xrt##%pi+6KCGFh4eR!Jj+zt^&Wkxn^}6^ z_HRRc&)k+F=iwj?&U^G)QSKCDf+w?+_JwMw4+-t?#j&A(t3%b$0GQfGWl<5f2nq|hZI=A-f$8XF$h#Lg&lD4Mye}Brr^4)6R@vafO=Q3&Zy_(5dy; zT;2xiLI^V*|EkVQWFh+IQ>3Z6ex$cZ$C4C@FpD#RSrgU^S#aZ6#Ms_ zV@9rl%P+%oG!qFSy7|D9Tw{ZOK^He&84v9a>|P74`X=Pi>_qMtlVKpJuT2B2(EqwSySDxBQRhzoyT$fD`EB8C34VZVobXhMg0;5p_!EM} zyyrOwLIxEp$3gyMo{?MD%g}9!9MmK_3P%?sHYO(NrbH+lzDRrj?84)@XItbHgJZDv zZ{B|U>eshz?@cH$lN<6Unq05KKUvIGL%BwS5wD&i#HSGdvIV{m=BKYt1=*58vEbt1 zgjA0s*UBX>XIw8sYnq69)S}#OY%T zJU#6J_z@;sHrH{^h{bT6G{i4=4{CqP_dnglwGJhq;{4y=wd=ojce>p>|NmR<|7D!n zuYq6aQjX`gh@7*}Z{#b;K*6OLxcGx}>6GUN;owG-2*dwUQNtjlLZhNutbUYgLpzSs z!Ytv>6U=Kh*OG)k$59c~8+@xkyG~oi43Q}j zL$+*Tyac$tVsMNzlSMiTUncYKl0`hO2k?>MNIi|F(TJi{!js@EN_ZLL^APGF(Sr;X z_%MT0fQ8>^kfzx c5JdgN_VQ4Yu%0D;lu&xd}LP`r4vSv(``2>p~Xivf1eD>t#f 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

    |5eHoiNCUXpv;h!AbW;Agi85F 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 diff --git a/bundle/ruby/3.2.0/cache/faraday-http-cache-2.5.1.gem b/bundle/ruby/3.2.0/cache/faraday-http-cache-2.5.1.gem deleted file mode 100644 index 46ebf40f244a2563eec46d5d894d18b4993e9e26..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25600 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 diff --git a/bundle/ruby/3.2.0/cache/faraday-net_http-3.1.0.gem b/bundle/ruby/3.2.0/cache/faraday-net_http-3.1.0.gem deleted file mode 100644 index 5719f4b1953239d3ba9d171d62fa8538f4523a42..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8192 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%0D7V zAx!;#fR=G^)RZ1GrV97ZNK>0jSFwr~XD?BOz0rxC=F~OR&R99rAd3UA_dQd*m=ak~ z<*ch%8?Qe}E$0c4^q3aIkr)v!vr1^2f5yo4_{9jhF2^cM+l3zmc19mt93Mz1QAi{{ zG+tOz6@P{-L~p!qZqnT3e6c`o!vwUjD7aWc5AWMXx!6k(wLMCRI|!HFAn8Di^>hl% z(?a&nu|z2y^Ua(HM3#=IjaVFMzP^M&Ya61SeN32?$zbfpF}T0TPS{h^ z_^errA`%^vKEZePXq!hnzFw%m++%0j4K?7t1u1XkXr2m)3(p>`;O~EQQHCg-Bs9X| z@fjsP@;C{Nse;`8wAY%B>VCkXTA0}!W3wRudr~AkGqFuN;Bu+*VoZA3k(FaXL7o+-tTHYoqeKr zg1RKy_X$1mNKaU(qKdr(T@xpyfrexml=;AvWgcq%Oa5l_2G71$wgflMTTLX*v+psV zNrK|dMkp1$kS&JX$CE?cA{y_YfU)?l)xD+QcMBKT(4!vLdE7#ht*1g&ikTp%7f(7xTcF(m-y<6oz#bZ6oljf{oRf4D zjn%@dsiuK${+36nOp_WSq))!+ry~U1bXx4QXY=@}EAn2fRMwb|fIo2>!8{_El*i8K zvq4Lpp-DeXKUytV&M_`XQWPRC>6`84JQC$2A>rfdlLAF|dxc>M5(!(s65~=wU1;*X zb9644MRL_3OA6p4H3$wln%txb46F;Aw6Y@qku1Ay!Sp?Z)O&@ZhAd7&(YG&kn~q^e zM;|z>|6ZYoV58uvXu>5AkOmxr02GRQFZ*}&VR&y3n1sRkaU%;Ywk@?nRoIw8D*HMh zLEZad5O-Ut{1#^%cl?s4h;UPF@|-!zCcPJgLbS#=zKmVwR5xQK$N4)$3nyS*4CB}1 z+K-ySRRpcN1=s0Npj`B&*tv0aR@9gFo&lQ`TnSf6(247#H)9QNuEAl?&DNFY^LB}U z)zhy)*u#hy#vbv%#%U&F&nUr(z~EB1OVr&jnoz2v>ZPogQ{>>4SF97~#GJ2^rg73% z&5f*qxle?RE34|+tUJ)3=Q8VsNNx3=#HLeC-1JNv!t!}ScBX8eH z`tZ?4tY!~UWsKzM4jEELcF5<_Rt&~8^%M#A6I=q$DG&XtH^5x+pV1@P$*0zJ0v;4! z5-n}{Q0QGHz{?&~SHEyY(94<4h+ASUE$!k>8L+wp&^URg*P2yk${t)1Y|K+c;7szJ zu92~A%sA+KU5L7>V)+YspnFaZmK1-O`8L7n?olfQPDM2<9@5r#+c_ER>!VW3t2i>H zyCYs9#n)_=#UkH&;<@WjE2P(>^w1satpuySn%s@{yV+C_wtU__T_IJ!z2)at^s=HZ z!?*0i}&rGtpay!2JxAj`F6rX7vsA<$+!jPm!2w_ zJU2p%p5|bk?}1N^}Qn?fl%_%E_sOu zerU@-u6in}}~LP-YP6uz&OrK#Y`;l2~a&249>bWrFY@kd%Xp1`8E@=|v4w zDM6JC>4mh%FkipI!it?aEzDqYwqOu zuTg>iA&vhp`aeHF_^78d3Sw(S-OZiD%~_X!|GXFt?YyK z=wp#mrI40FqZ8pbG3e|iHd=f8>skLh#O9Wr8I)@UUl{?%W0XT#=O&F*Gk!-G_gKch znnvWH)N$?Z*jNSWOD#mb(}JVH(ABmVj;EV41Q7Y$TIt$tD*F}4GhD!`F2Oz1QO@r1 zs&KijM@{PNhK7ph*dG5r9Qd6XdFYsBlsu4l*gUscgH5QLuq diff --git a/bundle/ruby/3.2.0/cache/git-1.19.1.gem b/bundle/ruby/3.2.0/cache/git-1.19.1.gem deleted file mode 100644 index db6f21060b0475cf3c93adc4a3eab53248c2de08..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49664 zcmeFXLy#s+5H{F7ZQF0#Hl}Uc_Oxx=)5f%I+qP}nw)@@h-#zTczlS|74x5+Eij1nr zjLNL1vMO!=xEPrlxfn5+dx8AlMNIz@8yg$Q|KR`8|IArfIXFR>+1S~cIG8y(*jYfB zm|594m_dk`{_isA|G2KJvx||_e;a_Nw z3c|uazre1wloT#G(EVm>?>yQW*(@i!7s(fDR)mIWKvSFlAZ3<}Im)BO4b9j&N*NS9suzy=fRybOn*Xo0Bv3>_y`;gi>07 z5=*t;69`#~4$$lQRb}!DtBZsAJKP|3v6Pw-tD&H7ju)nk7cJzklCo075M$x|QAVag zC6Nouu8vf_(;3DH(Vr31!mr0!=r{?GXp%(oSNM5z zIiP9zAP2q7O^Ln@`x$kI&ioTOB&-HA2sc@wnnwgxfucXBJE;9tCT66N?4GQ>A5;N8 zwc|2}q|Nh)!2?T#`KpDIz2& zeHhFRWo+9Es{o7t_~I(&-_^5^RL6uLqhrG5#|9@akqd&vhx#iT0ievvYs4H5eBt~5Ri zWPIbP>*381{P+`mU^Su5$=)w;ow+wV*RNWwxSrp5v2p)pKdIEg6=!rOVqBq6#ZLq;k;dWf+tTQaARPqEFhz4bFCB zY<(vR>T;YI`rNaw-ZDiPi%1ld`7{L--e?ZQ4+dW7oIOSgK*iFt)5ODd>$;??9IMI< z)9HU#iW9`P-)sC#@)_#%HFVD6~EQe9?XSI zI|t_BKc5(IICvc01Npyj>9*Ks92-NnriYlXtu;=I?8tCAE%hOcn6}_(*-ibpYGJ3@ z#14ZCsEN=fbt0C5fnf-Fs_qSMkr!vdw$lKWOJ}@+TSOwBs!N2$5q;+Y7jgubdI~}p z(-rL0Cq}aXrP@Y%MR!nSHZ`b9)g8zTz#3$xDJprIaqCckEeEV2&xQDuDJZ!d^P>4k zvJvu<_u|cW-^p=KrjN><(~QIGYUZaI%PTAsTYlKa)XxER1^VtZ9=OoHS-gp5q?{id0*-*JC3pY*|%~%3~!X#$qMG z**`+(vBlg-9Ok)yy(n>N`ry(;-9pabR$s4^n!ICMarA-g|jYAT)z^TT}*)Sj&orr?{Pq?Y=`_3Z931>6>c$p_j zygknk-zR2=W7jtf^h`WxKFNi z2e3z?PqW>d(apHJ!{l&oNlXN}*{V>1y5fqdF%?r&QBy!yB~y3KD`(;oA=J*a=~wA2 zaM7w&n@2~--|AlB$KKny^Re`0<;Bgqw7U~5SLd#{@sV=*V-f2ueQ?a=Y$EfLNR#7j zbLSN5)&8NeMt?|2K)Uk+ojI?ere@LQp9?1kHglH{+j^Q3%18n%x+j0`Q?RBODf^Q> z>KC5;w-9a*;v(KMlDHCp%D-ZOEFJ0&Ul2UL@M=L;!wp=oXBlvM}L?*T#YGN}P+J(h?cI-a??xkmASXCT^4yVL7+- z0s-@Ha3rDpzT6k=#3u{%Z0rHC`i;{fS3IfR5yDiqbS>D~?Ak5VVMxDR@G6tE4QmF) zK2roJm4eJ2N7~dvscMUkQboDhz6UPzf zeZ`!b*)@T9k`z-hOs1HW7aY8T!VNjX{X+TF`PeaKI5HjId2AKw?hV`MtyGB{F6#-n9iAhY2)(50#LrRaq&kQ*gG`4lne6h<)Kw!;{rlfRXIcHmk4-bC-fW4z9#wC^xhZKRkiPUD?bcRQO^;+`SN% z9)A2mc&a&IbpJJY58@%kNa)H~i3MoZdzJ@tfoEb9CEKo0jN>H}Et% z;zQimge&oo2k>%lQ%<2S!J0+ZtS83`bRk04lI%edh!6I`6CxT2dhibI5$$42rbE?o z(zahXh)$ccedy|C1;l{wa@-#VuiC1Bq(fn~TD$~0N)BwnkCAbUfntRPa8Cy!`5x#M zu2{aPrtE?~9N=)*3}^|csxr*a2H>^BQbazST7t`kfE|TBkaDLhEWfsCWOqYsqn`DR z!mD2O!Y(mkzdt%=)cQe2zFOPY zEq(d^#~$M&xv%5jF57_jCUL&f?i4QWSi(Xp;fM;le$gUt6bKD>-kW^!c)P0QBh^Jp zNJ@{+?=7#|e%N;cEw#)oA4&!6fbK1=51+k@9}__Tgj_Qf#0xX{DM{Y#T6Nm#6IU+y zjM_p6DusO%>Ce8Zse?0iD~6XtL$13+t@sT0&o`(y0XjLG-*vb4Ummb@+QnMGfAe}g zUCm{}(<0>pc!B$O=l4iY$8YcJ$2`2>rQ>0W$x-3^~Pnp7S79*iTA^I4?3~Y`DL+c(Q4Ts1fN#Iz4NKK zV1%&s2VPJ_5FFJ4)c77S%ckXO)tj>U?d|@T8$o>8(s_VE$tq|>H+^lfnIj0g4d6{G z&+3xLJG*1?7}M3Was7sk$2+%p(z|7{dV%3qDwXqd(9gWK7%@x)xlk#JEcBGOU7g4o zCmWXkNhuY#81yT>zZG574BLn+AM{$d_qNQ>y3Ku+undjrja!kbMQK^W=nA1G+(=f8 zv)-bvk^L;%E$O9`U{(x6; zAb#u8s26?}Cjgws`x-yR&~uN!R?y~&l2uS`p#up7O4%j`DJu*&)ZU0<)!oevWdw0n z)BE*CFD)#!F+aDVDKZsNO;d3}Z(j0yzixu5G(lEKc-umWGi=k(+*(ow`c#igUTG7* zoN!*BqIg`V zi&D9`{nPln^f$4q0;`wnIPMD(zOI4ttL5GI^)xXZKvuS*CWxBG_*ZCF5$=RlqH`D{O;<=8g}LczGC7-jxTX!iVwfA6P9#RWCL=HdEJI z9vgoqA0#E6DLNF9L%h1#iTHA5N&$Rig5LCcaL1JWX_5VTIhl!n2^#S)AQy}Y6N-YJ z%lG;m|fcDpD;vjKGry<{OeU4Jeg@MaSLLKlDyz59yWycXj4^ z(z#IH(|j#wU1eJeRuOOF#Z!Cfx`(Dk!#s-*CbeG6DvI;~PyjyW`Z#1|= zZGsxn=VtoUB2q;X(KU<=3B#sMVk00WA`=qX3${WGPQu$5kH2X1fT9qGq3Km0hM~ZQ z6sMVVY;LGS9WvM1@;f)$1O!4c>+^-wzQ_9G%4Ir&XF;TZzOW0*r<{3)&vo))!y8>9 zr&_JEpP1Go6JM>UUoym`M&jkaaX)hKtre*{j52)w({n?H;-5XQE7z*8hM4T3uF|w_ z;#qrmKHB>zaD}=OF?9aoda=KIoKmRuK14oqM5Yv_4G@CZ;T%>mhBoPd-I)Pc9>A8w ziAxRn-QH}^*j3u%_=^WWaYI_h)%R;OS^u%mgA6ZC`scy4v3;>?Te*l_=Ev1xWXG2_ zWoqA_R=+5+zi3GBzZ2CVUdzLg9~J3t*c&;#WQxafJG5)@5m7lpPJuI}ER zVOqm2E2N%!SdxGvN@vsr?UtDW7_ket%xvd%ck?tgil|Ds=a#VgWRmbmbH%`u_w;?Z zM76$zRnrSjq}E*x;t{R-ysiM|1jBUU;vUGl2D%H1QRtPLTj?n5wR;-Dfc$6_aJ%j8 z0k>P|J&nC+O&ps(8`>2l52ROoz{KB)SORR$BK=BrHuE=6uiW${YU6#mLc~M9T1a}+4)`d z-5q3lc7}RdvHx&<{}Wg%Fq$~7F`}wN-XB&!y@5Wm*)CK6vnPem3MGrSS|H+JZr|1k zwzXHtl`&sjf8miy=ZoVM=p34hB6Wtay6bA51Y-pCOwvY@YsA4bW7A^6@ygM9QvB@7vbgbro1bFWzepz}8Z zE54>%5ZgiZwYXag9HE`JVc+IzXQxNTX2PP06%gIh)OJZZ?lW*%t3^F6KwdH7qoQWb zg9@-Rf3-VhaE|WZ6k=*jyhoCqz3cG>yvs(k+;V&4P}C^@7W*$>sj;3UIh27`gQ{4H zwqMc76^k322e}94xm@Sex$Qg@!y-WiXP2hHnAQW@rS6K`|#5 zF?DbRQvq)fa%Yka^FH+_#AEmeBHGv8``a9Z)8FlP2OjFv$d3u6XrAcR0dsFo(k=Od zHUT;@Cmt)*g4du^*u=mWL}FlGGrP@g-3v@C&V~zSX4w{l%Ee0`)C`EY=;3T#&_4Px zK$k!RHm{##ch?dO_j&+jq7&J?IdllqkTmA)`f|x_1%}8EmZ}0V@66M%BA4jvJV_w zXzQma$2K#^))zI49?Tp~pq$6W0u_Q}nXG19NAAAJ6bd;#>eo3_*L9%-+k;})P5z5v z&Ym|5j`JJ;7q)DuJLm=p8Rh&ECOgpa4wu|fCA!U-3rE}`qwD_A$e7y^tGw+xXw*v5 zl-`suo6Jnq(ViggwNk&?FQJ+@1dJ0=$ckrl z;lw&dP1ML~yU&DpT!ZuvpGJRN%i9kdfb;BVL_zhMSs^{$V4(~5nSijp?;jNN6y^nW zm0hLX~9I0Y)OInGrouPbmZ?#`Cv}%NeGeYW*1qoOEdQ3=zB(j5@bXNF?IGW#p-!@)3p2Fg8;bF5 zuHdF49HR7buE$#57=$16HY#+h8&32q@#GQY18_tWHujD}(f?j}f5dqdNCJ?y!-%6r zFeCF^%u+JE0?S89Z>$VbN$CArB$G~MrI|F6XoaGq(F1eea_X{is)Z z;&-V%=sD;|j*A5qorDwzv>3t8;jWS3vK6dA(L4o zVAMj$vngi^L)R>y>>JM0I%E)ZLuKEY#|TvKzJgwPNl1_hHFJj2!SgYTy~&%8AAE%f z={)~lWDJNuOk20JjbRAJ5XJp+@aCS9ZBXR?S&Wx(Sr2BPn#kbZZA@oP6a|pp)V*WF zoM~P4BBD9NF0jM#`r#rX-#=lj&b^uEcQ;m9Pi_vlK9>gu3iMY;%MNGe-46SrQ?f~>H;<4K zV4zRfB$F-VD!QI_;=$~RB6(xY*Kx-&IYC^Ll`1vvK$O^VWs`mS(EF_+OZFi*Pn1a>`Mzgr!-c|3$2zuzS_v`QRbY_S_6B-J1ph{{J`Lxz&l}_rzK95B}xeI z5hpV-7lGS{OEQBm850cT%X*P0Z&ia|NBcNtSD*pImOM$(69N+Z_VIr?%hkk6e@nKS zFqn45=O;YPH=d`y-$k`qpPj+alF6{8TE~ilw_30x{(SAH&-3^9eIgob4Xl_|9Dy z$TS#@InJhR{-H2@Slc|GIyxzA1lT!+u+Sw1*lQpOo4vyJ%(`Nj26+Y#3%84wl6@B# zqO>7w&| zTWNOWb3XFmE2B19I*@otYX1m0%dkxX`=FhOw*C9U@ba`%+)oZRaO1>e zOR|q`hzLQug#Cn(2$*8piG_;66J{i8&{rInmWHw2r@wPM_mO|`gD_2Yw^?JNEHi*!KM?3tCSjs1>y8uLjF6OBhi1+n{}OEJkL z8_>&HXa)#d7TlgXv$4G)4iZJ*>REl@%7%9oZe>PE`sK)qtba9j++-Pp=Bbg@J^g*H zMwc`-?{LnsS-NMyI;jncrbcn}|K-vjmp%h)=@Dp~yVm`|#nO72{>i#7lJ2^SCq2># z_)UZHgpg886FMx1zC_^(b|To3R6Y^S&f(2~6}kFO@=KoMh6ddZ1T5qnwNx_;Hs3<< zF}$6cPQEhF=~q#)Q}lqcV_%(v&-u*BfM%DG{zu8E$MY{)UMt;k?RFsmt=w4d zU0Hd1fDwf-t%CQL7<0`|p=VX8>;{VRA`z+aT4xi9^7a6U*7o$5xsyd8AR|LN; zgyLZs2L7Ng9piXbQ3LY3(DM7%Gh$xQmWhn?2^L>S@7Ss7dT(K zQD4GOT1?_N%Rlo)1%wB@fFz=Tb&{cEKUJk73U1J;2bYKsi-J*+hn|(V3!ezysgx?! z*b)bLcrAUb$}Q{oJ9ODEE?IkA)5jZQ?SUl(9+IwPS!8Oq&MxXrrcx_|=Fl^B^oo;F zw|2)O{(r=pGs2{-xbvv+HgblJzAhdllLxI1H;*CG36Rr?U~p<>K>`hH{IWQ64!U|4 zIIb^W6wWQ2N&O*iwgOT5`zyZN>jBfdriEBp)3@Jb0IprfOMWn}yY?A;v5&u)cG!U7 zUdNNBDp&3tga_1z=)%BSJ@_#=o>?|HKN*;e%ha;_eK=dz>7ZLPaY&a#0fcuy%rx|a zGtvI46D?@AC`;TCW1rlq`G0>6r@zRId_Rv#N*`nfF5Z_kpXRyf8Xk}nMnz-+qO82U z{$1jDpx?*{9A^C>NaAuPXw&d0XAa!(2H_%tN~t+{N0Cqa=0V?2_ry{?q)rEi zOSs1J4xraNc&L<-%b+0iWHX*6Lv|bYejGv9sD|r&q$=zkJoiTI#NlDbYTmWkkuWi@9wiNFdodUU09_m& z#@qsZN4lwcHum<-|A4L(v3#e~Sz8<-ImD&M(2UgiR$7xan}}7?5{}C z%Vuh@&MbxhO0A|>I+OgO_u+twVeYu7(Vj6|WVYfyjp~&mf_iK$WZhe>4{6*BzNC`= zWstKtFnMYU1_|cVn5!DrZ+JE8)-jVyz{l(3=jEZ4gyc%X902R)6|j*QMV6JQhcpszB)j@|^^KjWVHd(I4TkxX^{6e*k&%P|El>nm-~H zW})ieuLN;LzVnOxY!|YzQMU66$iJ#s2#IFJA;HLV@Ek@(5Q1oX$-{Q)MFtkUF3mD! z^{w45C%Ym$LTp$?@PzNCfgHH`R(-Cbuz_0a%6W@~njtCTrW&}*(vPi8wX)MWDvj>E z7mm|jVtj}fJ%(;^k+u9iXGbk!3V?vc@{240Qvh|S}hLZE{Q^(XPHn3`Xg945nc_07avc3ue zEcdiAEf+W0LgsT-VHQmC>xB?|sJMs;WPUVG z2@NXD>;y0DE7#TWYeJK$@Jn9z|3tx(MZ;?A!x}R{Wu0?lL5Dr0&2kt@{uJGn@ z8z$Z?-m?{MHxATbWuA~D;JzVIbBGuRtj?6}uSkZ$8I6SbgiC687U9iS7+~pmA;S7n z?z%CU(i%36=Z`(zT4tY1!&!Q!Lr{F~Qy6RRQH&Bxc?C!AuhtRD`Gf~bS*wL)1-|p- z=*(#4Uru8Q7tfHWHWi(wMv!oGBiOBtP{V1W5NDK6Id%Xo8}bpH7pU|i@t~x!Ixuby z^crq%EyRnPkiv;!%~<4}JdRGtfiD!KFjIklSG8m8gW!QnOW3=`?fPg`yc9=sr!4%H zn2xWks;HHfZznNUld6-~{`)6Bv!GCl>oBmE;)`9{4c^q`u;bk776e0ju5^ zLoNqMO`-0r@;!Usgk6_5r#HYBcQ^Om9iVSy?kMHxYydU!d)#5iIqjE58E?j$hPaih z0}i6l!yL zdNk!790zvBZLRO)!KlPG!ZmNpziXIHTw0S(pNEHb+_!tRBGThOQ5t@{{O_|85|k4G zm8yujx!GS&2XANZ>D&gJX_WVn=VTnv6Oa>I3?a>7+Ks;LZ;6-)sKb};wudWk_SrsP zw=*-VZ}tW!=J+Wvy^xCpIw&tAXZmMx5J8nhT+TyT)6n<#_k zs=XP9Upn7_?3^Cnt89FJ@B62{tGm~FkPcg*J;s%Pi*}~LEReAgxVpN0o`o?wpubp5 z4Bcfc(f7gw=)xaDQ|kW;Q3yW2WQr{*^RL`uHs%Nr`h&qTA-h9CpzJZsHY#KQm+AdyBO?-g)u3aR_*TjM6E z{`4+A(vmX?Irs^red(q8{uz7h1^eXp|FO68n+D#C`OS!?zpE|@ri9O5g*8)CJ-cgH z^SN?IETH2DKv~Ru4p_+;iI7O0?Uq%pN#Of{wM7Ob8~5#ulxN1q1~AhYE8~($u|Z31Cv-FJ@wDNhmN%=E*Q?vtttSc8L^z4|vKWcYJuo4j^N(YE zK3l_9^wDGMDJ$;-@DMJ{gP-x=IP;7WqJCv(S3%|l!a|~)QQK@leq4gFSAv8vNwRq^ zcOTAKoe_z06Q`3DgxS{|`;A7E$h@*`ue*yj&dd!L1+66ONzG;wh=Iiypgqm&nd-CSJ1dA!~p&if<1?jMeZ@6Uxb~6%yuTl~ax? z5aJIE-Xi6jL+uLi9hDd=BIObQ_^it$pk@*MxQet#L5_=phTGgPMk&MJpf`B}{E=p3 zV{;Fg#9-DVMk?h!k(%iADO$)zdKoN#4GX z&+|dc2=EDbAvEiFXIUptegE77&A&~j>wmD{{X5knfL+V$KVCmTnKht5Bk}L11AYt`krZbA7}@)(KY-J`z~1eht*;JXZ}JxqEwcbBSOY!WTog-f46S2j z6Sxa}^au7ba@|F?xQGvilJ9W!_M=jt#;9|yp5U;)m2hidT_{!&;3p~AR_|?Kc&s0| zuMiHsV}zoqb0=H`ywxEB0%eutrM@dO|nP!_ugZeYTOH{hm70Y;d`OtM09j z{1`j}%B{VKefxi2{s33GfH*==^Zp|{u*v=9PCuv4Z#E}#w=g3Fj!A3YM$7PM4|hfSB7%~=AISoIdC!=J zF8&P1V4lpI^{s4&QBQ@hrCHmPx&3!JX>GlNrnOeAuPE!`cuO^;GQHcK%V!;+-f5^G zui`;mFz>$~18|7dmrHWFsc@jCbbIMZMkg)XXmB7l8$48WPdg$ zioo+ZW3Vo4@MM2plL$Dh$`p~4*^4Y(_K`>q%NVSdY=sk%VyC1mtV5NC{+^M zj6w^jDTF|@T|B?QG2Bvb>0R`8TOUwxbqNSdD8l(Rx5* zfOhBf%nga40N1_2cuym|#pvbL`iF;HFg~YH_1H{m5)3!3Geb!UADelu$-g-ktI(kQ zkfZf64M8|+B9MdO(0}2A5{?u3I8Gy6z*(XkNE62Ncl#18*o7tWvrOz;YY|xe(xiLt z%sS3N3bo3@R*-h;9xkQJzSt^B)dbhgfCE>=h+sPyY#m-e;d@S53Z)Wm&x>52RJ~(9 z@`Y1~XLJ>{zr^4XvnS>wA2#VZx$UY9JHpr6^RQ1CB4OK*4k}kpwk}N(CSs7$E@782 zYX`_4;_{r=V*4fle1i#Bno}0uA=0&Yn+85TxTdRH)%dr}%w3v8=AhI?6P_w!%kdwv z!bC_`vQQ9(>Ep{5J8>Qog`jjs`H_(T`Dm1}TI_QS?dhoRn}%iL2(8?(2~zFs0f=D5 z2b7WYraP?MJM0X|`7&i8EG1a_iR9_-v$}@AC8ytbBrFy%R9daUt;7qFp+<$9aslnoji?m1Rbkef=^=L&NIh+JFTJbT43y{ zGC_4e$U;Rs&Ug~Dc+8~8GAHI&*^jluh<6Kfa?}CBX}OG(81d4CHUo&)hZ_KCaIcMN zwUm!WqD|7NqGV)fu5NMgA)l3V!R9W|j%7{YaSDsGJnpJVY4B)5aL)Bwj7pT1Fm|l0 z)2TULVZ`BY9%yERqX@c{%E*SJ@zB5nB}@)_ z$jyG0vs$?OmLoB}{4(PV9i+}vn5xN%@aT9c29@q*%D*dyF%->vk6*Y6(E#1PNhcak z-he4Zyd%xiX+(f!9Z@O@L>%AC45{;(HM~kbhK+1#<7U3K{a|$syQHgp*sXOO>j25}c%pSfapCFkoWM$lV zM=d?&9_ZUhmG|T$PMxVBK{feB`=l0XnMh@^CWi>Hbe8^RQBYp>Oif#nos!rTkf(M! zl~=)Ei}wx{H5R7(eXmgP)D}rOTe%6&6fw?r5`11@#DntV!FnN=jS%ITj_?xN4@Ftz zmxQ8EohZkiXyHUCH3w-*S9@sT=W6?f#EzH$NsXY(K_i(lPngOKFkI!X?ugIb!2J+< za`0WfAQ*0_t#)0?B=Ud&Ym3@55|G@#Y*L5Vw=CUId~sLpRw^nOD@Pi;xVTCH6M% zZx^}IG7St|Z$mMW*iiU;^E6B#!}@e`mkD~}aD;>^(leMBA=@lgrKlZ-RVoncGGnJ^ z3R5zv=Gsp~_>b}dkV(3z%&XFE%-+CVj4R;Kr4tD>*BKib4;_5x^Y=Co+C3wMr6|~m zFd&Vc(*Rp@62x=t|JYxOn->Y8_58~IbzI@AM*a_!zT;k~`5{1ZX^Q`p4; z=5BAeS8FBFO8|a#b`Br6pQk!h*yRK%NiEQ84ff@x$1^Ap{uvGSmp25ZM>IPM!|%?? z^OH(|kcH;?Jb{&+Q(QQXewfg&VTBLN%HJ<{R42mJI^<7dJOIo$Ko9 zZjRU_0|&4VIEv)7k|nnjse$ek^Q%Bvqk`bN({4IxI{PQT z^_Tw%O$BW0RO&-Hz^h+I^r4U8dHrP#5tMcpFTqTf{-#}bUU#np6Kas*D2saKe5>Pf@a9vHxqRVK*$hE2(Kom{YP+Fb-@jWJ) zoJ0;CD#TfB53jv*p|G;dQJgGRfFh5B@$Zo0bvVN(D4IjMwpLri@#Gk%zf`hXpF&%- z{D%Il5?HK1^66&T51S$-+wM@9f?cY>24u|zaE9LKFEQ9ek_gQz zH;TH-!waUBoc~mKgfAK{%OAjcEARwx+?DV`$V2K7k5qy(x@s6H zqSzB^RhX4=)CA7%_IYmiwc_p9VNv=u_ov84c*YIdLVdOkR^B}n2ybR_^bD$(m-5gv`{ z=4VN4Ots&<%ektG_>&jDF1%JXGnrO-bG~ot99Y9a0YIuMn#miwx&h5{Tb<-mLS(atHUlz24?fu7f54{HSu3sRQ$obpH^TUKnMmT!)jXRFpAwY?B$mD zPgSiV%I{LyXBzxTGU8PY%T@GMkQw?Af_st|>ryWz1NgjEedk`+l{D)SI-}+f;Jkn? z4&RVO%b{{q#=}CZAoc{@<*R(QvyRlqMm{6fGx_qn2_@7-=u$HdaR^#1U|WV>xki7CoSJDKH(=A!Tc%1;Q~(2TJF^UcGFvQiT=)1e>OCjI~-%BcKmHI`ZSZlK|~qFBW1# zTRMlGWstQ4Y3)FIV$Q~h74|&^B01qqOvf*Ij2CXfz5=hlW72f-?g7JwWRN)Ww1n}P ztX+^}-11AN3d0K$-FfYlsWi!=pn~su|7sv>r|_=`Q5$SC&qsJ223Zb#i{BhNYuZzO z$pa_oIRQ-pBzyCfJI#bh*0C?c3A)y5nbwhS_$}vBE-q3NP{HrkM=vfyVo5|6^WO3g z2VKh`sX@r{q2V#}=W1@e zfA!gtzYB!8&zU;I-X{d9a#`I|>MC91cn__<%2ZnIpV1fsTr&9U(q=h_l#4)EvaB$b z?|Kn!R=MXrdYC@~_LzLlRAd7{f4!0l5D%BOiDelk!cLR9LXER2~H|9EAG1 z&(sReq$cRkJy{BofZ0)I z4MnRCilM5At^~6hoe(^{C;Cg9(E3tA3$f;bF6?HU$8*A(z)#f}tjRsp{5`La_aErQ z(~O=Uaot0TOkFA7r&?Ic-sEdUzw1#!Y@Hyc%!IDN>8>zS<3lG(2QHb0#gB1su#qWb zukBEW)L0c~b>!CPdd0m^YF zj-!*pjF6s=giRzbSrkfwW8*e3`QR5Qqt^CEc)-w(leTt|B~o%-t?q*v;KpawW>Trk z;Xz`QW5}#^I_U}06drAa-}KoRjI3$M_34pSc*|lr7%W4YhMe*57a*`BBfA|m5o6WK zT@KZPIJ5iyx$3MEjU9;NvvW4E=HGp~=U#f&;jdq@C3uruUk(yR1cuUK^0_VXRQdN+ zVxKc(5h(#ywSQmIG*kcLt}9W@YJpuxQ>Kt9R1p(o>B5DNBWiaz+K!6fl49H2Do>E- zc^hi|OLmeVBOtR;W!OiIK+4fCRF)$4IHqF3peskFpLcw)RZFVIZG@&OwG<+|1|C-> zO}++MI+ru*5=!e<;Gb;rJifm;7`(X4{Jwhq7(OyPz$@6TB@PJ(VS3(wWi>jxSxDJb2^Oq&NA**HNA+2rG zpaGgT6X{FQ)0*voVQ zi!qLa_GD{rp17**U(9R{4S+pP#`c=VWv8IklN5V&{%LFm?;H&eAH5g!=df|w$o6rF zDID#FZkm+a(k+OP)UuRYYUQ;Cf?{-rCamI|eU^9Q&m&xBWSW)>ALa}&gUPzDh3kd1c6&vd0_$ zqxgLuSV_dT`8gRemUUc!sq%?p2Qhz57??l~MEPOh-@LhUoM@ zaXYL?`PNS~@^J3pbs}fTVgi0XUXNHbm1izTRrW_k0`yW8IE{zueE+3N1YQPYg+Y|* zC54aBo59_4jP*Qs+h&GhGU97eJ@1m+-%2^*>2_!?l^}p!yKxcA7AU#}kd9+?oOhFn zDpX_&OdkCe<51~~Y7^LaY(aP${sC8c2f?mvoAUf3o_2NX7h)~{o%TjYD5m-jvyWi; z`lb+Wo7ie0P>`lQNn0WsIUy#>LKjh3+hh!*hr)A&e(%FkkNKDyYXOp^u}H%qR|LM! zqi$i0;F(>>16QW!z-+ys*s=}2=XKRwmvzsL+M zLC7HXr_qk9M!;Q#Z2Hb;fGW0Mho}3kyEdv%Y68z7)NS0u;&X$U*~&dEiog?r0u7PI zRDmeq=0y|S*Y3)U#?S5FFQ3P!w>=b3U(ZKNC;V9DP=YS~J2yzxy3vxKoK{c?$>w~o z?okN^B=7DI5^>}+(N=GoNVVT(5Hv9N$Z~hcazodU)8$*AC?xGJi(;eN17?|;((v|# zx;TS!UjFnbBu$}LwkyM`Ql-a1+_SMWZ|N--?4gOj>tZbyDl4E+^(3wL)Zr%d3`;co_-bHEfD*jWN}r3vlW1=+KHylY|Z zNS0r1QRJ)`-8Kde?;Ze{%LgqHew6#`FKdR#LoUNn*`m;DB$~uMDbjj)8zpUy zqU-4Z9F4#6N%x^X$nb%R@B}UYtjPv1fG=Sy9`bBxfAMn2xJ+>?v2Hqzkc?igmeg;r zD`Q)==rIRgvVuf04_fQp;IOY8M4Oq#-s@7uU#+)8^Ik6PRM2`R!fOr~NUHy> zl3X8STqk08%#uOH6r8BAot)u(U&K@lJYw5|eb_*}&w9gtv;I?$WUl#Uk}USYo6Llb zCE!#k7s#C|5}veft!P!>)7vo#T0yf-4V-Jo?*rGv`dU+M?-Wjf4l^ss_w|NAuYO{) z@uH26l9gBD{->Q8!L4ZB{x$h9^^jw6zXYLitNP!i$Swle&i#V&H&48LnV* z#HYXJ*Xp%8G4Rl=^qc+XGc^)eg&3CjprljuXB%3C<7u@h>T38IgA|pxp>{w7;4$u+ zr@v@bu`FV8q-@_c!Kp{D!xS0#FCM8J$FiVCHb<9=_M+?)4zAbVfbJx*8shol_cOZ; z$?}y*)5wf~vC3^jxKN@uU6u>dZ%eMWq<1d*WI@7zTOv;yGkgPeTw?;SCzf0@oL~i^ z0&pH}?HW}i7Z8rR*mxZgQe49euQr%zzG1qCH&V&Be2ow7;pBQIB7X-&u0_+m0|^*@ z3i2goO9uvzI+Qw`%Thq1Au>4xfs$-aaUk;J`low@ zgr+HF6+Z_?+~eT%gpqjRy26oo<6n%O`4c5L`;u$OKd~VO4EtZloeD`+57%U0v{bZy ztn#S+>sU+DHpp2LO=UtDMX*cnty^cfBBPJxNBI0-0B1m$zjEaPg7S!~{q?V0rC!ng zkmxt1`!4{bM?H8Y{vA%8V4MIMW>*UXM6|sN;9LnD10cv(ltJd|VV(f4LN^J*^Wsd9 zA-HkvqcS%bO`B|0D(bK)J#k z-M5|6rbOkFE!H4u90p?VL(V|jOY8K>fi&fM-_wl>0;*NBF%qOKU1B&i49>9g)&&J& zLZ9=sovp#n$ZxgV!_Cg#Zr|_UZEx?jw(bu0wnv-6-u7;LZ*P0cZ>`x;%>3A&sPh+a z%po>iC|PtO_rwzk$CMwRYx%#8H<+xDV zsffau%4c&et@VyI#8b*W0*oc>%5W&%(>2JFs&1Q*a3uQmIeW!lu-E&6IKAu0YuFr4 zrL#kn8|pfd#(eUVxx$!_KHpbfc5&b!Y@-SQDgmn;I)3?dW0`OyV^d=o^ygQX0+K7* zehY1LLeY}5zZ0`>Kz6*uqmgph#MKUU^vY=(ywz(he0UDUbc2Sv(#{b4Y?xWwSMNSB zog`XYS|~#uIZQz&+AgUSu*;KKdV{12j(@3eOG3if@J{HSi?laoD%I!?bh;h(h9WX-Zu(4L7vL zRyP_dexYq8kp`GZm*GfY5@{m3B?TlAfRLY9ekdiY~L*a_OnZ7~7W5vWC#K09U*#FfL21h0zj{ zLhqm-#M0hUdzZOEmUh{87A^J#GT8$Ip+HxOTL&q|=ZlA=E;lGE!^R}o7)8-WvHJot zKL{v%`Ntj&-$xNfkAbs+sN^#a^Fp8V=j&;pxAFO#g?!BN?fm%|D)&UqkBQ@K;gHxg z`HYOe8LNG5uZ%N^hVzkfd<%&|5SwMeoUDJyl2$38S3{Y`MGQJH%aaWTrt2}4QG^oO zP(5=<6c4VF#*f%m1)3!{ZktVm($q$8gs9Qoq^~ayHJ-;HU;C-mx7#2e)A^(y#N2su z0bFI)C5q1pr|RN!+XM=Vb76usm&a%40Jx_iJH5yaEKouTI`o;@8^c~Yi8+2Nd!sp| zER$1UZx-*pNr*}u*kP%f&(J%bzY7XVVuzIw!K?ziV`H`$_8}qRPviC_zrCb+#^BZt z$(zrT6tHKqT6>ls;9yQmPE(k|Xa0@8GuLxQcltgq@HBg7I<%kYBE}*2h|C-OBs#8- zlk6EQ{zAFUTn==V6|#|q4n`CK3r}DkTB5hAt2@%e1A1>F=&@%)2uHhdmcY0(LSQ7U zjl0FPD42^|rfb-FzSLsfrC}}7OwgN;h?}>ldCrB6Q4zK1%`EAU|RvjH(>gDvQgJXRkO+pl5ja0A_CaVxRl$8|p+pi}6>@7e!z ztBBqITXa2Dk0Me5Tg~qNFYx%mFrw6PWQvj-*zY7w(;$c9Aeza?qjluNWx}=%!eym} zhJ&-BtSn05RI!&vJ^M;Nc>q{0)?Wp{g7xUId$0Zyp3@fL)AYh#i9sp8S9jzk_5Qu6 zpMjzGbYq2%-nos^uLh5W#{+3yCBzKK@_kC= zQRRjn{Wx%VSo7~Ds>U2>;k3H6_l&6pbtc+!!P-NKRr|lV$62T)11;?wqkciTTQ(zJ z^|t~wnwH`ONHkGhfFsMUGDePIvPysW`kI;C46!bWv?=Kc8qDu@)L1P$^u}g%k z+8k6R-tm9Wqcp&&V)}1hjicC`hx_D%QbnU3xyq|Ho5{^24n|nC3BNq}Pl1Y+>fHNl zd$E=*ry;YV;H{c6#|I?0>xm$M2;=BE{s`^azrMEm4-n_{`Kp(BIRVd~g9~@*LJhRD zk#Db@IbsgqQvOX>Ye>-r(MM1#L>g$M@?DzV69DI;J-PU910E6>m>wf~)vY-4Ee`ry z_n0Fwf#Yy-sv{6FIocL(POUR!H>RS#5)u4c!rX6Zx%DZpkOyK7Y19umJt}s%%R7qt zDTSGzGR{~EnJhwZn_rQ_ouQA@%^UybKcJiNC$T<#GQ$qYn&Lyn|ouj;O2Ky#Z} z0^a?_Rn!CFwrkSwx?JndA}E^YAT+RdqSpZe+5RAb0`*E;05&exnuKFqf0tj*4{Kyo zoPSI(@Y?Dn+S7RPq!+WN!!J=dr4FIV5JlvNi7=9)HRqI==h`ZuL07R9VJ;Cj_`bOY zl7OzXq4cu<4>Nfn-1vyQ_@enkjS89qA7==WY5CLbA+q2;+AJblz1%ut-N?22x-6@I z=B#e6agLJ~G+T7ZEwp9#<+|XK^xm%C2pxc#%Z3*DMn$8+HVg4_>cF*0d99dl?Ek+?7 ztZxvl41F3ls87KrBrQi4%`N_$T-V6v7OuvquAS=$;f5WxuhcQ&yMFTxilfNRWPr3g zY9=aA2JTp*SQ#gCU*<*^WB>4Jv!Jp|me7j-;XCr*o$vq5dbI*tE!FZIxmK!09k51* zyfu~8RZ4o7)xly!Y4$@o6{e-AM+Dh>JDg zofC=%Hga?Al6teg;$Rz2Q{D1ze}uUYwZYPhSuew1QU)GZbxJyw1>$42aJisp6DB>$ zB}{U(13)J9?T<~I#9@ee)>1!4bw&yLW)kn8Mo=2OtT9W)-E$&Qn7pm#OgE8+?K^f=4sQx zGMEh|gICPzJEn_P911;>MBtJTl@CU$?n@#lnScg=jO7mA?M9&smLvi%jl86o?i)j2 z86UH`a3sXO=9Xby=c3unvA`U2gko@$PAa2GnT<)0P$Mgz4YaWFjAO=S-CJNoD>3Ox z4#t&7E<#f|AFgAR>Qv4-WRhictXRq{$~~3g$%XfJP@>3vFY6wYsnvRhZbMpN!CI6Y zXtnMzd0V^u$~Z4zoRMBYuU#6HXOxOrwihr-3k%l2dSU-B_Wu@V*x$zu{FeAnt*y>h z&i{LByWRQf|NSL?GH#jVDyI$z6^LZ`X&U!@3M&Uxwkt_3>DB@M4w=VRiVaPG7FprG z#t7A83k|J*$6UZbkv3}Ho%?n59sRkdYCjLZttAU6z?^Y(>(s6$0f z&O6Ri>>NBi3nzi+r?tuX<^^8vgc=&_=I!7ArQ}cV|2|#7{ysq9@8jEXKepOd6VfTjXu}URm}slT@T(k7LUaX zVsnuXXn0ZoC=b++`n%h*x`WSZ66orLW8%qHIr8uHf&}mU&r^+p+&Wv={<&91P?3?YNk_Z!%pm2>u-hkuzb>F&~i|k3k zA=*#`M+B~+F+A|0!T6@`fHKW;M!pT}jA3@AE}a|C#J}m24xT7Jc8A6x?Z`1GthQ`HL12YY-BM6U!y_3eAGM7-U5Ip>J zdpbaH5^CvgrO)X%v|Zg3nxA4fUp?~e8;9HW=1JYCbe#q@Rm)ev0^#B_9=dy zDC}XI=chSC6g6eeP8AdD)y_CerlSZdk4)-KS8bvZgF`&QK62jaW++4v-=65E@#Gy$ zFf{zy`a3gWLi)UZIQ7Md`GaZ>REc>nKXy%fF@a2T=En)?LHm@(JfxS+{Ow{;UC;tJ4&HW|HCIa|%uNOtzl<#E*+hjb9eO!r?1Ela79Y zmfmS-i7I^AwF<6Z?mpc#=c?vUP4G{OReSj1<4;w{5%_YAl{i`FZ;GdY!C87&1Q&r-YF8A(;ngQ6s0 z4Yo5x+?s3W>eKq?tCm3r7&<9(Ry_!!h`DI4WrQu16P>GPv}3MktI$Ofh|iF5L|*=6a$&;TFUYs8_mbT5>y7XLZ`g?e z(gBax`4?pz=Sa);F_p%I?b#is{7CSSDyW|pQh9%)0GoB3Pz6|9-9?P)Gv82ny zC@r-!$?UHT!nzM>lcBlVeX{~qnktgZMI9=1hm8w0>);$*nCRW5T^|K;K}5d=C8Ur8vHT_#8l*w?5{|~9DF*tY)N-Cp*bmr!ckbXGyi=_==s4_lA3uNA zdvtvE?BML-6BE82leLWA8;lrPxALmzxd)^-@n`wc1-WtLR+vx2|6W)Ng*+%uIk4!e z&Z!s&!}%bnb-yhY*3%xXUyXkEaFrX9ENwrd-G0DMNF`@h?u4>{#378JEofUXlUNew zM^ZUpg~j#?*|Rf(M>w{s|#zhJAp`&y_<*XErt8{ofGiuow`?tk&t1dQ2hJ9?{tn7~=&m^hpuB}ZvG1o*Ly;|q z7;(7ZG{B!z&ds|1PO5wWMsWR|TkS*DZAP;p>+a{Qnux1qeb(g}nG<8WR*5&@)WVYr z_#Id&5cH&OLs7uH3kv0yQan8$AK>D1mLvd3btL#3fledWOn)jRvaO-+KCjP0_bb|O z%wf#o0E)*q*lo(Wf@^i@WVJ0-XJkC`!mDW%2fYC*D`fRm3t^Fo zZjVYEU=ouCl{Oj-EoX8Iu;6WqIdq0Vy03syFz`^@qTd0+Ud_io2BVx|iYAj*EDzR3 zgJbna4Yy~VwHcxiv8xW7tXz|VOYvQ1)$if5BV$a8OMGGlzst)@OtWLYzjIN$iW=Nz zm|V9hJLvhjpmsaE9oiuEdY&iudHK4XkFN_4%-0WYS99tb+VqJGHG}q6sL4t+tT<=l z!*N1{_>@86`URRgpAG5mEbk61ia>qj6lHtTR87-T0+%6Xt{g7kYeuL>dS4fc+ggV8r`{v%@f)DIiN~^xWF37YjF=IE^v}PG8l8DY+#q43sFk^x{);=WQO? zg*DM(hC%A%<#leq;G*lCcw|6u=T1&CXSXR}Elkmz@Sb55@wS$ix#s38FX1FezMIq} z7LqnzDA}9XwiGPge*QT06CJH2p4h&SW@Vvch`4L8!xJmD!o-zkQDtGCFDD<=#cYKI zlwy@$*+z*`tTvn1l3v{DS`VMC&_Dg4i{N_HlbRTVoNJ8sI!jYck*%wOgSCY%<+lxcx^b83SXSeU{O|4;3VQ`c%z zYG20-E8|SUkpT0;r03tSA#0kspiRhZ2uql!2Ch|-+G|)dlWrdtVAYE``u5A35kL!o7kw31|uFQmRSm8mb!q*A_y;p&%a z6R5c|<$+o#rAvTzEu7Pg;?Bp22CSW+j~my(#3vgK{(|TIh9q!;uRQc*fQ zkj3pHDY%T5Pq%DF%BP(UCn+Zz(m{H$R6r}Ox`2G4B8Ai?NS2%&&upfQGq+q=sjAmt1)3+pRd()OF;U|pYfq2)hDp7T-)r+9I=t<5Nvs2kJ3V0D zRC0(?qp8@o=MP%Sl_h57Z0Cy)$Z*Hnjf=*XatT)xCuFo-zn5SOGNclArkbF+N79ot z2Jol5!MT>A*c<#xAvD|w8Wsq16mI?Od)~Xwd%>05#mjL)S|Pw$9UwlYge3U*JLmrH zo~v@wV`7UC@^C7U7M#F+{Oy@5ew;ddz$}-U*n0Vz_fRCrwUBW%D&T+<6VoDr(br&y z*cK~uIR8#7k18G+2LSvntDm{VcR-mb`Ft~tEtG=(hemBpQh;H&VfCx&v|>z+Zy`o~wn=*C8FxTmTpT2()+0BA|I(z}EU zwmmz`#p#wbVD^fn+@$^(jVJo zQYT^u;RYdF08rJOL{G@co45$e;*Dw!RR2!wTo2MCzx2r+E zq&&%#@@KR0P0iJW!GY;|f4Z;SJG4T*g6XLN-$N_nTB)`z|9)}n&NQ7~M{kl0+gwg% zoyd(`7**&_OhsX4tkoz=`f7ilOo!^Xfn>iI?P8?k6o}#&GiyRGr+EVgS7D@iDI3qy zGCEMVX8O!m9oWo%nFx|C%mwpvwyvHY|9E(!o*w@F@Tod_{^;<()bWeMlY_IP zJQ_wCOlHzI5RP9NmsT{~^y6qgWqZ26oxJ@1r-seafS29V;h1Uh8Nfi4M#ClziM_H zbzkn4*EZ70Yy+P(X+X{OceR%1dF|~w@?7s!t?HxM@2}N5TAupnAh8Ta3nRe_K z+i)x4uZ6v1ba8w1w!7L$S0@a(|J>f-1EcujgHUlz!uS{FKwRMeVqEC$>eWlOId*^w=Dlw`iZQ z(LTot(5tn&Q(D{r%eHyxCNJOOI8PL2qNZUsRBN}@s=NDM57`ze+4#U7fpj6)vD%X! zLkM$RQs+peV;(P)MyR4puKnAs(f}d>tgYeM|BrvH)yrR3Uw6E%f4sw;^`W|~Oc#YK zc5C&n)5*A?%P_@FpUW=uON(Sy9X1nFh=pJll*m$4UoJcsgArj_4E>UY;If`Eu6V1p z`K6W?q469X-zbL_l7~G<5AAeH^m0-t+mTruzQ(|J(yQm%`QC9YAMtGi9QdfLPspw& zvg$4q$wuSOOUFD?LowNV@peK|=OW)5N6-P3jcL1Dv5Z4mVWC&SjiZFTbF0T~u9O>K zpyW0CY-YNDK#l=;a!8+YS>Q7veG?Bw%HS>9w@5-7yyFv4#XjbNAukO)4ml-bU696H zIZ{@qM~(zNac(g2AM%kBDj9#_r2!L&SuP9p!^(UL@?#H!VrZcP$U>Ng?&9Wk12#68 z3)=Q(2~0P%)G}a(r769iD`5L#tdbf>#sOR>g3S4oH}uL>(b zi%Wq8&r3MF5oNMl4(T_L!)2#wDIIh}YAhjui>X{T%E@x_wkqY!!K_L)p=E(W%4n$8 zo8pGKUx*=@AAPYu^njvnxvA1n*>S$-dCm5Phh9Xpl{!{N+TCI9tHoaRCB(dhkv$p} zf|q2sgu{^Cwl6HA<`3<~kpn&oPfHjz9U^Ie31XO#I6C4@qjWawmGV$J`zjkM;cL=> z|2gr$b?E2M9S8iD`2X8Gt=(MwZ+O)H8vpwX$N$ept)?9=Z*{0@eKnB_LB>&LogieW zlW^m9xD*T^(S zqdg~J=^?tfTkBXTguY-?O0$jU#5X@{xF3rlofjYC>)J0^bF&dVt4WW(5g<+B$+(5 z$rh85khi&a*hOX*j!M^_jtqNw-HOjmjPRjgV43_TDJq~FvBuKPK9QLaW` zr4Lwhl^#6BXoQqC&zcT7Ifdtweh^a%1@=>OItNv1gJ?d*7`~gWT;Bk!(=jTx3JEwi z8=rDeIvVTrW@ZzqYYTmH4o6QlHdo~7lA$-q9}XqHg5~hvP8CAf>>& zGsqkyj#z+fIx3QFPWdz>XAYW1zibc7QWS%F3uU7yH+UPwhocUp!vS*$I0ce1mrAz& zGo-@79fk2&br~5YCo!X$?3l>gWmrET7 ziNqr5<57GC)MnGz3v2W$z00P|b~+_xN{xM!pxTAK z&(E`sa;@KTXr1}A&2x5-#%{Kz4M%UAe_akKjDH1Zgd3(T(~rj>>mg@z6-7gxVHI&C z0fbNR1u#iTNDktp6(d7=Q(G=XyXuN9=zAz*)T&}T53OTxDB<_a*W}vAQwz4#Y@TFu zlawGaIaqyHvU%?nS-pJ!o!N7`M;=O!VH$>~*w4A~EG((5l;QJxbNs*;ZLM6eW}`oU zsPJs$KjyIii2QFmyPMnj{7+jut*`Rm7tjBMnxcGKClLu*==n~W@U*$qaA*_J!1&|r zvP7xkDrG^UaqqYu4oW>Bdy0LRl0U#w@Tl*bbMt}hr)&&GSiIyqNU{%gCv>_vI(~`d zl^F&*tYW??j2uT@@$_bQesxvkAa zS@(9Qds%zgf{}1WhG8gVI4cDo@OmyWD!vjUiCPt{FolX^+6|qM#)+V;&7;XP!$$CB zJ!vEvq?2^6Bb*qUB%=Sw>CDL@N5U+?p_BllOY(Z(H&LJ6_{ydmHOEUcG){^rQyOjn zEu!=##lABaB}O1BzbfH~t*~s~L0*tTRE5$Iyj<9Zt0~4F&n~ai(=vo{5u*%UGNsw> zy?_8RXntFJuwcJr=fv=?a<&Tin-Q*?z$OQX2+X)s(mAMy#GQxX0AbHvX$&5nys7d z+hrz$0Nn>^kFS;?^%NIrGPn*z+y0EV?u*u zd4En6>!P$w;vO_hjJXWeT|j0XEG5ECbB@ub20)|=q3d~*mF*0*kjS91_5*Vc8c^S# z96W#cr1$*b*D`-g)=#}X$_RWr*~)tM#w0VbZ%;V@0=4eh>* zo~b#Pdbtkg>(%cZ5$T?n{YnXO*g6Yu>P0u|86dU$U1#gSH~2@Ltl!t&tk>>mK%W0& zrhG$xKfKik)eq!)BUYQTuZS_w!vB;*K581JgAvM<;A!L3 zO0rk#C*qV@l@U~}|GS-Oky*u$YouqUu5F#p{8wTHz-9%=u%xP%%*Gh%=?a5>tLjFz zt|Q|}&k$Y_1i(&h!C55D8db|R#iKeq)L>engJ8EO!EFWbl5U0BZIQVW6C}&51 zVy6~CTCr!=_@v-{s^dW5c5_iw%k1Adx|fFbdulL+GA^IddB&M>La|Kc z$Z*O=gj4)kWDvl9SN>~198)|< zhitm~0eFzfc6>OU1AB@!7N&{sJ5duJm|IvBPUYcZjX?3e!%+nZN?$f8dH=n`gi49? z{(0--LT6oY?wDoA;_IdSC!LC}?|{U_euwR;KkKjwPOO5=G-SB$V*O>+*CocnIDBP- z;ydaGn-Rne)-w+Qkb#p4Ae4#p<5p#}ey>m_*QFE3K|_3DOTzpVxC>^`FaxCtZs*tS zYn2VmqsecwA(mp9z&+M=#^AxZISM^GlkjZQk4lSY;p%EwtGwlMC=1H23N7a*ypCeb zMTX!PW;t`(mYZl4>e%D+{GwK3R8hcza7vdw=6RiWmweMllHF`}uW@@MrI8{`P{WZi zv^nl|M9F!T4wI?!HYkMZI2_g%s2&ft` z08tTZ>D-vPUTgB%SZ)Vg+yE|F+ugPLBWE?QDLv|NA08 z>!`5!HJD0n30Qv&J~-x^*W6XmIz<+eq|ZP?<2h4P-%T=F;loR)xiFJ>;VSwGCrPl* zQ92~44hc11m}8deA<&KntNPPn5XYW@`@o-tYBukW!+|_w7W5$leF_MCViQB#q{YPo zneai2+;}f>A}(E*T*=`5mp2#%Nrwlva<<8^{mp&n*^tTano~t}yv@5_TN6$x2V=!@ zYtBuGB-y5uyf6r2SWWis`~)(<(wI?tByx#v1aKXkS}zhCwD^fxt$e~A8t(avIKsO? zYZk$oci1puq{E$Kk$iocnrsM@c{-b?w^hTL%2W#|WbKm5Wdg`bQ^zsqWZ~tLbGgUs zow4?KV3wReIFEUS`9uCz?Ezk^hJAFFJ&!LkP3h%3TWx(7;Pb8c`%&oj&HVwCH#(j+0)V<~BC?V>ylPZklKGIZCB=3YUpx_VB^XUtgycfyt+;))x;Y+J7~R~oHy z)1>D~z~VHmf0x@sT{R1bYHxRM`z{6uOI7P$`NZY--lD0K$yqdW22b6YyKOs_%-pKf zZk6dn4AVQZbo!_%oW5m^Er^%2c%En~7S5C2xb8fyMtsU=OK3g@Nkpk*gb{>(%S0iL zWhj1TqOcX3sPc9`evWt=zWV?C&*1+t=kFh4|JB-VZ58alwzt0W|9_PK&qKn6irw=R z4hr^sKb-pUjReu6gE&d9%dEVNj=@&QnrKN~=V3;%>eMR(_5Qs&eE#?I>JLX}y%z^( zPpTJ~Z`sVl127p&u6u4nr>9S<7ynwuo1bz2qXWtBv-@w||GVvW zE5HBS?XUMgf584PyZu2%2FOCH{>xb40fXhn{5OOHeTo)c04=r!C5s8M+DfCW!B&|e zsFbHau8CK&rl}v-nOwf?I0ZDC@dRZA(hyoT6)aQQTH=rIfrhh{`lg&OQS8Z zqOyrySAjyMFBaGwn%tDDKr%H-poP;Uh(8XTt#VOnw42@rs*tK<#Iae!#3pkiWmZBl z6cO_q+V_Z~D(cv-u617~s}#Mf*+9VcOqYxan~S7bEW~KdI&MIhv&DA_XvG-H>Rnm9 zIy}Fqy$Vct2N7V(Tjj0c!N!jURO!53GOO;Tp&MtBZXJv#B1J+)-&^b7v`X9JZ-HOl z(=0+4)Q9qmO8Q{w)MGv81ygpKE1om_0~8Vs+LL$yzlTYRo7#F-X#!=*!}Fu3z3-nM ze{U`IHhw;6z1wPRwLbj(>xMUqgW%Vo;<%p_DB^V{Syt)Q_k)>OtYF!5?(;?FZRVx> z4hLl3;TPu}jMBV<&(0edxp@Phoj2qireEO~=N)rx<}H7{DEb;%rq5dV{rS&QeL->b zFO{~jM|C&$3P0bcWy6Eu&$(3*8y_5RyQw6|jglY)#f zst%x-+w_?u%lao!a!T44m^kJEA3ksrV$||%mgjqn93SfCvs$w2%=vts! z!ksIn0|b$ojDvJt-q`n4wc2nW)1EForTtuZ%KHWlBqZCUjT-&Id>UaKDc43vnQ)r+ z*eXE-k1SeicvW1tx6a5cym$HlST%!6_rqXXwK8Thkch^|beI-8t#F6!PKcouw~sZK*ZcY&b2kX`^WzJJ#h zVtkMIBsn_pt6TAd+p%06Co}4ee{ck!+Ig#a*Kdw4_}r-f?EUQJpVctwJN(q|Y%Cmp z=?Iv#qm7|Hv2Q7k^qz`$Rw_DcWWwbz2mS~%^vgDQM?&$^5Pyr}{7~vXJffP-#|7w3=zicxi@`%jJDuA{m zd)(Aao2Wb@ugJ*A$T-@~XgoiUnw`%5gQ^TN4#-`RBfj;3@mRXWh|Lgo*6j2*bkY%} zyLJEM!3Y-@6)GyPMQ?pN|CJ&}@Bk5U!w-c2MqrAK5NT&Rhsz9aM>z#69%qqdZZujWb^Vctq zUwzl@HnL_@x_U28((Z5x+>`^MtXpk1pS^v4eB6EV&GAWtnIfC~pH9B*J}GL3h8qub zBNZ`LMgE_Q`FjzkvJmF9Lsc+DhkSY6%(kR=t8~vN+qf22$qO;dgC5OWl5V(K2yv_V^-5qNBPdqWcuY6(uf4lJ5=lcKKeSAm%e}DRaZ1ATtvnK9|u|@LYmQ(4K5D%Rr-EoRZ(9lV{)5g3~Gfe)+BVc}l(v zRRdM9n(SSr7~?>+OiJ+xatvzq3yLwl_2J2u1U&1f;;wwUyR~z=^Y{@$D@{iI#jFHf z6-P?_NtNj~8s(6(^4}x=qi?FA0u-A2swfFc9slqDmMnEhcF9HR_0y}Px6hybc=VP@ z4Z3vwPdT-YYaY?_@1B&UsiZ@QR(iNp*=-vn^Am9o@i|DZIJ>Y zPAlNFwwunnm~Qn1j@cHKZ$KEnO8ESK$TAxk*WMgl4wF({VdNfv07LJzi^y3aIky!9 ztqo~y5=A@+wi^xgQ(WjphewqsVxvCvN&6*a8lo4pMntEPj<|R36o7>A?Blo#TX#j5 zJB`_5Pz!vo5mNyT=i3KjM6YdaDWb$lCJeJQX>6MrgKjrb(=v)2yDV zhI~*xs5tFaGcD!Myd`s5b5^}(Z>#ZFxuM=tizCn`nv|TC|GS(d;!aQMpRFAVf}Gi-B7qn*U?VI28W}F=c@j1}(-f&HwE_ z-p%lT;?Eub_dB}(1CD@JlvFY&L=`3_kVgw)%Reu>eraCn4Q5+s`=1V#-yg&S(^ z%dLH5Kpd3Xr=Trig?r}Mf7nM@^+BVd$0wgnk}Qm_Bm_$|9(qj&kKzf(#{RG^VS7+W?X{#(Req?X^=mPt$qQ+=LBOPx=#Z`@K1s^%F=Kj%P^{ zEw0KhX8q+Po{9_7Xg1|Jjr2oWk46JA0tptNM(lUB$Oi(HgD9Cr^W}{R>&~03|E^TN z=5TLlF5j&+m${AQ%p;35`RQiS0FB&8r8#rxOds@&9tcq7RH-ou3Neh~!C*R!lc2JM zH`FW5i>0w#nh~+(PoQZ!XVy%CPdIA`G-3}ZIdg?2P~UXJ zl~;mWe+n5j>Uo{&NH2Eeiw?C(zmJmh4w|$C&!(2u;am_2ddR2Ob&$bmF~K3n&>DT> zFSvCaI^Fbj;U&_tPCzuxE<)Nq)G4++O@FBHf(mZ@;rx;&m})uCKvJ1TQjZ<;NICwj zakZI-Y@V7wJ11)!saupkK7I^n`cNQ+-C%z8!7gHybfbfcUS?*)WI8Hi9?WMAX2Iy| zH9^FC3HD7lqUX#vA}lh1xXHW@Y;^wM%6j{~ZER(CG#m3hzpqwE;k>T-0vzYPwW_cg zNr2JL3|_b)!!0zHI%~#(W>W{E#;-hV4gedmg>J@cr$S2zBb>BM;E-ss=*nm!?T(xF z^l1>*>(F>8BaSC+?2E5tsa}_@*QxbZ`I>6jo$B0_3@|54VWX5nR6@uPYr%chP$q~; zx){Y6XTCq4$*>9wnR`(;HZE@^_0tha4|2Yjs~tvlE-hm zkJ9;N1y!n|M1Gr2!9G(HV1ix?c3FDkL?`s9)YXfrxq+@ru>9>=Q(*;gqniEYA`xpP zDo1B27L?$D6{L+bs4-%SZj6&;2=?~v_jquLlmYD4XqldO-^W+}qn{2x^mIn(gi8j@vG{wf$tRH68)p~d z2w5=o?s74%@wnvK;69SD)0RP7P>Kkzv{VqJBvHK30rRMFNNN_k9q?RkQ2diq11L!m zh2Tq;l|F1uWx4CU)p4t^+W1Y%O9lcZf~HNj(7sk)aUj!fVxTF3bxbD6>gd(1LOJAR zrz5T3u7i*Lk1lvBg5dkw*v2U%cZ2D|LWW5c>q-e!g7qn{guem3yFv~@rsdR`jPTlM zDo{da!(Tk~rQ3MzDWGvRL+dfeCia%1IR@>+j4tR3bZH}Lc-|;i2`fm$$3;|^oF~ASKsPN@ha8Fh42V7D0 zlwCRHsi)s})q(3_X7szdzFM|_dUIS06boGolmke(zg1*B$}4q9@rwGChXpKjdA6eC z4n<}-t85Hp=rQ*a8YunemOp z2v-^%{&{iz&jpx#_@aDN4xZY*+;9K$H0?a7o~FLy(B@Y+juD7y8b~GwhKORaZ`)Uj z0aeh&PtzTIw+h0arl>h2?UYRLU3;}1XHjK=-l7x1^VdK8@a)x#w<2M~i3migmSPKK3xu!|_i%~DGnEthN z!1vr6kN;>BtHh4MNQEWKl!Fyy1>rNNq*`89S|#Q3KVtnu&gzKooU*X8At&+Eyppu+ z*5Du^r!-<+9kGs8VYtW+qY^7z%9~h3Sw1NEMvZA^HSOFgv5dY6 z`Un(F;Gn1n|FskgHJ#OG^FRmg73~3C4uOvV9!kXlp-AUR*ufPCD};fuKwy_#EltJ% zX`&ixT=K4q;Wa>FjzC~`9XKEkJg`h5j8TCcHkJdyy5J8ls*V2nY=ZtV)bY#iG$N^v z6Bye4uuWRTVI~SXbF5)NwqP+Y3S6FWEhaaGvQ_tM-e|+2LN+g@L%pPurK*i zXB+T75;#8G%yz)05LDiz_$oN%gWw!}q8hJ0p~ws2M{6I78DBl2zze}zqD`C@w%n+_ z3Or_4i~z;c-E(}!!Nw?D&-+;1C-8OUBX^o5lF|A|f@W4TqFZg1j9x~t@z|#xKD`Q?4Mpfs6y0G>=MKaJ^gvpc2nn{u?=phR8fHfea*=`4fa1dADyLD^R9q% ztAhH$U$Ad~3gxvUvgA|KpI@B1WJ05F6 z^apz83k+@$0Jai^p?D*C9PsE--u;%Y-fsd}Xvc_Gn@2a3($>j|Pn{|5mexBhKmv)| z2ygtqW((!u{inxu4>{4tF~`}_v}?j(Q><#!kuDKaevdiV9+{ONGU#58r!M#cZb$r~ zLu`Z75=d@ubs7TLfn|QjdUVfxu_9pF=SR@&a4=MtN&U-TWV?;VZYQ|c3QB10VRg*g zrn4@Li?Y&cwE>W{B+O}=m z?$zekwr$(Cwc56A8>?;Gt8H6n{c#>{#C_O1?uq+w9(G1l%&N%9s+?K%P_t@`k;oE? zSTsDZkw$EfsVfxu^-8N7E%{DiFd_I{iMVm%fZ<5ZMfMKCyw=U7^_)uor6gGTkEzrd zy|FFuv7EvB-mxRK0tw7Kzh6|iz36;N;?a;fM7;RPbE~MLipCm2_f?9045r;w^EKe) z6rXhZtUwd>6YyY&QxMLK7to+TML=BdKrkXj{8mT-@+uyUD$G!*Q7(i<8EDv2Gp0Eq ze}ePaok`mSQg%+BrvM&DI- z+eXFtfcSS@R2^~j_jjie>GHu~VJ^$iofHFAL=9D8VQieN`Amo^T8u)Qd@a2Ib?~uY z((t*2MsP9&7Xim(iaCL}436AmWjxPb109G43zwt6-I5NlrPQv%k%JMAujkF2r=_K< zPaSsaUp#<2f+PDT=}TITTCo@bw3gh%j|GBNjs#DObVsWBZ&6}cVv@UIzgb{ly=ffM zclL^fD78F#mFI>~$Sf7=W(RsEe&NXOvb*x>nxTG1+9npf92>27f&4UgVqGrn88Y&F zqdj@`SXkS)^|h^f|5`hL`Pei!{~A!^UBl(|S%@ZtCty+Uj{v?TGEn@z%oDmD?ZUFF zqW@&u^|h1qeXyNVGiojmv8iny_nhlP&)@oQJp+&@5Wid9+%%szc$q)YSXDaRZ$7z1 zUdFpbNvGzndNK)(k?mm1f~ajt%cPXVlK-Pl1-yDi1dG-Nkt}>V;^L^GKLFX9(F(iN zShb&#na~5UE9Z+9*|uOR&)q8*Ajf8HjVe2C8F7JOYt-u^(B}6Hd z?uo4KQh}$TV#D74W>mp9iq z^g5$h^a#>cPx#A?{SKyq;1dvfd?lU9`?@$oFndowLUv@)jToc(LYv)5HM=|=$=^}3 z;mvwd7UOtN9xI+uB0+5UJu>!G)MJUDRC&+)tA>$5pEfCS_YUb~-AeFo1Ngjjvf@PH z5vyE5^v}D=Vh*KvTC7<@H`oCKHAs~ZNgEAJE0e@a%Zr5I6c1O>Qer9q!+TvI*gDWoe0Af zxym9*EVQ~j)02m5i}|=o&@)LT%6-iG6esANlGr8uN63B3?0eOZPk}pqd@4&JRU3aO zY6y?;*ykvk3pZzaKxh%SQbxXl&n=srxIKXU!Hm;SLUB!yP6z73tkE?my;39PWZ@*)09SP&7InbH>$Q~2|#woDaA zZILLe#U`|h8oiFi%L51xLyl8vIs-jwCDFs~5$m#RYWAL&RrRVUyhH`=lTv=%Lv(@^DS@mu8XDo%#6jJX2l&B6eW_3l>A9Zx-0wf$V7a7csRf&t z?n_D4GbU!=!J^B`@@JBSRJ(V}IK&Yi_`w8KEZ^UF~M_AXvGN4Z!1~7>g{|p7$+9Ma0oQ)A^cJ_QmeTRMQaM7yh!q@iDq=^5YM#mmDpg_m0slRdnyqdr0~ zRhzg0agh>X*|t(>B(C>ik=LA?rrS3N=*b=GDHbct+|DOVz1eDj4rc9svd}375pmhY7CFa<1o|x=qvjC%Q}LgG;$WZW67Hb!&vS1kB0&Cq!;1*;E!`Y$>C8 zm$maUNmw3^a^9Ouv|^>k<$bO@H*10wa$gO6eIYZ<1r^|~)5Lw}?Y0i6v{*u?la z3^`jRT+~#ro;$sqfE-X_59!|5iDw;9g+yOwUrRn^CPMNor||g%*`gB##+05&m2u7Y zJV5^SH3Gd5Pz8?LT|~LeI@>(z$_q9d)@qi;#jv*=bMFfP(F;8BgpgC|Q0-0a8#^3c z*>X7pt+u2RC~flM1)}FM&H`W0X`y?D0QFckUa@>jhQREKjkewVq(&RVCMrm7ARm<9 zOpQr&s@?#D!71XnGu&(z3ZjpAcGHtV*=M-u964DAt+hs1+U-ZbcITjj5JgjJpWtO= z+PeOg$vTT6@@QD{X!bsj#@3QdirQ2Xz~mrUaCA3nnMsRYzP~OMvEAFs+n^b^pN@FZ z&0e=+J)XQ+RZ6^@+#RUp+19g|q$|_LC^I&dPHs7=vDj~jt8ehb3S z({UUzg2rqOoHA6!y-7Ga-+V94ZP@@FCVrd3$8&Hr^BMXY;Vdx?sdgwbdN3>;V|w(r zf71m}mF9s_j^{%g2GU(s8sboD@xp;6C~P1UBo#NWQs2Axtf`~JFhnkWsV%gLE0Y*^ zPZbyfCE=9F$@1Q^+sf>}(3GqRGBb*3mN#L0Fhp0KUTMKkNGh@*aB~m)h_ekx4ohV{ zv8QlPJNO~QbMaWh6DfAUIA1UxwL?ZdGC8@LtIVk93Bz}=j?@jvCeMPRF&S#NfF69c&W*S`h%Z3gEpI#HBAypaXw^{ZxO)T zsIu2PV4K_=ce;jF6bap#?o=pvXqSBhooU$|1`cd7AtHBNGHP?mmzOo?{gtk8%}ao@ zDACKk2@Z^FzLR1y`~ncvJKdUbrD#3nr_}1~2XA7hP^|el$)rA!DLedoA8F#fub}Pu zF2tt2p7?OSu}#;Dgf>-8jqwH)Pyat4t@SSDG96G7wzPYSM~TwTY(- zI}rll#X3YdTi%>Qr=;+5^|G2x`yr3 zz;+<=h9bkrm1Lp!CXG7lGfP5OrlFmad7fmPug_RgY+_cjMQIK%6LVW-Yly1S$$7bs2NdCjfwwtcm$OVbivpz&r|2Dgluh8( zPY@iQnBX=;fDoFiEH#~D_V#{RsQmF^ z!?)1hemj}^cY(K#Tk66~W};=n6y2i-%ddm1A6wz2K60sYRBhZy)=cOp zHd{G4mcMl!(I#vhQCQl*osJVa3J;Rh)ym3eT4NOtLRkNT7{qf0si41YdN&S*crPX| z$gSQoQt`!=nrPE(AIXCP-xL8yGMpJW_oD|2y990agKf*h^b@jQidmv3bvvQf4xa`= zlkr6OKJ3*DV@HQ9|8<%qiOi@FdTG$M!HQ(e*9z@p5jNk|I*L$=1l2MA?R)>PDYa5F zAmLEe0(L#tc-6qqzrtRKBML+y*yLe2*;$i)inj8k^^LR&uMy=!Z~Ry4F|66eW4b;h zp!5Bb548U9il^k>KsL$Q=g*#j%0>;ZY?oZ=gNYaE)veA;3ijYeZ$d+QZM^qK$a|`s znc7qgRXd36{EGO$KY7-Ao&oee!i7=q;X!gVXM$nx-!u&Yn^8;a+S^g=_Co!mskY!3 z0m5ZmI1>Y#&=wlm(v%-J2OhBmFN{UQM8xb@E=#z-#m`ba+Yr`8E2*pZxisO2!4=}a zgn+H)l)*2HPHZ${Ml?P zhc!LNd-{uan)0R?RNB5-of}sO5JNPDhVvVj(Q2Vf=i&sL?~wy^GJ>t5$iW&AfBF(@ zN2yw-LxiKkc2!n624IW_r}5n|rpYP_YW&0cVM>7nH|rT+QwA!>=UUK;g(`7)Y`HuF zr`;OPOX*#RF{J%ji(fkZlc%BYdZkTs#`^g1f}W7RY%!%u+HzdojwC*ceMP`;*ohp! z`eY2lvR^EYK;D~^g-sI0W7bpY-5Z-I+sV%m^P%DxFi9OxOyt~SM1aSLk@WbSA9c&b z^Q>WNvFv%{rIjp!%G!P4{hMI`=TXkZy}@d#^DmPSZZ&_+FO^YNtGl$<$F4{X?ACh< zM$zovTI^`Jfy=q?VN2Lmgrvq;lUF)|eU-Yb*Z~_RjQVLx z0Ql(ALh&!>xwEmML1&#KPDy=!C>nvdV?lFFx_;D|EYzlPm>&}tymBs2W)H7ac*uo6)8K&K0wCBo8TZLv=`CY>ZKIQuh)@wOHnUyg z=(mzS)5Z^QdR&jOx(cF%G-gHVc7XspRhFVLB>U9-ah~WT%k<1jI6Q7cwEh_}WeiZc z7iLzVLW38(pGv7Lp{dFpX{SVcsSMLMI_(4`8TGV;Xb;zn!wLo@` zW1-R2*9SK#dNdDwAc3Hg#E}OgGkPmtE%_rYUGe0@&peCf*J_T3e@$T9+@f7y8o*h?>sy;i+!$|2fX49M3#JSZU&zsW zP<^*8JKD(CldOkV!EC#z1^(SE^gy?^uT%CB$K2H_d#z<)$cf|9qFmVv<|v$0hS_Rl zv~6MP&7%SKVp&RjJUv9=N%Wb>+`DaA;Ax%%UG z)~W~ln*F$GTS`;@f@yQQo4EP*y2ff1)R2RnkHsia>5GDFu1iTpArklab0l33K1e4z zA{$h%)PhjA1{;{6M3B%As%_y#?S{3$O62E>7 zL!pYehM#u|kiGxox%~j38B1u5Dk8>*8CO4oI(bKB9n>ii)%u;9Ipu?*S+lU3Htze` zN_GuO#iit<&D=gV&-dZJ{NsEbQQZD6@}cV>={ov=(}6WC&)@&+*xyxt2M@m@K<~xUe)Pt5bxXYh zENhZrcmpjOmc&H!2c(pCRKcXkV2XVC_+l2Ox8eabh5iaFTPR%*^esy#=V9$x&%n7^Y~VX|6^+O$!pb$#EDlCDLMl;Ioxh*YwV> z#emF^-#SihNINp0XTgag zl6cdZ^`!t7`pl~_B*g~9hn^wZ7LTL@&gQNOiAN+HvD~X?f?}mm=6`&7(WX-9;aYO| zdh#=zhkru_NIWQIzw*yOYLJ{1(4)zM`&Jwg>mP!#L?lQX|W}N z5OzwQsf$^DT}R|~rEI4Y`bMqiJ;EK$DjWYr+x!j}ZX1Z;TXMM=>Dp|5$kd6q4>g@ zX-P+cOU+_Fev{mPSF(%?W#|&S7d_Bt2YLkw2$l~=S1>HgNJk&3824l&cUW)18)wa~ z(f_?PD^UnPSXbCO#o4P65vt?%#A<33{;Fh&#D7B4OHf+ZbQ}&X+mYfZTSn0|NEAf% zL(~a$_DT-m%jTubRUXxc!FYr>%RiJy)a6Q5Ml}UilH19ewkLHYfWL)CzEH*`NFm0C z!i-$tOU6|s1lXT-!0jR!=5}H2JoeY7&%OkBHL6hqe2t+yP{>7XE61Mlak1m6|MIAY z?6kwcOUwmkbJ#R!;mADDkCo^{+X~0FIKhprmxR(OyMWKTZwp5-L+kNpFk<#I7|H!@5Cdt8{FWefdng`jkF66vSg4&-CjJ#H zjq!!^g%jZn{diZi+$@8A`&tkkkvi`S7eV`6%>>*^ z$&(9=uPUf=v+Z-e!?1~nv&WC1QnqVTeb%ZNd3mb|7Q5x_SWBzVh*qy`Tw)YVEL`gP zLyze#emhLO0!9A($6K1QUVl} z+Pn%QYcEaC1rwmV?yZ!3O1w!okdJkwbg7Mht=7s8?i=}7Dv_l+-0`I_Dn*YQf=-92 z>^Cf}E18J~tyY|j+VR4x7vU{njf(0NP~h4Ey#}N2Hl!w_d6ZiKwh?h=Q4PGG1|Ffb z0t6=4{CgMp&M!47pTv=GPLeMXGc%?r^+>#CyFU6Vcur1_P`fo zHP= zrHtCw%L$uy9d^&oy+xl5ksTBv1(?ZI=*!y>yyb%6nOl{ugJFNE*B`?t3OaNUHr@Gd zBF{^B1xWawuIbdjGiZCm=wN$7h26CB!IPna5Kiu4nBd94n&{cMRZ%9k?ww%1{Ooce zKc9Vd(#NF|u69zn0Gd6?;Z#;P!s+$AsI2`usd^&rex|K@-k% zv_y7<&U$z~zTd~Mqe%y=bwLyU2Bn(H+i;-`0r@bf^G%a+Nuq}|lcHUrD}6rf!@6{f z*=>hm16;3+pEvUEKfQZ>cjax=5)-ArWN@N)PArYBy{#|q2E+X~3jMEl!?nG&{Wttx zPv=(-u6jn}+(h5DdwOyNz_s;_KvE4-89SXk2}TcsoT~1(2fh&BDD9jlnWY#4&XZF> zRSyLN2uaK!Y7W1Z&u@f$B*u3vrVsdE?cw!iBGeUF=87uXIp_q*hIORm#m}JP=3uZ^ zR}RSw(J$>9n3T@YMcLHuiKw8|ND}-2JSr`>b))OCZq`Y_Vf-v_2dok<4n^G z9!?`#BTrRdOxKX|)lT4%1`HN7A*r-cYPCSojww-r!U>xJqB9{r+{c2+a`YMB+Qj{b zUlw}E=?SoiFagERT$-?WI%PzcuGxr4U%H0PS04EB9t|`QkpMejB|QZ}RwrCj4xUzE zVT_XsklUM5IrE&-Q>RSGG^Z{Q5SNo-Ej>?#xKuReJ(i@I z0PmCNm!=hL$k>r{YDL`61@utGU~#n*TUtzw(rVjGXvIynz<%LSd=RG&7?{K*5~3?P z@DjtSu%!{DZ$W3x929b%mIh(LqT(h;wkg%r<;)E=*||67l#F(STFdVIO(^hU#+V;? zy@Z95{55r;-&1E~G@+@3>dwrE^dKWGr>_XdKlg9Lak0~fG;4rk1k?g1}b%(KaO1iX%4b@AM)rq;3QAbM4&c~Ee zK;Y3`9h7d&(dpIY+Pdnr8IY{?4tvvA{GBfvjnLypI11bv(YV9En;eo!jt=s_ZhsUY z_>ph_@~j0K{``3^s>#s}|M7plo!`O#`3ZgdA)1Tne&vk}t1FcJG{T^)Gdn|;kj{m$ zH$}qqfr8>dTizjBzT@(+&MD2802R$tkQ(%<;cw`c@?DYcPm`W-0w0%I1YmydlSf*V zR$yP?@Bxp%O5k?0o%csK#uOMpiX1N_7+&+al}lN!uMUvC=q~J2{v|srcIjfR(~>UG&pI?k2ov zXXi61I-(?wKtv-7tGS%}&P121i zLevWiI7NicD%LHxw1SW{9;{ANz$jM@9KDtMBZ&WauYIBUo2l!+8)V)kI#Vl0aqhS;Aykq7H^atcS1&?lrui;ZFAfeWw>~kYhw6%R zfXOKpX+o8prdk}8S1f|nvZH{5bZ(U9BB7Chjt%edp@QaiAnB(oB?;D+@H6F_$o~lw zd9$Rg5Xy1Qjd(|b?Gea;#r}ouQ;ZFp_lYnHFp6DBksaBpAY{{U#H*JsY=dHI$twYS z3{5$Jh3R!2YD2~rfm%QLT?3Kee);ED;uP_uuBdj}*1Si3ge;L)H9e<$WPm~bz3t`!uC}Mws*!tGA`@j>ttR*U_DIM)uZ5eu)~7Z?Rrw-I~a;EIXE0`BO_UG zk%bG~3%oQ9tCGgNV5;AAkt4sx<%*Si@e9ZOMXTXC%BiUq+o zMsrL7ARt0B8+1iiE}D`8HAKXvn1F!vK0!GKB2Ara8k^qF?xGgQo*svn5#kf;Zb3_E zHlPj?cn05R2bF}z_ApGk$|Ai(mii=g)Ux>go$Oq(z<+(<)IaYgc2>UKsw;Oo@=)iuO_F~Vz2{tGx(2!4x;jIS^AG#34h%V$Uht)ls zx&q48nv6gSTc~EAZmh`4XD$8!M^*$eAhU#*hKaq>Dz>VMpydB)3L#WdCCn)Vd8C(% zkz|9!jeW2vA;ab1B%O}2K$bW{D;JS^t#T|#N9FJV*~Bz$kZ9o0N>k5!pn~?g?KF@0 z1OnjyC6X~y@Zy%{(+LS4dH<)NY=DPQ6k#3jmqxVhor8FfY`uKvh64XE!y#Td3iU9d zJR3`tz|JwP&TkEQjm?n@0F^mnRGdMVQ|G@04#8I&kB|}+lf-yqarxy{h8?Er zkNRDN@JV70ce28DySLB*B5T@U7$)w>6dJ1$8dl| zUUjCwMUr(VI^`!p%HOS0+=wG@wTSL(MD2d zC^jcS#pWAK4>k(H$eD}4R#dMr2<)jEFtS6|S8xL2gb*{Za}*8h$N#cTuPMFl64%#- zDoOlydmccAUuR0FukNM(i`LKoa(yrJ^&$bTZKgj^6l7W#6r0Vl57Hp12vSP+Y)FHo7G&$|^Tm0&+O*g9P!6K+bXie&_HJOQPXAXY(<-r%*@89HSc4G}bAwPjCN z7mrDfK^r8%=VLn;_X^}NYS!;A z*6y(HS@UryyYRekIE~>S=+2wDA8|x?f}QyvM*E*41fWpZbEJ0V&#$5z{}@5mSjcTG z{8b+%oO+|5fAoVZu8*I)nVFUC?;n&OBBGHwD1Q7&xRvbizswUu_qKL9WjMw7QQO=mM!AB}S@UzNMVPHl( zjUm`PuH)pncVoqLyW>aX?co5v$x{-X-}_PE#@R&rBQ|)rQ0>*AUy0L3f6txb6DuDn z$bCyEm~z&Lgo{bm>UE0?#2vAw#Rq)WapT@uen(tscic&oyjP@p6ULT5otLcqOujDaqGFh_8 z=VS)xiKKaxTVRnKT3LkPqolJZ#&pr?b{D8sY;CM^2`O0RrHWRSm1sF=6_(0N=PXix z*+4wZ6M5Vpjz7EIKEHPTxPIQ7DiCkM^wtVfYt)yPOZoEBr})J39iDD}54g8`19d#( zX+qZ|rxC-}-8ZZ{N>AGxLSX_YGR?K3{l zmK}yEIt3QBG1x9hxV%1pu6XNXlj2_m?XUdUEgI#i{j_&~ng2&t!X5wFDV>-$>gAQs z9c8}~D>LnZ`QYV9$8^_@B#vY-LI)BQdYJrEP|R@_$8amTJr;}<+!e2?5n&tKjkZB z6fMhAj2|%iCXGx#PbTu`kiU)-hK_aHM+Ee5F|C&k+N3zBY@G%YNa!unj;BkiT7==C zay)bed(L3^lvS7UXII9u?L>KLQBFi)+r$ks8L!3H?{x0 zinv3~Tn_NB9ie%=*G;fvEV7N?d$x3DSd&^_P6${|Jsh{Bh|xqpZCen{$$<{S%nV;qHBCQRz)~{vx;Qf{gYZXP<#X_ zMmGZ19ALD{5}{_2bbiT&3jTV!V?`jYRK(Fv>a7mty}!I3aU%6@f-#5bw@bP^Jy=Bx zZ2qtqN|j*n_Djp&rLn^b(ek<)(l-(W=l6bh#G(f?a9I-($*6_Lh%*z8kTnnRdZiJp zU|_^!1(5fEyKtwI0@<`^{YJr0WDG>AT-WUem^*#L*C2IWKk zkM{ufz_6Bb>;j)eJALPv6rLv3t+@y~%-F|zJRnG)P*=|f#wDS~>hJ4^D7N{z0P{H&Cu8}xD1vQ%ULLf6s`C1b6x;&2KmK=wtD=LKdY_v~UiO&GbchBz z^+Nen2mNz>6rR6}6EZ}BZf!ueUIr9DaFf@3Axyco37W$BnX)G8;FhLrQ+a|4lFvzc zayNqsFrV)`V?>p?3`U(Rud^|)XJ!!kY+syO;Qsi}NM!}`nuTaV$C74jw32wWJU;T z{K@JK;8NvmB@C*R{s}CU5}32(*j*!3nGqT%lFZa42zUxK=Q)!}Gcv^q*Q9gFTHJa) zUOZWRNIV9hvOB@|TwTRUyA_VrNw47BaM9GAp+@v!`!#^37 zE5UbZPAs|QGqVClo{9y4Zz!^YH3bI1Lexf}7C?rR_PP#GPX+(h`1OkJQe}<%w0a0+ z$cEn;CBgH0g!S#4H@z)p9i(*jusJ2-!yOu>%ODi2F?lx?)h4A}7-yfb%SD90e`tt-aoo=`Nc(~qQ z3V?f}mz5UR{v`X;LQYQ%CF zUHd<1u6t1ZFC10a;(n$=PvAD~_hm}rIxAKC4Ix5g`!*=j{v5b*=4s8ZS*5s4$6x;- ztd-yxjEL)YKB4~h{A@Erl3&i%*IEKbhuW+^Ba=+ke^{Fi+h_RUt&tQ2Q=et&?o^q| zFz-NSmh?o0wo*oov<{ITL;gTePsFJh^zSRljIsTO<}s01sK7HJniGKreSr^ID)ybH zT8T!-Rqe@!#e%;_!S_P)Yq->1o`;k92D+xHcCuYs@l)_SpOJCC7#s}uO^-P4RCw{c z!IAvo&CSis_~5U=T&uAvz@%&cBM}I(CenvAcLlbb(ws=O(f3%up~kj2}pg|Ge1yy1Y+bB6w4eC)v+CplY_Se_Zy6p zlf6Gd_1s)tCH5nB70<*Eqg=Qd=R)PsDw`nhe22(FMPFTn>d{0`ku;K*9eH@p5Tmgv z$(pfi8b_)V{_WWI2Zh3C1~-~8@D~$C_(jwE zwOHhbMex(H{oND1>HD?h7?=hFU8)YmW}X2zrbg(Q94GfPfSS@5UQhGo#6TNO9`r-u z_3w~`P^!tqa)r>|ZZBV_i*K9S`2xmXc6NWP_qM+i_*-;a1HBJuNXVoqCQK_0s7R3D zF-mz*CHL$;yLhQ}hV7iw_v|ixJ@hjnSFz7!hIis6=%(u9^U0s$du-*@KN#;nd)LH8 zKYi}zKM%O4Kg5cOx%xqdywGI-0Bj^(WlY)6{ybg}&#zBaYVF%=-<=KkJCXMOC-=LP z>mWV1STj$Hia{yg`p-Ha0u5j8H_t!zCO`&_Ocx3vDp+U?@sZ*DKd*3r1Wh!)CsA?&3-5KfQ4bX~3=W7=?Q(9A0C8??!$5BcRr+ zKK{(hg?-;_t^0pby!5%o^s!f(AV605Jxj~{VN;0mJ0?BUN{O6GKiU*WX+9&uE-6=8 z9Vd^C)qEva)?5H=q+Qj-#bpCwIN{(L%VIjm(~c0Jr(?{4>X`Tsn8fB6Fe0sZ`d0&Umg zAOL-W{5$&Z%-F)z*xK3E)|tW6(AI{*-0Qy!_&@M7{WCT;HlY8E|Lp%gGO@8U12MC) zvomopb8@h=05LJM{o4Z~V){S0*8k@aS7#SPr++EATbP>K{1?&xo&SH&?f;qFe{rh+ zn_Ps^P(YQ0MW!I2rtv(nXo7H}4_w1K2JwBiFJ>l(+5K0D$k3S)i;Ff;8K&d2sy9zw ze7*i3Ql0z+vnR8D;=??>pRZqcI>CqijoC7~#9mw>OY!^9@K*;)Jt<4!1q(0R`6UHb zkvcn+7x;bro`6CS!@UW+QUEI!sWxP>ZAefnAjXy|y|syL!a*xQW#3*7@XknS)t@`* zoDu9y$qalwNc%ffj`J@Wgkx;oN-RYp(Yg{aJSAo}@e9~G*_oSF>K%H%b+H|NJH|D$ z6)<7xZx|kghUV2iKHE$T)_ixRCZ5xEyHza;CQKwkxKh$)=hI``mp>9R`W*>rH{%~j zYT=hAd6z9f$qI<4#lR*GDs~I$L4zs7i^|Zrg#JKU6E$^9!2dVhvj55De=6`l75JYD J{Qpvc{{`3j;4J_E diff --git a/bundle/ruby/3.2.0/cache/json-2.7.1.gem b/bundle/ruby/3.2.0/cache/json-2.7.1.gem deleted file mode 100644 index 804bba30f9e0476df42ce8c3ccdfc292e511a532..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68608 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 z 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ᤇ$hR%=`|`qCWu|`js3dF9l#JuU*7EzQ-)GU6Tmk?vz*a256-3OQDM)%1y)UUH1p3-695iB_UE>PyfIbSM-C8NGM~lA`K^V62!i(&{`=F&ox!0bGqMg~|d+6~}d0L}{kN zCf6v!<{B0GjeAh1vq5e6i_vT@#B7yUMIWfJDD~B!OEWEbANvWQa8ROCQy?RmjPyZh zp5-?dweLQr@+8>Uw6hPha@lx_6{;;FCyl=|eoo7aVS23wNY z)$%aC?NvEOu}y-B-5Obj&pkf&7b*NMFvu$L-KbJB85aDxIG`??q| z?)wTD2=4mo83^wCq8PGo`e?C2-lG_@PQ4aBo3DQWTA`sTT}@s-2&&50*;F|U1d?E;|zp=jCGSa*_{hS}R3 z5yk}Ea?qX{fN-2BE;8H^m(8I3;}jv5f~a(N`xl?ib+d2&OZ@&XPbpMH-2*Qf@3!e{ zeb0;v>j>t$?~T1^EdKZ<*E8?V{NdTa7~vm^cW*053gK~RQIq_j9TCU5&Hn~+%x6G> zWZDxU?_*>lE(LoPWf>*^j5>_nzoow|p&N~~@bv0GFX|sBinwkF{lu9Hm^!Z6!!PNb z1M1ao8}!Rov=sUHc1!E9$~L3V_nIJb9cSQ4o%F{{8_n)MT9??D(`tHvf3U1eW_BTc zurS&gZ)ZG~u*%#mV!f_H9z&F)Dq}ye$tn-clls&G)3+2{ggyevY(mBB+uc;*uf38^ zJ==~Eij(uetkU79v#Dn;DI?d~ef|ixrNA2N8I_${Sh$ks0bPJkjt^LHcEL=$@l_YL1rA@G;4+F?+br7PCNs6SUV)K7T0;C#-r0jm#{LyaIcC9 z5E?#O1Nx`hgMT~rs$w2>4tu-l^uh;&u*3D?h#p!`0)I_p!zX%b5K1$j_9|p3qp2T% zgzJcI1Hu8gc8y>3}kYP+R$K`5IBe>}jr}+)GFX z5h%vJp}J4Wy^?>_y}0tkN0e#6jw!}TD$dkoE3_4r?;MS^sLZ?V{F7T;E7X3*lP8zh zrl2Oi2>?IRt9pR0z>F)$T3%NG9LK!$ zd{4bv9sB#!u$m6KDAb!FCOmym*HIJ~4H2im<#BEmm)pJTu0#`Ifs&~(I@{|7|3(fN z{3s`%SGA(q_OS)3_1&SUJ*)i$N@Gz|NKyRY^2#V7 zo)?vDeeERd4>1AMAMU=zz<|J;BaQqws@j0*nk(Q2uoZZp_jnu#3IYNIf`iO7Wfy|f zL4f?n{;!UJnYD$Pt*g7eE0ed0y&aR4&;J2$S-y>fg9GHh`fvMx_upgOAgmmm?ChLu zENmQHAS|pLT&$cRBrN|2eEHuV>F(-g;_~g1r?rKJ-TyZFKR5or#{ZwS{mZ7GU5O3H-?zEC`VIyo372G@thNQc_c}6!K(b1yp+v>4>CF`kS>zwafeO z&9%i(w_ZYlPyBRSw}->m31yhRiv-{n&&q^gV`6npReyrH=15D|Moi;NIS-+$8pO}< zgmkW79!Kf_`kQ-%{WvFSX0le{y|SHio*4XbZT=KSl-gu&q;cs{+s%)8+MQDs32G&` z`qx6IVLt~d-ARtm1NKZZM;UGTvXY9vah`sc%EnURAvcaIBa`IJq7QYbaJa>-B_Za9 zRuB4dLySkc;(U7wbV10Y`-F4Zo{f!z?k;_iLeg@*Ec4p7Zw!-OGG++$AUbW4NkBq| z9`AaylxlX=w13oo48hYs@=71%UxlWD;?~hHaan~6^uqTS?LYRP2>d4k|B1l=?;`NO E0E+*<%m4rY diff --git a/bundle/ruby/3.2.0/cache/kramdown-2.4.0.gem b/bundle/ruby/3.2.0/cache/kramdown-2.4.0.gem deleted file mode 100644 index 0ade96d243a35947290cc328901c5b496b619cef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 122368 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 N?Sa2N@c+FB{tY7^MfU&z diff --git a/bundle/ruby/3.2.0/cache/language_server-protocol-3.17.0.3.gem b/bundle/ruby/3.2.0/cache/language_server-protocol-3.17.0.3.gem deleted file mode 100644 index c70b95aa202b56b5ab550013efcf2f2731b9e237..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78336 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 diff --git a/bundle/ruby/3.2.0/cache/mdl-0.13.0.gem b/bundle/ruby/3.2.0/cache/mdl-0.13.0.gem deleted file mode 100644 index eddb1f77debe4e021edaa93a463b79b5e5ea0791..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21504 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 MpTK?s|1Syr4j?A-YXATM diff --git a/bundle/ruby/3.2.0/cache/method_source-1.0.0.gem b/bundle/ruby/3.2.0/cache/method_source-1.0.0.gem deleted file mode 100644 index 2e035c34eaff5a46b78adef8ee901e29303f334e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13824 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 aa~}NvMkW4p#(y&KpA7sb1OIn3@IL^rlje;8 diff --git a/bundle/ruby/3.2.0/cache/mixlib-config-3.0.27.gem b/bundle/ruby/3.2.0/cache/mixlib-config-3.0.27.gem deleted file mode 100644 index 9bfeca0c3059b6fd32c3f9d91aceb634386f9454..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14336 zcmeIYQ;;U#*6v%j)zxL&wr$%+mu`-*+qU2H|IWGicC54GoSVI3?~64e zGH1@5nIp!0X6AE|`Li>3H8wMLHD<8%2Kjdd(?7w+#s>0V?LYCaEi*GKGYB&q3mYc~ z2NMe?3kVZ4>wjHN#Pshf=zq-X=HhDX{7*?9R_5lv{>OoTIsX3}|9|H8-;?{7+y77P z62`!Qv>WA`fPoLG$vP}Dp>%&}0t}u-2#SQrWr-?O@@2}T==MQG(hlU%7FLm(2d?4n zcK(octRd>BZD)u@pM04gXNoC{<+d{HkZ}N!Sn53Te(E+8sh1bQjN_PuLP`A9;iQQ# zVlS>3Rdgh;nG>VR&YC`8n`V&Oh*Z)k{dpA)8YfJwTo;nXw zH82q_Jn1EuXY@%p3 z?x}d9x{>2hly0<#IgEGN_!PDO&b!O3H47N<2)iLez?1HVF>Y)r+oL;oX|-;maXq zQ24iB_b*6qG3_igMB!Z?IEjESit48z+Jg`)oSME5V!@xo?ESdV%|`?d;$;z`T9&1B zo-;iD`yQ;8_d9$!^{+s@ZC0)rL%L%kn%QsEz#{bDS1d319ndFy{#b&P2I>-jqIdeB zaIcVo`#zek7fr*lKC3!Vz0}t&7s#Ss>k`aR|EE6g|EcR=6!^cr{~rhZ-{=1m0{a;{TClM z=YXVmt&cUs(850$GX;rq&TBeLmxe48g>0xDeeQ~%q;lg-y3t!#S07XS7UK1%J6%3* zZkVBLLJ1ZN9n8o{J9dAkkri`uqrMJG_jeCp&*t9d#_s;SJ|C)mI=Zi-mqsuuDCT@S z2FCj=o}bOFy`9Z*3hpLr*ixb>9+AlufH{tbV3Eves9MGNVhz^=CYVqm<*F0b_QD*~d4!}rf_CyX_9KWfnI!N6rceZSP6W|$_K3jqd| zmYMY?x-rF5I>7O2kL=d^&+q&Vs_dBsh`ut7eHt1IgwP1M!4_)?Y`XDZiD0@~EE#`` zF|BD)>@tKIc$CvWiZxj-`b^C0D7bu6ZhL$Rq=u+MpN8CFf^!$DSecQN9ci4h9S1w{ zrZ8mqL1_Xl5aH!R!XZ|b4roNuKvA+`9P@@oE$6`c%YvztS0EQ^BMG z^AN>!LO($>gq*ZeUm#^F55rD+_424cn zfh>CsV9#l_pkq{$7$93-DJO$7gL0DxO)vt2*?nB33G@k>Ua8qwf3imDLb@L>LZy6z zZcom*f`5jQF*l_tvqZ~g2uP(%&5I1q@%1|ykKMbf=n*3yvEk75VUJdaMduMAeE%&K z_ePVS`0XDm9$BmbO*xQjJa&N{F_x4IdN%>^3`i<=d39ogM;A&15T*%?)oYivh35>O zUx)_dV@)IuI1b>{ah1?r*{kj_+~C}>g{7Vo%^nzZN9up<5P(#O3>Vizdk(xxV! zr|9y95aDHv4*K~?!+$*YH__FTsH2H{DpE;SW%ewc2_)#;oKYtdw1T}6!=5x$u5f}?C&~Atp1tI3&m&;ko)U?h@hHRl2I^>C4aUaknmdt3dXtGV zlS_N=uwoODIY36rj*P1iF;Sz3wD-nWI$m@08RqpX7;gen>~V_)#{(V%wfTPWE7xk#G#< zKY&Rr!_k0Cll#n!!i7;tDn0r0ncCb#D-17F%W)w{DNj+Ei!- zUkp}@0jLj_JIJ+51qt@B935Uts*|VX4t|HP!^^cB^rwNtb5MJ1Bj03H0w^4lP^nFR zY1>a6EmRFsmSirD%cW(@#9h~p)c|6H5+8&XGop!_0WO`fnJ+$Voc8*J1Rz_(=t^<@ zIXrYfO_qF14`zD7f}hXw>|trqxFA+xhk)@D8*#X-L|_St4cVPw=@>?In)nvJjSm{eyt} z6wge%5kj2psBgeJQZTt)rN(i@p6%DJg>}vjF&y!8VUyTIc+UVy1PM~@JqwLvczsp_ z95jt})6%iNvi*e`rnRdCwRGJrRKmZC z*2xiWyyFBln0I0TTV5LkMYf2a&R|rJL&HQ{FW^ozTY)k{A=3lJOUml0U^w*i%@OJh zwsed-AWa8GMQDqdcknuRw;tmir8hD61|1@lPgO6%VoIN^=}DR{NyED#w-QxP0MlF)CEZ{y?Z3Nitsm7WRkvX?17K}e5S&v75vL-`D$}8&D#7W9oaPO*QClkyg zm}_=LIGb`d=In10R5aI%xs;T0`g{fwT8BzaMc}_d$?;`V@u@~Hk#iB+lkH#n5a*!?#@y5{x}`B z2}9Tv6)nvMgAGnsxxKkkx;DK}3QTAi#ie3(Dh}lEbgcKZ2GQZ@4sp@VNR?uWgfyVC|73yqapOBYjbu{* zr=MM1JeB>WiVg+dxb+@pCBPL)l~26Y_y{&Hu@#~i3!I*9b6ishnZ>59_|<>PPvL=- z!l_E!0!a#SP%k%pq_+`AU}+`Zhm>Z(r^t&c?uG|avQ0&Wu?>0?+Hzj?2>2Z}hn?q8 z6vcix=3WHDelwSfok+naqSV>}FxjLLS(s~N#g((f{InSjWkR5YPg20SJ*7?rBoH?1 z8NYWB(~(j@AdD>CG4Q(5gCE$X5AP2p&}cV|GIHb@Zw5zy*^L3Y+c0Tvrv&oYNAHC` z6MEy)7tqF5ma)d2!@9HC@F5GEZ`$7yW@Ok08Te+s; zLL3Laa(&h$-3BzEM75ILX{6P8(k?h8X3jVkSq$at@7Q1dAm?(r(A*UqBjNa^MPG0n z9@%=(Dmq8utIc_yeq1BFN%ibZJYt2kWZLI7i>+_dDiANhGZg z$8}(>FZ1Vp&so#VVbPu-+I?);eVrIrYojA|=JZC>p z3WM=R&|vgw;UkDi1LVBnhoc3Qg=Cpnzxg0>>Ce}Wl=riA$#^5ly?1ghPB@10a$4f_ z5kQ0b?Qe3U3LBeWEr6G&zsueZ=H6Z?1+!uZUlbKz;%DNKW(LQ~Gnob6G%g8&WZzz{ zpBTRqBU#gGnT-IIuwq4I!wRdjGSEYaqSdZxyWD7AqfetWHfUuY{;uDbb^S+whtL#mDExvGT3ulCwbI_ihHwG;De9M3DxL zxUuQDWanFy6}-6>B@>ScFdD!0jOn*M>7 z+{2>?*AE6oAvrzQzI#ehl8zx(ZO+UDiEY}+anQ+d-P&1e65V(%g!U#=$SUIxR>RMj zT}Tjnv8A2avh=$9>ma4gIiuvDl8VFWFZ`;|!Vt+I49@i?`93dfVe6#l57-0gKUxPN z?lm^dV8dOB{Q5Yz2`tc1!WN<*tvJ;pAQX{!ag3xgxAJPJpiHe9texvElE_V5AZ5rmPNN$)Y1pEX zWY~=HV@xJh`0B=)>w9XIOEjB^o^6p{%VgHk2J0Ar*O_n z^_s}JNa^EbN)KB5RrIK_^nOQmS*9aD=>o-(<8${pR@Ic2Y_57dL3;?lJP0*o_#9@V zWmAKZNxgg}4Q!=(AN1!X41NC98neZS>V1$GPQpE*W zfdV&AMrqFNw8;zTUR1!Xk*DGno-4G&*wIkw? z#Y4=M(rgf{;u9(w*R>vq9%iQ;)vP@7LCve~9s~nsE1pHKQ8ZsJg1%bk6wHJ>#Z(U$ zWA9?jn11U;Zh+PvXh6>VTCt>(#pK?Jo-65XKb3cC1g=`J@>NlM6_8@HZKpP=l{u?i zz{jWJ5N`MTE`Lder>IQj6!I@yZa8H9z1vgdOsm*4lF_=2oe54Y3xXP`>I5v$61)`? z&ozftlmE`bEKl-0t{y9sHf}FAQ=yp-m~3Af;yGXWa+q;hAI`X!ACK@w^2Q9| z>wv%>Wsm9C%ky-|457wFkH?K*Yc=p2JNIPH_SWvpw!er~5;uGwa5lx)(a1c8$a}$g)^u@}_hdA;j(2?OA zHEuqC6@G8WJy<@rF?WItf{%rz%;i?(xj#2|(!U!-RCB1osMhxKL%un5YVYmz&u?Mn zm@Z@H05tF@VMQR`aceBQJMSks{1A|?^nr!CmjL&R`WGL}?L#axaqq7!6na<#d`%WQBYv;hGCy#mR6jv-TV+_4RyKAT@Q4hh% zF&@o=o5tM!$;WMQ$dkEBM|nRnCPMM@B_1wOw?c2$9!Xw+xbbysuYr{Aq58|WWkXdR zLW?O+cEPA|2YNg^*(XG8-SP8;1=o8ZB$wwm!@}=y4pH$oQ7F0MeVZsz9gI8l*q6Q| z!cu<9{EmsGd0~#v)^{N2r`{4U_l9q^Z3#$t(73dY_MwKde$(Myc|coJvvJuf7le;) zm7HSjlHA_wp%*pM9KKZV6?^5h@LJGdJ(~l{pK2WiQ|nHnquYGM`$4R`-^HIuUti7` z46`$f-^W1MPr8P7bCdil3i&wopWR;iuP9r-Apa!8*a zzv_eK>#>$3_B=SoMvcR}&?gWnL0yxDR-B;Y#a-2%GfjW`__%89(~kc}X7WxoRVcg3 z9($9KQYEW1ZXw3R+p5aU+2{4ZQ<8q=eaQ)XyTq>>Zr?0&>@dFQ6QgXGFe+QMtpu5)oPXeJqoO0PN|mli0^%u9 zf_cmNbjkL+?jG`Se{PIe1}!{Yo^CcRSZ*GzaQu~*GS6)*6&VQ+^A1dIo7>{e`3XhX zc-HQws@G(?)(M&oxvhrREO|i*qX(f*TC!z97X0+<=sXrC?E(86W^bk?D4Idw+Bb&V z1R&^M$KP?x#~3uEz+T5P4eIO?07$ih7Cb4_gE;A2U$5&zfnHf zb}p9cf|rN$dbQl;6tt*7y#8vdODVZTd_01m6>Tpgq*QfgjS`}^1Y6Q-f@%Hj1(leO@`1NZ5RiDuMKe=?AQ zaU7<1>=&eN@r22}0+6XzW@PmTy_rhEl&H1pe zIbIC;aeCdVm~*q^R}oC_Hs>p)Vhq7*p*k_X3*|=cBuQ=x%@1@7Rku$=#SN1;O|UXb zg;6&?qQBY!r4>`cqcUTXacv<+@DK0OUQlP-Kkrbd71RTDl;~`Ty4>KMTRmHB#K(ne3lWGgIDy3HiP|OI$v|??nzwgyYGF#UW z?^-3$hC|BfKC$X15QN5UXdR!OG>Ibicofd=CN#HF%~rPO*)6qHXj*;_)MYinJ;@ zYas^k;Hs=AU^x111_}NKKe5RX0#+OeeZE(gwW9px5U}e*f_VUS;3zV} z4=fKBvoeZlZQG=D5#ng}>pSN|SsF}kR9;Q0{xO{s)jA=hOI0)CFp|n?9Y`Lb@!6r< zX(clK2_6b3?00NsH6O^Ez3C(|s?P0VcAB6II`Xjjt|c{Kf8Lg^E?{N@rB%N0W}8d2 zl;BNZAocQyk+!hwr4S(Q8?AE2bQ83iD)Tu{%a{<+Jf?{~8ejZYgMff~CXSts0VupD zM2&duI>Cd$ju4OhhE>0`)NVbjN_MVd4!4>p2hH#Z3YyoDud$XdE;}*H0)6K*)xS

    mm(wv9gHtX>TdbHWTG=yKUumAYRDQcdq}SsclB24+NLrTF==;#s(FTVr--1|tk1N+K zHLN6oyP7Z|dFvQjKUqy*t=mz9OXutT=;eSFVd3f#Y&@ zqatcaM7d?OY{Hs{5UMf16==SP{&T%^gX^V&(ctk=Kaw-_p!WRPC>X&^8;=Da_3C%` zi@{n+27XPfEcHBLmkPmVt>5CUN{*atYL$@AKth$NYqALm-OI>(8GGo65|aN3q_8W{ zY^MjbK8NhG)99Y^ZTlFjOcYJ`BM}1^Z!J&n=W~YabF8C<_#r+I*B|zMTjnW09DzpvzNGMe|;FMs~(s;R3>*7mu#L-Q!mx;1CjHR2!HYq8udip9+NA$8X^ zdU^~s^@S@zi`HNQHqWD$Dn9NN=dFbjlv&pGCrp&NGuD*>ilRWdq$^Xyu?o+Bi& z7Q-7XdSCsXE-_WqECwCxmMXQIS1KvTNw~YVhpuM6A+f$6OvCX=F)sS!n_%A18!_96 zSphh<_z(_02*qx7?L9?yp}&ZjaYBU1aV9lA^rg*|^$rLGXy<1Mr{{lc{jtkoEdup7 zo!uH){Vn74H(W+vkhJ0(l&Flwu^B8BzTJMem6xG8-_Qdiv3DBuUb$s2t>F|s?c7r$ z6MV}D>lcPiMF^zIZax?8ydf=5wxm=-ki`tm_}SW@lJ}zt3_k47&$1hP12tqxz3>~m zg^S6 zd?#3rAv!u1_Xy3oo2aWc{6|^VUDk~r&q)Ua%2{K9x8T)>Xi~kZ{Z*?vZmo?L$~{V4 zdW~D2VF#wjyB6n(K#w{zp}5{Q)WW`VyBKWj_C=9%YL;qFMwm&c;*+}(hUyDfB=^kl z)~&d>xMD9&DC9p!B$tsTO#o) zM6c1L^SJHTtlK)Tdpl)eO&S)o!(ja@+%LlJ81htbjan6(sl-{qpn2G}s*)T9$huIp zGgna`oc%$ez)eE>+?O9FcftA78Jdkq|uz=o{%p z^IP1DrerskZ7$@sPd-fxZq*HIX>uu1@6AgGzbUoPldM0?HR*w9+IKOZnTNPqW&VJ7< z8XZ)Z~NCH?7Drnug9uvpMfl2 z?Cfu?x3Gzu5bu%S(t0|Gr#dws0I=cDp2uo&`whZ9a{U7}o7}=Qf+y5&LDzF*l(Mo* zKBLeYjNjaNT6<#Xb83>Rg!)vdXi@wn!0bwSzMhfV=BU1DsUqqNI!uVAUZd7mhf~w< zYO^fR0I$}Tc7ED0bsL$RbD%q8|AfsQ+G}4@!Uj+01cg!4KRRuE(Pp<{w%*FNWSvRc zxPH+(S*MlyHlmfW$sp_FE{yq=9luN0!3{?(aSfxeFhS$#wYuL3Q*mo7-rFEsk*W-L z4&(lNE?jpHt$S|q{Le0y`l|(j>#He4$lSgR0ys(5uTICCFrf2kLrM1eu1P?Rb^GzD zZ0ZOcPS^fg5eDA0ov5ezRuovtFOfmLt%cqnB|progJ(*w+0Ye5M(khn{8S`Kp+hNO z&TRIVSAo(;e;MyR3JxH(}|+fxKaMuc&hgxi}w_(>%*319*?`b0}77ufIS|< zDxQ_koE>tfJqzmQRe?c(j|Z@VzWJiVepw)*>KKsz=tusK$8PTYCZu0ACFI)-6sdGt68N8gM>Z3fc!>q^0Xxb zIZH_p`WEcv$`{kS>wOJ6dbes>6?_as<9+OmGIza;&vCcd{JVcGE>tMDsr;K(@RChu zLSGyfy%*wm`f3%N=c6olxy){$UM}C)F%v2>o`P`1Lq`C7__Okh49CR%XUbKX{YBm` zXkzLE;wWh_O#DK|wir2;W{XiV9+z!Ik<>cv<%-0-wYKwq+dl1Mjzmmj0m|(lOQw0y ztefeaj7{fv?cCyaF#``rOv9kOvc0%|d`-|-W^BmK-CcriBD(B?=k{q9xBJb*ZXpGq zGp8|PJi-0G1d3?vglo&+?gmZYTXf$-3uZdazq^5poLS+iukLZD)gt4ZSu*W`M4d5Q zgr?&kAE++)Sk~J*huR?l6*zQtZdRNFeO~4P=9e4fP}Tu^g|uoqHZ%%;yBHhz)`Aw+ z(G4^f(dHK3jp?RplsU$A7|;w3e`E^g9@%PobRw6xab2+}{$1c^qcYo^Vc| z-Gz3_cv1~AhAv#x&9-%u%=VR;o9FJTzI>yxTMh-Sv`5i$K~DeB+MFOi59&C3e}3JE zCLXr6f1=EFYg+zLZhFB6vI(AP>e6r9JZ!9C_3#U>NJMAoighCTV_w@OvpDCHPbx8Y z@h2+dWUD!6T8>Zap^R*tC#>>|BRj^$bP3?&@H@xvX(%wY1lKgp<-K;ZnlA^BG7LXk zLr2p28J2eY@~Sx)zw$2_L|A_n?gcDG84)?cjn_B8%>^PRi=-;&=@gzHNU5#|bDvja zg(mFkC6WaPxZJ*O{@4c~N`2 zE%Px#Hgr?#P{opA&a6XVW$H@e>q)tk?`m@TR+q*6tZEMpIGA-6G(I4k*cJ{)5uss0u&w0_@;cwKKQB<1_C<+{uwgziH_%xQ+HR^K7;n|qTjdzwr&#bdMO->p6vG2>4EtpT|=r! z`&GF5;nGt-O>nyIT34K^zgo9I>(WsBq)v1dys5w1A)`L_vHKd1+}qNSTLk-{U*CFD z+NT-PJcQ*!pjBiz@PbH~1at|LIccl*-l$OsWR-`^aJMpR#Z37pumI=JWvfN2*pmhC z+FOAEnO(!FdzgYOD2xu0YRuC^h6U~6Hn8*>{wBVXvafuyl4}TzUtq=jOa}SKNTMV) zn6AV%iqj)(M#t7nyw~zL;UhC5?PgTVXy(^oc5ZtAJcpmuI2iYuAJ4w4qJCFwu*pL>bOmNWEq_Iz6g%5wD+i%etOM`{7RF?*8CLqDvOu<00fNm=VDW!41`wDv{ff; zM|vT{TwFARB3Jo1O;ouz=SMP29P~nWB7OFe6}U*WQ_7jO%}S^EhM&ORFHL5MNcQ`k zPASFq#OX{I-E|iio2u*qv^Dqnx*CDum?rSp6!V)|TJKC*PUECCmWMSqKp88b(@O}& z)DGLj28VMNn^U7$Y=EpM^Pleezh>4)oqgKHgxfdRse&2Jj(--(FpW<~FHs(o<&V2= z;TmXcrn)M2YxmG=^Rp9Y9Jbaeofgv-=5lIQ(?!7+b0sD<1tyEhTa0z7i=CqD7V{;k z+a)nBp5AFe&R&BSW^SCPPjesW%IvmBt&zzwn$-?*j;QfvR`~ zorZxmGb@vDWostu6>J7+l|s22Sx&xA({1cwwU#KN%{pQ~Q3GCR47+ySG78je9B2K7 zj*kTf*W+3jNgvI-;vjMms+dw3|yAI93lGi;CP#DvfI&E zN#8WC!;majkhsoJ8ky^FK=O-7S?o^YL+#^3*$OrHI}O9r*pUV(NkNeZXS9-8mbX}7 zmd&Dv;uMBVl%?d6TZFQQpI1NWwinujTSV3BtMqT=;q@E(iu5O>99T~3F**g*Rz*2^`>;YqGpVIb5mTa%WuAf%LSk<_72ctAC&}q9aeqn>zD4jPm5kkHm zM{n zCK$0p{`@(ewDu1@l<+k!2?%E}u+I#yv#w}rEbcB3I^(?eDU~!709EBk+Zn}NSZ`02 zv5RI(E%#YS@~OGZifcX>3cHpudQFY7euX0Erk2|vXT z4jy}u*S<)_uE@M@nqAs6+>3d?>Z#VI3QCLQ_85Mq%X`W`?R>9Dge%xK|BNLajy;m_ zC30(dX>Ze~DwMT8+itVe&RAkZtqF))vquxVeI~iR$@xsA=3;S$mO|bIDoDk4pJIwo zt77a&@-^e@?d$+H#{6R2*R)&j)?F%P>zm|?Be&yD&~1q=h{x@;o{!s``V9=XjR-fh z_Th5G_hfjY=nCrKu4Rn6_u-(Wy}HZe>r6s&r2|rE*TiLFW|hd#lboutCZNRLaE~XL z)3aCH>e7lRp~NJBSHiq9DQxUzNoes$mx@#b&dDP9o%fG~gA%FA<(G9_^bceLWTQzq zUZ7QHPKwjG%^S#V1WU8@n{zXtmY81kF;`Dl0x0Zevk#{%*+;IEH$^M6g8vY}?c)9; zt7)#bAY8)HTftoX|01XHXLfdn{I+%FZH=lPHz_@h9`^x{wh#o>b9-{#F$k=Z#8EfH zPPx&52DlDT!{TnT=tZI?9vO=FrRybwYaLg?iFtq_-low#{3#gT`7{XNLwN9w0W^Fm zr5Sx@0I?1#0$yDEb1MxQ4AZCYvTtjex%uB}a-(QtBkx*glX|{e0$9zi=gq@tWa_Y- zF8x`dh6TSP26kKoZOqWq?1+nKvxey^JFz2$g=aM*&bN{G`&;Y%SX*MJ`{%V?CN1-( zWsP?;lSPu2B^Cv^oAeF8$B%%%U|t%&O48F=*lw8%Y=Kx>b^A!p59IYwFIz>mwpZ>3 z-d9MU)f`Z=xapu0t64@W*7030e>1OP za2%p>z%iKjc(ztkGN|jBeG<9bVf|OmnhIs(q=;*6Tp&)~|4+T?h$-KurJVd}JUKk? zx2lRADP*eVrDkkuCsR(a)XN9pyWE*0REcp4f`sY!nXCT1gYU*U>|4pWXHtX-KzQ6O zprTsZ^XX)D6hxX$4}4*&d=CtFVb`{*l2MYUy{;?6D(`+^R4z7$rFjR9EAo%PHXon+ z?T#A9U06;>sm@`M%!-U=N!!q+TQZptC;@{_A-}dKg!lkSy0BoQ1C1U`i{lvJ&{w~tY!rW1*JCNTNcKS+8vo$cjzIb^!)->?J8o0nch4KdSQ z2BGbRUE`SRO}h0#spanw826_gI-T+9Wy{xpr;gUwJs8_k#vy0*DW|AP_ z=>&5aoZ}f)xHVYcPDI|x&Tls_j}&OUR&NeZ$K>X6`}4MF2@SD35L(U>4TwW>skHOb zRlJEZyxpzeW-?!5oI?%qbS7`Dd9*lPT2(fDQrecS zqdm2g)1JRzKQ|hyOfH@AHgeaXIPZ&Ggy4|ei(;kwx66$=B#!MXzH+Ka{yut&wUz~? z{sTAis2rQMuac98K-)LeH}CMx%tbHhG`R{FwcS5Sy5@?I{qXJje07!m?%DB8l&iMR z)zd|^4WW14_4M_2*|sn*YF|x~8dmdlhKndW#k(E4^|Yv`^OQsvQsM?nx&Ybd1k^B% zLG|rztl|5}(fz(Owb`*=z)YaoaiGENBSiRIq!<$D;DoJjyHW>W&WCYeHaj_4!5@ zY?1!*^?6;w4j2htX|J}*X#6oT52wDTkT#F?w`Y0^h0d)#jkUMtfld%P;6OYKd{$au z77L18G{p2UGzhyFs^lfJtPuF(T1eVR)ie+-PeXa%I^q2I=;0jZ>!sT)({l?7=sR5<`C?%2!X|zjPx+ktYi79hW_YC;#JIy^ zIFA{t0g4zAohATRts@(uInTBG9g+_&{j z4_27njUy{dmKF>;#+$lWR>vUcOA4RFiS29jE-I%Q&4Zlp8XDmqO7wps7V03>!`t!I zRdt1GsyoTofXDjgM3!2c!_iMyx>b+r&*&Wo)=a=P)5pi;4#1kmqZ*k~S%rwVt948( zlTYb%Og}xyHPdhBOqNvmV~ng!=qnxyYT4}Ys%l=o>PUBmrn1;?Qzh91(|3rCOr zt@t&Xk$g>mlVy&~YW{;oJr^~M+yXZq%i2!Fwyn8$jL+gNSPhTu!gEilYu5-ZF21eS z;E~78aWd!ADzO|4+OFw5w4VOCObl+%Y`w`<=|;Od;q}Mm*XWAqi%s*@$fZ}2_W$La zmR>(cesadE_nizT*;XXpRuta0$lg?uF*v7MT&GS2G*243?bpM4YtzlPT%##Z$)fB* zpfuM0&#Ar?rqQSt*2_MZy|cQe_x+EKOPjFOYvYlNG6WB)yXE#KIGe|=J^*;~(sh7e zA_&vbc;W7*wG)eOr&s}>vpBV`+d_Ut_q0wi5*AETJLq6p=j7`r2Z zhRfp!U5H!4W&c|Qi$caUi^Q(15vv{&gXt+?Nn+RxmLxxbkI-yH$V@be-fWadl2lYc zfgH2*kX|gw&k*2Efut&pU-f-Tdf8pduYup)P&b1ox4iRB{saryMlRwBh*(%X+gtL> zf6V8?>hX~je^34R$Tz1_* zQG1Vt*P)!pe;$Q;Qli3OavZqR6kUx@0<^oQ{8{{!d-%B~X>=i(!dIa1P%UoX{$5DD zQ*&FiL!my@GEm*7J!y2)x$xkHTlQOW*VlLV!p}_Betsu0TklgtY4{@&D=vKq&j04| zB=%^+yb6y3x`d^bP#kX|xS+F^Ka$K1iO1)6^HQ&fXYj1blVvKb|J}oS4({&42)nwy z;OZlUy>?Zk)Y=Ki!u_5KI@wJjXdiHwbmc>mH&URaCf!RGY3M9ScXJ}~v5u+AGTzpqyl|2lSmR=P|d*PB}X} z2rqWb10Aav+IJu{=83}Pd9yn|6<8{Vf2GCsS?2-7eXaH|;+%pdH*XSrfcSayLbb(h z+?#aPOU~G)#$Odt4ScYO{2TU_1uqBhfeDWBY^QI7rAJl*xYlnWJl^IT8xijXhwuLf5Jo;kBWfg9C?Lc$U`z%YV7CTIMfEu6Ln%?R;`tKxWByi(8q(R z6lYhWqyKd2(<#4qyyo-jrDf;>E8*_c)R#$iT9oJftvLaK% z+q{b8p@#46d=US`m-Mc<>4q1 z%098p_aM+wBMH$IEn!hClBbsoW+sFzYFd0uqGI$iY5NcL`pFSbkv)LP`73Oor0Qq$ z5whoW$J$U6E{x|PC251mO-`WV+ZOLBY!FceWLRuF5mCeU%F0Y6a+cW_4oXEji`HX= zLpwHOl79qMnCmc|tK3#=N&+<>Blhj(R;+l{MPQAg;M%$na1 z-U?2m>L_dzFDlH3;DIafi-JQd6CEg&)pzalNhPcE)g@LfKuET&RCc1FyN;BW%-Esq z$6w)YNRHZ|ufj^Vay3VIX2&NbSUK!jHS4Ll1&_qoqGu}dezB(yryCc+v_x@O1o^;K zn|vK%o4xYQ1@36C6;byh>0Pt)1X3LDcZ#`7OpBp_UMdA2?;x(9t z+^?TK7Y*=xeYn8)e%jYBPvd_rWL;uevC-6UKQ~<0r2jpXa?ai12##CkDmXeDx(f@M#A5?DH`62Qg|#G$dcA?EQo&IY8!$mb0Y&eIOa1uu=P)6M~K(W};)v zXmq@~fbk~7?3XNPAwuxm8~!Wp^YeA&;dkHsuw1S<#`xVjVv;9hP`SP=&zx*bZ zg75%9v^+{j#PaMJ0iU49O~4u;&A8=(cwwWW9q;Et4ZBrchEurH{3!Lj2cqZWw@MuY zwUeGlk8+Fr%Rh-UNcqf_*74XJq8g%2EGjDT+b8N!oy!-)VYr8z%Uw32(d7%#;Xeyv zKFP+E8u4A|J_Vn_RrWWE1HzA<&>1w6ZC5`L>+9Xew2c(s!|fqxNOWa|^t^ZY8y$8Z zDc1Al#226Ez~q~5!2Rw6c~f_6k~Mmq64d}wZx7A)WkJRgX_7Wx z5w_~lRd(+-F;p(sV1vN-rnPih0@di{nfp#{>h@=Z9M;%=@3CQp+C^__9fh4F=M|5_I>{Ny!xShC5L$n76RXyi-qBfi0=q*pdd@!Z=ocAosxxi zP)Pd7dcq8bck+dIx-#oVcDi0emy2w55MLX`KZ_>`yj{;jK)SlMlCb+pojWuRoD+=& zPoQ3&{WjV?hJB(q zGvuTrr+m>P`}G=II!(|$a>mTDo}WsMbn+bQbMbNaK$IHsYA$}%jl1}+m&?uTehUI@ zz7%^6K9Dr~`bEIU=i$}wbnWNq+G=E?A<+}>Sf5F0PTZ9nV6sUx08zL8{;aV#kVrtl z^Jn+9md-6)$ZKyfhui(9HY--bv3AvC^TJtou8i!2GehOGPYRvh^&Y3w+Ikr?)y~VR zL}=Xe-N6tuF-F1K`T^fmte%|f6J2X%1h34E#bA!;3yYCl1D@pM(>Vg|5ok$nU1Y0l|Of+IoiMJi4A@A^WeSLu%l+(E^s{y^+zasD`_A zZuSF+P^KvA2(>5Iug1pS_(cQVtl4^T`FNeSjMJm^Iz?AbZW6P^C;Fg4nL6_WAv3C4-_8W-S`{*?a?ZIW8Y;+ni4=yN1o3M86lU zA{;j~aNWALHhP5WHoJszUU8{oeX^&+D&6kn6bUT^qwlOFEImX9LodJw-c#?C6&%yw z4##~3kdMF7Q4Khb)opY|u6drTy0T>g+Ij3dP@=uVtgfsJ`?K{BWye@by?I*F>(Pihz9j^He|eiHZp z5(^2WNu1lxpJevG|22g?e&kO&+7bdQcC~Q7ZDAJf-PzWfdIC(>8 z?w3`$K6Hw)vT&w2@grEqC^q~LSWNMN6`R`~GrqteBMLsjrGU7su-u$UEfoBEw~(Qs z1Hy4^V?rVfJ}-Sj*^tfnANAjbV&H0IB^$Pb#K@KDLgU<@Uf=*9%{h~4Xh3+Dd=Ke` z3ZGK!)JR-lDDaxn0%_>9g5xLJd(Ga1Nmh5ne5%7g5X5;yU~2qdQ^KeW|4XkG{yG^~ zatG`l#)2?YUx@D<#e#6f`oZ!Z=f;`+`G+xGBm(xzdmKwB8Drpn!aSQpEJu2LTX$~d zUJ!+xLNR+sibd94C@6fplv%}DNP5M79tS06n>V5O!1-uNp!p2Q($ zk{zEulFL(cUbt3V-XURE?(-69{$C$?zX2DR(;1^*@WDVK^J((R7}-oD@auGWg=wxP z+RoZ)3xWnY+Au}|1S8sqP@V9NF^Y7`xRvPozy`SdqzexMpu>+W5jK`xzZ5QAMkO22 zU{|z1QpNZDq87AOXVDd#r0roTO`TEsgvT=#IiR~{nGK5ykpDEqzDZFFKo%J(83{}Y zv}I8A1r0ecx4}o<&M{m0@rP3dOc>GsBVraaBdbV{!w`WkKNwn|aJYYW zSHRJR_AE1!24OFx8QR^KBgI#iNdTUTq{i@=5BX)lZ~Xdq2QwC`d!y5q<@W8y{LN}n z=r4T@Dfwj7!Nl|;Fe`>m2Fm0@{?+xu(?&TkO~NM+h@dfL95e~epiZN*gX^2 zh9nMe>a8-X;7j|9^Z6@h_r(dN|2F$^ zG#R{s)G1IJ(~p;q!RcDGMj5rYF)A<5Ye9%?SAW6eikgGU)TgSU0%RyvbuDK|9XBme9JWve25?!pzH+S<;YIuZsLE6W>0kifqE?7x=|wuEzjg1O8$L zQmfmK`HHnpXwO#8^iayh5yS=cM%{;Y`eLr}iga1S`<4#+AQJksw))9We&QRd9C7aG zx$tDZq4VrSo);o;_*qoq6a)?LFgT(-FjM^I6tX${a8TgYxuH%(ROGJoCn%f^twr)s zHzJ^eU&3-#IY_vE>W zmjkW@jVqs9fGXSAd2-uRee+gmh4Pm222!cN#98w^eg`3fjnk^>Sw<~kU%p<}A zKM4!s3>KeUs)9Tv%8w*^09qg32L1=}z&^;uyA3U?SMRAtQgu& zR4~kmaWi;r&{q29AO48?Mc_hw9Oo6Nc@u~53gW~gM}P}CQ7>^R3QksMI7-L@x(Lsn zU(I-m~3NB9A2k_O^1(<^`RYzI2`E>|G?a|Y3Q8Wy=R~0%?56sdtfHWE|8h3)J<$=ZfLPeRj%`EzGj0-JvvPc&iiQ8G_*KdB&nCmqwme)c0rO zhX-h(&_x>|dOfNGGe(4-Jn7ompYP5zZDDX1TK!s&mWr?ycH zZ+8buMsgEZ&^urX2U5htpS{x?!J|_1f=Whf27)3f$W_f0;sVQ0WCJuO;U6#~0xh_Z zeIruLAk1?TR0b(AUl(KF zNkR@Mgw{bc0}fGAbq6p8C>J|WO~}X?sevdAC4Uluq$C7s$-?E)6EVxB+HqqdoA>u6 z({T2v`0*E^ieNxitMT^urC8vja)KiDIXO8zT8q{}@#k_u-b9=d2!NzGW7W1ru^zzx zj&k?CcwesSC+T-K(;HxLGG<63olg-beZW+!TTUr@bt@Kq-lDQUi!Dpb_;OHa@QTP! zE+4Ja45vscnJLn>OyAj9T7s$Vsl#hooKJS|_UiY+oi~_GAh2d%` zZb0*wB?lWKoS>V?rC~zA(FtWzolJ)|SP(@^`~~v^gZ>kJ%#zmtELlJN*>n?cO$vzK;j& z1+t`du&0FoULd7ZHhP#Q{^>GAD*OZ|L4*LRpfiaWH~QX)jMM&G{`Q!O$m{8g@SASf zgu^Xrdh2e2P+z0zf<$2D2*F>!h8f*kUrccTQPJi$Q5z4BDORI{^qho1W=!4Td|Xjo zTapJ?M&RId=6zUYHa>C7ik?87VEcpUW5!U@{?`Kl_*2N2GQ%vVc1FV0Be%E7$$UN-SALm18J2l?u0pa3B2b=h35Pir|nkpmp7U#IFw-qp(?FWYn@NKzDY>t&YCD5xk#FKbV7lyjVs6 z_g4hW)G-A9gsBaXDkPx|4$~|oVQYc$wJmKXV>;5Id2OXa?Br=J34i6F;7jMdv)CLapN3?lbR9&e}R4Mp{<*G*44zn1IiyEo|Vt7*Sa zriBB%SVg~SLGq34T9f?nW3(RP3CECpnRhiQDI9FSww-$*(HBYClc0!UOP!%x!(MF=?V^9&%{n)Cfyu{i~k@xklp?`Dgl&{}*dn?l=?JUB7} zM&^-fpzsWSw^SE=R{WvWF+@unA#_g_z=$?{LsC;*EV)T#>!S)4EpbUh~6XR4} zP~v7fr+`J5M|Ge$U3xZ*7c66Ed4vQhokR}yI4c;eq!!Qkk0uGT;0Zg;dvXDA%?=Ei zKWn+Js7b4mr*3Zk+_3}9nDxDg5ZYtJdtNypBW3hO;V~)>)u6_Xhk(6VZi0q0_7MYpWno(?qT&swl+|BhQQ6^Mq=4lbeR$oVQDqoqCeLLMS;@CZ~on0uBj_iBG+K9fAB_)zNo$ZF%3p z;&Q^AB|-cElKvae;#FaJ@KbNa+twrUhlZp+?vA+pqQqUa>L5%snAc8`PQd*Cj*3!< zyx*y%dYa?9NqpMcfZ!hhlM?JO^=EHYnq;hiCbjAvuk=*C0_{qVwv5v?)|BB2XrQ@{ z@HmxaxkYL!^W8Zbr}Vz!)R9Q1o4cU`pq&ruJS!ND$u?}VWZl(fne82)GI0 zUNEv#cA)yRh(=AaCWqgdZ4)p5D{%tedbW~nSBP88s!&k8Z3-AKO&gb{?;5OBhc!e8 z($0!x1p{HSg=De-HUlHoMWY94Wt*NFn$r)S12uEtyq&s}+UG8uw@SSCuW{r>>?s56 z@jSWVd0P0nh7Q(qKbyT8VdX;I<2czM>2KDF~K=aXPFT zz>CHbcKkVY@lh}80fOwa2+3i*lqMoTCW}>%t&|&_Tk3Wohp&x#J~YA#Z1C~s;ED;-OpK|$$v)KT7`)vJPq29&~~_VjU16$sa-Za(i@R+M!kOgZ7zp<2d_r4R@d|Jl1B_ zQxy(|)O(sas8Ymah+Z<*X5CXXj^z+3=aZnssxi==1Z=IE2k0!TfnrWTKa?IkJ{zbR z_b6~ID7}S5Jn#lA7A-iID!-`IPGvxp6o?-S*&=lp^zodwC8p!&i8Sd*t)#SamX8)7 z1TD^IU)ymPx9m>;JOy2$;(;YKotBE@Val4b4$+4+Fnn&u`FXsayHihAKbe_eqcN z%eZQ8eAeBHB==m*EDfbU1AD?Qatga(^<_nYl}67os-oY0wD5`br-{Im@f5k`7!9Df zI$Ql`tcpAb_^wy*iV1Dwp6>a(dK6oo*V zGR$);_`clqa5-R#X_j_T-)Fs{fmpo9oxYD8UJ1xX zIZj#Wh{j&`@3Q&kX(j5UR8kytu8MnKMH2jQC$W#G6EYMsM>H&z~f?+@@lm_V15~-{|#{@ z`B{#w3ULn`tdQfps0FI&kMgWw3d+SzM52cEFrmMeA#I5dh@~qP$g_ad9*D|5Oo^m} ziKKQ*HQW`A(H)Q9Wt$T6+H^}L}Buz2k{Y!PLhKo*WT_-Qy~ z+C{KGq+?v_*41vw=6WEkh_Es;P!Sc?2$-N?eIB%#JR0WzMln@H3M8(im<0o*7+KYi zr3ME6zacQs48P<_;E>u0{*uY$Ojij&aUr7407hyy=Z8E{^w3Xp!qJR>F*X z`c3|)4T!L5g*r=CMZfod?CmsMZ$SfAj}-)1qvF94kUH_Ycv7^F=(Py>f0lO@LaODA zM3XgY{q~{1U!{u2pZ3RHML5pC#UNsq9SQ}%LO6QEC1mk8U^Vb4f8c`g$XNge10H-@ zH4V@J+t2_N{VD)W6+MteYCW|s^fCBdyMW{!n&cf+4kT6Wq8R=S(o&qUUle*^ zqZCngv3&}}mEykVfBdMbw>X4oIYyQ`H-f(`PQb-ZIy#qne$6Ub(~ngZ z?o~~a-K+sw!K%K2p6vo=yaAGm{6iL`KVw7queJwGuZY&j`N{9;euF&IkK7he!j~^wV}5{asrOAfOyp|1IQ!5JT

    2k=#36MmQSjip+4Dl@u0g$nF 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

    UIo_~Z3Yt}$jnPb(LU2pVpH`6qT+fvp} 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

    gH>Il#0a!4 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�xI9HJ_^lN$*#(r=D`eV zj#^3S=Y3~p<38q{T_u{?ZIYDzuT(>ii!0^2J{_Hup8xgpYFXbH$By57xwH{sKnRB^oaIk^hM8%yF<9A1Xaazf1AOb1l?dnRlF0Gtevo*R`6 zdf2ZwG?hI9$8G(gJFDbdZ0}__!nK@x3a`LDdkw300|sGmK;Mk8fP~&>W!-RDZg2Pc z7Ys+W=RFIMkuntYTmokBvqtn-Mdg#GR5HJ3EDB_Rioc*oZh#E3sdp^aAB z3`5mhG)h#Ibwo|&g2mm*Q@GCDwySC(CRv4w-Oo}Z<`YZoMfa!`8zofxiB@qp77|`6 z=@@1Dmfva+ogI6pE6wFx#sbD!3a=V~D|cqC8^oo76T0t|*pliuN0l(!-|uflsR;U;Wqg)!4l|yMVB*2FZro zRft!ZjiaG(9(LS1e&g&2K#O;%M({$`>;NF2G7*^HmMXy(9;9aGip1^y0lAU)e9FG! zDFSI{*zR5V9o4e(Me(2ryz@8(6C0W6m7J`lgK9c!ND1x&*wpf7tu`=+{9K*@qzybi z;-~;3oB{eMpB(9ZBvAWG?R3=&O0cQl7e)onA8=y8TYKIoOanp^-8&dSy*Yr|C+F-r zMC*Pqu12U331q+@p5=F9!x43od!9o%cHzv45p zZrx}>y$S51z1+US49J+xxJRDZfzGjb_bZ@>YAQoBsM7Fb%@;a64n(-vv&#vjs=vbH zYPVcvq6z!82WIDXuaK`~?9#DKOI1KhVvQ=}Klo&x92jP+HqN*94zIcUWAA}|UylZ$ z%JP%8BLlgntSa99%5c=)Ux%gR;y``Az<0a%KWxP&j`Aj*`f+;xvW4B#vgS~XNRz7M z0?32@{5=(Y$V-kF$(_cZbqdA(+VnH85P^Ju;=T0wd<8v(_10-NtqiAie`$`vU&R4W zKy57q;md-{{VQCLtGFS-1a$WK-0<-`7=E-3PRF#6=A7wuJdosKj{ zl%HwEF%L|-mBYUek~!y?`)Cmm`&D{k$H zJ)w~Vr<2)d<6fj#Sj6X|phE&&qx5qZ?`;<%h@Ug|Ku;%7J&K|A-i~cG!Jetr9QXUX z@18`dJ?N&+z$o%mZPqmfOSgOi-g7^a8l%@?wwN-d5!Ia8YmMjMzt4(P08w}4c_BZmGRII;2YO+Ps=rVQDV_$z|PwmnMi&~W2FUC0=($-fD7C|36 zy+vExD%@P}^!A{@+j(Z;h_ARfW*knDR|tX#7aTby#J|Mth`Ov!o~zj#IRn3vcZ3Car?0e{>aRYXQ{$VE zm|EnkX{atzeHTic2rZG3<8bt-LpZ|6%=iG!RWtY*fZ6n|%YqNbWmGm9?1Cym#XL@l z8VLn0&mKjngnvw=GM#=Mvn(l9_ujXk+(==%P9>q>>4$_fFCE%<`8r=43?IFtR3Wux z&IiHO?_clCB-gh!rmX$5MU!G|^0{3y#qbL~1*N;&s49mT2D<#_+{X2z2u0)U+_V^^ zIQtRD>(9H1+y|e1}E33D^6B+3ShLSJ)4VvC3Bq+77C8 zIDY8DOz6~{zkkUE3)$M%Am-uL;jf_7{JyH#`@T>hN+U!Ou0qDi`uSI=U(DNg17IG? zBso3X=?jo{k(|T~HM4d5cc*tOYo%KhX$mDjz8jVaHaz_F&4HU-$Xg;1m2MN-0d7zk zP{?EbnaNq?@Onja{893bzsYxEPvrd{LC+R3A|IkB?u=SFDqQdJx2E%MJS@E^%}(38 z<*`%yzPI=$BeBT*55Y;eNl)t?BnBq3%MYmehOrJbas^0{A;a9b!@$673 zfglYuiK>oIZDPb#$zj%02RyB7bP1JhIa#6HC$@qDN*b3t)?;7RGwJEfzWplsZk#xi z|HrtQj&kDF^NDAMwG_#2JOU=^G> zXF)|I7js;+%qCCuadFa<)yN(3M1B&OIbCAW-~T*fWtHg1(s%b}r~b%M!NQeBz4{fc zfS;k~4MGY++$%J)!KBZ~bHVG~n$cNR%5JV4f@FT3QyeeDy)(9iTE~vOdlMpNKZi1f zkw@C!C8slB`Kk%yx_WeTi-VF*1${jS1~yUeFo|lyBz13?wc+dQ4|k_y*WQ_m@MI}LpZ)+#<}dG)iiu2AWyVDb|>Ci z-L0%Aey^AuttZRzjhHD|=T_Rs$M&VpzE#9jHXaMMNfNZ5K2GNekD7twylvFq_|qvi zrE`83_oA&e8d&w4AjvI=Oky1@5ukbZ@i!}(I2o5JeCXy$DPWTGbl#Wjp|$s;upK?q z@7cnOP98;*>1#mM_BqqwG8m=v=8J|HMre+v%vXwxtEBr^3+2!}UKQ(!1J?9;*$WziHt>SN|WoPlhozfx&&$?%0uh{Z_=OFvDOnp)D819 z1Y zsTSp(W2uKn4RumXy^ODU{z1VMQ%+n};9&S(iPhnG`Nu=n!WNa6ZVwbIK+N2Q!pUwq zMY9@e6*5#Yk=kREI??HuZ`52J6<-JmI^t{cP8u@bi}I$cMVdvPxwH?#K;-v5)jq23 zGL`3WZj59gB4Xp1QLgZpmb;VOmcuDZbX_<&h>KQNibMmR+VSKUZ;m^PsZ-#_$-z-9 z+g!vn-zom@!X?CFYw%5BJF!El0q9D5%YqxQ96CF)Ql4|+O{hUrxNK^4J)yp|$M1b) z6CNGpdh__~<@vCA129kEO3!SFauE~RhdY|q_^?q`OUUSIm<&c!#9TuBcBC!C5~lLe z5WeDRnFf))9$Uey6!W90NesoJ2KThay%X2HqRcdzehfvC$V1(<5U%f~Co@Jev=Sgo zi@BFkf@eD7SM8Yac+PjpafmI=C@;c?k8e?_EYvu0&`sB7@f?2Zq@kQSR@dA#HT|UM z$ID}whm|J~Lz$y399&~?BH0~9oxv+SJK`86>hfF`HA1tPkEVzlhIN&u8OYEM!te&- zp8t4=90pBp4`cc)2<3B|6|l)mkF1Sp4G;Dy3%pI56U0!p@Wf6W0Zc5<5qg@BP8_>w zb#35V=olul@}$^|5`gFW)HsdlOY0fE^Z+aSf3jy&%}GcyzV_rQsq2p3j*0(8cLuQ| z-uV}U0O?-c3H4^PGK%BApcXWdmNsTDcbhrhRP zw}j`)_}@zWLXV+Hyj;EJT7&fN&t9ImilaE%vS7}5c>$1K^}^-Ahxl?BNTs_PmYF<+ zf_|(|v+zK6Fn#0F&N(zy!578Be$rzsBaklhe{pfJaXyi8ecXxzc28>vfm+Zkcwl*yH3ol= z=zJR&w|;(t!hQNLfBr&F&X2Kk|Dq2gy-@m3DE8i#Yf;L+0>0TQ4rN#YZSL9tGhGJD1^&iAO}JXd0l)o&iT@ZY1IknlGi{%H&|&@$@7nci{n5w~*R6ku zIZUMMX4MH+?4Qf!KFs_Odl!ZrIL7)B?O6BkLD<8ll@A6NhYhnw{Cd?kov9sq)9B zzK_k4EAnzK?A-k)6n>`@dnH#=dyC>$&gsr>$e6>BHuv5{UQ~}*eEX-h>MQ59Mpw&t;IB&=30TgDu%Umh?|&VM z-8e@LWnXv3wVs3XTD3Jr)MoAY=GJ*xS~2ehet6~FgC27qhRnqQjsC#_$QvjVLdS7| zcRYHaJZ9DY=l6DZsr*~k&6Ev6N`S@VDO#?>`57D*~Z zPJ9Hk%sFs|<-kW}{^^5j*RtQXAnRU+pIzSjuTJuaJ^wiLf6iL9Fe$n&By6spgP))~ zt}WMcykP(i?)H5M&uK+_2>8FASne6jUJRKx8KOT)Oec}CJ^Ne7b#Q}f-}cO=s535I zDt-IV+Ezmr>LdJ*a4{1#ya)FzRkGgSHrJwx&$z_-Orw`AhpH)`sy5s2MfbpiE~y}g zXQszoH1$LRgY9gj01G#tzD}E`)yX0nlWbQi*&JU|C3WtJVx_SgF?m9eqg*` zZK)+BX{+{!17nk7Q_yr7yOyTVWL4^|$Vu!EU4G_Biae9%kntsx&tUQAG3{ahs=6OE z;CIhj`4Nj?*5XnQdqM}rT}cK%ao113NazS;nHnT4QMW212R&J;+qu)X6|I7GUw6i^ zKGv&VWF4?b7Hx{B`8d_i?dHzH;LW;2+%0UtCJiXy87k!9x=4=EhuVb7w;T;=VkK9*T!2w|y(XX1^>T)0v5Owyq9M6W(Jyz2*aqe8 zj5z<1rTX$hiEmskvbN`bo#yK|B)2mzF~*#3XBS_o-rN4QeDH6X2^XxVdY>sJ{WFxj zi2_}(xw3n7lQ(Jbd*=^vbJCo0=iI+D9MRvC`b$D>6a-#sbLW2nQzly%OwtpvwMowf zE4|Nx3+nzu8wzRn^Tc>AX7J6+jZkqF)@#1@n7Y$c8Cjl@Uiur&1;{?)fU zBQ)Zi@hvnVy^MXQd4ry)KIpB{ma5rIogt^Y>4a_WNTBJ-V3A*xmzoGs7pCDA$n@iH z&2OJ6pYtS%D%^46O_F~_)^0?^=4^Pbt2Y^jmG+uPGfK z?VF|6SjfS%i7~tK%P&*h4+5`A>&ir2u^)9>{FW11XBGd8c%1b!prhqc->ATj$kTG7 zhu>{INXS$}crT=l55rTbtM6Vp2VQtq^&B-Up#q+6)9114@0+Yq1wd{*vLqs8-gxx< zZ=cJN65YyL!v%$0X0~%g;!6I5=juu%ZW-3Oe|`LfLqw%=pKwISy|^Y$o^aqACh|i> zALcJSSt)>ABjBr?>#_rIU9vyW@VUCiCV$D3mD9)XG8cGG6~aWNvhwNVA|~EEc9S#O zij>PtsH?L|q_T=gJaBVa&J-T;m|swL_IvKs)+1TG$LZ9jl_66tgv|WayWlZDD&aI` zJ(JTpY}CFxvf@3R5%^hx<=yJIp}e13dgt)`fTY|JCt&k7LoUt2aJKwV_2`l}31IVo z7H#&B6RmybQD>nHw*#8=?aAYL#{!}2@uHMX*jU{%j?cYpEYrWI_d{_CwU$vWsd3D! zu08sOXQnv4e94#Qr+O?^e{AODB3&(NoO5k9rf=Hj{uSY;mCA9izQ!TyYqOGlY$zk% zjFf|jt#PhmNY0M z(K2pj(+^lZB&XpIbbEByF61P-^Rnxj`$XsIFdxZVg=?~yR)^JKEA!`zcDZ+&V{eGK zYYgolaEm)?YIRewZe}X=^CS&Q#tGh`Y;F0OR~PY4Q%h7p^bVydKyxhfM<_M9&S{6n z<7-vVOSU?Kqgr^9ma>|t8Fik<0z?nSh|Q>;y;2}e%?tmTcWv{($nz-QUcz}z{wwe;N={Sj0r#VS)cya;M2%b zqeQvUWSi?gCFLjjN*SV=oKVzA2ik6A9aB4e9kh6{63#@$JTs~cgXEpLUT`gjKGGhNGSH1&)3$aRhpYY?{X zi4YNAOX^NvSJE?#uay8_Z71q5c6=)wHA8t zYqIsUCz5#4picLZFT8bf6Whcq4llSQwGJWw4{7fm&sN|6kC&o$31YS-BxYo+(v>6sma(R{X#FlFyi&o6~^fDW29CBOxN5ek=m#vLV+-Zdt6~eeJJps?PE_)}x^$Cczz|y-Uxb z(4Uo6Z?l8HOa0=+&jBif0K7l0+2WPH9rpnJxssn$PBh)U33cKhhFjm{Z6tG>x)6&m z@UUt#+ zwQw26(syY57Q^QYj%%m9@$3sMQB@tKL4K86P|Swl>86uW@g9HgE=ryMe)VQ!YAF31 zPWX3b#N*-1=UjNb;?o=Q>^_mc(kB$LjRo$+6~*rCLvbPZTc4H1d{SXtP4JC*1V&a9@??Y z*MY3uDkoY3T02#3UI|EFW%YGyi7tE<7?bHM=j*nrHZ}UbD(_Cr%dKZ2Eg`L)2lS7o zf!*#bRDW;*l%~{{T>W!Z<|-@juJ2y0_4#+^Cm&7Q0*^bfKIKuE*<$_DOMTbnz4?8o z!V|zQO@bl)MSazNY`vVnqV7e0np-F$Jbocj>G@^A%-njP18-B){KsHrRdeP0b|5#F z4eXFw9;eMMdnCLpT=JTRtTN3kT+S~^c=c-fx#g;i92&}h?p;1gq#lXNheL z)%d}uJH=y`JdAgWFTB(=?y)m}N_m~(_~>%}tArPMnC}a~`sT&aW0o#lQi^~CJpNk> zeg`l*3`m1OArG)!PNvLF8L#~G<@L4NOr>`&EXp!>9#;iufW6hVe8C~Ae^}nXVmRUV zrGAXTQf0wz2B6~qVA{u<1w>*3K<=%xKfsp5t}+P~)NtiEA#;OQ-}X>s12l!4D_(QKx>AYgVrkF%Lx6Mu1k zRtgyM{M!P^G$0Cqn2c;NPGkz0rlHJ>$29RCkdW2_$f_E!P2Tx3u}G4%D6<3s8-P;R zvb58XnY0A{=I5rDxq(b+Ui=a;0Cae>E;0`ANR4;x#x+iInx-kIfH$t+7p;*bq$!@n zY`KDsf+uYZ4UNqELB4Gcg~xeh%jo6bhxgq&h*+0eF_t$i{|sLtziiap__lC%iSClz z(3WK$F70XIXO_H=MrW6D5!MCK>)VqbZhq#Gtya@F5SaKQg1t`xzj?i3yi{PKvdK`1 z_+nVYhyAe*(|NsPQ8OC%z!QH^6Z26>z~A5Rk_+c;wcWqQ{use@-pxDZZ1{NxWQ}a( zUS1~zUypGx;GeLbYVxD5ytjFs&jmo{#cgB>jbrgPnOdh*p z`$}~okifyVhi;xEOYI(bmkxHi0QZiSPFQWy_P%2R>!S5)@0=_8N`pL~`d-nB=~m#p zhy16iyOVhnl~$W;!1n&JeSik50-q~{DBao*SkRBOL7kroHk`t;RviB}Y#dkDzDmxd>O zOI4$l-(-82ZpUedq`2)q1W@~IGta5;a{fzIt4*r0&GW$L3vRofyLKFmYF6&u?I?ym zSYiCAxXDG&kK!e8$2D<;xLJRimBA44B!}*8q`P_9u8 zCx_JB#CQdx_|&THT!Zu~?Yd}`yM4xLl{O(7p~1kPJgzMzE~sp1Y{;b`V3aoAtX5c5 z9d*#0LR9@?qaa?spv&G8<-4!zE}T@m78j*NBg5-sifk-IZRU4GHA^vUKGv_W zk$wMKdIq+@<6PrhlA{$)bhQipZ>Mg3cFi}*gy9UcNe4_NdQOxA@*{R=OmA$?A+gBp7s-e+Vj^)f4=LGz!{`FDpTTM9P`8_P4{MkTnSBS z+V`|*Q<9V4Vf)6B-Wm$egH z)!>Aj#nV2K4>A`$l{X*0sjh17CANsUy)v;Js@tk&?AOCp=PcTO8?TV~p5brthhITS zZrZ(_cXiaUCAl_>3&*#rF}G;J!zVh!wwRi^4Mfd5jc#Rs0mUD(T3HArmQ_edE1P%T zfcnoF>TJCQN=k(v7rlp2u7|hDX{jT-zZ_1tyKbR9Cu~EzLnP9zx1}#U^$ccs^zGHYzW6<<1A>8)T>E)T+?9 z>`C~Vez?b$?kxb-^Q2`h}WB|2t<=Wv|1s*ki3RrI%JSrAjZ5tQ@g5i;xWh;_>-T zn@LB5m4!B#F>cL~S}u{}QxDC2KC)Q;jA8tCNaZP5Qu$)@H8;al&(korQf-U*h5SGR zVo&1;2ItZQ?Ff;qgl|t<&o_>E1)Y1Q<(icd%z{fMlVe(Xui#|dtVoEK(!7jWbJN(G zbIa6YbpBZx%XeBzd6%L*EVDAAJ!Tv3X9!)X?E$??eyYq}M-wzSSwGQze)r4sdvV*( zt%n=mDZb8;g$JBow0q|{D_80=;HY5%XPT^+rMzfjhOd5exO-KZJ74PrA;SY(leZhF z|88%=V|Mn#`cB-{2F&onYurtl%PZT;+`NAz#y+9CY+U3ueR1X(?;r1L+cpfpeGrVB zRJ(w@al`UX=f!EKYx(blJ|QCT7v>hA>-i(}GhY|2VUM)$1?WkU?S#x9S+qqoDUZER zpBrPhQMW$swIm$n=@4C=*p5voF0D|%3c)hJ=wFxzi&(1Xc!J!xCVYJq9lb&9H!G9N z^#bgZuH6l9YF*vv`xbmdR@GWC89^0*dVP{6N$c89^;Fein{|0Z>#ox_LyPeSCwk0M z%EwOnd`@-gLv|qr%l&9?q*$DBE%59|Eu(|$vdgPUuk!?qOVZ69%(hg?Eer`GYBx|H z<+j;*sOFJw;mO$>(sJSK!)n==H7KfIhXb!aZJRYGM7S%rn>KOFbQne`VQ>a*`*{a)ZQc1M->5zc}_z;g@N( zUGpoL+_#y-**E+izilOJIXL&1Kh!v*jm{$vtI(;&>n-_hm)})?pl}u*d9JSNi_h~P zz)q(%`f0RX$8v3-_PGKvD!9RFJMItd_Vk{;2LxCe?73ia_4?GVu}orT{i`kd2Y2-X zua9J_-XEAY%1jJ}nD=!}`*}RL`%qpHZw9hC#l60zL!Lz@MMJ+sGGA@A3S7C|tv^6* zdy3)Qh(zmI>8I1l#i;Y_Sy#DS2&TZUjt^K}Y;rFzvDe!!EZE5SeyJQiJY4^=v;J+f zVbhw=W#)?AIGcRF;l32!z4l7K=G85f#^HGNPr1qf6@!!7Aw!!@H$D25Uw?JHU}S$g zH4ZA@{C$K`JGwb8#`etf+DFtL2NC_J*A&&Hi>PdQ&-EKf*tDD!9qRcj)){)H5tnMCEa%B1Ik^yIRuM5V@zZ zU>uVXIVz#u1sg?s+GT549;3B*wckV%C&=Y=cJMwUySu0fgudjMr(&VX1lBj=oezX_ zRg=Y)mTP)Y-XKZ@1=_}5&A3`Pvoef=n2~vtF~%I4k)7z;d%6O37!afkUJVcfci1W(1vO~vD2XLDI9g*xiP zWDlzhDhCU+TIN-lqp+CESJSj(e5!=9+$9!9Q=17_h4*>d3$gw)_v#`P9nE`p5{lH7 z;w^--btlC*c_+nukg}Fti_a}y#OjZi>{KCBOC${Sr)ql%^C_`+UERAA#PDx2KqSbI z*PYtF?n<~oq$JkZ8AaG&PRP2Wg>FEu^K-GwTohtdPlOwF$s$PC%iWCljyt$B_-bjI z2j239h@)XTMmjX!MC4Rs%AGa5ySqyTD1BXCDf*KsS4kLFl=#6qU+!^v2?z`E(47Y> z8|vT12(1lHAD(y^KtHLmpg)olb9&sm7;oBP7~B(O`7}M2MK7jlqB~GfS(4j*}86_0G5;?*lK2?V8seY=@nVP8GVx8sIHfb}puOkejT&NoR>J%-EX62cGAizV z;Q+Fi02d#Wm{}ZG!w|MxiWJE$ih4BSLkuJQHAtoyVsfuvaLKcjV-AoZl?-OfNfg5x z{|Vs@R0H(`qk$A|U!+Heobp6gk`dA)pYg^WImOjSPaz2D*N@i?FLi25JDNUG-q6>rWs$NDG1^hik3RX){Y?LZyThA)KgE4GV7rr` zcMui3q!2C|GBx5I7H1cMio;lz|B7*O9Hc>;ldQg%(!_T=kDzCNRxHEXY+AeS`W$mz z7%>hc2T9-LU}RHAw$u3hXh0^heCrRZ$H@YqMv9KYWEyGBTvLn?-g@-k20ERUXh`|g zT(yJpbwAJ2_MYg7!eisDkH0g9Sa7-`*X$aOF_KUhf!+cjb#{2G>0 z=1puV-%s2@6p6_f@LG?I4p~VE!FVO@>k65(Qk{Bq6(#yD;pdg)qQrf~>SNXl;mnT^ z+AA3SbHKd!Wlr+`k-r8(-1JbBY!uNCc#glMpD5(Uu^b^THEFs%nD%MDzFv*{E~g`E zjMQ%G`yFbF!L9}LPYOVWB(&wbaN3en52gQ)!Jo-k4HCkEur!f)bR#;=l zJV(4lj&98|y4(9#kao^Xh%3YAHBsuU1lEW3DNU)~3~~C?CJ4BmUO8)BZ)0e(vR1}m ze^TWd(@VYW9i_>NA!OD0(Ywb|H#G6d%d~s;oalI_vm0XMI;hmi^Ir=x zhPbZeq{mF;{o9yM? zbfV>1M8O<;mY#>(QnU3v8KfnH3aVJH!=`0!@zL3L=zc>^5Os$Zl;P2)IbG`bK=PL*Q)_Hz zP6s+5xsRc#T;$m?#1y(oZ`;KPts~Hdj*{;pi6x4FFb7fEB`}77_wr{VfoLI~54C%_ zN)op?A4jPyb4wY}*y%aT#?%#)-eV?XYa2`}Ls3K6p)JPF#DnhiDD)C+*VP5gpLc03 zRk0*oQk-SqvEk9OlS`FRCa2VXQ^5m>thxqA-C%Fo%2bEhLuaomY`E_rqA9bh(yg2@ zN0ksLGFXyB`pHzN@L6AiUByykJC)z@!3_tt-N;%;?{=hfJn=*!Zyi;(XE$b41CJeZ z_9AvY;_Pz&EN0-Tkt;!0DH|b2WoAz;%GdzCt=O|rHxa5C;V9_fgQBoSc$-sTim676zj& z>)gZ6_T);e!H%+Qe6q5jH=NXa8M%HzV2Ch#Lr@>hVYH2OEHe>y5`9j8PnY^5uW3D- z?djSmgiuBt#@!)SzR-Q~&Apx_CjM1rcvi%Nhk_i~L5187s&>u}_BG-BJ`N&V$nh1} zO=0l&E@U+3lZ5L~#1uA_b2MjVVoM=c3bHY1;!KpIvpo%sw+d6aQgu<97DGp$<`n7S zE>*kXa6D4od_m@&X=+p$&X3_DFOp6;;JDOsCpO10t<>stR&AX6p*pAI;=tO=RsE}w z`ZsA3pXL@1Dy1MQq@CjDBFJE-7q~%;9l}yvpf<=|t8946J!lj)%$6eq5wWjZTgxs~gFOdjWO&Z2Ae2sezqOyzL zUPbVGJH@cxa%?T5Fb{{}9#q{lT4$klBD5zQg?)HSKZgyOFSLC6mVX;q#L*nXruh);Kg{fHa zvTpach4S!o{0Nk-?x;27dMI^KG+D}KUo7DG&-G4hYO(s_fZ4X_8~&`m0e-gT(eq{n+Zm&7k8ebSW403#x&oQz8f9 z2j=b^2f__QD=m{;3m-{tu1owuz4G#waID%;DuJyuu1g}p;Zni7FScJ&&aYuuZIt0| zS}$ z(*RR)j>BRg{O&8pB%UgQh@+JTGJ`~{0V*@=K7VNyJfB^ zY@guL%W)Es+3s?t-Qj(RLNNmY{vXzNQDs)$%_BSA%&yCy- z&z!^gO3hT<%TN~d6+FHL16!|7lP&-^Uq+*LM>Eo<(_A=% zuCJvzeE+@5>C69GWs_B#_*6+7`MkR@2v5SiK*Ukv0>oujCwlN_;({rOTLc!a(uwD+ zo5DE+fhJ9|R-&|Y6YovZRGk^nPz>$_9Y$qIA_~KWhN6f@#undi)pmtWMu?M*9=Apv z>z7(rx4d}nlDS<~e|?Y!rv?tz%H>@h`dwQw7|n1j=atz=8f|Hxxu)=X1pOX+Ae&C` zreo0;q#LlhlTw$cR&46-D*s+xQ_AWd2UfRv#qL%EN~5#INnXiyRGFxJyD92;e6@yA zzKW6Y4_V;h(1JJ^g?$Yn^;?`>lI?gcn!YI^N2g;@p~)7)A)NAEafdc0BAec^ke#Ih z1`5yZjbvs|h#r)<4D`qBvny(?8_~?WvyB;6C#(qJHoEl8^OuJL- zj<`F7gV-)J^{6kZyg2FPL_BkxG|&cqai!JS^G6ds-Sk1_xPXOsisDEP!^*D54$Bab zr_7W*WlL^5*f(NsnEzP1pO*$`-qr@_?S?+ls3wQ^nFC2_i*dI46&0Gz@@lwC z(lG1bj>AQD{6K{XP0c45n4Qz)phc|WRaC+~hadh7K479`xQ^`B23^|bkT4JHXIFjf zYnBvb$P?F4MW#D9NY5G9LQYwD8=nDE-0U6dC&_hUhfWGNg|%nrwM?jkgh-|&#gdEL zIzrnDj5&BOdIC4=@H|%6FsVx(KIdM?kf4mP0&oylbvD_9wXk-&*iIQ7na0;OAW|=y z{ha}^W$m`j5fwK!frayXr*u!r_>|;tvLvuP8Z^~yv>e#C_*AK8a&hmtBtqSZs~$Od zsP2GP@*|>^2>CE_8SbP50r9;Fxvb|v!@4fFZM(014NAG1uF!p0fc8Qf8wYTLtI1wc z^>jr9noDN(Ps|yetCFFDJW0I_M$)z#MK7?t{B2Rq1uuEzzecH~UuA2}J%KbDEuZH9 zK8Z9AB2JY$8Ep8Vr?CpFgVW9fDLqQ;ws>*AV~RpT4-bo&&qeiy$x(6Hfo>)~%=|zG zxEU*uZ}Qaqq8g4=1kW|>6pg5vxPTr?MtU4vxC|(V!Dmjx6iow;J;_&UjNVN!Voj?d zla+-xtrIn%tCCgh2?_{L4Rk_Jz*Zv(znqBrh<1n)#U8o`muF|pDvgSXN5y*A;-Owh zoNX?wZhG0h=1JZEamzY`K(C>-;a-=) zq5%$hbhY;Zdi`Ei!FLf+Cv`KN^D9rYSejuh4bK7GV$o&v#j$>V{@SQ7If-SHIj{(2 zSd3$5R`17;^AcDoBVUMyr<_KdQ5RSwepeTb-4u`MC<$An?@Sl9)<}zR1-*AzrIGqr zFX(aXbt20Sf6DJMtYX;R3d2-?+_ct;gAQSC>cE>($*Wd2-I2V|HBsVZ z4ZUhDj|?Xq--|Lyuu3qMOWkj8nm)cYVpY$R1Iu56U|H0&Q~UW4EQ|)3zUm80^e9sr@0s8FwU!~ zAiB?77FNK1$b2rVjDg3^dnzi6=g!7dutx4Dsb&UR;Ho$Ala@h=B8(ZF8b}1WH$|xe zBuFEJ1$PW3p*c91*UyHbP1h4h2KIU?^brRD6$ z8U&{=_o9&Nto`{)6~GCz8urNBv5DN4lGn6KJ*5047?KM zR)>1diWKU*?3#82+4^g;qE{yHevkD_Hy{8oH81gR^Z8n04B9tFQUfi>vMkoEaka-LHc=tVy`-}#fI;E{1oEF zkiq;*8}4#apHQbmY*$4bY1c~elo@@T`hdvE$mY{$9D%JnmB1kOw7(Fp9KPL0x1MN( z1ncLyq_x@BZ)W z(gL2Fdgd+0YY_Wg1xAQd0vhKhq#X5XKa11wa44ZNmM_1V6#_s$5h|?0p10T%?N%4p zfx)3y?#q#%)gs&Q^yPi@;v|N=`oK3?wV<8U+%no&W3F#v7iU34PDLn>tUq_X%#>QDPv@mriQonqjKy@;i6<#DeMRrmPl9q zygvJPN4QW}Qq0lfB(`UKq!ESidt(O)&%;VQQZV^~d&l*hCA^pMn_e^^f%wmo_60OX z>31Dvvs4)-3b*v9+A{o)JW~|_S9(QeaK7-rlm_!A+B!8VeOMxr0@C(1$&ObQ%nWgT z7l49E*q909&<>PKAAvEpmx)exk?j8FD`d-ixG3nzp&Tj15TBHh9i;w-Y+^G1OTCa> zk0E{KwR=@j|D)3MwK-5U!b0QQD1eHL%iB`s6QW}pQ~_rXo7pzFbD}(lHFBq}q(-y2 z$8Y^9HD>=UH6RtIzoh0fEmxtXn$QqN%t8O+lDUy1-k;-)alDUlvBT#6wG`8F6WUvq zRF8SLYNkbfh}g)ZbT4a$Vaq3CV)zlwIA3I*Od0(s;5Bs$-MfOG<;L^raT?zQuGSwF z-&?F3ci;>M9yttc^+t;^p^(%pL0OB5A1lX-tDqpOgr#o6!Ja6vbZ6 zJ?m%4p5LcaXd#MUYY$c-w*M_C)KEE!pwRp!C>(zYiU9u|*B3PX+yM8vvS+Ja&o6+e z#rtRg*U1k%=i`R${y|%Be0V2Cvenc952IsB?&g?yK@Ti$>6MQEloNHW|B{mo)_#H# zTtN(Va3m+?6gheHKg$Va9{x*CvRM+-?BtX%Du}k<9!Rwq^gnwbYswT@p&qfjaGc4u zwCn7@g3MrrwG<|2^obd~IeyF`Q2yZ($tgr)u4C){8YBM-xvaol~YD8u`#S_{}V2OtI+GaKrS5jGr>L7_gBlYf`5x)Zzb6Ruow1) zk#TJQL7Q>(Ps=$@a4lN`w0S+nVw72;KC@-})?LaN>!<>en0(k)W@j)b*%O1b_alNE zYsrlLG-*z+$KMe;_p!%6_e(((O2;@Tu)v6svvEoaWdr{P%aYRn8!W5k|1Yp?94d@* zO6C9Ua*n&b`k!46EieK9<#PP_`NSWq*Z{_yQS(PM#h7#c)0m5HXe=kjfcfD+?0ypr zHpy5RaOQ6N&5VB%W;9D;qeQSqFL1$jkVF9vTA(a{wMhaQ;R-mC?_jBqt2SaUCu$vm zUS((l`}HGeo9*Ho3_EilbX0@%(sE*xtP+y2R&~c>D;|PUK_L=_IIaR^>Z@ym8Ehp- zJf%uCd`^{H;)G%nS@4Mv{;a(rI{|1&FGNwV@9z4TSr8X`?@VEHIK_GRykt=lo8=K5 z(_xFudoQ+95k__Db!1k6r>r^Zrrb4qSor6am5->-6>tQ_hK&y2-Nt|$pNjVv8ZB~6 z-u1j?*0E4OK<(ojMFLee{4y+tQ1uG>VVmM$F-UPscN?a^dE=tg|_5 z^A!qGfPD=1pt!Vr5*5hYFqBYs#zI58-6KJX-RB3(*>@-Zce=zVJZo{0!M#3Gb7@ga zn+gU=v5T0glTt#$eI4aMJ=*6V;V4H<(Q`T(YvF$xaLXA7K#VyU_mSu`a2ZD;8^Ja0 zF9#kkDJCvzkOU~PE?4s>`eh4m|)CakwAk3CKfuQU?^Q4H27)vOxC;OF1(ll|l&TN7nad*@sQQpPaBUqqJuld&LtXS=`1;Sv@pl+U0G;0v zqkLm>1kleuB>=pXw}qO>Fs%s91rkTtqH{KUB0)?lI1MM^y<#J0LEDu~MGZ6;kY*Kup|__sL*?$ zEcj<#B^Ni)UH-YMe#H_12T)N2d}sHQs98JLg&&~Hv8Z>w&LC11x6MFV*ea{*s=<&s zzCxNltfC^9n7V0+6A$x|CI^9JT++Fo0pCuXiUnNBws?(vt_pr&p^MzGe$CcY-y%G> z=0Jlh61qy*vGA7;Gs^}s$3Lc^!v;(9SB17F^JgLPuS!53>oh!fYgkusne1HB5n2)z zcLPRi^BY`w6t{QcUtNif9qx0r7Lp#yMDG=0g<&T0ejE@057|M4(d5ZB+Hxz7Fc!Fw zD5dqh`9PVOnHYKkPS+J?R;DWRl$3yMgVGpWG=5dE0Q93v)IiPrM&m6agIeB)mjhNH zSIa}~LgTcHM0K5HS<-q_rI3TdnVDf*9>Ozm(-OyG*liPGoYPV6pPr;C@u-zL5I^Cq zgw$8n+mTy|@A0pqJ%@rJ;W(bYYe(mj07nJ^hDV1-%h;AmFx@ zMiK6n!ag=7QPr@{6O)RZit3Sjbevh$YCxxfN#L0&{AChY)DXmEaMl~-bb2kv3UD{~ z3!09|i(<02>_VK5q=>Ure|}Mg0*5CjL0y|=?6kCyZDlw}MxE2VBfhw@%Og^3pX7c#)8Dp*z6r{W5L zz#ialapcE7(3b70Pt!uz@^aA3;C_QeMtb0H?*U5ih$kHOR36IOJ0U& z@u$)GQjoT_G+C^t4e;FDd#d zkTo8kP>Nzc-Ht(5ow(l8 zc0%eaGxVL7mLo?tSSS)rab#Yf2Wp#?*l+!Czj7Qhrz=SHES`Te8L>$w0v^NYf~*S*oZ!i?g;m$04udS>*0XQ3b8YGS|-+27qt zYXRE)J{YQ}ozm?DNLHCqKnN1h;L-vSMvx8@x8|7{c+UjS^ml%O#Wb+l2De4Qy8>nD zWvxu%BG_2}qC}NCb*6dksRM8Z#cH=uZj^Hu8%Iy9e}D4su~+I^bF$!J-jj$Mflk$a zyMAmZK?T^yMa@&qT$L|2jWk`i?GZ+82rA%koC6TOS>iH(ut@1w@ z()X!df+zqFU2CtbZ?+va_A#~(&3{a#=yX=pA|iCc+0sFr|9f(1HFTQj5a>cY#)2X5 z@HeX5aaC4|e!?Yxy_xD-TdXjtS&1-CrkF$xKq|L2_Lpp=qgE?yo@@`Js4M8D({hSzFv10ha?74KR1i z&(P!iT0&f^Fg+c2&fX-7WD6c?XuS)&bB&>D$P=AX7f)ElJ<2*ezc53`j`K=Oi1fHG zFs(UnOqwC!GQpo&POq^?plStw#7*6Ut21yztWDCZ?9=kqrPWh4`HofY@C6tzXk+Bd zX9#6z<9p}Co78)w6T4l@hrDdwFTb^Xu^O5{8D(R_2GUxi^F#5zTlgQACg~3>WSAbr z2616n%ZpqiXGaTX(WCO^{t=RyQoa#zs5e7})oNls@Vk}EUaKh(c5bJ)WaW&9)h7*HCf=3AWMWj~af2RvEReA# zMVXv#KIJi=>P&ma_PHr!@QH@}rpO!DR(e}&5)SL2BcQM7#9Q^^;vCzo#awz$;Muc#C1@Y74h^`SS04k*0*(i2kpuuw+7QYhdP8(aNz0wS5!p)%pyts+dUYG$ zivhCs=p1f7>nw2RTpfTtf2hAyU|am9;px(-^6vF{Qr}>1p=T7yV?bAG9m zsPTJzr&5EI;(t*){(x>t%ERu*j`y`$5e}m$%K%H)*=q&}sMhQ9^E#3l{br~er4F9Q z3I5=v437BnvbshK@hv>Wc)myIa9?GP5RkNquEk8mF0uVj%^XF zHePFSccdHj_4NOabKCNs99shxXBPoLzUFNG%}b+;l+|@jOkialp+)JiXv`jZbZKFx zzdO}eq!;V-x{x!b#&@hqs|xPTCJp_+q)B54dmCwN#$?qZ=S|wq=cj#hj7fn?6BUst zywC{5#yI-^D93u`awtc_qT%Xr1!D@9y{4$pu=zV3e5`O*A0v%gv2)t;{@k|)u}iT} zS7MaR(Yh~T=TJ*bEBC>emi5tAlPz;G^*g96`VV?npP;mH)T{9|O~qE6lx&WHc^|+f z@w|$U%EiA|CzXG$t_R1fU_GsiYE{2h*IQW*O*OAePOUVV(QnuovQcvJ>0rtb(TVjJbQ&*@`ON-}je9%0 zguiKN@4<_k7_)k83MW43)V~--k3}ZOo1`XS7xC?V#GOxL_J% z9$5`~@;yS=Ui#Ezda;?Nn&CE6M}=vkw=rbJ-&?QPOx;X8eB1qtanCR*x36VY>Mb1r zvykH^^Msl?lTh(bo+cbF<>CXLY0e<2QfKWSWKf!~mh0Spg*+-b_N!pE1s_wBEQRb< z|7L-)rd>J`V@}Ok;>}AQO{Mr9R#)iT-JBKB<;0<>Gno#X=4pIQaDa)x#by=X!SIoS zSq$dxulMLYui$Huv8nLKiRDe}m3O7i7&f%v%>@#ygnK#%<*l+PGurhTSbXjOb%9n#_15gZngxWP_cRyAj^B8YS zI#WuyHOSqpxfx&}Tl8!M(@wx&@~2YBp87Q&B&GAjU7ouvC5q|McU_pCr!LYa40cD+ z(xl1wH6QPMndLVh{@KxClDH7y`akNB+*KaCID^)-f z+W_%;cnuIyK)kA+NPZ}!Q0j39Gdm~!xJPBnE~!35dDQt2$d7dF+=wAQr8Ppz=JMOM zzw~cS4o-=KtNe_0#8#fi0inXVPedHF4G^mFbXcr*<6hPAX zxbld9qSXGrT3{ z1XpbIa1KLrultv2*D|SV5K4gTRJk=ZZ-Cx*$ZtK(sMT9gQ2LRI0hsXy1+aQevXTEQ zV9f>4PqejVM&$jbXzs^5TVjnS_pO_Z&7{TIw-EqlZ?=J5C*F}@Pk#lH#+uX~s`n0N zEcQ=XeKxzCak6Z79%q*KHnkRT{lUO5*srJq*c;*?@lunB z4Py8=sn%PBQAm}=Dp#{1htR#mn0k};4yCq2XNd1;DOdjh{zT}Xpr^*B~Fi*+M!)vF?fD;1DEit{|B#6RN8dIT`% z9Cs~aH_OOb!IdU$@lywZPhaxb7+w(nT2Y0cxq3y?@{f6W26MUFasbE*DqQ9_D|KfE zpa3oPHzTdMOw&O;_grOwXof6r>LIv%*!&)pD9bigA5@(G2TtFAi$T@eEICum=bI0M zXnuP$7?3rmDK4!Lybdh#KXBHTvF_4f{kGH==VOvs@MPk zt)~1?Atid3x23e)N@hQwUNZxp{R{X2FyI6JM61Woud@Gv*2*KaMuAKFWZl>w-askc z#sW-~TJTB(C+1HA=+*E)>GfB0_iuU~NwW9x>gh zNqu+Hn-?lw5xeoQfN%*^kV;cdnYadrMm(||s0$QrP10-p(i7x88O2_X{f|l`$0)Eb`C%^xuUSR zu6~heMqbNV&VoT9Tk1;Sz6IxZMA(6KQ})k>!*YN2OoepkZNF@*KUqHa=~dKIz>{!i z=uF}2mCS&zcQf*7uv8|` z2T9{6wMf>l6t}xA@jM!Crf&dXEmqV9TO{KFkD@ZnXZ?(_f*3Xy&~Q?LA_+4|$= zC~+2WR{R-#AkVS2o652K+)quDOeHam>hXFZ?CnWls0FLN(d)OOQ2*BRO5SGKz}Y-X zGM7q>X33zislYGQ!cSAVUQVCr*nh2L?c_N=2EzAKm#I&*g54#&3P>IYp%$if&Dx4L z`Bsl=Dfqojm!n+2t^ZsNm5kYpOmH){qZw|O2L=@t9aCTo;fUxZ8q9dmv7HAGk97aqFFjp>dU zjHF+^Y=u=4KVR2)7l!eq&bnxutlp5r*Gxm%f8(6KiPYcw2UNUiu%HTY>Prc}JH@-RVd-@7;gzg#LGV^9z} zOLu!b&-ek19m>V@GB@`$CL%G_&_ty6b(Ynxc%9xYpc8?2Oe8!`2_^sN6Yx1nr0ikw zhk{vQ$so*3J^!hCkHU3`Cu3BIl!;XHd#e%1d3GgMjL`Js)wG46ad?4I4IX{-LhBM>+by8Jl)p|>Ps>V>P^drIIGW^j? z)OF_rANQbNp?rYP`<{e`T2`44h!s~`CA$_DS7Lm6%5lj2kjkdE8gW={w2u>vJ#PD z1vCzduc8)&`HD)vna&npLM9(_x$D+<7spz9rl?k$;{6rx752^RNI82Z_Cb|M9+~#D z#RVn%#mjtZrB|V?*5qClQoM*L5$am6cuIJdyt=~4M`4%vJ$U{zNgI)!7lWWhc9V|Nkmwrl2A!(5})(9-Z+=QYfp!Rb+_ zcgg`RrTFEx8e8_p^9^ZnNIzSLi#I9(`Gwr)oA|r|k3vG4syqg1cIn|7U5lHNt^8oH z-3w<8=zYGxh2jjHq$wp@n7w&8`&pQ1XVj*!wcN`4B>uJHO}hQ$XAW1-pP_iG=R#BV z?v%5Qqlr3RzxyPF8c)3Wj)knLa5!?O`o+x7s!|Y)Tnx>r{IA9S7;Hy!`6X=AI#SQF z_8P`NlUd!E^>(J;e={y3^rq=LzwJY#Q@?3cpkAdawWmW@Lvl}eippE)bI@u7OxV<- zyH)1(MszAgIXM3s$f^OAnDuO3`Z6nwYF6ou7}DfcOd2E%wWHtF;3R{TXTGSKXGFCs zVHt-p8!gd_Uww=7(|vzdz5t0y4 z!!mI?llP$E%hE~GfG%a@MEstlEVq*GIt#jp9dw+ zEOq~>7kz=koAmpo@VL;K`i9N2w!FgQ+t?pHf)*U2beD9UzdVekx^hja5gd*n9l^4c ziY9c%78mK?OdK4)X)-U++8w(U&u@KtKJ9;C$=UC)0)^(e7CJtgtb4}$aRZP%3fMm# zrWLFhCFjc0PJL*(&QXbN&yKY;TtahE%Y#zDC!;Ii^naItQde(R{z3YrhBhtQrz)4+tMoG#u!|-Ve`z#LNe)F z2&+D^)|DP3MSrU5vvx4HZds>I$3pVYmZiDO4PKG)5yYxGba-dKAfmNBg-$E}_u>9Y zkloyFTeHTBS)`cdPLufx3JCEIZQ!gSE}7&j_2WHs_6pqJla8#LwK8Dn_Szg)cGuZI z3RiEZVp9*DDp%H>p;3L0U@JEtc6}Xp!q7kb)AS8Vt+6{|x%)XDn@w?AfsZYfMVB+m zE2lzvNt4F6!&6y&%3XKpNpH=Iu7vM0|34PBNY<&LL{FaR6x3Cy+4NQOW_2xbJOLMyMKaC0YrpT6CXpMO^cDYgrDx>YRC%XmGAt zv8mt9PDnp}I5(Cgr<;Cp%x2yFP2c33dxs2@v;iqYN_4~4iUlD@BkJ^5-3A79HnTsI zdNT~VLc6be#U$&ki_V!yGNh$7|4ekdvVIhqn}~n;?C%+Tb98ig|F-1vw(+9A8^^^) zRv@r2)X*8qEEawJT%y29}`i4#8zL+(mi_z zRh4-SN1VmIu8F=9%Wet!z*gv}VXX>e(hVj?MwclX7K-<74=^Hh-e9(I72!#pTX(>% zzQ~{>g(_?+^X?bxvDA!err^3rey+Pt$efGxp0)WVJU6=jx4ooQySaPwq%#lQr-5&X zrat6EyZ+Lfp`Wy~ZHtL?ftU7K9;TuLEgX@SQHgYkqaf1ZD;t_tjpmqEhxKojrIWP& ziv?7FG+sud=XxjCa`uQIruUK<8SIG>W2?#{I@dghyo!tkEb2P1ZcTYy=Y|f(^jQ(! z&yV1AOj;DNHHW%c-s+Bb5%Cyu&{+2Bl=H)^4Syh4uBt=tjbsyVJV@Q#L2?@nPvI)gC7Q-47)H?aK|#o zg3Yq=aC7v6EGM}p>h4}5LBEpp{55Rlt_xfTCk3SsqhfjDW_IK@~#K)9JC6y1Z;BXMDOJ>$Wu1PLdxP>JYR&567R*E8b>L z@QaTxo6zMWDPqsZaHe{az-TCUx2#dS9`0IkWp6RSrtDosI+`Dg>g1((IH0D$`1=O4 zXr@Q-_7L`cS8+{R4-rso^!D<>A+3vMCC7(wozSMPyGqUD%66`PCjx1G^5`$tdVBa^ zIAK0u_i*$ne;cB1n2H8k;A$9uN#8OEJhLhrE~i(`?7kQ>U``QV9J;{@`TO@;b zYUX3~=NV2cv?Y#WB_VWKuzeV_c-&1g;@y;@HK55_2r+Lj{rZ|Zk4K0sm+r6_GyIgt z3_8xpg)(V;qqZPsUf!4VKmjlqZvwlmhr_J9tnsEh$wk(o!&OK6Z1I=)tLby7>hnX^ zoY0&A@E(O*SY9t-BAGFtVWr+Ew(**ev&0tYV+RGk1?XV$(nx(1+og?Sg&bU!)4%Ex~ny3BW@lNDZG3F1F2lOThBd=?oU_UK+FFTCF z@`A=);#8&J-cP{W5w8eNRnkHdH{NZc_%xuD1x+N>v*cQ)gL_S;Jjcs1`fB9K4$ADV zL~hc&Wkr!Kkz-{y7vI2yL@GSt9iB(b)|QdhN2=u>#`mbD`SVACgZmgQ(BU4R9!T4b zIuUTI&CM!!y0varP8~68dcMT{W}5sJm+q`8fGw8&2pA+US<2bT=ZCxu#sf*zb`!4$ zdnxI4QXz?~BWxrpLJE#JB3!5uP6PVGoVZUqNeR?2s27RnFbRVf^R`bSO<%&OzZxuH zXYxpIHP@)%22A-Q2< z$etE9|1<_;bPKf_y1JzH-|KD)bu`+3=N;b6<*oG(F%IH-IL}6{`q(T4jBP~yKrxYc zfPSFI;oB4YiTDf`XLPH1w!C>1s$Ka#5R-N_Ww-JqOP^*+9ygHw-sV9U-hO0qQwKg$ zdIZKq`U>ZXrZB7|4Mu_%T9y=U67zkfO;E^=_`{TZN6*ERUJtCC-{im@T)0#=XCWTT zeIrf$e$^^DZuaLPnKmmRlu74ln>TJ%KbjdgVlIOWqiuZ&Mo2$c|L2H5N7(N~fe}lXR69*iY8QqVSG) zi*$E5_YDW+u0pj}PJ!rIR`FYAK5&s`$i;V@M!{=S4wWv~V@OqGm6>o3DDEoWnm&;d!sKa5o-Fm^W(NhDA;k0-fzV{PD1) zq~5Urax0jrM|U?o6wYUVVniw@S19@G?y)q#m|rIJ3}8OAflrBva0ZD)QFYz}cS%bhcCX zUcjmXL})Ys8MXOvr*YiIq9Ua@O_)idcaN%=oJ@w3mE76aJ;3eQJU7Oz9roem?^y1P z13GS&6Cyo63Px|Ho)WF_1Wa94t0QIB*H=|DlVIQHg}T75p9qyS0KpcFwyob;`GZsx z)d05V+1{paG7j9Uw!^S}h}Y1XsRz)B4%S``;aQgDvs!W!#Z2J7Po<8wuq9+74%fg# zm}v+zfBggoJp`E;k<#Lc zpN@?#O`g&s!Ar3jLAf@k85IVNi6faG3}Qv*QIYx9fj`8Wf+mkrNqkEw)?%8A(L7O6fd%(o8{(KJOxZb5zuV|EH-{S7{X3|TbBCj?JP zCQJhOG$Q(BOa11W};8T;murrPRaqc%yLDp|C5k z@Ey;E*Yk3>;Wk68;;VWR3+dA6>`<3@{u#q=5nt#wg|rLBe-kH{xUn znScXAr7dwV!DY=MNQ(d;7%bG{6Ije+UJPZdW(11j!jEz9CXp z5>6gr(TqO?sk0AL2^rNuLgVu)s$a<5YH}$z!g7=B8`ix0vU-?Ga&X9m-4W?4H!!bLC7p6?ca4DgTKL!L# z8gGEF9AU0T$R{)!j_Fbc5*0H}-7?J(nPWiNJ`_)v5M9l^Fl47FoJ@+E8-Q0^G*m4U z`6e%&&|Gl{En$PDq{+Y{C96b2a>0kyZWdXI5~}|6EkbFL1b+!h>`Fl`B8#{Im9jk| zSUIKxoB%{47QjLcP_-~ooOdfX&Adv-3f;j`nC2fBC=e=*N{UWqwjdCg8;VBtttNB- z)p<^WGaSDIOKBjk7!S*eI(gV{X)!bcE{V|Gft67-cX#kX)`h>1B8KVA1wlQXu7|GS5v@4cpmh+>bf&0kjQkoa_eHENMp%!?1f#8z zu14$!nwN!_k8;+Gilg3WriX-HQl+0zQALKnl$=4iq*u;`b!d;*sqnM!?zbqUNd)cq z=rj-wzF@(pVU5}}A2yST(7{A-mYv-QBqOc*FHDvf0qLSJBiYD(yv8w}?PM%x=Aq8+ zzKz2rqBBht7O>}3B~Hr6h`9Lx(K>!QK^PfYB$~`>U+h=q=44zebJXt&BPeJLVgTId zNDKW=Rd8GdsZ@?6&?qW^=(xd{H6&)rQ4cMu0iZC*Stew`1FOa8o*t%aQ|};?N9Uq0 z?D>?3vswi$?**f~_zSqL=WVei@_ls2D9Cg|+zmU8k5hS9-=pluEvWc&t`6Qe;CY*xV?tagpkv2vWZm1YX=X4Bp@_HOui z(oSS`VZS4IxWYfQVqZwkr-gJP=E0!*jp`Hk4fBaaEhiUGc^ypextk>q#YQk!GrJzo zVN)(fELO{>CkiQ+^0~N&ZzbhLO8d?e9Yz~mi0#=1Z=%^fyBbs4+pyb7K#lAotkad}4co)lEZ?mj~EJ<D~xKJvM(OCTgzNxj5lH1#}0WKrKjeB{ld*8}Y+6XDUS?Svy09YB8v+QtHFV-U00X zhegs=9N!@@x=%G3=kZ9fwPiA=zv4b3Sq6{I4*>3Yxuh z7|o25WOOX{Mz85OWUV0ud>;F}*e~3wd!&z~$tZCkRNh|3Z~}X=;q%fiH$j{;aq_}0 zPF>iq16U0xuOFPtMcdtRo?(5oD0WOPlZ)?V&ybDkWd_dN1u`A0vG`W4+ zELmlpP((Qjtg#DAdK`%qxP~k7%MM4knwl-q!boF|(5sJtI9zfigiA%`$nE+rF>gY^8`aM2`Uu=4GljIh^MyjLSAHQHK@ZU83yP3`0T=Ilxb>z z^s1W2^Z7JL{6^+=$FB1w?4*y7arl{psDOfJNckTuJ3BED7#^GtM*3Vb=M>fl71Na9 zR-B*nLkkFXox-P0%pW!#()TBArQS+2<1OTG+K=QY;Dg{~{ArhC$WuQXLN4G-q+VjZKL)no3c?QFWc| z)lO8bLXBCu*-tqU#Uz+ry5M?%@hAMnf&1fJXKuYZ8;vw2w!Bew;36D%;JUAkmjaFD z7B=#ng;f}f38VmZl#Z=;sKTrFb1RJiCX&yl7&o6FN%Tl&IlMC}@Dv&I>o|N=<^8Mb z;Fq2+J>6gaJS=7Wbb>35Y}~`^Pe6FUwj%URCc}k@6yF4RJv!Xb1a|u&IHS*yEv{eW zOpJ!Bx{K=XZZV)aM$~Yd6Vz|-MEE8!lBQ^7x14R}xMYv}_*>YMdDQ~{$YF}0oMNdX z!nnoK!Eq3c5ffJiITGJ>BUFN&L@{adqb0Nb&TBfKwgF_?6FmEz%rT@^Uq!VEPq4_< zQQfWIV1v5D*O2~%Zve-@aQp$Qn@OY@7Tg09IM}YvcSU}al<#G&8vCk@Ob(#-F?5vj zz8PEL*EscdCQ$|q!(BxR(1*pHYRBkdlS~SA#G%VXAWdAa%Z-U(AroX7#x-4}1*Ua) zfB4DR?S_uKIz=jmPaTfxQdlNTGY;063c`{eiTYiMMT5&LjI+=iRWG!^XKNP-aCw~F z^B=wU3ZZX@5LqZ%xyL0iLFu(w<%*WbcQCWFq^hB~o) zmk?Z0T+&fjVKDK!XIsBs^l-xJbggzMZ9ozD79(C*CNSyJ2xVl^>wNekO8G$jOPu>h zxCvF&#g7D%8^@D$iurL#!rYe{1&PCw(ym_>!j`sd?sE8&AS#|3Iw4P+wc{^ zbzx=G-R$Dv*xajQcjQt_ZgFKJdlhF3SxiSRvwm1EKg?-{4xN%%DGQ@;6*9M_kg@KC z6N|XMo$K0>f-nsV_3EC?iCdS|o&9!C$O)aqF{nB3hopah334PAAILA!9#I;T?^61f zUvN3;*T~HnydC6z)~M&KHbh%;eVDaVL}9mqGFr-7A!>oj1rO#UWem5U1OE$iw=q+_kp=2EcYoqN0LMB6<@T>cVg~P| zgC3d;)TapI+(rvsro`IY-zN;eKmC()(=seW$!-ys-$wv1gPQGhO{jJ(>BfmZApq=H z^{ynmT0IVXgz-8?M^a5|vnD%F@K7MJuZ$S$Gc@7}T$ajZI`JW)1mBhTNpaR|FLeVb zuUML^yNK!29afkoQ>sG*;y zP(gj-=vD8ZW{^&Ul*d0tB#s~Vw?rqAWaVy?+x*zUN}J}pjmz(5XD!@4e_Pvq{w|)5 z*v%e6)u)Y(tgX!*r@$qc9NmccuzC%8|&&G z#Vdl8b*MnUFQjl+md$;)Ltn7bs{MR3ScrYqMy_5FYIkgkta=0@Xbr`Zw%yL~oF95^ z5T;x~3Lh)4)BZ72_q?MUD~Mh_Fp73tn3Bi>ylsey|RDu=IXV*r%1*J-jth45;Sr?_jA z9I!~Y5|(eFa3w{bV2vegy-zFTAp`K1*6iMa9#=etvFdVu8&)VMoi-&dBNCHEc%0W| zZY$_!h6qj+7E770zN4-M!!IjBt6{Cb z7Du0N*X#+zl80XQP8#V)*!Tb>Og1KUIe@re84(%l0dnbaNbC#;-tfQU7% z*EiFh;Go~(lw#jCqlbcu*JQRhWl0n>uLX{JYmu6Qxm9@aje|T7;rw?Say^Bj=k=%C zka~ZZQZ97&_~kkNH6XEgEyngsGZ7@sSO^=Zhx%pczbtdYR?UmX@Du+SQU#;Sq-0jYg+JG8{{=e0*?_kES$6k@yFAfV0U zK8c7=l;_p6X?!KLOgAg;sv25dYr+zJ^6BC6|Z&jJgrL$3$^0QX`FLjWe<8{kL zk_}f9GY;W!Qx;Kjq1*E^HhCuJ^6K46{48RE+sbRZOTE2NgGeb}}ob z`tC!DzHrP7Z>Mv1U&e^y6&hS*+K6?rNgIkUvGrY;ysDn3L@+Ah{G}yGN9LfF%2`6= zo6G1@qAeucx_km9<^`<|yL&wMG)M^Egr7onvJFB+-UmNkrK`5t;r!!-Y?Flc3gNa- zBG#2Lh^)8hg5NlHn7$;(9;?a=L{M3KbwA50+Nv?-)o(B6^mtVmi=%tO?`}^)Qtg8j zgTe()^1`A}oW5sSNZHh8s@81pxYYx+T)n&O?hjV`2lz9E~F7L zW}s!v463>fE^WYb5S|l9W&=tfV(%gJN0a(}zOzpHQ0`T&1Gi~k60?>DZ|_>P-ARO& ze7u5nw~(dnIBFk*3+aG2Gb4++wV!Eoy0*pIeox5*0+`~Mjb|f6{7`K+ahOP@rJ}_} zKw+xVxM*Xf3-X`Etr5SX(YBpx|Hy6lnRj95+kO|~uzxd9^(@2;!F@zm?i2qUZrto` zyvj#|oaQuZop3x~0r_4f2$s25XbWeD@JZ7)8?|UG(p!EHi>7gU+q*!yn^?FH(*X{| z>>I6)xS%1UZ@-LdTIp8SumT%w*PrJ_<;428z;S6`beVs|`h!*wm1cc6K6%e*;IBMb zLMx3r2sIbG-{L^tvdc{jZr%qGt>Eo6b5Vy>Qg`QS&BZQQPTdC9-u^LG(U=7U{8PrK98KjT<6vH+lpgEcZM9^ zoFSZ6?Yxm~n-L0TPx3hP8`EF9X5om2ZkO93s&S(`#O|+8mbVY^Kg>Sh9;_I(b=xYnEz#MnGqftkFDk)|4Z{>fVDaav{B^exUh_RW>sHVHJ9IH zS(}Qvh7}Xjn*o%WmXvskK_S5sT953~IP4jmD}SQ2q!y)AzQxt7=#!9ehS9qfW#=0t z!*G6E5Oa~c7%;~n5x07S3~QsZ{40 zgK7p53WL1UVg}4Pi;+k7T>HHHS_A9M*wi-dTSUVZcl|oEzUb=O8G3RNOMNI`TxkQr z0QzE52euiL-K;6`CM(C1=bF6{D5+Ca;FYK&=j4eq3sn-WL}1YQs%sB92?4 z$V=Uvkp};Q+96benL#AGv+U?%mPfgszaF6M2*Y;0DvYM-2Fed7&U8jr5$MvBWnVE! z&_8y1N0O0z=gy6!sB-XIFrc8<&x1RqyL40^?%r5kaQyg1#K>5_^iV8lEtblPm_ECo zgC%bRx3ndxea5>sjnOqZ-S9x*GQ|DQ^2K_y^a-+gGKjN6MS=5=bie`<7|f0Q`Vs+} zL+x`hwbl>kpx13sOmn%ez*lo%dH^xb%o53!rj&51%DasZUcbm{z8C@Ov|Q43R;`U< zGd8ezNtAxi>G`8%%cY?!TI(~-(`NSr#9VvA?xlV`V4y1Ng5SR3or-F;6n)ndWrV$C zskn{_&pfmLbv8rx)rf%6nR(3@u*1i<4I*MlqRei#n(?0P9v0w;Xj=wcD*L3eWBbL} z?nEhA8b- zbICws>TbcmL+>L2Y5fq)0SY8SrQjyLN<4nqQlUVl{X9I#${IE|&g$_j`dW!Y2|E{& zooqlGp?CSg12NtJ0AIRMP1ok0Au955x2gas_L1_wO0w*_04|j*xRtQ8_(Q9NK@a-g zR8Y&hP(qujTPo{dhtVIbS@^<(AKpI)Xw55@G(pS*b7yk2*=74y1&MK8G1cqF|H6fS zx)5;8Ogw=i+HHw>*#7--)#9J!kz2V@$2f#e4_!h%t!?&a z{+b3;z^Px;K(wsM&Lx@+t?c_fXSZd$@?Q)+e&i91D=d1L{oCBX4)gg*o;`V+ccIS5 zoRRa$swp9WYe?y7P_}TYFn55V%B|9|qFzX|J`(8s>bigWXFn?WSTsS$El~26YV^5_ zRawGgo5O+e=WP31aOoPkG~tA6U^Z^TP#5Fa&(LT&_^v#DWrfSibyC!SS@TwNUPo6U zHCY!*Ms+p*39#xzq^PWxxo?~1mrM1t_U^bgY#nT~oRanU zq&uZjNv;GW@OLj}E=mUqB^zO+nKI()b-i9flFsfcKZ9RVP!Pa5XGg9dPVRmA?e(*g zzS#nU^vkI1h?7_LB4JHUiRf{G`}`0C+|pRrU2ZdR4;!)ik^89J0aIHFgAQ5^mQ;R7K^7hEE??jOib?h>G87 zM6FotmihQ4D~@ciWmC-q=TLalaeoR&aX955xb-ZlTF5FWsoFD!Sb-dMBtXqB?zLEK zbuCg_`)~PtqGAN}jZwG|xuvk%_aH)CGeM;`s@2;KM6n)c+vB<)CvClKZRFR%4%f{3 z01L;+%kBZ`wi#pd7SwbHcW}X2X*047690l4YKlH1W>z0_W&0vdQi?Ow3`2kuf?3o{ zq^uD*suQoKXz_*1k^@_~{YAP@9C55;RZe5!aDMB_4F7>*4)@m?uFmIkJhsK83nULb za^(`#;O^t*QAw%mh3oa^Gb3=s^@ZhC%8tOM*m*-V-Mg(4nuk{5&of{`Q8(Tja7Z}@ z@gZy_wAof0wK8H&^s+Eivf{2pvOx|tWx3m(pY9TQ9>H<8GW8r20@wJnxbN#*x~T(@ z(Hc!~p=L{$D3eSOEjr8J3_Fw5apH#orGU61!jZUioGD&kShpQb)AWf`FuouuN5F-~ z#3`ox#!FqFo1mq%k4B2+i(VY(XO+|Vu%~!sAD8w))%vg}2lQhe6-jViQWP3x?I1FH zqi)~LmKfp*x$sLbBj2?@kLPR_T~=geFImpz*zJGi6-5i;qan(>>8+H<5@Yt{O-E=3 z9E8UVB(IKgA&fJ`5`PWLhRB|%jm?*?V3f%{Ld1!Yl}ck)6`N+f&ov`l4Y74c6OaSE zd^bhFd~0j*hW(-K?>TYbb8;k0illb$%YdJD=v(e$`C>`3r_s)6{-T8U?57wBJSVE0 z%CUT=kO#F$A0V?g_(`O7vhTZr_Dr+8P~BSg({-*HvYcrwd$4Qxt+}V~VRz_^Xnl3& zD0=J!wz2HbAbz_32ec1Dd1L8G&}$k!%j~GeMcUZ`kz+gh5mXE_5>22WOj3|wB8gC? z742f=KI~R-+6o-KDR}uhOx@V7UK+7*kPq=qf77UP>NnQ_q}PhM=Ep%~CBM z?5+tJ7=rj?83gs6D6j-Og^$yHrJ#J$7mtts<-@P3{rlX zh%rE>C8xKM|KX@rkj0+IVL&;bdd$mE(juv~_gr1k*QhEJ;GCA~DV<8;h45Pft0mnq5c?r#nNoO| zX<)yBZq1TiGMl^u-cyWvV$K`Y^qykuqBU=y@Y?9SiBy#yImw_Aq>^ZcZ{Z%({c(5- z_+Es3zOAA_z+8;kHyt&g=J&9?J)XU$G8~Mv9K)>Cz@5^|k4?i9Y_XwvZ0+OHakjWW zv#Lfso!f^!&DX5ct9rkqc&(>^H{$!8AA3ZAeX=y{D9-!^9uA!+rpfq4%nZ6aX#5gg z9i`W=-%ou11GcT44F}SC5v^$I_Y_|`DQP}W_96Igj!7A>H-1^oblT(V(f!an{6Mq4 zeJW%+VZVo|77wi+*w@{uI_FmdrbL;#zrB}Z^X0egx zqnbBv>hdAUB`px#x~akXc7_TSg)(oq${XeuY$xMja3vgSw#uZL7c-5RHeeUhvc$@6 z9jDV7=Vw)Pu6h)*@y2)$Zv-65r?2Pf00bC$OI5N6;qLW#UGb{aNT~&6@>(=f*sfe0 zWK-Hc`41R!ytmsnFuPAbOZ(%VN&ZZ@p6&%LUXa>ADj)bi>U1jXxEiJNb~r+17cn%M za9g2?UB6&`U-a9%jNR39WJqLFU&cZ4=Q$hJY1P+gZ8`?sv4jq`qoe z7Y`F!Vzv3{MmeMxh{k@_AkApwzh$H=(RVuPX=lyV(>#9en)kRdU&XpWa{K)Y^Ge=P zIc&q0^Za{7AWi}b?kT!524V#zdVuXBJ%&CrV>_8yy&Qhtm7O_@BLm1W)pFtnfW#kY zpY}3fsinR86K`0&#cVE%RQ7wUmobmOHE8-N&+r*=NnjP&Xze3A9GnwLaBPMeZQho>Z@CC5t%Cod=CX z3MXA$CcYH+nqK9;m&f$r;nY#BwHz-$FdFtby)sUhUlpb6w-Cn2%lG$3T><^M8G;Ki zzkQ0YyzrG%DFZOs#KL8LFSCkpY$N!g3O?3}$(+G^_^z5*3e>eOLfw9BXo zGeqS#+6jC*!cnvsU|G(tC_Ok&50YBu+gyr$A;Q(o=qa~mJV)!b)3j(U^$mS#Asj)k zF!UrU161=bss9fe_a3?(iiZMpYZL{E=zqhPgoOxOzQvB7jX(!jw7dD5v;Z2YFH!79w#yqOA9 zOO+wQF@5XWoR|E2?MAFcWL*Dn<^B&CB{8ucyq1YBayMQOH|e9Lcgwsu62uk%G!pkL z%S^BW2B>mYTWH^5aSckz0iv1e|0-LUTyuLZT=(e^b1+?}gGRM;I7>^grbI)8$SIHk zHvto(eCD!oh2Er&U(s~m%(BF<1QDyOFzC6ETsVpvT{0_aESW+qZ-GEha6sEpr)ADu zXW`r5jO`RCH8M`fRjYq1X5YmtRfsbUnO3~F2#0#Sod*^8w*@rBYE#Ir{`Pu!DL}W% z$={W-QH$?sBoTNo1h`&yYvWZGg_pRUJyzuhDZi{Obm)-1INJUHoVdY*ZmGZP)K=w*sNc2)=kk&EmoUu)yg;0_u39`x`+}eL z%Y@9c%aedS(VP1XeH4F0LbtCiQ_m2+w%PYJ3tkTYM~Y_>ntlbC)Xzh9cy3E0?HXCx z=sYw7hH=8F9)S@t+fk_0D^)D50ckR$uh$D|@Z+>@p3=O$LVuqq!r5T-0@nmxznF)O z`zB5NA(BnI7z|Vx?2|v7dJo-^pbLiy@w3~_U4L4SMvi7m%;#Xw`LZVZaWt=iFR%3n zVOy%+(Qsv`U*)$1FkRk3(&3aQ*khWY?+>U$-%WjoPrwVw9&y<)K0xrSSpAHT@}t_F z3D^XoQSFw&8d^d5KcKUo)#LsDfzGd+nVZqdDxSh-?@-FFsm<)S!P-H;T~G8=DAa*A zcI&r*JwJYnv(I|mxd9L3UTRN+LUbp8G4n5%mWp}N)q|0i{p(b@uC351nRp9jd0%=E zNs4O?9D0iLf+?6k`iX0X5O+LM=_>*u0J;^14i9u#n<0@O z$dAyEVubjYH_m>Qubg5>CF>_kRwWmL+t`HWY+(v~SU@uy;i1fU_O29g zgGjZe)k%j*k$ccoZTm3%R{~=BIFcNV%-X$ z07;&XB3!?WSxelM5h0i$x%*hY1kC|`Gs3tj*I{aO zu4x{nRGT&_LFfePo|RFAl*1>os}`5_tp0N4qh0ZAOsxGY=x$#C-PAdaC}du!-T}2E zpdYYU1VF{&VN9C~jd4Z-5wG1h!SGlR7}O^EPqexrtPxdR{@cmSuVHB(;Bk{jfb?IB zDtmmS*}_(@h=uQxfG+JQu{-TYp*sz@^KmK~kuP<|!lDp@B_Umg@ zlVvwSZYY?kaBP>7p9b=a8+dt0;j5s0j5n0)F?l6rVdb{n#DT}MM6I#G0a`~Te>|G@ zp~QrrM(Hqc03NOS;n5|v*Cewt$mu>|UaF)MKH-(f@c`)yVlFTzjih{C5Bj1FvK0(L zR&foCSEXEMG9txA=Jk5dd2yNXBIzg-frZG<{uc5PVuutHbOg=_ZQDl3E1}>g3Gh?? zBqva0lrC@Z*Scx@;^%?xm&@BK{l}Dld$bxaXn|r=+QZg5u>%KMX})yHNAjofIUXk!=LiC={XD? z(-S0AVm5SkHEBspH4iMs(F4kiZ)r**!P4RSb2~S}*t7@)@IWZ3U&g8gT#}pdez~;M zRO63{o;3HAG-%{j&8XPuA>d!KeZI)!QKdIP`7%}#Qxv~4uytWPM2q+s4|odQQT2X0 z&%w4}nWdwdg9>@M%m;p_w#fS;jdR~aj@~PAI9t$by|@xGLfm(AT?1AG2w+>?L1i!^ zOp&gRIictng5qU4Cm!$vL&r1nx7$lnG;GHuNG1^2QVav)g-8&|;$G*lr~x*RAbrg% z$5!{4V}Epbi41aNRJJfqO8KWF`OZ`|T7xub2g^H^7%fP@Evj4dk&O=evnpGMms8S# zF-jtc`N@&G1^Oy-^~JTx?9bhw)4jj98~XakUyw>8|7{n28tfey=n00Cf|jZHxh*HPPLm(ubK@MQ|k zsKbTB{5BejU#G!v_RSvU8qGesTJC4=+U~zn%AcquP|m<4n5!6$}as-41F7gGK%0#8s_n8AnLgpy1N6KS>dsU=|zqPwpOr>a2 zEAO9~`+q+>SXkq_pN&iI@{A&|=OUQU?Qp~Dn_=NM`U^vR>mp?fJ@fI0?P)=~;$hJ{ zVt^vr3KVu+_n+3Z-FqkLh2~1TZ0LZ%WV&3YV0Z=hukILE1MrGH^IxAzXxGJ&)e+Rt zk}nbF7LHNqAjXsh8h%$5ba)iUTY#%iPp_|11FyUPJ>+;EA%M;651BtDSM{~qrxRnBZeIoSasfJSG?=@^WkPS-uI0Yu%+P6}1#EnVnDhHF;xRr6tipDtLZ^ITL@2 ziLxzN-me)^hsD;q5cQVcWr1D!jaf93Vy&9jpE zC8Q~9q+&(BcXjtUVP{=H4D#yVf+DV7pdpNj&gglP4)sSfPCm@)31!|CXa=dm|66&H zdd`ql(hrO%f+pU+Zi5&cGQfDx1CGA8eX zFWjI5A+IqO2OZFh^kQ7doDI^tUljngTFl+kU23f!kV*a(3rj3*O)q-6vs^m%KuZ!n zYZUlunx?IjO9?-b`FhjPFE0XYWFXwzUUKd~p^@xYflXw?!T45MDOAr=Bwee(QMNe6 zoWigBqwGo}?0iwCIGawLN)4$_>pbp38&q?t1KTY3t3+DAtRZXMXR*;>ZRzBP6nzXLXT;tVR8f{t1;*?4 znE%JspT|S_h5zGti;}WbiY!rxBq1W}R1!tjge+4DS;rD%o0&=op(1NcC_;>VFwB%~ zLiT-`nUI|sj4}JncV6$$`}g~P9^XIaai9Clx$kpb&+EF*xzBZ9=ek+0au^*q$kW~P z-JXYWG{xer2&a!fw7fMmE#}Y(38AAQKTrQ^Z6dB7mXdvWJ5cuJZpKfcV>IxYJYW1>fAS$El>k=Z9oOrb?8Y;qU>xhswkcnxK;y*o8bfmx#L$VB`#*6VR)RVLjrV^><;xhN+>eSI7)~djJ2my? z3%j^-b;EYwgb`p!2dB6L<{gazLl?aDeb&i#25#_f^pVYl3h(9cebmjFlkDy73^^uW zT`KaT!N%j)ayv)wi%o~FAN-TjmW+6L(#I+Mui~dKQj4Fv6X)diXF?NIuWjFg4&n?V z%;$K>gIx~D^+?AY^Iqg?oOAa4}N`=g=234@tuS-NptB>T>^u78jw9%|^etaOf zGjKrdbp1B#&Q=8N_BKuZ&F4rTwt@p6QWJA~{Ri;)Qq3YBZ((wQ$PRC@hF-7efQ+Zgfga0>=!#hE%#BzdB6*3qWOn!&6a&C zmZi#Kk?Hs8pN`mmA^RpK{@4timZ~_yyEWiNB5(Gg8fJZ#+gQ@AJQAQ@XYUN#n2cY6kl>FIWp$DvTe~w((%HosB{SE&+p~lk?o;gP2w{As#1zM-? z?#{KOs=Vgmkohty)-vzXH^7UKbd&Mj=7`rxmkUCnqC6BF&YOwk>I9i=ITfsGSRe*7 zvW_gY2J%sD_zf3VGf%qHTB`00L@+L@ypGDeJ#MDIzHB7dNcuVb^^SRIz1O``N<8}_ zc3g)yD#*M0Fj-A^OfpWQ=#S-{+K7>|4tD}cZ%Rd1AcH4# zaTcL?>0T*@UoMXMFy$|FSo`%lpA4u`GFMNwmCaB83%EG+d5wQ)rUKv?d6g&HR(QNw zEMP-qWE+}RrswhLw_LUj)Iqm;MlowcZh7pJL*OS#iXXS2$aG#x%(CM{&b247tnc6K zS7@Hu>kMT5km>;vG@OoO^NHFz@!<)q@X$@f7dqhJJn0G$Cj{dnA`5BkRk57ykhLTd zmo}$lg<<%xGPc;O%d!x1ckPKU`?iK^38_FyG@34mai(!_wSZ{W6b<)_nmK@GY~_|V z?*CcKD=qa3JU;ukXuCWfk*f6UvHG12xWPdmzK>LjEd2h;p^wy!G(^?gotFZr8wUW< zi3GF17(Ko`Cg;qgXxA8>f`wb`Q`n-yVY(2xSPXM#YJ_Vja3q1XF@=E`LXKf~OyO39 zVF--9h_TwIaDq?a!;L?)&4?rs0Dr>o{un5=ds+5YURS$O1Y?zC6sfnr0bb9z` zp{?1X7u@Q#&3OH0=a>7UUqxmnZib3#CGaPHaWb%un_et1+a0kog6b(JkGpvQI2#iG zZZ-oWOvcO@Di3ZacK}_Yubygd%z8Zj3kvvnxC;L(AF?;cgOoKTyHB|2Bb5Z;tW4e5 zAps6Yv}gTeGYK#Q`vb-ws3h)|n$?_FZ0xL#H59PY<^Tk+{Z7gY>f^8yVMMCG%a!dkq3(Peh8nlQx)rGv67NX zfb1u>t}{)EXa=iY;AJ{=r}M_KXVvHVtmT`43=4>;XLC4XQC9K0JQEBwI+h=9}4bmhSOL;I3)IYGlTndFaiSG-dsHM zOxQZ63QnwytD+Ej{snPZlQg0TgJG|hm7%3!s1~*i$@FuL+ka_6Vs5Ud9ig$}%a;LN zH(KPcA6^)v${663EUGQfC2F>WW*u;k{$0!!CPnT3JhzXk{%&;PwdT2#<8V_A9ATET zL|IIAFkbDQDL+AovJB@sVpx?jX3z)-Wgd=?Y2m)D>12Se5PzGbbGHbHN+7GWxo$}EN^AnTLuI09~DcSMt zUtCH8*Y~K+Hc3OT6HuZ)dj1H&C^#8lQb>mP%;nN$jIA69XP(UyfQMnmKO~^n4bD7? zd|({78hC%d96j(1+J&QaCsJ5FHvV6`xC?9dT{NF#m!m3ezR2owadlP&!UaIiCLv&)y-vtZ- z2gKvs37`NF8q*q`+!TO!F~CHymx!Ee9M-EWm_z}1D}ubld3r?4jW7h<_T@Y|42`0& zd)JddK%4>h#C{z$Xg;jCK4m3-Wu9*3K&FnBqqf!=#FClvrjK9HNx3sgrP})-)E&;z zDduYAk(*cCT3gzEDmi;gVMl;&O+JU^+<N(=%rOj<(teh`Nnb2?*tZR6MGJ8y z+w&w0@7dTYpno3McMUfH1pv|L7Pju!=g&fa1l>+-3c#E_P$i4_JliD;!vDnn#8Em$ z95T;nL%=^Z9hN&(*}Q?Y&A_ zjNG0-yiK4*Ua3?A%16o8nXL*kg5LR6YXIF~+_g2%(sV&q&K|u_g`fV#*vGV@`P{qn zzjem@a?59WHI`By$-VDg7Z)#jj(Gd=z|Rl{?%no5(I;WM1UDS_MbufX0T=9dOZVHH zoro>=4uf%&@-NKi$6sWV$+>ce#Z@w6sndRozSO0>cRVjuD3BTauH-{yIh-3A!jyY$ z1V6-O^)0eRQZ6VguLWFQV2lqSFs(sH)}D`MTw zwyG=?VMw@sVaKSWkA2m-VnB=T-r}j4n3yIN-pf}e5%z)#?;7t#Qe%!*kQhc(e#fm!LIPFL(c(=AY1Ifr)uiJ zWBw3GD7Rfm!zL4ffdnOdWc>0T?#?lcR4m$7GMpao!U}yZ~>)V0FaQe)bdTh6%LlVY}cECPR(}HPpEf z%{R{oc%e-FN?W81hyysGeELV&&1i{zH#z0pcQ59zy#L4F)*QVRW&L8bobwOQmul8!ztZ<$bg)`8uNPJu4eV z6a-fn9nDn@xkI^YGJR5`ZoshJXo?}%7x7mLj)MLVRLQwOdT2w@c1~^BjU>f7JTeZDRN8G%L zZk1Df@pX%{#^40>Yl+8UurjO#7Wwgk0~Kk^87DoDB5(9L3d^Htxl?P zAzQ4HnS#~gxHEU$V@}Zea^Xa1IEk@X{_Mjkr&ZLyBH z_TDOi_Z7D{Kz=8oDXs#?g%`%Q)F*Z&Zq})0%%}!H+bhXLxVhjsT|$ngS}-3@i=09$ zq5;6xO>Mv>G#oBmKfR0N6rX+19pLJ+FF0J%z;2y$l!?aFL}S)c{g^sP2L~9cEdyrD zmAvR=vwvtKW9jJA>eJg~c<~YL;^X8l7+Q1ZP**}`5>tt&2E3to%pye7{RHdSvG32o zvX?KPU)OO!5N5e7D+-q;OX2d5aXqV^a?>xmPN=!LL1Bh($v)$fo;{>|Nc zH!NMc$iv1B9}y!m41ImaU)AVj$q&>|KH6)7NHsTVC3o+1I*fz8M*OFif(iP4Y4 z2|x_eJa@EO9){jgm08)@+uK>D9@xy<_31mI%s!60vDxsP$uwy$S^<OMj)<&5W)8YU$UxFXD77?RIL0w-5fC<;2Dl=WS9_Zne%2q?TgLBN;aTZnmAp}Oia z`09%pN>6_3vx(eD+z~;u)c5Aq2BUDV_K%tI;YuQMss8zqj~ss#9bphTZRQ@29#1J` zm$JYP)B%_og>IOvSpccA5nIa(I3D4bbh}Gq<=hUnD=H46#uwxw_qh6op z;QimxFVx}nW5|=!O!KQZX6}5$3f^IFxlmbKE&llX!Ik%eBhNSd+MO3n7w9f4@~Xzb zbl2AVa;bPs3$!{!3^k^t;O_Ep+O)H})^1`!`JK+QoADM;D<2RHtto{+B12fg$}*sLdPMd@r}oO{{ri#QQ+fE)W=lfyT0$KT!~p06(C?a+;R z?u>xCLcw0|nf^eRe@CS0Q_1)K%&sr8$+B0fh9T>0f379gveMm^3@&pQ2ldqdiE2&> zfw{J^Lw!<>Qq~DoryCz13oM~Jd`RDY3Qi+ymZKgbo36hz(KM7pBAQ>sOr<%6@ZLu8 zLXCqiI}hqKFYKWWyEkOyDOq-#V~>_0$3r!kds-VK+sJ-U@p@!2e@@&%#fNQuLsDun zQ*(SuV{t34rw>_sf-axE2)jwPQqoU+MDWuxw776iON1A)0~`^^{n3`CU2qsDF!osH z*C&$w^qHHv{&&t@{}6evu=Z=op71Q76f1wvYAq;QmzW9-3IeXQ2IaC0BF~;)Y<<~e zTR4*bqZ`MO>obA*_)l3yX1qG9S44=+tL{^?@%j;7qUkl7?cRP8JkUX&P{T*Tn&tlP zZ~b6j@^x=H(*faTpis|9A8orPFLE~^>RvFWwY8bGeZF+l^6n<(xV(`<^^!sqACMhr z+EAQ18to^o;gkW%-SUH7sbnray9NSouZqh5bdw1w-q1PpNcXO>RZi5N~;7+GktHzUV7ul@T^fo>?vH)1Z@RsI*IH$w(F%GiUpnzzPx`~dk+hw z1ZgKJj;Re4-epg=LKgC5KZD|;U?qKY@$lg*QR0IJyB`zWd*@eB>cPoXiYKBHo6S23 z@Haz#rrq@~=Nk}5E;xRFR*)FGcDq*wVk<+sorgDQ-b>E)y86wt$6)L4i-i-kRtMLF zR#V*SIY$rua!-4c+Ok3?`=K9Y&--pUi%nNsx8G7dwx}JHkg=F-77^l*J17i1q(1CgY-&CUM}lsuqb1o%S71N4#Kf?vn`3%b>W$ zzN!|d44vK`Pbd84-dvA}+RLDf#lD*VQ#oGSLb(hw>~$X4`TrE9K{eiv-yauzjJ+gQ z=JdSxmcE#e<9CmO%OJTR?|K91!?m|bZvTeFb7Ue$-kn;**=tst?V^~P-)~HV4-_0& z#S6SS+R=i7dWpqBRNj2Z!Rp>STEmi=0Kuw;^r7+2LP^>)jQ^Pwd3yZ zM#jvCXTSL~x)=@G5xXr*IT!CeA5_X{r|c9?+DlH0_C662!ZufdfNrS>0KR3a{Qc4_ z-(-mBAUykJ5eRRXvo9#%z`r4fj1h(oZiAShCcKojJ#Z;$t>dzo z`{jloYl0b}`KvYwDoJ0BkWC}Y+Tcg|xi8(5Pt4w_#y}wf`|G?~ZOqn)1`nO!Gm5Jr zrcuo>6(Z%MKUv#lD?O;9#}jtz~o5dtRe6U>$V~&cVEA4|n>Hhmt43^;h)6YY;F$S#7$f1@(rG zyYL5NAgVQ>T7{ZWKt$_5PpJRyhFRrrSlo--n^Y~HbA#tD ztErI?_?hsus*Myt-Jb_UV%qO~(G10UYWG_(G8`09W-Up-fhg=vb~w#>VK}|OhzV+^ z^e)FhIK7Wc;FxCVLDy(-2y>$M2}{?lxNiHz&U!hfwJFl*VoxW#FV$hfYK?1$0kG}4 zd$2J~GZ$wHhgCrBxrAvGX;W!eRvPFvP(S9c)KT5W12VG^0qA7Yp73Uuvl!v1Q{u?) zt4g=#OfF8CG%~mJEkG|_A8DAo_FT>$F+|Bcz%l~T9;r@7oyFa4jXRyXdF?r6=ZRIe zS=6kF(J#oQb-TeRlBP}QR$Gt0;79uACAI6FyGR33 zFdX&C1rSIL0q0u7V4*MvObd^}BH$>2;{v1awu`_*bp#Cppe?MqwH=d_-HVhYNkk(& zK>f#DJ`;m(;TCYl;81(Q>^LTpcYiXQ(T6Y_2t*>8hc-OaP! zZ};bOhpUiPQQRQv78Id5{n*r_H7Y!WiyO#~+XIkRGybLjRJ;2Jrl0K%yS&`~bx#B} zflLLbqSWws?py#BK?);rLqVNvz+T=AhSTXbiDiNTXm&({Q&UzFas+=9Z)rpS^@$O* zlegMS*~YTZ5=j^WBnr?p_cb-}tp%Jt{{e0lC-86&zZjA8{Niy$~_aE|_cqB*`diA{jJBm(J+6J0NYv07; za^qWNbvMLd8m&E^nV(H~yGQh!Na$(w7!g;3O^tdAlED);128jDYeTj`X=_e6b1ukM zB!LX4{tCo^H*~;8zM2{Aq=4YKwurmBCvk&%H{YiVe_YJ@KtJWg@!$0IX}dPHu&{d= z2hqovC`w?WqV!uI5REDuQIFO8cPq~X^-LPv|Ni0j1;WjbA+2S7%aQ$9X$&JsQbsxL z+#Sl4HRcB39*6*F;nH#KC8i;Vety-#m8>%P`C?(aH=Bj7UlTxwcLnz{8^M>HA_mI61(za;Ty=)aeW6WISx# zBeYBZ(Ni(ikxEi<*9kJ!H{GH(_K#MVb*02)`jvr!e*u-VfTa9ySD)Yrw&LeU^EPK4 zUZu0YeKpuD*y@K!*qp$w=aoBy@B>*d{(c;|6;a<_v9`I~)Q1Zx{Ht{RL!aeu#jAl` zz1IutX2`D2AH&d3T|>nmuSzwAGHR7 z5o%gu)SBigH^-&a+xS^n3oIN%M_=P^)(q6w{kZTr%Nf7%mGqU<lA$JL!UbooHC zP_7PO6KTlaZD-G*q`01AZ!+oOCq0c?xhs~s7p@k~N;B8t(8gT5RU$PMv*qGzxsXR= z)kj?|@tdF94ww5{6b%e{6bTAH#-h` znNJ-!+58DN@#MkT?figVrGS5Av4!MvH7cFsXOtS%FHh8yy7OwBc-RCi$>c{x_Agv* z9|Dm^ZvMWln#cY@N4>Ci3#8RSbmE!_s#WGK262ZagvtZG^w$Nql|9E&$$yy9Ef){tUmx`NwEf08CUti(>gihkJu$6fYTpl{4t!DP6Nx%esJL`{w=Y68V4dR^fk?SfdeI8USKiX+_I+*c;~%p%eJPOz zyJB{@rMa>g25RjsW5S>g&)RZ63V?PlU+{{u-^By-S9s=Gr}M z8!BN6y;zO{1E4HAm?O?`@p95; z?&?yphF*_5jez5>;(tTCkRZl^lV{83V*vnv zHNDSfcsleBn=)`0)^4)vWn1uU&79zbvDWngaZFm*E|2F2i?gcL@&{f=okV>Sc=(j0 zy4cS|j`;5NuNng;Yd$q{Aj94ktKRmf05;X-NpDrJUwG_%&*?U_?~Ga2t$6*-rUA*V zWCu9odz}BBK+8wL*rRF>=zYraB`o&c6p;RUc_G_?@E*6U90qH%J3Qj)^(kKWwiYn& z4!I3S?e>uc0J1-s+I=S8U-OU1244rx8#dE3!c#Y4WLnBFK4&R{%jv_x8_ougDaZx} zHdxgOVWnJHqN?;bI@uc$b!U1V-u3AA8*|qIaDN2Nwkqv+3zx-5t^M=Mv`*WIf2JYR z>6k6?6}rb(clWz3^iSxMx*zqr zsJaBS`*v!hRekAEcEvQ&?EA4p!mjtH3T*J?Yw&yM z+7w1(t{OS#ZFcX$WpQyx2%ZzryyNLG1a?)WM&Kko!N^n;EKm7L!M2ap@)&l8iR9j^ z(1*1|EpJZaWV5|;Az9Nn43{(Z$E&Ky8lAGC{;XC($Z6_h@I?OnGur8cce2zaZnO=I zw|8T5(S?w(Q^z)3VUhmNe}fF4gc2W~8qNFi)h&fRUW?*|ml-L#JRw*+Q*!&9DXI=2 zfMT^t>o3NVv{Gi^g2HfS!zPB%lUSs(@f2Q6QWg^SE>i1$*)x8+qkI=l7{f`gpC6gG z-2<;m=Lcii56}Ju{aG)&5uy0=;pxAmK9%wtI&SaubRu1UNhl;C43!6r!#`+LwzRNK zy28`kTOidM_`DYic@4h}cS~4VX8)dCPm)7_$Tu1hoG}&MmB!yyT;${bt+gP*&-drH z^KiVwut|KMWB$&96-miG^dunRxUM@=sY%27Ns6ZI`*A=0TNmP5%ojNm9N#Nf;)rK` z(I_haqgdbq6F6a)a5V1hs7-Nv33fL*yvbWyM=DcHPA_3rtW&pJwsPpP(ubMXSrR^< z_?`XWw>h5qCLDI{=R0o2iSA+uV7?^*ZyDp7_jE*#Wp=S_NfWH=KjgOZwXgoN+Zqb@d2rkbt?W&CQ=I;0Y!@CnFnDxqoK=WOP(EuSI zWL%ANtuA|ovW~)HnIHmQAjQTfH)Y;EWPYHdgG!>(;lLkmjj$Hi06}(A7QZr5aRbq$ zXJJ2bS4zY2$<4Vq}<+XWtGJDMG-b?V$}Iv~k}chbY{1$Z3)bLYw=0-n{PprNziUvcRw< zA7R88S$F8Fr{~s-@Lx5p zpEV90J>wH{l)8Ww2`gk`C_1%UAuK8EA0D#$Mn*( z;`+QnHk0j#Vc!sQq`MHrjlp`|o>FBO)(0+31%5zI2UbpWJG#8#j-Hyh&K>ihA*{&X z7MuK|wVD^9zZxwz6H+V^KFe)$l36c5JHWrOF&h-p#yX-Pm59@y=#gsaNheaxx$m)-j+Z9^`grQoYn9TlPFM8^F`eq^2 zy}7-jbmVqT3#1V@&|t*VVEXb;C2;sv2{> zbMA$c@2$jzZ^{AvA0XTyI7k(O^|Op;@9`qEw06sqX6jneZzF!IGxM`y%g#+JIhqwqp?$?;EeJk=!t%kP`sbsn(~X1_HH-gw@V!*3nqT*E z9)xRPZAhak@=<+j0|TCYhfGqatNzSc*Y8Z0%XiqLD_RC%aY=Z(5o#GP3SN{DA4mg5 zyp^jQ=&mPLq;B5NGrDioI#bd%a7+`wSfMe$x%!qcz6MZ z-OCIP*~R(@+g-naW(UNVMswFTMN$*8??WI|4$)dlc7A6@T&FBFlD55|AsEa2r@xqzw{BJ(juM=iNV-zE zw>=--^Xd92FQ~Ebq6z-JacF?}`tI+0Xtkhc6(l)h(aPZgnpfvw_MbQ|qT7*HV^c_)`1m zz-0L_&nG%3OJ0U9d~&lYRVxW%_TJs{2|g8nR&qkTL*f#|#?3kp%lCtQfx5Q+5MiJr z3>;In3zGy|(0@mexEBB`+l#Zn7&h;^l?^A!7P+bv>t-{(27S*kdBhu@*zpRTlZ> za*y&>bU-|3kX0%G-FjO3E9~9Zllo?jYEior``M>A^U4me>uAW&4CxJQvdc2Ps4 zEdMDHH>5oZG-6~9&Q5gH542vQQq?@q6S+@p`6Nfb4Fym?(E}=dSTn2Ajwm0aX ztj=TCqr9n^lN(4OtAl7P76*VZ_LiI9EMmbTAfwjS8FuQ7NGe$N@4yZ`gdGvZ-2_2D z*Ryg(qC_76A+)_wt;Cv(&BgTEHrDoId&7m2+v=P8wwh&K+?OHKYYnF-ABmcmsx^K2{fCKqn!7Mm&S&L3e=4`qWmtO-?PF zy^i3{Y(mfaMxtRA>}_KE0=u0_|K#8hcwOKz*N?#si>z*a^g_phk!$h+$OUkBkch*W z&fNj__8bC_gRti2lAX@Xaw$FNFcM~lJ(qF?~E+qavjp-^}jnJZ~Rj~%2IFIwn8yeF_E)|tT|8WW=X0q#IkJmK8P2H zcqks(CGybG)0IP;o1+k6B)3nnCe{c)q6`OPVRs2-o6(0BZtmAXCG=aR^%09X8w>45 z3EKozfVe4$X`PWTFA2Wicmsv)=cQ(`%V-x!qxZD?*8G@ zd)W8iJ+=5XJhgDwB_;Dt6v1!C)`2hXzuAshi!m|DxD8C!)Zry0P7E1)qE!<*_958> zvcOx46>HjRExzk|zR`<+?)N=e@{)Ow)?|-V3hAx2?c)aqD)m<)ADOtW2#ONE$)~eJ z8U5;)F7bDKzkfHQx!Xp%VESr0Y}i@(R8P(d&38Rr?DW6^+1Ux9^rrodLNi5n(h?wz zzsEnvoLhpfUwmHuu{T+$B1Wt8ak%fnucomP&xO%rcYfX~{UM!8?0Ta0+`v{FZ}``A zsCsGtjpN?hS-r!yKU^60i=9#C&X)xCslqzHe?K;~(KXaOx$@xJ_#{`pW85L2k8RGU z*%%?v@a>I|txmm4GU*TMf}dE^`nUbkQjY?|ZTdnZMUcSG^GC2{kg3jhHS;f4Lmw?) z@Ih&*#36E5KY6|>Lmgk0OQ&eTg9I%Q+6yF;sOX!rcxWr+T6%FzO@a3T|3zM2rRMP$ zI-BoM6&Zss)_+{g5Odz_7#*~KYaQfWc=A{lD=^l5``yc-MoU% zkpE2FpLi#%W7j@>(_IL?hq`t7!REaYhuEZ+2*Vof zJ8`-!M@dvv9tN~EE|`XvKJ2g^L*CO5Qzx1~UXk<)Z+M}8fa8AdwWq^?P2>7Z{%t!X zSp^bYHf;Yn0yvsiwCd_x*94j?n{084>;F=Xw$YvJX%i%!P26A7kay#|NA#k!0dtQBpW%J0evd`b~p4G8#|S z8q7DcZ8m&RYH->)9&ml*@9kHJ!%}kxsK*Wz2h|O!9W2vz%RvhdIbJiH#gyY-?HY;g zFCa8ER2);RTTZD^_4T?~CB^tfKYo>1TL)4R?EAp3HEn!S{mpMdcv_PBi3qd497c|l zQ^_4~#onL7@tu8R8iZTtyL{{3bHp{Avzp99cXh8LUh&>xx3$hR#ZRyF$ugZ70mt_G zrXwMPoP}BAk%+S{-?!9IV=o)N#2={8@9Dzo5eSta83-ZxGZX7gXH+3&vy4VfI6o6-ubyN`^`x(y3uzqZ!{%G^6vqI8a001U^!X@04HentIDeS=e^e_a8)>umYBiMzl19R>a( zu}>qKjGVncfK)5#n3;jJ&Wqc7!8i-!?|A0>;N&K$?8j%EkNF(3Bd0H|>`e!Y>bi%; zbPdYpELhA8`>O5ogSCrqhc3Wg)%;Q~%HF_9ssDMbg>%)+QRW{Jzjmj?bDU5qamTLa z=k*wg=IO&s&gNUs$m<`U{}7kZYG9kZ{+04|rdr;9^qt{O=yLY+(nm8IZ>bgIIReP> z=<@3z?Q^rT)IyIVii~F8?+8?BeCrV`=2)<1dbo2g-Aqpez zFDMto{SPBrBLu*q>rhjjVinS1zavwbHQPfELOjbPeT#DO@2`Tm#?R~82G7j&hpBr8 zckTK$n6EO1viquK-{+mZcS?IhginnU>fne`!Vs4RkD!Ug!+)Wdr-;Q>K4)62(8kYy zHctSw{aVH5yoMfpOFQcE?v|iPvNz*t)iJ)>Gp!Kg0oNX*)=~CD)%As~z{rHGyJNL^?zO_55|))HP=W6=EQ%`?bs{hOMPX0mUt z_lHmSTaHd2(J4}eDQJ7Qe_2(DuhQtTou*X&3iI4(&>X5=_lg78OWYy~a`hKDs9%CB zzQ-)oN5kqKE9zLZkpA?79VWz*OWl=1Hu+j5UQca*$^+M)XsBJ2YVH0LbFH=P4ku6I zgoUslw2tro@fq)44_hA_chSR)t3h_jmS1Lc$J%E{A1^n2b{cG5kkl5`NhUj8b@FMs ziEj>T>+irl#^YU6-*|%kg2HR9gopL*&ZZS*A*~6qo8bHFb+VUyrN}|PVt3-EQ$Tv| zTa{qvGc%Tm>vmUVd>jOpL2&|gDb`V39ZWMEIyQOT?fMzGju@2>TcaW`=ClQNAYs5xzG2sGY)mSMMgoP%AF6(Uw|zwpJRFsCq&I+R-_$+lk(KdOPP2A~Tsu&V%@i^F(nb)DR2TxO z+Dm+U&^iRyu<-y6;(y%s2z1!HFgPPC1yb;NTIiF9{5gNsX3K*cs5HbGU!{_3^ ztd%UWVg2+h`;&3o9j;uu5Nv%lK0Rh`=?oiPl)6{@y>`=rm$KoW1t!d#HgI7gG}#yWIR>xk$9`NCaUW=cRNn^t5z#kbr51gQ z@t<7*GoWu@a1#x$$YE_+&1A?)g{C&nYEHVfrP=xIYD@mp%i z;u*!}IR+g`0(uM)`Jv8+uuy`wOTo=T0)0Miw4eL8z{7hmeQ~%JmB-!jDQ_8EOa4iT zToI}12Z*uX57ToUo_Y^$Z1|Sf!7UY8z0+oXC3V#+2-SA%N_=`hf!jqe1xUBS=)X^e zaiF`#KFhG()t)Qk(_3oGX1VE3{CV8@5k*GHrQ{j@(cTuq3TG{hGhUK9@Qx85x*Ma} zZUN@lwWlOQ&$Yv}+zcLKONI3qbH}G$mI3rzp?pb9UJ%yp|2kmQhqMuxIe0*C)-xy&#_b{w0n>DCqYpLjybIH>?_jkusKKlT^@B`|0AsZJWExF zzxWTz&yuS6GfhmmD}Sz~qo z|7G7>B-^-^X$lCOQ%i;ZZ3D`%f5u`A7_W}Oa4oVDJi@JVsO|*l6IyQ(@H)xs?&lCZ z>G+&-9=BadByGsfa|i_XKGR? zr|#Q>JWL?oN@o}Irve?@E6$5hsX!SJbEPirAI@(=UGFCN+d z7Zc~Ahd#UG)!zNrjg<~*`S$+-pVz-^Kl4H;rzQfhIQYLv|NkhQYyl4czjY-`?DYTO zh`_52Fc%{*1HQZ@w=3{v_D%~hpBhz0hI;40@~ORK=>N6=Y_|}u3@~wDh1ul)X@V#7 zbbyrkzgPTELz4F&=9Iir+Z);UUMz#W2uxQ;({guik)ge-$JN5| zAj+ZI9$EtI*T4T7fImcFp6|k;cr`(;I1h!S6G=QF0{({|UN?PDcoOIFV9s+kKwh0K zg3&KQ5_osYwvE7(E|H-<1-w7?$9RI~Nu8UNOBJJmuNbZFbkz<=;qjnm`F(7SoCek$rV8va}%=RZtj&$8c7 z(~seJ@aBR32U{}Rh#G;ZEBH@VJPHiR(83ST`~NS9|Kquj>I`0-G$Q;jvIO&f>aq6! z!;%4sDoti9K#LBldEr49M!k$krg4UTpSNnCh)5~1=0Sk_lkHss0I9tt#nElgg)CWZ zOWITwzZTI-{Qu$Yt;3>vyQpEhn;Aer5u`f>QEKQE1_lX1Lb_9>q+{q*N*KD44h5u@ z?hffz36a$A48|{>=lR}0-s^h*(czpk_lbM&wbowyoHuLNcgdP=Ss zUO#^A)E0e%vb+1DBjIh6EX=|6^rn!&G_{2jn zBZKbz&6Z5yC*XZy!Qyt9Q$gS8f%j#RK7d#?21e8 zJv{P&=9!flTZ6j7R$s=UMlN)YlX&>^hxX8{PPW!AE5^GzL6M^h?yvD^@?z6ki(GHB z@#|oY3qn;5hzN_Uaz>+M;)gr1ievaAwH}l{I1r_}t7l-KLh4;b_bAKmNY)Cw*lm0% z05&BO`53$S=8spa;w)0%#ZK=rdwe4;IyB*j#4~%eHGX(k@Baj5E=`!ab0)8d#kZPs3=D_1Gf%WFXnjiYL&vv04=Br^SLrwQ2cU^{sp~e znrpbkozAW4JP}M65b&XoO--Kx1bt!Q0v{Dna)S41tb+0>UoA5(x_cynSS%7!fk#q- zON|S14Sdia>5*{$ELTJM*Ugs^m1-_{Z3!S8CC{&O3I?=`~9gJ3Ph~rR2vC zlHHlx#qZz6*IX%5g)n*ZZ=~1UKg8**Qn{P4iPL#+FO79938#N_;MvTb`*%02Hh?Ah z>4(*a@vq#)d#_`3XlE0Ci)!ssEX^sEdkmn8BGSz5*m3eN{UiZ!4nm2`-hl$X2mthRHaMz=sv^7zh0%@p9&^|9N;Ao>hP zyWczt7(kC7)m7lk3r;z#Os=P!Myms{zB1wG=rWjutXEcKcV=)^hQ^X3?i6kY zF@ZZ71X;l8LWKpj_;LCJw`xf7Xa;ZfE6Qd(f)0yAT%a1_d?GAhvFV&FE;jrOMd+}F zkBOridyk^*{d9aO$hYz?#yX!qDc2AC}B}*Oc_* z;Ay>yuYgmZ9X~y*0=8}b&iUy1F|z%p#+1zyS@jRv$yiYxmoH#YWUODjLASe_ZTa1_7o@fec}5a}zs zaT{2e!T^LrHVtrnPd9_TT-)Oxn$5%9#2c3mfy-S;++SSs0$4(Z0M=SOcMaf%91auy ziXrW#Ndw#OTfIGWZCS-7H=F_f8fJg(Q*fM$8R^^H7Oo-4ikq`O8pfu^%7oHz!5^^V zUe5Ooze2<37HcUd6D8jBiIa?y$gmGx9i9Rad5`@LysMzncb|OYxP5k78jT->9bvbG z{%B;O@8yZx#WBZR|CIbZF;hhBR85||O?WI(aBYFZQwmZP(2x6%3FS)I9zdxQQ+lJ*feE`NB_xA%G6h7_aSC){>%t3)9J&n0#n&P!bPnc_Wh06zh(bD2XNB#gAjIHm%-GZt|K`x?QAm!xE>%xR zj`*T9^w3ayjlS?1&rZ;{N<+^?q0eUhp2%b1h18W)ijpD^$Z+D#fv?01EtLb;|MNRu zbSlln%m5Vt`-Va_>?j%QayX{|T1D=MH3P{hujUkG)n*>4v7Zsd!(Az*R{@&&g}q`G zIaxX4Aop4B2M2~(U;DXPz}{twvWniwBS&uYUTP(yG6uQZVOih=(gF^2nZdY&Qg^(e z!$~gcf1SbRJw@5oCk5Pvp%+9!2Fq7x=>lAy7HJpgux7(|P735zk!1k~k){Cq|7yYZ zAk=3-QPyp|auM;)JMGEiKawZb}t)Jr@D-prMELRvx?E9-2^%d94TF z?I1?*($S-3McE1*u_w@2ZV1oa;c&UlusAriL}Wf+^Zd(ttKi`T&Z%0gQHpVLCHA5> zBbw5mWj0X>Q?vquj-@(X&L>U`^dk&2J<=WY$IgZZ(myNjc*#G0`nEU(c#m}%oAXBM z-Nh=`W>qP9OU-+q2kO{f6Onn|&k)M~hIR{188=)UKD3cGtSo2wayS))sE9B$4m4y! z^^X{;GCMMqEC9CPh!~=DR56OQr)+*G=fDXmPfi8-ynDr)UAK>wq)7J~f-s?b{i1)< zPX0T3(!eIn`cl(kaHpH*|gMHqIuQzN&qI095R zxotjf{k05#%2X38gH`8QD{j8jBmUY^67Lh`d)dNl0FtCLv(aqvlk>zkr}o)OGI* z_!%a{Mx3iN`C)wmxwMX5nkz3OH8k!FebNV0 z6dL#7z_@T9nD@V}opH#R!AF!aHp6F{~mQCRZkUHPJ)77i0V@3-pY$|R^b1@v7aN7e!x=tvl3XS z)huI{tp)7FBcTkhi+mlA_RoI11i052G5&U>z>d^-saF$mTY54JIe)}zu;*Zy3h5ce z%shPGqixsYc)Q>ru(C=j>xE?x%dOuhdH$@J!HreYE#l`1b5gB6%VJTwl;5B@Z)VZ_ z;kgpzJ&V6yo26^H*M;y^y<9w-*;WlKh5k6NeRmtu*F0>>Lijb3#B+i=?^C;zRvKJNo6itPk%tDig@R&XTCcEy@Wu*_;nG%`$VXRrglK zbFOKrvh{;WIM)QTH+%{fyXGb}DxRYdY&UP7FQ2aBvCdC=@W{+P*>79&3Skm)n9qN~ z5z|Q4;G^;MQ|i$NT$+vNyDTiWX+J75(q21#mlxe<(9aEwJd_xAz#6|=v7aPAy7Bz> z-a4N69pjaY=*v}%rHg2<74m&d=56VvsW4#qFul6ImcP(T4m&SA37IwNCpe;{MP`z78GjO}}Wskp8A@>$Q9_@mcysj=seKGLXZ;}tE% zi|k+y0$BYshr!5U5^enW`m3sk+WyVuj4t}M#@11aHWn&lgms^E7_Kpo z&JqV^<2hW2KeT5kc4YaCx7zGvOXY#HTWj#1I*1d^ zdcD6Z(-AIArQ*@xHk?mL?}imXXu(2co^4lm+kXA61zTc&avD>^grpvPu8GF zcloC)UKZ_b8JRVpnfsX8>kxApTF431GYKfy7Wa+is~V(Q4g~IWS!v9o_t~~zS2d}A z5)j24JyGkRa>K&3A{irm=0?bR4c&Gt7%$gYQn&BgQ!~E9+kUMNopfn<d`2Uetu4-=b<^<) zlm>CSEo%g7`DI2$GDzU<1|}qX>J@!#oJNBPc6GiOCYTwLYsKpq#bfUt&2tXzTJK1O z>P{K=K~^>s&Y^c1Y@fn(5Vi;Sa!)_s=^D0Zup<$2zc8kuHp+fKaVG*RmYrKlM?YQ& zKDbpzZ6N4o^PGz!vfm+=-Ii~fUZxSpO~+)<#K_|8DSFb)qJFlx@bF#Rz~d%O3mwC| z_8?sjJ@w=p&tctpq52y z=V0v)JGL#!(;mxUwvY?j;yUrMNTK!b@;Fa-ZS-X52#)zl50xIdnkwp^5=*3{9Tm0Q zF+4IZwUn~?JW#1q8nz3Xvn($cvZ|)AGE=FpE>FqDdw&w`N0pL}+ds^mmI>R%_^#Kv zUSrJir9YaYzszoqE>d;x@yZdmjWl^AtS*bn*_0fF0f8wybFiy6QISW<)i761Sndgd zZdmpycjyhH9x7BH&<EY%p?He~fsD4w_xy?br0_KTmawOhFM zwLaRm=GDzSAszu6hQsWdWfK*BCK+nys+Ys)$_HWdUriEpuMr;()6VC^{d&kadobB( z`|Gjtl#8(@WscqU{EBKFTH3t)k|pa1ONCO_Tu%lnvWOk$8Bxjl{UVow%lr}3iRtJ> zupLHO>-~BPs1V-_Q9XHOqt<| zY=*xGsX1M@qWxI?(&lVm?+sftg;xLORxOcV6K-!pPn-P~FJ<;%r~3B_ckVGg5w1qC zeF%-G)WJyG=Dh#RLXtg;@HVQH<`bb0KlF?yUuq{O?g6_=}Buta7$Zbl_tv2GF4|>%3!)d9@WGw;iyv;f) zB{21A1ck0}-c57TG}M)}$Hagy%D1vw>K=AGT9V>+kBFJw!?7e0_0&`R+03eMg5TWF z#`~mqO1;p&i6K5ur~HQf+v* zht*DC2zzVt(XS%)w`)>uiWk<*b*Uer&hcmj*$qDRWPX*^F zY|hd(t&3angGsFxQ>Jq!TyvZ4Z3AjQ83<~Y(p-DJSDHhyn{mf-W@cPYKU&Q*HC;Z= zsQ%irq<>d@*G$)@o$(^4R;@eKI#<7{jpM<~;MCX&Rn1VYalx-6%LQL1PHb%Cvr4xz z_1^rLskW4#l&ST$5u58Xd?MSRmHa?Vsm}XB5+cm*yv$X1mmObJreNU2+=982i0dKG zw%*;vX-+~~!SwWR)h=!3XjwuULxiDJ22t~xq0CTLZi za<_I}lYxEZW#BVUo%tJWWx4Z%;vG9<0T_J&wPr;f1bqY!KI01ndLEDJdIj!gCTh6) z=H8vE$)32eVu5vJ>K*T2Eo{M{vRE`wUb`AlXzf{5)-VxiSO69li_8<|P=ctoYMAPy z(AHU<5@WyNwi>vuBUVLd4ZP6l*&Js}icguX^mpPx(a+t(qmfLo2Bsg=&|G^GgkzZZ zT?`lD4$oRByno*ZQa81G}?u?5gyc z)fzE<9}&E>^f($Oxq)8|UosbL=9|g&JRiF8xg+LXL*ZV13M!c(hc?F>hP6wbZ&CL0 z0wr`b=cw}pc;6G}rgANglKU&kGAlUoP-V8KF3G+}XB${-@(R{=w$QJ~V%~ypD_G{&nS(`?_sU>e>evr-0P|KzK#&?j)3u4NAGEZSP zoIqcjRrt_8Wrn=S3JpFQ{TQS&NaR6$nOCXFrNJ8%sLIW&C>vyeYdFq_XG558up=%Y zZIO@qesi*y78OuQQu0q2bKxT zG&{5FDBEP%ufNv_KAA~cKbvNfohdgd8{^`L57L5hrxfZ`fY^X1;JZ4$M5EE)j!vEK zfbH>jnu$JfZ$KGUrS|pZ)l2lOg_u55K_j`?#{cv~K^$EvbuM~I04mJtP;i1z?RUXy zpO(r<-s!xpVaq980KK! QtH<=a_W3eebxP&|bg2LX$ic3KlB6vZ1N3dbrUJGy3 zMOvIZtAaBQ1;Z`s-HX{%()tilaBt*t_+|{Yl23vxh%@PcCXTx+ndd{eQ-I4Hjx@fB z$yCLCjG=O_a`p#nMvm8HiP&VONEn1pJFlX8B}rLM*!qlBxa0y&ux6egI%~T{_)bjx zooD@wV6d1zF8DjU3*AFuaW?&f3`l#WG!Hb%FC1zTP)z?2Mp?YjDCbyXbT~|{<27?mDE(4!!lO|0 z&GW}7t>q!{X)$ykEJVTapQN|3)(F8ro|b87`GAB6RO7<3yhVZ|*RWvh-TFG6t3xy7 ztXU`hCycP_)dIU@vBAO$zhmNQ|2WE-1Yb@+Y?(iQU+f zXgbMO5^(;)D$ z6LH$Y9_N+n032_%B?A~Y%7qEam!L2Ip0SeLzzY_qTV8SqHvFm}103ISmoJc2`ES=S zh}YN+alzkc5`@29`*N`o7hEs($>bpzL1{Ym)P5CFbFl1|E{9WKbo2LY1?N2^0ByBJ zZpyZ=EVL0u$tgT_f9ZjVatXtTGTh9AJH_Gy2Ut8dTv*T*h?7g71s}esaG9EdR+R0EKl~b5L z@rjZZx<3hGu(4dM6ZqAiB@ntV2U7u>*7a&k+?$Y>rqT?cZie$_(u0hS$S>Ez@@h9e z_MpgY)3#xs{z<^={706j8VhL_BujLd^!71ts2&6znQ$=742ioGp_~=>coXqxv_ws- zF`~%us=N8K8>6d}1A)wq1$SMNJID(A_-kgxyK?nVC7&nyb!vDEa`1HNv1-u@D5>k! z?{8%vWOFVz?$7S*67iFFda?69)oq+4oCeeudL0ITt{(5qVH-Ly!>lV6>?HRX*~pBN zxF}K}wvrV+VN?@=7<@8wnJ`lZQOlV|H7t?~4;;Ex`GaJ&&Ybg@MyY4gof1bWPQVn4 zAg8$h+<1z)#le4s;N!^`5(d?Xx|k8pggYCmD2~m0eD5nnrPwe)!p+n=WVF=UDPQDC zV#rXg3$F^$r%b$>kVnPwF?b$5GUzy;$pu2DCgm_aaRQKXxZHwt1#Q@!rS*?_ z*2PJ{+3_gMRC7fS6SG_2(12t5&Y9>j6S@o9_~r|?R^}WJ@Q141v+9Ig8qr=yeeaUJ zHG~CMMVJhX)c?nf>hMs=kbVHkYzpA<;CqIrG<_amD??SHD@2n4=918trLTgX6mA+@ zlaTNOWS=vrAXq9k@Bj-1*Ss!@^-P~e(@qB9mvD8o7Tx`cnVPc|ft%ZoD6NFflq*H= z--=LMz7q!35Avb5l?!A{u%c)I6FC8kK?3TQ+|P+TLQdp6AVrm)x-Z%TDf$&>qE+P{ zy68na1s+&Fk}QD&aqp}ixDo~S+Iw#9*s)<*;+W1M8(J6)xi@^TqhkQMM|N}zW^@^o zr-1SyBnCu7QsT_OAVe=kfGb>m0TC>1a?>QxCRG#9$$maBnQJoR%{pK5RDkKB*F#o< zkM$b%BPyW1_G~{nw`S-!sUj*w$pxR}{`_6bP0<}PG)ZYHrq-;b7zPP{-vpF`dIXS@ z)$2LdWRhQYL|<-MjJ+~uNxRjWu~Es za*eGn} zIe^rqc0kX`eMK8SRz$=VtTeY(W8LdnZDiGb!-R?MyC9lzYGUk5u`? z$^9j{vj~~d8Ji9>l&DVWoO(Bz;poiR;-^dr?;O;F=PmdUyuKf=*zd6+EukRr^Ja4! zCuCoDUbbs2`{H304K(77po|56804>@VjT&h84hRm_e2*Kp=Mi}_NLhiOeY#T^a;+A z*Fh{7X!t{S=qzTrDd7Yl;gjfY+L_?-49Uxz{2F8VlApe$!6kFX)~4+zS5Ts46Pg$O zOVG6NQDf>eh}hKkF!8$GsxUiTZ-JZ^0`-n8!X3RVtcMpdT*2(?bJ&xS_j{5qER4ZW zVN1`6a81>YA{{bWSQQ$#@bLp+DBetr?hwX8oS2hH68-l8kS}%8raZP+I1RF#$*Whl zyuthy4mL=KYbfdpHiy=(hPNy;U%>2qNa{B!c$mjYsuBX5>)sfx35y83fzc}QXv0ez zXzU(5u=*52w*FezpMu0ef`Cxo>cN9KJlAU+rS-Va#iT5|PFRBC>SCy9OWU{RpJ8d? zBkxv=wXGTX7(&5)vshBSJAdkSVuui_abn(mJ=7==m*j9JLs{U6D{dcW&S2!CzbzGU zupY7GIKPL5S=)O^^w&y;vO!j+JGYR17q21{`;RWtClil_Xr(D5$G-<^*WR#nD zUh^~^<%t5WWt-g;Z`Lv^H4#9NbH=)Y*7gvTwB^;5Mq5iI*Y?xvAzf^!-*^vh?dwu} z6P$pek#{;u=WGu=tZ&BJD++9&o5><{y33Tw#vqxu{D~RNhNGZ?*FJ2EDp^rPxxI{F z8z$U%LYpEhyef@K(Z0HcqbD}#H{CLG1C4ZQ#`@)o3#Fkm$2b0Ry8;(133RC zW`aC|(%CYuVQF;|-)(;=VKcZY6+<<`WJVr%i*`F(&dboxMhvhG3o$GTdynAnjhJn9 zE#g7(S$-;=)H#whlTYabn3HMLe45lLiB-ewMS>KE9M|ttC>ebZO4TBl6@4k*)iscI zdlMx(H5MTe2a6JGe;)@&NruZ#LF|FXgAf&#D!*{fg(Ae@o*+}>5{Oxud1$L{S^QeWWZda+~0?Oa4Y28A>4>)AHicFfhU+bq6=97CnLyN!`c;tS_h@|SI=Cwz{9 zTF3?YFigvpXr9$uj>D$KDclqF=DE@*wh~Hwg9w2~aaXan#W!RO#M;-#*Xe{6aV^i5 zy*beYX`vhPF`BE@1uMZABto$Ynv`lzam6~8plZDLY;r8Q%P>=q#pTZW)=4)kf+HQP zH6L_CmUq{oXenPvZbuY|z=Ne59kZY9@mr3~1)_*_eh_j?2eCB3P31_R-?y4EB^AdB zYU5(!)gTa-Df)CqhMLq-5m-+*)Appa`C+1OPAFj4SJh&CxRhUS2<2lL6{^b?s6l_Jg&Tsa$pyCiAjFbUGxT7GuKV`GN9^1>n_4Hiv|mh#Lt%k^)1olg&luu;F) zDv`p|@{FY9{~h2p$b(l@-U);!6W^|VQm-hakrQBLI%Cujo4ucrm?%{h0+QScf%z5% z)ZRpu!Ev$uXenZ4k|5dtoD2w$O#b0DmfTf96El6G8MycW3Hq&vf%vGT;LDJ_$m52* zHY!fm0#|p!WeHNzeSzB?2o*bq92L^(q|{>1_>yTJ0twoX$9)&1UZ7){u=%EbAt{2{ zl5X^zf~SkHxlGd}^PLjMH;#Q#)K4*FLxH`ojb%DD1Ze>l=zNnVeRUBRWZveL@hd$5 z${vuF1nfm>AXzobSESSe5X0Jv$VfN98P+yOY^M=ipH4OeBE6~U3^)!<;0lWx>nh&YFt_zABx# zfOyr|4k7^XUF7sD#K6X08L4dW5P|CfgnQSKC1Na5p4xHS%kzD|5l)ngWm1yBFm{qL zDg6%L6HoT2;P|`*I=;ZHVSFZeX>s)AFm8!DrUy>%efk_k4jrg=g`o&nW-^b8cW{`Q zxbC+vIJWpLs{yZ3F>-dLTR`X}f~&q5$YjOiSqEa_mKQT<+j?}s8C)K?tmnueIv5v- z=M>OW`xvNBx=SpF5`=NCvYmsp<<1aKI~gv-UWPp?dnqO^;Uy23N+4bRK`KuY zz{;RWe{v_Oc=pHunpL2fzQ57=Sk-Yyi;A@Z+Teku1*Ft{tDrnQngfQeVMm2_Iw`r> z$G5_04s_#?BWM@sSb*{Z3hi&pS~7vz&6^p2PNZpO8!(Z@A4J9NB-NC4r zR+1#QZwn>`%LDr_F4FMe3ujKe8sVv`fmt&k172!$JZkP|MqunIHU;#_@Xe7F>Lmx} z3R!A1^<558sD{q6p{kOi@`LMy3l*d!;ZUk5b9@vytVw-RuScWcWtHHkE8*EE9uBO|Yw+G?$jC}G#nO+C^$^J(`b zqos?>VUWx*xmFuP)6!(_>?al9N67XZxcvGz5{s!46J)PgqnIrR!j#N9)5@#xg59nG z#SvZ`^yr|q!gy0y{2(R)MFGYsx$*;EJE_9W3t)nje$1c=#K7*ER@rilw>k}GX<^!| zwQ`}lC^>GEj!|b(4f>3Gy^~Z}qSEfP?@469J=RVX48mumE0$iqwUdkk$U#WO$?@Ep zau_NAZ(}RMe?ld77LV2MuRwgczlBGjWA*M;WauL8X0&k_2E8x?xEq*9MI{mhm8o>M z>Ta@H!44BR4EB~x$r41Sdho*Ku2K+L%2gcJ5r4+RmdWYc8bRRW$0=825 zRVIw|T(ZAa^SzscA-KeDOQqoiA`AiQ!NVD|p&aLconT?o^1>ZP@CO*J0Q{)8Zq_|I zCR3~sS=k5EFu;n-x+H7ZjX#Cd7C`3Ia4q3DF@^Qbin4fU(1bQe!NR$Zjj`b;T5<4I z_I1uu5`c6StmxQjwUFRGT$I@G&YW;Nw*#P-EFvem1}l3lKm%dq_#Uu+g&?Ur?ZN|5 zmZZh_0PsPA)M49SEe?)}@?%W06tG7-rV9EZHEmuyj`AN(a*;G&CMczW2p_Xg+{7$u z>cYSFJBsy?moF#R4bs_%O*4CUE+>U`q_vvwHoFT=0{T6B(O@5W?K{T=*Ol4P9eKEAC0DBk$1%dgW}ki$tma6z+PD_W=y)TU2(4I(0Y=CEMX;n_r;pRm~6 zrmAl2)6hLrP(tYd;AsE3EOHPJF&aMmA&S+im+F(s>}16vkLkwbq-?A=YCZl0V~-&% zELk5xl-aE$c5Ewo(Is^w!34!W_-&|@ptvM*6f8^{h<)H-AjE*DP@!ZwQC$@HArbP8 zS}b6UL)<12bJ>6{^P49|@08GwZDlUjC7%;0GvYLm7K%g#ODjSBaXP7JMD0xmUH=RK z$&RrcX-ShWREHdHy?t4-b-d*5hcY|FbDCL~jIRUWqOw&`7djajA0W7Yz#?!OfY7i2 zH3n?eF@e7ZX%)OYjr$2}VSZ>xSYzBdsaI5z9HnFdi4*Zswh zT3H*1Jf;@GkN-4T+D9z3LqfNCajN!TpjcNAw8}OI< zEvmEYx@%JcuAD&SRj3olwc6!Sp7L-rZu({e{n~x9Z4X6R6TnBR1XQrY%h~NKNL*-j z<-1+f{0OD~|1JuP>TpRe9asEsaD1JrLfxmqex?pb#i2$L;|Yo#a2Qk|TOg$VjfrWq z)H%R~WI0-X2_~dY_4^or%0W0)MY^Age#yrfdvjGTXIX@rh)off0c2{sSsx}giu)T> zaU&sFia(rh2g-5I$aBI|^>quZhNG;+3#r^9ws6VqVC)J$X>}uC2d<%0E-~eckgnyjKGh$DoZH zE(Ia0`JZa09<1ZSa98H)-)Qfe1Npm(T!RR%Kff~uHlsN){eyl_$YN#3paBqJa6ChSpi-} zf$OW&=_L5Q+|o0M(&c}#bP*ENezJ5Ub!lri4dri+6?q>3C6FA7q2!C|!u~zRRX|=H z!yl3^lKTUTF?=@;aXTEgnXy7iWpmWNaCQ({1Fe{tFh2%2AE5ps$H|qH7EiF*ZYwT9 z5~RPjAC7Flk;KC9Sb%lYhE$@}A|B}hReIZG>60<|D2hVc4U#Kp)x#fXkpc&2E3RQp z653>i=9N|Tus;A?@DYS$&%S)7_5E#RvtlV&VccVr)JTz5ITWe4CaHnYP=HgB6zW89 z$^45bwRPA2MU=~TUp^i0DhWS(ciS>a=urgkOk4gKXkisi2@U`>3t&{rUo#s1RYmC? zcH;f3iZW>kgUw46dtz|TjftsBSdtzXc;Y?~VZ#d5DuDoHRM1~OLFuW6A377xdCREYpJ8_l4UKXsLxQ z=b7(d3_<{oD(^I;m2am9g5i$rcK74oda3d=O%Rf!h-bDV`C#}#3}3JG(s`y(s*bl2 z%^6US1M`@t=MYdbio)6^{!_HgP|S4dQK+&5OeaF#Dd?7n@P%~pW#cqhh1-SK_#fvi zNSS9**@tS`^-}+>psqChp9S^fgfe6UCHT7mNqn-CC9Gi`AXe~G3K zkWN;=cd~U)`3kY>lv+?6!{-U1+pjIemVb)(P#CTJe-ZEf5B?_Ji+<}ROW9D~s8NRy z7&tVhlFN%k+b>g1lfpO*-3Hu^%Tu+OdqV9DqEWJ9N+_KX^43{?_exmuSp-VHcW7|? zx)?`qqhaF5FC2I}s(0UFCLJhNcs$X<@aqz>%W1BqSP*Gi!umF|f+yV&YZ-7}vA4@& z^I%crT~S4`;(Q=s3}w)y&$vGtiQwZ$CTN1{{` zzu}V_E!OnYKttN9<%lls=(EgrrR&Ef-52JF#am2dfpb4e&F)-ptCN;mOc+fKsJyvQ zA!UHLdl;^RyDGP4?LXHkGCA>#Pj~eC%a_VjlbKygU$?KR1GIQA7o2k2_I)@N5W042 zlW*d) zA{v5JNcHw6pi!*z{o|5WOy=cB`unUV4NIFf8`$A4#^et4OS53T@$G=Sk zsREkwAs%GyHl2uzN==u!2R7_OD6Y$$sIZQWi)SL+oVkF5E1*~qLsnp`tWE0S)Cb2> zeG=eH%`rYzMTFET-2Y3b)DT-qexErnY9QJa5-127!hT+>vGjA23S?F1?FtwLsINoeOIkSFIc`U$sZKy>J84t zV7!ES7*%5shK!w(u7d7xZP(MIcBn9pj+wFKg4ijjF-y^$;lnu54N&z_@JO48I64OoAB$;U7{A2Zu~DTb26%Geh^rQaweGatT?= zFR&LQOL^YwDsQY_^Gwa%68vrR@(v;M)9sJVs|5z~^QtM~tT*N)jTV}skW+|XUfBcV z6ufFlJPmvTK`1miAe&;=sw?1$7ErU)6*z{!1jY#4$Q`@yd!hTj|hK$t)8j(w^LU&l+dT=p-$!3{-MRy}1(s zdBSU2VP$W_nFDweFIKPodL;r7vJ7U@?e10u{CXcYZ7144xWMd$G-Qx|zoA(o;P)qN z$}j8Kr_RFbqW=O0^(&zNFTk)~)0=svRUH@%H7BQgue7Qq?qiUUi~jy!@?@`HwM6_i zVH$K3sV|_P=MQFP@7idRZ0h_y#il*t*+10l<@)Df;S(t#e zb)R059ZiNk>B`vQc>7X1dxM$zZw}*E8mSMb8q`bviiKRvaChDW>L?>tIOe+wOZ^ij zIuSzYmi^d}91O_<6I|*a52~Bm!jb-HCf9qQ*;`h754ec$#S0?+C&qAPp=il=rZCC1 zW|_np>bK2KQhteeySkD8HW-mH{VN!+Y)+tij0{Fb1Xe5RX`0;!b_h?Du9KW*GWRex zP`xn~~vwsmhd(k&;W4w3OYjfoVq+9Sg6d+PMX_octpZ z;8Z`wp^?*~1sY%m^%`&8?_3##OR60<+w3;Hc;M~`hRcJ!5W9cGU+X>p9b=ZyK&H3!@s1!(L~%bIYd_OqkZU!s}FG|11HjSny?S*7RX?Tdih zJPJinf#<`OnqrWqGfRtMfelwQK+?$0$&lA;#8sOVD8{w;Zg&;ow6;ZR5=c%lWL7`N zB8Acdxex*>ICkcF{HOHl&Bg=ACr#jj1?X&TKO-yYBpNls5cV~^r*jDemvJSPjshN< zZ|MK#?tC#pCc;&h6lqqQXhA6mExtcS0G+9iS^95ZY6a-$>H*fy0Tx^0R2AO83`S%y z14lmN??v$|3PN@RW>_s%)sN2-0sR>kXvq0`S!aCWyd_q__JoiMg2`%aJt=HCJl zcQRY-8+HEAW~kgz;DLsx?cM*3#J_w-FKqI1QKDN|DL)-=T)^?Z=J4Mf?_a3+P?!%6 zG^_W2Tiyb4Q>@`8IPcmb^&g_=bf%145InsK#V}ClRVZ#YkiG|csd~sz98HSC3EB=W zLqm%)gXE@!!uaxor4t)ClisikNSIvoWaMxnm38+N`Td^ z83#B7HCsWFoiezuWQ%SD+Cf!(){0m^IFf7zxjTbAWcbXBE^eb}j3JnW>g(KXC zlnZGfAd8`m8FrpL8_~JlZ9Wub{POCy+UHm@>0tZd5xjmp99lX5e}trD{|})TfJ2vr zFAIOFi!fPNJ^-Xvv8d{mQ(ihZXyZ5f?Nv~MZ_c8ECl>A>wWhKR*gig*0()V@L)PY6}Ax zKk`LBMuTx$VL8|f%ldoy%>55APD(gvzw$4s-~kjNKvvk}`}+(cr2;0!^s%xfd=A54H`JVoCA6d3p zmOGm{p_EPMWBnZBrvH88X!nXJ9su-;qt^+otV^T#S88t|(@s{wKEsPJ_`hb^TBJC2 za7U;Lmd+ww6p~p=^($f1(?F6p-f~6xt{Cw>tT37)ZcvLcGezS%g!M4cT~r8D2vB3g z3i7f?DuKNiMU)7Ez-4+32&Dti!BaS%O<^QO+E51u@rd4rzQ$`j1sv;@0X@AtCbjJ? z8vXD3$6$dBCukVzD|$^X*rm;Kpjf(8FI%>DZ;?nZg)f2yEc;XVTazrme1ye+Ah+`C zLw~biPro*TcBd#6(5#x!i@~^chm|N^<9d{JfzXTa6I7|GF%a7!dkp0_znX~f+ zl$#tj_8=}8@Gk`D&d4rZrClD2XDv5DA>YQfBv|blk*@qy3_+3ZdoGLI?4cbL|2c5~ z;Q5saNBdWZPJHddD_J+n_)lE$q9d|Jbkt?KX`dY%eT+1|P+Jp&U~RrPVUna;&dCzDBK4Ma;Pa6e@i$~4IB*tNnVeqrJF?NBHQn-OLeh9}U=(tOZ)@_Xg$XxsNm1iPN9_7x9AOrvC*neMU4UJWV7kIL2| zrsH&wEuQddmT@Rc*ojRP6k8QN)OML{^yYm&)PG){TdJaYGD>wasxI?fO;jYg8c|oP zI*UKWf2CL|O2WN{9Kjw?^efC=R2KnGA%B9^>y$#lI#l~7ug9m0kBJoa+YpE1?;+iA z!xi^^{iIjxNwiLcEbD+2W^8XoKKX7ck(eWr3{}{W*+2~kfhYE>ERJjbL#B-sPrng9 z5S(&onS4y}7$d+*a9t39r7Nu6OsCTf)2$vdL?Z>FI%}H>{?tG~VK?b6fq}GDab&Oo zvqZ)|SovxJd}RmuSzOVItQ6Izr2rdtMPh1c1ICIYyAY1Z zYsgzrSeG?s$-XaF`&Rh}Gk&~t3J3Ns$)L0Ck){Xfny>*XeI)688zZ``fNDwk5hPCA zcgZnk{I0bdCB{+*X3Y@!L&f|i(9mpDM~F3&o_+~LCcXB(EvyAUpM=#Vc2?`;7(tvM zQhjtQg=qMtxm8wyO`NN|h-doKBT+Vjm^;b#iHTW25Miet`a5lY1Fq3!b7dDK?fyV+$TxdHh_7nHHuw5JK-+SO5{QY?x~lVAkO>!{g)hTk z@x``@ZQkstU7^~j91Rn&`d3~S!>AAuZ$&%5=I%`-3-hZQ3R9N-dzpp!A-i~`QU<^I`{3CAvLMj1_ z*)R++{N?Um*DORm{;R#^`+E_}zoJ|%OnmBTX6eAq$EV%5MEqg028cf|n3+s5V+N-h zkO<;}=nxsB@ibd^X-Su(>&S;eAlDPy>*cr^B7kVf+q8WGQ~inB_JehLi7T;(f`!iN zIE}^{#)@e6pNv0H3~=srpum;c@mjQJ<#3Ad8Dr+PSybg;$%ns@&M z@T7~1jYJGLj;QzN5t@;C?518oo`{GGs0DjXewMV1RzAKY*1OpU&E;g(F=OnUrP*v4 zZ1LyGHBuWw`cuSB?ZhkC+z28mN)?ehKTs=VTg6>i@|N9P?=4!DofHcT>CR`{^dxyu z=ml@^a!tDJ5nSWuqzH^MhI^&;5}6;1Rz#ROHmI;>d+^DPniUJn&c+27bTtVoHqBCk z=LVyP^AzX&N`!-c&@Ih5m9t+Wh*7s)$oT*qKP5N`^mX`FiCR|5OB78#1O)QEqmaW? zwP{s%gR4HnG$7U)FTAFw4o5|08w*7TSP{rYni?=>(?qypCOx}T1iG0gB3_Lkl6&A= z9O89VkwqXi^b#ghjJ&5I;yTn_zU0SevO-WXe+6wIgW*{R-^?}Ds4){cOh2KmAE0+$I#k9SlV z%{U&FkDm&KMLpSJz}{m``k z_kWh1#k25F@B6k4Ji+1AJW-MEbw~&U6&BacAeh%*DhW=g9zhy9NKnLCZjV(U;QxcZl$s(96Rd@ZbN-kh#v_` zQ%!NXToG>3@z0(b<1^P-QZyTcXdR2G=efV)I(M@&i~n zW(QjG?iGGKGjYr_Q0=H+|3i2C4Iq8%DlGD4aWP~2bo53v?1kW(|=t9C;T z1KROgAE3{!Tnd1C!MK{9O#2_pY&eEb48%>{?#g`obf&&3>ZHb->Q~fe+L^(6P&p|4 z3$ZkVge{uUKh1#Id>13R{RBQOVB2(VjdENtt^wk*+0VKRi0jPwW4cnYNQsooG=kPc z8+_#`Ks_9@0AzKp8VDHMKT{ZT^;IwFpoK2NNqHs;99@FNh3l;p@9+m5D>tUTl69*~ zU@Rpn2_EQ6zN4pkrGANSnN>MhdEh?TMsTa6I;P?Vh3*6r3^X2dK@~^7Pv%8pMX;YT zzsq_rvB-Xigronh&Cy)^(zsReqxWa<3Xw^LfqfJxNu3QfzbHemL^IB?T8*PqOKla< zbbR&21a@XpuWPzMx2M;&!ayhp?&J>KGdvx4R_tted$5oZa%nzdYNL z5hfMcsjp}Vtvm=V^Dd^sO|FGOSTWQU}4fYnu zMH+ALe!{x)wlm=w-FKTP+{qo&uz@tFgnN9yG}iRn$*;C<P{f=k%@S+ z9@CWTK$GDe`wiJI=Hs|@A4bm6jPtCZ+nB}wH1CXtw~M58=oUuItFCZ`Q)d_dQohQz z_l(coF!^WJDTc@p|Cvu8o-8+vG!fgDMjJ&y=7$AvNA##6E&k-W{)tN|x#YU7aSS+g zTI;|Ie8?$HzXX8`%IMX5Ty?3r&&UQX1jD^@$11wNXa`U3hQ+r3_`+lZAKHUb$~yTIqTef(S-^j3ADZu^5R`d!s7ExD!rau#62> zC%fPT&M4?3lEcmnmSO9u(5qSFTnGFrV;;E`cm{1}PJ$i~^bZ=I^e=uU-lbentsbR| zroNLt?e8p}%XXLS`zIH}rFYT5KeBrC<-pp#q}VasX1*j2`y#+vKP1fAlb zdJWjyQ>IyT72@1Z+M4W?lHgX0EFsn{P^?jrM$pEIiiQbsWD-SVV&#h(x7^ZEb}09` zOBC?$wE^gK7i|wdP8RmUr5Tu~&iecs0#E_|5G^6bggpZcN# zlTIRPeTAQsz5beids@Mf7S-_E{%+%7>73tU!Jf!0=8zzV-AZx3BcidSn|zJXpd06& z>6@?PP2N4nztcacui&eC>Dx>UL1zo2>+$R-`r1B($W@}?FWCI0=u7T<>1>H5#ANa} z045o2y0PIc#eko%$Nthj(|L4lnN*ll_&W`migCMnA&CcFZFAF zM%77mSW>~Lcz$5*w=O- z!Sou;)CM6zjx4IVrnV(yu0v8Q-D}N>8W2y6A4|DsMo0;!-{8GFtk6kx0Pep@a9fA_ z9C$Mg#cClOlE&38$2 zh3`mxx<7qM^ZyXc_r{M}fBzZW=Xz5s#^R;)JoN;?!~@6%yI@TS z0D$2UM4lNXF#`L}ST)Y<>H93r?+rqWZF`HmO&kWa>sz@$%<8sz(aF~K9)J#z()%z( zkX;~Uk#hUUcpCeVRI{@{s6Fe1d?~`I(7md^RO+3UL9d99J7mvzV^4CU-k=BRzTU^A zjy;;Sl<`M+%n@oYgLY-1oU1h+rBm#bU&U*OUpa0a;Pt^x{URB~5 zkQ9YMi3H6=w-SL;+io8bo%?C`oD(9Kv*LVMNYICI37s%Pnz>LhwDY@alY6DHmB*V zP}$TXTwTHkLRMZNCau|unmgz307XvndpCcr$@RaZSF@u5;5abH-H z5rY*%YX2-UzjL;h%4O7k4BZ@~S+_dv_qk}%Ukjo7)TrXtWY>Ypw|h{WUQZFpm1t3g zm;9^Ks>cnnYyvZfx^x>@>y^BforR+Ry>>%ZYVKZwn|{MnXZ)>f70lP&`ma3}Dr%__ z(okxzJr>jst1PMBbleq_7GJJs@Dbb8+XGlf^pNQ~*zfxWm56~zbnjFXqe}^%Jr6-D z7oS=msv#;Nzk=~f;{%*kYSi$pPf;IoOd>t zM_VLMpTk&!-juMjnh61`tHa_&gFBh-X(rI|-LOWGpw`-eR5E5W)7dnkCZHo}XDQrO zr?cN(j*6Bq78esa8AFq%lbHilrtgG+P`EbWh6uUX1`W!moiqpz?X>#a7A2O=RSHC2M%eAXMAkrD z*3;IAdMyCFOtq!JJy`=8A=o0`mkv}tkerZ^!GFd7&i*S()4QA7T4zasnA+jAsFdXhjWN64cG0CMRn5C3^zqxf+5$uTf%CkyCVM?=NSUnId?fd? z4Fn1d2m*8U3%2aWjJ5l^elwb^PQytRZQic?#X~un1 z!nZP3^LIq@KZaA9eso5SQU|@EPw1%r%`iLP^jRH)D0+<#GNb-dz=dMYwJkp)((#ge zgN>$tW8^N1&F5;`JVrS2MmX|N`Iq4!qbIRi^E*gsXT-&-+^0pKL?n@u_vcca5V2J9;P^xVe}lhMl}g z!VFlnim&0MSOXnw3;JF&iT6$T@70t0ChlqYUjKRHS?t4+ zX7hJAH?hf%tOwn}B9wbRihow2ZcxH@*>L@^Lb9)$mz1*B;i9>>mA< z5XB8uBK;es+~J;~Y};|Bx$o$^zn%5#P?)Ar@+pQ!lVUs78j9J1-25b|j)|f7+RjJJ z7#9Hwz8{z-K^pR=1Ox(^^m_HZ%N0qs+wO}lNjx*QV)+DZ`R&T;A3&N62^!8fufuRu zTYLB?-Q>Amy7aA$*Ti5}qR9Z>2>cVdC49X1rS7+}6C`)hfyhhaAa`Xzoi2o*!c95QWfag=cN zHKItaIe1sZ_k`C9Eiu_W`6gcWCs*w!)gJnjxNwDxi4X!5&G6+Mm}irmJr@2lm%Lsl z!SFlUYKsb4*jzRqJ9{(21M)-6S~r&@6vl=px|ZdhfI`Y1*7z>s zL(hhxHUARfmGRbvJSo^_FmOqh+8cDgoep!Wb%S+dgLFliCBvmfFeWr8tw44VYx|nEtBVxk-lny-x%nk37-Ff|Hw{d80uW2F6`8Og|Bd7SDv76Ir3i z*L7GS&XTn7uoAfUZmEt*q#uXK^N=$mkpTu`W3j3yU@lCNQmXlB2@sQ z(Qc@5yH1eCHulL3TCKf`gAGzAW<)Woj-gVbvVH_p`CclFK;Uezyw4jF4I5<(-CGJC zqFjQwMJT45XbTyu3sEed91s;7#;c-J(TG+aT2>MUK@8HGhY6@iSECjkh!#~1 zqUzYvJxAHuTap1$QFRb=&4GG)q7f)e?4EP-qJ^C1s+anKb=KAq%LdAcvJSGoIzlI; z9My`>EtK zNvXSbQ~HWI_(x=j7g)OHP{m-L399;mV~q`cT>1XUzQ~W0(UbLJzDZ8+_syz9K*PqI z3hfVZI3LKzXSFdxmrs43Dub7bMYzmN&7VTYf4XAO zgfDVPkxxh(O!i_$f(!;flw704HKQL)suHMYFvV4<@zxOJ{1Ho`Ql*k;OV>}kohQpw zJwwr=Po;?SLeM}Xw9{E4BUE4rmp~5^V!mMe@WIdD&%5(uNHgxU3T$r=LnV#^6s8}w z>yvb<9H6&%>lx-hytg9CDOlVe$zl|Ojw(iz6hk3c+>!l6N3=$?_KZZii4@d~Wb+%< zb%gaMw;3kSg?Gkvvxh^ig1XM_xlHufWV7qp$wp$mi(l-6>Sna(z@0p)qpr6%sTqVS zIVBsa!S3l;#dZs%n7BoX!L|~`s;ND}qjl9{eOE<-HU!j|!xWWEbT$i>Z))3%L7#^W z4>aAC!>E#kIGczG8~}L!Jfb-4f=s;QnA$)rkfF|QK8rsYj&O-C{}Yl(3-Y#Ah8iN` zCKALXYUHEOjVO+MCuZ(Eu@F5DO060dK$KcSP$(H=0WB~hDiUDYG&$P0i1dOt*f2|g zM%Y>LbhqAAUmlvoi0UvrID7?suhZTaFhhho))j2mtmv=>u%212}CmMMLY=K4{#p z`xL?9ZaM%paS|v_MaH;soMDmhq>3&c0y_hqk5t#P548ICRz4I8+K8O7XVcHuNKc|v zTW+$=hy$L#(e7EmA~#6?ex%P3sx&}SuuhY2N5$swloLm1@HDwgu0>0p8|H|fkpK1z zO(~yYf4>faH)>Gev8g{XAMiCwZZN+!GmRjMQ#FKx6TLO~4GuTrbHt(>hk{HLUwx_v zf|$`XJ4!J{M6w)NOK52ePimf(k3QW^9g@>0$^%*jm`%Waf4KfIP`u(cs0lqw{DBaT zXG*dNCmfbCnAm7~vv_T1P%S+5q)lj%UM594Sh~_wPsM?%s#6>BjO0o&4-{pVS$YVkhvoxBo=zo<}QFAnMMGA6l%hSb|^nf%#Qq402G0> zj$4%DZ&>*QiS((QEuWba3osgCQ6cmC$qgtB{N$v?d7&c~IZnO%tPTT6h2z?##c#5} zsqwJ=r!d$^4qg%u%-pSrnV7?xGc`}S+oySC)7Wj`j~p1K*)e z-XGC)M_tq`8NZ8}ytfFG)r7|npXV^MLi^pZs*jbGIG;8eYE&Y^C%_f(k}oZ1t~ zU{jgc-uQOjTxq-nvvQ)F5BVXQGKgLG4Q=mjMsopS`aEDwxL9ZyO`wOq{LskWNk5k-(ca`unCUQzH!{oS;)jW} z11z+U;!?k~-S{-gNNQy=^x}+ydRW3ImlK|F9BxOKFfcQGVE7DUhplMD+Nz5M;CZR> zaAuIM1q=ED=pH6xZu^(yLJ`&Faq0-<;F-Sm1+xC5H*5%7gA$9(Q)aFjRzskZ#(iM$ zUcGH}p1&-N6R_{RSk*?}H3-MW=M4W<a*GV>FoqmT|Gi4% z%aYWNh0>0!$hmLQ8zw>)Z0pAcVzl%EwEHNTad~Ewd*=e)NmMF&lO?9f;V|-iFaxOS zNM?6m$IMeeRZ;>VW6sgp0K z$X0`()S*teM>fE>gwavKW~m8F;KqE0sNY(Z=ucB>O+tEl2WOm~G6^h$F?qd|o=rk` zoSK}W)8LmAK|OQP2f5R{7}l3a1V7B*qj8)G^~3uMhO`je%XT zP`~m|i9q`dnJnw{H#s}aDjan5rg#D2zXa-1(DAJO{$Ga=X(d4Mu+R4ew zLWJyK!P-+_IRdhZ!mRSY@H*;H4Y)5xzvT<|UHCAO=zCVkK9^U02l13vZ0TNNqS11Y z|0AHc*|M^ZtycL%HS=+~pIKL(zsjWQbD}P#NZy|CwDA&OmkK2%I}a?hTr^AejgQIxbPU3gGsf4xt5Yu|H+|5nf}wk??t(1z7`?{fQfi)mYc;<$gqgIbz?Jdnv1(B}5epZC46TPs^ z#};3=U#3C?!016;bX(%d)yP_E6_T1mpUcS|UV}<^O1i`1kRNSAUN-|nhd+H|orh1J ztvbX(w@VjL^;-@72QJ$;MpFIQyg-72~;00Es8Z<5bOcT z65HvkaAG)?ME;g`(G&oM!W>Hhy|NZjOK)K>vU(hyg#1P0Mj(hn$lOrFFJ5zN7*p`% zqv*)&-o0>y?Pek&X>wIVKdX@td%kb1lg@mm*^N_QGQ5`51v2fVEM4Vsq{^g9AmwGY zJ5-KkU*PAWUP)j#a>Bv=`=?{E0F?>7a6VV>rikblX7(PlL;kuVEYu$P(e5jLvDYl%ghr67mb#maDiQ zLWi0vW(+~U?3RAEXu`ANFoFql^^92g?B@jUryP#-J#^@Rwz}uo;R_B!c#cY50!bp6 zTVUkvDg|xGjb@S6apcqe)AEwtdlvLvL#8Cin7g8-V6rD5<9Z-59xnhsz2@N*yHLbm z^JhFv_vczDX|MW?hNlT(A+tSHW=k)#TyX<@V4hdquxXQF`>&i!+2NWxE;mWXb_Ppy$*cwm5P073>m=3r!CE4^uT z;MbY;g|k-jtWclCLx&nuP&1ZHilF?pO^6#!Cu60E+zn$;wv1Kx3|w-%Y{!a1SD_mG zv%3}aXAOEUC=mL+7XmZPu=M?zq>A{nB@K9y873A1KipV7Uq|Ft%!t1(-MGDT3V`t2 zd+x5JLO!FhKOa}djHN!PK{I7s$FR5PNf%l_u`T|l$MJ*NaNVhltmiK0@vW*ayifIr z?jqv?KV*F{E9ASNzkdG3JJ)6XxIBUQTZR979-IyOkgnQv&Ge|EZc4dO5wYR1aD!`g zH@7u0G1X&cFzc(TG3WrfZZ$r=PeT-0pSdDr7wWM9o>hZ7^;M;=pM8Z09oQl^Qd-Nj zl`ePlM0DluPWYIzi((dG(@6bceW_y}qxFz}YxdxLo!x>j*0lq?igXo5Q=|HUWJ;+& zEU5D(4oQ!V?mxq%o-2~$N8f|P!^p8!;ny*&+j)aC1+L{J=x2i}5A*{85Tb6r{rRqew;S~3Bp-+dx0W+s&d7o6HIc#$jc9PrXFq@OWn(wBU_SW*%@M}ux!6wPhl`vu zE>G0sO|~g@{&ug*)Wa{T)ho&D+v+YQ!thSS0*ql^{Wu7|vNC>O42zqb0}5%hn>Llt zZKUQas*xD0M#|Q~+u~tl;^N^D>@oAM+$|iR&GR@1^U>eI|1Mh%&B33ucK@cczhCyB z&7#O^5xM$yC+f@Y*itt68W&Z!SV7%`N7DRKJ$o0fy<|wMc=na44QO_o9xl4q=K7x3 zccrban6q(YOTmP-s;njX4|5G6OWRwmxQ79waS?likL1JYKGCmzb2ofs{o2G3*FY^j#f8KUZ7CDb(YJdYn~9`e33TY+-GX&a~^_wln+y8;|^W0Nb4edwS4x>9jnZ76M@ z3LVa@1bR(aSKY?(d{)WhCkN-r*N8GAkg1S;K6wpr#upef6bUK3Za(g17Y~*CO%#Nl z_QG|k6A%+vXhn4?qO+^0adY~dASQuMiY1)pA?c?3_8{tZXW-=IM>)jExhmR`_fX~p zhg6FfXq`RZK+Oq!^a(@)N!j$8m)Ng z8aP$$!p-twavdB^#$5k$d^+ug;rPMOVI*qW;PA3A6|~MH*-{sViKdG)nOQjT_{Q65 z5mp{XUfxEQJ2+F~s>~;j`>DWx?ZdNlaQO*o1|?SC%oh1)LwNK?DS7gwuhhT!o~~Dq zsJ$&OKDtfb`?`QPj^*bIvHrnDG>dqN-zIG;9Co!TY%n{rwgjC&J2(vjOJ^FGCdk#c zGH~l%<{lZR&;hdQeUlz2^h^nxP74w`VT9&0BA|;Ui1YUTa7=4NSxh@9V%gWktY`C= zHkyO>ynTM2h+0ka#HOnLuo0Vq#&@j29f-<-RU-X*=U&i>jAL-d4V{qz9Ih(HtZzY% zLK*;!`z3)6z27*Uq2kG{G0Bjx>zXcd%_U%_^8kqxlNDM=k5*#Sa{BZ$xpHD{?0p0=r5jq}wMPD4+Xi(}1Q2QHrxrV@eql zaZ+>8LnZ~1PVFiovlZWtvGh`*UcCwZn1t24+V$Td>M?!q#hlg&Q$Rt^LZ$2fRCaxD z)h4Lb382Ea@IYElyl&Ma{1LY^j3R!iQ`ZKv7-9)h-mIcQ?{TEDG>=@`cfP|RBQwvp zj94}+AKBT^)WC&n;Lq+t3(8%DdeTLC$N~qbM@RNeN&2qrk4@}eS0n|zsTKK~5EN>O z`wTxl`T>rf+3r*85>*dxmv({q$sdKpPC5?Dzh;c$a~6OPtZ_1(HTq4RRWX6L9%~cH zKYvu(#rE3B<^D}Pv8036+gw&q-WNa<(ESg*!XAJ0=ppdj*LZwjZ8pI$=3#_U)2C+e z7gKpg6)`8vYRA>a9daNtGg`Owdv(6%V=S{qjl*sHJaUE+`!9=%S7;Ows zat!?qS*jWzs@{@(V(s_W;S+^Sg4MZEYJW;&QF4L~FLwg^5(d7Z;?lWbH=K^^3@TRy zP>GXR@!XF6LR#!ROk?Ys9wO~$n;{I%mEFp3?h+m-rPgIyh65H*2^lw0x<70^CXsl` zc7^7#nhh>mp#p{_^v!r(!xQEdq#J-;ohgGt9A%+~`_x{XH#oSxGdKydzcUQyl@zLt zQ{9Q?6}r5kFo_{>9Z~Imt|1B5AMI~7I^)|so))o>vY^*!MZ-}!D#N6-IKwxr-arhD zD-Wq|(eK_$nQvzD^!za4a+GQ1~KW;aF2n8m3Df=~EG7qt8ihpH~BWd&sa# zCXpIN?TYixWAi=z)vBz7(i?w_G6(A2uJMwu9zPrGd4$qmfUN^|8FsGpN_mOIsXdPb zXCYsPE@^I12H5r}Dg#j3%ftK2dZ)WEx;Q5cF=e;5%=!lT&nRjS+_l-lw;TKSI2)qn z68iVN_6NT6?Rs}fB4KSxry4Pcq$1@(XjNZ#W~k1hG4Zy+#YhRq%tY!T7GH7gO-wkB zFp3K#h*QqxQwR!+d)SX2L<-H-N!=IYMU%G{#fCiwBn7wJ)I~8K=Q>k~U&WBcpeqsj z(J8UX(h9PMFNY$g3^pnnXQA@sN@iln;1j-U&`fRIS&v#T2f8 z;$;W1MzOEa$8;uQ5s!ors-&&P%{L_rVMlN@lCcBpZT!wv%shvho=~ljHxgu8aHDIq z0yybrGRS7@-&Ru=*z|6|H&tAb>J6BB9gr31CS!gP<~{RX6BQT*%(KF6OAb}=q&iYbFo(j>9Ar?^!L|tKEyVGl$||xlhyPM`pfw2Z7~e-Q5_O5eefx^?kmI9yOy9!{d}TLd;|q)umQrkeKGQSc1?Va%h|na6gg4{w7h!Yyl`K$g z_zL&$oj7vt3rZbc<4eb>7A3U%w-N8yCwdi;Uc7a1I4 z3?Fvem}~CnRC8B%#7%is!dtLeTxwhbYjP|Ccmxnc>iPHW8p!cj7M-b6GD~VpmyeLY zbYPj=3uu0HY4mfgV%|!ZBTnkvPd_TaN;b}W;kEl}TZFhdf`~%g+*mTG1807e3;-Pf z)K!KMLj<9JAB%xU#Fj}V*|lM6c&e&PYo<;T`pf}@`r^8`_&vzXU3QyIil*!4NR?iz{2V~}ex`d2DV)km4;j_zvl-+U?)|$n2s+*RG zzs$PNCXSA@(tqNp4D`nvH|6)W%()A)zj7sro8+DNt`i{gticbbB4^A_$dE&=Bh2z`4xcdfRW*P0< z5_vskr+3NS&=2ny6xwS-((I4(lmySa&wm#uo~l?-#drmrRTus9k}PwUX;j3f8w*@+ z!Ge|~tE1~d*h9`3uShJkTjoMco;{_luFwSa7Pfxj8j0KU#m)FvZhb2y$d3hln-6ij z^QQdOWvyi)Y}~F9#V2;Bu@Ig7@yFyB-lNHJ4{-rea75o%u4h$FPvsvATSP#jiBW`I z>}K>LI{=M!^~$j@jTF^4=Lj5oZ&-@Y+Q>)KZ`CYfnZ)At=^AyyLGXA*i#Qx?K9-A| zrlBgi)MTuWy)WBOu(D zig5{dteVMr47D2_~Y@mhw!!j3{3-SFkq-xG_(Fd=Pjy1%+5?J^h6RkB zqFwVT@G<5Wfzy{J?vq#w(enE1s%AFA+5XPX$6&Qtenn3Ts3}SV9)Bz*6(ovgd|^Qc zJHTqfs2e5FP1ren9gCP}J?*OoKb-2f#(cfz8mPD^DCoa6&c*v&c*e|>^v*CgV{oQN zHR=>Q7c=Zc2;2(nU^&Cb%-?&v;k%?7M)i3FSEKM5n zo8AJEvV}1;PHexW=}LP!VJF@TNg27w-7|QmNL01s*Q%q#3RPDDuoY>vIN8-2TTMUo zSz&w&U>e*lc%#ex?SNe>(Ka`b2iN~qJ`0fSkBjT;scoNw^|hhrsZ(-hKLoQ+!ICOB zvj3L|tqPJz`;#CUZ*_HoBxC+{Ui$+E&8Ou}e_j775Y?{8&(U10j=XP`_M`7x^(t{o z1m1TPoqR8l+}NA6c}6OQmlutFpOUh$ z3?q#u7fe11oPRXYXap_)L5;t-a4*K?gN6JI-IzM5o!C6{4$S&V0w=luL;*6rAFk_l zq{^5;*YHzU+=`NO$W%W|IJ=xp5SJhmcQFy(Zl)c=b1tI;2t@-prpYhAf*>zEE4Lb1 z%NDbX4js{|Ax(M9{f{t-vDWy@C0$nsa|$uaCKKPclbLn%v&tP1RWXlq{ZCE8nal;U)`mE$ zkX+)r@)<#P6`lv7Ji0b){b@S4p`D~lDLKB))|GJ=tNTNAwPIs8VzWzw4zrARxqOJw@s%jQ!ZLL*rgY@Q-|Pq0UO6evrsRi$Y7g6z z;4$Zh-?V0RXK_J<;kw;4AKk}F{}Yfa@eVNwEM#GtRlGX-Vr@xEcendFao}{jLThe8 z%bw91O}&Wi(!RX;PI5CzIGVdbe&iAcl5|x5q=-oCq-R?NWjTODXE@Doee%_ikO|dm zhYF{!4183O5I!&1syMU9q;T=+(0p}~h8DTs>^DXpG1FPR;qvxf$zU<|edyd5{%Ee+ zF^&`bel=EjSoDiWKJNdKjxG7lRtqp}T@%2J)v=Z^Hbqg)z^udt>+?+BpgP6D3fhc_ zKRhPENzQE^d)%(4_>+_Q)~a+t1&yxOj{v0`N9WkXC~>{u0MZ{Yh*+sqFP}Ou)PPv z+pcc*ht~(^hc{{l!7T|&xDfd_s6}WvCJsBC6=U=sF6afLi@&5}B+H#}##qyXvF4Pd zPU;?OFU9PSQMwCwV z9I2(hcsPrk=C?`>=?dsgr%m zE`22UhgoZUA-f~@hk0{ELgj$Xy7UozzP+RS;g8dTT*9%`Q^>Xc?`QCi;T`RJ=#zD8 z_j*xrac^(W7xC_X@qymWU7}a<#^T>|kQK(?gI8=(dFF8z$?^EdzHaJU+3rEois|Ev zLC+f8;LCJDC-aWUK-QML;qU?Ap5zRAyDD^8)E1CZGM&;pdVbmIdD=a44&N7txiLXp zgX(-ATRg}aU6*3dI%+a8Cd?yp-g|7%cF9V(=K4x38JmaiXX}b4T1WX|87{iFJHOph zRkvwo8o%zm&v&OXf9xfW+vMz=*?s>Fctmja9^j4IopKoyfaMCh0lL#X7!IF_i&M<$ z_rgQY8y$#wb=_UNhtA_EbvlrES{h%0*Yz*zwh613;Oa3;07b(x=+eo(d6;-dJyA)g z1Fq0$dc}jV1m|ia5jkuM19u_uFWnLY(8$`o2l&wZl?6_@`|TE*W9>7i0G}zOlSx}z z+56ocC_a0rgfqT>#B&Eg_SZZTGHtw60n;YAzY5)X_yefQ5Ti#6@=#OB0uQ-SHo;aj z@4%*Fk@ah$?C4#8eO=5bOfRoWwuUr*m~zGOBF3p7+{6>Jb^3VKX1b!zVX6Ww-#sUL zbP!v8-X2vnrLtt|6WU4(Fm+~$YIoTsAr896OnN56|HRT~iq^K?GmYPgcGb`VprA!g z30U-Dj}<0q6PYr<`BG1|fJW`24ZuXJL&7+`(p;^F?u($c5r;;{DJ<#=Q0sAt;k8FY zu05@_ZbeK-OhY?h1@8r$#|xJLndx2?o9sKsEyP!tJZikCL556d%hj(y?Xf@4jvl%5erTzpRS zQAh^zs;w%&RZF}*R2Z4<$c_u=#6_)W&DS~9TD{_X_l3dBxJ^O_6{op1ESPVPXOjT^ zO`*G;tQ%P>9>bd<_jV6tcEe^6viJtcJcX6z=UA=EuouRrG$d<5SSQ-kN~o$Wr=OQs z#f!pb!3q`?5Kzy|@;tm0BlwlXqR}|ViA^R>kI9<3i=!M(OJQZLlK}Hr5i`I}dO^3S=$r-x(TPyYi{l%DNfTK@$fh3xEZnQcp=l@?qC9SwNeICD5AF=1#^ zm-?X)m!Xl!Z2#h4iRz(_=hk};#8`?1%A@r4_H4zh9@3m?wc6Y7C0&rJv*e3e%^~8B=f?^gBt7kEz7oX0ggfyAw1*f#Nl( z57aMM6`>UfcBw`z_C@w~*I_*fUg$F{ybv{%K;LLSf~w()elw;+<%11XJ#QMMxKXe{ zH`2KkgOUJ};&>v?j9lfc5Ywt%%|~5>Vk2fH&L0u%Z+89P#+oVI;;NPp@&j=ARR=ew z&4^t@Z}RM}FKNsC>Lm1wf=qKFsJ!E4SVBC1jsxGt6tBp~p(UASILK*n{CI!jO!Y`~ zfB|68zx6!fh4#$t7yla6_!Ibc;tF@n#lm9j!cIOwf;lX$?0pfuLSG$)(3b!;#;anF z9WN~O{Ag1@FX)SniaL8ST7sZabDB=1+dB ztV+C7%MS2qJQMw=7x#6Nkr&!5DC<*BPuDBy-x z{6-w$Ayt7>Xul_8BjK4gmJ##U8`DrFfK#T>lO7j&E9@D^f8UQ6K@1c~^VVtTvi?qf z?+BS*b5BYrIusN@+)Ierh@2HLhSc|O{{?rTpJwElX6N6{-x@EW^aY*YN-F^_@{obWwmR3Ze)CN{1jQASy_a z4gqNvib$^!sfrMKClTq=L=dD#KzgsChmJ@u0VyH$PAGu{NL#+$J-fel&$;Jh=FQ36 znYsPG`|ca`G_hwhJEF6&T}-{4EKD_WaW3~*g6ab3E?4v-?#8rBP?d^bDOFn!O7#QT zElj84hZdEkieD!6kvg>9{+z2`5As^F9)93X{{H7GYT`diay@_7!T{a?$W7B|FE3hK zJ$V6$iC^+w;={Hb$J~E?g#oK&YTp?ZZgfW@t$pR4*%8f53GH+176ylVSC!wC&5qKB zMblY?k5Y$~Xp!W;MaHnJb*G)bzQJJgST;C9EdQX1ZlBpSob=cZFia&q-V-;9rnj(P zV93s)x1d?bb4~O^+?twzAYaNvwMtY!W==AuS?JXfvbdVv9~KKW2VQ6Somx&`b^FR* z3&14(s+amfbJM=@QqYZxiG3PG$xR1#-`i{S7Pbp1>C_6E@V-A=#tpaefq{^8}mf!Ir9 zwAPtb1jzO4Om_F%55-CNIYt)SyKt?QB60pwagyN&)PtnKb_uRBPwIsNiL0sMB0t@A1p85|KTFCAvXFd> zFPF0W40X=FKY(7&GDb$wc+3YIr}}TN5~}IA%Lg7_@Ao#WreaN{w$11HQKadxEtZNe z86>FqAya2=2&Mz>-&CCsrU}t9%D?XKQ zArO%G_dtoAt)p`_W|IGlBBnirG8Q~Qr{G$fvqv3=Y1gLaNw${15Lt%c3mWDfCX~tM zU&yTHIeRECCx`97DP(B)`v&@bW=Ns{7IJq%Fp%wvWk#IMbx+!A%4OY38JQp$4TSef zZs)0RC$Iy}bU`aRGD}$Bm0m~n;Ozd+7K4tC$vajN)Yo%5&^ZTxv~FlfPx<{oUhuTS z?m@A8aN5`RlfB{(=kGuIz9&^d-=fo{y?N2cmOh-dag}vWw*F6z1_aU+jrmh{*D$j zq~ZeG8-}GQxe2t~A2Cy^l)B+|ZO4?(61o=pJ@@K+by`z^m#MeI18-9|P_bt7y<8Nh zyA(!vAf+-zG$>MSw$=am@6uFQz(bb%mr6USE9o=B=%a-NlWYe>obrBls{fJ<8yF;5 zhrax2P}M%h?aOA(G;CP9_cV+~{RwTh>Zc1C%7$n!W+S+LH$`P1WSi-}wzqFQrs*-y z`w;~n2N;+b?skUI={E>TxJvyyAOe`Q3+WV&P1o-nH4{U=e>|qrnGBI3LUxj0p?(oQ!Ix5Q1#?vOqFY-sy6r1(E?zb3> z_{OK!WFl3|zqSjAq@QrEh;kWK`QWqIA)NRv^+vfdt5w00z@R{(j`+Q_hg$?|e=V;c zv_`2ijlx$On+`@nuRb!L&jm+piLF^N+cU3@CW?2w(DOy&Qd})LS90FIIeY_L$`(GI z;`aTin7~_HY~Ty)?AnbwQbo=R-C!U+aMMEiTi#jlw>0>>{VrGTfVbzqOljx%d)5V9 z%E8Nj?&u)k3o+T>IUf^)joE!OLlghY6Vj+8w|maei^Aev| zvyde@dbM2Qz}sJI$&i|d&%#z)FXB3@V3SsKrQ$EDjcoFKHSL*7#E`|8$9Y?oTUi@A zNwofwPj=UH0GpLtR&2Abqh@zRE<~u(lV(`r;8)$BB4t!>gPdzv+gIMc?%HGPGm-gF z6Xvl0bigs8SPN0{B^lH1m(P<>q-npcm+J4iPSS!Jj*fHta@IUJxV^k=`?qNBfx3TM zrRCe*c6Dlzi>Ldby=L_5x@ze46kaEnCa;=5Oes?xd%q5DFD)OJ+BHX&P=VRgcuMH# zEE(^P^}^*2-X(4p4N0|JsExbYBhG2Je_x0?yMWVAxdu~9-`np#xKF_5bHsWixjwAc z_U-Xp*uJY&g&3zUbK4?acprz;Ipn&&zOT$bp+d&OF3%z=2L6mW)>LxGlPE?l)z2k2 z!F?uc7kj_62zTyv%;dOElnXGa+W&p`^8)kFkBKu3MibPXE&}3p5_=!tyNLX`R#u2= z)L6QAX}m*{P2dJNsO$ovn7nINk*4kT2Zs9_fyLK=2dTj8Mm*azM#dh{!c9MyAHfkJ z8^Rl__o1#4N806E^KEyk4eUC{`S@pNLbZ>Fq{`TM29y418&v}x%@TDwUsiaC#a=iC zRI-XpAn%Db3l^y3IG* z;oBX$S&I^Ur{K0LdoW-GMr>t{h{1|-U1B6+r$^@b-=7vZ=)#D)n!IX9B?T06W`KR$ z01UF1)d(eHW}q^ca;{%pj^u4CB~J7Uf~eFR=zjr&4o?I}^JyzZvjWcwbYU{@?sA;( zNEC9qk>W>Skfm*=$Q?M8v|h9mt89x1IuGNAUHpD&yQy~4?C{k0N&*SXe7{0D5O%5j zirclfwB1J~72MWpYkjzG_r#FN!&Cpl$GP`tm051RzI61n`O2Myi%+$o%Qf+W-2{iN z$m*1j#H+tEh$;l}^1o6eudd!CjP*x_81mpYsGogC^5Bk3blb?s*a{^o87+3DCIWGy zfMpE`r9Td*?b7stlINdY!G^|Tln5Z*MTcO(nL|5q_^1<(Ry_Ngz_@-DfC@TX)zwAu zcG$MJtpcwM?zf#|LQoQk&%&n1M)0#&EYhX4H6t539}olutZWH63*F`_`N|&XP88U%%%4@!<#CrO4rEG z1Qguy7GVxcS&Rt57mGI-Yt#CIKz?)x(g5u8XBnlNmzE+fo(JLXY#{!n!AMvQy93tA z3M8c3pk5Ke+eqikG|F0t)86GP6$WBgi#0r9VJX|?WELzQ12*zt} zL(L%n4o0aMAvs0j3)=j&=B$BgZM}iq$$APPn|%5?#!?nBG97>s4OXI1&lR>F1f8(| zd)kd-ersPU@gv7N`UU@&u(({W*mOAq;GFUR;&0$Ag?eeLr| zXvBw(yO*J)TgzWjXYdMG(7CfOd)Xoi;oV-Uj@c3Alfhv?0l@2D&I>M!Jmm7?wx7H1 zYOoOFbngE-osIsNum+>D)kHhL*-&!vX_(EauaQ6P=- z=*q%piEQ)RI8NtHlpxgaecrnKw@X^zts~a^ePB=$l39(picB03oXS_c>=4o~F3uXP zOPt0L-ZafbN>6|1j;c8m*PN~lswgSp}qwDf{%xW zY{WB6g>@n_`r@JTf;TACAUZ(%00RST83cp>kc)bZx5J9(Mnd6~kb3!$i zSv73x>LPl|8h`q%O^%Fe*t(3=MbJadHs)Imq!*NAHCuwNGP;yhW2BX2MmQ36p1YdIi`Q-i$K<$SWi_62uckws$E>)d;y?jTu`+8;DQ!=ulgItEw-6t;R>f4eFa8HiC5Bt+!1pZbk z2Va>tk5^xrSw;^Roj~QA_W>=BqDQ8pPksiT-6EeHgSr6Zii#_{H3!qIOQIV&%jj62 zuTVMZN#onVz-=0|U(Oz^b9x%r?4}qL5SthU1xAypK@yOIlV2A_>ea(}6$7%7s~yt^ zr4;>@Ex*qm4E?I7mG}w$qua>w(~o1YHtG$AUMK;OVZ5nHM^w>$wn2LyQMeF!dHImi z2|Z1vQx6i7^UuJ zN&4~my*S8Yc^ z{5gZp=cU|gpksV)QJHN@A9`mQ%h{E8d8+67s$Wkh);ubu2-kYJHwMI_2qyRPpKSK^ z*7S5JAOiiW5Y0`;h7H+@txX5t;-9^rb4Ai_v3==$XKA?)_KqDvu}4LURE+3wjALjM zukaoptDCR%uNMtoqpSOpbUWQPN)t(K62un{Vj&3USiBYIUo0mq)Z> z7&o?Z^26cNPNp=KtH;9WMC3F%1y=4dEH^rld{8jm+-%(TI`X2q(pm4olxPJEbT(`p z3^lWFQ-lTuSqsvFt@goz3}76qU>O&0L{_j6<&4hH#KS1H$`O@`yMIP3O70YP54UhGfKPL`c`b}ZDD5-|)6*ER`9Ts@zSamP8 z&qfT*(i9h%E+cnf!-;N|;-{MC8n)=0;z#YVRj7A$@OZn)2=j`4n+5XEfcm8tQft}Q z=r}o?LXV=Z+lc-=_Kq|;zW8qVTzPi%wUsI8A|q=aMHW)G*L~6-?Ey|KZ|?HH^_a;D z6^1BGu18qR_w02`t)8#)Rde8?PHCpAl$*4)jN?W|p z%*Qvst$gcQdffkEa*(b@Mrt&uVy zmd`$nHTb2OA&24Ygj6v z?{=9lkkIh?^UgjhNQDFiz}gzCR5z$QhkHwzP7lt9_DVEUHdtqLt@a@<#Ak0#$E0y1 z&De=}i|g~=^?s}zXp`fI-ve2`AC%<%2qFdGy6iPT<>ed4oo$Md^(NuCz7cc=C}R(- zbj&=JpSC{$(1^UBQimfkbRmnwkSw1)#oo4BDb>~=QOIZ%DDXF9O+LfpnFwBEL$mVj zA2!gS8Z@P)F9B*1cGuBn&9eA{& zh*Gu3yAl_$<@~0Yg)6n8U6szxY=*l>S;E`2uIyXv zr~UJmxRx=iT4kmrvTv2y@Wy^(`h{HY@#U09Q8#b$@c!V&aPQQaIkSq4%(oOoT??=8 z${fQ|dY<=bj!o031IHckA#J8nskvt|J9FDQYEGT_%^WitKCnYT}8#~itDBy;gu$y3Y&AyiOP53 z?c&km7y>JydBRvW6(lZGKHDep;obt4I=fFn_jhWD*>~W_Wyv8xfe(@*sPE{&&?w$K39A^TC9>4(-K+qrjK z5Z>H23t?jc6|R`{0Q7@vl3=4IdvT8ZjcOg;5yLa3Ke8;VbZQ2AzE#(b=VDd za8N}#AgH!k!JMtf=;*Vf^|&Oa#q_YWj zY(WnbDUzWcl5OS(K^!-%y5dpS$N`=dz@-`PKyFJ16uSC5cT zoEbb==($hx_wh*{|2pg`5o6o;drVrwP&bE>*X*;_MmmFIyZtxon7@_5O1zx45)E4c zKkWTS?X#F7b$;_OZK+Ip1khl3Sce$%`qU*5pKzM6%z5qFg$C`m%vPzGBcbhigWuSn zF=MU%f=KlsM;Ft$^LI2X2Qh&=e)+;^^{k?Q0a<>^S*AP5rwYsk6(c-Bt8cGzjd2(* zfBQ#vZ$rq)3)CNd`}aI8!6v7KJ_>_PCt><*-j^^$?d6>?#z&RP{^99}Hip|eohKzv zpEK&zJe~_RMlv9GniNb1u*QMggLIYaPQyt-GQp25e_j+q#hcCF6ba6PPqQ{RYqsuL zbjkdMU+#N&^6%yPLx@~cO0f~cbcx>AorrE{fjmtr?8$QCI_=fm5Ca>xnkG4&X6D^- znzKJwJ1Uig!gKFf+xh*YF8KZ>o-5&rL~+^=;?khNqn-o?>6D|}1?e-665Ibs4Jn~_ zOBDuR-hlJ_&la6kH{n^P&p%=|LtdXsP}taqT*P#ZGY~?fUnEt}BY<~?l4EO1b_rX| z%?0ow+Zmng^p>y2+QPDPjMb>c+ot!ueSD->s3a0{}z*Sc5NK zk|PEGWKY5a^81s-D#p(W72Mhls=>lD(m!_7U*WVL5c0nV>G!u4 z*`htG!To!`wFC+Ii9r+nZCn3yL~cepbJyG*%l#VDW+N~oow%F+5;t_8VE;WxqQ5QG z7Ohnc7MOtx|9?Sl2LAs9q_kD?OQF}#{g{Nmzex=(zHcCyEkIlLebg3hBJklE2=K!! zVKb~k$FWI#g3e(%s5n*R*;ZW)FKixb%E z(+r@q55Q{4>dhp6WI3d)D_t>>7>VJ2?v+ zb5GpzFM6$r2QsD4tVc#f)8_yc2}guEy*+$ zMRk;z+1O2VsEuB3x6CMf7aI7>8>xz&RCO{s98EJ+_-yaYugI5J9XSwT}Z8@^R*<)YhNL$R>YS@Y$Zu zlYS)O&ftX3V4H3S@zemK5XeYO*32R1boU zuUr4BqzTvz8A-XFpJ{_19UiPcH5&cS9iFUu-!?cjFe5aY0io(kbvzzvHZEIdOYgJi zKWQ=Uoj(7uW8Bk|rjFxoGq^-0eWOp&uCv4|DljKdc;((^-r1nQgnMCDYTiU3yBK)%s@#k@0FKry{T7c1EZWToK#Zm(=eHxEo0_Y9Cw&Tf!1pOV~>uN#Ov zBUyn*{rfI^-7DLDs1g$9v3Wn{sI>hKUL?f&vL6O2hX^nvVhHHF#?n3eJR}jqnJ!`3 z9h~0MEL@JBzYBHBnT0xKVXXF|C#D^=XT7Df`=<^%Xh!fxOZ&jnU#IEOhLoW^;V&)? ziKa8Udt6MlC+(c-hZH+#kT>}VX?ge&S_3{m{D{YYKEeYar`g=q8-xi|`ln+e?6P7! z=FHN~Yi9H@@ZFOtD^O-8;xz0{;brN)>Q65gVKvVvGxYk2$=JW&N%=A;6b2lv$+`i= zL?c>7L?}}+@3ERT^JE+$zXrZhQ6UO(v*{(e-ip`n;$<}w1}|Ho%@(R8rssCn>G1<8 zJy?%{@Z=jl#?w8>o3FoH*cU~k_E5C`cY6Bv^p$v+OlBarp(L7})WAc*fr~)x6hVPg z2Ba@SEzHB@p$>#2^Y`-))z`JvEi|wq8V@$HypyWh9fODk#vcs^*m)bh-n>6E;?d z|I8$5I6bA9)<~O^mC3mcNK70@ts&P$D=HS|JMUgf zcERT7rx-^GJ8p-p**sOtrzX#4V-hF z^ZFG1jO(itLiZZ1GPcN%&o4-nmUKEk_$%s<+5p1@18z|3_PO$WJJjTZrd-l1kDk-> zm#uQllS4z8l!xrURkdCxrTQX-W`dp;3Z1En7n)>!_H4_FiOiB)75N@9uYUBc`2~+V zYriUn&+m_Ar8uqKOCjCo>fv5SfUi7FY7U>&9C(y-D~1AuQ3S{@zmoG{rbhX zGU>znpjkPGELLygB~xXwLB#FLK`oE0H0GrGn&})&r*x{$)i&=WwZW9+PR2&ro&4AP zNAsGoVeh~*7~%})@{0B$I-*%d&?SboWCZ3NNA+ZdfYelzFgf>s2m~M6Qc>Aj3Q{4jT?CpFnW1SZ2cz-^J4WA9;loIe^?rh#n zM|9zn!j7P`hM&cW+di4^+Ykc}SpO96+jipVckEzm>ovW>o(GD~P ztlloW8@wSjuNLOpI8<#Gv`#b~=QH1M$p7*r=g1eN`oOg&Mri{hhehg@Do+!#!{s|x zT-r}+)7_E28yVjS$9lio$Mt)IJd-&Nd1{`>noK%8Qh0LpH_uYm$Dunuw*Kjz&YPqy z1rQ*1VprpK{kT~xwYoKrZu}^+g*RK{nv1S?uB+iMND;>%gcQndG7G2 zRr1kuQhX(Fz{^C=d9(G=uT=J@$y|FQqhel4LDY)qvaX@`_Hl8@h;#{m&%d-N&>`=i zT+|iddYQ0S=_8b;xzd67@CK>rX(0Dd-5ihgkDK3nJBSz4DoxAj6|yL-b8C{Z5@~Kl)X8?X&Ld$m!jV;=HHgWm56k$O^FS8^jOv z81|2DYJn$`a_sT{rV{k|BF(rG?y&&wanwqAxlsLWq7sw1i{rZs#6}-JEAfi(Sm+el znF0ND<1++5OAv5`pTm3qRX;|ziro}`)th26?sAA;c=5F{n6vT;00RP{Nk@GG$|0=? zMGBg*-Yz$g^Uv(tVvQx*BGZhuNUfmka1LVP?i$z~Gje_F&GsK3bLsxKB%I8-5{XVK zF3xY-w9vnK(-bj~FX)4I8L04Oy(vUPY)}rekL}cenc% zs>^0e?!LLT#Hr)jdV}7T{$hemzvxC*+unws(3ceHR6iHc-f%f2jb$oPp}^81t2kB< z-h$4MktM9TJ}!a^zp{r%2%6qU>^xX* z7w|i0kKX19Y6w;+D%^@1h& zyKZ~U_vaqo@9K5-j!UiG4^?pdAJJ{}fk`p}g)0emvyfzJP?NHzQTYHCa1Mzlw zNA(pwVTpHZF0NR35Uj6igcx#}rWq7(cq}I`k=k{A?aW#Tcz8^DTRk$!ez>zK0p-R4!_l52j+jIH7y^# zK9r}vxgLlozK8CFe%y6_bhRSw@zN>I)@E*%1K{C3;-fUhChJBlOvFhGV zJD!rX!tk~X5jrCkRjBmWm+IcqsDbSGihC_CZC-j@@@{U{7^8Qkc#(M)o3{|JAX8UaK7+aDGMWyvT6 z2;L~D;McsqB=XYHd-i*^RKy=Tw92K6;v~AK*I;%1{h)uQlIjke@wj70PuVCe}g4$JivY{RI7bu zxy$c?PZ&szSaXmyIK^D`%k+=-+;E92A6PZLv7~R~E1^4Ik*8v2qx6*awDmi0nKa<% zRV=YbZ(YaA*flgOwnA}eFyde*$?e3d_auN_8ezs>LBIV{)O^({h(??--A-n5P4D_4 zX>wPh+G<~W)y9{G_OJE}Uj7|^xvNyc_3F$O>a5&<&A8l;;GcC@RZeYxC-A4WK9r^& zW{cw&e37{GwlK!f>PZios(8J(Sr4uMy7)1}!&(J?){RJgSH$yD@o{PZBqTvY}H5xaWInR!})uBAarSt$H`;r!SWMRpnL4;vm&vy;lH15KRbef%S&q` z4F6yPgIX-x{PAj5Bk}G`tbLBHQLeGlPvR3o%?}6Pr!Jo>Th_Ji33N^ zL@b&Wwar+zeR4UFZT0mCAmhWPQ%aDmwp1Jh*mU;2zx?_(fx#BE-nMUJ9w$CZ_$yQq z`r^5S@qM9edaak$k&$@H_-fb?Ttok$n;q9=-+u{N~fT@Zr00`f$&Z!_+Fd zx9?T+jv4V^AN@GiamQB`o#3n1rj=*cy##1~jqh5e>7Kvo-{~;G_&?2?K7RxEk!BM| zv^AkdQ145Qt3q_ndGS0|WA^KQAmzHta_gTuC#_}Yq}zsRC(o~c?IY7Ml6|Wv1W4fL z?GVpT_nVg)+@esXTLnWKS^aFp6ECJ`>xDLZUW%4E_`HY8 zz=!*C8+rI3N?Iv><*2dp(vz&T(yQ=XRmm@*3g5+~K9-I1lQNQ@T5=QUlQdAfm}+i2Ed=!3K5B_jP0LdvI{KA+d~YHjfn@%TT89Z#0Kd4)JOER7NH1>EFII zkiogDqKA!4v%|WHVhKjQ#IWzJpqHQMsc5SUm<<$ipp2a5|zLbb-*)c>qrLb6OJi2b%p>`+@Lx3cig{N6$K zz+_I6h$++G2^A(q4+&fGi!~v(tM7j0C%he*f9}h>Iwh;zq_C_Zpy(mEe0G!RxV7!0 zc#ajR>U7hcGS2jnGk~b{Ub>x4W)A&6%luD6(gV9Aqo2x{ zz5J9+eT^dGaIB*F^>tGbAHRdOKSfvE%8?%l`e@^1M_gSUfk6+CS8YEA1bPL40?Ei2 zT=zCE3v$vw4TF%84ij@p_)6oi^@W&L^`M3z6J~Qs{KB%?H4ne(UG=PD8>4-%pf-7u zn?^uROG?S}I+;H=NT)BaK4IBradHp;l=3aWG`b?dP587ixd_z_m6(0AQsEUilM>G|MXz1ydFw&>}j7mvVZ+wgN9Pg%mv zXT$Jy<0(5u!c7UC-`iyZ<5$bfDeG+JKlV?5KE%y&Ng`$L0Qv|j zI@CU4n8pn>UTkB*6x6aO%GS9Lzt^wx0Oq_*7s zW3XLeoysqQ2vAKRwiz0nt)Jl8JIx|H9d z{Xmsp5`v@wTFiYj@*6K5E>$8gnS~zr*`&bYv#Y)PPUC?nE6^@xecWPL@dZAf_E})E zJB}jr2)w#xSWM4h36T9Gwe{`F?p8G$ew|fSE}|&(uGFDh()EwuM}=v%^Gu($Xg$Bs z9slLm?GSQ#6VL%4EX zICK3^6|xWx@2QacK{I&6q8{L#wV>OJ+BOG|g@LWJ`=ZnfoP^f7 zMxRwQkados-e_2-V)()tgdDG9dg{-?VJ9>q@QswA;OY4J^MBAsR`V95ebR&c2?Av% zV4BC={l3_40P$;$nF&9YVa?0+fU<;lsw}@4a942WA!25d7+kG4hx|nAHfGHKaX$j( zC(bvr#Lq@2Ub1a~yr|QP9Z0lo2^o2@E)6{;r|d({k0KBY@GcQ!u7ecwl%sv}`VoRM zgtj8X5obP>B{T&Mts=omI5>hr-WY(ML!u{dLC!7;@W_X9h8KSZ63>np(4mmA+y%5i43rUR7vj|ul@h~0)c}_?95_mj9S)S%pJl$%h5DWI&kVGWK19wrT=q~5? zUP1LFirr3ao2)0?_#DKbPClWWz$xVP9&i;2>tA*%4JBey(3Deo1*=x_$t|y<>C{!q z!3csh1crFbkcmBD5z4uA3KW~Zlg^JOFXZVh`N2vA7lcn_%EZ%)WB|KfHN zhVR6HxN2VnCf^1l6F;>nMI;T@SNxKTs5{PiC z=}~gVgS@pZA!J-1^jt@6-^w+q@NmLsT4bpi+(tOs+ZRO;4v)|f;snbJ^lk%%Q|9&a z4Lq9sjAPoe)LC&p9y+@&mR^KQ`@;a2w>9KXw0g1v)!_3KKOO+J)(37w*zL^ImvE6#=!Y$M9Mq4re+0!; zM3IjsQUDM#WM2@{*p@@W+9Ce#R3ra|Bb|Sd)(7Cz1?XMfibrF&`mwgX1&=DR6JDi~ zxErMpM$ynfDSLl+j`@!8-cQ(WCuBc;U?%t6a?<5Uh-P| zNOm{W5h^@1CGGD}UG6G+P0J)nEY`d^9veZZj@cO=nvXr*8J-k4pU{4Lo-kP%%oAHR z|DbhnCobIaQ)2csiez3(-_QpbE!FPtFP+|y%xZe2B9WoMx5|%buo=G9KT*I zJ*ja&L%7sM=kkjI@U^>Qju(FOa=65K?A8?9P+df0O8!CvHJ&R@tavrC%Ef=j#yn@- zZkt+@=tR{ZegCtb=O17|L#wceN`vtO=GPjuGIh}PoWA9}}Hc5Dg-?u-kuowGfp zt;6>-t~~zPuP49bIcl8#1$(e*JugSy`~>(lQr|Ot09*aWvB^sd*qH71%k9cqWwU6K zMjBV-sKsNBjQM!yNU2t>l8D})3$)=>>C)R=dsWO?8e9o|JSrQmHP3drBnOy0JT{FU zBt07HZ5YXsPfF04w zo)Z!0v@ zdXN23wEN&y)XBG;*FeR2)YRDP-bHheTw~WY?P~(i7jDxE%Q9xa|Z|mIapZFqI-ZB3nO|`A-Y{)i1gARP*jQXe*P%~@O{fP#5(c>P9 zjF(BG%%84gOrTG1KCGXU&xhMCU(0>B#gHk!G8uX_r!vh74n`%o+|~wEXu@?qPhGn? z0ZIG8Pqozc#35E<0Il)bonW(7CDV$o%CdNIE7O7VX!OC)lunn}GoFX=cf7f54$&`= zc`zFS}15i;s|kR*e?sq7l@Itr7juYTbUzF!W?}@TP?FKOOn-*DDzg z=>zYkJvCK4_Aj%(RUM(@tL51uHBLzK?bOSz}#^Tv~!dR|M5-fY`nh8T;_FL_J%)^Mixoqsnk6}zx z9udxkH@1TEvI8wp{YqZiU;81IpVeO$#MMmh#``b$yL4`eU1R=Y9ttq0#(Z+a7G3KQ zj`QfQtV!?28CyX;v~WQv3-)l79-f_hZ_uMPMREphLmScDKhx0B54o*n4U&4O8D5r) z)oeZNf3UeLV3{9mpEL2-M`PMSLPXZs=Z5Fgn2x7IR{IWaPJwB(@1nhg%#$;DF!^}{ zkNrp|^B!Qw49-Bw+?6eC)vroCON5JqPyc%P-@}7YQ_Hu6c#a53;tH2O^qW)^J4Q&Uq(oahvE1AGdk(ze;!)w{zJH3 zf%yDHZe4TDXf|57tkWSP!`%AVmnqEQ>9nj+J&fDwEv)+CrC=|4j^i)v4wam0F4V2|MhXWq#_fB!c@txUy@^ zUhPwIyU)Dum|Wgv$8FSe_m5p#Ca!jM&i}ea_1lEuK>W*zDONsxLiHxcLp>m(@#@fh z`SI8&7S6f&7qGZR*S_F&?A7Fi&d-#mN<^ zYaw%&>SS|iJE4LyPC0An|> zj}^LNVR@cwjKSqJm$3N9J9Qpsbqwy1rXFL^J4J85Q8hg7YQ6WREH^doKv#_-c1Qld z3yEwyBE9zB3Rr=emQ7H^StO)E`#dWO>D6t=s1qY}zOnKyJc{h(LfcSJ+XZ4JJ#sE9 z=dY^j4xxNa6L96+(=2%1FnTE$KujECczZf9hIr`j?r`T0d7%*8!~_3xuE$JzBY(Po z-^B(Px`YS|Dqts)HX~*`(D9J#UC@>HYEKpW#}J05an>9zArwZkAPiBs@J_jHD%MMP@24$JK!@q_M`TTf~F7&rNw*zUm z!Emm16U$pT9uho{hLzll{)Nv4W}U0@5v4WNUHqjx6UPu6gzN(SQ)6vXw)X)(7m(9I z@fMMvr=gTdHjl-hdE0B8*nqe~p~y)<&Vh8HtIGj8>sH{g>fYkMCh&eIr9SSYfSk!1 zgx`!v*9R%8Fdm>C>9TernuMk00?WY6uko|4n`RgGRBQK_0w2JBy z7(e=tj+=oz7vIWE^2RT7%Q(gzbR86k{D>yc(Ta$ORE#m)4MB7qm&x<~_fmEz)I#U` zc~8&pNu2JRu822i0F&s*nqAgjIZ*WXFh^aS5t2oVlx=$ee9=9|Fx+*qZaE%O$VOyn z(m7WB?F&9Ym{JvxO=ef?bdG6SVF2=dN-(u5A$&5Hyc7S;^bGLWJ_nHV1Gw{ke3G)L z!9$FwB`oBkqg>6-1|UFx$4?nZ#(JT&b9n+pAqae+Yrt-ac({P~s0_YCwj)4R(>1F} zio}yKhVvg#7qlol`Fs<47z7l!7y_7o?F62VMUxL^md~{BTwD>I!@t%5zF30I;F(+h zfzHsLk2Eh%E8-z*Z6J|zl^f8Y|2{LQe!n0FQpimlz>$*1DES1)%q9(T5f%&i)(Haq z$5DL*h+)VDK3z|=!T%=ABt04Oe-Hl$Z*LtIMf<*u(;d2DVFd7kg*`F@Vyd%SA8emoWpH(le{6aMR zfz4NaTi>-msoN*1o|1Y3G@t6*+F1O{cK<3-=>`~%RjAR!OCW+`PH%Qle&vxQWB)vC zF#=BW8SgkSBJKy4ub>tO{!gy_oMGp+^!rG^P#4d>NWso@cq$Qms4Dq z%+bb`pO{QLhE~PCjChT2Ywf;H)&AKd+;jIn<0Y%5eUF$mg8eIGR?;WeM5fiS@6Q;o z{AOXZ@X6wtLg=r}nX{u#RoJiqr#RcP)W3h#FzRoyG#vgD7>C(2jnX#e%NVU~%lR|c zq(}Bk`@3g1I|abm?;qa{+OOdc`-Rh8#fxYCxBY}WaCWrH|9bKM(r~;ImYX4%eQE#w z>CMv?qq#GUyYc>+aaH5fI@N!s!R|Q+ThB^)2MoU^U>jz6G0wuy<*tK=8-NYGn|)iW z+FRGJfJ^){Qgba!nEO}77CG#&?z_GAsoUMGTZ{w}T=y?(VV4W65^-%Y;<>&(knNQp z4QNSa6|A*P@ck-8uI{eut9)9MqYj2^_DRD0=gxqQvVg7&p}Th7y|P|BvWJb({_5UU z^N!iCp#3X`rfG{hA>jPx&aOzW{K^Gq{Ee>sx_NI}j2!NUb3X{!xYNw&d6drlnF1D9 z?qdeciREADr#CJpxJ=;drsy2M4wbDN(8jfsOUHgyNm>EI356dH*z(~uHU8Izim-SJ zzp^E)Z81@@Q`JX1A8z*|U09Rx6%mh#IUjw&JYTdgQ$%x0W2LYd9YQesTtS3uHK=Zl zhB7UTCoCNJkro>T!`jftbq!qPO2K}g*)KLtxOxLq*F&G4-`7X}6xQkInyog%3H*>9 zw!*983qMnN{CD>P4E-|OJwKjhTy;*X`{gntCyn(i?PuL%=Q=iWSMP18O2=X45if+;fzLlAUa1>C`&JPCAg+juL(fQ8#93R^1-6B{P6(zD>{V z8PazA5XvpLE&eh#b4EI+7nCs%dmp!>>x|b@9ndC<*BW`xSRO9fADvZVxGe=A3Dh#H&*kG#o&tB?Jm0$Tiz8C^~WuhV9 zc&S51s-hOng8h1;77c>6?T@?g(&o0bq?xy-;?;v&PNg07g2fM`aVelqJh&bD7n7SN zs=rsLeqf@IVIJS>72)A?#lv9w!IgoA?0@fllq&P$p$Q$K@&;_v-M6JQP}Pr2>HP^i zG6+Y-ipA9Y3o*7P1)39Y?IJhYQ`KW|2F-4_b605DsvxvEGowjmNsLex@U)2&o??p_ zS!=M+3;xurLBP10pJ{su97;uL{3F8V5Pv`Iamk}8O=+t=0}V3huEB>)Tfb`8K>=~G zO0B%tsw4Ir8?=OO=?x9QrCK<+o94_7B+?QpTOer!zw+Zfd%uV`X1^hihw+`S4%nwP zHJxBbQQFBpfCZvD;s|{4H0eWD~6)CpiYY=ZS{MfFL;+fSeJP5E@O3CXtwN6YJc4LurA>q)Lw>gOtCBQnb8qK2(V|+ zLgJI<)PUaW&l@9%Py4+nZVx)pf5xdt0L_+-Qa?cUD=aMGEcvw&;TAwPSzs^2I`WrR!S?gT$=nz4zbWkqCGW0}uXj zwoDs7R*2d2IVkrj>f?;=_(``(!c^`h7;p65-~x{614#qxlbv!e&)jQM8m!3!6I`jY zCI+KH+n2(1!N84VPWf0@<$_;9Bv2<84c59{17axq*PVCD@YMx|IxkKrF907nnM!vt<|gT0^|s_|v^_R#|V3#a7t-v2)*S zS&h}y(`t>$GoQZ8EnD_?hOJkP%6jp2ubEWz`W^6e-d1Th`%Nk9sbp1c&{k(w`R!;- z3W(43Ki*w`d+MU%-M~ZvRrS8V156a^*Oz#gJ&x<2@h)qZ`g*0TuC$dMblOBRBUS4& z6!fyud;=ZVb@x7a;{MWBo_PGrSzQfyPww_--E?IjYVNCZ;Q@j^4lkb}>s(;3 z32d4ZeZd%I5QMH8RLmSba{J{|^-)ZEB0)Sa#^Rpv5nwN~;M%;L@&~Y`B+Z0qRe{th zQD7Qs5CdCIC2N|=97V@L)Vqm*qXP%c%lX}kngYm1PU`>h%Hga`Igm}(6QE~yk1T;# z`5R5m6X*PL*5ab?tMVk*wPXEEL|VQE+Y1atQC~(x{3rjsPOU}!wTYod=IXIL;_Wn& zMvsb%*u+cXAZ1w&*8e9LLY=OefTqt`J)M`69YO;2nO;gV-yS4;@|{3SmY z^JdaHWxf5f&KEh!eu6LhyvQ1Xh%0lj(g9bOPyhq6f0&>p7+PCGA+kAv-OFA5Y~jFA zS+BM8TuF4~K2tn!;Dv6$FS zbBKkuh7gnwWU;PO#H{K(OQGpUK$`I$bi<5svVlVKA{VUy`&f>TW#JU>wasZ>dOgmZ zcrHa!#ph5PED~KaIKrb}uhDd@ASCj*7+4%LnHOrC;2Hd_DA0rtMUX-xUIU&)ggzaO zRZD2ctTp>QicR_FTJO_26MNxO`>>kbidw44q(~_6cj3blj_n+4NQ2A7A_Ra24UdtU_0L(`R9dt62>3e@l+G9@XB&x0`=9UbyZSiA9#L4eK)JP&4Lgj}Y%Z+XDXiV~Y-c$9_r%nHvmznRqt#X*WJIi7#bhACcQWF33_(x%BpUPZ~ z#^f#1Yv45=*Jf6U93<4(VTHtlaq515(XXsW0SZZFrhRW^DJ(bL(V=quU0|b=sa$Ge!SsXT-sZqj$ZJ3ABWtaQsx{(an@1X_$i0& zSJK%+5L55u8eh)~ ziPnChV}+|9F2G`Q|7=Us{G$1Ul$Dmc8YQ$ZFUMSu=91&vraZ_i@uglO-qX6eeE;Mc z2BOD|#mr>T|3KlAujt_0FtX@YHAWe zcVAt*i~0R;Xg)e;^kyjzV#rg>EEt-^K*Z2JVxT@+okXou{W}dTaujcklC0JJUYu3> zD5$v+VIN^Bq%Ip83)P8%mFgqnliBSCHd{*ZOSWZHgAtnEov}_-X8t(odXD@ z0upk?g~V&RZBQq`nqVZ#Y(UMw{T|4By9GeInqK#3Kg@+WCTkKp@xIu9z=!KFO<3qB zkf=G1dm|BYNiQe$Xm8j-{hpLwPg ztZfd6fJ;9fuX2E>Od+)ds%FvWg1JNeyCN6g&b{>cXp11>P_Rekap()S_N<9qtU~@y z2JJHTJDRpd=$=^Z(rcgOFm5-3y|-?(pJ^EudJYFU4!6u})OgRMEImB0Z9j`bS*k)~ z|CoEm9(+mp@|cl$Bp|kfP0B~a;=XZH)-IcTS)0*|RcO8!Q`SS0TejtUeZaQBp)sK%z2EpO zX^)>TjFv=>=zPqr0|>3fs`;vu$EvW`k}-HYetuM+2ukxK8jwIOr{DO@@h%IzbGk@& z*n$0n7V=bn2r20W`>hFk0VpM1{)L(D7_XaX8_l<7%6bvlf3*Ay{ilbIWTT7e~AQbq-*Z1uaO{~Z@gQWPMx>#t&;yGwl zRv(&T^Gp7elYGQmN2oDvlonz`tC4vr*<;LPMVvq={2(avO}k&;fB-i)@8otR@K3jz zBXxN-qth%HA!WRzk@tceN6CC5hDOrbBYUuicn5lr;@f}rMSj{PMG=_tGI1!1p(?u>s2rVP!nT|*a)WC>VEcj6Fud9&s4qf^Q zG4vtnjc)L)@$qv!n;`Cw`-Pam%CFRs@U_sfi2hfjF;Yd?cbk2)$Wi0EtVFA6-|D6v zM_G-?`^kWmZ=W@{qgcz3^T#!2_Vf=0`mnK4$ z;_lnOkMWO{Ena1!e;t118_jykD+ao8l)Ejq(~V|~CFhC5#3QWOD*b<-^GiPFN~sI> z;@9uS;zsANtKO=1&*f^}o&E3q@^Z>tKu%^a#*ttvh$7X3+j<-5q|h=lgw=09V(U1$ z?8)LGFahCLCVDd;ON*pDMD@%;d4S63v2%e%{i}Fa8OWO|%J{W@?(F(Su_12mXPZj1 zP2Z?$M;$odrz&J73Nk)_xkm>+b{Xj9_95u|%-LNUv2IB8iQ8v=NN=*!BOm&P;&hPW zaP1lSp4Ee@7QbjYF~769!+{QmA3dhQ0aH z3G>lhN;;@@aGj(a_|X!B1BcWxN8h@Tr>!Ro+Rdy7VvFo^3&b`zlP~p)PW1h;kSB=b zB9}l*>=ZHaBP5=6131#&uCG5i-f;8nIY4`So4Jp-ULf+>`5&5;?YekB6WDGUsCm|3 z()=y<#S*wtFmJg}yR+t*b6x*wWA-=qN)>_YhkN+<({yw;QzDrjLP}f|<31qE4wm#= zG#CaCqZO#IcF|)B{Pg$aH1qLG)ehYIwWCA`K7>%ZHZN%097rJ1^{DDer-pE%p1X5i;hr z1dbf^+M5x~OLzquN|vQOZpy@c%G=H_Wx6r=3f+keh_a@&oZM%JzJorWVU(8pmy7l? z&Dy#X_1HtZ99OLo%p8!*43nBqi1m7_6a|&wGM6?A&{Nr~YS~z4u{Bx|Z`9O(VJ4aP z?FNI>m#WS6EcB9&^c^xTxypTalFhaJt{_M0wQRQizz$c({Z+hS7W;dRbyIpt&Ar!* zt!y8C7W%6^(%_O^!vd%%)tJvrHL!gt*$PQAzkb2YSHwVPiirYv_&>&VtzSYGt_ z64dl=MC1%~lI|<@9;7M;emQ{rj<>C8q>!1&FMZzB3$?dg`K>uonm{3jO}vK4nyc=y4;jmF)$#|PPD6uCmUVAu=d`N6zS#mkz+)U!=TT1D zUn^|`h9vV2%*Gt|bZ<5~t8B$9BPuY$u)5>IDMNzFT0sKZPfWcsjSlp?*?f&|)F*c^ zak(H(2gU({@p9B*8v%|cIEy8*VV4aPnG!$0Je!;NP$C@CzIZTO20tN??GW`6y2hoH zShuo+g~DW%wz-$^4ov!{Q+e?NY>_EQY$tIUFCU6_g#A#tz-8=I%~7z(aHw^G9o6*- zBlg2HjrGh_mZ0`tVbdOCrytQN$H{y)v{=fEcoHax3kqkvh7Wt)!(E^Fn@xocg{AzgS?zA&xg9RIBj%42CR^0YwG)SawL)0W zMEf0Hkbam27F%kCB0J~v0$;U%Bd7~gnA`EN)TbJ4@@TrIYEv<4xj9YeT>AL~xKqpL zXm`K$>Xe4Fwc&d5V((q23Zl`QM7&*j;{wNp(UY+*BxC<47}&F%bVi$1MxEc2ygr0I znthS|jSif4B{3(=?$wBpPHs3xFa0ATwq?)KDnx?s9)-o@V>f8+l;8Fvs4h9uB%aa1 z)}hVoXHpbxn7A)F`E@csW&RB2ZP{&CZry)*!M=DN7AX3(x?@XIa3nh%Cn^^5y)x-r zW>hTwk{~nzZm&^__lFj0N0CR>m#975qcM~ zk)p(K{t{jq5BsER_V65UPfav7DTcNHLozm0jZhNaK{nNa1~mrMqqjbh36*{ZPDHgbs4P-BkgM{Xuqi$ESe@lJ+88=v6HXe~X z4fDmTT&0IinL6H9s?K2$9J`{I)hmN0MG$oOdOIwR&eiLolaCH+nC9IgEQ7#rf!rtF zuJ>!BZ@}!Cli=t}+8w$0Q>>b+>Q)ze`pZ;)} zE+6Dp;F;^zpBUtQ`0B$9BBj-Qbz?;4<5xl65BRq?Ms%MD$*ks4&`{jScBLHfyYS@V zMvpYIyl^p`jEEIKX2ramsT>zW_n)`0Jf5)5D4r9+Jy?|)U#`e$#})*QU6CUdA=fYw zQ0>x%CW@~I1X;94U-BIH64zSRH;h~mcw+pt*-Gb0ZtvRFb8_NUdKSH6jPhR9H7hC0 zO<}IFI!FOKT9FwPXD=(IOjXy1PtXJ+c)`mvdu-b0xV0+cP{yS4fB?C%on_kmd%Tr) zU$5oGS^H~V44|u0EQH|ZckEC)tZC(fZW#1p1Ngz0-ig~4v;vcPoD?US60x&PN`(45 zSOGn0$tJS3_d`&V(zY=hnz8+qYDfqA=oY5FdO~Wms>RvgMqCDz$_A8f!PWa)L{8VI zjv|jQ#)Wwux(I5wbl+bK4`g>>&|&`NZS^?wT$PqCmD#RUfZZV>3GVw1cE|>FjsZn; z{k{M>YH6M+(1TlF?Ag?5N_l->CNe&$Ki)npKtlM|Bs9Eo8m)>@yt?2~r4%Eq$I9Un zZFwxRaX2VEzAJC*tMW75-fNT2Gq}32IG~eVRDNKaWOX)F1ovTd4n(xDi?S`(BuyTx z_g(Yu3Jva;5sp>ppt+L>K4}iO;Z-kdRGDfsl>j7OyC`2p=fqxuCcO{^C*UK05srRM zVasPafzwrJWJdmV=&|&m8uHS^H0)>k+%GHhLvf}WT}kK|L}hWIrfScu-*BBq-i$PK zJ@S)Oh~m4XGz$5AdQODzC7u05+M5#5T3jKl^6}7Xw5X#4oFd=2{R~z4fO%uwFn7z6 zoKH72b>@7hoe2f2zjo^G%b_1vyF|VVP&^zdkS}^}+D(@6@VU&CByW@kns%dG>a=cU zYoe(C%leNzSG`V2I|gC-r>Kqu$OP<<8&~g9P?mm}Gwn=abjszEX>)U9CqbVWwl%0R z5-JRCBD-E$fk%sKFBig}CZ8ou&#O4x@T+FyZ|@LB)1~}G^Wec@=(rHZevAjhE5cd6 z@*M7Yp;XO}Mc@jh2JgZUo%Ln!Et%P!Y~rmtzLy=*IW!vy;hN$^0nu1~Zj6eVCX|9i zUp_`tgAp^oD@G*iaSO1^)^$Ac($dC_+B6mEM1Xn(#q*P-F`5Q*9v28FzL9D?t2DCS z0}HWtMJxAj1(+WA^x5Cjh0JPLSC{1>DnqYNbEV|n^WiO`^&^{04(#Xg;O8SyrN(!s z%bg?e!al~X6<~9U^8!{dclLWFArorn^+zkZLS+S%ECRJqOp@3BSgqlWd@6PEcy6vJ zZO`iLGJB706h?9O(U-Hywp-B4hk`dD@#b%-uwSS5ayU@M6%-0$tzwP)rAgyP?Snse zJ?g4QR6bno4pe<~;GAo#B!Hs)ErI`B5>v2UlGm@$qlLj@pFcJ>2eS2#DV?dGawnWxXcWUARk1UY|K zNFMTvTY2r4(c~?@Kpm|d(K%508WXsL^w0Bb^$po?#@m~5TllO$@F}N7hAV+j^@2DB z=JZj%RqIMKGA22n)wglYwa&JXd7wocYmMNa1SK&4UyVYtUbdU3@`}{y~0yBlxp?o9R=(?F|#nTMb zPsYlSW-Qv9pwUXngTDfZ+?s^_+kTy*7@5ptd_+K}BL z#&W=VLFn-&s$nqHC0&AFcNn9HDF)&@t@xg%FjB(m*w zkPeopR|-P6aF9saGA(ae2-CRp37@Cf%Z&E=)<#?cD+D~pm*Y_q>V8R5hG1@&$xiws zb1aUY(W1R?Ta)y=q_GcIwxj0=*~X^*D&HYr@RL_ zyMA;0al9^?iavOq0FRzOz(HQDJpT$gn=Zplf@S=W_QBg(-L!lT4Y>PiHTSmadqw)8 zsVtcf5Jh!P+_$lhR(IpL_8!>Qt;J;9evQ~Va?e&f7)C$^Z#`4wF-j%*z%S)+3?(`S zi&3QsuZ!i(L3Z-q2{14-W_ZV{$FNIdV5nort9FD+gT3&Q{T{=ecal48G5(xr-VX58 z&Nl5GYjW^W*MzLARQ7!9axAYFCQOy3?r3<253YoW%1rxD(xIcmUD^Ji+SDX^y;H&N zB6{V}gb+oqv{Z6Rnw|2C$AP}tcBHhvQyb;}$-#LJ{@L?uES}i}zwcLC-@t5+mFI6( zvXI#v-lp>qur#N1GP>mAzON7b2JXm43ODW<4}aTP4^81xKv0%ly+#90R<#p5Mq0%q ze`2l|SjcSnB-rF7=-U#!f^L4wKLZg;k zsg}r~r1`K3?Eds$k;QSN*b&0*O7FwhxHF1DF1JJ1DXOtAS=UZx?!6~8kV?N!>-!x{YU+Zrb?Qg1))sdd9C&%Ow@E?x_oD}!ss z+pn?QO}fV8VNc4BP!JIqQFZ3HiL~7Jmk6J|vSH>0#*)eQm2GGlsCqAHr(UQ8pT6;Z zk@7o;#w*iLGwIJJrcLv*@8@SD@!MIsY22q}kX7eN(HN?ZKNSDryW>?Ge?V> zaOFqN7snU(I#AX8I@y_S`&m#yp|Ax6E{}TgQ`iN!9}1bh{1c&JuGLQZbxY5P&M?AX zY{t$JBgET%Ba3k z4*)rM@OgcDzH|ha7sldro*BbpQa z;&YRSmyX!?bCtGbHuZ)aeHM!dBeDn~f6Yo=Jge|_om~-SqAABMQ2QfUB#DCmHg


    |Uq0(Jm&unm6eVv@?&{YeO1{Pn5)M~PSfJPdTS)bX~^P_;tu{f{v+K(ii^ z9h0REO#-d7MpDS_lk?FTDm+D*XXn|6TI>wxjFt!_@oj=d95o@GDj1yz#Nc72)bIqu zQnc#N%O&nKg?$T-ik8w;%MHDg=vmx%(7BWE?2m-Zf?V`9R3?|HsbOFD?AgVu8Vk~& z++PuhY@!#Q*!`PNA_V$cJ_ z(-nakE1uIV|24xwIWW?pns#s7XyL~XJPwN|?)@6Fb)ubdR|k#gk{MeZ?)!QM48;_+ z&1;=Ny3;Csoio0io}YzI=!NP<`qu1?df#$(><$;ZE*$8S^+PvtIkpWp{scrS@C-1O zR*elsKJi}pG18XmINwkBE`+*n&M|SJp*hOwa{`ZPa$b_lwOHe4NY&0f=F|O z!a)w`5Om8X-Iyq`yWG}(o7=#+b>$*6xWnjnqV=+!arwZM$txo48P>vkk;~O;5ik3ml5zx1zVE$CFSuQlI#phXyj7JnE+USQ4*q_@@u(ZQt}5J zU6B}}yhLjqEkkJfV%L2g zPEJiWeKN2doE||j-$|`TAOaC<)F+?;?vHH!I)mFck+%&fQj#_R4GIMa(Qvsz!;`x1}}y_!nVmq_jsC#I!33yyh#qFLyuTKNgu1N44;xmP>*tvDAIL;KA%u}0+8(BQQuk{hT@6d3)doP;Bqu5`Ud9OE5B z{3ih1Ji9+`F5p>~>bUQO!Oz%-#pN0ug=tuO?^RH`RyIwo@wuU|!z53(hBLalYz^n3 zIJ^=+IPQ8~{PA}Kjq;Ve{Qls+R9xlSm-WT`Y8C-{u671oFQ?%-z{ji#OOB*!udX`i zi?LLTb;H;6n73JZ_K|{HR{^oPZl(HB=@R{h-XRQZ&&6~V`+R1&TYDZXW@pVxf zg1=>#UV%LZ)J@f|!P84vDi5GhXDI)X6uLr`_az9{tYmcGEz$ zS>|p$CYBD*Ja7MbRL~>PI-Df7Io^?#Pg^bL4ADIx2y%T22zN{{t(qZ-P@p(CS=zso z@?N`$=ZK|Qz*0&wi0l=7g+Z^&uymKB!*O?g0unbEM6?M^r}%{X65QRubZW3P7k}*F zsPKM8lsR85&gz}c&`}YQymbo?r!uXUi$*|~zm*;F0gB3G_`A>8*(pxIKVt+Y6e<{l zr1z^x2SCf^&TrO8NQwk332TvrAjrP~h&hY`@>#YKcPqgwpe3T6z2Neg#dZGG`&$v^ z+{%;p#>QxQ7C+6#f&QXD#A_U(5tcy+(Gq!SGVJ!9G;C>ODYOVv;XLL^16zPWkg3O$ zGY?Si1le(e{jLx=lYpy_PiU1d3S-Yc0a-8*jmmD66N6;X2|2vFBI0eFN~RG5^!Zd2 zd!2^aR>2}aQW6k~v@&E?fA!UJrrM+b9e~paPs>+Qe3>6&=znmkTGD^7YR;(cRrv`L zy0^pS(fk=(x6G`;^6@Gd=SNWj;ywNZse#->__>z02nN21dFCvZ5U=UQB*RXCCQF;x ziZ3)ZO<`zRh~$%OmZAxDxr(%348B1uCJQlO@*-XhHT}efJ`&ze%YT!dm59$co5Tn*!w>)_ z&m!ko#L{Sicz&o-BP%8b%IBh1Vh1-l9MiVM+p_=Wm~p15s*pQ0N`+_CpLp62@0x&g z_FO-O^emI&>VLzc+|vk5fS@)4adfdP=^ds~#0`K+rQpNTT|pDsEC>EPA`1sY4hQt zQ29XG*|C5T_A1&mE(+ujH~bFBjE7c%kp9RxYU5CiDFx~z^+td)fjBpA7>jtxQB*No z3F~R*K3V$k0a|g4rl#9~oDW}pQ)WaXp<1^SyPRTFQb?(JSK1M#ta~}|yIqs*m}fVS z{a~RO_JSCPw2ZKR>C;rWQ+L9BC690l3(X8Ex(AQzS+?96?jli%-gbvuPRfgDGcxDd zMfB$6SIDVcbI_2a;QX6no9;wJ1=SVcVcg2k^_lp2EIguxD<{RoEX=a`gk8DC>!DLo zhM&*kH1l*S&9)JseFLccyU#-a{>+1@So5<+o35=-7}vIjJv zAdN!qrwf!i2{^Lz*qFKa`T#1^obdd38Z&QO3MGYm6%dG(2)^m1E;MAN|I7z>0U+0B z#4x@Z2O0l^MN4yOrP@WXd_bE1yhHg0zKwmBso)Mt{wEsE7{H*sqgGa=AN{00kG2N# z{1iIPY&ZC+`F$}AOK9^+SWB(82}p@slbjJB>+CdGBK`}G%v{BQtP=GjRlTU2fv6Y= zBP|Ocr7kQ^^1*US)>wqAwj^IlCrLmcEB5?{*u!*+8*UB;v4JT0PEPeYDuxCE!&#B{z)auH>wz4k>hB0gWNEl!paf{KA!?f}K3(hp9?8}fly z>^_-jFBQ?pf|Kh_q&xM1AQmQKB9gPRY54krE?stV{5dQNhRCFve>_grOmNH^7v54# z=)g{W=l)c%0_heC75;)k!z`QFSFbeXO&+B^b?{i&lJen%MX*8=$Gvw0KB`|tv;_!L zfj}@TnQeFuSCcLbqh%sXAF>2G;_w6HJNab;*VVQ|{z_-M>am7^-oOl2Ps3HNekl+_ zPSA^}Sg`YRz-f883+)yP{Z_D4K-mAr!Y~G+ZLN%Iw^X3h+IvrN0M8I$bd24hotz+{ zw$(0-V|y4FR?rq>jTGyK+)}cthWmdg+3nE%gOVXHWJJ6@T*)J!2mN2hV8h=rXel3% z62?SwY*4)U7CUlDpeI)yM|513m^-Em)$S^85E;fS`z+<5)XAE8+RpbiQvq7@!dw3+ zn+WJfdCnm{yiwyaF*uYmKBs?^68l5T9#~FYdz<)sA|OH&q~&sojRa$!LK8Mvk5(lxLoqNJy42;L>yAp11umEeYF3O2t?psOD%EWc0<|n6`ou)#DRvq9M3U~L|&si zi7-H!0+R@?eB z1rlHuixgSYuu?)4fs9zCwadd5Fv}ja3`mQt{mwb-RXKFg{1x)NwjV{u;^=>PJsWKH z^o{{!Y!H=cRyadEDtrx|QR4-o?^GucfGpDY9q`l|MS`$c(5*BLV7|+VA#={3WK0!9 z{2$4f-i5CCtF}2#K=&ZqNLIWSj>DEooF>YaX6Ywl*VQ`USt@iTL9pNjOqv}Q8FrTD zcP});n~mS|x2YAQ`6!lV5WD^}HD8T~d04F%^6S%H)Svxc@$!R{-f!-<#6WO+O1_2%;MX)F%R z5h*fs52E~$s5wC3rvw9ro~R!0$tlF1mFWvdJ0AUFyvFoXUs4omOi(DqLp>fA}y zp_uGKX6s4_g(0{qTr(1Ad>Acm-a8C z3z6hLQL7fi(A3LGV`NwU4hqwlbBn_=+6iI&e7CP|e`wc!eU9k_M~GnENg|50GAuy3 z7|itpZm$!`r0%yBXY*Jq7zhciG-@O9A_Rbp>~AG#0rBMPu^=m5ob`QkkOoPjGMr~Y zTLf}Yg^XH1KT-}Dc_xzRd${p=Jfiugz%QLpwEFhiDF7)+N&P1XO8v6$oi;aX@oPY5 z-Iy6U3o85;ipq)RB5(pyHe1O)PL8BkcO3005$gzyqbXSEBLE6vnz+|e@U98x0TDuq zkoS55Gb(Bbnf9()**(59AVjJd9FIrx0Z-2vXg*`#r{(vsEc1(?4=92n0X0NGEy3dR zH!#&2!HlI_VA2xDwxbSNtnCHCkjYu*%X2CkH-qBUwRPy@<9cks$ zNI@6pmvbBl+xeEUvx7_>S?#{QswiMs;Cd0d(*NQn6u*eH1DW_aT<7%@3-R4x9ttmRHvx{Ujw z1I&`*02pS_lJ{Ouh(|$^7hQjgxOXW(;g$)Dq1#`M_y47%14$JAq2kz{{iWg*ivX)| z=AjNUWInlEd><|9oO%fUPDfw-(a}$tzc$AKLRf zGVn$tRj{@i)Q2BakhM09(yXfEf1WSW%m8Nlf51gE`(JR8*ab!MB8eZk=>P3WiDj-msnc2z$_rR$T~&8g@0yq9G$5W#w-Px~a@ zh5MmwtSLHfL4<-1oZlhNaZ?D>h@p4LCrWbnj6K(AQixl^|b^Js^ z`CQ6!xWl*QLHT`p#>Y_;gtGYk!}uT^aaVFuQ8s0Xr(nB?fR?F6Yd9D@y~u%4&7kyG ziz?z8{kL+1OzH7jLXBvrV6N3!ZGo#%wPy8SxpD%pwVgD8g^e4geV^IlD7?w*flq`? zOiQ0$r9I!4QIO)Zgv--qC)rU$zjy1qUn%{7zKU`S-W=q7DsMvT8PKakb%^QsfHXP| z0Lq95UA~(ZULXV^BAxrlNiy$AfDnc=gBd};8(_!i+>w4q>v+6z+d$3$9Pj!x>EV^y z1A%%yq)QXb(EZL$3l>BnqU8G_npgOLTXDJg_W|+!pR`S(f#g+m%NF$beFokW-wp&r z3N<3x3BdY-H$zjfI{*x3mjs|-3UWvo&hC-K?a5Vz(eAI{xQlO0SN(spCO38$k@oY! zz5v8IkW)u3n(kVKAe{O!LmqcHB{_QW5#1I`fgjr@Bf6-1hM|U|PX(Z##+dEUj|o5I zTC~{Q<&1jV0*BY|{KpD`SC#BO1zUQG=<30~*=m&tFn?2ezk>Fb{mL@-S?@gfaEt&` zaBI@rEOLDRP;f$DNy^2!?g+HRUj+K?zX&wb+z@O;0Bch7+WgbX-(JFt9c`Qe89ApX zwVjl!z;B6&5W#0cSl=M@=T2fG1ME-sM>6I~QS*C*Tly_;Eg~?w_?6HGMt>$LDdNe< zoSa-ayYAcI9oaWg61;^eKn`)hPCzzfhO%r*KL9-Om|1rYRY1kbwZ;x)UE>i_vWC3l zkA2jJW>c@Fhp_DY0qr>1EOD;Km^k*okQl$pKY(-?ABY2S&!6uM!nd)g z!@L0Rj%i1qHEtH}_7dG9K{gQ}rJ|LAjYB zXpV`5w9M?*8b$Tg?1O(z4x_N=0e5WxSAoFokPo=4<`b}Ruz|7#E*7aPF<04FL0~#= zeiTc$8}&{IZh}#70$E@>?#>gs({a!>>2~V|patr?7Gha%TL20uYqPhtEw3(y#rt}w zjw00ut@O*S6W=E-ZzKdB7`|sWhv~`b$d9 zFp~?6px!De-@gKZ`t84z6l`~eq>UH3dAb5K!*wx4I8rc0GxLss@hZ$%K>igFjiG?8 zl)hbzwxwwhNT^F)^S3n=mRYr<^)Fi~)x}QnXdo~sUGG-Tzx8$4_#ghZAQ%H?D^9bN z7k9 zbH~16WDyHBjgI1Ra2f6cOzyiD}Bar`G48VFiUPg9&{OH_R|LHvV$0Mr=~MN=lDB{oKWij zLR~SNbjANN`8%RzP5^f?%rv)xzdu-B{SR}!03kAp8bA??phiE$#^Fr6!Z^W4bv`42o$>bnLK z#+c>!YQ_W-ME6bOF8Z1T^uADabO*u%2J?mS=K`y=9+KQ;{OSFtLDJ$o*Jxgl zIO39ez?4aoEiA5E*kV@&64Q*-3SZ{jTwmSr@4DNLF}W%n&sIBfZhc6 zj$~yfkClM$d~Q6Ygwb({A!C@&4RK%p7zx-*KmInlUvT?k6$NTQ7JybXax9h6)d}^0 z{6?)GNl2Kdjc7gVJHC5sG~Nc(|5o&fM1`vpc*LC_=>3q# zZW^twxo zIuT}eSH1T9m)U(Mjc=N}Fw6X!Zi|_5rf7xnq7*3qz|4yJ0p?F|yl-dc)HA|Z2X)qOjT!<}X_!%yP`bLR ztp1A6_k>R-@P9^Rx@`VGBhm%1j7CKYfBTHQuEr~X&p7zUXWablGXm^2&Ot}?mc7nM zRuxdYplD>TWT;iME{)mR<)CFHig&`@Sv?cTON}^ivGvKMK;h)PY`s~yWn^yW(OogP zwt};nGrx}Q^{r0NB{^)S2Yf$Rq65lzVoF!KUscU+`RlVoiY1Y36jtBC42A)Kc)$O7 z)}g14KT=eW0Yv3a!0SIK35%-#FnuH)T(ruE?YaYk(!IG+)FM(GzcGXz++r*qtQ36k zw`H{BQ7sBfl`nu&?o;NF3tZUEHNZU$bS#<*}6$t^d2q|389C0xe>m^B-%kQd#fZqyL~y zcVaSOI02|>duReGu80S~+LB-h%inPs+U53*zqbu_{1fLzn>`%5x{P;u0ty}&gUA+; z_+Ju43sTH;U#EZnK>HV3PBOCqXjy-UmXIcaXGcR(-0lzo>im7Avk_&MBIUL*p3=*20B?XE}cXb%btb7(R zNXwKep&BeWf8N5S?Hybe7lUu%a*~vm%>gN+;}d#jA5uK7CH+S&2Aee}G+hQZ#dJBxq3NiY>u^0OMQss8TAUur_;5Bd zVN8#F%R_>%y08`G;mC<}9ssH;zn%V;#w*A-WHhNs5RqV-mvXC^$RRKlAQ%F* z!I4y;mHwQqp}Ec{Q)}D98d%XNM{dSJx~6r=xk|(odCc;5J&kJ5BVe|?bP?Qbg;E!f zfBunO##qU}P6nWY+sx>Do3(G8mKsvCAOSW9?_pJ;r$MknZ|quf!Y9`w6hniyD9saJ z^u&mJx5w8~s|M_N3%sq5>~ZxE6hPQ~APxywVG@PlwwA(TjVWSzlw4iU?#8p!zUe4?v<=CB)69sTfbeO$SG z`UX$UV3PljvA2qfqYb)7ahKq3!GjL&!QCymGeEGxo!~aOyF0<%GdMv9cMt9mAP~sm z{l0U~`Y->RzUp4Ry1Jh3XV>1ftMX|dwTxfm{qz5onzN4Y|LXRTFZFu~jHz4Fh$gw< zVoc>cL6{Bj|0KR$=0e=RS?45p#rL$Q(^q+AA~pJ-ok~bR`R<{4G{l$Sn@G_;!>4PD zabD+bE5j3(uV?cV@66!=e80r08`$3HfAGq7>O@JjzDi@|^H9cr?Ab5wcR_}uR_^_O z!Ai?gI~h*4-}=lPWqSVbzsrUHgIN2@a2Z`x=ex@i$9tJFyR;Pl6Jt(t&c=V2(yT`M z5`NDA|9${3is!Z#;%tADvFm1bOd`MSPWz2$qRl>u->DY8!`1(TZbEvmVZC>ciw{$& zR_6Yx{;xKAt(j~5@%`fW;;01rTexs{R4TQEspQYZv3I_->vKqcap^GWJI~XAO|T(y z=|S2X^Ep@D?k?~8eK)hKMz?|SPPb3f#+f)y7AGZAZs3zQ|L^J=%$A2t z?VD6UYn}%GTT}}gJ4n5QN<{>n+q~KnunT-5p%F6x9}*`Xq;E7u{tmw`8O>RCWP^Do z4cJ1J8`pgL*6(}+JA-_!z~)q`~VYA=q@D-JjVt- z+JP>zJ4EjN7G*tp-6%ViS?R}0^955bLXfb9x}?Hdv$D+518LpUbr@Fn?9Li|n2^Oyf49!kF*tGz#sNRw#7G){f5sfQdU?k+@)8{Vp1zJ} zV&6s#PjxmD2)rpJ-vxBTJHMdUN7e7=Gr;bas+$Xqs2_2@Ya_mnxoFj#EUV=1dixPP z?ql|S-_$}2tN$LWVTZg!G*}Jg&&EZdkx;aVfnZiu`||9ymbM*}$x+wPsOxE72^Os+ zUzQkzXVg5U&#k4`!VR~11iuT{W%6Pyx)N{j3#5~&OAW@F!g*_EdxlArC5QPKbE1IE zfeIyhWQge&1o_|LWZI0GtC-;ucLk2TTsX01iV-@NvQq8c(K;A9sROftE%N z1Fgs9)2%doQ{nHaBC60w(8t6jZAZ}X!=h{A>XH}>&wY+n$AFQc2p2sd{7xtv4kc!|HS&UE}^*wr zf87(=9%e^ZyOQYwBN6DY5^NPV;ep#x1MLYXs?hEMTH!(QCp?LJ8p5YFzYjF)h+7-Z zPg$Z36=jtalphq2tGh?kY*|Aecs8J|H{^*8jgo,~bpQfuNqz9LF8|e{|^vQ5h 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 H7lHo;{l*F# diff --git a/bundle/ruby/3.2.0/cache/rake-13.1.0.gem b/bundle/ruby/3.2.0/cache/rake-13.1.0.gem deleted file mode 100644 index 2e0b70151635ce70f1c48bf68f12bef939462ff5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 84992 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 aOCbMWE!lq!=D#xVUm5tX4E#UIz<&eSCY#Fu diff --git a/bundle/ruby/3.2.0/cache/rb-readline-0.5.5.gem b/bundle/ruby/3.2.0/cache/rb-readline-0.5.5.gem deleted file mode 100644 index c41b5dffbb057d5ab5c326c258dae245a38feea7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 96768 zcmeFYQ;;uC5H7a1&EM`>+qP}nwr$(CdDgaVowaRS`6qcu>b~UZCifxV!}Lt`OjmbR z*VofiHMXWMh9-tChIHm$K>xGA@E=%MSb+X_`5*pA$;ise4#ddJ$jr{j#>T+*-#$iW z7FJduLWciY4*lQlx;ncUI{oL8yM?K#&Hr8TKg|E1^#5mU|5tGT!}0%BmjuyJKrB~2 znjoMfYPRy53`jpW`uq2x^wLUe0mzmX-6{-`e^gq1*H}d5oNVFzvaf+wn!jIim&i!K z2byJzYBoMP#!esKZybv#is)@}=TLL?h4z<>6D++93-*-t80K1tq9i3MXNY0{qUiv4 zKwQoz@i9C<4vJ7*OB8!h?+}SG@UN&9k>?0&TvOZXN)dU@UZL{>J8+FHAS>g6@d9y! zMjtL^aeGbH3Nqs1Ta`AKe)fV~I%2yN)B4nPj37zQs!rHS-KV2Tj7LQ|#_V0PD>22# z%q)z`v1~-Lxu094u;qI!_nu)Y1p%uDQE{*oZtw0YPGuZoq-Pqc2Lzj9p``dzFeY;| zCqcUCP!S^cuD}edG_)4WOst?g|i47uX6b4>(U<;kg&oaV}C6 zm$eFzw}TunMvx_lAynikUGaJOyi{h#!vb3Q^psA{;GvNHKphw9K-vH*5s-!_mDTNz zfhHNxHR`9CRGG93hl~0$0!(y5>{(HqH#;+f9CXbh72VT{6mD&h1p*UDu|{xvL>M^} z8MH0M=E2$&R&!2)x&*^T(apG8Y3oXu>nYKpOfsXN;sm1&G{GW0{CN4gF~K~!SNZty z^b+FMfqa$xu0b2f<8SO^L3K&fQ8B6MEsvQCI`3-`iXqw<2m_>3{F>SCHK8Mh_m559MdG@2Nib8H5$y0ZdY-C9Vld)7^aA+2&cwlS@ImMHA* z02BI)zaWPFFK7FgJFPb~1Jd)cy@)i|MycwK;j3dl=z7}@bBjaNv;+0nFJ8wzlF24v z9kq`N3KIueR`!*CT9JF;|Na$mA<)G|fX&@G8Bu=UCu7A%JA~>IijWO-jPhGb$+O39 zPHRUK{nc%0Rg!`7z5!?P0Jz46r&rNk)CNx|X)^`a%)bpOTMsb7RweN|4I!plsg^^$ z4lLoU)HEUYMYe?thFE#V3Fz%FO)AtXf)2X)_+$!Fl#D`?z6Ng%i|4{0yvaDSPSqO3 z(X9GsbQbrL)uy3<)0Li5v?vm{Y$x^*SkRqUc_B~Rvxe&Cv_k(cNCN){_y5O$|DW+c z6B`Tbf3@L%EV8*9 zOOPu)x?6>VNl1*qK=6Q;866+icRN2o1f*U}8b7~wEZmKtebxVi>T1KU)9aaN+i&^r zk-T}+()-0kGQaCv`P=PMd3G+pE#HpMm(62!T>;VZu2*--QYh{pZC0tTvK3`44DGmJb@)m zCv=ZwgFFahe#GRpu9qc_82av`Ep85$T-So8x_nRj_+p1VvRg-?9uCCCwRjI9?`SM8 zS?yCxtbY5p`B$EaK^{r_o)1xmsgr@V$HT~1qKw>d#rghwP=d0i@vms0kGl#F6diCy zrhIV69X)O3y)y<5KpU65mNrQ3AtpJH+|e}_fmhph#_8cUTa(T$JX4K zvW9RuXbn4etd&L_re#_QKsK|V0p5rnw_FnK56gpP77bn54$HKI=(0_Qn6Uo?qQKfd z5A>nWCagISZonyz#9XpV*kf@Pq#;}Um-fz|>eY_?W4)Aqdk) zmvVXbjwOn~?aA^$hy8Lp6pP_yN`S8Qad=MKbwKWkjD6Ky-2xQEHTjTAVZjXaR$m<1lW>dxl-GGx2Y^RqYeP8m+!HwJR`l(B(srE^J!5H;;+JfZAEZY^J%_pAHEp4x0K*+gn@z8~wpZ zHGC1ldy;`)(8^4+Mj_vWdMOm*%%XK3Kdm!s_BqG<`X)8=(`XNwzTpX08{b}uL%7Lv z6>q<+kG8G#WFhly4s9SbKcGDzt3$N#WS~`GY5WU0;ED66kW&FW!uW6x(RkT43r3XW$DlWAga(Lb-MQCuZ$&2PBKQn1FEn8Ej4F#EFqz?m*hJm;{E+tc+a*Fd)S9l-b;_Gji8&ydXd3sO zcB@i=8I)gdx~7BKp%twZWUv4Cw-kqimj{!%ET<_Uo`0ve8B+Ln5|J3MI%2raN9za7 zKKW=d`;RXnSNagpPOokcN{Rpuljvw566oa6G5*`R$HvJN!w_@(dkM#lAjlZoYY=rm zW0nzDnX}l~xaG%mzoGI#;iIdyb#<1J`MXI>8-@<>d_E#(Tev?l$J-Xt%L9A`ROc%O zq?Z-cZh`lQ)CH7SrliZ{A<;nY>CVU7%K=x+s-umDI+VIb!mLocYEPS`6LJY^dkftz zw=7xodPPwne4zQrCNO0~y}ZZ~_*HYD>6(9OSudr>^1F2PV{^;<^G5y;!8hmCwR`-> z_OI-_{pGrv=8yN+5#syp>)X2gNt>ky<4n&-yCBr|lib(SqBnN`2!qyU=%M^EcH@m8 zOgF<8ivuTcaaLF{xFS%=?|3rEHA*jTU(DVeFn^FZwe^E70z3RqG~5SH{nrPC4M@D8 z(KO9;;@Rx`U@qbDbR-}zm?lXF_BfNlvRJH%a951#KrRvsJQG&&2>XheiLG~DJprY* zUZMs7Wx;`vrGP<1jVGwT7Rsx^Lpcow0k*@F1N^AL2#hrz6p#h zo`K3el1pNFGH}McrzQsM>`&nj`Yrwtm1Lhaov>{haO5#m@<&SRRG}YfJn8WZ=M{@f z$s*W@w+Ox&7CBogD=*je-Rtgi z@vN7N_fo)q_T%zuF@O1zt#@njdv{gf{#0}>h`6(G-_L#3a{*tlvDYqHT${S-IX2g$ zzPLk3| z5(Ge^^4NHNC*SxX`k(*wz*evG`Yxr&eQx*V3X)QUL|*r9_ySi~?*gN*rGGaq-B9PS z2o(9Zt`a;!m$}Z; z_6BR)L3Y3|HzyC?xmN^bduIiL_}JJDZG{BeKP1+o1v-Cwf`5r}D1f){s?&Gd|D+sD zDQJmSI0IdNfplwO#X>INs82h`ch$#x(Q}D^>Eg&YzB+NO+qLZvd;ZWU96RjY2^E~P zSZSAMpglwIZ)0ea+&q8I^X`J=e{nca!euDfMYZ`;f8FW{5!xU>8wyxJ4t*+H;^joU1)-(Fewoa`DJ8bJIOu56!YNQ%O*PBLFhzx4R9B^*)nA)2W7L?S!-z-H8wh^WQ zEw`8E=4O?e?>D!74=}6P-7yL};adxS_`>VXSp1^hn0EN=qicnk7myUt@Ug6S?|7N( zS4dBQO}b|b`@|q9BYTF8H=_S&k-n9+L(_qd<;!O)SZ}LY4FXUOjlfNx+#W!D6kfm; zBb>d4qB~@8lLpaj+RS3VFTMDK44w`n5%J&^NB4M`rJL)z@To6Qh=2{a8S2mh*!Cxz zk%YKGr5R8mY4QSI5RvYc^LK`rpUgIDF(#zL$aof$vq%e;KNj_fL9FC1y}|dkPY{lt z@DEW82qEzV^ENSM2Kz^Ym{Ek+m*}TkS7i!*?_i= z2(+R#=_Qs-)(TDLo7!l|=jdMmI-+BF5KCy~!sXNk>prd_zmwS#LrYnCKq!Sq#^vI+ z;a{yTjkijIQ{czcVu4&A71}(Cc`h*N*Aigq;=dz{;Y9eoh1xru2XJ|Tt{mu!Y5gUJ zWECJGd33B(vfOyXhnp?;X#bYL3Wv+ZYpjpP6pia30)rv9A5cRF0n2Ymd@`NHx{@x@ z6^3R9`T50ua0HVW64L?k{I6r}r*r$leBi^q;C7!%hOM=Rg!9Aa{RrhxFrzSI(mJ)&bc~qA?!O6yPd{ zAV*a+BDDC`l|fG!`ySZDWH&=72;VgEcG)9sfR><#l|9-HoI4ji&??r*eHv&L)@j;ntgu7LqHSe%U`btHv6pcu4!U>bL z#@4w$oI75c0f_3H$@RdKN`#I3V&zXxj?7`%XsHJsX#0v;gZ1;AQu`QShCB64C^n~0 zIl;bl-|k7^kCpBq!yshoKz5Mqd~~Ek@YyHtKHkR0DLN#-5_E#Cq1Rgq0_y>i`_IfT z#(YQ}h?wDXA50d1TLLr@p2f}R=ypV)$G-!p_VrL58}_(V|X6K1B6Q^ zz!?NiIeUJ9ODbV29D$pJ;DPi~l-C3cEv=ngnDTXwCmrRrQ=G zd3uo?KQnU`?hIi}Tz={ys4zy0R0?Gw5(@au-g;b|0lh~)ZbCHk0db*=?C1f7vpiow z&eART!jA#w0ha)}fEU1`^%M?Om*E!Q{MQo|n9I{eoxw``1L4Tzr(_IFkZ$*_^Vt;T z&k_OuuezVy{uhz>S6{{NHIMg8JK-9C9o$g2TJYujg0{o$))V^4)9ilnxTtCh92%6Eu3fq?uq zM|-WYCa6WmtD~Ried2Hq>+t&ZHSn~kYB9{axJqto;EVZA+pZUDj*V?>FC}p?enC9! zVts2MHddi;q)$;?;743fmPFbxW`RdUx+>cCzkd#%JFN$(?!Aw#4H;nl!ALg~=Oi+h zZz{WC`U* zIlpzSdEbsd{^|Mj2=VTSVdP!G>DQugJTIO%D}W!J*x^2#=1tu3j1`(j1|}F}VN|3_ zvwlJ#T8)L>> zx4xPhbJ36AE6r2HkKfM+|NQdRADd8DK~g)*fnScJU(DHGq|_l{W1$*?aC7TFW&Fp8A4z0?2J67N84xjWL0%)Fg$OycHwlSPihdlW%c${ zs*C$&fdjlVaJ0703YRY`8o713&aug)G2$o?o8VSV5Q!R-lwP{q*<}Q$fYvHvE^vQZ zehBK@zMzkhFKNhsfpstIua=Fz!i8K-LT75F%*GD35VQVX6JD>xmBsq4^miLqg_F0?&I__lzi^YtO4=-4db~?CU9k+#t|4);;|6V3Y zO}8aO;?F@rm-|bQgp;vnF{#lBy63Wnc^V5S2j@aG0o>l~%9|&xbg}>?Zb? z>aN+ZK?0W%%gTByc_C7?O7gG7phsj`k7Yw6{J)f6!QBK z;}-^g!@?G@t%cF%JDMy`y&wJTi3DMy+FD7oB`zz)60D8Ed+k-zEeu-=Jkc8bYj|`f zftUoTA>p@_A~W??f;gLj=)PCb}_%Rl}l^5+4=HJlk=C;vTv+%i9F-|73B75mw9;b{?7X2>GqOg-z&ccj8Km1 zi`DDxP~Qsz;^)&xaE;zIa3~)a766~%TmJP4t4~{hfei3(Rv)2Dd=1#g!zg~0n~M`S z2L;J*+akJ{nD$$Cmu?H_&i>4Zf@rw>i3S_?gwE?aaSWoyip9sz$IX?XdUXwe(r~=FWtloTkTT{Xe1X~t9A$7p;b)~F%}bxA<}MWhj~(n z1Qvg%kCp3YsJp+q{FchVy_jgwoo_Loux1`F41^iSo7qmjDa?eujai$_Gqi`DM*47U z@p7J9DOARfIY8;3GpAPYOBL^f+qAi{+7mVzVa>`U zl3&b%;-ry3s)hXFPXL-pKw8-+eEIkupo@v=Te5dydDX{f84tz%1c4Yk(z16U}CPT)hpv z7dGZxcr9FqVbEOy#JAXBhC}GOe~2OPNid4_ekg5!aN6taJIt_(W*cVu?<~aK<;7}k z*Y~^1-R0kF2%BBjEo2X7k6=E({e<~erE!tkog%^voo6XHdk6C#DYn*+b70;tb|~8) zefDN+5#tru)+zMueb!52B$;R#!*>nZ(Zo@jPj+VW z508y)e$bEKVs6`>9)~h#^JGK+=CnK*Y-23Pc!&R9ZHdm}{Fc+h2~8!!QTl^qax7`B z-Pn7I0Uu7!Kaja;ZuONeEfd>k?U+98lh+CVmHk$j>o>N1k_KjP7YxWr$fv^jFKG5v zxjmA2@JCOEhU}?IS1rF8+LhkVk3CR`HCugG$S(2iKE$ihZ2UGxNW;A~W(R`JnUyrm zy%thlnZcO9RnVR&%&_JV4wL7Arq>%uLm1{buAoQ4bc_}p*PPrLBrQAF*On~#!AtCN zn|{2=wyt2Q(vxiba!v@FKsu_dtTeSt+O`&ZyPAi2^SaLRp6~4?Otnw)To9Tlks;ud zo1b$>oynf1ZQP7 zaPcO+u5~`7pP?HdWXU$~MMp#Pc5}#!9!z@ocm#yV{cYv{ZZucG*IZ(|iYrs7)tGSNL5s-Kg1Mf< zcn=Lw4E5?k`+ayxD(x`6H*25RkZ7}EM8JtaL+oFAuXhR@P1{YuJAke02Wa{R0&m~X zC5&wqP`3i4KKu;CgNSx_iaxNn#ju}=peSV zi>bs38Y5kThddXI5SH>5O341>0OO-hw$tGd(yBzh6HlAB(uPv02a(LZbINFhAvMb= zmg<_$q_+0RiHaem{-h!-P_Hn8lPlmI6WdEz7K;asgxp~Q$1cBfg=uXSU=ZS;egC2x z#z>iTxsJw`_JxU?SKmtEG;dJBO}g^;i3~yQia-ML*nTd2u>a@!Dg&zJWVQWi@6D!8 zqq9^x@!|>5{gb}N`zDf(^wr*S(gYe9OyywZCK5S2KT+c)jEWe1y}`O!0_DRns&GGv zBEdm|TMtj{?Hm1IRJ0xw%=vvh_*Jhm_<(Xhxeud`M3+#A&A-*V-|)ahq6A_A;B_v^|+Kg#>NZ_vsGdZ$u^lV%~F#FWDZ4QH=;F1f<<_QCz0-M^Nd z&+k)rrb-rwly&r`S4I3-#P(ZQHj)2;kL7bny9#Tsln0TWs}a{0yEc;}R~7#CI!u1r z!te2LmUDI>ry#^C~ptm{$ebh{3$GfsVm9GWL7} zd#7!RsqG0hw1cPR=8*vZiHsKa+_CswS2oGEvwj!4KyMZePxHdGjj+N9B{%Fw&akpC zhAFz`6QCxZIef5z1ta%D2ZOzCxb(j&QqOS7GPEf0!5p(h$_~t+cwiX=f0zTgv4ETz zXD1|0xCtO6myi5g&vuvRK)#N(e#5lmevRM&0iZuo;mO*$?5o|W{0gwLsP%5G<0o&o zBHuz%>_4Q1h{#TzZ&RMl<7G;u`X=x>HCnLOtv!T23Z#k>-JH!8qwIn)-2cuatggf( z-NSpc5A@{SDeB=W&MmD+rzsdC0{d4$xrRN<@GRCz=b?<}^X30wA1$Ko>bD212%mxE z?iXv{4h286ZOb*rc9KGpfamxqXlt_}?`b4W33vdxjLr<@6ibGlUcAiaa$4a7KIhZR zACtN9FI41@$ulPhh)l7+m?A`B7l!{pyO_mc`9bO1k{X0sNUAi*gzkmG60VwNbU0L< ztqT8)ROmHk4d|Sbe1YQ3r|#kYJ0g-hb6g{4*SDt^q%9ZUl2so3<9HROxL3ok6CUM_ z)h`z<#^>xGbxMj2ndub8z?#kZD4>VAzN1J814fezc7>D6C6J;7J{qUUj}VcZgr#a0 zy1ImP)69?;R-EuEUkuKvT?|*@rcr|*mJ#xVV;9<5HA-df)Ss?!E|UMp3}>g5yK%F} z8L_7u`^+Kyms$e#L^@k)irl><%kdnm*)$DYzB-N>^~QuEH-i(G^&_(zVDbnhCRj3Y zH(Z4PMxYy7eFLaQe1_N;O0SoDsRFl+xG;wU@x^^ao=#cBgc0-uDhq`5(PRP_#5dlH zXVRc?NqLLJ!k*1?hQ?r{FR;M3f@Fw0a)?4Wy6`hN>VzTX3BskqB@J|DLA{TN<5nW# z%$#qum6TH6WZY(%9-k75FkEo{|6n)DZU8v zcZ}$f?K#JwFT9u}9HNZCd1fI^Q3NvSKqsazm=TZ`8yg;*qt37yd_vA`^ z3}pI(Ot~Ac9nEgok}QwW5Uwb*gS<^_>v(P{2qfw-!XI@sMFXRNgWCdMtw0`xdPD<) zVz)-N?tz3CoCySx5{`Z)QH5PF;R$%?EHKLj7PLJCj_iqM={VUgR7a&KNI$P37v&jR zo1~BnUSsQ3F;B3^Mv#e|rhjab?YJ`gso`5k;~!f>a&_Tm;mPwD5~iNr{fL@=^Ymyc znNNZ|ir(QS9?uZEsU|#PU>g01P@DPpFI5AI6K2}DDmI5rYa_xf_v6vf$uBPb&OGKO z0N1TCU)i7#uEphJJt;4g*&>?9AwfU60iQ3C(xvdO1g+AHA`ORMWm-Bgrj&t~@)d{~ z?=nb#OHkMlnmH1T5q$wSQb`vM9X$!@kA1^-u8RwSg3>Jw4kZai!iJQDR5(xD`x6`N z!sb>UNuBmK*_eb8X8_YSQAd+zXK<-^=)Pr8q><<)bRwBSNTF;V%NZRViVQH1Y(6Ka zbwldr5U)yFHMUh+y|Uw=ViIXHkS3I;-90lAshg+r>UlC*lm|X*5 z865Vsn&A}|+QzsG8~k0via4H_V=6iWiG+GGNZWKNn39@^0^hxkhAe!_ksb*|=zW!x z+EvtfJIaYi9USpPOhXFMn)W%d5jbFiQ*NXqSVFw;;PUe0Ns)y_4jVmg-{#WYOg;U1 z-kTS_7;Q`3G{FqJ25Ob&wbIL4NJp(<{b&s+-9b=(K`K|K8p)v%gjf{^;Z!b`vk>GZ zSm&$Wn}x&I*pbvm#wRw2zNn0q9S8h}&c&K>o7nX1NU!ffN2nVqi%j28fU{RcG7q9b z2pPs-Op1=yuDVdgSf_y6473Xey>N?r6-CN_-aF1qs?p)(J)+$P)azt7q-kV20SB9} z-(xVaL?;7W<18jFN>EkY0foQeWH_MGxKGu@?ukcQbl?>)yu7h>1EWkepG3`Yi~P1P z@i`B8wwPc##9uc)Xw`c=p6K?MwLSOU z+3c#Ju6kbiMFE2xg62=6Dd9_713xTfFKl>)vJ`y*!X5Od;-NIZ@YOEY>`fTwDpBp$ z75Y7h6;sBP5bp7M4>y$=m-xwiMe!6D+6u3B@!QTDt?*foAE1mldbEAgDH7zLVG>DF z(X=qNxqgv_9^o|kV}$I>TRHHN@E!7g#KgzTS4DIuN zs<5FRVzAmQguRc1ni`m~K=!;+IbmR=9XAIbXB3`jaKUkH2D&_qE!H!z_^G>vF83}! z`Yi$i8MzaCJNYHQm)C6lUw3+pf8SR%xIbnK($@>A9tC;jyJAXviaX-E!Lv9c%yryZ2?MG#BZI|U4 zUrG71A;A|*62=4MQpM4~BPe5o_XVfs#S`?;#B@?1Y`Pqj)XQ~Co%8+JZj~)B`BDM9 z<%`LmDqddsQu^EFi%p*@A0K?FKTi2lyBq8#SjG30I|k^>bZZN$smWJLK5w-i#A?s4 z-`}5`)C938iEHeT)A`|?k>|%+kT_L|K%=|Nj2Cjo8v_u z+GXc!it_7|To6k|d(xZXe66cl#Amk`xc$}=m;4D`kC(bZWY|flvBU&_?!^$P`ED(9 z=NMW1ZOcS5H{1KyjcnXa!^Azg&BGTe+xv|+dEY7-{ms_V=1TV0Wv=@0q50g6Z{+5c zP=}rK%mJ_6jZwHgOgi&>ZGvB%Pts&6rn?if&h4l|EiOXg9EO}Q3ls$`7Q3r6YO(0V zom0rlsHIZHsslxl>Qv3YmOJjGwk17`ok-ZKAB$jzwiYmvIkc?kW5o z#b4+6$NJlfKUZ-Nb+;71Q~1a3H@mY|B=3GJJ6Bx6&PSbukussYT_Ee@i={PFudqu) zQw(hkhy8Szbn|q#T<)SglrFztvnze|);W-#==&Gzt|?UP^(B+VOfg|U;AT*Zs&aS& zYs;t0yqJH@S4(}%t()OkO@q1B-PI;e&JR}IAYFcR@4mM)wF0er8(<^bn%GB;cBmIF z$RTf@_@>MpJ4fr6`-ms}>!azDcntqZrhlSWoHs%ib2~WuK-$UO^v@Wu+U4zbc)K%E z7-BOn=q>1;@ZSg?)89%C6?4;dXL=(&4CW2H=O@1}Iwz^wgmZhf9{fFW7xHfS%IoVr z%-Kp|96;Nt~3Cvkuuw$uP2<+Bdd}cqn1vuKbL-csshZa zr|JEr`OXDUSB1r?rR{vi7F9VmHoEjSKIKzO|N4K5I5wfsR09}(S{jeF!&%iqY!!$4 zb{pvitL%2_Xud5?Ej5`m-<^soA+%(iiy8_W;WsKH-b*enGVtY&jo>PjY+>5l4_C%# z+sdMHE7%Wo!gpcHaIT(hSp1(d(v)sLEnaWrhY>Y2aZp*BT_+M;Y$^!vj3H8t zpB|YyUd*s+k;>3XErJAH=@v~G$G+;)u%}csk>OLb!mZ#rS>lc1i({OgRL*L=?i#s8 z>RZ48%i&GtgOMJC4MyQyszIiN?8GxLj% z)wHLlzqY)ceNGIUiR7<-Cz``#I5^%wykRn-4X>nQn9ImY%29XFbeJZVZ5YM%Yo{As zT4GS=1BNIY*sKKfRHGlA+17x%C)P4S;1w`CVBn2O#YjjL#cGUhN97o65iuzDNJb^A zVsN9U9AyBWLgz&DavC-~2jZ7xI-&Uur(Nyy1-VjTz)~%{8U>^65tt`u)2eRd6e1+oX5tp?wb zDPN6$5}SD;W|gO-*H!z4jJZ+SM4(XU$v^n!FCerg@}S4}A^?($3}v8#>*l?bM3Q#6(J!pf2J{%XAy-8-NEh#7 zsfJVBDARl#bk1?kk(a?WpzINN+XPoxfLw)=YCg;l{}-}^s94l0Q=$U5@T~B~7iRHI z1%)$N45)#ART+JY*A*_3EPz~`e4a;7EaT2=-RR$8@g z_YbGWY8>ufb+@pQI8|%diO4?oBE;mAAMVCWXv)artQd*!1zWg{Hq}~vx2iyxuUElT z0AjA&5J|FLCqVie?%Iz+MHZTMB1eh90Gg4dA^4{9CFD|Lslzd;V{BRsNk7yQ#rjbh z-t#!}d_Rihwv; zSTDhEmUA>%1{^A>!^-&)O8IHinY( z4k>g(1cQ27muK+i-Y%zWt%sg`z%(z)kLZd)vJ7jKb=vXa0&;K__Dmd4Jm z>qM^IX$0m%kyfGdYs7}|uO+6Kkx)6!)G8FO0n5a3UTGImrjC_RY-|D-Ffe*6m(<25f zkURbPH+BjB)Om-MUp^CSW=h<8y^EEM6Z5?vRT5X0rrEPm&{2nC6$wR*Q!@ok3DFK{ zzEEez!ZS=UZX2aLR1|#k!Z@gAQ8~ghhotb{`$m8Bl29mia|vxxVFjmh17If>(Mq&4 z_y^l)KJF~+0q%nkXrdkNjp~6FrIL`L+kqOT_N34EhZPEmnIxIpw|ErE zBwG}5@cBBx{xoNKGwRU)#9~!|HyHJ;4tQBntB_0^7J~APoo-D)5@i}WoY6?l}B)11d5Fq5AhIrE^o=tv}2#| z4eUTd)92J!->*l7sAY}lqSJ7Ous zPsue})k^av+y{d?A!j$k6=6rCN=m_ckj^d9Tgwn+Z?2fK8p9 z`atvC+eUkXe=EQ|(-i=K=B~8wAaNGTp(?{-a6-HI4&Pwr%Ky~~A$;H}DqfIOkZ?Po zgF_DC3plPPlBHbxHUPLOJeE8;n-HR!gld1^j`^#iFpnJw5o|FsxJe#KF;^Mf=&PWY zpcCBdrqL=+nZA+f-h19eIJfAEy9c>k5P?&g%V=lPnhl0?$ADwVB?+mJAI?L?+!OQU zKzB^?Ct)=@=XZ-O>^=$G`}dstLYY79-g6l}hCB2k=-|47C%40p3;eUTwYN{4+SeE} znee!v^j5R>JQ>wh#5Z&g9!^mHld!!rz_s_uO&WzJ7#z|q?2`v((VA&MR& zPzLxEq?A189xt>n8;o|?`Gd|}YI_UD$i;woxT)rW!r&JMj-hmG%2Bu^_}SwcfBA0oC$)yC!>4&%Q{^Mq z3M9(LO`H3A$h|1#1~(ph81eG3Vr@KRVhOsEeRdB1I}G4D%_fR}9hgisZ>|c(CLKi- zosBABhrD3~<@WF4f>}Em)wzBBkv_DWV9dg_%vzG!S==ZyT`l4aE4=k~TKp zGunZQ3fX3SvY=AVM?TcU?3Elx6=CGO@Q=@orsRp~#U1t)9O-cHmsTgHnsuSYcF$Dd z+w*bazbEm%$c#^!W_sP3;~cVn(hHn>BtQVETy;YSTe@X`Z$Rkvn8#_uIAf$pXOgzo zU$6~yEx?y8@_%{4vso;)41x_#)&@cgV{I0lpHmKQjqrVdJL?;!#U`fAD}SLNom8xF zs%uh801o{`TrDqewB*b)(BA{Ljs0H>$gIKWxMD&C$4y19!6*jPio-CzX{f+>tzW~L`JBU<)7qi+SN!QEBWBH{87*O^pxDup-_Yg*ft%$l8Vdmh zlUfy`#$uE-V^#ldhoU(*m9FbC zos-n$q6z%VGRWA})uuT1SKZ32c=DjlnmC~jK(t@uVyyUfIk0;L~t}i7ou$61Z5b_o#F9Tn! zxqRC$#5v$haVrBz0vtD`*5yV`8q}yr+UtGr2bXctCQp%6LPI^?$7su=oqvr5DBYTS zHo`W$g@C+vKZ*ww2$~fFYdG(`WdfZfN)7C2VST@Fp`f7C2RiJW?h>Btl&Uwe>dLN` zQKkN)KR~Gsecx)EJRo96hJqp`SQPJmrnAzq{dC3R0KU_ofQ5GwY)oC`^-Q3puSk0H2FX8OW1B0m!9#wFy; zWvwl)^Fb{T!JUUREMjlL#C6a$1DPOlyRu6zR7Cktok|}6cSy!5a1Xwk-HTLgD^m(; zZ%-7EG#V*0K`(KOq4WqaBXqGRzq%Y+P1+Xog1TX4O~#?j@3M1XQ2@fNpp*x?y=ITN zTKSc=+9^r%iV5{YO^Q7D%-C>K-lL-$jyEB@#e0C6h})XxELZAG;Z*;>ZECVcQ)h4} z3Bu~G(~Fgao!jrLMJPa_P?wF=?aw+~1b%M^UH0x)AYfX+ z+Cj?l!q&*#$7Te-U(P)c!C#9CbyVFh5FwKj%6@z&hT|+f41--8UbdzQ@7{rpBKd#! zF6=nmaRl2zVLQu$(UB!lSe z0^-f2V1ge5j7?9_P)=8~z(|aS@iKdtT}STg)ijTo5YkP-kwi~~t~@x=Q|8pVhcQ$& zu(XN%m_`dOs1!=O6)r}7d=E;i9CTAtkPX+#6b)FR;m5g{7yK`|q|lJpGiuU`Vlr;~ z#h)4uje=9utelOLXy!$lNS4uqC)X|J#ir(K0j zBF5TJOt7AE3YW+*ku-649~DUkLoy7LH11F#CZQY@G}E!$C;Dh0a$S%&dcz2oNcLfrS7#0O$&k~7y=XIg=K3*^sgc}VI7L%BVsm^U%qV9UF z(N)Lgt6D21C2a0uzEV?)CrJb7bpLP z?AO4b--LLgH`jQyx)13bTd)DKx3ku3x+!%iQz@x1Vy_oTpu9;Gsf%LsiP_Cj(3&WR zqM`fgTdLXS;y&~&CNo`RH8Y9^aX$2_i#zanEhDW|zIfrGi_9W>@F$#mnLc>9cb@3@O=z67#=NNy~> zq(np8wQZD_XUQCxAS2AqHB?nMVf8rAmR@qqz zGab9Y?6H*csZyXcQBx^`T#cAwm(pkI84H#eOEv4II_3(H<}|&KI$%^#5qI3OMk1ib zvOLx*>a?IX=y0pLfnGhZOa^@cA!fw|M^&MRT}QtpnN6}zGGBy1vk*`g(9qUMFlU`CSRW|)^gY>kM| z*pM^YCp0QlRJV%ZXrK9Yi;=ZWriDCY~By ziNTkS6^PO7N7<_f#`(aYc{tMcuO|BPY3rGYFHbT}3!&HN+GKF0p$#U9C}CFg%&V9FOzD?E zPclh;oig2~u7PK#Yp|S-EKh?|WlC!?T-#D>&fYIMaob$5@r;d4GG0vX^tSOEXqgV?{b~Gu-CQ){BHn3K)%27>~XsXZjxcl^_F+Ow2pYr zSz#QOR>j}qL=pM!(T{IyFOOe!Ywx{}A9uXk!=Lr1gVWxR@ckF-)5-4OC451JHPCB^j;L~!D{sNWU4@d#BVd=Bxg{>rD=({*X*M|(v+_vv}Eo*KsNz%b9<$3)bw$O=GN|~il;LjEmev(w=Jhx`lArsg}!MA zTGOKwsinE?rr2%Jnl&ZF#1xjb-S)dGN*Psl zByj!3`l4se4Ce-hlA|OSD|lNXwBCi7O^(7mkMITWoGu;K?T&)6kMD=5lM%Jh+|Q>L zhoVjeC-9ZLn&j$$gofWBs4JUCpj5|}2Pg3BcfIS^In^uOA&oV*$LyW6J2Z0PY!VjV zat)>8m7pQod{#$TAOcbsCwn+f4GH|CI=yBt5)dR^kmsrrs)fU6TTXSp#eJLwUFrs* zg{k@SOusBOsc|6gz&wSzArcLpiQIf^Q;UiMO&2^*(;JV>p>Ogw>x3TE$!EKv$Kpce z8_Pu6^sB-RwQJ_HMXhS;a}Z^!tCW1j>qv#SxBEaPPj?5$rw#1e8mhHfH4av|bD*Hq zvgy<%`cH|K2|F5Vy1uAODTqgUB^gL-?TwmAZb;9{s6ooGK>Gg{_}=eoZQTzn)l8b8 z<*6FL}aNJza}qy%hHHq4%0n{;(RWFqx+dP^Fe6&m9o;tz z3u)dVu&)3Bj#`BWZbchBX8*~$vYPZAgv`hlu?J537-T-+^x|ZDyL)upJsLEvKL-cB zQ}g%k{(iS#g?C5zCKxEyHA+tLA~NPf4kBr4gxjWTFy;HMqc-#Z@K&qRPuOLP0$Uqw zfw0J|76GHG-TB-|uU}5*553*o%5P7ZDVY#ZUP65GV=jdhp_J#5eA_|VVnf|%f&mkQ z$(kY%TI14WJL8Q-mTmxJg8%#Wb?@-tyNx{fcCfqmU0Y1&f`aZvcctGPFQQ~La+UVN zk&G5F12*%N2Q5p*(G=~gemp|=hB+xwm`>AM5(hgnZ{Tfd@#xVb@9e1e>g2Hd3J|}0 z;EA__!f7WDs033ZUP-)n$w}H-UR!{lI~)g1z~WpGkL#+E#k^pDnmkTaPz0)IE-2;y ziq7Zfq^7suH3Z&tH%)zGRxezo0@Vk4pJ=iDbc^h#*R@awOygxZ_mGoq2ZA1HGM`;OIR(3wm^4;oNYk#@7Ej#kTLq- z;?PT%peZh^1uAb-(eLn0M^2KevIQNR9}`SzxI1;H4L4p(&e$3+Yrod){gj(V4QG{r zWP^ooTbtPOL5cIVdy#%tu*Wt4OQ@hG;mr8=nu_(iYH8CqXR0z$MlqM=aW<8v+gLMY zf}rR%T=g^|HohsF3#msZw8t_wFxp#7RYcKf98Bbi$xDH@=_owrDWHP zx4tg1@`bK!v=B#&$ZS@ocpSE^VrMBXCVLX|>T7H?)b(U;4?S~Ci~aGVqIDMeRO9`! z;Wh3ijW~6v;I4ByVdD1~Q4JXMr_WUo*GENJNhq`^?Wo0?-k+m%7*=)iXfjnt?>F*X zwF495^N{aunq13eKbcH*@f&!qp7L647L*LOyhjaBKLh&4`r5L0rvS`ASR6+ZRFvWC zRGip#n+m3E%B9n$>o;)~A&n1$aP7+ZL#C!;)~aZ~irU$87*I2`d?IrQ;o4NDjZtcn3*?W*EEpT@HP;1AXMnh zUYyv-2Kcfh#tcLgO?}%UR~adq@N*|N6{7$golLiHA(4>o^^O=We*jC%${K9z0r5e&<}R>jf#7+07ftxQ~E5mFQ$Fd znlI^C6x>f{2TJ>A!^x(rGTfvW|WeC4jCv@$Tgv~7U>=zF1tUlg^uMRF* z6As_M&BFJM2FO2aE^61uTdUf6UwWI;w&4gK-UIS?x&_=o{Z5<*6Q^eoO&+MFU|d-; zLwBdt%)+Mq0q6{TYBUNnBrebSCW_|zmCPIy6ES}k#HCde!v!n<&g`}YNDykSD5kH| ze{8R%Ad}f_C%_zpuJKl5ZCPU;VzWv_x4T`jrR7~*wuwvj?T>ByO}EW(*4Pyu?eCzv z>530~7M4U{tIMT#s50v|L=~;*V@*ZTw}cd1Xv|>Upq^riv~hqA0&U*DNG~e(Sc(oy zm}=dPwk&h60<&0>u;iUk{cGL?meEs3FtT>$q4)Q{{~b1xeQqfrP#kas#`wY*V{^iS zF;5IZga}NF&DIK!+vHM?rv0R%M*9Tit*stRh1bghD+amsx?KdCvIqCA;jJAKqXLO* zOJ)i8qvn?S@imz;&HPKYnd9hwbAAp4tk||SmA&W6^2s=g8TIe((Sf7ZlxPi>IU{MB z*}2B{UC{3*hTkvub**et{gOHD{RT$okRY>dL6v!{-FWb_dsH6T4tdBPd9)JoxKbtz z(|{jCD0N(xSIo&W?58t=_?C%dgzk<`r1W_m6nddS)Cg7Vm0kaNucV<|CB+v=`(2&_ z71fu%$1U%;;F@LOCNP0?(C_)=#&XAfAKTcZ1Nxpg784eQMF?if5P*P;aR>wLP=(^1 zA7|I%&RfBazjY|ld$<;DHjXZtHjc37Ud0wwbG8o(zuiF+Z?8h9;n~D2JVhLkrtbaL zfgAI^GA1cpZ!36FY6+vizx%F@-Fy8Z=`eu$2s4iK-%?T(XIl^9Rx5C)_n6;i<@^fw z@^W?eLla8F5f_w$RHY@yvg@WelO>$jC#Nf{9*v~cI66K)@z6{&QZA%K zDt-)G6x}?em>8cIaqP#PQ=X}TAE5Bw^BvgCsPdyIZb?UJ7nT&0<2z&;MQ@4 zm0%7j%Y$Y7A$xs~diS*dr_?_#8y%?5yjQ%6xBmZOc8#i?r1)d{6a8};0N z)v$4asT&z)sz^W*DS-#x&-Hup`Grzdb|0>xsXapk*O-E z6v6P5x7k!LFCvxD7(nzotNLMtIsUPG`uemt=-Pb*cQ#Xa)@eBUp^ig0cHOtHjJ#Q^ z!c_^R?Bwosc4@T$CHabUk|g>_v9wVH!@?Gac`?k1Bvaba>5jyZ#|j$%R@XBoahmg= zf{ZZ<(<*~F>xFelHpZ0CnvylvrCF0_*QCi6-d*bMh7~8p4fz?=dN^TG`T_it2jnfc zv|)pc;|Mt4Iq!1(t!3mvbCpohmpcWiPQXruYejo6EVNqOV}jU1&5yeNR&7qh?A?9Z zfBeYpzuPe#m`SyEmI$Xs*|L}>i#*Zjt|M%0D!WDQq=37`bIYkWAr;shhTT}DlS!h5 zQuyww@RshqdNh+|@nfbSI&b5bdKcB>dSzeG^8MWyZC;^-G6Y?R`CZ8b_cr^ z;il}c(S)$*H-K+$0D*5PWLJ|l_f}8|l`t8*_G+-Q$){1`R7ZRYQyNQ&Vb#6E#$3Xy{o0cFy4c}wo6=nJG`D_Ehq`qRPd-QM4cJFiJ-y= zaCBNg4k9K8C&zsz-y;9(?o>c;6;jLAY{43UTlzueX+tRK2{s(v9-|sEwX_wo+ZM#& zX2lXq=I_hILlb?^&+vq^OK|}=EvNbVEJMJQ>}VP#W$E8va@bQ`M}Oyc0K? zPFIl%T}JQ36amHvp+6wf4E+g8SXI^-1vXJo1)%8Ax(dG^j!5lz(y9rX3vp~M$Yq;K zwk|(R_menFqTnUvYgTWi*(jtNZZbjRFo_A;o?#TJaeeEFrg$%cT-x{PSnm-+_2ToS zje$Dqh3=c!v1)wNM6)3L^7cvd$@}&q27cwTzTWR^b`8@r;v&>=eLWlpygyN>SUK43 zqpzMmef-szHx7Ze_uTHh3P2ChOh5t^oKrqAEBTJ^?VoDJdQ61MlcX6W$>eaEXr=|# zfyot~WXuFZb(A%8h+Cz&r}^|Yqp;9IOukRzmeD0oDE1IRq7# zC~p{h8*zfik>rQeX>8eh&%6jEyw~MkoP3=WXNt@Rs5h0JMo4p#=9ZI^O2i?Fx{%i6 zjFgSicpCV?MSt%)4EZCRh0555(fES%oORXbj5(P9F27}C7bIx3h4wmlW~d{wEFsZw zMiNOhI8~Ic>022lL?5eigyn%GCbhX!1u6v}XQZ~Z8Yko(jX)E|WdsSzyw}r2$lxV; zj*17s(n$qHgGvw-l564{bWO*vF!)cdP47^2PR^N*)ri&sB;7gw-`^Kl8F8~VF1q9Z_ zzBOIFmgoy%Zgn64Q%fUADc=YyV?br z6ITqQ(-oXC808|5nb|qVR4T21^?SB{fGcG;vQ^rv36YZ%=@Apj7Sb8(y}O{rzAt54 zRu{KRq)=cF-Z$>jV6X1uOPnlrM6-V1D6=G*a(?GfPD-<;a+q<2mQ_J@u=IvCI<1q} zC)*_gx}ZdPXvtLK>`CIv6HAzMS$29iN${3}|9)4_DRTz{RIg8hh!eOZu%trg4O<6T z1=`xXxb}#8SY0cvEoVYHWzUAXoldKvT4~`cJzJ(d8lEQj&=? ztM(Su-fNI#xUw#K99S_3#V?MA!+Vf>;wTWTV8fyYX|r8�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ⅆ35jcwllVf-?l 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 diff --git a/bundle/ruby/3.2.0/cache/rexml-3.2.6.gem b/bundle/ruby/3.2.0/cache/rexml-3.2.6.gem deleted file mode 100644 index 71a4946a1b8b2c4f8ecc23532f1d574095fc8702..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 102400 zcmeFYV~j6A_a@lxzHQsKjoY?u+qP}necQHe+qQYz?%&>bH=CLK_rp#ynaqCJ^QCZ7 zCsnEBse`9%O0|No}{zs~mG4)`?mZ!ybYP1kAP`loSwxw2To18XAWEcgyly6&NX?})PWQ0K zlJeEiXyS=faP#M?rT%#O=&z#~E_^Pj(v7LyK^b|M@$3R66eu`WK@z5J-Xz^HWmC}c;& z-?DV{hw>CHiR`f_{zHR?eH`+ML;F7QAfkoLxzo0ZYg1-_tT{8!Pg(PD`7dkI0th+* z=U+D}!oBX0!*P`E*0eq7(6rC5BGmJot*f8OS^a#RGw7thzIS|HFH3JiZc~Oj=N4=k z%orphy0R!wK=1`Jz4%pa2ZBIOC0dLo2PSqz@(hL9X1v9 zB{Tz#)l@g2buZkHz1|tIirJElrpz9GCQKI?DTRJDvi-1e_^UQ9TrID=g26e&SF5D> z3vC8L2trLpDcubnrkiU0vf5$T-R{wMvBgekso*>k zBhi!$j?Dwf-0Gx_VChYik|937AFxa&gkDsQVFw`xW@|!WpLbYWpeyH!%?qS2r{aRTtc$X6PUMMUi>QI%f#b595nWrR9;eni|`QA)>xe03uM<)bt8*1}}4p zfD6(6nhPntEZo3ADND!^ANE6yGm0`-SYjdH4L@0=RFd4*U9<|eW#TU7?=3Yqnu$$F ziG_S%TPj*FV$dOZ3vrftZ>9lqV9 ziih!ox%0AL$_jDJ{oJUXV4SLO$B$H@8tb+~JVNbdlx!d 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 L0;3^7l@I^`4I5b< diff --git a/bundle/ruby/3.2.0/cache/rubocop-1.61.0.gem b/bundle/ruby/3.2.0/cache/rubocop-1.61.0.gem deleted file mode 100644 index 4212898ab275c6f7a7a0567496804b37b3b0828c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 631808 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 ~O%=fmvL2tG{sSnI94Y7`!K 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

    @w~hd@b?ZNkxZ8`l22 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

    8=8zV)O5F*mVj-SKf>Dtb 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 diff --git a/bundle/ruby/3.2.0/extensions/x86_64-linux/3.2.0/json-2.7.1/json/ext/parser.so b/bundle/ruby/3.2.0/extensions/x86_64-linux/3.2.0/json-2.7.1/json/ext/parser.so deleted file mode 100755 index f4f25a59d74371e24e4548229b3d98640f34dfd9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 148112 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

    -#xM}1e&vz#0twmx|KMA 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 z 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 RjsI~OyQ+j^z_BUhe*i4p*h~Nb diff --git a/bundle/ruby/3.2.0/extensions/x86_64-linux/3.2.0/racc-1.7.3/gem.build_complete b/bundle/ruby/3.2.0/extensions/x86_64-linux/3.2.0/racc-1.7.3/gem.build_complete deleted file mode 100644 index e69de29b..00000000 diff --git a/bundle/ruby/3.2.0/extensions/x86_64-linux/3.2.0/racc-1.7.3/gem_make.out b/bundle/ruby/3.2.0/extensions/x86_64-linux/3.2.0/racc-1.7.3/gem_make.out deleted file mode 100644 index 9976a328..00000000 --- a/bundle/ruby/3.2.0/extensions/x86_64-linux/3.2.0/racc-1.7.3/gem_make.out +++ /dev/null @@ -1,18 +0,0 @@ -current directory: /home/runner/work/optima-tools/optima-tools/bundle/ruby/3.2.0/gems/racc-1.7.3/ext/racc/cparse -/opt/hostedtoolcache/Ruby/3.2.3/x64/bin/ruby extconf.rb -creating Makefile - -current directory: /home/runner/work/optima-tools/optima-tools/bundle/ruby/3.2.0/gems/racc-1.7.3/ext/racc/cparse -make DESTDIR\= sitearchdir\=./.gem.20240311-2010-4p6hqi sitelibdir\=./.gem.20240311-2010-4p6hqi clean - -current directory: /home/runner/work/optima-tools/optima-tools/bundle/ruby/3.2.0/gems/racc-1.7.3/ext/racc/cparse -make DESTDIR\= sitearchdir\=./.gem.20240311-2010-4p6hqi sitelibdir\=./.gem.20240311-2010-4p6hqi -compiling cparse.c -linking shared-object racc/cparse.so - -current directory: /home/runner/work/optima-tools/optima-tools/bundle/ruby/3.2.0/gems/racc-1.7.3/ext/racc/cparse -make DESTDIR\= sitearchdir\=./.gem.20240311-2010-4p6hqi sitelibdir\=./.gem.20240311-2010-4p6hqi install -/usr/bin/install -c -m 0755 cparse.so ./.gem.20240311-2010-4p6hqi/racc - -current directory: /home/runner/work/optima-tools/optima-tools/bundle/ruby/3.2.0/gems/racc-1.7.3/ext/racc/cparse -make DESTDIR\= sitearchdir\=./.gem.20240311-2010-4p6hqi sitelibdir\=./.gem.20240311-2010-4p6hqi clean diff --git a/bundle/ruby/3.2.0/extensions/x86_64-linux/3.2.0/racc-1.7.3/racc/cparse.so b/bundle/ruby/3.2.0/extensions/x86_64-linux/3.2.0/racc-1.7.3/racc/cparse.so deleted file mode 100755 index 5b2dba8205bc25c84053f3899c27b56bb4e1d37f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 130000 zcmeFac{r6{^f!D=(d4KoB|4NMGAqg~ImS$ls$-rqWr`#UaXOJEX)q*8DUDJ|sZ0%~ zXfj1n=TwF$v%G8H=RTaTU!M25oSBvtaRAG38`U z2=_8!0xM*dX9;}BFaNs_?oNUgUfyK&kbv9G3UT*hzCi4jNV^cRIBR+xx{2{rR{#XGz7zPkw)l+$viHQ6kj~yVh z{|8DSd_-vU(&L7D5 zw{n+FBLDFu_{~Xh!AbC-NpO)#^t78KzxpKkH7CiB+9YYBbAUb$a{ksHWGBgAK8gH{ zN%UCBh2DUi6Ai~i;z|jpw zT-<||zz!5ecKZ7GqNtC92gT9T-rpY)?oLYH_FhM3x4RKty zub+F6eSk9sXZ3V<@C$SZk@NSFQaSn^r)Js&1M1p-_}3@Bv7r!%u)|CX`g^VskzHe8quf6s=`XTzJ> z@P%wRoef8GChO^9!{t~Ygu=c|f)@f9I>#Oo8_rrQqC_b+oPEKkz=q>n2~3t68;*R$ zdUV)uR5t4&v*9dXqcjUP92&&fvzZN_Hii-ic5L_zHr$O3pUH;%vf=z}crY7IWWyua zZ~-D2hA5q&`!iMv);rI}M zr3$d&c$da-VK#gjn;a4wF2#mRvEkBexB?r#oDElF!)4fT9X5Og8%}1!<=OCm(SIKJ z=YfA7_~(It9{A^he;)Yffqx$O=YfA7_~(It9{A^h|N9>3A&L!>BY*IbX*@UA6A0w! z!T`?EDsp5I-!n{^QPocXcaKVbhJd(;fbzSclx{}L=;&wyMxz6_ZbtPOjSdjI8BfM& zbnw>AxH(3n1GjF*`7s(Dv~@F%j?w6Vt(&obj7Ene-HcshG&)f0X4sF>=pe0|VL3*l z1GH|2?ih^@F1s0uV>CKQ>t=|L(dYoJn=xyQMh9oz4306Hh|xd)u>s1iff(37Mx%o;uz!q32Vh|T7>y3T!2U5B9k7D^V>CKg1^dTnbf60MkJ0FW z4D27H(ZLwlKSra2R?dJ#%NUIgz@YxeXms!e z_K(r%zzggjqtQVZ*gr<211_+Cj7A4rU_Xn7)~9NQTHjg%*8YIrK7rmafi{~!8%&@z zC(sk+ub7Z7Ie`|PKnqQvXHKAbCeS0M|F!4$1iF0!-8O-4oIt;sK$lOTizmh{Mo2 zb+nndC<5hshKG>98fA=AeSre$KV)hb`ALU1`AI()nWKbU{U<;W1gyXX@QpS@QP2-q z{Am1*(2N6KLZHkBa-`-o$O&q-1I>9G{<(}{SQB5HzeZv zAbI!tk%G)}5N%DS4v}fvbYC!(Obg|syD}rf^c~EI6nz6TqChugM%3u~%!m$sH8Vn{ zqwxpWE$C9r$Y%N?X2gy@ml^S;&tyh|>D*W(KLRwN_rpLyrsXG~_zz}03B{Y4@iY{# zWyaq_+?G)a1a6P6jS;n$OntF|O#O}75&45eraeZooX9k8NpvPormkHgtXN2M$iM5J)SrE0Y>f?Fr|K??|{5yS|pN=9OYs} z^e!UPR2M;=5a&i>jMSC~XgWk?3J|5am(X88^^orYgdQC-H9HnUG6y|4fE;JDf&&VS zKmbd*08LymG7YqLBFivs2(*Sdn`FCPcN^owAbWeH?G|9Djn^+3=#*B2vbn@X|VoD7bCR3jgXAz7d|8NtdO}UY6s**+of+_VYeFZA| zGI(*6c(Raqw~&fCUZ=O1ml(YZrA4?UwnFgeJN(BcYdm5y_)VsXe#;1FYSSUf_@FT~-CbMUY@h5=x= z{0E|``kTiFNiCeC1|=Y0y_mr9fXQJ8;<53QJ_7?v$<_Tjy`>z)sE6Q05b5>^t?7^w z-v^k6MzBQgo*>edDbn}RG@Ro;&SA^quwv)nBSz~nIf9WA(}9T|0~|1tk14SXQz9~p zDe%z@l*f^oCku4!ho(WU#+zXN4M;^TFG?4|Pw2$R=I{qtI*;= zL?1^bqU@!SXk5jbUYsg@F~-si2zuyefMslav;Zz_n2S>_gM6qOa6B;~TKC>E1evgha&-vJNzmP-yHR(8t_^c|gn2dchuVK8A}Phf=;y@fBJd8GmWS$D_aSOc zM$}$%bT2U${eT4K79BE;7aQ+rSVltuvU&+I4z*1BeK5m_S_~$06Qj`Y$WWUt;sO!X zBQTq!0fRwwD>3Ra;*1=H#8il_rCAFYKpTwO3M(FRWPUSX1Y$H9dX*_Py9)?3;Yf{5 zIK=3m&_$tQ)!1s)B>}Hbh8I4cn9{BzUNkSzLW51IU+CX{VGd-frwMAUWwstPr4*tW z^A)t{G~huqivbKG(MFJoIXcK8KpUO3jmQvtYDbKJQAwF;+Kbl*!huP5Wg$%qwxXr=pme631zMxHKpA~m1LmU zYNY-raE}>GQ1SN>pL%u{1jHkUkW#eB8$giz-W#bG6QfW$tn}zVd@u~q=#Y%+9UK3c zYaPX2dI$1VX=F1bf)q3~ppMA!8}A?E#Y1Z+#x|l{v`{scMP|rhOplnVcM;kJrt<}{k4qQ zU%|RU5CD_YK4tO)FbO@{GW#Yy5gG_BAJrk5*&L!riBZOAC4pRm9vw1A7co{0le=~$2iDlZLv7lK1{;1|{fUu;Iu86j?401>A$CL_oc!_A!dFjpbMo zc-JC&K1H+f6QmKVH0Cmtrs{!Ipn5JLF^gP-6^V@!Sf7hN3`~q%ti`QG%7TBv_|wl7Cb02?IX6(*tI2qe?S2f~a097uAbskOd54EC-lmN+fy5Q|fN4X1w0B@P|R zV2z)+ji`GyV!EJ#ha4G++8~T}s)yI$h9cwB07NB`U@Csbw00rWPlb@e2*!pJRO;C7 z3C$MRV%P*J3N4RJEskspCr6HO5~B?OL%XoOpt>L?2V&Sh%ZOS;=fpfw%&3KB()f5z zKMOW8z93KDgc$Nz#5EM^yofCFc0+>Q}ur05eFy^MWRyrQQc}* zuSOHcAh>1}d<6@#Di8>hG3HX%{EQgl76JrQ9hxkG19<14(O$X~<_9#M!-S^kI`=b3gLN+5gjIatetb-2Efg1S(^3X-0zbQUvZaSzR@tqL9=|(+H6Rl+8 zP>+LdA%IrI(3`PE8JT8-9mfb_M@oUyVP!1ETp2&3&jU^H@eG}(>25Njz5{y*$exX` zu*dAt-C#y7M&`X@w@mPFmbrc#g*9-$DfK6^53>u}Cg?I|7Z^Qm6dCH|KSn|GCa@Xh zhOOBANzj;t6`z~ZrYpWSjpOk{{@Bg{d-2Ucfa?F2<;vrhV>>;piEco0;#6}`y<<(( zQMjKLWCZ%7|I-^X@GBd`(xjs_+8e;c8e1?UoVq{_W!Pz&}Y&ZyT?pFy91O-?63 z=!__k2hN8AHPEqv3P^=Plcq0##!_rPiKK3JD}MyJbTeMlhi1!uH+>El#5^0m3{~G6Y6u@1=I4p==ehmiqKQ z@-yroP`}_t%N(X7;XLXwB!HU)u-1oK$@qR4I!8Up*DI{S z;u565-h*EI6)W;P4R2>)hXAH#)E3}D14e)qstKm-63ESxZOD`j4tcMPIpjX(9<(>U zj$BUTDP-bglo1mhulQ-^@YI>##yuz?*-XLae*8Vhf1b@Ws;m2iPpt$5kM{OeFoz!8s^E> zL%II!}G-53JzebH{DogOgmgwm)wiwX@U@%bcAyd22aS749 zhAjP-eiX9~lY}}a9D9~3_JT0FFs6M81Fhbmj9E|yF-ji_pf>>vt$>bN2jYNTL^RsC zlS{dmEWw;qfb`PE`Yvl-4EfOd{~bswg^I!!&M;p;B}NH@NLp?cl12;TgGE=A94L#H zHY98vmZIcQ3@I&?Li>&VEk$1G3rOAT$C%T6=>A{en9Qhsco6;~<8NDzOG3C)tViI6^eE=!+H^<@Q%)S{*jA*NfbJ502 zdIqaLqw+C3u%mxdRGp)A>Sw5wI85yG01BB_kOa!GZ3E^bRq<^AOacP*&A{M7^jWwB zb2TiaqM013L}-uL+(MiijVh8Ty^Xo;f)j`^K6)Xti&lVaWfQ+(Tp_e@j>>@Ii1AAh ziuM{Wk@Kh}XvHxXVK5~L7*+p4v>2kRVQpVzD&y=%j7>sqm=|f%%uU)j;PbNWVT>s-uK_k zN+|O*WHlPeVM`)DzF#)wXeP#9g#0Ej-ExrCpAn<>AZ}XNW|p)BWDje11Nvj*2fgK_0KnuiMKb;e_V)k6T)sm^)OBfp1Hdu$CSkFA! zV4xK=tkcjw2{fe7V5%2w4=@_0u71LXDTWP}4dkQuJFVmUYa>MKkJEUGFsAxpoF!NT zfeMZO1est+qHo3UBF1}U19Sh?G0x8%Ex>wc869W~K%&nF2HXTRM%)4m#@FlEe#{%& z>qGz(Q@=LMNSucKS`C~03Ee5co7I)D;naxQz#2~Vz!Oj`)|J3>ta%PPs9Q7gO*6di zfn9J>;19@!%3@SO9neF84ec73J^_88{0R2);eFWgas4B)(U*ffAC>?la%3SlR!fPn zLS9S#4(*AN4ZK*T!YBsP_AU`-EQM4wj@dy`3@b>dFGYpYG%0eBB~G;&eoq3kojrie z`OyabU+-{)Avqgf4s5Wd@BRqu2P6+kIRn;^X`6I{ioS`hT~)6@UV0m3WUh*-osi^$ z4mjgf(@@e2NMgP;iqlL*KnNxYvZ*El3Cj?ADarynSXA_4Fpj=)EXxr*O9o_No)Vq_ z1ljev2`L2YR34obz;YasG))zVgXF!aAUljlQ=AC}Ajk}Zc$Uh*f|ZY1peHJU272%i zker>!4RA<}blEi>0xHjYS-`Ckjb>HhdZr7e@Fqgrgr4LH<8XJ^R5bdNv#0i|dbY^p|r!{>@Hld*i5C(-wX;EOqk&zbpo zB8bZ4-vS~KB>knNNs|6hJMPm-QeJ`n0VD@!lCGbheTc2ncImNnW@Ta(>Ei;G3h5*% zs8W)Pj~_`%n!r}?f!;g4eRe}lIR=n|>^%dSRgZT7tUPyr5`0m}-QUgG2}%PA&Lo5J z>cVnjYLl>5LK^=VlV=FY*~>Q|1io$Ic|Mp9BxSShct zN?u_lNl|gNvifS3l_Yz6FZhNL$spL5gw75L93ot6_Cg4|O+s+_=qNe{=&u|dErgJ- zYIO8H!e5V$roqnIt!8wz3(*jw7p7{pqoX7UW8aL9+CW%V2Ye9rw~da@fX#6kI;Dh= z4(GBbAk2c}d-UDKGI--H45w}AfwOPy;n-tE;0PAr5ShWtht8jnatq<_{j1T@2;d>` z3#{W8HYQHr%@;w?Ua)$(@)8Nei1^pSp91JCfB^hK_%`^H0^Aqz;}6Oc0Drz<6WZOP zM;QLl;gly}_Yq*gFA&Med7U4&xe7pLz@GrvtOt4#^!No1a~kpsALLrgPm1I= zo5oMlytXaKTW z;Y95@#0l&81>!hO`GpT7y$^D)<(G=&0c|dX|{5%xX?WF6)N4)yTH=0f` z1s+r2c@J%F5&B)qc=;3jpv&}m0teSKCb9{5Ea_OQNRiPnSYVWt26GwOrrF1&oS+(gd}v<89)y~sijYrV}{^P->1qldM0 zL2F?2;4mzZnKUkzkTqewj*BP2509{?3^$a82jhZSdRpL)gWnco539UCqfGr-YbdBD z%pR7XVXJ`A&A8(5dp?Y2*@cVy|6IWOj{QW%6i7@&2M;aq&<+oM@h}1p6Yww%4{zXM zAs$xYVKW|f;UPhsfIR|uNWwz}Jk-HM3p}*LLti|Mz{3PQOvA$)cvy&sRe0Ephh2Ec z`slNO1XB+Z9xC9W4jx+Ip&cIj;$Z|HCg36Kd#Z-|`m0G&8yw)fxPh>%l~a*ZSfLn* zk&642l;jjtq;Z&8?qvURKms@6Cwg`Fp9eKFPS_2z#tBw`A>lY{Ji+#ffT2AT%HNES zKiD1-F!;p~j2#OIvAZAw533)*&*riG3Q`zM!1jj_wSYekf)IiAJz6p|nc#@w3kWwR z$nnPUgb8>kju%eABLPQxk|ZGl&oX8}KtFaxxG%i(MGv-zgfJ8S5N@G?PyzwlQ$ctQ z{*Ya66Xc`c^dj7M0$z^e!4vQgIBquqZ^iMf3HVPOPn&=b1CI1eLlprJwr_#=9~`3x+jl~^9G8fcB>1yQaI}sg{lzY{p81;}(9aM5hL2$Q|NM^rR9GkcE&tp}@FkPr z=>G!zn;e5l@J*B8Zj<2tli-n);PHU}&2Lu#|64oBpCtdAN#uW?1pfuN#9!)*$o+T! z2v35mOoD4qf*VhQZ=3{om<0El1dp8rKRF4WHVK|R37$6zUI_T#{P|&${0zYVR=>TI z1Vg)Zi-~|=iI~u%jIY%FOM+E}?;X(m>cW-znh2G03FiU28n}TTq zH!iT=wqP{=CI*W$-?Ts!F)`oB00FOenAcCBmofMo7=5fb3+7uR>@5xcDvIFg91Isb zxTC_o;SCAWgsBJ~cl3joXo2uG4M)QGeI1klFSvLD3i5|rHQ+6mtEZ2Hy(a}OHSqJN z*arp^9DTfeJ)Pm21387i=Rmi3xWmN}@PdcJykWxyD#n@O6zJs@0xWD4T;KuMO0Z|8 zP}W)Lni)_G%-5p3L@01`62*XwgXFbV1WY=CVraTvPuG;Pe%(520~?BsuAZp@$_}@U zjIlcT`@oeO-cIP=k+oaQbWhFxYdGr`G@1*E)iiR;&)?= z-5TQ5nCV0=ooc{O$|Jbq&b>-LiW)vYg};D4{j1jNL!- z-)lQ4|G6bbhyDHy;2gVB<$rbc3EMR#YHFoWZ3Sl zfwHjcX+SruQQ^0qjNKfA8#mz!63ESLHf*<<{O4j9>@t<{OH$ZwTN%GK2Ce0oj}9KP z=-_j=?d|OB90(lz3ess)E(&+N(0Ak6z;~@80*+wJOE}t?46OX!Xk!Eqiw-^)9mX4M zW6<~KRb!*)-6bD>ag)h<5%9m8$lr;QBl}F@;Sl1!EMX=a!6P^zSi8QJtLUJEuBFY| zSufWMS_*0j-MFwXXswNoXMcEQgYxZF`7HyTJq5)YE!14wZ+shlvjl)oi$U*sEWZlDPZD zvJ;1-_Z_rKdAUeXV)tidEADC5U$|DiZ$GW%81J@{GXMAHp$xa6Yp;)7j#ziwmgM?z zzxI8ip7eX!kmao|yX(!~_uO8Rc{(aYDEweXR6|cb$55lTUQzP#t26F5*1VflH&Uiy z(wZ`DtHd9NH$^U#&y^N~%2z4!v$VH3&(*Bi&gZj?oMP#hAt>QHxN@*QGgGo*|2b+R zdFr_}ma)TyGs}KXxmzKmH)Wrf&(uxLl<847I4i@VgQi?O!8c3hfejgzh-K^2Mc-XNm|R$GE z=ijzBPLR6a;f|!VZ}3@x=ld%SkNTKY%#~2Rv7%zO`+gZe*=pIUZUgZ%ywfh)rW=r? zxke-`dKZ2YO&Y!_xWb_Nv1PM(?>70D9CCLC3RHfX<=;{9T%<-)~;vl z+(qXLn;O+il-w*KI5cOf_bg*;y{mj}GU7}0oQ=z7o&QoJIe*r92}#+x=eJ7o&0qa; z?$s*wyUqM&x1!%yZL{Tz&bb|ZuBz6sRyb?XJ`umUpKp_XCo8>q7_WHcMf%Fv)byG& z!pe(ujYe_{CCZCNBdNuK62F?>1cjy3i}hbU45YkTA^3RT$de;kv@ppI#U(qftJ|8$ z7gDz6f3lM1&lpYrR&gV!UrRrv-hGZM-}mAroUwQ3e327)`-J<}ocf@*=RQ0gygL89 zp2XSOZ%QdY?={}AX~`{WA$(Y*Xy4oRbWl;1=RWZ~Q{Od93KLIqgcu=1f1@x_!&rZ!Fm^o%hVVnVMN^{WeTjbg6HK z_V1h{HP!iRJ7#XrAn(x%Ct8&A)oIRgY`L0|JYQ_a?FYRIH)VERTj1|VS@&tTyin2I zMFX?0oG3pfZu$CA-*qdemjupMLO(@6N~aG=GD}3d+pSWADN$-X(J`Pn_E&l``BT->D)?;yr==OZxNb%^p5M?l(+J~_1t64m1A{< z;+0K21^#0Db{snJK4X?r?_(*Cw6tZ(i`BoikDlI1?P*Vpse62HODwIu#6@bA+|9SErl5+Spw_XEQe!ui+t^B&w|u}A;>XyY8T~hotU9D$J^8JSbnp$0_ zUNodD%MWncH@`Al?eCl{(5~L&ogA`g`HC;E)&zc0jkXGCesywn&){~ulgd6-rz!F$ z(@!YR`~K>AQs@gc|NRxOro3r8r*7ifu}yw0kE{9H(;JfNm#h10xCT*@7Z*u~wC_4+ z8o6k@-P91#^@HK5kwsP~V`qBH8E$$cu4Bp1Lu`mIidz}?MDnBf&23xCr{OL&!CByKL%ne)80Ia7FLxAqmMja|oM5;kYgo_=6=^14rQCpRw~R-Cn3 zWH`fLzbp5q)P38NS7%&w93XXCQrFa1%W4%QQ#33nKDqDbjSw z$TFVe+fs#ZgF9uH&MbXZMjcM*SwP7 z;`yS6ho{FMavdc$dd4r$8(y6^kT=h`<*ZM(^N>jBj;PyVTTgD^=x%c?{z&fHFXhX3 z$9_}~iOuLEI!Nak3zh#~B|80RfJ)`;a+(l*DQ7{ZjrQSUhiqMgW-;q`Ax8?N3VaLOvpy1(< ze4PuM>#yuPcf4ku%$p95Iq8}sN7p>b+2y%d^{CC=snaiwUQXwUTRx}!@rSsc;tQ`$ zj`y}-JiK(b<#3I+!p(gbDuf)pw?wC`RQwVhQFH#L1f#*Y%;b~QZ|}mSxnA~zQ}PW; zf!YFJ&i;r8A7nfc=H)x>r;-xB{Wp8w-d?5z`f5>xGS>(2%yw{NTt?i$>YfEbC<|VqlZx^q(`Se1Me<|Njo)6wHx2mj{ zs+V8mxyhqGx1@LOt?ggB8_s*B>hxZB3Z>l@H9WOaZFpp{*LpD*PurW@11xqZl~5!; zZ{NmvT;y-D_34b9*tJhhR!hAhZ#edIdx6A(W2;mex)yj1CEP4H;<-C8lW1&LA7-Dq z>O<2duOs@0ax8~a*Vc8k@EI@j8cMnumgKqHKU4dv*Jlk0x}QYLjk^UiE`NXCOC{I0 zpYho3>Eksd{2|9bvoz{`ugB(rRUfo2dTGbky4(_dx8`Y3^s~Fv-SIb9+&FOJch0Zr zcf3rWeB!xfCi!BeOUO^H58k5g`T5U+h+g?6@A;3mi{%_nuIpWOqg&_$zkB^C>G!G+ z9Sht;qd-WXfa97N&%OX>6%(iWslr3|md=@~UKeDWvGsG;k;8X1E9~=c-_`u^UQWEe zVB7qjJ6;cVTwhWzS=VcqG38i0E1g4c-rTt?4?QMmoH(s>@j0_)(d|aPOB9J+$>-KD zJ2nzOyk0G}V$DZM24mx|;p08FOX@><$XuJ|yYLYW($_6J_*|*ldVO-FNVZ0c&FKvy z8!rp&&|Li5J;2;C_uUq=;8Hc6oeLr#sie)Hk>1l;;Z*AW?CYR@|jXp0FUsVbRI(h?Fj^c#Q`RZ4W;t{5joSLh3KOaD4BSjZ|s1?pwCU+;iJ3 z_g{$W_Ac1w)+kP{>98Ku_?hwM+_y9PYn>ME`dlM>^NrQlfwM<>>4GuM1^*x~Mr>+h2_ye|LN;gVbE;hRx;TFXSk@!ii= zuS0hgoy^Tkn3w)=`({tCl3DM*Yfv99d?B*``Tc2zgMv59b6P?(v@*|K&MZ50;i^*9 z5tpmKE<2YQXIynA%RQZyH)WnfWnG}R;oz)=$$jN|S#!2ulPh^DPxlke$-D5eMXs*& z$yRx9x0%IS10GI)IHMh%M%%WY>|1i+%hp^!%Z9s6i6xuwh#r2H+E9L1rO4;V_3W(5 zmwvwjt#oHJSMV}0(mtNw3S+H6ePCzg8~c1>TbPNJ9YF|spzt>In{bw_};5D%b&N{BNh|=?(oldhgZuKzpS#f+B55h zOq#EHd}}1X=$+Pk*7E9veDF9cJ;H+;#oOQ_De_YnZ?7q zKls#v-!%^vUbrq9p)2e^FMk?%EEODDAA`6}?Xz)~xeMw{>rOxjrE| zTG?nRf92z^(Ta&jIUgi0WXNPBdU0Q!(!YFR$2ES@ybDv}^|a@o8095X>_UeGvt~Zs z^P<-8MSn$Z>&t|z+)jd3i+%4sSgbhfX|(b76V@lRRl;;kKCFJh)pmPz*(rTTE&fsY z8R;^*s*E6o<2l+n*(*F zp0xD7nko`YRcc;-F?uzQ&o*i;whVVxUPp?q>5C>mpbl9TzX380o;TfGDNnd5!hury=2^IOP zzE82Q%{}q#n_p^MwwG>bbVQ)udYNb9K6(x_qWpLD``DfIe7rc=>Gv!-0f$9AonbF` zU%MMHU+|KL$xhPnSy@dHd-tOkpKQA1-hV(g%su3wv*JwK^Zjb^Nkmb#BmL!GF}R{ScT-}Nhs zKVwzw8nzLC)RFQB)S}AmR}C##HI(waJXxo+%KOpumhu~Cv*XU5Zv8?`l)ogIKR-6| znp%*5u6zBrr47RxXB$0v_IfYO-!k>QMttKouZF`Q?FWzN5y&GLHEUN%Iq%`K#B4J|5BGQE*WddP-!NR=eX6y2h)YnDr`Azz_3J_VJVw#9cLFvhF@2W9 z<_qOTRf^gbUZ`(g-OzaK6#rvF_~8Wt`X(`97YBZeh2F1{jX5sDuOWDy~saAcH7M1lT$V3 zZq&P{zQ6S8t~n!QE*Du(LQojzk?3V4jhwpcB?q$J?XR_}-5flXo(x%=Vs31@oUQ7& z^TNKx_d_`K9|>JQ`dP18u}F0L=WXj=FOnE2(O7z4wdvyB zr*ytv5wN!1xxhlCS};9mx6H+$nO)iXrtOOb#HK0cZY`hVTxc=0@J8jqq`ExPkE!!L zLeF-&OCPE`67h#rR4W$QbkTrRL4G#*TM}YxY$ft9?~;oV4C?v0H|Vxl zzc=;A7X?23*&ocVeW5DZHJl^-xVJW_M~Uy$(gmwrMONhswtZ36kvDf*wMqY;!R69d zJe_&Mzvn$SJ0cUXe&=3!gX%Rp1xDVz`ls%_YrfOk;?eL%>CSBD+6^IejS zRR>Qqrj|cg;rjJ*?dKFT5#N5HrZezdv&r<&eXxh```_U z=L$W?rk+krPufEKRky_DixD4DCQvmm_`%NK^3ThIH+2u+)yUgRtbJ#+_jQ%psWVmX zS_5e_E0=XRwbq>fa$L<(LGG%9b?iXvfx8;1ccSz*Dpf99z=(fs*<-}pT(_)e?`t8w zuTClJr|8gAU-di>5m;xvCTjF@Y!7|InKwQ&vbWqhz36MVil9PvP1xyG|3Ajd{AkTU8(N+}!i}#@4x??YdP-JBp9$ z+&@%tBw^1c#)nhsFZa0d#vF|t&9$00uRGJtW166Kztx=?dNG2J1m76TDM}ucGjN^f zXFAALy)4=>-BOW%uiDbK=!M6B7N({?RXjb@e&e*#wb{k%<|`;};rx*<82{W$U}I)h zysqN?+?aT3;-`R-)mnX=VY{crxQIlRo_x@$xG~Mda_E!iny;JJdF13binMwjGH6xsDB#xh`4{+6RV z+CJ3#J{?N9aOdK#%Ysc`7iL~qaBAz*{Is3-0`?p&cutYno9DMu^F?z(nys+^&ZDP) zKJ*INpr7|OPtg66ton(KX-!iM8Dbk&*X}qt5cDRxJw*B2GivIODN>&=hz>Lb1!tx+FZ)oGmv z54^rzFdQJ({`!hxv268^rl4~J4=PTie^{A3aI+$S>f)nYF=&5Tu$zN+_l@(q(13Fx zCth7F@9v*Euj2e#kvjXFKW(CWno63s&fT8a`BblXbwi1_5%KxRuEr~~x!uGL-73?Q z`BnHuZR@d2)r~uqR0J9OPONhMV$*sup}>G#dFf%uoQvYumD{}5?O7Z@Z13guS?EXa z?)DH`pIqoruYeA(RS0cfh~SK!8w%=LoXhg0{+wC&%<69D?qK)p3pS_h;@Y86I(^OCP#^;9(^R=o05 zYH6tDRyG1)U-L&JSC>aoT_LNLZ$A%S;7)ot!t>*1K*7jKj+*%gPhVT=WLsIwaeTk| zD?68Iq*kdwipa(^qsld}jwWq#sEkO`3SAV?I@GPURYmlWTyD~opqE>UgLZ^Am7My% zL*(kxlt!f^OH*hTAChLII0d~7QaL}&%V?Xg@%%^PhHvu~GPFyM?)F-vWNTPs*J*mS zLFtX=Jx!~|$o%P-=bzB8d4D#j>8gvcliH`d?WNI)BU$ac$>D259Iu~nxNg(8oVR&f z^1E}LQyzJJo^9KFHS*y`o9~;HT4oPPQ>qVj)E3(|X^N^hUZ)A}d%0%qrM7`Y^2|$X z9`|W%>vYULv+uT`YU0kzB_kqVAFO_vd--t9qB{xcxk7Zx3&!)#PgkY}1sj*AZg8K@ zc;)a|Da9c?fuRzfqaW!5TYl@SYrpJ&(yG36^OS`;Ew*aI?`}$JK1r;K^HDfEs{Agw za)ZYCY&G#Y&-Fa#mgvl_{8V<^N2AH>W0s@olovI={njrRymR>I_wcN@dhZj@n+4~* zPHo+lv57l*W!=i|9lPsXOyy7Xm3_MGxb3o-;MXVTxLb4lQdY0y&=0Nj_?EQ&O6mT@ zUpZ^cL}gxvd`sdOz9XBmI_H3|!QAztG9=kb;DctcMI%sShP^dl_2QlvQk(iaoGRVF z3H%8)5h*?Ysz^MXkIVm_?uzAVOLKcyylqtI+nRV$@bp2eDGT*lIHvU)%zE^W z(sfJC!_Rd>7Vw9szEFO1!KJZXp#&?f%FU3DBIuq!V z)w(5*x9c}R@evBLXI-~rQ>jbi^!>>R<+nSw@twMC8__#*jsHQOyR^sK0)G0=TOn_^ zbJ?G?+H|UN^z-T!iYFR|HKiAQxoXqT%sZaaMcNSQky^`+rl}30b&WA3jjYD7xlfhr8sCZku<96mw0vs* z&c4>|qAD9?$|}R1zFk?+@jNE2XNO70^L$gTAOn@?J>53|D~-^uI~IEDmT zl~#t9`E%}xs++d&;Pd&Skh@5~Um@o52*=aiFHFL@DmPo6)k}%5i(b+Cpx*f2)j7(; z^K90)DLg|9_=WZg+p4Ma&7T)L8_Ov-OwrpXr+oE|hUJtQ&rTL5epPxFCSK(w=Aw4< zLVS8+y093}uh?xa!ONqj`_Fu~Vcm$3pK{5e{CmpEdly-V_?>Q9UUPT(oFs*3L#q{^ zRdPMn+@#!4F5Ee{Wr3o`17+ohywmdiPus@@7&4>|Y7;u_ySS@3#MEmy zUtox7yRN=h28VvTfE{m}V(vU0;Z)bGk=Ie3FO@ArrK^;ClIk)Aaw?Q-Q&xVX96w9l zsP{O>wB0-{<)x#?`m=YFy${qGK2XTzjR==tZ!Kb-9=G$kk(a@yi@h>Zdrz0vdY}cZ zW$40tl!z=X%2Aum_oX|p^cdl?|JI))Z`>tU&)&B+S<4~Q^V`xNL)kJB_s8f^KW}IuEtZQU6x7|x<{22u5|X{p zm2xC~u7&ZlqdJl~&&wExZB*m^rbWK}C2SP_P~>yXH??WcI2IY_4sBFAv@f--zHG&P zQ_bgXqQ%ZW5+VDNZ=|}Ui2ad_sLWgxDfCGCuxPfNP(T zR#PigUh~ZSbBX8j=kDM0=-0j3{m}z^8N230iS$4QZGnzgUrmlcA4{q{C03~yycDwU zh`C{+9#+uvTL1UgR~}|<0UqC{z1;LBa;PW9B1ArQsOO`=z6?fYu^ zW_8^vzwjMZ$wNJMb`{>`BU?VpijQI z31fM*$bBd>_c7-mlg29Oc2zUqc%(>iT|BSowcqRI%<_nYi@nvgTk@Nt?mwa`WDDf+ zJP5Sq-!+d<$as5PwPH#6$lbGy6?=MwleucI-ql#AT5)Ta#yX#MKf4iuZLWncy!-vB zX@JnxXU$bBTu`P$F{$_(N}p%yaagPIZPPg$$6pf2_x@vIDSe&* ze_os7pmJ2I4QcPodof+Yl7pLs=RH~yZn$M?j+W`;4H1?f5*ZYGHQQ?Lk?XxKgJ*SP zf?|Y5+QkKh6h>rbj2xXZVwl}&eKjE^bT~?fmU6v@%k668n zK}u0Z(Fg0~P5U3I&B^WApJH29n-k%?{rve}`3osV-aFhRhx=qN_HIbqvE0dHRLN^7 zd#cBp)Z*HGGlpZL&urZty)sAg>y5DAkcU@l@1`<*=o;eny)^CgR?4i0D;zwONf|_B>S z{D$59#)?PtC~^|T#}8Knje zC1w4MuG5FUN~5_wB|IhlsMcb}k%5pG+J%1_cjQLxOR=J4hE*S1|4zw#X?E(Rs6&d< zpDeW3yYrr}YC65)f=lp8{&rPCTKVg~8iJVW?}$L@FP0Z}i7jRj_X)Vp@)QVRxAV2FrUT) z6_s7xKYXq$ndb1r(C*=?HHUntQgT8~GY4n$iFt{Z(SBZzPd$BV+Q*J>zB`AtH^$gr z*m|pSIOncz?S(Op}Li=yL1&>cf3*9B&^69df zPFb0nLBGF@a#UIIfyTDmKDQUQXfnvbQ)2Y1&r6(36{_fCoV9U!E3@#Zm`2ituor7X zr8Gm@vRkt?9-L|ywVc!2G5Ey1v$n_dmQ8-}cC+`tM(Tc%M;zrxR~zoKxprqDBW3vf zQ0Ql^r>O?%^BZN?Q-7O!CZtz(gjiiYuCD*XF#PRvi8DgBJ_TE?($9HsDy=aKxW8j% z>W`&WQSK+)Or}k-+^;UM_quCoT_NDiGBvZvIiat~n z@wqx&RaSg{I*DN_>$@~jZO+SNYW+ECU`5eV*H6-}pCnyBtuRdQ@*P=OWwA`M zTEVJVI&_LT?KY)&%O)2q@7-%N78r^Z7+f)*YteL)T=`As$oBF_!Xe*`V&)|@8LREN zWRv{EJmm4>kvVPE*_q#3NiVXC?s>kmEH20w?R%NO8x#6-E)?XS)47qeIN^9r z-P>P>1Cw^mH`11y)06Q_bM?8(msCkTZsY!k4Lo{6{C!q2`;*+b1{a3Sy7B9ZWMKRw zo~Ln=d*k0O*IF#O)A`(mOEbUv|JvA`D%IkDXWf*;8QNbKj!e5Df7weXFn-@#jh+li z&6HQ_d$g-MPjsmdDnzYs-@Z0nk@ve;&*oX>xhg9z_te>XRxO@8XF8YDC&$J84}&=8 z?vrb&$tx*dU=&XOrRmR|`slO5DqiD(UyZZ%HcF>H`lz(xh>D&0N6`o`%8N^#d-xh_ zO|P4Oq}6|KO3%!y>9b4YP3&e2N$@$I*kj5yrF56|vVyIK{Krl|Gi(W+cF3E{LnwZ3 zt@QuH)Hel*5-i(}ZQHi(nLV~`+qP}nw#_}ZZQIt{=iGNA?oW4QR#sI8ZvWFXozLrA3Wpi@ zXd$1Yq!RXoa=~CBp%;?@mjUYh$aE9`@BO!4X6#ocio0+VIVeohLb>#8DZxz#J~@Ry zV=#DOP>v19j<_IXRcv3QOw=f4nzb(d0 z-)ziNmi?b@EZGrh)?78Q7sy>ZW4rrshSYDeEUu!_ZsF1h3>qq!hiQG31Ej1G}jSLx|tT0YV=}|n_>g&3uYZf`P&_7*_A)-!Al0cxVaCod6{CEBg z=#a^Ooi7QswFbJc{w0OdO4kS(&6*ngO-aff#SQ+gVWM7W?{a& z-F`r>>uMJ7x>Nmom>{s(-`mmf*zFdbdtPJR4Trl zON_XO$ap{II620nuqijzWm$+^neVm+d|{lPltOT2JNR?iQAC5GyAv>|J3VQJz&GD* zj%wHZFZmSpVl4D!gkL2d^HjdXoE{x!IFCqbAuZ0RkA(?>V$DSE7J$}GR6|k~5%H;o z?iS$A2B?nX9fCJ4!3%8c|w(lrWPnQ0CExoX4R(qRlO z6XTN%LsG?{L(n#9wAF^Xssie|!~eSeH}@+*U8Rv89w39lDpUW$ChN)ED{}g~dBDG# zGSdt~(+vLQ9#&ru{?V}@VlL#LfiMToLcc5UCi#dYtoAV}Ed#HpEjB*oMAz>ohVl)( zcgvwUC;Q8!lr-p)`r@;SQ{A4W@<{i~gnVs+cwMIR(?@nk=cl&Ey(rmpdk8n=nfF7Z ztS9{WVTNm6`1FajF+!hz{ps6mLm!4R7s^YQDfU2DnE=9IT-{uRA2?{mYWFZR#Mf-;b7X_~cRQ3!9=|JV|upeaA$Yr`3YUG@YXct6sr|D4n&jE}XULjsM(g>gQLgVMmb8+jKAGd*!O{T1rW|aGFhr z;B_kHa|1Ygt?Zcf0o|ASju)3U1Nq9Yh;ThM4w~xrA-YD-Ka&ISt2%)`3o0cGsoHxp zTY^YX9J;Rym5(J3Ah-bPOnLf{xO`y*|4>%%Zl^z2{7+GZ?1cxP50AnFc z1LAH9h138tP=G~toI`M|hZO3RF&0t<@^kth$DMTWe>SvY2#>UoOYLSw#*75`HHU(` z0row-#8!9N4}dgHsv-#2WLH1gK>eDhvRNa@Ltg_t%Rxe`z~E**96eubi|Xq%J+wOluKV|EKX)U@c!4^Pp$S9K6N*+B*ic}alPUb@OXFm zL3Vo=;YWE|iQ6Se#;X~{#fxh#;w8Ynj1FChtY>O@M=I9ozVm6%;Cukf%XDPxc-vMtv!6=?J#Hb!4y^7lb#x|tB5qWeE_E1#J z4CY4gJyaGas0JbT%-GO=?C;)OhT$F59Q`>4PVikUF0kkEZtu$mF75Iq##2g#i&Dt< zOkewqI>7-&89KFP@us+jrkVX-kyP+^>M)u=`%uA7V|f7MzYRyv$-*$_Guo(YfBL`w zoNJImusyMBGIkm~`cKWt7_It!4)@mnpDrik&;Ab5Qh+hD3B4_8cSoLdcd$7gj=cIf z+z9iM%pJ0TslHJCNtdUksk1R*Up2e!?f(Rz|3&D4?R%Ek{u@QCX|{Tyx<5#Q&F3if{42M` zU6ppZIZuPA+d(cKG{Ztog|Z7Oy4w~FF&XUIQgE+UFzC3uu}2w^aY9ptxK$7{P$(Ld z++RkgR$gmUFi5$Bb3)NwDzDdcuX947vrtwi?#9Lqabu;bM%@XD9X!QGbw$$E>$2Z3 z5Dm!*X2xZIZ%Oopr?oi8;15c?fSn+c>S=0~-tJ6p-igbT9yji~6Ni@? zb9LR%> z7&CUE1U|pEiNcC0@zCLDZd%u%ZMDU6vCx@i+Vxm9c_+GP$l&dhznSZ%A57mk(9;JD z>I{|k=X&eR&E}_iP3dCz$n*p8eK^NjaM$#4R;VUdNQy)fp7Ttz#UvrTfca(9S}Jn) zd>$iCnlf+L?EF_)hkg+ro9C~(H9723Vul*s^pON)A zSe}&$`L_IRn>H^mb-hjM^$d?eAB%r(O1mcSawCMe4s}oL(V|AI81-4s%u7_xc?h!- zW+~p5#s=lq{CAq8+3dWX*8TS1;R{xf^*)7B_Xjq@So!+rsQukJ+1jGlm-1K#5tlc+ zy(6>C2jY(8lnvBi7n6y&=CbNsao3Rq@nn3Hkvtt|K#X4rMn2pSC3|OgsC|BaHeK=P z$vo7<)gpaJxL-5YU;dFvD{ST;aA{Jc!#?W4^B4-1zpoOlM~I*D`}fIP>r*e9OHH9W zD~B?!_6v5dDC8&?V41qkDgTzA>t@Erk~PE==-W&#o)!BR4wbf2$;YoLnl@N~;zm{HFhC!B_dMOF+-EsCcTw z@+df*fn)e)PJm@JmZcb;Tt%4g%5tBCfGg7O_e9O8(0$aXZ2%QB!A^OxzZSchX$-fd?HuMEb(_A^68g}ns)j)_-!%y62uYt4wf^%Gq;rNTCyVB3s}j#S$bS$Cw$ zGMGr+{5EH*34VIFEz>Zb)22u(G>10bl6k^j*^Ga~7zC8uiuwBwurB*+O2X8&e!M&eaI%iJ& zNr#?!=|@|xN}X$mcUkE*r@VNto_T)B(p&~L^Mf#3-UP^;a8jQ{D)|qFrPdqYMn3}R zs>{nCT=HKK%f^YTv6E!O zy^>Tzr*BV91MZp4b9c=>TJUOe=c^GMDKD1Ki;&MVNjH~%b8n}y!BWutcY8WrXDY3; zuJgX7TXWIfk7!8Apc^`RrOK8TSO4DecZdu>;dhwuKpytH9?BE)0t8=-m=0Y`^1yI= zXMEMu+864~ulB6bVj;PD*W;RWK>Sk9s3|tY`?iPmia`0Gf`Czz|A;YQ%pX4+=r$1CgI_?Yz={7+ z+WB8TTi^c|#Q9&_J=;ckToqXmr6)yJP&z|^LZS?mq(oX)uvvi&(4jEr5AhxkJoc++ ztY<8?#yj_ijBm(uWhb`^VU_Z3_kQmu*a#yz^nP9p0tE>LOE0@W!HxegBO7_!+AgfF zk?=RSVVWJZ|EoX-$cJM$uIt>7%uCF7{1c4>$;W9w83f?O3%$S;L3!-O960qy14-&| zq4-fC7!@O6B(0N>qNYl0esK*97!1V9%2__-0{9XWK5|LE6_#Z~3k5U}E~z6a5#Iv6 z2&&sMe`^g`fG{$Gp$dqK{#x*{0Pi%F^$J7jES+f#8neY)pA1E0duStUYcy7;BYnZyVZGfCMLL^)wrP+^X1XW2(7 zF|}e;r)->t9bee&k;K_#_AvgJ*7<*Uozt4I&dSR~@J6Q^q^eZ)^#5 z)n%Fb%XC#iwqC8aup5i2!I0q#*M$0-I@HJ|CskxFCS5IX6p=*8P=OSX$_i?O^EItq zp++Sa^CBg_%km|jXfplRE7zmHuYLapB^*e0*FVjE^?Kco`~BSg{oef@^=bN)o>WXV z8g4d$B;=!nJ0PR+Jcw*m=F?H~Np%6$d0l+=>Lin# zj9hF^Bs^#Y)U*0JTF_=mL#v1E_^uIHV&wmfFX? zQ~~oXnBt8npckfu)c^8s4MhD9f_Oo5`Wi%O1&TL7oEjh=Da8+_KE6Kxo{Io}KE6Bz zWD3v(fO}T05M&|r6dA=2(q5H6sJ|T&3V<{29+&|2o@+F~8Oz5uv^&5Y=o=}PCjdA= z-aqBq0hs=E{|*p9{~vGxwNg3|U5r8hL_2w%al=4{{G-jYz+<=qlpj2Rl0^K#eqNB_ zE&w@X6rQL~-F`cTRq!_mSU&+B#EJ${e%=I0(8YTWYzFkWIYL(aI5mJ;GI{EGdt^L2 z&@Je8{5uSQnh$h;bO<3kq_-V#9KvvG>Smf%F@*IE2H!MMvy(&N& zK`UIzUEvDY8p@|G=(*TVF?mlYQgeqRPM#a^CqOU&bf6!QyQC8l)A*fFLC%8(BNmtv zu<{7^zsi{2@>6Hh&8nz^+>lT|xdMKu^(gkhdu086fUSUdfIPtNn8W}dtNwg}2k?O9 z&})A~>ktq~!)ZpqxIyFg>h`1qDFjr21iC{OZUOL%9yK#dlAjzS&L@eI3;oCa&;1txPXW*pmcH~v&LPFmh^XFs z1qtZDX+X7M%gOKj@N4)-4!Qctcz~erL?FS2Um5h-_bmGP0wGf8e^`qFWukk571Ivx zf%_5r^8h>3_Yki1^4FL(U1_lnSctuVE=mDU0(LMda)8?b=A@FZ>++xQDFz(Z*JfTy zl+nA8U?&0Hf_7Xe492g(sNPfRzk2VajS7!*6wM2gbE|?~TeLS!atog@sMIb3+iNv) zo;QX0Ei2V3qir2i;y&7_{h%gaZv@}@&=EOD zazwAQDWq6sfv~2{SuH4Q$fXF?8npJft;i1_PM1@-EQ6#<#7Ie7Vv)CP0MS@<_&)Kp z#IP*-=E)lp2sZKsb$+&NZ7l)+d{)pfh0HM&si=#JM5>oDvO}P*6lOu+P~eKYNTKY?+kMTM|{fE=~;;H~b-{+%>Y=SX4cl%G^Ilz*vrCNCe){Xj*e7JNrm z$P!J%^9=IC>C?36C=CIn>*Fpov`8Sm&s;Fnyrg*CC5w&w9h?8^ z8a4j1XLeoX(6Bu@V|4U*l`uM5!VyKw;Snu8VQ9QNVq~HXOUO(b9ectNMIw(&z~qdk z;qZu_nldo{88<2>3QMqi4nk~?t_uL`tDET#vmBj_`jaiK&_=qz26o%xC_2mSvB+T) z%=_v$YBBR`DawcGI!pV0dGs!oYUX45lroBQJ!U@gxdJ0&n|r!8+H{*SbR&#(p2OGv zy33;GBo7exC|C5zQ5E)jlVqGCKf`lTFD*0fzJfcw9hBQLGqf6<6gEt9`7Z zowz;AO5e;I8qPK8KN)p63U%5`;M^5?R<7uza)hhmjyv7?kE(qU(hR{^QmaT*_m7|gB;=wT3nCXG#N31Q#ih2t ztMJ}IZGkAwSzrClgQ~k23>BgX$`F&43zanyt&WaOX@g<<_naVa#0Qae*fOo~CZX&h zf9pXD+hRL56!Ib*&@6?!rAjT2P+g9+BZ{M9U&NVf^OLY35-twdNh*@5rjt0svPk0K zyVdO7pvT69CI^HUm^r96eYQ_lZeNkOYMxU-lRI`WORBoF2bW;=v*5i#G?Tj~Ay|u$ zNKd4ch$?^Dvn+_bO5OmZMY}3!aS$$;}<0VD%O0jMiC1H4RVyRm_z zicaas7*62v$2_zfTLq^CyI$_F=7&V~+PVenJcJw6J&v~x!4`}w5F|8dTX98_xe*lR@ zoaGebSg2`ywvaCUH1hhK_BHRQ0h-6m>mA-*_I;xfPEqbW45X$u~jvni!#R%ka1&^1onHk6?t?JoH@ zr<`o*Y8MKQk~u_^{hTCe!#w+3q**acLdU1WPNBsz-@#Zo%?fJhB7EjY=xzYuyB#6Yhs+#^sz>*2v8q{^W7@BgG7RtV<7&Bl7*Xi6bNL9$)(YPsY3*6I?_W zvuSDO>*^t&!PMBb46ikpA}5;97@0}Ni^yoWYG2FpT9%u|X6#{p^CGk?_w6Qe@NF{$ zW^FTO0v1cDa7L)Y)G7#g>*3wII(Lh)I$>HKQB#Bm<2agZW-lK}ivkX|bJo={?1VB> zPK{AmvXmXOjG_bO zNeAPbY^lcF2Se@?V-dT1#nJjN2Pt&w0sjb0J%S4Gzs<-<1vdY@Ja5% z*-Z`2yDib-TJM*Cby$WZpFwF~p;`gGX#mD$2l-^|P3aSls8$3Q<3;1m?Fi}u%9vPI zDiyaDERm-F&LYnItp+GlN}*FJc$0T-I{nphR!WJm?bjofI;M4eb+lZS-|7`Ky)YD4qN>I7RQGG~hJ zo(2NswIW?2@vsq+A$b*-qG@B}me6dW9AU_d0XWu(S`mpabK%-6z0D6ZMD64mV1En_ z&aTdxOS4lNutb$SYu{T_>7dEwE)dzNkSE1%!lRa;HF(#TqMdv(fxbNZ69m2d1}nK- zwdV~tfEL+YZcu~pEbHQ7V$$LJU@n_Id)k;t@tq(GHE@`$JLbLRje>vc;azPN!HnNW z$|p<6mu#i3Q9QC61)RNSqW>oc>NaN9>`(WOtmb6#-PG`jHybr|0|I+$QohgPsFg-K z+W31SX)x*pYX^`1#w ze{Mg~VB(b(&U#`sUI^*@L-^motr4;#W{&hjS^hiOoz8t3iq~20(nF=r;YeXUZDA$y;z1S65H%|R&q6>JWAD+Ulc9n?id!^O zFa@iJQ8Y)3k)0PiPE?QTl{4)fu(gE|XGZl_E!DLJ=~TGDI52iV`64> zN%3<466UZrnoE&w*oK}h*6OQGtMO8mw2U&KQY;>giZ>sI<;CO>pSaBu(khoTIPD$H zrMM7NZIJcE^fVpQqM>KI8(+j~1Nn9f&9N_jN_NB3;35L?(~hIjfF-xs#fbSjBnr&PYsJKs%cg)K?JZ=UhfW zNr64@K>gh#jKrN$g1CB#W|PqNw~TP0$F?CNMZ+^eszu0mP2U)i!4EB|ZGC&|vnbSg ztNO-f3fksJH5Ks(Dhv*vP5*hQ8L*4v39JD=G@R63sjgM#R2cT&y)@9g)^Q`pbyJS` zrm0D zRhwCiH(_4`an=3%*T_uuh~6>#&6wp@+HN~@)qTg7C?UR38Z(90@!peGO?L1fapv3r zB6}p1S4t@Y_IoW~y?2<~uCJl+77Ef8j<=-eA-=i#J^-wI$(R4dA79-5355P1oW?!7 zx(C|rK(v*uI#1DIC5srT6FkDpGqH&QBFn-yA>YQVmxeaFVA=u(hi?0Z%=Hh3Q8ZS%N>{$)zeQl)nu zGBBfqvZEfB9IjBSvTabLUClPEP%od}f2&7My>o9-rCYI*Em5yllPb|{kgscZvg*+F zL3x@rY-y{-#_zs!+&Yit`esWlG(Xoo|6_H_fhv5&#GS`kdVueonxh7w%VRe;_vcL|pnQ;Qxu zX!WLZClLl8bF+qAkGhcReT5zd4Q-3qdT$lnBdfP&htrnI{ZbqnWZ=Yb6L;n?&p9;T za?7e|uov?YlZ*Zm_C_$IzhoK84%_ZBY89Fy)S(T(dC14Zck7B0dSUtX^9Q|`U-!_f zCia$9?8WkdWzw$o@|%lagO02#yB|@In8AUpi@ZGuH#8`bmGm!`F!AZs?W$<>SZiA?bRQ^5>DWPwR^l`n2k+jDFv? zDf`Olz<~A#DXOEsZ*wQ?b@KU1>CNHZqZNwXm5#i%>D!B@>DcdVXOCh*zCrA#eW~YyB(pQr2z_HY;ccp*H~EHLzY{@l93Or;5P!DT?FPXZrAkIDMU0Bn~f)F6f~#&^&0d!BO2Kmr09 zZ(+!oA9DYDy7cpI(zOw?Pr9{g_@e0Bf^+@)A?us%mu1~|Vz#YG18#Ut#c%5`=IwLP zOuk*znVB5^>g6^J{vI1!x9;^z(lVYY;x;q6@0*}EdD|n=A@|rU+S`60pU&LqX~_2= z`wVUujPBq8p>|DMQ`nGmsjj#YNMh%H9M`pM)8g5|Wj|y@4reetYnBpCSJ<8g1I3Pq{B_}ft^~ev_aEX${W&Lx=@sKwx5Xxh2T%A>99OoBAl(XB~RBQ93W)!+C#sdDPhgL0G z<+J2`jq+uQCT>cOmUCpSQbmwrmD;3i#nA#6%(rcs+tq3R5Qg>-b@x3tak|Tk=X-qE zuiuQH4*p&ZbW8sp_}-I$2H>J$!|tqVt4t(eSlZrE#0wvGmv@#lV!{wAla)2U=jOF1 z^ek!#040Zfd^>`$f_v@E;jhbnH~r%1INR2c!)qi|>c`VgKI_fF zlwxPc>9fE^H@aDd@|s;)(zZ2! z2RI_U9IaKha|X1j@Z={!v`wn@pI5YH)-Qn9n#)w^Wy2cnAb#5c%ED_U`zYJx3bZKO z3VAAJQ@egm%OMeNOCTM1uzGg^`H#EoepR3Z^qc+HM^kCIX0DhjzT9n#O#{Bazag9k z5*1i?RsAjOH$fvI>(BU-_(AMPcV)Pps0VSGzjuMfKR5!q6n^ca9cm zU|u$dob~E88jm#mulI2lW;~Ewx}h&f$kz_`lZNRvoewbKB}slbH3Cmm8{=(>pEUAA zZF-mK8(fSI1@Db!#0VD$>*V?bed}=3lW-o_@V{bwDF=t;o>rtRU+XU#}T^XJ} z2>P&eP?U*yQ7VS{wBf2O&5L%%OfF%$f|afpuP$Y0=(d8%yE6ym;04LTCWme1UT&^U zGt*1sjW{<@fyrQWArORNmLCi;>ONUy6ImPBfl1`;Js&aWglnX>)!dD z24$-}IV3M;WO0SZ;XaUy$NIo}-^%Lq2L670-rD89Ptto|OtOO}2(o{FOlK`*xG&Z{ zl#b5eu!&Avb)V*O{>%nKvTfcRdl7H4-t}XAGMqJ==jNA?PusF6jBzDIG5eQ*G%j@o z!eg*y-VW*7d$2zU0Dao)?5|U*=M8{ZMt7OJ^t^rm&A19$ZZyniCsPbf5?Hg0M}wD8 zHG-wsKkhTz&F6zthLL6W>_4|oM3k)~Lr`t*_%l)D8#KCa&Nr5`Kye=mhNU5;Y zXZ5BAC|=~B>lzO2&8Anq2VIR1C&f?!Uv=)=pc@iGkdM)o`iz zp^ffGPs!Sh5oy~x-2aLjP$7LX@z~&$N53GHNV6CpZKxh8gRMHJ?ETw=;kJ$r#T^81 zt&`yuTHOon8B@v+A+ArI^MdUqF)@193f#__E|DX+aNYGFT8un)?d414K-C)dSy!-S z0A1^_E|}9H>}BtfPTBC6`vP(g=hfl-V}Nxt{baU854uvrhv}EFYf1>)m<6ck>RFKU zIph#c$~;DTm4VW1mI1Y|oecu-!8uwGyI43^l{x2|1DM>lSLYW}7w4>J-IZ0Nu!}5* zSC!&{113l_zvy-h7G%h3>(+J0YnxjO%V6*Q3yw|Q8C2T09X?aSoG4@-aPH5E#o2EL zo<4gw?z2|l66x1p;!=1ls0Rq^P~yZ}e5xzX(6h+*oRjdcd3c(GI9w6pS3ta%Vd4)j z2B$#6H3;)l5TahIZRd>va|Vz<=0QLk_^#zCg@Og5HL2i_?d$$={$X^6FCxx=d)xiR zo^Yn+V$Jrpp2P%CC1u8$R}8;FFy;Lez?Nnc0a+6Pzk)<-CI|AR_{-42`reC*;pH7A zYn5o!@`k@%+1{UG-E#7V#b9duH(O!*d`reD;XC-FRNFbP++KzS zrArsrP5l5DlVne~-GF@GL16HGX5Y5HUx+uY(euc?+?|`g4?hTlVO$&(P5W>4#{A_iIWAz)@np;k6s%;hGT(s2X3RVcEWn?0lETlB{z*#4N@59 zx9;gSnI#t!$fw=)fZQe+34R)ItlzdpeFAq!AXwKie6@3p1sy2|Is&T&!5F^sirUM! zJJ){1)Dk*cW5dM6RjmgJ=q0`$7vPUwPDSJeCn5L!Nd86wL4FNE;iY>2QeI-T%sTh{ zG^d9|wfM$z-zmLA@{jdfj!bcAtJ^27UjQEBCdAZ^77wZ_sGVcYo;p0s_LggTp?PMy z+?#>BrbqF!dYdPaetWM$&JS7!@y`3lg@4js4OPWM<-{v-?MBDCeyry1Vp`;-s&M#q zhWlYg8n%s(%JGJ7LR&m5+TY`3_(YOW^iVX(C4ywU7|M!f&e0*ym;O0g!0%nc@eM1?hm-@z zt|V)JyrUZ7eE@;FVANv=TB$u^Db&Mfv$Mk$^Ph$M^-&f~GiNe78l;>G`D|6UXH1uO zyL?tGP_A8)1a*sLOvs}4qp;q>0OzACHJm{}bA);xxpR1$$0$nC8zpDwG*}2I>KRPH zGjA|0+AJAkgDRS*^>eG+eYy?R$EY_RBv%ygNEIyGJqm|0)d)4Z7MZlcgnH3`3FEbM z<~84U9Fk`MGaL9Bs1I8Wb^^x$2fRf7(wd;wjuyLS|I>Ck40}8M0exm=z;{mOvpYlj z<*b{_a5!YqEN(D|1v?^)iLzA(pEYeA^};Z`EvOn`_ZIFLB_s&1pL^rP5I@w$)b0p{ zSK2N)oTx>gVkz4r?>s3xU86eTWRb^e`ypg^9~qO#tFPFHj{duA_J*4y_}VB_Q2+U_ zXy5LofgunkDu0p88VVNO@gDu?GYETTY3z>McOeWf%e-!-BSfj$V4qY)k3)DliMD*p z;Jh(vEq9;lwVS|P+k=SJ(2@*lGH~99Wdddww0MeU3;L%>`pwmCuHU3FjFRCSMDpMB zs=x=Q2MKGC0c^*p*By-Y8MGw&>3*E6fTF5#RW9D`fpJOJ{i7w_T?IXtMCEu~g;M(b zD=TzYOhQya+p9NQgwevq{EWTU6Lyu1nT7rgC-=yWV9XQ6s>>SWOBBh7huom-wsqZ6 z%b23{k0??Ujs?n2&|Qz48}pqOAOs{+bSPj13X-5^e!&-!yomd;3&SbM3E4 z@;>)DRs5PgduNllTA_BTIEh9cT{z}z%hpUAbftJ+Z-%g0Z(cyJTt$mrKl&3OxncRf zZkaW(ce6zqkljC@0M4*^vKFsl&-=cdQ8z8pyH$#vF}pO@ho?i>jJ-g;_*@f6^Uo(w zhWC0;S(3J(+a*FZs#R){B|X@Zv%BwqLuOm5V;~F_&10uY7jb7SzufgK- z5;5>Ncj00}U}?V(nZzrZ>0uBI^YZqR<&Z5p`l0|>3<~GWh%^L7ge8U0&<00AkY}u3 z!hlew9l5goI~vul%x^cJ!>1V&Jkoh=m5l$J!Lq)fIB6N3^uFGq790bzbs(s^1#PaSx%1B!r$frrm; zzWuJ|Fx*JeLhuv8w!zbXm8Lk}JXtj<^6tDR=*{Pa-f?I(nLxWT8tq`hsKi!^|16yc zQIZ*Ykz@%*#xsBk(v`vNlX3wk;6(yz8{Va^Li{aLD!$DkUU)rES$K^&>|v* zDn|J}@}abc;or9@P<4c^RdSJPVG?Jn|Aq>&thfq<)UNV3xKYko#|B4B4v?tyMs7*= z0mHn{hg2Znn1B@`2FVU1TO)6+pcCXRXYSYKtX|m+TX%iwzgJnbWrUBY5UX%R)rISeI`Kh^Deiq z%pgf1MzIQf*!KfuHUQdj27_HU9QW0(y(Kqf(StXW)^s}ViY?10hbA>~!G(1-IKc$# zE{GqK4oV0Vs)>CHBBH4qujyR4u)xTIZxY6{SZm36o~Bb{<@xK9n1Ntpbc^Z5VE-*by28NXGt4%-oq8(!PF2EC{b#%EF}32Xd8` zUq;P~c)^HJcHcr2aPGT1v=qPg(jE%?4c5sNOdA;PtlzJS$L>N%y+-4860(zF6lvgd zZ=eT@X)f9@<5cK(0zWzorlB(9KJO==6)Z^w%ul`%Av6ZxC_G=@iqnbe^O^W_3S6X0 zS-)pW^>g@#+G{!)5R$Z1bi&%C$tc&e$rKwypN(N7yXiyc3F;2LuyC-rB=U+TPQ(>Q-N@xmCtI>ao^DAySaN{T1*~VQtdz%T~`CWG<)~%dj$7vm9N)y&N-=W-?4SUf>!-c za0PC>$G`G^x)w8G4O=aG=q;CPXqGU#JC$qG&Dkb!As-`87})c+JB&ybcc^8d9&Ohx z#}@T8tkCUZQ8n3W>ZJl)5s_r~UULn$ZmNpEtN|j}PZ$i~ygAi-r`}rwpWM|PSZ1?% zFYnLZX}>({boN61zBjuJccX57U#qjff1(In2m$@iB?Ho+dS6cMvMq-?I`aA}o6o=U zaG>5`xuq1mFO#z!w`-E4jx~Frdd(VCE89~P8`P;gRqkB2HEWh+pid+tjv6C26B=I+ zrj_P<2yCw5Keo9UC^$L?)=}=;;y-_d&hqiEcUeAYo$?IX9or%_^fBVQzD4~A*u8>M z%j7)i1@ZNr4cnU+?c6@j@QEf8=Q1d67_@|((%WkG$Lw4LXd5)^x@;TNU7&|0YqTp> zCtHMCK1UKp`Vn@S`xf30)=6hG<7b8A?kWdd%6J>iFMR*(De4U_k5p zm$~nOJU=;f^ybmH&<*GwpN=jkYldSS3yebc`L=7`DvZqJ3WTpeW>*X#v8$Ek7S1N7 zaha%E!)i~4uZOxgxIo^*ZBCVn zItrRWQtU!|7T_WtINZ~%4zO9Bt&9F=ocHg0HgZVyd*Rz+}T zkb9U00~z375MrjH@%Z)@eL}az1yMNmPlY5dLsj}L-(^Cb95yi8m2ys&UE~u}?~~Mf z^WRs9W6_aZ{{WXXB3qztcpy7YwAc`%G(xgVx~64*5HP=L=_JFV@hv_&yhpQ{qhXU@ zF#bKljj0z7gc>%VBrC&)umnlYozXoePrES+BU)0aGsXh_iFGlYE|GOoj0h9qGmqdv z1VyPXI625zq60jOmA{H$$D7tg<8=W;c!&}MXT{wHX2V^yS2pT;Qi4O~{GHT}(aF9r zHXBl?;6QAozr0ycVeSEcm$r5rF$R*&t7#GbLRvm#m;|$XyyedDrLW;?U4L#SPkc=R zSL4oA6a3Y`g*VgX9L^o0jQq7lf6|yJ=X4xOj7}hxBB@dSv5oIdc_;fN>{Y@9cnMe~P~W9;n9fE9 zBYI?eFckVE639GKK7#kC2PEBq*%3#(@3BEME+IlYUooALS*QpyY81)=+KJ^$_bCCv zTHo8-PmJiU9RIfgtt+H}QdkHQ$y2@0h$`G=R0nz8bX2qsNs!nObt<^RPttrKr;&N0V3JV6gY9 z305+(!8OqYNT${d>7}UXrEiJ-`)6OaKRrd=?yn%6hab+o0Cva)kbzY3xy+53`KM=5-f*vhKQaSm3ZvKM6UL-TybFWV zvJe$Xcfjz${|arg4^;R{Wd&7)>XZ0tQJeay*)pg8a)D~dg>xx;01y{I`N*^zn@-m$ zfw^_4QUy`#RHatcI!VgY|EoU73rz1F)==#LAv~b}%lSal`|B&~AtvmEUsu8;M4qE- z$5S|gjmql)MIu7iwTnWOc2%bkh$h3sq)<-bMlI#AuQl-7rn=iTAitI`16I2+|E^ST z$>{<0B3z=bw6md7_J_33JS6UuL{w1Xg+ck;2sIErKZFdLms3w*7Jv-O6YlNvy%n`g zc_!Rs;adXjnd2KLv*RrNk^$#4yFyaDQc^;~1XWjToCX{O+RO{Hq|bOHHS(aIO$H4T zFW`$<9s6FMSfg_T3CW%bk18M1S_6ck$SY7yr+%(zC6`yHzRFCr{FtVJLq> zR0aX~qPkJ+O}a-IuDty%`rjp;&(R5LD3&^y_w*K$3ZRhQrVq7XpcN=>e7G-(lqh~*JtL{cKAY`i(G zjc(zj%7%t6>Vco>sLFn9Oy);>M?NI)vaAhta3phhHGW3I;=FDqFQ!# zz+beESBprg0_qrPuToh*cqYxGdh2?7oc57V4EJj}1HI=~6F3gfOoeV5!KV z(M;Jw?6(7>CyH_j>kpb_MH02mJ<<-T)4wMe&5hE>w+b#eP}c&Y#1t*58V0=X%Z}v9VfIi5a%WLrp@E)a4tF`_nJy z_!-M&5z|TSfe-4zmKC@uwKQLEpC%yF2(FPAf96#6MRU+^1yR;%Ea$g0H&M;K*H&hs zG$yzAjHF^ZpO~3Sq$;@P*gp$!{CfG2y2ClOMM^qEPn@(!m=QJQ1G4-8+$EWDmYXK% zm=Pl_uN6HBsRcAgf(nLYGOolZR}8sAFcG*I#W8xG^ulz(I%WrnP@&;t{-(mQP%4Gj zah103c|xw~XhfMhTqh25o2Dy!xmTo*X-OTiV4jmEO!|xK#Q13n&_GwbTJxFLz7ok1 zgUv-SVrkypupQM2TAi!T2tRSLdsuv2?8(xTGCSpogXyPbV|Hj@gfoZ$1}rOiFYSE` ztF0}3kVAj*LZA6;m zB0Ra&HF86&D!_L|z>FZ7(&$)hQ0Nc`YQeSpC{=ZbN7fNNfST0ry zZmn9XI>oYEsko&&yaf(AMBxWnwS_KB#0@0(*eeatGQeaX`l+vmbAA&$>K?(49vd&} zCDI>+V8BTBDs&J(nf@77I|N_|47=JdF!p(+wira}=FFO?HWp@gy?tvz1L^p>K34AsY9o&2GE{F&c z;$vD&-SwN-{-CeG$qLFo?nWS1D;D-9iP1&0gRq(de=r_#ox#O)yA0|6AYS;6V)bTj#4UQRez@onvNbKDR?Z> zlV*5R1Zav%>8htP)0y~FIn4M|(l+DEHa@nP8&Bo8Oq-{js6F`gm}p$iif#eJWC;jK3D9<1ls1isFdFL355|G{;!W*?x?5p)FFPRp@2~>U zigRdGE45^p;gP~`6u+1dONt4e=3&9(6n{tH=7BQVonFra-7-ReKztXYFR#stBW#(jn^o#{N*`BFPc!0Y8{3J{9u#CPE(bQi6Fp!o=J)D}VHe)|RjK?Y`i+Kyer=i*vL+^YP5oIzUo3heILC2+5*e=}43 zS3UANe5DD9LXXsBXVAWEQ~Wq?XTr;3>D9cwH4sE+r5`IN{NBpT>Bq`>>Bq8$jrT4w z(;7wY^)5+rsz)|c9SU@$($I8*%y~$JC>w!XLWi=ZPb{Bqx8Fk2sX8<$>JDmJ7l1&^A}OeI_m^*C77jop|$xc5=j{ zv^ngj`Y{TdzuQkgp=F^SB&-&AQ8~poV}Ijeyb<#D|44qRcj7+?Y_PxiDw3b@3q8l< z2=L@fk|l~cdiG2R$WJ#f)Smot#sGd&w2QJ<->`sRJ2B;C!9J51V)}}2n3L;2Mp!LU zBUyg7pbYKEZ-8k-E}_>LDgheY^(gL#%73>%;6ec7Eczsat~z6kc@L9iq#|=v!&%rS zV|xR?7ziQUHo<^kg^wr)t9HX3Je%cg70YxbcpE=sQIZ~m-8a7?2c&`)cZO(6600$x zmdWf6ZxF>tAy!US$kdO@TPkuyhI4}PrcE)rX{h-*2)@U6M7R#x4RFU=!BTkXSopqx zcm}Q>`GA0B{O)Yb!U$uS?H^z;XUQCzh|+0B!cK+>^`lIRN|c67j-#`?L~jPCwy@O2 z`pk3%SPrWU#M{U~BmnT_;lZBd@AHxslWD0GN9LPf_n*VvY>IMX67BsY?0dcUE`IhQ ze)=JP{(&w)`H{ZpS1bgg|BwLdr=OBvBI|?R=xdUER`9qbT;`k@cgCe0>drWzBiS}2p+D#iz-BAFgzM8M=63nl!cTC^noXobafTRoQ^^re6PvA1hez(Cjl!kl` z&WKMPED%AjDgnJm$OR5BcC>I!Cqxd!@K$l;J-h}*5lJ=$6|6a7r`c#;dkC}`G{uo| zrE;;v&>)hFc;gI}oHLZCEV8_olvysNUTNtQCNYEf+o`%m*Kr+O{nbjj5+%rq$x-D# zOagpPdQ%bx4GS4*L`964y{k@3qW56S`i)dICw6$-N)yRdh%nh`36rilMt0;`!4T`_q>Y34Ef^#D-Ax zZ{NO+u~&by8A1kN{nM9%E!6#uz{MsnxVTQ@fmq)E`0qb*e}!PYFgic{PwpS`I3Ld8 z1Uq(W3K0M4OU^#}(Soi;i#4?K!nhG9)cG}Zf>Ed695IRw8E^{Lur-VnOtd4-(BZ(8 z99*P>p+{{*W&r#U@JnS!^mbJZ67EQ#$}~A+w?S(9L?yvM|qwQ`^+euxhOa; zTfLZxpc+ES4$Iq&Xo#^AcX57j&=&#ZQsFiudL^QG8>=6AMHm-0dajUnjM0A>+3osC8@)45I>TLH^5HFs&H11(Ct?s(2nM2B+Ut`cHrMh>|8)k03SA$ zoh1(*Jz}-IHabXDok`)wap3g&lK7&6DP6KNC`|X!YzLrd;R7er5N>|jQ;h<;co%=VscdY z>Lt>@8s*a$npbUckrfNHpLVn3rG|WzCd{pF@swnhDi&%Myr#Cj%P$_DQU4S$cmvxQ zK)^r$j2B~MRcp|dsy>6o_AO3FIq@y%6b&I#&9f({(0>5Sv6$@DUAabB*os&btQ=XQNE&J9;HCjXRG z8`TPe0MS&W=8h$sE%j9X2QIgtruhTN_@^mnGcl3(gwFa8HVnV{^)L<9AuIH62=JrR z(jY3aD4_ugg}^TN%gO3fMhKa@Lu5pjQ9@6r8384Uf=>><4j5ED;jLDW0E4Qp1O`>; zJ)%F-9&}rT`)7JX%1%()Nh0r(xY8zB5%`0fOw^;7!4a|bF(dnBmg~|fQnGsR6{zAL z1*_U&6dnjou1f%0u;~xz4BE0rs&|Bh8}Xi%EEr$1)!v|%Z17LZ>mqf4%u%F=DRV8W zf(XH*Duf~o4_?t9wGl|H6CS8qzR~#0Q9$rS$gPO-0C7r+N%dCPk;$90R_pzI4Mw*W zH!G+BCZmyE()ge=xU(IYkaP~^cn9Dkckr<_TC#mkYE0K_s48bN*;Ii{oVTzSI^nP* z3U7-JMk8vqii4yYg-X>amnvz1#1y0ABqnU?@aYNSdtZIj`jzaV+1ak zZTG-NS?s2urk1hP5)YVO-8b3|%4#5qixo8mO-^`TCqa|Jl~P1Ia??T!y$c387Y#|% zx^?Ay^vM*>T>VQ4}kiPYOE^?v92A$V-cgR2MM_4{y3^4oEVxY3g;Kt~e$2)v_o64*(kq6Q+KC`0%F1+ef z&5SU%tCYfwdeYz{ab7pv(3mc;n9-E7|bDDXgp5@-! zrj;M(p{T>9jc(uxa(-oGx8t{4QF=arFWQvsm{e5)6X0PN%Y#d7AkRx8iqsZ!kzP&T z8%b^y5#Lo`y!b7~jAAY#sMq8x& z-&}Lh^6c$wpNE%~qx|!p$YN{aZ;U~IBvVK>!I><-Oup_?y>Q~g-)@P+hPQ!bPjHXu zGl-N`p;jrQGMjAduQTqE!+-yeC{fCnyCkYHr%)iY5ZSl-L>Ocoiz$Pfu-Znl7Ww%| zaRn?E>TH4SV06b*+_55a4tvaTRy)Dv8~3=j@vg=g%yN>Ak#SIVI)0s=e0`TNI8o324|Fq==8n8%av%mN9J`+77G|mNHNweOdd3^v07Rt4`iiigxFE} zHMno135wtMLQuzBY1#XKh5WyRya`eC%2TtRjH36 z3u$z;mORLZ54@by2k|f;g!^)4;25g@aFNx*BJ{JGScE>GblTm3s_L8Fk=__1{X@3sWYXa92?YGo~h^ znwsvNc;Oh4X+19H%A%odf|XEr`G|!(i)~XjZA&zC>w8yJzR##q0()Rrk#8|J;W;_$ zalgKwITe|7BgF_$mQ!sJ>dsp1{+w;sQcp(2*2r{2|B!{JinV3BSJX~WGHH^<*Yjv) z+~YicN5!Odzx>3gX@da$9^3m;BQ4%^7pudQmFTBnG*~c0)h10LQ3oN%FilOS_~b|3 zhMCoA-!bk;i+y?t8cpHdj-(45^|p=eS>xc^SCBKOLQYqIFV@0*Wu1AFc>#1CCYmV+}Upthpn#3Y5j)*5u(bs zuRP>(hny2s;$Wmc|E7D?2$RwJ<%<;M!S=9+USr!-%EfDl(Nt9yV75I&K zBoG!=Aq$l@vl2CyGIWsLTq)Mb<%Q#B&!H51$qUD1QQb1Ts?Mp_>mbZauni8FTc~v{ zG!w`!%dF>9#)4-2HPD^e_Ls!V1Rk#_Tt=9p#>|V58*e$?0;fGp9v-%_${m@9LT5BE zigQg3uM^uh{Q(+qXu(T>w_5j{k}$fbm#-h^X5M!L(7!{E7 z7PNe|UMaejYQ0peW9|)9f6;X+b*ECSSIbVRkg{X5lmkF>A90`N1pCo&+WA6MSgv97Y{sddX1((fTi9A zfy=#-7+-9k{)H??wj08_fZ6a_jyr*?p+Z@5XRv>IV$AJMqnCEz;O& zf=^2!y`6$|FEIFr-5PF3N=Ze#+B)oUqk-qMZNc%Q5`G6{GzbEYU1DjF6^#Y1Yt(*2ioCnk#<iMhHR#bryi0Bof-iZl+#wFSs(^Fz;#V=J@hI ztyjHlmUDyUL(=#~U`ulH@yqax=p9TIwEiqMEVrpoK<*ZVQF$lnV zi7^PM;spXTpg%#~BJO&ZgDysS(JvtFEyCe;^6_b6UtBet;`3s+xL+*sCY!_V(Ux5= za~C=59t84~X7dnKPHHO0y>^yuYVnOoLXO`hf)~_s?y8IIMBHCc4OuD zS#cC@%=MgM`Vp@@xLP6iu+y-0H3dEF2hnK;?8d<4V@x;_9uOQ{F`G1c>~A`yD8PqG za;);$oKKdGC29(tET3;IaReSsAz1~W>Sv+{Htu(BMSPcnYT4b|qZ7N}e>Lw!a=_Zo z_Ma!q*pq(zx>@gqMNHVs+4F2`MJ&BWdjoQKsSrfAmuL}g8`mH##`iZ=dw+iAJ}rm5 zV1NUH)aP658nAy{>?rDH6L=l(FaLhlb);0jZ|e^Nmk+H1`*R+iety6Hl!srO6Xet; z22IPT-9gsg;HHDUgQx|0K}SNfpLSG7Bjqcx-f#-RsMTm?>5kZNtOqKZf4`%ZrZMtS z1o}Ez-c8JU$wf)3ZkuY@L$wE4jeHbgKcjbY@dj)K6ovJuL#kGRQ)1m)qjrFlj*%cxNl_aY;{K8XvA zlU`BA7-|FGBYoAv^wrRwKQIxx?EHi@!5bWu>3r_<+49;Vu}>H)Ne-SM9S<=bp}a2H z4_dX!FeD;8O|pL0a}hRp1JudGVkPL`bd(BA49!Xw0Wiam$1HNyWuryf%<8kqT#X{0 zr`C=uC<8Kui~=!}N?11e;KE$lFb7sRBlBd;$(ZOUkaeFOMP$_L4hBQnXic(o!?){z z9+bk@<*qeXh7ub~Eyi46*S$fDEz(=$q`AGY$lE#Y4l;X@@&^+QgJNuMsCX3g@7gro z;yAz4OgCA;k^m{49H&GCc_(OeWdvTr))JJ35_%%bCpZ>IY^)kH_flsk5n<g5M3+L2+abtoS)M_Efv6n%ZsOJn&EIxdZD*6|Blh33bEz5N z&Z)vD#`{Zp6!QYfrG2F98%1q&+c$$Hnerx*uc!|;w&bWz_f8%un)zseA8sEWsxSFFlNFz!;ua6#12;0k_}(m?f31{`sE~ zCN_CqsgRwNO`ey|?8eVj=VhjGqZ8@0W7*#5M0HyBr$%S0^Rj-0d8RrKo(j24Bz6gn z0*e#mj(fm0ATc0W{5t5J$Y%4{@sC}=EXPVRCdV0L!8k*CKxUFrg;*>(uC!FJk9&C6 z@w)8m8s<1S8jeMli^R`@K^h6)i0ayX>$-(fsZuD_-Esj$aG?f5yXsbo#bU*&Ih9hO z;?CYU6%xI0uZP2CLM>}jXxKP)&3gGjbTcL$&2ok@FAh0VE#2|~J2yM;^i>%A|3$Yi z5^3r+x(VD2sS;Goc>q{Ie( z_+mZ}_u->3nLe6PhS6mE;OHY$eh{!1X|6RO_y`hM5EK{-oFx(%2P8RAR5le?x~COR zNz-E-WsS^4VXW#c9BB(qs5mj(Fgy?A;c@BbGHurjnM##EQzXM#9!07uycMqs&rGGO zM0&z9Yjxl&_$`CH!7yT?M5LTtn1&>)zX>L6z{&`XckKV5jCV)FA*8Vii??yrYY;s~ z=8=MptN&p!0ULI=UrdD(|4gcU#o>h`se{YoS%u3Wr78(9c_8xk1GO8PB6t+E0xUX#U_y} zER*`amLloLm2PDgXoDyddWp((;v@B{kYHe8_S{W;EIXFb2V@D=zYbNz zOfBqlBz&b5K?<&-9vozFU3OZMsNOU(Uqe{&YG_mX4rdW%Ftkb1!Nj{JoJI(fiY`U8 z4e+GogHpzAhF__pidfp*Wm7YdO(mihppoClo)NxjQG8n|m7RLMTy$zRw^W6<=$74D zsZg%t%d3~*Tf)05)yq!TiYlmN0abGxFEE}SG7F4VO&^B4B{gb#C?hi};*I6a-o|Ej z^Q99sr9gLZ+2~S4NHumPz^V}(I$myaO0|h9HaUZ=@eGQWjC-8N6Uihm##1cI0A|#e z2CTvl{Gg8=wD#*yNVP_-*88A8&35PVTir^hQWe^@y0Ufiy&1A+uL29np3gzZz8W{4 zy1^L;S#{ zj^3!8S3Hjwr`(sctUpoyf4-)`0b%Lnnlpz?m)w9EX5bytN7Fi5Q8tBKN@#Yj&TbZM zkV}_MLTQT5PnVP3&eCYW`F8y$I3kIC<<4>NK{@^iD~vUMOmNe}w#!VRhWc zx68ZA{YsTBR1FTb^UC%JZcDs3%IdoA+%!h200GmSU^TQQvr7+KxwfRgiC$ zk^PCE`Q&g6i-O$`v-`tGVgHE1V!e;vlC8jwQP(9_a_V=+p8@<5qa`F7@f5zKo|Ke9 zLU0#6MljG-SYCJO+)mP+J7FwMRHs$8KNt@g_x@?NUCoy0Gs+g7=^XcL8RWDbR+vdFupIi<`UORfEylo@VS)o}RZ`0O*5s)#LH6&a&ARK-H1bl97G znuP&5{`M!F^xUKTX|ny4pKoWg{Em`HsajX?;*-}GY>@~fIW-(Zud^-BEVLJR8z0o->kDQPbx9dcMQP)C>Ifn6mme z4E*ukFaPz!e=%iD^2*stX0PxPFg(sCr7f|WR_Il#>?YK6JkIF zq&R6Aa-*bJj|S*|vho4$psGc5-G~BU=&rb&L%}tMH4;=WvAD=kLKHwiF-cQheaYo1 zwG$~r|J4OJ={ua`U_9ww!ZRP<%i?L~QQyum23_Zb^Gz@sfMa&0>Fi(#i`7srj{`Lt zlY_cx)RC~EBy2RK-)a$s=a+xJfmyDrtFo$=lCnMM#skX9CoRW=ZTbS%N=#%B6de$Oi54Y1)Q4iTk zO1At>7D}So!?ZNv?r<-R-KPZzIScFsm=^*ZVcFKqqE+%XpASnxZ-{W_!&keRI0b@Lc~H)a^} ztLbJOe8q?Mz<)2PRq#wQ3^c=AGt;lgrK~iKEZ~A<)m{vDj=1e)<{mkMJ?6Xtr+g ztk5dVrgTpC!c*GRIpvo+gPqi@E_qQ&&Ou5ge}&l_k_KfzZ&_fdZo{u%xr=!8Q^^S? zxXL!cGV=lS3gHDz*51<5Rh&FRsk7lQV4_h8eTTDFPvyKC`ZH+LQ+Igj zAd#jY@cEk!W;9|gZnkXJUr>Mck&;ykJKU!33K~{~A^lXTE;y52jGR&D`vwsrN>(!Dv4NL$J&?6uGAAw*;cwlDr zfv7T&!Q#{Gt8|d%o*R`uK?g zHnE%ObAL{rn|T^qR|p=%CR(}%LnTf+thGLL{LvV+U3`}*=$GO&-uZY+oN&P$oWEb} zzbtk$?));2jImg%S;kcp+=iIUfK>sD$j2Vy7%t0Yu^ZC=US>v=r_ent$y|7KiL758 zZXxejAJ^dYs4Ru_a^g@urz#{Q`k0tWS0m8u(a$N4mcNe?Qty?MBl}0T?+> z&hQwG=mTS^`F=RS*5O%$4C7PP>T;gN(=y6e0ine>6>6l5{99xaQRhi>KZRKtGml`b zGR+W@8Bx!K45dmZAAYjXTW9c`IHxFj=S7k}=PZ&wNAl%hqdT1F@PseNZIRed*u~`8 z%J>S-HuA{pu3Ict-9oWaE0?O(a;;G9<|1&k$Oc5CQ2jjFQWzJjKREM5g&-Iu{y06> ze<8E|f~p@$-t;rb(Fb{)V#s*k|CaS898Ff|-%lP;o_^dv#?I#A@botgw;bY(pUksj zbQe_=B?l}iUpSNo7X9OP2A{m)zu0G20o+73sLe7Oj~s7@NGB*p09`B;T=zt5kBsqY zh`9j7h4ac+=#Jv14$fOJrmQQz%{r5#{M(R&N+Ld-Yj_wUgFi4C+#P zTQ3zr8-i9WIc^D7Oo_E)weHp`H5bgPsylmAbW3a>lB1T&+-spkcs@N7%@IpAoY0i? zSVVdxs5i^QZ6>4M~}>6RBq33GDELK;QIfm_HAyk%OHSD6h3YS(N? z0e)P`t)Tl>sMTuqN)eX}*zX{gYEGfx)aodWGLeD!JbGTQIlQwsPJZKZ;vHr+!6R1d z)$D1r{~9uC-G+1UTWnm?x6DO>a^vZ+MAwOG!0mW~9cMHfFuunH__uA!HvP{1-BP30 zX)I(2BT==_vWbMQy2%8r$moZlDBteujIkJeVg^4t*Q)W8-(q3H&h4Xvp7)&^wy*|C?O_ zvO5B(@+9dz(c?-oKG5rwgb!)D3eEVyrwMslE-FM-V0y_H8)C3CQYsTr5>#*y^~J&J zzl>D7#O&}K0}00dK{%i6_M6H6QTz7O@_+;GdOVxW#1>lR9wSow!`x&ifH?DxH;S}7gK}$ z3??;^pD9dT<(r`OibUb{$yQM!h@~S4W!b689I!A})ExWRd_YZZV=+lP7UOw15Uw_M zG_;)C@N2orHA7oA>kWQe1g#JaL+3@_DC4x8qI?nAJTG(lB^t}^ETHw?5PUgcTM?R@=-E-j|!p%v>vDtRz zA_38LgP;^#qK87FA2jfrs#w4aZlA;oHs80=I?e!Us1gZBH9I&KX@I4RubiTiqe1`0 zd7)0iwL{%G+2+(dP)2O~cur1Q(&zOIz{|PcJiJ7Hg;5DYnjzlcyQ@cT1XrO@sgA6$ z>qhl;O9jW=-cwfHMe1~8TOCgNUxGs;;m8X{;K1LA_--;-qbYTg_&$o2JUvhlFcqZ} zO6)b7O^H=Q;r&rW{~o|^&kF@}YP`D8@>o=-8R)4ir%ZBu95;=C?b(!%EE+EG$H zO^C|oV??-T(2OA?L_4#JxbNM7;FJ6nNW4h+)kdr{p<5U;7Iiz>ZYN(kKC(-4kuZY$ zv~IrV=k;He&yVNvZ;&1k+|(AikJNrQSqO!m1L^_Y$uErdA}^G@nOcDv1~l3gWG*Kj zPsdrk8e5|;d<~k5ku;s)%5My>xu*Z)cCvZ2sDlIg0wa%g%QM)iUsZfr;;~3<8IXM$ zvAdGJ9>-?kEtffn%ER!0}0&8vt zuS|FGJnDSYr(fR<2MHH4Q4tWE2pkbdI2B%lNCQnrlG!>SYtZ1+^<@k@YIfV|^dd4^ z{gt9-Pw0v6=QV|}M>CwujE?f{{qTcGAE8SK32WX>5>;}n(mcSufVX4_%-9vm;8fwz z8(&tg@yuf*J9e#Azsnf_S6oMRL7Y zyiuIAHE&0en-1Gn62&ZR42#w)RkvOqE0{CKCN#h~jz#`F+fttHX^+9>X-+raMK9vt z&Kvi~c>mmpSm&RG+#k8`esPi*WegY3*W0Iw_8e$iNOBYvLKJI5F|A`anX$@(OAXgxZk&q_K+h)2K>wO4)ZtT)HEB-XMORFz3j< zf>c>ttw`Ki?>K_8SS@4`qy586r{~_`Qt)Lxh|3zp7~$#=`zsSW$Yw(-e@5E`Z@l|g z$6#eRDd>0xyRv!l>mr8VZJ`tpYtSvSLobHG$4+LOah6{-e>p%n9*fM1-zW4 zEC(X?Pa7mXozIxQK*yWd%pZ^1AqXR!4jp(AAA0ue8Kl5p1VQ5w%&Ws7i#^&{abEpc1%D3R_c#Al_^({Gl(v;ch=Ro!Nkc@E=QE%#*XEClzv4T+hG?|_8iioGK9ry9Y?`^o`AC6d}WT3 zD2!tcTO%qrrNefs_I5Q2Hwji zAhC1e-~V2%9~Q7$whw>&VRFctomo5mYtNSfyW@w|XUK;XjCvy*Q91d^_A45AvLX1x zTKtu;nK)?zr{(hMYtub)?_v$;^Zz5hJT8_qfrM7g?jVpA1xV{gc?R1V6StFMykmA^6-zWL z+U8k&kr6MXQIYpurXY*z^m5rXdT{k=HG1pKKD$OQ`Un<@)^hgzw0KY%$t$nV)jgCJ z=H418)~=eWpoHSV{WdmXMv8|(Xk6s6LM7ct`lU)Gr>H8G2+~Cvl&D~ukbxq;OM!m) z+3VF}ilN?E$J0a;i#!r9Do>L8w^1`(RoapfT+Jb0tw|`_^zVkU<|)FsVeWJ-zYB*eNl(jYrHjS(^!tAc5G>*|n(?IuWzu92QHoDy_hr!aSbzv; zHD+6mu@Sr;)_+DoG<}P6>Ir0sR8w;^=Z=}uE5vCvVta0EuNd1a#rDdvy-IAa8r!SI z_UdLihd=I%_^wWEc02v|3?2@Kh}7Y5=LUafyqOaddS>xS7EM0MywKZUjqN`cO8%&_Tlyk2~ohNRS#+=iQUqGE_H|60*J|J1crhA*o<+@t|ab2rd>qWO%D^=V|saUKP z-D({xw`!%Fj$0EDvG2*g4Mq1TbsDFGs5X+U2c!Ji;1e;1;&dVfnS>_x*nxjXwwOqb zyjW^``Er%*We_W~@%k;1*w-b(9Fnh4-v}_Ov7UQ3`(N->WH&Qu^7Edhm~;*BrSrB_ zaNIgP+EURi)f{-E;0qNo(hQHeR);s~6lZTr<+esknNhz}@lq)6J`(|9+9YB|jl5xB zp%s*(ERl{1oy-o237Gtof>^eQqzv99r*%%mnv3_%8pn@9Z^Y)0`z04_Wfbb zfVudPPO)PRg0Y>dwR;^j0G6gHV3|hLnTJr6QOpZOpUJKLlQifM$CUfvR z7L%EKRv0S))A?Z;1g8j|h6_Y!0fR=gbF6+fbx0c+tbx_@;WVE@Bv1k;g%e0Ly1_gY z4Jpp~Ncbw+_-w%OY8^F{CSvv@(7oprcJHRsMkbLY?10A%O(HAAv6+Yh3sZD}mK+8T z^8|I{?n*S@aWH9*69Ufup1u!Ee;I`8bX(fs(0lMBJ|P*g(fR9JO5SRRns6UAv1;=w zH`N+qi~ug7A@)rT$siEs4t+1mfrku+)L$<-$b2G|3_g+gSSGrM8}~H2I(vJB#FQWY zh)PJPL_3r@XPy#5HzbcRFI<85aYpw1B4af!WNozW&AQk<>v(J$-pj{wRt!8KWH1(m z-=DK6jdTRcjNXN;_5N391PcGf?Ou?!AE; zdxpTzDNaqbiBd?yJoQ|3%hu5tE5eA+uyK=jNgKIv#)~Gd#3iJusY0TmmP~9)m=dCv z$lqN>w4~dE@XsAHNhgfPEsi4%2VXeOqMfX0CFIG@#ZFGk*<^Ltn8bhP5Cy0>d8VAR z2z~?89G)hw)y3|x+03@tvy%=Pb$~Ab(rV>u8O*^-#jO>EeUh-7bIq~+zJ`xL9AZJ@0Kg15^s6xcWa&dp5TidZA zb~W3p_!b7EjF^^v+z$FNm#$W!iem0Z&%Kk=tl&YSe=(@rAmSR1n;_4E!;q@0K?Vgh zyl*r^V$AnCwxP-%QG)oO87b5(5(k;B+qJRR%y#yW7j%~C5UeI2;qy&@;J_3~vS~*f z+fc?@cFYmzj}@(3%|PjzY?Me3pZ>uVnZs4&!|%IlvRBIm=@?9X$*0X3P#zB31re@^ zN}Dlt7sB#e?J*L+*B&aBMk%NCjT5&&zrpF7d4ePoyG27S3Cmmx<)Xk-D2iwsxi_CE za?Z87M39mw)}=A3)>S?AVwf7#F4S?1I+_t58!6MtGWOU{?FpKBF-Q3`59#ipFNfh* zYp!uWi7gE4U7FYax9VTu6nG{wB}!>nF5j|$3`0iT>vZXQD(qbD-}3l0_lN9H@Vn;^ zu&V>*j!cD(Li(MU6SN&0G)%Tz)z)FY-r_r2Ae;dEcP_*~b;TH8kQ4vNs3ChNe)Zk;b`l- z2)<2@`;6uV+=-(Trr&#VbV4d5^0id}SgJ&{A_o*-F-jOp-z;G$7$p9#wE^f96)?KMkNXo0Fh-sTX0^$^!oZm}SQIlg|g|^AkzHG`&fi}ovBUUFE z4~Jk_Qh=1Kf>bbG<}sS8dJhB>OJ`ZxsSBF8--3#&lC!Pbd1QoHF)Y&P%5Jfjif5Hv zM-@X&BK??3+BD_yl{dTGowz2m$Cl#5O|vaG`v>C4#HNQ)({C!aic>U`Eyjpb^n|d? z79<(UV`GGHme{jC8p|Ekp72m)GB}nQHenwQqK6`N!g$d}zct`Nqk9{pX8g{;$AVmH zPc!afKIq7}(n7zf9<`V#;v|uZlgO^e*UTR{&S-#^$o?*cVLwV1ed<9524vB3+(Nxr zF2EvnE7fYvsTN%aNuUbIqA%^omnArNEu^W6KK%F3$&k$v*6SC~Fl)G@qat%u2Jm=7 z6yKIW$hgH)1amDsga)hFuIi*4z`Z96vGyRy@vl@uPWIg zc6=F(Byb!4n{U=Tu$0V9UK>=&aI$|)bo7vDIHUsr6BrBORLdSo3vc2dhfSTp5$28+ zqi{Epk)L-fs$H5hbW!gn!0KoNG<>7?fi!N=+oMIunOw!nrl@s|Z3_WWBqdWYDI`w@ zMNf_D)F}~M>dmi_g+K@MbZ!Kuis0brK+sRG*JItAg{D|LwE-iikhV|S= zU6}770?0RkNb0!Y6NEg&l1y6DN2Y{6gTC?gTqLPGoI~FjF_B=&F34m*qmnm1%rVw@ ztxYIiFxgWvim%Vewoa99$GJ~lC_TXjzQgN=YT&zhoG>*JfgMG(X>o}Hg>qI? z9c@`I_Ec;JW3mnVG*LFDO2pWvUCvhO8jQl@W$`8vFIQ)!JAMd7a?$7rN0BH~#W?!# z=$e2JtP+L~_e;xQD@qka%M`v*qS#Gz-;q5N-#8IQXhY#%$JAVqp(Ij?u6}P428-J@i8V}1vm11&eTIR zKHpGj0oK1gn-U@#7j}DyZz3-c;=?Rb9_?@lfHuLkF!nG^md8epa_Mx2A1WHjBcU-S zjm&A#7*l&7*dA@KRP#qt+9{hL^RUGR$u(mOACM8`;gpUV>FVxRmp)|N;=H=@inNXu zH?IV?A{rH~x+4~yZZWOMy{r(Yu1-INk`f}g>s=1I=ztTa69?uX+hes@q#UiYZn<|~sI3v5`+qa&0{lzk&LjAm6b2WP6 zqwx1Z@3NzdJb2IGRg;DJF`~bW1C~(OaXHITpq+2~SPAV)PakQBSi zBOJR+c!uT4pOQN-$Q-rFyA|?Q&f(^2)euYt>=}tUnlV zv5s-}rilILG3-H;IH&?%q=Bg=r~KQv!Ol%gZfGhtkQ+?6w4F_H0n8q(E>^gLEiK$ahAqRrYht~Wc=hUXqiifa zeB%v~`_sR~CXAfn>x+~;E2#cB)NY)-fSZQj2Ir>T!Kw-h$5X&h_iVu(DN;BUASDW> z3=S7BN2_Im;H7vrQD9T9@x})O2%YO2a;_1~Izs$d)Dl+j#>(Bu`SifOp{Bu6Y74++$KoP z!A&L>aR0bne<4<8q@~EkEyWcg!?s)!lXbB^%7L&0$EPzrZ^9f9t_^0^u}HEU%_z7< zr|a1Wwj({a=AuKhEbfz<*^lggL)qtOwMunhn0hoL8n3Y~&j|Tu+~X|6R)&31Lg3TU z#Nx(}3P#K?8bthy5h&j+oncnmtNi@3IJh1p1=8kSC3?SIQb9;F?*UJe@E^` zi&LI^UUfR_(dMArl9XkiYSK04uCuyA4R=xaQ@6W8|FVrC2bdh=TQwIV)W9+0pJGMk>ZX+K;lhwlj6OZK=dQHIGBTz20#2}h)r z=r~fMrcjqz-EUUoQ8AwNxL;$Z=!`beo!}N`Zb#NSG5l0p9vJv&^ap+6mdiRcDPaKc zJ|mc9g8Rl?Gov2<@2ZDJ7|ok0N$6vBeApX}0tAY^lj32rjy~vI1*7-D@50 z3#bA_=q;ps#V%M0zSpPO(-YVn=Tp35ANS6CuX{%|wb9Ij9{@AY{_ZA)M2x3M&Ojc8Q zy~Yrn1253Ql?1Hi%NAx>3O7un2@6CAx^+36tu}rX?pXXJoNVxDYi|yEl?-Gt__XC*+uce+zF5^PIKcPOvF`+-l_^sRSv_o0i3ADHmgJ?D zZW1hEyT(3)ce`B$8PRngYCGlEgA_tMclPix_5ulnKgM1l532B*yQ9=Tlb|BCZf|77MJg2498CG%QKCb3MQae5@t?$)rGMd1Z@N zI%bQ=H70~TPG2Vb0+Qf^H>U)i zgLU0p^AyKKq^qBta-~wJVe_AQty-?S4x7+a%%5m-k1{k3!&^!GWZ0kBp2+v^CvKw!2wsT_MDZNy$|5pg#y3t(K1~AZWC` z(H%V1M)xl01jp)}!pXzKcDCD5?ZEzPI9W}WUw4b0%$0Hv!;q@M)V4M5Mm0p3W>95h zAYq!lM)3Zmb&}c3^;@&aeG%e+k}Hte+7ffg-659y3LCLcAUpoXzgP0_htVzm^>1#+ z^6!=WJJ5YJZnIKxm~TpTU}8N*@6w@GEKwD^O83S2F~c}0)#ph~>Z6l*H-Tk>=A4?%vRQ~UWe1o4LaZ^x zKVl^c*enH%JIV{9ad!lp`NI!Fx1`iA;CCq8ie}uE%7VE(yK&3GBaI8JGWZXjI>cW; z3%#XMy_C4aKE4#PSZ@~}(RRT~4*V#a2jH97vPz67_=prrHISoIlrh?9HkGCmY|3ND zFB&Go8hH%Pl!kuS>yud$+f^#?27h-nxjAgbOaP(TqvO;v2@KpJ{hJxcGkVXz9zOQ^ z3Zc{u&gsKgj5?c0URD#q5e58WxK#|yynu%a2Yw68lx}A<0yV_hTYSneiwL5uV>;OT zHUd%(_gjQfaz+fDLdu0;nt&(-DF&Blp~7eE*CA0J=|s^tkhhcN;^XSH$_ZKN9}62`VF1OOYNOB~u1t6O9Oawsiz!zi_q zLa>j#-Vml+r;A-qeQ)I75m_JzKG107rJ9Ts_FuYQR8W!TVYz>Y(NwjANhEa!Ty5Oy zor;h~ry^3Yi*g9eA%2x&{xEQz_GJdnv^V;IwGmV(g(nYTr9H=%@r?M`T$m? zWgnq%wmcN4?ls7RnTePFP}T`kgW|_rbjaGy9u8CL%t`5a39FG}1*SS12IO7O=8-VL zQ?TekDN5Ot73G$HClwsnyNI+tijGQE!*dC!5o1Wxgc}|v3IEs7!oS`=d6iWXw?&Q; zK4cdbq^fyk6$iTwi~hlKZFGA9WQIDS{~DkV=iHi~ZyXK}Q#JBuBu=8NaqgO=W1xRNp~Dl%Ov)GLaI#NeiO3T`PDhc$|n zf7f`U3WeYqzD0E1Y8#^?AkNYIRmKoO_8rV@Q+qD_i-~QfA2iD@kB~(5#@%oL>m59* z8?^)@%#in{UT(FMLekZZKjTzXsS%jlo&h~~-&UQPTf_gC%5@MBZn0dfAmF@Ib&6%= zIVja@33@cbDOj=QKjPSrX?A}n&pkoR5Jiix;{qV!{D{F}CBdSJnLm|YF^lqrRTB4_ zQ^75UlMDYK<|N7k;>J?d&b4pW zL&FTCcaVA#u|5a7=n!i?nIsW8JY|a<&U?g0VwoBaLsA3t{b9qnh*Y-5=;p^KgcpN#pDG~~K^wY|a4oSWoJ!CpMI_}`NNDQc&n!IlD2wJc zY@lO~rF)vBvvUO=CbxDl@*vb?24(zKc40tby{I>XIcoH0&^$O11Xy=-Ayk&EFE$4( zqc0gtn#(r6cemhx_0{DyS1;>)g=7smlDI3xm<5x24oT8B^ zraI_z=9-?XWZxxQd#(6hA0OAL*7j4K-C_vR4naSw!*ZDss!W_gprCl3lsX?}!@8(& zM^~7OSiQLwb+j&W<0P4s>;1-QI-CBy`4waUl2(W}B0fMu7G;@kW`gZ)jcz7P_N>rw zxUE>hx?Q8Qo7}U4p^QS~hVQ{@1`Fl`C+>+o6AT7vIT-sgIf)JR&@>=3K0TC}HbQkV zOazYHx2{`;1y)0YzY0^Xh>4$qTXd^VwODjv1{Nx_H^oA&i}(oeW&AEXLetfLyVT|@ zh}st{*z{4Fk}trF&6jI7D-<^n4_*c9W(p(Eec;}i+ z1-9v=m%i0IzDE3tEGci^&`u5kiWFs=!u20#2ACXgt3Px>mK60>@doXjxQFpi@8tI< zP&XV!rpOkR@3@khRCHlZmNSdPC6 z?nL9$P%|F6d!f6FbxZ#&&WTXQ7)fxkF!#rvS41Zt@OPsuHisM znH++%Cc6dVq8ObcENsfw*Cj)^O-j8Fx`b7&+%z@Ybh4Yhtlcusu#nyZyiqt{2Cj_C z`k;wv43!;1K$?46DOR$;=St7~q5ozb5ae~3`K*V>mn%oeT2Od_jKF)J@3F>|jaMN@%Etd9vP~DS@F=^I$7L(yzt?$50%Ov5O{S+T z9SI?%^Y|Y7+nb*+*k~ksat~iSzlom?0yrFyF-~3LFo1)~8rv*r-L^&4m1k*ti>?cu ziS+{-T3YqP55D2k&;h3Eg>KuF!13qJ_uuu9mA~=&6_zRR^$I`Cc7{`2h~x%&dKP*<#i6v)J;d z67H1Zs6-v6`<$;rGrX(#PIOezuMsl7CO~*gVg|7*EXZZkf}OX{FeT3fUlEroU6aG1 z*_SIPC#8yqycS&d3H_(r8xOhsbK7{-ERFhAGr^>Aa12e9LEKro8;l^SYHs3gQ2=xs z`^Nl7iv&ZmB{V-&{A<3mCkYIy8rPm6M)#zY{IirXXwpXXcJsu5h}JQ4I)2Ncmh;Yt zMtwksb6!{CPv&{e*BFF_VMm!QUtY!N!skE<{t$gao&=XPw#zYca3HnXac^KR&u$B= zGOjmYNR?42?m2X*2=9$Rqi?G%9@|=r-@9jT+|xJi`5XEGx+m!mp<*3;_wjM^+q1sm zFR&;xSOMLbT_lo19{{hk+r}DB^@8;tS}S6P+&nyqal&O!M0JKp?)lfLbq?3eed=FQ z3CcyphOOOT64MUmr1GI$Jqh7|;c2;4D->a)a9S+G_UTEjSgcmc&2mLUBz?7!Ktzj`-T;E@W~CYqNuMW<_o0vf()2F3`Qg2 zgD)iuF|rF?Q-(>EEBS6nrQHm2nFR6OUK5E|A`bIeY;j2{NK;d=H&WnXpN!veF$0kB zkl9#*=|@vX`VNt##x*j{@Y(pnV;PIyIk6*SHZxw%WIa9W^+wbw>(Eg<{;9V{6CP(< zFHzQj)0f(KlSoOhUAFiSEe}#YmQX&)#r|;ti&h`gOKx`z++#yb zFTmVC7>@jZ`iWy_pGOfN%Q=K?zDCWqdq}IAkWqD|1uc<6qZRn4AO8H^pR*+iH7e+B zQ9|p~q%2{`%s4nf&@ZIPMCboB`9C5DR*%y~yjY#o2H4fzu;d^{VO+ zg6kXI<+&C1mh2ve9qy0^HiOGr_{B9kURqTFU{?eFNs6&izV|`Z~Qa{pNJ-VRj3pDN9+I`sWeABx~MlkTT~{| zb?Z|-$wbEnFJ`~!>kZ(ht+E9=5g8!utdh9As<%evMDO50RK@q0si}uhi696UsD)Z8 zU?jG<$azFm8nF> zEan9!Os_C}q)N;RUKcyqg{6HVP$SP0h2F)1DyL*~pwhu42WmoGfG84GdYQ{%@+gu`dG>I#xpENW1zKLwHwtxf|(JlUmvoncBhlyR?`{m ze1j+CG_jFl{l(N=eoumY`*X6;SS>2?rw{`?trOl8ru2+LvOh?Yf>(GyzDg-ju%P68 z4IcUW4kjxwNI5HQQW436{%g*{o)Mgw-W0+hp*u!{L2tm-VP#!?Ngg%6z4;5%J`#vz zTckqaNRVj}A=+GJGw4R`n3o31zYVwf%xA-^dcRaO@>)di5y1MKUoV!=`ByLo?%XJu z6nGHLkLsKF0eobl1Dy--!@40C@MUmpQT{#7lj+`#oYmSQm&kv2i(2mEp3PGzRW1$~pm(sa4>#%o!?>Btn&lsb98-N0+Uk#=L3(1T$l15Myd7j@fecJfFSl z0Jg7Htdcgqd9)M!$oytLSs;)?bL`^swFS`J*o}8?i1f$-Omq7b%a(R?-0f8|oBo($ zHKMwfDHuq!Uh=<5wKY5;sO5yqWd||45UFzYb_PwG?h0zrA!1MM+40(&s7b-Dt2j%+ zM(U0Xb_wN$SochkdPP6MO9F$@qr0B0eTD~3)?UkD2lcZmwAxImbv}rG8b@8Qv}gt` zzO}|8#DFN4&j@i!)uM!YQ)~=@!nb8+KOKGo&L!hahabsvme?j}z?YEFuP`*}mWG8J zkc9QSX(4PdP^c(2;vCr&nNV)<7KcevW>i37fkvf0%i43IUvCFDrNLqSaw~`=$vH@f zB7rFqY>`R|gQv~<9xwEDf_`QEG`aZ=OFx1H6R&;D52)uVGD>EmJsXT%B?4O~N%lo6 z$+52;)&VtDQJN8+UK6aO0mevQoajua{`oADGlHCJrP@lS``M{-WvXE~M@%1dPq+y4 z`@@{p8p8N*M2zZL!$X*QSHn@SpAh<$CL_=2jJhwY=QPZpLBHtm;&5VUTB&H&W5aAn z9%h2MfWn4)7Jy~JclO>Wy}Mm3!01DA+`Y>0xIP|zSft`^S|TW8kKCB?s3ACj4l;){ z$#@Wygw^1IBTHtsDd;1VgRTo$Y^e)K>JGF$C358OJy3Wr&}0wdI&on3VE;)5ywt{v zi_AD)CLfJPfA92z>El;>yudB|pNFS_nn}m4iNSbeEKLQj4}=%If2GT~#9?_yO~-$m zS!)Or0-22VT&fy83c4?U+n5ME?s!TU$D;Ly2UZ`qMV33M+ZGW&3>7*eKDtkA zG;KSWN*~_S%7Qs5Sn4G^1zQ-?Mc*7OQJh7I1|6o$F@_MKBeYfW^@jntDZi_q6 zw2tdEtPbRJ4q~RW+tQv9H-uS1aK{$O0cUi>%mfRQ9_&N^ku0P?fN(i+fkVpoYhwD( z)?XIC-8?#IruF?~1#{w?CKoWrR+EQyjOyoJ=kKkN zfS`S@8VCz+$wA>mxrDrH@l!%~W8Pyi`QGW?W`*V(20cUVCgI~j@5*33jP9OP_g=&Ovy8!V^X&5UkwFRpsC2K>;GJVOkVv6Zg^oUQmfglMsVtv72C--~ zi?&{%S9N*_JfT7otfr(uk771WF&C+j>L}7G(vBjfkPL!5L0^eQzw)KH>A}jl!V*+` zuJQBoH{|6vg@YoOW+Eb~X1Q-(erOuf%zA(IiwXa1xnB5G0S}$ANA>Tx;XR_f#b_{& z{O8qXs>MEW$>-FcsE6!;YV3B#gc#VP{z*B!SZ#vqnEeEKDpH^^9rSxAz_@*0=DtFC2l`dN*Fo3iMQPD%+rJ+R;% zK0SOYR`HphZ?Ro!=Al)c-KjSQJy{4jrcZ1Uubw4Wv%98U;Sg;gA{e9n)Ih@mW)sa@ zOev5jf40Z-Fii7=vD00kG&(^7IKl@;HL+Z!_fOg)n~FDauFAoX!y%0NUYGFPqtqxS zU($~LZ0&Cn!rkHfBW)o2{s$nQ58x|IUE(09HT$JalwVkL0wA+j6UfCRQd-?}T{0gr5vFDd8Iv`k zs-lO;mdR70V6;^!)7Q!3m*TJA`~PB*`YR-N6_t9)6@nF;N05n#)n~B52ENGw(n-3T z7?OCrOjbKy*)Ursm`O-QEUkdYqsf{^>n)x#3uu>Nb+Lw|ID6__1|uxwVI?j+K?`%) zJGAm=kyVqE=`h4|v1h<$e>R7moa4(mrl$?BaO&M+@-dXD)0fwn&eR+oKUB(A9c=Gs zB%ZSCU{y;x=t=BXiVv>aqhcaIvF~xgAxXxkbgJ+c(&|;%N?}ta(~8)~F-LzirzA?X zWR~^MnI|8;rtMrrFxRK3h%kkh9<;Yr32zrGQ8VNUQ#E)xx(v)@)zl6OHyvW~%ib+lz$BAcxDC=8GplBRM8i?SmD>NnHq z?eu9i1y>E;RTi$%K5PIH5=O)LB+H<W_#wjg~fcw2;YKb6Tg-V#E_j zmFlOO;6SH`uJ;tpNH9Df6x5i%Gp;c=vdEH(iTcAVRG~W=A3ndk`F|AE$I;7vkxC;Xlx*$5gX1>`x!gO2603sJKIQbR|Q#5R&})@&;YZwv=$ObueqOmMb^xFGMBI)#m_czjO!vLVWwGH zh;9SJOnuuxt+!isk^wdZB>2OSMADJvO6n(20*Y5x96V;z8=D8?#T`rl8{%}f-{**85xRU zkr_G@(T=G7FTXrYUcXGCD{t1*+h2c8M21PLK)Pe+Ck{@jE@|z1DMT=R7vX`Oc+=40 zOcB}=1@<$;1D@T*crfnNS)0=F@-H-NzV1zwDbeN|Oq8$rCyd%5_5-;>^`s;p8IC%m zAVi1hHSg;)eLB@^+Y$-N?8b1iE*=OHBFA(fKsx6gGTNE?McJyH^awt6w9G{jD@NM! zRn)q;9B~Li#lJ+^1g7gxgzV779vJFFW>)OhiWbMW;FJkgw&4A6%H$Q&pvo;+O3U!$ zr)*&2$Du`5ZcpijTDe##hSg%Z2D5q@4AerQT0SY(pf6QUPs?F7oF0d#;8wisv1Dbd zh`zOQRd!>$_EHB-f9%98W8ht+nAlSa;tuhSqX_aMq0;wCRnpLgJ_bua>YG|Sdpyb% zS^c|7Pt#X8h$O!(W!*&H?8{%p9@xT&pHezPlD7bD@;nWDjl*17Ah z?DKM|`2|CLz9^uBm5~B^QXY^M&}FWb^nt7$mYRpV%ir{=&N+CB!m1T`a&t3%dNwP* zP>O4bb#P}ms)o^FLvXG%x{W+(8XAM9?*YB+-Sb5H3J3LWo+U7#EW$jpnPovX7L&(2 zpR;=x-7!g58IIbF#%*DPdb8=$TJ96cz!?~NWHcBMGOOEDYt=N*)Q+|bj)8h-A8QU?~HO`ECzqy-Y z*qgDaTr;yV6o5osA)0tu+^mWC_rv73X&fe_;?yegecn$L*Wp!?w>^y|ff*xNk%*YH zp~e7ZR7+&h492l*8IoV+Hj?*t%*&peWL_kI=n@@H`??~Tuwtpc_49Hy^|WsYFaP8u z=akz9n#cc%i2O+p!Xh5KUoO{EyoFWZXYr9`u;~{9i|PLD%V{kb6dbv~UB-3{JG-nTxiWx8Ruz8JtX9}iRj@4Ru@ArZ6n zGnR5-*h7Gpvgf_Q-0Qxx)r?<6tJ`Rgo8tE&!DZ{h4vpYU)adtJd6G2Xqg31u2GPfC zf>7ixY+9ApI34xC%hx5F;wocY(RVwyDz_D9Uuk4W^*YD#hnG>i?dz=sD3gc9V!nRP z7#b$gLMP-@`2;B&5GG~wFkMZc<03XvGhPvm8BPS86Qt>~0;&ecB$Hyai0h~Hy*JC z4p{q1WrP6+l!UcM(dlkK?5P5_;rNWnb!1*Id|)v=p+?74+IEIqOO$>)?txB_?2wa` zcJg<6iPl*>TXrDa$#2C!2BT}5*S!*!OHJva?T_&YAx37~kPqw0Yv^aRWu@TV1=T9^ zQAxGn>vZJ?1I$T5aD-{*sekkhoOJ}lda+*m%+x(u9GO)02;P>?rJNdHLKX7vCwG!b z@c*Xm8}3vV*o&Mn^{IlyQXKwe9e3}IySRKc+sGn+^kKcEq_eTU`e@9ddlL~>hbp&W zBpJDqcsL|jGK{^0H%MuiW$GpD zt&>1x$ok83+>Q$NY&eMKDP#N)R*%wIHk!*zg^>4H959Gec5-(Uu>{$|CTE z%q7K&u6Hj;TT+{%T^JMfbCj}{*k&rQsp{9Ezx=&-hW%hP=&@~Y?I-f+y7aK3-LhDv|_ z_BX!gr9R$bSj%Ozt111&x5?GanMrOn>syZhT=+9D=>356R0Ly8 zmtu0Li=W2jc+~7&bUr|e3)1kM-|CnYn=36@GtPru!2v_|n6Re~o;WZ7m(vSDzZ330w}aP_-1 z{jjvsVqes1GYNH4Wf^g)JKi@eb7VTw&PYaRTud+)WWi~|QZcN+gj_nUo`mIcF=uL+ zJ~3TrgPaab`NfSTGIYP_ILJ#1@T2vsG0Z=1*U1u~zz&aIX0_}oZz;meb`OdB;mGrn z)a4nBWsz}7dmhy%6#tg!&@XTNfOJN4cC{ZYer*w(&(53cc1)Vn=S+B!>`V&pXh>Be zD}U;WW-)e02xgfR%QXd+?Fa7H&E)2Oy45C3o@k6ik+#jc*1x<2<%upsxkO$d6l~Z$ z6xa7lVn!rp=QTP!iz!V0>&Z-!>02#YGJ%sMzPn3K(A{eCbiXSeLnlZ)MvGk98ddwr zT#gewjhdp785*gy5v>HW0C$@SY!*MwZzx9i{v6~1a;~W>98!Ct1YSj_YS@dzLZw_` zjjC#)g1&6u)JDL03LoYK@|EO=qG-i>r~v=@@drOq%Vyvx>Cmbi;1JmU`bFmyYE#HH zcY-BKLR`GZL%ZnSw3?!Op-8bio;29#aBFd3y;?gu>WKc@5Tn!L33bMD3CwXYX--P` ztE(_qLPss17ON%H@Gdj0vXDFq=^pzQ!%^K4R*8G(T3aR0g(w8bewWTlyqrl9i_ag< zS&oH0x$o&(px2A3jVF)G0A}VFlD5gfr~DtVTCV>x?$#Klu|qiRe(F0 z(O0Q3-%C)06CDJVd%>@5bx;eKA4?LjzI=L~KahT5aCF>TALWmZXUm8A^YLsod6*uH z{0|X#BPP$1g40va-`tr89vY?T@%=t8?=xPp(5|B!Z?Uk;u3GpMc_OZRqV{&D(%Cj+E1i4z18RE!}@nOaSV4GBmDsEc;j`D zRi&Bd!C@C`V%S14Yo#hX$&G`5`BPhRJzIz-ojMZ5Ht9yu7wAQ^1r0ODEI$#DV^R@M z6;OhC$(jl(stkkSM;M7%VL96-vj#S|BPIt8-}ALt9S%nKF=qJx`A^#W(Fcc%qNX>L zTgd$aTUfN|PZ3$7J~*RClWNBEnY;$R=GX7lJ^xE+9A2Jr5u#)@*{^6OgRLRXTPNyt zh$SF9W!)5ku9&KixP(^%AhaV1{ejVERy&z>Zo{hI}6r3{uYOmc-PcsJmM zoSxK5#TvLam9PZ!)(I9KaaTPlz|Z6x+RqX4Oi*h>zIH*+Pk zm#{ZiF#c6d3eQD@`lvS`v*mpdBr#9e_QwPm*^lw_{d`SMaFFBTkvl0Ox%;ZcI0=V@ zsbr-9aR9RT{ZfkQOB~|XD?UuC`P>`o&;hETb7(irG$~;HB9>THLtmY-0#Tw;PnhtAQS_1WsYSGnHjmJ2 zxcXcabqt*d9-rNkB(dJgswhC>7N7C(!>GfdT=UZG7CMK6BRZk4>i)JL!YCfnpa=8! zL2KuRjl*6ip`DU&q5n_E!NhqJKMEen89j zD%PiA)IPQXXKIFQn z*l9>EC6|6$$e2cBW~)>@Vf~YDHq)UN9_@PKxLMxPLNQ&$Yn1MhPz_dHOS-Mwpa+Ah zigl7CtM{=|TCPkF1YBqEw>?toj-P$zC{N|32z!m4>m_D6Ko-=rTWoqnJRN3X{IkDA zi=(WR%$RXl1Q&vSL&?=jAjR4DzKV-ufy}lE8|o88*sv))+mvS|`h-L%hYJ3JoUdc5 zMu&cXu!ee_Cd?@%<2ctLH!jCL&zo`QqQlt~*;aRR(e9mD;9o`bidJGq=6Lz^{BO!u zD-E$XlhyjfRIWOas`lKhn4gg;dl#idVJ|FcHlsvgKfBDF&+t(}fE3??h!k_Wy7Z!3 zA4+f;E8H|XrZ)Cch)Klul7pAM)RWdA!jV{yT9u*M7!-{^X@2h3Nl5_(qZkpM{i8r!Z5gN(ssz+5y^*|4MwgZQANA(wd&V}rTTS& zc}G-&b)+mACneA)Dm=LK6Kny@v3%@u&QOe7MeUoPT0_MDAudeEOwwUgn13FZs|Pjt z7$1*Y$>-*8I7cYzdEdkr{E`)IC2-Q|hts$Iiz;EcjNtP4$qjE>ko$yu*w!OfZd@36 zD14x@C>xHJIpG8K;9(vLuuO%iMmIOlxU66cJdYX1p{B{_!L1yF5byv(;9TrLg-J1Z z?G~;b-bR1!R;&8m9!Z!2Y>WZ1%OgmE`=dX?WL1Kr3n95t=7V7sTfvIij@LJoJ&QCI7`-ft8^sz+8S4TyLl2+ zZAO6|Pmm7vWL6m-BDx6K&}GOfdHEu?k(2sx=29`qDI3bnp|XKf8ovT}^l?cDnLa*z zJP)1)=J@apqWeeE)5cYowBMGaG`t&a4N`@Z<(-GvMa(X**UAPjp+Ht&dg;03YKH~Jpz)AR=stX09oP0&R&xGd zeANVVNe>G$e*6K>gOB9QDFJ>u=UoZ#-Vcyo@3exU;Y}`K7@xuN#eTe2cz6@6iXjhD zDH!!I{%<*^dh=U~CvlYm;Zo5lLLZzSo6i|O*^_SAX${eHL#G6136-8OS&8%BVAMMQ ztc;H0mXKz4usHJsPYY%4`ptZX@vRs0-=>S#0DV?_M04B&fgyN+%1#dGtKmMdpYUYo zFbVep{-i&qkUydVr?s?CtKJp?Rv}#?QoPK1CiuGFrmw#*SGV!q{403+Pl4mZ2j@B8 zcIh!Zc>bml$mQHSUH4F1fsO7alSwau{e4>gK65Bi8&X(KgTI_5b)_PsMko#*R#^m5 zyS=M~9%{J2pU&k|{bpa+PWh#BSQPeTa4!{&@{d3I#1fHMR?hGUx#SulFj=zY52Rk;`^!nGOlshC;W>%gzt0Ycx9&v^bqrQLiA4iNjE<3=q!iQ?@ zq;y&fE2YvY7JQWo7%Hk%3N=K6oYtx*)gtNw#gX&5Eb5X{rBJL@%hj+126?4eKCOuq zW|AE(tI>N)84zPzC=JLZg&J6{^{>HY!O_R4cBKkIiV$E&@6f^h_FF%Fgg!zsnZyM} zZIi<=iDMjTCaFREJV61&I3Y||_)rS*A=he^5TkU3N;NzwRjU>BVyfj6e1yd^+1!|m znk*KiBO%*gJ-d>IElne0oL+U#>VrWm!X>9v%+TITmWw;cbu1pBnf<&;o*Y|Z?8(Mv z$DSCKzTl;w6&Ra7-X;TMCO!pE`;$ zS9385q^Bx!eMj7bUWx@@^lS>>OrQtP-3lDfMAkKy+VN(H6+@`R5u#wvCJE$c@IS$2t#m|*pRsf}3*Rbi={ z=o_;tso@ULs0UBqQkZrVB$S$62(_n?0igvbqfG>bwayxBnlenRyCZaLsR&aIV(o=t z2Q^>BndLemv+!`%@Ek8``0a%#T-VfNGQ|?|HG~}))FU|8B`JjsZT3rI6rCTb+Kzg+ z$X$nRJ-mjt^~$AU=&~$&#Gmi*!8$Y-L$gnqaDbvLLxqMu#L?ITjMU zl3jp(|GHM8fLA{n&?C9@)gIST&tC%S=xMMs5DxIw)! z0%sNrcN}pzqqB;u6UHTd`ZvkN3Qsqf(2t$0R+CpsMQt#;0yFd^&vo)&CovM-#6(L< zUtrj)3F@vBd=%McEd}_6`bG!Q1tRS+I-qhc)VD7b4B_2qo&&%jsVf`+B6?8z&fU>v zw;jxGlC(eqkD^dJ1~Pm&g$6znBEGn86G9B{VN7Gv5R02NO&3*WUchu@msFcdO)q8= z6qF}{``Af^f_Jxm!26<3i{_Lce8Z>N@`6$;;_y-Hqz4L;jk}mxuM6~n#?sHO6t&(p zRZC96k|{dZyh@MxOuV`gxp-tux=NE}BERWSPFc*Y5liW*e#WZ_^9FosK_9$KnbU*1 z;&Nk#jFhfH63I^|C?tP|bUEW!+5FOV`!(`M8y`6f)d6ElqZ6+U0)&&fsSxdH!uOoKT5o?8%5H6DgxD2Mzy7IL?LZ z{KJiKe{v99gh6P!Wlgf}$DsGD9&a~KlVD9M-zgw81qq2O6w3^ki(3R8uXEq~OmE=F zq)q(;O3yr!N;RFt0;J#T&%yLaNNC!%mv<5!m=J&hK8#fkh+&4)f1#FN;ZuM9&%&R- zH=jjK)TdYc1e`^13;a4dJIBChqtw?(O804%dwRcDxC#ihtAygQvgmgN2Z_6lAjO!8 ziDKL$M#wlPF@3E28=wh6EGp-HmP0NIUJSZU1j{51!XeB#@c4UuBKmAl3XO1x0uv^+ z$BY_Fb%s{J)3WGdh!`cy^zbz8QXf+ z>k*rtUu6Q-uEEVK;u&3kXDtn3Sn`AuRMCTCn9=43UAz3CUmbo>n-BDd1YhWPnjh4W zqTeP%j}r755>aW2OlnmWnb2Qg%vyOe+0!+515v zGB+!PQYd)k6kO;%PsAOZl(_V~R#W-tQoe{Dx|&!B!nPNkS(>7KA1>eWZgTj&NPW{E zD~Vy41+hEhvK6h6d5{>r_wqnXQ;{>KY7aXz5>%kUF1=apT7$RMjl+Vj9V?%fLQR@N z$l7So@e})=jefKIt5hgoWJ*lEjuOI_Nf#$$>lX(Bckf*Ip?X@y@-z6Mm0~G8sTOKs z`J`AaBa925LFuFlKfO?E=V-3Ky^U|@D~!bR?=%gRA_G(A%vbeqY7k!bh9frsJJR-^ z@?6zEK}k5)k1Hn%juetBkJ0YpbVs+*YpOWKxfXLvB|EV{+q^eB#gH|wrzWr-%?ZiX z1MYq%HVK)^U}DkGB=43Ihxd)E3FG`Sqw-0!n5`G{xZHL(Ork@O}mhAXa3&r6gI zCZ@_i$H(8}Cu#Y}5K3I{CZD>2T)K(F$M$Xb|KXzpMCM@{ZYgooaoeI)a5)u(RH1Ei zX-FjCk|9ml+s1vcUYfo}pA$a1F465FyF2`KL&*@gqNXehHuH93pVAgA>z(dHBwF0C zH1Vt*55>p)_zeDiBTu=Sg7rSf+}n;kWm)AZV-8~~$^uOVLwsU&?yt5na5sI93rPzB zNpIp9?a7r}m2Gj}8rP9E)=g=_`=FBVUZ(8Nz7r~`7N)D#ITkb9m;-3UnH~%m8x~(s z@CTfv3I_GS*k|ZXT8Pkw8t*GbNHw50Iyx1=4l}WA&C2|5MZ#i#jCbBc;3 z!K^nJ^sadRC}Ob`%UH$eOQ~(F{7OrZuNA3WOr^(0y%Sn=@^`pPLhfOG2h(7>LOA8} z_;eD3tQZM{9d+{TQPLqzcZ5D&tIat9+R%_*7tE`ZiHuYZja^_Z%i#xjO|a~iPfuXk zh2ZWrQUK+I4dmzi_l z-jRG>R~IK`QHFJxG7L#rX$1Is%Zqics{?b$bu4y!^ogVWw_A9NVTmQo8R91y1E4ve zj(;RPsn&MdA)bl?F<>jbB@nas&@G(qF-M$c%n^mtcT5n48qE$&1ZqL*_hSUj3F4F9 zjcEU(9X1GV^J|A#_PjZyQ!!BU3!N3UN5L%?F#q8HH#K1X09ta2tX;+Eg&`4pHG+^W zT|4x=xwaz0lDx49Yhh}8wuSQ!i}b*>I;W*3V>m9RlNovcs!FbZLE#YtQ&DJtE1S@a zxR0W$`Y2*+a_GNxf(6}5hc{R)cgxGi%wYa`wRygO&7;7>>prDeZ&qkgz7Zx*`CFif z4t)tJgVFa;n!>Rnc=ky&iAcb{WVTX-9u3u0ePfU)O|a$IwrzXv7zYE+b`qAy)c`SR}eed)ED#oXjV8arF5X-C`kr39S^6oKh87#lRM*-`@9JFN7{s_yQ+eF(U@ zEmNZfnVZ4%Bx$|2u#(6LyJE}1=8>VZXao`o#W4o>Yge!Y_($1h$!7$=28ndHr_aGl zLn@bed~7V<{s~dkA4tmXOMv`4uOEOH6D(2a-0%rne9!z40Im+AfiP2pXdNr&EiwC= zyyGo#7i6qI(g2h$#fas~EnHEJ;4qDbTZMsCtQ@At?=KNgRnkbB^sBkwp}a0f#N-ff z;xCEUR$`85L23X^A_-Cx3T(UdMa>OwWw`gn*TgpeBlIL4W>UgQ#)mcCH>L`O!Zp;i z5Ickj-A~^&*k2Rg3|Zkpw59Fk3%z*V<0hak79vHjZQbK9){p^bbfJIcR^P3Gx_fpV zC5JJ(p15cGL>OGFL$tFaV+)%RL=vH(@|~=l)U=Xa z!`cVIK%}y4Dp)F~mM>SbOL6+-V7brff__D=igl+qz&1BbDrXgUw+;%)M-d6-jTsm3;b zZ(TZasuGW$fFFAL-7i^Pye=X)%--BHL{_8=Z|HrAh2c87ab915u{Q_5pWAu|h;RRX zDBCvjB5fSHqQ8H%0>glXS4Pimvs^s3C|YM`Ok*ZSD5rW@hzVNoTFOX{ytY#kxHbLe z#bU&0Bg)O|?k>gV_)9D6{p7m>CX{I4jR(y>Prr;(#KBChDfw~X=}`<+NI&CeqZIev#w4U9isR)@u1`kDbGcr}a^7R^2uAZWXDe(KBiQ7kLsND+dl z)qP*l){~%wF`>T;_uT)Vhaekl7$j!i<3}N-G6Slmq}_gH&V$81!{$&<{;*0imo!;! ziE>qJnf6h%j^!g3q1_=qK0+;$sw3>lkdxORe^ z+MLNz-I~So!Qq;YZ-(F7I4>~T4(e*(H_Xbm6@P}_7IREcU&POpr3?oK8c^i8;iOU_ ziGPky&W=&RIg%+!ILM7|PVx-1ZXv_$@s{XMev}ndmtV0UdirlbIpZ;4r$_0`dz}fd zyYV+}`78_MO1ctT^YYyUu7JkSHcLDjoewJh6?xW=>X0up=^DXx_jInVWLwE0(`l!NIAjV8RfCG~juKMH zoCRlJ&4ZU9bFhb1$z<2H zhvhaPLw*Dd$RwY-8Lv05$9vn;@3#!-zNL&_{KV>REIm;nkL`%}NzvM6dDtW6Q+(We zgqKAA{Un6E95{CC@Hd~H7{exu^uYBhgbg<;HMSf zlpOj%3L(Q~A*<`?6t#Ib2sn7pZtk**&xITynz4_a>Y%^XPJmzJ=6Ei734LC_HTiU=sx<6*9R&phxf+4C zUQOU&e`a9~N){l3Z~s31rOYzP_caSPiDdbcMyyCx#B`FEvvgX}_CnDF+ zz}Dw&efjdOUr`KCY6f+joQ4n3XJL-9=2lVNffC{~Z3erSe+<%fZW&7>5 zT*k;*7WEE+7uxMj*B9}7Wj<~g z>!t$GKOYHK^3J$x>As)#q0!4JNB53ra`u^wF`$xI*ywXsJZ^>F z)EXi`xzQp-Fle_Ouk&ZlEG`_@pqqr&R((fp0-9JrjA)Tm|6#+fZd+&gd{j?%W7}a; zxB^rfwFYHQ+ks+XfiZck4wGLJ&}OmWt>q{4sO!5d_^ z#{QfYoctcT*EtFGflRhcKBKJBD;LBb=}oE2{e{!L1W4bweN(6jxo$XudiK8{<1vhV zT#4q((CL;^ruacXPsqE zOXGdD*aj)X7A1YYgVYJpeL8I9n6+0%I&^rHJFw$4d^YGwv`Vsvr$xU+dsuh6Fc3o{ z@NUY%5n*Z6w%Mk|)D>qqM8g}l&m*)#>0`?DJm3_TTHGinh%I?kgZ=qA8|<4R<2a?yIqPi0h^GhVmg7u~0`RH6R;9r3+Gj_#K( z=Nq77n2O4p{kj3QPo|y)yb?{z8o7UvLGpZ+ov3T!*h3dauOf53`|nhHsx+-fh!GEP zqU5%#Fue-GJL_H=RxqaF#0!0$lwc(HBkB|NtK-e}iI6GD+!i}k_p$SWwK7V}vE9lN zL5z$ue7bMEOa5cY57^kZit5uQcJ}WplJ=LZ9)^*UsI4+a02M^%G3nO!SoG&vGTPAX zQ1;>LHtrF zX|%~b5Bje4JD9X=L$Go7eLbI`In4R!s}?r>wSxVDB&~vHWp8X&fyM~UoWCVZO%v7< zCjGCp>*W|Lr6F7rlP=C68SfYL;lq(0H4c8dlv5O@F+xKMsD2=N^olD1d?S4RZ#X__ zd^HYaCl{ejNqoJ6x*TPRvKB|RYQb;qljVs^3kFpR)I^_lHHurh-)B!U9!mTKh#68@wz)OT*;3h;aZrw6$bFD@zI##;Ne5-;icfz`~8 zYb`FW*17$_nF8id7&rS&`vwGmS;Rb%SRChe*U(V^5|1uB=}1d=tikE{ip>o<1 z1cOb%X98yt&Q)f%)^i-^Sqln8ux8Z~qD5&7nAeA>`z(i*RP?yo^fq*-_%@yDi9sxrYv;iz~Iw zQxNH*OpBZF`KDGS6f88-;a_=~DXeFN^-J=>vX}m34dsd2o3Uu{pF;TM)_Eb>b}cTqOkR z@(6%6qErV+!NYNO5}(RK$gWZtA5zD_`Gr(_=UX3RFh8zmVB zz{a_0$2RpW?0DGAK&Eus+(p0MQLW~D&$Dj4ndD(c`nCzb6Jt=Fx0l|o_&x!gbtL}4 zT_!ypMjvOMpPf6>olBm(k-Q-+G-~L2Y~syf?x){&nDg7q&G&l9e6p>QGBdbtYwJ<} zPxc0!3s313u_M?|&tieQ{T%mBm%)%Jl;B5aI(KyrS;g6bgA_Wy>mYvDjG+FC;-Am@ z4e#%sqdl}|Hz%K0$!4d{Ncy*d9cAwqm#@7VZjMLlpIdg-?_KtvJ?zqN51U>19nq^D zcYL2$XPF&i*g2XES#k3LIYq@boqP>jHX9F4-40Ybe{fVnKP3^Wl5&n~ zbX24?vqq<^zlePZ;VX~_cq3Qj@neypH>-Is9@ZqjNXS$Qc#&M%rfDFl>4W4S`2cXkF> zj^P!%hY7aRY=QI8Gv!1XQDiFiMSC1%k+%%NzVrvrCrsEfs>AzQZuQ4&kCE{SNVja5 zz$5Kr{;^i-SKl;xDo|x64_MSG!9);_dXj|REd`fP?TEYex0O;ZexvE{Tdpys#7dl*@_vsabx&9C@{lqNE*!$V0L{aOaU#0`m2nAhP>{yG zvmI|qpYP)hB5hZ&=5JJujuUAd9xX1;jx4%tr=m0KX`3XA`Hf6EP^LVI@tn0d3Fu+q zn=RVH&SO9SuDE6toV)eDM2MAB88gVa&oxDNwgcTd1-c}QB7-LsNns1)N{tRTPaWF& zF!ED`PkxPv1T2wrk>1?4OQF%9b#jeoNy!q(Bw9thpn zYf{<+q>w%6isJAh#@9`J#77WB)hIt%wUuEE)}8mPxRhh8{dGi20rfG02jmYj{i-`n zB7xSwE1IheW^xWl!ws_a!{LgX6IZ~6aaMEZ=uUifQ>|CICB~Oc&0QoqQ20=`pXeeZ zNwr!Q^FX6izk0Ih(3<0q+Q-8kWB$LH_=QGFi-q7hvB&q{Y-|ZNFokhMQSWyJBB|m~ zBO3!O>sF?A!jq9hvXGA+R9;i<=o6uMISLK0!(Hqlha8V$*BXvm5Ni06NMs#}HNS+$ zAZHLi1%!a7M)k?eLycmNlc*Wbs166ypkygdcnN~U%ke7}oHC&HgKUV;roG%uT}Ctu zQ8%&^Sd^q+WL^@$^zQl6!8(2Ii-D(}S`AD}kuCYM*dmWyC1@#CjuDfb_3ISLPL#SM z_uj;>-t8V;Wgvi17+C$Uk{YBBuDm%J_AFg-&Ncam?=FuRjXpPL%m7r6uEKOESY4

    ahumEIvl&YO*@0#nnb=WGm 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≦+ypv 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 diff --git a/bundle/ruby/3.2.0/gems/addressable-2.8.6/CHANGELOG.md b/bundle/ruby/3.2.0/gems/addressable-2.8.6/CHANGELOG.md deleted file mode 100644 index 6fc9fb82..00000000 --- a/bundle/ruby/3.2.0/gems/addressable-2.8.6/CHANGELOG.md +++ /dev/null @@ -1,296 +0,0 @@ -# Addressable 2.8.6 -- Memoize regexps for common character classes ([#524]) - -[#524]: https://github.com/sporkmonger/addressable/pull/524 - -# Addressable 2.8.5 -- Fix thread safety issue with encoding tables ([#515]) -- Define URI::NONE as a module to avoid serialization issues ([#509]) -- Fix YAML serialization ([#508]) - -[#508]: https://github.com/sporkmonger/addressable/pull/508 -[#509]: https://github.com/sporkmonger/addressable/pull/509 -[#515]: https://github.com/sporkmonger/addressable/pull/515 - -# Addressable 2.8.4 -- Restore `Addressable::IDNA.unicode_normalize_kc` as a deprecated method ([#504]) - -[#504]: https://github.com/sporkmonger/addressable/pull/504 - -# Addressable 2.8.3 -- Fix template expand level 2 hash support for non-string objects ([#499], [#498]) - -[#499]: https://github.com/sporkmonger/addressable/pull/499 -[#498]: https://github.com/sporkmonger/addressable/pull/498 - -# Addressable 2.8.2 -- Improve cache hits and JIT friendliness ([#486](https://github.com/sporkmonger/addressable/pull/486)) -- Improve code style and test coverage ([#482](https://github.com/sporkmonger/addressable/pull/482)) -- Ensure reset of deferred validation ([#481](https://github.com/sporkmonger/addressable/pull/481)) -- Resolve normalization differences between `IDNA::Native` and `IDNA::Pure` ([#408](https://github.com/sporkmonger/addressable/issues/408), [#492]) -- Remove redundant colon in `Addressable::URI::CharacterClasses::AUTHORITY` regex ([#438](https://github.com/sporkmonger/addressable/pull/438)) (accidentally reverted by [#449] merge but [added back](https://github.com/sporkmonger/addressable/pull/492#discussion_r1105125280) in [#492]) - -[#492]: https://github.com/sporkmonger/addressable/pull/492 - -# Addressable 2.8.1 -- refactor `Addressable::URI.normalize_path` to address linter offenses ([#430](https://github.com/sporkmonger/addressable/pull/430)) -- update gemspec to reflect supported Ruby versions ([#466], [#464], [#463]) -- compatibility w/ public_suffix 5.x ([#466], [#465], [#460]) -- fixes "invalid byte sequence in UTF-8" exception when unencoding URLs containing non UTF-8 characters ([#459](https://github.com/sporkmonger/addressable/pull/459)) -- `Ractor` compatibility ([#449]) -- use the whole string instead of a single line for template match ([#431](https://github.com/sporkmonger/addressable/pull/431)) -- force UTF-8 encoding only if needed ([#341](https://github.com/sporkmonger/addressable/pull/341)) - -[#449]: https://github.com/sporkmonger/addressable/pull/449 -[#460]: https://github.com/sporkmonger/addressable/pull/460 -[#463]: https://github.com/sporkmonger/addressable/pull/463 -[#464]: https://github.com/sporkmonger/addressable/pull/464 -[#465]: https://github.com/sporkmonger/addressable/pull/465 -[#466]: https://github.com/sporkmonger/addressable/pull/466 - -# Addressable 2.8.0 -- fixes ReDoS vulnerability in Addressable::Template#match -- no longer replaces `+` with spaces in queries for non-http(s) schemes -- fixed encoding ipv6 literals -- the `:compacted` flag for `normalized_query` now dedupes parameters -- fix broken `escape_component` alias -- dropping support for Ruby 2.0 and 2.1 -- adding Ruby 3.0 compatibility for development tasks -- drop support for `rack-mount` and remove Addressable::Template#generate -- performance improvements -- switch CI/CD to GitHub Actions - -# Addressable 2.7.0 -- added `:compacted` flag to `normalized_query` -- `heuristic_parse` handles `mailto:` more intuitively -- dropped explicit support for JRuby 9.0.5.0 -- compatibility w/ public_suffix 4.x -- performance improvements - -# Addressable 2.6.0 -- added `tld=` method to allow assignment to the public suffix -- most `heuristic_parse` patterns are now case-insensitive -- `heuristic_parse` handles more `file://` URI variations -- fixes bug in `heuristic_parse` when uri starts with digit -- fixes bug in `request_uri=` with query strings -- fixes template issues with `nil` and `?` operator -- `frozen_string_literal` pragmas added -- minor performance improvements in regexps -- fixes to eliminate warnings - -# Addressable 2.5.2 -- better support for frozen string literals -- fixed bug w/ uppercase characters in scheme -- IDNA errors w/ emoji URLs -- compatibility w/ public_suffix 3.x - -# Addressable 2.5.1 -- allow unicode normalization to be disabled for URI Template expansion -- removed duplicate test - -# Addressable 2.5.0 -- dropping support for Ruby 1.9 -- adding support for Ruby 2.4 preview -- add support for public suffixes and tld; first runtime dependency -- hostname escaping should match RFC; underscores in hostnames no longer escaped -- paths beginning with // and missing an authority are now considered invalid -- validation now also takes place after setting a path -- handle backslashes in authority more like a browser for `heuristic_parse` -- unescaped backslashes in host now raise an `InvalidURIError` -- `merge!`, `join!`, `omit!` and `normalize!` don't disable deferred validation -- `heuristic_parse` now trims whitespace before parsing -- host parts longer than 63 bytes will be ignored and not passed to libidn -- normalized values always encoded as UTF-8 - -# Addressable 2.4.0 -- support for 1.8.x dropped -- double quotes in a host now raises an error -- newlines in host will no longer get unescaped during normalization -- stricter handling of bogus scheme values -- stricter handling of encoded port values -- calling `require 'addressable'` will now load both the URI and Template files -- assigning to the `hostname` component with an `IPAddr` object is now supported -- assigning to the `origin` component is now supported -- fixed minor bug where an exception would be thrown for a missing ACE suffix -- better partial expansion of URI templates - -# Addressable 2.3.8 -- fix warnings -- update dependency gems -- support for 1.8.x officially deprecated - -# Addressable 2.3.7 -- fix scenario in which invalid URIs don't get an exception until inspected -- handle hostnames with two adjacent periods correctly -- upgrade of RSpec - -# Addressable 2.3.6 -- normalization drops empty query string -- better handling in template extract for missing values -- template modifier for `'?'` now treated as optional -- fixed issue where character class parameters were modified -- templates can now be tested for equality -- added `:sorted` option to normalization of query strings -- fixed issue with normalization of hosts given in `'example.com.'` form - -# Addressable 2.3.5 -- added Addressable::URI#empty? method -- Addressable::URI#hostname methods now strip square brackets from IPv6 hosts -- compatibility with Net::HTTP in Ruby 2.0.0 -- Addressable::URI#route_from should always give relative URIs - -# Addressable 2.3.4 -- fixed issue with encoding altering its inputs -- query string normalization now leaves ';' characters alone -- FakeFS is detected before attempting to load unicode tables -- additional testing to ensure frozen objects don't cause problems - -# Addressable 2.3.3 -- fixed issue with converting common primitives during template expansion -- fixed port encoding issue -- removed a few warnings -- normalize should now ignore %2B in query strings -- the IDNA logic should now be handled by libidn in Ruby 1.9 -- no template match should now result in nil instead of an empty MatchData -- added license information to gemspec - -# Addressable 2.3.2 -- added Addressable::URI#default_port method -- fixed issue with Marshalling Unicode data on Windows -- improved heuristic parsing to better handle IPv4 addresses - -# Addressable 2.3.1 -- fixed missing unicode data file - -# Addressable 2.3.0 -- updated Addressable::Template to use RFC 6570, level 4 -- fixed compatibility problems with some versions of Ruby -- moved unicode tables into a data file for performance reasons -- removing support for multiple query value notations - -# Addressable 2.2.8 -- fixed issues with dot segment removal code -- form encoding can now handle multiple values per key -- updated development environment - -# Addressable 2.2.7 -- fixed issues related to Addressable::URI#query_values= -- the Addressable::URI.parse method is now polymorphic - -# Addressable 2.2.6 -- changed the way ambiguous paths are handled -- fixed bug with frozen URIs -- https supported in heuristic parsing - -# Addressable 2.2.5 -- 'parsing' a pre-parsed URI object is now a dup operation -- introduced conditional support for libidn -- fixed normalization issue on ampersands in query strings -- added additional tests around handling of query strings - -# Addressable 2.2.4 -- added origin support from draft-ietf-websec-origin-00 -- resolved issue with attempting to navigate below root -- fixed bug with string splitting in query strings - -# Addressable 2.2.3 -- added :flat_array notation for query strings - -# Addressable 2.2.2 -- fixed issue with percent escaping of '+' character in query strings - -# Addressable 2.2.1 -- added support for application/x-www-form-urlencoded. - -# Addressable 2.2.0 -- added site methods -- improved documentation - -# Addressable 2.1.2 -- added HTTP request URI methods -- better handling of Windows file paths -- validation_deferred boolean replaced with defer_validation block -- normalization of percent-encoded paths should now be correct -- fixed issue with constructing URIs with relative paths -- fixed warnings - -# Addressable 2.1.1 -- more type checking changes -- fixed issue with unicode normalization -- added method to find template defaults -- symbolic keys are now allowed in template mappings -- numeric values and symbolic values are now allowed in template mappings - -# Addressable 2.1.0 -- refactored URI template support out into its own class -- removed extract method due to being useless and unreliable -- removed Addressable::URI.expand_template -- removed Addressable::URI#extract_mapping -- added partial template expansion -- fixed minor bugs in the parse and heuristic_parse methods -- fixed incompatibility with Ruby 1.9.1 -- fixed bottleneck in Addressable::URI#hash and Addressable::URI#to_s -- fixed unicode normalization exception -- updated query_values methods to better handle subscript notation -- worked around issue with freezing URIs -- improved specs - -# Addressable 2.0.2 -- fixed issue with URI template expansion -- fixed issue with percent escaping characters 0-15 - -# Addressable 2.0.1 -- fixed issue with query string assignment -- fixed issue with improperly encoded components - -# Addressable 2.0.0 -- the initialize method now takes an options hash as its only parameter -- added query_values method to URI class -- completely replaced IDNA implementation with pure Ruby -- renamed Addressable::ADDRESSABLE_VERSION to Addressable::VERSION -- completely reworked the Rakefile -- changed the behavior of the port method significantly -- Addressable::URI.encode_segment, Addressable::URI.unencode_segment renamed -- documentation is now in YARD format -- more rigorous type checking -- to_str method implemented, implicit conversion to Strings now allowed -- Addressable::URI#omit method added, Addressable::URI#merge method replaced -- updated URI Template code to match v 03 of the draft spec -- added a bunch of new specifications - -# Addressable 1.0.4 -- switched to using RSpec's pending system for specs that rely on IDN -- fixed issue with creating URIs with paths that are not prefixed with '/' - -# Addressable 1.0.3 -- implemented a hash method - -# Addressable 1.0.2 -- fixed minor bug with the extract_mapping method - -# Addressable 1.0.1 -- fixed minor bug with the extract_mapping method - -# Addressable 1.0.0 -- heuristic parse method added -- parsing is slightly more strict -- replaced to_h with to_hash -- fixed routing methods -- improved specifications -- improved heckle rake task -- no surviving heckle mutations - -# Addressable 0.1.2 -- improved normalization -- fixed bug in joining algorithm -- updated specifications - -# Addressable 0.1.1 -- updated documentation -- added URI Template variable extraction - -# Addressable 0.1.0 -- initial release -- implementation based on RFC 3986, 3987 -- support for IRIs via libidn -- support for the URI Template draft spec diff --git a/bundle/ruby/3.2.0/gems/addressable-2.8.6/Gemfile b/bundle/ruby/3.2.0/gems/addressable-2.8.6/Gemfile deleted file mode 100644 index 0d36ffb5..00000000 --- a/bundle/ruby/3.2.0/gems/addressable-2.8.6/Gemfile +++ /dev/null @@ -1,30 +0,0 @@ -# frozen_string_literal: true - -source 'https://rubygems.org' - -gemspec - -group :test do - gem 'rspec', '~> 3.8' - gem 'rspec-its', '~> 1.3' -end - -group :coverage do - gem "coveralls", "> 0.7", require: false, platforms: :mri - gem "simplecov", require: false -end - -group :development do - gem 'launchy', '~> 2.4', '>= 2.4.3' - gem 'redcarpet', :platform => :mri_19 - gem 'yard' -end - -group :test, :development do - gem 'memory_profiler' - gem "rake", ">= 12.3.3" -end - -unless ENV["IDNA_MODE"] == "pure" - gem "idn-ruby", platform: :mri -end diff --git a/bundle/ruby/3.2.0/gems/addressable-2.8.6/LICENSE.txt b/bundle/ruby/3.2.0/gems/addressable-2.8.6/LICENSE.txt deleted file mode 100644 index ef51da2b..00000000 --- a/bundle/ruby/3.2.0/gems/addressable-2.8.6/LICENSE.txt +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - -Copyright [yyyy] [name of copyright owner] - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. diff --git a/bundle/ruby/3.2.0/gems/addressable-2.8.6/README.md b/bundle/ruby/3.2.0/gems/addressable-2.8.6/README.md deleted file mode 100644 index 9892f615..00000000 --- a/bundle/ruby/3.2.0/gems/addressable-2.8.6/README.md +++ /dev/null @@ -1,121 +0,0 @@ -# Addressable - -

    -
    Homepage
    github.com/sporkmonger/addressable
    -
    Author
    Bob Aman
    -
    Copyright
    Copyright © Bob Aman
    -
    License
    Apache 2.0
    -
    - -[![Gem Version](https://img.shields.io/gem/dt/addressable.svg)][gem] -[![Build Status](https://github.com/sporkmonger/addressable/workflows/CI/badge.svg)][actions] -[![Test Coverage Status](https://img.shields.io/coveralls/sporkmonger/addressable.svg)][coveralls] -[![Documentation Coverage Status](https://inch-ci.org/github/sporkmonger/addressable.svg?branch=master)][inch] - -[gem]: https://rubygems.org/gems/addressable -[actions]: https://github.com/sporkmonger/addressable/actions -[coveralls]: https://coveralls.io/r/sporkmonger/addressable -[inch]: https://inch-ci.org/github/sporkmonger/addressable - -# Description - -Addressable is an alternative implementation to the URI implementation -that is part of Ruby's standard library. It is flexible, offers heuristic -parsing, and additionally provides extensive support for IRIs and URI templates. - -Addressable closely conforms to RFC 3986, RFC 3987, and RFC 6570 (level 4). - -# Reference - -- {Addressable::URI} -- {Addressable::Template} - -# Example usage - -```ruby -require "addressable/uri" - -uri = Addressable::URI.parse("http://example.com/path/to/resource/") -uri.scheme -#=> "http" -uri.host -#=> "example.com" -uri.path -#=> "/path/to/resource/" - -uri = Addressable::URI.parse("http://www.詹姆斯.com/") -uri.normalize -#=> # -``` - - -# URI Templates - -For more details, see [RFC 6570](https://www.rfc-editor.org/rfc/rfc6570.txt). - - -```ruby - -require "addressable/template" - -template = Addressable::Template.new("http://example.com/{?query*}") -template.expand({ - "query" => { - 'foo' => 'bar', - 'color' => 'red' - } -}) -#=> # - -template = Addressable::Template.new("http://example.com/{?one,two,three}") -template.partial_expand({"one" => "1", "three" => 3}).pattern -#=> "http://example.com/?one=1{&two}&three=3" - -template = Addressable::Template.new( - "http://{host}{/segments*}/{?one,two,bogus}{#fragment}" -) -uri = Addressable::URI.parse( - "http://example.com/a/b/c/?one=1&two=2#foo" -) -template.extract(uri) -#=> -# { -# "host" => "example.com", -# "segments" => ["a", "b", "c"], -# "one" => "1", -# "two" => "2", -# "fragment" => "foo" -# } -``` - -# Install - -```console -$ gem install addressable -``` - -You may optionally turn on native IDN support by installing libidn and the -idn gem: - -```console -$ sudo apt-get install libidn11-dev # Debian/Ubuntu -$ brew install libidn # OS X -$ gem install idn-ruby -``` - -# Semantic Versioning - -This project uses [Semantic Versioning](https://semver.org/). You can (and should) specify your -dependency using a pessimistic version constraint covering the major and minor -values: - -```ruby -spec.add_dependency 'addressable', '~> 2.7' -``` - -If you need a specific bug fix, you can also specify minimum tiny versions -without preventing updates to the latest minor release: - -```ruby -spec.add_dependency 'addressable', '~> 2.3', '>= 2.3.7' -``` diff --git a/bundle/ruby/3.2.0/gems/addressable-2.8.6/Rakefile b/bundle/ruby/3.2.0/gems/addressable-2.8.6/Rakefile deleted file mode 100644 index 3ba58df4..00000000 --- a/bundle/ruby/3.2.0/gems/addressable-2.8.6/Rakefile +++ /dev/null @@ -1,40 +0,0 @@ -# frozen_string_literal: true - -require 'rubygems' -require 'rake' - -require File.join(File.dirname(__FILE__), 'lib', 'addressable', 'version') - -PKG_DISPLAY_NAME = 'Addressable' -PKG_NAME = PKG_DISPLAY_NAME.downcase -PKG_VERSION = Addressable::VERSION::STRING -PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}" - -RELEASE_NAME = "REL #{PKG_VERSION}" - -PKG_SUMMARY = "URI Implementation" -PKG_DESCRIPTION = <<-TEXT -Addressable is an alternative implementation to the URI implementation that is -part of Ruby's standard library. It is flexible, offers heuristic parsing, and -additionally provides extensive support for IRIs and URI templates. -TEXT - -PKG_FILES = FileList[ - "data/**/*", - "lib/**/*.rb", - "spec/**/*.rb", - "tasks/**/*.rake", - "addressable.gemspec", - "CHANGELOG.md", - "Gemfile", - "LICENSE.txt", - "README.md", - "Rakefile", -] - -task :default => "spec" - -WINDOWS = (RUBY_PLATFORM =~ /mswin|win32|mingw|bccwin|cygwin/) rescue false -SUDO = WINDOWS ? '' : ('sudo' unless ENV['SUDOLESS']) - -Dir['tasks/**/*.rake'].each { |rake| load rake } diff --git a/bundle/ruby/3.2.0/gems/addressable-2.8.6/addressable.gemspec b/bundle/ruby/3.2.0/gems/addressable-2.8.6/addressable.gemspec deleted file mode 100644 index 2055121d..00000000 --- a/bundle/ruby/3.2.0/gems/addressable-2.8.6/addressable.gemspec +++ /dev/null @@ -1,28 +0,0 @@ -# -*- encoding: utf-8 -*- -# stub: addressable 2.8.6 ruby lib - -Gem::Specification.new do |s| - s.name = "addressable".freeze - s.version = "2.8.6".freeze - - s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version= - s.metadata = { "changelog_uri" => "https://github.com/sporkmonger/addressable/blob/main/CHANGELOG.md#v2.8.6" } if s.respond_to? :metadata= - s.require_paths = ["lib".freeze] - s.authors = ["Bob Aman".freeze] - s.date = "2023-12-09" - s.description = "Addressable is an alternative implementation to the URI implementation that is\npart of Ruby's standard library. It is flexible, offers heuristic parsing, and\nadditionally provides extensive support for IRIs and URI templates.\n".freeze - s.email = "bob@sporkmonger.com".freeze - s.extra_rdoc_files = ["README.md".freeze] - s.files = ["CHANGELOG.md".freeze, "Gemfile".freeze, "LICENSE.txt".freeze, "README.md".freeze, "Rakefile".freeze, "addressable.gemspec".freeze, "data/unicode.data".freeze, "lib/addressable.rb".freeze, "lib/addressable/idna.rb".freeze, "lib/addressable/idna/native.rb".freeze, "lib/addressable/idna/pure.rb".freeze, "lib/addressable/template.rb".freeze, "lib/addressable/uri.rb".freeze, "lib/addressable/version.rb".freeze, "spec/addressable/idna_spec.rb".freeze, "spec/addressable/net_http_compat_spec.rb".freeze, "spec/addressable/security_spec.rb".freeze, "spec/addressable/template_spec.rb".freeze, "spec/addressable/uri_spec.rb".freeze, "spec/spec_helper.rb".freeze, "tasks/clobber.rake".freeze, "tasks/gem.rake".freeze, "tasks/git.rake".freeze, "tasks/metrics.rake".freeze, "tasks/profile.rake".freeze, "tasks/rspec.rake".freeze, "tasks/yard.rake".freeze] - s.homepage = "https://github.com/sporkmonger/addressable".freeze - s.licenses = ["Apache-2.0".freeze] - s.rdoc_options = ["--main".freeze, "README.md".freeze] - s.required_ruby_version = Gem::Requirement.new(">= 2.2".freeze) - s.rubygems_version = "3.4.22".freeze - s.summary = "URI Implementation".freeze - - s.specification_version = 4 - - s.add_runtime_dependency(%q.freeze, [">= 2.0.2".freeze, "< 6.0".freeze]) - s.add_development_dependency(%q.freeze, [">= 1.0".freeze, "< 3.0".freeze]) -end diff --git a/bundle/ruby/3.2.0/gems/addressable-2.8.6/data/unicode.data b/bundle/ruby/3.2.0/gems/addressable-2.8.6/data/unicode.data deleted file mode 100644 index cdfc22418a51396f2b89cfc1afb2c892b30d7e3f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 115740 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 0 && segment.size < 64 - IDN::Idna.toASCII(segment, IDN::Idna::ALLOW_UNASSIGNED) - elsif segment.size >= 64 - segment - else - '' - end - end.join('.') - end - - def self.to_unicode(value) - value.to_s.split('.', -1).map do |segment| - if segment.size > 0 && segment.size < 64 - IDN::Idna.toUnicode(segment, IDN::Idna::ALLOW_UNASSIGNED) - elsif segment.size >= 64 - segment - else - '' - end - end.join('.') - end - end -end diff --git a/bundle/ruby/3.2.0/gems/addressable-2.8.6/lib/addressable/idna/pure.rb b/bundle/ruby/3.2.0/gems/addressable-2.8.6/lib/addressable/idna/pure.rb deleted file mode 100644 index 3d6ffbad..00000000 --- a/bundle/ruby/3.2.0/gems/addressable-2.8.6/lib/addressable/idna/pure.rb +++ /dev/null @@ -1,505 +0,0 @@ -# frozen_string_literal: true - -#-- -# Copyright (C) Bob Aman -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -#++ - - -module Addressable - module IDNA - # This module is loosely based on idn_actionmailer by Mick Staugaard, - # the unicode library by Yoshida Masato, and the punycode implementation - # by Kazuhiro Nishiyama. Most of the code was copied verbatim, but - # some reformatting was done, and some translation from C was done. - # - # Without their code to work from as a base, we'd all still be relying - # on the presence of libidn. Which nobody ever seems to have installed. - # - # Original sources: - # http://github.com/staugaard/idn_actionmailer - # http://www.yoshidam.net/Ruby.html#unicode - # http://rubyforge.org/frs/?group_id=2550 - - - UNICODE_TABLE = File.expand_path( - File.join(File.dirname(__FILE__), '../../..', 'data/unicode.data') - ) - - ACE_PREFIX = "xn--" - - UTF8_REGEX = /\A(?: - [\x09\x0A\x0D\x20-\x7E] # ASCII - | [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte - | \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs - | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte - | \xED[\x80-\x9F][\x80-\xBF] # excluding surrogates - | \xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3 - | [\xF1-\xF3][\x80-\xBF]{3} # planes 4nil5 - | \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16 - )*\z/mnx - - UTF8_REGEX_MULTIBYTE = /(?: - [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte - | \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs - | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte - | \xED[\x80-\x9F][\x80-\xBF] # excluding surrogates - | \xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3 - | [\xF1-\xF3][\x80-\xBF]{3} # planes 4nil5 - | \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16 - )/mnx - - # :startdoc: - - # Converts from a Unicode internationalized domain name to an ASCII - # domain name as described in RFC 3490. - def self.to_ascii(input) - input = input.to_s unless input.is_a?(String) - input = input.dup.force_encoding(Encoding::UTF_8).unicode_normalize(:nfkc) - if input.respond_to?(:force_encoding) - input.force_encoding(Encoding::ASCII_8BIT) - end - if input =~ UTF8_REGEX && input =~ UTF8_REGEX_MULTIBYTE - parts = unicode_downcase(input).split('.') - parts.map! do |part| - if part.respond_to?(:force_encoding) - part.force_encoding(Encoding::ASCII_8BIT) - end - if part =~ UTF8_REGEX && part =~ UTF8_REGEX_MULTIBYTE - ACE_PREFIX + punycode_encode(part) - else - part - end - end - parts.join('.') - else - input - end - end - - # Converts from an ASCII domain name to a Unicode internationalized - # domain name as described in RFC 3490. - def self.to_unicode(input) - input = input.to_s unless input.is_a?(String) - parts = input.split('.') - parts.map! do |part| - if part =~ /^#{ACE_PREFIX}(.+)/ - begin - punycode_decode(part[/^#{ACE_PREFIX}(.+)/, 1]) - rescue Addressable::IDNA::PunycodeBadInput - # toUnicode is explicitly defined as never-fails by the spec - part - end - else - part - end - end - output = parts.join('.') - if output.respond_to?(:force_encoding) - output.force_encoding(Encoding::UTF_8) - end - output - end - - class << self - # @deprecated Use {String#unicode_normalize(:nfkc)} instead - def unicode_normalize_kc(value) - value.to_s.unicode_normalize(:nfkc) - end - - extend Gem::Deprecate - deprecate :unicode_normalize_kc, "String#unicode_normalize(:nfkc)", 2023, 4 - end - - ## - # Unicode aware downcase method. - # - # @api private - # @param [String] input - # The input string. - # @return [String] The downcased result. - def self.unicode_downcase(input) - input = input.to_s unless input.is_a?(String) - unpacked = input.unpack("U*") - unpacked.map! { |codepoint| lookup_unicode_lowercase(codepoint) } - return unpacked.pack("U*") - end - private_class_method :unicode_downcase - - def self.lookup_unicode_lowercase(codepoint) - codepoint_data = UNICODE_DATA[codepoint] - (codepoint_data ? - (codepoint_data[UNICODE_DATA_LOWERCASE] || codepoint) : - codepoint) - end - private_class_method :lookup_unicode_lowercase - - UNICODE_DATA_COMBINING_CLASS = 0 - UNICODE_DATA_EXCLUSION = 1 - UNICODE_DATA_CANONICAL = 2 - UNICODE_DATA_COMPATIBILITY = 3 - UNICODE_DATA_UPPERCASE = 4 - UNICODE_DATA_LOWERCASE = 5 - UNICODE_DATA_TITLECASE = 6 - - begin - if defined?(FakeFS) - fakefs_state = FakeFS.activated? - FakeFS.deactivate! - end - # This is a sparse Unicode table. Codepoints without entries are - # assumed to have the value: [0, 0, nil, nil, nil, nil, nil] - UNICODE_DATA = File.open(UNICODE_TABLE, "rb") do |file| - Marshal.load(file.read) - end - ensure - if defined?(FakeFS) - FakeFS.activate! if fakefs_state - end - end - - COMPOSITION_TABLE = {} - UNICODE_DATA.each do |codepoint, data| - canonical = data[UNICODE_DATA_CANONICAL] - exclusion = data[UNICODE_DATA_EXCLUSION] - - if canonical && exclusion == 0 - COMPOSITION_TABLE[canonical.unpack("C*")] = codepoint - end - end - - UNICODE_MAX_LENGTH = 256 - ACE_MAX_LENGTH = 256 - - PUNYCODE_BASE = 36 - PUNYCODE_TMIN = 1 - PUNYCODE_TMAX = 26 - PUNYCODE_SKEW = 38 - PUNYCODE_DAMP = 700 - PUNYCODE_INITIAL_BIAS = 72 - PUNYCODE_INITIAL_N = 0x80 - PUNYCODE_DELIMITER = 0x2D - - PUNYCODE_MAXINT = 1 << 64 - - PUNYCODE_PRINT_ASCII = - "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" + - "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" + - " !\"\#$%&'()*+,-./" + - "0123456789:;<=>?" + - "@ABCDEFGHIJKLMNO" + - "PQRSTUVWXYZ[\\]^_" + - "`abcdefghijklmno" + - "pqrstuvwxyz{|}~\n" - - # Input is invalid. - class PunycodeBadInput < StandardError; end - # Output would exceed the space provided. - class PunycodeBigOutput < StandardError; end - # Input needs wider integers to process. - class PunycodeOverflow < StandardError; end - - def self.punycode_encode(unicode) - unicode = unicode.to_s unless unicode.is_a?(String) - input = unicode.unpack("U*") - output = [0] * (ACE_MAX_LENGTH + 1) - input_length = input.size - output_length = [ACE_MAX_LENGTH] - - # Initialize the state - n = PUNYCODE_INITIAL_N - delta = out = 0 - max_out = output_length[0] - bias = PUNYCODE_INITIAL_BIAS - - # Handle the basic code points: - input_length.times do |j| - if punycode_basic?(input[j]) - if max_out - out < 2 - raise PunycodeBigOutput, - "Output would exceed the space provided." - end - output[out] = input[j] - out += 1 - end - end - - h = b = out - - # h is the number of code points that have been handled, b is the - # number of basic code points, and out is the number of characters - # that have been output. - - if b > 0 - output[out] = PUNYCODE_DELIMITER - out += 1 - end - - # Main encoding loop: - - while h < input_length - # All non-basic code points < n have been - # handled already. Find the next larger one: - - m = PUNYCODE_MAXINT - input_length.times do |j| - m = input[j] if (n...m) === input[j] - end - - # Increase delta enough to advance the decoder's - # state to , but guard against overflow: - - if m - n > (PUNYCODE_MAXINT - delta) / (h + 1) - raise PunycodeOverflow, "Input needs wider integers to process." - end - delta += (m - n) * (h + 1) - n = m - - input_length.times do |j| - # Punycode does not need to check whether input[j] is basic: - if input[j] < n - delta += 1 - if delta == 0 - raise PunycodeOverflow, - "Input needs wider integers to process." - end - end - - if input[j] == n - # Represent delta as a generalized variable-length integer: - - q = delta; k = PUNYCODE_BASE - while true - if out >= max_out - raise PunycodeBigOutput, - "Output would exceed the space provided." - end - t = ( - if k <= bias - PUNYCODE_TMIN - elsif k >= bias + PUNYCODE_TMAX - PUNYCODE_TMAX - else - k - bias - end - ) - break if q < t - output[out] = - punycode_encode_digit(t + (q - t) % (PUNYCODE_BASE - t)) - out += 1 - q = (q - t) / (PUNYCODE_BASE - t) - k += PUNYCODE_BASE - end - - output[out] = punycode_encode_digit(q) - out += 1 - bias = punycode_adapt(delta, h + 1, h == b) - delta = 0 - h += 1 - end - end - - delta += 1 - n += 1 - end - - output_length[0] = out - - outlen = out - outlen.times do |j| - c = output[j] - unless c >= 0 && c <= 127 - raise StandardError, "Invalid output char." - end - unless PUNYCODE_PRINT_ASCII[c] - raise PunycodeBadInput, "Input is invalid." - end - end - - output[0..outlen].map { |x| x.chr }.join("").sub(/\0+\z/, "") - end - private_class_method :punycode_encode - - def self.punycode_decode(punycode) - input = [] - output = [] - - if ACE_MAX_LENGTH * 2 < punycode.size - raise PunycodeBigOutput, "Output would exceed the space provided." - end - punycode.each_byte do |c| - unless c >= 0 && c <= 127 - raise PunycodeBadInput, "Input is invalid." - end - input.push(c) - end - - input_length = input.length - output_length = [UNICODE_MAX_LENGTH] - - # Initialize the state - n = PUNYCODE_INITIAL_N - - out = i = 0 - max_out = output_length[0] - bias = PUNYCODE_INITIAL_BIAS - - # Handle the basic code points: Let b be the number of input code - # points before the last delimiter, or 0 if there is none, then - # copy the first b code points to the output. - - b = 0 - input_length.times do |j| - b = j if punycode_delimiter?(input[j]) - end - if b > max_out - raise PunycodeBigOutput, "Output would exceed the space provided." - end - - b.times do |j| - unless punycode_basic?(input[j]) - raise PunycodeBadInput, "Input is invalid." - end - output[out] = input[j] - out+=1 - end - - # Main decoding loop: Start just after the last delimiter if any - # basic code points were copied; start at the beginning otherwise. - - in_ = b > 0 ? b + 1 : 0 - while in_ < input_length - - # in_ is the index of the next character to be consumed, and - # out is the number of code points in the output array. - - # Decode a generalized variable-length integer into delta, - # which gets added to i. The overflow checking is easier - # if we increase i as we go, then subtract off its starting - # value at the end to obtain delta. - - oldi = i; w = 1; k = PUNYCODE_BASE - while true - if in_ >= input_length - raise PunycodeBadInput, "Input is invalid." - end - digit = punycode_decode_digit(input[in_]) - in_+=1 - if digit >= PUNYCODE_BASE - raise PunycodeBadInput, "Input is invalid." - end - if digit > (PUNYCODE_MAXINT - i) / w - raise PunycodeOverflow, "Input needs wider integers to process." - end - i += digit * w - t = ( - if k <= bias - PUNYCODE_TMIN - elsif k >= bias + PUNYCODE_TMAX - PUNYCODE_TMAX - else - k - bias - end - ) - break if digit < t - if w > PUNYCODE_MAXINT / (PUNYCODE_BASE - t) - raise PunycodeOverflow, "Input needs wider integers to process." - end - w *= PUNYCODE_BASE - t - k += PUNYCODE_BASE - end - - bias = punycode_adapt(i - oldi, out + 1, oldi == 0) - - # I was supposed to wrap around from out + 1 to 0, - # incrementing n each time, so we'll fix that now: - - if i / (out + 1) > PUNYCODE_MAXINT - n - raise PunycodeOverflow, "Input needs wider integers to process." - end - n += i / (out + 1) - i %= out + 1 - - # Insert n at position i of the output: - - # not needed for Punycode: - # raise PUNYCODE_INVALID_INPUT if decode_digit(n) <= base - if out >= max_out - raise PunycodeBigOutput, "Output would exceed the space provided." - end - - #memmove(output + i + 1, output + i, (out - i) * sizeof *output) - output[i + 1, out - i] = output[i, out - i] - output[i] = n - i += 1 - - out += 1 - end - - output_length[0] = out - - output.pack("U*") - end - private_class_method :punycode_decode - - def self.punycode_basic?(codepoint) - codepoint < 0x80 - end - private_class_method :punycode_basic? - - def self.punycode_delimiter?(codepoint) - codepoint == PUNYCODE_DELIMITER - end - private_class_method :punycode_delimiter? - - def self.punycode_encode_digit(d) - d + 22 + 75 * ((d < 26) ? 1 : 0) - end - private_class_method :punycode_encode_digit - - # Returns the numeric value of a basic codepoint - # (for use in representing integers) in the range 0 to - # base - 1, or PUNYCODE_BASE if codepoint does not represent a value. - def self.punycode_decode_digit(codepoint) - if codepoint - 48 < 10 - codepoint - 22 - elsif codepoint - 65 < 26 - codepoint - 65 - elsif codepoint - 97 < 26 - codepoint - 97 - else - PUNYCODE_BASE - end - end - private_class_method :punycode_decode_digit - - # Bias adaptation method - def self.punycode_adapt(delta, numpoints, firsttime) - delta = firsttime ? delta / PUNYCODE_DAMP : delta >> 1 - # delta >> 1 is a faster way of doing delta / 2 - delta += delta / numpoints - difference = PUNYCODE_BASE - PUNYCODE_TMIN - - k = 0 - while delta > (difference * PUNYCODE_TMAX) / 2 - delta /= difference - k += PUNYCODE_BASE - end - - k + (difference + 1) * delta / (delta + PUNYCODE_SKEW) - end - private_class_method :punycode_adapt - end - # :startdoc: -end diff --git a/bundle/ruby/3.2.0/gems/addressable-2.8.6/lib/addressable/template.rb b/bundle/ruby/3.2.0/gems/addressable-2.8.6/lib/addressable/template.rb deleted file mode 100644 index bc520415..00000000 --- a/bundle/ruby/3.2.0/gems/addressable-2.8.6/lib/addressable/template.rb +++ /dev/null @@ -1,1029 +0,0 @@ -# frozen_string_literal: true - -#-- -# Copyright (C) Bob Aman -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -#++ - - -require "addressable/version" -require "addressable/uri" - -module Addressable - ## - # This is an implementation of a URI template based on - # RFC 6570 (http://tools.ietf.org/html/rfc6570). - class Template - # Constants used throughout the template code. - anything = - Addressable::URI::CharacterClasses::RESERVED + - Addressable::URI::CharacterClasses::UNRESERVED - - - variable_char_class = - Addressable::URI::CharacterClasses::ALPHA + - Addressable::URI::CharacterClasses::DIGIT + '_' - - var_char = - "(?>(?:[#{variable_char_class}]|%[a-fA-F0-9][a-fA-F0-9])+)" - RESERVED = - "(?:[#{anything}]|%[a-fA-F0-9][a-fA-F0-9])" - UNRESERVED = - "(?:[#{ - Addressable::URI::CharacterClasses::UNRESERVED - }]|%[a-fA-F0-9][a-fA-F0-9])" - variable = - "(?:#{var_char}(?:\\.?#{var_char})*)" - varspec = - "(?:(#{variable})(\\*|:\\d+)?)" - VARNAME = - /^#{variable}$/ - VARSPEC = - /^#{varspec}$/ - VARIABLE_LIST = - /^#{varspec}(?:,#{varspec})*$/ - operator = - "+#./;?&=,!@|" - EXPRESSION = - /\{([#{operator}])?(#{varspec}(?:,#{varspec})*)\}/ - - - LEADERS = { - '?' => '?', - '/' => '/', - '#' => '#', - '.' => '.', - ';' => ';', - '&' => '&' - } - JOINERS = { - '?' => '&', - '.' => '.', - ';' => ';', - '&' => '&', - '/' => '/' - } - - ## - # Raised if an invalid template value is supplied. - class InvalidTemplateValueError < StandardError - end - - ## - # Raised if an invalid template operator is used in a pattern. - class InvalidTemplateOperatorError < StandardError - end - - ## - # Raised if an invalid template operator is used in a pattern. - class TemplateOperatorAbortedError < StandardError - end - - ## - # This class represents the data that is extracted when a Template - # is matched against a URI. - class MatchData - ## - # Creates a new MatchData object. - # MatchData objects should never be instantiated directly. - # - # @param [Addressable::URI] uri - # The URI that the template was matched against. - def initialize(uri, template, mapping) - @uri = uri.dup.freeze - @template = template - @mapping = mapping.dup.freeze - end - - ## - # @return [Addressable::URI] - # The URI that the Template was matched against. - attr_reader :uri - - ## - # @return [Addressable::Template] - # The Template used for the match. - attr_reader :template - - ## - # @return [Hash] - # The mapping that resulted from the match. - # Note that this mapping does not include keys or values for - # variables that appear in the Template, but are not present - # in the URI. - attr_reader :mapping - - ## - # @return [Array] - # The list of variables that were present in the Template. - # Note that this list will include variables which do not appear - # in the mapping because they were not present in URI. - def variables - self.template.variables - end - alias_method :keys, :variables - alias_method :names, :variables - - ## - # @return [Array] - # The list of values that were captured by the Template. - # Note that this list will include nils for any variables which - # were in the Template, but did not appear in the URI. - def values - @values ||= self.variables.inject([]) do |accu, key| - accu << self.mapping[key] - accu - end - end - alias_method :captures, :values - - ## - # Accesses captured values by name or by index. - # - # @param [String, Symbol, Fixnum] key - # Capture index or name. Note that when accessing by with index - # of 0, the full URI will be returned. The intention is to mimic - # the ::MatchData#[] behavior. - # - # @param [#to_int, nil] len - # If provided, an array of values will be returend with the given - # parameter used as length. - # - # @return [Array, String, nil] - # The captured value corresponding to the index or name. If the - # value was not provided or the key is unknown, nil will be - # returned. - # - # If the second parameter is provided, an array of that length will - # be returned instead. - def [](key, len = nil) - if len - to_a[key, len] - elsif String === key or Symbol === key - mapping[key.to_s] - else - to_a[key] - end - end - - ## - # @return [Array] - # Array with the matched URI as first element followed by the captured - # values. - def to_a - [to_s, *values] - end - - ## - # @return [String] - # The matched URI as String. - def to_s - uri.to_s - end - alias_method :string, :to_s - - # Returns multiple captured values at once. - # - # @param [String, Symbol, Fixnum] *indexes - # Indices of the captures to be returned - # - # @return [Array] - # Values corresponding to given indices. - # - # @see Addressable::Template::MatchData#[] - def values_at(*indexes) - indexes.map { |i| self[i] } - end - - ## - # Returns a String representation of the MatchData's state. - # - # @return [String] The MatchData's state, as a String. - def inspect - sprintf("#<%s:%#0x RESULT:%s>", - self.class.to_s, self.object_id, self.mapping.inspect) - end - - ## - # Dummy method for code expecting a ::MatchData instance - # - # @return [String] An empty string. - def pre_match - "" - end - alias_method :post_match, :pre_match - end - - ## - # Creates a new Addressable::Template object. - # - # @param [#to_str] pattern The URI Template pattern. - # - # @return [Addressable::Template] The initialized Template object. - def initialize(pattern) - if !pattern.respond_to?(:to_str) - raise TypeError, "Can't convert #{pattern.class} into String." - end - @pattern = pattern.to_str.dup.freeze - end - - ## - # Freeze URI, initializing instance variables. - # - # @return [Addressable::URI] The frozen URI object. - def freeze - self.variables - self.variable_defaults - self.named_captures - super - end - - ## - # @return [String] The Template object's pattern. - attr_reader :pattern - - ## - # Returns a String representation of the Template object's state. - # - # @return [String] The Template object's state, as a String. - def inspect - sprintf("#<%s:%#0x PATTERN:%s>", - self.class.to_s, self.object_id, self.pattern) - end - - ## - # Returns true if the Template objects are equal. This method - # does NOT normalize either Template before doing the comparison. - # - # @param [Object] template The Template to compare. - # - # @return [TrueClass, FalseClass] - # true if the Templates are equivalent, false - # otherwise. - def ==(template) - return false unless template.kind_of?(Template) - return self.pattern == template.pattern - end - - ## - # Addressable::Template makes no distinction between `==` and `eql?`. - # - # @see #== - alias_method :eql?, :== - - ## - # Extracts a mapping from the URI using a URI Template pattern. - # - # @param [Addressable::URI, #to_str] uri - # The URI to extract from. - # - # @param [#restore, #match] processor - # A template processor object may optionally be supplied. - # - # The object should respond to either the restore or - # match messages or both. The restore method should - # take two parameters: `[String] name` and `[String] value`. - # The restore method should reverse any transformations that - # have been performed on the value to ensure a valid URI. - # The match method should take a single - # parameter: `[String] name`. The match method should return - # a String containing a regular expression capture group for - # matching on that particular variable. The default value is `".*?"`. - # The match method has no effect on multivariate operator - # expansions. - # - # @return [Hash, NilClass] - # The Hash mapping that was extracted from the URI, or - # nil if the URI didn't match the template. - # - # @example - # class ExampleProcessor - # def self.restore(name, value) - # return value.gsub(/\+/, " ") if name == "query" - # return value - # end - # - # def self.match(name) - # return ".*?" if name == "first" - # return ".*" - # end - # end - # - # uri = Addressable::URI.parse( - # "http://example.com/search/an+example+search+query/" - # ) - # Addressable::Template.new( - # "http://example.com/search/{query}/" - # ).extract(uri, ExampleProcessor) - # #=> {"query" => "an example search query"} - # - # uri = Addressable::URI.parse("http://example.com/a/b/c/") - # Addressable::Template.new( - # "http://example.com/{first}/{second}/" - # ).extract(uri, ExampleProcessor) - # #=> {"first" => "a", "second" => "b/c"} - # - # uri = Addressable::URI.parse("http://example.com/a/b/c/") - # Addressable::Template.new( - # "http://example.com/{first}/{-list|/|second}/" - # ).extract(uri) - # #=> {"first" => "a", "second" => ["b", "c"]} - def extract(uri, processor=nil) - match_data = self.match(uri, processor) - return (match_data ? match_data.mapping : nil) - end - - ## - # Extracts match data from the URI using a URI Template pattern. - # - # @param [Addressable::URI, #to_str] uri - # The URI to extract from. - # - # @param [#restore, #match] processor - # A template processor object may optionally be supplied. - # - # The object should respond to either the restore or - # match messages or both. The restore method should - # take two parameters: `[String] name` and `[String] value`. - # The restore method should reverse any transformations that - # have been performed on the value to ensure a valid URI. - # The match method should take a single - # parameter: `[String] name`. The match method should return - # a String containing a regular expression capture group for - # matching on that particular variable. The default value is `".*?"`. - # The match method has no effect on multivariate operator - # expansions. - # - # @return [Hash, NilClass] - # The Hash mapping that was extracted from the URI, or - # nil if the URI didn't match the template. - # - # @example - # class ExampleProcessor - # def self.restore(name, value) - # return value.gsub(/\+/, " ") if name == "query" - # return value - # end - # - # def self.match(name) - # return ".*?" if name == "first" - # return ".*" - # end - # end - # - # uri = Addressable::URI.parse( - # "http://example.com/search/an+example+search+query/" - # ) - # match = Addressable::Template.new( - # "http://example.com/search/{query}/" - # ).match(uri, ExampleProcessor) - # match.variables - # #=> ["query"] - # match.captures - # #=> ["an example search query"] - # - # uri = Addressable::URI.parse("http://example.com/a/b/c/") - # match = Addressable::Template.new( - # "http://example.com/{first}/{+second}/" - # ).match(uri, ExampleProcessor) - # match.variables - # #=> ["first", "second"] - # match.captures - # #=> ["a", "b/c"] - # - # uri = Addressable::URI.parse("http://example.com/a/b/c/") - # match = Addressable::Template.new( - # "http://example.com/{first}{/second*}/" - # ).match(uri) - # match.variables - # #=> ["first", "second"] - # match.captures - # #=> ["a", ["b", "c"]] - def match(uri, processor=nil) - uri = Addressable::URI.parse(uri) unless uri.is_a?(Addressable::URI) - mapping = {} - - # First, we need to process the pattern, and extract the values. - expansions, expansion_regexp = - parse_template_pattern(pattern, processor) - - return nil unless uri.to_str.match(expansion_regexp) - unparsed_values = uri.to_str.scan(expansion_regexp).flatten - - if uri.to_str == pattern - return Addressable::Template::MatchData.new(uri, self, mapping) - elsif expansions.size > 0 - index = 0 - expansions.each do |expansion| - _, operator, varlist = *expansion.match(EXPRESSION) - varlist.split(',').each do |varspec| - _, name, modifier = *varspec.match(VARSPEC) - mapping[name] ||= nil - case operator - when nil, '+', '#', '/', '.' - unparsed_value = unparsed_values[index] - name = varspec[VARSPEC, 1] - value = unparsed_value - value = value.split(JOINERS[operator]) if value && modifier == '*' - when ';', '?', '&' - if modifier == '*' - if unparsed_values[index] - value = unparsed_values[index].split(JOINERS[operator]) - value = value.inject({}) do |acc, v| - key, val = v.split('=') - val = "" if val.nil? - acc[key] = val - acc - end - end - else - if (unparsed_values[index]) - name, value = unparsed_values[index].split('=') - value = "" if value.nil? - end - end - end - if processor != nil && processor.respond_to?(:restore) - value = processor.restore(name, value) - end - if processor == nil - if value.is_a?(Hash) - value = value.inject({}){|acc, (k, v)| - acc[Addressable::URI.unencode_component(k)] = - Addressable::URI.unencode_component(v) - acc - } - elsif value.is_a?(Array) - value = value.map{|v| Addressable::URI.unencode_component(v) } - else - value = Addressable::URI.unencode_component(value) - end - end - if !mapping.has_key?(name) || mapping[name].nil? - # Doesn't exist, set to value (even if value is nil) - mapping[name] = value - end - index = index + 1 - end - end - return Addressable::Template::MatchData.new(uri, self, mapping) - else - return nil - end - end - - ## - # Expands a URI template into another URI template. - # - # @param [Hash] mapping The mapping that corresponds to the pattern. - # @param [#validate, #transform] processor - # An optional processor object may be supplied. - # @param [Boolean] normalize_values - # Optional flag to enable/disable unicode normalization. Default: true - # - # The object should respond to either the validate or - # transform messages or both. Both the validate and - # transform methods should take two parameters: name and - # value. The validate method should return true - # or false; true if the value of the variable is valid, - # false otherwise. An InvalidTemplateValueError - # exception will be raised if the value is invalid. The transform - # method should return the transformed variable value as a String. - # If a transform method is used, the value will not be percent - # encoded automatically. Unicode normalization will be performed both - # before and after sending the value to the transform method. - # - # @return [Addressable::Template] The partially expanded URI template. - # - # @example - # Addressable::Template.new( - # "http://example.com/{one}/{two}/" - # ).partial_expand({"one" => "1"}).pattern - # #=> "http://example.com/1/{two}/" - # - # Addressable::Template.new( - # "http://example.com/{?one,two}/" - # ).partial_expand({"one" => "1"}).pattern - # #=> "http://example.com/?one=1{&two}/" - # - # Addressable::Template.new( - # "http://example.com/{?one,two,three}/" - # ).partial_expand({"one" => "1", "three" => 3}).pattern - # #=> "http://example.com/?one=1{&two}&three=3" - def partial_expand(mapping, processor=nil, normalize_values=true) - result = self.pattern.dup - mapping = normalize_keys(mapping) - result.gsub!( EXPRESSION ) do |capture| - transform_partial_capture(mapping, capture, processor, normalize_values) - end - return Addressable::Template.new(result) - end - - ## - # Expands a URI template into a full URI. - # - # @param [Hash] mapping The mapping that corresponds to the pattern. - # @param [#validate, #transform] processor - # An optional processor object may be supplied. - # @param [Boolean] normalize_values - # Optional flag to enable/disable unicode normalization. Default: true - # - # The object should respond to either the validate or - # transform messages or both. Both the validate and - # transform methods should take two parameters: name and - # value. The validate method should return true - # or false; true if the value of the variable is valid, - # false otherwise. An InvalidTemplateValueError - # exception will be raised if the value is invalid. The transform - # method should return the transformed variable value as a String. - # If a transform method is used, the value will not be percent - # encoded automatically. Unicode normalization will be performed both - # before and after sending the value to the transform method. - # - # @return [Addressable::URI] The expanded URI template. - # - # @example - # class ExampleProcessor - # def self.validate(name, value) - # return !!(value =~ /^[\w ]+$/) if name == "query" - # return true - # end - # - # def self.transform(name, value) - # return value.gsub(/ /, "+") if name == "query" - # return value - # end - # end - # - # Addressable::Template.new( - # "http://example.com/search/{query}/" - # ).expand( - # {"query" => "an example search query"}, - # ExampleProcessor - # ).to_str - # #=> "http://example.com/search/an+example+search+query/" - # - # Addressable::Template.new( - # "http://example.com/search/{query}/" - # ).expand( - # {"query" => "an example search query"} - # ).to_str - # #=> "http://example.com/search/an%20example%20search%20query/" - # - # Addressable::Template.new( - # "http://example.com/search/{query}/" - # ).expand( - # {"query" => "bogus!"}, - # ExampleProcessor - # ).to_str - # #=> Addressable::Template::InvalidTemplateValueError - def expand(mapping, processor=nil, normalize_values=true) - result = self.pattern.dup - mapping = normalize_keys(mapping) - result.gsub!( EXPRESSION ) do |capture| - transform_capture(mapping, capture, processor, normalize_values) - end - return Addressable::URI.parse(result) - end - - ## - # Returns an Array of variables used within the template pattern. - # The variables are listed in the Array in the order they appear within - # the pattern. Multiple occurrences of a variable within a pattern are - # not represented in this Array. - # - # @return [Array] The variables present in the template's pattern. - def variables - @variables ||= ordered_variable_defaults.map { |var, val| var }.uniq - end - alias_method :keys, :variables - alias_method :names, :variables - - ## - # Returns a mapping of variables to their default values specified - # in the template. Variables without defaults are not returned. - # - # @return [Hash] Mapping of template variables to their defaults - def variable_defaults - @variable_defaults ||= - Hash[*ordered_variable_defaults.reject { |k, v| v.nil? }.flatten] - end - - ## - # Coerces a template into a `Regexp` object. This regular expression will - # behave very similarly to the actual template, and should match the same - # URI values, but it cannot fully handle, for example, values that would - # extract to an `Array`. - # - # @return [Regexp] A regular expression which should match the template. - def to_regexp - _, source = parse_template_pattern(pattern) - Regexp.new(source) - end - - ## - # Returns the source of the coerced `Regexp`. - # - # @return [String] The source of the `Regexp` given by {#to_regexp}. - # - # @api private - def source - self.to_regexp.source - end - - ## - # Returns the named captures of the coerced `Regexp`. - # - # @return [Hash] The named captures of the `Regexp` given by {#to_regexp}. - # - # @api private - def named_captures - self.to_regexp.named_captures - end - - private - def ordered_variable_defaults - @ordered_variable_defaults ||= begin - expansions, _ = parse_template_pattern(pattern) - expansions.flat_map do |capture| - _, _, varlist = *capture.match(EXPRESSION) - varlist.split(',').map do |varspec| - varspec[VARSPEC, 1] - end - end - end - end - - - ## - # Loops through each capture and expands any values available in mapping - # - # @param [Hash] mapping - # Set of keys to expand - # @param [String] capture - # The expression to expand - # @param [#validate, #transform] processor - # An optional processor object may be supplied. - # @param [Boolean] normalize_values - # Optional flag to enable/disable unicode normalization. Default: true - # - # The object should respond to either the validate or - # transform messages or both. Both the validate and - # transform methods should take two parameters: name and - # value. The validate method should return true - # or false; true if the value of the variable is valid, - # false otherwise. An InvalidTemplateValueError exception - # will be raised if the value is invalid. The transform method - # should return the transformed variable value as a String. If a - # transform method is used, the value will not be percent encoded - # automatically. Unicode normalization will be performed both before and - # after sending the value to the transform method. - # - # @return [String] The expanded expression - def transform_partial_capture(mapping, capture, processor = nil, - normalize_values = true) - _, operator, varlist = *capture.match(EXPRESSION) - - vars = varlist.split(",") - - if operator == "?" - # partial expansion of form style query variables sometimes requires a - # slight reordering of the variables to produce a valid url. - first_to_expand = vars.find { |varspec| - _, name, _ = *varspec.match(VARSPEC) - mapping.key?(name) && !mapping[name].nil? - } - - vars = [first_to_expand] + vars.reject {|varspec| varspec == first_to_expand} if first_to_expand - end - - vars. - inject("".dup) do |acc, varspec| - _, name, _ = *varspec.match(VARSPEC) - next_val = if mapping.key? name - transform_capture(mapping, "{#{operator}#{varspec}}", - processor, normalize_values) - else - "{#{operator}#{varspec}}" - end - # If we've already expanded at least one '?' operator with non-empty - # value, change to '&' - operator = "&" if (operator == "?") && (next_val != "") - acc << next_val - end - end - - ## - # Transforms a mapped value so that values can be substituted into the - # template. - # - # @param [Hash] mapping The mapping to replace captures - # @param [String] capture - # The expression to replace - # @param [#validate, #transform] processor - # An optional processor object may be supplied. - # @param [Boolean] normalize_values - # Optional flag to enable/disable unicode normalization. Default: true - # - # - # The object should respond to either the validate or - # transform messages or both. Both the validate and - # transform methods should take two parameters: name and - # value. The validate method should return true - # or false; true if the value of the variable is valid, - # false otherwise. An InvalidTemplateValueError exception - # will be raised if the value is invalid. The transform method - # should return the transformed variable value as a String. If a - # transform method is used, the value will not be percent encoded - # automatically. Unicode normalization will be performed both before and - # after sending the value to the transform method. - # - # @return [String] The expanded expression - def transform_capture(mapping, capture, processor=nil, - normalize_values=true) - _, operator, varlist = *capture.match(EXPRESSION) - return_value = varlist.split(',').inject([]) do |acc, varspec| - _, name, modifier = *varspec.match(VARSPEC) - value = mapping[name] - unless value == nil || value == {} - allow_reserved = %w(+ #).include?(operator) - # Common primitives where the .to_s output is well-defined - if Numeric === value || Symbol === value || - value == true || value == false - value = value.to_s - end - length = modifier.gsub(':', '').to_i if modifier =~ /^:\d+/ - - unless (Hash === value) || - value.respond_to?(:to_ary) || value.respond_to?(:to_str) - raise TypeError, - "Can't convert #{value.class} into String or Array." - end - - value = normalize_value(value) if normalize_values - - if processor == nil || !processor.respond_to?(:transform) - # Handle percent escaping - if allow_reserved - encode_map = - Addressable::URI::CharacterClasses::RESERVED + - Addressable::URI::CharacterClasses::UNRESERVED - else - encode_map = Addressable::URI::CharacterClasses::UNRESERVED - end - if value.kind_of?(Array) - transformed_value = value.map do |val| - if length - Addressable::URI.encode_component(val[0...length], encode_map) - else - Addressable::URI.encode_component(val, encode_map) - end - end - unless modifier == "*" - transformed_value = transformed_value.join(',') - end - elsif value.kind_of?(Hash) - transformed_value = value.map do |key, val| - if modifier == "*" - "#{ - Addressable::URI.encode_component( key, encode_map) - }=#{ - Addressable::URI.encode_component( val, encode_map) - }" - else - "#{ - Addressable::URI.encode_component( key, encode_map) - },#{ - Addressable::URI.encode_component( val, encode_map) - }" - end - end - unless modifier == "*" - transformed_value = transformed_value.join(',') - end - else - if length - transformed_value = Addressable::URI.encode_component( - value[0...length], encode_map) - else - transformed_value = Addressable::URI.encode_component( - value, encode_map) - end - end - end - - # Process, if we've got a processor - if processor != nil - if processor.respond_to?(:validate) - if !processor.validate(name, value) - display_value = value.kind_of?(Array) ? value.inspect : value - raise InvalidTemplateValueError, - "#{name}=#{display_value} is an invalid template value." - end - end - if processor.respond_to?(:transform) - transformed_value = processor.transform(name, value) - if normalize_values - transformed_value = normalize_value(transformed_value) - end - end - end - acc << [name, transformed_value] - end - acc - end - return "" if return_value.empty? - join_values(operator, return_value) - end - - ## - # Takes a set of values, and joins them together based on the - # operator. - # - # @param [String, Nil] operator One of the operators from the set - # (?,&,+,#,;,/,.), or nil if there wasn't one. - # @param [Array] return_value - # The set of return values (as [variable_name, value] tuples) that will - # be joined together. - # - # @return [String] The transformed mapped value - def join_values(operator, return_value) - leader = LEADERS.fetch(operator, '') - joiner = JOINERS.fetch(operator, ',') - case operator - when '&', '?' - leader + return_value.map{|k,v| - if v.is_a?(Array) && v.first =~ /=/ - v.join(joiner) - elsif v.is_a?(Array) - v.map{|inner_value| "#{k}=#{inner_value}"}.join(joiner) - else - "#{k}=#{v}" - end - }.join(joiner) - when ';' - return_value.map{|k,v| - if v.is_a?(Array) && v.first =~ /=/ - ';' + v.join(";") - elsif v.is_a?(Array) - ';' + v.map{|inner_value| "#{k}=#{inner_value}"}.join(";") - else - v && v != '' ? ";#{k}=#{v}" : ";#{k}" - end - }.join - else - leader + return_value.map{|k,v| v}.join(joiner) - end - end - - ## - # Takes a set of values, and joins them together based on the - # operator. - # - # @param [Hash, Array, String] value - # Normalizes unicode keys and values with String#unicode_normalize (NFC) - # - # @return [Hash, Array, String] The normalized values - def normalize_value(value) - # Handle unicode normalization - if value.respond_to?(:to_ary) - value.to_ary.map! { |val| normalize_value(val) } - elsif value.kind_of?(Hash) - value = value.inject({}) { |acc, (k, v)| - acc[normalize_value(k)] = normalize_value(v) - acc - } - else - value = value.to_s if !value.kind_of?(String) - if value.encoding != Encoding::UTF_8 - value = value.dup.force_encoding(Encoding::UTF_8) - end - value = value.unicode_normalize(:nfc) - end - value - end - - ## - # Generates a hash with string keys - # - # @param [Hash] mapping A mapping hash to normalize - # - # @return [Hash] - # A hash with stringified keys - def normalize_keys(mapping) - return mapping.inject({}) do |accu, pair| - name, value = pair - if Symbol === name - name = name.to_s - elsif name.respond_to?(:to_str) - name = name.to_str - else - raise TypeError, - "Can't convert #{name.class} into String." - end - accu[name] = value - accu - end - end - - ## - # Generates the Regexp that parses a template pattern. Memoizes the - # value if template processor not set (processors may not be deterministic) - # - # @param [String] pattern The URI template pattern. - # @param [#match] processor The template processor to use. - # - # @return [Array, Regexp] - # An array of expansion variables nad a regular expression which may be - # used to parse a template pattern - def parse_template_pattern(pattern, processor = nil) - if processor.nil? && pattern == @pattern - @cached_template_parse ||= - parse_new_template_pattern(pattern, processor) - else - parse_new_template_pattern(pattern, processor) - end - end - - ## - # Generates the Regexp that parses a template pattern. - # - # @param [String] pattern The URI template pattern. - # @param [#match] processor The template processor to use. - # - # @return [Array, Regexp] - # An array of expansion variables nad a regular expression which may be - # used to parse a template pattern - def parse_new_template_pattern(pattern, processor = nil) - # Escape the pattern. The two gsubs restore the escaped curly braces - # back to their original form. Basically, escape everything that isn't - # within an expansion. - escaped_pattern = Regexp.escape( - pattern - ).gsub(/\\\{(.*?)\\\}/) do |escaped| - escaped.gsub(/\\(.)/, "\\1") - end - - expansions = [] - - # Create a regular expression that captures the values of the - # variables in the URI. - regexp_string = escaped_pattern.gsub( EXPRESSION ) do |expansion| - - expansions << expansion - _, operator, varlist = *expansion.match(EXPRESSION) - leader = Regexp.escape(LEADERS.fetch(operator, '')) - joiner = Regexp.escape(JOINERS.fetch(operator, ',')) - combined = varlist.split(',').map do |varspec| - _, name, modifier = *varspec.match(VARSPEC) - - result = processor && processor.respond_to?(:match) ? processor.match(name) : nil - if result - "(?<#{name}>#{ result })" - else - group = case operator - when '+' - "#{ RESERVED }*?" - when '#' - "#{ RESERVED }*?" - when '/' - "#{ UNRESERVED }*?" - when '.' - "#{ UNRESERVED.gsub('\.', '') }*?" - when ';' - "#{ UNRESERVED }*=?#{ UNRESERVED }*?" - when '?' - "#{ UNRESERVED }*=#{ UNRESERVED }*?" - when '&' - "#{ UNRESERVED }*=#{ UNRESERVED }*?" - else - "#{ UNRESERVED }*?" - end - if modifier == '*' - "(?<#{name}>#{group}(?:#{joiner}?#{group})*)?" - else - "(?<#{name}>#{group})?" - end - end - end.join("#{joiner}?") - "(?:|#{leader}#{combined})" - end - - # Ensure that the regular expression matches the whole URI. - regexp_string = "\\A#{regexp_string}\\z" - return expansions, Regexp.new(regexp_string) - end - - end -end diff --git a/bundle/ruby/3.2.0/gems/addressable-2.8.6/lib/addressable/uri.rb b/bundle/ruby/3.2.0/gems/addressable-2.8.6/lib/addressable/uri.rb deleted file mode 100644 index 2fc87eec..00000000 --- a/bundle/ruby/3.2.0/gems/addressable-2.8.6/lib/addressable/uri.rb +++ /dev/null @@ -1,2602 +0,0 @@ -# frozen_string_literal: true - -#-- -# Copyright (C) Bob Aman -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -#++ - - -require "addressable/version" -require "addressable/idna" -require "public_suffix" - -## -# Addressable is a library for processing links and URIs. -module Addressable - ## - # This is an implementation of a URI parser based on - # RFC 3986, - # RFC 3987. - class URI - ## - # Raised if something other than a uri is supplied. - class InvalidURIError < StandardError - end - - ## - # Container for the character classes specified in - # RFC 3986. - # - # Note: Concatenated and interpolated `String`s are not affected by the - # `frozen_string_literal` directive and must be frozen explicitly. - # - # Interpolated `String`s *were* frozen this way before Ruby 3.0: - # https://bugs.ruby-lang.org/issues/17104 - module CharacterClasses - ALPHA = "a-zA-Z" - DIGIT = "0-9" - GEN_DELIMS = "\\:\\/\\?\\#\\[\\]\\@" - SUB_DELIMS = "\\!\\$\\&\\'\\(\\)\\*\\+\\,\\;\\=" - RESERVED = (GEN_DELIMS + SUB_DELIMS).freeze - UNRESERVED = (ALPHA + DIGIT + "\\-\\.\\_\\~").freeze - RESERVED_AND_UNRESERVED = RESERVED + UNRESERVED - PCHAR = (UNRESERVED + SUB_DELIMS + "\\:\\@").freeze - SCHEME = (ALPHA + DIGIT + "\\-\\+\\.").freeze - HOST = (UNRESERVED + SUB_DELIMS + "\\[\\:\\]").freeze - AUTHORITY = (PCHAR + "\\[\\]").freeze - PATH = (PCHAR + "\\/").freeze - QUERY = (PCHAR + "\\/\\?").freeze - FRAGMENT = (PCHAR + "\\/\\?").freeze - end - - module NormalizeCharacterClasses - HOST = /[^#{CharacterClasses::HOST}]/ - UNRESERVED = /[^#{CharacterClasses::UNRESERVED}]/ - PCHAR = /[^#{CharacterClasses::PCHAR}]/ - SCHEME = /[^#{CharacterClasses::SCHEME}]/ - FRAGMENT = /[^#{CharacterClasses::FRAGMENT}]/ - QUERY = %r{[^a-zA-Z0-9\-\.\_\~\!\$\'\(\)\*\+\,\=\:\@\/\?%]|%(?!2B|2b)} - end - - module CharacterClassesRegexps - AUTHORITY = /[^#{CharacterClasses::AUTHORITY}]/ - FRAGMENT = /[^#{CharacterClasses::FRAGMENT}]/ - HOST = /[^#{CharacterClasses::HOST}]/ - PATH = /[^#{CharacterClasses::PATH}]/ - QUERY = /[^#{CharacterClasses::QUERY}]/ - RESERVED = /[^#{CharacterClasses::RESERVED}]/ - RESERVED_AND_UNRESERVED = /[^#{CharacterClasses::RESERVED_AND_UNRESERVED}]/ - SCHEME = /[^#{CharacterClasses::SCHEME}]/ - UNRESERVED = /[^#{CharacterClasses::UNRESERVED}]/ - end - - SLASH = '/' - EMPTY_STR = '' - - URIREGEX = /^(([^:\/?#]+):)?(\/\/([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/ - - PORT_MAPPING = { - "http" => 80, - "https" => 443, - "ftp" => 21, - "tftp" => 69, - "sftp" => 22, - "ssh" => 22, - "svn+ssh" => 22, - "telnet" => 23, - "nntp" => 119, - "gopher" => 70, - "wais" => 210, - "ldap" => 389, - "prospero" => 1525 - }.freeze - - ## - # Returns a URI object based on the parsed string. - # - # @param [String, Addressable::URI, #to_str] uri - # The URI string to parse. - # No parsing is performed if the object is already an - # Addressable::URI. - # - # @return [Addressable::URI] The parsed URI. - def self.parse(uri) - # If we were given nil, return nil. - return nil unless uri - # If a URI object is passed, just return itself. - return uri.dup if uri.kind_of?(self) - - # If a URI object of the Ruby standard library variety is passed, - # convert it to a string, then parse the string. - # We do the check this way because we don't want to accidentally - # cause a missing constant exception to be thrown. - if uri.class.name =~ /^URI\b/ - uri = uri.to_s - end - - # Otherwise, convert to a String - begin - uri = uri.to_str - rescue TypeError, NoMethodError - raise TypeError, "Can't convert #{uri.class} into String." - end unless uri.is_a?(String) - - # This Regexp supplied as an example in RFC 3986, and it works great. - scan = uri.scan(URIREGEX) - fragments = scan[0] - scheme = fragments[1] - authority = fragments[3] - path = fragments[4] - query = fragments[6] - fragment = fragments[8] - user = nil - password = nil - host = nil - port = nil - if authority != nil - # The Regexp above doesn't split apart the authority. - userinfo = authority[/^([^\[\]]*)@/, 1] - if userinfo != nil - user = userinfo.strip[/^([^:]*):?/, 1] - password = userinfo.strip[/:(.*)$/, 1] - end - - host = authority.sub( - /^([^\[\]]*)@/, EMPTY_STR - ).sub( - /:([^:@\[\]]*?)$/, EMPTY_STR - ) - - port = authority[/:([^:@\[\]]*?)$/, 1] - port = nil if port == EMPTY_STR - end - - return new( - :scheme => scheme, - :user => user, - :password => password, - :host => host, - :port => port, - :path => path, - :query => query, - :fragment => fragment - ) - end - - ## - # Converts an input to a URI. The input does not have to be a valid - # URI — the method will use heuristics to guess what URI was intended. - # This is not standards-compliant, merely user-friendly. - # - # @param [String, Addressable::URI, #to_str] uri - # The URI string to parse. - # No parsing is performed if the object is already an - # Addressable::URI. - # @param [Hash] hints - # A Hash of hints to the heuristic parser. - # Defaults to {:scheme => "http"}. - # - # @return [Addressable::URI] The parsed URI. - def self.heuristic_parse(uri, hints={}) - # If we were given nil, return nil. - return nil unless uri - # If a URI object is passed, just return itself. - return uri.dup if uri.kind_of?(self) - - # If a URI object of the Ruby standard library variety is passed, - # convert it to a string, then parse the string. - # We do the check this way because we don't want to accidentally - # cause a missing constant exception to be thrown. - if uri.class.name =~ /^URI\b/ - uri = uri.to_s - end - - unless uri.respond_to?(:to_str) - raise TypeError, "Can't convert #{uri.class} into String." - end - # Otherwise, convert to a String - uri = uri.to_str.dup.strip - hints = { - :scheme => "http" - }.merge(hints) - case uri - when /^http:\//i - uri.sub!(/^http:\/+/i, "http://") - when /^https:\//i - uri.sub!(/^https:\/+/i, "https://") - when /^feed:\/+http:\//i - uri.sub!(/^feed:\/+http:\/+/i, "feed:http://") - when /^feed:\//i - uri.sub!(/^feed:\/+/i, "feed://") - when %r[^file:/{4}]i - uri.sub!(%r[^file:/+]i, "file:////") - when %r[^file://localhost/]i - uri.sub!(%r[^file://localhost/+]i, "file:///") - when %r[^file:/+]i - uri.sub!(%r[^file:/+]i, "file:///") - when /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/ - uri.sub!(/^/, hints[:scheme] + "://") - when /\A\d+\..*:\d+\z/ - uri = "#{hints[:scheme]}://#{uri}" - end - match = uri.match(URIREGEX) - fragments = match.captures - authority = fragments[3] - if authority && authority.length > 0 - new_authority = authority.tr("\\", "/").gsub(" ", "%20") - # NOTE: We want offset 4, not 3! - offset = match.offset(4) - uri = uri.dup - uri[offset[0]...offset[1]] = new_authority - end - parsed = self.parse(uri) - if parsed.scheme =~ /^[^\/?#\.]+\.[^\/?#]+$/ - parsed = self.parse(hints[:scheme] + "://" + uri) - end - if parsed.path.include?(".") - if parsed.path[/\b@\b/] - parsed.scheme = "mailto" unless parsed.scheme - elsif new_host = parsed.path[/^([^\/]+\.[^\/]*)/, 1] - parsed.defer_validation do - new_path = parsed.path.sub( - Regexp.new("^" + Regexp.escape(new_host)), EMPTY_STR) - parsed.host = new_host - parsed.path = new_path - parsed.scheme = hints[:scheme] unless parsed.scheme - end - end - end - return parsed - end - - ## - # Converts a path to a file scheme URI. If the path supplied is - # relative, it will be returned as a relative URI. If the path supplied - # is actually a non-file URI, it will parse the URI as if it had been - # parsed with Addressable::URI.parse. Handles all of the - # various Microsoft-specific formats for specifying paths. - # - # @param [String, Addressable::URI, #to_str] path - # Typically a String path to a file or directory, but - # will return a sensible return value if an absolute URI is supplied - # instead. - # - # @return [Addressable::URI] - # The parsed file scheme URI or the original URI if some other URI - # scheme was provided. - # - # @example - # base = Addressable::URI.convert_path("/absolute/path/") - # uri = Addressable::URI.convert_path("relative/path") - # (base + uri).to_s - # #=> "file:///absolute/path/relative/path" - # - # Addressable::URI.convert_path( - # "c:\\windows\\My Documents 100%20\\foo.txt" - # ).to_s - # #=> "file:///c:/windows/My%20Documents%20100%20/foo.txt" - # - # Addressable::URI.convert_path("http://example.com/").to_s - # #=> "http://example.com/" - def self.convert_path(path) - # If we were given nil, return nil. - return nil unless path - # If a URI object is passed, just return itself. - return path if path.kind_of?(self) - unless path.respond_to?(:to_str) - raise TypeError, "Can't convert #{path.class} into String." - end - # Otherwise, convert to a String - path = path.to_str.strip - - path.sub!(/^file:\/?\/?/, EMPTY_STR) if path =~ /^file:\/?\/?/ - path = SLASH + path if path =~ /^([a-zA-Z])[\|:]/ - uri = self.parse(path) - - if uri.scheme == nil - # Adjust windows-style uris - uri.path.sub!(/^\/?([a-zA-Z])[\|:][\\\/]/) do - "/#{$1.downcase}:/" - end - uri.path.tr!("\\", SLASH) - if File.exist?(uri.path) && - File.stat(uri.path).directory? - uri.path.chomp!(SLASH) - uri.path = uri.path + '/' - end - - # If the path is absolute, set the scheme and host. - if uri.path.start_with?(SLASH) - uri.scheme = "file" - uri.host = EMPTY_STR - end - uri.normalize! - end - - return uri - end - - ## - # Joins several URIs together. - # - # @param [String, Addressable::URI, #to_str] *uris - # The URIs to join. - # - # @return [Addressable::URI] The joined URI. - # - # @example - # base = "http://example.com/" - # uri = Addressable::URI.parse("relative/path") - # Addressable::URI.join(base, uri) - # #=> # - def self.join(*uris) - uri_objects = uris.collect do |uri| - unless uri.respond_to?(:to_str) - raise TypeError, "Can't convert #{uri.class} into String." - end - uri.kind_of?(self) ? uri : self.parse(uri.to_str) - end - result = uri_objects.shift.dup - uri_objects.each do |uri| - result.join!(uri) - end - return result - end - - ## - # Tables used to optimize encoding operations in `self.encode_component` - # and `self.normalize_component` - SEQUENCE_ENCODING_TABLE = (0..255).map do |byte| - format("%02x", byte).freeze - end.freeze - - SEQUENCE_UPCASED_PERCENT_ENCODING_TABLE = (0..255).map do |byte| - format("%%%02X", byte).freeze - end.freeze - - ## - # Percent encodes a URI component. - # - # @param [String, #to_str] component The URI component to encode. - # - # @param [String, Regexp] character_class - # The characters which are not percent encoded. If a String - # is passed, the String must be formatted as a regular - # expression character class. (Do not include the surrounding square - # brackets.) For example, "b-zB-Z0-9" would cause - # everything but the letters 'b' through 'z' and the numbers '0' through - # '9' to be percent encoded. If a Regexp is passed, the - # value /[^b-zB-Z0-9]/ would have the same effect. A set of - # useful String values may be found in the - # Addressable::URI::CharacterClasses module. The default - # value is the reserved plus unreserved character classes specified in - # RFC 3986. - # - # @param [Regexp] upcase_encoded - # A string of characters that may already be percent encoded, and whose - # encodings should be upcased. This allows normalization of percent - # encodings for characters not included in the - # character_class. - # - # @return [String] The encoded component. - # - # @example - # Addressable::URI.encode_component("simple/example", "b-zB-Z0-9") - # => "simple%2Fex%61mple" - # Addressable::URI.encode_component("simple/example", /[^b-zB-Z0-9]/) - # => "simple%2Fex%61mple" - # Addressable::URI.encode_component( - # "simple/example", Addressable::URI::CharacterClasses::UNRESERVED - # ) - # => "simple%2Fexample" - def self.encode_component(component, character_class=CharacterClassesRegexps::RESERVED_AND_UNRESERVED, upcase_encoded='') - return nil if component.nil? - - begin - if component.kind_of?(Symbol) || - component.kind_of?(Numeric) || - component.kind_of?(TrueClass) || - component.kind_of?(FalseClass) - component = component.to_s - else - component = component.to_str - end - rescue TypeError, NoMethodError - raise TypeError, "Can't convert #{component.class} into String." - end if !component.is_a? String - - if ![String, Regexp].include?(character_class.class) - raise TypeError, - "Expected String or Regexp, got #{character_class.inspect}" - end - if character_class.kind_of?(String) - character_class = /[^#{character_class}]/ - end - # We can't perform regexps on invalid UTF sequences, but - # here we need to, so switch to ASCII. - component = component.dup - component.force_encoding(Encoding::ASCII_8BIT) - # Avoiding gsub! because there are edge cases with frozen strings - component = component.gsub(character_class) do |char| - SEQUENCE_UPCASED_PERCENT_ENCODING_TABLE[char.ord] - end - if upcase_encoded.length > 0 - upcase_encoded_chars = upcase_encoded.bytes.map do |byte| - SEQUENCE_ENCODING_TABLE[byte] - end - component = component.gsub(/%(#{upcase_encoded_chars.join('|')})/, - &:upcase) - end - - return component - end - - class << self - alias_method :escape_component, :encode_component - end - - ## - # Unencodes any percent encoded characters within a URI component. - # This method may be used for unencoding either components or full URIs, - # however, it is recommended to use the unencode_component - # alias when unencoding components. - # - # @param [String, Addressable::URI, #to_str] uri - # The URI or component to unencode. - # - # @param [Class] return_type - # The type of object to return. - # This value may only be set to String or - # Addressable::URI. All other values are invalid. Defaults - # to String. - # - # @param [String] leave_encoded - # A string of characters to leave encoded. If a percent encoded character - # in this list is encountered then it will remain percent encoded. - # - # @return [String, Addressable::URI] - # The unencoded component or URI. - # The return type is determined by the return_type - # parameter. - def self.unencode(uri, return_type=String, leave_encoded='') - return nil if uri.nil? - - begin - uri = uri.to_str - rescue NoMethodError, TypeError - raise TypeError, "Can't convert #{uri.class} into String." - end if !uri.is_a? String - if ![String, ::Addressable::URI].include?(return_type) - raise TypeError, - "Expected Class (String or Addressable::URI), " + - "got #{return_type.inspect}" - end - - result = uri.gsub(/%[0-9a-f]{2}/i) do |sequence| - c = sequence[1..3].to_i(16).chr - c.force_encoding(sequence.encoding) - leave_encoded.include?(c) ? sequence : c - end - - result.force_encoding(Encoding::UTF_8) - if return_type == String - return result - elsif return_type == ::Addressable::URI - return ::Addressable::URI.parse(result) - end - end - - class << self - alias_method :unescape, :unencode - alias_method :unencode_component, :unencode - alias_method :unescape_component, :unencode - end - - - ## - # Normalizes the encoding of a URI component. - # - # @param [String, #to_str] component The URI component to encode. - # - # @param [String, Regexp] character_class - # The characters which are not percent encoded. If a String - # is passed, the String must be formatted as a regular - # expression character class. (Do not include the surrounding square - # brackets.) For example, "b-zB-Z0-9" would cause - # everything but the letters 'b' through 'z' and the numbers '0' - # through '9' to be percent encoded. If a Regexp is passed, - # the value /[^b-zB-Z0-9]/ would have the same effect. A - # set of useful String values may be found in the - # Addressable::URI::CharacterClasses module. The default - # value is the reserved plus unreserved character classes specified in - # RFC 3986. - # - # @param [String] leave_encoded - # When character_class is a String then - # leave_encoded is a string of characters that should remain - # percent encoded while normalizing the component; if they appear percent - # encoded in the original component, then they will be upcased ("%2f" - # normalized to "%2F") but otherwise left alone. - # - # @return [String] The normalized component. - # - # @example - # Addressable::URI.normalize_component("simpl%65/%65xampl%65", "b-zB-Z") - # => "simple%2Fex%61mple" - # Addressable::URI.normalize_component( - # "simpl%65/%65xampl%65", /[^b-zB-Z]/ - # ) - # => "simple%2Fex%61mple" - # Addressable::URI.normalize_component( - # "simpl%65/%65xampl%65", - # Addressable::URI::CharacterClasses::UNRESERVED - # ) - # => "simple%2Fexample" - # Addressable::URI.normalize_component( - # "one%20two%2fthree%26four", - # "0-9a-zA-Z &/", - # "/" - # ) - # => "one two%2Fthree&four" - def self.normalize_component(component, character_class= - CharacterClassesRegexps::RESERVED_AND_UNRESERVED, - leave_encoded='') - return nil if component.nil? - - begin - component = component.to_str - rescue NoMethodError, TypeError - raise TypeError, "Can't convert #{component.class} into String." - end if !component.is_a? String - - if ![String, Regexp].include?(character_class.class) - raise TypeError, - "Expected String or Regexp, got #{character_class.inspect}" - end - if character_class.kind_of?(String) - leave_re = if leave_encoded.length > 0 - character_class = "#{character_class}%" unless character_class.include?('%') - - bytes = leave_encoded.bytes - leave_encoded_pattern = bytes.map { |b| SEQUENCE_ENCODING_TABLE[b] }.join('|') - "|%(?!#{leave_encoded_pattern}|#{leave_encoded_pattern.upcase})" - end - - character_class = if leave_re - /[^#{character_class}]#{leave_re}/ - else - /[^#{character_class}]/ - end - end - # We can't perform regexps on invalid UTF sequences, but - # here we need to, so switch to ASCII. - component = component.dup - component.force_encoding(Encoding::ASCII_8BIT) - unencoded = self.unencode_component(component, String, leave_encoded) - begin - encoded = self.encode_component( - unencoded.unicode_normalize(:nfc), - character_class, - leave_encoded - ) - rescue ArgumentError - encoded = self.encode_component(unencoded) - end - encoded.force_encoding(Encoding::UTF_8) - return encoded - end - - ## - # Percent encodes any special characters in the URI. - # - # @param [String, Addressable::URI, #to_str] uri - # The URI to encode. - # - # @param [Class] return_type - # The type of object to return. - # This value may only be set to String or - # Addressable::URI. All other values are invalid. Defaults - # to String. - # - # @return [String, Addressable::URI] - # The encoded URI. - # The return type is determined by the return_type - # parameter. - def self.encode(uri, return_type=String) - return nil if uri.nil? - - begin - uri = uri.to_str - rescue NoMethodError, TypeError - raise TypeError, "Can't convert #{uri.class} into String." - end if !uri.is_a? String - - if ![String, ::Addressable::URI].include?(return_type) - raise TypeError, - "Expected Class (String or Addressable::URI), " + - "got #{return_type.inspect}" - end - uri_object = uri.kind_of?(self) ? uri : self.parse(uri) - encoded_uri = Addressable::URI.new( - :scheme => self.encode_component(uri_object.scheme, - Addressable::URI::CharacterClassesRegexps::SCHEME), - :authority => self.encode_component(uri_object.authority, - Addressable::URI::CharacterClassesRegexps::AUTHORITY), - :path => self.encode_component(uri_object.path, - Addressable::URI::CharacterClassesRegexps::PATH), - :query => self.encode_component(uri_object.query, - Addressable::URI::CharacterClassesRegexps::QUERY), - :fragment => self.encode_component(uri_object.fragment, - Addressable::URI::CharacterClassesRegexps::FRAGMENT) - ) - if return_type == String - return encoded_uri.to_s - elsif return_type == ::Addressable::URI - return encoded_uri - end - end - - class << self - alias_method :escape, :encode - end - - ## - # Normalizes the encoding of a URI. Characters within a hostname are - # not percent encoded to allow for internationalized domain names. - # - # @param [String, Addressable::URI, #to_str] uri - # The URI to encode. - # - # @param [Class] return_type - # The type of object to return. - # This value may only be set to String or - # Addressable::URI. All other values are invalid. Defaults - # to String. - # - # @return [String, Addressable::URI] - # The encoded URI. - # The return type is determined by the return_type - # parameter. - def self.normalized_encode(uri, return_type=String) - begin - uri = uri.to_str - rescue NoMethodError, TypeError - raise TypeError, "Can't convert #{uri.class} into String." - end if !uri.is_a? String - - if ![String, ::Addressable::URI].include?(return_type) - raise TypeError, - "Expected Class (String or Addressable::URI), " + - "got #{return_type.inspect}" - end - uri_object = uri.kind_of?(self) ? uri : self.parse(uri) - components = { - :scheme => self.unencode_component(uri_object.scheme), - :user => self.unencode_component(uri_object.user), - :password => self.unencode_component(uri_object.password), - :host => self.unencode_component(uri_object.host), - :port => (uri_object.port.nil? ? nil : uri_object.port.to_s), - :path => self.unencode_component(uri_object.path), - :query => self.unencode_component(uri_object.query), - :fragment => self.unencode_component(uri_object.fragment) - } - components.each do |key, value| - if value != nil - begin - components[key] = value.to_str.unicode_normalize(:nfc) - rescue ArgumentError - # Likely a malformed UTF-8 character, skip unicode normalization - components[key] = value.to_str - end - end - end - encoded_uri = Addressable::URI.new( - :scheme => self.encode_component(components[:scheme], - Addressable::URI::CharacterClassesRegexps::SCHEME), - :user => self.encode_component(components[:user], - Addressable::URI::CharacterClassesRegexps::UNRESERVED), - :password => self.encode_component(components[:password], - Addressable::URI::CharacterClassesRegexps::UNRESERVED), - :host => components[:host], - :port => components[:port], - :path => self.encode_component(components[:path], - Addressable::URI::CharacterClassesRegexps::PATH), - :query => self.encode_component(components[:query], - Addressable::URI::CharacterClassesRegexps::QUERY), - :fragment => self.encode_component(components[:fragment], - Addressable::URI::CharacterClassesRegexps::FRAGMENT) - ) - if return_type == String - return encoded_uri.to_s - elsif return_type == ::Addressable::URI - return encoded_uri - end - end - - ## - # Encodes a set of key/value pairs according to the rules for the - # application/x-www-form-urlencoded MIME type. - # - # @param [#to_hash, #to_ary] form_values - # The form values to encode. - # - # @param [TrueClass, FalseClass] sort - # Sort the key/value pairs prior to encoding. - # Defaults to false. - # - # @return [String] - # The encoded value. - def self.form_encode(form_values, sort=false) - if form_values.respond_to?(:to_hash) - form_values = form_values.to_hash.to_a - elsif form_values.respond_to?(:to_ary) - form_values = form_values.to_ary - else - raise TypeError, "Can't convert #{form_values.class} into Array." - end - - form_values = form_values.inject([]) do |accu, (key, value)| - if value.kind_of?(Array) - value.each do |v| - accu << [key.to_s, v.to_s] - end - else - accu << [key.to_s, value.to_s] - end - accu - end - - if sort - # Useful for OAuth and optimizing caching systems - form_values = form_values.sort - end - escaped_form_values = form_values.map do |(key, value)| - # Line breaks are CRLF pairs - [ - self.encode_component( - key.gsub(/(\r\n|\n|\r)/, "\r\n"), - CharacterClassesRegexps::UNRESERVED - ).gsub("%20", "+"), - self.encode_component( - value.gsub(/(\r\n|\n|\r)/, "\r\n"), - CharacterClassesRegexps::UNRESERVED - ).gsub("%20", "+") - ] - end - return escaped_form_values.map do |(key, value)| - "#{key}=#{value}" - end.join("&") - end - - ## - # Decodes a String according to the rules for the - # application/x-www-form-urlencoded MIME type. - # - # @param [String, #to_str] encoded_value - # The form values to decode. - # - # @return [Array] - # The decoded values. - # This is not a Hash because of the possibility for - # duplicate keys. - def self.form_unencode(encoded_value) - if !encoded_value.respond_to?(:to_str) - raise TypeError, "Can't convert #{encoded_value.class} into String." - end - encoded_value = encoded_value.to_str - split_values = encoded_value.split("&").map do |pair| - pair.split("=", 2) - end - return split_values.map do |(key, value)| - [ - key ? self.unencode_component( - key.gsub("+", "%20")).gsub(/(\r\n|\n|\r)/, "\n") : nil, - value ? (self.unencode_component( - value.gsub("+", "%20")).gsub(/(\r\n|\n|\r)/, "\n")) : nil - ] - end - end - - ## - # Creates a new uri object from component parts. - # - # @option [String, #to_str] scheme The scheme component. - # @option [String, #to_str] user The user component. - # @option [String, #to_str] password The password component. - # @option [String, #to_str] userinfo - # The userinfo component. If this is supplied, the user and password - # components must be omitted. - # @option [String, #to_str] host The host component. - # @option [String, #to_str] port The port component. - # @option [String, #to_str] authority - # The authority component. If this is supplied, the user, password, - # userinfo, host, and port components must be omitted. - # @option [String, #to_str] path The path component. - # @option [String, #to_str] query The query component. - # @option [String, #to_str] fragment The fragment component. - # - # @return [Addressable::URI] The constructed URI object. - def initialize(options={}) - if options.has_key?(:authority) - if (options.keys & [:userinfo, :user, :password, :host, :port]).any? - raise ArgumentError, - "Cannot specify both an authority and any of the components " + - "within the authority." - end - end - if options.has_key?(:userinfo) - if (options.keys & [:user, :password]).any? - raise ArgumentError, - "Cannot specify both a userinfo and either the user or password." - end - end - - reset_ivs - - defer_validation do - # Bunch of crazy logic required because of the composite components - # like userinfo and authority. - self.scheme = options[:scheme] if options[:scheme] - self.user = options[:user] if options[:user] - self.password = options[:password] if options[:password] - self.userinfo = options[:userinfo] if options[:userinfo] - self.host = options[:host] if options[:host] - self.port = options[:port] if options[:port] - self.authority = options[:authority] if options[:authority] - self.path = options[:path] if options[:path] - self.query = options[:query] if options[:query] - self.query_values = options[:query_values] if options[:query_values] - self.fragment = options[:fragment] if options[:fragment] - end - - to_s # force path validation - end - - ## - # Freeze URI, initializing instance variables. - # - # @return [Addressable::URI] The frozen URI object. - def freeze - self.normalized_scheme - self.normalized_user - self.normalized_password - self.normalized_userinfo - self.normalized_host - self.normalized_port - self.normalized_authority - self.normalized_site - self.normalized_path - self.normalized_query - self.normalized_fragment - self.hash - super - end - - ## - # The scheme component for this URI. - # - # @return [String] The scheme component. - attr_reader :scheme - - ## - # The scheme component for this URI, normalized. - # - # @return [String] The scheme component, normalized. - def normalized_scheme - return nil unless self.scheme - if @normalized_scheme == NONE - @normalized_scheme = if self.scheme =~ /^\s*ssh\+svn\s*$/i - "svn+ssh".dup - else - Addressable::URI.normalize_component( - self.scheme.strip.downcase, - Addressable::URI::NormalizeCharacterClasses::SCHEME - ) - end - end - # All normalized values should be UTF-8 - force_utf8_encoding_if_needed(@normalized_scheme) - @normalized_scheme - end - - ## - # Sets the scheme component for this URI. - # - # @param [String, #to_str] new_scheme The new scheme component. - def scheme=(new_scheme) - if new_scheme && !new_scheme.respond_to?(:to_str) - raise TypeError, "Can't convert #{new_scheme.class} into String." - elsif new_scheme - new_scheme = new_scheme.to_str - end - if new_scheme && new_scheme !~ /\A[a-z][a-z0-9\.\+\-]*\z/i - raise InvalidURIError, "Invalid scheme format: '#{new_scheme}'" - end - @scheme = new_scheme - @scheme = nil if @scheme.to_s.strip.empty? - - # Reset dependent values - @normalized_scheme = NONE - remove_composite_values - - # Ensure we haven't created an invalid URI - validate() - end - - ## - # The user component for this URI. - # - # @return [String] The user component. - attr_reader :user - - ## - # The user component for this URI, normalized. - # - # @return [String] The user component, normalized. - def normalized_user - return nil unless self.user - return @normalized_user unless @normalized_user == NONE - @normalized_user = begin - if normalized_scheme =~ /https?/ && self.user.strip.empty? && - (!self.password || self.password.strip.empty?) - nil - else - Addressable::URI.normalize_component( - self.user.strip, - Addressable::URI::NormalizeCharacterClasses::UNRESERVED - ) - end - end - # All normalized values should be UTF-8 - force_utf8_encoding_if_needed(@normalized_user) - @normalized_user - end - - ## - # Sets the user component for this URI. - # - # @param [String, #to_str] new_user The new user component. - def user=(new_user) - if new_user && !new_user.respond_to?(:to_str) - raise TypeError, "Can't convert #{new_user.class} into String." - end - @user = new_user ? new_user.to_str : nil - - # You can't have a nil user with a non-nil password - if password != nil - @user = EMPTY_STR unless user - end - - # Reset dependent values - @userinfo = nil - @normalized_userinfo = NONE - @authority = nil - @normalized_user = NONE - remove_composite_values - - # Ensure we haven't created an invalid URI - validate() - end - - ## - # The password component for this URI. - # - # @return [String] The password component. - attr_reader :password - - ## - # The password component for this URI, normalized. - # - # @return [String] The password component, normalized. - def normalized_password - return nil unless self.password - return @normalized_password unless @normalized_password == NONE - @normalized_password = begin - if self.normalized_scheme =~ /https?/ && self.password.strip.empty? && - (!self.user || self.user.strip.empty?) - nil - else - Addressable::URI.normalize_component( - self.password.strip, - Addressable::URI::NormalizeCharacterClasses::UNRESERVED - ) - end - end - # All normalized values should be UTF-8 - force_utf8_encoding_if_needed(@normalized_password) - @normalized_password - end - - ## - # Sets the password component for this URI. - # - # @param [String, #to_str] new_password The new password component. - def password=(new_password) - if new_password && !new_password.respond_to?(:to_str) - raise TypeError, "Can't convert #{new_password.class} into String." - end - @password = new_password ? new_password.to_str : nil - - # You can't have a nil user with a non-nil password - if @password != nil - self.user = EMPTY_STR if user.nil? - end - - # Reset dependent values - @userinfo = nil - @normalized_userinfo = NONE - @authority = nil - @normalized_password = NONE - remove_composite_values - - # Ensure we haven't created an invalid URI - validate() - end - - ## - # The userinfo component for this URI. - # Combines the user and password components. - # - # @return [String] The userinfo component. - def userinfo - current_user = self.user - current_password = self.password - (current_user || current_password) && @userinfo ||= begin - if current_user && current_password - "#{current_user}:#{current_password}" - elsif current_user && !current_password - "#{current_user}" - end - end - end - - ## - # The userinfo component for this URI, normalized. - # - # @return [String] The userinfo component, normalized. - def normalized_userinfo - return nil unless self.userinfo - return @normalized_userinfo unless @normalized_userinfo == NONE - @normalized_userinfo = begin - current_user = self.normalized_user - current_password = self.normalized_password - if !current_user && !current_password - nil - elsif current_user && current_password - "#{current_user}:#{current_password}".dup - elsif current_user && !current_password - "#{current_user}".dup - end - end - # All normalized values should be UTF-8 - force_utf8_encoding_if_needed(@normalized_userinfo) - @normalized_userinfo - end - - ## - # Sets the userinfo component for this URI. - # - # @param [String, #to_str] new_userinfo The new userinfo component. - def userinfo=(new_userinfo) - if new_userinfo && !new_userinfo.respond_to?(:to_str) - raise TypeError, "Can't convert #{new_userinfo.class} into String." - end - new_user, new_password = if new_userinfo - [ - new_userinfo.to_str.strip[/^(.*):/, 1], - new_userinfo.to_str.strip[/:(.*)$/, 1] - ] - else - [nil, nil] - end - - # Password assigned first to ensure validity in case of nil - self.password = new_password - self.user = new_user - - # Reset dependent values - @authority = nil - remove_composite_values - - # Ensure we haven't created an invalid URI - validate() - end - - ## - # The host component for this URI. - # - # @return [String] The host component. - attr_reader :host - - ## - # The host component for this URI, normalized. - # - # @return [String] The host component, normalized. - def normalized_host - return nil unless self.host - - @normalized_host ||= begin - if !self.host.strip.empty? - result = ::Addressable::IDNA.to_ascii( - URI.unencode_component(self.host.strip.downcase) - ) - if result =~ /[^\.]\.$/ - # Single trailing dots are unnecessary. - result = result[0...-1] - end - result = Addressable::URI.normalize_component( - result, - NormalizeCharacterClasses::HOST - ) - result - else - EMPTY_STR.dup - end - end - # All normalized values should be UTF-8 - force_utf8_encoding_if_needed(@normalized_host) - @normalized_host - end - - ## - # Sets the host component for this URI. - # - # @param [String, #to_str] new_host The new host component. - def host=(new_host) - if new_host && !new_host.respond_to?(:to_str) - raise TypeError, "Can't convert #{new_host.class} into String." - end - @host = new_host ? new_host.to_str : nil - - # Reset dependent values - @authority = nil - @normalized_host = nil - remove_composite_values - - # Ensure we haven't created an invalid URI - validate() - end - - ## - # This method is same as URI::Generic#host except - # brackets for IPv6 (and 'IPvFuture') addresses are removed. - # - # @see Addressable::URI#host - # - # @return [String] The hostname for this URI. - def hostname - v = self.host - /\A\[(.*)\]\z/ =~ v ? $1 : v - end - - ## - # This method is same as URI::Generic#host= except - # the argument can be a bare IPv6 address (or 'IPvFuture'). - # - # @see Addressable::URI#host= - # - # @param [String, #to_str] new_hostname The new hostname for this URI. - def hostname=(new_hostname) - if new_hostname && - (new_hostname.respond_to?(:ipv4?) || new_hostname.respond_to?(:ipv6?)) - new_hostname = new_hostname.to_s - elsif new_hostname && !new_hostname.respond_to?(:to_str) - raise TypeError, "Can't convert #{new_hostname.class} into String." - end - v = new_hostname ? new_hostname.to_str : nil - v = "[#{v}]" if /\A\[.*\]\z/ !~ v && /:/ =~ v - self.host = v - end - - ## - # Returns the top-level domain for this host. - # - # @example - # Addressable::URI.parse("http://www.example.co.uk").tld # => "co.uk" - def tld - PublicSuffix.parse(self.host, ignore_private: true).tld - end - - ## - # Sets the top-level domain for this URI. - # - # @param [String, #to_str] new_tld The new top-level domain. - def tld=(new_tld) - replaced_tld = host.sub(/#{tld}\z/, new_tld) - self.host = PublicSuffix::Domain.new(replaced_tld).to_s - end - - ## - # Returns the public suffix domain for this host. - # - # @example - # Addressable::URI.parse("http://www.example.co.uk").domain # => "example.co.uk" - def domain - PublicSuffix.domain(self.host, ignore_private: true) - end - - ## - # The authority component for this URI. - # Combines the user, password, host, and port components. - # - # @return [String] The authority component. - def authority - self.host && @authority ||= begin - authority = String.new - if self.userinfo != nil - authority << "#{self.userinfo}@" - end - authority << self.host - if self.port != nil - authority << ":#{self.port}" - end - authority - end - end - - ## - # The authority component for this URI, normalized. - # - # @return [String] The authority component, normalized. - def normalized_authority - return nil unless self.authority - @normalized_authority ||= begin - authority = String.new - if self.normalized_userinfo != nil - authority << "#{self.normalized_userinfo}@" - end - authority << self.normalized_host - if self.normalized_port != nil - authority << ":#{self.normalized_port}" - end - authority - end - # All normalized values should be UTF-8 - force_utf8_encoding_if_needed(@normalized_authority) - @normalized_authority - end - - ## - # Sets the authority component for this URI. - # - # @param [String, #to_str] new_authority The new authority component. - def authority=(new_authority) - if new_authority - if !new_authority.respond_to?(:to_str) - raise TypeError, "Can't convert #{new_authority.class} into String." - end - new_authority = new_authority.to_str - new_userinfo = new_authority[/^([^\[\]]*)@/, 1] - if new_userinfo - new_user = new_userinfo.strip[/^([^:]*):?/, 1] - new_password = new_userinfo.strip[/:(.*)$/, 1] - end - new_host = new_authority.sub( - /^([^\[\]]*)@/, EMPTY_STR - ).sub( - /:([^:@\[\]]*?)$/, EMPTY_STR - ) - new_port = - new_authority[/:([^:@\[\]]*?)$/, 1] - end - - # Password assigned first to ensure validity in case of nil - self.password = new_password - self.user = new_user - self.host = new_host - self.port = new_port - - # Reset dependent values - @userinfo = nil - @normalized_userinfo = NONE - remove_composite_values - - # Ensure we haven't created an invalid URI - validate() - end - - ## - # The origin for this URI, serialized to ASCII, as per - # RFC 6454, section 6.2. - # - # @return [String] The serialized origin. - def origin - if self.scheme && self.authority - if self.normalized_port - "#{self.normalized_scheme}://#{self.normalized_host}" + - ":#{self.normalized_port}" - else - "#{self.normalized_scheme}://#{self.normalized_host}" - end - else - "null" - end - end - - ## - # Sets the origin for this URI, serialized to ASCII, as per - # RFC 6454, section 6.2. This assignment will reset the `userinfo` - # component. - # - # @param [String, #to_str] new_origin The new origin component. - def origin=(new_origin) - if new_origin - if !new_origin.respond_to?(:to_str) - raise TypeError, "Can't convert #{new_origin.class} into String." - end - new_origin = new_origin.to_str - new_scheme = new_origin[/^([^:\/?#]+):\/\//, 1] - unless new_scheme - raise InvalidURIError, 'An origin cannot omit the scheme.' - end - new_host = new_origin[/:\/\/([^\/?#:]+)/, 1] - unless new_host - raise InvalidURIError, 'An origin cannot omit the host.' - end - new_port = new_origin[/:([^:@\[\]\/]*?)$/, 1] - end - - self.scheme = new_scheme - self.host = new_host - self.port = new_port - self.userinfo = nil - - # Reset dependent values - @userinfo = nil - @normalized_userinfo = NONE - @authority = nil - @normalized_authority = nil - remove_composite_values - - # Ensure we haven't created an invalid URI - validate() - end - - # Returns an array of known ip-based schemes. These schemes typically - # use a similar URI form: - # //:@:/ - def self.ip_based_schemes - return self.port_mapping.keys - end - - # Returns a hash of common IP-based schemes and their default port - # numbers. Adding new schemes to this hash, as necessary, will allow - # for better URI normalization. - def self.port_mapping - PORT_MAPPING - end - - ## - # The port component for this URI. - # This is the port number actually given in the URI. This does not - # infer port numbers from default values. - # - # @return [Integer] The port component. - attr_reader :port - - ## - # The port component for this URI, normalized. - # - # @return [Integer] The port component, normalized. - def normalized_port - return nil unless self.port - return @normalized_port unless @normalized_port == NONE - @normalized_port = begin - if URI.port_mapping[self.normalized_scheme] == self.port - nil - else - self.port - end - end - end - - ## - # Sets the port component for this URI. - # - # @param [String, Integer, #to_s] new_port The new port component. - def port=(new_port) - if new_port != nil && new_port.respond_to?(:to_str) - new_port = Addressable::URI.unencode_component(new_port.to_str) - end - - if new_port.respond_to?(:valid_encoding?) && !new_port.valid_encoding? - raise InvalidURIError, "Invalid encoding in port" - end - - if new_port != nil && !(new_port.to_s =~ /^\d+$/) - raise InvalidURIError, - "Invalid port number: #{new_port.inspect}" - end - - @port = new_port.to_s.to_i - @port = nil if @port == 0 - - # Reset dependent values - @authority = nil - @normalized_port = NONE - remove_composite_values - - # Ensure we haven't created an invalid URI - validate() - end - - ## - # The inferred port component for this URI. - # This method will normalize to the default port for the URI's scheme if - # the port isn't explicitly specified in the URI. - # - # @return [Integer] The inferred port component. - def inferred_port - if self.port.to_i == 0 - self.default_port - else - self.port.to_i - end - end - - ## - # The default port for this URI's scheme. - # This method will always returns the default port for the URI's scheme - # regardless of the presence of an explicit port in the URI. - # - # @return [Integer] The default port. - def default_port - URI.port_mapping[self.scheme.strip.downcase] if self.scheme - end - - ## - # The combination of components that represent a site. - # Combines the scheme, user, password, host, and port components. - # Primarily useful for HTTP and HTTPS. - # - # For example, "http://example.com/path?query" would have a - # site value of "http://example.com". - # - # @return [String] The components that identify a site. - def site - (self.scheme || self.authority) && @site ||= begin - site_string = "".dup - site_string << "#{self.scheme}:" if self.scheme != nil - site_string << "//#{self.authority}" if self.authority != nil - site_string - end - end - - ## - # The normalized combination of components that represent a site. - # Combines the scheme, user, password, host, and port components. - # Primarily useful for HTTP and HTTPS. - # - # For example, "http://example.com/path?query" would have a - # site value of "http://example.com". - # - # @return [String] The normalized components that identify a site. - def normalized_site - return nil unless self.site - @normalized_site ||= begin - site_string = "".dup - if self.normalized_scheme != nil - site_string << "#{self.normalized_scheme}:" - end - if self.normalized_authority != nil - site_string << "//#{self.normalized_authority}" - end - site_string - end - # All normalized values should be UTF-8 - force_utf8_encoding_if_needed(@normalized_site) - @normalized_site - end - - ## - # Sets the site value for this URI. - # - # @param [String, #to_str] new_site The new site value. - def site=(new_site) - if new_site - if !new_site.respond_to?(:to_str) - raise TypeError, "Can't convert #{new_site.class} into String." - end - new_site = new_site.to_str - # These two regular expressions derived from the primary parsing - # expression - self.scheme = new_site[/^(?:([^:\/?#]+):)?(?:\/\/(?:[^\/?#]*))?$/, 1] - self.authority = new_site[ - /^(?:(?:[^:\/?#]+):)?(?:\/\/([^\/?#]*))?$/, 1 - ] - else - self.scheme = nil - self.authority = nil - end - end - - ## - # The path component for this URI. - # - # @return [String] The path component. - attr_reader :path - - NORMPATH = /^(?!\/)[^\/:]*:.*$/ - ## - # The path component for this URI, normalized. - # - # @return [String] The path component, normalized. - def normalized_path - @normalized_path ||= begin - path = self.path.to_s - if self.scheme == nil && path =~ NORMPATH - # Relative paths with colons in the first segment are ambiguous. - path = path.sub(":", "%2F") - end - # String#split(delimeter, -1) uses the more strict splitting behavior - # found by default in Python. - result = path.strip.split(SLASH, -1).map do |segment| - Addressable::URI.normalize_component( - segment, - Addressable::URI::NormalizeCharacterClasses::PCHAR - ) - end.join(SLASH) - - result = URI.normalize_path(result) - if result.empty? && - ["http", "https", "ftp", "tftp"].include?(self.normalized_scheme) - result = SLASH.dup - end - result - end - # All normalized values should be UTF-8 - force_utf8_encoding_if_needed(@normalized_path) - @normalized_path - end - - ## - # Sets the path component for this URI. - # - # @param [String, #to_str] new_path The new path component. - def path=(new_path) - if new_path && !new_path.respond_to?(:to_str) - raise TypeError, "Can't convert #{new_path.class} into String." - end - @path = (new_path || EMPTY_STR).to_str - if !@path.empty? && @path[0..0] != SLASH && host != nil - @path = "/#{@path}" - end - - # Reset dependent values - @normalized_path = nil - remove_composite_values - - # Ensure we haven't created an invalid URI - validate() - end - - ## - # The basename, if any, of the file in the path component. - # - # @return [String] The path's basename. - def basename - # Path cannot be nil - return File.basename(self.path).sub(/;[^\/]*$/, EMPTY_STR) - end - - ## - # The extname, if any, of the file in the path component. - # Empty string if there is no extension. - # - # @return [String] The path's extname. - def extname - return nil unless self.path - return File.extname(self.basename) - end - - ## - # The query component for this URI. - # - # @return [String] The query component. - attr_reader :query - - ## - # The query component for this URI, normalized. - # - # @return [String] The query component, normalized. - def normalized_query(*flags) - return nil unless self.query - return @normalized_query unless @normalized_query == NONE - @normalized_query = begin - modified_query_class = Addressable::URI::CharacterClasses::QUERY.dup - # Make sure possible key-value pair delimiters are escaped. - modified_query_class.sub!("\\&", "").sub!("\\;", "") - pairs = (query || "").split("&", -1) - pairs.delete_if(&:empty?).uniq! if flags.include?(:compacted) - pairs.sort! if flags.include?(:sorted) - component = pairs.map do |pair| - Addressable::URI.normalize_component( - pair, - Addressable::URI::NormalizeCharacterClasses::QUERY, - "+" - ) - end.join("&") - component == "" ? nil : component - end - # All normalized values should be UTF-8 - force_utf8_encoding_if_needed(@normalized_query) - @normalized_query - end - - ## - # Sets the query component for this URI. - # - # @param [String, #to_str] new_query The new query component. - def query=(new_query) - if new_query && !new_query.respond_to?(:to_str) - raise TypeError, "Can't convert #{new_query.class} into String." - end - @query = new_query ? new_query.to_str : nil - - # Reset dependent values - @normalized_query = NONE - remove_composite_values - end - - ## - # Converts the query component to a Hash value. - # - # @param [Class] return_type The return type desired. Value must be either - # `Hash` or `Array`. - # - # @return [Hash, Array, nil] The query string parsed as a Hash or Array - # or nil if the query string is blank. - # - # @example - # Addressable::URI.parse("?one=1&two=2&three=3").query_values - # #=> {"one" => "1", "two" => "2", "three" => "3"} - # Addressable::URI.parse("?one=two&one=three").query_values(Array) - # #=> [["one", "two"], ["one", "three"]] - # Addressable::URI.parse("?one=two&one=three").query_values(Hash) - # #=> {"one" => "three"} - # Addressable::URI.parse("?").query_values - # #=> {} - # Addressable::URI.parse("").query_values - # #=> nil - def query_values(return_type=Hash) - empty_accumulator = Array == return_type ? [] : {} - if return_type != Hash && return_type != Array - raise ArgumentError, "Invalid return type. Must be Hash or Array." - end - return nil if self.query == nil - split_query = self.query.split("&").map do |pair| - pair.split("=", 2) if pair && !pair.empty? - end.compact - return split_query.inject(empty_accumulator.dup) do |accu, pair| - # I'd rather use key/value identifiers instead of array lookups, - # but in this case I really want to maintain the exact pair structure, - # so it's best to make all changes in-place. - pair[0] = URI.unencode_component(pair[0]) - if pair[1].respond_to?(:to_str) - value = pair[1].to_str - # I loathe the fact that I have to do this. Stupid HTML 4.01. - # Treating '+' as a space was just an unbelievably bad idea. - # There was nothing wrong with '%20'! - # If it ain't broke, don't fix it! - value = value.tr("+", " ") if ["http", "https", nil].include?(scheme) - pair[1] = URI.unencode_component(value) - end - if return_type == Hash - accu[pair[0]] = pair[1] - else - accu << pair - end - accu - end - end - - ## - # Sets the query component for this URI from a Hash object. - # An empty Hash or Array will result in an empty query string. - # - # @param [Hash, #to_hash, Array] new_query_values The new query values. - # - # @example - # uri.query_values = {:a => "a", :b => ["c", "d", "e"]} - # uri.query - # # => "a=a&b=c&b=d&b=e" - # uri.query_values = [['a', 'a'], ['b', 'c'], ['b', 'd'], ['b', 'e']] - # uri.query - # # => "a=a&b=c&b=d&b=e" - # uri.query_values = [['a', 'a'], ['b', ['c', 'd', 'e']]] - # uri.query - # # => "a=a&b=c&b=d&b=e" - # uri.query_values = [['flag'], ['key', 'value']] - # uri.query - # # => "flag&key=value" - def query_values=(new_query_values) - if new_query_values == nil - self.query = nil - return nil - end - - if !new_query_values.is_a?(Array) - if !new_query_values.respond_to?(:to_hash) - raise TypeError, - "Can't convert #{new_query_values.class} into Hash." - end - new_query_values = new_query_values.to_hash - new_query_values = new_query_values.map do |key, value| - key = key.to_s if key.kind_of?(Symbol) - [key, value] - end - # Useful default for OAuth and caching. - # Only to be used for non-Array inputs. Arrays should preserve order. - new_query_values.sort! - end - - # new_query_values have form [['key1', 'value1'], ['key2', 'value2']] - buffer = "".dup - new_query_values.each do |key, value| - encoded_key = URI.encode_component( - key, CharacterClassesRegexps::UNRESERVED - ) - if value == nil - buffer << "#{encoded_key}&" - elsif value.kind_of?(Array) - value.each do |sub_value| - encoded_value = URI.encode_component( - sub_value, CharacterClassesRegexps::UNRESERVED - ) - buffer << "#{encoded_key}=#{encoded_value}&" - end - else - encoded_value = URI.encode_component( - value, CharacterClassesRegexps::UNRESERVED - ) - buffer << "#{encoded_key}=#{encoded_value}&" - end - end - self.query = buffer.chop - end - - ## - # The HTTP request URI for this URI. This is the path and the - # query string. - # - # @return [String] The request URI required for an HTTP request. - def request_uri - return nil if self.absolute? && self.scheme !~ /^https?$/i - return ( - (!self.path.empty? ? self.path : SLASH) + - (self.query ? "?#{self.query}" : EMPTY_STR) - ) - end - - ## - # Sets the HTTP request URI for this URI. - # - # @param [String, #to_str] new_request_uri The new HTTP request URI. - def request_uri=(new_request_uri) - if !new_request_uri.respond_to?(:to_str) - raise TypeError, "Can't convert #{new_request_uri.class} into String." - end - if self.absolute? && self.scheme !~ /^https?$/i - raise InvalidURIError, - "Cannot set an HTTP request URI for a non-HTTP URI." - end - new_request_uri = new_request_uri.to_str - path_component = new_request_uri[/^([^\?]*)\??(?:.*)$/, 1] - query_component = new_request_uri[/^(?:[^\?]*)\?(.*)$/, 1] - path_component = path_component.to_s - path_component = (!path_component.empty? ? path_component : SLASH) - self.path = path_component - self.query = query_component - - # Reset dependent values - remove_composite_values - end - - ## - # The fragment component for this URI. - # - # @return [String] The fragment component. - attr_reader :fragment - - ## - # The fragment component for this URI, normalized. - # - # @return [String] The fragment component, normalized. - def normalized_fragment - return nil unless self.fragment - return @normalized_fragment unless @normalized_fragment == NONE - @normalized_fragment = begin - component = Addressable::URI.normalize_component( - self.fragment, - Addressable::URI::NormalizeCharacterClasses::FRAGMENT - ) - component == "" ? nil : component - end - # All normalized values should be UTF-8 - force_utf8_encoding_if_needed(@normalized_fragment) - @normalized_fragment - end - - ## - # Sets the fragment component for this URI. - # - # @param [String, #to_str] new_fragment The new fragment component. - def fragment=(new_fragment) - if new_fragment && !new_fragment.respond_to?(:to_str) - raise TypeError, "Can't convert #{new_fragment.class} into String." - end - @fragment = new_fragment ? new_fragment.to_str : nil - - # Reset dependent values - @normalized_fragment = NONE - remove_composite_values - - # Ensure we haven't created an invalid URI - validate() - end - - ## - # Determines if the scheme indicates an IP-based protocol. - # - # @return [TrueClass, FalseClass] - # true if the scheme indicates an IP-based protocol. - # false otherwise. - def ip_based? - if self.scheme - return URI.ip_based_schemes.include?( - self.scheme.strip.downcase) - end - return false - end - - ## - # Determines if the URI is relative. - # - # @return [TrueClass, FalseClass] - # true if the URI is relative. false - # otherwise. - def relative? - return self.scheme.nil? - end - - ## - # Determines if the URI is absolute. - # - # @return [TrueClass, FalseClass] - # true if the URI is absolute. false - # otherwise. - def absolute? - return !relative? - end - - ## - # Joins two URIs together. - # - # @param [String, Addressable::URI, #to_str] The URI to join with. - # - # @return [Addressable::URI] The joined URI. - def join(uri) - if !uri.respond_to?(:to_str) - raise TypeError, "Can't convert #{uri.class} into String." - end - if !uri.kind_of?(URI) - # Otherwise, convert to a String, then parse. - uri = URI.parse(uri.to_str) - end - if uri.to_s.empty? - return self.dup - end - - joined_scheme = nil - joined_user = nil - joined_password = nil - joined_host = nil - joined_port = nil - joined_path = nil - joined_query = nil - joined_fragment = nil - - # Section 5.2.2 of RFC 3986 - if uri.scheme != nil - joined_scheme = uri.scheme - joined_user = uri.user - joined_password = uri.password - joined_host = uri.host - joined_port = uri.port - joined_path = URI.normalize_path(uri.path) - joined_query = uri.query - else - if uri.authority != nil - joined_user = uri.user - joined_password = uri.password - joined_host = uri.host - joined_port = uri.port - joined_path = URI.normalize_path(uri.path) - joined_query = uri.query - else - if uri.path == nil || uri.path.empty? - joined_path = self.path - if uri.query != nil - joined_query = uri.query - else - joined_query = self.query - end - else - if uri.path[0..0] == SLASH - joined_path = URI.normalize_path(uri.path) - else - base_path = self.path.dup - base_path = EMPTY_STR if base_path == nil - base_path = URI.normalize_path(base_path) - - # Section 5.2.3 of RFC 3986 - # - # Removes the right-most path segment from the base path. - if base_path.include?(SLASH) - base_path.sub!(/\/[^\/]+$/, SLASH) - else - base_path = EMPTY_STR - end - - # If the base path is empty and an authority segment has been - # defined, use a base path of SLASH - if base_path.empty? && self.authority != nil - base_path = SLASH - end - - joined_path = URI.normalize_path(base_path + uri.path) - end - joined_query = uri.query - end - joined_user = self.user - joined_password = self.password - joined_host = self.host - joined_port = self.port - end - joined_scheme = self.scheme - end - joined_fragment = uri.fragment - - return self.class.new( - :scheme => joined_scheme, - :user => joined_user, - :password => joined_password, - :host => joined_host, - :port => joined_port, - :path => joined_path, - :query => joined_query, - :fragment => joined_fragment - ) - end - alias_method :+, :join - - ## - # Destructive form of join. - # - # @param [String, Addressable::URI, #to_str] The URI to join with. - # - # @return [Addressable::URI] The joined URI. - # - # @see Addressable::URI#join - def join!(uri) - replace_self(self.join(uri)) - end - - ## - # Merges a URI with a Hash of components. - # This method has different behavior from join. Any - # components present in the hash parameter will override the - # original components. The path component is not treated specially. - # - # @param [Hash, Addressable::URI, #to_hash] The components to merge with. - # - # @return [Addressable::URI] The merged URI. - # - # @see Hash#merge - def merge(hash) - unless hash.respond_to?(:to_hash) - raise TypeError, "Can't convert #{hash.class} into Hash." - end - hash = hash.to_hash - - if hash.has_key?(:authority) - if (hash.keys & [:userinfo, :user, :password, :host, :port]).any? - raise ArgumentError, - "Cannot specify both an authority and any of the components " + - "within the authority." - end - end - if hash.has_key?(:userinfo) - if (hash.keys & [:user, :password]).any? - raise ArgumentError, - "Cannot specify both a userinfo and either the user or password." - end - end - - uri = self.class.new - uri.defer_validation do - # Bunch of crazy logic required because of the composite components - # like userinfo and authority. - uri.scheme = - hash.has_key?(:scheme) ? hash[:scheme] : self.scheme - if hash.has_key?(:authority) - uri.authority = - hash.has_key?(:authority) ? hash[:authority] : self.authority - end - if hash.has_key?(:userinfo) - uri.userinfo = - hash.has_key?(:userinfo) ? hash[:userinfo] : self.userinfo - end - if !hash.has_key?(:userinfo) && !hash.has_key?(:authority) - uri.user = - hash.has_key?(:user) ? hash[:user] : self.user - uri.password = - hash.has_key?(:password) ? hash[:password] : self.password - end - if !hash.has_key?(:authority) - uri.host = - hash.has_key?(:host) ? hash[:host] : self.host - uri.port = - hash.has_key?(:port) ? hash[:port] : self.port - end - uri.path = - hash.has_key?(:path) ? hash[:path] : self.path - uri.query = - hash.has_key?(:query) ? hash[:query] : self.query - uri.fragment = - hash.has_key?(:fragment) ? hash[:fragment] : self.fragment - end - - return uri - end - - ## - # Destructive form of merge. - # - # @param [Hash, Addressable::URI, #to_hash] The components to merge with. - # - # @return [Addressable::URI] The merged URI. - # - # @see Addressable::URI#merge - def merge!(uri) - replace_self(self.merge(uri)) - end - - ## - # Returns the shortest normalized relative form of this URI that uses the - # supplied URI as a base for resolution. Returns an absolute URI if - # necessary. This is effectively the opposite of route_to. - # - # @param [String, Addressable::URI, #to_str] uri The URI to route from. - # - # @return [Addressable::URI] - # The normalized relative URI that is equivalent to the original URI. - def route_from(uri) - uri = URI.parse(uri).normalize - normalized_self = self.normalize - if normalized_self.relative? - raise ArgumentError, "Expected absolute URI, got: #{self.to_s}" - end - if uri.relative? - raise ArgumentError, "Expected absolute URI, got: #{uri.to_s}" - end - if normalized_self == uri - return Addressable::URI.parse("##{normalized_self.fragment}") - end - components = normalized_self.to_hash - if normalized_self.scheme == uri.scheme - components[:scheme] = nil - if normalized_self.authority == uri.authority - components[:user] = nil - components[:password] = nil - components[:host] = nil - components[:port] = nil - if normalized_self.path == uri.path - components[:path] = nil - if normalized_self.query == uri.query - components[:query] = nil - end - else - if uri.path != SLASH and components[:path] - self_splitted_path = split_path(components[:path]) - uri_splitted_path = split_path(uri.path) - self_dir = self_splitted_path.shift - uri_dir = uri_splitted_path.shift - while !self_splitted_path.empty? && !uri_splitted_path.empty? and self_dir == uri_dir - self_dir = self_splitted_path.shift - uri_dir = uri_splitted_path.shift - end - components[:path] = (uri_splitted_path.fill('..') + [self_dir] + self_splitted_path).join(SLASH) - end - end - end - end - # Avoid network-path references. - if components[:host] != nil - components[:scheme] = normalized_self.scheme - end - return Addressable::URI.new( - :scheme => components[:scheme], - :user => components[:user], - :password => components[:password], - :host => components[:host], - :port => components[:port], - :path => components[:path], - :query => components[:query], - :fragment => components[:fragment] - ) - end - - ## - # Returns the shortest normalized relative form of the supplied URI that - # uses this URI as a base for resolution. Returns an absolute URI if - # necessary. This is effectively the opposite of route_from. - # - # @param [String, Addressable::URI, #to_str] uri The URI to route to. - # - # @return [Addressable::URI] - # The normalized relative URI that is equivalent to the supplied URI. - def route_to(uri) - return URI.parse(uri).route_from(self) - end - - ## - # Returns a normalized URI object. - # - # NOTE: This method does not attempt to fully conform to specifications. - # It exists largely to correct other people's failures to read the - # specifications, and also to deal with caching issues since several - # different URIs may represent the same resource and should not be - # cached multiple times. - # - # @return [Addressable::URI] The normalized URI. - def normalize - # This is a special exception for the frequently misused feed - # URI scheme. - if normalized_scheme == "feed" - if self.to_s =~ /^feed:\/*http:\/*/ - return URI.parse( - self.to_s[/^feed:\/*(http:\/*.*)/, 1] - ).normalize - end - end - - return self.class.new( - :scheme => normalized_scheme, - :authority => normalized_authority, - :path => normalized_path, - :query => normalized_query, - :fragment => normalized_fragment - ) - end - - ## - # Destructively normalizes this URI object. - # - # @return [Addressable::URI] The normalized URI. - # - # @see Addressable::URI#normalize - def normalize! - replace_self(self.normalize) - end - - ## - # Creates a URI suitable for display to users. If semantic attacks are - # likely, the application should try to detect these and warn the user. - # See RFC 3986, - # section 7.6 for more information. - # - # @return [Addressable::URI] A URI suitable for display purposes. - def display_uri - display_uri = self.normalize - display_uri.host = ::Addressable::IDNA.to_unicode(display_uri.host) - return display_uri - end - - ## - # Returns true if the URI objects are equal. This method - # normalizes both URIs before doing the comparison, and allows comparison - # against Strings. - # - # @param [Object] uri The URI to compare. - # - # @return [TrueClass, FalseClass] - # true if the URIs are equivalent, false - # otherwise. - def ===(uri) - if uri.respond_to?(:normalize) - uri_string = uri.normalize.to_s - else - begin - uri_string = ::Addressable::URI.parse(uri).normalize.to_s - rescue InvalidURIError, TypeError - return false - end - end - return self.normalize.to_s == uri_string - end - - ## - # Returns true if the URI objects are equal. This method - # normalizes both URIs before doing the comparison. - # - # @param [Object] uri The URI to compare. - # - # @return [TrueClass, FalseClass] - # true if the URIs are equivalent, false - # otherwise. - def ==(uri) - return false unless uri.kind_of?(URI) - return self.normalize.to_s == uri.normalize.to_s - end - - ## - # Returns true if the URI objects are equal. This method - # does NOT normalize either URI before doing the comparison. - # - # @param [Object] uri The URI to compare. - # - # @return [TrueClass, FalseClass] - # true if the URIs are equivalent, false - # otherwise. - def eql?(uri) - return false unless uri.kind_of?(URI) - return self.to_s == uri.to_s - end - - ## - # A hash value that will make a URI equivalent to its normalized - # form. - # - # @return [Integer] A hash of the URI. - def hash - @hash ||= self.to_s.hash * -1 - end - - ## - # Clones the URI object. - # - # @return [Addressable::URI] The cloned URI. - def dup - duplicated_uri = self.class.new( - :scheme => self.scheme ? self.scheme.dup : nil, - :user => self.user ? self.user.dup : nil, - :password => self.password ? self.password.dup : nil, - :host => self.host ? self.host.dup : nil, - :port => self.port, - :path => self.path ? self.path.dup : nil, - :query => self.query ? self.query.dup : nil, - :fragment => self.fragment ? self.fragment.dup : nil - ) - return duplicated_uri - end - - ## - # Omits components from a URI. - # - # @param [Symbol] *components The components to be omitted. - # - # @return [Addressable::URI] The URI with components omitted. - # - # @example - # uri = Addressable::URI.parse("http://example.com/path?query") - # #=> # - # uri.omit(:scheme, :authority) - # #=> # - def omit(*components) - invalid_components = components - [ - :scheme, :user, :password, :userinfo, :host, :port, :authority, - :path, :query, :fragment - ] - unless invalid_components.empty? - raise ArgumentError, - "Invalid component names: #{invalid_components.inspect}." - end - duplicated_uri = self.dup - duplicated_uri.defer_validation do - components.each do |component| - duplicated_uri.send((component.to_s + "=").to_sym, nil) - end - duplicated_uri.user = duplicated_uri.normalized_user - end - duplicated_uri - end - - ## - # Destructive form of omit. - # - # @param [Symbol] *components The components to be omitted. - # - # @return [Addressable::URI] The URI with components omitted. - # - # @see Addressable::URI#omit - def omit!(*components) - replace_self(self.omit(*components)) - end - - ## - # Determines if the URI is an empty string. - # - # @return [TrueClass, FalseClass] - # Returns true if empty, false otherwise. - def empty? - return self.to_s.empty? - end - - ## - # Converts the URI to a String. - # - # @return [String] The URI's String representation. - def to_s - if self.scheme == nil && self.path != nil && !self.path.empty? && - self.path =~ NORMPATH - raise InvalidURIError, - "Cannot assemble URI string with ambiguous path: '#{self.path}'" - end - @uri_string ||= begin - uri_string = String.new - uri_string << "#{self.scheme}:" if self.scheme != nil - uri_string << "//#{self.authority}" if self.authority != nil - uri_string << self.path.to_s - uri_string << "?#{self.query}" if self.query != nil - uri_string << "##{self.fragment}" if self.fragment != nil - uri_string.force_encoding(Encoding::UTF_8) - uri_string - end - end - - ## - # URI's are glorified Strings. Allow implicit conversion. - alias_method :to_str, :to_s - - ## - # Returns a Hash of the URI components. - # - # @return [Hash] The URI as a Hash of components. - def to_hash - return { - :scheme => self.scheme, - :user => self.user, - :password => self.password, - :host => self.host, - :port => self.port, - :path => self.path, - :query => self.query, - :fragment => self.fragment - } - end - - ## - # Returns a String representation of the URI object's state. - # - # @return [String] The URI object's state, as a String. - def inspect - sprintf("#<%s:%#0x URI:%s>", URI.to_s, self.object_id, self.to_s) - end - - ## - # This method allows you to make several changes to a URI simultaneously, - # which separately would cause validation errors, but in conjunction, - # are valid. The URI will be revalidated as soon as the entire block has - # been executed. - # - # @param [Proc] block - # A set of operations to perform on a given URI. - def defer_validation - raise LocalJumpError, "No block given." unless block_given? - @validation_deferred = true - yield - @validation_deferred = false - validate - ensure - @validation_deferred = false - end - - def encode_with(coder) - instance_variables.each do |ivar| - value = instance_variable_get(ivar) - if value != NONE - key = ivar.to_s.slice(1..-1) - coder[key] = value - end - end - nil - end - - def init_with(coder) - reset_ivs - coder.map.each do |key, value| - instance_variable_set("@#{key}", value) - end - nil - end - - protected - SELF_REF = '.' - PARENT = '..' - - RULE_2A = /\/\.\/|\/\.$/ - RULE_2B_2C = /\/([^\/]*)\/\.\.\/|\/([^\/]*)\/\.\.$/ - RULE_2D = /^\.\.?\/?/ - RULE_PREFIXED_PARENT = /^\/\.\.?\/|^(\/\.\.?)+\/?$/ - - ## - # Resolves paths to their simplest form. - # - # @param [String] path The path to normalize. - # - # @return [String] The normalized path. - def self.normalize_path(path) - # Section 5.2.4 of RFC 3986 - - return if path.nil? - normalized_path = path.dup - loop do - mod ||= normalized_path.gsub!(RULE_2A, SLASH) - - pair = normalized_path.match(RULE_2B_2C) - if pair - parent = pair[1] - current = pair[2] - else - parent = nil - current = nil - end - - regexp = "/#{Regexp.escape(parent.to_s)}/\\.\\./|" - regexp += "(/#{Regexp.escape(current.to_s)}/\\.\\.$)" - - if pair && ((parent != SELF_REF && parent != PARENT) || - (current != SELF_REF && current != PARENT)) - mod ||= normalized_path.gsub!(Regexp.new(regexp), SLASH) - end - - mod ||= normalized_path.gsub!(RULE_2D, EMPTY_STR) - # Non-standard, removes prefixed dotted segments from path. - mod ||= normalized_path.gsub!(RULE_PREFIXED_PARENT, SLASH) - break if mod.nil? - end - - normalized_path - end - - ## - # Ensures that the URI is valid. - def validate - return if !!@validation_deferred - if self.scheme != nil && self.ip_based? && - (self.host == nil || self.host.empty?) && - (self.path == nil || self.path.empty?) - raise InvalidURIError, - "Absolute URI missing hierarchical segment: '#{self.to_s}'" - end - if self.host == nil - if self.port != nil || - self.user != nil || - self.password != nil - raise InvalidURIError, "Hostname not supplied: '#{self.to_s}'" - end - end - if self.path != nil && !self.path.empty? && self.path[0..0] != SLASH && - self.authority != nil - raise InvalidURIError, - "Cannot have a relative path with an authority set: '#{self.to_s}'" - end - if self.path != nil && !self.path.empty? && - self.path[0..1] == SLASH + SLASH && self.authority == nil - raise InvalidURIError, - "Cannot have a path with two leading slashes " + - "without an authority set: '#{self.to_s}'" - end - unreserved = CharacterClasses::UNRESERVED - sub_delims = CharacterClasses::SUB_DELIMS - if !self.host.nil? && (self.host =~ /[<>{}\/\\\?\#\@"[[:space:]]]/ || - (self.host[/^\[(.*)\]$/, 1] != nil && self.host[/^\[(.*)\]$/, 1] !~ - Regexp.new("^[#{unreserved}#{sub_delims}:]*$"))) - raise InvalidURIError, "Invalid character in host: '#{self.host.to_s}'" - end - return nil - end - - ## - # Replaces the internal state of self with the specified URI's state. - # Used in destructive operations to avoid massive code repetition. - # - # @param [Addressable::URI] uri The URI to replace self with. - # - # @return [Addressable::URI] self. - def replace_self(uri) - # Reset dependent values - reset_ivs - - @scheme = uri.scheme - @user = uri.user - @password = uri.password - @host = uri.host - @port = uri.port - @path = uri.path - @query = uri.query - @fragment = uri.fragment - return self - end - - ## - # Splits path string with "/" (slash). - # It is considered that there is empty string after last slash when - # path ends with slash. - # - # @param [String] path The path to split. - # - # @return [Array] An array of parts of path. - def split_path(path) - splitted = path.split(SLASH) - splitted << EMPTY_STR if path.end_with? SLASH - splitted - end - - ## - # Resets composite values for the entire URI - # - # @api private - def remove_composite_values - @uri_string = nil - @hash = nil - end - - ## - # Converts the string to be UTF-8 if it is not already UTF-8 - # - # @api private - def force_utf8_encoding_if_needed(str) - if str && str.encoding != Encoding::UTF_8 - str.force_encoding(Encoding::UTF_8) - end - end - - private - - ## - # Resets instance variables - # - # @api private - def reset_ivs - @scheme = nil - @user = nil - @normalized_scheme = NONE - @normalized_user = NONE - @uri_string = nil - @hash = nil - @userinfo = nil - @normalized_userinfo = NONE - @authority = nil - @password = nil - @normalized_authority = nil - @port = nil - @normalized_password = NONE - @host = nil - @normalized_host = nil - @normalized_port = NONE - @path = EMPTY_STR - @normalized_path = nil - @normalized_query = NONE - @fragment = nil - @normalized_fragment = NONE - @query = nil - end - - NONE = Module.new.freeze - - private_constant :NONE - end -end diff --git a/bundle/ruby/3.2.0/gems/addressable-2.8.6/lib/addressable/version.rb b/bundle/ruby/3.2.0/gems/addressable-2.8.6/lib/addressable/version.rb deleted file mode 100644 index 9a58120e..00000000 --- a/bundle/ruby/3.2.0/gems/addressable-2.8.6/lib/addressable/version.rb +++ /dev/null @@ -1,31 +0,0 @@ -# frozen_string_literal: true - -#-- -# Copyright (C) Bob Aman -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -#++ - - -# Used to prevent the class/module from being loaded more than once -if !defined?(Addressable::VERSION) - module Addressable - module VERSION - MAJOR = 2 - MINOR = 8 - TINY = 6 - - STRING = [MAJOR, MINOR, TINY].join('.') - end - end -end diff --git a/bundle/ruby/3.2.0/gems/addressable-2.8.6/spec/addressable/idna_spec.rb b/bundle/ruby/3.2.0/gems/addressable-2.8.6/spec/addressable/idna_spec.rb deleted file mode 100644 index 428c9ec8..00000000 --- a/bundle/ruby/3.2.0/gems/addressable-2.8.6/spec/addressable/idna_spec.rb +++ /dev/null @@ -1,302 +0,0 @@ -# frozen_string_literal: true - -# Copyright (C) Bob Aman -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - - -require "spec_helper" - -# Have to use RubyGems to load the idn gem. -require "rubygems" - -require "addressable/idna" - -shared_examples_for "converting from unicode to ASCII" do - it "should convert 'www.google.com' correctly" do - expect(Addressable::IDNA.to_ascii("www.google.com")).to eq("www.google.com") - end - - long = 'AcinusFallumTrompetumNullunCreditumVisumEstAtCuadLongumEtCefallum.com' - it "should convert '#{long}' correctly" do - expect(Addressable::IDNA.to_ascii(long)).to eq(long) - end - - it "should convert 'www.詹姆斯.com' correctly" do - expect(Addressable::IDNA.to_ascii( - "www.詹姆斯.com" - )).to eq("www.xn--8ws00zhy3a.com") - end - - it "also accepts unicode strings encoded as ascii-8bit" do - expect(Addressable::IDNA.to_ascii( - "www.詹姆斯.com".b - )).to eq("www.xn--8ws00zhy3a.com") - end - - it "should convert 'www.Iñtërnâtiônàlizætiøn.com' correctly" do - "www.Iñtërnâtiônàlizætiøn.com" - expect(Addressable::IDNA.to_ascii( - "www.I\xC3\xB1t\xC3\xABrn\xC3\xA2ti\xC3\xB4" + - "n\xC3\xA0liz\xC3\xA6ti\xC3\xB8n.com" - )).to eq("www.xn--itrntinliztin-vdb0a5exd8ewcye.com") - end - - it "should convert 'www.Iñtërnâtiônàlizætiøn.com' correctly" do - expect(Addressable::IDNA.to_ascii( - "www.In\xCC\x83te\xCC\x88rna\xCC\x82tio\xCC\x82n" + - "a\xCC\x80liz\xC3\xA6ti\xC3\xB8n.com" - )).to eq("www.xn--itrntinliztin-vdb0a5exd8ewcye.com") - end - - it "should convert " + - "'www.ほんとうにながいわけのわからないどめいんめいのらべるまだながくしないとたりない.w3.mag.keio.ac.jp' " + - "correctly" do - expect(Addressable::IDNA.to_ascii( - "www.\343\201\273\343\202\223\343\201\250\343\201\206\343\201\253\343" + - "\201\252\343\201\214\343\201\204\343\202\217\343\201\221\343\201\256" + - "\343\202\217\343\201\213\343\202\211\343\201\252\343\201\204\343\201" + - "\251\343\202\201\343\201\204\343\202\223\343\202\201\343\201\204\343" + - "\201\256\343\202\211\343\201\271\343\202\213\343\201\276\343\201\240" + - "\343\201\252\343\201\214\343\201\217\343\201\227\343\201\252\343\201" + - "\204\343\201\250\343\201\237\343\202\212\343\201\252\343\201\204." + - "w3.mag.keio.ac.jp" - )).to eq( - "www.xn--n8jaaaaai5bhf7as8fsfk3jnknefdde3" + - "fg11amb5gzdb4wi9bya3kc6lra.w3.mag.keio.ac.jp" - ) - end - - it "should convert " + - "'www.ほんとうにながいわけのわからないどめいんめいのらべるまだながくしないとたりない.w3.mag.keio.ac.jp' " + - "correctly" do - expect(Addressable::IDNA.to_ascii( - "www.\343\201\273\343\202\223\343\201\250\343\201\206\343\201\253\343" + - "\201\252\343\201\213\343\202\231\343\201\204\343\202\217\343\201\221" + - "\343\201\256\343\202\217\343\201\213\343\202\211\343\201\252\343\201" + - "\204\343\201\250\343\202\231\343\202\201\343\201\204\343\202\223\343" + - "\202\201\343\201\204\343\201\256\343\202\211\343\201\270\343\202\231" + - "\343\202\213\343\201\276\343\201\237\343\202\231\343\201\252\343\201" + - "\213\343\202\231\343\201\217\343\201\227\343\201\252\343\201\204\343" + - "\201\250\343\201\237\343\202\212\343\201\252\343\201\204." + - "w3.mag.keio.ac.jp" - )).to eq( - "www.xn--n8jaaaaai5bhf7as8fsfk3jnknefdde3" + - "fg11amb5gzdb4wi9bya3kc6lra.w3.mag.keio.ac.jp" - ) - end - - it "should convert '点心和烤鸭.w3.mag.keio.ac.jp' correctly" do - expect(Addressable::IDNA.to_ascii( - "点心和烤鸭.w3.mag.keio.ac.jp" - )).to eq("xn--0trv4xfvn8el34t.w3.mag.keio.ac.jp") - end - - it "should convert '가각갂갃간갅갆갇갈갉힢힣.com' correctly" do - expect(Addressable::IDNA.to_ascii( - "가각갂갃간갅갆갇갈갉힢힣.com" - )).to eq("xn--o39acdefghijk5883jma.com") - end - - it "should convert " + - "'\347\242\274\346\250\231\346\272\226\350" + - "\220\254\345\234\213\347\242\274.com' correctly" do - expect(Addressable::IDNA.to_ascii( - "\347\242\274\346\250\231\346\272\226\350" + - "\220\254\345\234\213\347\242\274.com" - )).to eq("xn--9cs565brid46mda086o.com") - end - - it "should convert 'リ宠퐱〹.com' correctly" do - expect(Addressable::IDNA.to_ascii( - "\357\276\230\345\256\240\355\220\261\343\200\271.com" - )).to eq("xn--eek174hoxfpr4k.com") - end - - it "should convert 'リ宠퐱卄.com' correctly" do - expect(Addressable::IDNA.to_ascii( - "\343\203\252\345\256\240\355\220\261\345\215\204.com" - )).to eq("xn--eek174hoxfpr4k.com") - end - - it "should convert 'ᆵ' correctly" do - expect(Addressable::IDNA.to_ascii( - "\341\206\265" - )).to eq("xn--4ud") - end - - it "should convert 'ᆵ' correctly" do - expect(Addressable::IDNA.to_ascii( - "\357\276\257" - )).to eq("xn--4ud") - end - - it "should convert '🌹🌹🌹.ws' correctly" do - expect(Addressable::IDNA.to_ascii( - "\360\237\214\271\360\237\214\271\360\237\214\271.ws" - )).to eq("xn--2h8haa.ws") - end - - it "should handle two adjacent '.'s correctly" do - expect(Addressable::IDNA.to_ascii( - "example..host" - )).to eq("example..host") - end -end - -shared_examples_for "converting from ASCII to unicode" do - long = 'AcinusFallumTrompetumNullunCreditumVisumEstAtCuadLongumEtCefallum.com' - it "should convert '#{long}' correctly" do - expect(Addressable::IDNA.to_unicode(long)).to eq(long) - end - - it "should return the identity conversion when punycode decode fails" do - expect(Addressable::IDNA.to_unicode("xn--zckp1cyg1.sblo.jp")).to eq( - "xn--zckp1cyg1.sblo.jp") - end - - it "should return the identity conversion when the ACE prefix has no suffix" do - expect(Addressable::IDNA.to_unicode("xn--...-")).to eq("xn--...-") - end - - it "should convert 'www.google.com' correctly" do - expect(Addressable::IDNA.to_unicode("www.google.com")).to eq( - "www.google.com") - end - - it "should convert 'www.詹姆斯.com' correctly" do - expect(Addressable::IDNA.to_unicode( - "www.xn--8ws00zhy3a.com" - )).to eq("www.詹姆斯.com") - end - - it "should convert '詹姆斯.com' correctly" do - expect(Addressable::IDNA.to_unicode( - "xn--8ws00zhy3a.com" - )).to eq("詹姆斯.com") - end - - it "should convert 'www.iñtërnâtiônàlizætiøn.com' correctly" do - expect(Addressable::IDNA.to_unicode( - "www.xn--itrntinliztin-vdb0a5exd8ewcye.com" - )).to eq("www.iñtërnâtiônàlizætiøn.com") - end - - it "should convert 'iñtërnâtiônàlizætiøn.com' correctly" do - expect(Addressable::IDNA.to_unicode( - "xn--itrntinliztin-vdb0a5exd8ewcye.com" - )).to eq("iñtërnâtiônàlizætiøn.com") - end - - it "should convert " + - "'www.ほんとうにながいわけのわからないどめいんめいのらべるまだながくしないとたりない.w3.mag.keio.ac.jp' " + - "correctly" do - expect(Addressable::IDNA.to_unicode( - "www.xn--n8jaaaaai5bhf7as8fsfk3jnknefdde3" + - "fg11amb5gzdb4wi9bya3kc6lra.w3.mag.keio.ac.jp" - )).to eq( - "www.ほんとうにながいわけのわからないどめいんめいのらべるまだながくしないとたりない.w3.mag.keio.ac.jp" - ) - end - - it "should convert '点心和烤鸭.w3.mag.keio.ac.jp' correctly" do - expect(Addressable::IDNA.to_unicode( - "xn--0trv4xfvn8el34t.w3.mag.keio.ac.jp" - )).to eq("点心和烤鸭.w3.mag.keio.ac.jp") - end - - it "should convert '가각갂갃간갅갆갇갈갉힢힣.com' correctly" do - expect(Addressable::IDNA.to_unicode( - "xn--o39acdefghijk5883jma.com" - )).to eq("가각갂갃간갅갆갇갈갉힢힣.com") - end - - it "should convert " + - "'\347\242\274\346\250\231\346\272\226\350" + - "\220\254\345\234\213\347\242\274.com' correctly" do - expect(Addressable::IDNA.to_unicode( - "xn--9cs565brid46mda086o.com" - )).to eq( - "\347\242\274\346\250\231\346\272\226\350" + - "\220\254\345\234\213\347\242\274.com" - ) - end - - it "should convert 'リ宠퐱卄.com' correctly" do - expect(Addressable::IDNA.to_unicode( - "xn--eek174hoxfpr4k.com" - )).to eq("\343\203\252\345\256\240\355\220\261\345\215\204.com") - end - - it "should convert 'ᆵ' correctly" do - expect(Addressable::IDNA.to_unicode( - "xn--4ud" - )).to eq("\341\206\265") - end - - it "should convert '🌹🌹🌹.ws' correctly" do - expect(Addressable::IDNA.to_unicode( - "xn--2h8haa.ws" - )).to eq("\360\237\214\271\360\237\214\271\360\237\214\271.ws") - end - - it "should handle two adjacent '.'s correctly" do - expect(Addressable::IDNA.to_unicode( - "example..host" - )).to eq("example..host") - end -end - -describe Addressable::IDNA, "when using the pure-Ruby implementation" do - before do - Addressable.send(:remove_const, :IDNA) - load "addressable/idna/pure.rb" - end - - it_should_behave_like "converting from unicode to ASCII" - it_should_behave_like "converting from ASCII to unicode" - - begin - require "fiber" - - it "should not blow up inside fibers" do - f = Fiber.new do - Addressable.send(:remove_const, :IDNA) - load "addressable/idna/pure.rb" - end - f.resume - end - rescue LoadError - # Fibers aren't supported in this version of Ruby, skip this test. - warn('Fibers unsupported.') - end -end - -begin - require "idn" - - describe Addressable::IDNA, "when using the native-code implementation" do - before do - Addressable.send(:remove_const, :IDNA) - load "addressable/idna/native.rb" - end - - it_should_behave_like "converting from unicode to ASCII" - it_should_behave_like "converting from ASCII to unicode" - end -rescue LoadError => error - raise error if ENV["CI"] && TestHelper.native_supported? - - # Cannot test the native implementation without libidn support. - warn('Could not load native IDN implementation.') -end diff --git a/bundle/ruby/3.2.0/gems/addressable-2.8.6/spec/addressable/net_http_compat_spec.rb b/bundle/ruby/3.2.0/gems/addressable-2.8.6/spec/addressable/net_http_compat_spec.rb deleted file mode 100644 index d07a43e5..00000000 --- a/bundle/ruby/3.2.0/gems/addressable-2.8.6/spec/addressable/net_http_compat_spec.rb +++ /dev/null @@ -1,29 +0,0 @@ -# frozen_string_literal: true - -# Copyright (C) Bob Aman -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - - -require "spec_helper" - -require "addressable/uri" -require "net/http" - -describe Net::HTTP do - it "should be compatible with Addressable" do - response_body = - Net::HTTP.get(Addressable::URI.parse('http://www.google.com/')) - expect(response_body).not_to be_nil - end -end diff --git a/bundle/ruby/3.2.0/gems/addressable-2.8.6/spec/addressable/security_spec.rb b/bundle/ruby/3.2.0/gems/addressable-2.8.6/spec/addressable/security_spec.rb deleted file mode 100644 index 3bf90a20..00000000 --- a/bundle/ruby/3.2.0/gems/addressable-2.8.6/spec/addressable/security_spec.rb +++ /dev/null @@ -1,58 +0,0 @@ -# frozen_string_literal: true - -# Copyright (C) Bob Aman -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - - -require "spec_helper" - -require "addressable/uri" - -describe Addressable::URI, "when created with a URI known to cause crashes " + - "in certain browsers" do - it "should parse correctly" do - uri = Addressable::URI.parse('%%30%30') - expect(uri.path).to eq('%%30%30') - expect(uri.normalize.path).to eq('%2500') - end - - it "should parse correctly as a full URI" do - uri = Addressable::URI.parse('http://www.example.com/%%30%30') - expect(uri.path).to eq('/%%30%30') - expect(uri.normalize.path).to eq('/%2500') - end -end - -describe Addressable::URI, "when created with a URI known to cause crashes " + - "in certain browsers" do - it "should parse correctly" do - uri = Addressable::URI.parse('لُصّبُلُلصّبُررً ॣ ॣh ॣ ॣ 冗') - expect(uri.path).to eq('لُصّبُلُلصّبُررً ॣ ॣh ॣ ॣ 冗') - expect(uri.normalize.path).to eq( - '%D9%84%D9%8F%D8%B5%D9%91%D8%A8%D9%8F%D9%84%D9%8F%D9%84%D8%B5%D9%91' + - '%D8%A8%D9%8F%D8%B1%D8%B1%D9%8B%20%E0%A5%A3%20%E0%A5%A3h%20%E0%A5' + - '%A3%20%E0%A5%A3%20%E5%86%97' - ) - end - - it "should parse correctly as a full URI" do - uri = Addressable::URI.parse('http://www.example.com/لُصّبُلُلصّبُررً ॣ ॣh ॣ ॣ 冗') - expect(uri.path).to eq('/لُصّبُلُلصّبُررً ॣ ॣh ॣ ॣ 冗') - expect(uri.normalize.path).to eq( - '/%D9%84%D9%8F%D8%B5%D9%91%D8%A8%D9%8F%D9%84%D9%8F%D9%84%D8%B5%D9%91' + - '%D8%A8%D9%8F%D8%B1%D8%B1%D9%8B%20%E0%A5%A3%20%E0%A5%A3h%20%E0%A5' + - '%A3%20%E0%A5%A3%20%E5%86%97' - ) - end -end diff --git a/bundle/ruby/3.2.0/gems/addressable-2.8.6/spec/addressable/template_spec.rb b/bundle/ruby/3.2.0/gems/addressable-2.8.6/spec/addressable/template_spec.rb deleted file mode 100644 index 24616c23..00000000 --- a/bundle/ruby/3.2.0/gems/addressable-2.8.6/spec/addressable/template_spec.rb +++ /dev/null @@ -1,1264 +0,0 @@ -# frozen_string_literal: true - -# Copyright (C) Bob Aman -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - - -require "spec_helper" - -require "bigdecimal" -require "timeout" -require "addressable/template" - -shared_examples_for 'expands' do |tests| - tests.each do |template, expansion| - exp = expansion.is_a?(Array) ? expansion.first : expansion - it "#{template} to #{exp}" do - tmpl = Addressable::Template.new(template).expand(subject) - expect(tmpl.to_str).to eq(expansion) - end - end -end - -describe "eql?" do - let(:template) { Addressable::Template.new('https://www.example.com/{foo}') } - it 'is equal when the pattern matches' do - other_template = Addressable::Template.new('https://www.example.com/{foo}') - expect(template).to be_eql(other_template) - expect(other_template).to be_eql(template) - end - it 'is not equal when the pattern differs' do - other_template = Addressable::Template.new('https://www.example.com/{bar}') - expect(template).to_not be_eql(other_template) - expect(other_template).to_not be_eql(template) - end - it 'is not equal to non-templates' do - uri = 'https://www.example.com/foo/bar' - addressable_template = Addressable::Template.new uri - addressable_uri = Addressable::URI.parse uri - expect(addressable_template).to_not be_eql(addressable_uri) - expect(addressable_uri).to_not be_eql(addressable_template) - end -end - -describe "==" do - let(:template) { Addressable::Template.new('https://www.example.com/{foo}') } - it 'is equal when the pattern matches' do - other_template = Addressable::Template.new('https://www.example.com/{foo}') - expect(template).to eq other_template - expect(other_template).to eq template - end - it 'is not equal when the pattern differs' do - other_template = Addressable::Template.new('https://www.example.com/{bar}') - expect(template).not_to eq other_template - expect(other_template).not_to eq template - end - it 'is not equal to non-templates' do - uri = 'https://www.example.com/foo/bar' - addressable_template = Addressable::Template.new uri - addressable_uri = Addressable::URI.parse uri - expect(addressable_template).not_to eq addressable_uri - expect(addressable_uri).not_to eq addressable_template - end -end - -describe "#to_regexp" do - it "does not match the first line of multiline strings" do - uri = "https://www.example.com/bar" - template = Addressable::Template.new(uri) - expect(template.match(uri)).not_to be_nil - expect(template.match("#{uri}\ngarbage")).to be_nil - end -end - -describe "Type conversion" do - subject { - { - :var => true, - :hello => 1234, - :nothing => nil, - :sym => :symbolic, - :decimal => BigDecimal('1') - } - } - - it_behaves_like 'expands', { - '{var}' => 'true', - '{hello}' => '1234', - '{nothing}' => '', - '{sym}' => 'symbolic', - '{decimal}' => RUBY_VERSION < '2.4.0' ? '0.1E1' : '0.1e1' - } -end - -describe "Level 1:" do - subject { - {:var => "value", :hello => "Hello World!"} - } - it_behaves_like 'expands', { - '{var}' => 'value', - '{hello}' => 'Hello%20World%21' - } -end - -describe "Level 2" do - subject { - { - :var => "value", - :hello => "Hello World!", - :path => "/foo/bar" - } - } - context "Operator +:" do - it_behaves_like 'expands', { - '{+var}' => 'value', - '{+hello}' => 'Hello%20World!', - '{+path}/here' => '/foo/bar/here', - 'here?ref={+path}' => 'here?ref=/foo/bar' - } - end - context "Operator #:" do - it_behaves_like 'expands', { - 'X{#var}' => 'X#value', - 'X{#hello}' => 'X#Hello%20World!' - } - end -end - -describe "Level 3" do - subject { - { - :var => "value", - :hello => "Hello World!", - :empty => "", - :path => "/foo/bar", - :x => "1024", - :y => "768" - } - } - context "Operator nil (multiple vars):" do - it_behaves_like 'expands', { - 'map?{x,y}' => 'map?1024,768', - '{x,hello,y}' => '1024,Hello%20World%21,768' - } - end - context "Operator + (multiple vars):" do - it_behaves_like 'expands', { - '{+x,hello,y}' => '1024,Hello%20World!,768', - '{+path,x}/here' => '/foo/bar,1024/here' - } - end - context "Operator # (multiple vars):" do - it_behaves_like 'expands', { - '{#x,hello,y}' => '#1024,Hello%20World!,768', - '{#path,x}/here' => '#/foo/bar,1024/here' - } - end - context "Operator ." do - it_behaves_like 'expands', { - 'X{.var}' => 'X.value', - 'X{.x,y}' => 'X.1024.768' - } - end - context "Operator /" do - it_behaves_like 'expands', { - '{/var}' => '/value', - '{/var,x}/here' => '/value/1024/here' - } - end - context "Operator ;" do - it_behaves_like 'expands', { - '{;x,y}' => ';x=1024;y=768', - '{;x,y,empty}' => ';x=1024;y=768;empty' - } - end - context "Operator ?" do - it_behaves_like 'expands', { - '{?x,y}' => '?x=1024&y=768', - '{?x,y,empty}' => '?x=1024&y=768&empty=' - } - end - context "Operator &" do - it_behaves_like 'expands', { - '?fixed=yes{&x}' => '?fixed=yes&x=1024', - '{&x,y,empty}' => '&x=1024&y=768&empty=' - } - end -end - -describe "Level 4" do - subject { - { - :var => "value", - :hello => "Hello World!", - :path => "/foo/bar", - :semi => ";", - :list => %w(red green blue), - :keys => {"semi" => ';', "dot" => '.', :comma => ','} - } - } - context "Expansion with value modifiers" do - it_behaves_like 'expands', { - '{var:3}' => 'val', - '{var:30}' => 'value', - '{list}' => 'red,green,blue', - '{list*}' => 'red,green,blue', - '{keys}' => 'semi,%3B,dot,.,comma,%2C', - '{keys*}' => 'semi=%3B,dot=.,comma=%2C', - } - end - context "Operator + with value modifiers" do - it_behaves_like 'expands', { - '{+path:6}/here' => '/foo/b/here', - '{+list}' => 'red,green,blue', - '{+list*}' => 'red,green,blue', - '{+keys}' => 'semi,;,dot,.,comma,,', - '{+keys*}' => 'semi=;,dot=.,comma=,', - } - end - context "Operator # with value modifiers" do - it_behaves_like 'expands', { - '{#path:6}/here' => '#/foo/b/here', - '{#list}' => '#red,green,blue', - '{#list*}' => '#red,green,blue', - '{#keys}' => '#semi,;,dot,.,comma,,', - '{#keys*}' => '#semi=;,dot=.,comma=,', - } - end - context "Operator . with value modifiers" do - it_behaves_like 'expands', { - 'X{.var:3}' => 'X.val', - 'X{.list}' => 'X.red,green,blue', - 'X{.list*}' => 'X.red.green.blue', - 'X{.keys}' => 'X.semi,%3B,dot,.,comma,%2C', - 'X{.keys*}' => 'X.semi=%3B.dot=..comma=%2C', - } - end - context "Operator / with value modifiers" do - it_behaves_like 'expands', { - '{/var:1,var}' => '/v/value', - '{/list}' => '/red,green,blue', - '{/list*}' => '/red/green/blue', - '{/list*,path:4}' => '/red/green/blue/%2Ffoo', - '{/keys}' => '/semi,%3B,dot,.,comma,%2C', - '{/keys*}' => '/semi=%3B/dot=./comma=%2C', - } - end - context "Operator ; with value modifiers" do - it_behaves_like 'expands', { - '{;hello:5}' => ';hello=Hello', - '{;list}' => ';list=red,green,blue', - '{;list*}' => ';list=red;list=green;list=blue', - '{;keys}' => ';keys=semi,%3B,dot,.,comma,%2C', - '{;keys*}' => ';semi=%3B;dot=.;comma=%2C', - } - end - context "Operator ? with value modifiers" do - it_behaves_like 'expands', { - '{?var:3}' => '?var=val', - '{?list}' => '?list=red,green,blue', - '{?list*}' => '?list=red&list=green&list=blue', - '{?keys}' => '?keys=semi,%3B,dot,.,comma,%2C', - '{?keys*}' => '?semi=%3B&dot=.&comma=%2C', - } - end - context "Operator & with value modifiers" do - it_behaves_like 'expands', { - '{&var:3}' => '&var=val', - '{&list}' => '&list=red,green,blue', - '{&list*}' => '&list=red&list=green&list=blue', - '{&keys}' => '&keys=semi,%3B,dot,.,comma,%2C', - '{&keys*}' => '&semi=%3B&dot=.&comma=%2C', - } - end -end -describe "Modifiers" do - subject { - { - :var => "value", - :semi => ";", - :year => [1965, 2000, 2012], - :dom => %w(example com) - } - } - context "length" do - it_behaves_like 'expands', { - '{var:3}' => 'val', - '{var:30}' => 'value', - '{var}' => 'value', - '{semi}' => '%3B', - '{semi:2}' => '%3B' - } - end - context "explode" do - it_behaves_like 'expands', { - 'find{?year*}' => 'find?year=1965&year=2000&year=2012', - 'www{.dom*}' => 'www.example.com', - } - end -end -describe "Expansion" do - subject { - { - :count => ["one", "two", "three"], - :dom => ["example", "com"], - :dub => "me/too", - :hello => "Hello World!", - :half => "50%", - :var => "value", - :who => "fred", - :base => "http://example.com/home/", - :path => "/foo/bar", - :list => ["red", "green", "blue"], - :keys => {"semi" => ";","dot" => ".",:comma => ","}, - :v => "6", - :x => "1024", - :y => "768", - :empty => "", - :empty_keys => {}, - :undef => nil - } - } - context "concatenation" do - it_behaves_like 'expands', { - '{count}' => 'one,two,three', - '{count*}' => 'one,two,three', - '{/count}' => '/one,two,three', - '{/count*}' => '/one/two/three', - '{;count}' => ';count=one,two,three', - '{;count*}' => ';count=one;count=two;count=three', - '{?count}' => '?count=one,two,three', - '{?count*}' => '?count=one&count=two&count=three', - '{&count*}' => '&count=one&count=two&count=three' - } - end - context "simple expansion" do - it_behaves_like 'expands', { - '{var}' => 'value', - '{hello}' => 'Hello%20World%21', - '{half}' => '50%25', - 'O{empty}X' => 'OX', - 'O{undef}X' => 'OX', - '{x,y}' => '1024,768', - '{x,hello,y}' => '1024,Hello%20World%21,768', - '?{x,empty}' => '?1024,', - '?{x,undef}' => '?1024', - '?{undef,y}' => '?768', - '{var:3}' => 'val', - '{var:30}' => 'value', - '{list}' => 'red,green,blue', - '{list*}' => 'red,green,blue', - '{keys}' => 'semi,%3B,dot,.,comma,%2C', - '{keys*}' => 'semi=%3B,dot=.,comma=%2C', - } - end - context "reserved expansion (+)" do - it_behaves_like 'expands', { - '{+var}' => 'value', - '{+hello}' => 'Hello%20World!', - '{+half}' => '50%25', - '{base}index' => 'http%3A%2F%2Fexample.com%2Fhome%2Findex', - '{+base}index' => 'http://example.com/home/index', - 'O{+empty}X' => 'OX', - 'O{+undef}X' => 'OX', - '{+path}/here' => '/foo/bar/here', - 'here?ref={+path}' => 'here?ref=/foo/bar', - 'up{+path}{var}/here' => 'up/foo/barvalue/here', - '{+x,hello,y}' => '1024,Hello%20World!,768', - '{+path,x}/here' => '/foo/bar,1024/here', - '{+path:6}/here' => '/foo/b/here', - '{+list}' => 'red,green,blue', - '{+list*}' => 'red,green,blue', - '{+keys}' => 'semi,;,dot,.,comma,,', - '{+keys*}' => 'semi=;,dot=.,comma=,', - } - end - context "fragment expansion (#)" do - it_behaves_like 'expands', { - '{#var}' => '#value', - '{#hello}' => '#Hello%20World!', - '{#half}' => '#50%25', - 'foo{#empty}' => 'foo#', - 'foo{#undef}' => 'foo', - '{#x,hello,y}' => '#1024,Hello%20World!,768', - '{#path,x}/here' => '#/foo/bar,1024/here', - '{#path:6}/here' => '#/foo/b/here', - '{#list}' => '#red,green,blue', - '{#list*}' => '#red,green,blue', - '{#keys}' => '#semi,;,dot,.,comma,,', - '{#keys*}' => '#semi=;,dot=.,comma=,', - } - end - context "label expansion (.)" do - it_behaves_like 'expands', { - '{.who}' => '.fred', - '{.who,who}' => '.fred.fred', - '{.half,who}' => '.50%25.fred', - 'www{.dom*}' => 'www.example.com', - 'X{.var}' => 'X.value', - 'X{.empty}' => 'X.', - 'X{.undef}' => 'X', - 'X{.var:3}' => 'X.val', - 'X{.list}' => 'X.red,green,blue', - 'X{.list*}' => 'X.red.green.blue', - 'X{.keys}' => 'X.semi,%3B,dot,.,comma,%2C', - 'X{.keys*}' => 'X.semi=%3B.dot=..comma=%2C', - 'X{.empty_keys}' => 'X', - 'X{.empty_keys*}' => 'X' - } - end - context "path expansion (/)" do - it_behaves_like 'expands', { - '{/who}' => '/fred', - '{/who,who}' => '/fred/fred', - '{/half,who}' => '/50%25/fred', - '{/who,dub}' => '/fred/me%2Ftoo', - '{/var}' => '/value', - '{/var,empty}' => '/value/', - '{/var,undef}' => '/value', - '{/var,x}/here' => '/value/1024/here', - '{/var:1,var}' => '/v/value', - '{/list}' => '/red,green,blue', - '{/list*}' => '/red/green/blue', - '{/list*,path:4}' => '/red/green/blue/%2Ffoo', - '{/keys}' => '/semi,%3B,dot,.,comma,%2C', - '{/keys*}' => '/semi=%3B/dot=./comma=%2C', - } - end - context "path-style expansion (;)" do - it_behaves_like 'expands', { - '{;who}' => ';who=fred', - '{;half}' => ';half=50%25', - '{;empty}' => ';empty', - '{;v,empty,who}' => ';v=6;empty;who=fred', - '{;v,bar,who}' => ';v=6;who=fred', - '{;x,y}' => ';x=1024;y=768', - '{;x,y,empty}' => ';x=1024;y=768;empty', - '{;x,y,undef}' => ';x=1024;y=768', - '{;hello:5}' => ';hello=Hello', - '{;list}' => ';list=red,green,blue', - '{;list*}' => ';list=red;list=green;list=blue', - '{;keys}' => ';keys=semi,%3B,dot,.,comma,%2C', - '{;keys*}' => ';semi=%3B;dot=.;comma=%2C', - } - end - context "form query expansion (?)" do - it_behaves_like 'expands', { - '{?who}' => '?who=fred', - '{?half}' => '?half=50%25', - '{?x,y}' => '?x=1024&y=768', - '{?x,y,empty}' => '?x=1024&y=768&empty=', - '{?x,y,undef}' => '?x=1024&y=768', - '{?var:3}' => '?var=val', - '{?list}' => '?list=red,green,blue', - '{?list*}' => '?list=red&list=green&list=blue', - '{?keys}' => '?keys=semi,%3B,dot,.,comma,%2C', - '{?keys*}' => '?semi=%3B&dot=.&comma=%2C', - } - end - context "form query expansion (&)" do - it_behaves_like 'expands', { - '{&who}' => '&who=fred', - '{&half}' => '&half=50%25', - '?fixed=yes{&x}' => '?fixed=yes&x=1024', - '{&x,y,empty}' => '&x=1024&y=768&empty=', - '{&x,y,undef}' => '&x=1024&y=768', - '{&var:3}' => '&var=val', - '{&list}' => '&list=red,green,blue', - '{&list*}' => '&list=red&list=green&list=blue', - '{&keys}' => '&keys=semi,%3B,dot,.,comma,%2C', - '{&keys*}' => '&semi=%3B&dot=.&comma=%2C', - } - end - context "non-string key in match data" do - subject {Addressable::Template.new("http://example.com/{one}")} - - it "raises TypeError" do - expect { subject.expand(Object.new => "1") }.to raise_error TypeError - end - end -end - -class ExampleTwoProcessor - def self.restore(name, value) - return value.gsub(/-/, " ") if name == "query" - return value - end - - def self.match(name) - return ".*?" if name == "first" - return ".*" - end - def self.validate(name, value) - return !!(value =~ /^[\w ]+$/) if name == "query" - return true - end - - def self.transform(name, value) - return value.gsub(/ /, "+") if name == "query" - return value - end -end - -class DumbProcessor - def self.match(name) - return ".*?" if name == "first" - end -end - -describe Addressable::Template do - describe 'initialize' do - context 'with a non-string' do - it 'raises a TypeError' do - expect { Addressable::Template.new(nil) }.to raise_error(TypeError) - end - end - end - - describe 'freeze' do - subject { Addressable::Template.new("http://example.com/{first}/{+second}/") } - it 'freezes the template' do - expect(subject.freeze).to be_frozen - end - end - - describe "Matching" do - let(:uri){ - Addressable::URI.parse( - "http://example.com/search/an-example-search-query/" - ) - } - let(:uri2){ - Addressable::URI.parse("http://example.com/a/b/c/") - } - let(:uri3){ - Addressable::URI.parse("http://example.com/;a=1;b=2;c=3;first=foo") - } - let(:uri4){ - Addressable::URI.parse("http://example.com/?a=1&b=2&c=3&first=foo") - } - let(:uri5){ - "http://example.com/foo" - } - context "first uri with ExampleTwoProcessor" do - subject { - Addressable::Template.new( - "http://example.com/search/{query}/" - ).match(uri, ExampleTwoProcessor) - } - its(:variables){ should == ["query"] } - its(:captures){ should == ["an example search query"] } - end - - context "second uri with ExampleTwoProcessor" do - subject { - Addressable::Template.new( - "http://example.com/{first}/{+second}/" - ).match(uri2, ExampleTwoProcessor) - } - its(:variables){ should == ["first", "second"] } - its(:captures){ should == ["a", "b/c"] } - end - - context "second uri with DumbProcessor" do - subject { - Addressable::Template.new( - "http://example.com/{first}/{+second}/" - ).match(uri2, DumbProcessor) - } - its(:variables){ should == ["first", "second"] } - its(:captures){ should == ["a", "b/c"] } - end - - context "second uri" do - subject { - Addressable::Template.new( - "http://example.com/{first}{/second*}/" - ).match(uri2) - } - its(:variables){ should == ["first", "second"] } - its(:captures){ should == ["a", ["b","c"]] } - end - context "third uri" do - subject { - Addressable::Template.new( - "http://example.com/{;hash*,first}" - ).match(uri3) - } - its(:variables){ should == ["hash", "first"] } - its(:captures){ should == [ - {"a" => "1", "b" => "2", "c" => "3", "first" => "foo"}, nil] } - end - # Note that this expansion is impossible to revert deterministically - the - # * operator means first could have been a key of hash or a separate key. - # Semantically, a separate key is more likely, but both are possible. - context "fourth uri" do - subject { - Addressable::Template.new( - "http://example.com/{?hash*,first}" - ).match(uri4) - } - its(:variables){ should == ["hash", "first"] } - its(:captures){ should == [ - {"a" => "1", "b" => "2", "c" => "3", "first"=> "foo"}, nil] } - end - context "fifth uri" do - subject { - Addressable::Template.new( - "http://example.com/{path}{?hash*,first}" - ).match(uri5) - } - its(:variables){ should == ["path", "hash", "first"] } - its(:captures){ should == ["foo", nil, nil] } - end - end - - describe 'match' do - subject { Addressable::Template.new('http://example.com/first/second/') } - context 'when the URI is the same as the template' do - it 'returns the match data itself with an empty mapping' do - uri = Addressable::URI.parse('http://example.com/first/second/') - match_data = subject.match(uri) - expect(match_data).to be_an Addressable::Template::MatchData - expect(match_data.uri).to eq(uri) - expect(match_data.template).to eq(subject) - expect(match_data.mapping).to be_empty - expect(match_data.inspect).to be_an String - end - end - end - - describe "extract" do - let(:template) { - Addressable::Template.new( - "http://{host}{/segments*}/{?one,two,bogus}{#fragment}" - ) - } - let(:uri){ "http://example.com/a/b/c/?one=1&two=2#foo" } - let(:uri2){ "http://example.com/a/b/c/#foo" } - it "should be able to extract with queries" do - expect(template.extract(uri)).to eq({ - "host" => "example.com", - "segments" => %w(a b c), - "one" => "1", - "bogus" => nil, - "two" => "2", - "fragment" => "foo" - }) - end - it "should be able to extract without queries" do - expect(template.extract(uri2)).to eq({ - "host" => "example.com", - "segments" => %w(a b c), - "one" => nil, - "bogus" => nil, - "two" => nil, - "fragment" => "foo" - }) - end - - context "issue #137" do - subject { Addressable::Template.new('/path{?page,per_page}') } - - it "can match empty" do - data = subject.extract("/path") - expect(data["page"]).to eq(nil) - expect(data["per_page"]).to eq(nil) - expect(data.keys.sort).to eq(['page', 'per_page']) - end - - it "can match first var" do - data = subject.extract("/path?page=1") - expect(data["page"]).to eq("1") - expect(data["per_page"]).to eq(nil) - expect(data.keys.sort).to eq(['page', 'per_page']) - end - - it "can match second var" do - data = subject.extract("/path?per_page=1") - expect(data["page"]).to eq(nil) - expect(data["per_page"]).to eq("1") - expect(data.keys.sort).to eq(['page', 'per_page']) - end - - it "can match both vars" do - data = subject.extract("/path?page=2&per_page=1") - expect(data["page"]).to eq("2") - expect(data["per_page"]).to eq("1") - expect(data.keys.sort).to eq(['page', 'per_page']) - end - end - end - - describe "Partial expand with symbols" do - context "partial_expand with two simple values" do - subject { - Addressable::Template.new("http://example.com/{one}/{two}/") - } - it "builds a new pattern" do - expect(subject.partial_expand(:one => "1").pattern).to eq( - "http://example.com/1/{two}/" - ) - end - end - context "partial_expand query with missing param in middle" do - subject { - Addressable::Template.new("http://example.com/{?one,two,three}/") - } - it "builds a new pattern" do - expect(subject.partial_expand(:one => "1", :three => "3").pattern).to eq( - "http://example.com/?one=1{&two}&three=3/" - ) - end - end - context "partial_expand form style query with missing param at beginning" do - subject { - Addressable::Template.new("http://example.com/{?one,two}/") - } - it "builds a new pattern" do - expect(subject.partial_expand(:two => "2").pattern).to eq( - "http://example.com/?two=2{&one}/" - ) - end - end - context "issue #307 - partial_expand form query with nil params" do - subject do - Addressable::Template.new("http://example.com/{?one,two,three}/") - end - it "builds a new pattern with two=nil" do - expect(subject.partial_expand(two: nil).pattern).to eq( - "http://example.com/{?one}{&three}/" - ) - end - it "builds a new pattern with one=nil and two=nil" do - expect(subject.partial_expand(one: nil, two: nil).pattern).to eq( - "http://example.com/{?three}/" - ) - end - it "builds a new pattern with one=1 and two=nil" do - expect(subject.partial_expand(one: 1, two: nil).pattern).to eq( - "http://example.com/?one=1{&three}/" - ) - end - it "builds a new pattern with one=nil and two=2" do - expect(subject.partial_expand(one: nil, two: 2).pattern).to eq( - "http://example.com/?two=2{&three}/" - ) - end - it "builds a new pattern with one=nil" do - expect(subject.partial_expand(one: nil).pattern).to eq( - "http://example.com/{?two}{&three}/" - ) - end - end - context "partial_expand with query string" do - subject { - Addressable::Template.new("http://example.com/{?two,one}/") - } - it "builds a new pattern" do - expect(subject.partial_expand(:one => "1").pattern).to eq( - "http://example.com/?one=1{&two}/" - ) - end - end - context "partial_expand with path operator" do - subject { - Addressable::Template.new("http://example.com{/one,two}/") - } - it "builds a new pattern" do - expect(subject.partial_expand(:one => "1").pattern).to eq( - "http://example.com/1{/two}/" - ) - end - end - context "partial expand with unicode values" do - subject do - Addressable::Template.new("http://example.com/{resource}/{query}/") - end - it "normalizes unicode by default" do - template = subject.partial_expand("query" => "Cafe\u0301") - expect(template.pattern).to eq( - "http://example.com/{resource}/Caf%C3%A9/" - ) - end - - it "normalizes as unicode even with wrong encoding specified" do - template = subject.partial_expand("query" => "Cafe\u0301".b) - expect(template.pattern).to eq( - "http://example.com/{resource}/Caf%C3%A9/" - ) - end - - it "raises on invalid unicode input" do - expect { - subject.partial_expand("query" => "M\xE9thode".b) - }.to raise_error(ArgumentError, "invalid byte sequence in UTF-8") - end - - it "does not normalize unicode when byte semantics requested" do - template = subject.partial_expand({"query" => "Cafe\u0301"}, nil, false) - expect(template.pattern).to eq( - "http://example.com/{resource}/Cafe%CC%81/" - ) - end - end - end - describe "Partial expand with strings" do - context "partial_expand with two simple values" do - subject { - Addressable::Template.new("http://example.com/{one}/{two}/") - } - it "builds a new pattern" do - expect(subject.partial_expand("one" => "1").pattern).to eq( - "http://example.com/1/{two}/" - ) - end - end - context "partial_expand query with missing param in middle" do - subject { - Addressable::Template.new("http://example.com/{?one,two,three}/") - } - it "builds a new pattern" do - expect(subject.partial_expand("one" => "1", "three" => "3").pattern).to eq( - "http://example.com/?one=1{&two}&three=3/" - ) - end - end - context "partial_expand with query string" do - subject { - Addressable::Template.new("http://example.com/{?two,one}/") - } - it "builds a new pattern" do - expect(subject.partial_expand("one" => "1").pattern).to eq( - "http://example.com/?one=1{&two}/" - ) - end - end - context "partial_expand with path operator" do - subject { - Addressable::Template.new("http://example.com{/one,two}/") - } - it "builds a new pattern" do - expect(subject.partial_expand("one" => "1").pattern).to eq( - "http://example.com/1{/two}/" - ) - end - end - end - describe "Expand" do - context "expand with unicode values" do - subject do - Addressable::Template.new("http://example.com/search/{query}/") - end - it "normalizes unicode by default" do - uri = subject.expand("query" => "Cafe\u0301").to_str - expect(uri).to eq("http://example.com/search/Caf%C3%A9/") - end - - it "normalizes as unicode even with wrong encoding specified" do - uri = subject.expand("query" => "Cafe\u0301".b).to_str - expect(uri).to eq("http://example.com/search/Caf%C3%A9/") - end - - it "raises on invalid unicode input" do - expect { - subject.expand("query" => "M\xE9thode".b).to_str - }.to raise_error(ArgumentError, "invalid byte sequence in UTF-8") - end - - it "does not normalize unicode when byte semantics requested" do - uri = subject.expand({ "query" => "Cafe\u0301" }, nil, false).to_str - expect(uri).to eq("http://example.com/search/Cafe%CC%81/") - end - end - context "expand with a processor" do - subject { - Addressable::Template.new("http://example.com/search/{query}/") - } - it "processes spaces" do - expect(subject.expand({"query" => "an example search query"}, - ExampleTwoProcessor).to_str).to eq( - "http://example.com/search/an+example+search+query/" - ) - end - it "validates" do - expect{ - subject.expand({"query" => "Bogus!"}, - ExampleTwoProcessor).to_str - }.to raise_error(Addressable::Template::InvalidTemplateValueError) - end - end - context "partial_expand query with missing param in middle" do - subject { - Addressable::Template.new("http://example.com/{?one,two,three}/") - } - it "builds a new pattern" do - expect(subject.partial_expand("one" => "1", "three" => "3").pattern).to eq( - "http://example.com/?one=1{&two}&three=3/" - ) - end - end - context "partial_expand with query string" do - subject { - Addressable::Template.new("http://example.com/{?two,one}/") - } - it "builds a new pattern" do - expect(subject.partial_expand("one" => "1").pattern).to eq( - "http://example.com/?one=1{&two}/" - ) - end - end - context "partial_expand with path operator" do - subject { - Addressable::Template.new("http://example.com{/one,two}/") - } - it "builds a new pattern" do - expect(subject.partial_expand("one" => "1").pattern).to eq( - "http://example.com/1{/two}/" - ) - end - end - end - context "Matching with operators" do - describe "Level 1:" do - subject { Addressable::Template.new("foo{foo}/{bar}baz") } - it "can match" do - data = subject.match("foofoo/bananabaz") - expect(data.mapping["foo"]).to eq("foo") - expect(data.mapping["bar"]).to eq("banana") - end - it "can fail" do - expect(subject.match("bar/foo")).to be_nil - expect(subject.match("foobaz")).to be_nil - end - it "can match empty" do - data = subject.match("foo/baz") - expect(data.mapping["foo"]).to eq(nil) - expect(data.mapping["bar"]).to eq(nil) - end - it "lists vars" do - expect(subject.variables).to eq(["foo", "bar"]) - end - end - - describe "Level 2:" do - subject { Addressable::Template.new("foo{+foo}{#bar}baz") } - it "can match" do - data = subject.match("foo/test/banana#bazbaz") - expect(data.mapping["foo"]).to eq("/test/banana") - expect(data.mapping["bar"]).to eq("baz") - end - it "can match empty level 2 #" do - data = subject.match("foo/test/bananabaz") - expect(data.mapping["foo"]).to eq("/test/banana") - expect(data.mapping["bar"]).to eq(nil) - data = subject.match("foo/test/banana#baz") - expect(data.mapping["foo"]).to eq("/test/banana") - expect(data.mapping["bar"]).to eq("") - end - it "can match empty level 2 +" do - data = subject.match("foobaz") - expect(data.mapping["foo"]).to eq(nil) - expect(data.mapping["bar"]).to eq(nil) - data = subject.match("foo#barbaz") - expect(data.mapping["foo"]).to eq(nil) - expect(data.mapping["bar"]).to eq("bar") - end - it "lists vars" do - expect(subject.variables).to eq(["foo", "bar"]) - end - end - - describe "Level 3:" do - context "no operator" do - subject { Addressable::Template.new("foo{foo,bar}baz") } - it "can match" do - data = subject.match("foofoo,barbaz") - expect(data.mapping["foo"]).to eq("foo") - expect(data.mapping["bar"]).to eq("bar") - end - it "lists vars" do - expect(subject.variables).to eq(["foo", "bar"]) - end - end - context "+ operator" do - subject { Addressable::Template.new("foo{+foo,bar}baz") } - it "can match" do - data = subject.match("foofoo/bar,barbaz") - expect(data.mapping["bar"]).to eq("foo/bar,bar") - expect(data.mapping["foo"]).to eq("") - end - it "lists vars" do - expect(subject.variables).to eq(["foo", "bar"]) - end - end - context ". operator" do - subject { Addressable::Template.new("foo{.foo,bar}baz") } - it "can match" do - data = subject.match("foo.foo.barbaz") - expect(data.mapping["foo"]).to eq("foo") - expect(data.mapping["bar"]).to eq("bar") - end - it "lists vars" do - expect(subject.variables).to eq(["foo", "bar"]) - end - end - context "/ operator" do - subject { Addressable::Template.new("foo{/foo,bar}baz") } - it "can match" do - data = subject.match("foo/foo/barbaz") - expect(data.mapping["foo"]).to eq("foo") - expect(data.mapping["bar"]).to eq("bar") - end - it "lists vars" do - expect(subject.variables).to eq(["foo", "bar"]) - end - end - context "; operator" do - subject { Addressable::Template.new("foo{;foo,bar,baz}baz") } - it "can match" do - data = subject.match("foo;foo=bar%20baz;bar=foo;bazbaz") - expect(data.mapping["foo"]).to eq("bar baz") - expect(data.mapping["bar"]).to eq("foo") - expect(data.mapping["baz"]).to eq("") - end - it "lists vars" do - expect(subject.variables).to eq(%w(foo bar baz)) - end - end - context "? operator" do - context "test" do - subject { Addressable::Template.new("foo{?foo,bar}baz") } - it "can match" do - data = subject.match("foo?foo=bar%20baz&bar=foobaz") - expect(data.mapping["foo"]).to eq("bar baz") - expect(data.mapping["bar"]).to eq("foo") - end - it "lists vars" do - expect(subject.variables).to eq(%w(foo bar)) - end - end - - context "issue #137" do - subject { Addressable::Template.new('/path{?page,per_page}') } - - it "can match empty" do - data = subject.match("/path") - expect(data.mapping["page"]).to eq(nil) - expect(data.mapping["per_page"]).to eq(nil) - expect(data.mapping.keys.sort).to eq(['page', 'per_page']) - end - - it "can match first var" do - data = subject.match("/path?page=1") - expect(data.mapping["page"]).to eq("1") - expect(data.mapping["per_page"]).to eq(nil) - expect(data.mapping.keys.sort).to eq(['page', 'per_page']) - end - - it "can match second var" do - data = subject.match("/path?per_page=1") - expect(data.mapping["page"]).to eq(nil) - expect(data.mapping["per_page"]).to eq("1") - expect(data.mapping.keys.sort).to eq(['page', 'per_page']) - end - - it "can match both vars" do - data = subject.match("/path?page=2&per_page=1") - expect(data.mapping["page"]).to eq("2") - expect(data.mapping["per_page"]).to eq("1") - expect(data.mapping.keys.sort).to eq(['page', 'per_page']) - end - end - - context "issue #71" do - subject { Addressable::Template.new("http://cyberscore.dev/api/users{?username}") } - it "can match" do - data = subject.match("http://cyberscore.dev/api/users?username=foobaz") - expect(data.mapping["username"]).to eq("foobaz") - end - it "lists vars" do - expect(subject.variables).to eq(%w(username)) - expect(subject.keys).to eq(%w(username)) - end - end - end - context "& operator" do - subject { Addressable::Template.new("foo{&foo,bar}baz") } - it "can match" do - data = subject.match("foo&foo=bar%20baz&bar=foobaz") - expect(data.mapping["foo"]).to eq("bar baz") - expect(data.mapping["bar"]).to eq("foo") - end - it "lists vars" do - expect(subject.variables).to eq(%w(foo bar)) - end - end - end - end - - context "support regexes:" do - context "EXPRESSION" do - subject { Addressable::Template::EXPRESSION } - it "should be able to match an expression" do - expect(subject).to match("{foo}") - expect(subject).to match("{foo,9}") - expect(subject).to match("{foo.bar,baz}") - expect(subject).to match("{+foo.bar,baz}") - expect(subject).to match("{foo,foo%20bar}") - expect(subject).to match("{#foo:20,baz*}") - expect(subject).to match("stuff{#foo:20,baz*}things") - end - it "should fail on non vars" do - expect(subject).not_to match("!{foo") - expect(subject).not_to match("{foo.bar.}") - expect(subject).not_to match("!{}") - end - end - context "VARNAME" do - subject { Addressable::Template::VARNAME } - it "should be able to match a variable" do - expect(subject).to match("foo") - expect(subject).to match("9") - expect(subject).to match("foo.bar") - expect(subject).to match("foo_bar") - expect(subject).to match("foo_bar.baz") - expect(subject).to match("foo%20bar") - expect(subject).to match("foo%20bar.baz") - end - it "should fail on non vars" do - expect(subject).not_to match("!foo") - expect(subject).not_to match("foo.bar.") - expect(subject).not_to match("foo%2%00bar") - expect(subject).not_to match("foo_ba%r") - expect(subject).not_to match("foo_bar*") - expect(subject).not_to match("foo_bar:20") - end - - it 'should parse in a reasonable time' do - expect do - Timeout.timeout(0.1) do - expect(subject).not_to match("0"*25 + "!") - end - end.not_to raise_error - end - end - context "VARIABLE_LIST" do - subject { Addressable::Template::VARIABLE_LIST } - it "should be able to match a variable list" do - expect(subject).to match("foo,bar") - expect(subject).to match("foo") - expect(subject).to match("foo,bar*,baz") - expect(subject).to match("foo.bar,bar_baz*,baz:12") - end - it "should fail on non vars" do - expect(subject).not_to match(",foo,bar*,baz") - expect(subject).not_to match("foo,*bar,baz") - expect(subject).not_to match("foo,,bar*,baz") - end - end - context "VARSPEC" do - subject { Addressable::Template::VARSPEC } - it "should be able to match a variable with modifier" do - expect(subject).to match("9:8") - expect(subject).to match("foo.bar*") - expect(subject).to match("foo_bar:12") - expect(subject).to match("foo_bar.baz*") - expect(subject).to match("foo%20bar:12") - expect(subject).to match("foo%20bar.baz*") - end - it "should fail on non vars" do - expect(subject).not_to match("!foo") - expect(subject).not_to match("*foo") - expect(subject).not_to match("fo*o") - expect(subject).not_to match("fo:o") - expect(subject).not_to match("foo:") - end - end - end -end - -describe Addressable::Template::MatchData do - let(:template) { Addressable::Template.new('{foo}/{bar}') } - subject(:its) { template.match('ab/cd') } - its(:uri) { should == Addressable::URI.parse('ab/cd') } - its(:template) { should == template } - its(:mapping) { should == { 'foo' => 'ab', 'bar' => 'cd' } } - its(:variables) { should == ['foo', 'bar'] } - its(:keys) { should == ['foo', 'bar'] } - its(:names) { should == ['foo', 'bar'] } - its(:values) { should == ['ab', 'cd'] } - its(:captures) { should == ['ab', 'cd'] } - its(:to_a) { should == ['ab/cd', 'ab', 'cd'] } - its(:to_s) { should == 'ab/cd' } - its(:string) { should == its.to_s } - its(:pre_match) { should == "" } - its(:post_match) { should == "" } - - describe 'values_at' do - it 'returns an array with the values' do - expect(its.values_at(0, 2)).to eq(['ab/cd', 'cd']) - end - it 'allows mixing integer an string keys' do - expect(its.values_at('foo', 1)).to eq(['ab', 'ab']) - end - it 'accepts unknown keys' do - expect(its.values_at('baz', 'foo')).to eq([nil, 'ab']) - end - end - - describe '[]' do - context 'string key' do - it 'returns the corresponding capture' do - expect(its['foo']).to eq('ab') - expect(its['bar']).to eq('cd') - end - it 'returns nil for unknown keys' do - expect(its['baz']).to be_nil - end - end - context 'symbol key' do - it 'returns the corresponding capture' do - expect(its[:foo]).to eq('ab') - expect(its[:bar]).to eq('cd') - end - it 'returns nil for unknown keys' do - expect(its[:baz]).to be_nil - end - end - context 'integer key' do - it 'returns the full URI for index 0' do - expect(its[0]).to eq('ab/cd') - end - it 'returns the corresponding capture' do - expect(its[1]).to eq('ab') - expect(its[2]).to eq('cd') - end - it 'returns nil for unknown keys' do - expect(its[3]).to be_nil - end - end - context 'other key' do - it 'raises an exception' do - expect { its[Object.new] }.to raise_error(TypeError) - end - end - context 'with length' do - it 'returns an array starting at index with given length' do - expect(its[0, 2]).to eq(['ab/cd', 'ab']) - expect(its[2, 1]).to eq(['cd']) - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/addressable-2.8.6/spec/addressable/uri_spec.rb b/bundle/ruby/3.2.0/gems/addressable-2.8.6/spec/addressable/uri_spec.rb deleted file mode 100644 index 26ee923d..00000000 --- a/bundle/ruby/3.2.0/gems/addressable-2.8.6/spec/addressable/uri_spec.rb +++ /dev/null @@ -1,6840 +0,0 @@ -# frozen_string_literal: true - -# Copyright (C) Bob Aman -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - - -require "spec_helper" - -require "addressable/uri" -require "uri" -require "ipaddr" -require "yaml" - -if !"".respond_to?("force_encoding") - class String - def force_encoding(encoding) - @encoding = encoding - end - - def encoding - @encoding ||= Encoding::ASCII_8BIT - end - end - - class Encoding - def initialize(name) - @name = name - end - - def to_s - return @name - end - - UTF_8 = Encoding.new("UTF-8") - ASCII_8BIT = Encoding.new("US-ASCII") - end -end - -module Fake - module URI - class HTTP - def initialize(uri) - @uri = uri - end - - def to_s - return @uri.to_s - end - - alias :to_str :to_s - end - end -end - -describe Addressable::URI, "when created with a non-numeric port number" do - it "should raise an error" do - expect do - Addressable::URI.new(:port => "bogus") - end.to raise_error(Addressable::URI::InvalidURIError) - end -end - -describe Addressable::URI, "when created with a invalid encoded port number" do - it "should raise an error" do - expect do - Addressable::URI.new(:port => "%eb") - end.to raise_error(Addressable::URI::InvalidURIError) - end -end - -describe Addressable::URI, "when created with a non-string scheme" do - it "should raise an error" do - expect do - Addressable::URI.new(:scheme => :bogus) - end.to raise_error(TypeError) - end -end - -describe Addressable::URI, "when created with a non-string user" do - it "should raise an error" do - expect do - Addressable::URI.new(:user => :bogus) - end.to raise_error(TypeError) - end -end - -describe Addressable::URI, "when created with a non-string password" do - it "should raise an error" do - expect do - Addressable::URI.new(:password => :bogus) - end.to raise_error(TypeError) - end -end - -describe Addressable::URI, "when created with a non-string userinfo" do - it "should raise an error" do - expect do - Addressable::URI.new(:userinfo => :bogus) - end.to raise_error(TypeError) - end -end - -describe Addressable::URI, "when created with a non-string host" do - it "should raise an error" do - expect do - Addressable::URI.new(:host => :bogus) - end.to raise_error(TypeError) - end -end - -describe Addressable::URI, "when created with a non-string authority" do - it "should raise an error" do - expect do - Addressable::URI.new(:authority => :bogus) - end.to raise_error(TypeError) - end -end - -describe Addressable::URI, "when created with a non-string path" do - it "should raise an error" do - expect do - Addressable::URI.new(:path => :bogus) - end.to raise_error(TypeError) - end -end - -describe Addressable::URI, "when created with a non-string query" do - it "should raise an error" do - expect do - Addressable::URI.new(:query => :bogus) - end.to raise_error(TypeError) - end -end - -describe Addressable::URI, "when created with a non-string fragment" do - it "should raise an error" do - expect do - Addressable::URI.new(:fragment => :bogus) - end.to raise_error(TypeError) - end -end - -describe Addressable::URI, "when created with a scheme but no hierarchical " + - "segment" do - it "should raise an error" do - expect do - Addressable::URI.parse("http:") - end.to raise_error(Addressable::URI::InvalidURIError) - end -end - -describe Addressable::URI, "quote handling" do - describe 'in host name' do - it "should raise an error for single quote" do - expect do - Addressable::URI.parse("http://local\"host/") - end.to raise_error(Addressable::URI::InvalidURIError) - end - end -end - -describe Addressable::URI, "newline normalization" do - it "should not accept newlines in scheme" do - expect do - Addressable::URI.parse("ht%0atp://localhost/") - end.to raise_error(Addressable::URI::InvalidURIError) - end - - it "should not unescape newline in path" do - uri = Addressable::URI.parse("http://localhost/%0a").normalize - expect(uri.to_s).to eq("http://localhost/%0A") - end - - it "should not unescape newline in hostname" do - uri = Addressable::URI.parse("http://local%0ahost/").normalize - expect(uri.to_s).to eq("http://local%0Ahost/") - end - - it "should not unescape newline in username" do - uri = Addressable::URI.parse("http://foo%0abar@localhost/").normalize - expect(uri.to_s).to eq("http://foo%0Abar@localhost/") - end - - it "should not unescape newline in username" do - uri = Addressable::URI.parse("http://example:foo%0abar@example/").normalize - expect(uri.to_s).to eq("http://example:foo%0Abar@example/") - end - - it "should not accept newline in hostname" do - uri = Addressable::URI.parse("http://localhost/") - expect do - uri.host = "local\nhost" - end.to raise_error(Addressable::URI::InvalidURIError) - end -end - -describe Addressable::URI, "when created with ambiguous path" do - it "should raise an error" do - expect do - Addressable::URI.parse("::http") - end.to raise_error(Addressable::URI::InvalidURIError) - end -end - -describe Addressable::URI, "when created with an invalid host" do - it "should raise an error" do - expect do - Addressable::URI.new(:host => "") - end.to raise_error(Addressable::URI::InvalidURIError) - end -end - -describe Addressable::URI, "when created with a host consisting of " + - "sub-delims characters" do - it "should not raise an error" do - expect do - Addressable::URI.new( - :host => Addressable::URI::CharacterClasses::SUB_DELIMS.gsub(/\\/, '') - ) - end.not_to raise_error - end -end - -describe Addressable::URI, "when created with a host consisting of " + - "unreserved characters" do - it "should not raise an error" do - expect do - Addressable::URI.new( - :host => Addressable::URI::CharacterClasses::UNRESERVED.gsub(/\\/, '') - ) - end.not_to raise_error - end -end - -describe Addressable::URI, "when created from nil components" do - before do - @uri = Addressable::URI.new - end - - it "should have a nil site value" do - expect(@uri.site).to eq(nil) - end - - it "should have an empty path" do - expect(@uri.path).to eq("") - end - - it "should be an empty uri" do - expect(@uri.to_s).to eq("") - end - - it "should have a nil default port" do - expect(@uri.default_port).to eq(nil) - end - - it "should be empty" do - expect(@uri).to be_empty - end - - it "should raise an error if the scheme is set to whitespace" do - expect do - @uri.scheme = "\t \n" - end.to raise_error(Addressable::URI::InvalidURIError, /'\t \n'/) - end - - it "should raise an error if the scheme is set to all digits" do - expect do - @uri.scheme = "123" - end.to raise_error(Addressable::URI::InvalidURIError, /'123'/) - end - - it "should raise an error if the scheme begins with a digit" do - expect do - @uri.scheme = "1scheme" - end.to raise_error(Addressable::URI::InvalidURIError, /'1scheme'/) - end - - it "should raise an error if the scheme begins with a plus" do - expect do - @uri.scheme = "+scheme" - end.to raise_error(Addressable::URI::InvalidURIError, /'\+scheme'/) - end - - it "should raise an error if the scheme begins with a dot" do - expect do - @uri.scheme = ".scheme" - end.to raise_error(Addressable::URI::InvalidURIError, /'\.scheme'/) - end - - it "should raise an error if the scheme begins with a dash" do - expect do - @uri.scheme = "-scheme" - end.to raise_error(Addressable::URI::InvalidURIError, /'-scheme'/) - end - - it "should raise an error if the scheme contains an illegal character" do - expect do - @uri.scheme = "scheme!" - end.to raise_error(Addressable::URI::InvalidURIError, /'scheme!'/) - end - - it "should raise an error if the scheme contains whitespace" do - expect do - @uri.scheme = "sch eme" - end.to raise_error(Addressable::URI::InvalidURIError, /'sch eme'/) - end - - it "should raise an error if the scheme contains a newline" do - expect do - @uri.scheme = "sch\neme" - end.to raise_error(Addressable::URI::InvalidURIError) - end - - it "should raise an error if set into an invalid state" do - expect do - @uri.user = "user" - end.to raise_error(Addressable::URI::InvalidURIError) - end - - it "should raise an error if set into an invalid state" do - expect do - @uri.password = "pass" - end.to raise_error(Addressable::URI::InvalidURIError) - end - - it "should raise an error if set into an invalid state" do - expect do - @uri.scheme = "http" - @uri.fragment = "fragment" - end.to raise_error(Addressable::URI::InvalidURIError) - end - - it "should raise an error if set into an invalid state" do - expect do - @uri.fragment = "fragment" - @uri.scheme = "http" - end.to raise_error(Addressable::URI::InvalidURIError) - end -end - -describe Addressable::URI, "when initialized from individual components" do - before do - @uri = Addressable::URI.new( - :scheme => "http", - :user => "user", - :password => "password", - :host => "example.com", - :port => 8080, - :path => "/path", - :query => "query=value", - :fragment => "fragment" - ) - end - - it "returns 'http' for #scheme" do - expect(@uri.scheme).to eq("http") - end - - it "returns 'http' for #normalized_scheme" do - expect(@uri.normalized_scheme).to eq("http") - end - - it "returns 'user' for #user" do - expect(@uri.user).to eq("user") - end - - it "returns 'user' for #normalized_user" do - expect(@uri.normalized_user).to eq("user") - end - - it "returns 'password' for #password" do - expect(@uri.password).to eq("password") - end - - it "returns 'password' for #normalized_password" do - expect(@uri.normalized_password).to eq("password") - end - - it "returns 'user:password' for #userinfo" do - expect(@uri.userinfo).to eq("user:password") - end - - it "returns 'user:password' for #normalized_userinfo" do - expect(@uri.normalized_userinfo).to eq("user:password") - end - - it "returns 'example.com' for #host" do - expect(@uri.host).to eq("example.com") - end - - it "returns 'example.com' for #normalized_host" do - expect(@uri.normalized_host).to eq("example.com") - end - - it "returns 'com' for #tld" do - expect(@uri.tld).to eq("com") - end - - it "returns 'user:password@example.com:8080' for #authority" do - expect(@uri.authority).to eq("user:password@example.com:8080") - end - - it "returns 'user:password@example.com:8080' for #normalized_authority" do - expect(@uri.normalized_authority).to eq("user:password@example.com:8080") - end - - it "returns 8080 for #port" do - expect(@uri.port).to eq(8080) - end - - it "returns 8080 for #normalized_port" do - expect(@uri.normalized_port).to eq(8080) - end - - it "returns 80 for #default_port" do - expect(@uri.default_port).to eq(80) - end - - it "returns 'http://user:password@example.com:8080' for #site" do - expect(@uri.site).to eq("http://user:password@example.com:8080") - end - - it "returns 'http://user:password@example.com:8080' for #normalized_site" do - expect(@uri.normalized_site).to eq("http://user:password@example.com:8080") - end - - it "returns '/path' for #path" do - expect(@uri.path).to eq("/path") - end - - it "returns '/path' for #normalized_path" do - expect(@uri.normalized_path).to eq("/path") - end - - it "returns 'query=value' for #query" do - expect(@uri.query).to eq("query=value") - end - - it "returns 'query=value' for #normalized_query" do - expect(@uri.normalized_query).to eq("query=value") - end - - it "returns 'fragment' for #fragment" do - expect(@uri.fragment).to eq("fragment") - end - - it "returns 'fragment' for #normalized_fragment" do - expect(@uri.normalized_fragment).to eq("fragment") - end - - it "returns #hash" do - expect(@uri.hash).not_to be nil - end - - it "returns #to_s" do - expect(@uri.to_s).to eq( - "http://user:password@example.com:8080/path?query=value#fragment" - ) - end - - it "should not be empty" do - expect(@uri).not_to be_empty - end - - it "should not be frozen" do - expect(@uri).not_to be_frozen - end - - it "should allow destructive operations" do - expect { @uri.normalize! }.not_to raise_error - end -end - -describe Addressable::URI, "when initialized from " + - "frozen individual components" do - before do - @uri = Addressable::URI.new( - :scheme => "http".freeze, - :user => "user".freeze, - :password => "password".freeze, - :host => "example.com".freeze, - :port => "8080".freeze, - :path => "/path".freeze, - :query => "query=value".freeze, - :fragment => "fragment".freeze - ) - end - - it "returns 'http' for #scheme" do - expect(@uri.scheme).to eq("http") - end - - it "returns 'http' for #normalized_scheme" do - expect(@uri.normalized_scheme).to eq("http") - end - - it "returns 'user' for #user" do - expect(@uri.user).to eq("user") - end - - it "returns 'user' for #normalized_user" do - expect(@uri.normalized_user).to eq("user") - end - - it "returns 'password' for #password" do - expect(@uri.password).to eq("password") - end - - it "returns 'password' for #normalized_password" do - expect(@uri.normalized_password).to eq("password") - end - - it "returns 'user:password' for #userinfo" do - expect(@uri.userinfo).to eq("user:password") - end - - it "returns 'user:password' for #normalized_userinfo" do - expect(@uri.normalized_userinfo).to eq("user:password") - end - - it "returns 'example.com' for #host" do - expect(@uri.host).to eq("example.com") - end - - it "returns 'example.com' for #normalized_host" do - expect(@uri.normalized_host).to eq("example.com") - end - - it "returns 'user:password@example.com:8080' for #authority" do - expect(@uri.authority).to eq("user:password@example.com:8080") - end - - it "returns 'user:password@example.com:8080' for #normalized_authority" do - expect(@uri.normalized_authority).to eq("user:password@example.com:8080") - end - - it "returns 8080 for #port" do - expect(@uri.port).to eq(8080) - end - - it "returns 8080 for #normalized_port" do - expect(@uri.normalized_port).to eq(8080) - end - - it "returns 80 for #default_port" do - expect(@uri.default_port).to eq(80) - end - - it "returns 'http://user:password@example.com:8080' for #site" do - expect(@uri.site).to eq("http://user:password@example.com:8080") - end - - it "returns 'http://user:password@example.com:8080' for #normalized_site" do - expect(@uri.normalized_site).to eq("http://user:password@example.com:8080") - end - - it "returns '/path' for #path" do - expect(@uri.path).to eq("/path") - end - - it "returns '/path' for #normalized_path" do - expect(@uri.normalized_path).to eq("/path") - end - - it "returns 'query=value' for #query" do - expect(@uri.query).to eq("query=value") - end - - it "returns 'query=value' for #normalized_query" do - expect(@uri.normalized_query).to eq("query=value") - end - - it "returns 'fragment' for #fragment" do - expect(@uri.fragment).to eq("fragment") - end - - it "returns 'fragment' for #normalized_fragment" do - expect(@uri.normalized_fragment).to eq("fragment") - end - - it "returns #hash" do - expect(@uri.hash).not_to be nil - end - - it "returns #to_s" do - expect(@uri.to_s).to eq( - "http://user:password@example.com:8080/path?query=value#fragment" - ) - end - - it "should not be empty" do - expect(@uri).not_to be_empty - end - - it "should not be frozen" do - expect(@uri).not_to be_frozen - end - - it "should allow destructive operations" do - expect { @uri.normalize! }.not_to raise_error - end -end - -describe Addressable::URI, "when parsed from a frozen string" do - before do - @uri = Addressable::URI.parse( - "http://user:password@example.com:8080/path?query=value#fragment".freeze - ) - end - - it "returns 'http' for #scheme" do - expect(@uri.scheme).to eq("http") - end - - it "returns 'http' for #normalized_scheme" do - expect(@uri.normalized_scheme).to eq("http") - end - - it "returns 'user' for #user" do - expect(@uri.user).to eq("user") - end - - it "returns 'user' for #normalized_user" do - expect(@uri.normalized_user).to eq("user") - end - - it "returns 'password' for #password" do - expect(@uri.password).to eq("password") - end - - it "returns 'password' for #normalized_password" do - expect(@uri.normalized_password).to eq("password") - end - - it "returns 'user:password' for #userinfo" do - expect(@uri.userinfo).to eq("user:password") - end - - it "returns 'user:password' for #normalized_userinfo" do - expect(@uri.normalized_userinfo).to eq("user:password") - end - - it "returns 'example.com' for #host" do - expect(@uri.host).to eq("example.com") - end - - it "returns 'example.com' for #normalized_host" do - expect(@uri.normalized_host).to eq("example.com") - end - - it "returns 'user:password@example.com:8080' for #authority" do - expect(@uri.authority).to eq("user:password@example.com:8080") - end - - it "returns 'user:password@example.com:8080' for #normalized_authority" do - expect(@uri.normalized_authority).to eq("user:password@example.com:8080") - end - - it "returns 8080 for #port" do - expect(@uri.port).to eq(8080) - end - - it "returns 8080 for #normalized_port" do - expect(@uri.normalized_port).to eq(8080) - end - - it "returns 80 for #default_port" do - expect(@uri.default_port).to eq(80) - end - - it "returns 'http://user:password@example.com:8080' for #site" do - expect(@uri.site).to eq("http://user:password@example.com:8080") - end - - it "returns 'http://user:password@example.com:8080' for #normalized_site" do - expect(@uri.normalized_site).to eq("http://user:password@example.com:8080") - end - - it "returns '/path' for #path" do - expect(@uri.path).to eq("/path") - end - - it "returns '/path' for #normalized_path" do - expect(@uri.normalized_path).to eq("/path") - end - - it "returns 'query=value' for #query" do - expect(@uri.query).to eq("query=value") - end - - it "returns 'query=value' for #normalized_query" do - expect(@uri.normalized_query).to eq("query=value") - end - - it "returns 'fragment' for #fragment" do - expect(@uri.fragment).to eq("fragment") - end - - it "returns 'fragment' for #normalized_fragment" do - expect(@uri.normalized_fragment).to eq("fragment") - end - - it "returns #hash" do - expect(@uri.hash).not_to be nil - end - - it "returns #to_s" do - expect(@uri.to_s).to eq( - "http://user:password@example.com:8080/path?query=value#fragment" - ) - end - - it "should not be empty" do - expect(@uri).not_to be_empty - end - - it "should not be frozen" do - expect(@uri).not_to be_frozen - end - - it "should allow destructive operations" do - expect { @uri.normalize! }.not_to raise_error - end -end - -describe Addressable::URI, "when frozen" do - before do - @uri = Addressable::URI.new.freeze - end - - it "returns nil for #scheme" do - expect(@uri.scheme).to eq(nil) - end - - it "returns nil for #normalized_scheme" do - expect(@uri.normalized_scheme).to eq(nil) - end - - it "returns nil for #user" do - expect(@uri.user).to eq(nil) - end - - it "returns nil for #normalized_user" do - expect(@uri.normalized_user).to eq(nil) - end - - it "returns nil for #password" do - expect(@uri.password).to eq(nil) - end - - it "returns nil for #normalized_password" do - expect(@uri.normalized_password).to eq(nil) - end - - it "returns nil for #userinfo" do - expect(@uri.userinfo).to eq(nil) - end - - it "returns nil for #normalized_userinfo" do - expect(@uri.normalized_userinfo).to eq(nil) - end - - it "returns nil for #host" do - expect(@uri.host).to eq(nil) - end - - it "returns nil for #normalized_host" do - expect(@uri.normalized_host).to eq(nil) - end - - it "returns nil for #authority" do - expect(@uri.authority).to eq(nil) - end - - it "returns nil for #normalized_authority" do - expect(@uri.normalized_authority).to eq(nil) - end - - it "returns nil for #port" do - expect(@uri.port).to eq(nil) - end - - it "returns nil for #normalized_port" do - expect(@uri.normalized_port).to eq(nil) - end - - it "returns nil for #default_port" do - expect(@uri.default_port).to eq(nil) - end - - it "returns nil for #site" do - expect(@uri.site).to eq(nil) - end - - it "returns nil for #normalized_site" do - expect(@uri.normalized_site).to eq(nil) - end - - it "returns '' for #path" do - expect(@uri.path).to eq('') - end - - it "returns '' for #normalized_path" do - expect(@uri.normalized_path).to eq('') - end - - it "returns nil for #query" do - expect(@uri.query).to eq(nil) - end - - it "returns nil for #normalized_query" do - expect(@uri.normalized_query).to eq(nil) - end - - it "returns nil for #fragment" do - expect(@uri.fragment).to eq(nil) - end - - it "returns nil for #normalized_fragment" do - expect(@uri.normalized_fragment).to eq(nil) - end - - it "returns #hash" do - expect(@uri.hash).not_to be nil - end - - it "returns #to_s" do - expect(@uri.to_s).to eq('') - end - - it "should be empty" do - expect(@uri).to be_empty - end - - it "should be frozen" do - expect(@uri).to be_frozen - end - - it "should not be frozen after duping" do - expect(@uri.dup).not_to be_frozen - end - - it "should not allow destructive operations" do - expect { @uri.normalize! }.to raise_error { |error| - expect(error.message).to match(/can't modify frozen/) - expect(error).to satisfy { |e| RuntimeError === e || TypeError === e } - } - end -end - -describe Addressable::URI, "when frozen" do - before do - @uri = Addressable::URI.parse( - "HTTP://example.com.:%38%30/%70a%74%68?a=%31#1%323" - ).freeze - end - - it "returns 'HTTP' for #scheme" do - expect(@uri.scheme).to eq("HTTP") - end - - it "returns 'http' for #normalized_scheme" do - expect(@uri.normalized_scheme).to eq("http") - expect(@uri.normalize.scheme).to eq("http") - end - - it "returns nil for #user" do - expect(@uri.user).to eq(nil) - end - - it "returns nil for #normalized_user" do - expect(@uri.normalized_user).to eq(nil) - end - - it "returns nil for #password" do - expect(@uri.password).to eq(nil) - end - - it "returns nil for #normalized_password" do - expect(@uri.normalized_password).to eq(nil) - end - - it "returns nil for #userinfo" do - expect(@uri.userinfo).to eq(nil) - end - - it "returns nil for #normalized_userinfo" do - expect(@uri.normalized_userinfo).to eq(nil) - end - - it "returns 'example.com.' for #host" do - expect(@uri.host).to eq("example.com.") - end - - it "returns nil for #normalized_host" do - expect(@uri.normalized_host).to eq("example.com") - expect(@uri.normalize.host).to eq("example.com") - end - - it "returns 'example.com.:80' for #authority" do - expect(@uri.authority).to eq("example.com.:80") - end - - it "returns 'example.com:80' for #normalized_authority" do - expect(@uri.normalized_authority).to eq("example.com") - expect(@uri.normalize.authority).to eq("example.com") - end - - it "returns 80 for #port" do - expect(@uri.port).to eq(80) - end - - it "returns nil for #normalized_port" do - expect(@uri.normalized_port).to eq(nil) - expect(@uri.normalize.port).to eq(nil) - end - - it "returns 80 for #default_port" do - expect(@uri.default_port).to eq(80) - end - - it "returns 'HTTP://example.com.:80' for #site" do - expect(@uri.site).to eq("HTTP://example.com.:80") - end - - it "returns 'http://example.com' for #normalized_site" do - expect(@uri.normalized_site).to eq("http://example.com") - expect(@uri.normalize.site).to eq("http://example.com") - end - - it "returns '/%70a%74%68' for #path" do - expect(@uri.path).to eq("/%70a%74%68") - end - - it "returns '/path' for #normalized_path" do - expect(@uri.normalized_path).to eq("/path") - expect(@uri.normalize.path).to eq("/path") - end - - it "returns 'a=%31' for #query" do - expect(@uri.query).to eq("a=%31") - end - - it "returns 'a=1' for #normalized_query" do - expect(@uri.normalized_query).to eq("a=1") - expect(@uri.normalize.query).to eq("a=1") - end - - it "returns '/%70a%74%68?a=%31' for #request_uri" do - expect(@uri.request_uri).to eq("/%70a%74%68?a=%31") - end - - it "returns '1%323' for #fragment" do - expect(@uri.fragment).to eq("1%323") - end - - it "returns '123' for #normalized_fragment" do - expect(@uri.normalized_fragment).to eq("123") - expect(@uri.normalize.fragment).to eq("123") - end - - it "returns #hash" do - expect(@uri.hash).not_to be nil - end - - it "returns #to_s" do - expect(@uri.to_s).to eq('HTTP://example.com.:80/%70a%74%68?a=%31#1%323') - expect(@uri.normalize.to_s).to eq('http://example.com/path?a=1#123') - end - - it "should not be empty" do - expect(@uri).not_to be_empty - end - - it "should be frozen" do - expect(@uri).to be_frozen - end - - it "should not be frozen after duping" do - expect(@uri.dup).not_to be_frozen - end - - it "should not allow destructive operations" do - expect { @uri.normalize! }.to raise_error { |error| - expect(error.message).to match(/can't modify frozen/) - expect(error).to satisfy { |e| RuntimeError === e || TypeError === e } - } - end -end - -describe Addressable::URI, "when normalized and then deeply frozen" do - before do - @uri = Addressable::URI.parse( - "http://user:password@example.com:8080/path?query=value#fragment" - ).normalize! - - @uri.instance_variables.each do |var| - @uri.instance_variable_set(var, @uri.instance_variable_get(var).freeze) - end - - @uri.freeze - end - - it "#normalized_scheme should not error" do - expect { @uri.normalized_scheme }.not_to raise_error - end - - it "#normalized_user should not error" do - expect { @uri.normalized_user }.not_to raise_error - end - - it "#normalized_password should not error" do - expect { @uri.normalized_password }.not_to raise_error - end - - it "#normalized_userinfo should not error" do - expect { @uri.normalized_userinfo }.not_to raise_error - end - - it "#normalized_host should not error" do - expect { @uri.normalized_host }.not_to raise_error - end - - it "#normalized_authority should not error" do - expect { @uri.normalized_authority }.not_to raise_error - end - - it "#normalized_port should not error" do - expect { @uri.normalized_port }.not_to raise_error - end - - it "#normalized_site should not error" do - expect { @uri.normalized_site }.not_to raise_error - end - - it "#normalized_path should not error" do - expect { @uri.normalized_path }.not_to raise_error - end - - it "#normalized_query should not error" do - expect { @uri.normalized_query }.not_to raise_error - end - - it "#normalized_fragment should not error" do - expect { @uri.normalized_fragment }.not_to raise_error - end - - it "should be frozen" do - expect(@uri).to be_frozen - end - - it "should not allow destructive operations" do - expect { @uri.normalize! }.to raise_error(RuntimeError) - end -end - -describe Addressable::URI, "when created from string components" do - before do - @uri = Addressable::URI.new( - :scheme => "http", :host => "example.com" - ) - end - - it "should have a site value of 'http://example.com'" do - expect(@uri.site).to eq("http://example.com") - end - - it "should be equal to the equivalent parsed URI" do - expect(@uri).to eq(Addressable::URI.parse("http://example.com")) - end - - it "should raise an error if invalid components omitted" do - expect do - @uri.omit(:bogus) - end.to raise_error(ArgumentError) - expect do - @uri.omit(:scheme, :bogus, :path) - end.to raise_error(ArgumentError) - end -end - -describe Addressable::URI, "when created with a nil host but " + - "non-nil authority components" do - it "should raise an error" do - expect do - Addressable::URI.new(:user => "user", :password => "pass", :port => 80) - end.to raise_error(Addressable::URI::InvalidURIError) - end -end - -describe Addressable::URI, "when created with both an authority and a user" do - it "should raise an error" do - expect do - Addressable::URI.new( - :user => "user", :authority => "user@example.com:80" - ) - end.to raise_error(ArgumentError) - end -end - -describe Addressable::URI, "when created with an authority and no port" do - before do - @uri = Addressable::URI.new(:authority => "user@example.com") - end - - it "should not infer a port" do - expect(@uri.port).to eq(nil) - expect(@uri.default_port).to eq(nil) - expect(@uri.inferred_port).to eq(nil) - end - - it "should have a site value of '//user@example.com'" do - expect(@uri.site).to eq("//user@example.com") - end - - it "should have a 'null' origin" do - expect(@uri.origin).to eq('null') - end -end - -describe Addressable::URI, "when created with a host with trailing dots" do - before do - @uri = Addressable::URI.new(:authority => "example...") - end - - it "should have a stable normalized form" do - expect(@uri.normalize.normalize.normalize.host).to eq( - @uri.normalize.host - ) - end -end - -describe Addressable::URI, "when created with a host with a backslash" do - it "should raise an error" do - expect do - Addressable::URI.new(:authority => "example\\example") - end.to raise_error(Addressable::URI::InvalidURIError) - end -end - -describe Addressable::URI, "when created with a host with a slash" do - it "should raise an error" do - expect do - Addressable::URI.new(:authority => "example/example") - end.to raise_error(Addressable::URI::InvalidURIError) - end -end - -describe Addressable::URI, "when created with a host with a space" do - it "should raise an error" do - expect do - Addressable::URI.new(:authority => "example example") - end.to raise_error(Addressable::URI::InvalidURIError) - end -end - -describe Addressable::URI, "when created with both a userinfo and a user" do - it "should raise an error" do - expect do - Addressable::URI.new(:user => "user", :userinfo => "user:pass") - end.to raise_error(ArgumentError) - end -end - -describe Addressable::URI, "when created with a path that hasn't been " + - "prefixed with a '/' but a host specified" do - before do - @uri = Addressable::URI.new( - :scheme => "http", :host => "example.com", :path => "path" - ) - end - - it "should prefix a '/' to the path" do - expect(@uri).to eq(Addressable::URI.parse("http://example.com/path")) - end - - it "should have a site value of 'http://example.com'" do - expect(@uri.site).to eq("http://example.com") - end - - it "should have an origin of 'http://example.com" do - expect(@uri.origin).to eq('http://example.com') - end -end - -describe Addressable::URI, "when created with a path that hasn't been " + - "prefixed with a '/' but no host specified" do - before do - @uri = Addressable::URI.new( - :scheme => "http", :path => "path" - ) - end - - it "should not prefix a '/' to the path" do - expect(@uri).to eq(Addressable::URI.parse("http:path")) - end - - it "should have a site value of 'http:'" do - expect(@uri.site).to eq("http:") - end - - it "should have a 'null' origin" do - expect(@uri.origin).to eq('null') - end -end - -describe Addressable::URI, "when parsed from an Addressable::URI object" do - it "should not have unexpected side-effects" do - original_uri = Addressable::URI.parse("http://example.com/") - new_uri = Addressable::URI.parse(original_uri) - new_uri.host = 'www.example.com' - expect(new_uri.host).to eq('www.example.com') - expect(new_uri.to_s).to eq('http://www.example.com/') - expect(original_uri.host).to eq('example.com') - expect(original_uri.to_s).to eq('http://example.com/') - end - - it "should not have unexpected side-effects" do - original_uri = Addressable::URI.parse("http://example.com/") - new_uri = Addressable::URI.heuristic_parse(original_uri) - new_uri.host = 'www.example.com' - expect(new_uri.host).to eq('www.example.com') - expect(new_uri.to_s).to eq('http://www.example.com/') - expect(original_uri.host).to eq('example.com') - expect(original_uri.to_s).to eq('http://example.com/') - end - - it "should not have unexpected side-effects" do - original_uri = Addressable::URI.parse("http://example.com/") - new_uri = Addressable::URI.parse(original_uri) - new_uri.origin = 'https://www.example.com:8080' - expect(new_uri.host).to eq('www.example.com') - expect(new_uri.to_s).to eq('https://www.example.com:8080/') - expect(original_uri.host).to eq('example.com') - expect(original_uri.to_s).to eq('http://example.com/') - end - - it "should not have unexpected side-effects" do - original_uri = Addressable::URI.parse("http://example.com/") - new_uri = Addressable::URI.heuristic_parse(original_uri) - new_uri.origin = 'https://www.example.com:8080' - expect(new_uri.host).to eq('www.example.com') - expect(new_uri.to_s).to eq('https://www.example.com:8080/') - expect(original_uri.host).to eq('example.com') - expect(original_uri.to_s).to eq('http://example.com/') - end -end - -describe Addressable::URI, "when parsed from something that looks " + - "like a URI object" do - it "should parse without error" do - uri = Addressable::URI.parse(Fake::URI::HTTP.new("http://example.com/")) - expect do - Addressable::URI.parse(uri) - end.not_to raise_error - end -end - -describe Addressable::URI, "when parsed from a standard library URI object" do - it "should parse without error" do - uri = Addressable::URI.parse(URI.parse("http://example.com/")) - expect do - Addressable::URI.parse(uri) - end.not_to raise_error - end -end - -describe Addressable::URI, "when parsed from ''" do - before do - @uri = Addressable::URI.parse("") - end - - it "should have no scheme" do - expect(@uri.scheme).to eq(nil) - end - - it "should not be considered to be ip-based" do - expect(@uri).not_to be_ip_based - end - - it "should have a path of ''" do - expect(@uri.path).to eq("") - end - - it "should have a request URI of '/'" do - expect(@uri.request_uri).to eq("/") - end - - it "should be considered relative" do - expect(@uri).to be_relative - end - - it "should be considered to be in normal form" do - expect(@uri.normalize).to be_eql(@uri) - end - - it "should have a 'null' origin" do - expect(@uri.origin).to eq('null') - end -end - -# Section 1.1.2 of RFC 3986 -describe Addressable::URI, "when parsed from " + - "'ftp://ftp.is.co.za/rfc/rfc1808.txt'" do - before do - @uri = Addressable::URI.parse("ftp://ftp.is.co.za/rfc/rfc1808.txt") - end - - it "should use the 'ftp' scheme" do - expect(@uri.scheme).to eq("ftp") - end - - it "should be considered to be ip-based" do - expect(@uri).to be_ip_based - end - - it "should have a host of 'ftp.is.co.za'" do - expect(@uri.host).to eq("ftp.is.co.za") - end - - it "should have inferred_port of 21" do - expect(@uri.inferred_port).to eq(21) - end - - it "should have a path of '/rfc/rfc1808.txt'" do - expect(@uri.path).to eq("/rfc/rfc1808.txt") - end - - it "should not have a request URI" do - expect(@uri.request_uri).to eq(nil) - end - - it "should be considered to be in normal form" do - expect(@uri.normalize).to be_eql(@uri) - end - - it "should have an origin of 'ftp://ftp.is.co.za'" do - expect(@uri.origin).to eq('ftp://ftp.is.co.za') - end -end - -# Section 1.1.2 of RFC 3986 -describe Addressable::URI, "when parsed from " + - "'http://www.ietf.org/rfc/rfc2396.txt'" do - before do - @uri = Addressable::URI.parse("http://www.ietf.org/rfc/rfc2396.txt") - end - - it "should use the 'http' scheme" do - expect(@uri.scheme).to eq("http") - end - - it "should be considered to be ip-based" do - expect(@uri).to be_ip_based - end - - it "should have a host of 'www.ietf.org'" do - expect(@uri.host).to eq("www.ietf.org") - end - - it "should have inferred_port of 80" do - expect(@uri.inferred_port).to eq(80) - end - - it "should have a path of '/rfc/rfc2396.txt'" do - expect(@uri.path).to eq("/rfc/rfc2396.txt") - end - - it "should have a request URI of '/rfc/rfc2396.txt'" do - expect(@uri.request_uri).to eq("/rfc/rfc2396.txt") - end - - it "should be considered to be in normal form" do - expect(@uri.normalize).to be_eql(@uri) - end - - it "should correctly omit components" do - expect(@uri.omit(:scheme).to_s).to eq("//www.ietf.org/rfc/rfc2396.txt") - expect(@uri.omit(:path).to_s).to eq("http://www.ietf.org") - end - - it "should correctly omit components destructively" do - @uri.omit!(:scheme) - expect(@uri.to_s).to eq("//www.ietf.org/rfc/rfc2396.txt") - end - - it "should have an origin of 'http://www.ietf.org'" do - expect(@uri.origin).to eq('http://www.ietf.org') - end -end - -# Section 1.1.2 of RFC 3986 -describe Addressable::URI, "when parsed from " + - "'ldap://[2001:db8::7]/c=GB?objectClass?one'" do - before do - @uri = Addressable::URI.parse("ldap://[2001:db8::7]/c=GB?objectClass?one") - end - - it "should use the 'ldap' scheme" do - expect(@uri.scheme).to eq("ldap") - end - - it "should be considered to be ip-based" do - expect(@uri).to be_ip_based - end - - it "should have a host of '[2001:db8::7]'" do - expect(@uri.host).to eq("[2001:db8::7]") - end - - it "should have inferred_port of 389" do - expect(@uri.inferred_port).to eq(389) - end - - it "should have a path of '/c=GB'" do - expect(@uri.path).to eq("/c=GB") - end - - it "should not have a request URI" do - expect(@uri.request_uri).to eq(nil) - end - - it "should not allow request URI assignment" do - expect do - @uri.request_uri = "/" - end.to raise_error(Addressable::URI::InvalidURIError) - end - - it "should have a query of 'objectClass?one'" do - expect(@uri.query).to eq("objectClass?one") - end - - it "should be considered to be in normal form" do - expect(@uri.normalize).to be_eql(@uri) - end - - it "should correctly omit components" do - expect(@uri.omit(:scheme, :authority).to_s).to eq("/c=GB?objectClass?one") - expect(@uri.omit(:path).to_s).to eq("ldap://[2001:db8::7]?objectClass?one") - end - - it "should correctly omit components destructively" do - @uri.omit!(:scheme, :authority) - expect(@uri.to_s).to eq("/c=GB?objectClass?one") - end - - it "should raise an error if omission would create an invalid URI" do - expect do - @uri.omit(:authority, :path) - end.to raise_error(Addressable::URI::InvalidURIError) - end - - it "should have an origin of 'ldap://[2001:db8::7]'" do - expect(@uri.origin).to eq('ldap://[2001:db8::7]') - end -end - -# Section 1.1.2 of RFC 3986 -describe Addressable::URI, "when parsed from " + - "'mailto:John.Doe@example.com'" do - before do - @uri = Addressable::URI.parse("mailto:John.Doe@example.com") - end - - it "should use the 'mailto' scheme" do - expect(@uri.scheme).to eq("mailto") - end - - it "should not be considered to be ip-based" do - expect(@uri).not_to be_ip_based - end - - it "should not have an inferred_port" do - expect(@uri.inferred_port).to eq(nil) - end - - it "should have a path of 'John.Doe@example.com'" do - expect(@uri.path).to eq("John.Doe@example.com") - end - - it "should not have a request URI" do - expect(@uri.request_uri).to eq(nil) - end - - it "should be considered to be in normal form" do - expect(@uri.normalize).to be_eql(@uri) - end - - it "should have a 'null' origin" do - expect(@uri.origin).to eq('null') - end -end - -# Section 2 of RFC 6068 -describe Addressable::URI, "when parsed from " + - "'mailto:?to=addr1@an.example,addr2@an.example'" do - before do - @uri = Addressable::URI.parse( - "mailto:?to=addr1@an.example,addr2@an.example" - ) - end - - it "should use the 'mailto' scheme" do - expect(@uri.scheme).to eq("mailto") - end - - it "should not be considered to be ip-based" do - expect(@uri).not_to be_ip_based - end - - it "should not have an inferred_port" do - expect(@uri.inferred_port).to eq(nil) - end - - it "should have a path of ''" do - expect(@uri.path).to eq("") - end - - it "should not have a request URI" do - expect(@uri.request_uri).to eq(nil) - end - - it "should have the To: field value parameterized" do - expect(@uri.query_values(Hash)["to"]).to eq( - "addr1@an.example,addr2@an.example" - ) - end - - it "should be considered to be in normal form" do - expect(@uri.normalize).to be_eql(@uri) - end - - it "should have a 'null' origin" do - expect(@uri.origin).to eq('null') - end -end - -# Section 1.1.2 of RFC 3986 -describe Addressable::URI, "when parsed from " + - "'news:comp.infosystems.www.servers.unix'" do - before do - @uri = Addressable::URI.parse("news:comp.infosystems.www.servers.unix") - end - - it "should use the 'news' scheme" do - expect(@uri.scheme).to eq("news") - end - - it "should not have an inferred_port" do - expect(@uri.inferred_port).to eq(nil) - end - - it "should not be considered to be ip-based" do - expect(@uri).not_to be_ip_based - end - - it "should have a path of 'comp.infosystems.www.servers.unix'" do - expect(@uri.path).to eq("comp.infosystems.www.servers.unix") - end - - it "should not have a request URI" do - expect(@uri.request_uri).to eq(nil) - end - - it "should be considered to be in normal form" do - expect(@uri.normalize).to be_eql(@uri) - end - - it "should have a 'null' origin" do - expect(@uri.origin).to eq('null') - end -end - -# Section 1.1.2 of RFC 3986 -describe Addressable::URI, "when parsed from " + - "'tel:+1-816-555-1212'" do - before do - @uri = Addressable::URI.parse("tel:+1-816-555-1212") - end - - it "should use the 'tel' scheme" do - expect(@uri.scheme).to eq("tel") - end - - it "should not be considered to be ip-based" do - expect(@uri).not_to be_ip_based - end - - it "should not have an inferred_port" do - expect(@uri.inferred_port).to eq(nil) - end - - it "should have a path of '+1-816-555-1212'" do - expect(@uri.path).to eq("+1-816-555-1212") - end - - it "should not have a request URI" do - expect(@uri.request_uri).to eq(nil) - end - - it "should be considered to be in normal form" do - expect(@uri.normalize).to be_eql(@uri) - end - - it "should have a 'null' origin" do - expect(@uri.origin).to eq('null') - end -end - -# Section 1.1.2 of RFC 3986 -describe Addressable::URI, "when parsed from " + - "'telnet://192.0.2.16:80/'" do - before do - @uri = Addressable::URI.parse("telnet://192.0.2.16:80/") - end - - it "should use the 'telnet' scheme" do - expect(@uri.scheme).to eq("telnet") - end - - it "should have a host of '192.0.2.16'" do - expect(@uri.host).to eq("192.0.2.16") - end - - it "should have a port of 80" do - expect(@uri.port).to eq(80) - end - - it "should have a inferred_port of 80" do - expect(@uri.inferred_port).to eq(80) - end - - it "should have a default_port of 23" do - expect(@uri.default_port).to eq(23) - end - - it "should be considered to be ip-based" do - expect(@uri).to be_ip_based - end - - it "should have a path of '/'" do - expect(@uri.path).to eq("/") - end - - it "should not have a request URI" do - expect(@uri.request_uri).to eq(nil) - end - - it "should be considered to be in normal form" do - expect(@uri.normalize).to be_eql(@uri) - end - - it "should have an origin of 'telnet://192.0.2.16:80'" do - expect(@uri.origin).to eq('telnet://192.0.2.16:80') - end -end - -# Section 1.1.2 of RFC 3986 -describe Addressable::URI, "when parsed from " + - "'urn:oasis:names:specification:docbook:dtd:xml:4.1.2'" do - before do - @uri = Addressable::URI.parse( - "urn:oasis:names:specification:docbook:dtd:xml:4.1.2") - end - - it "should use the 'urn' scheme" do - expect(@uri.scheme).to eq("urn") - end - - it "should not have an inferred_port" do - expect(@uri.inferred_port).to eq(nil) - end - - it "should not be considered to be ip-based" do - expect(@uri).not_to be_ip_based - end - - it "should have a path of " + - "'oasis:names:specification:docbook:dtd:xml:4.1.2'" do - expect(@uri.path).to eq("oasis:names:specification:docbook:dtd:xml:4.1.2") - end - - it "should not have a request URI" do - expect(@uri.request_uri).to eq(nil) - end - - it "should be considered to be in normal form" do - expect(@uri.normalize).to be_eql(@uri) - end - - it "should have a 'null' origin" do - expect(@uri.origin).to eq('null') - end -end - -describe Addressable::URI, "when heuristically parsed from " + - "'192.0.2.16:8000/path'" do - before do - @uri = Addressable::URI.heuristic_parse("192.0.2.16:8000/path") - end - - it "should use the 'http' scheme" do - expect(@uri.scheme).to eq("http") - end - - it "should have a host of '192.0.2.16'" do - expect(@uri.host).to eq("192.0.2.16") - end - - it "should have a port of '8000'" do - expect(@uri.port).to eq(8000) - end - - it "should be considered to be ip-based" do - expect(@uri).to be_ip_based - end - - it "should have a path of '/path'" do - expect(@uri.path).to eq("/path") - end - - it "should be considered to be in normal form" do - expect(@uri.normalize).to be_eql(@uri) - end - - it "should have an origin of 'http://192.0.2.16:8000'" do - expect(@uri.origin).to eq('http://192.0.2.16:8000') - end -end - -describe Addressable::URI, "when parsed from " + - "'http://example.com'" do - before do - @uri = Addressable::URI.parse("http://example.com") - end - - it "when inspected, should have the correct URI" do - expect(@uri.inspect).to include("http://example.com") - end - - it "when inspected, should have the correct class name" do - expect(@uri.inspect).to include("Addressable::URI") - end - - it "when inspected, should have the correct object id" do - expect(@uri.inspect).to include("%#0x" % @uri.object_id) - end - - it "should use the 'http' scheme" do - expect(@uri.scheme).to eq("http") - end - - it "should be considered to be ip-based" do - expect(@uri).to be_ip_based - end - - it "should have an authority segment of 'example.com'" do - expect(@uri.authority).to eq("example.com") - end - - it "should have a host of 'example.com'" do - expect(@uri.host).to eq("example.com") - end - - it "should be considered ip-based" do - expect(@uri).to be_ip_based - end - - it "should have no username" do - expect(@uri.user).to eq(nil) - end - - it "should have no password" do - expect(@uri.password).to eq(nil) - end - - it "should use port 80" do - expect(@uri.inferred_port).to eq(80) - end - - it "should not have a specified port" do - expect(@uri.port).to eq(nil) - end - - it "should have an empty path" do - expect(@uri.path).to eq("") - end - - it "should have no query string" do - expect(@uri.query).to eq(nil) - expect(@uri.query_values).to eq(nil) - end - - it "should have a request URI of '/'" do - expect(@uri.request_uri).to eq("/") - end - - it "should have no fragment" do - expect(@uri.fragment).to eq(nil) - end - - it "should be considered absolute" do - expect(@uri).to be_absolute - end - - it "should not be considered relative" do - expect(@uri).not_to be_relative - end - - it "should not be exactly equal to 42" do - expect(@uri.eql?(42)).to eq(false) - end - - it "should not be equal to 42" do - expect(@uri == 42).to eq(false) - end - - it "should not be roughly equal to 42" do - expect(@uri === 42).to eq(false) - end - - it "should be exactly equal to http://example.com" do - expect(@uri.eql?(Addressable::URI.parse("http://example.com"))).to eq(true) - end - - it "should be roughly equal to http://example.com/" do - expect(@uri === Addressable::URI.parse("http://example.com/")).to eq(true) - end - - it "should be roughly equal to the string 'http://example.com/'" do - expect(@uri === "http://example.com/").to eq(true) - end - - it "should not be roughly equal to the string " + - "'http://example.com:bogus/'" do - expect do - expect(@uri === "http://example.com:bogus/").to eq(false) - end.not_to raise_error - end - - it "should result in itself when joined with itself" do - expect(@uri.join(@uri).to_s).to eq("http://example.com") - expect(@uri.join!(@uri).to_s).to eq("http://example.com") - end - - it "should be equivalent to http://EXAMPLE.com" do - expect(@uri).to eq(Addressable::URI.parse("http://EXAMPLE.com")) - end - - it "should be equivalent to http://EXAMPLE.com:80/" do - expect(@uri).to eq(Addressable::URI.parse("http://EXAMPLE.com:80/")) - end - - it "should have the same hash as http://example.com" do - expect(@uri.hash).to eq(Addressable::URI.parse("http://example.com").hash) - end - - it "should have the same hash as http://EXAMPLE.com after assignment" do - @uri.origin = "http://EXAMPLE.com" - expect(@uri.hash).to eq(Addressable::URI.parse("http://EXAMPLE.com").hash) - end - - it "should have a different hash from http://EXAMPLE.com" do - expect(@uri.hash).not_to eq(Addressable::URI.parse("http://EXAMPLE.com").hash) - end - - it "should not allow origin assignment without scheme" do - expect do - @uri.origin = "example.com" - end.to raise_error(Addressable::URI::InvalidURIError) - end - - it "should not allow origin assignment without host" do - expect do - @uri.origin = "http://" - end.to raise_error(Addressable::URI::InvalidURIError) - end - - it "should not allow origin assignment with bogus type" do - expect do - @uri.origin = :bogus - end.to raise_error(TypeError) - end - - # Section 6.2.3 of RFC 3986 - it "should be equivalent to http://example.com/" do - expect(@uri).to eq(Addressable::URI.parse("http://example.com/")) - end - - # Section 6.2.3 of RFC 3986 - it "should be equivalent to http://example.com:/" do - expect(@uri).to eq(Addressable::URI.parse("http://example.com:/")) - end - - # Section 6.2.3 of RFC 3986 - it "should be equivalent to http://example.com:80/" do - expect(@uri).to eq(Addressable::URI.parse("http://example.com:80/")) - end - - # Section 6.2.2.1 of RFC 3986 - it "should be equivalent to http://EXAMPLE.COM/" do - expect(@uri).to eq(Addressable::URI.parse("http://EXAMPLE.COM/")) - end - - it "should have a route of '/path/' to 'http://example.com/path/'" do - expect(@uri.route_to("http://example.com/path/")).to eq( - Addressable::URI.parse("/path/") - ) - end - - it "should have a route of '..' from 'http://example.com/path/'" do - expect(@uri.route_from("http://example.com/path/")).to eq( - Addressable::URI.parse("..") - ) - end - - it "should have a route of '#' to 'http://example.com/'" do - expect(@uri.route_to("http://example.com/")).to eq( - Addressable::URI.parse("#") - ) - end - - it "should have a route of 'http://elsewhere.com/' to " + - "'http://elsewhere.com/'" do - expect(@uri.route_to("http://elsewhere.com/")).to eq( - Addressable::URI.parse("http://elsewhere.com/") - ) - end - - it "when joined with 'relative/path' should be " + - "'http://example.com/relative/path'" do - expect(@uri.join('relative/path')).to eq( - Addressable::URI.parse("http://example.com/relative/path") - ) - end - - it "when joined with a bogus object a TypeError should be raised" do - expect do - @uri.join(42) - end.to raise_error(TypeError) - end - - it "should have the correct username after assignment" do - @uri.user = "newuser" - expect(@uri.user).to eq("newuser") - expect(@uri.password).to eq(nil) - expect(@uri.to_s).to eq("http://newuser@example.com") - end - - it "should have the correct username after assignment" do - @uri.user = "user@123!" - expect(@uri.user).to eq("user@123!") - expect(@uri.normalized_user).to eq("user%40123%21") - expect(@uri.password).to eq(nil) - expect(@uri.normalize.to_s).to eq("http://user%40123%21@example.com/") - end - - it "should have the correct password after assignment" do - @uri.password = "newpass" - expect(@uri.password).to eq("newpass") - expect(@uri.user).to eq("") - expect(@uri.to_s).to eq("http://:newpass@example.com") - end - - it "should have the correct password after assignment" do - @uri.password = "#secret@123!" - expect(@uri.password).to eq("#secret@123!") - expect(@uri.normalized_password).to eq("%23secret%40123%21") - expect(@uri.user).to eq("") - expect(@uri.normalize.to_s).to eq("http://:%23secret%40123%21@example.com/") - expect(@uri.omit(:password).to_s).to eq("http://example.com") - end - - it "should have the correct user/pass after repeated assignment" do - @uri.user = nil - expect(@uri.user).to eq(nil) - @uri.password = "newpass" - expect(@uri.password).to eq("newpass") - # Username cannot be nil if the password is set - expect(@uri.user).to eq("") - expect(@uri.to_s).to eq("http://:newpass@example.com") - @uri.user = "newuser" - expect(@uri.user).to eq("newuser") - @uri.password = nil - expect(@uri.password).to eq(nil) - expect(@uri.to_s).to eq("http://newuser@example.com") - @uri.user = "newuser" - expect(@uri.user).to eq("newuser") - @uri.password = "" - expect(@uri.password).to eq("") - expect(@uri.to_s).to eq("http://newuser:@example.com") - @uri.password = "newpass" - expect(@uri.password).to eq("newpass") - @uri.user = nil - # Username cannot be nil if the password is set - expect(@uri.user).to eq("") - expect(@uri.to_s).to eq("http://:newpass@example.com") - end - - it "should have the correct user/pass after userinfo assignment" do - @uri.user = "newuser" - expect(@uri.user).to eq("newuser") - @uri.password = "newpass" - expect(@uri.password).to eq("newpass") - @uri.userinfo = nil - expect(@uri.userinfo).to eq(nil) - expect(@uri.user).to eq(nil) - expect(@uri.password).to eq(nil) - end - - it "should correctly convert to a hash" do - expect(@uri.to_hash).to eq({ - :scheme => "http", - :user => nil, - :password => nil, - :host => "example.com", - :port => nil, - :path => "", - :query => nil, - :fragment => nil - }) - end - - it "should be identical to its duplicate" do - expect(@uri).to eq(@uri.dup) - end - - it "should have an origin of 'http://example.com'" do - expect(@uri.origin).to eq('http://example.com') - end -end - -# Section 5.1.2 of RFC 2616 -describe Addressable::URI, "when parsed from " + - "'HTTP://www.w3.org/pub/WWW/TheProject.html'" do - before do - @uri = Addressable::URI.parse("HTTP://www.w3.org/pub/WWW/TheProject.html") - end - - it "should have the correct request URI" do - expect(@uri.request_uri).to eq("/pub/WWW/TheProject.html") - end - - it "should have the correct request URI after assignment" do - @uri.request_uri = "/pub/WWW/TheProject.html?" - expect(@uri.request_uri).to eq("/pub/WWW/TheProject.html?") - expect(@uri.path).to eq("/pub/WWW/TheProject.html") - expect(@uri.query).to eq("") - end - - it "should have the correct request URI after assignment" do - @uri.request_uri = "/some/where/else.html" - expect(@uri.request_uri).to eq("/some/where/else.html") - expect(@uri.path).to eq("/some/where/else.html") - expect(@uri.query).to eq(nil) - end - - it "should have the correct request URI after assignment" do - @uri.request_uri = "/some/where/else.html?query?string" - expect(@uri.request_uri).to eq("/some/where/else.html?query?string") - expect(@uri.path).to eq("/some/where/else.html") - expect(@uri.query).to eq("query?string") - end - - it "should have the correct request URI after assignment" do - @uri.request_uri = "?x=y" - expect(@uri.request_uri).to eq("/?x=y") - expect(@uri.path).to eq("/") - expect(@uri.query).to eq("x=y") - end - - it "should raise an error if the site value is set to something bogus" do - expect do - @uri.site = 42 - end.to raise_error(TypeError) - end - - it "should raise an error if the request URI is set to something bogus" do - expect do - @uri.request_uri = 42 - end.to raise_error(TypeError) - end - - it "should correctly convert to a hash" do - expect(@uri.to_hash).to eq({ - :scheme => "HTTP", - :user => nil, - :password => nil, - :host => "www.w3.org", - :port => nil, - :path => "/pub/WWW/TheProject.html", - :query => nil, - :fragment => nil - }) - end - - it "should have an origin of 'http://www.w3.org'" do - expect(@uri.origin).to eq('http://www.w3.org') - end -end - -describe Addressable::URI, "when parsing IPv6 addresses" do - it "should not raise an error for " + - "'http://[3ffe:1900:4545:3:200:f8ff:fe21:67cf]/'" do - Addressable::URI.parse("http://[3ffe:1900:4545:3:200:f8ff:fe21:67cf]/") - end - - it "should not raise an error for " + - "'http://[fe80:0:0:0:200:f8ff:fe21:67cf]/'" do - Addressable::URI.parse("http://[fe80:0:0:0:200:f8ff:fe21:67cf]/") - end - - it "should not raise an error for " + - "'http://[fe80::200:f8ff:fe21:67cf]/'" do - Addressable::URI.parse("http://[fe80::200:f8ff:fe21:67cf]/") - end - - it "should not raise an error for " + - "'http://[::1]/'" do - Addressable::URI.parse("http://[::1]/") - end - - it "should not raise an error for " + - "'http://[fe80::1]/'" do - Addressable::URI.parse("http://[fe80::1]/") - end - - it "should raise an error for " + - "'http://[]/'" do - expect do - Addressable::URI.parse("http://[]/") - end.to raise_error(Addressable::URI::InvalidURIError) - end -end - -describe Addressable::URI, "when parsing IPv6 address" do - subject { Addressable::URI.parse("http://[3ffe:1900:4545:3:200:f8ff:fe21:67cf]/") } - its(:host) { should == '[3ffe:1900:4545:3:200:f8ff:fe21:67cf]' } - its(:hostname) { should == '3ffe:1900:4545:3:200:f8ff:fe21:67cf' } -end - -describe Addressable::URI, "when assigning IPv6 address" do - it "should allow to set bare IPv6 address as hostname" do - uri = Addressable::URI.parse("http://[::1]/") - uri.hostname = '3ffe:1900:4545:3:200:f8ff:fe21:67cf' - expect(uri.to_s).to eq('http://[3ffe:1900:4545:3:200:f8ff:fe21:67cf]/') - end - - it "should allow to set bare IPv6 address as hostname with IPAddr object" do - uri = Addressable::URI.parse("http://[::1]/") - uri.hostname = IPAddr.new('3ffe:1900:4545:3:200:f8ff:fe21:67cf') - expect(uri.to_s).to eq('http://[3ffe:1900:4545:3:200:f8ff:fe21:67cf]/') - end - - it "should not allow to set bare IPv6 address as host" do - uri = Addressable::URI.parse("http://[::1]/") - skip "not checked" - expect do - uri.host = '3ffe:1900:4545:3:200:f8ff:fe21:67cf' - end.to raise_error(Addressable::URI::InvalidURIError) - end -end - -describe Addressable::URI, "when parsing IPvFuture addresses" do - it "should not raise an error for " + - "'http://[v9.3ffe:1900:4545:3:200:f8ff:fe21:67cf]/'" do - Addressable::URI.parse("http://[v9.3ffe:1900:4545:3:200:f8ff:fe21:67cf]/") - end - - it "should not raise an error for " + - "'http://[vff.fe80:0:0:0:200:f8ff:fe21:67cf]/'" do - Addressable::URI.parse("http://[vff.fe80:0:0:0:200:f8ff:fe21:67cf]/") - end - - it "should not raise an error for " + - "'http://[v12.fe80::200:f8ff:fe21:67cf]/'" do - Addressable::URI.parse("http://[v12.fe80::200:f8ff:fe21:67cf]/") - end - - it "should not raise an error for " + - "'http://[va0.::1]/'" do - Addressable::URI.parse("http://[va0.::1]/") - end - - it "should not raise an error for " + - "'http://[v255.fe80::1]/'" do - Addressable::URI.parse("http://[v255.fe80::1]/") - end - - it "should raise an error for " + - "'http://[v0.]/'" do - expect do - Addressable::URI.parse("http://[v0.]/") - end.to raise_error(Addressable::URI::InvalidURIError) - end -end - -describe Addressable::URI, "when parsed from " + - "'http://example.com/'" do - before do - @uri = Addressable::URI.parse("http://example.com/") - end - - # Based on http://intertwingly.net/blog/2004/07/31/URI-Equivalence - it "should be equivalent to http://example.com" do - expect(@uri).to eq(Addressable::URI.parse("http://example.com")) - end - - # Based on http://intertwingly.net/blog/2004/07/31/URI-Equivalence - it "should be equivalent to HTTP://example.com/" do - expect(@uri).to eq(Addressable::URI.parse("HTTP://example.com/")) - end - - # Based on http://intertwingly.net/blog/2004/07/31/URI-Equivalence - it "should be equivalent to http://example.com:/" do - expect(@uri).to eq(Addressable::URI.parse("http://example.com:/")) - end - - # Based on http://intertwingly.net/blog/2004/07/31/URI-Equivalence - it "should be equivalent to http://example.com:80/" do - expect(@uri).to eq(Addressable::URI.parse("http://example.com:80/")) - end - - # Based on http://intertwingly.net/blog/2004/07/31/URI-Equivalence - it "should be equivalent to http://Example.com/" do - expect(@uri).to eq(Addressable::URI.parse("http://Example.com/")) - end - - it "should have the correct username after assignment" do - @uri.user = nil - expect(@uri.user).to eq(nil) - expect(@uri.password).to eq(nil) - expect(@uri.to_s).to eq("http://example.com/") - end - - it "should have the correct password after assignment" do - @uri.password = nil - expect(@uri.password).to eq(nil) - expect(@uri.user).to eq(nil) - expect(@uri.to_s).to eq("http://example.com/") - end - - it "should have a request URI of '/'" do - expect(@uri.request_uri).to eq("/") - end - - it "should correctly convert to a hash" do - expect(@uri.to_hash).to eq({ - :scheme => "http", - :user => nil, - :password => nil, - :host => "example.com", - :port => nil, - :path => "/", - :query => nil, - :fragment => nil - }) - end - - it "should be identical to its duplicate" do - expect(@uri).to eq(@uri.dup) - end - - it "should have the same hash as its duplicate" do - expect(@uri.hash).to eq(@uri.dup.hash) - end - - it "should have a different hash from its equivalent String value" do - expect(@uri.hash).not_to eq(@uri.to_s.hash) - end - - it "should have the same hash as an equal URI" do - expect(@uri.hash).to eq(Addressable::URI.parse("http://example.com/").hash) - end - - it "should be equivalent to http://EXAMPLE.com" do - expect(@uri).to eq(Addressable::URI.parse("http://EXAMPLE.com")) - end - - it "should be equivalent to http://EXAMPLE.com:80/" do - expect(@uri).to eq(Addressable::URI.parse("http://EXAMPLE.com:80/")) - end - - it "should have the same hash as http://example.com/" do - expect(@uri.hash).to eq(Addressable::URI.parse("http://example.com/").hash) - end - - it "should have the same hash as http://example.com after assignment" do - @uri.path = "" - expect(@uri.hash).to eq(Addressable::URI.parse("http://example.com").hash) - end - - it "should have the same hash as http://example.com/? after assignment" do - @uri.query = "" - expect(@uri.hash).to eq(Addressable::URI.parse("http://example.com/?").hash) - end - - it "should have the same hash as http://example.com/? after assignment" do - @uri.query_values = {} - expect(@uri.hash).to eq(Addressable::URI.parse("http://example.com/?").hash) - end - - it "should have the same hash as http://example.com/# after assignment" do - @uri.fragment = "" - expect(@uri.hash).to eq(Addressable::URI.parse("http://example.com/#").hash) - end - - it "should have a different hash from http://example.com" do - expect(@uri.hash).not_to eq(Addressable::URI.parse("http://example.com").hash) - end - - it "should have an origin of 'http://example.com'" do - expect(@uri.origin).to eq('http://example.com') - end -end - -describe Addressable::URI, "when parsed from " + - "'http://example.com?#'" do - before do - @uri = Addressable::URI.parse("http://example.com?#") - end - - it "should correctly convert to a hash" do - expect(@uri.to_hash).to eq({ - :scheme => "http", - :user => nil, - :password => nil, - :host => "example.com", - :port => nil, - :path => "", - :query => "", - :fragment => "" - }) - end - - it "should have a request URI of '/?'" do - expect(@uri.request_uri).to eq("/?") - end - - it "should normalize to 'http://example.com/'" do - expect(@uri.normalize.to_s).to eq("http://example.com/") - end - - it "should have an origin of 'http://example.com'" do - expect(@uri.origin).to eq("http://example.com") - end -end - -describe Addressable::URI, "when parsed from " + - "'http://@example.com/'" do - before do - @uri = Addressable::URI.parse("http://@example.com/") - end - - it "should be equivalent to http://example.com" do - expect(@uri).to eq(Addressable::URI.parse("http://example.com")) - end - - it "should correctly convert to a hash" do - expect(@uri.to_hash).to eq({ - :scheme => "http", - :user => "", - :password => nil, - :host => "example.com", - :port => nil, - :path => "/", - :query => nil, - :fragment => nil - }) - end - - it "should be identical to its duplicate" do - expect(@uri).to eq(@uri.dup) - end - - it "should have an origin of 'http://example.com'" do - expect(@uri.origin).to eq('http://example.com') - end -end - -describe Addressable::URI, "when parsed from " + - "'http://example.com./'" do - before do - @uri = Addressable::URI.parse("http://example.com./") - end - - it "should be equivalent to http://example.com" do - expect(@uri).to eq(Addressable::URI.parse("http://example.com")) - end - - it "should not be considered to be in normal form" do - expect(@uri.normalize).not_to be_eql(@uri) - end - - it "should be identical to its duplicate" do - expect(@uri).to eq(@uri.dup) - end - - it "should have an origin of 'http://example.com'" do - expect(@uri.origin).to eq('http://example.com') - end -end - -describe Addressable::URI, "when parsed from " + - "'http://:@example.com/'" do - before do - @uri = Addressable::URI.parse("http://:@example.com/") - end - - it "should be equivalent to http://example.com" do - expect(@uri).to eq(Addressable::URI.parse("http://example.com")) - end - - it "should correctly convert to a hash" do - expect(@uri.to_hash).to eq({ - :scheme => "http", - :user => "", - :password => "", - :host => "example.com", - :port => nil, - :path => "/", - :query => nil, - :fragment => nil - }) - end - - it "should be identical to its duplicate" do - expect(@uri).to eq(@uri.dup) - end - - it "should have an origin of 'http://example.com'" do - expect(@uri.origin).to eq('http://example.com') - end -end - -describe Addressable::URI, "when parsed from " + - "'HTTP://EXAMPLE.COM/'" do - before do - @uri = Addressable::URI.parse("HTTP://EXAMPLE.COM/") - end - - it "should be equivalent to http://example.com" do - expect(@uri).to eq(Addressable::URI.parse("http://example.com")) - end - - it "should correctly convert to a hash" do - expect(@uri.to_hash).to eq({ - :scheme => "HTTP", - :user => nil, - :password => nil, - :host => "EXAMPLE.COM", - :port => nil, - :path => "/", - :query => nil, - :fragment => nil - }) - end - - it "should be identical to its duplicate" do - expect(@uri).to eq(@uri.dup) - end - - it "should have an origin of 'http://example.com'" do - expect(@uri.origin).to eq('http://example.com') - end - - it "should have a tld of 'com'" do - expect(@uri.tld).to eq('com') - end -end - -describe Addressable::URI, "when parsed from " + - "'http://www.example.co.uk/'" do - before do - @uri = Addressable::URI.parse("http://www.example.co.uk/") - end - - it "should have an origin of 'http://www.example.co.uk'" do - expect(@uri.origin).to eq('http://www.example.co.uk') - end - - it "should have a tld of 'co.uk'" do - expect(@uri.tld).to eq('co.uk') - end - - it "should have a domain of 'example.co.uk'" do - expect(@uri.domain).to eq('example.co.uk') - end -end - -describe Addressable::URI, "when parsed from " + - "'http://sub_domain.blogspot.com/'" do - before do - @uri = Addressable::URI.parse("http://sub_domain.blogspot.com/") - end - - it "should have an origin of 'http://sub_domain.blogspot.com'" do - expect(@uri.origin).to eq('http://sub_domain.blogspot.com') - end - - it "should have a tld of 'com'" do - expect(@uri.tld).to eq('com') - end - - it "should have a domain of 'blogspot.com'" do - expect(@uri.domain).to eq('blogspot.com') - end -end - -describe Addressable::URI, "when parsed from " + - "'http://example.com/~smith/'" do - before do - @uri = Addressable::URI.parse("http://example.com/~smith/") - end - - # Based on http://intertwingly.net/blog/2004/07/31/URI-Equivalence - it "should be equivalent to http://example.com/%7Esmith/" do - expect(@uri).to eq(Addressable::URI.parse("http://example.com/%7Esmith/")) - end - - # Based on http://intertwingly.net/blog/2004/07/31/URI-Equivalence - it "should be equivalent to http://example.com/%7esmith/" do - expect(@uri).to eq(Addressable::URI.parse("http://example.com/%7esmith/")) - end - - it "should be identical to its duplicate" do - expect(@uri).to eq(@uri.dup) - end -end - -describe Addressable::URI, "when parsed from " + - "'http://example.com/%E8'" do - before do - @uri = Addressable::URI.parse("http://example.com/%E8") - end - - it "should not raise an exception when normalized" do - expect do - @uri.normalize - end.not_to raise_error - end - - it "should be considered to be in normal form" do - expect(@uri.normalize).to be_eql(@uri) - end - - it "should not change if encoded with the normalizing algorithm" do - expect(Addressable::URI.normalized_encode(@uri).to_s).to eq( - "http://example.com/%E8" - ) - expect(Addressable::URI.normalized_encode(@uri, Addressable::URI).to_s).to be === - "http://example.com/%E8" - end -end - -describe Addressable::URI, "when parsed from " + - "'http://example.com/path%2Fsegment/'" do - before do - @uri = Addressable::URI.parse("http://example.com/path%2Fsegment/") - end - - it "should be considered to be in normal form" do - expect(@uri.normalize).to be_eql(@uri) - end - - it "should be equal to 'http://example.com/path%2Fsegment/'" do - expect(@uri.normalize).to be_eql( - Addressable::URI.parse("http://example.com/path%2Fsegment/") - ) - end - - it "should not be equal to 'http://example.com/path/segment/'" do - expect(@uri).not_to eq( - Addressable::URI.parse("http://example.com/path/segment/") - ) - end - - it "should not be equal to 'http://example.com/path/segment/'" do - expect(@uri.normalize).not_to be_eql( - Addressable::URI.parse("http://example.com/path/segment/") - ) - end -end - -describe Addressable::URI, "when parsed from " + - "'http://example.com/?%F6'" do - before do - @uri = Addressable::URI.parse("http://example.com/?%F6") - end - - it "should not raise an exception when normalized" do - expect do - @uri.normalize - end.not_to raise_error - end - - it "should be considered to be in normal form" do - expect(@uri.normalize).to be_eql(@uri) - end - - it "should not change if encoded with the normalizing algorithm" do - expect(Addressable::URI.normalized_encode(@uri).to_s).to eq( - "http://example.com/?%F6" - ) - expect(Addressable::URI.normalized_encode(@uri, Addressable::URI).to_s).to be === - "http://example.com/?%F6" - end -end - -describe Addressable::URI, "when parsed from " + - "'http://example.com/#%F6'" do - before do - @uri = Addressable::URI.parse("http://example.com/#%F6") - end - - it "should not raise an exception when normalized" do - expect do - @uri.normalize - end.not_to raise_error - end - - it "should be considered to be in normal form" do - expect(@uri.normalize).to be_eql(@uri) - end - - it "should not change if encoded with the normalizing algorithm" do - expect(Addressable::URI.normalized_encode(@uri).to_s).to eq( - "http://example.com/#%F6" - ) - expect(Addressable::URI.normalized_encode(@uri, Addressable::URI).to_s).to be === - "http://example.com/#%F6" - end -end - -describe Addressable::URI, "when parsed from " + - "'http://example.com/%C3%87'" do - before do - @uri = Addressable::URI.parse("http://example.com/%C3%87") - end - - # Based on http://intertwingly.net/blog/2004/07/31/URI-Equivalence - it "should be equivalent to 'http://example.com/C%CC%A7'" do - expect(@uri).to eq(Addressable::URI.parse("http://example.com/C%CC%A7")) - end - - it "should not change if encoded with the normalizing algorithm" do - expect(Addressable::URI.normalized_encode(@uri).to_s).to eq( - "http://example.com/%C3%87" - ) - expect(Addressable::URI.normalized_encode(@uri, Addressable::URI).to_s).to be === - "http://example.com/%C3%87" - end - - it "should raise an error if encoding with an unexpected return type" do - expect do - Addressable::URI.normalized_encode(@uri, Integer) - end.to raise_error(TypeError) - end - - it "if percent encoded should be 'http://example.com/C%25CC%25A7'" do - expect(Addressable::URI.encode(@uri).to_s).to eq( - "http://example.com/%25C3%2587" - ) - end - - it "if percent encoded should be 'http://example.com/C%25CC%25A7'" do - expect(Addressable::URI.encode(@uri, Addressable::URI)).to eq( - Addressable::URI.parse("http://example.com/%25C3%2587") - ) - end - - it "should raise an error if encoding with an unexpected return type" do - expect do - Addressable::URI.encode(@uri, Integer) - end.to raise_error(TypeError) - end - - it "should be identical to its duplicate" do - expect(@uri).to eq(@uri.dup) - end -end - -describe Addressable::URI, "when parsed from " + - "'http://example.com/?q=string'" do - before do - @uri = Addressable::URI.parse("http://example.com/?q=string") - end - - it "should use the 'http' scheme" do - expect(@uri.scheme).to eq("http") - end - - it "should have an authority segment of 'example.com'" do - expect(@uri.authority).to eq("example.com") - end - - it "should have a host of 'example.com'" do - expect(@uri.host).to eq("example.com") - end - - it "should have no username" do - expect(@uri.user).to eq(nil) - end - - it "should have no password" do - expect(@uri.password).to eq(nil) - end - - it "should use port 80" do - expect(@uri.inferred_port).to eq(80) - end - - it "should have a path of '/'" do - expect(@uri.path).to eq("/") - end - - it "should have a query string of 'q=string'" do - expect(@uri.query).to eq("q=string") - end - - it "should have no fragment" do - expect(@uri.fragment).to eq(nil) - end - - it "should be considered absolute" do - expect(@uri).to be_absolute - end - - it "should not be considered relative" do - expect(@uri).not_to be_relative - end - - it "should be considered to be in normal form" do - expect(@uri.normalize).to be_eql(@uri) - end - - it "should be identical to its duplicate" do - expect(@uri).to eq(@uri.dup) - end -end - -describe Addressable::URI, "when parsed from " + - "'http://example.com:80/'" do - before do - @uri = Addressable::URI.parse("http://example.com:80/") - end - - it "should use the 'http' scheme" do - expect(@uri.scheme).to eq("http") - end - - it "should have an authority segment of 'example.com:80'" do - expect(@uri.authority).to eq("example.com:80") - end - - it "should have a host of 'example.com'" do - expect(@uri.host).to eq("example.com") - end - - it "should have no username" do - expect(@uri.user).to eq(nil) - end - - it "should have no password" do - expect(@uri.password).to eq(nil) - end - - it "should use port 80" do - expect(@uri.inferred_port).to eq(80) - end - - it "should have explicit port 80" do - expect(@uri.port).to eq(80) - end - - it "should have a path of '/'" do - expect(@uri.path).to eq("/") - end - - it "should have no query string" do - expect(@uri.query).to eq(nil) - end - - it "should have no fragment" do - expect(@uri.fragment).to eq(nil) - end - - it "should be considered absolute" do - expect(@uri).to be_absolute - end - - it "should not be considered relative" do - expect(@uri).not_to be_relative - end - - it "should be exactly equal to http://example.com:80/" do - expect(@uri.eql?(Addressable::URI.parse("http://example.com:80/"))).to eq(true) - end - - it "should be roughly equal to http://example.com/" do - expect(@uri === Addressable::URI.parse("http://example.com/")).to eq(true) - end - - it "should be roughly equal to the string 'http://example.com/'" do - expect(@uri === "http://example.com/").to eq(true) - end - - it "should not be roughly equal to the string " + - "'http://example.com:bogus/'" do - expect do - expect(@uri === "http://example.com:bogus/").to eq(false) - end.not_to raise_error - end - - it "should result in itself when joined with itself" do - expect(@uri.join(@uri).to_s).to eq("http://example.com:80/") - expect(@uri.join!(@uri).to_s).to eq("http://example.com:80/") - end - - # Section 6.2.3 of RFC 3986 - it "should be equal to http://example.com/" do - expect(@uri).to eq(Addressable::URI.parse("http://example.com/")) - end - - # Section 6.2.3 of RFC 3986 - it "should be equal to http://example.com:/" do - expect(@uri).to eq(Addressable::URI.parse("http://example.com:/")) - end - - # Section 6.2.3 of RFC 3986 - it "should be equal to http://example.com:80/" do - expect(@uri).to eq(Addressable::URI.parse("http://example.com:80/")) - end - - # Section 6.2.2.1 of RFC 3986 - it "should be equal to http://EXAMPLE.COM/" do - expect(@uri).to eq(Addressable::URI.parse("http://EXAMPLE.COM/")) - end - - it "should correctly convert to a hash" do - expect(@uri.to_hash).to eq({ - :scheme => "http", - :user => nil, - :password => nil, - :host => "example.com", - :port => 80, - :path => "/", - :query => nil, - :fragment => nil - }) - end - - it "should be identical to its duplicate" do - expect(@uri).to eq(@uri.dup) - end - - it "should have an origin of 'http://example.com'" do - expect(@uri.origin).to eq('http://example.com') - end - - it "should not change if encoded with the normalizing algorithm" do - expect(Addressable::URI.normalized_encode(@uri).to_s).to eq( - "http://example.com:80/" - ) - expect(Addressable::URI.normalized_encode(@uri, Addressable::URI).to_s).to be === - "http://example.com:80/" - end -end - -describe Addressable::URI, "when parsed from " + - "'http://example.com:8080/'" do - before do - @uri = Addressable::URI.parse("http://example.com:8080/") - end - - it "should use the 'http' scheme" do - expect(@uri.scheme).to eq("http") - end - - it "should have an authority segment of 'example.com:8080'" do - expect(@uri.authority).to eq("example.com:8080") - end - - it "should have a host of 'example.com'" do - expect(@uri.host).to eq("example.com") - end - - it "should have no username" do - expect(@uri.user).to eq(nil) - end - - it "should have no password" do - expect(@uri.password).to eq(nil) - end - - it "should use port 8080" do - expect(@uri.inferred_port).to eq(8080) - end - - it "should have explicit port 8080" do - expect(@uri.port).to eq(8080) - end - - it "should have default port 80" do - expect(@uri.default_port).to eq(80) - end - - it "should have a path of '/'" do - expect(@uri.path).to eq("/") - end - - it "should have no query string" do - expect(@uri.query).to eq(nil) - end - - it "should have no fragment" do - expect(@uri.fragment).to eq(nil) - end - - it "should be considered absolute" do - expect(@uri).to be_absolute - end - - it "should not be considered relative" do - expect(@uri).not_to be_relative - end - - it "should be exactly equal to http://example.com:8080/" do - expect(@uri.eql?(Addressable::URI.parse( - "http://example.com:8080/"))).to eq(true) - end - - it "should have a route of 'http://example.com:8080/' from " + - "'http://example.com/path/to/'" do - expect(@uri.route_from("http://example.com/path/to/")).to eq( - Addressable::URI.parse("http://example.com:8080/") - ) - end - - it "should have a route of 'http://example.com:8080/' from " + - "'http://example.com:80/path/to/'" do - expect(@uri.route_from("http://example.com:80/path/to/")).to eq( - Addressable::URI.parse("http://example.com:8080/") - ) - end - - it "should have a route of '../../' from " + - "'http://example.com:8080/path/to/'" do - expect(@uri.route_from("http://example.com:8080/path/to/")).to eq( - Addressable::URI.parse("../../") - ) - end - - it "should have a route of 'http://example.com:8080/' from " + - "'http://user:pass@example.com/path/to/'" do - expect(@uri.route_from("http://user:pass@example.com/path/to/")).to eq( - Addressable::URI.parse("http://example.com:8080/") - ) - end - - it "should correctly convert to a hash" do - expect(@uri.to_hash).to eq({ - :scheme => "http", - :user => nil, - :password => nil, - :host => "example.com", - :port => 8080, - :path => "/", - :query => nil, - :fragment => nil - }) - end - - it "should be identical to its duplicate" do - expect(@uri).to eq(@uri.dup) - end - - it "should have an origin of 'http://example.com:8080'" do - expect(@uri.origin).to eq('http://example.com:8080') - end - - it "should not change if encoded with the normalizing algorithm" do - expect(Addressable::URI.normalized_encode(@uri).to_s).to eq( - "http://example.com:8080/" - ) - expect(Addressable::URI.normalized_encode(@uri, Addressable::URI).to_s).to be === - "http://example.com:8080/" - end -end - -describe Addressable::URI, "when parsed from " + - "'http://example.com:%38%30/'" do - before do - @uri = Addressable::URI.parse("http://example.com:%38%30/") - end - - it "should have the correct port" do - expect(@uri.port).to eq(80) - end - - it "should not be considered to be in normal form" do - expect(@uri.normalize).not_to be_eql(@uri) - end - - it "should normalize to 'http://example.com/'" do - expect(@uri.normalize.to_s).to eq("http://example.com/") - end - - it "should have an origin of 'http://example.com'" do - expect(@uri.origin).to eq('http://example.com') - end -end - -describe Addressable::URI, "when parsed with empty port" do - subject(:uri) do - Addressable::URI.parse("//example.com:") - end - - it "should not infer a port" do - expect(uri.port).to be(nil) - end - - it "should have a site value of '//example.com'" do - expect(uri.site).to eq("//example.com") - end -end - -describe Addressable::URI, "when parsed from " + - "'http://example.com/%2E/'" do - before do - @uri = Addressable::URI.parse("http://example.com/%2E/") - end - - it "should be considered to be in normal form" do - skip( - 'path segment normalization should happen before ' + - 'percent escaping normalization' - ) - @uri.normalize.should be_eql(@uri) - end - - it "should normalize to 'http://example.com/%2E/'" do - skip( - 'path segment normalization should happen before ' + - 'percent escaping normalization' - ) - expect(@uri.normalize).to eq("http://example.com/%2E/") - end -end - -describe Addressable::URI, "when parsed from " + - "'http://example.com/..'" do - before do - @uri = Addressable::URI.parse("http://example.com/..") - end - - it "should have the correct port" do - expect(@uri.inferred_port).to eq(80) - end - - it "should not be considered to be in normal form" do - expect(@uri.normalize).not_to be_eql(@uri) - end - - it "should normalize to 'http://example.com/'" do - expect(@uri.normalize.to_s).to eq("http://example.com/") - end -end - -describe Addressable::URI, "when parsed from " + - "'http://example.com/../..'" do - before do - @uri = Addressable::URI.parse("http://example.com/../..") - end - - it "should have the correct port" do - expect(@uri.inferred_port).to eq(80) - end - - it "should not be considered to be in normal form" do - expect(@uri.normalize).not_to be_eql(@uri) - end - - it "should normalize to 'http://example.com/'" do - expect(@uri.normalize.to_s).to eq("http://example.com/") - end -end - -describe Addressable::URI, "when parsed from " + - "'http://example.com/path(/..'" do - before do - @uri = Addressable::URI.parse("http://example.com/path(/..") - end - - it "should have the correct port" do - expect(@uri.inferred_port).to eq(80) - end - - it "should not be considered to be in normal form" do - expect(@uri.normalize).not_to be_eql(@uri) - end - - it "should normalize to 'http://example.com/'" do - expect(@uri.normalize.to_s).to eq("http://example.com/") - end -end - -describe Addressable::URI, "when parsed from " + - "'http://example.com/(path)/..'" do - before do - @uri = Addressable::URI.parse("http://example.com/(path)/..") - end - - it "should have the correct port" do - expect(@uri.inferred_port).to eq(80) - end - - it "should not be considered to be in normal form" do - expect(@uri.normalize).not_to be_eql(@uri) - end - - it "should normalize to 'http://example.com/'" do - expect(@uri.normalize.to_s).to eq("http://example.com/") - end -end - -describe Addressable::URI, "when parsed from " + - "'http://example.com/path(/../'" do - before do - @uri = Addressable::URI.parse("http://example.com/path(/../") - end - - it "should have the correct port" do - expect(@uri.inferred_port).to eq(80) - end - - it "should not be considered to be in normal form" do - expect(@uri.normalize).not_to be_eql(@uri) - end - - it "should normalize to 'http://example.com/'" do - expect(@uri.normalize.to_s).to eq("http://example.com/") - end -end - -describe Addressable::URI, "when parsed from " + - "'http://example.com/(path)/../'" do - before do - @uri = Addressable::URI.parse("http://example.com/(path)/../") - end - - it "should have the correct port" do - expect(@uri.inferred_port).to eq(80) - end - - it "should not be considered to be in normal form" do - expect(@uri.normalize).not_to be_eql(@uri) - end - - it "should normalize to 'http://example.com/'" do - expect(@uri.normalize.to_s).to eq("http://example.com/") - end -end - -describe Addressable::URI, "when parsed from " + - "'/..//example.com'" do - before do - @uri = Addressable::URI.parse("/..//example.com") - end - - it "should become invalid when normalized" do - expect do - @uri.normalize - end.to raise_error(Addressable::URI::InvalidURIError, /authority/) - end - - it "should have a path of '/..//example.com'" do - expect(@uri.path).to eq("/..//example.com") - end -end - -describe Addressable::URI, "when parsed from '/a/b/c/./../../g'" do - before do - @uri = Addressable::URI.parse("/a/b/c/./../../g") - end - - it "should not be considered to be in normal form" do - expect(@uri.normalize).not_to be_eql(@uri) - end - - # Section 5.2.4 of RFC 3986 - it "should normalize to '/a/g'" do - expect(@uri.normalize.to_s).to eq("/a/g") - end -end - -describe Addressable::URI, "when parsed from 'mid/content=5/../6'" do - before do - @uri = Addressable::URI.parse("mid/content=5/../6") - end - - it "should not be considered to be in normal form" do - expect(@uri.normalize).not_to be_eql(@uri) - end - - # Section 5.2.4 of RFC 3986 - it "should normalize to 'mid/6'" do - expect(@uri.normalize.to_s).to eq("mid/6") - end -end - -describe Addressable::URI, "when parsed from " + - "'http://www.example.com///../'" do - before do - @uri = Addressable::URI.parse('http://www.example.com///../') - end - - it "should not be considered to be in normal form" do - expect(@uri.normalize).not_to be_eql(@uri) - end - - it "should normalize to 'http://www.example.com//'" do - expect(@uri.normalize.to_s).to eq("http://www.example.com//") - end -end - -describe Addressable::URI, "when parsed from " + - "'http://example.com/path/to/resource/'" do - before do - @uri = Addressable::URI.parse("http://example.com/path/to/resource/") - end - - it "should use the 'http' scheme" do - expect(@uri.scheme).to eq("http") - end - - it "should have an authority segment of 'example.com'" do - expect(@uri.authority).to eq("example.com") - end - - it "should have a host of 'example.com'" do - expect(@uri.host).to eq("example.com") - end - - it "should have no username" do - expect(@uri.user).to eq(nil) - end - - it "should have no password" do - expect(@uri.password).to eq(nil) - end - - it "should use port 80" do - expect(@uri.inferred_port).to eq(80) - end - - it "should have a path of '/path/to/resource/'" do - expect(@uri.path).to eq("/path/to/resource/") - end - - it "should have no query string" do - expect(@uri.query).to eq(nil) - end - - it "should have no fragment" do - expect(@uri.fragment).to eq(nil) - end - - it "should be considered absolute" do - expect(@uri).to be_absolute - end - - it "should not be considered relative" do - expect(@uri).not_to be_relative - end - - it "should be exactly equal to http://example.com:8080/" do - expect(@uri.eql?(Addressable::URI.parse( - "http://example.com/path/to/resource/"))).to eq(true) - end - - it "should have a route of 'resource/' from " + - "'http://example.com/path/to/'" do - expect(@uri.route_from("http://example.com/path/to/")).to eq( - Addressable::URI.parse("resource/") - ) - end - - it "should have a route of '../' from " + - "'http://example.com/path/to/resource/sub'" do - expect(@uri.route_from("http://example.com/path/to/resource/sub")).to eq( - Addressable::URI.parse("../") - ) - end - - - it "should have a route of 'resource/' from " + - "'http://example.com/path/to/another'" do - expect(@uri.route_from("http://example.com/path/to/another")).to eq( - Addressable::URI.parse("resource/") - ) - end - - it "should have a route of 'resource/' from " + - "'http://example.com/path/to/res'" do - expect(@uri.route_from("http://example.com/path/to/res")).to eq( - Addressable::URI.parse("resource/") - ) - end - - it "should have a route of 'resource/' from " + - "'http://example.com:80/path/to/'" do - expect(@uri.route_from("http://example.com:80/path/to/")).to eq( - Addressable::URI.parse("resource/") - ) - end - - it "should have a route of 'http://example.com/path/to/' from " + - "'http://example.com:8080/path/to/'" do - expect(@uri.route_from("http://example.com:8080/path/to/")).to eq( - Addressable::URI.parse("http://example.com/path/to/resource/") - ) - end - - it "should have a route of 'http://example.com/path/to/' from " + - "'http://user:pass@example.com/path/to/'" do - expect(@uri.route_from("http://user:pass@example.com/path/to/")).to eq( - Addressable::URI.parse("http://example.com/path/to/resource/") - ) - end - - it "should have a route of '../../path/to/resource/' from " + - "'http://example.com/to/resource/'" do - expect(@uri.route_from("http://example.com/to/resource/")).to eq( - Addressable::URI.parse("../../path/to/resource/") - ) - end - - it "should correctly convert to a hash" do - expect(@uri.to_hash).to eq({ - :scheme => "http", - :user => nil, - :password => nil, - :host => "example.com", - :port => nil, - :path => "/path/to/resource/", - :query => nil, - :fragment => nil - }) - end - - it "should be identical to its duplicate" do - expect(@uri).to eq(@uri.dup) - end -end - -describe Addressable::URI, "when parsed from " + - "'relative/path/to/resource'" do - before do - @uri = Addressable::URI.parse("relative/path/to/resource") - end - - it "should not have a scheme" do - expect(@uri.scheme).to eq(nil) - end - - it "should not be considered ip-based" do - expect(@uri).not_to be_ip_based - end - - it "should not have an authority segment" do - expect(@uri.authority).to eq(nil) - end - - it "should not have a host" do - expect(@uri.host).to eq(nil) - end - - it "should have no username" do - expect(@uri.user).to eq(nil) - end - - it "should have no password" do - expect(@uri.password).to eq(nil) - end - - it "should not have a port" do - expect(@uri.port).to eq(nil) - end - - it "should have a path of 'relative/path/to/resource'" do - expect(@uri.path).to eq("relative/path/to/resource") - end - - it "should have no query string" do - expect(@uri.query).to eq(nil) - end - - it "should have no fragment" do - expect(@uri.fragment).to eq(nil) - end - - it "should not be considered absolute" do - expect(@uri).not_to be_absolute - end - - it "should be considered relative" do - expect(@uri).to be_relative - end - - it "should raise an error if routing is attempted" do - expect do - @uri.route_to("http://example.com/") - end.to raise_error(ArgumentError, /relative\/path\/to\/resource/) - expect do - @uri.route_from("http://example.com/") - end.to raise_error(ArgumentError, /relative\/path\/to\/resource/) - end - - it "when joined with 'another/relative/path' should be " + - "'relative/path/to/another/relative/path'" do - expect(@uri.join('another/relative/path')).to eq( - Addressable::URI.parse("relative/path/to/another/relative/path") - ) - end - - it "should be identical to its duplicate" do - expect(@uri).to eq(@uri.dup) - end -end - -describe Addressable::URI, "when parsed from " + - "'relative_path_with_no_slashes'" do - before do - @uri = Addressable::URI.parse("relative_path_with_no_slashes") - end - - it "should not have a scheme" do - expect(@uri.scheme).to eq(nil) - end - - it "should not be considered ip-based" do - expect(@uri).not_to be_ip_based - end - - it "should not have an authority segment" do - expect(@uri.authority).to eq(nil) - end - - it "should not have a host" do - expect(@uri.host).to eq(nil) - end - - it "should have no username" do - expect(@uri.user).to eq(nil) - end - - it "should have no password" do - expect(@uri.password).to eq(nil) - end - - it "should not have a port" do - expect(@uri.port).to eq(nil) - end - - it "should have a path of 'relative_path_with_no_slashes'" do - expect(@uri.path).to eq("relative_path_with_no_slashes") - end - - it "should have no query string" do - expect(@uri.query).to eq(nil) - end - - it "should have no fragment" do - expect(@uri.fragment).to eq(nil) - end - - it "should not be considered absolute" do - expect(@uri).not_to be_absolute - end - - it "should be considered relative" do - expect(@uri).to be_relative - end - - it "when joined with 'another_relative_path' should be " + - "'another_relative_path'" do - expect(@uri.join('another_relative_path')).to eq( - Addressable::URI.parse("another_relative_path") - ) - end -end - -describe Addressable::URI, "when parsed from " + - "'http://example.com/file.txt'" do - before do - @uri = Addressable::URI.parse("http://example.com/file.txt") - end - - it "should have a scheme of 'http'" do - expect(@uri.scheme).to eq("http") - end - - it "should have an authority segment of 'example.com'" do - expect(@uri.authority).to eq("example.com") - end - - it "should have a host of 'example.com'" do - expect(@uri.host).to eq("example.com") - end - - it "should have no username" do - expect(@uri.user).to eq(nil) - end - - it "should have no password" do - expect(@uri.password).to eq(nil) - end - - it "should use port 80" do - expect(@uri.inferred_port).to eq(80) - end - - it "should have a path of '/file.txt'" do - expect(@uri.path).to eq("/file.txt") - end - - it "should have a basename of 'file.txt'" do - expect(@uri.basename).to eq("file.txt") - end - - it "should have an extname of '.txt'" do - expect(@uri.extname).to eq(".txt") - end - - it "should have no query string" do - expect(@uri.query).to eq(nil) - end - - it "should have no fragment" do - expect(@uri.fragment).to eq(nil) - end -end - -describe Addressable::URI, "when parsed from " + - "'http://example.com/file.txt;parameter'" do - before do - @uri = Addressable::URI.parse("http://example.com/file.txt;parameter") - end - - it "should have a scheme of 'http'" do - expect(@uri.scheme).to eq("http") - end - - it "should have an authority segment of 'example.com'" do - expect(@uri.authority).to eq("example.com") - end - - it "should have a host of 'example.com'" do - expect(@uri.host).to eq("example.com") - end - - it "should have no username" do - expect(@uri.user).to eq(nil) - end - - it "should have no password" do - expect(@uri.password).to eq(nil) - end - - it "should use port 80" do - expect(@uri.inferred_port).to eq(80) - end - - it "should have a path of '/file.txt;parameter'" do - expect(@uri.path).to eq("/file.txt;parameter") - end - - it "should have a basename of 'file.txt'" do - expect(@uri.basename).to eq("file.txt") - end - - it "should have an extname of '.txt'" do - expect(@uri.extname).to eq(".txt") - end - - it "should have no query string" do - expect(@uri.query).to eq(nil) - end - - it "should have no fragment" do - expect(@uri.fragment).to eq(nil) - end -end - -describe Addressable::URI, "when parsed from " + - "'http://example.com/file.txt;x=y'" do - before do - @uri = Addressable::URI.parse("http://example.com/file.txt;x=y") - end - - it "should have a scheme of 'http'" do - expect(@uri.scheme).to eq("http") - end - - it "should have a scheme of 'http'" do - expect(@uri.scheme).to eq("http") - end - - it "should have an authority segment of 'example.com'" do - expect(@uri.authority).to eq("example.com") - end - - it "should have a host of 'example.com'" do - expect(@uri.host).to eq("example.com") - end - - it "should have no username" do - expect(@uri.user).to eq(nil) - end - - it "should have no password" do - expect(@uri.password).to eq(nil) - end - - it "should use port 80" do - expect(@uri.inferred_port).to eq(80) - end - - it "should have a path of '/file.txt;x=y'" do - expect(@uri.path).to eq("/file.txt;x=y") - end - - it "should have an extname of '.txt'" do - expect(@uri.extname).to eq(".txt") - end - - it "should have no query string" do - expect(@uri.query).to eq(nil) - end - - it "should have no fragment" do - expect(@uri.fragment).to eq(nil) - end - - it "should be considered to be in normal form" do - expect(@uri.normalize).to be_eql(@uri) - end -end - -describe Addressable::URI, "when parsed from " + - "'svn+ssh://developername@rubyforge.org/var/svn/project'" do - before do - @uri = Addressable::URI.parse( - "svn+ssh://developername@rubyforge.org/var/svn/project" - ) - end - - it "should have a scheme of 'svn+ssh'" do - expect(@uri.scheme).to eq("svn+ssh") - end - - it "should be considered to be ip-based" do - expect(@uri).to be_ip_based - end - - it "should have a path of '/var/svn/project'" do - expect(@uri.path).to eq("/var/svn/project") - end - - it "should have a username of 'developername'" do - expect(@uri.user).to eq("developername") - end - - it "should have no password" do - expect(@uri.password).to eq(nil) - end - - it "should be considered to be in normal form" do - expect(@uri.normalize).to be_eql(@uri) - end -end - -describe Addressable::URI, "when parsed from " + - "'ssh+svn://developername@RUBYFORGE.ORG/var/svn/project'" do - before do - @uri = Addressable::URI.parse( - "ssh+svn://developername@RUBYFORGE.ORG/var/svn/project" - ) - end - - it "should have a scheme of 'ssh+svn'" do - expect(@uri.scheme).to eq("ssh+svn") - end - - it "should have a normalized scheme of 'svn+ssh'" do - expect(@uri.normalized_scheme).to eq("svn+ssh") - end - - it "should have a normalized site of 'svn+ssh'" do - expect(@uri.normalized_site).to eq("svn+ssh://developername@rubyforge.org") - end - - it "should not be considered to be ip-based" do - expect(@uri).not_to be_ip_based - end - - it "should have a path of '/var/svn/project'" do - expect(@uri.path).to eq("/var/svn/project") - end - - it "should have a username of 'developername'" do - expect(@uri.user).to eq("developername") - end - - it "should have no password" do - expect(@uri.password).to eq(nil) - end - - it "should not be considered to be in normal form" do - expect(@uri.normalize).not_to be_eql(@uri) - end -end - -describe Addressable::URI, "when parsed from " + - "'mailto:user@example.com'" do - before do - @uri = Addressable::URI.parse("mailto:user@example.com") - end - - it "should have a scheme of 'mailto'" do - expect(@uri.scheme).to eq("mailto") - end - - it "should not be considered to be ip-based" do - expect(@uri).not_to be_ip_based - end - - it "should have a path of 'user@example.com'" do - expect(@uri.path).to eq("user@example.com") - end - - it "should have no user" do - expect(@uri.user).to eq(nil) - end - - it "should be considered to be in normal form" do - expect(@uri.normalize).to be_eql(@uri) - end -end - -describe Addressable::URI, "when parsed from " + - "'tag:example.com,2006-08-18:/path/to/something'" do - before do - @uri = Addressable::URI.parse( - "tag:example.com,2006-08-18:/path/to/something") - end - - it "should have a scheme of 'tag'" do - expect(@uri.scheme).to eq("tag") - end - - it "should be considered to be ip-based" do - expect(@uri).not_to be_ip_based - end - - it "should have a path of " + - "'example.com,2006-08-18:/path/to/something'" do - expect(@uri.path).to eq("example.com,2006-08-18:/path/to/something") - end - - it "should have no user" do - expect(@uri.user).to eq(nil) - end - - it "should be considered to be in normal form" do - expect(@uri.normalize).to be_eql(@uri) - end - - it "should have a 'null' origin" do - expect(@uri.origin).to eq('null') - end -end - -describe Addressable::URI, "when parsed from " + - "'http://example.com/x;y/'" do - before do - @uri = Addressable::URI.parse("http://example.com/x;y/") - end - - it "should be considered to be in normal form" do - expect(@uri.normalize).to be_eql(@uri) - end -end - -describe Addressable::URI, "when parsed from " + - "'http://example.com/?x=1&y=2'" do - before do - @uri = Addressable::URI.parse("http://example.com/?x=1&y=2") - end - - it "should be considered to be in normal form" do - expect(@uri.normalize).to be_eql(@uri) - end -end - -describe Addressable::URI, "when parsed from " + - "'view-source:http://example.com/'" do - before do - @uri = Addressable::URI.parse("view-source:http://example.com/") - end - - it "should have a scheme of 'view-source'" do - expect(@uri.scheme).to eq("view-source") - end - - it "should have a path of 'http://example.com/'" do - expect(@uri.path).to eq("http://example.com/") - end - - it "should be considered to be in normal form" do - expect(@uri.normalize).to be_eql(@uri) - end - - it "should have a 'null' origin" do - expect(@uri.origin).to eq('null') - end -end - -describe Addressable::URI, "when parsed from " + - "'http://user:pass@example.com/path/to/resource?query=x#fragment'" do - before do - @uri = Addressable::URI.parse( - "http://user:pass@example.com/path/to/resource?query=x#fragment") - end - - it "should use the 'http' scheme" do - expect(@uri.scheme).to eq("http") - end - - it "should have an authority segment of 'user:pass@example.com'" do - expect(@uri.authority).to eq("user:pass@example.com") - end - - it "should have a username of 'user'" do - expect(@uri.user).to eq("user") - end - - it "should have a password of 'pass'" do - expect(@uri.password).to eq("pass") - end - - it "should have a host of 'example.com'" do - expect(@uri.host).to eq("example.com") - end - - it "should use port 80" do - expect(@uri.inferred_port).to eq(80) - end - - it "should have a path of '/path/to/resource'" do - expect(@uri.path).to eq("/path/to/resource") - end - - it "should have a query string of 'query=x'" do - expect(@uri.query).to eq("query=x") - end - - it "should have a fragment of 'fragment'" do - expect(@uri.fragment).to eq("fragment") - end - - it "should be considered to be in normal form" do - expect(@uri.normalize).to be_eql(@uri) - end - - it "should have a route of '../../' to " + - "'http://user:pass@example.com/path/'" do - expect(@uri.route_to("http://user:pass@example.com/path/")).to eq( - Addressable::URI.parse("../../") - ) - end - - it "should have a route of 'to/resource?query=x#fragment' " + - "from 'http://user:pass@example.com/path/'" do - expect(@uri.route_from("http://user:pass@example.com/path/")).to eq( - Addressable::URI.parse("to/resource?query=x#fragment") - ) - end - - it "should have a route of '?query=x#fragment' " + - "from 'http://user:pass@example.com/path/to/resource'" do - expect(@uri.route_from("http://user:pass@example.com/path/to/resource")).to eq( - Addressable::URI.parse("?query=x#fragment") - ) - end - - it "should have a route of '#fragment' " + - "from 'http://user:pass@example.com/path/to/resource?query=x'" do - expect(@uri.route_from( - "http://user:pass@example.com/path/to/resource?query=x")).to eq( - Addressable::URI.parse("#fragment") - ) - end - - it "should have a route of '#fragment' from " + - "'http://user:pass@example.com/path/to/resource?query=x#fragment'" do - expect(@uri.route_from( - "http://user:pass@example.com/path/to/resource?query=x#fragment" - )).to eq(Addressable::URI.parse("#fragment")) - end - - it "should have a route of 'http://elsewhere.com/' to " + - "'http://elsewhere.com/'" do - expect(@uri.route_to("http://elsewhere.com/")).to eq( - Addressable::URI.parse("http://elsewhere.com/") - ) - end - - it "should have a route of " + - "'http://user:pass@example.com/path/to/resource?query=x#fragment' " + - "from 'http://example.com/path/to/'" do - expect(@uri.route_from("http://elsewhere.com/path/to/")).to eq( - Addressable::URI.parse( - "http://user:pass@example.com/path/to/resource?query=x#fragment") - ) - end - - it "should have the correct scheme after assignment" do - @uri.scheme = "ftp" - expect(@uri.scheme).to eq("ftp") - expect(@uri.to_s).to eq( - "ftp://user:pass@example.com/path/to/resource?query=x#fragment" - ) - expect(@uri.to_str).to eq( - "ftp://user:pass@example.com/path/to/resource?query=x#fragment" - ) - end - - it "should have the correct site segment after assignment" do - @uri.site = "https://newuser:newpass@example.com:443" - expect(@uri.scheme).to eq("https") - expect(@uri.authority).to eq("newuser:newpass@example.com:443") - expect(@uri.user).to eq("newuser") - expect(@uri.password).to eq("newpass") - expect(@uri.userinfo).to eq("newuser:newpass") - expect(@uri.normalized_userinfo).to eq("newuser:newpass") - expect(@uri.host).to eq("example.com") - expect(@uri.port).to eq(443) - expect(@uri.inferred_port).to eq(443) - expect(@uri.to_s).to eq( - "https://newuser:newpass@example.com:443" + - "/path/to/resource?query=x#fragment" - ) - end - - it "should have the correct authority segment after assignment" do - @uri.authority = "newuser:newpass@example.com:80" - expect(@uri.authority).to eq("newuser:newpass@example.com:80") - expect(@uri.user).to eq("newuser") - expect(@uri.password).to eq("newpass") - expect(@uri.userinfo).to eq("newuser:newpass") - expect(@uri.normalized_userinfo).to eq("newuser:newpass") - expect(@uri.host).to eq("example.com") - expect(@uri.port).to eq(80) - expect(@uri.inferred_port).to eq(80) - expect(@uri.to_s).to eq( - "http://newuser:newpass@example.com:80" + - "/path/to/resource?query=x#fragment" - ) - end - - it "should have the correct userinfo segment after assignment" do - @uri.userinfo = "newuser:newpass" - expect(@uri.userinfo).to eq("newuser:newpass") - expect(@uri.authority).to eq("newuser:newpass@example.com") - expect(@uri.user).to eq("newuser") - expect(@uri.password).to eq("newpass") - expect(@uri.host).to eq("example.com") - expect(@uri.port).to eq(nil) - expect(@uri.inferred_port).to eq(80) - expect(@uri.to_s).to eq( - "http://newuser:newpass@example.com" + - "/path/to/resource?query=x#fragment" - ) - end - - it "should have the correct username after assignment" do - @uri.user = "newuser" - expect(@uri.user).to eq("newuser") - expect(@uri.authority).to eq("newuser:pass@example.com") - end - - it "should have the correct password after assignment" do - @uri.password = "newpass" - expect(@uri.password).to eq("newpass") - expect(@uri.authority).to eq("user:newpass@example.com") - end - - it "should have the correct host after assignment" do - @uri.host = "newexample.com" - expect(@uri.host).to eq("newexample.com") - expect(@uri.authority).to eq("user:pass@newexample.com") - end - - it "should have the correct host after assignment" do - @uri.hostname = "newexample.com" - expect(@uri.host).to eq("newexample.com") - expect(@uri.hostname).to eq("newexample.com") - expect(@uri.authority).to eq("user:pass@newexample.com") - end - - it "should raise an error if assigning a bogus object to the hostname" do - expect do - @uri.hostname = Object.new - end.to raise_error(TypeError) - end - - it "should have the correct port after assignment" do - @uri.port = 8080 - expect(@uri.port).to eq(8080) - expect(@uri.authority).to eq("user:pass@example.com:8080") - end - - it "should have the correct origin after assignment" do - @uri.origin = "http://newexample.com" - expect(@uri.host).to eq("newexample.com") - expect(@uri.authority).to eq("newexample.com") - end - - it "should have the correct path after assignment" do - @uri.path = "/newpath/to/resource" - expect(@uri.path).to eq("/newpath/to/resource") - expect(@uri.to_s).to eq( - "http://user:pass@example.com/newpath/to/resource?query=x#fragment" - ) - end - - it "should have the correct scheme and authority after nil assignment" do - @uri.site = nil - expect(@uri.scheme).to eq(nil) - expect(@uri.authority).to eq(nil) - expect(@uri.to_s).to eq("/path/to/resource?query=x#fragment") - end - - it "should have the correct scheme and authority after assignment" do - @uri.site = "file://" - expect(@uri.scheme).to eq("file") - expect(@uri.authority).to eq("") - expect(@uri.to_s).to eq("file:///path/to/resource?query=x#fragment") - end - - it "should have the correct path after nil assignment" do - @uri.path = nil - expect(@uri.path).to eq("") - expect(@uri.to_s).to eq( - "http://user:pass@example.com?query=x#fragment" - ) - end - - it "should have the correct query string after assignment" do - @uri.query = "newquery=x" - expect(@uri.query).to eq("newquery=x") - expect(@uri.to_s).to eq( - "http://user:pass@example.com/path/to/resource?newquery=x#fragment" - ) - @uri.query = nil - expect(@uri.query).to eq(nil) - expect(@uri.to_s).to eq( - "http://user:pass@example.com/path/to/resource#fragment" - ) - end - - it "should have the correct query string after hash assignment" do - @uri.query_values = {"?uestion mark" => "=sign", "hello" => "g\xC3\xBCnther"} - expect(@uri.query.split("&")).to include("%3Fuestion%20mark=%3Dsign") - expect(@uri.query.split("&")).to include("hello=g%C3%BCnther") - expect(@uri.query_values).to eq({ - "?uestion mark" => "=sign", "hello" => "g\xC3\xBCnther" - }) - end - - it "should have the correct query string after flag hash assignment" do - @uri.query_values = {'flag?1' => nil, 'fl=ag2' => nil, 'flag3' => nil} - expect(@uri.query.split("&")).to include("flag%3F1") - expect(@uri.query.split("&")).to include("fl%3Dag2") - expect(@uri.query.split("&")).to include("flag3") - expect(@uri.query_values(Array).sort).to eq([["fl=ag2"], ["flag3"], ["flag?1"]]) - expect(@uri.query_values(Hash)).to eq({ - 'flag?1' => nil, 'fl=ag2' => nil, 'flag3' => nil - }) - end - - it "should raise an error if query values are set to a bogus type" do - expect do - @uri.query_values = "bogus" - end.to raise_error(TypeError) - end - - it "should have the correct fragment after assignment" do - @uri.fragment = "newfragment" - expect(@uri.fragment).to eq("newfragment") - expect(@uri.to_s).to eq( - "http://user:pass@example.com/path/to/resource?query=x#newfragment" - ) - - @uri.fragment = nil - expect(@uri.fragment).to eq(nil) - expect(@uri.to_s).to eq( - "http://user:pass@example.com/path/to/resource?query=x" - ) - end - - it "should have the correct values after a merge" do - expect(@uri.merge(:fragment => "newfragment").to_s).to eq( - "http://user:pass@example.com/path/to/resource?query=x#newfragment" - ) - end - - it "should have the correct values after a merge" do - expect(@uri.merge(:fragment => nil).to_s).to eq( - "http://user:pass@example.com/path/to/resource?query=x" - ) - end - - it "should have the correct values after a merge" do - expect(@uri.merge(:userinfo => "newuser:newpass").to_s).to eq( - "http://newuser:newpass@example.com/path/to/resource?query=x#fragment" - ) - end - - it "should have the correct values after a merge" do - expect(@uri.merge(:userinfo => nil).to_s).to eq( - "http://example.com/path/to/resource?query=x#fragment" - ) - end - - it "should have the correct values after a merge" do - expect(@uri.merge(:path => "newpath").to_s).to eq( - "http://user:pass@example.com/newpath?query=x#fragment" - ) - end - - it "should have the correct values after a merge" do - expect(@uri.merge(:port => "42", :path => "newpath", :query => "").to_s).to eq( - "http://user:pass@example.com:42/newpath?#fragment" - ) - end - - it "should have the correct values after a merge" do - expect(@uri.merge(:authority => "foo:bar@baz:42").to_s).to eq( - "http://foo:bar@baz:42/path/to/resource?query=x#fragment" - ) - # Ensure the operation was not destructive - expect(@uri.to_s).to eq( - "http://user:pass@example.com/path/to/resource?query=x#fragment" - ) - end - - it "should have the correct values after a destructive merge" do - @uri.merge!(:authority => "foo:bar@baz:42") - # Ensure the operation was destructive - expect(@uri.to_s).to eq( - "http://foo:bar@baz:42/path/to/resource?query=x#fragment" - ) - end - - it "should fail to merge with bogus values" do - expect do - @uri.merge(:port => "bogus") - end.to raise_error(Addressable::URI::InvalidURIError) - end - - it "should fail to merge with bogus values" do - expect do - @uri.merge(:authority => "bar@baz:bogus") - end.to raise_error(Addressable::URI::InvalidURIError) - end - - it "should fail to merge with bogus parameters" do - expect do - @uri.merge(42) - end.to raise_error(TypeError) - end - - it "should fail to merge with bogus parameters" do - expect do - @uri.merge("http://example.com/") - end.to raise_error(TypeError) - end - - it "should fail to merge with both authority and subcomponents" do - expect do - @uri.merge(:authority => "foo:bar@baz:42", :port => "42") - end.to raise_error(ArgumentError) - end - - it "should fail to merge with both userinfo and subcomponents" do - expect do - @uri.merge(:userinfo => "foo:bar", :user => "foo") - end.to raise_error(ArgumentError) - end - - it "should be identical to its duplicate" do - expect(@uri).to eq(@uri.dup) - end - - it "should have an origin of 'http://example.com'" do - expect(@uri.origin).to eq('http://example.com') - end -end - -describe Addressable::URI, "when parsed from " + - "'http://example.com/search?q=Q%26A'" do - - before do - @uri = Addressable::URI.parse("http://example.com/search?q=Q%26A") - end - - it "should have a query of 'q=Q%26A'" do - expect(@uri.query).to eq("q=Q%26A") - end - - it "should have query_values of {'q' => 'Q&A'}" do - expect(@uri.query_values).to eq({ 'q' => 'Q&A' }) - end - - it "should normalize to the original uri " + - "(with the ampersand properly percent-encoded)" do - expect(@uri.normalize.to_s).to eq("http://example.com/search?q=Q%26A") - end -end - -describe Addressable::URI, "when parsed from " + - "'http://example.com/?&x=b'" do - before do - @uri = Addressable::URI.parse("http://example.com/?&x=b") - end - - it "should have a query of '&x=b'" do - expect(@uri.query).to eq("&x=b") - end - - it "should have query_values of {'x' => 'b'}" do - expect(@uri.query_values).to eq({'x' => 'b'}) - end -end - -describe Addressable::URI, "when parsed from " + - "'http://example.com/?q='one;two'&x=1'" do - before do - @uri = Addressable::URI.parse("http://example.com/?q='one;two'&x=1") - end - - it "should have a query of 'q='one;two'&x=1'" do - expect(@uri.query).to eq("q='one;two'&x=1") - end - - it "should have query_values of {\"q\" => \"'one;two'\", \"x\" => \"1\"}" do - expect(@uri.query_values).to eq({"q" => "'one;two'", "x" => "1"}) - end - - it "should escape the ';' character when normalizing to avoid ambiguity " + - "with the W3C HTML 4.01 specification" do - # HTML 4.01 Section B.2.2 - expect(@uri.normalize.query).to eq("q='one%3Btwo'&x=1") - end -end - -describe Addressable::URI, "when parsed from " + - "'http://example.com/?&&x=b'" do - before do - @uri = Addressable::URI.parse("http://example.com/?&&x=b") - end - - it "should have a query of '&&x=b'" do - expect(@uri.query).to eq("&&x=b") - end - - it "should have query_values of {'x' => 'b'}" do - expect(@uri.query_values).to eq({'x' => 'b'}) - end -end - -describe Addressable::URI, "when parsed from " + - "'http://example.com/?q=a&&x=b'" do - before do - @uri = Addressable::URI.parse("http://example.com/?q=a&&x=b") - end - - it "should have a query of 'q=a&&x=b'" do - expect(@uri.query).to eq("q=a&&x=b") - end - - it "should have query_values of {'q' => 'a, 'x' => 'b'}" do - expect(@uri.query_values).to eq({'q' => 'a', 'x' => 'b'}) - end -end - -describe Addressable::URI, "when parsed from " + - "'http://example.com/?q&&x=b'" do - before do - @uri = Addressable::URI.parse("http://example.com/?q&&x=b") - end - - it "should have a query of 'q&&x=b'" do - expect(@uri.query).to eq("q&&x=b") - end - - it "should have query_values of {'q' => true, 'x' => 'b'}" do - expect(@uri.query_values).to eq({'q' => nil, 'x' => 'b'}) - end -end - -describe Addressable::URI, "when parsed from " + - "'http://example.com/?q=a+b'" do - before do - @uri = Addressable::URI.parse("http://example.com/?q=a+b") - end - - it "should have a query of 'q=a+b'" do - expect(@uri.query).to eq("q=a+b") - end - - it "should have query_values of {'q' => 'a b'}" do - expect(@uri.query_values).to eq({'q' => 'a b'}) - end - - it "should have a normalized query of 'q=a+b'" do - expect(@uri.normalized_query).to eq("q=a+b") - end -end - -describe Addressable::URI, "when parsed from 'https://example.com/?q=a+b'" do - before do - @uri = Addressable::URI.parse("https://example.com/?q=a+b") - end - - it "should have query_values of {'q' => 'a b'}" do - expect(@uri.query_values).to eq("q" => "a b") - end -end - -describe Addressable::URI, "when parsed from 'example.com?q=a+b'" do - before do - @uri = Addressable::URI.parse("example.com?q=a+b") - end - - it "should have query_values of {'q' => 'a b'}" do - expect(@uri.query_values).to eq("q" => "a b") - end -end - -describe Addressable::URI, "when parsed from 'mailto:?q=a+b'" do - before do - @uri = Addressable::URI.parse("mailto:?q=a+b") - end - - it "should have query_values of {'q' => 'a+b'}" do - expect(@uri.query_values).to eq("q" => "a+b") - end -end - -describe Addressable::URI, "when parsed from " + - "'http://example.com/?q=a%2bb'" do - before do - @uri = Addressable::URI.parse("http://example.com/?q=a%2bb") - end - - it "should have a query of 'q=a+b'" do - expect(@uri.query).to eq("q=a%2bb") - end - - it "should have query_values of {'q' => 'a+b'}" do - expect(@uri.query_values).to eq({'q' => 'a+b'}) - end - - it "should have a normalized query of 'q=a%2Bb'" do - expect(@uri.normalized_query).to eq("q=a%2Bb") - end -end - -describe Addressable::URI, "when parsed from " + - "'http://example.com/?v=%7E&w=%&x=%25&y=%2B&z=C%CC%A7'" do - before do - @uri = Addressable::URI.parse("http://example.com/?v=%7E&w=%&x=%25&y=%2B&z=C%CC%A7") - end - - it "should have a normalized query of 'v=~&w=%25&x=%25&y=%2B&z=%C3%87'" do - expect(@uri.normalized_query).to eq("v=~&w=%25&x=%25&y=%2B&z=%C3%87") - end -end - -describe Addressable::URI, "when parsed from " + - "'http://example.com/?v=%7E&w=%&x=%25&y=+&z=C%CC%A7'" do - before do - @uri = Addressable::URI.parse("http://example.com/?v=%7E&w=%&x=%25&y=+&z=C%CC%A7") - end - - it "should have a normalized query of 'v=~&w=%25&x=%25&y=+&z=%C3%87'" do - expect(@uri.normalized_query).to eq("v=~&w=%25&x=%25&y=+&z=%C3%87") - end -end - -describe Addressable::URI, "when parsed from 'http://example/?b=1&a=2&c=3'" do - before do - @uri = Addressable::URI.parse("http://example/?b=1&a=2&c=3") - end - - it "should have a sorted normalized query of 'a=2&b=1&c=3'" do - expect(@uri.normalized_query(:sorted)).to eq("a=2&b=1&c=3") - end -end - -describe Addressable::URI, "when parsed from 'http://example/?&a&&c&'" do - before do - @uri = Addressable::URI.parse("http://example/?&a&&c&") - end - - it "should have a compacted normalized query of 'a&c'" do - expect(@uri.normalized_query(:compacted)).to eq("a&c") - end -end - -describe Addressable::URI, "when parsed from 'http://example.com/?a=1&a=1'" do - before do - @uri = Addressable::URI.parse("http://example.com/?a=1&a=1") - end - - it "should have a compacted normalized query of 'a=1'" do - expect(@uri.normalized_query(:compacted)).to eq("a=1") - end -end - -describe Addressable::URI, "when parsed from 'http://example.com/?a=1&a=2'" do - before do - @uri = Addressable::URI.parse("http://example.com/?a=1&a=2") - end - - it "should have a compacted normalized query of 'a=1&a=2'" do - expect(@uri.normalized_query(:compacted)).to eq("a=1&a=2") - end -end - -describe Addressable::URI, "when parsed from " + - "'http://example.com/sound%2bvision'" do - before do - @uri = Addressable::URI.parse("http://example.com/sound%2bvision") - end - - it "should have a normalized path of '/sound+vision'" do - expect(@uri.normalized_path).to eq('/sound+vision') - end -end - -describe Addressable::URI, "when parsed from " + - "'http://example.com/?q='" do - before do - @uri = Addressable::URI.parse("http://example.com/?q=") - end - - it "should have a query of 'q='" do - expect(@uri.query).to eq("q=") - end - - it "should have query_values of {'q' => ''}" do - expect(@uri.query_values).to eq({'q' => ''}) - end -end - -describe Addressable::URI, "when parsed from " + - "'http://user@example.com'" do - before do - @uri = Addressable::URI.parse("http://user@example.com") - end - - it "should use the 'http' scheme" do - expect(@uri.scheme).to eq("http") - end - - it "should have a username of 'user'" do - expect(@uri.user).to eq("user") - end - - it "should have no password" do - expect(@uri.password).to eq(nil) - end - - it "should have a userinfo of 'user'" do - expect(@uri.userinfo).to eq("user") - end - - it "should have a normalized userinfo of 'user'" do - expect(@uri.normalized_userinfo).to eq("user") - end - - it "should have a host of 'example.com'" do - expect(@uri.host).to eq("example.com") - end - - it "should have default_port 80" do - expect(@uri.default_port).to eq(80) - end - - it "should use port 80" do - expect(@uri.inferred_port).to eq(80) - end - - it "should have the correct username after assignment" do - @uri.user = "newuser" - expect(@uri.user).to eq("newuser") - expect(@uri.password).to eq(nil) - expect(@uri.to_s).to eq("http://newuser@example.com") - end - - it "should have the correct password after assignment" do - @uri.password = "newpass" - expect(@uri.password).to eq("newpass") - expect(@uri.to_s).to eq("http://user:newpass@example.com") - end - - it "should have the correct userinfo segment after assignment" do - @uri.userinfo = "newuser:newpass" - expect(@uri.userinfo).to eq("newuser:newpass") - expect(@uri.user).to eq("newuser") - expect(@uri.password).to eq("newpass") - expect(@uri.host).to eq("example.com") - expect(@uri.port).to eq(nil) - expect(@uri.inferred_port).to eq(80) - expect(@uri.to_s).to eq("http://newuser:newpass@example.com") - end - - it "should have the correct userinfo segment after nil assignment" do - @uri.userinfo = nil - expect(@uri.userinfo).to eq(nil) - expect(@uri.user).to eq(nil) - expect(@uri.password).to eq(nil) - expect(@uri.host).to eq("example.com") - expect(@uri.port).to eq(nil) - expect(@uri.inferred_port).to eq(80) - expect(@uri.to_s).to eq("http://example.com") - end - - it "should have the correct authority segment after assignment" do - @uri.authority = "newuser@example.com" - expect(@uri.authority).to eq("newuser@example.com") - expect(@uri.user).to eq("newuser") - expect(@uri.password).to eq(nil) - expect(@uri.host).to eq("example.com") - expect(@uri.port).to eq(nil) - expect(@uri.inferred_port).to eq(80) - expect(@uri.to_s).to eq("http://newuser@example.com") - end - - it "should raise an error after nil assignment of authority segment" do - expect do - # This would create an invalid URI - @uri.authority = nil - end.to raise_error(Addressable::URI::InvalidURIError) - end -end - -describe Addressable::URI, "when parsed from " + - "'http://user:@example.com'" do - before do - @uri = Addressable::URI.parse("http://user:@example.com") - end - - it "should use the 'http' scheme" do - expect(@uri.scheme).to eq("http") - end - - it "should have a username of 'user'" do - expect(@uri.user).to eq("user") - end - - it "should have a password of ''" do - expect(@uri.password).to eq("") - end - - it "should have a normalized userinfo of 'user:'" do - expect(@uri.normalized_userinfo).to eq("user:") - end - - it "should have a host of 'example.com'" do - expect(@uri.host).to eq("example.com") - end - - it "should use port 80" do - expect(@uri.inferred_port).to eq(80) - end - - it "should have the correct username after assignment" do - @uri.user = "newuser" - expect(@uri.user).to eq("newuser") - expect(@uri.password).to eq("") - expect(@uri.to_s).to eq("http://newuser:@example.com") - end - - it "should have the correct password after assignment" do - @uri.password = "newpass" - expect(@uri.password).to eq("newpass") - expect(@uri.to_s).to eq("http://user:newpass@example.com") - end - - it "should have the correct authority segment after assignment" do - @uri.authority = "newuser:@example.com" - expect(@uri.authority).to eq("newuser:@example.com") - expect(@uri.user).to eq("newuser") - expect(@uri.password).to eq("") - expect(@uri.host).to eq("example.com") - expect(@uri.port).to eq(nil) - expect(@uri.inferred_port).to eq(80) - expect(@uri.to_s).to eq("http://newuser:@example.com") - end -end - -describe Addressable::URI, "when parsed from " + - "'http://:pass@example.com'" do - before do - @uri = Addressable::URI.parse("http://:pass@example.com") - end - - it "should use the 'http' scheme" do - expect(@uri.scheme).to eq("http") - end - - it "should have a username of ''" do - expect(@uri.user).to eq("") - end - - it "should have a password of 'pass'" do - expect(@uri.password).to eq("pass") - end - - it "should have a userinfo of ':pass'" do - expect(@uri.userinfo).to eq(":pass") - end - - it "should have a normalized userinfo of ':pass'" do - expect(@uri.normalized_userinfo).to eq(":pass") - end - - it "should have a host of 'example.com'" do - expect(@uri.host).to eq("example.com") - end - - it "should use port 80" do - expect(@uri.inferred_port).to eq(80) - end - - it "should have the correct username after assignment" do - @uri.user = "newuser" - expect(@uri.user).to eq("newuser") - expect(@uri.password).to eq("pass") - expect(@uri.to_s).to eq("http://newuser:pass@example.com") - end - - it "should have the correct password after assignment" do - @uri.password = "newpass" - expect(@uri.password).to eq("newpass") - expect(@uri.user).to eq("") - expect(@uri.to_s).to eq("http://:newpass@example.com") - end - - it "should have the correct authority segment after assignment" do - @uri.authority = ":newpass@example.com" - expect(@uri.authority).to eq(":newpass@example.com") - expect(@uri.user).to eq("") - expect(@uri.password).to eq("newpass") - expect(@uri.host).to eq("example.com") - expect(@uri.port).to eq(nil) - expect(@uri.inferred_port).to eq(80) - expect(@uri.to_s).to eq("http://:newpass@example.com") - end -end - -describe Addressable::URI, "when parsed from " + - "'http://:@example.com'" do - before do - @uri = Addressable::URI.parse("http://:@example.com") - end - - it "should use the 'http' scheme" do - expect(@uri.scheme).to eq("http") - end - - it "should have a username of ''" do - expect(@uri.user).to eq("") - end - - it "should have a password of ''" do - expect(@uri.password).to eq("") - end - - it "should have a normalized userinfo of nil" do - expect(@uri.normalized_userinfo).to eq(nil) - end - - it "should have a host of 'example.com'" do - expect(@uri.host).to eq("example.com") - end - - it "should use port 80" do - expect(@uri.inferred_port).to eq(80) - end - - it "should have the correct username after assignment" do - @uri.user = "newuser" - expect(@uri.user).to eq("newuser") - expect(@uri.password).to eq("") - expect(@uri.to_s).to eq("http://newuser:@example.com") - end - - it "should have the correct password after assignment" do - @uri.password = "newpass" - expect(@uri.password).to eq("newpass") - expect(@uri.user).to eq("") - expect(@uri.to_s).to eq("http://:newpass@example.com") - end - - it "should have the correct authority segment after assignment" do - @uri.authority = ":@newexample.com" - expect(@uri.authority).to eq(":@newexample.com") - expect(@uri.user).to eq("") - expect(@uri.password).to eq("") - expect(@uri.host).to eq("newexample.com") - expect(@uri.port).to eq(nil) - expect(@uri.inferred_port).to eq(80) - expect(@uri.to_s).to eq("http://:@newexample.com") - end -end - -describe Addressable::URI, "when parsed from " + - "'#example'" do - before do - @uri = Addressable::URI.parse("#example") - end - - it "should be considered relative" do - expect(@uri).to be_relative - end - - it "should have a host of nil" do - expect(@uri.host).to eq(nil) - end - - it "should have a site of nil" do - expect(@uri.site).to eq(nil) - end - - it "should have a normalized_site of nil" do - expect(@uri.normalized_site).to eq(nil) - end - - it "should have a path of ''" do - expect(@uri.path).to eq("") - end - - it "should have a query string of nil" do - expect(@uri.query).to eq(nil) - end - - it "should have a fragment of 'example'" do - expect(@uri.fragment).to eq("example") - end -end - -describe Addressable::URI, "when parsed from " + - "the network-path reference '//example.com/'" do - before do - @uri = Addressable::URI.parse("//example.com/") - end - - it "should be considered relative" do - expect(@uri).to be_relative - end - - it "should have a host of 'example.com'" do - expect(@uri.host).to eq("example.com") - end - - it "should have a path of '/'" do - expect(@uri.path).to eq("/") - end - - it "should raise an error if routing is attempted" do - expect do - @uri.route_to("http://example.com/") - end.to raise_error(ArgumentError, /\/\/example.com\//) - expect do - @uri.route_from("http://example.com/") - end.to raise_error(ArgumentError, /\/\/example.com\//) - end - - it "should have a 'null' origin" do - expect(@uri.origin).to eq('null') - end -end - -describe Addressable::URI, "when parsed from " + - "'feed://http://example.com/'" do - before do - @uri = Addressable::URI.parse("feed://http://example.com/") - end - - it "should have a host of 'http'" do - expect(@uri.host).to eq("http") - end - - it "should have a path of '//example.com/'" do - expect(@uri.path).to eq("//example.com/") - end -end - -describe Addressable::URI, "when parsed from " + - "'feed:http://example.com/'" do - before do - @uri = Addressable::URI.parse("feed:http://example.com/") - end - - it "should have a path of 'http://example.com/'" do - expect(@uri.path).to eq("http://example.com/") - end - - it "should normalize to 'http://example.com/'" do - expect(@uri.normalize.to_s).to eq("http://example.com/") - expect(@uri.normalize!.to_s).to eq("http://example.com/") - end - - it "should have a 'null' origin" do - expect(@uri.origin).to eq('null') - end -end - -describe Addressable::URI, "when parsed from " + - "'example://a/b/c/%7Bfoo%7D'" do - before do - @uri = Addressable::URI.parse("example://a/b/c/%7Bfoo%7D") - end - - # Section 6.2.2 of RFC 3986 - it "should be equivalent to eXAMPLE://a/./b/../b/%63/%7bfoo%7d" do - expect(@uri).to eq( - Addressable::URI.parse("eXAMPLE://a/./b/../b/%63/%7bfoo%7d") - ) - end - - it "should have an origin of 'example://a'" do - expect(@uri.origin).to eq('example://a') - end -end - -describe Addressable::URI, "when parsed from " + - "'http://example.com/indirect/path/./to/../resource/'" do - before do - @uri = Addressable::URI.parse( - "http://example.com/indirect/path/./to/../resource/") - end - - it "should use the 'http' scheme" do - expect(@uri.scheme).to eq("http") - end - - it "should have a host of 'example.com'" do - expect(@uri.host).to eq("example.com") - end - - it "should use port 80" do - expect(@uri.inferred_port).to eq(80) - end - - it "should have a path of '/indirect/path/./to/../resource/'" do - expect(@uri.path).to eq("/indirect/path/./to/../resource/") - end - - # Section 6.2.2.3 of RFC 3986 - it "should have a normalized path of '/indirect/path/resource/'" do - expect(@uri.normalize.path).to eq("/indirect/path/resource/") - expect(@uri.normalize!.path).to eq("/indirect/path/resource/") - end -end - -describe Addressable::URI, "when parsed from " + - "'http://under_score.example.com/'" do - it "should not cause an error" do - expect do - Addressable::URI.parse("http://under_score.example.com/") - end.not_to raise_error - end -end - -describe Addressable::URI, "when parsed from " + - "'./this:that'" do - before do - @uri = Addressable::URI.parse("./this:that") - end - - it "should be considered relative" do - expect(@uri).to be_relative - end - - it "should have no scheme" do - expect(@uri.scheme).to eq(nil) - end - - it "should have a 'null' origin" do - expect(@uri.origin).to eq('null') - end -end - -describe Addressable::URI, "when parsed from " + - "'this:that'" do - before do - @uri = Addressable::URI.parse("this:that") - end - - it "should be considered absolute" do - expect(@uri).to be_absolute - end - - it "should have a scheme of 'this'" do - expect(@uri.scheme).to eq("this") - end - - it "should have a 'null' origin" do - expect(@uri.origin).to eq('null') - end -end - -describe Addressable::URI, "when parsed from '?'" do - before do - @uri = Addressable::URI.parse("?") - end - - it "should normalize to ''" do - expect(@uri.normalize.to_s).to eq("") - end - - it "should have the correct return type" do - expect(@uri.query_values).to eq({}) - expect(@uri.query_values(Hash)).to eq({}) - expect(@uri.query_values(Array)).to eq([]) - end - - it "should have a 'null' origin" do - expect(@uri.origin).to eq('null') - end -end - -describe Addressable::URI, "when parsed from '?one=1&two=2&three=3'" do - before do - @uri = Addressable::URI.parse("?one=1&two=2&three=3") - end - - it "should have the correct query values" do - expect(@uri.query_values).to eq({"one" => "1", "two" => "2", "three" => "3"}) - end - - it "should raise an error for invalid return type values" do - expect do - @uri.query_values(Integer) - end.to raise_error(ArgumentError) - end - - it "should have the correct array query values" do - expect(@uri.query_values(Array)).to eq([ - ["one", "1"], ["two", "2"], ["three", "3"] - ]) - end - - it "should have a 'null' origin" do - expect(@uri.origin).to eq('null') - end -end - -describe Addressable::URI, "when parsed from '?one=1=uno&two=2=dos'" do - before do - @uri = Addressable::URI.parse("?one=1=uno&two=2=dos") - end - - it "should have the correct query values" do - expect(@uri.query_values).to eq({"one" => "1=uno", "two" => "2=dos"}) - end - - it "should have the correct array query values" do - expect(@uri.query_values(Array)).to eq([ - ["one", "1=uno"], ["two", "2=dos"] - ]) - end -end - -describe Addressable::URI, "when parsed from '?one[two][three]=four'" do - before do - @uri = Addressable::URI.parse("?one[two][three]=four") - end - - it "should have the correct query values" do - expect(@uri.query_values).to eq({"one[two][three]" => "four"}) - end - - it "should have the correct array query values" do - expect(@uri.query_values(Array)).to eq([ - ["one[two][three]", "four"] - ]) - end -end - -describe Addressable::URI, "when parsed from '?one.two.three=four'" do - before do - @uri = Addressable::URI.parse("?one.two.three=four") - end - - it "should have the correct query values" do - expect(@uri.query_values).to eq({ - "one.two.three" => "four" - }) - end - - it "should have the correct array query values" do - expect(@uri.query_values(Array)).to eq([ - ["one.two.three", "four"] - ]) - end -end - -describe Addressable::URI, "when parsed from " + - "'?one[two][three]=four&one[two][five]=six'" do - before do - @uri = Addressable::URI.parse("?one[two][three]=four&one[two][five]=six") - end - - it "should have the correct query values" do - expect(@uri.query_values).to eq({ - "one[two][three]" => "four", "one[two][five]" => "six" - }) - end - - it "should have the correct array query values" do - expect(@uri.query_values(Array)).to eq([ - ["one[two][three]", "four"], ["one[two][five]", "six"] - ]) - end -end - -describe Addressable::URI, "when parsed from " + - "'?one.two.three=four&one.two.five=six'" do - before do - @uri = Addressable::URI.parse("?one.two.three=four&one.two.five=six") - end - - it "should have the correct query values" do - expect(@uri.query_values).to eq({ - "one.two.three" => "four", "one.two.five" => "six" - }) - end - - it "should have the correct array query values" do - expect(@uri.query_values(Array)).to eq([ - ["one.two.three", "four"], ["one.two.five", "six"] - ]) - end -end - -describe Addressable::URI, "when parsed from " + - "'?one=two&one=three'" do - before do - @uri = Addressable::URI.parse( - "?one=two&one=three&one=four" - ) - end - - it "should have correct array query values" do - expect(@uri.query_values(Array)).to eq( - [['one', 'two'], ['one', 'three'], ['one', 'four']] - ) - end - - it "should have correct hash query values" do - skip("This is probably more desirable behavior.") - expect(@uri.query_values(Hash)).to eq( - {'one' => ['two', 'three', 'four']} - ) - end - - it "should handle assignment with keys of mixed type" do - @uri.query_values = @uri.query_values(Hash).merge({:one => 'three'}) - expect(@uri.query_values(Hash)).to eq({'one' => 'three'}) - end -end - -describe Addressable::URI, "when parsed from " + - "'?one[two][three][]=four&one[two][three][]=five'" do - before do - @uri = Addressable::URI.parse( - "?one[two][three][]=four&one[two][three][]=five" - ) - end - - it "should have correct query values" do - expect(@uri.query_values(Hash)).to eq({"one[two][three][]" => "five"}) - end - - it "should have correct array query values" do - expect(@uri.query_values(Array)).to eq([ - ["one[two][three][]", "four"], ["one[two][three][]", "five"] - ]) - end -end - -describe Addressable::URI, "when parsed from " + - "'?one[two][three][0]=four&one[two][three][1]=five'" do - before do - @uri = Addressable::URI.parse( - "?one[two][three][0]=four&one[two][three][1]=five" - ) - end - - it "should have the correct query values" do - expect(@uri.query_values).to eq({ - "one[two][three][0]" => "four", "one[two][three][1]" => "five" - }) - end -end - -describe Addressable::URI, "when parsed from " + - "'?one[two][three][1]=four&one[two][three][0]=five'" do - before do - @uri = Addressable::URI.parse( - "?one[two][three][1]=four&one[two][three][0]=five" - ) - end - - it "should have the correct query values" do - expect(@uri.query_values).to eq({ - "one[two][three][1]" => "four", "one[two][three][0]" => "five" - }) - end -end - -describe Addressable::URI, "when parsed from " + - "'?one[two][three][2]=four&one[two][three][1]=five'" do - before do - @uri = Addressable::URI.parse( - "?one[two][three][2]=four&one[two][three][1]=five" - ) - end - - it "should have the correct query values" do - expect(@uri.query_values).to eq({ - "one[two][three][2]" => "four", "one[two][three][1]" => "five" - }) - end -end - -describe Addressable::URI, "when parsed from " + - "'http://www.詹姆斯.com/'" do - before do - @uri = Addressable::URI.parse("http://www.詹姆斯.com/") - end - - it "should be equivalent to 'http://www.xn--8ws00zhy3a.com/'" do - expect(@uri).to eq( - Addressable::URI.parse("http://www.xn--8ws00zhy3a.com/") - ) - end - - it "should not have domain name encoded during normalization" do - expect(Addressable::URI.normalized_encode(@uri.to_s)).to eq( - "http://www.詹姆斯.com/" - ) - end - - it "should have an origin of 'http://www.xn--8ws00zhy3a.com'" do - expect(@uri.origin).to eq('http://www.xn--8ws00zhy3a.com') - end -end - -describe Addressable::URI, "when parsed from " + - "'http://www.詹姆斯.com/ some spaces /'" do - before do - @uri = Addressable::URI.parse("http://www.詹姆斯.com/ some spaces /") - end - - it "should be equivalent to " + - "'http://www.xn--8ws00zhy3a.com/%20some%20spaces%20/'" do - expect(@uri).to eq( - Addressable::URI.parse( - "http://www.xn--8ws00zhy3a.com/%20some%20spaces%20/") - ) - end - - it "should not have domain name encoded during normalization" do - expect(Addressable::URI.normalized_encode(@uri.to_s)).to eq( - "http://www.詹姆斯.com/%20some%20spaces%20/" - ) - end - - it "should have an origin of 'http://www.xn--8ws00zhy3a.com'" do - expect(@uri.origin).to eq('http://www.xn--8ws00zhy3a.com') - end -end - -describe Addressable::URI, "when parsed from " + - "'http://www.xn--8ws00zhy3a.com/'" do - before do - @uri = Addressable::URI.parse("http://www.xn--8ws00zhy3a.com/") - end - - it "should be displayed as http://www.詹姆斯.com/" do - expect(@uri.display_uri.to_s).to eq("http://www.詹姆斯.com/") - end - - it "should properly force the encoding" do - display_string = @uri.display_uri.to_str - expect(display_string).to eq("http://www.詹姆斯.com/") - if display_string.respond_to?(:encoding) - expect(display_string.encoding.to_s).to eq(Encoding::UTF_8.to_s) - end - end - - it "should have an origin of 'http://www.xn--8ws00zhy3a.com'" do - expect(@uri.origin).to eq('http://www.xn--8ws00zhy3a.com') - end -end - -describe Addressable::URI, "when parsed from " + - "'http://www.詹姆斯.com/atomtests/iri/詹.html'" do - before do - @uri = Addressable::URI.parse("http://www.詹姆斯.com/atomtests/iri/詹.html") - end - - it "should normalize to " + - "http://www.xn--8ws00zhy3a.com/atomtests/iri/%E8%A9%B9.html" do - expect(@uri.normalize.to_s).to eq( - "http://www.xn--8ws00zhy3a.com/atomtests/iri/%E8%A9%B9.html" - ) - expect(@uri.normalize!.to_s).to eq( - "http://www.xn--8ws00zhy3a.com/atomtests/iri/%E8%A9%B9.html" - ) - end -end - -describe Addressable::URI, "when parsed from a percent-encoded IRI" do - before do - @uri = Addressable::URI.parse( - "http://www.%E3%81%BB%E3%82%93%E3%81%A8%E3%81%86%E3%81%AB%E3%81%AA" + - "%E3%81%8C%E3%81%84%E3%82%8F%E3%81%91%E3%81%AE%E3%82%8F%E3%81%8B%E3" + - "%82%89%E3%81%AA%E3%81%84%E3%81%A9%E3%82%81%E3%81%84%E3%82%93%E3%82" + - "%81%E3%81%84%E3%81%AE%E3%82%89%E3%81%B9%E3%82%8B%E3%81%BE%E3%81%A0" + - "%E3%81%AA%E3%81%8C%E3%81%8F%E3%81%97%E3%81%AA%E3%81%84%E3%81%A8%E3" + - "%81%9F%E3%82%8A%E3%81%AA%E3%81%84.w3.mag.keio.ac.jp" - ) - end - - it "should normalize to something sane" do - expect(@uri.normalize.to_s).to eq( - "http://www.xn--n8jaaaaai5bhf7as8fsfk3jnknefdde3f" + - "g11amb5gzdb4wi9bya3kc6lra.w3.mag.keio.ac.jp/" - ) - expect(@uri.normalize!.to_s).to eq( - "http://www.xn--n8jaaaaai5bhf7as8fsfk3jnknefdde3f" + - "g11amb5gzdb4wi9bya3kc6lra.w3.mag.keio.ac.jp/" - ) - end - - it "should have the correct origin" do - expect(@uri.origin).to eq( - "http://www.xn--n8jaaaaai5bhf7as8fsfk3jnknefdde3f" + - "g11amb5gzdb4wi9bya3kc6lra.w3.mag.keio.ac.jp" - ) - end -end - -describe Addressable::URI, "with a base uri of 'http://a/b/c/d;p?q'" do - before do - @uri = Addressable::URI.parse("http://a/b/c/d;p?q") - end - - # Section 5.4.1 of RFC 3986 - it "when joined with 'g:h' should resolve to g:h" do - expect((@uri + "g:h").to_s).to eq("g:h") - expect(Addressable::URI.join(@uri, "g:h").to_s).to eq("g:h") - end - - # Section 5.4.1 of RFC 3986 - it "when joined with 'g' should resolve to http://a/b/c/g" do - expect((@uri + "g").to_s).to eq("http://a/b/c/g") - expect(Addressable::URI.join(@uri.to_s, "g").to_s).to eq("http://a/b/c/g") - end - - # Section 5.4.1 of RFC 3986 - it "when joined with './g' should resolve to http://a/b/c/g" do - expect((@uri + "./g").to_s).to eq("http://a/b/c/g") - expect(Addressable::URI.join(@uri.to_s, "./g").to_s).to eq("http://a/b/c/g") - end - - # Section 5.4.1 of RFC 3986 - it "when joined with 'g/' should resolve to http://a/b/c/g/" do - expect((@uri + "g/").to_s).to eq("http://a/b/c/g/") - expect(Addressable::URI.join(@uri.to_s, "g/").to_s).to eq("http://a/b/c/g/") - end - - # Section 5.4.1 of RFC 3986 - it "when joined with '/g' should resolve to http://a/g" do - expect((@uri + "/g").to_s).to eq("http://a/g") - expect(Addressable::URI.join(@uri.to_s, "/g").to_s).to eq("http://a/g") - end - - # Section 5.4.1 of RFC 3986 - it "when joined with '//g' should resolve to http://g" do - expect((@uri + "//g").to_s).to eq("http://g") - expect(Addressable::URI.join(@uri.to_s, "//g").to_s).to eq("http://g") - end - - # Section 5.4.1 of RFC 3986 - it "when joined with '?y' should resolve to http://a/b/c/d;p?y" do - expect((@uri + "?y").to_s).to eq("http://a/b/c/d;p?y") - expect(Addressable::URI.join(@uri.to_s, "?y").to_s).to eq("http://a/b/c/d;p?y") - end - - # Section 5.4.1 of RFC 3986 - it "when joined with 'g?y' should resolve to http://a/b/c/g?y" do - expect((@uri + "g?y").to_s).to eq("http://a/b/c/g?y") - expect(Addressable::URI.join(@uri.to_s, "g?y").to_s).to eq("http://a/b/c/g?y") - end - - # Section 5.4.1 of RFC 3986 - it "when joined with '#s' should resolve to http://a/b/c/d;p?q#s" do - expect((@uri + "#s").to_s).to eq("http://a/b/c/d;p?q#s") - expect(Addressable::URI.join(@uri.to_s, "#s").to_s).to eq( - "http://a/b/c/d;p?q#s" - ) - end - - # Section 5.4.1 of RFC 3986 - it "when joined with 'g#s' should resolve to http://a/b/c/g#s" do - expect((@uri + "g#s").to_s).to eq("http://a/b/c/g#s") - expect(Addressable::URI.join(@uri.to_s, "g#s").to_s).to eq("http://a/b/c/g#s") - end - - # Section 5.4.1 of RFC 3986 - it "when joined with 'g?y#s' should resolve to http://a/b/c/g?y#s" do - expect((@uri + "g?y#s").to_s).to eq("http://a/b/c/g?y#s") - expect(Addressable::URI.join( - @uri.to_s, "g?y#s").to_s).to eq("http://a/b/c/g?y#s") - end - - # Section 5.4.1 of RFC 3986 - it "when joined with ';x' should resolve to http://a/b/c/;x" do - expect((@uri + ";x").to_s).to eq("http://a/b/c/;x") - expect(Addressable::URI.join(@uri.to_s, ";x").to_s).to eq("http://a/b/c/;x") - end - - # Section 5.4.1 of RFC 3986 - it "when joined with 'g;x' should resolve to http://a/b/c/g;x" do - expect((@uri + "g;x").to_s).to eq("http://a/b/c/g;x") - expect(Addressable::URI.join(@uri.to_s, "g;x").to_s).to eq("http://a/b/c/g;x") - end - - # Section 5.4.1 of RFC 3986 - it "when joined with 'g;x?y#s' should resolve to http://a/b/c/g;x?y#s" do - expect((@uri + "g;x?y#s").to_s).to eq("http://a/b/c/g;x?y#s") - expect(Addressable::URI.join( - @uri.to_s, "g;x?y#s").to_s).to eq("http://a/b/c/g;x?y#s") - end - - # Section 5.4.1 of RFC 3986 - it "when joined with '' should resolve to http://a/b/c/d;p?q" do - expect((@uri + "").to_s).to eq("http://a/b/c/d;p?q") - expect(Addressable::URI.join(@uri.to_s, "").to_s).to eq("http://a/b/c/d;p?q") - end - - # Section 5.4.1 of RFC 3986 - it "when joined with '.' should resolve to http://a/b/c/" do - expect((@uri + ".").to_s).to eq("http://a/b/c/") - expect(Addressable::URI.join(@uri.to_s, ".").to_s).to eq("http://a/b/c/") - end - - # Section 5.4.1 of RFC 3986 - it "when joined with './' should resolve to http://a/b/c/" do - expect((@uri + "./").to_s).to eq("http://a/b/c/") - expect(Addressable::URI.join(@uri.to_s, "./").to_s).to eq("http://a/b/c/") - end - - # Section 5.4.1 of RFC 3986 - it "when joined with '..' should resolve to http://a/b/" do - expect((@uri + "..").to_s).to eq("http://a/b/") - expect(Addressable::URI.join(@uri.to_s, "..").to_s).to eq("http://a/b/") - end - - # Section 5.4.1 of RFC 3986 - it "when joined with '../' should resolve to http://a/b/" do - expect((@uri + "../").to_s).to eq("http://a/b/") - expect(Addressable::URI.join(@uri.to_s, "../").to_s).to eq("http://a/b/") - end - - # Section 5.4.1 of RFC 3986 - it "when joined with '../g' should resolve to http://a/b/g" do - expect((@uri + "../g").to_s).to eq("http://a/b/g") - expect(Addressable::URI.join(@uri.to_s, "../g").to_s).to eq("http://a/b/g") - end - - # Section 5.4.1 of RFC 3986 - it "when joined with '../..' should resolve to http://a/" do - expect((@uri + "../..").to_s).to eq("http://a/") - expect(Addressable::URI.join(@uri.to_s, "../..").to_s).to eq("http://a/") - end - - # Section 5.4.1 of RFC 3986 - it "when joined with '../../' should resolve to http://a/" do - expect((@uri + "../../").to_s).to eq("http://a/") - expect(Addressable::URI.join(@uri.to_s, "../../").to_s).to eq("http://a/") - end - - # Section 5.4.1 of RFC 3986 - it "when joined with '../../g' should resolve to http://a/g" do - expect((@uri + "../../g").to_s).to eq("http://a/g") - expect(Addressable::URI.join(@uri.to_s, "../../g").to_s).to eq("http://a/g") - end - - # Section 5.4.2 of RFC 3986 - it "when joined with '../../../g' should resolve to http://a/g" do - expect((@uri + "../../../g").to_s).to eq("http://a/g") - expect(Addressable::URI.join(@uri.to_s, "../../../g").to_s).to eq("http://a/g") - end - - it "when joined with '../.././../g' should resolve to http://a/g" do - expect((@uri + "../.././../g").to_s).to eq("http://a/g") - expect(Addressable::URI.join(@uri.to_s, "../.././../g").to_s).to eq( - "http://a/g" - ) - end - - # Section 5.4.2 of RFC 3986 - it "when joined with '../../../../g' should resolve to http://a/g" do - expect((@uri + "../../../../g").to_s).to eq("http://a/g") - expect(Addressable::URI.join( - @uri.to_s, "../../../../g").to_s).to eq("http://a/g") - end - - # Section 5.4.2 of RFC 3986 - it "when joined with '/./g' should resolve to http://a/g" do - expect((@uri + "/./g").to_s).to eq("http://a/g") - expect(Addressable::URI.join(@uri.to_s, "/./g").to_s).to eq("http://a/g") - end - - # Section 5.4.2 of RFC 3986 - it "when joined with '/../g' should resolve to http://a/g" do - expect((@uri + "/../g").to_s).to eq("http://a/g") - expect(Addressable::URI.join(@uri.to_s, "/../g").to_s).to eq("http://a/g") - end - - # Section 5.4.2 of RFC 3986 - it "when joined with 'g.' should resolve to http://a/b/c/g." do - expect((@uri + "g.").to_s).to eq("http://a/b/c/g.") - expect(Addressable::URI.join(@uri.to_s, "g.").to_s).to eq("http://a/b/c/g.") - end - - # Section 5.4.2 of RFC 3986 - it "when joined with '.g' should resolve to http://a/b/c/.g" do - expect((@uri + ".g").to_s).to eq("http://a/b/c/.g") - expect(Addressable::URI.join(@uri.to_s, ".g").to_s).to eq("http://a/b/c/.g") - end - - # Section 5.4.2 of RFC 3986 - it "when joined with 'g..' should resolve to http://a/b/c/g.." do - expect((@uri + "g..").to_s).to eq("http://a/b/c/g..") - expect(Addressable::URI.join(@uri.to_s, "g..").to_s).to eq("http://a/b/c/g..") - end - - # Section 5.4.2 of RFC 3986 - it "when joined with '..g' should resolve to http://a/b/c/..g" do - expect((@uri + "..g").to_s).to eq("http://a/b/c/..g") - expect(Addressable::URI.join(@uri.to_s, "..g").to_s).to eq("http://a/b/c/..g") - end - - # Section 5.4.2 of RFC 3986 - it "when joined with './../g' should resolve to http://a/b/g" do - expect((@uri + "./../g").to_s).to eq("http://a/b/g") - expect(Addressable::URI.join(@uri.to_s, "./../g").to_s).to eq("http://a/b/g") - end - - # Section 5.4.2 of RFC 3986 - it "when joined with './g/.' should resolve to http://a/b/c/g/" do - expect((@uri + "./g/.").to_s).to eq("http://a/b/c/g/") - expect(Addressable::URI.join(@uri.to_s, "./g/.").to_s).to eq("http://a/b/c/g/") - end - - # Section 5.4.2 of RFC 3986 - it "when joined with 'g/./h' should resolve to http://a/b/c/g/h" do - expect((@uri + "g/./h").to_s).to eq("http://a/b/c/g/h") - expect(Addressable::URI.join(@uri.to_s, "g/./h").to_s).to eq("http://a/b/c/g/h") - end - - # Section 5.4.2 of RFC 3986 - it "when joined with 'g/../h' should resolve to http://a/b/c/h" do - expect((@uri + "g/../h").to_s).to eq("http://a/b/c/h") - expect(Addressable::URI.join(@uri.to_s, "g/../h").to_s).to eq("http://a/b/c/h") - end - - # Section 5.4.2 of RFC 3986 - it "when joined with 'g;x=1/./y' " + - "should resolve to http://a/b/c/g;x=1/y" do - expect((@uri + "g;x=1/./y").to_s).to eq("http://a/b/c/g;x=1/y") - expect(Addressable::URI.join( - @uri.to_s, "g;x=1/./y").to_s).to eq("http://a/b/c/g;x=1/y") - end - - # Section 5.4.2 of RFC 3986 - it "when joined with 'g;x=1/../y' should resolve to http://a/b/c/y" do - expect((@uri + "g;x=1/../y").to_s).to eq("http://a/b/c/y") - expect(Addressable::URI.join( - @uri.to_s, "g;x=1/../y").to_s).to eq("http://a/b/c/y") - end - - # Section 5.4.2 of RFC 3986 - it "when joined with 'g?y/./x' " + - "should resolve to http://a/b/c/g?y/./x" do - expect((@uri + "g?y/./x").to_s).to eq("http://a/b/c/g?y/./x") - expect(Addressable::URI.join( - @uri.to_s, "g?y/./x").to_s).to eq("http://a/b/c/g?y/./x") - end - - # Section 5.4.2 of RFC 3986 - it "when joined with 'g?y/../x' " + - "should resolve to http://a/b/c/g?y/../x" do - expect((@uri + "g?y/../x").to_s).to eq("http://a/b/c/g?y/../x") - expect(Addressable::URI.join( - @uri.to_s, "g?y/../x").to_s).to eq("http://a/b/c/g?y/../x") - end - - # Section 5.4.2 of RFC 3986 - it "when joined with 'g#s/./x' " + - "should resolve to http://a/b/c/g#s/./x" do - expect((@uri + "g#s/./x").to_s).to eq("http://a/b/c/g#s/./x") - expect(Addressable::URI.join( - @uri.to_s, "g#s/./x").to_s).to eq("http://a/b/c/g#s/./x") - end - - # Section 5.4.2 of RFC 3986 - it "when joined with 'g#s/../x' " + - "should resolve to http://a/b/c/g#s/../x" do - expect((@uri + "g#s/../x").to_s).to eq("http://a/b/c/g#s/../x") - expect(Addressable::URI.join( - @uri.to_s, "g#s/../x").to_s).to eq("http://a/b/c/g#s/../x") - end - - # Section 5.4.2 of RFC 3986 - it "when joined with 'http:g' should resolve to http:g" do - expect((@uri + "http:g").to_s).to eq("http:g") - expect(Addressable::URI.join(@uri.to_s, "http:g").to_s).to eq("http:g") - end - - # Edge case to be sure - it "when joined with '//example.com/' should " + - "resolve to http://example.com/" do - expect((@uri + "//example.com/").to_s).to eq("http://example.com/") - expect(Addressable::URI.join( - @uri.to_s, "//example.com/").to_s).to eq("http://example.com/") - end - - it "when joined with a bogus object a TypeError should be raised" do - expect do - Addressable::URI.join(@uri, 42) - end.to raise_error(TypeError) - end -end - -describe Addressable::URI, "when converting the path " + - "'relative/path/to/something'" do - before do - @path = 'relative/path/to/something' - end - - it "should convert to " + - "\'relative/path/to/something\'" do - @uri = Addressable::URI.convert_path(@path) - expect(@uri.to_str).to eq("relative/path/to/something") - end - - it "should join with an absolute file path correctly" do - @base = Addressable::URI.convert_path("/absolute/path/") - @uri = Addressable::URI.convert_path(@path) - expect((@base + @uri).to_str).to eq( - "file:///absolute/path/relative/path/to/something" - ) - end -end - -describe Addressable::URI, "when converting a bogus path" do - it "should raise a TypeError" do - expect do - Addressable::URI.convert_path(42) - end.to raise_error(TypeError) - end -end - -describe Addressable::URI, "when given a UNIX root directory" do - before do - @path = "/" - end - - it "should convert to \'file:///\'" do - @uri = Addressable::URI.convert_path(@path) - expect(@uri.to_str).to eq("file:///") - end - - it "should have an origin of 'file://'" do - @uri = Addressable::URI.convert_path(@path) - expect(@uri.origin).to eq('file://') - end -end - -describe Addressable::URI, "when given a Windows root directory" do - before do - @path = "C:\\" - end - - it "should convert to \'file:///c:/\'" do - @uri = Addressable::URI.convert_path(@path) - expect(@uri.to_str).to eq("file:///c:/") - end - - it "should have an origin of 'file://'" do - @uri = Addressable::URI.convert_path(@path) - expect(@uri.origin).to eq('file://') - end -end - -describe Addressable::URI, "when given the path '/one/two/'" do - before do - @path = '/one/two/' - end - - it "should convert to " + - "\'file:///one/two/\'" do - @uri = Addressable::URI.convert_path(@path) - expect(@uri.to_str).to eq("file:///one/two/") - end - - it "should have an origin of 'file://'" do - @uri = Addressable::URI.convert_path(@path) - expect(@uri.origin).to eq('file://') - end -end - -describe Addressable::URI, "when given the tld " do - it "'uk' should have a tld of 'uk'" do - uri = Addressable::URI.parse("http://example.com") - uri.tld = "uk" - - expect(uri.tld).to eq("uk") - end - - context "which " do - let (:uri) { Addressable::URI.parse("http://www.comrade.net/path/to/source/") } - - it "contains a subdomain" do - uri.tld = "co.uk" - - expect(uri.to_s).to eq("http://www.comrade.co.uk/path/to/source/") - end - - it "is part of the domain" do - uri.tld = "com" - - expect(uri.to_s).to eq("http://www.comrade.com/path/to/source/") - end - end -end - -describe Addressable::URI, "when given the path " + - "'c:\\windows\\My Documents 100%20\\foo.txt'" do - before do - @path = "c:\\windows\\My Documents 100%20\\foo.txt" - end - - it "should convert to " + - "\'file:///c:/windows/My%20Documents%20100%20/foo.txt\'" do - @uri = Addressable::URI.convert_path(@path) - expect(@uri.to_str).to eq("file:///c:/windows/My%20Documents%20100%20/foo.txt") - end - - it "should have an origin of 'file://'" do - @uri = Addressable::URI.convert_path(@path) - expect(@uri.origin).to eq('file://') - end -end - -describe Addressable::URI, "when given the path " + - "'file://c:\\windows\\My Documents 100%20\\foo.txt'" do - before do - @path = "file://c:\\windows\\My Documents 100%20\\foo.txt" - end - - it "should convert to " + - "\'file:///c:/windows/My%20Documents%20100%20/foo.txt\'" do - @uri = Addressable::URI.convert_path(@path) - expect(@uri.to_str).to eq("file:///c:/windows/My%20Documents%20100%20/foo.txt") - end - - it "should have an origin of 'file://'" do - @uri = Addressable::URI.convert_path(@path) - expect(@uri.origin).to eq('file://') - end -end - -describe Addressable::URI, "when given the path " + - "'file:c:\\windows\\My Documents 100%20\\foo.txt'" do - before do - @path = "file:c:\\windows\\My Documents 100%20\\foo.txt" - end - - it "should convert to " + - "\'file:///c:/windows/My%20Documents%20100%20/foo.txt\'" do - @uri = Addressable::URI.convert_path(@path) - expect(@uri.to_str).to eq("file:///c:/windows/My%20Documents%20100%20/foo.txt") - end - - it "should have an origin of 'file://'" do - @uri = Addressable::URI.convert_path(@path) - expect(@uri.origin).to eq('file://') - end -end - -describe Addressable::URI, "when given the path " + - "'file:/c:\\windows\\My Documents 100%20\\foo.txt'" do - before do - @path = "file:/c:\\windows\\My Documents 100%20\\foo.txt" - end - - it "should convert to " + - "\'file:///c:/windows/My%20Documents%20100%20/foo.txt\'" do - @uri = Addressable::URI.convert_path(@path) - expect(@uri.to_str).to eq("file:///c:/windows/My%20Documents%20100%20/foo.txt") - end - - it "should have an origin of 'file://'" do - @uri = Addressable::URI.convert_path(@path) - expect(@uri.origin).to eq('file://') - end -end - -describe Addressable::URI, "when given the path " + - "'file:///c|/windows/My%20Documents%20100%20/foo.txt'" do - before do - @path = "file:///c|/windows/My%20Documents%20100%20/foo.txt" - end - - it "should convert to " + - "\'file:///c:/windows/My%20Documents%20100%20/foo.txt\'" do - @uri = Addressable::URI.convert_path(@path) - expect(@uri.to_str).to eq("file:///c:/windows/My%20Documents%20100%20/foo.txt") - end - - it "should have an origin of 'file://'" do - @uri = Addressable::URI.convert_path(@path) - expect(@uri.origin).to eq('file://') - end -end - -describe Addressable::URI, "when given an http protocol URI" do - before do - @path = "http://example.com/" - end - - it "should not do any conversion at all" do - @uri = Addressable::URI.convert_path(@path) - expect(@uri.to_str).to eq("http://example.com/") - end -end - -class SuperString - def initialize(string) - @string = string.to_s - end - - def to_str - return @string - end -end - -describe Addressable::URI, "when parsing a non-String object" do - it "should correctly parse anything with a 'to_str' method" do - Addressable::URI.parse(SuperString.new(42)) - end - - it "should raise a TypeError for objects than cannot be converted" do - expect do - Addressable::URI.parse(42) - end.to raise_error(TypeError) - end - - it "should correctly parse heuristically anything with a 'to_str' method" do - Addressable::URI.heuristic_parse(SuperString.new(42)) - end - - it "should raise a TypeError for objects than cannot be converted" do - expect do - Addressable::URI.heuristic_parse(42) - end.to raise_error(TypeError) - end -end - -describe Addressable::URI, "when form encoding a hash" do - it "should result in correct percent encoded sequence" do - expect(Addressable::URI.form_encode( - [["&one", "/1"], ["=two", "?2"], [":three", "#3"]] - )).to eq("%26one=%2F1&%3Dtwo=%3F2&%3Athree=%233") - end - - it "should result in correct percent encoded sequence" do - expect(Addressable::URI.form_encode( - {"q" => "one two three"} - )).to eq("q=one+two+three") - end - - it "should result in correct percent encoded sequence" do - expect(Addressable::URI.form_encode( - {"key" => nil} - )).to eq("key=") - end - - it "should result in correct percent encoded sequence" do - expect(Addressable::URI.form_encode( - {"q" => ["one", "two", "three"]} - )).to eq("q=one&q=two&q=three") - end - - it "should result in correctly encoded newlines" do - expect(Addressable::URI.form_encode( - {"text" => "one\ntwo\rthree\r\nfour\n\r"} - )).to eq("text=one%0D%0Atwo%0D%0Athree%0D%0Afour%0D%0A%0D%0A") - end - - it "should result in a sorted percent encoded sequence" do - expect(Addressable::URI.form_encode( - [["a", "1"], ["dup", "3"], ["dup", "2"]], true - )).to eq("a=1&dup=2&dup=3") - end -end - -describe Addressable::URI, "when form encoding a non-Array object" do - it "should raise a TypeError for objects than cannot be converted" do - expect do - Addressable::URI.form_encode(42) - end.to raise_error(TypeError) - end -end - -# See https://tools.ietf.org/html/rfc6749#appendix-B -describe Addressable::URI, "when form encoding the example value from OAuth 2" do - it "should result in correct values" do - expect(Addressable::URI.form_encode( - {"value" => " %&+£€"} - )).to eq("value=+%25%26%2B%C2%A3%E2%82%AC") - end -end - -# See https://tools.ietf.org/html/rfc6749#appendix-B -describe Addressable::URI, "when form unencoding the example value from OAuth 2" do - it "should result in correct values" do - expect(Addressable::URI.form_unencode( - "value=+%25%26%2B%C2%A3%E2%82%AC" - )).to eq([["value", " %&+£€"]]) - end -end - -describe Addressable::URI, "when form unencoding a string" do - it "should result in correct values" do - expect(Addressable::URI.form_unencode( - "%26one=%2F1&%3Dtwo=%3F2&%3Athree=%233" - )).to eq([["&one", "/1"], ["=two", "?2"], [":three", "#3"]]) - end - - it "should result in correct values" do - expect(Addressable::URI.form_unencode( - "q=one+two+three" - )).to eq([["q", "one two three"]]) - end - - it "should result in correct values" do - expect(Addressable::URI.form_unencode( - "text=one%0D%0Atwo%0D%0Athree%0D%0Afour%0D%0A%0D%0A" - )).to eq([["text", "one\ntwo\nthree\nfour\n\n"]]) - end - - it "should result in correct values" do - expect(Addressable::URI.form_unencode( - "a=1&dup=2&dup=3" - )).to eq([["a", "1"], ["dup", "2"], ["dup", "3"]]) - end - - it "should result in correct values" do - expect(Addressable::URI.form_unencode( - "key" - )).to eq([["key", nil]]) - end - - it "should result in correct values" do - expect(Addressable::URI.form_unencode("GivenName=Ren%C3%A9")).to eq( - [["GivenName", "René"]] - ) - end -end - -describe Addressable::URI, "when form unencoding a non-String object" do - it "should correctly parse anything with a 'to_str' method" do - Addressable::URI.form_unencode(SuperString.new(42)) - end - - it "should raise a TypeError for objects than cannot be converted" do - expect do - Addressable::URI.form_unencode(42) - end.to raise_error(TypeError) - end -end - -describe Addressable::URI, "when normalizing a non-String object" do - it "should correctly parse anything with a 'to_str' method" do - Addressable::URI.normalize_component(SuperString.new(42)) - end - - it "should raise a TypeError for objects than cannot be converted" do - expect do - Addressable::URI.normalize_component(42) - end.to raise_error(TypeError) - end - - it "should raise a TypeError for objects than cannot be converted" do - expect do - Addressable::URI.normalize_component("component", 42) - end.to raise_error(TypeError) - end -end - -describe Addressable::URI, "when normalizing a path with an encoded slash" do - it "should result in correct percent encoded sequence" do - expect(Addressable::URI.parse("/path%2Fsegment/").normalize.path).to eq( - "/path%2Fsegment/" - ) - end -end - -describe Addressable::URI, "when normalizing a path with special unicode" do - it "does not stop at or ignore null bytes" do - expect(Addressable::URI.parse("/path%00segment/").normalize.path).to eq( - "/path%00segment/" - ) - end - - it "does apply NFC unicode normalization" do - expect(Addressable::URI.parse("/%E2%84%A6").normalize.path).to eq( - "/%CE%A9" - ) - end - - it "does not apply NFKC unicode normalization" do - expect(Addressable::URI.parse("/%C2%AF%C2%A0").normalize.path).to eq( - "/%C2%AF%C2%A0" - ) - end -end - -describe Addressable::URI, "when normalizing a partially encoded string" do - it "should result in correct percent encoded sequence" do - expect(Addressable::URI.normalize_component( - "partially % encoded%21" - )).to eq("partially%20%25%20encoded!") - end - - it "should result in correct percent encoded sequence" do - expect(Addressable::URI.normalize_component( - "partially %25 encoded!" - )).to eq("partially%20%25%20encoded!") - end -end - -describe Addressable::URI, "when normalizing a unicode sequence" do - it "should result in correct percent encoded sequence" do - expect(Addressable::URI.normalize_component( - "/C%CC%A7" - )).to eq("/%C3%87") - end - - it "should result in correct percent encoded sequence" do - expect(Addressable::URI.normalize_component( - "/%C3%87" - )).to eq("/%C3%87") - end -end - -describe Addressable::URI, "when normalizing a multibyte string" do - it "should result in correct percent encoded sequence" do - expect(Addressable::URI.normalize_component("günther")).to eq( - "g%C3%BCnther" - ) - end - - it "should result in correct percent encoded sequence" do - expect(Addressable::URI.normalize_component("g%C3%BCnther")).to eq( - "g%C3%BCnther" - ) - end -end - -describe Addressable::URI, "when normalizing a string but leaving some characters encoded" do - it "should result in correct percent encoded sequence" do - expect(Addressable::URI.normalize_component("%58X%59Y%5AZ", "0-9a-zXY", "Y")).to eq( - "XX%59Y%5A%5A" - ) - end - - it "should not modify the character class" do - character_class = "0-9a-zXY" - - character_class_copy = character_class.dup - - Addressable::URI.normalize_component("%58X%59Y%5AZ", character_class, "Y") - - expect(character_class).to eq(character_class_copy) - end -end - -describe Addressable::URI, "when encoding IP literals" do - it "should work for IPv4" do - input = "http://127.0.0.1/" - expect(Addressable::URI.encode(input)).to eq(input) - end - - it "should work for IPv6" do - input = "http://[fe80::200:f8ff:fe21:67cf]/" - expect(Addressable::URI.encode(input)).to eq(input) - end -end - -describe Addressable::URI, "when encoding a string with existing encodings to upcase" do - it "should result in correct percent encoded sequence" do - expect(Addressable::URI.encode_component("JK%4c", "0-9A-IKM-Za-z%", "L")).to eq("%4AK%4C") - end -end - -describe Addressable::URI, "when encoding a multibyte string" do - it "should result in correct percent encoded sequence" do - expect(Addressable::URI.encode_component("günther")).to eq("g%C3%BCnther") - end - - it "should result in correct percent encoded sequence" do - expect(Addressable::URI.encode_component( - "günther", /[^a-zA-Z0-9\:\/\?\#\[\]\@\!\$\&\'\(\)\*\+\,\;\=\-\.\_\~]/ - )).to eq("g%C3%BCnther") - end -end - -describe Addressable::URI, "when form encoding a multibyte string" do - it "should result in correct percent encoded sequence" do - expect(Addressable::URI.form_encode({"GivenName" => "René"})).to eq( - "GivenName=Ren%C3%A9" - ) - end -end - -describe Addressable::URI, "when encoding a string with ASCII chars 0-15" do - it "should result in correct percent encoded sequence" do - expect(Addressable::URI.encode_component("one\ntwo")).to eq("one%0Atwo") - end - - it "should result in correct percent encoded sequence" do - expect(Addressable::URI.encode_component( - "one\ntwo", /[^a-zA-Z0-9\:\/\?\#\[\]\@\!\$\&\'\(\)\*\+\,\;\=\-\.\_\~]/ - )).to eq("one%0Atwo") - end -end - -describe Addressable::URI, "when unencoding a multibyte string" do - it "should result in correct percent encoded sequence" do - expect(Addressable::URI.unencode_component("g%C3%BCnther")).to eq("günther") - end - - it "should consistently use UTF-8 internally" do - expect(Addressable::URI.unencode_component("ski=%BA%DAɫ")).to eq("ski=\xBA\xDAɫ") - end - - it "should not fail with UTF-8 incompatible string" do - url = "/M%E9/\xE9?p=\xFC".b - expect(Addressable::URI.unencode_component(url)).to eq("/M\xE9/\xE9?p=\xFC") - end - - it "should result in correct percent encoded sequence as a URI" do - expect(Addressable::URI.unencode( - "/path?g%C3%BCnther", ::Addressable::URI - )).to eq(Addressable::URI.new( - :path => "/path", :query => "günther" - )) - end -end - -describe Addressable::URI, "when partially unencoding a string" do - it "should unencode all characters by default" do - expect(Addressable::URI.unencode('%%25~%7e+%2b', String)).to eq('%%~~++') - end - - it "should unencode characters not in leave_encoded" do - expect(Addressable::URI.unencode('%%25~%7e+%2b', String, '~')).to eq('%%~%7e++') - end - - it "should leave characters in leave_encoded alone" do - expect(Addressable::URI.unencode('%%25~%7e+%2b', String, '%~+')).to eq('%%25~%7e+%2b') - end -end - -describe Addressable::URI, "when unencoding a bogus object" do - it "should raise a TypeError" do - expect do - Addressable::URI.unencode_component(42) - end.to raise_error(TypeError) - end - - it "should raise a TypeError" do - expect do - Addressable::URI.unencode("/path?g%C3%BCnther", Integer) - end.to raise_error(TypeError) - end -end - -describe Addressable::URI, "when encoding a bogus object" do - it "should raise a TypeError" do - expect do - Addressable::URI.encode(Object.new) - end.to raise_error(TypeError) - end - - it "should raise a TypeError" do - expect do - Addressable::URI.normalized_encode(Object.new) - end.to raise_error(TypeError) - end - - it "should raise a TypeError" do - expect do - Addressable::URI.encode_component("günther", Object.new) - end.to raise_error(TypeError) - end - - it "should raise a TypeError" do - expect do - Addressable::URI.encode_component(Object.new) - end.to raise_error(TypeError) - end -end - -describe Addressable::URI, "when given the input " + - "'http://example.com/'" do - before do - @input = "http://example.com/" - end - - it "should heuristically parse to 'http://example.com/'" do - @uri = Addressable::URI.heuristic_parse(@input) - expect(@uri.to_s).to eq("http://example.com/") - end - - it "should not raise error when frozen" do - expect do - Addressable::URI.heuristic_parse(@input).freeze.to_s - end.not_to raise_error - end -end - -describe Addressable::URI, "when given the input " + - "'https://example.com/'" do - before do - @input = "https://example.com/" - end - - it "should heuristically parse to 'https://example.com/'" do - @uri = Addressable::URI.heuristic_parse(@input) - expect(@uri.to_s).to eq("https://example.com/") - end -end - -describe Addressable::URI, "when given the input " + - "'http:example.com/'" do - before do - @input = "http:example.com/" - end - - it "should heuristically parse to 'http://example.com/'" do - @uri = Addressable::URI.heuristic_parse(@input) - expect(@uri.to_s).to eq("http://example.com/") - end - - it "should heuristically parse to 'http://example.com/' " + - "even with a scheme hint of 'ftp'" do - @uri = Addressable::URI.heuristic_parse(@input, {:scheme => 'ftp'}) - expect(@uri.to_s).to eq("http://example.com/") - end -end - -describe Addressable::URI, "when given the input " + - "'https:example.com/'" do - before do - @input = "https:example.com/" - end - - it "should heuristically parse to 'https://example.com/'" do - @uri = Addressable::URI.heuristic_parse(@input) - expect(@uri.to_s).to eq("https://example.com/") - end - - it "should heuristically parse to 'https://example.com/' " + - "even with a scheme hint of 'ftp'" do - @uri = Addressable::URI.heuristic_parse(@input, {:scheme => 'ftp'}) - expect(@uri.to_s).to eq("https://example.com/") - end -end - -describe Addressable::URI, "when given the input " + - "'http://example.com/example.com/'" do - before do - @input = "http://example.com/example.com/" - end - - it "should heuristically parse to 'http://example.com/example.com/'" do - @uri = Addressable::URI.heuristic_parse(@input) - expect(@uri.to_s).to eq("http://example.com/example.com/") - end -end - -describe Addressable::URI, "when given the input " + - "'http://prefix\\.example.com/'" do - before do - @input = "http://prefix\\.example.com/" - end - - it "should heuristically parse to 'http://prefix/.example.com/'" do - @uri = Addressable::URI.heuristic_parse(@input) - expect(@uri.authority).to eq("prefix") - expect(@uri.to_s).to eq("http://prefix/.example.com/") - end - - it "should heuristically parse to 'http://prefix/.example.com/' " + - "even with a scheme hint of 'ftp'" do - @uri = Addressable::URI.heuristic_parse(@input, {:scheme => 'ftp'}) - expect(@uri.to_s).to eq("http://prefix/.example.com/") - end -end - -describe Addressable::URI, "when given the input " + - "'http://p:\\/'" do - before do - @input = "http://p:\\/" - end - - it "should heuristically parse to 'http://p//'" do - @uri = Addressable::URI.heuristic_parse(@input) - expect(@uri.authority).to eq("p") - expect(@uri.to_s).to eq("http://p//") - end - - it "should heuristically parse to 'http://p//' " + - "even with a scheme hint of 'ftp'" do - @uri = Addressable::URI.heuristic_parse(@input, {:scheme => 'ftp'}) - expect(@uri.to_s).to eq("http://p//") - end -end - -describe Addressable::URI, "when given the input " + - "'http://p://'" do - before do - @input = "http://p://" - end - - it "should heuristically parse to 'http://p//'" do - @uri = Addressable::URI.heuristic_parse(@input) - expect(@uri.authority).to eq("p") - expect(@uri.to_s).to eq("http://p//") - end - - it "should heuristically parse to 'http://p//' " + - "even with a scheme hint of 'ftp'" do - @uri = Addressable::URI.heuristic_parse(@input, {:scheme => 'ftp'}) - expect(@uri.to_s).to eq("http://p//") - end -end - -describe Addressable::URI, "when given the input " + - "'http://p://p'" do - before do - @input = "http://p://p" - end - - it "should heuristically parse to 'http://p//p'" do - @uri = Addressable::URI.heuristic_parse(@input) - expect(@uri.authority).to eq("p") - expect(@uri.to_s).to eq("http://p//p") - end - - it "should heuristically parse to 'http://p//p' " + - "even with a scheme hint of 'ftp'" do - @uri = Addressable::URI.heuristic_parse(@input, {:scheme => 'ftp'}) - expect(@uri.to_s).to eq("http://p//p") - end -end - -describe Addressable::URI, "when given the input " + - "'http://prefix .example.com/'" do - before do - @input = "http://prefix .example.com/" - end - - # Justification here being that no browser actually tries to resolve this. - # They all treat this as a web search. - it "should heuristically parse to 'http://prefix%20.example.com/'" do - @uri = Addressable::URI.heuristic_parse(@input) - expect(@uri.authority).to eq("prefix%20.example.com") - expect(@uri.to_s).to eq("http://prefix%20.example.com/") - end - - it "should heuristically parse to 'http://prefix%20.example.com/' " + - "even with a scheme hint of 'ftp'" do - @uri = Addressable::URI.heuristic_parse(@input, {:scheme => 'ftp'}) - expect(@uri.to_s).to eq("http://prefix%20.example.com/") - end -end - -describe Addressable::URI, "when given the input " + - "' http://www.example.com/ '" do - before do - @input = " http://www.example.com/ " - end - - it "should heuristically parse to 'http://prefix%20.example.com/'" do - @uri = Addressable::URI.heuristic_parse(@input) - expect(@uri.scheme).to eq("http") - expect(@uri.path).to eq("/") - expect(@uri.to_s).to eq("http://www.example.com/") - end -end - -describe Addressable::URI, "when given the input " + - "'http://prefix%2F.example.com/'" do - before do - @input = "http://prefix%2F.example.com/" - end - - it "should heuristically parse to 'http://prefix%2F.example.com/'" do - @uri = Addressable::URI.heuristic_parse(@input) - expect(@uri.authority).to eq("prefix%2F.example.com") - expect(@uri.to_s).to eq("http://prefix%2F.example.com/") - end - - it "should heuristically parse to 'http://prefix%2F.example.com/' " + - "even with a scheme hint of 'ftp'" do - @uri = Addressable::URI.heuristic_parse(@input, {:scheme => 'ftp'}) - expect(@uri.to_s).to eq("http://prefix%2F.example.com/") - end -end - -describe Addressable::URI, "when given the input " + - "'/path/to/resource'" do - before do - @input = "/path/to/resource" - end - - it "should heuristically parse to '/path/to/resource'" do - @uri = Addressable::URI.heuristic_parse(@input) - expect(@uri.to_s).to eq("/path/to/resource") - end -end - -describe Addressable::URI, "when given the input " + - "'relative/path/to/resource'" do - before do - @input = "relative/path/to/resource" - end - - it "should heuristically parse to 'relative/path/to/resource'" do - @uri = Addressable::URI.heuristic_parse(@input) - expect(@uri.to_s).to eq("relative/path/to/resource") - end -end - -describe Addressable::URI, "when given the input " + - "'example.com'" do - before do - @input = "example.com" - end - - it "should heuristically parse to 'http://example.com'" do - @uri = Addressable::URI.heuristic_parse(@input) - expect(@uri.to_s).to eq("http://example.com") - end -end - -describe Addressable::URI, "when given the input " + - "'example.com' and a scheme hint of 'ftp'" do - before do - @input = "example.com" - @hints = {:scheme => 'ftp'} - end - - it "should heuristically parse to 'http://example.com'" do - @uri = Addressable::URI.heuristic_parse(@input, @hints) - expect(@uri.to_s).to eq("ftp://example.com") - end -end - -describe Addressable::URI, "when given the input " + - "'example.com:21' and a scheme hint of 'ftp'" do - before do - @input = "example.com:21" - @hints = {:scheme => 'ftp'} - end - - it "should heuristically parse to 'http://example.com:21'" do - @uri = Addressable::URI.heuristic_parse(@input, @hints) - expect(@uri.to_s).to eq("ftp://example.com:21") - end -end - -describe Addressable::URI, "when given the input " + - "'example.com/path/to/resource'" do - before do - @input = "example.com/path/to/resource" - end - - it "should heuristically parse to 'http://example.com/path/to/resource'" do - @uri = Addressable::URI.heuristic_parse(@input) - expect(@uri.to_s).to eq("http://example.com/path/to/resource") - end -end - -describe Addressable::URI, "when given the input " + - "'http:///example.com'" do - before do - @input = "http:///example.com" - end - - it "should heuristically parse to 'http://example.com'" do - @uri = Addressable::URI.heuristic_parse(@input) - expect(@uri.to_s).to eq("http://example.com") - end -end - -describe Addressable::URI, "when given the input which "\ - "start with digits and has specified port" do - before do - @input = "7777.example.org:8089" - end - - it "should heuristically parse to 'http://7777.example.org:8089'" do - uri = Addressable::URI.heuristic_parse(@input) - expect(uri.to_s).to eq("http://7777.example.org:8089") - end -end - -describe Addressable::URI, "when given the input " + - "'feed:///example.com'" do - before do - @input = "feed:///example.com" - end - - it "should heuristically parse to 'feed://example.com'" do - @uri = Addressable::URI.heuristic_parse(@input) - expect(@uri.to_s).to eq("feed://example.com") - end -end - -describe Addressable::URI, "when given the input " + - "'file://localhost/path/to/resource/'" do - before do - @input = "file://localhost/path/to/resource/" - end - - it "should heuristically parse to 'file:///path/to/resource/'" do - @uri = Addressable::URI.heuristic_parse(@input) - expect(@uri.to_s).to eq("file:///path/to/resource/") - end -end - -describe Addressable::URI, "when given the input " + - "'file://path/to/resource/'" do - before do - @input = "file://path/to/resource/" - end - - it "should heuristically parse to 'file:///path/to/resource/'" do - @uri = Addressable::URI.heuristic_parse(@input) - expect(@uri.to_s).to eq("file:///path/to/resource/") - end -end - -describe Addressable::URI, "when given the input " + - "'file://///path/to/resource/'" do - before do - @input = "file:///////path/to/resource/" - end - - it "should heuristically parse to 'file:////path/to/resource/'" do - @uri = Addressable::URI.heuristic_parse(@input) - expect(@uri.to_s).to eq("file:////path/to/resource/") - end -end - -describe Addressable::URI, "when given the input " + - "'feed://http://example.com'" do - before do - @input = "feed://http://example.com" - end - - it "should heuristically parse to 'feed:http://example.com'" do - @uri = Addressable::URI.heuristic_parse(@input) - expect(@uri.to_s).to eq("feed:http://example.com") - end -end - -describe Addressable::URI, "when given the input " + - "::URI.parse('http://example.com')" do - before do - @input = ::URI.parse('http://example.com') - end - - it "should heuristically parse to 'http://example.com'" do - @uri = Addressable::URI.heuristic_parse(@input) - expect(@uri.to_s).to eq("http://example.com") - end -end - -describe Addressable::URI, "when given the input: 'user@domain.com'" do - before do - @input = "user@domain.com" - end - - context "for heuristic parse" do - it "should remain 'mailto:user@domain.com'" do - uri = Addressable::URI.heuristic_parse("mailto:#{@input}") - expect(uri.to_s).to eq("mailto:user@domain.com") - end - - it "should have a scheme of 'mailto'" do - uri = Addressable::URI.heuristic_parse(@input) - expect(uri.to_s).to eq("mailto:user@domain.com") - expect(uri.scheme).to eq("mailto") - end - - it "should remain 'acct:user@domain.com'" do - uri = Addressable::URI.heuristic_parse("acct:#{@input}") - expect(uri.to_s).to eq("acct:user@domain.com") - end - - context "HTTP" do - before do - @uri = Addressable::URI.heuristic_parse("http://#{@input}/") - end - - it "should remain 'http://user@domain.com/'" do - expect(@uri.to_s).to eq("http://user@domain.com/") - end - - it "should have the username 'user' for HTTP basic authentication" do - expect(@uri.user).to eq("user") - end - end - end -end - -describe Addressable::URI, "when assigning query values" do - before do - @uri = Addressable::URI.new - end - - it "should correctly assign {:a => 'a', :b => ['c', 'd', 'e']}" do - @uri.query_values = {:a => "a", :b => ["c", "d", "e"]} - expect(@uri.query).to eq("a=a&b=c&b=d&b=e") - end - - it "should raise an error attempting to assign {'a' => {'b' => ['c']}}" do - expect do - @uri.query_values = { 'a' => {'b' => ['c'] } } - end.to raise_error(TypeError) - end - - it "should raise an error attempting to assign " + - "{:b => '2', :a => {:c => '1'}}" do - expect do - @uri.query_values = {:b => '2', :a => {:c => '1'}} - end.to raise_error(TypeError) - end - - it "should raise an error attempting to assign " + - "{:a => 'a', :b => [{:c => 'c', :d => 'd'}, " + - "{:e => 'e', :f => 'f'}]}" do - expect do - @uri.query_values = { - :a => "a", :b => [{:c => "c", :d => "d"}, {:e => "e", :f => "f"}] - } - end.to raise_error(TypeError) - end - - it "should raise an error attempting to assign " + - "{:a => 'a', :b => [{:c => true, :d => 'd'}, " + - "{:e => 'e', :f => 'f'}]}" do - expect do - @uri.query_values = { - :a => 'a', :b => [{:c => true, :d => 'd'}, {:e => 'e', :f => 'f'}] - } - end.to raise_error(TypeError) - end - - it "should raise an error attempting to assign " + - "{:a => 'a', :b => {:c => true, :d => 'd'}}" do - expect do - @uri.query_values = { - :a => 'a', :b => {:c => true, :d => 'd'} - } - end.to raise_error(TypeError) - end - - it "should raise an error attempting to assign " + - "{:a => 'a', :b => {:c => true, :d => 'd'}}" do - expect do - @uri.query_values = { - :a => 'a', :b => {:c => true, :d => 'd'} - } - end.to raise_error(TypeError) - end - - it "should correctly assign {:a => 1, :b => 1.5}" do - @uri.query_values = { :a => 1, :b => 1.5 } - expect(@uri.query).to eq("a=1&b=1.5") - end - - it "should raise an error attempting to assign " + - "{:z => 1, :f => [2, {999.1 => [3,'4']}, ['h', 'i']], " + - ":a => {:b => ['c', 'd'], :e => true, :y => 0.5}}" do - expect do - @uri.query_values = { - :z => 1, - :f => [ 2, {999.1 => [3,'4']}, ['h', 'i'] ], - :a => { :b => ['c', 'd'], :e => true, :y => 0.5 } - } - end.to raise_error(TypeError) - end - - it "should correctly assign {}" do - @uri.query_values = {} - expect(@uri.query).to eq('') - end - - it "should correctly assign nil" do - @uri.query_values = nil - expect(@uri.query).to eq(nil) - end - - it "should correctly sort {'ab' => 'c', :ab => 'a', :a => 'x'}" do - @uri.query_values = {'ab' => 'c', :ab => 'a', :a => 'x'} - expect(@uri.query).to eq("a=x&ab=a&ab=c") - end - - it "should correctly assign " + - "[['b', 'c'], ['b', 'a'], ['a', 'a']]" do - # Order can be guaranteed in this format, so preserve it. - @uri.query_values = [['b', 'c'], ['b', 'a'], ['a', 'a']] - expect(@uri.query).to eq("b=c&b=a&a=a") - end - - it "should preserve query string order" do - query_string = (('a'..'z').to_a.reverse.map { |e| "#{e}=#{e}" }).join("&") - @uri.query = query_string - original_uri = @uri.to_s - @uri.query_values = @uri.query_values(Array) - expect(@uri.to_s).to eq(original_uri) - end - - describe 'when a hash with mixed types is assigned to query_values' do - it 'should not raise an error' do - skip 'Issue #94' - expect { subject.query_values = { "page" => "1", :page => 2 } }.to_not raise_error - end - end -end - -describe Addressable::URI, "when assigning path values" do - before do - @uri = Addressable::URI.new - end - - it "should correctly assign paths containing colons" do - @uri.path = "acct:bob@sporkmonger.com" - expect(@uri.path).to eq("acct:bob@sporkmonger.com") - expect(@uri.normalize.to_str).to eq("acct%2Fbob@sporkmonger.com") - expect { @uri.to_s }.to raise_error( - Addressable::URI::InvalidURIError - ) - end - - it "should correctly assign paths containing colons" do - @uri.path = "/acct:bob@sporkmonger.com" - @uri.authority = "example.com" - expect(@uri.normalize.to_str).to eq("//example.com/acct:bob@sporkmonger.com") - end - - it "should correctly assign paths containing colons" do - @uri.path = "acct:bob@sporkmonger.com" - @uri.scheme = "something" - expect(@uri.normalize.to_str).to eq("something:acct:bob@sporkmonger.com") - end - - it "should not allow relative paths to be assigned on absolute URIs" do - expect do - @uri.scheme = "http" - @uri.host = "example.com" - @uri.path = "acct:bob@sporkmonger.com" - end.to raise_error(Addressable::URI::InvalidURIError) - end - - it "should not allow relative paths to be assigned on absolute URIs" do - expect do - @uri.path = "acct:bob@sporkmonger.com" - @uri.scheme = "http" - @uri.host = "example.com" - end.to raise_error(Addressable::URI::InvalidURIError) - end - - it "should not allow relative paths to be assigned on absolute URIs" do - expect do - @uri.path = "uuid:0b3ecf60-3f93-11df-a9c3-001f5bfffe12" - @uri.scheme = "urn" - end.not_to raise_error - end -end - -describe Addressable::URI, "when initializing a subclass of Addressable::URI" do - before do - @uri = Class.new(Addressable::URI).new - end - - it "should have the same class after being parsed" do - expect(@uri.class).to eq(Addressable::URI.parse(@uri).class) - end - - it "should have the same class as its duplicate" do - expect(@uri.class).to eq(@uri.dup.class) - end - - it "should have the same class after being normalized" do - expect(@uri.class).to eq(@uri.normalize.class) - end - - it "should have the same class after being merged" do - expect(@uri.class).to eq(@uri.merge(:path => 'path').class) - end - - it "should have the same class after being joined" do - expect(@uri.class).to eq(@uri.join('path').class) - end -end - -describe Addressable::URI, "support serialization roundtrip" do - before do - @uri = Addressable::URI.new( - :scheme => "http", - :user => "user", - :password => "password", - :host => "example.com", - :port => 80, - :path => "/path", - :query => "query=value", - :fragment => "fragment" - ) - end - - it "is in a working state after being serialized with Marshal" do - @uri = Addressable::URI.parse("http://example.com") - cloned_uri = Marshal.load(Marshal.dump(@uri)) - expect(cloned_uri.normalized_scheme).to be == @uri.normalized_scheme - end - - it "is in a working state after being serialized with YAML" do - @uri = Addressable::URI.parse("http://example.com") - cloned_uri = if YAML.respond_to?(:unsafe_load) - YAML.unsafe_load(YAML.dump(@uri)) - else - YAML.load(YAML.dump(@uri)) - end - expect(cloned_uri.normalized_scheme).to be == @uri.normalized_scheme - end -end - -describe Addressable::URI, "when initialized in a non-main `Ractor`" do - it "should have the same value as if used in the main `Ractor`" do - pending("Ruby 3.0+ for `Ractor` support") unless defined?(Ractor) - main = Addressable::URI.parse("http://example.com") - expect( - Ractor.new { Addressable::URI.parse("http://example.com") }.take - ).to eq(main) - end -end - -describe Addressable::URI, "when deferring validation" do - subject(:deferred) { uri.instance_variable_get(:@validation_deferred) } - - let(:uri) { Addressable::URI.parse("http://example.com") } - - it "defers validation within the block" do - uri.defer_validation do - expect(deferred).to be true - end - end - - it "always resets deferral afterward" do - expect { uri.defer_validation { raise "boom" } }.to raise_error("boom") - expect(deferred).to be false - end - - it "returns nil" do - res = uri.defer_validation {} - expect(res).to be nil - end -end - -describe Addressable::URI, "YAML safe loading" do - it "doesn't serialize anonymous objects" do - url = Addressable::URI.parse("http://example.com/") - expect(YAML.dump(url)).to_not include("!ruby/object {}") - end -end diff --git a/bundle/ruby/3.2.0/gems/addressable-2.8.6/spec/spec_helper.rb b/bundle/ruby/3.2.0/gems/addressable-2.8.6/spec/spec_helper.rb deleted file mode 100644 index bd8e3958..00000000 --- a/bundle/ruby/3.2.0/gems/addressable-2.8.6/spec/spec_helper.rb +++ /dev/null @@ -1,33 +0,0 @@ -# frozen_string_literal: true - -require 'bundler/setup' -require 'rspec/its' - -begin - require 'coveralls' - Coveralls.wear! do - add_filter "spec/" - add_filter "vendor/" - end -rescue LoadError - warn "warning: coveralls gem not found; skipping Coveralls" - require 'simplecov' - SimpleCov.start do - add_filter "spec/" - add_filter "vendor/" - end -end if Gem.loaded_specs.key?("simplecov") - -class TestHelper - def self.native_supported? - mri = RUBY_ENGINE == "ruby" - windows = RUBY_PLATFORM.include?("mingw") - - mri && !windows - end -end - -RSpec.configure do |config| - config.warnings = true - config.filter_run_when_matching :focus -end diff --git a/bundle/ruby/3.2.0/gems/addressable-2.8.6/tasks/clobber.rake b/bundle/ruby/3.2.0/gems/addressable-2.8.6/tasks/clobber.rake deleted file mode 100644 index a9e32b34..00000000 --- a/bundle/ruby/3.2.0/gems/addressable-2.8.6/tasks/clobber.rake +++ /dev/null @@ -1,4 +0,0 @@ -# frozen_string_literal: true - -desc "Remove all build products" -task "clobber" diff --git a/bundle/ruby/3.2.0/gems/addressable-2.8.6/tasks/gem.rake b/bundle/ruby/3.2.0/gems/addressable-2.8.6/tasks/gem.rake deleted file mode 100644 index e95115ad..00000000 --- a/bundle/ruby/3.2.0/gems/addressable-2.8.6/tasks/gem.rake +++ /dev/null @@ -1,95 +0,0 @@ -# frozen_string_literal: true - -require "rubygems/package_task" - -namespace :gem do - GEM_SPEC = Gem::Specification.new do |s| - s.name = PKG_NAME - s.version = PKG_VERSION - s.summary = PKG_SUMMARY - s.description = PKG_DESCRIPTION - - s.files = PKG_FILES.to_a - - s.extra_rdoc_files = %w( README.md ) - s.rdoc_options.concat ["--main", "README.md"] - - if !s.respond_to?(:add_development_dependency) - puts "Cannot build Gem with this version of RubyGems." - exit(1) - end - - s.required_ruby_version = ">= 2.2" - - s.add_runtime_dependency "public_suffix", ">= 2.0.2", "< 6.0" - s.add_development_dependency "bundler", ">= 1.0", "< 3.0" - - s.require_path = "lib" - - s.author = "Bob Aman" - s.email = "bob@sporkmonger.com" - s.homepage = "https://github.com/sporkmonger/addressable" - s.license = "Apache-2.0" - s.metadata = { - "changelog_uri" => "https://github.com/sporkmonger/addressable/blob/main/CHANGELOG.md#v#{PKG_VERSION}" - } - end - - Gem::PackageTask.new(GEM_SPEC) do |p| - p.gem_spec = GEM_SPEC - p.need_tar = true - p.need_zip = true - end - - desc "Generates .gemspec file" - task :gemspec do - spec_string = GEM_SPEC.to_ruby - File.open("#{GEM_SPEC.name}.gemspec", "w") do |file| - file.write spec_string - end - end - - desc "Show information about the gem" - task :debug do - puts GEM_SPEC.to_ruby - end - - desc "Install the gem" - task :install => ["clobber", "gem:package"] do - sh "#{SUDO} gem install --local pkg/#{GEM_SPEC.full_name}" - end - - desc "Uninstall the gem" - task :uninstall do - installed_list = Gem.source_index.find_name(PKG_NAME) - if installed_list && - (installed_list.collect { |s| s.version.to_s}.include?(PKG_VERSION)) - sh( - "#{SUDO} gem uninstall --version '#{PKG_VERSION}' " + - "--ignore-dependencies --executables #{PKG_NAME}" - ) - end - end - - desc "Reinstall the gem" - task :reinstall => [:uninstall, :install] - - desc "Package for release" - task :release => ["gem:package", "gem:gemspec"] do |t| - v = ENV["VERSION"] or abort "Must supply VERSION=x.y.z" - abort "Versions don't match #{v} vs #{PROJ.version}" if v != PKG_VERSION - pkg = "pkg/#{GEM_SPEC.full_name}" - - changelog = File.open("CHANGELOG.md") { |file| file.read } - - puts "Releasing #{PKG_NAME} v. #{PKG_VERSION}" - Rake::Task["git:tag:create"].invoke - end -end - -desc "Alias to gem:package" -task "gem" => "gem:package" - -task "gem:release" => "gem:gemspec" - -task "clobber" => ["gem:clobber_package"] diff --git a/bundle/ruby/3.2.0/gems/addressable-2.8.6/tasks/git.rake b/bundle/ruby/3.2.0/gems/addressable-2.8.6/tasks/git.rake deleted file mode 100644 index 1238c8d2..00000000 --- a/bundle/ruby/3.2.0/gems/addressable-2.8.6/tasks/git.rake +++ /dev/null @@ -1,47 +0,0 @@ -# frozen_string_literal: true - -namespace :git do - namespace :tag do - desc "List tags from the Git repository" - task :list do - tags = `git tag -l` - tags.gsub!("\r", "") - tags = tags.split("\n").sort {|a, b| b <=> a } - puts tags.join("\n") - end - - desc "Create a new tag in the Git repository" - task :create do - changelog = File.open("CHANGELOG.md", "r") { |file| file.read } - puts "-" * 80 - puts changelog - puts "-" * 80 - puts - - v = ENV["VERSION"] or abort "Must supply VERSION=x.y.z" - abort "Versions don't match #{v} vs #{PKG_VERSION}" if v != PKG_VERSION - - git_status = `git status` - if git_status !~ /^nothing to commit/ - abort "Working directory isn't clean." - end - - tag = "#{PKG_NAME}-#{PKG_VERSION}" - msg = "Release #{PKG_NAME}-#{PKG_VERSION}" - - existing_tags = `git tag -l #{PKG_NAME}-*`.split('\n') - if existing_tags.include?(tag) - warn("Tag already exists, deleting...") - unless system "git tag -d #{tag}" - abort "Tag deletion failed." - end - end - puts "Creating git tag '#{tag}'..." - unless system "git tag -a -m \"#{msg}\" #{tag}" - abort "Tag creation failed." - end - end - end -end - -task "gem:release" => "git:tag:create" diff --git a/bundle/ruby/3.2.0/gems/addressable-2.8.6/tasks/metrics.rake b/bundle/ruby/3.2.0/gems/addressable-2.8.6/tasks/metrics.rake deleted file mode 100644 index 107cc244..00000000 --- a/bundle/ruby/3.2.0/gems/addressable-2.8.6/tasks/metrics.rake +++ /dev/null @@ -1,24 +0,0 @@ -# frozen_string_literal: true - -namespace :metrics do - task :lines do - lines, codelines, total_lines, total_codelines = 0, 0, 0, 0 - for file_name in FileList["lib/**/*.rb"] - f = File.open(file_name) - while line = f.gets - lines += 1 - next if line =~ /^\s*$/ - next if line =~ /^\s*#/ - codelines += 1 - end - puts "L: #{sprintf("%4d", lines)}, " + - "LOC #{sprintf("%4d", codelines)} | #{file_name}" - total_lines += lines - total_codelines += codelines - - lines, codelines = 0, 0 - end - - puts "Total: Lines #{total_lines}, LOC #{total_codelines}" - end -end diff --git a/bundle/ruby/3.2.0/gems/addressable-2.8.6/tasks/profile.rake b/bundle/ruby/3.2.0/gems/addressable-2.8.6/tasks/profile.rake deleted file mode 100644 index b697d489..00000000 --- a/bundle/ruby/3.2.0/gems/addressable-2.8.6/tasks/profile.rake +++ /dev/null @@ -1,72 +0,0 @@ -# frozen_string_literal: true - -namespace :profile do - desc "Profile Template match memory allocations" - task :template_match_memory do - require "memory_profiler" - require "addressable/template" - - start_at = Time.now.to_f - template = Addressable::Template.new("http://example.com/{?one,two,three}") - report = MemoryProfiler.report do - 30_000.times do - template.match( - "http://example.com/?one=one&two=floo&three=me" - ) - end - end - end_at = Time.now.to_f - print_options = { scale_bytes: true, normalize_paths: true } - puts "\n\n" - - if ENV["CI"] - report.pretty_print(print_options) - else - t_allocated = report.scale_bytes(report.total_allocated_memsize) - t_retained = report.scale_bytes(report.total_retained_memsize) - - puts "Total allocated: #{t_allocated} (#{report.total_allocated} objects)" - puts "Total retained: #{t_retained} (#{report.total_retained} objects)" - puts "Took #{end_at - start_at} seconds" - - FileUtils.mkdir_p("tmp") - report.pretty_print(to_file: "tmp/memprof.txt", **print_options) - end - end - - desc "Profile URI parse memory allocations" - task :memory do - require "memory_profiler" - require "addressable/uri" - if ENV["IDNA_MODE"] == "pure" - Addressable.send(:remove_const, :IDNA) - load "addressable/idna/pure.rb" - end - - start_at = Time.now.to_f - report = MemoryProfiler.report do - 30_000.times do - Addressable::URI.parse( - "http://google.com/stuff/../?with_lots=of¶ms=asdff#!stuff" - ).normalize - end - end - end_at = Time.now.to_f - print_options = { scale_bytes: true, normalize_paths: true } - puts "\n\n" - - if ENV["CI"] - report.pretty_print(**print_options) - else - t_allocated = report.scale_bytes(report.total_allocated_memsize) - t_retained = report.scale_bytes(report.total_retained_memsize) - - puts "Total allocated: #{t_allocated} (#{report.total_allocated} objects)" - puts "Total retained: #{t_retained} (#{report.total_retained} objects)" - puts "Took #{end_at - start_at} seconds" - - FileUtils.mkdir_p("tmp") - report.pretty_print(to_file: "tmp/memprof.txt", **print_options) - end - end -end diff --git a/bundle/ruby/3.2.0/gems/addressable-2.8.6/tasks/rspec.rake b/bundle/ruby/3.2.0/gems/addressable-2.8.6/tasks/rspec.rake deleted file mode 100644 index e3d9f014..00000000 --- a/bundle/ruby/3.2.0/gems/addressable-2.8.6/tasks/rspec.rake +++ /dev/null @@ -1,23 +0,0 @@ -# frozen_string_literal: true - -require "rspec/core/rake_task" - -namespace :spec do - RSpec::Core::RakeTask.new(:simplecov) do |t| - t.pattern = FileList['spec/**/*_spec.rb'] - t.rspec_opts = %w[--color --format documentation] unless ENV["CI"] - end - - namespace :simplecov do - desc "Browse the code coverage report." - task :browse => "spec:simplecov" do - require "launchy" - Launchy.open("coverage/index.html") - end - end -end - -desc "Alias to spec:simplecov" -task "spec" => "spec:simplecov" - -task "clobber" => ["spec:clobber_simplecov"] diff --git a/bundle/ruby/3.2.0/gems/addressable-2.8.6/tasks/yard.rake b/bundle/ruby/3.2.0/gems/addressable-2.8.6/tasks/yard.rake deleted file mode 100644 index 515f9603..00000000 --- a/bundle/ruby/3.2.0/gems/addressable-2.8.6/tasks/yard.rake +++ /dev/null @@ -1,29 +0,0 @@ -# frozen_string_literal: true - -require "rake" - -begin - require "yard" - require "yard/rake/yardoc_task" - - namespace :doc do - desc "Generate Yardoc documentation" - YARD::Rake::YardocTask.new do |yardoc| - yardoc.name = "yard" - yardoc.options = ["--verbose", "--markup", "markdown"] - yardoc.files = FileList[ - "lib/**/*.rb", "ext/**/*.c", - "README.md", "CHANGELOG.md", "LICENSE.txt" - ].exclude(/idna/) - end - end - - task "clobber" => ["doc:clobber_yard"] - - desc "Alias to doc:yard" - task "doc" => "doc:yard" -rescue LoadError - # If yard isn't available, it's not the end of the world - desc "Alias to doc:rdoc" - task "doc" => "doc:rdoc" -end diff --git a/bundle/ruby/3.2.0/gems/ast-2.4.2/LICENSE.MIT b/bundle/ruby/3.2.0/gems/ast-2.4.2/LICENSE.MIT deleted file mode 100644 index 7c483cf2..00000000 --- a/bundle/ruby/3.2.0/gems/ast-2.4.2/LICENSE.MIT +++ /dev/null @@ -1,20 +0,0 @@ -Copyright (c) 2011-2013 Peter Zotov - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/bundle/ruby/3.2.0/gems/ast-2.4.2/README.YARD.md b/bundle/ruby/3.2.0/gems/ast-2.4.2/README.YARD.md deleted file mode 100644 index d2616c3d..00000000 --- a/bundle/ruby/3.2.0/gems/ast-2.4.2/README.YARD.md +++ /dev/null @@ -1,12 +0,0 @@ -{AST} is a library for manipulating abstract syntax trees. - -It embraces immutability; each AST node is inherently frozen at -creation, and updating a child node requires recreating that node -and its every parent, recursively. - -This is a design choice. It does create some pressure on -garbage collector, but completely eliminates all concurrency -and aliasing problems. - -See also {AST::Node}, {AST::Processor::Mixin} and {AST::Sexp} for -additional recommendations and design patterns. diff --git a/bundle/ruby/3.2.0/gems/ast-2.4.2/lib/ast.rb b/bundle/ruby/3.2.0/gems/ast-2.4.2/lib/ast.rb deleted file mode 100644 index acbcf741..00000000 --- a/bundle/ruby/3.2.0/gems/ast-2.4.2/lib/ast.rb +++ /dev/null @@ -1,17 +0,0 @@ -# {AST} is a library for manipulating abstract syntax trees. -# -# It embraces immutability; each AST node is inherently frozen at -# creation, and updating a child node requires recreating that node -# and its every parent, recursively. -# This is a design choice. It does create some pressure on -# garbage collector, but completely eliminates all concurrency -# and aliasing problems. -# -# See also {AST::Node}, {AST::Processor::Mixin} and {AST::Sexp} for -# additional recommendations and design patterns. -# -module AST - require 'ast/node' - require 'ast/processor' - require 'ast/sexp' -end diff --git a/bundle/ruby/3.2.0/gems/ast-2.4.2/lib/ast/node.rb b/bundle/ruby/3.2.0/gems/ast-2.4.2/lib/ast/node.rb deleted file mode 100644 index 432d865a..00000000 --- a/bundle/ruby/3.2.0/gems/ast-2.4.2/lib/ast/node.rb +++ /dev/null @@ -1,268 +0,0 @@ -# frozen_string_literal: true - -module AST - # Node is an immutable class, instances of which represent abstract - # syntax tree nodes. It combines semantic information (i.e. anything - # that affects the algorithmic properties of a program) with - # meta-information (line numbers or compiler intermediates). - # - # Notes on inheritance - # ==================== - # - # The distinction between semantics and metadata is important. Complete - # semantic information should be contained within just the {#type} and - # {#children} of a Node instance; in other words, if an AST was to be - # stripped of all meta-information, it should remain a valid AST which - # could be successfully processed to yield a result with the same - # algorithmic properties. - # - # Thus, Node should never be inherited in order to define methods which - # affect or return semantic information, such as getters for `class_name`, - # `superclass` and `body` in the case of a hypothetical `ClassNode`. The - # correct solution is to use a generic Node with a {#type} of `:class` - # and three children. See also {Processor} for tips on working with such - # ASTs. - # - # On the other hand, Node can and should be inherited to define - # application-specific metadata (see also {#initialize}) or customize the - # printing format. It is expected that an application would have one or two - # such classes and use them across the entire codebase. - # - # The rationale for this pattern is extensibility and maintainability. - # Unlike static ones, dynamic languages do not require the presence of a - # predefined, rigid structure, nor does it improve dispatch efficiency, - # and while such a structure can certainly be defined, it does not add - # any value but incurs a maintaining cost. - # For example, extending the AST even with a transformation-local - # temporary node type requires making globally visible changes to - # the codebase. - # - class Node - # Returns the type of this node. - # @return [Symbol] - attr_reader :type - - # Returns the children of this node. - # The returned value is frozen. - # The to_a alias is useful for decomposing nodes concisely. - # For example: - # - # node = s(:gasgn, :$foo, s(:integer, 1)) - # var_name, value = *node - # p var_name # => :$foo - # p value # => (integer 1) - # - # @return [Array] - attr_reader :children - alias to_a children - - # Returns the precomputed hash value for this node - # @return [Fixnum] - attr_reader :hash - - # Constructs a new instance of Node. - # - # The arguments `type` and `children` are converted with `to_sym` and - # `to_a` respectively. Additionally, the result of converting `children` - # is frozen. While mutating the arguments is generally considered harmful, - # the most common case is to pass an array literal to the constructor. If - # your code does not expect the argument to be frozen, use `#dup`. - # - # The `properties` hash is passed to {#assign_properties}. - def initialize(type, children=[], properties={}) - @type, @children = type.to_sym, children.to_a.freeze - - assign_properties(properties) - - @hash = [@type, @children, self.class].hash - - freeze - end - - # Test if other object is equal to - # @param [Object] other - # @return [Boolean] - def eql?(other) - self.class.eql?(other.class) && - @type.eql?(other.type) && - @children.eql?(other.children) - end - - # By default, each entry in the `properties` hash is assigned to - # an instance variable in this instance of Node. A subclass should define - # attribute readers for such variables. The values passed in the hash - # are not frozen or whitelisted; such behavior can also be implemented - # by subclassing Node and overriding this method. - # - # @return [nil] - def assign_properties(properties) - properties.each do |name, value| - instance_variable_set :"@#{name}", value - end - - nil - end - protected :assign_properties - - alias :original_dup :dup - private :original_dup - - # Nodes are already frozen, so there is no harm in returning the - # current node as opposed to initializing from scratch and freezing - # another one. - # - # @return self - def dup - self - end - alias :clone :dup - - # Returns a new instance of Node where non-nil arguments replace the - # corresponding fields of `self`. - # - # For example, `Node.new(:foo, [ 1, 2 ]).updated(:bar)` would yield - # `(bar 1 2)`, and `Node.new(:foo, [ 1, 2 ]).updated(nil, [])` would - # yield `(foo)`. - # - # If the resulting node would be identical to `self`, does nothing. - # - # @param [Symbol, nil] type - # @param [Array, nil] children - # @param [Hash, nil] properties - # @return [AST::Node] - def updated(type=nil, children=nil, properties=nil) - new_type = type || @type - new_children = children || @children - new_properties = properties || {} - - if @type == new_type && - @children == new_children && - properties.nil? - self - else - copy = original_dup - copy.send :initialize, new_type, new_children, new_properties - copy - end - end - - # Compares `self` to `other`, possibly converting with `to_ast`. Only - # `type` and `children` are compared; metadata is deliberately ignored. - # - # @return [Boolean] - def ==(other) - if equal?(other) - true - elsif other.respond_to? :to_ast - other = other.to_ast - other.type == self.type && - other.children == self.children - else - false - end - end - - # Concatenates `array` with `children` and returns the resulting node. - # - # @return [AST::Node] - def concat(array) - updated(nil, @children + array.to_a) - end - - alias + concat - - # Appends `element` to `children` and returns the resulting node. - # - # @return [AST::Node] - def append(element) - updated(nil, @children + [element]) - end - - alias << append - - # Converts `self` to a pretty-printed s-expression. - # - # @param [Integer] indent Base indentation level. - # @return [String] - def to_sexp(indent=0) - indented = " " * indent - sexp = "#{indented}(#{fancy_type}" - - children.each do |child| - if child.is_a?(Node) - sexp += "\n#{child.to_sexp(indent + 1)}" - else - sexp += " #{child.inspect}" - end - end - - sexp += ")" - - sexp - end - - alias to_s to_sexp - - # Converts `self` to a s-expression ruby string. - # The code return will recreate the node, using the sexp module s() - # - # @param [Integer] indent Base indentation level. - # @return [String] - def inspect(indent=0) - indented = " " * indent - sexp = "#{indented}s(:#{@type}" - - children.each do |child| - if child.is_a?(Node) - sexp += ",\n#{child.inspect(indent + 1)}" - else - sexp += ", #{child.inspect}" - end - end - - sexp += ")" - - sexp - end - - # @return [AST::Node] self - def to_ast - self - end - - # Converts `self` to an Array where the first element is the type as a Symbol, - # and subsequent elements are the same representation of its children. - # - # @return [Array] - def to_sexp_array - children_sexp_arrs = children.map do |child| - if child.is_a?(Node) - child.to_sexp_array - else - child - end - end - - [type, *children_sexp_arrs] - end - - # Enables matching for Node, where type is the first element - # and the children are remaining items. - # - # @return [Array] - def deconstruct - [type, *children] - end - - protected - - # Returns `@type` with all underscores replaced by dashes. This allows - # to write symbol literals without quotes in Ruby sources and yet have - # nicely looking s-expressions. - # - # @return [String] - def fancy_type - @type.to_s.gsub('_', '-') - end - end -end diff --git a/bundle/ruby/3.2.0/gems/ast-2.4.2/lib/ast/processor.rb b/bundle/ruby/3.2.0/gems/ast-2.4.2/lib/ast/processor.rb deleted file mode 100644 index f1910c51..00000000 --- a/bundle/ruby/3.2.0/gems/ast-2.4.2/lib/ast/processor.rb +++ /dev/null @@ -1,12 +0,0 @@ -module AST - # This class includes {AST::Processor::Mixin}; however, it is - # deprecated, since the module defines all of the behaviors that - # the processor includes. Any new libraries should use - # {AST::Processor::Mixin} instead of subclassing this. - # - # @deprecated Use {AST::Processor::Mixin} instead. - class Processor - require 'ast/processor/mixin' - include Mixin - end -end diff --git a/bundle/ruby/3.2.0/gems/ast-2.4.2/lib/ast/processor/mixin.rb b/bundle/ruby/3.2.0/gems/ast-2.4.2/lib/ast/processor/mixin.rb deleted file mode 100644 index 6febec87..00000000 --- a/bundle/ruby/3.2.0/gems/ast-2.4.2/lib/ast/processor/mixin.rb +++ /dev/null @@ -1,288 +0,0 @@ -module AST - class Processor - # The processor module is a module which helps transforming one - # AST into another. In a nutshell, the {#process} method accepts - # a {Node} and dispatches it to a handler corresponding to its - # type, and returns a (possibly) updated variant of the node. - # - # The processor module has a set of associated design patterns. - # They are best explained with a concrete example. Let's define a - # simple arithmetic language and an AST format for it: - # - # Terminals (AST nodes which do not have other AST nodes inside): - # - # * `(integer )`, - # - # Nonterminals (AST nodes with other nodes as children): - # - # * `(add )`, - # * `(multiply )`, - # * `(divide )`, - # * `(negate )`, - # * `(store )`: stores value of `` - # into a variable named ``, - # * `(load )`: loads value of a variable named - # ``, - # * `(each ...)`: computes each of the ``s and - # prints the result. - # - # All AST nodes have the same Ruby class, and therefore they don't - # know how to traverse themselves. (A solution which dynamically - # checks the type of children is possible, but is slow and - # error-prone.) So, a class including the module which knows how - # to traverse the entire tree should be defined. Such classes - # have a handler for each nonterminal node which recursively - # processes children nodes: - # - # require 'ast' - # - # class ArithmeticsProcessor - # include AST::Processor::Mixin - # # This method traverses any binary operators such as (add) - # # or (multiply). - # def process_binary_op(node) - # # Children aren't decomposed automatically; it is - # # suggested to use Ruby multiple assignment expansion, - # # as it is very convenient here. - # left_expr, right_expr = *node - # - # # AST::Node#updated won't change node type if nil is - # # passed as a first argument, which allows to reuse the - # # same handler for multiple node types using `alias' - # # (below). - # node.updated(nil, [ - # process(left_expr), - # process(right_expr) - # ]) - # end - # alias_method :on_add, :process_binary_op - # alias_method :on_multiply, :process_binary_op - # alias_method :on_divide, :process_binary_op - # - # def on_negate(node) - # # It is also possible to use #process_all for more - # # compact code if every child is a Node. - # node.updated(nil, process_all(node)) - # end - # - # def on_store(node) - # expr, variable_name = *node - # - # # Note that variable_name is not a Node and thus isn't - # # passed to #process. - # node.updated(nil, [ - # process(expr), - # variable_name - # ]) - # end - # - # # (load) is effectively a terminal node, and so it does - # # not need an explicit handler, as the following is the - # # default behavior. Essentially, for any nodes that don't - # # have a defined handler, the node remains unchanged. - # def on_load(node) - # nil - # end - # - # def on_each(node) - # node.updated(nil, process_all(node)) - # end - # end - # - # Let's test our ArithmeticsProcessor: - # - # include AST::Sexp - # expr = s(:add, s(:integer, 2), s(:integer, 2)) - # - # p ArithmeticsProcessor.new.process(expr) == expr # => true - # - # As expected, it does not change anything at all. This isn't - # actually very useful, so let's now define a Calculator, which - # will compute the expression values: - # - # # This Processor folds nonterminal nodes and returns an - # # (integer) terminal node. - # class ArithmeticsCalculator < ArithmeticsProcessor - # def compute_op(node) - # # First, node children are processed and then unpacked - # # to local variables. - # nodes = process_all(node) - # - # if nodes.all? { |node| node.type == :integer } - # # If each of those nodes represents a literal, we can - # # fold this node! - # values = nodes.map { |node| node.children.first } - # AST::Node.new(:integer, [ - # yield(values) - # ]) - # else - # # Otherwise, we can just leave the current node in the - # # tree and only update it with processed children - # # nodes, which can be partially folded. - # node.updated(nil, nodes) - # end - # end - # - # def on_add(node) - # compute_op(node) { |left, right| left + right } - # end - # - # def on_multiply(node) - # compute_op(node) { |left, right| left * right } - # end - # end - # - # Let's check: - # - # p ArithmeticsCalculator.new.process(expr) # => (integer 4) - # - # Excellent, the calculator works! Now, a careful reader could - # notice that the ArithmeticsCalculator does not know how to - # divide numbers. What if we pass an expression with division to - # it? - # - # expr_with_division = \ - # s(:add, - # s(:integer, 1), - # s(:divide, - # s(:add, s(:integer, 8), s(:integer, 4)), - # s(:integer, 3))) # 1 + (8 + 4) / 3 - # - # folded_expr_with_division = ArithmeticsCalculator.new.process(expr_with_division) - # p folded_expr_with_division - # # => (add - # # (integer 1) - # # (divide - # # (integer 12) - # # (integer 3))) - # - # As you can see, the expression was folded _partially_: the inner - # `(add)` node which could be computed was folded to - # `(integer 12)`, the `(divide)` node is left as-is because there - # is no computing handler for it, and the root `(add)` node was - # also left as it is because some of its children were not - # literals. - # - # Note that this partial folding is only possible because the - # _data_ format, i.e. the format in which the computed values of - # the nodes are represented, is the same as the AST itself. - # - # Let's extend our ArithmeticsCalculator class further. - # - # class ArithmeticsCalculator - # def on_divide(node) - # compute_op(node) { |left, right| left / right } - # end - # - # def on_negate(node) - # # Note how #compute_op works regardless of the operator - # # arity. - # compute_op(node) { |value| -value } - # end - # end - # - # Now, let's apply our renewed ArithmeticsCalculator to a partial - # result of previous evaluation: - # - # p ArithmeticsCalculator.new.process(expr_with_division) # => (integer 5) - # - # Five! Excellent. This is also pretty much how CRuby 1.8 executed - # its programs. - # - # Now, let's do some automated bug searching. Division by zero is - # an error, right? So if we could detect that someone has divided - # by zero before the program is even run, that could save some - # debugging time. - # - # class DivisionByZeroVerifier < ArithmeticsProcessor - # class VerificationFailure < Exception; end - # - # def on_divide(node) - # # You need to process the children to handle nested divisions - # # such as: - # # (divide - # # (integer 1) - # # (divide (integer 1) (integer 0)) - # left, right = process_all(node) - # - # if right.type == :integer && - # right.children.first == 0 - # raise VerificationFailure, "Ouch! This code divides by zero." - # end - # end - # - # def divides_by_zero?(ast) - # process(ast) - # false - # rescue VerificationFailure - # true - # end - # end - # - # nice_expr = \ - # s(:divide, - # s(:add, s(:integer, 10), s(:integer, 2)), - # s(:integer, 4)) - # - # p DivisionByZeroVerifier.new.divides_by_zero?(nice_expr) - # # => false. Good. - # - # bad_expr = \ - # s(:add, s(:integer, 10), - # s(:divide, s(:integer, 1), s(:integer, 0))) - # - # p DivisionByZeroVerifier.new.divides_by_zero?(bad_expr) - # # => true. WHOOPS. DO NOT RUN THIS. - # - # Of course, this won't detect more complex cases... unless you - # use some partial evaluation before! The possibilites are - # endless. Have fun. - module Mixin - # Dispatches `node`. If a node has type `:foo`, then a handler - # named `on_foo` is invoked with one argument, the `node`; if - # there isn't such a handler, {#handler_missing} is invoked - # with the same argument. - # - # If the handler returns `nil`, `node` is returned; otherwise, - # the return value of the handler is passed along. - # - # @param [AST::Node, nil] node - # @return [AST::Node, nil] - def process(node) - return if node.nil? - - node = node.to_ast - - # Invoke a specific handler - on_handler = :"on_#{node.type}" - if respond_to? on_handler - new_node = send on_handler, node - else - new_node = handler_missing(node) - end - - node = new_node if new_node - - node - end - - # {#process}es each node from `nodes` and returns an array of - # results. - # - # @param [Array] nodes - # @return [Array] - def process_all(nodes) - nodes.to_a.map do |node| - process node - end - end - - # Default handler. Does nothing. - # - # @param [AST::Node] node - # @return [AST::Node, nil] - def handler_missing(node) - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/ast-2.4.2/lib/ast/sexp.rb b/bundle/ruby/3.2.0/gems/ast-2.4.2/lib/ast/sexp.rb deleted file mode 100644 index 9b03d26c..00000000 --- a/bundle/ruby/3.2.0/gems/ast-2.4.2/lib/ast/sexp.rb +++ /dev/null @@ -1,30 +0,0 @@ -module AST - # This simple module is very useful in the cases where one needs - # to define deeply nested ASTs from Ruby code, for example, in - # tests. It should be used like this: - # - # describe YourLanguage::AST do - # include Sexp - # - # it "should correctly parse expressions" do - # YourLanguage.parse("1 + 2 * 3").should == - # s(:add, - # s(:integer, 1), - # s(:multiply, - # s(:integer, 2), - # s(:integer, 3))) - # end - # end - # - # This way the amount of boilerplate code is greatly reduced. - module Sexp - # Creates a {Node} with type `type` and children `children`. - # Note that the resulting node is of the type AST::Node and not a - # subclass. - # This would not pose a problem with comparisons, as {Node#==} - # ignores metadata. - def s(type, *children) - Node.new(type, children) - end - end -end diff --git a/bundle/ruby/3.2.0/gems/base64-0.2.0/LICENSE.txt b/bundle/ruby/3.2.0/gems/base64-0.2.0/LICENSE.txt deleted file mode 100644 index a009caef..00000000 --- a/bundle/ruby/3.2.0/gems/base64-0.2.0/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (C) 1993-2013 Yukihiro Matsumoto. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: -1. Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright -notice, this list of conditions and the following disclaimer in the -documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -SUCH DAMAGE. diff --git a/bundle/ruby/3.2.0/gems/base64-0.2.0/README.md b/bundle/ruby/3.2.0/gems/base64-0.2.0/README.md deleted file mode 100644 index a29c58e7..00000000 --- a/bundle/ruby/3.2.0/gems/base64-0.2.0/README.md +++ /dev/null @@ -1,48 +0,0 @@ -# Base64 - -The Base64 module provides for the encoding (`#encode64`, `#strict_encode64`, -`#urlsafe_encode64`) and decoding (`#decode64`, `#strict_decode64`, -`#urlsafe_decode64`) of binary data using a Base64 representation. - -## Installation - -Add this line to your application's Gemfile: - -```ruby -gem 'base64' -``` - -And then execute: - - $ bundle install - -Or install it yourself as: - - $ gem install base64 - -## Usage - -A simple encoding and decoding. - -```ruby -require "base64" - -enc = Base64.encode64('Send reinforcements') - # -> "U2VuZCByZWluZm9yY2VtZW50cw==\n" -plain = Base64.decode64(enc) - # -> "Send reinforcements" -``` - -The purpose of using base64 to encode data is that it translates any -binary data into purely printable characters. - -## Development - -After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment. - -To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org). - -## Contributing - -Bug reports and pull requests are welcome on GitHub at https://github.com/ruby/base64. - diff --git a/bundle/ruby/3.2.0/gems/base64-0.2.0/lib/base64.rb b/bundle/ruby/3.2.0/gems/base64-0.2.0/lib/base64.rb deleted file mode 100644 index cd2ecc18..00000000 --- a/bundle/ruby/3.2.0/gems/base64-0.2.0/lib/base64.rb +++ /dev/null @@ -1,363 +0,0 @@ -# frozen_string_literal: true -# -# \Module \Base64 provides methods for: -# -# - Encoding a binary string (containing non-ASCII characters) -# as a string of printable ASCII characters. -# - Decoding such an encoded string. -# -# \Base64 is commonly used in contexts where binary data -# is not allowed or supported: -# -# - Images in HTML or CSS files, or in URLs. -# - Email attachments. -# -# A \Base64-encoded string is about one-third larger that its source. -# See the {Wikipedia article}[https://en.wikipedia.org/wiki/Base64] -# for more information. -# -# This module provides three pairs of encode/decode methods. -# Your choices among these methods should depend on: -# -# - Which character set is to be used for encoding and decoding. -# - Whether "padding" is to be used. -# - Whether encoded strings are to contain newlines. -# -# Note: Examples on this page assume that the including program has executed: -# -# require 'base64' -# -# == Encoding Character Sets -# -# A \Base64-encoded string consists only of characters from a 64-character set: -# -# - ('A'..'Z'). -# - ('a'..'z'). -# - ('0'..'9'). -# - =, the 'padding' character. -# - Either: -# - %w[+ /]: -# {RFC-2045-compliant}[https://datatracker.ietf.org/doc/html/rfc2045]; -# _not_ safe for URLs. -# - %w[- _]: -# {RFC-4648-compliant}[https://datatracker.ietf.org/doc/html/rfc4648]; -# safe for URLs. -# -# If you are working with \Base64-encoded strings that will come from -# or be put into URLs, you should choose this encoder-decoder pair -# of RFC-4648-compliant methods: -# -# - Base64.urlsafe_encode64 and Base64.urlsafe_decode64. -# -# Otherwise, you may choose any of the pairs in this module, -# including the pair above, or the RFC-2045-compliant pairs: -# -# - Base64.encode64 and Base64.decode64. -# - Base64.strict_encode64 and Base64.strict_decode64. -# -# == Padding -# -# \Base64-encoding changes a triplet of input bytes -# into a quartet of output characters. -# -# Padding in Encode Methods -# -# Padding -- extending an encoded string with zero, one, or two trailing -# = characters -- is performed by methods Base64.encode64, -# Base64.strict_encode64, and, by default, Base64.urlsafe_encode64: -# -# Base64.encode64('s') # => "cw==\n" -# Base64.strict_encode64('s') # => "cw==" -# Base64.urlsafe_encode64('s') # => "cw==" -# Base64.urlsafe_encode64('s', padding: false) # => "cw" -# -# When padding is performed, the encoded string is always of length 4n, -# where +n+ is a non-negative integer: -# -# - Input bytes of length 3n generate unpadded output characters -# of length 4n: -# -# # n = 1: 3 bytes => 4 characters. -# Base64.strict_encode64('123') # => "MDEy" -# # n = 2: 6 bytes => 8 characters. -# Base64.strict_encode64('123456') # => "MDEyMzQ1" -# -# - Input bytes of length 3n+1 generate padded output characters -# of length 4(n+1), with two padding characters at the end: -# -# # n = 1: 4 bytes => 8 characters. -# Base64.strict_encode64('1234') # => "MDEyMw==" -# # n = 2: 7 bytes => 12 characters. -# Base64.strict_encode64('1234567') # => "MDEyMzQ1Ng==" -# -# - Input bytes of length 3n+2 generate padded output characters -# of length 4(n+1), with one padding character at the end: -# -# # n = 1: 5 bytes => 8 characters. -# Base64.strict_encode64('12345') # => "MDEyMzQ=" -# # n = 2: 8 bytes => 12 characters. -# Base64.strict_encode64('12345678') # => "MDEyMzQ1Njc=" -# -# When padding is suppressed, for a positive integer n: -# -# - Input bytes of length 3n generate unpadded output characters -# of length 4n: -# -# # n = 1: 3 bytes => 4 characters. -# Base64.urlsafe_encode64('123', padding: false) # => "MDEy" -# # n = 2: 6 bytes => 8 characters. -# Base64.urlsafe_encode64('123456', padding: false) # => "MDEyMzQ1" -# -# - Input bytes of length 3n+1 generate unpadded output characters -# of length 4n+2, with two padding characters at the end: -# -# # n = 1: 4 bytes => 6 characters. -# Base64.urlsafe_encode64('1234', padding: false) # => "MDEyMw" -# # n = 2: 7 bytes => 10 characters. -# Base64.urlsafe_encode64('1234567', padding: false) # => "MDEyMzQ1Ng" -# -# - Input bytes of length 3n+2 generate unpadded output characters -# of length 4n+3, with one padding character at the end: -# -# # n = 1: 5 bytes => 7 characters. -# Base64.urlsafe_encode64('12345', padding: false) # => "MDEyMzQ" -# # m = 2: 8 bytes => 11 characters. -# Base64.urlsafe_encode64('12345678', padding: false) # => "MDEyMzQ1Njc" -# -# Padding in Decode Methods -# -# All of the \Base64 decode methods support (but do not require) padding. -# -# \Method Base64.decode64 does not check the size of the padding: -# -# Base64.decode64("MDEyMzQ1Njc") # => "01234567" -# Base64.decode64("MDEyMzQ1Njc=") # => "01234567" -# Base64.decode64("MDEyMzQ1Njc==") # => "01234567" -# -# \Method Base64.strict_decode64 strictly enforces padding size: -# -# Base64.strict_decode64("MDEyMzQ1Njc") # Raises ArgumentError -# Base64.strict_decode64("MDEyMzQ1Njc=") # => "01234567" -# Base64.strict_decode64("MDEyMzQ1Njc==") # Raises ArgumentError -# -# \Method Base64.urlsafe_decode64 allows padding in +str+, -# which if present, must be correct: -# see {Padding}[Base64.html#module-Base64-label-Padding], above: -# -# Base64.urlsafe_decode64("MDEyMzQ1Njc") # => "01234567" -# Base64.urlsafe_decode64("MDEyMzQ1Njc=") # => "01234567" -# Base64.urlsafe_decode64("MDEyMzQ1Njc==") # Raises ArgumentError. -# -# == Newlines -# -# An encoded string returned by Base64.encode64 or Base64.urlsafe_encode64 -# has an embedded newline character -# after each 60-character sequence, and, if non-empty, at the end: -# -# # No newline if empty. -# encoded = Base64.encode64("\x00" * 0) -# encoded.index("\n") # => nil -# -# # Newline at end of short output. -# encoded = Base64.encode64("\x00" * 1) -# encoded.size # => 4 -# encoded.index("\n") # => 4 -# -# # Newline at end of longer output. -# encoded = Base64.encode64("\x00" * 45) -# encoded.size # => 60 -# encoded.index("\n") # => 60 -# -# # Newlines embedded and at end of still longer output. -# encoded = Base64.encode64("\x00" * 46) -# encoded.size # => 65 -# encoded.rindex("\n") # => 65 -# encoded.split("\n").map {|s| s.size } # => [60, 4] -# -# The string to be encoded may itself contain newlines, -# which are encoded as \Base64: -# -# # Base64.encode64("\n\n\n") # => "CgoK\n" -# s = "This is line 1\nThis is line 2\n" -# Base64.encode64(s) # => "VGhpcyBpcyBsaW5lIDEKVGhpcyBpcyBsaW5lIDIK\n" -# -module Base64 - - VERSION = "0.2.0" - - module_function - - # Returns a string containing the RFC-2045-compliant \Base64-encoding of +bin+. - # - # Per RFC 2045, the returned string may contain the URL-unsafe characters - # + or /; - # see {Encoding Character Set}[Base64.html#module-Base64-label-Encoding+Character+Sets] above: - # - # Base64.encode64("\xFB\xEF\xBE") # => "++++\n" - # Base64.encode64("\xFF\xFF\xFF") # => "////\n" - # - # The returned string may include padding; - # see {Padding}[Base64.html#module-Base64-label-Padding] above. - # - # Base64.encode64('*') # => "Kg==\n" - # - # The returned string ends with a newline character, and if sufficiently long - # will have one or more embedded newline characters; - # see {Newlines}[Base64.html#module-Base64-label-Newlines] above: - # - # Base64.encode64('*') # => "Kg==\n" - # Base64.encode64('*' * 46) - # # => "KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq\nKg==\n" - # - # The string to be encoded may itself contain newlines, - # which will be encoded as ordinary \Base64: - # - # Base64.encode64("\n\n\n") # => "CgoK\n" - # s = "This is line 1\nThis is line 2\n" - # Base64.encode64(s) # => "VGhpcyBpcyBsaW5lIDEKVGhpcyBpcyBsaW5lIDIK\n" - # - def encode64(bin) - [bin].pack("m") - end - - # Returns a string containing the decoding of an RFC-2045-compliant - # \Base64-encoded string +str+: - # - # s = "VGhpcyBpcyBsaW5lIDEKVGhpcyBpcyBsaW5lIDIK\n" - # Base64.decode64(s) # => "This is line 1\nThis is line 2\n" - # - # Non-\Base64 characters in +str+ are ignored; - # see {Encoding Character Set}[Base64.html#module-Base64-label-Encoding+Character+Sets] above: - # these include newline characters and characters - and /: - # - # Base64.decode64("\x00\n-_") # => "" - # - # Padding in +str+ (even if incorrect) is ignored: - # - # Base64.decode64("MDEyMzQ1Njc") # => "01234567" - # Base64.decode64("MDEyMzQ1Njc=") # => "01234567" - # Base64.decode64("MDEyMzQ1Njc==") # => "01234567" - # - def decode64(str) - str.unpack1("m") - end - - # Returns a string containing the RFC-2045-compliant \Base64-encoding of +bin+. - # - # Per RFC 2045, the returned string may contain the URL-unsafe characters - # + or /; - # see {Encoding Character Set}[Base64.html#module-Base64-label-Encoding+Character+Sets] above: - # - # Base64.strict_encode64("\xFB\xEF\xBE") # => "++++\n" - # Base64.strict_encode64("\xFF\xFF\xFF") # => "////\n" - # - # The returned string may include padding; - # see {Padding}[Base64.html#module-Base64-label-Padding] above. - # - # Base64.strict_encode64('*') # => "Kg==\n" - # - # The returned string will have no newline characters, regardless of its length; - # see {Newlines}[Base64.html#module-Base64-label-Newlines] above: - # - # Base64.strict_encode64('*') # => "Kg==" - # Base64.strict_encode64('*' * 46) - # # => "KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg==" - # - # The string to be encoded may itself contain newlines, - # which will be encoded as ordinary \Base64: - # - # Base64.strict_encode64("\n\n\n") # => "CgoK" - # s = "This is line 1\nThis is line 2\n" - # Base64.strict_encode64(s) # => "VGhpcyBpcyBsaW5lIDEKVGhpcyBpcyBsaW5lIDIK" - # - def strict_encode64(bin) - [bin].pack("m0") - end - - # Returns a string containing the decoding of an RFC-2045-compliant - # \Base64-encoded string +str+: - # - # s = "VGhpcyBpcyBsaW5lIDEKVGhpcyBpcyBsaW5lIDIK" - # Base64.strict_decode64(s) # => "This is line 1\nThis is line 2\n" - # - # Non-\Base64 characters in +str+ not allowed; - # see {Encoding Character Set}[Base64.html#module-Base64-label-Encoding+Character+Sets] above: - # these include newline characters and characters - and /: - # - # Base64.strict_decode64("\n") # Raises ArgumentError - # Base64.strict_decode64('-') # Raises ArgumentError - # Base64.strict_decode64('_') # Raises ArgumentError - # - # Padding in +str+, if present, must be correct: - # - # Base64.strict_decode64("MDEyMzQ1Njc") # Raises ArgumentError - # Base64.strict_decode64("MDEyMzQ1Njc=") # => "01234567" - # Base64.strict_decode64("MDEyMzQ1Njc==") # Raises ArgumentError - # - def strict_decode64(str) - str.unpack1("m0") - end - - # Returns the RFC-4648-compliant \Base64-encoding of +bin+. - # - # Per RFC 4648, the returned string will not contain the URL-unsafe characters - # + or /, - # but instead may contain the URL-safe characters - # - and _; - # see {Encoding Character Set}[Base64.html#module-Base64-label-Encoding+Character+Sets] above: - # - # Base64.urlsafe_encode64("\xFB\xEF\xBE") # => "----" - # Base64.urlsafe_encode64("\xFF\xFF\xFF") # => "____" - # - # By default, the returned string may have padding; - # see {Padding}[Base64.html#module-Base64-label-Padding], above: - # - # Base64.urlsafe_encode64('*') # => "Kg==" - # - # Optionally, you can suppress padding: - # - # Base64.urlsafe_encode64('*', padding: false) # => "Kg" - # - # The returned string will have no newline characters, regardless of its length; - # see {Newlines}[Base64.html#module-Base64-label-Newlines] above: - # - # Base64.urlsafe_encode64('*') # => "Kg==" - # Base64.urlsafe_encode64('*' * 46) - # # => "KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg==" - # - def urlsafe_encode64(bin, padding: true) - str = strict_encode64(bin) - str.chomp!("==") or str.chomp!("=") unless padding - str.tr!("+/", "-_") - str - end - - # Returns the decoding of an RFC-4648-compliant \Base64-encoded string +str+: - # - # +str+ may not contain non-Base64 characters; - # see {Encoding Character Set}[Base64.html#module-Base64-label-Encoding+Character+Sets] above: - # - # Base64.urlsafe_decode64('+') # Raises ArgumentError. - # Base64.urlsafe_decode64('/') # Raises ArgumentError. - # Base64.urlsafe_decode64("\n") # Raises ArgumentError. - # - # Padding in +str+, if present, must be correct: - # see {Padding}[Base64.html#module-Base64-label-Padding], above: - # - # Base64.urlsafe_decode64("MDEyMzQ1Njc") # => "01234567" - # Base64.urlsafe_decode64("MDEyMzQ1Njc=") # => "01234567" - # Base64.urlsafe_decode64("MDEyMzQ1Njc==") # Raises ArgumentError. - # - def urlsafe_decode64(str) - # NOTE: RFC 4648 does say nothing about unpadded input, but says that - # "the excess pad characters MAY also be ignored", so it is inferred that - # unpadded input is also acceptable. - if !str.end_with?("=") && str.length % 4 != 0 - str = str.ljust((str.length + 3) & ~3, "=") - str.tr!("-_", "+/") - else - str = str.tr("-_", "+/") - end - strict_decode64(str) - end -end diff --git a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/LICENSE b/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/LICENSE deleted file mode 100644 index 11069edd..00000000 --- a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - -Copyright [yyyy] [name of copyright owner] - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. diff --git a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/Rakefile b/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/Rakefile deleted file mode 100644 index 237f47f7..00000000 --- a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/Rakefile +++ /dev/null @@ -1,15 +0,0 @@ -# frozen_string_literal: true -require "bundler/gem_tasks" - -task default: :spec - -begin - require "rspec/core/rake_task" - desc "Run standard specs" - RSpec::Core::RakeTask.new(:spec) do |t| - t.verbose = false - t.pattern = FileList["spec/**/*_spec.rb"] - end -rescue LoadError - STDERR.puts "\n*** RSpec not available. (sudo) gem install rspec to run unit tests. ***\n\n" -end diff --git a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/chef-utils.gemspec b/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/chef-utils.gemspec deleted file mode 100644 index e885aae1..00000000 --- a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/chef-utils.gemspec +++ /dev/null @@ -1,50 +0,0 @@ -# frozen_string_literal: true -lib = File.expand_path("lib", __dir__) -$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) -require "chef-utils/version" - -Gem::Specification.new do |spec| - spec.name = "chef-utils" - spec.version = ChefUtils::VERSION - spec.authors = ["Chef Software, Inc"] - spec.email = ["oss@chef.io"] - - spec.summary = %q{Basic utility functions for Core Chef Infra development} - spec.homepage = "https://github.com/chef/chef/tree/main/chef-utils" - spec.license = "Apache-2.0" - - spec.required_ruby_version = ">= 2.6" - - spec.metadata = { - "bug_tracker_uri" => "https://github.com/chef/chef/issues", - "changelog_uri" => "https://github.com/chef/chef/blob/main/CHANGELOG.md", - "documentation_uri" => "https://github.com/chef/chef/tree/main/chef-utils/README.md", - "homepage_uri" => "https://github.com/chef/chef/tree/main/chef-utils", - "source_code_uri" => "https://github.com/chef/chef/tree/main/chef-utils", - } - - spec.require_paths = ["lib"] - - # - # NOTE: DO NOT ADD RUNTIME DEPS TO OTHER CHEF ECOSYSTEM GEMS - # (e.g. chef, ohai, mixlib-anything, ffi-yajl, and IN PARTICULAR NOT chef-config) - # - # This is so that this set of common code can be reused in any other library without - # creating circular dependencies. If you find yourself wanting to do that you probably - # have a helper that should go into the library you want to declare a dependency on, - # or you need to create another gem that is not this one. You may also want to rub some - # dependency injection on your API to invert things so that you don't have to take - # a dependency on the thing you need (i.e. allow injecting a hash-like thing instead of taking - # a dep on mixlib-config and then require the consumer to wire up chef-config to your - # API). Same for mixlib-log and Chef::Log in general. - # - # ABSOLUTELY NO EXCEPTIONS - # - - # concurrent-ruby is: 1. lightweight, 2. has zero deps, 3. is external to chef - # this is used for the parallel_map enumerable extension for lightweight threading - spec.add_dependency "concurrent-ruby" - - spec.files = %w{Rakefile LICENSE} + Dir.glob("*.gemspec") + - Dir.glob("{lib,spec}/**/*", File::FNM_DOTMATCH).reject { |f| File.directory?(f) } -end diff --git a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils.rb b/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils.rb deleted file mode 100644 index 57a1e401..00000000 --- a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils.rb +++ /dev/null @@ -1,53 +0,0 @@ -# frozen_string_literal: true -# -# Copyright:: Copyright (c) Chef Software Inc. -# License:: Apache License, Version 2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -require_relative "chef-utils/dsl/architecture" -require_relative "chef-utils/dsl/cloud" -require_relative "chef-utils/dsl/introspection" -require_relative "chef-utils/dsl/os" -require_relative "chef-utils/dsl/default_paths" -require_relative "chef-utils/dsl/path_sanity" -require_relative "chef-utils/dsl/platform" -require_relative "chef-utils/dsl/platform_family" -require_relative "chef-utils/dsl/platform_version" -require_relative "chef-utils/dsl/service" -require_relative "chef-utils/dsl/train_helpers" -require_relative "chef-utils/dsl/virtualization" -require_relative "chef-utils/dsl/which" -require_relative "chef-utils/dsl/windows" -require_relative "chef-utils/mash" - -# This is the Chef Infra Client DSL, not everything needs to go in here -module ChefUtils - include ChefUtils::DSL::Architecture - include ChefUtils::DSL::Cloud - include ChefUtils::DSL::DefaultPaths - include ChefUtils::DSL::Introspection - include ChefUtils::DSL::OS - include ChefUtils::DSL::Platform - include ChefUtils::DSL::PlatformFamily - include ChefUtils::DSL::PlatformVersion - include ChefUtils::DSL::TrainHelpers - include ChefUtils::DSL::Virtualization - include ChefUtils::DSL::Which - include ChefUtils::DSL::Windows - # ChefUtils::DSL::Service is deliberately excluded - - CANARY = 1 # used as a guard for requires - extend self -end diff --git a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/dist.rb b/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/dist.rb deleted file mode 100644 index a3d8a27d..00000000 --- a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/dist.rb +++ /dev/null @@ -1,154 +0,0 @@ -# frozen_string_literal: true -module ChefUtils - # This class is not fully implemented, depending on it is not recommended! - module Dist - class Apply - # The chef-apply product name - PRODUCT = "Chef Infra Apply" - - # The chef-apply binary - EXEC = "chef-apply" - end - - class Automate - # name of the automate product - PRODUCT = "Chef Automate" - end - - class Cli - # the chef-cli product name - PRODUCT = "Chef CLI" - - # the chef-cli gem - GEM = "chef-cli" - end - - class Habitat - # name of the Habitat product - PRODUCT = "Chef Habitat" - - # A short designation for the product - SHORT = "habitat" - - # The hab cli binary - EXEC = "hab" - end - - class Infra - # When referencing a product directly, like Chef (Now Chef Infra) - PRODUCT = "Chef Infra Client" - - # A short designation for the product, used in Windows event logs - # and some nomenclature. - SHORT = "chef" - - # The client's alias (chef-client) - CLIENT = "chef-client" - - # The chef executable, as in `chef gem install` or `chef generate cookbook` - EXEC = "chef" - - # The chef-shell executable - SHELL = "chef-shell" - - # Configuration related constants - # The chef-shell configuration file - SHELL_CONF = "chef_shell.rb" - - # The user's configuration directory - USER_CONF_DIR = ".chef" - - # The suffix for Chef's /etc/chef, /var/chef and C:\\Chef directories - # "chef" => /etc/cinc, /var/cinc, C:\\cinc - DIR_SUFFIX = "chef" - - # The client's gem - GEM = "chef" - - # The client's container image - CONTAINER_REF = "chef/chef" - end - - class Inspec - # The InSpec product name - PRODUCT = "Chef InSpec" - - # The inspec binary - EXEC = "inspec" - end - - class Org - # product Website address - WEBSITE = "https://chef.io" - - # The downloads site - DOWNLOADS_URL = "chef.io/downloads" - - # The legacy conf folder: C:/opscode/chef. Specifically the "opscode" part - # DIR_SUFFIX is appended to it in code where relevant - LEGACY_CONF_DIR = "opscode" - - # Enable forcing Chef EULA - ENFORCE_LICENSE = true - - # product patents page - PATENTS = "https://www.chef.io/patents" - - # knife documentation page - KNIFE_DOCS = "https://docs.chef.io/workstation/knife/" - - # the name of the overall infra product - PRODUCT = "Chef Infra" - - # Omnitruck URL - OMNITRUCK_URL = "https://omnitruck.chef.io/install.sh" - end - - class Server - # The name of the server product - PRODUCT = "Chef Infra Server" - - # The server's configuration directory - CONF_DIR = "/etc/chef-server" - - # The servers's alias (chef-server) - SERVER = "chef-server" - - # The server's configuration utility - SERVER_CTL = "chef-server-ctl" - - # The server`s docs URL - SERVER_DOCS = "https://docs.chef.io/server/" - - # OS user for server - SYSTEM_USER = "opscode" - end - - class Solo - # Chef-Solo's product name - PRODUCT = "Chef Infra Solo" - - # The chef-solo executable (legacy local mode) - EXEC = "chef-solo" - end - - class Workstation - # The full marketing name of the product - PRODUCT = "Chef Workstation" - - # The suffix for Chef Workstation's /opt/chef-workstation or C:\\opscode\chef-workstation - DIR_SUFFIX = "chef-workstation" - - # Workstation banner/help text - DOCS = "https://docs.chef.io/workstation/" - end - - class Zero - # chef-zero executable - PRODUCT = "Chef Infra Zero" - - # The chef-zero executable (local mode) - EXEC = "chef-zero" - end - end -end diff --git a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/dsl/architecture.rb b/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/dsl/architecture.rb deleted file mode 100644 index e1ac4a09..00000000 --- a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/dsl/architecture.rb +++ /dev/null @@ -1,150 +0,0 @@ -# frozen_string_literal: true -# -# Copyright:: Copyright (c) Chef Software Inc. -# License:: Apache License, Version 2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -require_relative "../internal" - -module ChefUtils - module DSL - module Architecture - include Internal - - # Determine if the current architecture is 64-bit. - # - # @since 15.5 - # - # @return [Boolean] - # - def _64_bit?(node = __getnode) - %w{amd64 x86_64 ppc64 ppc64le s390x ia64 sparc64 aarch64 arch64 arm64 sun4v sun4u} - .include?(node["kernel"]["machine"]) - end - - # Determine if the current architecture is 32-bit. - # - # @since 15.5 - # - # @return [Boolean] - # - def _32_bit?(node = __getnode) - !_64_bit?(node) - end - - # Determine if the current architecture is i386. - # - # @since 15.5 - # - # @return [Boolean] - # - def i386?(node = __getnode) - _32_bit?(node) && intel?(node) - end - - # Determine if the current architecture is Intel. - # - # @since 15.5 - # - # @return [Boolean] - # - def intel?(node = __getnode) - %w{i86pc i386 x86_64 amd64 i686}.include?(node["kernel"]["machine"]) - end - - # Determine if the current architecture is SPARC. - # - # @since 15.5 - # - # @return [Boolean] - # - def sparc?(node = __getnode) - %w{sun4u sun4v}.include?(node["kernel"]["machine"]) - end - - # Determine if the current architecture is PowerPC 64bit Big Endian. - # - # @since 15.5 - # - # @return [Boolean] - # - def ppc64?(node = __getnode) - %w{ppc64}.include?(node["kernel"]["machine"]) - end - - # Determine if the current architecture is PowerPC 64bit Little Endian. - # - # @since 15.5 - # - # @return [Boolean] - # - def ppc64le?(node = __getnode) - %w{ppc64le}.include?(node["kernel"]["machine"]) - end - - # Determine if the current architecture is PowerPC. - # - # @since 15.5 - # - # @return [Boolean] - # - def powerpc?(node = __getnode) - %w{powerpc}.include?(node["kernel"]["machine"]) - end - - # Determine if the current architecture is arm - # - # @since 15.10 - # - # @return [Boolean] - # - def arm?(node = __getnode) - %w{armv6l armv7l armhf aarch64 arm64 arch64}.include?(node["kernel"]["machine"]) - end - - # Determine if the current architecture is 32-bit ARM hard float. - # - # @since 15.5 - # - # @return [Boolean] - # - def armhf?(node = __getnode) - %w{armv6l armv7l armhf}.include?(node["kernel"]["machine"]) - end - - # Determine if the current architecture is s390x. - # - # @since 15.5 - # - # @return [Boolean] - # - def s390x?(node = __getnode) - %w{s390x}.include?(node["kernel"]["machine"]) - end - - # Determine if the current architecture is s390. - # - # @since 15.5 - # - # @return [Boolean] - # - def s390?(node = __getnode) - %w{s390}.include?(node["kernel"]["machine"]) - end - - extend self - end - end -end diff --git a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/dsl/cloud.rb b/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/dsl/cloud.rb deleted file mode 100644 index 6e8fc520..00000000 --- a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/dsl/cloud.rb +++ /dev/null @@ -1,155 +0,0 @@ -# frozen_string_literal: true -# -# Copyright:: Copyright (c) Chef Software Inc. -# License:: Apache License, Version 2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -require_relative "../internal" - -module ChefUtils - module DSL - module Cloud - include Internal - - # Determine if the current node is running in a known cloud. - # - # @param [Chef::Node] node the node to check - # @since 15.8 - # - # @return [Boolean] - # - def cloud?(node = __getnode) - # cloud is always present, but nil if not on a cloud - !node["cloud"].nil? - end - - # Determine if the current node is running in Alibaba Cloud - # - # @param [Chef::Node] node the node to check - # @since 17.0 - # - # @return [Boolean] - # - def alibaba?(node = __getnode) - node.key?("alibaba") - end - - # Determine if the current node is running in AWS EC2. - # - # @param [Chef::Node] node the node to check - # @since 15.8 - # - # @return [Boolean] - # - def ec2?(node = __getnode) - node.key?("ec2") - end - - # Determine if the current node running in Google Compute Engine (GCE). - # - # @param [Chef::Node] node the node to check - # @since 15.8 - # - # @return [Boolean] - # - def gce?(node = __getnode) - node.key?("gce") - end - - # Determine if the current node is running in Rackspace. - # - # @param [Chef::Node] node the node to check - # @since 15.8 - # - # @return [Boolean] - # - def rackspace?(node = __getnode) - node.key?("rackspace") - end - - # Determine if the current node is running in Eucalyptus. - # - # @param [Chef::Node] node the node to check - # @since 15.8 - # - # @return [Boolean] - # - def eucalyptus?(node = __getnode) - node.key?("eucalyptus") - end - # chef-sugar backcompat method - alias_method :euca?, :eucalyptus? - - # Determine if the current node is running in Linode. - # - # @param [Chef::Node] node the node to check - # @since 15.8 - # - # @return [Boolean] - # - def linode?(node = __getnode) - node.key?("linode") - end - - # Determine if the current node is running in OpenStack. - # - # @param [Chef::Node] node the node to check - # @since 15.8 - # - # @return [Boolean] - # - def openstack?(node = __getnode) - node.key?("openstack") - end - - # Determine if the current node is running in Microsoft Azure. - # - # @param [Chef::Node] node the node to check - # @since 15.8 - # - # @return [Boolean] - # - def azure?(node = __getnode) - node.key?("azure") - end - - # Determine if the current node is running in DigitalOcean. - # - # @param [Chef::Node] node the node to check - # @since 15.8 - # - # @return [Boolean] - # - def digital_ocean?(node = __getnode) - node.key?("digital_ocean") - end - # chef-sugar backcompat method - alias_method :digitalocean?, :digital_ocean? - - # Determine if the current node is running in SoftLayer (IBM Cloud). - # - # @param [Chef::Node] node the node to check - # @since 15.8 - # - # @return [Boolean] - # - def softlayer?(node = __getnode) - node.key?("softlayer") - end - - extend self - end - end -end diff --git a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/dsl/default_paths.rb b/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/dsl/default_paths.rb deleted file mode 100644 index b2eb3592..00000000 --- a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/dsl/default_paths.rb +++ /dev/null @@ -1,60 +0,0 @@ -# frozen_string_literal: true -# -# Copyright:: Copyright (c) Chef Software Inc. -# License:: Apache License, Version 2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -require_relative "../internal" -require_relative "platform_family" - -module ChefUtils - module DSL - module DefaultPaths - include Internal - - # @since 15.5 - def default_paths(env = nil) - env_path = env ? env["PATH"] : __env_path - env_path = "" if env_path.nil? - path_separator = ChefUtils.windows? ? ";" : ":" - # ensure the Ruby and Gem bindirs are included for omnibus chef installs - new_paths = env_path.split(path_separator) - [ __ruby_bindir, __gem_bindir ].compact.each do |path| - new_paths = [ path ] + new_paths unless new_paths.include?(path) - end - __default_paths.each do |path| - new_paths << path unless new_paths.include?(path) - end - new_paths.join(path_separator).encode("utf-8", invalid: :replace, undef: :replace) - end - - private - - def __default_paths - ChefUtils.windows? ? %w{} : %w{/usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin} - end - - def __ruby_bindir - RbConfig::CONFIG["bindir"] - end - - def __gem_bindir - Gem.bindir - end - - extend self - end - end -end diff --git a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/dsl/introspection.rb b/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/dsl/introspection.rb deleted file mode 100644 index eff75727..00000000 --- a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/dsl/introspection.rb +++ /dev/null @@ -1,134 +0,0 @@ -# frozen_string_literal: true -# -# Copyright:: Copyright (c) Chef Software Inc. -# License:: Apache License, Version 2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -require_relative "train_helpers" - -module ChefUtils - module DSL - # This is for "introspection" helpers in the sense that we are inspecting the - # actual server or image under management to determine running state (duck-typing the system). - # The helpers here may use the node object state from ohai, but typically not the big 5: platform, - # platform_family, platform_version, arch, os. The helpers here should infer somewhat - # higher level facts about the system. - # - module Introspection - include TrainHelpers - - # Determine if the node is using the Chef Effortless pattern in which the Chef Infra Client is packaged using Chef Habitat - # - # @param [Chef::Node] node the node to check - # @since 17.0 - # - # @return [Boolean] - # - def effortless?(node = __getnode) - !!(node && node.read("chef_packages", "chef", "chef_effortless")) - end - - # Determine if the node is a docker container. - # - # @param [Chef::Node] node the node to check - # @since 12.11 - # - # @return [Boolean] - # - def docker?(node = __getnode) - # Using "File.exist?('/.dockerinit') || File.exist?('/.dockerenv')" makes Travis sad, - # and that makes us sad too. - !!(node && node.read("virtualization", "systems", "docker") == "guest") - end - - # Determine if the node uses the systemd init system. - # - # @param [Chef::Node] node the node to check - # @since 15.5 - # - # @return [Boolean] - # - def systemd?(node = __getnode) - file_exist?("/proc/1/comm") && file_open("/proc/1/comm").gets.chomp == "systemd" - end - - # Determine if the node is running in Test Kitchen. - # - # @param [Chef::Node] node the node to check - # @since 15.5 - # - # @return [Boolean] - # - def kitchen?(node = __getnode) - ENV.key?("TEST_KITCHEN") - end - - # Determine if the node is running in a CI system that sets the CI env var. - # - # @param [Chef::Node] node the node to check - # @since 15.5 - # - # @return [Boolean] - # - def ci?(node = __getnode) - ENV.key?("CI") - end - - # Determine if the a systemd service unit is present on the system. - # - # @param [String] svc_name - # @since 15.5 - # - # @return [Boolean] - # - def has_systemd_service_unit?(svc_name) - %w{ /etc /usr/lib /lib /run }.any? do |load_path| - file_exist?( - "#{load_path}/systemd/system/#{svc_name.gsub(/@.*$/, "@")}.service" - ) - end - end - - # Determine if the a systemd unit of any type is present on the system. - # - # @param [String] svc_name - # @since 15.5 - # - # @return [Boolean] - # - def has_systemd_unit?(svc_name) - # TODO: stop supporting non-service units with service resource - %w{ /etc /usr/lib /lib /run }.any? do |load_path| - file_exist?("#{load_path}/systemd/system/#{svc_name}") - end - end - - # Determine if the current node includes the given recipe name. - # - # @param [String] recipe_name - # @since 15.8 - # - # @return [Boolean] - # - def includes_recipe?(recipe_name, node = __getnode) - node.recipe?(recipe_name) - end - # chef-sugar backcompat method - alias_method :include_recipe?, :includes_recipe? - - extend self - end - end -end diff --git a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/dsl/os.rb b/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/dsl/os.rb deleted file mode 100644 index da6850a7..00000000 --- a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/dsl/os.rb +++ /dev/null @@ -1,58 +0,0 @@ -# frozen_string_literal: true -# -# Copyright:: Copyright (c) Chef Software Inc. -# License:: Apache License, Version 2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -require_relative "../internal" - -module ChefUtils - module DSL - module OS - include Internal - - # - # NOTE CAREFULLY: Most node['os'] values should not appear in this file at all. - # - # For cases where node['os'] == node['platform_family'] == node['platform'] then - # only the platform helper should be added. - # - - # Determine if the current node is Linux. - # - # @param [Chef::Node] node the node to check - # @since 15.5 - # - # @return [Boolean] - # - def linux?(node = __getnode) - node["os"] == "linux" - end - - # Determine if the current node is Darwin. - # - # @param [Chef::Node] node the node to check - # @since 15.5 - # - # @return [Boolean] - # - def darwin?(node = __getnode) - node["os"] == "darwin" - end - - extend self - end - end -end diff --git a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/dsl/path_sanity.rb b/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/dsl/path_sanity.rb deleted file mode 100644 index 7766ce31..00000000 --- a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/dsl/path_sanity.rb +++ /dev/null @@ -1,39 +0,0 @@ -# frozen_string_literal: true -# -# Copyright:: Copyright (c) Chef Software Inc. -# License:: Apache License, Version 2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -require_relative "default_paths" - -module ChefUtils - module DSL - module PathSanity - include ChefUtils::DSL::DefaultPaths - - def sanitized_path(env = nil) - default_paths(env) - end - - private - - def __sane_paths - __default_paths - end - - extend self - end - end -end diff --git a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/dsl/platform.rb b/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/dsl/platform.rb deleted file mode 100644 index 9dd336b6..00000000 --- a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/dsl/platform.rb +++ /dev/null @@ -1,387 +0,0 @@ -# frozen_string_literal: true -# -# Copyright:: Copyright (c) Chef Software Inc. -# License:: Apache License, Version 2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -require_relative "../internal" - -module ChefUtils - module DSL - module Platform - include Internal - - # NOTE: if you are adding new platform helpers they should all have the `_platform?` suffix. - # DO NOT add new short aliases without the suffix (they will be deprecated in the future) - # aliases here are mostly for backwards compatibility with chef-sugar and new ones are DISCOURAGED. - # generally there should be one obviously correct way to do things. - - # Determine if the current node is linux mint. - # - # @param [Chef::Node] node the node to check - # @since 15.5 - # - # @return [Boolean] - # - def linuxmint_platform?(node = __getnode) - node["platform"] == "linuxmint" - end - # chef-sugar backcompat method - alias_method :mint?, :linuxmint_platform? - # chef-sugar backcompat method - alias_method :linux_mint?, :linuxmint_platform? - # chef-sugar backcompat method - alias_method :linuxmint?, :linuxmint_platform? - - # Determine if the current node is Ubuntu. - # - # @param [Chef::Node] node the node to check - # @since 15.5 - # - # @return [Boolean] - # - def ubuntu_platform?(node = __getnode) - node["platform"] == "ubuntu" - end - # chef-sugar backcompat method - alias_method :ubuntu?, :ubuntu_platform? - - # Determine if the current node is Raspbian. - # - # @param [Chef::Node] node the node to check - # @since 15.5 - # - # @return [Boolean] - # - def raspbian_platform?(node = __getnode) - node["platform"] == "raspbian" - end - # chef-sugar backcompat method - alias_method :raspbian?, :raspbian_platform? - - # Determine if the current node is Debian. - # - # @param [Chef::Node] node the node to check - # @since 15.5 - # - # @return [Boolean] - # - def debian_platform?(node = __getnode) - node["platform"] == "debian" - end - - # Determine if the current node is Amazon Linux. - # - # @param [Chef::Node] node the node to check - # @since 15.5 - # - # @return [Boolean] - # - def amazon_platform?(node = __getnode) - node["platform"] == "amazon" - end - - # Determine if the current node is Red Hat Enterprise Linux. - # - # @param [Chef::Node] node the node to check - # @since 15.5 - # - # @return [Boolean] - # - def redhat_platform?(node = __getnode) - node["platform"] == "redhat" - end - # chef-sugar backcompat method - alias_method :redhat_enterprise?, :redhat_platform? - # chef-sugar backcompat method - alias_method :redhat_enterprise_linux?, :redhat_platform? - # chef-sugar backcompat method - alias_method :redhat?, :redhat_platform? - - # Determine if the current node is CentOS. - # - # @param [Chef::Node] node the node to check - # @since 15.5 - # - # @return [Boolean] - # - def centos_platform?(node = __getnode) - node["platform"] == "centos" - end - # chef-sugar backcompat method - alias_method :centos?, :centos_platform? - - # Determine if the current node is CentOS Stream. - # - # @param [Chef::Node] node the node to check - # @since 17.0 - # - # @return [Boolean] - # - def centos_stream_platform?(node = __getnode) - if node["os_release"] - node.dig("os_release", "name") == "CentOS Stream" - else - node.dig("lsb", "id") == "CentOSStream" - end - end - - # Determine if the current node is Oracle Linux. - # - # @param [Chef::Node] node the node to check - # @since 15.5 - # - # @return [Boolean] - # - def oracle_platform?(node = __getnode) - node["platform"] == "oracle" - end - # chef-sugar backcompat method - alias_method :oracle_linux?, :oracle_platform? - # chef-sugar backcompat method - alias_method :oracle?, :oracle_platform? - - # Determine if the current node is Scientific Linux. - # - # @param [Chef::Node] node the node to check - # @since 15.5 - # - # @return [Boolean] - # - def scientific_platform?(node = __getnode) - node["platform"] == "scientific" - end - # chef-sugar backcompat method - alias_method :scientific_linux?, :scientific_platform? - # chef-sugar backcompat method - alias_method :scientific?, :scientific_platform? - - # Determine if the current node is ClearOS. - # - # @param [Chef::Node] node the node to check - # @since 15.5 - # - # @return [Boolean] - # - def clearos_platform?(node = __getnode) - node["platform"] == "clearos" - end - # chef-sugar backcompat method - alias_method :clearos?, :clearos_platform? - - # Determine if the current node is Fedora. - # - # @param [Chef::Node] node the node to check - # @since 15.5 - # - # @return [Boolean] - # - def fedora_platform?(node = __getnode) - node["platform"] == "fedora" - end - - # Determine if the current node is Arch Linux - # - # @param [Chef::Node] node the node to check - # @since 15.5 - # - # @return [Boolean] - # - def arch_platform?(node = __getnode) - node["platform"] == "arch" - end - - # Determine if the current node is Solaris2. - # - # @param [Chef::Node] node the node to check - # @since 15.5 - # - # @return [Boolean] - # - def solaris2_platform?(node = __getnode) - node["platform"] == "solaris2" - end - - # Determine if the current node is SmartOS. - # - # @param [Chef::Node] node the node to check - # @since 15.5 - # - # @return [Boolean] - # - def smartos_platform?(node = __getnode) - node["platform"] == "smartos" - end - - # Determine if the current node is OmniOS. - # - # @param [Chef::Node] node the node to check - # @since 15.5 - # - # @return [Boolean] - # - def omnios_platform?(node = __getnode) - node["platform"] == "omnios" - end - # chef-sugar backcompat method - alias_method :omnios?, :omnios_platform? - - # Determine if the current node is OpenIndiana. - # - # @param [Chef::Node] node the node to check - # @since 15.5 - # - # @return [Boolean] - # - def openindiana_platform?(node = __getnode) - node["platform"] == "openindiana" - end - # chef-sugar backcompat method - alias_method :openindiana?, :openindiana_platform? - - # Determine if the current node is AIX. - # - # @param [Chef::Node] node the node to check - # @since 15.5 - # - # @return [Boolean] - # - def aix_platform?(node = __getnode) - node["platform"] == "aix" - end - - # Determine if the current node is FreeBSD. - # - # @param [Chef::Node] node the node to check - # @since 15.5 - # - # @return [Boolean] - # - def freebsd_platform?(node = __getnode) - node["platform"] == "freebsd" - end - - # Determine if the current node is OpenBSD. - # - # @param [Chef::Node] node the node to check - # @since 15.5 - # - # @return [Boolean] - # - def openbsd_platform?(node = __getnode) - node["platform"] == "openbsd" - end - - # Determine if the current node is NetBSD. - # - # @param [Chef::Node] node the node to check - # @since 15.5 - # - # @return [Boolean] - # - def netbsd_platform?(node = __getnode) - node["platform"] == "netbsd" - end - - # Determine if the current node is DragonFly BSD. - # - # @param [Chef::Node] node the node to check - # @since 15.5 - # - # @return [Boolean] - # - def dragonfly_platform?(node = __getnode) - node["platform"] == "dragonfly" - end - - # Determine if the current node is macOS. - # - # @param [Chef::Node] node the node to check - # @since 15.5 - # - # @return [Boolean] - # - def macos_platform?(node = __getnode) - node["platform"] == "mac_os_x" - end - # chef-sugar backcompat method - alias_method :mac_os_x_platform?, :macos_platform? - - # Determine if the current node is Gentoo. - # - # @param [Chef::Node] node the node to check - # @since 15.5 - # - # @return [Boolean] - # - def gentoo_platform?(node = __getnode) - node["platform"] == "gentoo" - end - - # Determine if the current node is Slackware. - # - # @param [Chef::Node] node the node to check - # @since 15.5 - # - # @return [Boolean] - # - def slackware_platform?(node = __getnode) - node["platform"] == "slackware" - end - - # Determine if the current node is SuSE. - # - # @param [Chef::Node] node the node to check - # @since 15.5 - # - # @return [Boolean] - # - def suse_platform?(node = __getnode) - node["platform"] == "suse" - end - - # Determine if the current node is openSUSE. - # - # @param [Chef::Node] node the node to check - # @since 15.5 - # - # @return [Boolean] - # - def opensuse_platform?(node = __getnode) - node["platform"] == "opensuse" || node["platform"] == "opensuseleap" - end - # chef-sugar backcompat method - alias_method :opensuse?, :opensuse_platform? - # chef-sugar backcompat method - alias_method :opensuseleap_platform?, :opensuse_platform? - # chef-sugar backcompat method - alias_method :leap_platform?, :opensuse_platform? - # NOTE: to anyone adding :tumbleweed_platform? - :[opensuse]leap_platform? should be false on tumbleweed, :opensuse[_platform]? should be true - - # Determine if the current node is Windows. - # - # @param [Chef::Node] node the node to check - # @since 15.5 - # - # @return [Boolean] - # - def windows_platform?(node = __getnode) - node["platform"] == "windows" - end - - extend self - end - end -end diff --git a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/dsl/platform_family.rb b/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/dsl/platform_family.rb deleted file mode 100644 index 2dcc9097..00000000 --- a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/dsl/platform_family.rb +++ /dev/null @@ -1,360 +0,0 @@ -# frozen_string_literal: true -# -# Copyright:: Copyright (c) Chef Software Inc. -# License:: Apache License, Version 2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -require_relative "../internal" - -module ChefUtils - module DSL - module PlatformFamily - include Internal - - # Determine if the current node is a member of the 'arch' family. - # - # @param [Chef::Node] node the node to check - # @since 15.5 - # - # @return [Boolean] - # - def arch?(node = __getnode) - node["platform_family"] == "arch" - end - # chef-sugar backcompat method - alias_method :arch_linux?, :arch? - - # Determine if the current node is a member of the 'aix' platform family. - # - # @param [Chef::Node] node the node to check - # @since 15.5 - # - # @return [Boolean] - # - def aix?(node = __getnode) - node["platform_family"] == "aix" - end - - # Determine if the current node is a member of the 'debian' platform family (Debian, Ubuntu and derivatives). - # - # @param [Chef::Node] node the node to check - # @since 15.5 - # - # @return [Boolean] - # - def debian?(node = __getnode) - node["platform_family"] == "debian" - end - - # Determine if the current node is a member of the 'fedora' platform family (Fedora and Arista). - # - # @param [Chef::Node] node the node to check - # @since 15.5 - # - # @return [Boolean] - # - def fedora?(node = __getnode) - node["platform_family"] == "fedora" - end - - # Determine if the current node is a member of the 'mac_os_x' platform family. - # - # @param [Chef::Node] node the node to check - # @since 15.5 - # - # @return [Boolean] - # - def macos?(node = __getnode) - node ? node["platform_family"] == "mac_os_x" : macos_ruby? - end - # chef-sugar backcompat method - alias_method :osx?, :macos? - # chef-sugar backcompat method - alias_method :mac?, :macos? - # chef-sugar backcompat method - alias_method :mac_os_x?, :macos? - - # Determine if the Ruby VM is currently running on a Mac node (This is useful primarily for internal use - # by Chef Infra Client before the node object exists). - # - # @since 17.3 - # - # @return [Boolean] - # - def macos_ruby? - !!(RUBY_PLATFORM =~ /darwin/) - end - - # Determine if the current node is a member of the 'rhel' platform family (Red Hat, CentOS, Oracle or Scientific Linux, but NOT Amazon Linux or Fedora). - # - # @param [Chef::Node] node the node to check - # @since 15.5 - # - # @return [Boolean] - # - def rhel?(node = __getnode) - node["platform_family"] == "rhel" - end - # chef-sugar backcompat method - alias_method :el?, :rhel? - - # Determine if the current node is a rhel6 compatible build (Red Hat, CentOS, Oracle or Scientific Linux). - # - # @param [Chef::Node] node the node to check - # @since 15.5 - # - # @return [Boolean] - # - def rhel6?(node = __getnode) - node["platform_family"] == "rhel" && node["platform_version"].to_f >= 6.0 && node["platform_version"].to_f < 7.0 - end - - # Determine if the current node is a rhel7 compatible build (Red Hat, CentOS, Oracle or Scientific Linux). - # - # @param [Chef::Node] node the node to check - # @since 15.5 - # - # @return [Boolean] - # - def rhel7?(node = __getnode) - node["platform_family"] == "rhel" && node["platform_version"].to_f >= 7.0 && node["platform_version"].to_f < 8.0 - end - - # Determine if the current node is a rhel8 compatible build (Red Hat, CentOS, Oracle or Scientific Linux). - # - # @param [Chef::Node] node the node to check - # @since 15.5 - # - # @return [Boolean] - # - def rhel8?(node = __getnode) - node["platform_family"] == "rhel" && node["platform_version"].to_f >= 8.0 && node["platform_version"].to_f < 9.0 - end - - # Determine if the current node is a member of the 'amazon' platform family. - # - # @param [Chef::Node] node the node to check - # @since 15.5 - # - # @return [Boolean] - # - def amazon?(node = __getnode) - node["platform_family"] == "amazon" - end - # chef-sugar backcompat method - alias_method :amazon_linux?, :amazon? - - # Determine if the current node is a member of the 'solaris2' platform family. - # - # @param [Chef::Node] node the node to check - # @since 15.5 - # - # @return [Boolean] - # - def solaris2?(node = __getnode) - node["platform_family"] == "solaris2" - end - # chef-sugar backcompat method - alias_method :solaris?, :solaris2? - - # Determine if the current node is a member of the 'smartos' platform family. - # - # @param [Chef::Node] node the node to check - # @since 15.5 - # - # @return [Boolean] - # - def smartos?(node = __getnode) - node["platform_family"] == "smartos" - end - - # Determine if the current node is a member of the 'suse' platform family (openSUSE, SLES, and SLED). - # - # @param [Chef::Node] node the node to check - # @since 15.5 - # - # @return [Boolean] - # - def suse?(node = __getnode) - node["platform_family"] == "suse" - end - - # Determine if the current node is a member of the 'gentoo' platform family. - # - # @param [Chef::Node] node the node to check - # @since 15.5 - # - # @return [Boolean] - # - def gentoo?(node = __getnode) - node["platform_family"] == "gentoo" - end - - # Determine if the current node is a member of the 'freebsd' platform family. - # - # @param [Chef::Node] node the node to check - # @since 15.5 - # - # @return [Boolean] - # - def freebsd?(node = __getnode) - node["platform_family"] == "freebsd" - end - - # Determine if the current node is a member of the 'openbsd' platform family. - # - # @param [Chef::Node] node the node to check - # @since 15.5 - # - # @return [Boolean] - # - def openbsd?(node = __getnode) - node["platform_family"] == "openbsd" - end - - # Determine if the current node is a member of the 'netbsd' platform family. - # - # @param [Chef::Node] node the node to check - # @since 15.5 - # - # @return [Boolean] - # - def netbsd?(node = __getnode) - node["platform_family"] == "netbsd" - end - - # Determine if the current node is a member of the 'dragonflybsd' platform family. - # - # @param [Chef::Node] node the node to check - # @since 15.5 - # - # @return [Boolean] - # - def dragonflybsd?(node = __getnode) - node["platform_family"] == "dragonflybsd" - end - - # Determine if the current node is a member of the 'windows' platform family. - # - # @param [Chef::Node] node the node to check - # @since 15.5 - # - # @return [Boolean] - # - def windows?(node = __getnode(true)) - # This is all somewhat complicated. We prefer to get the node object so that chefspec can - # stub the node object. But we also have to deal with class-parsing time where there is - # no node object, so we have to fall back to RUBY_PLATFORM based detection. We cannot pull - # the node object out of the Chef.run_context.node global object here (which is what the - # false flag to __getnode is about) because some run-time code also cannot run under chefspec - # on non-windows where the node is stubbed to windows. - # - # As a result of this the `windows?` helper and the `ChefUtils.windows?` helper do not behave - # the same way in that the latter is not stubbable by chefspec. - # - node ? node["platform_family"] == "windows" : windows_ruby? - end - - # Determine if the Ruby VM is currently running on a Windows node (ChefSpec can never stub - # this behavior, so this is useful for code which can never be parsed on a non-Windows box). - # - # April 2022 - Note that we changed the platform identifier from 'mingw32' to 'mingw' - # We did this because Ruby 3.1 introduces the new universal windows platform of 'x64-mingw-ucrt' - # We updated the existing regex snippet to capture both the 32-bit platform and the new x64 - # universal platform - # - # @since 15.5 - # - # @return [Boolean] - # - def windows_ruby? - !!(RUBY_PLATFORM =~ /mswin|mingw|windows/) - end - - # - # Platform-Family-like Helpers - # - # These are meta-helpers which address the issue that platform_family is single valued and cannot - # be an array while a tree-like Taxonomy is what is called for in some cases. - # - - # If it uses RPM, it goes in here (rhel, fedora, amazon, suse platform_families). Deliberately does not - # include AIX because bff is AIX's primary package manager and adding it here would make this substantially - # less useful since in no way can AIX trace its lineage back to old redhat distros. This is most useful for - # "smells like redhat, including SuSE". - # - # @param [Chef::Node] node the node to check - # @since 15.5 - # - # @return [Boolean] - # - def rpm_based?(node = __getnode) - fedora_derived?(node) || node["platform_family"] == "suse" - end - - # RPM-based distros which are not SuSE and are very loosely similar to fedora, using yum or dnf. The historical - # lineage of the distro should have forked off from old redhat fedora distros at some point. Currently rhel, - # fedora and amazon. This is most useful for "smells like redhat, but isn't SuSE". - # - # @param [Chef::Node] node the node to check - # @since 15.5 - # - # @return [Boolean] - # - def fedora_derived?(node = __getnode) - redhat_based?(node) || node["platform_family"] == "amazon" - end - - # RedHat distros -- fedora and rhel platform_families, nothing else. This is most likely not as useful as the - # "fedora_derived?" helper. - # - # @param [Chef::Node] node the node to check - # @since 15.5 - # - # @return [Boolean] - # - def redhat_based?(node = __getnode) - %w{rhel fedora}.include?(node["platform_family"]) - end - - # All of the Solaris-lineage. - # - # @param [Chef::Node] node the node to check - # @since 15.5 - # - # @return [Boolean] - # - def solaris_based?(node = __getnode) - %w{solaris2 smartos omnios openindiana}.include?(node["platform"]) - end - - # All of the BSD-lineage. - # - # Note that macOS is not included since macOS deviates so significantly from BSD that including it would not be useful. - # - # @param [Chef::Node] node the node to check - # @since 15.5 - # - # @return [Boolean] - # - def bsd_based?(node = __getnode) - # we could use os, platform_family or platform here equally - %w{netbsd freebsd openbsd dragonflybsd}.include?(node["platform"]) - end - - extend self - end - end -end diff --git a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/dsl/platform_version.rb b/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/dsl/platform_version.rb deleted file mode 100644 index 33a534c5..00000000 --- a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/dsl/platform_version.rb +++ /dev/null @@ -1,41 +0,0 @@ -# frozen_string_literal: true -# -# Copyright:: Copyright (c) Chef Software Inc. -# License:: Apache License, Version 2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -require_relative "../internal" - -module ChefUtils - module DSL - module PlatformVersion - include Internal - - # Return the platform_version for the node. Acts like a String - # but also provides a mechanism for checking version constraints. - # - # @param [Chef::Node] node the node to check - # @since 15.8 - # - # @return [ChefUtils::VersionString] - # - def platform_version(node = __getnode) - ChefUtils::VersionString.new(node["platform_version"]) - end - - extend self - end - end -end diff --git a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/dsl/service.rb b/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/dsl/service.rb deleted file mode 100644 index 4dedc8b8..00000000 --- a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/dsl/service.rb +++ /dev/null @@ -1,112 +0,0 @@ -# frozen_string_literal: true -# -# Copyright:: Copyright (c) Chef Software Inc. -# License:: Apache License, Version 2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -require_relative "../internal" -require_relative "train_helpers" - -module ChefUtils - module DSL - # NOTE: these are mixed into the service resource+providers specifically and deliberately not - # injected into the global namespace - module Service - include Internal - include TrainHelpers - include Introspection - - # Returns if debian's old rc.d manager is installed (not necessarily the primary init system). - # - # @since 15.5 - # - # @return [Boolean] - # - def debianrcd? - file_exist?("/usr/sbin/update-rc.d") - end - - # Returns if debian's old invoke rc.d manager is installed (not necessarily the primary init system). - # - # @since 15.5 - # - # @return [Boolean] - # - def invokercd? - file_exist?("/usr/sbin/invoke-rc.d") - end - - # Returns if upstart is installed (not necessarily the primary init system). - # - # @since 15.5 - # - # @return [Boolean] - # - def upstart? - file_exist?("/sbin/initctl") - end - - # Returns if insserv is installed (not necessarily the primary init system). - # - # @since 15.5 - # - # @return [Boolean] - # - def insserv? - file_exist?("/sbin/insserv") - end - - # Returns if redhat's init system is installed (not necessarily the primary init system). - # - # @since 15.5 - # - # @return [Boolean] - # - def redhatrcd? - file_exist?("/sbin/chkconfig") - end - - # - # Returns if a particular service exists for a particular service init system. Init systems may be :initd, :upstart, :etc_rcd, :xinetd, and :systemd. Example: service_script_exist?(:systemd, 'ntpd') - # - # @param [Symbol] type The type of init system. :initd, :upstart, :xinetd, :etc_rcd, or :systemd - # @param [String] script The name of the service - # @since 15.5 - # - # @return [Boolean] - # - def service_script_exist?(type, script) - case type - when :initd - file_exist?("/etc/init.d/#{script}") - when :upstart - file_exist?("/etc/init/#{script}.conf") - when :xinetd - file_exist?("/etc/xinetd.d/#{script}") - when :etc_rcd - file_exist?("/etc/rc.d/#{script}") - when :systemd - file_exist?("/etc/init.d/#{script}") || - has_systemd_service_unit?(script) || - has_systemd_unit?(script) - else - raise ArgumentError, "type of service must be one of :initd, :upstart, :xinetd, :etc_rcd, or :systemd" - end - end - - extend self - end - end -end diff --git a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/dsl/train_helpers.rb b/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/dsl/train_helpers.rb deleted file mode 100644 index 8cc676d3..00000000 --- a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/dsl/train_helpers.rb +++ /dev/null @@ -1,87 +0,0 @@ -# frozen_string_literal: true -# -# Copyright:: Copyright (c) Chef Software Inc. -# License:: Apache License, Version 2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -require "stringio" unless defined?(StringIO) -require_relative "../internal" - -module ChefUtils - module DSL - module TrainHelpers - include Internal - - # - # FIXME: generally these helpers all use the pattern of checking for target_mode? - # and then if it is we use train. That approach should likely be flipped so that - # even when we're running without target mode we still use train in its local - # mode. A prerequisite for that will be better CI testing of train against - # chef-client though, and ensuring that the APIs are entirely compatible. This - # will be particularly problematic for shell_out APIs and eventual file-creating - # APIs which are unlikely to be as sophisticated as the exiting code in chef-client - # for locally shelling out and creating files, and just dropping inspec local mode - # into chef-client would break the world. - # - - # Train wrapper around File.exist? to make it local mode aware. - # - # @param filename filename to check - # @return [Boolean] if it exists - # - def file_exist?(filename) - if __transport_connection - __transport_connection.file(filename).exist? - else - File.exist?(filename) - end - end - - # XXX: modifications to the StringIO won't get written back - # FIXME: this is very experimental and may be a bad idea and may break at any time - # @api private - # - def file_open(*args, &block) - if __transport_connection - content = __transport_connection.file(args[0]).content - string_io = StringIO.new content - yield string_io if block_given? - string_io - else - File.open(*args, &block) - end - end - - # Alias to easily convert IO.read / File.read to file_read - def file_read(path) - file_open(path).read - end - - def file_directory?(path) - if __transport_connection - __transport_connection.file(filename).directory? - else - File.directory?(path) - end - end - - # Alias to easily convert Dir.exist to dir_exist - def dir_exist?(path) - file_directory?(path) - end - - extend self - end - end -end diff --git a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/dsl/virtualization.rb b/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/dsl/virtualization.rb deleted file mode 100644 index 599651c6..00000000 --- a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/dsl/virtualization.rb +++ /dev/null @@ -1,272 +0,0 @@ -# frozen_string_literal: true -# -# Copyright:: Copyright (c) Chef Software Inc. -# License:: Apache License, Version 2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -require_relative "../internal" - -module ChefUtils - module DSL - module Virtualization - include Internal - - # Determine if the current node is a KVM guest. - # - # @param [Chef::Node] node - # @since 15.8 - # - # @return [Boolean] - # - def kvm?(node = __getnode) - node.dig("virtualization", "system") == "kvm" && node.dig("virtualization", "role") == "guest" - end - - # Determine if the current node is a KVM host. - # - # @param [Chef::Node] node - # @since 15.8 - # - # @return [Boolean] - # - def kvm_host?(node = __getnode) - node.dig("virtualization", "system") == "kvm" && node.dig("virtualization", "role") == "host" - end - - # Determine if the current node is running in a linux container. - # - # @param [Chef::Node] node - # @since 15.8 - # - # @return [Boolean] - # - def lxc?(node = __getnode) - node.dig("virtualization", "system") == "lxc" && node.dig("virtualization", "role") == "guest" - end - - # Determine if the current node is a linux container host. - # - # @param [Chef::Node] node - # @since 15.8 - # - # @return [Boolean] - # - def lxc_host?(node = __getnode) - node.dig("virtualization", "system") == "lxc" && node.dig("virtualization", "role") == "host" - end - - # Determine if the current node is running under Parallels Desktop. - # - # @param [Chef::Node] node - # @since 15.8 - # - # @return [Boolean] - # true if the machine is currently running under Parallels Desktop, false - # otherwise - # - def parallels?(node = __getnode) - node.dig("virtualization", "system") == "parallels" && node.dig("virtualization", "role") == "guest" - end - - # Determine if the current node is a Parallels Desktop host. - # - # @param [Chef::Node] node - # @since 15.8 - # - # @return [Boolean] - # true if the machine is currently running under Parallels Desktop, false - # otherwise - # - def parallels_host?(node = __getnode) - node.dig("virtualization", "system") == "parallels" && node.dig("virtualization", "role") == "host" - end - - # Determine if the current node is a VirtualBox guest. - # - # @param [Chef::Node] node - # @since 15.8 - # - # @return [Boolean] - # - def vbox?(node = __getnode) - node.dig("virtualization", "system") == "vbox" && node.dig("virtualization", "role") == "guest" - end - - # Determine if the current node is a VirtualBox host. - # - # @param [Chef::Node] node - # @since 15.8 - # - # @return [Boolean] - # - def vbox_host?(node = __getnode) - node.dig("virtualization", "system") == "vbox" && node.dig("virtualization", "role") == "host" - end - - # chef-sugar backcompat method - alias_method :virtualbox?, :vbox? - - # Determine if the current node is a VMWare guest. - # - # @param [Chef::Node] node - # @since 15.8 - # - # @return [Boolean] - # - def vmware?(node = __getnode) - node.dig("virtualization", "system") == "vmware" && node.dig("virtualization", "role") == "guest" - end - - # Determine if the current node is VMware host. - # - # @param [Chef::Node] node - # @since 15.8 - # - # @return [Boolean] - # - def vmware_host?(node = __getnode) - node.dig("virtualization", "system") == "vmware" && node.dig("virtualization", "role") == "host" - end - - # Determine if the current node is virtualized on VMware Desktop (Fusion/Player/Workstation). - # - # @param [Chef::Node] node - # @since 17.9 - # - # @return [Boolean] - # - def vmware_desktop?(node = __getnode) - node.dig("virtualization", "system") == "vmware" && node.dig("vmware", "host", "type") == "vmware_desktop" - end - - # Determine if the current node is virtualized on VMware vSphere (ESX). - # - # @param [Chef::Node] node - # @since 17.9 - # - # @return [Boolean] - # - def vmware_vsphere?(node = __getnode) - node.dig("virtualization", "system") == "vmware" && node.dig("vmware", "host", "type") == "vmware_vsphere" - end - - # Determine if the current node is an openvz guest. - # - # @param [Chef::Node] node - # @since 15.8 - # - # @return [Boolean] - # - def openvz?(node = __getnode) - node.dig("virtualization", "system") == "openvz" && node.dig("virtualization", "role") == "guest" - end - - # Determine if the current node is an openvz host. - # - # @param [Chef::Node] node - # @since 15.8 - # - # @return [Boolean] - # - def openvz_host?(node = __getnode) - node.dig("virtualization", "system") == "openvz" && node.dig("virtualization", "role") == "host" - end - - # Determine if the current node is running under any virtualization environment - # - # @param [Chef::Node] node - # @since 15.8 - # - # @return [Boolean] - # - def guest?(node = __getnode) - node.dig("virtualization", "role") == "guest" - end - - # chef-sugar backcompat method - alias_method :virtual?, :guest? - - # Determine if the current node supports running guests under any virtualization environment - # - # @param [Chef::Node] node - # @since 15.8 - # - # @return [Boolean] - # - def hypervisor?(node = __getnode) - node.dig("virtualization", "role") == "host" - end - - # Determine if the current node is NOT running under any virtualization environment (bare-metal or hypervisor on metal) - # - # @param [Chef::Node] node - # @since 15.8 - # - # @return [Boolean] - # - def physical?(node = __getnode) - !virtual?(node) - end - - # Determine if the current node is running as a vagrant guest. - # - # Note that this API is equivalent to just looking for the vagrant user or the - # vagrantup.com domain in the hostname, which is the best API we have. - # - # @param [Chef::Node] node - # @since 15.8 - # - # @return [Boolean] - # true if the machine is currently running vagrant, false - # otherwise - # - def vagrant?(node = __getnode) - vagrant_key?(node) || vagrant_domain?(node) || vagrant_user?(node) - end - - private - - # Check if the +vagrant+ key exists on the +node+ object. This key is no - # longer populated by vagrant, but it is kept around for legacy purposes. - # - # @param (see vagrant?) - # @return (see vagrant?) - # - def vagrant_key?(node = __getnode) - node.key?("vagrant") - end - - # Check if "vagrantup.com" is included in the node's domain. - # - # @param (see vagrant?) - # @return (see vagrant?) - # - def vagrant_domain?(node = __getnode) - node.key?("domain") && !node["domain"].nil? && node["domain"].include?("vagrantup.com") - end - - # Check if the system contains a +vagrant+ user. - # - # @param (see vagrant?) - # @return (see vagrant?) - # - def vagrant_user?(node = __getnode) - !!(Etc.getpwnam("vagrant") rescue nil) - end - - extend self - end - end -end diff --git a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/dsl/which.rb b/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/dsl/which.rb deleted file mode 100644 index 49779f92..00000000 --- a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/dsl/which.rb +++ /dev/null @@ -1,123 +0,0 @@ -# frozen_string_literal: true -# -# Copyright:: Copyright (c) Chef Software Inc. -# License:: Apache License, Version 2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -require_relative "../internal" - -module ChefUtils - module DSL - module Which - include Internal - - # Lookup an executable through the systems search PATH. Allows specifying an array - # of executables to look for. The first executable that is found, along any path entry, - # will be the preferred one and returned first. The extra_path will override any default - # extra_paths which are added (allowing the user to pass an empty array to remove them). - # - # When passed a block the block will be called with the full pathname of any executables - # which are found, and the block should return truthy or falsey values to further filter - # the executable based on arbitrary criteria. - # - # This is syntactic sugar for `where(...).first` - # - # This helper can be used in target mode in chef or with train using the appropriate - # wiring externally. - # - # @example Find the most appropriate python executable, searching through the system PATH - # plus additionally the "/usr/libexec" directory, which has the dnf libraries - # installed and available. - # - # cmd = which("platform-python", "python", "python3", "python2", "python2.7", extra_path: "/usr/libexec") do |f| - # shell_out("#{f} -c 'import dnf'").exitstatus == 0 - # end - # - # @param [Array] list of commands to search for - # @param [String,Array] array of extra paths to search through - # @return [String] the first match - # - def which(*cmds, extra_path: nil, &block) - where(*cmds, extra_path: extra_path, &block).first || false - end - - # Lookup all the instances of an an executable that can be found through the systems search PATH. - # Allows specifying an array of executables to look for. All the instances of the first executable - # that is found will be returned first. The extra_path will override any default extra_paths - # which are added (allowing the user to pass an empty array to remove them). - # - # When passed a block the block will be called with the full pathname of any executables - # which are found, and the block should return truthy or falsey values to further filter - # the executable based on arbitrary criteria. - # - # This helper can be used in target mode in chef or with train using the appropriate - # wiring externally. - # - # @example Find all the python executables, searching through the system PATH plus additionally - # the "/usr/libexec" directory, which have the dnf libraries installed and available. - # - # cmds = where("platform-python", "python", "python3", "python2", "python2.7", extra_path: "/usr/libexec") do |f| - # shell_out("#{f} -c 'import dnf'").exitstatus == 0 - # end - # - # @param [Array] list of commands to search for - # @param [String,Array] array of extra paths to search through - # @return [String] the first match - # - def where(*cmds, extra_path: nil, &block) - extra_path ||= __extra_path - paths = __env_path.split(File::PATH_SEPARATOR) + Array(extra_path) - paths.uniq! - exts = ENV["PATHEXT"] ? ENV["PATHEXT"].split(";") : [] - exts.unshift("") - cmds.map do |cmd| - paths.map do |path| - exts.map do |ext| - filename = File.join(path, "#{cmd}#{ext}") - filename if __valid_executable?(filename, &block) - end.compact - end - end.flatten - end - - private - - # This is for injecting common extra_paths into the search PATH. The chef-client codebase overrides this into its - # own custom mixin to ensure that /usr/sbin, /sbin, etc are in the search PATH for chef-client. - # - # @api private - def __extra_path - nil - end - - # Windows compatible and train/target-mode-enhanced helper to determine if an executable is valid. - # - # @api private - def __valid_executable?(filename, &block) - is_executable = - if __transport_connection - __transport_connection.file(filename).stat[:mode] & 1 && !__transport_connection.file(filename).directory? - else - File.executable?(filename) && !File.directory?(filename) - end - return false unless is_executable - - block ? yield(filename) : true - end - - extend self - end - end -end diff --git a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/dsl/windows.rb b/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/dsl/windows.rb deleted file mode 100644 index be6a5c4b..00000000 --- a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/dsl/windows.rb +++ /dev/null @@ -1,86 +0,0 @@ -# frozen_string_literal: true -# -# Copyright:: Copyright (c) Chef Software Inc. -# License:: Apache License, Version 2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -require_relative "../internal" - -module ChefUtils - module DSL - module Windows - require_relative "../version_string" - - include Internal - - # Determine if the current node is Windows Server Core. - # - # @param [Chef::Node] node the node to check - # @since 15.7 - # - # @return [Boolean] - # - def windows_server_core?(node = __getnode) - node["kernel"]["server_core"] == true - end - - # Determine if the current node is Windows Workstation. - # - # @param [Chef::Node] node the node to check - # @since 15.7 - # - # @return [Boolean] - # - def windows_workstation?(node = __getnode) - node["kernel"]["product_type"] == "Workstation" - end - - # Determine if the current node is Windows Server. - # - # @param [Chef::Node] node the node to check - # @since 15.7 - # - # @return [Boolean] - # - def windows_server?(node = __getnode) - node["kernel"]["product_type"] == "Server" - end - - # Determine the current Windows NT version. The NT version often differs from the marketing version, but offers a good way to find desktop and server releases that are based on the same codebase. For example NT 6.3 corresponds to Windows 8.1 and Windows 2012 R2. - # - # @param [Chef::Node] node the node to check - # @since 15.8 - # - # @return [ChefUtils::VersionString] - # - def windows_nt_version(node = __getnode) - ChefUtils::VersionString.new(node["os_version"]) - end - - # Determine the installed version of PowerShell. - # - # @param [Chef::Node] node the node to check - # @since 15.8 - # - # @return [ChefUtils::VersionString] - # - def powershell_version(node = __getnode) - ChefUtils::VersionString.new(node["languages"]["powershell"]["version"]) - end - - extend self - end - end -end diff --git a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/internal.rb b/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/internal.rb deleted file mode 100644 index 0699618a..00000000 --- a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/internal.rb +++ /dev/null @@ -1,114 +0,0 @@ -# frozen_string_literal: true -# -# Copyright:: Copyright (c) Chef Software Inc. -# License:: Apache License, Version 2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -module ChefUtils - # - # This is glue code to make the helpers work when called as ChefUtils.helper? from inside of chef-client. - # - # This also is glue code to make the helpers work when mixed into classes that have node/run_context methods that - # provide those objects. - # - # It should not be assumed that any of this code runs from within chef-client and that the - # Chef class or run_context, etc exists. - # - # This gem may be used by gems like mixlib-shellout which can be consumed by external non-Chef utilities, - # so including brittle code here which depends on the existence of the chef-client will cause broken - # behavior downstream. You must practice defensive coding, and not make assumptions about running within chef-client. - # - # Other consumers may mix in the helper classes and then override the methods here and provide their own custom - # wiring and override what is provided here. They are marked as private because no downstream user should ever touch - # them -- they are intended to be subclassable and overridable by Chef developers in other projects. Chef Software - # reserves the right to change the implementation details of this class in minor revs which is what "api private" means, - # so external persons should subclass and override only when necessary (submit PRs and issues upstream if this is a problem). - # - module Internal - extend self - - private - - # This should be set to a Chef::Node instance or to some Hash/Mash-like configuration object with the same keys. It needs to - # expose keys like `:os`, `:platform`, `:platform_version` and `:platform_family` at least to be useful. It will automatically - # pick up a `node` method when mixed into an object that has that as a method (which is the encouraged "public" API to use - # for dependency injection rather than overriding the method in this case. - # - # @return [Hash] hash-like config object - # - # @api private - def __getnode(skip_global = false) - # Software developers should feel free to rely on the default wiring here to the node method by implementing the node method in their - # own class. For anything more complicated they should completely override the method (overriding the whole method is never wrong and - # is safer). - return node if respond_to?(:node) && node - - return run_context&.node if respond_to?(:run_context) && run_context&.node - - unless skip_global - return Chef.run_context&.node if defined?(Chef) && Chef.respond_to?(:run_context) && Chef.run_context&.node - end - - nil - end - - # Just a helper to pull the ENV["PATH"] in a train-independent way - # - # @api private - # - def __env_path - if __transport_connection - __transport_connection.run_command("echo $PATH").stdout.chomp || "" - else - ENV["PATH"] || "" - end - end - - # This should be set to a Train::Plugins::Transport instance. You should wire this up to nil for not using a train transport connection. - # - # @return [Train::Plugins::Transport] - # - # @api private - # - def __transport_connection - # Software consumers MUST override this method with their own implementation. The default behavior here is subject to change. - return Chef.run_context.transport_connection if defined?(Chef) && Chef.respond_to?(:run_context) && Chef&.run_context&.transport_connection - - nil - end - - # This should be set to Chef::Config or to some Hash/Mash-like configuration object with the same keys. It must not be nil. - # - # @return [Hash] hash-like config object - # - # @api private - # - def __config - raise NotImplementedError - end - - # This should be set to Chef::Log or something that duck-types like it. It must not be nil. - # - # @return [Chef::Log] logger-like logging object - # - # @api private - # - def __log - raise NotImplementedError - end - - extend self - end -end diff --git a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/mash.rb b/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/mash.rb deleted file mode 100644 index 14159d17..00000000 --- a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/mash.rb +++ /dev/null @@ -1,263 +0,0 @@ -# frozen_string_literal: true -# Copyright 2009-2016, Dan Kubb - -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: - -# The above copyright notice and this permission notice shall be -# included in all copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -# --- -# --- - -# Some portions of blank.rb and mash.rb are verbatim copies of software -# licensed under the MIT license. That license is included below: - -# Copyright 2005-2016, David Heinemeier Hansson - -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: - -# The above copyright notice and this permission notice shall be -# included in all copies or substantial portions of the Software. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -# This class has dubious semantics and we only have it so that people can write -# params[:key] instead of params['key']. -module ChefUtils - class Mash < Hash - - # @param constructor - # The default value for the mash. Defaults to an empty hash. - # - # @details [Alternatives] - # If constructor is a Hash, a new mash will be created based on the keys of - # the hash and no default value will be set. - def initialize(constructor = {}) - if constructor.is_a?(Hash) - super() - update(constructor) - else - super(constructor) - end - end - - # @param orig Mash being copied - # - # @return [Object] A new copied Mash - def initialize_copy(orig) - super - # Handle nested values - each do |k, v| - if v.is_a?(Mash) || v.is_a?(Array) - self[k] = v.dup - end - end - self - end - - # @param key The default value for the mash. Defaults to nil. - # - # @details [Alternatives] - # If key is a Symbol and it is a key in the mash, then the default value will - # be set to the value matching the key. - def default(key = nil) - if key.is_a?(Symbol) && include?(key = key.to_s) - self[key] - else - super - end - end - - unless method_defined?(:regular_reader) - alias_method :regular_reader, :[] - end - - unless method_defined?(:regular_writer) - alias_method :regular_writer, :[]= - end - - unless method_defined?(:regular_update) - alias_method :regular_update, :update - end - - unless method_defined?(:regular_clear) - alias_method :regular_clear, :clear - end - - unless method_defined?(:regular_delete) - alias_method :regular_delete, :delete - end - - # @param key The key to get. - def [](key) - regular_reader(key) - end - - # @param key The key to set. - # @param value - # The value to set the key to. - # - # @see Mash#convert_key - # @see Mash#convert_value - def []=(key, value) - regular_writer(convert_key(key), convert_value(value)) - end - - # internal API for use by Chef's deep merge cache - # @api private - def internal_get(key) - regular_reader(key) - end - - # internal API for use by Chef's deep merge cache - # @api private - def internal_set(key, value) - regular_writer(key, convert_value(value)) - end - - # @param other_hash - # A hash to update values in the mash with. The keys and the values will be - # converted to Mash format. - # - # @return [Mash] The updated mash. - def update(other_hash) - other_hash.each_pair { |key, value| regular_writer(convert_key(key), convert_value(value)) } - self - end - - alias_method :merge!, :update - - # @param key The key to check for. This will be run through convert_key. - # - # @return [Boolean] True if the key exists in the mash. - def key?(key) - super(convert_key(key)) - end - - # def include? def has_key? def member? - alias_method :include?, :key? - alias_method :has_key?, :key? - alias_method :member?, :key? - - # @param key The key to fetch. This will be run through convert_key. - # @param *extras Default value. - # - # @return [Object] The value at key or the default value. - def fetch(key, *extras) - super(convert_key(key), *extras) - end - - # @param *indices - # The keys to retrieve values for. These will be run through +convert_key+. - # - # @return [Array] The values at each of the provided keys - def values_at(*indices) - indices.collect { |key| self[convert_key(key)] } - end - - # @param hash The hash to merge with the mash. - # - # @return [Mash] A new mash with the hash values merged in. - def merge(hash) - dup.update(hash) - end - - # @param key - # The key to delete from the mash.\ - def delete(key) - super(convert_key(key)) - end - - # @param *rejected 1, :two => 2, :three => 3 }.except(:one) - # #=> { "two" => 2, "three" => 3 } - def except(*keys) - super(*keys.map { |k| convert_key(k) }) - end - - # Used to provide the same interface as Hash. - # - # @return [Mash] This mash unchanged. - def stringify_keys!; self end - - # @return [Hash] The mash as a Hash with symbolized keys. - def symbolize_keys - h = Hash.new(default) - each { |key, val| h[key.to_sym] = val } - h - end - - # @return [Hash] The mash as a Hash with string keys. - def to_hash - Hash.new(default).merge(self) - end - - # @return [Mash] Convert a Hash into a Mash - # The input Hash's default value is maintained - def self.from_hash(hash) - mash = Mash.new(hash) - mash.default = hash.default - mash - end - - protected - - # @param key The key to convert. - # - # @param [Object] - # The converted key. If the key was a symbol, it will be converted to a - # string. - # - # @api private - def convert_key(key) - key.is_a?(Symbol) ? key.to_s : key - end - - # @param value The value to convert. - # - # @return [Object] - # The converted value. A Hash or an Array of hashes, will be converted to - # their Mash equivalents. - # - # @api private - def convert_value(value) - if value.class == Hash - Mash.from_hash(value) - elsif value.is_a?(Array) - value.collect { |e| convert_value(e) } - else - value - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/parallel_map.rb b/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/parallel_map.rb deleted file mode 100644 index 3c1be220..00000000 --- a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/parallel_map.rb +++ /dev/null @@ -1,131 +0,0 @@ -# frozen_string_literal: true -# -# Copyright:: Copyright (c) Chef Software Inc. -# License:: Apache License, Version 2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -require "concurrent/executors" -require "concurrent/future" -require "singleton" unless defined?(Singleton) - -module ChefUtils - # - # This module contains ruby refinements that adds several methods to the Enumerable - # class which are useful for parallel processing. - # - module ParallelMap - refine Enumerable do - - # Enumerates through the collection in parallel using the thread pool provided - # or the default thread pool. By using the default thread pool this supports - # recursively calling the method without deadlocking while using a globally - # fixed number of workers. This method supports lazy collections. It returns - # synchronously, waiting until all the work is done. Failures are only reported - # after the collection has executed and only the first exception is raised. - # - # (0..).lazy.parallel_map { |i| i*i }.first(5) - # - # @return [Array] output results - # - def parallel_map(pool: nil) - return self unless block_given? - - pool ||= ChefUtils::DefaultThreadPool.instance.pool - - futures = map do |item| - Concurrent::Future.execute(executor: pool) do - yield item - end - end - - futures.map(&:value!) - end - - # This has the same behavior as parallel_map but returns the enumerator instead of - # the return values. - # - # @return [Enumerable] the enumerable for method chaining - # - def parallel_each(pool: nil, &block) - return self unless block_given? - - parallel_map(pool: pool, &block) - - self - end - - # The flat_each method is tightly coupled to the usage of parallel_map within the - # ChefFS implementation. It is not itself a parallel method, but it is used to - # iterate through the 2nd level of nested structure, which is tied to the nested - # structures that ChefFS returns. - # - # This is different from Enumerable#flat_map because that behaves like map.flatten(1) while - # this behaves more like flatten(1).each. We need this on an Enumerable, so we have no - # Enumerable#flatten method to call. - # - # [ [ 1, 2 ], [ 3, 4 ] ].flat_each(&block) calls block four times with 1, 2, 3, 4 - # - # [ [ 1, 2 ], [ 3, 4 ] ].flat_map(&block) calls block twice with [1, 2] and [3,4] - # - def flat_each(&block) - map do |value| - if value.is_a?(Enumerable) - value.each(&block) - else - yield value - end - end - end - end - end - - # The DefaultThreadPool has a fixed thread size and has no - # queue of work and the behavior on failure to find a thread is for the - # caller to run the work. This contract means that the thread pool can - # be called recursively without deadlocking and while keeping the fixed - # number of threads (and not exponentially growing the thread pool with - # the depth of recursion). - # - class DefaultThreadPool - include Singleton - - DEFAULT_THREAD_SIZE = 10 - - # Size of the thread pool, must be set before getting the thread pool or - # calling parallel_map/parallel_each. Does not (but could be modified to) - # support dynamic resizing. To get fully synchronous behavior set this equal to - # zero rather than one since the caller will get work if the threads are - # busy. - # - # @return [Integer] number of threads - attr_accessor :threads - - # Memoizing accessor for the thread pool - # - # @return [Concurrent::ThreadPoolExecutor] the thread pool - def pool - @pool ||= Concurrent::ThreadPoolExecutor.new( - min_threads: threads || DEFAULT_THREAD_SIZE, - max_threads: threads || DEFAULT_THREAD_SIZE, - max_queue: 0, - # "synchronous" redefines the 0 in max_queue to mean 'no queue' instead of 'infinite queue' - # it does not mean synchronous execution (no threads) but synchronous offload to the threads. - synchronous: true, - # this prevents deadlocks on recursive parallel usage - fallback_policy: :caller_runs - ) - end - end -end diff --git a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/version.rb b/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/version.rb deleted file mode 100644 index a49e7b95..00000000 --- a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/version.rb +++ /dev/null @@ -1,20 +0,0 @@ -# frozen_string_literal: true -# Copyright:: Copyright (c) Chef Software Inc. -# License:: Apache License, Version 2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -module ChefUtils - CHEFUTILS_ROOT = File.expand_path("..", __dir__) - VERSION = "18.4.2" -end diff --git a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/version_string.rb b/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/version_string.rb deleted file mode 100644 index 425fe5b0..00000000 --- a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/lib/chef-utils/version_string.rb +++ /dev/null @@ -1,160 +0,0 @@ -# frozen_string_literal: true -# Copyright:: Copyright 2017, Noah Kantrowitz -# License:: Apache License, Version 2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -module ChefUtils - # String-like object for version strings. - # - # @since 13.2 - # @api internal - class VersionString < String - # Parsed version object for the string. - # @return [Gem::Version] - attr_reader :parsed_version - - # Create a new VersionString from an input String. - # - # @param val [String] Version string to parse. - def initialize(val) - val ||= "" - super(val) - begin - @parsed_version = ::Gem::Version.create(self) - rescue ArgumentError - @parsed_version = nil - end - end - - # @!group Compat wrappers for String - - # Compat wrapper for + to behave like a normal String. - # - # @param other [String] - # @return [String] - def +(other) - to_s + other - end - - # Compat wrapper for * to behave like a normal String. - # - # @param other [Integer] - # @return [String] - def *(other) - to_s * other - end - - # @!group Comparison operators - - # Compare a VersionString to an object. If compared to another VersionString - # then sort like `Gem::Version`, otherwise try to treat the other object as - # a version but fall back to normal string comparison. - # - # @param other [Object] - # @return [Integer] - def <=>(other) - other_ver = case other - when VersionString - other.parsed_version - else - begin - Gem::Version.create(other.to_s) - rescue ArgumentError - # Comparing to a string that isn't a version. - return super - end - end - parsed_version <=> other_ver - end - - # Compat wrapper for == based on <=>. - # - # @param other [Object] - # @return [Boolean] - def ==(other) - (self <=> other) == 0 - end - - # Compat wrapper for != based on <=>. - # - # @param other [Object] - # @return [Boolean] - def !=(other) - (self <=> other) != 0 - end - - # Compat wrapper for < based on <=>. - # - # @param other [Object] - # @return [Boolean] - def <(other) - (self <=> other) < 0 - end - - # Compat wrapper for <= based on <=>. - # - # @param other [Object] - # @return [Boolean] - def <=(other) - (self <=> other) < 1 - end - - # Compat wrapper for > based on <=>. - # - # @param other [Object] - # @return [Boolean] - def >(other) - (self <=> other) > 0 - end - - # Compat wrapper for >= based on <=>. - # - # @param other [Object] - # @return [Boolean] - def >=(other) - (self <=> other) > -1 - end - - # @!group Matching operators - - # Matching operator to support checking against a requirement string. - # - # @param other [Regexp, String] - # @return [Boolean] - # @example Match against a Regexp - # ChefUtils::VersionString.new('1.0.0') =~ /^1/ - # @example Match against a requirement - # ChefUtils::VersionString.new('1.0.0') =~ '~> 1.0' - def =~(other) - case other - when Regexp - super - else - begin - Gem::Requirement.create(other) =~ parsed_version - rescue ArgumentError - # one side of the comparison wasn't parsable - super - end - end - end - - # Back-compat API for chef-sugar. The other APIs are preferable. - # - # @api private - def satisfies?(*constraints) - Gem::Requirement.new(*constraints).satisfied_by?(@parsed_version) - end - end -end diff --git a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/spec/spec_helper.rb b/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/spec/spec_helper.rb deleted file mode 100644 index da4fe0a0..00000000 --- a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/spec/spec_helper.rb +++ /dev/null @@ -1,100 +0,0 @@ -# frozen_string_literal: true -require "chef-utils" - -# FIXME: dynamically generate this for accuracy -HELPER_MODULES = [ - ChefUtils::DSL::Architecture, - ChefUtils::DSL::Cloud, - ChefUtils::DSL::Introspection, - ChefUtils::DSL::OS, - ChefUtils::DSL::DefaultPaths, - ChefUtils::DSL::Platform, - ChefUtils::DSL::PlatformFamily, - ChefUtils::DSL::Service, - ChefUtils::DSL::Virtualization, - ChefUtils::DSL::Which, - ChefUtils::DSL::Windows, -].freeze - -ARCH_HELPERS = (ChefUtils::DSL::Architecture.methods - Module.methods).freeze -CLOUD_HELPERS = (ChefUtils::DSL::Cloud.methods - Module.methods).freeze -INTROSPECTION_HELPERS = (ChefUtils::DSL::Introspection.methods - Module.methods).freeze -OS_HELPERS = (ChefUtils::DSL::OS.methods - Module.methods).freeze -PLATFORM_FAMILY_HELPERS = (ChefUtils::DSL::PlatformFamily.methods - Module.methods).freeze -PLATFORM_HELPERS = (ChefUtils::DSL::Platform.methods - Module.methods).freeze -VIRTUALIZATION_HELPERS = (ChefUtils::DSL::Virtualization.methods - Module.methods).freeze -WINDOWS_HELPERS = (ChefUtils::DSL::Windows.methods - Module.methods).freeze - -# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration -RSpec.configure do |config| - # rspec-expectations config goes here. You can use an alternate - # assertion/expectation library such as wrong or the stdlib/minitest - # assertions if you prefer. - config.expect_with :rspec do |expectations| - # This option will default to `true` in RSpec 4. It makes the `description` - # and `failure_message` of custom matchers include text for helper methods - # defined using `chain`, e.g.: - # be_bigger_than(2).and_smaller_than(4).description - # # => "be bigger than 2 and smaller than 4" - # ...rather than: - # # => "be bigger than 2" - expectations.include_chain_clauses_in_custom_matcher_descriptions = true - end - - # rspec-mocks config goes here. You can use an alternate test double - # library (such as bogus or mocha) by changing the `mock_with` option here. - config.mock_with :rspec do |mocks| - # Prevents you from mocking or stubbing a method that does not exist on - # a real object. This is generally recommended, and will default to - # `true` in RSpec 4. - mocks.verify_partial_doubles = true - end - - # These two settings work together to allow you to limit a spec run - # to individual examples or groups you care about by tagging them with - # `:focus` metadata. When nothing is tagged with `:focus`, all examples - # get run. - config.filter_run :focus - config.run_all_when_everything_filtered = true - - config.filter_run_excluding windows_only: true unless ChefUtils.windows? - config.filter_run_excluding unix_only: true if ChefUtils.windows? - - # Limits the available syntax to the non-monkey patched syntax that is - # recommended. For more details, see: - # - http://myronmars.to/n/dev-blog/2012/06/rspecs-new-expectation-syntax - # - http://teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/ - # - http://myronmars.to/n/dev-blog/2014/05/notable-changes-in-rspec-3#new__config_option_to_disable_rspeccore_monkey_patching - config.disable_monkey_patching! - - # This setting enables warnings. It's recommended, but in some cases may - # be too noisy due to issues in dependencies. - config.warnings = true - - # Many RSpec users commonly either run the entire suite or an individual - # file, and it's useful to allow more verbose output when running an - # individual spec file. - if config.files_to_run.one? - # Use the documentation formatter for detailed output, - # unless a formatter has already been configured - # (e.g. via a command-line flag). - config.default_formatter = "doc" - end - - # Print the 10 slowest examples and example groups at the - # end of the spec run, to help surface which specs are running - # particularly slow. - # config.profile_examples = 10 - - # Run specs in random order to surface order dependencies. If you find an - # order dependency and want to debug it, you can fix the order by providing - # the seed, which is printed after each run. - # --seed 1234 - config.order = :random - - # Seed global randomization in this process using the `--seed` CLI option. - # Setting this allows you to use `--seed` to deterministically reproduce - # test failures related to randomization by passing the same `--seed` value - # as the one that triggered the failure. - Kernel.srand config.seed -end diff --git a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/spec/unit/dsl/architecture_spec.rb b/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/spec/unit/dsl/architecture_spec.rb deleted file mode 100644 index a5336d05..00000000 --- a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/spec/unit/dsl/architecture_spec.rb +++ /dev/null @@ -1,151 +0,0 @@ -# frozen_string_literal: true -# -# Copyright:: Copyright (c) Chef Software Inc. -# License:: Apache License, Version 2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -require "spec_helper" - -def arch_reports_true_for(*args) - args.each do |method| - it "reports true for #{method}" do - expect(described_class.send(method, node)).to be true - end - end - (ARCH_HELPERS - args).each do |method| - it "reports false for #{method}" do - expect(described_class.send(method, node)).to be false - end - end -end - -RSpec.describe ChefUtils::DSL::Architecture do - let(:node) { { "kernel" => { "machine" => arch } } } - - ( HELPER_MODULES - [ described_class ] ).each do |klass| - it "does not have methods that collide with #{klass}" do - expect((klass.methods - Module.methods) & ARCH_HELPERS).to be_empty - end - end - - ARCH_HELPERS.each do |helper| - it "has the #{helper} in the ChefUtils module" do - expect(ChefUtils).to respond_to(helper) - end - end - - context "on x86_64" do - let(:arch) { "x86_64" } - - arch_reports_true_for(:intel?, :_64_bit?) - end - - context "on amd64" do - let(:arch) { "amd64" } - - arch_reports_true_for(:intel?, :_64_bit?) - end - context "on ppc64" do - let(:arch) { "ppc64" } - - arch_reports_true_for(:ppc64?, :_64_bit?) - end - context "on ppc64le" do - let(:arch) { "ppc64le" } - - arch_reports_true_for(:ppc64le?, :_64_bit?) - end - context "on s390x" do - let(:arch) { "s390x" } - - arch_reports_true_for(:s390x?, :_64_bit?) - end - context "on ia64" do - let(:arch) { "ia64" } - - arch_reports_true_for(:_64_bit?) - end - context "on sparc64" do - let(:arch) { "sparc64" } - - arch_reports_true_for(:_64_bit?) - end - context "on aarch64" do - let(:arch) { "aarch64" } - - arch_reports_true_for(:_64_bit?, :arm?) - end - context "on arch64" do - let(:arch) { "arch64" } - - arch_reports_true_for(:_64_bit?, :arm?) - end - context "on arm64" do - let(:arch) { "arm64" } - - arch_reports_true_for(:_64_bit?, :arm?) - end - context "on sun4v" do - let(:arch) { "sun4v" } - - arch_reports_true_for(:sparc?, :_64_bit?) - end - context "on sun4u" do - let(:arch) { "sun4u" } - - arch_reports_true_for(:sparc?, :_64_bit?) - end - context "on i86pc" do - let(:arch) { "i86pc" } - - arch_reports_true_for(:i386?, :intel?, :_32_bit?) - end - context "on i386" do - let(:arch) { "i386" } - - arch_reports_true_for(:i386?, :intel?, :_32_bit?) - end - context "on i686" do - let(:arch) { "i686" } - - arch_reports_true_for(:i386?, :intel?, :_32_bit?) - end - context "on powerpc" do - let(:arch) { "powerpc" } - - arch_reports_true_for(:powerpc?, :_32_bit?) - end - context "on armhf" do - let(:arch) { "armhf" } - - arch_reports_true_for(:armhf?, :_32_bit?, :arm?) - end - context "on armv6l" do - let(:arch) { "armv6l" } - - arch_reports_true_for(:armhf?, :_32_bit?, :arm?) - end - context "on armv7l" do - let(:arch) { "armv7l" } - - arch_reports_true_for(:armhf?, :_32_bit?, :arm?) - end - - context "on s390" do - let(:arch) { "s390" } - - arch_reports_true_for(:s390?, :_32_bit?) - end -end diff --git a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/spec/unit/dsl/cloud_spec.rb b/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/spec/unit/dsl/cloud_spec.rb deleted file mode 100644 index 9a88ce38..00000000 --- a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/spec/unit/dsl/cloud_spec.rb +++ /dev/null @@ -1,93 +0,0 @@ -# frozen_string_literal: true -# -# Copyright:: Copyright (c) Chef Software Inc. -# License:: Apache License, Version 2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -require "spec_helper" -require "fauxhai" - -def cloud_reports_true_for(*args, node:) - args.each do |method| - it "reports true for #{method}" do - expect(described_class.send(method, node)).to be true - end - end - (CLOUD_HELPERS - args).each do |method| - it "reports false for #{method}" do - expect(described_class.send(method, node)).to be false - end - end -end - -RSpec.describe ChefUtils::DSL::Cloud do - ( HELPER_MODULES - [ described_class ] ).each do |klass| - it "does not have methods that collide with #{klass}" do - expect((klass.methods - Module.methods) & CLOUD_HELPERS).to be_empty - end - end - - CLOUD_HELPERS.each do |helper| - it "has the #{helper} in the ChefUtils module" do - expect(ChefUtils).to respond_to(helper) - end - end - - context "on alibaba" do - cloud_reports_true_for(:cloud?, :alibaba?, node: { "alibaba" => {}, "cloud" => {} }) - end - - context "on ec2" do - cloud_reports_true_for(:cloud?, :ec2?, node: { "ec2" => {}, "cloud" => {} }) - end - - context "on gce" do - cloud_reports_true_for(:cloud?, :gce?, node: { "gce" => {}, "cloud" => {} }) - end - - context "on rackspace" do - cloud_reports_true_for(:cloud?, :rackspace?, node: { "rackspace" => {}, "cloud" => {} }) - end - - context "on eucalyptus" do - cloud_reports_true_for(:cloud?, :eucalyptus?, :euca?, node: { "eucalyptus" => {}, "cloud" => {} }) - end - - context "on linode" do - cloud_reports_true_for(:cloud?, :linode?, node: { "linode" => {}, "cloud" => {} }) - end - - context "on openstack" do - cloud_reports_true_for(:cloud?, :openstack?, node: { "openstack" => {}, "cloud" => {} }) - end - - context "on azure" do - cloud_reports_true_for(:cloud?, :azure?, node: { "azure" => {}, "cloud" => {} }) - end - - context "on digital_ocean" do - cloud_reports_true_for(:cloud?, :digital_ocean?, :digitalocean?, node: { "digital_ocean" => {}, "cloud" => {} }) - end - - context "on softlayer" do - cloud_reports_true_for(:cloud?, :softlayer?, node: { "softlayer" => {}, "cloud" => {} }) - end - - context "on virtualbox" do - it "does not return true for cloud?" do - expect(described_class.cloud?({ "virtualbox" => {}, "cloud" => nil })).to be false - end - end -end diff --git a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/spec/unit/dsl/dsl_spec.rb b/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/spec/unit/dsl/dsl_spec.rb deleted file mode 100644 index fd886922..00000000 --- a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/spec/unit/dsl/dsl_spec.rb +++ /dev/null @@ -1,34 +0,0 @@ -# frozen_string_literal: true -# -# Copyright:: Copyright (c) Chef Software Inc. -# License:: Apache License, Version 2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -require "spec_helper" - -RSpec.describe ChefUtils do - class ThingWithDSL - extend ChefUtils - end - - (OS_HELPERS + ARCH_HELPERS + PLATFORM_HELPERS + PLATFORM_FAMILY_HELPERS + INTROSPECTION_HELPERS).each do |helper| - it "has the #{helper} in the ChefUtils module" do - expect(ThingWithDSL).to respond_to(helper) - end - it "has the #{helper} class method in the ChefUtils module" do - expect(ChefUtils).to respond_to(helper) - end - end -end diff --git a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/spec/unit/dsl/introspection_spec.rb b/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/spec/unit/dsl/introspection_spec.rb deleted file mode 100644 index bcbe573c..00000000 --- a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/spec/unit/dsl/introspection_spec.rb +++ /dev/null @@ -1,201 +0,0 @@ -# frozen_string_literal: true -# -# Copyright:: Copyright (c) Chef Software Inc. -# License:: Apache License, Version 2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -require "spec_helper" - -RSpec.describe ChefUtils::DSL::Introspection do - class IntrospectionTestClass - include ChefUtils::DSL::Introspection - attr_accessor :node - - def initialize(node) - @node = node - end - end - - let(:node) { double("node") } - - let(:test_instance) { IntrospectionTestClass.new(node) } - - context "#effortless?" do - # FIXME: use a real VividMash for these tests instead of stubbing - it "is false by default" do - expect(node).to receive(:read).with("chef_packages", "chef", "chef_effortless").and_return(nil) - expect(ChefUtils.effortless?(node)).to be false - end - it "is true when ohai reports a effortless" do - expect(node).to receive(:read).with("chef_packages", "chef", "chef_effortless").and_return(true) - expect(ChefUtils.effortless?(node)).to be true - end - end - - context "#docker?" do - # FIXME: use a real VividMash for these tests instead of stubbing - it "is false by default" do - expect(node).to receive(:read).with("virtualization", "systems", "docker").and_return(nil) - expect(ChefUtils.docker?(node)).to be false - end - it "is true when ohai reports a docker guest" do - expect(node).to receive(:read).with("virtualization", "systems", "docker").and_return("guest") - expect(ChefUtils.docker?(node)).to be true - end - it "is false for any other value other than guest" do - expect(node).to receive(:read).with("virtualization", "systems", "docker").and_return("some nonsense") - expect(ChefUtils.docker?(node)).to be false - end - end - - context "#systemd?" do - # FIXME: somehow test the train helpers - it "returns false if /proc/1/comm does not exist" do - expect(File).to receive(:exist?).with("/proc/1/comm").and_return(false) - expect(ChefUtils.systemd?(node)).to be false - end - - it "returns false if /proc/1/comm is not systemd" do - expect(File).to receive(:exist?).with("/proc/1/comm").and_return(true) - expect(File).to receive(:open).with("/proc/1/comm").and_return(StringIO.new("upstart\n")) - expect(ChefUtils.systemd?(node)).to be false - end - - it "returns true if /proc/1/comm is systemd" do - expect(File).to receive(:exist?).with("/proc/1/comm").and_return(true) - expect(File).to receive(:open).with("/proc/1/comm").and_return(StringIO.new("systemd\n")) - expect(ChefUtils.systemd?(node)).to be true - end - end - - context "#kitchen?" do - before do - @saved = ENV["TEST_KITCHEN"] - end - after do - ENV["TEST_KITCHEN"] = @saved - end - - it "return true if ENV['TEST_KITCHEN'] is not set" do - ENV.delete("TEST_KITCHEN") - expect(ChefUtils.kitchen?(node)).to be false - end - - it "return true if ENV['TEST_KITCHEN'] is nil" do - ENV["TEST_KITCHEN"] = nil - expect(ChefUtils.kitchen?(node)).to be false - end - - it "return true if ENV['TEST_KITCHEN'] is set" do - ENV["TEST_KITCHEN"] = "1" - expect(ChefUtils.kitchen?(node)).to be true - end - end - - context "#ci?" do - before do - @saved = ENV["CI"] - end - after do - ENV["CI"] = @saved - end - - it "return true if ENV['CI'] is not set" do - ENV.delete("CI") - expect(ChefUtils.ci?(node)).to be false - end - - it "return true if ENV['CI'] is nil" do - ENV["CI"] = nil - expect(ChefUtils.ci?(node)).to be false - end - - it "return true if ENV['CI'] is set" do - ENV["CI"] = "1" - expect(ChefUtils.ci?(node)).to be true - end - end - - context "#has_systemd_service_unit?" do - # FIXME: test through train helpers - - before do - %w{ /etc /usr/lib /lib /run }.each do |base| - allow(File).to receive(:exist?).with("#{base}/systemd/system/example.service").and_return(false) - allow(File).to receive(:exist?).with("#{base}/systemd/system/example@.service").and_return(false) - end - end - - it "is false if no unit is present" do - expect(ChefUtils.has_systemd_service_unit?("example")).to be false - end - - it "is false if no template is present" do - expect(ChefUtils.has_systemd_service_unit?("example@instance1")).to be false - end - - %w{ /etc /usr/lib /lib /run }.each do |base| - it "finds a unit in #{base}" do - expect(File).to receive(:exist?).with("#{base}/systemd/system/example.service").and_return(true) - expect(ChefUtils.has_systemd_service_unit?("example")).to be true - end - - it "finds a template in #{base}" do - expect(File).to receive(:exist?).with("#{base}/systemd/system/example@.service").and_return(true) - expect(ChefUtils.has_systemd_service_unit?("example@instance1")).to be true - end - end - end - - context "#has_systemd_unit?" do - # FIXME: test through train helpers - - before do - %w{ /etc /usr/lib /lib /run }.each do |base| - allow(File).to receive(:exist?).with("#{base}/systemd/system/example.mount").and_return(false) - end - end - - it "is false if no unit is present" do - expect(ChefUtils.has_systemd_unit?("example.mount")).to be false - end - - %w{ /etc /usr/lib /lib /run }.each do |base| - it "finds a unit in #{base}" do - expect(File).to receive(:exist?).with("#{base}/systemd/system/example.mount").and_return(true) - expect(ChefUtils.has_systemd_unit?("example.mount")).to be true - end - end - end - - context "#include_recipe?" do - it "is true when the recipe has been seen by the node" do - expect(node).to receive(:recipe?).with("myrecipe").and_return(true) - expect(ChefUtils.include_recipe?("myrecipe", node)).to be true - end - it "is false when the recipe has not been seen by the node" do - expect(node).to receive(:recipe?).with("myrecipe").and_return(false) - expect(ChefUtils.include_recipe?("myrecipe", node)).to be false - end - it "the alias is true when the recipe has been seen by the node" do - expect(node).to receive(:recipe?).with("myrecipe").and_return(true) - expect(ChefUtils.includes_recipe?("myrecipe", node)).to be true - end - it "the alias is false when the recipe has not been seen by the node" do - expect(node).to receive(:recipe?).with("myrecipe").and_return(false) - expect(ChefUtils.includes_recipe?("myrecipe", node)).to be false - end - end -end diff --git a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/spec/unit/dsl/os_spec.rb b/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/spec/unit/dsl/os_spec.rb deleted file mode 100644 index 967517b9..00000000 --- a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/spec/unit/dsl/os_spec.rb +++ /dev/null @@ -1,175 +0,0 @@ -# frozen_string_literal: true -# -# Copyright:: Copyright (c) Chef Software Inc. -# License:: Apache License, Version 2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -require "spec_helper" -require "fauxhai" - -def os_reports_true_for(*args) - args.each do |method| - it "reports true for #{method}" do - expect(described_class.send(method, node)).to be true - end - end - (OS_HELPERS - args).each do |method| - it "reports false for #{method}" do - expect(described_class.send(method, node)).to be false - end - end -end - -RSpec.describe ChefUtils::DSL::OS do - let(:node) { Fauxhai.mock(options).data } - - ( HELPER_MODULES - [ described_class ] ).each do |klass| - it "does not have methods that collide with #{klass}" do - expect((klass.methods - Module.methods) & OS_HELPERS).to be_empty - end - end - - OS_HELPERS.each do |helper| - it "has the #{helper} in the ChefUtils module" do - expect(ChefUtils).to respond_to(helper) - end - end - - context "on ubuntu" do - let(:options) { { platform: "ubuntu" } } - - os_reports_true_for(:linux?) - end - - context "on raspbian" do - let(:options) { { platform: "raspbian" } } - - os_reports_true_for(:linux?) - end - - context "on linuxmint" do - let(:options) { { platform: "linuxmint" } } - - os_reports_true_for(:linux?) - end - - context "on debian" do - let(:options) { { platform: "debian" } } - - os_reports_true_for(:linux?) - end - - context "on amazon" do - let(:options) { { platform: "amazon" } } - - os_reports_true_for(:linux?) - end - - context "on arch" do - let(:options) { { platform: "arch" } } - - os_reports_true_for(:linux?) - end - - context "on centos" do - let(:options) { { platform: "centos" } } - - os_reports_true_for(:linux?) - end - - context "on clearos" do - let(:options) { { platform: "clearos" } } - - os_reports_true_for(:linux?) - end - - context "on dragonfly4" do - let(:options) { { platform: "dragonfly4" } } - - os_reports_true_for - end - - context "on fedora" do - let(:options) { { platform: "fedora" } } - - os_reports_true_for(:linux?) - end - - context "on freebsd" do - let(:options) { { platform: "freebsd" } } - - os_reports_true_for - end - - context "on gentoo" do - let(:options) { { platform: "gentoo" } } - - os_reports_true_for(:linux?) - end - - context "on mac_os_x" do - let(:options) { { platform: "mac_os_x" } } - - os_reports_true_for(:darwin?) - end - - context "on openbsd" do - let(:options) { { platform: "openbsd" } } - - os_reports_true_for - end - - context "on opensuse" do - let(:options) { { platform: "opensuse" } } - - os_reports_true_for(:linux?) - end - - context "on oracle" do - let(:options) { { platform: "oracle" } } - - os_reports_true_for(:linux?) - end - - context "on redhat" do - let(:options) { { platform: "redhat" } } - - os_reports_true_for(:linux?) - end - - context "on smartos" do - let(:options) { { platform: "smartos" } } - - os_reports_true_for - end - - context "on solaris2" do - let(:options) { { platform: "solaris2" } } - - os_reports_true_for - end - - context "on suse" do - let(:options) { { platform: "suse" } } - - os_reports_true_for(:linux?) - end - - context "on windows" do - let(:options) { { platform: "windows" } } - - os_reports_true_for - end -end diff --git a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/spec/unit/dsl/path_sanity_spec.rb b/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/spec/unit/dsl/path_sanity_spec.rb deleted file mode 100644 index 6f536eb6..00000000 --- a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/spec/unit/dsl/path_sanity_spec.rb +++ /dev/null @@ -1,86 +0,0 @@ -# frozen_string_literal: true -# -# Copyright:: Copyright (c) Chef Software Inc. -# License:: Apache License, Version 2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -require "spec_helper" - -RSpec.describe ChefUtils::DSL::DefaultPaths do - class DefaultPathsTestClass - include ChefUtils::DSL::DefaultPaths - end - - before do - allow(Gem).to receive(:bindir).and_return("/opt/ruby/bin/bundle") - allow(RbConfig::CONFIG).to receive(:[]).with("bindir").and_return("/opt/ruby/bin") - end - - context "on unix" do - before do - allow(ChefUtils).to receive(:windows?).and_return(false) - end - - let(:test_instance) { DefaultPathsTestClass.new } - - it "works with no path" do - env = {} - expect(test_instance.default_paths(env)).to eql("#{Gem.bindir}:#{RbConfig::CONFIG["bindir"]}:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin") - end - - it "works with nil path" do - env = { "PATH" => nil } - expect(test_instance.default_paths(env)).to eql("#{Gem.bindir}:#{RbConfig::CONFIG["bindir"]}:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin") - end - - it "works with empty path" do - env = { "PATH" => "" } - expect(test_instance.default_paths(env)).to eql("#{Gem.bindir}:#{RbConfig::CONFIG["bindir"]}:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin") - end - - it "appends the default_paths to the end of the path, preserving any that already exist, in the same order" do - env = { "PATH" => "/bin:/opt/app/bin:/sbin" } - expect(test_instance.default_paths(env)).to eql("#{Gem.bindir}:#{RbConfig::CONFIG["bindir"]}:/bin:/opt/app/bin:/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin") - end - end - - context "on windows" do - before do - allow(ChefUtils).to receive(:windows?).and_return(true) - end - - let(:test_instance) { DefaultPathsTestClass.new } - - it "works with no path" do - env = {} - expect(test_instance.default_paths(env)).to eql("#{Gem.bindir};#{RbConfig::CONFIG["bindir"]}") - end - - it "works with nil path" do - env = { "PATH" => nil } - expect(test_instance.default_paths(env)).to eql("#{Gem.bindir};#{RbConfig::CONFIG["bindir"]}") - end - - it "works with empty path" do - env = { "PATH" => "" } - expect(test_instance.default_paths(env)).to eql("#{Gem.bindir};#{RbConfig::CONFIG["bindir"]}") - end - - it "prepends to an existing path" do - env = { "PATH" => "%SystemRoot%\\system32;%SystemRoot%;%SystemRoot%\\System32\\Wbem;%SYSTEMROOT%\\System32\\WindowsPowerShell\\v1.0\\" } - expect(test_instance.default_paths(env)).to eql("#{Gem.bindir};#{RbConfig::CONFIG["bindir"]};%SystemRoot%\\system32;%SystemRoot%;%SystemRoot%\\System32\\Wbem;%SYSTEMROOT%\\System32\\WindowsPowerShell\\v1.0\\") - end - end -end diff --git a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/spec/unit/dsl/platform_family_spec.rb b/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/spec/unit/dsl/platform_family_spec.rb deleted file mode 100644 index a2f268e3..00000000 --- a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/spec/unit/dsl/platform_family_spec.rb +++ /dev/null @@ -1,235 +0,0 @@ -# frozen_string_literal: true -# -# Copyright:: Copyright (c) Chef Software Inc. -# License:: Apache License, Version 2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -require "spec_helper" -require "fauxhai" - -def pf_reports_true_for(*args) - args.each do |method| - it "reports true for #{method}" do - expect(described_class.send(method, node)).to be true - end - end - (PLATFORM_FAMILY_HELPERS - %i{windows_ruby? macos_ruby?} - args).each do |method| - it "reports false for #{method}" do - expect(described_class.send(method, node)).to be false - end - end -end - -RSpec.describe ChefUtils::DSL::PlatformFamily do - let(:node) { Fauxhai.mock(options).data } - - ( HELPER_MODULES - [ described_class ] ).each do |klass| - it "does not have methods that collide with #{klass}" do - expect((klass.methods - Module.methods) & PLATFORM_FAMILY_HELPERS).to be_empty - end - end - - ( PLATFORM_FAMILY_HELPERS - %i{windows_ruby? macos_ruby?}).each do |helper| - it "has the #{helper} in the ChefUtils module" do - expect(ChefUtils).to respond_to(helper) - end - end - - context "on ubuntu" do - let(:options) { { platform: "ubuntu" } } - - pf_reports_true_for(:debian?) - end - - context "on raspbian" do - let(:options) { { platform: "raspbian" } } - - pf_reports_true_for(:debian?) - end - - context "on linuxmint" do - let(:options) { { platform: "linuxmint" } } - - pf_reports_true_for(:debian?) - end - - context "on debian" do - let(:options) { { platform: "debian" } } - - pf_reports_true_for(:debian?) - end - - context "on aix" do - let(:options) { { platform: "aix" } } - - pf_reports_true_for(:aix?) - end - - context "on amazon" do - let(:options) { { platform: "amazon" } } - - pf_reports_true_for(:amazon?, :amazon_linux?, :rpm_based?, :fedora_derived?) - end - - context "on arch" do - let(:options) { { platform: "arch" } } - - pf_reports_true_for(:arch?, :arch_linux?) - end - - context "on centos6" do - let(:options) { { platform: "centos", version: "6" } } - - pf_reports_true_for(:rhel?, :rpm_based?, :fedora_derived?, :redhat_based?, :el?, :rhel6?) - end - - context "on centos7" do - let(:options) { { platform: "centos", version: "7" } } - - pf_reports_true_for(:rhel?, :rpm_based?, :fedora_derived?, :redhat_based?, :el?, :rhel7?) - end - - context "on centos8" do - let(:options) { { platform: "centos", version: "8" } } - - pf_reports_true_for(:rhel?, :rpm_based?, :fedora_derived?, :redhat_based?, :el?, :rhel8?) - end - - context "on clearos7" do - let(:options) { { platform: "clearos", version: "7" } } - - pf_reports_true_for(:rhel?, :rpm_based?, :fedora_derived?, :redhat_based?, :el?, :rhel7?) - end - - context "on dragonfly4" do - let(:options) { { platform: "dragonfly4" } } - - pf_reports_true_for(:dragonflybsd?) - end - - context "on fedora" do - let(:options) { { platform: "fedora" } } - - pf_reports_true_for(:fedora?, :rpm_based?, :fedora_derived?, :redhat_based?) - end - - context "on freebsd" do - let(:options) { { platform: "freebsd" } } - - pf_reports_true_for(:freebsd?, :bsd_based?) - end - - context "on gentoo" do - let(:options) { { platform: "gentoo" } } - - pf_reports_true_for(:gentoo?) - end - - context "on mac_os_x" do - let(:options) { { platform: "mac_os_x" } } - - pf_reports_true_for(:mac_os_x?, :mac?, :osx?, :macos?) - end - - context "on openbsd" do - let(:options) { { platform: "openbsd" } } - - pf_reports_true_for(:openbsd?, :bsd_based?) - end - - context "on opensuse" do - let(:options) { { platform: "opensuse" } } - - pf_reports_true_for(:suse?, :rpm_based?) - end - - context "on oracle6" do - let(:options) { { platform: "oracle", version: "6" } } - - pf_reports_true_for(:rhel?, :rpm_based?, :fedora_derived?, :redhat_based?, :el?, :rhel6?) - end - - context "on oracle7" do - let(:options) { { platform: "oracle", version: "7" } } - - pf_reports_true_for(:rhel?, :rpm_based?, :fedora_derived?, :redhat_based?, :el?, :rhel7?) - end - - context "on redhat6" do - let(:options) { { platform: "redhat", version: "6" } } - - pf_reports_true_for(:rhel?, :rpm_based?, :fedora_derived?, :redhat_based?, :el?, :rhel6?) - end - - context "on redhat7" do - let(:options) { { platform: "redhat", version: "7" } } - - pf_reports_true_for(:rhel?, :rpm_based?, :fedora_derived?, :redhat_based?, :el?, :rhel7?) - end - - context "on redhat8" do - let(:options) { { platform: "redhat", version: "8" } } - - pf_reports_true_for(:rhel?, :rpm_based?, :fedora_derived?, :redhat_based?, :el?, :rhel8?) - end - - context "on smartos" do - let(:options) { { platform: "smartos" } } - - pf_reports_true_for(:smartos?, :solaris_based?) - end - - context "on solaris2" do - let(:options) { { platform: "solaris2" } } - - pf_reports_true_for(:solaris?, :solaris2?, :solaris_based?) - end - - context "on suse" do - let(:options) { { platform: "suse" } } - - pf_reports_true_for(:suse?, :rpm_based?) - end - - context "on windows" do - let(:options) { { platform: "windows" } } - - pf_reports_true_for(:windows?) - end - - context "node-independent windows APIs" do - if RUBY_PLATFORM.match?(/mswin|mingw|windows/) - it "reports true for :windows_ruby?" do - expect(described_class.windows_ruby?).to be true - end - else - it "reports false for :windows_ruby?" do - expect(described_class.windows_ruby?).to be false - end - end - end - - context "node-independent mac APIs" do - if RUBY_PLATFORM.match?(/darwin/) - it "reports true for :macos_ruby?" do - expect(described_class.macos_ruby?).to be true - end - else - it "reports false for :macos_ruby?" do - expect(described_class.macos_ruby?).to be false - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/spec/unit/dsl/platform_spec.rb b/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/spec/unit/dsl/platform_spec.rb deleted file mode 100644 index 8ebdcbae..00000000 --- a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/spec/unit/dsl/platform_spec.rb +++ /dev/null @@ -1,252 +0,0 @@ -# frozen_string_literal: true -# -# Copyright:: Copyright (c) Chef Software Inc. -# License:: Apache License, Version 2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -require "spec_helper" -require "fauxhai" - -def platform_reports_true_for(*args) - args.each do |method| - it "reports true for #{method} on the module given a node" do - expect(described_class.send(method, node)).to be true - end - it "reports true for #{method} when mixed into a class with a node" do - expect(thing_with_a_node.send(method, node)).to be true - end - it "reports true for #{method} when mixed into a class with a run_context" do - expect(thing_with_a_run_context.send(method, node)).to be true - end - it "reports true for #{method} when mixed into a class with the dsl" do - expect(thing_with_the_dsl.send(method, node)).to be true - end - it "reports true for #{method} on the main class give a node" do - expect(ChefUtils.send(method, node)).to be true - end - end - (PLATFORM_HELPERS - args).each do |method| - it "reports false for #{method} on the module given a node" do - expect(described_class.send(method, node)).to be false - end - it "reports false for #{method} when mixed into a class with a node" do - expect(thing_with_a_node.send(method, node)).to be false - end - it "reports false for #{method} when mixed into a class with the dsl" do - expect(thing_with_the_dsl.send(method, node)).to be false - end - it "reports false for #{method} on the main class give a node" do - expect(ChefUtils.send(method, node)).to be false - end - end -end - -RSpec.describe ChefUtils::DSL::Platform do - let(:node) { Fauxhai.mock(options).data } - - class ThingWithANode - include ChefUtils::DSL::Platform - attr_accessor :node - - def initialize(node) - @node = node - end - end - - class ThingWithARunContext - include ChefUtils::DSL::Platform - class RunContext - attr_accessor :node - end - attr_accessor :run_context - - def initialize(node) - @run_context = RunContext.new - run_context.node = node - end - end - - class ThingWithTheDSL - include ChefUtils - attr_accessor :node - - def initialize(node) - @node = node - end - end - - let(:thing_with_a_node) { ThingWithANode.new(node) } - let(:thing_with_a_run_context) { ThingWithARunContext.new(node) } - let(:thing_with_the_dsl) { ThingWithTheDSL.new(node) } - - ( HELPER_MODULES - [ described_class ] ).each do |klass| - it "does not have methods that collide with #{klass}" do - expect((klass.methods - Module.methods) & PLATFORM_HELPERS).to be_empty - end - end - - context "on ubuntu" do - let(:options) { { platform: "ubuntu" } } - - platform_reports_true_for(:ubuntu?, :ubuntu_platform?) - end - - context "on raspbian" do - let(:options) { { platform: "raspbian" } } - - platform_reports_true_for(:raspbian?, :raspbian_platform?) - end - - context "on linuxmint" do - let(:options) { { platform: "linuxmint" } } - - platform_reports_true_for(:mint?, :linux_mint?, :linuxmint?, :linuxmint_platform?) - end - - context "on debian" do - let(:options) { { platform: "debian" } } - - platform_reports_true_for(:debian_platform?) - end - - context "on aix" do - let(:options) { { platform: "aix" } } - - platform_reports_true_for(:aix_platform?) - end - - context "on amazon" do - let(:options) { { platform: "amazon" } } - - platform_reports_true_for(:amazon_platform?) - end - - context "on arch" do - let(:options) { { platform: "arch" } } - - platform_reports_true_for(:arch_platform?) - end - - context "on centos" do - let(:options) { { platform: "centos" } } - - platform_reports_true_for(:centos?, :centos_platform?) - end - - context "on centos stream w/o os_release" do - let(:options) { { platform: "centos" } } - let(:node) { { "platform" => "centos", "platform_version" => "8", "platform_family" => "rhel", "os" => "linux", "lsb" => { "id" => "CentOSStream" }, "os_release" => nil } } - - platform_reports_true_for(:centos?, :centos_platform?, :centos_stream_platform?) - end - - context "on centos stream w/ os_release" do - let(:options) { { platform: "centos" } } - let(:node) { { "platform" => "centos", "platform_version" => "8", "platform_family" => "rhel", "os" => "linux", "os_release" => { "name" => "CentOS Stream" } } } - - platform_reports_true_for(:centos?, :centos_platform?, :centos_stream_platform?) - end - - context "on clearos" do - let(:options) { { platform: "clearos" } } - - platform_reports_true_for(:clearos?, :clearos_platform?) - end - - context "on dragonfly4" do - let(:options) { { platform: "dragonfly4" } } - - platform_reports_true_for(:dragonfly_platform?) - end - - context "on fedora" do - let(:options) { { platform: "fedora" } } - - platform_reports_true_for(:fedora_platform?) - end - - context "on freebsd" do - let(:options) { { platform: "freebsd" } } - - platform_reports_true_for(:freebsd_platform?) - end - - context "on gentoo" do - let(:options) { { platform: "gentoo" } } - - platform_reports_true_for(:gentoo_platform?) - end - - context "on mac_os_x" do - let(:options) { { platform: "mac_os_x" } } - - platform_reports_true_for(:mac_os_x_platform?, :macos_platform?) - end - - context "on openbsd" do - let(:options) { { platform: "openbsd" } } - - platform_reports_true_for(:openbsd_platform?) - end - - context "on oracle" do - let(:options) { { platform: "oracle" } } - - platform_reports_true_for(:oracle?, :oracle_linux?, :oracle_platform?) - end - - context "on redhat" do - let(:options) { { platform: "redhat" } } - - platform_reports_true_for(:redhat?, :redhat_enterprise_linux?, :redhat_enterprise?, :redhat_platform?) - end - - context "on smartos" do - let(:options) { { platform: "smartos" } } - - platform_reports_true_for(:smartos_platform?) - end - - context "on solaris2" do - let(:options) { { platform: "solaris2" } } - - platform_reports_true_for(:solaris2_platform?) - end - - context "on suse" do - let(:options) { { platform: "suse" } } - - platform_reports_true_for(:suse_platform?) - end - - context "on windows" do - let(:options) { { platform: "windows" } } - - platform_reports_true_for(:windows_platform?) - end - - context "on opensuseleap" do - let(:node) { { "platform" => "opensuseleap", "platform_version" => "15.1", "platform_family" => "suse", "os" => "linux" } } - - platform_reports_true_for(:opensuse_platform?, :opensuseleap_platform?, :opensuse?, :leap_platform?) - end - - context "on opensuse" do - let(:node) { { "platform" => "opensuse", "platform_version" => "11.0", "platform_family" => "suse", "os" => "linux" } } - - platform_reports_true_for(:opensuse_platform?, :opensuseleap_platform?, :opensuse?, :leap_platform?) - end - -end diff --git a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/spec/unit/dsl/service_spec.rb b/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/spec/unit/dsl/service_spec.rb deleted file mode 100644 index bfb78441..00000000 --- a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/spec/unit/dsl/service_spec.rb +++ /dev/null @@ -1,117 +0,0 @@ -# frozen_string_literal: true -# -# Copyright:: Copyright (c) Chef Software Inc. -# License:: Apache License, Version 2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -require "spec_helper" - -RSpec.describe ChefUtils::DSL::Service do - class ServiceTestClass - include ChefUtils::DSL::Service - end - - let(:test_instance) { ServiceTestClass.new } - - context "#debianrcd?" do - it "is true if the binary is installed" do - expect(File).to receive(:exist?).with("/usr/sbin/update-rc.d").and_return(true) - expect(test_instance.debianrcd?).to be true - end - it "is false if the binary is not installed" do - expect(File).to receive(:exist?).with("/usr/sbin/update-rc.d").and_return(false) - expect(test_instance.debianrcd?).to be false - end - end - - context "#invokercd?" do - it "is true if the binary is installed" do - expect(File).to receive(:exist?).with("/usr/sbin/invoke-rc.d").and_return(true) - expect(test_instance.invokercd?).to be true - end - it "is false if the binary is not installed" do - expect(File).to receive(:exist?).with("/usr/sbin/invoke-rc.d").and_return(false) - expect(test_instance.invokercd?).to be false - end - end - - context "#upstart?" do - it "is true if the binary is installed" do - expect(File).to receive(:exist?).with("/sbin/initctl").and_return(true) - expect(test_instance.upstart?).to be true - end - it "is false if the binary is not installed" do - expect(File).to receive(:exist?).with("/sbin/initctl").and_return(false) - expect(test_instance.upstart?).to be false - end - end - - context "#insserv?" do - it "is true if the binary is installed" do - expect(File).to receive(:exist?).with("/sbin/insserv").and_return(true) - expect(test_instance.insserv?).to be true - end - it "is false if the binary is not installed" do - expect(File).to receive(:exist?).with("/sbin/insserv").and_return(false) - expect(test_instance.insserv?).to be false - end - end - - context "#redhatrcd?" do - it "is true if the binary is installed" do - expect(File).to receive(:exist?).with("/sbin/chkconfig").and_return(true) - expect(test_instance.redhatrcd?).to be true - end - it "is false if the binary is not installed" do - expect(File).to receive(:exist?).with("/sbin/chkconfig").and_return(false) - expect(test_instance.redhatrcd?).to be false - end - end - - context "#service_script_exist?" do - it "is true if the type is :initd and /etc/init.d script exists" do - expect(File).to receive(:exist?).with("/etc/init.d/example").and_return(true) - expect(test_instance.service_script_exist?(:initd, "example")).to be true - end - it "is false if the type is :initd and /etc/init.d script does not exist" do - expect(File).to receive(:exist?).with("/etc/init.d/example").and_return(false) - expect(test_instance.service_script_exist?(:initd, "example")).to be false - end - it "is true if the type is :upstart and /etc/init script exists" do - expect(File).to receive(:exist?).with("/etc/init/example.conf").and_return(true) - expect(test_instance.service_script_exist?(:upstart, "example")).to be true - end - it "is false if the type is :upstart and /etc/init script does not exist" do - expect(File).to receive(:exist?).with("/etc/init/example.conf").and_return(false) - expect(test_instance.service_script_exist?(:upstart, "example")).to be false - end - it "is true if the type is :xinetd and /etc/xinetd.d script exists" do - expect(File).to receive(:exist?).with("/etc/xinetd.d/example").and_return(true) - expect(test_instance.service_script_exist?(:xinetd, "example")).to be true - end - it "is false if the type is :xinetd and /etc/xinetd.d script does not exist" do - expect(File).to receive(:exist?).with("/etc/xinetd.d/example").and_return(false) - expect(test_instance.service_script_exist?(:xinetd, "example")).to be false - end - it "is true if the type is :etc_rcd and /etc/rc.d script exists" do - expect(File).to receive(:exist?).with("/etc/rc.d/example").and_return(true) - expect(test_instance.service_script_exist?(:etc_rcd, "example")).to be true - end - it "is false if the type is :etc_rcd and /etc/rc.d script does not exist" do - expect(File).to receive(:exist?).with("/etc/rc.d/example").and_return(false) - expect(test_instance.service_script_exist?(:etc_rcd, "example")).to be false - end - end -end diff --git a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/spec/unit/dsl/virtualization_spec.rb b/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/spec/unit/dsl/virtualization_spec.rb deleted file mode 100644 index 6ee7eb3d..00000000 --- a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/spec/unit/dsl/virtualization_spec.rb +++ /dev/null @@ -1,75 +0,0 @@ -# frozen_string_literal: true -# -# Copyright:: Copyright (c) Chef Software Inc. -# License:: Apache License, Version 2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -require "spec_helper" -require "fauxhai" - -def virtualization_reports_true_for(*args, node:) - args.each do |method| - it "reports true for #{method}" do - expect(described_class.send(method, node)).to be true - end - end - (VIRTUALIZATION_HELPERS - args).each do |method| - it "reports false for #{method}" do - expect(described_class.send(method, node)).to be false - end - end -end - -RSpec.describe ChefUtils::DSL::Virtualization do - ( HELPER_MODULES - [ described_class ] ).each do |klass| - it "does not have methods that collide with #{klass}" do - expect((klass.methods - Module.methods) & VIRTUALIZATION_HELPERS).to be_empty - end - end - - VIRTUALIZATION_HELPERS.each do |helper| - it "has the #{helper} in the ChefUtils module" do - expect(ChefUtils).to respond_to(helper) - end - end - - context "on kvm" do - virtualization_reports_true_for(:guest?, :virtual?, :kvm?, node: { "virtualization" => { "system" => "kvm", "role" => "guest" } }) - virtualization_reports_true_for(:hypervisor?, :physical?, :kvm_host?, node: { "virtualization" => { "system" => "kvm", "role" => "host" } }) - end - context "on lxc" do - virtualization_reports_true_for(:guest?, :virtual?, :lxc?, node: { "virtualization" => { "system" => "lxc", "role" => "guest" } }) - virtualization_reports_true_for(:hypervisor?, :physical?, :lxc_host?, node: { "virtualization" => { "system" => "lxc", "role" => "host" } }) - end - context "on parallels" do - virtualization_reports_true_for(:guest?, :virtual?, :parallels?, node: { "virtualization" => { "system" => "parallels", "role" => "guest" } }) - virtualization_reports_true_for(:hypervisor?, :physical?, :parallels_host?, node: { "virtualization" => { "system" => "parallels", "role" => "host" } }) - end - context "on virtualbox" do - virtualization_reports_true_for(:guest?, :virtual?, :virtualbox?, :vbox?, node: { "virtualization" => { "system" => "vbox", "role" => "guest" } }) - virtualization_reports_true_for(:hypervisor?, :physical?, :vbox_host?, node: { "virtualization" => { "system" => "vbox", "role" => "host" } }) - end - context "on vmware" do - virtualization_reports_true_for(:guest?, :virtual?, :vmware?, node: { "virtualization" => { "system" => "vmware", "role" => "guest" } }) - virtualization_reports_true_for(:hypervisor?, :physical?, :vmware_host?, node: { "virtualization" => { "system" => "vmware", "role" => "host" } }) - end - context "on openvz" do - virtualization_reports_true_for(:guest?, :virtual?, :openvz?, node: { "virtualization" => { "system" => "openvz", "role" => "guest" } }) - virtualization_reports_true_for(:hypervisor?, :physical?, :openvz_host?, node: { "virtualization" => { "system" => "openvz", "role" => "host" } }) - end - context "on metal which is not a virt host" do - virtualization_reports_true_for(:physical?, node: {} ) - end -end diff --git a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/spec/unit/dsl/which_spec.rb b/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/spec/unit/dsl/which_spec.rb deleted file mode 100644 index 5ea5f6cc..00000000 --- a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/spec/unit/dsl/which_spec.rb +++ /dev/null @@ -1,171 +0,0 @@ -# frozen_string_literal: true -# -# Copyright:: Copyright (c) Chef Software Inc. -# License:: Apache License, Version 2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -require "spec_helper" - -RSpec.describe ChefUtils::DSL::Which do - - class WhichTestClass - include ChefUtils::DSL::Which - end - - let(:test) { WhichTestClass.new } - - describe "#which" do - def self.test_which(description, *args, path: ["/dir1", "/dir2" ].join(File::PATH_SEPARATOR), finds: nil, others: [], directory: false, &block) - it description do - # stub the ENV['PATH'] - expect(ENV).to receive(:[]).with("PATH").and_return(path) - expect(ENV).to receive(:[]).with("PATHEXT").and_return(nil) - - # most files should not be found - allow(File).to receive(:executable?).and_return(false) - allow(File).to receive(:directory?).and_return(false) - - # stub the expectation - expect(File).to receive(:executable?).with(finds).and_return(true) if finds - - # if the file we find is a directory - expect(File).to receive(:directory?).with(finds).and_return(true) if finds && directory - - # allow for stubbing other paths to exist that we should not find - others.each do |other| - allow(File).to receive(:executable?).with(other).and_return(true) - end - - # setup the actual expectation on the return value - if finds && !directory - expect(test.which(*args, &block)).to eql(finds) - else - expect(test.which(*args, &block)).to eql(false) - end - end - end - - context "simple usage" do - test_which("returns false when it does not find anything", "foo1") - - ["/dir1", "/dir2" ].each do |dir| - test_which("finds `foo1` in #{dir} when it is stubbed", "foo1", finds: "#{dir}/foo1") - end - - test_which("does not find an executable directory", "foo1", finds: "/dir1/foo1", directory: true) - end - - context "with an array of args" do - test_which("finds the first arg", "foo1", "foo2", finds: "/dir2/foo1") - - test_which("finds the second arg", "foo1", "foo2", finds: "/dir2/foo2") - - test_which("finds the first arg when there's both", "foo1", "foo2", finds: "/dir2/foo1", others: [ "/dir1/foo2" ]) - - test_which("and the directory order can be reversed", "foo1", "foo2", finds: "/dir1/foo1", others: [ "/dir2/foo2" ]) - - test_which("or be the same", "foo1", "foo2", finds: "/dir1/foo1", others: [ "/dir1/foo2" ]) - end - - context "with a block" do - test_which("doesn't find it if its false", "foo1", others: [ "/dir1/foo1" ]) do |f| - false - end - - test_which("finds it if its true", "foo1", finds: "/dir1/foo1") do |f| - true - end - - test_which("passes in the filename as the arg", "foo1", finds: "/dir1/foo1") do |f| - raise "bad arg to block" unless f == "/dir1/foo1" - - true - end - - test_which("arrays with blocks", "foo1", "foo2", finds: "/dir2/foo1", others: [ "/dir1/foo2" ]) do |f| - raise "bad arg to block" unless ["/dir2/foo1", "/dir1/foo2"].include?(f) - - true - end - end - - context "nil path" do - test_which("returns false when it does not find anything", "foo1", path: nil) - end - end - - describe "#where" do - def self.test_where(description, *args, path: ["/dir1", "/dir2" ].join(File::PATH_SEPARATOR), finds: [], others: [], &block) - it description do - # stub the ENV['PATH'] - expect(ENV).to receive(:[]).with("PATH").and_return(path) - expect(ENV).to receive(:[]).with("PATHEXT").and_return(nil) - - # most files should not be found - allow(File).to receive(:executable?).and_return(false) - allow(File).to receive(:directory?).and_return(false) - - # allow for stubbing other paths to exist that we should not return - others.each do |other| - allow(File).to receive(:executable?).with(other).and_return(true) - end - - # stub the expectation - finds.each do |path| - expect(File).to receive(:executable?).with(path).and_return(true) - end - - # setup the actual expectation on the return value - expect(test.where(*args, &block)).to eql(finds) - end - end - - context "simple usage" do - test_where("returns empty array when it doesn't find anything", "foo1") - - ["/dir1", "/dir2" ].each do |dir| - test_where("finds `foo1` in #{dir} when it is stubbed", "foo1", finds: [ "#{dir}/foo1" ]) - end - - test_where("finds `foo1` in all directories", "foo1", finds: [ "/dir1/foo1", "/dir2/foo1" ]) - end - - context "with an array of args" do - test_where("finds the first arg", "foo1", "foo2", finds: [ "/dir2/foo1" ]) - - test_where("finds the second arg", "foo1", "foo2", finds: [ "/dir2/foo2" ]) - - test_where("finds foo1 before foo2 if the dirs are reversed", "foo1", "foo2", finds: [ "/dir1/foo1", "/dir2/foo2" ]) - - test_where("finds them both in the same directory", "foo1", "foo2", finds: [ "/dir1/foo1", "/dir1/foo2" ]) - - test_where("finds foo2 first if they're reversed", "foo2", "foo1", finds: [ "/dir1/foo2", "/dir1/foo1" ]) - end - - context "with a block do" do - test_where("finds foo1 and foo2 if they exist and the block is true", "foo1", "foo2", finds: [ "/dir1/foo2", "/dir2/foo2" ]) do - true - end - - test_where("does not finds foo1 and foo2 if they exist and the block is false", "foo1", "foo2", others: [ "/dir1/foo2", "/dir2/foo2" ]) do - false - end - end - - context "with a nil path" do - test_where("returns empty array when it doesn't find anything", "foo1", path: nil) - end - end -end diff --git a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/spec/unit/dsl/windows_spec.rb b/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/spec/unit/dsl/windows_spec.rb deleted file mode 100644 index 423cfe51..00000000 --- a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/spec/unit/dsl/windows_spec.rb +++ /dev/null @@ -1,84 +0,0 @@ -# frozen_string_literal: true -# -# Copyright:: Copyright (c) Chef Software Inc. -# License:: Apache License, Version 2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -require "spec_helper" - -WINDOWS_BOOL_HELPERS = %i{windows_server_core? windows_server? windows_workstation?}.freeze - -def windows_reports_true_for(*args) - args.each do |method| - it "reports true for #{method}" do - expect(described_class.send(method, node)).to be true - end - end - (WINDOWS_BOOL_HELPERS - args).each do |method| - it "reports false for #{method}" do - expect(described_class.send(method, node)).to be false - end - end -end - -RSpec.describe ChefUtils::DSL::Windows do - ( HELPER_MODULES - [ described_class ] ).each do |klass| - it "does not have methods that collide with #{klass}" do - expect((klass.methods - Module.methods) & WINDOWS_HELPERS).to be_empty - end - end - - WINDOWS_HELPERS.each do |helper| - it "has the #{helper} in the ChefUtils module" do - expect(ChefUtils).to respond_to(helper) - end - end - - context "windows boolean helpers" do - context "on Windows Server Core" do - let(:node) { { "kernel" => { "server_core" => true } } } - - windows_reports_true_for(:windows_server_core?) - end - - context "on Windows Workstation" do - let(:node) { { "kernel" => { "product_type" => "Workstation" } } } - - windows_reports_true_for(:windows_workstation?) - end - - context "on Windows Server" do - let(:node) { { "kernel" => { "product_type" => "Server" } } } - - windows_reports_true_for(:windows_server?) - end - end - - context "#windows_nt_version on Windows Server 2012 R2" do - let(:node) { { "os_version" => "6.3.9600" } } - it "it returns a ChefUtils::VersionString object with 6.3.9600" do - expect(described_class.send(:windows_nt_version, node)).to eq "6.3.9600" - expect(described_class.send(:windows_nt_version, node)).to be_a_kind_of ChefUtils::VersionString - end - end - - context "#powershell_version on Windows Server 2012 R2" do - let(:node) { { "languages" => { "powershell" => { "version" => "4.0" } } } } - it "it returns a ChefUtils::VersionString object with 4.0" do - expect(described_class.send(:powershell_version, node)).to eq "4.0" - expect(described_class.send(:powershell_version, node)).to be_a_kind_of ChefUtils::VersionString - end - end -end diff --git a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/spec/unit/mash_spec.rb b/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/spec/unit/mash_spec.rb deleted file mode 100644 index 3f838237..00000000 --- a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/spec/unit/mash_spec.rb +++ /dev/null @@ -1,51 +0,0 @@ -# frozen_string_literal: true -# -# Author:: Matthew Kent () -# Copyright:: Copyright (c) Chef Software Inc. -# License:: Apache License, Version 2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -require "spec_helper" - -RSpec.describe ChefUtils::Mash do - it "should duplicate a simple key/value mash to a new mash" do - data = { x: "one", y: "two", z: "three" } - @orig = ChefUtils::Mash.new(data) - @copy = @orig.dup - expect(@copy.to_hash).to eq(ChefUtils::Mash.new(data).to_hash) - @copy[:x] = "four" - expect(@orig[:x]).to eq("one") - end - - it "should duplicate a mash with an array to a new mash" do - data = { x: "one", y: "two", z: [1, 2, 3] } - @orig = ChefUtils::Mash.new(data) - @copy = @orig.dup - expect(@copy.to_hash).to eq(ChefUtils::Mash.new(data).to_hash) - @copy[:z] << 4 - expect(@orig[:z]).to eq([1, 2, 3]) - end - - it "should duplicate a nested mash to a new mash" do - data = { x: "one", y: "two", z: ChefUtils::Mash.new({ a: [1, 2, 3] }) } - @orig = ChefUtils::Mash.new(data) - @copy = @orig.dup - expect(@copy.to_hash).to eq(ChefUtils::Mash.new(data).to_hash) - @copy[:z][:a] << 4 - expect(@orig[:z][:a]).to eq([1, 2, 3]) - end - - # add more! -end diff --git a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/spec/unit/parallel_map_spec.rb b/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/spec/unit/parallel_map_spec.rb deleted file mode 100644 index 1346a917..00000000 --- a/bundle/ruby/3.2.0/gems/chef-utils-18.4.2/spec/unit/parallel_map_spec.rb +++ /dev/null @@ -1,156 +0,0 @@ -# frozen_string_literal: true -# -# Copyright:: Copyright (c) Chef Software Inc. -# License:: Apache License, Version 2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -require "chef-utils/parallel_map" - -using ChefUtils::ParallelMap - -RSpec.describe ChefUtils::ParallelMap do - - shared_examples_for "common parallel API tests" do - - before(:each) do - ChefUtils::DefaultThreadPool.instance.instance_variable_set(:@pool, nil) - ChefUtils::DefaultThreadPool.instance.threads = threads - end - - after(:each) do - ChefUtils::DefaultThreadPool.instance.instance_variable_set(:@pool, nil) - end - - it "parallel_map runs in parallel" do - # this is implicitly also testing that we run in the caller when we exhaust threads by running threads+1 - val = threads + 1 - ret = [] - start = Time.now - (1..val).parallel_map do |i| - loop do - if val == i - ret << i - val -= 1 - break - end - # we spin for quite awhile to wait for very slow testers if we have to - if Time.now - start > 30 - raise "timed out; deadlocked due to lack of parallelization?" - end - - # need to sleep a tiny bit to let other threads schedule - sleep 0.000001 - end - end - expected = (1..threads + 1).to_a.reverse - expect(ret).to eql(expected) - end - - it "parallel_each runs in parallel" do - # this is implicitly also testing that we run in the caller when we exhaust threads by running threads+1 - val = threads + 1 - ret = [] - start = Time.now - (1..val).parallel_each do |i| - loop do - if val == i - ret << i - val -= 1 - break - end - # we spin for quite awhile to wait for very slow testers if we have to - if Time.now - start > 30 - raise "timed out; deadlocked due to lack of parallelization?" - end - - # need to sleep a tiny bit to let other threads schedule - sleep 0.000001 - end - end - expected = (1..threads + 1).to_a.reverse - expect(ret).to eql(expected) - end - - it "parallel_map throws exceptions" do - expect { (0..10).parallel_map { |i| raise "boom" } }.to raise_error(RuntimeError) - end - - it "parallel_each throws exceptions" do - expect { (0..10).parallel_each { |i| raise "boom" } }.to raise_error(RuntimeError) - end - - it "parallel_map runs" do - ans = Timeout.timeout(30) do - (1..10).parallel_map { |i| i } - end - expect(ans).to eql((1..10).to_a) - end - - it "parallel_each runs" do - Timeout.timeout(30) do - (1..10).parallel_each { |i| i } - end - end - - it "recursive parallel_map will not deadlock" do - ans = Timeout.timeout(30) do - (1..2).parallel_map { |i| (1..2).parallel_map { |i| i } } - end - expect(ans).to eql([[1, 2], [1, 2]]) - end - - it "recursive parallel_each will not deadlock" do - Timeout.timeout(30) do - (1..2).parallel_each { |i| (1..2).parallel_each { |i| i } } - end - end - - it "parallel_map is lazy" do - ans = Timeout.timeout(30) do - (1..).lazy.parallel_map { |i| i }.first(5) - end - expect(ans).to eql((1..5).to_a) - end - - it "parallel_each is lazy" do - Timeout.timeout(30) do - (1..).lazy.parallel_each { |i| i }.first(5) - end - end - end - - context "with 10 threads" do - let(:threads) { 10 } - it_behaves_like "common parallel API tests" - end - - context "with 0 threads" do - let(:threads) { 0 } - it_behaves_like "common parallel API tests" - end - - context "with 1 threads" do - let(:threads) { 1 } - it_behaves_like "common parallel API tests" - end - - context "flat_each" do - it "runs each over items which are nested one level" do - sum = 0 - [ [ 1, 2 ], [3, 4]].flat_each { |i| sum += i } - expect(sum).to eql(10) - end - end -end diff --git a/bundle/ruby/3.2.0/gems/claide-1.1.0/.github/workflows/ci.yml b/bundle/ruby/3.2.0/gems/claide-1.1.0/.github/workflows/ci.yml deleted file mode 100644 index 54e1f058..00000000 --- a/bundle/ruby/3.2.0/gems/claide-1.1.0/.github/workflows/ci.yml +++ /dev/null @@ -1,45 +0,0 @@ -name: ci - -on: - pull_request: - - push: - branches: - - master - - '*-stable' - -jobs: - ci: - name: Ruby ${{ matrix.ruby.name }} - - runs-on: ubuntu-20.04 - - strategy: - fail-fast: false - - matrix: - ruby: - - { name: "2.3", value: 2.3.8 } - - { name: "2.4", value: 2.4.10 } - - { name: "2.5", value: 2.5.9 } - - { name: "2.6", value: 2.6.9 } - - { name: "2.7", value: 2.7.5 } - - { name: "3.0", value: 3.0.3 } - - { name: "3.1", value: 3.1.0 } - - steps: - - uses: actions/checkout@v2 - - - name: Setup ruby - uses: ruby/setup-ruby@v1 - with: - ruby-version: ${{ matrix.ruby.value }} - bundler-cache: true - - - name: Run Test - run: bundle exec rake spec - - - name: Test & publish code coverage - uses: paambaati/codeclimate-action@v3.0.0 - env: - CC_TEST_REPORTER_ID: 46c8b29dd6711f35704e7c5a541486cbbf2cff8b2df8ce755bfc09917d3c1cbb diff --git a/bundle/ruby/3.2.0/gems/claide-1.1.0/.gitignore b/bundle/ruby/3.2.0/gems/claide-1.1.0/.gitignore deleted file mode 100644 index 001d28f1..00000000 --- a/bundle/ruby/3.2.0/gems/claide-1.1.0/.gitignore +++ /dev/null @@ -1,17 +0,0 @@ -*.gem -*.rbc -.bundle -.config -.yardoc -InstalledFiles -_yardoc -coverage -doc/ -lib/bundler/man -pkg -rdoc -spec/reports -test/tmp -test/version_tmp -tmp -.idea diff --git a/bundle/ruby/3.2.0/gems/claide-1.1.0/.kick b/bundle/ruby/3.2.0/gems/claide-1.1.0/.kick deleted file mode 100644 index 0686cce6..00000000 --- a/bundle/ruby/3.2.0/gems/claide-1.1.0/.kick +++ /dev/null @@ -1,30 +0,0 @@ -recipe :ruby - -Kicker::Recipes::Ruby.runner_bin = 'bundle exec bacon --quiet' - -process do |files| - specs = files.take_and_map do |file| - if file =~ %r{lib/[^/]*/(.+?)\.rb$} - s = Dir.glob("spec/**/#{File.basename(file, '.rb')}_spec.rb") - s.uniq unless s.empty? - end - end - Kicker::Recipes::Ruby.run_tests(specs) -end - -# Have written this so many times, probably should make a recipe out of it. -process do |files| - files.each do |file| - case file - when 'Gemfile' - files.delete(file) - execute 'bundle install' - end - end -end - -recipe :ignore -ignore(/.*\/?tags/) -ignore(/.*\/?\.git/) -ignore(/^tmp/) - diff --git a/bundle/ruby/3.2.0/gems/claide-1.1.0/.rubocop.yml b/bundle/ruby/3.2.0/gems/claide-1.1.0/.rubocop.yml deleted file mode 100644 index 3ef9f694..00000000 --- a/bundle/ruby/3.2.0/gems/claide-1.1.0/.rubocop.yml +++ /dev/null @@ -1,6 +0,0 @@ -require: - - rubocop-performance - -inherit_from: - - .rubocop_todo.yml - - .rubocop_cocoapods.yml diff --git a/bundle/ruby/3.2.0/gems/claide-1.1.0/.rubocop_cocoapods.yml b/bundle/ruby/3.2.0/gems/claide-1.1.0/.rubocop_cocoapods.yml deleted file mode 100644 index 4702a3ef..00000000 --- a/bundle/ruby/3.2.0/gems/claide-1.1.0/.rubocop_cocoapods.yml +++ /dev/null @@ -1,151 +0,0 @@ -AllCops: - Include: - - ./Rakefile - - ./Gemfile - - ./*.gemspec - Exclude: - - ./spec/fixtures/**/* - - ./vendor/bundle/**/* - -# At the moment not ready to be used -# https://github.com/bbatsov/rubocop/issues/947 -Style/Documentation: - Enabled: false - -#- CocoaPods -----------------------------------------------------------------# - -# We adopted raise instead of fail. -Style/SignalException: - EnforcedStyle: only_raise - -# They are idiomatic -Lint/AssignmentInCondition: - Enabled: false - -# Allow backticks -Style/AsciiComments: - Enabled: false - -# Indentation clarifies logic branches in implementations -Style/IfUnlessModifier: - Enabled: false - -# No enforced convention here. -Style/SingleLineBlockParams: - Enabled: false - -# We only add the comment when needed. -Style/Encoding: - Enabled: false - -# Having these make it easier to *not* forget to add one when adding a new -# value and you can simply copy the previous line. -Style/TrailingCommaInArguments: - EnforcedStyleForMultiline: comma - -Style/TrailingCommaInArrayLiteral: - EnforcedStyleForMultiline: comma - -Style/TrailingCommaInHashLiteral: - EnforcedStyleForMultiline: comma - -Layout/MultilineOperationIndentation: - EnforcedStyle: indented - -# Clashes with CLAide Command#validate! -Style/GuardClause: - Enabled: false - -# Not always desirable: lib/claide/command/plugins_helper.rb:12:15 -Style/Next: - Enabled: false - -# Arbitrary max lengths for classes simply do not work and enabling this will -# lead to a never ending stream of annoyance and changes. -Metrics/ClassLength: - Enabled: false - -# Arbitrary max lengths for modules simply do not work and enabling this will -# lead to a never ending stream of annoyance and changes. -Metrics/ModuleLength: - Enabled: false - -# Arbitrary max lengths for methods simply do not work and enabling this will -# lead to a never ending stream of annoyance and changes. -Metrics/MethodLength: - Enabled: false - -# No enforced convention here. -Metrics/BlockNesting: - Enabled: false - -# It will be obvious which code is complex, Rubocop should only lint simple -# rules for us. -Metrics/AbcSize: - Enabled: false - -# It will be obvious which code is complex, Rubocop should only lint simple -# rules for us. -Metrics/CyclomaticComplexity: - Enabled: false - -# It will be obvious which code is complex, Rubocop should only lint simple -# rules for us. -Metrics/PerceivedComplexity: - Enabled: false - -#- CocoaPods support for Ruby 1.8.7 ------------------------------------------# - -Style/HashSyntax: - EnforcedStyle: hash_rockets - -Style/Lambda: - Enabled: false - -Layout/DotPosition: - EnforcedStyle: trailing - -Style/EachWithObject: - Enabled: false - -Style/SpecialGlobalVars: - Enabled: false - -#- CocoaPods specs -----------------------------------------------------------# - -# Allow for `should.match /regexp/`. -Lint/AmbiguousRegexpLiteral: - Exclude: - - spec/**/* - -Performance/RedundantMatch: - Exclude: - - spec/**/* - -# Allow `object.should == object` syntax. -Lint/Void: - Exclude: - - spec/**/* - -Style/ClassAndModuleChildren: - Exclude: - - spec/**/* - -Lint/UselessComparison: - Exclude: - - spec/**/* - -Lint/RaiseException: - Enabled: false - -Lint/StructNewOverride: - Enabled: false - -Style/HashEachMethods: - Enabled: false - -Style/HashTransformKeys: - Enabled: false - -Style/HashTransformValues: - Enabled: false diff --git a/bundle/ruby/3.2.0/gems/claide-1.1.0/.rubocop_todo.yml b/bundle/ruby/3.2.0/gems/claide-1.1.0/.rubocop_todo.yml deleted file mode 100644 index 926b32c0..00000000 --- a/bundle/ruby/3.2.0/gems/claide-1.1.0/.rubocop_todo.yml +++ /dev/null @@ -1,70 +0,0 @@ -# This configuration was generated by -# `rubocop --auto-gen-config` -# on 2016-03-09 18:40:14 -0600 using RuboCop version 0.38.0. -# The point is for the user to remove these configuration records -# one by one as the offenses are removed from the code base. -# Note that changes in the inspected code, or installation of new -# versions of RuboCop, may require this file to be generated again. - -# Offense count: 3 -Lint/IneffectiveAccessModifier: - Exclude: - - 'lib/claide/command.rb' - -# Offense count: 1 -# Cop supports --auto-correct. -Lint/RedundantCopDisableDirective: - Exclude: - - 'spec/command/banner_spec.rb' - -# Offense count: 1 -Performance/FixedSize: - Exclude: - - 'lib/claide/command/banner.rb' - -# Offense count: 1 -# Cop supports --auto-correct. -Performance/StringReplacement: - Exclude: - - 'lib/claide/command/banner.rb' - -# Offense count: 8 -# Cop supports --auto-correct. -# Configuration parameters: EnforcedStyle, SupportedStyles. -# SupportedStyles: prefer_alias, prefer_alias_method -Style/Alias: - Exclude: - - 'lib/claide/argument.rb' - - 'lib/claide/command.rb' - -# Offense count: 1 -# Cop supports --auto-correct. -# Configuration parameters: SingleLineConditionsOnly. -Style/ConditionalAssignment: - Exclude: - - 'lib/claide/command/banner.rb' - -# Offense count: 1 -Style/IfInsideElse: - Exclude: - - 'lib/claide/command.rb' - -# Offense count: 9 -# Cop supports --auto-correct. -Style/MutableConstant: - Exclude: - - 'lib/claide/ansi.rb' - - 'lib/claide/argument.rb' - - 'lib/claide/command.rb' - -# Offense count: 1 -# Cop supports --auto-correct. -Style/ParallelAssignment: - Exclude: - - 'lib/claide/command/argument_suggester.rb' - -# Offense count: 1 -# Cop supports --auto-correct. -Style/RedundantInterpolation: - Exclude: - - 'lib/claide/command/argument_suggester.rb' diff --git a/bundle/ruby/3.2.0/gems/claide-1.1.0/.yardopts b/bundle/ruby/3.2.0/gems/claide-1.1.0/.yardopts deleted file mode 100644 index a647564e..00000000 --- a/bundle/ruby/3.2.0/gems/claide-1.1.0/.yardopts +++ /dev/null @@ -1 +0,0 @@ ---markup markdown --protected --charset=utf-8 lib diff --git a/bundle/ruby/3.2.0/gems/claide-1.1.0/CHANGELOG.md b/bundle/ruby/3.2.0/gems/claide-1.1.0/CHANGELOG.md deleted file mode 100644 index 2fd0d623..00000000 --- a/bundle/ruby/3.2.0/gems/claide-1.1.0/CHANGELOG.md +++ /dev/null @@ -1,265 +0,0 @@ -# CLAide Changelog - -## 1.1.0 (2022-01-12) - -##### Enhancements - -* None. - -##### Bug Fixes - -* None. - - -## 1.0.3 (2019-08-02) - -##### Enhancements - -* None. - -##### Bug Fixes - -* Correctly handle `--help` flags when using `argv.remainder!` after initialization - [Eric Amorde](https://github.com/amorde), - [tripleCC](https://github.com/tripleCC) - [#87](https://github.com/CocoaPods/CLAide/pull/87) - - -## 1.0.2 (2017-06-06) - -##### Enhancements - -* None. - -##### Bug Fixes - -* Avoid a method redefinition warning when requiring `claide`. - [Samuel Giddins](https://github.com/segiddins) - - -## 1.0.1 (2016-10-10) - -##### Bug Fixes - -* Adds a fix for older versions of Rubygems when CLAide crashes. - [Samuel Giddins](https://github.com/segiddins) - [#73](https://github.com/CocoaPods/CLAide/issues/73) - - -## 1.0.0 (2016-05-10) - -##### Enhancements - -* None. - -##### Bug Fixes - -* None. - - -## 1.0.0.rc.1 (2016-04-30) - -##### Enhancements - -* None. - -##### Bug Fixes - -* Fix circular require of `claide/ansi` in `claide/ansi/string_escaper`. - [bootstraponline](https://github.com/bootstraponline) - [#66](https://github.com/CocoaPods/CLAide/issues/66) - - -## 1.0.0.beta.3 (2016-03-15) - -##### Enhancements - -* Added `Command.option` to easily add a single option to a command class. - [Samuel Giddins](https://github.com/segiddins) - [#64](https://github.com/CocoaPods/CLAide/issues/64) - -##### Bug Fixes - -* None. - - -## 1.0.0.beta.2 (2016-03-08) - -##### Bug Fixes - -* Attempt to get the terminal width without shelling out to `tput`. - [Samuel Giddins](https://github.com/segiddins) - - -## 1.0.0.beta.1 (2015-12-30) - -##### Bug Fixes - -* The plugin manager will now properly activate plugin gems, ensuring all of - their files are requirable. - [Samuel Giddins](https://github.com/segiddins) - - -## 0.9.1 (2015-07-05) - -##### Bug Fixes - -* Fix a regression when contradictory flags were given in `ARGV` -- the last - flag given will once again be the value returned, and all entries for that key - are removed. - [Samuel Giddins](https://github.com/segiddins) - - -## 0.9.0 (2015-07-02) - -##### Enhancements - -* Properly parse everything in `ARGV` after `--` as an argument. - [Samuel Giddins](https://github.com/segiddins) - [#48](https://github.com/CocoaPods/CLAide/issues/48) - -* Allow parsing an option that occurs multiple times. - [Samuel Giddins](https://github.com/segiddins) - - -## 0.8.2 (2015-06-27) - -##### Enhancements - -* Add `ARGV#remainder!`, which returns all the remaining arguments, deleting - them from the receiver. - [Samuel Giddins](https://github.com/segiddins) - - -## 0.8.1 (2015-02-25) - -###### Bug Fixes - -* Silence errors while loading plugins. - [Clément Beffa](https://github.com/cl3m) - [#44](https://github.com/CocoaPods/CLAide/issues/44) - - -## 0.8.0 (2014-12-25) - -###### Breaking - -* Removes the `ShellCompletionHelper` along with completion script for ZSH. This is out of the scope of CLAide. - [Eloy Durán](https://github.com/alloy) - [#43](https://github.com/CocoaPods/CLAide/issues/43) - -* Various refactoring replacing “Helper” API’s which specialised classes such as ArgumentSuggester, TextWrapper and PluginManager. - [Eloy Durán](https://github.com/alloy) - -###### Enhancements - -* Added convenience method to invoke commands more easily. - [Olivier Halligon](https://github.com/AliSoftware) - [#33](https://github.com/CocoaPods/CLAide/issues/40) - -* Changes to the PluginManager to handle multiple plugin prefixes, which by default adds the `clad` plugin prefix. - [Eloy Durán](https://github.com/alloy) - -## 0.7.0 (2014-09-11) - -###### Breaking - -* Plugins are now expected to include the `cocoapods-plugin.rb` file in - `./lib`. - [Fabio Pelosin](https://github.com/fabiopelosin) - [#28](https://github.com/CocoaPods/CLAide/pull/28) - -###### Enhancements - -* Improved messages for exceptions generated by plugins. - [Fabio Pelosin](https://github.com/fabiopelosin) - [#28](https://github.com/CocoaPods/CLAide/pull/28) - -* Use the Argument class to describe arguments. - [Olivier Halligon](https://github.com/AliSoftware) - [#33](https://github.com/CocoaPods/CLAide/issues/33) - -* Support for argument alternatives and repeatable arguments (ellipsis). - [Olivier Halligon](https://github.com/AliSoftware) - [#33](https://github.com/CocoaPods/CLAide/issues/33) - -* No stack trace if --help and --vebose are combined. - [Marius Rackwitz](https://github.com/mrackwitz) - [#36](https://github.com/CocoaPods/CLAide/issues/36) - - -## 0.6.1 (2014-05-20) - -###### Bug Fixes - -* Respect the ANSI flag for the help banner. - [Fabio Pelosin](https://github.com/fabiopelosin) - [#34](https://github.com/CocoaPods/CLAide/issues/34) - -* Underline the colon of the titles of the help banner. - [Fabio Pelosin](https://github.com/fabiopelosin) - -## 0.6.0 (2014-05-19) - -###### Enhancements - -* Use an array to describe arguments. - [Fabio Pelosin][fabiopelosin] - [#26](https://github.com/CocoaPods/CLAide/issues/26) - -* Improved layout and contents of help banner - [Fabio Pelosin](https://github.com/fabiopelosin) - [#25](https://github.com/CocoaPods/CLAide/pull/25) - -* Colorize option, arguments, and example commands in the help banner. - [Fabio Pelosin](https://github.com/fabiopelosin) - [#12](https://github.com/CocoaPods/CLAide/issues/12) - -* Add support for ANSI escape sequences. - [Fabio Pelosin](https://github.com/fabiopelosin) - [#17](https://github.com/CocoaPods/CLAide/issues/17) - [#20](https://github.com/CocoaPods/CLAide/pull/20) - [#24](https://github.com/CocoaPods/CLAide/pull/24) - -* Add support for completion script - [Fabio Pelosin](https://github.com/fabiopelosin) - [#19](https://github.com/CocoaPods/CLAide/pull/19) - -* Add support for version logic via the introduction of the `version` class - attribute to the `CLAide::Commmand` class. If a value for the attribute is - specified the `--version` flag is added. The `--version --verbose` flags - include the version of the plugins in the output. - [Fabio Pelosin](https://github.com/fabiopelosin) - [#13](https://github.com/CocoaPods/CLAide/issues/13) - [#14](https://github.com/CocoaPods/CLAide/issues/14) - -## 0.5.0 (2014-03-26) - -###### Enhancements - -* Add a `ignore_in_command_lookup` option to commands, which makes it possible - to have anonymous command classes that are or only meant to provide common - functionality, but are otherwise completely ignored during parsing, command - lookup, and help banner printing. - [Eloy Durán](https://github.com/alloy) - -* Deprecate the `color` option in favor of `ansi`. This is more abstract and - can be used for commands that only prettify output by using, for instance, - the bold ANSI code. This applies to the `CLAide` APIs as well. - [Eloy Durán](https://github.com/alloy) - -* Add more hooks that allow the user to customize how to prettify output. - [Eloy Durán](https://github.com/alloy) - -* Word wrap option descriptions to terminal width. - [Eloy Durán](https://github.com/alloy) - [#6](https://github.com/CocoaPods/CLAide/issues/6) - - -## 0.4.0 (2013-11-14) - -###### Enhancements - -* Added support for plugins. - [Les Hill](https://github.com/leshill) - [#1](https://github.com/CocoaPods/CLAide/pull/1) diff --git a/bundle/ruby/3.2.0/gems/claide-1.1.0/Gemfile b/bundle/ruby/3.2.0/gems/claide-1.1.0/Gemfile deleted file mode 100644 index c33e9bcf..00000000 --- a/bundle/ruby/3.2.0/gems/claide-1.1.0/Gemfile +++ /dev/null @@ -1,22 +0,0 @@ -source 'https://rubygems.org' - -gemspec - -gem 'rake' - -group :development do - gem 'kicker' - gem 'colored' # for examples -end - -group :spec do - gem 'bacon' - gem 'json', '< 3' - gem 'mocha-on-bacon' - gem 'prettybacon' - - gem 'parallel', '<= 1.19.2' - gem 'rubocop', '<= 0.81.0' - gem 'rubocop-performance', '<= 1.5.2', :require => nil - gem 'simplecov' -end diff --git a/bundle/ruby/3.2.0/gems/claide-1.1.0/Gemfile.lock b/bundle/ruby/3.2.0/gems/claide-1.1.0/Gemfile.lock deleted file mode 100644 index 22fe1a97..00000000 --- a/bundle/ruby/3.2.0/gems/claide-1.1.0/Gemfile.lock +++ /dev/null @@ -1,79 +0,0 @@ -PATH - remote: . - specs: - claide (1.1.0) - -GEM - remote: https://rubygems.org/ - specs: - ast (2.4.2) - bacon (1.2.0) - colored (1.2) - docile (1.1.5) - ffi (1.14.2) - jaro_winkler (1.5.4) - json (2.5.1) - kicker (3.0.0) - listen (~> 1.3.0) - notify (~> 0.5.2) - listen (1.3.1) - rb-fsevent (>= 0.9.3) - rb-inotify (>= 0.9) - rb-kqueue (>= 0.2) - metaclass (0.0.4) - mocha (1.1.0) - metaclass (~> 0.0.1) - mocha-on-bacon (0.2.2) - mocha (>= 0.13.0) - multi_json (1.10.1) - notify (0.5.2) - parallel (1.19.2) - parser (3.1.0.0) - ast (~> 2.4.1) - prettybacon (0.0.2) - bacon (~> 1.2) - rainbow (3.0.0) - rake (10.3.2) - rb-fsevent (0.9.4) - rb-inotify (0.9.5) - ffi (>= 0.5.0) - rb-kqueue (0.2.3) - ffi (>= 0.5.0) - rexml (3.2.5) - rubocop (0.81.0) - jaro_winkler (~> 1.5.1) - parallel (~> 1.10) - parser (>= 2.7.0.1) - rainbow (>= 2.2.2, < 4.0) - rexml - ruby-progressbar (~> 1.7) - unicode-display_width (>= 1.4.0, < 2.0) - rubocop-performance (1.5.2) - rubocop (>= 0.71.0) - ruby-progressbar (1.11.0) - simplecov (0.9.1) - docile (~> 1.1.0) - multi_json (~> 1.0) - simplecov-html (~> 0.8.0) - simplecov-html (0.8.0) - unicode-display_width (1.8.0) - -PLATFORMS - ruby - -DEPENDENCIES - bacon - claide! - colored - json (< 3) - kicker - mocha-on-bacon - parallel (<= 1.19.2) - prettybacon - rake - rubocop (<= 0.81.0) - rubocop-performance (<= 1.5.2) - simplecov - -BUNDLED WITH - 2.3.4 diff --git a/bundle/ruby/3.2.0/gems/claide-1.1.0/LICENSE b/bundle/ruby/3.2.0/gems/claide-1.1.0/LICENSE deleted file mode 100644 index 7c1df537..00000000 --- a/bundle/ruby/3.2.0/gems/claide-1.1.0/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -Copyright (c) 2011 - 2012 Eloy Durán -Copyright (c) 2012 Fabio Pelosin - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - diff --git a/bundle/ruby/3.2.0/gems/claide-1.1.0/README.md b/bundle/ruby/3.2.0/gems/claide-1.1.0/README.md deleted file mode 100644 index f4ed63d9..00000000 --- a/bundle/ruby/3.2.0/gems/claide-1.1.0/README.md +++ /dev/null @@ -1,115 +0,0 @@ -# Hi, I’m Claide, your command-line tool aide. - -[![Build Status](https://img.shields.io/github/workflow/status/CocoaPods/claide/ci)](https://github.com/CocoaPods/claide/actions) -[![Gem Version](https://img.shields.io/gem/v/claide)](https://rubygems.org/gems/claide) - -I was born out of a need for a _simple_ option and command parser, while still -providing an API that allows you to quickly create a full featured command-line -interface. - -## Install - -``` -$ [sudo] gem install claide -``` - - -## Usage - -For full documentation, on the API of CLAide, visit [rubydoc.info][docs]. - - -### Argument handling - -At its core, a library, such as myself, needs to parse the parameters specified -by the user. - -Working with parameters is done through the `CLAide::ARGV` class. It takes an -array of parameters and parses them as either flags, options, or arguments. - -| Parameter | Description | -| :---: | :---: | -| `--milk`, `--no-milk` | A boolean ‘flag’, which may be negated. | -| `--sweetener=honey` | An ‘option’ consists of a key, a ‘=’, and a value. | -| `tea` | An ‘argument’ is just a value. | - - -Accessing flags, options, and arguments, with the following methods, will also -remove the parameter from the remaining unprocessed parameters. - -```ruby -argv = CLAide::ARGV.new(['tea', '--no-milk', '--sweetener=honey']) -argv.shift_argument # => 'tea' -argv.shift_argument # => nil -argv.flag?('milk') # => false -argv.flag?('milk') # => nil -argv.option('sweetener') # => 'honey' -argv.option('sweetener') # => nil -``` - - -In case the requested flag or option is not present, `nil` is returned. You can -specify a default value to be used as the optional second method parameter: - -```ruby -argv = CLAide::ARGV.new(['tea']) -argv.flag?('milk', true) # => true -argv.option('sweetener', 'sugar') # => 'sugar' -``` - - -Unlike flags and options, accessing all of the arguments can be done in either -a preserving or mutating way: - -```ruby -argv = CLAide::ARGV.new(['tea', 'coffee']) -argv.arguments # => ['tea', 'coffee'] -argv.arguments! # => ['tea', 'coffee'] -argv.arguments # => [] -``` - - -### Command handling - -Commands are actions that a tool can perform. Every command is represented by -its own command class. - -Commands may be nested, in which case they inherit from the ‘super command’ -class. Some of these nested commands may not actually perform any work -themselves, but are rather used as ‘super commands’ _only_, in which case they -are ‘abtract commands’. - -Running commands is typically done through the `CLAide::Command.run(argv)` -method, which performs the following three steps: - -1. Parses the given parameters, finds the command class matching the parameters, - and instantiates it with the remaining parameters. It’s each nested command - class’ responsibility to remove the parameters it handles from the remaining - parameters, _before_ calling the `super` implementation. - -2. Asks the command instance to validate its parameters, but only _after_ - calling the `super` implementation. The `super` implementation will show a - help banner in case the `--help` flag is specified, not all parameters were - removed from the parameter list, or the command is an abstract command. - -3. Calls the `run` method on the command instance, where it may do its work. - -4. Catches _any_ uncaught exception and shows it to user in a meaningful way. - * A `Help` exception triggers a help banner to be shown for the command. - * A exception that includes the `InformativeError` module will show _only_ - the message, unless disabled with the `--verbose` flag; and in red, - depending on the color configuration. - * Any other type of exception will be passed to `Command.report_error(error)` - for custom error reporting (such as the one in [CocoaPods][report-error]). - -In case you want to call commands from _inside_ other commands, you should use -the `CLAide::Command.parse(argv)` method to retrieve an instance of the command -and call `run` on it. Unless you are using user-supplied parameters, there -should not be a need to validate the parameters. - -See the [example][example] for a illustration of how to define commands. - - -[docs]: http://www.rubydoc.info/github/CocoaPods/CLAide/index -[example]: https://github.com/CocoaPods/CLAide/blob/master/examples/make.rb -[report-error]: https://github.com/CocoaPods/CocoaPods/blob/054fe5c861d932219ec40a91c0439a7cfc3a420c/lib/cocoapods/command.rb#L36 diff --git a/bundle/ruby/3.2.0/gems/claide-1.1.0/Rakefile b/bundle/ruby/3.2.0/gems/claide-1.1.0/Rakefile deleted file mode 100644 index dc220705..00000000 --- a/bundle/ruby/3.2.0/gems/claide-1.1.0/Rakefile +++ /dev/null @@ -1,57 +0,0 @@ -# encoding: utf-8 - -#-- Bootstrap --------------------------------------------------------------# - -desc 'Initializes your working copy to run the specs' -task :bootstrap do - if system('which bundle') - title 'Installing gems' - sh 'bundle install' - else - $stderr.puts "\033[0;31m" \ - "[!] Please install the bundler gem manually:\n" \ - ' $ [sudo] gem install bundler' \ - "\e[0m" - exit 1 - end -end - -begin - require 'bundler/gem_tasks' - task :default => :spec - - #-- Specs ------------------------------------------------------------------# - - desc 'Run specs' - task :spec do - title 'Running Unit Tests' - files = FileList['spec/**/*_spec.rb'].shuffle.join(' ') - sh "bundle exec bacon #{files}" - - Rake::Task['rubocop'].invoke - end - - #-- Rubocop ----------------------------------------------------------------# - - desc 'Check code against RuboCop rules' - task :rubocop do - sh 'bundle exec rubocop' - end - -rescue LoadError - $stderr.puts "\033[0;31m" \ - '[!] Some Rake tasks haven been disabled because the environment' \ - ' couldn’t be loaded. Be sure to run `rake bootstrap` first.' \ - "\e[0m" -end - -#-- Helpers ------------------------------------------------------------------# - -def title(title) - cyan_title = "\033[0;36m#{title}\033[0m" - puts - puts '-' * 80 - puts cyan_title - puts '-' * 80 - puts -end diff --git a/bundle/ruby/3.2.0/gems/claide-1.1.0/claide.gemspec b/bundle/ruby/3.2.0/gems/claide-1.1.0/claide.gemspec deleted file mode 100644 index 1f298d31..00000000 --- a/bundle/ruby/3.2.0/gems/claide-1.1.0/claide.gemspec +++ /dev/null @@ -1,23 +0,0 @@ -# -*- encoding: utf-8 -*- -$:.unshift File.expand_path('../lib', __FILE__) -require File.expand_path('../lib/claide/gem_version', __FILE__) - -Gem::Specification.new do |s| - s.name = "claide" - s.version = CLAide::VERSION - s.license = "MIT" - s.email = ["eloy.de.enige@gmail.com", "fabiopelosin@gmail.com"] - s.homepage = "https://github.com/CocoaPods/CLAide" - s.authors = ["Eloy Duran", "Fabio Pelosin"] - - s.summary = "A small command-line interface framework." - - s.files = `git ls-files -z`.split("\0").reject { |f| f =~ /\A(spec|examples)/i } - - ## Make sure you can build the gem on older versions of RubyGems too: - s.rubygems_version = "1.6.2" - s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version= - s.specification_version = 3 if s.respond_to? :specification_version - - s.required_ruby_version = ">= 2.3.0" -end diff --git a/bundle/ruby/3.2.0/gems/claide-1.1.0/lib/claide.rb b/bundle/ruby/3.2.0/gems/claide-1.1.0/lib/claide.rb deleted file mode 100644 index 25d2c755..00000000 --- a/bundle/ruby/3.2.0/gems/claide-1.1.0/lib/claide.rb +++ /dev/null @@ -1,13 +0,0 @@ -# encoding: utf-8 - -# The mods of interest are {CLAide::ARGV}, {CLAide::Command}, and -# {CLAide::InformativeError} -# -module CLAide - require 'claide/ansi' - require 'claide/argument' - require 'claide/argv' - require 'claide/command' - require 'claide/help' - require 'claide/informative_error' -end diff --git a/bundle/ruby/3.2.0/gems/claide-1.1.0/lib/claide/ansi.rb b/bundle/ruby/3.2.0/gems/claide-1.1.0/lib/claide/ansi.rb deleted file mode 100644 index 0839ed6a..00000000 --- a/bundle/ruby/3.2.0/gems/claide-1.1.0/lib/claide/ansi.rb +++ /dev/null @@ -1,126 +0,0 @@ -# encoding: utf-8 - -require 'claide/ansi/cursor' -require 'claide/ansi/graphics' - -module CLAide - # Provides support for ANSI Escape sequences - # - # For more information see: - # - # - http://ascii-table.com/ansi-escape-sequences.php - # - http://en.wikipedia.org/wiki/ANSI_escape_code - # - # This functionality has been inspired and derived from the following gems: - # - # - colored - # - colorize - # - class ANSI - extend Cursor - extend Graphics - - class << self - # @return [Bool] Wether the string mixin should be disabled to return the - # original string. This method is intended to offer a central location - # where to disable ANSI logic without needed to implement conditionals - # across the code base of clients. - # - # @example - # - # "example".ansi.yellow #=> "\e[33mexample\e[39m" - # ANSI.disabled = true - # "example".ansi.yellow #=> "example" - # - attr_accessor :disabled - end - - # @return [Hash{Symbol => Fixnum}] The text attributes codes by their - # English name. - # - TEXT_ATTRIBUTES = { - :bold => 1, - :underline => 4, - :blink => 5, - :reverse => 7, - :hidden => 8, - } - - # @return [Hash{Symbol => Fixnum}] The codes to disable a text attribute by - # their name. - # - TEXT_DISABLE_ATTRIBUTES = { - :bold => 21, - :underline => 24, - :blink => 25, - :reverse => 27, - :hidden => 28, - } - - # Return [String] The escape sequence to reset the graphics. - # - RESET_SEQUENCE = "\e[0m" - - # @return [Hash{Symbol => Fixnum}] The colors codes by their English name. - # - COLORS = { - :black => 0, - :red => 1, - :green => 2, - :yellow => 3, - :blue => 4, - :magenta => 5, - :cyan => 6, - :white => 7, - } - - # Return [String] The escape sequence for the default foreground color. - # - DEFAULT_FOREGROUND_COLOR = "\e[39m" - - # Return [String] The escape sequence for the default background color. - # - DEFAULT_BACKGROUND_COLOR = "\e[49m" - - # @return [Fixnum] The code of a key given the map. - # - # @param [Symbol] key - # The key for which the code is needed. - # - # @param [Hash{Symbol => Fixnum}] map - # A hash which associates each code to each key. - # - # @raise If the key is not provided. - # @raise If the key is not present in the map. - # - def self.code_for_key(key, map) - unless key - raise ArgumentError, 'A key must be provided' - end - code = map[key] - unless code - raise ArgumentError, "Unsupported key: `#{key}`" - end - code - end - end -end - -#-- String mixin -------------------------------------------------------------# - -require 'claide/ansi/string_escaper' - -class String - # @return [StringEscaper] An object which provides convenience methods to - # wrap the receiver in ANSI sequences. - # - # @example - # - # "example".ansi.yellow #=> "\e[33mexample\e[39m" - # "example".ansi.on_red #=> "\e[41mexample\e[49m" - # "example".ansi.bold #=> "\e[1mexample\e[21m" - # - def ansi - CLAide::ANSI::StringEscaper.new(self) - end -end diff --git a/bundle/ruby/3.2.0/gems/claide-1.1.0/lib/claide/ansi/cursor.rb b/bundle/ruby/3.2.0/gems/claide-1.1.0/lib/claide/ansi/cursor.rb deleted file mode 100644 index acfd5b6e..00000000 --- a/bundle/ruby/3.2.0/gems/claide-1.1.0/lib/claide/ansi/cursor.rb +++ /dev/null @@ -1,69 +0,0 @@ -# encoding: utf-8 - -module CLAide - class ANSI - # Provides support for generating escape sequences relative to the position - # of the cursor and to erase parts of text. - # - module Cursor - # @return [String] The escape sequence to set the cursor at the - # given line. - # - # @param [Fixnum] line - # The line where to place the cursor. - # - # @param [Fixnum] column - # The column where to place the cursor. - # - def self.set_cursor_position(line = 0, column = 0) - "\e[#{line};#{column}H" - end - - # @return [String] The escape sequence to set the cursor at the - # given line. - # - # @param [Fixnum] lines - # The amount of lines the cursor should be moved to. - # Negative values indicate up direction and positive ones - # down direction. - # - # @param [Fixnum] columns - # The amount of columns the cursor should be moved to. - # Negative values indicate left direction and positive ones - # right direction. - # - def self.move_cursor(lines, columns = 0) - lines_code = lines < 0 ? 'A' : 'B' - columns_code = columns > 0 ? 'C' : 'D' - "\e[#{lines.abs}#{lines_code};#{columns.abs}#{columns_code}" - end - - # @return [String] The escape sequence to save the cursor position. - # - def self.save_cursor_position - "\e[s" - end - - # @return [String] The escape sequence to restore the cursor to the - # previously saved position. This sequence also clears all the - # output after the position. - # - def self.restore_cursor_position - "\e[u" - end - - # @return [String] The escape sequence to erase the display. - # - def self.erase_display - "\e[2J" - end - - # @return [String] The escape sequence to erase a line form the - # cursor position to then end. - # - def self.erase_line - "\e[K" - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/claide-1.1.0/lib/claide/ansi/graphics.rb b/bundle/ruby/3.2.0/gems/claide-1.1.0/lib/claide/ansi/graphics.rb deleted file mode 100644 index e5c2d15b..00000000 --- a/bundle/ruby/3.2.0/gems/claide-1.1.0/lib/claide/ansi/graphics.rb +++ /dev/null @@ -1,72 +0,0 @@ -# encoding: utf-8 - -module CLAide - class ANSI - # Provides support for generating escape sequences relative to the graphic - # mode. - # - module Graphics - # @return [String] The escape sequence for a text attribute. - # - # @param [Symbol] key - # The name of the text attribute. - # - def self.text_attribute(key) - code = ANSI.code_for_key(key, TEXT_ATTRIBUTES) - graphics_mode(code) - end - - # @return [String] The escape sequence for a foreground color. - # - # @param [Symbol] key - # The name of the color. - # - def self.foreground_color(key) - code = ANSI.code_for_key(key, COLORS) + 30 - graphics_mode(code) - end - - # @return [String] The escape sequence for a background color. - # - # @param [Symbol] key - # The name of the color. - # - def self.background_color(key) - code = ANSI.code_for_key(key, COLORS) + 40 - graphics_mode(code) - end - - # @return [String] The escape sequence for a foreground color using the - # xterm-256 format. - # - # @param [Fixnum] color - # The value of the color. - # - def self.foreground_color_256(color) - code = [38, 5, color] - graphics_mode(code) - end - - # @return [String] The escape sequence for a background color using the - # xterm-256 format. - # - # @param [Fixnum] color - # The value of the color. - # - def self.background_color_256(color) - code = [48, 5, color] - graphics_mode(code) - end - - # @return [String] The escape sequence for a single or a list of codes. - # - # @param [Fixnum, Array] codes - # The code(s). - # - def self.graphics_mode(codes) - codes = Array(codes) - "\e[#{codes.join(';')}m" - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/claide-1.1.0/lib/claide/ansi/string_escaper.rb b/bundle/ruby/3.2.0/gems/claide-1.1.0/lib/claide/ansi/string_escaper.rb deleted file mode 100644 index b6f461c4..00000000 --- a/bundle/ruby/3.2.0/gems/claide-1.1.0/lib/claide/ansi/string_escaper.rb +++ /dev/null @@ -1,79 +0,0 @@ -module CLAide - class ANSI - # Provides support to wrap strings in ANSI sequences according to the - # `ANSI.disabled` setting. - # - class StringEscaper < String - # @param [String] string The string to wrap. - # - def initialize(string) - super - end - - # @return [StringEscaper] Wraps a string in the given ANSI sequences, - # taking care of handling existing sequences for the same - # family of attributes (i.e. attributes terminated by the - # same sequence). - # - def wrap_in_ansi_sequence(open, close) - if ANSI.disabled - self - else - gsub!(close, open) - insert(0, open).insert(-1, close) - end - end - - # @return [StringEscaper] - # - # @param [Array] keys - # One or more keys corresponding to ANSI codes to apply to the - # string. - # - def apply(*keys) - keys.flatten.each do |key| - send(key) - end - self - end - - ANSI::COLORS.each_key do |key| - # Defines a method returns a copy of the receiver wrapped in an ANSI - # sequence for each foreground color (e.g. #blue). - # - # The methods handle nesting of ANSI sequences. - # - define_method key do - open = Graphics.foreground_color(key) - close = ANSI::DEFAULT_FOREGROUND_COLOR - wrap_in_ansi_sequence(open, close) - end - - # Defines a method returns a copy of the receiver wrapped in an ANSI - # sequence for each background color (e.g. #on_blue). - # - # The methods handle nesting of ANSI sequences. - # - define_method "on_#{key}" do - open = Graphics.background_color(key) - close = ANSI::DEFAULT_BACKGROUND_COLOR - wrap_in_ansi_sequence(open, close) - end - end - - ANSI::TEXT_ATTRIBUTES.each_key do |key| - # Defines a method returns a copy of the receiver wrapped in an ANSI - # sequence for each text attribute (e.g. #bold). - # - # The methods handle nesting of ANSI sequences. - # - define_method key do - open = Graphics.text_attribute(key) - close_code = TEXT_DISABLE_ATTRIBUTES[key] - close = Graphics.graphics_mode(close_code) - wrap_in_ansi_sequence(open, close) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/claide-1.1.0/lib/claide/argument.rb b/bundle/ruby/3.2.0/gems/claide-1.1.0/lib/claide/argument.rb deleted file mode 100644 index 4d54f29f..00000000 --- a/bundle/ruby/3.2.0/gems/claide-1.1.0/lib/claide/argument.rb +++ /dev/null @@ -1,62 +0,0 @@ -# encoding: utf-8 - -module CLAide - # This class is used to represent individual arguments to present to - # the command help banner - # - class Argument - # The string used for ellipsis / repeatable arguments in the banner - # - ELLIPSIS = '...' - - # @return [Array] - # List of alternate names for the parameters - attr_reader :names - - # @return [Boolean] - # Indicates if the argument is required (not optional) - # - attr_accessor :required - alias_method :required?, :required - - # @return [Boolean] - # Indicates if the argument is repeatable (= can appear multiple - # times in the command, which is indicated by '...' in the banner) - # - attr_accessor :repeatable - alias_method :repeatable?, :repeatable - - # @param [String,Array] names - # List of the names of each parameter alternatives. - # For convenience, if there is only one alternative for that - # parameter, we can use a String instead of a 1-item Array - # - # @param [Boolean] required - # true if the parameter is required, false if it is optional - # - # @param [Boolean] repeatable - # If true, the argument can appear multiple times in the command. - # In that case, an ellipsis will be appended after the argument - # in the help banner. - # - # @example - # - # # A required parameter that can be either a NAME or URL - # Argument.new(%(NAME URL), true) - # - def initialize(names, required, repeatable = false) - @names = Array(names) - @required = required - @repeatable = repeatable - end - - # @return [Boolean] true on equality - # - # @param [Argument] other the Argument compared against - # - def ==(other) - other.is_a?(Argument) && - names == other.names && required == other.required - end - end -end diff --git a/bundle/ruby/3.2.0/gems/claide-1.1.0/lib/claide/argv.rb b/bundle/ruby/3.2.0/gems/claide-1.1.0/lib/claide/argv.rb deleted file mode 100644 index ecadfaf2..00000000 --- a/bundle/ruby/3.2.0/gems/claide-1.1.0/lib/claide/argv.rb +++ /dev/null @@ -1,329 +0,0 @@ -# encoding: utf-8 - -module CLAide - # This class is responsible for parsing the parameters specified by the user, - # accessing individual parameters, and keep state by removing handled - # parameters. - # - class ARGV - # @return [ARGV] Coerces an object to the ARGV class if needed. - # - # @param [Object] argv - # The object which should be converted to the ARGV class. - # - def self.coerce(argv) - if argv.is_a?(ARGV) - argv - else - ARGV.new(argv) - end - end - - # @param [Array<#to_s>] argv - # A list of parameters. - # - def initialize(argv) - @entries = Parser.parse(argv) - end - - # @return [Boolean] Whether or not there are any remaining unhandled - # parameters. - # - def empty? - @entries.empty? - end - - # @return [Array] A list of the remaining unhandled parameters, in - # the same format a user specifies it in. - # - # @example - # - # argv = CLAide::ARGV.new(['tea', '--no-milk', '--sweetener=honey']) - # argv.shift_argument # => 'tea' - # argv.remainder # => ['--no-milk', '--sweetener=honey'] - # - def remainder - @entries.map do |type, (key, value)| - case type - when :arg - key - when :flag - "--#{'no-' if value == false}#{key}" - when :option - "--#{key}=#{value}" - end - end - end - - # @return [Array] A list of the remaining unhandled parameters, in - # the same format the user specified them. - # - # @example - # - # argv = CLAide::ARGV.new(['tea', '--no-milk', '--sweetener=honey']) - # argv.shift_argument # => 'tea' - # argv.remainder! # => ['--no-milk', '--sweetener=honey'] - # argv.remainder # => [] - # - def remainder! - remainder.tap { @entries.clear } - end - - # @return [Hash] A hash that consists of the remaining flags and options - # and their values. - # - # @example - # - # argv = CLAide::ARGV.new(['tea', '--no-milk', '--sweetener=honey']) - # argv.options # => { 'milk' => false, 'sweetener' => 'honey' } - # - def options - options = {} - @entries.each do |type, (key, value)| - options[key] = value unless type == :arg - end - options - end - - # @return [Array] A list of the remaining arguments. - # - # @example - # - # argv = CLAide::ARGV.new(['tea', 'white', '--no-milk', 'biscuit']) - # argv.shift_argument # => 'tea' - # argv.arguments # => ['white', 'biscuit'] - # - def arguments - @entries.map { |type, value| value if type == :arg }.compact - end - - # @return [Array] A list of the remaining arguments. - # - # @note This version also removes the arguments from the remaining - # parameters. - # - # @example - # - # argv = CLAide::ARGV.new(['tea', 'white', '--no-milk', 'biscuit']) - # argv.arguments # => ['tea', 'white', 'biscuit'] - # argv.arguments! # => ['tea', 'white', 'biscuit'] - # argv.arguments # => [] - # - def arguments! - arguments = [] - while arg = shift_argument - arguments << arg - end - arguments - end - - # @return [String] The first argument in the remaining parameters. - # - # @note This will remove the argument from the remaining parameters. - # - # @example - # - # argv = CLAide::ARGV.new(['tea', 'white']) - # argv.shift_argument # => 'tea' - # argv.arguments # => ['white'] - # - def shift_argument - if index = @entries.find_index { |type, _| type == :arg } - entry = @entries[index] - @entries.delete_at(index) - entry.last - end - end - - # @return [Boolean, nil] Returns `true` if the flag by the specified `name` - # is among the remaining parameters and is not negated. - # - # @param [String] name - # The name of the flag to look for among the remaining parameters. - # - # @param [Boolean] default - # The value that is returned in case the flag is not among the - # remaining parameters. - # - # @note This will remove the flag from the remaining parameters. - # - # @example - # - # argv = CLAide::ARGV.new(['tea', '--no-milk', '--sweetener=honey']) - # argv.flag?('milk') # => false - # argv.flag?('milk') # => nil - # argv.flag?('milk', true) # => true - # argv.remainder # => ['tea', '--sweetener=honey'] - # - def flag?(name, default = nil) - delete_entry(:flag, name, default, true) - end - - # @return [String, nil] Returns the value of the option by the specified - # `name` is among the remaining parameters. - # - # @param [String] name - # The name of the option to look for among the remaining - # parameters. - # - # @param [String] default - # The value that is returned in case the option is not among the - # remaining parameters. - # - # @note This will remove the option from the remaining parameters. - # - # @example - # - # argv = CLAide::ARGV.new(['tea', '--no-milk', '--sweetener=honey']) - # argv.option('sweetener') # => 'honey' - # argv.option('sweetener') # => nil - # argv.option('sweetener', 'sugar') # => 'sugar' - # argv.remainder # => ['tea', '--no-milk'] - # - def option(name, default = nil) - delete_entry(:option, name, default) - end - - # @return [Array] Returns an array of all the values of the option - # with the specified `name` among the remaining - # parameters. - # - # @param [String] name - # The name of the option to look for among the remaining - # parameters. - # - # @note This will remove the option from the remaining parameters. - # - # @example - # - # argv = CLAide::ARGV.new(['--ignore=foo', '--ignore=bar']) - # argv.all_options('include') # => [] - # argv.all_options('ignore') # => ['bar', 'foo'] - # argv.remainder # => [] - # - def all_options(name) - options = [] - while entry = option(name) - options << entry - end - options - end - - private - - # @return [Array>] A list of tuples for each - # non consumed parameter, where the first entry is the `type` and - # the second entry the actual parsed parameter. - # - attr_reader :entries - - # @return [Bool, String, Nil] Removes an entry from the entries list and - # returns its value or the default value if the entry was not - # present. - # - # @param [Symbol] requested_type - # The type of the entry. - # - # @param [String] requested_key - # The key of the entry. - # - # @param [Bool, String, Nil] default - # The value which should be returned if the entry is not present. - # - # @param [Bool] delete_all - # Whether all values matching `requested_type` and `requested_key` - # should be deleted. - # - def delete_entry(requested_type, requested_key, default, delete_all = false) - pred = proc do |type, (key, _value)| - requested_key == key && requested_type == type - end - entry = entries.reverse_each.find(&pred) - delete_all ? entries.delete_if(&pred) : entries.delete(entry) - - entry.nil? ? default : entry.last.last - end - - module Parser - # @return [Array>] A list of tuples for each - # parameter, where the first entry is the `type` and the second - # entry the actual parsed parameter. - # - # @example - # - # list = parse(['tea', '--no-milk', '--sweetener=honey']) - # list # => [[:arg, "tea"], - # [:flag, ["milk", false]], - # [:option, ["sweetener", "honey"]]] - # - def self.parse(argv) - entries = [] - copy = argv.map(&:to_s) - double_dash = false - while argument = copy.shift - next if !double_dash && double_dash = (argument == '--') - type = double_dash ? :arg : argument_type(argument) - parsed_argument = parse_argument(type, argument) - entries << [type, parsed_argument] - end - entries - end - - # @return [Symbol] Returns the type of an argument. The types can be - # either: `:arg`, `:flag`, `:option`. - # - # @param [String] argument - # The argument to check. - # - def self.argument_type(argument) - if argument.start_with?('--') - if argument.include?('=') - :option - else - :flag - end - else - :arg - end - end - - # @return [String, Array] Returns the argument itself for - # normal arguments (like commands) and a tuple with the key and - # the value for options and flags. - # - # @param [Symbol] type - # The type of the argument. - # - # @param [String] argument - # The argument to check. - # - def self.parse_argument(type, argument) - case type - when :arg - return argument - when :flag - return parse_flag(argument) - when :option - return argument[2..-1].split('=', 2) - end - end - - # @return [String, Array] Returns the parameter - # describing a flag arguments. - # - # @param [String] argument - # The flag argument to check. - # - def self.parse_flag(argument) - if argument.start_with?('--no-') - key = argument[5..-1] - value = false - else - key = argument[2..-1] - value = true - end - [key, value] - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/claide-1.1.0/lib/claide/command.rb b/bundle/ruby/3.2.0/gems/claide-1.1.0/lib/claide/command.rb deleted file mode 100644 index 6414b5cd..00000000 --- a/bundle/ruby/3.2.0/gems/claide-1.1.0/lib/claide/command.rb +++ /dev/null @@ -1,669 +0,0 @@ -# encoding: utf-8 - -require 'claide/command/banner' -require 'claide/command/plugin_manager' -require 'claide/command/argument_suggester' - -module CLAide - # This class is used to build a command-line interface - # - # Each command is represented by a subclass of this class, which may be - # nested to create more granular commands. - # - # Following is an overview of the types of commands and what they should do. - # - # ### Any command type - # - # * Inherit from the command class under which the command should be nested. - # * Set {Command.summary} to a brief description of the command. - # * Override {Command.options} to return the options it handles and their - # descriptions and prepending them to the results of calling `super`. - # * Override {Command#initialize} if it handles any parameters. - # * Override {Command#validate!} to check if the required parameters the - # command handles are valid, or call {Command#help!} in case they’re not. - # - # ### Abstract command - # - # The following is needed for an abstract command: - # - # * Set {Command.abstract_command} to `true`. - # * Subclass the command. - # - # When the optional {Command.description} is specified, it will be shown at - # the top of the command’s help banner. - # - # ### Normal command - # - # The following is needed for a normal command: - # - # * Set {Command.arguments} to the description of the arguments this command - # handles. - # * Override {Command#run} to perform the actual work. - # - # When the optional {Command.description} is specified, it will be shown - # underneath the usage section of the command’s help banner. Otherwise this - # defaults to {Command.summary}. - # - class Command - class << self - # @return [Boolean] Indicates whether or not this command can actually - # perform work of itself, or that it only contains subcommands. - # - attr_accessor :abstract_command - alias_method :abstract_command?, :abstract_command - - # @return [Boolean] Indicates whether or not this command is used during - # command parsing and whether or not it should be shown in the - # help banner or to show its subcommands instead. - # - # Setting this to `true` implies it’s an abstract command. - # - attr_reader :ignore_in_command_lookup - alias_method :ignore_in_command_lookup?, :ignore_in_command_lookup - def ignore_in_command_lookup=(flag) - @ignore_in_command_lookup = self.abstract_command = flag - end - - # @return [String] The subcommand which an abstract command should invoke - # by default. - # - attr_accessor :default_subcommand - - # @return [String] A brief description of the command, which is shown - # next to the command in the help banner of a parent command. - # - attr_accessor :summary - - # @return [String] A longer description of the command, which is shown - # underneath the usage section of the command’s help banner. Any - # indentation in this value will be ignored. - # - attr_accessor :description - - # @return [Array] The prefixes used to search for CLAide plugins. - # Plugins are loaded via their `_plugin.rb` file. - # Defaults to search for `claide` plugins. - # - def plugin_prefixes - @plugin_prefixes ||= ['claide'] - end - attr_writer :plugin_prefixes - - # @return [Array] - # A list of arguments the command handles. This is shown - # in the usage section of the command’s help banner. - # Each Argument in the array represents an argument by its name - # (or list of alternatives) and whether it's required or optional - # - def arguments - @arguments ||= [] - end - - # @param [Array] arguments - # An array listing the command arguments. - # Each Argument object describe the argument by its name - # (or list of alternatives) and whether it's required or optional - # - # @todo Remove deprecation - # - def arguments=(arguments) - if arguments.is_a?(Array) - if arguments.empty? || arguments[0].is_a?(Argument) - @arguments = arguments - else - self.arguments_array = arguments - end - else - self.arguments_string = arguments - end - end - - # @return [Boolean] The default value for {Command#ansi_output}. This - # defaults to `true` if `STDOUT` is connected to a TTY and - # `String` has the instance methods `#red`, `#green`, and - # `#yellow` (which are defined by, for instance, the - # [colored](https://github.com/defunkt/colored) gem). - # - def ansi_output - if @ansi_output.nil? - @ansi_output = STDOUT.tty? - end - @ansi_output - end - attr_writer :ansi_output - alias_method :ansi_output?, :ansi_output - - # @return [String] The name of the command. Defaults to a snake-cased - # version of the class’ name. - # - def command - @command ||= name.split('::').last.gsub(/[A-Z]+[a-z]*/) do |part| - part.downcase << '-' - end[0..-2] - end - attr_writer :command - - # @return [String] The version of the command. This value will be printed - # by the `--version` flag if used for the root command. - # - attr_accessor :version - end - - #-------------------------------------------------------------------------# - - # @return [String] The full command up-to this command, as it would be - # looked up during parsing. - # - # @note (see #ignore_in_command_lookup) - # - # @example - # - # BevarageMaker::Tea.full_command # => "beverage-maker tea" - # - def self.full_command - if superclass == Command - ignore_in_command_lookup? ? '' : command - else - if ignore_in_command_lookup? - superclass.full_command - else - "#{superclass.full_command} #{command}" - end - end - end - - # @return [Bool] Whether this is the root command class - # - def self.root_command? - superclass == CLAide::Command - end - - # @return [Array] A list of all command classes that are nested - # under this command. - # - def self.subcommands - @subcommands ||= [] - end - - # @return [Array] A list of command classes that are nested under - # this command _or_ the subcommands of those command classes in - # case the command class should be ignored in command lookup. - # - def self.subcommands_for_command_lookup - subcommands.map do |subcommand| - if subcommand.ignore_in_command_lookup? - subcommand.subcommands_for_command_lookup - else - subcommand - end - end.flatten - end - - # Searches the list of subcommands that should not be ignored for command - # lookup for a subcommand with the given `name`. - # - # @param [String] name - # The name of the subcommand to be found. - # - # @return [CLAide::Command, nil] The subcommand, if found. - # - def self.find_subcommand(name) - subcommands_for_command_lookup.find { |sc| sc.command == name } - end - - # @visibility private - # - # Automatically registers a subclass as a subcommand. - # - def self.inherited(subcommand) - subcommands << subcommand - end - - DEFAULT_ROOT_OPTIONS = [ - ['--version', 'Show the version of the tool'], - ] - - DEFAULT_OPTIONS = [ - ['--verbose', 'Show more debugging information'], - ['--no-ansi', 'Show output without ANSI codes'], - ['--help', 'Show help banner of specified command'], - ] - - # Should be overridden by a subclass if it handles any options. - # - # The subclass has to combine the result of calling `super` and its own - # list of options. The recommended way of doing this is by concatenating - # to this classes’ own options. - # - # @return [Array] - # - # A list of option name and description tuples. - # - # @example - # - # def self.options - # [ - # ['--verbose', 'Print more info'], - # ['--help', 'Print help banner'], - # ].concat(super) - # end - # - def self.options - if root_command? - DEFAULT_ROOT_OPTIONS + DEFAULT_OPTIONS - else - DEFAULT_OPTIONS - end - end - - # Adds a new option for the current command. - # - # This method can be used in conjunction with overriding `options`. - # - # @return [void] - # - # @example - # - # option '--help', 'Print help banner ' - # - def self.option(name, description) - mod = Module.new do - define_method(:options) do - [ - [name, description], - ].concat(super()) - end - end - extend(mod) - end - private_class_method :option - - # Handles root commands options if appropriate. - # - # @param [ARGV] argv - # The parameters of the command. - # - # @return [Bool] Whether any root command option was handled. - # - def handle_root_options(argv) - return false unless self.class.root_command? - if argv.flag?('version') - print_version - return true - end - false - end - - # Prints the version of the command optionally including plugins. - # - def print_version - puts self.class.version - if verbose? - PluginManager.specifications.each do |spec| - puts "#{spec.name}: #{spec.version}" - end - end - end - - # Instantiates the command class matching the parameters through - # {Command.parse}, validates it through {Command#validate!}, and runs it - # through {Command#run}. - # - # @note The ANSI support is configured before running a command to allow - # the same process to run multiple commands with different - # settings. For example a process with ANSI output enabled might - # want to programmatically invoke another command with the output - # enabled. - # - # @param [Array, ARGV] argv - # A list of parameters. For instance, the standard `ARGV` constant, - # which contains the parameters passed to the program. - # - # @return [void] - # - def self.run(argv = []) - plugin_prefixes.each do |plugin_prefix| - PluginManager.load_plugins(plugin_prefix) - end - - argv = ARGV.coerce(argv) - command = parse(argv) - ANSI.disabled = !command.ansi_output? - unless command.handle_root_options(argv) - command.validate! - command.run - end - rescue Object => exception - handle_exception(command, exception) - end - - # @param [Array, ARGV] argv - # A list of (remaining) parameters. - # - # @return [Command] An instance of the command class that was matched by - # going through the arguments in the parameters and drilling down - # command classes. - # - def self.parse(argv) - argv = ARGV.coerce(argv) - cmd = argv.arguments.first - if cmd && subcommand = find_subcommand(cmd) - argv.shift_argument - subcommand.parse(argv) - elsif abstract_command? && default_subcommand - load_default_subcommand(argv) - else - new(argv) - end - end - - # @param [Array, ARGV] argv - # A list of (remaining) parameters. - # - # @return [Command] Returns the default subcommand initialized with the - # given arguments. - # - def self.load_default_subcommand(argv) - unless subcommand = find_subcommand(default_subcommand) - raise 'Unable to find the default subcommand ' \ - "`#{default_subcommand}` for command `#{self}`." - end - result = subcommand.parse(argv) - result.invoked_as_default = true - result - end - - # Presents an exception to the user in a short manner in case of an - # `InformativeError` or in long form in other cases, - # - # @param [Command, nil] command - # The command from where the exception originated. - # - # @param [Object] exception - # The exception to present. - # - # @return [void] - # - def self.handle_exception(command, exception) - if exception.is_a?(InformativeError) - puts exception.message - if command.nil? || command.verbose? - puts - puts(*exception.backtrace) - end - exit exception.exit_status - else - report_error(exception) - end - end - - # Allows the application to perform custom error reporting, by overriding - # this method. - # - # @param [Exception] exception - # - # An exception that occurred while running a command through - # {Command.run}. - # - # @raise - # - # By default re-raises the specified exception. - # - # @return [void] - # - def self.report_error(exception) - plugins = PluginManager.plugins_involved_in_exception(exception) - unless plugins.empty? - puts '[!] The exception involves the following plugins:' \ - "\n - #{plugins.join("\n - ")}\n".ansi.yellow - end - raise exception - end - - # @visibility private - # - # @param [String] error_message - # The error message to show to the user. - # - # @param [Class] help_class - # The class to use to raise a ‘help’ error. - # - # @raise [Help] - # - # Signals CLAide that a help banner for this command should be shown, - # with an optional error message. - # - # @return [void] - # - def self.help!(error_message = nil, help_class = Help) - raise help_class.new(banner, error_message) - end - - # @visibility private - # - # Returns the banner for the command. - # - # @param [Class] banner_class - # The class to use to format help banners. - # - # @return [String] The banner for the command. - # - def self.banner(banner_class = Banner) - banner_class.new(self).formatted_banner - end - - # @visibility private - # - # Print banner and exit - # - # @note Calling this method exits the current process. - # - # @return [void] - # - def self.banner! - puts banner - exit 0 - end - - #-------------------------------------------------------------------------# - - # Set to `true` if the user specifies the `--verbose` option. - # - # @note - # - # If you want to make use of this value for your own configuration, you - # should check the value _after_ calling the `super` {Command#initialize} - # implementation. - # - # @return [Boolean] - # - # Wether or not backtraces should be included when presenting the user an - # exception that includes the {InformativeError} module. - # - attr_accessor :verbose - alias_method :verbose?, :verbose - - # Set to `true` if {Command.ansi_output} returns `true` and the user - # did **not** specify the `--no-ansi` option. - # - # @note (see #verbose) - # - # @return [Boolean] - # - # Whether or not to use ANSI codes to prettify output. For instance, by - # default {InformativeError} exception messages will be colored red and - # subcommands in help banners green. - # - attr_accessor :ansi_output - alias_method :ansi_output?, :ansi_output - - # Set to `true` if initialized with a `--help` flag - # - # @return [Boolean] - # - # Whether the command was initialized with argv containing --help - # - attr_accessor :help_arg - alias_method :help?, :help_arg - - # Subclasses should override this method to remove the arguments/options - # they support from `argv` _before_ calling `super`. - # - # The `super` implementation sets the {#verbose} attribute based on whether - # or not the `--verbose` option is specified; and the {#ansi_output} - # attribute to `false` if {Command.ansi_output} returns `true`, but the - # user specified the `--no-ansi` option. - # - # @param [ARGV, Array] argv - # - # A list of (user-supplied) params that should be handled. - # - def initialize(argv) - argv = ARGV.coerce(argv) - @verbose = argv.flag?('verbose') - @ansi_output = argv.flag?('ansi', Command.ansi_output?) - @argv = argv - @help_arg = argv.flag?('help') - end - - # Convenience method. - # Instantiate the command and run it with the provided arguments at once. - # - # @note This method validate! the command before running it, but contrary to - # CLAide::Command::run, it does not load plugins nor exit on failure. - # It is up to the caller to rescue any possible exception raised. - # - # @param [String..., Array] args - # The arguments to initialize the command with - # - # @raise [Help] If validate! fails - # - def self.invoke(*args) - command = new(ARGV.new(args.flatten)) - command.validate! - command.run - end - - # @return [Bool] Whether the command was invoked by an abstract command by - # default. - # - attr_accessor :invoked_as_default - alias_method :invoked_as_default?, :invoked_as_default - - # Raises a Help exception if the `--help` option is specified, if `argv` - # still contains remaining arguments/options by the time it reaches this - # implementation, or when called on an ‘abstract command’. - # - # Subclasses should call `super` _before_ doing their own validation. This - # way when the user specifies the `--help` flag a help banner is shown, - # instead of possible actual validation errors. - # - # @raise [Help] - # - # @return [void] - # - def validate! - banner! if help? - unless @argv.empty? - argument = @argv.remainder.first - help! ArgumentSuggester.new(argument, self.class).suggestion - end - help! if self.class.abstract_command? - end - - # This method should be overridden by the command class to perform its - # work. - # - # @return [void] - # - def run - raise 'A subclass should override the `CLAide::Command#run` method to ' \ - 'actually perform some work.' - end - - protected - - # Returns the class of the invoked command - # - # @return [Command] - # - def invoked_command_class - if invoked_as_default? - self.class.superclass - else - self.class - end - end - - # @param [String] error_message - # A custom optional error message - # - # @raise [Help] - # - # Signals CLAide that a help banner for this command should be shown, - # with an optional error message. - # - # @return [void] - # - def help!(error_message = nil) - invoked_command_class.help!(error_message) - end - - # Print banner and exit - # - # @note Calling this method exits the current process. - # - # @return [void] - # - def banner! - invoked_command_class.banner! - end - - #-------------------------------------------------------------------------# - - # Handle deprecated form of self.arguments as an - # Array> like in: - # - # self.arguments = [ ['NAME', :required], ['QUERY', :optional] ] - # - # @todo Remove deprecated format support - # - def self.arguments_array=(arguments) - warn '[!] The signature of CLAide#arguments has changed. ' \ - "Use CLAide::Argument (#{self}: `#{arguments}`)".ansi.yellow - @arguments = arguments.map do |(name_str, type)| - names = name_str.split('|') - required = (type == :required) - Argument.new(names, required) - end - end - - # Handle deprecated form of self.arguments as a String, like in: - # - # self.arguments = 'NAME [QUERY]' - # - # @todo Remove deprecated format support - # - def self.arguments_string=(arguments) - warn '[!] The specification of arguments as a string has been' \ - " deprecated #{self}: `#{arguments}`".ansi.yellow - @arguments = arguments.split(' ').map do |argument| - if argument.start_with?('[') - Argument.new(argument.sub(/\[(.*)\]/, '\1').split('|'), false) - else - Argument.new(argument.split('|'), true) - end - end - end - - # Handle depracted form of assigning a plugin prefix. - # - # @todo Remove deprecated form. - # - def self.plugin_prefix=(prefix) - warn '[!] The specification of a singular plugin prefix has been ' \ - "deprecated. Use `#{self}::plugin_prefixes` instead." - plugin_prefixes << prefix - end - end -end diff --git a/bundle/ruby/3.2.0/gems/claide-1.1.0/lib/claide/command/argument_suggester.rb b/bundle/ruby/3.2.0/gems/claide-1.1.0/lib/claide/command/argument_suggester.rb deleted file mode 100644 index a13575c7..00000000 --- a/bundle/ruby/3.2.0/gems/claide-1.1.0/lib/claide/command/argument_suggester.rb +++ /dev/null @@ -1,99 +0,0 @@ -# encoding: utf-8 - -module CLAide - class Command - class ArgumentSuggester - # @param [String] argument - # The unrecognized argument for which to make a suggestion. - # - # @param [Class] command_class - # The class of the command which encountered the unrecognized - # arguments. - # - def initialize(argument, command_class) - @argument, @command_class = argument, command_class - @argument_type = ARGV::Parser.argument_type(@argument) - end - - # @return [Array] The list of the valid arguments for a command - # according to the type of the argument. - # - def possibilities - case @argument_type - when :option, :flag - @command_class.options.map(&:first) - when :arg - @command_class.subcommands_for_command_lookup.map(&:command) - end - end - - # @return [String] Returns a suggested argument from `possibilities` based - # on the `levenshtein_distance` score. - # - def suggested_argument - possibilities.sort_by do |element| - self.class.levenshtein_distance(@argument, element) - end.first - end - - # @return [String] Returns a message including a suggestion for the given - # suggestion. - # - def suggestion - argument_description = @argument_type == :arg ? 'command' : 'option' - if suggestion = suggested_argument - pretty_suggestion = self.class.prettify_suggestion(suggestion, - @argument_type) - "Unknown #{argument_description}: `#{@argument}`\n" \ - "Did you mean: #{pretty_suggestion}?" - else - "Unknown #{argument_description}: `#{@argument}`" - end - end - - # Prettifies the given validation suggestion according to the type. - # - # @param [String] suggestion - # The suggestion to prettify. - # - # @param [Type] argument_type - # The type of the suggestion: either `:command` or `:option`. - # - # @return [String] A handsome suggestion. - # - def self.prettify_suggestion(suggestion, argument_type) - case argument_type - when :option, :flag - suggestion = suggestion.to_s - suggestion.ansi.blue - when :arg - suggestion.ansi.green - end - end - - # Returns the Levenshtein distance between the given strings. - # From: http://rosettacode.org/wiki/Levenshtein_distance#Ruby - # - # @param [String] a - # The first string to compare. - # - # @param [String] b - # The second string to compare. - # - # @return [Fixnum] The distance between the strings. - def self.levenshtein_distance(a, b) - a, b = a.downcase, b.downcase - costs = Array(0..b.length) - (1..a.length).each do |i| - costs[0], nw = i, i - 1 - (1..b.length).each do |j| - costs[j], nw = [ - costs[j] + 1, costs[j - 1] + 1, a[i - 1] == b[j - 1] ? nw : nw + 1 - ].min, costs[j] - end - end - costs[b.length] - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/claide-1.1.0/lib/claide/command/banner.rb b/bundle/ruby/3.2.0/gems/claide-1.1.0/lib/claide/command/banner.rb deleted file mode 100644 index d87c6996..00000000 --- a/bundle/ruby/3.2.0/gems/claide-1.1.0/lib/claide/command/banner.rb +++ /dev/null @@ -1,307 +0,0 @@ -# encoding: utf-8 - -module CLAide - class Command - # Creates the formatted banner to present as help of the provided command - # class. - # - class Banner - # @return [Class] The command for which the banner should be created. - # - attr_accessor :command - - # @param [Class] command @see command - # - def initialize(command) - @command = command - end - - # @return [String] The banner for the command. - # - def formatted_banner - sections = [ - ['Usage', formatted_usage_description], - ['Commands', formatted_subcommand_summaries], - ['Options', formatted_options_description], - ] - banner = sections.map do |(title, body)| - [prettify_title("#{title}:"), body] unless body.empty? - end.compact.join("\n\n") - banner - end - - private - - # @!group Banner sections - #-----------------------------------------------------------------------# - - # @return [String] The indentation of the text. - # - TEXT_INDENT = 6 - - # @return [Fixnum] The maximum width of the text. - # - MAX_WIDTH = TEXT_INDENT + 80 - - # @return [Fixnum] The minimum between a name and its description. - # - DESCRIPTION_SPACES = 3 - - # @return [Fixnum] The minimum between a name and its description. - # - SUBCOMMAND_BULLET_SIZE = 2 - - # @return [String] The section describing the usage of the command. - # - def formatted_usage_description - message = command.description || command.summary || '' - message = TextWrapper.wrap_formatted_text(message, - TEXT_INDENT, - MAX_WIDTH) - message = prettify_message(command, message) - "#{signature}\n\n#{message}" - end - - # @return [String] The signature of the command. - # - def signature - full_command = command.full_command - sub_command = signature_sub_command - arguments = signature_arguments - result = prettify_signature(full_command, sub_command, arguments) - result.insert(0, '$ ') - result.insert(0, ' ' * (TEXT_INDENT - '$ '.size)) - end - - # @return [String] The subcommand indicator of the signature. - # - def signature_sub_command - return '[COMMAND]' if command.default_subcommand - return 'COMMAND' if command.subcommands.any? - end - - # @return [String] The arguments of the signature. - # - def signature_arguments - command.arguments.map do |arg| - names = arg.names.join('|') - names.concat(' ' + Argument::ELLIPSIS) if arg.repeatable? - arg.required? ? names : "[#{names}]" - end.join(' ') - end - - # @return [String] The section describing the subcommands of the command. - # - # @note The plus sign emphasizes the that the subcommands are added to - # the command. The square brackets conveys a sense of direction - # and indicates the gravitational force towards the default - # command. - # - def formatted_subcommand_summaries - subcommands = subcommands_for_banner - subcommands.map do |subcommand| - name = subcommand.command - bullet = (name == command.default_subcommand) ? '>' : '+' - name = "#{bullet} #{name}" - pretty_name = prettify_subcommand(name) - entry_description(pretty_name, subcommand.summary, name.size) - end.join("\n") - end - - # @return [String] The section describing the options of the command. - # - def formatted_options_description - options = command.options - options.map do |name, description| - pretty_name = prettify_option_name(name) - entry_description(pretty_name, description, name.size) - end.join("\n") - end - - # @return [String] The line describing a single entry (subcommand or - # option). - # - def entry_description(name, description, name_width) - max_name_width = compute_max_name_width - desc_start = max_name_width + (TEXT_INDENT - 2) + DESCRIPTION_SPACES - result = ' ' * (TEXT_INDENT - 2) - result << name - result << ' ' * DESCRIPTION_SPACES - result << ' ' * (max_name_width - name_width) - result << TextWrapper.wrap_with_indent(description, - desc_start, - MAX_WIDTH) - end - - # @!group Overrides - #-----------------------------------------------------------------------# - - # @return [String] A decorated title. - # - def prettify_title(title) - title.ansi.underline - end - - # @return [String] A decorated textual representation of the subcommand - # name. - # - def prettify_subcommand(name) - name.chomp.ansi.green - end - - # @return [String] A decorated textual representation of the option name. - # - # - def prettify_option_name(name) - name.chomp.ansi.blue - end - - # @return [String] A decorated textual representation of the command. - # - def prettify_signature(command, subcommand, argument) - components = [ - [command, :green], - [subcommand, :green], - [argument, :magenta], - ] - components.reduce('') do |memo, (string, ansi_key)| - next memo if !string || string.empty? - memo << ' ' << string.ansi.apply(ansi_key) - end.lstrip - end - - # @return [String] A decorated command description. - # - def prettify_message(command, message) - message = message.dup - command.arguments.each do |arg| - arg.names.each do |name| - message.gsub!("`#{name.gsub(/\.{3}$/, '')}`", '\0'.ansi.magenta) - end - end - command.options.each do |(name, _description)| - message.gsub!("`#{name}`", '\0'.ansi.blue) - end - message - end - - # @!group Private helpers - #-----------------------------------------------------------------------# - - # @return [Array] The list of the subcommands to use in the - # banner. - # - def subcommands_for_banner - command.subcommands_for_command_lookup.reject do |subcommand| - subcommand.summary.nil? - end.sort_by(&:command) - end - - # @return [Fixnum] The width of the largest command name or of the - # largest option name. Used to align all the descriptions. - # - def compute_max_name_width - widths = [] - widths << command.options.map { |option| option.first.size } - widths << subcommands_for_banner.map do |cmd| - cmd.command.size + SUBCOMMAND_BULLET_SIZE - end.max - widths.flatten.compact.max || 1 - end - - module TextWrapper - # @return [String] Wraps a formatted string (e.g. markdown) by stripping - # heredoc indentation and wrapping by word to the terminal width - # taking into account a maximum one, and indenting the string. - # Code lines (i.e. indented by four spaces) are not wrapped. - # - # @param [String] string - # The string to format. - # - # @param [Fixnum] indent - # The number of spaces to insert before the string. - # - # @param [Fixnum] max_width - # The maximum width to use to format the string if the terminal - # is too wide. - # - def self.wrap_formatted_text(string, indent = 0, max_width = 80) - paragraphs = strip_heredoc(string).split("\n\n") - paragraphs = paragraphs.map do |paragraph| - if paragraph.start_with?(' ' * 4) - paragraph.gsub!(/\n/, "\n#{' ' * indent}") - else - paragraph = wrap_with_indent(paragraph, indent, max_width) - end - paragraph.insert(0, ' ' * indent).rstrip - end - paragraphs.join("\n\n") - end - - # @return [String] Wraps a string to the terminal width taking into - # account the given indentation. - # - # @param [String] string - # The string to indent. - # - # @param [Fixnum] indent - # The number of spaces to insert before the string. - # - # @param [Fixnum] max_width - # The maximum width to use to format the string if the terminal - # is too wide. - # - def self.wrap_with_indent(string, indent = 0, max_width = 80) - if terminal_width == 0 - width = max_width - else - width = [terminal_width, max_width].min - end - - full_line = string.gsub("\n", ' ') - available_width = width - indent - space = ' ' * indent - word_wrap(full_line, available_width).split("\n").join("\n#{space}") - end - - # @return [String] Lifted straight from ActionView. Thanks guys! - # - def self.word_wrap(line, line_width) - line.gsub(/(.{1,#{line_width}})(\s+|$)/, "\\1\n").strip - end - - # @return [String] Lifted straight from ActiveSupport. Thanks guys! - # - def self.strip_heredoc(string) - if min = string.scan(/^[ \t]*(?=\S)/).min - string.gsub(/^[ \t]{#{min.size}}/, '') - else - string - end - end - - # @!group Private helpers - #---------------------------------------------------------------------# - - # @return [Fixnum] The width of the current terminal unless being piped. - # - def self.terminal_width - @terminal_width ||= - (!ENV['CLAIDE_DISABLE_AUTO_WRAP'] && - STDOUT.tty? && - calculate_terminal_width) || 0 - end - - def self.calculate_terminal_width - require 'io/console' - STDOUT.winsize.last - rescue LoadError - (system('which tput > /dev/null 2>&1') && `tput cols`.to_i) || 0 - rescue - 0 - end - private_class_method :calculate_terminal_width - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/claide-1.1.0/lib/claide/command/plugin_manager.rb b/bundle/ruby/3.2.0/gems/claide-1.1.0/lib/claide/command/plugin_manager.rb deleted file mode 100644 index 184a5ea1..00000000 --- a/bundle/ruby/3.2.0/gems/claide-1.1.0/lib/claide/command/plugin_manager.rb +++ /dev/null @@ -1,124 +0,0 @@ -# encoding: utf-8 - -module CLAide - class Command - # Handles plugin related logic logic for the `Command` class. - # - # Plugins are loaded the first time a command run and are identified by the - # prefix specified in the command class. Plugins must adopt the following - # conventions: - # - # - Support being loaded by a file located under the - # `lib/#{plugin_prefix}_plugin` relative path. - # - Be stored in a folder named after the plugin. - # - class PluginManager - # @return [Hash] The loaded plugins, - # grouped by plugin prefix. - # - def self.loaded_plugins - @loaded_plugins ||= {} - end - - # @return [Array] Loads plugins via RubyGems looking - # for files named after the `PLUGIN_PREFIX_plugin` and returns the - # specifications of the gems loaded successfully. - # Plugins are required safely. - # - def self.load_plugins(plugin_prefix) - loaded_plugins[plugin_prefix] ||= - plugin_gems_for_prefix(plugin_prefix).map do |spec, paths| - spec if safe_require(paths) - end.compact - end - - # @return [Array] The RubyGems specifications for the - # loaded plugins. - # - def self.specifications - loaded_plugins.values.flatten.uniq - end - - # @return [Array] The RubyGems specifications for the - # installed plugins that match the given `plugin_prefix`. - # - def self.installed_specifications_for_prefix(plugin_prefix) - loaded_plugins[plugin_prefix] || - plugin_gems_for_prefix(plugin_prefix).map(&:first) - end - - # @return [Array] The list of the plugins whose root path appears - # in the backtrace of an exception. - # - # @param [Exception] exception - # The exception to analyze. - # - def self.plugins_involved_in_exception(exception) - specifications.select do |gemspec| - exception.backtrace.any? do |line| - full_require_paths_for(gemspec).any? do |plugin_path| - line.include?(plugin_path) - end - end - end.map(&:name) - end - - # @group Helper Methods - - # @return [Array<[Gem::Specification, Array]>] - # Returns an array of tuples containing the specifications and - # plugin files to require for a given plugin prefix. - # - def self.plugin_gems_for_prefix(prefix) - glob = "#{prefix}_plugin#{Gem.suffix_pattern}" - Gem::Specification.latest_specs(true).map do |spec| - matches = spec.matches_for_glob(glob) - [spec, matches] unless matches.empty? - end.compact - end - - # Requires the given paths. - # If any exception occurs it is caught and an - # informative message is printed. - # - # @param [String] paths - # The paths to require. - # - # @return [Bool] Whether requiring succeeded. - # - def self.safe_require(paths) - paths.each do |path| - begin - require(path) - rescue Exception => exception # rubocop:disable RescueException - message = "\n---------------------------------------------" - message << "\nError loading plugin file `#{path}`.\n" - message << "\n#{exception.class} - #{exception.message}" - message << "\n#{exception.backtrace.join("\n")}" - message << "\n---------------------------------------------\n" - warn message.ansi.yellow - return false - end - end - - true - end - - def self.full_require_paths_for(gemspec) - if gemspec.respond_to?(:full_require_paths) - return gemspec.full_require_paths - end - - # RubyGems < 2.2 - gemspec.require_paths.map do |require_path| - if require_path.include?(gemspec.full_gem_path) - require_path - else - File.join(gemspec.full_gem_path, require_path) - end - end - end - private_class_method :full_require_paths_for - end - end -end diff --git a/bundle/ruby/3.2.0/gems/claide-1.1.0/lib/claide/gem_version.rb b/bundle/ruby/3.2.0/gems/claide-1.1.0/lib/claide/gem_version.rb deleted file mode 100644 index cdb020c0..00000000 --- a/bundle/ruby/3.2.0/gems/claide-1.1.0/lib/claide/gem_version.rb +++ /dev/null @@ -1,7 +0,0 @@ -module CLAide - # @return [String] - # - # CLAide’s version, following [semver](http://semver.org). - # - VERSION = '1.1.0'.freeze -end diff --git a/bundle/ruby/3.2.0/gems/claide-1.1.0/lib/claide/help.rb b/bundle/ruby/3.2.0/gems/claide-1.1.0/lib/claide/help.rb deleted file mode 100644 index 7d3b1839..00000000 --- a/bundle/ruby/3.2.0/gems/claide-1.1.0/lib/claide/help.rb +++ /dev/null @@ -1,58 +0,0 @@ -# encoding: utf-8 - -module CLAide - require 'claide/informative_error' - - # The exception class that is raised to indicate a help banner should be - # shown while running {Command.run}. - # - class Help < StandardError - include InformativeError - - # @return [String] The banner containing the usage instructions of the - # command to show in the help. - # - attr_reader :banner - - # @return [String] An optional error message that will be shown before the - # help banner. - # - attr_reader :error_message - - # @param [String] banner @see banner - # @param [String] error_message @see error_message - # - # @note If an error message is provided, the exit status, used to - # terminate the program with, will be set to `1`, otherwise a {Help} - # exception is treated as not being a real error and exits with `0`. - # - def initialize(banner, error_message = nil) - @banner = banner - @error_message = error_message - @exit_status = @error_message.nil? ? 0 : 1 - end - - # @return [String] The optional error message, colored in red if - # {Command.ansi_output} is set to `true`. - # - def formatted_error_message - if error_message - message = "[!] #{error_message}" - prettify_error_message(message) - end - end - - # @return [String] - # - def prettify_error_message(message) - message.ansi.red - end - - # @return [String] The optional error message, combined with the help - # banner of the command. - # - def message - [formatted_error_message, banner].compact.join("\n\n") - end - end -end diff --git a/bundle/ruby/3.2.0/gems/claide-1.1.0/lib/claide/informative_error.rb b/bundle/ruby/3.2.0/gems/claide-1.1.0/lib/claide/informative_error.rb deleted file mode 100644 index 8a92bd04..00000000 --- a/bundle/ruby/3.2.0/gems/claide-1.1.0/lib/claide/informative_error.rb +++ /dev/null @@ -1,21 +0,0 @@ -# encoding: utf-8 - -module CLAide - # Including this module into an exception class will ensure that when raised, - # while running {Command.run}, only the message of the exception will be - # shown to the user. Unless disabled with the `--verbose` flag. - # - # In addition, the message will be colored red, if {Command.ansi_output} - # is set to `true`. - # - module InformativeError - # @return [Numeric] The exist status code that should be used to terminate - # the program with. Defaults to `1`. - # - attr_writer :exit_status - - def exit_status - @exit_status ||= 1 - end - end -end diff --git a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/.gitignore b/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/.gitignore deleted file mode 100644 index 864ffe94..00000000 --- a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/.gitignore +++ /dev/null @@ -1,41 +0,0 @@ -*.gem -*.rbc -/.config -/coverage/ -/InstalledFiles -/pkg/ -/spec/reports/ -/test/tmp/ -/test/version_tmp/ -/tmp/ - -## Specific to RubyMotion: -.dat* -.repl_history -build/ - -## Documentation cache and generated files: -/.yardoc/ -/_yardoc/ -/doc/ -/rdoc/ - -## Environment normalisation: -/.bundle/ -/lib/bundler/man/ -/vendor/ - -# for a library or gem, you might want to ignore these files since the code is -# intended to run in multiple environments; otherwise, check them in: -# Gemfile.lock -# .ruby-version -# .ruby-gemset - -# unless supporting rvm < 1.11.0 or doing something fancy, ignore this: -.rvmrc - -/coverage/ - -# RubyMine Editor -.idea - diff --git a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/.rubocop.yml b/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/.rubocop.yml deleted file mode 100644 index 75832059..00000000 --- a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/.rubocop.yml +++ /dev/null @@ -1,4 +0,0 @@ -inherit_from: - - .rubocop_cocoapods.yml - - diff --git a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/.rubocop_cocoapods.yml b/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/.rubocop_cocoapods.yml deleted file mode 100644 index 9104ebdd..00000000 --- a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/.rubocop_cocoapods.yml +++ /dev/null @@ -1,116 +0,0 @@ -AllCops: - Include: - - ./Rakefile - - ./Gemfile - - ./*.gemspec - Exclude: - - ./spec/fixtures/**/* - -# At the moment not ready to be used -# https://github.com/bbatsov/rubocop/issues/947 -Documentation: - Enabled: false - -#- CocoaPods -----------------------------------------------------------------# - -# We adopted raise instead of fail. -SignalException: - EnforcedStyle: only_raise - -# They are idiomatic -AssignmentInCondition: - Enabled: false - -# Allow backticks -AsciiComments: - Enabled: false - -# Indentation clarifies logic branches in implementations -IfUnlessModifier: - Enabled: false - -# No enforced convention here. -SingleLineBlockParams: - Enabled: false - -# We only add the comment when needed. -Encoding: - Enabled: false - -# Having these make it easier to *not* forget to add one when adding a new -# value and you can simply copy the previous line. -TrailingComma: - EnforcedStyleForMultiline: comma - -Style/MultilineOperationIndentation: - EnforcedStyle: indented - -# Clashes with CLAide Command#validate! -GuardClause: - Enabled: false - -# Not always desirable: lib/claide/command/plugins_helper.rb:12:15 -Next: - Enabled: false - -# Arbitrary max lengths for classes simply do not work and enabling this will -# lead to a never ending stream of annoyance and changes. -Metrics/ClassLength: - Enabled: false - -# Arbitrary max lengths for methods simply do not work and enabling this will -# lead to a never ending stream of annoyance and changes. -Metrics/MethodLength: - Enabled: false - -# No enforced convention here. -Metrics/BlockNesting: - Enabled: false - -# It will be obvious which code is complex, Rubocop should only lint simple -# rules for us. -Metrics/AbcSize: - Enabled: false - -# It will be obvious which code is complex, Rubocop should only lint simple -# rules for us. -Metrics/CyclomaticComplexity: - Enabled: false - -#- CocoaPods support for Ruby 1.8.7 ------------------------------------------# - -HashSyntax: - EnforcedStyle: hash_rockets - -Lambda: - Enabled: false - -DotPosition: - EnforcedStyle: trailing - -EachWithObject: - Enabled: false - -Style/SpecialGlobalVars: - Enabled: false - -#- CocoaPods specs -----------------------------------------------------------# - -# Allow for `should.match /regexp/`. -AmbiguousRegexpLiteral: - Exclude: - - spec/**/* - -# Allow `object.should == object` syntax. -Void: - Exclude: - - spec/**/* - -ClassAndModuleChildren: - Exclude: - - spec/**/* - -UselessComparison: - Exclude: - - spec/**/* - diff --git a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/.tm_properties b/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/.tm_properties deleted file mode 100644 index 7f6f10f9..00000000 --- a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/.tm_properties +++ /dev/null @@ -1,2 +0,0 @@ -scmStatus = false - diff --git a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/.travis.yml b/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/.travis.yml deleted file mode 100644 index 282bfc7e..00000000 --- a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/.travis.yml +++ /dev/null @@ -1,24 +0,0 @@ -# Sets Travis to run the Ruby specs on OS X machines to be as close as possible -# to the user environment. -# -language: objective-c -addons: - code_climate: - repo_token: 2926ae7ea0b2a6ced8b0d67efa235769ab85de1d9c9f6702f40d80bacec3c9c4 - -env: - - RVM_RUBY_VERSION=system - # - RVM_RUBY_VERSION=1.8.7-p358 - -before_install: - - export LANG=en_US.UTF-8 - - curl http://curl.haxx.se/ca/cacert.pem -o /usr/local/share/cacert.pem - - source ~/.rvm/scripts/rvm - - if [[ $RVM_RUBY_VERSION != 'system' ]]; then rvm install $RVM_RUBY_VERSION; fi - - rvm use $RVM_RUBY_VERSION - - if [[ $RVM_RUBY_VERSION == 'system' ]]; then sudo gem install bundler --no-ri --no-rdoc; else gem install bundler --no-ri --no-rdoc; fi - -install: - - sudo bundle install --without=documentation - -script: bundle exec rake spec diff --git a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/CHANGELOG.md b/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/CHANGELOG.md deleted file mode 100644 index 57463038..00000000 --- a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/CHANGELOG.md +++ /dev/null @@ -1,113 +0,0 @@ -# Cocoapods::Plugins Changelog - -## Master - -##### Enhancements - -* None. - -##### Bug Fixes - -* None. - - -## 1.0.0 (2016-05-10) - -##### Enhancements - -* None. - -##### Bug Fixes - -* None. - - -## 1.0.0.rc.1 (2016-04-30) - -This version contains no changes. - - -## 1.0.0.beta.1 (2015-12-30) - -This version contains no changes. - - -## 0.4.2 (2015-04-03) - - -## 0.4.1 (2015-02-25) - -* Added the `pod plugins installed` subcommand. - [Olivier Halligon](https://github.com/AliSoftware) - -## 0.4.0 (2014-12-25) - -* Added the `pod plugins publish` subcommand. - [Olivier Halligon](https://github.com/AliSoftware) - -## 0.3.2 (2014-11-02) - -* Switch to using cocoapods-plugins JSON file instead of from Cocoapods.org's repo. - [542919](https://github.com/CocoaPods/cocoapods-plugins/commit/542919902e611c33bb0e02848037474529ddd0f9) - [Florian Hanke](https://github.com/floere) - - -## 0.3.1 (2014-09-12) - -* Restore compatibility with Ruby 1.8.7. - [#30](https://github.com/CocoaPods/cocoapods-plugins/issues/30) - [Fabio Pelosin](https://github.com/fabiopelosin) - -## 0.3.0 (2014-09-11) - -* Added a reminder to add plugin to `plugins.json` once released. - [#27](https://github.com/CocoaPods/cocoapods-plugins/issues/27) - [Olivier Halligon](https://github.com/AliSoftware) - -* Print out the version of plugins when invoked with `--verbose`. - [#16](https://github.com/CocoaPods/cocoapods-plugins/issues/16) - [David Grandinetti](https://github.com/dbgrandi) - -## 0.2.0 (2014-05-20) - -* Migrating to new syntax of CLAide::Command#arguments. - [#23](https://github.com/CocoaPods/cocoapods-plugins/issues/23) - [Olivier Halligon](https://github.com/AliSoftware) - -* Printing URL of template used. - [#21](https://github.com/CocoaPods/cocoapods-plugins/issues/21) - [Olivier Halligon](https://github.com/AliSoftware) - -* `create` subcommand now prefixes the given name if not already. - [#20](https://github.com/CocoaPods/cocoapods-plugins/issues/20) - [Olivier Halligon](https://github.com/AliSoftware) - -## 0.1.1 (2014-05-02) - -* Making `pod plugins` an abstract command, with `list` the default subcommand. - [#11](https://github.com/CocoaPods/cocoapods-plugins/issues/11) - [#12](https://github.com/CocoaPods/cocoapods-plugins/issues/12) - [Olivier Halligon](https://github.com/AliSoftware) - -* Added `search` subcommand to search plugins by name, author and description. - [#6](https://github.com/CocoaPods/cocoapods-plugins/issues/6) - [Olivier Halligon](https://github.com/AliSoftware) - -* Refactoring and improved output formatting. - [#8](https://github.com/CocoaPods/cocoapods-plugins/issues/8) - [#10](https://github.com/CocoaPods/cocoapods-plugins/issues/10) - [#13](https://github.com/CocoaPods/cocoapods-plugins/issues/13) - [Olivier Halligon](https://github.com/AliSoftware) - -* Fixing coding conventions and RuboCop offenses. - [#17](https://github.com/CocoaPods/cocoapods-plugins/issues/17) - [Olivier Halligon](https://github.com/AliSoftware) - -## 0.1.0 (2014-04-22) - -* Initial implementation. - [David Grandinetti](https://github.com/dbgrandi) - -* Added `create` subcommand to create an empty project for a new plugin. - [#6](https://github.com/CocoaPods/cocoapods-plugins/issues/6) - [Boris Bügling](https://github.com/neonichu) diff --git a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/Gemfile b/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/Gemfile deleted file mode 100644 index 14a4ed4d..00000000 --- a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/Gemfile +++ /dev/null @@ -1,18 +0,0 @@ -source 'https://rubygems.org' - -gemspec - -group :development do - # gem 'cocoapods', :git => 'https://github.com/CocoaPods/CocoaPods.git', :branch => 'master' - # gem 'cocoapods-core', :git => 'https://github.com/CocoaPods/Core.git', :branch => 'master' - gem 'claide', :git => 'https://github.com/CocoaPods/CLAide.git', :branch => 'master' - - gem 'bacon' - gem 'mocha-on-bacon' - gem 'prettybacon' - gem 'vcr' - gem 'webmock' - - gem 'codeclimate-test-reporter', :require => nil - gem 'rubocop' -end diff --git a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/Gemfile.lock b/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/Gemfile.lock deleted file mode 100644 index dc09d6a2..00000000 --- a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/Gemfile.lock +++ /dev/null @@ -1,90 +0,0 @@ -GIT - remote: https://github.com/CocoaPods/CLAide.git - revision: 00927807580554b7d3485d673c90386d3fd8fde0 - branch: master - specs: - claide (0.8.1) - -PATH - remote: . - specs: - claide-plugins (0.9.1) - cork - nap - open4 (~> 1.3) - -GEM - remote: https://rubygems.org/ - specs: - addressable (2.3.7) - ast (2.0.0) - astrolabe (1.3.0) - parser (>= 2.2.0.pre.3, < 3.0) - bacon (1.2.0) - codeclimate-test-reporter (0.4.0) - simplecov (>= 0.7.1, < 1.0.0) - coderay (1.1.1) - colored (1.2) - cork (0.2.0) - colored (~> 1.2) - crack (0.4.2) - safe_yaml (~> 1.0.0) - docile (1.1.5) - metaclass (0.0.4) - method_source (0.8.2) - mocha (1.1.0) - metaclass (~> 0.0.1) - mocha-on-bacon (0.2.2) - mocha (>= 0.13.0) - multi_json (1.10.1) - nap (1.1.0) - open4 (1.3.4) - parser (2.2.0.3) - ast (>= 1.1, < 3.0) - powerpack (0.1.0) - prettybacon (0.0.2) - bacon (~> 1.2) - pry (0.10.4) - coderay (~> 1.1.0) - method_source (~> 0.8.1) - slop (~> 3.4) - rainbow (2.0.0) - rake (10.3.2) - rubocop (0.29.1) - astrolabe (~> 1.3) - parser (>= 2.2.0.1, < 3.0) - powerpack (~> 0.1) - rainbow (>= 1.99.1, < 3.0) - ruby-progressbar (~> 1.4) - ruby-progressbar (1.7.5) - safe_yaml (1.0.4) - simplecov (0.9.0) - docile (~> 1.1.0) - multi_json - simplecov-html (~> 0.8.0) - simplecov-html (0.8.0) - slop (3.6.0) - vcr (2.9.3) - webmock (1.20.4) - addressable (>= 2.3.6) - crack (>= 0.3.2) - -PLATFORMS - ruby - -DEPENDENCIES - bacon - bundler (~> 1.3) - claide! - claide-plugins! - codeclimate-test-reporter - mocha-on-bacon - prettybacon - pry - rake - rubocop - vcr - webmock - -BUNDLED WITH - 1.13.1 diff --git a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/LICENSE b/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/LICENSE deleted file mode 100644 index 0d932da4..00000000 --- a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014 David Grandinetti - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. \ No newline at end of file diff --git a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/README.md b/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/README.md deleted file mode 100644 index f79fb356..00000000 --- a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/README.md +++ /dev/null @@ -1,73 +0,0 @@ -# CLAide plugins - -[![Build Status](https://img.shields.io/travis/CocoaPods/cocoapods-plugins/master.svg?style=flat)](https://travis-ci.org/CocoaPods/cocoapods-plugins) -[![Coverage](https://img.shields.io/codeclimate/coverage/github/CocoaPods/cocoapods-plugins.svg?style=flat)](https://codeclimate.com/github/CocoaPods/cocoapods-plugins) -[![Code Climate](https://img.shields.io/codeclimate/github/CocoaPods/cocoapods-plugins.svg?style=flat)](https://codeclimate.com/github/CocoaPods/cocoapods-plugins) - -CLAide plugin which shows info about available CLAide plugins or helps you get started developing a new plugin. Yeah, it's very meta. - -It provides the foundations for CocoaPods and Danger's plugin infrastructure. - -## Installation - -This isn't really a user-facing gem, you need to add it to your library. - -Here is how it is added into Danger: - -```ruby -module Danger - class Runner < CLAide::Command - require "danger/commands/init" - require "danger/commands/local" - require "danger/commands/systems" - - # manually add claide plugins as subcommands - require "claide_plugin" - @subcommands << CLAide::Command::Plugins - CLAide::Plugins.config = - CLAide::Plugins::Configuration.new( - "Danger", - "danger", - "https://raw.githubusercontent.com/danger/danger.systems/master/plugins-search-generated.json", - "https://github.com/danger/danger-plugin-template" - ) - - require "danger/commands/plugins/plugin_lint" - require "danger/commands/plugins/plugin_json" - require "danger/commands/plugins/plugin_readme" - -``` - -## Usage - -##### List installed plugins - - $ [your tool] plugins installed - -List all installed plugins with their respective version - -##### List known plugins - - $ [your tool] plugins list - -List all known plugins (according to the list hosted on `http://github.com/CocoaPods/cocoapods-plugins`) - -##### Search plugins - - $ [your tool] plugins search QUERY - -Search plugins whose name contains the given text (ignoring case). With --full, it searches by name but also by author and description. - -##### Create a new plugin - - $ [your tool] plugins create NAME [TEMPLATE_URL] - -Create a scaffold for the development of a new plugin according to the your tool's best practices. - -If a `TEMPLATE_URL`, pointing to a git repo containing a compatible template, is specified, it will be used in place of the default one. - -## Get your plugin listed - - $ [your tool] plugins publish - -Create an issue in the plugins search GitHub repository to ask for your plugin to be added to the official list (with the proper JSON fragment to be added to `plugins.json` so we just have to copy/paste it). diff --git a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/Rakefile b/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/Rakefile deleted file mode 100644 index 3a2faa08..00000000 --- a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/Rakefile +++ /dev/null @@ -1,90 +0,0 @@ -# Bootstrap -#-----------------------------------------------------------------------------# - -task :bootstrap do - if system('which bundle') - sh 'bundle install' - else - $stderr.puts "\033[0;31m" \ - "[!] Please install the bundler gem manually:\n" \ - ' $ [sudo] gem install bundler' \ - "\e[0m" - exit 1 - end -end - -begin - - require 'bundler/gem_tasks' - - task :default => 'spec' - - # Spec - #-----------------------------------------------------------------------------# - - desc 'Runs all the specs' - task :spec do - start_time = Time.now - sh "bundle exec bacon #{specs('**')}" - duration = Time.now - start_time - puts "Tests completed in #{duration}s" - Rake::Task['rubocop'].invoke - - # This is not used in this library - # Rake::Task['validate_json'].invoke - end - - def specs(dir) - FileList["spec/#{dir}/*_spec.rb"].shuffle.join(' ') - end - - # Rubocop - #-----------------------------------------------------------------------------# - - desc 'Checks code style' - task :rubocop do - require 'rubocop' - cli = RuboCop::CLI.new - result = cli.run(FileList['{spec,lib}/**/*.rb']) - abort('RuboCop failed!') unless result == 0 - end - - # plugins.json - #----------------------------------------------------------------------------# - - desc 'Validates plugins.json' - task :validate_json do - require 'json' - require 'pathname' - - puts 'Validating plugins.json' - - json_file = Pathname(__FILE__).parent + 'plugins.json' - json = json_file.read - plugins = JSON.load(json) - abort('Invalid JSON in plugins.json') unless plugins - keys = %w(gem name author social_media_url url description) - optional_keys = %w(social_media_url) - errors = plugins['plugins'].reduce([]) do |errors, plugin| - extra_keys = plugin.keys - keys - unless extra_keys.empty? - errors << "plugin `#{plugin['name']}` has extra keys #{extra_keys}" - end - (keys - optional_keys).each do |key| - unless plugin[key] - errors << "plugin `#{plugin['name']}` is missing key `#{key}`" - end - end - errors - end - unless errors.empty? - abort("Invalid plugins.json:\n\n#{errors.join("\n")}") - end - end - -rescue LoadError - $stderr.puts "\033[0;31m" \ - '[!] Some Rake tasks haven been disabled because the environment' \ - ' couldn’t be loaded. Be sure to run `rake bootstrap` first.' \ - "\e[0m" -end diff --git a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/claide-plugins.gemspec b/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/claide-plugins.gemspec deleted file mode 100644 index 39186c5c..00000000 --- a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/claide-plugins.gemspec +++ /dev/null @@ -1,33 +0,0 @@ -# coding: utf-8 -lib = File.expand_path('../lib', __FILE__) -$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) -require 'claide_plugins.rb' - -Gem::Specification.new do |spec| - spec.name = 'claide-plugins' - spec.version = CLAidePlugins::VERSION - spec.authors = ['David Grandinetti', 'Olivier Halligon'] - spec.summary = %q{CLAide plugin which shows info about available CLAide plugins.} - spec.description = <<-DESC - This CLAide plugin shows information about all available CLAide plugins - (yes, this is very meta!). - This plugin adds the "plugins" subcommand to a binary so that you can list - all plugins (registered in the reference JSON hosted at CocoaPods/cocoapods-plugins) - DESC - spec.homepage = 'https://github.com/cocoapods/claide-plugins' - spec.license = 'MIT' - - spec.files = `git ls-files`.split($/) - spec.test_files = spec.files.grep(%r{^(test|spec|features)/}) - spec.require_paths = ['lib'] - - spec.add_runtime_dependency 'nap' - spec.add_runtime_dependency 'cork' - spec.add_runtime_dependency 'open4', '~> 1.3' - - spec.add_development_dependency 'bundler', '~> 1.3' - spec.add_development_dependency 'rake' - spec.add_development_dependency 'pry' - - spec.required_ruby_version = '>= 2.0.0' -end diff --git a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/lib/claide/command/gem_helper.rb b/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/lib/claide/command/gem_helper.rb deleted file mode 100644 index ece01031..00000000 --- a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/lib/claide/command/gem_helper.rb +++ /dev/null @@ -1,120 +0,0 @@ -require 'claide/command/gem_index_cache' - -module CLAide - class Command - # This module is used by Command::PluginsHelper to download the Gem - # Specification data, check if a Gem is installed, and provide info - # on all versions of a Gem. - # - module GemHelper - # A GemIndexCache to manage downloading/caching the spec index. - # - @cache = nil - - # Getter for GemIndexCache - # - # @return [GemIndexCache] a new or memoized GemIndexCache - # - def self.cache - @cache ||= GemIndexCache.new - end - - # Instantiate a cache and download the spec index if it has - # not already been done. - # - def self.download_and_cache_specs - cache.download_and_cache_specs - end - - # Tells if a gem is installed - # - # @param [String] gem_name - # The name of the plugin gem to test - # - # @param [String] version_string - # An optional version string, used to check if a specific - # version of a gem is installed - # - # @return [Bool] true if the gem is installed, false otherwise. - # - def self.gem_installed?(gem_name, version_string = nil) - version = Gem::Version.new(version_string) if version_string - - if Gem::Specification.respond_to?(:find_all_by_name) - gems = Gem::Specification.find_all_by_name(gem_name) - return !gems.empty? unless version - gems.each { |gem| return true if gem.version == version } - false - else - dep = Gem::Dependency.new(gem_name, version_string) - !Gem.source_index.search(dep).empty? - end - end - - # Get the version of a gem that is installed locally. If more than - # one version is installed, this returns the first version found, - # which MAY not be the highest/newest version. - # - # @return [String] The version of the gem that is installed, - # or nil if it is not installed. - # - def self.installed_version(gem_name) - if Gem::Specification.respond_to?(:find_all_by_name) - gem = Gem::Specification.find_all_by_name(gem_name).first - else - dep = Gem::Dependency.new(gem_name) - gem = Gem.source_index.search(dep).first - end - gem ? gem.version.to_s : nil - end - - # Create a string containing all versions of a plugin, - # colored to indicate if a specific version is installed - # locally. - # - # @param [String] plugin_name - # The name of the plugin gem - # - # @param [GemIndexCache] index_cache - # Optional index cache can be passed in, otherwise - # the module instance is used. - # - # @return [String] a string containing a comma separated - # concatenation of all versions of a plugin - # that were found on rubygems.org - # - def self.versions_string(plugin_name, index_cache = @cache) - name_tuples = index_cache.specs_with_name(plugin_name) - sorted_versions = name_tuples.sort_by(&:version) - version_strings = colorize_versions(sorted_versions) - version_strings.join ', ' - end - - #----------------# - - private - - # Colorize an Array of version strings so versions that are installed - # are green and uninstalled versions are yellow. - # - # @param [Array] versions - # sorted array of Gem::NameTuples representing all versions of - # a plugin gem. - # - # @return [Array] An array of strings, each one being the version - # string of the same plugin - # - def self.colorize_versions(versions) - colored_strings = [] - versions.reverse_each do |name_tuple| - if gem_installed?(name_tuple.name, name_tuple.version.to_s) - colored_strings << name_tuple.version.to_s.green - else - colored_strings << name_tuple.version.to_s.yellow - end - end - colored_strings - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/lib/claide/command/gem_index_cache.rb b/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/lib/claide/command/gem_index_cache.rb deleted file mode 100644 index aceeb1dd..00000000 --- a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/lib/claide/command/gem_index_cache.rb +++ /dev/null @@ -1,87 +0,0 @@ -require 'claide/command/gem_helper' - -module CLAide - class Command - # This class is used by Command::GemsHelper to download the Gem - # Specification index from rubygems.org and provide info about - # the index. - # - class GemIndexCache - # A memoized hash of all the rubygem specs. If it is nil, the specs will - # be downloaded, which will take a few seconds to download. - # - # @return [Hash] The hash of all rubygems - # - def specs - @specs ||= download_specs - end - - # Alias to make the initial caching process more readable. - # - alias_method :download_and_cache_specs, :specs - - # Get an Array of Gem::NameTuple objects that match a given - # spec name. - # - # @param [String] name - # The name of the gem to match on (e.g. 'cocoapods-try') - # - # @return [Array] Array of Gem::NameTuple that match the name - # - def specs_with_name(name) - matching_specs = @specs.select do |spec| - spec[0].name == name - end - - name_tuples = [] - matching_specs.each do |(name_tuple, _)| - name_tuples << name_tuple - end - - name_tuples - end - - #----------------# - - private - - # Force the rubygem spec index file - # - # @return [Hash] The hash of all rubygems - # - def download_specs - UI.puts 'Downloading Rubygem specification index...' - fetcher = Gem::SpecFetcher.fetcher - results, errors = fetcher.available_specs(:released) - - unless errors.empty? - UI.puts 'Error downloading Rubygem specification index: ' + - errors.first.error.to_s - return [] - end - - flatten_fetcher_results(results) - end - - # Flatten the dictionary returned from Gem::SpecFetcher - # to a simple array. - # - # @param [Hash] results - # the hash returned from the call to - # Gem::SpecFetcher.available_specs() - # - # @return [Array] Array of all spec results - # - def flatten_fetcher_results(results) - specs = [] - results.each do |source, source_specs| - source_specs.each do |tuple| - specs << [tuple, source] - end - end - - specs - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/lib/claide/command/plugins.rb b/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/lib/claide/command/plugins.rb deleted file mode 100644 index 444778fd..00000000 --- a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/lib/claide/command/plugins.rb +++ /dev/null @@ -1,47 +0,0 @@ -require 'rest' -require 'json' -require 'cork' -require 'claide' -require 'claide/command/plugins_config' - -UI = Cork::Board.new - -module CLAide - module Plugins - class << self - attr_accessor :config - end - # set a default configuration that will work with claide-plugins - self.config = Configuration.new - end - - # Indicates a runtime error **not** caused by a bug. - # - class PlainInformative < StandardError; end - - # Indicates a user error. - # - class Informative < PlainInformative; end - - class Command - # The claide plugins command. - # - class Plugins < Command - require 'claide/command/plugins/list' - require 'claide/command/plugins/search' - require 'claide/command/plugins/create' - - self.abstract_command = true - self.default_subcommand = 'list' - - self.summary = 'Show available plugins' - self.description = <<-DESC - Lists or searches the available plugins - and show if you have them installed or not. - - Also allows you to quickly create a new - plugin using a provided template. - DESC - end - end -end diff --git a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/lib/claide/command/plugins/create.rb b/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/lib/claide/command/plugins/create.rb deleted file mode 100644 index 28e81eab..00000000 --- a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/lib/claide/command/plugins/create.rb +++ /dev/null @@ -1,71 +0,0 @@ -require 'claide/command/plugins_helper' -require 'claide/command/gem_helper' -require 'claide/command/template_runner' - -module CLAide - class Command - class Plugins - # The create subcommand. Used to create a new plugin using either the - # default template (CocoaPods/cocoapods-plugin-template) or a custom - # template - # - class Create < Plugins - self.summary = 'Creates a new plugin' - def self.description - <<-DESC - Creates a scaffold for the development of a new plugin - named `NAME` according to the best practices. - - If a `TEMPLATE_URL`, pointing to a git repo containing a - compatible template, is specified, it will be used - in place of the default one. - DESC - end - - self.arguments = [ - CLAide::Argument.new('NAME', true), - CLAide::Argument.new('TEMPLATE_URL', false), - ] - - def initialize(argv) - @name = argv.shift_argument - prefix = CLAide::Plugins.config.plugin_prefix + '-' - unless @name.nil? || @name.empty? || @name.start_with?(prefix) - @name = prefix + @name.dup - end - @template_url = argv.shift_argument - super - end - - def validate! - super - if @name.nil? || @name.empty? - help! 'A name for the plugin is required.' - end - - help! 'The plugin name cannot contain spaces.' if @name.match(/\s/) - end - - def run - runner = TemplateRunner.new @name, @template_url - runner.clone_template - runner.configure_template - show_reminder - end - - #----------------------------------------# - - private - - # Shows a reminder to the plugin author to make a Pull Request - # in order to update plugins.json once the plugin is released - # - def show_reminder - repo = PluginsHelper.plugins_raw_url - UI.notice "Don't forget to create a Pull Request on #{repo}\n" \ - ' to add your plugin to the plugins.json file once it is released!' - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/lib/claide/command/plugins/list.rb b/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/lib/claide/command/plugins/list.rb deleted file mode 100644 index 4ff258f9..00000000 --- a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/lib/claide/command/plugins/list.rb +++ /dev/null @@ -1,34 +0,0 @@ -require 'claide/command/plugins_helper' -require 'claide/command/gem_helper' - -module CLAide - class Command - class Plugins - # The list subcommand. Used to list all known plugins - # - class List < Plugins - self.summary = 'List all known plugins' - def self.description - "List all known plugins (according to the list - hosted on #{ CLAide::Plugins.config.plugin_list_url })" - end - - def self.options - super.reject { |option, _| option == '--silent' } - end - - def run - plugins = PluginsHelper.known_plugins - GemHelper.download_and_cache_specs if self.verbose? - - name = CLAide::Plugins.config.name - UI.title "Available #{name} Plugins:" do - plugins.each do |plugin| - PluginsHelper.print_plugin plugin, self.verbose? - end - end - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/lib/claide/command/plugins/search.rb b/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/lib/claide/command/plugins/search.rb deleted file mode 100644 index 7e763c56..00000000 --- a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/lib/claide/command/plugins/search.rb +++ /dev/null @@ -1,60 +0,0 @@ -require 'claide/command/plugins_helper' -require 'claide/command/gem_helper' -require 'claide/command' - -module CLAide - class Command - class Plugins - # The search subcommand. - # Used to search a plugin in the list of known plugins, - # searching into the name, author description fields - # - class Search < Plugins - self.summary = 'Search for known plugins' - self.description = <<-DESC - Searches plugins whose 'name' contains the given `QUERY`. - `QUERY` is a regular expression, ignoring case. - - With `--full`, it also searches by 'author' and 'description'. - DESC - - self.arguments = [ - CLAide::Argument.new('QUERY', true), - ] - - def self.options - [ - ['--full', 'Search by name, author, and description'], - ].concat(super.reject { |option, _| option == '--silent' }) - end - - def initialize(argv) - @full_text_search = argv.flag?('full') - @query = argv.shift_argument unless argv.arguments.empty? - super - end - - def validate! - super - help! 'A search query is required.' if @query.nil? || @query.empty? - begin - /#{@query}/ - rescue RegexpError - help! 'A valid regular expression is required.' - end - end - - def run - plugins = PluginsHelper.matching_plugins(@query, @full_text_search) - GemHelper.download_and_cache_specs if self.verbose? - - name = CLAide::Plugins.config.name - UI.title "Available #{name} Plugins matching '#{@query}':" - plugins.each do |plugin| - PluginsHelper.print_plugin plugin, self.verbose? - end - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/lib/claide/command/plugins_config.rb b/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/lib/claide/command/plugins_config.rb deleted file mode 100644 index 74d4bff3..00000000 --- a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/lib/claide/command/plugins_config.rb +++ /dev/null @@ -1,35 +0,0 @@ -require 'claide' - -module CLAide - module Plugins - class Configuration - # name of the plugin - attr_accessor :name - - # prefix to use when searching for gems to load at runtime - attr_accessor :plugin_prefix - - # url for JSON file that holds list of plugins to show when searching - attr_accessor :plugin_list_url - - # url for repo that holds template to use when creating a new plugin - attr_accessor :plugin_template_url - - def initialize(name = 'default name', - plugin_prefix = 'claide', - plugin_list_url = 'https://github.com/cocoapods/claide-plugins/something.json', - plugin_template_url = 'https://github.com/cocoapods/claide-plugins-template') - @name = name - @plugin_prefix = plugin_prefix - @plugin_list_url = plugin_list_url - @plugin_template_url = plugin_template_url - end - end - - class << self - attr_accessor :config - end - # set a default configuration that will work with claide-plugins - self.config = Configuration.new - end -end diff --git a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/lib/claide/command/plugins_helper.rb b/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/lib/claide/command/plugins_helper.rb deleted file mode 100644 index 24e4858e..00000000 --- a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/lib/claide/command/plugins_helper.rb +++ /dev/null @@ -1,139 +0,0 @@ -require 'claide/command/gem_helper' - -module CLAide - class Command - # This module is used by Command::Plugins::List - # and Command::Plugins::Search to download and parse - # the JSON describing the plugins list and manipulate it - # - module PluginsHelper - def self.plugins_raw_url - CLAide::Plugins.config.plugin_list_url - end - - def self.plugin_prefix - CLAide::Plugins.config.plugin_prefix - end - - # Force-download the JSON - # - # @return [Hash] The hash representing the JSON with all known plugins - # - def self.download_json - UI.puts 'Downloading Plugins list...' - response = REST.get(plugins_raw_url) - if response.ok? - parse_json(response.body) - else - raise Informative, 'Could not download plugins list ' \ - "from #{plugin_prefix}-plugins: #{response.inspect}" - end - end - - # The list of all known plugins, according to - # the JSON hosted on github's cocoapods-plugins - # - # @return [Array] all known plugins, as listed in the downloaded JSON - # - def self.known_plugins - json = download_json - json['plugins'] - end - - # Filter plugins to return only matching ones - # - # @param [String] query - # A query string that corresponds to a valid RegExp pattern. - # - # @param [Bool] full_text_search - # false only searches in the plugin's name. - # true searches in the plugin's name, author and description. - # - # @return [Array] all plugins matching the query - # - def self.matching_plugins(query, full_text_search) - query_regexp = /#{query}/i - known_plugins.reject do |plugin| - texts = [plugin['name']] - if full_text_search - texts << plugin['author'] if plugin['author'] - texts << plugin['description'] if plugin['description'] - end - texts.grep(query_regexp).empty? - end - end - - # Display information about a plugin - # - # @param [Hash] plugin - # The hash describing the plugin - # - # @param [Bool] verbose - # If true, will also print the author of the plugins. - # Defaults to false. - # - def self.print_plugin(plugin, verbose = false) - plugin_colored_name = plugin_title(plugin) - - UI.title(plugin_colored_name, '', 1) do - UI.puts_indented plugin['description'] - ljust = verbose ? 16 : 11 - UI.labeled('Gem', plugin['gem'], ljust) - UI.labeled('URL', plugin['url'], ljust) - print_verbose_plugin(plugin, ljust) if verbose - end - end - - #----------------# - - private - - # Smaller helper to print out the verbose details - # for a plugin. - # - # @param [Hash] plugin - # The hash describing the plugin - # - # @param [Integer] ljust - # The left justification that is passed into UI.labeled - # - def self.print_verbose_plugin(plugin, ljust) - UI.labeled('Author', plugin['author'], ljust) - unless GemHelper.cache.specs.empty? - versions = GemHelper.versions_string(plugin['gem']) - UI.labeled('Versions', versions, ljust) - end - end - - # Parse the given JSON data, handling parsing errors if any - # - # @param [String] json_str - # The string representation of the JSON to parse - # - def self.parse_json(json_str) - JSON.parse(json_str) - rescue JSON::ParserError => e - raise Informative, - "Invalid plugins list from #{plugin_prefix}-plugins: #{e}" - end - - # Format the title line to print the plugin info with print_plugin - # coloring it according to whether the plugin is installed or not - # - # @param [Hash] plugin - # The hash describing the plugin - # - # @return [String] The formatted and colored title - # - def self.plugin_title(plugin) - plugin_name = "-> #{plugin['name']}" - if GemHelper.gem_installed?(plugin['gem']) - plugin_name += " (#{GemHelper.installed_version(plugin['gem'])})" - plugin_name.green - else - plugin_name.yellow - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/lib/claide/command/template_runner.rb b/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/lib/claide/command/template_runner.rb deleted file mode 100644 index 0919dc38..00000000 --- a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/lib/claide/command/template_runner.rb +++ /dev/null @@ -1,51 +0,0 @@ -require 'claide/command/plugins_helper' -require 'claide/executable' - -module CLAide - class TemplateRunner - extend CLAide::Executable - executable :git - - def initialize(name, template_url) - @name = name - @template_url = template_url - end - - # Clones the template from the remote in the working directory using - # the name of the plugin. - # - # @return [void] - # - def clone_template - UI.section("-> Creating `#{@name}` plugin") do - UI.notice "using template '#{template_repo_url}'" - command = ['clone', template_repo_url, @name] - git! command - end - end - - # Runs the template configuration utilities. - # - # @return [void] - # - def configure_template - UI.section('-> Configuring template') do - Dir.chdir(@name) do - if File.file? 'configure' - system "./configure #{@name}" - else - UI.warn 'Template does not have a configure file.' - end - end - end - end - - # Checks if a template URL is given else returns the Plugins.config URL - # - # @return String - # - def template_repo_url - @template_url || CLAide::Plugins.config.plugin_template_url - end - end -end diff --git a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/lib/claide/executable.rb b/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/lib/claide/executable.rb deleted file mode 100644 index 1b839bfe..00000000 --- a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/lib/claide/executable.rb +++ /dev/null @@ -1,116 +0,0 @@ -module CLAide - # Module which provides support for running executables. - # - # In a class it can be used as: - # - # extend Executable - # executable :git - # - # This will create two methods `git` and `git!` both accept a command but - # the latter will raise on non successful executions. The methods return the - # output of the command. - # - module Executable - # Creates the methods for the executable with the given name. - # - # @param [Symbol] name - # the name of the executable. - # - # @return [void] - # - def executable(name) - define_method(name) do |*command| - Executable.execute_command(name, Array(command).flatten, false) - end - - define_method(name.to_s + '!') do |*command| - Executable.execute_command(name, Array(command).flatten, true) - end - end - - # Executes the given command. Displays output if in verbose mode. - # - # @param [String] bin - # The binary to use. - # - # @param [Array<#to_s>] command - # The command to send to the binary. - # - # @param [Bool] raise_on_failure - # Whether it should raise if the command fails. - # - # @raise If the executable could not be located. - # - # @raise If the command fails and the `raise_on_failure` is set to true. - # - # @return [String] the output of the command (STDOUT and STDERR). - # - # @todo Find a way to display the live output of the commands. - # - def self.execute_command(exe, command, raise_on_failure) - bin = `which #{exe}`.strip - raise Informative, "Unable to locate `#{exe}`" if bin.empty? - - require 'open4' - require 'shellwords' - - command = command.map(&:to_s) - full_command = \ - "#{bin.shellescape} #{command.map(&:shellescape).join(' ')}" - - # if Config.instance.verbose? - # UI.message("$ #{full_command}") - # stdout, stderr = Indenter.new(STDOUT), Indenter.new(STDERR) - # else - stdout, stderr = Indenter.new, Indenter.new - # end - - options = { :stdout => stdout, :stderr => stderr, :status => true } - status = Open4.spawn(bin, command, options) - output = stdout.join("\n") + stderr.join("\n") - unless status.success? - if raise_on_failure - raise Informative, "#{full_command}\n\n#{output}" - else - UI.message("[!] Failed: #{full_command}".red) - end - end - output - end - - #-------------------------------------------------------------------------# - - # Helper class that allows to write to an {IO} instance taking into account - # the UI indentation level. - # - class Indenter < ::Array - # @return [Fixnum] The indentation level of the UI. - # - attr_accessor :indent - - # @return [IO] the {IO} to which the output should be printed. - # - attr_accessor :io - - # @param [IO] io @see io - # - def initialize(io = nil) - @io = io - @indent = ' ' * UI.indentation_level - end - - # Stores a portion of the output and prints it to the {IO} instance. - # - # @param [String] value - # the output to print. - # - # @return [void] - # - def <<(value) - super - ensure - @io << "#{ indent }#{ value }" if @io - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/lib/claide_plugin.rb b/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/lib/claide_plugin.rb deleted file mode 100644 index c0a4508e..00000000 --- a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/lib/claide_plugin.rb +++ /dev/null @@ -1 +0,0 @@ -require 'claide/command/plugins' diff --git a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/lib/claide_plugins.rb b/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/lib/claide_plugins.rb deleted file mode 100644 index c77c66e1..00000000 --- a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/lib/claide_plugins.rb +++ /dev/null @@ -1,3 +0,0 @@ -module CLAidePlugins - VERSION = '0.9.2'.freeze -end diff --git a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/spec/command/gem_helper_spec.rb b/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/spec/command/gem_helper_spec.rb deleted file mode 100644 index 3b7612bd..00000000 --- a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/spec/command/gem_helper_spec.rb +++ /dev/null @@ -1,41 +0,0 @@ -require File.expand_path('../spec_helper', File.dirname(__FILE__)) -require 'claide/command/gem_helper' - -# The CLAide namespace -# -module CLAide - describe Command::GemHelper do - before do - UI_OUT.reopen - end - - after do - mocha_teardown - end - - it 'detects if a gem is installed' do - Command::GemHelper.gem_installed?('bacon').should.be.true - Command::GemHelper.gem_installed?('fake-fake-fake-gem').should.be.false - end - - it 'detects if a specific version of a gem is installed' do - Command::GemHelper.gem_installed?('bacon', Bacon::VERSION).should.be.true - impossibacon = Gem::Version.new(Bacon::VERSION).bump - Command::GemHelper.gem_installed?('bacon', impossibacon).should.be.false - end - - it 'creates a version list that includes all versions of a single gem' do - spec2 = Gem::NameTuple.new('cocoapods-plugins', Gem::Version.new('0.2.0')) - spec1 = Gem::NameTuple.new('cocoapods-plugins', Gem::Version.new('0.1.0')) - response = [{ 1 => [spec2, spec1] }, []] - Gem::SpecFetcher.any_instance.stubs(:available_specs).returns(response) - - @cache = Command::GemIndexCache.new - @cache.download_and_cache_specs - versions_string = - Command::GemHelper.versions_string('cocoapods-plugins', @cache) - versions_string.should.include('0.2.0') - versions_string.should.include('0.1.0') - end - end -end diff --git a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/spec/command/gem_index_cache_spec.rb b/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/spec/command/gem_index_cache_spec.rb deleted file mode 100644 index 22e6baf3..00000000 --- a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/spec/command/gem_index_cache_spec.rb +++ /dev/null @@ -1,38 +0,0 @@ -require File.expand_path('../spec_helper', File.dirname(__FILE__)) - -# The CocoaPods namespace -# -module CLAide - describe Command::GemIndexCache do - before do - @cache = Command::GemIndexCache.new - UI_OUT.reopen - end - - after do - mocha_teardown - end - - it 'notifies the user that it is downloading the spec index' do - response = [{}, []] - Gem::SpecFetcher.any_instance.stubs(:available_specs).returns(response) - - @cache.download_and_cache_specs - out = UI_OUT.string - out.should.include('Downloading Rubygem specification index...') - out.should.not.include('Error downloading Rubygem specification') - end - - it 'notifies the user when getting the spec index fails' do - error = Gem::RemoteFetcher::FetchError.new('no host', 'bad url') - wrapper_error = stub(:error => error) - response = [[], [wrapper_error]] - Gem::SpecFetcher.any_instance.stubs(:available_specs).returns(response) - - @cache.download_and_cache_specs - @cache.specs.should.be.empty? - UI_OUT.string.should.include('Downloading Rubygem specification index...') - UI_OUT.string.should.include('Error downloading Rubygem specification') - end - end -end diff --git a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/spec/command/plugins/create_spec.rb b/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/spec/command/plugins/create_spec.rb deleted file mode 100644 index 59156afe..00000000 --- a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/spec/command/plugins/create_spec.rb +++ /dev/null @@ -1,105 +0,0 @@ -require File.expand_path('../../../spec_helper', __FILE__) -require 'tmpdir' - -# The CocoaPods namespace -# -module CLAide - describe Command::Plugins::Create do - extend SpecHelper::PluginsCreateCommand - - # We need to have a working repo for the template inside this test - # suite so we're using the real Danger config file, then setting - # it back to the default. - before do - UI_OUT.reopen - config = CLAide::Plugins::Configuration.new('Danger', - 'danger', - 'https://raw.githubusercontent.com/danger/danger.systems/master/plugins-search-generated.json', - 'https://github.com/danger/danger-plugin-template') - CLAide::Plugins.config = config - end - - after do - CLAide::Plugins.config = default_testing_config - end - - it 'registers itself' do - Command.parse(%w(plugins create)). - should.be.instance_of Command::Plugins::Create - end - - #--- Validation - - it 'should require a name is passed in' do - @command = create_command - should.raise(CLAide::Help) do - @command.validate! - end.message.should.match(/A name for the plugin is required./) - end - - it 'should require a non-empty name is passed in' do - @command = create_command('') - should.raise(CLAide::Help) do - @command.validate! - end.message.should.match(/A name for the plugin is required./) - end - - it 'should require the name does not have spaces' do - @command = create_command('my gem') - should.raise(CLAide::Help) do - @command.validate! - end.message.should.match(/The plugin name cannot contain spaces./) - end - - #--- Naming - - # These have to be `danger` as the configure script runs from the danger - # plugin template repo. - - it 'should prefix the given name if not already' do - @command = create_command('unprefixed') - Dir.mktmpdir do |tmpdir| - Dir.chdir(tmpdir) do - @command.run - end - end - UI_OUT.string.should.include('Creating `danger-unprefixed` plugin') - end - - it 'should not prefix the name if already prefixed' do - @command = create_command('danger-prefixed') - Dir.mktmpdir do |tmpdir| - Dir.chdir(tmpdir) do - @command.run - end - end - UI_OUT.string.should.include('Creating `danger-prefixed` plugin') - end - - #--- Template download - - it 'should download the default template repository' do - @command = create_command('danger-banana') - - template_repo = 'https://github.com/danger/' \ - 'danger-plugin-template' - git_command = ['clone', template_repo, 'danger-banana'] - CLAide::TemplateRunner.any_instance.expects(:git!).with(git_command) - CLAide::TemplateRunner.any_instance.expects(:configure_template) - @command.run - UI_OUT.string.should.include('Creating `danger-banana` plugin') - end - - it 'should download the passed in template repository' do - alt_repo = 'https://github.com/danger/' \ - 'danger-banana-plugin-template' - @command = create_command('danger-banana', alt_repo) - - git_command = ['clone', alt_repo, 'danger-banana'] - CLAide::TemplateRunner.any_instance.expects(:git!).with(git_command) - CLAide::TemplateRunner.any_instance.expects(:configure_template) - @command.run - UI_OUT.string.should.include('Creating `danger-banana` plugin') - end - end -end diff --git a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/spec/command/plugins/list_spec.rb b/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/spec/command/plugins/list_spec.rb deleted file mode 100644 index 9fffc828..00000000 --- a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/spec/command/plugins/list_spec.rb +++ /dev/null @@ -1,29 +0,0 @@ -require File.expand_path('../../../spec_helper', __FILE__) - -# The CocoaPods namespace -# -module CLAide - describe Command::Plugins::List do - extend SpecHelper::PluginsStubs - - before do - UI_OUT.reopen - @command = CLAide::Command::Plugins::List.new CLAide::ARGV.new [] - end - - it 'registers itself' do - Command.parse(%w(plugins list)). - should.be.instance_of Command::Plugins::List - end - - #--- Output printing - - it 'prints out all plugins' do - stub_plugins_json_request - @command.run - UI_OUT.string.should.include('github.com/CLAide/claide-fake-1') - UI_OUT.string.should.include('github.com/CLAide/claide-fake-2') - UI_OUT.string.should.include('github.com/chneukirchen/bacon') - end - end -end diff --git a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/spec/command/plugins/search_spec.rb b/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/spec/command/plugins/search_spec.rb deleted file mode 100644 index 488ebbba..00000000 --- a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/spec/command/plugins/search_spec.rb +++ /dev/null @@ -1,55 +0,0 @@ -require File.expand_path('../../../spec_helper', __FILE__) - -# The CocoaPods namespace -# -module CLAide - describe Command::Plugins::Search do - extend SpecHelper::PluginsStubs - extend SpecHelper::PluginsSearchCommand - - before do - UI_OUT.reopen - end - - it 'registers itself' do - Command.parse(%w(plugins search)). - should.be.instance_of Command::Plugins::Search - end - - #--- Validation - - it 'should require a non-empty query' do - @command = search_command - should.raise(CLAide::Help) do - @command.validate! - end.message.should.match(/A search query is required./) - end - - it 'should require a valid RegExp as query' do - @command = search_command('[invalid') - should.raise(CLAide::Help) do - @command.validate! - end.message.should.match(/A valid regular expression is required./) - end - - #--- Output printing - - it 'should filter plugins only by name without full search' do - stub_plugins_json_request - @command = search_command('search') - @command.run - UI_OUT.string.should.not.include('-> CLAide Fake Gem') - UI_OUT.string.should.include('-> CLAide Searchable Fake Gem') - UI_OUT.string.should.not.include('-> Bacon') - end - - it 'should filter plugins by name, author, description with full search' do - stub_plugins_json_request - @command = search_command('--full', 'search') - @command.run - UI_OUT.string.should.include('-> CLAide Fake Gem') - UI_OUT.string.should.include('-> CLAide Searchable Fake Gem') - UI_OUT.string.should.not.include('-> Bacon') - end - end -end diff --git a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/spec/command/plugins_helper_spec.rb b/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/spec/command/plugins_helper_spec.rb deleted file mode 100644 index 9a2e5cd9..00000000 --- a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/spec/command/plugins_helper_spec.rb +++ /dev/null @@ -1,33 +0,0 @@ -require File.expand_path('../spec_helper', File.dirname(__FILE__)) - -# The CocoaPods namespace -# -module CLAide - describe Command::PluginsHelper do - extend SpecHelper::PluginsStubs - - it 'downloads the json file' do - stub_plugins_json_request - json = Command::PluginsHelper.download_json - json.should.not.be.nil? - json.should.be.is_a? Hash - json['plugins'].size.should.eql? 3 - end - - it 'handles empty/bad JSON' do - stub_plugins_json_request 'This is not JSON' - expected_error = /Invalid plugins list from claidetest-plugins/ - should.raise(CLAide::Informative) do - Command::PluginsHelper.download_json - end.message.should.match(expected_error) - end - - it 'notifies the user if the download fails' do - stub_plugins_json_request '', [404, 'Not Found'] - expected_error = /Could not download plugins list from claidetest-plugins/ - should.raise(CLAide::Informative) do - Command::PluginsHelper.download_json - end.message.should.match(expected_error) - end - end -end diff --git a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/spec/command/plugins_spec.rb b/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/spec/command/plugins_spec.rb deleted file mode 100644 index 4bc6cbde..00000000 --- a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/spec/command/plugins_spec.rb +++ /dev/null @@ -1,45 +0,0 @@ -require File.expand_path('../../spec_helper', __FILE__) - -# The CocoaPods namespace -# -module CLAide - describe Command::Plugins do - before do - argv = CLAide::ARGV.new([]) - @command = Command::Plugins.new(argv) - end - - it 'registers itself and uses the default subcommand' do - Command.parse(%w(plugins)).should.be.instance_of Command::Plugins::List - end - - it 'exists' do - @command.should.not.be.nil? - end - end - - describe Plugins do - it 'should have a default config' do - config = CLAide::Plugins.config - config.should.be.instance_of CLAide::Plugins::Configuration - end - - it 'should default to a CLAide plugin config' do - config = CLAide::Plugins::Configuration.new - config.name.should.equal('default name') - config.plugin_prefix.should.equal('claide') - config.plugin_list_url.should.equal('https://github.com/cocoapods/claide-plugins/something.json') - url = config.plugin_template_url - url.should.equal('https://github.com/cocoapods/claide-plugins-template') - end - - it 'should set the plugin_prefix in the claide plugin manager' do - CLAide::Plugins.config = - CLAide::Plugins::Configuration.new('testing', - 'pants', - 'http://example.com/pants.json', - 'http://example.com/pants_template') - CLAide::Plugins.config.plugin_prefix.should.equal('pants') - end - end -end diff --git a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/spec/fixtures/claide-foo1.gemspec b/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/spec/fixtures/claide-foo1.gemspec deleted file mode 100644 index 7aa0e366..00000000 --- a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/spec/fixtures/claide-foo1.gemspec +++ /dev/null @@ -1,10 +0,0 @@ -# coding: utf-8 -Gem::Specification.new do |spec| - spec.name = 'claide-foo1' - spec.version = '2.0.1' - spec.authors = ['Author 1'] - spec.summary = 'Gem Summary 1' - spec.description = 'Gem Description 1' - spec.homepage = 'https://github.com/proper-man/claide-foo1' - spec.license = 'MIT' -end diff --git a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/spec/fixtures/claide-foo2.gemspec b/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/spec/fixtures/claide-foo2.gemspec deleted file mode 100644 index a4bfc411..00000000 --- a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/spec/fixtures/claide-foo2.gemspec +++ /dev/null @@ -1,9 +0,0 @@ -# coding: utf-8 -Gem::Specification.new do |spec| - spec.name = 'claide-foo2' - spec.version = '2.0.2' - spec.authors = ['Author 1', 'Author 2'] - spec.description = 'Gem Description 2' - spec.homepage = 'https://github.com/proper-man/claide-foo2' - spec.license = 'MIT' -end diff --git a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/spec/fixtures/unprefixed.gemspec b/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/spec/fixtures/unprefixed.gemspec deleted file mode 100644 index abd90e60..00000000 --- a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/spec/fixtures/unprefixed.gemspec +++ /dev/null @@ -1,10 +0,0 @@ -# coding: utf-8 -Gem::Specification.new do |spec| - spec.name = 'unprefixed-plugin' - spec.version = '1.2.3' - spec.authors = ['Author 1', 'Author 2'] - spec.summary = 'Gem Summary' - spec.description = 'Gem Description' - spec.homepage = 'https://github.com/messy-man/unprefixed-plugins' - spec.license = 'MIT' -end diff --git a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/spec/spec_helper.rb b/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/spec/spec_helper.rb deleted file mode 100644 index 5288ccd1..00000000 --- a/bundle/ruby/3.2.0/gems/claide-plugins-0.9.2/spec/spec_helper.rb +++ /dev/null @@ -1,106 +0,0 @@ -# Set up coverage analysis -#-----------------------------------------------------------------------------# - -require 'codeclimate-test-reporter' -CodeClimate::TestReporter.configure do |config| - config.logger.level = Logger::WARN -end -CodeClimate::TestReporter.start - -# Set up -#-----------------------------------------------------------------------------# - -require 'pathname' -ROOT = Pathname.new(File.expand_path('../../', __FILE__)) -$LOAD_PATH.unshift((ROOT + 'lib').to_s) -$LOAD_PATH.unshift((ROOT + 'spec').to_s) - -require 'bundler/setup' -require 'bacon' -require 'mocha-on-bacon' -require 'pretty_bacon' - -require 'webmock' -include WebMock::API - -require 'claide_plugin' - -# VCR -#--------------------------------------# - -require 'vcr' -VCR.configure do |c| - c.cassette_library_dir = ROOT + 'spec/fixtures/vcr_cassettes' - c.hook_into :webmock - c.ignore_hosts 'codeclimate.com' -end - -#-----------------------------------------------------------------------------# - -# Disable the wrapping so the output is deterministic in the tests. -# -UI_OUT = StringIO.new -UI_ERR = StringIO.new -UI = Cork::Board.new(:out => UI_OUT, :err => UI_ERR) - -UI.disable_wrap = true - -#-----------------------------------------------------------------------------# - -# Bacon namespace -# -module Bacon - # Add a fixture helper to the Bacon Context - class Context - ROOT = ::ROOT + 'spec/fixtures' - - def fixture(name) - ROOT + name - end - end -end - -#-----------------------------------------------------------------------------# - -# Use test specific settings inside all of the tests -# - -def default_testing_config - CLAide::Plugins::Configuration.new('CLAideTesting', - 'claidetest', - 'https://github.com/cocoapods/claide-plugins/something.json', - 'https://github.com/danger/danger-plugin-template') -end - -CLAide::Plugins.config = default_testing_config -#-----------------------------------------------------------------------------# - -# SpecHelper namespace -# -module SpecHelper - # Add this as an extension into the Search and List specs - # to help stub the plugins.json request - module PluginsStubs - def stub_plugins_json_request(json = nil, status = 200) - body = json || File.read(fixture('plugins.json')) - stub_request(:get, 'http://example.com/pants.json'). - to_return(:status => status, :body => body, :headers => {}) - stub_request(:get, 'https://github.com/cocoapods/claide-plugins/something.json'). - to_return(:status => status, :body => body, :headers => {}) - end - end - - # Add this as an extension into the Create specs - module PluginsCreateCommand - def create_command(*args) - CLAide::Command::Plugins::Create.new CLAide::ARGV.new(args) - end - end - - # Add this as an extension into the Search specs - module PluginsSearchCommand - def search_command(*args) - CLAide::Command::Plugins::Search.new CLAide::ARGV.new(args) - end - end -end diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/MIT-LICENSE b/bundle/ruby/3.2.0/gems/coderay-1.1.3/MIT-LICENSE deleted file mode 100644 index d8d009d1..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/MIT-LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (C) 2005-2012 Kornelius Kalnbach (@murphy_karasu) - -http://coderay.rubychan.de/ - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/README_INDEX.rdoc b/bundle/ruby/3.2.0/gems/coderay-1.1.3/README_INDEX.rdoc deleted file mode 100644 index 7332653c..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/README_INDEX.rdoc +++ /dev/null @@ -1,123 +0,0 @@ -= CodeRay - -Tired of blue'n'gray? Try the original version of this documentation on -coderay.rubychan.de[http://coderay.rubychan.de/doc/] :-) - -== About - -CodeRay is a Ruby library for syntax highlighting. - -You put your code in, and you get it back colored; Keywords, strings, -floats, comments - all in different colors. And with line numbers. - -*Syntax* *Highlighting*... -* makes code easier to read and maintain -* lets you detect syntax errors faster -* helps you to understand the syntax of a language -* looks nice -* is what everybody wants to have on their website -* solves all your problems and makes the girls run after you - - -== Installation - - % gem install coderay - - -=== Dependencies - -CodeRay needs Ruby 1.8.7+ or 1.9.2+. It also runs on Rubinius and JRuby. - - -== Example Usage - - require 'coderay' - - html = CodeRay.scan("puts 'Hello, world!'", :ruby).div(:line_numbers => :table) - - -== Documentation - -See CodeRay. - - -== Credits - -=== Special Thanks to - -* licenser (Heinz N. Gies) for ending my QBasic career, inventing the Coder - project and the input/output plugin system. - CodeRay would not exist without him. -* bovi (Daniel Bovensiepen) for helping me out on various occasions. - -=== Thanks to - -* Caleb Clausen for writing RubyLexer (see - http://rubyforge.org/projects/rubylexer) and lots of very interesting mail - traffic -* birkenfeld (Georg Brandl) and mitsuhiku (Arnim Ronacher) for PyKleur, now pygments. - You guys rock! -* Jamis Buck for writing Syntax (see http://rubyforge.org/projects/syntax) - I got some useful ideas from it. -* Doug Kearns and everyone else who worked on ruby.vim - it not only helped me - coding CodeRay, but also gave me a wonderful target to reach for the Ruby - scanner. -* everyone who uses CodeBB on http://www.rubyforen.de and http://www.python-forum.de -* iGEL, magichisoka, manveru, WoNáDo and everyone I forgot from rubyforen.de -* Dethix from ruby-mine.de -* zickzackw -* Dookie (who is no longer with us...) and Leonidas from http://www.python-forum.de -* Andreas Schwarz for finding out that CaseIgnoringWordList was not case - ignoring! Such things really make you write tests. -* closure for the first version of the Scheme scanner. -* Stefan Walk for the first version of the JavaScript and PHP scanners. -* Josh Goebel for another version of the JavaScript scanner, a SQL and a Diff scanner. -* Jonathan Younger for pointing out the licence confusion caused by wrong LICENSE file. -* Jeremy Hinegardner for finding the shebang-on-empty-file bug in FileType. -* Charles Oliver Nutter and Yehuda Katz for helping me benchmark CodeRay on JRuby. -* Andreas Neuhaus for pointing out a markup bug in coderay/for_redcloth. -* 0xf30fc7 for the FileType patch concerning Delphi file extensions. -* The folks at redmine.org - thank you for using and fixing CodeRay! -* Keith Pitt for his SQL scanners -* Rob Aldred for the terminal encoder -* Trans for pointing out $DEBUG dependencies -* Flameeyes for finding that Term::ANSIColor was obsolete -* matz and all Ruby gods and gurus -* The inventors of: the computer, the internet, the true color display, HTML & - CSS, VIM, Ruby, pizza, microwaves, guitars, scouting, programming, anime, - manga, coke and green ice tea. - -Where would we be without all those people? - -=== Created using - -* Ruby[http://ruby-lang.org/] -* Chihiro (my Sony VAIO laptop); Henrietta (my old MacBook); - Triella, born Rico (my new MacBook); as well as - Seras and Hikari (my PCs) -* RDE[http://homepage2.nifty.com/sakazuki/rde_e.html], - VIM[http://vim.org] and TextMate[http://macromates.com] -* Subversion[http://subversion.tigris.org/] -* Redmine[http://redmine.org/] -* Firefox[http://www.mozilla.org/products/firefox/], - Firebug[http://getfirebug.com/], Safari[http://www.apple.com/safari/], and - Thunderbird[http://www.mozilla.org/products/thunderbird/] -* RubyGems[http://docs.rubygems.org/] and Rake[http://rake.rubyforge.org/] -* TortoiseSVN[http://tortoisesvn.tigris.org/] using Apache via - XAMPP[http://www.apachefriends.org/en/xampp.html] -* RDoc (though I'm quite unsatisfied with it) -* Microsoft Windows (yes, I confess!) and MacOS X -* GNUWin32, MinGW and some other tools to make the shell under windows a bit - less useless -* Term::ANSIColor[http://term-ansicolor.rubyforge.org/] -* PLEAC[http://pleac.sourceforge.net/] code examples -* Github -* Travis CI (http://travis-ci.org/rubychan/github) - -=== Free - -* As you can see, CodeRay was created under heavy use of *free* software. -* So CodeRay is also *free*. -* If you use CodeRay to create software, think about making this software - *free*, too. -* Thanks :) diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/bin/coderay b/bundle/ruby/3.2.0/gems/coderay-1.1.3/bin/coderay deleted file mode 100755 index 130a50ba..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/bin/coderay +++ /dev/null @@ -1,215 +0,0 @@ -#!/usr/bin/env ruby -require 'coderay' - -$options, args = ARGV.partition { |arg| arg[/^-[hv]$|--\w+/] } -subcommand = args.first if /^\w/ === args.first -subcommand = nil if subcommand && File.exist?(subcommand) -args.delete subcommand - -def option? *options - !($options & options).empty? -end - -def tty? - $stdout.tty? || option?('--tty') -end - -def version - puts <<-USAGE -CodeRay #{CodeRay::VERSION} - USAGE -end - -def help - puts <<-HELP -This is CodeRay #{CodeRay::VERSION}, a syntax highlighting tool for selected languages. - -usage: - coderay [-language] [input] [-format] [output] - -defaults: - language detect from input file name or shebang; fall back to plain text - input STDIN - format detect from output file name or use terminal; fall back to HTML - output STDOUT - -common: - coderay file.rb # highlight file to terminal - coderay file.rb -page > file.html # highlight file to HTML page - coderay file.rb -div > file.html # highlight file to HTML snippet - -configure output: - coderay file.py output.json # output tokens as JSON - coderay file.py -loc # count lines of code in Python file - -configure input: - coderay -python file # specify the input language - coderay -ruby # take input from STDIN - -more: - coderay stylesheet [style] # print CSS stylesheet - HELP -end - -def commands - puts <<-COMMANDS - general: - highlight code highlighting (default command, optional) - stylesheet print the CSS stylesheet with the given name (aliases: style, css) - - about: - list [of] list all available plugins (or just the scanners|encoders|styles|filetypes) - commands print this list - help show some help - version print CodeRay version - COMMANDS -end - -def print_list_of plugin_host - plugins = plugin_host.all_plugins.map do |plugin| - info = " #{plugin.plugin_id}: #{plugin.title}" - - aliases = (plugin.aliases - [:default]).map { |key| "-#{key}" }.sort_by { |key| key.size } - if plugin.respond_to?(:file_extension) || !aliases.empty? - additional_info = [] - additional_info << aliases.join(', ') unless aliases.empty? - info << " (#{additional_info.join('; ')})" - end - - info << ' <-- default' if plugin.aliases.include? :default - - info - end - puts plugins.sort -end - -if option? '-v', '--version' - version -end - -if option? '-h', '--help' - help -end - -case subcommand -when 'highlight', nil - if ARGV.empty? - version - help - else - signature = args.map { |arg| arg[/^-/] ? '-' : 'f' }.join - names = args.map { |arg| arg.sub(/^-/, '') } - case signature - when /^$/ - exit - when /^ff?$/ - input_file, output_file, = *names - when /^f-f?$/ - input_file, output_format, output_file, = *names - when /^-ff?$/ - input_lang, input_file, output_file, = *names - when /^-f-f?$/ - input_lang, input_file, output_format, output_file, = *names - when /^--?f?$/ - input_lang, output_format, output_file, = *names - else - $stdout = $stderr - help - puts - puts "Unknown parameter order: #{args.join ' '}, expected: [-language] [input] [-format] [output]" - exit 1 - end - - if input_file - input_lang ||= CodeRay::FileType.fetch input_file, :text, true - end - - if output_file - output_format ||= CodeRay::FileType[output_file] || :plain - else - output_format ||= :terminal - end - - output_format = :page if output_format.to_s == 'html' - - if input_file - input = File.read input_file - else - input = $stdin.read - end - - begin - file = - if output_file - File.open output_file, 'w' - else - $stdout - end - CodeRay.encode(input, input_lang, output_format, :out => file) - file.puts - rescue CodeRay::PluginHost::PluginNotFound => boom - $stdout = $stderr - if boom.message[/CodeRay::(\w+)s could not load plugin :?(.*?): /] - puts "I don't know the #$1 \"#$2\"." - else - puts boom.message - end - # puts "I don't know this plugin: #{boom.message[/Could not load plugin (.*?): /, 1]}." - rescue CodeRay::Scanners::Scanner::ScanError - # this is sometimes raised by pagers; ignore - # FIXME: rescue Errno::EPIPE - ensure - file.close if output_file - end - end -when 'li', 'list' - arg = args.first && args.first.downcase - if [nil, 's', 'sc', 'scanner', 'scanners'].include? arg - puts 'input languages (Scanners):' - print_list_of CodeRay::Scanners - end - - if [nil, 'e', 'en', 'enc', 'encoder', 'encoders'].include? arg - puts 'output formats (Encoders):' - print_list_of CodeRay::Encoders - end - - if [nil, 'st', 'style', 'styles'].include? arg - puts 'CSS themes for HTML output (Styles):' - print_list_of CodeRay::Styles - end - - if [nil, 'f', 'ft', 'file', 'filetype', 'filetypes'].include? arg - puts 'recognized file types:' - - filetypes = Hash.new { |h, k| h[k] = [] } - CodeRay::FileType::TypeFromExt.inject filetypes do |types, (ext, type)| - types[type.to_s] << ".#{ext}" - types - end - CodeRay::FileType::TypeFromName.inject filetypes do |types, (name, type)| - types[type.to_s] << name - types - end - - filetypes.sort.each do |type, exts| - puts " #{type}: #{exts.sort_by { |ext| ext.size }.join(', ')}" - end - end -when 'stylesheet', 'style', 'css' - puts CodeRay::Encoders[:html]::CSS.new(args.first || :default).stylesheet -when 'commands' - commands -when 'help' - help -else - $stdout = $stderr - help - puts - if subcommand[/\A\w+\z/] - puts "Unknown command: #{subcommand}" - else - puts "File not found: #{subcommand}" - end - exit 1 -end diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay.rb b/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay.rb deleted file mode 100644 index c3de20b5..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay.rb +++ /dev/null @@ -1,284 +0,0 @@ -# encoding: utf-8 -# Encoding.default_internal = 'UTF-8' - -# = CodeRay Library -# -# CodeRay is a Ruby library for syntax highlighting. -# -# I try to make CodeRay easy to use and intuitive, but at the same time fully -# featured, complete, fast and efficient. -# -# See README. -# -# It consists mainly of -# * the main engine: CodeRay (Scanners::Scanner, Tokens, Encoders::Encoder) -# * the plugin system: PluginHost, Plugin -# * the scanners in CodeRay::Scanners -# * the encoders in CodeRay::Encoders -# * the styles in CodeRay::Styles -# -# Here's a fancy graphic to light up this gray docu: -# -# http://cycnus.de/raindark/coderay/scheme.png -# -# == Documentation -# -# See CodeRay, Encoders, Scanners, Tokens. -# -# == Usage -# -# Remember you need RubyGems to use CodeRay, unless you have it in your load -# path. Run Ruby with -rubygems option if required. -# -# === Highlight Ruby code in a string as html -# -# require 'coderay' -# print CodeRay.scan('puts "Hello, world!"', :ruby).html -# -# # prints something like this: -# puts "Hello, world!" -# -# -# === Highlight C code from a file in a html div -# -# require 'coderay' -# print CodeRay.scan(File.read('ruby.h'), :c).div -# print CodeRay.scan_file('ruby.h').html.div -# -# You can include this div in your page. The used CSS styles can be printed with -# -# % coderay_stylesheet -# -# === Highlight without typing too much -# -# If you are one of the hasty (or lazy, or extremely curious) people, just run this file: -# -# % ruby -rubygems /path/to/coderay/coderay.rb > example.html -# -# and look at the file it created in your browser. -# -# = CodeRay Module -# -# The CodeRay module provides convenience methods for the engine. -# -# * The +lang+ and +format+ arguments select Scanner and Encoder to use. These are -# simply lower-case symbols, like :python or :html. -# * All methods take an optional hash as last parameter, +options+, that is send to -# the Encoder / Scanner. -# * Input and language are always sorted in this order: +code+, +lang+. -# (This is in alphabetical order, if you need a mnemonic ;) -# -# You should be able to highlight everything you want just using these methods; -# so there is no need to dive into CodeRay's deep class hierarchy. -# -# The examples in the demo directory demonstrate common cases using this interface. -# -# = Basic Access Ways -# -# Read this to get a general view what CodeRay provides. -# -# == Scanning -# -# Scanning means analysing an input string, splitting it up into Tokens. -# Each Token knows about what type it is: string, comment, class name, etc. -# -# Each +lang+ (language) has its own Scanner; for example, :ruby code is -# handled by CodeRay::Scanners::Ruby. -# -# CodeRay.scan:: Scan a string in a given language into Tokens. -# This is the most common method to use. -# CodeRay.scan_file:: Scan a file and guess the language using FileType. -# -# The Tokens object you get from these methods can encode itself; see Tokens. -# -# == Encoding -# -# Encoding means compiling Tokens into an output. This can be colored HTML or -# LaTeX, a textual statistic or just the number of non-whitespace tokens. -# -# Each Encoder provides output in a specific +format+, so you select Encoders via -# formats like :html or :statistic. -# -# CodeRay.encode:: Scan and encode a string in a given language. -# CodeRay.encode_tokens:: Encode the given tokens. -# CodeRay.encode_file:: Scan a file, guess the language using FileType and encode it. -# -# == All-in-One Encoding -# -# CodeRay.encode:: Highlight a string with a given input and output format. -# -# == Instanciating -# -# You can use an Encoder instance to highlight multiple inputs. This way, the setup -# for this Encoder must only be done once. -# -# CodeRay.encoder:: Create an Encoder instance with format and options. -# CodeRay.scanner:: Create an Scanner instance for lang, with '' as default code. -# -# To make use of CodeRay.scanner, use CodeRay::Scanner::code=. -# -# The scanning methods provide more flexibility; we recommend to use these. -# -# == Reusing Scanners and Encoders -# -# If you want to re-use scanners and encoders (because that is faster), see -# CodeRay::Duo for the most convenient (and recommended) interface. -module CodeRay - - $CODERAY_DEBUG ||= false - - CODERAY_PATH = File.expand_path('../coderay', __FILE__) - - # Assuming the path is a subpath of lib/coderay/ - def self.coderay_path *path - File.join CODERAY_PATH, *path - end - - autoload :VERSION, 'coderay/version' - - # helpers - autoload :FileType, coderay_path('helpers', 'file_type') - - # Tokens - autoload :Tokens, coderay_path('tokens') - autoload :TokensProxy, coderay_path('tokens_proxy') - autoload :TokenKinds, coderay_path('token_kinds') - - # Plugin system - autoload :PluginHost, coderay_path('helpers', 'plugin_host') - autoload :Plugin, coderay_path('helpers', 'plugin') - - # Plugins - autoload :Scanners, coderay_path('scanners') - autoload :Encoders, coderay_path('encoders') - autoload :Styles, coderay_path('styles') - - # convenience access and reusable Encoder/Scanner pair - autoload :Duo, coderay_path('duo') - - class << self - - # Scans the given +code+ (a String) with the Scanner for +lang+. - # - # This is a simple way to use CodeRay. Example: - # require 'coderay' - # page = CodeRay.scan("puts 'Hello, world!'", :ruby).html - # - # See also demo/demo_simple. - def scan code, lang, options = {}, &block - CodeRay::TokensProxy.new code, lang, options, block - end - - # Scans +filename+ (a path to a code file) with the Scanner for +lang+. - # - # If +lang+ is :auto or omitted, the CodeRay::FileType module is used to - # determine it. If it cannot find out what type it is, it uses - # CodeRay::Scanners::Text. - # - # Calls CodeRay.scan. - # - # Example: - # require 'coderay' - # page = CodeRay.scan_file('some_c_code.c').html - def scan_file filename, lang = :auto, options = {}, &block - lang = CodeRay::FileType.fetch filename, :text, true if lang == :auto - code = File.read filename - scan code, lang, options, &block - end - - # Encode a string. - # - # This scans +code+ with the the Scanner for +lang+ and then - # encodes it with the Encoder for +format+. - # +options+ will be passed to the Encoder. - # - # See CodeRay::Encoder.encode. - def encode code, lang, format, options = {} - encoder(format, options).encode code, lang, options - end - - # Encode pre-scanned Tokens. - # Use this together with CodeRay.scan: - # - # require 'coderay' - # - # # Highlight a short Ruby code example in a HTML span - # tokens = CodeRay.scan '1 + 2', :ruby - # puts CodeRay.encode_tokens(tokens, :span) - # - def encode_tokens tokens, format, options = {} - encoder(format, options).encode_tokens tokens, options - end - - # Encodes +filename+ (a path to a code file) with the Scanner for +lang+. - # - # See CodeRay.scan_file. - # Notice that the second argument is the output +format+, not the input language. - # - # Example: - # require 'coderay' - # page = CodeRay.encode_file 'some_c_code.c', :html - def encode_file filename, format, options = {} - tokens = scan_file filename, :auto, get_scanner_options(options) - encode_tokens tokens, format, options - end - - # Highlight a string into a HTML
    . - # - # CSS styles use classes, so you have to include a stylesheet - # in your output. - # - # See encode. - def highlight code, lang, options = { :css => :class }, format = :div - encode code, lang, format, options - end - - # Highlight a file into a HTML
    . - # - # CSS styles use classes, so you have to include a stylesheet - # in your output. - # - # See encode. - def highlight_file filename, options = { :css => :class }, format = :div - encode_file filename, format, options - end - - # Finds the Encoder class for +format+ and creates an instance, passing - # +options+ to it. - # - # Example: - # require 'coderay' - # - # stats = CodeRay.encoder(:statistic) - # stats.encode("puts 17 + 4\n", :ruby) - # - # puts '%d out of %d tokens have the kind :integer.' % [ - # stats.type_stats[:integer].count, - # stats.real_token_count - # ] - # #-> 2 out of 4 tokens have the kind :integer. - def encoder format, options = {} - CodeRay::Encoders[format].new options - end - - # Finds the Scanner class for +lang+ and creates an instance, passing - # +options+ to it. - # - # See Scanner.new. - def scanner lang, options = {}, &block - CodeRay::Scanners[lang].new '', options, &block - end - - # Extract the options for the scanner from the +options+ hash. - # - # Returns an empty Hash if :scanner_options is not set. - # - # This is used if a method like CodeRay.encode has to provide options - # for Encoder _and_ scanner. - def get_scanner_options options - options.fetch :scanner_options, {} - end - - end - -end diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/duo.rb b/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/duo.rb deleted file mode 100644 index cb3f8ee8..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/duo.rb +++ /dev/null @@ -1,81 +0,0 @@ -module CodeRay - - # = Duo - # - # A Duo is a convenient way to use CodeRay. You just create a Duo, - # giving it a lang (language of the input code) and a format (desired - # output format), and call Duo#highlight with the code. - # - # Duo makes it easy to re-use both scanner and encoder for a repetitive - # task. It also provides a very easy interface syntax: - # - # require 'coderay' - # CodeRay::Duo[:python, :div].highlight 'import this' - # - # Until you want to do uncommon things with CodeRay, I recommend to use - # this method, since it takes care of everything. - class Duo - - attr_accessor :lang, :format, :options - - # Create a new Duo, holding a lang and a format to highlight code. - # - # simple: - # CodeRay::Duo[:ruby, :html].highlight 'bla 42' - # - # with options: - # CodeRay::Duo[:ruby, :html, :hint => :debug].highlight '????::??' - # - # alternative syntax without options: - # CodeRay::Duo[:ruby => :statistic].encode 'class << self; end' - # - # alternative syntax with options: - # CodeRay::Duo[{ :ruby => :statistic }, :do => :something].encode 'abc' - # - # The options are forwarded to scanner and encoder - # (see CodeRay.get_scanner_options). - def initialize lang = nil, format = nil, options = {} - if format.nil? && lang.is_a?(Hash) && lang.size == 1 - @lang = lang.keys.first - @format = lang[@lang] - else - @lang = lang - @format = format - end - @options = options - end - - class << self - # To allow calls like Duo[:ruby, :html].highlight. - alias [] new - end - - # The scanner of the duo. Only created once. - def scanner - @scanner ||= CodeRay.scanner @lang, CodeRay.get_scanner_options(@options) - end - - # The encoder of the duo. Only created once. - def encoder - @encoder ||= CodeRay.encoder @format, @options - end - - # Tokenize and highlight the code using +scanner+ and +encoder+. - def encode code, options = {} - options = @options.merge options - encoder.encode(code, @lang, options) - end - alias highlight encode - - # Allows to use Duo like a proc object: - # - # CodeRay::Duo[:python => :yaml].call(code) - # - # or, in Ruby 1.9 and later: - # - # CodeRay::Duo[:python => :yaml].(code) - alias call encode - - end - -end diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders.rb b/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders.rb deleted file mode 100644 index 6599186e..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders.rb +++ /dev/null @@ -1,18 +0,0 @@ -module CodeRay - - # This module holds the Encoder class and its subclasses. - # For example, the HTML encoder is named CodeRay::Encoders::HTML - # can be found in coderay/encoders/html. - # - # Encoders also provides methods and constants for the register - # mechanism and the [] method that returns the Encoder class - # belonging to the given format. - module Encoders - - extend PluginHost - plugin_path File.dirname(__FILE__), 'encoders' - - autoload :Encoder, CodeRay.coderay_path('encoders', 'encoder') - - end -end diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/_map.rb b/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/_map.rb deleted file mode 100644 index 4cca1963..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/_map.rb +++ /dev/null @@ -1,17 +0,0 @@ -module CodeRay -module Encoders - - map \ - :loc => :lines_of_code, - :plain => :text, - :plaintext => :text, - :remove_comments => :comment_filter, - :stats => :statistic, - :term => :terminal, - :tty => :terminal, - :yml => :yaml - - # No default because Tokens#nonsense should raise NoMethodError. - -end -end diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/comment_filter.rb b/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/comment_filter.rb deleted file mode 100644 index 28336b3d..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/comment_filter.rb +++ /dev/null @@ -1,25 +0,0 @@ -module CodeRay -module Encoders - - load :token_kind_filter - - # A simple Filter that removes all tokens of the :comment kind. - # - # Alias: +remove_comments+ - # - # Usage: - # CodeRay.scan('print # foo', :ruby).comment_filter.text - # #-> "print " - # - # See also: TokenKindFilter, LinesOfCode - class CommentFilter < TokenKindFilter - - register_for :comment_filter - - DEFAULT_OPTIONS = superclass::DEFAULT_OPTIONS.merge \ - :exclude => [:comment, :docstring] - - end - -end -end diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/count.rb b/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/count.rb deleted file mode 100644 index 98a427e1..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/count.rb +++ /dev/null @@ -1,39 +0,0 @@ -module CodeRay -module Encoders - - # Returns the number of tokens. - # - # Text and block tokens are counted. - class Count < Encoder - - register_for :count - - protected - - def setup options - super - - @count = 0 - end - - def finish options - output @count - end - - public - - def text_token text, kind - @count += 1 - end - - def begin_group kind - @count += 1 - end - alias end_group begin_group - alias begin_line begin_group - alias end_line begin_group - - end - -end -end diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/debug.rb b/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/debug.rb deleted file mode 100644 index f4db3301..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/debug.rb +++ /dev/null @@ -1,49 +0,0 @@ -module CodeRay -module Encoders - - # = Debug Encoder - # - # Fast encoder producing simple debug output. - # - # It is readable and diff-able and is used for testing. - # - # You cannot fully restore the tokens information from the - # output, because consecutive :space tokens are merged. - # - # See also: Scanners::Debug - class Debug < Encoder - - register_for :debug - - FILE_EXTENSION = 'raydebug' - - def text_token text, kind - if kind == :space - @out << text - else - text = text.gsub('\\', '\\\\\\\\') if text.index('\\') - text = text.gsub(')', '\\\\)') if text.index(')') - @out << "#{kind}(#{text})" - end - end - - def begin_group kind - @out << "#{kind}<" - end - - def end_group kind - @out << '>' - end - - def begin_line kind - @out << "#{kind}[" - end - - def end_line kind - @out << ']' - end - - end - -end -end diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/debug_lint.rb b/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/debug_lint.rb deleted file mode 100644 index a4eba2c7..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/debug_lint.rb +++ /dev/null @@ -1,63 +0,0 @@ -module CodeRay -module Encoders - - load :lint - - # = Debug Lint Encoder - # - # Debug encoder with additional checks for: - # - # - empty tokens - # - incorrect nesting - # - # It will raise an InvalidTokenStream exception when any of the above occurs. - # - # See also: Encoders::Debug - class DebugLint < Debug - - register_for :debug_lint - - def text_token text, kind - raise Lint::EmptyToken, 'empty token for %p' % [kind] if text.empty? - raise Lint::UnknownTokenKind, 'unknown token kind %p (text was %p)' % [kind, text] unless TokenKinds.has_key? kind - super - end - - def begin_group kind - @opened << kind - super - end - - def end_group kind - raise Lint::IncorrectTokenGroupNesting, 'We are inside %s, not %p (end_group)' % [@opened.reverse.map(&:inspect).join(' < '), kind] if @opened.last != kind - @opened.pop - super - end - - def begin_line kind - @opened << kind - super - end - - def end_line kind - raise Lint::IncorrectTokenGroupNesting, 'We are inside %s, not %p (end_line)' % [@opened.reverse.map(&:inspect).join(' < '), kind] if @opened.last != kind - @opened.pop - super - end - - protected - - def setup options - super - @opened = [] - end - - def finish options - raise 'Some tokens still open at end of token stream: %p' % [@opened] unless @opened.empty? - super - end - - end - -end -end diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/div.rb b/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/div.rb deleted file mode 100644 index efd9435c..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/div.rb +++ /dev/null @@ -1,23 +0,0 @@ -module CodeRay -module Encoders - - load :html - - # Wraps HTML output into a DIV element, using inline styles by default. - # - # See Encoders::HTML for available options. - class Div < HTML - - FILE_EXTENSION = 'div.html' - - register_for :div - - DEFAULT_OPTIONS = HTML::DEFAULT_OPTIONS.merge \ - :css => :style, - :wrap => :div, - :line_numbers => false - - end - -end -end diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/encoder.rb b/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/encoder.rb deleted file mode 100644 index 2baeedb6..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/encoder.rb +++ /dev/null @@ -1,190 +0,0 @@ -module CodeRay - module Encoders - - # = Encoder - # - # The Encoder base class. Together with Scanner and - # Tokens, it forms the highlighting triad. - # - # Encoder instances take a Tokens object and do something with it. - # - # The most common Encoder is surely the HTML encoder - # (CodeRay::Encoders::HTML). It highlights the code in a colorful - # html page. - # If you want the highlighted code in a div or a span instead, - # use its subclasses Div and Span. - class Encoder - extend Plugin - plugin_host Encoders - - class << self - - # If FILE_EXTENSION isn't defined, this method returns the - # downcase class name instead. - def const_missing sym - if sym == :FILE_EXTENSION - (defined?(@plugin_id) && @plugin_id || name[/\w+$/].downcase).to_s - else - super - end - end - - # The default file extension for output file of this encoder class. - def file_extension - self::FILE_EXTENSION - end - - end - - # Subclasses are to store their default options in this constant. - DEFAULT_OPTIONS = { } - - # The options you gave the Encoder at creating. - attr_accessor :options, :scanner - - # Creates a new Encoder. - # +options+ is saved and used for all encode operations, as long - # as you don't overwrite it there by passing additional options. - # - # Encoder objects provide three encode methods: - # - encode simply takes a +code+ string and a +lang+ - # - encode_tokens expects a +tokens+ object instead - # - # Each method has an optional +options+ parameter. These are - # added to the options you passed at creation. - def initialize options = {} - @options = self.class::DEFAULT_OPTIONS.merge options - @@CODERAY_TOKEN_INTERFACE_DEPRECATION_WARNING_GIVEN = false - end - - # Encode a Tokens object. - def encode_tokens tokens, options = {} - options = @options.merge options - @scanner = tokens.scanner if tokens.respond_to? :scanner - setup options - compile tokens, options - finish options - end - - # Encode the given +code+ using the Scanner for +lang+. - def encode code, lang, options = {} - options = @options.merge options - @scanner = Scanners[lang].new code, CodeRay.get_scanner_options(options).update(:tokens => self) - setup options - @scanner.tokenize - finish options - end - - # You can use highlight instead of encode, if that seems - # more clear to you. - alias highlight encode - - # The default file extension for this encoder. - def file_extension - self.class.file_extension - end - - def << token - unless @@CODERAY_TOKEN_INTERFACE_DEPRECATION_WARNING_GIVEN - warn 'Using old Tokens#<< interface.' - @@CODERAY_TOKEN_INTERFACE_DEPRECATION_WARNING_GIVEN = true - end - self.token(*token) - end - - # Called with +content+ and +kind+ of the currently scanned token. - # For simple scanners, it's enougth to implement this method. - # - # By default, it calls text_token, begin_group, end_group, begin_line, - # or end_line, depending on the +content+. - def token content, kind - case content - when String - text_token content, kind - when :begin_group - begin_group kind - when :end_group - end_group kind - when :begin_line - begin_line kind - when :end_line - end_line kind - else - raise ArgumentError, 'Unknown token content type: %p, kind = %p' % [content, kind] - end - end - - # Called for each text token ([text, kind]), where text is a String. - def text_token text, kind - @out << text - end - - # Starts a token group with the given +kind+. - def begin_group kind - end - - # Ends a token group with the given +kind+. - def end_group kind - end - - # Starts a new line token group with the given +kind+. - def begin_line kind - end - - # Ends a new line token group with the given +kind+. - def end_line kind - end - - protected - - # Called with merged options before encoding starts. - # Sets @out to an empty string. - # - # See the HTML Encoder for an example of option caching. - def setup options - @out = get_output(options) - end - - def get_output options - options[:out] || ''.dup - end - - # Append data.to_s to the output. Returns the argument. - def output data - @out << data.to_s - data - end - - # Called with merged options after encoding starts. - # The return value is the result of encoding, typically @out. - def finish options - @out - end - - # Do the encoding. - # - # The already created +tokens+ object must be used; it must be a - # Tokens object. - def compile tokens, options = {} - content = nil - for item in tokens - if item.is_a? Array - raise ArgumentError, 'Two-element array tokens are no longer supported.' - end - if content - token content, item - content = nil - else - content = item - end - end - raise 'odd number list for Tokens' if content - end - - alias tokens compile - public :tokens - - end - - end -end diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/filter.rb b/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/filter.rb deleted file mode 100644 index e7f34d6a..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/filter.rb +++ /dev/null @@ -1,58 +0,0 @@ -module CodeRay -module Encoders - - # A Filter encoder has another Tokens instance as output. - # It can be subclass to select, remove, or modify tokens in the stream. - # - # Subclasses of Filter are called "Filters" and can be chained. - # - # == Options - # - # === :tokens - # - # The Tokens object which will receive the output. - # - # Default: Tokens.new - # - # See also: TokenKindFilter - class Filter < Encoder - - register_for :filter - - protected - def setup options - super - - @tokens = options[:tokens] || Tokens.new - end - - def finish options - output @tokens - end - - public - - def text_token text, kind # :nodoc: - @tokens.text_token text, kind - end - - def begin_group kind # :nodoc: - @tokens.begin_group kind - end - - def begin_line kind # :nodoc: - @tokens.begin_line kind - end - - def end_group kind # :nodoc: - @tokens.end_group kind - end - - def end_line kind # :nodoc: - @tokens.end_line kind - end - - end - -end -end diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/html.rb b/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/html.rb deleted file mode 100644 index 1b33e921..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/html.rb +++ /dev/null @@ -1,333 +0,0 @@ -require 'set' - -module CodeRay -module Encoders - - # = HTML Encoder - # - # This is CodeRay's most important highlighter: - # It provides save, fast XHTML generation and CSS support. - # - # == Usage - # - # require 'coderay' - # puts CodeRay.scan('Some /code/', :ruby).html #-> a HTML page - # puts CodeRay.scan('Some /code/', :ruby).html(:wrap => :span) - # #-> Some /code/ - # puts CodeRay.scan('Some /code/', :ruby).span #-> the same - # - # puts CodeRay.scan('Some code', :ruby).html( - # :wrap => nil, - # :line_numbers => :inline, - # :css => :style - # ) - # - # == Options - # - # === :tab_width - # Convert \t characters to +n+ spaces (a number or false.) - # false will keep tab characters untouched. - # - # Default: 8 - # - # === :css - # How to include the styles; can be :class or :style. - # - # Default: :class - # - # === :wrap - # Wrap in :page, :div, :span or nil. - # - # You can also use Encoders::Div and Encoders::Span. - # - # Default: nil - # - # === :title - # - # The title of the HTML page (works only when :wrap is set to :page.) - # - # Default: 'CodeRay output' - # - # === :break_lines - # - # Split multiline blocks at line breaks. - # Forced to true if :line_numbers option is set to :inline. - # - # Default: false - # - # === :line_numbers - # Include line numbers in :table, :inline, or nil (no line numbers) - # - # Default: nil - # - # === :line_number_anchors - # Adds anchors and links to the line numbers. Can be false (off), true (on), - # or a prefix string that will be prepended to the anchor name. - # - # The prefix must consist only of letters, digits, and underscores. - # - # Default: true, default prefix name: "line" - # - # === :line_number_start - # Where to start with line number counting. - # - # Default: 1 - # - # === :bold_every - # Make every +n+-th number appear bold. - # - # Default: 10 - # - # === :highlight_lines - # - # Highlights certain line numbers. - # Can be any Enumerable, typically just an Array or Range, of numbers. - # - # Bolding is deactivated when :highlight_lines is set. It only makes sense - # in combination with :line_numbers. - # - # Default: nil - # - # === :hint - # Include some information into the output using the title attribute. - # Can be :info (show token kind on mouse-over), :info_long (with full path) - # or :debug (via inspect). - # - # Default: false - class HTML < Encoder - - register_for :html - - FILE_EXTENSION = 'snippet.html' - - DEFAULT_OPTIONS = { - :tab_width => 8, - - :css => :class, - :style => :alpha, - :wrap => nil, - :title => 'CodeRay output', - - :break_lines => false, - - :line_numbers => nil, - :line_number_anchors => 'n', - :line_number_start => 1, - :bold_every => 10, - :highlight_lines => nil, - - :hint => false, - } - - autoload :Output, CodeRay.coderay_path('encoders', 'html', 'output') - autoload :CSS, CodeRay.coderay_path('encoders', 'html', 'css') - autoload :Numbering, CodeRay.coderay_path('encoders', 'html', 'numbering') - - attr_reader :css - - protected - - def self.make_html_escape_hash - { - '&' => '&', - '"' => '"', - '>' => '>', - '<' => '<', - # "\t" => will be set to ' ' * options[:tab_width] during setup - }.tap do |hash| - # Escape ASCII control codes except \x9 == \t and \xA == \n. - (Array(0x00..0x8) + Array(0xB..0x1F)).each { |invalid| hash[invalid.chr] = ' ' } - end - end - - HTML_ESCAPE = make_html_escape_hash - HTML_ESCAPE_PATTERN = /[\t"&><\0-\x8\xB-\x1F]/ - - TOKEN_KIND_TO_INFO = Hash.new do |h, kind| - h[kind] = kind.to_s.gsub(/_/, ' ').gsub(/\b\w/) { $&.capitalize } - end - - TRANSPARENT_TOKEN_KINDS = Set[ - :delimiter, :modifier, :content, :escape, :inline_delimiter, - ] - - # Generate a hint about the given +kinds+ in a +hint+ style. - # - # +hint+ may be :info, :info_long or :debug. - def self.token_path_to_hint hint, kinds - kinds = Array kinds - title = - case hint - when :info - kinds = kinds[1..-1] if TRANSPARENT_TOKEN_KINDS.include? kinds.first - TOKEN_KIND_TO_INFO[kinds.first] - when :info_long - kinds.reverse.map { |kind| TOKEN_KIND_TO_INFO[kind] }.join('/') - when :debug - kinds.inspect - end - title ? " title=\"#{title}\"" : '' - end - - def setup options - super - - check_options! options - - if options[:wrap] || options[:line_numbers] - @real_out = @out - @out = ''.dup - end - - @break_lines = (options[:break_lines] == true) - - @HTML_ESCAPE = HTML_ESCAPE.merge("\t" => options[:tab_width] ? ' ' * options[:tab_width] : "\t") - - @opened = [] - @last_opened = nil - @css = CSS.new options[:style] - - @span_for_kinds = make_span_for_kinds(options[:css], options[:hint]) - - @set_last_opened = options[:hint] || options[:css] == :style - end - - def finish options - unless @opened.empty? - @out << '' while @opened.pop - @last_opened = nil - end - - if @out.respond_to? :to_str - @out.extend Output - @out.css = @css - if options[:line_numbers] - Numbering.number! @out, options[:line_numbers], options - end - @out.wrap! options[:wrap] - @out.apply_title! options[:title] - end - - if defined?(@real_out) && @real_out - @real_out << @out - @out = @real_out - end - - super - end - - public - - def text_token text, kind - style = @span_for_kinds[@last_opened ? [kind, *@opened] : kind] - - text = text.gsub(/#{HTML_ESCAPE_PATTERN}/o) { |m| @HTML_ESCAPE[m] } if text =~ /#{HTML_ESCAPE_PATTERN}/o - text = break_lines(text, style) if @break_lines && (style || @opened.size > 0) && text.index("\n") - - if style - @out << style << text << '' - else - @out << text - end - end - - # token groups, eg. strings - def begin_group kind - @out << (@span_for_kinds[@last_opened ? [kind, *@opened] : kind] || '') - @opened << kind - @last_opened = kind if @set_last_opened - end - - def end_group kind - check_group_nesting 'token group', kind if $CODERAY_DEBUG - close_span - end - - # whole lines to be highlighted, eg. a deleted line in a diff - def begin_line kind - if style = @span_for_kinds[@last_opened ? [kind, *@opened] : kind] - if style['class="'] - @out << style.sub('class="', 'class="line ') - else - @out << style.sub('>', ' class="line">') - end - else - @out << '' - end - @opened << kind - @last_opened = kind if @options[:css] == :style - end - - def end_line kind - check_group_nesting 'line', kind if $CODERAY_DEBUG - close_span - end - - protected - - def check_options! options - unless [false, nil, :debug, :info, :info_long].include? options[:hint] - raise ArgumentError, "Unknown value %p for :hint; expected :info, :info_long, :debug, false, or nil." % [options[:hint]] - end - - unless [:class, :style].include? options[:css] - raise ArgumentError, 'Unknown value %p for :css.' % [options[:css]] - end - - options[:break_lines] = true if options[:line_numbers] == :inline - end - - def css_class_for_kinds kinds - TokenKinds[kinds.is_a?(Symbol) ? kinds : kinds.first] - end - - def style_for_kinds kinds - css_classes = kinds.is_a?(Array) ? kinds.map { |c| TokenKinds[c] } : [TokenKinds[kinds]] - @css.get_style_for_css_classes css_classes - end - - def make_span_for_kinds method, hint - Hash.new do |h, kinds| - begin - css_class = css_class_for_kinds(kinds) - title = HTML.token_path_to_hint hint, kinds if hint - - if css_class || title - if method == :style - style = style_for_kinds(kinds) - "" - else - "" - end - end - end.tap do |span| - h.clear if h.size >= 100 - h[kinds] = span - end - end - end - - def check_group_nesting name, kind - if @opened.empty? || @opened.last != kind - warn "Malformed token stream: Trying to close a #{name} (%p) that is not open. Open are: %p." % [kind, @opened[1..-1]] - end - end - - def break_lines text, style - reopen = ''.dup - @opened.each_with_index do |kind, index| - reopen << (@span_for_kinds[index > 0 ? [kind, *@opened[0...index]] : kind] || '') - end - text.gsub("\n", "#{'' * @opened.size}#{'' if style}\n#{reopen}#{style}") - end - - def close_span - if @opened.pop - @out << '' - @last_opened = @opened.last if @last_opened - end - end - end - -end -end diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/html/css.rb b/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/html/css.rb deleted file mode 100644 index 164d7f85..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/html/css.rb +++ /dev/null @@ -1,65 +0,0 @@ -module CodeRay -module Encoders - - class HTML - class CSS # :nodoc: - - attr :stylesheet - - def CSS.load_stylesheet style = nil - CodeRay::Styles[style] - end - - def initialize style = :default - @styles = Hash.new - style = CSS.load_stylesheet style - @stylesheet = [ - style::CSS_MAIN_STYLES, - style::TOKEN_COLORS.gsub(/^(?!$)/, '.CodeRay ') - ].join("\n") - parse style::TOKEN_COLORS - end - - def get_style_for_css_classes css_classes - cl = @styles[css_classes.first] - return '' unless cl - style = '' - 1.upto css_classes.size do |offset| - break if style = cl[css_classes[offset .. -1]] - end - # warn 'Style not found: %p' % [styles] if style.empty? - return style - end - - private - - CSS_CLASS_PATTERN = / - ( # $1 = selectors - (?: - (?: \s* \. [-\w]+ )+ - \s* ,? - )+ - ) - \s* \{ \s* - ( [^\}]+ )? # $2 = style - \s* \} \s* - | - ( [^\n]+ ) # $3 = error - /mx - def parse stylesheet - stylesheet.scan CSS_CLASS_PATTERN do |selectors, style, error| - raise "CSS parse error: '#{error.inspect}' not recognized" if error - for selector in selectors.split(',') - classes = selector.scan(/[-\w]+/) - cl = classes.pop - @styles[cl] ||= Hash.new - @styles[cl][classes] = style.to_s.strip.delete(' ').chomp(';') - end - end - end - - end - end - -end -end diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/html/numbering.rb b/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/html/numbering.rb deleted file mode 100644 index a1b9c04a..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/html/numbering.rb +++ /dev/null @@ -1,108 +0,0 @@ -module CodeRay -module Encoders - - class HTML - - module Numbering # :nodoc: - - def self.number! output, mode = :table, options = {} - return self unless mode - - options = DEFAULT_OPTIONS.merge options - - start = options[:line_number_start] - unless start.is_a? Integer - raise ArgumentError, "Invalid value %p for :line_number_start; Integer expected." % start - end - - anchor_prefix = options[:line_number_anchors] - anchor_prefix = 'line' if anchor_prefix == true - anchor_prefix = anchor_prefix.to_s[/[\w-]+/] if anchor_prefix - anchoring = - if anchor_prefix - proc do |line| - line = line.to_s - anchor = anchor_prefix + line - "#{line}" - end - else - :to_s.to_proc - end - - bold_every = options[:bold_every] - highlight_lines = options[:highlight_lines] - bolding = - if bold_every == false && highlight_lines == nil - anchoring - elsif highlight_lines.is_a? Enumerable - highlight_lines = highlight_lines.to_set - proc do |line| - if highlight_lines.include? line - "#{anchoring[line]}" # highlighted line numbers in bold - else - anchoring[line] - end - end - elsif bold_every.is_a? Integer - raise ArgumentError, ":bolding can't be 0." if bold_every == 0 - proc do |line| - if line % bold_every == 0 - "#{anchoring[line]}" # every bold_every-th number in bold - else - anchoring[line] - end - end - else - raise ArgumentError, 'Invalid value %p for :bolding; false or Integer expected.' % bold_every - end - - if position_of_last_newline = output.rindex(RUBY_VERSION >= '1.9' ? /\n/ : ?\n) - after_last_newline = output[position_of_last_newline + 1 .. -1] - ends_with_newline = after_last_newline[/\A(?:<\/span>)*\z/] - - if ends_with_newline - line_count = output.count("\n") - else - line_count = output.count("\n") + 1 - end - else - line_count = 1 - end - - case mode - when :inline - max_width = (start + line_count).to_s.size - line_number = start - output.gsub!(/^.*$\n?/) do |line| - line_number_text = bolding.call line_number - indent = ' ' * (max_width - line_number.to_s.size) - line_number += 1 - "#{indent}#{line_number_text}#{line}" - end - - when :table - line_numbers = (start ... start + line_count).map(&bolding).join("\n") - line_numbers << "\n" - line_numbers_table_template = Output::TABLE.apply('LINE_NUMBERS', line_numbers) - - output.gsub!(/<\/div>\n/, '
    ') - output.wrap_in! line_numbers_table_template - output.wrapped_in = :div - - when :list - raise NotImplementedError, 'The :list option is no longer available. Use :table.' - - else - raise ArgumentError, 'Unknown value %p for mode: expected one of %p' % - [mode, [:table, :inline]] - end - - output - end - - end - - end - -end -end diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/html/output.rb b/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/html/output.rb deleted file mode 100644 index ee87fea5..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/html/output.rb +++ /dev/null @@ -1,164 +0,0 @@ -module CodeRay -module Encoders - - class HTML - - # This module is included in the output String of the HTML Encoder. - # - # It provides methods like wrap, div, page etc. - # - # Remember to use #clone instead of #dup to keep the modules the object was - # extended with. - # - # TODO: Rewrite this without monkey patching. - module Output - - attr_accessor :css - - class << self - - # Raises an exception if an object that doesn't respond to to_str is extended by Output, - # to prevent users from misuse. Use Module#remove_method to disable. - def extended o # :nodoc: - warn "The Output module is intended to extend instances of String, not #{o.class}." unless o.respond_to? :to_str - end - - def make_stylesheet css, in_tag = false # :nodoc: - sheet = css.stylesheet - sheet = <<-'CSS' if in_tag - - CSS - sheet - end - - def page_template_for_css css # :nodoc: - sheet = make_stylesheet css - PAGE.apply 'CSS', sheet - end - - end - - def wrapped_in? element - wrapped_in == element - end - - def wrapped_in - @wrapped_in ||= nil - end - attr_writer :wrapped_in - - def wrap_in! template - Template.wrap! self, template, 'CONTENT' - self - end - - def apply_title! title - self.sub!(/()(<\/title>)/) { $1 + title + $2 } - self - end - - def wrap! element, *args - return self if not element or element == wrapped_in - case element - when :div - raise "Can't wrap %p in %p" % [wrapped_in, element] unless wrapped_in? nil - wrap_in! DIV - when :span - raise "Can't wrap %p in %p" % [wrapped_in, element] unless wrapped_in? nil - wrap_in! SPAN - when :page - wrap! :div if wrapped_in? nil - raise "Can't wrap %p in %p" % [wrapped_in, element] unless wrapped_in? :div - wrap_in! Output.page_template_for_css(@css) - if args.first.is_a?(Hash) && title = args.first[:title] - apply_title! title - end - self - else - raise "Unknown value %p for :wrap" % element - end - @wrapped_in = element - self - end - - def stylesheet in_tag = false - Output.make_stylesheet @css, in_tag - end - -#-- don't include the templates in docu - - class Template < String # :nodoc: - - def self.wrap! str, template, target - target = Regexp.new(Regexp.escape("<%#{target}%>")) - if template =~ target - str[0,0] = $` - str << $' - else - raise "Template target <%%%p%%> not found" % target - end - end - - def apply target, replacement - target = Regexp.new(Regexp.escape("<%#{target}%>")) - if self =~ target - Template.new($` + replacement + $') - else - raise "Template target <%%%p%%> not found" % target - end - end - - end - - SPAN = Template.new '<span class="CodeRay"><%CONTENT%></span>' - - DIV = Template.new <<-DIV -<div class="CodeRay"> - <div class="code"><pre><%CONTENT%></pre></div> -</div> - DIV - - TABLE = Template.new <<-TABLE -<table class="CodeRay"><tr> - <td class="line-numbers"><pre><%LINE_NUMBERS%></pre></td> - <td class="code"><pre><%CONTENT%></pre></td> -</tr></table> - TABLE - - PAGE = Template.new <<-PAGE -<!DOCTYPE html> -<html> -<head> - <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> - <title> - - - - -<%CONTENT%> - - - PAGE - - end - - end - -end -end diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/json.rb b/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/json.rb deleted file mode 100644 index a9e40dc6..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/json.rb +++ /dev/null @@ -1,83 +0,0 @@ -module CodeRay -module Encoders - - # A simple JSON Encoder. - # - # Example: - # CodeRay.scan('puts "Hello world!"', :ruby).json - # yields - # [ - # {"type"=>"text", "text"=>"puts", "kind"=>"ident"}, - # {"type"=>"text", "text"=>" ", "kind"=>"space"}, - # {"type"=>"block", "action"=>"open", "kind"=>"string"}, - # {"type"=>"text", "text"=>"\"", "kind"=>"delimiter"}, - # {"type"=>"text", "text"=>"Hello world!", "kind"=>"content"}, - # {"type"=>"text", "text"=>"\"", "kind"=>"delimiter"}, - # {"type"=>"block", "action"=>"close", "kind"=>"string"}, - # ] - class JSON < Encoder - - begin - require 'json' - rescue LoadError - begin - require 'rubygems' unless defined? Gem - gem 'json' - require 'json' - rescue LoadError - $stderr.puts "The JSON encoder needs the JSON library.\n" \ - "Please gem install json." - raise - end - end - - register_for :json - FILE_EXTENSION = 'json' - - protected - def setup options - super - - @first = true - @out << '[' - end - - def finish options - @out << ']' - end - - def append data - if @first - @first = false - else - @out << ',' - end - - @out << data.to_json - end - - public - def text_token text, kind - append :type => 'text', :text => text, :kind => kind - end - - def begin_group kind - append :type => 'block', :action => 'open', :kind => kind - end - - def end_group kind - append :type => 'block', :action => 'close', :kind => kind - end - - def begin_line kind - append :type => 'block', :action => 'begin_line', :kind => kind - end - - def end_line kind - append :type => 'block', :action => 'end_line', :kind => kind - end - - end - -end -end diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/lines_of_code.rb b/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/lines_of_code.rb deleted file mode 100644 index 5f8422f3..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/lines_of_code.rb +++ /dev/null @@ -1,45 +0,0 @@ -module CodeRay -module Encoders - - # Counts the LoC (Lines of Code). Returns an Integer >= 0. - # - # Alias: +loc+ - # - # Everything that is not comment, markup, doctype/shebang, or an empty line, - # is considered to be code. - # - # For example, - # * HTML files not containing JavaScript have 0 LoC - # * in a Java class without comments, LoC is the number of non-empty lines - # - # A Scanner class should define the token kinds that are not code in the - # KINDS_NOT_LOC constant, which defaults to [:comment, :doctype]. - class LinesOfCode < TokenKindFilter - - register_for :lines_of_code - - NON_EMPTY_LINE = /^\s*\S.*$/ - - protected - - def setup options - if scanner - kinds_not_loc = scanner.class::KINDS_NOT_LOC - else - warn "Tokens have no associated scanner, counting all nonempty lines." if $VERBOSE - kinds_not_loc = CodeRay::Scanners::Scanner::KINDS_NOT_LOC - end - - options[:exclude] = kinds_not_loc - - super options - end - - def finish options - output @tokens.text.scan(NON_EMPTY_LINE).size - end - - end - -end -end diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/lint.rb b/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/lint.rb deleted file mode 100644 index 88c8bd1d..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/lint.rb +++ /dev/null @@ -1,59 +0,0 @@ -module CodeRay -module Encoders - - # = Lint Encoder - # - # Checks for: - # - # - empty tokens - # - incorrect nesting - # - # It will raise an InvalidTokenStream exception when any of the above occurs. - # - # See also: Encoders::DebugLint - class Lint < Debug - - register_for :lint - - InvalidTokenStream = Class.new StandardError - EmptyToken = Class.new InvalidTokenStream - UnknownTokenKind = Class.new InvalidTokenStream - IncorrectTokenGroupNesting = Class.new InvalidTokenStream - - def text_token text, kind - raise EmptyToken, 'empty token for %p' % [kind] if text.empty? - raise UnknownTokenKind, 'unknown token kind %p (text was %p)' % [kind, text] unless TokenKinds.has_key? kind - end - - def begin_group kind - @opened << kind - end - - def end_group kind - raise IncorrectTokenGroupNesting, 'We are inside %s, not %p (end_group)' % [@opened.reverse.map(&:inspect).join(' < '), kind] if @opened.last != kind - @opened.pop - end - - def begin_line kind - @opened << kind - end - - def end_line kind - raise IncorrectTokenGroupNesting, 'We are inside %s, not %p (end_line)' % [@opened.reverse.map(&:inspect).join(' < '), kind] if @opened.last != kind - @opened.pop - end - - protected - - def setup options - @opened = [] - end - - def finish options - raise 'Some tokens still open at end of token stream: %p' % [@opened] unless @opened.empty? - end - - end - -end -end diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/null.rb b/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/null.rb deleted file mode 100644 index 73ba47d3..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/null.rb +++ /dev/null @@ -1,18 +0,0 @@ -module CodeRay -module Encoders - - # = Null Encoder - # - # Does nothing and returns an empty string. - class Null < Encoder - - register_for :null - - def text_token text, kind - # do nothing - end - - end - -end -end diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/page.rb b/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/page.rb deleted file mode 100644 index 800e73f3..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/page.rb +++ /dev/null @@ -1,24 +0,0 @@ -module CodeRay -module Encoders - - load :html - - # Wraps the output into a HTML page, using CSS classes and - # line numbers in the table format by default. - # - # See Encoders::HTML for available options. - class Page < HTML - - FILE_EXTENSION = 'html' - - register_for :page - - DEFAULT_OPTIONS = HTML::DEFAULT_OPTIONS.merge \ - :css => :class, - :wrap => :page, - :line_numbers => :table - - end - -end -end diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/span.rb b/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/span.rb deleted file mode 100644 index da705bdc..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/span.rb +++ /dev/null @@ -1,23 +0,0 @@ -module CodeRay -module Encoders - - load :html - - # Wraps HTML output into a SPAN element, using inline styles by default. - # - # See Encoders::HTML for available options. - class Span < HTML - - FILE_EXTENSION = 'span.html' - - register_for :span - - DEFAULT_OPTIONS = HTML::DEFAULT_OPTIONS.merge \ - :css => :style, - :wrap => :span, - :line_numbers => false - - end - -end -end diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/statistic.rb b/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/statistic.rb deleted file mode 100644 index b2f8b830..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/statistic.rb +++ /dev/null @@ -1,95 +0,0 @@ -module CodeRay -module Encoders - - # Makes a statistic for the given tokens. - # - # Alias: +stats+ - class Statistic < Encoder - - register_for :statistic - - attr_reader :type_stats, :real_token_count # :nodoc: - - TypeStats = Struct.new :count, :size # :nodoc: - - protected - - def setup options - super - - @type_stats = Hash.new { |h, k| h[k] = TypeStats.new 0, 0 } - @real_token_count = 0 - end - - STATS = <<-STATS # :nodoc: - -Code Statistics - -Tokens %8d - Non-Whitespace %8d -Bytes Total %8d - -Token Types (%d): - type count ratio size (average) -------------------------------------------------------------- -%s - STATS - - TOKEN_TYPES_ROW = <<-TKR # :nodoc: - %-20s %8d %6.2f %% %5.1f - TKR - - def finish options - all = @type_stats['TOTAL'] - all_count, all_size = all.count, all.size - @type_stats.each do |type, stat| - stat.size /= stat.count.to_f - end - types_stats = @type_stats.sort_by { |k, v| [-v.count, k.to_s] }.map do |k, v| - TOKEN_TYPES_ROW % [k, v.count, 100.0 * v.count / all_count, v.size] - end.join - @out << STATS % [ - all_count, @real_token_count, all_size, - @type_stats.delete_if { |k, v| k.is_a? String }.size, - types_stats - ] - - super - end - - public - - def text_token text, kind - @real_token_count += 1 unless kind == :space - @type_stats[kind].count += 1 - @type_stats[kind].size += text.size - @type_stats['TOTAL'].size += text.size - @type_stats['TOTAL'].count += 1 - end - - def begin_group kind - block_token ':begin_group', kind - end - - def end_group kind - block_token ':end_group', kind - end - - def begin_line kind - block_token ':begin_line', kind - end - - def end_line kind - block_token ':end_line', kind - end - - def block_token action, kind - @type_stats['TOTAL'].count += 1 - @type_stats[action].count += 1 - @type_stats[kind].count += 1 - end - - end - -end -end diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/terminal.rb b/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/terminal.rb deleted file mode 100644 index c7ae0146..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/terminal.rb +++ /dev/null @@ -1,195 +0,0 @@ -module CodeRay - module Encoders - - # Outputs code highlighted for a color terminal. - # - # Note: This encoder is in beta. It currently doesn't use the Styles. - # - # Alias: +term+ - # - # == Authors & License - # - # By Rob Aldred (http://robaldred.co.uk) - # - # Based on idea by Nathan Weizenbaum (http://nex-3.com) - # - # MIT License (http://www.opensource.org/licenses/mit-license.php) - class Terminal < Encoder - - register_for :terminal - - TOKEN_COLORS = { - :debug => "\e[1;37;44m", - - :annotation => "\e[34m", - :attribute_name => "\e[35m", - :attribute_value => "\e[31m", - :binary => { - :self => "\e[31m", - :char => "\e[1;31m", - :delimiter => "\e[1;31m", - }, - :char => { - :self => "\e[35m", - :delimiter => "\e[1;35m" - }, - :class => "\e[1;35;4m", - :class_variable => "\e[36m", - :color => "\e[32m", - :comment => { - :self => "\e[1;30m", - :char => "\e[37m", - :delimiter => "\e[37m", - }, - :constant => "\e[1;34;4m", - :decorator => "\e[35m", - :definition => "\e[1;33m", - :directive => "\e[33m", - :docstring => "\e[31m", - :doctype => "\e[1;34m", - :done => "\e[1;30;2m", - :entity => "\e[31m", - :error => "\e[1;37;41m", - :exception => "\e[1;31m", - :float => "\e[1;35m", - :function => "\e[1;34m", - :global_variable => "\e[1;32m", - :hex => "\e[1;36m", - :id => "\e[1;34m", - :include => "\e[31m", - :integer => "\e[1;34m", - :imaginary => "\e[1;34m", - :important => "\e[1;31m", - :key => { - :self => "\e[35m", - :char => "\e[1;35m", - :delimiter => "\e[1;35m", - }, - :keyword => "\e[32m", - :label => "\e[1;33m", - :local_variable => "\e[33m", - :namespace => "\e[1;35m", - :octal => "\e[1;34m", - :predefined => "\e[36m", - :predefined_constant => "\e[1;36m", - :predefined_type => "\e[1;32m", - :preprocessor => "\e[1;36m", - :pseudo_class => "\e[1;34m", - :regexp => { - :self => "\e[35m", - :delimiter => "\e[1;35m", - :modifier => "\e[35m", - :char => "\e[1;35m", - }, - :reserved => "\e[32m", - :shell => { - :self => "\e[33m", - :char => "\e[1;33m", - :delimiter => "\e[1;33m", - :escape => "\e[1;33m", - }, - :string => { - :self => "\e[31m", - :modifier => "\e[1;31m", - :char => "\e[1;35m", - :delimiter => "\e[1;31m", - :escape => "\e[1;31m", - }, - :symbol => { - :self => "\e[33m", - :delimiter => "\e[1;33m", - }, - :tag => "\e[32m", - :type => "\e[1;34m", - :value => "\e[36m", - :variable => "\e[34m", - - :insert => { - :self => "\e[42m", - :insert => "\e[1;32;42m", - :eyecatcher => "\e[102m", - }, - :delete => { - :self => "\e[41m", - :delete => "\e[1;31;41m", - :eyecatcher => "\e[101m", - }, - :change => { - :self => "\e[44m", - :change => "\e[37;44m", - }, - :head => { - :self => "\e[45m", - :filename => "\e[37;45m" - }, - } - - TOKEN_COLORS[:keyword] = TOKEN_COLORS[:reserved] - TOKEN_COLORS[:method] = TOKEN_COLORS[:function] - TOKEN_COLORS[:escape] = TOKEN_COLORS[:delimiter] - - protected - - def setup(options) - super - @opened = [] - @color_scopes = [TOKEN_COLORS] - end - - public - - def text_token text, kind - if color = @color_scopes.last[kind] - color = color[:self] if color.is_a? Hash - - @out << color - @out << (text.index("\n") ? text.gsub("\n", "\e[0m\n" + color) : text) - @out << "\e[0m" - if outer_color = @color_scopes.last[:self] - @out << outer_color - end - else - @out << text - end - end - - def begin_group kind - @opened << kind - @out << open_token(kind) - end - alias begin_line begin_group - - def end_group kind - if @opened.pop - @color_scopes.pop - @out << "\e[0m" - if outer_color = @color_scopes.last[:self] - @out << outer_color - end - end - end - - def end_line kind - @out << (@line_filler ||= "\t" * 100) - end_group kind - end - - private - - def open_token kind - if color = @color_scopes.last[kind] - if color.is_a? Hash - @color_scopes << color - color[:self] - else - @color_scopes << @color_scopes.last - color - end - else - @color_scopes << @color_scopes.last - '' - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/text.rb b/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/text.rb deleted file mode 100644 index 15c66f9c..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/text.rb +++ /dev/null @@ -1,46 +0,0 @@ -module CodeRay -module Encoders - - # Concats the tokens into a single string, resulting in the original - # code string if no tokens were removed. - # - # Alias: +plain+, +plaintext+ - # - # == Options - # - # === :separator - # A separator string to join the tokens. - # - # Default: empty String - class Text < Encoder - - register_for :text - - FILE_EXTENSION = 'txt' - - DEFAULT_OPTIONS = { - :separator => nil - } - - def text_token text, kind - super - - if @first - @first = false - else - @out << @sep - end if @sep - end - - protected - def setup options - super - - @first = true - @sep = options[:separator] - end - - end - -end -end diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/token_kind_filter.rb b/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/token_kind_filter.rb deleted file mode 100644 index 4773ea34..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/token_kind_filter.rb +++ /dev/null @@ -1,111 +0,0 @@ -module CodeRay -module Encoders - - load :filter - - # A Filter that selects tokens based on their token kind. - # - # == Options - # - # === :exclude - # - # One or many symbols (in an Array) which shall be excluded. - # - # Default: [] - # - # === :include - # - # One or many symbols (in an array) which shall be included. - # - # Default: :all, which means all tokens are included. - # - # Exclusion wins over inclusion. - # - # See also: CommentFilter - class TokenKindFilter < Filter - - register_for :token_kind_filter - - DEFAULT_OPTIONS = { - :exclude => [], - :include => :all - } - - protected - def setup options - super - - @group_excluded = false - @exclude = options[:exclude] - @exclude = Array(@exclude) unless @exclude == :all - @include = options[:include] - @include = Array(@include) unless @include == :all - end - - def include_text_token? text, kind - include_group? kind - end - - def include_group? kind - (@include == :all || @include.include?(kind)) && - !(@exclude == :all || @exclude.include?(kind)) - end - - public - - # Add the token to the output stream if +kind+ matches the conditions. - def text_token text, kind - super if !@group_excluded && include_text_token?(text, kind) - end - - # Add the token group to the output stream if +kind+ matches the - # conditions. - # - # If it does not, all tokens inside the group are excluded from the - # stream, even if their kinds match. - def begin_group kind - if @group_excluded - @group_excluded += 1 - elsif include_group? kind - super - else - @group_excluded = 1 - end - end - - # See +begin_group+. - def begin_line kind - if @group_excluded - @group_excluded += 1 - elsif include_group? kind - super - else - @group_excluded = 1 - end - end - - # Take care of re-enabling the delegation of tokens to the output stream - # if an exluded group has ended. - def end_group kind - if @group_excluded - @group_excluded -= 1 - @group_excluded = false if @group_excluded.zero? - else - super - end - end - - # See +end_group+. - def end_line kind - if @group_excluded - @group_excluded -= 1 - @group_excluded = false if @group_excluded.zero? - else - super - end - end - - end - -end -end diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/xml.rb b/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/xml.rb deleted file mode 100644 index 3d306a60..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/xml.rb +++ /dev/null @@ -1,72 +0,0 @@ -module CodeRay -module Encoders - - # = XML Encoder - # - # Uses REXML. Very slow. - class XML < Encoder - - register_for :xml - - FILE_EXTENSION = 'xml' - - autoload :REXML, 'rexml/document' - - DEFAULT_OPTIONS = { - :tab_width => 8, - :pretty => -1, - :transitive => false, - } - - protected - def setup options - super - - @doc = REXML::Document.new - @doc << REXML::XMLDecl.new - @tab_width = options[:tab_width] - @root = @node = @doc.add_element('coderay-tokens') - end - - def finish options - @doc.write @out, options[:pretty], options[:transitive], true - - super - end - - public - def text_token text, kind - if kind == :space - token = @node - else - token = @node.add_element kind.to_s - end - text.scan(/(\x20+)|(\t+)|(\n)|[^\x20\t\n]+/) do |space, tab, nl| - case - when space - token << REXML::Text.new(space, true) - when tab - token << REXML::Text.new(tab, true) - when nl - token << REXML::Text.new(nl, true) - else - token << REXML::Text.new($&) - end - end - end - - def begin_group kind - @node = @node.add_element kind.to_s - end - - def end_group kind - if @node == @root - raise 'no token to close!' - end - @node = @node.parent - end - - end - -end -end diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/yaml.rb b/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/yaml.rb deleted file mode 100644 index ba6e7155..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/encoders/yaml.rb +++ /dev/null @@ -1,50 +0,0 @@ -autoload :YAML, 'yaml' - -module CodeRay -module Encoders - - # = YAML Encoder - # - # Slow. - class YAML < Encoder - - register_for :yaml - - FILE_EXTENSION = 'yaml' - - protected - def setup options - super - - @data = [] - end - - def finish options - output ::YAML.dump(@data) - end - - public - def text_token text, kind - @data << [text, kind] - end - - def begin_group kind - @data << [:begin_group, kind] - end - - def end_group kind - @data << [:end_group, kind] - end - - def begin_line kind - @data << [:begin_line, kind] - end - - def end_line kind - @data << [:end_line, kind] - end - - end - -end -end diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/for_redcloth.rb b/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/for_redcloth.rb deleted file mode 100644 index f9df32be..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/for_redcloth.rb +++ /dev/null @@ -1,95 +0,0 @@ -module CodeRay - - # A little hack to enable CodeRay highlighting in RedCloth. - # - # Usage: - # require 'coderay' - # require 'coderay/for_redcloth' - # RedCloth.new('@[ruby]puts "Hello, World!"@').to_html - # - # Make sure you have RedCloth 4.0.3 activated, for example by calling - # require 'rubygems' - # before RedCloth is loaded and before calling CodeRay.for_redcloth. - module ForRedCloth - - def self.install - gem 'RedCloth', '>= 4.0.3' if defined? gem - require 'redcloth' - unless RedCloth::VERSION.to_s >= '4.0.3' - if defined? gem - raise 'CodeRay.for_redcloth needs RedCloth version 4.0.3 or later. ' + - "You have #{RedCloth::VERSION}. Please gem install RedCloth." - else - $".delete 'redcloth.rb' # sorry, but it works - require 'rubygems' - return install # retry - end - end - unless RedCloth::VERSION.to_s >= '4.2.2' - warn 'CodeRay.for_redcloth works best with RedCloth version 4.2.2 or later.' - end - RedCloth::TextileDoc.send :include, ForRedCloth::TextileDoc - RedCloth::Formatters::HTML.module_eval do - def unescape(html) # :nodoc: - replacements = { - '&' => '&', - '"' => '"', - '>' => '>', - '<' => '<', - } - html.gsub(/&(?:amp|quot|[gl]t);/) { |entity| replacements[entity] } - end - undef code, bc_open, bc_close, escape_pre - def code(opts) # :nodoc: - opts[:block] = true - if !opts[:lang] && RedCloth::VERSION.to_s >= '4.2.0' - # simulating pre-4.2 behavior - if opts[:text].sub!(/\A\[(\w+)\]/, '') - if CodeRay::Scanners[$1].lang == :text - opts[:text] = $& + opts[:text] - else - opts[:lang] = $1 - end - end - end - if opts[:lang] && !filter_coderay - require 'coderay' - @in_bc ||= nil - format = @in_bc ? :div : :span - opts[:text] = unescape(opts[:text]) unless @in_bc - highlighted_code = CodeRay.encode opts[:text], opts[:lang], format - highlighted_code.sub!(/\A<(span|div)/) { |m| m + pba(@in_bc || opts) } - highlighted_code - else - "#{opts[:text]}" - end - end - def bc_open(opts) # :nodoc: - opts[:block] = true - @in_bc = opts - opts[:lang] ? '' : "" - end - def bc_close(opts) # :nodoc: - opts = @in_bc - @in_bc = nil - opts[:lang] ? '' : "\n" - end - def escape_pre(text) # :nodoc: - if @in_bc ||= nil - text - else - html_esc(text, :html_escape_preformatted) - end - end - end - end - - module TextileDoc # :nodoc: - attr_accessor :filter_coderay - end - - end - -end - -CodeRay::ForRedCloth.install \ No newline at end of file diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/helpers/file_type.rb b/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/helpers/file_type.rb deleted file mode 100644 index 7de34d58..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/helpers/file_type.rb +++ /dev/null @@ -1,151 +0,0 @@ -module CodeRay - - # = FileType - # - # A simple filetype recognizer. - # - # == Usage - # - # # determine the type of the given - # lang = FileType[file_name] - # - # # return :text if the file type is unknown - # lang = FileType.fetch file_name, :text - # - # # try the shebang line, too - # lang = FileType.fetch file_name, :text, true - module FileType - - UnknownFileType = Class.new Exception - - class << self - - # Try to determine the file type of the file. - # - # +filename+ is a relative or absolute path to a file. - # - # The file itself is only accessed when +read_shebang+ is set to true. - # That means you can get filetypes from files that don't exist. - def [] filename, read_shebang = false - name = File.basename filename - ext = File.extname(name).sub(/^\./, '') # from last dot, delete the leading dot - ext2 = filename.to_s[/\.(.*)/, 1] # from first dot - - type = - TypeFromExt[ext] || - TypeFromExt[ext.downcase] || - (TypeFromExt[ext2] if ext2) || - (TypeFromExt[ext2.downcase] if ext2) || - TypeFromName[name] || - TypeFromName[name.downcase] - type ||= type_from_shebang(filename) if read_shebang - - type - end - - # This works like Hash#fetch. - # - # If the filetype cannot be found, the +default+ value - # is returned. - def fetch filename, default = nil, read_shebang = false - if default && block_given? - warn 'Block supersedes default value argument; use either.' - end - - if type = self[filename, read_shebang] - type - else - return yield if block_given? - return default if default - raise UnknownFileType, 'Could not determine type of %p.' % filename - end - end - - protected - - def type_from_shebang filename - return unless File.exist? filename - File.open filename, 'r' do |f| - if first_line = f.gets - if type = first_line[TypeFromShebang] - type.to_sym - end - end - end - end - - end - - TypeFromExt = { - 'c' => :c, - 'cfc' => :xml, - 'cfm' => :xml, - 'clj' => :clojure, - 'css' => :css, - 'diff' => :diff, - 'dpr' => :delphi, - 'erb' => :erb, - 'gemspec' => :ruby, - 'go' => :go, - 'groovy' => :groovy, - 'gvy' => :groovy, - 'h' => :c, - 'haml' => :haml, - 'htm' => :html, - 'html' => :html, - 'html.erb' => :erb, - 'java' => :java, - 'js' => :java_script, - 'json' => :json, - 'lua' => :lua, - 'mab' => :ruby, - 'pas' => :delphi, - 'patch' => :diff, - 'phtml' => :php, - 'php' => :php, - 'php3' => :php, - 'php4' => :php, - 'php5' => :php, - 'prawn' => :ruby, - 'py' => :python, - 'py3' => :python, - 'pyw' => :python, - 'rake' => :ruby, - 'raydebug' => :raydebug, - 'rb' => :ruby, - 'rbw' => :ruby, - 'rhtml' => :erb, - 'rjs' => :ruby, - 'rpdf' => :ruby, - 'ru' => :ruby, # config.ru - 'rxml' => :ruby, - 'sass' => :sass, - 'sql' => :sql, - 'taskpaper' => :taskpaper, - 'template' => :json, # AWS CloudFormation template - 'tmproj' => :xml, - 'xaml' => :xml, - 'xhtml' => :html, - 'xml' => :xml, - 'yaml' => :yaml, - 'yml' => :yaml, - } - for cpp_alias in %w[cc cpp cp cxx c++ C hh hpp h++ cu] - TypeFromExt[cpp_alias] = :cpp - end - - TypeFromShebang = /\b(?:ruby|perl|python|sh)\b/ - - TypeFromName = { - 'Capfile' => :ruby, - 'Rakefile' => :ruby, - 'Rantfile' => :ruby, - 'Gemfile' => :ruby, - 'Guardfile' => :ruby, - 'Vagrantfile' => :ruby, - 'Appraisals' => :ruby - } - - end - -end diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/helpers/plugin.rb b/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/helpers/plugin.rb deleted file mode 100644 index 45679436..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/helpers/plugin.rb +++ /dev/null @@ -1,55 +0,0 @@ -module CodeRay - - # = Plugin - # - # Plugins have to include this module. - # - # IMPORTANT: Use extend for this module. - # - # See CodeRay::PluginHost for examples. - module Plugin - - attr_reader :plugin_id - - # Register this class for the given +id+. - # - # Example: - # class MyPlugin < PluginHost::BaseClass - # register_for :my_id - # ... - # end - # - # See PluginHost.register. - def register_for id - @plugin_id = id - plugin_host.register self, id - end - - # Returns the title of the plugin, or sets it to the - # optional argument +title+. - def title title = nil - if title - @title = title.to_s - else - @title ||= name[/([^:]+)$/, 1] - end - end - - # The PluginHost for this Plugin class. - def plugin_host host = nil - if host.is_a? PluginHost - const_set :PLUGIN_HOST, host - end - self::PLUGIN_HOST - end - - def aliases - plugin_host.plugin_hash.inject [] do |aliases, (key, _)| - aliases << key if plugin_host[key] == self - aliases - end - end - - end - -end diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/helpers/plugin_host.rb b/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/helpers/plugin_host.rb deleted file mode 100644 index e9bc17c1..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/helpers/plugin_host.rb +++ /dev/null @@ -1,221 +0,0 @@ -module CodeRay - - # = PluginHost - # - # A simple subclass/subfolder plugin system. - # - # Example: - # class Generators - # extend PluginHost - # plugin_path 'app/generators' - # end - # - # class Generator - # extend Plugin - # PLUGIN_HOST = Generators - # end - # - # class FancyGenerator < Generator - # register_for :fancy - # end - # - # Generators[:fancy] #-> FancyGenerator - # # or - # CodeRay.require_plugin 'Generators/fancy' - # # or - # Generators::Fancy - module PluginHost - - # Raised if Encoders::[] fails because: - # * a file could not be found - # * the requested Plugin is not registered - PluginNotFound = Class.new LoadError - HostNotFound = Class.new LoadError - - PLUGIN_HOSTS = [] - PLUGIN_HOSTS_BY_ID = {} # dummy hash - - # Loads all plugins using list and load. - def load_all - for plugin in list - load plugin - end - end - - # Returns the Plugin for +id+. - # - # Example: - # yaml_plugin = MyPluginHost[:yaml] - def [] id, *args, &blk - plugin = validate_id(id) - begin - plugin = plugin_hash.[](plugin, *args, &blk) - end while plugin.is_a? String - plugin - end - - alias load [] - - # Tries to +load+ the missing plugin by translating +const+ to the - # underscore form (eg. LinesOfCode becomes lines_of_code). - def const_missing const - id = const.to_s. - gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2'). - gsub(/([a-z\d])([A-Z])/,'\1_\2'). - downcase - load id - end - - class << self - - # Adds the module/class to the PLUGIN_HOSTS list. - def extended mod - PLUGIN_HOSTS << mod - end - - end - - # The path where the plugins can be found. - def plugin_path *args - unless args.empty? - @plugin_path = File.expand_path File.join(*args) - end - @plugin_path ||= '' - end - - # Map a plugin_id to another. - # - # Usage: Put this in a file plugin_path/_map.rb. - # - # class MyColorHost < PluginHost - # map :navy => :dark_blue, - # :maroon => :brown, - # :luna => :moon - # end - def map hash - for from, to in hash - from = validate_id from - to = validate_id to - plugin_hash[from] = to unless plugin_hash.has_key? from - end - end - - # Define the default plugin to use when no plugin is found - # for a given id, or return the default plugin. - # - # See also map. - # - # class MyColorHost < PluginHost - # map :navy => :dark_blue - # default :gray - # end - # - # MyColorHost.default # loads and returns the Gray plugin - def default id = nil - if id - id = validate_id id - raise "The default plugin can't be named \"default\"." if id == :default - plugin_hash[:default] = id - else - load :default - end - end - - # Every plugin must register itself for +id+ by calling register_for, - # which calls this method. - # - # See Plugin#register_for. - def register plugin, id - plugin_hash[validate_id(id)] = plugin - end - - # A Hash of plugion_id => Plugin pairs. - def plugin_hash - @plugin_hash ||= (@plugin_hash = make_plugin_hash).tap { load_plugin_map } - end - - # Returns an array of all .rb files in the plugin path. - # - # The extension .rb is not included. - def list - Dir[path_to('*')].select do |file| - File.basename(file)[/^(?!_)\w+\.rb$/] - end.map do |file| - File.basename(file, '.rb').to_sym - end - end - - # Returns an array of all Plugins. - # - # Note: This loads all plugins using load_all. - def all_plugins - load_all - plugin_hash.values.grep(Class) - end - - # Loads the map file (see map). - # - # This is done automatically when plugin_path is called. - def load_plugin_map - mapfile = path_to '_map' - if File.exist? mapfile - require mapfile - true - else - false - end - end - - protected - - # Return a plugin hash that automatically loads plugins. - def make_plugin_hash - Hash.new do |h, plugin_id| - id = validate_id(plugin_id) - path = path_to id - begin - require path - rescue LoadError => boom - if h.has_key?(:default) - h[:default] - else - raise PluginNotFound, '%p could not load plugin %p: %s' % [self, id, boom] - end - else - # Plugin should have registered by now - if h.has_key? id - h[id] - else - raise PluginNotFound, "No #{self.name} plugin for #{id.inspect} found in #{path}." - end - end - end - end - - # Returns the expected path to the plugin file for the given id. - def path_to plugin_id - File.join plugin_path, "#{plugin_id}.rb" - end - - # Converts +id+ to a valid plugin ID String, or returns +nil+. - # - # Raises +ArgumentError+ for all other objects, or if the - # given String includes non-alphanumeric characters (\W). - def validate_id id - case id - when Symbol - id.to_s - when String - if id[/\w+/] == id - id.downcase - else - raise ArgumentError, "Invalid id given: #{id}" - end - else - raise ArgumentError, "Symbol or String expected, but #{id.class} given." - end - end - - end - -end diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/helpers/word_list.rb b/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/helpers/word_list.rb deleted file mode 100644 index 4a42c4a7..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/helpers/word_list.rb +++ /dev/null @@ -1,72 +0,0 @@ -module CodeRay - - # = WordList - # - # A Hash subclass designed for mapping word lists to token types. - # - # A WordList is a Hash with some additional features. - # It is intended to be used for keyword recognition. - # - # WordList is optimized to be used in Scanners, - # typically to decide whether a given ident is a special token. - # - # For case insensitive words use WordList::CaseIgnoring. - # - # Example: - # - # # define word arrays - # RESERVED_WORDS = %w[ - # asm break case continue default do else - # ] - # - # PREDEFINED_TYPES = %w[ - # int long short char void - # ] - # - # # make a WordList - # IDENT_KIND = WordList.new(:ident). - # add(RESERVED_WORDS, :reserved). - # add(PREDEFINED_TYPES, :predefined_type) - # - # ... - # - # def scan_tokens tokens, options - # ... - # - # elsif scan(/[A-Za-z_][A-Za-z_0-9]*/) - # # use it - # kind = IDENT_KIND[match] - # ... - class WordList < Hash - - # Create a new WordList with +default+ as default value. - def initialize default = false - super default - end - - # Add words to the list and associate them with +value+. - # - # Returns +self+, so you can concat add calls. - def add words, value = true - words.each { |word| self[word] = value } - self - end - - end - - - # A CaseIgnoring WordList is like a WordList, only that - # keys are compared case-insensitively (normalizing keys using +downcase+). - class WordList::CaseIgnoring < WordList - - def [] key - super key.downcase - end - - def []= key, value - super key.downcase, value - end - - end - -end diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners.rb b/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners.rb deleted file mode 100644 index 3c7e594d..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners.rb +++ /dev/null @@ -1,27 +0,0 @@ -require 'strscan' - -module CodeRay - - autoload :WordList, coderay_path('helpers', 'word_list') - - # = Scanners - # - # This module holds the Scanner class and its subclasses. - # For example, the Ruby scanner is named CodeRay::Scanners::Ruby - # can be found in coderay/scanners/ruby. - # - # Scanner also provides methods and constants for the register - # mechanism and the [] method that returns the Scanner class - # belonging to the given lang. - # - # See PluginHost. - module Scanners - - extend PluginHost - plugin_path File.dirname(__FILE__), 'scanners' - - autoload :Scanner, CodeRay.coderay_path('scanners', 'scanner') - - end - -end diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/_map.rb b/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/_map.rb deleted file mode 100644 index a240298d..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/_map.rb +++ /dev/null @@ -1,24 +0,0 @@ -module CodeRay -module Scanners - - map \ - :'c++' => :cpp, - :cplusplus => :cpp, - :ecmascript => :java_script, - :ecma_script => :java_script, - :rhtml => :erb, - :eruby => :erb, - :irb => :ruby, - :javascript => :java_script, - :js => :java_script, - :pascal => :delphi, - :patch => :diff, - :plain => :text, - :plaintext => :text, - :xhtml => :html, - :yml => :yaml - - default :text - -end -end diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/c.rb b/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/c.rb deleted file mode 100644 index fb2f30db..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/c.rb +++ /dev/null @@ -1,189 +0,0 @@ -module CodeRay -module Scanners - - # Scanner for C. - class C < Scanner - - register_for :c - file_extension 'c' - - KEYWORDS = [ - 'asm', 'break', 'case', 'continue', 'default', 'do', - 'else', 'enum', 'for', 'goto', 'if', 'return', - 'sizeof', 'struct', 'switch', 'typedef', 'union', 'while', - 'restrict', # added in C99 - ] # :nodoc: - - PREDEFINED_TYPES = [ - 'int', 'long', 'short', 'char', - 'signed', 'unsigned', 'float', 'double', - 'bool', 'complex', # added in C99 - ] # :nodoc: - - PREDEFINED_CONSTANTS = [ - 'EOF', 'NULL', - 'true', 'false', # added in C99 - ] # :nodoc: - DIRECTIVES = [ - 'auto', 'extern', 'register', 'static', 'void', - 'const', 'volatile', # added in C89 - 'inline', # added in C99 - ] # :nodoc: - - IDENT_KIND = WordList.new(:ident). - add(KEYWORDS, :keyword). - add(PREDEFINED_TYPES, :predefined_type). - add(DIRECTIVES, :directive). - add(PREDEFINED_CONSTANTS, :predefined_constant) # :nodoc: - - ESCAPE = / [rbfntv\n\\'"] | x[a-fA-F0-9]{1,2} | [0-7]{1,3} /x # :nodoc: - UNICODE_ESCAPE = / u[a-fA-F0-9]{4} | U[a-fA-F0-9]{8} /x # :nodoc: - - protected - - def scan_tokens encoder, options - - state = :initial - label_expected = true - case_expected = false - label_expected_before_preproc_line = nil - in_preproc_line = false - - until eos? - - case state - - when :initial - - if match = scan(/ \s+ | \\\n /x) - if in_preproc_line && match != "\\\n" && match.index(?\n) - in_preproc_line = false - label_expected = label_expected_before_preproc_line - end - encoder.text_token match, :space - - elsif match = scan(%r! // [^\n\\]* (?: \\. [^\n\\]* )* | /\* (?: .*? \*/ | .* ) !mx) - encoder.text_token match, :comment - - elsif match = scan(/ [-+*=<>?:;,!&^|()\[\]{}~%]+ | \/=? | \.(?!\d) /x) - label_expected = match =~ /[;\{\}]/ - if case_expected - label_expected = true if match == ':' - case_expected = false - end - encoder.text_token match, :operator - - elsif match = scan(/ [A-Za-z_][A-Za-z_0-9]* /x) - kind = IDENT_KIND[match] - if kind == :ident && label_expected && !in_preproc_line && scan(/:(?!:)/) - kind = :label - match << matched - else - label_expected = false - if kind == :keyword - case match - when 'case', 'default' - case_expected = true - end - end - end - encoder.text_token match, kind - - elsif match = scan(/L?"/) - encoder.begin_group :string - if match[0] == ?L - encoder.text_token 'L', :modifier - match = '"' - end - encoder.text_token match, :delimiter - state = :string - - elsif match = scan(/ \# \s* if \s* 0 /x) - match << scan_until(/ ^\# (?:elif|else|endif) .*? $ | \z /xm) unless eos? - encoder.text_token match, :comment - - elsif match = scan(/#[ \t]*(\w*)/) - encoder.text_token match, :preprocessor - in_preproc_line = true - label_expected_before_preproc_line = label_expected - state = :include_expected if self[1] == 'include' - - elsif match = scan(/ L?' (?: [^\'\n\\] | \\ #{ESCAPE} )? '? /ox) - label_expected = false - encoder.text_token match, :char - - elsif match = scan(/\$/) - encoder.text_token match, :ident - - elsif match = scan(/0[xX][0-9A-Fa-f]+/) - label_expected = false - encoder.text_token match, :hex - - elsif match = scan(/(?:0[0-7]+)(?![89.eEfF])/) - label_expected = false - encoder.text_token match, :octal - - elsif match = scan(/(?:\d+)(?![.eEfF])L?L?/) - label_expected = false - encoder.text_token match, :integer - - elsif match = scan(/\d[fF]?|\d*\.\d+(?:[eE][+-]?\d+)?[fF]?|\d+[eE][+-]?\d+[fF]?/) - label_expected = false - encoder.text_token match, :float - - else - encoder.text_token getch, :error - - end - - when :string - if match = scan(/[^\\\n"]+/) - encoder.text_token match, :content - elsif match = scan(/"/) - encoder.text_token match, :delimiter - encoder.end_group :string - state = :initial - label_expected = false - elsif match = scan(/ \\ (?: #{ESCAPE} | #{UNICODE_ESCAPE} ) /mox) - encoder.text_token match, :char - elsif match = scan(/ \\ | $ /x) - encoder.end_group :string - encoder.text_token match, :error unless match.empty? - state = :initial - label_expected = false - else - raise_inspect "else case \" reached; %p not handled." % peek(1), encoder - end - - when :include_expected - if match = scan(/<[^>\n]+>?|"[^"\n\\]*(?:\\.[^"\n\\]*)*"?/) - encoder.text_token match, :include - state = :initial - - elsif match = scan(/\s+/) - encoder.text_token match, :space - state = :initial if match.index ?\n - - else - state = :initial - - end - - else - raise_inspect 'Unknown state', encoder - - end - - end - - if state == :string - encoder.end_group :string - end - - encoder - end - - end - -end -end diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/clojure.rb b/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/clojure.rb deleted file mode 100644 index f8fbf650..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/clojure.rb +++ /dev/null @@ -1,217 +0,0 @@ -# encoding: utf-8 -module CodeRay - module Scanners - - # Clojure scanner by Licenser. - class Clojure < Scanner - - register_for :clojure - file_extension 'clj' - - SPECIAL_FORMS = %w[ - def if do let quote var fn loop recur throw try catch monitor-enter monitor-exit . - new - ] # :nodoc: - - CORE_FORMS = %w[ - + - -> ->> .. / * <= < = == >= > accessor aclone add-classpath add-watch - agent agent-error agent-errors aget alength alias all-ns alter alter-meta! - alter-var-root amap ancestors and apply areduce array-map aset aset-boolean - aset-byte aset-char aset-double aset-float aset-int aset-long aset-short - assert assoc assoc! assoc-in associative? atom await await-for bases bean - bigdec bigint binding bit-and bit-and-not bit-clear bit-flip bit-not bit-or - bit-set bit-shift-left bit-shift-right bit-test bit-xor boolean boolean-array - booleans bound-fn bound-fn* bound? butlast byte byte-array bytes case cast char - char-array char-escape-string char-name-string char? chars class class? - clear-agent-errors clojure-version coll? comment commute comp comparator - compare compare-and-set! compile complement concat cond condp conj conj! - cons constantly construct-proxy contains? count counted? create-ns - create-struct cycle dec decimal? declare definline defmacro defmethod defmulti - defn defn- defonce defprotocol defrecord defstruct deftype delay delay? - deliver denominator deref derive descendants disj disj! dissoc dissoc! - distinct distinct? doall doc dorun doseq dosync dotimes doto double - double-array doubles drop drop-last drop-while empty empty? ensure - enumeration-seq error-handler error-mode eval even? every? extend - extend-protocol extend-type extenders extends? false? ffirst file-seq - filter find find-doc find-ns find-var first float float-array float? - floats flush fn fn? fnext for force format future future-call future-cancel - future-cancelled? future-done? future? gen-class gen-interface gensym get - get-in get-method get-proxy-class get-thread-bindings get-validator hash - hash-map hash-set identical? identity if-let if-not ifn? import in-ns - inc init-proxy instance? int int-array integer? interleave intern - interpose into into-array ints io! isa? iterate iterator-seq juxt key - keys keyword keyword? last lazy-cat lazy-seq let letfn line-seq list list* - list? load load-file load-reader load-string loaded-libs locking long - long-array longs loop macroexpand macroexpand-1 make-array make-hierarchy - map map? mapcat max max-key memfn memoize merge merge-with meta methods - min min-key mod name namespace neg? newline next nfirst nil? nnext not - not-any? not-empty not-every? not= ns ns-aliases ns-imports ns-interns - ns-map ns-name ns-publics ns-refers ns-resolve ns-unalias ns-unmap nth - nthnext num number? numerator object-array odd? or parents partial - partition pcalls peek persistent! pmap pop pop! pop-thread-bindings - pos? pr pr-str prefer-method prefers print print-namespace-doc - print-str printf println println-str prn prn-str promise proxy - proxy-mappings proxy-super push-thread-bindings pvalues quot rand - rand-int range ratio? rationalize re-find re-groups re-matcher - re-matches re-pattern re-seq read read-line read-string reduce ref - ref-history-count ref-max-history ref-min-history ref-set refer - refer-clojure reify release-pending-sends rem remove remove-all-methods - remove-method remove-ns remove-watch repeat repeatedly replace replicate - require reset! reset-meta! resolve rest restart-agent resultset-seq - reverse reversible? rseq rsubseq satisfies? second select-keys send - send-off seq seq? seque sequence sequential? set set-error-handler! - set-error-mode! set-validator! set? short short-array shorts - shutdown-agents slurp some sort sort-by sorted-map sorted-map-by - sorted-set sorted-set-by sorted? special-form-anchor special-symbol? - split-at split-with str string? struct struct-map subs subseq subvec - supers swap! symbol symbol? sync syntax-symbol-anchor take take-last - take-nth take-while test the-ns thread-bound? time to-array to-array-2d - trampoline transient tree-seq true? type unchecked-add unchecked-dec - unchecked-divide unchecked-inc unchecked-multiply unchecked-negate - unchecked-remainder unchecked-subtract underive update-in update-proxy - use val vals var-get var-set var? vary-meta vec vector vector-of vector? - when when-first when-let when-not while with-bindings with-bindings* - with-in-str with-local-vars with-meta with-open with-out-str - with-precision xml-seq zero? zipmap - ] # :nodoc: - - PREDEFINED_CONSTANTS = %w[ - true false nil *1 *2 *3 *agent* *clojure-version* *command-line-args* - *compile-files* *compile-path* *e *err* *file* *flush-on-newline* - *in* *ns* *out* *print-dup* *print-length* *print-level* *print-meta* - *print-readably* *read-eval* *warn-on-reflection* - ] # :nodoc: - - IDENT_KIND = WordList.new(:ident). - add(SPECIAL_FORMS, :keyword). - add(CORE_FORMS, :keyword). - add(PREDEFINED_CONSTANTS, :predefined_constant) - - KEYWORD_NEXT_TOKEN_KIND = WordList.new(nil). - add(%w[ def defn defn- definline defmacro defmulti defmethod defstruct defonce declare ], :function). - add(%w[ ns ], :namespace). - add(%w[ defprotocol defrecord ], :class) - - BASIC_IDENTIFIER = /[a-zA-Z$%*\/_+!?&<>\-=]=?[a-zA-Z0-9$&*+!\/_?<>\-\#]*/ - IDENTIFIER = /(?!-\d)(?:(?:#{BASIC_IDENTIFIER}\.)*#{BASIC_IDENTIFIER}(?:\/#{BASIC_IDENTIFIER})?\.?)|\.\.?/ - SYMBOL = /::?#{IDENTIFIER}/o - DIGIT = /\d/ - DIGIT10 = DIGIT - DIGIT16 = /[0-9a-f]/i - DIGIT8 = /[0-7]/ - DIGIT2 = /[01]/ - RADIX16 = /\#x/i - RADIX8 = /\#o/i - RADIX2 = /\#b/i - RADIX10 = /\#d/i - EXACTNESS = /#i|#e/i - SIGN = /[\+-]?/ - EXP_MARK = /[esfdl]/i - EXP = /#{EXP_MARK}#{SIGN}#{DIGIT}+/ - SUFFIX = /#{EXP}?/ - PREFIX10 = /#{RADIX10}?#{EXACTNESS}?|#{EXACTNESS}?#{RADIX10}?/ - PREFIX16 = /#{RADIX16}#{EXACTNESS}?|#{EXACTNESS}?#{RADIX16}/ - PREFIX8 = /#{RADIX8}#{EXACTNESS}?|#{EXACTNESS}?#{RADIX8}/ - PREFIX2 = /#{RADIX2}#{EXACTNESS}?|#{EXACTNESS}?#{RADIX2}/ - UINT10 = /#{DIGIT10}+#*/ - UINT16 = /#{DIGIT16}+#*/ - UINT8 = /#{DIGIT8}+#*/ - UINT2 = /#{DIGIT2}+#*/ - DECIMAL = /#{DIGIT10}+#+\.#*#{SUFFIX}|#{DIGIT10}+\.#{DIGIT10}*#*#{SUFFIX}|\.#{DIGIT10}+#*#{SUFFIX}|#{UINT10}#{EXP}/ - UREAL10 = /#{UINT10}\/#{UINT10}|#{DECIMAL}|#{UINT10}/ - UREAL16 = /#{UINT16}\/#{UINT16}|#{UINT16}/ - UREAL8 = /#{UINT8}\/#{UINT8}|#{UINT8}/ - UREAL2 = /#{UINT2}\/#{UINT2}|#{UINT2}/ - REAL10 = /#{SIGN}#{UREAL10}/ - REAL16 = /#{SIGN}#{UREAL16}/ - REAL8 = /#{SIGN}#{UREAL8}/ - REAL2 = /#{SIGN}#{UREAL2}/ - IMAG10 = /i|#{UREAL10}i/ - IMAG16 = /i|#{UREAL16}i/ - IMAG8 = /i|#{UREAL8}i/ - IMAG2 = /i|#{UREAL2}i/ - COMPLEX10 = /#{REAL10}@#{REAL10}|#{REAL10}\+#{IMAG10}|#{REAL10}-#{IMAG10}|\+#{IMAG10}|-#{IMAG10}|#{REAL10}/ - COMPLEX16 = /#{REAL16}@#{REAL16}|#{REAL16}\+#{IMAG16}|#{REAL16}-#{IMAG16}|\+#{IMAG16}|-#{IMAG16}|#{REAL16}/ - COMPLEX8 = /#{REAL8}@#{REAL8}|#{REAL8}\+#{IMAG8}|#{REAL8}-#{IMAG8}|\+#{IMAG8}|-#{IMAG8}|#{REAL8}/ - COMPLEX2 = /#{REAL2}@#{REAL2}|#{REAL2}\+#{IMAG2}|#{REAL2}-#{IMAG2}|\+#{IMAG2}|-#{IMAG2}|#{REAL2}/ - NUM10 = /#{PREFIX10}?#{COMPLEX10}/ - NUM16 = /#{PREFIX16}#{COMPLEX16}/ - NUM8 = /#{PREFIX8}#{COMPLEX8}/ - NUM2 = /#{PREFIX2}#{COMPLEX2}/ - NUM = /#{NUM10}|#{NUM16}|#{NUM8}|#{NUM2}/ - - protected - - def scan_tokens encoder, options - - state = :initial - kind = nil - - until eos? - - case state - when :initial - if match = scan(/ \s+ | \\\n | , /x) - encoder.text_token match, :space - elsif match = scan(/['`\(\[\)\]\{\}]|\#[({]|~@?|[@\^]/) - encoder.text_token match, :operator - elsif match = scan(/;.*/) - encoder.text_token match, :comment # TODO: recognize (comment ...) too - elsif match = scan(/\#?\\(?:newline|space|.?)/) - encoder.text_token match, :char - elsif match = scan(/\#[ft]/) - encoder.text_token match, :predefined_constant - elsif match = scan(/#{IDENTIFIER}/o) - kind = IDENT_KIND[match] - encoder.text_token match, kind - if rest? && kind == :keyword - if kind = KEYWORD_NEXT_TOKEN_KIND[match] - encoder.text_token match, :space if match = scan(/\s+/o) - encoder.text_token match, kind if match = scan(/#{IDENTIFIER}/o) - end - end - elsif match = scan(/#{SYMBOL}/o) - encoder.text_token match, :symbol - elsif match = scan(/\./) - encoder.text_token match, :operator - elsif match = scan(/ \# \^ #{IDENTIFIER} /ox) - encoder.text_token match, :type - elsif match = scan(/ (\#)? " /x) - state = self[1] ? :regexp : :string - encoder.begin_group state - encoder.text_token match, :delimiter - elsif match = scan(/#{NUM}/o) and not matched.empty? - encoder.text_token match, match[/[.e\/]/i] ? :float : :integer - else - encoder.text_token getch, :error - end - - when :string, :regexp - if match = scan(/[^"\\]+|\\.?/) - encoder.text_token match, :content - elsif match = scan(/"/) - encoder.text_token match, :delimiter - encoder.end_group state - state = :initial - else - raise_inspect "else case \" reached; %p not handled." % peek(1), - encoder, state - end - - else - raise 'else case reached' - - end - - end - - if [:string, :regexp].include? state - encoder.end_group state - end - - encoder - - end - end - end -end \ No newline at end of file diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/cpp.rb b/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/cpp.rb deleted file mode 100644 index cd4d0941..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/cpp.rb +++ /dev/null @@ -1,217 +0,0 @@ -module CodeRay -module Scanners - - # Scanner for C++. - # - # Aliases: +cplusplus+, c++ - class CPlusPlus < Scanner - - register_for :cpp - file_extension 'cpp' - title 'C++' - - #-- http://www.cppreference.com/wiki/keywords/start - KEYWORDS = [ - 'and', 'and_eq', 'asm', 'bitand', 'bitor', 'break', - 'case', 'catch', 'class', 'compl', 'const_cast', - 'continue', 'default', 'delete', 'do', 'dynamic_cast', 'else', - 'enum', 'export', 'for', 'goto', 'if', 'namespace', 'new', - 'not', 'not_eq', 'or', 'or_eq', 'reinterpret_cast', 'return', - 'sizeof', 'static_assert', 'static_cast', 'struct', 'switch', - 'template', 'throw', 'try', 'typedef', 'typeid', 'typename', 'union', - 'while', 'xor', 'xor_eq', - ] # :nodoc: - - PREDEFINED_TYPES = [ - 'bool', 'char', 'char16_t', 'char32_t', 'double', 'float', - 'int', 'long', 'short', 'signed', 'unsigned', - 'wchar_t', 'string', - ] # :nodoc: - PREDEFINED_CONSTANTS = [ - 'false', 'true', - 'EOF', 'NULL', 'nullptr' - ] # :nodoc: - PREDEFINED_VARIABLES = [ - 'this', - ] # :nodoc: - DIRECTIVES = [ - 'alignas', 'alignof', 'auto', 'const', 'constexpr', 'decltype', 'explicit', - 'extern', 'final', 'friend', 'inline', 'mutable', 'noexcept', 'operator', - 'override', 'private', 'protected', 'public', 'register', 'static', - 'thread_local', 'using', 'virtual', 'void', 'volatile', - ] # :nodoc: - - IDENT_KIND = WordList.new(:ident). - add(KEYWORDS, :keyword). - add(PREDEFINED_TYPES, :predefined_type). - add(PREDEFINED_VARIABLES, :local_variable). - add(DIRECTIVES, :directive). - add(PREDEFINED_CONSTANTS, :predefined_constant) # :nodoc: - - ESCAPE = / [rbfntv\n\\'"] | x[a-fA-F0-9]{1,2} | [0-7]{1,3} /x # :nodoc: - UNICODE_ESCAPE = / u[a-fA-F0-9]{4} | U[a-fA-F0-9]{8} /x # :nodoc: - - protected - - def scan_tokens encoder, options - - state = :initial - label_expected = true - case_expected = false - label_expected_before_preproc_line = nil - in_preproc_line = false - - until eos? - - case state - - when :initial - - if match = scan(/ \s+ | \\\n /x) - if in_preproc_line && match != "\\\n" && match.index(?\n) - in_preproc_line = false - label_expected = label_expected_before_preproc_line - end - encoder.text_token match, :space - - elsif match = scan(%r! // [^\n\\]* (?: \\. [^\n\\]* )* | /\* (?: .*? \*/ | .* ) !mx) - encoder.text_token match, :comment - - elsif match = scan(/ \# \s* if \s* 0 /x) - match << scan_until(/ ^\# (?:elif|else|endif) .*? $ | \z /xm) unless eos? - encoder.text_token match, :comment - - elsif match = scan(/ [-+*=<>?:;,!&^|()\[\]{}~%]+ | \/=? | \.(?!\d) /x) - label_expected = match =~ /[;\{\}]/ - if case_expected - label_expected = true if match == ':' - case_expected = false - end - encoder.text_token match, :operator - - elsif match = scan(/ [A-Za-z_][A-Za-z_0-9]* /x) - kind = IDENT_KIND[match] - if kind == :ident && label_expected && !in_preproc_line && scan(/:(?!:)/) - kind = :label - match << matched - else - label_expected = false - if kind == :keyword - case match - when 'class' - state = :class_name_expected - when 'case', 'default' - case_expected = true - end - end - end - encoder.text_token match, kind - - elsif match = scan(/\$/) - encoder.text_token match, :ident - - elsif match = scan(/L?"/) - encoder.begin_group :string - if match[0] == ?L - encoder.text_token match, 'L', :modifier - match = '"' - end - state = :string - encoder.text_token match, :delimiter - - elsif match = scan(/#[ \t]*(\w*)/) - encoder.text_token match, :preprocessor - in_preproc_line = true - label_expected_before_preproc_line = label_expected - state = :include_expected if self[1] == 'include' - - elsif match = scan(/ L?' (?: [^\'\n\\] | \\ #{ESCAPE} )? '? /ox) - label_expected = false - encoder.text_token match, :char - - elsif match = scan(/0[xX][0-9A-Fa-f]+/) - label_expected = false - encoder.text_token match, :hex - - elsif match = scan(/(?:0[0-7]+)(?![89.eEfF])/) - label_expected = false - encoder.text_token match, :octal - - elsif match = scan(/(?:\d+)(?![.eEfF])L?L?/) - label_expected = false - encoder.text_token match, :integer - - elsif match = scan(/\d[fF]?|\d*\.\d+(?:[eE][+-]?\d+)?[fF]?|\d+[eE][+-]?\d+[fF]?/) - label_expected = false - encoder.text_token match, :float - - else - encoder.text_token getch, :error - - end - - when :string - if match = scan(/[^\\"]+/) - encoder.text_token match, :content - elsif match = scan(/"/) - encoder.text_token match, :delimiter - encoder.end_group :string - state = :initial - label_expected = false - elsif match = scan(/ \\ (?: #{ESCAPE} | #{UNICODE_ESCAPE} ) /mox) - encoder.text_token match, :char - elsif match = scan(/ \\ | $ /x) - encoder.end_group :string - encoder.text_token match, :error unless match.empty? - state = :initial - label_expected = false - else - raise_inspect "else case \" reached; %p not handled." % peek(1), encoder - end - - when :include_expected - if match = scan(/<[^>\n]+>?|"[^"\n\\]*(?:\\.[^"\n\\]*)*"?/) - encoder.text_token match, :include - state = :initial - - elsif match = scan(/\s+/) - encoder.text_token match, :space - state = :initial if match.index ?\n - - else - state = :initial - - end - - when :class_name_expected - if match = scan(/ [A-Za-z_][A-Za-z_0-9]* /x) - encoder.text_token match, :class - state = :initial - - elsif match = scan(/\s+/) - encoder.text_token match, :space - - else - encoder.text_token getch, :error - state = :initial - - end - - else - raise_inspect 'Unknown state', encoder - - end - - end - - if state == :string - encoder.end_group :string - end - - encoder - end - - end - -end -end diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/css.rb b/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/css.rb deleted file mode 100644 index 55d52397..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/css.rb +++ /dev/null @@ -1,196 +0,0 @@ -module CodeRay -module Scanners - - class CSS < Scanner - - register_for :css - - KINDS_NOT_LOC = [ - :comment, - :class, :pseudo_class, :tag, - :id, :directive, - :key, :value, :operator, :color, :float, :string, - :error, :important, :type, - ] # :nodoc: - - module RE # :nodoc: - Hex = /[0-9a-fA-F]/ - Unicode = /\\#{Hex}{1,6}\b/ # differs from standard because it allows uppercase hex too - Escape = /#{Unicode}|\\[^\n0-9a-fA-F]/ - NMChar = /[-_a-zA-Z0-9]/ - NMStart = /[_a-zA-Z]/ - String1 = /"(?:[^\n\\"]+|\\\n|#{Escape})*"?/ # TODO: buggy regexp - String2 = /'(?:[^\n\\']+|\\\n|#{Escape})*'?/ # TODO: buggy regexp - String = /#{String1}|#{String2}/ - - HexColor = /#(?:#{Hex}{6}|#{Hex}{3})/ - - Num = /-?(?:[0-9]*\.[0-9]+|[0-9]+)n?/ - Name = /#{NMChar}+/ - Ident = /-?#{NMStart}#{NMChar}*/ - AtKeyword = /@#{Ident}/ - Percentage = /#{Num}%/ - - reldimensions = %w[em ex px] - absdimensions = %w[in cm mm pt pc] - Unit = Regexp.union(*(reldimensions + absdimensions + %w[s dpi dppx deg])) - - Dimension = /#{Num}#{Unit}/ - - Function = /(?:url|alpha|attr|counters?)\((?:[^)\n]|\\\))*\)?/ - - Id = /(?!#{HexColor}\b(?!-))##{Name}/ - Class = /\.#{Name}/ - PseudoClass = /::?#{Ident}/ - AttributeSelector = /\[[^\]]*\]?/ - end - - protected - - def setup - @state = :initial - @value_expected = false - end - - def scan_tokens encoder, options - states = Array(options[:state] || @state).dup - value_expected = @value_expected - - until eos? - - if match = scan(/\s+/) - encoder.text_token match, :space - - elsif case states.last - when :initial, :media - if match = scan(/(?>#{RE::Ident})(?!\()|\*/ox) - encoder.text_token match, :tag - next - elsif match = scan(RE::Class) - encoder.text_token match, :class - next - elsif match = scan(RE::Id) - encoder.text_token match, :id - next - elsif match = scan(RE::PseudoClass) - encoder.text_token match, :pseudo_class - next - elsif match = scan(RE::AttributeSelector) - # TODO: Improve highlighting inside of attribute selectors. - encoder.text_token match[0,1], :operator - encoder.text_token match[1..-2], :attribute_name if match.size > 2 - encoder.text_token match[-1,1], :operator if match[-1] == ?] - next - elsif match = scan(/@media/) - encoder.text_token match, :directive - states.push :media_before_name - next - end - - when :block - if match = scan(/(?>#{RE::Ident})(?!\()/ox) - if value_expected - encoder.text_token match, :value - else - encoder.text_token match, :key - end - next - end - - when :media_before_name - if match = scan(RE::Ident) - encoder.text_token match, :type - states[-1] = :media_after_name - next - end - - when :media_after_name - if match = scan(/\{/) - encoder.text_token match, :operator - states[-1] = :media - next - end - - else - #:nocov: - raise_inspect 'Unknown state', encoder - #:nocov: - - end - - elsif match = scan(/\/\*(?:.*?\*\/|\z)/m) - encoder.text_token match, :comment - - elsif match = scan(/\{/) - value_expected = false - encoder.text_token match, :operator - states.push :block - - elsif match = scan(/\}/) - value_expected = false - encoder.text_token match, :operator - if states.last == :block || states.last == :media - states.pop - end - - elsif match = scan(/#{RE::String}/o) - encoder.begin_group :string - encoder.text_token match[0, 1], :delimiter - encoder.text_token match[1..-2], :content if match.size > 2 - encoder.text_token match[-1, 1], :delimiter if match.size >= 2 - encoder.end_group :string - - elsif match = scan(/#{RE::Function}/o) - encoder.begin_group :function - start = match[/^\w+\(/] - encoder.text_token start, :delimiter - if match[-1] == ?) - encoder.text_token match[start.size..-2], :content if match.size > start.size + 1 - encoder.text_token ')', :delimiter - else - encoder.text_token match[start.size..-1], :content if match.size > start.size - end - encoder.end_group :function - - elsif match = scan(/(?: #{RE::Dimension} | #{RE::Percentage} | #{RE::Num} )/ox) - encoder.text_token match, :float - - elsif match = scan(/#{RE::HexColor}/o) - encoder.text_token match, :color - - elsif match = scan(/! *important/) - encoder.text_token match, :important - - elsif match = scan(/(?:rgb|hsl)a?\([^()\n]*\)?/) - encoder.text_token match, :color - - elsif match = scan(RE::AtKeyword) - encoder.text_token match, :directive - - elsif match = scan(/ [+>~:;,.=()\/] /x) - if match == ':' - value_expected = true - elsif match == ';' - value_expected = false - end - encoder.text_token match, :operator - - else - encoder.text_token getch, :error - - end - - end - - if options[:keep_state] - @state = states - @value_expected = value_expected - end - - encoder - end - - end - -end -end diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/debug.rb b/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/debug.rb deleted file mode 100644 index 83ede9a5..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/debug.rb +++ /dev/null @@ -1,75 +0,0 @@ -require 'set' - -module CodeRay -module Scanners - - # = Debug Scanner - # - # Interprets the output of the Encoders::Debug encoder (basically the inverse function). - class Debug < Scanner - - register_for :debug - title 'CodeRay Token Dump Import' - - protected - - def setup - super - @known_token_kinds = TokenKinds.keys.map(&:to_s).to_set - end - - def scan_tokens encoder, options - - opened_tokens = [] - - until eos? - - if match = scan(/\s+/) - encoder.text_token match, :space - - elsif match = scan(/ (\w+) \( ( [^\)\\]* ( \\. [^\)\\]* )* ) \)? /x) - if @known_token_kinds.include? self[1] - encoder.text_token self[2].gsub(/\\(.)/m, '\1'), self[1].to_sym - else - encoder.text_token matched, :unknown - end - - elsif match = scan(/ (\w+) ([<\[]) /x) - if @known_token_kinds.include? self[1] - kind = self[1].to_sym - else - kind = :unknown - end - - opened_tokens << kind - case self[2] - when '<' - encoder.begin_group kind - when '[' - encoder.begin_line kind - else - raise 'CodeRay bug: This case should not be reached.' - end - - elsif !opened_tokens.empty? && match = scan(/ > /x) - encoder.end_group opened_tokens.pop - - elsif !opened_tokens.empty? && match = scan(/ \] /x) - encoder.end_line opened_tokens.pop - - else - encoder.text_token getch, :space - - end - - end - - encoder.end_group opened_tokens.pop until opened_tokens.empty? - - encoder - end - - end - -end -end diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/delphi.rb b/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/delphi.rb deleted file mode 100644 index b328155a..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/delphi.rb +++ /dev/null @@ -1,144 +0,0 @@ -module CodeRay -module Scanners - - # Scanner for the Delphi language (Object Pascal). - # - # Alias: +pascal+ - class Delphi < Scanner - - register_for :delphi - file_extension 'pas' - - KEYWORDS = [ - 'and', 'array', 'as', 'at', 'asm', 'at', 'begin', 'case', 'class', - 'const', 'constructor', 'destructor', 'dispinterface', 'div', 'do', - 'downto', 'else', 'end', 'except', 'exports', 'file', 'finalization', - 'finally', 'for', 'function', 'goto', 'if', 'implementation', 'in', - 'inherited', 'initialization', 'inline', 'interface', 'is', 'label', - 'library', 'mod', 'nil', 'not', 'object', 'of', 'or', 'out', 'packed', - 'procedure', 'program', 'property', 'raise', 'record', 'repeat', - 'resourcestring', 'set', 'shl', 'shr', 'string', 'then', 'threadvar', - 'to', 'try', 'type', 'unit', 'until', 'uses', 'var', 'while', 'with', - 'xor', 'on', - ] # :nodoc: - - DIRECTIVES = [ - 'absolute', 'abstract', 'assembler', 'at', 'automated', 'cdecl', - 'contains', 'deprecated', 'dispid', 'dynamic', 'export', - 'external', 'far', 'forward', 'implements', 'local', - 'near', 'nodefault', 'on', 'overload', 'override', - 'package', 'pascal', 'platform', 'private', 'protected', 'public', - 'published', 'read', 'readonly', 'register', 'reintroduce', - 'requires', 'resident', 'safecall', 'stdcall', 'stored', 'varargs', - 'virtual', 'write', 'writeonly', - ] # :nodoc: - - IDENT_KIND = WordList::CaseIgnoring.new(:ident). - add(KEYWORDS, :keyword). - add(DIRECTIVES, :directive) # :nodoc: - - NAME_FOLLOWS = WordList::CaseIgnoring.new(false). - add(%w(procedure function .)) # :nodoc: - - protected - - def scan_tokens encoder, options - - state = :initial - last_token = '' - - until eos? - - if state == :initial - - if match = scan(/ \s+ /x) - encoder.text_token match, :space - next - - elsif match = scan(%r! \{ \$ [^}]* \}? | \(\* \$ (?: .*? \*\) | .* ) !mx) - encoder.text_token match, :preprocessor - next - - elsif match = scan(%r! // [^\n]* | \{ [^}]* \}? | \(\* (?: .*? \*\) | .* ) !mx) - encoder.text_token match, :comment - next - - elsif match = scan(/ <[>=]? | >=? | :=? | [-+=*\/;,@\^|\(\)\[\]] | \.\. /x) - encoder.text_token match, :operator - - elsif match = scan(/\./) - encoder.text_token match, :operator - next if last_token == 'end' - - elsif match = scan(/ [A-Za-z_][A-Za-z_0-9]* /x) - encoder.text_token match, NAME_FOLLOWS[last_token] ? :ident : IDENT_KIND[match] - - elsif match = skip(/ ' ( [^\n']|'' ) (?:'|$) /x) - encoder.begin_group :char - encoder.text_token "'", :delimiter - encoder.text_token self[1], :content - encoder.text_token "'", :delimiter - encoder.end_group :char - next - - elsif match = scan(/ ' /x) - encoder.begin_group :string - encoder.text_token match, :delimiter - state = :string - - elsif match = scan(/ \# (?: \d+ | \$[0-9A-Fa-f]+ ) /x) - encoder.text_token match, :char - - elsif match = scan(/ \$ [0-9A-Fa-f]+ /x) - encoder.text_token match, :hex - - elsif match = scan(/ (?: \d+ ) (?![eE]|\.[^.]) /x) - encoder.text_token match, :integer - - elsif match = scan(/ \d+ (?: \.\d+ (?: [eE][+-]? \d+ )? | [eE][+-]? \d+ ) /x) - encoder.text_token match, :float - - else - encoder.text_token getch, :error - next - - end - - elsif state == :string - if match = scan(/[^\n']+/) - encoder.text_token match, :content - elsif match = scan(/''/) - encoder.text_token match, :char - elsif match = scan(/'/) - encoder.text_token match, :delimiter - encoder.end_group :string - state = :initial - next - elsif match = scan(/\n/) - encoder.end_group :string - encoder.text_token match, :space - state = :initial - else - raise "else case \' reached; %p not handled." % peek(1), encoder - end - - else - raise 'else-case reached', encoder - - end - - last_token = match - - end - - if state == :string - encoder.end_group state - end - - encoder - end - - end - -end -end diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/diff.rb b/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/diff.rb deleted file mode 100644 index a2a6fccf..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/diff.rb +++ /dev/null @@ -1,221 +0,0 @@ -module CodeRay -module Scanners - - # Scanner for output of the diff command. - # - # Alias: +patch+ - class Diff < Scanner - - register_for :diff - title 'diff output' - - DEFAULT_OPTIONS = { - :highlight_code => true, - :inline_diff => true, - } - - protected - - def scan_tokens encoder, options - - line_kind = nil - state = :initial - deleted_lines_count = 0 - scanners = Hash.new do |h, lang| - h[lang] = Scanners[lang].new '', :keep_tokens => true, :keep_state => true - end - content_scanner = scanners[:plain] - content_scanner_entry_state = nil - - until eos? - - if match = scan(/\n/) - deleted_lines_count = 0 unless line_kind == :delete - if line_kind - encoder.end_line line_kind - line_kind = nil - end - encoder.text_token match, :space - next - end - - case state - - when :initial - if match = scan(/--- |\+\+\+ |=+|_+/) - encoder.begin_line line_kind = :head - encoder.text_token match, :head - if match = scan(/[^\x00\n]+?(?=$|[\t\n]| \(revision)/) - encoder.text_token match, :filename - if options[:highlight_code] && match != '/dev/null' - file_type = CodeRay::FileType.fetch(match, :text) - file_type = :text if file_type == :diff - content_scanner = scanners[file_type] - content_scanner_entry_state = nil - end - end - next unless match = scan(/.+/) - encoder.text_token match, :plain - elsif match = scan(/Index: |Property changes on: /) - encoder.begin_line line_kind = :head - encoder.text_token match, :head - next unless match = scan(/.+/) - encoder.text_token match, :plain - elsif match = scan(/Added: /) - encoder.begin_line line_kind = :head - encoder.text_token match, :head - next unless match = scan(/.+/) - encoder.text_token match, :plain - state = :added - elsif match = scan(/\\ .*/) - encoder.text_token match, :comment - elsif match = scan(/@@(?>[^@\n]+)@@/) - content_scanner.state = :initial unless match?(/\n\+/) - content_scanner_entry_state = nil - if check(/\n|$/) - encoder.begin_line line_kind = :change - else - encoder.begin_group :change - end - encoder.text_token match[0,2], :change - encoder.text_token match[2...-2], :plain - encoder.text_token match[-2,2], :change - encoder.end_group :change unless line_kind - next unless match = scan(/.+/) - if options[:highlight_code] - content_scanner.tokenize match, :tokens => encoder - else - encoder.text_token match, :plain - end - next - elsif match = scan(/\+/) - encoder.begin_line line_kind = :insert - encoder.text_token match, :insert - next unless match = scan(/.+/) - if options[:highlight_code] - content_scanner.tokenize match, :tokens => encoder - else - encoder.text_token match, :plain - end - next - elsif match = scan(/-/) - deleted_lines_count += 1 - if options[:inline_diff] && deleted_lines_count == 1 && (changed_lines_count = 1 + check(/.*(?:\n\-.*)*/).count("\n")) && changed_lines_count <= 100_000 && match?(/(?>.*(?:\n\-.*){#{changed_lines_count - 1}}(?:\n\+.*){#{changed_lines_count}})$(?!\n\+)/) - deleted_lines = Array.new(changed_lines_count) { |i| skip(/\n\-/) if i > 0; scan(/.*/) } - inserted_lines = Array.new(changed_lines_count) { |i| skip(/\n\+/) ; scan(/.*/) } - - deleted_lines_tokenized = [] - inserted_lines_tokenized = [] - for deleted_line, inserted_line in deleted_lines.zip(inserted_lines) - pre, deleted_part, inserted_part, post = diff deleted_line, inserted_line - content_scanner_entry_state = content_scanner.state - deleted_lines_tokenized << content_scanner.tokenize([pre, deleted_part, post], :tokens => Tokens.new) - content_scanner.state = content_scanner_entry_state || :initial - inserted_lines_tokenized << content_scanner.tokenize([pre, inserted_part, post], :tokens => Tokens.new) - end - - for pre, deleted_part, post in deleted_lines_tokenized - encoder.begin_line :delete - encoder.text_token '-', :delete - encoder.tokens pre - unless deleted_part.empty? - encoder.begin_group :eyecatcher - encoder.tokens deleted_part - encoder.end_group :eyecatcher - end - encoder.tokens post - encoder.end_line :delete - encoder.text_token "\n", :space - end - - for pre, inserted_part, post in inserted_lines_tokenized - encoder.begin_line :insert - encoder.text_token '+', :insert - encoder.tokens pre - unless inserted_part.empty? - encoder.begin_group :eyecatcher - encoder.tokens inserted_part - encoder.end_group :eyecatcher - end - encoder.tokens post - changed_lines_count -= 1 - if changed_lines_count > 0 - encoder.end_line :insert - encoder.text_token "\n", :space - end - end - - line_kind = :insert - - elsif match = scan(/.*/) - encoder.begin_line line_kind = :delete - encoder.text_token '-', :delete - if options[:highlight_code] - if deleted_lines_count == 1 - content_scanner_entry_state = content_scanner.state - end - content_scanner.tokenize match, :tokens => encoder unless match.empty? - if !match?(/\n-/) - if match?(/\n\+/) - content_scanner.state = content_scanner_entry_state || :initial - end - content_scanner_entry_state = nil - end - else - encoder.text_token match, :plain - end - end - next - elsif match = scan(/ .*/) - if options[:highlight_code] - content_scanner.tokenize match, :tokens => encoder - else - encoder.text_token match, :plain - end - next - elsif match = scan(/.+/) - encoder.begin_line line_kind = :comment - encoder.text_token match, :plain - else - raise_inspect 'else case rached' - end - - when :added - if match = scan(/ \+/) - encoder.begin_line line_kind = :insert - encoder.text_token match, :insert - next unless match = scan(/.+/) - encoder.text_token match, :plain - else - state = :initial - next - end - end - - end - - encoder.end_line line_kind if line_kind - - encoder - end - - private - - def diff a, b - # i will be the index of the leftmost difference from the left. - i_max = [a.size, b.size].min - i = 0 - i += 1 while i < i_max && a[i] == b[i] - # j_min will be the index of the leftmost difference from the right. - j_min = i - i_max - # j will be the index of the rightmost difference from the right which - # does not precede the leftmost one from the left. - j = -1 - j -= 1 while j >= j_min && a[j] == b[j] - return a[0...i], a[i..j], b[i..j], (j < -1) ? a[j + 1..-1] : '' - end - - end - -end -end diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/erb.rb b/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/erb.rb deleted file mode 100644 index 727a993b..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/erb.rb +++ /dev/null @@ -1,81 +0,0 @@ -module CodeRay -module Scanners - - load :html - load :ruby - - # Scanner for HTML ERB templates. - class ERB < Scanner - - register_for :erb - title 'HTML ERB Template' - - KINDS_NOT_LOC = HTML::KINDS_NOT_LOC - - ERB_RUBY_BLOCK = / - (<%(?!%)[-=\#]?) - ((?> - [^\-%]* # normal* - (?> # special - (?: %(?!>) | -(?!%>) ) - [^\-%]* # normal* - )* - )) - ((?: -?%> )?) - /x # :nodoc: - - START_OF_ERB = / - <%(?!%) - /x # :nodoc: - - protected - - def setup - @ruby_scanner = CodeRay.scanner :ruby, :tokens => @tokens, :keep_tokens => true - @html_scanner = CodeRay.scanner :html, :tokens => @tokens, :keep_tokens => true, :keep_state => true - end - - def reset_instance - super - @html_scanner.reset - end - - def scan_tokens encoder, options - - until eos? - - if (match = scan_until(/(?=#{START_OF_ERB})/o) || scan_rest) and not match.empty? - @html_scanner.tokenize match, :tokens => encoder - - elsif match = scan(/#{ERB_RUBY_BLOCK}/o) - start_tag = self[1] - code = self[2] - end_tag = self[3] - - encoder.begin_group :inline - encoder.text_token start_tag, :inline_delimiter - - if start_tag == '<%#' - encoder.text_token code, :comment - else - @ruby_scanner.tokenize code, :tokens => encoder - end unless code.empty? - - encoder.text_token end_tag, :inline_delimiter unless end_tag.empty? - encoder.end_group :inline - - else - raise_inspect 'else-case reached!', encoder - - end - - end - - encoder - - end - - end - -end -end diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/go.rb b/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/go.rb deleted file mode 100644 index 99fdd638..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/go.rb +++ /dev/null @@ -1,208 +0,0 @@ -module CodeRay -module Scanners - - class Go < Scanner - - register_for :go - file_extension 'go' - - # http://golang.org/ref/spec#Keywords - KEYWORDS = [ - 'break', 'default', 'func', 'interface', 'select', - 'case', 'defer', 'go', 'map', 'struct', - 'chan', 'else', 'goto', 'package', 'switch', - 'const', 'fallthrough', 'if', 'range', 'type', - 'continue', 'for', 'import', 'return', 'var', - ] # :nodoc: - - # http://golang.org/ref/spec#Types - PREDEFINED_TYPES = [ - 'bool', - 'uint8', 'uint16', 'uint32', 'uint64', - 'int8', 'int16', 'int32', 'int64', - 'float32', 'float64', - 'complex64', 'complex128', - 'byte', 'rune', 'string', 'error', - 'uint', 'int', 'uintptr', - ] # :nodoc: - - PREDEFINED_CONSTANTS = [ - 'nil', 'iota', - 'true', 'false', - ] # :nodoc: - - PREDEFINED_FUNCTIONS = %w[ - append cap close complex copy delete imag len - make new panic print println real recover - ] # :nodoc: - - IDENT_KIND = WordList.new(:ident). - add(KEYWORDS, :keyword). - add(PREDEFINED_TYPES, :predefined_type). - add(PREDEFINED_CONSTANTS, :predefined_constant). - add(PREDEFINED_FUNCTIONS, :predefined) # :nodoc: - - ESCAPE = / [rbfntv\n\\'"] | x[a-fA-F0-9]{1,2} | [0-7]{1,3} /x # :nodoc: - UNICODE_ESCAPE = / u[a-fA-F0-9]{4} | U[a-fA-F0-9]{8} /x # :nodoc: - - protected - - def scan_tokens encoder, options - - state = :initial - label_expected = true - case_expected = false - label_expected_before_preproc_line = nil - in_preproc_line = false - - until eos? - - case state - - when :initial - - if match = scan(/ \s+ | \\\n /x) - if in_preproc_line && match != "\\\n" && match.index(?\n) - in_preproc_line = false - case_expected = false - label_expected = label_expected_before_preproc_line - end - encoder.text_token match, :space - - elsif match = scan(%r! // [^\n\\]* (?: \\. [^\n\\]* )* | /\* (?: .*? \*/ | .* ) !mx) - encoder.text_token match, :comment - - elsif match = scan(/ ?:;,!&^|()\[\]{}~%]+ | \/=? | \.(?!\d) /x) - if case_expected - label_expected = true if match == ':' - case_expected = false - end - encoder.text_token match, :operator - - elsif match = scan(/ [A-Za-z_][A-Za-z_0-9]* /x) - kind = IDENT_KIND[match] - if kind == :ident && label_expected && !in_preproc_line && scan(/:(?!:)/) - kind = :label - label_expected = false - match << matched - else - label_expected = false - if kind == :keyword - case match - when 'case', 'default' - case_expected = true - end - end - end - encoder.text_token match, kind - - elsif match = scan(/L?"/) - encoder.begin_group :string - if match[0] == ?L - encoder.text_token 'L', :modifier - match = '"' - end - encoder.text_token match, :delimiter - state = :string - - elsif match = scan(/ ` ([^`]+)? (`)? /x) - encoder.begin_group :shell - encoder.text_token '`', :delimiter - encoder.text_token self[1], :content if self[1] - encoder.text_token self[2], :delimiter if self[2] - encoder.end_group :shell - - elsif match = scan(/ \# \s* if \s* 0 /x) - match << scan_until(/ ^\# (?:elif|else|endif) .*? $ | \z /xm) unless eos? - encoder.text_token match, :comment - - elsif match = scan(/#[ \t]*(\w*)/) - encoder.text_token match, :preprocessor - in_preproc_line = true - label_expected_before_preproc_line = label_expected - state = :include_expected if self[1] == 'include' - - elsif match = scan(/ L?' (?: [^\'\n\\] | \\ (?: #{ESCAPE} | #{UNICODE_ESCAPE} ) )? '? /ox) - label_expected = false - encoder.text_token match, :char - - elsif match = scan(/\$/) - encoder.text_token match, :ident - - elsif match = scan(/-?\d*(\.\d*)?([eE][+-]?\d+)?i/) - label_expected = false - encoder.text_token match, :imaginary - - elsif match = scan(/-?0[xX][0-9A-Fa-f]+/) - label_expected = false - encoder.text_token match, :hex - - elsif match = scan(/-?(?:0[0-7]+)(?![89.eEfF])/) - label_expected = false - encoder.text_token match, :octal - - elsif match = scan(/-?(?:\d*\.\d+|\d+\.)(?:[eE][+-]?\d+)?|\d+[eE][+-]?\d+/) - label_expected = false - encoder.text_token match, :float - - elsif match = scan(/-?(?:\d+)(?![.eEfF])L?L?/) - label_expected = false - encoder.text_token match, :integer - - else - encoder.text_token getch, :error - - end - - when :string - if match = scan(/[^\\\n"]+/) - encoder.text_token match, :content - elsif match = scan(/"/) - encoder.text_token match, :delimiter - encoder.end_group :string - state = :initial - label_expected = false - elsif match = scan(/ \\ (?: #{ESCAPE} | #{UNICODE_ESCAPE} ) /mox) - encoder.text_token match, :char - elsif match = scan(/ \\ /x) - encoder.text_token match, :error - elsif match = scan(/$/) - encoder.end_group :string - state = :initial - label_expected = false - else - raise_inspect "else case \" reached; %p not handled." % peek(1), encoder - end - - when :include_expected - if match = scan(/<[^>\n]+>?|"[^"\n\\]*(?:\\.[^"\n\\]*)*"?/) - encoder.text_token match, :include - state = :initial - - elsif match = scan(/\s+/) - encoder.text_token match, :space - state = :initial if match.index ?\n - - else - state = :initial - - end - - else - raise_inspect 'Unknown state', encoder - - end - - end - - if state == :string - encoder.end_group :string - end - - encoder - end - - end - -end -end diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/groovy.rb b/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/groovy.rb deleted file mode 100644 index c52ce8d3..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/groovy.rb +++ /dev/null @@ -1,268 +0,0 @@ -module CodeRay -module Scanners - - load :java - - # Scanner for Groovy. - class Groovy < Java - - register_for :groovy - - # TODO: check list of keywords - GROOVY_KEYWORDS = %w[ - as assert def in - ] # :nodoc: - KEYWORDS_EXPECTING_VALUE = WordList.new.add %w[ - case instanceof new return throw typeof while as assert in - ] # :nodoc: - GROOVY_MAGIC_VARIABLES = %w[ it ] # :nodoc: - - IDENT_KIND = Java::IDENT_KIND.dup. - add(GROOVY_KEYWORDS, :keyword). - add(GROOVY_MAGIC_VARIABLES, :local_variable) # :nodoc: - - ESCAPE = / [bfnrtv$\n\\'"] | x[a-fA-F0-9]{1,2} | [0-7]{1,3} /x # :nodoc: - UNICODE_ESCAPE = / u[a-fA-F0-9]{4} /x # :nodoc: no 4-byte unicode chars? U[a-fA-F0-9]{8} - REGEXP_ESCAPE = / [bfnrtv\n\\'"] | x[a-fA-F0-9]{1,2} | [0-7]{1,3} | \d | [bBdDsSwW\/] /x # :nodoc: - - # TODO: interpretation inside ', ", / - STRING_CONTENT_PATTERN = { - "'" => /(?>\\[^\\'\n]+|[^\\'\n]+)+/, - '"' => /[^\\$"\n]+/, - "'''" => /(?>[^\\']+|'(?!''))+/, - '"""' => /(?>[^\\$"]+|"(?!""))+/, - '/' => /[^\\$\/\n]+/, - } # :nodoc: - - protected - - def setup - @state = :initial - end - - def scan_tokens encoder, options - state = options[:state] || @state - inline_block_stack = [] - inline_block_paren_depth = nil - string_delimiter = nil - import_clause = class_name_follows = last_token = after_def = false - value_expected = true - - until eos? - - case state - - when :initial - - if match = scan(/ \s+ | \\\n /x) - encoder.text_token match, :space - if match.index ?\n - import_clause = after_def = false - value_expected = true unless value_expected - end - next - - elsif match = scan(%r! // [^\n\\]* (?: \\. [^\n\\]* )* | /\* (?: .*? \*/ | .* ) !mx) - value_expected = true - after_def = false - encoder.text_token match, :comment - - elsif bol? && match = scan(/ \#!.* /x) - encoder.text_token match, :doctype - - elsif import_clause && match = scan(/ (?!as) #{IDENT} (?: \. #{IDENT} )* (?: \.\* )? /ox) - after_def = value_expected = false - encoder.text_token match, :include - - elsif match = scan(/ #{IDENT} | \[\] /ox) - kind = IDENT_KIND[match] - value_expected = (kind == :keyword) && KEYWORDS_EXPECTING_VALUE[match] - if last_token == '.' - kind = :ident - elsif class_name_follows - kind = :class - class_name_follows = false - elsif after_def && check(/\s*[({]/) - kind = :method - after_def = false - elsif kind == :ident && last_token != '?' && check(/:/) - kind = :key - else - class_name_follows = true if match == 'class' || (import_clause && match == 'as') - import_clause = match == 'import' - after_def = true if match == 'def' - end - encoder.text_token match, kind - - elsif match = scan(/;/) - import_clause = after_def = false - value_expected = true - encoder.text_token match, :operator - - elsif match = scan(/\{/) - class_name_follows = after_def = false - value_expected = true - encoder.text_token match, :operator - if !inline_block_stack.empty? - inline_block_paren_depth += 1 - end - - # TODO: ~'...', ~"..." and ~/.../ style regexps - elsif match = scan(/ \.\.] | \+\+ | - && | \|\| | \*\*=? | ==?~ | <=?>? | [-+*%^~&|>=!]=? | <<>>?=? /x) - value_expected = true - value_expected = :regexp if match == '~' - after_def = false - encoder.text_token match, :operator - - elsif match = scan(/ [)\]}] /x) - value_expected = after_def = false - if !inline_block_stack.empty? && match == '}' - inline_block_paren_depth -= 1 - if inline_block_paren_depth == 0 # closing brace of inline block reached - encoder.text_token match, :inline_delimiter - encoder.end_group :inline - state, string_delimiter, inline_block_paren_depth = inline_block_stack.pop - next - end - end - encoder.text_token match, :operator - - elsif check(/[\d.]/) - after_def = value_expected = false - if match = scan(/0[xX][0-9A-Fa-f]+/) - encoder.text_token match, :hex - elsif match = scan(/(?>0[0-7]+)(?![89.eEfF])/) - encoder.text_token match, :octal - elsif match = scan(/\d+[fFdD]|\d*\.\d+(?:[eE][+-]?\d+)?[fFdD]?|\d+[eE][+-]?\d+[fFdD]?/) - encoder.text_token match, :float - elsif match = scan(/\d+[lLgG]?/) - encoder.text_token match, :integer - end - - elsif match = scan(/'''|"""/) - after_def = value_expected = false - state = :multiline_string - encoder.begin_group :string - string_delimiter = match - encoder.text_token match, :delimiter - - # TODO: record.'name' syntax - elsif match = scan(/["']/) - after_def = value_expected = false - state = match == '/' ? :regexp : :string - encoder.begin_group state - string_delimiter = match - encoder.text_token match, :delimiter - - elsif value_expected && match = scan(/\//) - after_def = value_expected = false - encoder.begin_group :regexp - state = :regexp - string_delimiter = '/' - encoder.text_token match, :delimiter - - elsif match = scan(/ @ #{IDENT} /ox) - after_def = value_expected = false - encoder.text_token match, :annotation - - elsif match = scan(/\//) - after_def = false - value_expected = true - encoder.text_token match, :operator - - else - encoder.text_token getch, :error - - end - - when :string, :regexp, :multiline_string - if match = scan(STRING_CONTENT_PATTERN[string_delimiter]) - encoder.text_token match, :content - - elsif match = scan(state == :multiline_string ? /'''|"""/ : /["'\/]/) - encoder.text_token match, :delimiter - if state == :regexp - # TODO: regexp modifiers? s, m, x, i? - modifiers = scan(/[ix]+/) - encoder.text_token modifiers, :modifier if modifiers && !modifiers.empty? - end - state = :string if state == :multiline_string - encoder.end_group state - string_delimiter = nil - after_def = value_expected = false - state = :initial - next - - elsif (state == :string || state == :multiline_string) && - (match = scan(/ \\ (?: #{ESCAPE} | #{UNICODE_ESCAPE} ) /mox)) - if string_delimiter[0] == ?' && !(match == "\\\\" || match == "\\'") - encoder.text_token match, :content - else - encoder.text_token match, :char - end - elsif state == :regexp && match = scan(/ \\ (?: #{REGEXP_ESCAPE} | #{UNICODE_ESCAPE} ) /mox) - encoder.text_token match, :char - - elsif match = scan(/ \$ #{IDENT} /mox) - encoder.begin_group :inline - encoder.text_token '$', :inline_delimiter - match = match[1..-1] - encoder.text_token match, IDENT_KIND[match] - encoder.end_group :inline - next - elsif match = scan(/ \$ \{ /x) - encoder.begin_group :inline - encoder.text_token match, :inline_delimiter - inline_block_stack << [state, string_delimiter, inline_block_paren_depth] - inline_block_paren_depth = 1 - state = :initial - next - - elsif match = scan(/ \$ /mx) - encoder.text_token match, :content - - elsif match = scan(/ \\. /mx) - encoder.text_token match, :content # TODO: Shouldn't this be :error? - - elsif match = scan(/ \\ | \n /x) - encoder.end_group state == :regexp ? :regexp : :string - encoder.text_token match, :error - after_def = value_expected = false - state = :initial - - else - raise_inspect "else case \" reached; %p not handled." % peek(1), encoder - - end - - else - raise_inspect 'Unknown state', encoder - - end - - last_token = match unless [:space, :comment, :doctype].include? kind - - end - - if [:multiline_string, :string, :regexp].include? state - encoder.end_group state == :regexp ? :regexp : :string - end - - if options[:keep_state] - @state = state - end - - until inline_block_stack.empty? - state, = *inline_block_stack.pop - encoder.end_group :inline - encoder.end_group state == :regexp ? :regexp : :string - end - - encoder - end - - end - -end -end diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/haml.rb b/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/haml.rb deleted file mode 100644 index d516ba9e..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/haml.rb +++ /dev/null @@ -1,168 +0,0 @@ -module CodeRay -module Scanners - - load :ruby - load :html - load :java_script - - class HAML < Scanner - - register_for :haml - title 'HAML Template' - - KINDS_NOT_LOC = HTML::KINDS_NOT_LOC - - protected - - def setup - super - @ruby_scanner = CodeRay.scanner :ruby, :tokens => @tokens, :keep_tokens => true - @embedded_ruby_scanner = CodeRay.scanner :ruby, :tokens => @tokens, :keep_tokens => true, :state => @ruby_scanner.interpreted_string_state - @html_scanner = CodeRay.scanner :html, :tokens => @tokens, :keep_tokens => true - end - - def scan_tokens encoder, options - - match = nil - code = '' - - until eos? - - if bol? - if match = scan(/!!!.*/) - encoder.text_token match, :doctype - next - end - - if match = scan(/(?>( *)(\/(?!\[if)|-\#|:javascript|:ruby|:\w+) *)(?=\n)/) - encoder.text_token match, :comment - - code = self[2] - if match = scan(/(?:\n+#{self[1]} .*)+/) - case code - when '/', '-#' - encoder.text_token match, :comment - when ':javascript' - # TODO: recognize #{...} snippets inside JavaScript - @java_script_scanner ||= CodeRay.scanner :java_script, :tokens => @tokens, :keep_tokens => true - @java_script_scanner.tokenize match, :tokens => encoder - when ':ruby' - @ruby_scanner.tokenize match, :tokens => encoder - when /:\w+/ - encoder.text_token match, :comment - else - raise 'else-case reached: %p' % [code] - end - end - end - - if match = scan(/ +/) - encoder.text_token match, :space - end - - if match = scan(/\/.*/) - encoder.text_token match, :comment - next - end - - if match = scan(/\\/) - encoder.text_token match, :plain - if match = scan(/.+/) - @html_scanner.tokenize match, :tokens => encoder - end - next - end - - tag = false - - if match = scan(/%[-\w:]+\/?/) - encoder.text_token match, :tag - # if match = scan(/( +)(.+)/) - # encoder.text_token self[1], :space - # @embedded_ruby_scanner.tokenize self[2], :tokens => encoder - # end - tag = true - end - - while match = scan(/([.#])[-\w]*\w/) - encoder.text_token match, self[1] == '#' ? :constant : :class - tag = true - end - - if tag && match = scan(/(\()([^)]+)?(\))?/) - # TODO: recognize title=@title, class="widget_#{@widget.number}" - encoder.text_token self[1], :plain - @html_scanner.tokenize self[2], :tokens => encoder, :state => :attribute if self[2] - encoder.text_token self[3], :plain if self[3] - end - - if tag && match = scan(/\{/) - encoder.text_token match, :plain - - code = '' - level = 1 - while true - code << scan(/([^\{\},\n]|, *\n?)*/) - case match = getch - when '{' - level += 1 - code << match - when '}' - level -= 1 - if level > 0 - code << match - else - break - end - when "\n", ",", nil - break - end - end - @ruby_scanner.tokenize code, :tokens => encoder unless code.empty? - - encoder.text_token match, :plain if match - end - - if tag && match = scan(/(\[)([^\]\n]+)?(\])?/) - encoder.text_token self[1], :plain - @ruby_scanner.tokenize self[2], :tokens => encoder if self[2] - encoder.text_token self[3], :plain if self[3] - end - - if tag && match = scan(/\//) - encoder.text_token match, :tag - end - - if scan(/(>? encoder - else - @ruby_scanner.tokenize self[4], :tokens => encoder - end - end - elsif match = scan(/((?:<|> encoder if self[2] - end - - elsif match = scan(/.+/) - @html_scanner.tokenize match, :tokens => encoder - - end - - if match = scan(/\n/) - encoder.text_token match, :space - end - end - - encoder - - end - - end - -end -end diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/html.rb b/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/html.rb deleted file mode 100644 index ebe7b01d..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/html.rb +++ /dev/null @@ -1,275 +0,0 @@ -module CodeRay -module Scanners - - # HTML Scanner - # - # Alias: +xhtml+ - # - # See also: Scanners::XML - class HTML < Scanner - - register_for :html - - KINDS_NOT_LOC = [ - :comment, :doctype, :preprocessor, - :tag, :attribute_name, :operator, - :attribute_value, :string, - :plain, :entity, :error, - ] # :nodoc: - - EVENT_ATTRIBUTES = %w( - onabort onafterprint onbeforeprint onbeforeunload onblur oncanplay - oncanplaythrough onchange onclick oncontextmenu oncuechange ondblclick - ondrag ondragdrop ondragend ondragenter ondragleave ondragover - ondragstart ondrop ondurationchange onemptied onended onerror onfocus - onformchange onforminput onhashchange oninput oninvalid onkeydown - onkeypress onkeyup onload onloadeddata onloadedmetadata onloadstart - onmessage onmousedown onmousemove onmouseout onmouseover onmouseup - onmousewheel onmove onoffline ononline onpagehide onpageshow onpause - onplay onplaying onpopstate onprogress onratechange onreadystatechange - onredo onreset onresize onscroll onseeked onseeking onselect onshow - onstalled onstorage onsubmit onsuspend ontimeupdate onundo onunload - onvolumechange onwaiting - ) - - IN_ATTRIBUTE = WordList::CaseIgnoring.new(nil). - add(EVENT_ATTRIBUTES, :script). - add(['style'], :style) - - ATTR_NAME = /[\w.:-]+/ # :nodoc: - TAG_END = /\/?>/ # :nodoc: - HEX = /[0-9a-fA-F]/ # :nodoc: - ENTITY = / - & - (?: - \w+ - | - \# - (?: - \d+ - | - x#{HEX}+ - ) - ) - ; - /ox # :nodoc: - - PLAIN_STRING_CONTENT = { - "'" => /[^&'>\n]+/, - '"' => /[^&">\n]+/, - } # :nodoc: - - def reset - super - @state = :initial - @plain_string_content = nil - end - - protected - - def setup - @state = :initial - @plain_string_content = nil - @in_tag = nil - end - - def scan_java_script encoder, code - if code && !code.empty? - @java_script_scanner ||= Scanners::JavaScript.new '', :keep_tokens => true - @java_script_scanner.tokenize code, :tokens => encoder - end - end - - def scan_css encoder, code, state = [:initial] - if code && !code.empty? - @css_scanner ||= Scanners::CSS.new '', :keep_tokens => true - @css_scanner.tokenize code, :tokens => encoder, :state => state - end - end - - def scan_tokens encoder, options - state = options[:state] || @state - plain_string_content = @plain_string_content - in_tag = @in_tag - in_attribute = nil - - encoder.begin_group :string if state == :attribute_value_string - - until eos? - - if state != :in_special_tag && match = scan(/\s+/m) - encoder.text_token match, :space - - else - - case state - - when :initial - if match = scan(//m) - encoder.text_token match[0..-4], :plain - encoder.text_token ']]>', :inline_delimiter - elsif match = scan(/.+/) - encoder.text_token match, :error - end - elsif match = scan(/|.*)/m) - encoder.text_token match, :comment - elsif match = scan(/|.*)|\]>/m) - encoder.text_token match, :doctype - elsif match = scan(/<\?xml(?:.*?\?>|.*)/m) - encoder.text_token match, :preprocessor - elsif match = scan(/<\?(?:.*?\?>|.*)/m) - encoder.text_token match, :comment - elsif match = scan(/<\/[-\w.:]*>?/m) - in_tag = nil - encoder.text_token match, :tag - elsif match = scan(/<(?:(script|style)|[-\w.:]+)(>)?/m) - encoder.text_token match, :tag - in_tag = self[1] - if self[2] - state = :in_special_tag if in_tag - else - state = :attribute - end - elsif match = scan(/[^<>&]+/) - encoder.text_token match, :plain - elsif match = scan(/#{ENTITY}/ox) - encoder.text_token match, :entity - elsif match = scan(/[<>&]/) - in_tag = nil - encoder.text_token match, :error - else - raise_inspect '[BUG] else-case reached with state %p' % [state], encoder - end - - when :attribute - if match = scan(/#{TAG_END}/o) - encoder.text_token match, :tag - in_attribute = nil - if in_tag - state = :in_special_tag - else - state = :initial - end - elsif match = scan(/#{ATTR_NAME}/o) - in_attribute = IN_ATTRIBUTE[match] - encoder.text_token match, :attribute_name - state = :attribute_equal - else - in_tag = nil - encoder.text_token getch, :error - end - - when :attribute_equal - if match = scan(/=/) #/ - encoder.text_token match, :operator - state = :attribute_value - else - state = :attribute - next - end - - when :attribute_value - if match = scan(/#{ATTR_NAME}/o) - encoder.text_token match, :attribute_value - state = :attribute - elsif match = scan(/["']/) - if in_attribute == :script || in_attribute == :style - encoder.begin_group :string - encoder.text_token match, :delimiter - if scan(/javascript:[ \t]*/) - encoder.text_token matched, :comment - end - code = scan_until(match == '"' ? /(?="|\z)/ : /(?='|\z)/) - if in_attribute == :script - scan_java_script encoder, code - else - scan_css encoder, code, [:block] - end - match = scan(/["']/) - encoder.text_token match, :delimiter if match - encoder.end_group :string - state = :attribute - in_attribute = nil - else - encoder.begin_group :string - state = :attribute_value_string - plain_string_content = PLAIN_STRING_CONTENT[match] - encoder.text_token match, :delimiter - end - elsif match = scan(/#{TAG_END}/o) - encoder.text_token match, :tag - state = :initial - else - encoder.text_token getch, :error - end - - when :attribute_value_string - if match = scan(plain_string_content) - encoder.text_token match, :content - elsif match = scan(/['"]/) - encoder.text_token match, :delimiter - encoder.end_group :string - state = :attribute - elsif match = scan(/#{ENTITY}/ox) - encoder.text_token match, :entity - elsif match = scan(/&/) - encoder.text_token match, :content - elsif match = scan(/[\n>]/) - encoder.end_group :string - state = :initial - encoder.text_token match, :error - end - - when :in_special_tag - case in_tag - when 'script', 'style' - encoder.text_token match, :space if match = scan(/[ \t]*\n/) - if scan(/(\s*)|(.*))/m) - code = self[2] || self[4] - closing = self[3] - encoder.text_token self[1], :comment - else - code = scan_until(/(?=(?:\n\s*)?<\/#{in_tag}>)|\z/) - closing = false - end - unless code.empty? - encoder.begin_group :inline - if in_tag == 'script' - scan_java_script encoder, code - else - scan_css encoder, code - end - encoder.end_group :inline - end - encoder.text_token closing, :comment if closing - state = :initial - else - raise 'unknown special tag: %p' % [in_tag] - end - - else - raise_inspect 'Unknown state: %p' % [state], encoder - - end - - end - - end - - if options[:keep_state] - @state = state - @plain_string_content = plain_string_content - @in_tag = in_tag - end - - encoder.end_group :string if state == :attribute_value_string - - encoder - end - - end - -end -end diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/java.rb b/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/java.rb deleted file mode 100644 index 7dd1919e..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/java.rb +++ /dev/null @@ -1,174 +0,0 @@ -module CodeRay -module Scanners - - # Scanner for Java. - class Java < Scanner - - register_for :java - - autoload :BuiltinTypes, CodeRay.coderay_path('scanners', 'java', 'builtin_types') - - # http://java.sun.com/docs/books/tutorial/java/nutsandbolts/_keywords.html - KEYWORDS = %w[ - assert break case catch continue default do else - finally for if instanceof import new package - return switch throw try typeof while - debugger export - ] # :nodoc: - RESERVED = %w[ const goto ] # :nodoc: - CONSTANTS = %w[ false null true ] # :nodoc: - MAGIC_VARIABLES = %w[ this super ] # :nodoc: - TYPES = %w[ - boolean byte char class double enum float int interface long - short void var - ] << '[]' # :nodoc: because int[] should be highlighted as a type - DIRECTIVES = %w[ - abstract extends final implements native private protected public - static strictfp synchronized throws transient volatile - ] # :nodoc: - - IDENT_KIND = WordList.new(:ident). - add(KEYWORDS, :keyword). - add(RESERVED, :reserved). - add(CONSTANTS, :predefined_constant). - add(MAGIC_VARIABLES, :local_variable). - add(TYPES, :type). - add(BuiltinTypes::List, :predefined_type). - add(BuiltinTypes::List.select { |builtin| builtin[/(Error|Exception)$/] }, :exception). - add(DIRECTIVES, :directive) # :nodoc: - - ESCAPE = / [bfnrtv\n\\'"] | x[a-fA-F0-9]{1,2} | [0-7]{1,3} /x # :nodoc: - UNICODE_ESCAPE = / u[a-fA-F0-9]{4} | U[a-fA-F0-9]{8} /x # :nodoc: - STRING_CONTENT_PATTERN = { - "'" => /[^\\']+/, - '"' => /[^\\"]+/, - '/' => /[^\\\/]+/, - } # :nodoc: - IDENT = RUBY_VERSION < '1.9' ? /[a-zA-Z_][A-Za-z_0-9]*/ : Regexp.new('[[[:alpha:]]_][[[:alnum:]]_]*') # :nodoc: - - protected - - def scan_tokens encoder, options - - state = :initial - string_delimiter = nil - package_name_expected = false - class_name_follows = false - last_token_dot = false - - until eos? - - case state - - when :initial - - if match = scan(/ \s+ | \\\n /x) - encoder.text_token match, :space - next - - elsif match = scan(%r! // [^\n\\]* (?: \\. [^\n\\]* )* | /\* (?: .*? \*/ | .* ) !mx) - encoder.text_token match, :comment - next - - elsif package_name_expected && match = scan(/ #{IDENT} (?: \. #{IDENT} )* /ox) - encoder.text_token match, package_name_expected - - elsif match = scan(/ #{IDENT} | \[\] /ox) - kind = IDENT_KIND[match] - if last_token_dot - kind = :ident - elsif class_name_follows - kind = :class - class_name_follows = false - else - case match - when 'import' - package_name_expected = :include - when 'package' - package_name_expected = :namespace - when 'class', 'interface' - class_name_follows = true - end - end - encoder.text_token match, kind - - elsif match = scan(/ \.(?!\d) | [,?:()\[\]}] | -- | \+\+ | && | \|\| | \*\*=? | [-+*\/%^~&|<>=!]=? | <<>>?=? /x) - encoder.text_token match, :operator - - elsif match = scan(/;/) - package_name_expected = false - encoder.text_token match, :operator - - elsif match = scan(/\{/) - class_name_follows = false - encoder.text_token match, :operator - - elsif check(/[\d.]/) - if match = scan(/0[xX][0-9A-Fa-f]+/) - encoder.text_token match, :hex - elsif match = scan(/(?>0[0-7]+)(?![89.eEfF])/) - encoder.text_token match, :octal - elsif match = scan(/\d+[fFdD]|\d*\.\d+(?:[eE][+-]?\d+)?[fFdD]?|\d+[eE][+-]?\d+[fFdD]?/) - encoder.text_token match, :float - elsif match = scan(/\d+[lL]?/) - encoder.text_token match, :integer - end - - elsif match = scan(/["']/) - state = :string - encoder.begin_group state - string_delimiter = match - encoder.text_token match, :delimiter - - elsif match = scan(/ @ #{IDENT} /ox) - encoder.text_token match, :annotation - - else - encoder.text_token getch, :error - - end - - when :string - if match = scan(STRING_CONTENT_PATTERN[string_delimiter]) - encoder.text_token match, :content - elsif match = scan(/["'\/]/) - encoder.text_token match, :delimiter - encoder.end_group state - state = :initial - string_delimiter = nil - elsif state == :string && (match = scan(/ \\ (?: #{ESCAPE} | #{UNICODE_ESCAPE} ) /mox)) - if string_delimiter == "'" && !(match == "\\\\" || match == "\\'") - encoder.text_token match, :content - else - encoder.text_token match, :char - end - elsif match = scan(/\\./m) - encoder.text_token match, :content - elsif match = scan(/ \\ | $ /x) - encoder.end_group state - state = :initial - encoder.text_token match, :error unless match.empty? - else - raise_inspect "else case \" reached; %p not handled." % peek(1), encoder - end - - else - raise_inspect 'Unknown state', encoder - - end - - last_token_dot = match == '.' - - end - - if state == :string - encoder.end_group state - end - - encoder - end - - end - -end -end diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/java/builtin_types.rb b/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/java/builtin_types.rb deleted file mode 100644 index d1b8b73b..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/java/builtin_types.rb +++ /dev/null @@ -1,421 +0,0 @@ -module CodeRay -module Scanners - - module Java::BuiltinTypes # :nodoc: - - #:nocov: - List = %w[ - AbstractAction AbstractBorder AbstractButton AbstractCellEditor AbstractCollection - AbstractColorChooserPanel AbstractDocument AbstractExecutorService AbstractInterruptibleChannel - AbstractLayoutCache AbstractList AbstractListModel AbstractMap AbstractMethodError AbstractPreferences - AbstractQueue AbstractQueuedSynchronizer AbstractSelectableChannel AbstractSelectionKey AbstractSelector - AbstractSequentialList AbstractSet AbstractSpinnerModel AbstractTableModel AbstractUndoableEdit - AbstractWriter AccessControlContext AccessControlException AccessController AccessException Accessible - AccessibleAction AccessibleAttributeSequence AccessibleBundle AccessibleComponent AccessibleContext - AccessibleEditableText AccessibleExtendedComponent AccessibleExtendedTable AccessibleExtendedText - AccessibleHyperlink AccessibleHypertext AccessibleIcon AccessibleKeyBinding AccessibleObject - AccessibleRelation AccessibleRelationSet AccessibleResourceBundle AccessibleRole AccessibleSelection - AccessibleState AccessibleStateSet AccessibleStreamable AccessibleTable AccessibleTableModelChange - AccessibleText AccessibleTextSequence AccessibleValue AccountException AccountExpiredException - AccountLockedException AccountNotFoundException Acl AclEntry AclNotFoundException Action ActionEvent - ActionListener ActionMap ActionMapUIResource Activatable ActivateFailedException ActivationDesc - ActivationException ActivationGroup ActivationGroupDesc ActivationGroupID ActivationGroup_Stub - ActivationID ActivationInstantiator ActivationMonitor ActivationSystem Activator ActiveEvent - ActivityCompletedException ActivityRequiredException Adjustable AdjustmentEvent AdjustmentListener - Adler32 AffineTransform AffineTransformOp AlgorithmParameterGenerator AlgorithmParameterGeneratorSpi - AlgorithmParameters AlgorithmParameterSpec AlgorithmParametersSpi AllPermission AlphaComposite - AlreadyBoundException AlreadyConnectedException AncestorEvent AncestorListener AnnotatedElement - Annotation AnnotationFormatError AnnotationTypeMismatchException AppConfigurationEntry Appendable Applet - AppletContext AppletInitializer AppletStub Arc2D Area AreaAveragingScaleFilter ArithmeticException Array - ArrayBlockingQueue ArrayIndexOutOfBoundsException ArrayList Arrays ArrayStoreException ArrayType - AssertionError AsyncBoxView AsynchronousCloseException AtomicBoolean AtomicInteger AtomicIntegerArray - AtomicIntegerFieldUpdater AtomicLong AtomicLongArray AtomicLongFieldUpdater AtomicMarkableReference - AtomicReference AtomicReferenceArray AtomicReferenceFieldUpdater AtomicStampedReference Attribute - AttributeChangeNotification AttributeChangeNotificationFilter AttributedCharacterIterator - AttributedString AttributeException AttributeInUseException AttributeList AttributeModificationException - AttributeNotFoundException Attributes AttributeSet AttributeSetUtilities AttributeValueExp AudioClip - AudioFileFormat AudioFileReader AudioFileWriter AudioFormat AudioInputStream AudioPermission AudioSystem - AuthenticationException AuthenticationNotSupportedException Authenticator AuthorizeCallback - AuthPermission AuthProvider Autoscroll AWTError AWTEvent AWTEventListener AWTEventListenerProxy - AWTEventMulticaster AWTException AWTKeyStroke AWTPermission BackingStoreException - BadAttributeValueExpException BadBinaryOpValueExpException BadLocationException BadPaddingException - BadStringOperationException BandCombineOp BandedSampleModel BaseRowSet BasicArrowButton BasicAttribute - BasicAttributes BasicBorders BasicButtonListener BasicButtonUI BasicCheckBoxMenuItemUI BasicCheckBoxUI - BasicColorChooserUI BasicComboBoxEditor BasicComboBoxRenderer BasicComboBoxUI BasicComboPopup - BasicControl BasicDesktopIconUI BasicDesktopPaneUI BasicDirectoryModel BasicEditorPaneUI - BasicFileChooserUI BasicFormattedTextFieldUI BasicGraphicsUtils BasicHTML BasicIconFactory - BasicInternalFrameTitlePane BasicInternalFrameUI BasicLabelUI BasicListUI BasicLookAndFeel - BasicMenuBarUI BasicMenuItemUI BasicMenuUI BasicOptionPaneUI BasicPanelUI BasicPasswordFieldUI - BasicPermission BasicPopupMenuSeparatorUI BasicPopupMenuUI BasicProgressBarUI BasicRadioButtonMenuItemUI - BasicRadioButtonUI BasicRootPaneUI BasicScrollBarUI BasicScrollPaneUI BasicSeparatorUI BasicSliderUI - BasicSpinnerUI BasicSplitPaneDivider BasicSplitPaneUI BasicStroke BasicTabbedPaneUI BasicTableHeaderUI - BasicTableUI BasicTextAreaUI BasicTextFieldUI BasicTextPaneUI BasicTextUI BasicToggleButtonUI - BasicToolBarSeparatorUI BasicToolBarUI BasicToolTipUI BasicTreeUI BasicViewportUI BatchUpdateException - BeanContext BeanContextChild BeanContextChildComponentProxy BeanContextChildSupport - BeanContextContainerProxy BeanContextEvent BeanContextMembershipEvent BeanContextMembershipListener - BeanContextProxy BeanContextServiceAvailableEvent BeanContextServiceProvider - BeanContextServiceProviderBeanInfo BeanContextServiceRevokedEvent BeanContextServiceRevokedListener - BeanContextServices BeanContextServicesListener BeanContextServicesSupport BeanContextSupport - BeanDescriptor BeanInfo Beans BevelBorder Bidi BigDecimal BigInteger BinaryRefAddr BindException Binding - BitSet Blob BlockingQueue BlockView BMPImageWriteParam Book Boolean BooleanControl Border BorderFactory - BorderLayout BorderUIResource BoundedRangeModel Box BoxLayout BoxView BreakIterator - BrokenBarrierException Buffer BufferCapabilities BufferedImage BufferedImageFilter BufferedImageOp - BufferedInputStream BufferedOutputStream BufferedReader BufferedWriter BufferOverflowException - BufferStrategy BufferUnderflowException Button ButtonGroup ButtonModel ButtonUI Byte - ByteArrayInputStream ByteArrayOutputStream ByteBuffer ByteChannel ByteLookupTable ByteOrder CachedRowSet - CacheRequest CacheResponse Calendar Callable CallableStatement Callback CallbackHandler - CancelablePrintJob CancellationException CancelledKeyException CannotProceedException - CannotRedoException CannotUndoException Canvas CardLayout Caret CaretEvent CaretListener CellEditor - CellEditorListener CellRendererPane Certificate CertificateEncodingException CertificateException - CertificateExpiredException CertificateFactory CertificateFactorySpi CertificateNotYetValidException - CertificateParsingException CertPath CertPathBuilder CertPathBuilderException CertPathBuilderResult - CertPathBuilderSpi CertPathParameters CertPathTrustManagerParameters CertPathValidator - CertPathValidatorException CertPathValidatorResult CertPathValidatorSpi CertSelector CertStore - CertStoreException CertStoreParameters CertStoreSpi ChangedCharSetException ChangeEvent ChangeListener - Channel Channels Character CharacterCodingException CharacterIterator CharArrayReader CharArrayWriter - CharBuffer CharConversionException CharSequence Charset CharsetDecoder CharsetEncoder CharsetProvider - Checkbox CheckboxGroup CheckboxMenuItem CheckedInputStream CheckedOutputStream Checksum Choice - ChoiceCallback ChoiceFormat Chromaticity Cipher CipherInputStream CipherOutputStream CipherSpi Class - ClassCastException ClassCircularityError ClassDefinition ClassDesc ClassFileTransformer ClassFormatError - ClassLoader ClassLoaderRepository ClassLoadingMXBean ClassNotFoundException Clip Clipboard - ClipboardOwner Clob Cloneable CloneNotSupportedException Closeable ClosedByInterruptException - ClosedChannelException ClosedSelectorException CMMException CoderMalfunctionError CoderResult CodeSigner - CodeSource CodingErrorAction CollationElementIterator CollationKey Collator Collection - CollectionCertStoreParameters Collections Color ColorChooserComponentFactory ColorChooserUI - ColorConvertOp ColorModel ColorSelectionModel ColorSpace ColorSupported ColorType ColorUIResource - ComboBoxEditor ComboBoxModel ComboBoxUI ComboPopup CommunicationException Comparable Comparator - CompilationMXBean Compiler CompletionService Component ComponentAdapter ComponentColorModel - ComponentEvent ComponentInputMap ComponentInputMapUIResource ComponentListener ComponentOrientation - ComponentSampleModel ComponentUI ComponentView Composite CompositeContext CompositeData - CompositeDataSupport CompositeName CompositeType CompositeView CompoundBorder CompoundControl - CompoundEdit CompoundName Compression ConcurrentHashMap ConcurrentLinkedQueue ConcurrentMap - ConcurrentModificationException Condition Configuration ConfigurationException ConfirmationCallback - ConnectException ConnectIOException Connection ConnectionEvent ConnectionEventListener - ConnectionPendingException ConnectionPoolDataSource ConsoleHandler Constructor Container - ContainerAdapter ContainerEvent ContainerListener ContainerOrderFocusTraversalPolicy ContentHandler - ContentHandlerFactory ContentModel Context ContextNotEmptyException ContextualRenderedImageFactory - Control ControlFactory ControllerEventListener ConvolveOp CookieHandler Copies CopiesSupported - CopyOnWriteArrayList CopyOnWriteArraySet CountDownLatch CounterMonitor CounterMonitorMBean CRC32 - CredentialException CredentialExpiredException CredentialNotFoundException CRL CRLException CRLSelector - CropImageFilter CSS CubicCurve2D Currency Cursor Customizer CyclicBarrier DatabaseMetaData DataBuffer - DataBufferByte DataBufferDouble DataBufferFloat DataBufferInt DataBufferShort DataBufferUShort - DataFlavor DataFormatException DatagramChannel DatagramPacket DatagramSocket DatagramSocketImpl - DatagramSocketImplFactory DataInput DataInputStream DataLine DataOutput DataOutputStream DataSource - DataTruncation DatatypeConfigurationException DatatypeConstants DatatypeFactory Date DateFormat - DateFormatSymbols DateFormatter DateTimeAtCompleted DateTimeAtCreation DateTimeAtProcessing - DateTimeSyntax DebugGraphics DecimalFormat DecimalFormatSymbols DefaultBoundedRangeModel - DefaultButtonModel DefaultCaret DefaultCellEditor DefaultColorSelectionModel DefaultComboBoxModel - DefaultDesktopManager DefaultEditorKit DefaultFocusManager DefaultFocusTraversalPolicy DefaultFormatter - DefaultFormatterFactory DefaultHighlighter DefaultKeyboardFocusManager DefaultListCellRenderer - DefaultListModel DefaultListSelectionModel DefaultLoaderRepository DefaultMenuLayout DefaultMetalTheme - DefaultMutableTreeNode DefaultPersistenceDelegate DefaultSingleSelectionModel DefaultStyledDocument - DefaultTableCellRenderer DefaultTableColumnModel DefaultTableModel DefaultTextUI DefaultTreeCellEditor - DefaultTreeCellRenderer DefaultTreeModel DefaultTreeSelectionModel Deflater DeflaterOutputStream Delayed - DelayQueue DelegationPermission Deprecated Descriptor DescriptorAccess DescriptorSupport DESedeKeySpec - DesignMode DESKeySpec DesktopIconUI DesktopManager DesktopPaneUI Destination Destroyable - DestroyFailedException DGC DHGenParameterSpec DHKey DHParameterSpec DHPrivateKey DHPrivateKeySpec - DHPublicKey DHPublicKeySpec Dialog Dictionary DigestException DigestInputStream DigestOutputStream - Dimension Dimension2D DimensionUIResource DirContext DirectColorModel DirectoryManager DirObjectFactory - DirStateFactory DisplayMode DnDConstants Doc DocAttribute DocAttributeSet DocFlavor DocPrintJob Document - DocumentBuilder DocumentBuilderFactory Documented DocumentEvent DocumentFilter DocumentListener - DocumentName DocumentParser DomainCombiner DOMLocator DOMResult DOMSource Double DoubleBuffer - DragGestureEvent DragGestureListener DragGestureRecognizer DragSource DragSourceAdapter - DragSourceContext DragSourceDragEvent DragSourceDropEvent DragSourceEvent DragSourceListener - DragSourceMotionListener Driver DriverManager DriverPropertyInfo DropTarget DropTargetAdapter - DropTargetContext DropTargetDragEvent DropTargetDropEvent DropTargetEvent DropTargetListener DSAKey - DSAKeyPairGenerator DSAParameterSpec DSAParams DSAPrivateKey DSAPrivateKeySpec DSAPublicKey - DSAPublicKeySpec DTD DTDConstants DuplicateFormatFlagsException Duration DynamicMBean ECField ECFieldF2m - ECFieldFp ECGenParameterSpec ECKey ECParameterSpec ECPoint ECPrivateKey ECPrivateKeySpec ECPublicKey - ECPublicKeySpec EditorKit Element ElementIterator ElementType Ellipse2D EllipticCurve EmptyBorder - EmptyStackException EncodedKeySpec Encoder EncryptedPrivateKeyInfo Entity Enum - EnumConstantNotPresentException EnumControl Enumeration EnumMap EnumSet EnumSyntax EOFException Error - ErrorListener ErrorManager EtchedBorder Event EventContext EventDirContext EventHandler EventListener - EventListenerList EventListenerProxy EventObject EventQueue EventSetDescriptor Exception - ExceptionInInitializerError ExceptionListener Exchanger ExecutionException Executor - ExecutorCompletionService Executors ExecutorService ExemptionMechanism ExemptionMechanismException - ExemptionMechanismSpi ExpandVetoException ExportException Expression ExtendedRequest ExtendedResponse - Externalizable FactoryConfigurationError FailedLoginException FeatureDescriptor Fidelity Field - FieldPosition FieldView File FileCacheImageInputStream FileCacheImageOutputStream FileChannel - FileChooserUI FileDescriptor FileDialog FileFilter FileHandler FileImageInputStream - FileImageOutputStream FileInputStream FileLock FileLockInterruptionException FilenameFilter FileNameMap - FileNotFoundException FileOutputStream FilePermission FileReader FileSystemView FileView FileWriter - Filter FilteredImageSource FilteredRowSet FilterInputStream FilterOutputStream FilterReader FilterWriter - Finishings FixedHeightLayoutCache FlatteningPathIterator FlavorEvent FlavorException FlavorListener - FlavorMap FlavorTable Float FloatBuffer FloatControl FlowLayout FlowView Flushable FocusAdapter - FocusEvent FocusListener FocusManager FocusTraversalPolicy Font FontFormatException FontMetrics - FontRenderContext FontUIResource Format FormatConversionProvider FormatFlagsConversionMismatchException - Formattable FormattableFlags Formatter FormatterClosedException FormSubmitEvent FormView Frame Future - FutureTask GapContent GarbageCollectorMXBean GatheringByteChannel GaugeMonitor GaugeMonitorMBean - GeneralPath GeneralSecurityException GenericArrayType GenericDeclaration GenericSignatureFormatError - GlyphJustificationInfo GlyphMetrics GlyphVector GlyphView GradientPaint GraphicAttribute Graphics - Graphics2D GraphicsConfigTemplate GraphicsConfiguration GraphicsDevice GraphicsEnvironment GrayFilter - GregorianCalendar GridBagConstraints GridBagLayout GridLayout Group Guard GuardedObject GZIPInputStream - GZIPOutputStream Handler HandshakeCompletedEvent HandshakeCompletedListener HasControls HashAttributeSet - HashDocAttributeSet HashMap HashPrintJobAttributeSet HashPrintRequestAttributeSet - HashPrintServiceAttributeSet HashSet Hashtable HeadlessException HierarchyBoundsAdapter - HierarchyBoundsListener HierarchyEvent HierarchyListener Highlighter HostnameVerifier HTML HTMLDocument - HTMLEditorKit HTMLFrameHyperlinkEvent HTMLWriter HttpRetryException HttpsURLConnection HttpURLConnection - HyperlinkEvent HyperlinkListener ICC_ColorSpace ICC_Profile ICC_ProfileGray ICC_ProfileRGB Icon - IconUIResource IconView Identity IdentityHashMap IdentityScope IIOByteBuffer IIOException IIOImage - IIOInvalidTreeException IIOMetadata IIOMetadataController IIOMetadataFormat IIOMetadataFormatImpl - IIOMetadataNode IIOParam IIOParamController IIOReadProgressListener IIOReadUpdateListener - IIOReadWarningListener IIORegistry IIOServiceProvider IIOWriteProgressListener IIOWriteWarningListener - IllegalAccessError IllegalAccessException IllegalArgumentException IllegalBlockingModeException - IllegalBlockSizeException IllegalCharsetNameException IllegalClassFormatException - IllegalComponentStateException IllegalFormatCodePointException IllegalFormatConversionException - IllegalFormatException IllegalFormatFlagsException IllegalFormatPrecisionException - IllegalFormatWidthException IllegalMonitorStateException IllegalPathStateException - IllegalSelectorException IllegalStateException IllegalThreadStateException Image ImageCapabilities - ImageConsumer ImageFilter ImageGraphicAttribute ImageIcon ImageInputStream ImageInputStreamImpl - ImageInputStreamSpi ImageIO ImageObserver ImageOutputStream ImageOutputStreamImpl ImageOutputStreamSpi - ImageProducer ImageReader ImageReaderSpi ImageReaderWriterSpi ImageReadParam ImageTranscoder - ImageTranscoderSpi ImageTypeSpecifier ImageView ImageWriteParam ImageWriter ImageWriterSpi - ImagingOpException IncompatibleClassChangeError IncompleteAnnotationException IndexColorModel - IndexedPropertyChangeEvent IndexedPropertyDescriptor IndexOutOfBoundsException Inet4Address Inet6Address - InetAddress InetSocketAddress Inflater InflaterInputStream InheritableThreadLocal Inherited - InitialContext InitialContextFactory InitialContextFactoryBuilder InitialDirContext InitialLdapContext - InlineView InputContext InputEvent InputMap InputMapUIResource InputMethod InputMethodContext - InputMethodDescriptor InputMethodEvent InputMethodHighlight InputMethodListener InputMethodRequests - InputMismatchException InputStream InputStreamReader InputSubset InputVerifier Insets InsetsUIResource - InstanceAlreadyExistsException InstanceNotFoundException InstantiationError InstantiationException - Instrument Instrumentation InsufficientResourcesException IntBuffer Integer IntegerSyntax InternalError - InternalFrameAdapter InternalFrameEvent InternalFrameFocusTraversalPolicy InternalFrameListener - InternalFrameUI InternationalFormatter InterruptedException InterruptedIOException - InterruptedNamingException InterruptibleChannel IntrospectionException Introspector - InvalidActivityException InvalidAlgorithmParameterException InvalidApplicationException - InvalidAttributeIdentifierException InvalidAttributesException InvalidAttributeValueException - InvalidClassException InvalidDnDOperationException InvalidKeyException InvalidKeySpecException - InvalidMarkException InvalidMidiDataException InvalidNameException InvalidObjectException - InvalidOpenTypeException InvalidParameterException InvalidParameterSpecException - InvalidPreferencesFormatException InvalidPropertiesFormatException InvalidRelationIdException - InvalidRelationServiceException InvalidRelationTypeException InvalidRoleInfoException - InvalidRoleValueException InvalidSearchControlsException InvalidSearchFilterException - InvalidTargetObjectTypeException InvalidTransactionException InvocationEvent InvocationHandler - InvocationTargetException IOException ItemEvent ItemListener ItemSelectable Iterable Iterator - IvParameterSpec JApplet JarEntry JarException JarFile JarInputStream JarOutputStream JarURLConnection - JButton JCheckBox JCheckBoxMenuItem JColorChooser JComboBox JComponent JdbcRowSet JDesktopPane JDialog - JEditorPane JFileChooser JFormattedTextField JFrame JInternalFrame JLabel JLayeredPane JList JMenu - JMenuBar JMenuItem JMException JMRuntimeException JMXAuthenticator JMXConnectionNotification - JMXConnector JMXConnectorFactory JMXConnectorProvider JMXConnectorServer JMXConnectorServerFactory - JMXConnectorServerMBean JMXConnectorServerProvider JMXPrincipal JMXProviderException - JMXServerErrorException JMXServiceURL JobAttributes JobHoldUntil JobImpressions JobImpressionsCompleted - JobImpressionsSupported JobKOctets JobKOctetsProcessed JobKOctetsSupported JobMediaSheets - JobMediaSheetsCompleted JobMediaSheetsSupported JobMessageFromOperator JobName JobOriginatingUserName - JobPriority JobPrioritySupported JobSheets JobState JobStateReason JobStateReasons Joinable JoinRowSet - JOptionPane JPanel JPasswordField JPEGHuffmanTable JPEGImageReadParam JPEGImageWriteParam JPEGQTable - JPopupMenu JProgressBar JRadioButton JRadioButtonMenuItem JRootPane JScrollBar JScrollPane JSeparator - JSlider JSpinner JSplitPane JTabbedPane JTable JTableHeader JTextArea JTextComponent JTextField - JTextPane JToggleButton JToolBar JToolTip JTree JViewport JWindow KerberosKey KerberosPrincipal - KerberosTicket Kernel Key KeyAdapter KeyAgreement KeyAgreementSpi KeyAlreadyExistsException - KeyboardFocusManager KeyEvent KeyEventDispatcher KeyEventPostProcessor KeyException KeyFactory - KeyFactorySpi KeyGenerator KeyGeneratorSpi KeyListener KeyManagementException KeyManager - KeyManagerFactory KeyManagerFactorySpi Keymap KeyPair KeyPairGenerator KeyPairGeneratorSpi KeyRep - KeySpec KeyStore KeyStoreBuilderParameters KeyStoreException KeyStoreSpi KeyStroke Label LabelUI - LabelView LanguageCallback LastOwnerException LayeredHighlighter LayoutFocusTraversalPolicy - LayoutManager LayoutManager2 LayoutQueue LDAPCertStoreParameters LdapContext LdapName - LdapReferralException Lease Level LimitExceededException Line Line2D LineBorder LineBreakMeasurer - LineEvent LineListener LineMetrics LineNumberInputStream LineNumberReader LineUnavailableException - LinkageError LinkedBlockingQueue LinkedHashMap LinkedHashSet LinkedList LinkException LinkLoopException - LinkRef List ListCellRenderer ListDataEvent ListDataListener ListenerNotFoundException ListIterator - ListModel ListResourceBundle ListSelectionEvent ListSelectionListener ListSelectionModel ListUI ListView - LoaderHandler Locale LocateRegistry Lock LockSupport Logger LoggingMXBean LoggingPermission LoginContext - LoginException LoginModule LogManager LogRecord LogStream Long LongBuffer LookAndFeel LookupOp - LookupTable Mac MacSpi MalformedInputException MalformedLinkException MalformedObjectNameException - MalformedParameterizedTypeException MalformedURLException ManagementFactory ManagementPermission - ManageReferralControl ManagerFactoryParameters Manifest Map MappedByteBuffer MarshalException - MarshalledObject MaskFormatter Matcher MatchResult Math MathContext MatteBorder MBeanAttributeInfo - MBeanConstructorInfo MBeanException MBeanFeatureInfo MBeanInfo MBeanNotificationInfo MBeanOperationInfo - MBeanParameterInfo MBeanPermission MBeanRegistration MBeanRegistrationException MBeanServer - MBeanServerBuilder MBeanServerConnection MBeanServerDelegate MBeanServerDelegateMBean MBeanServerFactory - MBeanServerForwarder MBeanServerInvocationHandler MBeanServerNotification MBeanServerNotificationFilter - MBeanServerPermission MBeanTrustPermission Media MediaName MediaPrintableArea MediaSize MediaSizeName - MediaTracker MediaTray Member MemoryCacheImageInputStream MemoryCacheImageOutputStream MemoryHandler - MemoryImageSource MemoryManagerMXBean MemoryMXBean MemoryNotificationInfo MemoryPoolMXBean MemoryType - MemoryUsage Menu MenuBar MenuBarUI MenuComponent MenuContainer MenuDragMouseEvent MenuDragMouseListener - MenuElement MenuEvent MenuItem MenuItemUI MenuKeyEvent MenuKeyListener MenuListener MenuSelectionManager - MenuShortcut MessageDigest MessageDigestSpi MessageFormat MetaEventListener MetalBorders MetalButtonUI - MetalCheckBoxIcon MetalCheckBoxUI MetalComboBoxButton MetalComboBoxEditor MetalComboBoxIcon - MetalComboBoxUI MetalDesktopIconUI MetalFileChooserUI MetalIconFactory MetalInternalFrameTitlePane - MetalInternalFrameUI MetalLabelUI MetalLookAndFeel MetalMenuBarUI MetalPopupMenuSeparatorUI - MetalProgressBarUI MetalRadioButtonUI MetalRootPaneUI MetalScrollBarUI MetalScrollButton - MetalScrollPaneUI MetalSeparatorUI MetalSliderUI MetalSplitPaneUI MetalTabbedPaneUI MetalTextFieldUI - MetalTheme MetalToggleButtonUI MetalToolBarUI MetalToolTipUI MetalTreeUI MetaMessage Method - MethodDescriptor MGF1ParameterSpec MidiChannel MidiDevice MidiDeviceProvider MidiEvent MidiFileFormat - MidiFileReader MidiFileWriter MidiMessage MidiSystem MidiUnavailableException MimeTypeParseException - MinimalHTMLWriter MissingFormatArgumentException MissingFormatWidthException MissingResourceException - Mixer MixerProvider MLet MLetMBean ModelMBean ModelMBeanAttributeInfo ModelMBeanConstructorInfo - ModelMBeanInfo ModelMBeanInfoSupport ModelMBeanNotificationBroadcaster ModelMBeanNotificationInfo - ModelMBeanOperationInfo ModificationItem Modifier Monitor MonitorMBean MonitorNotification - MonitorSettingException MouseAdapter MouseDragGestureRecognizer MouseEvent MouseInfo MouseInputAdapter - MouseInputListener MouseListener MouseMotionAdapter MouseMotionListener MouseWheelEvent - MouseWheelListener MultiButtonUI MulticastSocket MultiColorChooserUI MultiComboBoxUI MultiDesktopIconUI - MultiDesktopPaneUI MultiDoc MultiDocPrintJob MultiDocPrintService MultiFileChooserUI - MultiInternalFrameUI MultiLabelUI MultiListUI MultiLookAndFeel MultiMenuBarUI MultiMenuItemUI - MultiOptionPaneUI MultiPanelUI MultiPixelPackedSampleModel MultipleDocumentHandling MultipleMaster - MultiPopupMenuUI MultiProgressBarUI MultiRootPaneUI MultiScrollBarUI MultiScrollPaneUI MultiSeparatorUI - MultiSliderUI MultiSpinnerUI MultiSplitPaneUI MultiTabbedPaneUI MultiTableHeaderUI MultiTableUI - MultiTextUI MultiToolBarUI MultiToolTipUI MultiTreeUI MultiViewportUI MutableAttributeSet - MutableComboBoxModel MutableTreeNode Name NameAlreadyBoundException NameCallback NameClassPair - NameNotFoundException NameParser NamespaceChangeListener NamespaceContext Naming NamingEnumeration - NamingEvent NamingException NamingExceptionEvent NamingListener NamingManager NamingSecurityException - NavigationFilter NegativeArraySizeException NetPermission NetworkInterface NoClassDefFoundError - NoConnectionPendingException NodeChangeEvent NodeChangeListener NoInitialContextException - NoninvertibleTransformException NonReadableChannelException NonWritableChannelException - NoPermissionException NoRouteToHostException NoSuchAlgorithmException NoSuchAttributeException - NoSuchElementException NoSuchFieldError NoSuchFieldException NoSuchMethodError NoSuchMethodException - NoSuchObjectException NoSuchPaddingException NoSuchProviderException NotActiveException - NotBoundException NotCompliantMBeanException NotContextException Notification NotificationBroadcaster - NotificationBroadcasterSupport NotificationEmitter NotificationFilter NotificationFilterSupport - NotificationListener NotificationResult NotOwnerException NotSerializableException NotYetBoundException - NotYetConnectedException NullCipher NullPointerException Number NumberFormat NumberFormatException - NumberFormatter NumberOfDocuments NumberOfInterveningJobs NumberUp NumberUpSupported NumericShaper - OAEPParameterSpec Object ObjectChangeListener ObjectFactory ObjectFactoryBuilder ObjectInput - ObjectInputStream ObjectInputValidation ObjectInstance ObjectName ObjectOutput ObjectOutputStream - ObjectStreamClass ObjectStreamConstants ObjectStreamException ObjectStreamField ObjectView ObjID - Observable Observer OceanTheme OpenDataException OpenMBeanAttributeInfo OpenMBeanAttributeInfoSupport - OpenMBeanConstructorInfo OpenMBeanConstructorInfoSupport OpenMBeanInfo OpenMBeanInfoSupport - OpenMBeanOperationInfo OpenMBeanOperationInfoSupport OpenMBeanParameterInfo - OpenMBeanParameterInfoSupport OpenType OperatingSystemMXBean Operation OperationNotSupportedException - OperationsException Option OptionalDataException OptionPaneUI OrientationRequested OutOfMemoryError - OutputDeviceAssigned OutputKeys OutputStream OutputStreamWriter OverlappingFileLockException - OverlayLayout Override Owner Pack200 Package PackedColorModel Pageable PageAttributes - PagedResultsControl PagedResultsResponseControl PageFormat PageRanges PagesPerMinute PagesPerMinuteColor - Paint PaintContext PaintEvent Panel PanelUI Paper ParagraphView ParameterBlock ParameterDescriptor - ParameterizedType ParameterMetaData ParseException ParsePosition Parser ParserConfigurationException - ParserDelegator PartialResultException PasswordAuthentication PasswordCallback PasswordView Patch - PathIterator Pattern PatternSyntaxException PBEKey PBEKeySpec PBEParameterSpec PDLOverrideSupported - Permission PermissionCollection Permissions PersistenceDelegate PersistentMBean PhantomReference Pipe - PipedInputStream PipedOutputStream PipedReader PipedWriter PixelGrabber PixelInterleavedSampleModel - PKCS8EncodedKeySpec PKIXBuilderParameters PKIXCertPathBuilderResult PKIXCertPathChecker - PKIXCertPathValidatorResult PKIXParameters PlainDocument PlainView Point Point2D PointerInfo Policy - PolicyNode PolicyQualifierInfo Polygon PooledConnection Popup PopupFactory PopupMenu PopupMenuEvent - PopupMenuListener PopupMenuUI Port PortableRemoteObject PortableRemoteObjectDelegate - PortUnreachableException Position Predicate PreferenceChangeEvent PreferenceChangeListener Preferences - PreferencesFactory PreparedStatement PresentationDirection Principal Printable PrinterAbortException - PrinterException PrinterGraphics PrinterInfo PrinterIOException PrinterIsAcceptingJobs PrinterJob - PrinterLocation PrinterMakeAndModel PrinterMessageFromOperator PrinterMoreInfo - PrinterMoreInfoManufacturer PrinterName PrinterResolution PrinterState PrinterStateReason - PrinterStateReasons PrinterURI PrintEvent PrintException PrintGraphics PrintJob PrintJobAdapter - PrintJobAttribute PrintJobAttributeEvent PrintJobAttributeListener PrintJobAttributeSet PrintJobEvent - PrintJobListener PrintQuality PrintRequestAttribute PrintRequestAttributeSet PrintService - PrintServiceAttribute PrintServiceAttributeEvent PrintServiceAttributeListener PrintServiceAttributeSet - PrintServiceLookup PrintStream PrintWriter PriorityBlockingQueue PriorityQueue PrivateClassLoader - PrivateCredentialPermission PrivateKey PrivateMLet PrivilegedAction PrivilegedActionException - PrivilegedExceptionAction Process ProcessBuilder ProfileDataException ProgressBarUI ProgressMonitor - ProgressMonitorInputStream Properties PropertyChangeEvent PropertyChangeListener - PropertyChangeListenerProxy PropertyChangeSupport PropertyDescriptor PropertyEditor - PropertyEditorManager PropertyEditorSupport PropertyPermission PropertyResourceBundle - PropertyVetoException ProtectionDomain ProtocolException Provider ProviderException Proxy ProxySelector - PSource PSSParameterSpec PublicKey PushbackInputStream PushbackReader QName QuadCurve2D Query QueryEval - QueryExp Queue QueuedJobCount Random RandomAccess RandomAccessFile Raster RasterFormatException RasterOp - RC2ParameterSpec RC5ParameterSpec Rdn Readable ReadableByteChannel Reader ReadOnlyBufferException - ReadWriteLock RealmCallback RealmChoiceCallback Receiver Rectangle Rectangle2D RectangularShape - ReentrantLock ReentrantReadWriteLock Ref RefAddr Reference Referenceable ReferenceQueue - ReferenceUriSchemesSupported ReferralException ReflectionException ReflectPermission Refreshable - RefreshFailedException Region RegisterableService Registry RegistryHandler RejectedExecutionException - RejectedExecutionHandler Relation RelationException RelationNotFoundException RelationNotification - RelationService RelationServiceMBean RelationServiceNotRegisteredException RelationSupport - RelationSupportMBean RelationType RelationTypeNotFoundException RelationTypeSupport Remote RemoteCall - RemoteException RemoteObject RemoteObjectInvocationHandler RemoteRef RemoteServer RemoteStub - RenderableImage RenderableImageOp RenderableImageProducer RenderContext RenderedImage - RenderedImageFactory Renderer RenderingHints RepaintManager ReplicateScaleFilter RequestingUserName - RequiredModelMBean RescaleOp ResolutionSyntax Resolver ResolveResult ResourceBundle ResponseCache Result - ResultSet ResultSetMetaData Retention RetentionPolicy ReverbType RGBImageFilter RMIClassLoader - RMIClassLoaderSpi RMIClientSocketFactory RMIConnection RMIConnectionImpl RMIConnectionImpl_Stub - RMIConnector RMIConnectorServer RMIFailureHandler RMIIIOPServerImpl RMIJRMPServerImpl - RMISecurityException RMISecurityManager RMIServer RMIServerImpl RMIServerImpl_Stub - RMIServerSocketFactory RMISocketFactory Robot Role RoleInfo RoleInfoNotFoundException RoleList - RoleNotFoundException RoleResult RoleStatus RoleUnresolved RoleUnresolvedList RootPaneContainer - RootPaneUI RoundingMode RoundRectangle2D RowMapper RowSet RowSetEvent RowSetInternal RowSetListener - RowSetMetaData RowSetMetaDataImpl RowSetReader RowSetWarning RowSetWriter RSAKey RSAKeyGenParameterSpec - RSAMultiPrimePrivateCrtKey RSAMultiPrimePrivateCrtKeySpec RSAOtherPrimeInfo RSAPrivateCrtKey - RSAPrivateCrtKeySpec RSAPrivateKey RSAPrivateKeySpec RSAPublicKey RSAPublicKeySpec RTFEditorKit - RuleBasedCollator Runnable Runtime RuntimeErrorException RuntimeException RuntimeMBeanException - RuntimeMXBean RuntimeOperationsException RuntimePermission SampleModel Sasl SaslClient SaslClientFactory - SaslException SaslServer SaslServerFactory Savepoint SAXParser SAXParserFactory SAXResult SAXSource - SAXTransformerFactory Scanner ScatteringByteChannel ScheduledExecutorService ScheduledFuture - ScheduledThreadPoolExecutor Schema SchemaFactory SchemaFactoryLoader SchemaViolationException Scrollable - Scrollbar ScrollBarUI ScrollPane ScrollPaneAdjustable ScrollPaneConstants ScrollPaneLayout ScrollPaneUI - SealedObject SearchControls SearchResult SecretKey SecretKeyFactory SecretKeyFactorySpi SecretKeySpec - SecureCacheResponse SecureClassLoader SecureRandom SecureRandomSpi Security SecurityException - SecurityManager SecurityPermission Segment SelectableChannel SelectionKey Selector SelectorProvider - Semaphore SeparatorUI Sequence SequenceInputStream Sequencer SerialArray SerialBlob SerialClob - SerialDatalink SerialException Serializable SerializablePermission SerialJavaObject SerialRef - SerialStruct ServerCloneException ServerError ServerException ServerNotActiveException ServerRef - ServerRuntimeException ServerSocket ServerSocketChannel ServerSocketFactory ServiceNotFoundException - ServicePermission ServiceRegistry ServiceUI ServiceUIFactory ServiceUnavailableException Set - SetOfIntegerSyntax Severity Shape ShapeGraphicAttribute SheetCollate Short ShortBuffer - ShortBufferException ShortLookupTable ShortMessage Sides Signature SignatureException SignatureSpi - SignedObject Signer SimpleAttributeSet SimpleBeanInfo SimpleDateFormat SimpleDoc SimpleFormatter - SimpleTimeZone SimpleType SinglePixelPackedSampleModel SingleSelectionModel Size2DSyntax - SizeLimitExceededException SizeRequirements SizeSequence Skeleton SkeletonMismatchException - SkeletonNotFoundException SliderUI Socket SocketAddress SocketChannel SocketException SocketFactory - SocketHandler SocketImpl SocketImplFactory SocketOptions SocketPermission SocketSecurityException - SocketTimeoutException SoftBevelBorder SoftReference SortControl SortedMap SortedSet - SortingFocusTraversalPolicy SortKey SortResponseControl Soundbank SoundbankReader SoundbankResource - Source SourceDataLine SourceLocator SpinnerDateModel SpinnerListModel SpinnerModel SpinnerNumberModel - SpinnerUI SplitPaneUI Spring SpringLayout SQLData SQLException SQLInput SQLInputImpl SQLOutput - SQLOutputImpl SQLPermission SQLWarning SSLContext SSLContextSpi SSLEngine SSLEngineResult SSLException - SSLHandshakeException SSLKeyException SSLPeerUnverifiedException SSLPermission SSLProtocolException - SslRMIClientSocketFactory SslRMIServerSocketFactory SSLServerSocket SSLServerSocketFactory SSLSession - SSLSessionBindingEvent SSLSessionBindingListener SSLSessionContext SSLSocket SSLSocketFactory Stack - StackOverflowError StackTraceElement StandardMBean StartTlsRequest StartTlsResponse StateEdit - StateEditable StateFactory Statement StreamCorruptedException StreamHandler StreamPrintService - StreamPrintServiceFactory StreamResult StreamSource StreamTokenizer StrictMath String StringBuffer - StringBufferInputStream StringBuilder StringCharacterIterator StringContent - StringIndexOutOfBoundsException StringMonitor StringMonitorMBean StringReader StringRefAddr - StringSelection StringTokenizer StringValueExp StringWriter Stroke Struct Stub StubDelegate - StubNotFoundException Style StyleConstants StyleContext StyledDocument StyledEditorKit StyleSheet - Subject SubjectDelegationPermission SubjectDomainCombiner SupportedValuesAttribute SuppressWarnings - SwingConstants SwingPropertyChangeSupport SwingUtilities SyncFactory SyncFactoryException - SyncFailedException SynchronousQueue SyncProvider SyncProviderException SyncResolver SynthConstants - SynthContext Synthesizer SynthGraphicsUtils SynthLookAndFeel SynthPainter SynthStyle SynthStyleFactory - SysexMessage System SystemColor SystemFlavorMap TabableView TabbedPaneUI TabExpander TableCellEditor - TableCellRenderer TableColumn TableColumnModel TableColumnModelEvent TableColumnModelListener - TableHeaderUI TableModel TableModelEvent TableModelListener TableUI TableView TabSet TabStop TabularData - TabularDataSupport TabularType TagElement Target TargetDataLine TargetedNotification Templates - TemplatesHandler TextAction TextArea TextAttribute TextComponent TextEvent TextField TextHitInfo - TextInputCallback TextLayout TextListener TextMeasurer TextOutputCallback TextSyntax TextUI TexturePaint - Thread ThreadDeath ThreadFactory ThreadGroup ThreadInfo ThreadLocal ThreadMXBean ThreadPoolExecutor - Throwable Tie TileObserver Time TimeLimitExceededException TimeoutException Timer - TimerAlarmClockNotification TimerMBean TimerNotification TimerTask Timestamp TimeUnit TimeZone - TitledBorder ToolBarUI Toolkit ToolTipManager ToolTipUI TooManyListenersException Track - TransactionalWriter TransactionRequiredException TransactionRolledbackException Transferable - TransferHandler TransformAttribute Transformer TransformerConfigurationException TransformerException - TransformerFactory TransformerFactoryConfigurationError TransformerHandler Transmitter Transparency - TreeCellEditor TreeCellRenderer TreeExpansionEvent TreeExpansionListener TreeMap TreeModel - TreeModelEvent TreeModelListener TreeNode TreePath TreeSelectionEvent TreeSelectionListener - TreeSelectionModel TreeSet TreeUI TreeWillExpandListener TrustAnchor TrustManager TrustManagerFactory - TrustManagerFactorySpi Type TypeInfoProvider TypeNotPresentException Types TypeVariable UID UIDefaults - UIManager UIResource UndeclaredThrowableException UndoableEdit UndoableEditEvent UndoableEditListener - UndoableEditSupport UndoManager UnexpectedException UnicastRemoteObject UnknownError - UnknownFormatConversionException UnknownFormatFlagsException UnknownGroupException UnknownHostException - UnknownObjectException UnknownServiceException UnmappableCharacterException UnmarshalException - UnmodifiableClassException UnmodifiableSetException UnrecoverableEntryException - UnrecoverableKeyException Unreferenced UnresolvedAddressException UnresolvedPermission - UnsatisfiedLinkError UnsolicitedNotification UnsolicitedNotificationEvent - UnsolicitedNotificationListener UnsupportedAddressTypeException UnsupportedAudioFileException - UnsupportedCallbackException UnsupportedCharsetException UnsupportedClassVersionError - UnsupportedEncodingException UnsupportedFlavorException UnsupportedLookAndFeelException - UnsupportedOperationException URI URIException URIResolver URISyntax URISyntaxException URL - URLClassLoader URLConnection URLDecoder URLEncoder URLStreamHandler URLStreamHandlerFactory - UTFDataFormatException Util UtilDelegate Utilities UUID Validator ValidatorHandler ValueExp ValueHandler - ValueHandlerMultiFormat VariableHeightLayoutCache Vector VerifyError VetoableChangeListener - VetoableChangeListenerProxy VetoableChangeSupport View ViewFactory ViewportLayout ViewportUI - VirtualMachineError Visibility VMID VoiceStatus Void VolatileImage WeakHashMap WeakReference WebRowSet - WildcardType Window WindowAdapter WindowConstants WindowEvent WindowFocusListener WindowListener - WindowStateListener WrappedPlainView WritableByteChannel WritableRaster WritableRenderedImage - WriteAbortedException Writer X500Principal X500PrivateCredential X509Certificate X509CertSelector - X509CRL X509CRLEntry X509CRLSelector X509EncodedKeySpec X509ExtendedKeyManager X509Extension - X509KeyManager X509TrustManager XAConnection XADataSource XAException XAResource Xid XMLConstants - XMLDecoder XMLEncoder XMLFormatter XMLGregorianCalendar XMLParseException XmlReader XmlWriter XPath - XPathConstants XPathException XPathExpression XPathExpressionException XPathFactory - XPathFactoryConfigurationException XPathFunction XPathFunctionException XPathFunctionResolver - XPathVariableResolver ZipEntry ZipException ZipFile ZipInputStream ZipOutputStream ZoneView - ] - #:nocov: - - end - -end -end diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/java_script.rb b/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/java_script.rb deleted file mode 100644 index 8c13d4ff..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/java_script.rb +++ /dev/null @@ -1,236 +0,0 @@ -module CodeRay -module Scanners - - # Scanner for JavaScript. - # - # Aliases: +ecmascript+, +ecma_script+, +javascript+ - class JavaScript < Scanner - - register_for :java_script - file_extension 'js' - - # The actual JavaScript keywords. - KEYWORDS = %w[ - break case catch continue default delete do else - finally for function if in instanceof new - return switch throw try typeof var void while with - ] # :nodoc: - PREDEFINED_CONSTANTS = %w[ - false null true undefined NaN Infinity - ] # :nodoc: - - MAGIC_VARIABLES = %w[ this arguments ] # :nodoc: arguments was introduced in JavaScript 1.4 - - KEYWORDS_EXPECTING_VALUE = WordList.new.add %w[ - case delete in instanceof new return throw typeof with - ] # :nodoc: - - # Reserved for future use. - RESERVED_WORDS = %w[ - abstract boolean byte char class debugger double enum export extends - final float goto implements import int interface long native package - private protected public short static super synchronized throws transient - volatile - ] # :nodoc: - - IDENT_KIND = WordList.new(:ident). - add(RESERVED_WORDS, :reserved). - add(PREDEFINED_CONSTANTS, :predefined_constant). - add(MAGIC_VARIABLES, :local_variable). - add(KEYWORDS, :keyword) # :nodoc: - - ESCAPE = / [bfnrtv\n\\'"] | x[a-fA-F0-9]{1,2} | [0-7]{1,3} /x # :nodoc: - UNICODE_ESCAPE = / u[a-fA-F0-9]{4} | U[a-fA-F0-9]{8} /x # :nodoc: - REGEXP_ESCAPE = / [bBdDsSwW] /x # :nodoc: - STRING_CONTENT_PATTERN = { - "'" => /[^\\']+/, - '"' => /[^\\"]+/, - '/' => /[^\\\/]+/, - } # :nodoc: - KEY_CHECK_PATTERN = { - "'" => / (?> [^\\']* (?: \\. [^\\']* )* ) ' \s* : /mx, - '"' => / (?> [^\\"]* (?: \\. [^\\"]* )* ) " \s* : /mx, - } # :nodoc: - - protected - - def setup - @state = :initial - end - - def scan_tokens encoder, options - - state, string_delimiter = options[:state] || @state - if string_delimiter - encoder.begin_group state - end - - value_expected = true - key_expected = false - function_expected = false - - until eos? - - case state - - when :initial - - if match = scan(/ \s+ | \\\n /x) - value_expected = true if !value_expected && match.index(?\n) - encoder.text_token match, :space - - elsif match = scan(%r! // [^\n\\]* (?: \\. [^\n\\]* )* | /\* (?: .*? \*/ | .*() ) !mx) - value_expected = true - encoder.text_token match, :comment - state = :open_multi_line_comment if self[1] - - elsif check(/\.?\d/) - key_expected = value_expected = false - if match = scan(/0[xX][0-9A-Fa-f]+/) - encoder.text_token match, :hex - elsif match = scan(/(?>0[0-7]+)(?![89.eEfF])/) - encoder.text_token match, :octal - elsif match = scan(/\d+[fF]|\d*\.\d+(?:[eE][+-]?\d+)?[fF]?|\d+[eE][+-]?\d+[fF]?/) - encoder.text_token match, :float - elsif match = scan(/\d+/) - encoder.text_token match, :integer - end - - elsif value_expected && match = scan(/<([[:alpha:]]\w*) (?: [^\/>]*\/> | .*?<\/\1>)/xim) - # TODO: scan over nested tags - xml_scanner.tokenize match, :tokens => encoder - value_expected = false - - elsif match = scan(/ [-+*=<>?:;,!&^|(\[{~%]+ | \.(?!\d) /x) - value_expected = true - last_operator = match[-1] - key_expected = (last_operator == ?{) || (last_operator == ?,) - function_expected = false - encoder.text_token match, :operator - - elsif match = scan(/ [)\]}]+ /x) - function_expected = key_expected = value_expected = false - encoder.text_token match, :operator - - elsif match = scan(/ [$a-zA-Z_][A-Za-z_0-9$]* /x) - kind = IDENT_KIND[match] - value_expected = (kind == :keyword) && KEYWORDS_EXPECTING_VALUE[match] - # TODO: labels - if kind == :ident - if match.index(?$) # $ allowed inside an identifier - kind = :predefined - elsif function_expected - kind = :function - elsif check(/\s*[=:]\s*function\b/) - kind = :function - elsif key_expected && check(/\s*:/) - kind = :key - end - end - function_expected = (kind == :keyword) && (match == 'function') - key_expected = false - encoder.text_token match, kind - - elsif match = scan(/["']/) - if key_expected && check(KEY_CHECK_PATTERN[match]) - state = :key - else - state = :string - end - encoder.begin_group state - string_delimiter = match - encoder.text_token match, :delimiter - - elsif value_expected && (match = scan(/\//)) - encoder.begin_group :regexp - state = :regexp - string_delimiter = '/' - encoder.text_token match, :delimiter - - elsif match = scan(/ \/ /x) - value_expected = true - key_expected = false - encoder.text_token match, :operator - - else - encoder.text_token getch, :error - - end - - when :string, :regexp, :key - if match = scan(STRING_CONTENT_PATTERN[string_delimiter]) - encoder.text_token match, :content - elsif match = scan(/["'\/]/) - encoder.text_token match, :delimiter - if state == :regexp - modifiers = scan(/[gim]+/) - encoder.text_token modifiers, :modifier if modifiers && !modifiers.empty? - end - encoder.end_group state - string_delimiter = nil - key_expected = value_expected = false - state = :initial - elsif state != :regexp && (match = scan(/ \\ (?: #{ESCAPE} | #{UNICODE_ESCAPE} ) /mox)) - if string_delimiter == "'" && !(match == "\\\\" || match == "\\'") - encoder.text_token match, :content - else - encoder.text_token match, :char - end - elsif state == :regexp && match = scan(/ \\ (?: #{ESCAPE} | #{REGEXP_ESCAPE} | #{UNICODE_ESCAPE} ) /mox) - encoder.text_token match, :char - elsif match = scan(/\\./m) - encoder.text_token match, :content - elsif match = scan(/ \\ | $ /x) - encoder.end_group state - encoder.text_token match, :error unless match.empty? - string_delimiter = nil - key_expected = value_expected = false - state = :initial - else - raise_inspect "else case #{string_delimiter} reached; %p not handled." % peek(1), encoder - end - - when :open_multi_line_comment - if match = scan(%r! .*? \*/ !mx) - state = :initial - else - match = scan(%r! .+ !mx) - end - value_expected = true - encoder.text_token match, :comment if match - - else - #:nocov: - raise_inspect 'Unknown state: %p' % [state], encoder - #:nocov: - - end - - end - - if options[:keep_state] - @state = state, string_delimiter - end - - if [:string, :regexp].include? state - encoder.end_group state - end - - encoder - end - - protected - - def reset_instance - super - @xml_scanner.reset if defined? @xml_scanner - end - - def xml_scanner - @xml_scanner ||= CodeRay.scanner :xml, :tokens => @tokens, :keep_tokens => true, :keep_state => false - end - - end - -end -end diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/json.rb b/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/json.rb deleted file mode 100644 index b09970c2..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/json.rb +++ /dev/null @@ -1,98 +0,0 @@ -module CodeRay -module Scanners - - # Scanner for JSON (JavaScript Object Notation). - class JSON < Scanner - - register_for :json - file_extension 'json' - - KINDS_NOT_LOC = [ - :float, :char, :content, :delimiter, - :error, :integer, :operator, :value, - ] # :nodoc: - - ESCAPE = / [bfnrt\\"\/] /x # :nodoc: - UNICODE_ESCAPE = / u[a-fA-F0-9]{4} /x # :nodoc: - KEY = / (?> (?: [^\\"]+ | \\. )* ) " \s* : /x - - protected - - def setup - @state = :initial - end - - # See http://json.org/ for a definition of the JSON lexic/grammar. - def scan_tokens encoder, options - state = options[:state] || @state - - if [:string, :key].include? state - encoder.begin_group state - end - - until eos? - - case state - - when :initial - if match = scan(/ \s+ /x) - encoder.text_token match, :space - elsif match = scan(/"/) - state = check(/#{KEY}/o) ? :key : :string - encoder.begin_group state - encoder.text_token match, :delimiter - elsif match = scan(/ [:,\[{\]}] /x) - encoder.text_token match, :operator - elsif match = scan(/ true | false | null /x) - encoder.text_token match, :value - elsif match = scan(/ -? (?: 0 | [1-9]\d* ) /x) - if scan(/ \.\d+ (?:[eE][-+]?\d+)? | [eE][-+]? \d+ /x) - match << matched - encoder.text_token match, :float - else - encoder.text_token match, :integer - end - else - encoder.text_token getch, :error - end - - when :string, :key - if match = scan(/[^\\"]+/) - encoder.text_token match, :content - elsif match = scan(/"/) - encoder.text_token match, :delimiter - encoder.end_group state - state = :initial - elsif match = scan(/ \\ (?: #{ESCAPE} | #{UNICODE_ESCAPE} ) /mox) - encoder.text_token match, :char - elsif match = scan(/\\./m) - encoder.text_token match, :content - elsif match = scan(/ \\ | $ /x) - encoder.end_group state - encoder.text_token match, :error unless match.empty? - state = :initial - else - raise_inspect "else case \" reached; %p not handled." % peek(1), encoder - end - - else - raise_inspect 'Unknown state: %p' % [state], encoder - - end - end - - if options[:keep_state] - @state = state - end - - if [:string, :key].include? state - encoder.end_group state - end - - encoder - end - - end - -end -end diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/lua.rb b/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/lua.rb deleted file mode 100644 index 81d7dae4..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/lua.rb +++ /dev/null @@ -1,280 +0,0 @@ -# encoding: utf-8 - -module CodeRay -module Scanners - - # Scanner for the Lua[http://lua.org] programming lanuage. - # - # The language’s complete syntax is defined in - # {the Lua manual}[http://www.lua.org/manual/5.2/manual.html], - # which is what this scanner tries to conform to. - class Lua < Scanner - - register_for :lua - file_extension 'lua' - title 'Lua' - - # Keywords used in Lua. - KEYWORDS = %w[and break do else elseif end - for function goto if in - local not or repeat return - then until while - ] - - # Constants set by the Lua core. - PREDEFINED_CONSTANTS = %w[false true nil] - - # The expressions contained in this array are parts of Lua’s `basic' - # library. Although it’s not entirely necessary to load that library, - # it is highly recommended and one would have to provide own implementations - # of some of these expressions if one does not do so. They however aren’t - # keywords, neither are they constants, but nearly predefined, so they - # get tagged as `predefined' rather than anything else. - # - # This list excludes values of form `_UPPERCASE' because the Lua manual - # requires such identifiers to be reserved by Lua anyway and they are - # highlighted directly accordingly, without the need for specific - # identifiers to be listed here. - PREDEFINED_EXPRESSIONS = %w[ - assert collectgarbage dofile error getmetatable - ipairs load loadfile next pairs pcall print - rawequal rawget rawlen rawset select setmetatable - tonumber tostring type xpcall - ] - - # Automatic token kind selection for normal words. - IDENT_KIND = CodeRay::WordList.new(:ident). - add(KEYWORDS, :keyword). - add(PREDEFINED_CONSTANTS, :predefined_constant). - add(PREDEFINED_EXPRESSIONS, :predefined) - - protected - - # Scanner initialization. - def setup - @state = :initial - @brace_depth = 0 - end - - # CodeRay entry hook. Starts parsing. - def scan_tokens(encoder, options) - state = options[:state] || @state - brace_depth = @brace_depth - num_equals = nil - - until eos? - case state - - when :initial - if match = scan(/\-\-\[\=*\[/) #--[[ long (possibly multiline) comment ]] - num_equals = match.count("=") # Number must match for comment end - encoder.begin_group(:comment) - encoder.text_token(match, :delimiter) - state = :long_comment - - elsif match = scan(/--.*$/) # --Lua comment - encoder.text_token(match, :comment) - - elsif match = scan(/\[=*\[/) # [[ long (possibly multiline) string ]] - num_equals = match.count("=") # Number must match for string end - encoder.begin_group(:string) - encoder.text_token(match, :delimiter) - state = :long_string - - elsif match = scan(/::\s*[a-zA-Z_][a-zA-Z0-9_]+\s*::/) # ::goto_label:: - encoder.text_token(match, :label) - - elsif match = scan(/_[A-Z]+/) # _UPPERCASE are names reserved for Lua - encoder.text_token(match, :predefined) - - elsif match = scan(/[a-zA-Z_][a-zA-Z0-9_]*/) # Normal letters (or letters followed by digits) - kind = IDENT_KIND[match] - - # Extra highlighting for entities following certain keywords - if kind == :keyword and match == "function" - state = :function_expected - elsif kind == :keyword and match == "goto" - state = :goto_label_expected - elsif kind == :keyword and match == "local" - state = :local_var_expected - end - - encoder.text_token(match, kind) - - elsif match = scan(/\{/) # Opening table brace { - encoder.begin_group(:map) - encoder.text_token(match, brace_depth >= 1 ? :inline_delimiter : :delimiter) - brace_depth += 1 - state = :map - - elsif match = scan(/\}/) # Closing table brace } - if brace_depth == 1 - brace_depth = 0 - encoder.text_token(match, :delimiter) - encoder.end_group(:map) - elsif brace_depth == 0 # Mismatched brace - encoder.text_token(match, :error) - else - brace_depth -= 1 - encoder.text_token(match, :inline_delimiter) - encoder.end_group(:map) - state = :map - end - - elsif match = scan(/["']/) # String delimiters " and ' - encoder.begin_group(:string) - encoder.text_token(match, :delimiter) - start_delim = match - state = :string - - # ↓Prefix hex number ←|→ decimal number - elsif match = scan(/-? (?:0x\h* \. \h+ (?:p[+\-]?\d+)? | \d*\.\d+ (?:e[+\-]?\d+)?)/ix) # hexadecimal constants have no E power, decimal ones no P power - encoder.text_token(match, :float) - - # ↓Prefix hex number ←|→ decimal number - elsif match = scan(/-? (?:0x\h+ (?:p[+\-]?\d+)? | \d+ (?:e[+\-]?\d+)?)/ix) # hexadecimal constants have no E power, decimal ones no P power - encoder.text_token(match, :integer) - - elsif match = scan(/[\+\-\*\/%^\#=~<>\(\)\[\]:;,] | \.(?!\d)/x) # Operators - encoder.text_token(match, :operator) - - elsif match = scan(/\s+/) # Space - encoder.text_token(match, :space) - - else # Invalid stuff. Note that Lua doesn’t accept multibyte chars outside of strings, hence these are also errors. - encoder.text_token(getch, :error) - end - - # It may be that we’re scanning a full-blown subexpression of a table - # (tables can contain full expressions in parts). - # If this is the case, return to :map scanning state. - state = :map if state == :initial && brace_depth >= 1 - - when :function_expected - if match = scan(/\(.*?\)/m) # x = function() # "Anonymous" function without explicit name - encoder.text_token(match, :operator) - state = :initial - elsif match = scan(/[a-zA-Z_] (?:[a-zA-Z0-9_\.] (?!\.\d))* [\.\:]/x) # function tbl.subtbl.foo() | function tbl:foo() # Colon only allowed as last separator - encoder.text_token(match, :ident) - elsif match = scan(/[a-zA-Z_][a-zA-Z0-9_]*/) # function foo() - encoder.text_token(match, :function) - state = :initial - elsif match = scan(/\s+/) # Between the `function' keyword and the ident may be any amount of whitespace - encoder.text_token(match, :space) - else - encoder.text_token(getch, :error) - state = :initial - end - - when :goto_label_expected - if match = scan(/[a-zA-Z_][a-zA-Z0-9_]*/) - encoder.text_token(match, :label) - state = :initial - elsif match = scan(/\s+/) # Between the `goto' keyword and the label may be any amount of whitespace - encoder.text_token(match, :space) - else - encoder.text_token(getch, :error) - end - - when :local_var_expected - if match = scan(/function/) # local function ... - encoder.text_token(match, :keyword) - state = :function_expected - elsif match = scan(/[a-zA-Z_][a-zA-Z0-9_]*/) - encoder.text_token(match, :local_variable) - elsif match = scan(/,/) - encoder.text_token(match, :operator) - elsif match = scan(/\=/) - encoder.text_token(match, :operator) - # After encountering the equal sign, arbitrary expressions are - # allowed again, so just return to the main state for further - # parsing. - state = :initial - elsif match = scan(/\n/) - encoder.text_token(match, :space) - state = :initial - elsif match = scan(/\s+/) - encoder.text_token(match, :space) - else - encoder.text_token(getch, :error) - end - - when :long_comment - if match = scan(/.*?(?=\]={#{num_equals}}\])/m) - encoder.text_token(match, :content) - - delim = scan(/\]={#{num_equals}}\]/) - encoder.text_token(delim, :delimiter) - else # No terminator found till EOF - encoder.text_token(rest, :error) - terminate - end - encoder.end_group(:comment) - state = :initial - - when :long_string - if match = scan(/.*?(?=\]={#{num_equals}}\])/m) # Long strings do not interpret any escape sequences - encoder.text_token(match, :content) - - delim = scan(/\]={#{num_equals}}\]/) - encoder.text_token(delim, :delimiter) - else # No terminator found till EOF - encoder.text_token(rest, :error) - terminate - end - encoder.end_group(:string) - state = :initial - - when :string - if match = scan(/[^\\#{start_delim}\n]+/) # Everything except \ and the start delimiter character is string content (newlines are only allowed if preceeded by \ or \z) - encoder.text_token(match, :content) - elsif match = scan(/\\(?:['"abfnrtv\\]|z\s*|x\h\h|\d{1,3}|\n)/m) - encoder.text_token(match, :char) - elsif match = scan(Regexp.compile(start_delim)) - encoder.text_token(match, :delimiter) - encoder.end_group(:string) - state = :initial - elsif match = scan(/\n/) # Lua forbids unescaped newlines in normal non-long strings - encoder.text_token("\\n\n", :error) # Visually appealing error indicator--otherwise users may wonder whether the highlighter cannot highlight multine strings - encoder.end_group(:string) - state = :initial - else - encoder.text_token(getch, :error) - end - - when :map - if match = scan(/[,;]/) - encoder.text_token(match, :operator) - elsif match = scan(/[a-zA-Z_][a-zA-Z0-9_]* (?=\s*=)/x) - encoder.text_token(match, :key) - encoder.text_token(scan(/\s+/), :space) if check(/\s+/) - encoder.text_token(scan(/\=/), :operator) - state = :initial - elsif match = scan(/\s+/m) - encoder.text_token(match, :space) - else - # Note this clause doesn’t advance the scan pointer, it’s a kind of - # "retry with other options" (the :initial state then of course - # advances the pointer). - state = :initial - end - else - raise - end - - end - - if options[:keep_state] - @state = state - end - - encoder.end_group :string if [:string].include? state - brace_depth.times { encoder.end_group :map } - - encoder - end - - end - -end -end diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/php.rb b/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/php.rb deleted file mode 100644 index 7a8d75d9..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/php.rb +++ /dev/null @@ -1,527 +0,0 @@ -# encoding: utf-8 -module CodeRay -module Scanners - - load :html - - # Scanner for PHP. - # - # Original by Stefan Walk. - class PHP < Scanner - - register_for :php - file_extension 'php' - - KINDS_NOT_LOC = HTML::KINDS_NOT_LOC - - protected - - def setup - @html_scanner = CodeRay.scanner :html, :tokens => @tokens, :keep_tokens => true, :keep_state => true - end - - def reset_instance - super - @html_scanner.reset - end - - module Words # :nodoc: - - # according to http://www.php.net/manual/en/reserved.keywords.php - KEYWORDS = %w[ - abstract and array as break case catch class clone const continue declare default do else elseif - enddeclare endfor endforeach endif endswitch endwhile extends final for foreach function global - goto if implements interface instanceof namespace new or private protected public static switch - throw try use var while xor - cfunction old_function - ] - - TYPES = %w[ int integer float double bool boolean string array object resource ] - - LANGUAGE_CONSTRUCTS = %w[ - die echo empty exit eval include include_once isset list - require require_once return print unset - ] - - CLASSES = %w[ Directory stdClass __PHP_Incomplete_Class exception php_user_filter Closure ] - - # according to http://php.net/quickref.php on 2009-04-21; - # all functions with _ excluded (module functions) and selected additional functions - BUILTIN_FUNCTIONS = %w[ - abs acos acosh addcslashes addslashes aggregate array arsort ascii2ebcdic asin asinh asort assert atan atan2 - atanh basename bcadd bccomp bcdiv bcmod bcmul bcpow bcpowmod bcscale bcsqrt bcsub bin2hex bindec - bindtextdomain bzclose bzcompress bzdecompress bzerrno bzerror bzerrstr bzflush bzopen bzread bzwrite - calculhmac ceil chdir checkdate checkdnsrr chgrp chmod chop chown chr chroot clearstatcache closedir closelog - compact constant copy cos cosh count crc32 crypt current date dcgettext dcngettext deaggregate decbin dechex - decoct define defined deg2rad delete dgettext die dirname diskfreespace dl dngettext doubleval each - ebcdic2ascii echo empty end ereg eregi escapeshellarg escapeshellcmd eval exec exit exp explode expm1 extract - fclose feof fflush fgetc fgetcsv fgets fgetss file fileatime filectime filegroup fileinode filemtime fileowner - fileperms filepro filesize filetype floatval flock floor flush fmod fnmatch fopen fpassthru fprintf fputcsv - fputs fread frenchtojd fscanf fseek fsockopen fstat ftell ftok ftruncate fwrite getallheaders getcwd getdate - getenv gethostbyaddr gethostbyname gethostbynamel getimagesize getlastmod getmxrr getmygid getmyinode getmypid - getmyuid getopt getprotobyname getprotobynumber getrandmax getrusage getservbyname getservbyport gettext - gettimeofday gettype glob gmdate gmmktime gmstrftime gregoriantojd gzclose gzcompress gzdecode gzdeflate - gzencode gzeof gzfile gzgetc gzgets gzgetss gzinflate gzopen gzpassthru gzputs gzread gzrewind gzseek gztell - gzuncompress gzwrite hash header hebrev hebrevc hexdec htmlentities htmlspecialchars hypot iconv idate - implode include intval ip2long iptcembed iptcparse isset - jddayofweek jdmonthname jdtofrench jdtogregorian jdtojewish jdtojulian jdtounix jewishtojd join jpeg2wbmp - juliantojd key krsort ksort lcfirst lchgrp lchown levenshtein link linkinfo list localeconv localtime log - log10 log1p long2ip lstat ltrim mail main max md5 metaphone mhash microtime min mkdir mktime msql natcasesort - natsort next ngettext nl2br nthmac octdec opendir openlog - ord overload pack passthru pathinfo pclose pfsockopen phpcredits phpinfo phpversion pi png2wbmp popen pos pow - prev print printf putenv quotemeta rad2deg rand range rawurldecode rawurlencode readdir readfile readgzfile - readline readlink realpath recode rename require reset rewind rewinddir rmdir round rsort rtrim scandir - serialize setcookie setlocale setrawcookie settype sha1 shuffle signeurlpaiement sin sinh sizeof sleep snmpget - snmpgetnext snmprealwalk snmpset snmpwalk snmpwalkoid sort soundex split spliti sprintf sqrt srand sscanf stat - strcasecmp strchr strcmp strcoll strcspn strftime stripcslashes stripos stripslashes stristr strlen - strnatcasecmp strnatcmp strncasecmp strncmp strpbrk strpos strptime strrchr strrev strripos strrpos strspn - strstr strtok strtolower strtotime strtoupper strtr strval substr symlink syslog system tan tanh tempnam - textdomain time tmpfile touch trim uasort ucfirst ucwords uksort umask uniqid unixtojd unlink unpack - unserialize unset urldecode urlencode usleep usort vfprintf virtual vprintf vsprintf wordwrap - array_change_key_case array_chunk array_combine array_count_values array_diff array_diff_assoc - array_diff_key array_diff_uassoc array_diff_ukey array_fill array_fill_keys array_filter array_flip - array_intersect array_intersect_assoc array_intersect_key array_intersect_uassoc array_intersect_ukey - array_key_exists array_keys array_map array_merge array_merge_recursive array_multisort array_pad - array_pop array_product array_push array_rand array_reduce array_reverse array_search array_shift - array_slice array_splice array_sum array_udiff array_udiff_assoc array_udiff_uassoc array_uintersect - array_uintersect_assoc array_uintersect_uassoc array_unique array_unshift array_values array_walk - array_walk_recursive - assert_options base_convert base64_decode base64_encode - chunk_split class_exists class_implements class_parents - count_chars debug_backtrace debug_print_backtrace debug_zval_dump - error_get_last error_log error_reporting extension_loaded - file_exists file_get_contents file_put_contents load_file - func_get_arg func_get_args func_num_args function_exists - get_browser get_called_class get_cfg_var get_class get_class_methods get_class_vars - get_current_user get_declared_classes get_declared_interfaces get_defined_constants - get_defined_functions get_defined_vars get_extension_funcs get_headers get_html_translation_table - get_include_path get_included_files get_loaded_extensions get_magic_quotes_gpc get_magic_quotes_runtime - get_meta_tags get_object_vars get_parent_class get_required_filesget_resource_type - gc_collect_cycles gc_disable gc_enable gc_enabled - halt_compiler headers_list headers_sent highlight_file highlight_string - html_entity_decode htmlspecialchars_decode - in_array include_once inclued_get_data - is_a is_array is_binary is_bool is_buffer is_callable is_dir is_double is_executable is_file is_finite - is_float is_infinite is_int is_integer is_link is_long is_nan is_null is_numeric is_object is_readable - is_real is_resource is_scalar is_soap_fault is_string is_subclass_of is_unicode is_uploaded_file - is_writable is_writeable - locale_get_default locale_set_default - number_format override_function parse_str parse_url - php_check_syntax php_ini_loaded_file php_ini_scanned_files php_logo_guid php_sapi_name - php_strip_whitespace php_uname - preg_filter preg_grep preg_last_error preg_match preg_match_all preg_quote preg_replace - preg_replace_callback preg_split print_r - require_once register_shutdown_function register_tick_function - set_error_handler set_exception_handler set_file_buffer set_include_path - set_magic_quotes_runtime set_time_limit shell_exec - str_getcsv str_ireplace str_pad str_repeat str_replace str_rot13 str_shuffle str_split str_word_count - strip_tags substr_compare substr_count substr_replace - time_nanosleep time_sleep_until - token_get_all token_name trigger_error - unregister_tick_function use_soap_error_handler user_error - utf8_decode utf8_encode var_dump var_export - version_compare - zend_logo_guid zend_thread_id zend_version - create_function call_user_func_array - posix_access posix_ctermid posix_get_last_error posix_getcwd posix_getegid - posix_geteuid posix_getgid posix_getgrgid posix_getgrnam posix_getgroups - posix_getlogin posix_getpgid posix_getpgrp posix_getpid posix_getppid - posix_getpwnam posix_getpwuid posix_getrlimit posix_getsid posix_getuid - posix_initgroups posix_isatty posix_kill posix_mkfifo posix_mknod - posix_setegid posix_seteuid posix_setgid posix_setpgid posix_setsid - posix_setuid posix_strerror posix_times posix_ttyname posix_uname - pcntl_alarm pcntl_exec pcntl_fork pcntl_getpriority pcntl_setpriority - pcntl_signal pcntl_signal_dispatch pcntl_sigprocmask pcntl_sigtimedwait - pcntl_sigwaitinfo pcntl_wait pcntl_waitpid pcntl_wexitstatus pcntl_wifexited - pcntl_wifsignaled pcntl_wifstopped pcntl_wstopsig pcntl_wtermsig - ] - # TODO: more built-in PHP functions? - - EXCEPTIONS = %w[ - E_ERROR E_WARNING E_PARSE E_NOTICE E_CORE_ERROR E_CORE_WARNING E_COMPILE_ERROR E_COMPILE_WARNING - E_USER_ERROR E_USER_WARNING E_USER_NOTICE E_DEPRECATED E_USER_DEPRECATED E_ALL E_STRICT - ] - - CONSTANTS = %w[ - null true false self parent - __LINE__ __DIR__ __FILE__ __LINE__ - __CLASS__ __NAMESPACE__ __METHOD__ __FUNCTION__ - PHP_VERSION PHP_MAJOR_VERSION PHP_MINOR_VERSION PHP_RELEASE_VERSION PHP_VERSION_ID PHP_EXTRA_VERSION PHP_ZTS - PHP_DEBUG PHP_MAXPATHLEN PHP_OS PHP_SAPI PHP_EOL PHP_INT_MAX PHP_INT_SIZE DEFAULT_INCLUDE_PATH - PEAR_INSTALL_DIR PEAR_EXTENSION_DIR PHP_EXTENSION_DIR PHP_PREFIX PHP_BINDIR PHP_LIBDIR PHP_DATADIR - PHP_SYSCONFDIR PHP_LOCALSTATEDIR PHP_CONFIG_FILE_PATH PHP_CONFIG_FILE_SCAN_DIR PHP_SHLIB_SUFFIX - PHP_OUTPUT_HANDLER_START PHP_OUTPUT_HANDLER_CONT PHP_OUTPUT_HANDLER_END - __COMPILER_HALT_OFFSET__ - EXTR_OVERWRITE EXTR_SKIP EXTR_PREFIX_SAME EXTR_PREFIX_ALL EXTR_PREFIX_INVALID EXTR_PREFIX_IF_EXISTS - EXTR_IF_EXISTS SORT_ASC SORT_DESC SORT_REGULAR SORT_NUMERIC SORT_STRING CASE_LOWER CASE_UPPER COUNT_NORMAL - COUNT_RECURSIVE ASSERT_ACTIVE ASSERT_CALLBACK ASSERT_BAIL ASSERT_WARNING ASSERT_QUIET_EVAL CONNECTION_ABORTED - CONNECTION_NORMAL CONNECTION_TIMEOUT INI_USER INI_PERDIR INI_SYSTEM INI_ALL M_E M_LOG2E M_LOG10E M_LN2 M_LN10 - M_PI M_PI_2 M_PI_4 M_1_PI M_2_PI M_2_SQRTPI M_SQRT2 M_SQRT1_2 CRYPT_SALT_LENGTH CRYPT_STD_DES CRYPT_EXT_DES - CRYPT_MD5 CRYPT_BLOWFISH DIRECTORY_SEPARATOR SEEK_SET SEEK_CUR SEEK_END LOCK_SH LOCK_EX LOCK_UN LOCK_NB - HTML_SPECIALCHARS HTML_ENTITIES ENT_COMPAT ENT_QUOTES ENT_NOQUOTES INFO_GENERAL INFO_CREDITS - INFO_CONFIGURATION INFO_MODULES INFO_ENVIRONMENT INFO_VARIABLES INFO_LICENSE INFO_ALL CREDITS_GROUP - CREDITS_GENERAL CREDITS_SAPI CREDITS_MODULES CREDITS_DOCS CREDITS_FULLPAGE CREDITS_QA CREDITS_ALL STR_PAD_LEFT - STR_PAD_RIGHT STR_PAD_BOTH PATHINFO_DIRNAME PATHINFO_BASENAME PATHINFO_EXTENSION PATH_SEPARATOR CHAR_MAX - LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_ALL LC_MESSAGES ABDAY_1 ABDAY_2 ABDAY_3 ABDAY_4 ABDAY_5 - ABDAY_6 ABDAY_7 DAY_1 DAY_2 DAY_3 DAY_4 DAY_5 DAY_6 DAY_7 ABMON_1 ABMON_2 ABMON_3 ABMON_4 ABMON_5 ABMON_6 - ABMON_7 ABMON_8 ABMON_9 ABMON_10 ABMON_11 ABMON_12 MON_1 MON_2 MON_3 MON_4 MON_5 MON_6 MON_7 MON_8 MON_9 - MON_10 MON_11 MON_12 AM_STR PM_STR D_T_FMT D_FMT T_FMT T_FMT_AMPM ERA ERA_YEAR ERA_D_T_FMT ERA_D_FMT ERA_T_FMT - ALT_DIGITS INT_CURR_SYMBOL CURRENCY_SYMBOL CRNCYSTR MON_DECIMAL_POINT MON_THOUSANDS_SEP MON_GROUPING - POSITIVE_SIGN NEGATIVE_SIGN INT_FRAC_DIGITS FRAC_DIGITS P_CS_PRECEDES P_SEP_BY_SPACE N_CS_PRECEDES - N_SEP_BY_SPACE P_SIGN_POSN N_SIGN_POSN DECIMAL_POINT RADIXCHAR THOUSANDS_SEP THOUSEP GROUPING YESEXPR NOEXPR - YESSTR NOSTR CODESET LOG_EMERG LOG_ALERT LOG_CRIT LOG_ERR LOG_WARNING LOG_NOTICE LOG_INFO LOG_DEBUG LOG_KERN - LOG_USER LOG_MAIL LOG_DAEMON LOG_AUTH LOG_SYSLOG LOG_LPR LOG_NEWS LOG_UUCP LOG_CRON LOG_AUTHPRIV LOG_LOCAL0 - LOG_LOCAL1 LOG_LOCAL2 LOG_LOCAL3 LOG_LOCAL4 LOG_LOCAL5 LOG_LOCAL6 LOG_LOCAL7 LOG_PID LOG_CONS LOG_ODELAY - LOG_NDELAY LOG_NOWAIT LOG_PERROR - ] - - PREDEFINED = %w[ - $GLOBALS $_SERVER $_GET $_POST $_FILES $_REQUEST $_SESSION $_ENV - $_COOKIE $php_errormsg $HTTP_RAW_POST_DATA $http_response_header - $argc $argv - ] - - IDENT_KIND = WordList::CaseIgnoring.new(:ident). - add(KEYWORDS, :keyword). - add(TYPES, :predefined_type). - add(LANGUAGE_CONSTRUCTS, :keyword). - add(BUILTIN_FUNCTIONS, :predefined). - add(CLASSES, :predefined_constant). - add(EXCEPTIONS, :exception). - add(CONSTANTS, :predefined_constant) - - VARIABLE_KIND = WordList.new(:local_variable). - add(PREDEFINED, :predefined) - end - - module RE # :nodoc: - - PHP_START = / - ]*?language\s*=\s*"php"[^>]*?> | - ]*?language\s*=\s*'php'[^>]*?> | - <\?php\d? | - <\?(?!xml) - /xi - - PHP_END = %r! - | - \?> - !xi - - HTML_INDICATOR = / ]/i - - IDENTIFIER = 'ä'[/[[:alpha:]]/] == 'ä' ? Regexp.new('[[:alpha:]_[^\0-\177]][[:alnum:]_[^\0-\177]]*') : Regexp.new('[a-z_\x7f-\xFF][a-z0-9_\x7f-\xFF]*', true) - VARIABLE = /\$#{IDENTIFIER}/ - - OPERATOR = / - \.(?!\d)=? | # dot that is not decimal point, string concatenation - && | \|\| | # logic - :: | -> | => | # scope, member, dictionary - \\(?!\n) | # namespace - \+\+ | -- | # increment, decrement - [,;?:()\[\]{}] | # simple delimiters - [-+*\/%&|^]=? | # ordinary math, binary logic, assignment shortcuts - [~$] | # whatever - =& | # reference assignment - [=!]=?=? | <> | # comparison and assignment - <<=? | >>=? | [<>]=? # comparison and shift - /x - - end - - protected - - def scan_tokens encoder, options - - if check(RE::PHP_START) || # starts with #{RE::IDENTIFIER}/o) - encoder.begin_group :inline - encoder.text_token match, :local_variable - encoder.text_token scan(/->/), :operator - encoder.text_token scan(/#{RE::IDENTIFIER}/o), :ident - encoder.end_group :inline - elsif check(/->/) - match << scan(/->/) - encoder.text_token match, :error - else - encoder.text_token match, :local_variable - end - elsif match = scan(/\{/) - if check(/\$/) - encoder.begin_group :inline - states[-1] = [states.last, delimiter] - delimiter = nil - states.push :php_inline - encoder.text_token match, :delimiter - else - encoder.text_token match, :content - end - elsif match = scan(/\$\{#{RE::IDENTIFIER}\}/o) - encoder.text_token match, :local_variable - elsif match = scan(/\$/) - encoder.text_token match, :content - else - encoder.end_group :string - states.pop - end - - when :class_expected - if match = scan(/\s+/) - encoder.text_token match, :space - elsif match = scan(/#{RE::IDENTIFIER}/o) - encoder.text_token match, :class - states.pop - else - states.pop - end - - when :function_expected - if match = scan(/\s+/) - encoder.text_token match, :space - elsif match = scan(/&/) - encoder.text_token match, :operator - elsif match = scan(/#{RE::IDENTIFIER}/o) - encoder.text_token match, :function - states.pop - else - states.pop - end - - else - raise_inspect 'Unknown state!', encoder, states - end - - end - - while state = states.pop - encoder.end_group :string if [:sqstring, :dqstring].include? state - if state.is_a? Array - encoder.end_group :inline - encoder.end_group :string if [:sqstring, :dqstring].include? state.first - end - end - - encoder - end - - end - -end -end diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/python.rb b/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/python.rb deleted file mode 100644 index 5da553a6..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/python.rb +++ /dev/null @@ -1,287 +0,0 @@ -module CodeRay -module Scanners - - # Scanner for Python. Supports Python 3. - # - # Based on pygments' PythonLexer, see - # http://dev.pocoo.org/projects/pygments/browser/pygments/lexers/agile.py. - class Python < Scanner - - register_for :python - file_extension 'py' - - KEYWORDS = [ - 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', - 'del', 'elif', 'else', 'except', 'finally', 'for', - 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', - 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield', - 'nonlocal', # new in Python 3 - ] # :nodoc: - - OLD_KEYWORDS = [ - 'exec', 'print', # gone in Python 3 - ] # :nodoc: - - PREDEFINED_METHODS_AND_TYPES = %w[ - __import__ abs all any apply basestring bin bool buffer - bytearray bytes callable chr classmethod cmp coerce compile - complex delattr dict dir divmod enumerate eval execfile exit - file filter float frozenset getattr globals hasattr hash hex id - input int intern isinstance issubclass iter len list locals - long map max min next object oct open ord pow property range - raw_input reduce reload repr reversed round set setattr slice - sorted staticmethod str sum super tuple type unichr unicode - vars xrange zip - ] # :nodoc: - - PREDEFINED_EXCEPTIONS = %w[ - ArithmeticError AssertionError AttributeError - BaseException DeprecationWarning EOFError EnvironmentError - Exception FloatingPointError FutureWarning GeneratorExit IOError - ImportError ImportWarning IndentationError IndexError KeyError - KeyboardInterrupt LookupError MemoryError NameError - NotImplemented NotImplementedError OSError OverflowError - OverflowWarning PendingDeprecationWarning ReferenceError - RuntimeError RuntimeWarning StandardError StopIteration - SyntaxError SyntaxWarning SystemError SystemExit TabError - TypeError UnboundLocalError UnicodeDecodeError - UnicodeEncodeError UnicodeError UnicodeTranslateError - UnicodeWarning UserWarning ValueError Warning ZeroDivisionError - ] # :nodoc: - - PREDEFINED_VARIABLES_AND_CONSTANTS = [ - 'False', 'True', 'None', # "keywords" since Python 3 - 'self', 'Ellipsis', 'NotImplemented', - ] # :nodoc: - - IDENT_KIND = WordList.new(:ident). - add(KEYWORDS, :keyword). - add(OLD_KEYWORDS, :old_keyword). - add(PREDEFINED_METHODS_AND_TYPES, :predefined). - add(PREDEFINED_VARIABLES_AND_CONSTANTS, :predefined_constant). - add(PREDEFINED_EXCEPTIONS, :exception) # :nodoc: - - NAME = / [[:alpha:]_] \w* /x # :nodoc: - ESCAPE = / [abfnrtv\n\\'"] | x[a-fA-F0-9]{1,2} | [0-7]{1,3} /x # :nodoc: - UNICODE_ESCAPE = / u[a-fA-F0-9]{4} | U[a-fA-F0-9]{8} | N\{[-\w ]+\} /x # :nodoc: - - OPERATOR = / - \.\.\. | # ellipsis - \.(?!\d) | # dot but not decimal point - [,;:()\[\]{}] | # simple delimiters - \/\/=? | \*\*=? | # special math - [-+*\/%&|^]=? | # ordinary math and binary logic - [~`] | # binary complement and inspection - <<=? | >>=? | [<>=]=? | != # comparison and assignment - /x # :nodoc: - - STRING_DELIMITER_REGEXP = Hash.new { |h, delimiter| - h[delimiter] = Regexp.union delimiter # :nodoc: - } - - STRING_CONTENT_REGEXP = Hash.new { |h, delimiter| - h[delimiter] = / [^\\\n]+? (?= \\ | $ | #{Regexp.escape(delimiter)} ) /x # :nodoc: - } - - DEF_NEW_STATE = WordList.new(:initial). - add(%w(def), :def_expected). - add(%w(import from), :include_expected). - add(%w(class), :class_expected) # :nodoc: - - DESCRIPTOR = / - #{NAME} - (?: \. #{NAME} )* - | \* - /x # :nodoc: - - DOCSTRING_COMING = / - [ \t]* u?r? ("""|''') - /x # :nodoc: - - protected - - def scan_tokens encoder, options - - state = :initial - string_delimiter = nil - string_raw = false - string_type = nil - docstring_coming = match?(/#{DOCSTRING_COMING}/o) - last_token_dot = false - unicode = string.respond_to?(:encoding) && string.encoding.name == 'UTF-8' - from_import_state = [] - - until eos? - - if state == :string - if match = scan(STRING_DELIMITER_REGEXP[string_delimiter]) - encoder.text_token match, :delimiter - encoder.end_group string_type - string_type = nil - state = :initial - next - elsif string_delimiter.size == 3 && match = scan(/\n/) - encoder.text_token match, :content - elsif match = scan(STRING_CONTENT_REGEXP[string_delimiter]) - encoder.text_token match, :content - elsif !string_raw && match = scan(/ \\ #{ESCAPE} /ox) - encoder.text_token match, :char - elsif match = scan(/ \\ #{UNICODE_ESCAPE} /ox) - encoder.text_token match, :char - elsif match = scan(/ \\ . /x) - encoder.text_token match, :content - elsif match = scan(/ \\ | $ /x) - encoder.end_group string_type - string_type = nil - encoder.text_token match, :error unless match.empty? - state = :initial - else - raise_inspect "else case \" reached; %p not handled." % peek(1), encoder, state - end - - elsif match = scan(/ [ \t]+ | \\?\n /x) - encoder.text_token match, :space - if match == "\n" - state = :initial if state == :include_expected - docstring_coming = true if match?(/#{DOCSTRING_COMING}/o) - end - next - - elsif match = scan(/ \# [^\n]* /mx) - encoder.text_token match, :comment - next - - elsif state == :initial - - if match = scan(/#{OPERATOR}/o) - encoder.text_token match, :operator - - elsif match = scan(/(u?r?|b)?("""|"|'''|')/i) - modifiers = self[1] - string_delimiter = self[2] - string_type = docstring_coming ? :docstring : (modifiers == 'b' ? :binary : :string) - docstring_coming = false if docstring_coming - encoder.begin_group string_type - string_raw = false - unless modifiers.empty? - string_raw = !!modifiers.index(?r) - encoder.text_token modifiers, :modifier - match = string_delimiter - end - state = :string - encoder.text_token match, :delimiter - - # TODO: backticks - - elsif match = scan(unicode ? /#{NAME}/uo : /#{NAME}/o) - kind = IDENT_KIND[match] - # TODO: keyword arguments - kind = :ident if last_token_dot - if kind == :old_keyword - kind = check(/\(/) ? :ident : :keyword - elsif kind == :predefined && check(/ *=/) - kind = :ident - elsif kind == :keyword - state = DEF_NEW_STATE[match] - from_import_state << match.to_sym if state == :include_expected - end - encoder.text_token match, kind - - elsif match = scan(/@[a-zA-Z0-9_.]+[lL]?/) - encoder.text_token match, :decorator - - elsif match = scan(/0[xX][0-9A-Fa-f]+[lL]?/) - encoder.text_token match, :hex - - elsif match = scan(/0[bB][01]+[lL]?/) - encoder.text_token match, :binary - - elsif match = scan(/(?:\d*\.\d+|\d+\.\d*)(?:[eE][+-]?\d+)?|\d+[eE][+-]?\d+/) - if scan(/[jJ]/) - match << matched - encoder.text_token match, :imaginary - else - encoder.text_token match, :float - end - - elsif match = scan(/0[oO][0-7]+|0[0-7]+(?![89.eE])[lL]?/) - encoder.text_token match, :octal - - elsif match = scan(/\d+([lL])?/) - if self[1] == nil && scan(/[jJ]/) - match << matched - encoder.text_token match, :imaginary - else - encoder.text_token match, :integer - end - - else - encoder.text_token getch, :error - - end - - elsif state == :def_expected - state = :initial - if match = scan(unicode ? /#{NAME}/uo : /#{NAME}/o) - encoder.text_token match, :method - else - next - end - - elsif state == :class_expected - state = :initial - if match = scan(unicode ? /#{NAME}/uo : /#{NAME}/o) - encoder.text_token match, :class - else - next - end - - elsif state == :include_expected - if match = scan(unicode ? /#{DESCRIPTOR}/uo : /#{DESCRIPTOR}/o) - if match == 'as' - encoder.text_token match, :keyword - from_import_state << :as - elsif from_import_state.first == :from && match == 'import' - encoder.text_token match, :keyword - from_import_state << :import - elsif from_import_state.last == :as - # encoder.text_token match, match[0,1][unicode ? /[[:upper:]]/u : /[[:upper:]]/] ? :class : :method - encoder.text_token match, :ident - from_import_state.pop - elsif IDENT_KIND[match] == :keyword - unscan - match = nil - state = :initial - next - else - encoder.text_token match, :include - end - elsif match = scan(/,/) - from_import_state.pop if from_import_state.last == :as - encoder.text_token match, :operator - else - from_import_state = [] - state = :initial - next - end - - else - raise_inspect 'Unknown state', encoder, state - - end - - last_token_dot = match == '.' - - end - - if state == :string - encoder.end_group string_type - end - - encoder - end - - end - -end -end diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/raydebug.rb b/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/raydebug.rb deleted file mode 100644 index 1effdc85..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/raydebug.rb +++ /dev/null @@ -1,75 +0,0 @@ -require 'set' - -module CodeRay -module Scanners - - # = Raydebug Scanner - # - # Highlights the output of the Encoders::Debug encoder. - class Raydebug < Scanner - - register_for :raydebug - file_extension 'raydebug' - title 'CodeRay Token Dump' - - protected - - def setup - super - @known_token_kinds = TokenKinds.keys.map(&:to_s).to_set - end - - def scan_tokens encoder, options - - opened_tokens = [] - - until eos? - - if match = scan(/\s+/) - encoder.text_token match, :space - - elsif match = scan(/ (\w+) \( ( [^\)\\]* ( \\. [^\)\\]* )* ) /x) - kind = self[1] - encoder.text_token kind, :class - encoder.text_token '(', :operator - match = self[2] - unless match.empty? - if @known_token_kinds.include? kind - encoder.text_token match, kind.to_sym - else - encoder.text_token match, :plain - end - end - encoder.text_token match, :operator if match = scan(/\)/) - - elsif match = scan(/ (\w+) ([<\[]) /x) - encoder.text_token self[1], :class - if @known_token_kinds.include? self[1] - kind = self[1].to_sym - else - kind = :unknown - end - opened_tokens << kind - encoder.begin_group kind - encoder.text_token self[2], :operator - - elsif !opened_tokens.empty? && match = scan(/ [>\]] /x) - encoder.text_token match, :operator - encoder.end_group opened_tokens.pop - - else - encoder.text_token getch, :space - - end - - end - - encoder.end_group opened_tokens.pop until opened_tokens.empty? - - encoder - end - - end - -end -end diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/ruby.rb b/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/ruby.rb deleted file mode 100644 index 5b8de42f..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/ruby.rb +++ /dev/null @@ -1,477 +0,0 @@ -module CodeRay -module Scanners - - # This scanner is really complex, since Ruby _is_ a complex language! - # - # It tries to highlight 100% of all common code, - # and 90% of strange codes. - # - # It is optimized for HTML highlighting, and is not very useful for - # parsing or pretty printing. - class Ruby < Scanner - - register_for :ruby - file_extension 'rb' - - autoload :Patterns, CodeRay.coderay_path('scanners', 'ruby', 'patterns') - autoload :StringState, CodeRay.coderay_path('scanners', 'ruby', 'string_state') - - def interpreted_string_state - StringState.new :string, true, '"' - end - - protected - - def setup - @state = :initial - end - - def scan_tokens encoder, options - state, heredocs = options[:state] || @state - heredocs = heredocs.dup if heredocs.is_a?(Array) - - if state && state.instance_of?(StringState) - encoder.begin_group state.type - end - - last_state = nil - - method_call_expected = false - value_expected = true - - inline_block_stack = nil - inline_block_curly_depth = 0 - - if heredocs - state = heredocs.shift - encoder.begin_group state.type - heredocs = nil if heredocs.empty? - end - - # def_object_stack = nil - # def_object_paren_depth = 0 - - patterns = Patterns # avoid constant lookup - - unicode = string.respond_to?(:encoding) && string.encoding.name == 'UTF-8' - - until eos? - - if state.instance_of? ::Symbol - - if match = scan(/[ \t\f\v]+/) - encoder.text_token match, :space - - elsif match = scan(/\n/) - if heredocs - unscan # heredoc scanning needs \n at start - state = heredocs.shift - encoder.begin_group state.type - heredocs = nil if heredocs.empty? - else - state = :initial if state == :undef_comma_expected - encoder.text_token match, :space - value_expected = true - end - - elsif match = scan(bol? ? / \#(!)?.* | #{patterns::RUBYDOC_OR_DATA} /ox : /\#.*/) - encoder.text_token match, self[1] ? :doctype : :comment - - elsif match = scan(/\\\n/) - if heredocs - unscan # heredoc scanning needs \n at start - encoder.text_token scan(/\\/), :space - state = heredocs.shift - encoder.begin_group state.type - heredocs = nil if heredocs.empty? - else - encoder.text_token match, :space - end - - elsif state == :initial - - # IDENTS # - if !method_call_expected && - match = scan(unicode ? /#{patterns::METHOD_NAME}/uo : - /#{patterns::METHOD_NAME}/o) - - kind = patterns::IDENT_KIND[match] - if value_expected != :colon_expected && scan(/:(?!:)/) - value_expected = true - encoder.text_token match, :key - encoder.text_token ':', :operator - else - value_expected = false - if kind == :ident - if match[/\A[A-Z]/] && !(match[/[!?]$/] || match?(/\(/)) - kind = :constant - end - elsif kind == :keyword - state = patterns::KEYWORD_NEW_STATE[match] - if patterns::KEYWORDS_EXPECTING_VALUE[match] - value_expected = match == 'when' ? :colon_expected : true - end - end - value_expected = true if !value_expected && check(/#{patterns::VALUE_FOLLOWS}/o) - encoder.text_token match, kind - end - - elsif method_call_expected && - match = scan(unicode ? /#{patterns::METHOD_AFTER_DOT}/uo : - /#{patterns::METHOD_AFTER_DOT}/o) - if method_call_expected == '::' && match[/\A[A-Z]/] && !match?(/\(/) - encoder.text_token match, :constant - else - encoder.text_token match, :ident - end - method_call_expected = false - value_expected = check(/#{patterns::VALUE_FOLLOWS}/o) - - # OPERATORS # - elsif !method_call_expected && match = scan(/ (\.(?!\.)|::) | ( \.\.\.? | ==?=? | [,\(\[\{] ) | [\)\]\}] /x) - method_call_expected = self[1] - value_expected = !method_call_expected && !!self[2] - if inline_block_stack - case match - when '{' - inline_block_curly_depth += 1 - when '}' - inline_block_curly_depth -= 1 - if inline_block_curly_depth == 0 # closing brace of inline block reached - state, inline_block_curly_depth, heredocs = inline_block_stack.pop - inline_block_stack = nil if inline_block_stack.empty? - heredocs = nil if heredocs && heredocs.empty? - encoder.text_token match, :inline_delimiter - encoder.end_group :inline - next - end - end - end - encoder.text_token match, :operator - - elsif match = scan(unicode ? /#{patterns::SYMBOL}/uo : - /#{patterns::SYMBOL}/o) - case delim = match[1] - when ?', ?" - encoder.begin_group :symbol - encoder.text_token ':', :symbol - match = delim.chr - encoder.text_token match, :delimiter - state = self.class::StringState.new :symbol, delim == ?", match - else - encoder.text_token match, :symbol - value_expected = false - end - - elsif match = scan(/ ' (?:(?>[^'\\]*) ')? | " (?:(?>[^"\\\#]*) ")? /mx) - if match.size == 1 - kind = check(self.class::StringState.simple_key_pattern(match)) ? :key : :string - encoder.begin_group kind - encoder.text_token match, :delimiter - state = self.class::StringState.new kind, match == '"', match # important for streaming - else - kind = value_expected == true && scan(/:/) ? :key : :string - encoder.begin_group kind - encoder.text_token match[0,1], :delimiter - encoder.text_token match[1..-2], :content if match.size > 2 - encoder.text_token match[-1,1], :delimiter - encoder.end_group kind - encoder.text_token ':', :operator if kind == :key - value_expected = false - end - - elsif match = scan(unicode ? /#{patterns::INSTANCE_VARIABLE}/uo : - /#{patterns::INSTANCE_VARIABLE}/o) - value_expected = false - encoder.text_token match, :instance_variable - - elsif value_expected && match = scan(/\//) - encoder.begin_group :regexp - encoder.text_token match, :delimiter - state = self.class::StringState.new :regexp, true, '/' - - elsif match = scan(value_expected ? /[-+]?#{patterns::NUMERIC}/o : /#{patterns::NUMERIC}/o) - if method_call_expected - encoder.text_token match, :error - method_call_expected = false - else - kind = self[1] ? :float : :integer # TODO: send :hex/:octal/:binary - match << 'r' if match !~ /e/i && scan(/r/) - match << 'i' if scan(/i/) - encoder.text_token match, kind - end - value_expected = false - - elsif match = scan(/ [-+!~^\/]=? | [:;] | &\. | [*|&]{1,2}=? | >>? /x) - value_expected = true - encoder.text_token match, :operator - - elsif value_expected && match = scan(/#{patterns::HEREDOC_OPEN}/o) - quote = self[3] - delim = self[quote ? 4 : 2] - kind = patterns::QUOTE_TO_TYPE[quote] - encoder.begin_group kind - encoder.text_token match, :delimiter - encoder.end_group kind - heredocs ||= [] # create heredocs if empty - heredocs << self.class::StringState.new(kind, quote != "'", delim, - self[1] ? :indented : :linestart) - value_expected = false - - elsif value_expected && match = scan(/#{patterns::FANCY_STRING_START}/o) - kind = patterns::FANCY_STRING_KIND[self[1]] - encoder.begin_group kind - state = self.class::StringState.new kind, patterns::FANCY_STRING_INTERPRETED[self[1]], self[2] - encoder.text_token match, :delimiter - - elsif value_expected && match = scan(/#{patterns::CHARACTER}/o) - value_expected = false - encoder.text_token match, :integer - - elsif match = scan(/ %=? | <(?:<|=>?)? | \? /x) - value_expected = match == '?' ? :colon_expected : true - encoder.text_token match, :operator - - elsif match = scan(/`/) - encoder.begin_group :shell - encoder.text_token match, :delimiter - state = self.class::StringState.new :shell, true, match - - elsif match = scan(unicode ? /#{patterns::GLOBAL_VARIABLE}/uo : - /#{patterns::GLOBAL_VARIABLE}/o) - encoder.text_token match, :global_variable - value_expected = false - - elsif match = scan(unicode ? /#{patterns::CLASS_VARIABLE}/uo : - /#{patterns::CLASS_VARIABLE}/o) - encoder.text_token match, :class_variable - value_expected = false - - elsif match = scan(/\\\z/) - encoder.text_token match, :space - - else - if method_call_expected - method_call_expected = false - next - end - unless unicode - # check for unicode - $DEBUG_BEFORE, $DEBUG = $DEBUG, false - begin - if check(/./mu).size > 1 - # seems like we should try again with unicode - unicode = true - end - rescue - # bad unicode char; use getch - ensure - $DEBUG = $DEBUG_BEFORE - end - next if unicode - end - - encoder.text_token getch, :error - - end - - if last_state - state = last_state unless state.is_a?(StringState) # otherwise, a simple 'def"' results in unclosed tokens - last_state = nil - end - - elsif state == :def_expected - if match = scan(unicode ? /(?>#{patterns::METHOD_NAME_EX})(?!\.|::)/uo : - /(?>#{patterns::METHOD_NAME_EX})(?!\.|::)/o) - encoder.text_token match, :method - state = :initial - else - last_state = :dot_expected - state = :initial - end - - elsif state == :dot_expected - if match = scan(/\.|::/) - # invalid definition - state = :def_expected - encoder.text_token match, :operator - else - state = :initial - end - - elsif state == :module_expected - if match = scan(/<#{patterns::METHOD_NAME_EX})(?!\.|::)/uo : - /(?>#{patterns::METHOD_NAME_EX})(?!\.|::)/o) - encoder.text_token match, :method - elsif match = scan(/#{patterns::SYMBOL}/o) - case delim = match[1] - when ?', ?" - encoder.begin_group :symbol - encoder.text_token ':', :symbol - match = delim.chr - encoder.text_token match, :delimiter - state = self.class::StringState.new :symbol, delim == ?", match - state.next_state = :undef_comma_expected - else - encoder.text_token match, :symbol - end - else - state = :initial - end - - elsif state == :undef_comma_expected - if match = scan(/,/) - encoder.text_token match, :operator - state = :undef_expected - else - state = :initial - end - - elsif state == :alias_expected - match = scan(unicode ? /(#{patterns::METHOD_NAME_OR_SYMBOL})([ \t]+)(#{patterns::METHOD_NAME_OR_SYMBOL})/uo : - /(#{patterns::METHOD_NAME_OR_SYMBOL})([ \t]+)(#{patterns::METHOD_NAME_OR_SYMBOL})/o) - - if match - encoder.text_token self[1], (self[1][0] == ?: ? :symbol : :method) - encoder.text_token self[2], :space - encoder.text_token self[3], (self[3][0] == ?: ? :symbol : :method) - end - state = :initial - - else - #:nocov: - raise_inspect 'Unknown state: %p' % [state], encoder - #:nocov: - end - - else # StringState - - match = scan_until(state.pattern) || scan_rest - unless match.empty? - encoder.text_token match, :content - break if eos? - end - - if state.heredoc && self[1] # end of heredoc - match = getch - match << scan_until(/$/) unless eos? - encoder.text_token match, :delimiter unless match.empty? - encoder.end_group state.type - state = state.next_state - next - end - - case match = getch - - when state.delim - if state.paren_depth - state.paren_depth -= 1 - if state.paren_depth > 0 - encoder.text_token match, :content - next - end - end - encoder.text_token match, :delimiter - if state.type == :regexp && !eos? - match = scan(/#{patterns::REGEXP_MODIFIERS}/o) - encoder.text_token match, :modifier unless match.empty? - end - encoder.end_group state.type - value_expected = false - state = state.next_state - - when '\\' - if state.interpreted - if esc = scan(/#{patterns::ESCAPE}/o) - encoder.text_token match + esc, :char - else - encoder.text_token match, :error - end - else - case esc = getch - when nil - encoder.text_token match, :content - when state.delim, '\\' - encoder.text_token match + esc, :char - else - encoder.text_token match + esc, :content - end - end - - when '#' - case peek(1) - when '{' - inline_block_stack ||= [] - inline_block_stack << [state, inline_block_curly_depth, heredocs] - value_expected = true - state = :initial - inline_block_curly_depth = 1 - encoder.begin_group :inline - encoder.text_token match + getch, :inline_delimiter - when '$', '@' - encoder.text_token match, :escape - last_state = state - state = :initial - else - #:nocov: - raise_inspect 'else-case # reached; #%p not handled' % [peek(1)], encoder - #:nocov: - end - - when state.opening_paren - state.paren_depth += 1 - encoder.text_token match, :content - - else - #:nocov - raise_inspect 'else-case " reached; %p not handled, state = %p' % [match, state], encoder - #:nocov: - - end - - end - - end - - # cleaning up - if state.is_a? StringState - encoder.end_group state.type - end - - if options[:keep_state] - if state.is_a?(StringState) && state.heredoc - (heredocs ||= []).unshift state - state = :initial - elsif heredocs && heredocs.empty? - heredocs = nil - end - @state = state, heredocs - end - - if inline_block_stack - until inline_block_stack.empty? - state, = *inline_block_stack.pop - encoder.end_group :inline - encoder.end_group state.type - end - end - - encoder - end - - end - -end -end diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/ruby/patterns.rb b/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/ruby/patterns.rb deleted file mode 100644 index cd942d0d..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/ruby/patterns.rb +++ /dev/null @@ -1,178 +0,0 @@ -# encoding: utf-8 -module CodeRay -module Scanners - - module Ruby::Patterns # :nodoc: all - - KEYWORDS = %w[ - and def end in or unless begin - defined? ensure module redo super until - BEGIN break do next rescue then - when END case else for retry - while alias class elsif if not return - undef yield - ] - - # See http://murfy.de/ruby-constants. - PREDEFINED_CONSTANTS = %w[ - nil true false self - DATA ARGV ARGF ENV - FALSE TRUE NIL - STDERR STDIN STDOUT - TOPLEVEL_BINDING - RUBY_COPYRIGHT RUBY_DESCRIPTION RUBY_ENGINE RUBY_PATCHLEVEL - RUBY_PLATFORM RUBY_RELEASE_DATE RUBY_REVISION RUBY_VERSION - __FILE__ __LINE__ __ENCODING__ - ] - - IDENT_KIND = WordList.new(:ident). - add(KEYWORDS, :keyword). - add(PREDEFINED_CONSTANTS, :predefined_constant) - - KEYWORD_NEW_STATE = WordList.new(:initial). - add(%w[ def ], :def_expected). - add(%w[ undef ], :undef_expected). - add(%w[ alias ], :alias_expected). - add(%w[ class module ], :module_expected) - - IDENT = 'ä'[/[[:alpha:]]/] == 'ä' ? Regexp.new('[[:alpha:]_[^\0-\177]][[:alnum:]_[^\0-\177]]*') : /[^\W\d]\w*/ - - METHOD_NAME = / #{IDENT} [?!]? /ox - METHOD_NAME_OPERATOR = / - \*\*? # multiplication and power - | [-+~]@? # plus, minus, tilde with and without at sign - | [\/%&|^`] # division, modulo or format strings, and, or, xor, system - | \[\]=? # array getter and setter - | << | >> # append or shift left, shift right - | <=?>? | >=? # comparison, rocket operator - | ===? | =~ # simple equality, case equality, match - | ![~=@]? # negation with and without at sign, not-equal and not-match - /ox - METHOD_SUFFIX = / (?: [?!] | = (?![~>]|=(?!>)) ) /x - METHOD_NAME_EX = / #{IDENT} #{METHOD_SUFFIX}? | #{METHOD_NAME_OPERATOR} /ox - METHOD_AFTER_DOT = / #{IDENT} [?!]? | #{METHOD_NAME_OPERATOR} /ox - INSTANCE_VARIABLE = / @ #{IDENT} /ox - CLASS_VARIABLE = / @@ #{IDENT} /ox - OBJECT_VARIABLE = / @@? #{IDENT} /ox - GLOBAL_VARIABLE = / \$ (?: #{IDENT} | [1-9]\d* | 0\w* | [~&+`'=\/,;_.<>!@$?*":\\] | -[a-zA-Z_0-9] ) /ox - PREFIX_VARIABLE = / #{GLOBAL_VARIABLE} | #{OBJECT_VARIABLE} /ox - VARIABLE = / @?@? #{IDENT} | #{GLOBAL_VARIABLE} /ox - - QUOTE_TO_TYPE = { - '`' => :shell, - '/' => :regexp, - } - QUOTE_TO_TYPE.default = :string - - REGEXP_MODIFIERS = /[mousenix]*/ - - DECIMAL = /\d+(?:_\d+)*/ - OCTAL = /0_?[0-7]+(?:_[0-7]+)*/ - HEXADECIMAL = /0x[0-9A-Fa-f]+(?:_[0-9A-Fa-f]+)*/ - BINARY = /0b[01]+(?:_[01]+)*/ - - EXPONENT = / [eE] [+-]? #{DECIMAL} /ox - FLOAT_SUFFIX = / #{EXPONENT} | \. #{DECIMAL} #{EXPONENT}? /ox - FLOAT_OR_INT = / #{DECIMAL} (?: #{FLOAT_SUFFIX} () )? /ox - NUMERIC = / (?: (?=0) (?: #{OCTAL} | #{HEXADECIMAL} | #{BINARY} ) | #{FLOAT_OR_INT} ) /ox - - SYMBOL = / - : - (?: - #{METHOD_NAME_EX} - | #{PREFIX_VARIABLE} - | ['"] - ) - /ox - METHOD_NAME_OR_SYMBOL = / #{METHOD_NAME_EX} | #{SYMBOL} /ox - - SIMPLE_ESCAPE = / - [abefnrstv] - | [0-7]{1,3} - | x[0-9A-Fa-f]{1,2} - | . - /mx - - CONTROL_META_ESCAPE = / - (?: M-|C-|c ) - (?: \\ (?: M-|C-|c ) )* - (?: [^\\] | \\ #{SIMPLE_ESCAPE} )? - /mox - - ESCAPE = / - #{CONTROL_META_ESCAPE} | #{SIMPLE_ESCAPE} - /mox - - CHARACTER = / - \? - (?: - [^\s\\] - | \\ #{ESCAPE} - ) - /mox - - # NOTE: This is not completely correct, but - # nobody needs heredoc delimiters ending with \n. - HEREDOC_OPEN = / - << ([-~])? # $1 = float - (?: - ( [A-Za-z_0-9]+ ) # $2 = delim - | - ( ["'`\/] ) # $3 = quote, type - ( [^\n]*? ) \3 # $4 = delim - ) - /mx - - RUBYDOC = / - =begin (?!\S) - .*? - (?: \Z | ^=end (?!\S) [^\n]* ) - /mx - - DATA = / - __END__$ - .*? - (?: \Z | (?=^\#CODE) ) - /mx - - RUBYDOC_OR_DATA = / #{RUBYDOC} | #{DATA} /xo - - # Checks for a valid value to follow. This enables - # value_expected in method calls without parentheses. - VALUE_FOLLOWS = / - (?>[ \t\f\v]+) - (?: - [%\/][^\s=] - | <<-?\S - | [-+] \d - | #{CHARACTER} - ) - /ox - KEYWORDS_EXPECTING_VALUE = WordList.new.add(%w[ - and end in or unless begin - defined? ensure redo super until - break do next rescue then - when case else for retry - while elsif if not return - yield - ]) - - FANCY_STRING_START = / % ( [iIqQrswWx] | (?![a-zA-Z0-9]) ) ([^a-zA-Z0-9]) /x - FANCY_STRING_KIND = Hash.new(:string).merge({ - 'i' => :symbol, - 'I' => :symbol, - 'r' => :regexp, - 's' => :symbol, - 'x' => :shell, - }) - FANCY_STRING_INTERPRETED = Hash.new(true).merge({ - 'i' => false, - 'q' => false, - 's' => false, - 'w' => false, - }) - - end - -end -end diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/ruby/string_state.rb b/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/ruby/string_state.rb deleted file mode 100644 index 95f1e832..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/ruby/string_state.rb +++ /dev/null @@ -1,79 +0,0 @@ -# encoding: utf-8 -module CodeRay -module Scanners - - class Ruby - - class StringState < Struct.new :type, :interpreted, :delim, :heredoc, - :opening_paren, :paren_depth, :pattern, :next_state # :nodoc: all - - CLOSING_PAREN = Hash[ *%w[ - ( ) - [ ] - < > - { } - ] ].each { |k,v| k.freeze; v.freeze } # debug, if I try to change it with << - - STRING_PATTERN = Hash.new do |h, k| - delim, interpreted = *k - delim_pattern = Regexp.escape(delim) - if closing_paren = CLOSING_PAREN[delim] - delim_pattern << Regexp.escape(closing_paren) - end - delim_pattern << '\\\\' unless delim == '\\' - - # special_escapes = - # case interpreted - # when :regexp_symbols - # '| [|?*+(){}\[\].^$]' - # end - - if interpreted && delim != '#' - / (?= [#{delim_pattern}] | \# [{$@] ) /mx - else - / (?= [#{delim_pattern}] ) /mx - end.tap do |pattern| - h[k] = pattern if (delim.respond_to?(:ord) ? delim.ord : delim[0]) < 256 - end - end - - def self.simple_key_pattern delim - if delim == "'" - / (?> (?: [^\\']+ | \\. )* ) ' : /mx - else - / (?> (?: [^\\"\#]+ | \\. | \#\$[\\"] | \#\{[^\{\}]+\} | \#(?!\{) )* ) " : /mx - end - end - - def initialize kind, interpreted, delim, heredoc = false - if heredoc - pattern = heredoc_pattern delim, interpreted, heredoc == :indented - delim = nil - else - pattern = STRING_PATTERN[ [delim, interpreted] ] - if closing_paren = CLOSING_PAREN[delim] - opening_paren = delim - delim = closing_paren - paren_depth = 1 - end - end - super kind, interpreted, delim, heredoc, opening_paren, paren_depth, pattern, :initial - end - - def heredoc_pattern delim, interpreted, indented - # delim = delim.dup # workaround for old Ruby - delim_pattern = Regexp.escape(delim) - delim_pattern = / (?:\A|\n) #{ '(?>[ \t]*)' if indented } #{ Regexp.new delim_pattern } $ /x - if interpreted - / (?= #{delim_pattern}() | \\ | \# [{$@] ) /mx # $1 set == end of heredoc - else - / (?= #{delim_pattern}() | \\ ) /mx - end - end - - end - - end - -end -end diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/sass.rb b/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/sass.rb deleted file mode 100644 index e3296b90..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/sass.rb +++ /dev/null @@ -1,232 +0,0 @@ -module CodeRay -module Scanners - - # A scanner for Sass. - class Sass < CSS - - register_for :sass - file_extension 'sass' - - protected - - def setup - @state = :initial - end - - def scan_tokens encoder, options - states = Array(options[:state] || @state).dup - - encoder.begin_group :string if states.last == :sqstring || states.last == :dqstring - - until eos? - - if bol? && (match = scan(/(?>( +)?(\/[\*\/])(.+)?)(?=\n)/)) - encoder.text_token self[1], :space if self[1] - encoder.begin_group :comment - encoder.text_token self[2], :delimiter - encoder.text_token self[3], :content if self[3] - if match = scan(/(?:\n+#{self[1]} .*)+/) - encoder.text_token match, :content - end - encoder.end_group :comment - elsif match = scan(/\n|[^\n\S]+\n?/) - encoder.text_token match, :space - if match.index(/\n/) - value_expected = false - states.pop if states.last == :include - end - - elsif states.last == :sass_inline && (match = scan(/\}/)) - encoder.text_token match, :inline_delimiter - encoder.end_group :inline - states.pop - - elsif case states.last - when :initial, :media, :sass_inline - if match = scan(/(?>#{RE::Ident})(?!\()/ox) - encoder.text_token match, value_expected ? :value : (check(/.*:(?![a-z])/) ? :key : :tag) - next - elsif !value_expected && (match = scan(/\*/)) - encoder.text_token match, :tag - next - elsif match = scan(RE::Class) - encoder.text_token match, :class - next - elsif match = scan(RE::Id) - encoder.text_token match, :id - next - elsif match = scan(RE::PseudoClass) - encoder.text_token match, :pseudo_class - next - elsif match = scan(RE::AttributeSelector) - # TODO: Improve highlighting inside of attribute selectors. - encoder.text_token match[0,1], :operator - encoder.text_token match[1..-2], :attribute_name if match.size > 2 - encoder.text_token match[-1,1], :operator if match[-1] == ?] - next - elsif match = scan(/(\=|@mixin +)#{RE::Ident}/o) - encoder.text_token match, :function - next - elsif match = scan(/@import\b/) - encoder.text_token match, :directive - states << :include - next - elsif match = scan(/@media\b/) - encoder.text_token match, :directive - # states.push :media_before_name - next - end - - when :block - if match = scan(/(?>#{RE::Ident})(?!\()/ox) - if value_expected - encoder.text_token match, :value - else - encoder.text_token match, :key - end - next - end - - when :sqstring, :dqstring - if match = scan(states.last == :sqstring ? /(?:[^\n\'\#]+|\\\n|#{RE::Escape}|#(?!\{))+/o : /(?:[^\n\"\#]+|\\\n|#{RE::Escape}|#(?!\{))+/o) - encoder.text_token match, :content - elsif match = scan(/['"]/) - encoder.text_token match, :delimiter - encoder.end_group :string - states.pop - elsif match = scan(/#\{/) - encoder.begin_group :inline - encoder.text_token match, :inline_delimiter - states.push :sass_inline - elsif match = scan(/ \\ | $ /x) - encoder.end_group states.last - encoder.text_token match, :error unless match.empty? - states.pop - else - raise_inspect "else case #{states.last} reached; %p not handled." % peek(1), encoder - end - - when :include - if match = scan(/[^\s'",]+/) - encoder.text_token match, :include - next - end - - else - #:nocov: - raise_inspect 'Unknown state: %p' % [states.last], encoder - #:nocov: - - end - - elsif match = scan(/\$#{RE::Ident}/o) - encoder.text_token match, :variable - next - - elsif match = scan(/&/) - encoder.text_token match, :local_variable - - elsif match = scan(/\+#{RE::Ident}/o) - encoder.text_token match, :include - value_expected = true - - elsif match = scan(/\/\*(?:.*?\*\/|.*)|\/\/.*/) - encoder.text_token match, :comment - - elsif match = scan(/#\{/) - encoder.begin_group :inline - encoder.text_token match, :inline_delimiter - states.push :sass_inline - - elsif match = scan(/\{/) - value_expected = false - encoder.text_token match, :operator - states.push :block - - elsif match = scan(/\}/) - value_expected = false - encoder.text_token match, :operator - if states.last == :block || states.last == :media - states.pop - end - - elsif match = scan(/['"]/) - encoder.begin_group :string - encoder.text_token match, :delimiter - if states.include? :sass_inline - # no nesting, just scan the string until delimiter - content = scan_until(/(?=#{match}|\}|\z)/) - encoder.text_token content, :content unless content.empty? - encoder.text_token match, :delimiter if scan(/#{match}/) - encoder.end_group :string - else - states.push match == "'" ? :sqstring : :dqstring - end - - elsif match = scan(/#{RE::Function}/o) - encoder.begin_group :function - start = match[/^[-\w]+\(/] - encoder.text_token start, :delimiter - if match[-1] == ?) - encoder.text_token match[start.size..-2], :content - encoder.text_token ')', :delimiter - else - encoder.text_token match[start.size..-1], :content if start.size < match.size - end - encoder.end_group :function - - elsif match = scan(/[a-z][-a-z_]*(?=\()/o) - encoder.text_token match, :predefined - - elsif match = scan(/(?: #{RE::Dimension} | #{RE::Percentage} | #{RE::Num} )/ox) - encoder.text_token match, :float - - elsif match = scan(/#{RE::HexColor}/o) - encoder.text_token match, :color - - elsif match = scan(/! *(?:important|optional)/) - encoder.text_token match, :important - - elsif match = scan(/(?:rgb|hsl)a?\([^()\n]*\)?/) - encoder.text_token match, :color - - elsif match = scan(/@else if\b|#{RE::AtKeyword}/o) - encoder.text_token match, :directive - value_expected = true - - elsif match = scan(/ == | != | [-+*\/>~:;,.=()] /x) - if match == ':' - value_expected = true - elsif match == ';' - value_expected = false - end - encoder.text_token match, :operator - - else - encoder.text_token getch, :error - - end - - end - - states.pop if states.last == :include - - if options[:keep_state] - @state = states.dup - end - - while state = states.pop - if state == :sass_inline - encoder.end_group :inline - elsif state == :sqstring || state == :dqstring - encoder.end_group :string - end - end - - encoder - end - - end - -end -end diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/scanner.rb b/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/scanner.rb deleted file mode 100644 index efa710d9..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/scanner.rb +++ /dev/null @@ -1,337 +0,0 @@ -# encoding: utf-8 - -module CodeRay - module Scanners - - # = Scanner - # - # The base class for all Scanners. - # - # It is a subclass of Ruby's great +StringScanner+, which - # makes it easy to access the scanning methods inside. - # - # It is also +Enumerable+, so you can use it like an Array of - # Tokens: - # - # require 'coderay' - # - # c_scanner = CodeRay::Scanners[:c].new "if (*p == '{') nest++;" - # - # for text, kind in c_scanner - # puts text if kind == :operator - # end - # - # # prints: (*==)++; - # - # OK, this is a very simple example :) - # You can also use +map+, +any?+, +find+ and even +sort_by+, - # if you want. - class Scanner < StringScanner - - extend Plugin - plugin_host Scanners - - # Raised if a Scanner fails while scanning - ScanError = Class.new StandardError - - # The default options for all scanner classes. - # - # Define @default_options for subclasses. - DEFAULT_OPTIONS = { } - - KINDS_NOT_LOC = [:comment, :doctype, :docstring] - - attr_accessor :state - - class << self - - # Normalizes the given code into a string with UNIX newlines, in the - # scanner's internal encoding, with invalid and undefined charachters - # replaced by placeholders. Always returns a new object. - def normalize code - # original = code - code = code.to_s unless code.is_a? ::String - return code if code.empty? - - if code.respond_to? :encoding - code = encode_with_encoding code, self.encoding - else - code = to_unix code - end - # code = code.dup if code.eql? original - code - end - - # The typical filename suffix for this scanner's language. - def file_extension extension = lang - @file_extension ||= extension.to_s - end - - # The encoding used internally by this scanner. - def encoding name = 'UTF-8' - @encoding ||= defined?(Encoding.find) && Encoding.find(name) - end - - # The lang of this Scanner class, which is equal to its Plugin ID. - def lang - @plugin_id - end - - protected - - def encode_with_encoding code, target_encoding - if code.encoding == target_encoding - if code.valid_encoding? - return to_unix(code) - else - source_encoding = guess_encoding code - end - else - source_encoding = code.encoding - end - # print "encode_with_encoding from #{source_encoding} to #{target_encoding}" - code.encode target_encoding, source_encoding, :universal_newline => true, :undef => :replace, :invalid => :replace - end - - def to_unix code - code.index(?\r) ? code.gsub(/\r\n?/, "\n") : code - end - - def guess_encoding s - #:nocov: - IO.popen("file -b --mime -", "w+") do |file| - file.write s[0, 1024] - file.close_write - begin - Encoding.find file.gets[/charset=([-\w]+)/, 1] - rescue ArgumentError - Encoding::BINARY - end - end - #:nocov: - end - - end - - # Create a new Scanner. - # - # * +code+ is the input String and is handled by the superclass - # StringScanner. - # * +options+ is a Hash with Symbols as keys. - # It is merged with the default options of the class (you can - # overwrite default options here.) - # - # Else, a Tokens object is used. - def initialize code = '', options = {} - if self.class == Scanner - raise NotImplementedError, "I am only the basic Scanner class. I can't scan anything. :( Use my subclasses." - end - - @options = self.class::DEFAULT_OPTIONS.merge options - - super self.class.normalize(code) - - @tokens = options[:tokens] || Tokens.new - @tokens.scanner = self if @tokens.respond_to? :scanner= - - setup - end - - # Sets back the scanner. Subclasses should redefine the reset_instance - # method instead of this one. - def reset - super - reset_instance - end - - # Set a new string to be scanned. - def string= code - code = self.class.normalize(code) - super code - reset_instance - end - - # the Plugin ID for this scanner - def lang - self.class.lang - end - - # the default file extension for this scanner - def file_extension - self.class.file_extension - end - - # Scan the code and returns all tokens in a Tokens object. - def tokenize source = nil, options = {} - options = @options.merge(options) - - set_tokens_from_options options - set_string_from_source source - - begin - scan_tokens @tokens, options - rescue => e - message = "Error in %s#scan_tokens, initial state was: %p" % [self.class, defined?(state) && state] - raise_inspect e.message, @tokens, message, 30, e.backtrace - end - - @cached_tokens = @tokens - if source.is_a? Array - @tokens.split_into_parts(*source.map { |part| part.size }) - else - @tokens - end - end - - # Cache the result of tokenize. - def tokens - @cached_tokens ||= tokenize - end - - # Traverse the tokens. - def each &block - tokens.each(&block) - end - include Enumerable - - # The current line position of the scanner, starting with 1. - # See also: #column. - # - # Beware, this is implemented inefficiently. It should be used - # for debugging only. - def line pos = self.pos - return 1 if pos <= 0 - binary_string[0...pos].count("\n") + 1 - end - - # The current column position of the scanner, starting with 1. - # See also: #line. - def column pos = self.pos - return 1 if pos <= 0 - pos - (binary_string.rindex(?\n, pos - 1) || -1) - end - - # The string in binary encoding. - # - # To be used with #pos, which is the index of the byte the scanner - # will scan next. - def binary_string - @binary_string ||= - if string.respond_to?(:bytesize) && string.bytesize != string.size - #:nocov: - string.dup.force_encoding('binary') - #:nocov: - else - string - end - end - - protected - - # Can be implemented by subclasses to do some initialization - # that has to be done once per instance. - # - # Use reset for initialization that has to be done once per - # scan. - def setup # :doc: - end - - def set_string_from_source source - case source - when Array - self.string = self.class.normalize(source.join) - when nil - reset - else - self.string = self.class.normalize(source) - end - end - - def set_tokens_from_options options - @tokens = options[:tokens] || @tokens || Tokens.new - @tokens.scanner = self if @tokens.respond_to? :scanner= - end - - # This is the central method, and commonly the only one a - # subclass implements. - # - # Subclasses must implement this method; it must return +tokens+ - # and must only use Tokens#<< for storing scanned tokens! - def scan_tokens tokens, options # :doc: - raise NotImplementedError, "#{self.class}#scan_tokens not implemented." - end - - # Resets the scanner. - def reset_instance - @tokens.clear if @tokens.respond_to?(:clear) && !@options[:keep_tokens] - @cached_tokens = nil - @binary_string = nil if defined? @binary_string - end - - SCAN_ERROR_MESSAGE = <<-MESSAGE - - -***ERROR in %s: %s (after %s tokens) - -tokens: -%s - -%s - -surrounding code: -%p ~~ %p - - -***ERROR*** - - MESSAGE - - def raise_inspect_arguments message, tokens, state, ambit - return File.basename(caller[0]), - message, - tokens_size(tokens), - tokens_last(tokens, 10).map(&:inspect).join("\n"), - scanner_state_info(state), - binary_string[pos - ambit, ambit], - binary_string[pos, ambit] - end - - SCANNER_STATE_INFO = <<-INFO -current line: %d column: %d pos: %d -matched: %p state: %p -bol?: %p, eos?: %p - INFO - - def scanner_state_info state - SCANNER_STATE_INFO % [ - line, column, pos, - matched, state || 'No state given!', - bol?, eos?, - ] - end - - # Scanner error with additional status information - def raise_inspect message, tokens, state = self.state, ambit = 30, backtrace = caller - raise ScanError, SCAN_ERROR_MESSAGE % raise_inspect_arguments(message, tokens, state, ambit), backtrace - end - - def tokens_size tokens - tokens.size if tokens.respond_to?(:size) - end - - def tokens_last tokens, n - tokens.respond_to?(:last) ? tokens.last(n) : [] - end - - # Shorthand for scan_until(/\z/). - # This method also avoids a JRuby 1.9 mode bug. - def scan_rest - rest = self.rest - terminate - rest - end - - end - - end -end diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/sql.rb b/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/sql.rb deleted file mode 100644 index c8725a8f..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/sql.rb +++ /dev/null @@ -1,169 +0,0 @@ -module CodeRay -module Scanners - - # by Josh Goebel - class SQL < Scanner - - register_for :sql - - KEYWORDS = %w( - all and any as before begin between by case check collate - each else end exists - for foreign from full group having if in inner is join - like not of on or order outer over references - then to union using values when where - left right distinct - ) - - OBJECTS = %w( - database databases table tables column columns fields index constraint - constraints transaction function procedure row key view trigger - ) - - COMMANDS = %w( - add alter comment create delete drop grant insert into select update set - show prompt begin commit rollback replace truncate - ) - - PREDEFINED_TYPES = %w( - char varchar varchar2 enum binary text tinytext mediumtext - longtext blob tinyblob mediumblob longblob timestamp - date time datetime year double decimal float int - integer tinyint mediumint bigint smallint unsigned bit numeric - bool boolean hex bin oct - ) - - PREDEFINED_FUNCTIONS = %w( sum cast substring abs pi count min max avg now ) - - DIRECTIVES = %w( - auto_increment unique default charset initially deferred - deferrable cascade immediate read write asc desc after - primary foreign return engine - ) - - PREDEFINED_CONSTANTS = %w( null true false ) - - IDENT_KIND = WordList::CaseIgnoring.new(:ident). - add(KEYWORDS, :keyword). - add(OBJECTS, :type). - add(COMMANDS, :class). - add(PREDEFINED_TYPES, :predefined_type). - add(PREDEFINED_CONSTANTS, :predefined_constant). - add(PREDEFINED_FUNCTIONS, :predefined). - add(DIRECTIVES, :directive) - - ESCAPE = / [rbfntv\n\\\/'"] | x[a-fA-F0-9]{1,2} | [0-7]{1,3} | . /mx - UNICODE_ESCAPE = / u[a-fA-F0-9]{4} | U[a-fA-F0-9]{8} /x - - STRING_PREFIXES = /[xnb]|_\w+/i - - STRING_CONTENT_PATTERN = { - '"' => / (?: [^\\"] | "" )+ /x, - "'" => / (?: [^\\'] | '' )+ /x, - '`' => / (?: [^\\`] | `` )+ /x, - } - - def scan_tokens encoder, options - - state = :initial - string_type = nil - string_content = '' - name_expected = false - - until eos? - - if state == :initial - - if match = scan(/ \s+ | \\\n /x) - encoder.text_token match, :space - - elsif match = scan(/(?:--\s?|#).*/) - encoder.text_token match, :comment - - elsif match = scan(%r( /\* (!)? (?: .*? \*/ | .* ) )mx) - encoder.text_token match, self[1] ? :directive : :comment - - elsif match = scan(/ [*\/=<>:;,!&^|()\[\]{}~%] | [-+\.](?!\d) /x) - name_expected = true if match == '.' && check(/[A-Za-z_]/) - encoder.text_token match, :operator - - elsif match = scan(/(#{STRING_PREFIXES})?([`"'])/o) - prefix = self[1] - string_type = self[2] - encoder.begin_group :string - encoder.text_token prefix, :modifier if prefix - match = string_type - state = :string - encoder.text_token match, :delimiter - - elsif match = scan(/ @? [A-Za-z_][A-Za-z_0-9\$]* /x) - encoder.text_token match, name_expected ? :ident : (match[0] == ?@ ? :variable : IDENT_KIND[match]) - name_expected = false - - elsif match = scan(/0[xX][0-9A-Fa-f]+/) - encoder.text_token match, :hex - - elsif match = scan(/0[0-7]+(?![89.eEfF])/) - encoder.text_token match, :octal - - elsif match = scan(/[-+]?(?>\d+)(?![.eEfF])/) - encoder.text_token match, :integer - - elsif match = scan(/[-+]?(?:\d[fF]|\d*\.\d+(?:[eE][+-]?\d+)?|\d+[eE][+-]?\d+)/) - encoder.text_token match, :float - - elsif match = scan(/\\N/) - encoder.text_token match, :predefined_constant - - else - encoder.text_token getch, :error - - end - - elsif state == :string - if match = scan(STRING_CONTENT_PATTERN[string_type]) - encoder.text_token match, :content - elsif match = scan(/["'`]/) - if string_type == match - if peek(1) == string_type # doubling means escape - encoder.text_token match + getch, :content - else - encoder.text_token match, :delimiter - encoder.end_group :string - state = :initial - string_type = nil - end - else - encoder.text_token match, :content - end - elsif match = scan(/ \\ (?: #{ESCAPE} | #{UNICODE_ESCAPE} ) /mox) - encoder.text_token match, :char - elsif match = scan(/ \\ . /mox) - encoder.text_token match, :content - elsif match = scan(/ \\ | $ /x) - encoder.text_token match, :error unless match.empty? - encoder.end_group :string - state = :initial - else - raise "else case \" reached; %p not handled." % peek(1), encoder - end - - else - raise 'else-case reached', encoder - - end - - end - - if state == :string - encoder.end_group state - end - - encoder - - end - - end - -end -end diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/taskpaper.rb b/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/taskpaper.rb deleted file mode 100644 index 42670bcc..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/taskpaper.rb +++ /dev/null @@ -1,36 +0,0 @@ -module CodeRay -module Scanners - - class Taskpaper < Scanner - - register_for :taskpaper - file_extension 'taskpaper' - - protected - - def scan_tokens encoder, options - until eos? - if match = scan(/\S.*:.*$/) # project - encoder.text_token(match, :namespace) - elsif match = scan(/-.+@done.*/) # completed task - encoder.text_token(match, :done) - elsif match = scan(/-(?:[^@\n]+|@(?!due))*/) # task - encoder.text_token(match, :plain) - elsif match = scan(/@due.*/) # comment - encoder.text_token(match, :important) - elsif match = scan(/.+/) # comment - encoder.text_token(match, :comment) - elsif match = scan(/\s+/) # space - encoder.text_token(match, :space) - else # other - encoder.text_token getch, :error - end - end - - encoder - end - - end - -end -end diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/text.rb b/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/text.rb deleted file mode 100644 index bde90297..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/text.rb +++ /dev/null @@ -1,26 +0,0 @@ -module CodeRay - module Scanners - - # Scanner for plain text. - # - # Yields just one token of the kind :plain. - # - # Alias: +plaintext+, +plain+ - class Text < Scanner - - register_for :text - title 'Plain text' - - KINDS_NOT_LOC = [:plain] # :nodoc: - - protected - - def scan_tokens encoder, options - encoder.text_token string, :plain - encoder - end - - end - - end -end diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/xml.rb b/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/xml.rb deleted file mode 100644 index 947f16ee..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/xml.rb +++ /dev/null @@ -1,17 +0,0 @@ -module CodeRay -module Scanners - - load :html - - # Scanner for XML. - # - # Currently this is the same scanner as Scanners::HTML. - class XML < HTML - - register_for :xml - file_extension 'xml' - - end - -end -end diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/yaml.rb b/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/yaml.rb deleted file mode 100644 index 32c8e2cb..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/scanners/yaml.rb +++ /dev/null @@ -1,140 +0,0 @@ -module CodeRay -module Scanners - - # Scanner for YAML. - # - # Based on the YAML scanner from Syntax by Jamis Buck. - class YAML < Scanner - - register_for :yaml - file_extension 'yml' - - KINDS_NOT_LOC = :all - - protected - - def scan_tokens encoder, options - - state = :initial - key_indent = string_indent = 0 - - until eos? - - key_indent = nil if bol? - - if match = scan(/ +[\t ]*/) - encoder.text_token match, :space - - elsif match = scan(/\n+/) - encoder.text_token match, :space - state = :initial if match.index(?\n) - - elsif match = scan(/#.*/) - encoder.text_token match, :comment - - elsif bol? and case - when match = scan(/---|\.\.\./) - encoder.begin_group :head - encoder.text_token match, :head - encoder.end_group :head - next - when match = scan(/%.*/) - encoder.text_token match, :doctype - next - end - - elsif state == :value and case - when !check(/(?:"[^"]*")(?=: |:$)/) && match = scan(/"/) - encoder.begin_group :string - encoder.text_token match, :delimiter - encoder.text_token match, :content if (match = scan(/ [^"\\]* (?: \\. [^"\\]* )* /mx)) && !match.empty? - encoder.text_token match, :delimiter if match = scan(/"/) - encoder.end_group :string - next - when match = scan(/[|>][-+]?/) - encoder.begin_group :string - encoder.text_token match, :delimiter - string_indent = key_indent || column(pos - match.size) - 1 - encoder.text_token matched, :content if scan(/(?:\n+ {#{string_indent + 1}}.*)+/) - encoder.end_group :string - next - when match = scan(/(?![!"*&]).+?(?=$|\s+#)/) - encoder.begin_group :string - encoder.text_token match, :content - string_indent = key_indent || column(pos - match.size) - 1 - encoder.text_token matched, :content if scan(/(?:\n+ {#{string_indent + 1}}.*)+/) - encoder.end_group :string - next - end - - elsif case - when match = scan(/[-:](?= |$)/) - state = :value if state == :colon && (match == ':' || match == '-') - state = :value if state == :initial && match == '-' - encoder.text_token match, :operator - next - when match = scan(/[,{}\[\]]/) - encoder.text_token match, :operator - next - when state == :initial && match = scan(/[-\w.()\/ ]*\S(?= *:(?: |$))/) - encoder.text_token match, :key - key_indent = column(pos - match.size) - 1 - state = :colon - next - when match = scan(/(?:"[^"\n]*"|'[^'\n]*')(?= *:(?: |$))/) - encoder.begin_group :key - encoder.text_token match[0,1], :delimiter - encoder.text_token match[1..-2], :content if match.size > 2 - encoder.text_token match[-1,1], :delimiter - encoder.end_group :key - key_indent = column(pos - match.size) - 1 - state = :colon - next - when match = scan(/(![\w\/]+)(:([\w:]+))?/) - encoder.text_token self[1], :type - if self[2] - encoder.text_token ':', :operator - encoder.text_token self[3], :class - end - next - when match = scan(/&\S+/) - encoder.text_token match, :variable - next - when match = scan(/\*\w+/) - encoder.text_token match, :global_variable - next - when match = scan(/< 'debug', # highlight for debugging (white on blue background) - - :annotation => 'annotation', # Groovy, Java - :attribute_name => 'attribute-name', # HTML, CSS - :attribute_value => 'attribute-value', # HTML - :binary => 'binary', # Python, Ruby - :char => 'char', # most scanners, also inside of strings - :class => 'class', # lots of scanners, for different purposes also in CSS - :class_variable => 'class-variable', # Ruby, YAML - :color => 'color', # CSS - :comment => 'comment', # most scanners - :constant => 'constant', # PHP, Ruby - :content => 'content', # inside of strings, most scanners - :decorator => 'decorator', # Python - :definition => 'definition', # CSS - :delimiter => 'delimiter', # inside strings, comments and other types - :directive => 'directive', # lots of scanners - :doctype => 'doctype', # Goorvy, HTML, Ruby, YAML - :docstring => 'docstring', # Python - :done => 'done', # Taskpaper - :entity => 'entity', # HTML - :error => 'error', # invalid token, most scanners - :escape => 'escape', # Ruby (string inline variables like #$foo, #@bar) - :exception => 'exception', # Java, PHP, Python - :filename => 'filename', # Diff - :float => 'float', # most scanners - :function => 'function', # CSS, JavaScript, PHP - :global_variable => 'global-variable', # Ruby, YAML - :hex => 'hex', # hexadecimal number; lots of scanners - :id => 'id', # CSS - :imaginary => 'imaginary', # Python - :important => 'important', # CSS, Taskpaper - :include => 'include', # C, Groovy, Java, Python, Sass - :inline => 'inline', # nested code, eg. inline string evaluation; lots of scanners - :inline_delimiter => 'inline-delimiter', # used instead of :inline > :delimiter FIXME: Why use inline_delimiter? - :instance_variable => 'instance-variable', # Ruby - :integer => 'integer', # most scanners - :key => 'key', # lots of scanners, used together with :value - :keyword => 'keyword', # reserved word that's actually implemented; most scanners - :label => 'label', # C, PHP - :local_variable => 'local-variable', # local and magic variables; some scanners - :map => 'map', # Lua tables - :modifier => 'modifier', # used inside on strings; lots of scanners - :namespace => 'namespace', # Clojure, Java, Taskpaper - :octal => 'octal', # lots of scanners - :predefined => 'predefined', # predefined function: lots of scanners - :predefined_constant => 'predefined-constant',# lots of scanners - :predefined_type => 'predefined-type', # C, Java, PHP - :preprocessor => 'preprocessor', # C, Delphi, HTML - :pseudo_class => 'pseudo-class', # CSS - :regexp => 'regexp', # Groovy, JavaScript, Ruby - :reserved => 'reserved', # most scanners - :shell => 'shell', # Ruby - :string => 'string', # most scanners - :symbol => 'symbol', # Clojure, Ruby, YAML - :tag => 'tag', # CSS, HTML - :type => 'type', # CSS, Java, SQL, YAML - :value => 'value', # used together with :key; CSS, JSON, YAML - :variable => 'variable', # Sass, SQL, YAML - - :change => 'change', # Diff - :delete => 'delete', # Diff - :head => 'head', # Diff, YAML - :insert => 'insert', # Diff - :eyecatcher => 'eyecatcher', # Diff - - :ident => false, # almost all scanners - :operator => false, # almost all scanners - - :space => false, # almost all scanners - :plain => false # almost all scanners - ) - - TokenKinds[:method] = TokenKinds[:function] - TokenKinds[:unknown] = TokenKinds[:plain] -end diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/tokens.rb b/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/tokens.rb deleted file mode 100644 index b5f78e71..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/tokens.rb +++ /dev/null @@ -1,164 +0,0 @@ -module CodeRay - - # The Tokens class represents a list of tokens returned from - # a Scanner. It's actually just an Array with a few helper methods. - # - # A token itself is not a special object, just two elements in an Array: - # * the _token_ _text_ (the original source of the token in a String) or - # a _token_ _action_ (begin_group, end_group, begin_line, end_line) - # * the _token_ _kind_ (a Symbol representing the type of the token) - # - # It looks like this: - # - # ..., '# It looks like this', :comment, ... - # ..., '3.1415926', :float, ... - # ..., '$^', :error, ... - # - # Some scanners also yield sub-tokens, represented by special - # token actions, for example :begin_group and :end_group. - # - # The Ruby scanner, for example, splits "a string" into: - # - # [ - # :begin_group, :string, - # '"', :delimiter, - # 'a string', :content, - # '"', :delimiter, - # :end_group, :string - # ] - # - # Tokens can be used to save the output of a Scanners in a simple - # Ruby object that can be send to an Encoder later: - # - # tokens = CodeRay.scan('price = 2.59', :ruby).tokens - # tokens.encode(:html) - # tokens.html - # CodeRay.encoder(:html).encode_tokens(tokens) - # - # Tokens gives you the power to handle pre-scanned code very easily: - # You can serialize it to a JSON string and store it in a database, pass it - # around to encode it more than once, send it to other algorithms... - class Tokens < Array - # Remove Array#filter that is a new alias for Array#select on Ruby 2.6, - # for method_missing called with filter method. - undef_method :filter if instance_methods.include?(:filter) - - # The Scanner instance that created the tokens. - attr_accessor :scanner - - # Encode the tokens using encoder. - # - # encoder can be - # * a plugin name like :html oder 'statistic' - # * an Encoder object - # - # options are passed to the encoder. - def encode encoder, options = {} - encoder = Encoders[encoder].new options if encoder.respond_to? :to_sym - encoder.encode_tokens self, options - end - - # Turn tokens into a string by concatenating them. - def to_s - encode CodeRay::Encoders::Encoder.new - end - - # Redirects unknown methods to encoder calls. - # - # For example, if you call +tokens.html+, the HTML encoder - # is used to highlight the tokens. - def method_missing meth, options = {} - encode meth, options - rescue PluginHost::PluginNotFound - super - end - - # Split the tokens into parts of the given +sizes+. - # - # The result will be an Array of Tokens objects. The parts have - # the text size specified by the parameter. In addition, each - # part closes all opened tokens. This is useful to insert tokens - # betweem them. - # - # This method is used by @Scanner#tokenize@ when called with an Array - # of source strings. The Diff encoder uses it for inline highlighting. - def split_into_parts *sizes - return Array.new(sizes.size) { Tokens.new } if size == 2 && first == '' - parts = [] - opened = [] - content = nil - part = Tokens.new - part_size = 0 - size = sizes.first - i = 0 - for item in self - case content - when nil - content = item - when String - if size && part_size + content.size > size # token must be cut - if part_size < size # some part of the token goes into this part - content = content.dup # content may no be safe to change - part << content.slice!(0, size - part_size) << item - end - # close all open groups and lines... - closing = opened.reverse.flatten.map do |content_or_kind| - case content_or_kind - when :begin_group - :end_group - when :begin_line - :end_line - else - content_or_kind - end - end - part.concat closing - begin - parts << part - part = Tokens.new - size = sizes[i += 1] - end until size.nil? || size > 0 - # ...and open them again. - part.concat opened.flatten - part_size = 0 - redo unless content.empty? - else - part << content << item - part_size += content.size - end - content = nil - when Symbol - case content - when :begin_group, :begin_line - opened << [content, item] - when :end_group, :end_line - opened.pop - else - raise ArgumentError, 'Unknown token action: %p, kind = %p' % [content, item] - end - part << content << item - content = nil - else - raise ArgumentError, 'Token input junk: %p, kind = %p' % [content, item] - end - end - parts << part - parts << Tokens.new while parts.size < sizes.size - parts - end - - # Return the actual number of tokens. - def count - size / 2 - end - - alias text_token push - def begin_group kind; push :begin_group, kind end - def end_group kind; push :end_group, kind end - def begin_line kind; push :begin_line, kind end - def end_line kind; push :end_line, kind end - alias tokens concat - - end - -end diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/tokens_proxy.rb b/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/tokens_proxy.rb deleted file mode 100644 index 31ff39be..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/tokens_proxy.rb +++ /dev/null @@ -1,55 +0,0 @@ -module CodeRay - - # The result of a scan operation is a TokensProxy, but should act like Tokens. - # - # This proxy makes it possible to use the classic CodeRay.scan.encode API - # while still providing the benefits of direct streaming. - class TokensProxy - - attr_accessor :input, :lang, :options, :block - - # Create a new TokensProxy with the arguments of CodeRay.scan. - def initialize input, lang, options = {}, block = nil - @input = input - @lang = lang - @options = options - @block = block - end - - # Call CodeRay.encode if +encoder+ is a Symbol; - # otherwise, convert the receiver to tokens and call encoder.encode_tokens. - def encode encoder, options = {} - if encoder.respond_to? :to_sym - CodeRay.encode(input, lang, encoder, options) - else - encoder.encode_tokens tokens, options - end - end - - # Tries to call encode; - # delegates to tokens otherwise. - def method_missing method, *args, &blk - encode method.to_sym, *args - rescue PluginHost::PluginNotFound - tokens.send(method, *args, &blk) - end - - # The (cached) result of the tokenized input; a Tokens instance. - def tokens - @tokens ||= scanner.tokenize(input) - end - - # A (cached) scanner instance to use for the scan task. - def scanner - @scanner ||= CodeRay.scanner(lang, options, &block) - end - - # Overwrite Struct#each. - def each *args, &blk - tokens.each(*args, &blk) - self - end - - end - -end diff --git a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/version.rb b/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/version.rb deleted file mode 100644 index 3c68bd83..00000000 --- a/bundle/ruby/3.2.0/gems/coderay-1.1.3/lib/coderay/version.rb +++ /dev/null @@ -1,3 +0,0 @@ -module CodeRay - VERSION = '1.1.3' -end diff --git a/bundle/ruby/3.2.0/gems/colored2-3.1.2/LICENSE b/bundle/ruby/3.2.0/gems/colored2-3.1.2/LICENSE deleted file mode 100644 index e543acba..00000000 --- a/bundle/ruby/3.2.0/gems/colored2-3.1.2/LICENSE +++ /dev/null @@ -1,23 +0,0 @@ -Copyright (c) 2010 Chris Wanstrath -Copyright (c) 2016 Konstantin Gredeskoul - -MIT License - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/bundle/ruby/3.2.0/gems/colored2-3.1.2/README.md b/bundle/ruby/3.2.0/gems/colored2-3.1.2/README.md deleted file mode 100644 index f2da87bd..00000000 --- a/bundle/ruby/3.2.0/gems/colored2-3.1.2/README.md +++ /dev/null @@ -1,93 +0,0 @@ -[![Gem Version](https://badge.fury.io/rb/colored2.svg)](https://badge.fury.io/rb/colored2) -[![Downloads](http://ruby-gem-downloads-badge.herokuapp.com/colored2?type=total)](https://rubygems.org/gems/colored2) -[![Gitter](https://img.shields.io/gitter/room/gitterHQ/gitter.svg)](https://gitter.im/colored2) - -[![Build Status](https://travis-ci.org/kigster/colored2.svg?branch=master)](https://travis-ci.org/kigster/colored2) -[![Test Coverage](https://codeclimate.com/github/kigster/colored2/badges/coverage.svg)](https://codeclimate.com/github/kigster/colored2/coverage) -[![Code Climate](https://codeclimate.com/github/kigster/colored2/badges/gpa.svg)](https://codeclimate.com/github/kigster/colored2) -[![Issue Count](https://codeclimate.com/github/kigster/colored2/badges/issue_count.svg)](https://codeclimate.com/github/kigster/colored2) - -## Colored2 - -This is an actively maintained fork of Chris (defunkt) Wanstrath's gem [colored](https://github.com/defunkt/colored), which appears to be no longer supported. - -This fork comes with a slightly spruced up syntax, some additional features, and a test suite written in [RSpec](http://rspec.info/). - -## Usage - -In addition to the simple syntax of the original gem, which affected only the string to the left of the method call, the new "bang" syntax affects a string to the right. If the block or a method argument is provided, the contents is wrapped in the color, and the color is then reset back. - -If no block or argument is provided, the color is left open-ended, and must be explicitly reset – when using the 'bang' notation. - -![](doc/colored2-session1.png) - -### Complete set of colors: - - * black - * red - * green - * yellow - * blue - * magenta - * cyan - * white - -### Complete Set of Effects - -> Note: previous versions used method name `clear` instead of `no_color`, which clashed with many 3rd party frameworks that defined similarly named method in the global namespace. -> This highlights the dangers of introducing so many words into the `String` namespace. - - * no_color - * bold - * dark - * italic - * underlined - * reversed - * plain - * normal - -## Usage in Other Classes - -With this gem you can add color to not just strings, but to any other class. `String` class is automatically decorated as soon as `require 'colored2'` is parsed by the ruby interpreter. Note that future versions may refrain from auto-requiring `colored2/strings`, and rely on explicitly requiring components they need colorized, eg `require 'colored2/numbers'`. - -To color numbers, require the following file, which automatically decorates `Integer` and `Float`. You can also add color methods to the `Object`. Finally, you can add the methods to any custom class by including the `Colored2` Module. - -Below is an `IRB` — session that shows a slightly more advanced usage. - -![](doc/colored2-session2.png) - -## Additional Helpers - -There are several additional helpers tucked onto the `String` class. - - * `#to_bol` (to beginning of the line) will rewind the cursor back to the beginning of the current line. - * `#to_eol` (to end of line) - -## Installation - -Add this line to your application's Gemfile: - - - gem 'colored2' - - -And then execute: - - $ bundle - -Or install it yourself as: - - $ gem install colored2 - - -## Development - -To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org). - -## Contributing - -Bug reports and pull requests are welcome on GitHub at [https://github.com/kigster/colored2](https://github.com/kigster/colored2). - -## License - -The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT). diff --git a/bundle/ruby/3.2.0/gems/colored2-3.1.2/Rakefile b/bundle/ruby/3.2.0/gems/colored2-3.1.2/Rakefile deleted file mode 100644 index 47ca61b6..00000000 --- a/bundle/ruby/3.2.0/gems/colored2-3.1.2/Rakefile +++ /dev/null @@ -1,13 +0,0 @@ -require 'bundler' -require 'bundler/gem_tasks' -require 'rake/clean' - -CLEAN.include %w(pkg coverage *.gem) - -begin - require 'rspec/core/rake_task' - RSpec::Core::RakeTask.new(:spec) -rescue LoadError -end - -task :default => [:spec] diff --git a/bundle/ruby/3.2.0/gems/colored2-3.1.2/lib/colored2.rb b/bundle/ruby/3.2.0/gems/colored2-3.1.2/lib/colored2.rb deleted file mode 100644 index c4305ddb..00000000 --- a/bundle/ruby/3.2.0/gems/colored2-3.1.2/lib/colored2.rb +++ /dev/null @@ -1,85 +0,0 @@ -require 'colored2/codes' -require 'colored2/ascii_decorator' - -module Colored2 - def self.decorate(a_class) - a_class.send(:include, Colored2) - end - - def self.included(from_class) - from_class.class_eval do - - def surround_with_color(color: nil, effect: nil, color_self: nil, string: nil, &block) - color_type = if Colored2.background_next? && effect.nil? - Colored2.foreground_next! - :background - else - :foreground - end - - opts = {} - opts.merge!(color_type => color) if color - opts.merge!(effect: effect) if effect - - if color_self then - opts.merge!( beginning: :on, end: :off) - colored = Colored2::AsciiDecorator.new(self).decorate(opts) - if string || block - arg = "#{string}#{block.call if block}" - colored << Colored2::AsciiDecorator.new(arg).decorate(opts) if arg.length > 0 - end - else - opts.merge!( end: :on ) - colored = Colored2::AsciiDecorator.new(self).decorate(opts) - if string || block - arg = "#{string}#{block.call if block}" - colored << Colored2::AsciiDecorator.new(arg).decorate(opts.merge(end: :off)) if arg.length > 0 - end - end - colored - end - - def on - Colored2.background_next! - self - end - end - - from_class.instance_eval do - COLORS.keys.each do |color| - define_method(color) do |string = nil, &block| - surround_with_color(color: color, color_self: true, string: string, &block) - end - - define_method("#{color}!".to_sym) do |string = nil, &block| - surround_with_color(color: color, color_self: false, string: string, &block) - end - end - - EFFECTS.keys.each do |effect| - next if effect == 'no_color' - define_method(effect) do |string = nil, &block| - surround_with_color(effect: effect, color_self: true, string: string, &block) - end - - define_method("#{effect}!".to_sym) do |string = nil, &block| - surround_with_color(effect: effect, color_self: false, string: string, &block) - end - end - - define_method(:to_eol) do - tmp = sub(/^(\e\[[\[\e0-9;m]+m)/, "\\1\e[2K") - if tmp == self - return "\e[2K" << self - end - tmp - end - - define_method(:to_bol) do - "#{self}\033[#{length}D\033[0D" - end - end - end -end - -require 'colored2/strings' diff --git a/bundle/ruby/3.2.0/gems/colored2-3.1.2/lib/colored2/ascii_decorator.rb b/bundle/ruby/3.2.0/gems/colored2-3.1.2/lib/colored2/ascii_decorator.rb deleted file mode 100644 index c491e611..00000000 --- a/bundle/ruby/3.2.0/gems/colored2-3.1.2/lib/colored2/ascii_decorator.rb +++ /dev/null @@ -1,86 +0,0 @@ -require 'colored2/codes' -require 'forwardable' - -module Colored2 - def self.enable! - Colored2::AsciiDecorator.enable! - end - def self.disable! - Colored2::AsciiDecorator.disable! - end - def self.background_next! - Colored2::AsciiDecorator.background_next! - end - def self.foreground_next! - Colored2::AsciiDecorator.foreground_next! - end - def self.background_next? - Colored2::AsciiDecorator.background_next? - end - - class AsciiDecorator - @__background_next = false - @__colors_disabled = false - class << self - attr_accessor :__background_next, :__colors_disabled - def enable! - self.__colors_disabled = false - end - def enabled? - !self.__colors_disabled - end - def disable! - self.__colors_disabled = true - end - def background_next! - self.__background_next = true - end - def foreground_next! - self.__background_next = false - end - def background_next? - self.__background_next - end - end - - extend Forwardable - def_delegators :@my_class, :enable!, :disable! - - attr_accessor :string, :my_class - - def initialize(a_string) - self.string = a_string.instance_of?(Object) ? '' : a_string.to_s - self.my_class = self.class - end - - # options[:start] = :color - # options[:end] = :color | :no_color - def decorate(options = {}) - return string if !self.class.enabled? || string.length == 0 - escape_sequence = [ - Colored2::TextColor.new(options[:foreground]), - Colored2::BackgroundColor.new(options[:background]), - Colored2::Effect.new(options[:effect]) - ].compact.join - - colored = '' - colored << escape_sequence if options[:beginning] == :on - colored << string - if options[:end] - colored << no_color if options[:end] == :off && !colored.end_with?(no_color) - colored << escape_sequence if options[:end] == :on - end - colored - end - - def un_decorate - string.gsub(%r{\e\[\d+(;\d+)*m}, '') - end - - private - - def no_color - @no_color ||= Colored2::Effect.new(:no_color).to_s - end - end -end diff --git a/bundle/ruby/3.2.0/gems/colored2-3.1.2/lib/colored2/codes.rb b/bundle/ruby/3.2.0/gems/colored2-3.1.2/lib/colored2/codes.rb deleted file mode 100644 index 8f46f430..00000000 --- a/bundle/ruby/3.2.0/gems/colored2-3.1.2/lib/colored2/codes.rb +++ /dev/null @@ -1,63 +0,0 @@ -module Colored2 - - COLORS = { - black: 30, - red: 31, - green: 32, - yellow: 33, - blue: 34, - magenta: 35, - cyan: 36, - white: 37 - } - - EFFECTS = { - no_color: 0, - bold: 1, - dark: 2, - italic: 3, - underlined: 4, - reversed: 7, - plain: 21, # non-bold - normal: 22 - } - - class Code - attr_accessor :name, :escape - def initialize(name) - @name = name - return if name.nil? - @escape = codes[name.to_sym] - raise ArgumentError.new("No color or effect named #{name} exists for #{self.class}.") if @escape.nil? - end - - def value(shift = nil) - escape_code = escape - escape_code += shift if shift && escape_code - name && escape ? "\e[#{escape_code}m" : '' - end - - def to_s - value - end - end - - class Effect < Code - def codes - EFFECTS - end - end - - class TextColor < Code - def codes - COLORS - end - end - - class BackgroundColor < TextColor - def value - super 10 - end - end - -end diff --git a/bundle/ruby/3.2.0/gems/colored2-3.1.2/lib/colored2/numbers.rb b/bundle/ruby/3.2.0/gems/colored2-3.1.2/lib/colored2/numbers.rb deleted file mode 100644 index 64161b0c..00000000 --- a/bundle/ruby/3.2.0/gems/colored2-3.1.2/lib/colored2/numbers.rb +++ /dev/null @@ -1,11 +0,0 @@ -require 'colored2' unless defined?(Colored2) && Colored2.respond_to?(:decorate) - -module Colored2 - def self.integer_class - major, minor = RUBY_VERSION.split(/\./).map(&:to_i) - major >= 2 && minor >= 4 ? Integer : Kernel.const_get(:Fixnum) - end -end - -Colored2.decorate(Colored2.integer_class) -Colored2.decorate(Float) diff --git a/bundle/ruby/3.2.0/gems/colored2-3.1.2/lib/colored2/object.rb b/bundle/ruby/3.2.0/gems/colored2-3.1.2/lib/colored2/object.rb deleted file mode 100644 index 439b0f9f..00000000 --- a/bundle/ruby/3.2.0/gems/colored2-3.1.2/lib/colored2/object.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'colored2' unless defined?(Colored2) && Colored2.respond_to?(:decorate) -Colored2.decorate(Object) diff --git a/bundle/ruby/3.2.0/gems/colored2-3.1.2/lib/colored2/strings.rb b/bundle/ruby/3.2.0/gems/colored2-3.1.2/lib/colored2/strings.rb deleted file mode 100644 index 8e099e81..00000000 --- a/bundle/ruby/3.2.0/gems/colored2-3.1.2/lib/colored2/strings.rb +++ /dev/null @@ -1,2 +0,0 @@ -require 'colored2' unless defined?(Colored2) && Colored2.respond_to?(:decorate) -Colored2.decorate(String) diff --git a/bundle/ruby/3.2.0/gems/colored2-3.1.2/lib/colored2/version.rb b/bundle/ruby/3.2.0/gems/colored2-3.1.2/lib/colored2/version.rb deleted file mode 100644 index ab0f8a7d..00000000 --- a/bundle/ruby/3.2.0/gems/colored2-3.1.2/lib/colored2/version.rb +++ /dev/null @@ -1,3 +0,0 @@ -module Colored2 - VERSION = '3.1.2' -end diff --git a/bundle/ruby/3.2.0/gems/colored2-3.1.2/spec/colored2/numbers_spec.rb b/bundle/ruby/3.2.0/gems/colored2-3.1.2/spec/colored2/numbers_spec.rb deleted file mode 100644 index f686bfaf..00000000 --- a/bundle/ruby/3.2.0/gems/colored2-3.1.2/spec/colored2/numbers_spec.rb +++ /dev/null @@ -1,26 +0,0 @@ -require File.expand_path('spec/spec_helper') -require 'colored2/numbers' -require 'colored2/strings' - -RSpec.describe Colored2.integer_class do - describe 'with foreground and background colors' do - it 'should work with one color' do - expect(32.red).to eql('32'.red) - end - it 'should insert escape sequences' do - expect(32.red).to eql("\e[31m32\e[0m") - end - end -end - -RSpec.describe Float do - describe 'with foreground and background colors' do - it 'should add two colors chained' do - expect((32.5).blue.on.red).to eql('32.5'.blue.on.red) - end - - it 'should insert escape sequences' do - expect((32.5).blue.on.red).to eql("\e[41m\e[34m32.5\e[0m") - end - end -end diff --git a/bundle/ruby/3.2.0/gems/colored2-3.1.2/spec/colored2/object_spec.rb b/bundle/ruby/3.2.0/gems/colored2-3.1.2/spec/colored2/object_spec.rb deleted file mode 100644 index 62562546..00000000 --- a/bundle/ruby/3.2.0/gems/colored2-3.1.2/spec/colored2/object_spec.rb +++ /dev/null @@ -1,24 +0,0 @@ -require File.expand_path('spec/spec_helper') -require 'colored2/object' - -subject1 = red('hello') -subject2 = red('blue').on.blue -subject3 = on.yellow('on yellow') - -RSpec.describe Object do - - describe 'with foreground and background colors' do - it 'should work with one color' do - expect(subject1).to eql('hello'.red) - end - - it 'should work with color on color' do - expect(subject2).to eql('blue'.red.on.blue) - end - - it 'should add background color using on_' do - expect(subject3).to eql('on yellow'.on.yellow) - end - - end -end diff --git a/bundle/ruby/3.2.0/gems/colored2-3.1.2/spec/colored2/strings_spec.rb b/bundle/ruby/3.2.0/gems/colored2-3.1.2/spec/colored2/strings_spec.rb deleted file mode 100644 index 10da2a40..00000000 --- a/bundle/ruby/3.2.0/gems/colored2-3.1.2/spec/colored2/strings_spec.rb +++ /dev/null @@ -1,77 +0,0 @@ -require File.expand_path('spec/spec_helper') -require 'colored2/strings' - -RSpec.describe String do - before do - Colored2.decorate(String) - end - - describe 'with foreground and background colors' do - it 'should work with one color' do - expect('red'.red).to eql("\e[31mred\e[0m") - end - - it 'should add two colors chained' do - expect('blue'.red.blue).to eql("\e[34m\e[31mblue\e[0m") - end - - it 'should add background color using on_' do - expect('on yellow'.on.yellow).to eql("\e[43mon yellow\e[0m") - end - - it 'should work with _on_ syntax' do - expect('red on blue'.red.on.blue).to eql("\e[44m\e[31mred on blue\e[0m") - end - end - - describe 'with effects' do - it 'should add a bold modifier' do - expect('way bold'.bold).to eql("\e[1mway bold\e[0m") - end - - it 'should let modifiers stack' do - expect('underlinedd bold'.bold.underlined).to eql("\e[4m\e[1munderlinedd bold\e[0m") - end - - it 'should let modifiers stack with colors' do - expect('cyan underlinedd bold'.bold.underlined.cyan).to eql("\e[36m\e[4m\e[1mcyan underlinedd bold\e[0m") - end - end - - describe 'new block syntax' do - it 'should defined block syntax nested colors' do - expect('No Color, then'.blue!('blue inside')).to eql('No Color, then' + 'blue inside'.blue) - end - - it 'should defined block syntax nested colors two levels deep' do - expect('regular here'.blue! + 'blue here'.no_color!).to eql('regular here' << 'blue here'.blue) - end - - it 'should defined block syntax nested colors two levels deep' do - expect('regular here'.blue! { 'something else'.red!('red riding hood') }).to eql('regular here'.blue! << 'something else'.red! << 'red riding hood'.no_color!) - end - - it 'should defined block syntax nested colors two levels deep' do - expectation = 'this is regular, but '.red! do - 'this is red '.yellow! do - ' and yellow'.no_color! - end - end - expect(expectation).to eql('this is regular, but '.red! << 'this is red '.yellow! << ' and yellow'.no_color!) - end - end - - describe 'end of line' do - it 'should work with eol' do - expect('nothing to see here really.'.to_eol).to eql("\e[2Knothing to see here really.") - end - - it 'should work with eol_with_with_two_colors' do - expect('blue'.red.blue.to_eol).to eql("\e[34m\e[31m\e[2Kblue\e[0m") - end - - it 'should work with eol_with_modifiers_stack_with_colors' do - expect('cyan underlinedd bold'.bold.underlined.cyan.to_eol).to eql("\e[36m\e[4m\e[1m\e[2Kcyan underlinedd bold\e[0m") - end - end -end diff --git a/bundle/ruby/3.2.0/gems/colored2-3.1.2/spec/colored2_spec.rb b/bundle/ruby/3.2.0/gems/colored2-3.1.2/spec/colored2_spec.rb deleted file mode 100644 index 3b55f071..00000000 --- a/bundle/ruby/3.2.0/gems/colored2-3.1.2/spec/colored2_spec.rb +++ /dev/null @@ -1,23 +0,0 @@ -require 'spec_helper' -require 'colored2/strings' - -RSpec.describe Colored2 do - describe 'global enable and disable' do - before do - Colored2.disable! - end - after do - Colored2.enable! - end - let(:sample) { 'sample string' } - - describe 'colors' do - subject { sample.red.on.blue } - it { should eql(sample) } - end - describe 'effects' do - subject { sample.bold.on.red } - it { should eql(sample) } - end - end -end diff --git a/bundle/ruby/3.2.0/gems/colored2-3.1.2/spec/spec_helper.rb b/bundle/ruby/3.2.0/gems/colored2-3.1.2/spec/spec_helper.rb deleted file mode 100644 index 3f2faa0f..00000000 --- a/bundle/ruby/3.2.0/gems/colored2-3.1.2/spec/spec_helper.rb +++ /dev/null @@ -1,5 +0,0 @@ -require 'simplecov' -SimpleCov.start - -require 'rspec/core' - diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/CHANGELOG.md b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/CHANGELOG.md deleted file mode 100644 index a9426af2..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/CHANGELOG.md +++ /dev/null @@ -1,565 +0,0 @@ -## Current - -## Release v1.2.3 (16 Jan 2024) - -* See [the GitHub release](https://github.com/ruby-concurrency/concurrent-ruby/releases/tag/v1.2.3) for details. - -## Release v1.2.2 (24 Feb 2023) - -* (#993) Fix arguments passed to `Concurrent::Map`'s `default_proc`. - -## Release v1.2.1 (24 Feb 2023) - -* (#990) Add missing `require 'fiber'` for `FiberLocalVar`. -* (#989) Optimize `Concurrent::Map#[]` on CRuby by letting the backing Hash handle the `default_proc`. - -## Release v1.2.0 (23 Jan 2023) - -* (#962) Fix ReentrantReadWriteLock to use the same granularity for locals as for Mutex it uses. -* (#983) Add FiberLocalVar -* (#934) concurrent-ruby now supports requiring individual classes (public classes listed in the docs), e.g., `require 'concurrent/map'` -* (#976) Let `Promises.any_fulfilled_future` take an `Event` -* Improve documentation of various classes -* (#975) Set the Ruby compatibility version at 2.3 -* (#972) Remove Rubinius-related code - -## Release v1.1.10 (22 Mar 2022) - -concurrent-ruby: - -* (#951) Set the Ruby compatibility version at 2.2 -* (#939, #933) The `caller_runs` fallback policy no longer blocks reads from the job queue by worker threads -* (#938, #761, #652) You can now explicitly `prune_pool` a thread pool (Sylvain Joyeux) -* (#937, #757, #670) We switched the Yahoo stock API for demos to Alpha Vantage (Gustavo Caso) -* (#932, #931) We changed how `SafeTaskExecutor` handles local jump errors (Aaron Jensen) -* (#927) You can use keyword arguments in your initialize when using `Async` (Matt Larraz) -* (#926, #639) We removed timeout from `TimerTask` because it wasn't sound, and now it's a no-op with a warning (Jacob Atzen) -* (#919) If you double-lock a re-entrant read-write lock, we promote to locked for writing (zp yuan) -* (#915) `monotonic_time` now accepts an optional unit parameter, as Ruby's `clock_gettime` (Jean Boussier) - -## Release v1.1.9 (5 Jun 2021) - -concurrent-ruby: - -* (#866) Child promise state not set to :pending immediately after #execute when parent has completed -* (#905, #872) Fix RubyNonConcurrentPriorityQueue#delete method -* (2df0337d) Make sure locks are not shared on shared when objects are dup/cloned -* (#900, #906, #796, #847, #911) Fix Concurrent::Set tread-safety issues on CRuby -* (#907) Add new ConcurrentMap backend for TruffleRuby - -## Release v1.1.8 (20 January 2021) - -concurrent-ruby: - -* (#885) Fix race condition in TVar for stale reads -* (#884) RubyThreadLocalVar: Do not iterate over hash which might conflict with new pair addition - -## Release v1.1.7 (6 August 2020) - -concurrent-ruby: - -* (#879) Consider falsy value on `Concurrent::Map#compute_if_absent` for fast non-blocking path -* (#876) Reset Async queue on forking, makes Async fork-safe -* (#856) Avoid running problematic code in RubyThreadLocalVar on MRI that occasionally results in segfault -* (#853) Introduce ThreadPoolExecutor without a Queue - -## Release v1.1.6, edge v0.6.0 (10 Feb 2020) - -concurrent-ruby: - -* (#841) Concurrent.disable_at_exit_handlers! is no longer needed and was deprecated. -* (#841) AbstractExecutorService#auto_terminate= was deprecated and has no effect. - Set :auto_terminate option instead when executor is initialized. - -## Release v1.1.6.pre1, edge v0.6.0.pre1 (26 Jan 2020) - -concurrent-ruby: - -* (#828) Allow to name executors, the name is also used to name their threads -* (#838) Implement #dup and #clone for structs -* (#821) Safer finalizers for thread local variables -* Documentation fixes -* (#814) Use Ruby's Etc.nprocessors if available -* (#812) Fix directory structure not to mess with packaging tools -* (#840) Fix termination of pools on JRuby - -concurrent-ruby-edge: - -* Add WrappingExecutor (#830) - -## Release v1.1.5, edge v0.5.0 (10 Mar 2019) - -concurrent-ruby: - -* fix potential leak of context on JRuby and Java 7 - -concurrent-ruby-edge: - -* Add finalized Concurrent::Cancellation -* Add finalized Concurrent::Throttle -* Add finalized Concurrent::Promises::Channel -* Add new Concurrent::ErlangActor - -## Release v1.1.4 (14 Dec 2018) - -* (#780) Remove java_alias of 'submit' method of Runnable to let executor service work on java 11 -* (#776) Fix NameError on defining a struct with a name which is already taken in an ancestor - -## Release v1.1.3 (7 Nov 2018) - -* (#775) fix partial require of the gem (although not officially supported) - -## Release v1.1.2 (6 Nov 2018) - -* (#773) more defensive 1.9.3 support - -## Release v1.1.1, edge v0.4.1 (1 Nov 2018) - -* (#768) add support for 1.9.3 back - -## Release v1.1.0, edge v0.4.0 (31 OCt 2018) (yanked) - -* (#768) yanked because of issues with removed 1.9.3 support - -## Release v1.1.0.pre2, edge v0.4.0.pre2 (18 Sep 2018) - -concurrent-ruby: - -* fixed documentation and README links -* fix Set for TruffleRuby and Rubinius -* use properly supported TruffleRuby APIs - -concurrent-ruby-edge: - -* add Promises.zip_futures_over_on - -## Release v1.1.0.pre1, edge v0.4.0.pre1 (15 Aug 2018) - -concurrent-ruby: - -* requires at least Ruby 2.0 -* [Promises](http://ruby-concurrency.github.io/concurrent-ruby/1.1.0/Concurrent/Promises.html) - are moved from `concurrent-ruby-edge` to `concurrent-ruby` -* Add support for TruffleRuby - * (#734) Fix Array/Hash/Set construction broken on TruffleRuby - * AtomicReference fixed -* CI stabilization -* remove sharp dependency edge -> core -* remove warnings -* documentation updates -* Exchanger is no longer documented as edge since it was already available in - `concurrent-ruby` -* (#644) Fix Map#each and #each_pair not returning enumerator outside of MRI -* (#659) Edge promises fail during error handling -* (#741) Raise on recursive Delay#value call -* (#727) #717 fix global IO executor on JRuby -* (#740) Drop support for CRuby 1.9, JRuby 1.7, Rubinius. -* (#737) Move AtomicMarkableReference out of Edge -* (#708) Prefer platform specific memory barriers -* (#735) Fix wrong expected exception in channel spec assertion -* (#729) Allow executor option in `Promise#then` -* (#725) fix timeout check to use timeout_interval -* (#719) update engine detection -* (#660) Add specs for Promise#zip/Promise.zip ordering -* (#654) Promise.zip execution changes -* (#666) Add thread safe set implementation -* (#651) #699 #to_s, #inspect should not output negative object IDs. -* (#685) Avoid RSpec warnings about raise_error -* (#680) Avoid RSpec monkey patching, persist spec results locally, use RSpec - v3.7.0 -* (#665) Initialize the monitor for new subarrays on Rubinius -* (#661) Fix error handling in edge promises - -concurrent-ruby-edge: - -* (#659) Edge promises fail during error handling -* Edge files clearly separated in `lib-edge` -* added ReInclude - -## Release v1.0.5, edge v0.3.1 (26 Feb 2017) - -concurrent-ruby: - -* Documentation for Event and Semaphore -* Use Unsafe#fullFence and #loadFence directly since the shortcuts were removed in JRuby -* Do not depend on org.jruby.util.unsafe.UnsafeHolder - -concurrent-ruby-edge: - -* (#620) Actors on Pool raise an error -* (#624) Delayed promises did not interact correctly with flatting - * Fix arguments yielded by callback methods -* Overridable default executor in promises factory methods -* Asking actor to terminate will always resolve to `true` - -## Release v1.0.4, edge v0.3.0 (27 Dec 2016) - -concurrent-ruby: - -* Nothing - -concurrent-ruby-edge: - -* New promises' API renamed, lots of improvements, edge bumped to 0.3.0 - * **Incompatible** with previous 0.2.3 version - * see https://github.com/ruby-concurrency/concurrent-ruby/pull/522 - -## Release v1.0.3 (17 Dec 2016) - -* Trigger execution of flattened delayed futures -* Avoid forking for processor_count if possible -* Semaphore Mutex and JRuby parity -* Adds Map#each as alias to Map#each_pair -* Fix uninitialized instance variables -* Make Fixnum, Bignum merger ready -* Allows Promise#then to receive an executor -* TimerSet now survives a fork -* Reject promise on any exception -* Allow ThreadLocalVar to be initialized with a block -* Support Alpha with `Concurrent::processor_count` -* Fixes format-security error when compiling ruby_193_compatible.h -* Concurrent::Atom#swap fixed: reraise the exceptions from block - -## Release v1.0.2 (2 May 2016) - -* Fix bug with `Concurrent::Map` MRI backend `#inspect` method -* Fix bug with `Concurrent::Map` MRI backend using `Hash#value?` -* Improved documentation and examples -* Minor updates to Edge - -## Release v1.0.1 (27 February 2016) - -* Fix "uninitialized constant Concurrent::ReentrantReadWriteLock" error. -* Better handling of `autoload` vs. `require`. -* Improved API for Edge `Future` zipping. -* Fix reference leak in Edge `Future` constructor . -* Fix bug which prevented thread pools from surviving a `fork`. -* Fix bug in which `TimerTask` did not correctly specify all its dependencies. -* Improved support for JRuby+Truffle -* Improved error messages. -* Improved documentation. -* Updated README and CONTRIBUTING. - -## Release v1.0.0 (13 November 2015) - -* Rename `attr_volatile_with_cas` to `attr_atomic` -* Add `clear_each` to `LockFreeStack` -* Update `AtomicReference` documentation -* Further updates and improvements to the synchronization layer. -* Performance and memory usage performance with `Actor` logging. -* Fixed `ThreadPoolExecutor` task count methods. -* Improved `Async` performance for both short and long-lived objects. -* Fixed bug in `LockFreeLinkedSet`. -* Fixed bug in which `Agent#await` triggered a validation failure. -* Further `Channel` updates. -* Adopted a project Code of Conduct -* Cleared interpreter warnings -* Fixed bug in `ThreadPoolExecutor` task count methods -* Fixed bug in 'LockFreeLinkedSet' -* Improved Java extension loading -* Handle Exception children in Edge::Future -* Continued improvements to channel -* Removed interpreter warnings. -* Shared constants now in `lib/concurrent/constants.rb` -* Refactored many tests. -* Improved synchronization layer/memory model documentation. -* Bug fix in Edge `Future#flat` -* Brand new `Channel` implementation in Edge gem. -* Simplification of `RubySingleThreadExecutor` -* `Async` improvements - - Each object uses its own `SingleThreadExecutor` instead of the global thread pool. - - No longers supports executor injection - - Much better documentation -* `Atom` updates - - No longer `Dereferenceable` - - Now `Observable` - - Added a `#reset` method -* Brand new `Agent` API and implementation. Now functionally equivalent to Clojure. -* Continued improvements to the synchronization layer -* Merged in the `thread_safe` gem - - `Concurrent::Array` - - `Concurrent::Hash` - - `Concurrent::Map` (formerly ThreadSafe::Cache) - - `Concurrent::Tuple` -* Minor improvements to Concurrent::Map -* Complete rewrite of `Exchanger` -* Removed all deprecated code (classes, methods, constants, etc.) -* Updated Agent, MutexAtomic, and BufferedChannel to inherit from Synchronization::Object. -* Many improved tests -* Some internal reorganization - -## Release v0.9.1 (09 August 2015) - -* Fixed a Rubiniux bug in synchronization object -* Fixed all interpreter warnings (except circular references) -* Fixed require statements when requiring `Atom` alone -* Significantly improved `ThreadLocalVar` on non-JRuby platforms -* Fixed error handling in Edge `Concurrent.zip` -* `AtomicFixnum` methods `#increment` and `#decrement` now support optional delta -* New `AtomicFixnum#update` method -* Minor optimizations in `ReadWriteLock` -* New `ReentrantReadWriteLock` class -* `ThreadLocalVar#bind` method is now public -* Refactored many tests - -## Release v0.9.0 (10 July 2015) - -* Updated `AtomicReference` - - `AtomicReference#try_update` now simply returns instead of raising exception - - `AtomicReference#try_update!` was added to raise exceptions if an update - fails. Note: this is the same behavior as the old `try_update` -* Pure Java implementations of - - `AtomicBoolean` - - `AtomicFixnum` - - `Semaphore` -* Fixed bug when pruning Ruby thread pools -* Fixed bug in time calculations within `ScheduledTask` -* Default `count` in `CountDownLatch` to 1 -* Use monotonic clock for all timers via `Concurrent.monotonic_time` - - Use `Process.clock_gettime(Process::CLOCK_MONOTONIC)` when available - - Fallback to `java.lang.System.nanoTime()` on unsupported JRuby versions - - Pure Ruby implementation for everything else - - Effects `Concurrent.timer`, `Concurrent.timeout`, `TimerSet`, `TimerTask`, and `ScheduledTask` -* Deprecated all clock-time based timer scheduling - - Only support scheduling by delay - - Effects `Concurrent.timer`, `TimerSet`, and `ScheduledTask` -* Added new `ReadWriteLock` class -* Consistent `at_exit` behavior for Java and Ruby thread pools. -* Added `at_exit` handler to Ruby thread pools (already in Java thread pools) - - Ruby handler stores the object id and retrieves from `ObjectSpace` - - JRuby disables `ObjectSpace` by default so that handler stores the object reference -* Added a `:stop_on_exit` option to thread pools to enable/disable `at_exit` handler -* Updated thread pool docs to better explain shutting down thread pools -* Simpler `:executor` option syntax for all abstractions which support this option -* Added `Executor#auto_terminate?` predicate method (for thread pools) -* Added `at_exit` handler to `TimerSet` -* Simplified auto-termination of the global executors - - Can now disable auto-termination of global executors - - Added shutdown/kill/wait_for_termination variants for global executors -* Can now disable auto-termination for *all* executors (the nuclear option) -* Simplified auto-termination of the global executors -* Deprecated terms "task pool" and "operation pool" - - New terms are "io executor" and "fast executor" - - New functions added with new names - - Deprecation warnings added to functions referencing old names -* Moved all thread pool related functions from `Concurrent::Configuration` to `Concurrent` - - Old functions still exist with deprecation warnings - - New functions have updated names as appropriate -* All high-level abstractions default to the "io executor" -* Fixed bug in `Actor` causing it to prematurely warm global thread pools on gem load - - This also fixed a `RejectedExecutionError` bug when running with minitest/autorun via JRuby -* Moved global logger up to the `Concurrent` namespace and refactored the code -* Optimized the performance of `Delay` - - Fixed a bug in which no executor option on construction caused block execution on a global thread pool -* Numerous improvements and bug fixes to `TimerSet` -* Fixed deadlock of `Future` when the handler raises Exception -* Added shared specs for more classes -* New concurrency abstractions including: - - `Atom` - - `Maybe` - - `ImmutableStruct` - - `MutableStruct` - - `SettableStruct` -* Created an Edge gem for unstable abstractions including - - `Actor` - - `Agent` - - `Channel` - - `Exchanger` - - `LazyRegister` - - **new Future Framework** - unified - implementation of Futures and Promises which combines Features of previous `Future`, - `Promise`, `IVar`, `Event`, `Probe`, `dataflow`, `Delay`, `TimerTask` into single framework. It uses extensively - new synchronization layer to make all the paths **lock-free** with exception of blocking threads on `#wait`. - It offers better performance and does not block threads when not required. -* Actor framework changes: - - fixed reset loop in Pool - - Pool can use any actor as a worker, abstract worker class is no longer needed. - - Actor events not have format `[:event_name, *payload]` instead of just the Symbol. - - Actor now uses new Future/Promise Framework instead of `IVar` for better interoperability - - Behaviour definition array was simplified to `[BehaviourClass1, [BehaviourClass2, *initialization_args]]` - - Linking behavior responds to :linked message by returning array of linked actors - - Supervised behavior is removed in favour of just Linking - - RestartingContext is supervised by default now, `supervise: true` is not required any more - - Events can be private and public, so far only difference is that Linking will - pass to linked actors only public messages. Adding private :restarting and - :resetting events which are send before the actor restarts or resets allowing - to add callbacks to cleanup current child actors. - - Print also object_id in Reference to_s - - Add AbstractContext#default_executor to be able to override executor class wide - - Add basic IO example - - Documentation somewhat improved - - All messages should have same priority. It's now possible to send `actor << job1 << job2 << :terminate!` and - be sure that both jobs are processed first. -* Refactored `Channel` to use newer synchronization objects -* Added `#reset` and `#cancel` methods to `TimerSet` -* Added `#cancel` method to `Future` and `ScheduledTask` -* Refactored `TimerSet` to use `ScheduledTask` -* Updated `Async` with a factory that initializes the object -* Deprecated `Concurrent.timer` and `Concurrent.timeout` -* Reduced max threads on pure-Ruby thread pools (abends around 14751 threads) -* Moved many private/internal classes/modules into "namespace" modules -* Removed brute-force killing of threads in tests -* Fixed a thread pool bug when the operating system cannot allocate more threads - -## Release v0.8.0 (25 January 2015) - -* C extension for MRI have been extracted into the `concurrent-ruby-ext` companion gem. - Please see the README for more detail. -* Better variable isolation in `Promise` and `Future` via an `:args` option -* Continued to update intermittently failing tests - -## Release v0.7.2 (24 January 2015) - -* New `Semaphore` class based on [java.util.concurrent.Semaphore](http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Semaphore.html) -* New `Promise.all?` and `Promise.any?` class methods -* Renamed `:overflow_policy` on thread pools to `:fallback_policy` -* Thread pools still accept the `:overflow_policy` option but display a warning -* Thread pools now implement `fallback_policy` behavior when not running (rather than universally rejecting tasks) -* Fixed minor `set_deref_options` constructor bug in `Promise` class -* Fixed minor `require` bug in `ThreadLocalVar` class -* Fixed race condition bug in `TimerSet` class -* Fixed race condition bug in `TimerSet` class -* Fixed signal bug in `TimerSet#post` method -* Numerous non-functional updates to clear warning when running in debug mode -* Fixed more intermittently failing tests -* Tests now run on new Travis build environment -* Multiple documentation updates - -## Release v0.7.1 (4 December 2014) - -Please see the [roadmap](https://github.com/ruby-concurrency/concurrent-ruby/issues/142) for more information on the next planned release. - -* Added `flat_map` method to `Promise` -* Added `zip` method to `Promise` -* Fixed bug with logging in `Actor` -* Improvements to `Promise` tests -* Removed actor-experimental warning -* Added an `IndirectImmediateExecutor` class -* Allow disabling auto termination of global executors -* Fix thread leaking in `ThreadLocalVar` (uses `Ref` gem on non-JRuby systems) -* Fix thread leaking when pruning pure-Ruby thread pools -* Prevent `Actor` from using an `ImmediateExecutor` (causes deadlock) -* Added missing synchronizations to `TimerSet` -* Fixed bug with return value of `Concurrent::Actor::Utils::Pool#ask` -* Fixed timing bug in `TimerTask` -* Fixed bug when creating a `JavaThreadPoolExecutor` with minimum pool size of zero -* Removed confusing warning when not using native extenstions -* Improved documentation - -## Release v0.7.0 (13 August 2014) - -* Merge the [atomic](https://github.com/ruby-concurrency/atomic) gem - - Pure Ruby `MutexAtomic` atomic reference class - - Platform native atomic reference classes `CAtomic`, `JavaAtomic`, and `RbxAtomic` - - Automated [build process](https://github.com/ruby-concurrency/rake-compiler-dev-box) - - Fat binary releases for [multiple platforms](https://rubygems.org/gems/concurrent-ruby/versions) including Windows (32/64), Linux (32/64), OS X (64-bit), Solaris (64-bit), and JRuby -* C native `CAtomicBoolean` -* C native `CAtomicFixnum` -* Refactored intermittently failing tests -* Added `dataflow!` and `dataflow_with!` methods to match `Future#value!` method -* Better handling of timeout in `Agent` -* Actor Improvements - - Fine-grained implementation using chain of behaviors. Each behavior is responsible for single aspect like: `Termination`, `Pausing`, `Linking`, `Supervising`, etc. Users can create custom Actors easily based on their needs. - - Supervision was added. `RestartingContext` will pause on error waiting on its supervisor to decide what to do next ( options are `:terminate!`, `:resume!`, `:reset!`, `:restart!`). Supervising behavior also supports strategies `:one_for_one` and `:one_for_all`. - - Linking was added to be able to monitor actor's events like: `:terminated`, `:paused`, `:restarted`, etc. - - Dead letter routing added. Rejected envelopes are collected in a configurable actor (default: `Concurrent::Actor.root.ask!(:dead_letter_routing)`) - - Old `Actor` class removed and replaced by new implementation previously called `Actress`. `Actress` was kept as an alias for `Actor` to keep compatibility. - - `Utils::Broadcast` actor which allows Publish–subscribe pattern. -* More executors for managing serialized operations - - `SerializedExecution` mixin module - - `SerializedExecutionDelegator` for serializing *any* executor -* Updated `Async` with serialized execution -* Updated `ImmediateExecutor` and `PerThreadExecutor` with full executor service lifecycle -* Added a `Delay` to root `Actress` initialization -* Minor bug fixes to thread pools -* Refactored many intermittently failing specs -* Removed Java interop warning `executor.rb:148 warning: ambiguous Java methods found, using submit(java.lang.Runnable)` -* Fixed minor bug in `RubyCachedThreadPool` overflow policy -* Updated tests to use [RSpec 3.0](http://myronmars.to/n/dev-blog/2014/05/notable-changes-in-rspec-3) -* Removed deprecated `Actor` class -* Better support for Rubinius - -## Release v0.6.1 (14 June 2014) - -* Many improvements to `Concurrent::Actress` -* Bug fixes to `Concurrent::RubyThreadPoolExecutor` -* Fixed several brittle tests -* Moved documentation to http://ruby-concurrency.github.io/concurrent-ruby/frames.html - -## Release v0.6.0 (25 May 2014) - -* Added `Concurrent::Observable` to encapsulate our thread safe observer sets -* Improvements to new `Channel` -* Major improvements to `CachedThreadPool` and `FixedThreadPool` -* Added `SingleThreadExecutor` -* Added `Current::timer` function -* Added `TimerSet` executor -* Added `AtomicBoolean` -* `ScheduledTask` refactoring -* Pure Ruby and JRuby-optimized `PriorityQueue` classes -* Updated `Agent` behavior to more closely match Clojure -* Observer sets support block callbacks to the `add_observer` method -* New algorithm for thread creation in `RubyThreadPoolExecutor` -* Minor API updates to `Event` -* Rewritten `TimerTask` now an `Executor` instead of a `Runnable` -* Fixed many brittle specs -* Renamed `FixedThreadPool` and `CachedThreadPool` to `RubyFixedThreadPool` and `RubyCachedThreadPool` -* Created JRuby optimized `JavaFixedThreadPool` and `JavaCachedThreadPool` -* Consolidated fixed thread pool tests into `spec/concurrent/fixed_thread_pool_shared.rb` and `spec/concurrent/cached_thread_pool_shared.rb` -* `FixedThreadPool` now subclasses `RubyFixedThreadPool` or `JavaFixedThreadPool` as appropriate -* `CachedThreadPool` now subclasses `RubyCachedThreadPool` or `JavaCachedThreadPool` as appropriate -* New `Delay` class -* `Concurrent::processor_count` helper function -* New `Async` module -* Renamed `NullThreadPool` to `PerThreadExecutor` -* Deprecated `Channel` (we are planning a new implementation based on [Go](http://golangtutorials.blogspot.com/2011/06/channels-in-go.html)) -* Added gem-level [configuration](http://robots.thoughtbot.com/mygem-configure-block) -* Deprecated `$GLOBAL_THREAD_POOL` in lieu of gem-level configuration -* Removed support for Ruby [1.9.2](https://www.ruby-lang.org/en/news/2013/12/17/maintenance-of-1-8-7-and-1-9-2/) -* New `RubyThreadPoolExecutor` and `JavaThreadPoolExecutor` classes -* All thread pools now extend the appropriate thread pool executor classes -* All thread pools now support `:overflow_policy` (based on Java's [reject policies](http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ThreadPoolExecutor.html)) -* Deprecated `UsesGlobalThreadPool` in lieu of explicit `:executor` option (dependency injection) on `Future`, `Promise`, and `Agent` -* Added `Concurrent::dataflow_with(executor, *inputs)` method to support executor dependency injection for dataflow -* Software transactional memory with `TVar` and `Concurrent::atomically` -* First implementation of [new, high-performance](https://github.com/ruby-concurrency/concurrent-ruby/pull/49) `Channel` -* `Actor` is deprecated in favor of new experimental actor implementation [#73](https://github.com/ruby-concurrency/concurrent-ruby/pull/73). To avoid namespace collision it is living in `Actress` namespace until `Actor` is removed in next release. - -## Release v0.5.0 - -This is the most significant release of this gem since its inception. This release includes many improvements and optimizations. It also includes several bug fixes. The major areas of focus for this release were: - -* Stability improvements on Ruby versions with thread-level parallelism ([JRuby](http://jruby.org/) and [Rubinius](http://rubini.us/)) -* Creation of new low-level concurrency abstractions -* Internal refactoring to use the new low-level abstractions - -Most of these updates had no effect on the gem API. There are a few notable exceptions which were unavoidable. Please read the [release notes](API-Updates-in-v0.5.0) for more information. - -Specific changes include: - -* New class `IVar` -* New class `MVar` -* New class `ThreadLocalVar` -* New class `AtomicFixnum` -* New class method `dataflow` -* New class `Condition` -* New class `CountDownLatch` -* New class `DependencyCounter` -* New class `SafeTaskExecutor` -* New class `CopyOnNotifyObserverSet` -* New class `CopyOnWriteObserverSet` -* `Future` updated with `execute` API -* `ScheduledTask` updated with `execute` API -* New `Promise` API -* `Future` now extends `IVar` -* `Postable#post?` now returns an `IVar` -* Thread safety fixes to `Dereferenceable` -* Thread safety fixes to `Obligation` -* Thread safety fixes to `Supervisor` -* Thread safety fixes to `Event` -* Various other thread safety (race condition) fixes -* Refactored brittle tests -* Implemented pending tests -* Added JRuby and Rubinius as Travis CI build targets -* Added [CodeClimate](https://codeclimate.com/) code review -* Improved YARD documentation diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/Gemfile b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/Gemfile deleted file mode 100644 index f10dc8eb..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/Gemfile +++ /dev/null @@ -1,36 +0,0 @@ -source 'https://rubygems.org' - -require File.join(File.dirname(__FILE__), 'lib/concurrent-ruby/concurrent/version') -require File.join(File.dirname(__FILE__ ), 'lib/concurrent-ruby-edge/concurrent/edge/version') - -no_path = ENV['NO_PATH'] -options = no_path ? {} : { path: '.' } - -gem 'concurrent-ruby', Concurrent::VERSION, options -gem 'concurrent-ruby-edge', Concurrent::EDGE_VERSION, options -gem 'concurrent-ruby-ext', Concurrent::VERSION, options.merge(platform: :mri) - -group :development do - gem 'rake', '~> 13.0' - gem 'rake-compiler', '~> 1.0', '>= 1.0.7', '!= 1.2.4' - gem 'rake-compiler-dock', '~> 1.0' - gem 'pry', '~> 0.11', platforms: :mri -end - -group :documentation, optional: true do - gem 'yard', '~> 0.9.0', require: false - gem 'redcarpet', '~> 3.0', platforms: :mri # understands github markdown - gem 'md-ruby-eval', '~> 0.6' -end - -group :testing do - gem 'rspec', '~> 3.7' - gem 'timecop', '~> 0.9' - gem 'sigdump', require: false -end - -# made opt-in since it will not install on jruby 1.7 -group :coverage, optional: !ENV['COVERAGE'] do - gem 'simplecov', '~> 0.16.0', require: false - gem 'coveralls', '~> 0.8.2', require: false -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/LICENSE.txt b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/LICENSE.txt deleted file mode 100644 index 1026f28d..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/LICENSE.txt +++ /dev/null @@ -1,21 +0,0 @@ -Copyright (c) Jerry D'Antonio -- released under the MIT license. - -http://www.opensource.org/licenses/mit-license.php - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/README.md b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/README.md deleted file mode 100644 index 66a6983b..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/README.md +++ /dev/null @@ -1,407 +0,0 @@ -# Concurrent Ruby - -[![Gem Version](https://badge.fury.io/rb/concurrent-ruby.svg)](http://badge.fury.io/rb/concurrent-ruby) -[![License](https://img.shields.io/badge/license-MIT-green.svg)](http://opensource.org/licenses/MIT) -[![Gitter chat](https://img.shields.io/badge/IRC%20(gitter)-devs%20%26%20users-brightgreen.svg)](https://gitter.im/ruby-concurrency/concurrent-ruby) - -Modern concurrency tools for Ruby. Inspired by -[Erlang](http://www.erlang.org/doc/reference_manual/processes.html), -[Clojure](http://clojure.org/concurrent_programming), -[Scala](http://akka.io/), -[Haskell](http://www.haskell.org/haskellwiki/Applications_and_libraries/Concurrency_and_parallelism#Concurrent_Haskell), -[F#](http://blogs.msdn.com/b/dsyme/archive/2010/02/15/async-and-parallel-design-patterns-in-f-part-3-agents.aspx), -[C#](http://msdn.microsoft.com/en-us/library/vstudio/hh191443.aspx), -[Java](http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/package-summary.html), -and classic concurrency patterns. - - - -The design goals of this gem are: - -* Be an 'unopinionated' toolbox that provides useful utilities without debating which is better - or why -* Remain free of external gem dependencies -* Stay true to the spirit of the languages providing inspiration -* But implement in a way that makes sense for Ruby -* Keep the semantics as idiomatic Ruby as possible -* Support features that make sense in Ruby -* Exclude features that don't make sense in Ruby -* Be small, lean, and loosely coupled -* Thread-safety -* Backward compatibility - -## Contributing - -**This gem depends on -[contributions](https://github.com/ruby-concurrency/concurrent-ruby/graphs/contributors) and we -appreciate your help. Would you like to contribute? Great! Have a look at -[issues with `looking-for-contributor` label](https://github.com/ruby-concurrency/concurrent-ruby/issues?q=is%3Aissue+is%3Aopen+label%3Alooking-for-contributor).** And if you pick something up let us know on the issue. - -You can also get started by triaging issues which may include reproducing bug reports or asking for vital information, such as version numbers or reproduction instructions. If you would like to start triaging issues, one easy way to get started is to [subscribe to concurrent-ruby on CodeTriage](https://www.codetriage.com/ruby-concurrency/concurrent-ruby). [![Open Source Helpers](https://www.codetriage.com/ruby-concurrency/concurrent-ruby/badges/users.svg)](https://www.codetriage.com/ruby-concurrency/concurrent-ruby) - -## Thread Safety - -*Concurrent Ruby makes one of the strongest thread safety guarantees of any Ruby concurrency -library, providing consistent behavior and guarantees on all three main Ruby interpreters -(MRI/CRuby, JRuby, TruffleRuby).* - -Every abstraction in this library is thread safe. Specific thread safety guarantees are documented -with each abstraction. - -It is critical to remember, however, that Ruby is a language of mutable references. *No* -concurrency library for Ruby can ever prevent the user from making thread safety mistakes (such as -sharing a mutable object between threads and modifying it on both threads) or from creating -deadlocks through incorrect use of locks. All the library can do is provide safe abstractions which -encourage safe practices. Concurrent Ruby provides more safe concurrency abstractions than any -other Ruby library, many of which support the mantra of -["Do not communicate by sharing memory; instead, share memory by communicating"](https://blog.golang.org/share-memory-by-communicating). -Concurrent Ruby is also the only Ruby library which provides a full suite of thread safe and -immutable variable types and data structures. - -We've also initiated discussion to document the [memory model](docs-source/synchronization.md) of Ruby which -would provide consistent behaviour and guarantees on all three main Ruby interpreters -(MRI/CRuby, JRuby, TruffleRuby). - -## Features & Documentation - -**The primary site for documentation is the automatically generated -[API documentation](http://ruby-concurrency.github.io/concurrent-ruby/index.html) which is up to -date with latest release.** This readme matches the master so may contain new stuff not yet -released. - -We also have a [IRC (gitter)](https://gitter.im/ruby-concurrency/concurrent-ruby). - -### Versioning - -* `concurrent-ruby` uses [Semantic Versioning](http://semver.org/) -* `concurrent-ruby-ext` has always same version as `concurrent-ruby` -* `concurrent-ruby-edge` will always be 0.y.z therefore following - [point 4](http://semver.org/#spec-item-4) applies *"Major version zero - (0.y.z) is for initial development. Anything may change at any time. The - public API should not be considered stable."* However we additionally use - following rules: - * Minor version increment means incompatible changes were made - * Patch version increment means only compatible changes were made - - -#### General-purpose Concurrency Abstractions - -* [Async](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Async.html): - A mixin module that provides simple asynchronous behavior to a class. Loosely based on Erlang's - [gen_server](http://www.erlang.org/doc/man/gen_server.html). -* [ScheduledTask](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/ScheduledTask.html): - Like a Future scheduled for a specific future time. -* [TimerTask](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/TimerTask.html): - A Thread that periodically wakes up to perform work at regular intervals. -* [Promises](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Promises.html): - Unified implementation of futures and promises which combines features of previous `Future`, - `Promise`, `IVar`, `Event`, `dataflow`, `Delay`, and (partially) `TimerTask` into a single - framework. It extensively uses the new synchronization layer to make all the features - **non-blocking** and **lock-free**, with the exception of obviously blocking operations like - `#wait`, `#value`. It also offers better performance. - -#### Thread-safe Value Objects, Structures, and Collections - -Collection classes that were originally part of the (deprecated) `thread_safe` gem: - -* [Array](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Array.html) A thread-safe - subclass of Ruby's standard [Array](http://ruby-doc.org/core/Array.html). -* [Hash](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Hash.html) A thread-safe - subclass of Ruby's standard [Hash](http://ruby-doc.org/core/Hash.html). -* [Set](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Set.html) A thread-safe - subclass of Ruby's standard [Set](http://ruby-doc.org/stdlib-2.4.0/libdoc/set/rdoc/Set.html). -* [Map](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Map.html) A hash-like object - that should have much better performance characteristics, especially under high concurrency, - than `Concurrent::Hash`. -* [Tuple](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Tuple.html) A fixed size - array with volatile (synchronized, thread safe) getters/setters. - -Value objects inspired by other languages: - -* [Maybe](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Maybe.html) A thread-safe, - immutable object representing an optional value, based on - [Haskell Data.Maybe](https://hackage.haskell.org/package/base-4.2.0.1/docs/Data-Maybe.html). - -Structure classes derived from Ruby's [Struct](http://ruby-doc.org/core/Struct.html): - -* [ImmutableStruct](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/ImmutableStruct.html) - Immutable struct where values are set at construction and cannot be changed later. -* [MutableStruct](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/MutableStruct.html) - Synchronized, mutable struct where values can be safely changed at any time. -* [SettableStruct](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/SettableStruct.html) - Synchronized, write-once struct where values can be set at most once, either at construction - or any time thereafter. - -Thread-safe variables: - -* [Agent](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Agent.html): A way to - manage shared, mutable, *asynchronous*, independent state. Based on Clojure's - [Agent](http://clojure.org/agents). -* [Atom](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Atom.html): A way to manage - shared, mutable, *synchronous*, independent state. Based on Clojure's - [Atom](http://clojure.org/atoms). -* [AtomicBoolean](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/AtomicBoolean.html) - A boolean value that can be updated atomically. -* [AtomicFixnum](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/AtomicFixnum.html) - A numeric value that can be updated atomically. -* [AtomicReference](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/AtomicReference.html) - An object reference that may be updated atomically. -* [Exchanger](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Exchanger.html) - A synchronization point at which threads can pair and swap elements within pairs. Based on - Java's [Exchanger](http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Exchanger.html). -* [MVar](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/MVar.html) A synchronized - single element container. Based on Haskell's - [MVar](https://hackage.haskell.org/package/base-4.8.1.0/docs/Control-Concurrent-MVar.html) and - Scala's [MVar](http://docs.typelevel.org/api/scalaz/nightly/index.html#scalaz.concurrent.MVar$). -* [ThreadLocalVar](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/ThreadLocalVar.html) - A variable where the value is different for each thread. -* [TVar](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/TVar.html) A transactional - variable implementing software transactional memory (STM). Based on Clojure's - [Ref](http://clojure.org/refs). - -#### Java-inspired ThreadPools and Other Executors - -* See the [thread pool](http://ruby-concurrency.github.io/concurrent-ruby/master/file.thread_pools.html) - overview, which also contains a list of other Executors available. - -#### Thread Synchronization Classes and Algorithms - -* [CountDownLatch](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/CountDownLatch.html) - A synchronization object that allows one thread to wait on multiple other threads. -* [CyclicBarrier](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/CyclicBarrier.html) - A synchronization aid that allows a set of threads to all wait for each other to reach a common barrier point. -* [Event](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Event.html) Old school - kernel-style event. -* [ReadWriteLock](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/ReadWriteLock.html) - A lock that supports multiple readers but only one writer. -* [ReentrantReadWriteLock](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/ReentrantReadWriteLock.html) - A read/write lock with reentrant and upgrade features. -* [Semaphore](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Semaphore.html) - A counting-based locking mechanism that uses permits. -* [AtomicMarkableReference](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/AtomicMarkableReference.html) - -#### Deprecated - -Deprecated features are still available and bugs are being fixed, but new features will not be added. - -* ~~[Future](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Future.html): - An asynchronous operation that produces a value.~~ Replaced by - [Promises](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Promises.html). - * ~~[.dataflow](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent.html#dataflow-class_method): - Built on Futures, Dataflow allows you to create a task that will be scheduled when all of - its data dependencies are available.~~ Replaced by - [Promises](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Promises.html). -* ~~[Promise](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Promise.html): Similar - to Futures, with more features.~~ Replaced by - [Promises](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Promises.html). -* ~~[Delay](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Delay.html) Lazy evaluation - of a block yielding an immutable result. Based on Clojure's - [delay](https://clojuredocs.org/clojure.core/delay).~~ Replaced by - [Promises](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Promises.html). -* ~~[IVar](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/IVar.html) Similar to a - "future" but can be manually assigned once, after which it becomes immutable.~~ Replaced by - [Promises](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Promises.html). - -### Edge Features - -These are available in the `concurrent-ruby-edge` companion gem. - -These features are under active development and may change frequently. They are expected not to -keep backward compatibility (there may also lack tests and documentation). Semantic versions will -be obeyed though. Features developed in `concurrent-ruby-edge` are expected to move to -`concurrent-ruby` when final. - -* [Actor](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Actor.html): Implements - the Actor Model, where concurrent actors exchange messages. - *Status: Partial documentation and tests; depends on new future/promise framework; stability is good.* -* [Channel](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Channel.html): - Communicating Sequential Processes ([CSP](https://en.wikipedia.org/wiki/Communicating_sequential_processes)). - Functionally equivalent to Go [channels](https://tour.golang.org/concurrency/2) with additional - inspiration from Clojure [core.async](https://clojure.github.io/core.async/). - *Status: Partial documentation and tests.* -* [LazyRegister](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/LazyRegister.html) -* [LockFreeLinkedSet](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Edge/LockFreeLinkedSet.html) - *Status: will be moved to core soon.* -* [LockFreeStack](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/LockFreeStack.html) - *Status: missing documentation and tests.* -* [Promises::Channel](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Promises/Channel.html) - A first in first out channel that accepts messages with push family of methods and returns - messages with pop family of methods. - Pop and push operations can be represented as futures, see `#pop_op` and `#push_op`. - The capacity of the channel can be limited to support back pressure, use capacity option in `#initialize`. - `#pop` method blocks ans `#pop_op` returns pending future if there is no message in the channel. - If the capacity is limited the `#push` method blocks and `#push_op` returns pending future. -* [Cancellation](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Cancellation.html) - The Cancellation abstraction provides cooperative cancellation. - - The standard methods `Thread#raise` of `Thread#kill` available in Ruby - are very dangerous (see linked the blog posts bellow). - Therefore concurrent-ruby provides an alternative. - - * - * - * - - It provides an object which represents a task which can be executed, - the task has to get the reference to the object and periodically cooperatively check that it is not cancelled. - Good practices to make tasks cancellable: - * check cancellation every cycle of a loop which does significant work, - * do all blocking actions in a loop with a timeout then on timeout check cancellation - and if ok block again with the timeout -* [Throttle](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/Throttle.html) - A tool managing concurrency level of tasks. -* [ErlangActor](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/ErlangActor.html) - Actor implementation which precisely matches Erlang actor behaviour. - Requires at least Ruby 2.1 otherwise it's not loaded. -* [WrappingExecutor](http://ruby-concurrency.github.io/concurrent-ruby/master/Concurrent/WrappingExecutor.html) - A delegating executor which modifies each task before the task is given to - the target executor it delegates to. - -## Supported Ruby versions - -* MRI 2.3 and above -* Latest JRuby 9000 -* Latest TruffleRuby - -## Usage - -Everything within this gem can be loaded simply by requiring it: - -```ruby -require 'concurrent' -``` - -You can also require a specific abstraction [part of the public documentation](https://ruby-concurrency.github.io/concurrent-ruby/master/index.html) since concurrent-ruby 1.2.0, for example: -```ruby -require 'concurrent/map' -require 'concurrent/atomic/atomic_reference' -require 'concurrent/executor/fixed_thread_pool' -``` - -To use the tools in the Edge gem it must be required separately: - -```ruby -require 'concurrent-edge' -``` - -If the library does not behave as expected, `Concurrent.use_stdlib_logger(Logger::DEBUG)` could -help to reveal the problem. - -## Installation - -```shell -gem install concurrent-ruby -``` - -or add the following line to Gemfile: - -```ruby -gem 'concurrent-ruby', require: 'concurrent' -``` - -and run `bundle install` from your shell. - -### Edge Gem Installation - -The Edge gem must be installed separately from the core gem: - -```shell -gem install concurrent-ruby-edge -``` - -or add the following line to Gemfile: - -```ruby -gem 'concurrent-ruby-edge', require: 'concurrent-edge' -``` - -and run `bundle install` from your shell. - - -### C Extensions for MRI - -Potential performance improvements may be achieved under MRI by installing optional C extensions. -To minimise installation errors the C extensions are available in the `concurrent-ruby-ext` -extension gem. `concurrent-ruby` and `concurrent-ruby-ext` are always released together with same -version. Simply install the extension gem too: - -```ruby -gem install concurrent-ruby-ext -``` - -or add the following line to Gemfile: - -```ruby -gem 'concurrent-ruby-ext' -``` - -and run `bundle install` from your shell. - -In code it is only necessary to - -```ruby -require 'concurrent' -``` - -The `concurrent-ruby` gem will automatically detect the presence of the `concurrent-ruby-ext` gem -and load the appropriate C extensions. - -#### Note For gem developers - -No gems should depend on `concurrent-ruby-ext`. Doing so will force C extensions on your users. The -best practice is to depend on `concurrent-ruby` and let users to decide if they want C extensions. - -## Building the gem - -### Requirements - -* Recent CRuby -* JRuby, `rbenv install jruby-9.2.17.0` -* Set env variable `CONCURRENT_JRUBY_HOME` to point to it, e.g. `/usr/local/opt/rbenv/versions/jruby-9.2.17.0` -* Install Docker, required for Windows builds - -### Publishing the Gem - -* Update `version.rb` -* Update the CHANGELOG -* Add the new version to `docs-source/signpost.md`. Needs to be done only if there are visible changes in the documentation. -* Commit (and push) the changes. -* Use `bundle exec rake release` to release the gem. - It consists of `['release:checks', 'release:build', 'release:test', 'release:publish']` steps. - It will ask at the end before publishing anything. Steps can also be executed individually. - -## Maintainers - -* [Benoit Daloze](https://github.com/eregon) -* [Matthew Draper](https://github.com/matthewd) -* [Rafael França](https://github.com/rafaelfranca) -* [Charles Oliver Nutter](https://github.com/headius) -* [Ben Sheldon](https://github.com/bensheldon) -* [Samuel Williams](https://github.com/ioquatix) - -### Special Thanks to - -* [Jerry D'Antonio](https://github.com/jdantonio) for creating the gem -* [Brian Durand](https://github.com/bdurand) for the `ref` gem -* [Charles Oliver Nutter](https://github.com/headius) for the `atomic` and `thread_safe` gems -* [thedarkone](https://github.com/thedarkone) for the `thread_safe` gem - -to the past maintainers - -* [Chris Seaton](https://github.com/chrisseaton) -* [Petr Chalupa](https://github.com/pitr-ch) -* [Michele Della Torre](https://github.com/mighe) -* [Paweł Obrok](https://github.com/obrok) -* [Lucas Allan](https://github.com/lucasallan) - -and to [Ruby Association](https://www.ruby.or.jp/en/) for sponsoring a project -["Enhancing Ruby’s concurrency tooling"](https://www.ruby.or.jp/en/news/20181106) in 2018. - -## License and Copyright - -*Concurrent Ruby* is free software released under the -[MIT License](http://www.opensource.org/licenses/MIT). - -The *Concurrent Ruby* [logo](https://raw.githubusercontent.com/ruby-concurrency/concurrent-ruby/master/docs-source/logo/concurrent-ruby-logo-300x300.png) was -designed by [David Jones](https://twitter.com/zombyboy). It is Copyright © 2014 -[Jerry D'Antonio](https://twitter.com/jerrydantonio). All Rights Reserved. diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/Rakefile b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/Rakefile deleted file mode 100644 index f167f465..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/Rakefile +++ /dev/null @@ -1,319 +0,0 @@ -require_relative 'lib/concurrent-ruby/concurrent/version' -require_relative 'lib/concurrent-ruby-edge/concurrent/edge/version' -require_relative 'lib/concurrent-ruby/concurrent/utility/engine' - -core_gemspec = Gem::Specification.load File.join(__dir__, 'concurrent-ruby.gemspec') -ext_gemspec = Gem::Specification.load File.join(__dir__, 'concurrent-ruby-ext.gemspec') -edge_gemspec = Gem::Specification.load File.join(__dir__, 'concurrent-ruby-edge.gemspec') - -require 'rake/javaextensiontask' - -ENV['JRUBY_HOME'] = ENV['CONCURRENT_JRUBY_HOME'] if ENV['CONCURRENT_JRUBY_HOME'] && !Concurrent.on_jruby? - -Rake::JavaExtensionTask.new('concurrent_ruby', core_gemspec) do |ext| - ext.ext_dir = 'ext/concurrent-ruby' - ext.lib_dir = 'lib/concurrent-ruby/concurrent' -end - -unless Concurrent.on_jruby? || Concurrent.on_truffleruby? - require 'rake/extensiontask' - - Rake::ExtensionTask.new('concurrent_ruby_ext', ext_gemspec) do |ext| - ext.ext_dir = 'ext/concurrent-ruby-ext' - ext.lib_dir = 'lib/concurrent-ruby/concurrent' - ext.source_pattern = '*.{c,h}' - - ext.cross_compile = true - ext.cross_platform = ['x86-mingw32', 'x64-mingw32'] - end -end - -require 'rake_compiler_dock' -namespace :repackage do - desc '* with Windows fat distributions' - task :all do - Dir.chdir(__dir__) do - # store gems in vendor cache for docker - Bundler.with_original_env do - sh 'bundle package' - end - - # build only the jar file not the whole gem for java platform, the jar is part the concurrent-ruby-x.y.z.gem - Rake::Task['lib/concurrent-ruby/concurrent/concurrent_ruby.jar'].invoke - - # build all gem files - %w[x86-mingw32 x64-mingw32].each do |plat| - RakeCompilerDock.sh( - "bundle install --local && bundle exec rake native:#{plat} gem --trace", - platform: plat, - options: ['--privileged'], # otherwise the directory in the image is empty - runas: false) - end - end - end -end - -require 'rubygems' -require 'rubygems/package_task' - -Gem::PackageTask.new(core_gemspec) {} if core_gemspec -Gem::PackageTask.new(ext_gemspec) {} if ext_gemspec && !Concurrent.on_jruby? -Gem::PackageTask.new(edge_gemspec) {} if edge_gemspec - -CLEAN.include( - 'lib/concurrent-ruby/concurrent/concurrent_ruby_ext.*', - 'lib/concurrent-ruby/concurrent/2.*', - 'lib/concurrent-ruby/concurrent/*.jar') - -begin - require 'rspec' - require 'rspec/core/rake_task' - - RSpec::Core::RakeTask.new(:spec) - - namespace :spec do - desc '* Configured for ci' - RSpec::Core::RakeTask.new(:ci) do |t| - options = %w[ --color - --backtrace - --order defined - --format documentation ] - t.rspec_opts = [*options].join(' ') - end - - desc '* test packaged and installed gems instead of local files' - task :installed do - Bundler.with_original_env do - Dir.chdir(__dir__) do - sh "gem install pkg/concurrent-ruby-#{Concurrent::VERSION}.gem" - sh "gem install pkg/concurrent-ruby-ext-#{Concurrent::VERSION}.gem" if Concurrent.on_cruby? - sh "gem install pkg/concurrent-ruby-edge-#{Concurrent::EDGE_VERSION}.gem" - ENV['NO_PATH'] = 'true' - sh 'bundle update' - sh 'bundle exec rake spec:ci' - end - end - end - end - - desc 'executed in CI' - task :ci => [:compile, 'spec:ci'] - - desc 'run each spec file in a separate process to help find missing requires' - task 'spec:isolated' do - glob = "#{ENV['DIR'] || 'spec'}/**/*_spec.rb" - from = ENV['FROM'] - env = { 'ISOLATED' => 'true' } - Dir[glob].each do |spec| - next if from and from != spec - from = nil if from == spec - - sh env, 'rspec', spec - end - end - - task :default => [:clobber, :compile, :spec] -rescue LoadError => e - puts 'RSpec is not installed, skipping test task definitions: ' + e.message -end - -current_yard_version_name = Concurrent::VERSION - -begin - require 'yard' - require 'md_ruby_eval' - require_relative 'support/yard_full_types' - - common_yard_options = ['--no-yardopts', - '--no-document', - '--no-private', - '--embed-mixins', - '--markup', 'markdown', - '--title', 'Concurrent Ruby', - '--template', 'default', - '--template-path', 'yard-template', - '--default-return', 'undocumented'] - - desc 'Generate YARD Documentation (signpost, master)' - task :yard => ['yard:signpost', 'yard:master'] - - namespace :yard do - - desc '* eval markdown files' - task :eval_md do - Dir.chdir File.join(__dir__, 'docs-source') do - sh 'bundle exec md-ruby-eval --auto' - end - end - - task :update_readme do - Dir.chdir __dir__ do - content = File.read(File.join('README.md')). - gsub(/\[([\w ]+)\]\(http:\/\/ruby-concurrency\.github\.io\/concurrent-ruby\/master\/.*\)/) do |_| - case $1 - when 'LockFreeLinkedSet' - "{Concurrent::Edge::#{$1} #{$1}}" - when '.dataflow' - '{Concurrent.dataflow Concurrent.dataflow}' - when 'thread pool' - '{file:thread_pools.md thread pool}' - else - "{Concurrent::#{$1} #{$1}}" - end - end - FileUtils.mkpath 'tmp' - File.write 'tmp/README.md', content - end - end - - define_yard_task = -> name do - output_dir = "docs/#{name}" - - removal_name = "remove.#{name}" - task removal_name do - Dir.chdir __dir__ do - FileUtils.rm_rf output_dir - end - end - - desc "* of #{name} into subdir #{name}" - YARD::Rake::YardocTask.new(name) do |yard| - yard.options.push( - '--output-dir', output_dir, - '--main', 'tmp/README.md', - *common_yard_options) - yard.files = ['./lib/concurrent-ruby/**/*.rb', - './lib/concurrent-ruby-edge/**/*.rb', - './ext/concurrent_ruby_ext/**/*.c', - '-', - 'docs-source/thread_pools.md', - 'docs-source/promises.out.md', - 'docs-source/medium-example.out.rb', - 'LICENSE.txt', - 'CHANGELOG.md'] - end - Rake::Task[name].prerequisites.push removal_name, - # 'yard:eval_md', - 'yard:update_readme' - end - - define_yard_task.call current_yard_version_name - define_yard_task.call 'master' - - desc "* signpost for versions" - YARD::Rake::YardocTask.new(:signpost) do |yard| - yard.options.push( - '--output-dir', 'docs', - '--main', 'docs-source/signpost.md', - *common_yard_options) - yard.files = ['no-lib'] - end - end - -rescue LoadError => e - puts 'YARD is not installed, skipping documentation task definitions: ' + e.message -end - -desc 'build, test, and publish the gem' -task :release => ['release:checks', 'release:build', 'release:test', 'release:publish'] - -namespace :release do - # Depends on environment of @pitr-ch - - task :checks do - Dir.chdir(__dir__) do - sh 'test -z "$(git status --porcelain)"' do |ok, res| - unless ok - begin - status = `git status --porcelain` - STDOUT.puts 'There are local changes that you might want to commit.', status, 'Continue? (y/n)' - input = STDIN.gets.strip.downcase - end until %w(y n).include?(input) - exit 1 if input == 'n' - end - end - sh 'git fetch' - sh 'test $(git show-ref --verify --hash refs/heads/master) = ' + - '$(git show-ref --verify --hash refs/remotes/origin/master)' do |ok, res| - unless ok - begin - STDOUT.puts 'Local master branch is not pushed to origin.', 'Continue? (y/n)' - input = STDIN.gets.strip.downcase - end until %w(y n).include?(input) - exit 1 if input == 'n' - end - end - end - end - - desc '* build all *.gem files necessary for release' - task :build => [:clobber, 'repackage:all'] - - desc '* test actual installed gems instead of cloned repository on MRI and JRuby' - task :test do - Dir.chdir(__dir__) do - puts "Testing with the installed gem" - - Bundler.with_original_env do - sh 'ruby -v' - sh 'bundle exec rake spec:installed' - - env = { "PATH" => "#{ENV['CONCURRENT_JRUBY_HOME']}/bin:#{ENV['PATH']}" } - sh env, 'ruby -v' - sh env, 'bundle exec rake spec:installed' - end - - puts 'Windows build is untested' - end - end - - desc '* do all nested steps' - task :publish => ['publish:ask', 'publish:tag', 'publish:rubygems', 'publish:post_steps'] - - namespace :publish do - publish_base = true - publish_edge = false - - task :ask do - begin - STDOUT.puts 'Do you want to publish anything now? (y/n)' - input = STDIN.gets.strip.downcase - end until %w(y n).include?(input) - exit 1 if input == 'n' - begin - STDOUT.puts 'It will publish `concurrent-ruby`. Do you want to publish `concurrent-ruby-edge`? (y/n)' - input = STDIN.gets.strip.downcase - end until %w(y n).include?(input) - publish_edge = input == 'y' - end - - desc '** tag HEAD with current version and push to github' - task :tag => :ask do - Dir.chdir(__dir__) do - sh "git tag v#{Concurrent::VERSION}" if publish_base - sh "git push origin v#{Concurrent::VERSION}" if publish_base - sh "git tag edge-v#{Concurrent::EDGE_VERSION}" if publish_edge - sh "git push origin edge-v#{Concurrent::EDGE_VERSION}" if publish_edge - end - end - - desc '** push all *.gem files to rubygems' - task :rubygems => :ask do - Dir.chdir(__dir__) do - sh "gem push pkg/concurrent-ruby-#{Concurrent::VERSION}.gem" if publish_base - sh "gem push pkg/concurrent-ruby-edge-#{Concurrent::EDGE_VERSION}.gem" if publish_edge - sh "gem push pkg/concurrent-ruby-ext-#{Concurrent::VERSION}.gem" if publish_base - sh "gem push pkg/concurrent-ruby-ext-#{Concurrent::VERSION}-x64-mingw32.gem" if publish_base - sh "gem push pkg/concurrent-ruby-ext-#{Concurrent::VERSION}-x86-mingw32.gem" if publish_base - end - end - - desc '** print post release steps' - task :post_steps do - # TODO: (petr 05-Jun-2021) automate and renew the process - puts 'Manually: create a release on GitHub with relevant changelog part' - puts 'Manually: send email same as release with relevant changelog part' - puts 'Manually: tweet' - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/ext/concurrent-ruby/ConcurrentRubyService.java b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/ext/concurrent-ruby/ConcurrentRubyService.java deleted file mode 100644 index fb6be96d..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/ext/concurrent-ruby/ConcurrentRubyService.java +++ /dev/null @@ -1,17 +0,0 @@ -import org.jruby.Ruby; -import org.jruby.runtime.load.BasicLibraryService; - -import java.io.IOException; - -public class ConcurrentRubyService implements BasicLibraryService { - - public boolean basicLoad(final Ruby runtime) throws IOException { - new com.concurrent_ruby.ext.AtomicReferenceLibrary().load(runtime, false); - new com.concurrent_ruby.ext.JavaAtomicBooleanLibrary().load(runtime, false); - new com.concurrent_ruby.ext.JavaAtomicFixnumLibrary().load(runtime, false); - new com.concurrent_ruby.ext.JavaSemaphoreLibrary().load(runtime, false); - new com.concurrent_ruby.ext.SynchronizationLibrary().load(runtime, false); - new com.concurrent_ruby.ext.JRubyMapBackendLibrary().load(runtime, false); - return true; - } -} diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/ext/concurrent-ruby/com/concurrent_ruby/ext/AtomicReferenceLibrary.java b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/ext/concurrent-ruby/com/concurrent_ruby/ext/AtomicReferenceLibrary.java deleted file mode 100644 index dfa9e770..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/ext/concurrent-ruby/com/concurrent_ruby/ext/AtomicReferenceLibrary.java +++ /dev/null @@ -1,175 +0,0 @@ -package com.concurrent_ruby.ext; - -import java.lang.reflect.Field; -import java.io.IOException; -import java.util.concurrent.atomic.AtomicReferenceFieldUpdater; -import org.jruby.Ruby; -import org.jruby.RubyClass; -import org.jruby.RubyModule; -import org.jruby.RubyNumeric; -import org.jruby.RubyObject; -import org.jruby.anno.JRubyClass; -import org.jruby.anno.JRubyMethod; -import org.jruby.runtime.ObjectAllocator; -import org.jruby.runtime.ThreadContext; -import org.jruby.runtime.builtin.IRubyObject; -import org.jruby.runtime.load.Library; - -/** - * This library adds an atomic reference type to JRuby for use in the atomic - * library. We do a native version to avoid the implicit value coercion that - * normally happens through JI. - * - * @author headius - */ -public class AtomicReferenceLibrary implements Library { - public void load(Ruby runtime, boolean wrap) throws IOException { - RubyModule concurrentMod = runtime.defineModule("Concurrent"); - RubyClass atomicCls = concurrentMod.defineClassUnder("JavaAtomicReference", runtime.getObject(), JRUBYREFERENCE_ALLOCATOR); - try { - sun.misc.Unsafe.class.getMethod("getAndSetObject", Object.class); - atomicCls.setAllocator(JRUBYREFERENCE8_ALLOCATOR); - } catch (Exception e) { - // leave it as Java 6/7 version - } - atomicCls.defineAnnotatedMethods(JRubyReference.class); - } - - private static final ObjectAllocator JRUBYREFERENCE_ALLOCATOR = new ObjectAllocator() { - public IRubyObject allocate(Ruby runtime, RubyClass klazz) { - return new JRubyReference(runtime, klazz); - } - }; - - private static final ObjectAllocator JRUBYREFERENCE8_ALLOCATOR = new ObjectAllocator() { - public IRubyObject allocate(Ruby runtime, RubyClass klazz) { - return new JRubyReference8(runtime, klazz); - } - }; - - @JRubyClass(name="JRubyReference", parent="Object") - public static class JRubyReference extends RubyObject { - volatile IRubyObject reference; - - static final sun.misc.Unsafe UNSAFE; - static final long referenceOffset; - - static { - try { - UNSAFE = UnsafeHolder.U; - Class k = JRubyReference.class; - referenceOffset = UNSAFE.objectFieldOffset(k.getDeclaredField("reference")); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - public JRubyReference(Ruby runtime, RubyClass klass) { - super(runtime, klass); - } - - @JRubyMethod - public IRubyObject initialize(ThreadContext context) { - UNSAFE.putObject(this, referenceOffset, context.nil); - return context.nil; - } - - @JRubyMethod - public IRubyObject initialize(ThreadContext context, IRubyObject value) { - UNSAFE.putObject(this, referenceOffset, value); - return context.nil; - } - - @JRubyMethod(name = {"get", "value"}) - public IRubyObject get() { - return reference; - } - - @JRubyMethod(name = {"set", "value="}) - public IRubyObject set(IRubyObject newValue) { - UNSAFE.putObjectVolatile(this, referenceOffset, newValue); - return newValue; - } - - @JRubyMethod(name = {"compare_and_set", "compare_and_swap"}) - public IRubyObject compare_and_set(ThreadContext context, IRubyObject expectedValue, IRubyObject newValue) { - Ruby runtime = context.runtime; - - if (expectedValue instanceof RubyNumeric) { - // numerics are not always idempotent in Ruby, so we need to do slower logic - return compareAndSetNumeric(context, expectedValue, newValue); - } - - return runtime.newBoolean(UNSAFE.compareAndSwapObject(this, referenceOffset, expectedValue, newValue)); - } - - @JRubyMethod(name = {"get_and_set", "swap"}) - public IRubyObject get_and_set(ThreadContext context, IRubyObject newValue) { - // less-efficient version for Java 6 and 7 - while (true) { - IRubyObject oldValue = get(); - if (UNSAFE.compareAndSwapObject(this, referenceOffset, oldValue, newValue)) { - return oldValue; - } - } - } - - private IRubyObject compareAndSetNumeric(ThreadContext context, IRubyObject expectedValue, IRubyObject newValue) { - Ruby runtime = context.runtime; - - // loop until: - // * reference CAS would succeed for same-valued objects - // * current and expected have different values as determined by #equals - while (true) { - IRubyObject current = reference; - - if (!(current instanceof RubyNumeric)) { - // old value is not numeric, CAS fails - return runtime.getFalse(); - } - - RubyNumeric currentNumber = (RubyNumeric)current; - if (!currentNumber.equals(expectedValue)) { - // current number does not equal expected, fail CAS - return runtime.getFalse(); - } - - // check that current has not changed, or else allow loop to repeat - boolean success = UNSAFE.compareAndSwapObject(this, referenceOffset, current, newValue); - if (success) { - // value is same and did not change in interim...success - return runtime.getTrue(); - } - } - } - } - - private static final class UnsafeHolder { - private UnsafeHolder(){} - - public static final sun.misc.Unsafe U = loadUnsafe(); - - private static sun.misc.Unsafe loadUnsafe() { - try { - Class unsafeClass = Class.forName("sun.misc.Unsafe"); - Field f = unsafeClass.getDeclaredField("theUnsafe"); - f.setAccessible(true); - return (sun.misc.Unsafe) f.get(null); - } catch (Exception e) { - return null; - } - } - } - - public static class JRubyReference8 extends JRubyReference { - public JRubyReference8(Ruby runtime, RubyClass klass) { - super(runtime, klass); - } - - @Override - public IRubyObject get_and_set(ThreadContext context, IRubyObject newValue) { - // efficient version for Java 8 - return (IRubyObject)UNSAFE.getAndSetObject(this, referenceOffset, newValue); - } - } -} diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/ext/concurrent-ruby/com/concurrent_ruby/ext/JRubyMapBackendLibrary.java b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/ext/concurrent-ruby/com/concurrent_ruby/ext/JRubyMapBackendLibrary.java deleted file mode 100644 index a09f9162..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/ext/concurrent-ruby/com/concurrent_ruby/ext/JRubyMapBackendLibrary.java +++ /dev/null @@ -1,248 +0,0 @@ -package com.concurrent_ruby.ext; - -import org.jruby.*; -import org.jruby.anno.JRubyClass; -import org.jruby.anno.JRubyMethod; -import com.concurrent_ruby.ext.jsr166e.ConcurrentHashMap; -import com.concurrent_ruby.ext.jsr166e.ConcurrentHashMapV8; -import com.concurrent_ruby.ext.jsr166e.nounsafe.*; -import org.jruby.runtime.Block; -import org.jruby.runtime.ObjectAllocator; -import org.jruby.runtime.ThreadContext; -import org.jruby.runtime.builtin.IRubyObject; -import org.jruby.runtime.load.Library; - -import java.io.IOException; -import java.util.Map; - -import static org.jruby.runtime.Visibility.PRIVATE; - -/** - * Native Java implementation to avoid the JI overhead. - * - * @author thedarkone - */ -public class JRubyMapBackendLibrary implements Library { - public void load(Ruby runtime, boolean wrap) throws IOException { - - RubyModule concurrentMod = runtime.defineModule("Concurrent"); - RubyModule thread_safeMod = concurrentMod.defineModuleUnder("Collection"); - RubyClass jrubyRefClass = thread_safeMod.defineClassUnder("JRubyMapBackend", runtime.getObject(), BACKEND_ALLOCATOR); - jrubyRefClass.setAllocator(BACKEND_ALLOCATOR); - jrubyRefClass.defineAnnotatedMethods(JRubyMapBackend.class); - } - - private static final ObjectAllocator BACKEND_ALLOCATOR = new ObjectAllocator() { - public IRubyObject allocate(Ruby runtime, RubyClass klazz) { - return new JRubyMapBackend(runtime, klazz); - } - }; - - @JRubyClass(name="JRubyMapBackend", parent="Object") - public static class JRubyMapBackend extends RubyObject { - // Defaults used by the CHM - static final int DEFAULT_INITIAL_CAPACITY = 16; - static final float DEFAULT_LOAD_FACTOR = 0.75f; - - public static final boolean CAN_USE_UNSAFE_CHM = canUseUnsafeCHM(); - - private ConcurrentHashMap map; - - private static ConcurrentHashMap newCHM(int initialCapacity, float loadFactor) { - if (CAN_USE_UNSAFE_CHM) { - return new ConcurrentHashMapV8(initialCapacity, loadFactor); - } else { - return new com.concurrent_ruby.ext.jsr166e.nounsafe.ConcurrentHashMapV8(initialCapacity, loadFactor); - } - } - - private static ConcurrentHashMap newCHM() { - return newCHM(DEFAULT_INITIAL_CAPACITY, DEFAULT_LOAD_FACTOR); - } - - private static boolean canUseUnsafeCHM() { - try { - new com.concurrent_ruby.ext.jsr166e.ConcurrentHashMapV8(); // force class load and initialization - return true; - } catch (Throwable t) { // ensuring we really do catch everything - // Doug's Unsafe setup errors always have this "Could not ini.." message - if (isCausedBySecurityException(t)) { - return false; - } - throw (t instanceof RuntimeException ? (RuntimeException) t : new RuntimeException(t)); - } - } - - private static boolean isCausedBySecurityException(Throwable t) { - while (t != null) { - if ((t.getMessage() != null && t.getMessage().contains("Could not initialize intrinsics")) || t instanceof SecurityException) { - return true; - } - t = t.getCause(); - } - return false; - } - - public JRubyMapBackend(Ruby runtime, RubyClass klass) { - super(runtime, klass); - } - - @JRubyMethod - public IRubyObject initialize(ThreadContext context) { - map = newCHM(); - return context.getRuntime().getNil(); - } - - @JRubyMethod - public IRubyObject initialize(ThreadContext context, IRubyObject options) { - map = toCHM(context, options); - return context.getRuntime().getNil(); - } - - private ConcurrentHashMap toCHM(ThreadContext context, IRubyObject options) { - Ruby runtime = context.getRuntime(); - if (!options.isNil() && options.respondsTo("[]")) { - IRubyObject rInitialCapacity = options.callMethod(context, "[]", runtime.newSymbol("initial_capacity")); - IRubyObject rLoadFactor = options.callMethod(context, "[]", runtime.newSymbol("load_factor")); - int initialCapacity = !rInitialCapacity.isNil() ? RubyNumeric.num2int(rInitialCapacity.convertToInteger()) : DEFAULT_INITIAL_CAPACITY; - float loadFactor = !rLoadFactor.isNil() ? (float)RubyNumeric.num2dbl(rLoadFactor.convertToFloat()) : DEFAULT_LOAD_FACTOR; - return newCHM(initialCapacity, loadFactor); - } else { - return newCHM(); - } - } - - @JRubyMethod(name = "[]", required = 1) - public IRubyObject op_aref(ThreadContext context, IRubyObject key) { - IRubyObject value; - return ((value = map.get(key)) == null) ? context.getRuntime().getNil() : value; - } - - @JRubyMethod(name = {"[]="}, required = 2) - public IRubyObject op_aset(IRubyObject key, IRubyObject value) { - map.put(key, value); - return value; - } - - @JRubyMethod - public IRubyObject put_if_absent(IRubyObject key, IRubyObject value) { - IRubyObject result = map.putIfAbsent(key, value); - return result == null ? getRuntime().getNil() : result; - } - - @JRubyMethod - public IRubyObject compute_if_absent(final ThreadContext context, final IRubyObject key, final Block block) { - return map.computeIfAbsent(key, new ConcurrentHashMap.Fun() { - @Override - public IRubyObject apply(IRubyObject key) { - return block.yieldSpecific(context); - } - }); - } - - @JRubyMethod - public IRubyObject compute_if_present(final ThreadContext context, final IRubyObject key, final Block block) { - IRubyObject result = map.computeIfPresent(key, new ConcurrentHashMap.BiFun() { - @Override - public IRubyObject apply(IRubyObject key, IRubyObject oldValue) { - IRubyObject result = block.yieldSpecific(context, oldValue == null ? context.getRuntime().getNil() : oldValue); - return result.isNil() ? null : result; - } - }); - return result == null ? context.getRuntime().getNil() : result; - } - - @JRubyMethod - public IRubyObject compute(final ThreadContext context, final IRubyObject key, final Block block) { - IRubyObject result = map.compute(key, new ConcurrentHashMap.BiFun() { - @Override - public IRubyObject apply(IRubyObject key, IRubyObject oldValue) { - IRubyObject result = block.yieldSpecific(context, oldValue == null ? context.getRuntime().getNil() : oldValue); - return result.isNil() ? null : result; - } - }); - return result == null ? context.getRuntime().getNil() : result; - } - - @JRubyMethod - public IRubyObject merge_pair(final ThreadContext context, final IRubyObject key, final IRubyObject value, final Block block) { - IRubyObject result = map.merge(key, value, new ConcurrentHashMap.BiFun() { - @Override - public IRubyObject apply(IRubyObject oldValue, IRubyObject newValue) { - IRubyObject result = block.yieldSpecific(context, oldValue == null ? context.getRuntime().getNil() : oldValue); - return result.isNil() ? null : result; - } - }); - return result == null ? context.getRuntime().getNil() : result; - } - - @JRubyMethod - public RubyBoolean replace_pair(IRubyObject key, IRubyObject oldValue, IRubyObject newValue) { - return getRuntime().newBoolean(map.replace(key, oldValue, newValue)); - } - - @JRubyMethod(name = "key?", required = 1) - public RubyBoolean has_key_p(IRubyObject key) { - return map.containsKey(key) ? getRuntime().getTrue() : getRuntime().getFalse(); - } - - @JRubyMethod - public IRubyObject key(IRubyObject value) { - final IRubyObject key = map.findKey(value); - return key == null ? getRuntime().getNil() : key; - } - - @JRubyMethod - public IRubyObject replace_if_exists(IRubyObject key, IRubyObject value) { - IRubyObject result = map.replace(key, value); - return result == null ? getRuntime().getNil() : result; - } - - @JRubyMethod - public IRubyObject get_and_set(IRubyObject key, IRubyObject value) { - IRubyObject result = map.put(key, value); - return result == null ? getRuntime().getNil() : result; - } - - @JRubyMethod - public IRubyObject delete(IRubyObject key) { - IRubyObject result = map.remove(key); - return result == null ? getRuntime().getNil() : result; - } - - @JRubyMethod - public RubyBoolean delete_pair(IRubyObject key, IRubyObject value) { - return getRuntime().newBoolean(map.remove(key, value)); - } - - @JRubyMethod - public IRubyObject clear() { - map.clear(); - return this; - } - - @JRubyMethod - public IRubyObject each_pair(ThreadContext context, Block block) { - for (Map.Entry entry : map.entrySet()) { - block.yieldSpecific(context, entry.getKey(), entry.getValue()); - } - return this; - } - - @JRubyMethod - public RubyFixnum size(ThreadContext context) { - return context.getRuntime().newFixnum(map.size()); - } - - @JRubyMethod - public IRubyObject get_or_default(IRubyObject key, IRubyObject defaultValue) { - return map.getValueOrDefault(key, defaultValue); - } - - @JRubyMethod(visibility = PRIVATE) - public JRubyMapBackend initialize_copy(ThreadContext context, IRubyObject other) { - map = newCHM(); - return this; - } - } -} diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/ext/concurrent-ruby/com/concurrent_ruby/ext/JavaAtomicBooleanLibrary.java b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/ext/concurrent-ruby/com/concurrent_ruby/ext/JavaAtomicBooleanLibrary.java deleted file mode 100644 index b5660762..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/ext/concurrent-ruby/com/concurrent_ruby/ext/JavaAtomicBooleanLibrary.java +++ /dev/null @@ -1,93 +0,0 @@ -package com.concurrent_ruby.ext; - -import org.jruby.Ruby; -import org.jruby.RubyBoolean; -import org.jruby.RubyClass; -import org.jruby.RubyModule; -import org.jruby.RubyNil; -import org.jruby.RubyObject; -import org.jruby.anno.JRubyClass; -import org.jruby.anno.JRubyMethod; -import org.jruby.runtime.ObjectAllocator; -import org.jruby.runtime.ThreadContext; -import org.jruby.runtime.builtin.IRubyObject; -import org.jruby.runtime.load.Library; - -import java.io.IOException; -import java.util.concurrent.atomic.AtomicBoolean; - -public class JavaAtomicBooleanLibrary implements Library { - - public void load(Ruby runtime, boolean wrap) throws IOException { - RubyModule concurrentMod = runtime.defineModule("Concurrent"); - RubyClass atomicCls = concurrentMod.defineClassUnder("JavaAtomicBoolean", runtime.getObject(), JRUBYREFERENCE_ALLOCATOR); - atomicCls.defineAnnotatedMethods(JavaAtomicBoolean.class); - } - - private static final ObjectAllocator JRUBYREFERENCE_ALLOCATOR = new ObjectAllocator() { - public IRubyObject allocate(Ruby runtime, RubyClass klazz) { - return new JavaAtomicBoolean(runtime, klazz); - } - }; - - @JRubyClass(name = "JavaAtomicBoolean", parent = "Object") - public static class JavaAtomicBoolean extends RubyObject { - - private AtomicBoolean atomicBoolean; - - public JavaAtomicBoolean(Ruby runtime, RubyClass metaClass) { - super(runtime, metaClass); - } - - @JRubyMethod - public IRubyObject initialize(ThreadContext context, IRubyObject value) { - atomicBoolean = new AtomicBoolean(convertRubyBooleanToJavaBoolean(value)); - return context.nil; - } - - @JRubyMethod - public IRubyObject initialize(ThreadContext context) { - atomicBoolean = new AtomicBoolean(); - return context.nil; - } - - @JRubyMethod(name = "value") - public IRubyObject value() { - return getRuntime().newBoolean(atomicBoolean.get()); - } - - @JRubyMethod(name = "true?") - public IRubyObject isAtomicTrue() { - return getRuntime().newBoolean(atomicBoolean.get()); - } - - @JRubyMethod(name = "false?") - public IRubyObject isAtomicFalse() { - return getRuntime().newBoolean((atomicBoolean.get() == false)); - } - - @JRubyMethod(name = "value=") - public IRubyObject setAtomic(ThreadContext context, IRubyObject newValue) { - atomicBoolean.set(convertRubyBooleanToJavaBoolean(newValue)); - return context.nil; - } - - @JRubyMethod(name = "make_true") - public IRubyObject makeTrue() { - return getRuntime().newBoolean(atomicBoolean.compareAndSet(false, true)); - } - - @JRubyMethod(name = "make_false") - public IRubyObject makeFalse() { - return getRuntime().newBoolean(atomicBoolean.compareAndSet(true, false)); - } - - private boolean convertRubyBooleanToJavaBoolean(IRubyObject newValue) { - if (newValue instanceof RubyBoolean.False || newValue instanceof RubyNil) { - return false; - } else { - return true; - } - } - } -} diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/ext/concurrent-ruby/com/concurrent_ruby/ext/JavaAtomicFixnumLibrary.java b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/ext/concurrent-ruby/com/concurrent_ruby/ext/JavaAtomicFixnumLibrary.java deleted file mode 100644 index 672bfc04..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/ext/concurrent-ruby/com/concurrent_ruby/ext/JavaAtomicFixnumLibrary.java +++ /dev/null @@ -1,113 +0,0 @@ -package com.concurrent_ruby.ext; - -import java.io.IOException; -import java.util.concurrent.atomic.AtomicLong; -import org.jruby.Ruby; -import org.jruby.RubyClass; -import org.jruby.RubyFixnum; -import org.jruby.RubyModule; -import org.jruby.RubyObject; -import org.jruby.anno.JRubyClass; -import org.jruby.anno.JRubyMethod; -import org.jruby.runtime.ObjectAllocator; -import org.jruby.runtime.ThreadContext; -import org.jruby.runtime.builtin.IRubyObject; -import org.jruby.runtime.load.Library; -import org.jruby.runtime.Block; - -public class JavaAtomicFixnumLibrary implements Library { - - public void load(Ruby runtime, boolean wrap) throws IOException { - RubyModule concurrentMod = runtime.defineModule("Concurrent"); - RubyClass atomicCls = concurrentMod.defineClassUnder("JavaAtomicFixnum", runtime.getObject(), JRUBYREFERENCE_ALLOCATOR); - - atomicCls.defineAnnotatedMethods(JavaAtomicFixnum.class); - } - - private static final ObjectAllocator JRUBYREFERENCE_ALLOCATOR = new ObjectAllocator() { - public IRubyObject allocate(Ruby runtime, RubyClass klazz) { - return new JavaAtomicFixnum(runtime, klazz); - } - }; - - @JRubyClass(name = "JavaAtomicFixnum", parent = "Object") - public static class JavaAtomicFixnum extends RubyObject { - - private AtomicLong atomicLong; - - public JavaAtomicFixnum(Ruby runtime, RubyClass metaClass) { - super(runtime, metaClass); - } - - @JRubyMethod - public IRubyObject initialize(ThreadContext context) { - this.atomicLong = new AtomicLong(0); - return context.nil; - } - - @JRubyMethod - public IRubyObject initialize(ThreadContext context, IRubyObject value) { - this.atomicLong = new AtomicLong(rubyFixnumToLong(value)); - return context.nil; - } - - @JRubyMethod(name = "value") - public IRubyObject getValue() { - return getRuntime().newFixnum(atomicLong.get()); - } - - @JRubyMethod(name = "value=") - public IRubyObject setValue(ThreadContext context, IRubyObject newValue) { - atomicLong.set(rubyFixnumToLong(newValue)); - return context.nil; - } - - @JRubyMethod(name = {"increment", "up"}) - public IRubyObject increment() { - return getRuntime().newFixnum(atomicLong.incrementAndGet()); - } - - @JRubyMethod(name = {"increment", "up"}) - public IRubyObject increment(IRubyObject value) { - long delta = rubyFixnumToLong(value); - return getRuntime().newFixnum(atomicLong.addAndGet(delta)); - } - - @JRubyMethod(name = {"decrement", "down"}) - public IRubyObject decrement() { - return getRuntime().newFixnum(atomicLong.decrementAndGet()); - } - - @JRubyMethod(name = {"decrement", "down"}) - public IRubyObject decrement(IRubyObject value) { - long delta = rubyFixnumToLong(value); - return getRuntime().newFixnum(atomicLong.addAndGet(-delta)); - } - - @JRubyMethod(name = "compare_and_set") - public IRubyObject compareAndSet(ThreadContext context, IRubyObject expect, IRubyObject update) { - return getRuntime().newBoolean(atomicLong.compareAndSet(rubyFixnumToLong(expect), rubyFixnumToLong(update))); - } - - @JRubyMethod - public IRubyObject update(ThreadContext context, Block block) { - for (;;) { - long _oldValue = atomicLong.get(); - IRubyObject oldValue = getRuntime().newFixnum(_oldValue); - IRubyObject newValue = block.yield(context, oldValue); - if (atomicLong.compareAndSet(_oldValue, rubyFixnumToLong(newValue))) { - return newValue; - } - } - } - - private long rubyFixnumToLong(IRubyObject value) { - if (value instanceof RubyFixnum) { - RubyFixnum fixNum = (RubyFixnum) value; - return fixNum.getLongValue(); - } else { - throw getRuntime().newArgumentError("value must be a Fixnum"); - } - } - } -} diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/ext/concurrent-ruby/com/concurrent_ruby/ext/JavaSemaphoreLibrary.java b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/ext/concurrent-ruby/com/concurrent_ruby/ext/JavaSemaphoreLibrary.java deleted file mode 100644 index d887f250..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/ext/concurrent-ruby/com/concurrent_ruby/ext/JavaSemaphoreLibrary.java +++ /dev/null @@ -1,189 +0,0 @@ -package com.concurrent_ruby.ext; - -import java.io.IOException; -import java.util.concurrent.Semaphore; -import org.jruby.Ruby; -import org.jruby.RubyClass; -import org.jruby.RubyFixnum; -import org.jruby.RubyModule; -import org.jruby.RubyNumeric; -import org.jruby.RubyObject; -import org.jruby.anno.JRubyClass; -import org.jruby.anno.JRubyMethod; -import org.jruby.runtime.Block; -import org.jruby.runtime.ObjectAllocator; -import org.jruby.runtime.ThreadContext; -import org.jruby.runtime.builtin.IRubyObject; - -public class JavaSemaphoreLibrary { - - public void load(Ruby runtime, boolean wrap) throws IOException { - RubyModule concurrentMod = runtime.defineModule("Concurrent"); - RubyClass atomicCls = concurrentMod.defineClassUnder("JavaSemaphore", runtime.getObject(), JRUBYREFERENCE_ALLOCATOR); - - atomicCls.defineAnnotatedMethods(JavaSemaphore.class); - } - - private static final ObjectAllocator JRUBYREFERENCE_ALLOCATOR = new ObjectAllocator() { - public IRubyObject allocate(Ruby runtime, RubyClass klazz) { - return new JavaSemaphore(runtime, klazz); - } - }; - - @JRubyClass(name = "JavaSemaphore", parent = "Object") - public static class JavaSemaphore extends RubyObject { - - private JRubySemaphore semaphore; - - public JavaSemaphore(Ruby runtime, RubyClass metaClass) { - super(runtime, metaClass); - } - - @JRubyMethod - public IRubyObject initialize(ThreadContext context, IRubyObject value) { - this.semaphore = new JRubySemaphore(rubyFixnumInt(value, "count")); - return context.nil; - } - - @JRubyMethod - public IRubyObject acquire(ThreadContext context, final Block block) throws InterruptedException { - return this.acquire(context, 1, block); - } - - @JRubyMethod - public IRubyObject acquire(ThreadContext context, IRubyObject permits, final Block block) throws InterruptedException { - return this.acquire(context, rubyFixnumToPositiveInt(permits, "permits"), block); - } - - @JRubyMethod(name = "available_permits") - public IRubyObject availablePermits(ThreadContext context) { - return getRuntime().newFixnum(this.semaphore.availablePermits()); - } - - @JRubyMethod(name = "drain_permits") - public IRubyObject drainPermits(ThreadContext context) { - return getRuntime().newFixnum(this.semaphore.drainPermits()); - } - - @JRubyMethod(name = "try_acquire") - public IRubyObject tryAcquire(ThreadContext context, final Block block) throws InterruptedException { - int permitsInt = 1; - boolean acquired = semaphore.tryAcquire(permitsInt); - - return triedAcquire(context, permitsInt, acquired, block); - } - - @JRubyMethod(name = "try_acquire") - public IRubyObject tryAcquire(ThreadContext context, IRubyObject permits, final Block block) throws InterruptedException { - int permitsInt = rubyFixnumToPositiveInt(permits, "permits"); - boolean acquired = semaphore.tryAcquire(permitsInt); - - return triedAcquire(context, permitsInt, acquired, block); - } - - @JRubyMethod(name = "try_acquire") - public IRubyObject tryAcquire(ThreadContext context, IRubyObject permits, IRubyObject timeout, final Block block) throws InterruptedException { - int permitsInt = rubyFixnumToPositiveInt(permits, "permits"); - boolean acquired = semaphore.tryAcquire( - permitsInt, - rubyNumericToLong(timeout, "timeout"), - java.util.concurrent.TimeUnit.SECONDS - ); - - return triedAcquire(context, permitsInt, acquired, block); - } - - @JRubyMethod - public IRubyObject release(ThreadContext context) { - this.semaphore.release(1); - return getRuntime().newBoolean(true); - } - - @JRubyMethod - public IRubyObject release(ThreadContext context, IRubyObject permits) { - this.semaphore.release(rubyFixnumToPositiveInt(permits, "permits")); - return getRuntime().newBoolean(true); - } - - @JRubyMethod(name = "reduce_permits") - public IRubyObject reducePermits(ThreadContext context, IRubyObject reduction) throws InterruptedException { - this.semaphore.publicReducePermits(rubyFixnumToNonNegativeInt(reduction, "reduction")); - return context.nil; - } - - private IRubyObject acquire(ThreadContext context, int permits, final Block block) throws InterruptedException { - this.semaphore.acquire(permits); - - if (!block.isGiven()) return context.nil; - - try { - return block.yieldSpecific(context); - } finally { - this.semaphore.release(permits); - } - } - - private IRubyObject triedAcquire(ThreadContext context, int permits, boolean acquired, final Block block) { - if (!block.isGiven()) return getRuntime().newBoolean(acquired); - if (!acquired) return context.nil; - - try { - return block.yieldSpecific(context); - } finally { - this.semaphore.release(permits); - } - } - - private int rubyFixnumInt(IRubyObject value, String paramName) { - if (value instanceof RubyFixnum) { - RubyFixnum fixNum = (RubyFixnum) value; - return (int) fixNum.getLongValue(); - } else { - throw getRuntime().newArgumentError(paramName + " must be integer"); - } - } - - private int rubyFixnumToNonNegativeInt(IRubyObject value, String paramName) { - if (value instanceof RubyFixnum && ((RubyFixnum) value).getLongValue() >= 0) { - RubyFixnum fixNum = (RubyFixnum) value; - return (int) fixNum.getLongValue(); - } else { - throw getRuntime().newArgumentError(paramName + " must be a non-negative integer"); - } - } - - private int rubyFixnumToPositiveInt(IRubyObject value, String paramName) { - if (value instanceof RubyFixnum && ((RubyFixnum) value).getLongValue() > 0) { - RubyFixnum fixNum = (RubyFixnum) value; - return (int) fixNum.getLongValue(); - } else { - throw getRuntime().newArgumentError(paramName + " must be an integer greater than zero"); - } - } - - private long rubyNumericToLong(IRubyObject value, String paramName) { - if (value instanceof RubyNumeric && ((RubyNumeric) value).getDoubleValue() > 0) { - RubyNumeric fixNum = (RubyNumeric) value; - return fixNum.getLongValue(); - } else { - throw getRuntime().newArgumentError(paramName + " must be a float greater than zero"); - } - } - - class JRubySemaphore extends Semaphore { - - public JRubySemaphore(int permits) { - super(permits); - } - - public JRubySemaphore(int permits, boolean value) { - super(permits, value); - } - - public void publicReducePermits(int i) { - reducePermits(i); - } - - } - } -} diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/ext/concurrent-ruby/com/concurrent_ruby/ext/SynchronizationLibrary.java b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/ext/concurrent-ruby/com/concurrent_ruby/ext/SynchronizationLibrary.java deleted file mode 100644 index f0c75ee4..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/ext/concurrent-ruby/com/concurrent_ruby/ext/SynchronizationLibrary.java +++ /dev/null @@ -1,292 +0,0 @@ -package com.concurrent_ruby.ext; - -import org.jruby.Ruby; -import org.jruby.RubyBasicObject; -import org.jruby.RubyClass; -import org.jruby.RubyModule; -import org.jruby.RubyObject; -import org.jruby.RubyThread; -import org.jruby.anno.JRubyClass; -import org.jruby.anno.JRubyMethod; -import org.jruby.runtime.Block; -import org.jruby.runtime.ObjectAllocator; -import org.jruby.runtime.ThreadContext; -import org.jruby.runtime.Visibility; -import org.jruby.runtime.builtin.IRubyObject; -import org.jruby.runtime.load.Library; -import sun.misc.Unsafe; - -import java.io.IOException; -import java.lang.reflect.Field; -import java.lang.reflect.Method; - -public class SynchronizationLibrary implements Library { - - private static final Unsafe UNSAFE = loadUnsafe(); - private static final boolean FULL_FENCE = supportsFences(); - - private static Unsafe loadUnsafe() { - try { - Class ncdfe = Class.forName("sun.misc.Unsafe"); - Field f = ncdfe.getDeclaredField("theUnsafe"); - f.setAccessible(true); - return (Unsafe) f.get((java.lang.Object) null); - } catch (Exception var2) { - return null; - } catch (NoClassDefFoundError var3) { - return null; - } - } - - private static boolean supportsFences() { - if (UNSAFE == null) { - return false; - } else { - try { - Method m = UNSAFE.getClass().getDeclaredMethod("fullFence", new Class[0]); - if (m != null) { - return true; - } - } catch (Exception var1) { - // nothing - } - - return false; - } - } - - private static final ObjectAllocator OBJECT_ALLOCATOR = new ObjectAllocator() { - public IRubyObject allocate(Ruby runtime, RubyClass klazz) { - return new Object(runtime, klazz); - } - }; - - private static final ObjectAllocator ABSTRACT_LOCKABLE_OBJECT_ALLOCATOR = new ObjectAllocator() { - public IRubyObject allocate(Ruby runtime, RubyClass klazz) { - return new AbstractLockableObject(runtime, klazz); - } - }; - - private static final ObjectAllocator JRUBY_LOCKABLE_OBJECT_ALLOCATOR = new ObjectAllocator() { - public IRubyObject allocate(Ruby runtime, RubyClass klazz) { - return new JRubyLockableObject(runtime, klazz); - } - }; - - public void load(Ruby runtime, boolean wrap) throws IOException { - RubyModule synchronizationModule = runtime. - defineModule("Concurrent"). - defineModuleUnder("Synchronization"); - - RubyModule jrubyAttrVolatileModule = synchronizationModule.defineModuleUnder("JRubyAttrVolatile"); - jrubyAttrVolatileModule.defineAnnotatedMethods(JRubyAttrVolatile.class); - - defineClass(runtime, synchronizationModule, "AbstractObject", "Object", - Object.class, OBJECT_ALLOCATOR); - - defineClass(runtime, synchronizationModule, "Object", "AbstractLockableObject", - AbstractLockableObject.class, ABSTRACT_LOCKABLE_OBJECT_ALLOCATOR); - - defineClass(runtime, synchronizationModule, "AbstractLockableObject", "JRubyLockableObject", - JRubyLockableObject.class, JRUBY_LOCKABLE_OBJECT_ALLOCATOR); - - defineClass(runtime, synchronizationModule, "Object", "JRuby", - JRuby.class, new ObjectAllocator() { - @Override - public IRubyObject allocate(Ruby runtime, RubyClass klazz) { - return new JRuby(runtime, klazz); - } - }); - } - - private RubyClass defineClass( - Ruby runtime, - RubyModule namespace, - String parentName, - String name, - Class javaImplementation, - ObjectAllocator allocator) { - final RubyClass parentClass = namespace.getClass(parentName); - - if (parentClass == null) { - System.out.println("not found " + parentName); - throw runtime.newRuntimeError(namespace.toString() + "::" + parentName + " is missing"); - } - - final RubyClass newClass = namespace.defineClassUnder(name, parentClass, allocator); - newClass.defineAnnotatedMethods(javaImplementation); - return newClass; - } - - // Facts: - // - all ivar reads are without any synchronisation of fences see - // https://github.com/jruby/jruby/blob/master/core/src/main/java/org/jruby/runtime/ivars/VariableAccessor.java#L110-110 - // - writes depend on UnsafeHolder.U, null -> SynchronizedVariableAccessor, !null -> StampedVariableAccessor - // SynchronizedVariableAccessor wraps with synchronized block, StampedVariableAccessor uses fullFence or - // volatilePut - // TODO (pitr 16-Sep-2015): what do we do in Java 9 ? - - // module JRubyAttrVolatile - public static class JRubyAttrVolatile { - - // volatile threadContext is used as a memory barrier per the JVM memory model happens-before semantic - // on volatile fields. any volatile field could have been used but using the thread context is an - // attempt to avoid code elimination. - private static volatile int volatileField; - - @JRubyMethod(name = "full_memory_barrier", visibility = Visibility.PUBLIC, module = true) - public static IRubyObject fullMemoryBarrier(ThreadContext context, IRubyObject module) { - // Prevent reordering of ivar writes with publication of this instance - if (!FULL_FENCE) { - // Assuming that following volatile read and write is not eliminated it simulates fullFence. - // If it's eliminated it'll cause problems only on non-x86 platforms. - // http://shipilev.net/blog/2014/jmm-pragmatics/#_happens_before_test_your_understanding - final int volatileRead = volatileField; - volatileField = context.getLine(); - } else { - UNSAFE.fullFence(); - } - return context.nil; - } - - @JRubyMethod(name = "instance_variable_get_volatile", visibility = Visibility.PUBLIC, module = true) - public static IRubyObject instanceVariableGetVolatile( - ThreadContext context, - IRubyObject module, - IRubyObject self, - IRubyObject name) { - // Ensure we ses latest value with loadFence - if (!FULL_FENCE) { - // piggybacking on volatile read, simulating loadFence - final int volatileRead = volatileField; - return ((RubyBasicObject) self).instance_variable_get(context, name); - } else { - UNSAFE.loadFence(); - return ((RubyBasicObject) self).instance_variable_get(context, name); - } - } - - @JRubyMethod(name = "instance_variable_set_volatile", visibility = Visibility.PUBLIC, module = true) - public static IRubyObject InstanceVariableSetVolatile( - ThreadContext context, - IRubyObject module, - IRubyObject self, - IRubyObject name, - IRubyObject value) { - // Ensure we make last update visible - if (!FULL_FENCE) { - // piggybacking on volatile write, simulating storeFence - final IRubyObject result = ((RubyBasicObject) self).instance_variable_set(name, value); - volatileField = context.getLine(); - return result; - } else { - // JRuby uses StampedVariableAccessor which calls fullFence - // so no additional steps needed. - // See https://github.com/jruby/jruby/blob/master/core/src/main/java/org/jruby/runtime/ivars/StampedVariableAccessor.java#L151-L159 - return ((RubyBasicObject) self).instance_variable_set(name, value); - } - } - } - - @JRubyClass(name = "Object", parent = "AbstractObject") - public static class Object extends RubyObject { - - public Object(Ruby runtime, RubyClass metaClass) { - super(runtime, metaClass); - } - } - - @JRubyClass(name = "AbstractLockableObject", parent = "Object") - public static class AbstractLockableObject extends Object { - - public AbstractLockableObject(Ruby runtime, RubyClass metaClass) { - super(runtime, metaClass); - } - } - - @JRubyClass(name = "JRubyLockableObject", parent = "AbstractLockableObject") - public static class JRubyLockableObject extends AbstractLockableObject { - - public JRubyLockableObject(Ruby runtime, RubyClass metaClass) { - super(runtime, metaClass); - } - - @JRubyMethod(name = "synchronize", visibility = Visibility.PROTECTED) - public IRubyObject rubySynchronize(ThreadContext context, Block block) { - synchronized (this) { - return block.yield(context, null); - } - } - - @JRubyMethod(name = "ns_wait", optional = 1, visibility = Visibility.PROTECTED) - public IRubyObject nsWait(ThreadContext context, IRubyObject[] args) { - Ruby runtime = context.runtime; - if (args.length > 1) { - throw runtime.newArgumentError(args.length, 1); - } - Double timeout = null; - if (args.length > 0 && !args[0].isNil()) { - timeout = args[0].convertToFloat().getDoubleValue(); - if (timeout < 0) { - throw runtime.newArgumentError("time interval must be positive"); - } - } - if (Thread.interrupted()) { - throw runtime.newConcurrencyError("thread interrupted"); - } - boolean success = false; - try { - success = context.getThread().wait_timeout(this, timeout); - } catch (InterruptedException ie) { - throw runtime.newConcurrencyError(ie.getLocalizedMessage()); - } finally { - // An interrupt or timeout may have caused us to miss - // a notify that we consumed, so do another notify in - // case someone else is available to pick it up. - if (!success) { - this.notify(); - } - } - return this; - } - - @JRubyMethod(name = "ns_signal", visibility = Visibility.PROTECTED) - public IRubyObject nsSignal(ThreadContext context) { - notify(); - return this; - } - - @JRubyMethod(name = "ns_broadcast", visibility = Visibility.PROTECTED) - public IRubyObject nsBroadcast(ThreadContext context) { - notifyAll(); - return this; - } - } - - @JRubyClass(name = "JRuby") - public static class JRuby extends RubyObject { - public JRuby(Ruby runtime, RubyClass metaClass) { - super(runtime, metaClass); - } - - @JRubyMethod(name = "sleep_interruptibly", visibility = Visibility.PUBLIC, module = true) - public static IRubyObject sleepInterruptibly(final ThreadContext context, IRubyObject receiver, final Block block) { - try { - context.getThread().executeBlockingTask(new RubyThread.BlockingTask() { - @Override - public void run() throws InterruptedException { - block.call(context); - } - - @Override - public void wakeup() { - context.getThread().getNativeThread().interrupt(); - } - }); - } catch (InterruptedException e) { - throw context.runtime.newThreadError("interrupted in Concurrent::Synchronization::JRuby.sleep_interruptibly"); - } - return context.nil; - } - } -} diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166e/ConcurrentHashMap.java b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166e/ConcurrentHashMap.java deleted file mode 100644 index e11e15aa..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166e/ConcurrentHashMap.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.concurrent_ruby.ext.jsr166e; - -import java.util.Map; -import java.util.Set; - -public interface ConcurrentHashMap { - /** Interface describing a function of one argument */ - public interface Fun { T apply(A a); } - /** Interface describing a function of two arguments */ - public interface BiFun { T apply(A a, B b); } - - public V get(K key); - public V put(K key, V value); - public V putIfAbsent(K key, V value); - public V computeIfAbsent(K key, Fun mf); - public V computeIfPresent(K key, BiFun mf); - public V compute(K key, BiFun mf); - public V merge(K key, V value, BiFun mf); - public boolean replace(K key, V oldVal, V newVal); - public V replace(K key, V value); - public boolean containsKey(K key); - public boolean remove(Object key, Object value); - public V remove(K key); - public void clear(); - public Set> entrySet(); - public int size(); - public V getValueOrDefault(Object key, V defaultValue); - - public boolean containsValue(V value); - public K findKey(V value); -} diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166e/ConcurrentHashMapV8.java b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166e/ConcurrentHashMapV8.java deleted file mode 100644 index 86aa4eb0..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166e/ConcurrentHashMapV8.java +++ /dev/null @@ -1,3863 +0,0 @@ -/* - * Written by Doug Lea with assistance from members of JCP JSR-166 - * Expert Group and released to the public domain, as explained at - * http://creativecommons.org/publicdomain/zero/1.0/ - */ - -// This is based on the 1.79 version. - -package com.concurrent_ruby.ext.jsr166e; - -import org.jruby.RubyClass; -import org.jruby.RubyNumeric; -import org.jruby.RubyObject; -import org.jruby.exceptions.RaiseException; -import com.concurrent_ruby.ext.jsr166y.ThreadLocalRandom; -import org.jruby.runtime.ThreadContext; -import org.jruby.runtime.builtin.IRubyObject; - -import java.util.Arrays; -import java.util.Map; -import java.util.Set; -import java.util.Collection; -import java.util.Hashtable; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Enumeration; -import java.util.ConcurrentModificationException; -import java.util.NoSuchElementException; -import java.util.concurrent.ConcurrentMap; -import java.util.concurrent.locks.AbstractQueuedSynchronizer; - -import java.io.Serializable; - -/** - * A hash table supporting full concurrency of retrievals and - * high expected concurrency for updates. This class obeys the - * same functional specification as {@link java.util.Hashtable}, and - * includes versions of methods corresponding to each method of - * {@code Hashtable}. However, even though all operations are - * thread-safe, retrieval operations do not entail locking, - * and there is not any support for locking the entire table - * in a way that prevents all access. This class is fully - * interoperable with {@code Hashtable} in programs that rely on its - * thread safety but not on its synchronization details. - * - *

    Retrieval operations (including {@code get}) generally do not - * block, so may overlap with update operations (including {@code put} - * and {@code remove}). Retrievals reflect the results of the most - * recently completed update operations holding upon their - * onset. (More formally, an update operation for a given key bears a - * happens-before relation with any (non-null) retrieval for - * that key reporting the updated value.) For aggregate operations - * such as {@code putAll} and {@code clear}, concurrent retrievals may - * reflect insertion or removal of only some entries. Similarly, - * Iterators and Enumerations return elements reflecting the state of - * the hash table at some point at or since the creation of the - * iterator/enumeration. They do not throw {@link - * ConcurrentModificationException}. However, iterators are designed - * to be used by only one thread at a time. Bear in mind that the - * results of aggregate status methods including {@code size}, {@code - * isEmpty}, and {@code containsValue} are typically useful only when - * a map is not undergoing concurrent updates in other threads. - * Otherwise the results of these methods reflect transient states - * that may be adequate for monitoring or estimation purposes, but not - * for program control. - * - *

    The table is dynamically expanded when there are too many - * collisions (i.e., keys that have distinct hash codes but fall into - * the same slot modulo the table size), with the expected average - * effect of maintaining roughly two bins per mapping (corresponding - * to a 0.75 load factor threshold for resizing). There may be much - * variance around this average as mappings are added and removed, but - * overall, this maintains a commonly accepted time/space tradeoff for - * hash tables. However, resizing this or any other kind of hash - * table may be a relatively slow operation. When possible, it is a - * good idea to provide a size estimate as an optional {@code - * initialCapacity} constructor argument. An additional optional - * {@code loadFactor} constructor argument provides a further means of - * customizing initial table capacity by specifying the table density - * to be used in calculating the amount of space to allocate for the - * given number of elements. Also, for compatibility with previous - * versions of this class, constructors may optionally specify an - * expected {@code concurrencyLevel} as an additional hint for - * internal sizing. Note that using many keys with exactly the same - * {@code hashCode()} is a sure way to slow down performance of any - * hash table. - * - *

    A {@link Set} projection of a ConcurrentHashMapV8 may be created - * (using {@link #newKeySet()} or {@link #newKeySet(int)}), or viewed - * (using {@link #keySet(Object)} when only keys are of interest, and the - * mapped values are (perhaps transiently) not used or all take the - * same mapping value. - * - *

    A ConcurrentHashMapV8 can be used as scalable frequency map (a - * form of histogram or multiset) by using {@link LongAdder} values - * and initializing via {@link #computeIfAbsent}. For example, to add - * a count to a {@code ConcurrentHashMapV8 freqs}, you - * can use {@code freqs.computeIfAbsent(k -> new - * LongAdder()).increment();} - * - *

    This class and its views and iterators implement all of the - * optional methods of the {@link Map} and {@link Iterator} - * interfaces. - * - *

    Like {@link Hashtable} but unlike {@link HashMap}, this class - * does not allow {@code null} to be used as a key or value. - * - *

    ConcurrentHashMapV8s support parallel operations using the {@link - * ForkJoinPool#commonPool}. (Tasks that may be used in other contexts - * are available in class {@link ForkJoinTasks}). These operations are - * designed to be safely, and often sensibly, applied even with maps - * that are being concurrently updated by other threads; for example, - * when computing a snapshot summary of the values in a shared - * registry. There are three kinds of operation, each with four - * forms, accepting functions with Keys, Values, Entries, and (Key, - * Value) arguments and/or return values. (The first three forms are - * also available via the {@link #keySet()}, {@link #values()} and - * {@link #entrySet()} views). Because the elements of a - * ConcurrentHashMapV8 are not ordered in any particular way, and may be - * processed in different orders in different parallel executions, the - * correctness of supplied functions should not depend on any - * ordering, or on any other objects or values that may transiently - * change while computation is in progress; and except for forEach - * actions, should ideally be side-effect-free. - * - *

      - *
    • forEach: Perform a given action on each element. - * A variant form applies a given transformation on each element - * before performing the action.
    • - * - *
    • search: Return the first available non-null result of - * applying a given function on each element; skipping further - * search when a result is found.
    • - * - *
    • reduce: Accumulate each element. The supplied reduction - * function cannot rely on ordering (more formally, it should be - * both associative and commutative). There are five variants: - * - *
        - * - *
      • Plain reductions. (There is not a form of this method for - * (key, value) function arguments since there is no corresponding - * return type.)
      • - * - *
      • Mapped reductions that accumulate the results of a given - * function applied to each element.
      • - * - *
      • Reductions to scalar doubles, longs, and ints, using a - * given basis value.
      • - * - * - *
      - *
    - * - *

    The concurrency properties of bulk operations follow - * from those of ConcurrentHashMapV8: Any non-null result returned - * from {@code get(key)} and related access methods bears a - * happens-before relation with the associated insertion or - * update. The result of any bulk operation reflects the - * composition of these per-element relations (but is not - * necessarily atomic with respect to the map as a whole unless it - * is somehow known to be quiescent). Conversely, because keys - * and values in the map are never null, null serves as a reliable - * atomic indicator of the current lack of any result. To - * maintain this property, null serves as an implicit basis for - * all non-scalar reduction operations. For the double, long, and - * int versions, the basis should be one that, when combined with - * any other value, returns that other value (more formally, it - * should be the identity element for the reduction). Most common - * reductions have these properties; for example, computing a sum - * with basis 0 or a minimum with basis MAX_VALUE. - * - *

    Search and transformation functions provided as arguments - * should similarly return null to indicate the lack of any result - * (in which case it is not used). In the case of mapped - * reductions, this also enables transformations to serve as - * filters, returning null (or, in the case of primitive - * specializations, the identity basis) if the element should not - * be combined. You can create compound transformations and - * filterings by composing them yourself under this "null means - * there is nothing there now" rule before using them in search or - * reduce operations. - * - *

    Methods accepting and/or returning Entry arguments maintain - * key-value associations. They may be useful for example when - * finding the key for the greatest value. Note that "plain" Entry - * arguments can be supplied using {@code new - * AbstractMap.SimpleEntry(k,v)}. - * - *

    Bulk operations may complete abruptly, throwing an - * exception encountered in the application of a supplied - * function. Bear in mind when handling such exceptions that other - * concurrently executing functions could also have thrown - * exceptions, or would have done so if the first exception had - * not occurred. - * - *

    Parallel speedups for bulk operations compared to sequential - * processing are common but not guaranteed. Operations involving - * brief functions on small maps may execute more slowly than - * sequential loops if the underlying work to parallelize the - * computation is more expensive than the computation itself. - * Similarly, parallelization may not lead to much actual parallelism - * if all processors are busy performing unrelated tasks. - * - *

    All arguments to all task methods must be non-null. - * - *

    jsr166e note: During transition, this class - * uses nested functional interfaces with different names but the - * same forms as those expected for JDK8. - * - *

    This class is a member of the - * - * Java Collections Framework. - * - * @since 1.5 - * @author Doug Lea - * @param the type of keys maintained by this map - * @param the type of mapped values - */ -public class ConcurrentHashMapV8 - implements ConcurrentMap, Serializable, ConcurrentHashMap { - private static final long serialVersionUID = 7249069246763182397L; - - /** - * A partitionable iterator. A Spliterator can be traversed - * directly, but can also be partitioned (before traversal) by - * creating another Spliterator that covers a non-overlapping - * portion of the elements, and so may be amenable to parallel - * execution. - * - *

    This interface exports a subset of expected JDK8 - * functionality. - * - *

    Sample usage: Here is one (of the several) ways to compute - * the sum of the values held in a map using the ForkJoin - * framework. As illustrated here, Spliterators are well suited to - * designs in which a task repeatedly splits off half its work - * into forked subtasks until small enough to process directly, - * and then joins these subtasks. Variants of this style can also - * be used in completion-based designs. - * - *

    -     * {@code ConcurrentHashMapV8 m = ...
    -     * // split as if have 8 * parallelism, for load balance
    -     * int n = m.size();
    -     * int p = aForkJoinPool.getParallelism() * 8;
    -     * int split = (n < p)? n : p;
    -     * long sum = aForkJoinPool.invoke(new SumValues(m.valueSpliterator(), split, null));
    -     * // ...
    -     * static class SumValues extends RecursiveTask {
    -     *   final Spliterator s;
    -     *   final int split;             // split while > 1
    -     *   final SumValues nextJoin;    // records forked subtasks to join
    -     *   SumValues(Spliterator s, int depth, SumValues nextJoin) {
    -     *     this.s = s; this.depth = depth; this.nextJoin = nextJoin;
    -     *   }
    -     *   public Long compute() {
    -     *     long sum = 0;
    -     *     SumValues subtasks = null; // fork subtasks
    -     *     for (int s = split >>> 1; s > 0; s >>>= 1)
    -     *       (subtasks = new SumValues(s.split(), s, subtasks)).fork();
    -     *     while (s.hasNext())        // directly process remaining elements
    -     *       sum += s.next();
    -     *     for (SumValues t = subtasks; t != null; t = t.nextJoin)
    -     *       sum += t.join();         // collect subtask results
    -     *     return sum;
    -     *   }
    -     * }
    -     * }
    - */ - public static interface Spliterator extends Iterator { - /** - * Returns a Spliterator covering approximately half of the - * elements, guaranteed not to overlap with those subsequently - * returned by this Spliterator. After invoking this method, - * the current Spliterator will not produce any of - * the elements of the returned Spliterator, but the two - * Spliterators together will produce all of the elements that - * would have been produced by this Spliterator had this - * method not been called. The exact number of elements - * produced by the returned Spliterator is not guaranteed, and - * may be zero (i.e., with {@code hasNext()} reporting {@code - * false}) if this Spliterator cannot be further split. - * - * @return a Spliterator covering approximately half of the - * elements - * @throws IllegalStateException if this Spliterator has - * already commenced traversing elements - */ - Spliterator split(); - } - - - /* - * Overview: - * - * The primary design goal of this hash table is to maintain - * concurrent readability (typically method get(), but also - * iterators and related methods) while minimizing update - * contention. Secondary goals are to keep space consumption about - * the same or better than java.util.HashMap, and to support high - * initial insertion rates on an empty table by many threads. - * - * Each key-value mapping is held in a Node. Because Node fields - * can contain special values, they are defined using plain Object - * types. Similarly in turn, all internal methods that use them - * work off Object types. And similarly, so do the internal - * methods of auxiliary iterator and view classes. All public - * generic typed methods relay in/out of these internal methods, - * supplying null-checks and casts as needed. This also allows - * many of the public methods to be factored into a smaller number - * of internal methods (although sadly not so for the five - * variants of put-related operations). The validation-based - * approach explained below leads to a lot of code sprawl because - * retry-control precludes factoring into smaller methods. - * - * The table is lazily initialized to a power-of-two size upon the - * first insertion. Each bin in the table normally contains a - * list of Nodes (most often, the list has only zero or one Node). - * Table accesses require volatile/atomic reads, writes, and - * CASes. Because there is no other way to arrange this without - * adding further indirections, we use intrinsics - * (sun.misc.Unsafe) operations. The lists of nodes within bins - * are always accurately traversable under volatile reads, so long - * as lookups check hash code and non-nullness of value before - * checking key equality. - * - * We use the top two bits of Node hash fields for control - * purposes -- they are available anyway because of addressing - * constraints. As explained further below, these top bits are - * used as follows: - * 00 - Normal - * 01 - Locked - * 11 - Locked and may have a thread waiting for lock - * 10 - Node is a forwarding node - * - * The lower 30 bits of each Node's hash field contain a - * transformation of the key's hash code, except for forwarding - * nodes, for which the lower bits are zero (and so always have - * hash field == MOVED). - * - * Insertion (via put or its variants) of the first node in an - * empty bin is performed by just CASing it to the bin. This is - * by far the most common case for put operations under most - * key/hash distributions. Other update operations (insert, - * delete, and replace) require locks. We do not want to waste - * the space required to associate a distinct lock object with - * each bin, so instead use the first node of a bin list itself as - * a lock. Blocking support for these locks relies on the builtin - * "synchronized" monitors. However, we also need a tryLock - * construction, so we overlay these by using bits of the Node - * hash field for lock control (see above), and so normally use - * builtin monitors only for blocking and signalling using - * wait/notifyAll constructions. See Node.tryAwaitLock. - * - * Using the first node of a list as a lock does not by itself - * suffice though: When a node is locked, any update must first - * validate that it is still the first node after locking it, and - * retry if not. Because new nodes are always appended to lists, - * once a node is first in a bin, it remains first until deleted - * or the bin becomes invalidated (upon resizing). However, - * operations that only conditionally update may inspect nodes - * until the point of update. This is a converse of sorts to the - * lazy locking technique described by Herlihy & Shavit. - * - * The main disadvantage of per-bin locks is that other update - * operations on other nodes in a bin list protected by the same - * lock can stall, for example when user equals() or mapping - * functions take a long time. However, statistically, under - * random hash codes, this is not a common problem. Ideally, the - * frequency of nodes in bins follows a Poisson distribution - * (http://en.wikipedia.org/wiki/Poisson_distribution) with a - * parameter of about 0.5 on average, given the resizing threshold - * of 0.75, although with a large variance because of resizing - * granularity. Ignoring variance, the expected occurrences of - * list size k are (exp(-0.5) * pow(0.5, k) / factorial(k)). The - * first values are: - * - * 0: 0.60653066 - * 1: 0.30326533 - * 2: 0.07581633 - * 3: 0.01263606 - * 4: 0.00157952 - * 5: 0.00015795 - * 6: 0.00001316 - * 7: 0.00000094 - * 8: 0.00000006 - * more: less than 1 in ten million - * - * Lock contention probability for two threads accessing distinct - * elements is roughly 1 / (8 * #elements) under random hashes. - * - * Actual hash code distributions encountered in practice - * sometimes deviate significantly from uniform randomness. This - * includes the case when N > (1<<30), so some keys MUST collide. - * Similarly for dumb or hostile usages in which multiple keys are - * designed to have identical hash codes. Also, although we guard - * against the worst effects of this (see method spread), sets of - * hashes may differ only in bits that do not impact their bin - * index for a given power-of-two mask. So we use a secondary - * strategy that applies when the number of nodes in a bin exceeds - * a threshold, and at least one of the keys implements - * Comparable. These TreeBins use a balanced tree to hold nodes - * (a specialized form of red-black trees), bounding search time - * to O(log N). Each search step in a TreeBin is around twice as - * slow as in a regular list, but given that N cannot exceed - * (1<<64) (before running out of addresses) this bounds search - * steps, lock hold times, etc, to reasonable constants (roughly - * 100 nodes inspected per operation worst case) so long as keys - * are Comparable (which is very common -- String, Long, etc). - * TreeBin nodes (TreeNodes) also maintain the same "next" - * traversal pointers as regular nodes, so can be traversed in - * iterators in the same way. - * - * The table is resized when occupancy exceeds a percentage - * threshold (nominally, 0.75, but see below). Only a single - * thread performs the resize (using field "sizeCtl", to arrange - * exclusion), but the table otherwise remains usable for reads - * and updates. Resizing proceeds by transferring bins, one by - * one, from the table to the next table. Because we are using - * power-of-two expansion, the elements from each bin must either - * stay at same index, or move with a power of two offset. We - * eliminate unnecessary node creation by catching cases where old - * nodes can be reused because their next fields won't change. On - * average, only about one-sixth of them need cloning when a table - * doubles. The nodes they replace will be garbage collectable as - * soon as they are no longer referenced by any reader thread that - * may be in the midst of concurrently traversing table. Upon - * transfer, the old table bin contains only a special forwarding - * node (with hash field "MOVED") that contains the next table as - * its key. On encountering a forwarding node, access and update - * operations restart, using the new table. - * - * Each bin transfer requires its bin lock. However, unlike other - * cases, a transfer can skip a bin if it fails to acquire its - * lock, and revisit it later (unless it is a TreeBin). Method - * rebuild maintains a buffer of TRANSFER_BUFFER_SIZE bins that - * have been skipped because of failure to acquire a lock, and - * blocks only if none are available (i.e., only very rarely). - * The transfer operation must also ensure that all accessible - * bins in both the old and new table are usable by any traversal. - * When there are no lock acquisition failures, this is arranged - * simply by proceeding from the last bin (table.length - 1) up - * towards the first. Upon seeing a forwarding node, traversals - * (see class Iter) arrange to move to the new table - * without revisiting nodes. However, when any node is skipped - * during a transfer, all earlier table bins may have become - * visible, so are initialized with a reverse-forwarding node back - * to the old table until the new ones are established. (This - * sometimes requires transiently locking a forwarding node, which - * is possible under the above encoding.) These more expensive - * mechanics trigger only when necessary. - * - * The traversal scheme also applies to partial traversals of - * ranges of bins (via an alternate Traverser constructor) - * to support partitioned aggregate operations. Also, read-only - * operations give up if ever forwarded to a null table, which - * provides support for shutdown-style clearing, which is also not - * currently implemented. - * - * Lazy table initialization minimizes footprint until first use, - * and also avoids resizings when the first operation is from a - * putAll, constructor with map argument, or deserialization. - * These cases attempt to override the initial capacity settings, - * but harmlessly fail to take effect in cases of races. - * - * The element count is maintained using a LongAdder, which avoids - * contention on updates but can encounter cache thrashing if read - * too frequently during concurrent access. To avoid reading so - * often, resizing is attempted either when a bin lock is - * contended, or upon adding to a bin already holding two or more - * nodes (checked before adding in the xIfAbsent methods, after - * adding in others). Under uniform hash distributions, the - * probability of this occurring at threshold is around 13%, - * meaning that only about 1 in 8 puts check threshold (and after - * resizing, many fewer do so). But this approximation has high - * variance for small table sizes, so we check on any collision - * for sizes <= 64. The bulk putAll operation further reduces - * contention by only committing count updates upon these size - * checks. - * - * Maintaining API and serialization compatibility with previous - * versions of this class introduces several oddities. Mainly: We - * leave untouched but unused constructor arguments refering to - * concurrencyLevel. We accept a loadFactor constructor argument, - * but apply it only to initial table capacity (which is the only - * time that we can guarantee to honor it.) We also declare an - * unused "Segment" class that is instantiated in minimal form - * only when serializing. - */ - - /* ---------------- Constants -------------- */ - - /** - * The largest possible table capacity. This value must be - * exactly 1<<30 to stay within Java array allocation and indexing - * bounds for power of two table sizes, and is further required - * because the top two bits of 32bit hash fields are used for - * control purposes. - */ - private static final int MAXIMUM_CAPACITY = 1 << 30; - - /** - * The default initial table capacity. Must be a power of 2 - * (i.e., at least 1) and at most MAXIMUM_CAPACITY. - */ - private static final int DEFAULT_CAPACITY = 16; - - /** - * The largest possible (non-power of two) array size. - * Needed by toArray and related methods. - */ - static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8; - - /** - * The default concurrency level for this table. Unused but - * defined for compatibility with previous versions of this class. - */ - private static final int DEFAULT_CONCURRENCY_LEVEL = 16; - - /** - * The load factor for this table. Overrides of this value in - * constructors affect only the initial table capacity. The - * actual floating point value isn't normally used -- it is - * simpler to use expressions such as {@code n - (n >>> 2)} for - * the associated resizing threshold. - */ - private static final float LOAD_FACTOR = 0.75f; - - /** - * The buffer size for skipped bins during transfers. The - * value is arbitrary but should be large enough to avoid - * most locking stalls during resizes. - */ - private static final int TRANSFER_BUFFER_SIZE = 32; - - /** - * The bin count threshold for using a tree rather than list for a - * bin. The value reflects the approximate break-even point for - * using tree-based operations. - * Note that Doug's version defaults to 8, but when dealing with - * Ruby objects it is actually beneficial to avoid TreeNodes - * as long as possible as it usually means going into Ruby land. - */ - private static final int TREE_THRESHOLD = 16; - - /* - * Encodings for special uses of Node hash fields. See above for - * explanation. - */ - static final int MOVED = 0x80000000; // hash field for forwarding nodes - static final int LOCKED = 0x40000000; // set/tested only as a bit - static final int WAITING = 0xc0000000; // both bits set/tested together - static final int HASH_BITS = 0x3fffffff; // usable bits of normal node hash - - /* ---------------- Fields -------------- */ - - /** - * The array of bins. Lazily initialized upon first insertion. - * Size is always a power of two. Accessed directly by iterators. - */ - transient volatile Node[] table; - - /** - * The counter maintaining number of elements. - */ - private transient final LongAdder counter; - - /** - * Table initialization and resizing control. When negative, the - * table is being initialized or resized. Otherwise, when table is - * null, holds the initial table size to use upon creation, or 0 - * for default. After initialization, holds the next element count - * value upon which to resize the table. - */ - private transient volatile int sizeCtl; - - // views - private transient KeySetView keySet; - private transient ValuesView values; - private transient EntrySetView entrySet; - - /** For serialization compatibility. Null unless serialized; see below */ - private Segment[] segments; - - /* ---------------- Table element access -------------- */ - - /* - * Volatile access methods are used for table elements as well as - * elements of in-progress next table while resizing. Uses are - * null checked by callers, and implicitly bounds-checked, relying - * on the invariants that tab arrays have non-zero size, and all - * indices are masked with (tab.length - 1) which is never - * negative and always less than length. Note that, to be correct - * wrt arbitrary concurrency errors by users, bounds checks must - * operate on local variables, which accounts for some odd-looking - * inline assignments below. - */ - - static final Node tabAt(Node[] tab, int i) { // used by Iter - return (Node)UNSAFE.getObjectVolatile(tab, ((long)i< 1 ? 64 : 1; - - /** - * Spins a while if LOCKED bit set and this node is the first - * of its bin, and then sets WAITING bits on hash field and - * blocks (once) if they are still set. It is OK for this - * method to return even if lock is not available upon exit, - * which enables these simple single-wait mechanics. - * - * The corresponding signalling operation is performed within - * callers: Upon detecting that WAITING has been set when - * unlocking lock (via a failed CAS from non-waiting LOCKED - * state), unlockers acquire the sync lock and perform a - * notifyAll. - * - * The initial sanity check on tab and bounds is not currently - * necessary in the only usages of this method, but enables - * use in other future contexts. - */ - final void tryAwaitLock(Node[] tab, int i) { - if (tab != null && i >= 0 && i < tab.length) { // sanity check - int r = ThreadLocalRandom.current().nextInt(); // randomize spins - int spins = MAX_SPINS, h; - while (tabAt(tab, i) == this && ((h = hash) & LOCKED) != 0) { - if (spins >= 0) { - r ^= r << 1; r ^= r >>> 3; r ^= r << 10; // xorshift - if (r >= 0 && --spins == 0) - Thread.yield(); // yield before block - } - else if (casHash(h, h | WAITING)) { - synchronized (this) { - if (tabAt(tab, i) == this && - (hash & WAITING) == WAITING) { - try { - wait(); - } catch (InterruptedException ie) { - Thread.currentThread().interrupt(); - } - } - else - notifyAll(); // possibly won race vs signaller - } - break; - } - } - } - } - - // Unsafe mechanics for casHash - private static final sun.misc.Unsafe UNSAFE; - private static final long hashOffset; - - static { - try { - UNSAFE = getUnsafe(); - Class k = Node.class; - hashOffset = UNSAFE.objectFieldOffset - (k.getDeclaredField("hash")); - } catch (Exception e) { - throw new Error(e); - } - } - } - - /* ---------------- TreeBins -------------- */ - - /** - * Nodes for use in TreeBins - */ - static final class TreeNode extends Node { - TreeNode parent; // red-black tree links - TreeNode left; - TreeNode right; - TreeNode prev; // needed to unlink next upon deletion - boolean red; - - TreeNode(int hash, Object key, Object val, Node next, TreeNode parent) { - super(hash, key, val, next); - this.parent = parent; - } - } - - /** - * A specialized form of red-black tree for use in bins - * whose size exceeds a threshold. - * - * TreeBins use a special form of comparison for search and - * related operations (which is the main reason we cannot use - * existing collections such as TreeMaps). TreeBins contain - * Comparable elements, but may contain others, as well as - * elements that are Comparable but not necessarily Comparable - * for the same T, so we cannot invoke compareTo among them. To - * handle this, the tree is ordered primarily by hash value, then - * by getClass().getName() order, and then by Comparator order - * among elements of the same class. On lookup at a node, if - * elements are not comparable or compare as 0, both left and - * right children may need to be searched in the case of tied hash - * values. (This corresponds to the full list search that would be - * necessary if all elements were non-Comparable and had tied - * hashes.) The red-black balancing code is updated from - * pre-jdk-collections - * (http://gee.cs.oswego.edu/dl/classes/collections/RBCell.java) - * based in turn on Cormen, Leiserson, and Rivest "Introduction to - * Algorithms" (CLR). - * - * TreeBins also maintain a separate locking discipline than - * regular bins. Because they are forwarded via special MOVED - * nodes at bin heads (which can never change once established), - * we cannot use those nodes as locks. Instead, TreeBin - * extends AbstractQueuedSynchronizer to support a simple form of - * read-write lock. For update operations and table validation, - * the exclusive form of lock behaves in the same way as bin-head - * locks. However, lookups use shared read-lock mechanics to allow - * multiple readers in the absence of writers. Additionally, - * these lookups do not ever block: While the lock is not - * available, they proceed along the slow traversal path (via - * next-pointers) until the lock becomes available or the list is - * exhausted, whichever comes first. (These cases are not fast, - * but maximize aggregate expected throughput.) The AQS mechanics - * for doing this are straightforward. The lock state is held as - * AQS getState(). Read counts are negative; the write count (1) - * is positive. There are no signalling preferences among readers - * and writers. Since we don't need to export full Lock API, we - * just override the minimal AQS methods and use them directly. - */ - static final class TreeBin extends AbstractQueuedSynchronizer { - private static final long serialVersionUID = 2249069246763182397L; - transient TreeNode root; // root of tree - transient TreeNode first; // head of next-pointer list - - /* AQS overrides */ - public final boolean isHeldExclusively() { return getState() > 0; } - public final boolean tryAcquire(int ignore) { - if (compareAndSetState(0, 1)) { - setExclusiveOwnerThread(Thread.currentThread()); - return true; - } - return false; - } - public final boolean tryRelease(int ignore) { - setExclusiveOwnerThread(null); - setState(0); - return true; - } - public final int tryAcquireShared(int ignore) { - for (int c;;) { - if ((c = getState()) > 0) - return -1; - if (compareAndSetState(c, c -1)) - return 1; - } - } - public final boolean tryReleaseShared(int ignore) { - int c; - do {} while (!compareAndSetState(c = getState(), c + 1)); - return c == -1; - } - - /** From CLR */ - private void rotateLeft(TreeNode p) { - if (p != null) { - TreeNode r = p.right, pp, rl; - if ((rl = p.right = r.left) != null) - rl.parent = p; - if ((pp = r.parent = p.parent) == null) - root = r; - else if (pp.left == p) - pp.left = r; - else - pp.right = r; - r.left = p; - p.parent = r; - } - } - - /** From CLR */ - private void rotateRight(TreeNode p) { - if (p != null) { - TreeNode l = p.left, pp, lr; - if ((lr = p.left = l.right) != null) - lr.parent = p; - if ((pp = l.parent = p.parent) == null) - root = l; - else if (pp.right == p) - pp.right = l; - else - pp.left = l; - l.right = p; - p.parent = l; - } - } - - @SuppressWarnings("unchecked") final TreeNode getTreeNode - (int h, Object k, TreeNode p) { - return getTreeNode(h, (RubyObject)k, p); - } - - /** - * Returns the TreeNode (or null if not found) for the given key - * starting at given root. - */ - @SuppressWarnings("unchecked") final TreeNode getTreeNode - (int h, RubyObject k, TreeNode p) { - RubyClass c = k.getMetaClass(); boolean kNotComparable = !k.respondsTo("<=>"); - while (p != null) { - int dir, ph; RubyObject pk; RubyClass pc; - if ((ph = p.hash) == h) { - if ((pk = (RubyObject)p.key) == k || k.equals(pk)) - return p; - if (c != (pc = (RubyClass)pk.getMetaClass()) || - kNotComparable || - (dir = rubyCompare(k, pk)) == 0) { - dir = (c == pc) ? 0 : c.getName().compareTo(pc.getName()); - if (dir == 0) { // if still stuck, need to check both sides - TreeNode r = null, pl, pr; - // try to recurse on the right - if ((pr = p.right) != null && h >= pr.hash && (r = getTreeNode(h, k, pr)) != null) - return r; - // try to continue iterating on the left side - else if ((pl = p.left) != null && h <= pl.hash) - dir = -1; - else // no matching node found - return null; - } - } - } - else - dir = (h < ph) ? -1 : 1; - p = (dir > 0) ? p.right : p.left; - } - return null; - } - - int rubyCompare(RubyObject l, RubyObject r) { - ThreadContext context = l.getMetaClass().getRuntime().getCurrentContext(); - IRubyObject result; - try { - result = l.callMethod(context, "<=>", r); - } catch (RaiseException e) { - // handle objects "lying" about responding to <=>, ie: an Array containing non-comparable keys - if (context.runtime.getNoMethodError().isInstance(e.getException())) { - return 0; - } - throw e; - } - - return result.isNil() ? 0 : RubyNumeric.num2int(result.convertToInteger()); - } - - /** - * Wrapper for getTreeNode used by CHM.get. Tries to obtain - * read-lock to call getTreeNode, but during failure to get - * lock, searches along next links. - */ - final Object getValue(int h, Object k) { - Node r = null; - int c = getState(); // Must read lock state first - for (Node e = first; e != null; e = e.next) { - if (c <= 0 && compareAndSetState(c, c - 1)) { - try { - r = getTreeNode(h, k, root); - } finally { - releaseShared(0); - } - break; - } - else if ((e.hash & HASH_BITS) == h && k.equals(e.key)) { - r = e; - break; - } - else - c = getState(); - } - return r == null ? null : r.val; - } - - @SuppressWarnings("unchecked") final TreeNode putTreeNode - (int h, Object k, Object v) { - return putTreeNode(h, (RubyObject)k, v); - } - - /** - * Finds or adds a node. - * @return null if added - */ - @SuppressWarnings("unchecked") final TreeNode putTreeNode - (int h, RubyObject k, Object v) { - RubyClass c = k.getMetaClass(); - boolean kNotComparable = !k.respondsTo("<=>"); - TreeNode pp = root, p = null; - int dir = 0; - while (pp != null) { // find existing node or leaf to insert at - int ph; RubyObject pk; RubyClass pc; - p = pp; - if ((ph = p.hash) == h) { - if ((pk = (RubyObject)p.key) == k || k.equals(pk)) - return p; - if (c != (pc = pk.getMetaClass()) || - kNotComparable || - (dir = rubyCompare(k, pk)) == 0) { - dir = (c == pc) ? 0 : c.getName().compareTo(pc.getName()); - if (dir == 0) { // if still stuck, need to check both sides - TreeNode r = null, pr; - // try to recurse on the right - if ((pr = p.right) != null && h >= pr.hash && (r = getTreeNode(h, k, pr)) != null) - return r; - else // continue descending down the left subtree - dir = -1; - } - } - } - else - dir = (h < ph) ? -1 : 1; - pp = (dir > 0) ? p.right : p.left; - } - - TreeNode f = first; - TreeNode x = first = new TreeNode(h, (Object)k, v, f, p); - if (p == null) - root = x; - else { // attach and rebalance; adapted from CLR - TreeNode xp, xpp; - if (f != null) - f.prev = x; - if (dir <= 0) - p.left = x; - else - p.right = x; - x.red = true; - while (x != null && (xp = x.parent) != null && xp.red && - (xpp = xp.parent) != null) { - TreeNode xppl = xpp.left; - if (xp == xppl) { - TreeNode y = xpp.right; - if (y != null && y.red) { - y.red = false; - xp.red = false; - xpp.red = true; - x = xpp; - } - else { - if (x == xp.right) { - rotateLeft(x = xp); - xpp = (xp = x.parent) == null ? null : xp.parent; - } - if (xp != null) { - xp.red = false; - if (xpp != null) { - xpp.red = true; - rotateRight(xpp); - } - } - } - } - else { - TreeNode y = xppl; - if (y != null && y.red) { - y.red = false; - xp.red = false; - xpp.red = true; - x = xpp; - } - else { - if (x == xp.left) { - rotateRight(x = xp); - xpp = (xp = x.parent) == null ? null : xp.parent; - } - if (xp != null) { - xp.red = false; - if (xpp != null) { - xpp.red = true; - rotateLeft(xpp); - } - } - } - } - } - TreeNode r = root; - if (r != null && r.red) - r.red = false; - } - return null; - } - - /** - * Removes the given node, that must be present before this - * call. This is messier than typical red-black deletion code - * because we cannot swap the contents of an interior node - * with a leaf successor that is pinned by "next" pointers - * that are accessible independently of lock. So instead we - * swap the tree linkages. - */ - final void deleteTreeNode(TreeNode p) { - TreeNode next = (TreeNode)p.next; // unlink traversal pointers - TreeNode pred = p.prev; - if (pred == null) - first = next; - else - pred.next = next; - if (next != null) - next.prev = pred; - TreeNode replacement; - TreeNode pl = p.left; - TreeNode pr = p.right; - if (pl != null && pr != null) { - TreeNode s = pr, sl; - while ((sl = s.left) != null) // find successor - s = sl; - boolean c = s.red; s.red = p.red; p.red = c; // swap colors - TreeNode sr = s.right; - TreeNode pp = p.parent; - if (s == pr) { // p was s's direct parent - p.parent = s; - s.right = p; - } - else { - TreeNode sp = s.parent; - if ((p.parent = sp) != null) { - if (s == sp.left) - sp.left = p; - else - sp.right = p; - } - if ((s.right = pr) != null) - pr.parent = s; - } - p.left = null; - if ((p.right = sr) != null) - sr.parent = p; - if ((s.left = pl) != null) - pl.parent = s; - if ((s.parent = pp) == null) - root = s; - else if (p == pp.left) - pp.left = s; - else - pp.right = s; - replacement = sr; - } - else - replacement = (pl != null) ? pl : pr; - TreeNode pp = p.parent; - if (replacement == null) { - if (pp == null) { - root = null; - return; - } - replacement = p; - } - else { - replacement.parent = pp; - if (pp == null) - root = replacement; - else if (p == pp.left) - pp.left = replacement; - else - pp.right = replacement; - p.left = p.right = p.parent = null; - } - if (!p.red) { // rebalance, from CLR - TreeNode x = replacement; - while (x != null) { - TreeNode xp, xpl; - if (x.red || (xp = x.parent) == null) { - x.red = false; - break; - } - if (x == (xpl = xp.left)) { - TreeNode sib = xp.right; - if (sib != null && sib.red) { - sib.red = false; - xp.red = true; - rotateLeft(xp); - sib = (xp = x.parent) == null ? null : xp.right; - } - if (sib == null) - x = xp; - else { - TreeNode sl = sib.left, sr = sib.right; - if ((sr == null || !sr.red) && - (sl == null || !sl.red)) { - sib.red = true; - x = xp; - } - else { - if (sr == null || !sr.red) { - if (sl != null) - sl.red = false; - sib.red = true; - rotateRight(sib); - sib = (xp = x.parent) == null ? null : xp.right; - } - if (sib != null) { - sib.red = (xp == null) ? false : xp.red; - if ((sr = sib.right) != null) - sr.red = false; - } - if (xp != null) { - xp.red = false; - rotateLeft(xp); - } - x = root; - } - } - } - else { // symmetric - TreeNode sib = xpl; - if (sib != null && sib.red) { - sib.red = false; - xp.red = true; - rotateRight(xp); - sib = (xp = x.parent) == null ? null : xp.left; - } - if (sib == null) - x = xp; - else { - TreeNode sl = sib.left, sr = sib.right; - if ((sl == null || !sl.red) && - (sr == null || !sr.red)) { - sib.red = true; - x = xp; - } - else { - if (sl == null || !sl.red) { - if (sr != null) - sr.red = false; - sib.red = true; - rotateLeft(sib); - sib = (xp = x.parent) == null ? null : xp.left; - } - if (sib != null) { - sib.red = (xp == null) ? false : xp.red; - if ((sl = sib.left) != null) - sl.red = false; - } - if (xp != null) { - xp.red = false; - rotateRight(xp); - } - x = root; - } - } - } - } - } - if (p == replacement && (pp = p.parent) != null) { - if (p == pp.left) // detach pointers - pp.left = null; - else if (p == pp.right) - pp.right = null; - p.parent = null; - } - } - } - - /* ---------------- Collision reduction methods -------------- */ - - /** - * Spreads higher bits to lower, and also forces top 2 bits to 0. - * Because the table uses power-of-two masking, sets of hashes - * that vary only in bits above the current mask will always - * collide. (Among known examples are sets of Float keys holding - * consecutive whole numbers in small tables.) To counter this, - * we apply a transform that spreads the impact of higher bits - * downward. There is a tradeoff between speed, utility, and - * quality of bit-spreading. Because many common sets of hashes - * are already reasonably distributed across bits (so don't benefit - * from spreading), and because we use trees to handle large sets - * of collisions in bins, we don't need excessively high quality. - */ - private static final int spread(int h) { - h ^= (h >>> 18) ^ (h >>> 12); - return (h ^ (h >>> 10)) & HASH_BITS; - } - - /** - * Replaces a list bin with a tree bin. Call only when locked. - * Fails to replace if the given key is non-comparable or table - * is, or needs, resizing. - */ - private final void replaceWithTreeBin(Node[] tab, int index, Object key) { - if ((key instanceof Comparable) && - (tab.length >= MAXIMUM_CAPACITY || counter.sum() < (long)sizeCtl)) { - TreeBin t = new TreeBin(); - for (Node e = tabAt(tab, index); e != null; e = e.next) - t.putTreeNode(e.hash & HASH_BITS, e.key, e.val); - setTabAt(tab, index, new Node(MOVED, t, null, null)); - } - } - - /* ---------------- Internal access and update methods -------------- */ - - /** Implementation for get and containsKey */ - private final Object internalGet(Object k) { - int h = spread(k.hashCode()); - retry: for (Node[] tab = table; tab != null;) { - Node e, p; Object ek, ev; int eh; // locals to read fields once - for (e = tabAt(tab, (tab.length - 1) & h); e != null; e = e.next) { - if ((eh = e.hash) == MOVED) { - if ((ek = e.key) instanceof TreeBin) // search TreeBin - return ((TreeBin)ek).getValue(h, k); - else { // restart with new table - tab = (Node[])ek; - continue retry; - } - } - else if ((eh & HASH_BITS) == h && (ev = e.val) != null && - ((ek = e.key) == k || k.equals(ek))) - return ev; - } - break; - } - return null; - } - - /** - * Implementation for the four public remove/replace methods: - * Replaces node value with v, conditional upon match of cv if - * non-null. If resulting value is null, delete. - */ - private final Object internalReplace(Object k, Object v, Object cv) { - int h = spread(k.hashCode()); - Object oldVal = null; - for (Node[] tab = table;;) { - Node f; int i, fh; Object fk; - if (tab == null || - (f = tabAt(tab, i = (tab.length - 1) & h)) == null) - break; - else if ((fh = f.hash) == MOVED) { - if ((fk = f.key) instanceof TreeBin) { - TreeBin t = (TreeBin)fk; - boolean validated = false; - boolean deleted = false; - t.acquire(0); - try { - if (tabAt(tab, i) == f) { - validated = true; - TreeNode p = t.getTreeNode(h, k, t.root); - if (p != null) { - Object pv = p.val; - if (cv == null || cv == pv || cv.equals(pv)) { - oldVal = pv; - if ((p.val = v) == null) { - deleted = true; - t.deleteTreeNode(p); - } - } - } - } - } finally { - t.release(0); - } - if (validated) { - if (deleted) - counter.add(-1L); - break; - } - } - else - tab = (Node[])fk; - } - else if ((fh & HASH_BITS) != h && f.next == null) // precheck - break; // rules out possible existence - else if ((fh & LOCKED) != 0) { - checkForResize(); // try resizing if can't get lock - f.tryAwaitLock(tab, i); - } - else if (f.casHash(fh, fh | LOCKED)) { - boolean validated = false; - boolean deleted = false; - try { - if (tabAt(tab, i) == f) { - validated = true; - for (Node e = f, pred = null;;) { - Object ek, ev; - if ((e.hash & HASH_BITS) == h && - ((ev = e.val) != null) && - ((ek = e.key) == k || k.equals(ek))) { - if (cv == null || cv == ev || cv.equals(ev)) { - oldVal = ev; - if ((e.val = v) == null) { - deleted = true; - Node en = e.next; - if (pred != null) - pred.next = en; - else - setTabAt(tab, i, en); - } - } - break; - } - pred = e; - if ((e = e.next) == null) - break; - } - } - } finally { - if (!f.casHash(fh | LOCKED, fh)) { - f.hash = fh; - synchronized (f) { f.notifyAll(); }; - } - } - if (validated) { - if (deleted) - counter.add(-1L); - break; - } - } - } - return oldVal; - } - - /* - * Internal versions of the six insertion methods, each a - * little more complicated than the last. All have - * the same basic structure as the first (internalPut): - * 1. If table uninitialized, create - * 2. If bin empty, try to CAS new node - * 3. If bin stale, use new table - * 4. if bin converted to TreeBin, validate and relay to TreeBin methods - * 5. Lock and validate; if valid, scan and add or update - * - * The others interweave other checks and/or alternative actions: - * * Plain put checks for and performs resize after insertion. - * * putIfAbsent prescans for mapping without lock (and fails to add - * if present), which also makes pre-emptive resize checks worthwhile. - * * computeIfAbsent extends form used in putIfAbsent with additional - * mechanics to deal with, calls, potential exceptions and null - * returns from function call. - * * compute uses the same function-call mechanics, but without - * the prescans - * * merge acts as putIfAbsent in the absent case, but invokes the - * update function if present - * * putAll attempts to pre-allocate enough table space - * and more lazily performs count updates and checks. - * - * Someday when details settle down a bit more, it might be worth - * some factoring to reduce sprawl. - */ - - /** Implementation for put */ - private final Object internalPut(Object k, Object v) { - int h = spread(k.hashCode()); - int count = 0; - for (Node[] tab = table;;) { - int i; Node f; int fh; Object fk; - if (tab == null) - tab = initTable(); - else if ((f = tabAt(tab, i = (tab.length - 1) & h)) == null) { - if (casTabAt(tab, i, null, new Node(h, k, v, null))) - break; // no lock when adding to empty bin - } - else if ((fh = f.hash) == MOVED) { - if ((fk = f.key) instanceof TreeBin) { - TreeBin t = (TreeBin)fk; - Object oldVal = null; - t.acquire(0); - try { - if (tabAt(tab, i) == f) { - count = 2; - TreeNode p = t.putTreeNode(h, k, v); - if (p != null) { - oldVal = p.val; - p.val = v; - } - } - } finally { - t.release(0); - } - if (count != 0) { - if (oldVal != null) - return oldVal; - break; - } - } - else - tab = (Node[])fk; - } - else if ((fh & LOCKED) != 0) { - checkForResize(); - f.tryAwaitLock(tab, i); - } - else if (f.casHash(fh, fh | LOCKED)) { - Object oldVal = null; - try { // needed in case equals() throws - if (tabAt(tab, i) == f) { - count = 1; - for (Node e = f;; ++count) { - Object ek, ev; - if ((e.hash & HASH_BITS) == h && - (ev = e.val) != null && - ((ek = e.key) == k || k.equals(ek))) { - oldVal = ev; - e.val = v; - break; - } - Node last = e; - if ((e = e.next) == null) { - last.next = new Node(h, k, v, null); - if (count >= TREE_THRESHOLD) - replaceWithTreeBin(tab, i, k); - break; - } - } - } - } finally { // unlock and signal if needed - if (!f.casHash(fh | LOCKED, fh)) { - f.hash = fh; - synchronized (f) { f.notifyAll(); }; - } - } - if (count != 0) { - if (oldVal != null) - return oldVal; - if (tab.length <= 64) - count = 2; - break; - } - } - } - counter.add(1L); - if (count > 1) - checkForResize(); - return null; - } - - /** Implementation for putIfAbsent */ - private final Object internalPutIfAbsent(Object k, Object v) { - int h = spread(k.hashCode()); - int count = 0; - for (Node[] tab = table;;) { - int i; Node f; int fh; Object fk, fv; - if (tab == null) - tab = initTable(); - else if ((f = tabAt(tab, i = (tab.length - 1) & h)) == null) { - if (casTabAt(tab, i, null, new Node(h, k, v, null))) - break; - } - else if ((fh = f.hash) == MOVED) { - if ((fk = f.key) instanceof TreeBin) { - TreeBin t = (TreeBin)fk; - Object oldVal = null; - t.acquire(0); - try { - if (tabAt(tab, i) == f) { - count = 2; - TreeNode p = t.putTreeNode(h, k, v); - if (p != null) - oldVal = p.val; - } - } finally { - t.release(0); - } - if (count != 0) { - if (oldVal != null) - return oldVal; - break; - } - } - else - tab = (Node[])fk; - } - else if ((fh & HASH_BITS) == h && (fv = f.val) != null && - ((fk = f.key) == k || k.equals(fk))) - return fv; - else { - Node g = f.next; - if (g != null) { // at least 2 nodes -- search and maybe resize - for (Node e = g;;) { - Object ek, ev; - if ((e.hash & HASH_BITS) == h && (ev = e.val) != null && - ((ek = e.key) == k || k.equals(ek))) - return ev; - if ((e = e.next) == null) { - checkForResize(); - break; - } - } - } - if (((fh = f.hash) & LOCKED) != 0) { - checkForResize(); - f.tryAwaitLock(tab, i); - } - else if (tabAt(tab, i) == f && f.casHash(fh, fh | LOCKED)) { - Object oldVal = null; - try { - if (tabAt(tab, i) == f) { - count = 1; - for (Node e = f;; ++count) { - Object ek, ev; - if ((e.hash & HASH_BITS) == h && - (ev = e.val) != null && - ((ek = e.key) == k || k.equals(ek))) { - oldVal = ev; - break; - } - Node last = e; - if ((e = e.next) == null) { - last.next = new Node(h, k, v, null); - if (count >= TREE_THRESHOLD) - replaceWithTreeBin(tab, i, k); - break; - } - } - } - } finally { - if (!f.casHash(fh | LOCKED, fh)) { - f.hash = fh; - synchronized (f) { f.notifyAll(); }; - } - } - if (count != 0) { - if (oldVal != null) - return oldVal; - if (tab.length <= 64) - count = 2; - break; - } - } - } - } - counter.add(1L); - if (count > 1) - checkForResize(); - return null; - } - - /** Implementation for computeIfAbsent */ - private final Object internalComputeIfAbsent(K k, - Fun mf) { - int h = spread(k.hashCode()); - Object val = null; - int count = 0; - for (Node[] tab = table;;) { - Node f; int i, fh; Object fk, fv; - if (tab == null) - tab = initTable(); - else if ((f = tabAt(tab, i = (tab.length - 1) & h)) == null) { - Node node = new Node(fh = h | LOCKED, k, null, null); - if (casTabAt(tab, i, null, node)) { - count = 1; - try { - if ((val = mf.apply(k)) != null) - node.val = val; - } finally { - if (val == null) - setTabAt(tab, i, null); - if (!node.casHash(fh, h)) { - node.hash = h; - synchronized (node) { node.notifyAll(); }; - } - } - } - if (count != 0) - break; - } - else if ((fh = f.hash) == MOVED) { - if ((fk = f.key) instanceof TreeBin) { - TreeBin t = (TreeBin)fk; - boolean added = false; - t.acquire(0); - try { - if (tabAt(tab, i) == f) { - count = 1; - TreeNode p = t.getTreeNode(h, k, t.root); - if (p != null) - val = p.val; - else if ((val = mf.apply(k)) != null) { - added = true; - count = 2; - t.putTreeNode(h, k, val); - } - } - } finally { - t.release(0); - } - if (count != 0) { - if (!added) - return val; - break; - } - } - else - tab = (Node[])fk; - } - else if ((fh & HASH_BITS) == h && (fv = f.val) != null && - ((fk = f.key) == k || k.equals(fk))) - return fv; - else { - Node g = f.next; - if (g != null) { - for (Node e = g;;) { - Object ek, ev; - if ((e.hash & HASH_BITS) == h && (ev = e.val) != null && - ((ek = e.key) == k || k.equals(ek))) - return ev; - if ((e = e.next) == null) { - checkForResize(); - break; - } - } - } - if (((fh = f.hash) & LOCKED) != 0) { - checkForResize(); - f.tryAwaitLock(tab, i); - } - else if (tabAt(tab, i) == f && f.casHash(fh, fh | LOCKED)) { - boolean added = false; - try { - if (tabAt(tab, i) == f) { - count = 1; - for (Node e = f;; ++count) { - Object ek, ev; - if ((e.hash & HASH_BITS) == h && - (ev = e.val) != null && - ((ek = e.key) == k || k.equals(ek))) { - val = ev; - break; - } - Node last = e; - if ((e = e.next) == null) { - if ((val = mf.apply(k)) != null) { - added = true; - last.next = new Node(h, k, val, null); - if (count >= TREE_THRESHOLD) - replaceWithTreeBin(tab, i, k); - } - break; - } - } - } - } finally { - if (!f.casHash(fh | LOCKED, fh)) { - f.hash = fh; - synchronized (f) { f.notifyAll(); }; - } - } - if (count != 0) { - if (!added) - return val; - if (tab.length <= 64) - count = 2; - break; - } - } - } - } - if (val != null) { - counter.add(1L); - if (count > 1) - checkForResize(); - } - return val; - } - - /** Implementation for compute */ - @SuppressWarnings("unchecked") private final Object internalCompute - (K k, boolean onlyIfPresent, BiFun mf) { - int h = spread(k.hashCode()); - Object val = null; - int delta = 0; - int count = 0; - for (Node[] tab = table;;) { - Node f; int i, fh; Object fk; - if (tab == null) - tab = initTable(); - else if ((f = tabAt(tab, i = (tab.length - 1) & h)) == null) { - if (onlyIfPresent) - break; - Node node = new Node(fh = h | LOCKED, k, null, null); - if (casTabAt(tab, i, null, node)) { - try { - count = 1; - if ((val = mf.apply(k, null)) != null) { - node.val = val; - delta = 1; - } - } finally { - if (delta == 0) - setTabAt(tab, i, null); - if (!node.casHash(fh, h)) { - node.hash = h; - synchronized (node) { node.notifyAll(); }; - } - } - } - if (count != 0) - break; - } - else if ((fh = f.hash) == MOVED) { - if ((fk = f.key) instanceof TreeBin) { - TreeBin t = (TreeBin)fk; - t.acquire(0); - try { - if (tabAt(tab, i) == f) { - count = 1; - TreeNode p = t.getTreeNode(h, k, t.root); - Object pv; - if (p == null) { - if (onlyIfPresent) - break; - pv = null; - } else - pv = p.val; - if ((val = mf.apply(k, (V)pv)) != null) { - if (p != null) - p.val = val; - else { - count = 2; - delta = 1; - t.putTreeNode(h, k, val); - } - } - else if (p != null) { - delta = -1; - t.deleteTreeNode(p); - } - } - } finally { - t.release(0); - } - if (count != 0) - break; - } - else - tab = (Node[])fk; - } - else if ((fh & LOCKED) != 0) { - checkForResize(); - f.tryAwaitLock(tab, i); - } - else if (f.casHash(fh, fh | LOCKED)) { - try { - if (tabAt(tab, i) == f) { - count = 1; - for (Node e = f, pred = null;; ++count) { - Object ek, ev; - if ((e.hash & HASH_BITS) == h && - (ev = e.val) != null && - ((ek = e.key) == k || k.equals(ek))) { - val = mf.apply(k, (V)ev); - if (val != null) - e.val = val; - else { - delta = -1; - Node en = e.next; - if (pred != null) - pred.next = en; - else - setTabAt(tab, i, en); - } - break; - } - pred = e; - if ((e = e.next) == null) { - if (!onlyIfPresent && (val = mf.apply(k, null)) != null) { - pred.next = new Node(h, k, val, null); - delta = 1; - if (count >= TREE_THRESHOLD) - replaceWithTreeBin(tab, i, k); - } - break; - } - } - } - } finally { - if (!f.casHash(fh | LOCKED, fh)) { - f.hash = fh; - synchronized (f) { f.notifyAll(); }; - } - } - if (count != 0) { - if (tab.length <= 64) - count = 2; - break; - } - } - } - if (delta != 0) { - counter.add((long)delta); - if (count > 1) - checkForResize(); - } - return val; - } - - /** Implementation for merge */ - @SuppressWarnings("unchecked") private final Object internalMerge - (K k, V v, BiFun mf) { - int h = spread(k.hashCode()); - Object val = null; - int delta = 0; - int count = 0; - for (Node[] tab = table;;) { - int i; Node f; int fh; Object fk, fv; - if (tab == null) - tab = initTable(); - else if ((f = tabAt(tab, i = (tab.length - 1) & h)) == null) { - if (casTabAt(tab, i, null, new Node(h, k, v, null))) { - delta = 1; - val = v; - break; - } - } - else if ((fh = f.hash) == MOVED) { - if ((fk = f.key) instanceof TreeBin) { - TreeBin t = (TreeBin)fk; - t.acquire(0); - try { - if (tabAt(tab, i) == f) { - count = 1; - TreeNode p = t.getTreeNode(h, k, t.root); - val = (p == null) ? v : mf.apply((V)p.val, v); - if (val != null) { - if (p != null) - p.val = val; - else { - count = 2; - delta = 1; - t.putTreeNode(h, k, val); - } - } - else if (p != null) { - delta = -1; - t.deleteTreeNode(p); - } - } - } finally { - t.release(0); - } - if (count != 0) - break; - } - else - tab = (Node[])fk; - } - else if ((fh & LOCKED) != 0) { - checkForResize(); - f.tryAwaitLock(tab, i); - } - else if (f.casHash(fh, fh | LOCKED)) { - try { - if (tabAt(tab, i) == f) { - count = 1; - for (Node e = f, pred = null;; ++count) { - Object ek, ev; - if ((e.hash & HASH_BITS) == h && - (ev = e.val) != null && - ((ek = e.key) == k || k.equals(ek))) { - val = mf.apply((V)ev, v); - if (val != null) - e.val = val; - else { - delta = -1; - Node en = e.next; - if (pred != null) - pred.next = en; - else - setTabAt(tab, i, en); - } - break; - } - pred = e; - if ((e = e.next) == null) { - val = v; - pred.next = new Node(h, k, val, null); - delta = 1; - if (count >= TREE_THRESHOLD) - replaceWithTreeBin(tab, i, k); - break; - } - } - } - } finally { - if (!f.casHash(fh | LOCKED, fh)) { - f.hash = fh; - synchronized (f) { f.notifyAll(); }; - } - } - if (count != 0) { - if (tab.length <= 64) - count = 2; - break; - } - } - } - if (delta != 0) { - counter.add((long)delta); - if (count > 1) - checkForResize(); - } - return val; - } - - /** Implementation for putAll */ - private final void internalPutAll(Map m) { - tryPresize(m.size()); - long delta = 0L; // number of uncommitted additions - boolean npe = false; // to throw exception on exit for nulls - try { // to clean up counts on other exceptions - for (Map.Entry entry : m.entrySet()) { - Object k, v; - if (entry == null || (k = entry.getKey()) == null || - (v = entry.getValue()) == null) { - npe = true; - break; - } - int h = spread(k.hashCode()); - for (Node[] tab = table;;) { - int i; Node f; int fh; Object fk; - if (tab == null) - tab = initTable(); - else if ((f = tabAt(tab, i = (tab.length - 1) & h)) == null){ - if (casTabAt(tab, i, null, new Node(h, k, v, null))) { - ++delta; - break; - } - } - else if ((fh = f.hash) == MOVED) { - if ((fk = f.key) instanceof TreeBin) { - TreeBin t = (TreeBin)fk; - boolean validated = false; - t.acquire(0); - try { - if (tabAt(tab, i) == f) { - validated = true; - TreeNode p = t.getTreeNode(h, k, t.root); - if (p != null) - p.val = v; - else { - t.putTreeNode(h, k, v); - ++delta; - } - } - } finally { - t.release(0); - } - if (validated) - break; - } - else - tab = (Node[])fk; - } - else if ((fh & LOCKED) != 0) { - counter.add(delta); - delta = 0L; - checkForResize(); - f.tryAwaitLock(tab, i); - } - else if (f.casHash(fh, fh | LOCKED)) { - int count = 0; - try { - if (tabAt(tab, i) == f) { - count = 1; - for (Node e = f;; ++count) { - Object ek, ev; - if ((e.hash & HASH_BITS) == h && - (ev = e.val) != null && - ((ek = e.key) == k || k.equals(ek))) { - e.val = v; - break; - } - Node last = e; - if ((e = e.next) == null) { - ++delta; - last.next = new Node(h, k, v, null); - if (count >= TREE_THRESHOLD) - replaceWithTreeBin(tab, i, k); - break; - } - } - } - } finally { - if (!f.casHash(fh | LOCKED, fh)) { - f.hash = fh; - synchronized (f) { f.notifyAll(); }; - } - } - if (count != 0) { - if (count > 1) { - counter.add(delta); - delta = 0L; - checkForResize(); - } - break; - } - } - } - } - } finally { - if (delta != 0) - counter.add(delta); - } - if (npe) - throw new NullPointerException(); - } - - /* ---------------- Table Initialization and Resizing -------------- */ - - /** - * Returns a power of two table size for the given desired capacity. - * See Hackers Delight, sec 3.2 - */ - private static final int tableSizeFor(int c) { - int n = c - 1; - n |= n >>> 1; - n |= n >>> 2; - n |= n >>> 4; - n |= n >>> 8; - n |= n >>> 16; - return (n < 0) ? 1 : (n >= MAXIMUM_CAPACITY) ? MAXIMUM_CAPACITY : n + 1; - } - - /** - * Initializes table, using the size recorded in sizeCtl. - */ - private final Node[] initTable() { - Node[] tab; int sc; - while ((tab = table) == null) { - if ((sc = sizeCtl) < 0) - Thread.yield(); // lost initialization race; just spin - else if (UNSAFE.compareAndSwapInt(this, sizeCtlOffset, sc, -1)) { - try { - if ((tab = table) == null) { - int n = (sc > 0) ? sc : DEFAULT_CAPACITY; - tab = table = new Node[n]; - sc = n - (n >>> 2); - } - } finally { - sizeCtl = sc; - } - break; - } - } - return tab; - } - - /** - * If table is too small and not already resizing, creates next - * table and transfers bins. Rechecks occupancy after a transfer - * to see if another resize is already needed because resizings - * are lagging additions. - */ - private final void checkForResize() { - Node[] tab; int n, sc; - while ((tab = table) != null && - (n = tab.length) < MAXIMUM_CAPACITY && - (sc = sizeCtl) >= 0 && counter.sum() >= (long)sc && - UNSAFE.compareAndSwapInt(this, sizeCtlOffset, sc, -1)) { - try { - if (tab == table) { - table = rebuild(tab); - sc = (n << 1) - (n >>> 1); - } - } finally { - sizeCtl = sc; - } - } - } - - /** - * Tries to presize table to accommodate the given number of elements. - * - * @param size number of elements (doesn't need to be perfectly accurate) - */ - private final void tryPresize(int size) { - int c = (size >= (MAXIMUM_CAPACITY >>> 1)) ? MAXIMUM_CAPACITY : - tableSizeFor(size + (size >>> 1) + 1); - int sc; - while ((sc = sizeCtl) >= 0) { - Node[] tab = table; int n; - if (tab == null || (n = tab.length) == 0) { - n = (sc > c) ? sc : c; - if (UNSAFE.compareAndSwapInt(this, sizeCtlOffset, sc, -1)) { - try { - if (table == tab) { - table = new Node[n]; - sc = n - (n >>> 2); - } - } finally { - sizeCtl = sc; - } - } - } - else if (c <= sc || n >= MAXIMUM_CAPACITY) - break; - else if (UNSAFE.compareAndSwapInt(this, sizeCtlOffset, sc, -1)) { - try { - if (table == tab) { - table = rebuild(tab); - sc = (n << 1) - (n >>> 1); - } - } finally { - sizeCtl = sc; - } - } - } - } - - /* - * Moves and/or copies the nodes in each bin to new table. See - * above for explanation. - * - * @return the new table - */ - private static final Node[] rebuild(Node[] tab) { - int n = tab.length; - Node[] nextTab = new Node[n << 1]; - Node fwd = new Node(MOVED, nextTab, null, null); - int[] buffer = null; // holds bins to revisit; null until needed - Node rev = null; // reverse forwarder; null until needed - int nbuffered = 0; // the number of bins in buffer list - int bufferIndex = 0; // buffer index of current buffered bin - int bin = n - 1; // current non-buffered bin or -1 if none - - for (int i = bin;;) { // start upwards sweep - int fh; Node f; - if ((f = tabAt(tab, i)) == null) { - if (bin >= 0) { // Unbuffered; no lock needed (or available) - if (!casTabAt(tab, i, f, fwd)) - continue; - } - else { // transiently use a locked forwarding node - Node g = new Node(MOVED|LOCKED, nextTab, null, null); - if (!casTabAt(tab, i, f, g)) - continue; - setTabAt(nextTab, i, null); - setTabAt(nextTab, i + n, null); - setTabAt(tab, i, fwd); - if (!g.casHash(MOVED|LOCKED, MOVED)) { - g.hash = MOVED; - synchronized (g) { g.notifyAll(); } - } - } - } - else if ((fh = f.hash) == MOVED) { - Object fk = f.key; - if (fk instanceof TreeBin) { - TreeBin t = (TreeBin)fk; - boolean validated = false; - t.acquire(0); - try { - if (tabAt(tab, i) == f) { - validated = true; - splitTreeBin(nextTab, i, t); - setTabAt(tab, i, fwd); - } - } finally { - t.release(0); - } - if (!validated) - continue; - } - } - else if ((fh & LOCKED) == 0 && f.casHash(fh, fh|LOCKED)) { - boolean validated = false; - try { // split to lo and hi lists; copying as needed - if (tabAt(tab, i) == f) { - validated = true; - splitBin(nextTab, i, f); - setTabAt(tab, i, fwd); - } - } finally { - if (!f.casHash(fh | LOCKED, fh)) { - f.hash = fh; - synchronized (f) { f.notifyAll(); }; - } - } - if (!validated) - continue; - } - else { - if (buffer == null) // initialize buffer for revisits - buffer = new int[TRANSFER_BUFFER_SIZE]; - if (bin < 0 && bufferIndex > 0) { - int j = buffer[--bufferIndex]; - buffer[bufferIndex] = i; - i = j; // swap with another bin - continue; - } - if (bin < 0 || nbuffered >= TRANSFER_BUFFER_SIZE) { - f.tryAwaitLock(tab, i); - continue; // no other options -- block - } - if (rev == null) // initialize reverse-forwarder - rev = new Node(MOVED, tab, null, null); - if (tabAt(tab, i) != f || (f.hash & LOCKED) == 0) - continue; // recheck before adding to list - buffer[nbuffered++] = i; - setTabAt(nextTab, i, rev); // install place-holders - setTabAt(nextTab, i + n, rev); - } - - if (bin > 0) - i = --bin; - else if (buffer != null && nbuffered > 0) { - bin = -1; - i = buffer[bufferIndex = --nbuffered]; - } - else - return nextTab; - } - } - - /** - * Splits a normal bin with list headed by e into lo and hi parts; - * installs in given table. - */ - private static void splitBin(Node[] nextTab, int i, Node e) { - int bit = nextTab.length >>> 1; // bit to split on - int runBit = e.hash & bit; - Node lastRun = e, lo = null, hi = null; - for (Node p = e.next; p != null; p = p.next) { - int b = p.hash & bit; - if (b != runBit) { - runBit = b; - lastRun = p; - } - } - if (runBit == 0) - lo = lastRun; - else - hi = lastRun; - for (Node p = e; p != lastRun; p = p.next) { - int ph = p.hash & HASH_BITS; - Object pk = p.key, pv = p.val; - if ((ph & bit) == 0) - lo = new Node(ph, pk, pv, lo); - else - hi = new Node(ph, pk, pv, hi); - } - setTabAt(nextTab, i, lo); - setTabAt(nextTab, i + bit, hi); - } - - /** - * Splits a tree bin into lo and hi parts; installs in given table. - */ - private static void splitTreeBin(Node[] nextTab, int i, TreeBin t) { - int bit = nextTab.length >>> 1; - TreeBin lt = new TreeBin(); - TreeBin ht = new TreeBin(); - int lc = 0, hc = 0; - for (Node e = t.first; e != null; e = e.next) { - int h = e.hash & HASH_BITS; - Object k = e.key, v = e.val; - if ((h & bit) == 0) { - ++lc; - lt.putTreeNode(h, k, v); - } - else { - ++hc; - ht.putTreeNode(h, k, v); - } - } - Node ln, hn; // throw away trees if too small - if (lc <= (TREE_THRESHOLD >>> 1)) { - ln = null; - for (Node p = lt.first; p != null; p = p.next) - ln = new Node(p.hash, p.key, p.val, ln); - } - else - ln = new Node(MOVED, lt, null, null); - setTabAt(nextTab, i, ln); - if (hc <= (TREE_THRESHOLD >>> 1)) { - hn = null; - for (Node p = ht.first; p != null; p = p.next) - hn = new Node(p.hash, p.key, p.val, hn); - } - else - hn = new Node(MOVED, ht, null, null); - setTabAt(nextTab, i + bit, hn); - } - - /** - * Implementation for clear. Steps through each bin, removing all - * nodes. - */ - private final void internalClear() { - long delta = 0L; // negative number of deletions - int i = 0; - Node[] tab = table; - while (tab != null && i < tab.length) { - int fh; Object fk; - Node f = tabAt(tab, i); - if (f == null) - ++i; - else if ((fh = f.hash) == MOVED) { - if ((fk = f.key) instanceof TreeBin) { - TreeBin t = (TreeBin)fk; - t.acquire(0); - try { - if (tabAt(tab, i) == f) { - for (Node p = t.first; p != null; p = p.next) { - if (p.val != null) { // (currently always true) - p.val = null; - --delta; - } - } - t.first = null; - t.root = null; - ++i; - } - } finally { - t.release(0); - } - } - else - tab = (Node[])fk; - } - else if ((fh & LOCKED) != 0) { - counter.add(delta); // opportunistically update count - delta = 0L; - f.tryAwaitLock(tab, i); - } - else if (f.casHash(fh, fh | LOCKED)) { - try { - if (tabAt(tab, i) == f) { - for (Node e = f; e != null; e = e.next) { - if (e.val != null) { // (currently always true) - e.val = null; - --delta; - } - } - setTabAt(tab, i, null); - ++i; - } - } finally { - if (!f.casHash(fh | LOCKED, fh)) { - f.hash = fh; - synchronized (f) { f.notifyAll(); }; - } - } - } - } - if (delta != 0) - counter.add(delta); - } - - /* ----------------Table Traversal -------------- */ - - /** - * Encapsulates traversal for methods such as containsValue; also - * serves as a base class for other iterators and bulk tasks. - * - * At each step, the iterator snapshots the key ("nextKey") and - * value ("nextVal") of a valid node (i.e., one that, at point of - * snapshot, has a non-null user value). Because val fields can - * change (including to null, indicating deletion), field nextVal - * might not be accurate at point of use, but still maintains the - * weak consistency property of holding a value that was once - * valid. To support iterator.remove, the nextKey field is not - * updated (nulled out) when the iterator cannot advance. - * - * Internal traversals directly access these fields, as in: - * {@code while (it.advance() != null) { process(it.nextKey); }} - * - * Exported iterators must track whether the iterator has advanced - * (in hasNext vs next) (by setting/checking/nulling field - * nextVal), and then extract key, value, or key-value pairs as - * return values of next(). - * - * The iterator visits once each still-valid node that was - * reachable upon iterator construction. It might miss some that - * were added to a bin after the bin was visited, which is OK wrt - * consistency guarantees. Maintaining this property in the face - * of possible ongoing resizes requires a fair amount of - * bookkeeping state that is difficult to optimize away amidst - * volatile accesses. Even so, traversal maintains reasonable - * throughput. - * - * Normally, iteration proceeds bin-by-bin traversing lists. - * However, if the table has been resized, then all future steps - * must traverse both the bin at the current index as well as at - * (index + baseSize); and so on for further resizings. To - * paranoically cope with potential sharing by users of iterators - * across threads, iteration terminates if a bounds checks fails - * for a table read. - * - * This class extends ForkJoinTask to streamline parallel - * iteration in bulk operations (see BulkTask). This adds only an - * int of space overhead, which is close enough to negligible in - * cases where it is not needed to not worry about it. Because - * ForkJoinTask is Serializable, but iterators need not be, we - * need to add warning suppressions. - */ - @SuppressWarnings("serial") static class Traverser { - final ConcurrentHashMapV8 map; - Node next; // the next entry to use - K nextKey; // cached key field of next - V nextVal; // cached val field of next - Node[] tab; // current table; updated if resized - int index; // index of bin to use next - int baseIndex; // current index of initial table - int baseLimit; // index bound for initial table - int baseSize; // initial table size - - /** Creates iterator for all entries in the table. */ - Traverser(ConcurrentHashMapV8 map) { - this.map = map; - } - - /** Creates iterator for split() methods */ - Traverser(Traverser it) { - ConcurrentHashMapV8 m; Node[] t; - if ((m = this.map = it.map) == null) - t = null; - else if ((t = it.tab) == null && // force parent tab initialization - (t = it.tab = m.table) != null) - it.baseLimit = it.baseSize = t.length; - this.tab = t; - this.baseSize = it.baseSize; - it.baseLimit = this.index = this.baseIndex = - ((this.baseLimit = it.baseLimit) + it.baseIndex + 1) >>> 1; - } - - /** - * Advances next; returns nextVal or null if terminated. - * See above for explanation. - */ - final V advance() { - Node e = next; - V ev = null; - outer: do { - if (e != null) // advance past used/skipped node - e = e.next; - while (e == null) { // get to next non-null bin - ConcurrentHashMapV8 m; - Node[] t; int b, i, n; Object ek; // checks must use locals - if ((t = tab) != null) - n = t.length; - else if ((m = map) != null && (t = tab = m.table) != null) - n = baseLimit = baseSize = t.length; - else - break outer; - if ((b = baseIndex) >= baseLimit || - (i = index) < 0 || i >= n) - break outer; - if ((e = tabAt(t, i)) != null && e.hash == MOVED) { - if ((ek = e.key) instanceof TreeBin) - e = ((TreeBin)ek).first; - else { - tab = (Node[])ek; - continue; // restarts due to null val - } - } // visit upper slots if present - index = (i += baseSize) < n ? i : (baseIndex = b + 1); - } - nextKey = (K) e.key; - } while ((ev = (V) e.val) == null); // skip deleted or special nodes - next = e; - return nextVal = ev; - } - - public final void remove() { - Object k = nextKey; - if (k == null && (advance() == null || (k = nextKey) == null)) - throw new IllegalStateException(); - map.internalReplace(k, null, null); - } - - public final boolean hasNext() { - return nextVal != null || advance() != null; - } - - public final boolean hasMoreElements() { return hasNext(); } - public final void setRawResult(Object x) { } - public R getRawResult() { return null; } - public boolean exec() { return true; } - } - - /* ---------------- Public operations -------------- */ - - /** - * Creates a new, empty map with the default initial table size (16). - */ - public ConcurrentHashMapV8() { - this.counter = new LongAdder(); - } - - /** - * Creates a new, empty map with an initial table size - * accommodating the specified number of elements without the need - * to dynamically resize. - * - * @param initialCapacity The implementation performs internal - * sizing to accommodate this many elements. - * @throws IllegalArgumentException if the initial capacity of - * elements is negative - */ - public ConcurrentHashMapV8(int initialCapacity) { - if (initialCapacity < 0) - throw new IllegalArgumentException(); - int cap = ((initialCapacity >= (MAXIMUM_CAPACITY >>> 1)) ? - MAXIMUM_CAPACITY : - tableSizeFor(initialCapacity + (initialCapacity >>> 1) + 1)); - this.counter = new LongAdder(); - this.sizeCtl = cap; - } - - /** - * Creates a new map with the same mappings as the given map. - * - * @param m the map - */ - public ConcurrentHashMapV8(Map m) { - this.counter = new LongAdder(); - this.sizeCtl = DEFAULT_CAPACITY; - internalPutAll(m); - } - - /** - * Creates a new, empty map with an initial table size based on - * the given number of elements ({@code initialCapacity}) and - * initial table density ({@code loadFactor}). - * - * @param initialCapacity the initial capacity. The implementation - * performs internal sizing to accommodate this many elements, - * given the specified load factor. - * @param loadFactor the load factor (table density) for - * establishing the initial table size - * @throws IllegalArgumentException if the initial capacity of - * elements is negative or the load factor is nonpositive - * - * @since 1.6 - */ - public ConcurrentHashMapV8(int initialCapacity, float loadFactor) { - this(initialCapacity, loadFactor, 1); - } - - /** - * Creates a new, empty map with an initial table size based on - * the given number of elements ({@code initialCapacity}), table - * density ({@code loadFactor}), and number of concurrently - * updating threads ({@code concurrencyLevel}). - * - * @param initialCapacity the initial capacity. The implementation - * performs internal sizing to accommodate this many elements, - * given the specified load factor. - * @param loadFactor the load factor (table density) for - * establishing the initial table size - * @param concurrencyLevel the estimated number of concurrently - * updating threads. The implementation may use this value as - * a sizing hint. - * @throws IllegalArgumentException if the initial capacity is - * negative or the load factor or concurrencyLevel are - * nonpositive - */ - public ConcurrentHashMapV8(int initialCapacity, - float loadFactor, int concurrencyLevel) { - if (!(loadFactor > 0.0f) || initialCapacity < 0 || concurrencyLevel <= 0) - throw new IllegalArgumentException(); - if (initialCapacity < concurrencyLevel) // Use at least as many bins - initialCapacity = concurrencyLevel; // as estimated threads - long size = (long)(1.0 + (long)initialCapacity / loadFactor); - int cap = (size >= (long)MAXIMUM_CAPACITY) ? - MAXIMUM_CAPACITY : tableSizeFor((int)size); - this.counter = new LongAdder(); - this.sizeCtl = cap; - } - - /** - * Creates a new {@link Set} backed by a ConcurrentHashMapV8 - * from the given type to {@code Boolean.TRUE}. - * - * @return the new set - */ - public static KeySetView newKeySet() { - return new KeySetView(new ConcurrentHashMapV8(), - Boolean.TRUE); - } - - /** - * Creates a new {@link Set} backed by a ConcurrentHashMapV8 - * from the given type to {@code Boolean.TRUE}. - * - * @param initialCapacity The implementation performs internal - * sizing to accommodate this many elements. - * @throws IllegalArgumentException if the initial capacity of - * elements is negative - * @return the new set - */ - public static KeySetView newKeySet(int initialCapacity) { - return new KeySetView(new ConcurrentHashMapV8(initialCapacity), - Boolean.TRUE); - } - - /** - * {@inheritDoc} - */ - public boolean isEmpty() { - return counter.sum() <= 0L; // ignore transient negative values - } - - /** - * {@inheritDoc} - */ - public int size() { - long n = counter.sum(); - return ((n < 0L) ? 0 : - (n > (long)Integer.MAX_VALUE) ? Integer.MAX_VALUE : - (int)n); - } - - /** - * Returns the number of mappings. This method should be used - * instead of {@link #size} because a ConcurrentHashMapV8 may - * contain more mappings than can be represented as an int. The - * value returned is a snapshot; the actual count may differ if - * there are ongoing concurrent insertions or removals. - * - * @return the number of mappings - */ - public long mappingCount() { - long n = counter.sum(); - return (n < 0L) ? 0L : n; // ignore transient negative values - } - - /** - * Returns the value to which the specified key is mapped, - * or {@code null} if this map contains no mapping for the key. - * - *

    More formally, if this map contains a mapping from a key - * {@code k} to a value {@code v} such that {@code key.equals(k)}, - * then this method returns {@code v}; otherwise it returns - * {@code null}. (There can be at most one such mapping.) - * - * @throws NullPointerException if the specified key is null - */ - @SuppressWarnings("unchecked") public V get(Object key) { - if (key == null) - throw new NullPointerException(); - return (V)internalGet(key); - } - - /** - * Returns the value to which the specified key is mapped, - * or the given defaultValue if this map contains no mapping for the key. - * - * @param key the key - * @param defaultValue the value to return if this map contains - * no mapping for the given key - * @return the mapping for the key, if present; else the defaultValue - * @throws NullPointerException if the specified key is null - */ - @SuppressWarnings("unchecked") public V getValueOrDefault(Object key, V defaultValue) { - if (key == null) - throw new NullPointerException(); - V v = (V) internalGet(key); - return v == null ? defaultValue : v; - } - - /** - * Tests if the specified object is a key in this table. - * - * @param key possible key - * @return {@code true} if and only if the specified object - * is a key in this table, as determined by the - * {@code equals} method; {@code false} otherwise - * @throws NullPointerException if the specified key is null - */ - public boolean containsKey(Object key) { - if (key == null) - throw new NullPointerException(); - return internalGet(key) != null; - } - - /** - * Returns {@code true} if this map maps one or more keys to the - * specified value. Note: This method may require a full traversal - * of the map, and is much slower than method {@code containsKey}. - * - * @param value value whose presence in this map is to be tested - * @return {@code true} if this map maps one or more keys to the - * specified value - * @throws NullPointerException if the specified value is null - */ - public boolean containsValue(Object value) { - if (value == null) - throw new NullPointerException(); - Object v; - Traverser it = new Traverser(this); - while ((v = it.advance()) != null) { - if (v == value || value.equals(v)) - return true; - } - return false; - } - - public K findKey(Object value) { - if (value == null) - throw new NullPointerException(); - Object v; - Traverser it = new Traverser(this); - while ((v = it.advance()) != null) { - if (v == value || value.equals(v)) - return it.nextKey; - } - return null; - } - - /** - * Legacy method testing if some key maps into the specified value - * in this table. This method is identical in functionality to - * {@link #containsValue}, and exists solely to ensure - * full compatibility with class {@link java.util.Hashtable}, - * which supported this method prior to introduction of the - * Java Collections framework. - * - * @param value a value to search for - * @return {@code true} if and only if some key maps to the - * {@code value} argument in this table as - * determined by the {@code equals} method; - * {@code false} otherwise - * @throws NullPointerException if the specified value is null - */ - public boolean contains(Object value) { - return containsValue(value); - } - - /** - * Maps the specified key to the specified value in this table. - * Neither the key nor the value can be null. - * - *

    The value can be retrieved by calling the {@code get} method - * with a key that is equal to the original key. - * - * @param key key with which the specified value is to be associated - * @param value value to be associated with the specified key - * @return the previous value associated with {@code key}, or - * {@code null} if there was no mapping for {@code key} - * @throws NullPointerException if the specified key or value is null - */ - @SuppressWarnings("unchecked") public V put(K key, V value) { - if (key == null || value == null) - throw new NullPointerException(); - return (V)internalPut(key, value); - } - - /** - * {@inheritDoc} - * - * @return the previous value associated with the specified key, - * or {@code null} if there was no mapping for the key - * @throws NullPointerException if the specified key or value is null - */ - @SuppressWarnings("unchecked") public V putIfAbsent(K key, V value) { - if (key == null || value == null) - throw new NullPointerException(); - return (V)internalPutIfAbsent(key, value); - } - - /** - * Copies all of the mappings from the specified map to this one. - * These mappings replace any mappings that this map had for any of the - * keys currently in the specified map. - * - * @param m mappings to be stored in this map - */ - public void putAll(Map m) { - internalPutAll(m); - } - - /** - * If the specified key is not already associated with a value, - * computes its value using the given mappingFunction and enters - * it into the map unless null. This is equivalent to - *

     {@code
    -     * if (map.containsKey(key))
    -     *   return map.get(key);
    -     * value = mappingFunction.apply(key);
    -     * if (value != null)
    -     *   map.put(key, value);
    -     * return value;}
    - * - * except that the action is performed atomically. If the - * function returns {@code null} no mapping is recorded. If the - * function itself throws an (unchecked) exception, the exception - * is rethrown to its caller, and no mapping is recorded. Some - * attempted update operations on this map by other threads may be - * blocked while computation is in progress, so the computation - * should be short and simple, and must not attempt to update any - * other mappings of this Map. The most appropriate usage is to - * construct a new object serving as an initial mapped value, or - * memoized result, as in: - * - *
     {@code
    -     * map.computeIfAbsent(key, new Fun() {
    -     *   public V map(K k) { return new Value(f(k)); }});}
    - * - * @param key key with which the specified value is to be associated - * @param mappingFunction the function to compute a value - * @return the current (existing or computed) value associated with - * the specified key, or null if the computed value is null - * @throws NullPointerException if the specified key or mappingFunction - * is null - * @throws IllegalStateException if the computation detectably - * attempts a recursive update to this map that would - * otherwise never complete - * @throws RuntimeException or Error if the mappingFunction does so, - * in which case the mapping is left unestablished - */ - @SuppressWarnings("unchecked") public V computeIfAbsent - (K key, Fun mappingFunction) { - if (key == null || mappingFunction == null) - throw new NullPointerException(); - return (V)internalComputeIfAbsent(key, mappingFunction); - } - - /** - * If the given key is present, computes a new mapping value given a key and - * its current mapped value. This is equivalent to - *
     {@code
    -     *   if (map.containsKey(key)) {
    -     *     value = remappingFunction.apply(key, map.get(key));
    -     *     if (value != null)
    -     *       map.put(key, value);
    -     *     else
    -     *       map.remove(key);
    -     *   }
    -     * }
    - * - * except that the action is performed atomically. If the - * function returns {@code null}, the mapping is removed. If the - * function itself throws an (unchecked) exception, the exception - * is rethrown to its caller, and the current mapping is left - * unchanged. Some attempted update operations on this map by - * other threads may be blocked while computation is in progress, - * so the computation should be short and simple, and must not - * attempt to update any other mappings of this Map. For example, - * to either create or append new messages to a value mapping: - * - * @param key key with which the specified value is to be associated - * @param remappingFunction the function to compute a value - * @return the new value associated with the specified key, or null if none - * @throws NullPointerException if the specified key or remappingFunction - * is null - * @throws IllegalStateException if the computation detectably - * attempts a recursive update to this map that would - * otherwise never complete - * @throws RuntimeException or Error if the remappingFunction does so, - * in which case the mapping is unchanged - */ - @SuppressWarnings("unchecked") public V computeIfPresent - (K key, BiFun remappingFunction) { - if (key == null || remappingFunction == null) - throw new NullPointerException(); - return (V)internalCompute(key, true, remappingFunction); - } - - /** - * Computes a new mapping value given a key and - * its current mapped value (or {@code null} if there is no current - * mapping). This is equivalent to - *
     {@code
    -     *   value = remappingFunction.apply(key, map.get(key));
    -     *   if (value != null)
    -     *     map.put(key, value);
    -     *   else
    -     *     map.remove(key);
    -     * }
    - * - * except that the action is performed atomically. If the - * function returns {@code null}, the mapping is removed. If the - * function itself throws an (unchecked) exception, the exception - * is rethrown to its caller, and the current mapping is left - * unchanged. Some attempted update operations on this map by - * other threads may be blocked while computation is in progress, - * so the computation should be short and simple, and must not - * attempt to update any other mappings of this Map. For example, - * to either create or append new messages to a value mapping: - * - *
     {@code
    -     * Map map = ...;
    -     * final String msg = ...;
    -     * map.compute(key, new BiFun() {
    -     *   public String apply(Key k, String v) {
    -     *    return (v == null) ? msg : v + msg;});}}
    - * - * @param key key with which the specified value is to be associated - * @param remappingFunction the function to compute a value - * @return the new value associated with the specified key, or null if none - * @throws NullPointerException if the specified key or remappingFunction - * is null - * @throws IllegalStateException if the computation detectably - * attempts a recursive update to this map that would - * otherwise never complete - * @throws RuntimeException or Error if the remappingFunction does so, - * in which case the mapping is unchanged - */ - @SuppressWarnings("unchecked") public V compute - (K key, BiFun remappingFunction) { - if (key == null || remappingFunction == null) - throw new NullPointerException(); - return (V)internalCompute(key, false, remappingFunction); - } - - /** - * If the specified key is not already associated - * with a value, associate it with the given value. - * Otherwise, replace the value with the results of - * the given remapping function. This is equivalent to: - *
     {@code
    -     *   if (!map.containsKey(key))
    -     *     map.put(value);
    -     *   else {
    -     *     newValue = remappingFunction.apply(map.get(key), value);
    -     *     if (value != null)
    -     *       map.put(key, value);
    -     *     else
    -     *       map.remove(key);
    -     *   }
    -     * }
    - * except that the action is performed atomically. If the - * function returns {@code null}, the mapping is removed. If the - * function itself throws an (unchecked) exception, the exception - * is rethrown to its caller, and the current mapping is left - * unchanged. Some attempted update operations on this map by - * other threads may be blocked while computation is in progress, - * so the computation should be short and simple, and must not - * attempt to update any other mappings of this Map. - */ - @SuppressWarnings("unchecked") public V merge - (K key, V value, BiFun remappingFunction) { - if (key == null || value == null || remappingFunction == null) - throw new NullPointerException(); - return (V)internalMerge(key, value, remappingFunction); - } - - /** - * Removes the key (and its corresponding value) from this map. - * This method does nothing if the key is not in the map. - * - * @param key the key that needs to be removed - * @return the previous value associated with {@code key}, or - * {@code null} if there was no mapping for {@code key} - * @throws NullPointerException if the specified key is null - */ - @SuppressWarnings("unchecked") public V remove(Object key) { - if (key == null) - throw new NullPointerException(); - return (V)internalReplace(key, null, null); - } - - /** - * {@inheritDoc} - * - * @throws NullPointerException if the specified key is null - */ - public boolean remove(Object key, Object value) { - if (key == null) - throw new NullPointerException(); - if (value == null) - return false; - return internalReplace(key, null, value) != null; - } - - /** - * {@inheritDoc} - * - * @throws NullPointerException if any of the arguments are null - */ - public boolean replace(K key, V oldValue, V newValue) { - if (key == null || oldValue == null || newValue == null) - throw new NullPointerException(); - return internalReplace(key, newValue, oldValue) != null; - } - - /** - * {@inheritDoc} - * - * @return the previous value associated with the specified key, - * or {@code null} if there was no mapping for the key - * @throws NullPointerException if the specified key or value is null - */ - @SuppressWarnings("unchecked") public V replace(K key, V value) { - if (key == null || value == null) - throw new NullPointerException(); - return (V)internalReplace(key, value, null); - } - - /** - * Removes all of the mappings from this map. - */ - public void clear() { - internalClear(); - } - - /** - * Returns a {@link Set} view of the keys contained in this map. - * The set is backed by the map, so changes to the map are - * reflected in the set, and vice-versa. - * - * @return the set view - */ - public KeySetView keySet() { - KeySetView ks = keySet; - return (ks != null) ? ks : (keySet = new KeySetView(this, null)); - } - - /** - * Returns a {@link Set} view of the keys in this map, using the - * given common mapped value for any additions (i.e., {@link - * Collection#add} and {@link Collection#addAll}). This is of - * course only appropriate if it is acceptable to use the same - * value for all additions from this view. - * - * @param mappedValue the mapped value to use for any - * additions. - * @return the set view - * @throws NullPointerException if the mappedValue is null - */ - public KeySetView keySet(V mappedValue) { - if (mappedValue == null) - throw new NullPointerException(); - return new KeySetView(this, mappedValue); - } - - /** - * Returns a {@link Collection} view of the values contained in this map. - * The collection is backed by the map, so changes to the map are - * reflected in the collection, and vice-versa. - */ - public ValuesView values() { - ValuesView vs = values; - return (vs != null) ? vs : (values = new ValuesView(this)); - } - - /** - * Returns a {@link Set} view of the mappings contained in this map. - * The set is backed by the map, so changes to the map are - * reflected in the set, and vice-versa. The set supports element - * removal, which removes the corresponding mapping from the map, - * via the {@code Iterator.remove}, {@code Set.remove}, - * {@code removeAll}, {@code retainAll}, and {@code clear} - * operations. It does not support the {@code add} or - * {@code addAll} operations. - * - *

    The view's {@code iterator} is a "weakly consistent" iterator - * that will never throw {@link ConcurrentModificationException}, - * and guarantees to traverse elements as they existed upon - * construction of the iterator, and may (but is not guaranteed to) - * reflect any modifications subsequent to construction. - */ - public Set> entrySet() { - EntrySetView es = entrySet; - return (es != null) ? es : (entrySet = new EntrySetView(this)); - } - - /** - * Returns an enumeration of the keys in this table. - * - * @return an enumeration of the keys in this table - * @see #keySet() - */ - public Enumeration keys() { - return new KeyIterator(this); - } - - /** - * Returns an enumeration of the values in this table. - * - * @return an enumeration of the values in this table - * @see #values() - */ - public Enumeration elements() { - return new ValueIterator(this); - } - - /** - * Returns a partitionable iterator of the keys in this map. - * - * @return a partitionable iterator of the keys in this map - */ - public Spliterator keySpliterator() { - return new KeyIterator(this); - } - - /** - * Returns a partitionable iterator of the values in this map. - * - * @return a partitionable iterator of the values in this map - */ - public Spliterator valueSpliterator() { - return new ValueIterator(this); - } - - /** - * Returns a partitionable iterator of the entries in this map. - * - * @return a partitionable iterator of the entries in this map - */ - public Spliterator> entrySpliterator() { - return new EntryIterator(this); - } - - /** - * Returns the hash code value for this {@link Map}, i.e., - * the sum of, for each key-value pair in the map, - * {@code key.hashCode() ^ value.hashCode()}. - * - * @return the hash code value for this map - */ - public int hashCode() { - int h = 0; - Traverser it = new Traverser(this); - Object v; - while ((v = it.advance()) != null) { - h += it.nextKey.hashCode() ^ v.hashCode(); - } - return h; - } - - /** - * Returns a string representation of this map. The string - * representation consists of a list of key-value mappings (in no - * particular order) enclosed in braces ("{@code {}}"). Adjacent - * mappings are separated by the characters {@code ", "} (comma - * and space). Each key-value mapping is rendered as the key - * followed by an equals sign ("{@code =}") followed by the - * associated value. - * - * @return a string representation of this map - */ - public String toString() { - Traverser it = new Traverser(this); - StringBuilder sb = new StringBuilder(); - sb.append('{'); - Object v; - if ((v = it.advance()) != null) { - for (;;) { - Object k = it.nextKey; - sb.append(k == this ? "(this Map)" : k); - sb.append('='); - sb.append(v == this ? "(this Map)" : v); - if ((v = it.advance()) == null) - break; - sb.append(',').append(' '); - } - } - return sb.append('}').toString(); - } - - /** - * Compares the specified object with this map for equality. - * Returns {@code true} if the given object is a map with the same - * mappings as this map. This operation may return misleading - * results if either map is concurrently modified during execution - * of this method. - * - * @param o object to be compared for equality with this map - * @return {@code true} if the specified object is equal to this map - */ - public boolean equals(Object o) { - if (o != this) { - if (!(o instanceof Map)) - return false; - Map m = (Map) o; - Traverser it = new Traverser(this); - Object val; - while ((val = it.advance()) != null) { - Object v = m.get(it.nextKey); - if (v == null || (v != val && !v.equals(val))) - return false; - } - for (Map.Entry e : m.entrySet()) { - Object mk, mv, v; - if ((mk = e.getKey()) == null || - (mv = e.getValue()) == null || - (v = internalGet(mk)) == null || - (mv != v && !mv.equals(v))) - return false; - } - } - return true; - } - - /* ----------------Iterators -------------- */ - - @SuppressWarnings("serial") static final class KeyIterator extends Traverser - implements Spliterator, Enumeration { - KeyIterator(ConcurrentHashMapV8 map) { super(map); } - KeyIterator(Traverser it) { - super(it); - } - public KeyIterator split() { - if (nextKey != null) - throw new IllegalStateException(); - return new KeyIterator(this); - } - @SuppressWarnings("unchecked") public final K next() { - if (nextVal == null && advance() == null) - throw new NoSuchElementException(); - Object k = nextKey; - nextVal = null; - return (K) k; - } - - public final K nextElement() { return next(); } - } - - @SuppressWarnings("serial") static final class ValueIterator extends Traverser - implements Spliterator, Enumeration { - ValueIterator(ConcurrentHashMapV8 map) { super(map); } - ValueIterator(Traverser it) { - super(it); - } - public ValueIterator split() { - if (nextKey != null) - throw new IllegalStateException(); - return new ValueIterator(this); - } - - @SuppressWarnings("unchecked") public final V next() { - Object v; - if ((v = nextVal) == null && (v = advance()) == null) - throw new NoSuchElementException(); - nextVal = null; - return (V) v; - } - - public final V nextElement() { return next(); } - } - - @SuppressWarnings("serial") static final class EntryIterator extends Traverser - implements Spliterator> { - EntryIterator(ConcurrentHashMapV8 map) { super(map); } - EntryIterator(Traverser it) { - super(it); - } - public EntryIterator split() { - if (nextKey != null) - throw new IllegalStateException(); - return new EntryIterator(this); - } - - @SuppressWarnings("unchecked") public final Map.Entry next() { - Object v; - if ((v = nextVal) == null && (v = advance()) == null) - throw new NoSuchElementException(); - Object k = nextKey; - nextVal = null; - return new MapEntry((K)k, (V)v, map); - } - } - - /** - * Exported Entry for iterators - */ - static final class MapEntry implements Map.Entry { - final K key; // non-null - V val; // non-null - final ConcurrentHashMapV8 map; - MapEntry(K key, V val, ConcurrentHashMapV8 map) { - this.key = key; - this.val = val; - this.map = map; - } - public final K getKey() { return key; } - public final V getValue() { return val; } - public final int hashCode() { return key.hashCode() ^ val.hashCode(); } - public final String toString(){ return key + "=" + val; } - - public final boolean equals(Object o) { - Object k, v; Map.Entry e; - return ((o instanceof Map.Entry) && - (k = (e = (Map.Entry)o).getKey()) != null && - (v = e.getValue()) != null && - (k == key || k.equals(key)) && - (v == val || v.equals(val))); - } - - /** - * Sets our entry's value and writes through to the map. The - * value to return is somewhat arbitrary here. Since we do not - * necessarily track asynchronous changes, the most recent - * "previous" value could be different from what we return (or - * could even have been removed in which case the put will - * re-establish). We do not and cannot guarantee more. - */ - public final V setValue(V value) { - if (value == null) throw new NullPointerException(); - V v = val; - val = value; - map.put(key, value); - return v; - } - } - - /* ---------------- Serialization Support -------------- */ - - /** - * Stripped-down version of helper class used in previous version, - * declared for the sake of serialization compatibility - */ - static class Segment implements Serializable { - private static final long serialVersionUID = 2249069246763182397L; - final float loadFactor; - Segment(float lf) { this.loadFactor = lf; } - } - - /** - * Saves the state of the {@code ConcurrentHashMapV8} instance to a - * stream (i.e., serializes it). - * @param s the stream - * @serialData - * the key (Object) and value (Object) - * for each key-value mapping, followed by a null pair. - * The key-value mappings are emitted in no particular order. - */ - @SuppressWarnings("unchecked") private void writeObject(java.io.ObjectOutputStream s) - throws java.io.IOException { - if (segments == null) { // for serialization compatibility - segments = (Segment[]) - new Segment[DEFAULT_CONCURRENCY_LEVEL]; - for (int i = 0; i < segments.length; ++i) - segments[i] = new Segment(LOAD_FACTOR); - } - s.defaultWriteObject(); - Traverser it = new Traverser(this); - Object v; - while ((v = it.advance()) != null) { - s.writeObject(it.nextKey); - s.writeObject(v); - } - s.writeObject(null); - s.writeObject(null); - segments = null; // throw away - } - - /** - * Reconstitutes the instance from a stream (that is, deserializes it). - * @param s the stream - */ - @SuppressWarnings("unchecked") private void readObject(java.io.ObjectInputStream s) - throws java.io.IOException, ClassNotFoundException { - s.defaultReadObject(); - this.segments = null; // unneeded - // initialize transient final field - UNSAFE.putObjectVolatile(this, counterOffset, new LongAdder()); - - // Create all nodes, then place in table once size is known - long size = 0L; - Node p = null; - for (;;) { - K k = (K) s.readObject(); - V v = (V) s.readObject(); - if (k != null && v != null) { - int h = spread(k.hashCode()); - p = new Node(h, k, v, p); - ++size; - } - else - break; - } - if (p != null) { - boolean init = false; - int n; - if (size >= (long)(MAXIMUM_CAPACITY >>> 1)) - n = MAXIMUM_CAPACITY; - else { - int sz = (int)size; - n = tableSizeFor(sz + (sz >>> 1) + 1); - } - int sc = sizeCtl; - boolean collide = false; - if (n > sc && - UNSAFE.compareAndSwapInt(this, sizeCtlOffset, sc, -1)) { - try { - if (table == null) { - init = true; - Node[] tab = new Node[n]; - int mask = n - 1; - while (p != null) { - int j = p.hash & mask; - Node next = p.next; - Node q = p.next = tabAt(tab, j); - setTabAt(tab, j, p); - if (!collide && q != null && q.hash == p.hash) - collide = true; - p = next; - } - table = tab; - counter.add(size); - sc = n - (n >>> 2); - } - } finally { - sizeCtl = sc; - } - if (collide) { // rescan and convert to TreeBins - Node[] tab = table; - for (int i = 0; i < tab.length; ++i) { - int c = 0; - for (Node e = tabAt(tab, i); e != null; e = e.next) { - if (++c > TREE_THRESHOLD && - (e.key instanceof Comparable)) { - replaceWithTreeBin(tab, i, e.key); - break; - } - } - } - } - } - if (!init) { // Can only happen if unsafely published. - while (p != null) { - internalPut(p.key, p.val); - p = p.next; - } - } - } - } - - - // ------------------------------------------------------- - - // Sams - /** Interface describing a void action of one argument */ - public interface Action { void apply(A a); } - /** Interface describing a void action of two arguments */ - public interface BiAction { void apply(A a, B b); } - /** Interface describing a function of one argument */ - public interface Generator { T apply(); } - /** Interface describing a function mapping its argument to a double */ - public interface ObjectToDouble { double apply(A a); } - /** Interface describing a function mapping its argument to a long */ - public interface ObjectToLong { long apply(A a); } - /** Interface describing a function mapping its argument to an int */ - public interface ObjectToInt {int apply(A a); } - /** Interface describing a function mapping two arguments to a double */ - public interface ObjectByObjectToDouble { double apply(A a, B b); } - /** Interface describing a function mapping two arguments to a long */ - public interface ObjectByObjectToLong { long apply(A a, B b); } - /** Interface describing a function mapping two arguments to an int */ - public interface ObjectByObjectToInt {int apply(A a, B b); } - /** Interface describing a function mapping a double to a double */ - public interface DoubleToDouble { double apply(double a); } - /** Interface describing a function mapping a long to a long */ - public interface LongToLong { long apply(long a); } - /** Interface describing a function mapping an int to an int */ - public interface IntToInt { int apply(int a); } - /** Interface describing a function mapping two doubles to a double */ - public interface DoubleByDoubleToDouble { double apply(double a, double b); } - /** Interface describing a function mapping two longs to a long */ - public interface LongByLongToLong { long apply(long a, long b); } - /** Interface describing a function mapping two ints to an int */ - public interface IntByIntToInt { int apply(int a, int b); } - - - /* ----------------Views -------------- */ - - /** - * Base class for views. - */ - static abstract class CHMView { - final ConcurrentHashMapV8 map; - CHMView(ConcurrentHashMapV8 map) { this.map = map; } - - /** - * Returns the map backing this view. - * - * @return the map backing this view - */ - public ConcurrentHashMapV8 getMap() { return map; } - - public final int size() { return map.size(); } - public final boolean isEmpty() { return map.isEmpty(); } - public final void clear() { map.clear(); } - - // implementations below rely on concrete classes supplying these - abstract public Iterator iterator(); - abstract public boolean contains(Object o); - abstract public boolean remove(Object o); - - private static final String oomeMsg = "Required array size too large"; - - public final Object[] toArray() { - long sz = map.mappingCount(); - if (sz > (long)(MAX_ARRAY_SIZE)) - throw new OutOfMemoryError(oomeMsg); - int n = (int)sz; - Object[] r = new Object[n]; - int i = 0; - Iterator it = iterator(); - while (it.hasNext()) { - if (i == n) { - if (n >= MAX_ARRAY_SIZE) - throw new OutOfMemoryError(oomeMsg); - if (n >= MAX_ARRAY_SIZE - (MAX_ARRAY_SIZE >>> 1) - 1) - n = MAX_ARRAY_SIZE; - else - n += (n >>> 1) + 1; - r = Arrays.copyOf(r, n); - } - r[i++] = it.next(); - } - return (i == n) ? r : Arrays.copyOf(r, i); - } - - @SuppressWarnings("unchecked") public final T[] toArray(T[] a) { - long sz = map.mappingCount(); - if (sz > (long)(MAX_ARRAY_SIZE)) - throw new OutOfMemoryError(oomeMsg); - int m = (int)sz; - T[] r = (a.length >= m) ? a : - (T[])java.lang.reflect.Array - .newInstance(a.getClass().getComponentType(), m); - int n = r.length; - int i = 0; - Iterator it = iterator(); - while (it.hasNext()) { - if (i == n) { - if (n >= MAX_ARRAY_SIZE) - throw new OutOfMemoryError(oomeMsg); - if (n >= MAX_ARRAY_SIZE - (MAX_ARRAY_SIZE >>> 1) - 1) - n = MAX_ARRAY_SIZE; - else - n += (n >>> 1) + 1; - r = Arrays.copyOf(r, n); - } - r[i++] = (T)it.next(); - } - if (a == r && i < n) { - r[i] = null; // null-terminate - return r; - } - return (i == n) ? r : Arrays.copyOf(r, i); - } - - public final int hashCode() { - int h = 0; - for (Iterator it = iterator(); it.hasNext();) - h += it.next().hashCode(); - return h; - } - - public final String toString() { - StringBuilder sb = new StringBuilder(); - sb.append('['); - Iterator it = iterator(); - if (it.hasNext()) { - for (;;) { - Object e = it.next(); - sb.append(e == this ? "(this Collection)" : e); - if (!it.hasNext()) - break; - sb.append(',').append(' '); - } - } - return sb.append(']').toString(); - } - - public final boolean containsAll(Collection c) { - if (c != this) { - for (Iterator it = c.iterator(); it.hasNext();) { - Object e = it.next(); - if (e == null || !contains(e)) - return false; - } - } - return true; - } - - public final boolean removeAll(Collection c) { - boolean modified = false; - for (Iterator it = iterator(); it.hasNext();) { - if (c.contains(it.next())) { - it.remove(); - modified = true; - } - } - return modified; - } - - public final boolean retainAll(Collection c) { - boolean modified = false; - for (Iterator it = iterator(); it.hasNext();) { - if (!c.contains(it.next())) { - it.remove(); - modified = true; - } - } - return modified; - } - - } - - /** - * A view of a ConcurrentHashMapV8 as a {@link Set} of keys, in - * which additions may optionally be enabled by mapping to a - * common value. This class cannot be directly instantiated. See - * {@link #keySet}, {@link #keySet(Object)}, {@link #newKeySet()}, - * {@link #newKeySet(int)}. - */ - public static class KeySetView extends CHMView implements Set, java.io.Serializable { - private static final long serialVersionUID = 7249069246763182397L; - private final V value; - KeySetView(ConcurrentHashMapV8 map, V value) { // non-public - super(map); - this.value = value; - } - - /** - * Returns the default mapped value for additions, - * or {@code null} if additions are not supported. - * - * @return the default mapped value for additions, or {@code null} - * if not supported. - */ - public V getMappedValue() { return value; } - - // implement Set API - - public boolean contains(Object o) { return map.containsKey(o); } - public boolean remove(Object o) { return map.remove(o) != null; } - - /** - * Returns a "weakly consistent" iterator that will never - * throw {@link ConcurrentModificationException}, and - * guarantees to traverse elements as they existed upon - * construction of the iterator, and may (but is not - * guaranteed to) reflect any modifications subsequent to - * construction. - * - * @return an iterator over the keys of this map - */ - public Iterator iterator() { return new KeyIterator(map); } - public boolean add(K e) { - V v; - if ((v = value) == null) - throw new UnsupportedOperationException(); - if (e == null) - throw new NullPointerException(); - return map.internalPutIfAbsent(e, v) == null; - } - public boolean addAll(Collection c) { - boolean added = false; - V v; - if ((v = value) == null) - throw new UnsupportedOperationException(); - for (K e : c) { - if (e == null) - throw new NullPointerException(); - if (map.internalPutIfAbsent(e, v) == null) - added = true; - } - return added; - } - public boolean equals(Object o) { - Set c; - return ((o instanceof Set) && - ((c = (Set)o) == this || - (containsAll(c) && c.containsAll(this)))); - } - } - - /** - * A view of a ConcurrentHashMapV8 as a {@link Collection} of - * values, in which additions are disabled. This class cannot be - * directly instantiated. See {@link #values}, - * - *

    The view's {@code iterator} is a "weakly consistent" iterator - * that will never throw {@link ConcurrentModificationException}, - * and guarantees to traverse elements as they existed upon - * construction of the iterator, and may (but is not guaranteed to) - * reflect any modifications subsequent to construction. - */ - public static final class ValuesView extends CHMView - implements Collection { - ValuesView(ConcurrentHashMapV8 map) { super(map); } - public final boolean contains(Object o) { return map.containsValue(o); } - public final boolean remove(Object o) { - if (o != null) { - Iterator it = new ValueIterator(map); - while (it.hasNext()) { - if (o.equals(it.next())) { - it.remove(); - return true; - } - } - } - return false; - } - - /** - * Returns a "weakly consistent" iterator that will never - * throw {@link ConcurrentModificationException}, and - * guarantees to traverse elements as they existed upon - * construction of the iterator, and may (but is not - * guaranteed to) reflect any modifications subsequent to - * construction. - * - * @return an iterator over the values of this map - */ - public final Iterator iterator() { - return new ValueIterator(map); - } - public final boolean add(V e) { - throw new UnsupportedOperationException(); - } - public final boolean addAll(Collection c) { - throw new UnsupportedOperationException(); - } - } - - /** - * A view of a ConcurrentHashMapV8 as a {@link Set} of (key, value) - * entries. This class cannot be directly instantiated. See - * {@link #entrySet}. - */ - public static final class EntrySetView extends CHMView - implements Set> { - EntrySetView(ConcurrentHashMapV8 map) { super(map); } - public final boolean contains(Object o) { - Object k, v, r; Map.Entry e; - return ((o instanceof Map.Entry) && - (k = (e = (Map.Entry)o).getKey()) != null && - (r = map.get(k)) != null && - (v = e.getValue()) != null && - (v == r || v.equals(r))); - } - public final boolean remove(Object o) { - Object k, v; Map.Entry e; - return ((o instanceof Map.Entry) && - (k = (e = (Map.Entry)o).getKey()) != null && - (v = e.getValue()) != null && - map.remove(k, v)); - } - - /** - * Returns a "weakly consistent" iterator that will never - * throw {@link ConcurrentModificationException}, and - * guarantees to traverse elements as they existed upon - * construction of the iterator, and may (but is not - * guaranteed to) reflect any modifications subsequent to - * construction. - * - * @return an iterator over the entries of this map - */ - public final Iterator> iterator() { - return new EntryIterator(map); - } - - public final boolean add(Entry e) { - K key = e.getKey(); - V value = e.getValue(); - if (key == null || value == null) - throw new NullPointerException(); - return map.internalPut(key, value) == null; - } - public final boolean addAll(Collection> c) { - boolean added = false; - for (Entry e : c) { - if (add(e)) - added = true; - } - return added; - } - public boolean equals(Object o) { - Set c; - return ((o instanceof Set) && - ((c = (Set)o) == this || - (containsAll(c) && c.containsAll(this)))); - } - } - - // Unsafe mechanics - private static final sun.misc.Unsafe UNSAFE; - private static final long counterOffset; - private static final long sizeCtlOffset; - private static final long ABASE; - private static final int ASHIFT; - - static { - int ss; - try { - UNSAFE = getUnsafe(); - Class k = ConcurrentHashMapV8.class; - counterOffset = UNSAFE.objectFieldOffset - (k.getDeclaredField("counter")); - sizeCtlOffset = UNSAFE.objectFieldOffset - (k.getDeclaredField("sizeCtl")); - Class sc = Node[].class; - ABASE = UNSAFE.arrayBaseOffset(sc); - ss = UNSAFE.arrayIndexScale(sc); - } catch (Exception e) { - throw new Error(e); - } - if ((ss & (ss-1)) != 0) - throw new Error("data type scale not a power of two"); - ASHIFT = 31 - Integer.numberOfLeadingZeros(ss); - } - - /** - * Returns a sun.misc.Unsafe. Suitable for use in a 3rd party package. - * Replace with a simple call to Unsafe.getUnsafe when integrating - * into a jdk. - * - * @return a sun.misc.Unsafe - */ - private static sun.misc.Unsafe getUnsafe() { - try { - return sun.misc.Unsafe.getUnsafe(); - } catch (SecurityException se) { - try { - return java.security.AccessController.doPrivileged - (new java.security - .PrivilegedExceptionAction() { - public sun.misc.Unsafe run() throws Exception { - java.lang.reflect.Field f = sun.misc - .Unsafe.class.getDeclaredField("theUnsafe"); - f.setAccessible(true); - return (sun.misc.Unsafe) f.get(null); - }}); - } catch (java.security.PrivilegedActionException e) { - throw new RuntimeException("Could not initialize intrinsics", - e.getCause()); - } - } - } -} diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166e/LongAdder.java b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166e/LongAdder.java deleted file mode 100644 index 47a923c8..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166e/LongAdder.java +++ /dev/null @@ -1,203 +0,0 @@ -/* - * Written by Doug Lea with assistance from members of JCP JSR-166 - * Expert Group and released to the public domain, as explained at - * http://creativecommons.org/publicdomain/zero/1.0/ - */ - -// This is based on 1.9 version. - -package com.concurrent_ruby.ext.jsr166e; -import java.util.concurrent.atomic.AtomicLong; -import java.io.IOException; -import java.io.Serializable; -import java.io.ObjectInputStream; - -/** - * One or more variables that together maintain an initially zero - * {@code long} sum. When updates (method {@link #add}) are contended - * across threads, the set of variables may grow dynamically to reduce - * contention. Method {@link #sum} (or, equivalently, {@link - * #longValue}) returns the current total combined across the - * variables maintaining the sum. - * - *

    This class is usually preferable to {@link AtomicLong} when - * multiple threads update a common sum that is used for purposes such - * as collecting statistics, not for fine-grained synchronization - * control. Under low update contention, the two classes have similar - * characteristics. But under high contention, expected throughput of - * this class is significantly higher, at the expense of higher space - * consumption. - * - *

    This class extends {@link Number}, but does not define - * methods such as {@code hashCode} and {@code compareTo} because - * instances are expected to be mutated, and so are not useful as - * collection keys. - * - *

    jsr166e note: This class is targeted to be placed in - * java.util.concurrent.atomic. - * - * @since 1.8 - * @author Doug Lea - */ -public class LongAdder extends Striped64 implements Serializable { - private static final long serialVersionUID = 7249069246863182397L; - - /** - * Version of plus for use in retryUpdate - */ - final long fn(long v, long x) { return v + x; } - - /** - * Creates a new adder with initial sum of zero. - */ - public LongAdder() { - } - - /** - * Adds the given value. - * - * @param x the value to add - */ - public void add(long x) { - Cell[] as; long b, v; HashCode hc; Cell a; int n; - if ((as = cells) != null || !casBase(b = base, b + x)) { - boolean uncontended = true; - int h = (hc = threadHashCode.get()).code; - if (as == null || (n = as.length) < 1 || - (a = as[(n - 1) & h]) == null || - !(uncontended = a.cas(v = a.value, v + x))) - retryUpdate(x, hc, uncontended); - } - } - - /** - * Equivalent to {@code add(1)}. - */ - public void increment() { - add(1L); - } - - /** - * Equivalent to {@code add(-1)}. - */ - public void decrement() { - add(-1L); - } - - /** - * Returns the current sum. The returned value is NOT an - * atomic snapshot: Invocation in the absence of concurrent - * updates returns an accurate result, but concurrent updates that - * occur while the sum is being calculated might not be - * incorporated. - * - * @return the sum - */ - public long sum() { - long sum = base; - Cell[] as = cells; - if (as != null) { - int n = as.length; - for (int i = 0; i < n; ++i) { - Cell a = as[i]; - if (a != null) - sum += a.value; - } - } - return sum; - } - - /** - * Resets variables maintaining the sum to zero. This method may - * be a useful alternative to creating a new adder, but is only - * effective if there are no concurrent updates. Because this - * method is intrinsically racy, it should only be used when it is - * known that no threads are concurrently updating. - */ - public void reset() { - internalReset(0L); - } - - /** - * Equivalent in effect to {@link #sum} followed by {@link - * #reset}. This method may apply for example during quiescent - * points between multithreaded computations. If there are - * updates concurrent with this method, the returned value is - * not guaranteed to be the final value occurring before - * the reset. - * - * @return the sum - */ - public long sumThenReset() { - long sum = base; - Cell[] as = cells; - base = 0L; - if (as != null) { - int n = as.length; - for (int i = 0; i < n; ++i) { - Cell a = as[i]; - if (a != null) { - sum += a.value; - a.value = 0L; - } - } - } - return sum; - } - - /** - * Returns the String representation of the {@link #sum}. - * @return the String representation of the {@link #sum} - */ - public String toString() { - return Long.toString(sum()); - } - - /** - * Equivalent to {@link #sum}. - * - * @return the sum - */ - public long longValue() { - return sum(); - } - - /** - * Returns the {@link #sum} as an {@code int} after a narrowing - * primitive conversion. - */ - public int intValue() { - return (int)sum(); - } - - /** - * Returns the {@link #sum} as a {@code float} - * after a widening primitive conversion. - */ - public float floatValue() { - return (float)sum(); - } - - /** - * Returns the {@link #sum} as a {@code double} after a widening - * primitive conversion. - */ - public double doubleValue() { - return (double)sum(); - } - - private void writeObject(java.io.ObjectOutputStream s) - throws java.io.IOException { - s.defaultWriteObject(); - s.writeLong(sum()); - } - - private void readObject(ObjectInputStream s) - throws IOException, ClassNotFoundException { - s.defaultReadObject(); - busy = 0; - cells = null; - base = s.readLong(); - } - -} diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166e/Striped64.java b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166e/Striped64.java deleted file mode 100644 index 93a277fb..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166e/Striped64.java +++ /dev/null @@ -1,342 +0,0 @@ -/* - * Written by Doug Lea with assistance from members of JCP JSR-166 - * Expert Group and released to the public domain, as explained at - * http://creativecommons.org/publicdomain/zero/1.0/ - */ - -// This is based on 1.5 version. - -package com.concurrent_ruby.ext.jsr166e; -import java.util.Random; - -/** - * A package-local class holding common representation and mechanics - * for classes supporting dynamic striping on 64bit values. The class - * extends Number so that concrete subclasses must publicly do so. - */ -abstract class Striped64 extends Number { - /* - * This class maintains a lazily-initialized table of atomically - * updated variables, plus an extra "base" field. The table size - * is a power of two. Indexing uses masked per-thread hash codes. - * Nearly all declarations in this class are package-private, - * accessed directly by subclasses. - * - * Table entries are of class Cell; a variant of AtomicLong padded - * to reduce cache contention on most processors. Padding is - * overkill for most Atomics because they are usually irregularly - * scattered in memory and thus don't interfere much with each - * other. But Atomic objects residing in arrays will tend to be - * placed adjacent to each other, and so will most often share - * cache lines (with a huge negative performance impact) without - * this precaution. - * - * In part because Cells are relatively large, we avoid creating - * them until they are needed. When there is no contention, all - * updates are made to the base field. Upon first contention (a - * failed CAS on base update), the table is initialized to size 2. - * The table size is doubled upon further contention until - * reaching the nearest power of two greater than or equal to the - * number of CPUS. Table slots remain empty (null) until they are - * needed. - * - * A single spinlock ("busy") is used for initializing and - * resizing the table, as well as populating slots with new Cells. - * There is no need for a blocking lock: When the lock is not - * available, threads try other slots (or the base). During these - * retries, there is increased contention and reduced locality, - * which is still better than alternatives. - * - * Per-thread hash codes are initialized to random values. - * Contention and/or table collisions are indicated by failed - * CASes when performing an update operation (see method - * retryUpdate). Upon a collision, if the table size is less than - * the capacity, it is doubled in size unless some other thread - * holds the lock. If a hashed slot is empty, and lock is - * available, a new Cell is created. Otherwise, if the slot - * exists, a CAS is tried. Retries proceed by "double hashing", - * using a secondary hash (Marsaglia XorShift) to try to find a - * free slot. - * - * The table size is capped because, when there are more threads - * than CPUs, supposing that each thread were bound to a CPU, - * there would exist a perfect hash function mapping threads to - * slots that eliminates collisions. When we reach capacity, we - * search for this mapping by randomly varying the hash codes of - * colliding threads. Because search is random, and collisions - * only become known via CAS failures, convergence can be slow, - * and because threads are typically not bound to CPUS forever, - * may not occur at all. However, despite these limitations, - * observed contention rates are typically low in these cases. - * - * It is possible for a Cell to become unused when threads that - * once hashed to it terminate, as well as in the case where - * doubling the table causes no thread to hash to it under - * expanded mask. We do not try to detect or remove such cells, - * under the assumption that for long-running instances, observed - * contention levels will recur, so the cells will eventually be - * needed again; and for short-lived ones, it does not matter. - */ - - /** - * Padded variant of AtomicLong supporting only raw accesses plus CAS. - * The value field is placed between pads, hoping that the JVM doesn't - * reorder them. - * - * JVM intrinsics note: It would be possible to use a release-only - * form of CAS here, if it were provided. - */ - static final class Cell { - volatile long p0, p1, p2, p3, p4, p5, p6; - volatile long value; - volatile long q0, q1, q2, q3, q4, q5, q6; - Cell(long x) { value = x; } - - final boolean cas(long cmp, long val) { - return UNSAFE.compareAndSwapLong(this, valueOffset, cmp, val); - } - - // Unsafe mechanics - private static final sun.misc.Unsafe UNSAFE; - private static final long valueOffset; - static { - try { - UNSAFE = getUnsafe(); - Class ak = Cell.class; - valueOffset = UNSAFE.objectFieldOffset - (ak.getDeclaredField("value")); - } catch (Exception e) { - throw new Error(e); - } - } - - } - - /** - * Holder for the thread-local hash code. The code is initially - * random, but may be set to a different value upon collisions. - */ - static final class HashCode { - static final Random rng = new Random(); - int code; - HashCode() { - int h = rng.nextInt(); // Avoid zero to allow xorShift rehash - code = (h == 0) ? 1 : h; - } - } - - /** - * The corresponding ThreadLocal class - */ - static final class ThreadHashCode extends ThreadLocal { - public HashCode initialValue() { return new HashCode(); } - } - - /** - * Static per-thread hash codes. Shared across all instances to - * reduce ThreadLocal pollution and because adjustments due to - * collisions in one table are likely to be appropriate for - * others. - */ - static final ThreadHashCode threadHashCode = new ThreadHashCode(); - - /** Number of CPUS, to place bound on table size */ - static final int NCPU = Runtime.getRuntime().availableProcessors(); - - /** - * Table of cells. When non-null, size is a power of 2. - */ - transient volatile Cell[] cells; - - /** - * Base value, used mainly when there is no contention, but also as - * a fallback during table initialization races. Updated via CAS. - */ - transient volatile long base; - - /** - * Spinlock (locked via CAS) used when resizing and/or creating Cells. - */ - transient volatile int busy; - - /** - * Package-private default constructor - */ - Striped64() { - } - - /** - * CASes the base field. - */ - final boolean casBase(long cmp, long val) { - return UNSAFE.compareAndSwapLong(this, baseOffset, cmp, val); - } - - /** - * CASes the busy field from 0 to 1 to acquire lock. - */ - final boolean casBusy() { - return UNSAFE.compareAndSwapInt(this, busyOffset, 0, 1); - } - - /** - * Computes the function of current and new value. Subclasses - * should open-code this update function for most uses, but the - * virtualized form is needed within retryUpdate. - * - * @param currentValue the current value (of either base or a cell) - * @param newValue the argument from a user update call - * @return result of the update function - */ - abstract long fn(long currentValue, long newValue); - - /** - * Handles cases of updates involving initialization, resizing, - * creating new Cells, and/or contention. See above for - * explanation. This method suffers the usual non-modularity - * problems of optimistic retry code, relying on rechecked sets of - * reads. - * - * @param x the value - * @param hc the hash code holder - * @param wasUncontended false if CAS failed before call - */ - final void retryUpdate(long x, HashCode hc, boolean wasUncontended) { - int h = hc.code; - boolean collide = false; // True if last slot nonempty - for (;;) { - Cell[] as; Cell a; int n; long v; - if ((as = cells) != null && (n = as.length) > 0) { - if ((a = as[(n - 1) & h]) == null) { - if (busy == 0) { // Try to attach new Cell - Cell r = new Cell(x); // Optimistically create - if (busy == 0 && casBusy()) { - boolean created = false; - try { // Recheck under lock - Cell[] rs; int m, j; - if ((rs = cells) != null && - (m = rs.length) > 0 && - rs[j = (m - 1) & h] == null) { - rs[j] = r; - created = true; - } - } finally { - busy = 0; - } - if (created) - break; - continue; // Slot is now non-empty - } - } - collide = false; - } - else if (!wasUncontended) // CAS already known to fail - wasUncontended = true; // Continue after rehash - else if (a.cas(v = a.value, fn(v, x))) - break; - else if (n >= NCPU || cells != as) - collide = false; // At max size or stale - else if (!collide) - collide = true; - else if (busy == 0 && casBusy()) { - try { - if (cells == as) { // Expand table unless stale - Cell[] rs = new Cell[n << 1]; - for (int i = 0; i < n; ++i) - rs[i] = as[i]; - cells = rs; - } - } finally { - busy = 0; - } - collide = false; - continue; // Retry with expanded table - } - h ^= h << 13; // Rehash - h ^= h >>> 17; - h ^= h << 5; - } - else if (busy == 0 && cells == as && casBusy()) { - boolean init = false; - try { // Initialize table - if (cells == as) { - Cell[] rs = new Cell[2]; - rs[h & 1] = new Cell(x); - cells = rs; - init = true; - } - } finally { - busy = 0; - } - if (init) - break; - } - else if (casBase(v = base, fn(v, x))) - break; // Fall back on using base - } - hc.code = h; // Record index for next time - } - - - /** - * Sets base and all cells to the given value. - */ - final void internalReset(long initialValue) { - Cell[] as = cells; - base = initialValue; - if (as != null) { - int n = as.length; - for (int i = 0; i < n; ++i) { - Cell a = as[i]; - if (a != null) - a.value = initialValue; - } - } - } - - // Unsafe mechanics - private static final sun.misc.Unsafe UNSAFE; - private static final long baseOffset; - private static final long busyOffset; - static { - try { - UNSAFE = getUnsafe(); - Class sk = Striped64.class; - baseOffset = UNSAFE.objectFieldOffset - (sk.getDeclaredField("base")); - busyOffset = UNSAFE.objectFieldOffset - (sk.getDeclaredField("busy")); - } catch (Exception e) { - throw new Error(e); - } - } - - /** - * Returns a sun.misc.Unsafe. Suitable for use in a 3rd party package. - * Replace with a simple call to Unsafe.getUnsafe when integrating - * into a jdk. - * - * @return a sun.misc.Unsafe - */ - private static sun.misc.Unsafe getUnsafe() { - try { - return sun.misc.Unsafe.getUnsafe(); - } catch (SecurityException se) { - try { - return java.security.AccessController.doPrivileged - (new java.security - .PrivilegedExceptionAction() { - public sun.misc.Unsafe run() throws Exception { - java.lang.reflect.Field f = sun.misc - .Unsafe.class.getDeclaredField("theUnsafe"); - f.setAccessible(true); - return (sun.misc.Unsafe) f.get(null); - }}); - } catch (java.security.PrivilegedActionException e) { - throw new RuntimeException("Could not initialize intrinsics", - e.getCause()); - } - } - } - -} diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166e/nounsafe/ConcurrentHashMapV8.java b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166e/nounsafe/ConcurrentHashMapV8.java deleted file mode 100644 index b7fc5a93..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166e/nounsafe/ConcurrentHashMapV8.java +++ /dev/null @@ -1,3800 +0,0 @@ -/* - * Written by Doug Lea with assistance from members of JCP JSR-166 - * Expert Group and released to the public domain, as explained at - * http://creativecommons.org/publicdomain/zero/1.0/ - */ - -// This is based on the 1.79 version. - -package com.concurrent_ruby.ext.jsr166e.nounsafe; - -import org.jruby.RubyClass; -import org.jruby.RubyNumeric; -import org.jruby.RubyObject; -import org.jruby.exceptions.RaiseException; -import com.concurrent_ruby.ext.jsr166e.ConcurrentHashMap; -import com.concurrent_ruby.ext.jsr166y.ThreadLocalRandom; -import org.jruby.runtime.ThreadContext; -import org.jruby.runtime.builtin.IRubyObject; - -import java.util.Arrays; -import java.util.Map; -import java.util.Set; -import java.util.Collection; -import java.util.Hashtable; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Enumeration; -import java.util.ConcurrentModificationException; -import java.util.NoSuchElementException; -import java.util.concurrent.ConcurrentMap; -import java.util.concurrent.atomic.AtomicIntegerFieldUpdater; -import java.util.concurrent.atomic.AtomicReferenceArray; -import java.util.concurrent.locks.AbstractQueuedSynchronizer; - -import java.io.Serializable; - -/** - * A hash table supporting full concurrency of retrievals and - * high expected concurrency for updates. This class obeys the - * same functional specification as {@link java.util.Hashtable}, and - * includes versions of methods corresponding to each method of - * {@code Hashtable}. However, even though all operations are - * thread-safe, retrieval operations do not entail locking, - * and there is not any support for locking the entire table - * in a way that prevents all access. This class is fully - * interoperable with {@code Hashtable} in programs that rely on its - * thread safety but not on its synchronization details. - * - *

    Retrieval operations (including {@code get}) generally do not - * block, so may overlap with update operations (including {@code put} - * and {@code remove}). Retrievals reflect the results of the most - * recently completed update operations holding upon their - * onset. (More formally, an update operation for a given key bears a - * happens-before relation with any (non-null) retrieval for - * that key reporting the updated value.) For aggregate operations - * such as {@code putAll} and {@code clear}, concurrent retrievals may - * reflect insertion or removal of only some entries. Similarly, - * Iterators and Enumerations return elements reflecting the state of - * the hash table at some point at or since the creation of the - * iterator/enumeration. They do not throw {@link - * ConcurrentModificationException}. However, iterators are designed - * to be used by only one thread at a time. Bear in mind that the - * results of aggregate status methods including {@code size}, {@code - * isEmpty}, and {@code containsValue} are typically useful only when - * a map is not undergoing concurrent updates in other threads. - * Otherwise the results of these methods reflect transient states - * that may be adequate for monitoring or estimation purposes, but not - * for program control. - * - *

    The table is dynamically expanded when there are too many - * collisions (i.e., keys that have distinct hash codes but fall into - * the same slot modulo the table size), with the expected average - * effect of maintaining roughly two bins per mapping (corresponding - * to a 0.75 load factor threshold for resizing). There may be much - * variance around this average as mappings are added and removed, but - * overall, this maintains a commonly accepted time/space tradeoff for - * hash tables. However, resizing this or any other kind of hash - * table may be a relatively slow operation. When possible, it is a - * good idea to provide a size estimate as an optional {@code - * initialCapacity} constructor argument. An additional optional - * {@code loadFactor} constructor argument provides a further means of - * customizing initial table capacity by specifying the table density - * to be used in calculating the amount of space to allocate for the - * given number of elements. Also, for compatibility with previous - * versions of this class, constructors may optionally specify an - * expected {@code concurrencyLevel} as an additional hint for - * internal sizing. Note that using many keys with exactly the same - * {@code hashCode()} is a sure way to slow down performance of any - * hash table. - * - *

    A {@link Set} projection of a ConcurrentHashMapV8 may be created - * (using {@link #newKeySet()} or {@link #newKeySet(int)}), or viewed - * (using {@link #keySet(Object)} when only keys are of interest, and the - * mapped values are (perhaps transiently) not used or all take the - * same mapping value. - * - *

    A ConcurrentHashMapV8 can be used as scalable frequency map (a - * form of histogram or multiset) by using {@link LongAdder} values - * and initializing via {@link #computeIfAbsent}. For example, to add - * a count to a {@code ConcurrentHashMapV8 freqs}, you - * can use {@code freqs.computeIfAbsent(k -> new - * LongAdder()).increment();} - * - *

    This class and its views and iterators implement all of the - * optional methods of the {@link Map} and {@link Iterator} - * interfaces. - * - *

    Like {@link Hashtable} but unlike {@link HashMap}, this class - * does not allow {@code null} to be used as a key or value. - * - *

    ConcurrentHashMapV8s support parallel operations using the {@link - * ForkJoinPool#commonPool}. (Tasks that may be used in other contexts - * are available in class {@link ForkJoinTasks}). These operations are - * designed to be safely, and often sensibly, applied even with maps - * that are being concurrently updated by other threads; for example, - * when computing a snapshot summary of the values in a shared - * registry. There are three kinds of operation, each with four - * forms, accepting functions with Keys, Values, Entries, and (Key, - * Value) arguments and/or return values. (The first three forms are - * also available via the {@link #keySet()}, {@link #values()} and - * {@link #entrySet()} views). Because the elements of a - * ConcurrentHashMapV8 are not ordered in any particular way, and may be - * processed in different orders in different parallel executions, the - * correctness of supplied functions should not depend on any - * ordering, or on any other objects or values that may transiently - * change while computation is in progress; and except for forEach - * actions, should ideally be side-effect-free. - * - *

    - * - *

    The concurrency properties of bulk operations follow - * from those of ConcurrentHashMapV8: Any non-null result returned - * from {@code get(key)} and related access methods bears a - * happens-before relation with the associated insertion or - * update. The result of any bulk operation reflects the - * composition of these per-element relations (but is not - * necessarily atomic with respect to the map as a whole unless it - * is somehow known to be quiescent). Conversely, because keys - * and values in the map are never null, null serves as a reliable - * atomic indicator of the current lack of any result. To - * maintain this property, null serves as an implicit basis for - * all non-scalar reduction operations. For the double, long, and - * int versions, the basis should be one that, when combined with - * any other value, returns that other value (more formally, it - * should be the identity element for the reduction). Most common - * reductions have these properties; for example, computing a sum - * with basis 0 or a minimum with basis MAX_VALUE. - * - *

    Search and transformation functions provided as arguments - * should similarly return null to indicate the lack of any result - * (in which case it is not used). In the case of mapped - * reductions, this also enables transformations to serve as - * filters, returning null (or, in the case of primitive - * specializations, the identity basis) if the element should not - * be combined. You can create compound transformations and - * filterings by composing them yourself under this "null means - * there is nothing there now" rule before using them in search or - * reduce operations. - * - *

    Methods accepting and/or returning Entry arguments maintain - * key-value associations. They may be useful for example when - * finding the key for the greatest value. Note that "plain" Entry - * arguments can be supplied using {@code new - * AbstractMap.SimpleEntry(k,v)}. - * - *

    Bulk operations may complete abruptly, throwing an - * exception encountered in the application of a supplied - * function. Bear in mind when handling such exceptions that other - * concurrently executing functions could also have thrown - * exceptions, or would have done so if the first exception had - * not occurred. - * - *

    Parallel speedups for bulk operations compared to sequential - * processing are common but not guaranteed. Operations involving - * brief functions on small maps may execute more slowly than - * sequential loops if the underlying work to parallelize the - * computation is more expensive than the computation itself. - * Similarly, parallelization may not lead to much actual parallelism - * if all processors are busy performing unrelated tasks. - * - *

    All arguments to all task methods must be non-null. - * - *

    jsr166e note: During transition, this class - * uses nested functional interfaces with different names but the - * same forms as those expected for JDK8. - * - *

    This class is a member of the - * - * Java Collections Framework. - * - * @since 1.5 - * @author Doug Lea - * @param the type of keys maintained by this map - * @param the type of mapped values - */ -public class ConcurrentHashMapV8 - implements ConcurrentMap, Serializable, ConcurrentHashMap { - private static final long serialVersionUID = 7249069246763182397L; - - /** - * A partitionable iterator. A Spliterator can be traversed - * directly, but can also be partitioned (before traversal) by - * creating another Spliterator that covers a non-overlapping - * portion of the elements, and so may be amenable to parallel - * execution. - * - *

    This interface exports a subset of expected JDK8 - * functionality. - * - *

    Sample usage: Here is one (of the several) ways to compute - * the sum of the values held in a map using the ForkJoin - * framework. As illustrated here, Spliterators are well suited to - * designs in which a task repeatedly splits off half its work - * into forked subtasks until small enough to process directly, - * and then joins these subtasks. Variants of this style can also - * be used in completion-based designs. - * - *

    -     * {@code ConcurrentHashMapV8 m = ...
    -     * // split as if have 8 * parallelism, for load balance
    -     * int n = m.size();
    -     * int p = aForkJoinPool.getParallelism() * 8;
    -     * int split = (n < p)? n : p;
    -     * long sum = aForkJoinPool.invoke(new SumValues(m.valueSpliterator(), split, null));
    -     * // ...
    -     * static class SumValues extends RecursiveTask {
    -     *   final Spliterator s;
    -     *   final int split;             // split while > 1
    -     *   final SumValues nextJoin;    // records forked subtasks to join
    -     *   SumValues(Spliterator s, int depth, SumValues nextJoin) {
    -     *     this.s = s; this.depth = depth; this.nextJoin = nextJoin;
    -     *   }
    -     *   public Long compute() {
    -     *     long sum = 0;
    -     *     SumValues subtasks = null; // fork subtasks
    -     *     for (int s = split >>> 1; s > 0; s >>>= 1)
    -     *       (subtasks = new SumValues(s.split(), s, subtasks)).fork();
    -     *     while (s.hasNext())        // directly process remaining elements
    -     *       sum += s.next();
    -     *     for (SumValues t = subtasks; t != null; t = t.nextJoin)
    -     *       sum += t.join();         // collect subtask results
    -     *     return sum;
    -     *   }
    -     * }
    -     * }
    - */ - public static interface Spliterator extends Iterator { - /** - * Returns a Spliterator covering approximately half of the - * elements, guaranteed not to overlap with those subsequently - * returned by this Spliterator. After invoking this method, - * the current Spliterator will not produce any of - * the elements of the returned Spliterator, but the two - * Spliterators together will produce all of the elements that - * would have been produced by this Spliterator had this - * method not been called. The exact number of elements - * produced by the returned Spliterator is not guaranteed, and - * may be zero (i.e., with {@code hasNext()} reporting {@code - * false}) if this Spliterator cannot be further split. - * - * @return a Spliterator covering approximately half of the - * elements - * @throws IllegalStateException if this Spliterator has - * already commenced traversing elements - */ - Spliterator split(); - } - - - /* - * Overview: - * - * The primary design goal of this hash table is to maintain - * concurrent readability (typically method get(), but also - * iterators and related methods) while minimizing update - * contention. Secondary goals are to keep space consumption about - * the same or better than java.util.HashMap, and to support high - * initial insertion rates on an empty table by many threads. - * - * Each key-value mapping is held in a Node. Because Node fields - * can contain special values, they are defined using plain Object - * types. Similarly in turn, all internal methods that use them - * work off Object types. And similarly, so do the internal - * methods of auxiliary iterator and view classes. All public - * generic typed methods relay in/out of these internal methods, - * supplying null-checks and casts as needed. This also allows - * many of the public methods to be factored into a smaller number - * of internal methods (although sadly not so for the five - * variants of put-related operations). The validation-based - * approach explained below leads to a lot of code sprawl because - * retry-control precludes factoring into smaller methods. - * - * The table is lazily initialized to a power-of-two size upon the - * first insertion. Each bin in the table normally contains a - * list of Nodes (most often, the list has only zero or one Node). - * Table accesses require volatile/atomic reads, writes, and - * CASes. Because there is no other way to arrange this without - * adding further indirections, we use intrinsics - * (sun.misc.Unsafe) operations. The lists of nodes within bins - * are always accurately traversable under volatile reads, so long - * as lookups check hash code and non-nullness of value before - * checking key equality. - * - * We use the top two bits of Node hash fields for control - * purposes -- they are available anyway because of addressing - * constraints. As explained further below, these top bits are - * used as follows: - * 00 - Normal - * 01 - Locked - * 11 - Locked and may have a thread waiting for lock - * 10 - Node is a forwarding node - * - * The lower 30 bits of each Node's hash field contain a - * transformation of the key's hash code, except for forwarding - * nodes, for which the lower bits are zero (and so always have - * hash field == MOVED). - * - * Insertion (via put or its variants) of the first node in an - * empty bin is performed by just CASing it to the bin. This is - * by far the most common case for put operations under most - * key/hash distributions. Other update operations (insert, - * delete, and replace) require locks. We do not want to waste - * the space required to associate a distinct lock object with - * each bin, so instead use the first node of a bin list itself as - * a lock. Blocking support for these locks relies on the builtin - * "synchronized" monitors. However, we also need a tryLock - * construction, so we overlay these by using bits of the Node - * hash field for lock control (see above), and so normally use - * builtin monitors only for blocking and signalling using - * wait/notifyAll constructions. See Node.tryAwaitLock. - * - * Using the first node of a list as a lock does not by itself - * suffice though: When a node is locked, any update must first - * validate that it is still the first node after locking it, and - * retry if not. Because new nodes are always appended to lists, - * once a node is first in a bin, it remains first until deleted - * or the bin becomes invalidated (upon resizing). However, - * operations that only conditionally update may inspect nodes - * until the point of update. This is a converse of sorts to the - * lazy locking technique described by Herlihy & Shavit. - * - * The main disadvantage of per-bin locks is that other update - * operations on other nodes in a bin list protected by the same - * lock can stall, for example when user equals() or mapping - * functions take a long time. However, statistically, under - * random hash codes, this is not a common problem. Ideally, the - * frequency of nodes in bins follows a Poisson distribution - * (http://en.wikipedia.org/wiki/Poisson_distribution) with a - * parameter of about 0.5 on average, given the resizing threshold - * of 0.75, although with a large variance because of resizing - * granularity. Ignoring variance, the expected occurrences of - * list size k are (exp(-0.5) * pow(0.5, k) / factorial(k)). The - * first values are: - * - * 0: 0.60653066 - * 1: 0.30326533 - * 2: 0.07581633 - * 3: 0.01263606 - * 4: 0.00157952 - * 5: 0.00015795 - * 6: 0.00001316 - * 7: 0.00000094 - * 8: 0.00000006 - * more: less than 1 in ten million - * - * Lock contention probability for two threads accessing distinct - * elements is roughly 1 / (8 * #elements) under random hashes. - * - * Actual hash code distributions encountered in practice - * sometimes deviate significantly from uniform randomness. This - * includes the case when N > (1<<30), so some keys MUST collide. - * Similarly for dumb or hostile usages in which multiple keys are - * designed to have identical hash codes. Also, although we guard - * against the worst effects of this (see method spread), sets of - * hashes may differ only in bits that do not impact their bin - * index for a given power-of-two mask. So we use a secondary - * strategy that applies when the number of nodes in a bin exceeds - * a threshold, and at least one of the keys implements - * Comparable. These TreeBins use a balanced tree to hold nodes - * (a specialized form of red-black trees), bounding search time - * to O(log N). Each search step in a TreeBin is around twice as - * slow as in a regular list, but given that N cannot exceed - * (1<<64) (before running out of addresses) this bounds search - * steps, lock hold times, etc, to reasonable constants (roughly - * 100 nodes inspected per operation worst case) so long as keys - * are Comparable (which is very common -- String, Long, etc). - * TreeBin nodes (TreeNodes) also maintain the same "next" - * traversal pointers as regular nodes, so can be traversed in - * iterators in the same way. - * - * The table is resized when occupancy exceeds a percentage - * threshold (nominally, 0.75, but see below). Only a single - * thread performs the resize (using field "sizeCtl", to arrange - * exclusion), but the table otherwise remains usable for reads - * and updates. Resizing proceeds by transferring bins, one by - * one, from the table to the next table. Because we are using - * power-of-two expansion, the elements from each bin must either - * stay at same index, or move with a power of two offset. We - * eliminate unnecessary node creation by catching cases where old - * nodes can be reused because their next fields won't change. On - * average, only about one-sixth of them need cloning when a table - * doubles. The nodes they replace will be garbage collectable as - * soon as they are no longer referenced by any reader thread that - * may be in the midst of concurrently traversing table. Upon - * transfer, the old table bin contains only a special forwarding - * node (with hash field "MOVED") that contains the next table as - * its key. On encountering a forwarding node, access and update - * operations restart, using the new table. - * - * Each bin transfer requires its bin lock. However, unlike other - * cases, a transfer can skip a bin if it fails to acquire its - * lock, and revisit it later (unless it is a TreeBin). Method - * rebuild maintains a buffer of TRANSFER_BUFFER_SIZE bins that - * have been skipped because of failure to acquire a lock, and - * blocks only if none are available (i.e., only very rarely). - * The transfer operation must also ensure that all accessible - * bins in both the old and new table are usable by any traversal. - * When there are no lock acquisition failures, this is arranged - * simply by proceeding from the last bin (table.length - 1) up - * towards the first. Upon seeing a forwarding node, traversals - * (see class Iter) arrange to move to the new table - * without revisiting nodes. However, when any node is skipped - * during a transfer, all earlier table bins may have become - * visible, so are initialized with a reverse-forwarding node back - * to the old table until the new ones are established. (This - * sometimes requires transiently locking a forwarding node, which - * is possible under the above encoding.) These more expensive - * mechanics trigger only when necessary. - * - * The traversal scheme also applies to partial traversals of - * ranges of bins (via an alternate Traverser constructor) - * to support partitioned aggregate operations. Also, read-only - * operations give up if ever forwarded to a null table, which - * provides support for shutdown-style clearing, which is also not - * currently implemented. - * - * Lazy table initialization minimizes footprint until first use, - * and also avoids resizings when the first operation is from a - * putAll, constructor with map argument, or deserialization. - * These cases attempt to override the initial capacity settings, - * but harmlessly fail to take effect in cases of races. - * - * The element count is maintained using a LongAdder, which avoids - * contention on updates but can encounter cache thrashing if read - * too frequently during concurrent access. To avoid reading so - * often, resizing is attempted either when a bin lock is - * contended, or upon adding to a bin already holding two or more - * nodes (checked before adding in the xIfAbsent methods, after - * adding in others). Under uniform hash distributions, the - * probability of this occurring at threshold is around 13%, - * meaning that only about 1 in 8 puts check threshold (and after - * resizing, many fewer do so). But this approximation has high - * variance for small table sizes, so we check on any collision - * for sizes <= 64. The bulk putAll operation further reduces - * contention by only committing count updates upon these size - * checks. - * - * Maintaining API and serialization compatibility with previous - * versions of this class introduces several oddities. Mainly: We - * leave untouched but unused constructor arguments refering to - * concurrencyLevel. We accept a loadFactor constructor argument, - * but apply it only to initial table capacity (which is the only - * time that we can guarantee to honor it.) We also declare an - * unused "Segment" class that is instantiated in minimal form - * only when serializing. - */ - - /* ---------------- Constants -------------- */ - - /** - * The largest possible table capacity. This value must be - * exactly 1<<30 to stay within Java array allocation and indexing - * bounds for power of two table sizes, and is further required - * because the top two bits of 32bit hash fields are used for - * control purposes. - */ - private static final int MAXIMUM_CAPACITY = 1 << 30; - - /** - * The default initial table capacity. Must be a power of 2 - * (i.e., at least 1) and at most MAXIMUM_CAPACITY. - */ - private static final int DEFAULT_CAPACITY = 16; - - /** - * The largest possible (non-power of two) array size. - * Needed by toArray and related methods. - */ - static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8; - - /** - * The default concurrency level for this table. Unused but - * defined for compatibility with previous versions of this class. - */ - private static final int DEFAULT_CONCURRENCY_LEVEL = 16; - - /** - * The load factor for this table. Overrides of this value in - * constructors affect only the initial table capacity. The - * actual floating point value isn't normally used -- it is - * simpler to use expressions such as {@code n - (n >>> 2)} for - * the associated resizing threshold. - */ - private static final float LOAD_FACTOR = 0.75f; - - /** - * The buffer size for skipped bins during transfers. The - * value is arbitrary but should be large enough to avoid - * most locking stalls during resizes. - */ - private static final int TRANSFER_BUFFER_SIZE = 32; - - /** - * The bin count threshold for using a tree rather than list for a - * bin. The value reflects the approximate break-even point for - * using tree-based operations. - * Note that Doug's version defaults to 8, but when dealing with - * Ruby objects it is actually beneficial to avoid TreeNodes - * as long as possible as it usually means going into Ruby land. - */ - private static final int TREE_THRESHOLD = 16; - - /* - * Encodings for special uses of Node hash fields. See above for - * explanation. - */ - static final int MOVED = 0x80000000; // hash field for forwarding nodes - static final int LOCKED = 0x40000000; // set/tested only as a bit - static final int WAITING = 0xc0000000; // both bits set/tested together - static final int HASH_BITS = 0x3fffffff; // usable bits of normal node hash - - /* ---------------- Fields -------------- */ - - /** - * The array of bins. Lazily initialized upon first insertion. - * Size is always a power of two. Accessed directly by iterators. - */ - transient volatile AtomicReferenceArray table; - - /** - * The counter maintaining number of elements. - */ - private transient LongAdder counter; - - /** - * Table initialization and resizing control. When negative, the - * table is being initialized or resized. Otherwise, when table is - * null, holds the initial table size to use upon creation, or 0 - * for default. After initialization, holds the next element count - * value upon which to resize the table. - */ - private transient volatile int sizeCtl; - - // views - private transient KeySetView keySet; - private transient ValuesView values; - private transient EntrySetView entrySet; - - /** For serialization compatibility. Null unless serialized; see below */ - private Segment[] segments; - - static AtomicIntegerFieldUpdater SIZE_CTRL_UPDATER = AtomicIntegerFieldUpdater.newUpdater(ConcurrentHashMapV8.class, "sizeCtl"); - - /* ---------------- Table element access -------------- */ - - /* - * Volatile access methods are used for table elements as well as - * elements of in-progress next table while resizing. Uses are - * null checked by callers, and implicitly bounds-checked, relying - * on the invariants that tab arrays have non-zero size, and all - * indices are masked with (tab.length - 1) which is never - * negative and always less than length. Note that, to be correct - * wrt arbitrary concurrency errors by users, bounds checks must - * operate on local variables, which accounts for some odd-looking - * inline assignments below. - */ - - static final Node tabAt(AtomicReferenceArray tab, int i) { // used by Iter - return tab.get(i); - } - - private static final boolean casTabAt(AtomicReferenceArray tab, int i, Node c, Node v) { - return tab.compareAndSet(i, c, v); - } - - private static final void setTabAt(AtomicReferenceArray tab, int i, Node v) { - tab.set(i, v); - } - - /* ---------------- Nodes -------------- */ - - /** - * Key-value entry. Note that this is never exported out as a - * user-visible Map.Entry (see MapEntry below). Nodes with a hash - * field of MOVED are special, and do not contain user keys or - * values. Otherwise, keys are never null, and null val fields - * indicate that a node is in the process of being deleted or - * created. For purposes of read-only access, a key may be read - * before a val, but can only be used after checking val to be - * non-null. - */ - static class Node { - volatile int hash; - final Object key; - volatile Object val; - volatile Node next; - - static AtomicIntegerFieldUpdater HASH_UPDATER = AtomicIntegerFieldUpdater.newUpdater(Node.class, "hash"); - - Node(int hash, Object key, Object val, Node next) { - this.hash = hash; - this.key = key; - this.val = val; - this.next = next; - } - - /** CompareAndSet the hash field */ - final boolean casHash(int cmp, int val) { - return HASH_UPDATER.compareAndSet(this, cmp, val); - } - - /** The number of spins before blocking for a lock */ - static final int MAX_SPINS = - Runtime.getRuntime().availableProcessors() > 1 ? 64 : 1; - - /** - * Spins a while if LOCKED bit set and this node is the first - * of its bin, and then sets WAITING bits on hash field and - * blocks (once) if they are still set. It is OK for this - * method to return even if lock is not available upon exit, - * which enables these simple single-wait mechanics. - * - * The corresponding signalling operation is performed within - * callers: Upon detecting that WAITING has been set when - * unlocking lock (via a failed CAS from non-waiting LOCKED - * state), unlockers acquire the sync lock and perform a - * notifyAll. - * - * The initial sanity check on tab and bounds is not currently - * necessary in the only usages of this method, but enables - * use in other future contexts. - */ - final void tryAwaitLock(AtomicReferenceArray tab, int i) { - if (tab != null && i >= 0 && i < tab.length()) { // sanity check - int r = ThreadLocalRandom.current().nextInt(); // randomize spins - int spins = MAX_SPINS, h; - while (tabAt(tab, i) == this && ((h = hash) & LOCKED) != 0) { - if (spins >= 0) { - r ^= r << 1; r ^= r >>> 3; r ^= r << 10; // xorshift - if (r >= 0 && --spins == 0) - Thread.yield(); // yield before block - } - else if (casHash(h, h | WAITING)) { - synchronized (this) { - if (tabAt(tab, i) == this && - (hash & WAITING) == WAITING) { - try { - wait(); - } catch (InterruptedException ie) { - Thread.currentThread().interrupt(); - } - } - else - notifyAll(); // possibly won race vs signaller - } - break; - } - } - } - } - } - - /* ---------------- TreeBins -------------- */ - - /** - * Nodes for use in TreeBins - */ - static final class TreeNode extends Node { - TreeNode parent; // red-black tree links - TreeNode left; - TreeNode right; - TreeNode prev; // needed to unlink next upon deletion - boolean red; - - TreeNode(int hash, Object key, Object val, Node next, TreeNode parent) { - super(hash, key, val, next); - this.parent = parent; - } - } - - /** - * A specialized form of red-black tree for use in bins - * whose size exceeds a threshold. - * - * TreeBins use a special form of comparison for search and - * related operations (which is the main reason we cannot use - * existing collections such as TreeMaps). TreeBins contain - * Comparable elements, but may contain others, as well as - * elements that are Comparable but not necessarily Comparable - * for the same T, so we cannot invoke compareTo among them. To - * handle this, the tree is ordered primarily by hash value, then - * by getClass().getName() order, and then by Comparator order - * among elements of the same class. On lookup at a node, if - * elements are not comparable or compare as 0, both left and - * right children may need to be searched in the case of tied hash - * values. (This corresponds to the full list search that would be - * necessary if all elements were non-Comparable and had tied - * hashes.) The red-black balancing code is updated from - * pre-jdk-collections - * (http://gee.cs.oswego.edu/dl/classes/collections/RBCell.java) - * based in turn on Cormen, Leiserson, and Rivest "Introduction to - * Algorithms" (CLR). - * - * TreeBins also maintain a separate locking discipline than - * regular bins. Because they are forwarded via special MOVED - * nodes at bin heads (which can never change once established), - * we cannot use those nodes as locks. Instead, TreeBin - * extends AbstractQueuedSynchronizer to support a simple form of - * read-write lock. For update operations and table validation, - * the exclusive form of lock behaves in the same way as bin-head - * locks. However, lookups use shared read-lock mechanics to allow - * multiple readers in the absence of writers. Additionally, - * these lookups do not ever block: While the lock is not - * available, they proceed along the slow traversal path (via - * next-pointers) until the lock becomes available or the list is - * exhausted, whichever comes first. (These cases are not fast, - * but maximize aggregate expected throughput.) The AQS mechanics - * for doing this are straightforward. The lock state is held as - * AQS getState(). Read counts are negative; the write count (1) - * is positive. There are no signalling preferences among readers - * and writers. Since we don't need to export full Lock API, we - * just override the minimal AQS methods and use them directly. - */ - static final class TreeBin extends AbstractQueuedSynchronizer { - private static final long serialVersionUID = 2249069246763182397L; - transient TreeNode root; // root of tree - transient TreeNode first; // head of next-pointer list - - /* AQS overrides */ - public final boolean isHeldExclusively() { return getState() > 0; } - public final boolean tryAcquire(int ignore) { - if (compareAndSetState(0, 1)) { - setExclusiveOwnerThread(Thread.currentThread()); - return true; - } - return false; - } - public final boolean tryRelease(int ignore) { - setExclusiveOwnerThread(null); - setState(0); - return true; - } - public final int tryAcquireShared(int ignore) { - for (int c;;) { - if ((c = getState()) > 0) - return -1; - if (compareAndSetState(c, c -1)) - return 1; - } - } - public final boolean tryReleaseShared(int ignore) { - int c; - do {} while (!compareAndSetState(c = getState(), c + 1)); - return c == -1; - } - - /** From CLR */ - private void rotateLeft(TreeNode p) { - if (p != null) { - TreeNode r = p.right, pp, rl; - if ((rl = p.right = r.left) != null) - rl.parent = p; - if ((pp = r.parent = p.parent) == null) - root = r; - else if (pp.left == p) - pp.left = r; - else - pp.right = r; - r.left = p; - p.parent = r; - } - } - - /** From CLR */ - private void rotateRight(TreeNode p) { - if (p != null) { - TreeNode l = p.left, pp, lr; - if ((lr = p.left = l.right) != null) - lr.parent = p; - if ((pp = l.parent = p.parent) == null) - root = l; - else if (pp.right == p) - pp.right = l; - else - pp.left = l; - l.right = p; - p.parent = l; - } - } - - @SuppressWarnings("unchecked") final TreeNode getTreeNode - (int h, Object k, TreeNode p) { - return getTreeNode(h, (RubyObject)k, p); - } - - /** - * Returns the TreeNode (or null if not found) for the given key - * starting at given root. - */ - @SuppressWarnings("unchecked") final TreeNode getTreeNode - (int h, RubyObject k, TreeNode p) { - RubyClass c = k.getMetaClass(); boolean kNotComparable = !k.respondsTo("<=>"); - while (p != null) { - int dir, ph; RubyObject pk; RubyClass pc; - if ((ph = p.hash) == h) { - if ((pk = (RubyObject)p.key) == k || k.equals(pk)) - return p; - if (c != (pc = (RubyClass)pk.getMetaClass()) || - kNotComparable || - (dir = rubyCompare(k, pk)) == 0) { - dir = (c == pc) ? 0 : c.getName().compareTo(pc.getName()); - if (dir == 0) { // if still stuck, need to check both sides - TreeNode r = null, pl, pr; - // try to recurse on the right - if ((pr = p.right) != null && h >= pr.hash && (r = getTreeNode(h, k, pr)) != null) - return r; - // try to continue iterating on the left side - else if ((pl = p.left) != null && h <= pl.hash) - dir = -1; - else // no matching node found - return null; - } - } - } - else - dir = (h < ph) ? -1 : 1; - p = (dir > 0) ? p.right : p.left; - } - return null; - } - - int rubyCompare(RubyObject l, RubyObject r) { - ThreadContext context = l.getMetaClass().getRuntime().getCurrentContext(); - IRubyObject result; - try { - result = l.callMethod(context, "<=>", r); - } catch (RaiseException e) { - // handle objects "lying" about responding to <=>, ie: an Array containing non-comparable keys - if (context.runtime.getNoMethodError().isInstance(e.getException())) { - return 0; - } - throw e; - } - - return result.isNil() ? 0 : RubyNumeric.num2int(result.convertToInteger()); - } - - /** - * Wrapper for getTreeNode used by CHM.get. Tries to obtain - * read-lock to call getTreeNode, but during failure to get - * lock, searches along next links. - */ - final Object getValue(int h, Object k) { - Node r = null; - int c = getState(); // Must read lock state first - for (Node e = first; e != null; e = e.next) { - if (c <= 0 && compareAndSetState(c, c - 1)) { - try { - r = getTreeNode(h, k, root); - } finally { - releaseShared(0); - } - break; - } - else if ((e.hash & HASH_BITS) == h && k.equals(e.key)) { - r = e; - break; - } - else - c = getState(); - } - return r == null ? null : r.val; - } - - @SuppressWarnings("unchecked") final TreeNode putTreeNode - (int h, Object k, Object v) { - return putTreeNode(h, (RubyObject)k, v); - } - - /** - * Finds or adds a node. - * @return null if added - */ - @SuppressWarnings("unchecked") final TreeNode putTreeNode - (int h, RubyObject k, Object v) { - RubyClass c = k.getMetaClass(); - boolean kNotComparable = !k.respondsTo("<=>"); - TreeNode pp = root, p = null; - int dir = 0; - while (pp != null) { // find existing node or leaf to insert at - int ph; RubyObject pk; RubyClass pc; - p = pp; - if ((ph = p.hash) == h) { - if ((pk = (RubyObject)p.key) == k || k.equals(pk)) - return p; - if (c != (pc = pk.getMetaClass()) || - kNotComparable || - (dir = rubyCompare(k, pk)) == 0) { - dir = (c == pc) ? 0 : c.getName().compareTo(pc.getName()); - if (dir == 0) { // if still stuck, need to check both sides - TreeNode r = null, pr; - // try to recurse on the right - if ((pr = p.right) != null && h >= pr.hash && (r = getTreeNode(h, k, pr)) != null) - return r; - else // continue descending down the left subtree - dir = -1; - } - } - } - else - dir = (h < ph) ? -1 : 1; - pp = (dir > 0) ? p.right : p.left; - } - - TreeNode f = first; - TreeNode x = first = new TreeNode(h, (Object)k, v, f, p); - if (p == null) - root = x; - else { // attach and rebalance; adapted from CLR - TreeNode xp, xpp; - if (f != null) - f.prev = x; - if (dir <= 0) - p.left = x; - else - p.right = x; - x.red = true; - while (x != null && (xp = x.parent) != null && xp.red && - (xpp = xp.parent) != null) { - TreeNode xppl = xpp.left; - if (xp == xppl) { - TreeNode y = xpp.right; - if (y != null && y.red) { - y.red = false; - xp.red = false; - xpp.red = true; - x = xpp; - } - else { - if (x == xp.right) { - rotateLeft(x = xp); - xpp = (xp = x.parent) == null ? null : xp.parent; - } - if (xp != null) { - xp.red = false; - if (xpp != null) { - xpp.red = true; - rotateRight(xpp); - } - } - } - } - else { - TreeNode y = xppl; - if (y != null && y.red) { - y.red = false; - xp.red = false; - xpp.red = true; - x = xpp; - } - else { - if (x == xp.left) { - rotateRight(x = xp); - xpp = (xp = x.parent) == null ? null : xp.parent; - } - if (xp != null) { - xp.red = false; - if (xpp != null) { - xpp.red = true; - rotateLeft(xpp); - } - } - } - } - } - TreeNode r = root; - if (r != null && r.red) - r.red = false; - } - return null; - } - - /** - * Removes the given node, that must be present before this - * call. This is messier than typical red-black deletion code - * because we cannot swap the contents of an interior node - * with a leaf successor that is pinned by "next" pointers - * that are accessible independently of lock. So instead we - * swap the tree linkages. - */ - final void deleteTreeNode(TreeNode p) { - TreeNode next = (TreeNode)p.next; // unlink traversal pointers - TreeNode pred = p.prev; - if (pred == null) - first = next; - else - pred.next = next; - if (next != null) - next.prev = pred; - TreeNode replacement; - TreeNode pl = p.left; - TreeNode pr = p.right; - if (pl != null && pr != null) { - TreeNode s = pr, sl; - while ((sl = s.left) != null) // find successor - s = sl; - boolean c = s.red; s.red = p.red; p.red = c; // swap colors - TreeNode sr = s.right; - TreeNode pp = p.parent; - if (s == pr) { // p was s's direct parent - p.parent = s; - s.right = p; - } - else { - TreeNode sp = s.parent; - if ((p.parent = sp) != null) { - if (s == sp.left) - sp.left = p; - else - sp.right = p; - } - if ((s.right = pr) != null) - pr.parent = s; - } - p.left = null; - if ((p.right = sr) != null) - sr.parent = p; - if ((s.left = pl) != null) - pl.parent = s; - if ((s.parent = pp) == null) - root = s; - else if (p == pp.left) - pp.left = s; - else - pp.right = s; - replacement = sr; - } - else - replacement = (pl != null) ? pl : pr; - TreeNode pp = p.parent; - if (replacement == null) { - if (pp == null) { - root = null; - return; - } - replacement = p; - } - else { - replacement.parent = pp; - if (pp == null) - root = replacement; - else if (p == pp.left) - pp.left = replacement; - else - pp.right = replacement; - p.left = p.right = p.parent = null; - } - if (!p.red) { // rebalance, from CLR - TreeNode x = replacement; - while (x != null) { - TreeNode xp, xpl; - if (x.red || (xp = x.parent) == null) { - x.red = false; - break; - } - if (x == (xpl = xp.left)) { - TreeNode sib = xp.right; - if (sib != null && sib.red) { - sib.red = false; - xp.red = true; - rotateLeft(xp); - sib = (xp = x.parent) == null ? null : xp.right; - } - if (sib == null) - x = xp; - else { - TreeNode sl = sib.left, sr = sib.right; - if ((sr == null || !sr.red) && - (sl == null || !sl.red)) { - sib.red = true; - x = xp; - } - else { - if (sr == null || !sr.red) { - if (sl != null) - sl.red = false; - sib.red = true; - rotateRight(sib); - sib = (xp = x.parent) == null ? null : xp.right; - } - if (sib != null) { - sib.red = (xp == null) ? false : xp.red; - if ((sr = sib.right) != null) - sr.red = false; - } - if (xp != null) { - xp.red = false; - rotateLeft(xp); - } - x = root; - } - } - } - else { // symmetric - TreeNode sib = xpl; - if (sib != null && sib.red) { - sib.red = false; - xp.red = true; - rotateRight(xp); - sib = (xp = x.parent) == null ? null : xp.left; - } - if (sib == null) - x = xp; - else { - TreeNode sl = sib.left, sr = sib.right; - if ((sl == null || !sl.red) && - (sr == null || !sr.red)) { - sib.red = true; - x = xp; - } - else { - if (sl == null || !sl.red) { - if (sr != null) - sr.red = false; - sib.red = true; - rotateLeft(sib); - sib = (xp = x.parent) == null ? null : xp.left; - } - if (sib != null) { - sib.red = (xp == null) ? false : xp.red; - if ((sl = sib.left) != null) - sl.red = false; - } - if (xp != null) { - xp.red = false; - rotateRight(xp); - } - x = root; - } - } - } - } - } - if (p == replacement && (pp = p.parent) != null) { - if (p == pp.left) // detach pointers - pp.left = null; - else if (p == pp.right) - pp.right = null; - p.parent = null; - } - } - } - - /* ---------------- Collision reduction methods -------------- */ - - /** - * Spreads higher bits to lower, and also forces top 2 bits to 0. - * Because the table uses power-of-two masking, sets of hashes - * that vary only in bits above the current mask will always - * collide. (Among known examples are sets of Float keys holding - * consecutive whole numbers in small tables.) To counter this, - * we apply a transform that spreads the impact of higher bits - * downward. There is a tradeoff between speed, utility, and - * quality of bit-spreading. Because many common sets of hashes - * are already reasonably distributed across bits (so don't benefit - * from spreading), and because we use trees to handle large sets - * of collisions in bins, we don't need excessively high quality. - */ - private static final int spread(int h) { - h ^= (h >>> 18) ^ (h >>> 12); - return (h ^ (h >>> 10)) & HASH_BITS; - } - - /** - * Replaces a list bin with a tree bin. Call only when locked. - * Fails to replace if the given key is non-comparable or table - * is, or needs, resizing. - */ - private final void replaceWithTreeBin(AtomicReferenceArray tab, int index, Object key) { - if ((key instanceof Comparable) && - (tab.length() >= MAXIMUM_CAPACITY || counter.sum() < (long)sizeCtl)) { - TreeBin t = new TreeBin(); - for (Node e = tabAt(tab, index); e != null; e = e.next) - t.putTreeNode(e.hash & HASH_BITS, e.key, e.val); - setTabAt(tab, index, new Node(MOVED, t, null, null)); - } - } - - /* ---------------- Internal access and update methods -------------- */ - - /** Implementation for get and containsKey */ - private final Object internalGet(Object k) { - int h = spread(k.hashCode()); - retry: for (AtomicReferenceArray tab = table; tab != null;) { - Node e, p; Object ek, ev; int eh; // locals to read fields once - for (e = tabAt(tab, (tab.length() - 1) & h); e != null; e = e.next) { - if ((eh = e.hash) == MOVED) { - if ((ek = e.key) instanceof TreeBin) // search TreeBin - return ((TreeBin)ek).getValue(h, k); - else { // restart with new table - tab = (AtomicReferenceArray)ek; - continue retry; - } - } - else if ((eh & HASH_BITS) == h && (ev = e.val) != null && - ((ek = e.key) == k || k.equals(ek))) - return ev; - } - break; - } - return null; - } - - /** - * Implementation for the four public remove/replace methods: - * Replaces node value with v, conditional upon match of cv if - * non-null. If resulting value is null, delete. - */ - private final Object internalReplace(Object k, Object v, Object cv) { - int h = spread(k.hashCode()); - Object oldVal = null; - for (AtomicReferenceArray tab = table;;) { - Node f; int i, fh; Object fk; - if (tab == null || - (f = tabAt(tab, i = (tab.length() - 1) & h)) == null) - break; - else if ((fh = f.hash) == MOVED) { - if ((fk = f.key) instanceof TreeBin) { - TreeBin t = (TreeBin)fk; - boolean validated = false; - boolean deleted = false; - t.acquire(0); - try { - if (tabAt(tab, i) == f) { - validated = true; - TreeNode p = t.getTreeNode(h, k, t.root); - if (p != null) { - Object pv = p.val; - if (cv == null || cv == pv || cv.equals(pv)) { - oldVal = pv; - if ((p.val = v) == null) { - deleted = true; - t.deleteTreeNode(p); - } - } - } - } - } finally { - t.release(0); - } - if (validated) { - if (deleted) - counter.add(-1L); - break; - } - } - else - tab = (AtomicReferenceArray)fk; - } - else if ((fh & HASH_BITS) != h && f.next == null) // precheck - break; // rules out possible existence - else if ((fh & LOCKED) != 0) { - checkForResize(); // try resizing if can't get lock - f.tryAwaitLock(tab, i); - } - else if (f.casHash(fh, fh | LOCKED)) { - boolean validated = false; - boolean deleted = false; - try { - if (tabAt(tab, i) == f) { - validated = true; - for (Node e = f, pred = null;;) { - Object ek, ev; - if ((e.hash & HASH_BITS) == h && - ((ev = e.val) != null) && - ((ek = e.key) == k || k.equals(ek))) { - if (cv == null || cv == ev || cv.equals(ev)) { - oldVal = ev; - if ((e.val = v) == null) { - deleted = true; - Node en = e.next; - if (pred != null) - pred.next = en; - else - setTabAt(tab, i, en); - } - } - break; - } - pred = e; - if ((e = e.next) == null) - break; - } - } - } finally { - if (!f.casHash(fh | LOCKED, fh)) { - f.hash = fh; - synchronized (f) { f.notifyAll(); }; - } - } - if (validated) { - if (deleted) - counter.add(-1L); - break; - } - } - } - return oldVal; - } - - /* - * Internal versions of the six insertion methods, each a - * little more complicated than the last. All have - * the same basic structure as the first (internalPut): - * 1. If table uninitialized, create - * 2. If bin empty, try to CAS new node - * 3. If bin stale, use new table - * 4. if bin converted to TreeBin, validate and relay to TreeBin methods - * 5. Lock and validate; if valid, scan and add or update - * - * The others interweave other checks and/or alternative actions: - * * Plain put checks for and performs resize after insertion. - * * putIfAbsent prescans for mapping without lock (and fails to add - * if present), which also makes pre-emptive resize checks worthwhile. - * * computeIfAbsent extends form used in putIfAbsent with additional - * mechanics to deal with, calls, potential exceptions and null - * returns from function call. - * * compute uses the same function-call mechanics, but without - * the prescans - * * merge acts as putIfAbsent in the absent case, but invokes the - * update function if present - * * putAll attempts to pre-allocate enough table space - * and more lazily performs count updates and checks. - * - * Someday when details settle down a bit more, it might be worth - * some factoring to reduce sprawl. - */ - - /** Implementation for put */ - private final Object internalPut(Object k, Object v) { - int h = spread(k.hashCode()); - int count = 0; - for (AtomicReferenceArray tab = table;;) { - int i; Node f; int fh; Object fk; - if (tab == null) - tab = initTable(); - else if ((f = tabAt(tab, i = (tab.length() - 1) & h)) == null) { - if (casTabAt(tab, i, null, new Node(h, k, v, null))) - break; // no lock when adding to empty bin - } - else if ((fh = f.hash) == MOVED) { - if ((fk = f.key) instanceof TreeBin) { - TreeBin t = (TreeBin)fk; - Object oldVal = null; - t.acquire(0); - try { - if (tabAt(tab, i) == f) { - count = 2; - TreeNode p = t.putTreeNode(h, k, v); - if (p != null) { - oldVal = p.val; - p.val = v; - } - } - } finally { - t.release(0); - } - if (count != 0) { - if (oldVal != null) - return oldVal; - break; - } - } - else - tab = (AtomicReferenceArray)fk; - } - else if ((fh & LOCKED) != 0) { - checkForResize(); - f.tryAwaitLock(tab, i); - } - else if (f.casHash(fh, fh | LOCKED)) { - Object oldVal = null; - try { // needed in case equals() throws - if (tabAt(tab, i) == f) { - count = 1; - for (Node e = f;; ++count) { - Object ek, ev; - if ((e.hash & HASH_BITS) == h && - (ev = e.val) != null && - ((ek = e.key) == k || k.equals(ek))) { - oldVal = ev; - e.val = v; - break; - } - Node last = e; - if ((e = e.next) == null) { - last.next = new Node(h, k, v, null); - if (count >= TREE_THRESHOLD) - replaceWithTreeBin(tab, i, k); - break; - } - } - } - } finally { // unlock and signal if needed - if (!f.casHash(fh | LOCKED, fh)) { - f.hash = fh; - synchronized (f) { f.notifyAll(); }; - } - } - if (count != 0) { - if (oldVal != null) - return oldVal; - if (tab.length() <= 64) - count = 2; - break; - } - } - } - counter.add(1L); - if (count > 1) - checkForResize(); - return null; - } - - /** Implementation for putIfAbsent */ - private final Object internalPutIfAbsent(Object k, Object v) { - int h = spread(k.hashCode()); - int count = 0; - for (AtomicReferenceArray tab = table;;) { - int i; Node f; int fh; Object fk, fv; - if (tab == null) - tab = initTable(); - else if ((f = tabAt(tab, i = (tab.length() - 1) & h)) == null) { - if (casTabAt(tab, i, null, new Node(h, k, v, null))) - break; - } - else if ((fh = f.hash) == MOVED) { - if ((fk = f.key) instanceof TreeBin) { - TreeBin t = (TreeBin)fk; - Object oldVal = null; - t.acquire(0); - try { - if (tabAt(tab, i) == f) { - count = 2; - TreeNode p = t.putTreeNode(h, k, v); - if (p != null) - oldVal = p.val; - } - } finally { - t.release(0); - } - if (count != 0) { - if (oldVal != null) - return oldVal; - break; - } - } - else - tab = (AtomicReferenceArray)fk; - } - else if ((fh & HASH_BITS) == h && (fv = f.val) != null && - ((fk = f.key) == k || k.equals(fk))) - return fv; - else { - Node g = f.next; - if (g != null) { // at least 2 nodes -- search and maybe resize - for (Node e = g;;) { - Object ek, ev; - if ((e.hash & HASH_BITS) == h && (ev = e.val) != null && - ((ek = e.key) == k || k.equals(ek))) - return ev; - if ((e = e.next) == null) { - checkForResize(); - break; - } - } - } - if (((fh = f.hash) & LOCKED) != 0) { - checkForResize(); - f.tryAwaitLock(tab, i); - } - else if (tabAt(tab, i) == f && f.casHash(fh, fh | LOCKED)) { - Object oldVal = null; - try { - if (tabAt(tab, i) == f) { - count = 1; - for (Node e = f;; ++count) { - Object ek, ev; - if ((e.hash & HASH_BITS) == h && - (ev = e.val) != null && - ((ek = e.key) == k || k.equals(ek))) { - oldVal = ev; - break; - } - Node last = e; - if ((e = e.next) == null) { - last.next = new Node(h, k, v, null); - if (count >= TREE_THRESHOLD) - replaceWithTreeBin(tab, i, k); - break; - } - } - } - } finally { - if (!f.casHash(fh | LOCKED, fh)) { - f.hash = fh; - synchronized (f) { f.notifyAll(); }; - } - } - if (count != 0) { - if (oldVal != null) - return oldVal; - if (tab.length() <= 64) - count = 2; - break; - } - } - } - } - counter.add(1L); - if (count > 1) - checkForResize(); - return null; - } - - /** Implementation for computeIfAbsent */ - private final Object internalComputeIfAbsent(K k, - Fun mf) { - int h = spread(k.hashCode()); - Object val = null; - int count = 0; - for (AtomicReferenceArray tab = table;;) { - Node f; int i, fh; Object fk, fv; - if (tab == null) - tab = initTable(); - else if ((f = tabAt(tab, i = (tab.length() - 1) & h)) == null) { - Node node = new Node(fh = h | LOCKED, k, null, null); - if (casTabAt(tab, i, null, node)) { - count = 1; - try { - if ((val = mf.apply(k)) != null) - node.val = val; - } finally { - if (val == null) - setTabAt(tab, i, null); - if (!node.casHash(fh, h)) { - node.hash = h; - synchronized (node) { node.notifyAll(); }; - } - } - } - if (count != 0) - break; - } - else if ((fh = f.hash) == MOVED) { - if ((fk = f.key) instanceof TreeBin) { - TreeBin t = (TreeBin)fk; - boolean added = false; - t.acquire(0); - try { - if (tabAt(tab, i) == f) { - count = 1; - TreeNode p = t.getTreeNode(h, k, t.root); - if (p != null) - val = p.val; - else if ((val = mf.apply(k)) != null) { - added = true; - count = 2; - t.putTreeNode(h, k, val); - } - } - } finally { - t.release(0); - } - if (count != 0) { - if (!added) - return val; - break; - } - } - else - tab = (AtomicReferenceArray)fk; - } - else if ((fh & HASH_BITS) == h && (fv = f.val) != null && - ((fk = f.key) == k || k.equals(fk))) - return fv; - else { - Node g = f.next; - if (g != null) { - for (Node e = g;;) { - Object ek, ev; - if ((e.hash & HASH_BITS) == h && (ev = e.val) != null && - ((ek = e.key) == k || k.equals(ek))) - return ev; - if ((e = e.next) == null) { - checkForResize(); - break; - } - } - } - if (((fh = f.hash) & LOCKED) != 0) { - checkForResize(); - f.tryAwaitLock(tab, i); - } - else if (tabAt(tab, i) == f && f.casHash(fh, fh | LOCKED)) { - boolean added = false; - try { - if (tabAt(tab, i) == f) { - count = 1; - for (Node e = f;; ++count) { - Object ek, ev; - if ((e.hash & HASH_BITS) == h && - (ev = e.val) != null && - ((ek = e.key) == k || k.equals(ek))) { - val = ev; - break; - } - Node last = e; - if ((e = e.next) == null) { - if ((val = mf.apply(k)) != null) { - added = true; - last.next = new Node(h, k, val, null); - if (count >= TREE_THRESHOLD) - replaceWithTreeBin(tab, i, k); - } - break; - } - } - } - } finally { - if (!f.casHash(fh | LOCKED, fh)) { - f.hash = fh; - synchronized (f) { f.notifyAll(); }; - } - } - if (count != 0) { - if (!added) - return val; - if (tab.length() <= 64) - count = 2; - break; - } - } - } - } - if (val != null) { - counter.add(1L); - if (count > 1) - checkForResize(); - } - return val; - } - - /** Implementation for compute */ - @SuppressWarnings("unchecked") private final Object internalCompute - (K k, boolean onlyIfPresent, BiFun mf) { - int h = spread(k.hashCode()); - Object val = null; - int delta = 0; - int count = 0; - for (AtomicReferenceArray tab = table;;) { - Node f; int i, fh; Object fk; - if (tab == null) - tab = initTable(); - else if ((f = tabAt(tab, i = (tab.length() - 1) & h)) == null) { - if (onlyIfPresent) - break; - Node node = new Node(fh = h | LOCKED, k, null, null); - if (casTabAt(tab, i, null, node)) { - try { - count = 1; - if ((val = mf.apply(k, null)) != null) { - node.val = val; - delta = 1; - } - } finally { - if (delta == 0) - setTabAt(tab, i, null); - if (!node.casHash(fh, h)) { - node.hash = h; - synchronized (node) { node.notifyAll(); }; - } - } - } - if (count != 0) - break; - } - else if ((fh = f.hash) == MOVED) { - if ((fk = f.key) instanceof TreeBin) { - TreeBin t = (TreeBin)fk; - t.acquire(0); - try { - if (tabAt(tab, i) == f) { - count = 1; - TreeNode p = t.getTreeNode(h, k, t.root); - Object pv; - if (p == null) { - if (onlyIfPresent) - break; - pv = null; - } else - pv = p.val; - if ((val = mf.apply(k, (V)pv)) != null) { - if (p != null) - p.val = val; - else { - count = 2; - delta = 1; - t.putTreeNode(h, k, val); - } - } - else if (p != null) { - delta = -1; - t.deleteTreeNode(p); - } - } - } finally { - t.release(0); - } - if (count != 0) - break; - } - else - tab = (AtomicReferenceArray)fk; - } - else if ((fh & LOCKED) != 0) { - checkForResize(); - f.tryAwaitLock(tab, i); - } - else if (f.casHash(fh, fh | LOCKED)) { - try { - if (tabAt(tab, i) == f) { - count = 1; - for (Node e = f, pred = null;; ++count) { - Object ek, ev; - if ((e.hash & HASH_BITS) == h && - (ev = e.val) != null && - ((ek = e.key) == k || k.equals(ek))) { - val = mf.apply(k, (V)ev); - if (val != null) - e.val = val; - else { - delta = -1; - Node en = e.next; - if (pred != null) - pred.next = en; - else - setTabAt(tab, i, en); - } - break; - } - pred = e; - if ((e = e.next) == null) { - if (!onlyIfPresent && (val = mf.apply(k, null)) != null) { - pred.next = new Node(h, k, val, null); - delta = 1; - if (count >= TREE_THRESHOLD) - replaceWithTreeBin(tab, i, k); - } - break; - } - } - } - } finally { - if (!f.casHash(fh | LOCKED, fh)) { - f.hash = fh; - synchronized (f) { f.notifyAll(); }; - } - } - if (count != 0) { - if (tab.length() <= 64) - count = 2; - break; - } - } - } - if (delta != 0) { - counter.add((long)delta); - if (count > 1) - checkForResize(); - } - return val; - } - - /** Implementation for merge */ - @SuppressWarnings("unchecked") private final Object internalMerge - (K k, V v, BiFun mf) { - int h = spread(k.hashCode()); - Object val = null; - int delta = 0; - int count = 0; - for (AtomicReferenceArray tab = table;;) { - int i; Node f; int fh; Object fk, fv; - if (tab == null) - tab = initTable(); - else if ((f = tabAt(tab, i = (tab.length() - 1) & h)) == null) { - if (casTabAt(tab, i, null, new Node(h, k, v, null))) { - delta = 1; - val = v; - break; - } - } - else if ((fh = f.hash) == MOVED) { - if ((fk = f.key) instanceof TreeBin) { - TreeBin t = (TreeBin)fk; - t.acquire(0); - try { - if (tabAt(tab, i) == f) { - count = 1; - TreeNode p = t.getTreeNode(h, k, t.root); - val = (p == null) ? v : mf.apply((V)p.val, v); - if (val != null) { - if (p != null) - p.val = val; - else { - count = 2; - delta = 1; - t.putTreeNode(h, k, val); - } - } - else if (p != null) { - delta = -1; - t.deleteTreeNode(p); - } - } - } finally { - t.release(0); - } - if (count != 0) - break; - } - else - tab = (AtomicReferenceArray)fk; - } - else if ((fh & LOCKED) != 0) { - checkForResize(); - f.tryAwaitLock(tab, i); - } - else if (f.casHash(fh, fh | LOCKED)) { - try { - if (tabAt(tab, i) == f) { - count = 1; - for (Node e = f, pred = null;; ++count) { - Object ek, ev; - if ((e.hash & HASH_BITS) == h && - (ev = e.val) != null && - ((ek = e.key) == k || k.equals(ek))) { - val = mf.apply((V)ev, v); - if (val != null) - e.val = val; - else { - delta = -1; - Node en = e.next; - if (pred != null) - pred.next = en; - else - setTabAt(tab, i, en); - } - break; - } - pred = e; - if ((e = e.next) == null) { - val = v; - pred.next = new Node(h, k, val, null); - delta = 1; - if (count >= TREE_THRESHOLD) - replaceWithTreeBin(tab, i, k); - break; - } - } - } - } finally { - if (!f.casHash(fh | LOCKED, fh)) { - f.hash = fh; - synchronized (f) { f.notifyAll(); }; - } - } - if (count != 0) { - if (tab.length() <= 64) - count = 2; - break; - } - } - } - if (delta != 0) { - counter.add((long)delta); - if (count > 1) - checkForResize(); - } - return val; - } - - /** Implementation for putAll */ - private final void internalPutAll(Map m) { - tryPresize(m.size()); - long delta = 0L; // number of uncommitted additions - boolean npe = false; // to throw exception on exit for nulls - try { // to clean up counts on other exceptions - for (Map.Entry entry : m.entrySet()) { - Object k, v; - if (entry == null || (k = entry.getKey()) == null || - (v = entry.getValue()) == null) { - npe = true; - break; - } - int h = spread(k.hashCode()); - for (AtomicReferenceArray tab = table;;) { - int i; Node f; int fh; Object fk; - if (tab == null) - tab = initTable(); - else if ((f = tabAt(tab, i = (tab.length() - 1) & h)) == null){ - if (casTabAt(tab, i, null, new Node(h, k, v, null))) { - ++delta; - break; - } - } - else if ((fh = f.hash) == MOVED) { - if ((fk = f.key) instanceof TreeBin) { - TreeBin t = (TreeBin)fk; - boolean validated = false; - t.acquire(0); - try { - if (tabAt(tab, i) == f) { - validated = true; - TreeNode p = t.getTreeNode(h, k, t.root); - if (p != null) - p.val = v; - else { - t.putTreeNode(h, k, v); - ++delta; - } - } - } finally { - t.release(0); - } - if (validated) - break; - } - else - tab = (AtomicReferenceArray)fk; - } - else if ((fh & LOCKED) != 0) { - counter.add(delta); - delta = 0L; - checkForResize(); - f.tryAwaitLock(tab, i); - } - else if (f.casHash(fh, fh | LOCKED)) { - int count = 0; - try { - if (tabAt(tab, i) == f) { - count = 1; - for (Node e = f;; ++count) { - Object ek, ev; - if ((e.hash & HASH_BITS) == h && - (ev = e.val) != null && - ((ek = e.key) == k || k.equals(ek))) { - e.val = v; - break; - } - Node last = e; - if ((e = e.next) == null) { - ++delta; - last.next = new Node(h, k, v, null); - if (count >= TREE_THRESHOLD) - replaceWithTreeBin(tab, i, k); - break; - } - } - } - } finally { - if (!f.casHash(fh | LOCKED, fh)) { - f.hash = fh; - synchronized (f) { f.notifyAll(); }; - } - } - if (count != 0) { - if (count > 1) { - counter.add(delta); - delta = 0L; - checkForResize(); - } - break; - } - } - } - } - } finally { - if (delta != 0) - counter.add(delta); - } - if (npe) - throw new NullPointerException(); - } - - /* ---------------- Table Initialization and Resizing -------------- */ - - /** - * Returns a power of two table size for the given desired capacity. - * See Hackers Delight, sec 3.2 - */ - private static final int tableSizeFor(int c) { - int n = c - 1; - n |= n >>> 1; - n |= n >>> 2; - n |= n >>> 4; - n |= n >>> 8; - n |= n >>> 16; - return (n < 0) ? 1 : (n >= MAXIMUM_CAPACITY) ? MAXIMUM_CAPACITY : n + 1; - } - - /** - * Initializes table, using the size recorded in sizeCtl. - */ - private final AtomicReferenceArray initTable() { - AtomicReferenceArray tab; int sc; - while ((tab = table) == null) { - if ((sc = sizeCtl) < 0) - Thread.yield(); // lost initialization race; just spin - else if (SIZE_CTRL_UPDATER.compareAndSet(this, sc, -1)) { - try { - if ((tab = table) == null) { - int n = (sc > 0) ? sc : DEFAULT_CAPACITY; - tab = table = new AtomicReferenceArray(n); - sc = n - (n >>> 2); - } - } finally { - sizeCtl = sc; - } - break; - } - } - return tab; - } - - /** - * If table is too small and not already resizing, creates next - * table and transfers bins. Rechecks occupancy after a transfer - * to see if another resize is already needed because resizings - * are lagging additions. - */ - private final void checkForResize() { - AtomicReferenceArray tab; int n, sc; - while ((tab = table) != null && - (n = tab.length()) < MAXIMUM_CAPACITY && - (sc = sizeCtl) >= 0 && counter.sum() >= (long)sc && - SIZE_CTRL_UPDATER.compareAndSet(this, sc, -1)) { - try { - if (tab == table) { - table = rebuild(tab); - sc = (n << 1) - (n >>> 1); - } - } finally { - sizeCtl = sc; - } - } - } - - /** - * Tries to presize table to accommodate the given number of elements. - * - * @param size number of elements (doesn't need to be perfectly accurate) - */ - private final void tryPresize(int size) { - int c = (size >= (MAXIMUM_CAPACITY >>> 1)) ? MAXIMUM_CAPACITY : - tableSizeFor(size + (size >>> 1) + 1); - int sc; - while ((sc = sizeCtl) >= 0) { - AtomicReferenceArray tab = table; int n; - if (tab == null || (n = tab.length()) == 0) { - n = (sc > c) ? sc : c; - if (SIZE_CTRL_UPDATER.compareAndSet(this, sc, -1)) { - try { - if (table == tab) { - table = new AtomicReferenceArray(n); - sc = n - (n >>> 2); - } - } finally { - sizeCtl = sc; - } - } - } - else if (c <= sc || n >= MAXIMUM_CAPACITY) - break; - else if (SIZE_CTRL_UPDATER.compareAndSet(this, sc, -1)) { - try { - if (table == tab) { - table = rebuild(tab); - sc = (n << 1) - (n >>> 1); - } - } finally { - sizeCtl = sc; - } - } - } - } - - /* - * Moves and/or copies the nodes in each bin to new table. See - * above for explanation. - * - * @return the new table - */ - private static final AtomicReferenceArray rebuild(AtomicReferenceArray tab) { - int n = tab.length(); - AtomicReferenceArray nextTab = new AtomicReferenceArray(n << 1); - Node fwd = new Node(MOVED, nextTab, null, null); - int[] buffer = null; // holds bins to revisit; null until needed - Node rev = null; // reverse forwarder; null until needed - int nbuffered = 0; // the number of bins in buffer list - int bufferIndex = 0; // buffer index of current buffered bin - int bin = n - 1; // current non-buffered bin or -1 if none - - for (int i = bin;;) { // start upwards sweep - int fh; Node f; - if ((f = tabAt(tab, i)) == null) { - if (bin >= 0) { // Unbuffered; no lock needed (or available) - if (!casTabAt(tab, i, f, fwd)) - continue; - } - else { // transiently use a locked forwarding node - Node g = new Node(MOVED|LOCKED, nextTab, null, null); - if (!casTabAt(tab, i, f, g)) - continue; - setTabAt(nextTab, i, null); - setTabAt(nextTab, i + n, null); - setTabAt(tab, i, fwd); - if (!g.casHash(MOVED|LOCKED, MOVED)) { - g.hash = MOVED; - synchronized (g) { g.notifyAll(); } - } - } - } - else if ((fh = f.hash) == MOVED) { - Object fk = f.key; - if (fk instanceof TreeBin) { - TreeBin t = (TreeBin)fk; - boolean validated = false; - t.acquire(0); - try { - if (tabAt(tab, i) == f) { - validated = true; - splitTreeBin(nextTab, i, t); - setTabAt(tab, i, fwd); - } - } finally { - t.release(0); - } - if (!validated) - continue; - } - } - else if ((fh & LOCKED) == 0 && f.casHash(fh, fh|LOCKED)) { - boolean validated = false; - try { // split to lo and hi lists; copying as needed - if (tabAt(tab, i) == f) { - validated = true; - splitBin(nextTab, i, f); - setTabAt(tab, i, fwd); - } - } finally { - if (!f.casHash(fh | LOCKED, fh)) { - f.hash = fh; - synchronized (f) { f.notifyAll(); }; - } - } - if (!validated) - continue; - } - else { - if (buffer == null) // initialize buffer for revisits - buffer = new int[TRANSFER_BUFFER_SIZE]; - if (bin < 0 && bufferIndex > 0) { - int j = buffer[--bufferIndex]; - buffer[bufferIndex] = i; - i = j; // swap with another bin - continue; - } - if (bin < 0 || nbuffered >= TRANSFER_BUFFER_SIZE) { - f.tryAwaitLock(tab, i); - continue; // no other options -- block - } - if (rev == null) // initialize reverse-forwarder - rev = new Node(MOVED, tab, null, null); - if (tabAt(tab, i) != f || (f.hash & LOCKED) == 0) - continue; // recheck before adding to list - buffer[nbuffered++] = i; - setTabAt(nextTab, i, rev); // install place-holders - setTabAt(nextTab, i + n, rev); - } - - if (bin > 0) - i = --bin; - else if (buffer != null && nbuffered > 0) { - bin = -1; - i = buffer[bufferIndex = --nbuffered]; - } - else - return nextTab; - } - } - - /** - * Splits a normal bin with list headed by e into lo and hi parts; - * installs in given table. - */ - private static void splitBin(AtomicReferenceArray nextTab, int i, Node e) { - int bit = nextTab.length() >>> 1; // bit to split on - int runBit = e.hash & bit; - Node lastRun = e, lo = null, hi = null; - for (Node p = e.next; p != null; p = p.next) { - int b = p.hash & bit; - if (b != runBit) { - runBit = b; - lastRun = p; - } - } - if (runBit == 0) - lo = lastRun; - else - hi = lastRun; - for (Node p = e; p != lastRun; p = p.next) { - int ph = p.hash & HASH_BITS; - Object pk = p.key, pv = p.val; - if ((ph & bit) == 0) - lo = new Node(ph, pk, pv, lo); - else - hi = new Node(ph, pk, pv, hi); - } - setTabAt(nextTab, i, lo); - setTabAt(nextTab, i + bit, hi); - } - - /** - * Splits a tree bin into lo and hi parts; installs in given table. - */ - private static void splitTreeBin(AtomicReferenceArray nextTab, int i, TreeBin t) { - int bit = nextTab.length() >>> 1; - TreeBin lt = new TreeBin(); - TreeBin ht = new TreeBin(); - int lc = 0, hc = 0; - for (Node e = t.first; e != null; e = e.next) { - int h = e.hash & HASH_BITS; - Object k = e.key, v = e.val; - if ((h & bit) == 0) { - ++lc; - lt.putTreeNode(h, k, v); - } - else { - ++hc; - ht.putTreeNode(h, k, v); - } - } - Node ln, hn; // throw away trees if too small - if (lc <= (TREE_THRESHOLD >>> 1)) { - ln = null; - for (Node p = lt.first; p != null; p = p.next) - ln = new Node(p.hash, p.key, p.val, ln); - } - else - ln = new Node(MOVED, lt, null, null); - setTabAt(nextTab, i, ln); - if (hc <= (TREE_THRESHOLD >>> 1)) { - hn = null; - for (Node p = ht.first; p != null; p = p.next) - hn = new Node(p.hash, p.key, p.val, hn); - } - else - hn = new Node(MOVED, ht, null, null); - setTabAt(nextTab, i + bit, hn); - } - - /** - * Implementation for clear. Steps through each bin, removing all - * nodes. - */ - private final void internalClear() { - long delta = 0L; // negative number of deletions - int i = 0; - AtomicReferenceArray tab = table; - while (tab != null && i < tab.length()) { - int fh; Object fk; - Node f = tabAt(tab, i); - if (f == null) - ++i; - else if ((fh = f.hash) == MOVED) { - if ((fk = f.key) instanceof TreeBin) { - TreeBin t = (TreeBin)fk; - t.acquire(0); - try { - if (tabAt(tab, i) == f) { - for (Node p = t.first; p != null; p = p.next) { - if (p.val != null) { // (currently always true) - p.val = null; - --delta; - } - } - t.first = null; - t.root = null; - ++i; - } - } finally { - t.release(0); - } - } - else - tab = (AtomicReferenceArray)fk; - } - else if ((fh & LOCKED) != 0) { - counter.add(delta); // opportunistically update count - delta = 0L; - f.tryAwaitLock(tab, i); - } - else if (f.casHash(fh, fh | LOCKED)) { - try { - if (tabAt(tab, i) == f) { - for (Node e = f; e != null; e = e.next) { - if (e.val != null) { // (currently always true) - e.val = null; - --delta; - } - } - setTabAt(tab, i, null); - ++i; - } - } finally { - if (!f.casHash(fh | LOCKED, fh)) { - f.hash = fh; - synchronized (f) { f.notifyAll(); }; - } - } - } - } - if (delta != 0) - counter.add(delta); - } - - /* ----------------Table Traversal -------------- */ - - /** - * Encapsulates traversal for methods such as containsValue; also - * serves as a base class for other iterators and bulk tasks. - * - * At each step, the iterator snapshots the key ("nextKey") and - * value ("nextVal") of a valid node (i.e., one that, at point of - * snapshot, has a non-null user value). Because val fields can - * change (including to null, indicating deletion), field nextVal - * might not be accurate at point of use, but still maintains the - * weak consistency property of holding a value that was once - * valid. To support iterator.remove, the nextKey field is not - * updated (nulled out) when the iterator cannot advance. - * - * Internal traversals directly access these fields, as in: - * {@code while (it.advance() != null) { process(it.nextKey); }} - * - * Exported iterators must track whether the iterator has advanced - * (in hasNext vs next) (by setting/checking/nulling field - * nextVal), and then extract key, value, or key-value pairs as - * return values of next(). - * - * The iterator visits once each still-valid node that was - * reachable upon iterator construction. It might miss some that - * were added to a bin after the bin was visited, which is OK wrt - * consistency guarantees. Maintaining this property in the face - * of possible ongoing resizes requires a fair amount of - * bookkeeping state that is difficult to optimize away amidst - * volatile accesses. Even so, traversal maintains reasonable - * throughput. - * - * Normally, iteration proceeds bin-by-bin traversing lists. - * However, if the table has been resized, then all future steps - * must traverse both the bin at the current index as well as at - * (index + baseSize); and so on for further resizings. To - * paranoically cope with potential sharing by users of iterators - * across threads, iteration terminates if a bounds checks fails - * for a table read. - * - * This class extends ForkJoinTask to streamline parallel - * iteration in bulk operations (see BulkTask). This adds only an - * int of space overhead, which is close enough to negligible in - * cases where it is not needed to not worry about it. Because - * ForkJoinTask is Serializable, but iterators need not be, we - * need to add warning suppressions. - */ - @SuppressWarnings("serial") static class Traverser { - final ConcurrentHashMapV8 map; - Node next; // the next entry to use - K nextKey; // cached key field of next - V nextVal; // cached val field of next - AtomicReferenceArray tab; // current table; updated if resized - int index; // index of bin to use next - int baseIndex; // current index of initial table - int baseLimit; // index bound for initial table - int baseSize; // initial table size - - /** Creates iterator for all entries in the table. */ - Traverser(ConcurrentHashMapV8 map) { - this.map = map; - } - - /** Creates iterator for split() methods */ - Traverser(Traverser it) { - ConcurrentHashMapV8 m; AtomicReferenceArray t; - if ((m = this.map = it.map) == null) - t = null; - else if ((t = it.tab) == null && // force parent tab initialization - (t = it.tab = m.table) != null) - it.baseLimit = it.baseSize = t.length(); - this.tab = t; - this.baseSize = it.baseSize; - it.baseLimit = this.index = this.baseIndex = - ((this.baseLimit = it.baseLimit) + it.baseIndex + 1) >>> 1; - } - - /** - * Advances next; returns nextVal or null if terminated. - * See above for explanation. - */ - final V advance() { - Node e = next; - V ev = null; - outer: do { - if (e != null) // advance past used/skipped node - e = e.next; - while (e == null) { // get to next non-null bin - ConcurrentHashMapV8 m; - AtomicReferenceArray t; int b, i, n; Object ek; // checks must use locals - if ((t = tab) != null) - n = t.length(); - else if ((m = map) != null && (t = tab = m.table) != null) - n = baseLimit = baseSize = t.length(); - else - break outer; - if ((b = baseIndex) >= baseLimit || - (i = index) < 0 || i >= n) - break outer; - if ((e = tabAt(t, i)) != null && e.hash == MOVED) { - if ((ek = e.key) instanceof TreeBin) - e = ((TreeBin)ek).first; - else { - tab = (AtomicReferenceArray)ek; - continue; // restarts due to null val - } - } // visit upper slots if present - index = (i += baseSize) < n ? i : (baseIndex = b + 1); - } - nextKey = (K) e.key; - } while ((ev = (V) e.val) == null); // skip deleted or special nodes - next = e; - return nextVal = ev; - } - - public final void remove() { - Object k = nextKey; - if (k == null && (advance() == null || (k = nextKey) == null)) - throw new IllegalStateException(); - map.internalReplace(k, null, null); - } - - public final boolean hasNext() { - return nextVal != null || advance() != null; - } - - public final boolean hasMoreElements() { return hasNext(); } - public final void setRawResult(Object x) { } - public R getRawResult() { return null; } - public boolean exec() { return true; } - } - - /* ---------------- Public operations -------------- */ - - /** - * Creates a new, empty map with the default initial table size (16). - */ - public ConcurrentHashMapV8() { - this.counter = new LongAdder(); - } - - /** - * Creates a new, empty map with an initial table size - * accommodating the specified number of elements without the need - * to dynamically resize. - * - * @param initialCapacity The implementation performs internal - * sizing to accommodate this many elements. - * @throws IllegalArgumentException if the initial capacity of - * elements is negative - */ - public ConcurrentHashMapV8(int initialCapacity) { - if (initialCapacity < 0) - throw new IllegalArgumentException(); - int cap = ((initialCapacity >= (MAXIMUM_CAPACITY >>> 1)) ? - MAXIMUM_CAPACITY : - tableSizeFor(initialCapacity + (initialCapacity >>> 1) + 1)); - this.counter = new LongAdder(); - this.sizeCtl = cap; - } - - /** - * Creates a new map with the same mappings as the given map. - * - * @param m the map - */ - public ConcurrentHashMapV8(Map m) { - this.counter = new LongAdder(); - this.sizeCtl = DEFAULT_CAPACITY; - internalPutAll(m); - } - - /** - * Creates a new, empty map with an initial table size based on - * the given number of elements ({@code initialCapacity}) and - * initial table density ({@code loadFactor}). - * - * @param initialCapacity the initial capacity. The implementation - * performs internal sizing to accommodate this many elements, - * given the specified load factor. - * @param loadFactor the load factor (table density) for - * establishing the initial table size - * @throws IllegalArgumentException if the initial capacity of - * elements is negative or the load factor is nonpositive - * - * @since 1.6 - */ - public ConcurrentHashMapV8(int initialCapacity, float loadFactor) { - this(initialCapacity, loadFactor, 1); - } - - /** - * Creates a new, empty map with an initial table size based on - * the given number of elements ({@code initialCapacity}), table - * density ({@code loadFactor}), and number of concurrently - * updating threads ({@code concurrencyLevel}). - * - * @param initialCapacity the initial capacity. The implementation - * performs internal sizing to accommodate this many elements, - * given the specified load factor. - * @param loadFactor the load factor (table density) for - * establishing the initial table size - * @param concurrencyLevel the estimated number of concurrently - * updating threads. The implementation may use this value as - * a sizing hint. - * @throws IllegalArgumentException if the initial capacity is - * negative or the load factor or concurrencyLevel are - * nonpositive - */ - public ConcurrentHashMapV8(int initialCapacity, - float loadFactor, int concurrencyLevel) { - if (!(loadFactor > 0.0f) || initialCapacity < 0 || concurrencyLevel <= 0) - throw new IllegalArgumentException(); - if (initialCapacity < concurrencyLevel) // Use at least as many bins - initialCapacity = concurrencyLevel; // as estimated threads - long size = (long)(1.0 + (long)initialCapacity / loadFactor); - int cap = (size >= (long)MAXIMUM_CAPACITY) ? - MAXIMUM_CAPACITY : tableSizeFor((int)size); - this.counter = new LongAdder(); - this.sizeCtl = cap; - } - - /** - * Creates a new {@link Set} backed by a ConcurrentHashMapV8 - * from the given type to {@code Boolean.TRUE}. - * - * @return the new set - */ - public static KeySetView newKeySet() { - return new KeySetView(new ConcurrentHashMapV8(), - Boolean.TRUE); - } - - /** - * Creates a new {@link Set} backed by a ConcurrentHashMapV8 - * from the given type to {@code Boolean.TRUE}. - * - * @param initialCapacity The implementation performs internal - * sizing to accommodate this many elements. - * @throws IllegalArgumentException if the initial capacity of - * elements is negative - * @return the new set - */ - public static KeySetView newKeySet(int initialCapacity) { - return new KeySetView(new ConcurrentHashMapV8(initialCapacity), - Boolean.TRUE); - } - - /** - * {@inheritDoc} - */ - public boolean isEmpty() { - return counter.sum() <= 0L; // ignore transient negative values - } - - /** - * {@inheritDoc} - */ - public int size() { - long n = counter.sum(); - return ((n < 0L) ? 0 : - (n > (long)Integer.MAX_VALUE) ? Integer.MAX_VALUE : - (int)n); - } - - /** - * Returns the number of mappings. This method should be used - * instead of {@link #size} because a ConcurrentHashMapV8 may - * contain more mappings than can be represented as an int. The - * value returned is a snapshot; the actual count may differ if - * there are ongoing concurrent insertions or removals. - * - * @return the number of mappings - */ - public long mappingCount() { - long n = counter.sum(); - return (n < 0L) ? 0L : n; // ignore transient negative values - } - - /** - * Returns the value to which the specified key is mapped, - * or {@code null} if this map contains no mapping for the key. - * - *

    More formally, if this map contains a mapping from a key - * {@code k} to a value {@code v} such that {@code key.equals(k)}, - * then this method returns {@code v}; otherwise it returns - * {@code null}. (There can be at most one such mapping.) - * - * @throws NullPointerException if the specified key is null - */ - @SuppressWarnings("unchecked") public V get(Object key) { - if (key == null) - throw new NullPointerException(); - return (V)internalGet(key); - } - - /** - * Returns the value to which the specified key is mapped, - * or the given defaultValue if this map contains no mapping for the key. - * - * @param key the key - * @param defaultValue the value to return if this map contains - * no mapping for the given key - * @return the mapping for the key, if present; else the defaultValue - * @throws NullPointerException if the specified key is null - */ - @SuppressWarnings("unchecked") public V getValueOrDefault(Object key, V defaultValue) { - if (key == null) - throw new NullPointerException(); - V v = (V) internalGet(key); - return v == null ? defaultValue : v; - } - - /** - * Tests if the specified object is a key in this table. - * - * @param key possible key - * @return {@code true} if and only if the specified object - * is a key in this table, as determined by the - * {@code equals} method; {@code false} otherwise - * @throws NullPointerException if the specified key is null - */ - public boolean containsKey(Object key) { - if (key == null) - throw new NullPointerException(); - return internalGet(key) != null; - } - - /** - * Returns {@code true} if this map maps one or more keys to the - * specified value. Note: This method may require a full traversal - * of the map, and is much slower than method {@code containsKey}. - * - * @param value value whose presence in this map is to be tested - * @return {@code true} if this map maps one or more keys to the - * specified value - * @throws NullPointerException if the specified value is null - */ - public boolean containsValue(Object value) { - if (value == null) - throw new NullPointerException(); - Object v; - Traverser it = new Traverser(this); - while ((v = it.advance()) != null) { - if (v == value || value.equals(v)) - return true; - } - return false; - } - - public K findKey(Object value) { - if (value == null) - throw new NullPointerException(); - Object v; - Traverser it = new Traverser(this); - while ((v = it.advance()) != null) { - if (v == value || value.equals(v)) - return it.nextKey; - } - return null; - } - - /** - * Legacy method testing if some key maps into the specified value - * in this table. This method is identical in functionality to - * {@link #containsValue}, and exists solely to ensure - * full compatibility with class {@link java.util.Hashtable}, - * which supported this method prior to introduction of the - * Java Collections framework. - * - * @param value a value to search for - * @return {@code true} if and only if some key maps to the - * {@code value} argument in this table as - * determined by the {@code equals} method; - * {@code false} otherwise - * @throws NullPointerException if the specified value is null - */ - public boolean contains(Object value) { - return containsValue(value); - } - - /** - * Maps the specified key to the specified value in this table. - * Neither the key nor the value can be null. - * - *

    The value can be retrieved by calling the {@code get} method - * with a key that is equal to the original key. - * - * @param key key with which the specified value is to be associated - * @param value value to be associated with the specified key - * @return the previous value associated with {@code key}, or - * {@code null} if there was no mapping for {@code key} - * @throws NullPointerException if the specified key or value is null - */ - @SuppressWarnings("unchecked") public V put(K key, V value) { - if (key == null || value == null) - throw new NullPointerException(); - return (V)internalPut(key, value); - } - - /** - * {@inheritDoc} - * - * @return the previous value associated with the specified key, - * or {@code null} if there was no mapping for the key - * @throws NullPointerException if the specified key or value is null - */ - @SuppressWarnings("unchecked") public V putIfAbsent(K key, V value) { - if (key == null || value == null) - throw new NullPointerException(); - return (V)internalPutIfAbsent(key, value); - } - - /** - * Copies all of the mappings from the specified map to this one. - * These mappings replace any mappings that this map had for any of the - * keys currently in the specified map. - * - * @param m mappings to be stored in this map - */ - public void putAll(Map m) { - internalPutAll(m); - } - - /** - * If the specified key is not already associated with a value, - * computes its value using the given mappingFunction and enters - * it into the map unless null. This is equivalent to - *

     {@code
    -     * if (map.containsKey(key))
    -     *   return map.get(key);
    -     * value = mappingFunction.apply(key);
    -     * if (value != null)
    -     *   map.put(key, value);
    -     * return value;}
    - * - * except that the action is performed atomically. If the - * function returns {@code null} no mapping is recorded. If the - * function itself throws an (unchecked) exception, the exception - * is rethrown to its caller, and no mapping is recorded. Some - * attempted update operations on this map by other threads may be - * blocked while computation is in progress, so the computation - * should be short and simple, and must not attempt to update any - * other mappings of this Map. The most appropriate usage is to - * construct a new object serving as an initial mapped value, or - * memoized result, as in: - * - *
     {@code
    -     * map.computeIfAbsent(key, new Fun() {
    -     *   public V map(K k) { return new Value(f(k)); }});}
    - * - * @param key key with which the specified value is to be associated - * @param mappingFunction the function to compute a value - * @return the current (existing or computed) value associated with - * the specified key, or null if the computed value is null - * @throws NullPointerException if the specified key or mappingFunction - * is null - * @throws IllegalStateException if the computation detectably - * attempts a recursive update to this map that would - * otherwise never complete - * @throws RuntimeException or Error if the mappingFunction does so, - * in which case the mapping is left unestablished - */ - @SuppressWarnings("unchecked") public V computeIfAbsent - (K key, Fun mappingFunction) { - if (key == null || mappingFunction == null) - throw new NullPointerException(); - return (V)internalComputeIfAbsent(key, mappingFunction); - } - - /** - * If the given key is present, computes a new mapping value given a key and - * its current mapped value. This is equivalent to - *
     {@code
    -     *   if (map.containsKey(key)) {
    -     *     value = remappingFunction.apply(key, map.get(key));
    -     *     if (value != null)
    -     *       map.put(key, value);
    -     *     else
    -     *       map.remove(key);
    -     *   }
    -     * }
    - * - * except that the action is performed atomically. If the - * function returns {@code null}, the mapping is removed. If the - * function itself throws an (unchecked) exception, the exception - * is rethrown to its caller, and the current mapping is left - * unchanged. Some attempted update operations on this map by - * other threads may be blocked while computation is in progress, - * so the computation should be short and simple, and must not - * attempt to update any other mappings of this Map. For example, - * to either create or append new messages to a value mapping: - * - * @param key key with which the specified value is to be associated - * @param remappingFunction the function to compute a value - * @return the new value associated with the specified key, or null if none - * @throws NullPointerException if the specified key or remappingFunction - * is null - * @throws IllegalStateException if the computation detectably - * attempts a recursive update to this map that would - * otherwise never complete - * @throws RuntimeException or Error if the remappingFunction does so, - * in which case the mapping is unchanged - */ - @SuppressWarnings("unchecked") public V computeIfPresent - (K key, BiFun remappingFunction) { - if (key == null || remappingFunction == null) - throw new NullPointerException(); - return (V)internalCompute(key, true, remappingFunction); - } - - /** - * Computes a new mapping value given a key and - * its current mapped value (or {@code null} if there is no current - * mapping). This is equivalent to - *
     {@code
    -     *   value = remappingFunction.apply(key, map.get(key));
    -     *   if (value != null)
    -     *     map.put(key, value);
    -     *   else
    -     *     map.remove(key);
    -     * }
    - * - * except that the action is performed atomically. If the - * function returns {@code null}, the mapping is removed. If the - * function itself throws an (unchecked) exception, the exception - * is rethrown to its caller, and the current mapping is left - * unchanged. Some attempted update operations on this map by - * other threads may be blocked while computation is in progress, - * so the computation should be short and simple, and must not - * attempt to update any other mappings of this Map. For example, - * to either create or append new messages to a value mapping: - * - *
     {@code
    -     * Map map = ...;
    -     * final String msg = ...;
    -     * map.compute(key, new BiFun() {
    -     *   public String apply(Key k, String v) {
    -     *    return (v == null) ? msg : v + msg;});}}
    - * - * @param key key with which the specified value is to be associated - * @param remappingFunction the function to compute a value - * @return the new value associated with the specified key, or null if none - * @throws NullPointerException if the specified key or remappingFunction - * is null - * @throws IllegalStateException if the computation detectably - * attempts a recursive update to this map that would - * otherwise never complete - * @throws RuntimeException or Error if the remappingFunction does so, - * in which case the mapping is unchanged - */ - @SuppressWarnings("unchecked") public V compute - (K key, BiFun remappingFunction) { - if (key == null || remappingFunction == null) - throw new NullPointerException(); - return (V)internalCompute(key, false, remappingFunction); - } - - /** - * If the specified key is not already associated - * with a value, associate it with the given value. - * Otherwise, replace the value with the results of - * the given remapping function. This is equivalent to: - *
     {@code
    -     *   if (!map.containsKey(key))
    -     *     map.put(value);
    -     *   else {
    -     *     newValue = remappingFunction.apply(map.get(key), value);
    -     *     if (value != null)
    -     *       map.put(key, value);
    -     *     else
    -     *       map.remove(key);
    -     *   }
    -     * }
    - * except that the action is performed atomically. If the - * function returns {@code null}, the mapping is removed. If the - * function itself throws an (unchecked) exception, the exception - * is rethrown to its caller, and the current mapping is left - * unchanged. Some attempted update operations on this map by - * other threads may be blocked while computation is in progress, - * so the computation should be short and simple, and must not - * attempt to update any other mappings of this Map. - */ - @SuppressWarnings("unchecked") public V merge - (K key, V value, BiFun remappingFunction) { - if (key == null || value == null || remappingFunction == null) - throw new NullPointerException(); - return (V)internalMerge(key, value, remappingFunction); - } - - /** - * Removes the key (and its corresponding value) from this map. - * This method does nothing if the key is not in the map. - * - * @param key the key that needs to be removed - * @return the previous value associated with {@code key}, or - * {@code null} if there was no mapping for {@code key} - * @throws NullPointerException if the specified key is null - */ - @SuppressWarnings("unchecked") public V remove(Object key) { - if (key == null) - throw new NullPointerException(); - return (V)internalReplace(key, null, null); - } - - /** - * {@inheritDoc} - * - * @throws NullPointerException if the specified key is null - */ - public boolean remove(Object key, Object value) { - if (key == null) - throw new NullPointerException(); - if (value == null) - return false; - return internalReplace(key, null, value) != null; - } - - /** - * {@inheritDoc} - * - * @throws NullPointerException if any of the arguments are null - */ - public boolean replace(K key, V oldValue, V newValue) { - if (key == null || oldValue == null || newValue == null) - throw new NullPointerException(); - return internalReplace(key, newValue, oldValue) != null; - } - - /** - * {@inheritDoc} - * - * @return the previous value associated with the specified key, - * or {@code null} if there was no mapping for the key - * @throws NullPointerException if the specified key or value is null - */ - @SuppressWarnings("unchecked") public V replace(K key, V value) { - if (key == null || value == null) - throw new NullPointerException(); - return (V)internalReplace(key, value, null); - } - - /** - * Removes all of the mappings from this map. - */ - public void clear() { - internalClear(); - } - - /** - * Returns a {@link Set} view of the keys contained in this map. - * The set is backed by the map, so changes to the map are - * reflected in the set, and vice-versa. - * - * @return the set view - */ - public KeySetView keySet() { - KeySetView ks = keySet; - return (ks != null) ? ks : (keySet = new KeySetView(this, null)); - } - - /** - * Returns a {@link Set} view of the keys in this map, using the - * given common mapped value for any additions (i.e., {@link - * Collection#add} and {@link Collection#addAll}). This is of - * course only appropriate if it is acceptable to use the same - * value for all additions from this view. - * - * @param mappedValue the mapped value to use for any - * additions. - * @return the set view - * @throws NullPointerException if the mappedValue is null - */ - public KeySetView keySet(V mappedValue) { - if (mappedValue == null) - throw new NullPointerException(); - return new KeySetView(this, mappedValue); - } - - /** - * Returns a {@link Collection} view of the values contained in this map. - * The collection is backed by the map, so changes to the map are - * reflected in the collection, and vice-versa. - */ - public ValuesView values() { - ValuesView vs = values; - return (vs != null) ? vs : (values = new ValuesView(this)); - } - - /** - * Returns a {@link Set} view of the mappings contained in this map. - * The set is backed by the map, so changes to the map are - * reflected in the set, and vice-versa. The set supports element - * removal, which removes the corresponding mapping from the map, - * via the {@code Iterator.remove}, {@code Set.remove}, - * {@code removeAll}, {@code retainAll}, and {@code clear} - * operations. It does not support the {@code add} or - * {@code addAll} operations. - * - *

    The view's {@code iterator} is a "weakly consistent" iterator - * that will never throw {@link ConcurrentModificationException}, - * and guarantees to traverse elements as they existed upon - * construction of the iterator, and may (but is not guaranteed to) - * reflect any modifications subsequent to construction. - */ - public Set> entrySet() { - EntrySetView es = entrySet; - return (es != null) ? es : (entrySet = new EntrySetView(this)); - } - - /** - * Returns an enumeration of the keys in this table. - * - * @return an enumeration of the keys in this table - * @see #keySet() - */ - public Enumeration keys() { - return new KeyIterator(this); - } - - /** - * Returns an enumeration of the values in this table. - * - * @return an enumeration of the values in this table - * @see #values() - */ - public Enumeration elements() { - return new ValueIterator(this); - } - - /** - * Returns a partitionable iterator of the keys in this map. - * - * @return a partitionable iterator of the keys in this map - */ - public Spliterator keySpliterator() { - return new KeyIterator(this); - } - - /** - * Returns a partitionable iterator of the values in this map. - * - * @return a partitionable iterator of the values in this map - */ - public Spliterator valueSpliterator() { - return new ValueIterator(this); - } - - /** - * Returns a partitionable iterator of the entries in this map. - * - * @return a partitionable iterator of the entries in this map - */ - public Spliterator> entrySpliterator() { - return new EntryIterator(this); - } - - /** - * Returns the hash code value for this {@link Map}, i.e., - * the sum of, for each key-value pair in the map, - * {@code key.hashCode() ^ value.hashCode()}. - * - * @return the hash code value for this map - */ - public int hashCode() { - int h = 0; - Traverser it = new Traverser(this); - Object v; - while ((v = it.advance()) != null) { - h += it.nextKey.hashCode() ^ v.hashCode(); - } - return h; - } - - /** - * Returns a string representation of this map. The string - * representation consists of a list of key-value mappings (in no - * particular order) enclosed in braces ("{@code {}}"). Adjacent - * mappings are separated by the characters {@code ", "} (comma - * and space). Each key-value mapping is rendered as the key - * followed by an equals sign ("{@code =}") followed by the - * associated value. - * - * @return a string representation of this map - */ - public String toString() { - Traverser it = new Traverser(this); - StringBuilder sb = new StringBuilder(); - sb.append('{'); - Object v; - if ((v = it.advance()) != null) { - for (;;) { - Object k = it.nextKey; - sb.append(k == this ? "(this Map)" : k); - sb.append('='); - sb.append(v == this ? "(this Map)" : v); - if ((v = it.advance()) == null) - break; - sb.append(',').append(' '); - } - } - return sb.append('}').toString(); - } - - /** - * Compares the specified object with this map for equality. - * Returns {@code true} if the given object is a map with the same - * mappings as this map. This operation may return misleading - * results if either map is concurrently modified during execution - * of this method. - * - * @param o object to be compared for equality with this map - * @return {@code true} if the specified object is equal to this map - */ - public boolean equals(Object o) { - if (o != this) { - if (!(o instanceof Map)) - return false; - Map m = (Map) o; - Traverser it = new Traverser(this); - Object val; - while ((val = it.advance()) != null) { - Object v = m.get(it.nextKey); - if (v == null || (v != val && !v.equals(val))) - return false; - } - for (Map.Entry e : m.entrySet()) { - Object mk, mv, v; - if ((mk = e.getKey()) == null || - (mv = e.getValue()) == null || - (v = internalGet(mk)) == null || - (mv != v && !mv.equals(v))) - return false; - } - } - return true; - } - - /* ----------------Iterators -------------- */ - - @SuppressWarnings("serial") static final class KeyIterator extends Traverser - implements Spliterator, Enumeration { - KeyIterator(ConcurrentHashMapV8 map) { super(map); } - KeyIterator(Traverser it) { - super(it); - } - public KeyIterator split() { - if (nextKey != null) - throw new IllegalStateException(); - return new KeyIterator(this); - } - @SuppressWarnings("unchecked") public final K next() { - if (nextVal == null && advance() == null) - throw new NoSuchElementException(); - Object k = nextKey; - nextVal = null; - return (K) k; - } - - public final K nextElement() { return next(); } - } - - @SuppressWarnings("serial") static final class ValueIterator extends Traverser - implements Spliterator, Enumeration { - ValueIterator(ConcurrentHashMapV8 map) { super(map); } - ValueIterator(Traverser it) { - super(it); - } - public ValueIterator split() { - if (nextKey != null) - throw new IllegalStateException(); - return new ValueIterator(this); - } - - @SuppressWarnings("unchecked") public final V next() { - Object v; - if ((v = nextVal) == null && (v = advance()) == null) - throw new NoSuchElementException(); - nextVal = null; - return (V) v; - } - - public final V nextElement() { return next(); } - } - - @SuppressWarnings("serial") static final class EntryIterator extends Traverser - implements Spliterator> { - EntryIterator(ConcurrentHashMapV8 map) { super(map); } - EntryIterator(Traverser it) { - super(it); - } - public EntryIterator split() { - if (nextKey != null) - throw new IllegalStateException(); - return new EntryIterator(this); - } - - @SuppressWarnings("unchecked") public final Map.Entry next() { - Object v; - if ((v = nextVal) == null && (v = advance()) == null) - throw new NoSuchElementException(); - Object k = nextKey; - nextVal = null; - return new MapEntry((K)k, (V)v, map); - } - } - - /** - * Exported Entry for iterators - */ - static final class MapEntry implements Map.Entry { - final K key; // non-null - V val; // non-null - final ConcurrentHashMapV8 map; - MapEntry(K key, V val, ConcurrentHashMapV8 map) { - this.key = key; - this.val = val; - this.map = map; - } - public final K getKey() { return key; } - public final V getValue() { return val; } - public final int hashCode() { return key.hashCode() ^ val.hashCode(); } - public final String toString(){ return key + "=" + val; } - - public final boolean equals(Object o) { - Object k, v; Map.Entry e; - return ((o instanceof Map.Entry) && - (k = (e = (Map.Entry)o).getKey()) != null && - (v = e.getValue()) != null && - (k == key || k.equals(key)) && - (v == val || v.equals(val))); - } - - /** - * Sets our entry's value and writes through to the map. The - * value to return is somewhat arbitrary here. Since we do not - * necessarily track asynchronous changes, the most recent - * "previous" value could be different from what we return (or - * could even have been removed in which case the put will - * re-establish). We do not and cannot guarantee more. - */ - public final V setValue(V value) { - if (value == null) throw new NullPointerException(); - V v = val; - val = value; - map.put(key, value); - return v; - } - } - - /* ---------------- Serialization Support -------------- */ - - /** - * Stripped-down version of helper class used in previous version, - * declared for the sake of serialization compatibility - */ - static class Segment implements Serializable { - private static final long serialVersionUID = 2249069246763182397L; - final float loadFactor; - Segment(float lf) { this.loadFactor = lf; } - } - - /** - * Saves the state of the {@code ConcurrentHashMapV8} instance to a - * stream (i.e., serializes it). - * @param s the stream - * @serialData - * the key (Object) and value (Object) - * for each key-value mapping, followed by a null pair. - * The key-value mappings are emitted in no particular order. - */ - @SuppressWarnings("unchecked") private void writeObject(java.io.ObjectOutputStream s) - throws java.io.IOException { - if (segments == null) { // for serialization compatibility - segments = (Segment[]) - new Segment[DEFAULT_CONCURRENCY_LEVEL]; - for (int i = 0; i < segments.length; ++i) - segments[i] = new Segment(LOAD_FACTOR); - } - s.defaultWriteObject(); - Traverser it = new Traverser(this); - Object v; - while ((v = it.advance()) != null) { - s.writeObject(it.nextKey); - s.writeObject(v); - } - s.writeObject(null); - s.writeObject(null); - segments = null; // throw away - } - - /** - * Reconstitutes the instance from a stream (that is, deserializes it). - * @param s the stream - */ - @SuppressWarnings("unchecked") private void readObject(java.io.ObjectInputStream s) - throws java.io.IOException, ClassNotFoundException { - s.defaultReadObject(); - this.segments = null; // unneeded - // initialize transient final field - this.counter = new LongAdder(); - - // Create all nodes, then place in table once size is known - long size = 0L; - Node p = null; - for (;;) { - K k = (K) s.readObject(); - V v = (V) s.readObject(); - if (k != null && v != null) { - int h = spread(k.hashCode()); - p = new Node(h, k, v, p); - ++size; - } - else - break; - } - if (p != null) { - boolean init = false; - int n; - if (size >= (long)(MAXIMUM_CAPACITY >>> 1)) - n = MAXIMUM_CAPACITY; - else { - int sz = (int)size; - n = tableSizeFor(sz + (sz >>> 1) + 1); - } - int sc = sizeCtl; - boolean collide = false; - if (n > sc && - SIZE_CTRL_UPDATER.compareAndSet(this, sc, -1)) { - try { - if (table == null) { - init = true; - AtomicReferenceArray tab = new AtomicReferenceArray(n); - int mask = n - 1; - while (p != null) { - int j = p.hash & mask; - Node next = p.next; - Node q = p.next = tabAt(tab, j); - setTabAt(tab, j, p); - if (!collide && q != null && q.hash == p.hash) - collide = true; - p = next; - } - table = tab; - counter.add(size); - sc = n - (n >>> 2); - } - } finally { - sizeCtl = sc; - } - if (collide) { // rescan and convert to TreeBins - AtomicReferenceArray tab = table; - for (int i = 0; i < tab.length(); ++i) { - int c = 0; - for (Node e = tabAt(tab, i); e != null; e = e.next) { - if (++c > TREE_THRESHOLD && - (e.key instanceof Comparable)) { - replaceWithTreeBin(tab, i, e.key); - break; - } - } - } - } - } - if (!init) { // Can only happen if unsafely published. - while (p != null) { - internalPut(p.key, p.val); - p = p.next; - } - } - } - } - - - // ------------------------------------------------------- - - // Sams - /** Interface describing a void action of one argument */ - public interface Action { void apply(A a); } - /** Interface describing a void action of two arguments */ - public interface BiAction { void apply(A a, B b); } - /** Interface describing a function of one argument */ - public interface Generator { T apply(); } - /** Interface describing a function mapping its argument to a double */ - public interface ObjectToDouble { double apply(A a); } - /** Interface describing a function mapping its argument to a long */ - public interface ObjectToLong { long apply(A a); } - /** Interface describing a function mapping its argument to an int */ - public interface ObjectToInt {int apply(A a); } - /** Interface describing a function mapping two arguments to a double */ - public interface ObjectByObjectToDouble { double apply(A a, B b); } - /** Interface describing a function mapping two arguments to a long */ - public interface ObjectByObjectToLong { long apply(A a, B b); } - /** Interface describing a function mapping two arguments to an int */ - public interface ObjectByObjectToInt {int apply(A a, B b); } - /** Interface describing a function mapping a double to a double */ - public interface DoubleToDouble { double apply(double a); } - /** Interface describing a function mapping a long to a long */ - public interface LongToLong { long apply(long a); } - /** Interface describing a function mapping an int to an int */ - public interface IntToInt { int apply(int a); } - /** Interface describing a function mapping two doubles to a double */ - public interface DoubleByDoubleToDouble { double apply(double a, double b); } - /** Interface describing a function mapping two longs to a long */ - public interface LongByLongToLong { long apply(long a, long b); } - /** Interface describing a function mapping two ints to an int */ - public interface IntByIntToInt { int apply(int a, int b); } - - - /* ----------------Views -------------- */ - - /** - * Base class for views. - */ - static abstract class CHMView { - final ConcurrentHashMapV8 map; - CHMView(ConcurrentHashMapV8 map) { this.map = map; } - - /** - * Returns the map backing this view. - * - * @return the map backing this view - */ - public ConcurrentHashMapV8 getMap() { return map; } - - public final int size() { return map.size(); } - public final boolean isEmpty() { return map.isEmpty(); } - public final void clear() { map.clear(); } - - // implementations below rely on concrete classes supplying these - abstract public Iterator iterator(); - abstract public boolean contains(Object o); - abstract public boolean remove(Object o); - - private static final String oomeMsg = "Required array size too large"; - - public final Object[] toArray() { - long sz = map.mappingCount(); - if (sz > (long)(MAX_ARRAY_SIZE)) - throw new OutOfMemoryError(oomeMsg); - int n = (int)sz; - Object[] r = new Object[n]; - int i = 0; - Iterator it = iterator(); - while (it.hasNext()) { - if (i == n) { - if (n >= MAX_ARRAY_SIZE) - throw new OutOfMemoryError(oomeMsg); - if (n >= MAX_ARRAY_SIZE - (MAX_ARRAY_SIZE >>> 1) - 1) - n = MAX_ARRAY_SIZE; - else - n += (n >>> 1) + 1; - r = Arrays.copyOf(r, n); - } - r[i++] = it.next(); - } - return (i == n) ? r : Arrays.copyOf(r, i); - } - - @SuppressWarnings("unchecked") public final T[] toArray(T[] a) { - long sz = map.mappingCount(); - if (sz > (long)(MAX_ARRAY_SIZE)) - throw new OutOfMemoryError(oomeMsg); - int m = (int)sz; - T[] r = (a.length >= m) ? a : - (T[])java.lang.reflect.Array - .newInstance(a.getClass().getComponentType(), m); - int n = r.length; - int i = 0; - Iterator it = iterator(); - while (it.hasNext()) { - if (i == n) { - if (n >= MAX_ARRAY_SIZE) - throw new OutOfMemoryError(oomeMsg); - if (n >= MAX_ARRAY_SIZE - (MAX_ARRAY_SIZE >>> 1) - 1) - n = MAX_ARRAY_SIZE; - else - n += (n >>> 1) + 1; - r = Arrays.copyOf(r, n); - } - r[i++] = (T)it.next(); - } - if (a == r && i < n) { - r[i] = null; // null-terminate - return r; - } - return (i == n) ? r : Arrays.copyOf(r, i); - } - - public final int hashCode() { - int h = 0; - for (Iterator it = iterator(); it.hasNext();) - h += it.next().hashCode(); - return h; - } - - public final String toString() { - StringBuilder sb = new StringBuilder(); - sb.append('['); - Iterator it = iterator(); - if (it.hasNext()) { - for (;;) { - Object e = it.next(); - sb.append(e == this ? "(this Collection)" : e); - if (!it.hasNext()) - break; - sb.append(',').append(' '); - } - } - return sb.append(']').toString(); - } - - public final boolean containsAll(Collection c) { - if (c != this) { - for (Iterator it = c.iterator(); it.hasNext();) { - Object e = it.next(); - if (e == null || !contains(e)) - return false; - } - } - return true; - } - - public final boolean removeAll(Collection c) { - boolean modified = false; - for (Iterator it = iterator(); it.hasNext();) { - if (c.contains(it.next())) { - it.remove(); - modified = true; - } - } - return modified; - } - - public final boolean retainAll(Collection c) { - boolean modified = false; - for (Iterator it = iterator(); it.hasNext();) { - if (!c.contains(it.next())) { - it.remove(); - modified = true; - } - } - return modified; - } - - } - - /** - * A view of a ConcurrentHashMapV8 as a {@link Set} of keys, in - * which additions may optionally be enabled by mapping to a - * common value. This class cannot be directly instantiated. See - * {@link #keySet}, {@link #keySet(Object)}, {@link #newKeySet()}, - * {@link #newKeySet(int)}. - */ - public static class KeySetView extends CHMView implements Set, java.io.Serializable { - private static final long serialVersionUID = 7249069246763182397L; - private final V value; - KeySetView(ConcurrentHashMapV8 map, V value) { // non-public - super(map); - this.value = value; - } - - /** - * Returns the default mapped value for additions, - * or {@code null} if additions are not supported. - * - * @return the default mapped value for additions, or {@code null} - * if not supported. - */ - public V getMappedValue() { return value; } - - // implement Set API - - public boolean contains(Object o) { return map.containsKey(o); } - public boolean remove(Object o) { return map.remove(o) != null; } - - /** - * Returns a "weakly consistent" iterator that will never - * throw {@link ConcurrentModificationException}, and - * guarantees to traverse elements as they existed upon - * construction of the iterator, and may (but is not - * guaranteed to) reflect any modifications subsequent to - * construction. - * - * @return an iterator over the keys of this map - */ - public Iterator iterator() { return new KeyIterator(map); } - public boolean add(K e) { - V v; - if ((v = value) == null) - throw new UnsupportedOperationException(); - if (e == null) - throw new NullPointerException(); - return map.internalPutIfAbsent(e, v) == null; - } - public boolean addAll(Collection c) { - boolean added = false; - V v; - if ((v = value) == null) - throw new UnsupportedOperationException(); - for (K e : c) { - if (e == null) - throw new NullPointerException(); - if (map.internalPutIfAbsent(e, v) == null) - added = true; - } - return added; - } - public boolean equals(Object o) { - Set c; - return ((o instanceof Set) && - ((c = (Set)o) == this || - (containsAll(c) && c.containsAll(this)))); - } - } - - /** - * A view of a ConcurrentHashMapV8 as a {@link Collection} of - * values, in which additions are disabled. This class cannot be - * directly instantiated. See {@link #values}, - * - *

    The view's {@code iterator} is a "weakly consistent" iterator - * that will never throw {@link ConcurrentModificationException}, - * and guarantees to traverse elements as they existed upon - * construction of the iterator, and may (but is not guaranteed to) - * reflect any modifications subsequent to construction. - */ - public static final class ValuesView extends CHMView - implements Collection { - ValuesView(ConcurrentHashMapV8 map) { super(map); } - public final boolean contains(Object o) { return map.containsValue(o); } - public final boolean remove(Object o) { - if (o != null) { - Iterator it = new ValueIterator(map); - while (it.hasNext()) { - if (o.equals(it.next())) { - it.remove(); - return true; - } - } - } - return false; - } - - /** - * Returns a "weakly consistent" iterator that will never - * throw {@link ConcurrentModificationException}, and - * guarantees to traverse elements as they existed upon - * construction of the iterator, and may (but is not - * guaranteed to) reflect any modifications subsequent to - * construction. - * - * @return an iterator over the values of this map - */ - public final Iterator iterator() { - return new ValueIterator(map); - } - public final boolean add(V e) { - throw new UnsupportedOperationException(); - } - public final boolean addAll(Collection c) { - throw new UnsupportedOperationException(); - } - } - - /** - * A view of a ConcurrentHashMapV8 as a {@link Set} of (key, value) - * entries. This class cannot be directly instantiated. See - * {@link #entrySet}. - */ - public static final class EntrySetView extends CHMView - implements Set> { - EntrySetView(ConcurrentHashMapV8 map) { super(map); } - public final boolean contains(Object o) { - Object k, v, r; Map.Entry e; - return ((o instanceof Map.Entry) && - (k = (e = (Map.Entry)o).getKey()) != null && - (r = map.get(k)) != null && - (v = e.getValue()) != null && - (v == r || v.equals(r))); - } - public final boolean remove(Object o) { - Object k, v; Map.Entry e; - return ((o instanceof Map.Entry) && - (k = (e = (Map.Entry)o).getKey()) != null && - (v = e.getValue()) != null && - map.remove(k, v)); - } - - /** - * Returns a "weakly consistent" iterator that will never - * throw {@link ConcurrentModificationException}, and - * guarantees to traverse elements as they existed upon - * construction of the iterator, and may (but is not - * guaranteed to) reflect any modifications subsequent to - * construction. - * - * @return an iterator over the entries of this map - */ - public final Iterator> iterator() { - return new EntryIterator(map); - } - - public final boolean add(Entry e) { - K key = e.getKey(); - V value = e.getValue(); - if (key == null || value == null) - throw new NullPointerException(); - return map.internalPut(key, value) == null; - } - public final boolean addAll(Collection> c) { - boolean added = false; - for (Entry e : c) { - if (add(e)) - added = true; - } - return added; - } - public boolean equals(Object o) { - Set c; - return ((o instanceof Set) && - ((c = (Set)o) == this || - (containsAll(c) && c.containsAll(this)))); - } - } -} diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166e/nounsafe/LongAdder.java b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166e/nounsafe/LongAdder.java deleted file mode 100644 index ecf552a2..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166e/nounsafe/LongAdder.java +++ /dev/null @@ -1,204 +0,0 @@ -/* - * Written by Doug Lea with assistance from members of JCP JSR-166 - * Expert Group and released to the public domain, as explained at - * http://creativecommons.org/publicdomain/zero/1.0/ - */ - -// This is based on 1.9 version. - -package com.concurrent_ruby.ext.jsr166e.nounsafe; - -import java.util.concurrent.atomic.AtomicLong; -import java.io.IOException; -import java.io.Serializable; -import java.io.ObjectInputStream; - -/** - * One or more variables that together maintain an initially zero - * {@code long} sum. When updates (method {@link #add}) are contended - * across threads, the set of variables may grow dynamically to reduce - * contention. Method {@link #sum} (or, equivalently, {@link - * #longValue}) returns the current total combined across the - * variables maintaining the sum. - * - *

    This class is usually preferable to {@link AtomicLong} when - * multiple threads update a common sum that is used for purposes such - * as collecting statistics, not for fine-grained synchronization - * control. Under low update contention, the two classes have similar - * characteristics. But under high contention, expected throughput of - * this class is significantly higher, at the expense of higher space - * consumption. - * - *

    This class extends {@link Number}, but does not define - * methods such as {@code hashCode} and {@code compareTo} because - * instances are expected to be mutated, and so are not useful as - * collection keys. - * - *

    jsr166e note: This class is targeted to be placed in - * java.util.concurrent.atomic. - * - * @since 1.8 - * @author Doug Lea - */ -public class LongAdder extends Striped64 implements Serializable { - private static final long serialVersionUID = 7249069246863182397L; - - /** - * Version of plus for use in retryUpdate - */ - final long fn(long v, long x) { return v + x; } - - /** - * Creates a new adder with initial sum of zero. - */ - public LongAdder() { - } - - /** - * Adds the given value. - * - * @param x the value to add - */ - public void add(long x) { - Cell[] as; long b, v; HashCode hc; Cell a; int n; - if ((as = cells) != null || !casBase(b = base, b + x)) { - boolean uncontended = true; - int h = (hc = threadHashCode.get()).code; - if (as == null || (n = as.length) < 1 || - (a = as[(n - 1) & h]) == null || - !(uncontended = a.cas(v = a.value, v + x))) - retryUpdate(x, hc, uncontended); - } - } - - /** - * Equivalent to {@code add(1)}. - */ - public void increment() { - add(1L); - } - - /** - * Equivalent to {@code add(-1)}. - */ - public void decrement() { - add(-1L); - } - - /** - * Returns the current sum. The returned value is NOT an - * atomic snapshot: Invocation in the absence of concurrent - * updates returns an accurate result, but concurrent updates that - * occur while the sum is being calculated might not be - * incorporated. - * - * @return the sum - */ - public long sum() { - long sum = base; - Cell[] as = cells; - if (as != null) { - int n = as.length; - for (int i = 0; i < n; ++i) { - Cell a = as[i]; - if (a != null) - sum += a.value; - } - } - return sum; - } - - /** - * Resets variables maintaining the sum to zero. This method may - * be a useful alternative to creating a new adder, but is only - * effective if there are no concurrent updates. Because this - * method is intrinsically racy, it should only be used when it is - * known that no threads are concurrently updating. - */ - public void reset() { - internalReset(0L); - } - - /** - * Equivalent in effect to {@link #sum} followed by {@link - * #reset}. This method may apply for example during quiescent - * points between multithreaded computations. If there are - * updates concurrent with this method, the returned value is - * not guaranteed to be the final value occurring before - * the reset. - * - * @return the sum - */ - public long sumThenReset() { - long sum = base; - Cell[] as = cells; - base = 0L; - if (as != null) { - int n = as.length; - for (int i = 0; i < n; ++i) { - Cell a = as[i]; - if (a != null) { - sum += a.value; - a.value = 0L; - } - } - } - return sum; - } - - /** - * Returns the String representation of the {@link #sum}. - * @return the String representation of the {@link #sum} - */ - public String toString() { - return Long.toString(sum()); - } - - /** - * Equivalent to {@link #sum}. - * - * @return the sum - */ - public long longValue() { - return sum(); - } - - /** - * Returns the {@link #sum} as an {@code int} after a narrowing - * primitive conversion. - */ - public int intValue() { - return (int)sum(); - } - - /** - * Returns the {@link #sum} as a {@code float} - * after a widening primitive conversion. - */ - public float floatValue() { - return (float)sum(); - } - - /** - * Returns the {@link #sum} as a {@code double} after a widening - * primitive conversion. - */ - public double doubleValue() { - return (double)sum(); - } - - private void writeObject(java.io.ObjectOutputStream s) - throws java.io.IOException { - s.defaultWriteObject(); - s.writeLong(sum()); - } - - private void readObject(ObjectInputStream s) - throws IOException, ClassNotFoundException { - s.defaultReadObject(); - busy = 0; - cells = null; - base = s.readLong(); - } - -} diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166e/nounsafe/Striped64.java b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166e/nounsafe/Striped64.java deleted file mode 100644 index f5216424..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166e/nounsafe/Striped64.java +++ /dev/null @@ -1,291 +0,0 @@ -/* - * Written by Doug Lea with assistance from members of JCP JSR-166 - * Expert Group and released to the public domain, as explained at - * http://creativecommons.org/publicdomain/zero/1.0/ - */ - -// This is based on 1.5 version. - -package com.concurrent_ruby.ext.jsr166e.nounsafe; - -import java.util.Random; -import java.util.concurrent.atomic.AtomicIntegerFieldUpdater; -import java.util.concurrent.atomic.AtomicLongFieldUpdater; - -/** - * A package-local class holding common representation and mechanics - * for classes supporting dynamic striping on 64bit values. The class - * extends Number so that concrete subclasses must publicly do so. - */ -abstract class Striped64 extends Number { - /* - * This class maintains a lazily-initialized table of atomically - * updated variables, plus an extra "base" field. The table size - * is a power of two. Indexing uses masked per-thread hash codes. - * Nearly all declarations in this class are package-private, - * accessed directly by subclasses. - * - * Table entries are of class Cell; a variant of AtomicLong padded - * to reduce cache contention on most processors. Padding is - * overkill for most Atomics because they are usually irregularly - * scattered in memory and thus don't interfere much with each - * other. But Atomic objects residing in arrays will tend to be - * placed adjacent to each other, and so will most often share - * cache lines (with a huge negative performance impact) without - * this precaution. - * - * In part because Cells are relatively large, we avoid creating - * them until they are needed. When there is no contention, all - * updates are made to the base field. Upon first contention (a - * failed CAS on base update), the table is initialized to size 2. - * The table size is doubled upon further contention until - * reaching the nearest power of two greater than or equal to the - * number of CPUS. Table slots remain empty (null) until they are - * needed. - * - * A single spinlock ("busy") is used for initializing and - * resizing the table, as well as populating slots with new Cells. - * There is no need for a blocking lock: When the lock is not - * available, threads try other slots (or the base). During these - * retries, there is increased contention and reduced locality, - * which is still better than alternatives. - * - * Per-thread hash codes are initialized to random values. - * Contention and/or table collisions are indicated by failed - * CASes when performing an update operation (see method - * retryUpdate). Upon a collision, if the table size is less than - * the capacity, it is doubled in size unless some other thread - * holds the lock. If a hashed slot is empty, and lock is - * available, a new Cell is created. Otherwise, if the slot - * exists, a CAS is tried. Retries proceed by "double hashing", - * using a secondary hash (Marsaglia XorShift) to try to find a - * free slot. - * - * The table size is capped because, when there are more threads - * than CPUs, supposing that each thread were bound to a CPU, - * there would exist a perfect hash function mapping threads to - * slots that eliminates collisions. When we reach capacity, we - * search for this mapping by randomly varying the hash codes of - * colliding threads. Because search is random, and collisions - * only become known via CAS failures, convergence can be slow, - * and because threads are typically not bound to CPUS forever, - * may not occur at all. However, despite these limitations, - * observed contention rates are typically low in these cases. - * - * It is possible for a Cell to become unused when threads that - * once hashed to it terminate, as well as in the case where - * doubling the table causes no thread to hash to it under - * expanded mask. We do not try to detect or remove such cells, - * under the assumption that for long-running instances, observed - * contention levels will recur, so the cells will eventually be - * needed again; and for short-lived ones, it does not matter. - */ - - /** - * Padded variant of AtomicLong supporting only raw accesses plus CAS. - * The value field is placed between pads, hoping that the JVM doesn't - * reorder them. - * - * JVM intrinsics note: It would be possible to use a release-only - * form of CAS here, if it were provided. - */ - static final class Cell { - volatile long p0, p1, p2, p3, p4, p5, p6; - volatile long value; - volatile long q0, q1, q2, q3, q4, q5, q6; - - static AtomicLongFieldUpdater VALUE_UPDATER = AtomicLongFieldUpdater.newUpdater(Cell.class, "value"); - - Cell(long x) { value = x; } - - final boolean cas(long cmp, long val) { - return VALUE_UPDATER.compareAndSet(this, cmp, val); - } - - } - - /** - * Holder for the thread-local hash code. The code is initially - * random, but may be set to a different value upon collisions. - */ - static final class HashCode { - static final Random rng = new Random(); - int code; - HashCode() { - int h = rng.nextInt(); // Avoid zero to allow xorShift rehash - code = (h == 0) ? 1 : h; - } - } - - /** - * The corresponding ThreadLocal class - */ - static final class ThreadHashCode extends ThreadLocal { - public HashCode initialValue() { return new HashCode(); } - } - - /** - * Static per-thread hash codes. Shared across all instances to - * reduce ThreadLocal pollution and because adjustments due to - * collisions in one table are likely to be appropriate for - * others. - */ - static final ThreadHashCode threadHashCode = new ThreadHashCode(); - - /** Number of CPUS, to place bound on table size */ - static final int NCPU = Runtime.getRuntime().availableProcessors(); - - /** - * Table of cells. When non-null, size is a power of 2. - */ - transient volatile Cell[] cells; - - /** - * Base value, used mainly when there is no contention, but also as - * a fallback during table initialization races. Updated via CAS. - */ - transient volatile long base; - - /** - * Spinlock (locked via CAS) used when resizing and/or creating Cells. - */ - transient volatile int busy; - - AtomicLongFieldUpdater BASE_UPDATER = AtomicLongFieldUpdater.newUpdater(Striped64.class, "base"); - AtomicIntegerFieldUpdater BUSY_UPDATER = AtomicIntegerFieldUpdater.newUpdater(Striped64.class, "busy"); - - /** - * Package-private default constructor - */ - Striped64() { - } - - /** - * CASes the base field. - */ - final boolean casBase(long cmp, long val) { - return BASE_UPDATER.compareAndSet(this, cmp, val); - } - - /** - * CASes the busy field from 0 to 1 to acquire lock. - */ - final boolean casBusy() { - return BUSY_UPDATER.compareAndSet(this, 0, 1); - } - - /** - * Computes the function of current and new value. Subclasses - * should open-code this update function for most uses, but the - * virtualized form is needed within retryUpdate. - * - * @param currentValue the current value (of either base or a cell) - * @param newValue the argument from a user update call - * @return result of the update function - */ - abstract long fn(long currentValue, long newValue); - - /** - * Handles cases of updates involving initialization, resizing, - * creating new Cells, and/or contention. See above for - * explanation. This method suffers the usual non-modularity - * problems of optimistic retry code, relying on rechecked sets of - * reads. - * - * @param x the value - * @param hc the hash code holder - * @param wasUncontended false if CAS failed before call - */ - final void retryUpdate(long x, HashCode hc, boolean wasUncontended) { - int h = hc.code; - boolean collide = false; // True if last slot nonempty - for (;;) { - Cell[] as; Cell a; int n; long v; - if ((as = cells) != null && (n = as.length) > 0) { - if ((a = as[(n - 1) & h]) == null) { - if (busy == 0) { // Try to attach new Cell - Cell r = new Cell(x); // Optimistically create - if (busy == 0 && casBusy()) { - boolean created = false; - try { // Recheck under lock - Cell[] rs; int m, j; - if ((rs = cells) != null && - (m = rs.length) > 0 && - rs[j = (m - 1) & h] == null) { - rs[j] = r; - created = true; - } - } finally { - busy = 0; - } - if (created) - break; - continue; // Slot is now non-empty - } - } - collide = false; - } - else if (!wasUncontended) // CAS already known to fail - wasUncontended = true; // Continue after rehash - else if (a.cas(v = a.value, fn(v, x))) - break; - else if (n >= NCPU || cells != as) - collide = false; // At max size or stale - else if (!collide) - collide = true; - else if (busy == 0 && casBusy()) { - try { - if (cells == as) { // Expand table unless stale - Cell[] rs = new Cell[n << 1]; - for (int i = 0; i < n; ++i) - rs[i] = as[i]; - cells = rs; - } - } finally { - busy = 0; - } - collide = false; - continue; // Retry with expanded table - } - h ^= h << 13; // Rehash - h ^= h >>> 17; - h ^= h << 5; - } - else if (busy == 0 && cells == as && casBusy()) { - boolean init = false; - try { // Initialize table - if (cells == as) { - Cell[] rs = new Cell[2]; - rs[h & 1] = new Cell(x); - cells = rs; - init = true; - } - } finally { - busy = 0; - } - if (init) - break; - } - else if (casBase(v = base, fn(v, x))) - break; // Fall back on using base - } - hc.code = h; // Record index for next time - } - - - /** - * Sets base and all cells to the given value. - */ - final void internalReset(long initialValue) { - Cell[] as = cells; - base = initialValue; - if (as != null) { - int n = as.length; - for (int i = 0; i < n; ++i) { - Cell a = as[i]; - if (a != null) - a.value = initialValue; - } - } - } -} diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166y/ThreadLocalRandom.java b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166y/ThreadLocalRandom.java deleted file mode 100644 index 3ea409ff..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/ext/concurrent-ruby/com/concurrent_ruby/ext/jsr166y/ThreadLocalRandom.java +++ /dev/null @@ -1,199 +0,0 @@ -/* - * Written by Doug Lea with assistance from members of JCP JSR-166 - * Expert Group and released to the public domain, as explained at - * http://creativecommons.org/publicdomain/zero/1.0/ - */ - -// This is based on 1.16 version - -package com.concurrent_ruby.ext.jsr166y; - -import java.util.Random; - -/** - * A random number generator isolated to the current thread. Like the - * global {@link java.util.Random} generator used by the {@link - * java.lang.Math} class, a {@code ThreadLocalRandom} is initialized - * with an internally generated seed that may not otherwise be - * modified. When applicable, use of {@code ThreadLocalRandom} rather - * than shared {@code Random} objects in concurrent programs will - * typically encounter much less overhead and contention. Use of - * {@code ThreadLocalRandom} is particularly appropriate when multiple - * tasks (for example, each a {@link ForkJoinTask}) use random numbers - * in parallel in thread pools. - * - *

    Usages of this class should typically be of the form: - * {@code ThreadLocalRandom.current().nextX(...)} (where - * {@code X} is {@code Int}, {@code Long}, etc). - * When all usages are of this form, it is never possible to - * accidently share a {@code ThreadLocalRandom} across multiple threads. - * - *

    This class also provides additional commonly used bounded random - * generation methods. - * - * @since 1.7 - * @author Doug Lea - */ -public class ThreadLocalRandom extends Random { - // same constants as Random, but must be redeclared because private - private static final long multiplier = 0x5DEECE66DL; - private static final long addend = 0xBL; - private static final long mask = (1L << 48) - 1; - - /** - * The random seed. We can't use super.seed. - */ - private long rnd; - - /** - * Initialization flag to permit calls to setSeed to succeed only - * while executing the Random constructor. We can't allow others - * since it would cause setting seed in one part of a program to - * unintentionally impact other usages by the thread. - */ - boolean initialized; - - // Padding to help avoid memory contention among seed updates in - // different TLRs in the common case that they are located near - // each other. - private long pad0, pad1, pad2, pad3, pad4, pad5, pad6, pad7; - - /** - * The actual ThreadLocal - */ - private static final ThreadLocal localRandom = - new ThreadLocal() { - protected ThreadLocalRandom initialValue() { - return new ThreadLocalRandom(); - } - }; - - - /** - * Constructor called only by localRandom.initialValue. - */ - ThreadLocalRandom() { - super(); - initialized = true; - } - - /** - * Returns the current thread's {@code ThreadLocalRandom}. - * - * @return the current thread's {@code ThreadLocalRandom} - */ - public static ThreadLocalRandom current() { - return localRandom.get(); - } - - /** - * Throws {@code UnsupportedOperationException}. Setting seeds in - * this generator is not supported. - * - * @throws UnsupportedOperationException always - */ - public void setSeed(long seed) { - if (initialized) - throw new UnsupportedOperationException(); - rnd = (seed ^ multiplier) & mask; - } - - protected int next(int bits) { - rnd = (rnd * multiplier + addend) & mask; - return (int) (rnd >>> (48-bits)); - } - - /** - * Returns a pseudorandom, uniformly distributed value between the - * given least value (inclusive) and bound (exclusive). - * - * @param least the least value returned - * @param bound the upper bound (exclusive) - * @throws IllegalArgumentException if least greater than or equal - * to bound - * @return the next value - */ - public int nextInt(int least, int bound) { - if (least >= bound) - throw new IllegalArgumentException(); - return nextInt(bound - least) + least; - } - - /** - * Returns a pseudorandom, uniformly distributed value - * between 0 (inclusive) and the specified value (exclusive). - * - * @param n the bound on the random number to be returned. Must be - * positive. - * @return the next value - * @throws IllegalArgumentException if n is not positive - */ - public long nextLong(long n) { - if (n <= 0) - throw new IllegalArgumentException("n must be positive"); - // Divide n by two until small enough for nextInt. On each - // iteration (at most 31 of them but usually much less), - // randomly choose both whether to include high bit in result - // (offset) and whether to continue with the lower vs upper - // half (which makes a difference only if odd). - long offset = 0; - while (n >= Integer.MAX_VALUE) { - int bits = next(2); - long half = n >>> 1; - long nextn = ((bits & 2) == 0) ? half : n - half; - if ((bits & 1) == 0) - offset += n - nextn; - n = nextn; - } - return offset + nextInt((int) n); - } - - /** - * Returns a pseudorandom, uniformly distributed value between the - * given least value (inclusive) and bound (exclusive). - * - * @param least the least value returned - * @param bound the upper bound (exclusive) - * @return the next value - * @throws IllegalArgumentException if least greater than or equal - * to bound - */ - public long nextLong(long least, long bound) { - if (least >= bound) - throw new IllegalArgumentException(); - return nextLong(bound - least) + least; - } - - /** - * Returns a pseudorandom, uniformly distributed {@code double} value - * between 0 (inclusive) and the specified value (exclusive). - * - * @param n the bound on the random number to be returned. Must be - * positive. - * @return the next value - * @throws IllegalArgumentException if n is not positive - */ - public double nextDouble(double n) { - if (n <= 0) - throw new IllegalArgumentException("n must be positive"); - return nextDouble() * n; - } - - /** - * Returns a pseudorandom, uniformly distributed value between the - * given least value (inclusive) and bound (exclusive). - * - * @param least the least value returned - * @param bound the upper bound (exclusive) - * @return the next value - * @throws IllegalArgumentException if least greater than or equal - * to bound - */ - public double nextDouble(double least, double bound) { - if (least >= bound) - throw new IllegalArgumentException(); - return nextDouble() * (bound - least) + least; - } - - private static final long serialVersionUID = -5851777807851030925L; -} diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent-ruby.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent-ruby.rb deleted file mode 100644 index e9a3dea4..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent-ruby.rb +++ /dev/null @@ -1,5 +0,0 @@ -# This file is here so that there is a file with the same name as the gem that -# can be required by Bundler.require. Applications should normally -# require 'concurrent'. - -require_relative "concurrent" diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent.rb deleted file mode 100644 index 87de46f1..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent.rb +++ /dev/null @@ -1,134 +0,0 @@ -require 'concurrent/version' -require 'concurrent/constants' -require 'concurrent/errors' -require 'concurrent/configuration' - -require 'concurrent/atomics' -require 'concurrent/executors' -require 'concurrent/synchronization' - -require 'concurrent/atomic/atomic_markable_reference' -require 'concurrent/atomic/atomic_reference' -require 'concurrent/agent' -require 'concurrent/atom' -require 'concurrent/array' -require 'concurrent/hash' -require 'concurrent/set' -require 'concurrent/map' -require 'concurrent/tuple' -require 'concurrent/async' -require 'concurrent/dataflow' -require 'concurrent/delay' -require 'concurrent/exchanger' -require 'concurrent/future' -require 'concurrent/immutable_struct' -require 'concurrent/ivar' -require 'concurrent/maybe' -require 'concurrent/mutable_struct' -require 'concurrent/mvar' -require 'concurrent/promise' -require 'concurrent/scheduled_task' -require 'concurrent/settable_struct' -require 'concurrent/timer_task' -require 'concurrent/tvar' -require 'concurrent/promises' - -require 'concurrent/thread_safe/synchronized_delegator' -require 'concurrent/thread_safe/util' - -require 'concurrent/options' - -# @!macro internal_implementation_note -# -# @note **Private Implementation:** This abstraction is a private, internal -# implementation detail. It should never be used directly. - -# @!macro monotonic_clock_warning -# -# @note Time calculations on all platforms and languages are sensitive to -# changes to the system clock. To alleviate the potential problems -# associated with changing the system clock while an application is running, -# most modern operating systems provide a monotonic clock that operates -# independently of the system clock. A monotonic clock cannot be used to -# determine human-friendly clock times. A monotonic clock is used exclusively -# for calculating time intervals. Not all Ruby platforms provide access to an -# operating system monotonic clock. On these platforms a pure-Ruby monotonic -# clock will be used as a fallback. An operating system monotonic clock is both -# faster and more reliable than the pure-Ruby implementation. The pure-Ruby -# implementation should be fast and reliable enough for most non-realtime -# operations. At this time the common Ruby platforms that provide access to an -# operating system monotonic clock are MRI 2.1 and above and JRuby (all versions). -# -# @see http://linux.die.net/man/3/clock_gettime Linux clock_gettime(3) - -# @!macro copy_options -# -# ## Copy Options -# -# Object references in Ruby are mutable. This can lead to serious -# problems when the {#value} of an object is a mutable reference. Which -# is always the case unless the value is a `Fixnum`, `Symbol`, or similar -# "primitive" data type. Each instance can be configured with a few -# options that can help protect the program from potentially dangerous -# operations. Each of these options can be optionally set when the object -# instance is created: -# -# * `:dup_on_deref` When true the object will call the `#dup` method on -# the `value` object every time the `#value` method is called -# (default: false) -# * `:freeze_on_deref` When true the object will call the `#freeze` -# method on the `value` object every time the `#value` method is called -# (default: false) -# * `:copy_on_deref` When given a `Proc` object the `Proc` will be run -# every time the `#value` method is called. The `Proc` will be given -# the current `value` as its only argument and the result returned by -# the block will be the return value of the `#value` call. When `nil` -# this option will be ignored (default: nil) -# -# When multiple deref options are set the order of operations is strictly defined. -# The order of deref operations is: -# * `:copy_on_deref` -# * `:dup_on_deref` -# * `:freeze_on_deref` -# -# Because of this ordering there is no need to `#freeze` an object created by a -# provided `:copy_on_deref` block. Simply set `:freeze_on_deref` to `true`. -# Setting both `:dup_on_deref` to `true` and `:freeze_on_deref` to `true` is -# as close to the behavior of a "pure" functional language (like Erlang, Clojure, -# or Haskell) as we are likely to get in Ruby. - -# @!macro deref_options -# -# @option opts [Boolean] :dup_on_deref (false) Call `#dup` before -# returning the data from {#value} -# @option opts [Boolean] :freeze_on_deref (false) Call `#freeze` before -# returning the data from {#value} -# @option opts [Proc] :copy_on_deref (nil) When calling the {#value} -# method, call the given proc passing the internal value as the sole -# argument then return the new value returned from the proc. - -# @!macro executor_and_deref_options -# -# @param [Hash] opts the options used to define the behavior at update and deref -# and to specify the executor on which to perform actions -# @option opts [Executor] :executor when set use the given `Executor` instance. -# Three special values are also supported: `:io` returns the global pool for -# long, blocking (IO) tasks, `:fast` returns the global pool for short, fast -# operations, and `:immediate` returns the global `ImmediateExecutor` object. -# @!macro deref_options - -# @!macro warn.edge -# @api Edge -# @note **Edge Features** are under active development and may change frequently. -# -# - Deprecations are not added before incompatible changes. -# - Edge version: _major_ is always 0, _minor_ bump means incompatible change, -# _patch_ bump means compatible change. -# - Edge features may also lack tests and documentation. -# - Features developed in `concurrent-ruby-edge` are expected to move -# to `concurrent-ruby` when finalised. - - -# {include:file:README.md} -module Concurrent -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/agent.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/agent.rb deleted file mode 100644 index 2d32926b..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/agent.rb +++ /dev/null @@ -1,588 +0,0 @@ -require 'concurrent/configuration' -require 'concurrent/atomic/atomic_reference' -require 'concurrent/atomic/count_down_latch' -require 'concurrent/atomic/thread_local_var' -require 'concurrent/collection/copy_on_write_observer_set' -require 'concurrent/concern/observable' -require 'concurrent/synchronization/lockable_object' - -module Concurrent - - # `Agent` is inspired by Clojure's [agent](http://clojure.org/agents) - # function. An agent is a shared, mutable variable providing independent, - # uncoordinated, *asynchronous* change of individual values. Best used when - # the value will undergo frequent, complex updates. Suitable when the result - # of an update does not need to be known immediately. `Agent` is (mostly) - # functionally equivalent to Clojure's agent, except where the runtime - # prevents parity. - # - # Agents are reactive, not autonomous - there is no imperative message loop - # and no blocking receive. The state of an Agent should be itself immutable - # and the `#value` of an Agent is always immediately available for reading by - # any thread without any messages, i.e. observation does not require - # cooperation or coordination. - # - # Agent action dispatches are made using the various `#send` methods. These - # methods always return immediately. At some point later, in another thread, - # the following will happen: - # - # 1. The given `action` will be applied to the state of the Agent and the - # `args`, if any were supplied. - # 2. The return value of `action` will be passed to the validator lambda, - # if one has been set on the Agent. - # 3. If the validator succeeds or if no validator was given, the return value - # of the given `action` will become the new `#value` of the Agent. See - # `#initialize` for details. - # 4. If any observers were added to the Agent, they will be notified. See - # `#add_observer` for details. - # 5. If during the `action` execution any other dispatches are made (directly - # or indirectly), they will be held until after the `#value` of the Agent - # has been changed. - # - # If any exceptions are thrown by an action function, no nested dispatches - # will occur, and the exception will be cached in the Agent itself. When an - # Agent has errors cached, any subsequent interactions will immediately throw - # an exception, until the agent's errors are cleared. Agent errors can be - # examined with `#error` and the agent restarted with `#restart`. - # - # The actions of all Agents get interleaved amongst threads in a thread pool. - # At any point in time, at most one action for each Agent is being executed. - # Actions dispatched to an agent from another single agent or thread will - # occur in the order they were sent, potentially interleaved with actions - # dispatched to the same agent from other sources. The `#send` method should - # be used for actions that are CPU limited, while the `#send_off` method is - # appropriate for actions that may block on IO. - # - # Unlike in Clojure, `Agent` cannot participate in `Concurrent::TVar` transactions. - # - # ## Example - # - # ``` - # def next_fibonacci(set = nil) - # return [0, 1] if set.nil? - # set + [set[-2..-1].reduce{|sum,x| sum + x }] - # end - # - # # create an agent with an initial value - # agent = Concurrent::Agent.new(next_fibonacci) - # - # # send a few update requests - # 5.times do - # agent.send{|set| next_fibonacci(set) } - # end - # - # # wait for them to complete - # agent.await - # - # # get the current value - # agent.value #=> [0, 1, 1, 2, 3, 5, 8] - # ``` - # - # ## Observation - # - # Agents support observers through the {Concurrent::Observable} mixin module. - # Notification of observers occurs every time an action dispatch returns and - # the new value is successfully validated. Observation will *not* occur if the - # action raises an exception, if validation fails, or when a {#restart} occurs. - # - # When notified the observer will receive three arguments: `time`, `old_value`, - # and `new_value`. The `time` argument is the time at which the value change - # occurred. The `old_value` is the value of the Agent when the action began - # processing. The `new_value` is the value to which the Agent was set when the - # action completed. Note that `old_value` and `new_value` may be the same. - # This is not an error. It simply means that the action returned the same - # value. - # - # ## Nested Actions - # - # It is possible for an Agent action to post further actions back to itself. - # The nested actions will be enqueued normally then processed *after* the - # outer action completes, in the order they were sent, possibly interleaved - # with action dispatches from other threads. Nested actions never deadlock - # with one another and a failure in a nested action will never affect the - # outer action. - # - # Nested actions can be called using the Agent reference from the enclosing - # scope or by passing the reference in as a "send" argument. Nested actions - # cannot be post using `self` from within the action block/proc/lambda; `self` - # in this context will not reference the Agent. The preferred method for - # dispatching nested actions is to pass the Agent as an argument. This allows - # Ruby to more effectively manage the closing scope. - # - # Prefer this: - # - # ``` - # agent = Concurrent::Agent.new(0) - # agent.send(agent) do |value, this| - # this.send {|v| v + 42 } - # 3.14 - # end - # agent.value #=> 45.14 - # ``` - # - # Over this: - # - # ``` - # agent = Concurrent::Agent.new(0) - # agent.send do |value| - # agent.send {|v| v + 42 } - # 3.14 - # end - # ``` - # - # @!macro agent_await_warning - # - # **NOTE** Never, *under any circumstances*, call any of the "await" methods - # ({#await}, {#await_for}, {#await_for!}, and {#wait}) from within an action - # block/proc/lambda. The call will block the Agent and will always fail. - # Calling either {#await} or {#wait} (with a timeout of `nil`) will - # hopelessly deadlock the Agent with no possibility of recovery. - # - # @!macro thread_safe_variable_comparison - # - # @see http://clojure.org/Agents Clojure Agents - # @see http://clojure.org/state Values and Change - Clojure's approach to Identity and State - class Agent < Synchronization::LockableObject - include Concern::Observable - - ERROR_MODES = [:continue, :fail].freeze - private_constant :ERROR_MODES - - AWAIT_FLAG = ::Object.new - private_constant :AWAIT_FLAG - - AWAIT_ACTION = ->(value, latch) { latch.count_down; AWAIT_FLAG } - private_constant :AWAIT_ACTION - - DEFAULT_ERROR_HANDLER = ->(agent, error) { nil } - private_constant :DEFAULT_ERROR_HANDLER - - DEFAULT_VALIDATOR = ->(value) { true } - private_constant :DEFAULT_VALIDATOR - - Job = Struct.new(:action, :args, :executor, :caller) - private_constant :Job - - # Raised during action processing or any other time in an Agent's lifecycle. - class Error < StandardError - def initialize(message = nil) - message ||= 'agent must be restarted before jobs can post' - super(message) - end - end - - # Raised when a new value obtained during action processing or at `#restart` - # fails validation. - class ValidationError < Error - def initialize(message = nil) - message ||= 'invalid value' - super(message) - end - end - - # The error mode this Agent is operating in. See {#initialize} for details. - attr_reader :error_mode - - # Create a new `Agent` with the given initial value and options. - # - # The `:validator` option must be `nil` or a side-effect free proc/lambda - # which takes one argument. On any intended value change the validator, if - # provided, will be called. If the new value is invalid the validator should - # return `false` or raise an error. - # - # The `:error_handler` option must be `nil` or a proc/lambda which takes two - # arguments. When an action raises an error or validation fails, either by - # returning false or raising an error, the error handler will be called. The - # arguments to the error handler will be a reference to the agent itself and - # the error object which was raised. - # - # The `:error_mode` may be either `:continue` (the default if an error - # handler is given) or `:fail` (the default if error handler nil or not - # given). - # - # If an action being run by the agent throws an error or doesn't pass - # validation the error handler, if present, will be called. After the - # handler executes if the error mode is `:continue` the Agent will continue - # as if neither the action that caused the error nor the error itself ever - # happened. - # - # If the mode is `:fail` the Agent will become {#failed?} and will stop - # accepting new action dispatches. Any previously queued actions will be - # held until {#restart} is called. The {#value} method will still work, - # returning the value of the Agent before the error. - # - # @param [Object] initial the initial value - # @param [Hash] opts the configuration options - # - # @option opts [Symbol] :error_mode either `:continue` or `:fail` - # @option opts [nil, Proc] :error_handler the (optional) error handler - # @option opts [nil, Proc] :validator the (optional) validation procedure - def initialize(initial, opts = {}) - super() - synchronize { ns_initialize(initial, opts) } - end - - # The current value (state) of the Agent, irrespective of any pending or - # in-progress actions. The value is always available and is non-blocking. - # - # @return [Object] the current value - def value - @current.value # TODO (pitr 12-Sep-2015): broken unsafe read? - end - - alias_method :deref, :value - - # When {#failed?} and {#error_mode} is `:fail`, returns the error object - # which caused the failure, else `nil`. When {#error_mode} is `:continue` - # will *always* return `nil`. - # - # @return [nil, Error] the error which caused the failure when {#failed?} - def error - @error.value - end - - alias_method :reason, :error - - # @!macro agent_send - # - # Dispatches an action to the Agent and returns immediately. Subsequently, - # in a thread from a thread pool, the {#value} will be set to the return - # value of the action. Action dispatches are only allowed when the Agent - # is not {#failed?}. - # - # The action must be a block/proc/lambda which takes 1 or more arguments. - # The first argument is the current {#value} of the Agent. Any arguments - # passed to the send method via the `args` parameter will be passed to the - # action as the remaining arguments. The action must return the new value - # of the Agent. - # - # * {#send} and {#send!} should be used for actions that are CPU limited - # * {#send_off}, {#send_off!}, and {#<<} are appropriate for actions that - # may block on IO - # * {#send_via} and {#send_via!} are used when a specific executor is to - # be used for the action - # - # @param [Array] args zero or more arguments to be passed to - # the action - # @param [Proc] action the action dispatch to be enqueued - # - # @yield [agent, value, *args] process the old value and return the new - # @yieldparam [Object] value the current {#value} of the Agent - # @yieldparam [Array] args zero or more arguments to pass to the - # action - # @yieldreturn [Object] the new value of the Agent - # - # @!macro send_return - # @return [Boolean] true if the action is successfully enqueued, false if - # the Agent is {#failed?} - def send(*args, &action) - enqueue_action_job(action, args, Concurrent.global_fast_executor) - end - - # @!macro agent_send - # - # @!macro send_bang_return_and_raise - # @return [Boolean] true if the action is successfully enqueued - # @raise [Concurrent::Agent::Error] if the Agent is {#failed?} - def send!(*args, &action) - raise Error.new unless send(*args, &action) - true - end - - # @!macro agent_send - # @!macro send_return - def send_off(*args, &action) - enqueue_action_job(action, args, Concurrent.global_io_executor) - end - - alias_method :post, :send_off - - # @!macro agent_send - # @!macro send_bang_return_and_raise - def send_off!(*args, &action) - raise Error.new unless send_off(*args, &action) - true - end - - # @!macro agent_send - # @!macro send_return - # @param [Concurrent::ExecutorService] executor the executor on which the - # action is to be dispatched - def send_via(executor, *args, &action) - enqueue_action_job(action, args, executor) - end - - # @!macro agent_send - # @!macro send_bang_return_and_raise - # @param [Concurrent::ExecutorService] executor the executor on which the - # action is to be dispatched - def send_via!(executor, *args, &action) - raise Error.new unless send_via(executor, *args, &action) - true - end - - # Dispatches an action to the Agent and returns immediately. Subsequently, - # in a thread from a thread pool, the {#value} will be set to the return - # value of the action. Appropriate for actions that may block on IO. - # - # @param [Proc] action the action dispatch to be enqueued - # @return [Concurrent::Agent] self - # @see #send_off - def <<(action) - send_off(&action) - self - end - - # Blocks the current thread (indefinitely!) until all actions dispatched - # thus far, from this thread or nested by the Agent, have occurred. Will - # block when {#failed?}. Will never return if a failed Agent is {#restart} - # with `:clear_actions` true. - # - # Returns a reference to `self` to support method chaining: - # - # ``` - # current_value = agent.await.value - # ``` - # - # @return [Boolean] self - # - # @!macro agent_await_warning - def await - wait(nil) - self - end - - # Blocks the current thread until all actions dispatched thus far, from this - # thread or nested by the Agent, have occurred, or the timeout (in seconds) - # has elapsed. - # - # @param [Float] timeout the maximum number of seconds to wait - # @return [Boolean] true if all actions complete before timeout else false - # - # @!macro agent_await_warning - def await_for(timeout) - wait(timeout.to_f) - end - - # Blocks the current thread until all actions dispatched thus far, from this - # thread or nested by the Agent, have occurred, or the timeout (in seconds) - # has elapsed. - # - # @param [Float] timeout the maximum number of seconds to wait - # @return [Boolean] true if all actions complete before timeout - # - # @raise [Concurrent::TimeoutError] when timout is reached - # - # @!macro agent_await_warning - def await_for!(timeout) - raise Concurrent::TimeoutError unless wait(timeout.to_f) - true - end - - # Blocks the current thread until all actions dispatched thus far, from this - # thread or nested by the Agent, have occurred, or the timeout (in seconds) - # has elapsed. Will block indefinitely when timeout is nil or not given. - # - # Provided mainly for consistency with other classes in this library. Prefer - # the various `await` methods instead. - # - # @param [Float] timeout the maximum number of seconds to wait - # @return [Boolean] true if all actions complete before timeout else false - # - # @!macro agent_await_warning - def wait(timeout = nil) - latch = Concurrent::CountDownLatch.new(1) - enqueue_await_job(latch) - latch.wait(timeout) - end - - # Is the Agent in a failed state? - # - # @see #restart - def failed? - !@error.value.nil? - end - - alias_method :stopped?, :failed? - - # When an Agent is {#failed?}, changes the Agent {#value} to `new_value` - # then un-fails the Agent so that action dispatches are allowed again. If - # the `:clear_actions` option is give and true, any actions queued on the - # Agent that were being held while it was failed will be discarded, - # otherwise those held actions will proceed. The `new_value` must pass the - # validator if any, or `restart` will raise an exception and the Agent will - # remain failed with its old {#value} and {#error}. Observers, if any, will - # not be notified of the new state. - # - # @param [Object] new_value the new value for the Agent once restarted - # @param [Hash] opts the configuration options - # @option opts [Symbol] :clear_actions true if all enqueued but unprocessed - # actions should be discarded on restart, else false (default: false) - # @return [Boolean] true - # - # @raise [Concurrent:AgentError] when not failed - def restart(new_value, opts = {}) - clear_actions = opts.fetch(:clear_actions, false) - synchronize do - raise Error.new('agent is not failed') unless failed? - raise ValidationError unless ns_validate(new_value) - @current.value = new_value - @error.value = nil - @queue.clear if clear_actions - ns_post_next_job unless @queue.empty? - end - true - end - - class << self - - # Blocks the current thread (indefinitely!) until all actions dispatched - # thus far to all the given Agents, from this thread or nested by the - # given Agents, have occurred. Will block when any of the agents are - # failed. Will never return if a failed Agent is restart with - # `:clear_actions` true. - # - # @param [Array] agents the Agents on which to wait - # @return [Boolean] true - # - # @!macro agent_await_warning - def await(*agents) - agents.each { |agent| agent.await } - true - end - - # Blocks the current thread until all actions dispatched thus far to all - # the given Agents, from this thread or nested by the given Agents, have - # occurred, or the timeout (in seconds) has elapsed. - # - # @param [Float] timeout the maximum number of seconds to wait - # @param [Array] agents the Agents on which to wait - # @return [Boolean] true if all actions complete before timeout else false - # - # @!macro agent_await_warning - def await_for(timeout, *agents) - end_at = Concurrent.monotonic_time + timeout.to_f - ok = agents.length.times do |i| - break false if (delay = end_at - Concurrent.monotonic_time) < 0 - break false unless agents[i].await_for(delay) - end - !!ok - end - - # Blocks the current thread until all actions dispatched thus far to all - # the given Agents, from this thread or nested by the given Agents, have - # occurred, or the timeout (in seconds) has elapsed. - # - # @param [Float] timeout the maximum number of seconds to wait - # @param [Array] agents the Agents on which to wait - # @return [Boolean] true if all actions complete before timeout - # - # @raise [Concurrent::TimeoutError] when timout is reached - # @!macro agent_await_warning - def await_for!(timeout, *agents) - raise Concurrent::TimeoutError unless await_for(timeout, *agents) - true - end - end - - private - - def ns_initialize(initial, opts) - @error_mode = opts[:error_mode] - @error_handler = opts[:error_handler] - - if @error_mode && !ERROR_MODES.include?(@error_mode) - raise ArgumentError.new('unrecognized error mode') - elsif @error_mode.nil? - @error_mode = @error_handler ? :continue : :fail - end - - @error_handler ||= DEFAULT_ERROR_HANDLER - @validator = opts.fetch(:validator, DEFAULT_VALIDATOR) - @current = Concurrent::AtomicReference.new(initial) - @error = Concurrent::AtomicReference.new(nil) - @caller = Concurrent::ThreadLocalVar.new(nil) - @queue = [] - - self.observers = Collection::CopyOnNotifyObserverSet.new - end - - def enqueue_action_job(action, args, executor) - raise ArgumentError.new('no action given') unless action - job = Job.new(action, args, executor, @caller.value || Thread.current.object_id) - synchronize { ns_enqueue_job(job) } - end - - def enqueue_await_job(latch) - synchronize do - if (index = ns_find_last_job_for_thread) - job = Job.new(AWAIT_ACTION, [latch], Concurrent.global_immediate_executor, - Thread.current.object_id) - ns_enqueue_job(job, index+1) - else - latch.count_down - true - end - end - end - - def ns_enqueue_job(job, index = nil) - # a non-nil index means this is an await job - return false if index.nil? && failed? - index ||= @queue.length - @queue.insert(index, job) - # if this is the only job, post to executor - ns_post_next_job if @queue.length == 1 - true - end - - def ns_post_next_job - @queue.first.executor.post { execute_next_job } - end - - def execute_next_job - job = synchronize { @queue.first } - old_value = @current.value - - @caller.value = job.caller # for nested actions - new_value = job.action.call(old_value, *job.args) - @caller.value = nil - - return if new_value == AWAIT_FLAG - - if ns_validate(new_value) - @current.value = new_value - observers.notify_observers(Time.now, old_value, new_value) - else - handle_error(ValidationError.new) - end - rescue => error - handle_error(error) - ensure - synchronize do - @queue.shift - unless failed? || @queue.empty? - ns_post_next_job - end - end - end - - def ns_validate(value) - @validator.call(value) - rescue - false - end - - def handle_error(error) - # stop new jobs from posting - @error.value = error if @error_mode == :fail - @error_handler.call(self, error) - rescue - # do nothing - end - - def ns_find_last_job_for_thread - @queue.rindex { |job| job.caller == Thread.current.object_id } - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/array.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/array.rb deleted file mode 100644 index c8761af8..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/array.rb +++ /dev/null @@ -1,56 +0,0 @@ -require 'concurrent/utility/engine' -require 'concurrent/thread_safe/util' - -module Concurrent - - # @!macro concurrent_array - # - # A thread-safe subclass of Array. This version locks against the object - # itself for every method call, ensuring only one thread can be reading - # or writing at a time. This includes iteration methods like `#each`. - # - # @note `a += b` is **not** a **thread-safe** operation on - # `Concurrent::Array`. It reads array `a`, then it creates new `Concurrent::Array` - # which is concatenation of `a` and `b`, then it writes the concatenation to `a`. - # The read and write are independent operations they do not form a single atomic - # operation therefore when two `+=` operations are executed concurrently updates - # may be lost. Use `#concat` instead. - # - # @see http://ruby-doc.org/core/Array.html Ruby standard library `Array` - - # @!macro internal_implementation_note - ArrayImplementation = case - when Concurrent.on_cruby? - # Array is not fully thread-safe on CRuby, see - # https://github.com/ruby-concurrency/concurrent-ruby/issues/929 - # So we will need to add synchronization here - ::Array - - when Concurrent.on_jruby? - require 'jruby/synchronized' - - class JRubyArray < ::Array - include JRuby::Synchronized - end - JRubyArray - - when Concurrent.on_truffleruby? - require 'concurrent/thread_safe/util/data_structures' - - class TruffleRubyArray < ::Array - end - - ThreadSafe::Util.make_synchronized_on_truffleruby TruffleRubyArray - TruffleRubyArray - - else - warn 'Possibly unsupported Ruby implementation' - ::Array - end - private_constant :ArrayImplementation - - # @!macro concurrent_array - class Array < ArrayImplementation - end - -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/async.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/async.rb deleted file mode 100644 index f9f8adf0..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/async.rb +++ /dev/null @@ -1,449 +0,0 @@ -require 'concurrent/configuration' -require 'concurrent/ivar' -require 'concurrent/synchronization/lockable_object' - -module Concurrent - - # A mixin module that provides simple asynchronous behavior to a class, - # turning it into a simple actor. Loosely based on Erlang's - # [gen_server](http://www.erlang.org/doc/man/gen_server.html), but without - # supervision or linking. - # - # A more feature-rich {Concurrent::Actor} is also available when the - # capabilities of `Async` are too limited. - # - # ```cucumber - # Feature: - # As a stateful, plain old Ruby class - # I want safe, asynchronous behavior - # So my long-running methods don't block the main thread - # ``` - # - # The `Async` module is a way to mix simple yet powerful asynchronous - # capabilities into any plain old Ruby object or class, turning each object - # into a simple Actor. Method calls are processed on a background thread. The - # caller is free to perform other actions while processing occurs in the - # background. - # - # Method calls to the asynchronous object are made via two proxy methods: - # `async` (alias `cast`) and `await` (alias `call`). These proxy methods post - # the method call to the object's background thread and return a "future" - # which will eventually contain the result of the method call. - # - # This behavior is loosely patterned after Erlang's `gen_server` behavior. - # When an Erlang module implements the `gen_server` behavior it becomes - # inherently asynchronous. The `start` or `start_link` function spawns a - # process (similar to a thread but much more lightweight and efficient) and - # returns the ID of the process. Using the process ID, other processes can - # send messages to the `gen_server` via the `cast` and `call` methods. Unlike - # Erlang's `gen_server`, however, `Async` classes do not support linking or - # supervision trees. - # - # ## Basic Usage - # - # When this module is mixed into a class, objects of the class become inherently - # asynchronous. Each object gets its own background thread on which to post - # asynchronous method calls. Asynchronous method calls are executed in the - # background one at a time in the order they are received. - # - # To create an asynchronous class, simply mix in the `Concurrent::Async` module: - # - # ``` - # class Hello - # include Concurrent::Async - # - # def hello(name) - # "Hello, #{name}!" - # end - # end - # ``` - # - # Mixing this module into a class provides each object two proxy methods: - # `async` and `await`. These methods are thread safe with respect to the - # enclosing object. The former proxy allows methods to be called - # asynchronously by posting to the object's internal thread. The latter proxy - # allows a method to be called synchronously but does so safely with respect - # to any pending asynchronous method calls and ensures proper ordering. Both - # methods return a {Concurrent::IVar} which can be inspected for the result - # of the proxied method call. Calling a method with `async` will return a - # `:pending` `IVar` whereas `await` will return a `:complete` `IVar`. - # - # ``` - # class Echo - # include Concurrent::Async - # - # def echo(msg) - # print "#{msg}\n" - # end - # end - # - # horn = Echo.new - # horn.echo('zero') # synchronous, not thread-safe - # # returns the actual return value of the method - # - # horn.async.echo('one') # asynchronous, non-blocking, thread-safe - # # returns an IVar in the :pending state - # - # horn.await.echo('two') # synchronous, blocking, thread-safe - # # returns an IVar in the :complete state - # ``` - # - # ## Let It Fail - # - # The `async` and `await` proxy methods have built-in error protection based - # on Erlang's famous "let it fail" philosophy. Instance methods should not be - # programmed defensively. When an exception is raised by a delegated method - # the proxy will rescue the exception, expose it to the caller as the `reason` - # attribute of the returned future, then process the next method call. - # - # ## Calling Methods Internally - # - # External method calls should *always* use the `async` and `await` proxy - # methods. When one method calls another method, the `async` proxy should - # rarely be used and the `await` proxy should *never* be used. - # - # When an object calls one of its own methods using the `await` proxy the - # second call will be enqueued *behind* the currently running method call. - # Any attempt to wait on the result will fail as the second call will never - # run until after the current call completes. - # - # Calling a method using the `await` proxy from within a method that was - # itself called using `async` or `await` will irreversibly deadlock the - # object. Do *not* do this, ever. - # - # ## Instance Variables and Attribute Accessors - # - # Instance variables do not need to be thread-safe so long as they are private. - # Asynchronous method calls are processed in the order they are received and - # are processed one at a time. Therefore private instance variables can only - # be accessed by one thread at a time. This is inherently thread-safe. - # - # When using private instance variables within asynchronous methods, the best - # practice is to read the instance variable into a local variable at the start - # of the method then update the instance variable at the *end* of the method. - # This way, should an exception be raised during method execution the internal - # state of the object will not have been changed. - # - # ### Reader Attributes - # - # The use of `attr_reader` is discouraged. Internal state exposed externally, - # when necessary, should be done through accessor methods. The instance - # variables exposed by these methods *must* be thread-safe, or they must be - # called using the `async` and `await` proxy methods. These two approaches are - # subtly different. - # - # When internal state is accessed via the `async` and `await` proxy methods, - # the returned value represents the object's state *at the time the call is - # processed*, which may *not* be the state of the object at the time the call - # is made. - # - # To get the state *at the current* time, irrespective of an enqueued method - # calls, a reader method must be called directly. This is inherently unsafe - # unless the instance variable is itself thread-safe, preferably using one - # of the thread-safe classes within this library. Because the thread-safe - # classes within this library are internally-locking or non-locking, they can - # be safely used from within asynchronous methods without causing deadlocks. - # - # Generally speaking, the best practice is to *not* expose internal state via - # reader methods. The best practice is to simply use the method's return value. - # - # ### Writer Attributes - # - # Writer attributes should never be used with asynchronous classes. Changing - # the state externally, even when done in the thread-safe way, is not logically - # consistent. Changes to state need to be timed with respect to all asynchronous - # method calls which my be in-process or enqueued. The only safe practice is to - # pass all necessary data to each method as arguments and let the method update - # the internal state as necessary. - # - # ## Class Constants, Variables, and Methods - # - # ### Class Constants - # - # Class constants do not need to be thread-safe. Since they are read-only and - # immutable they may be safely read both externally and from within - # asynchronous methods. - # - # ### Class Variables - # - # Class variables should be avoided. Class variables represent shared state. - # Shared state is anathema to concurrency. Should there be a need to share - # state using class variables they *must* be thread-safe, preferably - # using the thread-safe classes within this library. When updating class - # variables, never assign a new value/object to the variable itself. Assignment - # is not thread-safe in Ruby. Instead, use the thread-safe update functions - # of the variable itself to change the value. - # - # The best practice is to *never* use class variables with `Async` classes. - # - # ### Class Methods - # - # Class methods which are pure functions are safe. Class methods which modify - # class variables should be avoided, for all the reasons listed above. - # - # ## An Important Note About Thread Safe Guarantees - # - # > Thread safe guarantees can only be made when asynchronous method calls - # > are not mixed with direct method calls. Use only direct method calls - # > when the object is used exclusively on a single thread. Use only - # > `async` and `await` when the object is shared between threads. Once you - # > call a method using `async` or `await`, you should no longer call methods - # > directly on the object. Use `async` and `await` exclusively from then on. - # - # @example - # - # class Echo - # include Concurrent::Async - # - # def echo(msg) - # print "#{msg}\n" - # end - # end - # - # horn = Echo.new - # horn.echo('zero') # synchronous, not thread-safe - # # returns the actual return value of the method - # - # horn.async.echo('one') # asynchronous, non-blocking, thread-safe - # # returns an IVar in the :pending state - # - # horn.await.echo('two') # synchronous, blocking, thread-safe - # # returns an IVar in the :complete state - # - # @see Concurrent::Actor - # @see https://en.wikipedia.org/wiki/Actor_model "Actor Model" at Wikipedia - # @see http://www.erlang.org/doc/man/gen_server.html Erlang gen_server - # @see http://c2.com/cgi/wiki?LetItCrash "Let It Crash" at http://c2.com/ - module Async - - # @!method self.new(*args, &block) - # - # Instanciate a new object and ensure proper initialization of the - # synchronization mechanisms. - # - # @param [Array] args Zero or more arguments to be passed to the - # object's initializer. - # @param [Proc] block Optional block to pass to the object's initializer. - # @return [Object] A properly initialized object of the asynchronous class. - - # Check for the presence of a method on an object and determine if a given - # set of arguments matches the required arity. - # - # @param [Object] obj the object to check against - # @param [Symbol] method the method to check the object for - # @param [Array] args zero or more arguments for the arity check - # - # @raise [NameError] the object does not respond to `method` method - # @raise [ArgumentError] the given `args` do not match the arity of `method` - # - # @note This check is imperfect because of the way Ruby reports the arity of - # methods with a variable number of arguments. It is possible to determine - # if too few arguments are given but impossible to determine if too many - # arguments are given. This check may also fail to recognize dynamic behavior - # of the object, such as methods simulated with `method_missing`. - # - # @see http://www.ruby-doc.org/core-2.1.1/Method.html#method-i-arity Method#arity - # @see http://ruby-doc.org/core-2.1.0/Object.html#method-i-respond_to-3F Object#respond_to? - # @see http://www.ruby-doc.org/core-2.1.0/BasicObject.html#method-i-method_missing BasicObject#method_missing - # - # @!visibility private - def self.validate_argc(obj, method, *args) - argc = args.length - arity = obj.method(method).arity - - if arity >= 0 && argc != arity - raise ArgumentError.new("wrong number of arguments (#{argc} for #{arity})") - elsif arity < 0 && (arity = (arity + 1).abs) > argc - raise ArgumentError.new("wrong number of arguments (#{argc} for #{arity}..*)") - end - end - - # @!visibility private - def self.included(base) - base.singleton_class.send(:alias_method, :original_new, :new) - base.extend(ClassMethods) - super(base) - end - - # @!visibility private - module ClassMethods - def new(*args, &block) - obj = original_new(*args, &block) - obj.send(:init_synchronization) - obj - end - ruby2_keywords :new if respond_to?(:ruby2_keywords, true) - end - private_constant :ClassMethods - - # Delegates asynchronous, thread-safe method calls to the wrapped object. - # - # @!visibility private - class AsyncDelegator < Synchronization::LockableObject - safe_initialization! - - # Create a new delegator object wrapping the given delegate. - # - # @param [Object] delegate the object to wrap and delegate method calls to - def initialize(delegate) - super() - @delegate = delegate - @queue = [] - @executor = Concurrent.global_io_executor - @ruby_pid = $$ - end - - # Delegates method calls to the wrapped object. - # - # @param [Symbol] method the method being called - # @param [Array] args zero or more arguments to the method - # - # @return [IVar] the result of the method call - # - # @raise [NameError] the object does not respond to `method` method - # @raise [ArgumentError] the given `args` do not match the arity of `method` - def method_missing(method, *args, &block) - super unless @delegate.respond_to?(method) - Async::validate_argc(@delegate, method, *args) - - ivar = Concurrent::IVar.new - synchronize do - reset_if_forked - @queue.push [ivar, method, args, block] - @executor.post { perform } if @queue.length == 1 - end - - ivar - end - - # Check whether the method is responsive - # - # @param [Symbol] method the method being called - def respond_to_missing?(method, include_private = false) - @delegate.respond_to?(method) || super - end - - # Perform all enqueued tasks. - # - # This method must be called from within the executor. It must not be - # called while already running. It will loop until the queue is empty. - def perform - loop do - ivar, method, args, block = synchronize { @queue.first } - break unless ivar # queue is empty - - begin - ivar.set(@delegate.send(method, *args, &block)) - rescue => error - ivar.fail(error) - end - - synchronize do - @queue.shift - return if @queue.empty? - end - end - end - - def reset_if_forked - if $$ != @ruby_pid - @queue.clear - @ruby_pid = $$ - end - end - end - private_constant :AsyncDelegator - - # Delegates synchronous, thread-safe method calls to the wrapped object. - # - # @!visibility private - class AwaitDelegator - - # Create a new delegator object wrapping the given delegate. - # - # @param [AsyncDelegator] delegate the object to wrap and delegate method calls to - def initialize(delegate) - @delegate = delegate - end - - # Delegates method calls to the wrapped object. - # - # @param [Symbol] method the method being called - # @param [Array] args zero or more arguments to the method - # - # @return [IVar] the result of the method call - # - # @raise [NameError] the object does not respond to `method` method - # @raise [ArgumentError] the given `args` do not match the arity of `method` - def method_missing(method, *args, &block) - ivar = @delegate.send(method, *args, &block) - ivar.wait - ivar - end - - # Check whether the method is responsive - # - # @param [Symbol] method the method being called - def respond_to_missing?(method, include_private = false) - @delegate.respond_to?(method) || super - end - end - private_constant :AwaitDelegator - - # Causes the chained method call to be performed asynchronously on the - # object's thread. The delegated method will return a future in the - # `:pending` state and the method call will have been scheduled on the - # object's thread. The final disposition of the method call can be obtained - # by inspecting the returned future. - # - # @!macro async_thread_safety_warning - # @note The method call is guaranteed to be thread safe with respect to - # all other method calls against the same object that are called with - # either `async` or `await`. The mutable nature of Ruby references - # (and object orientation in general) prevent any other thread safety - # guarantees. Do NOT mix direct method calls with delegated method calls. - # Use *only* delegated method calls when sharing the object between threads. - # - # @return [Concurrent::IVar] the pending result of the asynchronous operation - # - # @raise [NameError] the object does not respond to the requested method - # @raise [ArgumentError] the given `args` do not match the arity of - # the requested method - def async - @__async_delegator__ - end - alias_method :cast, :async - - # Causes the chained method call to be performed synchronously on the - # current thread. The delegated will return a future in either the - # `:fulfilled` or `:rejected` state and the delegated method will have - # completed. The final disposition of the delegated method can be obtained - # by inspecting the returned future. - # - # @!macro async_thread_safety_warning - # - # @return [Concurrent::IVar] the completed result of the synchronous operation - # - # @raise [NameError] the object does not respond to the requested method - # @raise [ArgumentError] the given `args` do not match the arity of the - # requested method - def await - @__await_delegator__ - end - alias_method :call, :await - - # Initialize the internal serializer and other stnchronization mechanisms. - # - # @note This method *must* be called immediately upon object construction. - # This is the only way thread-safe initialization can be guaranteed. - # - # @!visibility private - def init_synchronization - return self if defined?(@__async_initialized__) && @__async_initialized__ - @__async_initialized__ = true - @__async_delegator__ = AsyncDelegator.new(self) - @__await_delegator__ = AwaitDelegator.new(@__async_delegator__) - self - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atom.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atom.rb deleted file mode 100644 index 1074006d..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atom.rb +++ /dev/null @@ -1,222 +0,0 @@ -require 'concurrent/atomic/atomic_reference' -require 'concurrent/collection/copy_on_notify_observer_set' -require 'concurrent/concern/observable' -require 'concurrent/synchronization/object' - -# @!macro thread_safe_variable_comparison -# -# ## Thread-safe Variable Classes -# -# Each of the thread-safe variable classes is designed to solve a different -# problem. In general: -# -# * *{Concurrent::Agent}:* Shared, mutable variable providing independent, -# uncoordinated, *asynchronous* change of individual values. Best used when -# the value will undergo frequent, complex updates. Suitable when the result -# of an update does not need to be known immediately. -# * *{Concurrent::Atom}:* Shared, mutable variable providing independent, -# uncoordinated, *synchronous* change of individual values. Best used when -# the value will undergo frequent reads but only occasional, though complex, -# updates. Suitable when the result of an update must be known immediately. -# * *{Concurrent::AtomicReference}:* A simple object reference that can be updated -# atomically. Updates are synchronous but fast. Best used when updates a -# simple set operations. Not suitable when updates are complex. -# {Concurrent::AtomicBoolean} and {Concurrent::AtomicFixnum} are similar -# but optimized for the given data type. -# * *{Concurrent::Exchanger}:* Shared, stateless synchronization point. Used -# when two or more threads need to exchange data. The threads will pair then -# block on each other until the exchange is complete. -# * *{Concurrent::MVar}:* Shared synchronization point. Used when one thread -# must give a value to another, which must take the value. The threads will -# block on each other until the exchange is complete. -# * *{Concurrent::ThreadLocalVar}:* Shared, mutable, isolated variable which -# holds a different value for each thread which has access. Often used as -# an instance variable in objects which must maintain different state -# for different threads. -# * *{Concurrent::TVar}:* Shared, mutable variables which provide -# *coordinated*, *synchronous*, change of *many* stated. Used when multiple -# value must change together, in an all-or-nothing transaction. - - -module Concurrent - - # Atoms provide a way to manage shared, synchronous, independent state. - # - # An atom is initialized with an initial value and an optional validation - # proc. At any time the value of the atom can be synchronously and safely - # changed. If a validator is given at construction then any new value - # will be checked against the validator and will be rejected if the - # validator returns false or raises an exception. - # - # There are two ways to change the value of an atom: {#compare_and_set} and - # {#swap}. The former will set the new value if and only if it validates and - # the current value matches the new value. The latter will atomically set the - # new value to the result of running the given block if and only if that - # value validates. - # - # ## Example - # - # ``` - # def next_fibonacci(set = nil) - # return [0, 1] if set.nil? - # set + [set[-2..-1].reduce{|sum,x| sum + x }] - # end - # - # # create an atom with an initial value - # atom = Concurrent::Atom.new(next_fibonacci) - # - # # send a few update requests - # 5.times do - # atom.swap{|set| next_fibonacci(set) } - # end - # - # # get the current value - # atom.value #=> [0, 1, 1, 2, 3, 5, 8] - # ``` - # - # ## Observation - # - # Atoms support observers through the {Concurrent::Observable} mixin module. - # Notification of observers occurs every time the value of the Atom changes. - # When notified the observer will receive three arguments: `time`, `old_value`, - # and `new_value`. The `time` argument is the time at which the value change - # occurred. The `old_value` is the value of the Atom when the change began - # The `new_value` is the value to which the Atom was set when the change - # completed. Note that `old_value` and `new_value` may be the same. This is - # not an error. It simply means that the change operation returned the same - # value. - # - # Unlike in Clojure, `Atom` cannot participate in {Concurrent::TVar} transactions. - # - # @!macro thread_safe_variable_comparison - # - # @see http://clojure.org/atoms Clojure Atoms - # @see http://clojure.org/state Values and Change - Clojure's approach to Identity and State - class Atom < Synchronization::Object - include Concern::Observable - - safe_initialization! - attr_atomic(:value) - private :value=, :swap_value, :compare_and_set_value, :update_value - public :value - alias_method :deref, :value - - # @!method value - # The current value of the atom. - # - # @return [Object] The current value. - - # Create a new atom with the given initial value. - # - # @param [Object] value The initial value - # @param [Hash] opts The options used to configure the atom - # @option opts [Proc] :validator (nil) Optional proc used to validate new - # values. It must accept one and only one argument which will be the - # intended new value. The validator will return true if the new value - # is acceptable else return false (preferrably) or raise an exception. - # - # @!macro deref_options - # - # @raise [ArgumentError] if the validator is not a `Proc` (when given) - def initialize(value, opts = {}) - super() - @Validator = opts.fetch(:validator, -> v { true }) - self.observers = Collection::CopyOnNotifyObserverSet.new - self.value = value - end - - # Atomically swaps the value of atom using the given block. The current - # value will be passed to the block, as will any arguments passed as - # arguments to the function. The new value will be validated against the - # (optional) validator proc given at construction. If validation fails the - # value will not be changed. - # - # Internally, {#swap} reads the current value, applies the block to it, and - # attempts to compare-and-set it in. Since another thread may have changed - # the value in the intervening time, it may have to retry, and does so in a - # spin loop. The net effect is that the value will always be the result of - # the application of the supplied block to a current value, atomically. - # However, because the block might be called multiple times, it must be free - # of side effects. - # - # @note The given block may be called multiple times, and thus should be free - # of side effects. - # - # @param [Object] args Zero or more arguments passed to the block. - # - # @yield [value, args] Calculates a new value for the atom based on the - # current value and any supplied arguments. - # @yieldparam value [Object] The current value of the atom. - # @yieldparam args [Object] All arguments passed to the function, in order. - # @yieldreturn [Object] The intended new value of the atom. - # - # @return [Object] The final value of the atom after all operations and - # validations are complete. - # - # @raise [ArgumentError] When no block is given. - def swap(*args) - raise ArgumentError.new('no block given') unless block_given? - - loop do - old_value = value - new_value = yield(old_value, *args) - begin - break old_value unless valid?(new_value) - break new_value if compare_and_set(old_value, new_value) - rescue - break old_value - end - end - end - - # Atomically sets the value of atom to the new value if and only if the - # current value of the atom is identical to the old value and the new - # value successfully validates against the (optional) validator given - # at construction. - # - # @param [Object] old_value The expected current value. - # @param [Object] new_value The intended new value. - # - # @return [Boolean] True if the value is changed else false. - def compare_and_set(old_value, new_value) - if valid?(new_value) && compare_and_set_value(old_value, new_value) - observers.notify_observers(Time.now, old_value, new_value) - true - else - false - end - end - - # Atomically sets the value of atom to the new value without regard for the - # current value so long as the new value successfully validates against the - # (optional) validator given at construction. - # - # @param [Object] new_value The intended new value. - # - # @return [Object] The final value of the atom after all operations and - # validations are complete. - def reset(new_value) - old_value = value - if valid?(new_value) - self.value = new_value - observers.notify_observers(Time.now, old_value, new_value) - new_value - else - old_value - end - end - - private - - # Is the new value valid? - # - # @param [Object] new_value The intended new value. - # @return [Boolean] false if the validator function returns false or raises - # an exception else true - def valid?(new_value) - @Validator.call(new_value) - rescue - false - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/atomic_boolean.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/atomic_boolean.rb deleted file mode 100644 index f775691a..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/atomic_boolean.rb +++ /dev/null @@ -1,127 +0,0 @@ -require 'concurrent/utility/native_extension_loader' # load native parts first - -require 'concurrent/atomic/mutex_atomic_boolean' - -module Concurrent - - ################################################################### - - # @!macro atomic_boolean_method_initialize - # - # Creates a new `AtomicBoolean` with the given initial value. - # - # @param [Boolean] initial the initial value - - # @!macro atomic_boolean_method_value_get - # - # Retrieves the current `Boolean` value. - # - # @return [Boolean] the current value - - # @!macro atomic_boolean_method_value_set - # - # Explicitly sets the value. - # - # @param [Boolean] value the new value to be set - # - # @return [Boolean] the current value - - # @!macro atomic_boolean_method_true_question - # - # Is the current value `true` - # - # @return [Boolean] true if the current value is `true`, else false - - # @!macro atomic_boolean_method_false_question - # - # Is the current value `false` - # - # @return [Boolean] true if the current value is `false`, else false - - # @!macro atomic_boolean_method_make_true - # - # Explicitly sets the value to true. - # - # @return [Boolean] true if value has changed, otherwise false - - # @!macro atomic_boolean_method_make_false - # - # Explicitly sets the value to false. - # - # @return [Boolean] true if value has changed, otherwise false - - ################################################################### - - # @!macro atomic_boolean_public_api - # - # @!method initialize(initial = false) - # @!macro atomic_boolean_method_initialize - # - # @!method value - # @!macro atomic_boolean_method_value_get - # - # @!method value=(value) - # @!macro atomic_boolean_method_value_set - # - # @!method true? - # @!macro atomic_boolean_method_true_question - # - # @!method false? - # @!macro atomic_boolean_method_false_question - # - # @!method make_true - # @!macro atomic_boolean_method_make_true - # - # @!method make_false - # @!macro atomic_boolean_method_make_false - - ################################################################### - - # @!visibility private - # @!macro internal_implementation_note - AtomicBooleanImplementation = case - when Concurrent.on_cruby? && Concurrent.c_extensions_loaded? - CAtomicBoolean - when Concurrent.on_jruby? - JavaAtomicBoolean - else - MutexAtomicBoolean - end - private_constant :AtomicBooleanImplementation - - # @!macro atomic_boolean - # - # A boolean value that can be updated atomically. Reads and writes to an atomic - # boolean and thread-safe and guaranteed to succeed. Reads and writes may block - # briefly but no explicit locking is required. - # - # @!macro thread_safe_variable_comparison - # - # Performance: - # - # ``` - # Testing with ruby 2.1.2 - # Testing with Concurrent::MutexAtomicBoolean... - # 2.790000 0.000000 2.790000 ( 2.791454) - # Testing with Concurrent::CAtomicBoolean... - # 0.740000 0.000000 0.740000 ( 0.740206) - # - # Testing with jruby 1.9.3 - # Testing with Concurrent::MutexAtomicBoolean... - # 5.240000 2.520000 7.760000 ( 3.683000) - # Testing with Concurrent::JavaAtomicBoolean... - # 3.340000 0.010000 3.350000 ( 0.855000) - # ``` - # - # @see http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicBoolean.html java.util.concurrent.atomic.AtomicBoolean - # - # @!macro atomic_boolean_public_api - class AtomicBoolean < AtomicBooleanImplementation - # @return [String] Short string representation. - def to_s - format '%s value:%s>', super[0..-2], value - end - - alias_method :inspect, :to_s - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/atomic_fixnum.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/atomic_fixnum.rb deleted file mode 100644 index 26cd05d8..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/atomic_fixnum.rb +++ /dev/null @@ -1,144 +0,0 @@ -require 'concurrent/utility/native_extension_loader' # load native parts first - -require 'concurrent/atomic/mutex_atomic_fixnum' - -module Concurrent - - ################################################################### - - # @!macro atomic_fixnum_method_initialize - # - # Creates a new `AtomicFixnum` with the given initial value. - # - # @param [Fixnum] initial the initial value - # @raise [ArgumentError] if the initial value is not a `Fixnum` - - # @!macro atomic_fixnum_method_value_get - # - # Retrieves the current `Fixnum` value. - # - # @return [Fixnum] the current value - - # @!macro atomic_fixnum_method_value_set - # - # Explicitly sets the value. - # - # @param [Fixnum] value the new value to be set - # - # @return [Fixnum] the current value - # - # @raise [ArgumentError] if the new value is not a `Fixnum` - - # @!macro atomic_fixnum_method_increment - # - # Increases the current value by the given amount (defaults to 1). - # - # @param [Fixnum] delta the amount by which to increase the current value - # - # @return [Fixnum] the current value after incrementation - - # @!macro atomic_fixnum_method_decrement - # - # Decreases the current value by the given amount (defaults to 1). - # - # @param [Fixnum] delta the amount by which to decrease the current value - # - # @return [Fixnum] the current value after decrementation - - # @!macro atomic_fixnum_method_compare_and_set - # - # Atomically sets the value to the given updated value if the current - # value == the expected value. - # - # @param [Fixnum] expect the expected value - # @param [Fixnum] update the new value - # - # @return [Boolean] true if the value was updated else false - - # @!macro atomic_fixnum_method_update - # - # Pass the current value to the given block, replacing it - # with the block's result. May retry if the value changes - # during the block's execution. - # - # @yield [Object] Calculate a new value for the atomic reference using - # given (old) value - # @yieldparam [Object] old_value the starting value of the atomic reference - # - # @return [Object] the new value - - ################################################################### - - # @!macro atomic_fixnum_public_api - # - # @!method initialize(initial = 0) - # @!macro atomic_fixnum_method_initialize - # - # @!method value - # @!macro atomic_fixnum_method_value_get - # - # @!method value=(value) - # @!macro atomic_fixnum_method_value_set - # - # @!method increment(delta = 1) - # @!macro atomic_fixnum_method_increment - # - # @!method decrement(delta = 1) - # @!macro atomic_fixnum_method_decrement - # - # @!method compare_and_set(expect, update) - # @!macro atomic_fixnum_method_compare_and_set - # - # @!method update - # @!macro atomic_fixnum_method_update - - ################################################################### - - # @!visibility private - # @!macro internal_implementation_note - AtomicFixnumImplementation = case - when Concurrent.on_cruby? && Concurrent.c_extensions_loaded? - CAtomicFixnum - when Concurrent.on_jruby? - JavaAtomicFixnum - else - MutexAtomicFixnum - end - private_constant :AtomicFixnumImplementation - - # @!macro atomic_fixnum - # - # A numeric value that can be updated atomically. Reads and writes to an atomic - # fixnum and thread-safe and guaranteed to succeed. Reads and writes may block - # briefly but no explicit locking is required. - # - # @!macro thread_safe_variable_comparison - # - # Performance: - # - # ``` - # Testing with ruby 2.1.2 - # Testing with Concurrent::MutexAtomicFixnum... - # 3.130000 0.000000 3.130000 ( 3.136505) - # Testing with Concurrent::CAtomicFixnum... - # 0.790000 0.000000 0.790000 ( 0.785550) - # - # Testing with jruby 1.9.3 - # Testing with Concurrent::MutexAtomicFixnum... - # 5.460000 2.460000 7.920000 ( 3.715000) - # Testing with Concurrent::JavaAtomicFixnum... - # 4.520000 0.030000 4.550000 ( 1.187000) - # ``` - # - # @see http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicLong.html java.util.concurrent.atomic.AtomicLong - # - # @!macro atomic_fixnum_public_api - class AtomicFixnum < AtomicFixnumImplementation - # @return [String] Short string representation. - def to_s - format '%s value:%s>', super[0..-2], value - end - - alias_method :inspect, :to_s - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/atomic_markable_reference.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/atomic_markable_reference.rb deleted file mode 100644 index e16be657..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/atomic_markable_reference.rb +++ /dev/null @@ -1,167 +0,0 @@ -require 'concurrent/errors' -require 'concurrent/synchronization/object' - -module Concurrent - # An atomic reference which maintains an object reference along with a mark bit - # that can be updated atomically. - # - # @see http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicMarkableReference.html - # java.util.concurrent.atomic.AtomicMarkableReference - class AtomicMarkableReference < ::Concurrent::Synchronization::Object - - attr_atomic(:reference) - private :reference, :reference=, :swap_reference, :compare_and_set_reference, :update_reference - - def initialize(value = nil, mark = false) - super() - self.reference = immutable_array(value, mark) - end - - # Atomically sets the value and mark to the given updated value and - # mark given both: - # - the current value == the expected value && - # - the current mark == the expected mark - # - # @param [Object] expected_val the expected value - # @param [Object] new_val the new value - # @param [Boolean] expected_mark the expected mark - # @param [Boolean] new_mark the new mark - # - # @return [Boolean] `true` if successful. A `false` return indicates - # that the actual value was not equal to the expected value or the - # actual mark was not equal to the expected mark - def compare_and_set(expected_val, new_val, expected_mark, new_mark) - # Memoize a valid reference to the current AtomicReference for - # later comparison. - current = reference - curr_val, curr_mark = current - - # Ensure that that the expected marks match. - return false unless expected_mark == curr_mark - - if expected_val.is_a? Numeric - # If the object is a numeric, we need to ensure we are comparing - # the numerical values - return false unless expected_val == curr_val - else - # Otherwise, we need to ensure we are comparing the object identity. - # Theoretically, this could be incorrect if a user monkey-patched - # `Object#equal?`, but they should know that they are playing with - # fire at that point. - return false unless expected_val.equal? curr_val - end - - prospect = immutable_array(new_val, new_mark) - - compare_and_set_reference current, prospect - end - - alias_method :compare_and_swap, :compare_and_set - - # Gets the current reference and marked values. - # - # @return [Array] the current reference and marked values - def get - reference - end - - # Gets the current value of the reference - # - # @return [Object] the current value of the reference - def value - reference[0] - end - - # Gets the current marked value - # - # @return [Boolean] the current marked value - def mark - reference[1] - end - - alias_method :marked?, :mark - - # _Unconditionally_ sets to the given value of both the reference and - # the mark. - # - # @param [Object] new_val the new value - # @param [Boolean] new_mark the new mark - # - # @return [Array] both the new value and the new mark - def set(new_val, new_mark) - self.reference = immutable_array(new_val, new_mark) - end - - # Pass the current value and marked state to the given block, replacing it - # with the block's results. May retry if the value changes during the - # block's execution. - # - # @yield [Object] Calculate a new value and marked state for the atomic - # reference using given (old) value and (old) marked - # @yieldparam [Object] old_val the starting value of the atomic reference - # @yieldparam [Boolean] old_mark the starting state of marked - # - # @return [Array] the new value and new mark - def update - loop do - old_val, old_mark = reference - new_val, new_mark = yield old_val, old_mark - - if compare_and_set old_val, new_val, old_mark, new_mark - return immutable_array(new_val, new_mark) - end - end - end - - # Pass the current value to the given block, replacing it - # with the block's result. Raise an exception if the update - # fails. - # - # @yield [Object] Calculate a new value and marked state for the atomic - # reference using given (old) value and (old) marked - # @yieldparam [Object] old_val the starting value of the atomic reference - # @yieldparam [Boolean] old_mark the starting state of marked - # - # @return [Array] the new value and marked state - # - # @raise [Concurrent::ConcurrentUpdateError] if the update fails - def try_update! - old_val, old_mark = reference - new_val, new_mark = yield old_val, old_mark - - unless compare_and_set old_val, new_val, old_mark, new_mark - fail ::Concurrent::ConcurrentUpdateError, - 'AtomicMarkableReference: Update failed due to race condition.', - 'Note: If you would like to guarantee an update, please use ' + - 'the `AtomicMarkableReference#update` method.' - end - - immutable_array(new_val, new_mark) - end - - # Pass the current value to the given block, replacing it with the - # block's result. Simply return nil if update fails. - # - # @yield [Object] Calculate a new value and marked state for the atomic - # reference using given (old) value and (old) marked - # @yieldparam [Object] old_val the starting value of the atomic reference - # @yieldparam [Boolean] old_mark the starting state of marked - # - # @return [Array] the new value and marked state, or nil if - # the update failed - def try_update - old_val, old_mark = reference - new_val, new_mark = yield old_val, old_mark - - return unless compare_and_set old_val, new_val, old_mark, new_mark - - immutable_array(new_val, new_mark) - end - - private - - def immutable_array(*args) - args.freeze - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/atomic_reference.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/atomic_reference.rb deleted file mode 100644 index bb5fb774..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/atomic_reference.rb +++ /dev/null @@ -1,135 +0,0 @@ -require 'concurrent/utility/native_extension_loader' # load native parts first - -require 'concurrent/atomic_reference/atomic_direct_update' -require 'concurrent/atomic_reference/numeric_cas_wrapper' -require 'concurrent/atomic_reference/mutex_atomic' - -# Shim for TruffleRuby::AtomicReference -if Concurrent.on_truffleruby? && !defined?(TruffleRuby::AtomicReference) - # @!visibility private - module TruffleRuby - AtomicReference = Truffle::AtomicReference - end -end - -module Concurrent - - # @!macro internal_implementation_note - AtomicReferenceImplementation = case - when Concurrent.on_cruby? && Concurrent.c_extensions_loaded? - # @!visibility private - # @!macro internal_implementation_note - class CAtomicReference - include AtomicDirectUpdate - include AtomicNumericCompareAndSetWrapper - alias_method :compare_and_swap, :compare_and_set - end - CAtomicReference - when Concurrent.on_jruby? - # @!visibility private - # @!macro internal_implementation_note - class JavaAtomicReference - include AtomicDirectUpdate - end - JavaAtomicReference - when Concurrent.on_truffleruby? - class TruffleRubyAtomicReference < TruffleRuby::AtomicReference - include AtomicDirectUpdate - alias_method :value, :get - alias_method :value=, :set - alias_method :compare_and_swap, :compare_and_set - alias_method :swap, :get_and_set - end - TruffleRubyAtomicReference - else - MutexAtomicReference - end - private_constant :AtomicReferenceImplementation - - # An object reference that may be updated atomically. All read and write - # operations have java volatile semantic. - # - # @!macro thread_safe_variable_comparison - # - # @see http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicReference.html - # @see http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/package-summary.html - # - # @!method initialize(value = nil) - # @!macro atomic_reference_method_initialize - # @param [Object] value The initial value. - # - # @!method get - # @!macro atomic_reference_method_get - # Gets the current value. - # @return [Object] the current value - # - # @!method set(new_value) - # @!macro atomic_reference_method_set - # Sets to the given value. - # @param [Object] new_value the new value - # @return [Object] the new value - # - # @!method get_and_set(new_value) - # @!macro atomic_reference_method_get_and_set - # Atomically sets to the given value and returns the old value. - # @param [Object] new_value the new value - # @return [Object] the old value - # - # @!method compare_and_set(old_value, new_value) - # @!macro atomic_reference_method_compare_and_set - # - # Atomically sets the value to the given updated value if - # the current value == the expected value. - # - # @param [Object] old_value the expected value - # @param [Object] new_value the new value - # - # @return [Boolean] `true` if successful. A `false` return indicates - # that the actual value was not equal to the expected value. - # - # @!method update - # Pass the current value to the given block, replacing it - # with the block's result. May retry if the value changes - # during the block's execution. - # - # @yield [Object] Calculate a new value for the atomic reference using - # given (old) value - # @yieldparam [Object] old_value the starting value of the atomic reference - # @return [Object] the new value - # - # @!method try_update - # Pass the current value to the given block, replacing it - # with the block's result. Return nil if the update fails. - # - # @yield [Object] Calculate a new value for the atomic reference using - # given (old) value - # @yieldparam [Object] old_value the starting value of the atomic reference - # @note This method was altered to avoid raising an exception by default. - # Instead, this method now returns `nil` in case of failure. For more info, - # please see: https://github.com/ruby-concurrency/concurrent-ruby/pull/336 - # @return [Object] the new value, or nil if update failed - # - # @!method try_update! - # Pass the current value to the given block, replacing it - # with the block's result. Raise an exception if the update - # fails. - # - # @yield [Object] Calculate a new value for the atomic reference using - # given (old) value - # @yieldparam [Object] old_value the starting value of the atomic reference - # @note This behavior mimics the behavior of the original - # `AtomicReference#try_update` API. The reason this was changed was to - # avoid raising exceptions (which are inherently slow) by default. For more - # info: https://github.com/ruby-concurrency/concurrent-ruby/pull/336 - # @return [Object] the new value - # @raise [Concurrent::ConcurrentUpdateError] if the update fails - class AtomicReference < AtomicReferenceImplementation - - # @return [String] Short string representation. - def to_s - format '%s value:%s>', super[0..-2], get - end - - alias_method :inspect, :to_s - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/count_down_latch.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/count_down_latch.rb deleted file mode 100644 index d883aed6..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/count_down_latch.rb +++ /dev/null @@ -1,100 +0,0 @@ -require 'concurrent/utility/engine' -require 'concurrent/atomic/mutex_count_down_latch' -require 'concurrent/atomic/java_count_down_latch' - -module Concurrent - - ################################################################### - - # @!macro count_down_latch_method_initialize - # - # Create a new `CountDownLatch` with the initial `count`. - # - # @param [new] count the initial count - # - # @raise [ArgumentError] if `count` is not an integer or is less than zero - - # @!macro count_down_latch_method_wait - # - # Block on the latch until the counter reaches zero or until `timeout` is reached. - # - # @param [Fixnum] timeout the number of seconds to wait for the counter or `nil` - # to block indefinitely - # @return [Boolean] `true` if the `count` reaches zero else false on `timeout` - - # @!macro count_down_latch_method_count_down - # - # Signal the latch to decrement the counter. Will signal all blocked threads when - # the `count` reaches zero. - - # @!macro count_down_latch_method_count - # - # The current value of the counter. - # - # @return [Fixnum] the current value of the counter - - ################################################################### - - # @!macro count_down_latch_public_api - # - # @!method initialize(count = 1) - # @!macro count_down_latch_method_initialize - # - # @!method wait(timeout = nil) - # @!macro count_down_latch_method_wait - # - # @!method count_down - # @!macro count_down_latch_method_count_down - # - # @!method count - # @!macro count_down_latch_method_count - - ################################################################### - - # @!visibility private - # @!macro internal_implementation_note - CountDownLatchImplementation = case - when Concurrent.on_jruby? - JavaCountDownLatch - else - MutexCountDownLatch - end - private_constant :CountDownLatchImplementation - - # @!macro count_down_latch - # - # A synchronization object that allows one thread to wait on multiple other threads. - # The thread that will wait creates a `CountDownLatch` and sets the initial value - # (normally equal to the number of other threads). The initiating thread passes the - # latch to the other threads then waits for the other threads by calling the `#wait` - # method. Each of the other threads calls `#count_down` when done with its work. - # When the latch counter reaches zero the waiting thread is unblocked and continues - # with its work. A `CountDownLatch` can be used only once. Its value cannot be reset. - # - # @!macro count_down_latch_public_api - # @example Waiter and Decrementer - # latch = Concurrent::CountDownLatch.new(3) - # - # waiter = Thread.new do - # latch.wait() - # puts ("Waiter released") - # end - # - # decrementer = Thread.new do - # sleep(1) - # latch.count_down - # puts latch.count - # - # sleep(1) - # latch.count_down - # puts latch.count - # - # sleep(1) - # latch.count_down - # puts latch.count - # end - # - # [waiter, decrementer].each(&:join) - class CountDownLatch < CountDownLatchImplementation - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/cyclic_barrier.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/cyclic_barrier.rb deleted file mode 100644 index 9ebe29dd..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/cyclic_barrier.rb +++ /dev/null @@ -1,128 +0,0 @@ -require 'concurrent/synchronization/lockable_object' -require 'concurrent/utility/native_integer' - -module Concurrent - - # A synchronization aid that allows a set of threads to all wait for each - # other to reach a common barrier point. - # @example - # barrier = Concurrent::CyclicBarrier.new(3) - # jobs = Array.new(3) { |i| -> { sleep i; p done: i } } - # process = -> (i) do - # # waiting to start at the same time - # barrier.wait - # # execute job - # jobs[i].call - # # wait for others to finish - # barrier.wait - # end - # threads = 2.times.map do |i| - # Thread.new(i, &process) - # end - # - # # use main as well - # process.call 2 - # - # # here we can be sure that all jobs are processed - class CyclicBarrier < Synchronization::LockableObject - - # @!visibility private - Generation = Struct.new(:status) - private_constant :Generation - - # Create a new `CyclicBarrier` that waits for `parties` threads - # - # @param [Fixnum] parties the number of parties - # @yield an optional block that will be executed that will be executed after - # the last thread arrives and before the others are released - # - # @raise [ArgumentError] if `parties` is not an integer or is less than zero - def initialize(parties, &block) - Utility::NativeInteger.ensure_integer_and_bounds parties - Utility::NativeInteger.ensure_positive_and_no_zero parties - - super(&nil) - synchronize { ns_initialize parties, &block } - end - - # @return [Fixnum] the number of threads needed to pass the barrier - def parties - synchronize { @parties } - end - - # @return [Fixnum] the number of threads currently waiting on the barrier - def number_waiting - synchronize { @number_waiting } - end - - # Blocks on the barrier until the number of waiting threads is equal to - # `parties` or until `timeout` is reached or `reset` is called - # If a block has been passed to the constructor, it will be executed once by - # the last arrived thread before releasing the others - # @param [Fixnum] timeout the number of seconds to wait for the counter or - # `nil` to block indefinitely - # @return [Boolean] `true` if the `count` reaches zero else false on - # `timeout` or on `reset` or if the barrier is broken - def wait(timeout = nil) - synchronize do - - return false unless @generation.status == :waiting - - @number_waiting += 1 - - if @number_waiting == @parties - @action.call if @action - ns_generation_done @generation, :fulfilled - true - else - generation = @generation - if ns_wait_until(timeout) { generation.status != :waiting } - generation.status == :fulfilled - else - ns_generation_done generation, :broken, false - false - end - end - end - end - - # resets the barrier to its initial state - # If there is at least one waiting thread, it will be woken up, the `wait` - # method will return false and the barrier will be broken - # If the barrier is broken, this method restores it to the original state - # - # @return [nil] - def reset - synchronize { ns_generation_done @generation, :reset } - end - - # A barrier can be broken when: - # - a thread called the `reset` method while at least one other thread was waiting - # - at least one thread timed out on `wait` method - # - # A broken barrier can be restored using `reset` it's safer to create a new one - # @return [Boolean] true if the barrier is broken otherwise false - def broken? - synchronize { @generation.status != :waiting } - end - - protected - - def ns_generation_done(generation, status, continue = true) - generation.status = status - ns_next_generation if continue - ns_broadcast - end - - def ns_next_generation - @generation = Generation.new(:waiting) - @number_waiting = 0 - end - - def ns_initialize(parties, &block) - @parties = parties - @action = block - ns_next_generation - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/event.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/event.rb deleted file mode 100644 index ccf84c9d..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/event.rb +++ /dev/null @@ -1,109 +0,0 @@ -require 'thread' -require 'concurrent/synchronization/lockable_object' - -module Concurrent - - # Old school kernel-style event reminiscent of Win32 programming in C++. - # - # When an `Event` is created it is in the `unset` state. Threads can choose to - # `#wait` on the event, blocking until released by another thread. When one - # thread wants to alert all blocking threads it calls the `#set` method which - # will then wake up all listeners. Once an `Event` has been set it remains set. - # New threads calling `#wait` will return immediately. An `Event` may be - # `#reset` at any time once it has been set. - # - # @see http://msdn.microsoft.com/en-us/library/windows/desktop/ms682655.aspx - # @example - # event = Concurrent::Event.new - # - # t1 = Thread.new do - # puts "t1 is waiting" - # event.wait(1) - # puts "event occurred" - # end - # - # t2 = Thread.new do - # puts "t2 calling set" - # event.set - # end - # - # [t1, t2].each(&:join) - # - # # prints: - # # t1 is waiting - # # t2 calling set - # # event occurred - class Event < Synchronization::LockableObject - - # Creates a new `Event` in the unset state. Threads calling `#wait` on the - # `Event` will block. - def initialize - super - synchronize { ns_initialize } - end - - # Is the object in the set state? - # - # @return [Boolean] indicating whether or not the `Event` has been set - def set? - synchronize { @set } - end - - # Trigger the event, setting the state to `set` and releasing all threads - # waiting on the event. Has no effect if the `Event` has already been set. - # - # @return [Boolean] should always return `true` - def set - synchronize { ns_set } - end - - def try? - synchronize { @set ? false : ns_set } - end - - # Reset a previously set event back to the `unset` state. - # Has no effect if the `Event` has not yet been set. - # - # @return [Boolean] should always return `true` - def reset - synchronize do - if @set - @set = false - @iteration +=1 - end - true - end - end - - # Wait a given number of seconds for the `Event` to be set by another - # thread. Will wait forever when no `timeout` value is given. Returns - # immediately if the `Event` has already been set. - # - # @return [Boolean] true if the `Event` was set before timeout else false - def wait(timeout = nil) - synchronize do - unless @set - iteration = @iteration - ns_wait_until(timeout) { iteration < @iteration || @set } - else - true - end - end - end - - protected - - def ns_set - unless @set - @set = true - ns_broadcast - end - true - end - - def ns_initialize - @set = false - @iteration = 0 - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/fiber_local_var.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/fiber_local_var.rb deleted file mode 100644 index e90fc24f..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/fiber_local_var.rb +++ /dev/null @@ -1,109 +0,0 @@ -require 'concurrent/constants' -require_relative 'locals' - -module Concurrent - - # A `FiberLocalVar` is a variable where the value is different for each fiber. - # Each variable may have a default value, but when you modify the variable only - # the current fiber will ever see that change. - # - # This is similar to Ruby's built-in fiber-local variables (`Thread.current[:name]`), - # but with these major advantages: - # * `FiberLocalVar` has its own identity, it doesn't need a Symbol. - # * Each Ruby's built-in fiber-local variable leaks some memory forever (it's a Symbol held forever on the fiber), - # so it's only OK to create a small amount of them. - # `FiberLocalVar` has no such issue and it is fine to create many of them. - # * Ruby's built-in fiber-local variables leak forever the value set on each fiber (unless set to nil explicitly). - # `FiberLocalVar` automatically removes the mapping for each fiber once the `FiberLocalVar` instance is GC'd. - # - # @example - # v = FiberLocalVar.new(14) - # v.value #=> 14 - # v.value = 2 - # v.value #=> 2 - # - # @example - # v = FiberLocalVar.new(14) - # - # Fiber.new do - # v.value #=> 14 - # v.value = 1 - # v.value #=> 1 - # end.resume - # - # Fiber.new do - # v.value #=> 14 - # v.value = 2 - # v.value #=> 2 - # end.resume - # - # v.value #=> 14 - class FiberLocalVar - LOCALS = FiberLocals.new - - # Creates a fiber local variable. - # - # @param [Object] default the default value when otherwise unset - # @param [Proc] default_block Optional block that gets called to obtain the - # default value for each fiber - def initialize(default = nil, &default_block) - if default && block_given? - raise ArgumentError, "Cannot use both value and block as default value" - end - - if block_given? - @default_block = default_block - @default = nil - else - @default_block = nil - @default = default - end - - @index = LOCALS.next_index(self) - end - - # Returns the value in the current fiber's copy of this fiber-local variable. - # - # @return [Object] the current value - def value - LOCALS.fetch(@index) { default } - end - - # Sets the current fiber's copy of this fiber-local variable to the specified value. - # - # @param [Object] value the value to set - # @return [Object] the new value - def value=(value) - LOCALS.set(@index, value) - end - - # Bind the given value to fiber local storage during - # execution of the given block. - # - # @param [Object] value the value to bind - # @yield the operation to be performed with the bound variable - # @return [Object] the value - def bind(value) - if block_given? - old_value = self.value - self.value = value - begin - yield - ensure - self.value = old_value - end - end - end - - protected - - # @!visibility private - def default - if @default_block - self.value = @default_block.call - else - @default - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/java_count_down_latch.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/java_count_down_latch.rb deleted file mode 100644 index 3c119bc3..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/java_count_down_latch.rb +++ /dev/null @@ -1,43 +0,0 @@ -if Concurrent.on_jruby? - require 'concurrent/utility/native_extension_loader' - - module Concurrent - - # @!macro count_down_latch - # @!visibility private - # @!macro internal_implementation_note - class JavaCountDownLatch - - # @!macro count_down_latch_method_initialize - def initialize(count = 1) - Utility::NativeInteger.ensure_integer_and_bounds(count) - Utility::NativeInteger.ensure_positive(count) - @latch = java.util.concurrent.CountDownLatch.new(count) - end - - # @!macro count_down_latch_method_wait - def wait(timeout = nil) - result = nil - if timeout.nil? - Synchronization::JRuby.sleep_interruptibly { @latch.await } - result = true - else - Synchronization::JRuby.sleep_interruptibly do - result = @latch.await(1000 * timeout, java.util.concurrent.TimeUnit::MILLISECONDS) - end - end - result - end - - # @!macro count_down_latch_method_count_down - def count_down - @latch.countDown - end - - # @!macro count_down_latch_method_count - def count - @latch.getCount - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/locals.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/locals.rb deleted file mode 100644 index 0a276aed..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/locals.rb +++ /dev/null @@ -1,189 +0,0 @@ -require 'fiber' -require 'concurrent/utility/engine' -require 'concurrent/constants' - -module Concurrent - # @!visibility private - # @!macro internal_implementation_note - # - # An abstract implementation of local storage, with sub-classes for - # per-thread and per-fiber locals. - # - # Each execution context (EC, thread or fiber) has a lazily initialized array - # of local variable values. Each time a new local variable is created, we - # allocate an "index" for it. - # - # For example, if the allocated index is 1, that means slot #1 in EVERY EC's - # locals array will be used for the value of that variable. - # - # The good thing about using a per-EC structure to hold values, rather than - # a global, is that no synchronization is needed when reading and writing - # those values (since the structure is only ever accessed by a single - # thread). - # - # Of course, when a local variable is GC'd, 1) we need to recover its index - # for use by other new local variables (otherwise the locals arrays could - # get bigger and bigger with time), and 2) we need to null out all the - # references held in the now-unused slots (both to avoid blocking GC of those - # objects, and also to prevent "stale" values from being passed on to a new - # local when the index is reused). - # - # Because we need to null out freed slots, we need to keep references to - # ALL the locals arrays, so we can null out the appropriate slots in all of - # them. This is why we need to use a finalizer to clean up the locals array - # when the EC goes out of scope. - class AbstractLocals - def initialize - @free = [] - @lock = Mutex.new - @all_arrays = {} - @next = 0 - end - - def synchronize - @lock.synchronize { yield } - end - - if Concurrent.on_cruby? - def weak_synchronize - yield - end - else - alias_method :weak_synchronize, :synchronize - end - - def next_index(local) - index = synchronize do - if @free.empty? - @next += 1 - else - @free.pop - end - end - - # When the local goes out of scope, we should free the associated index - # and all values stored into it. - ObjectSpace.define_finalizer(local, local_finalizer(index)) - - index - end - - def free_index(index) - weak_synchronize do - # The cost of GC'ing a TLV is linear in the number of ECs using local - # variables. But that is natural! More ECs means more storage is used - # per local variable. So naturally more CPU time is required to free - # more storage. - # - # DO NOT use each_value which might conflict with new pair assignment - # into the hash in #set method. - @all_arrays.values.each do |locals| - locals[index] = nil - end - - # free index has to be published after the arrays are cleared: - @free << index - end - end - - def fetch(index) - locals = self.locals - value = locals ? locals[index] : nil - - if nil == value - yield - elsif NULL.equal?(value) - nil - else - value - end - end - - def set(index, value) - locals = self.locals! - locals[index] = (nil == value ? NULL : value) - - value - end - - private - - # When the local goes out of scope, clean up that slot across all locals currently assigned. - def local_finalizer(index) - proc do - free_index(index) - end - end - - # When a thread/fiber goes out of scope, remove the array from @all_arrays. - def thread_fiber_finalizer(array_object_id) - proc do - weak_synchronize do - @all_arrays.delete(array_object_id) - end - end - end - - # Returns the locals for the current scope, or nil if none exist. - def locals - raise NotImplementedError - end - - # Returns the locals for the current scope, creating them if necessary. - def locals! - raise NotImplementedError - end - end - - # @!visibility private - # @!macro internal_implementation_note - # An array-backed storage of indexed variables per thread. - class ThreadLocals < AbstractLocals - def locals - Thread.current.thread_variable_get(:concurrent_thread_locals) - end - - def locals! - thread = Thread.current - locals = thread.thread_variable_get(:concurrent_thread_locals) - - unless locals - locals = thread.thread_variable_set(:concurrent_thread_locals, []) - weak_synchronize do - @all_arrays[locals.object_id] = locals - end - # When the thread goes out of scope, we should delete the associated locals: - ObjectSpace.define_finalizer(thread, thread_fiber_finalizer(locals.object_id)) - end - - locals - end - end - - # @!visibility private - # @!macro internal_implementation_note - # An array-backed storage of indexed variables per fiber. - class FiberLocals < AbstractLocals - def locals - Thread.current[:concurrent_fiber_locals] - end - - def locals! - thread = Thread.current - locals = thread[:concurrent_fiber_locals] - - unless locals - locals = thread[:concurrent_fiber_locals] = [] - weak_synchronize do - @all_arrays[locals.object_id] = locals - end - # When the fiber goes out of scope, we should delete the associated locals: - ObjectSpace.define_finalizer(Fiber.current, thread_fiber_finalizer(locals.object_id)) - end - - locals - end - end - - private_constant :AbstractLocals, :ThreadLocals, :FiberLocals -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/lock_local_var.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/lock_local_var.rb deleted file mode 100644 index ebf23a24..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/lock_local_var.rb +++ /dev/null @@ -1,28 +0,0 @@ -require 'concurrent/utility/engine' -require_relative 'fiber_local_var' -require_relative 'thread_local_var' - -module Concurrent - # @!visibility private - def self.mutex_owned_per_thread? - return false if Concurrent.on_jruby? || Concurrent.on_truffleruby? - - mutex = Mutex.new - # Lock the mutex: - mutex.synchronize do - # Check if the mutex is still owned in a child fiber: - Fiber.new { mutex.owned? }.resume - end - end - - if mutex_owned_per_thread? - LockLocalVar = ThreadLocalVar - else - LockLocalVar = FiberLocalVar - end - - # Either {FiberLocalVar} or {ThreadLocalVar} depending on whether Mutex (and Monitor) - # are held, respectively, per Fiber or per Thread. - class LockLocalVar - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/mutex_atomic_boolean.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/mutex_atomic_boolean.rb deleted file mode 100644 index 015996b0..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/mutex_atomic_boolean.rb +++ /dev/null @@ -1,68 +0,0 @@ -require 'concurrent/synchronization/safe_initialization' - -module Concurrent - - # @!macro atomic_boolean - # @!visibility private - # @!macro internal_implementation_note - class MutexAtomicBoolean - extend Concurrent::Synchronization::SafeInitialization - - # @!macro atomic_boolean_method_initialize - def initialize(initial = false) - super() - @Lock = ::Mutex.new - @value = !!initial - end - - # @!macro atomic_boolean_method_value_get - def value - synchronize { @value } - end - - # @!macro atomic_boolean_method_value_set - def value=(value) - synchronize { @value = !!value } - end - - # @!macro atomic_boolean_method_true_question - def true? - synchronize { @value } - end - - # @!macro atomic_boolean_method_false_question - def false? - synchronize { !@value } - end - - # @!macro atomic_boolean_method_make_true - def make_true - synchronize { ns_make_value(true) } - end - - # @!macro atomic_boolean_method_make_false - def make_false - synchronize { ns_make_value(false) } - end - - protected - - # @!visibility private - def synchronize - if @Lock.owned? - yield - else - @Lock.synchronize { yield } - end - end - - private - - # @!visibility private - def ns_make_value(value) - old = @value - @value = value - old != @value - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/mutex_atomic_fixnum.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/mutex_atomic_fixnum.rb deleted file mode 100644 index 0ca39557..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/mutex_atomic_fixnum.rb +++ /dev/null @@ -1,81 +0,0 @@ -require 'concurrent/synchronization/safe_initialization' -require 'concurrent/utility/native_integer' - -module Concurrent - - # @!macro atomic_fixnum - # @!visibility private - # @!macro internal_implementation_note - class MutexAtomicFixnum - extend Concurrent::Synchronization::SafeInitialization - - # @!macro atomic_fixnum_method_initialize - def initialize(initial = 0) - super() - @Lock = ::Mutex.new - ns_set(initial) - end - - # @!macro atomic_fixnum_method_value_get - def value - synchronize { @value } - end - - # @!macro atomic_fixnum_method_value_set - def value=(value) - synchronize { ns_set(value) } - end - - # @!macro atomic_fixnum_method_increment - def increment(delta = 1) - synchronize { ns_set(@value + delta.to_i) } - end - - alias_method :up, :increment - - # @!macro atomic_fixnum_method_decrement - def decrement(delta = 1) - synchronize { ns_set(@value - delta.to_i) } - end - - alias_method :down, :decrement - - # @!macro atomic_fixnum_method_compare_and_set - def compare_and_set(expect, update) - synchronize do - if @value == expect.to_i - @value = update.to_i - true - else - false - end - end - end - - # @!macro atomic_fixnum_method_update - def update - synchronize do - @value = yield @value - end - end - - protected - - # @!visibility private - def synchronize - if @Lock.owned? - yield - else - @Lock.synchronize { yield } - end - end - - private - - # @!visibility private - def ns_set(value) - Utility::NativeInteger.ensure_integer_and_bounds value - @value = value - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/mutex_count_down_latch.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/mutex_count_down_latch.rb deleted file mode 100644 index 29aa1caa..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/mutex_count_down_latch.rb +++ /dev/null @@ -1,44 +0,0 @@ -require 'concurrent/synchronization/lockable_object' -require 'concurrent/utility/native_integer' - -module Concurrent - - # @!macro count_down_latch - # @!visibility private - # @!macro internal_implementation_note - class MutexCountDownLatch < Synchronization::LockableObject - - # @!macro count_down_latch_method_initialize - def initialize(count = 1) - Utility::NativeInteger.ensure_integer_and_bounds count - Utility::NativeInteger.ensure_positive count - - super() - synchronize { ns_initialize count } - end - - # @!macro count_down_latch_method_wait - def wait(timeout = nil) - synchronize { ns_wait_until(timeout) { @count == 0 } } - end - - # @!macro count_down_latch_method_count_down - def count_down - synchronize do - @count -= 1 if @count > 0 - ns_broadcast if @count == 0 - end - end - - # @!macro count_down_latch_method_count - def count - synchronize { @count } - end - - protected - - def ns_initialize(count) - @count = count - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/mutex_semaphore.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/mutex_semaphore.rb deleted file mode 100644 index 4347289f..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/mutex_semaphore.rb +++ /dev/null @@ -1,131 +0,0 @@ -require 'concurrent/synchronization/lockable_object' -require 'concurrent/utility/native_integer' - -module Concurrent - - # @!macro semaphore - # @!visibility private - # @!macro internal_implementation_note - class MutexSemaphore < Synchronization::LockableObject - - # @!macro semaphore_method_initialize - def initialize(count) - Utility::NativeInteger.ensure_integer_and_bounds count - - super() - synchronize { ns_initialize count } - end - - # @!macro semaphore_method_acquire - def acquire(permits = 1) - Utility::NativeInteger.ensure_integer_and_bounds permits - Utility::NativeInteger.ensure_positive permits - - synchronize do - try_acquire_timed(permits, nil) - end - - return unless block_given? - - begin - yield - ensure - release(permits) - end - end - - # @!macro semaphore_method_available_permits - def available_permits - synchronize { @free } - end - - # @!macro semaphore_method_drain_permits - # - # Acquires and returns all permits that are immediately available. - # - # @return [Integer] - def drain_permits - synchronize do - @free.tap { |_| @free = 0 } - end - end - - # @!macro semaphore_method_try_acquire - def try_acquire(permits = 1, timeout = nil) - Utility::NativeInteger.ensure_integer_and_bounds permits - Utility::NativeInteger.ensure_positive permits - - acquired = synchronize do - if timeout.nil? - try_acquire_now(permits) - else - try_acquire_timed(permits, timeout) - end - end - - return acquired unless block_given? - return unless acquired - - begin - yield - ensure - release(permits) - end - end - - # @!macro semaphore_method_release - def release(permits = 1) - Utility::NativeInteger.ensure_integer_and_bounds permits - Utility::NativeInteger.ensure_positive permits - - synchronize do - @free += permits - permits.times { ns_signal } - end - nil - end - - # Shrinks the number of available permits by the indicated reduction. - # - # @param [Fixnum] reduction Number of permits to remove. - # - # @raise [ArgumentError] if `reduction` is not an integer or is negative - # - # @raise [ArgumentError] if `@free` - `@reduction` is less than zero - # - # @return [nil] - # - # @!visibility private - def reduce_permits(reduction) - Utility::NativeInteger.ensure_integer_and_bounds reduction - Utility::NativeInteger.ensure_positive reduction - - synchronize { @free -= reduction } - nil - end - - protected - - # @!visibility private - def ns_initialize(count) - @free = count - end - - private - - # @!visibility private - def try_acquire_now(permits) - if @free >= permits - @free -= permits - true - else - false - end - end - - # @!visibility private - def try_acquire_timed(permits, timeout) - ns_wait_until(timeout) { try_acquire_now(permits) } - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/read_write_lock.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/read_write_lock.rb deleted file mode 100644 index b26bd17a..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/read_write_lock.rb +++ /dev/null @@ -1,255 +0,0 @@ -require 'thread' -require 'concurrent/atomic/atomic_fixnum' -require 'concurrent/errors' -require 'concurrent/synchronization/object' -require 'concurrent/synchronization/lock' - -module Concurrent - - # Ruby read-write lock implementation - # - # Allows any number of concurrent readers, but only one concurrent writer - # (And if the "write" lock is taken, any readers who come along will have to wait) - # - # If readers are already active when a writer comes along, the writer will wait for - # all the readers to finish before going ahead. - # Any additional readers that come when the writer is already waiting, will also - # wait (so writers are not starved). - # - # This implementation is based on `java.util.concurrent.ReentrantReadWriteLock`. - # - # @example - # lock = Concurrent::ReadWriteLock.new - # lock.with_read_lock { data.retrieve } - # lock.with_write_lock { data.modify! } - # - # @note Do **not** try to acquire the write lock while already holding a read lock - # **or** try to acquire the write lock while you already have it. - # This will lead to deadlock - # - # @see http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/locks/ReentrantReadWriteLock.html java.util.concurrent.ReentrantReadWriteLock - class ReadWriteLock < Synchronization::Object - - # @!visibility private - WAITING_WRITER = 1 << 15 - - # @!visibility private - RUNNING_WRITER = 1 << 29 - - # @!visibility private - MAX_READERS = WAITING_WRITER - 1 - - # @!visibility private - MAX_WRITERS = RUNNING_WRITER - MAX_READERS - 1 - - safe_initialization! - - # Implementation notes: - # A goal is to make the uncontended path for both readers/writers lock-free - # Only if there is reader-writer or writer-writer contention, should locks be used - # Internal state is represented by a single integer ("counter"), and updated - # using atomic compare-and-swap operations - # When the counter is 0, the lock is free - # Each reader increments the counter by 1 when acquiring a read lock - # (and decrements by 1 when releasing the read lock) - # The counter is increased by (1 << 15) for each writer waiting to acquire the - # write lock, and by (1 << 29) if the write lock is taken - - # Create a new `ReadWriteLock` in the unlocked state. - def initialize - super() - @Counter = AtomicFixnum.new(0) # single integer which represents lock state - @ReadLock = Synchronization::Lock.new - @WriteLock = Synchronization::Lock.new - end - - # Execute a block operation within a read lock. - # - # @yield the task to be performed within the lock. - # - # @return [Object] the result of the block operation. - # - # @raise [ArgumentError] when no block is given. - # @raise [Concurrent::ResourceLimitError] if the maximum number of readers - # is exceeded. - def with_read_lock - raise ArgumentError.new('no block given') unless block_given? - acquire_read_lock - begin - yield - ensure - release_read_lock - end - end - - # Execute a block operation within a write lock. - # - # @yield the task to be performed within the lock. - # - # @return [Object] the result of the block operation. - # - # @raise [ArgumentError] when no block is given. - # @raise [Concurrent::ResourceLimitError] if the maximum number of readers - # is exceeded. - def with_write_lock - raise ArgumentError.new('no block given') unless block_given? - acquire_write_lock - begin - yield - ensure - release_write_lock - end - end - - # Acquire a read lock. If a write lock has been acquired will block until - # it is released. Will not block if other read locks have been acquired. - # - # @return [Boolean] true if the lock is successfully acquired - # - # @raise [Concurrent::ResourceLimitError] if the maximum number of readers - # is exceeded. - def acquire_read_lock - while true - c = @Counter.value - raise ResourceLimitError.new('Too many reader threads') if max_readers?(c) - - # If a writer is waiting when we first queue up, we need to wait - if waiting_writer?(c) - @ReadLock.wait_until { !waiting_writer? } - - # after a reader has waited once, they are allowed to "barge" ahead of waiting writers - # but if a writer is *running*, the reader still needs to wait (naturally) - while true - c = @Counter.value - if running_writer?(c) - @ReadLock.wait_until { !running_writer? } - else - return if @Counter.compare_and_set(c, c+1) - end - end - else - break if @Counter.compare_and_set(c, c+1) - end - end - true - end - - # Release a previously acquired read lock. - # - # @return [Boolean] true if the lock is successfully released - def release_read_lock - while true - c = @Counter.value - if @Counter.compare_and_set(c, c-1) - # If one or more writers were waiting, and we were the last reader, wake a writer up - if waiting_writer?(c) && running_readers(c) == 1 - @WriteLock.signal - end - break - end - end - true - end - - # Acquire a write lock. Will block and wait for all active readers and writers. - # - # @return [Boolean] true if the lock is successfully acquired - # - # @raise [Concurrent::ResourceLimitError] if the maximum number of writers - # is exceeded. - def acquire_write_lock - while true - c = @Counter.value - raise ResourceLimitError.new('Too many writer threads') if max_writers?(c) - - if c == 0 # no readers OR writers running - # if we successfully swap the RUNNING_WRITER bit on, then we can go ahead - break if @Counter.compare_and_set(0, RUNNING_WRITER) - elsif @Counter.compare_and_set(c, c+WAITING_WRITER) - while true - # Now we have successfully incremented, so no more readers will be able to increment - # (they will wait instead) - # However, readers OR writers could decrement right here, OR another writer could increment - @WriteLock.wait_until do - # So we have to do another check inside the synchronized section - # If a writer OR reader is running, then go to sleep - c = @Counter.value - !running_writer?(c) && !running_readers?(c) - end - - # We just came out of a wait - # If we successfully turn the RUNNING_WRITER bit on with an atomic swap, - # Then we are OK to stop waiting and go ahead - # Otherwise go back and wait again - c = @Counter.value - break if !running_writer?(c) && !running_readers?(c) && @Counter.compare_and_set(c, c+RUNNING_WRITER-WAITING_WRITER) - end - break - end - end - true - end - - # Release a previously acquired write lock. - # - # @return [Boolean] true if the lock is successfully released - def release_write_lock - return true unless running_writer? - c = @Counter.update { |counter| counter - RUNNING_WRITER } - @ReadLock.broadcast - @WriteLock.signal if waiting_writers(c) > 0 - true - end - - # Queries if the write lock is held by any thread. - # - # @return [Boolean] true if the write lock is held else false` - def write_locked? - @Counter.value >= RUNNING_WRITER - end - - # Queries whether any threads are waiting to acquire the read or write lock. - # - # @return [Boolean] true if any threads are waiting for a lock else false - def has_waiters? - waiting_writer?(@Counter.value) - end - - private - - # @!visibility private - def running_readers(c = @Counter.value) - c & MAX_READERS - end - - # @!visibility private - def running_readers?(c = @Counter.value) - (c & MAX_READERS) > 0 - end - - # @!visibility private - def running_writer?(c = @Counter.value) - c >= RUNNING_WRITER - end - - # @!visibility private - def waiting_writers(c = @Counter.value) - (c & MAX_WRITERS) / WAITING_WRITER - end - - # @!visibility private - def waiting_writer?(c = @Counter.value) - c >= WAITING_WRITER - end - - # @!visibility private - def max_readers?(c = @Counter.value) - (c & MAX_READERS) == MAX_READERS - end - - # @!visibility private - def max_writers?(c = @Counter.value) - (c & MAX_WRITERS) == MAX_WRITERS - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/reentrant_read_write_lock.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/reentrant_read_write_lock.rb deleted file mode 100644 index 6d72a3a0..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/reentrant_read_write_lock.rb +++ /dev/null @@ -1,379 +0,0 @@ -require 'thread' -require 'concurrent/atomic/atomic_reference' -require 'concurrent/atomic/atomic_fixnum' -require 'concurrent/errors' -require 'concurrent/synchronization/object' -require 'concurrent/synchronization/lock' -require 'concurrent/atomic/lock_local_var' - -module Concurrent - - # Re-entrant read-write lock implementation - # - # Allows any number of concurrent readers, but only one concurrent writer - # (And while the "write" lock is taken, no read locks can be obtained either. - # Hence, the write lock can also be called an "exclusive" lock.) - # - # If another thread has taken a read lock, any thread which wants a write lock - # will block until all the readers release their locks. However, once a thread - # starts waiting to obtain a write lock, any additional readers that come along - # will also wait (so writers are not starved). - # - # A thread can acquire both a read and write lock at the same time. A thread can - # also acquire a read lock OR a write lock more than once. Only when the read (or - # write) lock is released as many times as it was acquired, will the thread - # actually let it go, allowing other threads which might have been waiting - # to proceed. Therefore the lock can be upgraded by first acquiring - # read lock and then write lock and that the lock can be downgraded by first - # having both read and write lock a releasing just the write lock. - # - # If both read and write locks are acquired by the same thread, it is not strictly - # necessary to release them in the same order they were acquired. In other words, - # the following code is legal: - # - # @example - # lock = Concurrent::ReentrantReadWriteLock.new - # lock.acquire_write_lock - # lock.acquire_read_lock - # lock.release_write_lock - # # At this point, the current thread is holding only a read lock, not a write - # # lock. So other threads can take read locks, but not a write lock. - # lock.release_read_lock - # # Now the current thread is not holding either a read or write lock, so - # # another thread could potentially acquire a write lock. - # - # This implementation was inspired by `java.util.concurrent.ReentrantReadWriteLock`. - # - # @example - # lock = Concurrent::ReentrantReadWriteLock.new - # lock.with_read_lock { data.retrieve } - # lock.with_write_lock { data.modify! } - # - # @see http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/locks/ReentrantReadWriteLock.html java.util.concurrent.ReentrantReadWriteLock - class ReentrantReadWriteLock < Synchronization::Object - - # Implementation notes: - # - # A goal is to make the uncontended path for both readers/writers mutex-free - # Only if there is reader-writer or writer-writer contention, should mutexes be used - # Otherwise, a single CAS operation is all we need to acquire/release a lock - # - # Internal state is represented by a single integer ("counter"), and updated - # using atomic compare-and-swap operations - # When the counter is 0, the lock is free - # Each thread which has one OR MORE read locks increments the counter by 1 - # (and decrements by 1 when releasing the read lock) - # The counter is increased by (1 << 15) for each writer waiting to acquire the - # write lock, and by (1 << 29) if the write lock is taken - # - # Additionally, each thread uses a thread-local variable to count how many times - # it has acquired a read lock, AND how many times it has acquired a write lock. - # It uses a similar trick; an increment of 1 means a read lock was taken, and - # an increment of (1 << 15) means a write lock was taken - # This is what makes re-entrancy possible - # - # 2 rules are followed to ensure good liveness properties: - # 1) Once a writer has queued up and is waiting for a write lock, no other thread - # can take a lock without waiting - # 2) When a write lock is released, readers are given the "first chance" to wake - # up and acquire a read lock - # Following these rules means readers and writers tend to "take turns", so neither - # can starve the other, even under heavy contention - - # @!visibility private - READER_BITS = 15 - # @!visibility private - WRITER_BITS = 14 - - # Used with @Counter: - # @!visibility private - WAITING_WRITER = 1 << READER_BITS - # @!visibility private - RUNNING_WRITER = 1 << (READER_BITS + WRITER_BITS) - # @!visibility private - MAX_READERS = WAITING_WRITER - 1 - # @!visibility private - MAX_WRITERS = RUNNING_WRITER - MAX_READERS - 1 - - # Used with @HeldCount: - # @!visibility private - WRITE_LOCK_HELD = 1 << READER_BITS - # @!visibility private - READ_LOCK_MASK = WRITE_LOCK_HELD - 1 - # @!visibility private - WRITE_LOCK_MASK = MAX_WRITERS - - safe_initialization! - - # Create a new `ReentrantReadWriteLock` in the unlocked state. - def initialize - super() - @Counter = AtomicFixnum.new(0) # single integer which represents lock state - @ReadQueue = Synchronization::Lock.new # used to queue waiting readers - @WriteQueue = Synchronization::Lock.new # used to queue waiting writers - @HeldCount = LockLocalVar.new(0) # indicates # of R & W locks held by this thread - end - - # Execute a block operation within a read lock. - # - # @yield the task to be performed within the lock. - # - # @return [Object] the result of the block operation. - # - # @raise [ArgumentError] when no block is given. - # @raise [Concurrent::ResourceLimitError] if the maximum number of readers - # is exceeded. - def with_read_lock - raise ArgumentError.new('no block given') unless block_given? - acquire_read_lock - begin - yield - ensure - release_read_lock - end - end - - # Execute a block operation within a write lock. - # - # @yield the task to be performed within the lock. - # - # @return [Object] the result of the block operation. - # - # @raise [ArgumentError] when no block is given. - # @raise [Concurrent::ResourceLimitError] if the maximum number of readers - # is exceeded. - def with_write_lock - raise ArgumentError.new('no block given') unless block_given? - acquire_write_lock - begin - yield - ensure - release_write_lock - end - end - - # Acquire a read lock. If a write lock is held by another thread, will block - # until it is released. - # - # @return [Boolean] true if the lock is successfully acquired - # - # @raise [Concurrent::ResourceLimitError] if the maximum number of readers - # is exceeded. - def acquire_read_lock - if (held = @HeldCount.value) > 0 - # If we already have a lock, there's no need to wait - if held & READ_LOCK_MASK == 0 - # But we do need to update the counter, if we were holding a write - # lock but not a read lock - @Counter.update { |c| c + 1 } - end - @HeldCount.value = held + 1 - return true - end - - while true - c = @Counter.value - raise ResourceLimitError.new('Too many reader threads') if max_readers?(c) - - # If a writer is waiting OR running when we first queue up, we need to wait - if waiting_or_running_writer?(c) - # Before going to sleep, check again with the ReadQueue mutex held - @ReadQueue.synchronize do - @ReadQueue.ns_wait if waiting_or_running_writer? - end - # Note: the above 'synchronize' block could have used #wait_until, - # but that waits repeatedly in a loop, checking the wait condition - # each time it wakes up (to protect against spurious wakeups) - # But we are already in a loop, which is only broken when we successfully - # acquire the lock! So we don't care about spurious wakeups, and would - # rather not pay the extra overhead of using #wait_until - - # After a reader has waited once, they are allowed to "barge" ahead of waiting writers - # But if a writer is *running*, the reader still needs to wait (naturally) - while true - c = @Counter.value - if running_writer?(c) - @ReadQueue.synchronize do - @ReadQueue.ns_wait if running_writer? - end - elsif @Counter.compare_and_set(c, c+1) - @HeldCount.value = held + 1 - return true - end - end - elsif @Counter.compare_and_set(c, c+1) - @HeldCount.value = held + 1 - return true - end - end - end - - # Try to acquire a read lock and return true if we succeed. If it cannot be - # acquired immediately, return false. - # - # @return [Boolean] true if the lock is successfully acquired - def try_read_lock - if (held = @HeldCount.value) > 0 - if held & READ_LOCK_MASK == 0 - # If we hold a write lock, but not a read lock... - @Counter.update { |c| c + 1 } - end - @HeldCount.value = held + 1 - return true - else - c = @Counter.value - if !waiting_or_running_writer?(c) && @Counter.compare_and_set(c, c+1) - @HeldCount.value = held + 1 - return true - end - end - false - end - - # Release a previously acquired read lock. - # - # @return [Boolean] true if the lock is successfully released - def release_read_lock - held = @HeldCount.value = @HeldCount.value - 1 - rlocks_held = held & READ_LOCK_MASK - if rlocks_held == 0 - c = @Counter.update { |counter| counter - 1 } - # If one or more writers were waiting, and we were the last reader, wake a writer up - if waiting_or_running_writer?(c) && running_readers(c) == 0 - @WriteQueue.signal - end - elsif rlocks_held == READ_LOCK_MASK - raise IllegalOperationError, "Cannot release a read lock which is not held" - end - true - end - - # Acquire a write lock. Will block and wait for all active readers and writers. - # - # @return [Boolean] true if the lock is successfully acquired - # - # @raise [Concurrent::ResourceLimitError] if the maximum number of writers - # is exceeded. - def acquire_write_lock - if (held = @HeldCount.value) >= WRITE_LOCK_HELD - # if we already have a write (exclusive) lock, there's no need to wait - @HeldCount.value = held + WRITE_LOCK_HELD - return true - end - - while true - c = @Counter.value - raise ResourceLimitError.new('Too many writer threads') if max_writers?(c) - - # To go ahead and take the lock without waiting, there must be no writer - # running right now, AND no writers who came before us still waiting to - # acquire the lock - # Additionally, if any read locks have been taken, we must hold all of them - if held > 0 && @Counter.compare_and_set(1, c+RUNNING_WRITER) - # If we are the only one reader and successfully swap the RUNNING_WRITER bit on, then we can go ahead - @HeldCount.value = held + WRITE_LOCK_HELD - return true - elsif @Counter.compare_and_set(c, c+WAITING_WRITER) - while true - # Now we have successfully incremented, so no more readers will be able to increment - # (they will wait instead) - # However, readers OR writers could decrement right here - @WriteQueue.synchronize do - # So we have to do another check inside the synchronized section - # If a writer OR another reader is running, then go to sleep - c = @Counter.value - @WriteQueue.ns_wait if running_writer?(c) || running_readers(c) != held - end - # Note: if you are thinking of replacing the above 'synchronize' block - # with #wait_until, read the comment in #acquire_read_lock first! - - # We just came out of a wait - # If we successfully turn the RUNNING_WRITER bit on with an atomic swap, - # then we are OK to stop waiting and go ahead - # Otherwise go back and wait again - c = @Counter.value - if !running_writer?(c) && - running_readers(c) == held && - @Counter.compare_and_set(c, c+RUNNING_WRITER-WAITING_WRITER) - @HeldCount.value = held + WRITE_LOCK_HELD - return true - end - end - end - end - end - - # Try to acquire a write lock and return true if we succeed. If it cannot be - # acquired immediately, return false. - # - # @return [Boolean] true if the lock is successfully acquired - def try_write_lock - if (held = @HeldCount.value) >= WRITE_LOCK_HELD - @HeldCount.value = held + WRITE_LOCK_HELD - return true - else - c = @Counter.value - if !waiting_or_running_writer?(c) && - running_readers(c) == held && - @Counter.compare_and_set(c, c+RUNNING_WRITER) - @HeldCount.value = held + WRITE_LOCK_HELD - return true - end - end - false - end - - # Release a previously acquired write lock. - # - # @return [Boolean] true if the lock is successfully released - def release_write_lock - held = @HeldCount.value = @HeldCount.value - WRITE_LOCK_HELD - wlocks_held = held & WRITE_LOCK_MASK - if wlocks_held == 0 - c = @Counter.update { |counter| counter - RUNNING_WRITER } - @ReadQueue.broadcast - @WriteQueue.signal if waiting_writers(c) > 0 - elsif wlocks_held == WRITE_LOCK_MASK - raise IllegalOperationError, "Cannot release a write lock which is not held" - end - true - end - - private - - # @!visibility private - def running_readers(c = @Counter.value) - c & MAX_READERS - end - - # @!visibility private - def running_readers?(c = @Counter.value) - (c & MAX_READERS) > 0 - end - - # @!visibility private - def running_writer?(c = @Counter.value) - c >= RUNNING_WRITER - end - - # @!visibility private - def waiting_writers(c = @Counter.value) - (c & MAX_WRITERS) >> READER_BITS - end - - # @!visibility private - def waiting_or_running_writer?(c = @Counter.value) - c >= WAITING_WRITER - end - - # @!visibility private - def max_readers?(c = @Counter.value) - (c & MAX_READERS) == MAX_READERS - end - - # @!visibility private - def max_writers?(c = @Counter.value) - (c & MAX_WRITERS) == MAX_WRITERS - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/semaphore.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/semaphore.rb deleted file mode 100644 index f0799f0f..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/semaphore.rb +++ /dev/null @@ -1,163 +0,0 @@ -require 'concurrent/atomic/mutex_semaphore' - -module Concurrent - - ################################################################### - - # @!macro semaphore_method_initialize - # - # Create a new `Semaphore` with the initial `count`. - # - # @param [Fixnum] count the initial count - # - # @raise [ArgumentError] if `count` is not an integer - - # @!macro semaphore_method_acquire - # - # Acquires the given number of permits from this semaphore, - # blocking until all are available. If a block is given, - # yields to it and releases the permits afterwards. - # - # @param [Fixnum] permits Number of permits to acquire - # - # @raise [ArgumentError] if `permits` is not an integer or is less than zero - # - # @return [nil, BasicObject] Without a block, `nil` is returned. If a block - # is given, its return value is returned. - - # @!macro semaphore_method_available_permits - # - # Returns the current number of permits available in this semaphore. - # - # @return [Integer] - - # @!macro semaphore_method_drain_permits - # - # Acquires and returns all permits that are immediately available. - # - # @return [Integer] - - # @!macro semaphore_method_try_acquire - # - # Acquires the given number of permits from this semaphore, - # only if all are available at the time of invocation or within - # `timeout` interval. If a block is given, yields to it if the permits - # were successfully acquired, and releases them afterward, returning the - # block's return value. - # - # @param [Fixnum] permits the number of permits to acquire - # - # @param [Fixnum] timeout the number of seconds to wait for the counter - # or `nil` to return immediately - # - # @raise [ArgumentError] if `permits` is not an integer or is less than zero - # - # @return [true, false, nil, BasicObject] `false` if no permits are - # available, `true` when acquired a permit. If a block is given, the - # block's return value is returned if the permits were acquired; if not, - # `nil` is returned. - - # @!macro semaphore_method_release - # - # Releases the given number of permits, returning them to the semaphore. - # - # @param [Fixnum] permits Number of permits to return to the semaphore. - # - # @raise [ArgumentError] if `permits` is not a number or is less than zero - # - # @return [nil] - - ################################################################### - - # @!macro semaphore_public_api - # - # @!method initialize(count) - # @!macro semaphore_method_initialize - # - # @!method acquire(permits = 1) - # @!macro semaphore_method_acquire - # - # @!method available_permits - # @!macro semaphore_method_available_permits - # - # @!method drain_permits - # @!macro semaphore_method_drain_permits - # - # @!method try_acquire(permits = 1, timeout = nil) - # @!macro semaphore_method_try_acquire - # - # @!method release(permits = 1) - # @!macro semaphore_method_release - - ################################################################### - - # @!visibility private - # @!macro internal_implementation_note - SemaphoreImplementation = if Concurrent.on_jruby? - require 'concurrent/utility/native_extension_loader' - JavaSemaphore - else - MutexSemaphore - end - private_constant :SemaphoreImplementation - - # @!macro semaphore - # - # A counting semaphore. Conceptually, a semaphore maintains a set of - # permits. Each {#acquire} blocks if necessary until a permit is - # available, and then takes it. Each {#release} adds a permit, potentially - # releasing a blocking acquirer. - # However, no actual permit objects are used; the Semaphore just keeps a - # count of the number available and acts accordingly. - # Alternatively, permits may be acquired within a block, and automatically - # released after the block finishes executing. - # - # @!macro semaphore_public_api - # @example - # semaphore = Concurrent::Semaphore.new(2) - # - # t1 = Thread.new do - # semaphore.acquire - # puts "Thread 1 acquired semaphore" - # end - # - # t2 = Thread.new do - # semaphore.acquire - # puts "Thread 2 acquired semaphore" - # end - # - # t3 = Thread.new do - # semaphore.acquire - # puts "Thread 3 acquired semaphore" - # end - # - # t4 = Thread.new do - # sleep(2) - # puts "Thread 4 releasing semaphore" - # semaphore.release - # end - # - # [t1, t2, t3, t4].each(&:join) - # - # # prints: - # # Thread 3 acquired semaphore - # # Thread 2 acquired semaphore - # # Thread 4 releasing semaphore - # # Thread 1 acquired semaphore - # - # @example - # semaphore = Concurrent::Semaphore.new(1) - # - # puts semaphore.available_permits - # semaphore.acquire do - # puts semaphore.available_permits - # end - # puts semaphore.available_permits - # - # # prints: - # # 1 - # # 0 - # # 1 - class Semaphore < SemaphoreImplementation - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/thread_local_var.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/thread_local_var.rb deleted file mode 100644 index 3b7e12b5..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic/thread_local_var.rb +++ /dev/null @@ -1,111 +0,0 @@ -require 'concurrent/constants' -require_relative 'locals' - -module Concurrent - - # A `ThreadLocalVar` is a variable where the value is different for each thread. - # Each variable may have a default value, but when you modify the variable only - # the current thread will ever see that change. - # - # This is similar to Ruby's built-in thread-local variables (`Thread#thread_variable_get`), - # but with these major advantages: - # * `ThreadLocalVar` has its own identity, it doesn't need a Symbol. - # * Each Ruby's built-in thread-local variable leaks some memory forever (it's a Symbol held forever on the thread), - # so it's only OK to create a small amount of them. - # `ThreadLocalVar` has no such issue and it is fine to create many of them. - # * Ruby's built-in thread-local variables leak forever the value set on each thread (unless set to nil explicitly). - # `ThreadLocalVar` automatically removes the mapping for each thread once the `ThreadLocalVar` instance is GC'd. - # - # @!macro thread_safe_variable_comparison - # - # @example - # v = ThreadLocalVar.new(14) - # v.value #=> 14 - # v.value = 2 - # v.value #=> 2 - # - # @example - # v = ThreadLocalVar.new(14) - # - # t1 = Thread.new do - # v.value #=> 14 - # v.value = 1 - # v.value #=> 1 - # end - # - # t2 = Thread.new do - # v.value #=> 14 - # v.value = 2 - # v.value #=> 2 - # end - # - # v.value #=> 14 - class ThreadLocalVar - LOCALS = ThreadLocals.new - - # Creates a thread local variable. - # - # @param [Object] default the default value when otherwise unset - # @param [Proc] default_block Optional block that gets called to obtain the - # default value for each thread - def initialize(default = nil, &default_block) - if default && block_given? - raise ArgumentError, "Cannot use both value and block as default value" - end - - if block_given? - @default_block = default_block - @default = nil - else - @default_block = nil - @default = default - end - - @index = LOCALS.next_index(self) - end - - # Returns the value in the current thread's copy of this thread-local variable. - # - # @return [Object] the current value - def value - LOCALS.fetch(@index) { default } - end - - # Sets the current thread's copy of this thread-local variable to the specified value. - # - # @param [Object] value the value to set - # @return [Object] the new value - def value=(value) - LOCALS.set(@index, value) - end - - # Bind the given value to thread local storage during - # execution of the given block. - # - # @param [Object] value the value to bind - # @yield the operation to be performed with the bound variable - # @return [Object] the value - def bind(value) - if block_given? - old_value = self.value - self.value = value - begin - yield - ensure - self.value = old_value - end - end - end - - protected - - # @!visibility private - def default - if @default_block - self.value = @default_block.call - else - @default - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic_reference/atomic_direct_update.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic_reference/atomic_direct_update.rb deleted file mode 100644 index 5d2d7edd..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic_reference/atomic_direct_update.rb +++ /dev/null @@ -1,37 +0,0 @@ -require 'concurrent/errors' - -module Concurrent - - # Define update methods that use direct paths - # - # @!visibility private - # @!macro internal_implementation_note - module AtomicDirectUpdate - def update - true until compare_and_set(old_value = get, new_value = yield(old_value)) - new_value - end - - def try_update - old_value = get - new_value = yield old_value - - return unless compare_and_set old_value, new_value - - new_value - end - - def try_update! - old_value = get - new_value = yield old_value - unless compare_and_set(old_value, new_value) - if $VERBOSE - raise ConcurrentUpdateError, "Update failed" - else - raise ConcurrentUpdateError, "Update failed", ConcurrentUpdateError::CONC_UP_ERR_BACKTRACE - end - end - new_value - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic_reference/mutex_atomic.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic_reference/mutex_atomic.rb deleted file mode 100644 index e5e2a637..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic_reference/mutex_atomic.rb +++ /dev/null @@ -1,67 +0,0 @@ -require 'concurrent/atomic_reference/atomic_direct_update' -require 'concurrent/atomic_reference/numeric_cas_wrapper' -require 'concurrent/synchronization/safe_initialization' - -module Concurrent - - # @!visibility private - # @!macro internal_implementation_note - class MutexAtomicReference - extend Concurrent::Synchronization::SafeInitialization - include AtomicDirectUpdate - include AtomicNumericCompareAndSetWrapper - alias_method :compare_and_swap, :compare_and_set - - # @!macro atomic_reference_method_initialize - def initialize(value = nil) - super() - @Lock = ::Mutex.new - @value = value - end - - # @!macro atomic_reference_method_get - def get - synchronize { @value } - end - alias_method :value, :get - - # @!macro atomic_reference_method_set - def set(new_value) - synchronize { @value = new_value } - end - alias_method :value=, :set - - # @!macro atomic_reference_method_get_and_set - def get_and_set(new_value) - synchronize do - old_value = @value - @value = new_value - old_value - end - end - alias_method :swap, :get_and_set - - # @!macro atomic_reference_method_compare_and_set - def _compare_and_set(old_value, new_value) - synchronize do - if @value.equal? old_value - @value = new_value - true - else - false - end - end - end - - protected - - # @!visibility private - def synchronize - if @Lock.owned? - yield - else - @Lock.synchronize { yield } - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic_reference/numeric_cas_wrapper.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic_reference/numeric_cas_wrapper.rb deleted file mode 100644 index 709a3822..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomic_reference/numeric_cas_wrapper.rb +++ /dev/null @@ -1,28 +0,0 @@ -module Concurrent - - # Special "compare and set" handling of numeric values. - # - # @!visibility private - # @!macro internal_implementation_note - module AtomicNumericCompareAndSetWrapper - - # @!macro atomic_reference_method_compare_and_set - def compare_and_set(old_value, new_value) - if old_value.kind_of? Numeric - while true - old = get - - return false unless old.kind_of? Numeric - - return false unless old == old_value - - result = _compare_and_set(old, new_value) - return result if result - end - else - _compare_and_set(old_value, new_value) - end - end - - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomics.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomics.rb deleted file mode 100644 index 16cbe661..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/atomics.rb +++ /dev/null @@ -1,10 +0,0 @@ -require 'concurrent/atomic/atomic_reference' -require 'concurrent/atomic/atomic_boolean' -require 'concurrent/atomic/atomic_fixnum' -require 'concurrent/atomic/cyclic_barrier' -require 'concurrent/atomic/count_down_latch' -require 'concurrent/atomic/event' -require 'concurrent/atomic/read_write_lock' -require 'concurrent/atomic/reentrant_read_write_lock' -require 'concurrent/atomic/semaphore' -require 'concurrent/atomic/thread_local_var' diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/collection/copy_on_notify_observer_set.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/collection/copy_on_notify_observer_set.rb deleted file mode 100644 index 7c700bd7..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/collection/copy_on_notify_observer_set.rb +++ /dev/null @@ -1,107 +0,0 @@ -require 'concurrent/synchronization/lockable_object' - -module Concurrent - module Collection - - # A thread safe observer set implemented using copy-on-read approach: - # observers are added and removed from a thread safe collection; every time - # a notification is required the internal data structure is copied to - # prevent concurrency issues - # - # @api private - class CopyOnNotifyObserverSet < Synchronization::LockableObject - - def initialize - super() - synchronize { ns_initialize } - end - - # @!macro observable_add_observer - def add_observer(observer = nil, func = :update, &block) - if observer.nil? && block.nil? - raise ArgumentError, 'should pass observer as a first argument or block' - elsif observer && block - raise ArgumentError.new('cannot provide both an observer and a block') - end - - if block - observer = block - func = :call - end - - synchronize do - @observers[observer] = func - observer - end - end - - # @!macro observable_delete_observer - def delete_observer(observer) - synchronize do - @observers.delete(observer) - observer - end - end - - # @!macro observable_delete_observers - def delete_observers - synchronize do - @observers.clear - self - end - end - - # @!macro observable_count_observers - def count_observers - synchronize { @observers.count } - end - - # Notifies all registered observers with optional args - # @param [Object] args arguments to be passed to each observer - # @return [CopyOnWriteObserverSet] self - def notify_observers(*args, &block) - observers = duplicate_observers - notify_to(observers, *args, &block) - self - end - - # Notifies all registered observers with optional args and deletes them. - # - # @param [Object] args arguments to be passed to each observer - # @return [CopyOnWriteObserverSet] self - def notify_and_delete_observers(*args, &block) - observers = duplicate_and_clear_observers - notify_to(observers, *args, &block) - self - end - - protected - - def ns_initialize - @observers = {} - end - - private - - def duplicate_and_clear_observers - synchronize do - observers = @observers.dup - @observers.clear - observers - end - end - - def duplicate_observers - synchronize { @observers.dup } - end - - def notify_to(observers, *args) - raise ArgumentError.new('cannot give arguments and a block') if block_given? && !args.empty? - observers.each do |observer, function| - args = yield if block_given? - observer.send(function, *args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/collection/copy_on_write_observer_set.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/collection/copy_on_write_observer_set.rb deleted file mode 100644 index bcb6750d..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/collection/copy_on_write_observer_set.rb +++ /dev/null @@ -1,111 +0,0 @@ -require 'concurrent/synchronization/lockable_object' - -module Concurrent - module Collection - - # A thread safe observer set implemented using copy-on-write approach: - # every time an observer is added or removed the whole internal data structure is - # duplicated and replaced with a new one. - # - # @api private - class CopyOnWriteObserverSet < Synchronization::LockableObject - - def initialize - super() - synchronize { ns_initialize } - end - - # @!macro observable_add_observer - def add_observer(observer = nil, func = :update, &block) - if observer.nil? && block.nil? - raise ArgumentError, 'should pass observer as a first argument or block' - elsif observer && block - raise ArgumentError.new('cannot provide both an observer and a block') - end - - if block - observer = block - func = :call - end - - synchronize do - new_observers = @observers.dup - new_observers[observer] = func - @observers = new_observers - observer - end - end - - # @!macro observable_delete_observer - def delete_observer(observer) - synchronize do - new_observers = @observers.dup - new_observers.delete(observer) - @observers = new_observers - observer - end - end - - # @!macro observable_delete_observers - def delete_observers - self.observers = {} - self - end - - # @!macro observable_count_observers - def count_observers - observers.count - end - - # Notifies all registered observers with optional args - # @param [Object] args arguments to be passed to each observer - # @return [CopyOnWriteObserverSet] self - def notify_observers(*args, &block) - notify_to(observers, *args, &block) - self - end - - # Notifies all registered observers with optional args and deletes them. - # - # @param [Object] args arguments to be passed to each observer - # @return [CopyOnWriteObserverSet] self - def notify_and_delete_observers(*args, &block) - old = clear_observers_and_return_old - notify_to(old, *args, &block) - self - end - - protected - - def ns_initialize - @observers = {} - end - - private - - def notify_to(observers, *args) - raise ArgumentError.new('cannot give arguments and a block') if block_given? && !args.empty? - observers.each do |observer, function| - args = yield if block_given? - observer.send(function, *args) - end - end - - def observers - synchronize { @observers } - end - - def observers=(new_set) - synchronize { @observers = new_set } - end - - def clear_observers_and_return_old - synchronize do - old_observers = @observers - @observers = {} - old_observers - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/collection/java_non_concurrent_priority_queue.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/collection/java_non_concurrent_priority_queue.rb deleted file mode 100644 index 2be9e437..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/collection/java_non_concurrent_priority_queue.rb +++ /dev/null @@ -1,84 +0,0 @@ -if Concurrent.on_jruby? - - module Concurrent - module Collection - - - # @!macro priority_queue - # - # @!visibility private - # @!macro internal_implementation_note - class JavaNonConcurrentPriorityQueue - - # @!macro priority_queue_method_initialize - def initialize(opts = {}) - order = opts.fetch(:order, :max) - if [:min, :low].include?(order) - @queue = java.util.PriorityQueue.new(11) # 11 is the default initial capacity - else - @queue = java.util.PriorityQueue.new(11, java.util.Collections.reverseOrder()) - end - end - - # @!macro priority_queue_method_clear - def clear - @queue.clear - true - end - - # @!macro priority_queue_method_delete - def delete(item) - found = false - while @queue.remove(item) do - found = true - end - found - end - - # @!macro priority_queue_method_empty - def empty? - @queue.size == 0 - end - - # @!macro priority_queue_method_include - def include?(item) - @queue.contains(item) - end - alias_method :has_priority?, :include? - - # @!macro priority_queue_method_length - def length - @queue.size - end - alias_method :size, :length - - # @!macro priority_queue_method_peek - def peek - @queue.peek - end - - # @!macro priority_queue_method_pop - def pop - @queue.poll - end - alias_method :deq, :pop - alias_method :shift, :pop - - # @!macro priority_queue_method_push - def push(item) - raise ArgumentError.new('cannot enqueue nil') if item.nil? - @queue.add(item) - end - alias_method :<<, :push - alias_method :enq, :push - - # @!macro priority_queue_method_from_list - def self.from_list(list, opts = {}) - queue = new(opts) - list.each{|item| queue << item } - queue - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/collection/lock_free_stack.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/collection/lock_free_stack.rb deleted file mode 100644 index 3704410b..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/collection/lock_free_stack.rb +++ /dev/null @@ -1,160 +0,0 @@ -require 'concurrent/synchronization/object' - -module Concurrent - - # @!macro warn.edge - class LockFreeStack < Synchronization::Object - - safe_initialization! - - class Node - # TODO (pitr-ch 20-Dec-2016): Could be unified with Stack class? - - # @return [Node] - attr_reader :next_node - - # @return [Object] - attr_reader :value - - # @!visibility private - # allow to nil-ify to free GC when the entry is no longer relevant, not synchronised - attr_writer :value - - def initialize(value, next_node) - @value = value - @next_node = next_node - end - - singleton_class.send :alias_method, :[], :new - end - - # The singleton for empty node - EMPTY = Node[nil, nil] - def EMPTY.next_node - self - end - - attr_atomic(:head) - private :head, :head=, :swap_head, :compare_and_set_head, :update_head - - # @!visibility private - def self.of1(value) - new Node[value, EMPTY] - end - - # @!visibility private - def self.of2(value1, value2) - new Node[value1, Node[value2, EMPTY]] - end - - # @param [Node] head - def initialize(head = EMPTY) - super() - self.head = head - end - - # @param [Node] head - # @return [true, false] - def empty?(head = head()) - head.equal? EMPTY - end - - # @param [Node] head - # @param [Object] value - # @return [true, false] - def compare_and_push(head, value) - compare_and_set_head head, Node[value, head] - end - - # @param [Object] value - # @return [self] - def push(value) - while true - current_head = head - return self if compare_and_set_head current_head, Node[value, current_head] - end - end - - # @return [Node] - def peek - head - end - - # @param [Node] head - # @return [true, false] - def compare_and_pop(head) - compare_and_set_head head, head.next_node - end - - # @return [Object] - def pop - while true - current_head = head - return current_head.value if compare_and_set_head current_head, current_head.next_node - end - end - - # @param [Node] head - # @return [true, false] - def compare_and_clear(head) - compare_and_set_head head, EMPTY - end - - include Enumerable - - # @param [Node] head - # @return [self] - def each(head = nil) - return to_enum(:each, head) unless block_given? - it = head || peek - until it.equal?(EMPTY) - yield it.value - it = it.next_node - end - self - end - - # @return [true, false] - def clear - while true - current_head = head - return false if current_head == EMPTY - return true if compare_and_set_head current_head, EMPTY - end - end - - # @param [Node] head - # @return [true, false] - def clear_if(head) - compare_and_set_head head, EMPTY - end - - # @param [Node] head - # @param [Node] new_head - # @return [true, false] - def replace_if(head, new_head) - compare_and_set_head head, new_head - end - - # @return [self] - # @yield over the cleared stack - # @yieldparam [Object] value - def clear_each(&block) - while true - current_head = head - return self if current_head == EMPTY - if compare_and_set_head current_head, EMPTY - each current_head, &block - return self - end - end - end - - # @return [String] Short string representation. - def to_s - format '%s %s>', super[0..-2], to_a.to_s - end - - alias_method :inspect, :to_s - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/collection/map/mri_map_backend.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/collection/map/mri_map_backend.rb deleted file mode 100644 index e0cf9990..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/collection/map/mri_map_backend.rb +++ /dev/null @@ -1,66 +0,0 @@ -require 'thread' -require 'concurrent/collection/map/non_concurrent_map_backend' - -module Concurrent - - # @!visibility private - module Collection - - # @!visibility private - class MriMapBackend < NonConcurrentMapBackend - - def initialize(options = nil, &default_proc) - super(options, &default_proc) - @write_lock = Mutex.new - end - - def []=(key, value) - @write_lock.synchronize { super } - end - - def compute_if_absent(key) - if NULL != (stored_value = @backend.fetch(key, NULL)) # fast non-blocking path for the most likely case - stored_value - else - @write_lock.synchronize { super } - end - end - - def compute_if_present(key) - @write_lock.synchronize { super } - end - - def compute(key) - @write_lock.synchronize { super } - end - - def merge_pair(key, value) - @write_lock.synchronize { super } - end - - def replace_pair(key, old_value, new_value) - @write_lock.synchronize { super } - end - - def replace_if_exists(key, new_value) - @write_lock.synchronize { super } - end - - def get_and_set(key, value) - @write_lock.synchronize { super } - end - - def delete(key) - @write_lock.synchronize { super } - end - - def delete_pair(key, value) - @write_lock.synchronize { super } - end - - def clear - @write_lock.synchronize { super } - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/collection/map/non_concurrent_map_backend.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/collection/map/non_concurrent_map_backend.rb deleted file mode 100644 index ca5fd9b4..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/collection/map/non_concurrent_map_backend.rb +++ /dev/null @@ -1,148 +0,0 @@ -require 'concurrent/constants' - -module Concurrent - - # @!visibility private - module Collection - - # @!visibility private - class NonConcurrentMapBackend - - # WARNING: all public methods of the class must operate on the @backend - # directly without calling each other. This is important because of the - # SynchronizedMapBackend which uses a non-reentrant mutex for performance - # reasons. - def initialize(options = nil, &default_proc) - validate_options_hash!(options) if options.kind_of?(::Hash) - set_backend(default_proc) - @default_proc = default_proc - end - - def [](key) - @backend[key] - end - - def []=(key, value) - @backend[key] = value - end - - def compute_if_absent(key) - if NULL != (stored_value = @backend.fetch(key, NULL)) - stored_value - else - @backend[key] = yield - end - end - - def replace_pair(key, old_value, new_value) - if pair?(key, old_value) - @backend[key] = new_value - true - else - false - end - end - - def replace_if_exists(key, new_value) - if NULL != (stored_value = @backend.fetch(key, NULL)) - @backend[key] = new_value - stored_value - end - end - - def compute_if_present(key) - if NULL != (stored_value = @backend.fetch(key, NULL)) - store_computed_value(key, yield(stored_value)) - end - end - - def compute(key) - store_computed_value(key, yield(get_or_default(key, nil))) - end - - def merge_pair(key, value) - if NULL == (stored_value = @backend.fetch(key, NULL)) - @backend[key] = value - else - store_computed_value(key, yield(stored_value)) - end - end - - def get_and_set(key, value) - stored_value = get_or_default(key, nil) - @backend[key] = value - stored_value - end - - def key?(key) - @backend.key?(key) - end - - def delete(key) - @backend.delete(key) - end - - def delete_pair(key, value) - if pair?(key, value) - @backend.delete(key) - true - else - false - end - end - - def clear - @backend.clear - self - end - - def each_pair - dupped_backend.each_pair do |k, v| - yield k, v - end - self - end - - def size - @backend.size - end - - def get_or_default(key, default_value) - @backend.fetch(key, default_value) - end - - private - - def set_backend(default_proc) - if default_proc - @backend = ::Hash.new { |_h, key| default_proc.call(self, key) } - else - @backend = {} - end - end - - def initialize_copy(other) - super - set_backend(@default_proc) - self - end - - def dupped_backend - @backend.dup - end - - def pair?(key, expected_value) - NULL != (stored_value = @backend.fetch(key, NULL)) && expected_value.equal?(stored_value) - end - - def store_computed_value(key, new_value) - if new_value.nil? - @backend.delete(key) - nil - else - @backend[key] = new_value - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/collection/map/synchronized_map_backend.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/collection/map/synchronized_map_backend.rb deleted file mode 100644 index efa161ed..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/collection/map/synchronized_map_backend.rb +++ /dev/null @@ -1,85 +0,0 @@ -require 'concurrent/collection/map/non_concurrent_map_backend' - -module Concurrent - - # @!visibility private - module Collection - - # @!visibility private - class SynchronizedMapBackend < NonConcurrentMapBackend - - def initialize(*args, &block) - super - - # WARNING: Mutex is a non-reentrant lock, so the synchronized methods are - # not allowed to call each other. - @mutex = Mutex.new - end - - def [](key) - @mutex.synchronize { super } - end - - def []=(key, value) - @mutex.synchronize { super } - end - - def compute_if_absent(key) - @mutex.synchronize { super } - end - - def compute_if_present(key) - @mutex.synchronize { super } - end - - def compute(key) - @mutex.synchronize { super } - end - - def merge_pair(key, value) - @mutex.synchronize { super } - end - - def replace_pair(key, old_value, new_value) - @mutex.synchronize { super } - end - - def replace_if_exists(key, new_value) - @mutex.synchronize { super } - end - - def get_and_set(key, value) - @mutex.synchronize { super } - end - - def key?(key) - @mutex.synchronize { super } - end - - def delete(key) - @mutex.synchronize { super } - end - - def delete_pair(key, value) - @mutex.synchronize { super } - end - - def clear - @mutex.synchronize { super } - end - - def size - @mutex.synchronize { super } - end - - def get_or_default(key, default_value) - @mutex.synchronize { super } - end - - private - def dupped_backend - @mutex.synchronize { super } - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/collection/map/truffleruby_map_backend.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/collection/map/truffleruby_map_backend.rb deleted file mode 100644 index 68a1b388..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/collection/map/truffleruby_map_backend.rb +++ /dev/null @@ -1,14 +0,0 @@ -module Concurrent - - # @!visibility private - module Collection - - # @!visibility private - class TruffleRubyMapBackend < TruffleRuby::ConcurrentMap - def initialize(options = nil) - options ||= {} - super(initial_capacity: options[:initial_capacity], load_factor: options[:load_factor]) - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/collection/non_concurrent_priority_queue.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/collection/non_concurrent_priority_queue.rb deleted file mode 100644 index 694cd7ac..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/collection/non_concurrent_priority_queue.rb +++ /dev/null @@ -1,143 +0,0 @@ -require 'concurrent/utility/engine' -require 'concurrent/collection/java_non_concurrent_priority_queue' -require 'concurrent/collection/ruby_non_concurrent_priority_queue' - -module Concurrent - module Collection - - # @!visibility private - # @!macro internal_implementation_note - NonConcurrentPriorityQueueImplementation = case - when Concurrent.on_jruby? - JavaNonConcurrentPriorityQueue - else - RubyNonConcurrentPriorityQueue - end - private_constant :NonConcurrentPriorityQueueImplementation - - # @!macro priority_queue - # - # A queue collection in which the elements are sorted based on their - # comparison (spaceship) operator `<=>`. Items are added to the queue - # at a position relative to their priority. On removal the element - # with the "highest" priority is removed. By default the sort order is - # from highest to lowest, but a lowest-to-highest sort order can be - # set on construction. - # - # The API is based on the `Queue` class from the Ruby standard library. - # - # The pure Ruby implementation, `RubyNonConcurrentPriorityQueue` uses a heap algorithm - # stored in an array. The algorithm is based on the work of Robert Sedgewick - # and Kevin Wayne. - # - # The JRuby native implementation is a thin wrapper around the standard - # library `java.util.NonConcurrentPriorityQueue`. - # - # When running under JRuby the class `NonConcurrentPriorityQueue` extends `JavaNonConcurrentPriorityQueue`. - # When running under all other interpreters it extends `RubyNonConcurrentPriorityQueue`. - # - # @note This implementation is *not* thread safe. - # - # @see http://en.wikipedia.org/wiki/Priority_queue - # @see http://ruby-doc.org/stdlib-2.0.0/libdoc/thread/rdoc/Queue.html - # - # @see http://algs4.cs.princeton.edu/24pq/index.php#2.6 - # @see http://algs4.cs.princeton.edu/24pq/MaxPQ.java.html - # - # @see http://docs.oracle.com/javase/7/docs/api/java/util/PriorityQueue.html - # - # @!visibility private - class NonConcurrentPriorityQueue < NonConcurrentPriorityQueueImplementation - - alias_method :has_priority?, :include? - - alias_method :size, :length - - alias_method :deq, :pop - alias_method :shift, :pop - - alias_method :<<, :push - alias_method :enq, :push - - # @!method initialize(opts = {}) - # @!macro priority_queue_method_initialize - # - # Create a new priority queue with no items. - # - # @param [Hash] opts the options for creating the queue - # @option opts [Symbol] :order (:max) dictates the order in which items are - # stored: from highest to lowest when `:max` or `:high`; from lowest to - # highest when `:min` or `:low` - - # @!method clear - # @!macro priority_queue_method_clear - # - # Removes all of the elements from this priority queue. - - # @!method delete(item) - # @!macro priority_queue_method_delete - # - # Deletes all items from `self` that are equal to `item`. - # - # @param [Object] item the item to be removed from the queue - # @return [Object] true if the item is found else false - - # @!method empty? - # @!macro priority_queue_method_empty - # - # Returns `true` if `self` contains no elements. - # - # @return [Boolean] true if there are no items in the queue else false - - # @!method include?(item) - # @!macro priority_queue_method_include - # - # Returns `true` if the given item is present in `self` (that is, if any - # element == `item`), otherwise returns false. - # - # @param [Object] item the item to search for - # - # @return [Boolean] true if the item is found else false - - # @!method length - # @!macro priority_queue_method_length - # - # The current length of the queue. - # - # @return [Fixnum] the number of items in the queue - - # @!method peek - # @!macro priority_queue_method_peek - # - # Retrieves, but does not remove, the head of this queue, or returns `nil` - # if this queue is empty. - # - # @return [Object] the head of the queue or `nil` when empty - - # @!method pop - # @!macro priority_queue_method_pop - # - # Retrieves and removes the head of this queue, or returns `nil` if this - # queue is empty. - # - # @return [Object] the head of the queue or `nil` when empty - - # @!method push(item) - # @!macro priority_queue_method_push - # - # Inserts the specified element into this priority queue. - # - # @param [Object] item the item to insert onto the queue - - # @!method self.from_list(list, opts = {}) - # @!macro priority_queue_method_from_list - # - # Create a new priority queue from the given list. - # - # @param [Enumerable] list the list to build the queue from - # @param [Hash] opts the options for creating the queue - # - # @return [NonConcurrentPriorityQueue] the newly created and populated queue - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/collection/ruby_non_concurrent_priority_queue.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/collection/ruby_non_concurrent_priority_queue.rb deleted file mode 100644 index 322b4ac2..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/collection/ruby_non_concurrent_priority_queue.rb +++ /dev/null @@ -1,160 +0,0 @@ -module Concurrent - module Collection - - # @!macro priority_queue - # - # @!visibility private - # @!macro internal_implementation_note - class RubyNonConcurrentPriorityQueue - - # @!macro priority_queue_method_initialize - def initialize(opts = {}) - order = opts.fetch(:order, :max) - @comparator = [:min, :low].include?(order) ? -1 : 1 - clear - end - - # @!macro priority_queue_method_clear - def clear - @queue = [nil] - @length = 0 - true - end - - # @!macro priority_queue_method_delete - def delete(item) - return false if empty? - original_length = @length - k = 1 - while k <= @length - if @queue[k] == item - swap(k, @length) - @length -= 1 - sink(k) || swim(k) - @queue.pop - else - k += 1 - end - end - @length != original_length - end - - # @!macro priority_queue_method_empty - def empty? - size == 0 - end - - # @!macro priority_queue_method_include - def include?(item) - @queue.include?(item) - end - alias_method :has_priority?, :include? - - # @!macro priority_queue_method_length - def length - @length - end - alias_method :size, :length - - # @!macro priority_queue_method_peek - def peek - empty? ? nil : @queue[1] - end - - # @!macro priority_queue_method_pop - def pop - return nil if empty? - max = @queue[1] - swap(1, @length) - @length -= 1 - sink(1) - @queue.pop - max - end - alias_method :deq, :pop - alias_method :shift, :pop - - # @!macro priority_queue_method_push - def push(item) - raise ArgumentError.new('cannot enqueue nil') if item.nil? - @length += 1 - @queue << item - swim(@length) - true - end - alias_method :<<, :push - alias_method :enq, :push - - # @!macro priority_queue_method_from_list - def self.from_list(list, opts = {}) - queue = new(opts) - list.each{|item| queue << item } - queue - end - - private - - # Exchange the values at the given indexes within the internal array. - # - # @param [Integer] x the first index to swap - # @param [Integer] y the second index to swap - # - # @!visibility private - def swap(x, y) - temp = @queue[x] - @queue[x] = @queue[y] - @queue[y] = temp - end - - # Are the items at the given indexes ordered based on the priority - # order specified at construction? - # - # @param [Integer] x the first index from which to retrieve a comparable value - # @param [Integer] y the second index from which to retrieve a comparable value - # - # @return [Boolean] true if the two elements are in the correct priority order - # else false - # - # @!visibility private - def ordered?(x, y) - (@queue[x] <=> @queue[y]) == @comparator - end - - # Percolate down to maintain heap invariant. - # - # @param [Integer] k the index at which to start the percolation - # - # @!visibility private - def sink(k) - success = false - - while (j = (2 * k)) <= @length do - j += 1 if j < @length && ! ordered?(j, j+1) - break if ordered?(k, j) - swap(k, j) - success = true - k = j - end - - success - end - - # Percolate up to maintain heap invariant. - # - # @param [Integer] k the index at which to start the percolation - # - # @!visibility private - def swim(k) - success = false - - while k > 1 && ! ordered?(k/2, k) do - swap(k, k/2) - k = k/2 - success = true - end - - success - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/concern/deprecation.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/concern/deprecation.rb deleted file mode 100644 index 35ae4b2c..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/concern/deprecation.rb +++ /dev/null @@ -1,34 +0,0 @@ -require 'concurrent/concern/logging' - -module Concurrent - module Concern - - # @!visibility private - # @!macro internal_implementation_note - module Deprecation - # TODO require additional parameter: a version. Display when it'll be removed based on that. Error if not removed. - include Concern::Logging - - def deprecated(message, strip = 2) - caller_line = caller(strip).first if strip > 0 - klass = if Module === self - self - else - self.class - end - message = if strip > 0 - format("[DEPRECATED] %s\ncalled on: %s", message, caller_line) - else - format('[DEPRECATED] %s', message) - end - log WARN, klass.to_s, message - end - - def deprecated_method(old_name, new_name) - deprecated "`#{old_name}` is deprecated and it'll removed in next release, use `#{new_name}` instead", 3 - end - - extend self - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/concern/dereferenceable.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/concern/dereferenceable.rb deleted file mode 100644 index dc172ba7..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/concern/dereferenceable.rb +++ /dev/null @@ -1,73 +0,0 @@ -module Concurrent - module Concern - - # Object references in Ruby are mutable. This can lead to serious problems when - # the `#value` of a concurrent object is a mutable reference. Which is always the - # case unless the value is a `Fixnum`, `Symbol`, or similar "primitive" data type. - # Most classes in this library that expose a `#value` getter method do so using the - # `Dereferenceable` mixin module. - # - # @!macro copy_options - module Dereferenceable - # NOTE: This module is going away in 2.0. In the mean time we need it to - # play nicely with the synchronization layer. This means that the - # including class SHOULD be synchronized and it MUST implement a - # `#synchronize` method. Not doing so will lead to runtime errors. - - # Return the value this object represents after applying the options specified - # by the `#set_deref_options` method. - # - # @return [Object] the current value of the object - def value - synchronize { apply_deref_options(@value) } - end - alias_method :deref, :value - - protected - - # Set the internal value of this object - # - # @param [Object] value the new value - def value=(value) - synchronize{ @value = value } - end - - # @!macro dereferenceable_set_deref_options - # Set the options which define the operations #value performs before - # returning data to the caller (dereferencing). - # - # @note Most classes that include this module will call `#set_deref_options` - # from within the constructor, thus allowing these options to be set at - # object creation. - # - # @param [Hash] opts the options defining dereference behavior. - # @option opts [String] :dup_on_deref (false) call `#dup` before returning the data - # @option opts [String] :freeze_on_deref (false) call `#freeze` before returning the data - # @option opts [String] :copy_on_deref (nil) call the given `Proc` passing - # the internal value and returning the value returned from the proc - def set_deref_options(opts = {}) - synchronize{ ns_set_deref_options(opts) } - end - - # @!macro dereferenceable_set_deref_options - # @!visibility private - def ns_set_deref_options(opts) - @dup_on_deref = opts[:dup_on_deref] || opts[:dup] - @freeze_on_deref = opts[:freeze_on_deref] || opts[:freeze] - @copy_on_deref = opts[:copy_on_deref] || opts[:copy] - @do_nothing_on_deref = !(@dup_on_deref || @freeze_on_deref || @copy_on_deref) - nil - end - - # @!visibility private - def apply_deref_options(value) - return nil if value.nil? - return value if @do_nothing_on_deref - value = @copy_on_deref.call(value) if @copy_on_deref - value = value.dup if @dup_on_deref - value = value.freeze if @freeze_on_deref - value - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/concern/logging.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/concern/logging.rb deleted file mode 100644 index 568a539e..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/concern/logging.rb +++ /dev/null @@ -1,116 +0,0 @@ -require 'logger' -require 'concurrent/atomic/atomic_reference' - -module Concurrent - module Concern - - # Include where logging is needed - # - # @!visibility private - module Logging - include Logger::Severity - - # Logs through {Concurrent.global_logger}, it can be overridden by setting @logger - # @param [Integer] level one of Logger::Severity constants - # @param [String] progname e.g. a path of an Actor - # @param [String, nil] message when nil block is used to generate the message - # @yieldreturn [String] a message - def log(level, progname, message = nil, &block) - logger = if defined?(@logger) && @logger - @logger - else - Concurrent.global_logger - end - logger.call level, progname, message, &block - rescue => error - $stderr.puts "`Concurrent.configuration.logger` failed to log #{[level, progname, message, block]}\n" + - "#{error.message} (#{error.class})\n#{error.backtrace.join "\n"}" - end - end - end -end - -module Concurrent - extend Concern::Logging - - # @return [Logger] Logger with provided level and output. - def self.create_simple_logger(level = Logger::FATAL, output = $stderr) - # TODO (pitr-ch 24-Dec-2016): figure out why it had to be replaced, stdlogger was deadlocking - lambda do |severity, progname, message = nil, &block| - return false if severity < level - - message = block ? block.call : message - formatted_message = case message - when String - message - when Exception - format "%s (%s)\n%s", - message.message, message.class, (message.backtrace || []).join("\n") - else - message.inspect - end - - output.print format "[%s] %5s -- %s: %s\n", - Time.now.strftime('%Y-%m-%d %H:%M:%S.%L'), - Logger::SEV_LABEL[severity], - progname, - formatted_message - true - end - end - - # Use logger created by #create_simple_logger to log concurrent-ruby messages. - def self.use_simple_logger(level = Logger::FATAL, output = $stderr) - Concurrent.global_logger = create_simple_logger level, output - end - - # @return [Logger] Logger with provided level and output. - # @deprecated - def self.create_stdlib_logger(level = Logger::FATAL, output = $stderr) - logger = Logger.new(output) - logger.level = level - logger.formatter = lambda do |severity, datetime, progname, msg| - formatted_message = case msg - when String - msg - when Exception - format "%s (%s)\n%s", - msg.message, msg.class, (msg.backtrace || []).join("\n") - else - msg.inspect - end - format "[%s] %5s -- %s: %s\n", - datetime.strftime('%Y-%m-%d %H:%M:%S.%L'), - severity, - progname, - formatted_message - end - - lambda do |loglevel, progname, message = nil, &block| - logger.add loglevel, message, progname, &block - end - end - - # Use logger created by #create_stdlib_logger to log concurrent-ruby messages. - # @deprecated - def self.use_stdlib_logger(level = Logger::FATAL, output = $stderr) - Concurrent.global_logger = create_stdlib_logger level, output - end - - # TODO (pitr-ch 27-Dec-2016): remove deadlocking stdlib_logger methods - - # Suppresses all output when used for logging. - NULL_LOGGER = lambda { |level, progname, message = nil, &block| } - - # @!visibility private - GLOBAL_LOGGER = AtomicReference.new(create_simple_logger(Logger::WARN)) - private_constant :GLOBAL_LOGGER - - def self.global_logger - GLOBAL_LOGGER.value - end - - def self.global_logger=(value) - GLOBAL_LOGGER.value = value - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/concern/obligation.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/concern/obligation.rb deleted file mode 100644 index 2c9ac120..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/concern/obligation.rb +++ /dev/null @@ -1,220 +0,0 @@ -require 'thread' -require 'timeout' - -require 'concurrent/atomic/event' -require 'concurrent/concern/dereferenceable' - -module Concurrent - module Concern - - module Obligation - include Concern::Dereferenceable - # NOTE: The Dereferenceable module is going away in 2.0. In the mean time - # we need it to place nicely with the synchronization layer. This means - # that the including class SHOULD be synchronized and it MUST implement a - # `#synchronize` method. Not doing so will lead to runtime errors. - - # Has the obligation been fulfilled? - # - # @return [Boolean] - def fulfilled? - state == :fulfilled - end - alias_method :realized?, :fulfilled? - - # Has the obligation been rejected? - # - # @return [Boolean] - def rejected? - state == :rejected - end - - # Is obligation completion still pending? - # - # @return [Boolean] - def pending? - state == :pending - end - - # Is the obligation still unscheduled? - # - # @return [Boolean] - def unscheduled? - state == :unscheduled - end - - # Has the obligation completed processing? - # - # @return [Boolean] - def complete? - [:fulfilled, :rejected].include? state - end - - # Is the obligation still awaiting completion of processing? - # - # @return [Boolean] - def incomplete? - ! complete? - end - - # The current value of the obligation. Will be `nil` while the state is - # pending or the operation has been rejected. - # - # @param [Numeric] timeout the maximum time in seconds to wait. - # @return [Object] see Dereferenceable#deref - def value(timeout = nil) - wait timeout - deref - end - - # Wait until obligation is complete or the timeout has been reached. - # - # @param [Numeric] timeout the maximum time in seconds to wait. - # @return [Obligation] self - def wait(timeout = nil) - event.wait(timeout) if timeout != 0 && incomplete? - self - end - - # Wait until obligation is complete or the timeout is reached. Will re-raise - # any exceptions raised during processing (but will not raise an exception - # on timeout). - # - # @param [Numeric] timeout the maximum time in seconds to wait. - # @return [Obligation] self - # @raise [Exception] raises the reason when rejected - def wait!(timeout = nil) - wait(timeout).tap { raise self if rejected? } - end - alias_method :no_error!, :wait! - - # The current value of the obligation. Will be `nil` while the state is - # pending or the operation has been rejected. Will re-raise any exceptions - # raised during processing (but will not raise an exception on timeout). - # - # @param [Numeric] timeout the maximum time in seconds to wait. - # @return [Object] see Dereferenceable#deref - # @raise [Exception] raises the reason when rejected - def value!(timeout = nil) - wait(timeout) - if rejected? - raise self - else - deref - end - end - - # The current state of the obligation. - # - # @return [Symbol] the current state - def state - synchronize { @state } - end - - # If an exception was raised during processing this will return the - # exception object. Will return `nil` when the state is pending or if - # the obligation has been successfully fulfilled. - # - # @return [Exception] the exception raised during processing or `nil` - def reason - synchronize { @reason } - end - - # @example allows Obligation to be risen - # rejected_ivar = Ivar.new.fail - # raise rejected_ivar - def exception(*args) - raise 'obligation is not rejected' unless rejected? - reason.exception(*args) - end - - protected - - # @!visibility private - def get_arguments_from(opts = {}) - [*opts.fetch(:args, [])] - end - - # @!visibility private - def init_obligation - @event = Event.new - @value = @reason = nil - end - - # @!visibility private - def event - @event - end - - # @!visibility private - def set_state(success, value, reason) - if success - @value = value - @state = :fulfilled - else - @reason = reason - @state = :rejected - end - end - - # @!visibility private - def state=(value) - synchronize { ns_set_state(value) } - end - - # Atomic compare and set operation - # State is set to `next_state` only if `current state == expected_current`. - # - # @param [Symbol] next_state - # @param [Symbol] expected_current - # - # @return [Boolean] true is state is changed, false otherwise - # - # @!visibility private - def compare_and_set_state(next_state, *expected_current) - synchronize do - if expected_current.include? @state - @state = next_state - true - else - false - end - end - end - - # Executes the block within mutex if current state is included in expected_states - # - # @return block value if executed, false otherwise - # - # @!visibility private - def if_state(*expected_states) - synchronize do - raise ArgumentError.new('no block given') unless block_given? - - if expected_states.include? @state - yield - else - false - end - end - end - - protected - - # Am I in the current state? - # - # @param [Symbol] expected The state to check against - # @return [Boolean] true if in the expected state else false - # - # @!visibility private - def ns_check_state?(expected) - @state == expected - end - - # @!visibility private - def ns_set_state(value) - @state = value - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/concern/observable.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/concern/observable.rb deleted file mode 100644 index b5132714..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/concern/observable.rb +++ /dev/null @@ -1,110 +0,0 @@ -require 'concurrent/collection/copy_on_notify_observer_set' -require 'concurrent/collection/copy_on_write_observer_set' - -module Concurrent - module Concern - - # The [observer pattern](http://en.wikipedia.org/wiki/Observer_pattern) is one - # of the most useful design patterns. - # - # The workflow is very simple: - # - an `observer` can register itself to a `subject` via a callback - # - many `observers` can be registered to the same `subject` - # - the `subject` notifies all registered observers when its status changes - # - an `observer` can deregister itself when is no more interested to receive - # event notifications - # - # In a single threaded environment the whole pattern is very easy: the - # `subject` can use a simple data structure to manage all its subscribed - # `observer`s and every `observer` can react directly to every event without - # caring about synchronization. - # - # In a multi threaded environment things are more complex. The `subject` must - # synchronize the access to its data structure and to do so currently we're - # using two specialized ObserverSet: {Concurrent::Concern::CopyOnWriteObserverSet} - # and {Concurrent::Concern::CopyOnNotifyObserverSet}. - # - # When implementing and `observer` there's a very important rule to remember: - # **there are no guarantees about the thread that will execute the callback** - # - # Let's take this example - # ``` - # class Observer - # def initialize - # @count = 0 - # end - # - # def update - # @count += 1 - # end - # end - # - # obs = Observer.new - # [obj1, obj2, obj3, obj4].each { |o| o.add_observer(obs) } - # # execute [obj1, obj2, obj3, obj4] - # ``` - # - # `obs` is wrong because the variable `@count` can be accessed by different - # threads at the same time, so it should be synchronized (using either a Mutex - # or an AtomicFixum) - module Observable - - # @!macro observable_add_observer - # - # Adds an observer to this set. If a block is passed, the observer will be - # created by this method and no other params should be passed. - # - # @param [Object] observer the observer to add - # @param [Symbol] func the function to call on the observer during notification. - # Default is :update - # @return [Object] the added observer - def add_observer(observer = nil, func = :update, &block) - observers.add_observer(observer, func, &block) - end - - # As `#add_observer` but can be used for chaining. - # - # @param [Object] observer the observer to add - # @param [Symbol] func the function to call on the observer during notification. - # @return [Observable] self - def with_observer(observer = nil, func = :update, &block) - add_observer(observer, func, &block) - self - end - - # @!macro observable_delete_observer - # - # Remove `observer` as an observer on this object so that it will no - # longer receive notifications. - # - # @param [Object] observer the observer to remove - # @return [Object] the deleted observer - def delete_observer(observer) - observers.delete_observer(observer) - end - - # @!macro observable_delete_observers - # - # Remove all observers associated with this object. - # - # @return [Observable] self - def delete_observers - observers.delete_observers - self - end - - # @!macro observable_count_observers - # - # Return the number of observers associated with this object. - # - # @return [Integer] the observers count - def count_observers - observers.count_observers - end - - protected - - attr_accessor :observers - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/concurrent_ruby.jar b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/concurrent_ruby.jar deleted file mode 100644 index baa26852e01dddae251dbcac483f8ded73a75906..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 136759 zcmcG#WmH`4x-E!HQ3Q7j5S-xd?(PnSOK|t#PH=a3cMAk}cXtc!5@^1?_u04ax#N7@ z=l1OyqyDT~tJaVC$b9B}UIl4LD0DD5I5@B;H3ki^|Jw&13<^wER7LQsq?{Q2+XxsK zB$$FUEZkprK>X`Ah5zzl^p89K{jjW{oTQkjvI?E7*p2MisEqVix@kn|uhbJ`ll4jr zbIe=&4s=qow34#Z&Sg-5lvA7|O-gg9!XiqyFG)v~ZU-Xb*{3>i~W901MU}EE>SomyOx^&?4jKnx85J`IO@oljESlHh)##<0fEov|=h9f+YX*@jc9R)Y z4qI1jrU`njRD@#9Wv4+s}uki1Ge0}ugUx%cx0J|6i z)d=4vdtXKz2Pnu>)~iOoB`&8sZWQs~?MoVXd7lTai~*_{b&a0y@!Li(ZdPzy@t-80 z0urj2bxk19NhGw&9tZykf5~clRuI0&t=uM!n+J|&R<_QjJlmnX5qxpJTz2q zh-8)fH%D{lC3d6-Qmkt~<$I2k`u&OsQ!(n=Dh;v@mpYKddzlw(6IS#_gH}4T;%m5H zEL#N{qPbe|L7&go)D`29y~Mn+4Ix}3R3e1Ze}N*59Vd(UhG&lYEBA0H2BM9z;sI;O z)}$*B*(mIm>C}pmx3}sc9sZwMX?B%dh~YD&D}lJGyT5;ct_G*^bs5k%nS1G0*LJ+fQ)Rd>5cv!MEVXN zQABUz=0q>(WNU32jFO2_;twbeVdPqTZ-u(GWRVi;Yc#=B4 z88X5Mk-$K7$*{io-_eS*-^}8UD~^8dNDA%1J}T~g*l18hr`xt^Q=Qdh)0^x$zZ>9 z-(PvxTxlbvho{_lW7PuQUf`-nIq|PSi&>Rd?vG=MYm?)fSB zSC`VS0_$*0;r9pM9w2}P7&vR}6gw@Tz$&oJBAWDB8p+@xfdLpdS-1u9gc{6O;y6Si zJnil8*wu0UJ*)jwm-tI>X&;;zl_{f`kAH8|z;sj!k`bM^w$W(txy)8n!CsNbNrYWUG$t=c1sbC#ajc-WNCs`lxbH2o z3IOo=PDHkW6CvcB>$f&Iyq%T4*VW1Y6JlwgBZAKu-x%RYJQ~z+y!oPcR37Y#$pYOB zY}G9-ST`C02`;<{Cs$Kz5_zzB0hP4c ze!!~ctjiENSAbeXPGDLRyMT@oVF_EdVF@`aLTk*RCLe!6Ka`FOQcfKos2^A3NBB?b&=*LV--fP>ieomQJ;;Q;hHL?c`%GlEjog^e5V);fWbK z)B^>!5T3@kDx|+q^>G!a{HXe1<$sH+@P9v3rT%IN|IXikLR_h4Esw5_?nC$cyyi5g zL&5~5aRDo7v2kT(#6KJkaBb*bE~K5YPGD!3(vzx*Y?VfC{hTX1Tixi}U66fAmeL@r z-*sPnOT@xxoz2Z%Q&T}zB+KUbu;Dn#Iq5#Z`LMD1{=97lW_I~Gm??neUEtt%|_wHKC-eklDAdExZEUj}&72 zO3#+m8wwHcxm^c+!n|Y#?QqS|I|_HKGccCgGx_{d3afSMtd$pO{et_P98pgFXvuJV z)cZM|>Lw0M{Maa5h_)@9N{?V(YW&;&q#ZN$T=k7+vTo;v6Y3a39=kfOO^zjhCMMc6 z!SJ4G5?V!*i@tM$R>uIAU?+Ud@aV^!SbSGq9Xt8-Vpj(tZiqb)>aU2gctz-02-e5X zrcvSKtvQ)8rrWeRHC`d`qSmpSWu$Ra5%vo;z1J8h>D#Uky-Q8bF#M_Z&yiQpfc;d8 zTdCzuj{gI+CBk)=Cyw_p^Ec@pS<}YP*rR3^%7nd$V?$`SkbcjVgiF}>;Yn=HO$`Di zixW(smtdf@nQ)=Anb3#^@3j*v%WTW!@YYY)B^#RHeiVUBCY^vP58Bat7Wh9bdM~188c+SN(X`ZEjq}6b9#o&-$L0H6r^a=lDEcc*P0YM) z6L+(cTA3@pLbsN#GzAogbrY&t2oit6!dQZ!aM{lqUrl5Tcxm7vMj&OgIn0RMu$2gb zm3~kTsi2mUCjaVtdabi!Z!2|_)X~G9Q4X0@$lc|CPTfL3b!8bPi>9rOC+=R5c*Up~ z9dX^Y^V7rq@P(A#Bw7*fscq{)cp}=~j8nX@u zNi8jThIYauXmZM|QoZ{fe<3^pwkA0walm&*dnI{-1P$9VpZK_ynqlr9l_tN>w{r*} z|GRsHcmitBZj>3Hxk)5+s$k~E?qb}N23_}0Rxakk^uQRJ3Z*TcS z*`hUU_eNobJCAQd35$uBCT$u8q1CZD4qe67fau;Q39|RhZMPI~-w<=2hUhsho>!VQ zF48MF6rCjT?~@u^+4<1=Tj*VV z&|dw3KWU=(Q9u5G3DF}HtJCk{&0f1(J)_z0==@p-dmvEDq>YZ3pL$1^lI>@OFF9D@ z3SMBmM^F5r;C?2)*0Ow!Kl_vC{$b&UlM@4sdkhFk1#xOf@2u<+J9A_HB?GNvgA5tk zgcB|+6Sw$E%_r8&|5vqF!bkG*h6V$} z0RCMM7y18M?K%Eg?hBRvF#&j|C#AI%OfRHfPUe+#BO%4W14XNAzld;%;+SSpSN_Hn?j$rR znuIk069){QkLM2E*!>a3I8?mbf=vX~Pi@oa~1Ve#T{ zmA8Vi>KK=##+p_yjux62d?i9?+1qybPSYZlz{pGNZGqRen&d)HI20%%e=;r5f$Bx+ zl>H9XyP#?Qhjwq9t9RvsoiV71I+2HNZi;%`RR=_xer&qn{1!Xo&@5qO@kxZ|i*XXu z3EcWw0$IoF&9pc;QgkHxx@pl@ULy`ahMri|H*Ug!%?UvKkoEqIX2x2ftU9l7O@1Sb z$*##cC7X#mm;=s6ouxQlPzRta- z=UL-D=i$o_dVO%60cQdf5!OCnB(WU!W?hzckx}c{8$EC7@bAd_b-LUwf}sZp>F{6R zEPn1Ltv1n*;8oeO7JecKVZnw`;usqgj>Z_g_V!=6ooky<3ViZ%cGE&gIBTK~I*||} z^RpLXa-$A;#eqcQ7=h4cYM}};qFUByES&vJ`xc-)T+}N!hO9Sjj~|aKhs_a23%aJ~ z5E@DDsY9N5IBV;jF?tFK8rQo|@Us}Rsw(bbFQ+jXepz9i%tFB%L({cb(V{X zg)WEBzngiBi7^CSdCI4e>>Isux$^Sj_AEsq$ucOWV77;B;aq<1uyXL~HtM!+SS%KL z7z9~M&O=D^v|Cvt-G`BF0|_JbZn&g|RNJv8|7cpZ9%dP=+3S}6T21Z>E)TqZcQ*|W zsIvFt6@3gt(`UxpRZVz!9pJ1RYPZM=JFMNIm+f;;OTW7JFok*R^{^WILi|riGCPZj6Lp6u$t#(IdlDPb-T%(Y*t~dseZ9Mb{T{Luvn7lcqAvzE4or5PM=CQc zIf#xMz5tAa%%e|>&c_&7L}3>L;Fu&NN9RVGzRHOE2TJ4DMXEJ0HfY{Q*I6as5GB$Q z038Isofc^{0ZfD$fTFX`u$+Sn)KavW-ki*<(DG2*fp*ayCmHO~-HEDyHI-ORerDH0pH~is#d6{!CqDo5xYn;aNH*41CK;Ud zQ<0grF=sBgFS`LSH*jVlWmc#&hTy3>-X3-4y5A8vu|RQeYL}VIdRVgZV&Z(Ep;bn# zyW{4r1i7w+$=t{f>}fH@zxYCBmS`AKBr(1Gn~~IsZi^GgUX&lDIn~^YqmRa169>K#N!@NAS)Jx6>psLL?D%zz8|DukRSh3j(!$nwlyCPsB}mH_JbH%u`!wiwd+G=xeh zceGyIu`uwD+jh{!i|iPfc#5#$mkG(}BdA`IKM(QyWOa#Eg=}JkYZoW%ee6FC4u(3% zXTI78ZhMr)QLqWz@~tNwpZ5ZoL_*+-B>^WGTIO73o4*;oWnb~H)WfRsPyf+(II#A3 z%|4Qt8usrP%ipOE{}@DNL3TnQBP$adm!TDuq@p?mEYQ)*3ZNoy5V0wPmui7Gz|GTCEiPx9-RZM%$p^N?(Aj_7Eej zk2*^%z(m{WqUqvgWjB`%cr3h*3~Vh^$s=sk1<|#fqA_)Ie*v8SLr9v8Dj<^DS25HQ z?-(=4J{@w~(HIa4+PqK*=MTi?R?4b|EKOrY**FRg!U>-FP#lQ06{S)NWKk5R2?;S{ z3hfQBbC-|uWl05>DMfGgG$Sj1e&<#0W)NeG|2}GbgMFct93vLq@dxJA(&z>{K%Vzi zl`C7~3pt}GUz9~%eZx(lX2LiqMoV%5>#x#`{%w}Y=KoP~5c`|b{9hpYpDzE0R#>Q_ zE06Y}6$(o)evLpEM7e}?>aX*vzz{@(Q^XC6$rFRCHg@4|P)=Gm-|Kh>qJJYqtBnWH^^>$y^?=ktVCM7jXOziDh+b9>eAWzF8wCY4T6n#@>P>u(XC2@(=txwNB-dVdPmF42A{F z-FNP`eYbnUUb~(fY12Zzi63hU=Ln8udSzzjxE}VIxfByQ>%uFspbpUqwPmc16x%@B zqFBM7{&=`B3_~%cmykAGYhP0@D#B|@#VjS;m~>1fj47IDTY`w8n^}QIfuIt^FTopW z=yLY;)ZbcZtb^}<2Pu$ii)h3;2_2_dF-jteL;%hicupwUWXINK?TCzk>m6FomcR>b zVv9!kLpMT(vF7$WsjWjy%)r$5_WNL1lQvs#RtFqDlj;?E>(w2@U(Gmi?$wmo&wv>W z+k9{7N9{F-p?sT>xY6FB;wO=&sWq&=2~Mou!<&hw!50cfX#$5$&=M0!+SVi1HbNCA z+oplFwVu(-aJSKlTkrGwOfcN2o?;KM_j>+ZG5|g<#HUOtN~o69)wKmffjBrnVsqeq zcKRqt&NEd|+fjG>kbn@1M1f(D!Lv00&07`$fQjvpd=9CEe*zUbjW_YV0T?Djo+SF6 zHcWRt&L_Tr;s~!>IDF26O_oj4Wh#XWoViFo2b-DVh_Ng8g62t**IXtR`V*s|5f;qx z4`cs<7Js=cy1F!bnbyH0&i-+F*;MgV^@OWOTBBE5Vb&ra!&`LM^j;)*C8Kg$^3#QG z^yM!-nWE9Aq)w3*JpIficSXTM1lzkMV3Y(v^yIp?~@o?7YW@Fp92il!PgENr3k4m;FC`0^U=nu-SN>~IDW z;I?>MDrFjmQS7!vu3>T`G||L8tvap!SBhpYcvVs03r?Pre?xmg?6wL)s^<;cqV&^B z>^CTTe1)m9Jj65L74)Cjs?;{sg>y`-7D4P>Vi3G*3UQ3g`i~sQ5OjPsdnj=nF4ym7 zp$VFKXwEC1EW0iFb!*mK*S zME4Rvv*SF!jXQ>KCLuyMV?V#Q8Xjd{TEXbvI`s)6!}aafZG(xFMm;8Qk+P10MX_0? z%C?A<1E)Vv-#blGYjD*A$kyA#&7TRhHc+#-nZ}9px*dU2Yk@A$;?-#5sM|QiQh^({ zfZ?joX;1zw1y&p_!A8|6V-?$TDi@v^MsCnSD8&y^NMCaItzbL4B|G{sv`kQRiq%9q zJ0u0;_$1|Njx>^+-Vb0bb+mkhGY(L2uN3R7?0Tzg>ZG4>r60V6n1qcGyEew@pxHCp z!maqm4MWY57wsWAwFt;!PKS(upiQNx(?JfKkYD`&a6o6E<;WR7Xot^-7yDnE9sdWC zl=)xE`2R@KuLvpv$O<-?*3uwR^eG4k3@BxW+(20UF_-ovKNIcdc1ol-@Hams^5?yB za)o@Pfk(p~Tc({sw1Tyu?HI0((?9Y z#%pQU8;G>!JcOsSS4RS%wZ==IBvrNN$7SM*zs|3~5g3HPV0+y&(Fazcsa-o6*n?I% zaeSb#Ur)+43s5zIJ?#uuGTl)km1)j`B>day7+sn0p9GO93_^T<>m;esB;T87UUVdOdL&;>}-zUU-OM`8xw z8*Sl0Xs+umts9mgh`%vPJjy=PZ`TE~;hY^Alq~<0U6J(3!UM*7*ZpiPB(PapQ!(v7 z){TI#Ls0(`Xza90Ej)_?GAh~FYKxWJcaGxU#_gTGtlg%b4RnyL6v9SsJ^?u#ur8{Q;5i%7+6exu>4@+Q`Y_rP-ID`eXJxIuH*iEI$7()pJ6GKbP2--HFp! zBa=v!wl^C+d`aT9((bs2!O2z|O9o?0lAKFjDeIt|?Yc12)>u-6xbvvYV^!8aitNxw`c zR#NpXQy01BWJetM+p@?^x_zbr#-7h8QX93yf#b~Wed3tPt&4twS*)__QrMQcIapuT zjE=Zd+tC{!@lem1Z?juuj_mCapb2jEpahXGp#t(oKeE%cC1HiwSpq4_<0KxVMY0@Q zk$yVZe3DIrr3sO0r9G|$>9_aMyWb8LPmqFXgBDN}Lsi?n?QO$!+g8pEhX}tIaYb7^9@_WT9Z%TKTUeq| z^7JBi=*TVRg+Av?7yx`0m99<)Sxmj&{$VcLvDzO~e&nX(|KGXE@*lamF88kn`jMNW z$O;OyD?|pODF4h&#@avx+aVY3f8?fi0)l=w`z3s27X2`DAf9y4G{7xp%>kFX(G6hD4l0B|0u*bw(c2Q=1 z#1d&{bnP>6Gqfg${mhJ`15FH$o|)0H2p0m!2M+G*L)|MxF4Xkv`@ma!=ZfhFvdMQC>B zQXcj`BM<`*JP~dcwQR}499JNUBC;xqFp{vVsuHj6%ht_(D0?&$3!=@=zAA zGAk9WGUGdTPT4ZR;H2<}9_#m8k6;y<&&Bvr5LwylR6z=z7I3mxyptPNFIE^0Pt)L% z+ySR-W}u+vQOBNj{LG!#8g(!mRa4qEoUQUy`4bgsCbwtr_TC0J+U8`~Z!<=(($7!X zJ$RfOf$HwxA~WC$97I>QW`$t#I~}r~3$oFds74tap+P1Wj%HNJiUQRmOVdhKhWKd4 z{nX9%UX0ZU>7d=E^Q(6vnq=KZtPsJ>Mp_#RnNEc*XlPgL=eMs6=o`FvfODqXcSpf# z=A9&Tx~WlAD8X(t;D`?tav|NWl4Zu6G%t&svUp_=Sfxj(M;M!^k+#8f)>q2ujjwZ} zoB8$uk3e?wdlYCrqnHC+mT7*E4)Y{9dN@UrTQPP?7c}SEYB(vaU#X}o`aO6w+dDcJ zusR?&_`lj`Cc;PiG=l38gxxR%`6uU14ZlAoc29$%fg=hu->l^(r-o8gfo ziIISfYQV!gd&^5Zju@O^KeFT30q!YAaixDn-qgNMfPl zS}Qk}x+vl$TduS@*_TS|YE?EiWjP))GV~h22(fGqc08PWKky&EK74Z}|MBzBmM|D5 zf*H9|Oj&mk3F0w?6^~z)gM9Y|e0tG2QtP;#wtQUYw z*iTm!Q^oIAs@FDf0j>a})iOdGJrb>i2d#)7`5w0M9@JeAYOd6UT?z~K!q{c>>wCQO zRyy0KEwbs8Qm>ha*Ek%8C>5wkyQFY;T)uN2ZT3gkOHb5(cjv=?iZ7QxP#^RBinn~dcLp>Mry}Q{HWUgihRqz2b z-TZNqK0Iz#4#B4cN=jA5;3tUID@q6)5le~u=HdIEa8*}J)A%lmiWgoKNUSM@fTY3r z-Vu7GT5M^!_=IFyfK0TacefUI5~$T5V{BNej={hs;UX@5q^hIUI{6$P9vx%8Urwcu zSN)~IKtUA=ydZ1OM4eqO)aZXlZK)u=%A8Y)a|Kr< zu-MVSBq9;(-INiOm&Ed;elZ%+j%umI5bXqNpkGcoVd@#CmqG!*zDZw8d+9O==-X=b zeI9U7CfINKEf@I{v~i@aVuFEvWEqBJ-jCoHT9!OX!TRt@bCi_ygfB`Pa8k2WEzM?I zhJFbI+&Gr);RG##Ev$D2uH6@iY_L$|n23nPdiQkU02-$?!bPAq~NCM&;`unAVR03<0U-`;ZzLpY%?H&-?yT`gaQr#5*U3>+Vg$BUPoHegj3R1deo< zMnnL0SE%QZg!09`1>ua5iGv3)YWqybqN`#Dxl72zpITP+^VTfu2}?1i^$&Twg^amv zE9y_Xa6#_A4^5I6VdeIWOy|n>{Dhw~saRRlLA;7`7lVfnKgu`;E*vS;%b)zY5WE%o z?I*&d+P5F#1PEVX;_VSPc`J6HCX3QN)D5b2E@cUyle#Y!ib z%MN!#@v{3%HhpOTk|wS#G82ar;7>VTjdUBfo7@OmD}bUBS?BHX00%LVQ9Ii;$tbB+|l>CI#brv6-Xg+*7%Lu7(P=%wB3zxLo zdhuH}#V^O2TB)4X%2W?-vu{yIt2jkn6yH+Xk|A|8=%HFQeoNmsFdP&VpD(qh%}eGg z6uu2xH?*^s=a1KGmGv00XN=Mk9rwjA^7_X3umAZ|uIplXZZn>9?Y`%$n=sH#J#TqU zi)Mpsw1^!9i)b@n@~9xavr+lba=g|`cdUHQU>Bakw+AFTld%3`^0oEI=A5NDQf$uG zjH^1^;+n|&CkjweZ!GWE`NFGSbL6N~_4%wYdYfh}o|Qb;1gK>ow$ds~PP)uYWr9cP zL7TG1@CEz-#K_0Um?-jQRtx&ZznmB!lLp)Q#;J21^ z#B+G_HL42J%n_07TI$E-v*@o4bhvcF&V{W5Q!T^cn^vOYL=O7d(?5w%_OJO zJ6n_rni4>_cmu&6YjGAduK^t%$V1L>4X z4Nl7pL>3vyFLG_|bSO~y^KXoS+MxgmkR^Z4IX(zcE22OdN96xad?d5ug2qGF;W%MyX8!jt7C}E2w_hz*N;fA%U=ehEy@> zcic~F)R^0ygekkZ`&mir zYev83eYsRKf{Ak!`l$e8sluey%M1=*cu}xm|A0=KUZTF}`jKu(`NgKF^>qznr0;eZ z(2h~du$6l#ZOtW7E_dw<`RTV1v`f6_lR+LrGRfy=f5TmC7V4#(OS63Cjv$C_8TWuS z%AG_U<8P)3RftZF(~VR1{A%%u$%R``xY~Gx!cC&9f=eSXbD?gJdQ?)PBibo)LJQN` zUmQBVFo`a?3P9P{4mrRl2G{j-NN4n3huPCs1@7slhFce2aXaD&>hqy1>@gV7A?}NU zpTbAqWiKPSSySUpDTu+up!phvf}_BzlfbGYVlx`mpg`&+(hq1GV#Z9?rclKd?Y4By zE2=r56aDU$RnqeUw9tLB5JE3ig+btK4|1}CI?nfgOcBvCp{YS6&(5IKd(t+Kx5ZQF z3T<`|y>4;Th=nB~;a?7sC!@LkgzEl~DiR)M7)Ry+>rV3{Q8LzK&|bYfzgtX*e>P-t zrC_STzd<9{;!5bEhXtPy`9y-&sV>D3{wo=cdp!B&fcR@}1(JSEE|z}yW)AF*0-#R? z!K5=Wh=g!Hq}riIyUXc9a3uD+ikr!S2#F7M zo+6;Si)Fx7de_1|rEES71Yy^mquCoWv=|SF6{ixB%VHFnz|$K`lnitC@8fY7V?0C} zT^5$Kzh|*`If={|$8^jqq*M|eKx$DUB9xTflbr19UzaQ;2^h<#@F9%=f4;N^7xyai zjGno^vDX^Iz|sJFkwC~Q4+rBRp9-OX!W}Bl#@tIJbGktjyw5(^>193O^s(G)*B@%v z>!>-~;x5LA^x7Mh_3$gZiO`5jF7fryypHSd*rVjQBggF1ybVt=qf+_SFGd(*EmFD( zAlXN{D(FBpQ&yalJpTpIh=u@!ny_2~YxLn|^_ z8zqLx5b_PQvO(5;65Q>E(v~yU8AFL#}R69;yGQ z;B&~E2#c1Y670fj@MehMXjO5J9$aBh>P{@t1VI|NUu92xSbi{wnbb}M%~SnT`%f6V z-PMUdaaZRUj@aIh;JS{NS(BN^3c}66xcx3drPy>kT1r9bQF+`V4!VZhZbHHkoz%}x zYe^E`m28Z+8H1iQ-_FGuyODhfa8t$IXP?J{zFJT?0}Vro)wX-yHDHyJm(g|VwZ;b+ zKDI`UxXukTh>hGsg6Gje{0#?#e)jN1M+x4u6gVE&t-sRmDwAJY4Qo|~&XSsN$R~)O zSW!4aUR7=~PCb%v+|*z0ch2@v z3wP8tGE4xHCN3qc&G!Y z`Q{L+lK-;#bLIfl{_=6_!D)4}pU1=h(0HSwzk=~gW#~fZiq`mzeKq^H%O3%aMO8px ze2p!Xl)JQpw1&`X>4D`V4V6UPPLbH~0z4i$i3-5)1?8;j<)|X#d>j~Ij@`WL%fFkT zeCj@F0)A@z1g*|`jAzqE;|)uP-@Xnc=A^ z0HSxsRu+wlW_9N<7#36lY4dTg0RK4Hfb!#D!ClE2g5&s~7!uAmM3VZqNgJy_UOr!h zX%by=d%K3qf#-?QGN0v)WmMiyG1IRG6|4rS;he?G4q9s-+O`dnKvq)}prLGPGMSmO zBZkNa;@VK2D41UCamjGDC|GyVx{(4+d`(YqPx63kNz?c(h+$N6pPbR5&$27t0gmlm zSN_|@gkGr=6lmd8GVv1z!F%{;sQviY2aGb6UrrJJ(tyAM7D{bDZ2smCVE=1SCH{9n zmHN+U|Es(u={l~8pa*Y8nUt#~PLe11DCYP{$SK_+P&&`VLCuhJP<jU88dYL~>_JwQ-{|X5? zbTlPn9BYJ)^ebdSZmELTneE8Fxry|I@nik}ZvBxwz$DRwH#}rPn(#+np6;}LWY5NS z`l?BOqMGYz9NllRVbxj{+0O# zhPcc?;Z8x3yMB2BGP!t_keV0RVHhXAwNrkp|3LbQXxBH?sb}Q9# z7u7)upqY|I{ODRlVDu!mm?yzPq1K90jjS0yU2B(yEt@3??M<3Ertm`JDDMN7)@zE| zC*BjRm&#;||)uq6ButXl%6fplrxQN7Pg*z6U3=u3l@f~=eAsB;qZ;^OCz zM&(*IQO7Yhv2w#vVxupx={l`vXY7A~NE)*w#hj&{^F}@)GI%Ie=cWoep3L8N$dw}u zO~Fnf%rbi#_);!TCZ+?^NyH;)*%b;Jfh{sUOa^(EShtlB(EASzuM`7C`dgWsNI{bZ zQ1vPKscW`+ot=K^@Rq>>GgczG_jdPiBN+I_*=c$sU%g@#ip-5!K4EEb=)3vVV$wA* zID-wBE-qpiNPuHw`hZ2i3GrjtBBaTKf1Un4`pKLOJo7gMZ$Q-_n6L3*ux;NX9>cSC zv6rSme`s81_j@dQl$x}Pmd_@v$H*7ishbs(r+F!UP1%`--yN=y-0#I!FvF z!G*?5c{+Pu4WLAG2YV~7O2EycQwl}n?$XK4eY26Cx#{ck3Q-fy4r6#U zlbd=ZhSb{~_Gh`tOIxKH_grD=t|=lMmwTe zE>jtvZsFiEKRgJrZWe=`22GP*uV-2xS zVj@1);23BERho9rKdBQHO2hUhyElC=L~^EOs948YDf4rB%t*#IwJFgv=AFvgJHBvm52NjpH4^4Ox_RmdDyiy=?NFUX(h$ z)@cWGpNI*>T+T9g4E+sIqY^nv3lPKdOYJY%5HWP6TK>7zx5XaG!g!~aJ{4ClJEq$w z5yubrJ({s@H^CCZsv&>+iEGDg8ir9E=hyTL+HpQJt{_5kpm@!BV`Q!gWb%yfJ__UjZ4RT3*{l9eZTWdb)3Qc5}6V>9~_pPkagha)87Qg z&od?sY6y}cG#X-(aa|K%gx6Viq3itgfGB(~ApwfUnb|+nM%V>XbO8wTCHZI4q#dhC zFNU{ycQa-W$`o@it@0@HYlwNyPKqlP*MgzB)iMkylkudQGvyqHFj7Y(d~jRVZOD?c zj5!{wZ~cNGdIuh2x#GkEz1%u2ktsJ>rI?N7R3n(tafPl;(LHoFTl55mTDU(eF1;Gn zMrC{GeSsh?Q2t>7c?AgYt|U3TNec~9^KI?(d8JZWPQ8Vk$Efq}84s}3)G)Mrd-@D~ zYD>_e2)d^G^GJzuI;5=3Afp&kV6J4Oz$QD5>yAmv?OlTfz&0H+MXM2M3SB04M#Cu> zUbU?`cX@ao;{9>CXzooHn=%OT1jHPso25lHRc!LdPmGJC{|i&w>s7?R*iG%LMhgS zr|;on#_6tM0p3tw5MK9WxRqydGOzZ_H(!NMT3zG8i09^xe~*oKdS19sI8L}vY`i`_ zO#XyO@yGE;vIcLUIr^Tx9cO_tuRA(UP-?}(Gjw*{(Yy7t60glMgcx-=gD>`*#$+rc5TlLuY3? z;A6Y>NGo@%^A0@*GyQ_*Q2-b75vNxhP{i0fB|5XTNGr#!30gyuEY8;^Nm&J$3Wg)1 zTyf6Q+K(GxM}A{vsy;`#YnOm#C^jH`z=oM9@~JXDco^!BosfnOwoOkwOdyP_T&V7M z1gFh9R-nHkrZtf4sgp<+V#R=1nUbQr=oh(aOuSL8;LX8AoJ7 zWrCp_yAM6e^fma{GChGMzr>V4x;U6)IDzQksVhG{xU$NkZ5+$;^vk^625ro<2UA;* z`np53_Ni8th^^2Lcb*m5A8xIJckY17qF@ot`PX2Z(>-bv?4o>058#LY#j>I>`^zba zo7>b+hMUTWNgFsVaZ0#~DBGYh=x4TKv8ecZJx_bwR^<+p-9C9)v!7*?Dps>WC{k*` zN1p2YzEbeCvV568P@<+Bzkb zc6mrsd6nlJ$&S*tzUhLo-^~k@2-l$5DU$yG<{l z{rLsM_{BG8VP>J+aR<4^1FPlt&vDOHK{lw7m!6ux`i36T4~1n>?@D1x5WUoba7jOl z{p76$1RG7}sxT<^G#VlQTgf`-0oE%~$@(iBkyTBQnN?2gw1dcmM=SWfa}$hr?s z|3jLBjQW2sWC+F=yk#4< zQkiH|cl5Ft?k`>6hb&dUIzo6PNK80=+1ZW;@TFZvR8DIwU9`GG_%6NQhWNgb&}84T zN^A&hyP~f1k#LLfq3#Jo7sHAyhlDAo-G%Yn&NpeJz84(3Qog}rX64Ylabv2XVywL@ zDjZ9z$2?V@m&p%QqwVXWZV-}H(CR9jd00G(5zuYIWfSNv;8x}+luso)Ey z3V2Xog__!pbn7x1S2Y9prDdh^!uY$1Ogh^4WhIT{-G7f|dQN^ED(Cn0eS@iqWQRdL zn)={&B3QzkxqtdUxZPZZ!(Ge=x3lX12e*qIJ|~McW&kL0fROESf!Ie2ptP0%!eBz2 zxr*M;6+VsBEQ~31??>=mRO?fRK*!V>_wUviZh1+gNp$>{%Lj2sq#St0nd)`toK_pL zaHonL4Pib&h5}2SOn>|d9cSgsGcnTSU&z7EktrW?OThjRSCsNCY%MFl(!x9kSvBqw zI12W1$?vLj^>C|xDf@B-o}px^eIcJ>9Z*UuG9z5j^~tM9L&t^mpc>NO*a&oCyXVSjV)?_?!gTmql&wNxXH8*8SSGhM2HejTu+YzJeyNOHm}oVsv2Dmb zDQczRlbL-*m);{`(hU+r@+*C6*buR_B3|d->|4LU{$}`E$yQcaoSwq@5KHc9fXwBG z{R=J#x1X77`p5@IvV#MXQ5Yq!`UR`*|6=Veqw3t6Enxydg1bv_cXxMpmyJ6?f?JS{ zySuvvhY)PzZb5^)1b6*7Ip^Lxdfa~V^?kd4J!9{mwQALxRW)nY<3Q@`m+lIs{-JI1 zst@fwM++V#=JO%w0?zw*Ik08$}GArZFIVJ;Ag%?@bd!+CuDACg(k*U{?(4X=FeP--6JI zlT*BN!q55U5-hL`s&9iIk3MP&5nTjrG_{}@P`Qlo-Ym0(!ra>xsW*rYY9vn(T%k3A z&zyr71TN^570BW}x@EUVwTrHL)9`LS3~Om?c3|AtAK>lxe95pxK&44)`$}JvWiJR& zeU3W~&R?#g$QSSNRLsXilnDy1xwNe${SlYbyo4Z%7CNXUVn4w~o~Nd%!?797_$%#9 zRN|ozIt-8;bVF=F-cmx*^o36;Y;x3)Q%g}GU}R}t*s@KgIoj04 zEFH1k~q#>8GT?W@zHL7;W`(r z`)0d0T$l4lT&MW|6OsPgasCDB{_{_=-!=OG{P}mRDvFnv1^uO#RMq&Exv9}t!|pjZ zM5hmCRZR>fNCxHWW*(OGW&o|73P;#}jmr6Q;9I03A5YG&a{v1McyxU9a=ez8D97Ox zY>tUY^1TmkKGXw>2^F`&iVNTThoWu!Pc)*BOWT@XS{?LtFbtY;_p-Om0J5?Md%OYn z&!jXj9W1>8&KrB0I2TJ*# z59Gg<_e$dC>7$J+@6CGl!4-jSgRB$oWo^azaRZf|^cmc2l24rtLGU2YTT-jHF{js% zlG_s)Rx%z$GD_Xo%_}q&!N}Ff4&+OjRkC{& zQzmf^`Bk>MRPpwMv3I|DrcNaA(J^nn;P6&}_}3Loq5msi`1|l1weB_X=5fA5ppp*y zgUs=4nH=$TVbB{Lt>5y>fO8cTcn)N}t>P0YPvARd(ijO23cCb0d6}#t*`LMZo5iy6 z#qv5Olo)$#du+dIo(nuZ*DM=8_M#4OXRhC*AUn?AsITQC4!BWkT3X4KVs-+9=+TFPJ#Znr3;L815gS)uR(i zM#mc0Xb0d)(WCvkF9y7>cnH#(oT*QymxyesTAshHdT?B;6{B^9uvA)C)Y6`@@&`&_ z$m2F`_(DRsP2}Y&>*TOtjvb4Pnr2Flfa;~q=|ZLWYzpx~k-aiFVbP-~RPobeX@fx~ zc)M~9oO56p^eiz|u-P!tKffDJX`QO^7ue3%67ZtWTF4Lz-jjc#b;7NZgyvB{p035y zhrOvp@Nt^M^mH0zAz+~@Wsgb>fY2R{qnjl};CC1LQchWIihv_jrxUJuE@q-m7hO`> z>)qfMG5d~BYP_Kq3!akn*T#Hgt3)Z95q4z|y#eiG*HYTX@1w(e-oX)YKR?3o}gE893!&;E*m zM08Lgu!O14`s>*MeFUgDV0_)hZ09?3@!7Ik7=8R=kcn2Y+-3tXLZv5b2bHjKRGGN| zOTBW_3Slitp`p0`JTVSC1vy`ib1i|^sr{WJnHm{8jNWdYR>^i`-(V(1%fX?ijzY!{ zBco`qz0abB@n}|YObmD*AVC>6HWlD1aXQZEJEZnqd~yhw)3Y4&WwVos*~75&od67u zz%ukd2oepU|Pu_2AHxHr)+CF=yaksG^0vfJYz~g{7uGt!TB+C5bp+ zQ<1I8V&zQrI9WDL^AzU|3P&TV5BQ7Cfbxp8kctp@VF4jB66Szh3*cwx1)lmRN9l#+ z@EjUTLwz&{YEB~@MjLm?8m9^qWd*IoY^tQ4AT}n5yVij3W{CO<+HLj8p%vzXGETcq zC?NF0P&hA@lUhCg3rypEYLl=m+KeN+2&d(8x>ilEy`IE4=KZPMw<+Y4V#Dqe7W6C# zl-mY=(oAjIp|Y@VPPY+u?W0P{U^o~KH2Vx?A&-HzzigLKhVtVA@NVfMZo9m4%0^h5 zTir_yWUv%|NZdZrUY~A#bt`i(yW6ga+@ytVnqpW>Z*{tOu8XC_=V$hlQ2chNc}~cA zt-_6y^?6Je6HQ}IAygH3?4tG!T7YhkdO=-1|DKljo`zxIvz30flQ*?DlqK^FdXo)f zX-y~1{wqnda(~MMR5-MI^^Y@Av5f>x{f@@7EJG6Smw@lk$|Hh82-nv&LifGw&*V7> zCk+s6@E0lbjtM^88_L&s zYbW}Q%=%WE!mqSuW&Q+7GY?mszkjm-Xkl0F)KhJ%P-PJatLB?BOa$A^_cdV4Z=eic z0`W)O?3%&+hHhWmiaZEidqPzS>rVeO;flMb>Wy<>deHZDHdz%QCxs2jHDBecRBk)j0T!YNGhgj6qt&2`s!&AJHUT3J)H9Jn?f@X>4OTy^sD zlDny{8k+p-1fL<;d2&sxs}E6ijuk?{!LkzMX3=GMd?&a!%W=Hf6CXjl-^5-`yJG*$ zBBzv$8PTA_Y)f?wT4cOD12b#_0wByo)3 zy@xt51hyA9uCu39V#>hDGhli!%qXQ34qdv)5Z2AEdE1DN6V;5|^Js$Pj|=hJTCLnO zSJ)Oix%Yk{a2x8RT-rHxh>kCBdpBn$-eSdf9{n z!l1~zC5<~%&D_Fml5tq+qMo(w(Bzg11#<<<56sR91ZJN%U=A43kKMTt~9-6|pJh5{l1?irI_ z?N&KiQhnb{KcH=;8ijJYe=7RK;w30K)T~=2f=?}XD3vj26b@L7lOJhK_QlV?_b^%^ zE_45EMjM~KT1{Y!|6@2~N5`XCO@Kjz=7)-7r;bT#r+CQ{$yxf-bann)K8sjLgY6!P zLr_nVy-p1h>m(UE%@)jCh1hWFGrB!5b?|s4&hKR8$!4zP?~Mxfx~=u!<1t8e52FLQ z6CncCYU=WlS!y9pPR`cF+8UT0zjb8i{>+OO2R;RoRpAa259cNo$|^)_gxWQ)R5~|0 z%zs<8?r2zvJ+1EQDfvmv?s)%m!{Q62xa@#UISKlXv`vNQcM!6!+tbJm=Z&c@xA)A^ z?)X(g;%RYi_8MwHMJ>x}4?a5}XcZTv){J0^yRQNr(?Pn}eU+X(h3ZT&y0$HaOeiHn`GLAHj3!XC zA%E(H#`x-~Mr}T+MXS-x3R1WgpeBI6mdH4smmG66MsKg54;6Vh&0Sbio7-GRZaF z@!yJ6r>_RDp?)zN#Frueg(6zs;`qxb2p~9V$2dt78i_Kznm%~yx!LV`T@8B@sc{jf zTc)o50L(b?Jf*-w{E2NInWt50J#(cqG$gCC)6s%@p-_Uq6~%fCAKHBMaiI3Wxgabt z$?kk*+7bKEU)K(M8si^@1)^CZ4cOpJ3)_ehGP;h7Y8kP9yUW;)yvpon|kLBRT5mZe3jR?cP^4d?x-iL55tP zN}AEncOV|mw}T&^%p{{0e+~Ip5Mp5^a{Q}1k@m+d_TMJ zKbBRb|7pnRqS&Ehpajq&>#`L_e%Az!lcKB_{vQx6OiL(6gPWt3cQ8WJ zN4RNAav3j@I}^XO{ndNsY$t>*uOgMJ3(Ht~hC#1^^Ok2$$k}JbYFh5XT-J5B;q(}3 z&6>Hgt}u$)^CQ~=N0{02GV{u!Np|jm>&xG6HB&oN%LTU|i%^YmXl-rW#~&bNBb?t! zGBQu74Lkq7x3IQ$EMMLZx%L0`A^$Uy{HC#M^OtT$vv&O$#}Z>jmH6az$W@?yUQC<_ zJrwCOjKupKQ&*nC1bcHM7F}GwBmqeDr+3fFMQ)ss#5djWqtEFeehc%Hv0pWUV9~WW z0K_C@VS*SXa=Pojq)=9X=lMWGO(CV)nq|Q=bKdmAJ*si`nZ}YZT~%DG^YEPmgQDbH z$;Q#mbUV0S!Vk+pH(`JF1LxAqS=hU6?n2c+XKMfxdk^Vd>*zmT6j2kFF$)!mm~mI*O%I1p%p~M?Dyd(TESB zpm9HI`IjA8=PVDqP1koBv78^2=XVv#lNmxeh&n*R=hSq^S#fCu)-$}SFFn~IT9o*s zH~2xG%h)?IY1UF&KI_hBu%8LxdeE}txL5gbGwB_#;`uR>R+#rGp@Ynte$*|zjd=a= z+Q$S}TafHT@m*OaD!4I$ea)W8Nk+GE?-%HDZo+HVY{7K80cTHEspkFb8i%K=Ir+Yw zaQ*-56aHtg^*>Kox_-#jWJae^NATe~wrQHa!2v}$T*R!(s7Q%O$DC7?1;7eXUvK=R z{_qj<@Ah#*GHex+Il%m6pw)R|v9;6J@AZQbmJNbj9%?Qw0GGW-!5rvl?xLYX+sIpQ z#uL6niA5CUGS@6oG0{U^fR>~KkUa7VNwMYeBkO>hpsG&mUXYB}7FQR2&uY+n!%h>SPzs%n5&XOrg~(rhfsT2KuGROCtyJOB z4sIE>7n~Ndzh;#ToV?=pDA2~WdhESaHt+_54m%EHdTjF>_~=5)8cxO2oeLQls?9IY z1Y0RMwTp{}v!>6#gy<`sAoq}}F3EMMbWBZmF4{d>7`+KDCTEBotl}L!6yvR<0K8c8 zP_m8EigqPjKEQF#dY=iB@J#9~eMQwqE*@Y6nq`mhz+C2Pj7(6(9HH0X(0#f>)U7yv zlxk_cMriPeUZ?d6`qn;w_g=xHGo+8!8v`Te^~>(i+>G<6Zz~Whvs3Wo5=_=x;~Y8W zYtP)18RIKEcUyS>Z#GPk*UDk#n?H#Du^=V;2Wu_Bad~rp0c(VH&EhoZMWx0ROad|}G!dMpk$HQi_0!4l z?>D>ezsH5!|Mg1qmZ^Uf1&vv5(cy;`+O~Ev@-au;`r{rFboWi#@R*iLp zSOGyFmK#Nn;A8Z13v>w)`&xYR3Tobqvd79~QaDnLdf=K<-MSc)IFhMaT%VSYz3beA zr(F@_#);@?h<93+u}YbuGkd`fQ0)@DCk$?*B~-nC@T;L+J$K<@>E}!`DGD082)?cz zoyB zt4|#W=p)e&V3JfJ)z7zQhfV5ut02D3#cmq5NxdB)_a84b-~apoe^-?ML+~g|?dbQs zI%073Us@6;PE#~?!Wxk0J>sO@?*md7p#0KTeihQu)sMMgmBp+tr-D(uoW1j=+Dfx; z2}(p?F?BPa*vW9{;CA+Xy}yU+;#)181O|O^MI(?x#avnMa)LOJkokb)s}ZN#+^cMf zaWuW6{^hD;DGzIqenPpa+=5fkN$BPS@n_3N?E$2pK0Rj|xioVIq?+O^SBOE^8sCzy ztefQuV<}t?;SFd^-Fws$GN-FiT|MX#wPiqJDPQc-_y>_$yl(RB?wcyLh%)&%SR|Yl z6AW5pq_!`3t*-JXggV1`u|L8ah=xs`EOjU@j5eCaI-qWdWfOT$FHMT{ilrVP0}+0= z$pHC~3=x_r09z9H9R|h%WfP==Xp^3%kg(M%sK# zXOq2G7|avXDufBDH04033vYq3R=Rpj0{V;Y2J>M-Xyalc;`r$ocJv_r>9~5=&dTg;_ zj8i@YzNPlcJvLl4?UZVwS$Drv@fN&91U^c-rwIh+bJQA`@9c)5hup#w=SM*fRdA=k z&u&!@ob-ADt;9u2HXZsEA2eKpnQk2($z9l7N0m|{AQHSU<&m8%M@(I6-nnl}blFjL zJ0QX0GlS}_R^l3pn4H0BMzg!9o`m+?I8e;*GqzD?LnQeeM1ilncX*V09;S?KumhQ1 z@LTB3g8GHUiwL;>(t)*iomszP?tPa0r@$Zy*@fIP`P{?5m9+R_0MPZ>`sw!Y&@s;{ zzchwoX>BgTcwv5xRNwc-66EgqUXxJvn*-jycKU_2AM?jJ282Jbg7Hv2 zt7XYS8A0A1Z8HV4<|+J?Ffv=t)W;IjA~aF_QfR>D?=FQRt#rqWko1`ni<)^_JLp3m zC>+f&qW9+<3%k-oBEV0J*C}@Mn)Zc_N*fUiVa&%%=}uS;HQRWUi5=y`ZLU{K3qBA` zt_;BjS9ob&A2@Z)Y*EuMyxq!XH;kZXv~)28F>i{#5<&ZxEf$AXYGK%;hhuA$-)mE9 zk!0F38qN4r{)kZ3;*uJq=c&P8cAjn5-}tE`Ntjw| z5%O0*6F|ovB2tQ7WtGP8>w-p;F*C!0>H3GS7sj*-bKe`$B^*b4&e{4u1;j3fdj zugtPmHP(EXzxZK?(5O`3rE>HmT%P_5|JI<8trabfW6AWONoK6lG->AHC)R5z&pb6( zvv1n1k_u=HFN!h9Z6m&cHVc|bGJKKAM^P%e z$-(lP-?}=}5Ef>E=iO<=kD2hPRV@XHME&s)J#m<7AxOtsFAyjUcL=~kjp&0y+YrQ$ zg$6i62Sc$@deENEx_j_HF7Jla8dY{<%sNp#NV-)+unTu3moRP%0iG?FS#s&)8#B>* z879D5o2|`hjG~}uH*up44#344Pgf5*;3}q*!or&U-jC`Gj9n3HFjC2Ya)BrMeWXUk zC(li^{lK^=*7kG{xWgUo3}MuS+C`3cjNC2D?=j~9KEkInVLg;rRVM2MEJ$!fj+P&r zqvIT&K40*QzI)~i0&*?*pX?baVLr13(Csiufd;3j#&Mzc%eAp(Ht_L6xUTrnzMbKt zuahu*(Cf$0^8wnl>qeR-8c)D`8SFJ5ctCJ&?Y|%S-lq|7VRhLGVjJck%K7WL$-g|f zg@3~e%20o*Mg57S_Al_l@8?F?#l=a(!S*fXxBX}1%UIHcD!w@SKqtbtN?t@{kx=`O zMv3ni-UG3taO1HTr1Y$nX@lr#37b4Ecqh4*3;0$iiFW!Tip+*-nNd`^OD$fJ zU*SjQ$9kYxLbQ@p7+3gL99AE%nhiT&wrZd|!MQ@nq4oF2iML212!Wz_?S0?X1F)?3_h89$5#VaUTLW?ej%}aPKSW-amMe|H-k}=)Mp0hqfmoV+*ht9x@s)#d} zSTc|AG5R??NP%%7$XxX99C0b)?Sve1dVLw&fJw13cDqy^AI|6*7DTg;CT&Uu)LvyL zRS6Z@ZW>rLJE#ch0MZX)oGV`aOzjn)8|kmvQQS@@9Te$!Un&yt#(QhrIpfijC(i-=DDm9IcX$}0mJ zdy_K;Pd~920oY|OgZ7ZU=E1@d9&QPH|B2FPe8i62J42OsFX6kL{T{N@pUEOLE6G6> z+fR+RT_k#4nO)*~Jv$lhS;*B!9Z^c;8Fbf_^gRF(t{m=5UImPjX69BioNh4f=4;p;TD_lgO4>V zZa(%AJlr!7^zx&hu}Yj7r5KY1Z$|l`>uWWPS8vE464V_Rgw#bot^IZ139%;m|Jt~t z|3|j`pGI!}bl?AX$w8Hdtiu~E^~L_V<=iwrnQy6hViKzb{;PTvw)6)G2FUE=BiRq z48yql@Y8vhch7t8r}JJyr(heDkst%DRv?(9k~j4^ut-9&H?!-E=~9 zo|%{3NI`CbIy{R9z_UlDu<%r+VQ7Ko7fI=WPV{G*6Hy4z&9@edb+||PBaOP;+z(^; zN9wj+62ONYYtL?$-L@<}-}LgyQ?4cuazwF8QXVdri-`m#NIufChy4L-$CRD}z&e15 zq5Cxoa9ci2Y97o>CI=K^<6t1xQU4i3fR4}JTe;zG^%!bpW7t zK>9d5snrLZbOO#>?3HQvv#~ndojjoTPW4Y!=Rt05as-)RnaH1FW*fzZux{TV{RL-w4wd#oR*C4pRUI zPQe~4PoQWpwDQbh@P!BB>(j)?Ux(w%*adk8VU@0)}oCq*paot8>VivkF`m7^)u3qM8Xm8GKu@|1jV5ScdJ zE0YQ-C#bfz*c=z>?Z<#OiZzkyV^W|aHMZi@YN8y+d|HZej8qC9mMCMvk=>@@3Tp^2 zVUnm+nqzZdQ`KXu3j`inb05YOTON=13`u2cIO+gVsPB(CP`ER)nqK67Kqg#z? zvdGtL-byv_J0+~Zgt;esecFv-sfL2r633m1c6B5wV4Jey%mjipt1mu2PQHyc(UNl! zn688jmq`ys!;~EguWttfC>hobmm1agBoN4HWicc=Wgm_j6c$)nfIvriq?Pt{p3`0*7So=ZVRmuRcDe2oYh(LpE5-6ta(+fGJyR-s!e z(nTjp@n}<^iQ9z9HDpw*q}#ieIVUfC-I2p|S(MVkp+s@B*>T=BN3p>}`|8zRFEiTM zCTkyAEaq$39|}klmKUi^m9NdThVt6U8+TN|k#khgsu!=Z%VOlreCShf*Y+(8e-5z~ zC3q~`rMvDUw9%<_|2Z8$#@drA%TuIlHt79ZG7O&Y5p z!+3%`GR>isp(IwT-u#{Abw|R4^c#}&4cn7mf^p3V`Z&NP$uEge64t}TwqIyRQKRj- z%muN#N#_JbL2T&^yC;)ZD-cjYJTt$vD!HQc*tpJH`YX36wBKV6!?yE=1NGMzAENx= z4f*4XS9=R8<307>wg7t5)Kb4^dMW~h$8dM|7aGKN;$Ts6{A?r_;8OU0v~0!8xRP@y z@}@YxAC~U79s>Fe5{V*htQ1@Zc6x6C-{1>A@$=<3CC>-&V2iEz&g4|=JYJZ)aIUBH zj{Xi|(vCh)?-2ew!mPV53?)R4=z;)bLDDEgm>tcYR^g#nVX4jyK3~cPJomJ1%};1G zn~FJO5bMp8gHtYWkKCJwb`OIvj4HAwtzjH#g}2*|`FD)vjP#t;RMIyTImcb#i+B~h$+#dDZiwLDR5y!;wdx?-$24<`kgX~ zOL|i&m6b4>dK2ld3J?`*?Sos=TIrBxNSCeFP@|!=6`GEnMM3mAq{-`nHB_PtS{wD#}_=`t|@sf=)nhXDxb(Q4U=y)AHR@hy7=_6-j*PCD= z>id>{>9dbfwYF9gX*k?(JhG;P_!FD9ZwJ|JMU4z2+!p1$X1#bUcG@Z5A1?70tM7yJ zmUZeLo+4g_e1-PHIG(8`Lb_-vFA#KSsrHX=%wjGug2lH})KFB-PN?7AA{defcf=S2 zk6IIYhLM9dX_QShKkE)x{98^1j^ zkC#=)Qe0phx(te^-tZW2$SP^$D_|3mYr4gMo5+Y$h_c28wRClKx%AZ8PMm3cu{gVF za0pIwIH5L9PIcxVkn$21D3dxjgIa?veowek?DwUV4t|f#8+Gr#uKy7T{Xl7fHni>T zXYAxHvcB;-mzR8G1Y=Z2fbznF*Ur5OblU)d#l{z9@%{wvM181NbD6V`&VU!F8~EJ8 z`;N|SV{tc8+Xt>5zKbSZn%Adq{n9{u8X0?mBEC^w+H?k&1$B`$tYdatEMNh3F;2|T z$;g#;j;7AL&3D??^&nno?K|0;h984X3&}G#8z1uzx0mNkYM9wa8T1A4l9RsnfW7yg zP1GJVktBMH5n9@cO_a@)gelkebk)Q8ckMz0`iXHLDRIC0W1)M?fJ)BO5agK}*F7nw zO6z5>EFE&0EC#X*IbwL^3%aIXrhx*esfV;X7nRh2_D~9p91H$!6Nj>-`VC(ZthZG9XmL9NYU&=mTt8944QilV_!6usoyjAt^)zeZjrYseN@DHM zIGiUp;-AO)i1*#TcfGnPcTcMM&c4@Fm(gk(i}4bI>l;K=kFUFXiPoKQg_qQ|MTGpp zx$(61>j%=kbQ>QghN>4e(8Q-KfVQUolPA5=tdbsU&#fLqk2^vEtgrBbHU7xvEiFQ4 zzXSGKyPau32cgTxm};u&OBQhc+$-6+S&eQfdhY>Y@j9de2hwlhC4rl;AA!63+3GQ$ zvPUa1zqyIglO-}k#U;&TSi_PW^=o4{+pL2H%+NSlAg2b+Xxez;hN7B0^@Nlm4tsdg zXQ|+9m)^L0JywRH?pA^r0TgJyT6y1I&rik}_z7-nY(wi-O}4a!J^(y_;a%XLE|VPQij4#gbD?9H;rn0_ zG)n|M-7cm(f+^=TSaKHWsbt$j^ogKU@7_Is;JKji4_j>v+0WNf@*&OY1XTVkLCI2Ac;fFp|T6#kb^$YqpSwP z9ZgO`vB+dE%X{=zg|jE-HBVBJLxZJg88-VZ#J-~QBfe5f_WXw}v)*eloM#jL2TCbV z(YROvJ&8Kjr6R#H#r*`?)Q+e$XD9wV!3smYo}Y&g+AFhrDX|sVd!KC}`!3@@=YuGE#?<%Zfvf4`pBC`i9UCz3T6XuS z^9ku8Z-+cNm(G4%%&DU>IqZn5uZo_#V)IwymBM`)jM(XV$_TRC*|HfGZA-W8izChq zt=9H@P6~5#K*p1&2~I1`!{gH@$cxTsGnzi$qM}`++9y#xjR$P)SGWj?I zvMll}%CUHzLda>7fKEJ&Hmy8Phzr5LGUPGmdL@E4c9sv)pPt{p)*k<>y|mWOPRtw} zW{m%}_*e?yZ27icgiORr;^q+?7pu0`o3%F?UD@nL>}%&0ZU#vr=ni7 z#K0+6O`D9vpDjn0@oatjvz`C^f=^*j)md;CW@KO-wOjYvw0SqHHm647h8 zazbQ!C^Fr2(q__+_(?p98LF@X<#?{09aqm8mtJ~0D}bBbK#w?}G4_(pZGIeg!eACt zm5+(>@R-6IEz}Ng}f3!Y$o{?DkEHAs?RW_J zyIGwjVPARnX1LBjBAY+K&wp*&|1zx7Z^Qb`EER^SdtJbVH(;fZ+!#eD!S)3dh3qmc zo0TCrqPf-^`&B{zH4H-uODM-UZf3rkaci_Xu(v_bh0sQf8>E}m36q4kQ}v_RyUw>B z>!Aw0tR6Ha6|u;8`*Gz`1@n6=C$R#|idu(EoOC@#g?zcXwB=C#;7w4)%a)-NU#V!2 z<@aS=ZO@7izkFE;km7?jhD<#*1r?)>ZU^+XKA%)gU+VWar8FW{(|*XSXOdXfrpTIM z=;a37oif45N0WX$^Dhq#v?5;T->&+?u_dS)boVVMAH*+F#0?Th_W3Eh@4wpitT>zRjqQqlG&3J*!TD zHu5IYC9!3mAHz`pR~u*x)w8-Z1*VjqS-Y0O+wXLbi=9dNDK7{2g|9!KD!xo7LM0Z~ z#fn@6ax`=xNaPjAe(s$>`*m~w;5jcy@d~J7v6l~T>O;`tNgbWOi}RhZ%*#o43w>uY zSPhb2rVeK)Xv}@-Q3d=ES&c#;o5N9ANUscGA~)3vki9Y>(H3UyDL+pBZf+obWwYlh zCkqW3^Q}P79?Wyc<3N7mnr_>XIo)}*Mq~&pH*8)kSht#L2rIu|AMU6ZLgiZ5{k++a zU6%V7hD1f$jih>FXnrkOfnK#c7lX!!^$XzvSW^@U(Gy#wu0 z%eXT4=-aC9cwOfAPTx69`t&&KWuCbEJpnFP!SVHgTX`EsALKD`>*Z)0C2T~A@2H1AZ1u)8!VZb4V+l( zc?CP}U0wa2o*oc{ATi*$x8<=p?2SSJ4O=;P2Kyt)w@p(U!lO(L#D$@pI2ZP<_W51w z`(mDwBG9YQWzV7p{(VgN&G&uN0a5v3D0qkx)NO`NyjP7Bv6wN2mmjY%98O>fIdGC! ztOYAEX^C}@c4&3OiGZ_FDZw?mRDjXmmZ;@aqtqu^d{N~~cUqX1xqK8SDA2Q3b;+VC z$H_W_W4;FVZcV=7*$cw6(?}1Sx!lj@bFg}N#(@1nI1(H(8AlvH73rZHn`gf4Qn|BJE z{6&oYCrMZAw(fb;oH4PPE^P8dd3Z;-`34SDY^mQ1qoX5X)|lyIX2ja}oD|O*UQQzI zONQYE6Iv@~jf{FZtTLT?bv}YmN{&cIF`?h{qP3zH&8aME>Q^_*`RXL&`Uql6aXd^> z{A?fd`0Bae+e6WM;V5lc^b}YhS%IKisY*?kHy%NdlX8r&@p)c?U;_PrhH&~KX^LDMJk}7Xn=!tik}1@D2z~g%%%vS;Ns0KE4ip(3v&j*5Uke zDeKVjdW{Em0>Uzz{m{Z_GhSF%97nH{Y`+kr-FM!a=sTw%k5%b4W5xf2)z4LmR_@xS zp7h%@GV#zEP3#8RBv)0|oQlU-svJVJ;*qwlKW74~lWQ}WBAtK=k{~z>IwX9#|G2vQ z&n4$lKeCb>;y~7=N`HNy3a04;=r8J%LAhXGV|hz>?>z5sbRda;k_wGuAdZeMIgbxH z`qmi;r%F5B){9K5v zM3}%QW$=>#1G)jYDp_I98zujQwv~i=*lou#RBej{v0FfABq1cx&NRZv_y_KJP78DS zKx<=n`{X(NJwy&;ft!RA`Jthm!VF@D0{$YXHm-c4FejRk84n^yQHv$eI`LaIVwU%Sobh3 zz;KOO`VZXmj4_qYhO?A%1Bd%1=NIOjBmmlJYkkg{%jxUn393wEHTm=T5iaRY%7Td* zY;4~wr`m1U>4{mrTb$hs>oX3OIL2_kcM83O)C7|H$8j*e^Aa1u8d^D7DA!TSoTj{p zR1Le?f%nPfVy)H%ExBjA-c%3odc*&0N-1y8aT|oDqOEvGWi)ZfhNX;Cz39*KA;f&y zrAD1fqkx3oIn$k^Pa_NgE88ANmIsA%3luO;r^PyWoronuLqjliE3c-e`x3EQEJm>gu%A5R z=hDVq_b3#udKQh8z74-c=CG49EVYnjL_d#TE{EN4Ox_0r4kjyhCP z>X)VgPWNy#4RaH3Qzk@de3id)p?Py{S$#+%H>f?2bXqExI%&TB%W ziv841KO)M|lkiwwOfoQ|25`iwn{yKF4PhLzFD)C!A~3sw;8jCPz0S>t9Z$me5#z&2 zdy5t+YWpq8VIc1}Sr{>rO|;DgEjO*m_5dWePyjPoR?2&O<7WRnm7Q`E5EiEF*`;WF z+cDT4F#%bvQBC(iN3g_=9b5hB$DWP|`eUz!aRW)bM}g^M1k(ki+MMrU0ym=gW`aGS z;{j|F!ESUfxV;5M$7owS;b%Lx2n?2kqzx=coREVVs0Jw0)*-*xIYiE!N(uv}&0tY2C396Zv&cDVIJ7WAA_YCWJV?(yEyl>RmO?ac5e?@?A z+(|04)<^ZoulxWlS1-7U{)jeSC%8p@gT)83-}JcAZ0~&mrYx>G20w%HyeQEXZtWg~ z`GiI__BkFxUDGwvYE(MI?tSF*{6RjA206L-@Z)QRCJkG8jtP_??qdgM9QdXN?)QmP zg2~kC_Dy=}NDPDDARZ|X7dok0ZYPIdeu1edxk0nIc}4U%Y}T|NZQD6@^A7Jp}*K#|rI6kcAV_JJO^SevpwoJr^&S;^4 zfDr@#?N+t&c3OtoZ*k3V>R$?3g48hZW}$j#CCFwe8Y*n?yKIE5G-2Lk`;kL+k?rGL z*}p5IW=@QP(p)zhJlePxA$~E$OVzD>aUw|g>|X7ZprLwIpI@QoVF3b9Hn;Xrn$J_v zkC9-H)M&(6p2h5`a}@9AWW0D?e4Tg=M!Hcv4Q~s6av*Y`wap%#KRDh-!iH$#6M+KO8+JZ5OetaMh6%1`1`Bo@b~v`Ou&2X zFfRZF1!V$d;0i?{0adg8r1!l2)V@8PpFi6kf0sX9DDylUj{01=Ng~QxujXUXk|}BI z2y`$OP7My1^|ew_C|4y9LL3U2Jcg%>ga_9SGYfm*4)Zv8c#+mF8zPT{uMC5PYH$DQx;LM0;888sq8HDVE`1qUZ`=o1}j zAhzpX9Wx6P3lpn980q9jCA_T=CK?29>bBAP`)NJ+kL-Hze72dtaVj3PVqgE8g*g8R zr2fR4`In`ZH|+m^V!M+6x$Uf_1cJ;hi~y#{gEDlovlG&zvh%l!!!q&=08=A*I;z1k zQ&XdAjCjwxJI|_olKE zF*Z&%1Mf4FZPEpQg+)seL-k;G_dCCVe!}Z_H>ZA+AO%c?xSCIl-e#RX_RZEXyIf z(djHD*Ru2&pGl~g4-=YTBlhbn1@k7TD3z&gnWQ?2JC%p*d&BtCQf*O5LV^nMI#R84 zdFz{M*?8rdX(-<9_9BXY_SRpXRug5_{1Gy8B+?9mEyvbT9IFQsYp|07Y??ytj*Mp% zisS`plu1o0&8T39Qz595WRAFT3*`pHRam!0NCz<3;^cJ~r{(mSW}$fDxa|R!&ZFAA zW~FckVj6}KIL3i*%Qk*S;zDZTkl3>bzbdd4&e`A-v?#o@wakDItRDU)iDy47_8x~2 zaspbtYx7185_xl9gi}=7d`4;!o>^uqI7U>9<@QtQz8O`rnMtW&b&M(uIDv4f*fac= zy&gs3=GLVqzI@Fjb!ljc+}GF@EzG(6CfnG)6sfB8^sGipfsMmMG0eT5h@mrVvr+27 zV0**pV{e3*{gHizeMOiARl!%rVMkQ|04C8L?Rgh=xcS}p1IVAtNNXf|FGyK9odhmS z-z_irja-O>LZ8@GSu|h7cx(=gdC1`wl>DnDS(whWXV5ifCs}afl#$J_KjlR!xEoYZ z^Ip=W5DF^5nqynTN@q+N{$tzrO&NWYo7t!hR@~_B@dM9@hbFIVVyesUxcI zWu$1;|7m%#56m}IINghB+sK<+&PzaoyKhhf`UR8xNgvTIL}Nc{c!NTjOnVC16Y7;1 z{PF*z?VZ9a;nu9tiftzq+qNpUZ5tI=RIzQ_wr$%sE4Gu9s=fQ{-u-uf|I^=d&dppm z>t>BL=R3!XF=mnGiojhr51>Rgx8{l?T}*MBlaHrY4{wf-XAj*nxJGntdnm=zw|&z^ zQA{fl-suJE{>?0wTfoG9KQ5-&zy+XV8=k(5Tx(n_iFK{p^^QQSLfDfapjXC{Cp2?e zo#~OzY+uhGUlV=a1ap0&(;h_ki9ndevqdk)nMSh2hs+MolV95l$|+JHE!!QfDf?~u zcmr%r(z5&j@Z}G>kDT1tW+5ltn6Q$Y6;ezYl1)=_dFC+js+R?;slNqKo4Ja3U}If9oQm z?khK2aiFKvZz(%=O%KT23FJ|dQ)D)eE%BKWZEy3ME1f$Lm#>slQ;i>p&4D5!7_+G@nSr>M7EX+FE=dPS+b_c&(2ux zZ@R&mojM@QEZ9V>D3HTMS;C%cO~>@;YC^3eHLdd5cTt{?!>I5HQ%7(_l-?rhb!JCV zBR^ECl})ghQZqrPC?#UWoFeNX+-7H@hfb&l1IY5haCILHtuM}GoG19~!YdMkkRVeR zwoC^&ArulhWW{Emn<7V-bR;U&Q3>Q~r3h(@Gy>CV> zx+1|ahg~>Qy*wg^m~HBlmD)=dSDzGS4$po%)`Bg8vFI z&UCiToNXcYQdV+Uy4c5?gJ{z>H^e%~dJ?I=h06RAO zVg!)RG-$w+hk>>n>ir$>00G7whMrx$I-DZF&>igUeNt|=G5C3}sLHp(Slz53z8Txu zXS~Ns^wtxp+$E?78+@Ww88V~J|2w58pxQgK)iw9y-V69>re4fJ#Y_wC1h?QeB7Uf; z+b|(zEIy%iDlk?|{15z>kWxvOcQcz2U5LPS|+hHib5b+%-(2 zal2^08w6!ks>g9msGA*kP}-g3*Yy$PeWqjAR*hS&Km4}W33?$y@~}$Kn}wqRm*2ho z>2a#I#_!I)L7(S5Q$d|<9mCMCvrE`O7a$wlQtuKYW6 z;475a6Q%3krs%{bLexhU-CWm`pEwfz%zF|)BzTOVn21=t#jAa|C2cWFvv zcUorLkv({HsVR@HdH&h>`VwCPDuq-T;4y_v-(OJi3`{o6G5o zc_45CK@s|XQ`T3@@sQTnZt3upS2nkUAOy0|=i`$mCiD#oD1d7zVg3U;jzW+k(xV ze;1J5{(s?@V%DDzqQYO1Z(@L!pvVb z++3|67GZcOs@^LYcJ|e_J-8o*xE!B)ph6wwS|jTe)r`Q?ZugIrKTh6zH`7PMuJ35W$puKPaJDe;|vLsN|Saa@UU2 z?;NJH4?R4^S;DottrUe~jJDVn{8@O zm@yEECcvdWDzXSffI7K=u8h=}yb%duRoO7tR9adlRCLGr!dqU`v&hoeM3}LlhIlN8 z4nvcEe5#DCSCVf2ixN{@e1Li$7F=(8fM|(F&;$@}6IS_Gt4qc;Ge25#rvxfJ3T1Bw z2P}s)0_gN&7$b?`qmXJ;m$+5<5){W=U%ets?HR}Ff+I7D>b{)@3Kr^eUFYctnq)mz z0R>s(Q-RQ1mxx@I6eC zT6^TNnEL<@Vhf>P31jNjD2BVp28}fJY*1Mp$Mr>{hA=8axInPlF6)@&^lS;orWB+s zr^)vBVT}atk^Gff5In^h`|QXwk&K0hkCCtP>X`+q#YxI9Smp$)B^gqNg?H!pp(7`k z0$G-aYm|;Oih1V>{i@eVCq149?~C)g;oIpR4a?6WOxwDc^YJG(tM}H1%W4Yyc0SHP zCsP9QB38%lsFjxuE(@TD6;K|S)iO2|z)6YHylF84=#X0EsX}tF?4cE4nsVREF^W4p z2O=v6*ehlePqH@A`I*MGZVU0HFLvuNsV-!hxH`b@la--WMhnrqGIue{v6ILQxLAzy zPCNty!xK4R>T~Jx(#OwtT+h;vDgGn95i`c7&B&8Ln9o&P7-r zWr|udF|(0gV3H?P<3 zQLdz+@>`E2O#@BTYa{acMu~1J6mdQ>B!tSWG7W^Hw<=jktf61G9wI4{I=PfS< zF9|;^N9bt91G>18qvAF_vX*9xz1T_q5d}tvC`MsYk~rDA$M13zXM_8e`gUY3=rTnk zhtQ6*B^4>P(6Jq=Fy9b7a{%s4;kOXB{fFo@pwdzHms|8v(VHU;sVnK~24MFH+4F{< zwN0sAvhv2j;fRAx`5Aq0WG5KH76n&)mFpl((Wbqn1FA9U(A)O(MoKaWuc5I!#9Q92 zaEc@ZSzSfV1lY&E%IUL~B!B+!&o|Rma#JJ<^oNWGF0&FB#d&+j<-Mf16DN%s1B&w& zYu2R4kKi&2;;3+)ZLopb>NW_%f4=*9;Rl=$AI`TGaE}ymfHdte1_5N8NFne%VsP0} zq<46>L>@ho zXY0Y}#|AJU_iYvU3IRGjiiJ+z>b9denXpt~O-J&s0btp7{=n zy;yFV<*>|*pWY7H!#;SY+DP2j#;%|&6~e=G{dkvGz4Lj7w|AHL+9sWp)YERQHgs( zB6E%{S36?G9GRSvRRgLKjZR1of3+uyHGaEleM)v7_epYFv^-9UW@ZJ&5#d@ipXQ8X ze~`HyO`)tf|CQsl=1=rCm2+n3sbJeFv;iP;;)HJAdScYA|Xrg7t@;$^hQ9p(_ywlT|eME z$Xgb!gpNDTYNTsn9OOr}K&cwO0W~v$>SXQbjfKx%(4=hEk84=ouzL7!xxyyi^!3m* zQ|rx+j88L7vQMX**niF8ViUO{c5P%EA%7kzwq8+0VtVn?N8?hu-n;g5cG9?7yzJ<^ zD_3ZHqA(2yGkd+K3|+c}Yr1OjQ6s(bzD0+bK~>MQauAi7B0W=;6l$WGBG{@!|#H3a%`RWMmtLHT0yOzjKKH^*T0b8DM*4mBk&dKtV^~0=9!-Ooc0l zV7ch@)loiAc!lR5%BEn>?b`5}K^XmI1|j}8c&H-|K(Rb`$?sY*)rZ zyG4OG2znSS`u|FIMv1%AgUQ{HYPISZF zT@ZQA=-n+A*I@Xq64|lRdEg zss)ihQN~H=Oqq^}KR76gsLo5^<^r6}qa>ap*H<3DAQZm!(Vckr69OABJII~PfVy|M z0&uNSS$4c3aBVmHTv6xul}r}1_T2G_7tUYe^>?#_&r#?q(&nSPU-3RHYbsE+hFM5o4WcE z$bv^;NZz4PglJz|ZU%n284vhdqcJfrr$zplxZ%2Z$#`gcxw|*X1Y!%#M_eU{lE-MQS8J&`&vzkrUmAy4&hlG(sp^uQZ3E|VkfLVe`3ODLgL|$4#XWXN zbQ8ALz|nk*G8e_lTxu?tcWi%>0MlX3T9`$9Ln*59gMHNkTX))iWjsKB8Tj|~kG+`; z3Jx{nAYi36B_=ES3#&44lVR2BA%=1=o>$t3eE!yq+gW^*9Zp=APai3J>O|wEX$a z*omgxVx@rN2q|!R=id1>mQhf@`QVyPyP64A#_lSV6SicrF2}U||QJ=uMUtgl^ zAz$`WVKE{R1H{7TNM$cr$T;$%Kj8TbAnXc=i8i2JzVd66g5Sy1hy|Sw!Z}F9Q`==m zF|~UZLc9@X7n%7NMZ+`O;Qkzan8NjnB+_2%srK3)LIq9behg+SI`;dD3lC-l6nYFc z^?ld;S>kBaAX+9m$2G+*=qAwYXUf72T=cl8KU_5}5*f_8u%|L)G&vS{j99q4Uy$8k zqCg z!y5|6g+Y=&_k;gjYOKoF!uZU_TU6oAku@uDu*FwWw#@?1_Rc9RFzLQz+7hp;OA=!< zq_U8tn?o0>skE$k;WvlqcS?sgZ+Vg1@4q7lGPefn$Y;ag@-N9e&)>YHq`w>f(?}#= z=}bXU3H>9z*T2=R9h}A*z$d?$I<%%pYzUJUe~2KbTGS_5%ZawC$}RDHV_!%r+%`?` zc}@~nF+?0&1EPPsiG}-u<#)s6b;%(Y!YR)nA`Plm5hJD82!)r$4r?b_=1os!t zt7_wArSz4jJ@dW5~F-W%Uef^5LwA> z9BY^bW)`|KGch6<9jX}cCs-_qauew@6qHJRAYXzb+|y&RqrDVnN@ti(HFOphNjeP>@ zbyAEySLnW6m19+-3fF04Tp(SvWRHq*2Aq1qz^h@!Ag8WpidO+eoj2dsqj$Rnyce@!1fMcy%5GMbxFAU{@%3}{f4Bs$(}*7eyl<%slRz*!oB zI8tl~w~MAHnAW5+&N8aNK)_I7f`l-Y2~lB4L7yaEk}j4nU=^Oc79_JlIlc#*kx=H`rRGw&$pnbgr>DosW7GH@uig%Zwb zNa$LL^@j8nZN_P@tH0Xt9@uy+)5^9eenlak$XypzJc;-fIOZ%WL$qVeA9tG+@?e{` zRTrhYuBfdoJp$b5&hm9gc`7_AtO^pFn+Zq)=OkC1fR7kY+U-s@ZUAqMOn$QJY#ISv z-MH`Qj(22!&Mk)tl}BTpwxCQ#2>1=zVGRe}%|H(}lr@R7IP% zo7rH^@7!^n2ChJj-)IdR#&Dh?E6wPMfGn;v1^skJq&t7ZnV1NXTs)sevmK$9>Qd08 z3J+64Lo-Q7{Adn&OiFs&O=CJqpc#K>@hzD<6{zH#O+PMSPZd7vUpD)0qO?E@6@>+y zS9(xadO+FKZgwiwtwcPD7d7CGY^ctz7CWW?rkSIGuDm%eDNb?So@<_Dulz6nGlN+fc9H!Ha-WhQ73Oe8d znR$8g7`MT@%WCWG8EWy$xwfT%PO`?p_RfcI;F%jRK9fi#5KZ56M5=&!{5>;f8gI8x zC+dTU1~x6nq=IR;FQq1Ooe{iXnq14Du#p8stR)ZfB(Ud#zNu zD{El_b}aoC(MjZ~V)_7vTj27f8rwV2?@(@0Gz6gY=@xMCm%ZP=J2&(X%K(0te|-M? z+)(L&05&9JMEcHy9Nei-5f@Ao zof>=U%SQ7Wm_6&Jj>Q*&TP+80xN29E>KNPX`lzQ;nw*&6$uweNod{u{agTOR>x~TO zdppPHufzlszBLQ7<4OqmJ^eJ#+%uT8jAm7uw?4CgiNb=xBj{+q~)o zUmG9x;K4bIaFz#JY);Qt%6+*V?gU?9g8PJjNE&h&8FztPonbMq^@Z=$)S}B2xDlh@5Zc<*(YNW+r@1 zIU;4fproa9{iue?okU zKhXw1_cjMXT0{Nk-gf)k+a3Sh+dzNz_N>64y)D9K`;WbC))a(%^9g3#U&8%&C+Pm$ zDDtTU{cTG-yQ1}@ydJF^?ntj4Jx^9psE9geYA3tD)KH*EOTUH)tGe@``!~*(P(BN> z_AZPU*_J{7$<0n(2rKoI(^T&+`S}?SJ z&G_D^W2NBdVBCgsZCu>rlgoR~RU8O@##x?^O@5x{K+oa#&MS$;!D}S~%#Y+K>--H$ zu4q@5xeDu1DgjSx7iR@PVUF>IEhy$slS)o_ujSV#zJY&<@84}w{Rh7PiWxFe7QZD* zyCV8I<=T+%U*L{EB}xQVa)M+qs;;ta365%I`0IY_QpKL-f$v`LMKj_2(JKmv44+S7 zvyQ#Ix_*42`!*=zPlvD!g_Qg|W-OCxmHm+HP)k7n$^2EE zU(?VZ_1ZeM1!$c&<1~?kpHlfVRE&Ivia~b0%g8>z13BZ!Z$&v&cE=}|U+=L?vbG<4 zk@40ZNYpC=$+%5S-MU$Shvm8mKDwh%Xn$L&|If0-zdHo=AJG0QLj2e6ec=D9==P^c zFDBaYS$yO8FAaPi!H8&Y=ISiG!kB12#a=M28TH>qH%2x_ZrbX+I?MidKkP%Xmr8fF8STl*K-jVf?Rx z+{5pJoVycVWUx078LXZygN?VDH7E|=c>kA~-qEhf0f;|U%^+`+#p6$Keg6_%zRz#` zul4qyleG#)CRRrO(YjBU8v-ae; zTwg9}K68!dp(5h3zP^0}IUNTCT|Q!TmD&2G!dRCXC>I)O`^yY-D!;_}klThG@c6#J ziiD|5%dfT$5kH^+gkKj=nop=d01-53Sa4`?Zd#!Qn$)e}WAKxxwnDLaKu*{)T8U;NqTD%*Cr0#W6G4OhgGl!xoD2W~Bw=+n& zfI^}DJxxb+-AhAIR%C&RV3yepqlmeLTO)MS=&Zu&a*=w0pTzh}<3giktlGS+%D8)- zAuS4q243n3bA$9bPU(G@rzZ6}CbKL7p;Y;Ikba+{s3<8#*Uvxs_d_E8^C|kf0ZPHf z((K>nfb&01$v+JiekxcQ%$QrqdabN;os_3)!l4JGbY zBqHk_P<6(sUUGWmgYm}L$?7O#*QW^tOpiYqZW391QC-5w#z?s9W}USRY?4rdT6ud7bGTJM?Fn3V%BGasR5cp^yD5TOmFW>$4q?CdI#GKq+ z=iUYUZkd|qorakhy5%(6xPtAaY3+!ao5#iin>L(~MPd(IU@d>-B?VC zBgyy}4vHrF8RsJe&<|NY(~qg`1eqnf%3~U-^KUp#X@{JZ-d#pK9##&@PH1iupha?8 zr;V?FUaK5w4JZcsM4jj_QUAMRM~ZfOPDXb2M*p0>&R70NQ3m_|e1qHOXRs!6T%4fB zxlhnRfLC4&QB4*=dAYKkT18XS>B>3(5}N{U3XdXV_@^?0(Tv!DJr=Vgj8;{lCyY^9 z=XoWuv7I}JTLmbwt)AZU%gbkdVfW!YvXDlN+vaE z1BbhCS<|)4KvzSW%u)!N{6m@dnQ89CFWhQGIj2nm&w0zSRgi>Dg~tBfdoPrW2~`ZY zRns}1xL{%=|0RIN630UCPaiH>Q=wcZ4lT7tr}D0o_qO}3-s)G}aVliwRT`l6BYcg8 z_St20F57z>R>wh5L}g<(q4(5lh}z=9_G;3#rLmTl$C3;^o|BthO%!8`hN>1oDE?}{ zb#|^flS0?IX#6U6+A&QpNH+^@_y=hvFhiVBTy9YbmWq3JA7er$6Ml!6(llsS`FmMA zL1G``6VZZGD_ggqFJ=IQRwgZFDy^rtHfiyV*pK+-{af zTPO=mi3UCoqw6YVUM9&L_a zo4F_xjrI{m#NQnR*-YRzB}V{9_-_C;jkmt;VMGAmU$f)Vv~_wG|w+r(LpJgO+ii%gb z^cDDJ-^6(tUz;wx-{zRi;T^;V3WX!3Chng8n9Ih5Eck>dFXpz9Jt7`|8X?Iqv6>43 zQgS<__>svpmW*Pa#OE1Z(mZd+VWF&fRCc+OLCTdZB1A&AP{W1jsDO+!qLEBl&?jTk zw(s!jcyJ3tphWS;g{CLWk3??pZUK4mCj_s~f)HjKFa9GrYTT#WuFcoGYit>{QJ*55v(ZM~3dWw7T+7uk>LVLA! zUqs_O^tEd?hbQKcJyumR8Qo~E;K98{Rq9RyCz)&kk4QERV)DrysVAU_5nFfs$z8uT zuh?ru>!Hym^2#kZ7ZlGCh*#oD_V}ReBNhj25A2i&7T#7>KhBc&ekO`7$C6x2aauox zLQL2XJ~=q6*~^I?g>Nv0t+jWKl2k{MW^T=tRMJS&jrX&8E$sovD|x?~=eQyl#7IJS zMNJ`v5~~UA0J1GgN&xU_att2YGbpzSqIelOJF^tEMf}qQ>(lI##E{qc$rl%z2`*|+ zL+;}8yoG=*lXqC`7iR0}O)C`GbtA8%S-;}JY2Ik1g2+AFk?pG?vljCHplIYXDOk_5 zh?_Ikl)#pCO>^lwQ{g#lm5QjL()VV2^Vogh4vI=C@8_+Jzm(ctQTXwqL{vEtB;}RxsSvYzP`?pD@*$!MNC-r8Wn~q8Q}XY( z6~Wf1njZj>g~!UC8=zl-H?0?1VOgRnZ)e{fW0Q7kk>OnVdCIds8~&C5pz}eA1>AZp zjh%G(=f%d$#mC3n=MzkmJRgW&)y^t`19S}?wpwaG4ca=$qpNm{je-kMG)7Lxi))yN z`;M;dS}lbSmrq6Q?$(B$g^-}Zn;e>?jxOoKG?13j$t}c%4A#-(`!P=zNk%DDh!lcF zf0}#5t{bw>SqCpxN;3`QE-piWKIEBlrKI$9g-W1e&~44?rCbt*X75-OF}w5iG!%;L zLT4yBm9U_QErp^{rN+iCqy{3CiYw*}9vFy=nBHq0=qssV7FUOPOK#K;*UF5! zk7TyR7@&V73(|V#k=0}_WDN-ko$cJ)8G;GxaYjO-i|!`+dAL$M6sAg)oHwOleXFR7 zt>`Svr^aq}jV#8w+=nb_M2F~P_xY#bH)ma?%@s)z=UgeF5KH74P)bP-LSOHg%lmsP z4UdmXjrE}P*_XHbU$oIJ(*w>mWh97FD~Uha+^S)1vBOCg41jv8Xs6P0QjabjoxW#Cr-%-> z3@3<99X0J;3+B-4>B6w2EcuN~%Q>2NMR{sZalla;=2bFY!8K*HeU(z~k1ZB$%g6(B zy|JsL(b(w?ZxS0EC$a7>hbHVm#`ZR2Qo{}}HqKRDGv0Ap<10X@vaCZY1_@W%i&d&Q zRy$OSVkdaJ=xcObGt$RuP~doIQ(CW^kQO`{F1;#nG|0J{Q>iW$=fC_RxkiY;RL_ti zN|DztLvZ#31Y-L{Y2u7Nbh-ocY9J>{r#2uSY z9z1hpV}s^N(^?m<#NqS|fIb3i?}-N~a@&oFtzw4bwO(@6VKm)&tq%ZX5sQ%C%y^{_ z$vI}r>8C=Y6I#1&D<^I}?ZUkOV@KK^EdA*TGs621c>##lp*(rUDc)pf;c&zgq}3{vUy0|JM2=(g zFvI&$mxGD$XL?GK^Csfsy8D!TuvZkb24PtVL45B;Y^1}GuS%~G2VH3tL$*Xl{lcx-|&9OQ1n>(aC(56rv<`tN* z538vi_sh;{JW5P#&Rn57-s0?9?2?F(zl<792^~<~9e~yl82vyAlUrSiD{3?m%13o+ zmyL`QmlY@unMJNRfYXr1)7pgAYV*@9G8w)2>SX}0-51$~*O|)nb#UA+A^$LyIBRAl z(BoJl$T}^n5WkK=UCTRnYjOstH}ber!`cp#TD!YExiptS<;@$_`GFtJ4BSIh?3iHs z3TYT7<$Fq=2MU~V5v3S&_`*8?jrx=c+E^F;t%Wx+tfN5;VfdD|Gy6|qTU@&)9r`_8 z_P&bxSgjy%B2LDxAQ7)d-5|EPVh>aVFO%N>m!7SdYa;DYS>U`**Av@5}W}7mcC@JxJskk35#V}g5;MQEclvM1TDlS#7idT*3goTgjwmO@gt^pMA30$_7ZhY^tH{Dmmn62Niz z@B~EwR-osUGW}@bIeccAuEmdyFY(;-Z?)qBL@Ge=TXc}~3cG64N5Z_tMxaSSM52ll z2_n(-$Y_Ow61Ny|x`=T4B(*~*co65?pzGc12 zATyXzBr}Cero7KfjwIBI4&+IYUDw>Yd%sSNqARWV(2pM?&rk``P2lT#=AU?QyjT^1 z?CT+nKs4&koJ+>UwTf$8fvRzoS7=Ud28tZpl2n&Nx$%SP22jaB8DIF6)-5AmH@DH8 zatEzxE?OIc%^jz;*gaV19VNj!WC%A1q5P=d&*!C9RXm^gyf&yTMSm>#k1InDH%cNt zqNA923^5FQwNy<*HX1RFQk6ixs7J?se>$4*aIUxefl0F<8FpiTcfq$P`W=7y+0BhIbBJ7|O=#CANj{*T zMaJ?6q;UY&>Xp#)Uo>p2pb}KTBbmPH^^MKTE^I-wwTyLbIGv7$y<6<~;lF33x~Ny7G0=~8qG zUs(ZY%-Us>dBoq!VsSKQg-=bRQCnMZf8CCM={%iu#{O<-r%oE`u;WBon((MX0~l!g zW67vlUGFf28y#r~rMU+{Ei8*E*S;jqt(4f|LN!fTdFhNx{e0IftU)vIN_OHLs~FHu z;Cg=>m8&Lnt6M2um{-Ja&4cMwypdPl6_LY!#@dtdnA0a^UU0^kfMV{Kvmu8WbO#D% zCk&1U=kpaO8Pr7|nFrd)6N_YCeau3#J7>k#W;cTeobsic-VL^@#6#*M(1^j)Wtvbz zM7rVK1T)75QyqTcv`C@o1wMkzmI<0*fbSteueH!+o&er~!dMZn1*Mw^=y7dTs=uT5 zdG%Vk^RQi@qlAj;HnGe)aVB;Z-PbBQWYs2WtsMXCsh&j`YG{AdjCEDo+6<9iGW-ZpPE zS=B^biu$$$4`dmHolR^OsyCuL$I+;)$%^{6a=N25?aYb0)9k#(ea3pGUKffgXj|a% zgy|7bRnR+_V3je_?GhKXT{{>u5E-#JO2`-L%zfUV@#}KDG$W&W{ib+gT7#_Lo;eYt&K^bhfSek27hE=V`9Nv3jOmK79$WMU-fk?aLI5 z;`P6JeMu6zk$~~UEPY~J>PoE+ALw^``c&P+?Sfx%4n*#Nc!b$J3$=B73ZlOu>fMe$ z24#N3`klOe{)*%j@WHqHsxUtJkq5KoxxoKQyJGsTV#W3G-3sv|l_mW{D|LL* zROO1riifxKXK14Zj8CyRuXj(x#*8%e>MF#A8&Mmlm3K)K41RODV?!ECm;>yp*%G~L zzFi6^qsh#uSr7{{Cs+p+>-LqrPwYlf%OnA|R`ItQ-NI;@Yl)+2mk;QtOukV8(iiIds+{A7re^D)6Y{vwnNS@QVQw8tTr{V zrDIXKS0OM@?p~cl4U8s4J7pNqUmPnvjv)Z!6gG1^?LjS5ouRqy@qOL}08U^=x-CceE=swQ*l=GAY(Y}uq5z2UOofOjIszGF z*+*pA(*gKkQXUK#*Wm_t$aLgsnDxr=m_;&S*eLd#pNJJScr7SGd*;pKjH}}zHMyOJ zmtugPxTB+-QgWigJs;8t&w#aVv0Asy#y@HuM1Sl~(6_GE%PF&JwT_*S?+RspcZxQb z!N%blJT<_mUG>1K>*EW9p*VM?6z7l+Q)g7bNXT_65_6fC_NI!gs3f?@XPFJ#4iqu$ zrhU$;94eT+_zI2kCQJ65D+>Ls7(J+(04~AD@#1wN|B{`BX}7a05wV32Z0z^v90+ zeXwc?eYK>0=zfY$+0?aAJB##^y1#0%6q=k>hH5S~yhS}RK>;<|NnJcag%<6CMPm@m z${Rs8H$}_}z;qrrF^l=Qe(VB4gDGvuN&W7Q@EMA2?0rO&nw!d6&Rc7f(u=I+ymatt zJ&P?E+KzMvVaK?DJ{B%v!%grG4v)mzXeHvq)zeO^d-YOxV#te&Jl7CwXy7ADbu2HL z)0IeH?<@TkxJ)SbtJxLVhxgK?MjyZi1?+XBP|8QBv(JYx*RUsT#*Qa^py8rEtDY+s zRUtRH3@6o{*33M8%UuNHk;I9bK6>tZLB+fRQc zFE(Rf+Rfp=eA&eNtHQ?L9eDm-*!b7zV!gbS%_jV~+t^m_#=T3c!?O3a&5coBX+c_Ao8(Dg<|96mS6*TFb`=)WY) zQjnA|atJ*nxN54NfqISvFUbW2FL8icjh!Da7GBG}+!L8tdouFW6UJBHm$q_pu?Vk; zD!=L^y^cZBB!h5~@?k@p&o(rhhB++mSNKo~m_f)9?U}G$HFF@F9U;D{C$ofOcdMsw zuRtp>Y7T;?Q@N*;tPz!>yIqGQ&9QA*0IQ?Dg8D%|7N2CAVdIr=qu_2Ut zpCCt5$ShPIK`1ZZODf#Y2hJ)bDkPG5d?w#MtsIZYOU#P|`pS8ntQs6iF`#Yj2x6h46e#g?d1@<4w8V{zI<&WSDhg zcyTfYj+FL+Hu-+Jk`XB@X99DamUUcn_f`bjtxvLU5=?$-R*1iSk8G>WuAcKWve-P_ zw9A$+RkpwY%p*oZ%JwLEN`Io1HJNd+d7J}a+2zjwU001|rJR(U@4`BVjm_o*L=Ftl zO1+~g1FR_21{5SRXT|P=RB;ZpfJcbTPKT99QEt|TC|tq` zG9>jBR3t~U-t-m1ktZwqYMNDjR)V(2ncb%GTU~8Yo?(B%-(l;0eJK6ddHkIIqZ@}W zN-P+K^(UX)Lekp0g%qd}J4>M?oXEV2Z!Vob!0bc(I5Vu&5MJYHcj#Rx-9v9njxj2F zHR99M&;jZZ12Bn7bWFz*lOj)aQR7e3Yk~MNx5&KPkZaBKWZt%m&^}Lniy@L^+@9LO zv~&Cbdt>VkASXcavwC4%W@IvX?tA*;8_?~#A^hiCv=Y|KMJp|XY3Vnhmh?3 zDdVr7>dn>GjQ5E1AqeYW7;@;So+%+e?A#wYBe;TCSDE-^o(0vQ45gn$ z%FCmUbgM%red4ov^JkFi=e_;O&1ZYD>MuvW|E{>^&pEUIPYyA^)zNbB@6u3~{aJop&^b&49p{wgPX#HrpSD3rFU44DHUA`p3IV8^qz90R( zx?voxR7w)KlCw;VCKK+An`6o8mAt&}fOLMvc6j3EVo=5%)abv4j8%*_ z?lnNm!mpf3&|#N_jW8UtfE9915x}OmO)w~RU0yJc-BL~ny~j-l)eicNg>f_;Cs$5 z3E*sIid7vUk!RY2_HHlE0#K{lTa&W8VgQMop~T*B^YhfE?Vi%UA~+5x6drxzx+CWw zJc1;5kSwJTU}MlIHeW0*z1CuAkVxjrAT}9zh!kw_p;nS|yH5};mWqFJCI&@wTphX+ z>pxbt@V5biP2o#hV6rw;TxMdwQzx@3+1ixIxypA6<`PsV6~i5F z=~#kY!kR&!U^j`0I@e2bz!f&t3Cl^gge_R@oqK5ahj$AcIAd7)X?H>0{Jl$tcT4gV zO4_rp+X$?|SHS-5!Zt|{s+@i%f}yRqx?E>dlvm84^=#8gA=6$A(d-z&JTDMjED}Be zXE*K^_-#f3T6B_LmAngiZ;A(9{zIFfHusC)jo3LR|s$>~3@LAbv>qU?Wf$mSn1uKsoiU6lDd zF!zbJN|>{d?BWmomINo+|fnoPMi%L_8F4mQ1oc~M1XM;pj?-1~mDbpf?1 zVucxohr_T}Zm241B?u2H5qE^qa!(A%_#7ecg9f}8vR~ZL4aT<7-8{3N-!O0SY9^Iv z35Z!#gf0zahPNu0$<@!X5 zOoX~mG&Q7mVrbeG#gycx*Y-_{{qn=U0B+s2__koZ$ zWfb4=wYGI zkOxb?7-&_lrznilQt>nUUAcf)9kyoz%DuB3tV7wVPhD9dq#- zKHoT*Oih?_NQF}LuD{O`8$F(aaVwUBo1kuX!Dt;>V3M2bGPpOiJzt>Uk7aqtGA3l;-G*H(m- zK@7ZVCS&>syh(19o$QEaD{IxKVx9A}(_2QZA^-jN+XR$!fWC1T*W3}EcW~_XU@l5s zI|_W#031q)k+-wMw_S9Hv@r?QCsU(+2|WwuB%x~0DMfvSgCzJ5AsX@e=bQhCq94GeKNWZc(35Ezo8d{bbD#bWM6SA!)sIDmN35HD|3%*NFV2>ZtusI zHrE2yBDQtAEA}MShv!=D))YM2j)~xzSbd;uQG;w|3g*@sNTwfsyY`LXt$o$M)MOUV z|0FND&>h9FnUO^E^ONRISJ}1h!nY;L8M?5n9tRz1cS1{i)YSK;2s4M z4QBHZYli22OWtMF-?^zwp^<}}B6d>`_ulB=OY|7dRH>l{5a?DK5kF903QleQ%l3!i zRUPvr1YwT^m_Yj$%5Il4ircB)h^~3bW$#^!J=L#umjE~ZRoBjWeIVozwa)H49Xxjs zgS99kM_~BRudP3C$ME)Lx5eOq{uN|!4BFbtT0Z&G2lu++L=rq&v~Qb!w@U_%1)4Ha zT_{67g?0tMrd=T1qSEQf^9!wlPM7JQ7sSKot9OeqTF%Q?3tEiiMv^&GqB@d1x+*J6 zTZ1C}QCE{JL9~1~ojCx2Ku=W{u+U`wrhHD)B04unr;3V>ZT@FG0;U)0$Rgr}K|v!k zmi3f`0g2$7 zbjN(w*pPixUym^o568QG}t=ExO`F7m6|f!GN?>d zHGKmj36;P?j0~VYQyuKW*baskd(POr{s?CQw#}w+Zh@21qrC6Y zh3E!*)*w&SjQXb6%wOa6Lj%gVG8+$pdUVk1mIJXC&I1}1xcFE>9HESG& z*ko!zCb^+7n8@|Ag4=2JxY~g@(ej&Alw;h!Ak=Ftini_=?hL_?p|ga(Jt!mu_J6zI zu^zKV1t!WPs70^H9=mu_cu0X8bsaO-<|0uJshOL|sOSzBD6_vr1DwVOc6E3c2j1M# z>G1FA2jPsz8s6h#04q?{p*U^+I$hs%Q5P9bWjnxA`6*m;rZk@nz81t3w(VmB!x|DT zjm7gGtJ@e((&OD5L1x+-vz*sNsZr{`gF<53WRE4#>#vGT1S*_r1d9j#(bZKb620jm zU0Bn#7;=Ip*BGmI#~eU{KB;x+ZgpU0jTFa{)|c2iNLXz=VD?DQuxj+A)wO4Js zCbP&LJ+h%UKfPgAh~JiblI!o`l~Mn0g}5j5MbYWZZmmUZC9@4ZrJO&r2Yt$&Fd$CX56&^dNnKevR=mv_ z%=grF;p6Id9ru6`R9WBPO;|SF3 ziiO;D)w$0Ybj1E+lAUEp#?N;40FLz$a`%-ol|wvT%*SsSVWYI2!t;O$JWvs z{k2mvo}@5w^>B2WZMv~INo7SrfjOl`Ja@6XG-qu{?si_#<0xr)rL z$E=Pl=5|6OQ&?nZ$tWYUX#j335R~zV`NY@REGFO2&-BE9E3;Uuvx1jPU|BounsBQ+~%Mn#og_XR-D+S(}pSsxQ-7mf32~NS#WJw$F=CWifjnU+xu#x~2Sv z1=-h-;Y<*zOS2=@)!*KZB;wW~u}sIx>q0oKGT)Kjw9z4$NRx$C(h z-#Za&n%Rl#Cqh>{!_ksprlY75IFbh*|Dw(-eV+UycSkU;r@nlYVG}$)Bk`%hUn^l- zd0&_=cu1gGGzXiWhhj6U^6-MVD6WpNxiX@ec~hNaW3K{x*QW%|+gZa-fLnpxZ@@`= zX(!&F66&J#XYqqSrunF%I%E|9cDnaqiZ;C5He4_s@Cm`-EY~|FF{4Q^=6^NI)*WP3 ziS@XW)}a ziYwo4ro_Kx{Fi$qDOtv=TteU4Mvj{Dq}6$xO$$Y+fTX?!DV?}I1gY5R#jPceUGMRv zKK0!X!VK_*El$FSN__LW*UgAzFJX<$CR1x%%XmP}q@+WXMZ|CX=0jL$vBo1q8tM`+ ziuhVjx&O15OSU&h5~E^IFmT1qVP@q}Ks_>KQGFs!$(JD5I)b1I1t4AlmP2%II$96L z#Dn5R*CIPnz0?Pz9d&{_cz=d5s&0WKdgh`?^>Kv_S^Q9$(u$|u7@3y`u!;8wf`%Rl z2^e0vMVNzQzKfefLHq#&g6oQi!a zXPx^{f4uQ*DfC6mfB5x@eSUL#{wTb+BBhGm2n5M~uLsqzybYtN@Y9o7Af%d3_>wPR zrt}+IzHx1#1Ot zzavaZ+36@Zfxif>R~+%1s{*uIj|8cYitIc)Q+V?9t(x*vkCZEj-1MI!x?f!iV9e#+xVPTX+e?CIfhq@L(!cYybF?Vlx)JL(JU z399I6Hw%|dt4#uaYi~hD*(48DQ!_6dZ;dP@PW>K!UsP;B0%`e1O)^G`I;Qh(ZzyQC zu^S^?YOoE`so^fH(6|h`PEdPu3re=T;L%?apR=hCnXHUlT5gGHBdah(dX*aH=u`ZG zEkDVZT%2kfyvfto7`1UoIo?Rr-@mA|`{KMxba2N8f*@eWO# zv^J39+?hm`||=U9*Lu=y;>Y#=ak31Atox`mt-wQwK*+BcD$tPt&Ag zPJCLM6@KjsO*bvrzjX z$FujLp|=?pqg|OW>_$5Yk<|hvdQ#IOBK1JC3RWqzKV6S$l5rgn*RC7l*)37SHI9lO zpOswRU^iq?K(azFony01m_;A;h8p@c(q}liz~>T}{Z-s$#LzEIjtiv!(VM?c=3YcNH2x zCAA1Ho%Du0ZL)R4Ad;?ZfTd*>*lq25rzNnKGo~!Nr4=m{t(2nW3}uCU&?b>+BRG6L zzuWbFJ3cOKZT&Pal4puFHVn|vOxNT(8$7xzrDd%!pjYw=^$pWY{?6vha3<)DgfKra zsp?5XfygH`ZWI}I`zw{l3vN*#mu{i9U$vJg{v$>Ii08D@7a`;vfl=}+;dv7{FeQjl z7%!)dCuQ}EyK_?v?1V|ciC!j6Zw3eyGS4c#kHJSk7~_aA4NDg*LYdnVZj(`c zf82o5KBpA#4;f@XC(s12q)lOIfDtpHP9Z%)ASKxVCpx#dOZ<=GaGPti-M3MT1qmaH zl;ywwZ;Qoec{PmpQgFms)08#FtGGv`YJ`_D_)Cx&;hgjcyg>a~4iIDJtwP)`Af-CQ z*_b3P8?c+!2g$yFt+shp@Xw^xN=KEIjCy&Uys!Wx%BMwLnE1{fsi;-0XkBk#%(Z2; zq1p$riB4Q3*9Hyod>jIP?rqCzqnD$|7A*H_BkaItCq)gnAFs+dJuE&VN`m=Zl30`6 z#wsY6OY(To&@Kz{q?|N3kKPA9)MN)D=rx0IYSuPDf!c@*(NwAn8u``Th9H8o5G{0r zUzj*olz7LNxi+8;n0OPqynpu!apHjf!EJz~TE9lUzWE9}C9-}rd_Q^5Fm84jKX)hx zwZJuUs8ZiBli$Hcd5gWAex#Urq+T;`zQN{(zu{t=jy_m}5m7fpADs;#uO^w@*7agAV*v`n&Od^e7`L&{ zGOv}cY~Cfhppea0dv&gS8S8N77QG{REl5#K)11PcP^0D?2Vhs|w2QWbPo0fGfR*;$&Uzu3ejHU~ zi^_bHE|_r~&DpwLQq8*U+2<$BB}x2*WZi-vCbZJKKx1Fzwfb9lly2J}Niu_TAPra* z-8ezO=+-zN?3+A^C+jPrIjq1qXZyC2*QwM+o+V`2!9`uilK6FA&Z|ZN+*{+PP&X*Y zI&EMkB3*c9EEI?ImO?0wiE1S?HNLGHY2S1@{N@~fs}2Hf%VHy@tvCJVtIhhB-ZLS+ zQzf?`O1Qf!Fot=R&ufJZ(i|@ac*fR3>WnEsOET}af#E804=Cj9eWB@Ob&-9nPQ||_EUC1PqX4RJs!|ijDZ)~MEbJb+TSrk@8Tj^cekhoEM zkk@zkjrjdxdyV!4|LIwWEwDt6f6}N7e)(|t2?c57t6q`VZ7I=q3?7MIL0HNJzE*{3 zS5qt!!r$9`W|{oV0cx+O<)|A>~)Hcfs2PVTpT0 z0kxR3fC`sLx`K0$GL1!oBXnwKc&bD_hxxy9K0dkd7g(b0#$fkZr2Q+Bp$&!b7ha<6 zs9<*nr2TH$@E2&J?aE;HTBQB29K;)he>0T*uLQ)KS^L!Ie{OqQ!jDW>bgRYPa<&^h zw@J_V`P)0YXjh=G(jSODEBt|=>lDA%OUo?$D4ISf+RbzK#@A2WBcH)zm%c+#ni(7# zp6T*8d+%Vcc!WC$ZVj&_x|nln^qD_fu6 zK-o*Bhg!_a{X!papf&s;0YA{^fF7G!@e z4v49(MBql-QtJrt!GB`>{jIOPwd`&1kYX=PoVN84{T>nuue?JjF=E7>*S*OH=8g<7 zUyMmR-Y%xz1llUX;C`4Z;t7i~-k?Dx(qw*nN|0xq27CNXo$+y?jSV!LdkG8bSp$a2o`B z0yyyd3%t~cFlb%rCv_LF9g+{scH*O6Tka$iij_UpeDUg->YI?o17%YLTAY4G63vbK zr*rNN);ZC~KGi*J>falwJ;#;pPY_F>M;*pT-`&Lz5kUeVEKmMbPvFO87=tulV%cTL z0bC!%sim+!VjoJ@QwotrJ+PCr!CmAp)HY=SwCmyqi85=7WIhp-S(UYqcl%dK0;r!k ziT;y!^H*g8(6C43$MfQ}inw7|A6(OO6h`&jaL`97PFaRQq<7=2JcWMgZd|hqm3ryg zK5QQd`gs}$s(Ca~^$Qky@6#!|K3ah2Mg zON#}&yQ(?6MD{C^F{_|x4b~pGttL|cUbvDWMuGP}r~@Hv%7ITkroqG_X`Vr+;AMPC z&>=u6Zqz^c-WyU9fe@~7CKpf2kEHc!hR#fO-P$;J${JtG*faD(v2(RugJzM?#ePrvTL$bMBkwTV(AwVyoU8eeJ1!H2glj6~1x%b4 zB&HGZ%FJOdD%hs5944dAj362V}0!9LYuu;BG z*Fd_oo#ipwN-IbD6-S9q$yBS-w-Zy;@}1Q477x?PHjS8?zb%<7%=TuN+ol9it z!%?4DvjbWpkCL|oL-pjpm+2zS@qsnmZ3| zsl88356bdcZ@|;LZNq>N9b2w~&cne#6aE>8}4bEbhEtRGC0j z#W$|zp3mw(9yne`RH zTjU3JXHj4j;gR7M@Sf_f@sm+?&k#4P@!lwLrfSaJcG-2P5vlH;pU zz7$94;+eTXtEeeLKf|3*g#n}c7J@ioGoXl%R??vBo=g#};F06rO}&uR8}58WlCTGy za4dy(mSgM8r{R2;McUyhkG922Ht;Nqx|TCu5N4KfdRC6imGf4RS}OjSkn&1BW=A3z z+l}=JH!?sO$BwdiX zdz~m21jDqHz~8^Ae~6TxCXHsg?89|{A8f0@j^Z0M(O34DNh0*=FIPfSxlUINuKU^f zk-z6{({b_Q6Ru8j#~jAYVF$lPjV)6H$LpnpH5PRo2(C1p~LF9IoX3mA;|Zj1KW^3E$yY>Uk!$>zORw2B2I=CxxXuS(cth zHnNo*76fJ%yrMwILix6@IhC}jH}EJdVYpo>PS^2xnhE=_!E`zsHK1o)Dd-9;wfyeBRM73yPOWdjFGdNdi_TRdPOI-@Sc;{94PM7%oe zXB37FkY++PjY`au&Vn@ySILvllI|?WT#nqU(~AzS9Hwkjiw@-(!gSY3>cdxp?nN`& zLu10%LqXYfVM5x*NZdnV0{>^F=J}7h=NW+h_ed4Eq=%4I7@GMr~^3=D_`o z^m|odYB+x%mKM#-FeELmG@|j=xgKaGLTi(7z`a=`d?iZEy|QeOX9&4VAu9$U%5#$p z`_`f!HWy9qwaa{DMGU5gDCJ;h82VGTYRGPgnwNM+S+!nG3gaS4)*;}3qPmEvB(igF8TaS#djeLZG^Vfb@5eCSctm-Ip$NoX1J!d7iOt-iXpCX9(%;+QBnu_hW8)v zj6@D;uoF9|EI3wOd*95ywUYhOhkJrB3MAJ77So7Q$>PovMEo!eMUdfxTb|$;X*$3c z)E$L^OsMygAY82#?n-%>jUfs4EaAP2i5cz!)`|#$rZ!`MqjgAZq&dLPjasQ_58yss7)%Q znol^P+rP7Qq8$#$l5C@L≥T}T#{|H#R>|zA~W5^jI?g!2RSx-`;O3i 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 ex - set_state(false, nil, ex) - end - elsif incomplete? - raise IllegalOperationError, 'Recursive call to #value during evaluation of the Delay' - end - end - if @do_nothing_on_deref - @value - else - apply_deref_options(@value) - end - end - end - - # Return the value this object represents after applying the options - # specified by the `#set_deref_options` method. If the delayed operation - # raised an exception, this method will raise that exception (even when) - # the operation has already been executed). - # - # @param [Numeric] timeout the maximum number of seconds to wait - # @return [Object] the current value of the object - # @raise [Exception] when `#rejected?` raises `#reason` - # - # @!macro delay_note_regarding_blocking - def value!(timeout = nil) - if @executor - super - else - result = value - raise @reason if @reason - result - end - end - - # Return the value this object represents after applying the options - # specified by the `#set_deref_options` method. - # - # @param [Integer] timeout (nil) the maximum number of seconds to wait for - # the value to be computed. When `nil` the caller will block indefinitely. - # - # @return [Object] self - # - # @!macro delay_note_regarding_blocking - def wait(timeout = nil) - if @executor - execute_task_once - super(timeout) - else - value - end - self - end - - # Reconfigures the block returning the value if still `#incomplete?` - # - # @yield the delayed operation to perform - # @return [true, false] if success - def reconfigure(&block) - synchronize do - raise ArgumentError.new('no block given') unless block_given? - unless @evaluation_started - @task = block - true - else - false - end - end - end - - protected - - def ns_initialize(opts, &block) - init_obligation - set_deref_options(opts) - @executor = opts[:executor] - - @task = block - @state = :pending - @evaluation_started = false - end - - private - - # @!visibility private - def execute_task_once # :nodoc: - # this function has been optimized for performance and - # should not be modified without running new benchmarks - execute = task = nil - synchronize do - execute = @evaluation_started = true unless @evaluation_started - task = @task - end - - if execute - executor = Options.executor_from_options(executor: @executor) - executor.post do - begin - result = task.call - success = true - rescue => ex - reason = ex - end - synchronize do - set_state(success, result, reason) - event.set - end - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/errors.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/errors.rb deleted file mode 100644 index 74f1fc3d..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/errors.rb +++ /dev/null @@ -1,74 +0,0 @@ -module Concurrent - - Error = Class.new(StandardError) - - # Raised when errors occur during configuration. - ConfigurationError = Class.new(Error) - - # Raised when an asynchronous operation is cancelled before execution. - CancelledOperationError = Class.new(Error) - - # Raised when a lifecycle method (such as `stop`) is called in an improper - # sequence or when the object is in an inappropriate state. - LifecycleError = Class.new(Error) - - # Raised when an attempt is made to violate an immutability guarantee. - ImmutabilityError = Class.new(Error) - - # Raised when an operation is attempted which is not legal given the - # receiver's current state - IllegalOperationError = Class.new(Error) - - # Raised when an object's methods are called when it has not been - # properly initialized. - InitializationError = Class.new(Error) - - # Raised when an object with a start/stop lifecycle has been started an - # excessive number of times. Often used in conjunction with a restart - # policy or strategy. - MaxRestartFrequencyError = Class.new(Error) - - # Raised when an attempt is made to modify an immutable object - # (such as an `IVar`) after its final state has been set. - class MultipleAssignmentError < Error - attr_reader :inspection_data - - def initialize(message = nil, inspection_data = nil) - @inspection_data = inspection_data - super message - end - - def inspect - format '%s %s>', super[0..-2], @inspection_data.inspect - end - end - - # Raised by an `Executor` when it is unable to process a given task, - # possibly because of a reject policy or other internal error. - RejectedExecutionError = Class.new(Error) - - # Raised when any finite resource, such as a lock counter, exceeds its - # maximum limit/threshold. - ResourceLimitError = Class.new(Error) - - # Raised when an operation times out. - TimeoutError = Class.new(Error) - - # Aggregates multiple exceptions. - class MultipleErrors < Error - attr_reader :errors - - def initialize(errors, message = "#{errors.size} errors") - @errors = errors - super [*message, - *errors.map { |e| [format('%s (%s)', e.message, e.class), *e.backtrace] }.flatten(1) - ].join("\n") - end - end - - # @!macro internal_implementation_note - class ConcurrentUpdateError < ThreadError - # frozen pre-allocated backtrace to speed ConcurrentUpdateError - CONC_UP_ERR_BACKTRACE = ['backtrace elided; set verbose to enable'].freeze - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/exchanger.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/exchanger.rb deleted file mode 100644 index a5405d25..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/exchanger.rb +++ /dev/null @@ -1,353 +0,0 @@ -require 'concurrent/constants' -require 'concurrent/errors' -require 'concurrent/maybe' -require 'concurrent/atomic/atomic_reference' -require 'concurrent/atomic/count_down_latch' -require 'concurrent/utility/engine' -require 'concurrent/utility/monotonic_time' - -module Concurrent - - # @!macro exchanger - # - # A synchronization point at which threads can pair and swap elements within - # pairs. Each thread presents some object on entry to the exchange method, - # matches with a partner thread, and receives its partner's object on return. - # - # @!macro thread_safe_variable_comparison - # - # This implementation is very simple, using only a single slot for each - # exchanger (unlike more advanced implementations which use an "arena"). - # This approach will work perfectly fine when there are only a few threads - # accessing a single `Exchanger`. Beyond a handful of threads the performance - # will degrade rapidly due to contention on the single slot, but the algorithm - # will remain correct. - # - # @see http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Exchanger.html java.util.concurrent.Exchanger - # @example - # - # exchanger = Concurrent::Exchanger.new - # - # threads = [ - # Thread.new { puts "first: " << exchanger.exchange('foo', 1) }, #=> "first: bar" - # Thread.new { puts "second: " << exchanger.exchange('bar', 1) } #=> "second: foo" - # ] - # threads.each {|t| t.join(2) } - - # @!visibility private - class AbstractExchanger < Synchronization::Object - - # @!visibility private - CANCEL = ::Object.new - private_constant :CANCEL - - def initialize - super - end - - # @!macro exchanger_method_do_exchange - # - # Waits for another thread to arrive at this exchange point (unless the - # current thread is interrupted), and then transfers the given object to - # it, receiving its object in return. The timeout value indicates the - # approximate number of seconds the method should block while waiting - # for the exchange. When the timeout value is `nil` the method will - # block indefinitely. - # - # @param [Object] value the value to exchange with another thread - # @param [Numeric, nil] timeout in seconds, `nil` blocks indefinitely - # - # @!macro exchanger_method_exchange - # - # In some edge cases when a `timeout` is given a return value of `nil` may be - # ambiguous. Specifically, if `nil` is a valid value in the exchange it will - # be impossible to tell whether `nil` is the actual return value or if it - # signifies timeout. When `nil` is a valid value in the exchange consider - # using {#exchange!} or {#try_exchange} instead. - # - # @return [Object] the value exchanged by the other thread or `nil` on timeout - def exchange(value, timeout = nil) - (value = do_exchange(value, timeout)) == CANCEL ? nil : value - end - - # @!macro exchanger_method_do_exchange - # @!macro exchanger_method_exchange_bang - # - # On timeout a {Concurrent::TimeoutError} exception will be raised. - # - # @return [Object] the value exchanged by the other thread - # @raise [Concurrent::TimeoutError] on timeout - def exchange!(value, timeout = nil) - if (value = do_exchange(value, timeout)) == CANCEL - raise Concurrent::TimeoutError - else - value - end - end - - # @!macro exchanger_method_do_exchange - # @!macro exchanger_method_try_exchange - # - # The return value will be a {Concurrent::Maybe} set to `Just` on success or - # `Nothing` on timeout. - # - # @return [Concurrent::Maybe] on success a `Just` maybe will be returned with - # the item exchanged by the other thread as `#value`; on timeout a - # `Nothing` maybe will be returned with {Concurrent::TimeoutError} as `#reason` - # - # @example - # - # exchanger = Concurrent::Exchanger.new - # - # result = exchanger.exchange(:foo, 0.5) - # - # if result.just? - # puts result.value #=> :bar - # else - # puts 'timeout' - # end - def try_exchange(value, timeout = nil) - if (value = do_exchange(value, timeout)) == CANCEL - Concurrent::Maybe.nothing(Concurrent::TimeoutError) - else - Concurrent::Maybe.just(value) - end - end - - private - - # @!macro exchanger_method_do_exchange - # - # @return [Object, CANCEL] the value exchanged by the other thread; {CANCEL} on timeout - def do_exchange(value, timeout) - raise NotImplementedError - end - end - - # @!macro internal_implementation_note - # @!visibility private - class RubyExchanger < AbstractExchanger - # A simplified version of java.util.concurrent.Exchanger written by - # Doug Lea, Bill Scherer, and Michael Scott with assistance from members - # of JCP JSR-166 Expert Group and released to the public domain. It does - # not include the arena or the multi-processor spin loops. - # http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/concurrent/Exchanger.java - - safe_initialization! - - class Node < Concurrent::Synchronization::Object - attr_atomic :value - safe_initialization! - - def initialize(item) - super() - @Item = item - @Latch = Concurrent::CountDownLatch.new - self.value = nil - end - - def latch - @Latch - end - - def item - @Item - end - end - private_constant :Node - - def initialize - super - end - - private - - attr_atomic(:slot) - - # @!macro exchanger_method_do_exchange - # - # @return [Object, CANCEL] the value exchanged by the other thread; {CANCEL} on timeout - def do_exchange(value, timeout) - - # ALGORITHM - # - # From the original Java version: - # - # > The basic idea is to maintain a "slot", which is a reference to - # > a Node containing both an Item to offer and a "hole" waiting to - # > get filled in. If an incoming "occupying" thread sees that the - # > slot is null, it CAS'es (compareAndSets) a Node there and waits - # > for another to invoke exchange. That second "fulfilling" thread - # > sees that the slot is non-null, and so CASes it back to null, - # > also exchanging items by CASing the hole, plus waking up the - # > occupying thread if it is blocked. In each case CAS'es may - # > fail because a slot at first appears non-null but is null upon - # > CAS, or vice-versa. So threads may need to retry these - # > actions. - # - # This version: - # - # An exchange occurs between an "occupier" thread and a "fulfiller" thread. - # The "slot" is used to setup this interaction. The first thread in the - # exchange puts itself into the slot (occupies) and waits for a fulfiller. - # The second thread removes the occupier from the slot and attempts to - # perform the exchange. Removing the occupier also frees the slot for - # another occupier/fulfiller pair. - # - # Because the occupier and the fulfiller are operating independently and - # because there may be contention with other threads, any failed operation - # indicates contention. Both the occupier and the fulfiller operate within - # spin loops. Any failed actions along the happy path will cause the thread - # to repeat the loop and try again. - # - # When a timeout value is given the thread must be cognizant of time spent - # in the spin loop. The remaining time is checked every loop. When the time - # runs out the thread will exit. - # - # A "node" is the data structure used to perform the exchange. Only the - # occupier's node is necessary. It's the node used for the exchange. - # Each node has an "item," a "hole" (self), and a "latch." The item is the - # node's initial value. It never changes. It's what the fulfiller returns on - # success. The occupier's hole is where the fulfiller put its item. It's the - # item that the occupier returns on success. The latch is used for synchronization. - # Because a thread may act as either an occupier or fulfiller (or possibly - # both in periods of high contention) every thread creates a node when - # the exchange method is first called. - # - # The following steps occur within the spin loop. If any actions fail - # the thread will loop and try again, so long as there is time remaining. - # If time runs out the thread will return CANCEL. - # - # Check the slot for an occupier: - # - # * If the slot is empty try to occupy - # * If the slot is full try to fulfill - # - # Attempt to occupy: - # - # * Attempt to CAS myself into the slot - # * Go to sleep and wait to be woken by a fulfiller - # * If the sleep is successful then the fulfiller completed its happy path - # - Return the value from my hole (the value given by the fulfiller) - # * When the sleep fails (time ran out) attempt to cancel the operation - # - Attempt to CAS myself out of the hole - # - If successful there is no contention - # - Return CANCEL - # - On failure, I am competing with a fulfiller - # - Attempt to CAS my hole to CANCEL - # - On success - # - Let the fulfiller deal with my cancel - # - Return CANCEL - # - On failure the fulfiller has completed its happy path - # - Return th value from my hole (the fulfiller's value) - # - # Attempt to fulfill: - # - # * Attempt to CAS the occupier out of the slot - # - On failure loop again - # * Attempt to CAS my item into the occupier's hole - # - On failure the occupier is trying to cancel - # - Loop again - # - On success we are on the happy path - # - Wake the sleeping occupier - # - Return the occupier's item - - value = NULL if value.nil? # The sentinel allows nil to be a valid value - me = Node.new(value) # create my node in case I need to occupy - end_at = Concurrent.monotonic_time + timeout.to_f # The time to give up - - result = loop do - other = slot - if other && compare_and_set_slot(other, nil) - # try to fulfill - if other.compare_and_set_value(nil, value) - # happy path - other.latch.count_down - break other.item - end - elsif other.nil? && compare_and_set_slot(nil, me) - # try to occupy - timeout = end_at - Concurrent.monotonic_time if timeout - if me.latch.wait(timeout) - # happy path - break me.value - else - # attempt to remove myself from the slot - if compare_and_set_slot(me, nil) - break CANCEL - elsif !me.compare_and_set_value(nil, CANCEL) - # I've failed to block the fulfiller - break me.value - end - end - end - break CANCEL if timeout && Concurrent.monotonic_time >= end_at - end - - result == NULL ? nil : result - end - end - - if Concurrent.on_jruby? - require 'concurrent/utility/native_extension_loader' - - # @!macro internal_implementation_note - # @!visibility private - class JavaExchanger < AbstractExchanger - - def initialize - @exchanger = java.util.concurrent.Exchanger.new - end - - private - - # @!macro exchanger_method_do_exchange - # - # @return [Object, CANCEL] the value exchanged by the other thread; {CANCEL} on timeout - def do_exchange(value, timeout) - result = nil - if timeout.nil? - Synchronization::JRuby.sleep_interruptibly do - result = @exchanger.exchange(value) - end - else - Synchronization::JRuby.sleep_interruptibly do - result = @exchanger.exchange(value, 1000 * timeout, java.util.concurrent.TimeUnit::MILLISECONDS) - end - end - result - rescue java.util.concurrent.TimeoutException - CANCEL - end - end - end - - # @!visibility private - # @!macro internal_implementation_note - ExchangerImplementation = case - when Concurrent.on_jruby? - JavaExchanger - else - RubyExchanger - end - private_constant :ExchangerImplementation - - # @!macro exchanger - class Exchanger < ExchangerImplementation - - # @!method initialize - # Creates exchanger instance - - # @!method exchange(value, timeout = nil) - # @!macro exchanger_method_do_exchange - # @!macro exchanger_method_exchange - - # @!method exchange!(value, timeout = nil) - # @!macro exchanger_method_do_exchange - # @!macro exchanger_method_exchange_bang - - # @!method try_exchange(value, timeout = nil) - # @!macro exchanger_method_do_exchange - # @!macro exchanger_method_try_exchange - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/abstract_executor_service.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/abstract_executor_service.rb deleted file mode 100644 index ac429531..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/abstract_executor_service.rb +++ /dev/null @@ -1,131 +0,0 @@ -require 'concurrent/errors' -require 'concurrent/concern/deprecation' -require 'concurrent/executor/executor_service' -require 'concurrent/synchronization/lockable_object' - -module Concurrent - - # @!macro abstract_executor_service_public_api - # @!visibility private - class AbstractExecutorService < Synchronization::LockableObject - include ExecutorService - include Concern::Deprecation - - # The set of possible fallback policies that may be set at thread pool creation. - FALLBACK_POLICIES = [:abort, :discard, :caller_runs].freeze - - # @!macro executor_service_attr_reader_fallback_policy - attr_reader :fallback_policy - - attr_reader :name - - # Create a new thread pool. - def initialize(opts = {}, &block) - super(&nil) - synchronize do - @auto_terminate = opts.fetch(:auto_terminate, true) - @name = opts.fetch(:name) if opts.key?(:name) - ns_initialize(opts, &block) - end - end - - def to_s - name ? "#{super[0..-2]} name: #{name}>" : super - end - - # @!macro executor_service_method_shutdown - def shutdown - raise NotImplementedError - end - - # @!macro executor_service_method_kill - def kill - raise NotImplementedError - end - - # @!macro executor_service_method_wait_for_termination - def wait_for_termination(timeout = nil) - raise NotImplementedError - end - - # @!macro executor_service_method_running_question - def running? - synchronize { ns_running? } - end - - # @!macro executor_service_method_shuttingdown_question - def shuttingdown? - synchronize { ns_shuttingdown? } - end - - # @!macro executor_service_method_shutdown_question - def shutdown? - synchronize { ns_shutdown? } - end - - # @!macro executor_service_method_auto_terminate_question - def auto_terminate? - synchronize { @auto_terminate } - end - - # @!macro executor_service_method_auto_terminate_setter - def auto_terminate=(value) - deprecated "Method #auto_terminate= has no effect. Set :auto_terminate option when executor is initialized." - end - - private - - # Returns an action which executes the `fallback_policy` once the queue - # size reaches `max_queue`. The reason for the indirection of an action - # is so that the work can be deferred outside of synchronization. - # - # @param [Array] args the arguments to the task which is being handled. - # - # @!visibility private - def fallback_action(*args) - case fallback_policy - when :abort - lambda { raise RejectedExecutionError } - when :discard - lambda { false } - when :caller_runs - lambda { - begin - yield(*args) - rescue => ex - # let it fail - log DEBUG, ex - end - true - } - else - lambda { fail "Unknown fallback policy #{fallback_policy}" } - end - end - - def ns_execute(*args, &task) - raise NotImplementedError - end - - # @!macro executor_service_method_ns_shutdown_execution - # - # Callback method called when an orderly shutdown has completed. - # The default behavior is to signal all waiting threads. - def ns_shutdown_execution - # do nothing - end - - # @!macro executor_service_method_ns_kill_execution - # - # Callback method called when the executor has been killed. - # The default behavior is to do nothing. - def ns_kill_execution - # do nothing - end - - def ns_auto_terminate? - @auto_terminate - end - - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/cached_thread_pool.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/cached_thread_pool.rb deleted file mode 100644 index de50ed17..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/cached_thread_pool.rb +++ /dev/null @@ -1,62 +0,0 @@ -require 'concurrent/utility/engine' -require 'concurrent/executor/thread_pool_executor' - -module Concurrent - - # A thread pool that dynamically grows and shrinks to fit the current workload. - # New threads are created as needed, existing threads are reused, and threads - # that remain idle for too long are killed and removed from the pool. These - # pools are particularly suited to applications that perform a high volume of - # short-lived tasks. - # - # On creation a `CachedThreadPool` has zero running threads. New threads are - # created on the pool as new operations are `#post`. The size of the pool - # will grow until `#max_length` threads are in the pool or until the number - # of threads exceeds the number of running and pending operations. When a new - # operation is post to the pool the first available idle thread will be tasked - # with the new operation. - # - # Should a thread crash for any reason the thread will immediately be removed - # from the pool. Similarly, threads which remain idle for an extended period - # of time will be killed and reclaimed. Thus these thread pools are very - # efficient at reclaiming unused resources. - # - # The API and behavior of this class are based on Java's `CachedThreadPool` - # - # @!macro thread_pool_options - class CachedThreadPool < ThreadPoolExecutor - - # @!macro cached_thread_pool_method_initialize - # - # Create a new thread pool. - # - # @param [Hash] opts the options defining pool behavior. - # @option opts [Symbol] :fallback_policy (`:abort`) the fallback policy - # - # @raise [ArgumentError] if `fallback_policy` is not a known policy - # - # @see http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Executors.html#newCachedThreadPool-- - def initialize(opts = {}) - defaults = { idletime: DEFAULT_THREAD_IDLETIMEOUT } - overrides = { min_threads: 0, - max_threads: DEFAULT_MAX_POOL_SIZE, - max_queue: DEFAULT_MAX_QUEUE_SIZE } - super(defaults.merge(opts).merge(overrides)) - end - - private - - # @!macro cached_thread_pool_method_initialize - # @!visibility private - def ns_initialize(opts) - super(opts) - if Concurrent.on_jruby? - @max_queue = 0 - @executor = java.util.concurrent.Executors.newCachedThreadPool( - DaemonThreadFactory.new(ns_auto_terminate?)) - @executor.setRejectedExecutionHandler(FALLBACK_POLICY_CLASSES[@fallback_policy].new) - @executor.setKeepAliveTime(opts.fetch(:idletime, DEFAULT_THREAD_IDLETIMEOUT), java.util.concurrent.TimeUnit::SECONDS) - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/executor_service.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/executor_service.rb deleted file mode 100644 index 7e344919..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/executor_service.rb +++ /dev/null @@ -1,185 +0,0 @@ -require 'concurrent/concern/logging' - -module Concurrent - - ################################################################### - - # @!macro executor_service_method_post - # - # Submit a task to the executor for asynchronous processing. - # - # @param [Array] args zero or more arguments to be passed to the task - # - # @yield the asynchronous task to perform - # - # @return [Boolean] `true` if the task is queued, `false` if the executor - # is not running - # - # @raise [ArgumentError] if no task is given - - # @!macro executor_service_method_left_shift - # - # Submit a task to the executor for asynchronous processing. - # - # @param [Proc] task the asynchronous task to perform - # - # @return [self] returns itself - - # @!macro executor_service_method_can_overflow_question - # - # Does the task queue have a maximum size? - # - # @return [Boolean] True if the task queue has a maximum size else false. - - # @!macro executor_service_method_serialized_question - # - # Does this executor guarantee serialization of its operations? - # - # @return [Boolean] True if the executor guarantees that all operations - # will be post in the order they are received and no two operations may - # occur simultaneously. Else false. - - ################################################################### - - # @!macro executor_service_public_api - # - # @!method post(*args, &task) - # @!macro executor_service_method_post - # - # @!method <<(task) - # @!macro executor_service_method_left_shift - # - # @!method can_overflow? - # @!macro executor_service_method_can_overflow_question - # - # @!method serialized? - # @!macro executor_service_method_serialized_question - - ################################################################### - - # @!macro executor_service_attr_reader_fallback_policy - # @return [Symbol] The fallback policy in effect. Either `:abort`, `:discard`, or `:caller_runs`. - - # @!macro executor_service_method_shutdown - # - # Begin an orderly shutdown. Tasks already in the queue will be executed, - # but no new tasks will be accepted. Has no additional effect if the - # thread pool is not running. - - # @!macro executor_service_method_kill - # - # Begin an immediate shutdown. In-progress tasks will be allowed to - # complete but enqueued tasks will be dismissed and no new tasks - # will be accepted. Has no additional effect if the thread pool is - # not running. - - # @!macro executor_service_method_wait_for_termination - # - # Block until executor shutdown is complete or until `timeout` seconds have - # passed. - # - # @note Does not initiate shutdown or termination. Either `shutdown` or `kill` - # must be called before this method (or on another thread). - # - # @param [Integer] timeout the maximum number of seconds to wait for shutdown to complete - # - # @return [Boolean] `true` if shutdown complete or false on `timeout` - - # @!macro executor_service_method_running_question - # - # Is the executor running? - # - # @return [Boolean] `true` when running, `false` when shutting down or shutdown - - # @!macro executor_service_method_shuttingdown_question - # - # Is the executor shuttingdown? - # - # @return [Boolean] `true` when not running and not shutdown, else `false` - - # @!macro executor_service_method_shutdown_question - # - # Is the executor shutdown? - # - # @return [Boolean] `true` when shutdown, `false` when shutting down or running - - # @!macro executor_service_method_auto_terminate_question - # - # Is the executor auto-terminate when the application exits? - # - # @return [Boolean] `true` when auto-termination is enabled else `false`. - - # @!macro executor_service_method_auto_terminate_setter - # - # - # Set the auto-terminate behavior for this executor. - # @deprecated Has no effect - # @param [Boolean] value The new auto-terminate value to set for this executor. - # @return [Boolean] `true` when auto-termination is enabled else `false`. - - ################################################################### - - # @!macro abstract_executor_service_public_api - # - # @!macro executor_service_public_api - # - # @!attribute [r] fallback_policy - # @!macro executor_service_attr_reader_fallback_policy - # - # @!method shutdown - # @!macro executor_service_method_shutdown - # - # @!method kill - # @!macro executor_service_method_kill - # - # @!method wait_for_termination(timeout = nil) - # @!macro executor_service_method_wait_for_termination - # - # @!method running? - # @!macro executor_service_method_running_question - # - # @!method shuttingdown? - # @!macro executor_service_method_shuttingdown_question - # - # @!method shutdown? - # @!macro executor_service_method_shutdown_question - # - # @!method auto_terminate? - # @!macro executor_service_method_auto_terminate_question - # - # @!method auto_terminate=(value) - # @!macro executor_service_method_auto_terminate_setter - - ################################################################### - - # @!macro executor_service_public_api - # @!visibility private - module ExecutorService - include Concern::Logging - - # @!macro executor_service_method_post - def post(*args, &task) - raise NotImplementedError - end - - # @!macro executor_service_method_left_shift - def <<(task) - post(&task) - self - end - - # @!macro executor_service_method_can_overflow_question - # - # @note Always returns `false` - def can_overflow? - false - end - - # @!macro executor_service_method_serialized_question - # - # @note Always returns `false` - def serialized? - false - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/fixed_thread_pool.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/fixed_thread_pool.rb deleted file mode 100644 index 993c3f1e..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/fixed_thread_pool.rb +++ /dev/null @@ -1,224 +0,0 @@ -require 'concurrent/utility/engine' -require 'concurrent/executor/thread_pool_executor' - -module Concurrent - - # @!macro thread_pool_executor_constant_default_max_pool_size - # Default maximum number of threads that will be created in the pool. - - # @!macro thread_pool_executor_constant_default_min_pool_size - # Default minimum number of threads that will be retained in the pool. - - # @!macro thread_pool_executor_constant_default_max_queue_size - # Default maximum number of tasks that may be added to the task queue. - - # @!macro thread_pool_executor_constant_default_thread_timeout - # Default maximum number of seconds a thread in the pool may remain idle - # before being reclaimed. - - # @!macro thread_pool_executor_constant_default_synchronous - # Default value of the :synchronous option. - - # @!macro thread_pool_executor_attr_reader_max_length - # The maximum number of threads that may be created in the pool. - # @return [Integer] The maximum number of threads that may be created in the pool. - - # @!macro thread_pool_executor_attr_reader_min_length - # The minimum number of threads that may be retained in the pool. - # @return [Integer] The minimum number of threads that may be retained in the pool. - - # @!macro thread_pool_executor_attr_reader_largest_length - # The largest number of threads that have been created in the pool since construction. - # @return [Integer] The largest number of threads that have been created in the pool since construction. - - # @!macro thread_pool_executor_attr_reader_scheduled_task_count - # The number of tasks that have been scheduled for execution on the pool since construction. - # @return [Integer] The number of tasks that have been scheduled for execution on the pool since construction. - - # @!macro thread_pool_executor_attr_reader_completed_task_count - # The number of tasks that have been completed by the pool since construction. - # @return [Integer] The number of tasks that have been completed by the pool since construction. - - # @!macro thread_pool_executor_method_active_count - # The number of threads that are actively executing tasks. - # @return [Integer] The number of threads that are actively executing tasks. - - # @!macro thread_pool_executor_attr_reader_idletime - # The number of seconds that a thread may be idle before being reclaimed. - # @return [Integer] The number of seconds that a thread may be idle before being reclaimed. - - # @!macro thread_pool_executor_attr_reader_synchronous - # Whether or not a value of 0 for :max_queue option means the queue must perform direct hand-off or rather unbounded queue. - # @return [true, false] - - # @!macro thread_pool_executor_attr_reader_max_queue - # The maximum number of tasks that may be waiting in the work queue at any one time. - # When the queue size reaches `max_queue` subsequent tasks will be rejected in - # accordance with the configured `fallback_policy`. - # - # @return [Integer] The maximum number of tasks that may be waiting in the work queue at any one time. - # When the queue size reaches `max_queue` subsequent tasks will be rejected in - # accordance with the configured `fallback_policy`. - - # @!macro thread_pool_executor_attr_reader_length - # The number of threads currently in the pool. - # @return [Integer] The number of threads currently in the pool. - - # @!macro thread_pool_executor_attr_reader_queue_length - # The number of tasks in the queue awaiting execution. - # @return [Integer] The number of tasks in the queue awaiting execution. - - # @!macro thread_pool_executor_attr_reader_remaining_capacity - # Number of tasks that may be enqueued before reaching `max_queue` and rejecting - # new tasks. A value of -1 indicates that the queue may grow without bound. - # - # @return [Integer] Number of tasks that may be enqueued before reaching `max_queue` and rejecting - # new tasks. A value of -1 indicates that the queue may grow without bound. - - # @!macro thread_pool_executor_method_prune_pool - # Prune the thread pool of unneeded threads - # - # What is being pruned is controlled by the min_threads and idletime - # parameters passed at pool creation time - # - # This is a no-op on some pool implementation (e.g. the Java one). The Ruby - # pool will auto-prune each time a new job is posted. You will need to call - # this method explicitely in case your application post jobs in bursts (a - # lot of jobs and then nothing for long periods) - - # @!macro thread_pool_executor_public_api - # - # @!macro abstract_executor_service_public_api - # - # @!attribute [r] max_length - # @!macro thread_pool_executor_attr_reader_max_length - # - # @!attribute [r] min_length - # @!macro thread_pool_executor_attr_reader_min_length - # - # @!attribute [r] largest_length - # @!macro thread_pool_executor_attr_reader_largest_length - # - # @!attribute [r] scheduled_task_count - # @!macro thread_pool_executor_attr_reader_scheduled_task_count - # - # @!attribute [r] completed_task_count - # @!macro thread_pool_executor_attr_reader_completed_task_count - # - # @!attribute [r] idletime - # @!macro thread_pool_executor_attr_reader_idletime - # - # @!attribute [r] max_queue - # @!macro thread_pool_executor_attr_reader_max_queue - # - # @!attribute [r] length - # @!macro thread_pool_executor_attr_reader_length - # - # @!attribute [r] queue_length - # @!macro thread_pool_executor_attr_reader_queue_length - # - # @!attribute [r] remaining_capacity - # @!macro thread_pool_executor_attr_reader_remaining_capacity - # - # @!method can_overflow? - # @!macro executor_service_method_can_overflow_question - # - # @!method prune_pool - # @!macro thread_pool_executor_method_prune_pool - - - - - # @!macro thread_pool_options - # - # **Thread Pool Options** - # - # Thread pools support several configuration options: - # - # * `idletime`: The number of seconds that a thread may be idle before being reclaimed. - # * `name`: The name of the executor (optional). Printed in the executor's `#to_s` output and - # a `-worker-` name is given to its threads if supported by used Ruby - # implementation. `` is uniq for each thread. - # * `max_queue`: The maximum number of tasks that may be waiting in the work queue at - # any one time. When the queue size reaches `max_queue` and no new threads can be created, - # subsequent tasks will be rejected in accordance with the configured `fallback_policy`. - # * `auto_terminate`: When true (default), the threads started will be marked as daemon. - # * `fallback_policy`: The policy defining how rejected tasks are handled. - # - # Three fallback policies are supported: - # - # * `:abort`: Raise a `RejectedExecutionError` exception and discard the task. - # * `:discard`: Discard the task and return false. - # * `:caller_runs`: Execute the task on the calling thread. - # - # **Shutting Down Thread Pools** - # - # Killing a thread pool while tasks are still being processed, either by calling - # the `#kill` method or at application exit, will have unpredictable results. There - # is no way for the thread pool to know what resources are being used by the - # in-progress tasks. When those tasks are killed the impact on those resources - # cannot be predicted. The *best* practice is to explicitly shutdown all thread - # pools using the provided methods: - # - # * Call `#shutdown` to initiate an orderly termination of all in-progress tasks - # * Call `#wait_for_termination` with an appropriate timeout interval an allow - # the orderly shutdown to complete - # * Call `#kill` *only when* the thread pool fails to shutdown in the allotted time - # - # On some runtime platforms (most notably the JVM) the application will not - # exit until all thread pools have been shutdown. To prevent applications from - # "hanging" on exit, all threads can be marked as daemon according to the - # `:auto_terminate` option. - # - # ```ruby - # pool1 = Concurrent::FixedThreadPool.new(5) # threads will be marked as daemon - # pool2 = Concurrent::FixedThreadPool.new(5, auto_terminate: false) # mark threads as non-daemon - # ``` - # - # @note Failure to properly shutdown a thread pool can lead to unpredictable results. - # Please read *Shutting Down Thread Pools* for more information. - # - # @see http://docs.oracle.com/javase/tutorial/essential/concurrency/pools.html Java Tutorials: Thread Pools - # @see http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Executors.html Java Executors class - # @see http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html Java ExecutorService interface - # @see https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html#setDaemon-boolean- - - - - - - # @!macro fixed_thread_pool - # - # A thread pool that reuses a fixed number of threads operating off an unbounded queue. - # At any point, at most `num_threads` will be active processing tasks. When all threads are busy new - # tasks `#post` to the thread pool are enqueued until a thread becomes available. - # Should a thread crash for any reason the thread will immediately be removed - # from the pool and replaced. - # - # The API and behavior of this class are based on Java's `FixedThreadPool` - # - # @!macro thread_pool_options - class FixedThreadPool < ThreadPoolExecutor - - # @!macro fixed_thread_pool_method_initialize - # - # Create a new thread pool. - # - # @param [Integer] num_threads the number of threads to allocate - # @param [Hash] opts the options defining pool behavior. - # @option opts [Symbol] :fallback_policy (`:abort`) the fallback policy - # - # @raise [ArgumentError] if `num_threads` is less than or equal to zero - # @raise [ArgumentError] if `fallback_policy` is not a known policy - # - # @see http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Executors.html#newFixedThreadPool-int- - def initialize(num_threads, opts = {}) - raise ArgumentError.new('number of threads must be greater than zero') if num_threads.to_i < 1 - defaults = { max_queue: DEFAULT_MAX_QUEUE_SIZE, - idletime: DEFAULT_THREAD_IDLETIMEOUT } - overrides = { min_threads: num_threads, - max_threads: num_threads } - super(defaults.merge(opts).merge(overrides)) - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/immediate_executor.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/immediate_executor.rb deleted file mode 100644 index 282df7a0..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/immediate_executor.rb +++ /dev/null @@ -1,66 +0,0 @@ -require 'concurrent/atomic/event' -require 'concurrent/executor/abstract_executor_service' -require 'concurrent/executor/serial_executor_service' - -module Concurrent - - # An executor service which runs all operations on the current thread, - # blocking as necessary. Operations are performed in the order they are - # received and no two operations can be performed simultaneously. - # - # This executor service exists mainly for testing an debugging. When used - # it immediately runs every `#post` operation on the current thread, blocking - # that thread until the operation is complete. This can be very beneficial - # during testing because it makes all operations deterministic. - # - # @note Intended for use primarily in testing and debugging. - class ImmediateExecutor < AbstractExecutorService - include SerialExecutorService - - # Creates a new executor - def initialize - @stopped = Concurrent::Event.new - end - - # @!macro executor_service_method_post - def post(*args, &task) - raise ArgumentError.new('no block given') unless block_given? - return false unless running? - task.call(*args) - true - end - - # @!macro executor_service_method_left_shift - def <<(task) - post(&task) - self - end - - # @!macro executor_service_method_running_question - def running? - ! shutdown? - end - - # @!macro executor_service_method_shuttingdown_question - def shuttingdown? - false - end - - # @!macro executor_service_method_shutdown_question - def shutdown? - @stopped.set? - end - - # @!macro executor_service_method_shutdown - def shutdown - @stopped.set - true - end - alias_method :kill, :shutdown - - # @!macro executor_service_method_wait_for_termination - def wait_for_termination(timeout = nil) - @stopped.wait(timeout) - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/indirect_immediate_executor.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/indirect_immediate_executor.rb deleted file mode 100644 index 4f9769fa..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/indirect_immediate_executor.rb +++ /dev/null @@ -1,44 +0,0 @@ -require 'concurrent/executor/immediate_executor' -require 'concurrent/executor/simple_executor_service' - -module Concurrent - # An executor service which runs all operations on a new thread, blocking - # until it completes. Operations are performed in the order they are received - # and no two operations can be performed simultaneously. - # - # This executor service exists mainly for testing an debugging. When used it - # immediately runs every `#post` operation on a new thread, blocking the - # current thread until the operation is complete. This is similar to how the - # ImmediateExecutor works, but the operation has the full stack of the new - # thread at its disposal. This can be helpful when the operations will spawn - # more operations on the same executor and so on - such a situation might - # overflow the single stack in case of an ImmediateExecutor, which is - # inconsistent with how it would behave for a threaded executor. - # - # @note Intended for use primarily in testing and debugging. - class IndirectImmediateExecutor < ImmediateExecutor - # Creates a new executor - def initialize - super - @internal_executor = SimpleExecutorService.new - end - - # @!macro executor_service_method_post - def post(*args, &task) - raise ArgumentError.new("no block given") unless block_given? - return false unless running? - - event = Concurrent::Event.new - @internal_executor.post do - begin - task.call(*args) - ensure - event.set - end - end - event.wait - - true - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/java_executor_service.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/java_executor_service.rb deleted file mode 100644 index 7c9ab178..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/java_executor_service.rb +++ /dev/null @@ -1,104 +0,0 @@ -require 'concurrent/utility/engine' - -if Concurrent.on_jruby? - require 'concurrent/errors' - require 'concurrent/executor/abstract_executor_service' - - module Concurrent - - # @!macro abstract_executor_service_public_api - # @!visibility private - class JavaExecutorService < AbstractExecutorService - java_import 'java.lang.Runnable' - - FALLBACK_POLICY_CLASSES = { - abort: java.util.concurrent.ThreadPoolExecutor::AbortPolicy, - discard: java.util.concurrent.ThreadPoolExecutor::DiscardPolicy, - caller_runs: java.util.concurrent.ThreadPoolExecutor::CallerRunsPolicy - }.freeze - private_constant :FALLBACK_POLICY_CLASSES - - def post(*args, &task) - raise ArgumentError.new('no block given') unless block_given? - return fallback_action(*args, &task).call unless running? - @executor.submit Job.new(args, task) - true - rescue Java::JavaUtilConcurrent::RejectedExecutionException - raise RejectedExecutionError - end - - def wait_for_termination(timeout = nil) - if timeout.nil? - ok = @executor.awaitTermination(60, java.util.concurrent.TimeUnit::SECONDS) until ok - true - else - @executor.awaitTermination(1000 * timeout, java.util.concurrent.TimeUnit::MILLISECONDS) - end - end - - def shutdown - synchronize do - @executor.shutdown - nil - end - end - - def kill - synchronize do - @executor.shutdownNow - nil - end - end - - private - - def ns_running? - !(ns_shuttingdown? || ns_shutdown?) - end - - def ns_shuttingdown? - if @executor.respond_to? :isTerminating - @executor.isTerminating - else - false - end - end - - def ns_shutdown? - @executor.isShutdown || @executor.isTerminated - end - - class Job - include Runnable - def initialize(args, block) - @args = args - @block = block - end - - def run - @block.call(*@args) - end - end - private_constant :Job - end - - class DaemonThreadFactory - # hide include from YARD - send :include, java.util.concurrent.ThreadFactory - - def initialize(daemonize = true) - @daemonize = daemonize - @java_thread_factory = java.util.concurrent.Executors.defaultThreadFactory - end - - def newThread(runnable) - thread = @java_thread_factory.newThread(runnable) - thread.setDaemon(@daemonize) - return thread - end - end - - private_constant :DaemonThreadFactory - - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/java_single_thread_executor.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/java_single_thread_executor.rb deleted file mode 100644 index 7aa24f2d..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/java_single_thread_executor.rb +++ /dev/null @@ -1,30 +0,0 @@ -if Concurrent.on_jruby? - - require 'concurrent/executor/java_executor_service' - require 'concurrent/executor/serial_executor_service' - - module Concurrent - - # @!macro single_thread_executor - # @!macro abstract_executor_service_public_api - # @!visibility private - class JavaSingleThreadExecutor < JavaExecutorService - include SerialExecutorService - - # @!macro single_thread_executor_method_initialize - def initialize(opts = {}) - super(opts) - end - - private - - def ns_initialize(opts) - @executor = java.util.concurrent.Executors.newSingleThreadExecutor( - DaemonThreadFactory.new(ns_auto_terminate?) - ) - @fallback_policy = opts.fetch(:fallback_policy, :discard) - raise ArgumentError.new("#{@fallback_policy} is not a valid fallback policy") unless FALLBACK_POLICY_CLASSES.keys.include?(@fallback_policy) - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/java_thread_pool_executor.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/java_thread_pool_executor.rb deleted file mode 100644 index 598a5f91..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/java_thread_pool_executor.rb +++ /dev/null @@ -1,145 +0,0 @@ -if Concurrent.on_jruby? - - require 'concurrent/executor/java_executor_service' - - module Concurrent - - # @!macro thread_pool_executor - # @!macro thread_pool_options - # @!visibility private - class JavaThreadPoolExecutor < JavaExecutorService - - # @!macro thread_pool_executor_constant_default_max_pool_size - DEFAULT_MAX_POOL_SIZE = java.lang.Integer::MAX_VALUE # 2147483647 - - # @!macro thread_pool_executor_constant_default_min_pool_size - DEFAULT_MIN_POOL_SIZE = 0 - - # @!macro thread_pool_executor_constant_default_max_queue_size - DEFAULT_MAX_QUEUE_SIZE = 0 - - # @!macro thread_pool_executor_constant_default_thread_timeout - DEFAULT_THREAD_IDLETIMEOUT = 60 - - # @!macro thread_pool_executor_constant_default_synchronous - DEFAULT_SYNCHRONOUS = false - - # @!macro thread_pool_executor_attr_reader_max_length - attr_reader :max_length - - # @!macro thread_pool_executor_attr_reader_max_queue - attr_reader :max_queue - - # @!macro thread_pool_executor_attr_reader_synchronous - attr_reader :synchronous - - # @!macro thread_pool_executor_method_initialize - def initialize(opts = {}) - super(opts) - end - - # @!macro executor_service_method_can_overflow_question - def can_overflow? - @max_queue != 0 - end - - # @!macro thread_pool_executor_attr_reader_min_length - def min_length - @executor.getCorePoolSize - end - - # @!macro thread_pool_executor_attr_reader_max_length - def max_length - @executor.getMaximumPoolSize - end - - # @!macro thread_pool_executor_attr_reader_length - def length - @executor.getPoolSize - end - - # @!macro thread_pool_executor_attr_reader_largest_length - def largest_length - @executor.getLargestPoolSize - end - - # @!macro thread_pool_executor_attr_reader_scheduled_task_count - def scheduled_task_count - @executor.getTaskCount - end - - # @!macro thread_pool_executor_attr_reader_completed_task_count - def completed_task_count - @executor.getCompletedTaskCount - end - - # @!macro thread_pool_executor_method_active_count - def active_count - @executor.getActiveCount - end - - # @!macro thread_pool_executor_attr_reader_idletime - def idletime - @executor.getKeepAliveTime(java.util.concurrent.TimeUnit::SECONDS) - end - - # @!macro thread_pool_executor_attr_reader_queue_length - def queue_length - @executor.getQueue.size - end - - # @!macro thread_pool_executor_attr_reader_remaining_capacity - def remaining_capacity - @max_queue == 0 ? -1 : @executor.getQueue.remainingCapacity - end - - # @!macro executor_service_method_running_question - def running? - super && !@executor.isTerminating - end - - # @!macro thread_pool_executor_method_prune_pool - def prune_pool - end - - private - - def ns_initialize(opts) - min_length = opts.fetch(:min_threads, DEFAULT_MIN_POOL_SIZE).to_i - max_length = opts.fetch(:max_threads, DEFAULT_MAX_POOL_SIZE).to_i - idletime = opts.fetch(:idletime, DEFAULT_THREAD_IDLETIMEOUT).to_i - @max_queue = opts.fetch(:max_queue, DEFAULT_MAX_QUEUE_SIZE).to_i - @synchronous = opts.fetch(:synchronous, DEFAULT_SYNCHRONOUS) - @fallback_policy = opts.fetch(:fallback_policy, :abort) - - raise ArgumentError.new("`synchronous` cannot be set unless `max_queue` is 0") if @synchronous && @max_queue > 0 - raise ArgumentError.new("`max_threads` cannot be less than #{DEFAULT_MIN_POOL_SIZE}") if max_length < DEFAULT_MIN_POOL_SIZE - raise ArgumentError.new("`max_threads` cannot be greater than #{DEFAULT_MAX_POOL_SIZE}") if max_length > DEFAULT_MAX_POOL_SIZE - raise ArgumentError.new("`min_threads` cannot be less than #{DEFAULT_MIN_POOL_SIZE}") if min_length < DEFAULT_MIN_POOL_SIZE - raise ArgumentError.new("`min_threads` cannot be more than `max_threads`") if min_length > max_length - raise ArgumentError.new("#{fallback_policy} is not a valid fallback policy") unless FALLBACK_POLICY_CLASSES.include?(@fallback_policy) - - if @max_queue == 0 - if @synchronous - queue = java.util.concurrent.SynchronousQueue.new - else - queue = java.util.concurrent.LinkedBlockingQueue.new - end - else - queue = java.util.concurrent.LinkedBlockingQueue.new(@max_queue) - end - - @executor = java.util.concurrent.ThreadPoolExecutor.new( - min_length, - max_length, - idletime, - java.util.concurrent.TimeUnit::SECONDS, - queue, - DaemonThreadFactory.new(ns_auto_terminate?), - FALLBACK_POLICY_CLASSES[@fallback_policy].new) - - end - end - - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/ruby_executor_service.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/ruby_executor_service.rb deleted file mode 100644 index 1f7301b9..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/ruby_executor_service.rb +++ /dev/null @@ -1,82 +0,0 @@ -require 'concurrent/executor/abstract_executor_service' -require 'concurrent/atomic/event' - -module Concurrent - - # @!macro abstract_executor_service_public_api - # @!visibility private - class RubyExecutorService < AbstractExecutorService - safe_initialization! - - def initialize(*args, &block) - super - @StopEvent = Event.new - @StoppedEvent = Event.new - end - - def post(*args, &task) - raise ArgumentError.new('no block given') unless block_given? - deferred_action = synchronize { - if running? - ns_execute(*args, &task) - else - fallback_action(*args, &task) - end - } - if deferred_action - deferred_action.call - else - true - end - end - - def shutdown - synchronize do - break unless running? - stop_event.set - ns_shutdown_execution - end - true - end - - def kill - synchronize do - break if shutdown? - stop_event.set - ns_kill_execution - stopped_event.set - end - true - end - - def wait_for_termination(timeout = nil) - stopped_event.wait(timeout) - end - - private - - def stop_event - @StopEvent - end - - def stopped_event - @StoppedEvent - end - - def ns_shutdown_execution - stopped_event.set - end - - def ns_running? - !stop_event.set? - end - - def ns_shuttingdown? - !(ns_running? || ns_shutdown?) - end - - def ns_shutdown? - stopped_event.set? - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/ruby_single_thread_executor.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/ruby_single_thread_executor.rb deleted file mode 100644 index 916337d4..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/ruby_single_thread_executor.rb +++ /dev/null @@ -1,21 +0,0 @@ -require 'concurrent/executor/ruby_thread_pool_executor' - -module Concurrent - - # @!macro single_thread_executor - # @!macro abstract_executor_service_public_api - # @!visibility private - class RubySingleThreadExecutor < RubyThreadPoolExecutor - - # @!macro single_thread_executor_method_initialize - def initialize(opts = {}) - super( - min_threads: 1, - max_threads: 1, - max_queue: 0, - idletime: DEFAULT_THREAD_IDLETIMEOUT, - fallback_policy: opts.fetch(:fallback_policy, :discard), - ) - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb deleted file mode 100644 index 9375acf3..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb +++ /dev/null @@ -1,373 +0,0 @@ -require 'thread' -require 'concurrent/atomic/event' -require 'concurrent/concern/logging' -require 'concurrent/executor/ruby_executor_service' -require 'concurrent/utility/monotonic_time' - -module Concurrent - - # @!macro thread_pool_executor - # @!macro thread_pool_options - # @!visibility private - class RubyThreadPoolExecutor < RubyExecutorService - - # @!macro thread_pool_executor_constant_default_max_pool_size - DEFAULT_MAX_POOL_SIZE = 2_147_483_647 # java.lang.Integer::MAX_VALUE - - # @!macro thread_pool_executor_constant_default_min_pool_size - DEFAULT_MIN_POOL_SIZE = 0 - - # @!macro thread_pool_executor_constant_default_max_queue_size - DEFAULT_MAX_QUEUE_SIZE = 0 - - # @!macro thread_pool_executor_constant_default_thread_timeout - DEFAULT_THREAD_IDLETIMEOUT = 60 - - # @!macro thread_pool_executor_constant_default_synchronous - DEFAULT_SYNCHRONOUS = false - - # @!macro thread_pool_executor_attr_reader_max_length - attr_reader :max_length - - # @!macro thread_pool_executor_attr_reader_min_length - attr_reader :min_length - - # @!macro thread_pool_executor_attr_reader_idletime - attr_reader :idletime - - # @!macro thread_pool_executor_attr_reader_max_queue - attr_reader :max_queue - - # @!macro thread_pool_executor_attr_reader_synchronous - attr_reader :synchronous - - # @!macro thread_pool_executor_method_initialize - def initialize(opts = {}) - super(opts) - end - - # @!macro thread_pool_executor_attr_reader_largest_length - def largest_length - synchronize { @largest_length } - end - - # @!macro thread_pool_executor_attr_reader_scheduled_task_count - def scheduled_task_count - synchronize { @scheduled_task_count } - end - - # @!macro thread_pool_executor_attr_reader_completed_task_count - def completed_task_count - synchronize { @completed_task_count } - end - - # @!macro thread_pool_executor_method_active_count - def active_count - synchronize do - @pool.length - @ready.length - end - end - - # @!macro executor_service_method_can_overflow_question - def can_overflow? - synchronize { ns_limited_queue? } - end - - # @!macro thread_pool_executor_attr_reader_length - def length - synchronize { @pool.length } - end - - # @!macro thread_pool_executor_attr_reader_queue_length - def queue_length - synchronize { @queue.length } - end - - # @!macro thread_pool_executor_attr_reader_remaining_capacity - def remaining_capacity - synchronize do - if ns_limited_queue? - @max_queue - @queue.length - else - -1 - end - end - end - - # @!visibility private - def remove_busy_worker(worker) - synchronize { ns_remove_busy_worker worker } - end - - # @!visibility private - def ready_worker(worker, last_message) - synchronize { ns_ready_worker worker, last_message } - end - - # @!visibility private - def worker_died(worker) - synchronize { ns_worker_died worker } - end - - # @!visibility private - def worker_task_completed - synchronize { @completed_task_count += 1 } - end - - # @!macro thread_pool_executor_method_prune_pool - def prune_pool - synchronize { ns_prune_pool } - end - - private - - # @!visibility private - def ns_initialize(opts) - @min_length = opts.fetch(:min_threads, DEFAULT_MIN_POOL_SIZE).to_i - @max_length = opts.fetch(:max_threads, DEFAULT_MAX_POOL_SIZE).to_i - @idletime = opts.fetch(:idletime, DEFAULT_THREAD_IDLETIMEOUT).to_i - @max_queue = opts.fetch(:max_queue, DEFAULT_MAX_QUEUE_SIZE).to_i - @synchronous = opts.fetch(:synchronous, DEFAULT_SYNCHRONOUS) - @fallback_policy = opts.fetch(:fallback_policy, :abort) - - raise ArgumentError.new("`synchronous` cannot be set unless `max_queue` is 0") if @synchronous && @max_queue > 0 - raise ArgumentError.new("#{@fallback_policy} is not a valid fallback policy") unless FALLBACK_POLICIES.include?(@fallback_policy) - raise ArgumentError.new("`max_threads` cannot be less than #{DEFAULT_MIN_POOL_SIZE}") if @max_length < DEFAULT_MIN_POOL_SIZE - raise ArgumentError.new("`max_threads` cannot be greater than #{DEFAULT_MAX_POOL_SIZE}") if @max_length > DEFAULT_MAX_POOL_SIZE - raise ArgumentError.new("`min_threads` cannot be less than #{DEFAULT_MIN_POOL_SIZE}") if @min_length < DEFAULT_MIN_POOL_SIZE - raise ArgumentError.new("`min_threads` cannot be more than `max_threads`") if min_length > max_length - - @pool = [] # all workers - @ready = [] # used as a stash (most idle worker is at the start) - @queue = [] # used as queue - # @ready or @queue is empty at all times - @scheduled_task_count = 0 - @completed_task_count = 0 - @largest_length = 0 - @workers_counter = 0 - @ruby_pid = $$ # detects if Ruby has forked - - @gc_interval = opts.fetch(:gc_interval, @idletime / 2.0).to_i # undocumented - @next_gc_time = Concurrent.monotonic_time + @gc_interval - end - - # @!visibility private - def ns_limited_queue? - @max_queue != 0 - end - - # @!visibility private - def ns_execute(*args, &task) - ns_reset_if_forked - - if ns_assign_worker(*args, &task) || ns_enqueue(*args, &task) - @scheduled_task_count += 1 - else - return fallback_action(*args, &task) - end - - ns_prune_pool if @next_gc_time < Concurrent.monotonic_time - nil - end - - # @!visibility private - def ns_shutdown_execution - ns_reset_if_forked - - if @pool.empty? - # nothing to do - stopped_event.set - end - - if @queue.empty? - # no more tasks will be accepted, just stop all workers - @pool.each(&:stop) - end - end - - # @!visibility private - def ns_kill_execution - # TODO log out unprocessed tasks in queue - # TODO try to shutdown first? - @pool.each(&:kill) - @pool.clear - @ready.clear - end - - # tries to assign task to a worker, tries to get one from @ready or to create new one - # @return [true, false] if task is assigned to a worker - # - # @!visibility private - def ns_assign_worker(*args, &task) - # keep growing if the pool is not at the minimum yet - worker, _ = (@ready.pop if @pool.size >= @min_length) || ns_add_busy_worker - if worker - worker << [task, args] - true - else - false - end - rescue ThreadError - # Raised when the operating system refuses to create the new thread - return false - end - - # tries to enqueue task - # @return [true, false] if enqueued - # - # @!visibility private - def ns_enqueue(*args, &task) - return false if @synchronous - - if !ns_limited_queue? || @queue.size < @max_queue - @queue << [task, args] - true - else - false - end - end - - # @!visibility private - def ns_worker_died(worker) - ns_remove_busy_worker worker - replacement_worker = ns_add_busy_worker - ns_ready_worker replacement_worker, Concurrent.monotonic_time, false if replacement_worker - end - - # creates new worker which has to receive work to do after it's added - # @return [nil, Worker] nil of max capacity is reached - # - # @!visibility private - def ns_add_busy_worker - return if @pool.size >= @max_length - - @workers_counter += 1 - @pool << (worker = Worker.new(self, @workers_counter)) - @largest_length = @pool.length if @pool.length > @largest_length - worker - end - - # handle ready worker, giving it new job or assigning back to @ready - # - # @!visibility private - def ns_ready_worker(worker, last_message, success = true) - task_and_args = @queue.shift - if task_and_args - worker << task_and_args - else - # stop workers when !running?, do not return them to @ready - if running? - raise unless last_message - @ready.push([worker, last_message]) - else - worker.stop - end - end - end - - # removes a worker which is not in not tracked in @ready - # - # @!visibility private - def ns_remove_busy_worker(worker) - @pool.delete(worker) - stopped_event.set if @pool.empty? && !running? - true - end - - # try oldest worker if it is idle for enough time, it's returned back at the start - # - # @!visibility private - def ns_prune_pool - now = Concurrent.monotonic_time - stopped_workers = 0 - while !@ready.empty? && (@pool.size - stopped_workers > @min_length) - worker, last_message = @ready.first - if now - last_message > self.idletime - stopped_workers += 1 - @ready.shift - worker << :stop - else break - end - end - - @next_gc_time = Concurrent.monotonic_time + @gc_interval - end - - def ns_reset_if_forked - if $$ != @ruby_pid - @queue.clear - @ready.clear - @pool.clear - @scheduled_task_count = 0 - @completed_task_count = 0 - @largest_length = 0 - @workers_counter = 0 - @ruby_pid = $$ - end - end - - # @!visibility private - class Worker - include Concern::Logging - - def initialize(pool, id) - # instance variables accessed only under pool's lock so no need to sync here again - @queue = Queue.new - @pool = pool - @thread = create_worker @queue, pool, pool.idletime - - if @thread.respond_to?(:name=) - @thread.name = [pool.name, 'worker', id].compact.join('-') - end - end - - def <<(message) - @queue << message - end - - def stop - @queue << :stop - end - - def kill - @thread.kill - end - - private - - def create_worker(queue, pool, idletime) - Thread.new(queue, pool, idletime) do |my_queue, my_pool, my_idletime| - catch(:stop) do - loop do - - case message = my_queue.pop - when :stop - my_pool.remove_busy_worker(self) - throw :stop - - else - task, args = message - run_task my_pool, task, args - my_pool.ready_worker(self, Concurrent.monotonic_time) - end - end - end - end - end - - def run_task(pool, task, args) - task.call(*args) - pool.worker_task_completed - rescue => ex - # let it fail - log DEBUG, ex - rescue Exception => ex - log ERROR, ex - pool.worker_died(self) - throw :stop - end - end - - private_constant :Worker - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/safe_task_executor.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/safe_task_executor.rb deleted file mode 100644 index f796b857..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/safe_task_executor.rb +++ /dev/null @@ -1,35 +0,0 @@ -require 'concurrent/synchronization/lockable_object' - -module Concurrent - - # A simple utility class that executes a callable and returns and array of three elements: - # success - indicating if the callable has been executed without errors - # value - filled by the callable result if it has been executed without errors, nil otherwise - # reason - the error risen by the callable if it has been executed with errors, nil otherwise - class SafeTaskExecutor < Synchronization::LockableObject - - def initialize(task, opts = {}) - @task = task - @exception_class = opts.fetch(:rescue_exception, false) ? Exception : StandardError - super() # ensures visibility - end - - # @return [Array] - def execute(*args) - success = true - value = reason = nil - - synchronize do - begin - value = @task.call(*args) - success = true - rescue @exception_class => ex - reason = ex - success = false - end - end - - [success, value, reason] - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/serial_executor_service.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/serial_executor_service.rb deleted file mode 100644 index f1c38ecf..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/serial_executor_service.rb +++ /dev/null @@ -1,34 +0,0 @@ -require 'concurrent/executor/executor_service' - -module Concurrent - - # Indicates that the including `ExecutorService` guarantees - # that all operations will occur in the order they are post and that no - # two operations may occur simultaneously. This module provides no - # functionality and provides no guarantees. That is the responsibility - # of the including class. This module exists solely to allow the including - # object to be interrogated for its serialization status. - # - # @example - # class Foo - # include Concurrent::SerialExecutor - # end - # - # foo = Foo.new - # - # foo.is_a? Concurrent::ExecutorService #=> true - # foo.is_a? Concurrent::SerialExecutor #=> true - # foo.serialized? #=> true - # - # @!visibility private - module SerialExecutorService - include ExecutorService - - # @!macro executor_service_method_serialized_question - # - # @note Always returns `true` - def serialized? - true - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/serialized_execution.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/serialized_execution.rb deleted file mode 100644 index 4db7c7f0..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/serialized_execution.rb +++ /dev/null @@ -1,107 +0,0 @@ -require 'concurrent/errors' -require 'concurrent/concern/logging' -require 'concurrent/synchronization/lockable_object' - -module Concurrent - - # Ensures passed jobs in a serialized order never running at the same time. - class SerializedExecution < Synchronization::LockableObject - include Concern::Logging - - def initialize() - super() - synchronize { ns_initialize } - end - - Job = Struct.new(:executor, :args, :block) do - def call - block.call(*args) - end - end - - # Submit a task to the executor for asynchronous processing. - # - # @param [Executor] executor to be used for this job - # - # @param [Array] args zero or more arguments to be passed to the task - # - # @yield the asynchronous task to perform - # - # @return [Boolean] `true` if the task is queued, `false` if the executor - # is not running - # - # @raise [ArgumentError] if no task is given - def post(executor, *args, &task) - posts [[executor, args, task]] - true - end - - # As {#post} but allows to submit multiple tasks at once, it's guaranteed that they will not - # be interleaved by other tasks. - # - # @param [Array, Proc)>] posts array of triplets where - # first is a {ExecutorService}, second is array of args for task, third is a task (Proc) - def posts(posts) - # if can_overflow? - # raise ArgumentError, 'SerializedExecution does not support thread-pools which can overflow' - # end - - return nil if posts.empty? - - jobs = posts.map { |executor, args, task| Job.new executor, args, task } - - job_to_post = synchronize do - if @being_executed - @stash.push(*jobs) - nil - else - @being_executed = true - @stash.push(*jobs[1..-1]) - jobs.first - end - end - - call_job job_to_post if job_to_post - true - end - - private - - def ns_initialize - @being_executed = false - @stash = [] - end - - def call_job(job) - did_it_run = begin - job.executor.post { work(job) } - true - rescue RejectedExecutionError => ex - false - end - - # TODO not the best idea to run it myself - unless did_it_run - begin - work job - rescue => ex - # let it fail - log DEBUG, ex - end - end - end - - # ensures next job is executed if any is stashed - def work(job) - job.call - ensure - synchronize do - job = @stash.shift || (@being_executed = false) - end - - # TODO maybe be able to tell caching pool to just enqueue this job, because the current one end at the end - # of this block - call_job job if job - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/serialized_execution_delegator.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/serialized_execution_delegator.rb deleted file mode 100644 index 8197781b..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/serialized_execution_delegator.rb +++ /dev/null @@ -1,28 +0,0 @@ -require 'delegate' -require 'concurrent/executor/serial_executor_service' -require 'concurrent/executor/serialized_execution' - -module Concurrent - - # A wrapper/delegator for any `ExecutorService` that - # guarantees serialized execution of tasks. - # - # @see [SimpleDelegator](http://www.ruby-doc.org/stdlib-2.1.2/libdoc/delegate/rdoc/SimpleDelegator.html) - # @see Concurrent::SerializedExecution - class SerializedExecutionDelegator < SimpleDelegator - include SerialExecutorService - - def initialize(executor) - @executor = executor - @serializer = SerializedExecution.new - super(executor) - end - - # @!macro executor_service_method_post - def post(*args, &task) - raise ArgumentError.new('no block given') unless block_given? - return false unless running? - @serializer.post(@executor, *args, &task) - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/simple_executor_service.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/simple_executor_service.rb deleted file mode 100644 index 0bc62afd..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/simple_executor_service.rb +++ /dev/null @@ -1,103 +0,0 @@ -require 'concurrent/atomic/atomic_boolean' -require 'concurrent/atomic/atomic_fixnum' -require 'concurrent/atomic/event' -require 'concurrent/executor/executor_service' -require 'concurrent/executor/ruby_executor_service' - -module Concurrent - - # An executor service in which every operation spawns a new, - # independently operating thread. - # - # This is perhaps the most inefficient executor service in this - # library. It exists mainly for testing an debugging. Thread creation - # and management is expensive in Ruby and this executor performs no - # resource pooling. This can be very beneficial during testing and - # debugging because it decouples the using code from the underlying - # executor implementation. In production this executor will likely - # lead to suboptimal performance. - # - # @note Intended for use primarily in testing and debugging. - class SimpleExecutorService < RubyExecutorService - - # @!macro executor_service_method_post - def self.post(*args) - raise ArgumentError.new('no block given') unless block_given? - Thread.new(*args) do - Thread.current.abort_on_exception = false - yield(*args) - end - true - end - - # @!macro executor_service_method_left_shift - def self.<<(task) - post(&task) - self - end - - # @!macro executor_service_method_post - def post(*args, &task) - raise ArgumentError.new('no block given') unless block_given? - return false unless running? - @count.increment - Thread.new(*args) do - Thread.current.abort_on_exception = false - begin - yield(*args) - ensure - @count.decrement - @stopped.set if @running.false? && @count.value == 0 - end - end - end - - # @!macro executor_service_method_left_shift - def <<(task) - post(&task) - self - end - - # @!macro executor_service_method_running_question - def running? - @running.true? - end - - # @!macro executor_service_method_shuttingdown_question - def shuttingdown? - @running.false? && ! @stopped.set? - end - - # @!macro executor_service_method_shutdown_question - def shutdown? - @stopped.set? - end - - # @!macro executor_service_method_shutdown - def shutdown - @running.make_false - @stopped.set if @count.value == 0 - true - end - - # @!macro executor_service_method_kill - def kill - @running.make_false - @stopped.set - true - end - - # @!macro executor_service_method_wait_for_termination - def wait_for_termination(timeout = nil) - @stopped.wait(timeout) - end - - private - - def ns_initialize(*args) - @running = Concurrent::AtomicBoolean.new(true) - @stopped = Concurrent::Event.new - @count = Concurrent::AtomicFixnum.new(0) - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/single_thread_executor.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/single_thread_executor.rb deleted file mode 100644 index f1474ea9..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/single_thread_executor.rb +++ /dev/null @@ -1,57 +0,0 @@ -require 'concurrent/utility/engine' -require 'concurrent/executor/ruby_single_thread_executor' - -module Concurrent - - if Concurrent.on_jruby? - require 'concurrent/executor/java_single_thread_executor' - end - - SingleThreadExecutorImplementation = case - when Concurrent.on_jruby? - JavaSingleThreadExecutor - else - RubySingleThreadExecutor - end - private_constant :SingleThreadExecutorImplementation - - # @!macro single_thread_executor - # - # A thread pool with a single thread an unlimited queue. Should the thread - # die for any reason it will be removed and replaced, thus ensuring that - # the executor will always remain viable and available to process jobs. - # - # A common pattern for background processing is to create a single thread - # on which an infinite loop is run. The thread's loop blocks on an input - # source (perhaps blocking I/O or a queue) and processes each input as it - # is received. This pattern has several issues. The thread itself is highly - # susceptible to errors during processing. Also, the thread itself must be - # constantly monitored and restarted should it die. `SingleThreadExecutor` - # encapsulates all these bahaviors. The task processor is highly resilient - # to errors from within tasks. Also, should the thread die it will - # automatically be restarted. - # - # The API and behavior of this class are based on Java's `SingleThreadExecutor`. - # - # @!macro abstract_executor_service_public_api - class SingleThreadExecutor < SingleThreadExecutorImplementation - - # @!macro single_thread_executor_method_initialize - # - # Create a new thread pool. - # - # @option opts [Symbol] :fallback_policy (:discard) the policy for handling new - # tasks that are received when the queue size has reached - # `max_queue` or the executor has shut down - # - # @raise [ArgumentError] if `:fallback_policy` is not one of the values specified - # in `FALLBACK_POLICIES` - # - # @see http://docs.oracle.com/javase/tutorial/essential/concurrency/pools.html - # @see http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Executors.html - # @see http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html - - # @!method initialize(opts = {}) - # @!macro single_thread_executor_method_initialize - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/thread_pool_executor.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/thread_pool_executor.rb deleted file mode 100644 index 253d46a9..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/thread_pool_executor.rb +++ /dev/null @@ -1,88 +0,0 @@ -require 'concurrent/utility/engine' -require 'concurrent/executor/ruby_thread_pool_executor' - -module Concurrent - - if Concurrent.on_jruby? - require 'concurrent/executor/java_thread_pool_executor' - end - - ThreadPoolExecutorImplementation = case - when Concurrent.on_jruby? - JavaThreadPoolExecutor - else - RubyThreadPoolExecutor - end - private_constant :ThreadPoolExecutorImplementation - - # @!macro thread_pool_executor - # - # An abstraction composed of one or more threads and a task queue. Tasks - # (blocks or `proc` objects) are submitted to the pool and added to the queue. - # The threads in the pool remove the tasks and execute them in the order - # they were received. - # - # A `ThreadPoolExecutor` will automatically adjust the pool size according - # to the bounds set by `min-threads` and `max-threads`. When a new task is - # submitted and fewer than `min-threads` threads are running, a new thread - # is created to handle the request, even if other worker threads are idle. - # If there are more than `min-threads` but less than `max-threads` threads - # running, a new thread will be created only if the queue is full. - # - # Threads that are idle for too long will be garbage collected, down to the - # configured minimum options. Should a thread crash it, too, will be garbage collected. - # - # `ThreadPoolExecutor` is based on the Java class of the same name. From - # the official Java documentation; - # - # > Thread pools address two different problems: they usually provide - # > improved performance when executing large numbers of asynchronous tasks, - # > due to reduced per-task invocation overhead, and they provide a means - # > of bounding and managing the resources, including threads, consumed - # > when executing a collection of tasks. Each ThreadPoolExecutor also - # > maintains some basic statistics, such as the number of completed tasks. - # > - # > To be useful across a wide range of contexts, this class provides many - # > adjustable parameters and extensibility hooks. However, programmers are - # > urged to use the more convenient Executors factory methods - # > [CachedThreadPool] (unbounded thread pool, with automatic thread reclamation), - # > [FixedThreadPool] (fixed size thread pool) and [SingleThreadExecutor] (single - # > background thread), that preconfigure settings for the most common usage - # > scenarios. - # - # @!macro thread_pool_options - # - # @!macro thread_pool_executor_public_api - class ThreadPoolExecutor < ThreadPoolExecutorImplementation - - # @!macro thread_pool_executor_method_initialize - # - # Create a new thread pool. - # - # @param [Hash] opts the options which configure the thread pool. - # - # @option opts [Integer] :max_threads (DEFAULT_MAX_POOL_SIZE) the maximum - # number of threads to be created - # @option opts [Integer] :min_threads (DEFAULT_MIN_POOL_SIZE) When a new task is submitted - # and fewer than `min_threads` are running, a new thread is created - # @option opts [Integer] :idletime (DEFAULT_THREAD_IDLETIMEOUT) the maximum - # number of seconds a thread may be idle before being reclaimed - # @option opts [Integer] :max_queue (DEFAULT_MAX_QUEUE_SIZE) the maximum - # number of tasks allowed in the work queue at any one time; a value of - # zero means the queue may grow without bound - # @option opts [Symbol] :fallback_policy (:abort) the policy for handling new - # tasks that are received when the queue size has reached - # `max_queue` or the executor has shut down - # @option opts [Boolean] :synchronous (DEFAULT_SYNCHRONOUS) whether or not a value of 0 - # for :max_queue means the queue must perform direct hand-off rather than unbounded. - # @raise [ArgumentError] if `:max_threads` is less than one - # @raise [ArgumentError] if `:min_threads` is less than zero - # @raise [ArgumentError] if `:fallback_policy` is not one of the values specified - # in `FALLBACK_POLICIES` - # - # @see http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ThreadPoolExecutor.html - - # @!method initialize(opts = {}) - # @!macro thread_pool_executor_method_initialize - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/timer_set.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/timer_set.rb deleted file mode 100644 index 759dce09..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executor/timer_set.rb +++ /dev/null @@ -1,176 +0,0 @@ -require 'concurrent/scheduled_task' -require 'concurrent/atomic/event' -require 'concurrent/collection/non_concurrent_priority_queue' -require 'concurrent/executor/executor_service' -require 'concurrent/executor/single_thread_executor' -require 'concurrent/errors' -require 'concurrent/options' - -module Concurrent - - # Executes a collection of tasks, each after a given delay. A master task - # monitors the set and schedules each task for execution at the appropriate - # time. Tasks are run on the global thread pool or on the supplied executor. - # Each task is represented as a `ScheduledTask`. - # - # @see Concurrent::ScheduledTask - # - # @!macro monotonic_clock_warning - class TimerSet < RubyExecutorService - - # Create a new set of timed tasks. - # - # @!macro executor_options - # - # @param [Hash] opts the options used to specify the executor on which to perform actions - # @option opts [Executor] :executor when set use the given `Executor` instance. - # Three special values are also supported: `:task` returns the global task pool, - # `:operation` returns the global operation pool, and `:immediate` returns a new - # `ImmediateExecutor` object. - def initialize(opts = {}) - super(opts) - end - - # Post a task to be execute run after a given delay (in seconds). If the - # delay is less than 1/100th of a second the task will be immediately post - # to the executor. - # - # @param [Float] delay the number of seconds to wait for before executing the task. - # @param [Array] args the arguments passed to the task on execution. - # - # @yield the task to be performed. - # - # @return [Concurrent::ScheduledTask, false] IVar representing the task if the post - # is successful; false after shutdown. - # - # @raise [ArgumentError] if the intended execution time is not in the future. - # @raise [ArgumentError] if no block is given. - def post(delay, *args, &task) - raise ArgumentError.new('no block given') unless block_given? - return false unless running? - opts = { executor: @task_executor, - args: args, - timer_set: self } - task = ScheduledTask.execute(delay, opts, &task) # may raise exception - task.unscheduled? ? false : task - end - - # Begin an immediate shutdown. In-progress tasks will be allowed to - # complete but enqueued tasks will be dismissed and no new tasks - # will be accepted. Has no additional effect if the thread pool is - # not running. - def kill - shutdown - end - - private :<< - - private - - # Initialize the object. - # - # @param [Hash] opts the options to create the object with. - # @!visibility private - def ns_initialize(opts) - @queue = Collection::NonConcurrentPriorityQueue.new(order: :min) - @task_executor = Options.executor_from_options(opts) || Concurrent.global_io_executor - @timer_executor = SingleThreadExecutor.new - @condition = Event.new - @ruby_pid = $$ # detects if Ruby has forked - end - - # Post the task to the internal queue. - # - # @note This is intended as a callback method from ScheduledTask - # only. It is not intended to be used directly. Post a task - # by using the `SchedulesTask#execute` method. - # - # @!visibility private - def post_task(task) - synchronize { ns_post_task(task) } - end - - # @!visibility private - def ns_post_task(task) - return false unless ns_running? - ns_reset_if_forked - if (task.initial_delay) <= 0.01 - task.executor.post { task.process_task } - else - @queue.push(task) - # only post the process method when the queue is empty - @timer_executor.post(&method(:process_tasks)) if @queue.length == 1 - @condition.set - end - true - end - - # Remove the given task from the queue. - # - # @note This is intended as a callback method from `ScheduledTask` - # only. It is not intended to be used directly. Cancel a task - # by using the `ScheduledTask#cancel` method. - # - # @!visibility private - def remove_task(task) - synchronize { @queue.delete(task) } - end - - # `ExecutorService` callback called during shutdown. - # - # @!visibility private - def ns_shutdown_execution - ns_reset_if_forked - @queue.clear - @timer_executor.kill - stopped_event.set - end - - def ns_reset_if_forked - if $$ != @ruby_pid - @queue.clear - @condition.reset - @ruby_pid = $$ - end - end - - # Run a loop and execute tasks in the scheduled order and at the approximate - # scheduled time. If no tasks remain the thread will exit gracefully so that - # garbage collection can occur. If there are no ready tasks it will sleep - # for up to 60 seconds waiting for the next scheduled task. - # - # @!visibility private - def process_tasks - loop do - task = synchronize { @condition.reset; @queue.peek } - break unless task - - now = Concurrent.monotonic_time - diff = task.schedule_time - now - - if diff <= 0 - # We need to remove the task from the queue before passing - # it to the executor, to avoid race conditions where we pass - # the peek'ed task to the executor and then pop a different - # one that's been added in the meantime. - # - # Note that there's no race condition between the peek and - # this pop - this pop could retrieve a different task from - # the peek, but that task would be due to fire now anyway - # (because @queue is a priority queue, and this thread is - # the only reader, so whatever timer is at the head of the - # queue now must have the same pop time, or a closer one, as - # when we peeked). - task = synchronize { @queue.pop } - begin - task.executor.post { task.process_task } - rescue RejectedExecutionError - # ignore and continue - end - else - @condition.wait([diff, 60].min) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executors.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executors.rb deleted file mode 100644 index eb1972ce..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/executors.rb +++ /dev/null @@ -1,20 +0,0 @@ -require 'concurrent/executor/abstract_executor_service' -require 'concurrent/executor/cached_thread_pool' -require 'concurrent/executor/executor_service' -require 'concurrent/executor/fixed_thread_pool' -require 'concurrent/executor/immediate_executor' -require 'concurrent/executor/indirect_immediate_executor' -require 'concurrent/executor/java_executor_service' -require 'concurrent/executor/java_single_thread_executor' -require 'concurrent/executor/java_thread_pool_executor' -require 'concurrent/executor/ruby_executor_service' -require 'concurrent/executor/ruby_single_thread_executor' -require 'concurrent/executor/ruby_thread_pool_executor' -require 'concurrent/executor/cached_thread_pool' -require 'concurrent/executor/safe_task_executor' -require 'concurrent/executor/serial_executor_service' -require 'concurrent/executor/serialized_execution' -require 'concurrent/executor/serialized_execution_delegator' -require 'concurrent/executor/single_thread_executor' -require 'concurrent/executor/thread_pool_executor' -require 'concurrent/executor/timer_set' diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/future.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/future.rb deleted file mode 100644 index 1af182ec..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/future.rb +++ /dev/null @@ -1,141 +0,0 @@ -require 'thread' -require 'concurrent/constants' -require 'concurrent/errors' -require 'concurrent/ivar' -require 'concurrent/executor/safe_task_executor' - -require 'concurrent/options' - -# TODO (pitr-ch 14-Mar-2017): deprecate, Future, Promise, etc. - - -module Concurrent - - # {include:file:docs-source/future.md} - # - # @!macro copy_options - # - # @see http://ruby-doc.org/stdlib-2.1.1/libdoc/observer/rdoc/Observable.html Ruby Observable module - # @see http://clojuredocs.org/clojure_core/clojure.core/future Clojure's future function - # @see http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Future.html java.util.concurrent.Future - class Future < IVar - - # Create a new `Future` in the `:unscheduled` state. - # - # @yield the asynchronous operation to perform - # - # @!macro executor_and_deref_options - # - # @option opts [object, Array] :args zero or more arguments to be passed the task - # block on execution - # - # @raise [ArgumentError] if no block is given - def initialize(opts = {}, &block) - raise ArgumentError.new('no block given') unless block_given? - super(NULL, opts.merge(__task_from_block__: block), &nil) - end - - # Execute an `:unscheduled` `Future`. Immediately sets the state to `:pending` and - # passes the block to a new thread/thread pool for eventual execution. - # Does nothing if the `Future` is in any state other than `:unscheduled`. - # - # @return [Future] a reference to `self` - # - # @example Instance and execute in separate steps - # future = Concurrent::Future.new{ sleep(1); 42 } - # future.state #=> :unscheduled - # future.execute - # future.state #=> :pending - # - # @example Instance and execute in one line - # future = Concurrent::Future.new{ sleep(1); 42 }.execute - # future.state #=> :pending - def execute - if compare_and_set_state(:pending, :unscheduled) - @executor.post{ safe_execute(@task, @args) } - self - end - end - - # Create a new `Future` object with the given block, execute it, and return the - # `:pending` object. - # - # @yield the asynchronous operation to perform - # - # @!macro executor_and_deref_options - # - # @option opts [object, Array] :args zero or more arguments to be passed the task - # block on execution - # - # @raise [ArgumentError] if no block is given - # - # @return [Future] the newly created `Future` in the `:pending` state - # - # @example - # future = Concurrent::Future.execute{ sleep(1); 42 } - # future.state #=> :pending - def self.execute(opts = {}, &block) - Future.new(opts, &block).execute - end - - # @!macro ivar_set_method - def set(value = NULL, &block) - check_for_block_or_value!(block_given?, value) - synchronize do - if @state != :unscheduled - raise MultipleAssignmentError - else - @task = block || Proc.new { value } - end - end - execute - end - - # Attempt to cancel the operation if it has not already processed. - # The operation can only be cancelled while still `pending`. It cannot - # be cancelled once it has begun processing or has completed. - # - # @return [Boolean] was the operation successfully cancelled. - def cancel - if compare_and_set_state(:cancelled, :pending) - complete(false, nil, CancelledOperationError.new) - true - else - false - end - end - - # Has the operation been successfully cancelled? - # - # @return [Boolean] - def cancelled? - state == :cancelled - end - - # Wait the given number of seconds for the operation to complete. - # On timeout attempt to cancel the operation. - # - # @param [Numeric] timeout the maximum time in seconds to wait. - # @return [Boolean] true if the operation completed before the timeout - # else false - def wait_or_cancel(timeout) - wait(timeout) - if complete? - true - else - cancel - false - end - end - - protected - - def ns_initialize(value, opts) - super - @state = :unscheduled - @task = opts[:__task_from_block__] - @executor = Options.executor_from_options(opts) || Concurrent.global_io_executor - @args = get_arguments_from(opts) - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/hash.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/hash.rb deleted file mode 100644 index db0208e0..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/hash.rb +++ /dev/null @@ -1,52 +0,0 @@ -require 'concurrent/utility/engine' -require 'concurrent/thread_safe/util' - -module Concurrent - - # @!macro concurrent_hash - # - # A thread-safe subclass of Hash. This version locks against the object - # itself for every method call, ensuring only one thread can be reading - # or writing at a time. This includes iteration methods like `#each`, - # which takes the lock repeatedly when reading an item. - # - # @see http://ruby-doc.org/core/Hash.html Ruby standard library `Hash` - - # @!macro internal_implementation_note - HashImplementation = case - when Concurrent.on_cruby? - # Hash is not fully thread-safe on CRuby, see - # https://bugs.ruby-lang.org/issues/19237 - # https://github.com/ruby/ruby/commit/ffd52412ab - # https://github.com/ruby-concurrency/concurrent-ruby/issues/929 - # So we will need to add synchronization here (similar to Concurrent::Map). - ::Hash - - when Concurrent.on_jruby? - require 'jruby/synchronized' - - class JRubyHash < ::Hash - include JRuby::Synchronized - end - JRubyHash - - when Concurrent.on_truffleruby? - require 'concurrent/thread_safe/util/data_structures' - - class TruffleRubyHash < ::Hash - end - - ThreadSafe::Util.make_synchronized_on_truffleruby TruffleRubyHash - TruffleRubyHash - - else - warn 'Possibly unsupported Ruby implementation' - ::Hash - end - private_constant :HashImplementation - - # @!macro concurrent_hash - class Hash < HashImplementation - end - -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/immutable_struct.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/immutable_struct.rb deleted file mode 100644 index 48462e83..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/immutable_struct.rb +++ /dev/null @@ -1,101 +0,0 @@ -require 'concurrent/synchronization/abstract_struct' -require 'concurrent/synchronization/lockable_object' - -module Concurrent - - # A thread-safe, immutable variation of Ruby's standard `Struct`. - # - # @see http://ruby-doc.org/core/Struct.html Ruby standard library `Struct` - module ImmutableStruct - include Synchronization::AbstractStruct - - def self.included(base) - base.safe_initialization! - end - - # @!macro struct_values - def values - ns_values - end - - alias_method :to_a, :values - - # @!macro struct_values_at - def values_at(*indexes) - ns_values_at(indexes) - end - - # @!macro struct_inspect - def inspect - ns_inspect - end - - alias_method :to_s, :inspect - - # @!macro struct_merge - def merge(other, &block) - ns_merge(other, &block) - end - - # @!macro struct_to_h - def to_h - ns_to_h - end - - # @!macro struct_get - def [](member) - ns_get(member) - end - - # @!macro struct_equality - def ==(other) - ns_equality(other) - end - - # @!macro struct_each - def each(&block) - return enum_for(:each) unless block_given? - ns_each(&block) - end - - # @!macro struct_each_pair - def each_pair(&block) - return enum_for(:each_pair) unless block_given? - ns_each_pair(&block) - end - - # @!macro struct_select - def select(&block) - return enum_for(:select) unless block_given? - ns_select(&block) - end - - private - - # @!visibility private - def initialize_copy(original) - super(original) - ns_initialize_copy - end - - # @!macro struct_new - def self.new(*args, &block) - clazz_name = nil - if args.length == 0 - raise ArgumentError.new('wrong number of arguments (0 for 1+)') - elsif args.length > 0 && args.first.is_a?(String) - clazz_name = args.shift - end - FACTORY.define_struct(clazz_name, args, &block) - end - - FACTORY = Class.new(Synchronization::LockableObject) do - def define_struct(name, members, &block) - synchronize do - Synchronization::AbstractStruct.define_struct_class(ImmutableStruct, Synchronization::Object, name, members, &block) - end - end - end.new - private_constant :FACTORY - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/ivar.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/ivar.rb deleted file mode 100644 index 4165038f..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/ivar.rb +++ /dev/null @@ -1,208 +0,0 @@ -require 'concurrent/constants' -require 'concurrent/errors' -require 'concurrent/collection/copy_on_write_observer_set' -require 'concurrent/concern/obligation' -require 'concurrent/concern/observable' -require 'concurrent/executor/safe_task_executor' -require 'concurrent/synchronization/lockable_object' - -module Concurrent - - # An `IVar` is like a future that you can assign. As a future is a value that - # is being computed that you can wait on, an `IVar` is a value that is waiting - # to be assigned, that you can wait on. `IVars` are single assignment and - # deterministic. - # - # Then, express futures as an asynchronous computation that assigns an `IVar`. - # The `IVar` becomes the primitive on which [futures](Future) and - # [dataflow](Dataflow) are built. - # - # An `IVar` is a single-element container that is normally created empty, and - # can only be set once. The I in `IVar` stands for immutable. Reading an - # `IVar` normally blocks until it is set. It is safe to set and read an `IVar` - # from different threads. - # - # If you want to have some parallel task set the value in an `IVar`, you want - # a `Future`. If you want to create a graph of parallel tasks all executed - # when the values they depend on are ready you want `dataflow`. `IVar` is - # generally a low-level primitive. - # - # ## Examples - # - # Create, set and get an `IVar` - # - # ```ruby - # ivar = Concurrent::IVar.new - # ivar.set 14 - # ivar.value #=> 14 - # ivar.set 2 # would now be an error - # ``` - # - # ## See Also - # - # 1. For the theory: Arvind, R. Nikhil, and K. Pingali. - # [I-Structures: Data structures for parallel computing](http://dl.acm.org/citation.cfm?id=69562). - # In Proceedings of Workshop on Graph Reduction, 1986. - # 2. For recent application: - # [DataDrivenFuture in Habanero Java from Rice](http://www.cs.rice.edu/~vs3/hjlib/doc/edu/rice/hj/api/HjDataDrivenFuture.html). - class IVar < Synchronization::LockableObject - include Concern::Obligation - include Concern::Observable - - # Create a new `IVar` in the `:pending` state with the (optional) initial value. - # - # @param [Object] value the initial value - # @param [Hash] opts the options to create a message with - # @option opts [String] :dup_on_deref (false) call `#dup` before returning - # the data - # @option opts [String] :freeze_on_deref (false) call `#freeze` before - # returning the data - # @option opts [String] :copy_on_deref (nil) call the given `Proc` passing - # the internal value and returning the value returned from the proc - def initialize(value = NULL, opts = {}, &block) - if value != NULL && block_given? - raise ArgumentError.new('provide only a value or a block') - end - super(&nil) - synchronize { ns_initialize(value, opts, &block) } - end - - # Add an observer on this object that will receive notification on update. - # - # Upon completion the `IVar` will notify all observers in a thread-safe way. - # The `func` method of the observer will be called with three arguments: the - # `Time` at which the `Future` completed the asynchronous operation, the - # final `value` (or `nil` on rejection), and the final `reason` (or `nil` on - # fulfillment). - # - # @param [Object] observer the object that will be notified of changes - # @param [Symbol] func symbol naming the method to call when this - # `Observable` has changes` - def add_observer(observer = nil, func = :update, &block) - raise ArgumentError.new('cannot provide both an observer and a block') if observer && block - direct_notification = false - - if block - observer = block - func = :call - end - - synchronize do - if event.set? - direct_notification = true - else - observers.add_observer(observer, func) - end - end - - observer.send(func, Time.now, self.value, reason) if direct_notification - observer - end - - # @!macro ivar_set_method - # Set the `IVar` to a value and wake or notify all threads waiting on it. - # - # @!macro ivar_set_parameters_and_exceptions - # @param [Object] value the value to store in the `IVar` - # @yield A block operation to use for setting the value - # @raise [ArgumentError] if both a value and a block are given - # @raise [Concurrent::MultipleAssignmentError] if the `IVar` has already - # been set or otherwise completed - # - # @return [IVar] self - def set(value = NULL) - check_for_block_or_value!(block_given?, value) - raise MultipleAssignmentError unless compare_and_set_state(:processing, :pending) - - begin - value = yield if block_given? - complete_without_notification(true, value, nil) - rescue => ex - complete_without_notification(false, nil, ex) - end - - notify_observers(self.value, reason) - self - end - - # @!macro ivar_fail_method - # Set the `IVar` to failed due to some error and wake or notify all threads waiting on it. - # - # @param [Object] reason for the failure - # @raise [Concurrent::MultipleAssignmentError] if the `IVar` has already - # been set or otherwise completed - # @return [IVar] self - def fail(reason = StandardError.new) - complete(false, nil, reason) - end - - # Attempt to set the `IVar` with the given value or block. Return a - # boolean indicating the success or failure of the set operation. - # - # @!macro ivar_set_parameters_and_exceptions - # - # @return [Boolean] true if the value was set else false - def try_set(value = NULL, &block) - set(value, &block) - true - rescue MultipleAssignmentError - false - end - - protected - - # @!visibility private - def ns_initialize(value, opts) - value = yield if block_given? - init_obligation - self.observers = Collection::CopyOnWriteObserverSet.new - set_deref_options(opts) - - @state = :pending - if value != NULL - ns_complete_without_notification(true, value, nil) - end - end - - # @!visibility private - def safe_execute(task, args = []) - if compare_and_set_state(:processing, :pending) - success, val, reason = SafeTaskExecutor.new(task, rescue_exception: true).execute(*@args) - complete(success, val, reason) - yield(success, val, reason) if block_given? - end - end - - # @!visibility private - def complete(success, value, reason) - complete_without_notification(success, value, reason) - notify_observers(self.value, reason) - self - end - - # @!visibility private - def complete_without_notification(success, value, reason) - synchronize { ns_complete_without_notification(success, value, reason) } - self - end - - # @!visibility private - def notify_observers(value, reason) - observers.notify_and_delete_observers{ [Time.now, value, reason] } - end - - # @!visibility private - def ns_complete_without_notification(success, value, reason) - raise MultipleAssignmentError if [:fulfilled, :rejected].include? @state - set_state(success, value, reason) - event.set - end - - # @!visibility private - def check_for_block_or_value!(block_given, value) # :nodoc: - if (block_given && value != NULL) || (! block_given && value == NULL) - raise ArgumentError.new('must set with either a value or a block') - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/map.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/map.rb deleted file mode 100644 index 601e3650..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/map.rb +++ /dev/null @@ -1,350 +0,0 @@ -require 'thread' -require 'concurrent/constants' -require 'concurrent/utility/engine' - -module Concurrent - # @!visibility private - module Collection - - # @!visibility private - MapImplementation = case - when Concurrent.on_jruby? - require 'concurrent/utility/native_extension_loader' - # noinspection RubyResolve - JRubyMapBackend - when Concurrent.on_cruby? - require 'concurrent/collection/map/mri_map_backend' - MriMapBackend - when Concurrent.on_truffleruby? - if defined?(::TruffleRuby::ConcurrentMap) - require 'concurrent/collection/map/truffleruby_map_backend' - TruffleRubyMapBackend - else - require 'concurrent/collection/map/synchronized_map_backend' - SynchronizedMapBackend - end - else - warn 'Concurrent::Map: unsupported Ruby engine, using a fully synchronized Concurrent::Map implementation' - require 'concurrent/collection/map/synchronized_map_backend' - SynchronizedMapBackend - end - end - - # `Concurrent::Map` is a hash-like object and should have much better performance - # characteristics, especially under high concurrency, than `Concurrent::Hash`. - # However, `Concurrent::Map `is not strictly semantically equivalent to a ruby `Hash` - # -- for instance, it does not necessarily retain ordering by insertion time as `Hash` - # does. For most uses it should do fine though, and we recommend you consider - # `Concurrent::Map` instead of `Concurrent::Hash` for your concurrency-safe hash needs. - class Map < Collection::MapImplementation - - # @!macro map.atomic_method - # This method is atomic. - - # @!macro map.atomic_method_with_block - # This method is atomic. - # @note Atomic methods taking a block do not allow the `self` instance - # to be used within the block. Doing so will cause a deadlock. - - # @!method []=(key, value) - # Set a value with key - # @param [Object] key - # @param [Object] value - # @return [Object] the new value - - # @!method compute_if_absent(key) - # Compute and store new value for key if the key is absent. - # @param [Object] key - # @yield new value - # @yieldreturn [Object] new value - # @return [Object] new value or current value - # @!macro map.atomic_method_with_block - - # @!method compute_if_present(key) - # Compute and store new value for key if the key is present. - # @param [Object] key - # @yield new value - # @yieldparam old_value [Object] - # @yieldreturn [Object, nil] new value, when nil the key is removed - # @return [Object, nil] new value or nil - # @!macro map.atomic_method_with_block - - # @!method compute(key) - # Compute and store new value for key. - # @param [Object] key - # @yield compute new value from old one - # @yieldparam old_value [Object, nil] old_value, or nil when key is absent - # @yieldreturn [Object, nil] new value, when nil the key is removed - # @return [Object, nil] new value or nil - # @!macro map.atomic_method_with_block - - # @!method merge_pair(key, value) - # If the key is absent, the value is stored, otherwise new value is - # computed with a block. - # @param [Object] key - # @param [Object] value - # @yield compute new value from old one - # @yieldparam old_value [Object] old value - # @yieldreturn [Object, nil] new value, when nil the key is removed - # @return [Object, nil] new value or nil - # @!macro map.atomic_method_with_block - - # @!method replace_pair(key, old_value, new_value) - # Replaces old_value with new_value if key exists and current value - # matches old_value - # @param [Object] key - # @param [Object] old_value - # @param [Object] new_value - # @return [true, false] true if replaced - # @!macro map.atomic_method - - # @!method replace_if_exists(key, new_value) - # Replaces current value with new_value if key exists - # @param [Object] key - # @param [Object] new_value - # @return [Object, nil] old value or nil - # @!macro map.atomic_method - - # @!method get_and_set(key, value) - # Get the current value under key and set new value. - # @param [Object] key - # @param [Object] value - # @return [Object, nil] old value or nil when the key was absent - # @!macro map.atomic_method - - # @!method delete(key) - # Delete key and its value. - # @param [Object] key - # @return [Object, nil] old value or nil when the key was absent - # @!macro map.atomic_method - - # @!method delete_pair(key, value) - # Delete pair and its value if current value equals the provided value. - # @param [Object] key - # @param [Object] value - # @return [true, false] true if deleted - # @!macro map.atomic_method - - # NonConcurrentMapBackend handles default_proc natively - unless defined?(Collection::NonConcurrentMapBackend) and self < Collection::NonConcurrentMapBackend - - # @param [Hash, nil] options options to set the :initial_capacity or :load_factor. Ignored on some Rubies. - # @param [Proc] default_proc Optional block to compute the default value if the key is not set, like `Hash#default_proc` - def initialize(options = nil, &default_proc) - if options.kind_of?(::Hash) - validate_options_hash!(options) - else - options = nil - end - - super(options) - @default_proc = default_proc - end - - # Get a value with key - # @param [Object] key - # @return [Object] the value - def [](key) - if value = super # non-falsy value is an existing mapping, return it right away - value - # re-check is done with get_or_default(key, NULL) instead of a simple !key?(key) in order to avoid a race condition, whereby by the time the current thread gets to the key?(key) call - # a key => value mapping might have already been created by a different thread (key?(key) would then return true, this elsif branch wouldn't be taken and an incorrent +nil+ value - # would be returned) - # note: nil == value check is not technically necessary - elsif @default_proc && nil == value && NULL == (value = get_or_default(key, NULL)) - @default_proc.call(self, key) - else - value - end - end - end - - alias_method :get, :[] - alias_method :put, :[]= - - # Get a value with key, or default_value when key is absent, - # or fail when no default_value is given. - # @param [Object] key - # @param [Object] default_value - # @yield default value for a key - # @yieldparam key [Object] - # @yieldreturn [Object] default value - # @return [Object] the value or default value - # @raise [KeyError] when key is missing and no default_value is provided - # @!macro map_method_not_atomic - # @note The "fetch-then-act" methods of `Map` are not atomic. `Map` is intended - # to be use as a concurrency primitive with strong happens-before - # guarantees. It is not intended to be used as a high-level abstraction - # supporting complex operations. All read and write operations are - # thread safe, but no guarantees are made regarding race conditions - # between the fetch operation and yielding to the block. Additionally, - # this method does not support recursion. This is due to internal - # constraints that are very unlikely to change in the near future. - def fetch(key, default_value = NULL) - if NULL != (value = get_or_default(key, NULL)) - value - elsif block_given? - yield key - elsif NULL != default_value - default_value - else - raise_fetch_no_key - end - end - - # Fetch value with key, or store default value when key is absent, - # or fail when no default_value is given. This is a two step operation, - # therefore not atomic. The store can overwrite other concurrently - # stored value. - # @param [Object] key - # @param [Object] default_value - # @yield default value for a key - # @yieldparam key [Object] - # @yieldreturn [Object] default value - # @return [Object] the value or default value - def fetch_or_store(key, default_value = NULL) - fetch(key) do - put(key, block_given? ? yield(key) : (NULL == default_value ? raise_fetch_no_key : default_value)) - end - end - - # Insert value into map with key if key is absent in one atomic step. - # @param [Object] key - # @param [Object] value - # @return [Object, nil] the previous value when key was present or nil when there was no key - def put_if_absent(key, value) - computed = false - result = compute_if_absent(key) do - computed = true - value - end - computed ? nil : result - end unless method_defined?(:put_if_absent) - - # Is the value stored in the map. Iterates over all values. - # @param [Object] value - # @return [true, false] - def value?(value) - each_value do |v| - return true if value.equal?(v) - end - false - end - - # All keys - # @return [::Array] keys - def keys - arr = [] - each_pair { |k, v| arr << k } - arr - end unless method_defined?(:keys) - - # All values - # @return [::Array] values - def values - arr = [] - each_pair { |k, v| arr << v } - arr - end unless method_defined?(:values) - - # Iterates over each key. - # @yield for each key in the map - # @yieldparam key [Object] - # @return [self] - # @!macro map.atomic_method_with_block - def each_key - each_pair { |k, v| yield k } - end unless method_defined?(:each_key) - - # Iterates over each value. - # @yield for each value in the map - # @yieldparam value [Object] - # @return [self] - # @!macro map.atomic_method_with_block - def each_value - each_pair { |k, v| yield v } - end unless method_defined?(:each_value) - - # Iterates over each key value pair. - # @yield for each key value pair in the map - # @yieldparam key [Object] - # @yieldparam value [Object] - # @return [self] - # @!macro map.atomic_method_with_block - def each_pair - return enum_for :each_pair unless block_given? - super - end - - alias_method :each, :each_pair unless method_defined?(:each) - - # Find key of a value. - # @param [Object] value - # @return [Object, nil] key or nil when not found - def key(value) - each_pair { |k, v| return k if v == value } - nil - end unless method_defined?(:key) - - # Is map empty? - # @return [true, false] - def empty? - each_pair { |k, v| return false } - true - end unless method_defined?(:empty?) - - # The size of map. - # @return [Integer] size - def size - count = 0 - each_pair { |k, v| count += 1 } - count - end unless method_defined?(:size) - - # @!visibility private - def marshal_dump - raise TypeError, "can't dump hash with default proc" if @default_proc - h = {} - each_pair { |k, v| h[k] = v } - h - end - - # @!visibility private - def marshal_load(hash) - initialize - populate_from(hash) - end - - undef :freeze - - # @!visibility private - def inspect - format '%s entries=%d default_proc=%s>', to_s[0..-2], size.to_s, @default_proc.inspect - end - - private - - def raise_fetch_no_key - raise KeyError, 'key not found' - end - - def initialize_copy(other) - super - populate_from(other) - end - - def populate_from(hash) - hash.each_pair { |k, v| self[k] = v } - self - end - - def validate_options_hash!(options) - if (initial_capacity = options[:initial_capacity]) && (!initial_capacity.kind_of?(Integer) || initial_capacity < 0) - raise ArgumentError, ":initial_capacity must be a positive Integer" - end - if (load_factor = options[:load_factor]) && (!load_factor.kind_of?(Numeric) || load_factor <= 0 || load_factor > 1) - raise ArgumentError, ":load_factor must be a number between 0 and 1" - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/maybe.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/maybe.rb deleted file mode 100644 index 317c82b8..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/maybe.rb +++ /dev/null @@ -1,229 +0,0 @@ -require 'concurrent/synchronization/object' - -module Concurrent - - # A `Maybe` encapsulates an optional value. A `Maybe` either contains a value - # of (represented as `Just`), or it is empty (represented as `Nothing`). Using - # `Maybe` is a good way to deal with errors or exceptional cases without - # resorting to drastic measures such as exceptions. - # - # `Maybe` is a replacement for the use of `nil` with better type checking. - # - # For compatibility with {Concurrent::Concern::Obligation} the predicate and - # accessor methods are aliased as `fulfilled?`, `rejected?`, `value`, and - # `reason`. - # - # ## Motivation - # - # A common pattern in languages with pattern matching, such as Erlang and - # Haskell, is to return *either* a value *or* an error from a function - # Consider this Erlang code: - # - # ```erlang - # case file:consult("data.dat") of - # {ok, Terms} -> do_something_useful(Terms); - # {error, Reason} -> lager:error(Reason) - # end. - # ``` - # - # In this example the standard library function `file:consult` returns a - # [tuple](http://erlang.org/doc/reference_manual/data_types.html#id69044) - # with two elements: an [atom](http://erlang.org/doc/reference_manual/data_types.html#id64134) - # (similar to a ruby symbol) and a variable containing ancillary data. On - # success it returns the atom `ok` and the data from the file. On failure it - # returns `error` and a string with an explanation of the problem. With this - # pattern there is no ambiguity regarding success or failure. If the file is - # empty the return value cannot be misinterpreted as an error. And when an - # error occurs the return value provides useful information. - # - # In Ruby we tend to return `nil` when an error occurs or else we raise an - # exception. Both of these idioms are problematic. Returning `nil` is - # ambiguous because `nil` may also be a valid value. It also lacks - # information pertaining to the nature of the error. Raising an exception - # is both expensive and usurps the normal flow of control. All of these - # problems can be solved with the use of a `Maybe`. - # - # A `Maybe` is unambiguous with regard to whether or not it contains a value. - # When `Just` it contains a value, when `Nothing` it does not. When `Just` - # the value it contains may be `nil`, which is perfectly valid. When - # `Nothing` the reason for the lack of a value is contained as well. The - # previous Erlang example can be duplicated in Ruby in a principled way by - # having functions return `Maybe` objects: - # - # ```ruby - # result = MyFileUtils.consult("data.dat") # returns a Maybe - # if result.just? - # do_something_useful(result.value) # or result.just - # else - # logger.error(result.reason) # or result.nothing - # end - # ``` - # - # @example Returning a Maybe from a Function - # module MyFileUtils - # def self.consult(path) - # file = File.open(path, 'r') - # Concurrent::Maybe.just(file.read) - # rescue => ex - # return Concurrent::Maybe.nothing(ex) - # ensure - # file.close if file - # end - # end - # - # maybe = MyFileUtils.consult('bogus.file') - # maybe.just? #=> false - # maybe.nothing? #=> true - # maybe.reason #=> # - # - # maybe = MyFileUtils.consult('README.md') - # maybe.just? #=> true - # maybe.nothing? #=> false - # maybe.value #=> "# Concurrent Ruby\n[![Gem Version..." - # - # @example Using Maybe with a Block - # result = Concurrent::Maybe.from do - # Client.find(10) # Client is an ActiveRecord model - # end - # - # # -- if the record was found - # result.just? #=> true - # result.value #=> # - # - # # -- if the record was not found - # result.just? #=> false - # result.reason #=> ActiveRecord::RecordNotFound - # - # @example Using Maybe with the Null Object Pattern - # # In a Rails controller... - # result = ClientService.new(10).find # returns a Maybe - # render json: result.or(NullClient.new) - # - # @see https://hackage.haskell.org/package/base-4.2.0.1/docs/Data-Maybe.html Haskell Data.Maybe - # @see https://github.com/purescript/purescript-maybe/blob/master/docs/Data.Maybe.md PureScript Data.Maybe - class Maybe < Synchronization::Object - include Comparable - safe_initialization! - - # Indicates that the given attribute has not been set. - # When `Just` the {#nothing} getter will return `NONE`. - # When `Nothing` the {#just} getter will return `NONE`. - NONE = ::Object.new.freeze - - # The value of a `Maybe` when `Just`. Will be `NONE` when `Nothing`. - attr_reader :just - - # The reason for the `Maybe` when `Nothing`. Will be `NONE` when `Just`. - attr_reader :nothing - - private_class_method :new - - # Create a new `Maybe` using the given block. - # - # Runs the given block passing all function arguments to the block as block - # arguments. If the block runs to completion without raising an exception - # a new `Just` is created with the value set to the return value of the - # block. If the block raises an exception a new `Nothing` is created with - # the reason being set to the raised exception. - # - # @param [Array] args Zero or more arguments to pass to the block. - # @yield The block from which to create a new `Maybe`. - # @yieldparam [Array] args Zero or more block arguments passed as - # arguments to the function. - # - # @return [Maybe] The newly created object. - # - # @raise [ArgumentError] when no block given. - def self.from(*args) - raise ArgumentError.new('no block given') unless block_given? - begin - value = yield(*args) - return new(value, NONE) - rescue => ex - return new(NONE, ex) - end - end - - # Create a new `Just` with the given value. - # - # @param [Object] value The value to set for the new `Maybe` object. - # - # @return [Maybe] The newly created object. - def self.just(value) - return new(value, NONE) - end - - # Create a new `Nothing` with the given (optional) reason. - # - # @param [Exception] error The reason to set for the new `Maybe` object. - # When given a string a new `StandardError` will be created with the - # argument as the message. When no argument is given a new - # `StandardError` with an empty message will be created. - # - # @return [Maybe] The newly created object. - def self.nothing(error = '') - if error.is_a?(Exception) - nothing = error - else - nothing = StandardError.new(error.to_s) - end - return new(NONE, nothing) - end - - # Is this `Maybe` a `Just` (successfully fulfilled with a value)? - # - # @return [Boolean] True if `Just` or false if `Nothing`. - def just? - ! nothing? - end - alias :fulfilled? :just? - - # Is this `Maybe` a `nothing` (rejected with an exception upon fulfillment)? - # - # @return [Boolean] True if `Nothing` or false if `Just`. - def nothing? - @nothing != NONE - end - alias :rejected? :nothing? - - alias :value :just - - alias :reason :nothing - - # Comparison operator. - # - # @return [Integer] 0 if self and other are both `Nothing`; - # -1 if self is `Nothing` and other is `Just`; - # 1 if self is `Just` and other is nothing; - # `self.just <=> other.just` if both self and other are `Just`. - def <=>(other) - if nothing? - other.nothing? ? 0 : -1 - else - other.nothing? ? 1 : just <=> other.just - end - end - - # Return either the value of self or the given default value. - # - # @return [Object] The value of self when `Just`; else the given default. - def or(other) - just? ? just : other - end - - private - - # Create a new `Maybe` with the given attributes. - # - # @param [Object] just The value when `Just` else `NONE`. - # @param [Exception, Object] nothing The exception when `Nothing` else `NONE`. - # - # @return [Maybe] The new `Maybe`. - # - # @!visibility private - def initialize(just, nothing) - @just = just - @nothing = nothing - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/mutable_struct.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/mutable_struct.rb deleted file mode 100644 index 5d0e9b9a..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/mutable_struct.rb +++ /dev/null @@ -1,239 +0,0 @@ -require 'concurrent/synchronization/abstract_struct' -require 'concurrent/synchronization/lockable_object' - -module Concurrent - - # An thread-safe variation of Ruby's standard `Struct`. Values can be set at - # construction or safely changed at any time during the object's lifecycle. - # - # @see http://ruby-doc.org/core/Struct.html Ruby standard library `Struct` - module MutableStruct - include Synchronization::AbstractStruct - - # @!macro struct_new - # - # Factory for creating new struct classes. - # - # ``` - # new([class_name] [, member_name]+>) -> StructClass click to toggle source - # new([class_name] [, member_name]+>) {|StructClass| block } -> StructClass - # new(value, ...) -> obj - # StructClass[value, ...] -> obj - # ``` - # - # The first two forms are used to create a new struct subclass `class_name` - # that can contain a value for each member_name . This subclass can be - # used to create instances of the structure like any other Class . - # - # If the `class_name` is omitted an anonymous struct class will be created. - # Otherwise, the name of this struct will appear as a constant in the struct class, - # so it must be unique for all structs under this base class and must start with a - # capital letter. Assigning a struct class to a constant also gives the class - # the name of the constant. - # - # If a block is given it will be evaluated in the context of `StructClass`, passing - # the created class as a parameter. This is the recommended way to customize a struct. - # Subclassing an anonymous struct creates an extra anonymous class that will never be used. - # - # The last two forms create a new instance of a struct subclass. The number of value - # parameters must be less than or equal to the number of attributes defined for the - # struct. Unset parameters default to nil. Passing more parameters than number of attributes - # will raise an `ArgumentError`. - # - # @see http://ruby-doc.org/core/Struct.html#method-c-new Ruby standard library `Struct#new` - - # @!macro struct_values - # - # Returns the values for this struct as an Array. - # - # @return [Array] the values for this struct - # - def values - synchronize { ns_values } - end - alias_method :to_a, :values - - # @!macro struct_values_at - # - # Returns the struct member values for each selector as an Array. - # - # A selector may be either an Integer offset or a Range of offsets (as in `Array#values_at`). - # - # @param [Fixnum, Range] indexes the index(es) from which to obatin the values (in order) - def values_at(*indexes) - synchronize { ns_values_at(indexes) } - end - - # @!macro struct_inspect - # - # Describe the contents of this struct in a string. - # - # @return [String] the contents of this struct in a string - def inspect - synchronize { ns_inspect } - end - alias_method :to_s, :inspect - - # @!macro struct_merge - # - # Returns a new struct containing the contents of `other` and the contents - # of `self`. If no block is specified, the value for entries with duplicate - # keys will be that of `other`. Otherwise the value for each duplicate key - # is determined by calling the block with the key, its value in `self` and - # its value in `other`. - # - # @param [Hash] other the hash from which to set the new values - # @yield an options block for resolving duplicate keys - # @yieldparam [String, Symbol] member the name of the member which is duplicated - # @yieldparam [Object] selfvalue the value of the member in `self` - # @yieldparam [Object] othervalue the value of the member in `other` - # - # @return [Synchronization::AbstractStruct] a new struct with the new values - # - # @raise [ArgumentError] of given a member that is not defined in the struct - def merge(other, &block) - synchronize { ns_merge(other, &block) } - end - - # @!macro struct_to_h - # - # Returns a hash containing the names and values for the struct’s members. - # - # @return [Hash] the names and values for the struct’s members - def to_h - synchronize { ns_to_h } - end - - # @!macro struct_get - # - # Attribute Reference - # - # @param [Symbol, String, Integer] member the string or symbol name of the member - # for which to obtain the value or the member's index - # - # @return [Object] the value of the given struct member or the member at the given index. - # - # @raise [NameError] if the member does not exist - # @raise [IndexError] if the index is out of range. - def [](member) - synchronize { ns_get(member) } - end - - # @!macro struct_equality - # - # Equality - # - # @return [Boolean] true if other has the same struct subclass and has - # equal member values (according to `Object#==`) - def ==(other) - synchronize { ns_equality(other) } - end - - # @!macro struct_each - # - # Yields the value of each struct member in order. If no block is given - # an enumerator is returned. - # - # @yield the operation to be performed on each struct member - # @yieldparam [Object] value each struct value (in order) - def each(&block) - return enum_for(:each) unless block_given? - synchronize { ns_each(&block) } - end - - # @!macro struct_each_pair - # - # Yields the name and value of each struct member in order. If no block is - # given an enumerator is returned. - # - # @yield the operation to be performed on each struct member/value pair - # @yieldparam [Object] member each struct member (in order) - # @yieldparam [Object] value each struct value (in order) - def each_pair(&block) - return enum_for(:each_pair) unless block_given? - synchronize { ns_each_pair(&block) } - end - - # @!macro struct_select - # - # Yields each member value from the struct to the block and returns an Array - # containing the member values from the struct for which the given block - # returns a true value (equivalent to `Enumerable#select`). - # - # @yield the operation to be performed on each struct member - # @yieldparam [Object] value each struct value (in order) - # - # @return [Array] an array containing each value for which the block returns true - def select(&block) - return enum_for(:select) unless block_given? - synchronize { ns_select(&block) } - end - - # @!macro struct_set - # - # Attribute Assignment - # - # Sets the value of the given struct member or the member at the given index. - # - # @param [Symbol, String, Integer] member the string or symbol name of the member - # for which to obtain the value or the member's index - # - # @return [Object] the value of the given struct member or the member at the given index. - # - # @raise [NameError] if the name does not exist - # @raise [IndexError] if the index is out of range. - def []=(member, value) - if member.is_a? Integer - length = synchronize { @values.length } - if member >= length - raise IndexError.new("offset #{member} too large for struct(size:#{length})") - end - synchronize { @values[member] = value } - else - send("#{member}=", value) - end - rescue NoMethodError - raise NameError.new("no member '#{member}' in struct") - end - - private - - # @!visibility private - def initialize_copy(original) - synchronize do - super(original) - ns_initialize_copy - end - end - - # @!macro struct_new - def self.new(*args, &block) - clazz_name = nil - if args.length == 0 - raise ArgumentError.new('wrong number of arguments (0 for 1+)') - elsif args.length > 0 && args.first.is_a?(String) - clazz_name = args.shift - end - FACTORY.define_struct(clazz_name, args, &block) - end - - FACTORY = Class.new(Synchronization::LockableObject) do - def define_struct(name, members, &block) - synchronize do - clazz = Synchronization::AbstractStruct.define_struct_class(MutableStruct, Synchronization::LockableObject, name, members, &block) - members.each_with_index do |member, index| - clazz.send :remove_method, member - clazz.send(:define_method, member) do - synchronize { @values[index] } - end - clazz.send(:define_method, "#{member}=") do |value| - synchronize { @values[index] = value } - end - end - clazz - end - end - end.new - private_constant :FACTORY - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/mvar.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/mvar.rb deleted file mode 100644 index dfc41950..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/mvar.rb +++ /dev/null @@ -1,242 +0,0 @@ -require 'concurrent/concern/dereferenceable' -require 'concurrent/synchronization/object' - -module Concurrent - - # An `MVar` is a synchronized single element container. They are empty or - # contain one item. Taking a value from an empty `MVar` blocks, as does - # putting a value into a full one. You can either think of them as blocking - # queue of length one, or a special kind of mutable variable. - # - # On top of the fundamental `#put` and `#take` operations, we also provide a - # `#mutate` that is atomic with respect to operations on the same instance. - # These operations all support timeouts. - # - # We also support non-blocking operations `#try_put!` and `#try_take!`, a - # `#set!` that ignores existing values, a `#value` that returns the value - # without removing it or returns `MVar::EMPTY`, and a `#modify!` that yields - # `MVar::EMPTY` if the `MVar` is empty and can be used to set `MVar::EMPTY`. - # You shouldn't use these operations in the first instance. - # - # `MVar` is a [Dereferenceable](Dereferenceable). - # - # `MVar` is related to M-structures in Id, `MVar` in Haskell and `SyncVar` in Scala. - # - # Note that unlike the original Haskell paper, our `#take` is blocking. This is how - # Haskell and Scala do it today. - # - # @!macro copy_options - # - # ## See Also - # - # 1. P. Barth, R. Nikhil, and Arvind. [M-Structures: Extending a parallel, non- strict, functional language with state](http://dl.acm.org/citation.cfm?id=652538). In Proceedings of the 5th - # ACM Conference on Functional Programming Languages and Computer Architecture (FPCA), 1991. - # - # 2. S. Peyton Jones, A. Gordon, and S. Finne. [Concurrent Haskell](http://dl.acm.org/citation.cfm?id=237794). - # In Proceedings of the 23rd Symposium on Principles of Programming Languages - # (PoPL), 1996. - class MVar < Synchronization::Object - include Concern::Dereferenceable - safe_initialization! - - # Unique value that represents that an `MVar` was empty - EMPTY = ::Object.new - - # Unique value that represents that an `MVar` timed out before it was able - # to produce a value. - TIMEOUT = ::Object.new - - # Create a new `MVar`, either empty or with an initial value. - # - # @param [Hash] opts the options controlling how the future will be processed - # - # @!macro deref_options - def initialize(value = EMPTY, opts = {}) - @value = value - @mutex = Mutex.new - @empty_condition = ConditionVariable.new - @full_condition = ConditionVariable.new - set_deref_options(opts) - end - - # Remove the value from an `MVar`, leaving it empty, and blocking if there - # isn't a value. A timeout can be set to limit the time spent blocked, in - # which case it returns `TIMEOUT` if the time is exceeded. - # @return [Object] the value that was taken, or `TIMEOUT` - def take(timeout = nil) - @mutex.synchronize do - wait_for_full(timeout) - - # If we timed out we'll still be empty - if unlocked_full? - value = @value - @value = EMPTY - @empty_condition.signal - apply_deref_options(value) - else - TIMEOUT - end - end - end - - # acquires lock on the from an `MVAR`, yields the value to provided block, - # and release lock. A timeout can be set to limit the time spent blocked, - # in which case it returns `TIMEOUT` if the time is exceeded. - # @return [Object] the value returned by the block, or `TIMEOUT` - def borrow(timeout = nil) - @mutex.synchronize do - wait_for_full(timeout) - - # if we timeoud out we'll still be empty - if unlocked_full? - yield @value - else - TIMEOUT - end - end - end - - # Put a value into an `MVar`, blocking if there is already a value until - # it is empty. A timeout can be set to limit the time spent blocked, in - # which case it returns `TIMEOUT` if the time is exceeded. - # @return [Object] the value that was put, or `TIMEOUT` - def put(value, timeout = nil) - @mutex.synchronize do - wait_for_empty(timeout) - - # If we timed out we won't be empty - if unlocked_empty? - @value = value - @full_condition.signal - apply_deref_options(value) - else - TIMEOUT - end - end - end - - # Atomically `take`, yield the value to a block for transformation, and then - # `put` the transformed value. Returns the transformed value. A timeout can - # be set to limit the time spent blocked, in which case it returns `TIMEOUT` - # if the time is exceeded. - # @return [Object] the transformed value, or `TIMEOUT` - def modify(timeout = nil) - raise ArgumentError.new('no block given') unless block_given? - - @mutex.synchronize do - wait_for_full(timeout) - - # If we timed out we'll still be empty - if unlocked_full? - value = @value - @value = yield value - @full_condition.signal - apply_deref_options(value) - else - TIMEOUT - end - end - end - - # Non-blocking version of `take`, that returns `EMPTY` instead of blocking. - def try_take! - @mutex.synchronize do - if unlocked_full? - value = @value - @value = EMPTY - @empty_condition.signal - apply_deref_options(value) - else - EMPTY - end - end - end - - # Non-blocking version of `put`, that returns whether or not it was successful. - def try_put!(value) - @mutex.synchronize do - if unlocked_empty? - @value = value - @full_condition.signal - true - else - false - end - end - end - - # Non-blocking version of `put` that will overwrite an existing value. - def set!(value) - @mutex.synchronize do - old_value = @value - @value = value - @full_condition.signal - apply_deref_options(old_value) - end - end - - # Non-blocking version of `modify` that will yield with `EMPTY` if there is no value yet. - def modify! - raise ArgumentError.new('no block given') unless block_given? - - @mutex.synchronize do - value = @value - @value = yield value - if unlocked_empty? - @empty_condition.signal - else - @full_condition.signal - end - apply_deref_options(value) - end - end - - # Returns if the `MVar` is currently empty. - def empty? - @mutex.synchronize { @value == EMPTY } - end - - # Returns if the `MVar` currently contains a value. - def full? - !empty? - end - - protected - - def synchronize(&block) - @mutex.synchronize(&block) - end - - private - - def unlocked_empty? - @value == EMPTY - end - - def unlocked_full? - ! unlocked_empty? - end - - def wait_for_full(timeout) - wait_while(@full_condition, timeout) { unlocked_empty? } - end - - def wait_for_empty(timeout) - wait_while(@empty_condition, timeout) { unlocked_full? } - end - - def wait_while(condition, timeout) - if timeout.nil? - while yield - condition.wait(@mutex) - end - else - stop = Concurrent.monotonic_time + timeout - while yield && timeout > 0.0 - condition.wait(@mutex, timeout) - timeout = stop - Concurrent.monotonic_time - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/options.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/options.rb deleted file mode 100644 index bdd22a9d..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/options.rb +++ /dev/null @@ -1,42 +0,0 @@ -require 'concurrent/configuration' - -module Concurrent - - # @!visibility private - module Options - - # Get the requested `Executor` based on the values set in the options hash. - # - # @param [Hash] opts the options defining the requested executor - # @option opts [Executor] :executor when set use the given `Executor` instance. - # Three special values are also supported: `:fast` returns the global fast executor, - # `:io` returns the global io executor, and `:immediate` returns a new - # `ImmediateExecutor` object. - # - # @return [Executor, nil] the requested thread pool, or nil when no option specified - # - # @!visibility private - def self.executor_from_options(opts = {}) # :nodoc: - if identifier = opts.fetch(:executor, nil) - executor(identifier) - else - nil - end - end - - def self.executor(executor_identifier) - case executor_identifier - when :fast - Concurrent.global_fast_executor - when :io - Concurrent.global_io_executor - when :immediate - Concurrent.global_immediate_executor - when Concurrent::ExecutorService - executor_identifier - else - raise ArgumentError, "executor not recognized by '#{executor_identifier}'" - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/promise.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/promise.rb deleted file mode 100644 index ccc47dd6..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/promise.rb +++ /dev/null @@ -1,580 +0,0 @@ -require 'thread' -require 'concurrent/constants' -require 'concurrent/errors' -require 'concurrent/ivar' -require 'concurrent/executor/safe_task_executor' - -require 'concurrent/options' - -module Concurrent - - PromiseExecutionError = Class.new(StandardError) - - # Promises are inspired by the JavaScript [Promises/A](http://wiki.commonjs.org/wiki/Promises/A) - # and [Promises/A+](http://promises-aplus.github.io/promises-spec/) specifications. - # - # > A promise represents the eventual value returned from the single - # > completion of an operation. - # - # Promises are similar to futures and share many of the same behaviours. - # Promises are far more robust, however. Promises can be chained in a tree - # structure where each promise may have zero or more children. Promises are - # chained using the `then` method. The result of a call to `then` is always - # another promise. Promises are resolved asynchronously (with respect to the - # main thread) but in a strict order: parents are guaranteed to be resolved - # before their children, children before their younger siblings. The `then` - # method takes two parameters: an optional block to be executed upon parent - # resolution and an optional callable to be executed upon parent failure. The - # result of each promise is passed to each of its children upon resolution. - # When a promise is rejected all its children will be summarily rejected and - # will receive the reason. - # - # Promises have several possible states: *:unscheduled*, *:pending*, - # *:processing*, *:rejected*, or *:fulfilled*. These are also aggregated as - # `#incomplete?` and `#complete?`. When a Promise is created it is set to - # *:unscheduled*. Once the `#execute` method is called the state becomes - # *:pending*. Once a job is pulled from the thread pool's queue and is given - # to a thread for processing (often immediately upon `#post`) the state - # becomes *:processing*. The future will remain in this state until processing - # is complete. A future that is in the *:unscheduled*, *:pending*, or - # *:processing* is considered `#incomplete?`. A `#complete?` Promise is either - # *:rejected*, indicating that an exception was thrown during processing, or - # *:fulfilled*, indicating success. If a Promise is *:fulfilled* its `#value` - # will be updated to reflect the result of the operation. If *:rejected* the - # `reason` will be updated with a reference to the thrown exception. The - # predicate methods `#unscheduled?`, `#pending?`, `#rejected?`, and - # `#fulfilled?` can be called at any time to obtain the state of the Promise, - # as can the `#state` method, which returns a symbol. - # - # Retrieving the value of a promise is done through the `value` (alias: - # `deref`) method. Obtaining the value of a promise is a potentially blocking - # operation. When a promise is *rejected* a call to `value` will return `nil` - # immediately. When a promise is *fulfilled* a call to `value` will - # immediately return the current value. When a promise is *pending* a call to - # `value` will block until the promise is either *rejected* or *fulfilled*. A - # *timeout* value can be passed to `value` to limit how long the call will - # block. If `nil` the call will block indefinitely. If `0` the call will not - # block. Any other integer or float value will indicate the maximum number of - # seconds to block. - # - # Promises run on the global thread pool. - # - # @!macro copy_options - # - # ### Examples - # - # Start by requiring promises - # - # ```ruby - # require 'concurrent/promise' - # ``` - # - # Then create one - # - # ```ruby - # p = Concurrent::Promise.execute do - # # do something - # 42 - # end - # ``` - # - # Promises can be chained using the `then` method. The `then` method accepts a - # block and an executor, to be executed on fulfillment, and a callable argument to be executed - # on rejection. The result of the each promise is passed as the block argument - # to chained promises. - # - # ```ruby - # p = Concurrent::Promise.new{10}.then{|x| x * 2}.then{|result| result - 10 }.execute - # ``` - # - # And so on, and so on, and so on... - # - # ```ruby - # p = Concurrent::Promise.fulfill(20). - # then{|result| result - 10 }. - # then{|result| result * 3 }. - # then(executor: different_executor){|result| result % 5 }.execute - # ``` - # - # The initial state of a newly created Promise depends on the state of its parent: - # - if parent is *unscheduled* the child will be *unscheduled* - # - if parent is *pending* the child will be *pending* - # - if parent is *fulfilled* the child will be *pending* - # - if parent is *rejected* the child will be *pending* (but will ultimately be *rejected*) - # - # Promises are executed asynchronously from the main thread. By the time a - # child Promise finishes intialization it may be in a different state than its - # parent (by the time a child is created its parent may have completed - # execution and changed state). Despite being asynchronous, however, the order - # of execution of Promise objects in a chain (or tree) is strictly defined. - # - # There are multiple ways to create and execute a new `Promise`. Both ways - # provide identical behavior: - # - # ```ruby - # # create, operate, then execute - # p1 = Concurrent::Promise.new{ "Hello World!" } - # p1.state #=> :unscheduled - # p1.execute - # - # # create and immediately execute - # p2 = Concurrent::Promise.new{ "Hello World!" }.execute - # - # # execute during creation - # p3 = Concurrent::Promise.execute{ "Hello World!" } - # ``` - # - # Once the `execute` method is called a `Promise` becomes `pending`: - # - # ```ruby - # p = Concurrent::Promise.execute{ "Hello, world!" } - # p.state #=> :pending - # p.pending? #=> true - # ``` - # - # Wait a little bit, and the promise will resolve and provide a value: - # - # ```ruby - # p = Concurrent::Promise.execute{ "Hello, world!" } - # sleep(0.1) - # - # p.state #=> :fulfilled - # p.fulfilled? #=> true - # p.value #=> "Hello, world!" - # ``` - # - # If an exception occurs, the promise will be rejected and will provide - # a reason for the rejection: - # - # ```ruby - # p = Concurrent::Promise.execute{ raise StandardError.new("Here comes the Boom!") } - # sleep(0.1) - # - # p.state #=> :rejected - # p.rejected? #=> true - # p.reason #=> "#" - # ``` - # - # #### Rejection - # - # When a promise is rejected all its children will be rejected and will - # receive the rejection `reason` as the rejection callable parameter: - # - # ```ruby - # p = Concurrent::Promise.execute { Thread.pass; raise StandardError } - # - # c1 = p.then(-> reason { 42 }) - # c2 = p.then(-> reason { raise 'Boom!' }) - # - # c1.wait.state #=> :fulfilled - # c1.value #=> 45 - # c2.wait.state #=> :rejected - # c2.reason #=> # - # ``` - # - # Once a promise is rejected it will continue to accept children that will - # receive immediately rejection (they will be executed asynchronously). - # - # #### Aliases - # - # The `then` method is the most generic alias: it accepts a block to be - # executed upon parent fulfillment and a callable to be executed upon parent - # rejection. At least one of them should be passed. The default block is `{ - # |result| result }` that fulfills the child with the parent value. The - # default callable is `{ |reason| raise reason }` that rejects the child with - # the parent reason. - # - # - `on_success { |result| ... }` is the same as `then {|result| ... }` - # - `rescue { |reason| ... }` is the same as `then(Proc.new { |reason| ... } )` - # - `rescue` is aliased by `catch` and `on_error` - class Promise < IVar - - # Initialize a new Promise with the provided options. - # - # @!macro executor_and_deref_options - # - # @!macro promise_init_options - # - # @option opts [Promise] :parent the parent `Promise` when building a chain/tree - # @option opts [Proc] :on_fulfill fulfillment handler - # @option opts [Proc] :on_reject rejection handler - # @option opts [object, Array] :args zero or more arguments to be passed - # the task block on execution - # - # @yield The block operation to be performed asynchronously. - # - # @raise [ArgumentError] if no block is given - # - # @see http://wiki.commonjs.org/wiki/Promises/A - # @see http://promises-aplus.github.io/promises-spec/ - def initialize(opts = {}, &block) - opts.delete_if { |k, v| v.nil? } - super(NULL, opts.merge(__promise_body_from_block__: block), &nil) - end - - # Create a new `Promise` and fulfill it immediately. - # - # @!macro executor_and_deref_options - # - # @!macro promise_init_options - # - # @raise [ArgumentError] if no block is given - # - # @return [Promise] the newly created `Promise` - def self.fulfill(value, opts = {}) - Promise.new(opts).tap { |p| p.send(:synchronized_set_state!, true, value, nil) } - end - - # Create a new `Promise` and reject it immediately. - # - # @!macro executor_and_deref_options - # - # @!macro promise_init_options - # - # @raise [ArgumentError] if no block is given - # - # @return [Promise] the newly created `Promise` - def self.reject(reason, opts = {}) - Promise.new(opts).tap { |p| p.send(:synchronized_set_state!, false, nil, reason) } - end - - # Execute an `:unscheduled` `Promise`. Immediately sets the state to `:pending` and - # passes the block to a new thread/thread pool for eventual execution. - # Does nothing if the `Promise` is in any state other than `:unscheduled`. - # - # @return [Promise] a reference to `self` - def execute - if root? - if compare_and_set_state(:pending, :unscheduled) - set_pending - realize(@promise_body) - end - else - compare_and_set_state(:pending, :unscheduled) - @parent.execute - end - self - end - - # @!macro ivar_set_method - # - # @raise [Concurrent::PromiseExecutionError] if not the root promise - def set(value = NULL, &block) - raise PromiseExecutionError.new('supported only on root promise') unless root? - check_for_block_or_value!(block_given?, value) - synchronize do - if @state != :unscheduled - raise MultipleAssignmentError - else - @promise_body = block || Proc.new { |result| value } - end - end - execute - end - - # @!macro ivar_fail_method - # - # @raise [Concurrent::PromiseExecutionError] if not the root promise - def fail(reason = StandardError.new) - set { raise reason } - end - - # Create a new `Promise` object with the given block, execute it, and return the - # `:pending` object. - # - # @!macro executor_and_deref_options - # - # @!macro promise_init_options - # - # @return [Promise] the newly created `Promise` in the `:pending` state - # - # @raise [ArgumentError] if no block is given - # - # @example - # promise = Concurrent::Promise.execute{ sleep(1); 42 } - # promise.state #=> :pending - def self.execute(opts = {}, &block) - new(opts, &block).execute - end - - # Chain a new promise off the current promise. - # - # @return [Promise] the new promise - # @yield The block operation to be performed asynchronously. - # @overload then(rescuer, executor, &block) - # @param [Proc] rescuer An optional rescue block to be executed if the - # promise is rejected. - # @param [ThreadPool] executor An optional thread pool executor to be used - # in the new Promise - # @overload then(rescuer, executor: executor, &block) - # @param [Proc] rescuer An optional rescue block to be executed if the - # promise is rejected. - # @param [ThreadPool] executor An optional thread pool executor to be used - # in the new Promise - def then(*args, &block) - if args.last.is_a?(::Hash) - executor = args.pop[:executor] - rescuer = args.first - else - rescuer, executor = args - end - - executor ||= @executor - - raise ArgumentError.new('rescuers and block are both missing') if rescuer.nil? && !block_given? - block = Proc.new { |result| result } unless block_given? - child = Promise.new( - parent: self, - executor: executor, - on_fulfill: block, - on_reject: rescuer - ) - - synchronize do - child.state = :pending if @state == :pending - child.on_fulfill(apply_deref_options(@value)) if @state == :fulfilled - child.on_reject(@reason) if @state == :rejected - @children << child - end - - child - end - - # Chain onto this promise an action to be undertaken on success - # (fulfillment). - # - # @yield The block to execute - # - # @return [Promise] self - def on_success(&block) - raise ArgumentError.new('no block given') unless block_given? - self.then(&block) - end - - # Chain onto this promise an action to be undertaken on failure - # (rejection). - # - # @yield The block to execute - # - # @return [Promise] self - def rescue(&block) - self.then(block) - end - - alias_method :catch, :rescue - alias_method :on_error, :rescue - - # Yield the successful result to the block that returns a promise. If that - # promise is also successful the result is the result of the yielded promise. - # If either part fails the whole also fails. - # - # @example - # Promise.execute { 1 }.flat_map { |v| Promise.execute { v + 2 } }.value! #=> 3 - # - # @return [Promise] - def flat_map(&block) - child = Promise.new( - parent: self, - executor: ImmediateExecutor.new, - ) - - on_error { |e| child.on_reject(e) } - on_success do |result1| - begin - inner = block.call(result1) - inner.execute - inner.on_success { |result2| child.on_fulfill(result2) } - inner.on_error { |e| child.on_reject(e) } - rescue => e - child.on_reject(e) - end - end - - child - end - - # Builds a promise that produces the result of promises in an Array - # and fails if any of them fails. - # - # @overload zip(*promises) - # @param [Array] promises - # - # @overload zip(*promises, opts) - # @param [Array] promises - # @param [Hash] opts the configuration options - # @option opts [Executor] :executor (ImmediateExecutor.new) when set use the given `Executor` instance. - # @option opts [Boolean] :execute (true) execute promise before returning - # - # @return [Promise] - def self.zip(*promises) - opts = promises.last.is_a?(::Hash) ? promises.pop.dup : {} - opts[:executor] ||= ImmediateExecutor.new - zero = if !opts.key?(:execute) || opts.delete(:execute) - fulfill([], opts) - else - Promise.new(opts) { [] } - end - - promises.reduce(zero) do |p1, p2| - p1.flat_map do |results| - p2.then do |next_result| - results << next_result - end - end - end - end - - # Builds a promise that produces the result of self and others in an Array - # and fails if any of them fails. - # - # @overload zip(*promises) - # @param [Array] others - # - # @overload zip(*promises, opts) - # @param [Array] others - # @param [Hash] opts the configuration options - # @option opts [Executor] :executor (ImmediateExecutor.new) when set use the given `Executor` instance. - # @option opts [Boolean] :execute (true) execute promise before returning - # - # @return [Promise] - def zip(*others) - self.class.zip(self, *others) - end - - # Aggregates a collection of promises and executes the `then` condition - # if all aggregated promises succeed. Executes the `rescue` handler with - # a `Concurrent::PromiseExecutionError` if any of the aggregated promises - # fail. Upon execution will execute any of the aggregate promises that - # were not already executed. - # - # @!macro promise_self_aggregate - # - # The returned promise will not yet have been executed. Additional `#then` - # and `#rescue` handlers may still be provided. Once the returned promise - # is execute the aggregate promises will be also be executed (if they have - # not been executed already). The results of the aggregate promises will - # be checked upon completion. The necessary `#then` and `#rescue` blocks - # on the aggregating promise will then be executed as appropriate. If the - # `#rescue` handlers are executed the raises exception will be - # `Concurrent::PromiseExecutionError`. - # - # @param [Array] promises Zero or more promises to aggregate - # @return [Promise] an unscheduled (not executed) promise that aggregates - # the promises given as arguments - def self.all?(*promises) - aggregate(:all?, *promises) - end - - # Aggregates a collection of promises and executes the `then` condition - # if any aggregated promises succeed. Executes the `rescue` handler with - # a `Concurrent::PromiseExecutionError` if any of the aggregated promises - # fail. Upon execution will execute any of the aggregate promises that - # were not already executed. - # - # @!macro promise_self_aggregate - def self.any?(*promises) - aggregate(:any?, *promises) - end - - protected - - def ns_initialize(value, opts) - super - - @executor = Options.executor_from_options(opts) || Concurrent.global_io_executor - @args = get_arguments_from(opts) - - @parent = opts.fetch(:parent) { nil } - @on_fulfill = opts.fetch(:on_fulfill) { Proc.new { |result| result } } - @on_reject = opts.fetch(:on_reject) { Proc.new { |reason| raise reason } } - - @promise_body = opts[:__promise_body_from_block__] || Proc.new { |result| result } - @state = :unscheduled - @children = [] - end - - # Aggregate a collection of zero or more promises under a composite promise, - # execute the aggregated promises and collect them into a standard Ruby array, - # call the given Ruby `Ennnumerable` predicate (such as `any?`, `all?`, `none?`, - # or `one?`) on the collection checking for the success or failure of each, - # then executing the composite's `#then` handlers if the predicate returns - # `true` or executing the composite's `#rescue` handlers if the predicate - # returns false. - # - # @!macro promise_self_aggregate - def self.aggregate(method, *promises) - composite = Promise.new do - completed = promises.collect do |promise| - promise.execute if promise.unscheduled? - promise.wait - promise - end - unless completed.empty? || completed.send(method){|promise| promise.fulfilled? } - raise PromiseExecutionError - end - end - composite - end - - # @!visibility private - def set_pending - synchronize do - @state = :pending - @children.each { |c| c.set_pending } - end - end - - # @!visibility private - def root? # :nodoc: - @parent.nil? - end - - # @!visibility private - def on_fulfill(result) - realize Proc.new { @on_fulfill.call(result) } - nil - end - - # @!visibility private - def on_reject(reason) - realize Proc.new { @on_reject.call(reason) } - nil - end - - # @!visibility private - def notify_child(child) - if_state(:fulfilled) { child.on_fulfill(apply_deref_options(@value)) } - if_state(:rejected) { child.on_reject(@reason) } - end - - # @!visibility private - def complete(success, value, reason) - children_to_notify = synchronize do - set_state!(success, value, reason) - @children.dup - end - - children_to_notify.each { |child| notify_child(child) } - observers.notify_and_delete_observers{ [Time.now, self.value, reason] } - end - - # @!visibility private - def realize(task) - @executor.post do - success, value, reason = SafeTaskExecutor.new(task, rescue_exception: true).execute(*@args) - complete(success, value, reason) - end - end - - # @!visibility private - def set_state!(success, value, reason) - set_state(success, value, reason) - event.set - end - - # @!visibility private - def synchronized_set_state!(success, value, reason) - synchronize { set_state!(success, value, reason) } - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/promises.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/promises.rb deleted file mode 100644 index c5df8fe9..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/promises.rb +++ /dev/null @@ -1,2178 +0,0 @@ -require 'concurrent/synchronization/object' -require 'concurrent/atomic/atomic_boolean' -require 'concurrent/atomic/atomic_fixnum' -require 'concurrent/collection/lock_free_stack' -require 'concurrent/configuration' -require 'concurrent/errors' -require 'concurrent/re_include' -require 'concurrent/utility/monotonic_time' - -module Concurrent - - # {include:file:docs-source/promises-main.md} - module Promises - - # @!macro promises.param.default_executor - # @param [Executor, :io, :fast] default_executor Instance of an executor or a name of the - # global executor. Default executor propagates to chained futures unless overridden with - # executor parameter or changed with {AbstractEventFuture#with_default_executor}. - # - # @!macro promises.param.executor - # @param [Executor, :io, :fast] executor Instance of an executor or a name of the - # global executor. The task is executed on it, default executor remains unchanged. - # - # @!macro promises.param.args - # @param [Object] args arguments which are passed to the task when it's executed. - # (It might be prepended with other arguments, see the @yield section). - # - # @!macro promises.shortcut.on - # Shortcut of {#$0_on} with default `:io` executor supplied. - # @see #$0_on - # - # @!macro promises.shortcut.using - # Shortcut of {#$0_using} with default `:io` executor supplied. - # @see #$0_using - # - # @!macro promise.param.task-future - # @yieldreturn will become result of the returned Future. - # Its returned value becomes {Future#value} fulfilling it, - # raised exception becomes {Future#reason} rejecting it. - # - # @!macro promise.param.callback - # @yieldreturn is forgotten. - - # Container of all {Future}, {Event} factory methods. They are never constructed directly with - # new. - module FactoryMethods - extend ReInclude - extend self - - module Configuration - # @return [Executor, :io, :fast] the executor which is used when none is supplied - # to a factory method. The method can be overridden in the receivers of - # `include FactoryMethod` - def default_executor - :io - end - end - - include Configuration - - # @!macro promises.shortcut.on - # @return [ResolvableEvent] - def resolvable_event - resolvable_event_on default_executor - end - - # Creates a resolvable event, user is responsible for resolving the event once - # by calling {Promises::ResolvableEvent#resolve}. - # - # @!macro promises.param.default_executor - # @return [ResolvableEvent] - def resolvable_event_on(default_executor = self.default_executor) - ResolvableEventPromise.new(default_executor).future - end - - # @!macro promises.shortcut.on - # @return [ResolvableFuture] - def resolvable_future - resolvable_future_on default_executor - end - - # Creates resolvable future, user is responsible for resolving the future once by - # {Promises::ResolvableFuture#resolve}, {Promises::ResolvableFuture#fulfill}, - # or {Promises::ResolvableFuture#reject} - # - # @!macro promises.param.default_executor - # @return [ResolvableFuture] - def resolvable_future_on(default_executor = self.default_executor) - ResolvableFuturePromise.new(default_executor).future - end - - # @!macro promises.shortcut.on - # @return [Future] - def future(*args, &task) - future_on(default_executor, *args, &task) - end - - # Constructs a new Future which will be resolved after block is evaluated on default executor. - # Evaluation begins immediately. - # - # @!macro promises.param.default_executor - # @!macro promises.param.args - # @yield [*args] to the task. - # @!macro promise.param.task-future - # @return [Future] - def future_on(default_executor, *args, &task) - ImmediateEventPromise.new(default_executor).future.then(*args, &task) - end - - # Creates a resolved future with will be either fulfilled with the given value or rejected with - # the given reason. - # - # @param [true, false] fulfilled - # @param [Object] value - # @param [Object] reason - # @!macro promises.param.default_executor - # @return [Future] - def resolved_future(fulfilled, value, reason, default_executor = self.default_executor) - ImmediateFuturePromise.new(default_executor, fulfilled, value, reason).future - end - - # Creates a resolved future which will be fulfilled with the given value. - # - # @!macro promises.param.default_executor - # @param [Object] value - # @return [Future] - def fulfilled_future(value, default_executor = self.default_executor) - resolved_future true, value, nil, default_executor - end - - # Creates a resolved future which will be rejected with the given reason. - # - # @!macro promises.param.default_executor - # @param [Object] reason - # @return [Future] - def rejected_future(reason, default_executor = self.default_executor) - resolved_future false, nil, reason, default_executor - end - - # Creates resolved event. - # - # @!macro promises.param.default_executor - # @return [Event] - def resolved_event(default_executor = self.default_executor) - ImmediateEventPromise.new(default_executor).event - end - - # General constructor. Behaves differently based on the argument's type. It's provided for convenience - # but it's better to be explicit. - # - # @see rejected_future, resolved_event, fulfilled_future - # @!macro promises.param.default_executor - # @return [Event, Future] - # - # @overload make_future(nil, default_executor = self.default_executor) - # @param [nil] nil - # @return [Event] resolved event. - # - # @overload make_future(a_future, default_executor = self.default_executor) - # @param [Future] a_future - # @return [Future] a future which will be resolved when a_future is. - # - # @overload make_future(an_event, default_executor = self.default_executor) - # @param [Event] an_event - # @return [Event] an event which will be resolved when an_event is. - # - # @overload make_future(exception, default_executor = self.default_executor) - # @param [Exception] exception - # @return [Future] a rejected future with the exception as its reason. - # - # @overload make_future(value, default_executor = self.default_executor) - # @param [Object] value when none of the above overloads fits - # @return [Future] a fulfilled future with the value. - def make_future(argument = nil, default_executor = self.default_executor) - case argument - when AbstractEventFuture - # returning wrapper would change nothing - argument - when Exception - rejected_future argument, default_executor - when nil - resolved_event default_executor - else - fulfilled_future argument, default_executor - end - end - - # @!macro promises.shortcut.on - # @return [Future, Event] - def delay(*args, &task) - delay_on default_executor, *args, &task - end - - # Creates a new event or future which is resolved only after it is touched, - # see {Concurrent::AbstractEventFuture#touch}. - # - # @!macro promises.param.default_executor - # @overload delay_on(default_executor, *args, &task) - # If task is provided it returns a {Future} representing the result of the task. - # @!macro promises.param.args - # @yield [*args] to the task. - # @!macro promise.param.task-future - # @return [Future] - # @overload delay_on(default_executor) - # If no task is provided, it returns an {Event} - # @return [Event] - def delay_on(default_executor, *args, &task) - event = DelayPromise.new(default_executor).event - task ? event.chain(*args, &task) : event - end - - # @!macro promises.shortcut.on - # @return [Future, Event] - def schedule(intended_time, *args, &task) - schedule_on default_executor, intended_time, *args, &task - end - - # Creates a new event or future which is resolved in intended_time. - # - # @!macro promises.param.default_executor - # @!macro promises.param.intended_time - # @param [Numeric, Time] intended_time `Numeric` means to run in `intended_time` seconds. - # `Time` means to run on `intended_time`. - # @overload schedule_on(default_executor, intended_time, *args, &task) - # If task is provided it returns a {Future} representing the result of the task. - # @!macro promises.param.args - # @yield [*args] to the task. - # @!macro promise.param.task-future - # @return [Future] - # @overload schedule_on(default_executor, intended_time) - # If no task is provided, it returns an {Event} - # @return [Event] - def schedule_on(default_executor, intended_time, *args, &task) - event = ScheduledPromise.new(default_executor, intended_time).event - task ? event.chain(*args, &task) : event - end - - # @!macro promises.shortcut.on - # @return [Future] - def zip_futures(*futures_and_or_events) - zip_futures_on default_executor, *futures_and_or_events - end - - # Creates a new future which is resolved after all futures_and_or_events are resolved. - # Its value is an array of zipped future values. Its reason is an array of reasons for rejection. - # If there is an error it rejects. - # @!macro promises.event-conversion - # If event is supplied, which does not have value and can be only resolved, it's - # represented as `:fulfilled` with value `nil`. - # - # @!macro promises.param.default_executor - # @param [AbstractEventFuture] futures_and_or_events - # @return [Future] - def zip_futures_on(default_executor, *futures_and_or_events) - ZipFuturesPromise.new_blocked_by(futures_and_or_events, default_executor).future - end - - alias_method :zip, :zip_futures - - # @!macro promises.shortcut.on - # @return [Event] - def zip_events(*futures_and_or_events) - zip_events_on default_executor, *futures_and_or_events - end - - # Creates a new event which is resolved after all futures_and_or_events are resolved. - # (Future is resolved when fulfilled or rejected.) - # - # @!macro promises.param.default_executor - # @param [AbstractEventFuture] futures_and_or_events - # @return [Event] - def zip_events_on(default_executor, *futures_and_or_events) - ZipEventsPromise.new_blocked_by(futures_and_or_events, default_executor).event - end - - # @!macro promises.shortcut.on - # @return [Future] - def any_resolved_future(*futures_and_or_events) - any_resolved_future_on default_executor, *futures_and_or_events - end - - alias_method :any, :any_resolved_future - - # Creates a new future which is resolved after the first futures_and_or_events is resolved. - # Its result equals the result of the first resolved future. - # @!macro promises.any-touch - # If resolved it does not propagate {Concurrent::AbstractEventFuture#touch}, leaving delayed - # futures un-executed if they are not required any more. - # @!macro promises.event-conversion - # - # @!macro promises.param.default_executor - # @param [AbstractEventFuture] futures_and_or_events - # @return [Future] - def any_resolved_future_on(default_executor, *futures_and_or_events) - AnyResolvedFuturePromise.new_blocked_by(futures_and_or_events, default_executor).future - end - - # @!macro promises.shortcut.on - # @return [Future] - def any_fulfilled_future(*futures_and_or_events) - any_fulfilled_future_on default_executor, *futures_and_or_events - end - - # Creates a new future which is resolved after the first futures_and_or_events is fulfilled. - # Its result equals the result of the first resolved future or if all futures_and_or_events reject, - # it has reason of the last rejected future. - # @!macro promises.any-touch - # @!macro promises.event-conversion - # - # @!macro promises.param.default_executor - # @param [AbstractEventFuture] futures_and_or_events - # @return [Future] - def any_fulfilled_future_on(default_executor, *futures_and_or_events) - AnyFulfilledFuturePromise.new_blocked_by(futures_and_or_events, default_executor).future - end - - # @!macro promises.shortcut.on - # @return [Event] - def any_event(*futures_and_or_events) - any_event_on default_executor, *futures_and_or_events - end - - # Creates a new event which becomes resolved after the first futures_and_or_events resolves. - # @!macro promises.any-touch - # - # @!macro promises.param.default_executor - # @param [AbstractEventFuture] futures_and_or_events - # @return [Event] - def any_event_on(default_executor, *futures_and_or_events) - AnyResolvedEventPromise.new_blocked_by(futures_and_or_events, default_executor).event - end - - # TODO consider adding first(count, *futures) - # TODO consider adding zip_by(slice, *futures) processing futures in slices - # TODO or rather a generic aggregator taking a function - end - - module InternalStates - # @!visibility private - class State - def resolved? - raise NotImplementedError - end - - def to_sym - raise NotImplementedError - end - end - - # @!visibility private - class Pending < State - def resolved? - false - end - - def to_sym - :pending - end - end - - # @!visibility private - class Reserved < Pending - end - - # @!visibility private - class ResolvedWithResult < State - def resolved? - true - end - - def to_sym - :resolved - end - - def result - [fulfilled?, value, reason] - end - - def fulfilled? - raise NotImplementedError - end - - def value - raise NotImplementedError - end - - def reason - raise NotImplementedError - end - - def apply - raise NotImplementedError - end - end - - # @!visibility private - class Fulfilled < ResolvedWithResult - - def initialize(value) - @Value = value - end - - def fulfilled? - true - end - - def apply(args, block) - block.call value, *args - end - - def value - @Value - end - - def reason - nil - end - - def to_sym - :fulfilled - end - end - - # @!visibility private - class FulfilledArray < Fulfilled - def apply(args, block) - block.call(*value, *args) - end - end - - # @!visibility private - class Rejected < ResolvedWithResult - def initialize(reason) - @Reason = reason - end - - def fulfilled? - false - end - - def value - nil - end - - def reason - @Reason - end - - def to_sym - :rejected - end - - def apply(args, block) - block.call reason, *args - end - end - - # @!visibility private - class PartiallyRejected < ResolvedWithResult - def initialize(value, reason) - super() - @Value = value - @Reason = reason - end - - def fulfilled? - false - end - - def to_sym - :rejected - end - - def value - @Value - end - - def reason - @Reason - end - - def apply(args, block) - block.call(*reason, *args) - end - end - - # @!visibility private - PENDING = Pending.new - # @!visibility private - RESERVED = Reserved.new - # @!visibility private - RESOLVED = Fulfilled.new(nil) - - def RESOLVED.to_sym - :resolved - end - end - - private_constant :InternalStates - - # @!macro promises.shortcut.event-future - # @see Event#$0 - # @see Future#$0 - - # @!macro promises.param.timeout - # @param [Numeric] timeout the maximum time in second to wait. - - # @!macro promises.warn.blocks - # @note This function potentially blocks current thread until the Future is resolved. - # Be careful it can deadlock. Try to chain instead. - - # Common ancestor of {Event} and {Future} classes, many shared methods are defined here. - class AbstractEventFuture < Synchronization::Object - safe_initialization! - attr_atomic(:internal_state) - private :internal_state=, :swap_internal_state, :compare_and_set_internal_state, :update_internal_state - # @!method internal_state - # @!visibility private - - include InternalStates - - def initialize(promise, default_executor) - super() - @Lock = Mutex.new - @Condition = ConditionVariable.new - @Promise = promise - @DefaultExecutor = default_executor - @Callbacks = LockFreeStack.new - @Waiters = AtomicFixnum.new 0 - self.internal_state = PENDING - end - - private :initialize - - # Returns its state. - # @return [Symbol] - # - # @overload an_event.state - # @return [:pending, :resolved] - # @overload a_future.state - # Both :fulfilled, :rejected implies :resolved. - # @return [:pending, :fulfilled, :rejected] - def state - internal_state.to_sym - end - - # Is it in pending state? - # @return [Boolean] - def pending? - !internal_state.resolved? - end - - # Is it in resolved state? - # @return [Boolean] - def resolved? - internal_state.resolved? - end - - # Propagates touch. Requests all the delayed futures, which it depends on, to be - # executed. This method is called by any other method requiring resolved state, like {#wait}. - # @return [self] - def touch - @Promise.touch - self - end - - # @!macro promises.touches - # Calls {Concurrent::AbstractEventFuture#touch}. - - # @!macro promises.method.wait - # Wait (block the Thread) until receiver is {#resolved?}. - # @!macro promises.touches - # - # @!macro promises.warn.blocks - # @!macro promises.param.timeout - # @return [self, true, false] self implies timeout was not used, true implies timeout was used - # and it was resolved, false implies it was not resolved within timeout. - def wait(timeout = nil) - result = wait_until_resolved(timeout) - timeout ? result : self - end - - # Returns default executor. - # @return [Executor] default executor - # @see #with_default_executor - # @see FactoryMethods#future_on - # @see FactoryMethods#resolvable_future - # @see FactoryMethods#any_fulfilled_future_on - # @see similar - def default_executor - @DefaultExecutor - end - - # @!macro promises.shortcut.on - # @return [Future] - def chain(*args, &task) - chain_on @DefaultExecutor, *args, &task - end - - # Chains the task to be executed asynchronously on executor after it is resolved. - # - # @!macro promises.param.executor - # @!macro promises.param.args - # @return [Future] - # @!macro promise.param.task-future - # - # @overload an_event.chain_on(executor, *args, &task) - # @yield [*args] to the task. - # @overload a_future.chain_on(executor, *args, &task) - # @yield [fulfilled, value, reason, *args] to the task. - # @yieldparam [true, false] fulfilled - # @yieldparam [Object] value - # @yieldparam [Object] reason - def chain_on(executor, *args, &task) - ChainPromise.new_blocked_by1(self, executor, executor, args, &task).future - end - - # @return [String] Short string representation. - def to_s - format '%s %s>', super[0..-2], state - end - - alias_method :inspect, :to_s - - # Resolves the resolvable when receiver is resolved. - # - # @param [Resolvable] resolvable - # @return [self] - def chain_resolvable(resolvable) - on_resolution! { resolvable.resolve_with internal_state } - end - - alias_method :tangle, :chain_resolvable - - # @!macro promises.shortcut.using - # @return [self] - def on_resolution(*args, &callback) - on_resolution_using @DefaultExecutor, *args, &callback - end - - # Stores the callback to be executed synchronously on resolving thread after it is - # resolved. - # - # @!macro promises.param.args - # @!macro promise.param.callback - # @return [self] - # - # @overload an_event.on_resolution!(*args, &callback) - # @yield [*args] to the callback. - # @overload a_future.on_resolution!(*args, &callback) - # @yield [fulfilled, value, reason, *args] to the callback. - # @yieldparam [true, false] fulfilled - # @yieldparam [Object] value - # @yieldparam [Object] reason - def on_resolution!(*args, &callback) - add_callback :callback_on_resolution, args, callback - end - - # Stores the callback to be executed asynchronously on executor after it is resolved. - # - # @!macro promises.param.executor - # @!macro promises.param.args - # @!macro promise.param.callback - # @return [self] - # - # @overload an_event.on_resolution_using(executor, *args, &callback) - # @yield [*args] to the callback. - # @overload a_future.on_resolution_using(executor, *args, &callback) - # @yield [fulfilled, value, reason, *args] to the callback. - # @yieldparam [true, false] fulfilled - # @yieldparam [Object] value - # @yieldparam [Object] reason - def on_resolution_using(executor, *args, &callback) - add_callback :async_callback_on_resolution, executor, args, callback - end - - # @!macro promises.method.with_default_executor - # Crates new object with same class with the executor set as its new default executor. - # Any futures depending on it will use the new default executor. - # @!macro promises.shortcut.event-future - # @abstract - # @return [AbstractEventFuture] - def with_default_executor(executor) - raise NotImplementedError - end - - # @!visibility private - def resolve_with(state, raise_on_reassign = true, reserved = false) - if compare_and_set_internal_state(reserved ? RESERVED : PENDING, state) - # go to synchronized block only if there were waiting threads - @Lock.synchronize { @Condition.broadcast } unless @Waiters.value == 0 - call_callbacks state - else - return rejected_resolution(raise_on_reassign, state) - end - self - end - - # For inspection. - # @!visibility private - # @return [Array] - def blocks - @Callbacks.each_with_object([]) do |(method, args), promises| - promises.push(args[0]) if method == :callback_notify_blocked - end - end - - # For inspection. - # @!visibility private - def callbacks - @Callbacks.each.to_a - end - - # For inspection. - # @!visibility private - def promise - @Promise - end - - # For inspection. - # @!visibility private - def touched? - promise.touched? - end - - # For inspection. - # @!visibility private - def waiting_threads - @Waiters.each.to_a - end - - # @!visibility private - def add_callback_notify_blocked(promise, index) - add_callback :callback_notify_blocked, promise, index - end - - # @!visibility private - def add_callback_clear_delayed_node(node) - add_callback(:callback_clear_delayed_node, node) - end - - # @!visibility private - def with_hidden_resolvable - # TODO (pitr-ch 10-Dec-2018): documentation, better name if in edge - self - end - - private - - def add_callback(method, *args) - state = internal_state - if state.resolved? - call_callback method, state, args - else - @Callbacks.push [method, args] - state = internal_state - # take back if it was resolved in the meanwhile - call_callbacks state if state.resolved? - end - self - end - - def callback_clear_delayed_node(state, node) - node.value = nil - end - - # @return [Boolean] - def wait_until_resolved(timeout) - return true if resolved? - - touch - - @Lock.synchronize do - @Waiters.increment - begin - if timeout - start = Concurrent.monotonic_time - until resolved? - break if @Condition.wait(@Lock, timeout) == nil # nil means timeout - timeout -= (Concurrent.monotonic_time - start) - break if timeout <= 0 - end - else - until resolved? - @Condition.wait(@Lock, timeout) - end - end - ensure - # JRuby may raise ConcurrencyError - @Waiters.decrement - end - end - resolved? - end - - def call_callback(method, state, args) - self.send method, state, *args - end - - def call_callbacks(state) - method, args = @Callbacks.pop - while method - call_callback method, state, args - method, args = @Callbacks.pop - end - end - - def with_async(executor, *args, &block) - Concurrent.executor(executor).post(*args, &block) - end - - def async_callback_on_resolution(state, executor, args, callback) - with_async(executor, state, args, callback) do |st, ar, cb| - callback_on_resolution st, ar, cb - end - end - - def callback_notify_blocked(state, promise, index) - promise.on_blocker_resolution self, index - end - end - - # Represents an event which will happen in future (will be resolved). The event is either - # pending or resolved. It should be always resolved. Use {Future} to communicate rejections and - # cancellation. - class Event < AbstractEventFuture - - alias_method :then, :chain - - - # @!macro promises.method.zip - # Creates a new event or a future which will be resolved when receiver and other are. - # Returns an event if receiver and other are events, otherwise returns a future. - # If just one of the parties is Future then the result - # of the returned future is equal to the result of the supplied future. If both are futures - # then the result is as described in {FactoryMethods#zip_futures_on}. - # - # @return [Future, Event] - def zip(other) - if other.is_a?(Future) - ZipFutureEventPromise.new_blocked_by2(other, self, @DefaultExecutor).future - else - ZipEventEventPromise.new_blocked_by2(self, other, @DefaultExecutor).event - end - end - - alias_method :&, :zip - - # Creates a new event which will be resolved when the first of receiver, `event_or_future` - # resolves. - # - # @return [Event] - def any(event_or_future) - AnyResolvedEventPromise.new_blocked_by2(self, event_or_future, @DefaultExecutor).event - end - - alias_method :|, :any - - # Creates new event dependent on receiver which will not evaluate until touched, see {#touch}. - # In other words, it inserts delay into the chain of Futures making rest of it lazy evaluated. - # - # @return [Event] - def delay - event = DelayPromise.new(@DefaultExecutor).event - ZipEventEventPromise.new_blocked_by2(self, event, @DefaultExecutor).event - end - - # @!macro promise.method.schedule - # Creates new event dependent on receiver scheduled to execute on/in intended_time. - # In time is interpreted from the moment the receiver is resolved, therefore it inserts - # delay into the chain. - # - # @!macro promises.param.intended_time - # @return [Event] - def schedule(intended_time) - chain do - event = ScheduledPromise.new(@DefaultExecutor, intended_time).event - ZipEventEventPromise.new_blocked_by2(self, event, @DefaultExecutor).event - end.flat_event - end - - # Converts event to a future. The future is fulfilled when the event is resolved, the future may never fail. - # - # @return [Future] - def to_future - future = Promises.resolvable_future - ensure - chain_resolvable(future) - end - - # Returns self, since this is event - # @return [Event] - def to_event - self - end - - # @!macro promises.method.with_default_executor - # @return [Event] - def with_default_executor(executor) - EventWrapperPromise.new_blocked_by1(self, executor).event - end - - private - - def rejected_resolution(raise_on_reassign, state) - raise Concurrent::MultipleAssignmentError.new('Event can be resolved only once') if raise_on_reassign - return false - end - - def callback_on_resolution(state, args, callback) - callback.call(*args) - end - end - - # Represents a value which will become available in future. May reject with a reason instead, - # e.g. when the tasks raises an exception. - class Future < AbstractEventFuture - - # Is it in fulfilled state? - # @return [Boolean] - def fulfilled? - state = internal_state - state.resolved? && state.fulfilled? - end - - # Is it in rejected state? - # @return [Boolean] - def rejected? - state = internal_state - state.resolved? && !state.fulfilled? - end - - # @!macro promises.warn.nil - # @note Make sure returned `nil` is not confused with timeout, no value when rejected, - # no reason when fulfilled, etc. - # Use more exact methods if needed, like {#wait}, {#value!}, {#result}, etc. - - # @!macro promises.method.value - # Return value of the future. - # @!macro promises.touches - # - # @!macro promises.warn.blocks - # @!macro promises.warn.nil - # @!macro promises.param.timeout - # @!macro promises.param.timeout_value - # @param [Object] timeout_value a value returned by the method when it times out - # @return [Object, nil, timeout_value] the value of the Future when fulfilled, - # timeout_value on timeout, - # nil on rejection. - def value(timeout = nil, timeout_value = nil) - if wait_until_resolved timeout - internal_state.value - else - timeout_value - end - end - - # Returns reason of future's rejection. - # @!macro promises.touches - # - # @!macro promises.warn.blocks - # @!macro promises.warn.nil - # @!macro promises.param.timeout - # @!macro promises.param.timeout_value - # @return [Object, timeout_value] the reason, or timeout_value on timeout, or nil on fulfillment. - def reason(timeout = nil, timeout_value = nil) - if wait_until_resolved timeout - internal_state.reason - else - timeout_value - end - end - - # Returns triplet fulfilled?, value, reason. - # @!macro promises.touches - # - # @!macro promises.warn.blocks - # @!macro promises.param.timeout - # @return [Array(Boolean, Object, Object), nil] triplet of fulfilled?, value, reason, or nil - # on timeout. - def result(timeout = nil) - internal_state.result if wait_until_resolved timeout - end - - # @!macro promises.method.wait - # @raise [Exception] {#reason} on rejection - def wait!(timeout = nil) - result = wait_until_resolved!(timeout) - timeout ? result : self - end - - # @!macro promises.method.value - # @return [Object, nil, timeout_value] the value of the Future when fulfilled, - # or nil on rejection, - # or timeout_value on timeout. - # @raise [Exception] {#reason} on rejection - def value!(timeout = nil, timeout_value = nil) - if wait_until_resolved! timeout - internal_state.value - else - timeout_value - end - end - - # Allows rejected Future to be risen with `raise` method. - # If the reason is not an exception `Runtime.new(reason)` is returned. - # - # @example - # raise Promises.rejected_future(StandardError.new("boom")) - # raise Promises.rejected_future("or just boom") - # @raise [Concurrent::Error] when raising not rejected future - # @return [Exception] - def exception(*args) - raise Concurrent::Error, 'it is not rejected' unless rejected? - raise ArgumentError unless args.size <= 1 - reason = Array(internal_state.reason).flatten.compact - if reason.size > 1 - ex = Concurrent::MultipleErrors.new reason - ex.set_backtrace(caller) - ex - else - ex = if reason[0].respond_to? :exception - reason[0].exception(*args) - else - RuntimeError.new(reason[0]).exception(*args) - end - ex.set_backtrace Array(ex.backtrace) + caller - ex - end - end - - # @!macro promises.shortcut.on - # @return [Future] - def then(*args, &task) - then_on @DefaultExecutor, *args, &task - end - - # Chains the task to be executed asynchronously on executor after it fulfills. Does not run - # the task if it rejects. It will resolve though, triggering any dependent futures. - # - # @!macro promises.param.executor - # @!macro promises.param.args - # @!macro promise.param.task-future - # @return [Future] - # @yield [value, *args] to the task. - def then_on(executor, *args, &task) - ThenPromise.new_blocked_by1(self, executor, executor, args, &task).future - end - - # @!macro promises.shortcut.on - # @return [Future] - def rescue(*args, &task) - rescue_on @DefaultExecutor, *args, &task - end - - # Chains the task to be executed asynchronously on executor after it rejects. Does not run - # the task if it fulfills. It will resolve though, triggering any dependent futures. - # - # @!macro promises.param.executor - # @!macro promises.param.args - # @!macro promise.param.task-future - # @return [Future] - # @yield [reason, *args] to the task. - def rescue_on(executor, *args, &task) - RescuePromise.new_blocked_by1(self, executor, executor, args, &task).future - end - - # @!macro promises.method.zip - # @return [Future] - def zip(other) - if other.is_a?(Future) - ZipFuturesPromise.new_blocked_by2(self, other, @DefaultExecutor).future - else - ZipFutureEventPromise.new_blocked_by2(self, other, @DefaultExecutor).future - end - end - - alias_method :&, :zip - - # Creates a new event which will be resolved when the first of receiver, `event_or_future` - # resolves. Returning future will have value nil if event_or_future is event and resolves - # first. - # - # @return [Future] - def any(event_or_future) - AnyResolvedFuturePromise.new_blocked_by2(self, event_or_future, @DefaultExecutor).future - end - - alias_method :|, :any - - # Creates new future dependent on receiver which will not evaluate until touched, see {#touch}. - # In other words, it inserts delay into the chain of Futures making rest of it lazy evaluated. - # - # @return [Future] - def delay - event = DelayPromise.new(@DefaultExecutor).event - ZipFutureEventPromise.new_blocked_by2(self, event, @DefaultExecutor).future - end - - # @!macro promise.method.schedule - # @return [Future] - def schedule(intended_time) - chain do - event = ScheduledPromise.new(@DefaultExecutor, intended_time).event - ZipFutureEventPromise.new_blocked_by2(self, event, @DefaultExecutor).future - end.flat - end - - # @!macro promises.method.with_default_executor - # @return [Future] - def with_default_executor(executor) - FutureWrapperPromise.new_blocked_by1(self, executor).future - end - - # Creates new future which will have result of the future returned by receiver. If receiver - # rejects it will have its rejection. - # - # @param [Integer] level how many levels of futures should flatten - # @return [Future] - def flat_future(level = 1) - FlatFuturePromise.new_blocked_by1(self, level, @DefaultExecutor).future - end - - alias_method :flat, :flat_future - - # Creates new event which will be resolved when the returned event by receiver is. - # Be careful if the receiver rejects it will just resolve since Event does not hold reason. - # - # @return [Event] - def flat_event - FlatEventPromise.new_blocked_by1(self, @DefaultExecutor).event - end - - # @!macro promises.shortcut.using - # @return [self] - def on_fulfillment(*args, &callback) - on_fulfillment_using @DefaultExecutor, *args, &callback - end - - # Stores the callback to be executed synchronously on resolving thread after it is - # fulfilled. Does nothing on rejection. - # - # @!macro promises.param.args - # @!macro promise.param.callback - # @return [self] - # @yield [value, *args] to the callback. - def on_fulfillment!(*args, &callback) - add_callback :callback_on_fulfillment, args, callback - end - - # Stores the callback to be executed asynchronously on executor after it is - # fulfilled. Does nothing on rejection. - # - # @!macro promises.param.executor - # @!macro promises.param.args - # @!macro promise.param.callback - # @return [self] - # @yield [value, *args] to the callback. - def on_fulfillment_using(executor, *args, &callback) - add_callback :async_callback_on_fulfillment, executor, args, callback - end - - # @!macro promises.shortcut.using - # @return [self] - def on_rejection(*args, &callback) - on_rejection_using @DefaultExecutor, *args, &callback - end - - # Stores the callback to be executed synchronously on resolving thread after it is - # rejected. Does nothing on fulfillment. - # - # @!macro promises.param.args - # @!macro promise.param.callback - # @return [self] - # @yield [reason, *args] to the callback. - def on_rejection!(*args, &callback) - add_callback :callback_on_rejection, args, callback - end - - # Stores the callback to be executed asynchronously on executor after it is - # rejected. Does nothing on fulfillment. - # - # @!macro promises.param.executor - # @!macro promises.param.args - # @!macro promise.param.callback - # @return [self] - # @yield [reason, *args] to the callback. - def on_rejection_using(executor, *args, &callback) - add_callback :async_callback_on_rejection, executor, args, callback - end - - # Allows to use futures as green threads. The receiver has to evaluate to a future which - # represents what should be done next. It basically flattens indefinitely until non Future - # values is returned which becomes result of the returned future. Any encountered exception - # will become reason of the returned future. - # - # @return [Future] - # @param [#call(value)] run_test - # an object which when called returns either Future to keep running with - # or nil, then the run completes with the value. - # The run_test can be used to extract the Future from deeper structure, - # or to distinguish Future which is a resulting value from a future - # which is suppose to continue running. - # @example - # body = lambda do |v| - # v += 1 - # v < 5 ? Promises.future(v, &body) : v - # end - # Promises.future(0, &body).run.value! # => 5 - def run(run_test = method(:run_test)) - RunFuturePromise.new_blocked_by1(self, @DefaultExecutor, run_test).future - end - - # @!visibility private - def apply(args, block) - internal_state.apply args, block - end - - # Converts future to event which is resolved when future is resolved by fulfillment or rejection. - # - # @return [Event] - def to_event - event = Promises.resolvable_event - ensure - chain_resolvable(event) - end - - # Returns self, since this is a future - # @return [Future] - def to_future - self - end - - # @return [String] Short string representation. - def to_s - if resolved? - format '%s with %s>', super[0..-2], (fulfilled? ? value : reason).inspect - else - super - end - end - - alias_method :inspect, :to_s - - private - - def run_test(v) - v if v.is_a?(Future) - end - - def rejected_resolution(raise_on_reassign, state) - if raise_on_reassign - if internal_state == RESERVED - raise Concurrent::MultipleAssignmentError.new( - "Future can be resolved only once. It is already reserved.") - else - raise Concurrent::MultipleAssignmentError.new( - "Future can be resolved only once. It's #{result}, trying to set #{state.result}.", - current_result: result, - new_result: state.result) - end - end - return false - end - - def wait_until_resolved!(timeout = nil) - result = wait_until_resolved(timeout) - raise self if rejected? - result - end - - def async_callback_on_fulfillment(state, executor, args, callback) - with_async(executor, state, args, callback) do |st, ar, cb| - callback_on_fulfillment st, ar, cb - end - end - - def async_callback_on_rejection(state, executor, args, callback) - with_async(executor, state, args, callback) do |st, ar, cb| - callback_on_rejection st, ar, cb - end - end - - def callback_on_fulfillment(state, args, callback) - state.apply args, callback if state.fulfilled? - end - - def callback_on_rejection(state, args, callback) - state.apply args, callback unless state.fulfilled? - end - - def callback_on_resolution(state, args, callback) - callback.call(*state.result, *args) - end - - end - - # Marker module of Future, Event resolved manually. - module Resolvable - include InternalStates - end - - # A Event which can be resolved by user. - class ResolvableEvent < Event - include Resolvable - - # @!macro raise_on_reassign - # @raise [MultipleAssignmentError] when already resolved and raise_on_reassign is true. - - # @!macro promise.param.raise_on_reassign - # @param [Boolean] raise_on_reassign should method raise exception if already resolved - # @return [self, false] false is returned when raise_on_reassign is false and the receiver - # is already resolved. - # - - # Makes the event resolved, which triggers all dependent futures. - # - # @!macro promise.param.raise_on_reassign - # @!macro promise.param.reserved - # @param [true, false] reserved - # Set to true if the resolvable is {#reserve}d by you, - # marks resolution of reserved resolvable events and futures explicitly. - # Advanced feature, ignore unless you use {Resolvable#reserve} from edge. - def resolve(raise_on_reassign = true, reserved = false) - resolve_with RESOLVED, raise_on_reassign, reserved - end - - # Creates new event wrapping receiver, effectively hiding the resolve method. - # - # @return [Event] - def with_hidden_resolvable - @with_hidden_resolvable ||= EventWrapperPromise.new_blocked_by1(self, @DefaultExecutor).event - end - - # Behaves as {AbstractEventFuture#wait} but has one additional optional argument - # resolve_on_timeout. - # - # @param [true, false] resolve_on_timeout - # If it times out and the argument is true it will also resolve the event. - # @return [self, true, false] - # @see AbstractEventFuture#wait - def wait(timeout = nil, resolve_on_timeout = false) - super(timeout) or if resolve_on_timeout - # if it fails to resolve it was resolved in the meantime - # so return true as if there was no timeout - !resolve(false) - else - false - end - end - end - - # A Future which can be resolved by user. - class ResolvableFuture < Future - include Resolvable - - # Makes the future resolved with result of triplet `fulfilled?`, `value`, `reason`, - # which triggers all dependent futures. - # - # @param [true, false] fulfilled - # @param [Object] value - # @param [Object] reason - # @!macro promise.param.raise_on_reassign - # @!macro promise.param.reserved - def resolve(fulfilled = true, value = nil, reason = nil, raise_on_reassign = true, reserved = false) - resolve_with(fulfilled ? Fulfilled.new(value) : Rejected.new(reason), raise_on_reassign, reserved) - end - - # Makes the future fulfilled with `value`, - # which triggers all dependent futures. - # - # @param [Object] value - # @!macro promise.param.raise_on_reassign - # @!macro promise.param.reserved - def fulfill(value, raise_on_reassign = true, reserved = false) - resolve_with Fulfilled.new(value), raise_on_reassign, reserved - end - - # Makes the future rejected with `reason`, - # which triggers all dependent futures. - # - # @param [Object] reason - # @!macro promise.param.raise_on_reassign - # @!macro promise.param.reserved - def reject(reason, raise_on_reassign = true, reserved = false) - resolve_with Rejected.new(reason), raise_on_reassign, reserved - end - - # Evaluates the block and sets its result as future's value fulfilling, if the block raises - # an exception the future rejects with it. - # - # @yield [*args] to the block. - # @yieldreturn [Object] value - # @return [self] - def evaluate_to(*args, &block) - promise.evaluate_to(*args, block) - end - - # Evaluates the block and sets its result as future's value fulfilling, if the block raises - # an exception the future rejects with it. - # - # @yield [*args] to the block. - # @yieldreturn [Object] value - # @return [self] - # @raise [Exception] also raise reason on rejection. - def evaluate_to!(*args, &block) - promise.evaluate_to(*args, block).wait! - end - - # @!macro promises.resolvable.resolve_on_timeout - # @param [::Array(true, Object, nil), ::Array(false, nil, Exception), nil] resolve_on_timeout - # If it times out and the argument is not nil it will also resolve the future - # to the provided resolution. - - # Behaves as {AbstractEventFuture#wait} but has one additional optional argument - # resolve_on_timeout. - # - # @!macro promises.resolvable.resolve_on_timeout - # @return [self, true, false] - # @see AbstractEventFuture#wait - def wait(timeout = nil, resolve_on_timeout = nil) - super(timeout) or if resolve_on_timeout - # if it fails to resolve it was resolved in the meantime - # so return true as if there was no timeout - !resolve(*resolve_on_timeout, false) - else - false - end - end - - # Behaves as {Future#wait!} but has one additional optional argument - # resolve_on_timeout. - # - # @!macro promises.resolvable.resolve_on_timeout - # @return [self, true, false] - # @raise [Exception] {#reason} on rejection - # @see Future#wait! - def wait!(timeout = nil, resolve_on_timeout = nil) - super(timeout) or if resolve_on_timeout - if resolve(*resolve_on_timeout, false) - false - else - # if it fails to resolve it was resolved in the meantime - # so return true as if there was no timeout - raise self if rejected? - true - end - else - false - end - end - - # Behaves as {Future#value} but has one additional optional argument - # resolve_on_timeout. - # - # @!macro promises.resolvable.resolve_on_timeout - # @return [Object, timeout_value, nil] - # @see Future#value - def value(timeout = nil, timeout_value = nil, resolve_on_timeout = nil) - if wait_until_resolved timeout - internal_state.value - else - if resolve_on_timeout - unless resolve(*resolve_on_timeout, false) - # if it fails to resolve it was resolved in the meantime - # so return value as if there was no timeout - return internal_state.value - end - end - timeout_value - end - end - - # Behaves as {Future#value!} but has one additional optional argument - # resolve_on_timeout. - # - # @!macro promises.resolvable.resolve_on_timeout - # @return [Object, timeout_value, nil] - # @raise [Exception] {#reason} on rejection - # @see Future#value! - def value!(timeout = nil, timeout_value = nil, resolve_on_timeout = nil) - if wait_until_resolved! timeout - internal_state.value - else - if resolve_on_timeout - unless resolve(*resolve_on_timeout, false) - # if it fails to resolve it was resolved in the meantime - # so return value as if there was no timeout - raise self if rejected? - return internal_state.value - end - end - timeout_value - end - end - - # Behaves as {Future#reason} but has one additional optional argument - # resolve_on_timeout. - # - # @!macro promises.resolvable.resolve_on_timeout - # @return [Exception, timeout_value, nil] - # @see Future#reason - def reason(timeout = nil, timeout_value = nil, resolve_on_timeout = nil) - if wait_until_resolved timeout - internal_state.reason - else - if resolve_on_timeout - unless resolve(*resolve_on_timeout, false) - # if it fails to resolve it was resolved in the meantime - # so return value as if there was no timeout - return internal_state.reason - end - end - timeout_value - end - end - - # Behaves as {Future#result} but has one additional optional argument - # resolve_on_timeout. - # - # @!macro promises.resolvable.resolve_on_timeout - # @return [::Array(Boolean, Object, Exception), nil] - # @see Future#result - def result(timeout = nil, resolve_on_timeout = nil) - if wait_until_resolved timeout - internal_state.result - else - if resolve_on_timeout - unless resolve(*resolve_on_timeout, false) - # if it fails to resolve it was resolved in the meantime - # so return value as if there was no timeout - internal_state.result - end - end - # otherwise returns nil - end - end - - # Creates new future wrapping receiver, effectively hiding the resolve method and similar. - # - # @return [Future] - def with_hidden_resolvable - @with_hidden_resolvable ||= FutureWrapperPromise.new_blocked_by1(self, @DefaultExecutor).future - end - end - - # @abstract - # @private - class AbstractPromise < Synchronization::Object - safe_initialization! - include InternalStates - - def initialize(future) - super() - @Future = future - end - - def future - @Future - end - - alias_method :event, :future - - def default_executor - future.default_executor - end - - def state - future.state - end - - def touch - end - - def to_s - format '%s %s>', super[0..-2], @Future - end - - alias_method :inspect, :to_s - - def delayed_because - nil - end - - private - - def resolve_with(new_state, raise_on_reassign = true) - @Future.resolve_with(new_state, raise_on_reassign) - end - - # @return [Future] - def evaluate_to(*args, block) - resolve_with Fulfilled.new(block.call(*args)) - rescue Exception => error - resolve_with Rejected.new(error) - raise error unless error.is_a?(StandardError) - end - end - - class ResolvableEventPromise < AbstractPromise - def initialize(default_executor) - super ResolvableEvent.new(self, default_executor) - end - end - - class ResolvableFuturePromise < AbstractPromise - def initialize(default_executor) - super ResolvableFuture.new(self, default_executor) - end - - public :evaluate_to - end - - # @abstract - class InnerPromise < AbstractPromise - end - - # @abstract - class BlockedPromise < InnerPromise - - private_class_method :new - - def self.new_blocked_by1(blocker, *args, &block) - blocker_delayed = blocker.promise.delayed_because - promise = new(blocker_delayed, 1, *args, &block) - blocker.add_callback_notify_blocked promise, 0 - promise - end - - def self.new_blocked_by2(blocker1, blocker2, *args, &block) - blocker_delayed1 = blocker1.promise.delayed_because - blocker_delayed2 = blocker2.promise.delayed_because - delayed = if blocker_delayed1 && blocker_delayed2 - # TODO (pitr-ch 23-Dec-2016): use arrays when we know it will not grow (only flat adds delay) - LockFreeStack.of2(blocker_delayed1, blocker_delayed2) - else - blocker_delayed1 || blocker_delayed2 - end - promise = new(delayed, 2, *args, &block) - blocker1.add_callback_notify_blocked promise, 0 - blocker2.add_callback_notify_blocked promise, 1 - promise - end - - def self.new_blocked_by(blockers, *args, &block) - delayed = blockers.reduce(nil) { |d, f| add_delayed d, f.promise.delayed_because } - promise = new(delayed, blockers.size, *args, &block) - blockers.each_with_index { |f, i| f.add_callback_notify_blocked promise, i } - promise - end - - def self.add_delayed(delayed1, delayed2) - if delayed1 && delayed2 - delayed1.push delayed2 - delayed1 - else - delayed1 || delayed2 - end - end - - def initialize(delayed, blockers_count, future) - super(future) - @Delayed = delayed - @Countdown = AtomicFixnum.new blockers_count - end - - def on_blocker_resolution(future, index) - countdown = process_on_blocker_resolution(future, index) - resolvable = resolvable?(countdown, future, index) - - on_resolvable(future, index) if resolvable - end - - def delayed_because - @Delayed - end - - def touch - clear_and_propagate_touch - end - - # for inspection only - def blocked_by - blocked_by = [] - ObjectSpace.each_object(AbstractEventFuture) { |o| blocked_by.push o if o.blocks.include? self } - blocked_by - end - - private - - def clear_and_propagate_touch(stack_or_element = @Delayed) - return if stack_or_element.nil? - - if stack_or_element.is_a? LockFreeStack - stack_or_element.clear_each { |element| clear_and_propagate_touch element } - else - stack_or_element.touch unless stack_or_element.nil? # if still present - end - end - - # @return [true,false] if resolvable - def resolvable?(countdown, future, index) - countdown.zero? - end - - def process_on_blocker_resolution(future, index) - @Countdown.decrement - end - - def on_resolvable(resolved_future, index) - raise NotImplementedError - end - end - - # @abstract - class BlockedTaskPromise < BlockedPromise - def initialize(delayed, blockers_count, default_executor, executor, args, &task) - raise ArgumentError, 'no block given' unless block_given? - super delayed, 1, Future.new(self, default_executor) - @Executor = executor - @Task = task - @Args = args - end - - def executor - @Executor - end - end - - class ThenPromise < BlockedTaskPromise - private - - def initialize(delayed, blockers_count, default_executor, executor, args, &task) - super delayed, blockers_count, default_executor, executor, args, &task - end - - def on_resolvable(resolved_future, index) - if resolved_future.fulfilled? - Concurrent.executor(@Executor).post(resolved_future, @Args, @Task) do |future, args, task| - evaluate_to lambda { future.apply args, task } - end - else - resolve_with resolved_future.internal_state - end - end - end - - class RescuePromise < BlockedTaskPromise - private - - def initialize(delayed, blockers_count, default_executor, executor, args, &task) - super delayed, blockers_count, default_executor, executor, args, &task - end - - def on_resolvable(resolved_future, index) - if resolved_future.rejected? - Concurrent.executor(@Executor).post(resolved_future, @Args, @Task) do |future, args, task| - evaluate_to lambda { future.apply args, task } - end - else - resolve_with resolved_future.internal_state - end - end - end - - class ChainPromise < BlockedTaskPromise - private - - def on_resolvable(resolved_future, index) - if Future === resolved_future - Concurrent.executor(@Executor).post(resolved_future, @Args, @Task) do |future, args, task| - evaluate_to(*future.result, *args, task) - end - else - Concurrent.executor(@Executor).post(@Args, @Task) do |args, task| - evaluate_to(*args, task) - end - end - end - end - - # will be immediately resolved - class ImmediateEventPromise < InnerPromise - def initialize(default_executor) - super Event.new(self, default_executor).resolve_with(RESOLVED) - end - end - - class ImmediateFuturePromise < InnerPromise - def initialize(default_executor, fulfilled, value, reason) - super Future.new(self, default_executor). - resolve_with(fulfilled ? Fulfilled.new(value) : Rejected.new(reason)) - end - end - - class AbstractFlatPromise < BlockedPromise - - def initialize(delayed_because, blockers_count, event_or_future) - delayed = LockFreeStack.of1(self) - super(delayed, blockers_count, event_or_future) - # noinspection RubyArgCount - @Touched = AtomicBoolean.new false - @DelayedBecause = delayed_because || LockFreeStack.new - - event_or_future.add_callback_clear_delayed_node delayed.peek - end - - def touch - if @Touched.make_true - clear_and_propagate_touch @DelayedBecause - end - end - - private - - def touched? - @Touched.value - end - - def on_resolvable(resolved_future, index) - resolve_with resolved_future.internal_state - end - - def resolvable?(countdown, future, index) - !@Future.internal_state.resolved? && super(countdown, future, index) - end - - def add_delayed_of(future) - delayed = future.promise.delayed_because - if touched? - clear_and_propagate_touch delayed - else - BlockedPromise.add_delayed @DelayedBecause, delayed - clear_and_propagate_touch @DelayedBecause if touched? - end - end - - end - - class FlatEventPromise < AbstractFlatPromise - - private - - def initialize(delayed, blockers_count, default_executor) - super delayed, 2, Event.new(self, default_executor) - end - - def process_on_blocker_resolution(future, index) - countdown = super(future, index) - if countdown.nonzero? - internal_state = future.internal_state - - unless internal_state.fulfilled? - resolve_with RESOLVED - return countdown - end - - value = internal_state.value - case value - when AbstractEventFuture - add_delayed_of value - value.add_callback_notify_blocked self, nil - countdown - else - resolve_with RESOLVED - end - end - countdown - end - - end - - class FlatFuturePromise < AbstractFlatPromise - - private - - def initialize(delayed, blockers_count, levels, default_executor) - raise ArgumentError, 'levels has to be higher than 0' if levels < 1 - # flat promise may result to a future having delayed futures, therefore we have to have empty stack - # to be able to add new delayed futures - super delayed || LockFreeStack.new, 1 + levels, Future.new(self, default_executor) - end - - def process_on_blocker_resolution(future, index) - countdown = super(future, index) - if countdown.nonzero? - internal_state = future.internal_state - - unless internal_state.fulfilled? - resolve_with internal_state - return countdown - end - - value = internal_state.value - case value - when AbstractEventFuture - add_delayed_of value - value.add_callback_notify_blocked self, nil - countdown - else - evaluate_to(lambda { raise TypeError, "returned value #{value.inspect} is not a Future" }) - end - end - countdown - end - - end - - class RunFuturePromise < AbstractFlatPromise - - private - - def initialize(delayed, blockers_count, default_executor, run_test) - super delayed, 1, Future.new(self, default_executor) - @RunTest = run_test - end - - def process_on_blocker_resolution(future, index) - internal_state = future.internal_state - - unless internal_state.fulfilled? - resolve_with internal_state - return 0 - end - - value = internal_state.value - continuation_future = @RunTest.call value - - if continuation_future - add_delayed_of continuation_future - continuation_future.add_callback_notify_blocked self, nil - else - resolve_with internal_state - end - - 1 - end - end - - class ZipEventEventPromise < BlockedPromise - def initialize(delayed, blockers_count, default_executor) - super delayed, 2, Event.new(self, default_executor) - end - - private - - def on_resolvable(resolved_future, index) - resolve_with RESOLVED - end - end - - class ZipFutureEventPromise < BlockedPromise - def initialize(delayed, blockers_count, default_executor) - super delayed, 2, Future.new(self, default_executor) - @result = nil - end - - private - - def process_on_blocker_resolution(future, index) - # first blocking is future, take its result - @result = future.internal_state if index == 0 - # super has to be called after above to piggyback on volatile @Countdown - super future, index - end - - def on_resolvable(resolved_future, index) - resolve_with @result - end - end - - class EventWrapperPromise < BlockedPromise - def initialize(delayed, blockers_count, default_executor) - super delayed, 1, Event.new(self, default_executor) - end - - private - - def on_resolvable(resolved_future, index) - resolve_with RESOLVED - end - end - - class FutureWrapperPromise < BlockedPromise - def initialize(delayed, blockers_count, default_executor) - super delayed, 1, Future.new(self, default_executor) - end - - private - - def on_resolvable(resolved_future, index) - resolve_with resolved_future.internal_state - end - end - - class ZipFuturesPromise < BlockedPromise - - private - - def initialize(delayed, blockers_count, default_executor) - super(delayed, blockers_count, Future.new(self, default_executor)) - @Resolutions = ::Array.new(blockers_count, nil) - - on_resolvable nil, nil if blockers_count == 0 - end - - def process_on_blocker_resolution(future, index) - # TODO (pitr-ch 18-Dec-2016): Can we assume that array will never break under parallel access when never re-sized? - @Resolutions[index] = future.internal_state # has to be set before countdown in super - super future, index - end - - def on_resolvable(resolved_future, index) - all_fulfilled = true - values = ::Array.new(@Resolutions.size) - reasons = ::Array.new(@Resolutions.size) - - @Resolutions.each_with_index do |internal_state, i| - fulfilled, values[i], reasons[i] = internal_state.result - all_fulfilled &&= fulfilled - end - - if all_fulfilled - resolve_with FulfilledArray.new(values) - else - resolve_with PartiallyRejected.new(values, reasons) - end - end - end - - class ZipEventsPromise < BlockedPromise - - private - - def initialize(delayed, blockers_count, default_executor) - super delayed, blockers_count, Event.new(self, default_executor) - - on_resolvable nil, nil if blockers_count == 0 - end - - def on_resolvable(resolved_future, index) - resolve_with RESOLVED - end - end - - # @abstract - class AbstractAnyPromise < BlockedPromise - end - - class AnyResolvedEventPromise < AbstractAnyPromise - - private - - def initialize(delayed, blockers_count, default_executor) - super delayed, blockers_count, Event.new(self, default_executor) - end - - def resolvable?(countdown, future, index) - true - end - - def on_resolvable(resolved_future, index) - resolve_with RESOLVED, false - end - end - - class AnyResolvedFuturePromise < AbstractAnyPromise - - private - - def initialize(delayed, blockers_count, default_executor) - super delayed, blockers_count, Future.new(self, default_executor) - end - - def resolvable?(countdown, future, index) - true - end - - def on_resolvable(resolved_future, index) - resolve_with resolved_future.internal_state, false - end - end - - class AnyFulfilledFuturePromise < AnyResolvedFuturePromise - - private - - def resolvable?(countdown, event_or_future, index) - (event_or_future.is_a?(Event) ? event_or_future.resolved? : event_or_future.fulfilled?) || - # inlined super from BlockedPromise - countdown.zero? - end - end - - class DelayPromise < InnerPromise - - def initialize(default_executor) - event = Event.new(self, default_executor) - @Delayed = LockFreeStack.of1(self) - super event - event.add_callback_clear_delayed_node @Delayed.peek - end - - def touch - @Future.resolve_with RESOLVED - end - - def delayed_because - @Delayed - end - - end - - class ScheduledPromise < InnerPromise - def intended_time - @IntendedTime - end - - def inspect - "#{to_s[0..-2]} intended_time: #{@IntendedTime}>" - end - - private - - def initialize(default_executor, intended_time) - super Event.new(self, default_executor) - - @IntendedTime = intended_time - - in_seconds = begin - now = Time.now - schedule_time = if @IntendedTime.is_a? Time - @IntendedTime - else - now + @IntendedTime - end - [0, schedule_time.to_f - now.to_f].max - end - - Concurrent.global_timer_set.post(in_seconds) do - @Future.resolve_with RESOLVED - end - end - end - - extend FactoryMethods - - private_constant :AbstractPromise, - :ResolvableEventPromise, - :ResolvableFuturePromise, - :InnerPromise, - :BlockedPromise, - :BlockedTaskPromise, - :ThenPromise, - :RescuePromise, - :ChainPromise, - :ImmediateEventPromise, - :ImmediateFuturePromise, - :AbstractFlatPromise, - :FlatFuturePromise, - :FlatEventPromise, - :RunFuturePromise, - :ZipEventEventPromise, - :ZipFutureEventPromise, - :EventWrapperPromise, - :FutureWrapperPromise, - :ZipFuturesPromise, - :ZipEventsPromise, - :AbstractAnyPromise, - :AnyResolvedFuturePromise, - :AnyFulfilledFuturePromise, - :AnyResolvedEventPromise, - :DelayPromise, - :ScheduledPromise - - - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/re_include.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/re_include.rb deleted file mode 100644 index 600bc6a5..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/re_include.rb +++ /dev/null @@ -1,60 +0,0 @@ -module Concurrent - - # Methods form module A included to a module B, which is already included into class C, - # will not be visible in the C class. If this module is extended to B then A's methods - # are correctly made visible to C. - # - # @example - # module A - # def a - # :a - # end - # end - # - # module B1 - # end - # - # class C1 - # include B1 - # end - # - # module B2 - # extend Concurrent::ReInclude - # end - # - # class C2 - # include B2 - # end - # - # B1.send :include, A - # B2.send :include, A - # - # C1.new.respond_to? :a # => false - # C2.new.respond_to? :a # => true - # - # @!visibility private - module ReInclude - # @!visibility private - def included(base) - (@re_include_to_bases ||= []) << [:include, base] - super(base) - end - - # @!visibility private - def extended(base) - (@re_include_to_bases ||= []) << [:extend, base] - super(base) - end - - # @!visibility private - def include(*modules) - result = super(*modules) - modules.reverse.each do |module_being_included| - (@re_include_to_bases ||= []).each do |method, mod| - mod.send method, module_being_included - end - end - result - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/scheduled_task.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/scheduled_task.rb deleted file mode 100644 index 429fc068..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/scheduled_task.rb +++ /dev/null @@ -1,331 +0,0 @@ -require 'concurrent/constants' -require 'concurrent/errors' -require 'concurrent/configuration' -require 'concurrent/ivar' -require 'concurrent/collection/copy_on_notify_observer_set' -require 'concurrent/utility/monotonic_time' - -require 'concurrent/options' - -module Concurrent - - # `ScheduledTask` is a close relative of `Concurrent::Future` but with one - # important difference: A `Future` is set to execute as soon as possible - # whereas a `ScheduledTask` is set to execute after a specified delay. This - # implementation is loosely based on Java's - # [ScheduledExecutorService](http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ScheduledExecutorService.html). - # It is a more feature-rich variant of {Concurrent.timer}. - # - # The *intended* schedule time of task execution is set on object construction - # with the `delay` argument. The delay is a numeric (floating point or integer) - # representing a number of seconds in the future. Any other value or a numeric - # equal to or less than zero will result in an exception. The *actual* schedule - # time of task execution is set when the `execute` method is called. - # - # The constructor can also be given zero or more processing options. Currently - # the only supported options are those recognized by the - # [Dereferenceable](Dereferenceable) module. - # - # The final constructor argument is a block representing the task to be performed. - # If no block is given an `ArgumentError` will be raised. - # - # **States** - # - # `ScheduledTask` mixes in the [Obligation](Obligation) module thus giving it - # "future" behavior. This includes the expected lifecycle states. `ScheduledTask` - # has one additional state, however. While the task (block) is being executed the - # state of the object will be `:processing`. This additional state is necessary - # because it has implications for task cancellation. - # - # **Cancellation** - # - # A `:pending` task can be cancelled using the `#cancel` method. A task in any - # other state, including `:processing`, cannot be cancelled. The `#cancel` - # method returns a boolean indicating the success of the cancellation attempt. - # A cancelled `ScheduledTask` cannot be restarted. It is immutable. - # - # **Obligation and Observation** - # - # The result of a `ScheduledTask` can be obtained either synchronously or - # asynchronously. `ScheduledTask` mixes in both the [Obligation](Obligation) - # module and the - # [Observable](http://ruby-doc.org/stdlib-2.0/libdoc/observer/rdoc/Observable.html) - # module from the Ruby standard library. With one exception `ScheduledTask` - # behaves identically to [Future](Observable) with regard to these modules. - # - # @!macro copy_options - # - # @example Basic usage - # - # require 'concurrent/scheduled_task' - # require 'csv' - # require 'open-uri' - # - # class Ticker - # def get_year_end_closing(symbol, year, api_key) - # uri = "https://www.alphavantage.co/query?function=TIME_SERIES_MONTHLY&symbol=#{symbol}&apikey=#{api_key}&datatype=csv" - # data = [] - # csv = URI.parse(uri).read - # if csv.include?('call frequency') - # return :rate_limit_exceeded - # end - # CSV.parse(csv, headers: true) do |row| - # data << row['close'].to_f if row['timestamp'].include?(year.to_s) - # end - # year_end = data.first - # year_end - # rescue => e - # p e - # end - # end - # - # api_key = ENV['ALPHAVANTAGE_KEY'] - # abort(error_message) unless api_key - # - # # Future - # price = Concurrent::Future.execute{ Ticker.new.get_year_end_closing('TWTR', 2013, api_key) } - # price.state #=> :pending - # price.pending? #=> true - # price.value(0) #=> nil (does not block) - # - # sleep(1) # do other stuff - # - # price.value #=> 63.65 (after blocking if necessary) - # price.state #=> :fulfilled - # price.fulfilled? #=> true - # price.value #=> 63.65 - # - # @example Successful task execution - # - # task = Concurrent::ScheduledTask.new(2){ 'What does the fox say?' } - # task.state #=> :unscheduled - # task.execute - # task.state #=> pending - # - # # wait for it... - # sleep(3) - # - # task.unscheduled? #=> false - # task.pending? #=> false - # task.fulfilled? #=> true - # task.rejected? #=> false - # task.value #=> 'What does the fox say?' - # - # @example One line creation and execution - # - # task = Concurrent::ScheduledTask.new(2){ 'What does the fox say?' }.execute - # task.state #=> pending - # - # task = Concurrent::ScheduledTask.execute(2){ 'What do you get when you multiply 6 by 9?' } - # task.state #=> pending - # - # @example Failed task execution - # - # task = Concurrent::ScheduledTask.execute(2){ raise StandardError.new('Call me maybe?') } - # task.pending? #=> true - # - # # wait for it... - # sleep(3) - # - # task.unscheduled? #=> false - # task.pending? #=> false - # task.fulfilled? #=> false - # task.rejected? #=> true - # task.value #=> nil - # task.reason #=> # - # - # @example Task execution with observation - # - # observer = Class.new{ - # def update(time, value, reason) - # puts "The task completed at #{time} with value '#{value}'" - # end - # }.new - # - # task = Concurrent::ScheduledTask.new(2){ 'What does the fox say?' } - # task.add_observer(observer) - # task.execute - # task.pending? #=> true - # - # # wait for it... - # sleep(3) - # - # #>> The task completed at 2013-11-07 12:26:09 -0500 with value 'What does the fox say?' - # - # @!macro monotonic_clock_warning - # - # @see Concurrent.timer - class ScheduledTask < IVar - include Comparable - - # The executor on which to execute the task. - # @!visibility private - attr_reader :executor - - # Schedule a task for execution at a specified future time. - # - # @param [Float] delay the number of seconds to wait for before executing the task - # - # @yield the task to be performed - # - # @!macro executor_and_deref_options - # - # @option opts [object, Array] :args zero or more arguments to be passed the task - # block on execution - # - # @raise [ArgumentError] When no block is given - # @raise [ArgumentError] When given a time that is in the past - def initialize(delay, opts = {}, &task) - raise ArgumentError.new('no block given') unless block_given? - raise ArgumentError.new('seconds must be greater than zero') if delay.to_f < 0.0 - - super(NULL, opts, &nil) - - synchronize do - ns_set_state(:unscheduled) - @parent = opts.fetch(:timer_set, Concurrent.global_timer_set) - @args = get_arguments_from(opts) - @delay = delay.to_f - @task = task - @time = nil - @executor = Options.executor_from_options(opts) || Concurrent.global_io_executor - self.observers = Collection::CopyOnNotifyObserverSet.new - end - end - - # The `delay` value given at instanciation. - # - # @return [Float] the initial delay. - def initial_delay - synchronize { @delay } - end - - # The monotonic time at which the the task is scheduled to be executed. - # - # @return [Float] the schedule time or nil if `unscheduled` - def schedule_time - synchronize { @time } - end - - # Comparator which orders by schedule time. - # - # @!visibility private - def <=>(other) - schedule_time <=> other.schedule_time - end - - # Has the task been cancelled? - # - # @return [Boolean] true if the task is in the given state else false - def cancelled? - synchronize { ns_check_state?(:cancelled) } - end - - # In the task execution in progress? - # - # @return [Boolean] true if the task is in the given state else false - def processing? - synchronize { ns_check_state?(:processing) } - end - - # Cancel this task and prevent it from executing. A task can only be - # cancelled if it is pending or unscheduled. - # - # @return [Boolean] true if successfully cancelled else false - def cancel - if compare_and_set_state(:cancelled, :pending, :unscheduled) - complete(false, nil, CancelledOperationError.new) - # To avoid deadlocks this call must occur outside of #synchronize - # Changing the state above should prevent redundant calls - @parent.send(:remove_task, self) - else - false - end - end - - # Reschedule the task using the original delay and the current time. - # A task can only be reset while it is `:pending`. - # - # @return [Boolean] true if successfully rescheduled else false - def reset - synchronize{ ns_reschedule(@delay) } - end - - # Reschedule the task using the given delay and the current time. - # A task can only be reset while it is `:pending`. - # - # @param [Float] delay the number of seconds to wait for before executing the task - # - # @return [Boolean] true if successfully rescheduled else false - # - # @raise [ArgumentError] When given a time that is in the past - def reschedule(delay) - delay = delay.to_f - raise ArgumentError.new('seconds must be greater than zero') if delay < 0.0 - synchronize{ ns_reschedule(delay) } - end - - # Execute an `:unscheduled` `ScheduledTask`. Immediately sets the state to `:pending` - # and starts counting down toward execution. Does nothing if the `ScheduledTask` is - # in any state other than `:unscheduled`. - # - # @return [ScheduledTask] a reference to `self` - def execute - if compare_and_set_state(:pending, :unscheduled) - synchronize{ ns_schedule(@delay) } - end - self - end - - # Create a new `ScheduledTask` object with the given block, execute it, and return the - # `:pending` object. - # - # @param [Float] delay the number of seconds to wait for before executing the task - # - # @!macro executor_and_deref_options - # - # @return [ScheduledTask] the newly created `ScheduledTask` in the `:pending` state - # - # @raise [ArgumentError] if no block is given - def self.execute(delay, opts = {}, &task) - new(delay, opts, &task).execute - end - - # Execute the task. - # - # @!visibility private - def process_task - safe_execute(@task, @args) - end - - protected :set, :try_set, :fail, :complete - - protected - - # Schedule the task using the given delay and the current time. - # - # @param [Float] delay the number of seconds to wait for before executing the task - # - # @return [Boolean] true if successfully rescheduled else false - # - # @!visibility private - def ns_schedule(delay) - @delay = delay - @time = Concurrent.monotonic_time + @delay - @parent.send(:post_task, self) - end - - # Reschedule the task using the given delay and the current time. - # A task can only be reset while it is `:pending`. - # - # @param [Float] delay the number of seconds to wait for before executing the task - # - # @return [Boolean] true if successfully rescheduled else false - # - # @!visibility private - def ns_reschedule(delay) - return false unless ns_check_state?(:pending) - @parent.send(:remove_task, self) && ns_schedule(delay) - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/set.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/set.rb deleted file mode 100644 index eee4effd..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/set.rb +++ /dev/null @@ -1,64 +0,0 @@ -require 'concurrent/utility/engine' -require 'concurrent/thread_safe/util' -require 'set' - -module Concurrent - - # @!macro concurrent_set - # - # A thread-safe subclass of Set. This version locks against the object - # itself for every method call, ensuring only one thread can be reading - # or writing at a time. This includes iteration methods like `#each`. - # - # @note `a += b` is **not** a **thread-safe** operation on - # `Concurrent::Set`. It reads Set `a`, then it creates new `Concurrent::Set` - # which is union of `a` and `b`, then it writes the union to `a`. - # The read and write are independent operations they do not form a single atomic - # operation therefore when two `+=` operations are executed concurrently updates - # may be lost. Use `#merge` instead. - # - # @see http://ruby-doc.org/stdlib-2.4.0/libdoc/set/rdoc/Set.html Ruby standard library `Set` - - # @!macro internal_implementation_note - SetImplementation = case - when Concurrent.on_cruby? - # The CRuby implementation of Set is written in Ruby itself and is - # not thread safe for certain methods. - require 'monitor' - require 'concurrent/thread_safe/util/data_structures' - - class CRubySet < ::Set - end - - ThreadSafe::Util.make_synchronized_on_cruby CRubySet - CRubySet - - when Concurrent.on_jruby? - require 'jruby/synchronized' - - class JRubySet < ::Set - include JRuby::Synchronized - end - - JRubySet - - when Concurrent.on_truffleruby? - require 'concurrent/thread_safe/util/data_structures' - - class TruffleRubySet < ::Set - end - - ThreadSafe::Util.make_synchronized_on_truffleruby TruffleRubySet - TruffleRubySet - - else - warn 'Possibly unsupported Ruby implementation' - ::Set - end - private_constant :SetImplementation - - # @!macro concurrent_set - class Set < SetImplementation - end -end - diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/settable_struct.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/settable_struct.rb deleted file mode 100644 index 99b85619..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/settable_struct.rb +++ /dev/null @@ -1,139 +0,0 @@ -require 'concurrent/errors' -require 'concurrent/synchronization/abstract_struct' -require 'concurrent/synchronization/lockable_object' - -module Concurrent - - # An thread-safe, write-once variation of Ruby's standard `Struct`. - # Each member can have its value set at most once, either at construction - # or any time thereafter. Attempting to assign a value to a member - # that has already been set will result in a `Concurrent::ImmutabilityError`. - # - # @see http://ruby-doc.org/core/Struct.html Ruby standard library `Struct` - # @see http://en.wikipedia.org/wiki/Final_(Java) Java `final` keyword - module SettableStruct - include Synchronization::AbstractStruct - - # @!macro struct_values - def values - synchronize { ns_values } - end - alias_method :to_a, :values - - # @!macro struct_values_at - def values_at(*indexes) - synchronize { ns_values_at(indexes) } - end - - # @!macro struct_inspect - def inspect - synchronize { ns_inspect } - end - alias_method :to_s, :inspect - - # @!macro struct_merge - def merge(other, &block) - synchronize { ns_merge(other, &block) } - end - - # @!macro struct_to_h - def to_h - synchronize { ns_to_h } - end - - # @!macro struct_get - def [](member) - synchronize { ns_get(member) } - end - - # @!macro struct_equality - def ==(other) - synchronize { ns_equality(other) } - end - - # @!macro struct_each - def each(&block) - return enum_for(:each) unless block_given? - synchronize { ns_each(&block) } - end - - # @!macro struct_each_pair - def each_pair(&block) - return enum_for(:each_pair) unless block_given? - synchronize { ns_each_pair(&block) } - end - - # @!macro struct_select - def select(&block) - return enum_for(:select) unless block_given? - synchronize { ns_select(&block) } - end - - # @!macro struct_set - # - # @raise [Concurrent::ImmutabilityError] if the given member has already been set - def []=(member, value) - if member.is_a? Integer - length = synchronize { @values.length } - if member >= length - raise IndexError.new("offset #{member} too large for struct(size:#{length})") - end - synchronize do - unless @values[member].nil? - raise Concurrent::ImmutabilityError.new('struct member has already been set') - end - @values[member] = value - end - else - send("#{member}=", value) - end - rescue NoMethodError - raise NameError.new("no member '#{member}' in struct") - end - - private - - # @!visibility private - def initialize_copy(original) - synchronize do - super(original) - ns_initialize_copy - end - end - - # @!macro struct_new - def self.new(*args, &block) - clazz_name = nil - if args.length == 0 - raise ArgumentError.new('wrong number of arguments (0 for 1+)') - elsif args.length > 0 && args.first.is_a?(String) - clazz_name = args.shift - end - FACTORY.define_struct(clazz_name, args, &block) - end - - FACTORY = Class.new(Synchronization::LockableObject) do - def define_struct(name, members, &block) - synchronize do - clazz = Synchronization::AbstractStruct.define_struct_class(SettableStruct, Synchronization::LockableObject, name, members, &block) - members.each_with_index do |member, index| - clazz.send :remove_method, member if clazz.instance_methods.include? member - clazz.send(:define_method, member) do - synchronize { @values[index] } - end - clazz.send(:define_method, "#{member}=") do |value| - synchronize do - unless @values[index].nil? - raise Concurrent::ImmutabilityError.new('struct member has already been set') - end - @values[index] = value - end - end - end - clazz - end - end - end.new - private_constant :FACTORY - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/synchronization.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/synchronization.rb deleted file mode 100644 index 6d8cf4bd..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/synchronization.rb +++ /dev/null @@ -1,13 +0,0 @@ -require 'concurrent/utility/native_extension_loader' # load native parts first - -require 'concurrent/synchronization/object' -require 'concurrent/synchronization/lockable_object' -require 'concurrent/synchronization/condition' -require 'concurrent/synchronization/lock' - -module Concurrent - # @!visibility private - module Synchronization - end -end - diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/synchronization/abstract_lockable_object.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/synchronization/abstract_lockable_object.rb deleted file mode 100644 index d9050b31..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/synchronization/abstract_lockable_object.rb +++ /dev/null @@ -1,102 +0,0 @@ -require 'concurrent/utility/native_extension_loader' # load native parts first -require 'concurrent/utility/monotonic_time' -require 'concurrent/synchronization/object' - -module Concurrent - module Synchronization - - # @!visibility private - class AbstractLockableObject < Synchronization::Object - - protected - - # @!macro synchronization_object_method_synchronize - # - # @yield runs the block synchronized against this object, - # equivalent of java's `synchronize(this) {}` - # @note can by made public in descendants if required by `public :synchronize` - def synchronize - raise NotImplementedError - end - - # @!macro synchronization_object_method_ns_wait_until - # - # Wait until condition is met or timeout passes, - # protects against spurious wake-ups. - # @param [Numeric, nil] timeout in seconds, `nil` means no timeout - # @yield condition to be met - # @yieldreturn [true, false] - # @return [true, false] if condition met - # @note only to be used inside synchronized block - # @note to provide direct access to this method in a descendant add method - # ``` - # def wait_until(timeout = nil, &condition) - # synchronize { ns_wait_until(timeout, &condition) } - # end - # ``` - def ns_wait_until(timeout = nil, &condition) - if timeout - wait_until = Concurrent.monotonic_time + timeout - loop do - now = Concurrent.monotonic_time - condition_result = condition.call - return condition_result if now >= wait_until || condition_result - ns_wait wait_until - now - end - else - ns_wait timeout until condition.call - true - end - end - - # @!macro synchronization_object_method_ns_wait - # - # Wait until another thread calls #signal or #broadcast, - # spurious wake-ups can happen. - # - # @param [Numeric, nil] timeout in seconds, `nil` means no timeout - # @return [self] - # @note only to be used inside synchronized block - # @note to provide direct access to this method in a descendant add method - # ``` - # def wait(timeout = nil) - # synchronize { ns_wait(timeout) } - # end - # ``` - def ns_wait(timeout = nil) - raise NotImplementedError - end - - # @!macro synchronization_object_method_ns_signal - # - # Signal one waiting thread. - # @return [self] - # @note only to be used inside synchronized block - # @note to provide direct access to this method in a descendant add method - # ``` - # def signal - # synchronize { ns_signal } - # end - # ``` - def ns_signal - raise NotImplementedError - end - - # @!macro synchronization_object_method_ns_broadcast - # - # Broadcast to all waiting threads. - # @return [self] - # @note only to be used inside synchronized block - # @note to provide direct access to this method in a descendant add method - # ``` - # def broadcast - # synchronize { ns_broadcast } - # end - # ``` - def ns_broadcast - raise NotImplementedError - end - - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/synchronization/abstract_object.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/synchronization/abstract_object.rb deleted file mode 100644 index 7cd2decf..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/synchronization/abstract_object.rb +++ /dev/null @@ -1,22 +0,0 @@ -module Concurrent - module Synchronization - - # @!visibility private - # @!macro internal_implementation_note - class AbstractObject - def initialize - # nothing to do - end - - # @!visibility private - # @abstract - def full_memory_barrier - raise NotImplementedError - end - - def self.attr_volatile(*names) - raise NotImplementedError - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/synchronization/abstract_struct.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/synchronization/abstract_struct.rb deleted file mode 100644 index 1fe90c16..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/synchronization/abstract_struct.rb +++ /dev/null @@ -1,171 +0,0 @@ -module Concurrent - module Synchronization - - # @!visibility private - # @!macro internal_implementation_note - module AbstractStruct - - # @!visibility private - def initialize(*values) - super() - ns_initialize(*values) - end - - # @!macro struct_length - # - # Returns the number of struct members. - # - # @return [Fixnum] the number of struct members - def length - self.class::MEMBERS.length - end - alias_method :size, :length - - # @!macro struct_members - # - # Returns the struct members as an array of symbols. - # - # @return [Array] the struct members as an array of symbols - def members - self.class::MEMBERS.dup - end - - protected - - # @!macro struct_values - # - # @!visibility private - def ns_values - @values.dup - end - - # @!macro struct_values_at - # - # @!visibility private - def ns_values_at(indexes) - @values.values_at(*indexes) - end - - # @!macro struct_to_h - # - # @!visibility private - def ns_to_h - length.times.reduce({}){|memo, i| memo[self.class::MEMBERS[i]] = @values[i]; memo} - end - - # @!macro struct_get - # - # @!visibility private - def ns_get(member) - if member.is_a? Integer - if member >= @values.length - raise IndexError.new("offset #{member} too large for struct(size:#{@values.length})") - end - @values[member] - else - send(member) - end - rescue NoMethodError - raise NameError.new("no member '#{member}' in struct") - end - - # @!macro struct_equality - # - # @!visibility private - def ns_equality(other) - self.class == other.class && self.values == other.values - end - - # @!macro struct_each - # - # @!visibility private - def ns_each - values.each{|value| yield value } - end - - # @!macro struct_each_pair - # - # @!visibility private - def ns_each_pair - @values.length.times do |index| - yield self.class::MEMBERS[index], @values[index] - end - end - - # @!macro struct_select - # - # @!visibility private - def ns_select - values.select{|value| yield value } - end - - # @!macro struct_inspect - # - # @!visibility private - def ns_inspect - struct = pr_underscore(self.class.ancestors[1]) - clazz = ((self.class.to_s =~ /^#" - end - - # @!macro struct_merge - # - # @!visibility private - def ns_merge(other, &block) - self.class.new(*self.to_h.merge(other, &block).values) - end - - # @!visibility private - def ns_initialize_copy - @values = @values.map do |val| - begin - val.clone - rescue TypeError - val - end - end - end - - # @!visibility private - def pr_underscore(clazz) - word = clazz.to_s.dup # dup string to workaround JRuby 9.2.0.0 bug https://github.com/jruby/jruby/issues/5229 - word.gsub!(/::/, '/') - word.gsub!(/([A-Z]+)([A-Z][a-z])/,'\1_\2') - word.gsub!(/([a-z\d])([A-Z])/,'\1_\2') - word.tr!("-", "_") - word.downcase! - word - end - - # @!visibility private - def self.define_struct_class(parent, base, name, members, &block) - clazz = Class.new(base || Object) do - include parent - self.const_set(:MEMBERS, members.collect{|member| member.to_s.to_sym}.freeze) - def ns_initialize(*values) - raise ArgumentError.new('struct size differs') if values.length > length - @values = values.fill(nil, values.length..length-1) - end - end - unless name.nil? - begin - parent.send :remove_const, name if parent.const_defined?(name, false) - parent.const_set(name, clazz) - clazz - rescue NameError - raise NameError.new("identifier #{name} needs to be constant") - end - end - members.each_with_index do |member, index| - clazz.send :remove_method, member if clazz.instance_methods.include? member - clazz.send(:define_method, member) do - @values[index] - end - end - clazz.class_exec(&block) unless block.nil? - clazz.singleton_class.send :alias_method, :[], :new - clazz - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/synchronization/condition.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/synchronization/condition.rb deleted file mode 100644 index 5daa68be..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/synchronization/condition.rb +++ /dev/null @@ -1,62 +0,0 @@ -require 'concurrent/synchronization/lockable_object' - -module Concurrent - module Synchronization - - # @!visibility private - # TODO (pitr-ch 04-Dec-2016): should be in edge - class Condition < LockableObject - safe_initialization! - - # TODO (pitr 12-Sep-2015): locks two objects, improve - # TODO (pitr 26-Sep-2015): study - # http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/8-b132/java/util/concurrent/locks/AbstractQueuedSynchronizer.java#AbstractQueuedSynchronizer.Node - - singleton_class.send :alias_method, :private_new, :new - private_class_method :new - - def initialize(lock) - super() - @Lock = lock - end - - def wait(timeout = nil) - @Lock.synchronize { ns_wait(timeout) } - end - - def ns_wait(timeout = nil) - synchronize { super(timeout) } - end - - def wait_until(timeout = nil, &condition) - @Lock.synchronize { ns_wait_until(timeout, &condition) } - end - - def ns_wait_until(timeout = nil, &condition) - synchronize { super(timeout, &condition) } - end - - def signal - @Lock.synchronize { ns_signal } - end - - def ns_signal - synchronize { super } - end - - def broadcast - @Lock.synchronize { ns_broadcast } - end - - def ns_broadcast - synchronize { super } - end - end - - class LockableObject < LockableObjectImplementation - def new_condition - Condition.private_new(self) - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/synchronization/full_memory_barrier.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/synchronization/full_memory_barrier.rb deleted file mode 100644 index 139e08d8..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/synchronization/full_memory_barrier.rb +++ /dev/null @@ -1,29 +0,0 @@ -require 'concurrent/utility/native_extension_loader' # load native parts first - -module Concurrent - module Synchronization - case - when Concurrent.on_cruby? - def self.full_memory_barrier - # relying on undocumented behavior of CRuby, GVL acquire has lock which ensures visibility of ivars - # https://github.com/ruby/ruby/blob/ruby_2_2/thread_pthread.c#L204-L211 - end - - when Concurrent.on_jruby? - require 'concurrent/utility/native_extension_loader' - def self.full_memory_barrier - JRubyAttrVolatile.full_memory_barrier - end - - when Concurrent.on_truffleruby? - def self.full_memory_barrier - TruffleRuby.full_memory_barrier - end - - else - warn 'Possibly unsupported Ruby implementation' - def self.full_memory_barrier - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/synchronization/jruby_lockable_object.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/synchronization/jruby_lockable_object.rb deleted file mode 100644 index 76930461..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/synchronization/jruby_lockable_object.rb +++ /dev/null @@ -1,15 +0,0 @@ -require 'concurrent/utility/native_extension_loader' # load native parts first - -module Concurrent - module Synchronization - - if Concurrent.on_jruby? - - # @!visibility private - # @!macro internal_implementation_note - class JRubyLockableObject < AbstractLockableObject - - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/synchronization/lock.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/synchronization/lock.rb deleted file mode 100644 index f90e0b5f..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/synchronization/lock.rb +++ /dev/null @@ -1,38 +0,0 @@ -require 'concurrent/synchronization/lockable_object' - -module Concurrent - module Synchronization - - # @!visibility private - # TODO (pitr-ch 04-Dec-2016): should be in edge - class Lock < LockableObject - # TODO use JavaReentrantLock on JRuby - - public :synchronize - - def wait(timeout = nil) - synchronize { ns_wait(timeout) } - end - - public :ns_wait - - def wait_until(timeout = nil, &condition) - synchronize { ns_wait_until(timeout, &condition) } - end - - public :ns_wait_until - - def signal - synchronize { ns_signal } - end - - public :ns_signal - - def broadcast - synchronize { ns_broadcast } - end - - public :ns_broadcast - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/synchronization/lockable_object.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/synchronization/lockable_object.rb deleted file mode 100644 index 08d2ff66..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/synchronization/lockable_object.rb +++ /dev/null @@ -1,75 +0,0 @@ -require 'concurrent/utility/engine' -require 'concurrent/synchronization/abstract_lockable_object' -require 'concurrent/synchronization/mutex_lockable_object' -require 'concurrent/synchronization/jruby_lockable_object' - -module Concurrent - module Synchronization - - # @!visibility private - # @!macro internal_implementation_note - LockableObjectImplementation = case - when Concurrent.on_cruby? - MutexLockableObject - when Concurrent.on_jruby? - JRubyLockableObject - when Concurrent.on_truffleruby? - MutexLockableObject - else - warn 'Possibly unsupported Ruby implementation' - MonitorLockableObject - end - private_constant :LockableObjectImplementation - - # Safe synchronization under any Ruby implementation. - # It provides methods like {#synchronize}, {#wait}, {#signal} and {#broadcast}. - # Provides a single layer which can improve its implementation over time without changes needed to - # the classes using it. Use {Synchronization::Object} not this abstract class. - # - # @note this object does not support usage together with - # [`Thread#wakeup`](http://ruby-doc.org/core/Thread.html#method-i-wakeup) - # and [`Thread#raise`](http://ruby-doc.org/core/Thread.html#method-i-raise). - # `Thread#sleep` and `Thread#wakeup` will work as expected but mixing `Synchronization::Object#wait` and - # `Thread#wakeup` will not work on all platforms. - # - # @see Event implementation as an example of this class use - # - # @example simple - # class AnClass < Synchronization::Object - # def initialize - # super - # synchronize { @value = 'asd' } - # end - # - # def value - # synchronize { @value } - # end - # end - # - # @!visibility private - class LockableObject < LockableObjectImplementation - - # TODO (pitr 12-Sep-2015): make private for c-r, prohibit subclassing - # TODO (pitr 12-Sep-2015): we inherit too much ourselves :/ - - # @!method initialize(*args, &block) - # @!macro synchronization_object_method_initialize - - # @!method synchronize - # @!macro synchronization_object_method_synchronize - - # @!method wait_until(timeout = nil, &condition) - # @!macro synchronization_object_method_ns_wait_until - - # @!method wait(timeout = nil) - # @!macro synchronization_object_method_ns_wait - - # @!method signal - # @!macro synchronization_object_method_ns_signal - - # @!method broadcast - # @!macro synchronization_object_method_ns_broadcast - - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/synchronization/mutex_lockable_object.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/synchronization/mutex_lockable_object.rb deleted file mode 100644 index acc9745a..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/synchronization/mutex_lockable_object.rb +++ /dev/null @@ -1,89 +0,0 @@ -require 'concurrent/synchronization/abstract_lockable_object' - -module Concurrent - module Synchronization - - # @!visibility private - # @!macro internal_implementation_note - module ConditionSignalling - protected - - def ns_signal - @__Condition__.signal - self - end - - def ns_broadcast - @__Condition__.broadcast - self - end - end - - - # @!visibility private - # @!macro internal_implementation_note - class MutexLockableObject < AbstractLockableObject - include ConditionSignalling - - safe_initialization! - - def initialize - super() - @__Lock__ = ::Mutex.new - @__Condition__ = ::ConditionVariable.new - end - - def initialize_copy(other) - super - @__Lock__ = ::Mutex.new - @__Condition__ = ::ConditionVariable.new - end - - protected - - def synchronize - if @__Lock__.owned? - yield - else - @__Lock__.synchronize { yield } - end - end - - def ns_wait(timeout = nil) - @__Condition__.wait @__Lock__, timeout - self - end - end - - # @!visibility private - # @!macro internal_implementation_note - class MonitorLockableObject < AbstractLockableObject - include ConditionSignalling - - safe_initialization! - - def initialize - super() - @__Lock__ = ::Monitor.new - @__Condition__ = @__Lock__.new_cond - end - - def initialize_copy(other) - super - @__Lock__ = ::Monitor.new - @__Condition__ = @__Lock__.new_cond - end - - protected - - def synchronize # TODO may be a problem with lock.synchronize { lock.wait } - @__Lock__.synchronize { yield } - end - - def ns_wait(timeout = nil) - @__Condition__.wait timeout - self - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/synchronization/object.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/synchronization/object.rb deleted file mode 100644 index e839c9f1..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/synchronization/object.rb +++ /dev/null @@ -1,151 +0,0 @@ -require 'concurrent/utility/native_extension_loader' # load native parts first - -require 'concurrent/synchronization/safe_initialization' -require 'concurrent/synchronization/volatile' -require 'concurrent/atomic/atomic_reference' - -module Concurrent - module Synchronization - - # Abstract object providing final, volatile, ans CAS extensions to build other concurrent abstractions. - # - final instance variables see {Object.safe_initialization!} - # - volatile instance variables see {Object.attr_volatile} - # - volatile instance variables see {Object.attr_atomic} - # @!visibility private - class Object < AbstractObject - include Volatile - - # TODO make it a module if possible - - # @!method self.attr_volatile(*names) - # Creates methods for reading and writing (as `attr_accessor` does) to a instance variable with - # volatile (Java) semantic. The instance variable should be accessed only through generated methods. - # - # @param [::Array] names of the instance variables to be volatile - # @return [::Array] names of defined method names - - # Has to be called by children. - def initialize - super - __initialize_atomic_fields__ - end - - def self.safe_initialization! - extend SafeInitialization unless safe_initialization? - end - - def self.safe_initialization? - self.singleton_class < SafeInitialization - end - - # For testing purposes, quite slow. Injects assert code to new method which will raise if class instance contains - # any instance variables with CamelCase names and isn't {.safe_initialization?}. - # @raise when offend found - # @return [true] - def self.ensure_safe_initialization_when_final_fields_are_present - Object.class_eval do - def self.new(*args, &block) - object = super(*args, &block) - ensure - has_final_field = object.instance_variables.any? { |v| v.to_s =~ /^@[A-Z]/ } - if has_final_field && !safe_initialization? - raise "there was an instance of #{object.class} with final field but not marked with safe_initialization!" - end - end - end - true - end - - # Creates methods for reading and writing to a instance variable with - # volatile (Java) semantic as {.attr_volatile} does. - # The instance variable should be accessed oly through generated methods. - # This method generates following methods: `value`, `value=(new_value) #=> new_value`, - # `swap_value(new_value) #=> old_value`, - # `compare_and_set_value(expected, value) #=> true || false`, `update_value(&block)`. - # @param [::Array] names of the instance variables to be volatile with CAS. - # @return [::Array] names of defined method names. - # @!macro attr_atomic - # @!method $1 - # @return [Object] The $1. - # @!method $1=(new_$1) - # Set the $1. - # @return [Object] new_$1. - # @!method swap_$1(new_$1) - # Set the $1 to new_$1 and return the old $1. - # @return [Object] old $1 - # @!method compare_and_set_$1(expected_$1, new_$1) - # Sets the $1 to new_$1 if the current $1 is expected_$1 - # @return [true, false] - # @!method update_$1(&block) - # Updates the $1 using the block. - # @yield [Object] Calculate a new $1 using given (old) $1 - # @yieldparam [Object] old $1 - # @return [Object] new $1 - def self.attr_atomic(*names) - @__atomic_fields__ ||= [] - @__atomic_fields__ += names - safe_initialization! - define_initialize_atomic_fields - - names.each do |name| - ivar = :"@Atomic#{name.to_s.gsub(/(?:^|_)(.)/) { $1.upcase }}" - class_eval <<-RUBY, __FILE__, __LINE__ + 1 - def #{name} - #{ivar}.get - end - - def #{name}=(value) - #{ivar}.set value - end - - def swap_#{name}(value) - #{ivar}.swap value - end - - def compare_and_set_#{name}(expected, value) - #{ivar}.compare_and_set expected, value - end - - def update_#{name}(&block) - #{ivar}.update(&block) - end - RUBY - end - names.flat_map { |n| [n, :"#{n}=", :"swap_#{n}", :"compare_and_set_#{n}", :"update_#{n}"] } - end - - # @param [true, false] inherited should inherited volatile with CAS fields be returned? - # @return [::Array] Returns defined volatile with CAS fields on this class. - def self.atomic_attributes(inherited = true) - @__atomic_fields__ ||= [] - ((superclass.atomic_attributes if superclass.respond_to?(:atomic_attributes) && inherited) || []) + @__atomic_fields__ - end - - # @return [true, false] is the attribute with name atomic? - def self.atomic_attribute?(name) - atomic_attributes.include? name - end - - private - - def self.define_initialize_atomic_fields - assignments = @__atomic_fields__.map do |name| - "@Atomic#{name.to_s.gsub(/(?:^|_)(.)/) { $1.upcase }} = Concurrent::AtomicReference.new(nil)" - end.join("\n") - - class_eval <<-RUBY, __FILE__, __LINE__ + 1 - def __initialize_atomic_fields__ - super - #{assignments} - end - RUBY - end - - private_class_method :define_initialize_atomic_fields - - def __initialize_atomic_fields__ - end - - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/synchronization/safe_initialization.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/synchronization/safe_initialization.rb deleted file mode 100644 index f785e352..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/synchronization/safe_initialization.rb +++ /dev/null @@ -1,36 +0,0 @@ -require 'concurrent/synchronization/full_memory_barrier' - -module Concurrent - module Synchronization - - # @!visibility private - # @!macro internal_implementation_note - # - # By extending this module, a class and all its children are marked to be constructed safely. Meaning that - # all writes (ivar initializations) are made visible to all readers of newly constructed object. It ensures - # same behaviour as Java's final fields. - # - # Due to using Kernel#extend, the module is not included again if already present in the ancestors, - # which avoids extra overhead. - # - # @example - # class AClass < Concurrent::Synchronization::Object - # extend Concurrent::Synchronization::SafeInitialization - # - # def initialize - # @AFinalValue = 'value' # published safely, #foo will never return nil - # end - # - # def foo - # @AFinalValue - # end - # end - module SafeInitialization - def new(*args, &block) - super(*args, &block) - ensure - Concurrent::Synchronization.full_memory_barrier - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/synchronization/volatile.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/synchronization/volatile.rb deleted file mode 100644 index 46e8ba6a..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/synchronization/volatile.rb +++ /dev/null @@ -1,101 +0,0 @@ -require 'concurrent/utility/native_extension_loader' # load native parts first -require 'concurrent/utility/engine' -require 'concurrent/synchronization/full_memory_barrier' - -module Concurrent - module Synchronization - - # Volatile adds the attr_volatile class method when included. - # - # @example - # class Foo - # include Concurrent::Synchronization::Volatile - # - # attr_volatile :bar - # - # def initialize - # self.bar = 1 - # end - # end - # - # foo = Foo.new - # foo.bar - # => 1 - # foo.bar = 2 - # => 2 - # - # @!visibility private - module Volatile - def self.included(base) - base.extend(ClassMethods) - end - - def full_memory_barrier - Synchronization.full_memory_barrier - end - - module ClassMethods - if Concurrent.on_cruby? - def attr_volatile(*names) - names.each do |name| - ivar = :"@volatile_#{name}" - class_eval <<-RUBY, __FILE__, __LINE__ + 1 - def #{name} - #{ivar} - end - - def #{name}=(value) - #{ivar} = value - end - RUBY - end - names.map { |n| [n, :"#{n}="] }.flatten - end - - elsif Concurrent.on_jruby? - def attr_volatile(*names) - names.each do |name| - ivar = :"@volatile_#{name}" - - class_eval <<-RUBY, __FILE__, __LINE__ + 1 - def #{name} - ::Concurrent::Synchronization::JRubyAttrVolatile.instance_variable_get_volatile(self, :#{ivar}) - end - - def #{name}=(value) - ::Concurrent::Synchronization::JRubyAttrVolatile.instance_variable_set_volatile(self, :#{ivar}, value) - end - RUBY - - end - names.map { |n| [n, :"#{n}="] }.flatten - end - - else - warn 'Possibly unsupported Ruby implementation' unless Concurrent.on_truffleruby? - - def attr_volatile(*names) - names.each do |name| - ivar = :"@volatile_#{name}" - - class_eval <<-RUBY, __FILE__, __LINE__ + 1 - def #{name} - ::Concurrent::Synchronization.full_memory_barrier - #{ivar} - end - - def #{name}=(value) - #{ivar} = value - ::Concurrent::Synchronization.full_memory_barrier - end - RUBY - end - - names.map { |n| [n, :"#{n}="] }.flatten - end - end - end - - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/thread_safe/synchronized_delegator.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/thread_safe/synchronized_delegator.rb deleted file mode 100644 index 019d8438..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/thread_safe/synchronized_delegator.rb +++ /dev/null @@ -1,47 +0,0 @@ -require 'delegate' -require 'monitor' - -module Concurrent - # This class provides a trivial way to synchronize all calls to a given object - # by wrapping it with a `Delegator` that performs `Monitor#enter/exit` calls - # around the delegated `#send`. Example: - # - # array = [] # not thread-safe on many impls - # array = SynchronizedDelegator.new([]) # thread-safe - # - # A simple `Monitor` provides a very coarse-grained way to synchronize a given - # object, in that it will cause synchronization for methods that have no need - # for it, but this is a trivial way to get thread-safety where none may exist - # currently on some implementations. - # - # This class is currently being considered for inclusion into stdlib, via - # https://bugs.ruby-lang.org/issues/8556 - # - # @!visibility private - class SynchronizedDelegator < SimpleDelegator - def setup - @old_abort = Thread.abort_on_exception - Thread.abort_on_exception = true - end - - def teardown - Thread.abort_on_exception = @old_abort - end - - def initialize(obj) - __setobj__(obj) - @monitor = Monitor.new - end - - def method_missing(method, *args, &block) - monitor = @monitor - begin - monitor.enter - super - ensure - monitor.exit - end - end - - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/thread_safe/util.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/thread_safe/util.rb deleted file mode 100644 index c67084a2..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/thread_safe/util.rb +++ /dev/null @@ -1,16 +0,0 @@ -module Concurrent - - # @!visibility private - module ThreadSafe - - # @!visibility private - module Util - - # TODO (pitr-ch 15-Oct-2016): migrate to Utility::NativeInteger - FIXNUM_BIT_SIZE = (0.size * 8) - 2 - MAX_INT = (2 ** FIXNUM_BIT_SIZE) - 1 - # TODO (pitr-ch 15-Oct-2016): migrate to Utility::ProcessorCounter - CPU_COUNT = 16 # is there a way to determine this? - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/thread_safe/util/adder.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/thread_safe/util/adder.rb deleted file mode 100644 index 7a6e8d5c..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/thread_safe/util/adder.rb +++ /dev/null @@ -1,74 +0,0 @@ -require 'concurrent/thread_safe/util' -require 'concurrent/thread_safe/util/striped64' - -module Concurrent - - # @!visibility private - module ThreadSafe - - # @!visibility private - module Util - - # A Ruby port of the Doug Lea's jsr166e.LondAdder class version 1.8 - # available in public domain. - # - # Original source code available here: - # http://gee.cs.oswego.edu/cgi-bin/viewcvs.cgi/jsr166/src/jsr166e/LongAdder.java?revision=1.8 - # - # One or more variables that together maintain an initially zero - # sum. When updates (method +add+) are contended across threads, - # the set of variables may grow dynamically to reduce contention. - # Method +sum+ returns the current total combined across the - # variables maintaining the sum. - # - # This class is usually preferable to single +Atomic+ reference when - # multiple threads update a common sum that is used for purposes such - # as collecting statistics, not for fine-grained synchronization - # control. Under low update contention, the two classes have similar - # characteristics. But under high contention, expected throughput of - # this class is significantly higher, at the expense of higher space - # consumption. - # - # @!visibility private - class Adder < Striped64 - # Adds the given value. - def add(x) - if (current_cells = cells) || !cas_base_computed {|current_base| current_base + x} - was_uncontended = true - hash = hash_code - unless current_cells && (cell = current_cells.volatile_get_by_hash(hash)) && (was_uncontended = cell.cas_computed {|current_value| current_value + x}) - retry_update(x, hash, was_uncontended) {|current_value| current_value + x} - end - end - end - - def increment - add(1) - end - - def decrement - add(-1) - end - - # Returns the current sum. The returned value is _NOT_ an - # atomic snapshot: Invocation in the absence of concurrent - # updates returns an accurate result, but concurrent updates that - # occur while the sum is being calculated might not be - # incorporated. - def sum - x = base - if current_cells = cells - current_cells.each do |cell| - x += cell.value if cell - end - end - x - end - - def reset - internal_reset(0) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/thread_safe/util/data_structures.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/thread_safe/util/data_structures.rb deleted file mode 100644 index 01eb98f4..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/thread_safe/util/data_structures.rb +++ /dev/null @@ -1,52 +0,0 @@ -require 'concurrent/thread_safe/util' -require 'concurrent/utility/engine' - -# Shim for TruffleRuby.synchronized -if Concurrent.on_truffleruby? && !TruffleRuby.respond_to?(:synchronized) - module TruffleRuby - def self.synchronized(object, &block) - Truffle::System.synchronized(object, &block) - end - end -end - -module Concurrent - module ThreadSafe - module Util - def self.make_synchronized_on_cruby(klass) - klass.class_eval do - def initialize(*args, &block) - @_monitor = Monitor.new - super - end - - def initialize_copy(other) - # make sure a copy is not sharing a monitor with the original object! - @_monitor = Monitor.new - super - end - end - - klass.superclass.instance_methods(false).each do |method| - klass.class_eval <<-RUBY, __FILE__, __LINE__ + 1 - def #{method}(*args) - monitor = @_monitor - monitor or raise("BUG: Internal monitor was not properly initialized. Please report this to the concurrent-ruby developers.") - monitor.synchronize { super } - end - RUBY - end - end - - def self.make_synchronized_on_truffleruby(klass) - klass.superclass.instance_methods(false).each do |method| - klass.class_eval <<-RUBY, __FILE__, __LINE__ + 1 - def #{method}(*args, &block) - TruffleRuby.synchronized(self) { super(*args, &block) } - end - RUBY - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/thread_safe/util/power_of_two_tuple.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/thread_safe/util/power_of_two_tuple.rb deleted file mode 100644 index b54be39c..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/thread_safe/util/power_of_two_tuple.rb +++ /dev/null @@ -1,38 +0,0 @@ -require 'concurrent/thread_safe/util' -require 'concurrent/tuple' - -module Concurrent - - # @!visibility private - module ThreadSafe - - # @!visibility private - module Util - - # @!visibility private - class PowerOfTwoTuple < Concurrent::Tuple - - def initialize(size) - raise ArgumentError, "size must be a power of 2 (#{size.inspect} provided)" unless size > 0 && size & (size - 1) == 0 - super(size) - end - - def hash_to_index(hash) - (size - 1) & hash - end - - def volatile_get_by_hash(hash) - volatile_get(hash_to_index(hash)) - end - - def volatile_set_by_hash(hash, value) - volatile_set(hash_to_index(hash), value) - end - - def next_in_size_table - self.class.new(size << 1) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/thread_safe/util/striped64.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/thread_safe/util/striped64.rb deleted file mode 100644 index 4169c3d3..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/thread_safe/util/striped64.rb +++ /dev/null @@ -1,246 +0,0 @@ -require 'concurrent/thread_safe/util' -require 'concurrent/thread_safe/util/power_of_two_tuple' -require 'concurrent/thread_safe/util/volatile' -require 'concurrent/thread_safe/util/xor_shift_random' - -module Concurrent - - # @!visibility private - module ThreadSafe - - # @!visibility private - module Util - - # A Ruby port of the Doug Lea's jsr166e.Striped64 class version 1.6 - # available in public domain. - # - # Original source code available here: - # http://gee.cs.oswego.edu/cgi-bin/viewcvs.cgi/jsr166/src/jsr166e/Striped64.java?revision=1.6 - # - # Class holding common representation and mechanics for classes supporting - # dynamic striping on 64bit values. - # - # This class maintains a lazily-initialized table of atomically updated - # variables, plus an extra +base+ field. The table size is a power of two. - # Indexing uses masked per-thread hash codes. Nearly all methods on this - # class are private, accessed directly by subclasses. - # - # Table entries are of class +Cell+; a variant of AtomicLong padded to - # reduce cache contention on most processors. Padding is overkill for most - # Atomics because they are usually irregularly scattered in memory and thus - # don't interfere much with each other. But Atomic objects residing in - # arrays will tend to be placed adjacent to each other, and so will most - # often share cache lines (with a huge negative performance impact) without - # this precaution. - # - # In part because +Cell+s are relatively large, we avoid creating them until - # they are needed. When there is no contention, all updates are made to the - # +base+ field. Upon first contention (a failed CAS on +base+ update), the - # table is initialized to size 2. The table size is doubled upon further - # contention until reaching the nearest power of two greater than or equal - # to the number of CPUS. Table slots remain empty (+nil+) until they are - # needed. - # - # A single spinlock (+busy+) is used for initializing and resizing the - # table, as well as populating slots with new +Cell+s. There is no need for - # a blocking lock: When the lock is not available, threads try other slots - # (or the base). During these retries, there is increased contention and - # reduced locality, which is still better than alternatives. - # - # Per-thread hash codes are initialized to random values. Contention and/or - # table collisions are indicated by failed CASes when performing an update - # operation (see method +retry_update+). Upon a collision, if the table size - # is less than the capacity, it is doubled in size unless some other thread - # holds the lock. If a hashed slot is empty, and lock is available, a new - # +Cell+ is created. Otherwise, if the slot exists, a CAS is tried. Retries - # proceed by "double hashing", using a secondary hash (XorShift) to try to - # find a free slot. - # - # The table size is capped because, when there are more threads than CPUs, - # supposing that each thread were bound to a CPU, there would exist a - # perfect hash function mapping threads to slots that eliminates collisions. - # When we reach capacity, we search for this mapping by randomly varying the - # hash codes of colliding threads. Because search is random, and collisions - # only become known via CAS failures, convergence can be slow, and because - # threads are typically not bound to CPUS forever, may not occur at all. - # However, despite these limitations, observed contention rates are - # typically low in these cases. - # - # It is possible for a +Cell+ to become unused when threads that once hashed - # to it terminate, as well as in the case where doubling the table causes no - # thread to hash to it under expanded mask. We do not try to detect or - # remove such cells, under the assumption that for long-running instances, - # observed contention levels will recur, so the cells will eventually be - # needed again; and for short-lived ones, it does not matter. - # - # @!visibility private - class Striped64 - - # Padded variant of AtomicLong supporting only raw accesses plus CAS. - # The +value+ field is placed between pads, hoping that the JVM doesn't - # reorder them. - # - # Optimisation note: It would be possible to use a release-only - # form of CAS here, if it were provided. - # - # @!visibility private - class Cell < Concurrent::AtomicReference - - alias_method :cas, :compare_and_set - - def cas_computed - cas(current_value = value, yield(current_value)) - end - - # @!visibility private - def self.padding - # TODO: this only adds padding after the :value slot, need to find a way to add padding before the slot - # TODO (pitr-ch 28-Jul-2018): the padding instance vars may not be created - # hide from yardoc in a method - attr_reader :padding_0, :padding_1, :padding_2, :padding_3, :padding_4, :padding_5, :padding_6, :padding_7, :padding_8, :padding_9, :padding_10, :padding_11 - end - padding - end - - extend Volatile - attr_volatile :cells, # Table of cells. When non-null, size is a power of 2. - :base, # Base value, used mainly when there is no contention, but also as a fallback during table initialization races. Updated via CAS. - :busy # Spinlock (locked via CAS) used when resizing and/or creating Cells. - - alias_method :busy?, :busy - - def initialize - super() - self.busy = false - self.base = 0 - end - - # Handles cases of updates involving initialization, resizing, - # creating new Cells, and/or contention. See above for - # explanation. This method suffers the usual non-modularity - # problems of optimistic retry code, relying on rechecked sets of - # reads. - # - # Arguments: - # [+x+] - # the value - # [+hash_code+] - # hash code used - # [+x+] - # false if CAS failed before call - def retry_update(x, hash_code, was_uncontended) # :yields: current_value - hash = hash_code - collided = false # True if last slot nonempty - while true - if current_cells = cells - if !(cell = current_cells.volatile_get_by_hash(hash)) - if busy? - collided = false - else # Try to attach new Cell - if try_to_install_new_cell(Cell.new(x), hash) # Optimistically create and try to insert new cell - break - else - redo # Slot is now non-empty - end - end - elsif !was_uncontended # CAS already known to fail - was_uncontended = true # Continue after rehash - elsif cell.cas_computed {|current_value| yield current_value} - break - elsif current_cells.size >= CPU_COUNT || cells != current_cells # At max size or stale - collided = false - elsif collided && expand_table_unless_stale(current_cells) - collided = false - redo # Retry with expanded table - else - collided = true - end - hash = XorShiftRandom.xorshift(hash) - - elsif try_initialize_cells(x, hash) || cas_base_computed {|current_base| yield current_base} - break - end - end - self.hash_code = hash - end - - private - # Static per-thread hash code key. Shared across all instances to - # reduce Thread locals pollution and because adjustments due to - # collisions in one table are likely to be appropriate for - # others. - THREAD_LOCAL_KEY = "#{name}.hash_code".to_sym - - # A thread-local hash code accessor. The code is initially - # random, but may be set to a different value upon collisions. - def hash_code - Thread.current[THREAD_LOCAL_KEY] ||= XorShiftRandom.get - end - - def hash_code=(hash) - Thread.current[THREAD_LOCAL_KEY] = hash - end - - # Sets base and all +cells+ to the given value. - def internal_reset(initial_value) - current_cells = cells - self.base = initial_value - if current_cells - current_cells.each do |cell| - cell.value = initial_value if cell - end - end - end - - def cas_base_computed - cas_base(current_base = base, yield(current_base)) - end - - def free? - !busy? - end - - def try_initialize_cells(x, hash) - if free? && !cells - try_in_busy do - unless cells # Recheck under lock - new_cells = PowerOfTwoTuple.new(2) - new_cells.volatile_set_by_hash(hash, Cell.new(x)) - self.cells = new_cells - end - end - end - end - - def expand_table_unless_stale(current_cells) - try_in_busy do - if current_cells == cells # Recheck under lock - new_cells = current_cells.next_in_size_table - current_cells.each_with_index {|x, i| new_cells.volatile_set(i, x)} - self.cells = new_cells - end - end - end - - def try_to_install_new_cell(new_cell, hash) - try_in_busy do - # Recheck under lock - if (current_cells = cells) && !current_cells.volatile_get(i = current_cells.hash_to_index(hash)) - current_cells.volatile_set(i, new_cell) - end - end - end - - def try_in_busy - if cas_busy(false, true) - begin - yield - ensure - self.busy = false - end - end - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/thread_safe/util/volatile.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/thread_safe/util/volatile.rb deleted file mode 100644 index cdac2a39..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/thread_safe/util/volatile.rb +++ /dev/null @@ -1,75 +0,0 @@ -require 'concurrent/thread_safe/util' - -module Concurrent - - # @!visibility private - module ThreadSafe - - # @!visibility private - module Util - - # @!visibility private - module Volatile - - # Provides +volatile+ (in the JVM's sense) attribute accessors implemented - # atop of +Concurrent::AtomicReference+. - # - # Usage: - # class Foo - # extend Concurrent::ThreadSafe::Util::Volatile - # attr_volatile :foo, :bar - # - # def initialize(bar) - # super() # must super() into parent initializers before using the volatile attribute accessors - # self.bar = bar - # end - # - # def hello - # my_foo = foo # volatile read - # self.foo = 1 # volatile write - # cas_foo(1, 2) # => true | a strong CAS - # end - # end - def attr_volatile(*attr_names) - return if attr_names.empty? - include(Module.new do - atomic_ref_setup = attr_names.map {|attr_name| "@__#{attr_name} = Concurrent::AtomicReference.new"} - initialize_copy_setup = attr_names.zip(atomic_ref_setup).map do |attr_name, ref_setup| - "#{ref_setup}(other.instance_variable_get(:@__#{attr_name}).get)" - end - class_eval <<-RUBY_EVAL, __FILE__, __LINE__ + 1 - def initialize(*) - super - #{atomic_ref_setup.join('; ')} - end - - def initialize_copy(other) - super - #{initialize_copy_setup.join('; ')} - end - RUBY_EVAL - - attr_names.each do |attr_name| - class_eval <<-RUBY_EVAL, __FILE__, __LINE__ + 1 - def #{attr_name} - @__#{attr_name}.get - end - - def #{attr_name}=(value) - @__#{attr_name}.set(value) - end - - def compare_and_set_#{attr_name}(old_value, new_value) - @__#{attr_name}.compare_and_set(old_value, new_value) - end - RUBY_EVAL - - alias_method :"cas_#{attr_name}", :"compare_and_set_#{attr_name}" - alias_method :"lazy_set_#{attr_name}", :"#{attr_name}=" - end - end) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/thread_safe/util/xor_shift_random.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/thread_safe/util/xor_shift_random.rb deleted file mode 100644 index bdde2dd8..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/thread_safe/util/xor_shift_random.rb +++ /dev/null @@ -1,50 +0,0 @@ -require 'concurrent/thread_safe/util' - -module Concurrent - - # @!visibility private - module ThreadSafe - - # @!visibility private - module Util - - # A xorshift random number (positive +Fixnum+s) generator, provides - # reasonably cheap way to generate thread local random numbers without - # contending for the global +Kernel.rand+. - # - # Usage: - # x = XorShiftRandom.get # uses Kernel.rand to generate an initial seed - # while true - # if (x = XorShiftRandom.xorshift).odd? # thread-localy generate a next random number - # do_something_at_random - # end - # end - module XorShiftRandom - extend self - MAX_XOR_SHIFTABLE_INT = MAX_INT - 1 - - # Generates an initial non-zero positive +Fixnum+ via +Kernel.rand+. - def get - Kernel.rand(MAX_XOR_SHIFTABLE_INT) + 1 # 0 can't be xorshifted - end - - # xorshift based on: http://www.jstatsoft.org/v08/i14/paper - if 0.size == 4 - # using the "yˆ=y>>a; yˆ=y<>c;" transform with the (a,b,c) tuple with values (3,1,14) to minimise Bignum overflows - def xorshift(x) - x ^= x >> 3 - x ^= (x << 1) & MAX_INT # cut-off Bignum overflow - x ^= x >> 14 - end - else - # using the "yˆ=y>>a; yˆ=y<>c;" transform with the (a,b,c) tuple with values (1,1,54) to minimise Bignum overflows - def xorshift(x) - x ^= x >> 1 - x ^= (x << 1) & MAX_INT # cut-off Bignum overflow - x ^= x >> 54 - end - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/timer_task.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/timer_task.rb deleted file mode 100644 index dd2037f6..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/timer_task.rb +++ /dev/null @@ -1,361 +0,0 @@ -require 'concurrent/collection/copy_on_notify_observer_set' -require 'concurrent/concern/dereferenceable' -require 'concurrent/concern/observable' -require 'concurrent/atomic/atomic_boolean' -require 'concurrent/executor/executor_service' -require 'concurrent/executor/ruby_executor_service' -require 'concurrent/executor/safe_task_executor' -require 'concurrent/scheduled_task' - -module Concurrent - - # A very common concurrency pattern is to run a thread that performs a task at - # regular intervals. The thread that performs the task sleeps for the given - # interval then wakes up and performs the task. Lather, rinse, repeat... This - # pattern causes two problems. First, it is difficult to test the business - # logic of the task because the task itself is tightly coupled with the - # concurrency logic. Second, an exception raised while performing the task can - # cause the entire thread to abend. In a long-running application where the - # task thread is intended to run for days/weeks/years a crashed task thread - # can pose a significant problem. `TimerTask` alleviates both problems. - # - # When a `TimerTask` is launched it starts a thread for monitoring the - # execution interval. The `TimerTask` thread does not perform the task, - # however. Instead, the TimerTask launches the task on a separate thread. - # Should the task experience an unrecoverable crash only the task thread will - # crash. This makes the `TimerTask` very fault tolerant. Additionally, the - # `TimerTask` thread can respond to the success or failure of the task, - # performing logging or ancillary operations. - # - # One other advantage of `TimerTask` is that it forces the business logic to - # be completely decoupled from the concurrency logic. The business logic can - # be tested separately then passed to the `TimerTask` for scheduling and - # running. - # - # A `TimerTask` supports two different types of interval calculations. - # A fixed delay will always wait the same amount of time between the - # completion of one task and the start of the next. A fixed rate will - # attempt to maintain a constant rate of execution regardless of the - # duration of the task. For example, if a fixed rate task is scheduled - # to run every 60 seconds but the task itself takes 10 seconds to - # complete, the next task will be scheduled to run 50 seconds after - # the start of the previous task. If the task takes 70 seconds to - # complete, the next task will be start immediately after the previous - # task completes. Tasks will not be executed concurrently. - # - # In some cases it may be necessary for a `TimerTask` to affect its own - # execution cycle. To facilitate this, a reference to the TimerTask instance - # is passed as an argument to the provided block every time the task is - # executed. - # - # The `TimerTask` class includes the `Dereferenceable` mixin module so the - # result of the last execution is always available via the `#value` method. - # Dereferencing options can be passed to the `TimerTask` during construction or - # at any later time using the `#set_deref_options` method. - # - # `TimerTask` supports notification through the Ruby standard library - # {http://ruby-doc.org/stdlib-2.0/libdoc/observer/rdoc/Observable.html - # Observable} module. On execution the `TimerTask` will notify the observers - # with three arguments: time of execution, the result of the block (or nil on - # failure), and any raised exceptions (or nil on success). - # - # @!macro copy_options - # - # @example Basic usage - # task = Concurrent::TimerTask.new{ puts 'Boom!' } - # task.execute - # - # task.execution_interval #=> 60 (default) - # - # # wait 60 seconds... - # #=> 'Boom!' - # - # task.shutdown #=> true - # - # @example Configuring `:execution_interval` - # task = Concurrent::TimerTask.new(execution_interval: 5) do - # puts 'Boom!' - # end - # - # task.execution_interval #=> 5 - # - # @example Immediate execution with `:run_now` - # task = Concurrent::TimerTask.new(run_now: true){ puts 'Boom!' } - # task.execute - # - # #=> 'Boom!' - # - # @example Configuring `:interval_type` with either :fixed_delay or :fixed_rate, default is :fixed_delay - # task = Concurrent::TimerTask.new(execution_interval: 5, interval_type: :fixed_rate) do - # puts 'Boom!' - # end - # task.interval_type #=> :fixed_rate - # - # @example Last `#value` and `Dereferenceable` mixin - # task = Concurrent::TimerTask.new( - # dup_on_deref: true, - # execution_interval: 5 - # ){ Time.now } - # - # task.execute - # Time.now #=> 2013-11-07 18:06:50 -0500 - # sleep(10) - # task.value #=> 2013-11-07 18:06:55 -0500 - # - # @example Controlling execution from within the block - # timer_task = Concurrent::TimerTask.new(execution_interval: 1) do |task| - # task.execution_interval.to_i.times{ print 'Boom! ' } - # print "\n" - # task.execution_interval += 1 - # if task.execution_interval > 5 - # puts 'Stopping...' - # task.shutdown - # end - # end - # - # timer_task.execute - # #=> Boom! - # #=> Boom! Boom! - # #=> Boom! Boom! Boom! - # #=> Boom! Boom! Boom! Boom! - # #=> Boom! Boom! Boom! Boom! Boom! - # #=> Stopping... - # - # @example Observation - # class TaskObserver - # def update(time, result, ex) - # if result - # print "(#{time}) Execution successfully returned #{result}\n" - # else - # print "(#{time}) Execution failed with error #{ex}\n" - # end - # end - # end - # - # task = Concurrent::TimerTask.new(execution_interval: 1){ 42 } - # task.add_observer(TaskObserver.new) - # task.execute - # sleep 4 - # - # #=> (2013-10-13 19:08:58 -0400) Execution successfully returned 42 - # #=> (2013-10-13 19:08:59 -0400) Execution successfully returned 42 - # #=> (2013-10-13 19:09:00 -0400) Execution successfully returned 42 - # task.shutdown - # - # task = Concurrent::TimerTask.new(execution_interval: 1){ sleep } - # task.add_observer(TaskObserver.new) - # task.execute - # - # #=> (2013-10-13 19:07:25 -0400) Execution timed out - # #=> (2013-10-13 19:07:27 -0400) Execution timed out - # #=> (2013-10-13 19:07:29 -0400) Execution timed out - # task.shutdown - # - # task = Concurrent::TimerTask.new(execution_interval: 1){ raise StandardError } - # task.add_observer(TaskObserver.new) - # task.execute - # - # #=> (2013-10-13 19:09:37 -0400) Execution failed with error StandardError - # #=> (2013-10-13 19:09:38 -0400) Execution failed with error StandardError - # #=> (2013-10-13 19:09:39 -0400) Execution failed with error StandardError - # task.shutdown - # - # @see http://ruby-doc.org/stdlib-2.0/libdoc/observer/rdoc/Observable.html - # @see http://docs.oracle.com/javase/7/docs/api/java/util/TimerTask.html - class TimerTask < RubyExecutorService - include Concern::Dereferenceable - include Concern::Observable - - # Default `:execution_interval` in seconds. - EXECUTION_INTERVAL = 60 - - # Maintain the interval between the end of one execution and the start of the next execution. - FIXED_DELAY = :fixed_delay - - # Maintain the interval between the start of one execution and the start of the next. - # If execution time exceeds the interval, the next execution will start immediately - # after the previous execution finishes. Executions will not run concurrently. - FIXED_RATE = :fixed_rate - - # Default `:interval_type` - DEFAULT_INTERVAL_TYPE = FIXED_DELAY - - # Create a new TimerTask with the given task and configuration. - # - # @!macro timer_task_initialize - # @param [Hash] opts the options defining task execution. - # @option opts [Float] :execution_interval number of seconds between - # task executions (default: EXECUTION_INTERVAL) - # @option opts [Boolean] :run_now Whether to run the task immediately - # upon instantiation or to wait until the first # execution_interval - # has passed (default: false) - # @options opts [Symbol] :interval_type method to calculate the interval - # between executions, can be either :fixed_rate or :fixed_delay. - # (default: :fixed_delay) - # @option opts [Executor] executor, default is `global_io_executor` - # - # @!macro deref_options - # - # @raise ArgumentError when no block is given. - # - # @yield to the block after :execution_interval seconds have passed since - # the last yield - # @yieldparam task a reference to the `TimerTask` instance so that the - # block can control its own lifecycle. Necessary since `self` will - # refer to the execution context of the block rather than the running - # `TimerTask`. - # - # @return [TimerTask] the new `TimerTask` - def initialize(opts = {}, &task) - raise ArgumentError.new('no block given') unless block_given? - super - set_deref_options opts - end - - # Is the executor running? - # - # @return [Boolean] `true` when running, `false` when shutting down or shutdown - def running? - @running.true? - end - - # Execute a previously created `TimerTask`. - # - # @return [TimerTask] a reference to `self` - # - # @example Instance and execute in separate steps - # task = Concurrent::TimerTask.new(execution_interval: 10){ print "Hello World\n" } - # task.running? #=> false - # task.execute - # task.running? #=> true - # - # @example Instance and execute in one line - # task = Concurrent::TimerTask.new(execution_interval: 10){ print "Hello World\n" }.execute - # task.running? #=> true - def execute - synchronize do - if @running.false? - @running.make_true - schedule_next_task(@run_now ? 0 : @execution_interval) - end - end - self - end - - # Create and execute a new `TimerTask`. - # - # @!macro timer_task_initialize - # - # @example - # task = Concurrent::TimerTask.execute(execution_interval: 10){ print "Hello World\n" } - # task.running? #=> true - def self.execute(opts = {}, &task) - TimerTask.new(opts, &task).execute - end - - # @!attribute [rw] execution_interval - # @return [Fixnum] Number of seconds after the task completes before the - # task is performed again. - def execution_interval - synchronize { @execution_interval } - end - - # @!attribute [rw] execution_interval - # @return [Fixnum] Number of seconds after the task completes before the - # task is performed again. - def execution_interval=(value) - if (value = value.to_f) <= 0.0 - raise ArgumentError.new('must be greater than zero') - else - synchronize { @execution_interval = value } - end - end - - # @!attribute [r] interval_type - # @return [Symbol] method to calculate the interval between executions - attr_reader :interval_type - - # @!attribute [rw] timeout_interval - # @return [Fixnum] Number of seconds the task can run before it is - # considered to have failed. - def timeout_interval - warn 'TimerTask timeouts are now ignored as these were not able to be implemented correctly' - end - - # @!attribute [rw] timeout_interval - # @return [Fixnum] Number of seconds the task can run before it is - # considered to have failed. - def timeout_interval=(value) - warn 'TimerTask timeouts are now ignored as these were not able to be implemented correctly' - end - - private :post, :<< - - private - - def ns_initialize(opts, &task) - set_deref_options(opts) - - self.execution_interval = opts[:execution] || opts[:execution_interval] || EXECUTION_INTERVAL - if opts[:interval_type] && ![FIXED_DELAY, FIXED_RATE].include?(opts[:interval_type]) - raise ArgumentError.new('interval_type must be either :fixed_delay or :fixed_rate') - end - if opts[:timeout] || opts[:timeout_interval] - warn 'TimeTask timeouts are now ignored as these were not able to be implemented correctly' - end - - @run_now = opts[:now] || opts[:run_now] - @interval_type = opts[:interval_type] || DEFAULT_INTERVAL_TYPE - @task = Concurrent::SafeTaskExecutor.new(task) - @executor = opts[:executor] || Concurrent.global_io_executor - @running = Concurrent::AtomicBoolean.new(false) - @value = nil - - self.observers = Collection::CopyOnNotifyObserverSet.new - end - - # @!visibility private - def ns_shutdown_execution - @running.make_false - super - end - - # @!visibility private - def ns_kill_execution - @running.make_false - super - end - - # @!visibility private - def schedule_next_task(interval = execution_interval) - ScheduledTask.execute(interval, executor: @executor, args: [Concurrent::Event.new], &method(:execute_task)) - nil - end - - # @!visibility private - def execute_task(completion) - return nil unless @running.true? - start_time = Concurrent.monotonic_time - _success, value, reason = @task.execute(self) - if completion.try? - self.value = value - schedule_next_task(calculate_next_interval(start_time)) - time = Time.now - observers.notify_observers do - [time, self.value, reason] - end - end - nil - end - - # @!visibility private - def calculate_next_interval(start_time) - if @interval_type == FIXED_RATE - run_time = Concurrent.monotonic_time - start_time - [execution_interval - run_time, 0].max - else # FIXED_DELAY - execution_interval - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/tuple.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/tuple.rb deleted file mode 100644 index 56212cfd..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/tuple.rb +++ /dev/null @@ -1,82 +0,0 @@ -require 'concurrent/atomic/atomic_reference' - -module Concurrent - - # A fixed size array with volatile (synchronized, thread safe) getters/setters. - # Mixes in Ruby's `Enumerable` module for enhanced search, sort, and traversal. - # - # @example - # tuple = Concurrent::Tuple.new(16) - # - # tuple.set(0, :foo) #=> :foo | volatile write - # tuple.get(0) #=> :foo | volatile read - # tuple.compare_and_set(0, :foo, :bar) #=> true | strong CAS - # tuple.cas(0, :foo, :baz) #=> false | strong CAS - # tuple.get(0) #=> :bar | volatile read - # - # @see https://en.wikipedia.org/wiki/Tuple Tuple entry at Wikipedia - # @see http://www.erlang.org/doc/reference_manual/data_types.html#id70396 Erlang Tuple - # @see http://ruby-doc.org/core-2.2.2/Enumerable.html Enumerable - class Tuple - include Enumerable - - # The (fixed) size of the tuple. - attr_reader :size - - # Create a new tuple of the given size. - # - # @param [Integer] size the number of elements in the tuple - def initialize(size) - @size = size - @tuple = tuple = ::Array.new(size) - i = 0 - while i < size - tuple[i] = Concurrent::AtomicReference.new - i += 1 - end - end - - # Get the value of the element at the given index. - # - # @param [Integer] i the index from which to retrieve the value - # @return [Object] the value at the given index or nil if the index is out of bounds - def get(i) - return nil if i >= @size || i < 0 - @tuple[i].get - end - alias_method :volatile_get, :get - - # Set the element at the given index to the given value - # - # @param [Integer] i the index for the element to set - # @param [Object] value the value to set at the given index - # - # @return [Object] the new value of the element at the given index or nil if the index is out of bounds - def set(i, value) - return nil if i >= @size || i < 0 - @tuple[i].set(value) - end - alias_method :volatile_set, :set - - # Set the value at the given index to the new value if and only if the current - # value matches the given old value. - # - # @param [Integer] i the index for the element to set - # @param [Object] old_value the value to compare against the current value - # @param [Object] new_value the value to set at the given index - # - # @return [Boolean] true if the value at the given element was set else false - def compare_and_set(i, old_value, new_value) - return false if i >= @size || i < 0 - @tuple[i].compare_and_set(old_value, new_value) - end - alias_method :cas, :compare_and_set - - # Calls the given block once for each element in self, passing that element as a parameter. - # - # @yieldparam [Object] ref the `Concurrent::AtomicReference` object at the current index - def each - @tuple.each {|ref| yield ref.get} - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/tvar.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/tvar.rb deleted file mode 100644 index 5d02ef09..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/tvar.rb +++ /dev/null @@ -1,222 +0,0 @@ -require 'set' -require 'concurrent/synchronization/object' - -module Concurrent - - # A `TVar` is a transactional variable - a single-element container that - # is used as part of a transaction - see `Concurrent::atomically`. - # - # @!macro thread_safe_variable_comparison - # - # {include:file:docs-source/tvar.md} - class TVar < Synchronization::Object - safe_initialization! - - # Create a new `TVar` with an initial value. - def initialize(value) - @value = value - @lock = Mutex.new - end - - # Get the value of a `TVar`. - def value - Concurrent::atomically do - Transaction::current.read(self) - end - end - - # Set the value of a `TVar`. - def value=(value) - Concurrent::atomically do - Transaction::current.write(self, value) - end - end - - # @!visibility private - def unsafe_value # :nodoc: - @value - end - - # @!visibility private - def unsafe_value=(value) # :nodoc: - @value = value - end - - # @!visibility private - def unsafe_lock # :nodoc: - @lock - end - - end - - # Run a block that reads and writes `TVar`s as a single atomic transaction. - # With respect to the value of `TVar` objects, the transaction is atomic, in - # that it either happens or it does not, consistent, in that the `TVar` - # objects involved will never enter an illegal state, and isolated, in that - # transactions never interfere with each other. You may recognise these - # properties from database transactions. - # - # There are some very important and unusual semantics that you must be aware of: - # - # * Most importantly, the block that you pass to atomically may be executed - # more than once. In most cases your code should be free of - # side-effects, except for via TVar. - # - # * If an exception escapes an atomically block it will abort the transaction. - # - # * It is undefined behaviour to use callcc or Fiber with atomically. - # - # * If you create a new thread within an atomically, it will not be part of - # the transaction. Creating a thread counts as a side-effect. - # - # Transactions within transactions are flattened to a single transaction. - # - # @example - # a = new TVar(100_000) - # b = new TVar(100) - # - # Concurrent::atomically do - # a.value -= 10 - # b.value += 10 - # end - def atomically - raise ArgumentError.new('no block given') unless block_given? - - # Get the current transaction - - transaction = Transaction::current - - # Are we not already in a transaction (not nested)? - - if transaction.nil? - # New transaction - - begin - # Retry loop - - loop do - - # Create a new transaction - - transaction = Transaction.new - Transaction::current = transaction - - # Run the block, aborting on exceptions - - begin - result = yield - rescue Transaction::AbortError => e - transaction.abort - result = Transaction::ABORTED - rescue Transaction::LeaveError => e - transaction.abort - break result - rescue => e - transaction.abort - raise e - end - # If we can commit, break out of the loop - - if result != Transaction::ABORTED - if transaction.commit - break result - end - end - end - ensure - # Clear the current transaction - - Transaction::current = nil - end - else - # Nested transaction - flatten it and just run the block - - yield - end - end - - # Abort a currently running transaction - see `Concurrent::atomically`. - def abort_transaction - raise Transaction::AbortError.new - end - - # Leave a transaction without committing or aborting - see `Concurrent::atomically`. - def leave_transaction - raise Transaction::LeaveError.new - end - - module_function :atomically, :abort_transaction, :leave_transaction - - private - - # @!visibility private - class Transaction - - ABORTED = ::Object.new - - OpenEntry = Struct.new(:value, :modified) - - AbortError = Class.new(StandardError) - LeaveError = Class.new(StandardError) - - def initialize - @open_tvars = {} - end - - def read(tvar) - entry = open(tvar) - entry.value - end - - def write(tvar, value) - entry = open(tvar) - entry.modified = true - entry.value = value - end - - def open(tvar) - entry = @open_tvars[tvar] - - unless entry - unless tvar.unsafe_lock.try_lock - Concurrent::abort_transaction - end - - entry = OpenEntry.new(tvar.unsafe_value, false) - @open_tvars[tvar] = entry - end - - entry - end - - def abort - unlock - end - - def commit - @open_tvars.each do |tvar, entry| - if entry.modified - tvar.unsafe_value = entry.value - end - end - - unlock - end - - def unlock - @open_tvars.each_key do |tvar| - tvar.unsafe_lock.unlock - end - end - - def self.current - Thread.current[:current_tvar_transaction] - end - - def self.current=(transaction) - Thread.current[:current_tvar_transaction] = transaction - end - - end - -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/utility/engine.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/utility/engine.rb deleted file mode 100644 index 0c574b2a..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/utility/engine.rb +++ /dev/null @@ -1,45 +0,0 @@ -module Concurrent - # @!visibility private - module Utility - - # @!visibility private - module EngineDetector - def on_cruby? - RUBY_ENGINE == 'ruby' - end - - def on_jruby? - RUBY_ENGINE == 'jruby' - end - - def on_truffleruby? - RUBY_ENGINE == 'truffleruby' - end - - def on_windows? - !(RbConfig::CONFIG['host_os'] =~ /mswin|mingw|cygwin/).nil? - end - - def on_osx? - !(RbConfig::CONFIG['host_os'] =~ /darwin|mac os/).nil? - end - - def on_linux? - !(RbConfig::CONFIG['host_os'] =~ /linux/).nil? - end - - def ruby_version(version = RUBY_VERSION, comparison, major, minor, patch) - result = (version.split('.').map(&:to_i) <=> [major, minor, patch]) - comparisons = { :== => [0], - :>= => [1, 0], - :<= => [-1, 0], - :> => [1], - :< => [-1] } - comparisons.fetch(comparison).include? result - end - end - end - - # @!visibility private - extend Utility::EngineDetector -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/utility/monotonic_time.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/utility/monotonic_time.rb deleted file mode 100644 index 1c987d8a..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/utility/monotonic_time.rb +++ /dev/null @@ -1,19 +0,0 @@ -module Concurrent - - # @!macro monotonic_get_time - # - # Returns the current time as tracked by the application monotonic clock. - # - # @param [Symbol] unit the time unit to be returned, can be either - # :float_second, :float_millisecond, :float_microsecond, :second, - # :millisecond, :microsecond, or :nanosecond default to :float_second. - # - # @return [Float] The current monotonic time since some unspecified - # starting point - # - # @!macro monotonic_clock_warning - def monotonic_time(unit = :float_second) - Process.clock_gettime(Process::CLOCK_MONOTONIC, unit) - end - module_function :monotonic_time -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/utility/native_extension_loader.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/utility/native_extension_loader.rb deleted file mode 100644 index bf7bab35..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/utility/native_extension_loader.rb +++ /dev/null @@ -1,77 +0,0 @@ -require 'concurrent/utility/engine' -# Synchronization::AbstractObject must be defined before loading the extension -require 'concurrent/synchronization/abstract_object' - -module Concurrent - # @!visibility private - module Utility - # @!visibility private - module NativeExtensionLoader - - def allow_c_extensions? - Concurrent.on_cruby? - end - - def c_extensions_loaded? - defined?(@c_extensions_loaded) && @c_extensions_loaded - end - - def load_native_extensions - if Concurrent.on_cruby? && !c_extensions_loaded? - ['concurrent/concurrent_ruby_ext', - "concurrent/#{RUBY_VERSION[0..2]}/concurrent_ruby_ext" - ].each { |p| try_load_c_extension p } - end - - if Concurrent.on_jruby? && !java_extensions_loaded? - begin - require 'concurrent/concurrent_ruby.jar' - set_java_extensions_loaded - rescue LoadError => e - raise e, "Java extensions are required for JRuby.\n" + e.message, e.backtrace - end - end - end - - private - - def load_error_path(error) - if error.respond_to? :path - error.path - else - error.message.split(' -- ').last - end - end - - def set_c_extensions_loaded - @c_extensions_loaded = true - end - - def java_extensions_loaded? - defined?(@java_extensions_loaded) && @java_extensions_loaded - end - - def set_java_extensions_loaded - @java_extensions_loaded = true - end - - def try_load_c_extension(path) - require path - set_c_extensions_loaded - rescue LoadError => e - if load_error_path(e) == path - # move on with pure-Ruby implementations - # TODO (pitr-ch 12-Jul-2018): warning on verbose? - else - raise e - end - end - - end - end - - # @!visibility private - extend Utility::NativeExtensionLoader -end - -Concurrent.load_native_extensions diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/utility/native_integer.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/utility/native_integer.rb deleted file mode 100644 index de1cdc30..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/utility/native_integer.rb +++ /dev/null @@ -1,54 +0,0 @@ -module Concurrent - # @!visibility private - module Utility - # @private - module NativeInteger - # http://stackoverflow.com/questions/535721/ruby-max-integer - MIN_VALUE = -(2**(0.size * 8 - 2)) - MAX_VALUE = (2**(0.size * 8 - 2) - 1) - - def ensure_upper_bound(value) - if value > MAX_VALUE - raise RangeError.new("#{value} is greater than the maximum value of #{MAX_VALUE}") - end - value - end - - def ensure_lower_bound(value) - if value < MIN_VALUE - raise RangeError.new("#{value} is less than the maximum value of #{MIN_VALUE}") - end - value - end - - def ensure_integer(value) - unless value.is_a?(Integer) - raise ArgumentError.new("#{value} is not an Integer") - end - value - end - - def ensure_integer_and_bounds(value) - ensure_integer value - ensure_upper_bound value - ensure_lower_bound value - end - - def ensure_positive(value) - if value < 0 - raise ArgumentError.new("#{value} cannot be negative") - end - value - end - - def ensure_positive_and_no_zero(value) - if value < 1 - raise ArgumentError.new("#{value} cannot be negative or zero") - end - value - end - - extend self - end - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/utility/processor_counter.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/utility/processor_counter.rb deleted file mode 100644 index 986e2d52..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/utility/processor_counter.rb +++ /dev/null @@ -1,110 +0,0 @@ -require 'etc' -require 'rbconfig' -require 'concurrent/delay' - -module Concurrent - # @!visibility private - module Utility - - # @!visibility private - class ProcessorCounter - def initialize - @processor_count = Delay.new { compute_processor_count } - @physical_processor_count = Delay.new { compute_physical_processor_count } - end - - def processor_count - @processor_count.value - end - - def physical_processor_count - @physical_processor_count.value - end - - private - - def compute_processor_count - if Concurrent.on_jruby? - java.lang.Runtime.getRuntime.availableProcessors - else - Etc.nprocessors - end - end - - def compute_physical_processor_count - ppc = case RbConfig::CONFIG["target_os"] - when /darwin\d\d/ - IO.popen("/usr/sbin/sysctl -n hw.physicalcpu", &:read).to_i - when /linux/ - cores = {} # unique physical ID / core ID combinations - phy = 0 - IO.read("/proc/cpuinfo").scan(/^physical id.*|^core id.*/) do |ln| - if ln.start_with?("physical") - phy = ln[/\d+/] - elsif ln.start_with?("core") - cid = phy + ":" + ln[/\d+/] - cores[cid] = true if not cores[cid] - end - end - cores.count - when /mswin|mingw/ - require 'win32ole' - result_set = WIN32OLE.connect("winmgmts://").ExecQuery( - "select NumberOfCores from Win32_Processor") - result_set.to_enum.collect(&:NumberOfCores).reduce(:+) - else - processor_count - end - # fall back to logical count if physical info is invalid - ppc > 0 ? ppc : processor_count - rescue - return 1 - end - end - end - - # create the default ProcessorCounter on load - @processor_counter = Utility::ProcessorCounter.new - singleton_class.send :attr_reader, :processor_counter - - # Number of processors seen by the OS and used for process scheduling. For - # performance reasons the calculated value will be memoized on the first - # call. - # - # When running under JRuby the Java runtime call - # `java.lang.Runtime.getRuntime.availableProcessors` will be used. According - # to the Java documentation this "value may change during a particular - # invocation of the virtual machine... [applications] should therefore - # occasionally poll this property." Subsequently the result will NOT be - # memoized under JRuby. - # - # Otherwise Ruby's Etc.nprocessors will be used. - # - # @return [Integer] number of processors seen by the OS or Java runtime - # - # @see http://docs.oracle.com/javase/6/docs/api/java/lang/Runtime.html#availableProcessors() - def self.processor_count - processor_counter.processor_count - end - - # Number of physical processor cores on the current system. For performance - # reasons the calculated value will be memoized on the first call. - # - # On Windows the Win32 API will be queried for the `NumberOfCores from - # Win32_Processor`. This will return the total number "of cores for the - # current instance of the processor." On Unix-like operating systems either - # the `hwprefs` or `sysctl` utility will be called in a subshell and the - # returned value will be used. In the rare case where none of these methods - # work or an exception is raised the function will simply return 1. - # - # @return [Integer] number physical processor cores on the current system - # - # @see https://github.com/grosser/parallel/blob/4fc8b89d08c7091fe0419ca8fba1ec3ce5a8d185/lib/parallel.rb - # - # @see http://msdn.microsoft.com/en-us/library/aa394373(v=vs.85).aspx - # @see http://www.unix.com/man-page/osx/1/HWPREFS/ - # @see http://linux.die.net/man/8/sysctl - def self.physical_processor_count - processor_counter.physical_processor_count - end -end diff --git a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/version.rb b/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/version.rb deleted file mode 100644 index 9a1c2922..00000000 --- a/bundle/ruby/3.2.0/gems/concurrent-ruby-1.2.3/lib/concurrent-ruby/concurrent/version.rb +++ /dev/null @@ -1,3 +0,0 @@ -module Concurrent - VERSION = '1.2.3' -end diff --git a/bundle/ruby/3.2.0/gems/cork-0.3.0/CHANGELOG.md b/bundle/ruby/3.2.0/gems/cork-0.3.0/CHANGELOG.md deleted file mode 100644 index 7a78ddf4..00000000 --- a/bundle/ruby/3.2.0/gems/cork-0.3.0/CHANGELOG.md +++ /dev/null @@ -1,24 +0,0 @@ -## Master - -## 0.3.0 (2017-004-11) - -##### Enhancements - -* Use the colored2 gem instead of colored. - [Orta Therox](https://github.com/orta) - [xcodeproj#463](https://github.com/CocoaPods/Xcodeproj/pull/463) - -##### Bug Fixes - -* None. - - -## 0.2.0 (2016-08-15) - -* Disables wrapping when not in a tty - segiddins -* Requires io/console before it is used - segiddins - - -## 0.1.0 - -This version is extracted from CocoaPods. diff --git a/bundle/ruby/3.2.0/gems/cork-0.3.0/LICENSE b/bundle/ruby/3.2.0/gems/cork-0.3.0/LICENSE deleted file mode 100644 index 20efd1b3..00000000 --- a/bundle/ruby/3.2.0/gems/cork-0.3.0/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015 - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - diff --git a/bundle/ruby/3.2.0/gems/cork-0.3.0/README.md b/bundle/ruby/3.2.0/gems/cork-0.3.0/README.md deleted file mode 100644 index 12c00082..00000000 --- a/bundle/ruby/3.2.0/gems/cork-0.3.0/README.md +++ /dev/null @@ -1,55 +0,0 @@ -# Cork - -A delightful CLI UI module. - -## Usage - -```ruby -board = Cork::Board.new() -``` - -You can use Cork to print simple messages. - -```ruby -board.puts('Hello World') -``` - -You can use notice to print notices to the user colored in green. - -```ruby -board.notice("We're out of 🍷.") -``` - -This is an example of Cork used to build a simple list. - -```ruby -board.section('Types of Wine') do - board.labeled('Red', ['Shiraz', 'Merlot']) - board.labeled('White', ['Gewürztraminer', 'Riesling']) -end -``` - -``` -Types of Wine - - Red: - - Shiraz - - Merlot - - White: - - Gewürztraminer - - Riesling -``` - -This is an example of Cork used to print a warning with actions the user can take. - -```ruby -board.warn('Merlot is down to 1 oz', [ - 'Purchase some more.' -]) - -board.print_warnings -``` - -``` -[!] Merlot is down to 1 oz - - Purchase some more. -``` diff --git a/bundle/ruby/3.2.0/gems/cork-0.3.0/lib/cork.rb b/bundle/ruby/3.2.0/gems/cork-0.3.0/lib/cork.rb deleted file mode 100644 index 8375affe..00000000 --- a/bundle/ruby/3.2.0/gems/cork-0.3.0/lib/cork.rb +++ /dev/null @@ -1,5 +0,0 @@ -module Cork - require 'cork/board' - require 'cork/gem_version' - require 'cork/text_wrapper' -end diff --git a/bundle/ruby/3.2.0/gems/cork-0.3.0/lib/cork/board.rb b/bundle/ruby/3.2.0/gems/cork-0.3.0/lib/cork/board.rb deleted file mode 100644 index 8680df13..00000000 --- a/bundle/ruby/3.2.0/gems/cork-0.3.0/lib/cork/board.rb +++ /dev/null @@ -1,349 +0,0 @@ -require 'colored2' - -module Cork - # provides support for UI output. Cork provides support for nested - # sections of information and for a verbose mode. - # - - class Board - # @return [input] The input specification that contains the user input - # for the UI. - # - attr_reader :input - # @return [output] The output specification containing the UI output. - attr_reader :out - # @return [error] The error specification containing the UI error. - attr_reader :err - # @return [warnings] The warnings specification containing the UI warnings. - attr_reader :warnings - # @return [Bool] Whether the wrapping of the strings to the width of the - # terminal should be disabled. - # - attr_accessor :disable_wrap - alias_method :disable_wrap?, :disable_wrap - - attr_reader :verbose - alias_method :verbose?, :verbose - - attr_reader :silent - alias_method :silent?, :silent - - attr_reader :ansi - alias_method :ansi?, :ansi - - attr_accessor :indentation_level - attr_accessor :title_level - - # Initialize a new instance. - # - # @param [Boolean] verbose When verbose is true verbose output is printed. - # this defaults to true - # @param [Boolean] silent When silent is true all output is supressed. - # This defaults to false. - # @param [Boolean] ansi When ansi is true output may contain ansi - # color codes. This is true by default. - # @param [IO] input The file descriptor to read the user input. - # @param [IO] out The file descriptor to print all output to. - # @param [IO] err The file descriptor to print all errors to. - # - def initialize(verbose: false, silent: false, ansi: true, - input: $stdin, out: $stdout, err: $stderr) - - @input = input - @out = out - @err = err - @verbose = verbose - @silent = silent - @ansi = ansi - @warnings = [] - @title_colors = %w( yellow green ) - @title_level = 0 - @indentation_level = 2 - end - - # Prints a message followed by a new line unless silent. - # - def puts(message = '') - out.puts(message) unless silent? - end - - # Prints a message without a new line unless silent. - # - def print(message) - out.print(message) unless silent? - end - - # Prints a message respecting the current indentation level and - # wrapping it to the terminal width if necessary. - # - def puts_indented(message = '') - indented = wrap_string(message, @indentation_level) - puts(indented) - end - - # Gets input from the configured input. - # - def gets - input.gets - end - - # Stores important warning to the user optionally followed by actions that - # the user should take. To print them use {#print_warnings}. - # - # @param [String] message The message to print. - # @param [Array] actions The actions that the user should take. - # @param [Boolean] verbose_only When verbose_only is configured to - # true, the warning will only be printed when - # Board is configured to print verbose messages. - # This is false by default. - # - # @return [void] - # - def warn(message, actions = [], verbose_only = false) - warnings << { - :message => message, - :actions => actions, - :verbose_only => verbose_only, - } - end - - # The returned path is quoted. If the argument is nil it returns an empty - # string. - # - # @param [#to_str,Nil] pathname - # The path to return. - # @param [Pathname] relative_to - # - def path(pathname, relative_to = Pathname.pwd) - if pathname - path = Pathname(pathname).relative_path_from(relative_to) - "`#{path}`" - else - '' - end - end - - # Prints a message with a label. - # - # @param [String] label - # The label to print. - # - # @param [#to_s] value - # The value to print. - # - # @param [FixNum] justification - # The justification of the label. - # - def labeled(label, value, justification = 12) - if value - title = "- #{label}:" - if value.is_a?(Enumerable) - lines = [wrap_string(title, indentation_level)] - lines += value.map do |v| - wrap_string("- #{v}", indentation_level + 2) - end - puts lines.join("\n") - else - string = title.ljust(justification) + "#{value}" - puts wrap_string(string, indentation_level) - end - end - end - - # Prints a title taking an optional verbose prefix and - # a relative indentation valid for the UI action in the passed - # block. - # - # In verbose mode titles are printed with a color according - # to their level. In normal mode titles are printed only if - # they have nesting level smaller than 2. - # - # @todo Refactor to title (for always visible titles like search) - # and sections (titles that represent collapsible sections). - # - # @param [String] title - # The title to print - # - # @param [String] verbose_prefix - # See #message - # - # @param [FixNum] relative_indentation - # The indentation level relative to the current, - # when the message is printed. - # - def section(title, verbose_prefix = '', relative_indentation = 0, - titled = false) - if verbose? - title(title, verbose_prefix, relative_indentation) - elsif title_level < 1 || titled - puts title - end - - @indentation_level += relative_indentation - @title_level += 1 - yield if block_given? - @indentation_level -= relative_indentation - @title_level -= 1 - end - - # Prints an info to the user. The info is always displayed. - # It respects the current indentation level only in verbose - # mode. - # - # Any title printed in the optional block is treated as a message. - # - # @param [String] message - # The message to print. - # - def info(message) - indentation = verbose? ? @indentation_level : 0 - indented = wrap_string(message, indentation) - puts(indented) - - if block_given? - @indentation_level += 2 - @treat_titles_as_messages = true - yield - @treat_titles_as_messages = false - @indentation_level -= 2 - end - end - - # A title opposed to a section is always visible - # - # @param [String] title - # The title to print - # - # @param [String] verbose_prefix - # See #message - # - # @param [FixNum] relative_indentation - # The indentation level relative to the current, - # when the message is printed. - # - def title(title, verbose_prefix = '', relative_indentation = 2) - if @treat_titles_as_messages - message(title, verbose_prefix) - else - puts_title(title, verbose_prefix) - end - - if block_given? - @indentation_level += relative_indentation - @title_level += 1 - yield - @indentation_level -= relative_indentation - @title_level -= 1 - end - end - - # Prints a verbose message taking an optional verbose prefix and - # a relatvie indentation valid for the UI action in the passed block. - # - def notice(message) - line = "\n[!] #{message}" - line = line.green if ansi? - puts(line) - end - - # @todo Clean interface. - # - # @param [String] message - # The message to print. - # - # @param [String] verbose_prefix - # See #message - # - # @param [FixNum] relative_indentation - # The indentation level relative to the current, - # when the message is printed. - # - - # Prints the stored warnings. This method is intended to be called at the - # end of the execution of the binary. - # - # @return [void] - # - def print_warnings - out.flush - warnings.each do |warning| - next if warning[:verbose_only] && !verbose? - - message = "\n[!] #{warning[:message]}" - message = message.yellow if ansi? - err.puts(message) - - warning[:actions].each do |action| - string = "- #{action}" - string = wrap_string(string, 4) - err.puts(string) - end - end - end - - # Prints a verbose message taking an optional verbose prefix and - # a relative indentation valid for the UI action in the passed - # block. - # - # @todo Clean interface. - # - def message(message, verbose_prefix = '', relative_indentation = 2) - message = verbose_prefix + message if verbose? - puts_indented message if verbose? - - @indentation_level += relative_indentation - yield if block_given? - @indentation_level -= relative_indentation - end - - private - - # @!group Helpers - - attr_writer :indentation_level - attr_accessor :title_level - - # Prints a title taking an optional verbose prefix and - # a relative indentation valid for the UI action in the passed - # block. - # - # In verbose mode titles are printed with a color according - # to their level. In normal mode titles are printed only if - # they have nesting level smaller than 2. - # - # @todo Refactor to title (for always visible titles like search) - # and sections (titles that represent collapsible sections). - # - # @param [String] title - # The title to print - # - # @param [String] verbose_prefix - # See #message - # - # @param [FixNum] relative_indentation - # The indentation level relative to the current, - # when the message is printed. - # - - def wrap_string(string, indent = 0) - first_space = ' ' * indent - if disable_wrap || !out.tty? - first_space << string - else - require 'io/console' - columns = out.winsize[1] - indented = TextWrapper.wrap_with_indent(string, indent, columns) - first_space << indented - end - end - - def puts_title(title, verbose_prefix) - title = verbose_prefix + title if verbose? - title = "\n#{title}" if @title_level < 2 - if ansi? && (color = @title_colors[title_level]) - title = title.send(color) - end - puts "#{title}" - end - end -end diff --git a/bundle/ruby/3.2.0/gems/cork-0.3.0/lib/cork/gem_version.rb b/bundle/ruby/3.2.0/gems/cork-0.3.0/lib/cork/gem_version.rb deleted file mode 100644 index af84fa98..00000000 --- a/bundle/ruby/3.2.0/gems/cork-0.3.0/lib/cork/gem_version.rb +++ /dev/null @@ -1,3 +0,0 @@ -module Cork - VERSION = '0.3.0' -end diff --git a/bundle/ruby/3.2.0/gems/cork-0.3.0/lib/cork/text_wrapper.rb b/bundle/ruby/3.2.0/gems/cork-0.3.0/lib/cork/text_wrapper.rb deleted file mode 100644 index fbfd5a3f..00000000 --- a/bundle/ruby/3.2.0/gems/cork-0.3.0/lib/cork/text_wrapper.rb +++ /dev/null @@ -1,76 +0,0 @@ -# encoding: utf-8 - -module Cork - module TextWrapper - # @return [String] Wraps a formatted string (e.g. markdown) by stripping - # heredoc indentation and wrapping by word to the terminal width - # taking into account a maximum one, and indenting the string. - # Code lines (i.e. indented by four spaces) are not wrapped. - # - # @param [String] string - # The string to format. - # - # @param [Fixnum] indent - # The number of spaces to insert before the string. - # - # @param [Fixnum] width - # The width to use to format the string if the terminal - # is too wide. - # - def wrap_formatted_text(string, indent = 0, width = 80) - paragraphs = strip_heredoc(string).split("\n\n") - paragraphs = paragraphs.map do |paragraph| - if paragraph.start_with?(' ' * 4) - paragraphs.gsub!(/\n/, "\n#{' ' * indent}") - else - paragraph = wrap_with_indent(paragraph, indent, width) - end - paragraph.insert(0, ' ' * indent).rstrip - end - paragraphs.join("\n\n") - end - - module_function :wrap_formatted_text - - # @return [String] Wraps a string to the terminal width taking into - # account the given indentation. - # - # @param [String] string - # The string to indent. - # - # @param [Fixnum] indent - # The number of spaces to insert before the string. - # - # @param [Fixnum] width - # The width to use when formatting the string in the terminal - # - def wrap_with_indent(string, indent = 0, width = 80) - full_line = string.gsub("\n", ' ') - available_width = width - indent - space = ' ' * indent - word_wrap(full_line, available_width).split("\n").join("\n#{space}") - end - - module_function :wrap_with_indent - - # @return [String] Lifted straigth from Actionview. Thanks Guys! - # - def word_wrap(line, line_width) - line.gsub(/(.{1,#{line_width}})(\s+|$)/, "\\1\n").strip - end - - module_function :word_wrap - - # @return [String] Lifted straigth from Actionview. Thanks Guys! - # - def strip_heredoc(string) - if min = string.scan(/^[ \t]*(?=\S)/).min - string.gsub(/^[ \t]{#{min.size}}/, '') - else - string - end - end - - module_function :strip_heredoc - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/LICENSE b/bundle/ruby/3.2.0/gems/danger-9.4.3/LICENSE deleted file mode 100644 index 81e0c521..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015-present Orta, Felix Krause - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/README.md b/bundle/ruby/3.2.0/gems/danger-9.4.3/README.md deleted file mode 100644 index 8a0bcf22..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/README.md +++ /dev/null @@ -1,93 +0,0 @@ -# Danger :no_entry_sign: - -[![License](http://img.shields.io/badge/license-MIT-green.svg?style=flat)](https://github.com/orta/danger/blob/master/LICENSE) -[![Gem](https://img.shields.io/gem/v/danger.svg?style=flat)](http://rubygems.org/gems/danger) -[![CI](https://github.com/danger/danger/actions/workflows/CI.yml/badge.svg)](https://github.com/danger/danger/actions/workflows/CI.yml) - -Formalize your Pull Request etiquette. - -------- - -

    - What is Danger? • - Vision • - Helping Out • - Plugin Development -

    - -------- - -## What is Danger? - -Danger runs after your CI, automating your team's conventions surrounding code review. - -This provides another logical step in your process, through this Danger can help lint your rote tasks in daily code review. - -You can use Danger to codify your team's norms, leaving humans to think about harder problems. - -## For example? - -You can: - -* Enforce CHANGELOGs -* Enforce links to Trello/JIRA in PR/MR bodies -* Enforce using descriptive labels -* Look out for common anti-patterns -* Highlight interesting build artifacts -* Give specific files extra focus - -Danger provides the glue to let _you_ build out the rules specific to your team's culture, offering useful metadata and a comprehensive plugin system to share common issues. - -## Getting Started - -Alright. So, actually, you may be in the wrong place. From here on in, this README is going to be for people who are interested in working on and improving on Danger. - -We keep all of the end-user documentation at [https://danger.systems](https://danger.systems). - -Some quick links: [Guides Index](https://danger.systems/guides.html), [DSL Reference](https://danger.systems/reference.html), [Getting Started](https://danger.systems/guides/getting_started.html) and [What does Danger Do?](https://danger.systems/guides/what_does_danger_do.html). - -## I'm here to help out! - -Brilliant. So, let's get you set up. - -```sh -git clone https://github.com/danger/danger.git -cd danger -bundle install -bundle exec rake spec -``` - -This sets everything up and runs all of the tests. - -#### Theory - -Danger has a [VISION.md](https://github.com/danger/danger/blob/master/VISION.md) file, which sums up the ideas around what Danger is. It is the lower bounds of what Danger means. Orta has written on handling and creating Danger [on the Artsy blog](http://artsy.github.io/blog/categories/danger/), too. - -#### Documentation - -The code you write may end up in the public part of the website — the easiest way to tell is that it is vastly overdocumented. If you are working in a space that looks over-documented, please be extra considerate to add documentation. We expect the consumers of that documentation to be non-rubyists, thus you should avoid specific jargon and try to provide duplicate overlapping examples. - -#### Testing - -So far, we've not really figured out the right way to make tests for our CLI commands. When we have done so, they've ended up being brittle. So, ideally, try to move any logic that would go into a command into separate classes, and test those. We're okay with the command not having coverage, but ideally the classes that make up what it does will. - -I'd strongly recommend using `bundle exec guard` to run your tests as you work. Any changes you make in the lib, or specs will have corresponding tests run instantly. - -#### Debugging - -Ruby is super dynamic. One of the best ways to debug Ruby code is by using [pry](https://pry.github.io/). We include pry for developers: when you have a problem, copy these two lines just before your problem and follow the instructions from "[I Want To Be A Danger Wizard](https://danger.systems/guides/troubleshooting.html#i-want-to-be-a-danger-wizard)." - -```ruby -require 'pry' -binding.pry -``` - -## License, Contributor's Guidelines and Code of Conduct - -We try to keep as much discussion as possible in GitHub issues, but also have a pretty inactive Slack --- if you'd like an invite, ping [@Orta](https://twitter.com/orta/) a DM on Twitter with your email. It's mostly interesting if you want to stay on top of Danger without all the emails from GitHub. - -> This project is open source under the MIT license, which means you have full access to the source code and can modify it to fit your own needs. - -> This project subscribes to the [Moya Contributors Guidelines](https://github.com/Moya/contributors) which TLDR: means we give out push access easily and often. - -> Contributors subscribe to the [Contributor Code of Conduct](https://contributor-covenant.org/version/1/3/0/) based on the [Contributor Covenant](https://contributor-covenant.org) version 1.3.0. diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/bin/danger b/bundle/ruby/3.2.0/gems/danger-9.4.3/bin/danger deleted file mode 100755 index d642c992..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/bin/danger +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env ruby -$LOAD_PATH.push File.expand_path("../lib", __dir__) - -require "danger" -Danger::Runner.run ARGV diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/assets/DangerfileTemplate b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/assets/DangerfileTemplate deleted file mode 100644 index d0529797..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/assets/DangerfileTemplate +++ /dev/null @@ -1,13 +0,0 @@ -# Sometimes it's a README fix, or something like that - which isn't relevant for -# including in a project's CHANGELOG for example -declared_trivial = github.pr_title.include? "#trivial" - -# Make it more obvious that a PR is a work in progress and shouldn't be merged yet -warn("PR is classed as Work in Progress") if github.pr_title.include? "[WIP]" - -# Warn when there is a big PR -warn("Big PR") if git.lines_of_code > 500 - -# Don't let testing shortcuts get into master by accident -fail("fdescribe left in tests") if `grep -r fdescribe specs/ `.length > 1 -fail("fit left in tests") if `grep -r fit specs/ `.length > 1 diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger.rb deleted file mode 100644 index e5d1bbc7..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger.rb +++ /dev/null @@ -1,45 +0,0 @@ -require "danger/version" -require "danger/danger_core/dangerfile" -require "danger/danger_core/environment_manager" -require "danger/commands/runner" -require "danger/plugin_support/plugin" -require "danger/core_ext/string" -require "danger/danger_core/executor" - -require "claide" -require "colored2" -require "pathname" -require "terminal-table" -require "cork" - -# Import all the Sources (CI, Request and SCM) -Dir[File.expand_path("danger/*source/*.rb", File.dirname(__FILE__))].each do |file| - require file -end - -module Danger - GEM_NAME = "danger".freeze - - # @return [String] The path to the local gem directory - def self.gem_path - if Gem::Specification.find_all_by_name(GEM_NAME).empty? - raise "Couldn't find gem directory for 'danger'" - end - - return Gem::Specification.find_by_name(GEM_NAME).gem_dir - end - - # @return [String] Latest version of Danger on https://rubygems.org - def self.danger_outdated? - require "danger/clients/rubygems_client" - latest_version = RubyGemsClient.latest_danger_version - - if Gem::Version.new(latest_version) > Gem::Version.new(Danger::VERSION) - latest_version - else - false - end - rescue StandardError => _e - false - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/appcenter.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/appcenter.rb deleted file mode 100644 index c7cecf14..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/appcenter.rb +++ /dev/null @@ -1,55 +0,0 @@ -# https://docs.microsoft.com/en-us/appcenter/build/custom/variables/ -require "uri" -require "danger/request_sources/github/github" - -module Danger - # ### CI Setup - # - # Add a script step to your appcenter-post-build.sh: - # - # ```shell - # #!/usr/bin/env bash - # bundle install - # bundle exec danger - # ``` - # - # ### Token Setup - # - # Add the `DANGER_GITHUB_API_TOKEN` to your environment variables. - # - class Appcenter < CI - def self.validates_as_ci?(env) - env.key? "APPCENTER_BUILD_ID" - end - - def self.validates_as_pr?(env) - return env["BUILD_REASON"] == "PullRequest" - end - - def self.owner_for_github(env) - URI.parse(env["BUILD_REPOSITORY_URI"]).path.split("/")[1] - end - - def self.repo_identifier_for_github(env) - repo_name = env["BUILD_REPOSITORY_NAME"] - owner = owner_for_github(env) - "#{owner}/#{repo_name}" - end - - # Hopefully it's a temporary workaround (same as in Codeship integration) because App Center - # doesn't expose PR's ID. There's a future request https://github.com/Microsoft/appcenter/issues/79 - def self.pr_from_env(env) - Danger::RequestSources::GitHub.new(nil, env).get_pr_from_branch(repo_identifier_for_github(env), env["BUILD_SOURCEBRANCHNAME"], owner_for_github(env)) - end - - def supported_request_sources - @supported_request_sources ||= [Danger::RequestSources::GitHub] - end - - def initialize(env) - self.pull_request_id = self.class.pr_from_env(env) - self.repo_url = env["BUILD_REPOSITORY_URI"] - self.repo_slug = self.class.repo_identifier_for_github(env) - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/appcircle.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/appcircle.rb deleted file mode 100644 index cd94458d..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/appcircle.rb +++ /dev/null @@ -1,83 +0,0 @@ -# https://docs.appcircle.io/environment-variables/managing-variables -# https://docs.appcircle.io/build/build-profile-configuration#environment-variables-configuration -require "danger/request_sources/github/github" -require "danger/request_sources/gitlab" -module Danger - # ### CI Setup - # - # Add a Custom Script step to your workflow and set it as a bash: - # - # ```shell - # cd $AC_REPOSITORY_DIR - # bundle install - # bundle exec danger - # ``` - # ### Token Setup - # - # Login to Appcircle and select your build profile. Go to your *Config* and - # choose *Environment Variables*. - # https://docs.appcircle.io/environment-variables/managing-variables - # - # #### GitHub - # Add the `DANGER_GITHUB_API_TOKEN` to your profile's ENV. - # - # #### GitLab - # Add the `DANGER_GITLAB_API_TOKEN` to your profile's ENV. - # - # #### Bitbucket Cloud - # Add the `DANGER_BITBUCKETSERVER_USERNAME`, `DANGER_BITBUCKETSERVER_PASSWORD` - # to your profile's ENV. - # - # #### Bitbucket server - # Add the `DANGER_BITBUCKETSERVER_USERNAME`, `DANGER_BITBUCKETSERVER_PASSWORD` - # and `DANGER_BITBUCKETSERVER_HOST` to your profile's ENV. - # - class Appcircle < CI - def self.validates_as_ci?(env) - env.key? "AC_APPCIRCLE" - end - - def self.validates_as_pr?(env) - return false unless env.key? "AC_PULL_NUMBER" - - env["AC_PULL_NUMBER"].to_i > 0 - end - - def supported_request_sources - @supported_request_sources ||= [ - Danger::RequestSources::GitHub, - Danger::RequestSources::BitbucketCloud, - Danger::RequestSources::BitbucketServer, - Danger::RequestSources::GitLab - ] - end - - def initialize(env) - self.pull_request_id = env["AC_PULL_NUMBER"] - self.repo_url = env["AC_GIT_URL"] - self.repo_slug = repo_slug_from(self.repo_url) - end - - def repo_slug_from(url) - if url =~ URI::DEFAULT_PARSER.make_regexp - # Try to parse the URL as a valid URI. This should cover the cases of http/https/ssh URLs. - begin - uri = URI.parse(url) - return uri.path.sub(%r{^(/)}, "").sub(/(.git)$/, "") - rescue URI::InvalidURIError - # In case URL could not be parsed fallback to git URL parsing. - repo_slug_asgiturl(url) - end - else - # In case URL could not be parsed fallback to git URL parsing. git@github.com:organization/repo.git - repo_slug_asgiturl(url) - end - end - - def repo_slug_asgiturl(url) - matcher_url = url - repo_matches = matcher_url.match(%r{([/:])(([^/]+/)+[^/]+?)(\.git$|$)})[2] - return repo_matches unless repo_matches.nil? - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/appveyor.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/appveyor.rb deleted file mode 100644 index a485f757..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/appveyor.rb +++ /dev/null @@ -1,64 +0,0 @@ -# https://www.appveyor.com/docs/build-configuration/ -module Danger - # ### CI Setup - # - # Install dependencies and add a danger step to your `appveyor.yml`. - # - # ```yaml - # install: - # - cmd: >- - # set PATH=C:\Ruby25-x64\bin;%PATH% - # - # bundle install - # after_test: - # - cmd: >- - # bundle exec danger - # ``` - # - # ### Token Setup - # - # For public repositories, add your plain token to environment variables in `appveyor.yml`. - # Encrypted environment variables will not be decrypted on PR builds. - # see here: https://www.appveyor.com/docs/build-configuration/#secure-variables - # - # ```yaml - # environment: - # DANGER_GITHUB_API_TOKEN: - # ``` - # - # For private repositories, enter your token in `Settings>Environment>Environment variables>Add variable` and turn on `variable encryption`. - # You will see encrypted variable text in `Settings>Export YAML` so just copy to your `appveyor.yml`. - # - # ```yaml - # environment: - # DANGER_GITHUB_API_TOKEN: - # secure: - # ``` - # - class AppVeyor < CI - def self.validates_as_ci?(env) - env.key? "APPVEYOR" - end - - def self.validates_as_pr?(env) - return false unless env.key? "APPVEYOR_PULL_REQUEST_NUMBER" - - env["APPVEYOR_PULL_REQUEST_NUMBER"].to_i > 0 - end - - def initialize(env) - self.repo_slug = env["APPVEYOR_REPO_NAME"] - self.pull_request_id = env["APPVEYOR_PULL_REQUEST_NUMBER"] - self.repo_url = GitRepo.new.origins # AppVeyor doesn't provide a repo url env variable for now - end - - def supported_request_sources - @supported_request_sources ||= [ - Danger::RequestSources::GitHub, - Danger::RequestSources::BitbucketCloud, - Danger::RequestSources::BitbucketServer, - Danger::RequestSources::GitLab - ] - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/azure_pipelines.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/azure_pipelines.rb deleted file mode 100644 index 6544db4e..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/azure_pipelines.rb +++ /dev/null @@ -1,61 +0,0 @@ -# https://docs.microsoft.com/en-us/azure/devops/pipelines/build/variables -require "uri" -require "danger/request_sources/github/github" -require "danger/request_sources/vsts" - -module Danger - # ### CI Setup - # - # Add a script step: - # - # ```shell - # #!/usr/bin/env bash - # bundle install - # bundle exec danger - # ``` - # - # ### Token Setup - # - # #### GitHub - # - # You need to add the `DANGER_GITHUB_API_TOKEN` environment variable, to do this, go to your build definition's variables tab. - # # - # #### Azure Git - # - # You need to add the `DANGER_VSTS_API_TOKEN` and `DANGER_VSTS_HOST` environment variable, to do this, - # go to your build definition's variables tab. The `DANGER_VSTS_API_TOKEN` is your vsts personal access token. - # Instructions for creating a personal access token can be found [here](https://www.visualstudio.com/en-us/docs/setup-admin/team-services/use-personal-access-tokens-to-authenticate). - # For the `DANGER_VSTS_HOST` variable the suggested value is `$(System.TeamFoundationCollectionUri)$(System.TeamProject)` - # which will automatically get your vsts domain and your project name needed for the vsts api. - # - class AzurePipelines < CI - def self.validates_as_ci?(env) - has_all_variables = ["AGENT_ID", "BUILD_SOURCEBRANCH", "BUILD_REPOSITORY_URI", "BUILD_REASON", "BUILD_REPOSITORY_NAME"].all? { |x| env[x] && !env[x].empty? } - - # AGENT_ID is being used by AppCenter as well, so checking here to make sure AppCenter CI doesn't get a false positive for AzurePipelines - # Anyone working with AzurePipelines could provide a better/truly unique env key to avoid checking for AppCenter - !Danger::Appcenter.validates_as_ci?(env) && - has_all_variables - end - - def self.validates_as_pr?(env) - return env["BUILD_REASON"] == "PullRequest" - end - - def supported_request_sources - @supported_request_sources ||= [ - Danger::RequestSources::GitHub, - Danger::RequestSources::GitLab, - Danger::RequestSources::BitbucketServer, - Danger::RequestSources::BitbucketCloud, - Danger::RequestSources::VSTS - ] - end - - def initialize(env) - self.pull_request_id = env["SYSTEM_PULLREQUEST_PULLREQUESTNUMBER"] || env["SYSTEM_PULLREQUEST_PULLREQUESTID"] - self.repo_url = env["BUILD_REPOSITORY_URI"] - self.repo_slug = env["BUILD_REPOSITORY_NAME"] - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/bamboo.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/bamboo.rb deleted file mode 100644 index f9589f5f..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/bamboo.rb +++ /dev/null @@ -1,41 +0,0 @@ -require "set" - -module Danger - # ### CI Setup - # - # Add a Run Script task that executes `danger` (or `bundle exec danger` if you're using Bundler - # to manage your gems) as your as part of your Bamboo plan. - # The minimum supported version is Bamboo 6.9. - # - # ### Token Setup - # - # IMPORTANT: All required Bamboo environment variables will be available - # only if the plan is run as part of a pull request. This can be achieved by selecting: - # Configure plan -> Branches -> Create plan branch: "When pull request is created". - # Otherwise, `bamboo_repository_pr_key` and `bamboo_planRepository_repositoryUrl` - # will not be available. - # - class Bamboo < CI - def supported_request_sources - @supported_request_sources ||= [ - Danger::RequestSources::BitbucketServer - ] - end - - def self.validates_as_ci?(env) - env.key? "bamboo_buildKey" - end - - def self.validates_as_pr?(env) - exists = ["bamboo_repository_pr_key", "bamboo_planRepository_repositoryUrl"].all? { |x| env[x] && !env[x].empty? } - exists && env["bamboo_repository_pr_key"].to_i > 0 - end - - def initialize(env) - self.repo_url = env["bamboo_planRepository_repositoryUrl"] - self.pull_request_id = env["bamboo_repository_pr_key"] - repo_matches = self.repo_url.match(%r{([/:])([^/]+/[^/]+?)(\.git$|$)}) - self.repo_slug = repo_matches[2] unless repo_matches.nil? - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/bitbucket_pipelines.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/bitbucket_pipelines.rb deleted file mode 100644 index 0c0689e6..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/bitbucket_pipelines.rb +++ /dev/null @@ -1,37 +0,0 @@ -module Danger - # ### CI Setup - # - # Install dependencies and add a danger step to your `bitbucket-pipelines.yml`. - # - # ```yaml - # script: - # - bundle exec danger --verbose - # ``` - # - # ### Token Setup - # - # Add `DANGER_BITBUCKETCLOUD_USERNAME` and `DANGER_BITBUCKETCLOUD_PASSWORD` to your pipeline repository variable - # or instead using `DANGER_BITBUCKETCLOUD_OAUTH_KEY` and `DANGER_BITBUCKETCLOUD_OAUTH_SECRET`. - # - # You can find them in Settings > Pipelines > Repository Variables - - class BitbucketPipelines < CI - def self.validates_as_ci?(env) - env.key? "BITBUCKET_BUILD_NUMBER" - end - - def self.validates_as_pr?(env) - env.key? "BITBUCKET_PR_ID" - end - - def supported_request_sources - @supported_request_sources ||= [Danger::RequestSources::BitbucketCloud] - end - - def initialize(env) - self.repo_url = env["BITBUCKET_GIT_HTTP_ORIGIN"] - self.repo_slug = "#{env['BITBUCKET_REPO_OWNER']}/#{env['BITBUCKET_REPO_SLUG']}" - self.pull_request_id = env["BITBUCKET_PR_ID"] - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/bitrise.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/bitrise.rb deleted file mode 100644 index d1fc55db..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/bitrise.rb +++ /dev/null @@ -1,78 +0,0 @@ -# http://devcenter.bitrise.io/docs/available-environment-variables -require "danger/request_sources/github/github" -require "danger/request_sources/gitlab" - -module Danger - # ### CI Setup - # - # Add a script step to your workflow: - # - # ```yml - # - script@1.1.2: - # inputs: - # - content: |- - # bundle install - # bundle exec danger - # ``` - # - # ### Token Setup - # - # Add the `DANGER_GITHUB_API_TOKEN` to your workflow's [Secret App Env Vars](https://blog.bitrise.io/anyone-even-prs-can-have-secrets). - # - # ### bitbucket server and bitrise - # - # Danger will read the environment variable GIT_REPOSITORY_URL to construct the Bitbucket Server API URL - # finding the project and repo slug in the GIT_REPOSITORY_URL variable. This GIT_REPOSITORY_URL variable - # comes from the App Settings tab for your Bitrise App. If you are manually setting a repo URL in the - # Git Clone Repo step, you may need to set adjust this property in the settings tab, maybe even fake it. - # The patterns used are `(%r{\.com/(.*)})` and `(%r{\.com:(.*)})` and .split(/\.git$|$/) to remove ".git" if the URL contains it. - # - class Bitrise < CI - def self.validates_as_ci?(env) - env.key? "BITRISE_IO" - end - - def self.validates_as_pr?(env) - return !env["BITRISE_PULL_REQUEST"].to_s.empty? - end - - def supported_request_sources - @supported_request_sources ||= [ - Danger::RequestSources::GitHub, - Danger::RequestSources::GitLab, - Danger::RequestSources::BitbucketServer, - Danger::RequestSources::BitbucketCloud - ] - end - - def initialize(env) - self.pull_request_id = env["BITRISE_PULL_REQUEST"] - self.repo_url = env["GIT_REPOSITORY_URL"] - - matcher_url = self.repo_url - self.repo_slug = repo_slug_from(self.repo_url) - end - - def repo_slug_from(url) - if url =~ URI::DEFAULT_PARSER.make_regexp - # Try to parse the URL as a valid URI. This should cover the cases of http/https/ssh URLs. - begin - uri = URI.parse(url) - return uri.path.sub(%r{^(/)}, "").sub(/(.git)$/, "") - rescue URI::InvalidURIError - # In case URL could not be parsed fallback to git URL parsing. - repo_slug_asgiturl(url) - end - else - # In case URL could not be parsed fallback to git URL parsing. git@github.com:organization/repo.git - repo_slug_asgiturl(url) - end - end - - def repo_slug_asgiturl(url) - matcher_url = url - repo_matches = matcher_url.match(%r{([/:])(([^/]+/)+[^/]+?)(\.git$|$)})[2] - return repo_matches unless repo_matches.nil? - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/buddybuild.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/buddybuild.rb deleted file mode 100644 index 5c20e6a4..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/buddybuild.rb +++ /dev/null @@ -1,62 +0,0 @@ -module Danger - # ### CI Setup - # - # Read how you can setup Danger on the buddybuild blog: - # https://www.buddybuild.com/blog/using-danger-with-buddybuild/ - # - # ### Token Setup - # - # Login to buddybuild and select your app. Go to your *App Settings* and - # in the *Build Settings* menu on the left, choose *Environment Variables*. - # http://docs.buddybuild.com/docs/environment-variables - # - # #### GitHub - # Add the `DANGER_GITHUB_API_TOKEN` to your build user's ENV. - # - # #### GitLab - # Add the `DANGER_GITLAB_API_TOKEN` to your build user's ENV. - # - # #### Bitbucket Cloud - # Add the `DANGER_BITBUCKETSERVER_USERNAME`, `DANGER_BITBUCKETSERVER_PASSWORD` - # to your build user's ENV. - # - # #### Bitbucket server - # Add the `DANGER_BITBUCKETSERVER_USERNAME`, `DANGER_BITBUCKETSERVER_PASSWORD` - # and `DANGER_BITBUCKETSERVER_HOST` to your build user's ENV. - # - # ### Running Danger - # - # Once the environment variables are all available, create a custom build step - # to run Danger as part of your build process: - # http://docs.buddybuild.com/docs/custom-prebuild-and-postbuild-steps - class Buddybuild < CI - ####################################################################### - def self.validates_as_ci?(env) - value = env["BUDDYBUILD_BUILD_ID"] - return !value.nil? && !env["BUDDYBUILD_BUILD_ID"].empty? - end - - ####################################################################### - def self.validates_as_pr?(env) - value = env["BUDDYBUILD_PULL_REQUEST"] - return !value.nil? && !env["BUDDYBUILD_PULL_REQUEST"].empty? - end - - ####################################################################### - def supported_request_sources - @supported_request_sources ||= [ - Danger::RequestSources::GitHub, - Danger::RequestSources::GitLab, - Danger::RequestSources::BitbucketServer, - Danger::RequestSources::BitbucketCloud - ] - end - - ####################################################################### - def initialize(env) - self.repo_slug = env["BUDDYBUILD_REPO_SLUG"] - self.pull_request_id = env["BUDDYBUILD_PULL_REQUEST"] - self.repo_url = GitRepo.new.origins # Buddybuild doesn't provide a repo url env variable for now - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/buildkite.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/buildkite.rb deleted file mode 100644 index b657bae2..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/buildkite.rb +++ /dev/null @@ -1,51 +0,0 @@ -# https://buildkite.com/docs/agent/osx -# https://buildkite.com/docs/guides/environment-variables -require "danger/request_sources/github/github" -require "danger/request_sources/gitlab" - -module Danger - # ### CI Setup - # - # With BuildKite you run the server yourself, so you will want to run it as a part of your build process. - # It is common to have build steps, so we would recommend adding this to your scrip: - # - # ```shell - # echo "--- Running Danger" - # bundle exec danger - # ``` - # - # ### Token Setup - # - # #### GitHub - # - # As this is self-hosted, you will need to add the `DANGER_GITHUB_API_TOKEN` to your build user's ENV. The alternative - # is to pass in the token as a prefix to the command `DANGER_GITHUB_API_TOKEN="123" bundle exec danger`. - # - # #### GitLab - # - # As this is self-hosted, you will need to add the `DANGER_GITLAB_API_TOKEN` to your build user's ENV. The alternative - # is to pass in the token as a prefix to the command `DANGER_GITLAB_API_TOKEN="123" bundle exec danger`. - # - class Buildkite < CI - def self.validates_as_ci?(env) - env.key? "BUILDKITE" - end - - def self.validates_as_pr?(env) - exists = ["BUILDKITE_PULL_REQUEST_REPO", "BUILDKITE_PULL_REQUEST"].all? { |x| env[x] } - exists && !env["BUILDKITE_PULL_REQUEST_REPO"].empty? - end - - def initialize(env) - self.repo_url = env["BUILDKITE_REPO"] - self.pull_request_id = env["BUILDKITE_PULL_REQUEST"] - - repo_matches = self.repo_url.match(%r{([/:])([^/]+/[^/]+?)(\.git$|$)}) - self.repo_slug = repo_matches[2] unless repo_matches.nil? - end - - def supported_request_sources - @supported_request_sources ||= [Danger::RequestSources::GitHub, Danger::RequestSources::GitLab, Danger::RequestSources::BitbucketServer] - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/ci_source.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/ci_source.rb deleted file mode 100644 index 45c96a88..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/ci_source.rb +++ /dev/null @@ -1,37 +0,0 @@ -require "set" - -module Danger - # "abstract" CI class - class CI - attr_accessor :repo_slug, :pull_request_id, :repo_url, :supported_request_sources - - def self.inherited(child_class) - available_ci_sources.add child_class - super - end - - def self.available_ci_sources - @available_ci_sources ||= Set.new - end - - def supported_request_sources - raise "CISource subclass must specify the supported request sources" - end - - def supports?(request_source) - supported_request_sources.include?(request_source) - end - - def self.validates_as_ci?(_env) - abort "You need to include a function for #{self} for validates_as_ci?" - end - - def self.validates_as_pr?(_env) - abort "You need to include a function for #{self} for validates_as_pr?" - end - - def initialize(_env) - raise "Subclass and overwrite initialize" if method(__method__).owner == Danger::CI - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/circle.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/circle.rb deleted file mode 100644 index 40bbf6a7..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/circle.rb +++ /dev/null @@ -1,94 +0,0 @@ -# https://circleci.com/docs/environment-variables -require "uri" -require "danger/ci_source/circle_api" -require "danger/request_sources/github/github" - -module Danger - # ### CI Setup - # - # For setting up CircleCI, we recommend turning on "Only build pull requests" in "Advanced Settings." Without this enabled, - # it's trickier for Danger to determine whether you're in a pull request or not, as the environment metadata - # isn't as reliable. - # - # A common scenario is when CircleCI begins building a commit before the commit becomes associated with a PR - # (e.g. a developer pushes their branch to the remote repo for the first time. CircleCI spins up and begins building. - # Moments later the developer creates a PR on GitHub. Since the build process started before the PR existed, - # Danger won't be able to use the Circle-provided environment variables to retrieve PR metadata.) - # - # With "Only build pull requests" enabled, you can add `bundle exec danger` to your `config.yml` (Circle 2.0). - # - # e.g. - # - # ```yaml - # - run: bundle exec danger --verbose - # ``` - # - # And that should be it! - # - # ### Token Setup - # - # If "Only build pull requests" can't be enabled for your project, Danger _can_ still work by relying on CircleCI's API - # to retrieve PR metadata, which will require an API token. - # - # 1. Go to your project > Settings > API Permissions. Create a token with scope "view-builds" and a label like "DANGER_CIRCLE_CI_API_TOKEN". - # 2. Settings > Environment Variables. Add the token as a CircleCI environment variable, which exposes it to the Danger process. - # - # There is no difference here for OSS vs Closed, both scenarios will need this environment variable. - # - # With these pieces in place, Danger should be able to work as expected. - # - class CircleCI < CI - # Side note: CircleCI is complicated. The env vars for PRs are not guaranteed to exist - # if the build was triggered from a commit, to look at examples of the different types - # of CI states, see this repo: https://github.com/orta/show_circle_env - - def self.validates_as_ci?(env) - env.key? "CIRCLE_BUILD_NUM" - end - - def self.validates_as_pr?(env) - # This will get used if it's available, instead of the API faffing. - return true if env["CI_PULL_REQUEST"] && !env["CI_PULL_REQUEST"].empty? - return true if env["CIRCLE_PULL_REQUEST"] && !env["CIRCLE_PULL_REQUEST"].empty? - - # Real-world talk, it should be worrying if none of these are in the environment - return false unless ["DANGER_CIRCLE_CI_API_TOKEN", "CIRCLE_PROJECT_USERNAME", "CIRCLE_PROJECT_REPONAME", "CIRCLE_BUILD_NUM"].all? { |x| env[x] && !env[x].empty? } - - # Uses the Circle API to determine if it's a PR otherwise - api = CircleAPI.new - api.pull_request?(env) - end - - def supported_request_sources - @supported_request_sources ||= [Danger::RequestSources::GitHub, Danger::RequestSources::BitbucketCloud] - end - - def initialize(env) - self.repo_url = env["CIRCLE_REPOSITORY_URL"] - pr_url = env["CI_PULL_REQUEST"] || env["CIRCLE_PULL_REQUEST"] - - # If it's not a real URL, use the Circle API - unless pr_url && URI.parse(pr_url).kind_of?(URI::HTTP) - api = CircleAPI.new - pr_url = api.pull_request_url(env) - end - - # We should either have got it via the API, or - # an ENV var. - pr_path = URI.parse(pr_url).path.split("/") - if pr_path.count == 5 - # The first one is an extra slash, ignore it - self.repo_slug = pr_path[1] + "/" + pr_path[2] - self.pull_request_id = pr_path[4] - - else - message = "Danger::Circle.rb considers this a PR, " \ - "but did not get enough information to get a repo slug" \ - "and PR id.\n\n" \ - "PR path: #{pr_url}\n" \ - "Keys: #{env.keys}" - raise message.red - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/circle_api.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/circle_api.rb deleted file mode 100644 index 379d51cd..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/circle_api.rb +++ /dev/null @@ -1,51 +0,0 @@ -require "faraday" - -module Danger - class CircleAPI - # Determine if there's a PR attached to this commit, - # and return a bool - def pull_request?(env) - url = pull_request_url(env) - return !url.nil? - end - - # Determine if there's a PR attached to this commit, - # and return the url if so - def pull_request_url(env) - url = env["CI_PULL_REQUEST"] - - if url.nil? && !env["CIRCLE_PROJECT_USERNAME"].nil? && !env["CIRCLE_PROJECT_REPONAME"].nil? - repo_slug = env["CIRCLE_PROJECT_USERNAME"] + "/" + env["CIRCLE_PROJECT_REPONAME"] - if !env["CIRCLE_PR_NUMBER"].nil? - host = env["DANGER_GITHUB_HOST"] || "github.com" - url = "https://" + host + "/" + repo_slug + "/pull/" + env["CIRCLE_PR_NUMBER"] - else - token = env["DANGER_CIRCLE_CI_API_TOKEN"] - url = fetch_pull_request_url(repo_slug, env["CIRCLE_BUILD_NUM"], token) - end - end - url - end - - def client - @client ||= Faraday.new(url: "https://circleci.com/api/v1") - end - - # Ask the API if the commit is inside a PR - def fetch_pull_request_url(repo_slug, build_number, token) - build_json = fetch_build(repo_slug, build_number, token) - pull_requests = build_json[:pull_requests] - return nil unless pull_requests && pull_requests.first - - pull_requests.first[:url] - end - - # Make the API call, and parse the JSON - def fetch_build(repo_slug, build_number, token) - url = "project/#{repo_slug}/#{build_number}" - params = { "circle-token" => token } - response = client.get url, params, accept: "application/json" - JSON.parse(response.body, symbolize_names: true) - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/cirrus.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/cirrus.rb deleted file mode 100644 index 82b8cecd..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/cirrus.rb +++ /dev/null @@ -1,31 +0,0 @@ -require "danger/request_sources/github/github" - -module Danger - # ### CI Setup - # You need to edit your `.cirrus.yml` to include `bundler exec danger`. - # - # Adding this to your `.cirrus.yml` allows Danger to fail your build, both on the Cirrus CI website and within your Pull Request. - # With that set up, you can edit your task to add `bundler exec danger` in any script instruction. - class Cirrus < CI - def self.validates_as_ci?(env) - env.key? "CIRRUS_CI" - end - - def self.validates_as_pr?(env) - exists = ["CIRRUS_PR", "CIRRUS_REPO_FULL_NAME"].all? { |x| env[x] && !env[x].empty? } - exists && env["CIRRUS_PR"].to_i > 0 - end - - def supported_request_sources - @supported_request_sources ||= [Danger::RequestSources::GitHub] - end - - def initialize(env) - self.repo_slug = env["CIRRUS_REPO_FULL_NAME"] - if env["CIRRUS_PR"].to_i > 0 - self.pull_request_id = env["CIRRUS_PR"] - end - self.repo_url = env["CIRRUS_GIT_CLONE_URL"] - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/code_build.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/code_build.rb deleted file mode 100644 index 8f222967..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/code_build.rb +++ /dev/null @@ -1,71 +0,0 @@ -# https://docs.aws.amazon.com/codebuild/latest/userguide/build-env-ref-env-vars.html -require "danger/request_sources/github/github" - -module Danger - # ### CI Setup - # - # In CodeBuild, make sure to correctly forward CODEBUILD_BUILD_ID, CODEBUILD_SOURCE_VERSION, CODEBUILD_SOURCE_REPO_URL and DANGER_GITHUB_API_TOKEN. - # In CodeBuild with batch builds, make sure to correctly forward CODEBUILD_BUILD_ID, CODEBUILD_WEBHOOK_TRIGGER, CODEBUILD_SOURCE_REPO_URL, CODEBUILD_BATCH_BUILD_IDENTIFIER and DANGER_GITHUB_API_TOKEN. - # - # ### Token Setup - # - # Add your `DANGER_GITHUB_API_TOKEN` to your project. Edit -> Environment -> Additional configuration -> Create a parameter - # - class CodeBuild < CI - def self.validates_as_ci?(env) - env.key? "CODEBUILD_BUILD_ID" - end - - def self.validates_as_pr?(env) - !!self.extract_pr_url(env) - end - - def supported_request_sources - @supported_request_sources ||= [Danger::RequestSources::GitHub] - end - - def initialize(env) - self.repo_slug = self.class.extract_repo_slug(env) - if env["CODEBUILD_BATCH_BUILD_IDENTIFIER"] - self.pull_request_id = env["CODEBUILD_WEBHOOK_TRIGGER"].split("/")[1].to_i - else - self.pull_request_id = env["CODEBUILD_SOURCE_VERSION"].split("/")[1].to_i - end - self.repo_url = self.class.extract_repo_url(env) - end - - def self.extract_repo_slug(env) - return nil unless env.key? "CODEBUILD_SOURCE_REPO_URL" - - gh_host = env["DANGER_GITHUB_HOST"] || "github.com" - - env["CODEBUILD_SOURCE_REPO_URL"].gsub(%r{^.*?#{Regexp.escape(gh_host)}/(.*?)(\.git)?$}, '\1') - end - - def self.extract_repo_url(env) - return nil unless env.key? "CODEBUILD_SOURCE_REPO_URL" - - env["CODEBUILD_SOURCE_REPO_URL"].gsub(/\.git$/, "") - end - - def self.extract_pr_url(env) - if env["CODEBUILD_BATCH_BUILD_IDENTIFIER"] - return nil unless env.key? "CODEBUILD_WEBHOOK_TRIGGER" - return nil unless env.key? "CODEBUILD_SOURCE_REPO_URL" - return nil unless env["CODEBUILD_WEBHOOK_TRIGGER"].split("/").length == 2 - - event_type, pr_number = env["CODEBUILD_WEBHOOK_TRIGGER"].split("/") - return nil unless event_type == "pr" - else - return nil unless env.key? "CODEBUILD_SOURCE_VERSION" - return nil unless env.key? "CODEBUILD_SOURCE_REPO_URL" - return nil unless env["CODEBUILD_SOURCE_VERSION"].split("/").length == 2 - - _source_origin, pr_number = env["CODEBUILD_SOURCE_VERSION"].split("/") - end - github_repo_url = env["CODEBUILD_SOURCE_REPO_URL"].gsub(/\.git$/, "") - - "#{github_repo_url}/pull/#{pr_number}" - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/codefresh.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/codefresh.rb deleted file mode 100644 index 4ad4c311..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/codefresh.rb +++ /dev/null @@ -1,47 +0,0 @@ -# https://semaphoreci.com/docs/available-environment-variables.html -require "danger/request_sources/github/github" - -module Danger - # ### CI Setup - # - # To set up Danger on Codefresh, create a freestyle step in your Codefresh yaml configuration: - # - # ```yml - # Danger: - # title: Run Danger - # image: alpine/bundle - # working_directory: ${{main_clone}} - # commands: - # - bundle install --deployment - # - bundle exec danger --verbose - # ``` - # - # Don't forget to add the `DANGER_GITHUB_API_TOKEN` variable to your pipeline settings so that Danger can properly post comments to your pull request. - # - class Codefresh < CI - def self.validates_as_ci?(env) - env.key?("CF_BUILD_ID") && env.key?("CF_BUILD_URL") - end - - def self.validates_as_pr?(env) - return !env["CF_PULL_REQUEST_NUMBER"].to_s.empty? - end - - def supported_request_sources - @supported_request_sources ||= [Danger::RequestSources::GitHub] - end - - def self.slug_from(env) - return "" if env["CF_REPO_OWNER"].to_s.empty? - return "" if env["CF_REPO_NAME"].to_s.empty? - - "#{env['CF_REPO_OWNER']}/#{env['CF_REPO_NAME']}".downcase! - end - - def initialize(env) - self.repo_url = env["CF_COMMIT_URL"].to_s.gsub(%r{/commit.+$}, "") - self.repo_slug = self.class.slug_from(env) - self.pull_request_id = env["CF_PULL_REQUEST_NUMBER"] - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/codemagic.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/codemagic.rb deleted file mode 100644 index 607bd473..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/codemagic.rb +++ /dev/null @@ -1,58 +0,0 @@ -# https://docs.codemagic.io/building/environment-variables/ - -module Danger - # ### CI Setup - # - # Add a script step to your workflow: - # - # ``` - # - name: Running Danger - # script: | - # bundle install - # bundle exec danger - # ``` - # - # ### Token Setup - # - # Add the following environment variables to your workflow's environment configuration. - # https://docs.codemagic.io/getting-started/yaml/ - # - # #### GitHub - # Add the `DANGER_GITHUB_API_TOKEN` to your build user's ENV. - # - # #### GitLab - # Add the `DANGER_GITLAB_API_TOKEN` to your build user's ENV. - # - # #### Bitbucket Cloud - # Add the `DANGER_BITBUCKETSERVER_USERNAME`, `DANGER_BITBUCKETSERVER_PASSWORD` - # to your build user's ENV. - # - # #### Bitbucket server - # Add the `DANGER_BITBUCKETSERVER_USERNAME`, `DANGER_BITBUCKETSERVER_PASSWORD` - # and `DANGER_BITBUCKETSERVER_HOST` to your build user's ENV. - # - class Codemagic < CI - def self.validates_as_ci?(env) - env.key? "FCI_PROJECT_ID" - end - - def self.validates_as_pr?(env) - return !env["FCI_PULL_REQUEST_NUMBER"].to_s.empty? - end - - def supported_request_sources - @supported_request_sources ||= [ - Danger::RequestSources::GitHub, - Danger::RequestSources::GitLab, - Danger::RequestSources::BitbucketServer, - Danger::RequestSources::BitbucketCloud - ] - end - - def initialize(env) - self.pull_request_id = env["FCI_PULL_REQUEST_NUMBER"] - self.repo_slug = env["FCI_REPO_SLUG"] - self.repo_url = GitRepo.new.origins # Codemagic doesn't provide a repo url env variable for n - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/codeship.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/codeship.rb deleted file mode 100644 index 92485127..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/codeship.rb +++ /dev/null @@ -1,44 +0,0 @@ -# https://semaphoreci.com/docs/available-environment-variables.html -require "danger/request_sources/github/github" - -module Danger - # ### CI Setup - # - # In Codeship, go to your "Project Settings", then add `bundle exec danger` as a test step inside - # one of your pipelines. - # - # ### Token Setup - # - # Add your `DANGER_GITHUB_API_TOKEN` to "Environment" section in "Project Settings". - # - class Codeship < CI - def self.validates_as_ci?(env) - env["CI_NAME"] == "codeship" - end - - def self.validates_as_pr?(env) - return false unless env["CI_BRANCH"] && !env["CI_BRANCH"].empty? - - !pr_from_env(env).nil? - end - - def self.owner_for_github(env) - env["CI_REPO_NAME"].split("/").first - end - - # this is fairly hacky, see https://github.com/danger/danger/pull/892#issuecomment-329030616 for why - def self.pr_from_env(env) - Danger::RequestSources::GitHub.new(nil, env).get_pr_from_branch(env["CI_REPO_NAME"], env["CI_BRANCH"], owner_for_github(env)) - end - - def supported_request_sources - @supported_request_sources ||= [Danger::RequestSources::GitHub] - end - - def initialize(env) - self.repo_slug = env["CI_REPO_NAME"] - self.pull_request_id = self.class.pr_from_env(env) - self.repo_url = GitRepo.new.origins - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/concourse.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/concourse.rb deleted file mode 100644 index f4b5f230..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/concourse.rb +++ /dev/null @@ -1,60 +0,0 @@ -require "git" -require "danger/request_sources/local_only" - -module Danger - # Concourse CI Integration - # - # https://concourse-ci.org/ - # - # ### CI Setup - # - # With Concourse, you run the docker images yourself, so you will want to add `yarn danger ci` within one of your build jobs. - # - # ```shell - # build: - # image: golang - # commands: - # - ... - # - yarn danger ci - # ``` - # - # ### Environment Variable Setup - # - # As this is self-hosted, you will need to add the `CONCOURSE` environment variable `export CONCOURSE=true` to your build environment, - # as well as setting environment variables for `PULL_REQUEST_ID` and `REPO_SLUG`. Assuming you are using the github pull request resource - # https://github.com/jtarchie/github-pullrequest-resource the id of the PR can be accessed from `git config --get pullrequest.id`. - # - # ### Token Setup - # - # Once again as this is self-hosted, you will need to add `DANGER_GITHUB_API_TOKEN` environment variable to the build environment. - # The suggested method of storing the token is within the vault - https://concourse-ci.org/creds.html - - class Concourse < CI - def self.validates_as_ci?(env) - env.key? "CONCOURSE" - end - - def self.validates_as_pr?(env) - exists = ["PULL_REQUEST_ID", "REPO_SLUG"].all? { |x| env[x] && !env[x].empty? } - exists && env["PULL_REQUEST_ID"].to_i > 0 - end - - def supported_request_sources - @supported_request_sources ||= [ - Danger::RequestSources::GitHub, - Danger::RequestSources::GitLab, - Danger::RequestSources::BitbucketServer, - Danger::RequestSources::BitbucketCloud - ] - end - - def initialize(env) - self.repo_slug = env["REPO_SLUG"] - - if env["PULL_REQUEST_ID"].to_i > 0 - self.pull_request_id = env["PULL_REQUEST_ID"] - end - self.repo_url = GitRepo.new.origins - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/custom_ci_with_github.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/custom_ci_with_github.rb deleted file mode 100644 index c8f9c5a9..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/custom_ci_with_github.rb +++ /dev/null @@ -1,49 +0,0 @@ -# frozen_string_literal: true - -require "danger/request_sources/github/github" - -module Danger - # ### CI Setup - # - # Custom CI with GitHub - # - # This CI source is for custom, most likely internal, CI systems that are use GitHub as source control. - # An example could be argo-workflows or tekton hosted in your own Kubernetes cluster. - # - # The following environment variables are required: - # - `CUSTOM_CI_WITH_GITHUB` - Set to any value to indicate that this is a custom CI with GitHub - # - # ### Token Setup - # - # #### GitHub - # As you own the setup, it's up to you to add the environment variable for the `DANGER_GITHUB_API_TOKEN`. - # - class CustomCIWithGithub < CI - def self.validates_as_ci?(env) - env.key? "CUSTOM_CI_WITH_GITHUB" - end - - def self.validates_as_pr?(env) - value = env["GITHUB_EVENT_NAME"] - ["pull_request", "pull_request_target"].include?(value) - end - - def supported_request_sources - @supported_request_sources ||= [Danger::RequestSources::GitHub] - end - - def initialize(env) - super - - self.repo_slug = env["GITHUB_REPOSITORY"] - pull_request_event = JSON.parse(File.read(env["GITHUB_EVENT_PATH"])) - self.pull_request_id = pull_request_event["number"] - self.repo_url = pull_request_event["repository"]["clone_url"] - - # if environment variable DANGER_GITHUB_API_TOKEN is not set, use env GITHUB_TOKEN - if (env.key? "CUSTOM_CI_WITH_GITHUB") && (!env.key? "DANGER_GITHUB_API_TOKEN") - env["DANGER_GITHUB_API_TOKEN"] = env["GITHUB_TOKEN"] - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/dotci.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/dotci.rb deleted file mode 100644 index 254528f7..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/dotci.rb +++ /dev/null @@ -1,50 +0,0 @@ -require "danger/request_sources/github/github" - -module Danger - # https://groupon.github.io/DotCi - - # ### CI Setup - # DotCi is a layer on top of jenkins. So, if you're using DotCi, you're hosting your own environment. - # - # ### Token Setup - # - # #### GitHub - # As you own the machine, it's up to you to add the environment variable for the `DANGER_GITHUB_API_TOKEN`. - # - class DotCi < CI - def self.validates_as_ci?(env) - env.key? "DOTCI" - end - - def self.validates_as_pr?(env) - !env["DOTCI_PULL_REQUEST"].nil? && !env["DOTCI_PULL_REQUEST"].match(/^[0-9]+$/).nil? - end - - def supported_request_sources - @supported_request_sources ||= [ - Danger::RequestSources::GitHub - ] - end - - def initialize(env) - self.repo_url = self.class.repo_url(env) - self.pull_request_id = self.class.pull_request_id(env) - repo_matches = self.repo_url.match(%r{([/:])([^/]+/[^/]+)$}) - self.repo_slug = repo_matches[2].gsub(/\.git$/, "") unless repo_matches.nil? - end - - def self.pull_request_id(env) - env["DOTCI_PULL_REQUEST"] - end - - def self.repo_url(env) - if env["DOTCI_INSTALL_PACKAGES_GIT_CLONE_URL"] - env["DOTCI_INSTALL_PACKAGES_GIT_CLONE_URL"] - elsif env["DOTCI_DOCKER_COMPOSE_GIT_CLONE_URL"] - env["DOTCI_DOCKER_COMPOSE_GIT_CLONE_URL"] - else - env["GIT_URL"] - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/drone.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/drone.rb deleted file mode 100644 index 33fac2a2..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/drone.rb +++ /dev/null @@ -1,71 +0,0 @@ -# http://readme.drone.io/usage/variables/ -require "danger/request_sources/github/github" -require "danger/request_sources/gitlab" - -module Danger - # ### CI Setup - # - # With Drone you run the docker images yourself, so you will want to add `bundle exec danger` at the end of - # your `.drone.yml`. - # - # ```shell - # build: - # image: golang - # commands: - # - ... - # - bundle exec danger - # ``` - # - # ### Token Setup - # - # As this is self-hosted, you will need to expose the `DANGER_GITHUB_API_TOKEN` as a secret to your - # builds: - # - # Drone secrets: http://readme.drone.io/usage/secret-guide/ - # NOTE: This is a new syntax in DroneCI 0.6+ - # - # ```yml - # build: - # image: golang - # secrets: - # - DANGER_GITHUB_API_TOKEN - # commands: - # - ... - # - bundle exec danger - # ``` - class Drone < CI - def self.validates_as_ci?(env) - validates_as_ci_post_06?(env) or validates_as_ci_pre_06?(env) - end - - def self.validates_as_pr?(env) - env["DRONE_PULL_REQUEST"].to_i > 0 - end - - def supported_request_sources - @supported_request_sources ||= [Danger::RequestSources::GitHub, Danger::RequestSources::GitLab] - end - - def initialize(env) - if self.class.validates_as_ci_post_06?(env) - self.repo_slug = "#{env['DRONE_REPO_OWNER']}/#{env['DRONE_REPO_NAME']}" - self.repo_url = env["DRONE_REPO_LINK"] if self.class.validates_as_ci_post_06?(env) - elsif self.class.validates_as_ci_pre_06?(env) - self.repo_slug = env["DRONE_REPO"] - self.repo_url = GitRepo.new.origins - end - - self.pull_request_id = env["DRONE_PULL_REQUEST"] - end - - # Check if this build is valid for CI with drone 0.6 or later - def self.validates_as_ci_post_06?(env) - env.key? "DRONE_REPO_OWNER" and env.key? "DRONE_REPO_NAME" - end - - # Checks if this build is valid for CI with drone 0.5 or earlier - def self.validates_as_ci_pre_06?(env) - env.key? "DRONE_REPO" - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/github_actions.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/github_actions.rb deleted file mode 100644 index 24c2e873..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/github_actions.rb +++ /dev/null @@ -1,44 +0,0 @@ -require "danger/request_sources/github/github" - -module Danger - # ### CI Setup - # - # You can use `danger/danger` Action in your `.github/workflows/xxx.yml`. - # And so, you can use GITHUB_TOKEN secret as `DANGER_GITHUB_API_TOKEN` environment variable. - # - # ```yml - # ... - # steps: - # - uses: actions/checkout@v3 - # - uses: danger/danger@master - # env: - # DANGER_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }} - # ``` - # - class GitHubActions < CI - def self.validates_as_ci?(env) - env.key? "GITHUB_ACTION" - end - - def self.validates_as_pr?(env) - value = env["GITHUB_EVENT_NAME"] - ["pull_request", "pull_request_target"].include?(value) - end - - def supported_request_sources - @supported_request_sources ||= [Danger::RequestSources::GitHub] - end - - def initialize(env) - self.repo_slug = env["GITHUB_REPOSITORY"] - pull_request_event = JSON.parse(File.read(env["GITHUB_EVENT_PATH"])) - self.pull_request_id = pull_request_event["number"] - self.repo_url = pull_request_event["repository"]["clone_url"] - - # if environment variable DANGER_GITHUB_API_TOKEN is not set, use env GITHUB_TOKEN - if (env.key? "GITHUB_ACTION") && (!env.key? "DANGER_GITHUB_API_TOKEN") - env["DANGER_GITHUB_API_TOKEN"] = env["GITHUB_TOKEN"] - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/gitlab_ci.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/gitlab_ci.rb deleted file mode 100644 index b35e22e9..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/gitlab_ci.rb +++ /dev/null @@ -1,89 +0,0 @@ -# http://docs.gitlab.com/ce/ci/variables/README.html -require "uri" -require "danger/request_sources/github/github" -require "danger/request_sources/gitlab" - -module Danger - # ### CI Setup - # - # Install dependencies and add a danger step to your .gitlab-ci.yml: - # - # ```yml - # before_script: - # - bundle install - # danger: - # script: - # - bundle exec danger - # ``` - # - # ### Token Setup - # - # Add the `DANGER_GITLAB_API_TOKEN` to your pipeline env variables if you - # are hosting your code on GitLab. If you are using GitLab as a mirror - # for the purpose of CI/CD, while hosting your repo on GitHub, set the - # `DANGER_GITHUB_API_TOKEN` as well as the project repo URL to - # `DANGER_PROJECT_REPO_URL`. - - class GitLabCI < CI - def self.validates_as_ci?(env) - env.key? "GITLAB_CI" - end - - def self.validates_as_pr?(env) - exists = [ - "GITLAB_CI", "CI_PROJECT_PATH" - ].all? { |x| env[x] } - - exists && determine_pull_or_merge_request_id(env).to_i > 0 - end - - def self.determine_pull_or_merge_request_id(env) - return env["CI_MERGE_REQUEST_IID"] if env["CI_MERGE_REQUEST_IID"] - return env["CI_EXTERNAL_PULL_REQUEST_IID"] if env["CI_EXTERNAL_PULL_REQUEST_IID"] - return 0 unless env["CI_COMMIT_SHA"] - - project_path = env["CI_MERGE_REQUEST_PROJECT_PATH"] || env["CI_PROJECT_PATH"] - base_commit = env["CI_COMMIT_SHA"] - client = RequestSources::GitLab.new(nil, env).client - - client_version = Gem::Version.new(client.version.version) - if client_version >= Gem::Version.new("10.7") - # Use the 'list merge requests associated with a commit' API, for speed - # (GET /projects/:id/repository/commits/:sha/merge_requests) available for GitLab >= 10.7 - merge_request = client.commit_merge_requests(project_path, base_commit, state: :opened).first - if client_version >= Gem::Version.new("13.8") - # Gitlab 13.8.0 started returning merge requests for merge commits and squashed commits - # By checking for merge_request.state, we can ensure danger only comments on MRs which are open - return 0 if merge_request.nil? - return 0 unless merge_request.state == "opened" - end - else - merge_requests = client.merge_requests(project_path, state: :opened) - merge_request = merge_requests.auto_paginate.find do |mr| - mr.sha == base_commit - end - end - merge_request.nil? ? 0 : merge_request.iid - end - - def self.slug_from(env) - if env["DANGER_PROJECT_REPO_URL"] - env["DANGER_PROJECT_REPO_URL"].split("/").last(2).join("/") - else - env["CI_MERGE_REQUEST_PROJECT_PATH"] || env["CI_PROJECT_PATH"] - end - end - - def initialize(env) - self.repo_slug = self.class.slug_from(env) - self.pull_request_id = self.class.determine_pull_or_merge_request_id(env) - end - - def supported_request_sources - @supported_request_sources ||= [ - Danger::RequestSources::GitHub, - Danger::RequestSources::GitLab - ] - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/jenkins.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/jenkins.rb deleted file mode 100644 index a6869ccd..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/jenkins.rb +++ /dev/null @@ -1,148 +0,0 @@ -# https://wiki.jenkins-ci.org/display/JENKINS/Building+a+software+project#Buildingasoftwareproject-JenkinsSetEnvironmentVariables -# https://wiki.jenkins-ci.org/display/JENKINS/GitHub+pull+request+builder+plugin -require "danger/request_sources/github/github" -require "danger/request_sources/gitlab" -require "danger/request_sources/bitbucket_server" -require "danger/request_sources/bitbucket_cloud" - -module Danger - # https://jenkins-ci.org - - # ### CI Setup - # Ah Jenkins, so many memories. So, if you're using Jenkins, you're hosting your own environment. - # - # #### GitHub - # You will want to be using the [GitHub pull request builder plugin](https://wiki.jenkins-ci.org/display/JENKINS/GitHub+pull+request+builder+plugin) - # in order to ensure that you have the build environment set up for PR integration. - # - # With that set up, you can edit your job to add `bundle exec danger` at the build action. - # - # ##### Pipeline - # If your're using [pipelines](https://jenkins.io/solutions/pipeline/) you should be using the [GitHub branch source plugin](https://wiki.jenkins-ci.org/display/JENKINS/GitHub+Branch+Source+Plugin) - # for easy setup and handling of PRs. - # - # After you've set up the plugin, add a `sh 'bundle exec danger'` line in your pipeline script and make sure that build PRs is enabled. - # - # #### GitLab - # You will want to be using the [GitLab Plugin](https://github.com/jenkinsci/gitlab-plugin) - # in order to ensure that you have the build environment set up for MR integration. - # - # With that set up, you can edit your job to add `bundle exec danger` at the build action. - # - # #### General - # - # People occasionally see issues with Danger not classing your CI runs as a PR, to give you visibility - # the Jenkins side of Danger expects to see one of these env vars: - # - ghprbPullId - # - CHANGE_ID - # - gitlabMergeRequestIid - # - gitlabMergeRequestId - # - # ### Token Setup - # - # #### GitHub - # As you own the machine, it's up to you to add the environment variable for the `DANGER_GITHUB_API_TOKEN`. - # - # #### GitLab - # As you own the machine, it's up to you to add the environment variable for the `DANGER_GITLAB_API_TOKEN`. - # - class Jenkins < CI - attr_accessor :project_url - - class EnvNotFound < StandardError - def initialize - super("ENV not found, please check your Jenkins. Related: https://stackoverflow.com/search?q=jenkins+env+null") - end - end - - def self.validates_as_ci?(env) - env.key? "JENKINS_URL" - end - - def self.validates_as_pr?(env) - id = pull_request_id(env) - !id.nil? && !id.empty? && !!id.match(/^\d+$/) - end - - def supported_request_sources - @supported_request_sources ||= [ - Danger::RequestSources::GitHub, - Danger::RequestSources::GitLab, - Danger::RequestSources::BitbucketServer, - Danger::RequestSources::BitbucketCloud - ] - end - - def initialize(env) - raise EnvNotFound.new if env.nil? || env.empty? - - self.repo_url = self.class.repo_url(env) - self.pull_request_id = self.class.pull_request_id(env) - self.repo_slug = self.class.repo_slug(self.repo_url) - self.project_url = env["CI_MERGE_REQUEST_PROJECT_URL"] || env["CI_PROJECT_URL"] - end - - def self.repo_slug(repo_url) - slug = self.slug_ssh(repo_url) - slug ||= self.slug_http(repo_url) - slug ||= self.slug_bitbucket(repo_url) - slug ||= self.slug_fallback(repo_url) - return slug.gsub(/\.git$/, "") unless slug.nil? - end - - def self.slug_bitbucket(repo_url) - repo_matches = repo_url.match(%r{(?:[/:])projects/([^/.]+)/repos/([^/.]+)}) - return "#{repo_matches[1]}/#{repo_matches[2]}" if repo_matches - end - - def self.slug_ssh(repo_url) - repo_matches = repo_url.match(/^git@.+:(.+)/) - return repo_matches[1] if repo_matches - end - - def self.slug_http(repo_url) - repo_matches = repo_url.match(%r{^https?.+(?>\.\w*\d*/)(.+.git$)}) - return repo_matches[1] if repo_matches - end - - def self.slug_fallback(repo_url) - repo_matches = repo_url.match(%r{([/:])([^/]+/[^/]+)$}) - return repo_matches[2] - end - - def self.pull_request_id(env) - if env["ghprbPullId"] - env["ghprbPullId"] - elsif env["CHANGE_ID"] - env["CHANGE_ID"] - elsif env["gitlabMergeRequestIid"] - env["gitlabMergeRequestIid"] - else - env["gitlabMergeRequestId"] - end - end - - def self.repo_url(env) - if env["GIT_URL_1"] - env["GIT_URL_1"] - elsif env["CHANGE_URL"] - change_url = env["CHANGE_URL"] - case change_url - when %r{/pull/} # GitHub - matches = change_url.match(%r{(.+)/pull/[0-9]+}) - matches[1] unless matches.nil? - when %r{/merge_requests/} # GitLab - matches = change_url.match(%r{(.+?)(/-)?/merge_requests/[0-9]+}) - matches[1] unless matches.nil? - when %r{/pull-requests/} # Bitbucket - matches = change_url.match(%r{(.+)/pull-requests/[0-9]+}) - matches[1] unless matches.nil? - else - change_url - end - else - env["GIT_URL"] - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/local_git_repo.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/local_git_repo.rb deleted file mode 100644 index 430e7701..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/local_git_repo.rb +++ /dev/null @@ -1,117 +0,0 @@ -# frozen_string_literal: true - -# For more info see: https://github.com/schacon/ruby-git - -require "git" -require "uri" - -require "danger/request_sources/github/github" - -require "danger/ci_source/support/find_repo_info_from_url" -require "danger/ci_source/support/find_repo_info_from_logs" -require "danger/ci_source/support/no_repo_info" -require "danger/ci_source/support/pull_request_finder" -require "danger/ci_source/support/commits" - -module Danger - # ignore - class LocalGitRepo < CI - attr_accessor :base_commit, :head_commit - - def self.validates_as_ci?(env) - env.key? "DANGER_USE_LOCAL_GIT" - end - - def self.validates_as_pr?(_env) - false - end - - def git - @git ||= GitRepo.new - end - - def run_git(command) - git.exec(command).encode("UTF-8", "binary", invalid: :replace, undef: :replace, replace: "") - end - - def supported_request_sources - @supported_request_sources ||= [ - Danger::RequestSources::GitHub, - Danger::RequestSources::BitbucketServer, - Danger::RequestSources::BitbucketCloud, - Danger::RequestSources::VSTS - ] - end - - def initialize(env = {}) - @remote_info = find_remote_info(env) - @found_pull_request = find_pull_request(env) - self.repo_slug = remote_info.slug - raise_error_for_missing_remote if remote_info.kind_of?(NoRepoInfo) - - self.pull_request_id = found_pull_request.pull_request_id - - if sha - self.base_commit = commits.base - self.head_commit = commits.head - else - self.base_commit = found_pull_request.base - self.head_commit = found_pull_request.head - end - end - - private - - attr_reader :remote_info, :found_pull_request - - def raise_error_for_missing_remote - raise missing_remote_error_message - end - - def missing_remote_error_message - "danger cannot find your git remote, please set a remote. " \ - "And the repository must host on GitHub.com or GitHub Enterprise." - end - - def find_remote_info(env) - if given_pull_request_url?(env) - FindRepoInfoFromURL.new(env["LOCAL_GIT_PR_URL"]).call - else - FindRepoInfoFromLogs.new( - env["DANGER_GITHUB_HOST"] || "github.com", - run_git("remote show origin -n") - ).call - end || NoRepoInfo.new - end - - def find_pull_request(env) - if given_pull_request_url?(env) - PullRequestFinder.new( - remote_info.id, - remote_info.slug, - remote: true, - remote_url: env["LOCAL_GIT_PR_URL"] - ).call(env: env) - else - PullRequestFinder.new( - env.fetch("LOCAL_GIT_PR_ID") { "" }, - remote_info.slug, - remote: false, - git_logs: run_git("log --oneline -1000000") - ).call(env: env) - end - end - - def given_pull_request_url?(env) - env["LOCAL_GIT_PR_URL"] && !env["LOCAL_GIT_PR_URL"].empty? - end - - def sha - @_sha ||= found_pull_request.sha - end - - def commits - @_commits ||= Commits.new(run_git("rev-list --parents -n 1 #{sha}")) - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/local_only_git_repo.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/local_only_git_repo.rb deleted file mode 100644 index 36a18689..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/local_only_git_repo.rb +++ /dev/null @@ -1,44 +0,0 @@ -# frozen_string_literal: true - -require "git" -require "danger/request_sources/local_only" - -module Danger - # ### CI Setup - # - # For setting up LocalOnlyGitRepo there is not much needed. Either `--base` and `--head` need to be specified or - # origin/master is expected for base and HEAD for head - # - class LocalOnlyGitRepo < CI - attr_accessor :base_commit, :head_commit - - HEAD_VAR = "DANGER_LOCAL_HEAD" - BASE_VAR = "DANGER_LOCAL_BASE" - - def self.validates_as_ci?(env) - env.key? "DANGER_USE_LOCAL_ONLY_GIT" - end - - def self.validates_as_pr?(_env) - false - end - - def git - @git ||= GitRepo.new - end - - def run_git(command) - git.exec(command).encode("UTF-8", "binary", invalid: :replace, undef: :replace, replace: "") - end - - def supported_request_sources - @supported_request_sources ||= [Danger::RequestSources::LocalOnly] - end - - def initialize(env = {}) - # expects --base/--head specified OR origin/master to be base and HEAD head - self.base_commit = env[BASE_VAR] || run_git("rev-parse --abbrev-ref origin/master") - self.head_commit = env[HEAD_VAR] || run_git("rev-parse --abbrev-ref HEAD") - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/screwdriver.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/screwdriver.rb deleted file mode 100644 index 3079cbdc..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/screwdriver.rb +++ /dev/null @@ -1,48 +0,0 @@ -# http://screwdriver.cd -# https://docs.screwdriver.cd/user-guide/environment-variables -require "danger/request_sources/github/github" - -module Danger - # ### CI Setup - # - # Install dependencies and add a danger step to your screwdriver.yaml: - # - # ```yml - # jobs: - # danger: - # requires: [~pr, ~commit] - # steps: - # - setup: bundle install --path vendor - # - danger: bundle exec danger - # secrets: - # - DANGER_GITHUB_API_TOKEN - # ``` - # - # ### Token Setup - # - # Add the `DANGER_GITHUB_API_TOKEN` to your pipeline env as a - # [build secret](https://docs.screwdriver.cd/user-guide/configuration/secrets) - # - class Screwdriver < CI - def self.validates_as_ci?(env) - env.key? "SCREWDRIVER" - end - - def self.validates_as_pr?(env) - exists = ["SD_PULL_REQUEST", "SCM_URL"].all? { |x| env[x] && !env[x].empty? } - exists && env["SD_PULL_REQUEST"].to_i > 0 - end - - def supported_request_sources - @supported_request_sources ||= [Danger::RequestSources::GitHub] - end - - def initialize(env) - self.repo_slug = env["SCM_URL"].split(":").last.gsub(".git", "").split("#", 2).first - self.repo_url = env["SCM_URL"].split("#", 2).first - if env["SD_PULL_REQUEST"].to_i > 0 - self.pull_request_id = env["SD_PULL_REQUEST"] - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/semaphore.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/semaphore.rb deleted file mode 100644 index 42250401..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/semaphore.rb +++ /dev/null @@ -1,37 +0,0 @@ -# https://docs.semaphoreci.com/article/12-environment-variables -require "danger/request_sources/github/github" - -module Danger - # ### CI Setup - # - # For Semaphore you will want to go to the settings page of the project. Inside "Build Settings" - # you should add `bundle exec danger` to the Setup thread. Note that Semaphore only provides - # the build environment variables necessary for Danger on PRs across forks. - # - # ### Token Setup - # - # You can add your `DANGER_GITHUB_API_TOKEN` inside the "Environment Variables" section in the settings. - # - class Semaphore < CI - def self.validates_as_ci?(env) - env.key? "SEMAPHORE" - end - - def self.validates_as_pr?(env) - one = ["SEMAPHORE_REPO_SLUG", "PULL_REQUEST_NUMBER"].all? { |x| env[x] && !env[x].empty? } - two = ["SEMAPHORE_GIT_REPO_SLUG", "SEMAPHORE_GIT_PR_NUMBER"].all? { |x| env[x] && !env[x].empty? } - - one || two - end - - def supported_request_sources - @supported_request_sources ||= [Danger::RequestSources::GitHub] - end - - def initialize(env) - self.repo_slug = env["SEMAPHORE_GIT_REPO_SLUG"] || env["SEMAPHORE_REPO_SLUG"] - self.pull_request_id = env["SEMAPHORE_GIT_PR_NUMBER"] || env["PULL_REQUEST_NUMBER"] - self.repo_url = env["SEMAPHORE_GIT_URL"] || GitRepo.new.origins - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/support/commits.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/support/commits.rb deleted file mode 100644 index d0c3c39a..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/support/commits.rb +++ /dev/null @@ -1,19 +0,0 @@ -module Danger - class Commits - def initialize(base_head) - @base_head = base_head.strip.split(" ".freeze) - end - - def base - base_head.first - end - - def head - base_head.last - end - - private - - attr_reader :base_head - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/support/find_repo_info_from_logs.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/support/find_repo_info_from_logs.rb deleted file mode 100644 index 048b4f39..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/support/find_repo_info_from_logs.rb +++ /dev/null @@ -1,35 +0,0 @@ -require "danger/ci_source/support/repo_info" - -module Danger - class FindRepoInfoFromLogs - def initialize(github_host, remote_logs) - @github_host = github_host - @remote_logs = remote_logs - end - - def call - matched = remote.match(regexp) - - if matched - RepoInfo.new(matched["repo_slug"], nil) - end - end - - private - - attr_reader :remote_logs, :github_host - - def remote - remote_logs.lines.grep(/Fetch URL/)[0].split(": ".freeze, 2)[1] - end - - def regexp - %r{ - #{Regexp.escape(github_host)} - (:|/|(:/)) - (?[^/]+/.+?) - (?:\.git)?$ - }x - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/support/find_repo_info_from_url.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/support/find_repo_info_from_url.rb deleted file mode 100644 index 00597a6e..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/support/find_repo_info_from_url.rb +++ /dev/null @@ -1,43 +0,0 @@ -require "danger/ci_source/support/repo_info" - -module Danger - class FindRepoInfoFromURL - REGEXP = %r{ - ://[^/]+/ - (([^/]+/){1,2}_git/)? - (?[^/]+(/[^/]+){0,2}) - (/(pull|pullrequest|merge_requests|pull-requests)/) - (?\d+) - }x.freeze - - # Regex used to extract info from Bitbucket server URLs, as they use a quite different format - REGEXPBB = %r{ - (?:[/:])projects - /([^/.]+) - /repos/([^/.]+) - /pull-requests - /(\d+) - }x.freeze - - def initialize(url) - @url = url - end - - def call - matched = url.match(REGEXPBB) - - if matched - RepoInfo.new("#{matched[1]}/#{matched[2]}", matched[3]) - else - matched = url.match(REGEXP) - if matched - RepoInfo.new(matched[:slug], matched[:id]) - end - end - end - - private - - attr_reader :url - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/support/local_pull_request.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/support/local_pull_request.rb deleted file mode 100644 index 37f9be16..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/support/local_pull_request.rb +++ /dev/null @@ -1,14 +0,0 @@ -module Danger - class LocalPullRequest - attr_reader :pull_request_id, :sha - - def initialize(log_line) - @pull_request_id = log_line.match(/#(?[0-9]+)/)[:id] - @sha = log_line.split(" ".freeze).first - end - - def valid? - pull_request_id && sha - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/support/no_pull_request.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/support/no_pull_request.rb deleted file mode 100644 index 92846bc3..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/support/no_pull_request.rb +++ /dev/null @@ -1,7 +0,0 @@ -module Danger - class NoPullRequest - def valid? - false - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/support/no_repo_info.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/support/no_repo_info.rb deleted file mode 100644 index 43c2efb9..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/support/no_repo_info.rb +++ /dev/null @@ -1,5 +0,0 @@ -module Danger - class NoRepoInfo - attr_reader :slug, :id - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/support/pull_request_finder.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/support/pull_request_finder.rb deleted file mode 100644 index e8f20193..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/support/pull_request_finder.rb +++ /dev/null @@ -1,190 +0,0 @@ -# frozen_string_literal: true - -require "danger/ci_source/support/local_pull_request" -require "danger/ci_source/support/remote_pull_request" -require "danger/ci_source/support/no_pull_request" - -module Danger - class PullRequestFinder - def initialize(specific_pull_request_id, repo_slug = nil, remote: false, git_logs: "", remote_url: "") - @specific_pull_request_id = specific_pull_request_id - @git_logs = git_logs - @repo_slug = repo_slug - @remote = to_boolean(remote) - @remote_url = remote_url - end - - def call(env: nil) - find_pull_request(env).tap do |pull_request| - raise_pull_request_not_found!(pull_request) unless pull_request.valid? - end - end - - private - - attr_reader :specific_pull_request_id, :git_logs, :repo_slug, :remote, :remote_url - - def to_boolean(maybe_string) - ["true", "1", "yes", "y", true].include?(maybe_string) - end - - def raise_pull_request_not_found!(_pull_request) - if specific_pull_request_id.empty? - raise "No recent Pull Requests found for this repo, danger requires at least one Pull Request for the local mode." - else - raise "Could not find the Pull Request (#{specific_pull_request_id}) inside the git history for this repo." - end - end - - # @return [String] Log line of most recent merged Pull Request - def find_pull_request(env) - return if pull_request_ref.empty? - - if both_present? - LocalPullRequest.new(pick_the_most_recent_one_from_two_matches) - elsif only_merged_pull_request_present? - LocalPullRequest.new(most_recent_merged_pull_request) - elsif only_squash_and_merged_pull_request_present? - LocalPullRequest.new(most_recent_squash_and_merged_pull_request) - elsif remote - remote_pull_request = find_remote_pull_request(env) - remote_pull_request ? generate_remote_pull_request(remote_pull_request) : NoPullRequest.new - else - NoPullRequest.new - end - end - - # @return [String] "#42" - def pull_request_ref - !specific_pull_request_id.empty? ? "##{specific_pull_request_id}" : "#\\d+" - end - - def generate_remote_pull_request(remote_pull_request) - scm_provider = find_scm_provider(remote_url) - - case scm_provider - when :bitbucket_cloud - RemotePullRequest.new( - remote_pull_request[:id].to_s, - remote_pull_request[:source][:commit][:hash], - remote_pull_request[:destination][:commit][:hash] - ) - when :bitbucket_server - RemotePullRequest.new( - remote_pull_request[:id].to_s, - remote_pull_request[:fromRef][:latestCommit], - remote_pull_request[:toRef][:latestCommit] - ) - when :github - RemotePullRequest.new( - remote_pull_request.number.to_s, - remote_pull_request.head.sha, - remote_pull_request.base.sha - ) - when :vsts - RemotePullRequest.new( - remote_pull_request[:pullRequestId].to_s, - remote_pull_request[:lastMergeSourceCommit][:commitId], - remote_pull_request[:lastMergeTargetCommit][:commitId] - ) - else - raise "SCM provider not supported: #{scm_provider}" - end - end - - def find_remote_pull_request(env) - client(env).pull_request(repo_slug, specific_pull_request_id) - end - - def both_present? - most_recent_merged_pull_request && most_recent_squash_and_merged_pull_request - end - - # @return [String] Log line of format: "Merge pull request #42" - def most_recent_merged_pull_request - @most_recent_merged_pull_request ||= git_logs.lines.grep(/Merge pull request #{pull_request_ref} from/)[0] - end - - # @return [String] Log line of format: "description (#42)" - def most_recent_squash_and_merged_pull_request - @most_recent_squash_and_merged_pull_request ||= git_logs.lines.grep(/\(#{pull_request_ref}\)/)[0] - end - - def pick_the_most_recent_one_from_two_matches - merged_index = git_logs.lines.index(most_recent_merged_pull_request) - squash_and_merged_index = git_logs.lines.index(most_recent_squash_and_merged_pull_request) - - if merged_index > squash_and_merged_index # smaller index is more recent - most_recent_squash_and_merged_pull_request - else - most_recent_merged_pull_request - end - end - - def only_merged_pull_request_present? - return false if most_recent_squash_and_merged_pull_request - - !most_recent_merged_pull_request.nil? && !most_recent_merged_pull_request.empty? - end - - def only_squash_and_merged_pull_request_present? - return false if most_recent_merged_pull_request - - !most_recent_squash_and_merged_pull_request.nil? && !most_recent_squash_and_merged_pull_request.empty? - end - - def client(env) - scm_provider = find_scm_provider(remote_url) - - case scm_provider - when :bitbucket_cloud - require "danger/request_sources/bitbucket_cloud_api" - branch_name = ENV["DANGER_BITBUCKET_TARGET_BRANCH"] # Optional env variable (specifying the target branch) to help find the PR. - RequestSources::BitbucketCloudAPI.new(repo_slug, specific_pull_request_id, branch_name, env) - - when :bitbucket_server - require "danger/request_sources/bitbucket_server_api" - project, slug = repo_slug.split("/") - RequestSources::BitbucketServerAPI.new(project, slug, specific_pull_request_id, env) - - when :vsts - require "danger/request_sources/vsts_api" - RequestSources::VSTSAPI.new(repo_slug, specific_pull_request_id, env) - - when :github - require "octokit" - access_token = ENV["DANGER_GITHUB_API_TOKEN"] - bearer_token = ENV["DANGER_GITHUB_BEARER_TOKEN"] - if bearer_token && !bearer_token.empty? - Octokit::Client.new(bearer_token: bearer_token, api_endpoint: api_url) - elsif access_token && !access_token.empty? - Octokit::Client.new(access_token: access_token, api_endpoint: api_url) - else - raise "No API token given, please provide one using `DANGER_GITHUB_API_TOKEN` or `DANGER_GITHUB_BEARER_TOKEN`" - end - else - raise "SCM provider not supported: #{scm_provider}" - end - end - - def api_url - ENV.fetch("DANGER_GITHUB_API_HOST") do - ENV.fetch("DANGER_GITHUB_API_BASE_URL") do - "https://api.github.com/" - end - end - end - - def find_scm_provider(remote_url) - if remote_url =~ %r{/bitbucket.org/} - :bitbucket_cloud - elsif remote_url =~ %r{/pull-requests/} - :bitbucket_server - elsif remote_url =~ /\.visualstudio\.com/i || remote_url =~ /dev\.azure\.com/i - :vsts - else - :github - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/support/remote_pull_request.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/support/remote_pull_request.rb deleted file mode 100644 index fce85901..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/support/remote_pull_request.rb +++ /dev/null @@ -1,15 +0,0 @@ -module Danger - class RemotePullRequest - attr_reader :pull_request_id, :sha, :head, :base - - def initialize(pull_request_id, head, base) - @pull_request_id = pull_request_id - @head = head - @base = base - end - - def valid? - pull_request_id && head && base - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/support/repo_info.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/support/repo_info.rb deleted file mode 100644 index 68cbbd63..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/support/repo_info.rb +++ /dev/null @@ -1,10 +0,0 @@ -module Danger - class RepoInfo - attr_reader :slug, :id - - def initialize(slug, id) - @slug = slug - @id = id - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/surf.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/surf.rb deleted file mode 100644 index 99e4c109..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/surf.rb +++ /dev/null @@ -1,37 +0,0 @@ -# http://github.com/surf-build/surf -require "danger/request_sources/github/github" - -module Danger - # ### CI Setup - # - # You want to add `bundle exec danger` to your `build.sh` file to run Danger at the - # end of your build. - # - # ### Token Setup - # - # As this is self-hosted, you will need to add the `DANGER_GITHUB_API_TOKEN` to your build user's ENV. The alternative - # is to pass in the token as a prefix to the command `DANGER_GITHUB_API_TOKEN="123" bundle exec danger`. - # - class Surf < CI - def self.validates_as_ci?(env) - return ["SURF_REPO", "SURF_NWO"].all? { |x| env[x] && !env[x].empty? } - end - - def self.validates_as_pr?(env) - validates_as_ci?(env) - end - - def supported_request_sources - @supported_request_sources ||= [Danger::RequestSources::GitHub] - end - - def initialize(env) - self.repo_slug = env["SURF_NWO"] - if env["SURF_PR_NUM"].to_i > 0 - self.pull_request_id = env["SURF_PR_NUM"] - end - - self.repo_url = env["SURF_REPO"] - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/teamcity.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/teamcity.rb deleted file mode 100644 index 32d7f3fb..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/teamcity.rb +++ /dev/null @@ -1,163 +0,0 @@ -# https://www.jetbrains.com/teamcity/ -require "danger/request_sources/github/github" -require "danger/request_sources/gitlab" - -module Danger - # ### CI Setup - # - # You need to go to your project settings. Then depending on the type of your build settings, you may need - # to add a new build step for Danger. You want to be able to run the command `bundle exec danger`, so - # the "Simple Command Runner" should be all you need to do that. - # - # ### Token + Environment Setup - # - # #### GitHub - # - # As this is self-hosted, you will need to add the `DANGER_GITHUB_API_TOKEN` to your build user's ENV. The alternative - # is to pass in the token as a prefix to the command `DANGER_GITHUB_API_TOKEN="123" bundle exec danger`. - # - # However, you will need to find a way to add the environment vars: `GITHUB_REPO_SLUG`, `GITHUB_PULL_REQUEST_ID` and - # `GITHUB_REPO_URL`. These are not added by default. You can manually add `GITHUB_REPO_SLUG` and `GITHUB_REPO_URL` - # as build parameters or by exporting them inside your Simple Command Runner. - # - # As for `GITHUB_PULL_REQUEST_ID`, TeamCity provides the `%teamcity.build.branch%` variable which is in the format - # `PR_NUMBER/merge`. You can slice the Pull Request ID out by doing the following: - # - # ```sh - # branch="%teamcity.build.branch%" - # export GITHUB_PULL_REQUEST_ID=(${branch//\// }) - # ``` - # - # Or if you are using the pull request feature you can set an environment parameter called `GITHUB_PULL_REQUEST_ID` - # to the value of: `%teamcity.pullRequest.number` - # - # #### GitLab - # - # As this is self-hosted, you will need to add the `DANGER_GITLAB_API_TOKEN` to your build user's ENV. The alternative - # is to pass in the token as a prefix to the command `DANGER_GITLAB_API_TOKEN="123" bundle exec danger`. - # - # However, you will need to find a way to add the environment vars: `GITLAB_REPO_SLUG`, `GITLAB_PULL_REQUEST_ID` and - # `GITLAB_REPO_URL`. These are not added by default. You could do this via the GitLab API potentially. - # - # We would love some advice on improving this setup. - # - # #### BitBucket Cloud - # - # You will need to add the following environment variables as build parameters or by exporting them inside your - # Simple Command Runner. - # - # - # - `BITBUCKET_REPO_SLUG` - # - `BITBUCKET_REPO_URL` - # - # - `DANGER_BITBUCKETCLOUD_USERNAME` - # - `DANGER_BITBUCKETCLOUD_PASSWORD` - # - # or - # - # - `DANGER_BITBUCKETCLOUD_OAUTH_KEY` - # - `DANGER_BITBUCKETCLOUD_OAUTH_SECRET` - # - # You will also need to set the `BITBUCKET_BRANCH_NAME` environment variable. - # TeamCity provides `%teamcity.build.branch%`, which you can use at the top of your Simple Command Runner: - # - # ```sh - # export BITBUCKET_BRANCH_NAME="%teamcity.build.branch%" - # ``` - # - # #### BitBucket Server - # - # You will need to add the following environment variables as build parameters or by exporting them inside your - # Simple Command Runner. - # - # - `DANGER_BITBUCKETSERVER_USERNAME` - # - `DANGER_BITBUCKETSERVER_PASSWORD` - # - `DANGER_BITBUCKETSERVER_HOST` - # - `BITBUCKETSERVER_REPO_SLUG` - # - `BITBUCKETSERVER_PULL_REQUEST_ID` - # - `BITBUCKETSERVER_REPO_URL` - # - class TeamCity < CI - class << self - def validates_as_github_pr?(env) - ["GITHUB_PULL_REQUEST_ID", "GITHUB_REPO_URL"].all? { |x| env[x] && !env[x].empty? } - end - - def validates_as_gitlab_pr?(env) - ["GITLAB_REPO_SLUG", "GITLAB_PULL_REQUEST_ID", "GITLAB_REPO_URL"].all? { |x| env[x] && !env[x].empty? } - end - - def validates_as_bitbucket_cloud_pr?(env) - ["BITBUCKET_REPO_SLUG", "BITBUCKET_BRANCH_NAME", "BITBUCKET_REPO_URL"].all? { |x| env[x] && !env[x].empty? } - end - - def validates_as_bitbucket_server_pr?(env) - ["BITBUCKETSERVER_REPO_SLUG", "BITBUCKETSERVER_PULL_REQUEST_ID", "BITBUCKETSERVER_REPO_URL"].all? { |x| env[x] && !env[x].empty? } - end - end - - def self.validates_as_ci?(env) - env.key? "TEAMCITY_VERSION" - end - - def self.validates_as_pr?(env) - validates_as_github_pr?(env) || validates_as_gitlab_pr?(env) || validates_as_bitbucket_cloud_pr?(env) || validates_as_bitbucket_server_pr?(env) - end - - def supported_request_sources - @supported_request_sources ||= [Danger::RequestSources::GitHub, Danger::RequestSources::GitLab, Danger::RequestSources::BitbucketCloud, Danger::RequestSources::BitbucketServer] - end - - def initialize(env) - # NB: Unfortunately TeamCity doesn't provide these variables - # automatically so you have to add these variables manually to your - # project or build configuration - if self.class.validates_as_github_pr?(env) - extract_github_variables!(env) - elsif self.class.validates_as_gitlab_pr?(env) - extract_gitlab_variables!(env) - elsif self.class.validates_as_bitbucket_cloud_pr?(env) - extract_bitbucket_variables!(env) - elsif self.class.validates_as_bitbucket_server_pr?(env) - extract_bitbucket_server_variables!(env) - end - end - - private - - def extract_github_variables!(env) - self.repo_slug = env["GITHUB_REPO_SLUG"] - self.pull_request_id = env["GITHUB_PULL_REQUEST_ID"].to_i - self.repo_url = env["GITHUB_REPO_URL"] - end - - def extract_gitlab_variables!(env) - self.repo_slug = env["GITLAB_REPO_SLUG"] - self.pull_request_id = env["GITLAB_PULL_REQUEST_ID"].to_i - self.repo_url = env["GITLAB_REPO_URL"] - end - - def extract_bitbucket_variables!(env) - self.repo_slug = env["BITBUCKET_REPO_SLUG"] - self.pull_request_id = bitbucket_pr_from_env(env) - self.repo_url = env["BITBUCKET_REPO_URL"] - end - - def extract_bitbucket_server_variables!(env) - self.repo_slug = env["BITBUCKETSERVER_REPO_SLUG"] - self.pull_request_id = env["BITBUCKETSERVER_PULL_REQUEST_ID"].to_i - self.repo_url = env["BITBUCKETSERVER_REPO_URL"] - end - - # This is a little hacky, because Bitbucket doesn't provide us a PR id - def bitbucket_pr_from_env(env) - branch_name = env["BITBUCKET_BRANCH_NAME"] - repo_slug = env["BITBUCKET_REPO_SLUG"] - begin - Danger::RequestSources::BitbucketCloudAPI.new(repo_slug, nil, branch_name, env).pull_request_id - rescue StandardError - raise "Failed to find a pull request for branch \"#{branch_name}\" on Bitbucket." - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/travis.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/travis.rb deleted file mode 100644 index 4ff36ac7..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/travis.rb +++ /dev/null @@ -1,51 +0,0 @@ -# http://docs.travis-ci.com/user/osx-ci-environment/ -# http://docs.travis-ci.com/user/environment-variables/ -require "danger/request_sources/github/github" - -module Danger - # ### CI Setup - # You need to edit your `.travis.yml` to include `bundle exec danger`. If you already have - # a `script:` section then we recommend adding this command at the end of the script step: `- bundle exec danger`. - # - # Otherwise, add a `before_script` step to the root of the `.travis.yml` with `bundle exec danger` - # - # ```ruby - # before_script: - # - bundle exec danger - # ``` - # - # Adding this to your `.travis.yml` allows Danger to fail your build, both on the TravisCI website and within your Pull Request. - # With that set up, you can edit your job to add `bundle exec danger` at the build action. - # - # _Note:_ Travis CI defaults to using an older version of Ruby, so you may need to add `rvm: 2.0.0` to the root your `.travis.yml`. - # - # ### Token Setup - # - # You need to add the `DANGER_GITHUB_API_TOKEN` environment variable, to do this, - # go to your repo's settings, which should look like: `https://travis-ci.org/[user]/[repo]/settings`. - # - # If you have an open source project, you should ensure "Display value in build log" enabled, so that PRs from forks work. - # - class Travis < CI - def self.validates_as_ci?(env) - env.key? "HAS_JOSH_K_SEAL_OF_APPROVAL" - end - - def self.validates_as_pr?(env) - exists = ["TRAVIS_PULL_REQUEST", "TRAVIS_REPO_SLUG"].all? { |x| env[x] && !env[x].empty? } - exists && env["TRAVIS_PULL_REQUEST"].to_i > 0 - end - - def supported_request_sources - @supported_request_sources ||= [Danger::RequestSources::GitHub] - end - - def initialize(env) - self.repo_slug = env["TRAVIS_REPO_SLUG"] - if env["TRAVIS_PULL_REQUEST"].to_i > 0 - self.pull_request_id = env["TRAVIS_PULL_REQUEST"] - end - self.repo_url = GitRepo.new.origins # Travis doesn't provide a repo url env variable :/ - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/xcode_cloud.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/xcode_cloud.rb deleted file mode 100644 index a588661b..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/xcode_cloud.rb +++ /dev/null @@ -1,38 +0,0 @@ -module Danger - # ### CI Setup - # - # In order to work with Xcode Cloud and Danger, you will need to add `bundle exec danger` to - # the `ci_scripts/ci_post_xcodebuild.sh` (Xcode Cloud's expected filename for a post-action build script). - # More details and documentation on Xcode Cloud configuration can be found [here](https://developer.apple.com/documentation/xcode/writing-custom-build-scripts). - # - # ### Token Setup - # - # You will need to add the `DANGER_GITHUB_API_TOKEN` to your build environment. - # If running on GitHub Enterprise, make sure you also set the expected values for - # both `DANGER_GITHUB_API_HOST` and `DANGER_GITHUB_HOST`. - # - class XcodeCloud < CI - def self.validates_as_ci?(env) - env.key? "CI_XCODEBUILD_ACTION" - end - - def self.validates_as_pr?(env) - env.key? "CI_PULL_REQUEST_NUMBER" - end - - def supported_request_sources - @supported_request_sources ||= [ - Danger::RequestSources::GitHub, - Danger::RequestSources::GitLab, - Danger::RequestSources::BitbucketCloud, - Danger::RequestSources::BitbucketServer - ] - end - - def initialize(env) - self.repo_slug = env["CI_PULL_REQUEST_SOURCE_REPO"] - self.pull_request_id = env["CI_PULL_REQUEST_NUMBER"] - self.repo_url = env["CI_PULL_REQUEST_HTML_URL"] - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/xcode_server.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/xcode_server.rb deleted file mode 100644 index 8f4a5b0b..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/ci_source/xcode_server.rb +++ /dev/null @@ -1,48 +0,0 @@ -# Following the advice from @czechboy0 https://github.com/danger/danger/issues/171 -# https://github.com/czechboy0/Buildasaur -require "danger/request_sources/github/github" - -module Danger - # ### CI Setup - # - # If you're bold enough to use Xcode Bots. You will need to use [Buildasaur](https://github.com/czechboy0/Buildasaur) - # in order to work with Danger. This will set up your build environment for you, as the name of the bot contains all - # of the environment variables that Danger needs to work. - # - # With Buildasaur set up, you can edit your job to add `bundle exec danger` as a post-action build script. - # - # ### Token Setup - # - # As this is self-hosted, you will need to add the `DANGER_GITHUB_API_TOKEN` to your build user's ENV. The alternative - # is to pass in the token as a prefix to the command `DANGER_GITHUB_API_TOKEN="123" bundle exec danger`.`. - # - class XcodeServer < CI - def self.validates_as_ci?(env) - env.key? "XCS_BOT_NAME" - end - - def self.validates_as_pr?(env) - value = env["XCS_BOT_NAME"] - !value.nil? && value.include?("BuildaBot") - end - - def supported_request_sources - @supported_request_sources ||= [ - Danger::RequestSources::GitHub, - Danger::RequestSources::BitbucketServer, - Danger::RequestSources::BitbucketCloud - ] - end - - def initialize(env) - bot_name = env["XCS_BOT_NAME"] - return if bot_name.nil? - - repo_matches = bot_name.match(/\[(.+)\]/) - self.repo_slug = repo_matches[1] unless repo_matches.nil? - pull_request_id_matches = bot_name.match(/#(\d+)/) - self.pull_request_id = pull_request_id_matches[1] unless pull_request_id_matches.nil? - self.repo_url = GitRepo.new.origins # Xcode Server doesn't provide a repo url env variable :/ - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/clients/rubygems_client.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/clients/rubygems_client.rb deleted file mode 100644 index c0fa8163..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/clients/rubygems_client.rb +++ /dev/null @@ -1,14 +0,0 @@ -module Danger - class RubyGemsClient - API_URL = "https://rubygems.org/api/v1/versions/danger/latest.json".freeze - DUMMY_VERSION = "0.0.0".freeze - - def self.latest_danger_version - require "json" - json = JSON.parse(Faraday.get(API_URL).body) - json.fetch("version") { DUMMY_VERSION } - rescue StandardError => _e - DUMMY_VERSION - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/commands/dangerfile/gem.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/commands/dangerfile/gem.rb deleted file mode 100644 index 2cb60fc2..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/commands/dangerfile/gem.rb +++ /dev/null @@ -1,43 +0,0 @@ -require "claide_plugin" -require "danger/commands/dangerfile/init" - -module Danger - class DangerfileGem < DangerfileCommand - self.summary = "Create a gem-based Dangerfile quickly." - def self.description - <<-DESC - Creates a scaffold for the development of a new gem based Dangerfile - named `NAME` according to the best practices. - DESC - end - self.command = "gem" - self.arguments = [ - CLAide::Argument.new("NAME", true) - ] - - def initialize(argv) - @name = argv.shift_argument - prefix = "dangerfile" + "-" - unless @name.nil? || @name.empty? || @name.start_with?(prefix) - @name = prefix + @name.dup - end - @template_url = argv.shift_argument - super - end - - def validate! - super - if @name.nil? || @name.empty? - help! "A name for the plugin is required." - end - - help! "The plugin name cannot contain spaces." if @name =~ /\s/ - end - - def run - runner = CLAide::TemplateRunner.new(@name, "https://github.com/danger/dangerfile-gem-template") - runner.clone_template - runner.configure_template - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/commands/dangerfile/init.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/commands/dangerfile/init.rb deleted file mode 100644 index 2a1907d4..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/commands/dangerfile/init.rb +++ /dev/null @@ -1,30 +0,0 @@ -require "danger/danger_core/dangerfile_generator" - -# Mainly so we can have a nice structure for commands - -module Danger - class DangerfileCommand < Runner - self.summary = "Easily create your Dangerfiles." - self.command = "dangerfile" - - self.abstract_command = true - def self.options - [] - end - end -end - -# Just a less verbose way of doing the Dangerfile from `danger init`. - -module Danger - class DangerfileInit < DangerfileCommand - self.summary = "Create an example Dangerfile." - self.command = "init" - - def run - content = DangerfileGenerator.create_dangerfile(".", cork) - File.write("Dangerfile", content) - cork.puts "Created" + "./Dangerfile".green - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/commands/dry_run.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/commands/dry_run.rb deleted file mode 100644 index 62d5f5a3..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/commands/dry_run.rb +++ /dev/null @@ -1,54 +0,0 @@ -require "danger/commands/local_helpers/pry_setup" -require "fileutils" - -module Danger - class DryRun < Runner - self.summary = "Dry-Run the Dangerfile locally, so you could check some violations before sending real PR/MR." - self.command = "dry_run" - - def self.options - [ - ["--pry", "Drop into a Pry shell after evaluating the Dangerfile."] - ] - end - - def initialize(argv) - show_help = true if argv.arguments == ["-h"] - - # Currently CLAide doesn't support short option like -h https://github.com/CocoaPods/CLAide/pull/60 - # when user pass in -h, mimic the behavior of passing in --help. - argv = CLAide::ARGV.new ["--help"] if show_help - - super - - if argv.flag?("pry", false) - @dangerfile_path = PrySetup.new(cork).setup_pry(@dangerfile_path, DryRun.command) - end - end - - def validate! - super - unless @dangerfile_path - help! "Could not find a Dangerfile." - end - end - - def run - ENV["DANGER_USE_LOCAL_ONLY_GIT"] = "YES" - ENV["DANGER_LOCAL_HEAD"] = @head if @head - ENV["DANGER_LOCAL_BASE"] = @base if @base - - env = EnvironmentManager.new(ENV, cork) - dm = Dangerfile.new(env, cork) - - exit 1 if dm.run( - Danger::EnvironmentManager.danger_base_branch, - Danger::EnvironmentManager.danger_head_branch, - @dangerfile_path, - nil, - nil, - nil - ) - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/commands/init.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/commands/init.rb deleted file mode 100644 index 414d2a4b..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/commands/init.rb +++ /dev/null @@ -1,297 +0,0 @@ -require "danger/commands/init_helpers/interviewer" -require "danger/danger_core/dangerfile_generator" -require "danger/ci_source/local_git_repo" -require "yaml" - -module Danger - class Init < Runner - self.summary = "Helps you set up Danger." - self.command = "init" - - attr_accessor :ui - - def self.options - [ - ["--impatient", "'I've not got all day here. Don't add any thematic delays please.'"], - ["--mousey", "'Don't make me press return to continue the adventure.'"] - ].concat(super) - end - - def initialize(argv) - @bot_name = File.basename(Dir.getwd).split(".").first.capitalize + "Bot" - super - @ui = Interviewer.new(cork) - ui.no_delay = argv.flag?("impatient", false) - ui.no_waiting = argv.flag?("mousey", false) - end - - def run - ui.say "\nOK, thanks #{ENV['LOGNAME']}, have a seat and we'll get you started.\n".yellow - ui.pause 1 - - show_todo_state - ui.pause 1.4 - - setup_dangerfile - setup_github_account - setup_access_token - setup_danger_ci - - info - thanks - end - - def show_todo_state - ui.say "We need to do the following:\n" - ui.pause 0.6 - ui.say " - [ ] Create a Dangerfile and add a few simple rules." - ui.pause 0.6 - ui.say " - [#{@account_created ? 'x' : ' '}] Create a GitHub account for Danger to use, for messaging." - ui.pause 0.6 - ui.say " - [ ] Set up an access token for Danger." - ui.pause 0.6 - ui.say " - [ ] Set up Danger to run on your CI.\n\n" - end - - def setup_dangerfile - content = DangerfileGenerator.create_dangerfile(".", cork) - File.write("Dangerfile", content) - - ui.header "Step 1: Creating a starter Dangerfile" - ui.say "I've set up an example Dangerfile for you in this folder.\n" - ui.pause 1 - - ui.say "cat #{Dir.pwd}/Dangerfile\n".blue - content.lines.each do |l| - ui.say " " + l.chomp.green - end - ui.say "" - ui.pause 2 - - ui.say "There's a collection of small, simple ideas in here, but Danger is about being able to easily" - ui.say "iterate. The power comes from you having the ability to codify fixes for some of the problems" - ui.say "that come up in day to day programming. It can be difficult to try and see those from day 1." - - ui.say "\nIf you'd like to investigate the file, and make some changes - I'll wait here," - ui.say "press return when you're ready to move on..." - ui.wait_for_return - end - - def setup_github_account - ui.header "Step 2: Creating a GitHub account" - - ui.say "In order to get the most out of Danger, I'd recommend giving her the ability to post in" - ui.say "the code-review comment section.\n\n" - ui.pause 1 - - ui.say "IMO, it's best to do this by using the private mode of your browser. Create an account like" - ui.say "#{@bot_name}, and don't forget a cool robot avatar.\n\n" - ui.pause 1 - ui.say "Here are great resources for creative commons images of robots:" - ui.link "https://www.flickr.com/search/?text=robot&license=2%2C3%2C4%2C5%2C6%2C9" - ui.link "https://www.google.com/search?q=robot&tbs=sur:fmc&tbm=isch&tbo=u&source=univ&sa=X&ved=0ahUKEwjgy8-f95jLAhWI7hoKHV_UD00QsAQIMQ&biw=1265&bih=1359" - ui.pause 1 - - if considered_an_oss_repo? - ui.say "#{@bot_name} does not need privileged access to your repo or org. This is because Danger will only" - ui.say "be writing comments, and you do not need special access for that." - else - ui.say "#{@bot_name} will need access to your repo. Simply because the code is not available for the public" - ui.say "to read and comment on." - end - - ui.say "" - note_about_clicking_links - ui.pause 1 - ui.say "\nCool, please press return when you have your account ready (and you've verified the email...)" - ui.wait_for_return - end - - def setup_access_token - ui.header "Step 3: Configuring a GitHub Personal Access Token" - - ui.say "Here's the link, you should open this in the private session where you just created the new GitHub account" - ui.link "https://github.com/settings/tokens/new" - ui.pause 1 - - @is_open_source = ui.ask_with_answers("For token access rights, I need to know if this is for an Open Source or Closed Source project\n", ["Open", "Closed"]) - - if considered_an_oss_repo? - ui.say "For Open Source projects, I'd recommend giving the token the smallest scope possible." - ui.say "This means only providing access to " + "public_repo".yellow + " in the token.\n\n" - ui.pause 1 - ui.say "This token limits Danger's abilities to just writing comments on OSS projects. I recommend" - ui.say "this because the token can quite easily be extracted from the environment via pull requests." - - ui.say "\nIt is important that you do not store this token in your repository, as GitHub will automatically revoke it when pushed.\n" - elsif @is_open_source == "closed" - ui.say "For Closed Source projects, I'd recommend giving the token access to the whole repo scope." - ui.say "This means only providing access to " + "repo".yellow + ", and its children in the token.\n\n" - ui.pause 1 - ui.say "It's worth noting that you " + "should not".bold.white + " re-use this token for OSS repos." - ui.say "Make a new one for those repos with just " + "public_repo".yellow + "." - ui.pause 1 - ui.say "Additionally, don't forget to add your new GitHub account as a collaborator to your Closed Source project." - end - - ui.say "\n👍, please press return when you have your token set up..." - ui.wait_for_return - end - - def considered_an_oss_repo? - @is_open_source == "open" - end - - def current_repo_slug - git = GitRepo.new - - author_repo_regexp = %r{(?:[/:])([^/]+/[^/]+)(?:.git)?$} - last_git_regexp = /.git$/ - - matches = git.origins.match(author_repo_regexp) - - matches ? matches[1].gsub(last_git_regexp, "").strip : "[Your/Repo]" - end - - def setup_danger_ci - ui.header "Step 4: Add Danger for your CI" - - uses_travis if File.exist? ".travis.yml" - uses_circle if File.exist? "circle.yml" - unsure_ci unless File.exist?(".travis.yml") || File.exist?(".circle.yml") - - ui.say "\nOK, I'll give you a moment to do this..." - ui.wait_for_return - - ui.header "Final step: exposing the GitHub token as an environment build variable." - ui.pause 0.4 - if considered_an_oss_repo? - ui.say "As you have an Open Source repo, this token should be considered public, otherwise you cannot" - ui.say "run Danger on pull requests from forks, limiting its use.\n" - ui.pause 1 - end - - travis_token if File.exist? ".travis.yml" - circle_token if File.exist? "circle.yml" - unsure_token unless File.exist?(".travis.yml") || File.exist?(".circle.yml") - - ui.pause 0.6 - ui.say "This is the last step, I can give you a second..." - ui.wait_for_return - end - - def uses_travis - danger = "bundle exec danger".yellow - config = YAML.load(File.read(".travis.yml")) - if config.kind_of?(Hash) && config["script"] - ui.say "Add " + "- ".yellow + danger + " as a new step in the " + "script".yellow + " section of your .travis.yml file." - else - ui.say "I'd recommend adding " + "before_script: ".yellow + danger + " to the script section of your .travis.yml file." - end - - ui.pause 1 - ui.say "You shouldn't use " + "after_success, after_failure, after_script".red + " as they cannot fail your builds." - end - - def uses_circle - danger = "- bundle exec danger".yellow - config = YAML.load(File.read("circle.yml")) - - if config.kind_of?(Hash) && config["test"] - if config["test"]["post"] - ui.say "Add " + danger + " as a new step in the " + "test:post:".yellow + " section of your circle.yml file." - else - ui.say "Add " + danger + " as a new step in the " + "test:override:".yellow + " section of your circle.yml file." - end - else - ui.say "Add this to the bottom of your circle.yml file:" - ui.say "test:".green - ui.say " post:".green - ui.say " #{danger}".green - end - end - - def unsure_ci - danger = "bundle exec danger".yellow - ui.say "As I'm not sure what CI you want to run Danger on based on the files in your repo, I'll just offer some generic" - ui.say "advice. You want to run " + danger + " after your tests have finished running, it should still be during the testing" - ui.say "process so the build can fail." - end - - def travis_token - # https://travis-ci.org/artsy/eigen/settings - ui.say "In order to add an environment variable, go to:" - ui.link "https://travis-ci.org/#{current_repo_slug}/settings" - ui.say "\nThe name is " + "DANGER_GITHUB_API_TOKEN".yellow + " and the value is the GitHub Personal Access Token." - if @is_open_source - ui.say 'Make sure to have "Display value in build log" enabled.' - end - end - - def circle_token - # https://circleci.com/gh/artsy/eigen/edit#env-vars - if considered_an_oss_repo? - ui.say "Before we start, it's important to be up-front. CircleCI only really has one option to support running Danger" - ui.say "for forks on OSS repos. It is quite a drastic option, and I want to let you know the best place to understand" - ui.say "the ramifications of turning on a setting I'm about to advise.\n" - ui.link "https://circleci.com/docs/fork-pr-builds" - ui.say "TLDR: If you have anything other than Danger config settings in CircleCI, then you should not turn on the setting." - ui.say "I'll give you a minute to read it..." - ui.wait_for_return - - ui.say "On danger/danger we turn on " + "Permissive building of fork pull requests".yellow + " this exposes the token to Danger" - ui.say "You can find this setting at:" - ui.link "https://circleci.com/gh/#{current_repo_slug}/edit#advanced-settings\n" - ui.say "I'll hold..." - ui.wait_for_return - end - - ui.say "In order to expose an environment variable, go to:" - ui.link "https://circleci.com/gh/#{current_repo_slug}/edit#env-vars" - ui.say "The name is " + "DANGER_GITHUB_API_TOKEN".yellow + " and the value is the GitHub Personal Access Token." - end - - def unsure_token - ui.say "You need to expose a token called " + "DANGER_GITHUB_API_TOKEN".yellow + " and the value is the GitHub Personal Access Token." - ui.say "Depending on the CI system, this may need to be done on the machine (in the " + "~/.bashprofile".yellow + ") or in a web UI somewhere." - ui.say "We have a guide for all supported CI systems on danger.systems:" - ui.link "https://danger.systems/guides/getting_started.html#setting-up-danger-to-run-on-your-ci" - end - - def note_about_clicking_links - modifier_key = "ctrl" - clicks = "clicking" - - modifier_key = "cmd ( ⌘ )" if darwin? - clicks = "double clicking" if darwin? && !ENV["ITERM_SESSION_ID"] - - ui.say "Note: Holding #{modifier_key} and #{clicks} a link will open it in your browser." - end - - def info - ui.header "Useful info" - ui.say "- One of the best ways to test out new rules locally is via " + "bundle exec danger pr".yellow + "." - ui.pause 0.6 - ui.say "- You can have Danger output all of her variables to the console via the " + "--verbose".yellow + " option." - ui.pause 0.6 - ui.say "- You can look at the following Dangerfiles to get some more ideas:" - ui.pause 0.6 - ui.link "https://github.com/danger/danger/blob/master/Dangerfile" - ui.link "https://github.com/artsy/eigen/blob/master/dangerfile.ts" - ui.pause 1 - end - - def thanks - ui.say "\n\n🎉" - ui.pause 0.6 - - ui.say "And you're good to go. Danger is a collaboration between Orta Therox, Gem 'Danger' McShane and Felix Krause." - ui.say "If you like Danger, let others know. If you want to know more, follow " + "@orta".yellow + " and " + "@KrauseFx".yellow + " on Twitter." - ui.say "If you don't like Danger, help us improve the project! xxx" - end - - def darwin? - Gem::Platform.local.os == "darwin" - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/commands/init_helpers/interviewer.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/commands/init_helpers/interviewer.rb deleted file mode 100644 index a060b57e..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/commands/init_helpers/interviewer.rb +++ /dev/null @@ -1,92 +0,0 @@ -module Danger - class Interviewer - attr_accessor :no_delay, :no_waiting, :ui - - def initialize(cork_board) - @ui = cork_board - end - - def show_prompt - ui.print "> ".bold.green - end - - def yellow_bang - "! ".yellow - end - - def green_bang - "! ".green - end - - def red_bang - "! ".red - end - - def say(output) - ui.puts output - end - - def header(title) - say title.yellow - say "" - pause 0.6 - end - - def link(url) - say " -> " + url.underlined + "\n" - end - - def pause(time) - sleep(time) unless @no_waiting - end - - def wait_for_return - STDOUT.flush - STDIN.gets unless @no_delay - ui.puts - end - - def run_command(command, output_command = nil) - output_command ||= command - ui.puts " " + output_command.magenta - system command - end - - def ask_with_answers(question, possible_answers) - ui.print "\n#{question}? [" - - print_info = proc do - possible_answers.each_with_index do |answer, i| - the_answer = i.zero? ? answer.underlined : answer - ui.print " " + the_answer - ui.print(" /") if i != possible_answers.length - 1 - end - ui.print " ]\n" - end - print_info.call - - answer = "" - - loop do - show_prompt - answer = @no_waiting ? possible_answers[0].downcase : STDIN.gets.downcase.chomp - - answer = "yes" if answer == "y" - answer = "no" if answer == "n" - - # default to first answer - if answer == "" - answer = possible_answers[0].downcase - ui.puts "Using: " + answer.yellow - end - - break if possible_answers.map(&:downcase).include? answer - - ui.print "\nPossible answers are [" - print_info.call - end - - answer - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/commands/local.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/commands/local.rb deleted file mode 100644 index 558910b7..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/commands/local.rb +++ /dev/null @@ -1,83 +0,0 @@ -require "danger/commands/local_helpers/http_cache" -require "danger/commands/local_helpers/local_setup" -require "danger/commands/local_helpers/pry_setup" -require "faraday/http_cache" -require "fileutils" -require "octokit" -require "tmpdir" - -module Danger - class Local < Runner - self.summary = "Run the Dangerfile locally. This command is generally deprecated in favor of `danger pr`." - self.command = "local" - - def self.options - [ - ["--use-merged-pr=[#id]", "The ID of an already merged PR inside your history to use as a reference for the local run."], - ["--clear-http-cache", "Clear the local http cache before running Danger locally."], - ["--pry", "Drop into a Pry shell after evaluating the Dangerfile."] - ] - end - - def initialize(argv) - show_help = true if argv.arguments == ["-h"] - - @pr_num = argv.option("use-merged-pr") - @clear_http_cache = argv.flag?("clear-http-cache", false) - - # Currently CLAide doesn't support short option like -h https://github.com/CocoaPods/CLAide/pull/60 - # when user pass in -h, mimic the behavior of passing in --help. - argv = CLAide::ARGV.new ["--help"] if show_help - - super - - if argv.flag?("pry", false) - @dangerfile_path = PrySetup.new(cork).setup_pry(@dangerfile_path, Local.command) - end - end - - def validate! - super - unless @dangerfile_path - help! "Could not find a Dangerfile." - end - end - - def run - ENV["DANGER_USE_LOCAL_GIT"] = "YES" - ENV["LOCAL_GIT_PR_ID"] = @pr_num if @pr_num - - configure_octokit(ENV["DANGER_TMPDIR"] || Dir.tmpdir) - - env = EnvironmentManager.new(ENV, cork, @danger_id) - dm = Dangerfile.new(env, cork) - - LocalSetup.new(dm, cork).setup(verbose: verbose) do - dm.run( - Danger::EnvironmentManager.danger_base_branch, - Danger::EnvironmentManager.danger_head_branch, - @dangerfile_path, - @danger_id, - nil, - nil - ) - end - end - - private - - #  this method is a duplicate of Commands::PR#configure_octokit - # - worth a refactor sometime? - def configure_octokit(cache_dir) - # setup caching for Github calls to hitting the API rate limit too quickly - cache_file = File.join(cache_dir, "danger_local_cache") - cache = HTTPCache.new(cache_file, clear_cache: @clear_http_cache) - Octokit.middleware = Faraday::RackBuilder.new do |builder| - builder.use Faraday::HttpCache, store: cache, serializer: Marshal, shared_cache: false - builder.use Octokit::Middleware::FollowRedirects - builder.use Octokit::Response::RaiseError - builder.adapter Faraday.default_adapter - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/commands/local_helpers/http_cache.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/commands/local_helpers/http_cache.rb deleted file mode 100644 index 7e9f5e79..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/commands/local_helpers/http_cache.rb +++ /dev/null @@ -1,38 +0,0 @@ -require "pstore" - -module Danger - class HTTPCache - attr_reader :expires_in - - def initialize(cache_file = nil, options = {}) - File.delete(cache_file) if options[:clear_cache] - @store = PStore.new(cache_file) - @expires_in = options[:expires_in] || 300 # 5 minutes - end - - def read(key) - @store.transaction do - entry = @store[key] - return nil unless entry - return entry[:value] unless entry_has_expired(entry, @expires_in) - - @store.delete key - return nil - end - end - - def delete(key) - @store.transaction { @store.delete key } - end - - def write(key, value) - @store.transaction do - @store[key] = { updated_at: Time.now.to_i, value: value } - end - end - - def entry_has_expired(entry, ttl) - Time.now.to_i > entry[:updated_at].to_i + ttl.to_i - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/commands/local_helpers/local_setup.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/commands/local_helpers/local_setup.rb deleted file mode 100644 index 825fa8ba..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/commands/local_helpers/local_setup.rb +++ /dev/null @@ -1,48 +0,0 @@ -module Danger - class LocalSetup - attr_reader :dm, :cork - - def initialize(dangerfile, cork) - @dm = dangerfile - @cork = cork - end - - def setup(verbose: false) - source = dm.env.ci_source - if source.nil? or source.repo_slug.empty? - cork.puts "danger local failed because it only works with GitHub and Bitbucket server projects at the moment. Sorry.".red - exit 0 - end - gh = dm.env.request_source - # We can use tokenless here, as it's running on someone's computer - # and is IP locked, as opposed to on the CI. Only for Github PRs - if gh.instance_of? Danger::RequestSources::GitHub - gh.support_tokenless_auth = true - end - - if gh.instance_of? Danger::RequestSources::BitbucketServer - cork.puts "Running your Dangerfile against this PR - #{gh.host}/projects/#{source.repo_slug.split('/').first}/repos/#{source.repo_slug.split('/').last}/pull-requests/#{source.pull_request_id}" - elsif gh.instance_of? Danger::RequestSources::VSTS - cork.puts "Running your Dangerfile against this PR - #{gh.client.pr_api_endpoint}" - else - cork.puts "Running your Dangerfile against this PR - https://#{gh.host}/#{source.repo_slug}/pull/#{source.pull_request_id}" - end - - unless verbose - cork.puts "Turning on --verbose" - dm.verbose = true - end - - cork.puts - - begin - gh.fetch_details - rescue Octokit::NotFound - cork.puts "Local repository was not found on GitHub. If you're trying to test a private repository please provide a valid API token through " + "DANGER_GITHUB_API_TOKEN".yellow + " environment variable." - return - end - - yield - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/commands/local_helpers/pry_setup.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/commands/local_helpers/pry_setup.rb deleted file mode 100644 index a5d69e0b..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/commands/local_helpers/pry_setup.rb +++ /dev/null @@ -1,32 +0,0 @@ -module Danger - class PrySetup - def initialize(cork) - @cork = cork - end - - def setup_pry(dangerfile_path, command) - return dangerfile_path if dangerfile_path.empty? - - validate_pry_available(command) - FileUtils.cp dangerfile_path, DANGERFILE_COPY - File.open(DANGERFILE_COPY, "a") do |f| - f.write("\nbinding.pry; File.delete(\"#{DANGERFILE_COPY}\")") - end - DANGERFILE_COPY - end - - private - - attr_reader :cork - - DANGERFILE_COPY = "_Dangerfile.tmp".freeze - - def validate_pry_available(command) - Kernel.require "pry" - rescue LoadError - cork.warn "Pry was not found, and is required for 'danger #{command} --pry'." - cork.print_warnings - abort - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/commands/plugins/plugin_json.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/commands/plugins/plugin_json.rb deleted file mode 100644 index f6126024..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/commands/plugins/plugin_json.rb +++ /dev/null @@ -1,44 +0,0 @@ -require "danger/plugin_support/plugin_parser" -require "danger/plugin_support/plugin_file_resolver" - -module Danger - class PluginJSON < CLAide::Command::Plugins - self.summary = "Lint plugins from files, gems or the current folder. Outputs JSON array representation of Plugins on success." - self.command = "json" - - attr_accessor :cork - - def initialize(argv) - @refs = argv.arguments! unless argv.arguments.empty? - @cork = Cork::Board.new(silent: argv.option("silent", false), - verbose: argv.option("verbose", false)) - super - end - - self.description = <<-DESC - Converts a collection of file paths of Danger plugins into a JSON format. - DESC - - self.arguments = [ - CLAide::Argument.new("Paths, Gems or Nothing", false, true) - ] - - def run - file_resolver = PluginFileResolver.new(@refs) - data = file_resolver.resolve - - parser = PluginParser.new(data[:paths]) - parser.parse - json = parser.to_json - - # Append gem metadata into every plugin - data[:gems].each do |gem_data| - json.each do |plugin| - plugin[:gem_metadata] = gem_data if plugin[:gem] == gem_data[:gem] - end - end - - cork.puts json.to_json - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/commands/plugins/plugin_lint.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/commands/plugins/plugin_lint.rb deleted file mode 100644 index 55ec44bb..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/commands/plugins/plugin_lint.rb +++ /dev/null @@ -1,52 +0,0 @@ -require "danger/plugin_support/plugin_parser" -require "danger/plugin_support/plugin_file_resolver" -require "danger/plugin_support/plugin_linter" - -module Danger - class PluginLint < CLAide::Command::Plugins - self.summary = "Lints a plugin" - self.command = "lint" - - attr_accessor :cork - - def initialize(argv) - @warnings_as_errors = argv.flag?("warnings-as-errors", false) - @refs = argv.arguments! unless argv.arguments.empty? - @cork = Cork::Board.new(silent: argv.option("silent", false), - verbose: argv.option("verbose", false)) - super - end - - self.description = <<-DESC - Converts a collection of file paths of Danger plugins into a JSON format. - Note: Before 1.0, it will also parse the represented JSON to validate whether https://danger.systems would - show the plugin on the website. - DESC - - self.arguments = [ - CLAide::Argument.new("Paths, Gems or Nothing", false, true) - ] - - def self.options - [ - ["--warnings-as-errors", "Ensure strict linting."] - ].concat(super) - end - - def run - file_resolver = PluginFileResolver.new(@refs) - data = file_resolver.resolve - - parser = PluginParser.new(data[:paths], verbose: true) - parser.parse - json = parser.to_json - - linter = PluginLinter.new(json) - linter.lint - linter.print_summary(cork) - - abort("Failing due to errors\n".red) if linter.failed? - abort("Failing due to warnings as errors\n".red) if @warnings_as_errors && !linter.warnings.empty? - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/commands/plugins/plugin_readme.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/commands/plugins/plugin_readme.rb deleted file mode 100644 index 294f423d..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/commands/plugins/plugin_readme.rb +++ /dev/null @@ -1,42 +0,0 @@ -require "danger/plugin_support/plugin_parser" -require "danger/plugin_support/plugin_file_resolver" -require "json" -require "erb" - -module Danger - class PluginReadme < CLAide::Command::Plugins - self.summary = "Generates a README from a set of plugins" - self.command = "readme" - - attr_accessor :cork, :json, :markdown - - def initialize(argv) - @refs = argv.arguments! unless argv.arguments.empty? - @cork = Cork::Board.new(silent: argv.option("silent", false), - verbose: argv.option("verbose", false)) - super - end - - self.description = <<-DESC - Converts a collection of file paths of Danger plugins into a format usable in a README. - This is useful for Danger itself, but also for any plugins wanting to showcase their API. - DESC - - self.arguments = [ - CLAide::Argument.new("Paths, Gems or Nothing", false, true) - ] - - def run - file_resolver = PluginFileResolver.new(@refs) - data = file_resolver.resolve - - parser = PluginParser.new(data[:paths]) - parser.parse - - self.json = JSON.parse(parser.to_json_string) - - template = File.join(Danger.gem_path, "lib/danger/plugin_support/templates/readme_table.html.erb") - cork.puts ERB.new(File.read(template), trim_mode: "-").result(binding) - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/commands/pr.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/commands/pr.rb deleted file mode 100644 index fe8ddaa9..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/commands/pr.rb +++ /dev/null @@ -1,93 +0,0 @@ -require "danger/commands/local_helpers/http_cache" -require "danger/commands/local_helpers/pry_setup" -require "faraday/http_cache" -require "fileutils" -require "octokit" -require "tmpdir" -require "no_proxy_fix" - -module Danger - class PR < Runner - self.summary = "Run the Dangerfile locally against Pull Requests (works with forks, too). Does not post to the PR. Usage: danger pr ".freeze - self.command = "pr".freeze - - def self.options - [ - ["--clear-http-cache", "Clear the local http cache before running Danger locally."], - ["--pry", "Drop into a Pry shell after evaluating the Dangerfile."], - ["--dangerfile=", "The location of your Dangerfile"], - ["--verify-ssl", "Verify SSL in Octokit"] - ] - end - - def initialize(argv) - show_help = true if argv.arguments == ["-h"] - - @pr_url = argv.shift_argument - @clear_http_cache = argv.flag?("clear-http-cache", false) - dangerfile = argv.option("dangerfile", "Dangerfile") - @verify_ssl = argv.flag?("verify-ssl", true) - - # Currently CLAide doesn't support short option like -h https://github.com/CocoaPods/CLAide/pull/60 - # when user pass in -h, mimic the behavior of passing in --help. - argv = CLAide::ARGV.new ["--help"] if show_help - - super - - @dangerfile_path = dangerfile if File.exist?(dangerfile) - - if argv.flag?("pry", false) - @dangerfile_path = PrySetup.new(cork).setup_pry(@dangerfile_path, PR.command) - end - end - - def validate! - super - unless @dangerfile_path - help! "Could not find a Dangerfile." - end - unless @pr_url - help! "Could not find a pull-request. Usage: danger pr " - end - end - - def run - ENV["DANGER_USE_LOCAL_GIT"] = "YES" - ENV["LOCAL_GIT_PR_URL"] = @pr_url if @pr_url - - configure_octokit(ENV["DANGER_TMPDIR"] || Dir.tmpdir) - - env = EnvironmentManager.new(ENV, cork) - dm = Dangerfile.new(env, cork) - - LocalSetup.new(dm, cork).setup(verbose: verbose) do - dm.run( - Danger::EnvironmentManager.danger_base_branch, - Danger::EnvironmentManager.danger_head_branch, - @dangerfile_path, - nil, - nil, - nil, - false - ) - end - end - - private - - def configure_octokit(cache_dir) - # setup caching for Github calls to hitting the API rate limit too quickly - cache_file = File.join(cache_dir, "danger_local_cache") - cache = HTTPCache.new(cache_file, clear_cache: @clear_http_cache) - Octokit.configure do |config| - config.connection_options[:ssl] = { verify: @verify_ssl } - end - Octokit.middleware = Faraday::RackBuilder.new do |builder| - builder.use Faraday::HttpCache, store: cache, serializer: Marshal, shared_cache: false - builder.use Octokit::Middleware::FollowRedirects - builder.use Octokit::Response::RaiseError - builder.adapter Faraday.default_adapter - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/commands/runner.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/commands/runner.rb deleted file mode 100644 index 2062a913..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/commands/runner.rb +++ /dev/null @@ -1,94 +0,0 @@ -module Danger - class Runner < CLAide::Command - require "danger/commands/init" - require "danger/commands/local" - require "danger/commands/dry_run" - require "danger/commands/staging" - require "danger/commands/systems" - require "danger/commands/pr" - - # manually set claide plugins as a subcommand - require "claide_plugin" - @subcommands << CLAide::Command::Plugins - CLAide::Plugins.config = - CLAide::Plugins::Configuration.new( - "Danger", - "danger", - "https://gitlab.com/danger-systems/danger.systems/raw/master/plugins-search-generated.json", - "https://github.com/danger/danger-plugin-template" - ) - - require "danger/commands/plugins/plugin_lint" - require "danger/commands/plugins/plugin_json" - require "danger/commands/plugins/plugin_readme" - - require "danger/commands/dangerfile/init" - require "danger/commands/dangerfile/gem" - - attr_accessor :cork - - self.summary = "Run the Dangerfile." - self.command = "danger" - self.version = Danger::VERSION - - self.plugin_prefixes = %w(claide danger) - - def initialize(argv) - dangerfile = argv.option("dangerfile", "Dangerfile") - @dangerfile_path = dangerfile if File.exist?(dangerfile) - @base = argv.option("base") - @head = argv.option("head") - @fail_on_errors = argv.option("fail-on-errors", false) - @fail_if_no_pr = argv.option("fail-if-no-pr", false) - @new_comment = argv.flag?("new-comment") - @remove_previous_comments = argv.flag?("remove-previous-comments") - @danger_id = argv.option("danger_id", "danger") - @cork = Cork::Board.new(silent: argv.option("silent", false), - verbose: argv.option("verbose", false)) - adjust_colored2_output(argv) - super - end - - def validate! - super - if self.instance_of?(Runner) && !@dangerfile_path - help!("Could not find a Dangerfile.") - end - end - - def self.options - [ - ["--base=[master|dev|stable]", "A branch/tag/commit to use as the base of the diff"], - ["--head=[master|dev|stable]", "A branch/tag/commit to use as the head"], - ["--fail-on-errors=", "Should always fail the build process, defaults to false"], - ["--fail-if-no-pr=", "Should fail the build process if no PR is found (useful for CircleCI), defaults to false"], - ["--dangerfile=", "The location of your Dangerfile"], - ["--danger_id=", "The identifier of this Danger instance"], - ["--new-comment", "Makes Danger post a new comment instead of editing its previous one"], - ["--remove-previous-comments", "Removes all previous comment and create a new one in the end of the list"] - ].concat(super) - end - - def run - Executor.new(ENV).run( - base: @base, - head: @head, - dangerfile_path: @dangerfile_path, - danger_id: @danger_id, - new_comment: @new_comment, - fail_on_errors: @fail_on_errors, - fail_if_no_pr: @fail_if_no_pr, - remove_previous_comments: @remove_previous_comments - ) - end - - private - - def adjust_colored2_output(argv) - # disable/enable colored2 output - # consider it execution wide to avoid need to wrap #run and maintain state - # ARGV#options is non-destructive way to check flags - Colored2.public_send(argv.options.fetch("ansi", true) ? "enable!" : "disable!") - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/commands/staging.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/commands/staging.rb deleted file mode 100644 index 71c90c83..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/commands/staging.rb +++ /dev/null @@ -1,53 +0,0 @@ -require "danger/commands/local_helpers/pry_setup" -require "fileutils" -require "tmpdir" - -module Danger - class Staging < Runner - self.summary = "Run the Dangerfile locally against local master" - self.command = "staging" - - def self.options - [ - ["--pry", "Drop into a Pry shell after evaluating the Dangerfile."] - ] - end - - def initialize(argv) - show_help = true if argv.arguments == ["-h"] - - # Currently CLAide doesn't support short option like -h https://github.com/CocoaPods/CLAide/pull/60 - # when user pass in -h, mimic the behavior of passing in --help. - argv = CLAide::ARGV.new ["--help"] if show_help - - super - - if argv.flag?("pry", false) - @dangerfile_path = PrySetup.new(cork).setup_pry(@dangerfile_path, Staging.command) - end - end - - def validate! - super - unless @dangerfile_path - help! "Could not find a Dangerfile." - end - end - - def run - ENV["DANGER_USE_LOCAL_ONLY_GIT"] = "YES" - - env = EnvironmentManager.new(ENV, cork) - dm = Dangerfile.new(env, cork) - - dm.run( - Danger::EnvironmentManager.danger_base_branch, - Danger::EnvironmentManager.danger_head_branch, - @dangerfile_path, - nil, - nil, - nil - ) - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/commands/systems.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/commands/systems.rb deleted file mode 100644 index d44a2ff1..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/commands/systems.rb +++ /dev/null @@ -1,41 +0,0 @@ -module Danger - class Systems < Runner - self.abstract_command = true - self.description = "For commands related to passing information from Danger to Danger.Systems." - self.summary = "Create data for Danger.Systems." - end - - class CIDocs < Systems - self.command = "ci_docs" - self.summary = "Outputs the up-to-date CI documentation for Danger." - - def run - here = File.dirname(__FILE__) - ci_source_paths = Dir.glob(here + "/../ci_source/*.rb") - - require "yard" - # Pull out all the Danger::CI subclasses docs - registry = YARD::Registry.load(ci_source_paths, true) - ci_sources = registry.all(:class) - .select { |klass| klass.inheritance_tree.map(&:name).include? :CI } - .reject { |source| source.name == :CI } - .reject { |source| source.name == :LocalGitRepo } - - # Fail if anything is added and not documented - cis_without_docs = ci_sources.select { |source| source.base_docstring.empty? } - unless cis_without_docs.empty? - cork.puts "Please add docs to: #{cis_without_docs.map(&:name).join(', ')}" - abort("Failed.".red) - end - - # Output a JSON array of name and details - require "json" - cork.puts ci_sources.map { |ci| - { - name: ci.name, - docs: ci.docstring - } - }.to_json - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/comment_generators/bitbucket_server.md.erb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/comment_generators/bitbucket_server.md.erb deleted file mode 100644 index 6a086907..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/comment_generators/bitbucket_server.md.erb +++ /dev/null @@ -1,20 +0,0 @@ -<%- @tables.each do |table| -%> - <%- if table[:content].any? || table[:resolved].any? -%> -| | <%= table[:count] %> <%= table[:name] %><%= "s" unless table[:count] == 1 %> | -|---|---| - <%- table[:content].each do |violation| -%> -| <%= @emoji_mapper.map(table[:emoji]) %> | <%= violation.message %> | - <%- end -%> - <%- table[:resolved].each do |message| -%> -| @emoji_mapper.map("white_check_mark") | <%= message %> | - <%- end -%> - - <%- end -%> -<%- end -%> - -<%- @markdowns.each do |current| -%> -<%= current %> -<%# the previous line has to be aligned far to the left, otherwise markdown can break easily %> -<%- end -%> - -Generated by :no_entry_sign: [Danger](https://danger.systems/ "generated_by_<%= @danger_id %>") diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/comment_generators/bitbucket_server_inline.md.erb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/comment_generators/bitbucket_server_inline.md.erb deleted file mode 100644 index 1eba6139..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/comment_generators/bitbucket_server_inline.md.erb +++ /dev/null @@ -1,15 +0,0 @@ -<%- @tables.each do |table| -%> - <%- table[:content].each do |violation| -%> -<%= @emoji_mapper.map(table[:emoji]) if table[:emoji] %> <%= violation.message %> - <%- end -%> - <%- table[:resolved] && table[:resolved].each do |message| -%> -<%= @emoji_mapper.map("white_check_mark") %> <%= message %> - <%- end -%> -<%- end -%> - -<%- @markdowns.each do |current| -%> -<%= current %> -<%# the previous line has to be aligned far to the left, otherwise markdown can break easily %> -<%- end -%> - -Generated by :no_entry_sign: [Danger](https://danger.systems/ "generated_by_<%= @danger_id %>") diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/comment_generators/bitbucket_server_message_group.md.erb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/comment_generators/bitbucket_server_message_group.md.erb deleted file mode 100644 index 29646929..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/comment_generators/bitbucket_server_message_group.md.erb +++ /dev/null @@ -1,12 +0,0 @@ -<%- @message_group.messages.each do |message| -%> - <%- next if message.type == :markdown -%> -<%= @emoji_mapper.from_type(message.type) -%> <%= message.message %> - -<%- end -%> -<%- @resolved.each do |message| -%> -<%= @emoji_mapper.map("white_check_mark") %> <%= message %> -<%- end -%> - -<%= @message_group.markdowns.map(&:message).join("\n\n") %> - -Generated by :no_entry_sign: [Danger](https://danger.systems/ "generated_by_<%= @danger_id %>") diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/comment_generators/github.md.erb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/comment_generators/github.md.erb deleted file mode 100644 index 8467867a..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/comment_generators/github.md.erb +++ /dev/null @@ -1,55 +0,0 @@ - -<%- @tables.each do |table| -%> - <%- if table[:content].any? || table[:resolved].any? -%> - - - - - - - - - <%- max_num_violations = FindMaxNumViolations.new(table[:content]).call -%> - <%- table[:content].take(max_num_violations).each do |violation| -%> - - - - - <%- end -%> - <%- if table[:content].length > max_num_violations -%> - - - - - <%- end -%> - <%- table[:resolved].each do |message| -%> - - - - - <%- end -%> - -
    - <%- if table[:count] > 0 -%> - <%= pluralize(table[:name], table[:count]) %> - <%- else -%> - :white_check_mark: <%= random_compliment %> - <%- end -%> -
    :<%= table[:emoji] %>:<%= violation.message %>
    :warning: - Danger found <%= table[:content].length %> violations with this PR. Due to GitHub's max issue comment size, the number shown has been truncated to <%= max_num_violations %>. -
    :white_check_mark:<%= message %>
    - <%- end -%> -<%- end -%> - -<%- @markdowns.each do |current| -%> -<%= current %> -<%# the previous line has to be aligned far to the left, otherwise markdown can break easily %> -<%- end -%> -

    - Generated by :no_entry_sign: Danger -

    diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/comment_generators/github_inline.md.erb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/comment_generators/github_inline.md.erb deleted file mode 100644 index 351c0241..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/comment_generators/github_inline.md.erb +++ /dev/null @@ -1,26 +0,0 @@ -<%- @tables.each do |table| -%> - <%- if table[:content].any? -%> - - - <%- table[:content].each do |violation| -%> - - - - - <%- end -%> - -
    :<%= table[:emoji] %>:<%= "" if table[:resolved] %><%= violation.message %><%= "" if table[:resolved] %>
    - <%- end -%> -<%- end -%> - -<%- @markdowns.each do |current| -%> -<%= current %> -<%# the previous line has to be aligned far to the left, otherwise markdown can break easily %> -<%- end -%> -<%# We need to add the generated_by_ to identify comments from danger. But with inlines %> -<%# it might be a little annoying, so we set on the table, but if we have markdown we add the footer anyway %> -<%- if @markdowns.count > 0 -%> -

    - Generated by :no_entry_sign: Danger -

    -<%- end -%> diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/comment_generators/gitlab.md.erb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/comment_generators/gitlab.md.erb deleted file mode 100644 index b4e43db8..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/comment_generators/gitlab.md.erb +++ /dev/null @@ -1,40 +0,0 @@ -<%- @tables.each do |table| -%> - <%- if table[:content].any? || table[:resolved].any? -%> - - - - - - - - - <%- table[:content].each do |violation| -%> - - - - - <%- end -%> - <%- table[:resolved].each do |message| -%> - - - - - <%- end -%> - -
    - <%- if table[:count] > 0 -%> - <%= table[:count] %> <%= table[:name] %><%= "s" unless table[:count] == 1 %> - <%- else -%> - :white_check_mark: <%= random_compliment %> - <%- end -%> -
    :<%= table[:emoji] %>:<%= violation.message %>
    :white_check_mark:<%= message %>
    - <%- end -%> -<%- end -%> - -<%- @markdowns.each do |current| -%> -<%= current %> -<%# the previous line has to be aligned far to the left, otherwise markdown can break easily %> -<%- end -%> -

    - Generated by :no_entry_sign: Danger -

    diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/comment_generators/gitlab_inline.md.erb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/comment_generators/gitlab_inline.md.erb deleted file mode 100644 index eb1c718a..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/comment_generators/gitlab_inline.md.erb +++ /dev/null @@ -1,21 +0,0 @@ -<%- @tables.each do |table| -%> - <%- if table[:content].any? -%> - - - <%- table[:content].each do |violation| -%> - - - - - <%- end -%> - -
    :<%= table[:emoji] %>:<%= "" if table[:resolved] %><%= violation.message %><%= "" if table[:resolved] %>
    - <%- end -%> -<%- end -%> - -<%- @markdowns.each do |current| -%> -<%= current %> -<%# the previous line has to be aligned far to the left, otherwise markdown can break easily %> -<%- end -%> -<%# Add the generated_by_ as a html comment to identify comments from danger. %> - diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/comment_generators/vsts.md.erb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/comment_generators/vsts.md.erb deleted file mode 100644 index 6a086907..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/comment_generators/vsts.md.erb +++ /dev/null @@ -1,20 +0,0 @@ -<%- @tables.each do |table| -%> - <%- if table[:content].any? || table[:resolved].any? -%> -| | <%= table[:count] %> <%= table[:name] %><%= "s" unless table[:count] == 1 %> | -|---|---| - <%- table[:content].each do |violation| -%> -| <%= @emoji_mapper.map(table[:emoji]) %> | <%= violation.message %> | - <%- end -%> - <%- table[:resolved].each do |message| -%> -| @emoji_mapper.map("white_check_mark") | <%= message %> | - <%- end -%> - - <%- end -%> -<%- end -%> - -<%- @markdowns.each do |current| -%> -<%= current %> -<%# the previous line has to be aligned far to the left, otherwise markdown can break easily %> -<%- end -%> - -Generated by :no_entry_sign: [Danger](https://danger.systems/ "generated_by_<%= @danger_id %>") diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/comment_generators/vsts_inline.md.erb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/comment_generators/vsts_inline.md.erb deleted file mode 100644 index 318dc575..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/comment_generators/vsts_inline.md.erb +++ /dev/null @@ -1,17 +0,0 @@ -<%- @tables.each do |table| -%> - <%- if table[:content].any? || table[:resolved].any? -%> -| | | -|---|---| - <%- table[:content].each do |violation| -%> -| <%= @emoji_mapper.map(table[:emoji]) %> | <%= "~~" if table[:resolved] %><%= violation.message %><%= "~~" if table[:resolved] %> | - <%- end -%> - - <%- end -%> -<%- end -%> - -<%- @markdowns.each do |current| -%> -<%= current %> -<%# the previous line has to be aligned far to the left, otherwise markdown can break easily %> -<%- end -%> - -Generated by :no_entry_sign: [Danger](https://danger.systems/ "generated_by_<%= @danger_id %>") diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/core_ext/file_list.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/core_ext/file_list.rb deleted file mode 100644 index 5c1b5877..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/core_ext/file_list.rb +++ /dev/null @@ -1,18 +0,0 @@ -require "danger/helpers/array_subclass" - -module Danger - class FileList - include Helpers::ArraySubclass - - # Information about pattern: http://ruby-doc.org/core-2.2.0/File.html#method-c-fnmatch - # e.g. "**/something.*" for any file called something with any extension - def include?(pattern) - self.each do |current| - if !current.nil? && (File.fnmatch(pattern, current, File::FNM_EXTGLOB) || pattern == current) - return true - end - end - return false - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/core_ext/string.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/core_ext/string.rb deleted file mode 100644 index c434c51c..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/core_ext/string.rb +++ /dev/null @@ -1,20 +0,0 @@ -class String - # @return [String] the plural form of self determined by count - def danger_pluralize(count) - "#{count} #{self}#{'s' unless count == 1}" - end - - # @return [String] converts to underscored, lowercase form - def danger_underscore - self.gsub(/::/, "/".freeze). - gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2'.freeze). - gsub(/([a-z\d])([A-Z])/, '\1_\2'.freeze). - tr("-".freeze, "_".freeze). - downcase - end - - # @return [String] truncates string with ellipsis when exceeding the limit - def danger_truncate(limit) - length > limit ? "#{self[0...limit]}..." : self - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/dangerfile.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/dangerfile.rb deleted file mode 100644 index 6f53e82e..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/dangerfile.rb +++ /dev/null @@ -1,348 +0,0 @@ -# So much was ripped direct from CocoaPods-Core - thanks! - -require "danger/danger_core/dangerfile_dsl" -require "danger/danger_core/standard_error" -require "danger/danger_core/message_aggregator" - -require "danger/danger_core/plugins/dangerfile_messaging_plugin" -require "danger/danger_core/plugins/dangerfile_danger_plugin" -require "danger/danger_core/plugins/dangerfile_git_plugin" -require "danger/danger_core/plugins/dangerfile_github_plugin" -require "danger/danger_core/plugins/dangerfile_gitlab_plugin" -require "danger/danger_core/plugins/dangerfile_bitbucket_server_plugin" -require "danger/danger_core/plugins/dangerfile_bitbucket_cloud_plugin" -require "danger/danger_core/plugins/dangerfile_vsts_plugin" -require "danger/danger_core/plugins/dangerfile_local_only_plugin" - -module Danger - class Dangerfile - include Danger::Dangerfile::DSL - - attr_accessor :env, :verbose, :plugins, :ui - - # @return [Pathname] the path where the Dangerfile was loaded from. It is nil - # if the Dangerfile was generated programmatically. - # - attr_accessor :defined_in_file - - # @return [String] a string useful to represent the Dangerfile in a message - # presented to the user. - # - def to_s - "Dangerfile" - end - - # These are the classes that are allowed to also use method_missing - # in order to provide broader plugin support - def self.core_plugin_classes - [DangerfileMessagingPlugin] - end - - # The ones that everything would break without - def self.essential_plugin_classes - [DangerfileMessagingPlugin, DangerfileGitPlugin, DangerfileDangerPlugin, DangerfileGitHubPlugin, DangerfileGitLabPlugin, DangerfileBitbucketServerPlugin, DangerfileBitbucketCloudPlugin, DangerfileVSTSPlugin, DangerfileLocalOnlyPlugin] - end - - # Both of these methods exist on all objects - # http://ruby-doc.org/core-2.2.3/Kernel.html#method-i-warn - # http://ruby-doc.org/core-2.2.3/Kernel.html#method-i-fail - # However, as we're using using them in the DSL, they won't - # get method_missing called correctly without overriding them. - - def warn(*args, **kargs, &blk) - method_missing(:warn, *args, **kargs, &blk) - end - - def fail(*args, **kargs, &blk) - method_missing(:fail, *args, **kargs, &blk) - end - - # When an undefined method is called, we check to see if it's something - # that the core DSLs have, then starts looking at plugins support. - - def method_missing(method_sym, *arguments, **keyword_arguments, &_block) - @core_plugins.each do |plugin| - if plugin.public_methods(false).include?(method_sym) - if keyword_arguments.empty? - return plugin.send(method_sym, *arguments) - else - return plugin.send(method_sym, *arguments, **keyword_arguments) - end - end - end - super - end - - # cork_board not being set comes from plugins #585 - def initialize(env_manager, cork_board = nil) - @plugins = {} - @core_plugins = [] - @ui = cork_board || Cork::Board.new(silent: false, verbose: false) - - # Triggers the core plugins - @env = env_manager - - # Triggers local plugins from the root of a project - Dir["./danger_plugins/*.rb"].each do |file| - require File.expand_path(file) - end - - refresh_plugins if env_manager.pr? - end - - # Iterate through available plugin classes and initialize them with - # a reference to this Dangerfile - def refresh_plugins - plugins = Plugin.all_plugins - plugins.each do |klass| - next if klass.respond_to?(:singleton_class?) && klass.singleton_class? - - plugin = klass.new(self) - next if plugin.nil? || @plugins[klass] - - name = plugin.class.instance_name - self.class.send(:attr_reader, name) - instance_variable_set("@#{name}", plugin) - - @plugins[klass] = plugin - @core_plugins << plugin if self.class.core_plugin_classes.include? klass - end - end - alias init_plugins refresh_plugins - - def core_dsl_attributes - @core_plugins.map { |plugin| { plugin: plugin, methods: plugin.public_methods(false) } } - end - - def external_dsl_attributes - plugins.values.reject { |plugin| @core_plugins.include? plugin }.map { |plugin| { plugin: plugin, methods: plugin.public_methods(false) } } - end - - def method_values_for_plugin_hashes(plugin_hashes) - plugin_hashes.flat_map do |plugin_hash| - plugin = plugin_hash[:plugin] - methods = plugin_hash[:methods].select { |name| plugin.method(name).parameters.empty? } - - methods.map do |method| - case method - when :api - value = "Octokit::Client" - - when :pr_json, :mr_json - value = "[Skipped JSON]" - - when :pr_diff, :mr_diff - value = "[Skipped Diff]" - - else - value = plugin.send(method) - value = wrap_text(value.encode("utf-8")) if value.kind_of?(String) - # So that we either have one value per row - # or we have [] for an empty array - value = value.join("\n") if value.kind_of?(Array) && value.count > 0 - end - - [method.to_s, value] - end - end - end - - # Iterates through the DSL's attributes, and table's the output - def print_known_info - rows = [] - rows += method_values_for_plugin_hashes(core_dsl_attributes) - rows << ["---", "---"] - rows += method_values_for_plugin_hashes(external_dsl_attributes) - rows << ["---", "---"] - rows << ["SCM", env.scm.class] - rows << ["Source", env.ci_source.class] - rows << ["Requests", env.request_source.class] - rows << ["Base Commit", env.meta_info_for_base] - rows << ["Head Commit", env.meta_info_for_head] - - params = {} - params[:rows] = rows.each { |current| current[0] = current[0].yellow } - params[:title] = "Danger v#{Danger::VERSION}\nDSL Attributes".green - - ui.section("Info:") do - ui.puts - table = Terminal::Table.new(params) - table.align_column(0, :right) - ui.puts table - ui.puts - end - end - - # Parses the file at a path, optionally takes the content of the file for DI - # - def parse(path, contents = nil) - print_known_info if verbose - - contents ||= File.open(path, "r:utf-8", &:read) - - # Work around for Rubinius incomplete encoding in 1.9 mode - if contents.respond_to?(:encoding) && contents.encoding.name != "UTF-8" - contents.encode!("UTF-8") - end - - if contents.tr!("“”‘’‛", %(""''')) - # Changes have been made - ui.puts "Your #{path.basename} has had smart quotes sanitised. " \ - "To avoid issues in the future, you should not use " \ - "TextEdit for editing it. If you are not using TextEdit, " \ - "you should turn off smart quotes in your editor of choice.".red - end - - if contents.include?("puts") - ui.puts "You used `puts` in your Dangerfile. To print out text to GitHub use `message` instead" - end - - self.defined_in_file = path - instance_eval do - # rubocop:disable Lint/RescueException - - eval_file(contents, path) - rescue Exception => e - message = "Invalid `#{path.basename}` file: #{e.message}" - raise DSLError.new(message, path, e.backtrace, contents) - - # rubocop:enable Lint/RescueException - end - end - - def print_results - status = status_report - violations = violation_report - return if (violations[:errors] + violations[:warnings] + violations[:messages] + status[:markdowns]).count.zero? - - ui.section("Results:") do - %i(errors warnings messages).each do |key| - formatted = key.to_s.capitalize + ":" - title = case key - when :errors - formatted.red - when :warnings - formatted.yellow - else - formatted - end - rows = violations[key].uniq - print_list(title, rows) - end - - if status[:markdowns].count > 0 - ui.title("Markdown:") do - status[:markdowns].each do |current_markdown| - ui.puts "#{current_markdown.file}\#L#{current_markdown.line}" if current_markdown.file && current_markdown.line - ui.puts current_markdown.message - end - end - end - end - end - - def failed? - violation_report[:errors].count > 0 - end - - def post_results(danger_id, new_comment, remove_previous_comments) - violations = violation_report - report = { - warnings: violations[:warnings].uniq, - errors: violations[:errors].uniq, - messages: violations[:messages].uniq, - markdowns: status_report[:markdowns].uniq, - danger_id: danger_id - } - - if env.request_source.respond_to?(:update_pr_by_line!) && ENV["DANGER_MESSAGE_AGGREGATION"] - env.request_source.update_pr_by_line!(message_groups: MessageAggregator.aggregate(**report), - new_comment: new_comment, - remove_previous_comments: remove_previous_comments, - danger_id: report[:danger_id]) - else - env.request_source.update_pull_request!( - **report, - new_comment: new_comment, - remove_previous_comments: remove_previous_comments - ) - end - end - - def setup_for_running(base_branch, head_branch) - env.ensure_danger_branches_are_setup - env.scm.diff_for_folder(".".freeze, from: base_branch, to: head_branch, lookup_top_level: true) - end - - def run(base_branch, head_branch, dangerfile_path, danger_id, new_comment, remove_previous_comments, report_results = true) - # Setup internal state - init_plugins - env.fill_environment_vars - - begin - # Sets up the git environment - setup_for_running(base_branch, head_branch) - - # Parse the local Dangerfile - parse(Pathname.new(dangerfile_path)) - - # Push results to the API - # Pass along the details of the run to the request source - # to send back to the code review site. - post_results(danger_id, new_comment, remove_previous_comments) if report_results - - # Print results in the terminal - print_results - rescue DSLError => e - # Push exception to the API and re-raise - post_exception(e, danger_id, new_comment) unless danger_id.nil? - raise - ensure - # Makes sure that Danger specific git branches are cleaned - env.clean_up - end - - failed? - end - - private - - def eval_file(contents, path) - eval(contents, nil, path.to_s) # rubocop:disable Security/Eval - end - - def print_list(title, rows) - unless rows.empty? - ui.title(title) do - rows.each do |row| - if row.file && row.line - path = "#{row.file}\#L#{row.line}: " - else - path = "" - end - - ui.puts("- [ ] #{path}#{row.message}") - end - end - end - end - - def wrap_text(text, width = 80) - text.gsub(/.{,#{width}}/) do |line| - line.strip! - "#{line}\n" - end - end - - def post_exception(ex, danger_id, new_comment) - return if ENV["DANGER_DO_NOT_POST_INVALID_DANGERFILE_ERROR"] - return if danger_id.nil? - - env.request_source.update_pull_request!( - danger_id: danger_id, - new_comment: new_comment, - markdowns: [ex.to_markdown] - ) - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/dangerfile_dsl.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/dangerfile_dsl.rb deleted file mode 100644 index be320f8c..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/dangerfile_dsl.rb +++ /dev/null @@ -1,29 +0,0 @@ -module Danger - class Dangerfile - # Anything inside this module is considered public API, and in the future - # documentation will be generated from it via rdoc. - - module DSL - # @!group Danger Zone - # Provides access to the raw Travis/Circle/Buildkite/GitHub objects, which - # you can use to pull out extra bits of information. _Warning_ - # the interfaces of these objects is **not** considered a part of the Dangerfile public - # API, and is viable to change occasionally on the whims of developers. - # @return [EnvironmentManager] - - attr_reader :env - - private - - def initialize - load_default_plugins - end - - def load_default_plugins - Dir["./danger_plugins/*.rb"].each do |file| - require File.expand_path(file) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/dangerfile_generator.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/dangerfile_generator.rb deleted file mode 100644 index fe2c8135..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/dangerfile_generator.rb +++ /dev/null @@ -1,11 +0,0 @@ -module Danger - class DangerfileGenerator - # returns the string for a Dangerfile based on a folder's contents' - def self.create_dangerfile(_path, _ui) - # Use this template for now, but this is a really ripe place to - # improve now! - dir = Danger.gem_path - File.read(File.join(dir, "lib", "assets", "DangerfileTemplate")) - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/environment_manager.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/environment_manager.rb deleted file mode 100644 index efe5c0cd..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/environment_manager.rb +++ /dev/null @@ -1,126 +0,0 @@ -require "danger/ci_source/ci_source" -require "danger/request_sources/request_source" - -module Danger - class EnvironmentManager - attr_accessor :ci_source, :request_source, :scm, :ui, :danger_id - - # Finds a Danger::CI class based on the ENV - def self.local_ci_source(env) - CI.available_ci_sources.find { |ci| ci.validates_as_ci? env } - end - - # Uses the current Danger::CI subclass, and sees if it is a PR - def self.pr?(env) - local_ci_source(env).validates_as_pr?(env) - end - - # @return [String] danger's default head branch - def self.danger_head_branch - "danger_head".freeze - end - - # @return [String] danger's default base branch - def self.danger_base_branch - "danger_base".freeze - end - - def initialize(env, ui = nil, danger_id = "danger") - ci_klass = self.class.local_ci_source(env) - self.ci_source = ci_klass.new(env) - self.ui = ui || Cork::Board.new(silent: false, verbose: false) - self.danger_id = danger_id - - RequestSources::RequestSource.available_request_sources.each do |klass| - next unless self.ci_source.supports?(klass) - - request_source = klass.new(self.ci_source, env) - next unless request_source.validates_as_ci? - next unless request_source.validates_as_api_source? - - self.request_source = request_source - end - - raise_error_for_no_request_source(env, self.ui) unless self.request_source - self.scm = self.request_source.scm - end - - def pr? - self.ci_source != nil - end - - def fill_environment_vars - request_source.fetch_details - end - - def ensure_danger_branches_are_setup - clean_up - - self.request_source.setup_danger_branches - end - - def clean_up - [EnvironmentManager.danger_base_branch, EnvironmentManager.danger_head_branch].each do |branch| - scm.exec("branch -D #{branch}") unless scm.exec("rev-parse --quiet --verify #{branch}").empty? - end - end - - def meta_info_for_head - scm.exec("--no-pager log #{EnvironmentManager.danger_head_branch} -n1") - end - - def meta_info_for_base - scm.exec("--no-pager log #{EnvironmentManager.danger_base_branch} -n1") - end - - def raise_error_for_no_request_source(env, ui) - title, subtitle = extract_title_and_subtitle_from_source(ci_source.repo_url) - subtitle += travis_note if env["TRAVIS_SECURE_ENV_VARS"] == "true" - - ui_display_no_request_source_error_message(ui, env, title, subtitle) - - exit(1) - end - - private - - def get_repo_source(repo_url) - if repo_url =~ /github/i - RequestSources::GitHub - elsif repo_url =~ /gitlab/i - RequestSources::GitLab - elsif repo_url =~ /bitbucket\.(org|com)/i - RequestSources::BitbucketCloud - elsif repo_url =~ /\.visualstudio\.com/i || repo_url =~ /dev\.azure\.com/i - RequestSources::VSTS - end - end - - def extract_title_and_subtitle_from_source(repo_url) - source = get_repo_source(repo_url) - - if source - title = "For your #{source.source_name} repo, you need to expose: " + source.env_vars.join(", ").yellow - subtitle = "You may also need: #{source.optional_env_vars.join(', ')}" if source.optional_env_vars.any? - else - title = "For Danger to run on this project, you need to expose a set of following the ENV vars:\n#{RequestSources::RequestSource.available_source_names_and_envs.join("\n")}" - end - - [title, (subtitle || "")] - end - - def ui_display_no_request_source_error_message(ui, env, title, subtitle) - ui.title "Could not set up API to Code Review site for Danger\n".freeze - ui.puts title - ui.puts subtitle - ui.puts "\nFound these keys in your ENV: #{env.keys.join(', '.freeze)}." - ui.puts "\nFailing the build, Danger cannot run without API access.".freeze - ui.puts "You can see more information at https://danger.systems/guides/getting_started.html".freeze - end - - def travis_note - "\nTravis note: If you have an open source project, you should ensure 'Display value in build log' enabled for these flags, so that PRs from forks work." \ - "\nThis also means that people can see this token, so this account should have no write access to repos." - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/executor.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/executor.rb deleted file mode 100644 index 3b81d966..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/executor.rb +++ /dev/null @@ -1,91 +0,0 @@ -module Danger - class Executor - def initialize(system_env) - @system_env = system_env - end - - def run(env: nil, - dm: nil, - cork: nil, - base: nil, - head: nil, - dangerfile_path: nil, - danger_id: nil, - new_comment: nil, - fail_on_errors: nil, - fail_if_no_pr: nil, - remove_previous_comments: nil) - # Create a silent Cork instance if cork is nil, as it's likely a test - cork ||= Cork::Board.new(silent: false, verbose: false) - - # Run some validations - validate!(cork, fail_if_no_pr: fail_if_no_pr) - - # OK, we now know that Danger can run in this environment - env ||= EnvironmentManager.new(system_env, cork, danger_id) - dm ||= Dangerfile.new(env, cork) - - ran_status = dm.run( - base_branch(base), - head_branch(head), - dangerfile_path, - danger_id, - new_comment, - remove_previous_comments - ) - - # By default Danger will use the status API to fail a build, - # allowing execution to continue, this behavior isn't always - # optimal for everyone. - exit(1) if fail_on_errors && ran_status - end - - def validate!(cork, fail_if_no_pr: false) - validate_ci! - validate_pr!(cork, fail_if_no_pr) - end - - private - - attr_reader :system_env - - # Could we find a CI source at all? - def validate_ci! - unless EnvironmentManager.local_ci_source(system_env) - abort("Could not find the type of CI for Danger to run on.".red) - end - end - - # Could we determine that the CI source is inside a PR? - def validate_pr!(cork, fail_if_no_pr) - unless EnvironmentManager.pr?(system_env) - ci_name = EnvironmentManager.local_ci_source(system_env).name.split("::").last - - msg = "Not a #{ci_name} #{commit_request(ci_name)} - skipping `danger` run. " - # circle won't run danger properly if the commit is pushed and build runs before the PR exists - # https://danger.systems/guides/troubleshooting.html#circle-ci-doesnt-run-my-build-consistently - # the best solution is to enable `fail_if_no_pr`, and then re-run the job once the PR is up - if ci_name == "CircleCI" - msg << "If you only created the PR recently, try re-running your workflow." - end - cork.puts msg.strip.yellow - - exit(fail_if_no_pr ? 1 : 0) - end - end - - def base_branch(user_specified_base_branch) - user_specified_base_branch || EnvironmentManager.danger_base_branch - end - - def head_branch(user_specified_head_branch) - user_specified_head_branch || EnvironmentManager.danger_head_branch - end - - def commit_request(ci_name) - return "Merge Request" if ci_name == "GitLabCI" - - return "Pull Request" - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/message_aggregator.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/message_aggregator.rb deleted file mode 100644 index d8f14256..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/message_aggregator.rb +++ /dev/null @@ -1,50 +0,0 @@ -# frozen_string_literal: true - -require "danger/danger_core/message_group" -require "danger/helpers/message_groups_array_helper" - -module Danger - class MessageAggregator - def self.aggregate(*args, **kwargs) - new(*args, **kwargs).aggregate - end - - def initialize(warnings: [], - errors: [], - messages: [], - markdowns: [], - danger_id: "danger") - @messages = warnings + errors + messages + markdowns - @danger_id = danger_id - end - - # aggregates the messages into an array of MessageGroups - # @return [[MessageGroup]] - def aggregate - # oookay I took some shortcuts with this one. - # first, sort messages by file and line - @messages.sort! { |a, b| a.compare_by_file_and_line(b) } - - # now create an initial empty message group - first_group = MessageGroup.new(file: nil, - line: nil) - @message_groups = @messages.reduce([first_group]) do |groups, msg| - # We get to take a shortcut because we sorted the messages earlier - only - # have to see if we can append msg to the last group in the list - if groups.last << msg - # we appended it, so return groups unchanged - groups - else - # have to create a new group since msg wasn't appended to the other - # group - new_group = MessageGroup.new(file: msg.file, - line: msg.line) - new_group << msg - groups << new_group - end - end - - @message_groups.extend(Helpers::MessageGroupsArrayHelper) - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/message_group.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/message_group.rb deleted file mode 100644 index a77264e9..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/message_group.rb +++ /dev/null @@ -1,68 +0,0 @@ -# frozen_string_literal: true - -module Danger - class MessageGroup - def initialize(file: nil, line: nil) - @file = file - @line = line - end - - # Returns whether this `MessageGroup` is for the same line of code as - # `other`, taking which file they are in to account. - # @param other [MessageGroup, Markdown, Violation] - # @return [Boolean] whether this `MessageGroup` is for the same line of code - def same_line?(other) - other.file == file && other.line == line - end - - # Merges two `MessageGroup`s that represent the same line of code - # In future, perhaps `MessageGroup` will be able to represent a group of - # messages for multiple lines. - def merge(other) - raise ArgumentError, "Cannot merge with MessageGroup for a different line" unless same_line?(other) - - @messages = (messages + other.messages).uniq - end - - # Adds a message to the group. - # @param message [Markdown, Violation] the message to add - def <<(message) - # TODO: insertion sort - return nil unless same_line?(message) - - inserted = false - messages.each.with_index do |other, idx| - if (message <=> other) == -1 - inserted = true - messages.insert(idx, message) - break - end - end - messages << message unless inserted - messages - end - - # The list of messages in this group. This list will be sorted in decreasing - # order of severity (error, warning, message, markdown) - def messages - @messages ||= [] - end - - attr_reader :file, :line - - # @return a hash of statistics. Currently only :warnings_count and - # :errors_count - def stats - stats = { warnings_count: 0, errors_count: 0 } - messages.each do |msg| - stats[:warnings_count] += 1 if msg.type == :warning - stats[:errors_count] += 1 if msg.type == :error - end - stats - end - - def markdowns - messages.select { |x| x.type == :markdown } - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/messages/base.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/messages/base.rb deleted file mode 100644 index 6c6a1f15..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/messages/base.rb +++ /dev/null @@ -1,57 +0,0 @@ -module Danger - class BaseMessage - attr_accessor :message, :file, :line, :type - - def initialize(type:, message:, file: nil, line: nil) - @type = type - @message = message - @file = file - @line = line - end - - def compare_by_file_and_line(other) - order = cmp_nils(file, other.file) - return order unless order.nil? - - order = file <=> other.file - return order unless order.zero? - - order = cmp_nils(line, other.line) - return order unless order.nil? - - line <=> other.line - end - - # compares a and b based entirely on whether one or the other is nil - # arguments are in the same order as `a <=> b` - # nil is sorted earlier - so cmp_nils(nil, 1) => -1 - # - # If neither are nil, rather than returning `a <=> b` which would seem - # like the obvious shortcut, `nil` is returned. - # This allows us to distinguish between cmp_nils returning 0 for a - # comparison of filenames, which means "a comparison on the lines is - # meaningless - you cannot have a line number for a nil file - so they - # should be sorted the same", and a <=> b returning 0, which means "the - # files are the same, so compare on the lines" - # - # @return 0, 1, -1, or nil - def cmp_nils(a, b) - if a.nil? && b.nil? - 0 - elsif a.nil? - -1 - elsif b.nil? - 1 - end - end - - def eql?(other) - return self == other - end - - # @return [Boolean] returns true if is a file or line, false otherwise - def inline? - file || line - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/messages/markdown.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/messages/markdown.rb deleted file mode 100644 index 1ab05265..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/messages/markdown.rb +++ /dev/null @@ -1,41 +0,0 @@ -# frozen_string_literal: true - -require "danger/danger_core/messages/base" - -module Danger - class Markdown < BaseMessage - def initialize(message, file = nil, line = nil) - super(type: :markdown, message: message, file: file, line: line) - end - - def ==(other) - return false if other.nil? - return false unless other.kind_of? self.class - - other.message == message && - other.file == file && - other.line == line - end - - def hash - h = 1 - h = h * 31 + message.hash - h = h * 17 + file.hash - h * 17 + line.hash - end - - def to_s - extra = [] - extra << "file: #{file}" unless file - extra << "line: #{line}" unless line - - "Markdown #{message} { #{extra.join ', '} }" - end - - def <=>(other) - return 1 if other.type != :markdown - - compare_by_file_and_line(other) - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/messages/violation.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/messages/violation.rb deleted file mode 100644 index 3d32c779..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/messages/violation.rb +++ /dev/null @@ -1,53 +0,0 @@ -# frozen_string_literal: true - -require "danger/danger_core/messages/base" - -module Danger - class Violation < BaseMessage - VALID_TYPES = %I[error warning message].freeze - attr_accessor :sticky - - def initialize(message, sticky, file = nil, line = nil, type: :warning) - raise ArgumentError unless VALID_TYPES.include?(type) - - super(type: type, message: message, file: file, line: line) - self.sticky = sticky - end - - def ==(other) - return false if other.nil? - return false unless other.kind_of? self.class - - other.message == message && - other.sticky == sticky && - other.file == file && - other.line == line - end - - def hash - h = 1 - h = h * 31 + message.hash - h = h * 13 + sticky.hash - h = h * 17 + file.hash - h * 17 + line.hash - end - - def <=>(other) - types = VALID_TYPES + [:markdown] - order = types.index(type) <=> types.index(other.type) - return order unless order.zero? - - compare_by_file_and_line(other) - end - - def to_s - extra = [] - extra << "sticky: #{sticky}" - extra << "file: #{file}" if file - extra << "line: #{line}" if line - extra << "type: #{type}" - - "Violation #{message} { #{extra.join ', '} }" - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/plugins/dangerfile_bitbucket_cloud_plugin.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/plugins/dangerfile_bitbucket_cloud_plugin.rb deleted file mode 100644 index af70fa31..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/plugins/dangerfile_bitbucket_cloud_plugin.rb +++ /dev/null @@ -1,142 +0,0 @@ -require "danger/plugin_support/plugin" - -module Danger - # Handles interacting with Bitbucket Cloud inside a Dangerfile. Provides a few functions which wrap `pr_json` and also - # through a few standard functions to simplify your code. - # - # @example Warn when a PR is classed as work in progress - # - # warn "PR is classed as Work in Progress" if bitbucket_cloud.pr_title.include? "[WIP]" - # - # @example Declare a PR to be simple to avoid specific Danger rules - # - # declared_trivial = (bitbucket_cloud.pr_title + bitbucket_cloud.pr_body).include?("#trivial") - # - # @example Ensure that labels have been used on the PR - # - # failure "Please add labels to this PR" if bitbucket_cloud.pr_labels.empty? - # - # @example Ensure there is a summary for a PR - # - # failure "Please provide a summary in the Pull Request description" if bitbucket_cloud.pr_body.length < 5 - # - # @example Only accept PRs to the develop branch - # - # failure "Please re-submit this PR to develop, we may have already fixed your issue." if bitbucket_cloud.branch_for_base != "develop" - # - # @example Highlight when a celebrity makes a pull request - # - # message "Welcome, Danger." if bitbucket_cloud.pr_author == "dangermcshane" - # - # @example Ensure that all PRs have an assignee - # - # warn "This PR does not have any assignees yet." if bitbucket_cloud.pr_json[:reviewers].length == 0 - # - # @example Send a message with links to a collection of specific files - # - # if git.modified_files.include? "config/*.js" - # config_files = git.modified_files.select { |path| path.include? "config/" } - # message "This PR changes #{ bitbucket_cloud.html_link(config_files) }" - # end - # - # @example Highlight with a clickable link if a Package.json is changed - # - # warn "#{bitbucket_cloud.html_link("Package.json")} was edited." if git.modified_files.include? "Package.json" - # - # @see danger/danger - # @tags core, bitbucket_cloud - # - class DangerfileBitbucketCloudPlugin < Plugin - # So that this init can fail. - def self.new(dangerfile) - return nil if dangerfile.env.request_source.class != Danger::RequestSources::BitbucketCloud - - super - end - - # The instance name used in the Dangerfile - # @return [String] - # - def self.instance_name - "bitbucket_cloud" - end - - def initialize(dangerfile) - super(dangerfile) - @bs = dangerfile.env.request_source - end - - # @!group Bitbucket Cloud Misc - # The hash that represents the PR's JSON. For an example of what this looks like - # see the [Danger Fixture'd one](https://raw.githubusercontent.com/danger/danger/master/spec/fixtures/bitbucket_cloud_api/pr_response.json). - # @return [Hash] - def pr_json - @bs.pr_json - end - - # @!group PR Metadata - # The title of the Pull Request. - # @return [String] - # - def pr_title - @bs.pr_json[:title].to_s - end - - # @!group PR Metadata - # The body text of the Pull Request. - # @return [String] - # - def pr_description - @bs.pr_json[:description].to_s - end - alias pr_body pr_description - - # @!group PR Metadata - # The username of the author of the Pull Request. - # @return [String] - # - def pr_author - @bs.pr_json[:author][:nickname] - end - - # @!group PR Commit Metadata - # The branch to which the PR is going to be merged into. - # @return [String] - # - def branch_for_base - @bs.pr_json[:destination][:branch][:name] - end - - # @!group PR Commit Metadata - # A href that represents the current PR - # @return [String] - # - def pr_link - @bs.pr_json[:links][:self][:href] - end - - # @!group PR Commit Metadata - # The branch to which the PR is going to be merged from. - # @return [String] - # - def branch_for_head - @bs.pr_json[:source][:branch][:name] - end - - # @!group PR Commit Metadata - # The base commit to which the PR is going to be merged as a parent. - # @return [String] - # - def base_commit - @bs.pr_json[:destination][:commit][:hash] - end - - # @!group PR Commit Metadata - # The head commit to which the PR is requesting to be merged from. - # @return [String] - # - def head_commit - @bs.pr_json[:source][:commit][:hash] - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/plugins/dangerfile_bitbucket_server_plugin.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/plugins/dangerfile_bitbucket_server_plugin.rb deleted file mode 100644 index 922708e6..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/plugins/dangerfile_bitbucket_server_plugin.rb +++ /dev/null @@ -1,211 +0,0 @@ -require "danger/plugin_support/plugin" - -module Danger - # Handles interacting with Bitbucket Server inside a Dangerfile. Provides a few functions which wrap `pr_json` and also - # through a few standard functions to simplify your code. - # - # @example Warn when a PR is classed as work in progress - # - # warn "PR is classed as Work in Progress" if bitbucket_server.pr_title.include? "[WIP]" - # - # @example Declare a PR to be simple to avoid specific Danger rules - # - # declared_trivial = (bitbucket_server.pr_title + bitbucket_server.pr_body).include?("#trivial") - # - # @example Ensure that labels have been used on the PR - # - # failure "Please add labels to this PR" if bitbucket_server.pr_labels.empty? - # - # @example Ensure there is a summary for a PR - # - # failure "Please provide a summary in the Pull Request description" if bitbucket_server.pr_body.length < 5 - # - # @example Only accept PRs to the develop branch - # - # failure "Please re-submit this PR to develop, we may have already fixed your issue." if bitbucket_server.branch_for_base != "develop" - # - # @example Highlight when a celebrity makes a pull request - # - # message "Welcome, Danger." if bitbucket_server.pr_author == "dangermcshane" - # - # @example Ensure that all PRs have an assignee - # - # warn "This PR does not have any assignees yet." if bitbucket_server.pr_json[:reviewers].length == 0 - # - # @example Send a message with links to a collection of specific files - # - # if git.modified_files.include? "config/*.js" - # config_files = git.modified_files.select { |path| path.include? "config/" } - # message "This PR changes #{ bitbucket_server.html_link(config_files) }" - # end - # - # @example Highlight with a clickable link if a Package.json is changed - # - # warn "#{bitbucket_server.html_link("Package.json")} was edited." if git.modified_files.include? "Package.json" - # - # @see danger/danger - # @tags core, bitbucket_server - # - class DangerfileBitbucketServerPlugin < Plugin - # So that this init can fail. - def self.new(dangerfile) - return nil if dangerfile.env.request_source.class != Danger::RequestSources::BitbucketServer - - super - end - - # The instance name used in the Dangerfile - # @return [String] - # - def self.instance_name - "bitbucket_server" - end - - def initialize(dangerfile) - super(dangerfile) - @bs = dangerfile.env.request_source - end - - # @!group Bitbucket Server Misc - # The hash that represents the PR's JSON. For an example of what this looks like - # see the [Danger Fixture'd one](https://raw.githubusercontent.com/danger/danger/master/spec/fixtures/bitbucket_server_api/pr_response.json). - # @return [Hash] - def pr_json - @bs.pr_json - end - - # @!group PR Metadata - # The title of the Pull Request. - # @return [String] - # - def pr_title - @bs.pr_json[:title].to_s - end - - # @!group PR Metadata - # The body text of the Pull Request. - # @return [String] - # - def pr_description - @bs.pr_json[:description].to_s - end - alias pr_body pr_description - - # @!group PR Metadata - # The username of the author of the Pull Request. - # @return [String] - # - def pr_author - @bs.pr_json[:author][:user][:slug].to_s - end - - # @!group PR Commit Metadata - # The branch to which the PR is going to be merged into. - # @return [String] - # - def branch_for_base - @bs.pr_json[:toRef][:displayId].to_s - end - - # @!group PR Commit Metadata - # A href that represents the current PR - # @return [String] - # - def pr_link - @bs.pr_json[:links][:self].flat_map { |l| l[:href] }.first.to_s - end - - # @!group PR Commit Metadata - # The branch to which the PR is going to be merged from. - # @return [String] - # - def branch_for_head - @bs.pr_json[:fromRef][:displayId].to_s - end - - # @!group PR Commit Metadata - # The base commit to which the PR is going to be merged as a parent. - # @return [String] - # - def base_commit - @bs.pr_json[:toRef][:latestCommit].to_s - end - - # @!group PR Commit Metadata - # The head commit to which the PR is requesting to be merged from. - # @return [String] - # - def head_commit - @bs.pr_json[:fromRef][:latestCommit].to_s - end - - # @!group Bitbucket Server Misc - # Returns a list of Markdown links for a file, or files in the head repository. - # It returns a string of multiple anchors if passed an array. - # @note Atlassian [disabled inline HTML support](https://jira.atlassian.com/browse/BSERV-7147). - # This method method left for backward compatibility. - # @param [String or Array] paths - # A list of strings to convert to github anchors - # @param [Bool] full_path - # Shows the full path as the link's text, defaults to `true`. - # - # @return [String] - # - def html_link(paths, full_path: true) - markdown_link(paths, full_path: full_path) - end - - # @!group Bitbucket Server Misc - # Returns a list of Markdown links for a file, or files in the head repository. - # It returns a string of multiple links if passed an array. - # @param [String or Array] paths - # A list of strings to convert to Markdown links - # @param [Bool] full_path - # Shows the full path as the link's text, defaults to `true`. - # - # @return [String] - # - def markdown_link(paths, full_path: true) - create_link(paths, full_path) { |href, text| create_markdown_link(href, text) } - end - - # @!group Bitbucket Server Misc - # Updates the PR with build status and build server job link. - # @param [String] status - # SUCCESSFUL, FAILED and INPROGRESS - # @param [String] build_job_link - # Build server job link - # @param [String] description - # Build status description - # @return [String] - # - def update_pr_build_status(status, build_job_link, description) - @bs.update_pr_build_status(status, build_job_link, description) - end - - private - - def create_link(paths, full_path) - paths = [paths] unless paths.kind_of?(Array) - commit = head_commit - repo = pr_json[:fromRef][:repository][:links][:self].flat_map { |l| l[:href] }.first - - paths = paths.map do |path| - path, line = path.split("#") - url_path = path.start_with?("/") ? path : "/#{path}" - text = full_path ? path : File.basename(path) - url_path.gsub!(" ", "%20") - line_ref = line ? "##{line}" : "" - yield("#{repo}#{url_path}?at=#{commit}#{line_ref}", text) - end - - return paths.first if paths.count < 2 - - paths.first(paths.count - 1).join(", ") + " & " + paths.last - end - - def create_markdown_link(href, text) - "[#{text}](#{href})" - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/plugins/dangerfile_danger_plugin.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/plugins/dangerfile_danger_plugin.rb deleted file mode 100644 index e66e714b..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/plugins/dangerfile_danger_plugin.rb +++ /dev/null @@ -1,274 +0,0 @@ -require "danger/plugin_support/plugin" - -module Danger - # A way to interact with Danger herself. Offering APIs to import plugins, - # and Dangerfiles from multiple sources. - # - # @example Import a plugin available over HTTP - # - # device_grid = "https://raw.githubusercontent.com/fastlane/fastlane/master/danger-device_grid/lib/device_grid/plugin.rb" - # danger.import_plugin(device_grid) - # - # @example Import from a local file reference - # - # danger.import_plugin("danger/plugins/watch_plugin.rb") - # - # @example Import all files inside a folder - # - # danger.import_plugin("danger/plugins/*.rb") - # - # @example Run a Dangerfile from inside a sub-folder - # - # danger.import_dangerfile(path: "path/to/Dangerfile") - # - # @example Run a Dangerfile from inside a gem - # - # danger.import_dangerfile(gem: "ruby-grape-danger") - # - # @example Run a Dangerfile from inside a repo - # - # danger.import_dangerfile(gitlab_project_id: 1345) - # - # @example Run a Dangerfile from inside a repo branch and path - # - # danger.import_dangerfile(github: "ruby-grape/danger", branch: "custom", path: "path/to/Dangerfile") - # - # @example Import a plugin available over HTTP - # - # custom_url = "https://custom.bitbucket.com/project-name/Dangerfile?raw" - # danger.import_dangerfile(url: custom_url) - # - # @see danger/danger - # @tags core, plugins - - class DangerfileDangerPlugin < Plugin - # The instance name used in the Dangerfile - # @return [String] - # - def self.instance_name - "danger" - end - - # @!group Danger - # Download a local or remote plugin and make it usable inside the Dangerfile. - # - # @param [String] path_or_url - # a local path or a https URL to the Ruby file to import - # a danger plugin from. - # @return [void] - # - def import_plugin(path_or_url) - raise "`import_plugin` requires a string" unless path_or_url.kind_of?(String) - - if path_or_url.start_with?("http") - import_url(path_or_url) - else - import_local(path_or_url) - end - end - - # @!group Danger - # Import a Dangerfile. - # - # @param [Hash] opts - # @option opts [String] :github GitHub repo - # @option opts [String] :gitlab GitLab repo - # @option opts [String] :gem Gem name - # @option opts [String] :ref The name of branch, tag or commit - # @option opts [String] :branch Alias of :ref - # @option opts [String] :path Path to Dangerfile - # @return [void] - def import_dangerfile(opts) - if opts.kind_of?(String) - warn "Use `import_dangerfile(github: '#{opts}')` instead of `import_dangerfile '#{opts}'`." - import_dangerfile_from_github(opts) - elsif opts.kind_of?(Hash) - if opts.key?(:github) - import_dangerfile_from_github(opts[:github], opts[:ref] || opts[:branch], opts[:path]) - elsif opts.key?(:gitlab) - import_dangerfile_from_gitlab(opts[:gitlab], opts[:ref] || opts[:branch], opts[:path]) - elsif opts.key?(:path) - import_dangerfile_from_path(opts[:path]) - elsif opts.key?(:gem) - import_dangerfile_from_gem(opts[:gem]) - elsif opts.key?(:url) - import_dangerfile_from_url(opts[:url]) - else - raise "`import` requires a Hash with either :github, :gitlab, :gem, :path or :url" - end - else - raise "`import` requires a Hash" - end - end - - # @!group Danger - # Returns the name of the current SCM Provider being used. - # @return [Symbol] The name of the SCM Provider used for the active repository. - def scm_provider - return :unknown unless env.request_source - - case env.request_source - when Danger::RequestSources::GitHub - :github - when Danger::RequestSources::GitLab - :gitlab - when Danger::RequestSources::BitbucketServer - :bitbucket_server - when Danger::RequestSources::BitbucketCloud - :bitbucket_cloud - when Danger::RequestSources::VSTS - :vsts - else - :unknown - end - end - - private - - # @!group Danger - # Read and execute a local Dangerfile. - # - # @param [String] path - # A path to a Dangerfile. - # @return [void] - # - def import_dangerfile_from_path(path) - raise "`import_dangerfile_from_path` requires a string" unless path.kind_of?(String) - - local_path = File.file?(path) ? path : File.join(path, "Dangerfile") - @dangerfile.parse(Pathname.new(local_path)) - end - - # @!group Danger - # Read and execute a Dangerfile from a gem. - # - # @param [String] name - # The name of the gem that contains a Dangerfile. - # @return [void] - # - def import_dangerfile_from_gem(name) - raise "`import_dangerfile_from_gem` requires a string" unless name.kind_of?(String) - - spec = Gem::Specification.find_by_name(name) - import_dangerfile_from_path(spec.gem_dir) - rescue Gem::MissingSpecError - raise "`import_dangerfile_from_gem` tried to load `#{name}` and failed, did you forget to include it in your Gemfile?" - end - - # @!group Danger - # Download and execute a remote Dangerfile. - # - # @param [String] slug - # A slug that represents the repo where the Dangerfile is. - # @param [String] branch - # A branch from repo where the Dangerfile is. - # @param [String] path - # The path at the repo where Dangerfile is. - # @return [void] - # - def import_dangerfile_from_github(slug, branch = nil, path = nil) - raise "`import_dangerfile_from_github` requires a string" unless slug.kind_of?(String) - - org, repo = slug.split("/") - download_url = env.request_source.file_url(organisation: org, repository: repo, branch: branch, path: path || "Dangerfile") - local_path = download(download_url) - @dangerfile.parse(Pathname.new(local_path)) - end - - # @!group Danger - # Download and execute a remote Dangerfile. - # - # @param [Int] slug_or_project_id - # The slug or id of the repo where the Dangerfile is. - # @param [String] branch - # A branch from repo where the Dangerfile is. - # @param [String] path - # The path at the repo where Dangerfile is. - # @return [void] - # - def import_dangerfile_from_gitlab(slug_or_project_id, branch = nil, path = nil) - download_url = env.request_source.file_url(repository: slug_or_project_id, branch: branch, path: path || "Dangerfile") - local_path = download(download_url) - @dangerfile.parse(Pathname.new(local_path)) - end - - # @!group Danger - # Download and execute a remote Dangerfile. - # - # @param [String] url - # A https url where the Dangerfile is. - # @return [void] - # - def import_dangerfile_from_url(url) - raise "`import_dangerfile_from_url` requires a string" unless url.kind_of?(String) - - local_path = download(url) - @dangerfile.parse(Pathname.new(local_path)) - end - - # @!group Plugins - # Download a local or remote plugin or Dangerfile. - # This method will not import the file for you, use plugin.import instead - # - # @param [String] path_or_url - # a local path or a https URL to the Ruby file to import - # a danger plugin from. - # @return [String] The path to the downloaded Ruby file - # - def download(path_or_url) - raise "`download` requires a string" unless path_or_url.kind_of?(String) - raise "URL is not https, for security reasons `danger` only supports encrypted requests" if URI.parse(path_or_url).scheme != "https" - - require "tmpdir" - require "faraday" - - @http_client ||= Faraday.new do |b| - b.adapter :net_http - end - content = @http_client.get(path_or_url) - - path = File.join(Dir.mktmpdir, "temporary_danger.rb") - File.write(path, content.body) - return path - end - - # @!group Plugins - # Download a remote plugin and use it locally. - # - # @param [String] url - # https URL to the Ruby file to use - # @return [void] - def import_url(url) - path = download(url) - import_local(path) - end - - # @!group Plugins - # Import one or more local plugins. - # - # @param [String] path - # The path to the file to import - # Can also be a pattern (./**/*plugin.rb) - # @return [void] - def import_local(path) - Dir[path].each do |file| - validate_file_contains_plugin!(file) do - # Without the expand_path it would fail if the path doesn't start with ./ - require File.expand_path(file) - end - - refresh_plugins - end - end - - # Raises an error when the given block does not register a plugin. - def validate_file_contains_plugin!(file) - plugin_count_was = Danger::Plugin.all_plugins.length - yield - - if Danger::Plugin.all_plugins.length == plugin_count_was - raise("#{file} doesn't contain any valid danger plugins.") - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/plugins/dangerfile_git_plugin.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/plugins/dangerfile_git_plugin.rb deleted file mode 100644 index 3ce10ce4..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/plugins/dangerfile_git_plugin.rb +++ /dev/null @@ -1,159 +0,0 @@ -require "danger/plugin_support/plugin" -require "danger/core_ext/file_list" - -# Danger -module Danger - # Handles interacting with git inside a Dangerfile. Providing access to files that have changed, and useful statistics. Also provides - # access to the commits in the form of [Git::Log](https://github.com/schacon/ruby-git/blob/master/lib/git/log.rb) objects. - # - # @example Do something to all new and edited markdown files - # - # markdowns = (git.added_files + git.modified_files) - # do_something markdowns.select{ |file| file.end_with? "md" } - # - # @example Don't allow a file to be deleted - # - # deleted = git.deleted_files.include? "my/favourite.file" - # failure "Don't delete my precious" if deleted - # - # @example Fail really big diffs - # - # failure "We cannot handle the scale of this PR" if git.lines_of_code > 50_000 - # - # @example Warn when there are merge commits in the diff - # - # if git.commits.any? { |c| c.parents.count > 1 } - # warn 'Please rebase to get rid of the merge commits in this PR' - # end - # - # @example Warn when somebody tries to add nokogiri to the project - # - # diff = git.diff_for_file("Gemfile.lock") - # if diff && diff.patch =~ "nokogiri" - # warn 'Please do not add nokogiri to the project. Thank you.' - # end - # - # @see danger/danger - # @tags core, git - - class DangerfileGitPlugin < Plugin - # The instance name used in the Dangerfile - # @return [String] - # - def self.instance_name - "git" - end - - def initialize(dangerfile) - super(dangerfile) - raise unless dangerfile.env.scm.class == Danger::GitRepo # rubocop:disable Style/ClassEqualityComparison - - @git = dangerfile.env.scm - end - - # @!group Git Files - # Paths for files that were added during the diff - # @return [FileList] an [Array] subclass - # - def added_files - Danger::FileList.new(@git.diff.select { |diff| diff.type == "new" }.map(&:path)) - end - - # @!group Git Files - # Paths for files that were removed during the diff - # @return [FileList] an [Array] subclass - # - def deleted_files - Danger::FileList.new(@git.diff.select { |diff| diff.type == "deleted" }.map(&:path)) - end - - # @!group Git Files - # Paths for files that changed during the diff - # @return [FileList] an [Array] subclass - # - def modified_files - Danger::FileList.new(@git.diff.select { |diff| diff.type == "modified" }.map(&:path)) - end - - # @!group Git Metadata - # List of renamed files - # @return [Array] with keys `:before` and `:after` - # - def renamed_files - @git.renamed_files - end - - # @!group Git Metadata - # Whole diff - # @return [Git::Diff] from the gem `git` - # - def diff - @git.diff - end - - # @!group Git Metadata - # The overall lines of code added/removed in the diff - # @return [Fixnum] - # - def lines_of_code - @git.diff.lines - end - - # @!group Git Metadata - # The overall lines of code removed in the diff - # @return [Fixnum] - # - def deletions - @git.diff.deletions - end - - # @!group Git Metadata - # The overall lines of code added in the diff - # @return [Fixnum] - # - def insertions - @git.diff.insertions - end - - # @!group Git Metadata - # The log of commits inside the diff - # @return [Git::Log] from the gem `git` - # - def commits - @git.log.to_a - end - - # @!group Git Metadata - # Details for a specific file in this diff - # @return [Git::Diff::DiffFile] from the gem `git` - # - def diff_for_file(file) - (added_files + modified_files + deleted_files).include?(file) ? @git.diff[file] : nil - end - - # @!group Git Metadata - # Statistics for a specific file in this diff - # @return [Hash] with keys `:insertions`, `:deletions` giving line counts, and `:before`, `:after` giving file contents, or nil if the file has no changes or does not exist - # - def info_for_file(file) - return nil unless modified_files.include?(file) || added_files.include?(file) || deleted_files.include?(file) - - stats = @git.diff.stats[:files][file] - diff = @git.diff[file] - { - insertions: stats[:insertions], - deletions: stats[:deletions], - before: added_files.include?(file) || deleted_files.include?(file) ? nil : diff.blob(:src).contents, - after: added_files.include?(file) || deleted_files.include?(file) ? nil : diff.blob(:dst).contents - } - end - - # @!group Git Metadata - # List of remote tags - # @return [String] - # - def tags - @git.tags.each_line - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/plugins/dangerfile_github_plugin.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/plugins/dangerfile_github_plugin.rb deleted file mode 100644 index bb56e207..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/plugins/dangerfile_github_plugin.rb +++ /dev/null @@ -1,264 +0,0 @@ -require "danger/plugin_support/plugin" - -module Danger - # Handles interacting with GitHub inside a Dangerfile. Provides a few functions which wrap `pr_json` and also - # through a few standard functions to simplify your code. - # - # @example Warn when a PR is classed as work in progress - # - # warn "PR is classed as Work in Progress" if github.pr_title.include? "[WIP]" - # - # @example Declare a PR to be simple to avoid specific Danger rules - # - # declared_trivial = (github.pr_title + github.pr_body).include?("#trivial") - # - # @example Ensure that labels have been used on the PR - # - # failure "Please add labels to this PR" if github.pr_labels.empty? - # - # @example Check if a user is in a specific GitHub org, and message them if so - # - # unless github.api.organization_member?('danger', github.pr_author) - # message "@#{github.pr_author} is not a contributor yet, would you like to join the Danger org?" - # end - # - # @example Ensure there is a summary for a PR - # - # failure "Please provide a summary in the Pull Request description" if github.pr_body.length < 5 - # - # @example Only accept PRs to the develop branch - # - # failure "Please re-submit this PR to develop, we may have already fixed your issue." if github.branch_for_base != "develop" - # - # @example Note when PRs don't reference a milestone, which goes away when it does - # - # has_milestone = github.pr_json["milestone"] != nil - # warn("This PR does not refer to an existing milestone", sticky: false) unless has_milestone - # - # @example Note when a PR cannot be manually merged, which goes away when you can - # - # can_merge = github.pr_json["mergeable"] - # warn("This PR cannot be merged yet.", sticky: false) unless can_merge - # - # @example Highlight when a celebrity makes a pull request - # - # message "Welcome, Danger." if github.pr_author == "dangermcshane" - # - # @example Ensure that all PRs have an assignee - # - # warn "This PR does not have any assignees yet." unless github.pr_json["assignee"] - # - # @example Send a message with links to a collection of specific files - # - # if git.modified_files.include? "config/*.js" - # config_files = git.modified_files.select { |path| path.include? "config/" } - # message "This PR changes #{ github.html_link(config_files) }" - # end - # - # @example Highlight with a clickable link if a Package.json is changed - # - # warn "#{github.html_link("Package.json")} was edited." if git.modified_files.include? "Package.json" - # - # @example Note an issue with a particular line on a file using the #L[num] syntax, e.g. `#L23` - # - # linter_json = `my_linter lint "file"` - # results = JSON.parse linter_json - # unless results.empty? - # file, line, warning = result.first - # warn "#{github.html_link("#{file}#L#{line}")} has linter issue: #{warning}." - # end - # - # - # @see danger/danger - # @tags core, github - # - class DangerfileGitHubPlugin < Plugin - # So that this init can fail. - def self.new(dangerfile) - return nil if dangerfile.env.request_source.class != Danger::RequestSources::GitHub - - super - end - - def initialize(dangerfile) - super(dangerfile) - - @github = dangerfile.env.request_source - end - - # The instance name used in the Dangerfile - # @return [String] - # - def self.instance_name - "github" - end - - # @!group PR Review - # - # In Beta. Provides access to creating a GitHub Review instead of a typical GitHub comment. - # - # To use you announce the start of your review, and the end via the `start` and `submit` functions, - # for example: - # - # github.review.start - # github.review.fail(message) - # github.review.warn(message) - # github.review.message(message) - # github.review.markdown(message) - # github.review.submit - # - # @return [ReviewDSL] - def review - @github.review - end - - # @!group PR Metadata - # The title of the Pull Request. - # @return [String] - # - def pr_title - @github.pr_json["title"].to_s - end - - # @!group PR Metadata - # The body text of the Pull Request. - # @return [String] - # - def pr_body - pr_json["body"].to_s - end - - # @!group PR Metadata - # The username of the author of the Pull Request. - # @return [String] - # - def pr_author - pr_json["user"]["login"].to_s - end - - # @!group PR Metadata - # The labels assigned to the Pull Request. - # @return [String] - # - def pr_labels - @github.issue_json["labels"].map { |l| l[:name] } - end - - # @!group PR Metadata - # Whether the PR is a Draft. - # @return [Boolean] - # - def pr_draft? - pr_json["draft"] == true - end - - # @!group PR Commit Metadata - # The branch to which the PR is going to be merged into. - # @return [String] - # - def branch_for_base - pr_json["base"]["ref"] - end - - # @!group PR Commit Metadata - # The branch to which the PR is going to be merged from. - # @return [String] - # - def branch_for_head - pr_json["head"]["ref"] - end - - # @!group PR Commit Metadata - # The base commit to which the PR is going to be merged as a parent. - # @return [String] - # - def base_commit - pr_json["base"]["sha"] - end - - # @!group PR Commit Metadata - # The head commit to which the PR is requesting to be merged from. - # @return [String] - # - def head_commit - pr_json["head"]["sha"] - end - - # @!group GitHub Misc - # The hash that represents the PR's JSON. For an example of what this looks like - # see the [Danger Fixture'd one](https://raw.githubusercontent.com/danger/danger/master/spec/fixtures/github_api/pr_response.json). - # @return [Hash] - # - def pr_json - @github.pr_json - end - - # @!group GitHub Misc - # Provides access to the GitHub API client used inside Danger. Making - # it easy to use the GitHub API inside a Dangerfile. - # @return [Octokit::Client] - def api - @github.client - end - - # @!group PR Content - # The unified diff produced by Github for this PR - # see [Unified diff](https://en.wikipedia.org/wiki/Diff_utility#Unified_format) - # @return [String] - def pr_diff - @github.pr_diff - end - - # @!group GitHub Misc - # Returns a list of HTML anchors for a file, or files in the head repository. An example would be: - # `file.txt`. It returns a string of multiple anchors if passed an array. - # @param [String or Array] paths - # A list of strings to convert to github anchors - # @param [Bool] full_path - # Shows the full path as the link's text, defaults to `true`. - # - # @return [String] - def html_link(paths, full_path: true) - paths = [paths] unless paths.kind_of?(Array) - commit = head_commit - repo = pr_json["head"]["repo"]["html_url"] - - paths = paths.map do |path| - url_path = path.start_with?("/") ? path : "/#{path}" - text = full_path ? path : File.basename(path) - create_link("#{repo}/blob/#{commit}#{url_path}", text) - end - - return paths.first if paths.count < 2 - - paths.first(paths.count - 1).join(", ") + " & " + paths.last - end - - # @!group GitHub Misc - # Use to ignore inline messages which lay outside a diff's range, thereby not posting them in the main comment. - # You can set hash to change behavior per each kinds. (ex. `{warning: true, error: false}`) - # @param [Bool] or [Hash] dismiss - # Ignore out of range inline messages, defaults to `true` - # - # @return [void] - def dismiss_out_of_range_messages(dismiss = true) - if dismiss.kind_of?(Hash) - @github.dismiss_out_of_range_messages = dismiss - elsif dismiss.kind_of?(TrueClass) - @github.dismiss_out_of_range_messages = true - elsif dismiss.kind_of?(FalseClass) - @github.dismiss_out_of_range_messages = false - end - end - - %i(title body author labels json).each do |suffix| - alias_method "mr_#{suffix}".to_sym, "pr_#{suffix}".to_sym - end - - private - - def create_link(href, text) - "#{text}" - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/plugins/dangerfile_gitlab_plugin.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/plugins/dangerfile_gitlab_plugin.rb deleted file mode 100644 index 0a128a00..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/plugins/dangerfile_gitlab_plugin.rb +++ /dev/null @@ -1,275 +0,0 @@ -require "danger/plugin_support/plugin" - -module Danger - # Handles interacting with GitLab inside a Dangerfile. Provides a few functions which wrap `mr_json` and also - # through a few standard functions to simplify your code. - # - # @example Warn when an MR is classed as work in progress. - # - # warn "MR is classed as Work in Progress" if gitlab.mr_title.include? "[WIP]" - # - # @example Declare a MR to be simple to avoid specific Danger rules. - # - # declared_trivial = (gitlab.mr_title + gitlab.mr_body).include?("#trivial") - # - # @example Ensure that labels have been applied to the MR. - # - # failure "Please add labels to this MR" if gitlab.mr_labels.empty? - # - # @example Ensure that all MRs have an assignee. - # - # warn "This MR does not have any assignees yet." unless gitlab.mr_json["assignee"] - # - # @example Ensure there is a summary for a MR. - # - # failure "Please provide a summary in the Merge Request description" if gitlab.mr_body.length < 5 - # - # @example Only accept MRs to the develop branch. - # - # failure "Please re-submit this MR to develop, we may have already fixed your issue." if gitlab.branch_for_merge != "develop" - # - # @example Note when MRs don't reference a milestone, make the warning stick around on subsequent runs - # - # has_milestone = gitlab.mr_json["milestone"] != nil - # warn("This MR does not refer to an existing milestone", sticky: true) unless has_milestone - # - # @example Note when a MR cannot be manually merged - # - # can_merge = gitlab.mr_json["mergeable"] - # warn("This MR cannot be merged yet.") unless can_merge - # - # @example Highlight when a celebrity makes a merge request. - # - # message "Welcome, Danger." if gitlab.mr_author == "dangermcshane" - # - # @example Send a message with links to a collection of specific files. - # - # if git.modified_files.include? "config/*.js" - # config_files = git.modified_files.select { |path| path.include? "config/" } - # message "This MR changes #{ gitlab.html_link(config_files) }" - # end - # - # @example Highlight with a clickable link if a Package.json is changed. - # - # warn "#{gitlab.html_link("Package.json")} was edited." if git.modified_files.include? "Package.json" - # - # @example Select a random group member as assignee if no assignee is selected - # - # if gitlab.mr_json["assignee"].nil? - # reviewer = gitlab.api.group_members(gitlab.api.merge_request_approvals(project_id, mr_id).to_hash["approver_groups"].first["group"]["id"]).sample - # if gitlab.api.group_members(gitlab.api.merge_request_approvals(project_id, mr_id).to_hash["approver_groups"].first["group"]["id"]).length > 1 - # while reviewer.to_hash["id"] == gitlab.mr_json["author"]["id"] do - # reviewer = gitlab.api.group_members(gitlab.api.merge_request_approvals(project_id, mr_id).to_hash["approver_groups"].first["group"]["id"]).sample - # end - # end - # message "Reviewer roulete rolled for: #{reviewer.to_hash['name']} (@#{reviewer.to_hash['username']})" - # gitlab.api.update_merge_request(project_id, mr_id, { assignee_id: reviewer.to_hash["id"] }) - # end - # - # - # @see danger/danger - # @tags core, gitlab - # - class DangerfileGitLabPlugin < Plugin - # So that this init can fail. - def self.new(dangerfile) - return nil if dangerfile.env.request_source.class != Danger::RequestSources::GitLab - - super - end - - # The instance name used in the Dangerfile - # @return [String] - # - def self.instance_name - "gitlab" - end - - def initialize(dangerfile) - super(dangerfile) - - @gitlab = dangerfile.env.request_source - end - - # @!group MR Metadata - # The title of the Merge Request - # @return [String] - # - def mr_title - @gitlab.mr_json.title.to_s - end - - # @!group MR Metadata - # The body text of the Merge Request - # @return [String] - # - def mr_body - @gitlab.mr_json.description.to_s - end - - # @!group MR Metadata - # The username of the author of the Merge Request - # @return [String] - # - def mr_author - @gitlab.mr_json.author.username.to_s - end - - # @!group MR Metadata - # The labels assigned to the Merge Request - # @return [String] - # - def mr_labels - @gitlab.mr_json.labels - end - - # @!group MR Content - # The unified diff produced by GitLab for this MR - # see [Unified diff](https://en.wikipedia.org/wiki/Diff_utility#Unified_format) - # @return [String] - # - def mr_diff - @gitlab.mr_diff - end - - # @!group MR Changes - # The array of changes - # @return [Array] - # - def mr_changes - @gitlab.mr_changes.changes - end - - # @!group MR Closes issues - # The array of issues that this MR closes - # @return [Array] - # - def mr_closes_issues - @gitlab.mr_closes_issues - end - - # @!group MR Commit Metadata - # The branch to which the MR is going to be merged into - # @deprecated Please use {#branch_for_base} instead - # @return [String] - # - def branch_for_merge - branch_for_base - end - - # @!group MR Commit Metadata - # The branch to which the MR is going to be merged into. - # @return [String] - # - def branch_for_base - @gitlab.mr_json.target_branch - end - - # @!group MR Commit Metadata - # The branch to which the MR is going to be merged from. - # @return [String] - # - def branch_for_head - @gitlab.mr_json.source_branch - end - - # @!group MR Commit Metadata - # The base commit to which the MR is going to be merged as a parent - # @return [String] - # - def base_commit - @gitlab.mr_json.diff_refs.base_sha - end - - # @!group MR Commit Metadata - # The head commit to which the MR is requesting to be merged from - # @return [String] - # - def head_commit - @gitlab.mr_json.diff_refs.head_sha - end - - # @!group GitLab Misc - # The hash that represents the MR's JSON. See documentation for the - # structure [here](http://docs.gitlab.com/ce/api/merge_requests.html#get-single-mr) - # @return [Hash] - # - def mr_json - @gitlab.mr_json.to_hash - end - - # @!group GitLab Misc - # Provides access to the GitLab API client used inside Danger. Making - # it easy to use the GitLab API inside a Dangerfile. See the gitlab - # gem's [documentation](http://www.rubydoc.info/gems/gitlab/Gitlab/Client) - # for accessible methods. - # @return [GitLab::Client] - # - def api - @gitlab.client - end - - # @!group GitLab Misc - # Returns the web_url of the source project. - # @return [String] - # - def repository_web_url - @repository_web_url ||= begin - project = api.project(mr_json["source_project_id"]) - project.web_url - end - end - - # @!group GitLab Misc - # Returns a list of HTML anchors for a file, or files in the head repository. An example would be: - # `file.txt`. It returns a string of multiple anchors if passed an array. - # @param [String or Array] paths - # A list of strings to convert to gitlab anchors - # @param [Bool] full_path - # Shows the full path as the link's text, defaults to `true`. - # - # @return [String] - # - def html_link(paths, full_path: true) - paths = [paths] unless paths.kind_of?(Array) - commit = head_commit - - paths = paths.map do |path| - url_path = path.start_with?("/") ? path : "/#{path}" - text = full_path ? path : File.basename(path) - create_link("#{repository_web_url}/blob/#{commit}#{url_path}", text) - end - - return paths.first if paths.count < 2 - - paths.first(paths.count - 1).join(", ") + " & " + paths.last - end - - # @!group Gitlab Misc - # Use to ignore inline messages which lay outside a diff's range, thereby not posting the comment. - # You can set hash to change behavior per each kinds. (ex. `{warning: true, error: false}`) - # @param [Bool] or [Hash] dismiss - # Ignore out of range inline messages, defaults to `true` - # - # @return [void] - def dismiss_out_of_range_messages(dismiss = true) - if dismiss.kind_of?(Hash) - @gitlab.dismiss_out_of_range_messages = dismiss - elsif dismiss.kind_of?(TrueClass) - @gitlab.dismiss_out_of_range_messages = true - elsif dismiss.kind_of?(FalseClass) - @gitlab.dismiss_out_of_range_messages = false - end - end - - %i(title body author labels json diff).each do |suffix| - alias_method "pr_#{suffix}".to_sym, "mr_#{suffix}".to_sym - end - - private - - def create_link(href, text) - "#{text}" - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/plugins/dangerfile_local_only_plugin.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/plugins/dangerfile_local_only_plugin.rb deleted file mode 100644 index 8fa142cb..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/plugins/dangerfile_local_only_plugin.rb +++ /dev/null @@ -1,43 +0,0 @@ -require "danger/plugin_support/plugin" - -# Danger -module Danger - # Handles interacting with local only plugin inside a Dangerfile. - # It is support plugin for dry_run command and does not expose any methods. - # But you can still use other plugins like git - # - # @example Check that added lines contains agreed form of words - # - # git.diff.each do |chunk| - # chunk.patch.lines.grep(/^\+/).each do |added_line| - # if added_line.gsub!(/(?cancel)(?[^l[[:space:]][[:punct:]]]+)/i, '>>\k-l-\k<<') - # fail "Single 'L' for cancellation-alike words in '#{added_line}'" - # end - # end - # end - # - # @see danger/danger - # @tags core, local_only - # - class DangerfileLocalOnlyPlugin < Plugin - # So that this init can fail. - def self.new(dangerfile) - return nil if dangerfile.env.request_source.class != Danger::RequestSources::LocalOnly - - super - end - - def initialize(dangerfile) - super(dangerfile) - - @local_repo = dangerfile.env.request_source - end - - # The instance name used in the Dangerfile - # @return [String] - # - def self.instance_name - "local_repo" - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/plugins/dangerfile_messaging_plugin.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/plugins/dangerfile_messaging_plugin.rb deleted file mode 100644 index 692439f1..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/plugins/dangerfile_messaging_plugin.rb +++ /dev/null @@ -1,220 +0,0 @@ -require "danger/danger_core/messages/violation" -require "danger/danger_core/messages/markdown" -require "danger/plugin_support/plugin" - -module Danger - # Provides the feedback mechanism for Danger. Danger can keep track of - # messages, warnings, failure and post arbitrary markdown into a comment. - # - # The message within which Danger communicates back is amended on each run in a session. - # - # Each of `message`, `warn` and `fail` have a `sticky` flag, `false` by default, which - # when `true` means that the message will be crossed out instead of being removed. - # If it's not called again on subsequent runs. - # - # Each of `message`, `warn`, `fail` and `markdown` support multiple passed arguments - # @example - # - # message 'Hello', 'World', file: "Dangerfile", line: 1 - # warn ['This', 'is', 'warning'], file: "Dangerfile", line: 1 - # failure 'Ooops', 'bad bad error', sticky: false - # markdown '# And', '# Even', '# Markdown', file: "Dangerfile", line: 1 - # - # By default, using `failure` would fail the corresponding build. Either via an API call, or - # via the return value for the danger command. Older code examples use `fail` which is an alias - # of `failure`, but the default Rubocop settings would have an issue with it. - # - # You can optionally add `file` and `line` to provide inline feedback on a PR in GitHub, note that - # only feedback inside the PR's diff will show up inline. Others will appear inside the main comment. - # - # It is possible to have Danger ignore specific warnings or errors by writing `Danger: Ignore "[warning/error text]"`. - # - # Sidenote: Messaging is the only plugin which adds functions to the root of the Dangerfile. - # - # @example Failing a build - # - # failure "This build didn't pass tests" - # failure "Ooops!", "Something bad happened" - # failure ["This is example", "with array"] - # - # @example Failing a build, and note that on subsequent runs - # - # failure("This build didn't pass tests", sticky: true) - # - # @example Passing a warning - # - # warn "This build didn't pass linting" - # warn "Hm...", "This is not really good" - # warn ["Multiple warnings", "via array"] - # - # @example Displaying a markdown table - # - # message = "### Proselint found issues\n\n" - # message << "Line | Message | Severity |\n" - # message << "| --- | ----- | ----- |\n" - # message << "20 | No documentation | Error \n" - # markdown message - # - # markdown "### First issue", "### Second issue" - # markdown ["### First issue", "### Second issue"] - # - # @example Adding an inline warning to a file - # - # warn("You shouldn't use puts in your Dangerfile", file: "Dangerfile", line: 10) - # - # - # @see danger/danger - # @tags core, messaging - # - - class DangerfileMessagingPlugin < Plugin - def initialize(dangerfile) - super(dangerfile) - - @warnings = [] - @errors = [] - @messages = [] - @markdowns = [] - end - - # The instance name used in the Dangerfile - # @return [String] - # - def self.instance_name - "messaging" - end - - # @!group Core - # Print markdown to below the table - # - # @param [String, Array] message - # The markdown based message to be printed below the table - # @param [String] file - # Optional. Path to the file that the message is for. - # @param [String] line - # Optional. The line in the file to present the message in. - # @return [void] - # - def markdown(*markdowns, **options) - file = options.fetch(:file, nil) - line = options.fetch(:line, nil) - - markdowns.flatten.each do |markdown| - @markdowns << Markdown.new(markdown, file, line) - end - end - - # @!group Core - # Print out a generate message on the PR - # - # @param [String, Array] message - # The message to present to the user - # @param [Boolean] sticky - # Whether the message should be kept after it was fixed, - # defaults to `false`. - # @param [String] file - # Optional. Path to the file that the message is for. - # @param [String] line - # Optional. The line in the file to present the message in. - # @return [void] - # - def message(*messages, **options) - sticky = options.fetch(:sticky, false) - file = options.fetch(:file, nil) - line = options.fetch(:line, nil) - - messages.flatten.each do |message| - @messages << Violation.new(message, sticky, file, line, type: :message) if message - end - end - - # @!group Core - # Specifies a problem, but not critical - # - # @param [String, Array] message - # The message to present to the user - # @param [Boolean] sticky - # Whether the message should be kept after it was fixed, - # defaults to `false`. - # @param [String] file - # Optional. Path to the file that the message is for. - # @param [String] line - # Optional. The line in the file to present the message in. - # @return [void] - # - def warn(*warnings, **options) - sticky = options.fetch(:sticky, false) - file = options.fetch(:file, nil) - line = options.fetch(:line, nil) - - warnings.flatten.each do |warning| - next if should_ignore_violation(warning) - - @warnings << Violation.new(warning, sticky, file, line, type: :warning) if warning - end - end - - # @!group Core - # Declares a CI blocking error - # - # @param [String, Array] message - # The message to present to the user - # @param [Boolean] sticky - # Whether the message should be kept after it was fixed, - # defaults to `false`. - # @param [String] file - # Optional. Path to the file that the message is for. - # @param [String] line - # Optional. The line in the file to present the message in. - # @return [void] - # - def fail(*failures, **options) - sticky = options.fetch(:sticky, false) - file = options.fetch(:file, nil) - line = options.fetch(:line, nil) - - failures.flatten.each do |failure| - next if should_ignore_violation(failure) - - @errors << Violation.new(failure, sticky, file, line, type: :error) if failure - end - end - - alias failure fail - - # @!group Reporting - # A list of all messages passed to Danger, including - # the markdowns. - # - # @visibility hidden - # @return [Hash] - def status_report - { - errors: @errors.map(&:message).clone.freeze, - warnings: @warnings.map(&:message).clone.freeze, - messages: @messages.map(&:message).clone.freeze, - markdowns: @markdowns.clone.freeze - } - end - - # @!group Reporting - # A list of all violations passed to Danger, we don't - # anticipate users of Danger needing to use this. - # - # @visibility hidden - # @return [Hash] - def violation_report - { - errors: @errors.clone.freeze, - warnings: @warnings.clone.freeze, - messages: @messages.clone.freeze - } - end - - private - - def should_ignore_violation(message) - env.request_source.ignored_violations.include? message - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/plugins/dangerfile_vsts_plugin.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/plugins/dangerfile_vsts_plugin.rb deleted file mode 100644 index 2643c733..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/plugins/dangerfile_vsts_plugin.rb +++ /dev/null @@ -1,191 +0,0 @@ -require "danger/plugin_support/plugin" - -module Danger - # Handles interacting with VSTS inside a Dangerfile. Provides a few functions which wrap `pr_json` and also - # through a few standard functions to simplify your code. - # - # @example Warn when a PR is classed as work in progress - # - # warn "PR is classed as Work in Progress" if vsts.pr_title.include? "[WIP]" - # - # @example Declare a PR to be simple to avoid specific Danger rules - # - # declared_trivial = (vsts.pr_title + vsts.pr_body).include?("#trivial") - # - # @example Ensure there is a summary for a PR - # - # failure "Please provide a summary in the Pull Request description" if vsts.pr_body.length < 5 - # - # @example Only accept PRs to the develop branch - # - # failure "Please re-submit this PR to develop, we may have already fixed your issue." if vsts.branch_for_base != "develop" - # - # @example Highlight when a celebrity makes a pull request - # - # message "Welcome, Danger." if vsts.pr_author == "dangermcshane" - # - # @example Ensure that all PRs have an assignee - # - # warn "This PR does not have any assignees yet." unless vsts.pr_json["reviewers"].length == 0 - # - # @example Send a message with links to a collection of specific files - # - # if git.modified_files.include? "config/*.js" - # config_files = git.modified_files.select { |path| path.include? "config/" } - # message "This PR changes #{ vsts.markdown_link(config_files) }" - # end - # - # @example Highlight with a clickable link if a Package.json is changed - # - # warn "#{vsts.markdown_link("Package.json")} was edited." if git.modified_files.include? "Package.json" - # - # @example Note an issue with a particular line on a file using the #L[num] syntax, e.g. `#L23` - # - # linter_json = `my_linter lint "file"` - # results = JSON.parse linter_json - # unless results.empty? - # file, line, warning = result.first - # warn "#{vsts.markdown_link("#{file}#L#{line}")} has linter issue: #{warning}." - # end - # - # - # @see danger/danger - # @tags core, vsts - # - class DangerfileVSTSPlugin < Plugin - # So that this init can fail. - def self.new(dangerfile) - return nil if dangerfile.env.request_source.class != Danger::RequestSources::VSTS - - super - end - - # The instance name used in the Dangerfile - # @return [String] - # - def self.instance_name - "vsts" - end - - def initialize(dangerfile) - super(dangerfile) - @source = dangerfile.env.request_source - end - - # @!group VSTS Misc - # The hash that represents the PR's JSON. For an example of what this looks like - # see the [Danger Fixture'd one](https://raw.githubusercontent.com/danger/danger/master/spec/fixtures/vsts_api/pr_response.json). - # @return [Hash] - def pr_json - @source.pr_json - end - - # @!group PR Metadata - # The title of the Pull Request. - # @return [String] - # - def pr_title - @source.pr_json[:title].to_s - end - - # @!group PR Metadata - # The body text of the Pull Request. - # @return [String] - # - def pr_description - @source.pr_json[:description].to_s - end - alias pr_body pr_description - - # @!group PR Metadata - # The username of the author of the Pull Request. - # @return [String] - # - def pr_author - @source.pr_json[:createdBy][:displayName].to_s - end - - # @!group PR Commit Metadata - # The branch to which the PR is going to be merged into. - # @return [String] - # - def branch_for_base - branch_name(:targetRefName) - end - - # @!group PR Commit Metadata - # A href that represents the current PR - # @return [String] - # - def pr_link - repo_path = @source.pr_json[:repository][:remoteUrl].to_s - pull_request_id = @source.pr_json[:pullRequestId].to_s - - "#{repo_path}/pullRequest/#{pull_request_id}" - end - - # @!group PR Commit Metadata - # The branch to which the PR is going to be merged from. - # @return [String] - # - def branch_for_head - branch_name(:sourceRefName) - end - - # @!group PR Commit Metadata - # The base commit to which the PR is going to be merged as a parent. - # @return [String] - # - def base_commit - @source.pr_json[:lastMergeTargetCommit][:commitId].to_s - end - - # @!group PR Commit Metadata - # The head commit to which the PR is requesting to be merged from. - # @return [String] - # - def head_commit - @source.pr_json[:lastMergeSourceCommit][:commitId].to_s - end - - # @!group VSTS Misc - # Returns a list of Markdown links for a file, or files in the head repository. - # It returns a string of multiple links if passed an array. - # @param [String or Array] paths - # A list of strings to convert to Markdown links - # @param [Bool] full_path - # Shows the full path as the link's text, defaults to `true`. - # - # @return [String] - # - def markdown_link(paths, full_path: true) - paths = [paths] unless paths.kind_of?(Array) - commit = head_commit - repo = pr_json[:repository][:remoteUrl].to_s - - paths = paths.map do |path| - path, line = path.split("#L") - url_path = path.start_with?("/") ? path : "/#{path}" - text = full_path ? path : File.basename(path) - url_path.gsub!(" ", "%20") - line_ref = line ? "&line=#{line}" : "" - create_markdown_link("#{repo}/commit/#{commit}?path=#{url_path}&_a=contents#{line_ref}", text) - end - - return paths.first if paths.count < 2 - - paths.first(paths.count - 1).join(", ") + " & " + paths.last - end - - private - - def create_markdown_link(href, text) - "[#{text}](#{href})" - end - - def branch_name(key) - repo_matches = @source.pr_json[key].to_s.match(%r{refs/heads/(.*)}) - repo_matches[1] unless repo_matches.nil? - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/standard_error.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/standard_error.rb deleted file mode 100644 index ac0e76a1..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/danger_core/standard_error.rb +++ /dev/null @@ -1,142 +0,0 @@ -require "claide" -require "claide/informative_error" - -module Danger - # From below here - this entire file was taken verbatim for CocoaPods-Core. - - #-------------------------------------------------------------------------# - - # Wraps an exception raised by a DSL file in order to show to the user the - # contents of the line that raised the exception. - # - class DSLError < StandardError - # @return [String] the description that should be presented to the user. - # - attr_reader :description - - # @return [String] the path of the dsl file that raised the exception. - # - attr_reader :dsl_path - - # @return [Exception] the backtrace of the exception raised by the - # evaluation of the dsl file. - # - attr_reader :backtrace - - # @param [Exception] backtrace @see backtrace - # @param [String] dsl_path @see dsl_path - # - def initialize(description, dsl_path, backtrace, contents = nil) - @description = description - @dsl_path = dsl_path - @backtrace = backtrace - @contents = contents - end - - # @return [String] the contents of the DSL that cause the exception to - # be raised. - # - def contents - @contents ||= dsl_path && File.exist?(dsl_path) && File.read(dsl_path) - end - - # The message of the exception reports the content of podspec for the - # line that generated the original exception. - # - # @example Output - # - # Invalid podspec at `RestKit.podspec` - undefined method - # `exclude_header_search_paths=' for # - # - # from spec-repos/master/RestKit/0.9.3/RestKit.podspec:36 - # ------------------------------------------- - # # because it would break: #import - # > ns.exclude_header_search_paths = 'Code/RestKit.h' - # end - # ------------------------------------------- - # - # @return [String] the message of the exception. - # - def message - @message ||= begin - description, stacktrace = parse.values_at(:description, :stacktrace) - - msg = description - msg = msg.red if msg.respond_to?(:red) - msg << stacktrace if stacktrace - msg - end - end - - def to_markdown - @markdown ||= begin - description, stacktrace = parse.values_at(:description, :stacktrace) - - # Highlight failed method in markdown - description = description.tr("'", "`") - - # Escape markdown brackets - description = description.gsub(/<|>/) { |bracket| "\\#{bracket}" } - - md = "## Danger has errored" - md << "#{description}\n" - md << "```#{stacktrace}```" if stacktrace - - Markdown.new(md, nil, nil) - end - end - - private - - def parse - result = {} - - trace_line, description = parse_line_number_from_description - latest_version = Danger.danger_outdated? - - result[:description] = "\n[!] #{description}" - result[:description] << upgrade_message(latest_version) if latest_version - - return result unless backtrace && dsl_path && contents - - trace_line = backtrace.find { |l| l.include?(dsl_path.to_s) } || trace_line - return result unless trace_line - - line_numer = trace_line.split(":")[1].to_i - 1 - return result unless line_numer - - lines = contents.lines - indent = " # " - indicator = indent.tr("#", ">") - first_line = line_numer.zero? - last_line = (line_numer == (lines.count - 1)) - - result[:stacktrace] = "\n" - result[:stacktrace] << "#{indent}from #{trace_line.gsub(/:in.*$/, '')}\n" - result[:stacktrace] << "#{indent}-------------------------------------------\n" - result[:stacktrace] << "#{indent}#{lines[line_numer - 1]}" unless first_line - result[:stacktrace] << "#{indicator}#{lines[line_numer]}" - result[:stacktrace] << "#{indent}#{lines[line_numer + 1]}" unless last_line - result[:stacktrace] << "\n" unless result[:stacktrace].end_with?("\n") - result[:stacktrace] << "#{indent}-------------------------------------------\n" - - result - end - - def parse_line_number_from_description - description = self.description - if dsl_path && description =~ /((#{Regexp.quote File.expand_path(dsl_path)}|#{Regexp.quote dsl_path.to_s}):\d+)/ - trace_line = Regexp.last_match[1] - description = description.sub(/#{Regexp.quote trace_line}:\s*/, "") - end - [trace_line, description] - end - - def upgrade_message(latest_version) - ". Updating the Danger gem might fix the issue. "\ - "Your Danger version: #{Danger::VERSION}, "\ - "latest Danger version: #{latest_version}\n" - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/helpers/array_subclass.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/helpers/array_subclass.rb deleted file mode 100644 index 6d897f66..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/helpers/array_subclass.rb +++ /dev/null @@ -1,61 +0,0 @@ -module Danger - module Helpers - module ArraySubclass - include Comparable - - def initialize(array) - @__array__ = array - end - - def kind_of?(compare_class) - return true if compare_class == self.class - - dummy.kind_of?(compare_class) - end - - def method_missing(name, *args, &block) - super unless __array__.respond_to?(name) - - respond_to_method(name, *args, &block) - end - - def respond_to_missing?(name, include_all) - __array__.respond_to?(name, include_all) || super - end - - def to_a - __array__ - end - - def to_ary - __array__ - end - - def <=>(other) - return unless other.kind_of?(self.class) - - __array__ <=> other.instance_variable_get(:@__array__) - end - - private - - attr_accessor :__array__ - - def dummy - Class.new(Array).new - end - - def respond_to_method(name, *args, &block) - result = __array__.send(name, *args, &block) - return result unless result.kind_of?(Array) - - if name =~ /!/ - __array__ = result - self - else - self.class.new(result) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/helpers/comment.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/helpers/comment.rb deleted file mode 100644 index e16251c1..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/helpers/comment.rb +++ /dev/null @@ -1,32 +0,0 @@ -module Danger - class Comment - attr_reader :id, :body - - def initialize(id, body, inline = nil) - @id = id - @body = body - @inline = inline - end - - def self.from_github(comment) - self.new(comment["id"], comment["body"]) - end - - def self.from_gitlab(comment) - if comment.respond_to?(:id) && comment.respond_to?(:body) - type = comment.respond_to?(:type) ? comment.type : nil - self.new(comment.id, comment.body, type == "DiffNote") - else - self.new(comment["id"], comment["body"], comment["type"] == "DiffNote") - end - end - - def generated_by_danger?(danger_id) - body.include?("\"generated_by_#{danger_id}\"") - end - - def inline? - @inline.nil? ? body.include?("") : @inline - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/helpers/comments_helper.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/helpers/comments_helper.rb deleted file mode 100644 index ad10e784..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/helpers/comments_helper.rb +++ /dev/null @@ -1,179 +0,0 @@ -require "kramdown" -require "danger/helpers/comments_parsing_helper" -require "danger/helpers/emoji_mapper" -require "danger/helpers/find_max_num_violations" - -module Danger - module Helpers - module CommentsHelper - # This might be a bit weird, but table_kind_from_title is a shared dependency for - # parsing and generating. And rubocop was adamant about file size so... - include Danger::Helpers::CommentsParsingHelper - - def markdown_parser(text) - Kramdown::Document.new(text, input: "GFM", smart_quotes: %w(apos apos quot quot)) - end - - # !@group Extension points - # Produces a markdown link to the file the message points to - # - # request_source implementations are invited to override this method with their - # vendor specific link. - # - # @param [Violation or Markdown] message - # @param [Bool] Should hide any generated link created - # - # @return [String] The Markdown compatible link - def markdown_link_to_message(message, hide_link) - return "" if hide_link - - "#{message.file}#L#{message.line}" - end - - # !@group Extension points - # Determine whether two messages are equivalent - # - # request_source implementations are invited to override this method. - # This is mostly here to enable sources to detect when inlines change only in their - # commit hash and not in content per-se. since the link is implementation dependant - # so should be the comparison. - # - # @param [Violation or Markdown] m1 - # @param [Violation or Markdown] m2 - # - # @return [Boolean] whether they represent the same message - def messages_are_equivalent(m1, m2) - m1 == m2 - end - - def process_markdown(violation, hide_link = false) - message = violation.message - message = "#{markdown_link_to_message(violation, hide_link)}#{message}" if violation.file && violation.line - - html = markdown_parser(message).to_html - # Remove the outer `

    ` and `

    `. - html = html.strip.sub(%r{\A

    (.*)

    \z}m, '\1') - Violation.new(html, violation.sticky, violation.file, violation.line) - end - - def table(name, emoji, violations, all_previous_violations, template: "github") - content = violations - content = content.map { |v| process_markdown(v) } unless ["bitbucket_server", "vsts"].include?(template) - - kind = table_kind_from_title(name) - previous_violations = all_previous_violations[kind] || [] - resolved_violations = previous_violations.reject do |pv| - content.count { |v| messages_are_equivalent(v, pv) } > 0 - end - - resolved_messages = resolved_violations.map(&:message).uniq - count = content.count - - { - name: name, - emoji: emoji, - content: content, - resolved: resolved_messages, - count: count - } - end - - def apply_template(tables: [], markdowns: [], danger_id: "danger", template: "github", request_source: template) - require "erb" - - md_template = File.join(Danger.gem_path, "lib/danger/comment_generators/#{template}.md.erb") - - # erb: http://www.rrn.dk/rubys-erb-templating-system - # for the extra args: http://stackoverflow.com/questions/4632879/erb-template-removing-the-trailing-line - @tables = tables - @markdowns = markdowns.map(&:message) - @danger_id = danger_id - @emoji_mapper = EmojiMapper.new(request_source.sub("_inline", "")) - - return ERB.new(File.read(md_template), trim_mode: "-").result(binding) - end - - def generate_comment(warnings: [], errors: [], messages: [], markdowns: [], previous_violations: {}, danger_id: "danger", template: "github") - apply_template( - tables: [ - table("Error", "no_entry_sign", errors, previous_violations, template: template), - table("Warning", "warning", warnings, previous_violations, template: template), - table("Message", "book", messages, previous_violations, template: template) - ], - markdowns: markdowns, - danger_id: danger_id, - template: template - ) - end - - # resolved is essentially reserved for future use - eventually we might - # have some nice generic resolved-thing going :) - def generate_message_group_comment(message_group:, - danger_id: "danger", - resolved: [], - template: "github") - # cheating a bit - I don't want to alter the apply_template API - # so just sneak around behind its back setting some instance variables - # to get them to show up in the template - @message_group = message_group - @resolved = resolved - request_source_name = template.sub("_message_group", "") - - apply_template(danger_id: danger_id, - markdowns: message_group.markdowns, - template: template, - request_source: request_source_name) - .sub(/\A\n*/, "") - end - - def generate_inline_comment_body(emoji, - message, - danger_id: "danger", - resolved: false, - template: "github") - apply_template( - tables: [{ content: [message], resolved: resolved, emoji: emoji }], - danger_id: danger_id, - template: "#{template}_inline" - ) - end - - def generate_inline_markdown_body(markdown, danger_id: "danger", template: "github") - apply_template( - markdowns: [markdown], - danger_id: danger_id, - template: "#{template}_inline" - ) - end - - def generate_description(warnings: nil, errors: nil, template: "github") - emoji_mapper = EmojiMapper.new(template) - if (errors.nil? || errors.empty?) && (warnings.nil? || warnings.empty?) - return ENV["DANGER_SUCCESS_MESSAGE"] || "All green. #{random_compliment}" - else - message = "#{emoji_mapper.map('warning')} " - message += "#{'Error'.danger_pluralize(errors.count)}. " unless errors.empty? - message += "#{'Warning'.danger_pluralize(warnings.count)}. " unless warnings.empty? - message += "Don't worry, everything is fixable." - return message - end - end - - def random_compliment - ["Well done.", "Congrats.", "Woo!", - "Yay.", "Jolly good show.", "Good on 'ya.", "Nice work."].sample - end - - private - - def pluralize(string, count) - string.danger_pluralize(count) - end - - def truncate(string) - max_message_length = 30 - string.danger_truncate(max_message_length) - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/helpers/comments_parsing_helper.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/helpers/comments_parsing_helper.rb deleted file mode 100644 index f935b462..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/helpers/comments_parsing_helper.rb +++ /dev/null @@ -1,71 +0,0 @@ -module Danger - module Helpers - module CommentsParsingHelper - # !@group Extension points - # Produces a message-like from a row in a comment table - # - # @param [String] row - # The content of the row in the table - # - # @return [Violation or Markdown] the extracted message - def parse_message_from_row(row) - Violation.new(row, true) - end - - def parse_tables_from_comment(comment) - comment.split("") - end - - def violations_from_table(table) - row_regex = %r{(?:)?(.*?)(?:)?\s*}im - table.scan(row_regex).flatten.map do |row| - parse_message_from_row(row.strip) - end - end - - def parse_comment(comment) - tables = parse_tables_from_comment(comment) - violations = {} - tables.each do |table| - match = danger_table?(table) - next unless match - - title = match[1] - kind = table_kind_from_title(title) - next unless kind - - violations[kind] = violations_from_table(table) - end - - violations.reject { |_, v| v.empty? } - end - - def table_kind_from_title(title) - if title =~ /error/i - :error - elsif title =~ /warning/i - :warning - elsif title =~ /message/i - :message - end - end - - private - - GITHUB_OLD_REGEX = %r{}im.freeze - NEW_REGEX = %r{}im.freeze - - def danger_table?(table) - # The old GitHub specific method relied on - # the width of a `th` element to find the table - # title and determine if it was a danger table. - # The new method uses a more robust data-danger-table - # tag instead. - match = GITHUB_OLD_REGEX.match(table) - return match if match - - return NEW_REGEX.match(table) - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/helpers/emoji_mapper.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/helpers/emoji_mapper.rb deleted file mode 100644 index e31225cc..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/helpers/emoji_mapper.rb +++ /dev/null @@ -1,41 +0,0 @@ -module Danger - class EmojiMapper - DATA = { - "github" => { - "no_entry_sign" => "🚫", - "warning" => "⚠️", - "book" => "📖", - "white_check_mark" => "✅" - }, - "bitbucket_server" => { - "no_entry_sign" => ":no_entry_sign:", - "warning" => ":warning:", - "book" => ":blue_book:", - "white_check_mark" => ":white_check_mark:" - } - }.freeze - - TYPE_TO_EMOJI = { - error: "no_entry_sign", - warning: "warning", - message: "book" - }.freeze - - def initialize(template) - @template = DATA.has_key?(template) ? template : "github" - end - - def map(emoji) - emoji&.delete! ":" - DATA[template][emoji] - end - - def from_type(type) - map(TYPE_TO_EMOJI[type]) - end - - private - - attr_reader :template - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/helpers/find_max_num_violations.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/helpers/find_max_num_violations.rb deleted file mode 100644 index 6565e32e..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/helpers/find_max_num_violations.rb +++ /dev/null @@ -1,31 +0,0 @@ -# Find max_num_violations in lib/danger/comment_generators/github.md.erb. -class FindMaxNumViolations - # Save ~ 5000 for contents other than violations to avoid exceeded 65536 max comment length limit. - LIMIT = 60_000 - - def initialize(violations) - @violations = violations - end - - def call - total = 0 - num_of_violations_allowed = 0 - - violations.each do |violation| - message_length = violation.message.length + 80 # 80 is ~ the size of html wraps violation message. - - if total + message_length < LIMIT - total += message_length - num_of_violations_allowed += 1 - else - break - end - end - - num_of_violations_allowed - end - - private - - attr_reader :violations -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/helpers/message_groups_array_helper.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/helpers/message_groups_array_helper.rb deleted file mode 100644 index 2e87ba60..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/helpers/message_groups_array_helper.rb +++ /dev/null @@ -1,31 +0,0 @@ -module Danger - module Helpers - module MessageGroupsArrayHelper - FakeArray = Struct.new(:count) do - def empty? - count.zero? - end - end - - def fake_warnings_array - FakeArray.new(counts[:warnings]) - end - - def fake_errors_array - FakeArray.new(counts[:errors]) - end - - def counts - return @counts if @counts - - @counts = { warnings: 0, errors: 0 } - each do |message_group, counts| - group_stats = message_group.stats - @counts[:warnings] += group_stats[:warnings_count] - @counts[:errors] += group_stats[:errors_count] - end - @counts - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/plugin_support/gems_resolver.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/plugin_support/gems_resolver.rb deleted file mode 100644 index 3e55de5e..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/plugin_support/gems_resolver.rb +++ /dev/null @@ -1,77 +0,0 @@ -require "bundler" - -module Danger - class GemsResolver - def initialize(gem_names) - @gem_names = gem_names - @dir = Dir.mktmpdir # We want it to persist until OS cleans it on reboot - end - - # Returns an Array of paths (plugin lib file paths) and gems (of metadata) - def call - path_gems = [] - - Bundler.with_clean_env do - Dir.chdir(dir) do - create_gemfile_from_gem_names - `bundle install --path vendor/gems` - path_gems = all_gems_metadata - end - end - - return path_gems - end - - private - - attr_reader :gem_names, :dir - - def all_gems_metadata - return paths, gems - end - - def create_gemfile_from_gem_names - gemfile = File.new("Gemfile", "w") - gemfile.write "source 'https://rubygems.org'" - - gem_names.each do |plugin| - gemfile.write "\ngem '#{plugin}'" - end - - gemfile.close - end - - # The paths are relative to dir. - def paths - relative_paths = gem_names.flat_map do |plugin| - Dir.glob("vendor/gems/ruby/*/gems/#{plugin}*/lib/**/**/**/**.rb") - end - - relative_paths.map { |path| File.join(dir, path) } - end - - def gems - real_gems.map { |gem| gem_metadata(gem) } - end - - def real_gems - spec_paths = gem_names.flat_map do |plugin| - Dir.glob("vendor/gems/ruby/*/specifications/#{plugin}*.gemspec").first - end - - spec_paths.map { |path| Gem::Specification.load path } - end - - def gem_metadata(gem) - { - name: gem.name, - gem: gem.name, - author: gem.authors, - url: gem.homepage, - description: gem.summary, - license: gem.license || "Unknown", - version: gem.version.to_s - } - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/plugin_support/plugin.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/plugin_support/plugin.rb deleted file mode 100644 index fc163bc3..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/plugin_support/plugin.rb +++ /dev/null @@ -1,52 +0,0 @@ -module Danger - class Plugin - def initialize(dangerfile) - @dangerfile = dangerfile - end - - def self.instance_name - to_s.gsub("Danger", "").danger_underscore.split("/").last - end - - # Both of these methods exist on all objects - # http://ruby-doc.org/core-2.2.3/Kernel.html#method-i-warn - # http://ruby-doc.org/core-2.2.3/Kernel.html#method-i-fail - # However, as we're using using them in the DSL, they won't - # get method_missing called correctly. - undef :warn, :fail - - # Since we have a reference to the Dangerfile containing all the information - # We need to redirect the self calls to the Dangerfile - - def method_missing(method_sym, *arguments, **keyword_arguments, &block) - if keyword_arguments.empty? - @dangerfile.send(method_sym, *arguments, &block) - else - @dangerfile.send(method_sym, *arguments, **keyword_arguments, &block) - end - end - - def self.all_plugins - @all_plugins ||= [] - end - - def self.clear_external_plugins - @all_plugins = @all_plugins.select { |plugin| Dangerfile.essential_plugin_classes.include? plugin } - end - - def self.inherited(plugin) - Plugin.all_plugins.push(plugin) - end - - private - - # When using `danger local --pry`, every plugin had an unreasonable - # amount of text output due to the Dangerfile reference in every - # plugin. So, it is filtered out. Users will start out in the context - # of the Dangerfile, and can view it by just typing `self` into the REPL. - # - def pretty_print_instance_variables - super - [:@dangerfile] - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/plugin_support/plugin_file_resolver.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/plugin_support/plugin_file_resolver.rb deleted file mode 100644 index 8021edf1..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/plugin_support/plugin_file_resolver.rb +++ /dev/null @@ -1,30 +0,0 @@ -require "danger/plugin_support/gems_resolver" - -module Danger - class PluginFileResolver - # Takes an array of files, gems or nothing, then resolves them into - # paths that should be sent into the documentation parser - def initialize(references) - @refs = references - end - - # When given existing paths, map to absolute & existing paths - # When given a list of gems, resolve for list of gems - # When empty, imply you want to test the current lib folder as a plugin - def resolve - if !refs.nil? and refs.select { |ref| File.file? ref }.any? - paths = refs.select { |ref| File.file? ref }.map { |path| File.expand_path(path) } - elsif refs and refs.kind_of? Array - paths, gems = GemsResolver.new(refs).call - else - paths = Dir.glob(File.join(".", "lib/**/*.rb")).map { |path| File.expand_path(path) } - end - - { paths: paths, gems: gems || [] } - end - - private - - attr_reader :refs - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/plugin_support/plugin_linter.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/plugin_support/plugin_linter.rb deleted file mode 100644 index a832449a..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/plugin_support/plugin_linter.rb +++ /dev/null @@ -1,162 +0,0 @@ -module Danger - class PluginLinter - # An internal class that is used to represent a rule for the linter. - class Rule - attr_accessor :modifier, :description, :title, :function, :ref, :metadata, :type - - def initialize(modifier, ref, title, description, function) - @modifier = modifier - @title = title - @description = description - @function = function - @ref = ref - end - - def object_applied_to - metadata[:name].to_s.bold + " (" + type + ")" - end - end - - attr_accessor :json, :warnings, :errors - - def initialize(json) - @json = json - @warnings = [] - @errors = [] - end - - # Lints the current JSON, looking at: - # * Class rules - # * Method rules - # * Attribute rules - # - def lint - json.each do |plugin| - apply_rules(plugin, "class", class_rules) - - plugin[:methods].each do |method| - apply_rules(method, "method", method_rules) - end - - plugin[:attributes].each do |method_hash| - method_name = method_hash.keys.first - method = method_hash[method_name] - - value = method[:write] || method[:read] - apply_rules(value, "attribute", method_rules) - end - end - end - - # Did the linter pass/fail? - # - def failed? - errors.count > 0 - end - - # Prints a summary of the errors and warnings. - # - def print_summary(ui) - # Print whether it passed/failed at the top - if failed? - ui.puts "\n[!] Failed\n".red - else - ui.notice "Passed" - end - - # A generic proc to handle the similarities between - # errors and warnings. - do_rules = proc do |name, rules| - unless rules.empty? - ui.puts "" - ui.section(name.bold) do - rules.each do |rule| - title = rule.title.bold + " - #{rule.object_applied_to}" - subtitles = [rule.description, link(rule.ref)] - subtitles += [rule.metadata[:files].join(":")] if rule.metadata[:files] - ui.labeled(title, subtitles) - ui.puts "" - end - end - end - end - - # Run the rules - do_rules.call("Errors".red, errors) - do_rules.call("Warnings".yellow, warnings) - end - - private - - # Rules that apply to a class - # - def class_rules - [ - Rule.new(:error, 4..6, "Description Markdown", "Above your class you need documentation that covers the scope, and the usage of your plugin.", proc do |json| - json[:body_md] && json[:body_md].empty? - end), - Rule.new(:warning, 30, "Tags", "This plugin does not include `@tags tag1, tag2` and thus will be harder to find in search.", proc do |json| - json[:tags] && json[:tags].empty? - end), - Rule.new(:warning, 29, "References", "Ideally, you have a reference implementation of your plugin that you can show to people, add `@see org/repo` to have the site auto link it.", proc do |json| - json[:see] && json[:see].empty? - end), - Rule.new(:error, 8..27, "Examples", "You should include some examples of common use-cases for your plugin.", proc do |json| - json[:example_code] && json[:example_code].empty? - end) - ] - end - - # Rules that apply to individual methods, and attributes - # - def method_rules - [ - Rule.new(:error, 40..41, "Description", "You should include a description for your method.", proc do |json| - json[:body_md] && json[:body_md].empty? - end), - Rule.new(:warning, 43..45, "Params", "You should give a 'type' for the param, yes, ruby is duck-typey but it's useful for newbies to the language, use `@param [Type] name`.", proc do |json| - json[:param_couplets] && json[:param_couplets].flat_map(&:values).include?(nil) - end), - Rule.new(:warning, 43..45, "Unknown Param", "You should give a 'type' for the param, yes, ruby is duck-typey but it's useful for newbies to the language, use `@param [Type] name`.", proc do |json| - json[:param_couplets] && json[:param_couplets].flat_map(&:values).include?("Unknown") - end), - Rule.new(:warning, 46, "Return Type", "If the function has no useful return value, use ` @return [void]` - this will be ignored by documentation generators.", proc do |json| - return_hash = json[:tags].find { |tag| tag[:name] == "return" } - !(return_hash && return_hash[:types] && !return_hash[:types].first.empty?) - end) - ] - end - - # Generates a link to see an example of said rule - # - def link(ref) - if ref.kind_of?(Range) - "@see - " + "https://github.com/dbgrandi/danger-prose/blob/v2.0.0/lib/danger_plugin.rb#L#{ref.min}#-L#{ref.max}".blue - elsif ref.kind_of?(Integer) - "@see - " + "https://github.com/dbgrandi/danger-prose/blob/v2.0.0/lib/danger_plugin.rb#L#{ref}".blue - else - "@see - " + "https://github.com/dbgrandi/danger-prose/blob/v2.0.0/lib/danger_plugin.rb".blue - end - end - - # Runs the rule, if it fails then additional metadata - # is added to the rule (for printing later) and it's - # added to either `warnings` or `errors`. - # - def apply_rules(json, type, rules) - rules.each do |rule| - next unless rule.function.call(json) - - rule.metadata = json - rule.type = type - - case rule.modifier - when :warning - warnings << rule - when :error - errors << rule - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/plugin_support/plugin_parser.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/plugin_support/plugin_parser.rb deleted file mode 100644 index 46ed58af..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/plugin_support/plugin_parser.rb +++ /dev/null @@ -1,199 +0,0 @@ -require "json" - -=begin - - So you want to improve this? Great. Hard thing is getting yourself into a position where you - have access to all the tokens, so here's something you should run in `bundle exec pry` to dig in: - - require 'danger' - require 'yard' - parser = Danger::PluginParser.new "spec/fixtures/plugins/example_fully_documented.rb" - parser.parse - plugins = parser.plugins_from_classes(parser.classes_in_file) - git = plugins.first - klass = git - parser.to_dict(plugins) - - Then some helpers - - attribute_meths = klass.attributes[:instance].values.map(&:values).flatten - - methods = klass.meths - klass.inherited_meths - attribute_meths - usable_methods = methods.select { |m| m.visibility == :public }.reject { |m| m.name == :initialize } - - the alternative, is to add - - require 'pry' - binding.pry - - anywhere inside the source code below. - -=end - -module Danger - class PluginParser - attr_accessor :registry - - def initialize(paths, verbose = false) - raise "Path cannot be empty" if paths.empty? - - setup_yard(verbose) - - if paths.kind_of? String - @paths = [File.expand_path(paths)] - else - @paths = paths - end - end - - def setup_yard(verbose) - require 'yard' - - # Unless specifically asked, don't output anything. - unless verbose - YARD::Logger.instance.level = YARD::Logger::FATAL - end - - # Add some of our custom tags - YARD::Tags::Library.define_tag('tags', :tags) - YARD::Tags::Library.define_tag('availability', :availability) - end - - def parse - files = ["lib/danger/plugin_support/plugin.rb"] + @paths - - # This turns on YARD debugging - # $DEBUG = true - - self.registry = YARD::Registry.load(files, true) - end - - def classes_in_file - registry.all(:class).select { |klass| @paths.include? klass.file } - end - - def plugins_from_classes(classes) - classes.select { |klass| klass.inheritance_tree.map(&:name).include? :Plugin } - end - - def to_json - plugins = plugins_from_classes(classes_in_file) - to_h(plugins) - end - - def to_json_string - plugins = plugins_from_classes(classes_in_file) - to_h(plugins).to_json - end - - # rubocop:disable Metrics/AbcSize - - def method_return_string(meth) - return "" unless meth[:tags] - - return_value = meth[:tags].find { |t| t[:name] == "return" && t[:types] } - return "" if return_value.nil? - return "" if return_value[:types].nil? - return "" unless return_value[:types].kind_of? Array - - unless return_value.empty? - return "" if return_value[:types].first == "void" - return return_value[:types].first - end - "" - end - - def method_params(method) - return {} unless method[:params] - - params_names = method[:params].map { |param| param.compact.join("=").strip } - params_values = method[:tags].select { |t| t[:name] == "param" } - - return {} if params_values.empty? - return {} if params_values.select { |p| p[:types] }.empty? - - return params_names.map.with_index do |name, index| - name = name.delete ":" - if index < params_values.length - type = params_values[index][:types] - { name => type ? type.first : "Unknown" } - else - { name => "Unknown" } - end - end - end - - def method_parser(gem_path, meth) - return nil if meth.nil? - method = { - name: meth.name, - body_md: meth.docstring, - params: meth.parameters, - files: meth.files.map { |item| [item.first.gsub(gem_path, ""), item.last] }, - tags: meth.tags.map { |t| { name: t.tag_name, types: t.types } } - } - - - return_v = method_return_string(method) - params_v = method_params(method) - - # Pull out some derived data - method[:param_couplets] = params_v - method[:return] = return_v - - # Create the center params, `thing: OK, other: Thing` - string_params = params_v.map do |param| - name = param.keys.first - param[name].nil? ? name : name + ": " + param[name] - end.join ", " - - # Wrap it in () if there _are_ params - string_params = "(" + string_params + ")" unless string_params.empty? - # Append the return type if we have one - suffix = return_v.empty? ? "" : " -> #{return_v}" - - method[:one_liner] = meth.name.to_s + string_params + suffix - method - end - - def attribute_parser(gem_path, attribute) - { - read: method_parser(gem_path, attribute[:read]), - write: method_parser(gem_path, attribute[:write]) - } - end - - def to_h(classes) - classes.map do |klass| - # Adds the class being parsed into the ruby runtime, so that we can access it's instance_name - require klass.file - real_klass = Danger.const_get klass.name - attribute_meths = klass.attributes[:instance].values.map(&:values).flatten - - methods = klass.meths - klass.inherited_meths - attribute_meths - usable_methods = methods.select { |m| m.visibility == :public }.reject { |m| m.name == :initialize || m.name == :instance_name || m.name == :new } - - plugin_gem = klass.file.include?("gems") ? klass.file.split("gems/").last.split("-")[0..-2].join("-") : nil - # Pull out the gem's path ( to make relative file paths ) - # if no gem is found, index = 0, making gem_path = "" - index_of_gem_in_path = plugin_gem ? klass.file.split("/").index { |component| component.include? plugin_gem } : 0 - gem_path = klass.file.split("/")[0..index_of_gem_in_path].join("/") - - { - name: klass.name.to_s, - body_md: klass.docstring, - instance_name: real_klass.instance_name, - gem: plugin_gem, - gem_path: gem_path, - files: klass.files.map { |item| [item.first.gsub(gem_path, ""), item.last] }, - example_code: klass.tags.select { |t| t.tag_name == "example" }.map { |tag| { title: tag.name, text: tag.text } }.compact, - attributes: klass.attributes[:instance].map { |pair| { pair.first => attribute_parser(gem_path, pair.last) } }, - methods: usable_methods.map { |m| method_parser(gem_path, m) }, - tags: klass.tags.select { |t| t.tag_name == "tags" }.map(&:text).compact, - see: klass.tags.select { |t| t.tag_name == "see" }.map(&:name).map(&:split).flatten.compact, - } - end - end - # rubocop:enable Metrics/AbcSize - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/plugin_support/templates/readme_table.html.erb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/plugin_support/templates/readme_table.html.erb deleted file mode 100644 index 185e1f72..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/plugin_support/templates/readme_table.html.erb +++ /dev/null @@ -1,26 +0,0 @@ -<% json.each do |plugin| %> - -### <%= plugin["instance_name"] %> - -<%= plugin["body_md"] %> -<%- plugin["example_code"].each do |example| %> -
    <%= example["title"] %> -
    <%= example["text"] %>
    -
    -<%- end %> - -<%- unless plugin["attributes"].empty? %> -#### Attributes -<%- plugin["attributes"].each do |attribute| %> -`<%= attribute.keys.first %>` - <%= attribute.values.first["write"]["body_md"] %> -<%- end %> -<%- end %> - -<%- unless plugin["methods"].empty? %> -#### Methods -<%- plugin["methods"].each do |method| %> -`<%= method["name"] %>` - <%= method["body_md"] %> -<%- end %> -<%- end %> - -<% end %> diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/request_sources/bitbucket_cloud.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/request_sources/bitbucket_cloud.rb deleted file mode 100644 index c101f799..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/request_sources/bitbucket_cloud.rb +++ /dev/null @@ -1,169 +0,0 @@ -require "danger/helpers/comments_helper" -require "danger/request_sources/bitbucket_cloud_api" -require "danger/danger_core/message_group" - -module Danger - module RequestSources - class BitbucketCloud < RequestSource - include Danger::Helpers::CommentsHelper - attr_accessor :pr_json - - def self.env_vars - [ - "DANGER_BITBUCKETCLOUD_USERNAME", - "DANGER_BITBUCKETCLOUD_UUID", - "DANGER_BITBUCKETCLOUD_PASSWORD" - ] - end - - def self.optional_env_vars - ["DANGER_BITBUCKETCLOUD_OAUTH_KEY", "DANGER_BITBUCKETCLOUD_OAUTH_SECRET"] - end - - def initialize(ci_source, environment) - self.ci_source = ci_source - - @api = BitbucketCloudAPI.new(ci_source.repo_slug, ci_source.pull_request_id, nil, environment) - end - - def validates_as_ci? - # TODO: ??? - true - end - - def validates_as_api_source? - @api.credentials_given? - end - - def scm - @scm ||= GitRepo.new - end - - def host - @host ||= @api.host - end - - def fetch_details - self.pr_json = @api.fetch_pr_json - end - - def setup_danger_branches - base_branch = self.pr_json[:destination][:branch][:name] - base_commit = self.pr_json[:destination][:commit][:hash] - head_branch = self.pr_json[:source][:branch][:name] - head_commit = self.pr_json[:source][:commit][:hash] - - # Next, we want to ensure that we have a version of the current branch at a known location - scm.ensure_commitish_exists_on_branch! base_branch, base_commit - self.scm.exec "branch #{EnvironmentManager.danger_base_branch} #{base_commit}" - - # OK, so we want to ensure that we have a known head branch, this will always represent - # the head of the PR ( e.g. the most recent commit that will be merged. ) - scm.ensure_commitish_exists_on_branch! head_branch, head_commit - self.scm.exec "branch #{EnvironmentManager.danger_head_branch} #{head_commit}" - end - - def organisation - nil - end - - def update_pull_request!(warnings: [], errors: [], messages: [], markdowns: [], danger_id: "danger", new_comment: false, remove_previous_comments: false) - delete_old_comments(danger_id: danger_id) if !new_comment || remove_previous_comments - - warnings = update_inline_comments_for_kind!(:warnings, warnings, danger_id: danger_id) - errors = update_inline_comments_for_kind!(:errors, errors, danger_id: danger_id) - messages = update_inline_comments_for_kind!(:messages, messages, danger_id: danger_id) - markdowns = update_inline_comments_for_kind!(:markdowns, markdowns, danger_id: danger_id) - - has_comments = (warnings.count.positive? || errors.count.positive? || messages.count.positive? || markdowns.count.positive?) - if has_comments - comment = generate_description(warnings: warnings, errors: errors, template: "bitbucket_server") - comment += "\n\n" - comment += generate_comment(warnings: warnings, - errors: errors, - messages: messages, - markdowns: markdowns, - previous_violations: {}, - danger_id: danger_id, - template: "bitbucket_server") - @api.post_comment(comment) - end - end - - def update_pr_by_line!(message_groups:, - danger_id: "danger", - new_comment: false, - remove_previous_comments: false) - if !new_comment || remove_previous_comments - delete_old_comments(danger_id: danger_id) - end - - summary_body = generate_description(warnings: message_groups.fake_warnings_array, - errors: message_groups.fake_errors_array, - template: "bitbucket_server") - summary_body += "\n\n" - - # this isn't the most elegant thing in the world, but we need the group - # with file: nil, line: nil so we can combine its info in with the - # summary_body - summary_group = message_groups.first - if summary_group && summary_group.file.nil? && summary_group.line.nil? - # remove summary_group from message_groups so it doesn't get a - # duplicate comment posted in the message_groups loop below - message_groups.shift - else - summary_group = MessageGroup.new(file: nil, line: nil) - end - - summary_body += generate_message_group_comment( - message_group: summary_group, - danger_id: danger_id, - template: "bitbucket_server_message_group" - ) - - @api.post_comment(summary_body) - - message_groups.each do |message_group| - body = generate_message_group_comment(message_group: message_group, - danger_id: danger_id, - template: "bitbucket_server_message_group") - @api.post_comment(body, - file: message_group.file, - line: message_group.line) - end - end - - def update_inline_comments_for_kind!(kind, messages, danger_id: "danger") - emoji = { warnings: "warning", errors: "no_entry_sign", messages: "book" }[kind] - - messages.reject do |message| - next false unless message.file && message.line - - body = "" - - if kind == :markdown - body = generate_inline_markdown_body(message, - danger_id: danger_id, - template: "bitbucket_server") - else - body = generate_inline_comment_body(emoji, message, - danger_id: danger_id, - template: "bitbucket_server") - end - - @api.post_comment(body, file: message.file, line: message.line) - - true - end - end - - def delete_old_comments(danger_id: "danger") - @api.fetch_comments.each do |c| - next if c[:user][:uuid] != @api.my_uuid - - @api.delete_comment(c[:id]) if c[:content][:raw] =~ /generated_by_#{danger_id}/ - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/request_sources/bitbucket_cloud_api.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/request_sources/bitbucket_cloud_api.rb deleted file mode 100644 index 184e49aa..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/request_sources/bitbucket_cloud_api.rb +++ /dev/null @@ -1,181 +0,0 @@ -# frozen_string_literal: true - -require "danger/helpers/comments_helper" - -module Danger - module RequestSources - class BitbucketCloudAPI - attr_accessor :host, :project, :slug, :access_token, :pull_request_id - attr_reader :my_uuid - - def initialize(repo_slug, pull_request_id, branch_name, environment) - initialize_my_uuid(environment["DANGER_BITBUCKETCLOUD_UUID"]) - @username = environment["DANGER_BITBUCKETCLOUD_USERNAME"] - @password = environment["DANGER_BITBUCKETCLOUD_PASSWORD"] - self.project, self.slug = repo_slug.split("/") - self.access_token = fetch_access_token(environment) - self.pull_request_id = pull_request_id || fetch_pr_from_branch(branch_name) - self.host = "https://bitbucket.org/" - end - - def initialize_my_uuid(uuid) - return if uuid.nil? - return @my_uuid = uuid if uuid.empty? - - if uuid.start_with?("{") && uuid.end_with?("}") - @my_uuid = uuid - else - @my_uuid = "{#{uuid}}" - end - end - - def inspect - inspected = super - - inspected.gsub!(@password, "********") if @password - inspected.gsub!(@access_token, "********") if @access_token - - inspected - end - - def credentials_given? - @my_uuid && !@my_uuid.empty? && - @username && !@username.empty? && - @password && !@password.empty? - end - - def pull_request(*) - fetch_pr_json - end - - def fetch_pr_json - uri = URI(pr_api_endpoint) - fetch_json(uri) - end - - def fetch_comments - values = [] - # TODO: use a url parts encoder to encode the query - corrected_uuid = @my_uuid[1...-1] unless @my_uuid.nil? # Endpoint doesnt support curly brackets for this, so remove them for this - uri = "#{pr_api_endpoint}/comments?pagelen=100&q=deleted+%7E+false+AND+user.uuid+%7E+%22#{corrected_uuid}%22" - - while uri - json = fetch_json(URI(uri)) - values += json[:values] - uri = json[:next] - end - values - end - - def delete_comment(id) - uri = URI("#{pr_api_endpoint}/comments/#{id}") - delete(uri) - end - - def post_comment(text, file: nil, line: nil) - uri = URI("#{pr_api_endpoint}/comments") - body = { - content: { - raw: text - } - } - body.merge!(inline: { path: file, to: line }) if file && line - - post(uri, body.to_json) - end - - private - - def base_url(version) - "https://api.bitbucket.org/#{version}.0/repositories/#{project}/#{slug}/pullrequests" - end - - def pr_api_endpoint - "#{base_url(2)}/#{pull_request_id}" - end - - def prs_api_url(branch_name) - encoded_branch_name = URI.encode_www_form_component(branch_name) - "#{base_url(2)}?q=source.branch.name=\"#{encoded_branch_name}\"" - end - - def fetch_pr_from_branch(branch_name) - uri = URI(prs_api_url(branch_name)) - fetch_json(uri)[:values][0][:id] - end - - def fetch_access_token(environment) - oauth_key = environment["DANGER_BITBUCKETCLOUD_OAUTH_KEY"] - oauth_secret = environment["DANGER_BITBUCKETCLOUD_OAUTH_SECRET"] - return nil if oauth_key.nil? - return nil if oauth_secret.nil? - - uri = URI.parse("https://bitbucket.org/site/oauth2/access_token") - req = Net::HTTP::Post.new(uri.request_uri, { "Content-Type" => "application/json" }) - req.basic_auth oauth_key, oauth_secret - req.set_form_data({ "grant_type" => "client_credentials" }) - res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http| - http.request(req) - end - - JSON.parse(res.body, symbolize_names: true)[:access_token] - end - - def fetch_json(uri) - raise credentials_not_available unless credentials_given? - - req = Net::HTTP::Get.new(uri.request_uri, { "Content-Type" => "application/json" }) - if access_token.nil? - req.basic_auth @username, @password - else - req["Authorization"] = "Bearer #{access_token}" - end - res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http| - http.request(req) - end - raise error_fetching_json(uri.to_s, res.code) unless res.code == "200" - - JSON.parse(res.body, symbolize_names: true) - end - - def post(uri, body) - raise credentials_not_available unless credentials_given? - - req = Net::HTTP::Post.new(uri.request_uri, { "Content-Type" => "application/json" }) - if access_token.nil? - req.basic_auth @username, @password - else - req["Authorization"] = "Bearer #{access_token}" - end - req.body = body - Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http| - http.request(req) - end - end - - def delete(uri) - raise credentials_not_available unless credentials_given? - - req = Net::HTTP::Delete.new(uri.request_uri, { "Content-Type" => "application/json" }) - if access_token.nil? - req.basic_auth @username, @password - else - req["Authorization"] = "Bearer #{access_token}" - end - Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http| - http.request(req) - end - end - - def credentials_not_available - "Credentials not available. Provide DANGER_BITBUCKETCLOUD_USERNAME, " \ - "DANGER_BITBUCKETCLOUD_UUID, and DANGER_BITBUCKETCLOUD_PASSWORD " \ - "as environment variables." - end - - def error_fetching_json(url, status_code) - "Error fetching json for: #{url}, status code: #{status_code}" - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/request_sources/bitbucket_server.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/request_sources/bitbucket_server.rb deleted file mode 100644 index 6ee43ce4..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/request_sources/bitbucket_server.rb +++ /dev/null @@ -1,210 +0,0 @@ -require "danger/helpers/comments_helper" -require "danger/request_sources/bitbucket_server_api" -require "danger/request_sources/code_insights_api" -require_relative "request_source" - -module Danger - module RequestSources - class BitbucketServer < RequestSource - include Danger::Helpers::CommentsHelper - attr_accessor :pr_json, :dismiss_out_of_range_messages - - def self.env_vars - [ - "DANGER_BITBUCKETSERVER_USERNAME", - "DANGER_BITBUCKETSERVER_PASSWORD", - "DANGER_BITBUCKETSERVER_HOST" - ] - end - - def self.optional_env_vars - [ - "DANGER_BITBUCKETSERVER_CODE_INSIGHTS_REPORT_KEY", - "DANGER_BITBUCKETSERVER_CODE_INSIGHTS_REPORT_TITLE", - "DANGER_BITBUCKETSERVER_CODE_INSIGHTS_REPORT_DESCRIPTION", - "DANGER_BITBUCKETSERVER_CODE_INSIGHTS_REPORT_LOGO_URL", - "DANGER_BITBUCKETSERVER_VERIFY_SSL", - "DANGER_BITBUCKETSERVER_DISMISS_OUT_OF_RANGE_MESSAGES" - ] - end - - def initialize(ci_source, environment) - self.ci_source = ci_source - self.dismiss_out_of_range_messages = environment["DANGER_BITBUCKETSERVER_DISMISS_OUT_OF_RANGE_MESSAGES"] == "true" - - project, slug = ci_source.repo_slug.split("/") - @api = BitbucketServerAPI.new(project, slug, ci_source.pull_request_id, environment) - @code_insights = CodeInsightsAPI.new(project, slug, environment) - end - - def validates_as_ci? - # TODO: ??? - true - end - - def validates_as_api_source? - @api.credentials_given? - end - - def scm - @scm ||= GitRepo.new - end - - def host - @host ||= @api.host - end - - def fetch_details - self.pr_json = @api.fetch_pr_json - end - - def pr_diff - @pr_diff ||= @api.fetch_pr_diff - end - - def setup_danger_branches - base_branch = self.pr_json[:toRef][:id].sub("refs/heads/", "") - base_commit = self.pr_json[:toRef][:latestCommit] - # Support for older versions of Bitbucket Server - base_commit = self.pr_json[:toRef][:latestChangeset] if self.pr_json[:fromRef].key? :latestChangeset - head_branch = self.pr_json[:fromRef][:id].sub("refs/heads/", "") - head_commit = self.pr_json[:fromRef][:latestCommit] - # Support for older versions of Bitbucket Server - head_commit = self.pr_json[:fromRef][:latestChangeset] if self.pr_json[:fromRef].key? :latestChangeset - - # Next, we want to ensure that we have a version of the current branch at a known location - scm.ensure_commitish_exists_on_branch! base_branch, base_commit - self.scm.exec "branch #{EnvironmentManager.danger_base_branch} #{base_commit}" - - # OK, so we want to ensure that we have a known head branch, this will always represent - # the head of the PR ( e.g. the most recent commit that will be merged. ) - scm.ensure_commitish_exists_on_branch! head_branch, head_commit - self.scm.exec "branch #{EnvironmentManager.danger_head_branch} #{head_commit}" - end - - def organisation - nil - end - - def update_pull_request!(warnings: [], errors: [], messages: [], markdowns: [], danger_id: "danger", new_comment: false, remove_previous_comments: false) - delete_old_comments(danger_id: danger_id) if !new_comment || remove_previous_comments - - # If configured, send a Code Insights API to provide the PR with a quality report - # which includes inline code violations found by Danger as Annotations. - # If no inline violations occurred, an empty, successful (green) report will be sent. - if @code_insights.ready? - inline_violations = inline_violations_group(warnings: warnings, errors: errors, messages: messages) - inline_warnings = inline_violations[:warnings] || [] - inline_errors = inline_violations[:errors] || [] - inline_messages = inline_violations[:messages] || [] - - head_commit = self.pr_json[:fromRef][:latestCommit] - @code_insights.send_report(head_commit, - inline_warnings, - inline_errors, - inline_messages) - end - - # If we're sending inline comments separately via Code Insights, - # the main body comment should contain only generic, non-file specific messages. - if @code_insights.ready? - main_violations = main_violations_group(warnings: warnings, errors: errors, messages: messages) - warnings = main_violations[:warnings] || [] - errors = main_violations[:errors] || [] - messages = main_violations[:messages] || [] - markdowns = main_violations[:markdowns] || [] - end - - has_comments = (warnings.count > 0 || errors.count > 0 || messages.count > 0 || markdowns.count > 0) - if has_comments - comment = generate_description(warnings: warnings, - errors: errors) - comment += "\n\n" - comment += generate_comment(warnings: warnings, - errors: errors, - messages: messages, - markdowns: markdowns, - previous_violations: {}, - danger_id: danger_id, - template: "bitbucket_server") - @api.post_comment(comment) - end - end - - def delete_old_comments(danger_id: "danger") - @api.fetch_last_comments.each do |c| - @api.delete_comment(c[:id], c[:version]) if c[:text] =~ /generated_by_#{danger_id}/ - end - end - - def main_violations_group(warnings: [], errors: [], messages: [], markdowns: []) - if dismiss_out_of_range_messages - { - warnings: warnings.reject(&:inline?), - errors: errors.reject(&:inline?), - messages: messages.reject(&:inline?), - markdowns: markdowns.reject(&:inline?) - } - else - in_diff = proc { |a| find_position_in_diff?(a.file, a.line) } - { - warnings: warnings.reject(&in_diff), - errors: errors.reject(&in_diff), - messages: messages.reject(&in_diff), - markdowns: markdowns.reject(&in_diff) - } - end - end - - def inline_violations_group(warnings: [], errors: [], messages: [], markdowns: []) - cmp = proc do |a, b| - next -1 unless a.file && a.line - next 1 unless b.file && b.line - - next a.line <=> b.line if a.file == b.file - - next a.file <=> b.file - end - - # Sort to group inline comments by file - { - warnings: warnings.select(&:inline?).sort(&cmp), - errors: errors.select(&:inline?).sort(&cmp), - messages: messages.select(&:inline?).sort(&cmp), - markdowns: markdowns.select(&:inline?).sort(&cmp) - } - end - - def update_pr_build_status(status, build_job_link, description) - changeset = self.pr_json[:fromRef][:latestCommit] - # Support for older versions of Bitbucket Server - changeset = self.pr_json[:fromRef][:latestChangeset] if self.pr_json[:fromRef].key? :latestChangeset - puts "Changeset: " + changeset - puts self.pr_json.to_json - @api.update_pr_build_status(status, changeset, build_job_link, description) - end - - def find_position_in_diff?(file, line) - return nil if file.nil? || line.nil? - return nil if file.empty? - - added_lines(file).include?(line) - end - - def file_diff(file) - self.pr_diff[:diffs].find { |diff| diff[:destination] && diff[:destination][:toString] == file } || { hunks: [] } - end - - def added_lines(file) - @added_lines ||= {} - @added_lines[file] ||= file_diff(file)[:hunks].map do |hunk| - hunk[:segments].select { |segment| segment[:type] == "ADDED" }.map do |segment| - segment[:lines].map do |line| - line[:destination] - end - end - end.flatten - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/request_sources/bitbucket_server_api.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/request_sources/bitbucket_server_api.rb deleted file mode 100644 index aa3d33c0..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/request_sources/bitbucket_server_api.rb +++ /dev/null @@ -1,129 +0,0 @@ -# frozen_string_literal: true - -require "openssl" -require "danger/helpers/comments_helper" - -module Danger - module RequestSources - class BitbucketServerAPI - attr_accessor :host, :verify_ssl, :pr_api_endpoint, :key, :project - - def initialize(project, slug, pull_request_id, environment) - @username = environment["DANGER_BITBUCKETSERVER_USERNAME"] - @password = environment["DANGER_BITBUCKETSERVER_PASSWORD"] - self.host = environment["DANGER_BITBUCKETSERVER_HOST"] - self.verify_ssl = environment["DANGER_BITBUCKETSERVER_VERIFY_SSL"] != "false" - if self.host && !(self.host.include? "http://") && !(self.host.include? "https://") - self.host = "https://" + self.host - end - self.key = slug - self.project = project - self.pr_api_endpoint = "#{host}/rest/api/1.0/projects/#{project}/repos/#{slug}/pull-requests/#{pull_request_id}" - end - - def inspect - inspected = super - - inspected.gsub!(@password, "********") if @password - - inspected - end - - def credentials_given? - @username && !@username.empty? && @password && !@password.empty? - end - - def pull_request(*) - fetch_pr_json - end - - def fetch_pr_json - uri = URI(pr_api_endpoint) - fetch_json(uri) - end - - def fetch_pr_diff - uri = URI("#{pr_api_endpoint}/diff?withComments=false") - fetch_json(uri) - end - - def fetch_last_comments - uri = URI("#{pr_api_endpoint}/activities?limit=1000") - fetch_json(uri)[:values].select { |v| v[:action] == "COMMENTED" }.map { |v| v[:comment] } - end - - def delete_comment(id, version) - uri = URI("#{pr_api_endpoint}/comments/#{id}?version=#{version}") - delete(uri) - end - - def post_comment(text) - uri = URI("#{pr_api_endpoint}/comments") - body = { text: text }.to_json - post(uri, body) - end - - def update_pr_build_status(status, changeset, build_job_link, description) - uri = URI("#{self.host}/rest/build-status/1.0/commits/#{changeset}") - body = build_status_body(status, build_job_link, description) - post(uri, body) - end - - private - - def use_ssl - return self.pr_api_endpoint.include? "https://" - end - - def fetch_json(uri) - req = Net::HTTP::Get.new(uri.request_uri, { "Content-Type" => "application/json" }) - req.basic_auth @username, @password - res = http(uri).start do |http| - http.request(req) - end - JSON.parse(res.body, symbolize_names: true) - end - - def post(uri, body) - req = Net::HTTP::Post.new(uri.request_uri, { "Content-Type" => "application/json" }) - req.basic_auth @username, @password - req.body = body - - res = http(uri).start do |http| - http.request(req) - end - - # show error to the user when Bitbucket Server returned an error - case res - when Net::HTTPClientError, Net::HTTPServerError - # HTTP 4xx - 5xx - abort "\nError posting comment to Bitbucket Server: #{res.code} (#{res.message}) - #{res.body}\n\n" - end - end - - def delete(uri) - req = Net::HTTP::Delete.new(uri.request_uri, { "Content-Type" => "application/json" }) - req.basic_auth @username, @password - http(uri).start do |http| - http.request(req) - end - end - - def http(uri) - http = Net::HTTP.new(uri.hostname, uri.port) - http.use_ssl = use_ssl - http.verify_mode = verify_ssl ? OpenSSL::SSL::VERIFY_PEER : OpenSSL::SSL::VERIFY_NONE - http - end - - def build_status_body(status, build_job_link, description) - body = {} - body["state"] = status - body["key"] = self.key - body["url"] = build_job_link - body["description"] = description if description - return body.to_json - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/request_sources/code_insights_api.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/request_sources/code_insights_api.rb deleted file mode 100644 index 14cd3e0b..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/request_sources/code_insights_api.rb +++ /dev/null @@ -1,142 +0,0 @@ -# frozen_string_literal: true - -module Danger - module RequestSources - # - # Provides ability for Danger to interact with Atlassian's Code Insights API in order to provide code quality - # reports along with inline comments for specific lines in specific files. - # See https://developer.atlassian.com/server/bitbucket/how-tos/code-insights/ for more details. - # - # Currently this functionality is implemented only for Bitbucket Server request source. - class CodeInsightsAPI - attr_accessor :username, :password, :host, :report_key, :report_title, :report_description, :logo_url - - def initialize(project, slug, environment) - @username = environment["DANGER_BITBUCKETSERVER_USERNAME"] || "" - @password = environment["DANGER_BITBUCKETSERVER_PASSWORD"] || "" - @host = environment["DANGER_BITBUCKETSERVER_HOST"] || "" - @report_key = environment["DANGER_BITBUCKETSERVER_CODE_INSIGHTS_REPORT_KEY"] || "" - @report_title = environment["DANGER_BITBUCKETSERVER_CODE_INSIGHTS_REPORT_TITLE"] || "" - @report_description = environment["DANGER_BITBUCKETSERVER_CODE_INSIGHTS_REPORT_DESCRIPTION"] || "" - @logo_url = environment["DANGER_BITBUCKETSERVER_CODE_INSIGHTS_REPORT_LOGO_URL"] || "" - @project = project - @slug = slug - end - - def inspect - inspected = super - - inspected.gsub!(@password, "********") if @password - - inspected - end - - def ready? - !(@report_key.empty? || @report_title.empty? || @report_description.empty? || @username.empty? || @password.empty? || @host.empty?) - end - - def delete_report(commit) - uri = URI(report_endpoint_at_commit(commit)) - request = Net::HTTP::Delete.new(uri.request_uri, { "Content-Type" => "application/json" }) - request.basic_auth @username, @password - response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: use_ssl) do |http| - http.request(request) - end - - # show failure when server returns an error - case response - when Net::HTTPClientError, Net::HTTPServerError - # HTTP 4xx - 5xx - abort "\nError deleting report from Code Insights API: #{response.code} (#{response.message}) - #{response.body}\n\n" - end - end - - def send_report(commit, inline_warnings, inline_errors, inline_messages) - delete_report(commit) - put_report(commit, inline_errors.count) - should_post_annotations = !(inline_warnings + inline_errors + inline_messages).empty? - if should_post_annotations - post_annotations(commit, inline_warnings, inline_errors, inline_messages) - end - end - - def put_report(commit, inline_errors_count) - uri = URI(report_endpoint_at_commit(commit)) - request = Net::HTTP::Put.new(uri.request_uri, { "Content-Type" => "application/json" }) - request.basic_auth @username, @password - request.body = { "title": @report_title, - "details": @report_description, - "result": inline_errors_count > 0 ? "FAIL" : "PASS", - "reporter": @username, - "link": "https://github.com/danger/danger", - "logoURL": @logo_url }.to_json - - response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: use_ssl) do |http| - http.request(request) - end - - # show failure when server returns an error - case response - when Net::HTTPClientError, Net::HTTPServerError - # HTTP 4xx - 5xx - abort "\nError putting report to Code Insights API: #{response.code} (#{response.message}) - #{response.body}\n\n" - end - end - - def post_annotations(commit, inline_warnings, inline_errors, inline_messages) - uri = URI(annotation_endpoint_at_commit(commit)) - - annotations = [] - - inline_messages.each do |violation| - annotations << violation_hash_with_severity(violation, "LOW") - end - - inline_warnings.each do |violation| - annotations << violation_hash_with_severity(violation, "MEDIUM") - end - - inline_errors.each do |violation| - annotations << violation_hash_with_severity(violation, "HIGH") - end - - body = { annotations: annotations }.to_json - request = Net::HTTP::Post.new(uri.request_uri, { "Content-Type" => "application/json" }) - request.basic_auth @username, @password - request.body = body - - response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: use_ssl) do |http| - http.request(request) - end - - # show failure when server returns an error - case response - when Net::HTTPClientError, Net::HTTPServerError - # HTTP 4xx - 5xx - abort "\nError posting comment to Code Insights API: #{response.code} (#{response.message}) - #{response.body}\n\n" - end - end - - def violation_hash_with_severity(violation, severity) - annotation = {} - annotation["message"] = violation.message - annotation["severity"] = severity - annotation["path"] = violation.file - annotation["line"] = violation.line.to_i - return annotation - end - - def report_endpoint_at_commit(commit) - "#{@host}/rest/insights/1.0/projects/#{@project}/repos/#{@slug}/commits/#{commit}/reports/#{@report_key}" - end - - def annotation_endpoint_at_commit(commit) - report_endpoint_at_commit(commit) + "/annotations" - end - - def use_ssl - @host.include? "https://" - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/request_sources/github/github.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/request_sources/github/github.rb deleted file mode 100644 index 5bd91fe0..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/request_sources/github/github.rb +++ /dev/null @@ -1,543 +0,0 @@ -# rubocop:disable Metrics/ClassLength - -require "octokit" -require "danger/helpers/comments_helper" -require "danger/helpers/comment" -require "danger/request_sources/github/github_review" -require "danger/request_sources/github/github_review_unsupported" -require "danger/request_sources/support/get_ignored_violation" - -module Danger - module RequestSources - class GitHub < RequestSource - include Danger::Helpers::CommentsHelper - - attr_accessor :pr_json, :issue_json, :use_local_git, :support_tokenless_auth, :dismiss_out_of_range_messages, :host, :api_url, :verify_ssl - - def self.env_vars - ["DANGER_GITHUB_API_TOKEN", "DANGER_GITHUB_BEARER_TOKEN"] - end - - def self.optional_env_vars - ["DANGER_GITHUB_HOST", "DANGER_GITHUB_API_BASE_URL", "DANGER_OCTOKIT_VERIFY_SSL"] - end - - def initialize(ci_source, environment) - self.ci_source = ci_source - self.use_local_git = environment["DANGER_USE_LOCAL_GIT"] - self.support_tokenless_auth = false - self.dismiss_out_of_range_messages = false - self.host = environment.fetch("DANGER_GITHUB_HOST", "github.com") - # `DANGER_GITHUB_API_HOST` is the old name kept for legacy reasons and - # backwards compatibility. `DANGER_GITHUB_API_BASE_URL` is the new - # correctly named variable. - self.api_url = environment.fetch("DANGER_GITHUB_API_HOST") do - environment.fetch("DANGER_GITHUB_API_BASE_URL") do - "https://api.github.com/".freeze - end - end - self.verify_ssl = environment["DANGER_OCTOKIT_VERIFY_SSL"] != "false" - - @access_token = environment["DANGER_GITHUB_API_TOKEN"] - @bearer_token = environment["DANGER_GITHUB_BEARER_TOKEN"] - end - - def get_pr_from_branch(repo_name, branch_name, owner) - prs = client.pull_requests(repo_name, head: "#{owner}:#{branch_name}") - unless prs.empty? - prs.first.number - end - end - - def validates_as_ci? - true - end - - def validates_as_api_source? - valid_bearer_token? || valid_access_token? || use_local_git - end - - def scm - @scm ||= GitRepo.new - end - - def client - raise "No API token given, please provide one using `DANGER_GITHUB_API_TOKEN` or `DANGER_GITHUB_BEARER_TOKEN`" if !valid_access_token? && !valid_bearer_token? && !support_tokenless_auth - - @client ||= begin - Octokit.configure do |config| - config.connection_options[:ssl] = { verify: verify_ssl } - end - if valid_bearer_token? - Octokit::Client.new(bearer_token: @bearer_token, auto_paginate: true, api_endpoint: api_url) - elsif valid_access_token? - Octokit::Client.new(access_token: @access_token, auto_paginate: true, api_endpoint: api_url) - end - end - end - - def pr_diff - @pr_diff ||= client.pull_request(ci_source.repo_slug, ci_source.pull_request_id, accept: "application/vnd.github.v3.diff") - end - - def review - return @review unless @review.nil? - - begin - @review = client.pull_request_reviews(ci_source.repo_slug, ci_source.pull_request_id) - .map { |review_json| Danger::RequestSources::GitHubSource::Review.new(client, ci_source, review_json) } - .select(&:generated_by_danger?) - .last - @review ||= Danger::RequestSources::GitHubSource::Review.new(client, ci_source) - @review - rescue Octokit::NotFound - @review = Danger::RequestSources::GitHubSource::ReviewUnsupported.new - @review - end - end - - def setup_danger_branches - # we can use a github specific feature here: - base_branch = self.pr_json["base"]["ref"] - base_commit = self.pr_json["base"]["sha"] - head_branch = self.pr_json["head"]["ref"] - head_commit = self.pr_json["head"]["sha"] - - # Next, we want to ensure that we have a version of the current branch at a known location - scm.ensure_commitish_exists_on_branch! base_branch, base_commit - self.scm.exec "branch #{EnvironmentManager.danger_base_branch} #{base_commit}" - - # OK, so we want to ensure that we have a known head branch, this will always represent - # the head of the PR ( e.g. the most recent commit that will be merged. ) - scm.ensure_commitish_exists_on_branch! head_branch, head_commit - self.scm.exec "branch #{EnvironmentManager.danger_head_branch} #{head_commit}" - end - - def fetch_details - self.pr_json = client.pull_request(ci_source.repo_slug, ci_source.pull_request_id) - if self.pr_json["message"] == "Moved Permanently" - raise "Repo moved or renamed, make sure to update the git remote".red - end - - fetch_issue_details(self.pr_json) - self.ignored_violations = ignored_violations_from_pr - end - - def ignored_violations_from_pr - GetIgnoredViolation.new(self.pr_json["body"]).call - end - - def fetch_issue_details(pr_json) - href = pr_json["_links"]["issue"]["href"] - self.issue_json = client.get(href) - end - - def issue_comments - @comments ||= client.issue_comments(ci_source.repo_slug, ci_source.pull_request_id) - .map { |comment| Comment.from_github(comment) } - end - - # Sending data to GitHub - def update_pull_request!(warnings: [], errors: [], messages: [], markdowns: [], danger_id: "danger", new_comment: false, remove_previous_comments: false) - comment_result = {} - editable_comments = issue_comments.select { |comment| comment.generated_by_danger?(danger_id) } - last_comment = editable_comments.last - should_create_new_comment = new_comment || last_comment.nil? || remove_previous_comments - - previous_violations = - if should_create_new_comment - {} - else - parse_comment(last_comment.body) - end - - regular_violations = regular_violations_group( - warnings: warnings, - errors: errors, - messages: messages, - markdowns: markdowns - ) - - inline_violations = inline_violations_group( - warnings: warnings, - errors: errors, - messages: messages, - markdowns: markdowns - ) - - rest_inline_violations = submit_inline_comments!(**{ - danger_id: danger_id, - previous_violations: previous_violations - }.merge(inline_violations)) - - main_violations = merge_violations( - regular_violations, rest_inline_violations - ) - - main_violations_sum = main_violations.values.inject(:+) - - if (previous_violations.empty? && main_violations_sum.empty?) || remove_previous_comments - # Just remove the comment, if there's nothing to say or --remove-previous-comments CLI was set. - delete_old_comments!(danger_id: danger_id) - end - - # If there are still violations to show - if main_violations_sum.any? - body = generate_comment(**{ - template: "github", - danger_id: danger_id, - previous_violations: previous_violations - }.merge(main_violations)) - - comment_result = - if should_create_new_comment - client.add_comment(ci_source.repo_slug, ci_source.pull_request_id, body) - else - client.update_comment(ci_source.repo_slug, last_comment.id, body) - end - end - - # Now, set the pull request status. - # Note: this can terminate the entire process. - submit_pull_request_status!( - warnings: warnings, - errors: errors, - details_url: comment_result["html_url"], - danger_id: danger_id - ) - end - - def submit_pull_request_status!(warnings: [], errors: [], details_url: [], danger_id: "danger") - status = (errors.count.zero? ? "success" : "failure") - message = generate_description(warnings: warnings, errors: errors) - latest_pr_commit_ref = self.pr_json["head"]["sha"] - - if latest_pr_commit_ref.empty? || latest_pr_commit_ref.nil? - raise "Couldn't find a commit to update its status".red - end - - begin - client.create_status(ci_source.repo_slug, latest_pr_commit_ref, status, { - description: message, - context: "danger/#{danger_id}", - target_url: details_url - }) - rescue StandardError - # This usually means the user has no commit access to this repo - # That's always the case for open source projects where you can only - # use a read-only GitHub account - if errors.count > 0 - # We need to fail the actual build here - is_private = pr_json["base"]["repo"]["private"] - if is_private - abort("\nDanger has failed this build. \nFound #{'error'.danger_pluralize(errors.count)} and I don't have write access to the PR to set a PR status.") - else - abort("\nDanger has failed this build. \nFound #{'error'.danger_pluralize(errors.count)}.") - end - else - puts message - puts "\nDanger does not have write access to the PR to set a PR status.".yellow - end - end - end - - # Get rid of the previously posted comment, to only have the latest one - def delete_old_comments!(except: nil, danger_id: "danger") - issue_comments.each do |comment| - next unless comment.generated_by_danger?(danger_id) - next if comment.id == except - - client.delete_comment(ci_source.repo_slug, comment.id) - end - end - - def submit_inline_comments!(warnings: [], errors: [], messages: [], markdowns: [], previous_violations: [], danger_id: "danger") - pr_comments = client.pull_request_comments(ci_source.repo_slug, ci_source.pull_request_id) - danger_comments = pr_comments.select { |comment| Comment.from_github(comment).generated_by_danger?(danger_id) } - non_danger_comments = pr_comments - danger_comments - - if (warnings + errors + messages + markdowns).select(&:inline?).empty? - delete_old_inline_violations(danger_comments: danger_comments, non_danger_comments: non_danger_comments) - return {} - end - - diff_lines = self.pr_diff.lines - warnings = submit_inline_comments_for_kind!(:warning, warnings, diff_lines, danger_comments, previous_violations["warning"], danger_id: danger_id) - errors = submit_inline_comments_for_kind!(:error, errors, diff_lines, danger_comments, previous_violations["error"], danger_id: danger_id) - messages = submit_inline_comments_for_kind!(:message, messages, diff_lines, danger_comments, previous_violations["message"], danger_id: danger_id) - markdowns = submit_inline_comments_for_kind!(:markdown, markdowns, diff_lines, danger_comments, [], danger_id: danger_id) - - # submit removes from the array all comments that are still in force - # so we strike out all remaining ones - delete_old_inline_violations(danger_comments: danger_comments, non_danger_comments: non_danger_comments) - - { - warnings: warnings, - errors: errors, - messages: messages, - markdowns: markdowns - } - end - - def delete_old_inline_violations(danger_comments: [], non_danger_comments: []) - danger_comments.each do |comment| - violation = violations_from_table(comment["body"]).first - if !violation.nil? && violation.sticky - body = generate_inline_comment_body("white_check_mark", violation, danger_id: danger_id, resolved: true, template: "github") - client.update_pull_request_comment(ci_source.repo_slug, comment["id"], body) - else - # We remove non-sticky violations that have no replies - # Since there's no direct concept of a reply in GH, we simply consider - # the existence of non-danger comments in that line as replies - replies = non_danger_comments.select do |potential| - potential["path"] == comment["path"] && - potential["position"] == comment["position"] && - potential["commit_id"] == comment["commit_id"] - end - - client.delete_pull_request_comment(ci_source.repo_slug, comment["id"]) if replies.empty? - end - end - end - - def messages_are_equivalent(m1, m2) - blob_regexp = %r{blob/[0-9a-z]+/} - m1.file == m2.file && m1.line == m2.line && - m1.message.sub(blob_regexp, "") == m2.message.sub(blob_regexp, "") - end - - def submit_inline_comments_for_kind!(kind, messages, diff_lines, danger_comments, previous_violations, danger_id: "danger") - head_ref = pr_json["head"]["sha"] - previous_violations ||= [] - is_markdown_content = kind == :markdown - emoji = { warning: "warning", error: "no_entry_sign", message: "book" }[kind] - - messages.reject do |m| - next false unless m.file && m.line - - position = find_position_in_diff diff_lines, m, kind - - # Keep the change if it's line is not in the diff and not in dismiss mode - next dismiss_out_of_range_messages_for(kind) if position.nil? - - # Once we know we're gonna submit it, we format it - if is_markdown_content - body = generate_inline_markdown_body(m, danger_id: danger_id, template: "github") - else - # Hide the inline link behind a span - m = process_markdown(m, true) - body = generate_inline_comment_body(emoji, m, danger_id: danger_id, template: "github") - # A comment might be in previous_violations because only now it's part of the unified diff - # We remove from the array since it won't have a place in the table anymore - previous_violations.reject! { |v| messages_are_equivalent(v, m) } - end - - matching_comments = danger_comments.select do |comment_data| - if comment_data["path"] == m.file && comment_data["position"] == position - # Parse it to avoid problems with strikethrough - violation = violations_from_table(comment_data["body"]).first - if violation - messages_are_equivalent(violation, m) - else - blob_regexp = %r{blob/[0-9a-z]+/} - comment_data["body"].sub(blob_regexp, "") == body.sub(blob_regexp, "") - end - else - false - end - end - - if matching_comments.empty? - begin - # Since Octokit v8, the signature of create_pull_request_comment has been changed. - # See https://github.com/danger/danger/issues/1475 for detailed information. - client.create_pull_request_comment(ci_source.repo_slug, ci_source.pull_request_id, - body, head_ref, m.file, (Octokit::MAJOR >= 8 ? m.line : position)) - rescue Octokit::UnprocessableEntity => e - # Show more detail for UnprocessableEntity error - message = [e, "body: #{body}", "head_ref: #{head_ref}", "filename: #{m.file}", "position: #{position}"].join("\n") - puts message - - # Not reject because this comment has not completed - next false - end - else - # Remove the surviving comment so we don't strike it out - danger_comments.reject! { |c| matching_comments.include? c } - - # Update the comment to remove the strikethrough if present - comment = matching_comments.first - client.update_pull_request_comment(ci_source.repo_slug, comment["id"], body) - end - - # Remove this element from the array - next true - end - end - - def find_position_in_diff(diff_lines, message, kind) - range_header_regexp = /@@ -([0-9]+)(,([0-9]+))? \+(?[0-9]+)(,(?[0-9]+))? @@.*/ - file_header_regexp = %r{^diff --git a/.*} - - pattern = "+++ b/" + message.file + "\n" - file_start = diff_lines.index(pattern) - - # Files containing spaces sometimes have a trailing tab - if file_start.nil? - pattern = "+++ b/" + message.file + "\t\n" - file_start = diff_lines.index(pattern) - end - - return nil if file_start.nil? - - position = -1 - file_line = nil - - diff_lines.drop(file_start).each do |line| - # If the line has `No newline` annotation, position need increment - if line.eql?("\\ No newline at end of file\n") - position += 1 - next - end - # If we found the start of another file diff, we went too far - break if line.match file_header_regexp - - match = line.match range_header_regexp - - # file_line is set once we find the hunk the line is in - # we need to count how many lines in new file we have - # so we do it one by one ignoring the deleted lines - if !file_line.nil? && !line.start_with?("-") - if file_line == message.line - file_line = nil if dismiss_out_of_range_messages_for(kind) && !line.start_with?("+") - break - end - file_line += 1 - end - - # We need to count how many diff lines are between us and - # the line we're looking for - position += 1 - - next unless match - - range_start = match[:start].to_i - if match[:end] - range_end = match[:end].to_i + range_start - else - range_end = range_start - end - - # We are past the line position, just abort - break if message.line.to_i < range_start - next unless message.line.to_i >= range_start && message.line.to_i < range_end - - file_line = range_start - end - - position unless file_line.nil? - end - - # See the tests for examples of data coming in looks like - def parse_message_from_row(row) - message_regexp = %r{(<(a |span data-)href="https://#{host}/#{ci_source.repo_slug}/blob/[0-9a-z]+/(?[^#]+)#L(?[0-9]+)"(>[^<]* - |/>))?(?.*?)}im - match = message_regexp.match(row) - - if match[:line] - line = match[:line].to_i - else - line = nil - end - Violation.new(row, true, match[:file], line) - end - - def markdown_link_to_message(message, hide_link) - url = "https://#{host}/#{ci_source.repo_slug}/blob/#{pr_json['head']['sha']}/#{message.file}#L#{message.line}" - - if hide_link - "" - else - "[#{message.file}#L#{message.line}](#{url}) - " - end - end - - # @return [String] The organisation name, is nil if it can't be detected - def organisation - matched = self.issue_json["repository_url"].match(%r{repos/(.*)/}) - return matched[1] if matched && matched[1] - rescue StandardError - nil - end - - def dismiss_out_of_range_messages_for(kind) - if self.dismiss_out_of_range_messages.kind_of?(Hash) && self.dismiss_out_of_range_messages[kind] - self.dismiss_out_of_range_messages[kind] - elsif self.dismiss_out_of_range_messages == true - self.dismiss_out_of_range_messages - else - false - end - end - - # @return [String] A URL to the specific file, ready to be downloaded - def file_url(organisation: nil, repository: nil, ref: nil, branch: nil, path: nil) - organisation ||= self.organisation - ref ||= branch - - begin - # Retrieve the download URL (default ref on nil param) - contents = client.contents("#{organisation}/#{repository}", path: path, ref: ref) - @download_url = contents["download_url"] - rescue Octokit::ClientError - # Fallback to github.com - ref ||= "master" - @download_url = "https://raw.githubusercontent.com/#{organisation}/#{repository}/#{ref}/#{path}" - end - end - - private - - def valid_access_token? - @access_token && !@access_token.empty? - end - - def valid_bearer_token? - @bearer_token && !@bearer_token.empty? - end - - def regular_violations_group(warnings: [], errors: [], messages: [], markdowns: []) - { - warnings: warnings.reject(&:inline?), - errors: errors.reject(&:inline?), - messages: messages.reject(&:inline?), - markdowns: markdowns.reject(&:inline?) - } - end - - def inline_violations_group(warnings: [], errors: [], messages: [], markdowns: []) - cmp = proc do |a, b| - next -1 unless a.file && a.line - next 1 unless b.file && b.line - - next a.line <=> b.line if a.file == b.file - - next a.file <=> b.file - end - - # Sort to group inline comments by file - { - warnings: warnings.select(&:inline?).sort(&cmp), - errors: errors.select(&:inline?).sort(&cmp), - messages: messages.select(&:inline?).sort(&cmp), - markdowns: markdowns.select(&:inline?).sort(&cmp) - } - end - - def merge_violations(*violation_groups) - violation_groups.inject({}) do |accumulator, group| - accumulator.merge(group) { |_, old, fresh| old + fresh } - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/request_sources/github/github_review.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/request_sources/github/github_review.rb deleted file mode 100644 index 61337d39..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/request_sources/github/github_review.rb +++ /dev/null @@ -1,127 +0,0 @@ -require "octokit" -require "danger/ci_source/ci_source" -require "danger/request_sources/github/github_review_resolver" -require "danger/danger_core/messages/violation" -require "danger/danger_core/messages/markdown" -require "danger/helpers/comments_helper" -require "danger/helpers/comment" - -module Danger - module RequestSources - module GitHubSource - class Review - include Danger::Helpers::CommentsHelper - - # @see https://developer.github.com/v3/pulls/reviews/ for all possible events - EVENT_APPROVE = "APPROVE".freeze - EVENT_REQUEST_CHANGES = "REQUEST_CHANGES".freeze - EVENT_COMMENT = "COMMENT".freeze - - # Current review status, if the review has not been submitted yet -> STATUS_PENDING - STATUS_APPROVED = "APPROVED".freeze - STATUS_REQUESTED_CHANGES = "CHANGES_REQUESTED".freeze - STATUS_COMMENTED = "COMMENTED".freeze - STATUS_PENDING = "PENDING".freeze - - attr_reader :id, :body, :status, :review_json - - def initialize(client, ci_source, review_json = nil) - @ci_source = ci_source - @client = client - @review_json = review_json - end - - def id - return nil unless self.review_json - - self.review_json["id"] - end - - def body - return "" unless self.review_json - - self.review_json["body"] - end - - def status - return STATUS_PENDING if self.review_json.nil? - - return self.review_json["state"] - end - - # Starts the new review process - def start - @warnings = [] - @errors = [] - @messages = [] - @markdowns = [] - end - - # Submits the prepared review - def submit - general_violations = generate_general_violations - submission_body = generate_body - - # If the review resolver says that there is nothing to submit we skip submission - return unless ReviewResolver.should_submit?(self, submission_body) - - @review_json = @client.create_pull_request_review(@ci_source.repo_slug, @ci_source.pull_request_id, event: generate_event(general_violations), body: submission_body) - end - - def generated_by_danger?(danger_id = "danger") - self.review_json["body"].include?("generated_by_#{danger_id}") - end - - def message(message, sticky = true, file = nil, line = nil) - @messages << Violation.new(message, sticky, file, line) - end - - def warn(message, sticky = true, file = nil, line = nil) - @warnings << Violation.new(message, sticky, file, line) - end - - def fail(message, sticky = true, file = nil, line = nil) - @errors << Violation.new(message, sticky, file, line) - end - - def markdown(message, file = nil, line = nil) - @markdowns << Markdown.new(message, file, line) - end - - private - - # The only reason to request changes for the PR is to have errors from Danger - # otherwise let's just notify user and we're done - def generate_event(violations) - violations[:errors].empty? ? EVENT_APPROVE : EVENT_REQUEST_CHANGES - end - - def generate_body(danger_id: "danger") - previous_violations = parse_comment(body) - general_violations = generate_general_violations - new_body = generate_comment(warnings: general_violations[:warnings], - errors: general_violations[:errors], - messages: general_violations[:messages], - markdowns: general_violations[:markdowns], - previous_violations: previous_violations, - danger_id: danger_id, - template: "github") - return new_body - end - - def generate_general_violations - general_warnings = @warnings.reject(&:inline?) - general_errors = @errors.reject(&:inline?) - general_messages = @messages.reject(&:inline?) - general_markdowns = @markdowns.reject(&:inline?) - { - warnings: general_warnings, - markdowns: general_markdowns, - errors: general_errors, - messages: general_messages - } - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/request_sources/github/github_review_resolver.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/request_sources/github/github_review_resolver.rb deleted file mode 100644 index c9370e72..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/request_sources/github/github_review_resolver.rb +++ /dev/null @@ -1,17 +0,0 @@ -require "danger/request_sources/github/github_review" - -module Danger - module RequestSources - module GitHubSource - class ReviewResolver - def self.should_submit?(review, body) - return !same_body?(body, review.body) - end - - def self.same_body?(body1, body2) - return !body1.nil? && !body2.nil? && body1 == body2 - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/request_sources/github/github_review_unsupported.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/request_sources/github/github_review_unsupported.rb deleted file mode 100644 index 1efe1ec3..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/request_sources/github/github_review_unsupported.rb +++ /dev/null @@ -1,23 +0,0 @@ -module Danger - module RequestSources - module GitHubSource - class ReviewUnsupported - attr_reader :id, :body, :status, :review_json - - def initialize; end - - def start; end - - def submit; end - - def message(message, sticky = true, file = nil, line = nil); end - - def warn(message, sticky = true, file = nil, line = nil); end - - def fail(message, sticky = true, file = nil, line = nil); end - - def markdown(message, file = nil, line = nil); end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/request_sources/gitlab.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/request_sources/gitlab.rb deleted file mode 100644 index ab17b61f..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/request_sources/gitlab.rb +++ /dev/null @@ -1,557 +0,0 @@ -require "uri" -require "danger/helpers/comments_helper" -require "danger/helpers/comment" -require "danger/request_sources/support/get_ignored_violation" - -module Danger - module RequestSources - class GitLab < RequestSource - include Danger::Helpers::CommentsHelper - attr_accessor :mr_json, :commits_json, :dismiss_out_of_range_messages, :endpoint, :host - - FIRST_GITLAB_GEM_WITH_VERSION_CHECK = Gem::Version.new("4.6.0") - FIRST_VERSION_WITH_INLINE_COMMENTS = Gem::Version.new("10.8.0") - - def self.env_vars - ["DANGER_GITLAB_API_TOKEN"] - end - - def self.optional_env_vars - ["DANGER_GITLAB_HOST", "DANGER_GITLAB_API_BASE_URL"] - end - - def initialize(ci_source, environment) - self.ci_source = ci_source - self.dismiss_out_of_range_messages = false - @endpoint = environment["DANGER_GITLAB_API_BASE_URL"] || environment.fetch("CI_API_V4_URL", "https://gitlab.com/api/v4") - @host = environment.fetch("DANGER_GITLAB_HOST", URI.parse(endpoint).host) || "gitlab.com" - @token = environment["DANGER_GITLAB_API_TOKEN"] - end - - def client - raise "No API token given, please provide one using `DANGER_GITLAB_API_TOKEN`" unless @token - - # The require happens inline so that it won't cause exceptions when just using the `danger` gem. - require "gitlab" - - @client ||= Gitlab.client(endpoint: endpoint, private_token: @token) - rescue LoadError => e - if e.path == "gitlab" - puts "The GitLab gem was not installed, you will need to change your Gem from `danger` to `danger-gitlab`.".red - puts "\n - See https://github.com/danger/danger/blob/master/CHANGELOG.md#400" - else - puts "Error: #{e}".red - end - abort - end - - def validates_as_ci? - includes_port = host.include? ":" - raise "Port number included in `DANGER_GITLAB_HOST`, this will fail with GitLab CI Runners" if includes_port - - # We don't call super because in some cases the Git remote doesn't match the GitLab instance host. - # In Danger::EnvironmentManager#initialize we still check that the request source is #validates_as_api_source? - # so that should be sufficient to validate GitLab as request source. - # See https://github.com/danger/danger/issues/1231 and https://gitlab.com/gitlab-com/gl-infra/infrastructure/-/issues/10069. - true - end - - def validates_as_api_source? - @token && !@token.empty? - end - - def scm - @scm ||= GitRepo.new - end - - def base_commit - @base_commit ||= self.mr_json.diff_refs.base_sha - end - - def mr_comments - # @raw_comments contains what we got back from the server. - # @comments contains Comment objects (that have less information) - @comments ||= if supports_inline_comments - @raw_comments = mr_discussions - .auto_paginate - .flat_map { |discussion| discussion.notes.map { |note| note.to_h.merge({ "discussion_id" => discussion.id }) } } - @raw_comments - .map { |comment| Comment.from_gitlab(comment) } - else - @raw_comments = client.merge_request_comments(ci_source.repo_slug, ci_source.pull_request_id, per_page: 100) - .auto_paginate - @raw_comments - .map { |comment| Comment.from_gitlab(comment) } - end - end - - def mr_discussions - @mr_discussions ||= client.merge_request_discussions(ci_source.repo_slug, ci_source.pull_request_id) - end - - def mr_diff - @mr_diff ||= begin - diffs = mr_changes.changes.map do |change| - diff = change["diff"] - if diff.start_with?("--- a/") - diff - else - "--- a/#{change['old_path']}\n+++ b/#{change['new_path']}\n#{diff}" - end - end - diffs.join("\n") - end - end - - def mr_changed_paths - @mr_changed_paths ||= mr_changes - .changes.map { |change| change["new_path"] } - - @mr_changed_paths - end - - def mr_changes - @mr_changes ||= client.merge_request_changes(ci_source.repo_slug, ci_source.pull_request_id) - end - - def mr_closes_issues - @mr_closes_issues ||= client.merge_request_closes_issues(ci_source.repo_slug, ci_source.pull_request_id) - end - - def setup_danger_branches - # we can use a GitLab specific feature here: - base_branch = self.mr_json.source_branch - base_commit = self.mr_json.diff_refs.base_sha - head_branch = self.mr_json.target_branch - head_commit = self.mr_json.diff_refs.head_sha - - # Next, we want to ensure that we have a version of the current branch at a known location - scm.ensure_commitish_exists_on_branch! base_branch, base_commit - self.scm.exec "branch #{EnvironmentManager.danger_base_branch} #{base_commit}" - - # OK, so we want to ensure that we have a known head branch, this will always represent - # the head of the PR ( e.g. the most recent commit that will be merged. ) - scm.ensure_commitish_exists_on_branch! head_branch, head_commit - self.scm.exec "branch #{EnvironmentManager.danger_head_branch} #{head_commit}" - end - - def fetch_details - self.mr_json = client.merge_request(ci_source.repo_slug, self.ci_source.pull_request_id) - self.ignored_violations = ignored_violations_from_pr - end - - def ignored_violations_from_pr - GetIgnoredViolation.new(self.mr_json.description).call - end - - def supports_inline_comments - # If we can't check GitLab's version, we assume we don't support inline comments - @supports_inline_comments ||= if Gem.loaded_specs["gitlab"].version < FIRST_GITLAB_GEM_WITH_VERSION_CHECK - false - else - current_version = Gem::Version.new(client.version.version) - - current_version >= FIRST_VERSION_WITH_INLINE_COMMENTS - end - end - - def update_pull_request!(warnings: [], errors: [], messages: [], markdowns: [], danger_id: "danger", new_comment: false, remove_previous_comments: false) - if supports_inline_comments - update_pull_request_with_inline_comments!(warnings: warnings, errors: errors, messages: messages, markdowns: markdowns, danger_id: danger_id, new_comment: new_comment, remove_previous_comments: remove_previous_comments) - else - update_pull_request_without_inline_comments!(warnings: warnings, errors: errors, messages: messages, markdowns: markdowns, danger_id: danger_id, new_comment: new_comment, remove_previous_comments: remove_previous_comments) - end - end - - def update_pull_request_with_inline_comments!(warnings: [], errors: [], messages: [], markdowns: [], danger_id: "danger", new_comment: false, remove_previous_comments: false) - editable_regular_comments = mr_comments - .select { |comment| comment.generated_by_danger?(danger_id) } - .reject(&:inline?) - - last_comment = editable_regular_comments.last - should_create_new_comment = new_comment || last_comment.nil? || remove_previous_comments - - previous_violations = - if should_create_new_comment - {} - else - parse_comment(last_comment.body) - end - - regular_violations = regular_violations_group( - warnings: warnings, - errors: errors, - messages: messages, - markdowns: markdowns - ) - - inline_violations = inline_violations_group( - warnings: warnings, - errors: errors, - messages: messages, - markdowns: markdowns - ) - - rest_inline_violations = submit_inline_comments!(**{ - danger_id: danger_id, - previous_violations: previous_violations - }.merge(inline_violations)) - - main_violations = merge_violations( - regular_violations, rest_inline_violations - ) - - main_violations_sum = main_violations.values.inject(:+) - - if (previous_violations.empty? && main_violations_sum.empty?) || remove_previous_comments - # Just remove the comment, if there's nothing to say or --remove-previous-comments CLI was set. - delete_old_comments!(danger_id: danger_id) - end - - # If there are still violations to show - if main_violations_sum.any? - body = generate_comment(**{ - template: "gitlab", - danger_id: danger_id, - previous_violations: previous_violations - }.merge(main_violations)) - - comment_result = - if should_create_new_comment - client.create_merge_request_note(ci_source.repo_slug, ci_source.pull_request_id, body) - else - client.edit_merge_request_note(ci_source.repo_slug, ci_source.pull_request_id, last_comment.id, body) - end - end - end - - def update_pull_request_without_inline_comments!(warnings: [], errors: [], messages: [], markdowns: [], danger_id: "danger", new_comment: false, remove_previous_comments: false) - editable_comments = mr_comments.select { |comment| comment.generated_by_danger?(danger_id) } - - should_create_new_comment = new_comment || editable_comments.empty? || remove_previous_comments - - if should_create_new_comment - previous_violations = {} - else - comment = editable_comments.first.body - previous_violations = parse_comment(comment) - end - - if (previous_violations.empty? && (warnings + errors + messages + markdowns).empty?) || remove_previous_comments - # Just remove the comment, if there's nothing to say or --remove-previous-comments CLI was set. - delete_old_comments!(danger_id: danger_id) - else - body = generate_comment(warnings: warnings, - errors: errors, - messages: messages, - markdowns: markdowns, - previous_violations: previous_violations, - danger_id: danger_id, - template: "gitlab") - - if editable_comments.empty? or should_create_new_comment - client.create_merge_request_comment( - ci_source.repo_slug, ci_source.pull_request_id, body - ) - else - original_id = editable_comments.first.id - client.edit_merge_request_comment( - ci_source.repo_slug, - ci_source.pull_request_id, - original_id, - { body: body } - ) - end - end - end - - def delete_old_comments!(except: nil, danger_id: "danger") - @raw_comments.each do |raw_comment| - comment = Comment.from_gitlab(raw_comment) - next unless comment.generated_by_danger?(danger_id) - next if comment.id == except - next unless raw_comment.kind_of?(Hash) && raw_comment["position"].nil? - - begin - client.delete_merge_request_comment( - ci_source.repo_slug, - ci_source.pull_request_id, - comment.id - ) - rescue StandardError - end - end - end - - def markdown_link_to_message(message, _) - "#{message.file}#L#{message.line}: " - end - - # @return [String] The organisation name, is nil if it can't be detected - def organisation - nil # TODO: Implement this - end - - def dismiss_out_of_range_messages_for(kind) - if self.dismiss_out_of_range_messages.kind_of?(Hash) && self.dismiss_out_of_range_messages[kind] - self.dismiss_out_of_range_messages[kind] - elsif self.dismiss_out_of_range_messages == true - self.dismiss_out_of_range_messages - else - false - end - end - - # @return [String] A URL to the specific file, ready to be downloaded - def file_url(organisation: nil, repository: nil, ref: nil, branch: nil, path: nil) - ref ||= (branch || "master") - # According to GitLab Repositories API docs path and id(slug) should be encoded. - path = URI.encode_www_form_component(path) - repository = URI.encode_www_form_component(repository) - "#{endpoint}/projects/#{repository}/repository/files/#{path}/raw?ref=#{ref}&private_token=#{@token}" - end - - def regular_violations_group(warnings: [], errors: [], messages: [], markdowns: []) - { - warnings: warnings.reject(&:inline?), - errors: errors.reject(&:inline?), - messages: messages.reject(&:inline?), - markdowns: markdowns.reject(&:inline?) - } - end - - def inline_violations_group(warnings: [], errors: [], messages: [], markdowns: []) - cmp = proc do |a, b| - next -1 unless a.file && a.line - next 1 unless b.file && b.line - - next a.line <=> b.line if a.file == b.file - - next a.file <=> b.file - end - - # Sort to group inline comments by file - { - warnings: warnings.select(&:inline?).sort(&cmp), - errors: errors.select(&:inline?).sort(&cmp), - messages: messages.select(&:inline?).sort(&cmp), - markdowns: markdowns.select(&:inline?).sort(&cmp) - } - end - - def merge_violations(*violation_groups) - violation_groups.inject({}) do |accumulator, group| - accumulator.merge(group) { |_, old, fresh| old + fresh } - end - end - - def submit_inline_comments!(warnings: [], errors: [], messages: [], markdowns: [], previous_violations: [], danger_id: "danger") - comments = mr_discussions - .auto_paginate - .flat_map { |discussion| discussion.notes.map { |note| note.to_h.merge({ "discussion_id" => discussion.id }) } } - .select { |comment| Comment.from_gitlab(comment).inline? } - - danger_comments = comments.select { |comment| Comment.from_gitlab(comment).generated_by_danger?(danger_id) } - non_danger_comments = comments - danger_comments - - diff_lines = [] - - warnings = submit_inline_comments_for_kind!(:warning, warnings, diff_lines, danger_comments, previous_violations["warning"], danger_id: danger_id) - errors = submit_inline_comments_for_kind!(:error, errors, diff_lines, danger_comments, previous_violations["error"], danger_id: danger_id) - messages = submit_inline_comments_for_kind!(:message, messages, diff_lines, danger_comments, previous_violations["message"], danger_id: danger_id) - markdowns = submit_inline_comments_for_kind!(:markdown, markdowns, diff_lines, danger_comments, [], danger_id: danger_id) - - # submit removes from the array all comments that are still in force - # so we strike out all remaining ones - danger_comments.each do |comment| - violation = violations_from_table(comment["body"]).first - if !violation.nil? && violation.sticky - body = generate_inline_comment_body("white_check_mark", violation, danger_id: danger_id, resolved: true, template: "gitlab") - client.update_merge_request_discussion_note(ci_source.repo_slug, ci_source.pull_request_id, comment["discussion_id"], comment["id"], body: body) - else - # We remove non-sticky violations that have no replies - # Since there's no direct concept of a reply in GH, we simply consider - # the existence of non-danger comments in that line as replies - replies = non_danger_comments.select do |potential| - potential["path"] == comment["path"] && - potential["position"] == comment["position"] && - potential["commit_id"] == comment["commit_id"] - end - - client.delete_merge_request_comment(ci_source.repo_slug, ci_source.pull_request_id, comment["id"]) if replies.empty? - end - end - - { - warnings: warnings, - errors: errors, - messages: messages, - markdowns: markdowns - } - end - - def submit_inline_comments_for_kind!(kind, messages, _diff_lines, danger_comments, previous_violations, danger_id: "danger") - previous_violations ||= [] - is_markdown_content = kind == :markdown - emoji = { warning: "warning", error: "no_entry_sign", message: "book" }[kind] - - messages.reject do |m| - next false unless m.file && m.line - # Reject if it's out of range and in dismiss mode - next true if dismiss_out_of_range_messages_for(kind) && is_out_of_range(mr_changes.changes, m) - - # Once we know we're gonna submit it, we format it - if is_markdown_content - body = generate_inline_markdown_body(m, danger_id: danger_id, template: "gitlab") - else - # Hide the inline link behind a span - m = process_markdown(m, true) - body = generate_inline_comment_body(emoji, m, danger_id: danger_id, template: "gitlab") - # A comment might be in previous_violations because only now it's part of the unified diff - # We remove from the array since it won't have a place in the table anymore - previous_violations.reject! { |v| messages_are_equivalent(v, m) } - end - - matching_comments = danger_comments.select do |comment_data| - position = comment_data["position"] - - if position.nil? - false - else - position["new_path"] == m.file && position["new_line"] == m.line - end - end - - if matching_comments.empty? - old_position = find_old_position_in_diff mr_changes.changes, m - next false if old_position.nil? - - params = { - body: body, - position: { - position_type: "text", - new_path: m.file, - new_line: m.line, - old_path: old_position[:path], - old_line: old_position[:line], - base_sha: self.mr_json.diff_refs.base_sha, - start_sha: self.mr_json.diff_refs.start_sha, - head_sha: self.mr_json.diff_refs.head_sha - } - } - begin - client.create_merge_request_discussion(ci_source.repo_slug, ci_source.pull_request_id, params) - rescue Gitlab::Error::Error => e - message = [e, "body: #{body}", "position: #{params[:position].inspect}"].join("\n") - puts message - - next false - end - else - # Remove the surviving comment so we don't strike it out - danger_comments.reject! { |c| matching_comments.include? c } - - # Update the comment to remove the strikethrough if present - comment = matching_comments.first - begin - client.update_merge_request_discussion_note(ci_source.repo_slug, ci_source.pull_request_id, comment["discussion_id"], comment["id"], body: body) - rescue Gitlab::Error::Error => e - message = [e, "body: #{body}"].join("\n") - puts message - - next false - end - end - - # Remove this element from the array - next true - end - end - - def find_old_position_in_diff(changes, message) - range_header_regexp = /@@ -(?[0-9]+)(,([0-9]+))? \+(?[0-9]+)(,([0-9]+))? @@.*/ - - change = changes.find { |c| c["new_path"] == message.file } - # If there is no changes or rename only or deleted, return nil. - return nil if change.nil? || change["diff"].empty? || change["deleted_file"] - - modified_position = { - path: change["old_path"], - line: nil - } - - # If the file is new one, old line number must be nil. - return modified_position if change["new_file"] - - current_old_line = 0 - current_new_line = 0 - - change["diff"].each_line do |line| - match = line.match range_header_regexp - - if match - # If the message line is at before next diffs, break from loop. - break if message.line.to_i < match[:new].to_i - - # The match [:old] line does not appear yet at the header position, so reduce line number. - current_old_line = match[:old].to_i - 1 - current_new_line = match[:new].to_i - 1 - next - end - - if line.start_with?("-") - current_old_line += 1 - elsif line.start_with?("+") - current_new_line += 1 - # If the message line starts with '+', old line number must be nil. - return modified_position if current_new_line == message.line.to_i - elsif !line.eql?("\\ No newline at end of file\n") - current_old_line += 1 - current_new_line += 1 - # If the message line doesn't start with '+', old line number must be specified. - break if current_new_line == message.line.to_i - end - end - - { - path: change["old_path"], - line: current_old_line - current_new_line + message.line.to_i - } - end - - def is_out_of_range(changes, message) - change = changes.find { |c| c["new_path"] == message.file } - # If there is no changes or rename only or deleted, return out of range. - return true if change.nil? || change["diff"].empty? || change["deleted_file"] - - # If new file then return in range - return false if change["new_file"] - - addition_lines = generate_addition_lines(change["diff"]) - return false if addition_lines.include?(message.line.to_i) - - return true - end - - def generate_addition_lines(diff) - range_header_regexp = /@@ -(?[0-9]+)(,([0-9]+))? \+(?[0-9]+)(,([0-9]+))? @@.*/ - addition_lines = [] - line_number = 0 - diff.each_line do |line| - if line.match range_header_regexp - line = line.split("+").last - line = line.split(" ").first - range_string = line.split(",") - line_number = range_string[0].to_i - 1 - elsif line.start_with?("+") - addition_lines.push(line_number) - elsif line.start_with?("-") - line_number -= 1 - end - line_number += 1 - end - addition_lines - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/request_sources/local_only.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/request_sources/local_only.rb deleted file mode 100644 index 99f66029..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/request_sources/local_only.rb +++ /dev/null @@ -1,50 +0,0 @@ -require "danger/helpers/comments_helper" -require "danger/helpers/comment" - -module Danger - module RequestSources - class LocalOnly < RequestSource - include Danger::Helpers::CommentsHelper - attr_accessor :mr_json, :commits_json - - def self.env_vars - ["DANGER_LOCAL_ONLY"] - end - - def initialize(ci_source, _environment) - self.ci_source = ci_source - end - - def validates_as_ci? - true - end - - def validates_as_api_source? - true - end - - def scm - @scm ||= GitRepo.new - end - - def setup_danger_branches - # Check that discovered values really exists - [ci_source.base_commit, ci_source.head_commit].each do |commit| - raise "Specified commit '#{commit}' not found" if scm.exec("rev-parse --quiet --verify #{commit}").empty? - end - - self.scm.exec "branch #{EnvironmentManager.danger_base_branch} #{ci_source.base_commit}" - self.scm.exec "branch #{EnvironmentManager.danger_head_branch} #{ci_source.head_commit}" - end - - def fetch_details; end - - def update_pull_request!(_hash_needed); end - - # @return [String] The organisation name, is nil if it can't be detected - def organisation - nil - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/request_sources/request_source.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/request_sources/request_source.rb deleted file mode 100644 index dff59c2f..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/request_sources/request_source.rb +++ /dev/null @@ -1,97 +0,0 @@ -# frozen_string_literal: true - -module Danger - module RequestSources - class RequestSource - DANGER_REPO_NAME = "danger" - - attr_accessor :ci_source, :scm, :host, :ignored_violations - - def self.env_vars - raise "Subclass and overwrite self.env_vars" - end - - def self.optional_env_vars - [] - end - - def self.inherited(child_class) - available_request_sources.add child_class - super - end - - def self.available_request_sources - @available_request_sources ||= Set.new - end - - def self.source_name - to_s.sub("Danger::RequestSources::", "") - end - - def self.available_source_names_and_envs - available_request_sources.map do |klass| - " - #{klass.source_name}: #{klass.env_vars.join(', ').yellow}" - end - end - - def initialize(_ci_source, _environment) - raise "Subclass and overwrite initialize" - end - - def inspect - inspected = super - - inspected.gsub!(@token, "********") if @token - inspected.gsub!(@access_token, "********") if @access_token - inspected.gsub!(@bearer_token, "********") if @bearer_token - - inspected - end - - # @return [Boolean] whether scm.origins is a valid git repository or not - def validates_as_ci? - !!self.scm.origins.match(%r{#{Regexp.escape self.host}(:|/)(.+/.+?)(?:\.git)?$}) - end - - def validates_as_api_source? - raise "Subclass and overwrite validates_as_api_source?" - end - - def scm - @scm ||= nil - end - - def host - @host ||= nil - end - - def ignored_violations - @ignored_violations ||= [] - end - - def update_pull_request!(_warnings: [], _errors: [], _messages: [], _markdowns: []) - raise "Subclass and overwrite update_pull_request!" - end - - def setup_danger_branches - raise "Subclass and overwrite setup_danger_branches" - end - - def fetch_details - raise "Subclass and overwrite initialize" - end - - def organisation - raise "Subclass and overwrite organisation" - end - - def file_url(_organisation: nil, _repository: nil, _ref: nil, _branch: nil, _path: nil) - raise "Subclass and overwrite file_url" - end - - def update_build_status(_status) - raise "Subclass and overwrite update_build_status" - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/request_sources/support/get_ignored_violation.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/request_sources/support/get_ignored_violation.rb deleted file mode 100644 index 38770ad7..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/request_sources/support/get_ignored_violation.rb +++ /dev/null @@ -1,17 +0,0 @@ -class GetIgnoredViolation - IGNORE_REGEXP = />*\s*danger\s*:\s*ignore\s*"(?[^"]*)"/i.freeze - - def initialize(body) - @body = body - end - - def call - return [] unless body - - body.chomp.scan(IGNORE_REGEXP).flatten - end - - private - - attr_reader :body -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/request_sources/vsts.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/request_sources/vsts.rb deleted file mode 100644 index d6becebc..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/request_sources/vsts.rb +++ /dev/null @@ -1,278 +0,0 @@ -require "danger/helpers/comments_helper" -require "danger/request_sources/vsts_api" - -module Danger - module RequestSources - class VSTS < RequestSource - include Danger::Helpers::CommentsHelper - attr_accessor :pr_json - - def self.env_vars - [ - "DANGER_VSTS_API_TOKEN", - "DANGER_VSTS_HOST" - ] - end - - def self.optional_env_vars - [ - "DANGER_VSTS_API_VERSION" - ] - end - - def initialize(ci_source, environment) - self.ci_source = ci_source - - @is_vsts_ci = environment.key? "DANGER_VSTS_HOST" - - @api = VSTSAPI.new(ci_source.repo_slug, ci_source.pull_request_id, environment) - end - - def validates_as_ci? - @is_vsts_ci - end - - def validates_as_api_source? - @api.credentials_given? - end - - def scm - @scm ||= GitRepo.new - end - - def client - @api - end - - def host - @host ||= @api.host - end - - def fetch_details - self.pr_json = @api.fetch_pr_json - end - - def setup_danger_branches - base_branch = self.pr_json[:targetRefName].sub("refs/heads/", "") - base_commit = self.pr_json[:lastMergeTargetCommit][:commitId] - head_branch = self.pr_json[:sourceRefName].sub("refs/heads/", "") - head_commit = self.pr_json[:lastMergeSourceCommit][:commitId] - - # Next, we want to ensure that we have a version of the current branch at a known location - scm.ensure_commitish_exists_on_branch! base_branch, base_commit - self.scm.exec "branch #{EnvironmentManager.danger_base_branch} #{base_commit}" - - # OK, so we want to ensure that we have a known head branch, this will always represent - # the head of the PR ( e.g. the most recent commit that will be merged. ) - scm.ensure_commitish_exists_on_branch! head_branch, head_commit - self.scm.exec "branch #{EnvironmentManager.danger_head_branch} #{head_commit}" - end - - def organisation - nil - end - - def update_pull_request!(warnings: [], errors: [], messages: [], markdowns: [], danger_id: "danger", new_comment: false, remove_previous_comments: false) - unless @api.supports_comments? - return - end - - regular_violations = regular_violations_group( - warnings: warnings, - errors: errors, - messages: messages, - markdowns: markdowns - ) - - inline_violations = inline_violations_group( - warnings: warnings, - errors: errors, - messages: messages, - markdowns: markdowns - ) - - rest_inline_violations = submit_inline_comments!(**{ - danger_id: danger_id, - previous_violations: {} - }.merge(inline_violations)) - - main_violations = merge_violations( - regular_violations, rest_inline_violations - ) - - comment = generate_description(warnings: main_violations[:warnings], errors: main_violations[:errors]) - comment += "\n\n" - comment += generate_comment(**{ - previous_violations: {}, - danger_id: danger_id, - template: "vsts" - }.merge(main_violations)) - if new_comment || remove_previous_comments - post_new_comment(comment) - else - update_old_comment(comment, danger_id: danger_id) - end - end - - def post_new_comment(comment) - @api.post_comment(comment) - end - - def update_old_comment(new_comment, danger_id: "danger") - comment_updated = false - @api.fetch_last_comments.each do |c| - thread_id = c[:id] - comment = c[:comments].first - comment_id = comment[:id] - comment_content = comment[:content].nil? ? "" : comment[:content] - # Skip the comment if it wasn't posted by danger - next unless comment_content.include?("generated_by_#{danger_id}") - # Skip the comment if it's an inline comment - next unless c[:threadContext].nil? - - # Updated the danger posted comment - @api.update_comment(thread_id, comment_id, new_comment) - comment_updated = true - end - # If no comment was updated, post a new one - post_new_comment(new_comment) unless comment_updated - end - - def submit_inline_comments!(warnings: [], errors: [], messages: [], markdowns: [], previous_violations: [], danger_id: "danger") - # Avoid doing any fetchs if there's no inline comments - return {} if (warnings + errors + messages + markdowns).select(&:inline?).empty? - - pr_threads = @api.fetch_last_comments - danger_threads = pr_threads.select do |thread| - comment = thread[:comments].first - comment_content = comment[:content].nil? ? "" : comment[:content] - - next comment_content.include?("generated_by_#{danger_id}") - end - non_danger_threads = pr_threads - danger_threads - - warnings = submit_inline_comments_for_kind!(:warning, warnings, danger_threads, previous_violations["warning"], danger_id: danger_id) - errors = submit_inline_comments_for_kind!(:error, errors, danger_threads, previous_violations["error"], danger_id: danger_id) - messages = submit_inline_comments_for_kind!(:message, messages, danger_threads, previous_violations["message"], danger_id: danger_id) - markdowns = submit_inline_comments_for_kind!(:markdown, markdowns, danger_threads, [], danger_id: danger_id) - - # submit removes from the array all comments that are still in force - # so we strike out all remaining ones - danger_threads.each do |thread| - violation = violations_from_table(thread[:comments].first[:content]).first - if !violation.nil? && violation.sticky - body = generate_inline_comment_body("white_check_mark", violation, danger_id: danger_id, resolved: true, template: "github") - @api.update_comment(thread[:id], thread[:comments].first[:id], body) - end - end - - { - warnings: warnings, - errors: errors, - messages: messages, - markdowns: markdowns - } - end - - def messages_are_equivalent(m1, m2) - blob_regexp = %r{blob/[0-9a-z]+/} - m1.file == m2.file && m1.line == m2.line && - m1.message.sub(blob_regexp, "") == m2.message.sub(blob_regexp, "") - end - - def submit_inline_comments_for_kind!(kind, messages, danger_threads, previous_violations, danger_id: "danger") - previous_violations ||= [] - is_markdown_content = kind == :markdown - emoji = { warning: "warning", error: "no_entry_sign", message: "book" }[kind] - - messages.reject do |m| - next false unless m.file && m.line - - # Once we know we're gonna submit it, we format it - if is_markdown_content - body = generate_inline_markdown_body(m, danger_id: danger_id, template: "vsts") - else - # Hide the inline link behind a span - m.message = m.message.gsub("\n", "
    ") - m = process_markdown(m, true) - body = generate_inline_comment_body(emoji, m, danger_id: danger_id, template: "vsts") - # A comment might be in previous_violations because only now it's part of the unified diff - # We remove from the array since it won't have a place in the table anymore - previous_violations.reject! { |v| messages_are_equivalent(v, m) } - end - - matching_threads = danger_threads.select do |comment_data| - if comment_data.key?(:threadContext) && !comment_data[:threadContext].nil? && - comment_data[:threadContext][:filePath] == m.file && - comment_data[:threadContext].key?(:rightFileStart) && - comment_data[:threadContext][:rightFileStart][:line] == m.line - # Parse it to avoid problems with strikethrough - violation = violations_from_table(comment_data[:comments].first[:content]).first - if violation - messages_are_equivalent(violation, m) - else - blob_regexp = %r{blob/[0-9a-z]+/} - comment_data[:comments].first[:content].sub(blob_regexp, "") == body.sub(blob_regexp, "") - end - else - false - end - end - - if matching_threads.empty? - @api.post_inline_comment(body, m.file, m.line) - - # Not reject because this comment has not completed - next false - else - # Remove the surviving comment so we don't strike it out - danger_threads.reject! { |c| matching_threads.include? c } - - # Update the comment to remove the strikethrough if present - thread = matching_threads.first - @api.update_comment(thread[:id], thread[:comments].first[:id], body) - end - - # Remove this element from the array - next true - end - end - - private - - def regular_violations_group(warnings: [], errors: [], messages: [], markdowns: []) - { - warnings: warnings.reject(&:inline?), - errors: errors.reject(&:inline?), - messages: messages.reject(&:inline?), - markdowns: markdowns.reject(&:inline?) - } - end - - def inline_violations_group(warnings: [], errors: [], messages: [], markdowns: []) - cmp = proc do |a, b| - next -1 unless a.file && a.line - next 1 unless b.file && b.line - - next a.line <=> b.line if a.file == b.file - - next a.file <=> b.file - end - - # Sort to group inline comments by file - { - warnings: warnings.select(&:inline?).sort(&cmp), - errors: errors.select(&:inline?).sort(&cmp), - messages: messages.select(&:inline?).sort(&cmp), - markdowns: markdowns.select(&:inline?).sort(&cmp) - } - end - - def merge_violations(*violation_groups) - violation_groups.inject({}) do |accumulator, group| - accumulator.merge(group) { |_, old, fresh| old + fresh } - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/request_sources/vsts_api.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/request_sources/vsts_api.rb deleted file mode 100644 index 1b49b199..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/request_sources/vsts_api.rb +++ /dev/null @@ -1,172 +0,0 @@ -# frozen_string_literal: true - -require "base64" -require "danger/helpers/comments_helper" - -module Danger - module RequestSources - class VSTSAPI - attr_accessor :host, :pr_api_endpoint, :min_api_version_for_comments - - def initialize(slug, pull_request_id, environment) - self.min_api_version_for_comments = "3.0" - - user_name = "" - personal_access_token = environment["DANGER_VSTS_API_TOKEN"] - - @token = Base64.strict_encode64("#{user_name}:#{personal_access_token}") - @api_version = environment["DANGER_VSTS_API_VERSION"] ||= self.min_api_version_for_comments - - self.host = environment["DANGER_VSTS_HOST"] - if self.host && !(self.host.include? "http://") && !(self.host.include? "https://") - self.host = "https://" + self.host - end - - self.pr_api_endpoint = "#{host}/_apis/git/repositories/#{slug}/pullRequests/#{pull_request_id}" - end - - def supports_comments? - major_version = @api_version.split(".").first.to_i - minimum_version_for_comments = self.min_api_version_for_comments.split(".").first.to_i - - major_version >= minimum_version_for_comments - end - - def inspect - inspected = super - - inspected.gsub!(@token, "********") if @token - - inspected - end - - def credentials_given? - @token && !@token.empty? - end - - def pull_request(*) - fetch_pr_json - end - - def fetch_pr_json - uri = URI("#{pr_api_endpoint}?api-version=#{@api_version}") - fetch_json(uri) - end - - def fetch_last_comments - uri = URI("#{pr_api_endpoint}/threads?api-version=#{@api_version}") - fetch_json(uri)[:value] - end - - def post_comment(text) - uri = URI("#{pr_api_endpoint}/threads?api-version=#{@api_version}") - body = { - "comments" => [ - { - "parentCommentId" => 0, - "content" => text, - "commentType" => 1 - } - ], - "properties" => { - "Microsoft.TeamFoundation.Discussion.SupportsMarkdown" => { - "type" => "System.Int32", - "value" => 1 - } - }, - "status" => 1 - }.to_json - post(uri, body) - end - - def post_inline_comment(text, file, line) - uri = URI("#{pr_api_endpoint}/threads?api-version=#{@api_version}") - body = { - "comments" => [ - { - "parentCommentId" => 0, - "content" => text, - "commentType" => 1 - } - ], - "properties" => { - "Microsoft.TeamFoundation.Discussion.SupportsMarkdown" => { - "type" => "System.Int32", - "value" => 1 - } - }, - "status" => 1, - "threadContext" => { - "filePath" => file, - "rightFileEnd" => { - "line" => line + 1, - "offset" => 1 - }, - "rightFileStart" => { - "line" => line, - "offset" => 1 - } - } - }.to_json - post(uri, body) - end - - def update_comment(thread, id, new_comment) - uri = URI("#{pr_api_endpoint}/threads/#{thread}/comments/#{id}?api-version=#{@api_version}") - body = { - "content" => new_comment - }.to_json - patch(uri, body) - end - - private - - def use_ssl - return self.pr_api_endpoint.include? "https://" - end - - def fetch_json(uri) - req = Net::HTTP::Get.new(uri.request_uri, { "Content-Type" => "application/json", "Authorization" => "Basic #{@token}" }) - res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: use_ssl) do |http| - http.request(req) - end - JSON.parse(res.body, symbolize_names: true) - end - - def post(uri, body) - req = Net::HTTP::Post.new(uri.request_uri, { "Content-Type" => "application/json", "Authorization" => "Basic #{@token}" }) - req.body = body - - res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: use_ssl) do |http| - http.request(req) - end - - # show error to the user when VSTS returned an error - case res - when Net::HTTPClientError, Net::HTTPServerError - # HTTP 4xx - 5xx - abort "\nError posting comment to VSTS: #{res.code} (#{res.message})\n\n" - end - end - - def patch(uri, body) - puts uri - puts body - - req = Net::HTTP::Patch.new(uri.request_uri, { "Content-Type" => "application/json", "Authorization" => "Basic #{@token}" }) - req.body = body - - res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: use_ssl) do |http| - http.request(req) - end - - # show error to the user when VSTS returned an error - case res - when Net::HTTPClientError, Net::HTTPServerError - # HTTP 4xx - 5xx - abort "\nError updating comment on VSTS: #{res.code} (#{res.message})\n\n" - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/scm_source/git_repo.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/scm_source/git_repo.rb deleted file mode 100644 index faf40f11..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/scm_source/git_repo.rb +++ /dev/null @@ -1,198 +0,0 @@ -# For more info see: https://github.com/schacon/ruby-git - -require "git" - -module Danger - class GitRepo - attr_accessor :diff, :log, :folder - - def diff_for_folder(folder, from: "master", to: "HEAD", lookup_top_level: false) - self.folder = folder - git_top_level = find_git_top_level_if_needed!(folder, lookup_top_level) - - repo = Git.open(git_top_level) - - ensure_commitish_exists!(from) - ensure_commitish_exists!(to) - - merge_base = find_merge_base(repo, from, to) - commits_in_branch_count = commits_in_branch_count(from, to) - - self.diff = repo.diff(merge_base, to) - self.log = repo.log(commits_in_branch_count).between(from, to) - end - - def renamed_files - # Get raw diff with --find-renames --diff-filter - # We need to pass --find-renames cause - # older versions of git don't use this flag as default - diff = exec( - "diff #{self.diff.from} #{self.diff.to} --find-renames --diff-filter=R" - ).lines.map { |line| line.tr("\n", "") } - - before_name_regexp = /^rename from (.*)$/ - after_name_regexp = /^rename to (.*)$/ - - # Extract old and new paths via regexp - diff.each_with_index.map do |line, index| - before_match = line.match(before_name_regexp) - next unless before_match - - after_match = diff.fetch(index + 1, "").match(after_name_regexp) - next unless after_match - - { - before: before_match.captures.first, - after: after_match.captures.first - } - end.compact - end - - def exec(string) - require "open3" - Dir.chdir(self.folder || ".") do - git_command = string.split(" ").dup.unshift("git") - Open3.popen2(default_env, *git_command) do |_stdin, stdout, _wait_thr| - stdout.read.rstrip - end - end - end - - def head_commit - exec("rev-parse HEAD") - end - - def tags - exec("tag") - end - - def origins - exec("remote show origin -n").lines.grep(/Fetch URL/)[0].split(": ", 2)[1].chomp - end - - def ensure_commitish_exists!(commitish) - return ensure_commitish_exists_on_branch!(commitish, commitish) if commit_is_ref?(commitish) - return if commit_exists?(commitish) - - git_in_depth_fetch - raise_if_we_cannot_find_the_commit(commitish) if commit_not_exists?(commitish) - end - - def ensure_commitish_exists_on_branch!(branch, commitish) - return if commit_exists?(commitish) - - depth = 0 - success = - (3..6).any? do |factor| - depth += Math.exp(factor).to_i - - git_fetch_branch_to_depth(branch, depth) - commit_exists?(commitish) - end - - return if success - - git_in_depth_fetch - raise_if_we_cannot_find_the_commit(commitish) if commit_not_exists?(commitish) - end - - private - - def git_in_depth_fetch - exec("fetch --depth 1000000") - end - - def git_fetch_branch_to_depth(branch, depth) - exec("fetch --depth=#{depth} --prune origin +refs/heads/#{branch}:refs/remotes/origin/#{branch}") - end - - def default_env - { "LANG" => "en_US.UTF-8" } - end - - def raise_if_we_cannot_find_the_commit(commitish) - raise "Commit #{commitish[0..7]} doesn't exist. Are you running `danger local/pr` against the correct repository? Also this usually happens when you rebase/reset and force-pushed." - end - - def commit_exists?(sha1) - !commit_not_exists?(sha1) - end - - def commit_not_exists?(sha1) - exec("rev-parse --quiet --verify #{sha1}^{commit}").empty? - end - - def find_merge_base(repo, from, to) - possible_merge_base = possible_merge_base(repo, from, to) - return possible_merge_base if possible_merge_base - - possible_merge_base = find_merge_base_with_incremental_fetch(repo, from, to) - return possible_merge_base if possible_merge_base - - git_in_depth_fetch - possible_merge_base = possible_merge_base(repo, from, to) - - raise "Cannot find a merge base between #{from} and #{to}. If you are using shallow clone/fetch, try increasing the --depth" unless possible_merge_base - - possible_merge_base - end - - def find_merge_base_with_incremental_fetch(repo, from, to) - from_is_ref = commit_is_ref?(from) - to_is_ref = commit_is_ref?(to) - - return unless from_is_ref || to_is_ref - - depth = 0 - (3..6).any? do |factor| - depth += Math.exp(factor).to_i - - git_fetch_branch_to_depth(from, depth) if from_is_ref - git_fetch_branch_to_depth(to, depth) if to_is_ref - possible_merge_base(repo, from, to) - end - end - - def possible_merge_base(repo, from, to) - [repo.merge_base(from, to)].find { |base| commit_exists?(base) } - end - - def commits_in_branch_count(from, to) - exec("rev-list #{from}..#{to} --count").to_i - end - - def commit_is_ref?(commit) - /[a-f0-9]{5,40}/ !~ commit - end - - def find_git_top_level_if_needed!(folder, lookup_top_level) - git_top_level = Dir.chdir(folder) { exec("rev-parse --show-toplevel") } - return git_top_level if lookup_top_level - - # To keep backward compatibility, `GitRepo#diff_for_folder` expects folder - # to be top level git directory or requires `true` to `lookup_top_level`. - # https://github.com/danger/danger/pull/1178 - return folder if compare_path(git_top_level, folder) - - message = "#{folder} is not the top level git directory. Pass correct path or `true` to `lookup_top_level` option for `diff_for_folder`" - raise ArgumentError, message - end - - # Compare given paths as realpath. Return true if both are same. - # `git rev-parse --show-toplevel` returns a path resolving symlink. In rspec, given path can - # be a temporary directory's path created under a symlinked directory `/var`. - def compare_path(path1, path2) - Pathname.new(path1).realdirpath == Pathname.new(path2).realdirpath - end - end -end - -module Git - class Base - # Use git-merge-base https://git-scm.com/docs/git-merge-base to - # find as good common ancestors as possible for a merge - def merge_base(commit1, commit2, *other_commits) - Open3.popen2("git", "merge-base", commit1, commit2, *other_commits) { |_stdin, stdout, _wait_thr| stdout.read.rstrip } - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/version.rb b/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/version.rb deleted file mode 100644 index 2dec3be3..00000000 --- a/bundle/ruby/3.2.0/gems/danger-9.4.3/lib/danger/version.rb +++ /dev/null @@ -1,4 +0,0 @@ -module Danger - VERSION = "9.4.3".freeze - DESCRIPTION = "Like Unit Tests, but for your Team Culture.".freeze -end diff --git a/bundle/ruby/3.2.0/gems/danger-plugin-api-1.0.0/.gitignore b/bundle/ruby/3.2.0/gems/danger-plugin-api-1.0.0/.gitignore deleted file mode 100644 index 5c6970d8..00000000 --- a/bundle/ruby/3.2.0/gems/danger-plugin-api-1.0.0/.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -/.bundle/ -/.yardoc -/Gemfile.lock -/_yardoc/ -/coverage/ -/doc/ -/pkg/ -/spec/reports/ -/tmp/ -*.gem \ No newline at end of file diff --git a/bundle/ruby/3.2.0/gems/danger-plugin-api-1.0.0/.rspec b/bundle/ruby/3.2.0/gems/danger-plugin-api-1.0.0/.rspec deleted file mode 100644 index 8c18f1ab..00000000 --- a/bundle/ruby/3.2.0/gems/danger-plugin-api-1.0.0/.rspec +++ /dev/null @@ -1,2 +0,0 @@ ---format documentation ---color diff --git a/bundle/ruby/3.2.0/gems/danger-plugin-api-1.0.0/.travis.yml b/bundle/ruby/3.2.0/gems/danger-plugin-api-1.0.0/.travis.yml deleted file mode 100644 index 5424ba35..00000000 --- a/bundle/ruby/3.2.0/gems/danger-plugin-api-1.0.0/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ -sudo: false -language: ruby -rvm: - - 2.1.3 -before_install: gem install bundler -v 1.12.5 diff --git a/bundle/ruby/3.2.0/gems/danger-plugin-api-1.0.0/CODE_OF_CONDUCT.md b/bundle/ruby/3.2.0/gems/danger-plugin-api-1.0.0/CODE_OF_CONDUCT.md deleted file mode 100644 index 78b95b0d..00000000 --- a/bundle/ruby/3.2.0/gems/danger-plugin-api-1.0.0/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,49 +0,0 @@ -# Contributor Code of Conduct - -As contributors and maintainers of this project, and in the interest of -fostering an open and welcoming community, we pledge to respect all people who -contribute through reporting issues, posting feature requests, updating -documentation, submitting pull requests or patches, and other activities. - -We are committed to making participation in this project a harassment-free -experience for everyone, regardless of level of experience, gender, gender -identity and expression, sexual orientation, disability, personal appearance, -body size, race, ethnicity, age, religion, or nationality. - -Examples of unacceptable behavior by participants include: - -* The use of sexualized language or imagery -* Personal attacks -* Trolling or insulting/derogatory comments -* Public or private harassment -* Publishing other's private information, such as physical or electronic - addresses, without explicit permission -* Other unethical or unprofessional conduct - -Project maintainers have the right and responsibility to remove, edit, or -reject comments, commits, code, wiki edits, issues, and other contributions -that are not aligned to this Code of Conduct, or to ban temporarily or -permanently any contributor for other behaviors that they deem inappropriate, -threatening, offensive, or harmful. - -By adopting this Code of Conduct, project maintainers commit themselves to -fairly and consistently applying these principles to every aspect of managing -this project. Project maintainers who do not follow or enforce the Code of -Conduct may be permanently removed from the project team. - -This code of conduct applies both within project spaces and in public spaces -when an individual is representing the project or its community. - -Instances of abusive, harassing, or otherwise unacceptable behavior may be -reported by contacting a project maintainer at orta.therox@gmail.com. All -complaints will be reviewed and investigated and will result in a response that -is deemed necessary and appropriate to the circumstances. Maintainers are -obligated to maintain confidentiality with regard to the reporter of an -incident. - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], -version 1.3.0, available at -[http://contributor-covenant.org/version/1/3/0/][version] - -[homepage]: http://contributor-covenant.org -[version]: http://contributor-covenant.org/version/1/3/0/ \ No newline at end of file diff --git a/bundle/ruby/3.2.0/gems/danger-plugin-api-1.0.0/Gemfile b/bundle/ruby/3.2.0/gems/danger-plugin-api-1.0.0/Gemfile deleted file mode 100644 index 3b96ef1c..00000000 --- a/bundle/ruby/3.2.0/gems/danger-plugin-api-1.0.0/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -# Specify your gem's dependencies in danger-plugin-api.gemspec -gemspec diff --git a/bundle/ruby/3.2.0/gems/danger-plugin-api-1.0.0/LICENSE.txt b/bundle/ruby/3.2.0/gems/danger-plugin-api-1.0.0/LICENSE.txt deleted file mode 100644 index b83b575f..00000000 --- a/bundle/ruby/3.2.0/gems/danger-plugin-api-1.0.0/LICENSE.txt +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 Orta Therox - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/bundle/ruby/3.2.0/gems/danger-plugin-api-1.0.0/README.md b/bundle/ruby/3.2.0/gems/danger-plugin-api-1.0.0/README.md deleted file mode 100644 index 4fd20840..00000000 --- a/bundle/ruby/3.2.0/gems/danger-plugin-api-1.0.0/README.md +++ /dev/null @@ -1,22 +0,0 @@ -# Danger Plugin API contract - -This repo contains a single gem, it represents the current version of the API, and what the minimum version of Danger supports it. - -Check the current version by clicking: [lib/danger/plugin/api/version.rb](lib/danger/plugin/api/version.rb). - -This frees plugin authors from being tied to a project which is aggressive on [semantic versioning](http://semver.org). As long as the plugin API stays the same -then as an author you can be safe in the knowledge that a version bump on Danger has not changed the external API. - -## What do I define as a public API? - -Well that one is a bit tricky, for plugins that is anything that can be found on the [Danger.Systems#reference](http://danger.systems/reference.html). Additions to the exposed DSL probably won't get bumps to this gem's versions, but breaking changes e.g. removals or renames definitely will. - -## Contributing - -Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/danger-plugin-api. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct. - - -## License - -The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT). - diff --git a/bundle/ruby/3.2.0/gems/danger-plugin-api-1.0.0/Rakefile b/bundle/ruby/3.2.0/gems/danger-plugin-api-1.0.0/Rakefile deleted file mode 100644 index b7e9ed54..00000000 --- a/bundle/ruby/3.2.0/gems/danger-plugin-api-1.0.0/Rakefile +++ /dev/null @@ -1,6 +0,0 @@ -require "bundler/gem_tasks" -require "rspec/core/rake_task" - -RSpec::Core::RakeTask.new(:spec) - -task :default => :spec diff --git a/bundle/ruby/3.2.0/gems/danger-plugin-api-1.0.0/bin/console b/bundle/ruby/3.2.0/gems/danger-plugin-api-1.0.0/bin/console deleted file mode 100755 index 96f1f7f5..00000000 --- a/bundle/ruby/3.2.0/gems/danger-plugin-api-1.0.0/bin/console +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env ruby - -require "bundler/setup" -require "danger/plugin/api" - -# You can add fixtures and/or initialization code here to make experimenting -# with your gem easier. You can also use a different console, if you like. - -# (If you use this, don't forget to add pry to your Gemfile!) -# require "pry" -# Pry.start - -require "irb" -IRB.start diff --git a/bundle/ruby/3.2.0/gems/danger-plugin-api-1.0.0/bin/setup b/bundle/ruby/3.2.0/gems/danger-plugin-api-1.0.0/bin/setup deleted file mode 100755 index dce67d86..00000000 --- a/bundle/ruby/3.2.0/gems/danger-plugin-api-1.0.0/bin/setup +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail -IFS=$'\n\t' -set -vx - -bundle install - -# Do any other automated setup that you need to do here diff --git a/bundle/ruby/3.2.0/gems/danger-plugin-api-1.0.0/danger-plugin-api.gemspec b/bundle/ruby/3.2.0/gems/danger-plugin-api-1.0.0/danger-plugin-api.gemspec deleted file mode 100644 index 29928dd4..00000000 --- a/bundle/ruby/3.2.0/gems/danger-plugin-api-1.0.0/danger-plugin-api.gemspec +++ /dev/null @@ -1,27 +0,0 @@ -# coding: utf-8 -lib = File.expand_path('../lib', __FILE__) -$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) -require 'danger/plugin/api/version' - -Gem::Specification.new do |spec| - spec.name = "danger-plugin-api" - spec.version = Danger::Plugin::Api::VERSION - spec.authors = ["Orta Therox"] - spec.email = ["orta.therox@gmail.com"] - - spec.summary = %q{An empty gem, which provides a SemVer link for the Danger plugin API.} - spec.description = %q{An empty gem, which provides a SemVer link for the Danger plugin API.} - spec.homepage = "https://github.com/danger/danger-plugin-api" - spec.license = "MIT" - - spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) } - spec.bindir = "exe" - spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) } - spec.require_paths = ["lib"] - - spec.add_runtime_dependency "danger", "> 2.0" - - spec.add_development_dependency "bundler", "~> 1.12" - spec.add_development_dependency "rake", "~> 10.0" - spec.add_development_dependency "rspec", "~> 3.0" -end diff --git a/bundle/ruby/3.2.0/gems/danger-plugin-api-1.0.0/lib/danger/plugin/api.rb b/bundle/ruby/3.2.0/gems/danger-plugin-api-1.0.0/lib/danger/plugin/api.rb deleted file mode 100644 index 589198f2..00000000 --- a/bundle/ruby/3.2.0/gems/danger-plugin-api-1.0.0/lib/danger/plugin/api.rb +++ /dev/null @@ -1,9 +0,0 @@ -require "danger/plugin/api/version" - -module Danger - module Plugin - module Api - # NOP - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-plugin-api-1.0.0/lib/danger/plugin/api/version.rb b/bundle/ruby/3.2.0/gems/danger-plugin-api-1.0.0/lib/danger/plugin/api/version.rb deleted file mode 100644 index 48340d3f..00000000 --- a/bundle/ruby/3.2.0/gems/danger-plugin-api-1.0.0/lib/danger/plugin/api/version.rb +++ /dev/null @@ -1,7 +0,0 @@ -module Danger - module Plugin - module Api - VERSION = "1.0.0".freeze - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-prose-2.0.7/.gitignore b/bundle/ruby/3.2.0/gems/danger-prose-2.0.7/.gitignore deleted file mode 100644 index 3de02514..00000000 --- a/bundle/ruby/3.2.0/gems/danger-prose-2.0.7/.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -.DS_Store -pkg -.bundle/ -.idea/ -.tm_properties -vendor diff --git a/bundle/ruby/3.2.0/gems/danger-prose-2.0.7/.travis.yml b/bundle/ruby/3.2.0/gems/danger-prose-2.0.7/.travis.yml deleted file mode 100644 index 5f72da89..00000000 --- a/bundle/ruby/3.2.0/gems/danger-prose-2.0.7/.travis.yml +++ /dev/null @@ -1,13 +0,0 @@ -language: ruby -cache: - directories: - - bundle - -rvm: - - 2.0 - - 2.1.3 - - 2.3.1 - -script: - - bundle exec rake spec - - bundle exec danger plugins lint diff --git a/bundle/ruby/3.2.0/gems/danger-prose-2.0.7/CHANGELOG.md b/bundle/ruby/3.2.0/gems/danger-prose-2.0.7/CHANGELOG.md deleted file mode 100644 index 15e614ee..00000000 --- a/bundle/ruby/3.2.0/gems/danger-prose-2.0.7/CHANGELOG.md +++ /dev/null @@ -1,20 +0,0 @@ -2.0.6 -- Adds the ability to set the dictionary language (Cellane) - -2.0.6 -- Adds the ability to ignore_numbers and ignore_acronyms (Cellane) - -2.0.5 -- Fix based on danger changing how `FileList` is implemented (dbgrandi) - -2.0.4 -- Make sure proselint success results are filtered out (zhusee2) - -2.0.1 -- Fix typo in module name (suchow) - -2.0.0 -- Fix a bunch of things (orta) - -1.0.0 -- Initial release diff --git a/bundle/ruby/3.2.0/gems/danger-prose-2.0.7/Gemfile b/bundle/ruby/3.2.0/gems/danger-prose-2.0.7/Gemfile deleted file mode 100644 index d71a53a3..00000000 --- a/bundle/ruby/3.2.0/gems/danger-prose-2.0.7/Gemfile +++ /dev/null @@ -1,11 +0,0 @@ -source 'https://rubygems.org' - -# Specify your gem's dependencies in danger-proselint.gemspec -gemspec - -group :development do - gem 'mocha' - gem 'bacon' - gem 'mocha-on-bacon' - gem 'prettybacon' -end diff --git a/bundle/ruby/3.2.0/gems/danger-prose-2.0.7/Gemfile.lock b/bundle/ruby/3.2.0/gems/danger-prose-2.0.7/Gemfile.lock deleted file mode 100644 index d4bb1552..00000000 --- a/bundle/ruby/3.2.0/gems/danger-prose-2.0.7/Gemfile.lock +++ /dev/null @@ -1,127 +0,0 @@ -PATH - remote: . - specs: - danger-prose (2.0.7) - danger - -GEM - remote: https://rubygems.org/ - specs: - addressable (2.5.2) - public_suffix (>= 2.0.2, < 4.0) - bacon (1.2.0) - claide (1.0.2) - claide-plugins (0.9.2) - cork - nap - open4 (~> 1.3) - coderay (1.1.2) - colored2 (3.1.2) - cork (0.3.0) - colored2 (~> 3.1) - danger (5.3.3) - claide (~> 1.0) - claide-plugins (>= 0.9.2) - colored2 (~> 3.1) - cork (~> 0.1) - faraday (~> 0.9) - faraday-http-cache (~> 1.0) - git (~> 1) - kramdown (~> 1.5) - octokit (~> 4.7) - terminal-table (~> 1) - diff-lcs (1.3) - faraday (0.14.0) - multipart-post (>= 1.2, < 3) - faraday-http-cache (1.3.1) - faraday (~> 0.8) - ffi (1.9.23) - formatador (0.2.5) - git (1.3.0) - guard (2.14.2) - formatador (>= 0.2.4) - listen (>= 2.7, < 4.0) - lumberjack (>= 1.0.12, < 2.0) - nenv (~> 0.1) - notiffany (~> 0.0) - pry (>= 0.9.12) - shellany (~> 0.0) - thor (>= 0.18.1) - guard-compat (1.2.1) - guard-rspec (4.7.3) - guard (~> 2.1) - guard-compat (~> 1.1) - rspec (>= 2.99.0, < 4.0) - kramdown (1.16.2) - listen (3.0.7) - rb-fsevent (>= 0.9.3) - rb-inotify (>= 0.9.7) - lumberjack (1.0.12) - metaclass (0.0.4) - method_source (0.9.0) - mocha (1.3.0) - metaclass (~> 0.0.1) - mocha-on-bacon (0.2.3) - mocha (>= 0.13.0) - multipart-post (2.0.0) - nap (1.1.0) - nenv (0.3.0) - notiffany (0.1.1) - nenv (~> 0.1) - shellany (~> 0.0) - octokit (4.8.0) - sawyer (~> 0.8.0, >= 0.5.3) - open4 (1.3.4) - prettybacon (0.0.2) - bacon (~> 1.2) - pry (0.11.3) - coderay (~> 1.1.0) - method_source (~> 0.9.0) - public_suffix (3.0.1) - rake (10.5.0) - rb-fsevent (0.10.2) - rb-inotify (0.9.10) - ffi (>= 0.5.0, < 2) - rspec (3.7.0) - rspec-core (~> 3.7.0) - rspec-expectations (~> 3.7.0) - rspec-mocks (~> 3.7.0) - rspec-core (3.7.1) - rspec-support (~> 3.7.0) - rspec-expectations (3.7.0) - diff-lcs (>= 1.2.0, < 2.0) - rspec-support (~> 3.7.0) - rspec-mocks (3.7.0) - diff-lcs (>= 1.2.0, < 2.0) - rspec-support (~> 3.7.0) - rspec-support (3.7.1) - sawyer (0.8.1) - addressable (>= 2.3.5, < 2.6) - faraday (~> 0.8, < 1.0) - shellany (0.0.1) - terminal-table (1.8.0) - unicode-display_width (~> 1.1, >= 1.1.1) - thor (0.20.0) - unicode-display_width (1.3.0) - yard (0.9.12) - -PLATFORMS - ruby - -DEPENDENCIES - bacon - bundler (~> 1.3) - danger-prose! - guard (~> 2.14) - guard-rspec (~> 4.7) - listen (= 3.0.7) - mocha - mocha-on-bacon - prettybacon - pry - rake (~> 10.0) - rspec (~> 3.4) - yard (~> 0.8) - -BUNDLED WITH - 1.16.1 diff --git a/bundle/ruby/3.2.0/gems/danger-prose-2.0.7/Guardfile b/bundle/ruby/3.2.0/gems/danger-prose-2.0.7/Guardfile deleted file mode 100644 index 9daab23d..00000000 --- a/bundle/ruby/3.2.0/gems/danger-prose-2.0.7/Guardfile +++ /dev/null @@ -1,21 +0,0 @@ -# A guardfile for making Danger Plugins -# For more info see https://github.com/guard/guard#readme - -# To run, use `bundle exec guard`. - -guard :rspec, cmd: 'bundle exec rspec' do - require 'guard/rspec/dsl' - dsl = Guard::RSpec::Dsl.new(self) - - # Feel free to open issues for suggestions and improvements - - # RSpec files - rspec = dsl.rspec - watch(rspec.spec_helper) { rspec.spec_dir } - watch(rspec.spec_support) { rspec.spec_dir } - watch(rspec.spec_files) - - # Ruby files - ruby = dsl.ruby - dsl.watch_spec_files_for(ruby.lib_files) -end diff --git a/bundle/ruby/3.2.0/gems/danger-prose-2.0.7/LICENSE.txt b/bundle/ruby/3.2.0/gems/danger-prose-2.0.7/LICENSE.txt deleted file mode 100644 index 527a34a3..00000000 --- a/bundle/ruby/3.2.0/gems/danger-prose-2.0.7/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2016 David Grandinetti - -MIT License - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/bundle/ruby/3.2.0/gems/danger-prose-2.0.7/README.md b/bundle/ruby/3.2.0/gems/danger-prose-2.0.7/README.md deleted file mode 100644 index 24f2a153..00000000 --- a/bundle/ruby/3.2.0/gems/danger-prose-2.0.7/README.md +++ /dev/null @@ -1,74 +0,0 @@ -# danger-prose - -A description of danger-prose. - -## Installation - -As a pre-requisite, danger-prose requires a node environment for spell checking and a python environment for linting. So, make sure your CI environment has support for either or both of those. - - $ gem install danger-prose - -### prose - -Lint markdown files inside your projects. -This is done using the [proselint](http://proselint.com) python egg. -Results are passed out as a table in markdown. - -
    Running linter with custom disabled linters -
    -# Runs a linter with comma style and tense present disabled
    -prose.disable_linters = ["misc.scare_quotes", "misc.tense_present"]
    -prose.lint_files "_posts/*.md"
    -
    - -
    Running linter with default linters -
    -# Runs a linter with all styles, on modified and added markdown files in this PR
    -prose.lint_files
    -
    - -
    Running the spell checker -
    -# Runs a spell checker on all files in `_post`
    -prose.check_spelling "_posts/*.md"
    -
    - -
    Running the spell checker, with some words whitelisted -
    -prose.ignored_words = ["orta", "artsy"]
    -prose.check_spelling
    -
    - - - -#### Attributes - -`disable_linters` - Allows you to disable a collection of linters from running. Doesn't work yet. -You can get a list of [them here](https://github.com/amperser/proselint#checks) -defaults to `["misc.scare_quotes", "typography.symbols"]` when it's nil. - -`ignored_words` - Allows you to add a collection of words to skip in spellchecking. -defaults to `[""]` when it's nil. - -`ignore_numbers` - Allows you to specify that you want to ignore reporting numbers -as spelling errors. Defaults to `false`, switch it to `true` -if you wish to ignore numbers. - -`ignore_acronyms` - Allows you to specify that you want to ignore acronyms as spelling -errors. Defaults to `false`, switch it to `true` if you wish -to ignore acronyms. - -`language` - Allows you to specify dictionary language to use for spell-checking. -Defaults to `en-gb`, switch to `en-us`, `en-au` or `es-es`, to -override. - -#### Methods - -`lint_files` - Lints the globbed markdown files. Will fail if `proselint` cannot be installed correctly. -Generates a `markdown` list of warnings for the prose in a corpus of .markdown and .md files. - -`proselint_installed?` - Determine if proselint is currently installed in the system paths. - -`mdspell_installed?` - Determine if mdspell is currently installed in the system paths. - -`check_spelling` - Runs a markdown-specific spell checker, against a corpus of `.markdown` and `.md` files. diff --git a/bundle/ruby/3.2.0/gems/danger-prose-2.0.7/Rakefile b/bundle/ruby/3.2.0/gems/danger-prose-2.0.7/Rakefile deleted file mode 100644 index da5c9db9..00000000 --- a/bundle/ruby/3.2.0/gems/danger-prose-2.0.7/Rakefile +++ /dev/null @@ -1,5 +0,0 @@ -require 'bundler/gem_tasks' -require 'rspec/core/rake_task' - -RSpec::Core::RakeTask.new(:spec) -task default: :spec diff --git a/bundle/ruby/3.2.0/gems/danger-prose-2.0.7/danger-prose.gemspec b/bundle/ruby/3.2.0/gems/danger-prose-2.0.7/danger-prose.gemspec deleted file mode 100644 index b5f4d269..00000000 --- a/bundle/ruby/3.2.0/gems/danger-prose-2.0.7/danger-prose.gemspec +++ /dev/null @@ -1,44 +0,0 @@ -# coding: utf-8 -lib = File.expand_path('../lib', __FILE__) -$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) -require 'version' - -Gem::Specification.new do |spec| - spec.name = 'danger-prose' - spec.version = DangerProse::VERSION - spec.authors = ['David Grandinetti', 'Orta Therox'] - spec.email = ['dbgrandi@gmail.com', 'orta.therox@gmail.com'] - spec.description = 'A danger plugin for working with bodies of markdown prose.' - spec.summary = 'A danger plugin for working with bodies of markdown prose.' - spec.homepage = 'https://github.com/dbgrandi/danger-prose' - spec.license = 'MIT' - - spec.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR) - spec.test_files = spec.files.grep(%r{^(test|spec|features)/}) - spec.require_paths = ['lib'] - - spec.add_dependency 'danger' - - # Let's you test your plugin via the linter - spec.add_development_dependency "yard", '~> 0.8' - - # General ruby development - spec.add_development_dependency 'bundler', '~> 1.3' - spec.add_development_dependency 'rake', '~> 10.0' - - # Testing support - spec.add_development_dependency 'rspec', '~> 3.4' - - # Makes testing easy via `bundle exec guard` - spec.add_development_dependency 'guard', '~> 2.14' - spec.add_development_dependency 'guard-rspec', '~> 4.7' - - # If you want to work on older builds of ruby - spec.add_development_dependency 'listen', '3.0.7' - - # This gives you the chance to run a REPL inside your test - # via - # binding.pry - # This will stop test execution and let you inspect the results - spec.add_development_dependency 'pry' -end diff --git a/bundle/ruby/3.2.0/gems/danger-prose-2.0.7/lib/danger_plugin.rb b/bundle/ruby/3.2.0/gems/danger-prose-2.0.7/lib/danger_plugin.rb deleted file mode 100644 index 89952df3..00000000 --- a/bundle/ruby/3.2.0/gems/danger-prose-2.0.7/lib/danger_plugin.rb +++ /dev/null @@ -1,228 +0,0 @@ -require 'json' - -module Danger - # Lint markdown files inside your projects. - # This is done using the [proselint](http://proselint.com) python egg. - # Results are passed out as a table in markdown. - # - # @example Running linter with custom disabled linters - # - # # Runs a linter with comma style and tense present disabled - # prose.disable_linters = ["misc.scare_quotes", "misc.tense_present"] - # prose.lint_files "_posts/*.md" - # - # @example Running linter with default linters - # - # # Runs a linter with all styles, on modified and added markdown files in this PR - # prose.lint_files - # - # @example Running the spell checker - # - # # Runs a spell checker on all files in `_post` - # prose.check_spelling "_posts/*.md" - # - # @example Running the spell checker, with some words whitelisted - # - # prose.ignored_words = ["orta", "artsy"] - # prose.check_spelling - # - # @see artsy/artsy.github.io - # @tags blogging, blog, writing, jekyll, middleman, hugo, metalsmith, gatsby, express - # - class DangerProse < Plugin - # Allows you to disable a collection of linters from running. Doesn't work yet. - # You can get a list of [them here](https://github.com/amperser/proselint#checks) - # defaults to `["misc.scare_quotes", "typography.symbols"]` when it's nil. - # - # @return [Array] - attr_accessor :disable_linters - - # Lints the globbed markdown files. Will fail if `proselint` cannot be installed correctly. - # Generates a `markdown` list of warnings for the prose in a corpus of .markdown and .md files. - # - # @param [String] files - # A globbed string which should return the files that you want to lint, defaults to nil. - # if nil, modified and added files from the diff will be used. - # @return [void] - # - def lint_files(files = nil) - # Installs a prose checker if needed - system 'pip install --user proselint' unless proselint_installed? - - # Check that this is in the user's PATH after installing - raise "proselint is not in the user's PATH, or it failed to install" unless proselint_installed? - - # Either use files provided, or use the modified + added - markdown_files = get_files files - - proses = {} - to_disable = disable_linters || ["misc.scare_quotes", "typography.symbols"] - with_proselint_disabled(to_disable) do - # Convert paths to proselint results - result_jsons = Hash[markdown_files.to_a.uniq.collect { |v| [v, get_proselint_json(v)] }] - proses = result_jsons.select { |_, prose| prose['data']['errors'].count > 0 } - end - - # Get some metadata about the local setup - current_slug = env.ci_source.repo_slug - - # We got some error reports back from proselint - if proses.count > 0 - message = "### Proselint found issues\n\n" - proses.each do |path, prose| - github_loc = "/#{current_slug}/tree/#{github.branch_for_head}/#{path}" - message << "#### [#{path}](#{github_loc})\n\n" - - message << "Line | Message | Severity |\n" - message << "| --- | ----- | ----- |\n" - - prose['data']['errors'].each do |error| - message << "#{error['line']} | #{error['message']} | #{error['severity']}\n" - end - end - - markdown message - end - end - - # Determine if proselint is currently installed in the system paths. - # @return [Bool] - # - def proselint_installed? - `which proselint`.strip.empty? == false - end - - # Determine if mdspell is currently installed in the system paths. - # @return [Bool] - # - def mdspell_installed? - `which mdspell`.strip.empty? == false - end - - # Allows you to add a collection of words to skip in spellchecking. - # defaults to `[""]` when it's nil. - # @return [Array] - attr_accessor :ignored_words - - # Allows you to specify that you want to ignore reporting numbers - # as spelling errors. Defaults to `false`, switch it to `true` - # if you wish to ignore numbers. - # @return false - attr_accessor :ignore_numbers - - # Allows you to specify that you want to ignore acronyms as spelling - # errors. Defaults to `false`, switch it to `true` if you wish - # to ignore acronyms. - # @return false - attr_accessor :ignore_acronyms - - # Allows you to specify dictionary language to use for spell-checking. - # Defaults to `en-gb`, switch to `en-us`, `en-au` or `es-es`, to - # override. - attr_accessor :language - - def language - @language || 'en-gb' - end - - # Runs a markdown-specific spell checker, against a corpus of `.markdown` and `.md` files. - # - # @param [String] files - # A globbed string which should return the files that you want to spell check, defaults to nil. - # if nil, modified and added files from the diff will be used. - # @return [void] - # - def check_spelling(files = nil) - # Installs my fork of the spell checker if needed - # my fork has line numbers + indexes - system "npm install -g orta/node-markdown-spellcheck" unless mdspell_installed? - - # Check that this is in the user's PATH after installing - raise "mdspell is not in the user's PATH, or it failed to install" unless mdspell_installed? - - markdown_files = get_files files - - arguments = ["-r"] - skip_words = ignored_words || [] - - arguments.push("-n") if ignore_numbers - arguments.push("-a") if ignore_acronyms - arguments.push("--#{language}") - - File.write(".spelling", skip_words.join("\n")) - result_texts = Hash[markdown_files.to_a.uniq.collect { |md| [md, `mdspell #{md} #{arguments.join(" ")}`.strip] }] - spell_issues = result_texts.select { |path, output| output.include? "spelling errors found" } - File.unlink(".spelling") - - # Get some metadata about the local setup - current_slug = env.ci_source.repo_slug - - if spell_issues.count > 0 - message = "### Spell Checker found issues\n\n" - spell_issues.each do |path, output| - github_loc = "/#{current_slug}/tree/#{github.branch_for_head}/#{path}" - message << "#### [#{path}](#{github_loc})\n\n" - - message << "Line | Typo |\n" - message << "| --- | ------ |\n" - - output.lines[1..-3].each do |line| - index_info = line.strip.split("|").first - index_line, index = index_info.split(":").map { |n| n.to_i } - - file = File.read(path) - - unknown_word = file[index..-1].split(" ").first - - error_text = line.strip.split("|")[1..-1].join("|").strip - error = error_text.gsub(unknown_word, "**" + unknown_word + "**") - - message << "#{index_line} | #{error} | \n" - end - markdown message - end - end - end - - private - # Creates a temporary proselint settings file - # @return void - # - def with_proselint_disabled(disable_linters) - # Create the disabled linters JSON in ~/.proselintrc - proselint_template = File.join(File.dirname(__FILE__), 'proselintrc') - proselintJSON = JSON.parse(File.read(proselint_template)) - - # Disable individual linters - disable_linters.each do |linter| - proselintJSON['checks'][linter] = false - end - - # Re-save the new JSON into the home dir - temp_proselint_rc_path = File.join(Dir.home, '.proselintrc') - File.write(temp_proselint_rc_path, JSON.pretty_generate(proselintJSON)) - - # Run the closure - yield - - # Delete .proselintrc - File.unlink temp_proselint_rc_path - end - - def get_files files - # Either use files provided, or use the modified + added - markdown_files = files ? Dir.glob(files) : (git.modified_files + git.added_files) - markdown_files.select { |line| line.end_with? '.markdown', '.md' } - end - - # Always returns a hash, regardless of whether the command gives JSON, weird data, or no response - def get_proselint_json path - json = `proselint "#{path}" --json`.strip - if json[0] == "{" and json[-1] == "}" - JSON.parse json - else - {} - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-prose-2.0.7/lib/proselintrc b/bundle/ruby/3.2.0/gems/danger-prose-2.0.7/lib/proselintrc deleted file mode 100644 index 98622986..00000000 --- a/bundle/ruby/3.2.0/gems/danger-prose-2.0.7/lib/proselintrc +++ /dev/null @@ -1,82 +0,0 @@ -{ - "max_errors": 1000, - "checks": { - "airlinese.misc" : true, - "annotations.misc" : true, - "archaism.misc" : true, - "cliches.hell" : true, - "cliches.misc" : true, - "consistency.spacing" : true, - "consistency.spelling" : true, - "corporate_speak.misc" : true, - "cursing.filth" : true, - "cursing.nfl" : false, - "cursing.nword" : true, - "dates_times.am_pm" : true, - "dates_times.dates" : true, - "hedging.misc" : true, - "hyperbole.misc" : true, - "jargon.misc" : true, - "lexical_illusions.misc" : true, - "links.broken" : false, - "malapropisms.misc" : true, - "misc.apologizing" : true, - "misc.back_formations" : true, - "misc.bureaucratese" : true, - "misc.but" : true, - "misc.capitalization" : true, - "misc.chatspeak" : true, - "misc.commercialese" : true, - "misc.composition" : true, - "misc.currency" : true, - "misc.debased" : true, - "misc.false_plurals" : true, - "misc.illogic" : true, - "misc.inferior_superior" : true, - "misc.latin" : true, - "misc.many_a" : true, - "misc.metaconcepts" : true, - "misc.metadiscourse" : true, - "misc.narcissism" : true, - "misc.not_guilty" : true, - "misc.phrasal_adjectives" : true, - "misc.preferred_forms" : true, - "misc.pretension" : true, - "misc.professions" : true, - "misc.punctuation" : true, - "misc.scare_quotes" : true, - "misc.suddenly" : true, - "misc.tense_present" : true, - "misc.waxed" : true, - "misc.whence" : true, - "mixed_metaphors.misc" : true, - "mondegreens.misc" : true, - "needless_variants.misc" : true, - "nonwords.misc" : true, - "oxymorons.misc" : true, - "psychology.misc" : true, - "redundancy.misc" : true, - "redundancy.ras_syndrome" : true, - "skunked_terms.misc" : true, - "spelling.able_atable" : true, - "spelling.able_ible" : true, - "spelling.athletes" : true, - "spelling.em_im_en_in" : true, - "spelling.er_or" : true, - "spelling.in_un" : true, - "spelling.misc" : true, - "security.credit_card" : true, - "security.password" : true, - "sexism.misc" : true, - "terms.animal_adjectives" : true, - "terms.denizen_labels" : true, - "terms.eponymous_adjectives" : true, - "terms.venery" : true, - "typography.diacritical_marks" : true, - "typography.exclamation" : true, - "typography.symbols" : true, - "uncomparables.misc" : true, - "weasel_words.misc" : true, - "weasel_words.very" : true - } -} diff --git a/bundle/ruby/3.2.0/gems/danger-prose-2.0.7/lib/version.rb b/bundle/ruby/3.2.0/gems/danger-prose-2.0.7/lib/version.rb deleted file mode 100644 index 313c6f36..00000000 --- a/bundle/ruby/3.2.0/gems/danger-prose-2.0.7/lib/version.rb +++ /dev/null @@ -1,3 +0,0 @@ -module DangerProse - VERSION = '2.0.7'.freeze -end diff --git a/bundle/ruby/3.2.0/gems/danger-prose-2.0.7/spec/danger_plugin_spec.rb b/bundle/ruby/3.2.0/gems/danger-prose-2.0.7/spec/danger_plugin_spec.rb deleted file mode 100644 index 75e306a8..00000000 --- a/bundle/ruby/3.2.0/gems/danger-prose-2.0.7/spec/danger_plugin_spec.rb +++ /dev/null @@ -1,103 +0,0 @@ -require File.expand_path('../spec_helper', __FILE__) - -module Danger - describe DangerProse do - it 'is a plugin' do - expect(Danger::DangerProse < Danger::Plugin).to be_truthy - end - - describe 'with Dangerfile' do - before do - @dangerfile = testing_dangerfile - @prose = testing_dangerfile.prose - end - - describe 'linter' do - it 'handles proselint not being installed' do - allow(@prose).to receive(:`).with('which proselint').and_return('') - expect(@prose.proselint_installed?).to be_falsy - end - - it 'handles proselint being installed' do - allow(@prose).to receive(:`).with('which proselint').and_return('/bin/thing/proselint') - expect(@prose.proselint_installed?).to be_truthy - end - - describe :lint_files do - before do - # So it doesn't try to install on your computer - allow(@prose).to receive(:`).with('which proselint').and_return('/bin/thing/proselint') - - # Proselint returns JSON data, which is nice 👍 - errors = '[{"start": 1441, "replacements": null, "end": 1445, "severity": "warning", "extent": 4, "column": 1, "message": "!!! is hyperbolic.", "line": 46, "check": "hyperbolic.misc"}]' - proselint_response = '{"status" : "success", "data" : { "errors" : ' + errors + '}}' - - # This is where we generate our JSON - allow(@prose).to receive(:`).with('proselint "spec/fixtures/blog_post.md" --json').and_return(proselint_response) - - # it's worth noting - you can call anything on your plugin that a Dangerfile responds to - # The request source's PR JSON typically looks like - # https://raw.githubusercontent.com/danger/danger/bffc246a11dac883d76fc6636319bd6c2acd58a3/spec/fixtures/pr_response.json - - @prose.env.request_source.pr_json = { "head" => { "ref" => 'my_fake_branch' } } - end - - it 'handles a known JSON report from proselint' do - @prose.lint_files('spec/fixtures/*.md') - output = @prose.status_report[:markdowns].first - - # A title - expect(output.message).to include('Proselint found issues') - # A warning - expect(output.message).to include('!!! is hyperbolic. | warning') - # A link to the file inside the fixtures dir - expect(output.message).to include('[spec/fixtures/blog_post.md](/artsy/eigen/tree/my_fake_branch/spec/fixtures/blog_post.md)') - end - end - end - - describe 'spell checking' do - it 'handles proselint not being installed' do - allow(@prose).to receive(:`).with('which mdspell').and_return('') - expect(@prose.mdspell_installed?).to be_falsy - end - - it 'handles proselint being installed' do - allow(@prose).to receive(:`).with('which mdspell').and_return('/bin/thing/mdspell') - expect(@prose.mdspell_installed?).to be_truthy - end - - describe 'full command' do - before do - # So it doesn't try to install on your computer - allow(@prose).to receive(:`).with('which mdspell').and_return('/bin/thing/mdspell') - - # mdspell returns JSON data, which is nice 👍 - proselint_response = " spec/fixtures/blog_post.md\n 1:27 | This post intentional left blank-ish.\n 4:84 | Here's a tpyo - it should registor.\n 4:101 | Here's a tpyo - it should registor.\n\n >> 3 spelling errors found in 1 file" - - # This is where we generate our JSON - allow(@prose).to receive(:`).with('mdspell spec/fixtures/blog_post.md -r --en-gb').and_return(proselint_response) - - # it's worth noting - you can call anything on your plugin that a Dangerfile responds to - # The request source's PR JSON typically looks like - # https://raw.githubusercontent.com/danger/danger/bffc246a11dac883d76fc6636319bd6c2acd58a3/spec/fixtures/pr_response.json - - @prose.env.request_source.pr_json = { "head" => { "ref" => 'my_fake_branch' } } - end - - it 'handles a known JSON report from mdspell' do - @prose.check_spelling('spec/fixtures/*.md') - output = @prose.status_report[:markdowns].first - - # A title - expect(output.message).to include('Spell Checker found issues') - # A typo, in bold - expect(output.message).to include('**tpyo**') - # A link to the file inside the fixtures dir - expect(output.message).to include('[spec/fixtures/blog_post.md](/artsy/eigen/tree/my_fake_branch/spec/fixtures/blog_post.md)') - end - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-prose-2.0.7/spec/fixtures/blog_post.md b/bundle/ruby/3.2.0/gems/danger-prose-2.0.7/spec/fixtures/blog_post.md deleted file mode 100644 index d0338fd7..00000000 --- a/bundle/ruby/3.2.0/gems/danger-prose-2.0.7/spec/fixtures/blog_post.md +++ /dev/null @@ -1,4 +0,0 @@ -This post intentional left blank-ish. -And this is to trigger a warning!!! - -Here's a tpyo - it should registor. \ No newline at end of file diff --git a/bundle/ruby/3.2.0/gems/danger-prose-2.0.7/spec/spec_helper.rb b/bundle/ruby/3.2.0/gems/danger-prose-2.0.7/spec/spec_helper.rb deleted file mode 100644 index 28f122da..00000000 --- a/bundle/ruby/3.2.0/gems/danger-prose-2.0.7/spec/spec_helper.rb +++ /dev/null @@ -1,41 +0,0 @@ -ROOT = Pathname.new(File.expand_path('../../', __FILE__)) -$LOAD_PATH.unshift((ROOT + 'lib').to_s) -$LOAD_PATH.unshift((ROOT + 'spec').to_s) - -RSpec.configure do |config| - # Use color in STDOUT - config.color = true -end - -require 'bundler/setup' -require 'pry' - -require 'danger' -require 'cork' -require 'danger_plugin' - -# These functions are a subset of https://github.com/danger/danger/blob/master/spec/spec_helper.rb -# If you are expanding these files, see if it's already been done ^. - -# A silent version of the user interface -def testing_ui - Cork::Board.new(silent: true) -end - -# Example environment (ENV) that would come from -# running a PR on TravisCI -def testing_env - { - 'HAS_JOSH_K_SEAL_OF_APPROVAL' => 'true', - 'TRAVIS_PULL_REQUEST' => '800', - 'TRAVIS_REPO_SLUG' => 'artsy/eigen', - 'TRAVIS_COMMIT_RANGE' => '759adcbd0d8f...13c4dc8bb61d', - 'DANGER_GITHUB_API_TOKEN' => '123sbdq54erfsd3422gdfio' - } -end - -# A stubbed out Dangerfile for use in tests -def testing_dangerfile - env = Danger::EnvironmentManager.new(testing_env) - Danger::Dangerfile.new(env, testing_ui) -end diff --git a/bundle/ruby/3.2.0/gems/danger-rubocop-0.12.0/.circleci/config.yml b/bundle/ruby/3.2.0/gems/danger-rubocop-0.12.0/.circleci/config.yml deleted file mode 100644 index 424b67e0..00000000 --- a/bundle/ruby/3.2.0/gems/danger-rubocop-0.12.0/.circleci/config.yml +++ /dev/null @@ -1,30 +0,0 @@ -version: 2 -jobs: - build: - docker: - - image: circleci/ruby:2.6 - - working_directory: ~/repo - - steps: - - checkout - - - restore_cache: - keys: - - v1-dependencies-{{ checksum "Gemfile.lock" }} - # fallback to using the latest cache if no exact match is found - - v1-dependencies- - - - run: - name: install dependencies - command: | - bundle install --jobs=4 --retry=3 --path vendor/bundle - - - save_cache: - paths: - - ./vendor/bundle - key: v1-dependencies-{{ checksum "Gemfile.lock" }} - - - run: - name: run tests - command: bundle exec rake spec diff --git a/bundle/ruby/3.2.0/gems/danger-rubocop-0.12.0/.gitignore b/bundle/ruby/3.2.0/gems/danger-rubocop-0.12.0/.gitignore deleted file mode 100644 index 5e1422c9..00000000 --- a/bundle/ruby/3.2.0/gems/danger-rubocop-0.12.0/.gitignore +++ /dev/null @@ -1,50 +0,0 @@ -*.gem -*.rbc -/.config -/coverage/ -/InstalledFiles -/pkg/ -/spec/reports/ -/spec/examples.txt -/test/tmp/ -/test/version_tmp/ -/tmp/ - -# Used by dotenv library to load environment variables. -# .env - -## Specific to RubyMotion: -.dat* -.repl_history -build/ -*.bridgesupport -build-iPhoneOS/ -build-iPhoneSimulator/ - -## Specific to RubyMotion (use of CocoaPods): -# -# We recommend against adding the Pods directory to your .gitignore. However -# you should judge for yourself, the pros and cons are mentioned at: -# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control -# -# vendor/Pods/ - -## Documentation cache and generated files: -/.yardoc/ -/_yardoc/ -/doc/ -/rdoc/ - -## Environment normalization: -/.bundle/ -/vendor/bundle -/lib/bundler/man/ - -# for a library or gem, you might want to ignore these files since the code is -# intended to run in multiple environments; otherwise, check them in: -# Gemfile.lock -# .ruby-version -# .ruby-gemset - -# unless supporting rvm < 1.11.0 or doing something fancy, ignore this: -.rvmrc diff --git a/bundle/ruby/3.2.0/gems/danger-rubocop-0.12.0/Gemfile b/bundle/ruby/3.2.0/gems/danger-rubocop-0.12.0/Gemfile deleted file mode 100755 index 940d53a3..00000000 --- a/bundle/ruby/3.2.0/gems/danger-rubocop-0.12.0/Gemfile +++ /dev/null @@ -1,12 +0,0 @@ -source 'https://rubygems.org' - -ruby '>= 2.6.0' - -gemspec - -group :development do - gem 'mocha' - gem 'bacon' - gem 'mocha-on-bacon' - gem 'prettybacon' -end diff --git a/bundle/ruby/3.2.0/gems/danger-rubocop-0.12.0/Gemfile.lock b/bundle/ruby/3.2.0/gems/danger-rubocop-0.12.0/Gemfile.lock deleted file mode 100644 index 4b62184a..00000000 --- a/bundle/ruby/3.2.0/gems/danger-rubocop-0.12.0/Gemfile.lock +++ /dev/null @@ -1,170 +0,0 @@ -PATH - remote: . - specs: - danger-rubocop (0.9.5) - danger - rubocop (~> 1.0) - -GEM - remote: https://rubygems.org/ - specs: - addressable (2.8.1) - public_suffix (>= 2.0.2, < 6.0) - ast (2.4.2) - bacon (1.2.0) - claide (1.0.3) - claide-plugins (0.9.2) - cork - nap - open4 (~> 1.3) - coderay (1.1.3) - colored2 (3.1.2) - cork (0.3.0) - colored2 (~> 3.1) - danger (8.2.3) - claide (~> 1.0) - claide-plugins (>= 0.9.2) - colored2 (~> 3.1) - cork (~> 0.1) - faraday (>= 0.9.0, < 2.0) - faraday-http-cache (~> 2.0) - git (~> 1.7) - kramdown (~> 2.3) - kramdown-parser-gfm (~> 1.0) - no_proxy_fix - octokit (~> 4.7) - terminal-table (>= 1, < 4) - diff-lcs (1.4.4) - faraday (1.4.2) - faraday-em_http (~> 1.0) - faraday-em_synchrony (~> 1.0) - faraday-excon (~> 1.1) - faraday-net_http (~> 1.0) - faraday-net_http_persistent (~> 1.1) - multipart-post (>= 1.2, < 3) - ruby2_keywords (>= 0.0.4) - faraday-em_http (1.0.0) - faraday-em_synchrony (1.0.0) - faraday-excon (1.1.0) - faraday-http-cache (2.2.0) - faraday (>= 0.8) - faraday-net_http (1.0.1) - faraday-net_http_persistent (1.1.0) - ffi (1.15.0) - formatador (0.2.5) - git (1.13.1) - addressable (~> 2.8) - rchardet (~> 1.8) - guard (2.16.2) - formatador (>= 0.2.4) - listen (>= 2.7, < 4.0) - lumberjack (>= 1.0.12, < 2.0) - nenv (~> 0.1) - notiffany (~> 0.0) - pry (>= 0.9.12) - shellany (~> 0.0) - thor (>= 0.18.1) - guard-compat (1.2.1) - guard-rspec (4.7.3) - guard (~> 2.1) - guard-compat (~> 1.1) - rspec (>= 2.99.0, < 4.0) - kramdown (2.3.1) - rexml - kramdown-parser-gfm (1.1.0) - kramdown (~> 2.0) - listen (3.0.7) - rb-fsevent (>= 0.9.3) - rb-inotify (>= 0.9.7) - lumberjack (1.2.8) - method_source (1.0.0) - mocha (1.12.0) - mocha-on-bacon (0.2.3) - mocha (>= 0.13.0) - multipart-post (2.1.1) - nap (1.1.0) - nenv (0.3.0) - no_proxy_fix (0.1.2) - notiffany (0.1.3) - nenv (~> 0.1) - shellany (~> 0.0) - octokit (4.21.0) - faraday (>= 0.9) - sawyer (~> 0.8.0, >= 0.5.3) - open4 (1.3.4) - parallel (1.20.1) - parser (3.0.1.1) - ast (~> 2.4.1) - prettybacon (0.0.2) - bacon (~> 1.2) - pry (0.14.1) - coderay (~> 1.1) - method_source (~> 1.0) - public_suffix (5.0.0) - rainbow (3.0.0) - rake (13.0.3) - rb-fsevent (0.10.4) - rb-inotify (0.10.1) - ffi (~> 1.0) - rchardet (1.8.0) - regexp_parser (2.1.1) - rexml (3.2.5) - rspec (3.10.0) - rspec-core (~> 3.10.0) - rspec-expectations (~> 3.10.0) - rspec-mocks (~> 3.10.0) - rspec-core (3.10.1) - rspec-support (~> 3.10.0) - rspec-expectations (3.10.1) - diff-lcs (>= 1.2.0, < 2.0) - rspec-support (~> 3.10.0) - rspec-mocks (3.10.2) - diff-lcs (>= 1.2.0, < 2.0) - rspec-support (~> 3.10.0) - rspec-support (3.10.2) - rubocop (1.16.0) - parallel (~> 1.10) - parser (>= 3.0.0.0) - rainbow (>= 2.2.2, < 4.0) - regexp_parser (>= 1.8, < 3.0) - rexml - rubocop-ast (>= 1.7.0, < 2.0) - ruby-progressbar (~> 1.7) - unicode-display_width (>= 1.4.0, < 3.0) - rubocop-ast (1.7.0) - parser (>= 3.0.1.1) - ruby-progressbar (1.11.0) - ruby2_keywords (0.0.4) - sawyer (0.8.2) - addressable (>= 2.3.5) - faraday (> 0.8, < 2.0) - shellany (0.0.1) - terminal-table (3.0.1) - unicode-display_width (>= 1.1.1, < 3) - thor (1.1.0) - unicode-display_width (2.0.0) - yard (0.9.26) - -PLATFORMS - ruby - -DEPENDENCIES - bacon - bundler (~> 1.3) - danger-rubocop! - guard (~> 2.14) - guard-rspec (~> 4.7) - listen (= 3.0.7) - mocha - mocha-on-bacon - prettybacon - pry - rake (~> 13.0) - rspec (~> 3.4) - yard - -RUBY VERSION - ruby 2.6.0p0 - -BUNDLED WITH - 1.17.3 diff --git a/bundle/ruby/3.2.0/gems/danger-rubocop-0.12.0/Guardfile b/bundle/ruby/3.2.0/gems/danger-rubocop-0.12.0/Guardfile deleted file mode 100755 index 9daab23d..00000000 --- a/bundle/ruby/3.2.0/gems/danger-rubocop-0.12.0/Guardfile +++ /dev/null @@ -1,21 +0,0 @@ -# A guardfile for making Danger Plugins -# For more info see https://github.com/guard/guard#readme - -# To run, use `bundle exec guard`. - -guard :rspec, cmd: 'bundle exec rspec' do - require 'guard/rspec/dsl' - dsl = Guard::RSpec::Dsl.new(self) - - # Feel free to open issues for suggestions and improvements - - # RSpec files - rspec = dsl.rspec - watch(rspec.spec_helper) { rspec.spec_dir } - watch(rspec.spec_support) { rspec.spec_dir } - watch(rspec.spec_files) - - # Ruby files - ruby = dsl.ruby - dsl.watch_spec_files_for(ruby.lib_files) -end diff --git a/bundle/ruby/3.2.0/gems/danger-rubocop-0.12.0/LICENSE b/bundle/ruby/3.2.0/gems/danger-rubocop-0.12.0/LICENSE deleted file mode 100644 index dc829438..00000000 --- a/bundle/ruby/3.2.0/gems/danger-rubocop-0.12.0/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 Ash Furrow - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/bundle/ruby/3.2.0/gems/danger-rubocop-0.12.0/README.md b/bundle/ruby/3.2.0/gems/danger-rubocop-0.12.0/README.md deleted file mode 100755 index 7b4f6cda..00000000 --- a/bundle/ruby/3.2.0/gems/danger-rubocop-0.12.0/README.md +++ /dev/null @@ -1,75 +0,0 @@ -[![CircleCI](https://circleci.com/gh/ashfurrow/danger-rubocop.svg?style=svg)](https://circleci.com/gh/ashfurrow/danger-rubocop) - -# Danger Rubocop - -A [Danger](https://github.com/danger/danger) plugin for [Rubocop](https://github.com/bbatsov/rubocop) (and compatible wrappers such as [Standard](https://github.com/testdouble/standard/)). - -## Installation - -Add this line to your Gemfile: - -```rb -gem 'danger-rubocop' -``` - -## Usage - -Run Ruby files through Rubocop. -Results are passed out as a table in markdown. - - -> Specifying custom config file. -```ruby -rubocop.lint -``` - -> Lint specific files in a folder, when they change - -```ruby -public_files = (git.modified_files + git.added_files).select { |path| path.include?("/public/") } -rubocop.lint public_files -``` - -> Submit comments only for changed lines - -```ruby -github.dismiss_out_of_range_messages -rubocop.lint inline_comment: true -``` - -> Format using `standardrb` instead of Rubocop - -```ruby -rubocop.lint rubocop_cmd: 'standardrb' -``` - -#### Methods - -`lint(config: Hash)` - -Runs Ruby files through Rubocop. Generates a `markdown` list of warnings. - -This method accepts a configuration hash. -The following keys are supported: - -* `files`: array of file names or glob patterns to determine files to lint. If omitted, this will lint only the files changed in the pull request. To lint all files every time, pass an empty string; this is the equivalent of typing `rubocop` without specifying any files, and will follow the rules in your `.rubocop.yml`. -* `force_exclusion`: pass `true` to pass `--force-exclusion` argument to Rubocop. - (this option will instruct rubocop to ignore the files that your rubocop config ignores, - despite the plugin providing the list of files explicitly) -* `inline_comment`: pass `true` to comment inline of the diffs. -* `fail_on_inline_comment`: pass `true` to use `fail` instead of `warn` on inline comment. -* `report_severity`: pass `true` to use `fail` or `warn` based on Rubocop severity. -* `report_danger`: pass true to report errors to Danger, and break CI. -* `include_cop_names`: pass true to include cop names when reporting errors with `report_danger`. -* `config`: path to the `.rubocop.yml` file. -* `only_report_new_offenses`: pass `true` to only report offenses that are in current user's scope. - Note that this won't mark offenses for _Metrics/XXXLength_ if you add lines to an already existing scope. -* `include_cop_names`: Prepends cop names to the output messages. Example: "Layout/EmptyLinesAroundBlockBody: Extra empty line detected at block body end." -* `rubocop_cmd`: Allows you to change the rubocop executable that's invoked. This is used to support rubocop wrappers like [Standard](https://github.com/testdouble/standard/) by passing `standardrb` as the value. - - -Passing `files` as only argument is also supported for backward compatibility. - -## License - -MIT diff --git a/bundle/ruby/3.2.0/gems/danger-rubocop-0.12.0/Rakefile b/bundle/ruby/3.2.0/gems/danger-rubocop-0.12.0/Rakefile deleted file mode 100755 index 4c774a2b..00000000 --- a/bundle/ruby/3.2.0/gems/danger-rubocop-0.12.0/Rakefile +++ /dev/null @@ -1,6 +0,0 @@ -require 'bundler/gem_tasks' -require 'rspec/core/rake_task' - -RSpec::Core::RakeTask.new(:spec) - -task default: :spec diff --git a/bundle/ruby/3.2.0/gems/danger-rubocop-0.12.0/danger-rubocop.gemspec b/bundle/ruby/3.2.0/gems/danger-rubocop-0.12.0/danger-rubocop.gemspec deleted file mode 100644 index 53d53aef..00000000 --- a/bundle/ruby/3.2.0/gems/danger-rubocop-0.12.0/danger-rubocop.gemspec +++ /dev/null @@ -1,45 +0,0 @@ -# coding: utf-8 -lib = File.expand_path('../lib', __FILE__) -$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) -require 'version' - -Gem::Specification.new do |spec| - spec.name = 'danger-rubocop' - spec.version = DangerRubocop::VERSION - spec.author = 'Ash Furrow' - spec.email = 'ash@ashfurrow.com' - spec.description = 'A Danger plugin for running Ruby files through Rubocop.' - spec.summary = 'A Danger plugin for running Ruby files through Rubocop.' - spec.homepage = 'https://github.com/ashfurrow/danger-rubocop' - spec.license = 'MIT' - - spec.files = `git ls-files`.split($/) - spec.test_files = spec.files.grep(%r{^(test|spec|features)/}) - spec.require_paths = ['lib'] - - spec.add_dependency 'danger' - spec.add_dependency 'rubocop', '~> 1.0' - - # General ruby development - spec.add_development_dependency 'bundler', '~> 1.3' - spec.add_development_dependency 'rake', '~> 13.0' - - # For validating the plugin lints - spec.add_development_dependency 'yard' - - # Testing support - spec.add_development_dependency 'rspec', '~> 3.4' - - # Makes testing easy via `bundle exec guard` - spec.add_development_dependency 'guard', '~> 2.14' - spec.add_development_dependency 'guard-rspec', '~> 4.7' - - # If you want to work on older builds of ruby - spec.add_development_dependency 'listen', '3.0.7' - - # This gives you the chance to run a REPL inside your test - # via - # binding.pry - # This will stop test execution and let you inspect the results - spec.add_development_dependency 'pry' -end diff --git a/bundle/ruby/3.2.0/gems/danger-rubocop-0.12.0/lib/danger_plugin.rb b/bundle/ruby/3.2.0/gems/danger-rubocop-0.12.0/lib/danger_plugin.rb deleted file mode 100755 index c4bd10e6..00000000 --- a/bundle/ruby/3.2.0/gems/danger-rubocop-0.12.0/lib/danger_plugin.rb +++ /dev/null @@ -1,164 +0,0 @@ -require 'shellwords' - -module Danger - # Run Ruby files through Rubocop. - # Results are passed out as a table in markdown. - # - # @example Specifying custom config file. - # - # rubocop.lint - # - # @example Lint specific files in a folder, when they change - # - # public_files = (modified_files + added_files).select { |path| path.include?("/public/") } - # rubocop.lint public_files - # - # - # @see Moya/Aeryn - # @tags ruby, rubocop, linter - # - class DangerRubocop < Plugin - # Runs Ruby files through Rubocop. Generates a `markdown` list of warnings. - # - # @param [String] files - # A globbed string which should return the files that you want to - # run through, defaults to nil. If nil, modified and added files - # from the diff will be used. - # @return [void] - # - def lint(config = nil) - config = config.is_a?(Hash) ? config : { files: config } - files = config[:files] - force_exclusion = config[:force_exclusion] || false - config_path = config[:config] - report_danger = config[:report_danger] || false - only_report_new_offenses = config[:only_report_new_offenses] || false - inline_comment = config[:inline_comment] || false - fail_on_inline_comment = config[:fail_on_inline_comment] || false - report_severity = config[:report_severity] || false - include_cop_names = config[:include_cop_names] || false - rubocop_cmd = config[:rubocop_cmd] || 'rubocop' - - files_to_lint = fetch_files_to_lint(files) - files_to_report = rubocop(files_to_lint, force_exclusion, only_report_new_offenses, cmd: rubocop_cmd, config_path: config_path) - - return if files_to_report.empty? - return report_failures(files_to_report, include_cop_names: include_cop_names) if report_danger - - if inline_comment - add_violation_for_each_line(files_to_report, fail_on_inline_comment, report_severity, include_cop_names: include_cop_names) - else - markdown offenses_message(files_to_report, include_cop_names: include_cop_names) - end - end - - private - - def rubocop(files_to_lint, force_exclusion, only_report_new_offenses, cmd: 'rubocop', config_path: nil) - base_command = [cmd, '-f', 'json', '--only-recognized-file-types'] - base_command.concat(['--force-exclusion']) if force_exclusion - base_command.concat(['--config', config_path.shellescape]) unless config_path.nil? - - rubocop_output = `#{'bundle exec ' if File.exist?('Gemfile')}#{base_command.join(' ')} #{files_to_lint}` - - return [] if rubocop_output.empty? - - files = JSON.parse(rubocop_output)['files'] - - filter_out_offenses(files) if only_report_new_offenses - - files.select { |f| f['offenses'].any? } - end - - def filter_out_offenses(files) - files.each do |file| - added_lines = added_lines(file['path']).to_set - file['offenses'].select! do |offense| - added_lines.include?(offense['location']['line']) - end - end - end - - def added_lines(path) - diff_for_file = git.diff_for_file(path) - return [] if diff_for_file.nil? - - diff_for_file - .patch - .split("\n@@") - .tap(&:shift) - .flat_map do |chunk| - first_line, *diff = chunk.split("\n") - # Get start from diff. - lineno = first_line.match(/\+(\d+),?(\d?)/).captures.first.to_i - diff.each_with_object([]) do |current_line, added_lines| - added_lines << lineno if current_line.start_with?('+') - lineno += 1 unless current_line.start_with?('-') - added_lines - end - end - end - - def offenses_message(offending_files, include_cop_names: false) - require 'terminal-table' - - message = "### Rubocop violations\n\n" - table = Terminal::Table.new( - headings: %w(File Line Reason), - style: { border_i: '|' }, - rows: offending_files.flat_map do |file| - file['offenses'].map do |offense| - offense_message = offense_message(offense, include_cop_names: include_cop_names) - [file['path'], offense['location']['line'], offense_message] - end - end - ).to_s - message + table.split("\n")[1..-2].join("\n") - end - - def report_failures(offending_files, include_cop_names: false) - offending_files.each do |file| - file['offenses'].each do |offense| - offense_message = offense_message(offense, include_cop_names: include_cop_names) - fail "#{file['path']} | #{offense['location']['line']} | #{offense_message}" - end - end - end - - def add_violation_for_each_line(offending_files, fail_on_inline_comment, report_severity, include_cop_names: false) - offending_files.flat_map do |file| - file['offenses'].map do |offense| - offense_message = offense_message(offense, include_cop_names: include_cop_names) - kargs = { - file: file['path'], - line: offense['location']['line'] - } - if fail_on_inline_comment - fail(offense_message, **kargs) - elsif report_severity && %w[error fatal].include?(offense['severity']) - fail(offense_message, **kargs) - else - warn(offense_message, **kargs) - end - end - end - end - - def fetch_files_to_lint(files = nil) - to_lint = if files.nil? - # when files are renamed, git.modified_files contains the old name not the new one, so we need to do the convertion - renaming_map = (git.renamed_files || []).map { |e| [e[:before], e[:after]] }.to_h - (git.modified_files.map { |f| renaming_map[f] || f }) + git.added_files - else - Dir.glob(files) - end - Shellwords.join(to_lint) - end - - def offense_message(offense, include_cop_names: false) - return offense['message'] unless include_cop_names - - "#{offense['cop_name']}: #{offense['message']}" - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-rubocop-0.12.0/lib/version.rb b/bundle/ruby/3.2.0/gems/danger-rubocop-0.12.0/lib/version.rb deleted file mode 100755 index d6064d3a..00000000 --- a/bundle/ruby/3.2.0/gems/danger-rubocop-0.12.0/lib/version.rb +++ /dev/null @@ -1,3 +0,0 @@ -module DangerRubocop - VERSION = '0.12.0'.freeze -end diff --git a/bundle/ruby/3.2.0/gems/danger-rubocop-0.12.0/spec/danger_plugin_spec.rb b/bundle/ruby/3.2.0/gems/danger-rubocop-0.12.0/spec/danger_plugin_spec.rb deleted file mode 100755 index 968fa230..00000000 --- a/bundle/ruby/3.2.0/gems/danger-rubocop-0.12.0/spec/danger_plugin_spec.rb +++ /dev/null @@ -1,420 +0,0 @@ -require File.expand_path('spec_helper', __dir__) - -module Danger - describe DangerRubocop do - it 'is a plugin' do - expect(Danger::DangerRubocop < Danger::Plugin).to be_truthy - end - - describe 'with Dangerfile' do - before do - @dangerfile = testing_dangerfile - @rubocop = testing_dangerfile.rubocop - end - - describe "#filter_out_offenses" do - let(:files_within_pr) do - [ - { - 'path' => 'lib/version.rb', - 'offenses' => [ - { - 'message' => 'No.', - 'location' => { 'line' => 41 } - } - ] - } - ] - end - - let(:files_outside_pr) do - [ - { - 'path' => 'lib/version.rb', - 'offenses' => [ - { - 'message' => 'No.', - 'location' => { 'line' => 20 } - } - ] - } - ] - end - subject { @rubocop } - - before do - allow(@rubocop.git).to receive(:diff_for_file).with('lib/version.rb') do - instance_double('Git::Diff::DiffFile', patch: <<~DIFF) - diff --git a/lib/version.rb b/lib/version.rb - index 66d3a986..5e8074a8 100644 - --- a/lib/version.rb - +++ b/lib/version.rb - @@ -32,4 +40,3 @@ - line 1 - -removed - -line 2 old version - +line 2 with offense - line 3 - DIFF - end - end - - it 'filters out offenses not in the pr' do - p described_class - expect(subject.send(:filter_out_offenses, files_outside_pr)).to eq( - [ - { - 'path' => 'lib/version.rb', - 'offenses' => [] - } - ] - ) - end - - it 'keeps offenses in the pr' do - expect(subject.send(:filter_out_offenses, files_within_pr.dup)).to eq( - [ - { - 'path' => 'lib/version.rb', - 'offenses' => [ - { - 'message' => 'No.', - 'location' => { 'line' => 41 } - } - ] - } - ] - ) - end - end - - describe :added_lines do - before do - allow(@rubocop.git).to receive(:diff_for_file).with('SAMPLE') do - instance_double('Git::Diff::DiffFile', patch: <<~DIFF) - diff --git a/SAMPLE b/SAMPLE - new file mode 100644 - index 0000000..7bba8c8 - --- /dev/null - +++ b/SAMPLE - @@ -0,0 +1,2 @@ - +line 1 - +line 2 - DIFF - end - end - - it 'handles git diff' do - expect(@rubocop.send(:added_lines, 'SAMPLE')).to eq([1, 2]) - end - - context "single line added to a new file" do - before do - allow(@rubocop.git).to receive(:diff_for_file).with('SAMPLE') do - instance_double('Git::Diff::DiffFile', patch: <<~DIFF) - diff --git a/SAMPLE b/SAMPLE - new file mode 100644 - index 0000000..7bba8c8 - --- /dev/null - +++ b/SAMPLE - @@ -0,0 +1 @@ - +line 1 - DIFF - end - end - - it 'handles git diff' do - expect(@rubocop.send(:added_lines, 'SAMPLE')).to eq([1]) - end - end - - context 'no such file' do - before do - allow(@rubocop.git).to receive(:diff_for_file).with('SAMPLE').and_return(nil) - end - - it 'return empty array' do - expect(@rubocop.send(:added_lines, 'SAMPLE')).to eq([]) - end - end - end - - describe :lint_files do - let(:response_ruby_file) do - { - 'files' => [ - { - 'path' => 'spec/fixtures/ruby_file.rb', - 'offenses' => [ - { - 'cop_name' => 'Syntax/WhetherYouShouldDoThat', - 'message' => "Don't do that!", - 'severity' => 'warning', - 'location' => { 'line' => 13 } - } - ] - } - ] - }.to_json - end - - let(:response_another_ruby_file) do - { - 'files' => [ - { - 'path' => 'spec/fixtures/another_ruby_file.rb', - 'offenses' => [ - { - 'cop_name' => 'Syntax/WhetherYouShouldDoThat', - 'message' => "Don't do that!", - 'severity' => 'error', - 'location' => { 'line' => 23 } - } - ] - } - ] - }.to_json - end - - it 'handles a rubocop report for specified files' do - allow(@rubocop).to receive(:`) - .with('bundle exec rubocop -f json --only-recognized-file-types --config path/to/rubocop.yml spec/fixtures/ruby_file.rb') - .and_return(response_ruby_file) - - # Do it - @rubocop.lint(files: 'spec/fixtures/ruby*.rb', config: 'path/to/rubocop.yml') - - output = @rubocop.status_report[:markdowns].first.message - - # A title - expect(output).to include('Rubocop violations') - # A warning - expect(output).to include("spec/fixtures/ruby_file.rb | 13 | Don't do that!") - end - - it 'includes cop names when include_cop_names is set' do - allow(@rubocop).to receive(:`) - .with('bundle exec rubocop -f json --only-recognized-file-types --config path/to/rubocop.yml spec/fixtures/ruby_file.rb') - .and_return(response_ruby_file) - - # Do it - @rubocop.lint(files: 'spec/fixtures/ruby*.rb', config: 'path/to/rubocop.yml', include_cop_names: true) - - output = @rubocop.status_report[:markdowns].first.message - - # A title - expect(output).to include('Rubocop violations') - # A warning - expect(output).to include("spec/fixtures/ruby_file.rb | 13 | Syntax/WhetherYouShouldDoThat: Don't do that!") - end - - it 'handles a rubocop report for specified files (legacy)' do - allow(@rubocop).to receive(:`) - .with('bundle exec rubocop -f json --only-recognized-file-types spec/fixtures/ruby_file.rb') - .and_return(response_ruby_file) - - # Do it - @rubocop.lint('spec/fixtures/ruby*.rb') - - output = @rubocop.status_report[:markdowns].first.message - - # A title - expect(output).to include('Rubocop violations') - # A warning - expect(output).to include("spec/fixtures/ruby_file.rb | 13 | Don't do that!") - end - - it 'appends --force-exclusion argument when force_exclusion is set' do - allow(@rubocop).to receive(:`) - .with('bundle exec rubocop -f json --only-recognized-file-types --force-exclusion spec/fixtures/ruby_file.rb') - .and_return(response_ruby_file) - - # Do it - @rubocop.lint(files: 'spec/fixtures/ruby*.rb', force_exclusion: true) - - output = @rubocop.status_report[:markdowns].first.message - - # A title - expect(output).to include('Rubocop violations') - # A warning - expect(output).to include("spec/fixtures/ruby_file.rb | 13 | Don't do that!") - end - - it 'handles a rubocop report for files changed in the PR' do - allow(@rubocop.git).to receive(:added_files).and_return([]) - allow(@rubocop.git).to receive(:modified_files) - .and_return(["spec/fixtures/old_file_name.rb", "spec/fixtures/another_ruby_file.rb"]) - allow(@rubocop.git).to receive(:renamed_files) - .and_return([{before: "spec/fixtures/old_file_name.rb", after: "spec/fixtures/new_file_name.rb"}]) - - allow(@rubocop).to receive(:`) - .with('bundle exec rubocop -f json --only-recognized-file-types spec/fixtures/new_file_name.rb spec/fixtures/another_ruby_file.rb') - .and_return(response_another_ruby_file) - - @rubocop.lint - - output = @rubocop.status_report[:markdowns].first.message - - expect(output).to include('Rubocop violations') - expect(output).to include("spec/fixtures/another_ruby_file.rb | 23 | Don't do that!") - end - - it 'is formatted as a markdown table' do - allow(@rubocop.git).to receive(:modified_files) - .and_return(['spec/fixtures/ruby_file.rb']) - allow(@rubocop.git).to receive(:added_files).and_return([]) - allow(@rubocop.git).to receive(:renamed_files).and_return([]) - allow(@rubocop).to receive(:`) - .with('bundle exec rubocop -f json --only-recognized-file-types spec/fixtures/ruby_file.rb') - .and_return(response_ruby_file) - - @rubocop.lint - - formatted_table = <<-EOS -### Rubocop violations\n -| File | Line | Reason | -|----------------------------|------|----------------| -| spec/fixtures/ruby_file.rb | 13 | Don't do that! | -EOS - expect(@rubocop.status_report[:markdowns].first.message).to eq(formatted_table.chomp) - expect(@rubocop).not_to receive(:fail) - end - - context 'with inline_comment option' do - context 'without fail_on_inline_comment option' do - it 'reports violations as line by line warnings' do - allow(@rubocop.git).to receive(:modified_files) - .and_return(['spec/fixtures/ruby_file.rb']) - allow(@rubocop.git).to receive(:added_files).and_return([]) - allow(@rubocop.git).to receive(:renamed_files).and_return([]) - allow(@rubocop).to receive(:`) - .with('bundle exec rubocop -f json --only-recognized-file-types spec/fixtures/ruby_file.rb') - .and_return(response_ruby_file) - - @rubocop.lint(inline_comment: true) - - expect(@rubocop.violation_report[:warnings].first.to_s) - .to eq("Violation Don't do that! { sticky: false, file: spec/fixtures/ruby_file.rb, line: 13, type: warning }") - end - end - - context 'with fail_on_inline_comment option' do - before do - allow(@rubocop.git).to receive(:modified_files) - .and_return(['spec/fixtures/ruby_file.rb']) - allow(@rubocop.git).to receive(:added_files).and_return([]) - allow(@rubocop.git).to receive(:renamed_files).and_return([]) - allow(@rubocop).to receive(:`) - .with('bundle exec rubocop -f json --only-recognized-file-types spec/fixtures/ruby_file.rb') - .and_return(response_ruby_file) - end - - it 'reports violations as line by line failures' do - @rubocop.lint(fail_on_inline_comment: true, inline_comment: true) - - expect(@rubocop.violation_report[:errors].first.to_s) - .to eq("Violation Don't do that! { sticky: false, file: spec/fixtures/ruby_file.rb, line: 13, type: error }") - end - - it 'includes cop names when include_cop_names is set' do - @rubocop.lint(fail_on_inline_comment: true, inline_comment: true, include_cop_names: true) - - expect(@rubocop.violation_report[:errors].first.to_s) - .to eq("Violation Syntax/WhetherYouShouldDoThat: Don't do that! { sticky: false, file: spec/fixtures/ruby_file.rb, line: 13, type: error }") - end - end - end - - context 'with report_severity option' do - context 'file with error' do - it 'reports violations by rubocop severity' do - allow(@rubocop.git).to receive(:added_files).and_return([]) - allow(@rubocop.git).to receive(:modified_files) - .and_return(["spec/fixtures/another_ruby_file.rb"]) - allow(@rubocop.git).to receive(:renamed_files).and_return([]) - - allow(@rubocop).to receive(:`) - .with('bundle exec rubocop -f json --only-recognized-file-types spec/fixtures/another_ruby_file.rb') - .and_return(response_another_ruby_file) - - @rubocop.lint(report_severity: true, inline_comment: true) - - expect(@rubocop.violation_report[:errors].first.to_s) - .to eq("Violation Don't do that! { sticky: false, file: spec/fixtures/another_ruby_file.rb, line: 23, type: error }") - end - end - end - - context 'file with warning' do - it 'reports violations by rubocop severity' do - allow(@rubocop.git).to receive(:added_files).and_return([]) - allow(@rubocop.git).to receive(:modified_files) - .and_return(["spec/fixtures/ruby_file.rb"]) - allow(@rubocop.git).to receive(:renamed_files).and_return([]) - - allow(@rubocop).to receive(:`) - .with('bundle exec rubocop -f json --only-recognized-file-types spec/fixtures/ruby_file.rb') - .and_return(response_ruby_file) - - @rubocop.lint(report_severity: true, inline_comment: true) - - expect(@rubocop.violation_report[:warnings].first.to_s) - .to eq("Violation Don't do that! { sticky: false, file: spec/fixtures/ruby_file.rb, line: 13, type: warning }") - end - end - - context 'using standardrb cmd' do - it 'executes using the standardrb cmd' do - allow(@rubocop).to receive(:`) - .with('bundle exec standardrb -f json --only-recognized-file-types --config path/to/rubocop.yml spec/fixtures/ruby_file.rb') - .and_return(response_ruby_file) - - # Do it - @rubocop.lint(files: 'spec/fixtures/ruby*.rb', rubocop_cmd: 'standardrb', config: 'path/to/rubocop.yml') - end - end - - describe 'a filename with special characters' do - it 'is shell escaped' do - modified_files = [ - 'spec/fixtures/shellescape/ruby_file_with_parens_(abc).rb', - 'spec/fixtures/shellescape/ruby_file with spaces.rb', - 'spec/fixtures/shellescape/ruby_file\'with_quotes.rb' - ] - allow(@rubocop.git).to receive(:modified_files) - .and_return(modified_files) - allow(@rubocop.git).to receive(:added_files).and_return([]) - allow(@rubocop.git).to receive(:renamed_files).and_return([]) - - expect { @rubocop.lint }.not_to raise_error - end - end - - describe 'report to danger' do - before do - allow(@rubocop.git).to receive(:modified_files) - .and_return(['spec/fixtures/ruby_file.rb']) - allow(@rubocop.git).to receive(:added_files).and_return([]) - allow(@rubocop.git).to receive(:renamed_files).and_return([]) - allow(@rubocop).to receive(:`) - .with('bundle exec rubocop -f json --only-recognized-file-types spec/fixtures/ruby_file.rb') - .and_return(response_ruby_file) - end - - it 'reports to danger' do - fail_msg = %{spec/fixtures/ruby_file.rb | 13 | Don't do that!} - expect(@rubocop).to receive(:fail).with(fail_msg) - @rubocop.lint(report_danger: true) - end - - it 'includes cop names when include_cop_names is set' do - fail_msg = %{spec/fixtures/ruby_file.rb | 13 | Syntax/WhetherYouShouldDoThat: Don't do that!} - - expect(@rubocop).to receive(:fail).with(fail_msg) - @rubocop.lint(report_danger: true, include_cop_names: true) - end - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-rubocop-0.12.0/spec/fixtures/ruby_file.rb b/bundle/ruby/3.2.0/gems/danger-rubocop-0.12.0/spec/fixtures/ruby_file.rb deleted file mode 100755 index a2a06e9a..00000000 --- a/bundle/ruby/3.2.0/gems/danger-rubocop-0.12.0/spec/fixtures/ruby_file.rb +++ /dev/null @@ -1 +0,0 @@ -# This file intentional left blank-ish. diff --git a/bundle/ruby/3.2.0/gems/danger-rubocop-0.12.0/spec/fixtures/shellescape/ruby_file with spaces.rb b/bundle/ruby/3.2.0/gems/danger-rubocop-0.12.0/spec/fixtures/shellescape/ruby_file with spaces.rb deleted file mode 100755 index a2a06e9a..00000000 --- a/bundle/ruby/3.2.0/gems/danger-rubocop-0.12.0/spec/fixtures/shellescape/ruby_file with spaces.rb +++ /dev/null @@ -1 +0,0 @@ -# This file intentional left blank-ish. diff --git a/bundle/ruby/3.2.0/gems/danger-rubocop-0.12.0/spec/fixtures/shellescape/ruby_file'with_quotes.rb b/bundle/ruby/3.2.0/gems/danger-rubocop-0.12.0/spec/fixtures/shellescape/ruby_file'with_quotes.rb deleted file mode 100755 index a2a06e9a..00000000 --- a/bundle/ruby/3.2.0/gems/danger-rubocop-0.12.0/spec/fixtures/shellescape/ruby_file'with_quotes.rb +++ /dev/null @@ -1 +0,0 @@ -# This file intentional left blank-ish. diff --git a/bundle/ruby/3.2.0/gems/danger-rubocop-0.12.0/spec/fixtures/shellescape/ruby_file_with_parens_(abc).rb b/bundle/ruby/3.2.0/gems/danger-rubocop-0.12.0/spec/fixtures/shellescape/ruby_file_with_parens_(abc).rb deleted file mode 100755 index a2a06e9a..00000000 --- a/bundle/ruby/3.2.0/gems/danger-rubocop-0.12.0/spec/fixtures/shellescape/ruby_file_with_parens_(abc).rb +++ /dev/null @@ -1 +0,0 @@ -# This file intentional left blank-ish. diff --git a/bundle/ruby/3.2.0/gems/danger-rubocop-0.12.0/spec/spec_helper.rb b/bundle/ruby/3.2.0/gems/danger-rubocop-0.12.0/spec/spec_helper.rb deleted file mode 100755 index 0f13623f..00000000 --- a/bundle/ruby/3.2.0/gems/danger-rubocop-0.12.0/spec/spec_helper.rb +++ /dev/null @@ -1,44 +0,0 @@ -require 'pathname' - -ROOT = Pathname.new(File.expand_path('../../', __FILE__)) -$LOAD_PATH.unshift((ROOT + 'lib').to_s) -$LOAD_PATH.unshift((ROOT + 'spec').to_s) - -RSpec.configure do |config| - # Use color in STDOUT - config.color = true -end - -require 'bundler/setup' -require 'pry' - -require 'danger' -require 'cork' -require 'danger_plugin' -require 'json' - -# These functions are a subset of https://github.com/danger/danger/blob/master/spec/spec_helper.rb -# If you are expanding these files, see if it's already been done ^. - -# A silent version of the user interface -def testing_ui - Cork::Board.new(silent: true) -end - -# Example environment (ENV) that would come from -# running a PR on TravisCI -def testing_env - { - 'HAS_JOSH_K_SEAL_OF_APPROVAL' => 'true', - 'TRAVIS_PULL_REQUEST' => '800', - 'TRAVIS_REPO_SLUG' => 'artsy/eigen', - 'TRAVIS_COMMIT_RANGE' => '759adcbd0d8f...13c4dc8bb61d', - 'DANGER_GITHUB_API_TOKEN' => '123sbdq54erfsd3422gdfio' - } -end - -# A stubbed out Dangerfile for use in tests -def testing_dangerfile - env = Danger::EnvironmentManager.new(testing_env) - Danger::Dangerfile.new(env, testing_ui) -end diff --git a/bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/.dependabot/config.yml b/bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/.dependabot/config.yml deleted file mode 100644 index b5a4b808..00000000 --- a/bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/.dependabot/config.yml +++ /dev/null @@ -1,18 +0,0 @@ -version: 1 - -update_configs: - - package_manager: "ruby:bundler" - directory: "/" - update_schedule: "monthly" - - allowed_updates: - - match: - update_type: "security" - automerged_updates: - - match: - dependency_type: "all" - update_type: "security:patch" - - match: - dependency_type: "development" - update_type: "semver:minor" - version_requirement_updates: "off" \ No newline at end of file diff --git a/bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/.devcontainer/Dockerfile b/bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/.devcontainer/Dockerfile deleted file mode 100644 index dd61323f..00000000 --- a/bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/.devcontainer/Dockerfile +++ /dev/null @@ -1,18 +0,0 @@ -# See here for image contents: https://github.com/microsoft/vscode-dev-containers/tree/v0.134.1/containers/ruby/.devcontainer/base.Dockerfile -ARG VARIANT="2" -FROM mcr.microsoft.com/vscode/devcontainers/ruby:0-${VARIANT} - -# [Optional] Install a version of Node.js using nvm for front end dev -ARG INSTALL_NODE="true" -ARG NODE_VERSION="lts/*" -RUN if [ "${INSTALL_NODE}" = "true" ]; then su vscode -c "source /usr/local/share/nvm/nvm.sh && nvm install ${NODE_VERSION} 2>&1"; fi - -# [Optional] Uncomment this section to install additional OS packages. -RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ - && apt-get -y install --no-install-recommends git vim - -# [Optional] Uncomment this line to install additional gems. -# RUN gem install - -# [Optional] Uncomment this line to install global node packages. -# RUN su vscode -c "source /usr/local/share/nvm/nvm.sh && npm install -g " 2>&1 \ No newline at end of file diff --git a/bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/.github/dependabot.yml b/bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/.github/dependabot.yml deleted file mode 100644 index 0fa5528a..00000000 --- a/bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/.github/dependabot.yml +++ /dev/null @@ -1,12 +0,0 @@ -# To get started with Dependabot version updates, you'll need to specify which -# package ecosystems to update and where the package manifests are located. -# Please see the documentation for all configuration options: -# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates - -version: 2 -updates: - - package-ecosystem: "bundler" # See documentation for possible values - directory: "/" # Location of package manifests - schedule: - interval: "monthly" - timezone: "Asia/Tokyo" diff --git a/bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/.github/release-drafter.yml b/bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/.github/release-drafter.yml deleted file mode 100644 index bc2d589e..00000000 --- a/bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/.github/release-drafter.yml +++ /dev/null @@ -1,40 +0,0 @@ -name-template: 'v$RESOLVED_VERSION' -tag-template: 'v$RESOLVED_VERSION' -categories: - - title: 'BREAKING CHANGES' - labels: - - 'BREAKING CHANGES' - - title: 'Features' - labels: - - 'feature' - - 'enhancement' - - title: 'Fixes' - labels: - - 'bug' - - 'security' - - title: 'Dependencies' - collapse-after: 3 - label: 'dependencies' - - title: 'Documentation' - label: 'document' -change-template: '- $TITLE @$AUTHOR (#$NUMBER)' -change-title-escapes: '\<*_&' # You can add # and @ to disable mentions, and add ` to disable code blocks. -version-resolver: - major: - labels: - - 'BREAKING CHANGES' - minor: - labels: - - 'feature' - - 'enhancement' - patch: - labels: - - 'bug' - - 'security' - default: patch -template: | - ## [v$RESOLVED_VERSION](https://github.com/$OWNER/$REPOSITORY/compare/$PREVIOUS_TAG...v$RESOLVED_VERSION) - - ## Changes - - $CHANGES diff --git a/bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/.github/workflows/ci.yml b/bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/.github/workflows/ci.yml deleted file mode 100644 index 71ae537d..00000000 --- a/bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/.github/workflows/ci.yml +++ /dev/null @@ -1,29 +0,0 @@ -name: CI -on: [push] - -jobs: - test: - name: Test - runs-on: ubuntu-latest - strategy: - matrix: - image: [ 'ruby:2.7', 'ruby:3.0', 'ruby:3.1' ] - container: - image: ${{ matrix.image }} - - steps: - - uses: actions/checkout@v2 - - - name: Setup bundler - run: gem install bundler - - - name: bundle install - run: bundle install --jobs=4 --retry=3 --path=./vendor - - - name: Show versions - run: | - ruby --version - bundle --version - - - name: test - run: bundle exec rake spec diff --git a/bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/.github/workflows/publish.yml b/bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/.github/workflows/publish.yml deleted file mode 100644 index 3de2bd96..00000000 --- a/bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/.github/workflows/publish.yml +++ /dev/null @@ -1,63 +0,0 @@ -name: Publish gems - -on: - workflow_dispatch: - -jobs: - draft_release: - runs-on: ubuntu-latest - outputs: - tag_name: ${{ steps.release-drafter.outputs.tag_name }} - steps: - # Get next version - - uses: release-drafter/release-drafter@v5 - id: release-drafter - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - publish_release: - runs-on: ubuntu-latest - environment: prod - needs: draft_release - steps: - # Create version string from tag (v1.0.0 -> 1.0.0) - - name: Create version string - run: | - export TAG_NAME=${{ needs.draft_release.outputs.tag_name }} - echo "VERSION=${TAG_NAME:1}" >> $GITHUB_ENV - - # Publish rubygems - - uses: actions/checkout@v2 - - run: | - git config --global user.name "github-actions" - git config --global user.email "github-actions@github.com" - - name: Setup rubygems credentials - run: | - mkdir -p ~/.gem - cat << EOF > ~/.gem/credentials - --- - :rubygems_api_key: ${RUBYGEMS_API_KEY} - EOF - - chmod 0600 ~/.gem/credentials - env: - RUBYGEMS_API_KEY: ${{ secrets.RUBYGEMS_API_KEY }} - - uses: ruby/setup-ruby@v1 - with: - ruby-version: 3 - bundler-cache: true - - name: Release rubygems - run: | - bundle config unset --local deployment - bundle exec bump set $VERSION - bundle install - bundle exec rake release - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - # Publish github releases - - uses: release-drafter/release-drafter@v5 - with: - publish: true - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/.gitignore b/bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/.gitignore deleted file mode 100644 index 1b810d7c..00000000 --- a/bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -.DS_Store -pkg -.idea/ -.yardoc diff --git a/bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/.rubocop.yml b/bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/.rubocop.yml deleted file mode 100644 index 37404954..00000000 --- a/bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/.rubocop.yml +++ /dev/null @@ -1,155 +0,0 @@ -# Defaults can be found here: https://github.com/bbatsov/rubocop/blob/master/config/default.yml - -# If you don't like these settings, just delete this file :) - -AllCops: - TargetRubyVersion: 2.7 - NewCops: disable - -Style/StringLiterals: - EnforcedStyle: double_quotes - Enabled: true - -# kind_of? is a good way to check a type -Style/ClassCheck: - EnforcedStyle: kind_of? - -# specs sometimes have useless assignments, which is fine -Lint/UselessAssignment: - Exclude: - - '**/spec/**/*' - -# We could potentially enable the 2 below: -Layout/FirstHashElementIndentation: - Enabled: false - -Layout/HashAlignment: - Enabled: false - -# HoundCI doesn't like this rule -Layout/DotPosition: - Enabled: false - -# We allow !! as it's an easy way to convert ot boolean -Style/DoubleNegation: - Enabled: false - -# Cop supports --auto-correct. -Lint/UnusedBlockArgument: - Enabled: false - -# We want to allow class Fastlane::Class -Style/ClassAndModuleChildren: - Enabled: false - -Metrics/AbcSize: - Max: 60 - -# The %w might be confusing for new users -Style/WordArray: - MinSize: 19 - -# raise and fail are both okay -Style/SignalException: - Enabled: false - -# Better too much 'return' than one missing -Style/RedundantReturn: - Enabled: false - -# Having if in the same line might not always be good -Style/IfUnlessModifier: - Enabled: false - -# and and or is okay -Style/AndOr: - Enabled: false - -# Configuration parameters: CountComments. -Metrics/ClassLength: - Max: 350 - -Metrics/CyclomaticComplexity: - Max: 17 - -# Configuration parameters: AllowURI, URISchemes. -Metrics/LineLength: - Max: 370 - -# Configuration parameters: CountKeywordArgs. -Metrics/ParameterLists: - Max: 10 - -Metrics/PerceivedComplexity: - Max: 18 - -# Sometimes it's easier to read without guards -Style/GuardClause: - Enabled: false - -# something = if something_else -# that's confusing -Style/ConditionalAssignment: - Enabled: false - -# Better to have too much self than missing a self -Style/RedundantSelf: - Enabled: false - -Metrics/MethodLength: - Max: 60 - -# We're not there yet -Style/Documentation: - Enabled: false - -# Adds complexity -Style/IfInsideElse: - Enabled: false - -# danger specific - -Style/BlockComments: - Enabled: false - -Layout/MultilineMethodCallIndentation: - EnforcedStyle: indented - -# FIXME: 25 -Metrics/BlockLength: - Max: 345 - Exclude: - - "**/*_spec.rb" - -Style/MixinGrouping: - Enabled: false - -Naming/FileName: - Enabled: false - -Layout/HeredocIndentation: - Enabled: false - -Style/SpecialGlobalVars: - Enabled: false - -PercentLiteralDelimiters: - PreferredDelimiters: - "%": () - "%i": () - "%q": () - "%Q": () - "%r": "{}" - "%s": () - "%w": () - "%W": () - "%x": () - -Security/YAMLLoad: - Enabled: false - -Style/FrozenStringLiteralComment: - Enabled: false - -Metrics/ModuleLength: - Enabled: false diff --git a/bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/Gemfile b/bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/Gemfile deleted file mode 100644 index 3f59d564..00000000 --- a/bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -# Specify your gem's dependencies in danger-textlint.gemspec -gemspec diff --git a/bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/Gemfile.lock b/bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/Gemfile.lock deleted file mode 100644 index 381cf12d..00000000 --- a/bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/Gemfile.lock +++ /dev/null @@ -1,172 +0,0 @@ -PATH - remote: . - specs: - danger-textlint (2.0.4) - danger-plugin-api (~> 1.0) - -GEM - remote: https://rubygems.org/ - specs: - addressable (2.8.0) - public_suffix (>= 2.0.2, < 5.0) - ast (2.4.2) - bump (0.10.0) - claide (1.1.0) - claide-plugins (0.9.2) - cork - nap - open4 (~> 1.3) - coderay (1.1.3) - colored2 (3.1.2) - cork (0.3.0) - colored2 (~> 3.1) - danger (8.6.1) - claide (~> 1.0) - claide-plugins (>= 0.9.2) - colored2 (~> 3.1) - cork (~> 0.1) - faraday (>= 0.9.0, < 2.0) - faraday-http-cache (~> 2.0) - git (~> 1.7) - kramdown (~> 2.3) - kramdown-parser-gfm (~> 1.0) - no_proxy_fix - octokit (~> 4.7) - terminal-table (>= 1, < 4) - danger-plugin-api (1.0.0) - danger (> 2.0) - diff-lcs (1.5.0) - faraday (1.10.0) - faraday-em_http (~> 1.0) - faraday-em_synchrony (~> 1.0) - faraday-excon (~> 1.1) - faraday-httpclient (~> 1.0) - faraday-multipart (~> 1.0) - faraday-net_http (~> 1.0) - faraday-net_http_persistent (~> 1.0) - faraday-patron (~> 1.0) - faraday-rack (~> 1.0) - faraday-retry (~> 1.0) - ruby2_keywords (>= 0.0.4) - faraday-em_http (1.0.0) - faraday-em_synchrony (1.0.0) - faraday-excon (1.1.0) - faraday-http-cache (2.2.0) - faraday (>= 0.8) - faraday-httpclient (1.0.1) - faraday-multipart (1.0.3) - multipart-post (>= 1.2, < 3) - faraday-net_http (1.0.1) - faraday-net_http_persistent (1.2.0) - faraday-patron (1.0.0) - faraday-rack (1.0.0) - faraday-retry (1.0.3) - ffi (1.15.5) - formatador (0.3.0) - git (1.11.0) - rchardet (~> 1.8) - guard (2.18.0) - formatador (>= 0.2.4) - listen (>= 2.7, < 4.0) - lumberjack (>= 1.0.12, < 2.0) - nenv (~> 0.1) - notiffany (~> 0.0) - pry (>= 0.13.0) - shellany (~> 0.0) - thor (>= 0.18.1) - guard-compat (1.2.1) - guard-rspec (4.7.3) - guard (~> 2.1) - guard-compat (~> 1.1) - rspec (>= 2.99.0, < 4.0) - kramdown (2.4.0) - rexml - kramdown-parser-gfm (1.1.0) - kramdown (~> 2.0) - listen (3.7.1) - rb-fsevent (~> 0.10, >= 0.10.3) - rb-inotify (~> 0.9, >= 0.9.10) - lumberjack (1.2.8) - method_source (1.0.0) - multipart-post (2.1.1) - nap (1.1.0) - nenv (0.3.0) - no_proxy_fix (0.1.2) - notiffany (0.1.3) - nenv (~> 0.1) - shellany (~> 0.0) - octokit (4.22.0) - faraday (>= 0.9) - sawyer (~> 0.8.0, >= 0.5.3) - open4 (1.3.4) - parallel (1.22.1) - parser (3.1.1.0) - ast (~> 2.4.1) - pry (0.14.1) - coderay (~> 1.1) - method_source (~> 1.0) - public_suffix (4.0.7) - rainbow (3.1.1) - rake (13.0.6) - rb-fsevent (0.11.0) - rb-inotify (0.10.1) - ffi (~> 1.0) - rchardet (1.8.0) - regexp_parser (2.2.1) - rexml (3.2.5) - rspec (3.11.0) - rspec-core (~> 3.11.0) - rspec-expectations (~> 3.11.0) - rspec-mocks (~> 3.11.0) - rspec-core (3.11.0) - rspec-support (~> 3.11.0) - rspec-expectations (3.11.0) - diff-lcs (>= 1.2.0, < 2.0) - rspec-support (~> 3.11.0) - rspec-mocks (3.11.0) - diff-lcs (>= 1.2.0, < 2.0) - rspec-support (~> 3.11.0) - rspec-support (3.11.0) - rubocop (1.26.1) - parallel (~> 1.10) - parser (>= 3.1.0.0) - rainbow (>= 2.2.2, < 4.0) - regexp_parser (>= 1.8, < 3.0) - rexml - rubocop-ast (>= 1.16.0, < 2.0) - ruby-progressbar (~> 1.7) - unicode-display_width (>= 1.4.0, < 3.0) - rubocop-ast (1.16.0) - parser (>= 3.1.1.0) - ruby-progressbar (1.11.0) - ruby2_keywords (0.0.5) - sawyer (0.8.2) - addressable (>= 2.3.5) - faraday (> 0.8, < 2.0) - shellany (0.0.1) - terminal-table (3.0.2) - unicode-display_width (>= 1.1.1, < 3) - thor (1.1.0) - unicode-display_width (2.1.0) - webrick (1.7.0) - yard (0.9.27) - webrick (~> 1.7.0) - -PLATFORMS - ruby - -DEPENDENCIES - bump (~> 0.10.0) - bundler (~> 2.0) - danger-textlint! - guard (~> 2.14) - guard-rspec (~> 4.7) - listen (= 3.7.1) - pry - rake (~> 13.0) - rspec (~> 3.4) - rubocop - yard - -BUNDLED WITH - 2.1.4 diff --git a/bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/Guardfile b/bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/Guardfile deleted file mode 100644 index 95b91ae1..00000000 --- a/bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/Guardfile +++ /dev/null @@ -1,19 +0,0 @@ -# A guardfile for making Danger Plugins -# For more info see https://github.com/guard/guard#readme - -# To run, use `bundle exec guard`. - -guard :rspec, cmd: 'bundle exec rspec' do - require 'guard/rspec/dsl' - dsl = Guard::RSpec::Dsl.new(self) - - # RSpec files - rspec = dsl.rspec - watch(rspec.spec_helper) { rspec.spec_dir } - watch(rspec.spec_support) { rspec.spec_dir } - watch(rspec.spec_files) - - # Ruby files - ruby = dsl.ruby - dsl.watch_spec_files_for(ruby.lib_files) -end diff --git a/bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/LICENSE.txt b/bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/LICENSE.txt deleted file mode 100644 index 0e272387..00000000 --- a/bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2018 Kenta Kase - -MIT License - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/README.md b/bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/README.md deleted file mode 100644 index 84eca87b..00000000 --- a/bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/README.md +++ /dev/null @@ -1,80 +0,0 @@ -# danger-textlint -[![Gem Version](https://badge.fury.io/rb/danger-textlint.svg)](https://badge.fury.io/rb/danger-textlint) -[![](https://github.com/Kesin11/danger-textlint/workflows/CI/badge.svg)](https://github.com/Kesin11/danger-textlint/actions) - - -[Danger](http://danger.systems/ruby/) plugin for [textlint](https://textlint.github.io/). - -## Installation - - $ gem install danger-textlint - -`danger-textlint` needs `textlint` to lint your files. Please check the [installation guide](https://github.com/textlint/textlint#installation) and install it before you run Danger. - -`danger-textlint` will first try local `node_modules/.bin/textlint` then the global `textlint`. -My recommend is installing `textlint` in local. Create package.json (`npm init`) and then install (`npm i textlint`). - -## Usage - -
    Run textlint and send violations as inline comment. -
    -# Lint added and modified files only
    -textlint.lint
    -
    -
    - -
    Keep severity until warning. It allows merging pull request if there are violations remaining. -
    -textlint.max_severity = "warn"
    -textlint.lint
    -
    -
    - -#### Attributes - -`config_file` - .textlintrc path - -`max_severity` - Set max danger reporting severity -choice: nil or "warn" - -#### Methods - -`lint` - Execute textlint and send comment - -## Usage(Github Actions) -Puts this code into your .github/workflows/ - -```yaml -name: "textlint" -on: - pull_request: - -jobs: - textlint: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - - name: Setup node version - uses: actions/setup-node@v2 - with: - node-version: '14' - cache: 'npm' - - run: npm ci - - - uses: ruby/setup-ruby@v1 - with: - ruby-version: 3 - bundler-cache: true - - run: bundle exec danger - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} -``` - -## Development - -1. Clone this repo -2. Run `bundle install` to setup dependencies. -3. Run `bundle exec rake spec` to run the tests. -4. Use `bundle exec guard` to automatically have tests run as you make changes. -5. Make your changes. diff --git a/bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/Rakefile b/bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/Rakefile deleted file mode 100644 index af169898..00000000 --- a/bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/Rakefile +++ /dev/null @@ -1,23 +0,0 @@ -require 'bundler/gem_tasks' -require 'rspec/core/rake_task' -require 'rubocop/rake_task' - -RSpec::Core::RakeTask.new(:specs) - -task default: :specs - -task :spec do - Rake::Task['specs'].invoke - Rake::Task['rubocop'].invoke - Rake::Task['spec_docs'].invoke -end - -desc 'Run RuboCop on the lib/specs directory' -RuboCop::RakeTask.new(:rubocop) do |task| - task.patterns = ['lib/**/*.rb', 'spec/**/*.rb'] -end - -desc 'Ensure that the plugin passes `danger plugins lint`' -task :spec_docs do - sh 'bundle exec danger plugins lint' -end diff --git a/bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/danger-textlint.gemspec b/bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/danger-textlint.gemspec deleted file mode 100644 index 4baca7d9..00000000 --- a/bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/danger-textlint.gemspec +++ /dev/null @@ -1,52 +0,0 @@ -# coding: utf-8 -lib = File.expand_path('../lib', __FILE__) -$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) -require 'textlint/gem_version.rb' - -Gem::Specification.new do |spec| - spec.name = 'danger-textlint' - spec.version = Textlint::VERSION - spec.authors = ['Kesin'] - spec.email = ['kesin1202000@gmail.com'] - spec.description = %q{Danger plugin for textlint.} - spec.summary = %q{Danger plugin for textlint.} - spec.homepage = 'https://github.com/Kesin11/danger-textlint' - spec.license = 'MIT' - - spec.files = `git ls-files`.split($/) - spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) } - spec.test_files = spec.files.grep(%r{^(test|spec|features)/}) - spec.require_paths = ['lib'] - - spec.add_runtime_dependency 'danger-plugin-api', '~> 1.0' - - # General ruby development - spec.add_development_dependency 'bundler', '~> 2.0' - spec.add_development_dependency 'rake', '~> 13.0' - - # Testing support - spec.add_development_dependency 'rspec', '~> 3.4' - - # Linting code and docs - spec.add_development_dependency "rubocop" - spec.add_development_dependency "yard" - - # Makes testing easy via `bundle exec guard` - spec.add_development_dependency 'guard', '~> 2.14' - spec.add_development_dependency 'guard-rspec', '~> 4.7' - - # If you want to work on older builds of ruby - spec.add_development_dependency 'listen', '3.7.1' - - # Help gem version up when release new version - spec.add_development_dependency 'bump', '~> 0.10.0' - - # This gives you the chance to run a REPL inside your tests - # via: - # - # require 'pry' - # binding.pry - # - # This will stop test execution and let you inspect the results - spec.add_development_dependency 'pry' -end diff --git a/bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/lib/danger_plugin.rb b/bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/lib/danger_plugin.rb deleted file mode 100644 index 43abb6b5..00000000 --- a/bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/lib/danger_plugin.rb +++ /dev/null @@ -1 +0,0 @@ -require "textlint/plugin" diff --git a/bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/lib/danger_textlint.rb b/bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/lib/danger_textlint.rb deleted file mode 100644 index 6c7035c7..00000000 --- a/bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/lib/danger_textlint.rb +++ /dev/null @@ -1 +0,0 @@ -require "textlint/gem_version" diff --git a/bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/lib/textlint/gem_version.rb b/bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/lib/textlint/gem_version.rb deleted file mode 100644 index d80bad97..00000000 --- a/bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/lib/textlint/gem_version.rb +++ /dev/null @@ -1,3 +0,0 @@ -module Textlint - VERSION = "2.0.4".freeze -end diff --git a/bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/lib/textlint/plugin.rb b/bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/lib/textlint/plugin.rb deleted file mode 100644 index 4c87a30f..00000000 --- a/bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/lib/textlint/plugin.rb +++ /dev/null @@ -1,115 +0,0 @@ -# require "mkmf" -require "json" - -module Danger - # [Danger](http://danger.systems/ruby/) plugin for [textlint](https://textlint.github.io/). - # - # @example Run textlint and send violations as inline comment. - # - # # Lint added and modified files only - # textlint.lint - # - # @example Keep severity until warning. It allows merging pull request if there are violations remaining. - # - # textlint.max_severity = "warn" - # textlint.lint - # - # @example Max inline comment number. If you want disable this feature, please set nil. Default: nil - # - # textlint.max_comment_num = 5 - # textlint.lint - # - # @see Kesin11/danger-textlint - # @tags lint, textlint - # - class DangerTextlint < Plugin - # .textlintrc path - # @return [String] - attr_accessor :config_file - - # Set max danger reporting severity - # choice: nil or "warn" - # @return [String] - attr_accessor :max_severity - - # Set max danger reporting comment number - # choice: nil or integer - # @return [String] - attr_accessor :max_comment_num - - # Execute textlint and send comment - # @return [void] - def lint - return if target_files.empty? - - bin = textlint_path - result_json = run_textlint(bin, target_files) - errors = parse(result_json) - send_comment(errors) - end - - private - - def textlint_path - local = "./node_modules/.bin/textlint" - - # NOTE: Danger using method_missing hack for parse 'warn', 'fail' in Dangerfile. - # Same issue will occur 'message' when require 'mkmf'. Because 'mkmf' provide 'message' method. - # Then, disable find executable textlint until danger fix this issue. - - # File.exist?(local) ? local : find_executable("textlint") - raise "textlint not found in ./node_modules/.bin/textlint" unless File.exist?(local) - - local - end - - def textlint_command(bin, target_files) - command = "#{bin} -f json" - command << " -c #{config_file}" if config_file - return "#{command} #{target_files.join(' ')}" - end - - def run_textlint(bin, target_files) - command = textlint_command(bin, target_files) - `#{command}` - end - - def target_files - ((git.modified_files - git.deleted_files) + git.added_files) - end - - def parse(json) - result = JSON(json) - dir = "#{Dir.pwd}/" - severity_method = { - 1 => "warn", - 2 => "fail" - } - - result.flat_map do |file| - file_path = file["filePath"] - file["messages"].map do |message| - severity = max_severity == "warn" ? 1 : message["severity"] - { - file_path: file_path.gsub(dir, ""), - line: message["line"], - severity: severity_method[severity], - message: "#{message['message']}(#{message['ruleId']})" - } - end - end - end - - def send_comment(errors) - limited_errors = errors - if max_comment_num && limited_errors.size > max_comment_num - limited_errors = limited_errors.first(max_comment_num) - send("warn", "Textlint reported more than #{max_comment_num} problems, but danger-textlint doesn't to display all problems. Please run textlint in your machine and check all problems.") - end - - limited_errors.each do |error| - send(error[:severity], error[:message], file: error[:file_path], line: error[:line]) - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/spec/spec_helper.rb b/bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/spec/spec_helper.rb deleted file mode 100644 index 4cea59ad..00000000 --- a/bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/spec/spec_helper.rb +++ /dev/null @@ -1,65 +0,0 @@ -require "pathname" -ROOT = Pathname.new(File.expand_path("..", __dir__)) -$:.unshift("#{ROOT}lib".to_s) -$:.unshift("#{ROOT}spec".to_s) - -require "bundler/setup" -require "pry" - -require "rspec" -require "danger" - -if `git remote -v` == "" - puts "You cannot run tests without setting a local git remote on this repo" - puts "It's a weird side-effect of Danger's internals." - exit(0) -end - -# Use coloured output, it's the best. -RSpec.configure do |config| - config.filter_gems_from_backtrace "bundler" - config.color = true - config.tty = true -end - -require "danger_plugin" - -# These functions are a subset of https://github.com/danger/danger/blob/master/spec/spec_helper.rb -# If you are expanding these files, see if it's already been done ^. - -# A silent version of the user interface, -# it comes with an extra function `.string` which will -# strip all ANSI colours from the string. - -# rubocop:disable Lint/NestedMethodDefinition -def testing_ui - @output = StringIO.new - def @output.winsize - [20, 9999] - end - - cork = Cork::Board.new(out: @output) - def cork.string - out.string.gsub(/\e\[([;\d]+)?m/, "") - end - cork -end -# rubocop:enable Lint/NestedMethodDefinition - -# Example environment (ENV) that would come from -# running a PR on TravisCI -def testing_env - { - "HAS_JOSH_K_SEAL_OF_APPROVAL" => "true", - "TRAVIS_PULL_REQUEST" => "800", - "TRAVIS_REPO_SLUG" => "artsy/eigen", - "TRAVIS_COMMIT_RANGE" => "759adcbd0d8f...13c4dc8bb61d", - "DANGER_GITHUB_API_TOKEN" => "123sbdq54erfsd3422gdfio" - } -end - -# A stubbed out Dangerfile for use in tests -def testing_dangerfile - env = Danger::EnvironmentManager.new(testing_env) - Danger::Dangerfile.new(env, testing_ui) -end diff --git a/bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/spec/textlint_spec.rb b/bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/spec/textlint_spec.rb deleted file mode 100644 index e1c7b4e6..00000000 --- a/bundle/ruby/3.2.0/gems/danger-textlint-2.0.4/spec/textlint_spec.rb +++ /dev/null @@ -1,158 +0,0 @@ -require File.expand_path("spec_helper", __dir__) - -module Danger - describe "with Dangerfile" do - before do - @dangerfile = testing_dangerfile - @textlint = @dangerfile.textlint - - # stub - allow(Dir).to receive(:pwd).and_return("/Users/your/github/sample_repository") - allow(@textlint).to receive(:textlint_path).and_return("./node_modules/.bin/textlint") - allow(@textlint.git).to receive(:added_files).and_return([]) - allow(@textlint.git).to receive(:modified_files).and_return([]) - allow(@textlint.git).to receive(:deleted_files).and_return([]) - end - - let(:fixture) do - fixture_path = File.expand_path("fixtures/textlint_result.json", __dir__) - File.read(fixture_path) - end - - describe ".parse" do - let(:expect_message) do - "文末が\"。\"で終わっていません。(preset-ja-technical-writing/ja-no-mixed-period)" - end - - context "with default max_severity" do - subject(:errors) do - @textlint.send(:parse, fixture) - end - - it "has 6 errors" do - expect(errors.size).to eq(6) - end - - it "is mapped to be follow hash about index 0" do - expected = { - file_path: "articles/1.md", - line: 3, - severity: "fail", - message: expect_message - } - expect(errors[0]).to eq(expected) - end - end - - context "with .max_severity = 'warn'" do - subject(:errors) do - @textlint.max_severity = "warn" - @textlint.send(:parse, fixture) - end - - it "all errors severity are warn" do - expect(errors.all? { |error| error[:severity] == "warn" }).to be true - end - end - end - - describe ".lint" do - let(:expect_message) do - "文末が\"。\"で終わっていません。(preset-ja-technical-writing/ja-no-mixed-period)" - end - - # stub for simulate to run textlint - before do - allow(@textlint).to receive(:run_textlint).and_return fixture - allow(@textlint).to receive(:target_files).and_return [""] - end - - context "with default max_severity" do - before { @textlint.lint } - - it "status_report" do - status_report = @textlint.status_report - expect(status_report[:errors].size).to be > 0 - end - - it "violation_report" do - violation_report = @textlint.violation_report - expect(violation_report[:errors][0]).to eq( - Violation.new(expect_message, false, "articles/1.md", 3) - ) - end - end - - context "with .max_severity = 'warn'" do - before do - @textlint.max_severity = "warn" - @textlint.lint - end - - it "status_report" do - status_report = @textlint.status_report - expect(status_report[:errors].size).to eq(0) - expect(status_report[:warnings].size).to be > 0 - end - - it "violation_report" do - violation_report = @textlint.violation_report - expect(violation_report[:errors].size).to eq(0) - expect(violation_report[:warnings][0]).to eq( - Violation.new(expect_message, false, "articles/1.md", 3) - ) - end - end - - context "with .max_comment_num = 5" do - let(:max_comment_num) { 5 } - before do - @textlint.max_comment_num = max_comment_num - @textlint.lint - end - - it "status_report" do - status_report = @textlint.status_report - expect(status_report[:errors].size).to eq(max_comment_num) - end - - it "violation_report" do - violation_report = @textlint.violation_report - expect(violation_report[:errors].size).to eq(max_comment_num) - end - - it "danger comment" do - # find not inline comment - comment = @textlint.violation_report[:warnings].find do |warning| - warning.message.match(/Textlint reported more than/) - end - - expect(comment).not_to be_nil - end - end - end - - describe ".target_files" do - let(:file1) { "articles/1.md" } - let(:file2) { "articles/2.md" } - let(:file3) { "articles/3.md" } - - before do - allow(@textlint.git).to receive(:added_files).and_return([file1]) - allow(@textlint.git).to receive(:modified_files).and_return([file2]) - end - - it "are add and modified files only" do - allow(@textlint.git).to receive(:deleted_files).and_return([]) - - expect(@textlint.send(:target_files)).to match_array([file1, file2]) - end - - it "are also include removed file" do - allow(@textlint.git).to receive(:deleted_files).and_return([file3]) - - expect(@textlint.send(:target_files)).to match_array([file1, file2]) - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/CHANGELOG.md b/bundle/ruby/3.2.0/gems/faraday-2.9.0/CHANGELOG.md deleted file mode 100644 index c9bc56f9..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/CHANGELOG.md +++ /dev/null @@ -1,574 +0,0 @@ -# Faraday Changelog - -## The changelog has moved! - -This file is not being updated anymore. Instead, please check the [Releases](https://github.com/lostisland/faraday/releases) page. - -## [2.2.0](https://github.com/lostisland/faraday/compare/v2.1.0...v2.2.0) (2022-02-03) - -* Reintroduce the possibility to register middleware with symbols, strings or procs in [#1391](https://github.com/lostisland/faraday/pull/1391) - -## [2.1.0](https://github.com/lostisland/faraday/compare/v2.0.1...v2.1.0) (2022-01-15) - -* Fix test adapter thread safety by @iMacTia in [#1380](https://github.com/lostisland/faraday/pull/1380) -* Add default adapter options by @hirasawayuki in [#1382](https://github.com/lostisland/faraday/pull/1382) -* CI: Add Ruby 3.1 to matrix by @petergoldstein in [#1374](https://github.com/lostisland/faraday/pull/1374) -* docs: fix regex pattern in logger.md examples by @hirasawayuki in [#1378](https://github.com/lostisland/faraday/pull/1378) - -## [2.0.1](https://github.com/lostisland/faraday/compare/v2.0.0...v2.0.1) (2022-01-05) - -* Re-add `faraday-net_http` as default adapter by @iMacTia in [#1366](https://github.com/lostisland/faraday/pull/1366) -* Updated sample format in UPGRADING.md by @vimutter in [#1361](https://github.com/lostisland/faraday/pull/1361) -* docs: Make UPGRADING examples more copyable by @olleolleolle in [#1363](https://github.com/lostisland/faraday/pull/1363) - -## [2.0.0](https://github.com/lostisland/faraday/compare/v1.8.0...v2.0.0) (2022-01-04) - -The next major release is here, and it comes almost 2 years after the release of v1.0! - -This release changes the way you use Faraday and embraces a new paradigm of Faraday as an ecosystem, rather than a library. - -What does that mean? It means that Faraday is less of a bundled tool and more of a framework for the community to build on top of. - -As a result, all adapters and some middleware have moved out and are now shipped as standalone gems 🙌! - -But this doesn't mean that upgrading from Faraday 1.x to Faraday 2.0 should be hard, in fact we've listed everything you need to do in the [UPGRADING.md](https://github.com/lostisland/faraday/blob/main/UPGRADING.md) doc. - -Moreover, we've setup a new [awesome-faraday](https://github.com/lostisland/awesome-faraday) repository that will showcase a curated list of adapters and middleware 😎. - -This release was the result of the efforts of the core team and all the contributors, new and old, that have helped achieve this milestone 👏. - -## What's Changed - -* Autoloading, dependency loading and middleware registry cleanup by @iMacTia in [#1301](https://github.com/lostisland/faraday/pull/1301) -* Move JSON middleware (request and response) from faraday_middleware by @iMacTia in [#1300](https://github.com/lostisland/faraday/pull/1300) -* Remove deprecated `Faraday::Request#method` by @olleolleolle in [#1303](https://github.com/lostisland/faraday/pull/1303) -* Remove deprecated `Faraday::UploadIO` by @iMacTia in [#1307](https://github.com/lostisland/faraday/pull/1307) -* [1.x] Deprecate Authorization helpers in `Faraday::Connection` by @iMacTia in [#1306](https://github.com/lostisland/faraday/pull/1306) -* Drop deprecated auth helpers from Connection and refactor auth middleware by @iMacTia in [#1308](https://github.com/lostisland/faraday/pull/1308) -* Add Faraday 1.x examples in authentication.md docs by @iMacTia in [#1320](https://github.com/lostisland/faraday/pull/1320) -* Fix passing a URL with embedded basic auth by @iMacTia in [#1324](https://github.com/lostisland/faraday/pull/1324) -* Register JSON middleware by @mollerhoj in [#1331](https://github.com/lostisland/faraday/pull/1331) -* Retry middleware should handle string exception class name consistently by @jrochkind in [#1334](https://github.com/lostisland/faraday/pull/1334) -* Improve request info in exceptions raised by RaiseError Middleware by @willianzocolau in [#1335](https://github.com/lostisland/faraday/pull/1335) -* Remove net-http adapter and update docs by @iMacTia in [#1336](https://github.com/lostisland/faraday/pull/1336) -* Explain plan for faraday_middleware in UPGRADING.md by @iMacTia in [#1339](https://github.com/lostisland/faraday/pull/1339) -* Scripts folder cleanup by @iMacTia in [#1340](https://github.com/lostisland/faraday/pull/1340) -* Replace `Hash#merge` with `Utils#deep_merge` for connection options by @xkwd in [#1343](https://github.com/lostisland/faraday/pull/1343) -* Callable authorizers by @sled in [#1345](https://github.com/lostisland/faraday/pull/1345) -* Default value for exc error by @DariuszMusielak in [#1351](https://github.com/lostisland/faraday/pull/1351) -* Don't call `retry_block` unless a retry is going to happen by @jrochkind in [#1350](https://github.com/lostisland/faraday/pull/1350) -* Improve documentation for v2 by @iMacTia in [#1353](https://github.com/lostisland/faraday/pull/1353) -* Remove default `default_adapter` (yes, you read that right) by @iMacTia in [#1354](https://github.com/lostisland/faraday/pull/1354) -* Remove retry middleware by @iMacTia in [#1356](https://github.com/lostisland/faraday/pull/1356) -* Remove multipart middleware and all its documentation and tests by @iMacTia in [#1357](https://github.com/lostisland/faraday/pull/1357) - -## [1.9.3](https://github.com/lostisland/faraday/compare/v1.9.2...v1.9.3) (2022-01-06) - -* Re-add support for Ruby 2.4+ by @iMacTia in [#1371](https://github.com/lostisland/faraday/pull/1371) - -## [1.9.2](https://github.com/lostisland/faraday/compare/v1.9.1...v1.9.2) (2022-01-06) - -* Add alias with legacy name to gemified middleware by @iMacTia in [#1372](https://github.com/lostisland/faraday/pull/1372) - -## [1.9.1](https://github.com/lostisland/faraday/compare/v1.9.0...v1.9.1) (2022-01-06) - -* Update adapter dependencies in Gemspec by @iMacTia in [#1370](https://github.com/lostisland/faraday/pull/1370) - -## [1.9.0](https://github.com/lostisland/faraday/compare/v1.8.0...v1.9.0) (2022-01-06) - -* Use external multipart and retry middleware by @iMacTia in [#1367](https://github.com/lostisland/faraday/pull/1367) - -## [1.8.0](https://github.com/lostisland/faraday/releases/tag/v1.8.0) (2021-09-18) - -### Features - -* Backport authorization procs (#1322, @jarl-dk) - -## [v1.7.0](https://github.com/lostisland/faraday/releases/tag/v1.7.0) (2021-08-09) - -### Features - -* Add strict_mode to Test::Stubs (#1298, @yykamei) - -## [v1.6.0](https://github.com/lostisland/faraday/releases/tag/v1.6.0) (2021-08-01) - -### Misc - -* Use external Rack adapter (#1296, @iMacTia) - -## [v1.5.1](https://github.com/lostisland/faraday/releases/tag/v1.5.1) (2021-07-11) - -### Fixes - -* Fix JRuby incompatibility after moving out EM adapters (#1294, @ahorek) - -### Documentation - -* Update YARD to follow RackBuilder (#1292, @kachick) - -## [v1.5.0](https://github.com/lostisland/faraday/releases/tag/v1.5.0) (2021-07-04) - -### Misc - -* Use external httpclient adapter (#1289, @iMacTia) -* Use external patron adapter (#1290, @iMacTia) - -## [v1.4.3](https://github.com/lostisland/faraday/releases/tag/v1.4.3) (2021-06-24) - -### Fixes - -* Silence warning (#1286, @gurgeous) -* Always dup url_prefix in Connection#build_exclusive_url (#1288, @alexeyds) - -## [v1.4.2](https://github.com/lostisland/faraday/releases/tag/v1.4.2) (2021-05-22) - -### Fixes -* Add proxy setting when url_prefix is changed (#1276, @ci) -* Default proxy scheme to http:// if necessary, fixes #1282 (#1283, @gurgeous) - -### Documentation -* Improve introduction page (#1273, @gurgeous) -* Docs: add more middleware examples (#1277, @gurgeous) - -### Misc -* Use external `em_http` and `em_synchrony` adapters (#1274, @iMacTia) - -## [v1.4.1](https://github.com/lostisland/faraday/releases/tag/v1.4.1) (2021-04-18) - -### Fixes - -* Fix dependencies from external adapter gems (#1269, @iMacTia) - -## [v1.4.0](https://github.com/lostisland/faraday/releases/tag/v1.4.0) (2021-04-16) - -### Highlights - -With this release, we continue the work of gradually moving out adapters into their own gems 🎉 -Thanks to @MikeRogers0 for helping the Faraday team in progressing with this quest 👏 - -And thanks to @olleolleolle efforts, Faraday is becoming more inclusive than ever 🤗 -Faraday's `master` branch has been renamed into `main`, we have an official policy on inclusive language and even a rubocop plugin to check for non-inclusive words ❤️! -Checkout the "Misc" section below for more details 🙌 ! - -### Fixes - -* Fix NoMethodError undefined method 'coverage' (#1255, @Maroo-b) - -### Documentation - -* Some docs on EventMachine adapters. (#1232, @damau) -* CONTRIBUTING: Fix grammar and layout (#1261, @olleolleolle) - -### Misc - -* Replacing Net::HTTP::Persistent with faraday-net_http_persistent (#1250, @MikeRogers0) -* CI: Configure the regenerated Coveralls token (#1256, @olleolleolle) -* Replace Excon adapter with Faraday::Excon gem, and fix autoloading issue with Faraday::NetHttpPersistent (#1257, @iMacTia) -* Drop CodeClimate (#1259, @olleolleolle) -* CI: Rename default branch to main (#1263, @olleolleolle) -* Drop RDoc support file .document (#1264, @olleolleolle, @iMacTia) -* CONTRIBUTING: add a policy on inclusive language (#1262, @olleolleolle) -* Add rubocop-inclusivity (#1267, @olleolleolle, @iMacTia) - -## [v1.3.1](https://github.com/lostisland/faraday/releases/tag/v1.3.1) (2021-04-16) - -### Fixes - -* Escape colon in path segment (#1237, @yarafan) -* Handle IPv6 address String on Faraday::Connection#proxy_from_env (#1252, @cosmo0920) - -### Documentation - -* Fix broken Rubydoc.info links (#1236, @nickcampbell18) -* Add httpx to list of external adapters (#1246, @HoneyryderChuck) - -### Misc - -* Refactor CI to remove duplicated line (#1230, @tricknotes) -* Gemspec: Pick a good ruby2_keywords release (#1241, @olleolleolle) - -## [v1.3.0](https://github.com/lostisland/faraday/releases/tag/v1.3.0) (2020-12-31) - -### Highlights -Faraday v1.3.0 is the first release to officially support Ruby 3.0 in the CI pipeline 🎉 🍾! - -This is also the first release with a previously "included" adapter (Net::HTTP) being isolated into a [separate gem](https://github.com/lostisland/faraday-net_http) 🎊! -The new adapter is added to Faraday as a dependency for now, so that means full backwards-compatibility, but just to be safe be careful when upgrading! - -This is a huge step towards are Faraday v2.0 objective of pushing adapters and middleware into separate gems. -Many thanks to the Faraday Team, @JanDintel and everyone who attended the [ROSS Conf remote event](https://www.rossconf.io/event/remote/) - -### Features - -* Improves consistency with Faraday::Error and Faraday::RaiseError (#1229, @qsona, @iMacTia) - -### Fixes - -* Don't assign to global ::Timer (#1227, @bpo) - -### Documentation - -* CHANGELOG: add releases after 1.0 (#1225, @olleolleolle) -* Improves retry middleware documentation. (#1228, @iMacTia) - -### Misc - -* Move out Net::HTTP adapter (#1222, @JanDintel, @iMacTia) -* Adds Ruby 3.0 to CI Matrix (#1226, @iMacTia) - - -## [v1.2.0](https://github.com/lostisland/faraday/releases/tag/v1.2.0) (2020-12-23) - -### Features - -* Introduces `on_request` and `on_complete` methods in `Faraday::Middleware`. (#1194, @iMacTia) - -### Fixes - -* Require 'date' to avoid retry exception (#1206, @rustygeldmacher) -* Fix rdebug recursion issue (#1205, @native-api) -* Update call to `em_http_ssl_patch` (#1202, @kylekeesling) -* `EmHttp` adapter: drop superfluous loaded? check (#1213, @olleolleolle) -* Avoid 1 use of keyword hackery (#1211, @grosser) -* Fix #1219 `Net::HTTP` still uses env proxy (#1221, @iMacTia) - -### Documentation - -* Add comment in gemspec to explain exposure of `examples` and `spec` folders. (#1192, @iMacTia) -* Adapters, how to create them (#1193, @olleolleolle) -* Update documentation on using the logger (#1196, @tijmenb) -* Adjust the retry documentation and spec to align with implementation (#1198, @nbeyer) - -### Misc - -* Test against ruby head (#1208, @grosser) - -## [v1.1.0](https://github.com/lostisland/faraday/releases/tag/v1.1.0) (2020-10-17) - -### Features - -* Makes parameters sorting configurable (#1162 @wishdev) -* Introduces `flat_encode` option for multipart adapter. (#1163 @iMacTia) -* Include request info in exceptions raised by RaiseError Middleware (#1181 @SandroDamilano) - -### Fixes - -* Avoid `last arg as keyword param` warning when building user middleware on Ruby 2.7 (#1153 @dgholz) -* Limits net-http-persistent version to < 4.0 (#1156 @iMacTia) -* Update `typhoeus` to new stable version (`1.4`) (#1159 @AlexWayfer) -* Properly fix test failure with Rack 2.1+. (#1171 @voxik) - -### Documentation - -* Improves documentation on how to contribute to the site by using Docker. (#1175 @iMacTia) -* Remove retry_change_requests from documentation (#1185 @stim371) - -### Misc - -* Link from GitHub Actions badge to CI workflow (#1141 @olleolleolle) -* Return tests of `Test` adapter (#1147 @AlexWayfer) -* Add 1.0 release to wording in CONTRIBUTING (#1155 @olleolleolle) -* Fix linting bumping Rubocop to 0.90.0 (#1182 @iMacTia) -* Drop `git ls-files` in gemspec (#1183 @utkarsh2102) -* Upgrade CI to ruby/setup-ruby (#1187 @gogainda) - -## [v1.0.1](https://github.com/lostisland/faraday/releases/tag/v1.0.1) (2020-03-29) - -### Fixes - -* Use Net::HTTP#start(&block) to ensure closed TCP connections (#1117) -* Fully qualify constants to be checked (#1122) -* Allows `parse` method to be private/protected in response middleware (#1123) -* Encode Spaces in Query Strings as '%20' Instead of '+' (#1125) -* Limits rack to v2.0.x (#1127) -* Adapter Registry reads also use mutex (#1136) - -### Documentation - -* Retry middleware documentation fix (#1109) -* Docs(retry): precise usage of retry-after (#1111) -* README: Link the logo to the website (#1112) -* Website: add search bar (#1116) -* Fix request/response mix-up in docs text (#1132) - -## [v1.0](https://github.com/lostisland/faraday/releases/tag/v1.0.0) (2020-01-22) - -Features: - -* Add #trace support to Faraday::Connection #861 (@technoweenie) -* Add the log formatter that is easy to override and safe to inherit #889 (@prikha) -* Support standalone adapters #941 (@iMacTia) -* Introduce Faraday::ConflictError for 409 response code #979 (@lucasmoreno) -* Add support for setting `read_timeout` option separately #1003 (@springerigor) -* Refactor and cleanup timeout settings across adapters #1022 (@technoweenie) -* Create ParamPart class to allow multipart posts with JSON content and file upload at the same time #1017 (@jeremy-israel) -* Copy UploadIO const -> FilePart for consistency with ParamPart #1018, #1021 (@technoweenie) -* Implement streaming responses in the Excon adapter #1026 (@technoweenie) -* Add default implementation of `Middleware#close`. #1069 (@ioquatix) -* Add `Adapter#close` so that derived classes can call super. #1091 (@ioquatix) -* Add log_level option to logger default formatter #1079 (@amrrbakry) -* Fix empty array for FlatParamsEncoder `{key: []} -> "key="` #1084 (@mrexox) - -Bugs: - -* Explicitly require date for DateTime library in Retry middleware #844 (@nickpresta) -* Refactor Adapter as final endpoints #846 (@iMacTia) -* Separate Request and Response bodies in Faraday::Env #847 (@iMacTia) -* Implement Faraday::Connection#options to make HTTP requests with the OPTIONS verb. #857 (@technoweenie) -* Multipart: Drop Ruby 1.8 String behavior compat #892 (@olleolleolle) -* Fix Ruby warnings in Faraday::Options.memoized #962 (@technoweenie) -* Allow setting min/max SSL version for a Net::HTTP::Persistent connection #972, #973 (@bdewater, @olleolleolle) -* Fix instances of frozen empty string literals #1040 (@BobbyMcWho) -* remove temp_proxy and improve proxy tests #1063 (@technoweenie) -* improve error initializer consistency #1095 (@technoweenie) - -Misc: - -* Convert minitest suite to RSpec #832 (@iMacTia, with help from @gaynetdinov, @Insti, @technoweenie) -* Major effort to update code to RuboCop standards. #854 (@olleolleolle, @iMacTia, @technoweenie, @htwroclau, @jherdman, @Drenmi, @Insti) -* Rubocop #1044, #1047 (@BobbyMcWho, @olleolleolle) -* Documentation tweaks (@adsteel, @Hubro, @iMacTia, @olleolleolle, @technoweenie) -* Update license year #981 (@Kevin-Kawai) -* Configure Jekyll plugin jekyll-remote-theme to support Docker usage #999 (@Lewiscowles1986) -* Fix Ruby 2.7 warnings #1009 (@tenderlove) -* Cleanup adapter connections #1023 (@technoweenie) -* Describe clearing cached stubs #1045 (@viraptor) -* Add project metadata to the gemspec #1046 (@orien) - -## v0.17.4 - -Fixes: - -* NetHttp adapter: wrap Errno::EADDRNOTAVAIL (#1114, @embs) -* Fix === for subclasses of deprecated classes (#1243, @mervync) - -## v0.17.3 - -Fixes: - -* Reverts changes in error classes hierarchy. #1092 (@iMacTia) -* Fix Ruby 1.9 syntax errors and improve Error class testing #1094 (@BanzaiMan, - @mrexox, @technoweenie) - -Misc: - -* Stops using `&Proc.new` for block forwarding. #1083 (@olleolleolle) -* Update CI to test against ruby 2.0-2.7 #1087, #1099 (@iMacTia, @olleolleolle, - @technoweenie) -* require FARADAY_DEPRECATE=warn to show Faraday v1.0 deprecation warnings - #1098 (@technoweenie) - -## v0.17.1 - -Final release before Faraday v1.0, with important fixes for Ruby 2.7. - -Fixes: - -* RaiseError response middleware raises exception if HTTP client returns a nil - status. #1042 (@jonnyom, @BobbyMcWho) - -Misc: - -* Fix Ruby 2.7 warnings (#1009) -* Add `Faraday::Deprecate` to warn about upcoming v1.0 changes. (#1054, #1059, - #1076, #1077) -* Add release notes up to current in CHANGELOG.md (#1066) -* Port minimal rspec suite from main branch to run backported tests. (#1058) - -## v0.17.0 - -This release is the same as v0.15.4. It was pushed to cover up releases -v0.16.0-v0.16.2. - -## v0.15.4 - -* Expose `pool_size` as a option for the NetHttpPersistent adapter (#834) - -## v0.15.3 - -* Make Faraday::Request serialisable with Marshal. (#803) -* Add DEFAULT_EXCEPTIONS constant to Request::Retry (#814) -* Add support for Ruby 2.6 Net::HTTP write_timeout (#824) - -## v0.15.2 - -* Prevents `Net::HTTP` adapters to retry request internally by setting `max_retries` to 0 if available (Ruby 2.5+). (#799) -* Fixes `NestedParamsEncoder` handling of empty array values (#801) - -## v0.15.1 - -* NetHttpPersistent adapter better reuse of SSL connections (#793) -* Refactor: inline cached_connection (#797) -* Logger middleware: use $stdout instead of STDOUT (#794) -* Fix: do not memoize/reuse Patron session (#796) - -Also in this release: - -* Allow setting min/max ssl version for Net::HTTP (#792) -* Allow setting min/max ssl version for Excon (#795) - -## v0.15.0 - -Features: - -* Added retry block option to retry middleware. (#770) -* Retry middleware improvements (honour Retry-After header, retry statuses) (#773) -* Improve response logger middleware output (#784) - -Fixes: - -* Remove unused class error (#767) -* Fix minor typo in README (#760) -* Reuse persistent connections when using net-http-persistent (#778) -* Fix Retry middleware documentation (#781) -* Returns the http response when giving up on retrying by status (#783) - -## v0.14.0 - -Features: - -* Allow overriding env proxy #754 (@iMacTia) -* Remove legacy Typhoeus adapter #715 (@olleolleolle) -* External Typhoeus Adapter Compatibility #748 (@iMacTia) -* Warn about missing adapter when making a request #743 (@antstorm) -* Faraday::Adapter::Test stubs now support entire urls (with host) #741 (@erik-escobedo) - -Fixes: - -* If proxy is manually provided, this takes priority over `find_proxy` #724 (@iMacTia) -* Fixes the behaviour for Excon's open_timeout (not setting write_timeout anymore) #731 (@apachelogger) -* Handle all connection timeout messages in Patron #687 (@stayhero) - -## v0.13.1 - -* Fixes an incompatibility with Addressable::URI being used as uri_parser - -## v0.13.0 - -Features: - -* Dynamically reloads the proxy when performing a request on an absolute domain (#701) -* Adapter support for Net::HTTP::Persistent v3.0.0 (#619) - -Fixes: - -* Prefer #hostname over #host. (#714) -* Fixes an edge-case issue with response headers parsing (missing HTTP header) (#719) - -## v0.12.2 - -* Parse headers from aggregated proxy requests/responses (#681) -* Guard against invalid middleware configuration with warning (#685) -* Do not use :insecure option by default in Patron (#691) -* Fixes an issue with HTTPClient not raising a `Faraday::ConnectionFailed` (#702) -* Fixes YAML serialization/deserialization for `Faraday::Utils::Headers` (#690) -* Fixes an issue with Options having a nil value (#694) -* Fixes an issue with Faraday.default_connection not using Faraday.default_connection_options (#698) -* Fixes an issue with Options.merge! and Faraday instrumentation middleware (#710) - -## v0.12.1 - -* Fix an issue with Patron tests failing on jruby -* Fix an issue with new `rewind_files` feature that was causing an exception when the body was not an Hash -* Expose wrapped_exception in all client errors -* Add Authentication Section to the ReadMe - -## v0.12.0.1 - -* Hotfix release to address an issue with TravisCI deploy on Rubygems - -## v0.12.0 - -Features: - -* Proxy feature now relies on Ruby `URI::Generic#find_proxy` and can use `no_proxy` ENV variable (not compatible with ruby < 2.0) -* Adds support for `context` request option to pass arbitrary information to middlewares - -Fixes: - -* Fix an issue with options that was causing new options to override defaults ones unexpectedly -* Rewind `UploadIO`s on retry to fix a compatibility issue -* Make multipart boundary unique -* Improvements in `README.md` - -## v0.11.0 - -Features: - -* Add `filter` method to Logger middleware -* Add support for Ruby2.4 and Minitest 6 -* Introduce block syntax to customise the adapter - -Fixes: - -* Fix an issue that was allowing to override `default_connection_options` from a connection instance -* Fix a bug that was causing newline escape characters ("\n") to be used when building the Authorization header - -## v0.10.1 - -- Fix an issue with HTTPClient adapter that was causing the SSL to be reset on every request -- Rescue `IOError` instead of specific subclass -- `Faraday::Utils::Headers` can now be successfully serialised in YAML -- Handle `default_connection_options` set with hash - -## v0.10.0 - -Breaking changes: -- Drop support for Ruby 1.8 - -Features: -- Include wrapped exception/reponse in ClientErrors -- Add `response.reason_phrase` -- Provide option to selectively skip logging request/response headers -- Add regex support for pattern matching in `test` adapter - -Fixes: -- Add `Faraday.respond_to?` to find methods managed by `method_missing` -- em-http: `request.host` instead of `connection.host` should be taken for SSL validations -- Allow `default_connection_options` to be merged when options are passed as url parameter -- Improve splitting key-value pairs in raw HTTP headers - -## v0.9.2 - -Adapters: -- Enable gzip compression for httpclient -- Fixes default certificate store for httpclient not having default paths. -- Make excon adapter compatible with 0.44 excon version -- Add compatibility with Patron 0.4.20 -- Determine default port numbers in Net::HTTP adapters (Addressable compatibility) -- em-http: wrap "connection closed by server" as ConnectionFailed type -- Wrap Errno::ETIMEDOUT in Faraday::Error::TimeoutError - -Utils: -- Add Rack-compatible support for parsing `a[][b]=c` nested queries -- Encode nil values in queries different than empty strings. Before: `a=`; now: `a`. -- Have `Faraday::Utils::Headers#replace` clear internal key cache -- Dup the internal key cache when a Headers hash is copied - -Env and middleware: -- Ensure `env` stored on middleware response has reference to the response -- Ensure that Response properties are initialized during `on_complete` (VCR compatibility) -- Copy request options in Faraday::Connection#dup -- Env custom members should be copied by Env.from(env) -- Honour per-request `request.options.params_encoder` -- Fix `interval_randomness` data type for Retry middleware -- Add maximum interval option for Retry middleware - -## v0.9.1 - -* Refactor Net:HTTP adapter so that with_net_http_connection can be overridden to allow pooled connections. (@Ben-M) -* Add configurable methods that bypass `retry_if` in the Retry request middleware. (@mike-bourgeous) - -## v0.9.0 - -* Add HTTPClient adapter (@hakanensari) -* Improve Retry handler (@mislav) -* Remove autoloading by default (@technoweenie) -* Improve internal docs (@technoweenie, @mislav) -* Respect user/password in http proxy string (@mislav) -* Adapter options are structs. Reinforces consistent options across adapters - (@technoweenie) -* Stop stripping trailing / off base URLs in a Faraday::Connection. (@technoweenie) -* Add a configurable URI parser. (@technoweenie) -* Remove need to manually autoload when using the authorization header helpers on `Faraday::Connection`. (@technoweenie) -* `Faraday::Adapter::Test` respects the `Faraday::RequestOptions#params_encoder` option. (@technoweenie) diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/LICENSE.md b/bundle/ruby/3.2.0/gems/faraday-2.9.0/LICENSE.md deleted file mode 100644 index 38776159..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/LICENSE.md +++ /dev/null @@ -1,20 +0,0 @@ -Copyright (c) 2009-2023 Rick Olson, Zack Hobson - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/README.md b/bundle/ruby/3.2.0/gems/faraday-2.9.0/README.md deleted file mode 100644 index 0cca6db8..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/README.md +++ /dev/null @@ -1,67 +0,0 @@ -# [![Faraday](./docs/_media/home-logo.svg)][website] - -[![Gem Version](https://badge.fury.io/rb/faraday.svg)](https://rubygems.org/gems/faraday) -[![GitHub Actions CI](https://github.com/lostisland/faraday/workflows/CI/badge.svg)](https://github.com/lostisland/faraday/actions?query=workflow%3ACI) -[![GitHub Discussions](https://img.shields.io/github/discussions/lostisland/faraday?logo=github)](https://github.com/lostisland/faraday/discussions) - -Faraday is an HTTP client library abstraction layer that provides a common interface over many -adapters (such as Net::HTTP) and embraces the concept of Rack middleware when processing the request/response cycle. -Take a look at [Awesome Faraday][awesome] for a list of available adapters and middleware. - -## Why use Faraday? - -Faraday gives you the power of Rack middleware for manipulating HTTP requests and responses, -making it easier to build sophisticated API clients or web service libraries that abstract away -the details of how HTTP requests are made. - -Faraday comes with a lot of features out of the box, such as: -* Support for multiple adapters (Net::HTTP, Typhoeus, Patron, Excon, HTTPClient, and more) -* Persistent connections (keep-alive) -* Parallel requests -* Automatic response parsing (JSON, XML, YAML) -* Customization of the request/response cycle with middleware -* Support for streaming responses -* Support for uploading files -* And much more! - -## Getting Started - -The best starting point is the [Faraday Website][website], with its introduction and explanation. - -Need more details? See the [Faraday API Documentation][apidoc] to see how it works internally, or take a look at [Advanced techniques for calling HTTP APIs in Ruby](https://mattbrictson.com/blog/advanced-http-techniques-in-ruby) blog post from [@mattbrictson](https://github.com/mattbrictson) 🚀 - -## Supported Ruby versions - -This library aims to support and is [tested against][actions] the currently officially supported Ruby -implementations. This means that, even without a major release, we could add or drop support for Ruby versions, -following their [EOL](https://endoflife.date/ruby). -Currently that means we support Ruby 3.0+ - -If something doesn't work on one of these Ruby versions, it's a bug. - -This library may inadvertently work (or seem to work) on other Ruby -implementations and versions, however support will only be provided for the versions listed -above. - -If you would like this library to support another Ruby version, you may -volunteer to be a maintainer. Being a maintainer entails making sure all tests -run and pass on that implementation. When something breaks on your -implementation, you will be responsible for providing patches in a timely -fashion. If critical issues for a particular implementation exist at the time -of a major release, support for that Ruby version may be dropped. - -## Contribute - -Do you want to contribute to Faraday? -Open the issues page and check for the `help wanted` label! -But before you start coding, please read our [Contributing Guide][contributing] - -## Copyright - -© 2009 - 2023, the Faraday Team. Website and branding design by [Elena Lo Piccolo](https://elelopic.design). - -[awesome]: https://github.com/lostisland/awesome-faraday/#adapters -[website]: https://lostisland.github.io/faraday -[contributing]: https://github.com/lostisland/faraday/blob/main/.github/CONTRIBUTING.md -[apidoc]: https://www.rubydoc.info/github/lostisland/faraday -[actions]: https://github.com/lostisland/faraday/actions diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/Rakefile b/bundle/ruby/3.2.0/gems/faraday-2.9.0/Rakefile deleted file mode 100644 index 4339ceee..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/Rakefile +++ /dev/null @@ -1,9 +0,0 @@ -# frozen_string_literal: true - -require 'rspec/core/rake_task' - -RSpec::Core::RakeTask.new(:spec) do |task| - task.ruby_opts = %w[-W] -end - -task default: :spec diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/examples/client_spec.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/examples/client_spec.rb deleted file mode 100644 index e30d86f7..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/examples/client_spec.rb +++ /dev/null @@ -1,119 +0,0 @@ -# frozen_string_literal: true - -# Requires Ruby with rspec and faraday gems. -# rspec client_spec.rb - -require 'faraday' -require 'json' - -# Example API client -class Client - def initialize(conn) - @conn = conn - end - - def httpbingo(jname, params: {}) - res = @conn.get("/#{jname}", params) - data = JSON.parse(res.body) - data['origin'] - end - - def foo(params) - res = @conn.post('/foo', JSON.dump(params)) - res.status - end -end - -RSpec.describe Client do - let(:stubs) { Faraday::Adapter::Test::Stubs.new } - let(:conn) { Faraday.new { |b| b.adapter(:test, stubs) } } - let(:client) { Client.new(conn) } - - it 'parses origin' do - stubs.get('/ip') do |env| - # optional: you can inspect the Faraday::Env - expect(env.url.path).to eq('/ip') - [ - 200, - { 'Content-Type': 'application/javascript' }, - '{"origin": "127.0.0.1"}' - ] - end - - # uncomment to trigger stubs.verify_stubbed_calls failure - # stubs.get('/unused') { [404, {}, ''] } - - expect(client.httpbingo('ip')).to eq('127.0.0.1') - stubs.verify_stubbed_calls - end - - it 'handles 404' do - stubs.get('/api') do - [ - 404, - { 'Content-Type': 'application/javascript' }, - '{}' - ] - end - expect(client.httpbingo('api')).to be_nil - stubs.verify_stubbed_calls - end - - it 'handles exception' do - stubs.get('/api') do - raise Faraday::ConnectionFailed - end - - expect { client.httpbingo('api') }.to raise_error(Faraday::ConnectionFailed) - stubs.verify_stubbed_calls - end - - context 'When the test stub is run in strict_mode' do - let(:stubs) { Faraday::Adapter::Test::Stubs.new(strict_mode: true) } - - it 'verifies the all parameter values are identical' do - stubs.get('/api?abc=123') do - [ - 200, - { 'Content-Type': 'application/javascript' }, - '{"origin": "127.0.0.1"}' - ] - end - - # uncomment to raise Stubs::NotFound - # expect(client.httpbingo('api', params: { abc: 123, foo: 'Kappa' })).to eq('127.0.0.1') - expect(client.httpbingo('api', params: { abc: 123 })).to eq('127.0.0.1') - stubs.verify_stubbed_calls - end - end - - context 'When the Faraday connection is configured with FlatParamsEncoder' do - let(:conn) { Faraday.new(request: { params_encoder: Faraday::FlatParamsEncoder }) { |b| b.adapter(:test, stubs) } } - - it 'handles the same multiple URL parameters' do - stubs.get('/api?a=x&a=y&a=z') { [200, { 'Content-Type' => 'application/json' }, '{"origin": "127.0.0.1"}'] } - - # uncomment to raise Stubs::NotFound - # expect(client.httpbingo('api', params: { a: %w[x y] })).to eq('127.0.0.1') - expect(client.httpbingo('api', params: { a: %w[x y z] })).to eq('127.0.0.1') - stubs.verify_stubbed_calls - end - end - - context 'When you want to test the body, you can use a proc as well as string' do - it 'tests with a string' do - stubs.post('/foo', '{"name":"YK"}') { [200, {}, ''] } - - expect(client.foo(name: 'YK')).to eq 200 - stubs.verify_stubbed_calls - end - - it 'tests with a proc' do - check = ->(request_body) { JSON.parse(request_body).slice('name') == { 'name' => 'YK' } } - stubs.post('/foo', check) { [200, {}, ''] } - - expect(client.foo(name: 'YK', created_at: Time.now)).to eq 200 - stubs.verify_stubbed_calls - end - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/examples/client_test.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/examples/client_test.rb deleted file mode 100644 index 3aad9576..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/examples/client_test.rb +++ /dev/null @@ -1,144 +0,0 @@ -# frozen_string_literal: true - -# Requires Ruby with test-unit and faraday gems. -# ruby client_test.rb - -require 'faraday' -require 'json' -require 'test/unit' - -# Example API client -class Client - def initialize(conn) - @conn = conn - end - - def httpbingo(jname, params: {}) - res = @conn.get("/#{jname}", params) - data = JSON.parse(res.body) - data['origin'] - end - - def foo(params) - res = @conn.post('/foo', JSON.dump(params)) - res.status - end -end - -# Example API client test -class ClientTest < Test::Unit::TestCase - def test_httpbingo_name - stubs = Faraday::Adapter::Test::Stubs.new - stubs.get('/api') do |env| - # optional: you can inspect the Faraday::Env - assert_equal '/api', env.url.path - [ - 200, - { 'Content-Type': 'application/javascript' }, - '{"origin": "127.0.0.1"}' - ] - end - - # uncomment to trigger stubs.verify_stubbed_calls failure - # stubs.get('/unused') { [404, {}, ''] } - - cli = client(stubs) - assert_equal '127.0.0.1', cli.httpbingo('api') - stubs.verify_stubbed_calls - end - - def test_httpbingo_not_found - stubs = Faraday::Adapter::Test::Stubs.new - stubs.get('/api') do - [ - 404, - { 'Content-Type': 'application/javascript' }, - '{}' - ] - end - - cli = client(stubs) - assert_nil cli.httpbingo('api') - stubs.verify_stubbed_calls - end - - def test_httpbingo_exception - stubs = Faraday::Adapter::Test::Stubs.new - stubs.get('/api') do - raise Faraday::ConnectionFailed - end - - cli = client(stubs) - assert_raise Faraday::ConnectionFailed do - cli.httpbingo('api') - end - stubs.verify_stubbed_calls - end - - def test_strict_mode - stubs = Faraday::Adapter::Test::Stubs.new(strict_mode: true) - stubs.get('/api?abc=123') do - [ - 200, - { 'Content-Type': 'application/javascript' }, - '{"origin": "127.0.0.1"}' - ] - end - - cli = client(stubs) - assert_equal '127.0.0.1', cli.httpbingo('api', params: { abc: 123 }) - - # uncomment to raise Stubs::NotFound - # assert_equal '127.0.0.1', cli.httpbingo('api', params: { abc: 123, foo: 'Kappa' }) - stubs.verify_stubbed_calls - end - - def test_non_default_params_encoder - stubs = Faraday::Adapter::Test::Stubs.new(strict_mode: true) - stubs.get('/api?a=x&a=y&a=z') do - [ - 200, - { 'Content-Type': 'application/javascript' }, - '{"origin": "127.0.0.1"}' - ] - end - conn = Faraday.new(request: { params_encoder: Faraday::FlatParamsEncoder }) do |builder| - builder.adapter :test, stubs - end - - cli = Client.new(conn) - assert_equal '127.0.0.1', cli.httpbingo('api', params: { a: %w[x y z] }) - - # uncomment to raise Stubs::NotFound - # assert_equal '127.0.0.1', cli.httpbingo('api', params: { a: %w[x y] }) - stubs.verify_stubbed_calls - end - - def test_with_string_body - stubs = Faraday::Adapter::Test::Stubs.new do |stub| - stub.post('/foo', '{"name":"YK"}') { [200, {}, ''] } - end - cli = client(stubs) - assert_equal 200, cli.foo(name: 'YK') - - stubs.verify_stubbed_calls - end - - def test_with_proc_body - stubs = Faraday::Adapter::Test::Stubs.new do |stub| - check = ->(request_body) { JSON.parse(request_body).slice('name') == { 'name' => 'YK' } } - stub.post('/foo', check) { [200, {}, ''] } - end - cli = client(stubs) - assert_equal 200, cli.foo(name: 'YK', created_at: Time.now) - - stubs.verify_stubbed_calls - end - - def client(stubs) - conn = Faraday.new do |builder| - builder.adapter :test, stubs - end - Client.new(conn) - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday.rb deleted file mode 100644 index 758a08de..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday.rb +++ /dev/null @@ -1,157 +0,0 @@ -# frozen_string_literal: true - -require 'cgi' -require 'date' -require 'set' -require 'forwardable' -require 'faraday/version' -require 'faraday/methods' -require 'faraday/error' -require 'faraday/middleware_registry' -require 'faraday/utils' -require 'faraday/options' -require 'faraday/connection' -require 'faraday/rack_builder' -require 'faraday/parameters' -require 'faraday/middleware' -require 'faraday/adapter' -require 'faraday/request' -require 'faraday/response' -require 'faraday/net_http' -# This is the main namespace for Faraday. -# -# It provides methods to create {Connection} objects, and HTTP-related -# methods to use directly. -# -# @example Helpful class methods for easy usage -# Faraday.get "http://faraday.com" -# -# @example Helpful class method `.new` to create {Connection} objects. -# conn = Faraday.new "http://faraday.com" -# conn.get '/' -# -module Faraday - CONTENT_TYPE = 'Content-Type' - - class << self - # The root path that Faraday is being loaded from. - # - # This is the root from where the libraries are auto-loaded. - # - # @return [String] - attr_accessor :root_path - - # Gets or sets the path that the Faraday libs are loaded from. - # @return [String] - attr_accessor :lib_path - - # @overload default_adapter - # Gets the Symbol key identifying a default Adapter to use - # for the default {Faraday::Connection}. Defaults to `:net_http`. - # @return [Symbol] the default adapter - # @overload default_adapter=(adapter) - # Updates default adapter while resetting {.default_connection}. - # @return [Symbol] the new default_adapter. - attr_reader :default_adapter - - # Option for the default_adapter - # @return [Hash] default_adapter options - attr_accessor :default_adapter_options - - # Documented below, see default_connection - attr_writer :default_connection - - # Tells Faraday to ignore the environment proxy (http_proxy). - # Defaults to `false`. - # @return [Boolean] - attr_accessor :ignore_env_proxy - - # Initializes a new {Connection}. - # - # @param url [String,Hash] The optional String base URL to use as a prefix - # for all requests. Can also be the options Hash. Any of these - # values will be set on every request made, unless overridden - # for a specific request. - # @param options [Hash] - # @option options [String] :url Base URL - # @option options [Hash] :params Hash of unencoded URI query params. - # @option options [Hash] :headers Hash of unencoded HTTP headers. - # @option options [Hash] :request Hash of request options. - # @option options [Hash] :ssl Hash of SSL options. - # @option options [Hash] :proxy Hash of Proxy options. - # @return [Faraday::Connection] - # - # @example With an URL argument - # Faraday.new 'http://faraday.com' - # # => Faraday::Connection to http://faraday.com - # - # @example With an URL argument and an options hash - # Faraday.new 'http://faraday.com', params: { page: 1 } - # # => Faraday::Connection to http://faraday.com?page=1 - # - # @example With everything in an options hash - # Faraday.new url: 'http://faraday.com', - # params: { page: 1 } - # # => Faraday::Connection to http://faraday.com?page=1 - def new(url = nil, options = {}, &block) - options = Utils.deep_merge(default_connection_options, options) - Faraday::Connection.new(url, options, &block) - end - - # Documented elsewhere, see default_adapter reader - def default_adapter=(adapter) - @default_connection = nil - @default_adapter = adapter - end - - def respond_to_missing?(symbol, include_private = false) - default_connection.respond_to?(symbol, include_private) || super - end - - # @overload default_connection - # Gets the default connection used for simple scripts. - # @return [Faraday::Connection] a connection configured with - # the default_adapter. - # @overload default_connection=(connection) - # @param connection [Faraday::Connection] - # Sets the default {Faraday::Connection} for simple scripts that - # access the Faraday constant directly, such as - # Faraday.get "https://faraday.com". - def default_connection - @default_connection ||= Connection.new(default_connection_options) - end - - # Gets the default connection options used when calling {Faraday#new}. - # - # @return [Faraday::ConnectionOptions] - def default_connection_options - @default_connection_options ||= ConnectionOptions.new - end - - # Sets the default options used when calling {Faraday#new}. - # - # @param options [Hash, Faraday::ConnectionOptions] - def default_connection_options=(options) - @default_connection = nil - @default_connection_options = ConnectionOptions.from(options) - end - - private - - # Internal: Proxies method calls on the Faraday constant to - # .default_connection. - def method_missing(name, *args, &block) - if default_connection.respond_to?(name) - default_connection.send(name, *args, &block) - else - super - end - end - end - - self.ignore_env_proxy = false - self.root_path = File.expand_path __dir__ - self.lib_path = File.expand_path 'faraday', __dir__ - self.default_adapter = :net_http - self.default_adapter_options = {} -end diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/adapter.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/adapter.rb deleted file mode 100644 index a581166c..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/adapter.rb +++ /dev/null @@ -1,101 +0,0 @@ -# frozen_string_literal: true - -module Faraday - # Base class for all Faraday adapters. Adapters are - # responsible for fulfilling a Faraday request. - class Adapter - extend MiddlewareRegistry - - CONTENT_LENGTH = 'Content-Length' - - # This module marks an Adapter as supporting parallel requests. - module Parallelism - attr_writer :supports_parallel - - def supports_parallel? - @supports_parallel - end - - def inherited(subclass) - super - subclass.supports_parallel = supports_parallel? - end - end - - extend Parallelism - self.supports_parallel = false - - def initialize(_app = nil, opts = {}, &block) - @app = ->(env) { env.response } - @connection_options = opts - @config_block = block - end - - # Yields or returns an adapter's configured connection. Depends on - # #build_connection being defined on this adapter. - # - # @param env [Faraday::Env, Hash] The env object for a faraday request. - # - # @return The return value of the given block, or the HTTP connection object - # if no block is given. - def connection(env) - conn = build_connection(env) - return conn unless block_given? - - yield conn - end - - # Close any persistent connections. The adapter should still be usable - # after calling close. - def close - # Possible implementation: - # @app.close if @app.respond_to?(:close) - end - - def call(env) - env.clear_body if env.needs_body? - env.response = Response.new - end - - private - - def save_response(env, status, body, headers = nil, reason_phrase = nil, finished: true) - env.status = status - env.body = body - env.reason_phrase = reason_phrase&.to_s&.strip - env.response_headers = Utils::Headers.new.tap do |response_headers| - response_headers.update headers unless headers.nil? - yield(response_headers) if block_given? - end - - env.response.finish(env) unless env.parallel? || !finished - env.response - end - - # Fetches either a read, write, or open timeout setting. Defaults to the - # :timeout value if a more specific one is not given. - # - # @param type [Symbol] Describes which timeout setting to get: :read, - # :write, or :open. - # @param options [Hash] Hash containing Symbol keys like :timeout, - # :read_timeout, :write_timeout, or :open_timeout - # - # @return [Integer, nil] Timeout duration in seconds, or nil if no timeout - # has been set. - def request_timeout(type, options) - key = TIMEOUT_KEYS.fetch(type) do - msg = "Expected :read, :write, :open. Got #{type.inspect} :(" - raise ArgumentError, msg - end - options[key] || options[:timeout] - end - - TIMEOUT_KEYS = { - read: :read_timeout, - open: :open_timeout, - write: :write_timeout - }.freeze - end -end - -require 'faraday/adapter/test' diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/adapter/test.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/adapter/test.rb deleted file mode 100644 index c637d139..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/adapter/test.rb +++ /dev/null @@ -1,311 +0,0 @@ -# frozen_string_literal: true - -require 'timeout' - -module Faraday - class Adapter - # @example - # test = Faraday::Connection.new do - # use Faraday::Adapter::Test do |stub| - # # Define matcher to match the request - # stub.get '/resource.json' do - # # return static content - # [200, {'Content-Type' => 'application/json'}, 'hi world'] - # end - # - # # response with content generated based on request - # stub.get '/showget' do |env| - # [200, {'Content-Type' => 'text/plain'}, env[:method].to_s] - # end - # - # # A regular expression can be used as matching filter - # stub.get /\A\/items\/(\d+)\z/ do |env, meta| - # # in case regular expression is used, an instance of MatchData - # # can be received - # [200, - # {'Content-Type' => 'text/plain'}, - # "showing item: #{meta[:match_data][1]}" - # ] - # end - # - # # Test the request body is the same as the stubbed body - # stub.post('/bar', 'name=YK&word=call') { [200, {}, ''] } - # - # # You can pass a proc as a stubbed body and check the request body in your way. - # # In this case, the proc should return true or false. - # stub.post('/foo', ->(request_body) do - # JSON.parse(request_body).slice('name') == { 'name' => 'YK' } }) { [200, {}, ''] - # end - # - # # You can set strict_mode to exactly match the stubbed requests. - # stub.strict_mode = true - # end - # end - # - # resp = test.get '/resource.json' - # resp.body # => 'hi world' - # - # resp = test.get '/showget' - # resp.body # => 'get' - # - # resp = test.get '/items/1' - # resp.body # => 'showing item: 1' - # - # resp = test.get '/items/2' - # resp.body # => 'showing item: 2' - # - # resp = test.post '/bar', 'name=YK&word=call' - # resp.status # => 200 - # - # resp = test.post '/foo', JSON.dump(name: 'YK', created_at: Time.now) - # resp.status # => 200 - class Test < Faraday::Adapter - attr_accessor :stubs - - # A stack of Stubs - class Stubs - class NotFound < StandardError - end - - def initialize(strict_mode: false) - # { get: [Stub, Stub] } - @stack = {} - @consumed = {} - @strict_mode = strict_mode - @stubs_mutex = Monitor.new - yield(self) if block_given? - end - - def empty? - @stack.empty? - end - - # @param env [Faraday::Env] - def match(env) - request_method = env[:method] - return false unless @stack.key?(request_method) - - stack = @stack[request_method] - consumed = (@consumed[request_method] ||= []) - - @stubs_mutex.synchronize do - stub, meta = matches?(stack, env) - if stub - removed = stack.delete(stub) - consumed << removed unless removed.nil? - return stub, meta - end - end - matches?(consumed, env) - end - - def get(path, headers = {}, &block) - new_stub(:get, path, headers, &block) - end - - def head(path, headers = {}, &block) - new_stub(:head, path, headers, &block) - end - - def post(path, body = nil, headers = {}, &block) - new_stub(:post, path, headers, body, &block) - end - - def put(path, body = nil, headers = {}, &block) - new_stub(:put, path, headers, body, &block) - end - - def patch(path, body = nil, headers = {}, &block) - new_stub(:patch, path, headers, body, &block) - end - - def delete(path, headers = {}, &block) - new_stub(:delete, path, headers, &block) - end - - def options(path, headers = {}, &block) - new_stub(:options, path, headers, &block) - end - - # Raises an error if any of the stubbed calls have not been made. - def verify_stubbed_calls - failed_stubs = [] - @stack.each do |method, stubs| - next if stubs.empty? - - failed_stubs.concat( - stubs.map do |stub| - "Expected #{method} #{stub}." - end - ) - end - raise failed_stubs.join(' ') unless failed_stubs.empty? - end - - # Set strict_mode. If the value is true, this adapter tries to find matched requests strictly, - # which means that all of a path, parameters, and headers must be the same as an actual request. - def strict_mode=(value) - @strict_mode = value - @stack.each_value do |stubs| - stubs.each do |stub| - stub.strict_mode = value - end - end - end - - protected - - def new_stub(request_method, path, headers = {}, body = nil, &block) - normalized_path, host = - if path.is_a?(Regexp) - path - else - [ - Faraday::Utils.normalize_path(path), - Faraday::Utils.URI(path).host - ] - end - path, query = normalized_path.respond_to?(:split) ? normalized_path.split('?') : normalized_path - headers = Utils::Headers.new(headers) - - stub = Stub.new(host, path, query, headers, body, @strict_mode, block) - (@stack[request_method] ||= []) << stub - end - - # @param stack [Hash] - # @param env [Faraday::Env] - def matches?(stack, env) - stack.each do |stub| - match_result, meta = stub.matches?(env) - return stub, meta if match_result - end - nil - end - end - - # Stub request - Stub = Struct.new(:host, :path, :query, :headers, :body, :strict_mode, :block) do - # @param env [Faraday::Env] - def matches?(env) - request_host = env[:url].host - request_path = Faraday::Utils.normalize_path(env[:url].path) - request_headers = env.request_headers - request_body = env[:body] - - # meta is a hash used as carrier - # that will be yielded to consumer block - meta = {} - [(host.nil? || host == request_host) && - path_match?(request_path, meta) && - params_match?(env) && - body_match?(request_body) && - headers_match?(request_headers), meta] - end - - def path_match?(request_path, meta) - if path.is_a?(Regexp) - !!(meta[:match_data] = path.match(request_path)) - else - path == request_path - end - end - - # @param env [Faraday::Env] - def params_match?(env) - request_params = env[:params] - params = env.params_encoder.decode(query) || {} - - if strict_mode - return Set.new(params) == Set.new(request_params) - end - - params.keys.all? do |key| - request_params[key] == params[key] - end - end - - def headers_match?(request_headers) - if strict_mode - headers_with_user_agent = headers.dup.tap do |hs| - # NOTE: Set User-Agent in case it's not set when creating Stubs. - # Users would not want to set Faraday's User-Agent explicitly. - hs[:user_agent] ||= Connection::USER_AGENT - end - return Set.new(headers_with_user_agent) == Set.new(request_headers) - end - - headers.keys.all? do |key| - request_headers[key] == headers[key] - end - end - - def body_match?(request_body) - return true if body.to_s.empty? - - case body - when Proc - body.call(request_body) - else - request_body == body - end - end - - def to_s - "#{path} #{body}" - end - end - - def initialize(app, stubs = nil, &block) - super(app) - @stubs = stubs || Stubs.new - configure(&block) if block - end - - def configure - yield(stubs) - end - - # @param env [Faraday::Env] - def call(env) - super - - env.request.params_encoder ||= Faraday::Utils.default_params_encoder - env[:params] = env.params_encoder.decode(env[:url].query) || {} - stub, meta = stubs.match(env) - - unless stub - raise Stubs::NotFound, "no stubbed request for #{env[:method]} " \ - "#{env[:url]} #{env[:body]} #{env[:headers]}" - end - - block_arity = stub.block.arity - params = if block_arity >= 0 - [env, meta].take(block_arity) - else - [env, meta] - end - - timeout = request_timeout(:open, env[:request]) - timeout ||= request_timeout(:read, env[:request]) - - status, headers, body = - if timeout - ::Timeout.timeout(timeout, Faraday::TimeoutError) do - stub.block.call(*params) - end - else - stub.block.call(*params) - end - - # We need to explicitly pass `reason_phrase = nil` here to avoid keyword args conflicts. - # See https://github.com/lostisland/faraday/issues/1444 - # TODO: remove `nil` explicit reason_phrase once Ruby 3.0 becomes minimum req. version - save_response(env, status, body, headers, nil) - - @app.call(env) - end - end - end -end - -Faraday::Adapter.register_middleware(test: Faraday::Adapter::Test) diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/adapter_registry.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/adapter_registry.rb deleted file mode 100644 index 1cd1e7e1..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/adapter_registry.rb +++ /dev/null @@ -1,30 +0,0 @@ -# frozen_string_literal: true - -require 'monitor' - -module Faraday - # AdapterRegistry registers adapter class names so they can be looked up by a - # String or Symbol name. - class AdapterRegistry - def initialize - @lock = Monitor.new - @constants = {} - end - - def get(name) - klass = @lock.synchronize do - @constants[name] - end - return klass if klass - - Object.const_get(name).tap { |c| set(c, name) } - end - - def set(klass, name = nil) - name ||= klass.to_s - @lock.synchronize do - @constants[name] = klass - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/connection.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/connection.rb deleted file mode 100644 index 0196945e..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/connection.rb +++ /dev/null @@ -1,555 +0,0 @@ -# frozen_string_literal: true - -module Faraday - # Connection objects manage the default properties and the middleware - # stack for fulfilling an HTTP request. - # - # @example - # - # conn = Faraday::Connection.new 'http://httpbingo.org' - # - # # GET http://httpbingo.org/nigiri - # conn.get 'nigiri' - # # => # - # - class Connection - # A Set of allowed HTTP verbs. - METHODS = Set.new %i[get post put delete head patch options trace] - USER_AGENT = "Faraday v#{VERSION}".freeze - - # @return [Hash] URI query unencoded key/value pairs. - attr_reader :params - - # @return [Hash] unencoded HTTP header key/value pairs. - attr_reader :headers - - # @return [String] a URI with the prefix used for all requests from this - # Connection. This includes a default host name, scheme, port, and path. - attr_reader :url_prefix - - # @return [Faraday::RackBuilder] Builder for this Connection. - attr_reader :builder - - # @return [Hash] SSL options. - attr_reader :ssl - - # @return [Object] the parallel manager for this Connection. - attr_reader :parallel_manager - - # Sets the default parallel manager for this connection. - attr_writer :default_parallel_manager - - # @return [Hash] proxy options. - attr_reader :proxy - - # Initializes a new Faraday::Connection. - # - # @param url [URI, String] URI or String base URL to use as a prefix for all - # requests (optional). - # @param options [Hash, Faraday::ConnectionOptions] - # @option options [URI, String] :url ('http:/') URI or String base URL - # @option options [Hash String>] :params URI query unencoded - # key/value pairs. - # @option options [Hash String>] :headers Hash of unencoded HTTP - # header key/value pairs. - # @option options [Hash] :request Hash of request options. - # @option options [Hash] :ssl Hash of SSL options. - # @option options [Hash, URI, String] :proxy proxy options, either as a URL - # or as a Hash - # @option options [URI, String] :proxy[:uri] - # @option options [String] :proxy[:user] - # @option options [String] :proxy[:password] - # @yield [self] after all setup has been done - def initialize(url = nil, options = nil) - options = ConnectionOptions.from(options) - - if url.is_a?(Hash) || url.is_a?(ConnectionOptions) - options = Utils.deep_merge(options, url) - url = options.url - end - - @parallel_manager = nil - @headers = Utils::Headers.new - @params = Utils::ParamsHash.new - @options = options.request - @ssl = options.ssl - @default_parallel_manager = options.parallel_manager - @manual_proxy = nil - - @builder = options.builder || begin - # pass an empty block to Builder so it doesn't assume default middleware - options.new_builder(block_given? ? proc { |b| } : nil) - end - - self.url_prefix = url || 'http:/' - - @params.update(options.params) if options.params - @headers.update(options.headers) if options.headers - - initialize_proxy(url, options) - - yield(self) if block_given? - - @headers[:user_agent] ||= USER_AGENT - end - - def initialize_proxy(url, options) - @manual_proxy = !!options.proxy - @proxy = - if options.proxy - ProxyOptions.from(options.proxy) - else - proxy_from_env(url) - end - end - - # Sets the Hash of URI query unencoded key/value pairs. - # @param hash [Hash] - def params=(hash) - @params.replace hash - end - - # Sets the Hash of unencoded HTTP header key/value pairs. - # @param hash [Hash] - def headers=(hash) - @headers.replace hash - end - - extend Forwardable - - def_delegators :builder, :use, :request, :response, :adapter, :app - - # Closes the underlying resources and/or connections. In the case of - # persistent connections, this closes all currently open connections - # but does not prevent new connections from being made. - def close - app.close - end - - # @!method get(url = nil, params = nil, headers = nil) - # Makes a GET HTTP request without a body. - # @!scope class - # - # @param url [String, URI, nil] The optional String base URL to use as a prefix for - # all requests. Can also be the options Hash. - # @param params [Hash, nil] Hash of URI query unencoded key/value pairs. - # @param headers [Hash, nil] unencoded HTTP header key/value pairs. - # - # @example - # conn.get '/items', { page: 1 }, :accept => 'application/json' - # - # # ElasticSearch example sending a body with GET. - # conn.get '/twitter/tweet/_search' do |req| - # req.headers[:content_type] = 'application/json' - # req.params[:routing] = 'kimchy' - # req.body = JSON.generate(query: {...}) - # end - # - # @yield [Faraday::Request] for further request customizations - # @return [Faraday::Response] - - # @!method head(url = nil, params = nil, headers = nil) - # Makes a HEAD HTTP request without a body. - # @!scope class - # - # @param url [String, URI, nil] The optional String base URL to use as a prefix for - # all requests. Can also be the options Hash. - # @param params [Hash, nil] Hash of URI query unencoded key/value pairs. - # @param headers [Hash, nil] unencoded HTTP header key/value pairs. - # - # @example - # conn.head '/items/1' - # - # @yield [Faraday::Request] for further request customizations - # @return [Faraday::Response] - - # @!method delete(url = nil, params = nil, headers = nil) - # Makes a DELETE HTTP request without a body. - # @!scope class - # - # @param url [String, URI, nil] The optional String base URL to use as a prefix for - # all requests. Can also be the options Hash. - # @param params [Hash, nil] Hash of URI query unencoded key/value pairs. - # @param headers [Hash, nil] unencoded HTTP header key/value pairs. - # - # @example - # conn.delete '/items/1' - # - # @yield [Faraday::Request] for further request customizations - # @return [Faraday::Response] - - # @!method trace(url = nil, params = nil, headers = nil) - # Makes a TRACE HTTP request without a body. - # @!scope class - # - # @param url [String, URI, nil] The optional String base URL to use as a prefix for - # all requests. Can also be the options Hash. - # @param params [Hash, nil] Hash of URI query unencoded key/value pairs. - # @param headers [Hash, nil] unencoded HTTP header key/value pairs. - # - # @example - # conn.connect '/items/1' - # - # @yield [Faraday::Request] for further request customizations - # @return [Faraday::Response] - - # @!visibility private - METHODS_WITH_QUERY.each do |method| - class_eval <<-RUBY, __FILE__, __LINE__ + 1 - def #{method}(url = nil, params = nil, headers = nil) - run_request(:#{method}, url, nil, headers) do |request| - request.params.update(params) if params - yield request if block_given? - end - end - RUBY - end - - # @overload options() - # Returns current Connection options. - # - # @overload options(url, params = nil, headers = nil) - # Makes an OPTIONS HTTP request to the given URL. - # @param url [String, URI, nil] String base URL to sue as a prefix for all requests. - # @param params [Hash, nil] Hash of URI query unencoded key/value pairs. - # @param headers [Hash, nil] unencoded HTTP header key/value pairs. - # - # @example - # conn.options '/items/1' - # - # @yield [Faraday::Request] for further request customizations - # @return [Faraday::Response] - def options(*args) - return @options if args.empty? - - url, params, headers = *args - run_request(:options, url, nil, headers) do |request| - request.params.update(params) if params - yield request if block_given? - end - end - - # @!method post(url = nil, body = nil, headers = nil) - # Makes a POST HTTP request with a body. - # @!scope class - # - # @param url [String, URI, nil] The optional String base URL to use as a prefix for - # all requests. Can also be the options Hash. - # @param body [String, nil] body for the request. - # @param headers [Hash, nil] unencoded HTTP header key/value pairs. - # - # @example - # conn.post '/items', data, content_type: 'application/json' - # - # # Simple ElasticSearch indexing sample. - # conn.post '/twitter/tweet' do |req| - # req.headers[:content_type] = 'application/json' - # req.params[:routing] = 'kimchy' - # req.body = JSON.generate(user: 'kimchy', ...) - # end - # - # @yield [Faraday::Request] for further request customizations - # @return [Faraday::Response] - - # @!method put(url = nil, body = nil, headers = nil) - # Makes a PUT HTTP request with a body. - # @!scope class - # - # @param url [String, URI, nil] The optional String base URL to use as a prefix for - # all requests. Can also be the options Hash. - # @param body [String, nil] body for the request. - # @param headers [Hash, nil] unencoded HTTP header key/value pairs. - # - # @example - # conn.put '/products/123', data, content_type: 'application/json' - # - # # Star a gist. - # conn.put 'https://api.github.com/gists/GIST_ID/star' do |req| - # req.headers['Accept'] = 'application/vnd.github+json' - # req.headers['Authorization'] = 'Bearer ' - # req.headers['X-GitHub-Api-Version'] = '2022-11-28' - # end - # - # @yield [Faraday::Request] for further request customizations - # @return [Faraday::Response] - - # @!visibility private - METHODS_WITH_BODY.each do |method| - class_eval <<-RUBY, __FILE__, __LINE__ + 1 - def #{method}(url = nil, body = nil, headers = nil, &block) - run_request(:#{method}, url, body, headers, &block) - end - RUBY - end - - # Check if the adapter is parallel-capable. - # - # @yield if the adapter isn't parallel-capable, or if no adapter is set yet. - # - # @return [Object, nil] a parallel manager or nil if yielded - # @api private - def default_parallel_manager - @default_parallel_manager ||= begin - adapter = @builder.adapter.klass if @builder.adapter - - if support_parallel?(adapter) - adapter.setup_parallel_manager - elsif block_given? - yield - end - end - end - - # Determine if this Faraday::Connection can make parallel requests. - # - # @return [Boolean] - def in_parallel? - !!@parallel_manager - end - - # Sets up the parallel manager to make a set of requests. - # - # @param manager [Object] The parallel manager that this Connection's - # Adapter uses. - # - # @yield a block to execute multiple requests. - # @return [void] - def in_parallel(manager = nil) - @parallel_manager = manager || default_parallel_manager do - warn 'Warning: `in_parallel` called but no parallel-capable adapter ' \ - 'on Faraday stack' - warn caller[2, 10].join("\n") - nil - end - yield - @parallel_manager&.run - ensure - @parallel_manager = nil - end - - # Sets the Hash proxy options. - # - # @param new_value [Object] - def proxy=(new_value) - @manual_proxy = true - @proxy = new_value ? ProxyOptions.from(new_value) : nil - end - - def_delegators :url_prefix, :scheme, :scheme=, :host, :host=, :port, :port= - def_delegator :url_prefix, :path, :path_prefix - - # Parses the given URL with URI and stores the individual - # components in this connection. These components serve as defaults for - # requests made by this connection. - # - # @param url [String, URI] - # @param encoder [Object] - # - # @example - # - # conn = Faraday::Connection.new { ... } - # conn.url_prefix = "https://httpbingo.org/api" - # conn.scheme # => https - # conn.path_prefix # => "/api" - # - # conn.get("nigiri?page=2") # accesses https://httpbingo.org/api/nigiri - def url_prefix=(url, encoder = nil) - uri = @url_prefix = Utils.URI(url) - self.path_prefix = uri.path - - params.merge_query(uri.query, encoder) - uri.query = nil - - with_uri_credentials(uri) do |user, password| - set_basic_auth(user, password) - uri.user = uri.password = nil - end - - @proxy = proxy_from_env(url) unless @manual_proxy - end - - def set_basic_auth(user, password) - header = Faraday::Utils.basic_header_from(user, password) - headers[Faraday::Request::Authorization::KEY] = header - end - - # Sets the path prefix and ensures that it always has a leading - # slash. - # - # @param value [String] - # - # @return [String] the new path prefix - def path_prefix=(value) - url_prefix.path = if value - value = "/#{value}" unless value[0, 1] == '/' - value - end - end - - # Takes a relative url for a request and combines it with the defaults - # set on the connection instance. - # - # @param url [String, URI, nil] - # @param extra_params [Hash] - # - # @example - # conn = Faraday::Connection.new { ... } - # conn.url_prefix = "https://httpbingo.org/api?token=abc" - # conn.scheme # => https - # conn.path_prefix # => "/api" - # - # conn.build_url("nigiri?page=2") - # # => https://httpbingo.org/api/nigiri?token=abc&page=2 - # - # conn.build_url("nigiri", page: 2) - # # => https://httpbingo.org/api/nigiri?token=abc&page=2 - # - def build_url(url = nil, extra_params = nil) - uri = build_exclusive_url(url) - - query_values = params.dup.merge_query(uri.query, options.params_encoder) - query_values.update(extra_params) if extra_params - uri.query = - if query_values.empty? - nil - else - query_values.to_query(options.params_encoder) - end - - uri - end - - # Builds and runs the Faraday::Request. - # - # @param method [Symbol] HTTP method. - # @param url [String, URI, nil] String or URI to access. - # @param body [String, nil] The request body that will eventually be converted to - # a string. - # @param headers [Hash, nil] unencoded HTTP header key/value pairs. - # - # @return [Faraday::Response] - def run_request(method, url, body, headers) - unless METHODS.include?(method) - raise ArgumentError, "unknown http method: #{method}" - end - - request = build_request(method) do |req| - req.options.proxy = proxy_for_request(url) - req.url(url) if url - req.headers.update(headers) if headers - req.body = body if body - yield(req) if block_given? - end - - builder.build_response(self, request) - end - - # Creates and configures the request object. - # - # @param method [Symbol] - # - # @yield [Faraday::Request] if block given - # @return [Faraday::Request] - def build_request(method) - Request.create(method) do |req| - req.params = params.dup - req.headers = headers.dup - req.options = options.dup - yield(req) if block_given? - end - end - - # Build an absolute URL based on url_prefix. - # - # @param url [String, URI, nil] - # @param params [Faraday::Utils::ParamsHash] A Faraday::Utils::ParamsHash to - # replace the query values - # of the resulting url (default: nil). - # - # @return [URI] - def build_exclusive_url(url = nil, params = nil, params_encoder = nil) - url = nil if url.respond_to?(:empty?) && url.empty? - base = url_prefix.dup - if url && !base.path.end_with?('/') - base.path = "#{base.path}/" # ensure trailing slash - end - url = url.to_s.gsub(':', '%3A') if URI.parse(url.to_s).opaque - uri = url ? base + url : base - if params - uri.query = params.to_query(params_encoder || options.params_encoder) - end - uri.query = nil if uri.query && uri.query.empty? - uri - end - - # Creates a duplicate of this Faraday::Connection. - # - # @api private - # - # @return [Faraday::Connection] - def dup - self.class.new(build_exclusive_url, - headers: headers.dup, - params: params.dup, - builder: builder.dup, - ssl: ssl.dup, - request: options.dup) - end - - # Yields username and password extracted from a URI if they both exist. - # - # @param uri [URI] - # @yield [username, password] any username and password - # @yieldparam username [String] any username from URI - # @yieldparam password [String] any password from URI - # @return [void] - # @api private - def with_uri_credentials(uri) - return unless uri.user && uri.password - - yield(Utils.unescape(uri.user), Utils.unescape(uri.password)) - end - - def proxy_from_env(url) - return if Faraday.ignore_env_proxy - - uri = nil - case url - when String - uri = Utils.URI(url) - uri = if uri.host.nil? - find_default_proxy - else - URI.parse("#{uri.scheme}://#{uri.host}").find_proxy - end - when URI - uri = url.find_proxy - when nil - uri = find_default_proxy - end - ProxyOptions.from(uri) if uri - end - - def find_default_proxy - uri = ENV.fetch('http_proxy', nil) - return unless uri && !uri.empty? - - uri = "http://#{uri}" unless uri.match?(/^http/i) - uri - end - - def proxy_for_request(url) - return proxy if @manual_proxy - - if url && Utils.URI(url).absolute? - proxy_from_env(url) - else - proxy - end - end - - def support_parallel?(adapter) - adapter.respond_to?(:supports_parallel?) && adapter&.supports_parallel? - end - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/encoders/flat_params_encoder.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/encoders/flat_params_encoder.rb deleted file mode 100644 index bc10c8b9..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/encoders/flat_params_encoder.rb +++ /dev/null @@ -1,105 +0,0 @@ -# frozen_string_literal: true - -module Faraday - # FlatParamsEncoder manages URI params as a flat hash. Any Array values repeat - # the parameter multiple times. - module FlatParamsEncoder - class << self - extend Forwardable - def_delegators :'Faraday::Utils', :escape, :unescape - end - - # Encode converts the given param into a URI querystring. Keys and values - # will converted to strings and appropriately escaped for the URI. - # - # @param params [Hash] query arguments to convert. - # - # @example - # - # encode({a: %w[one two three], b: true, c: "C"}) - # # => 'a=one&a=two&a=three&b=true&c=C' - # - # @return [String] the URI querystring (without the leading '?') - def self.encode(params) - return nil if params.nil? - - unless params.is_a?(Array) - unless params.respond_to?(:to_hash) - raise TypeError, - "Can't convert #{params.class} into Hash." - end - params = params.to_hash - params = params.map do |key, value| - key = key.to_s if key.is_a?(Symbol) - [key, value] - end - - # Only to be used for non-Array inputs. Arrays should preserve order. - params.sort! if @sort_params - end - - # The params have form [['key1', 'value1'], ['key2', 'value2']]. - buffer = +'' - params.each do |key, value| - encoded_key = escape(key) - if value.nil? - buffer << "#{encoded_key}&" - elsif value.is_a?(Array) - if value.empty? - buffer << "#{encoded_key}=&" - else - value.each do |sub_value| - encoded_value = escape(sub_value) - buffer << "#{encoded_key}=#{encoded_value}&" - end - end - else - encoded_value = escape(value) - buffer << "#{encoded_key}=#{encoded_value}&" - end - end - buffer.chop - end - - # Decode converts the given URI querystring into a hash. - # - # @param query [String] query arguments to parse. - # - # @example - # - # decode('a=one&a=two&a=three&b=true&c=C') - # # => {"a"=>["one", "two", "three"], "b"=>"true", "c"=>"C"} - # - # @return [Hash] parsed keys and value strings from the querystring. - def self.decode(query) - return nil if query.nil? - - empty_accumulator = {} - - split_query = (query.split('&').map do |pair| - pair.split('=', 2) if pair && !pair.empty? - end).compact - split_query.each_with_object(empty_accumulator.dup) do |pair, accu| - pair[0] = unescape(pair[0]) - pair[1] = true if pair[1].nil? - if pair[1].respond_to?(:to_str) - pair[1] = unescape(pair[1].to_str.tr('+', ' ')) - end - if accu[pair[0]].is_a?(Array) - accu[pair[0]] << pair[1] - elsif accu[pair[0]] - accu[pair[0]] = [accu[pair[0]], pair[1]] - else - accu[pair[0]] = pair[1] - end - end - end - - class << self - attr_accessor :sort_params - end - - # Useful default for OAuth and caching. - @sort_params = true - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/encoders/nested_params_encoder.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/encoders/nested_params_encoder.rb deleted file mode 100644 index 3ca3e73e..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/encoders/nested_params_encoder.rb +++ /dev/null @@ -1,183 +0,0 @@ -# frozen_string_literal: true - -module Faraday - # Sub-module for encoding parameters into query-string. - module EncodeMethods - # @param params [nil, Array, #to_hash] parameters to be encoded - # - # @return [String] the encoded params - # - # @raise [TypeError] if params can not be converted to a Hash - def encode(params) - return nil if params.nil? - - unless params.is_a?(Array) - unless params.respond_to?(:to_hash) - raise TypeError, "Can't convert #{params.class} into Hash." - end - - params = params.to_hash - params = params.map do |key, value| - key = key.to_s if key.is_a?(Symbol) - [key, value] - end - - # Only to be used for non-Array inputs. Arrays should preserve order. - params.sort! if @sort_params - end - - # The params have form [['key1', 'value1'], ['key2', 'value2']]. - buffer = +'' - params.each do |parent, value| - encoded_parent = escape(parent) - buffer << "#{encode_pair(encoded_parent, value)}&" - end - buffer.chop - end - - protected - - def encode_pair(parent, value) - if value.is_a?(Hash) - encode_hash(parent, value) - elsif value.is_a?(Array) - encode_array(parent, value) - elsif value.nil? - parent - else - encoded_value = escape(value) - "#{parent}=#{encoded_value}" - end - end - - def encode_hash(parent, value) - value = value.map { |key, val| [escape(key), val] }.sort - - buffer = +'' - value.each do |key, val| - new_parent = "#{parent}%5B#{key}%5D" - buffer << "#{encode_pair(new_parent, val)}&" - end - buffer.chop - end - - def encode_array(parent, value) - return "#{parent}%5B%5D" if value.empty? - - buffer = +'' - value.each_with_index do |val, index| - new_parent = if @array_indices - "#{parent}%5B#{index}%5D" - else - "#{parent}%5B%5D" - end - buffer << "#{encode_pair(new_parent, val)}&" - end - buffer.chop - end - end - - # Sub-module for decoding query-string into parameters. - module DecodeMethods - # @param query [nil, String] - # - # @return [Array] the decoded params - # - # @raise [TypeError] if the nesting is incorrect - def decode(query) - return nil if query.nil? - - params = {} - query.split('&').each do |pair| - next if pair.empty? - - key, value = pair.split('=', 2) - key = unescape(key) - value = unescape(value.tr('+', ' ')) if value - decode_pair(key, value, params) - end - - dehash(params, 0) - end - - protected - - SUBKEYS_REGEX = /[^\[\]]+(?:\]?\[\])?/ - - def decode_pair(key, value, context) - subkeys = key.scan(SUBKEYS_REGEX) - subkeys.each_with_index do |subkey, i| - is_array = subkey =~ /[\[\]]+\Z/ - subkey = Regexp.last_match.pre_match if is_array - last_subkey = i == subkeys.length - 1 - - context = prepare_context(context, subkey, is_array, last_subkey) - add_to_context(is_array, context, value, subkey) if last_subkey - end - end - - def prepare_context(context, subkey, is_array, last_subkey) - if !last_subkey || is_array - context = new_context(subkey, is_array, context) - end - if context.is_a?(Array) && !is_array - context = match_context(context, subkey) - end - context - end - - def new_context(subkey, is_array, context) - value_type = is_array ? Array : Hash - if context[subkey] && !context[subkey].is_a?(value_type) - raise TypeError, "expected #{value_type.name} " \ - "(got #{context[subkey].class.name}) for param `#{subkey}'" - end - - context[subkey] ||= value_type.new - end - - def match_context(context, subkey) - context << {} if !context.last.is_a?(Hash) || context.last.key?(subkey) - context.last - end - - def add_to_context(is_array, context, value, subkey) - is_array ? context << value : context[subkey] = value - end - - # Internal: convert a nested hash with purely numeric keys into an array. - # FIXME: this is not compatible with Rack::Utils.parse_nested_query - # @!visibility private - def dehash(hash, depth) - hash.each do |key, value| - hash[key] = dehash(value, depth + 1) if value.is_a?(Hash) - end - - if depth.positive? && !hash.empty? && hash.keys.all? { |k| k =~ /^\d+$/ } - hash.sort.map(&:last) - else - hash - end - end - end - - # This is the default encoder for Faraday requests. - # Using this encoder, parameters will be encoded respecting their structure, - # so you can send objects such as Arrays or Hashes as parameters - # for your requests. - module NestedParamsEncoder - class << self - attr_accessor :sort_params, :array_indices - - extend Forwardable - def_delegators :'Faraday::Utils', :escape, :unescape - end - - # Useful default for OAuth and caching. - @sort_params = true - @array_indices = false - - extend EncodeMethods - extend DecodeMethods - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/error.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/error.rb deleted file mode 100644 index 61d19a6d..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/error.rb +++ /dev/null @@ -1,161 +0,0 @@ -# frozen_string_literal: true - -# Faraday namespace. -module Faraday - # Faraday error base class. - class Error < StandardError - attr_reader :response, :wrapped_exception - - def initialize(exc = nil, response = nil) - @wrapped_exception = nil unless defined?(@wrapped_exception) - @response = nil unless defined?(@response) - super(exc_msg_and_response!(exc, response)) - end - - def backtrace - if @wrapped_exception - @wrapped_exception.backtrace - else - super - end - end - - def inspect - inner = +'' - inner << " wrapped=#{@wrapped_exception.inspect}" if @wrapped_exception - inner << " response=#{@response.inspect}" if @response - inner << " #{super}" if inner.empty? - %(#<#{self.class}#{inner}>) - end - - def response_status - return unless @response - - @response.is_a?(Faraday::Response) ? @response.status : @response[:status] - end - - def response_headers - return unless @response - - @response.is_a?(Faraday::Response) ? @response.headers : @response[:headers] - end - - def response_body - return unless @response - - @response.is_a?(Faraday::Response) ? @response.body : @response[:body] - end - - protected - - # Pulls out potential parent exception and response hash, storing them in - # instance variables. - # exc - Either an Exception, a string message, or a response hash. - # response - Hash - # :status - Optional integer HTTP response status - # :headers - String key/value hash of HTTP response header - # values. - # :body - Optional string HTTP response body. - # :request - Hash - # :method - Symbol with the request HTTP method. - # :url - URI object with the url requested. - # :url_path - String with the url path requested. - # :params - String key/value hash of query params - # present in the request. - # :headers - String key/value hash of HTTP request - # header values. - # :body - String HTTP request body. - # - # If a subclass has to call this, then it should pass a string message - # to `super`. See NilStatusError. - def exc_msg_and_response!(exc, response = nil) - if @response.nil? && @wrapped_exception.nil? - @wrapped_exception, msg, @response = exc_msg_and_response(exc, response) - return msg - end - - exc.to_s - end - - # Pulls out potential parent exception and response hash. - def exc_msg_and_response(exc, response = nil) - return [exc, exc.message, response] if exc.respond_to?(:backtrace) - - return [nil, "the server responded with status #{exc[:status]}", exc] \ - if exc.respond_to?(:each_key) - - [nil, exc.to_s, response] - end - end - - # Faraday client error class. Represents 4xx status responses. - class ClientError < Error - end - - # Raised by Faraday::Response::RaiseError in case of a 400 response. - class BadRequestError < ClientError - end - - # Raised by Faraday::Response::RaiseError in case of a 401 response. - class UnauthorizedError < ClientError - end - - # Raised by Faraday::Response::RaiseError in case of a 403 response. - class ForbiddenError < ClientError - end - - # Raised by Faraday::Response::RaiseError in case of a 404 response. - class ResourceNotFound < ClientError - end - - # Raised by Faraday::Response::RaiseError in case of a 407 response. - class ProxyAuthError < ClientError - end - - # Raised by Faraday::Response::RaiseError in case of a 408 response. - class RequestTimeoutError < ClientError - end - - # Raised by Faraday::Response::RaiseError in case of a 409 response. - class ConflictError < ClientError - end - - # Raised by Faraday::Response::RaiseError in case of a 422 response. - class UnprocessableEntityError < ClientError - end - - # Raised by Faraday::Response::RaiseError in case of a 429 response. - class TooManyRequestsError < ClientError - end - - # Faraday server error class. Represents 5xx status responses. - class ServerError < Error - end - - # A unified client error for timeouts. - class TimeoutError < ServerError - def initialize(exc = 'timeout', response = nil) - super(exc, response) - end - end - - # Raised by Faraday::Response::RaiseError in case of a nil status in response. - class NilStatusError < ServerError - def initialize(exc, response = nil) - exc_msg_and_response!(exc, response) - super('http status could not be derived from the server response') - end - end - - # A unified error for failed connections. - class ConnectionFailed < Error - end - - # A unified client error for SSL errors. - class SSLError < Error - end - - # Raised by middlewares that parse the response, like the JSON response middleware. - class ParsingError < Error - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/logging/formatter.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/logging/formatter.rb deleted file mode 100644 index 633afaad..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/logging/formatter.rb +++ /dev/null @@ -1,118 +0,0 @@ -# frozen_string_literal: true - -require 'pp' # This require is necessary for Hash#pretty_inspect to work, do not remove it, people rely on it. - -module Faraday - module Logging - # Serves as an integration point to customize logging - class Formatter - extend Forwardable - - DEFAULT_OPTIONS = { headers: true, bodies: false, errors: false, - log_level: :info }.freeze - - def initialize(logger:, options:) - @logger = logger - @options = DEFAULT_OPTIONS.merge(options) - unless %i[debug info warn error fatal].include?(@options[:log_level]) - @options[:log_level] = :info - end - @filter = [] - end - - def_delegators :@logger, :debug, :info, :warn, :error, :fatal - - def request(env) - public_send(log_level, 'request') do - "#{env.method.upcase} #{apply_filters(env.url.to_s)}" - end - - log_headers('request', env.request_headers) if log_headers?(:request) - log_body('request', env[:body]) if env[:body] && log_body?(:request) - end - - def response(env) - public_send(log_level, 'response') { "Status #{env.status}" } - - log_headers('response', env.response_headers) if log_headers?(:response) - log_body('response', env[:body]) if env[:body] && log_body?(:response) - end - - def exception(exc) - return unless log_errors? - - public_send(log_level, 'error') { exc.full_message } - - log_headers('error', exc.response_headers) if exc.respond_to?(:response_headers) && log_headers?(:error) - return unless exc.respond_to?(:response_body) && exc.response_body && log_body?(:error) - - log_body('error', exc.response_body) - end - - def filter(filter_word, filter_replacement) - @filter.push([filter_word, filter_replacement]) - end - - private - - def dump_headers(headers) - return if headers.nil? - - headers.map { |k, v| "#{k}: #{v.inspect}" }.join("\n") - end - - def dump_body(body) - if body.respond_to?(:to_str) - body.to_str - else - pretty_inspect(body) - end - end - - def pretty_inspect(body) - body.pretty_inspect - end - - def log_headers?(type) - case @options[:headers] - when Hash - @options[:headers][type] - else - @options[:headers] - end - end - - def log_body?(type) - case @options[:bodies] - when Hash - @options[:bodies][type] - else - @options[:bodies] - end - end - - def log_errors? - @options[:errors] - end - - def apply_filters(output) - @filter.each do |pattern, replacement| - output = output.to_s.gsub(pattern, replacement) - end - output - end - - def log_level - @options[:log_level] - end - - def log_headers(type, headers) - public_send(log_level, type) { apply_filters(dump_headers(headers)) } - end - - def log_body(type, body) - public_send(log_level, type) { apply_filters(dump_body(body)) } - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/methods.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/methods.rb deleted file mode 100644 index 53e39037..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/methods.rb +++ /dev/null @@ -1,6 +0,0 @@ -# frozen_string_literal: true - -module Faraday - METHODS_WITH_QUERY = %w[get head delete trace].freeze - METHODS_WITH_BODY = %w[post put patch].freeze -end diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/middleware.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/middleware.rb deleted file mode 100644 index 0631ca24..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/middleware.rb +++ /dev/null @@ -1,33 +0,0 @@ -# frozen_string_literal: true - -module Faraday - # Middleware is the basic base class of any Faraday middleware. - class Middleware - extend MiddlewareRegistry - - attr_reader :app, :options - - def initialize(app = nil, options = {}) - @app = app - @options = options - end - - def call(env) - on_request(env) if respond_to?(:on_request) - app.call(env).on_complete do |environment| - on_complete(environment) if respond_to?(:on_complete) - end - rescue StandardError => e - on_error(e) if respond_to?(:on_error) - raise - end - - def close - if app.respond_to?(:close) - app.close - else - warn "#{app} does not implement \#close!" - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/middleware_registry.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/middleware_registry.rb deleted file mode 100644 index fc70e2b8..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/middleware_registry.rb +++ /dev/null @@ -1,83 +0,0 @@ -# frozen_string_literal: true - -require 'monitor' - -module Faraday - # Adds the ability for other modules to register and lookup - # middleware classes. - module MiddlewareRegistry - def registered_middleware - @registered_middleware ||= {} - end - - # Register middleware class(es) on the current module. - # - # @param mappings [Hash] Middleware mappings from a lookup symbol to a middleware class. - # @return [void] - # - # @example Lookup by a constant - # - # module Faraday - # class Whatever < Middleware - # # Middleware looked up by :foo returns Faraday::Whatever::Foo. - # register_middleware(foo: Whatever) - # end - # end - def register_middleware(**mappings) - middleware_mutex do - registered_middleware.update(mappings) - end - end - - # Unregister a previously registered middleware class. - # - # @param key [Symbol] key for the registered middleware. - def unregister_middleware(key) - registered_middleware.delete(key) - end - - # Lookup middleware class with a registered Symbol shortcut. - # - # @param key [Symbol] key for the registered middleware. - # @return [Class] a middleware Class. - # @raise [Faraday::Error] if given key is not registered - # - # @example - # - # module Faraday - # class Whatever < Middleware - # register_middleware(foo: Whatever) - # end - # end - # - # Faraday::Middleware.lookup_middleware(:foo) - # # => Faraday::Whatever - def lookup_middleware(key) - load_middleware(key) || - raise(Faraday::Error, "#{key.inspect} is not registered on #{self}") - end - - private - - def middleware_mutex(&block) - @middleware_mutex ||= Monitor.new - @middleware_mutex.synchronize(&block) - end - - def load_middleware(key) - value = registered_middleware[key] - case value - when Module - value - when Symbol, String - middleware_mutex do - @registered_middleware[key] = const_get(value) - end - when Proc - middleware_mutex do - @registered_middleware[key] = value.call - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/options.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/options.rb deleted file mode 100644 index b3e0dea1..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/options.rb +++ /dev/null @@ -1,219 +0,0 @@ -# frozen_string_literal: true - -module Faraday - # Subclasses Struct with some special helpers for converting from a Hash to - # a Struct. - class Options < Struct - # Public - def self.from(value) - value ? new.update(value) : new - end - - # Public - def each - return to_enum(:each) unless block_given? - - members.each do |key| - yield(key.to_sym, send(key)) - end - end - - # Public - def update(obj) - obj.each do |key, value| - sub_options = self.class.options_for(key) - if sub_options - new_value = sub_options.from(value) if value - elsif value.is_a?(Hash) - new_value = value.dup - else - new_value = value - end - - send(:"#{key}=", new_value) unless new_value.nil? - end - self - end - - # Public - def delete(key) - value = send(key) - send(:"#{key}=", nil) - value - end - - # Public - def clear - members.each { |member| delete(member) } - end - - # Public - def merge!(other) - other.each do |key, other_value| - self_value = send(key) - sub_options = self.class.options_for(key) - new_value = if self_value && sub_options && other_value - self_value.merge(other_value) - else - other_value - end - send(:"#{key}=", new_value) unless new_value.nil? - end - self - end - - # Public - def merge(other) - dup.merge!(other) - end - - # Public - def deep_dup - self.class.from(self) - end - - # Public - def fetch(key, *args) - unless symbolized_key_set.include?(key.to_sym) - key_setter = "#{key}=" - if !args.empty? - send(key_setter, args.first) - elsif block_given? - send(key_setter, yield(key)) - else - raise self.class.fetch_error_class, "key not found: #{key.inspect}" - end - end - send(key) - end - - # Public - def values_at(*keys) - keys.map { |key| send(key) } - end - - # Public - def keys - members.reject { |member| send(member).nil? } - end - - # Public - def empty? - keys.empty? - end - - # Public - def each_key(&block) - return to_enum(:each_key) unless block - - keys.each(&block) - end - - # Public - def key?(key) - keys.include?(key) - end - - alias has_key? key? - - # Public - def each_value(&block) - return to_enum(:each_value) unless block - - values.each(&block) - end - - # Public - def value?(value) - values.include?(value) - end - - alias has_value? value? - - # Public - def to_hash - hash = {} - members.each do |key| - value = send(key) - hash[key.to_sym] = value unless value.nil? - end - hash - end - - # Internal - def inspect - values = [] - members.each do |member| - value = send(member) - values << "#{member}=#{value.inspect}" if value - end - values = values.empty? ? '(empty)' : values.join(', ') - - %(#<#{self.class} #{values}>) - end - - # Internal - def self.options(mapping) - attribute_options.update(mapping) - end - - # Internal - def self.options_for(key) - attribute_options[key] - end - - # Internal - def self.attribute_options - @attribute_options ||= {} - end - - def self.memoized(key, &block) - unless block - raise ArgumentError, '#memoized must be called with a block' - end - - memoized_attributes[key.to_sym] = block - class_eval <<-RUBY, __FILE__, __LINE__ + 1 - remove_method(key) if method_defined?(key, false) - def #{key}() self[:#{key}]; end - RUBY - end - - def self.memoized_attributes - @memoized_attributes ||= {} - end - - def [](key) - key = key.to_sym - if (method = self.class.memoized_attributes[key]) - super(key) || (self[key] = instance_eval(&method)) - else - super - end - end - - def symbolized_key_set - @symbolized_key_set ||= Set.new(keys.map(&:to_sym)) - end - - def self.inherited(subclass) - super - subclass.attribute_options.update(attribute_options) - subclass.memoized_attributes.update(memoized_attributes) - end - - def self.fetch_error_class - @fetch_error_class ||= if Object.const_defined?(:KeyError) - ::KeyError - else - ::IndexError - end - end - end -end - -require 'faraday/options/request_options' -require 'faraday/options/ssl_options' -require 'faraday/options/proxy_options' -require 'faraday/options/connection_options' -require 'faraday/options/env' diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/options/connection_options.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/options/connection_options.rb deleted file mode 100644 index 0698940b..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/options/connection_options.rb +++ /dev/null @@ -1,23 +0,0 @@ -# frozen_string_literal: true - -module Faraday - # @!parse - # # ConnectionOptions contains the configurable properties for a Faraday - # # connection object. - # class ConnectionOptions < Options; end - ConnectionOptions = Options.new(:request, :proxy, :ssl, :builder, :url, - :parallel_manager, :params, :headers, - :builder_class) do - options request: RequestOptions, ssl: SSLOptions - - memoized(:request) { self.class.options_for(:request).new } - - memoized(:ssl) { self.class.options_for(:ssl).new } - - memoized(:builder_class) { RackBuilder } - - def new_builder(block) - builder_class.new(&block) - end - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/options/env.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/options/env.rb deleted file mode 100644 index fb04b117..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/options/env.rb +++ /dev/null @@ -1,204 +0,0 @@ -# frozen_string_literal: true - -module Faraday - # @!parse - # # @!attribute method - # # @return [Symbol] HTTP method (`:get`, `:post`) - # # - # # @!attribute body - # # @return [String] The request body that will eventually be converted to a - # # string. - # # - # # @!attribute url - # # @return [URI] URI instance for the current request. - # # - # # @!attribute request - # # @return [Hash] options for configuring the request. - # # Options for configuring the request. - # # - # # - `:timeout` - time limit for the entire request (Integer in - # # seconds) - # # - `:open_timeout` - time limit for just the connection phase (e.g. - # # handshake) (Integer in seconds) - # # - `:read_timeout` - time limit for the first response byte received from - # # the server (Integer in seconds) - # # - `:write_timeout` - time limit for the client to send the request to the - # # server (Integer in seconds) - # # - `:on_data` - Proc for streaming - # # - `:proxy` - Hash of proxy options - # # - `:uri` - Proxy server URI - # # - `:user` - Proxy server username - # # - `:password` - Proxy server password - # # - # # @!attribute request_headers - # # @return [Hash] HTTP Headers to be sent to the server. - # # - # # @!attribute ssl - # # @return [Hash] options for configuring SSL requests - # # - # # @!attribute parallel_manager - # # @return [Object] sent if the connection is in parallel mode - # # - # # @!attribute params - # # @return [Hash] - # # - # # @!attribute response - # # @return [Response] - # # - # # @!attribute response_headers - # # @return [Hash] HTTP headers from the server - # # - # # @!attribute status - # # @return [Integer] HTTP response status code - # # - # # @!attribute reason_phrase - # # @return [String] - # class Env < Options; end - Env = Options.new(:method, :request_body, :url, :request, - :request_headers, :ssl, :parallel_manager, :params, - :response, :response_headers, :status, - :reason_phrase, :response_body) do - const_set(:ContentLength, 'Content-Length') - const_set(:StatusesWithoutBody, Set.new([204, 304])) - const_set(:SuccessfulStatuses, (200..299)) - - # A Set of HTTP verbs that typically send a body. If no body is set for - # these requests, the Content-Length header is set to 0. - const_set(:MethodsWithBodies, Set.new(Faraday::METHODS_WITH_BODY.map(&:to_sym))) - - options request: RequestOptions, - request_headers: Utils::Headers, response_headers: Utils::Headers - - extend Forwardable - - def_delegators :request, :params_encoder - - # Build a new Env from given value. Respects and updates `custom_members`. - # - # @param value [Object] a value fitting Option.from(v). - # @return [Env] from given value - def self.from(value) - env = super(value) - if value.respond_to?(:custom_members) - env.custom_members.update(value.custom_members) - end - env - end - - # @param key [Object] - def [](key) - return self[current_body] if key == :body - - if in_member_set?(key) - super(key) - else - custom_members[key] - end - end - - # @param key [Object] - # @param value [Object] - def []=(key, value) - if key == :body - super(current_body, value) - return - end - - if in_member_set?(key) - super(key, value) - else - custom_members[key] = value - end - end - - def current_body - !!status ? :response_body : :request_body - end - - def body - self[:body] - end - - def body=(value) - self[:body] = value - end - - # @return [Boolean] true if status is in the set of {SuccessfulStatuses}. - def success? - Env::SuccessfulStatuses.include?(status) - end - - # @return [Boolean] true if there's no body yet, and the method is in the - # set of {Env::MethodsWithBodies}. - def needs_body? - !body && Env::MethodsWithBodies.include?(method) - end - - # Sets content length to zero and the body to the empty string. - def clear_body - request_headers[Env::ContentLength] = '0' - self.body = +'' - end - - # @return [Boolean] true if the status isn't in the set of - # {Env::StatusesWithoutBody}. - def parse_body? - !Env::StatusesWithoutBody.include?(status) - end - - # @return [Boolean] true if there is a parallel_manager - def parallel? - !!parallel_manager - end - - def inspect - attrs = [nil] - members.each do |mem| - if (value = send(mem)) - attrs << "@#{mem}=#{value.inspect}" - end - end - attrs << "@custom=#{custom_members.inspect}" unless custom_members.empty? - %(#<#{self.class}#{attrs.join(' ')}>) - end - - def stream_response? - request.stream_response? - end - - def stream_response(&block) - size = 0 - yielded = false - block_result = block.call do |chunk| # rubocop:disable Performance/RedundantBlockCall - if chunk.bytesize.positive? || size.positive? - yielded = true - size += chunk.bytesize - request.on_data.call(chunk, size, self) - end - end - request.on_data.call(+'', 0, self) unless yielded - block_result - end - - # @private - def custom_members - @custom_members ||= {} - end - - # @private - if members.first.is_a?(Symbol) - def in_member_set?(key) - self.class.member_set.include?(key.to_sym) - end - else - def in_member_set?(key) - self.class.member_set.include?(key.to_s) - end - end - - # @private - def self.member_set - @member_set ||= Set.new(members) - end - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/options/proxy_options.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/options/proxy_options.rb deleted file mode 100644 index 8d8b0238..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/options/proxy_options.rb +++ /dev/null @@ -1,36 +0,0 @@ -# frozen_string_literal: true - -module Faraday - # @!parse - # # ProxyOptions contains the configurable properties for the proxy - # # configuration used when making an HTTP request. - # class ProxyOptions < Options; end - ProxyOptions = Options.new(:uri, :user, :password) do - extend Forwardable - def_delegators :uri, :scheme, :scheme=, :host, :host=, :port, :port=, - :path, :path= - - def self.from(value) - case value - when '' - value = nil - when String - # URIs without a scheme should default to http (like 'example:123'). - # This fixes #1282 and prevents a silent failure in some adapters. - value = "http://#{value}" unless value.include?('://') - value = { uri: Utils.URI(value) } - when URI - value = { uri: value } - when Hash, Options - if (uri = value.delete(:uri)) - value[:uri] = Utils.URI(uri) - end - end - - super(value) - end - - memoized(:user) { uri&.user && Utils.unescape(uri.user) } - memoized(:password) { uri&.password && Utils.unescape(uri.password) } - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/options/request_options.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/options/request_options.rb deleted file mode 100644 index 3bb67c8e..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/options/request_options.rb +++ /dev/null @@ -1,23 +0,0 @@ -# frozen_string_literal: true - -module Faraday - # @!parse - # # RequestOptions contains the configurable properties for a Faraday request. - # class RequestOptions < Options; end - RequestOptions = Options.new(:params_encoder, :proxy, :bind, - :timeout, :open_timeout, :read_timeout, - :write_timeout, :boundary, :oauth, - :context, :on_data) do - def []=(key, value) - if key && key.to_sym == :proxy - super(key, value ? ProxyOptions.from(value) : nil) - else - super(key, value) - end - end - - def stream_response? - on_data.is_a?(Proc) - end - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/options/ssl_options.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/options/ssl_options.rb deleted file mode 100644 index 2a04ea17..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/options/ssl_options.rb +++ /dev/null @@ -1,70 +0,0 @@ -# frozen_string_literal: true - -module Faraday - # @!parse - # # SSL-related options. - # # - # # @!attribute verify - # # @return [Boolean] whether to verify SSL certificates or not - # # - # # @!attribute verify_hostname - # # @return [Boolean] whether to enable hostname verification on server certificates - # # during the handshake or not (see https://github.com/ruby/openssl/pull/60) - # # - # # @!attribute ca_file - # # @return [String] CA file - # # - # # @!attribute ca_path - # # @return [String] CA path - # # - # # @!attribute verify_mode - # # @return [Integer] Any `OpenSSL::SSL::` constant (see https://ruby-doc.org/stdlib-2.5.1/libdoc/openssl/rdoc/OpenSSL/SSL.html) - # # - # # @!attribute cert_store - # # @return [OpenSSL::X509::Store] certificate store - # # - # # @!attribute client_cert - # # @return [String, OpenSSL::X509::Certificate] client certificate - # # - # # @!attribute client_key - # # @return [String, OpenSSL::PKey::RSA, OpenSSL::PKey::DSA] client key - # # - # # @!attribute certificate - # # @return [OpenSSL::X509::Certificate] certificate (Excon only) - # # - # # @!attribute private_key - # # @return [OpenSSL::PKey::RSA, OpenSSL::PKey::DSA] private key (Excon only) - # # - # # @!attribute verify_depth - # # @return [Integer] maximum depth for the certificate chain verification - # # - # # @!attribute version - # # @return [String, Symbol] SSL version (see https://ruby-doc.org/stdlib-2.5.1/libdoc/openssl/rdoc/OpenSSL/SSL/SSLContext.html#method-i-ssl_version-3D) - # # - # # @!attribute min_version - # # @return [String, Symbol] minimum SSL version (see https://ruby-doc.org/stdlib-2.5.1/libdoc/openssl/rdoc/OpenSSL/SSL/SSLContext.html#method-i-min_version-3D) - # # - # # @!attribute max_version - # # @return [String, Symbol] maximum SSL version (see https://ruby-doc.org/stdlib-2.5.1/libdoc/openssl/rdoc/OpenSSL/SSL/SSLContext.html#method-i-max_version-3D) - # class SSLOptions < Options; end - SSLOptions = Options.new(:verify, :verify_hostname, - :ca_file, :ca_path, :verify_mode, - :cert_store, :client_cert, :client_key, - :certificate, :private_key, :verify_depth, - :version, :min_version, :max_version) do - # @return [Boolean] true if should verify - def verify? - verify != false - end - - # @return [Boolean] true if should not verify - def disable? - !verify? - end - - # @return [Boolean] true if should verify_hostname - def verify_hostname? - verify_hostname != false - end - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/parameters.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/parameters.rb deleted file mode 100644 index cfb35d08..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/parameters.rb +++ /dev/null @@ -1,5 +0,0 @@ -# frozen_string_literal: true - -require 'forwardable' -require 'faraday/encoders/nested_params_encoder' -require 'faraday/encoders/flat_params_encoder' diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/rack_builder.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/rack_builder.rb deleted file mode 100644 index e8e62082..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/rack_builder.rb +++ /dev/null @@ -1,251 +0,0 @@ -# frozen_string_literal: true - -require 'faraday/adapter_registry' - -module Faraday - # A Builder that processes requests into responses by passing through an inner - # middleware stack (heavily inspired by Rack). - # - # @example - # Faraday::Connection.new(url: 'http://httpbingo.org') do |builder| - # builder.request :url_encoded # Faraday::Request::UrlEncoded - # builder.adapter :net_http # Faraday::Adapter::NetHttp - # end - class RackBuilder - # Used to detect missing arguments - NO_ARGUMENT = Object.new - - attr_accessor :handlers - - # Error raised when trying to modify the stack after calling `lock!` - class StackLocked < RuntimeError; end - - # borrowed from ActiveSupport::Dependencies::Reference & - # ActionDispatch::MiddlewareStack::Middleware - class Handler - REGISTRY = Faraday::AdapterRegistry.new - - attr_reader :name - - ruby2_keywords def initialize(klass, *args, &block) - @name = klass.to_s - REGISTRY.set(klass) if klass.respond_to?(:name) - @args = args - @block = block - end - - def klass - REGISTRY.get(@name) - end - - def inspect - @name - end - - def ==(other) - if other.is_a? Handler - name == other.name - elsif other.respond_to? :name - klass == other - else - @name == other.to_s - end - end - - def build(app = nil) - klass.new(app, *@args, &@block) - end - end - - def initialize(&block) - @adapter = nil - @handlers = [] - build(&block) - end - - def initialize_dup(original) - super - @adapter = original.adapter - @handlers = original.handlers.dup - end - - def build - raise_if_locked - block_given? ? yield(self) : request(:url_encoded) - adapter(Faraday.default_adapter, **Faraday.default_adapter_options) unless @adapter - end - - def [](idx) - @handlers[idx] - end - - # Locks the middleware stack to ensure no further modifications are made. - def lock! - @handlers.freeze - end - - def locked? - @handlers.frozen? - end - - ruby2_keywords def use(klass, *args, &block) - if klass.is_a? Symbol - use_symbol(Faraday::Middleware, klass, *args, &block) - else - raise_if_locked - raise_if_adapter(klass) - @handlers << self.class::Handler.new(klass, *args, &block) - end - end - - ruby2_keywords def request(key, *args, &block) - use_symbol(Faraday::Request, key, *args, &block) - end - - ruby2_keywords def response(key, *args, &block) - use_symbol(Faraday::Response, key, *args, &block) - end - - ruby2_keywords def adapter(klass = NO_ARGUMENT, *args, &block) - return @adapter if klass == NO_ARGUMENT || klass.nil? - - klass = Faraday::Adapter.lookup_middleware(klass) if klass.is_a?(Symbol) - @adapter = self.class::Handler.new(klass, *args, &block) - end - - ## methods to push onto the various positions in the stack: - - ruby2_keywords def insert(index, *args, &block) - raise_if_locked - index = assert_index(index) - handler = self.class::Handler.new(*args, &block) - @handlers.insert(index, handler) - end - - alias insert_before insert - - ruby2_keywords def insert_after(index, *args, &block) - index = assert_index(index) - insert(index + 1, *args, &block) - end - - ruby2_keywords def swap(index, *args, &block) - raise_if_locked - index = assert_index(index) - @handlers.delete_at(index) - insert(index, *args, &block) - end - - def delete(handler) - raise_if_locked - @handlers.delete(handler) - end - - # Processes a Request into a Response by passing it through this Builder's - # middleware stack. - # - # @param connection [Faraday::Connection] - # @param request [Faraday::Request] - # - # @return [Faraday::Response] - def build_response(connection, request) - app.call(build_env(connection, request)) - end - - # The "rack app" wrapped in middleware. All requests are sent here. - # - # The builder is responsible for creating the app object. After this, - # the builder gets locked to ensure no further modifications are made - # to the middleware stack. - # - # Returns an object that responds to `call` and returns a Response. - def app - @app ||= begin - lock! - ensure_adapter! - to_app - end - end - - def to_app - # last added handler is the deepest and thus closest to the inner app - # adapter is always the last one - @handlers.reverse.inject(@adapter.build) do |app, handler| - handler.build(app) - end - end - - def ==(other) - other.is_a?(self.class) && - @handlers == other.handlers && - @adapter == other.adapter - end - - # ENV Keys - # :http_method - a symbolized request HTTP method (:get, :post) - # :body - the request body that will eventually be converted to a string. - # :url - URI instance for the current request. - # :status - HTTP response status code - # :request_headers - hash of HTTP Headers to be sent to the server - # :response_headers - Hash of HTTP headers from the server - # :parallel_manager - sent if the connection is in parallel mode - # :request - Hash of options for configuring the request. - # :timeout - open/read timeout Integer in seconds - # :open_timeout - read timeout Integer in seconds - # :proxy - Hash of proxy options - # :uri - Proxy Server URI - # :user - Proxy server username - # :password - Proxy server password - # :ssl - Hash of options for configuring SSL requests. - def build_env(connection, request) - exclusive_url = connection.build_exclusive_url( - request.path, request.params, - request.options.params_encoder - ) - - Env.new(request.http_method, request.body, exclusive_url, - request.options, request.headers, connection.ssl, - connection.parallel_manager) - end - - private - - LOCK_ERR = "can't modify middleware stack after making a request" - MISSING_ADAPTER_ERROR = "An attempt to run a request with a Faraday::Connection without adapter has been made.\n" \ - "Please set Faraday.default_adapter or provide one when initializing the connection.\n" \ - 'For more info, check https://lostisland.github.io/faraday/usage/.' - - def raise_if_locked - raise StackLocked, LOCK_ERR if locked? - end - - def raise_if_adapter(klass) - return unless is_adapter?(klass) - - raise 'Adapter should be set using the `adapter` method, not `use`' - end - - def ensure_adapter! - raise MISSING_ADAPTER_ERROR unless @adapter - end - - def adapter_set? - !@adapter.nil? - end - - def is_adapter?(klass) # rubocop:disable Naming/PredicateName - klass <= Faraday::Adapter - end - - ruby2_keywords def use_symbol(mod, key, *args, &block) - use(mod.lookup_middleware(key), *args, &block) - end - - def assert_index(index) - idx = index.is_a?(Integer) ? index : @handlers.index(index) - raise "No such handler: #{index.inspect}" unless idx - - idx - end - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/request.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/request.rb deleted file mode 100644 index 8c5bf952..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/request.rb +++ /dev/null @@ -1,139 +0,0 @@ -# frozen_string_literal: true - -module Faraday - # Used to setup URLs, params, headers, and the request body in a sane manner. - # - # @example - # @connection.post do |req| - # req.url 'http://localhost', 'a' => '1' # 'http://localhost?a=1' - # req.headers['b'] = '2' # Header - # req.params['c'] = '3' # GET Param - # req['b'] = '2' # also Header - # req.body = 'abc' - # end - # - # @!attribute http_method - # @return [Symbol] the HTTP method of the Request - # @!attribute path - # @return [URI, String] the path - # @!attribute params - # @return [Hash] query parameters - # @!attribute headers - # @return [Faraday::Utils::Headers] headers - # @!attribute body - # @return [String] body - # @!attribute options - # @return [RequestOptions] options - Request = Struct.new(:http_method, :path, :params, :headers, :body, :options) do - extend MiddlewareRegistry - - alias_method :member_get, :[] - private :member_get - alias_method :member_set, :[]= - private :member_set - - # @param request_method [String] - # @yield [request] for block customization, if block given - # @yieldparam request [Request] - # @return [Request] - def self.create(request_method) - new(request_method).tap do |request| - yield(request) if block_given? - end - end - - remove_method :params= - # Replace params, preserving the existing hash type. - # - # @param hash [Hash] new params - def params=(hash) - if params - params.replace hash - else - member_set(:params, hash) - end - end - - remove_method :headers= - # Replace request headers, preserving the existing hash type. - # - # @param hash [Hash] new headers - def headers=(hash) - if headers - headers.replace hash - else - member_set(:headers, hash) - end - end - - # Update path and params. - # - # @param path [URI, String] - # @param params [Hash, nil] - # @return [void] - def url(path, params = nil) - if path.respond_to? :query - if (query = path.query) - path = path.dup - path.query = nil - end - else - anchor_index = path.index('#') - path = path.slice(0, anchor_index) unless anchor_index.nil? - path, query = path.split('?', 2) - end - self.path = path - self.params.merge_query query, options.params_encoder - self.params.update(params) if params - end - - # @param key [Object] key to look up in headers - # @return [Object] value of the given header name - def [](key) - headers[key] - end - - # @param key [Object] key of header to write - # @param value [Object] value of header - def []=(key, value) - headers[key] = value - end - - # Marshal serialization support. - # - # @return [Hash] the hash ready to be serialized in Marshal. - def marshal_dump - { - http_method: http_method, - body: body, - headers: headers, - path: path, - params: params, - options: options - } - end - - # Marshal serialization support. - # Restores the instance variables according to the +serialised+. - # @param serialised [Hash] the serialised object. - def marshal_load(serialised) - self.http_method = serialised[:http_method] - self.body = serialised[:body] - self.headers = serialised[:headers] - self.path = serialised[:path] - self.params = serialised[:params] - self.options = serialised[:options] - end - - # @return [Env] the Env for this Request - def to_env(connection) - Env.new(http_method, body, connection.build_exclusive_url(path, params), - options, headers, connection.ssl, connection.parallel_manager) - end - end -end - -require 'faraday/request/authorization' -require 'faraday/request/instrumentation' -require 'faraday/request/json' -require 'faraday/request/url_encoded' diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/request/authorization.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/request/authorization.rb deleted file mode 100644 index 43732432..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/request/authorization.rb +++ /dev/null @@ -1,54 +0,0 @@ -# frozen_string_literal: true - -module Faraday - class Request - # Request middleware for the Authorization HTTP header - class Authorization < Faraday::Middleware - KEY = 'Authorization' - - # @param app [#call] - # @param type [String, Symbol] Type of Authorization - # @param params [Array] parameters to build the Authorization header. - # If the type is `:basic`, then these can be a login and password pair. - # Otherwise, a single value is expected that will be appended after the type. - # This value can be a proc or an object responding to `.call`, in which case - # it will be invoked on each request. - def initialize(app, type, *params) - @type = type - @params = params - super(app) - end - - # @param env [Faraday::Env] - def on_request(env) - return if env.request_headers[KEY] - - env.request_headers[KEY] = header_from(@type, env, *@params) - end - - private - - # @param type [String, Symbol] - # @param env [Faraday::Env] - # @param params [Array] - # @return [String] a header value - def header_from(type, env, *params) - if type.to_s.casecmp('basic').zero? && params.size == 2 - Utils.basic_header_from(*params) - elsif params.size != 1 - raise ArgumentError, "Unexpected params received (got #{params.size} instead of 1)" - else - value = params.first - if (value.is_a?(Proc) && value.arity == 1) || (value.respond_to?(:call) && value.method(:call).arity == 1) - value = value.call(env) - elsif value.is_a?(Proc) || value.respond_to?(:call) - value = value.call - end - "#{type} #{value}" - end - end - end - end -end - -Faraday::Request.register_middleware(authorization: Faraday::Request::Authorization) diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/request/instrumentation.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/request/instrumentation.rb deleted file mode 100644 index a5020598..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/request/instrumentation.rb +++ /dev/null @@ -1,58 +0,0 @@ -# frozen_string_literal: true - -module Faraday - class Request - # Middleware for instrumenting Requests. - class Instrumentation < Faraday::Middleware - # Options class used in Request::Instrumentation class. - Options = Faraday::Options.new(:name, :instrumenter) do - remove_method :name - # @return [String] - def name - self[:name] ||= 'request.faraday' - end - - remove_method :instrumenter - # @return [Class] - def instrumenter - self[:instrumenter] ||= ActiveSupport::Notifications - end - end - - # Instruments requests using Active Support. - # - # Measures time spent only for synchronous requests. - # - # @example Using ActiveSupport::Notifications to measure time spent - # for Faraday requests. - # ActiveSupport::Notifications - # .subscribe('request.faraday') do |name, starts, ends, _, env| - # url = env[:url] - # http_method = env[:method].to_s.upcase - # duration = ends - starts - # $stderr.puts '[%s] %s %s (%.3f s)' % - # [url.host, http_method, url.request_uri, duration] - # end - # @param app [#call] - # @param options [nil, Hash] Options hash - # @option options [String] :name ('request.faraday') - # Name of the instrumenter - # @option options [Class] :instrumenter (ActiveSupport::Notifications) - # Active Support instrumenter class. - def initialize(app, options = nil) - super(app) - @name, @instrumenter = Options.from(options) - .values_at(:name, :instrumenter) - end - - # @param env [Faraday::Env] - def call(env) - @instrumenter.instrument(@name, env) do - @app.call(env) - end - end - end - end -end - -Faraday::Request.register_middleware(instrumentation: Faraday::Request::Instrumentation) diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/request/json.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/request/json.rb deleted file mode 100644 index f12ebe29..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/request/json.rb +++ /dev/null @@ -1,70 +0,0 @@ -# frozen_string_literal: true - -require 'json' - -module Faraday - class Request - # Request middleware that encodes the body as JSON. - # - # Processes only requests with matching Content-type or those without a type. - # If a request doesn't have a type but has a body, it sets the Content-type - # to JSON MIME-type. - # - # Doesn't try to encode bodies that already are in string form. - class Json < Middleware - MIME_TYPE = 'application/json' - MIME_TYPE_REGEX = %r{^application/(vnd\..+\+)?json$} - - def on_request(env) - match_content_type(env) do |data| - env[:body] = encode(data) - end - end - - private - - def encode(data) - if options[:encoder].is_a?(Array) && options[:encoder].size >= 2 - options[:encoder][0].public_send(options[:encoder][1], data) - elsif options[:encoder].respond_to?(:dump) - options[:encoder].dump(data) - else - ::JSON.generate(data) - end - end - - def match_content_type(env) - return unless process_request?(env) - - env[:request_headers][CONTENT_TYPE] ||= MIME_TYPE - yield env[:body] unless env[:body].respond_to?(:to_str) - end - - def process_request?(env) - type = request_type(env) - body?(env) && (type.empty? || type.match?(MIME_TYPE_REGEX)) - end - - def body?(env) - body = env[:body] - case body - when true, false - true - when nil - # NOTE: nil can be converted to `"null"`, but this middleware doesn't process `nil` for the compatibility. - false - else - !(body.respond_to?(:to_str) && body.empty?) - end - end - - def request_type(env) - type = env[:request_headers][CONTENT_TYPE].to_s - type = type.split(';', 2).first if type.index(';') - type - end - end - end -end - -Faraday::Request.register_middleware(json: Faraday::Request::Json) diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/request/url_encoded.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/request/url_encoded.rb deleted file mode 100644 index 5ac7dcb3..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/request/url_encoded.rb +++ /dev/null @@ -1,60 +0,0 @@ -# frozen_string_literal: true - -module Faraday - class Request - # Middleware for supporting urlencoded requests. - class UrlEncoded < Faraday::Middleware - unless defined?(::Faraday::Request::UrlEncoded::CONTENT_TYPE) - CONTENT_TYPE = 'Content-Type' - end - - class << self - attr_accessor :mime_type - end - self.mime_type = 'application/x-www-form-urlencoded' - - # Encodes as "application/x-www-form-urlencoded" if not already encoded or - # of another type. - # - # @param env [Faraday::Env] - def call(env) - match_content_type(env) do |data| - params = Faraday::Utils::ParamsHash[data] - env.body = params.to_query(env.params_encoder) - end - @app.call env - end - - # @param env [Faraday::Env] - # @yield [request_body] Body of the request - def match_content_type(env) - return unless process_request?(env) - - env.request_headers[CONTENT_TYPE] ||= self.class.mime_type - return if env.body.respond_to?(:to_str) || env.body.respond_to?(:read) - - yield(env.body) - end - - # @param env [Faraday::Env] - # - # @return [Boolean] True if the request has a body and its Content-Type is - # urlencoded. - def process_request?(env) - type = request_type(env) - env.body && (type.empty? || (type == self.class.mime_type)) - end - - # @param env [Faraday::Env] - # - # @return [String] - def request_type(env) - type = env.request_headers[CONTENT_TYPE].to_s - type = type.split(';', 2).first if type.index(';') - type - end - end - end -end - -Faraday::Request.register_middleware(url_encoded: Faraday::Request::UrlEncoded) diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/response.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/response.rb deleted file mode 100644 index d1fa9320..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/response.rb +++ /dev/null @@ -1,91 +0,0 @@ -# frozen_string_literal: true - -require 'forwardable' - -module Faraday - # Response represents an HTTP response from making an HTTP request. - class Response - extend Forwardable - extend MiddlewareRegistry - - def initialize(env = nil) - @env = Env.from(env) if env - @on_complete_callbacks = [] - end - - attr_reader :env - - def status - finished? ? env.status : nil - end - - def reason_phrase - finished? ? env.reason_phrase : nil - end - - def headers - finished? ? env.response_headers : {} - end - - def_delegator :headers, :[] - - def body - finished? ? env.body : nil - end - - def finished? - !!env - end - - def on_complete(&block) - if finished? - yield(env) - else - @on_complete_callbacks << block - end - self - end - - def finish(env) - raise 'response already finished' if finished? - - @env = env.is_a?(Env) ? env : Env.from(env) - @on_complete_callbacks.each { |callback| callback.call(@env) } - self - end - - def success? - finished? && env.success? - end - - def to_hash - { - status: env.status, body: env.body, - response_headers: env.response_headers, - url: env.url - } - end - - # because @on_complete_callbacks cannot be marshalled - def marshal_dump - finished? ? to_hash : nil - end - - def marshal_load(env) - @env = Env.from(env) - end - - # Expand the env with more properties, without overriding existing ones. - # Useful for applying request params after restoring a marshalled Response. - def apply_request(request_env) - raise "response didn't finish yet" unless finished? - - @env = Env.from(request_env).update(@env) - self - end - end -end - -require 'faraday/response/json' -require 'faraday/response/logger' -require 'faraday/response/raise_error' diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/response/json.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/response/json.rb deleted file mode 100644 index eaae6bc2..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/response/json.rb +++ /dev/null @@ -1,73 +0,0 @@ -# frozen_string_literal: true - -require 'json' - -module Faraday - class Response - # Parse response bodies as JSON. - class Json < Middleware - def initialize(app = nil, parser_options: nil, content_type: /\bjson$/, preserve_raw: false) - super(app) - @parser_options = parser_options - @content_types = Array(content_type) - @preserve_raw = preserve_raw - - process_parser_options - end - - def on_complete(env) - process_response(env) if parse_response?(env) - end - - private - - def process_response(env) - env[:raw_body] = env[:body] if @preserve_raw - env[:body] = parse(env[:body]) - rescue StandardError, SyntaxError => e - raise Faraday::ParsingError.new(e, env[:response]) - end - - def parse(body) - return if body.strip.empty? - - decoder, method_name = @decoder_options - - decoder.public_send(method_name, body, @parser_options || {}) - end - - def parse_response?(env) - process_response_type?(env) && - env[:body].respond_to?(:to_str) - end - - def process_response_type?(env) - type = response_type(env) - @content_types.empty? || @content_types.any? do |pattern| - pattern.is_a?(Regexp) ? type.match?(pattern) : type == pattern - end - end - - def response_type(env) - type = env[:response_headers][CONTENT_TYPE].to_s - type = type.split(';', 2).first if type.index(';') - type - end - - def process_parser_options - @decoder_options = @parser_options&.delete(:decoder) - - @decoder_options = - if @decoder_options.is_a?(Array) && @decoder_options.size >= 2 - @decoder_options.slice(0, 2) - elsif @decoder_options.respond_to?(:load) - [@decoder_options, :load] - else - [::JSON, :parse] - end - end - end - end -end - -Faraday::Response.register_middleware(json: Faraday::Response::Json) diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/response/logger.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/response/logger.rb deleted file mode 100644 index d4641462..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/response/logger.rb +++ /dev/null @@ -1,37 +0,0 @@ -# frozen_string_literal: true - -require 'forwardable' -require 'logger' -require 'faraday/logging/formatter' - -module Faraday - class Response - # Logger is a middleware that logs internal events in the HTTP request - # lifecycle to a given Logger object. By default, this logs to STDOUT. See - # Faraday::Logging::Formatter to see specifically what is logged. - class Logger < Middleware - def initialize(app, logger = nil, options = {}) - super(app) - logger ||= ::Logger.new($stdout) - formatter_class = options.delete(:formatter) || Logging::Formatter - @formatter = formatter_class.new(logger: logger, options: options) - yield @formatter if block_given? - end - - def call(env) - @formatter.request(env) - super - end - - def on_complete(env) - @formatter.response(env) - end - - def on_error(exc) - @formatter.exception(exc) if @formatter.respond_to?(:exception) - end - end - end -end - -Faraday::Response.register_middleware(logger: Faraday::Response::Logger) diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/response/raise_error.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/response/raise_error.rb deleted file mode 100644 index 76de80bb..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/response/raise_error.rb +++ /dev/null @@ -1,83 +0,0 @@ -# frozen_string_literal: true - -module Faraday - class Response - # RaiseError is a Faraday middleware that raises exceptions on common HTTP - # client or server error responses. - class RaiseError < Middleware - # rubocop:disable Naming/ConstantName - ClientErrorStatuses = (400...500) - ServerErrorStatuses = (500...600) - # rubocop:enable Naming/ConstantName - - def on_complete(env) - case env[:status] - when 400 - raise Faraday::BadRequestError, response_values(env) - when 401 - raise Faraday::UnauthorizedError, response_values(env) - when 403 - raise Faraday::ForbiddenError, response_values(env) - when 404 - raise Faraday::ResourceNotFound, response_values(env) - when 407 - # mimic the behavior that we get with proxy requests with HTTPS - msg = %(407 "Proxy Authentication Required") - raise Faraday::ProxyAuthError.new(msg, response_values(env)) - when 408 - raise Faraday::RequestTimeoutError, response_values(env) - when 409 - raise Faraday::ConflictError, response_values(env) - when 422 - raise Faraday::UnprocessableEntityError, response_values(env) - when 429 - raise Faraday::TooManyRequestsError, response_values(env) - when ClientErrorStatuses - raise Faraday::ClientError, response_values(env) - when ServerErrorStatuses - raise Faraday::ServerError, response_values(env) - when nil - raise Faraday::NilStatusError, response_values(env) - end - end - - # Returns a hash of response data with the following keys: - # - status - # - headers - # - body - # - request - # - # The `request` key is omitted when the middleware is explicitly - # configured with the option `include_request: false`. - def response_values(env) - response = { - status: env.status, - headers: env.response_headers, - body: env.body - } - - # Include the request data by default. If the middleware was explicitly - # configured to _not_ include request data, then omit it. - return response unless options.fetch(:include_request, true) - - response.merge( - request: { - method: env.method, - url: env.url, - url_path: env.url.path, - params: query_params(env), - headers: env.request_headers, - body: env.request_body - } - ) - end - - def query_params(env) - env.request.params_encoder ||= Faraday::Utils.default_params_encoder - env.params_encoder.decode(env.url.query) - end - end - end -end - -Faraday::Response.register_middleware(raise_error: Faraday::Response::RaiseError) diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/utils.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/utils.rb deleted file mode 100644 index 809b3a88..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/utils.rb +++ /dev/null @@ -1,121 +0,0 @@ -# frozen_string_literal: true - -require 'uri' -require 'faraday/utils/headers' -require 'faraday/utils/params_hash' - -module Faraday - # Utils contains various static helper methods. - module Utils - module_function - - def build_query(params) - FlatParamsEncoder.encode(params) - end - - def build_nested_query(params) - NestedParamsEncoder.encode(params) - end - - def default_space_encoding - @default_space_encoding ||= '+' - end - - class << self - attr_writer :default_space_encoding - end - - ESCAPE_RE = /[^a-zA-Z0-9 .~_-]/ - - def escape(str) - str.to_s.gsub(ESCAPE_RE) do |match| - "%#{match.unpack('H2' * match.bytesize).join('%').upcase}" - end.gsub(' ', default_space_encoding) - end - - def unescape(str) - CGI.unescape str.to_s - end - - DEFAULT_SEP = /[&;] */n - - # Adapted from Rack - def parse_query(query) - FlatParamsEncoder.decode(query) - end - - def parse_nested_query(query) - NestedParamsEncoder.decode(query) - end - - def default_params_encoder - @default_params_encoder ||= NestedParamsEncoder - end - - def basic_header_from(login, pass) - value = ["#{login}:#{pass}"].pack('m') # Base64 encoding - value.delete!("\n") - "Basic #{value}" - end - - class << self - attr_writer :default_params_encoder - end - - # Normalize URI() behavior across Ruby versions - # - # url - A String or URI. - # - # Returns a parsed URI. - def URI(url) # rubocop:disable Naming/MethodName - if url.respond_to?(:host) - url - elsif url.respond_to?(:to_str) - default_uri_parser.call(url) - else - raise ArgumentError, 'bad argument (expected URI object or URI string)' - end - end - - def default_uri_parser - @default_uri_parser ||= Kernel.method(:URI) - end - - def default_uri_parser=(parser) - @default_uri_parser = if parser.respond_to?(:call) || parser.nil? - parser - else - parser.method(:parse) - end - end - - # Receives a String or URI and returns just - # the path with the query string sorted. - def normalize_path(url) - url = URI(url) - (url.path.start_with?('/') ? url.path : "/#{url.path}") + - (url.query ? "?#{sort_query_params(url.query)}" : '') - end - - # Recursive hash update - def deep_merge!(target, hash) - hash.each do |key, value| - target[key] = if value.is_a?(Hash) && (target[key].is_a?(Hash) || target[key].is_a?(Options)) - deep_merge(target[key], value) - else - value - end - end - target - end - - # Recursive hash merge - def deep_merge(source, hash) - deep_merge!(source.dup, hash) - end - - def sort_query_params(query) - query.split('&').sort.join('&') - end - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/utils/headers.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/utils/headers.rb deleted file mode 100644 index 90b8be24..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/utils/headers.rb +++ /dev/null @@ -1,144 +0,0 @@ -# frozen_string_literal: true - -module Faraday - module Utils - # A case-insensitive Hash that preserves the original case of a header - # when set. - # - # Adapted from Rack::Utils::HeaderHash - class Headers < ::Hash - def self.from(value) - new(value) - end - - def self.allocate - new_self = super - new_self.initialize_names - new_self - end - - def initialize(hash = nil) - super() - @names = {} - update(hash || {}) - end - - def initialize_names - @names = {} - end - - # on dup/clone, we need to duplicate @names hash - def initialize_copy(other) - super - @names = other.names.dup - end - - # need to synchronize concurrent writes to the shared KeyMap - keymap_mutex = Mutex.new - - # symbol -> string mapper + cache - KeyMap = Hash.new do |map, key| - value = if key.respond_to?(:to_str) - key - else - key.to_s.split('_') # user_agent: %w(user agent) - .each(&:capitalize!) # => %w(User Agent) - .join('-') # => "User-Agent" - end - keymap_mutex.synchronize { map[key] = value } - end - KeyMap[:etag] = 'ETag' - - def [](key) - key = KeyMap[key] - super(key) || super(@names[key.downcase]) - end - - def []=(key, val) - key = KeyMap[key] - key = (@names[key.downcase] ||= key) - # join multiple values with a comma - val = val.to_ary.join(', ') if val.respond_to?(:to_ary) - super(key, val) - end - - def fetch(key, *args, &block) - key = KeyMap[key] - key = @names.fetch(key.downcase, key) - super(key, *args, &block) - end - - def delete(key) - key = KeyMap[key] - key = @names[key.downcase] - return unless key - - @names.delete key.downcase - super(key) - end - - def include?(key) - @names.include? key.downcase - end - - alias has_key? include? - alias member? include? - alias key? include? - - def merge!(other) - other.each { |k, v| self[k] = v } - self - end - - alias update merge! - - def merge(other) - hash = dup - hash.merge! other - end - - def replace(other) - clear - @names.clear - update other - self - end - - def to_hash - {}.update(self) - end - - def parse(header_string) - return unless header_string && !header_string.empty? - - headers = header_string.split("\r\n") - - # Find the last set of response headers. - start_index = headers.rindex { |x| x.start_with?('HTTP/') } || 0 - last_response = headers.slice(start_index, headers.size) - - last_response - .tap { |a| a.shift if a.first.start_with?('HTTP/') } - .map { |h| h.split(/:\s*/, 2) } # split key and value - .reject { |p| p[0].nil? } # ignore blank lines - .each { |key, value| add_parsed(key, value) } - end - - protected - - attr_reader :names - - private - - # Join multiple values with a comma. - def add_parsed(key, value) - if key?(key) - self[key] = self[key].to_s - self[key] << ', ' << value - else - self[key] = value - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/utils/params_hash.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/utils/params_hash.rb deleted file mode 100644 index 0e16d935..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/utils/params_hash.rb +++ /dev/null @@ -1,61 +0,0 @@ -# frozen_string_literal: true - -module Faraday - module Utils - # A hash with stringified keys. - class ParamsHash < Hash - def [](key) - super(convert_key(key)) - end - - def []=(key, value) - super(convert_key(key), value) - end - - def delete(key) - super(convert_key(key)) - end - - def include?(key) - super(convert_key(key)) - end - - alias has_key? include? - alias member? include? - alias key? include? - - def update(params) - params.each do |key, value| - self[key] = value - end - self - end - alias merge! update - - def merge(params) - dup.update(params) - end - - def replace(other) - clear - update(other) - end - - def merge_query(query, encoder = nil) - return self unless query && !query.empty? - - update((encoder || Utils.default_params_encoder).decode(query)) - end - - def to_query(encoder = nil) - (encoder || Utils.default_params_encoder).encode(self) - end - - private - - def convert_key(key) - key.to_s - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/version.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/version.rb deleted file mode 100644 index 9b45758d..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/lib/faraday/version.rb +++ /dev/null @@ -1,5 +0,0 @@ -# frozen_string_literal: true - -module Faraday - VERSION = '2.9.0' -end diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/external_adapters/faraday_specs_setup.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/external_adapters/faraday_specs_setup.rb deleted file mode 100644 index ac7f7b64..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/external_adapters/faraday_specs_setup.rb +++ /dev/null @@ -1,14 +0,0 @@ -# frozen_string_literal: true - -require 'webmock/rspec' -WebMock.disable_net_connect!(allow_localhost: true) - -require_relative '../support/helper_methods' -require_relative '../support/disabling_stub' -require_relative '../support/streaming_response_checker' -require_relative '../support/shared_examples/adapter' -require_relative '../support/shared_examples/request_method' - -RSpec.configure do |config| - config.include Faraday::HelperMethods -end diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/adapter/test_spec.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/adapter/test_spec.rb deleted file mode 100644 index 117bb789..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/adapter/test_spec.rb +++ /dev/null @@ -1,442 +0,0 @@ -# frozen_string_literal: true - -RSpec.describe Faraday::Adapter::Test do - let(:stubs) do - described_class::Stubs.new do |stub| - stub.get('http://domain.test/hello') do - [200, { 'Content-Type' => 'text/html' }, 'domain: hello'] - end - - stub.get('http://wrong.test/hello') do - [200, { 'Content-Type' => 'text/html' }, 'wrong: hello'] - end - - stub.get('http://wrong.test/bait') do - [404, { 'Content-Type' => 'text/html' }] - end - - stub.get('/hello') do - [200, { 'Content-Type' => 'text/html' }, 'hello'] - end - - stub.get('/method-echo') do |env| - [200, { 'Content-Type' => 'text/html' }, env[:method].to_s] - end - - stub.get(%r{\A/resources/\d+(?:\?|\z)}) do - [200, { 'Content-Type' => 'text/html' }, 'show'] - end - - stub.get(%r{\A/resources/(specified)\z}) do |_env, meta| - [200, { 'Content-Type' => 'text/html' }, "show #{meta[:match_data][1]}"] - end - end - end - - let(:connection) do - Faraday.new do |builder| - builder.adapter :test, stubs - end - end - - let(:response) { connection.get('/hello') } - - context 'with simple path sets status' do - subject { response.status } - - it { is_expected.to eq 200 } - end - - context 'with simple path sets headers' do - subject { response.headers['Content-Type'] } - - it { is_expected.to eq 'text/html' } - end - - context 'with simple path sets body' do - subject { response.body } - - it { is_expected.to eq 'hello' } - end - - context 'with host points to the right stub' do - subject { connection.get('http://domain.test/hello').body } - - it { is_expected.to eq 'domain: hello' } - end - - describe 'can be called several times' do - subject { connection.get('/hello').body } - - it { is_expected.to eq 'hello' } - end - - describe 'can handle regular expression path' do - subject { connection.get('/resources/1').body } - - it { is_expected.to eq 'show' } - end - - describe 'can handle single parameter block' do - subject { connection.get('/method-echo').body } - - it { is_expected.to eq 'get' } - end - - describe 'can handle regular expression path with captured result' do - subject { connection.get('/resources/specified').body } - - it { is_expected.to eq 'show specified' } - end - - context 'with get params' do - subject { connection.get('/param?a=1').body } - - before do - stubs.get('/param?a=1') { [200, {}, 'a'] } - end - - it { is_expected.to eq 'a' } - end - - describe 'ignoring unspecified get params' do - before do - stubs.get('/optional?a=1') { [200, {}, 'a'] } - end - - context 'with multiple params' do - subject { connection.get('/optional?a=1&b=1').body } - - it { is_expected.to eq 'a' } - end - - context 'with single param' do - subject { connection.get('/optional?a=1').body } - - it { is_expected.to eq 'a' } - end - - context 'without params' do - subject(:request) { connection.get('/optional') } - - it do - expect { request }.to raise_error( - Faraday::Adapter::Test::Stubs::NotFound - ) - end - end - end - - context 'with http headers' do - before do - stubs.get('/yo', 'X-HELLO' => 'hello') { [200, {}, 'a'] } - stubs.get('/yo') { [200, {}, 'b'] } - end - - context 'with header' do - subject do - connection.get('/yo') { |env| env.headers['X-HELLO'] = 'hello' }.body - end - - it { is_expected.to eq 'a' } - end - - context 'without header' do - subject do - connection.get('/yo').body - end - - it { is_expected.to eq 'b' } - end - end - - describe 'different outcomes for the same request' do - def make_request - connection.get('/foo') - end - - subject(:request) { make_request.body } - - before do - stubs.get('/foo') { [200, { 'Content-Type' => 'text/html' }, 'hello'] } - stubs.get('/foo') { [200, { 'Content-Type' => 'text/html' }, 'world'] } - end - - context 'the first request' do - it { is_expected.to eq 'hello' } - end - - context 'the second request' do - before do - make_request - end - - it { is_expected.to eq 'world' } - end - end - - describe 'yielding env to stubs' do - subject { connection.get('http://foo.com/foo?a=1').body } - - before do - stubs.get '/foo' do |env| - expect(env[:url].path).to eq '/foo' - expect(env[:url].host).to eq 'foo.com' - expect(env[:params]['a']).to eq '1' - expect(env[:request_headers]['Accept']).to eq 'text/plain' - [200, {}, 'a'] - end - - connection.headers['Accept'] = 'text/plain' - end - - it { is_expected.to eq 'a' } - end - - describe 'params parsing' do - subject { connection.get('http://foo.com/foo?a[b]=1').body } - - context 'with default encoder' do - before do - stubs.get '/foo' do |env| - expect(env[:params]['a']['b']).to eq '1' - [200, {}, 'a'] - end - end - - it { is_expected.to eq 'a' } - end - - context 'with nested encoder' do - before do - stubs.get '/foo' do |env| - expect(env[:params]['a']['b']).to eq '1' - [200, {}, 'a'] - end - - connection.options.params_encoder = Faraday::NestedParamsEncoder - end - - it { is_expected.to eq 'a' } - end - - context 'with flat encoder' do - before do - stubs.get '/foo' do |env| - expect(env[:params]['a[b]']).to eq '1' - [200, {}, 'a'] - end - - connection.options.params_encoder = Faraday::FlatParamsEncoder - end - - it { is_expected.to eq 'a' } - end - end - - describe 'raising an error if no stub was found' do - describe 'for request' do - subject(:request) { connection.get('/invalid') { [200, {}, []] } } - - it { expect { request }.to raise_error described_class::Stubs::NotFound } - end - - describe 'for specified host' do - subject(:request) { connection.get('http://domain.test/bait') } - - it { expect { request }.to raise_error described_class::Stubs::NotFound } - end - - describe 'for request without specified header' do - subject(:request) { connection.get('/yo') } - - before do - stubs.get('/yo', 'X-HELLO' => 'hello') { [200, {}, 'a'] } - end - - it { expect { request }.to raise_error described_class::Stubs::NotFound } - end - end - - describe 'for request with non default params encoder' do - let(:connection) do - Faraday.new(request: { params_encoder: Faraday::FlatParamsEncoder }) do |builder| - builder.adapter :test, stubs - end - end - let(:stubs) do - described_class::Stubs.new do |stubs| - stubs.get('/path?a=x&a=y&a=z') { [200, {}, 'a'] } - end - end - - context 'when all flat param values are correctly set' do - subject(:request) { connection.get('/path?a=x&a=y&a=z') } - - it { expect(request.status).to eq 200 } - end - - shared_examples 'raise NotFound when params do not satisfy the flat param values' do |params| - subject(:request) { connection.get('/path', params) } - - context "with #{params.inspect}" do - it { expect { request }.to raise_error described_class::Stubs::NotFound } - end - end - - it_behaves_like 'raise NotFound when params do not satisfy the flat param values', { a: %w[x] } - it_behaves_like 'raise NotFound when params do not satisfy the flat param values', { a: %w[x y] } - it_behaves_like 'raise NotFound when params do not satisfy the flat param values', { a: %w[x z y] } # NOTE: The order of the value is also compared. - it_behaves_like 'raise NotFound when params do not satisfy the flat param values', { b: %w[x y z] } - end - - describe 'strict_mode' do - let(:stubs) do - described_class::Stubs.new(strict_mode: true) do |stubs| - stubs.get('/strict?a=12&b=xy', 'Authorization' => 'Bearer m_ck', 'X-C' => 'hello') { [200, {}, 'a'] } - stubs.get('/with_user_agent?a=12&b=xy', authorization: 'Bearer m_ck', 'User-Agent' => 'My Agent') { [200, {}, 'a'] } - end - end - - context 'when params and headers are exactly set' do - subject(:request) { connection.get('/strict', { a: '12', b: 'xy' }, { authorization: 'Bearer m_ck', x_c: 'hello' }) } - - it { expect(request.status).to eq 200 } - end - - context 'when params and headers are exactly set with a custom user agent' do - subject(:request) { connection.get('/with_user_agent', { a: '12', b: 'xy' }, { authorization: 'Bearer m_ck', 'User-Agent' => 'My Agent' }) } - - it { expect(request.status).to eq 200 } - end - - shared_examples 'raise NotFound when params do not satisfy the strict check' do |params| - subject(:request) { connection.get('/strict', params, { 'Authorization' => 'Bearer m_ck', 'X-C' => 'hello' }) } - - context "with #{params.inspect}" do - it { expect { request }.to raise_error described_class::Stubs::NotFound } - end - end - - it_behaves_like 'raise NotFound when params do not satisfy the strict check', { a: '12' } - it_behaves_like 'raise NotFound when params do not satisfy the strict check', { b: 'xy' } - it_behaves_like 'raise NotFound when params do not satisfy the strict check', { a: '123', b: 'xy' } - it_behaves_like 'raise NotFound when params do not satisfy the strict check', { a: '12', b: 'xyz' } - it_behaves_like 'raise NotFound when params do not satisfy the strict check', { a: '12', b: 'xy', c: 'hello' } - it_behaves_like 'raise NotFound when params do not satisfy the strict check', { additional: 'special', a: '12', b: 'xy', c: 'hello' } - - shared_examples 'raise NotFound when headers do not satisfy the strict check' do |path, headers| - subject(:request) { connection.get(path, { a: 12, b: 'xy' }, headers) } - - context "with #{headers.inspect}" do - it { expect { request }.to raise_error described_class::Stubs::NotFound } - end - end - - it_behaves_like 'raise NotFound when headers do not satisfy the strict check', '/strict', { authorization: 'Bearer m_ck' } - it_behaves_like 'raise NotFound when headers do not satisfy the strict check', '/strict', { 'X-C' => 'hello' } - it_behaves_like 'raise NotFound when headers do not satisfy the strict check', '/strict', { authorization: 'Bearer m_ck', 'x-c': 'Hi' } - it_behaves_like 'raise NotFound when headers do not satisfy the strict check', '/strict', { authorization: 'Basic m_ck', 'x-c': 'hello' } - it_behaves_like 'raise NotFound when headers do not satisfy the strict check', '/strict', { authorization: 'Bearer m_ck', 'x-c': 'hello', x_special: 'special' } - it_behaves_like 'raise NotFound when headers do not satisfy the strict check', '/with_user_agent', { authorization: 'Bearer m_ck' } - it_behaves_like 'raise NotFound when headers do not satisfy the strict check', '/with_user_agent', { authorization: 'Bearer m_ck', user_agent: 'Unknown' } - it_behaves_like 'raise NotFound when headers do not satisfy the strict check', '/with_user_agent', { authorization: 'Bearer m_ck', user_agent: 'My Agent', x_special: 'special' } - - context 'when strict_mode is disabled' do - before do - stubs.strict_mode = false - end - - shared_examples 'does not raise NotFound even when params do not satisfy the strict check' do |params| - subject(:request) { connection.get('/strict', params, { 'Authorization' => 'Bearer m_ck', 'X-C' => 'hello' }) } - - context "with #{params.inspect}" do - it { expect(request.status).to eq 200 } - end - end - - it_behaves_like 'does not raise NotFound even when params do not satisfy the strict check', { a: '12', b: 'xy' } - it_behaves_like 'does not raise NotFound even when params do not satisfy the strict check', { a: '12', b: 'xy', c: 'hello' } - it_behaves_like 'does not raise NotFound even when params do not satisfy the strict check', { additional: 'special', a: '12', b: 'xy', c: 'hello' } - - shared_examples 'does not raise NotFound even when headers do not satisfy the strict check' do |path, headers| - subject(:request) { connection.get(path, { a: 12, b: 'xy' }, headers) } - - context "with #{headers.inspect}" do - it { expect(request.status).to eq 200 } - end - end - - it_behaves_like 'does not raise NotFound even when headers do not satisfy the strict check', '/strict', { authorization: 'Bearer m_ck', 'x-c': 'hello' } - it_behaves_like 'does not raise NotFound even when headers do not satisfy the strict check', '/strict', { authorization: 'Bearer m_ck', 'x-c': 'hello', x_special: 'special' } - it_behaves_like 'does not raise NotFound even when headers do not satisfy the strict check', '/strict', { authorization: 'Bearer m_ck', 'x-c': 'hello', user_agent: 'Special Agent' } - it_behaves_like 'does not raise NotFound even when headers do not satisfy the strict check', '/with_user_agent', { authorization: 'Bearer m_ck', user_agent: 'My Agent' } - it_behaves_like 'does not raise NotFound even when headers do not satisfy the strict check', '/with_user_agent', { authorization: 'Bearer m_ck', user_agent: 'My Agent', x_special: 'special' } - end - - describe 'body_match?' do - let(:stubs) do - described_class::Stubs.new do |stubs| - stubs.post('/no_check') { [200, {}, 'ok'] } - stubs.post('/with_string', 'abc') { [200, {}, 'ok'] } - stubs.post( - '/with_proc', - ->(request_body) { JSON.parse(request_body, symbolize_names: true) == { x: '!', a: [{ m: [{ a: true }], n: 123 }] } }, - { content_type: 'application/json' } - ) do - [200, {}, 'ok'] - end - end - end - - context 'when trying without any args for body' do - subject(:without_body) { connection.post('/no_check') } - - it { expect(without_body.status).to eq 200 } - end - - context 'when trying with string body stubs' do - subject(:with_string) { connection.post('/with_string', 'abc') } - - it { expect(with_string.status).to eq 200 } - end - - context 'when trying with proc body stubs' do - subject(:with_proc) do - connection.post('/with_proc', JSON.dump(a: [{ n: 123, m: [{ a: true }] }], x: '!'), { 'Content-Type' => 'application/json' }) - end - - it { expect(with_proc.status).to eq 200 } - end - end - end - - describe 'request timeout' do - subject(:request) do - connection.get('/sleep') do |req| - req.options.timeout = timeout - end - end - - before do - stubs.get('/sleep') do - sleep(0.01) - [200, {}, ''] - end - end - - context 'when request is within timeout' do - let(:timeout) { 1 } - - it { expect(request.status).to eq 200 } - end - - context 'when request is too slow' do - let(:timeout) { 0.001 } - - it 'raises an exception' do - expect { request }.to raise_error(Faraday::TimeoutError) - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/adapter_registry_spec.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/adapter_registry_spec.rb deleted file mode 100644 index 222e65ef..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/adapter_registry_spec.rb +++ /dev/null @@ -1,28 +0,0 @@ -# frozen_string_literal: true - -RSpec.describe Faraday::AdapterRegistry do - describe '#initialize' do - subject(:registry) { described_class.new } - - it { expect { registry.get(:FinFangFoom) }.to raise_error(NameError) } - it { expect { registry.get('FinFangFoom') }.to raise_error(NameError) } - - it 'looks up class by string name' do - expect(registry.get('Faraday::Connection')).to eq(Faraday::Connection) - end - - it 'looks up class by symbol name' do - expect(registry.get(:Faraday)).to eq(Faraday) - end - - it 'caches lookups with implicit name' do - registry.set :symbol - expect(registry.get('symbol')).to eq(:symbol) - end - - it 'caches lookups with explicit name' do - registry.set 'string', :name - expect(registry.get(:name)).to eq('string') - end - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/adapter_spec.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/adapter_spec.rb deleted file mode 100644 index 22ef1d14..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/adapter_spec.rb +++ /dev/null @@ -1,55 +0,0 @@ -# frozen_string_literal: true - -RSpec.describe Faraday::Adapter do - let(:adapter) { Faraday::Adapter.new } - let(:request) { {} } - - context '#request_timeout' do - it 'gets :read timeout' do - expect(timeout(:read)).to eq(nil) - - request[:timeout] = 5 - request[:write_timeout] = 1 - - expect(timeout(:read)).to eq(5) - - request[:read_timeout] = 2 - - expect(timeout(:read)).to eq(2) - end - - it 'gets :open timeout' do - expect(timeout(:open)).to eq(nil) - - request[:timeout] = 5 - request[:write_timeout] = 1 - - expect(timeout(:open)).to eq(5) - - request[:open_timeout] = 2 - - expect(timeout(:open)).to eq(2) - end - - it 'gets :write timeout' do - expect(timeout(:write)).to eq(nil) - - request[:timeout] = 5 - request[:read_timeout] = 1 - - expect(timeout(:write)).to eq(5) - - request[:write_timeout] = 2 - - expect(timeout(:write)).to eq(2) - end - - it 'attempts unknown timeout type' do - expect { timeout(:unknown) }.to raise_error(ArgumentError) - end - - def timeout(type) - adapter.send(:request_timeout, type, request) - end - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/connection_spec.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/connection_spec.rb deleted file mode 100644 index d4ccb23d..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/connection_spec.rb +++ /dev/null @@ -1,808 +0,0 @@ -# frozen_string_literal: true - -class CustomEncoder - def encode(params) - params.map { |k, v| "#{k.upcase}-#{v.to_s.upcase}" }.join(',') - end - - def decode(params) - params.split(',').to_h { |pair| pair.split('-') } - end -end - -shared_examples 'initializer with url' do - context 'with simple url' do - let(:address) { 'http://httpbingo.org' } - - it { expect(subject.host).to eq('httpbingo.org') } - it { expect(subject.port).to eq(80) } - it { expect(subject.scheme).to eq('http') } - it { expect(subject.path_prefix).to eq('/') } - it { expect(subject.params).to eq({}) } - end - - context 'with complex url' do - let(:address) { 'http://httpbingo.org:815/fish?a=1' } - - it { expect(subject.port).to eq(815) } - it { expect(subject.path_prefix).to eq('/fish') } - it { expect(subject.params).to eq('a' => '1') } - end - - context 'with IPv6 address' do - let(:address) { 'http://[::1]:85/' } - - it { expect(subject.host).to eq('[::1]') } - it { expect(subject.port).to eq(85) } - end -end - -shared_examples 'default connection options' do - after { Faraday.default_connection_options = nil } - - it 'works with implicit url' do - conn = Faraday.new 'http://httpbingo.org/foo' - expect(conn.options.timeout).to eq(10) - end - - it 'works with option url' do - conn = Faraday.new url: 'http://httpbingo.org/foo' - expect(conn.options.timeout).to eq(10) - end - - it 'works with instance connection options' do - conn = Faraday.new 'http://httpbingo.org/foo', request: { open_timeout: 1 } - expect(conn.options.timeout).to eq(10) - expect(conn.options.open_timeout).to eq(1) - end - - it 'default connection options persist with an instance overriding' do - conn = Faraday.new 'http://nigiri.com/bar' - conn.options.timeout = 1 - expect(Faraday.default_connection_options.request.timeout).to eq(10) - - other = Faraday.new url: 'https://httpbingo.org/foo' - other.options.timeout = 1 - - expect(Faraday.default_connection_options.request.timeout).to eq(10) - end - - it 'default connection uses default connection options' do - expect(Faraday.default_connection.options.timeout).to eq(10) - end -end - -RSpec.describe Faraday::Connection do - let(:conn) { Faraday::Connection.new(url, options) } - let(:url) { nil } - let(:options) { nil } - - describe '.new' do - subject { conn } - - context 'with implicit url param' do - # Faraday::Connection.new('http://httpbingo.org') - let(:url) { address } - - it_behaves_like 'initializer with url' - end - - context 'with explicit url param' do - # Faraday::Connection.new(url: 'http://httpbingo.org') - let(:url) { { url: address } } - - it_behaves_like 'initializer with url' - end - - context 'with custom builder' do - let(:custom_builder) { Faraday::RackBuilder.new } - let(:options) { { builder: custom_builder } } - - it { expect(subject.builder).to eq(custom_builder) } - end - - context 'with custom params' do - let(:options) { { params: { a: 1 } } } - - it { expect(subject.params).to eq('a' => 1) } - end - - context 'with custom params and params in url' do - let(:url) { 'http://httpbingo.org/fish?a=1&b=2' } - let(:options) { { params: { a: 3 } } } - it { expect(subject.params).to eq('a' => 3, 'b' => '2') } - end - - context 'with basic_auth in url' do - let(:url) { 'http://Aladdin:open%20sesame@httpbingo.org/fish' } - - it { expect(subject.headers['Authorization']).to eq('Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==') } - end - - context 'with custom headers' do - let(:options) { { headers: { user_agent: 'Faraday' } } } - - it { expect(subject.headers['User-agent']).to eq('Faraday') } - end - - context 'with ssl false' do - let(:options) { { ssl: { verify: false } } } - - it { expect(subject.ssl.verify?).to be_falsey } - end - - context 'with verify_hostname false' do - let(:options) { { ssl: { verify_hostname: false } } } - - it { expect(subject.ssl.verify_hostname?).to be_falsey } - end - - context 'with empty block' do - let(:conn) { Faraday::Connection.new {} } - - it { expect(conn.builder.handlers.size).to eq(0) } - end - - context 'with block' do - let(:conn) do - Faraday::Connection.new(params: { 'a' => '1' }) do |faraday| - faraday.adapter :test - faraday.url_prefix = 'http://httpbingo.org/omnom' - end - end - - it { expect(conn.builder.handlers.size).to eq(0) } - it { expect(conn.path_prefix).to eq('/omnom') } - end - end - - describe '#close' do - before { Faraday.default_adapter = :test } - after { Faraday.default_adapter = nil } - - it 'can close underlying app' do - expect(conn.app).to receive(:close) - conn.close - end - end - - describe '#build_exclusive_url' do - context 'with relative path' do - subject { conn.build_exclusive_url('sake.html') } - - it 'uses connection host as default host' do - conn.host = 'httpbingo.org' - expect(subject.host).to eq('httpbingo.org') - expect(subject.scheme).to eq('http') - end - - it do - conn.path_prefix = '/fish' - expect(subject.path).to eq('/fish/sake.html') - end - - it do - conn.path_prefix = '/' - expect(subject.path).to eq('/sake.html') - end - - it do - conn.path_prefix = 'fish' - expect(subject.path).to eq('/fish/sake.html') - end - - it do - conn.path_prefix = '/fish/' - expect(subject.path).to eq('/fish/sake.html') - end - end - - context 'with absolute path' do - subject { conn.build_exclusive_url('/sake.html') } - - after { expect(subject.path).to eq('/sake.html') } - - it { conn.path_prefix = '/fish' } - it { conn.path_prefix = '/' } - it { conn.path_prefix = 'fish' } - it { conn.path_prefix = '/fish/' } - end - - context 'with complete url' do - subject { conn.build_exclusive_url('http://httpbingo.org/sake.html?a=1') } - - it { expect(subject.scheme).to eq('http') } - it { expect(subject.host).to eq('httpbingo.org') } - it { expect(subject.port).to eq(80) } - it { expect(subject.path).to eq('/sake.html') } - it { expect(subject.query).to eq('a=1') } - end - - it 'overrides connection port for absolute url' do - conn.port = 23 - uri = conn.build_exclusive_url('http://httpbingo.org') - expect(uri.port).to eq(80) - end - - it 'does not add ending slash given nil url' do - conn.url_prefix = 'http://httpbingo.org/nigiri' - uri = conn.build_exclusive_url - expect(uri.path).to eq('/nigiri') - end - - it 'does not add ending slash given empty url' do - conn.url_prefix = 'http://httpbingo.org/nigiri' - uri = conn.build_exclusive_url('') - expect(uri.path).to eq('/nigiri') - end - - it 'does not use connection params' do - conn.url_prefix = 'http://httpbingo.org/nigiri' - conn.params = { a: 1 } - expect(conn.build_exclusive_url.to_s).to eq('http://httpbingo.org/nigiri') - end - - it 'allows to provide params argument' do - conn.url_prefix = 'http://httpbingo.org/nigiri' - conn.params = { a: 1 } - params = Faraday::Utils::ParamsHash.new - params[:a] = 2 - uri = conn.build_exclusive_url(nil, params) - expect(uri.to_s).to eq('http://httpbingo.org/nigiri?a=2') - end - - it 'handles uri instances' do - uri = conn.build_exclusive_url(URI('/sake.html')) - expect(uri.path).to eq('/sake.html') - end - - it 'always returns new URI instance' do - conn.url_prefix = 'http://httpbingo.org' - uri1 = conn.build_exclusive_url(nil) - uri2 = conn.build_exclusive_url(nil) - expect(uri1).not_to equal(uri2) - end - - context 'with url_prefixed connection' do - let(:url) { 'http://httpbingo.org/get/' } - - it 'parses url and changes scheme' do - conn.scheme = 'https' - uri = conn.build_exclusive_url('sake.html') - expect(uri.to_s).to eq('https://httpbingo.org/get/sake.html') - end - - it 'joins url to base with ending slash' do - uri = conn.build_exclusive_url('sake.html') - expect(uri.to_s).to eq('http://httpbingo.org/get/sake.html') - end - - it 'used default base with ending slash' do - uri = conn.build_exclusive_url - expect(uri.to_s).to eq('http://httpbingo.org/get/') - end - - it 'overrides base' do - uri = conn.build_exclusive_url('/sake/') - expect(uri.to_s).to eq('http://httpbingo.org/sake/') - end - end - - context 'with colon in path' do - let(:url) { 'http://service.com' } - - it 'joins url to base when used absolute path' do - conn = Faraday.new(url: url) - uri = conn.build_exclusive_url('/service:search?limit=400') - expect(uri.to_s).to eq('http://service.com/service:search?limit=400') - end - - it 'joins url to base when used relative path' do - conn = Faraday.new(url: url) - uri = conn.build_exclusive_url('service:search?limit=400') - expect(uri.to_s).to eq('http://service.com/service%3Asearch?limit=400') - end - - it 'joins url to base when used with path prefix' do - conn = Faraday.new(url: url) - conn.path_prefix = '/api' - uri = conn.build_exclusive_url('service:search?limit=400') - expect(uri.to_s).to eq('http://service.com/api/service%3Asearch?limit=400') - end - end - - context 'with a custom `default_uri_parser`' do - let(:url) { 'http://httpbingo.org' } - let(:parser) { Addressable::URI } - - around do |example| - with_default_uri_parser(parser) do - example.run - end - end - - it 'does not raise error' do - expect { conn.build_exclusive_url('/nigiri') }.not_to raise_error - end - end - end - - describe '#build_url' do - let(:url) { 'http://httpbingo.org/nigiri' } - - it 'uses params' do - conn.params = { a: 1, b: 1 } - expect(conn.build_url.to_s).to eq('http://httpbingo.org/nigiri?a=1&b=1') - end - - it 'merges params' do - conn.params = { a: 1, b: 1 } - url = conn.build_url(nil, b: 2, c: 3) - expect(url.to_s).to eq('http://httpbingo.org/nigiri?a=1&b=2&c=3') - end - end - - describe '#build_request' do - let(:url) { 'https://ahttpbingo.org/sake.html' } - let(:request) { conn.build_request(:get) } - - before do - conn.headers = { 'Authorization' => 'token abc123' } - request.headers.delete('Authorization') - end - - it { expect(conn.headers.keys).to eq(['Authorization']) } - it { expect(conn.headers.include?('Authorization')).to be_truthy } - it { expect(request.headers.keys).to be_empty } - it { expect(request.headers.include?('Authorization')).to be_falsey } - end - - describe '#to_env' do - subject { conn.build_request(:get).to_env(conn).url } - - let(:url) { 'http://httpbingo.org/sake.html' } - let(:options) { { params: @params } } - - it 'parses url params into query' do - @params = { 'a[b]' => '1 + 2' } - expect(subject.query).to eq('a%5Bb%5D=1+%2B+2') - end - - it 'escapes per spec' do - @params = { 'a' => '1+2 foo~bar.-baz' } - expect(subject.query).to eq('a=1%2B2+foo~bar.-baz') - end - - it 'bracketizes nested params in query' do - @params = { 'a' => { 'b' => 'c' } } - expect(subject.query).to eq('a%5Bb%5D=c') - end - - it 'bracketizes repeated params in query' do - @params = { 'a' => [1, 2] } - expect(subject.query).to eq('a%5B%5D=1&a%5B%5D=2') - end - - it 'without braketizing repeated params in query' do - @params = { 'a' => [1, 2] } - conn.options.params_encoder = Faraday::FlatParamsEncoder - expect(subject.query).to eq('a=1&a=2') - end - end - - describe 'proxy support' do - it 'accepts string' do - with_env 'http_proxy' => 'http://env-proxy.com:80' do - conn.proxy = 'http://proxy.com' - expect(conn.proxy.host).to eq('proxy.com') - end - end - - it 'accepts uri' do - with_env 'http_proxy' => 'http://env-proxy.com:80' do - conn.proxy = URI.parse('http://proxy.com') - expect(conn.proxy.host).to eq('proxy.com') - end - end - - it 'accepts hash with string uri' do - with_env 'http_proxy' => 'http://env-proxy.com:80' do - conn.proxy = { uri: 'http://proxy.com', user: 'rick' } - expect(conn.proxy.host).to eq('proxy.com') - expect(conn.proxy.user).to eq('rick') - end - end - - it 'accepts hash' do - with_env 'http_proxy' => 'http://env-proxy.com:80' do - conn.proxy = { uri: URI.parse('http://proxy.com'), user: 'rick' } - expect(conn.proxy.host).to eq('proxy.com') - expect(conn.proxy.user).to eq('rick') - end - end - - it 'accepts http env' do - with_env 'http_proxy' => 'http://env-proxy.com:80' do - expect(conn.proxy.host).to eq('env-proxy.com') - end - end - - it 'accepts http env with auth' do - with_env 'http_proxy' => 'http://a%40b:my%20pass@proxy.com:80' do - expect(conn.proxy.user).to eq('a@b') - expect(conn.proxy.password).to eq('my pass') - end - end - - it 'accepts env without scheme' do - with_env 'http_proxy' => 'localhost:8888' do - uri = conn.proxy[:uri] - expect(uri.host).to eq('localhost') - expect(uri.port).to eq(8888) - end - end - - it 'fetches no proxy from nil env' do - with_env 'http_proxy' => nil do - expect(conn.proxy).to be_nil - end - end - - it 'fetches no proxy from blank env' do - with_env 'http_proxy' => '' do - expect(conn.proxy).to be_nil - end - end - - it 'does not accept uppercase env' do - with_env 'HTTP_PROXY' => 'http://localhost:8888/' do - expect(conn.proxy).to be_nil - end - end - - it 'allows when url in no proxy list' do - with_env 'http_proxy' => 'http://proxy.com', 'no_proxy' => 'example.com' do - conn = Faraday::Connection.new('http://example.com') - expect(conn.proxy).to be_nil - end - end - - it 'allows when url in no proxy list with url_prefix' do - with_env 'http_proxy' => 'http://proxy.com', 'no_proxy' => 'example.com' do - conn = Faraday::Connection.new - conn.url_prefix = 'http://example.com' - expect(conn.proxy).to be_nil - end - end - - it 'allows when prefixed url is not in no proxy list' do - with_env 'http_proxy' => 'http://proxy.com', 'no_proxy' => 'example.com' do - conn = Faraday::Connection.new('http://prefixedexample.com') - expect(conn.proxy.host).to eq('proxy.com') - end - end - - it 'allows when subdomain url is in no proxy list' do - with_env 'http_proxy' => 'http://proxy.com', 'no_proxy' => 'example.com' do - conn = Faraday::Connection.new('http://subdomain.example.com') - expect(conn.proxy).to be_nil - end - end - - it 'allows when url not in no proxy list' do - with_env 'http_proxy' => 'http://proxy.com', 'no_proxy' => 'example2.com' do - conn = Faraday::Connection.new('http://example.com') - expect(conn.proxy.host).to eq('proxy.com') - end - end - - it 'allows when ip address is not in no proxy list but url is' do - with_env 'http_proxy' => 'http://proxy.com', 'no_proxy' => 'localhost' do - conn = Faraday::Connection.new('http://127.0.0.1') - expect(conn.proxy).to be_nil - end - end - - it 'allows when url is not in no proxy list but ip address is' do - with_env 'http_proxy' => 'http://proxy.com', 'no_proxy' => '127.0.0.1' do - conn = Faraday::Connection.new('http://localhost') - expect(conn.proxy).to be_nil - end - end - - it 'allows in multi element no proxy list' do - with_env 'http_proxy' => 'http://proxy.com', 'no_proxy' => 'example0.com,example.com,example1.com' do - expect(Faraday::Connection.new('http://example0.com').proxy).to be_nil - expect(Faraday::Connection.new('http://example.com').proxy).to be_nil - expect(Faraday::Connection.new('http://example1.com').proxy).to be_nil - expect(Faraday::Connection.new('http://example2.com').proxy.host).to eq('proxy.com') - end - end - - it 'test proxy requires uri' do - expect { conn.proxy = { uri: :bad_uri, user: 'rick' } }.to raise_error(ArgumentError) - end - - it 'uses env http_proxy' do - with_env 'http_proxy' => 'http://proxy.com' do - conn = Faraday.new - expect(conn.instance_variable_get(:@manual_proxy)).to be_falsey - expect(conn.proxy_for_request('http://google.co.uk').host).to eq('proxy.com') - end - end - - it 'uses processes no_proxy before http_proxy' do - with_env 'http_proxy' => 'http://proxy.com', 'no_proxy' => 'google.co.uk' do - conn = Faraday.new - expect(conn.instance_variable_get(:@manual_proxy)).to be_falsey - expect(conn.proxy_for_request('http://google.co.uk')).to be_nil - end - end - - it 'uses env https_proxy' do - with_env 'https_proxy' => 'https://proxy.com' do - conn = Faraday.new - expect(conn.instance_variable_get(:@manual_proxy)).to be_falsey - expect(conn.proxy_for_request('https://google.co.uk').host).to eq('proxy.com') - end - end - - it 'uses processes no_proxy before https_proxy' do - with_env 'https_proxy' => 'https://proxy.com', 'no_proxy' => 'google.co.uk' do - conn = Faraday.new - expect(conn.instance_variable_get(:@manual_proxy)).to be_falsey - expect(conn.proxy_for_request('https://google.co.uk')).to be_nil - end - end - - it 'gives priority to manually set proxy' do - with_env 'https_proxy' => 'https://proxy.com', 'no_proxy' => 'google.co.uk' do - conn = Faraday.new - conn.proxy = 'http://proxy2.com' - - expect(conn.instance_variable_get(:@manual_proxy)).to be_truthy - expect(conn.proxy_for_request('https://google.co.uk').host).to eq('proxy2.com') - end - end - - it 'ignores env proxy if set that way' do - with_env_proxy_disabled do - with_env 'http_proxy' => 'http://duncan.proxy.com:80' do - expect(conn.proxy).to be_nil - end - end - end - - context 'performing a request' do - let(:url) { 'http://example.com' } - let(:conn) do - Faraday.new do |f| - f.adapter :test do |stubs| - stubs.get(url) do - [200, {}, 'ok'] - end - end - end - end - - it 'dynamically checks proxy' do - with_env 'http_proxy' => 'http://proxy.com:80' do - expect(conn.proxy.uri.host).to eq('proxy.com') - - conn.get(url) do |req| - expect(req.options.proxy.uri.host).to eq('proxy.com') - end - end - - conn.get(url) - expect(conn.instance_variable_get(:@temp_proxy)).to be_nil - end - - it 'dynamically check no proxy' do - with_env 'http_proxy' => 'http://proxy.com', 'no_proxy' => 'example.com' do - expect(conn.proxy.uri.host).to eq('proxy.com') - - conn.get('http://example.com') do |req| - expect(req.options.proxy).to be_nil - end - end - end - end - end - - describe '#dup' do - subject { conn.dup } - - let(:url) { 'http://httpbingo.org/foo' } - let(:options) do - { - ssl: { verify: :none }, - headers: { 'content-type' => 'text/plain' }, - params: { 'a' => '1' }, - request: { timeout: 5 } - } - end - - it { expect(subject.build_exclusive_url).to eq(conn.build_exclusive_url) } - it { expect(subject.headers['content-type']).to eq('text/plain') } - it { expect(subject.params['a']).to eq('1') } - - context 'after manual changes' do - before do - subject.headers['content-length'] = 12 - subject.params['b'] = '2' - subject.options[:open_timeout] = 10 - end - - it { expect(subject.builder.handlers.size).to eq(1) } - it { expect(conn.builder.handlers.size).to eq(1) } - it { expect(conn.headers.key?('content-length')).to be_falsey } - it { expect(conn.params.key?('b')).to be_falsey } - it { expect(subject.options[:timeout]).to eq(5) } - it { expect(conn.options[:open_timeout]).to be_nil } - end - end - - describe '#respond_to?' do - it { expect(Faraday.respond_to?(:get)).to be_truthy } - it { expect(Faraday.respond_to?(:post)).to be_truthy } - end - - describe 'default_connection_options' do - context 'assigning a default value' do - before do - Faraday.default_connection_options = nil - Faraday.default_connection_options.request.timeout = 10 - end - - it_behaves_like 'default connection options' - end - - context 'assigning a hash' do - before { Faraday.default_connection_options = { request: { timeout: 10 } } } - - it_behaves_like 'default connection options' - end - - context 'preserving a user_agent assigned via default_conncetion_options' do - around do |example| - old = Faraday.default_connection_options - Faraday.default_connection_options = { headers: { user_agent: 'My Agent 1.2' } } - example.run - Faraday.default_connection_options = old - end - - context 'when url is a Hash' do - let(:conn) { Faraday.new(url: 'http://example.co', headers: { 'CustomHeader' => 'CustomValue' }) } - - it { expect(conn.headers).to eq('CustomHeader' => 'CustomValue', 'User-Agent' => 'My Agent 1.2') } - end - - context 'when url is a String' do - let(:conn) { Faraday.new('http://example.co', headers: { 'CustomHeader' => 'CustomValue' }) } - - it { expect(conn.headers).to eq('CustomHeader' => 'CustomValue', 'User-Agent' => 'My Agent 1.2') } - end - end - end - - describe 'request params' do - context 'with simple url' do - let(:url) { 'http://example.com' } - let(:stubs) { Faraday::Adapter::Test::Stubs.new } - - before do - conn.adapter(:test, stubs) - stubs.get('http://example.com?a=a&p=3') do - [200, {}, 'ok'] - end - end - - after { stubs.verify_stubbed_calls } - - it 'test_overrides_request_params' do - conn.get('?p=2&a=a', p: 3) - end - - it 'test_overrides_request_params_block' do - conn.get('?p=1&a=a', p: 2) do |req| - req.params[:p] = 3 - end - end - - it 'test_overrides_request_params_block_url' do - conn.get(nil, p: 2) do |req| - req.url('?p=1&a=a', 'p' => 3) - end - end - end - - context 'with url and extra params' do - let(:url) { 'http://example.com?a=1&b=2' } - let(:options) { { params: { c: 3 } } } - let(:stubs) { Faraday::Adapter::Test::Stubs.new } - - before do - conn.adapter(:test, stubs) - end - - it 'merges connection and request params' do - expected = 'http://example.com?a=1&b=2&c=3&limit=5&page=1' - stubs.get(expected) { [200, {}, 'ok'] } - conn.get('?page=1', limit: 5) - stubs.verify_stubbed_calls - end - - it 'allows to override all params' do - expected = 'http://example.com?b=b' - stubs.get(expected) { [200, {}, 'ok'] } - conn.get('?p=1&a=a', p: 2) do |req| - expect(req.params[:a]).to eq('a') - expect(req.params['c']).to eq(3) - expect(req.params['p']).to eq(2) - req.params = { b: 'b' } - expect(req.params['b']).to eq('b') - end - stubs.verify_stubbed_calls - end - - it 'allows to set params_encoder for single request' do - encoder = CustomEncoder.new - expected = 'http://example.com/?A-1,B-2,C-3,FEELING-BLUE' - stubs.get(expected) { [200, {}, 'ok'] } - - conn.get('/', a: 1, b: 2, c: 3, feeling: 'blue') do |req| - req.options.params_encoder = encoder - end - stubs.verify_stubbed_calls - end - end - - context 'with default params encoder' do - let(:stubs) { Faraday::Adapter::Test::Stubs.new } - - before do - conn.adapter(:test, stubs) - stubs.get('http://example.com?color%5B%5D=blue&color%5B%5D=red') do - [200, {}, 'ok'] - end - end - - after { stubs.verify_stubbed_calls } - - it 'supports array params in url' do - conn.get('http://example.com?color[]=blue&color[]=red') - end - - it 'supports array params in params' do - conn.get('http://example.com', color: %w[blue red]) - end - end - - context 'with flat params encoder' do - let(:options) { { request: { params_encoder: Faraday::FlatParamsEncoder } } } - let(:stubs) { Faraday::Adapter::Test::Stubs.new } - - before do - conn.adapter(:test, stubs) - stubs.get('http://example.com?color=blue&color=red') do - [200, {}, 'ok'] - end - end - - after { stubs.verify_stubbed_calls } - - it 'supports array params in params' do - conn.get('http://example.com', color: %w[blue red]) - end - - context 'with array param in url' do - let(:url) { 'http://example.com?color[]=blue&color[]=red' } - - it do - conn.get('/') - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/error_spec.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/error_spec.rb deleted file mode 100644 index fd30e2d3..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/error_spec.rb +++ /dev/null @@ -1,85 +0,0 @@ -# frozen_string_literal: true - -RSpec.describe Faraday::Error do - describe '.initialize' do - subject { described_class.new(exception, response) } - let(:response) { nil } - - context 'with exception only' do - let(:exception) { RuntimeError.new('test') } - - it { expect(subject.wrapped_exception).to eq(exception) } - it { expect(subject.response).to be_nil } - it { expect(subject.message).to eq(exception.message) } - it { expect(subject.backtrace).to eq(exception.backtrace) } - it { expect(subject.inspect).to eq('#>') } - it { expect(subject.response_status).to be_nil } - it { expect(subject.response_headers).to be_nil } - it { expect(subject.response_body).to be_nil } - end - - context 'with response hash' do - let(:exception) { { status: 400 } } - - it { expect(subject.wrapped_exception).to be_nil } - it { expect(subject.response).to eq(exception) } - it { expect(subject.message).to eq('the server responded with status 400') } - it { expect(subject.inspect).to eq('#400}>') } - it { expect(subject.response_status).to eq(400) } - it { expect(subject.response_headers).to be_nil } - it { expect(subject.response_body).to be_nil } - end - - context 'with string' do - let(:exception) { 'custom message' } - - it { expect(subject.wrapped_exception).to be_nil } - it { expect(subject.response).to be_nil } - it { expect(subject.message).to eq('custom message') } - it { expect(subject.inspect).to eq('#>') } - it { expect(subject.response_status).to be_nil } - it { expect(subject.response_headers).to be_nil } - it { expect(subject.response_body).to be_nil } - end - - context 'with anything else #to_s' do - let(:exception) { %w[error1 error2] } - - it { expect(subject.wrapped_exception).to be_nil } - it { expect(subject.response).to be_nil } - it { expect(subject.message).to eq('["error1", "error2"]') } - it { expect(subject.inspect).to eq('#>') } - it { expect(subject.response_status).to be_nil } - it { expect(subject.response_headers).to be_nil } - it { expect(subject.response_body).to be_nil } - end - - context 'with exception string and response hash' do - let(:exception) { 'custom message' } - let(:response) { { status: 400 } } - - it { expect(subject.wrapped_exception).to be_nil } - it { expect(subject.response).to eq(response) } - it { expect(subject.message).to eq('custom message') } - it { expect(subject.inspect).to eq('#400}>') } - it { expect(subject.response_status).to eq(400) } - it { expect(subject.response_headers).to be_nil } - it { expect(subject.response_body).to be_nil } - end - - context 'with exception and response object' do - let(:exception) { RuntimeError.new('test') } - let(:body) { { test: 'test' } } - let(:headers) { { 'Content-Type' => 'application/json' } } - let(:response) { Faraday::Response.new(status: 400, response_headers: headers, response_body: body) } - - it { expect(subject.wrapped_exception).to eq(exception) } - it { expect(subject.response).to eq(response) } - it { expect(subject.message).to eq(exception.message) } - it { expect(subject.backtrace).to eq(exception.backtrace) } - it { expect(subject.response_status).to eq(400) } - it { expect(subject.response_headers).to eq(headers) } - it { expect(subject.response_body).to eq(body) } - end - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/middleware_registry_spec.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/middleware_registry_spec.rb deleted file mode 100644 index a8fa7cc7..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/middleware_registry_spec.rb +++ /dev/null @@ -1,31 +0,0 @@ -# frozen_string_literal: true - -RSpec.describe Faraday::MiddlewareRegistry do - before do - stub_const('CustomMiddleware', custom_middleware_klass) - end - let(:custom_middleware_klass) { Class.new(Faraday::Middleware) } - let(:dummy) { Class.new { extend Faraday::MiddlewareRegistry } } - - after { dummy.unregister_middleware(:custom) } - - it 'allows to register with constant' do - dummy.register_middleware(custom: custom_middleware_klass) - expect(dummy.lookup_middleware(:custom)).to eq(custom_middleware_klass) - end - - it 'allows to register with symbol' do - dummy.register_middleware(custom: :CustomMiddleware) - expect(dummy.lookup_middleware(:custom)).to eq(custom_middleware_klass) - end - - it 'allows to register with string' do - dummy.register_middleware(custom: 'CustomMiddleware') - expect(dummy.lookup_middleware(:custom)).to eq(custom_middleware_klass) - end - - it 'allows to register with Proc' do - dummy.register_middleware(custom: -> { custom_middleware_klass }) - expect(dummy.lookup_middleware(:custom)).to eq(custom_middleware_klass) - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/middleware_spec.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/middleware_spec.rb deleted file mode 100644 index f5cc2a11..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/middleware_spec.rb +++ /dev/null @@ -1,70 +0,0 @@ -# frozen_string_literal: true - -RSpec.describe Faraday::Middleware do - subject { described_class.new(app) } - let(:app) { double } - - describe 'options' do - context 'when options are passed to the middleware' do - subject { described_class.new(app, options) } - let(:options) { { field: 'value' } } - - it 'accepts options when initialized' do - expect(subject.options[:field]).to eq('value') - end - end - end - - describe '#on_request' do - subject do - Class.new(described_class) do - def on_request(env) - # do nothing - end - end.new(app) - end - - it 'is called by #call' do - expect(app).to receive(:call).and_return(app) - expect(app).to receive(:on_complete) - is_expected.to receive(:call).and_call_original - is_expected.to receive(:on_request) - subject.call(double) - end - end - - describe '#on_error' do - subject do - Class.new(described_class) do - def on_error(error) - # do nothing - end - end.new(app) - end - - it 'is called by #call' do - expect(app).to receive(:call).and_raise(Faraday::ConnectionFailed) - is_expected.to receive(:call).and_call_original - is_expected.to receive(:on_error) - - expect { subject.call(double) }.to raise_error(Faraday::ConnectionFailed) - end - end - - describe '#close' do - context "with app that doesn't support \#close" do - it 'should issue warning' do - is_expected.to receive(:warn) - subject.close - end - end - - context "with app that supports \#close" do - it 'should issue warning' do - expect(app).to receive(:close) - is_expected.to_not receive(:warn) - subject.close - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/options/env_spec.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/options/env_spec.rb deleted file mode 100644 index 006bd5fb..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/options/env_spec.rb +++ /dev/null @@ -1,76 +0,0 @@ -# frozen_string_literal: true - -RSpec.describe Faraday::Env do - subject(:env) { described_class.new } - - it 'allows to access members' do - expect(env.method).to be_nil - env.method = :get - expect(env.method).to eq(:get) - end - - it 'allows to access symbol non members' do - expect(env[:custom]).to be_nil - env[:custom] = :boom - expect(env[:custom]).to eq(:boom) - end - - it 'allows to access string non members' do - expect(env['custom']).to be_nil - env['custom'] = :boom - expect(env['custom']).to eq(:boom) - end - - it 'ignores false when fetching' do - ssl = Faraday::SSLOptions.new - ssl.verify = false - expect(ssl.fetch(:verify, true)).to be_falsey - end - - it 'handle verify_hostname when fetching' do - ssl = Faraday::SSLOptions.new - ssl.verify_hostname = true - expect(ssl.fetch(:verify_hostname, false)).to be_truthy - end - - it 'retains custom members' do - env[:foo] = 'custom 1' - env[:bar] = :custom2 - env2 = Faraday::Env.from(env) - env2[:baz] = 'custom 3' - - expect(env2[:foo]).to eq('custom 1') - expect(env2[:bar]).to eq(:custom2) - expect(env[:baz]).to be_nil - end - - describe '#body' do - subject(:env) { described_class.from(body: { foo: 'bar' }) } - - context 'when response is not finished yet' do - it 'returns the request body' do - expect(env.body).to eq(foo: 'bar') - end - end - - context 'when response is finished' do - before do - env.status = 200 - env.body = { bar: 'foo' } - env.response = Faraday::Response.new(env) - end - - it 'returns the response body' do - expect(env.body).to eq(bar: 'foo') - end - - it 'allows to access request_body' do - expect(env.request_body).to eq(foo: 'bar') - end - - it 'allows to access response_body' do - expect(env.response_body).to eq(bar: 'foo') - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/options/options_spec.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/options/options_spec.rb deleted file mode 100644 index fc0b117a..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/options/options_spec.rb +++ /dev/null @@ -1,297 +0,0 @@ -# frozen_string_literal: true - -RSpec.describe Faraday::Options do - SubOptions = Class.new(Faraday::Options.new(:sub_a, :sub_b)) - ParentOptions = Faraday::Options.new(:a, :b, :c) do - options c: SubOptions - end - - describe '#merge' do - it 'merges options with hashes' do - options = ParentOptions.new(1) - expect(options.a).to eq(1) - expect(options.b).to be_nil - - dup = options.merge a: 2, b: 3 - expect(dup.a).to eq(2) - expect(dup.b).to eq(3) - expect(options.a).to eq(1) - expect(options.b).to be_nil - end - - it 'deeply merges two options' do - sub_opts1 = SubOptions.from(sub_a: 3) - sub_opts2 = SubOptions.from(sub_b: 4) - opt1 = ParentOptions.from(a: 1, c: sub_opts1) - opt2 = ParentOptions.from(b: 2, c: sub_opts2) - - merged = opt1.merge(opt2) - - expected_sub_opts = SubOptions.from(sub_a: 3, sub_b: 4) - expected = ParentOptions.from(a: 1, b: 2, c: expected_sub_opts) - expect(merged).to eq(expected) - end - - it 'deeply merges options with hashes' do - sub_opts1 = SubOptions.from(sub_a: 3) - sub_opts2 = { sub_b: 4 } - opt1 = ParentOptions.from(a: 1, c: sub_opts1) - opt2 = { b: 2, c: sub_opts2 } - - merged = opt1.merge(opt2) - - expected_sub_opts = SubOptions.from(sub_a: 3, sub_b: 4) - expected = ParentOptions.from(a: 1, b: 2, c: expected_sub_opts) - expect(merged).to eq(expected) - end - - it 'deeply merges options with nil' do - sub_opts = SubOptions.new(3, 4) - options = ParentOptions.new(1, 2, sub_opts) - expect(options.a).to eq(1) - expect(options.b).to eq(2) - expect(options.c.sub_a).to eq(3) - expect(options.c.sub_b).to eq(4) - - options2 = ParentOptions.from(b: 5, c: nil) - - merged = options.merge(options2) - - expect(merged.b).to eq(5) - expect(merged.c).to eq(sub_opts) - end - - it 'deeply merges options with options having nil sub-options' do - options = ParentOptions.from(a: 1) - - sub_opts = SubOptions.new(3, 4) - options2 = ParentOptions.from(b: 2, c: sub_opts) - - expect(options.a).to eq(1) - expect(options2.b).to eq(2) - expect(options2.c.sub_a).to eq(3) - expect(options2.c.sub_b).to eq(4) - - merged = options.merge(options2) - - expect(merged.c).to eq(sub_opts) - end - - describe '#dup' do - it 'duplicate options but not sub-options' do - sub_opts = SubOptions.from(sub_a: 3) - opts = ParentOptions.from(b: 1, c: sub_opts) - - duped = opts.dup - duped.b = 2 - duped.c.sub_a = 4 - - expect(opts.b).to eq(1) - expect(opts.c.sub_a).to eq(4) - end - end - - describe '#deep_dup' do - it 'duplicate options and also suboptions' do - sub_opts = SubOptions.from(sub_a: 3) - opts = ParentOptions.from(b: 1, c: sub_opts) - - duped = opts.deep_dup - duped.b = 2 - duped.c.sub_a = 4 - - expect(opts.b).to eq(1) - expect(opts.c.sub_a).to eq(3) - end - end - - describe '#clear' do - it 'clears the options' do - options = SubOptions.new(1) - expect(options.empty?).not_to be_truthy - options.clear - expect(options.empty?).to be_truthy - end - end - - describe '#empty?' do - it 'returns true only if all options are nil' do - options = SubOptions.new - expect(options.empty?).to be_truthy - options.sub_a = 1 - expect(options.empty?).not_to be_truthy - options.delete(:sub_a) - expect(options.empty?).to be_truthy - end - end - - describe '#each_key' do - it 'allows to iterate through keys' do - options = ParentOptions.new(1, 2, 3) - enum = options.each_key - expect(enum.next.to_sym).to eq(:a) - expect(enum.next.to_sym).to eq(:b) - expect(enum.next.to_sym).to eq(:c) - end - end - - describe '#key?' do - it 'returns true if the key exists and is not nil' do - options = SubOptions.new - expect(options.key?(:sub_a)).not_to be_truthy - options.sub_a = 1 - expect(options.key?(:sub_a)).to be_truthy - end - end - - describe '#each_value' do - it 'allows to iterate through values' do - options = ParentOptions.new(1, 2, 3) - enum = options.each_value - expect(enum.next).to eq(1) - expect(enum.next).to eq(2) - expect(enum.next).to eq(3) - end - end - - describe '#value?' do - it 'returns true if any key has that value' do - options = SubOptions.new - expect(options.value?(1)).not_to be_truthy - options.sub_a = 1 - expect(options.value?(1)).to be_truthy - end - end - - describe '#update' do - it 'updates options from hashes' do - options = ParentOptions.new(1) - expect(options.a).to eq(1) - expect(options.b).to be_nil - - updated = options.update a: 2, b: 3 - expect(options.a).to eq(2) - expect(options.b).to eq(3) - expect(updated).to eq(options) - end - end - - describe '#delete' do - it 'allows to remove value for key' do - options = ParentOptions.new(1) - expect(options.a).to eq(1) - expect(options.delete(:a)).to eq(1) - expect(options.a).to be_nil - end - end - - describe '#from' do - it { expect { ParentOptions.from invalid: 1 }.to raise_error(NoMethodError) } - - it 'works with options' do - options = ParentOptions.new(1) - - value = ParentOptions.from(options) - expect(value.a).to eq(1) - expect(value.b).to be_nil - end - - it 'works with options with sub object' do - sub = SubOptions.new(1) - options = ParentOptions.from a: 1, c: sub - expect(options).to be_a_kind_of(ParentOptions) - expect(options.a).to eq(1) - expect(options.b).to be_nil - expect(options.c).to be_a_kind_of(SubOptions) - expect(options.c.sub_a).to eq(1) - end - - it 'works with hash' do - options = ParentOptions.from a: 1 - expect(options).to be_a_kind_of(ParentOptions) - expect(options.a).to eq(1) - expect(options.b).to be_nil - end - - it 'works with hash with sub object' do - options = ParentOptions.from a: 1, c: { sub_a: 1 } - expect(options).to be_a_kind_of(ParentOptions) - expect(options.a).to eq(1) - expect(options.b).to be_nil - expect(options.c).to be_a_kind_of(SubOptions) - expect(options.c.sub_a).to eq(1) - end - - it 'works with deep hash' do - hash = { b: 1 } - options = ParentOptions.from a: hash - expect(options.a[:b]).to eq(1) - - hash[:b] = 2 - expect(options.a[:b]).to eq(1) - - options.a[:b] = 3 - expect(hash[:b]).to eq(2) - expect(options.a[:b]).to eq(3) - end - - it 'works with nil' do - options = ParentOptions.from(nil) - expect(options).to be_a_kind_of(ParentOptions) - expect(options.a).to be_nil - expect(options.b).to be_nil - end - - it 'respects inheritance' do - subclass = Class.new(ParentOptions) - options = subclass.from(c: { sub_a: 'hello' }) - expect(options.c).to be_a_kind_of(SubOptions) - expect(options.c.sub_a).to eq('hello') - end - end - - describe '#memoized' do - subject(:options_class) { Class.new(ParentOptions) } - it 'requires block' do - expect { options_class.memoized(:a) }.to raise_error(ArgumentError) - end - - it 'accepts block' do - options_class.memoized(:a) { :foo } - expect(options_class.new.a).to eql(:foo) - end - end - - describe '#fetch' do - subject { SubOptions.new } - - context 'when the fetched key has no value' do - it 'uses falsey default' do - expect(subject.fetch(:sub_a, false) { |_| :blah }).to be_falsey - end - - it 'accepts block' do - expect(subject.fetch(:sub_a) { |k| "yo #{k.inspect}" }).to eq('yo :sub_a') - end - - it 'needs a default if key is missing' do - expect { subject.fetch(:sub_a) }.to raise_error(Faraday::Options.fetch_error_class) - end - end - - context 'when the fetched key has a value' do - before do - subject.sub_a = 1 - end - - it 'grabs value' do - expect(subject.fetch(:sub_a, false) { |_| :blah }).to eq(1) - end - - it 'works with key' do - expect(subject.fetch(:sub_a)).to eq(1) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/options/proxy_options_spec.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/options/proxy_options_spec.rb deleted file mode 100644 index 749247d1..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/options/proxy_options_spec.rb +++ /dev/null @@ -1,52 +0,0 @@ -# frozen_string_literal: true - -RSpec.describe Faraday::ProxyOptions do - describe '#from' do - it 'works with string' do - options = Faraday::ProxyOptions.from 'http://user:pass@example.org' - expect(options.user).to eq('user') - expect(options.password).to eq('pass') - expect(options.uri).to be_a_kind_of(URI) - expect(options.path).to eq('') - expect(options.port).to eq(80) - expect(options.host).to eq('example.org') - expect(options.scheme).to eq('http') - expect(options.inspect).to match('#') - end - - it 'works with no auth' do - proxy = Faraday::ProxyOptions.from 'http://example.org' - expect(proxy.user).to be_nil - expect(proxy.password).to be_nil - end - - it 'treats empty string as nil' do - proxy = nil - proxy_string = proxy.to_s # => empty string - options = Faraday::ProxyOptions.from proxy_string - expect(options).to be_a_kind_of(Faraday::ProxyOptions) - expect(options.inspect).to eq('#') - end - end - - it 'allows hash access' do - proxy = Faraday::ProxyOptions.from 'http://a%40b:pw%20d@example.org' - expect(proxy.user).to eq('a@b') - expect(proxy[:user]).to eq('a@b') - expect(proxy.password).to eq('pw d') - expect(proxy[:password]).to eq('pw d') - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/options/request_options_spec.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/options/request_options_spec.rb deleted file mode 100644 index 8c1bb992..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/options/request_options_spec.rb +++ /dev/null @@ -1,19 +0,0 @@ -# frozen_string_literal: true - -RSpec.describe Faraday::RequestOptions do - subject(:options) { Faraday::RequestOptions.new } - - it 'allows to set the request proxy' do - expect(options.proxy).to be_nil - - expect { options[:proxy] = { booya: 1 } }.to raise_error(NoMethodError) - - options[:proxy] = { user: 'user' } - expect(options.proxy).to be_a_kind_of(Faraday::ProxyOptions) - expect(options.proxy.user).to eq('user') - - options.proxy = nil - expect(options.proxy).to be_nil - expect(options.inspect).to eq('#') - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/params_encoders/flat_spec.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/params_encoders/flat_spec.rb deleted file mode 100644 index 115342e5..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/params_encoders/flat_spec.rb +++ /dev/null @@ -1,42 +0,0 @@ -# frozen_string_literal: true - -require 'rack/utils' - -RSpec.describe Faraday::FlatParamsEncoder do - it_behaves_like 'a params encoder' - - it 'decodes arrays' do - query = 'a=one&a=two&a=three' - expected = { 'a' => %w[one two three] } - expect(subject.decode(query)).to eq(expected) - end - - it 'decodes boolean values' do - query = 'a=true&b=false' - expected = { 'a' => 'true', 'b' => 'false' } - expect(subject.decode(query)).to eq(expected) - end - - it 'encodes boolean values' do - params = { a: true, b: false } - expect(subject.encode(params)).to eq('a=true&b=false') - end - - it 'encodes boolean values in array' do - params = { a: [true, false] } - expect(subject.encode(params)).to eq('a=true&a=false') - end - - it 'encodes empty array in hash' do - params = { a: [] } - expect(subject.encode(params)).to eq('a=') - end - - it 'encodes unsorted when asked' do - params = { b: false, a: true } - expect(subject.encode(params)).to eq('a=true&b=false') - Faraday::FlatParamsEncoder.sort_params = false - expect(subject.encode(params)).to eq('b=false&a=true') - Faraday::FlatParamsEncoder.sort_params = true - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/params_encoders/nested_spec.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/params_encoders/nested_spec.rb deleted file mode 100644 index 46312047..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/params_encoders/nested_spec.rb +++ /dev/null @@ -1,150 +0,0 @@ -# frozen_string_literal: true - -require 'rack/utils' - -RSpec.describe Faraday::NestedParamsEncoder do - it_behaves_like 'a params encoder' - - it 'decodes arrays' do - query = 'a[1]=one&a[2]=two&a[3]=three' - expected = { 'a' => %w[one two three] } - expect(subject.decode(query)).to eq(expected) - end - - it 'decodes hashes' do - query = 'a[b1]=one&a[b2]=two&a[b][c]=foo' - expected = { 'a' => { 'b1' => 'one', 'b2' => 'two', 'b' => { 'c' => 'foo' } } } - expect(subject.decode(query)).to eq(expected) - end - - it 'decodes nested arrays rack compat' do - query = 'a[][one]=1&a[][two]=2&a[][one]=3&a[][two]=4' - expected = Rack::Utils.parse_nested_query(query) - expect(subject.decode(query)).to eq(expected) - end - - it 'decodes nested array mixed types' do - query = 'a[][one]=1&a[]=2&a[]=&a[]' - expected = Rack::Utils.parse_nested_query(query) - expect(subject.decode(query)).to eq(expected) - end - - it 'decodes nested ignores invalid array' do - query = '[][a]=1&b=2' - expected = { 'a' => '1', 'b' => '2' } - expect(subject.decode(query)).to eq(expected) - end - - it 'decodes nested ignores repeated array notation' do - query = 'a[][][]=1' - expected = { 'a' => ['1'] } - expect(subject.decode(query)).to eq(expected) - end - - it 'decodes nested ignores malformed keys' do - query = '=1&[]=2' - expected = {} - expect(subject.decode(query)).to eq(expected) - end - - it 'decodes nested subkeys dont have to be in brackets' do - query = 'a[b]c[d]e=1' - expected = { 'a' => { 'b' => { 'c' => { 'd' => { 'e' => '1' } } } } } - expect(subject.decode(query)).to eq(expected) - end - - it 'decodes nested final value overrides any type' do - query = 'a[b][c]=1&a[b]=2' - expected = { 'a' => { 'b' => '2' } } - expect(subject.decode(query)).to eq(expected) - end - - it 'encodes rack compat' do - params = { a: [{ one: '1', two: '2' }, '3', ''] } - result = Faraday::Utils.unescape(Faraday::NestedParamsEncoder.encode(params)).split('&') - expected = Rack::Utils.build_nested_query(params).split('&') - expect(result).to match_array(expected) - end - - it 'encodes empty string array value' do - expected = 'baz=&foo%5Bbar%5D=' - result = Faraday::NestedParamsEncoder.encode(foo: { bar: '' }, baz: '') - expect(result).to eq(expected) - end - - it 'encodes nil array value' do - expected = 'baz&foo%5Bbar%5D' - result = Faraday::NestedParamsEncoder.encode(foo: { bar: nil }, baz: nil) - expect(result).to eq(expected) - end - - it 'encodes empty array value' do - expected = 'baz%5B%5D&foo%5Bbar%5D%5B%5D' - result = Faraday::NestedParamsEncoder.encode(foo: { bar: [] }, baz: []) - expect(result).to eq(expected) - end - - it 'encodes boolean values' do - params = { a: true, b: false } - expect(subject.encode(params)).to eq('a=true&b=false') - end - - it 'encodes boolean values in array' do - params = { a: [true, false] } - expect(subject.encode(params)).to eq('a%5B%5D=true&a%5B%5D=false') - end - - it 'encodes unsorted when asked' do - params = { b: false, a: true } - expect(subject.encode(params)).to eq('a=true&b=false') - Faraday::NestedParamsEncoder.sort_params = false - expect(subject.encode(params)).to eq('b=false&a=true') - Faraday::NestedParamsEncoder.sort_params = true - end - - it 'encodes arrays indices when asked' do - params = { a: [0, 1, 2] } - expect(subject.encode(params)).to eq('a%5B%5D=0&a%5B%5D=1&a%5B%5D=2') - Faraday::NestedParamsEncoder.array_indices = true - expect(subject.encode(params)).to eq('a%5B0%5D=0&a%5B1%5D=1&a%5B2%5D=2') - Faraday::NestedParamsEncoder.array_indices = false - end - - shared_examples 'a wrong decoding' do - it do - expect { subject.decode(query) }.to raise_error(TypeError) do |e| - expect(e.message).to eq(error_message) - end - end - end - - context 'when expecting hash but getting string' do - let(:query) { 'a=1&a[b]=2' } - let(:error_message) { "expected Hash (got String) for param `a'" } - it_behaves_like 'a wrong decoding' - end - - context 'when expecting hash but getting array' do - let(:query) { 'a[]=1&a[b]=2' } - let(:error_message) { "expected Hash (got Array) for param `a'" } - it_behaves_like 'a wrong decoding' - end - - context 'when expecting nested hash but getting non nested' do - let(:query) { 'a[b]=1&a[b][c]=2' } - let(:error_message) { "expected Hash (got String) for param `b'" } - it_behaves_like 'a wrong decoding' - end - - context 'when expecting array but getting hash' do - let(:query) { 'a[b]=1&a[]=2' } - let(:error_message) { "expected Array (got Hash) for param `a'" } - it_behaves_like 'a wrong decoding' - end - - context 'when expecting array but getting string' do - let(:query) { 'a=1&a[]=2' } - let(:error_message) { "expected Array (got String) for param `a'" } - it_behaves_like 'a wrong decoding' - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/rack_builder_spec.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/rack_builder_spec.rb deleted file mode 100644 index 89f17ca9..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/rack_builder_spec.rb +++ /dev/null @@ -1,317 +0,0 @@ -# frozen_string_literal: true - -RSpec.describe Faraday::RackBuilder do - # mock handler classes - (Handler = Struct.new(:app)).class_eval do - def call(env) - env[:request_headers]['X-Middleware'] ||= '' - env[:request_headers]['X-Middleware'] += ":#{self.class.name.split('::').last}" - app.call(env) - end - end - - class Apple < Handler - end - - class Orange < Handler - end - - class Banana < Handler - end - - subject { conn.builder } - before { Faraday.default_adapter = :test } - after { Faraday.default_adapter = nil } - - context 'with default stack' do - let(:conn) { Faraday::Connection.new } - - it { expect(subject[0]).to eq(Faraday::Request.lookup_middleware(:url_encoded)) } - it { expect(subject.adapter).to eq(Faraday::Adapter.lookup_middleware(Faraday.default_adapter)) } - end - - context 'with custom empty block' do - let(:conn) { Faraday::Connection.new {} } - - it { expect(subject[0]).to be_nil } - it { expect(subject.adapter).to eq(Faraday::Adapter.lookup_middleware(Faraday.default_adapter)) } - end - - context 'with custom adapter only' do - let(:conn) do - Faraday::Connection.new do |builder| - builder.adapter :test do |stub| - stub.get('/') { |_| [200, {}, ''] } - end - end - end - - it { expect(subject[0]).to be_nil } - it { expect(subject.adapter).to eq(Faraday::Adapter.lookup_middleware(:test)) } - end - - context 'with custom handler and adapter' do - let(:conn) do - Faraday::Connection.new do |builder| - builder.use Apple - builder.adapter :test do |stub| - stub.get('/') { |_| [200, {}, ''] } - end - end - end - - it 'locks the stack after making a request' do - expect(subject.locked?).to be_falsey - conn.get('/') - expect(subject.locked?).to be_truthy - expect { subject.use(Orange) }.to raise_error(Faraday::RackBuilder::StackLocked) - end - - it 'dup stack is unlocked' do - expect(subject.locked?).to be_falsey - subject.lock! - expect(subject.locked?).to be_truthy - dup = subject.dup - expect(dup).to eq(subject) - expect(dup.locked?).to be_falsey - end - - it 'allows to compare handlers' do - expect(subject.handlers.first).to eq(Faraday::RackBuilder::Handler.new(Apple)) - end - end - - context 'when having a single handler' do - let(:conn) { Faraday::Connection.new {} } - - before { subject.use(Apple) } - - it { expect(subject.handlers).to eq([Apple]) } - - it 'allows use' do - subject.use(Orange) - expect(subject.handlers).to eq([Apple, Orange]) - end - - it 'allows insert_before' do - subject.insert_before(Apple, Orange) - expect(subject.handlers).to eq([Orange, Apple]) - end - - it 'allows insert_after' do - subject.insert_after(Apple, Orange) - expect(subject.handlers).to eq([Apple, Orange]) - end - - it 'raises an error trying to use an unregistered symbol' do - expect { subject.use(:apple) }.to raise_error(Faraday::Error) do |err| - expect(err.message).to eq(':apple is not registered on Faraday::Middleware') - end - end - end - - context 'when having two handlers' do - let(:conn) { Faraday::Connection.new {} } - - before do - subject.use(Apple) - subject.use(Orange) - end - - it 'allows insert_before' do - subject.insert_before(Orange, Banana) - expect(subject.handlers).to eq([Apple, Banana, Orange]) - end - - it 'allows insert_after' do - subject.insert_after(Apple, Banana) - expect(subject.handlers).to eq([Apple, Banana, Orange]) - end - - it 'allows to swap handlers' do - subject.swap(Apple, Banana) - expect(subject.handlers).to eq([Banana, Orange]) - end - - it 'allows to delete a handler' do - subject.delete(Apple) - expect(subject.handlers).to eq([Orange]) - end - end - - context 'when adapter is added with named options' do - after { Faraday.default_adapter_options = {} } - let(:conn) { Faraday::Connection.new {} } - - let(:cat_adapter) do - Class.new(Faraday::Adapter) do - attr_accessor :name - - def initialize(app, name:) - super(app) - @name = name - end - end - end - - let(:cat) { subject.adapter.build } - - it 'adds a handler to construct adapter with named options' do - Faraday.default_adapter = cat_adapter - Faraday.default_adapter_options = { name: 'Chloe' } - expect { cat }.to_not output( - /warning: Using the last argument as keyword parameters is deprecated/ - ).to_stderr - expect(cat.name).to eq 'Chloe' - end - end - - context 'when middleware is added with named arguments' do - let(:conn) { Faraday::Connection.new {} } - - let(:dog_middleware) do - Class.new(Faraday::Middleware) do - attr_accessor :name - - def initialize(app, name:) - super(app) - @name = name - end - end - end - let(:dog) do - subject.handlers.find { |handler| handler == dog_middleware }.build - end - - it 'adds a handler to construct middleware with options passed to use' do - subject.use dog_middleware, name: 'Rex' - expect { dog }.to_not output( - /warning: Using the last argument as keyword parameters is deprecated/ - ).to_stderr - expect(dog.name).to eq('Rex') - end - end - - context 'when a middleware is added with named arguments' do - let(:conn) { Faraday::Connection.new {} } - - let(:cat_request) do - Class.new(Faraday::Middleware) do - attr_accessor :name - - def initialize(app, name:) - super(app) - @name = name - end - end - end - let(:cat) do - subject.handlers.find { |handler| handler == cat_request }.build - end - - it 'adds a handler to construct request adapter with options passed to request' do - Faraday::Request.register_middleware cat_request: cat_request - subject.request :cat_request, name: 'Felix' - expect { cat }.to_not output( - /warning: Using the last argument as keyword parameters is deprecated/ - ).to_stderr - expect(cat.name).to eq('Felix') - end - end - - context 'when a middleware is added with named arguments' do - let(:conn) { Faraday::Connection.new {} } - - let(:fish_response) do - Class.new(Faraday::Middleware) do - attr_accessor :name - - def initialize(app, name:) - super(app) - @name = name - end - end - end - let(:fish) do - subject.handlers.find { |handler| handler == fish_response }.build - end - - it 'adds a handler to construct response adapter with options passed to response' do - Faraday::Response.register_middleware fish_response: fish_response - subject.response :fish_response, name: 'Bubbles' - expect { fish }.to_not output( - /warning: Using the last argument as keyword parameters is deprecated/ - ).to_stderr - expect(fish.name).to eq('Bubbles') - end - end - - context 'when a plain adapter is added with named arguments' do - let(:conn) { Faraday::Connection.new {} } - - let(:rabbit_adapter) do - Class.new(Faraday::Adapter) do - attr_accessor :name - - def initialize(app, name:) - super(app) - @name = name - end - end - end - let(:rabbit) do - subject.adapter.build - end - - it 'adds a handler to construct adapter with options passed to adapter' do - Faraday::Adapter.register_middleware rabbit_adapter: rabbit_adapter - subject.adapter :rabbit_adapter, name: 'Thumper' - expect { rabbit }.to_not output( - /warning: Using the last argument as keyword parameters is deprecated/ - ).to_stderr - expect(rabbit.name).to eq('Thumper') - end - end - - context 'when handlers are directly added or updated' do - let(:conn) { Faraday::Connection.new {} } - - let(:rock_handler) do - Class.new do - attr_accessor :name - - def initialize(_app, name:) - @name = name - end - end - end - let(:rock) do - subject.handlers.find { |handler| handler == rock_handler }.build - end - - it 'adds a handler to construct adapter with options passed to insert' do - subject.insert 0, rock_handler, name: 'Stony' - expect { rock }.to_not output( - /warning: Using the last argument as keyword parameters is deprecated/ - ).to_stderr - expect(rock.name).to eq('Stony') - end - - it 'adds a handler with options passed to insert_after' do - subject.insert_after 0, rock_handler, name: 'Rocky' - expect { rock }.to_not output( - /warning: Using the last argument as keyword parameters is deprecated/ - ).to_stderr - expect(rock.name).to eq('Rocky') - end - - it 'adds a handler with options passed to swap' do - subject.insert 0, rock_handler, name: 'Flint' - subject.swap 0, rock_handler, name: 'Chert' - expect { rock }.to_not output( - /warning: Using the last argument as keyword parameters is deprecated/ - ).to_stderr - expect(rock.name).to eq('Chert') - end - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/request/authorization_spec.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/request/authorization_spec.rb deleted file mode 100644 index 437c88ae..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/request/authorization_spec.rb +++ /dev/null @@ -1,118 +0,0 @@ -# frozen_string_literal: true - -RSpec.describe Faraday::Request::Authorization do - let(:conn) do - Faraday.new do |b| - b.request :authorization, auth_type, *auth_config - b.adapter :test do |stub| - stub.get('/auth-echo') do |env| - [200, {}, env[:request_headers]['Authorization']] - end - end - end - end - - shared_examples 'does not interfere with existing authentication' do - context 'and request already has an authentication header' do - let(:response) { conn.get('/auth-echo', nil, authorization: 'OAuth oauth_token') } - - it 'does not interfere with existing authorization' do - expect(response.body).to eq('OAuth oauth_token') - end - end - end - - let(:response) { conn.get('/auth-echo') } - - describe 'basic_auth' do - let(:auth_type) { :basic } - - context 'when passed correct params' do - let(:auth_config) { %w[aladdin opensesame] } - - it { expect(response.body).to eq('Basic YWxhZGRpbjpvcGVuc2VzYW1l') } - - include_examples 'does not interfere with existing authentication' - end - - context 'when passed very long values' do - let(:auth_config) { ['A' * 255, ''] } - - it { expect(response.body).to eq("Basic #{'QUFB' * 85}Og==") } - - include_examples 'does not interfere with existing authentication' - end - end - - describe 'authorization' do - let(:auth_type) { :Bearer } - - context 'when passed a string' do - let(:auth_config) { ['custom'] } - - it { expect(response.body).to eq('Bearer custom') } - - include_examples 'does not interfere with existing authentication' - end - - context 'when passed a proc' do - let(:auth_config) { [-> { 'custom_from_proc' }] } - - it { expect(response.body).to eq('Bearer custom_from_proc') } - - include_examples 'does not interfere with existing authentication' - end - - context 'when passed a callable' do - let(:callable) { double('Callable Authorizer', call: 'custom_from_callable') } - let(:auth_config) { [callable] } - - it { expect(response.body).to eq('Bearer custom_from_callable') } - - include_examples 'does not interfere with existing authentication' - end - - context 'with an argument' do - let(:response) { conn.get('/auth-echo', nil, 'middle' => 'crunchy surprise') } - - context 'when passed a proc' do - let(:auth_config) { [proc { |env| "proc #{env.request_headers['middle']}" }] } - - it { expect(response.body).to eq('Bearer proc crunchy surprise') } - - include_examples 'does not interfere with existing authentication' - end - - context 'when passed a lambda' do - let(:auth_config) { [->(env) { "lambda #{env.request_headers['middle']}" }] } - - it { expect(response.body).to eq('Bearer lambda crunchy surprise') } - - include_examples 'does not interfere with existing authentication' - end - - context 'when passed a callable with an argument' do - let(:callable) do - Class.new do - def call(env) - "callable #{env.request_headers['middle']}" - end - end.new - end - let(:auth_config) { [callable] } - - it { expect(response.body).to eq('Bearer callable crunchy surprise') } - - include_examples 'does not interfere with existing authentication' - end - end - - context 'when passed too many arguments' do - let(:auth_config) { %w[baz foo] } - - it { expect { response }.to raise_error(ArgumentError) } - - include_examples 'does not interfere with existing authentication' - end - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/request/instrumentation_spec.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/request/instrumentation_spec.rb deleted file mode 100644 index d207c556..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/request/instrumentation_spec.rb +++ /dev/null @@ -1,74 +0,0 @@ -# frozen_string_literal: true - -RSpec.describe Faraday::Request::Instrumentation do - class FakeInstrumenter - attr_reader :instrumentations - - def initialize - @instrumentations = [] - end - - def instrument(name, env) - @instrumentations << [name, env] - yield - end - end - - let(:config) { {} } - let(:options) { Faraday::Request::Instrumentation::Options.from config } - let(:instrumenter) { FakeInstrumenter.new } - let(:conn) do - Faraday.new do |f| - f.request :instrumentation, config.merge(instrumenter: instrumenter) - f.adapter :test do |stub| - stub.get '/' do - [200, {}, 'ok'] - end - end - end - end - - it { expect(options.name).to eq('request.faraday') } - it 'defaults to ActiveSupport::Notifications' do - res = options.instrumenter - rescue NameError => e - expect(e.to_s).to match('ActiveSupport') - else - expect(res).to eq(ActiveSupport::Notifications) - end - - it 'instruments with default name' do - expect(instrumenter.instrumentations.size).to eq(0) - - res = conn.get '/' - expect(res.body).to eq('ok') - expect(instrumenter.instrumentations.size).to eq(1) - - name, env = instrumenter.instrumentations.first - expect(name).to eq('request.faraday') - expect(env[:url].path).to eq('/') - end - - context 'with custom name' do - let(:config) { { name: 'custom' } } - - it { expect(options.name).to eq('custom') } - it 'instruments with custom name' do - expect(instrumenter.instrumentations.size).to eq(0) - - res = conn.get '/' - expect(res.body).to eq('ok') - expect(instrumenter.instrumentations.size).to eq(1) - - name, env = instrumenter.instrumentations.first - expect(name).to eq('custom') - expect(env[:url].path).to eq('/') - end - end - - context 'with custom instrumenter' do - let(:config) { { instrumenter: :custom } } - - it { expect(options.instrumenter).to eq(:custom) } - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/request/json_spec.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/request/json_spec.rb deleted file mode 100644 index 44dee796..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/request/json_spec.rb +++ /dev/null @@ -1,199 +0,0 @@ -# frozen_string_literal: true - -RSpec.describe Faraday::Request::Json do - let(:middleware) { described_class.new(->(env) { Faraday::Response.new(env) }) } - - def process(body, content_type = nil) - env = { body: body, request_headers: Faraday::Utils::Headers.new } - env[:request_headers]['content-type'] = content_type if content_type - middleware.call(Faraday::Env.from(env)).env - end - - def result_body - result[:body] - end - - def result_type - result[:request_headers]['content-type'] - end - - context 'no body' do - let(:result) { process(nil) } - - it "doesn't change body" do - expect(result_body).to be_nil - end - - it "doesn't add content type" do - expect(result_type).to be_nil - end - end - - context 'empty body' do - let(:result) { process('') } - - it "doesn't change body" do - expect(result_body).to be_empty - end - - it "doesn't add content type" do - expect(result_type).to be_nil - end - end - - context 'string body' do - let(:result) { process('{"a":1}') } - - it "doesn't change body" do - expect(result_body).to eq('{"a":1}') - end - - it 'adds content type' do - expect(result_type).to eq('application/json') - end - end - - context 'object body' do - let(:result) { process(a: 1) } - - it 'encodes body' do - expect(result_body).to eq('{"a":1}') - end - - it 'adds content type' do - expect(result_type).to eq('application/json') - end - end - - context 'empty object body' do - let(:result) { process({}) } - - it 'encodes body' do - expect(result_body).to eq('{}') - end - end - - context 'true body' do - let(:result) { process(true) } - - it 'encodes body' do - expect(result_body).to eq('true') - end - - it 'adds content type' do - expect(result_type).to eq('application/json') - end - end - - context 'false body' do - let(:result) { process(false) } - - it 'encodes body' do - expect(result_body).to eq('false') - end - - it 'adds content type' do - expect(result_type).to eq('application/json') - end - end - - context 'object body with json type' do - let(:result) { process({ a: 1 }, 'application/json; charset=utf-8') } - - it 'encodes body' do - expect(result_body).to eq('{"a":1}') - end - - it "doesn't change content type" do - expect(result_type).to eq('application/json; charset=utf-8') - end - end - - context 'object body with vendor json type' do - let(:result) { process({ a: 1 }, 'application/vnd.myapp.v1+json; charset=utf-8') } - - it 'encodes body' do - expect(result_body).to eq('{"a":1}') - end - - it "doesn't change content type" do - expect(result_type).to eq('application/vnd.myapp.v1+json; charset=utf-8') - end - end - - context 'object body with incompatible type' do - let(:result) { process({ a: 1 }, 'application/xml; charset=utf-8') } - - it "doesn't change body" do - expect(result_body).to eq(a: 1) - end - - it "doesn't change content type" do - expect(result_type).to eq('application/xml; charset=utf-8') - end - end - - context 'with encoder' do - let(:encoder) do - double('Encoder').tap do |e| - allow(e).to receive(:dump) { |s, opts| JSON.generate(s, opts) } - end - end - - let(:result) { process(a: 1) } - - context 'when encoder is passed as object' do - let(:middleware) { described_class.new(->(env) { Faraday::Response.new(env) }, { encoder: encoder }) } - - it 'calls specified JSON encoder\'s dump method' do - expect(encoder).to receive(:dump).with({ a: 1 }) - - result - end - - it 'encodes body' do - expect(result_body).to eq('{"a":1}') - end - - it 'adds content type' do - expect(result_type).to eq('application/json') - end - end - - context 'when encoder is passed as an object-method pair' do - let(:middleware) { described_class.new(->(env) { Faraday::Response.new(env) }, { encoder: [encoder, :dump] }) } - - it 'calls specified JSON encoder' do - expect(encoder).to receive(:dump).with({ a: 1 }) - - result - end - - it 'encodes body' do - expect(result_body).to eq('{"a":1}') - end - - it 'adds content type' do - expect(result_type).to eq('application/json') - end - end - - context 'when encoder is not passed' do - let(:middleware) { described_class.new(->(env) { Faraday::Response.new(env) }) } - - it 'calls JSON.generate' do - expect(JSON).to receive(:generate).with({ a: 1 }) - - result - end - - it 'encodes body' do - expect(result_body).to eq('{"a":1}') - end - - it 'adds content type' do - expect(result_type).to eq('application/json') - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/request/url_encoded_spec.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/request/url_encoded_spec.rb deleted file mode 100644 index bdd9e0ac..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/request/url_encoded_spec.rb +++ /dev/null @@ -1,93 +0,0 @@ -# frozen_string_literal: true - -require 'stringio' - -RSpec.describe Faraday::Request::UrlEncoded do - let(:conn) do - Faraday.new do |b| - b.request :url_encoded - b.adapter :test do |stub| - stub.post('/echo') do |env| - posted_as = env[:request_headers]['Content-Type'] - body = env[:body] - if body.respond_to?(:read) - body = body.read - end - [200, { 'Content-Type' => posted_as }, body] - end - end - end - end - - it 'does nothing without payload' do - response = conn.post('/echo') - expect(response.headers['Content-Type']).to be_nil - expect(response.body.empty?).to be_truthy - end - - it 'ignores custom content type' do - response = conn.post('/echo', { some: 'data' }, 'content-type' => 'application/x-foo') - expect(response.headers['Content-Type']).to eq('application/x-foo') - expect(response.body).to eq(some: 'data') - end - - it 'works with no headers' do - response = conn.post('/echo', fruit: %w[apples oranges]) - expect(response.headers['Content-Type']).to eq('application/x-www-form-urlencoded') - expect(response.body).to eq('fruit%5B%5D=apples&fruit%5B%5D=oranges') - end - - it 'works with with headers' do - response = conn.post('/echo', { 'a' => 123 }, 'content-type' => 'application/x-www-form-urlencoded') - expect(response.headers['Content-Type']).to eq('application/x-www-form-urlencoded') - expect(response.body).to eq('a=123') - end - - it 'works with nested params' do - response = conn.post('/echo', user: { name: 'Mislav', web: 'mislav.net' }) - expect(response.headers['Content-Type']).to eq('application/x-www-form-urlencoded') - expected = { 'user' => { 'name' => 'Mislav', 'web' => 'mislav.net' } } - expect(Faraday::Utils.parse_nested_query(response.body)).to eq(expected) - end - - it 'works with non nested params' do - response = conn.post('/echo', dimensions: %w[date location]) do |req| - req.options.params_encoder = Faraday::FlatParamsEncoder - end - expect(response.headers['Content-Type']).to eq('application/x-www-form-urlencoded') - expected = { 'dimensions' => %w[date location] } - expect(Faraday::Utils.parse_query(response.body)).to eq(expected) - expect(response.body).to eq('dimensions=date&dimensions=location') - end - - it 'works with unicode' do - err = capture_warnings do - response = conn.post('/echo', str: 'eé cç aã aâ') - expect(response.body).to eq('str=e%C3%A9+c%C3%A7+a%C3%A3+a%C3%A2') - end - expect(err.empty?).to be_truthy - end - - it 'works with nested keys' do - response = conn.post('/echo', 'a' => { 'b' => { 'c' => ['d'] } }) - expect(response.body).to eq('a%5Bb%5D%5Bc%5D%5B%5D=d') - end - - it 'works with files' do - response = conn.post('/echo', StringIO.new('str=apple')) - expect(response.body).to eq('str=apple') - end - - context 'customising default_space_encoding' do - around do |example| - Faraday::Utils.default_space_encoding = '%20' - example.run - Faraday::Utils.default_space_encoding = nil - end - - it 'uses the custom character to encode spaces' do - response = conn.post('/echo', str: 'apple banana') - expect(response.body).to eq('str=apple%20banana') - end - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/request_spec.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/request_spec.rb deleted file mode 100644 index fbf85b56..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/request_spec.rb +++ /dev/null @@ -1,110 +0,0 @@ -# frozen_string_literal: true - -RSpec.describe Faraday::Request do - let(:conn) do - Faraday.new(url: 'http://httpbingo.org/api', - headers: { 'Mime-Version' => '1.0' }, - request: { oauth: { consumer_key: 'anonymous' } }) - end - let(:http_method) { :get } - let(:block) { nil } - - subject { conn.build_request(http_method, &block) } - - context 'when nothing particular is configured' do - it { expect(subject.http_method).to eq(:get) } - it { expect(subject.to_env(conn).ssl.verify).to be_falsey } - it { expect(subject.to_env(conn).ssl.verify_hostname).to be_falsey } - end - - context 'when HTTP method is post' do - let(:http_method) { :post } - - it { expect(subject.http_method).to eq(:post) } - end - - context 'when setting the url on setup with a URI' do - let(:block) { proc { |req| req.url URI.parse('foo.json?a=1') } } - - it { expect(subject.path).to eq(URI.parse('foo.json')) } - it { expect(subject.params).to eq('a' => '1') } - it { expect(subject.to_env(conn).url.to_s).to eq('http://httpbingo.org/api/foo.json?a=1') } - end - - context 'when setting the url on setup with a string path and params' do - let(:block) { proc { |req| req.url 'foo.json', 'a' => 1 } } - - it { expect(subject.path).to eq('foo.json') } - it { expect(subject.params).to eq('a' => 1) } - it { expect(subject.to_env(conn).url.to_s).to eq('http://httpbingo.org/api/foo.json?a=1') } - end - - context 'when setting the url on setup with a path including params' do - let(:block) { proc { |req| req.url 'foo.json?b=2&a=1#qqq' } } - - it { expect(subject.path).to eq('foo.json') } - it { expect(subject.params).to eq('a' => '1', 'b' => '2') } - it { expect(subject.to_env(conn).url.to_s).to eq('http://httpbingo.org/api/foo.json?a=1&b=2') } - end - - context 'when setting a header on setup with []= syntax' do - let(:block) { proc { |req| req['Server'] = 'Faraday' } } - let(:headers) { subject.to_env(conn).request_headers } - - it { expect(subject.headers['Server']).to eq('Faraday') } - it { expect(headers['mime-version']).to eq('1.0') } - it { expect(headers['server']).to eq('Faraday') } - end - - context 'when setting the body on setup' do - let(:block) { proc { |req| req.body = 'hi' } } - - it { expect(subject.body).to eq('hi') } - it { expect(subject.to_env(conn).body).to eq('hi') } - end - - context 'with global request options set' do - let(:env_request) { subject.to_env(conn).request } - - before do - conn.options.timeout = 3 - conn.options.open_timeout = 5 - conn.ssl.verify = false - conn.proxy = 'http://proxy.com' - end - - it { expect(subject.options.timeout).to eq(3) } - it { expect(subject.options.open_timeout).to eq(5) } - it { expect(env_request.timeout).to eq(3) } - it { expect(env_request.open_timeout).to eq(5) } - - context 'and per-request options set' do - let(:block) do - proc do |req| - req.options.timeout = 10 - req.options.boundary = 'boo' - req.options.oauth[:consumer_secret] = 'xyz' - req.options.context = { - foo: 'foo', - bar: 'bar' - } - end - end - - it { expect(subject.options.timeout).to eq(10) } - it { expect(subject.options.open_timeout).to eq(5) } - it { expect(env_request.timeout).to eq(10) } - it { expect(env_request.open_timeout).to eq(5) } - it { expect(env_request.boundary).to eq('boo') } - it { expect(env_request.context).to eq(foo: 'foo', bar: 'bar') } - it do - oauth_expected = { consumer_secret: 'xyz', consumer_key: 'anonymous' } - expect(env_request.oauth).to eq(oauth_expected) - end - end - end - - it 'supports marshal serialization' do - expect(Marshal.load(Marshal.dump(subject))).to eq(subject) - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/response/json_spec.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/response/json_spec.rb deleted file mode 100644 index 6108c5fd..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/response/json_spec.rb +++ /dev/null @@ -1,189 +0,0 @@ -# frozen_string_literal: true - -RSpec.describe Faraday::Response::Json, type: :response do - let(:options) { {} } - let(:headers) { {} } - let(:middleware) do - described_class.new(lambda { |env| - Faraday::Response.new(env) - }, **options) - end - - def process(body, content_type = 'application/json', options = {}) - env = { - body: body, request: options, - request_headers: Faraday::Utils::Headers.new, - response_headers: Faraday::Utils::Headers.new(headers) - } - env[:response_headers]['content-type'] = content_type if content_type - yield(env) if block_given? - middleware.call(Faraday::Env.from(env)) - end - - context 'no type matching' do - it "doesn't change nil body" do - expect(process(nil).body).to be_nil - end - - it 'nullifies empty body' do - expect(process('').body).to be_nil - end - - it 'parses json body' do - response = process('{"a":1}') - expect(response.body).to eq('a' => 1) - expect(response.env[:raw_body]).to be_nil - end - end - - context 'with preserving raw' do - let(:options) { { preserve_raw: true } } - - it 'parses json body' do - response = process('{"a":1}') - expect(response.body).to eq('a' => 1) - expect(response.env[:raw_body]).to eq('{"a":1}') - end - end - - context 'with default regexp type matching' do - it 'parses json body of correct type' do - response = process('{"a":1}', 'application/x-json') - expect(response.body).to eq('a' => 1) - end - - it 'ignores json body of incorrect type' do - response = process('{"a":1}', 'text/json-xml') - expect(response.body).to eq('{"a":1}') - end - end - - context 'with array type matching' do - let(:options) { { content_type: %w[a/b c/d] } } - - it 'parses json body of correct type' do - expect(process('{"a":1}', 'a/b').body).to be_a(Hash) - expect(process('{"a":1}', 'c/d').body).to be_a(Hash) - end - - it 'ignores json body of incorrect type' do - expect(process('{"a":1}', 'a/d').body).not_to be_a(Hash) - end - end - - it 'chokes on invalid json' do - expect { process('{!') }.to raise_error(Faraday::ParsingError) - end - - it 'includes the response on the ParsingError instance' do - process('{') { |env| env[:response] = Faraday::Response.new } - raise 'Parsing should have failed.' - rescue Faraday::ParsingError => e - expect(e.response).to be_a(Faraday::Response) - end - - context 'HEAD responses' do - it "nullifies the body if it's only one space" do - response = process(' ') - expect(response.body).to be_nil - end - - it "nullifies the body if it's two spaces" do - response = process(' ') - expect(response.body).to be_nil - end - end - - context 'JSON options' do - let(:body) { '{"a": 1}' } - let(:result) { { a: 1 } } - let(:options) do - { - parser_options: { - symbolize_names: true - } - } - end - - it 'passes relevant options to JSON parse' do - expect(::JSON).to receive(:parse) - .with(body, options[:parser_options]) - .and_return(result) - - response = process(body) - expect(response.body).to eq(result) - end - end - - context 'with decoder' do - let(:decoder) do - double('Decoder').tap do |e| - allow(e).to receive(:load) { |s, opts| JSON.parse(s, opts) } - end - end - - let(:body) { '{"a": 1}' } - let(:result) { { a: 1 } } - - context 'when decoder is passed as object' do - let(:options) do - { - parser_options: { - decoder: decoder, - option: :option_value, - symbolize_names: true - } - } - end - - it 'passes relevant options to specified decoder\'s load method' do - expect(decoder).to receive(:load) - .with(body, { option: :option_value, symbolize_names: true }) - .and_return(result) - - response = process(body) - expect(response.body).to eq(result) - end - end - - context 'when decoder is passed as an object-method pair' do - let(:options) do - { - parser_options: { - decoder: [decoder, :load], - option: :option_value, - symbolize_names: true - } - } - end - - it 'passes relevant options to specified decoder\'s method' do - expect(decoder).to receive(:load) - .with(body, { option: :option_value, symbolize_names: true }) - .and_return(result) - - response = process(body) - expect(response.body).to eq(result) - end - end - - context 'when decoder is not passed' do - let(:options) do - { - parser_options: { - symbolize_names: true - } - } - end - - it 'passes relevant options to JSON parse' do - expect(JSON).to receive(:parse) - .with(body, { symbolize_names: true }) - .and_return(result) - - response = process(body) - expect(response.body).to eq(result) - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/response/logger_spec.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/response/logger_spec.rb deleted file mode 100644 index 4fd1e11c..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/response/logger_spec.rb +++ /dev/null @@ -1,258 +0,0 @@ -# frozen_string_literal: true - -require 'stringio' -require 'logger' - -RSpec.describe Faraday::Response::Logger do - let(:string_io) { StringIO.new } - let(:logger) { Logger.new(string_io) } - let(:logger_options) { {} } - let(:conn) do - rubbles = ['Barney', 'Betty', 'Bam Bam'] - - Faraday.new do |b| - b.response :logger, logger, logger_options do |logger| - logger.filter(/(soylent green is) (.+)/, '\1 tasty') - logger.filter(/(api_key:).*"(.+)."/, '\1[API_KEY]') - logger.filter(/(password)=(.+)/, '\1=[HIDDEN]') - end - b.adapter :test do |stubs| - stubs.get('/hello') { [200, { 'Content-Type' => 'text/html' }, 'hello'] } - stubs.post('/ohai') { [200, { 'Content-Type' => 'text/html' }, 'fred'] } - stubs.post('/ohyes') { [200, { 'Content-Type' => 'text/html' }, 'pebbles'] } - stubs.get('/rubbles') { [200, { 'Content-Type' => 'application/json' }, rubbles] } - stubs.get('/filtered_body') { [200, { 'Content-Type' => 'text/html' }, 'soylent green is people'] } - stubs.get('/filtered_headers') { [200, { 'Content-Type' => 'text/html' }, 'headers response'] } - stubs.get('/filtered_params') { [200, { 'Content-Type' => 'text/html' }, 'params response'] } - stubs.get('/filtered_url') { [200, { 'Content-Type' => 'text/html' }, 'url response'] } - stubs.get('/connection_failed') { raise Faraday::ConnectionFailed, 'Failed to open TCP connection' } - end - end - end - - before do - logger.level = Logger::DEBUG - end - - it 'still returns output' do - resp = conn.get '/hello', nil, accept: 'text/html' - expect(resp.body).to eq('hello') - end - - context 'without configuration' do - let(:conn) do - Faraday.new do |b| - b.response :logger - b.adapter :test do |stubs| - stubs.get('/hello') { [200, { 'Content-Type' => 'text/html' }, 'hello'] } - end - end - end - - it 'defaults to stdout' do - expect(Logger).to receive(:new).with($stdout).and_return(Logger.new(nil)) - conn.get('/hello') - end - end - - context 'with default formatter' do - let(:formatter) { instance_double(Faraday::Logging::Formatter, request: true, response: true, filter: []) } - - before { allow(Faraday::Logging::Formatter).to receive(:new).and_return(formatter) } - - it 'delegates logging to the formatter' do - expect(formatter).to receive(:request).with(an_instance_of(Faraday::Env)) - expect(formatter).to receive(:response).with(an_instance_of(Faraday::Env)) - conn.get '/hello' - end - - context 'when no route' do - it 'delegates logging to the formatter' do - expect(formatter).to receive(:request).with(an_instance_of(Faraday::Env)) - expect(formatter).to receive(:exception).with(an_instance_of(Faraday::Adapter::Test::Stubs::NotFound)) - - expect { conn.get '/noroute' }.to raise_error(Faraday::Adapter::Test::Stubs::NotFound) - end - end - end - - context 'with custom formatter' do - let(:formatter_class) do - Class.new(Faraday::Logging::Formatter) do - def request(_env) - info 'Custom log formatter request' - end - - def response(_env) - info 'Custom log formatter response' - end - end - end - - let(:logger_options) { { formatter: formatter_class } } - - it 'logs with custom formatter' do - conn.get '/hello' - - expect(string_io.string).to match('Custom log formatter request') - expect(string_io.string).to match('Custom log formatter response') - end - end - - it 'logs method and url' do - conn.get '/hello', nil, accept: 'text/html' - expect(string_io.string).to match('GET http:/hello') - end - - it 'logs status' do - conn.get '/hello', nil, accept: 'text/html' - expect(string_io.string).to match('Status 200') - end - - it 'does not log error message by default' do - expect { conn.get '/noroute' }.to raise_error(Faraday::Adapter::Test::Stubs::NotFound) - expect(string_io.string).not_to match(%(no stubbed request for get http:/noroute)) - end - - it 'logs request headers by default' do - conn.get '/hello', nil, accept: 'text/html' - expect(string_io.string).to match(%(Accept: "text/html)) - end - - it 'logs response headers by default' do - conn.get '/hello', nil, accept: 'text/html' - expect(string_io.string).to match(%(Content-Type: "text/html)) - end - - it 'does not log request body by default' do - conn.post '/ohai', 'name=Unagi', accept: 'text/html' - expect(string_io.string).not_to match(%(name=Unagi)) - end - - it 'does not log response body by default' do - conn.post '/ohai', 'name=Toro', accept: 'text/html' - expect(string_io.string).not_to match(%(fred)) - end - - it 'logs filter headers' do - conn.headers = { 'api_key' => 'ABC123' } - conn.get '/filtered_headers', nil, accept: 'text/html' - expect(string_io.string).to match(%(api_key:)) - expect(string_io.string).to match(%([API_KEY])) - expect(string_io.string).not_to match(%(ABC123)) - end - - it 'logs filter url' do - conn.get '/filtered_url?password=hunter2', nil, accept: 'text/html' - expect(string_io.string).to match(%([HIDDEN])) - expect(string_io.string).not_to match(%(hunter2)) - end - - context 'when not logging request headers' do - let(:logger_options) { { headers: { request: false } } } - - it 'does not log request headers if option is false' do - conn.get '/hello', nil, accept: 'text/html' - expect(string_io.string).not_to match(%(Accept: "text/html)) - end - end - - context 'when not logging response headers' do - let(:logger_options) { { headers: { response: false } } } - - it 'does not log response headers if option is false' do - conn.get '/hello', nil, accept: 'text/html' - expect(string_io.string).not_to match(%(Content-Type: "text/html)) - end - end - - context 'when logging request body' do - let(:logger_options) { { bodies: { request: true } } } - - it 'log only request body' do - conn.post '/ohyes', 'name=Tamago', accept: 'text/html' - expect(string_io.string).to match(%(name=Tamago)) - expect(string_io.string).not_to match(%(pebbles)) - end - end - - context 'when logging response body' do - let(:logger_options) { { bodies: { response: true } } } - - it 'log only response body' do - conn.post '/ohyes', 'name=Hamachi', accept: 'text/html' - expect(string_io.string).to match(%(pebbles)) - expect(string_io.string).not_to match(%(name=Hamachi)) - end - end - - context 'when logging request and response bodies' do - let(:logger_options) { { bodies: true } } - - it 'log request and response body' do - conn.post '/ohyes', 'name=Ebi', accept: 'text/html' - expect(string_io.string).to match(%(name=Ebi)) - expect(string_io.string).to match(%(pebbles)) - end - - it 'log response body object' do - conn.get '/rubbles', nil, accept: 'text/html' - expect(string_io.string).to match(%([\"Barney\", \"Betty\", \"Bam Bam\"]\n)) - end - - it 'logs filter body' do - conn.get '/filtered_body', nil, accept: 'text/html' - expect(string_io.string).to match(%(soylent green is)) - expect(string_io.string).to match(%(tasty)) - expect(string_io.string).not_to match(%(people)) - end - end - - context 'when logging errors' do - let(:logger_options) { { errors: true } } - - it 'logs error message' do - expect { conn.get '/noroute' }.to raise_error(Faraday::Adapter::Test::Stubs::NotFound) - expect(string_io.string).to match(%(no stubbed request for get http:/noroute)) - end - end - - context 'when logging headers and errors' do - let(:logger_options) { { headers: true, errors: true } } - - it 'logs error message' do - expect { conn.get '/connection_failed' }.to raise_error(Faraday::ConnectionFailed) - expect(string_io.string).to match(%(Failed to open TCP connection)) - end - end - - context 'when using log_level' do - let(:logger_options) { { bodies: true, log_level: :debug } } - - it 'logs request/request body on the specified level (debug)' do - logger.level = Logger::DEBUG - conn.post '/ohyes', 'name=Ebi', accept: 'text/html' - expect(string_io.string).to match(%(name=Ebi)) - expect(string_io.string).to match(%(pebbles)) - end - - it 'logs headers on the debug level' do - logger.level = Logger::DEBUG - conn.get '/hello', nil, accept: 'text/html' - expect(string_io.string).to match(%(Content-Type: "text/html)) - end - - it 'does not log request/response body on the info level' do - logger.level = Logger::INFO - conn.post '/ohyes', 'name=Ebi', accept: 'text/html' - expect(string_io.string).not_to match(%(name=Ebi)) - expect(string_io.string).not_to match(%(pebbles)) - end - - it 'does not log headers on the info level' do - logger.level = Logger::INFO - conn.get '/hello', nil, accept: 'text/html' - expect(string_io.string).not_to match(%(Content-Type: "text/html)) - end - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/response/raise_error_spec.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/response/raise_error_spec.rb deleted file mode 100644 index d106e9a9..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/response/raise_error_spec.rb +++ /dev/null @@ -1,211 +0,0 @@ -# frozen_string_literal: true - -RSpec.describe Faraday::Response::RaiseError do - let(:conn) do - Faraday.new do |b| - b.response :raise_error - b.adapter :test do |stub| - stub.get('ok') { [200, { 'Content-Type' => 'text/html' }, ''] } - stub.get('bad-request') { [400, { 'X-Reason' => 'because' }, 'keep looking'] } - stub.get('unauthorized') { [401, { 'X-Reason' => 'because' }, 'keep looking'] } - stub.get('forbidden') { [403, { 'X-Reason' => 'because' }, 'keep looking'] } - stub.get('not-found') { [404, { 'X-Reason' => 'because' }, 'keep looking'] } - stub.get('proxy-error') { [407, { 'X-Reason' => 'because' }, 'keep looking'] } - stub.get('request-timeout') { [408, { 'X-Reason' => 'because' }, 'keep looking'] } - stub.get('conflict') { [409, { 'X-Reason' => 'because' }, 'keep looking'] } - stub.get('unprocessable-entity') { [422, { 'X-Reason' => 'because' }, 'keep looking'] } - stub.get('too-many-requests') { [429, { 'X-Reason' => 'because' }, 'keep looking'] } - stub.get('4xx') { [499, { 'X-Reason' => 'because' }, 'keep looking'] } - stub.get('nil-status') { [nil, { 'X-Reason' => 'nil' }, 'fail'] } - stub.get('server-error') { [500, { 'X-Error' => 'bailout' }, 'fail'] } - end - end - end - - it 'raises no exception for 200 responses' do - expect { conn.get('ok') }.not_to raise_error - end - - it 'raises Faraday::BadRequestError for 400 responses' do - expect { conn.get('bad-request') }.to raise_error(Faraday::BadRequestError) do |ex| - expect(ex.message).to eq('the server responded with status 400') - expect(ex.response[:headers]['X-Reason']).to eq('because') - expect(ex.response[:status]).to eq(400) - expect(ex.response_status).to eq(400) - expect(ex.response_body).to eq('keep looking') - expect(ex.response_headers['X-Reason']).to eq('because') - end - end - - it 'raises Faraday::UnauthorizedError for 401 responses' do - expect { conn.get('unauthorized') }.to raise_error(Faraday::UnauthorizedError) do |ex| - expect(ex.message).to eq('the server responded with status 401') - expect(ex.response[:headers]['X-Reason']).to eq('because') - expect(ex.response[:status]).to eq(401) - expect(ex.response_status).to eq(401) - expect(ex.response_body).to eq('keep looking') - expect(ex.response_headers['X-Reason']).to eq('because') - end - end - - it 'raises Faraday::ForbiddenError for 403 responses' do - expect { conn.get('forbidden') }.to raise_error(Faraday::ForbiddenError) do |ex| - expect(ex.message).to eq('the server responded with status 403') - expect(ex.response[:headers]['X-Reason']).to eq('because') - expect(ex.response[:status]).to eq(403) - expect(ex.response_status).to eq(403) - expect(ex.response_body).to eq('keep looking') - expect(ex.response_headers['X-Reason']).to eq('because') - end - end - - it 'raises Faraday::ResourceNotFound for 404 responses' do - expect { conn.get('not-found') }.to raise_error(Faraday::ResourceNotFound) do |ex| - expect(ex.message).to eq('the server responded with status 404') - expect(ex.response[:headers]['X-Reason']).to eq('because') - expect(ex.response[:status]).to eq(404) - expect(ex.response_status).to eq(404) - expect(ex.response_body).to eq('keep looking') - expect(ex.response_headers['X-Reason']).to eq('because') - end - end - - it 'raises Faraday::ProxyAuthError for 407 responses' do - expect { conn.get('proxy-error') }.to raise_error(Faraday::ProxyAuthError) do |ex| - expect(ex.message).to eq('407 "Proxy Authentication Required"') - expect(ex.response[:headers]['X-Reason']).to eq('because') - expect(ex.response[:status]).to eq(407) - expect(ex.response_status).to eq(407) - expect(ex.response_body).to eq('keep looking') - expect(ex.response_headers['X-Reason']).to eq('because') - end - end - - it 'raises Faraday::RequestTimeoutError for 408 responses' do - expect { conn.get('request-timeout') }.to raise_error(Faraday::RequestTimeoutError) do |ex| - expect(ex.message).to eq('the server responded with status 408') - expect(ex.response[:headers]['X-Reason']).to eq('because') - expect(ex.response[:status]).to eq(408) - expect(ex.response_status).to eq(408) - expect(ex.response_body).to eq('keep looking') - expect(ex.response_headers['X-Reason']).to eq('because') - end - end - - it 'raises Faraday::ConflictError for 409 responses' do - expect { conn.get('conflict') }.to raise_error(Faraday::ConflictError) do |ex| - expect(ex.message).to eq('the server responded with status 409') - expect(ex.response[:headers]['X-Reason']).to eq('because') - expect(ex.response[:status]).to eq(409) - expect(ex.response_status).to eq(409) - expect(ex.response_body).to eq('keep looking') - expect(ex.response_headers['X-Reason']).to eq('because') - end - end - - it 'raises Faraday::UnprocessableEntityError for 422 responses' do - expect { conn.get('unprocessable-entity') }.to raise_error(Faraday::UnprocessableEntityError) do |ex| - expect(ex.message).to eq('the server responded with status 422') - expect(ex.response[:headers]['X-Reason']).to eq('because') - expect(ex.response[:status]).to eq(422) - expect(ex.response_status).to eq(422) - expect(ex.response_body).to eq('keep looking') - expect(ex.response_headers['X-Reason']).to eq('because') - end - end - - it 'raises Faraday::TooManyRequestsError for 429 responses' do - expect { conn.get('too-many-requests') }.to raise_error(Faraday::TooManyRequestsError) do |ex| - expect(ex.message).to eq('the server responded with status 429') - expect(ex.response[:headers]['X-Reason']).to eq('because') - expect(ex.response[:status]).to eq(429) - expect(ex.response_status).to eq(429) - expect(ex.response_body).to eq('keep looking') - expect(ex.response_headers['X-Reason']).to eq('because') - end - end - - it 'raises Faraday::NilStatusError for nil status in response' do - expect { conn.get('nil-status') }.to raise_error(Faraday::NilStatusError) do |ex| - expect(ex.message).to eq('http status could not be derived from the server response') - expect(ex.response[:headers]['X-Reason']).to eq('nil') - expect(ex.response[:status]).to be_nil - expect(ex.response_status).to be_nil - expect(ex.response_body).to eq('fail') - expect(ex.response_headers['X-Reason']).to eq('nil') - end - end - - it 'raises Faraday::ClientError for other 4xx responses' do - expect { conn.get('4xx') }.to raise_error(Faraday::ClientError) do |ex| - expect(ex.message).to eq('the server responded with status 499') - expect(ex.response[:headers]['X-Reason']).to eq('because') - expect(ex.response[:status]).to eq(499) - expect(ex.response_status).to eq(499) - expect(ex.response_body).to eq('keep looking') - expect(ex.response_headers['X-Reason']).to eq('because') - end - end - - it 'raises Faraday::ServerError for 500 responses' do - expect { conn.get('server-error') }.to raise_error(Faraday::ServerError) do |ex| - expect(ex.message).to eq('the server responded with status 500') - expect(ex.response[:headers]['X-Error']).to eq('bailout') - expect(ex.response[:status]).to eq(500) - expect(ex.response_status).to eq(500) - expect(ex.response_body).to eq('fail') - expect(ex.response_headers['X-Error']).to eq('bailout') - end - end - - describe 'request info' do - let(:conn) do - Faraday.new do |b| - b.response :raise_error, **middleware_options - b.adapter :test do |stub| - stub.post(url, request_body, request_headers) do - [400, { 'X-Reason' => 'because' }, 'keep looking'] - end - end - end - end - let(:middleware_options) { {} } - let(:request_body) { JSON.generate({ 'item' => 'sth' }) } - let(:request_headers) { { 'Authorization' => 'Basic 123' } } - let(:url_path) { 'request' } - let(:query_params) { 'full=true' } - let(:url) { "#{url_path}?#{query_params}" } - - subject(:perform_request) do - conn.post url do |req| - req.headers['Authorization'] = 'Basic 123' - req.body = request_body - end - end - - it 'returns the request info in the exception' do - expect { perform_request }.to raise_error(Faraday::BadRequestError) do |ex| - expect(ex.response[:request][:method]).to eq(:post) - expect(ex.response[:request][:url]).to eq(URI("http:/#{url}")) - expect(ex.response[:request][:url_path]).to eq("/#{url_path}") - expect(ex.response[:request][:params]).to eq({ 'full' => 'true' }) - expect(ex.response[:request][:headers]).to match(a_hash_including(request_headers)) - expect(ex.response[:request][:body]).to eq(request_body) - end - end - - context 'when the include_request option is set to false' do - let(:middleware_options) { { include_request: false } } - - it 'does not include request info in the exception' do - expect { perform_request }.to raise_error(Faraday::BadRequestError) do |ex| - expect(ex.response.keys).to contain_exactly( - :status, - :headers, - :body - ) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/response_spec.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/response_spec.rb deleted file mode 100644 index e3e2c237..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/response_spec.rb +++ /dev/null @@ -1,77 +0,0 @@ -# frozen_string_literal: true - -RSpec.describe Faraday::Response do - subject { Faraday::Response.new(env) } - - let(:env) do - Faraday::Env.from(status: 404, body: 'yikes', url: Faraday::Utils.URI('https://lostisland.github.io/faraday'), - response_headers: { 'Content-Type' => 'text/plain' }) - end - - it { expect(subject.finished?).to be_truthy } - it { expect { subject.finish({}) }.to raise_error(RuntimeError) } - it { expect(subject.success?).to be_falsey } - it { expect(subject.status).to eq(404) } - it { expect(subject.body).to eq('yikes') } - it { expect(subject.headers['Content-Type']).to eq('text/plain') } - it { expect(subject['content-type']).to eq('text/plain') } - - describe '#apply_request' do - before { subject.apply_request(body: 'a=b', method: :post) } - - it { expect(subject.body).to eq('yikes') } - it { expect(subject.env[:method]).to eq(:post) } - end - - describe '#to_hash' do - let(:hash) { subject.to_hash } - - it { expect(hash).to be_a(Hash) } - it { expect(hash[:status]).to eq(subject.status) } - it { expect(hash[:response_headers]).to eq(subject.headers) } - it { expect(hash[:body]).to eq(subject.body) } - it { expect(hash[:url]).to eq(subject.env.url) } - end - - describe 'marshal serialization support' do - subject { Faraday::Response.new } - let(:loaded) { Marshal.load(Marshal.dump(subject)) } - - before do - subject.on_complete {} - subject.finish(env.merge(params: 'moo')) - end - - it { expect(loaded.env[:params]).to be_nil } - it { expect(loaded.env[:body]).to eq(env[:body]) } - it { expect(loaded.env[:response_headers]).to eq(env[:response_headers]) } - it { expect(loaded.env[:status]).to eq(env[:status]) } - it { expect(loaded.env[:url]).to eq(env[:url]) } - end - - describe '#on_complete' do - subject { Faraday::Response.new } - - it 'parse body on finish' do - subject.on_complete { |env| env[:body] = env[:body].upcase } - subject.finish(env) - - expect(subject.body).to eq('YIKES') - end - - it 'can access response body in on_complete callback' do - subject.on_complete { |env| env[:body] = subject.body.upcase } - subject.finish(env) - - expect(subject.body).to eq('YIKES') - end - - it 'can access response body in on_complete callback' do - callback_env = nil - subject.on_complete { |env| callback_env = env } - subject.finish({}) - - expect(subject.env).to eq(callback_env) - end - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/utils/headers_spec.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/utils/headers_spec.rb deleted file mode 100644 index 66751f7f..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/utils/headers_spec.rb +++ /dev/null @@ -1,100 +0,0 @@ -# frozen_string_literal: true - -RSpec.describe Faraday::Utils::Headers do - subject { Faraday::Utils::Headers.new } - - context 'when Content-Type is set to application/json' do - before { subject['Content-Type'] = 'application/json' } - - it { expect(subject.keys).to eq(['Content-Type']) } - it { expect(subject['Content-Type']).to eq('application/json') } - it { expect(subject['CONTENT-TYPE']).to eq('application/json') } - it { expect(subject['content-type']).to eq('application/json') } - it { is_expected.to include('content-type') } - end - - context 'when Content-Type is set to application/xml' do - before { subject['Content-Type'] = 'application/xml' } - - it { expect(subject.keys).to eq(['Content-Type']) } - it { expect(subject['Content-Type']).to eq('application/xml') } - it { expect(subject['CONTENT-TYPE']).to eq('application/xml') } - it { expect(subject['content-type']).to eq('application/xml') } - it { is_expected.to include('content-type') } - end - - describe '#fetch' do - before { subject['Content-Type'] = 'application/json' } - - it { expect(subject.fetch('Content-Type')).to eq('application/json') } - it { expect(subject.fetch('CONTENT-TYPE')).to eq('application/json') } - it { expect(subject.fetch(:content_type)).to eq('application/json') } - it { expect(subject.fetch('invalid', 'default')).to eq('default') } - it { expect(subject.fetch('invalid', false)).to eq(false) } - it { expect(subject.fetch('invalid', nil)).to be_nil } - it { expect(subject.fetch('Invalid') { |key| "#{key} key" }).to eq('Invalid key') } - it 'calls a block when provided' do - block_called = false - expect(subject.fetch('content-type') { block_called = true }).to eq('application/json') - expect(block_called).to be_falsey - end - it 'raises an error if key not found' do - expected_error = defined?(KeyError) ? KeyError : IndexError - expect { subject.fetch('invalid') }.to raise_error(expected_error) - end - end - - describe '#delete' do - before do - subject['Content-Type'] = 'application/json' - @deleted = subject.delete('content-type') - end - - it { expect(@deleted).to eq('application/json') } - it { expect(subject.size).to eq(0) } - it { is_expected.not_to include('content-type') } - it { expect(subject.delete('content-type')).to be_nil } - end - - describe '#parse' do - context 'when response headers leave http status line out' do - let(:headers) { "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n" } - - before { subject.parse(headers) } - - it { expect(subject.keys).to eq(%w[Content-Type]) } - it { expect(subject['Content-Type']).to eq('text/html') } - it { expect(subject['content-type']).to eq('text/html') } - end - - context 'when response headers values include a colon' do - let(:headers) { "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\nLocation: http://httpbingo.org/\r\n\r\n" } - - before { subject.parse(headers) } - - it { expect(subject['location']).to eq('http://httpbingo.org/') } - end - - context 'when response headers include a blank line' do - let(:headers) { "HTTP/1.1 200 OK\r\n\r\nContent-Type: text/html\r\n\r\n" } - - before { subject.parse(headers) } - - it { expect(subject['content-type']).to eq('text/html') } - end - - context 'when response headers include already stored keys' do - let(:headers) { "HTTP/1.1 200 OK\r\nX-Numbers: 123\r\n\r\n" } - - before do - h = subject - h[:x_numbers] = 8 - h.parse(headers) - end - - it do - expect(subject[:x_numbers]).to eq('8, 123') - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/utils_spec.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/utils_spec.rb deleted file mode 100644 index bf7499eb..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday/utils_spec.rb +++ /dev/null @@ -1,118 +0,0 @@ -# frozen_string_literal: true - -RSpec.describe Faraday::Utils do - describe 'headers parsing' do - let(:multi_response_headers) do - "HTTP/1.x 500 OK\r\nContent-Type: text/html; charset=UTF-8\r\n" \ - "HTTP/1.x 200 OK\r\nContent-Type: application/json; charset=UTF-8\r\n\r\n" - end - - it 'parse headers for aggregated responses' do - headers = Faraday::Utils::Headers.new - headers.parse(multi_response_headers) - - result = headers.to_hash - - expect(result['Content-Type']).to eq('application/json; charset=UTF-8') - end - end - - describe 'URI parsing' do - let(:url) { 'http://example.com/abc' } - - it 'escapes safe buffer' do - str = FakeSafeBuffer.new('$32,000.00') - expect(Faraday::Utils.escape(str)).to eq('%2432%2C000.00') - end - - it 'parses with default parser' do - with_default_uri_parser(nil) do - uri = normalize(url) - expect(uri.host).to eq('example.com') - end - end - - it 'parses with URI' do - with_default_uri_parser(::URI) do - uri = normalize(url) - expect(uri.host).to eq('example.com') - end - end - - it 'parses with block' do - with_default_uri_parser(->(u) { "booya#{'!' * u.size}" }) do - expect(normalize(url)).to eq('booya!!!!!!!!!!!!!!!!!!!!!!') - end - end - - it 'replaces headers hash' do - headers = Faraday::Utils::Headers.new('authorization' => 't0ps3cr3t!') - expect(headers).to have_key('authorization') - - headers.replace('content-type' => 'text/plain') - expect(headers).not_to have_key('authorization') - end - end - - describe '.deep_merge!' do - let(:connection_options) { Faraday::ConnectionOptions.new } - let(:url) do - { - url: 'http://example.com/abc', - headers: { 'Mime-Version' => '1.0' }, - request: { oauth: { consumer_key: 'anonymous' } }, - ssl: { version: '2' } - } - end - - it 'recursively merges the headers' do - connection_options.headers = { user_agent: 'My Agent 1.0' } - deep_merge = Faraday::Utils.deep_merge!(connection_options, url) - - expect(deep_merge.headers).to eq('Mime-Version' => '1.0', user_agent: 'My Agent 1.0') - end - - context 'when a target hash has an Options Struct value' do - let(:request) do - { - params_encoder: nil, - proxy: nil, - bind: nil, - timeout: nil, - open_timeout: nil, - read_timeout: nil, - write_timeout: nil, - boundary: nil, - oauth: { consumer_key: 'anonymous' }, - context: nil, - on_data: nil - } - end - let(:ssl) do - { - verify: nil, - ca_file: nil, - ca_path: nil, - verify_mode: nil, - cert_store: nil, - client_cert: nil, - client_key: nil, - certificate: nil, - private_key: nil, - verify_depth: nil, - version: '2', - min_version: nil, - max_version: nil, - verify_hostname: nil - } - end - - it 'does not overwrite an Options Struct value' do - deep_merge = Faraday::Utils.deep_merge!(connection_options, url) - - expect(deep_merge.request.to_h).to eq(request) - expect(deep_merge.ssl.to_h).to eq(ssl) - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday_spec.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday_spec.rb deleted file mode 100644 index 30be29cf..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/faraday_spec.rb +++ /dev/null @@ -1,41 +0,0 @@ -# frozen_string_literal: true - -RSpec.describe Faraday do - it 'has a version number' do - expect(Faraday::VERSION).not_to be nil - end - - context 'proxies to default_connection' do - let(:mock_connection) { double('Connection') } - before do - Faraday.default_connection = mock_connection - end - - it 'proxies methods that exist on the default_connection' do - expect(mock_connection).to receive(:this_should_be_proxied) - - Faraday.this_should_be_proxied - end - - it 'uses method_missing on Faraday if there is no proxyable method' do - expected_message = - if RUBY_VERSION >= '3.3' - "undefined method `this_method_does_not_exist' for module Faraday" - else - "undefined method `this_method_does_not_exist' for Faraday:Module" - end - - expect { Faraday.this_method_does_not_exist }.to raise_error(NoMethodError, expected_message) - end - - it 'proxied methods can be accessed' do - allow(mock_connection).to receive(:this_should_be_proxied) - - expect(Faraday.method(:this_should_be_proxied)).to be_a(Method) - end - - after do - Faraday.default_connection = nil - end - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/spec_helper.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/spec_helper.rb deleted file mode 100644 index 1b80ea24..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/spec_helper.rb +++ /dev/null @@ -1,133 +0,0 @@ -# frozen_string_literal: true - -# This file was generated by the `rspec --init` command. Conventionally, all -# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`. -# The generated `.rspec` file contains `--require spec_helper` which will cause -# this file to always be loaded, without a need to explicitly require it in any -# files. -# -# Given that it is always loaded, you are encouraged to keep this file as -# light-weight as possible. Requiring heavyweight dependencies from this file -# will add to the boot time of your test suite on EVERY test run, even for an -# individual file that may not need all of that loaded. Instead, consider making -# a separate helper file that requires the additional dependencies and performs -# the additional setup, and require it from the spec files that actually need -# it. -# -# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration - -require 'simplecov' -require 'coveralls' -require 'webmock/rspec' -WebMock.disable_net_connect!(allow_localhost: true) - -SimpleCov.formatters = [SimpleCov::Formatter::HTMLFormatter, Coveralls::SimpleCov::Formatter] - -SimpleCov.start do - add_filter '/spec/' - minimum_coverage 84 - minimum_coverage_by_file 26 -end - -require 'faraday' -require 'pry' - -# Ensure all /lib files are loaded -# so they will be included in the test coverage report. -Dir['./lib/**/*.rb'].each { |file| require file } - -# Load all Rspec support files -Dir['./spec/support/**/*.rb'].each { |file| require file } - -RSpec.configure do |config| - # rspec-expectations config goes here. You can use an alternate - # assertion/expectation library such as wrong or the stdlib/minitest - # assertions if you prefer. - config.expect_with :rspec do |expectations| - # This option will default to `true` in RSpec 4. It makes the `description` - # and `failure_message` of custom matchers include text for helper methods - # defined using `chain`, e.g.: - # be_bigger_than(2).and_smaller_than(4).description - # # => "be bigger than 2 and smaller than 4" - # ...rather than: - # # => "be bigger than 2" - expectations.include_chain_clauses_in_custom_matcher_descriptions = true - end - - # rspec-mocks config goes here. You can use an alternate test double - # library (such as bogus or mocha) by changing the `mock_with` option here. - config.mock_with :rspec do |mocks| - # Prevents you from mocking or stubbing a method that does not exist on - # a real object. This is generally recommended, and will default to - # `true` in RSpec 4. - mocks.verify_partial_doubles = true - end - - # This option will default to `:apply_to_host_groups` in RSpec 4 (and will - # have no way to turn it off -- the option exists only for backwards - # compatibility in RSpec 3). It causes shared context metadata to be - # inherited by the metadata hash of host groups and examples, rather than - # triggering implicit auto-inclusion in groups with matching metadata. - config.shared_context_metadata_behavior = :apply_to_host_groups - - # This allows you to limit a spec run to individual examples or groups - # you care about by tagging them with `:focus` metadata. When nothing - # is tagged with `:focus`, all examples get run. RSpec also provides - # aliases for `it`, `describe`, and `context` that include `:focus` - # metadata: `fit`, `fdescribe` and `fcontext`, respectively. - # config.filter_run_when_matching :focus - - # Allows RSpec to persist some state between runs in order to support - # the `--only-failures` and `--next-failure` CLI options. We recommend - # you configure your source control system to ignore this file. - # config.example_status_persistence_file_path = "spec/examples.txt" - - # Limits the available syntax to the non-monkey patched syntax that is - # recommended. For more details, see: - # - http://rspec.info/blog/2012/06/rspecs-new-expectation-syntax/ - # - http://www.teaisaweso.me/blog/2013/05/27/rspecs-new-message-expectation-syntax/ - # - http://rspec.info/blog/2014/05/notable-changes-in-rspec-3/#zero-monkey-patching-mode - # config.disable_monkey_patching! - - # This setting enables warnings. It's recommended, but in some cases may - # be too noisy due to issues in dependencies. - # config.warnings = true - - # Many RSpec users commonly either run the entire suite or an individual - # file, and it's useful to allow more verbose output when running an - # individual spec file. - # if config.files_to_run.one? - # # Use the documentation formatter for detailed output, - # # unless a formatter has already been configured - # # (e.g. via a command-line flag). - # config.default_formatter = "doc" - # end - - # Print the 10 slowest examples and example groups at the - # end of the spec run, to help surface which specs are running - # particularly slow. - # config.profile_examples = 10 - - # Run specs in random order to surface order dependencies. If you find an - # order dependency and want to debug it, you can fix the order by providing - # the seed, which is printed after each run. - # --seed 1234 - config.order = :random - - # Seed global randomization in this process using the `--seed` CLI option. - # Setting this allows you to use `--seed` to deterministically reproduce - # test failures related to randomization by passing the same `--seed` value - # as the one that triggered the failure. - Kernel.srand config.seed - - config.include Faraday::HelperMethods -end - -# Extends RSpec DocumentationFormatter to hide skipped tests. -module FormatterOverrides - def example_pending(_arg); end - - def dump_pending(_arg); end - - RSpec::Core::Formatters::DocumentationFormatter.prepend self -end diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/support/disabling_stub.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/support/disabling_stub.rb deleted file mode 100644 index 3df2f21b..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/support/disabling_stub.rb +++ /dev/null @@ -1,14 +0,0 @@ -# frozen_string_literal: true - -# Allows to disable WebMock stubs -module DisablingStub - def disable - @disabled = true - end - - def disabled? - @disabled - end - - WebMock::RequestStub.prepend self -end diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/support/fake_safe_buffer.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/support/fake_safe_buffer.rb deleted file mode 100644 index 69afd6ea..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/support/fake_safe_buffer.rb +++ /dev/null @@ -1,15 +0,0 @@ -# frozen_string_literal: true - -# emulates ActiveSupport::SafeBuffer#gsub -FakeSafeBuffer = Struct.new(:string) do - def to_s - self - end - - def gsub(regex) - string.gsub(regex) do - match, = Regexp.last_match(0), '' =~ /a/ # rubocop:disable Performance/StringInclude - yield(match) - end - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/support/helper_methods.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/support/helper_methods.rb deleted file mode 100644 index 0f5d4f5a..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/support/helper_methods.rb +++ /dev/null @@ -1,96 +0,0 @@ -# frozen_string_literal: true - -module Faraday - module HelperMethods - def self.included(base) - base.extend ClassMethods - end - - module ClassMethods - def features(*features) - @features = features - end - - def on_feature(name) - yield if block_given? && feature?(name) - end - - def feature?(name) - if @features.nil? - superclass.feature?(name) if superclass.respond_to?(:feature?) - elsif @features.include?(name) - true - end - end - - def method_with_body?(method) - METHODS_WITH_BODY.include?(method.to_s) - end - end - - def ssl_mode? - ENV['SSL'] == 'yes' - end - - def normalize(url) - Faraday::Utils::URI(url) - end - - def with_default_uri_parser(parser) - old_parser = Faraday::Utils.default_uri_parser - begin - Faraday::Utils.default_uri_parser = parser - yield - ensure - Faraday::Utils.default_uri_parser = old_parser - end - end - - def with_env(new_env) - old_env = {} - - new_env.each do |key, value| - old_env[key] = ENV.fetch(key, false) - ENV[key] = value - end - - begin - yield - ensure - old_env.each do |key, value| - value == false ? ENV.delete(key) : ENV[key] = value - end - end - end - - def with_env_proxy_disabled - Faraday.ignore_env_proxy = true - - begin - yield - ensure - Faraday.ignore_env_proxy = false - end - end - - def capture_warnings - old = $stderr - $stderr = StringIO.new - begin - yield - $stderr.string - ensure - $stderr = old - end - end - - def method_with_body?(method) - self.class.method_with_body?(method) - end - - def big_string - kb = 1024 - (32..126).map(&:chr).cycle.take(50 * kb).join - end - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/support/shared_examples/adapter.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/support/shared_examples/adapter.rb deleted file mode 100644 index 62569088..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/support/shared_examples/adapter.rb +++ /dev/null @@ -1,105 +0,0 @@ -# frozen_string_literal: true - -shared_examples 'an adapter' do |**options| - before { skip } if options[:skip] - - context 'with SSL enabled' do - before { ENV['SSL'] = 'yes' } - include_examples 'adapter examples', options - end - - context 'with SSL disabled' do - before { ENV['SSL'] = 'no' } - include_examples 'adapter examples', options - end -end - -shared_examples 'adapter examples' do |**options| - include Faraday::StreamingResponseChecker - - let(:adapter) { described_class.name.split('::').last } - - let(:conn_options) { { headers: { 'X-Faraday-Adapter' => adapter } }.merge(options[:conn_options] || {}) } - - let(:adapter_options) do - return [] unless options[:adapter_options] - - if options[:adapter_options].is_a?(Array) - options[:adapter_options] - else - [options[:adapter_options]] - end - end - - let(:protocol) { ssl_mode? ? 'https' : 'http' } - let(:remote) { "#{protocol}://example.com" } - let(:stub_remote) { remote } - - let(:conn) do - conn_options[:ssl] ||= {} - conn_options[:ssl][:ca_file] ||= ENV.fetch('SSL_FILE', nil) - conn_options[:ssl][:verify_hostname] ||= ENV['SSL_VERIFY_HOSTNAME'] == 'yes' - - Faraday.new(remote, conn_options) do |conn| - conn.request :url_encoded - conn.response :raise_error - conn.adapter described_class, *adapter_options - end - end - - let!(:request_stub) { stub_request(http_method, stub_remote) } - - after do - expect(request_stub).to have_been_requested unless request_stub.disabled? - end - - describe '#delete' do - let(:http_method) { :delete } - - it_behaves_like 'a request method', :delete - end - - describe '#get' do - let(:http_method) { :get } - - it_behaves_like 'a request method', :get - end - - describe '#head' do - let(:http_method) { :head } - - it_behaves_like 'a request method', :head - end - - describe '#options' do - let(:http_method) { :options } - - it_behaves_like 'a request method', :options - end - - describe '#patch' do - let(:http_method) { :patch } - - it_behaves_like 'a request method', :patch - end - - describe '#post' do - let(:http_method) { :post } - - it_behaves_like 'a request method', :post - end - - describe '#put' do - let(:http_method) { :put } - - it_behaves_like 'a request method', :put - end - - on_feature :trace_method do - describe '#trace' do - let(:http_method) { :trace } - - it_behaves_like 'a request method', :trace - end - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/support/shared_examples/params_encoder.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/support/shared_examples/params_encoder.rb deleted file mode 100644 index 38c85679..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/support/shared_examples/params_encoder.rb +++ /dev/null @@ -1,18 +0,0 @@ -# frozen_string_literal: true - -shared_examples 'a params encoder' do - it 'escapes safe buffer' do - monies = FakeSafeBuffer.new('$32,000.00') - expect(subject.encode('a' => monies)).to eq('a=%2432%2C000.00') - end - - it 'raises type error for empty string' do - expect { subject.encode('') }.to raise_error(TypeError) do |error| - expect(error.message).to eq("Can't convert String into Hash.") - end - end - - it 'encodes nil' do - expect(subject.encode('a' => nil)).to eq('a') - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/support/shared_examples/request_method.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/support/shared_examples/request_method.rb deleted file mode 100644 index afa33767..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/support/shared_examples/request_method.rb +++ /dev/null @@ -1,263 +0,0 @@ -# frozen_string_literal: true - -shared_examples 'proxy examples' do - it 'handles requests with proxy' do - res = conn.public_send(http_method, '/') - - expect(res.status).to eq(200) - end - - it 'handles proxy failures' do - request_stub.to_return(status: 407) - - expect { conn.public_send(http_method, '/') }.to raise_error(Faraday::ProxyAuthError) - end -end - -shared_examples 'a request method' do |http_method| - let(:query_or_body) { method_with_body?(http_method) ? :body : :query } - let(:response) { conn.public_send(http_method, '/') } - - unless http_method == :head && feature?(:skip_response_body_on_head) - it 'retrieves the response body' do - res_body = 'test' - request_stub.to_return(body: res_body) - expect(conn.public_send(http_method, '/').body).to eq(res_body) - end - end - - it 'handles headers with multiple values' do - request_stub.to_return(headers: { 'Set-Cookie' => 'name=value' }) - expect(response.headers['set-cookie']).to eq('name=value') - end - - it 'retrieves the response headers' do - request_stub.to_return(headers: { 'Content-Type' => 'text/plain' }) - expect(response.headers['Content-Type']).to match(%r{text/plain}) - expect(response.headers['content-type']).to match(%r{text/plain}) - end - - it 'sends user agent' do - request_stub.with(headers: { 'User-Agent' => 'Agent Faraday' }) - conn.public_send(http_method, '/', nil, user_agent: 'Agent Faraday') - end - - it 'represents empty body response as blank string' do - expect(response.body).to eq('') - end - - it 'handles connection error' do - request_stub.disable - expect { conn.public_send(http_method, 'http://localhost:4') }.to raise_error(Faraday::ConnectionFailed) - end - - on_feature :local_socket_binding do - it 'binds local socket' do - stub_request(http_method, 'http://example.com') - - host = '1.2.3.4' - port = 1234 - conn_options[:request] = { bind: { host: host, port: port } } - - conn.public_send(http_method, '/') - - expect(conn.options[:bind][:host]).to eq(host) - expect(conn.options[:bind][:port]).to eq(port) - end - end - - # context 'when wrong ssl certificate is provided' do - # let(:ca_file_path) { 'tmp/faraday-different-ca-cert.crt' } - # before { conn_options.merge!(ssl: { ca_file: ca_file_path }) } - # - # it do - # expect { conn.public_send(http_method, '/') }.to raise_error(Faraday::SSLError) # do |ex| - # expect(ex.message).to include?('certificate') - # end - # end - # end - - on_feature :request_body_on_query_methods do - it 'sends request body' do - request_stub.with({ body: 'test' }) - res = if query_or_body == :body - conn.public_send(http_method, '/', 'test') - else - conn.public_send(http_method, '/') do |req| - req.body = 'test' - end - end - expect(res.env.request_body).to eq('test') - end - end - - it 'sends url encoded parameters' do - payload = { name: 'zack' } - request_stub.with({ query_or_body => payload }) - res = conn.public_send(http_method, '/', payload) - if query_or_body == :query - expect(res.env.request_body).to be_nil - else - expect(res.env.request_body).to eq('name=zack') - end - end - - it 'sends url encoded nested parameters' do - payload = { name: { first: 'zack' } } - request_stub.with({ query_or_body => payload }) - conn.public_send(http_method, '/', payload) - end - - # TODO: This needs reimplementation: see https://github.com/lostisland/faraday/issues/718 - # Should raise Faraday::TimeoutError - it 'supports timeout option' do - conn_options[:request] = { timeout: 1 } - request_stub.to_timeout - exc = adapter == 'NetHttp' ? Faraday::ConnectionFailed : Faraday::TimeoutError - expect { conn.public_send(http_method, '/') }.to raise_error(exc) - end - - # TODO: This needs reimplementation: see https://github.com/lostisland/faraday/issues/718 - # Should raise Faraday::ConnectionFailed - it 'supports open_timeout option' do - conn_options[:request] = { open_timeout: 1 } - request_stub.to_timeout - exc = adapter == 'NetHttp' ? Faraday::ConnectionFailed : Faraday::TimeoutError - expect { conn.public_send(http_method, '/') }.to raise_error(exc) - end - - on_feature :reason_phrase_parse do - it 'parses the reason phrase' do - request_stub.to_return(status: [200, 'OK']) - expect(response.reason_phrase).to eq('OK') - end - end - - on_feature :compression do - # Accept-Encoding header not sent for HEAD requests as body is not expected in the response. - unless http_method == :head - it 'handles gzip compression' do - request_stub.with(headers: { 'Accept-Encoding' => /\bgzip\b/ }) - conn.public_send(http_method, '/') - end - - it 'handles deflate compression' do - request_stub.with(headers: { 'Accept-Encoding' => /\bdeflate\b/ }) - conn.public_send(http_method, '/') - end - end - end - - on_feature :streaming do - describe 'streaming' do - let(:streamed) { [] } - - context 'when response is empty' do - it 'handles streaming' do - env = nil - conn.public_send(http_method, '/') do |req| - req.options.on_data = proc do |chunk, size, block_env| - streamed << [chunk, size] - env ||= block_env - end - end - - expect(streamed).to eq([['', 0]]) - # TODO: enable this after updating all existing adapters to the new streaming API - # expect(env).to be_a(Faraday::Env) - # expect(env.status).to eq(200) - end - end - - context 'when response contains big data' do - before { request_stub.to_return(body: big_string) } - - it 'handles streaming' do - env = nil - response = conn.public_send(http_method, '/') do |req| - req.options.on_data = proc do |chunk, size, block_env| - streamed << [chunk, size] - env ||= block_env - end - end - - expect(response.body).to eq('') - check_streaming_response(streamed, chunk_size: 16 * 1024) - # TODO: enable this after updating all existing adapters to the new streaming API - # expect(env).to be_a(Faraday::Env) - # expect(env.status).to eq(200) - end - end - end - end - - on_feature :parallel do - context 'with parallel setup' do - before do - @resp1 = nil - @resp2 = nil - @payload1 = { a: '1' } - @payload2 = { b: '2' } - - request_stub - .with({ query_or_body => @payload1 }) - .to_return(body: @payload1.to_json) - - stub_request(http_method, remote) - .with({ query_or_body => @payload2 }) - .to_return(body: @payload2.to_json) - - conn.in_parallel do - @resp1 = conn.public_send(http_method, '/', @payload1) - @resp2 = conn.public_send(http_method, '/', @payload2) - - expect(conn.in_parallel?).to be_truthy - expect(@resp1.body).to be_nil - expect(@resp2.body).to be_nil - end - - expect(conn.in_parallel?).to be_falsey - end - - it 'handles parallel requests status' do - expect(@resp1&.status).to eq(200) - expect(@resp2&.status).to eq(200) - end - - unless http_method == :head && feature?(:skip_response_body_on_head) - it 'handles parallel requests body' do - expect(@resp1&.body).to eq(@payload1.to_json) - expect(@resp2&.body).to eq(@payload2.to_json) - end - end - end - end - - context 'when a proxy is provided as option' do - before do - conn_options[:proxy] = 'http://env-proxy.com:80' - end - - include_examples 'proxy examples' - end - - context 'when http_proxy env variable is set' do - let(:proxy_url) { 'http://env-proxy.com:80' } - - around do |example| - with_env 'http_proxy' => proxy_url do - example.run - end - end - - include_examples 'proxy examples' - - context 'when the env proxy is ignored' do - around do |example| - with_env_proxy_disabled(&example) - end - - include_examples 'proxy examples' - end - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/support/streaming_response_checker.rb b/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/support/streaming_response_checker.rb deleted file mode 100644 index 8ef25999..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-2.9.0/spec/support/streaming_response_checker.rb +++ /dev/null @@ -1,35 +0,0 @@ -# frozen_string_literal: true - -module Faraday - module StreamingResponseChecker - def check_streaming_response(streamed, options = {}) - opts = { - prefix: '', - streaming?: true - }.merge(options) - - expected_response = opts[:prefix] + big_string - - chunks, sizes = streamed.transpose - - # Check that the total size of the chunks (via the last size returned) - # is the same size as the expected_response - expect(sizes.last).to eq(expected_response.bytesize) - - start_index = 0 - expected_chunks = [] - chunks.each do |actual_chunk| - expected_chunk = expected_response[start_index..((start_index + actual_chunk.bytesize) - 1)] - expected_chunks << expected_chunk - start_index += expected_chunk.bytesize - end - - # it's easier to read a smaller portion, so we check that first - expect(expected_chunks[0][0..255]).to eq(chunks[0][0..255]) - - [expected_chunks, chunks].transpose.each do |expected, actual| - expect(actual).to eq(expected) - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/LICENSE b/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/LICENSE deleted file mode 100644 index e92d6ded..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/LICENSE +++ /dev/null @@ -1,11 +0,0 @@ - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/README.md b/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/README.md deleted file mode 100644 index a52f1f3f..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/README.md +++ /dev/null @@ -1,206 +0,0 @@ -# Faraday Http Cache - -[![Gem Version](https://badge.fury.io/rb/faraday-http-cache.svg)](https://rubygems.org/gems/faraday-http-cache) -[![Build](https://github.com/sourcelevel/faraday-http-cache/actions/workflows/main.yml/badge.svg)](https://github.com/sourcelevel/faraday-http-cache/actions) - -A [Faraday](https://github.com/lostisland/faraday) middleware that respects HTTP cache, -by checking expiration and validation of the stored responses. - -## Installation - -Add it to your Gemfile: - -```ruby -gem 'faraday-http-cache' -``` - -## Usage and configuration - -You have to use the middleware in the Faraday instance that you want to, -along with a suitable `store` to cache the responses. You can use the new -shortcut using a symbol or passing the middleware class - -```ruby -client = Faraday.new do |builder| - builder.use :http_cache, store: Rails.cache - # or - builder.use Faraday::HttpCache, store: Rails.cache - - builder.adapter Faraday.default_adapter -end -``` - -The middleware accepts a `store` option for the cache backend responsible for recording -the API responses that should be stored. Stores should respond to `write`, `read` and `delete`, -just like an object from the `ActiveSupport::Cache` API. - -```ruby -# Connect the middleware to a Memcache instance. -store = ActiveSupport::Cache.lookup_store(:mem_cache_store, ['localhost:11211']) - -client = Faraday.new do |builder| - builder.use :http_cache, store: store - builder.adapter Faraday.default_adapter -end - -# Or use the Rails.cache instance inside your Rails app. -client = Faraday.new do |builder| - builder.use :http_cache, store: Rails.cache - builder.adapter Faraday.default_adapter -end -``` -The default store provided is a simple in memory cache that lives on the client instance. -This type of store **might not be persisted across multiple processes or connection instances** -so it is probably not suitable for most production environments. -Make sure that you configure a store that is suitable for you. - -The stdlib `JSON` module is used for serialization by default, which can struggle with unicode -characters in responses in Ruby < 3.1. For example, if your JSON returns `"name": "Raül"` then -you might see errors like: - -``` -Response could not be serialized: "\xC3" from ASCII-8BIT to UTF-8. Try using Marshal to serialize. -``` - -For full unicode support, or if you expect to be dealing with images, you can use the stdlib -[Marshal][marshal] instead. Alternatively you could use another json library like `oj` or `yajl-ruby`. - -```ruby -client = Faraday.new do |builder| - builder.use :http_cache, store: Rails.cache, serializer: Marshal - builder.adapter Faraday.default_adapter -end -``` - -### Strategies - -You can provide a `:strategy` option to the middleware to specify the strategy to use. - -```ruby -client = Faraday.new do |builder| - builder.use :http_cache, store: Rails.cache, strategy: Faraday::HttpCache::Strategies::ByVary - builder.adapter Faraday.default_adapter -end -``` - -Available strategies are: - -#### `Faraday::HttpCache::Strategies::ByUrl` - -The default strategy. -It Uses URL + HTTP method to generate cache keys and stores an array of request + response for each key. - -#### `Faraday::HttpCache::Strategies::ByVary` - -This strategy uses headers from `Vary` header to generate cache keys. -It also uses cache to store `Vary` headers mapped to the request URL. -This strategy is more suitable for caching private responses with the same URLs but different results for different users, like `https://api.github.com/user`. - -*Note:* To automatically remove stale cache keys, you might want to use the `:expires_in` option. - -```ruby -store = ActiveSupport::Cache.lookup_store(:redis_cache_store, expires_in: 1.day, url: 'redis://localhost:6379/0') -client = Faraday.new do |builder| - builder.use :http_cache, store: store, strategy: Faraday::HttpCache::Strategies::ByVary - builder.adapter Faraday.default_adapter -end -``` - -#### Custom strategies - -You can write your own strategy by subclassing `Faraday::HttpCache::Strategies::BaseStrategy` and implementing `#write`, `#read` and `#delete` methods. - -### Logging - -You can provide a `:logger` option that will receive debug information based on the middleware -operations: - -```ruby -client = Faraday.new do |builder| - builder.use :http_cache, store: Rails.cache, logger: Rails.logger - builder.adapter Faraday.default_adapter -end - -client.get('https://site/api/users') -# logs "HTTP Cache: [GET users] miss, store" -``` - -### Instrumentation - -In addition to logging you can instrument the middleware by passing in an `:instrumenter` option -such as ActiveSupport::Notifications (compatible objects are also allowed). - -The event `http_cache.faraday` will be published every time the middleware -processes a request. In the event payload, `:env` contains the response Faraday env and -`:cache_status` contains a Symbol indicating the status of the cache processing for that request: - -- `:unacceptable` means that the request did not go through the cache at all. -- `:miss` means that no cached response could be found. -- `:invalid` means that the cached response could not be validated against the server. -- `:valid` means that the cached response *could* be validated against the server. -- `:fresh` means that the cached response was still fresh and could be returned without even - calling the server. - -```ruby -client = Faraday.new do |builder| - builder.use :http_cache, store: Rails.cache, instrumenter: ActiveSupport::Notifications - builder.adapter Faraday.default_adapter -end - -# Subscribes to all events from Faraday::HttpCache. -ActiveSupport::Notifications.subscribe "http_cache.faraday" do |*args| - event = ActiveSupport::Notifications::Event.new(*args) - cache_status = event.payload[:cache_status] - statsd = Statsd.new - - case cache_status - when :fresh, :valid - statsd.increment('api-calls.cache_hits') - when :invalid, :miss - statsd.increment('api-calls.cache_misses') - when :unacceptable - statsd.increment('api-calls.cache_bypass') - end -end -``` - -## See it live - -You can clone this repository, install its dependencies with Bundler (run `bundle install`) and -execute the files under the `examples` directory to see a sample of the middleware usage. - -## What gets cached? - -The middleware will use the following headers to make caching decisions: -- Vary -- Cache-Control -- Age -- Last-Modified -- ETag -- Expires - -### Cache-Control - -The `max-age`, `must-revalidate`, `proxy-revalidate` and `s-maxage` directives are checked. - -### Shared vs. non-shared caches - -By default, the middleware acts as a "shared cache" per RFC 2616. This means it does not cache -responses with `Cache-Control: private`. This behavior can be changed by passing in the -`:shared_cache` configuration option: - -```ruby -client = Faraday.new do |builder| - builder.use :http_cache, shared_cache: false - builder.adapter Faraday.default_adapter -end - -client.get('https://site/api/some-private-resource') # => will be cached -``` - -## License - -Copyright (c) 2012-2018 Plataformatec. -Copyright (c) 2019 SourceLevel and contributors. - - [marshal]: https://www.ruby-doc.org/core-3.0/Marshal.html diff --git a/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/lib/faraday-http-cache.rb b/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/lib/faraday-http-cache.rb deleted file mode 100644 index 93ed1d62..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/lib/faraday-http-cache.rb +++ /dev/null @@ -1 +0,0 @@ -require 'faraday/http_cache' diff --git a/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/lib/faraday/http_cache.rb b/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/lib/faraday/http_cache.rb deleted file mode 100644 index f9b613e9..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/lib/faraday/http_cache.rb +++ /dev/null @@ -1,356 +0,0 @@ -# frozen_string_literal: true - -require 'faraday' - -require 'faraday/http_cache/storage' -require 'faraday/http_cache/request' -require 'faraday/http_cache/response' -require 'faraday/http_cache/strategies' - -module Faraday - # Public: The middleware responsible for caching and serving responses. - # The middleware use the provided configuration options to establish on of - # 'Faraday::HttpCache::Strategies' to cache responses retrieved by the stack - # adapter. If a stored response can be served again for a subsequent - # request, the middleware will return the response instead of issuing a new - # request to it's server. This middleware should be the last attached handler - # to your stack, so it will be closest to the inner app, avoiding issues - # with other middlewares on your stack. - # - # Examples: - # - # # Using the middleware with a simple client: - # client = Faraday.new do |builder| - # builder.use :http_cache, store: my_store_backend - # builder.adapter Faraday.default_adapter - # end - # - # # Attach a Logger to the middleware. - # client = Faraday.new do |builder| - # builder.use :http_cache, logger: my_logger_instance, store: my_store_backend - # builder.adapter Faraday.default_adapter - # end - # - # # Provide an existing CacheStore (for instance, from a Rails app) - # client = Faraday.new do |builder| - # builder.use :http_cache, store: Rails.cache - # end - # - # # Use Marshal for serialization - # client = Faraday.new do |builder| - # builder.use :http_cache, store: Rails.cache, serializer: Marshal - # end - # - # # Instrument events using ActiveSupport::Notifications - # client = Faraday.new do |builder| - # builder.use :http_cache, store: Rails.cache, instrumenter: ActiveSupport::Notifications - # end - class HttpCache < Faraday::Middleware - UNSAFE_METHODS = %i[post put delete patch].freeze - - ERROR_STATUSES = (400..499).freeze - - # The name of the instrumentation event. - EVENT_NAME = 'http_cache.faraday' - - CACHE_STATUSES = [ - # The request was not cacheable. - :unacceptable, - - # The response was cached and can still be used. - :fresh, - - # The response was cached and the server has validated it with a 304 response. - :valid, - - # The response was cached but was not revalidated by the server. - :invalid, - - # No response was found in the cache. - :miss, - - # The response can't be cached. - :uncacheable, - - # The request was cached but need to be revalidated by the server. - :must_revalidate - ].freeze - - # Public: Initializes a new HttpCache middleware. - # - # app - the next endpoint on the 'Faraday' stack. - # :store - A cache store that should respond to 'read', 'write', and 'delete'. - # :serializer - A serializer that should respond to 'dump' and 'load'. - # :shared_cache - A flag to mark the middleware as a shared cache or not. - # :instrumenter - An instrumentation object that should respond to 'instrument'. - # :instrument_name - The String name of the instrument being reported on (optional). - # :logger - A logger object. - # - # Examples: - # - # # Initialize the middleware with a logger. - # Faraday::HttpCache.new(app, logger: my_logger) - # - # # Initialize the middleware with a logger and Marshal as a serializer - # Faraday::HttpCache.new(app, logger: my_logger, serializer: Marshal) - # - # # Initialize the middleware with a FileStore at the 'tmp' dir. - # store = ActiveSupport::Cache.lookup_store(:file_store, ['tmp']) - # Faraday::HttpCache.new(app, store: store) - # - # # Initialize the middleware with a MemoryStore and logger - # store = ActiveSupport::Cache.lookup_store - # Faraday::HttpCache.new(app, store: store, logger: my_logger) - def initialize(app, options = {}) - super(app) - - options = options.dup - @logger = options[:logger] - @shared_cache = options.delete(:shared_cache) { true } - @instrumenter = options.delete(:instrumenter) - @instrument_name = options.delete(:instrument_name) { EVENT_NAME } - - strategy = options.delete(:strategy) { Strategies::ByUrl } - - @strategy = strategy.new(**options) - end - - # Public: Process the request into a duplicate of this instance to - # ensure that the internal state is preserved. - def call(env) - dup.call!(env) - end - - # Internal: Process the stack request to try to serve a cache response. - # On a cacheable request, the middleware will attempt to locate a - # valid stored response to serve. On a cache miss, the middleware will - # forward the request and try to store the response for future requests. - # If the request can't be cached, the request will be delegated directly - # to the underlying app and does nothing to the response. - # The processed steps will be recorded to be logged once the whole - # process is finished. - # - # Returns a 'Faraday::Response' instance. - def call!(env) - @trace = [] - @request = create_request(env) - - response = nil - - if @request.cacheable? - response = process(env) - else - trace :unacceptable - response = @app.call(env) - end - - response.on_complete do - delete(@request, response) if should_delete?(response.status, @request.method) - log_request - response.env[:http_cache_trace] = @trace - instrument(response.env) - end - end - - protected - - # Internal: Gets the request object created from the Faraday env Hash. - attr_reader :request - - private - - # Internal: Should this cache instance act like a "shared cache" according - # to the the definition in RFC 2616? - def shared_cache? - @shared_cache - end - - # Internal: Checks if the current request method should remove any existing - # cache entries for the same resource. - # - # Returns true or false. - def should_delete?(status, method) - UNSAFE_METHODS.include?(method) && !ERROR_STATUSES.cover?(status) - end - - # Internal: Tries to locate a valid response or forwards the call to the stack. - # * If no entry is present on the storage, the 'fetch' method will forward - # the call to the remaining stack and return the new response. - # * If a fresh response is found, the middleware will abort the remaining - # stack calls and return the stored response back to the client. - # * If a response is found but isn't fresh anymore, the middleware will - # revalidate the response back to the server. - # - # env - the environment 'Hash' provided from the 'Faraday' stack. - # - # Returns the 'Faraday::Response' instance to be served. - def process(env) - entry = @strategy.read(@request) - - return fetch(env) if entry.nil? - - if entry.fresh? && !@request.no_cache? - response = entry.to_response(env) - trace :fresh - else - trace :must_revalidate - response = validate(entry, env) - end - - response - end - - # Internal: Tries to validated a stored entry back to it's origin server - # using the 'If-Modified-Since' and 'If-None-Match' headers with the - # existing 'Last-Modified' and 'ETag' headers. If the new response - # is marked as 'Not Modified', the previous stored response will be used - # and forwarded against the Faraday stack. Otherwise, the freshly new - # response will be stored (replacing the old one) and used. - # - # entry - a stale 'Faraday::HttpCache::Response' retrieved from the cache. - # env - the environment 'Hash' to perform the request. - # - # Returns the 'Faraday::HttpCache::Response' to be forwarded into the stack. - def validate(entry, env) - headers = env[:request_headers] - headers['If-Modified-Since'] = entry.last_modified if entry.last_modified - headers['If-None-Match'] = entry.etag if entry.etag - - @app.call(env).on_complete do |requested_env| - response = Response.new(requested_env) - if response.not_modified? - trace :valid - updated_response_headers = response.payload[:response_headers] - - # These headers are not allowed in 304 responses, yet some proxy - # servers add them in. Don't override the values from the original - # response. - updated_response_headers.delete('Content-Type') - updated_response_headers.delete('Content-Length') - - updated_payload = entry.payload - updated_payload[:response_headers].update(updated_response_headers) - requested_env.update(updated_payload) - response = Response.new(updated_payload) - else - trace :invalid - end - store(response) - end - end - - # Internal: Records a traced action to be used by the logger once the - # request/response phase is finished. - # - # operation - the name of the performed action, a String or Symbol. - # - # Returns nothing. - def trace(operation) - @trace << operation - end - - # Internal: Stores the response into the storage. - # If the response isn't cacheable, a trace action 'uncacheable' will be - # recorded for logging purposes. - # - # response - a 'Faraday::HttpCache::Response' instance to be stored. - # - # Returns nothing. - def store(response) - if shared_cache? ? response.cacheable_in_shared_cache? : response.cacheable_in_private_cache? - trace :store - @strategy.write(@request, response) - else - trace :uncacheable - end - end - - def delete(request, response) - headers = %w[Location Content-Location] - headers.each do |header| - url = response.headers[header] - @strategy.delete(url) if url - end - - @strategy.delete(request.url) - trace :delete - end - - # Internal: Fetches the response from the Faraday stack and stores it. - # - # env - the environment 'Hash' from the Faraday stack. - # - # Returns the fresh 'Faraday::Response' instance. - def fetch(env) - trace :miss - @app.call(env).on_complete do |fresh_env| - response = Response.new(create_response(fresh_env)) - store(response) - end - end - - # Internal: Creates a new 'Hash' containing the response information. - # - # env - the environment 'Hash' from the Faraday stack. - # - # Returns a 'Hash' containing the ':status', ':body' and 'response_headers' - # entries. - def create_response(env) - hash = env.to_hash - - { - status: hash[:status], - body: hash[:body] || hash[:response_body], - response_headers: hash[:response_headers], - reason_phrase: hash[:reason_phrase] - } - end - - def create_request(env) - Request.from_env(env) - end - - # Internal: Logs the trace info about the incoming request - # and how the middleware handled it. - # This method does nothing if theresn't a logger present. - # - # Returns nothing. - def log_request - return unless @logger - - method = @request.method.to_s.upcase - path = @request.url.request_uri - @logger.debug { "HTTP Cache: [#{method} #{path}] #{@trace.join(', ')}" } - end - - # Internal: instruments the request processing. - # - # Returns nothing. - def instrument(env) - return unless @instrumenter - - payload = { - env: env, - cache_status: extract_status(env[:http_cache_trace]) - } - - @instrumenter.instrument(@instrument_name, payload) - # DEPRECATED: Event name from the 1.1.1 release that isn't compatible - # with the `ActiveSupport::LogSubscriber` API. - @instrumenter.instrument('process_request.http_cache.faraday', payload) - end - - # Internal: Extracts the cache status from a trace. - # - # Returns the Symbol status or nil if none was available. - def extract_status(trace) - CACHE_STATUSES.find { |status| trace.include?(status) } - end - end -end - -if Faraday.respond_to?(:register_middleware) - Faraday.register_middleware http_cache: Faraday::HttpCache -elsif Faraday::Middleware.respond_to?(:register_middleware) - Faraday::Middleware.register_middleware http_cache: Faraday::HttpCache -end diff --git a/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/lib/faraday/http_cache/cache_control.rb b/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/lib/faraday/http_cache/cache_control.rb deleted file mode 100644 index 05d546cb..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/lib/faraday/http_cache/cache_control.rb +++ /dev/null @@ -1,122 +0,0 @@ -# frozen_string_literal: true - -module Faraday - class HttpCache < Faraday::Middleware - # Internal: A class to represent the 'Cache-Control' header options. - # This implementation is based on 'rack-cache' internals by Ryan Tomayko. - # It breaks the several directives into keys/values and stores them into - # a Hash. - class CacheControl - # Internal: Initialize a new CacheControl. - def initialize(header) - @directives = parse(header.to_s) - end - - # Internal: Checks if the 'public' directive is present. - def public? - @directives['public'] - end - - # Internal: Checks if the 'private' directive is present. - def private? - @directives['private'] - end - - # Internal: Checks if the 'no-cache' directive is present. - def no_cache? - @directives['no-cache'] - end - - # Internal: Checks if the 'no-store' directive is present. - def no_store? - @directives['no-store'] - end - - # Internal: Gets the 'max-age' directive as an Integer. - # - # Returns nil if the 'max-age' directive isn't present. - def max_age - @directives['max-age'].to_i if @directives.key?('max-age') - end - - # Internal: Gets the 'max-age' directive as an Integer. - # - # takes the age header integer value and reduces the max-age and s-maxage - # if present to account for having to remove static age header when caching responses - def normalize_max_ages(age) - if age > 0 - @directives['max-age'] = @directives['max-age'].to_i - age if @directives.key?('max-age') - @directives['s-maxage'] = @directives['s-maxage'].to_i - age if @directives.key?('s-maxage') - end - end - - # Internal: Gets the 's-maxage' directive as an Integer. - # - # Returns nil if the 's-maxage' directive isn't present. - def shared_max_age - @directives['s-maxage'].to_i if @directives.key?('s-maxage') - end - alias s_maxage shared_max_age - - # Internal: Checks if the 'must-revalidate' directive is present. - def must_revalidate? - @directives['must-revalidate'] - end - - # Internal: Checks if the 'proxy-revalidate' directive is present. - def proxy_revalidate? - @directives['proxy-revalidate'] - end - - # Internal: Gets the String representation for the cache directives. - # Directives are joined by a '=' and then combined into a single String - # separated by commas. Directives with a 'true' value will omit the '=' - # sign and their value. - # - # Returns the Cache Control string. - def to_s - booleans = [] - values = [] - - @directives.each do |key, value| - if value == true - booleans << key - elsif value - values << "#{key}=#{value}" - end - end - - (booleans.sort + values.sort).join(', ') - end - - private - - # Internal: Parses the Cache Control string to a Hash. - # Existing whitespace will be removed and the string is split on commas. - # For each part everything before a '=' will be treated as the key - # and the exceeding will be treated as the value. If only the key is - # present then the assigned value will default to true. - # - # Examples: - # parse("max-age=600") - # # => { "max-age" => "600"} - # - # parse("max-age") - # # => { "max-age" => true } - # - # Returns a Hash. - def parse(header) - directives = {} - - header.delete(' ').split(',').each do |part| - next if part.empty? - - name, value = part.split('=', 2) - directives[name.downcase] = (value || true) unless name.empty? - end - - directives - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/lib/faraday/http_cache/memory_store.rb b/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/lib/faraday/http_cache/memory_store.rb deleted file mode 100644 index 4864b547..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/lib/faraday/http_cache/memory_store.rb +++ /dev/null @@ -1,26 +0,0 @@ -# frozen_string_literal: true - -module Faraday - class HttpCache < Faraday::Middleware - # @private - # A Hash based store to be used by strategies - # when a `store` is not provided for the middleware setup. - class MemoryStore - def initialize - @cache = {} - end - - def read(key) - @cache[key] - end - - def delete(key) - @cache.delete(key) - end - - def write(key, value) - @cache[key] = value - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/lib/faraday/http_cache/request.rb b/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/lib/faraday/http_cache/request.rb deleted file mode 100644 index 4e258245..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/lib/faraday/http_cache/request.rb +++ /dev/null @@ -1,50 +0,0 @@ -# frozen_string_literal: true - -module Faraday - class HttpCache < Faraday::Middleware - # Internal: A class to represent a request - class Request - class << self - def from_env(env) - hash = env.to_hash - new(method: hash[:method], url: hash[:url], headers: hash[:request_headers].dup) - end - end - - attr_reader :method, :url, :headers - - def initialize(method:, url:, headers:) - @method = method - @url = url - @headers = headers - end - - # Internal: Validates if the current request method is valid for caching. - # - # Returns true if the method is ':get' or ':head'. - def cacheable? - return false if method != :get && method != :head - return false if cache_control.no_store? - - true - end - - def no_cache? - cache_control.no_cache? - end - - # Internal: Gets the 'CacheControl' object. - def cache_control - @cache_control ||= CacheControl.new(headers['Cache-Control']) - end - - def serializable_hash - { - method: @method, - url: @url.to_s, - headers: @headers - } - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/lib/faraday/http_cache/response.rb b/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/lib/faraday/http_cache/response.rb deleted file mode 100644 index 70d26545..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/lib/faraday/http_cache/response.rb +++ /dev/null @@ -1,235 +0,0 @@ -# frozen_string_literal: true - -require 'time' -require 'faraday/http_cache/cache_control' - -module Faraday - class HttpCache < Faraday::Middleware - # Internal: A class to represent a response from a Faraday request. - # It decorates the response hash into a smarter object that queries - # the response headers and status informations about how the caching - # middleware should handle this specific response. - class Response - # Internal: List of status codes that can be cached: - # * 200 - 'OK' - # * 203 - 'Non-Authoritative Information' - # * 300 - 'Multiple Choices' - # * 301 - 'Moved Permanently' - # * 302 - 'Found' - # * 404 - 'Not Found' - # * 410 - 'Gone' - CACHEABLE_STATUS_CODES = [200, 203, 300, 301, 302, 307, 404, 410].freeze - - # Internal: Gets the actual response Hash (status, headers and body). - attr_reader :payload - - # Internal: Gets the 'Last-Modified' header from the headers Hash. - attr_reader :last_modified - - # Internal: Gets the 'ETag' header from the headers Hash. - attr_reader :etag - - # Internal: Initialize a new Response with the response payload from - # a Faraday request. - # - # payload - the response Hash returned by a Faraday request. - # :status - the status code from the response. - # :response_headers - a 'Hash' like object with the headers. - # :body - the response body. - def initialize(payload = {}) - @now = Time.now - @payload = payload - wrap_headers! - ensure_date_header! - - @last_modified = headers['Last-Modified'] - @etag = headers['ETag'] - end - - # Internal: Checks the response freshness based on expiration headers. - # The calculated 'ttl' should be present and bigger than 0. - # - # Returns true if the response is fresh, otherwise false. - def fresh? - !cache_control.no_cache? && ttl && ttl > 0 - end - - # Internal: Checks if the Response returned a 'Not Modified' status. - # - # Returns true if the response status code is 304. - def not_modified? - @payload[:status] == 304 - end - - # Internal: Checks if the response can be cached by the client when the - # client is acting as a shared cache per RFC 2616. This is validated by - # the 'Cache-Control' directives, the response status code and it's - # freshness or validation status. - # - # Returns false if the 'Cache-Control' says that we can't store the - # response, or it can be stored in private caches only, or if isn't fresh - # or it can't be revalidated with the origin server. Otherwise, returns - # true. - def cacheable_in_shared_cache? - cacheable?(true) - end - - # Internal: Checks if the response can be cached by the client when the - # client is acting as a private cache per RFC 2616. This is validated by - # the 'Cache-Control' directives, the response status code and it's - # freshness or validation status. - # - # Returns false if the 'Cache-Control' says that we can't store the - # response, or if isn't fresh or it can't be revalidated with the origin - # server. Otherwise, returns true. - def cacheable_in_private_cache? - cacheable?(false) - end - - # Internal: Gets the response age in seconds. - # - # Returns the 'Age' header if present, or subtracts the response 'date' - # from the current time. - def age - (headers['Age'] || (@now - date)).to_i - end - - # Internal: Calculates the 'Time to live' left on the Response. - # - # Returns the remaining seconds for the response, or nil the 'max_age' - # isn't present. - def ttl - max_age - age if max_age - end - - # Internal: Parses the 'Date' header back into a Time instance. - # - # Returns the Time object. - def date - Time.httpdate(headers['Date']) - end - - # Internal: Gets the response max age. - # The max age is extracted from one of the following: - # * The shared max age directive from the 'Cache-Control' header; - # * The max age directive from the 'Cache-Control' header; - # * The difference between the 'Expires' header and the response - # date. - # - # Returns the max age value in seconds or nil if all options above fails. - def max_age - cache_control.shared_max_age || - cache_control.max_age || - (expires && (expires - @now)) - end - - # Internal: Creates a new 'Faraday::Response', merging the stored - # response with the supplied 'env' object. - # - # Returns a new instance of a 'Faraday::Response' with the payload. - def to_response(env) - env.update(@payload) - Faraday::Response.new(env) - end - - # Internal: Exposes a representation of the current - # payload that we can serialize and cache properly. - # - # Returns a 'Hash'. - def serializable_hash - prepare_to_cache - - { - status: @payload[:status], - body: @payload[:body], - response_headers: @payload[:response_headers], - reason_phrase: @payload[:reason_phrase] - } - end - - private - - # Internal: Checks if this response can be revalidated. - # - # Returns true if the 'headers' contains a 'Last-Modified' or an 'ETag' - # entry. - def validateable? - headers.key?('Last-Modified') || headers.key?('ETag') - end - - # Internal: The logic behind cacheable_in_private_cache? and - # cacheable_in_shared_cache? The logic is the same except for the - # treatment of the private Cache-Control directive. - def cacheable?(shared_cache) - return false if (cache_control.private? && shared_cache) || cache_control.no_store? - - cacheable_status_code? && (validateable? || fresh?) - end - - # Internal: Validates the response status against the - # `CACHEABLE_STATUS_CODES' constant. - # - # Returns true if the constant includes the response status code. - def cacheable_status_code? - CACHEABLE_STATUS_CODES.include?(@payload[:status]) - end - - # Internal: Gets the 'Expires' in a Time object. - # - # Returns the Time object, or nil if the header isn't present or isn't RFC 2616 compliant. - def expires - @expires ||= headers['Expires'] && Time.httpdate(headers['Expires']) rescue nil # rubocop:disable Style/RescueModifier - end - - # Internal: Gets the 'CacheControl' object. - def cache_control - @cache_control ||= CacheControl.new(headers['Cache-Control']) - end - - # Internal: Converts the headers 'Hash' into 'Faraday::Utils::Headers'. - # Faraday actually uses a Hash subclass, `Faraday::Utils::Headers` to - # store the headers hash. When retrieving a serialized response, - # the headers object is decoded as a 'Hash' instead of the actual - # 'Faraday::Utils::Headers' object, so we need to ensure that the - # 'response_headers' is always a 'Headers' instead of a plain 'Hash'. - # - # Returns nothing. - def wrap_headers! - headers = @payload[:response_headers] - - @payload[:response_headers] = Faraday::Utils::Headers.new - @payload[:response_headers].update(headers) if headers - end - - # Internal: Try to parse the Date header, if it fails set it to @now. - # - # Returns nothing. - def ensure_date_header! - date - rescue StandardError - headers['Date'] = @now.httpdate - end - - # Internal: Gets the headers 'Hash' from the payload. - def headers - @payload[:response_headers] - end - - # Internal: Prepares the response headers to be cached. - # - # It removes the 'Age' header if present to allow cached responses - # to continue aging while cached. It also normalizes the 'max-age' - # related headers if the 'Age' header is provided to ensure accuracy - # once the 'Age' header is removed. - # - # Returns nothing. - def prepare_to_cache - if headers.key? 'Age' - cache_control.normalize_max_ages(headers['Age'].to_i) - headers.delete 'Age' - headers['Cache-Control'] = cache_control.to_s - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/lib/faraday/http_cache/storage.rb b/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/lib/faraday/http_cache/storage.rb deleted file mode 100644 index f648caa2..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/lib/faraday/http_cache/storage.rb +++ /dev/null @@ -1,16 +0,0 @@ -# frozen_string_literal: true - -require 'faraday/http_cache/strategies/by_url' - -module Faraday - class HttpCache < Faraday::Middleware - # @deprecated Use Faraday::HttpCache::Strategies::ByUrl instead. - class Storage < Faraday::HttpCache::Strategies::ByUrl - def initialize(*) - Kernel.warn("Deprecated: #{self.class} is deprecated and will be removed in " \ - 'the next major release. Use Faraday::HttpCache::Strategies::ByUrl instead.') - super - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/lib/faraday/http_cache/strategies.rb b/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/lib/faraday/http_cache/strategies.rb deleted file mode 100644 index 27e781f2..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/lib/faraday/http_cache/strategies.rb +++ /dev/null @@ -1,4 +0,0 @@ -# frozen_string_literal: true - -require 'faraday/http_cache/strategies/by_url' -require 'faraday/http_cache/strategies/by_vary' diff --git a/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/lib/faraday/http_cache/strategies/base_strategy.rb b/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/lib/faraday/http_cache/strategies/base_strategy.rb deleted file mode 100644 index 36568f89..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/lib/faraday/http_cache/strategies/base_strategy.rb +++ /dev/null @@ -1,94 +0,0 @@ -# frozen_string_literal: true - -require 'json' -require 'logger' -require 'faraday/http_cache/memory_store' - -module Faraday - class HttpCache < Faraday::Middleware - module Strategies - # Base class for all strategies. - # @abstract - # - # @example - # - # # Creates a new strategy using a MemCached backend from ActiveSupport. - # mem_cache_store = ActiveSupport::Cache.lookup_store(:mem_cache_store, ['localhost:11211']) - # Faraday::HttpCache::Strategies::ByVary.new(store: mem_cache_store) - # - # # Reuse some other instance of an ActiveSupport::Cache::Store object. - # Faraday::HttpCache::Strategies::ByVary.new(store: Rails.cache) - # - # # Creates a new strategy using Marshal for serialization. - # Faraday::HttpCache::Strategies::ByVary.new(store: Rails.cache, serializer: Marshal) - class BaseStrategy - # Returns the underlying cache store object. - attr_reader :cache - - # @param [Hash] options the options to create a message with. - # @option options [Faraday::HttpCache::MemoryStore, nil] :store - a cache - # store object that should respond to 'read', 'write', and 'delete'. - # @option options [#dump#load] :serializer - an object that should - # respond to 'dump' and 'load'. - # @option options [Logger, nil] :logger - an object to be used to emit warnings. - def initialize(options = {}) - @cache = options[:store] || Faraday::HttpCache::MemoryStore.new - @serializer = options[:serializer] || JSON - @logger = options[:logger] || Logger.new(IO::NULL) - @cache_salt = (@serializer.is_a?(Module) ? @serializer : @serializer.class).name - assert_valid_store! - end - - # Store a response inside the cache. - # @abstract - def write(_request, _response) - raise NotImplementedError, 'Implement this method in your strategy' - end - - # Read a response from the cache. - # @abstract - def read(_request) - raise NotImplementedError, 'Implement this method in your strategy' - end - - # Delete responses from the cache by the url. - # @abstract - def delete(_url) - raise NotImplementedError, 'Implement this method in your strategy' - end - - private - - # @private - # @raise [ArgumentError] if the cache object doesn't support the expect API. - def assert_valid_store! - unless cache.respond_to?(:read) && cache.respond_to?(:write) && cache.respond_to?(:delete) - raise ArgumentError.new("#{cache.inspect} is not a valid cache store as it does not responds to 'read', 'write' or 'delete'.") - end - end - - def serialize_entry(*objects) - objects.map { |object| serialize_object(object) } - end - - def serialize_object(object) - @serializer.dump(object) - end - - def deserialize_entry(*objects) - objects.map { |object| deserialize_object(object) } - end - - def deserialize_object(object) - @serializer.load(object).each_with_object({}) do |(key, value), hash| - hash[key.to_sym] = value - end - end - - def warn(message) - @logger.warn(message) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/lib/faraday/http_cache/strategies/by_url.rb b/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/lib/faraday/http_cache/strategies/by_url.rb deleted file mode 100644 index fad90909..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/lib/faraday/http_cache/strategies/by_url.rb +++ /dev/null @@ -1,118 +0,0 @@ -# frozen_string_literal: true - -require 'digest/sha1' - -require 'faraday/http_cache/strategies/base_strategy' - -module Faraday - class HttpCache < Faraday::Middleware - module Strategies - # The original strategy by Faraday::HttpCache. - # Uses URL + HTTP method to generate cache keys. - class ByUrl < BaseStrategy - # Store a response inside the cache. - # - # @param [Faraday::HttpCache::Request] request - instance of the executed HTTP request. - # @param [Faraday::HttpCache::Response] response - instance to be stored. - # - # @return [void] - def write(request, response) - key = cache_key_for(request.url) - entry = serialize_entry(request.serializable_hash, response.serializable_hash) - entries = cache.read(key) || [] - entries = entries.dup if entries.frozen? - entries.reject! do |(cached_request, cached_response)| - response_matches?(request, deserialize_object(cached_request), deserialize_object(cached_response)) - end - - entries << entry - - cache.write(key, entries) - rescue ::Encoding::UndefinedConversionError => e - warn "Response could not be serialized: #{e.message}. Try using Marshal to serialize." - raise e - end - - # Fetch a stored response that suits the incoming HTTP request or return nil. - # - # @param [Faraday::HttpCache::Request] request - an instance of the incoming HTTP request. - # - # @return [Faraday::HttpCache::Response, nil] - def read(request) - cache_key = cache_key_for(request.url) - entries = cache.read(cache_key) - response = lookup_response(request, entries) - return nil unless response - - Faraday::HttpCache::Response.new(response) - end - - # @param [String] url – the url of a changed resource, will be used to invalidate the cache. - # - # @return [void] - def delete(url) - cache_key = cache_key_for(url) - cache.delete(cache_key) - end - - private - - # Retrieve a response Hash from the list of entries that match the given request. - # - # @param [Faraday::HttpCache::Request] request - an instance of the incoming HTTP request. - # @param [Array] entries - pairs of Hashes (request, response). - # - # @return [Hash, nil] - def lookup_response(request, entries) - if entries - entries = entries.map { |entry| deserialize_entry(*entry) } - _, response = entries.find { |req, res| response_matches?(request, req, res) } - response - end - end - - # Check if a cached response and request matches the given request. - # - # @param [Faraday::HttpCache::Request] request - an instance of the incoming HTTP request. - # @param [Hash] cached_request - a Hash of the request that was cached. - # @param [Hash] cached_response - a Hash of the response that was cached. - # - # @return [true, false] - def response_matches?(request, cached_request, cached_response) - request.method.to_s == cached_request[:method].to_s && - vary_matches?(cached_response, request, cached_request) - end - - # Check if the cached request matches the incoming - # request based on the Vary header of cached response. - # - # If Vary header is not present, the request is considered to match. - # If Vary header is '*', the request is considered to not match. - # - # @param [Faraday::HttpCache::Request] request - an instance of the incoming HTTP request. - # @param [Hash] cached_request - a Hash of the request that was cached. - # @param [Hash] cached_response - a Hash of the response that was cached. - # - # @return [true, false] - def vary_matches?(cached_response, request, cached_request) - headers = Faraday::Utils::Headers.new(cached_response[:response_headers]) - vary = headers['Vary'].to_s - - vary.empty? || (vary != '*' && vary.split(/[\s,]+/).all? do |header| - request.headers[header] == (cached_request[:headers][header] || cached_request[:headers][header.downcase]) - end) - end - - # Computes the cache key for a specific request, taking - # in account the current serializer to avoid cross serialization issues. - # - # @param [String] url - the request URL. - # - # @return [String] - def cache_key_for(url) - Digest::SHA1.hexdigest("#{@cache_salt}#{url}") - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/lib/faraday/http_cache/strategies/by_vary.rb b/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/lib/faraday/http_cache/strategies/by_vary.rb deleted file mode 100644 index 3f1e956b..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/lib/faraday/http_cache/strategies/by_vary.rb +++ /dev/null @@ -1,86 +0,0 @@ -# frozen_string_literal: true - -require 'digest/sha1' - -require 'faraday/http_cache/strategies/base_strategy' - -module Faraday - class HttpCache < Faraday::Middleware - module Strategies - # This strategy uses headers from the Vary response header to generate cache keys. - # It also uses the index with Vary headers mapped to the request url. - # This strategy is more suitable for caching private responses with the same urls, - # like https://api.github.com/user. - # - # This strategy does not support #delete method to clear cache on unsafe methods. - class ByVary < BaseStrategy - # Store a response inside the cache. - # - # @param [Faraday::HttpCache::Request] request - instance of the executed HTTP request. - # @param [Faraday::HttpCache::Response] response - instance to be stored. - # - # @return [void] - def write(request, response) - vary_cache_key = vary_cache_key_for(request) - headers = Faraday::Utils::Headers.new(response.payload[:response_headers]) - vary = headers['Vary'].to_s - cache.write(vary_cache_key, vary) - - response_cache_key = response_cache_key_for(request, vary) - entry = serialize_object(response.serializable_hash) - cache.write(response_cache_key, entry) - rescue ::Encoding::UndefinedConversionError => e - warn "Response could not be serialized: #{e.message}. Try using Marshal to serialize." - raise e - end - - # Fetch a stored response that suits the incoming HTTP request or return nil. - # - # @param [Faraday::HttpCache::Request] request - an instance of the incoming HTTP request. - # - # @return [Faraday::HttpCache::Response, nil] - def read(request) - vary_cache_key = vary_cache_key_for(request) - vary = cache.read(vary_cache_key) - return nil if vary.nil? || vary == '*' - - cache_key = response_cache_key_for(request, vary) - response = cache.read(cache_key) - return nil if response.nil? - - Faraday::HttpCache::Response.new(deserialize_object(response)) - end - - # This strategy does not support #delete method to clear cache on unsafe methods. - # @return [void] - def delete(_url) - # do nothing since we can't find the key by url - end - - private - - # Computes the cache key for the index with Vary headers. - # - # @param [Faraday::HttpCache::Request] request - instance of the executed HTTP request. - # - # @return [String] - def vary_cache_key_for(request) - method = request.method.to_s - Digest::SHA1.hexdigest("by_vary_index#{@cache_salt}#{method}#{request.url}") - end - - # Computes the cache key for the response. - # - # @param [Faraday::HttpCache::Request] request - instance of the executed HTTP request. - # @param [String] vary - the Vary header value. - # - # @return [String] - def response_cache_key_for(request, vary) - method = request.method.to_s - headers = vary.split(/[\s,]+/).uniq.sort.map { |header| request.headers[header] } - Digest::SHA1.hexdigest("by_vary#{@cache_salt}#{method}#{request.url}#{headers.join}") - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/spec/binary_spec.rb b/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/spec/binary_spec.rb deleted file mode 100644 index e5a37d53..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/spec/binary_spec.rb +++ /dev/null @@ -1,20 +0,0 @@ -# frozen_string_literal: true - -require 'spec_helper' - -describe Faraday::HttpCache do - let(:client) do - Faraday.new(url: ENV['FARADAY_SERVER']) do |stack| - stack.use :http_cache, serializer: Marshal - adapter = ENV['FARADAY_ADAPTER'] - stack.headers['X-Faraday-Adapter'] = adapter - stack.adapter adapter.to_sym - end - end - let(:data) { IO.binread File.expand_path('support/empty.png', __dir__) } - - it 'works fine with binary data' do - expect(client.get('image').body).to eq data - expect(client.get('image').body).to eq data - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/spec/cache_control_spec.rb b/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/spec/cache_control_spec.rb deleted file mode 100644 index f9f20885..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/spec/cache_control_spec.rb +++ /dev/null @@ -1,109 +0,0 @@ -# frozen_string_literal: true - -require 'spec_helper' - -describe Faraday::HttpCache::CacheControl do - it 'takes a String with multiple name=value pairs' do - cache_control = Faraday::HttpCache::CacheControl.new('max-age=600, max-stale=300, min-fresh=570') - expect(cache_control.max_age).to eq(600) - end - - it 'takes a String with a single flag value' do - cache_control = Faraday::HttpCache::CacheControl.new('no-cache') - expect(cache_control).to be_no_cache - end - - it 'takes a String with a bunch of all kinds of stuff' do - cache_control = - Faraday::HttpCache::CacheControl.new('max-age=600,must-revalidate,min-fresh=3000,foo=bar,baz') - expect(cache_control.max_age).to eq(600) - expect(cache_control).to be_must_revalidate - end - - it 'strips leading and trailing spaces' do - cache_control = Faraday::HttpCache::CacheControl.new(' public, max-age = 600 ') - expect(cache_control).to be_public - expect(cache_control.max_age).to eq(600) - end - - it 'ignores blank segments' do - cache_control = Faraday::HttpCache::CacheControl.new('max-age=600,,s-maxage=300') - expect(cache_control.max_age).to eq(600) - expect(cache_control.shared_max_age).to eq(300) - end - - it 'sorts alphabetically with boolean directives before value directives' do - cache_control = Faraday::HttpCache::CacheControl.new('foo=bar, z, x, y, bling=baz, zoom=zib, b, a') - expect(cache_control.to_s).to eq('a, b, x, y, z, bling=baz, foo=bar, zoom=zib') - end - - it 'responds to #max_age with an integer when max-age directive present' do - cache_control = Faraday::HttpCache::CacheControl.new('public, max-age=600') - expect(cache_control.max_age).to eq(600) - end - - it 'responds to #max_age with nil when no max-age directive present' do - cache_control = Faraday::HttpCache::CacheControl.new('public') - expect(cache_control.max_age).to be_nil - end - - it 'responds to #shared_max_age with an integer when s-maxage directive present' do - cache_control = Faraday::HttpCache::CacheControl.new('public, s-maxage=600') - expect(cache_control.shared_max_age).to eq(600) - end - - it 'responds to #shared_max_age with nil when no s-maxage directive present' do - cache_control = Faraday::HttpCache::CacheControl.new('public') - expect(cache_control.shared_max_age).to be_nil - end - - it 'responds to #public? truthfully when public directive present' do - cache_control = Faraday::HttpCache::CacheControl.new('public') - expect(cache_control).to be_public - end - - it 'responds to #public? non-truthfully when no public directive present' do - cache_control = Faraday::HttpCache::CacheControl.new('private') - expect(cache_control).not_to be_public - end - - it 'responds to #private? truthfully when private directive present' do - cache_control = Faraday::HttpCache::CacheControl.new('private') - expect(cache_control).to be_private - end - - it 'responds to #private? non-truthfully when no private directive present' do - cache_control = Faraday::HttpCache::CacheControl.new('public') - expect(cache_control).not_to be_private - end - - it 'responds to #no_cache? truthfully when no-cache directive present' do - cache_control = Faraday::HttpCache::CacheControl.new('no-cache') - expect(cache_control).to be_no_cache - end - - it 'responds to #no_cache? non-truthfully when no no-cache directive present' do - cache_control = Faraday::HttpCache::CacheControl.new('max-age=600') - expect(cache_control).not_to be_no_cache - end - - it 'responds to #must_revalidate? truthfully when must-revalidate directive present' do - cache_control = Faraday::HttpCache::CacheControl.new('must-revalidate') - expect(cache_control).to be_must_revalidate - end - - it 'responds to #must_revalidate? non-truthfully when no must-revalidate directive present' do - cache_control = Faraday::HttpCache::CacheControl.new('max-age=600') - expect(cache_control).not_to be_must_revalidate - end - - it 'responds to #proxy_revalidate? truthfully when proxy-revalidate directive present' do - cache_control = Faraday::HttpCache::CacheControl.new('proxy-revalidate') - expect(cache_control).to be_proxy_revalidate - end - - it 'responds to #proxy_revalidate? non-truthfully when no proxy-revalidate directive present' do - cache_control = Faraday::HttpCache::CacheControl.new('max-age=600') - expect(cache_control).not_to be_no_cache - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/spec/http_cache_spec.rb b/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/spec/http_cache_spec.rb deleted file mode 100644 index 02f7e397..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/spec/http_cache_spec.rb +++ /dev/null @@ -1,296 +0,0 @@ -# frozen_string_literal: true - -require 'spec_helper' - -describe Faraday::HttpCache do - let(:logger) { double('a Logger object', debug: nil, warn: nil) } - let(:options) { { logger: logger } } - - let(:client) do - Faraday.new(url: ENV['FARADAY_SERVER']) do |stack| - stack.use Faraday::HttpCache, options - adapter = ENV['FARADAY_ADAPTER'] - stack.headers['X-Faraday-Adapter'] = adapter - stack.headers['Content-Type'] = 'application/x-www-form-urlencoded' - stack.adapter adapter.to_sym - end - end - - before do - client.get('clear') - end - - it 'does not cache POST requests' do - client.post('post').body - expect(client.post('post').body).to eq('2') - end - - it 'logs that a POST request is unacceptable' do - expect(logger).to receive(:debug) { |&block| expect(block.call).to eq('HTTP Cache: [POST /post] unacceptable, delete') } - client.post('post').body - end - - it 'does not cache responses with , status code' do - client.get('broken') - expect(client.get('broken').body).to eq('2') - end - - it 'adds a trace of the actions performed to the env' do - response = client.post('post') - expect(response.env[:http_cache_trace]).to eq(%i[unacceptable delete]) - end - - describe 'cache invalidation' do - it 'expires POST requests' do - client.get('counter') - client.post('counter') - expect(client.get('counter').body).to eq('2') - end - - it 'logs that a POST request was deleted from the cache' do - expect(logger).to receive(:debug) { |&block| expect(block.call).to eq('HTTP Cache: [POST /counter] unacceptable, delete') } - client.post('counter') - end - - it 'does not expires POST requests that failed' do - client.get('get') - client.post('get') - expect(client.get('get').body).to eq('1') - end - - it 'expires PUT requests' do - client.get('counter') - client.put('counter') - expect(client.get('counter').body).to eq('2') - end - - it 'logs that a PUT request was deleted from the cache' do - expect(logger).to receive(:debug) { |&block| expect(block.call).to eq('HTTP Cache: [PUT /counter] unacceptable, delete') } - client.put('counter') - end - - it 'expires DELETE requests' do - client.get('counter') - client.delete('counter') - expect(client.get('counter').body).to eq('2') - end - - it 'logs that a DELETE request was deleted from the cache' do - expect(logger).to receive(:debug) { |&block| expect(block.call).to eq('HTTP Cache: [DELETE /counter] unacceptable, delete') } - client.delete('counter') - end - - it 'expires PATCH requests' do - client.get('counter') - client.patch('counter') - expect(client.get('counter').body).to eq('2') - end - - it 'logs that a PATCH request was deleted from the cache' do - expect(logger).to receive(:debug) { |&block| expect(block.call).to eq('HTTP Cache: [PATCH /counter] unacceptable, delete') } - client.patch('counter') - end - - it 'logs that a response with a bad status code is uncacheable' do - expect(logger).to receive(:debug) { |&block| expect(block.call).to eq('HTTP Cache: [GET /broken] miss, uncacheable') } - client.get('broken') - end - - it 'expires entries for the "Location" header' do - client.get('get') - client.post('delete-with-location') - expect(client.get('get').body).to eq('2') - end - - it 'expires entries for the "Content-Location" header' do - client.get('get') - client.post('delete-with-content-location') - expect(client.get('get').body).to eq('2') - end - end - - describe 'when acting as a shared cache' do - let(:options) { { logger: logger, shared_cache: true } } - - it 'does not cache requests with a private cache control' do - client.get('private') - expect(client.get('private').body).to eq('2') - end - - it 'logs that a private response is uncacheable' do - expect(logger).to receive(:debug) { |&block| expect(block.call).to eq('HTTP Cache: [GET /private] miss, uncacheable') } - client.get('private') - end - end - - describe 'when acting as a private cache' do - let(:options) { { logger: logger, shared_cache: false } } - - it 'does cache requests with a private cache control' do - client.get('private') - expect(client.get('private').body).to eq('1') - end - - it 'logs that a private response is stored' do - expect(logger).to receive(:debug) { |&block| expect(block.call).to eq('HTTP Cache: [GET /private] miss, store') } - client.get('private') - end - end - - it 'does not cache responses with a explicit no-store directive' do - client.get('dontstore') - expect(client.get('dontstore').body).to eq('2') - end - - it 'logs that a response with a no-store directive is uncacheable' do - expect(logger).to receive(:debug) { |&block| expect(block.call).to eq('HTTP Cache: [GET /dontstore] miss, uncacheable') } - client.get('dontstore') - end - - it 'does not caches multiple responses when the headers differ' do - client.get('get', nil, 'HTTP_ACCEPT' => 'text/html') - expect(client.get('get', nil, 'HTTP_ACCEPT' => 'text/html').body).to eq('1') - expect(client.get('get', nil, 'HTTP_ACCEPT' => 'application/json').body).to eq('1') - end - - it 'caches multiples responses based on the "Vary" header' do - client.get('vary', nil, 'User-Agent' => 'Agent/1.0') - expect(client.get('vary', nil, 'User-Agent' => 'Agent/1.0').body).to eq('1') - expect(client.get('vary', nil, 'User-Agent' => 'Agent/2.0').body).to eq('2') - expect(client.get('vary', nil, 'User-Agent' => 'Agent/3.0').body).to eq('3') - end - - it 'never caches responses with the wildcard "Vary" header' do - client.get('vary-wildcard') - expect(client.get('vary-wildcard').body).to eq('2') - end - - it 'caches requests with the "Expires" header' do - client.get('expires') - expect(client.get('expires').body).to eq('1') - end - - it 'logs that a request with the "Expires" is fresh and stored' do - expect(logger).to receive(:debug) { |&block| expect(block.call).to eq('HTTP Cache: [GET /expires] miss, store') } - client.get('expires') - end - - it 'caches GET responses' do - client.get('get') - expect(client.get('get').body).to eq('1') - end - - context 'when the request has a "no-cache" directive' do - it 'revalidates the cache' do - expect(client.get('etag').body).to eq('1') - expect(client.get('etag', nil, 'Cache-Control' => 'no-cache').body).to eq('1') - - expect(client.get('get', nil).body).to eq('2') - expect(client.get('etag', nil, 'Cache-Control' => 'no-cache').body).to eq('3') - end - - it 'caches the response' do - client.get('get', nil, 'Cache-Control' => 'no-cache') - expect(client.get('get', nil).body).to eq('1') - end - end - - context 'when the response has a "no-cache" directive' do - it 'always revalidate the cached response' do - client.get('no_cache') - expect(client.get('no_cache').body).to eq('2') - expect(client.get('no_cache').body).to eq('3') - end - end - - it 'logs that a GET response is stored' do - expect(logger).to receive(:debug) { |&block| expect(block.call).to eq('HTTP Cache: [GET /get] miss, store') } - client.get('get') - end - - it 'differs requests with different query strings in the log' do - expect(logger).to receive(:debug) { |&block| expect(block.call).to eq('HTTP Cache: [GET /get] miss, store') } - expect(logger).to receive(:debug) { |&block| expect(block.call).to eq('HTTP Cache: [GET /get?q=what] miss, store') } - client.get('get') - client.get('get', q: 'what') - end - - it 'logs that a stored GET response is fresh' do - client.get('get') - expect(logger).to receive(:debug) { |&block| expect(block.call).to eq('HTTP Cache: [GET /get] fresh') } - client.get('get') - end - - it 'sends the "Last-Modified" header on response validation' do - client.get('timestamped') - expect(client.get('timestamped').body).to eq('1') - end - - it 'logs that the request with "Last-Modified" was revalidated' do - client.get('timestamped') - expect(logger).to receive(:debug) { |&block| expect(block.call).to eq('HTTP Cache: [GET /timestamped] must_revalidate, valid, store') } - expect(client.get('timestamped').body).to eq('1') - end - - it 'sends the "If-None-Match" header on response validation' do - client.get('etag') - expect(client.get('etag').body).to eq('1') - end - - it 'logs that the request with "ETag" was revalidated' do - client.get('etag') - expect(logger).to receive(:debug) { |&block| expect(block.call).to eq('HTTP Cache: [GET /etag] must_revalidate, valid, store') } - expect(client.get('etag').body).to eq('1') - end - - it 'maintains the "Date" header for cached responses' do - first_date = client.get('get').headers['Date'] - second_date = client.get('get').headers['Date'] - expect(first_date).to eq(second_date) - end - - it 'preserves an old "Date" header if present' do - date = client.get('yesterday').headers['Date'] - expect(date).to match(/^\w{3}, \d{2} \w{3} \d{4} \d{2}:\d{2}:\d{2} GMT$/) - end - - it 'updates the "Cache-Control" header when a response is validated' do - first_cache_control = client.get('etag').headers['Cache-Control'] - second_cache_control = client.get('etag').headers['Cache-Control'] - expect(first_cache_control).not_to eql(second_cache_control) - end - - it 'updates the "Date" header when a response is validated' do - first_date = client.get('etag').headers['Date'] - second_date = client.get('etag').headers['Date'] - expect(first_date).not_to eql(second_date) - end - - it 'updates the "Expires" header when a response is validated' do - first_expires = client.get('etag').headers['Expires'] - second_expires = client.get('etag').headers['Expires'] - expect(first_expires).not_to eql(second_expires) - end - - it 'updates the "Vary" header when a response is validated' do - first_vary = client.get('etag').headers['Vary'] - second_vary = client.get('etag').headers['Vary'] - expect(first_vary).not_to eql(second_vary) - end - - it 'caches non-stale response with "must-revalidate" directive' do - client.get('must-revalidate') - expect(client.get('must-revalidate').body).to eq('1') - end - - describe 'Configuration options' do - let(:app) { double('it is an app!') } - - it 'uses the options to create a Cache Store' do - store = double(read: nil, write: nil) - - expect(Faraday::HttpCache::Strategies::ByUrl).to receive(:new).with(hash_including(store: store)) - Faraday::HttpCache.new(app, store: store) - end - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/spec/instrumentation_spec.rb b/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/spec/instrumentation_spec.rb deleted file mode 100644 index fa3f6a81..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/spec/instrumentation_spec.rb +++ /dev/null @@ -1,82 +0,0 @@ -# frozen_string_literal: true - -require 'spec_helper' -require 'active_support' -require 'active_support/notifications' - -describe 'Instrumentation' do - let(:backend) { Faraday::Adapter::Test::Stubs.new } - - let(:client) do - Faraday.new do |stack| - stack.use Faraday::HttpCache, instrumenter: ActiveSupport::Notifications - stack.adapter :test, backend - end - end - - let(:events) { [] } - let(:subscriber) { lambda { |*args| events << ActiveSupport::Notifications::Event.new(*args) } } - - around do |example| - ActiveSupport::Notifications.subscribed(subscriber, 'http_cache.faraday') do - example.run - end - end - - describe 'the :cache_status payload entry' do - it 'is :miss if there is no cache entry for the URL' do - backend.get('/hello') do - [200, { 'Cache-Control' => 'public, max-age=999' }, ''] - end - - client.get('/hello') - expect(events.last.payload.fetch(:cache_status)).to eq(:miss) - end - - it 'is :fresh if the cache entry has not expired' do - backend.get('/hello') do - [200, { 'Cache-Control' => 'public, max-age=999' }, ''] - end - - client.get('/hello') # miss - client.get('/hello') # fresh! - expect(events.last.payload.fetch(:cache_status)).to eq(:fresh) - end - - it 'is :valid if the cache entry can be validated against the upstream' do - backend.get('/hello') do - headers = { - 'Cache-Control' => 'public, must-revalidate, max-age=0', - 'Etag' => '123ABCD' - } - - [200, headers, ''] - end - - client.get('/hello') # miss - - backend.get('/hello') { [304, {}, ''] } - - client.get('/hello') # valid! - expect(events.last.payload.fetch(:cache_status)).to eq(:valid) - end - - it 'is :invalid if the cache entry could not be validated against the upstream' do - backend.get('/hello') do - headers = { - 'Cache-Control' => 'public, must-revalidate, max-age=0', - 'Etag' => '123ABCD' - } - - [200, headers, ''] - end - - client.get('/hello') # miss - - backend.get('/hello') { [200, {}, ''] } - - client.get('/hello') # invalid! - expect(events.last.payload.fetch(:cache_status)).to eq(:invalid) - end - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/spec/json_spec.rb b/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/spec/json_spec.rb deleted file mode 100644 index c025eede..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/spec/json_spec.rb +++ /dev/null @@ -1,21 +0,0 @@ -# frozen_string_literal: true - -require 'spec_helper' - -describe Faraday::HttpCache do - let(:client) do - Faraday.new(url: ENV['FARADAY_SERVER']) do |stack| - stack.response :json, content_type: /\bjson$/ - stack.use :http_cache - adapter = ENV['FARADAY_ADAPTER'] - stack.headers['X-Faraday-Adapter'] = adapter - stack.adapter adapter.to_sym - end - end - - it 'works fine with other middlewares' do - client.get('clear') - expect(client.get('json').body['count']).to eq(1) - expect(client.get('json').body['count']).to eq(1) - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/spec/request_spec.rb b/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/spec/request_spec.rb deleted file mode 100644 index 07536422..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/spec/request_spec.rb +++ /dev/null @@ -1,49 +0,0 @@ -# frozen_string_literal: true - -require 'spec_helper' - -describe Faraday::HttpCache::Request do - subject { Faraday::HttpCache::Request.new method: method, url: url, headers: headers } - let(:method) { :get } - let(:url) { URI.parse('http://example.com/path/to/somewhere') } - let(:headers) { {} } - - context 'a GET request' do - it { should be_cacheable } - end - - context 'a HEAD request' do - let(:method) { :head } - it { should be_cacheable } - end - - context 'a POST request' do - let(:method) { :post } - it { should_not be_cacheable } - end - - context 'a PUT request' do - let(:method) { :put } - it { should_not be_cacheable } - end - - context 'an OPTIONS request' do - let(:method) { :options } - it { should_not be_cacheable } - end - - context 'a DELETE request' do - let(:method) { :delete } - it { should_not be_cacheable } - end - - context 'a TRACE request' do - let(:method) { :trace } - it { should_not be_cacheable } - end - - context 'with "Cache-Control: no-store"' do - let(:headers) { { 'Cache-Control' => 'no-store' } } - it { should_not be_cacheable } - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/spec/response_spec.rb b/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/spec/response_spec.rb deleted file mode 100644 index 0dc4e12f..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/spec/response_spec.rb +++ /dev/null @@ -1,250 +0,0 @@ -# frozen_string_literal: true - -require 'spec_helper' - -describe Faraday::HttpCache::Response do - describe 'cacheable_in_shared_cache?' do - it 'the response is not cacheable if the response is marked as private' do - headers = { 'Cache-Control' => 'private, max-age=400' } - response = Faraday::HttpCache::Response.new(status: 200, response_headers: headers) - - expect(response).not_to be_cacheable_in_shared_cache - end - - it 'the response is not cacheable if it should not be stored' do - headers = { 'Cache-Control' => 'no-store, max-age=400' } - response = Faraday::HttpCache::Response.new(status: 200, response_headers: headers) - - expect(response).not_to be_cacheable_in_shared_cache - end - - it 'the response is not cacheable when the status code is not acceptable' do - headers = { 'Cache-Control' => 'max-age=400' } - response = Faraday::HttpCache::Response.new(status: 503, response_headers: headers) - expect(response).not_to be_cacheable_in_shared_cache - end - - [200, 203, 300, 301, 302, 307, 404, 410].each do |status| - it "the response is cacheable if the status code is #{status} and the response is fresh" do - headers = { 'Cache-Control' => 'max-age=400' } - response = Faraday::HttpCache::Response.new(status: status, response_headers: headers) - - expect(response).to be_cacheable_in_shared_cache - end - end - end - - describe 'cacheable_in_private_cache?' do - it 'the response is cacheable if the response is marked as private' do - headers = { 'Cache-Control' => 'private, max-age=400' } - response = Faraday::HttpCache::Response.new(status: 200, response_headers: headers) - - expect(response).to be_cacheable_in_private_cache - end - - it 'the response is not cacheable if it should not be stored' do - headers = { 'Cache-Control' => 'no-store, max-age=400' } - response = Faraday::HttpCache::Response.new(status: 200, response_headers: headers) - - expect(response).not_to be_cacheable_in_private_cache - end - - it 'the response is not cacheable when the status code is not acceptable' do - headers = { 'Cache-Control' => 'max-age=400' } - response = Faraday::HttpCache::Response.new(status: 503, response_headers: headers) - expect(response).not_to be_cacheable_in_private_cache - end - - [200, 203, 300, 301, 302, 307, 404, 410].each do |status| - it "the response is cacheable if the status code is #{status} and the response is fresh" do - headers = { 'Cache-Control' => 'max-age=400' } - response = Faraday::HttpCache::Response.new(status: status, response_headers: headers) - - expect(response).to be_cacheable_in_private_cache - end - end - end - - describe 'freshness' do - it 'is fresh if the response still has some time to live' do - date = (Time.now - 200).httpdate - headers = { 'Cache-Control' => 'max-age=400', 'Date' => date } - response = Faraday::HttpCache::Response.new(response_headers: headers) - - expect(response).to be_fresh - end - - it 'is not fresh if the ttl has expired' do - date = (Time.now - 500).httpdate - headers = { 'Cache-Control' => 'max-age=400', 'Date' => date } - response = Faraday::HttpCache::Response.new(response_headers: headers) - - expect(response).not_to be_fresh - end - - it 'is not fresh if Cache Control has "no-cache"' do - date = (Time.now - 200).httpdate - headers = { 'Cache-Control' => 'max-age=400, no-cache', 'Date' => date } - response = Faraday::HttpCache::Response.new(response_headers: headers) - - expect(response).not_to be_fresh - end - - it 'is fresh if the response contains "must-revalidate" and is not stale' do - date = (Time.now - 200).httpdate - headers = { 'Cache-Control' => 'public, max-age=23880, must-revalidate, no-transform', 'Date' => date } - response = Faraday::HttpCache::Response.new(response_headers: headers) - - expect(response).to be_fresh - end - - it 'is not fresh if Cache Control has "must-revalidate" and is stale' do - date = (Time.now - 500).httpdate - headers = { 'Cache-Control' => 'max-age=400, must-revalidate', 'Date' => date } - response = Faraday::HttpCache::Response.new(response_headers: headers) - - expect(response).not_to be_fresh - end - end - - it 'sets the "Date" header if is not present' do - headers = { 'Date' => nil } - response = Faraday::HttpCache::Response.new(response_headers: headers) - - expect(response.date).to be - end - - it 'sets the "Date" header if is not a valid RFC 2616 compliant string' do - date = Time.now.httpdate - headers = { 'Date' => "#{date}, #{date}" } - response = Faraday::HttpCache::Response.new(response_headers: headers) - - expect(response.date).to be - end - - it 'the response is not modified if the status code is 304' do - response = Faraday::HttpCache::Response.new(status: 304) - expect(response).to be_not_modified - end - - it 'returns the "Last-Modified" header on the #last_modified method' do - headers = { 'Last-Modified' => '123' } - response = Faraday::HttpCache::Response.new(response_headers: headers) - expect(response.last_modified).to eq('123') - end - - it 'returns the "ETag" header on the #etag method' do - headers = { 'ETag' => 'tag' } - response = Faraday::HttpCache::Response.new(response_headers: headers) - expect(response.etag).to eq('tag') - end - - describe 'max age calculation' do - it 'uses the shared max age directive when present' do - headers = { 'Cache-Control' => 's-maxage=200, max-age=0' } - response = Faraday::HttpCache::Response.new(response_headers: headers) - expect(response.max_age).to be(200) - end - - it 'uses the max age directive when present' do - headers = { 'Cache-Control' => 'max-age=200' } - response = Faraday::HttpCache::Response.new(response_headers: headers) - expect(response.max_age).to be(200) - end - - it 'fallsback to the expiration date leftovers' do - headers = { 'Expires' => (Time.now + 100).httpdate, 'Date' => Time.now.httpdate } - response = Faraday::HttpCache::Response.new(response_headers: headers) - - expect(response.max_age).to be < 100 - expect(response.max_age).to be > 98 - end - - it 'returns nil when there is no information to calculate the max age' do - response = Faraday::HttpCache::Response.new - expect(response.max_age).to be_nil - end - - it 'returns nil when falling back to expiration date but it is not RFC 2616 compliant' do - headers = { 'Expires' => 'Mon, 1 Jan 2001 00:00:00 GMT' } - response = Faraday::HttpCache::Response.new(response_headers: headers) - expect(response.max_age).to be_nil - end - end - - describe 'age calculation' do - it 'uses the "Age" header if it is present' do - response = Faraday::HttpCache::Response.new(response_headers: { 'Age' => '3' }) - expect(response.age).to eq(3) - end - - it 'calculates the time from the "Date" header' do - date = (Time.now - 3).httpdate - response = Faraday::HttpCache::Response.new(response_headers: { 'Date' => date }) - expect(response.age).to eq(3) - end - - it 'returns 0 if there is no "Age" or "Date" header present' do - response = Faraday::HttpCache::Response.new(response_headers: {}) - expect(response.age).to eq(0) - end - end - - describe 'time to live calculation' do - it 'returns the time to live based on the max age limit' do - date = (Time.now - 200).httpdate - headers = { 'Cache-Control' => 'max-age=400', 'Date' => date } - response = Faraday::HttpCache::Response.new(response_headers: headers) - expect(response.ttl).to eq(200) - end - end - - describe 'response unboxing' do - subject { described_class.new(status: 200, response_headers: {}, body: 'Hi!', reason_phrase: 'Success') } - - let(:env) { { method: :get } } - let(:response) { subject.to_response(env) } - - it 'merges the supplied env object with the response data' do - expect(response.env[:method]).to be - end - - it 'returns a Faraday::Response' do - expect(response).to be_a(Faraday::Response) - end - - it 'merges the status code' do - expect(response.status).to eq(200) - end - - it 'merges the headers' do - expect(response.headers).to be_a(Faraday::Utils::Headers) - end - - it 'merges the body' do - expect(response.body).to eq('Hi!') - end - - it 'merges the reason phrase' do - expect(response.reason_phrase).to eq('Success') if response.respond_to?(:reason_phrase) - end - end - - describe 'remove age before caching and normalize max-age if non-zero age present' do - it 'is fresh if the response still has some time to live' do - headers = { - 'Age' => 6, - 'Cache-Control' => 'public, max-age=40', - 'Date' => (Time.now - 38).httpdate, - 'Expires' => (Time.now - 37).httpdate, - 'Last-Modified' => (Time.now - 300).httpdate - } - response = Faraday::HttpCache::Response.new(response_headers: headers) - expect(response).to be_fresh - - response.serializable_hash - expect(response.max_age).to eq(34) - expect(response).not_to be_fresh - end - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/spec/spec_helper.rb b/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/spec/spec_helper.rb deleted file mode 100644 index 2611303a..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/spec/spec_helper.rb +++ /dev/null @@ -1,34 +0,0 @@ -# frozen_string_literal: true - -require 'uri' -require 'socket' - -require 'faraday-http-cache' - -if Gem::Version.new(Faraday::VERSION) < Gem::Version.new('1.0') - require 'faraday_middleware' -elsif ENV['FARADAY_ADAPTER'] == 'em_http' - require 'faraday/em_http' -end - -require 'active_support' -require 'active_support/cache' - -require 'support/test_app' -require 'support/test_server' - -server = TestServer.new - -ENV['FARADAY_SERVER'] = server.endpoint -ENV['FARADAY_ADAPTER'] ||= 'net_http' - -server.start - -RSpec.configure do |config| - config.run_all_when_everything_filtered = true - config.order = 'random' - - config.after(:suite) do - server.stop - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/spec/storage_spec.rb b/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/spec/storage_spec.rb deleted file mode 100644 index 3a3b05be..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/spec/storage_spec.rb +++ /dev/null @@ -1,161 +0,0 @@ -# frozen_string_literal: true - -require 'spec_helper' - -describe Faraday::HttpCache::Storage do - let(:cache_key) { '6e3b941d0f7572291c777b3e48c04b74124a55d0' } - let(:request) do - env = { method: :get, url: 'http://test/index' } - double(env.merge(serializable_hash: env)) - end - - let(:response) { double(serializable_hash: { response_headers: {} }) } - - let(:cache) { Faraday::HttpCache::MemoryStore.new } - - let(:storage) { Faraday::HttpCache::Storage.new(store: cache) } - subject { storage } - - before do - allow(Kernel).to receive(:warn).with( - 'Deprecated: Faraday::HttpCache::Storage is deprecated and will be removed '\ - 'in the next major release. Use Faraday::HttpCache::Strategies::ByUrl instead.' - ) - end - - it 'creates strategy and warns about deprecation' do - expect(Kernel).to receive(:warn).with( - 'Deprecated: Faraday::HttpCache::Storage is deprecated and will be removed '\ - 'in the next major release. Use Faraday::HttpCache::Strategies::ByUrl instead.' - ) - is_expected.to be_a_kind_of(Faraday::HttpCache::Strategies::ByUrl) - end - - describe 'Cache configuration' do - it 'uses a MemoryStore by default' do - expect(Faraday::HttpCache::MemoryStore).to receive(:new).and_call_original - Faraday::HttpCache::Storage.new - end - - it 'raises an error when the given store is not valid' do - wrong = double - - expect { - Faraday::HttpCache::Storage.new(store: wrong) - }.to raise_error(ArgumentError) - end - end - - describe 'storing responses' do - shared_examples 'A storage with serialization' do - it 'writes the response object to the underlying cache' do - entry = [serializer.dump(request.serializable_hash), serializer.dump(response.serializable_hash)] - expect(cache).to receive(:write).with(cache_key, [entry]) - subject.write(request, response) - end - end - - context 'with the JSON serializer' do - let(:serializer) { JSON } - it_behaves_like 'A storage with serialization' - - context 'when ASCII characters in response cannot be converted to UTF-8', if: Gem::Version.new(RUBY_VERSION) < Gem::Version.new('3.1') do - let(:response) do - body = String.new("\u2665").force_encoding('ASCII-8BIT') - double(:response, serializable_hash: { 'body' => body }) - end - - it 'raises and logs a warning' do - logger = double(:logger, warn: nil) - storage = Faraday::HttpCache::Storage.new(logger: logger) - - expect { - storage.write(request, response) - }.to raise_error(::Encoding::UndefinedConversionError) - expect(logger).to have_received(:warn).with( - 'Response could not be serialized: "\xE2" from ASCII-8BIT to UTF-8. Try using Marshal to serialize.' - ) - end - end - end - - context 'with the Marshal serializer' do - let(:cache_key) { '337d1e9c6c92423dd1c48a23054139058f97be40' } - let(:serializer) { Marshal } - let(:storage) { Faraday::HttpCache::Storage.new(store: cache, serializer: Marshal) } - - it_behaves_like 'A storage with serialization' - end - end - - describe 'reading responses' do - let(:storage) { Faraday::HttpCache::Storage.new(store: cache, serializer: serializer) } - - shared_examples 'A storage with serialization' do - it 'returns nil if the response is not cached' do - expect(subject.read(request)).to be_nil - end - - it 'decodes a stored response' do - subject.write(request, response) - - expect(subject.read(request)).to be_a(Faraday::HttpCache::Response) - end - end - - context 'with the JSON serializer' do - let(:serializer) { JSON } - - it_behaves_like 'A storage with serialization' - end - - context 'with the Marshal serializer' do - let(:serializer) { Marshal } - - it_behaves_like 'A storage with serialization' - end - end - - describe 'deleting responses' do - it 'removes the entries from the cache of the given URL' do - subject.write(request, response) - subject.delete(request.url) - expect(subject.read(request)).to be_nil - end - end - - describe 'remove age before caching and normalize max-age if non-zero age present' do - it 'is fresh if the response still has some time to live' do - headers = { - 'Age' => 6, - 'Cache-Control' => 'public, max-age=40', - 'Date' => (Time.now - 38).httpdate, - 'Expires' => (Time.now - 37).httpdate, - 'Last-Modified' => (Time.now - 300).httpdate - } - response = Faraday::HttpCache::Response.new(response_headers: headers) - expect(response).to be_fresh - subject.write(request, response) - - cached_response = subject.read(request) - expect(cached_response.max_age).to eq(34) - expect(cached_response).not_to be_fresh - end - - it 'is fresh until cached and that 1 second elapses then the response is no longer fresh' do - current_time = Time.now - headers = { - 'Date' => (current_time - 39).httpdate, - 'Expires' => (current_time + 40).httpdate - } - - response = Faraday::HttpCache::Response.new(response_headers: headers) - expect(response).to be_fresh - subject.write(request, response) - - sleep(1) - cached_response = subject.read(request) - expect(cached_response).not_to be_fresh - end - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/spec/strategies/base_strategy_spec.rb b/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/spec/strategies/base_strategy_spec.rb deleted file mode 100644 index 4aaa9c59..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/spec/strategies/base_strategy_spec.rb +++ /dev/null @@ -1,27 +0,0 @@ -# frozen_string_literal: true - -require 'spec_helper' - -describe Faraday::HttpCache::Strategies::BaseStrategy do - subject(:strategy) { described_class.new } - - it 'uses a MemoryStore as a default store' do - expect(Faraday::HttpCache::MemoryStore).to receive(:new).and_call_original - strategy - end - - context 'when the given store is not valid' do - let(:store) { double(:wrong_store) } - subject(:strategy) { described_class.new(store: store) } - - it 'raises an error' do - expect { strategy }.to raise_error(ArgumentError) - end - end - - it 'raises an error when abstract methods are called' do - expect { strategy.write(nil, nil) }.to raise_error(NotImplementedError) - expect { strategy.read(nil) }.to raise_error(NotImplementedError) - expect { strategy.delete(nil) }.to raise_error(NotImplementedError) - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/spec/strategies/by_url_spec.rb b/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/spec/strategies/by_url_spec.rb deleted file mode 100644 index a053d522..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/spec/strategies/by_url_spec.rb +++ /dev/null @@ -1,163 +0,0 @@ -# frozen_string_literal: true - -require 'spec_helper' - -describe Faraday::HttpCache::Strategies::ByUrl do - let(:cache_key) { '6e3b941d0f7572291c777b3e48c04b74124a55d0' } - let(:request) do - env = { method: :get, url: 'http://test/index' } - double(env.merge(serializable_hash: env)) - end - - let(:response) { double(serializable_hash: { response_headers: {} }) } - - let(:cache) { Faraday::HttpCache::MemoryStore.new } - - let(:strategy) { described_class.new(store: cache) } - subject { strategy } - - describe 'Cache configuration' do - it 'uses a MemoryStore by default' do - expect(Faraday::HttpCache::MemoryStore).to receive(:new).and_call_original - described_class.new - end - - it 'raises an error when the given store is not valid' do - wrong = double - - expect { - described_class.new(store: wrong) - }.to raise_error(ArgumentError) - end - end - - describe 'storing responses' do - shared_examples 'A strategy with serialization' do - it 'writes the response object to the underlying cache' do - entry = [serializer.dump(request.serializable_hash), serializer.dump(response.serializable_hash)] - expect(cache).to receive(:write).with(cache_key, [entry]) - subject.write(request, response) - end - end - - context 'with the JSON serializer' do - let(:serializer) { JSON } - it_behaves_like 'A strategy with serialization' - - context 'when ASCII characters in response cannot be converted to UTF-8', if: Gem::Version.new(RUBY_VERSION) < Gem::Version.new('3.1') do - let(:response) do - body = String.new("\u2665").force_encoding('ASCII-8BIT') - double(:response, serializable_hash: { 'body' => body }) - end - - it 'raises and logs a warning' do - logger = double(:logger, warn: nil) - strategy = described_class.new(logger: logger) - - expect { - strategy.write(request, response) - }.to raise_error(::Encoding::UndefinedConversionError) - expect(logger).to have_received(:warn).with( - 'Response could not be serialized: "\xE2" from ASCII-8BIT to UTF-8. Try using Marshal to serialize.' - ) - end - end - end - - context 'with the Marshal serializer' do - let(:cache_key) { '337d1e9c6c92423dd1c48a23054139058f97be40' } - let(:serializer) { Marshal } - let(:strategy) { described_class.new(store: cache, serializer: Marshal) } - - it_behaves_like 'A strategy with serialization' - end - end - - describe 'reading responses' do - let(:strategy) { described_class.new(store: cache, serializer: serializer) } - - shared_examples 'A strategy with serialization' do - it 'returns nil if the response is not cached' do - expect(subject.read(request)).to be_nil - end - - it 'decodes a stored response' do - subject.write(request, response) - - expect(subject.read(request)).to be_a(Faraday::HttpCache::Response) - end - - context 'with a Vary header in the response in a different case than the matching request header' do - let(:request) do - Faraday::HttpCache::Request.new( - method: :get, - url: 'http://test/index', - headers: Faraday::Utils::Headers.new({ 'accept' => 'application/json' }) - ) - end - let(:response) do - Faraday::HttpCache::Response.new(response_headers: Faraday::Utils::Headers.new({ vary: 'Accept' })) - end - - it 'reads stored message' do - subject.write(request, response) - expect(subject.read(request)).to be_a(Faraday::HttpCache::Response) - end - end - end - - context 'with the JSON serializer' do - let(:serializer) { JSON } - - it_behaves_like 'A strategy with serialization' - end - - context 'with the Marshal serializer' do - let(:serializer) { Marshal } - - it_behaves_like 'A strategy with serialization' - end - end - - describe 'deleting responses' do - it 'removes the entries from the cache of the given URL' do - subject.write(request, response) - subject.delete(request.url) - expect(subject.read(request)).to be_nil - end - end - - describe 'remove age before caching and normalize max-age if non-zero age present' do - it 'is fresh if the response still has some time to live' do - headers = { - 'Age' => 6, - 'Cache-Control' => 'public, max-age=40', - 'Date' => (Time.now - 38).httpdate, - 'Expires' => (Time.now - 37).httpdate, - 'Last-Modified' => (Time.now - 300).httpdate - } - response = Faraday::HttpCache::Response.new(response_headers: headers) - expect(response).to be_fresh - subject.write(request, response) - - cached_response = subject.read(request) - expect(cached_response.max_age).to eq(34) - expect(cached_response).not_to be_fresh - end - - it 'is fresh until cached and that 1 second elapses then the response is no longer fresh' do - headers = { - 'Date' => (Time.now - 39).httpdate, - 'Expires' => (Time.now + 40).httpdate - } - - response = Faraday::HttpCache::Response.new(response_headers: headers) - expect(response).to be_fresh - subject.write(request, response) - - sleep(1) - cached_response = subject.read(request) - expect(cached_response).not_to be_fresh - end - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/spec/strategies/by_vary_spec.rb b/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/spec/strategies/by_vary_spec.rb deleted file mode 100644 index 54a61a8a..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/spec/strategies/by_vary_spec.rb +++ /dev/null @@ -1,145 +0,0 @@ -# frozen_string_literal: true - -require 'spec_helper' - -describe Faraday::HttpCache::Strategies::ByVary do - let(:vary_index_cache_key) { '64896419583e8022efeb21d0ece6e266c0e58b59' } - let(:cache_key) { '978047698d156fe8642a86dbfaacc675917c9a22' } - let(:vary) { 'Accept, Accept-Encoding, X-Requested-With' } - let(:headers) { {'Accept' => 'text/html', 'Accept-Encoding' => 'gzip, deflate, br' } } - let(:request) do - env = {method: :get, url: 'http://test/index', headers: headers} - double(env.merge(serializable_hash: env)) - end - - let(:response_payload) { {response_headers: {'Vary' => vary}} } - - let(:response) do - instance_double(Faraday::HttpCache::Response, payload: response_payload, serializable_hash: response_payload) - end - - let(:cache) { Faraday::HttpCache::MemoryStore.new } - - let(:strategy) { described_class.new(store: cache) } - subject { strategy } - - describe 'storing responses' do - shared_examples 'A strategy with serialization' do - it 'writes the response object to the underlying cache' do - entry = serializer.dump(response.serializable_hash) - expect(cache).to receive(:write).with(vary_index_cache_key, vary) - expect(cache).to receive(:write).with(cache_key, entry) - subject.write(request, response) - end - end - - context 'with the JSON serializer' do - let(:serializer) { JSON } - it_behaves_like 'A strategy with serialization' - - context 'when ASCII characters in response cannot be converted to UTF-8', if: Gem::Version.new(RUBY_VERSION) < Gem::Version.new('3.1') do - let(:response_payload) do - body = String.new("\u2665").force_encoding('ASCII-8BIT') - super().merge('body' => body) - end - - it 'raises and logs a warning' do - logger = double(:logger, warn: nil) - strategy = described_class.new(logger: logger) - - expect { - strategy.write(request, response) - }.to raise_error(::Encoding::UndefinedConversionError) - expect(logger).to have_received(:warn).with( - 'Response could not be serialized: "\xE2" from ASCII-8BIT to UTF-8. Try using Marshal to serialize.' - ) - end - end - - context 'with reordered and doubled values in the vary' do - let(:vary) { 'X-Requested-With,Accept,Accept-Encoding,Accept' } - - it_behaves_like 'A strategy with serialization' - end - end - - context 'with the Marshal serializer' do - let(:vary_index_cache_key) { '6a7cb42440c10ef6edeb1826086a4d90b04103f0' } - let(:cache_key) { 'c9edbf280da95d4cac5acda8b8109c0aba2a469a' } - let(:serializer) { Marshal } - let(:strategy) { described_class.new(store: cache, serializer: Marshal) } - - it_behaves_like 'A strategy with serialization' - end - end - - describe 'reading responses' do - let(:strategy) { described_class.new(store: cache, serializer: serializer) } - - shared_examples 'A strategy with serialization' do - it 'returns nil if the response is not cached' do - expect(subject.read(request)).to be_nil - end - - it 'decodes a stored response' do - subject.write(request, response) - - expect(subject.read(request)).to be_a(Faraday::HttpCache::Response) - end - end - - context 'with the JSON serializer' do - let(:serializer) { JSON } - - it_behaves_like 'A strategy with serialization' - end - - context 'with the Marshal serializer' do - let(:serializer) { Marshal } - - it_behaves_like 'A strategy with serialization' - end - end - - describe 'deleting responses' do - it 'ignores delete method' do - subject.write(request, response) - subject.delete(request.url) - expect(subject.read(request)).not_to be_nil - end - end - - describe 'remove age before caching and normalize max-age if non-zero age present' do - it 'is fresh if the response still has some time to live' do - headers = { - 'Age' => 6, - 'Cache-Control' => 'public, max-age=40', - 'Date' => (Time.now - 38).httpdate, - 'Expires' => (Time.now - 37).httpdate, - 'Last-Modified' => (Time.now - 300).httpdate - } - response = Faraday::HttpCache::Response.new(response_headers: headers) - expect(response).to be_fresh - subject.write(request, response) - - cached_response = subject.read(request) - expect(cached_response.max_age).to eq(34) - expect(cached_response).not_to be_fresh - end - - it 'is fresh until cached and that 1 second elapses then the response is no longer fresh' do - headers = { - 'Date' => (Time.now - 39).httpdate, - 'Expires' => (Time.now + 40).httpdate - } - - response = Faraday::HttpCache::Response.new(response_headers: headers) - expect(response).to be_fresh - subject.write(request, response) - - sleep(1) - cached_response = subject.read(request) - expect(cached_response).not_to be_fresh - end - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/spec/support/empty.png b/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/spec/support/empty.png deleted file mode 100644 index eb2c44cf58a986790f4c3a1539b25dd9d7f72c80..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 266 zcmeAS@N?(olHy`uVBq!ia0vp^j3CU&3?x-=hn)gaEa{HEjtmSN`?>!lvVtUwgWR1M z)}51i3FIgwdj$D1FjT2AFf_C 'max-age=400', 'Content-Type' => 'application/json' }, json] - end - - get '/image' do - image = File.expand_path('empty.png', __dir__) - data = IO.binread(image) - [200, { 'Cache-Control' => 'max-age=400', 'Content-Type' => 'image/png' }, data] - end - - post '/post' do - [200, { 'Cache-Control' => 'max-age=400' }, increment_counter] - end - - get '/broken' do - [500, { 'Cache-Control' => 'max-age=400' }, increment_counter] - end - - get '/counter' do - [200, { 'Cache-Control' => 'max-age=200' }, increment_counter] - end - - post '/counter' do - end - - put '/counter' do - end - - delete '/counter' do - end - - patch '/counter' do - end - - get '/get' do - [200, { 'Cache-Control' => 'max-age=200' }, increment_counter] - end - - post '/delete-with-location' do - [200, { 'Location' => "#{request.base_url}/get" }, ''] - end - - post '/delete-with-content-location' do - [200, { 'Content-Location' => "#{request.base_url}/get" }, ''] - end - - post '/get' do - halt 405 - end - - get '/private' do - [200, { 'Cache-Control' => 'private, max-age=100' }, increment_counter] - end - - get '/dontstore' do - [200, { 'Cache-Control' => 'no-store' }, increment_counter] - end - - get '/expires' do - [200, { 'Expires' => (Time.now + 10).httpdate }, increment_counter] - end - - get '/yesterday' do - [200, { 'Date' => settings.yesterday, 'Expires' => settings.yesterday }, increment_counter] - end - - get '/must-revalidate' do - [200, { 'Date' => Time.now.httpdate, 'Cache-Control' => 'public, max-age=23880, must-revalidate, no-transform' }, increment_counter] - end - - get '/timestamped' do - settings.counter += 1 - header = settings.counter > 2 ? '1' : '2' - - if env['HTTP_IF_MODIFIED_SINCE'] == header - [304, {}, ''] - else - [200, { 'Last-Modified' => header }, increment_counter] - end - end - - get '/etag' do - settings.counter += 1 - tag = settings.counter > 2 ? '1' : '2' - - if env['HTTP_IF_NONE_MATCH'] == tag - [304, { 'ETag' => tag, 'Cache-Control' => 'max-age=200', 'Date' => Time.now.httpdate, 'Expires' => (Time.now + 200).httpdate, 'Vary' => '*' }, ''] - else - [200, { 'ETag' => tag, 'Cache-Control' => 'max-age=0', 'Date' => settings.yesterday, 'Expires' => Time.now.httpdate, 'Vary' => 'Accept' }, increment_counter] - end - end - - get '/no_cache' do - [200, { 'Cache-Control' => 'max-age=200, no-cache', 'ETag' => settings.counter.to_s }, increment_counter] - end - - get '/vary' do - [200, { 'Cache-Control' => 'max-age=50', 'Vary' => 'User-Agent' }, increment_counter] - end - - get '/vary-wildcard' do - [200, { 'Cache-Control' => 'max-age=50', 'Vary' => '*' }, increment_counter] - end - - # Increments the 'requests' counter to act as a newly processed response. - def increment_counter - (settings.requests += 1).to_s - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/spec/support/test_server.rb b/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/spec/support/test_server.rb deleted file mode 100644 index ccb13777..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/spec/support/test_server.rb +++ /dev/null @@ -1,68 +0,0 @@ -# frozen_string_literal: true - -require 'net/http' - -class TestServer - attr_reader :endpoint - - def initialize - @host = 'localhost' - @port = find_port - @endpoint = "http://#{@host}:#{@port}" - end - - def start - @pid = run! - wait - end - - def stop - `kill -9 #{@pid}` - end - - private - - def run! - fork do - require 'webrick' - log = File.open('log/test.log', 'w+') - log.sync = true - webrick_opts = { - Port: @port, - Logger: WEBrick::Log.new(log), - AccessLog: [[log, '[%{X-Faraday-Adapter}i] %m %U -> %s %b']] - } - Rack::Handler::WEBrick.run(TestApp, **webrick_opts) - end - end - - def wait - conn = Net::HTTP.new @host, @port - conn.open_timeout = conn.read_timeout = 0.1 - - responsive = ->(path) { - begin - res = conn.start { conn.get(path) } - res.is_a?(Net::HTTPSuccess) - rescue Errno::ECONNREFUSED, Errno::EBADF, Timeout::Error, Net::HTTPBadResponse - false - end - } - - server_pings = 0 - loop do - break if responsive.call('/ping') - - server_pings += 1 - sleep 0.05 - abort 'test server did not managed to start' if server_pings >= 50 - end - end - - def find_port - server = TCPServer.new(@host, 0) - server.addr[1] - ensure - server&.close - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/spec/validation_spec.rb b/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/spec/validation_spec.rb deleted file mode 100644 index 368f02f5..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-http-cache-2.5.1/spec/validation_spec.rb +++ /dev/null @@ -1,38 +0,0 @@ -# frozen_string_literal: true - -require 'spec_helper' - -describe Faraday::HttpCache do - let(:backend) { Faraday::Adapter::Test::Stubs.new } - - let(:client) do - Faraday.new(url: ENV['FARADAY_SERVER']) do |stack| - stack.use Faraday::HttpCache - stack.adapter :test, backend - end - end - - it 'maintains the "Content-Type" header for cached responses' do - backend.get('/test') { [200, { 'ETag' => '123ABC', 'Content-Type' => 'x' }, ''] } - first_content_type = client.get('/test').headers['Content-Type'] - - # The Content-Type header of the validation response should be ignored. - backend.get('/test') { [304, { 'Content-Type' => 'y' }, ''] } - second_content_type = client.get('/test').headers['Content-Type'] - - expect(first_content_type).to eq('x') - expect(second_content_type).to eq('x') - end - - it 'maintains the "Content-Length" header for cached responses' do - backend.get('/test') { [200, { 'ETag' => '123ABC', 'Content-Length' => 1 }, ''] } - first_content_length = client.get('/test').headers['Content-Length'] - - # The Content-Length header of the validation response should be ignored. - backend.get('/test') { [304, { 'Content-Length' => 2 }, ''] } - second_content_length = client.get('/test').headers['Content-Length'] - - expect(first_content_length).to eq(1) - expect(second_content_length).to eq(1) - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-net_http-3.1.0/LICENSE.md b/bundle/ruby/3.2.0/gems/faraday-net_http-3.1.0/LICENSE.md deleted file mode 100644 index b7aabc56..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-net_http-3.1.0/LICENSE.md +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2020 Jan van der Pas - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/bundle/ruby/3.2.0/gems/faraday-net_http-3.1.0/README.md b/bundle/ruby/3.2.0/gems/faraday-net_http-3.1.0/README.md deleted file mode 100644 index 6d510f4b..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-net_http-3.1.0/README.md +++ /dev/null @@ -1,57 +0,0 @@ -# Faraday Net::HTTP adapter - -This gem is a [Faraday][faraday] adapter for the [Net::HTTP][net-http] library. Faraday is an HTTP client library that provides a common interface over many adapters. Every adapter is defined into it's own gem. This gem defines the adapter for `Net::HTTP` the HTTP library that's included into the standard library of Ruby. - -## Installation - -Add this line to your application's Gemfile: - -```ruby -gem 'faraday-net_http' -``` - -And then execute: - - $ bundle install - -Or install it yourself as: - - $ gem install faraday-net_http - -## Usage - -```ruby -conn = Faraday.new(...) do |f| - f.adapter :net_http do |http| - # yields Net::HTTP - http.verify_callback = lambda do |preverify, cert_store| - # do something here... - end - end -end -``` - -## Development - -After checking out the repo, run `bin/setup` to install dependencies. Then, run `bin/test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment. - -To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](rubygems). - -## Contributing - -Bug reports and pull requests are welcome on [GitHub][repo]. - -## License - -The gem is available as open source under the terms of the [license][license]. - -## Code of Conduct - -Everyone interacting in the Faraday Net::HTTP adapter project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct][code-of-conduct]. - -[faraday]: https://github.com/lostisland/faraday -[net-http]: https://ruby-doc.org/stdlib-2.7.0/libdoc/net/http/rdoc/Net/HTTP.html -[rubygems]: https://rubygems.org -[repo]: https://github.com/lostisland/faraday-net_http -[license]: https://github.com/lostisland/faraday-net_http/blob/main/LICENSE.md -[code-of-conduct]: https://github.com/lostisland/faraday-net_http/blob/main/CODE_OF_CONDUCT.md diff --git a/bundle/ruby/3.2.0/gems/faraday-net_http-3.1.0/lib/faraday/adapter/net_http.rb b/bundle/ruby/3.2.0/gems/faraday-net_http-3.1.0/lib/faraday/adapter/net_http.rb deleted file mode 100644 index 890648ba..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-net_http-3.1.0/lib/faraday/adapter/net_http.rb +++ /dev/null @@ -1,202 +0,0 @@ -# frozen_string_literal: true - -begin - require 'net/https' -rescue LoadError - warn 'Warning: no such file to load -- net/https. ' \ - 'Make sure openssl is installed if you want ssl support' - require 'net/http' -end -require 'zlib' - -module Faraday - class Adapter - class NetHttp < Faraday::Adapter - exceptions = [ - IOError, - Errno::EADDRNOTAVAIL, - Errno::EALREADY, - Errno::ECONNABORTED, - Errno::ECONNREFUSED, - Errno::ECONNRESET, - Errno::EHOSTUNREACH, - Errno::EINVAL, - Errno::ENETUNREACH, - Errno::EPIPE, - Net::HTTPBadResponse, - Net::HTTPHeaderSyntaxError, - Net::ProtocolError, - SocketError, - Zlib::GzipFile::Error - ] - - exceptions << ::OpenSSL::SSL::SSLError if defined?(::OpenSSL::SSL::SSLError) - exceptions << ::Net::OpenTimeout if defined?(::Net::OpenTimeout) - - NET_HTTP_EXCEPTIONS = exceptions.freeze - - def initialize(app = nil, opts = {}, &block) - @ssl_cert_store = nil - super(app, opts, &block) - end - - def build_connection(env) - net_http_connection(env).tap do |http| - http.use_ssl = env[:url].scheme == 'https' if http.respond_to?(:use_ssl=) - configure_ssl(http, env[:ssl]) - configure_request(http, env[:request]) - end - end - - def net_http_connection(env) - proxy = env[:request][:proxy] - port = env[:url].port || (env[:url].scheme == 'https' ? 443 : 80) - if proxy - Net::HTTP.new(env[:url].hostname, port, - proxy[:uri].hostname, proxy[:uri].port, - proxy[:user], proxy[:password]) - else - Net::HTTP.new(env[:url].hostname, port, nil) - end - end - - def call(env) - super - connection(env) do |http| - perform_request(http, env) - rescue *NET_HTTP_EXCEPTIONS => e - raise Faraday::SSLError, e if defined?(OpenSSL) && e.is_a?(OpenSSL::SSL::SSLError) - - raise Faraday::ConnectionFailed, e - end - @app.call env - rescue Timeout::Error, Errno::ETIMEDOUT => e - raise Faraday::TimeoutError, e - end - - private - - def create_request(env) - request = Net::HTTPGenericRequest.new \ - env[:method].to_s.upcase, # request method - !!env[:body], # is there request body - env[:method] != :head, # is there response body - env[:url].request_uri, # request uri path - env[:request_headers] # request headers - - if env[:body].respond_to?(:read) - request.body_stream = env[:body] - else - request.body = env[:body] - end - request - end - - def perform_request(http, env) - if env.stream_response? - http_response = env.stream_response do |&on_data| - request_with_wrapped_block(http, env, &on_data) - end - http_response.body = nil - else - http_response = request_with_wrapped_block(http, env) - end - env.response_body = encoded_body(http_response) - env.response.finish(env) - http_response - end - - def request_with_wrapped_block(http, env, &block) - # Must use Net::HTTP#start and pass it a block otherwise the server's - # TCP socket does not close correctly. - http.start do |opened_http| - opened_http.request create_request(env) do |response| - save_http_response(env, response) - - response.read_body(&block) if block_given? - end - end - end - - def save_http_response(env, http_response) - save_response( - env, http_response.code.to_i, nil, nil, http_response.message, finished: false - ) do |response_headers| - http_response.each_header do |key, value| - response_headers[key] = value - end - end - end - - def configure_ssl(http, ssl) - return unless ssl - - http.verify_mode = ssl_verify_mode(ssl) - http.cert_store = ssl_cert_store(ssl) - - http.cert = ssl[:client_cert] if ssl[:client_cert] - http.key = ssl[:client_key] if ssl[:client_key] - http.ca_file = ssl[:ca_file] if ssl[:ca_file] - http.ca_path = ssl[:ca_path] if ssl[:ca_path] - http.verify_depth = ssl[:verify_depth] if ssl[:verify_depth] - http.ssl_version = ssl[:version] if ssl[:version] - http.min_version = ssl[:min_version] if ssl[:min_version] - http.max_version = ssl[:max_version] if ssl[:max_version] - http.verify_hostname = ssl[:verify_hostname] if verify_hostname_enabled?(http, ssl) - end - - def configure_request(http, req) - if (sec = request_timeout(:read, req)) - http.read_timeout = sec - end - - if (sec = http.respond_to?(:write_timeout=) && - request_timeout(:write, req)) - http.write_timeout = sec - end - - if (sec = request_timeout(:open, req)) - http.open_timeout = sec - end - - # Only set if Net::Http supports it, since Ruby 2.5. - http.max_retries = 0 if http.respond_to?(:max_retries=) - - @config_block&.call(http) - end - - def ssl_cert_store(ssl) - return ssl[:cert_store] if ssl[:cert_store] - - # Use the default cert store by default, i.e. system ca certs - @ssl_cert_store ||= OpenSSL::X509::Store.new.tap(&:set_default_paths) - end - - def ssl_verify_mode(ssl) - ssl[:verify_mode] || begin - if ssl.fetch(:verify, true) - OpenSSL::SSL::VERIFY_PEER - else - OpenSSL::SSL::VERIFY_NONE - end - end - end - - def encoded_body(http_response) - body = http_response.body || +'' - /\bcharset=([^;]+)/.match(http_response['Content-Type']) do |match| - content_charset = ::Encoding.find(match[1].strip) - body = body.dup if body.frozen? - body.force_encoding(content_charset) - rescue ArgumentError - nil - end - body - end - - def verify_hostname_enabled?(http, ssl) - http.respond_to?(:verify_hostname=) && ssl.key?(:verify_hostname) - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-net_http-3.1.0/lib/faraday/net_http.rb b/bundle/ruby/3.2.0/gems/faraday-net_http-3.1.0/lib/faraday/net_http.rb deleted file mode 100644 index e4048e89..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-net_http-3.1.0/lib/faraday/net_http.rb +++ /dev/null @@ -1,10 +0,0 @@ -# frozen_string_literal: true - -require 'faraday/adapter/net_http' -require 'faraday/net_http/version' - -module Faraday - module NetHttp - Faraday::Adapter.register_middleware(net_http: Faraday::Adapter::NetHttp) - end -end diff --git a/bundle/ruby/3.2.0/gems/faraday-net_http-3.1.0/lib/faraday/net_http/version.rb b/bundle/ruby/3.2.0/gems/faraday-net_http-3.1.0/lib/faraday/net_http/version.rb deleted file mode 100644 index 86881141..00000000 --- a/bundle/ruby/3.2.0/gems/faraday-net_http-3.1.0/lib/faraday/net_http/version.rb +++ /dev/null @@ -1,7 +0,0 @@ -# frozen_string_literal: true - -module Faraday - module NetHttp - VERSION = '3.1.0' - end -end diff --git a/bundle/ruby/3.2.0/gems/git-1.19.1/.github/stale.yml b/bundle/ruby/3.2.0/gems/git-1.19.1/.github/stale.yml deleted file mode 100644 index b56852af..00000000 --- a/bundle/ruby/3.2.0/gems/git-1.19.1/.github/stale.yml +++ /dev/null @@ -1,25 +0,0 @@ -# Probot: Stale -# https://github.com/probot/stale - -# Number of days of inactivity before an issue becomes stale -daysUntilStale: 60 - -# Number of days of inactivity before a stale issue is closed -# Set to false to disable. If disabled, issues still need to be closed -# manually, but will remain marked as stale. -daysUntilClose: false - -# Issues with these labels will never be considered stale -exemptLabels: - - pinned - - security - -# Label to use when marking an issue as stale -staleLabel: stale - -# Comment to post when marking an issue as stale. Set to `false` to disable -markComment: > - A friendly reminder that this issue had no activity for 60 days. - -# Comment to post when closing a stale issue. Set to `false` to disable -closeComment: false diff --git a/bundle/ruby/3.2.0/gems/git-1.19.1/.github/workflows/continuous_integration.yml b/bundle/ruby/3.2.0/gems/git-1.19.1/.github/workflows/continuous_integration.yml deleted file mode 100644 index 302c5eed..00000000 --- a/bundle/ruby/3.2.0/gems/git-1.19.1/.github/workflows/continuous_integration.yml +++ /dev/null @@ -1,49 +0,0 @@ -name: CI - -on: - push: - branches: [master] - pull_request: - branches: [master] - workflow_dispatch: - -jobs: - continuous_integration_build: - continue-on-error: true - strategy: - fail-fast: false - matrix: - ruby: [2.7, 3.0, 3.1, 3.2] - operating-system: [ubuntu-latest] - include: - - ruby: head - operating-system: ubuntu-latest - - ruby: truffleruby-head - operating-system: ubuntu-latest - - ruby: 2.7 - operating-system: windows-latest - - ruby: jruby-head - operating-system: windows-latest - - name: Ruby ${{ matrix.ruby }} on ${{ matrix.operating-system }} - - runs-on: ${{ matrix.operating-system }} - - env: - JAVA_OPTS: -Djdk.io.File.enableADS=true - - steps: - - name: Checkout Code - uses: actions/checkout@v3 - - - name: Setup Ruby - uses: ruby/setup-ruby@v1 - with: - ruby-version: ${{ matrix.ruby }} - bundler-cache: true # runs 'bundle install' and caches installed gems automatically - - - name: Run Build - run: bundle exec rake default - - - name: Test Gem - run: bundle exec rake test:gem diff --git a/bundle/ruby/3.2.0/gems/git-1.19.1/.gitignore b/bundle/ruby/3.2.0/gems/git-1.19.1/.gitignore deleted file mode 100644 index 611ed70c..00000000 --- a/bundle/ruby/3.2.0/gems/git-1.19.1/.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -*.gem -*.kpf -*.sw? -.DS_Store -coverage -doc -.yardoc -pkg -rdoc -Gemfile.lock diff --git a/bundle/ruby/3.2.0/gems/git-1.19.1/.yardopts b/bundle/ruby/3.2.0/gems/git-1.19.1/.yardopts deleted file mode 100644 index ce1aff3c..00000000 --- a/bundle/ruby/3.2.0/gems/git-1.19.1/.yardopts +++ /dev/null @@ -1,11 +0,0 @@ ---default-return='' ---hide-void-return ---markup-provider=redcarpet ---markup=markdown ---fail-on-warning -- -README.md -CHANGELOG.md -CONTRIBUTING.md -RELEASING.md -MAINTAINERS.md diff --git a/bundle/ruby/3.2.0/gems/git-1.19.1/CHANGELOG.md b/bundle/ruby/3.2.0/gems/git-1.19.1/CHANGELOG.md deleted file mode 100644 index bb147268..00000000 --- a/bundle/ruby/3.2.0/gems/git-1.19.1/CHANGELOG.md +++ /dev/null @@ -1,285 +0,0 @@ - - -# Change Log - -## v1.19.1 (2024-01-13) - -[Full Changelog](https://github.com/ruby-git/ruby-git/compare/v1.19.0..v1.19.1) - -Changes since v1.19.0: - -* f97c57c Announce the 2.0.0 pre-release (#682) - -## v1.19.0 (2023-12-28) - -[Full Changelog](https://github.com/ruby-git/ruby-git/compare/v1.18.0..v1.19.0) - -Changes since v1.18.0: - -* 3bdb280 Add option to push all branches to a remote repo at one time (#678) -* b0d89ac Remove calls to Dir.chdir (#673) -* e64c2f6 Refactor tests for read_tree, write_tree, and commit_tree (#679) -* 0bb965d Explicitly name remote tracking branch in test (#676) -* 8481f8c Document how to delete a remote branch (#672) -* dce6816 show .log example with count in README, fixes #667 (#668) -* b1799f6 Update test of 'git worktree add' with no commits (#670) -* dd5a24d Add --filter to Git.clone for partial clones (#663) - -## v1.18.0 (2023-03-19) - -[Full Changelog](https://github.com/ruby-git/ruby-git/compare/v1.17.2..v1.18.0) - -Changes since v1.17.2: - -* 3c70 Add support for `--update-head-ok` to `fetch` (#660) -* b53d Do not generate yard documentation when building in TruffleRuby (#659) -* 5af1 Correctly report command output when there is an error (#658) -* b27a Add test to ensure that `Git.open` works to open a submodule (#655) -* 5b0e Update Git.clone to set multiple config variables (#653) - -## v1.17.2 (2023-03-07) - -[Full Changelog](https://github.com/ruby-git/ruby-git/compare/v1.17.1..v1.17.2) - -Changes since v1.17.1: - -* f43d6 Fix branch name parsing to handle names that include slashes (#651) - -## v1.17.1 (2023-03-06) - -[Full Changelog](https://github.com/ruby-git/ruby-git/compare/v1.17.0..v1.17.1) - -Changes since v1.17.0: - -* 774e Revert introduction of ActiveSupport dependency (#649) - -## v1.17.0 (2023-03-05) - -[Full Changelog](https://github.com/ruby-git/ruby-git/compare/v1.16.0..v1.17.0) - -Changes since v1.16.0: - -* 1311 Add deprecation mechanism (introduces runtime dependency on ActiveSupport) (#645) -* 50b8 Add the push_option option for Git::Lib#push (#644) -* a799 Make Git::Base#ls_tree handle commit objects (#643) -* 6db3 Implememt Git.default_branch (#571) - -## v1.16.0 (2023-03-03) - -[Full Changelog](https://github.com/ruby-git/ruby-git/compare/v1.15.0..v1.16.0) - -Changes since v1.15.0: - -* 536d Fix parsing when in detached HEAD state in Git::Lib#branches_all (#641) -* 5c68 Fix parsing of symbolic refs in `Git::Lib#branches_all` (#640) -* 7d88 Remote#branch and #merge should default to current branch instead of "master" (#639) -* 3dda0 `#branch` name should default to current branch instead of `master` (#638) -* d33d #checkout without args should do same as `git checkout` with no args (#637) -* 0c90 #push without args should do same as `git push` with no args (#636) -* 2b19 Make it easier to run test files from the command line (#635) - -## v1.15.0 (2023-03-01) - -[Full Changelog](https://github.com/ruby-git/ruby-git/compare/v1.14.0..v1.15.0) - -Changes since v1.14.0: - -* b40d #pull with no options should do the same thing as `git pull` with no options (#633) -* 9c5e Fix error when calling `Git::Lib#remove` with `recursive` or `cached` options (#632) -* 806e Add Git::Log#all option (#630) -* d905 Allow a repo to be opened giving a non-root repo directory (#629) -* 1ccd Rewrite worktree tests (#628) -* 4409 Fix Git::Branch#update_ref (#626) - -## v1.14.0 (2023-02-25) - -[Full Changelog](https://github.com/ruby-git/ruby-git/compare/v1.13.2..v1.14.0) - -Changes since v1.13.2: - -* 0f7c4a5 Allow the use of an array of path_limiters and add extended_regexp option to grep (#624) -* 8992701 Refactor error thrown when a git command fails (#622) -* cf74b91 Simplify how temp files are used when testing Git::Base#archive (#621) -* a8bfb9d Set init.defaultBranch when running tests if it is not already set (#620) -* 9ee7ca9 Create a null logger if a logger is not provided (#619) -* 872de4c Internal refactor of Git::Lib command (#618) -* 29e157d Simplify test running and fixture repo cloning (#615) -* 08d04ef Use dynamically-created repo for signed commits test (#614) - -## v1.13.2 (2023-02-02) - -[Full Changelog](https://github.com/ruby-git/ruby-git/compare/v1.13.1..v1.13.2) - -Changes since v1.13.1: - -* b6e031d Fix `Git::Lib#commit_data` for GPG-signed commits (#610) -* b12b820 Fix escaped path decoding (#612) - -## v1.13.1 (2023-01-12) - -[Full Changelog](https://github.com/ruby-git/ruby-git/compare/v1.13.0...v1.13.1) - -* 667b830 Update the GitHub Action step "actions/checkout" from v2 to v3 (#608) -* 23a0ac4 Fix version parsing (#605) -* 429f0bb Update release instructions (#606) -* 68d76b8 Drop ruby 2.3 build and add 3.1 and 3.2 builds (#607) - -## v1.13.0 (2022-12-10) - -[Full Changelog](https://github.com/ruby-git/ruby-git/compare/v1.12.0...v1.13.0) - -* 8349224 Update list of maintainers (#598) -* 4fe8738 In ls-files do not unescape file paths with eval (#602) -* 74b8e11 Add start_point option for checkout command (#597) -* ff6dcf4 Do not assume the default branch is 'master' in tests -* 8279298 Fix exception when Git is autoloaded (#594) - -## v1.12.0 - -See https://github.com/ruby-git/ruby-git/releases/tag/v1.12.0 - -## v1.11.0 - -* 292087e Supress unneeded test output (#570) -* 19dfe5e Add support for fetch options "--force/-f" and "--prune-tags/-P". (#563) -* 018d919 Fix bug when grepping lines that contain numbers surrounded by colons (#566) -* c04d16e remove from maintainer (#567) -* 291ca09 Address command line injection in Git::Lib#fetch -* 521b8e7 Release v1.10.2 (#561) - -See https://github.com/ruby-git/ruby-git/releases/tag/v1.11.0 - -## v1.10.2 - -See https://github.com/ruby-git/ruby-git/releases/tag/v1.10.2 - -## 1.10.1 - -See https://github.com/ruby-git/ruby-git/releases/tag/v1.10.1 - -## 1.10.0 - -See https://github.com/ruby-git/ruby-git/releases/tag/v1.10.0 - -## 1.9.1 - -See https://github.com/ruby-git/ruby-git/releases/tag/v1.9.1 - -## 1.9.0 - -See https://github.com/ruby-git/ruby-git/releases/tag/v1.9.0 - -## 1.8.1 - -See https://github.com/ruby-git/ruby-git/releases/tag/v1.8.1 - -## 1.8.0 - -See https://github.com/ruby-git/ruby-git/releases/tag/v1.8.0 - -## 1.7.0 - -See https://github.com/ruby-git/ruby-git/releases/tag/v1.7.0 - -## 1.6.0 - -See https://github.com/ruby-git/ruby-git/releases/tag/v1.6.0 - -## 1.6.0.pre1 - -See https://github.com/ruby-git/ruby-git/releases/tag/v1.6.0.pre1 - -## 1.5.0 - -See https://github.com/ruby-git/ruby-git/releases/tag/v1.5.0 - -## 1.4.0 - -See https://github.com/ruby-git/ruby-git/releases/tag/v1.4.0 - -## 1.3.0 - - * Dropping Ruby 1.8.x support - -## 1.2.10 - - * Adding Git::Diff.name_status - * Checking and fixing encoding on commands output to prevent encoding errors afterwards - -## 1.2.9 - -* Adding Git.configure (to configure the git env) -* Adding Git.ls_remote [Git.ls_remote(repo_path_or_url='.')] -* Adding Git.describe [repo.describe(objectish, opts)] -* Adding Git.show [repo.show(objectish=nil, path=nil)] -* Fixing Git::Diff to support default references (implicit references) -* Fixing Git::Diff to support diff over git .patch files -* Fixing Git.checkout when using :new_branch opt -* Fixing Git::Object::Commit to preserve its sha after fetching metadata -* Fixing Git.is_remote_branch? to actually check against remote branches -* Improvements over how ENV variables are modified -* Improving thrade safety (using --git-dir and --work-tree git opts) -* Improving Git::Object::Tag. Adding annotated?, tagger and message -* Supporting a submodule path as a valid repo -* Git.checkout - supporting -f and -b -* Git.clone - supporting --branch -* Git.fetch - supporting --prune -* Git.tag - supporting - -## 1.2.8 - -* Keeping the old escape format for windows users -* revparse: Supporting ref names containing SHA like substrings (40-hex strings) -* Fix warnings on Ruby 2.1.2 - -## 1.2.7 - -* Fixing mesages encoding -* Fixing -f flag in git push -* Fixing log parser for multiline messages -* Supporting object references on Git.add_tag -* Including dotfiles on Git.status -* Git.fetch - supporting --tags -* Git.clean - supporting -x -* Git.add_tag options - supporting -a, -m and -s -* Added Git.delete_tag - -## 1.2.6 - -* Ruby 1.9.X/2.0 fully supported -* JRuby 1.8/1.9 support -* Rubinius support -* Git.clone - supporting --recursive and --config -* Git.log - supporting last and [] over the results -* Git.add_remote - supporting -f and -t -* Git.add - supporting --fore -* Git.init - supporting --bare -* Git.commit - supporting --all and --amend -* Added Git.remote_remote, Git.revert and Git.clean -* Added Bundler to the formula -* Travis configuration -* Licence included with the gem - -## 1.0.4 - -* added camping/gitweb.rb frontend -* added a number of speed-ups - -## 1.0.3 - -* Sped up most of the operations -* Added some predicate functions (commit?, tree?, etc) -* Added a number of lower level operations (read-tree, write-tree, checkout-index, etc) -* Fixed a bug with using bare repositories -* Updated a good amount of the documentation - -## 1.0.2 - -* Added methods to the git objects that might be helpful - -## 1.0.1 - -* Initial version diff --git a/bundle/ruby/3.2.0/gems/git-1.19.1/CONTRIBUTING.md b/bundle/ruby/3.2.0/gems/git-1.19.1/CONTRIBUTING.md deleted file mode 100644 index 8b9d7bf9..00000000 --- a/bundle/ruby/3.2.0/gems/git-1.19.1/CONTRIBUTING.md +++ /dev/null @@ -1,163 +0,0 @@ - - -# Contributing to ruby-git - -Thank you for your interest in contributing to the ruby-git project. - -This document gives the guidelines for contributing to the ruby-git project. -These guidelines may not fit every situation. When contributing use your best -judgement. - -Propose changes to these guidelines with a pull request. - -## How to contribute - -You can contribute in two ways: - -1. [Report an issue or make a feature request](#how-to-report-an-issue-or-make-a-feature-request) -2. [Submit a code or documentation change](#how-to-submit-a-code-or-documentation-change) - -## How to report an issue or make a feature request - -ruby-git utilizes [GitHub Issues](https://help.github.com/en/github/managing-your-work-on-github/about-issues) -for issue tracking and feature requests. - -Report an issue or feature request by [creating a ruby-git Github issue](https://github.com/ruby-git/ruby-git/issues/new). -Fill in the template to describe the issue or feature request the best you can. - -## How to submit a code or documentation change - -There is three step process for code or documentation changes: - -1. [Commit your changes to a fork of ruby-git](#commit-changes-to-a-fork-of-ruby-git) -2. [Create a pull request](#create-a-pull-request) -3. [Get your pull request reviewed](#get-your-pull-request-reviewed) - -### Commit changes to a fork of ruby-git - -Make your changes in a fork of the ruby-git repository. - -Each commit must include a [DCO sign-off](#developer-certificate-of-origin-dco) -by adding the line `Signed-off-by: Name ` to the end of the commit -message. - -### Create a pull request - -See [this article](https://help.github.com/articles/about-pull-requests/) if you -are not familiar with GitHub Pull Requests. - -Follow the instructions in the pull request template. - -### Get your pull request reviewed - -Code review takes place in a GitHub pull request using the [the Github pull request review feature](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/about-pull-request-reviews). - -Once your pull request is ready for review, request a review from at least one -[maintainer](MAINTAINERS.md) and any number of other contributors. - -During the review process, you may need to make additional commits which would -need to be squashed. It may also be necessary to rebase to master again if other -changes are merged before your PR. - -At least one approval is required from a project maintainer before your pull -request can be merged. The maintainer is responsible for ensuring that the pull -request meets [the project's coding standards](#coding-standards). - -## Coding standards - -In order to ensure high quality, all pull requests must meet these requirements: - -### 1 PR = 1 Commit - * All commits for a PR must be squashed into one commit - * To avoid an extra merge commit, the PR must be able to be merged as [a fast forward merge](https://git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging) - * The easiest way to ensure a fast forward merge is to rebase your local branch - to the ruby-git master branch - -### Unit tests - * All changes must be accompanied by new or modified unit tests - * The entire test suite must pass when `bundle exec rake default` is run from the - project's local working copy. - -While working on specific features you can run individual test files or -a group of tests using `bin/test`: - - # run a single file (from tests/units): - $ bin/test test_object - - # run multiple files: - $ bin/test test_object test_archive - - # run all unit tests: - $ bin/test - -### Continuous integration - * All tests must pass in the project's [GitHub Continuous Integration build](https://github.com/ruby-git/ruby-git/actions?query=workflow%3ACI) - before the pull request will be merged. - * The [Continuous Integration workflow](https://github.com/ruby-git/ruby-git/blob/master/.github/workflows/continuous_integration.yml) - runs both `bundle exec rake default` and `bundle exec rake test:gem` from the project's [Rakefile](https://github.com/ruby-git/ruby-git/blob/master/Rakefile). - -### Documentation - * New and updated public methods must have [YARD](https://yardoc.org/) - documentation added to them - * New and updated public facing features should be documented in the project's - [README.md](README.md) - -### Licensing sign-off - * Each commit must contain [the DCO sign-off](#developer-certificate-of-origin-dco) - in the form: `Signed-off-by: Name ` - -## Licensing - -ruby-git uses [the MIT license](https://choosealicense.com/licenses/mit/) as -declared in the [LICENSE](LICENSE) file. - -Licensing is very important to open source projects. It helps ensure the -software continues to be available under the terms that the author desired. - -### Developer Certificate of Origin (DCO) - -This project requires that authors have permission to submit their contributions -under the MIT license. To make a good faith effort to ensure this, ruby-git -requires the [Developer Certificate of Origin (DCO)](https://elinux.org/Developer_Certificate_Of_Origin) -process be followed. - -This process requires that each commit include a `Signed-off-by` line that -indicates the author accepts the DCO. Here is an example DCO sign-off line: - -``` -Signed-off-by: John Doe -``` - -The full text of the DCO version 1.1 is below or at . - -``` -Developer's Certificate of Origin 1.1 - -By making a contribution to this project, I certify that: - -(a) The contribution was created in whole or in part by me and I - have the right to submit it under the open source license - indicated in the file; or - -(b) The contribution is based upon previous work that, to the - best of my knowledge, is covered under an appropriate open - source license and I have the right under that license to - submit that work with modifications, whether created in whole - or in part by me, under the same open source license (unless - I am permitted to submit under a different license), as - Indicated in the file; or - -(c) The contribution was provided directly to me by some other - person who certified (a), (b) or (c) and I have not modified - it. - -(d) I understand and agree that this project and the contribution - are public and that a record of the contribution (including - all personal information I submit with it, including my - sign-off) is maintained indefinitely and may be redistributed - consistent with this project or the open source license(s) - involved. -``` diff --git a/bundle/ruby/3.2.0/gems/git-1.19.1/Dockerfile.changelog-rs b/bundle/ruby/3.2.0/gems/git-1.19.1/Dockerfile.changelog-rs deleted file mode 100644 index 75c35d93..00000000 --- a/bundle/ruby/3.2.0/gems/git-1.19.1/Dockerfile.changelog-rs +++ /dev/null @@ -1,12 +0,0 @@ -FROM rust - -# Build the docker image (from this project's root directory): -# docker build --file Dockerfile.changelog-rs --tag changelog-rs . -# -# Use this image to output a changelog (from this project's root directory): -# docker run --rm --volume "$PWD:/worktree" changelog-rs v1.9.1 v1.10.0 - -RUN cargo install changelog-rs -WORKDIR /worktree - -ENTRYPOINT ["/usr/local/cargo/bin/changelog-rs", "/worktree"] diff --git a/bundle/ruby/3.2.0/gems/git-1.19.1/Gemfile b/bundle/ruby/3.2.0/gems/git-1.19.1/Gemfile deleted file mode 100644 index 2e8f4fe2..00000000 --- a/bundle/ruby/3.2.0/gems/git-1.19.1/Gemfile +++ /dev/null @@ -1,5 +0,0 @@ -# frozen_string_literal: true - -source 'https://rubygems.org' - -gemspec name: 'git' diff --git a/bundle/ruby/3.2.0/gems/git-1.19.1/ISSUE_TEMPLATE.md b/bundle/ruby/3.2.0/gems/git-1.19.1/ISSUE_TEMPLATE.md deleted file mode 100644 index dd4fc23c..00000000 --- a/bundle/ruby/3.2.0/gems/git-1.19.1/ISSUE_TEMPLATE.md +++ /dev/null @@ -1,15 +0,0 @@ -### Subject of the issue -Describe your issue here. - -### Your environment -* version of git and ruby-git -* version of ruby - -### Steps to reproduce -Tell us how to reproduce this issue. - -### Expected behaviour -What did you expect to happen? - -### Actual behaviour -What actually happened? \ No newline at end of file diff --git a/bundle/ruby/3.2.0/gems/git-1.19.1/LICENSE b/bundle/ruby/3.2.0/gems/git-1.19.1/LICENSE deleted file mode 100644 index 118ee3a3..00000000 --- a/bundle/ruby/3.2.0/gems/git-1.19.1/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License - -Copyright (c) 2008 Scott Chacon - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/bundle/ruby/3.2.0/gems/git-1.19.1/MAINTAINERS.md b/bundle/ruby/3.2.0/gems/git-1.19.1/MAINTAINERS.md deleted file mode 100644 index 7290f137..00000000 --- a/bundle/ruby/3.2.0/gems/git-1.19.1/MAINTAINERS.md +++ /dev/null @@ -1,12 +0,0 @@ - - -# Maintainers - -When making changes in this repository, one of the maintainers below must review and approve your pull request. - -* [James Couball](https://github.com/jcouball) -* [Frank Throckmorton](https://github.com/frankthrock) -* [Per Lundberg](https://github.com/perlun) diff --git a/bundle/ruby/3.2.0/gems/git-1.19.1/PULL_REQUEST_TEMPLATE.md b/bundle/ruby/3.2.0/gems/git-1.19.1/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index dc470a6e..00000000 --- a/bundle/ruby/3.2.0/gems/git-1.19.1/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,9 +0,0 @@ -### Your checklist for this pull request -🚨Please review the [guidelines for contributing](https://github.com/ruby-git/ruby-git/blob/master/CONTRIBUTING.md) to this repository. - -- [ ] Ensure all commits include DCO sign-off. -- [ ] Ensure that your contributions pass unit testing. -- [ ] Ensure that your contributions contain documentation if applicable. - -### Description -Please describe your pull request. diff --git a/bundle/ruby/3.2.0/gems/git-1.19.1/README.md b/bundle/ruby/3.2.0/gems/git-1.19.1/README.md deleted file mode 100644 index 5597228d..00000000 --- a/bundle/ruby/3.2.0/gems/git-1.19.1/README.md +++ /dev/null @@ -1,427 +0,0 @@ - - -# The Git Gem - -[![Gem Version](https://badge.fury.io/rb/git.svg)](https://badge.fury.io/rb/git) -[![Documentation](https://img.shields.io/badge/Documentation-Latest-green)](https://rubydoc.info/gems/git/) -[![Change Log](https://img.shields.io/badge/CHANGELOG-Latest-green)](https://rubydoc.info/gems/git/file/CHANGELOG.md) -[![Build Status](https://github.com/ruby-git/ruby-git/workflows/CI/badge.svg?branch=master)](https://github.com/ruby-git/ruby-git/actions?query=workflow%3ACI) -[![Code Climate](https://codeclimate.com/github/ruby-git/ruby-git.png)](https://codeclimate.com/github/ruby-git/ruby-git) - -The [git gem](https://rubygems.org/gems/git) provides an API that can be used to -create, read, and manipulate Git repositories by wrapping system calls to the `git` -command line. The API can be used for working with Git in complex interactions -including branching and merging, object inspection and manipulation, history, patch -generation and more. - -## v2.0.0 pre-release - -git 2.0.0 is available as a pre-release version for testing! Please give it a try. - -**JRuby on Windows is not yet supported by the 2.x release line. Users running JRuby -on Windows should continue to use the 1.x release line.** - -The changes coming in this major release include: - -* Create a policy of supported Ruby versions to support only non-EOL Ruby versions -* Create a policy of supported Git CLI versions (released 2020-12-25) -* Update the required Ruby version to at least 3.0 (released 2020-07-27) -* Update the required Git command line version to at least 2.28 -* Update how CLI commands are called to use the [process_executer](https://github.com/main-branch/process_executer) - gem which is built on top of [Kernel.spawn](https://ruby-doc.org/3.3.0/Kernel.html#method-i-spawn). - See [PR #617](https://github.com/ruby-git/ruby-git/pull/617) for more details - on the motivation for this implementation. - -The tentative plan is to release `2.0.0` near the end of March 2024 depending on -the feedback received during the pre-release period. - -The `master` branch will be used for `2.x` development. If needed, fixes for `1.x` -version will be done on the `v1` branch. - -## Homepage - -The project source code is at: - -http://github.com/ruby-git/ruby-git - -## Documentation - -Detailed documentation can be found at: - -https://rubydoc.info/gems/git/Git.html - -Get started by obtaining a repository object by: - -* opening an existing working copy with [Git.open](https://rubydoc.info/gems/git/Git#open-class_method) -* initializing a new repository with [Git.init](https://rubydoc.info/gems/git/Git#init-class_method) -* cloning a repository with [Git.clone](https://rubydoc.info/gems/git/Git#clone-class_method) - -Methods that can be called on a repository object are documented in [Git::Base](https://rubydoc.info/gems/git/Git/Base) - -## Install - -You can install Ruby/Git like this: - -``` -sudo gem install git -``` - -## Code Status - - -## Major Objects - -**Git::Base** - The object returned from a `Git.open` or `Git.clone`. Most major actions are called from this object. - -**Git::Object** - The base object for your tree, blob and commit objects, returned from `@git.gtree` or `@git.object` calls. the `Git::AbstractObject` will have most of the calls in common for all those objects. - -**Git::Diff** - returns from a `@git.diff` command. It is an Enumerable that returns `Git::Diff:DiffFile` objects from which you can get per file patches and insertion/deletion statistics. You can also get total statistics from the Git::Diff object directly. - -**Git::Status** - returns from a `@git.status` command. It is an Enumerable that returns -`Git:Status::StatusFile` objects for each object in git, which includes files in the working -directory, in the index and in the repository. Similar to running 'git status' on the command line to determine untracked and changed files. - -**Git::Branches** - Enumerable object that holds `Git::Branch objects`. You can call .local or .remote on it to filter to just your local or remote branches. - -**Git::Remote**- A reference to a remote repository that is tracked by this repository. - -**Git::Log** - An Enumerable object that references all the `Git::Object::Commit` objects that encompass your log query, which can be constructed through methods on the `Git::Log object`, -like: - - `@git.log(20).object("some_file").since("2 weeks ago").between('v2.6', 'v2.7').each { |commit| [block] }` - -Pass the `--all` option to `git log` as follows: - - `@git.log.all.each { |commit| [block] }` - - **Git::Worktrees** - Enumerable object that holds `Git::Worktree objects`. - -## Examples - -Here are a bunch of examples of how to use the Ruby/Git package. - -Ruby < 1.9 will require rubygems to be loaded. - -```ruby -require 'rubygems' -``` - -Require the 'git' gem. -```ruby -require 'git' -``` - -Git env config - -```ruby -Git.configure do |config| - # If you want to use a custom git binary - config.binary_path = '/git/bin/path' - - # If you need to use a custom SSH script - config.git_ssh = '/path/to/ssh/script' -end -``` - -_NOTE: Another way to specify where is the `git` binary is through the environment variable `GIT_PATH`_ - -Here are the operations that need read permission only. - -```ruby -g = Git.open(working_dir, :log => Logger.new(STDOUT)) - -g.index -g.index.readable? -g.index.writable? -g.repo -g.dir - -g.log # returns a Git::Log object, which is an Enumerator of Git::Commit objects -g.log(200) -g.log.since('2 weeks ago') -g.log.between('v2.5', 'v2.6') -g.log.each {|l| puts l.sha } -g.gblob('v2.5:Makefile').log.since('2 weeks ago') - -g.object('HEAD^').to_s # git show / git rev-parse -g.object('HEAD^').contents -g.object('v2.5:Makefile').size -g.object('v2.5:Makefile').sha - -g.gtree(treeish) -g.gblob(treeish) -g.gcommit(treeish) - - -commit = g.gcommit('1cc8667014381') - -commit.gtree -commit.parent.sha -commit.parents.size -commit.author.name -commit.author.email -commit.author.date.strftime("%m-%d-%y") -commit.committer.name -commit.date.strftime("%m-%d-%y") -commit.message - -tree = g.gtree("HEAD^{tree}") - -tree.blobs -tree.subtrees -tree.children # blobs and subtrees - -g.revparse('v2.5:Makefile') - -g.branches # returns Git::Branch objects -g.branches.local -g.current_branch -g.branches.remote -g.branches[:master].gcommit -g.branches['origin/master'].gcommit - -g.grep('hello') # implies HEAD -g.blob('v2.5:Makefile').grep('hello') -g.tag('v2.5').grep('hello', 'docs/') -g.describe() -g.describe('0djf2aa') -g.describe('HEAD', {:all => true, :tags => true}) - -g.diff(commit1, commit2).size -g.diff(commit1, commit2).stats -g.diff(commit1, commit2).name_status -g.gtree('v2.5').diff('v2.6').insertions -g.diff('gitsearch1', 'v2.5').path('lib/') -g.diff('gitsearch1', @git.gtree('v2.5')) -g.diff('gitsearch1', 'v2.5').path('docs/').patch -g.gtree('v2.5').diff('v2.6').patch - -g.gtree('v2.5').diff('v2.6').each do |file_diff| - puts file_diff.path - puts file_diff.patch - puts file_diff.blob(:src).contents -end - -g.worktrees # returns Git::Worktree objects -g.worktrees.count -g.worktrees.each do |worktree| - worktree.dir - worktree.gcommit - worktree.to_s -end - -g.config('user.name') # returns 'Scott Chacon' -g.config # returns whole config hash - -# Configuration can be set when cloning using the :config option. -# This option can be an single configuration String or an Array -# if multiple config items need to be set. -# -g = Git.clone( - git_uri, destination_path, - :config => [ - 'core.sshCommand=ssh -i /home/user/.ssh/id_rsa', - 'submodule.recurse=true' - ] -) - -g.tags # returns array of Git::Tag objects - -g.show() -g.show('HEAD') -g.show('v2.8', 'README.md') - -Git.ls_remote('https://github.com/ruby-git/ruby-git.git') # returns a hash containing the available references of the repo. -Git.ls_remote('/path/to/local/repo') -Git.ls_remote() # same as Git.ls_remote('.') - -Git.default_branch('https://github.com/ruby-git/ruby-git') #=> 'master' -``` - -And here are the operations that will need to write to your git repository. - -```ruby -g = Git.init - Git.init('project') - Git.init('/home/schacon/proj', - { :repository => '/opt/git/proj.git', - :index => '/tmp/index'} ) - -# Clone from a git url -git_url = 'https://github.com/ruby-git/ruby-git.git' -# Clone into the ruby-git directory -g = Git.clone(git_url) - -# Clone into /tmp/clone/ruby-git-clean -name = 'ruby-git-clean' -path = '/tmp/clone' -g = Git.clone(git_url, name, :path => path) -g.dir #=> /tmp/clone/ruby-git-clean - -g.config('user.name', 'Scott Chacon') -g.config('user.email', 'email@email.com') - -# Clone can take a filter to tell the serve to send a partial clone -g = Git.clone(git_url, name, :path => path, :filter => 'tree:0') - -# Clone can take an optional logger -logger = Logger.new -g = Git.clone(git_url, NAME, :log => logger) - -g.add # git add -- "." -g.add(:all=>true) # git add --all -- "." -g.add('file_path') # git add -- "file_path" -g.add(['file_path_1', 'file_path_2']) # git add -- "file_path_1" "file_path_2" - -g.remove() # git rm -f -- "." -g.remove('file.txt') # git rm -f -- "file.txt" -g.remove(['file.txt', 'file2.txt']) # git rm -f -- "file.txt" "file2.txt" -g.remove('file.txt', :recursive => true) # git rm -f -r -- "file.txt" -g.remove('file.txt', :cached => true) # git rm -f --cached -- "file.txt" - -g.commit('message') -g.commit_all('message') - -# Sign a commit using the gpg key configured in the user.signingkey config setting -g.config('user.signingkey', '0A46826A') -g.commit('message', gpg_sign: true) - -# Sign a commit using a specified gpg key -key_id = '0A46826A' -g.commit('message', gpg_sign: key_id) - -# Skip signing a commit (overriding any global gpgsign setting) -g.commit('message', no_gpg_sign: true) - -g = Git.clone(repo, 'myrepo') -g.chdir do -new_file('test-file', 'blahblahblah') -g.status.changed.each do |file| - puts file.blob(:index).contents -end -end - -g.reset # defaults to HEAD -g.reset_hard(Git::Commit) - -g.branch('new_branch') # creates new or fetches existing -g.branch('new_branch').checkout -g.branch('new_branch').delete -g.branch('existing_branch').checkout -g.branch('master').contains?('existing_branch') - -# delete remote branch -g.push('origin', 'remote_branch_name', force: true, delete: true) - -g.checkout('new_branch') -g.checkout('new_branch', new_branch: true, start_point: 'master') -g.checkout(g.branch('new_branch')) - -g.branch(name).merge(branch2) -g.branch(branch2).merge # merges HEAD with branch2 - -g.branch(name).in_branch(message) { # add files } # auto-commits -g.merge('new_branch') -g.merge('new_branch', 'merge commit message', no_ff: true) -g.merge('origin/remote_branch') -g.merge(g.branch('master')) -g.merge([branch1, branch2]) - -g.merge_base('branch1', 'branch2') - -r = g.add_remote(name, uri) # Git::Remote -r = g.add_remote(name, Git::Base) # Git::Remote - -g.remotes # array of Git::Remotes -g.remote(name).fetch -g.remote(name).remove -g.remote(name).merge -g.remote(name).merge(branch) - -g.fetch -g.fetch(g.remotes.first) -g.fetch('origin', {:ref => 'some/ref/head'} ) -g.fetch(all: true, force: true, depth: 2) -g.fetch('origin', {:'update-head-ok' => true}) - -g.pull -g.pull(Git::Repo, Git::Branch) # fetch and a merge - -g.add_tag('tag_name') # returns Git::Tag -g.add_tag('tag_name', 'object_reference') -g.add_tag('tag_name', 'object_reference', {:options => 'here'}) -g.add_tag('tag_name', {:options => 'here'}) - -Options: - :a | :annotate - :d - :f - :m | :message - :s - -g.delete_tag('tag_name') - -g.repack - -g.push -g.push(g.remote('name')) - -# delete remote branch -g.push('origin', 'remote_branch_name', force: true, delete: true) - -# push all branches to remote at one time -g.push('origin', all: true) - -g.worktree('/tmp/new_worktree').add -g.worktree('/tmp/new_worktree', 'branch1').add -g.worktree('/tmp/new_worktree').remove -g.worktrees.prune -``` - -Some examples of more low-level index and tree operations - -```ruby -g.with_temp_index do - - g.read_tree(tree3) # calls self.index.read_tree - g.read_tree(tree1, :prefix => 'hi/') - - c = g.commit_tree('message') - # or # - t = g.write_tree - c = g.commit_tree(t, :message => 'message', :parents => [sha1, sha2]) - - g.branch('branch_name').update_ref(c) - g.update_ref(branch, c) - - g.with_temp_working do # new blank working directory - g.checkout - g.checkout(another_index) - g.commit # commits to temp_index - end -end - -g.set_index('/path/to/index') - - -g.with_index(path) do - # calls set_index, then switches back after -end - -g.with_working(dir) do -# calls set_working, then switches back after -end - -g.with_temp_working(dir) do - g.checkout_index(:prefix => dir, :path_limiter => path) - # do file work - g.commit # commits to index -end -``` - -## License - -licensed under MIT License Copyright (c) 2008 Scott Chacon. See LICENSE for further details. diff --git a/bundle/ruby/3.2.0/gems/git-1.19.1/RELEASING.md b/bundle/ruby/3.2.0/gems/git-1.19.1/RELEASING.md deleted file mode 100644 index 04e11984..00000000 --- a/bundle/ruby/3.2.0/gems/git-1.19.1/RELEASING.md +++ /dev/null @@ -1,70 +0,0 @@ - - -# How to release a new git.gem - -Releasing a new version of the `git` gem requires these steps: - -- [How to release a new git.gem](#how-to-release-a-new-gitgem) - - [Install Prerequisites](#install-prerequisites) - - [Prepare the Release](#prepare-the-release) - - [Review and Merge the Release](#review-and-merge-the-release) - - [Build and Release the Gem](#build-and-release-the-gem) - -These instructions use an example where: - -- The default branch is `master` -- The current release version is `1.5.0` -- You want to create a new *minor* release, `1.6.0` - -## Install Prerequisites - -The following tools need to be installed in order to create the release: - -- [git](https://git-scm.com) is used to interact with the local and remote repositories -- [gh](https://cli.github.com) is used to create the release and PR in GitHub -- [Docker](https://www.docker.com) is used to run the script to create the release notes - -On a Mac, these tools can be installed using [brew](https://brew.sh): - -```shell -$ brew install git -... -$ brew install gh -... -$ brew install --cask docker -... -$ -``` - -## Prepare the Release - -Bump the version, create release notes, tag the release and create a GitHub release and PR which can be used to review the release. - -Steps: - -- Check out the code with `git clone https://github.com/ruby-git/ruby-git ruby-git-v1.6.0 && cd ruby-git-v1.6.0` -- Install development dependencies using bundle `bundle install` -- Based upon the nature of the changes, decide on the type of release: `major`, `minor`, or `patch` (in this example we will use `minor`) -- Run the release script `bundle exec create-github-release minor` - -## Review and Merge the Release - -Have the release PR approved and merge the changes into the `master` branch. - -**IMPORTANT** DO NOT merge to the `master` branch using the GitHub UI. Instead use the instructions below. - -Steps: - -- Get the release PR reviewed and approved in GitHub -- Merge the changes with the command `git checkout master && git merge --ff-only v1.6.0 && git push` - -## Build and Release the Gem - -Build the gem and publish it to [rubygems.org](https://rubygems.org/gems/git) - -Steps: - -- Build and release the gem using rake `bundle exec rake release` diff --git a/bundle/ruby/3.2.0/gems/git-1.19.1/Rakefile b/bundle/ruby/3.2.0/gems/git-1.19.1/Rakefile deleted file mode 100644 index e2d8ef2a..00000000 --- a/bundle/ruby/3.2.0/gems/git-1.19.1/Rakefile +++ /dev/null @@ -1,60 +0,0 @@ -require 'bundler/gem_tasks' -require 'English' - -require 'git/version' - -default_tasks = [] - -desc 'Run Unit Tests' -task :test do - sh 'ruby bin/test' - - # You can run individual test files (or multiple files) from the command - # line with: - # - # $ bin/test tests/units/test_archive.rb - # - # $ bin/test tests/units/test_archive.rb tests/units/test_object.rb -end -default_tasks << :test - -unless RUBY_PLATFORM == 'java' || RUBY_ENGINE == 'truffleruby' - # - # YARD documentation for this project can NOT be built with JRuby. - # This project uses the redcarpet gem which can not be installed on JRuby. - # - require 'yard' - YARD::Rake::YardocTask.new - CLEAN << '.yardoc' - CLEAN << 'doc' - default_tasks << :yard - - require 'yardstick/rake/verify' - Yardstick::Rake::Verify.new(:'yardstick:coverage') do |t| - t.threshold = 50 - t.require_exact_threshold = false - end - default_tasks << :'yardstick:coverage' - - desc 'Run yardstick to check yard docs' - task :yardstick do - sh "yardstick 'lib/**/*.rb'" - end - # Do not include yardstick as a default task for now since there are too many - # warnings. Will work to get the warnings down before re-enabling it. - # - # default_tasks << :yardstick -end - -default_tasks << :build - -task default: default_tasks - -desc 'Build and install the git gem and run a sanity check' -task :'test:gem' => :install do - output = `ruby -e "require 'git'; g = Git.open('.'); puts g.log.size"`.chomp - raise 'Gem test failed' unless $CHILD_STATUS.success? - raise 'Expected gem test to return an integer' unless output =~ /^\d+$/ - - puts 'Gem Test Succeeded' -end diff --git a/bundle/ruby/3.2.0/gems/git-1.19.1/git.gemspec b/bundle/ruby/3.2.0/gems/git-1.19.1/git.gemspec deleted file mode 100644 index daff7915..00000000 --- a/bundle/ruby/3.2.0/gems/git-1.19.1/git.gemspec +++ /dev/null @@ -1,52 +0,0 @@ -$LOAD_PATH.unshift File.expand_path('../lib', __FILE__) -require 'git/version' - -Gem::Specification.new do |s| - s.author = 'Scott Chacon and others' - s.email = 'schacon@gmail.com' - s.homepage = 'http://github.com/ruby-git/ruby-git' - s.license = 'MIT' - s.name = 'git' - s.summary = 'An API to create, read, and manipulate Git repositories' - s.description = <<~DESCRIPTION - The git gem provides an API that can be used to - create, read, and manipulate Git repositories by wrapping system calls to the git - command line. The API can be used for working with Git in complex interactions - including branching and merging, object inspection and manipulation, history, patch - generation and more. - DESCRIPTION - s.version = Git::VERSION - - - s.metadata['homepage_uri'] = s.homepage - s.metadata['source_code_uri'] = s.homepage - s.metadata['changelog_uri'] = "https://rubydoc.info/gems/#{s.name}/#{s.version}/file/CHANGELOG.md" - s.metadata['documentation_uri'] = "https://rubydoc.info/gems/#{s.name}/#{s.version}" - - s.require_paths = ['lib'] - s.required_ruby_version = '>= 2.3' - s.required_rubygems_version = Gem::Requirement.new('>= 0') if s.respond_to?(:required_rubygems_version=) - s.requirements = ['git 1.6.0.0, or greater'] - - s.add_runtime_dependency 'addressable', '~> 2.8' - s.add_runtime_dependency 'rchardet', '~> 1.8' - - s.add_development_dependency 'bump', '~> 0.10' - s.add_development_dependency 'create_github_release', '~> 0.2' - s.add_development_dependency 'minitar', '~> 0.9' - s.add_development_dependency 'mocha', '~> 2.1' - s.add_development_dependency 'rake', '~> 13.0' - s.add_development_dependency 'test-unit', '~> 3.3' - - unless RUBY_PLATFORM == 'java' - s.add_development_dependency 'redcarpet', '~> 3.5' - s.add_development_dependency 'yard', '~> 0.9', '>= 0.9.28' - s.add_development_dependency 'yardstick', '~> 0.9' - end - - # Specify which files should be added to the gem when it is released. - # The `git ls-files -z` loads the files in the RubyGem that have been added into git. - s.files = Dir.chdir(File.expand_path(__dir__)) do - `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(tests|spec|features|bin)/}) } - end -end diff --git a/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git.rb b/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git.rb deleted file mode 100644 index e75ff189..00000000 --- a/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git.rb +++ /dev/null @@ -1,383 +0,0 @@ -# Add the directory containing this file to the start of the load path if it -# isn't there already. -$:.unshift(File.dirname(__FILE__)) unless - $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__))) - -require 'git/author' -require 'git/base' -require 'git/branch' -require 'git/branches' -require 'git/command_line_result' -require 'git/config' -require 'git/diff' -require 'git/encoding_utils' -require 'git/escaped_path' -require 'git/failed_error' -require 'git/git_execute_error' -require 'git/index' -require 'git/lib' -require 'git/log' -require 'git/object' -require 'git/path' -require 'git/remote' -require 'git/repository' -require 'git/signaled_error' -require 'git/status' -require 'git/stash' -require 'git/stashes' -require 'git/url' -require 'git/version' -require 'git/working_directory' -require 'git/worktree' -require 'git/worktrees' - -# The Git module provides the basic functions to open a git -# reference to work with. You can open a working directory, -# open a bare repository, initialize a new repo or clone an -# existing remote repository. -# -# @author Scott Chacon (mailto:schacon@gmail.com) -# -module Git - #g.config('user.name', 'Scott Chacon') # sets value - #g.config('user.email', 'email@email.com') # sets value - #g.config('user.name') # returns 'Scott Chacon' - #g.config # returns whole config hash - def config(name = nil, value = nil) - lib = Git::Lib.new - if(name && value) - # set value - lib.config_set(name, value) - elsif (name) - # return value - lib.config_get(name) - else - # return hash - lib.config_list - end - end - - def self.configure - yield Base.config - end - - def self.config - return Base.config - end - - def global_config(name = nil, value = nil) - self.class.global_config(name, value) - end - - # Open a bare repository - # - # Opens a bare repository located in the `git_dir` directory. - # Since there is no working copy, you can not checkout or commit - # but you can do most read operations. - # - # @see https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-aiddefbarerepositoryabarerepository - # What is a bare repository? - # - # @example Open a bare repository and retrieve the first commit SHA - # repository = Git.bare('ruby-git.git') - # puts repository.log[0].sha #=> "64c6fa011d3287bab9158049c85f3e85718854a0" - # - # @param [Pathname] git_dir The path to the bare repository directory - # containing an initialized Git repository. If a relative path is given, it - # is converted to an absolute path using - # [File.expand_path](https://www.rubydoc.info/stdlib/core/File.expand_path). - # - # @param [Hash] options The options for this command (see list of valid - # options below) - # - # @option options [Logger] :log A logger to use for Git operations. Git commands - # are logged at the `:info` level. Additional logging is done at the `:debug` - # level. - # - # @return [Git::Base] an object that can execute git commands in the context - # of the bare repository. - # - def self.bare(git_dir, options = {}) - Base.bare(git_dir, options) - end - - # Clone a repository into an empty or newly created directory - # - # @see https://git-scm.com/docs/git-clone git clone - # @see https://git-scm.com/docs/git-clone#_git_urls_a_id_urls_a GIT URLs - # - # @param repository_url [URI, Pathname] The (possibly remote) repository url to clone - # from. See [GIT URLS](https://git-scm.com/docs/git-clone#_git_urls_a_id_urls_a) - # for more information. - # - # @param directory [Pathname, nil] The directory to clone into - # - # If `directory` is a relative directory it is relative to the `path` option if - # given. If `path` is not given, `directory` is relative to the current working - # directory. - # - # If `nil`, `directory` will be set to the basename of the last component of - # the path from the `repository_url`. For example, for the URL: - # `https://github.com/org/repo.git`, `directory` will be set to `repo`. - # - # If the last component of the path is `.git`, the next-to-last component of - # the path is used. For example, for the URL `/Users/me/foo/.git`, `directory` - # will be set to `foo`. - # - # @param [Hash] options The options for this command (see list of valid - # options below) - # - # @option options [Boolean] :bare Make a bare Git repository. See - # [what is a bare repository?](https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-aiddefbarerepositoryabarerepository). - # - # @option options [String] :branch The name of a branch or tag to checkout - # instead of the default branch. - # - # @option options [Array, String] :config A list of configuration options to - # set on the newly created repository. - # - # @option options [Integer] :depth Create a shallow clone with a history - # truncated to the specified number of commits. - # - # @option options [String] :filter Request that the server send a partial - # clone according to the given filter - # - # @option options [Logger] :log A logger to use for Git operations. Git - # commands are logged at the `:info` level. Additional logging is done - # at the `:debug` level. - # - # @option options [Boolean] :mirror Set up a mirror of the source repository. - # - # @option options [String] :origin Use the value instead `origin` to track - # the upstream repository. - # - # @option options [Pathname] :path The directory to clone into. May be used - # as an alternative to the `directory` parameter. If specified, the - # `path` option is used instead of the `directory` parameter. - # - # @option options [Boolean] :recursive After the clone is created, initialize - # all submodules within, using their default settings. - # - # @example Clone into the default directory `ruby-git` - # git = Git.clone('https://github.com/ruby-git/ruby-git.git') - # - # @example Clone and then checkout the `development` branch - # git = Git.clone('https://github.com/ruby-git/ruby-git.git', branch: 'development') - # - # @example Clone into a different directory `my-ruby-git` - # git = Git.clone('https://github.com/ruby-git/ruby-git.git', 'my-ruby-git') - # # or: - # git = Git.clone('https://github.com/ruby-git/ruby-git.git', path: 'my-ruby-git') - # - # @example Create a bare repository in the directory `ruby-git.git` - # git = Git.clone('https://github.com/ruby-git/ruby-git.git', bare: true) - # - # @example Clone a repository and set a single config option - # git = Git.clone( - # 'https://github.com/ruby-git/ruby-git.git', - # config: 'submodule.recurse=true' - # ) - # - # @example Clone a repository and set multiple config options - # git = Git.clone( - # 'https://github.com/ruby-git/ruby-git.git', - # config: ['user.name=John Doe', 'user.email=john@doe.com'] - # ) - # - # @return [Git::Base] an object that can execute git commands in the context - # of the cloned local working copy or cloned repository. - # - def self.clone(repository_url, directory = nil, options = {}) - clone_to_options = options.select { |key, _value| %i[bare mirror].include?(key) } - directory ||= Git::URL.clone_to(repository_url, **clone_to_options) - Base.clone(repository_url, directory, options) - end - - # Returns the name of the default branch of the given repository - # - # @example with a URI string - # Git.default_branch('https://github.com/ruby-git/ruby-git') # => 'master' - # Git.default_branch('https://github.com/rspec/rspec-core') # => 'main' - # - # @example with a URI object - # repository_uri = URI('https://github.com/ruby-git/ruby-git') - # Git.default_branch(repository_uri) # => 'master' - # - # @example with a local repository - # Git.default_branch('.') # => 'master' - # - # @example with a local repository Pathname - # repository_path = Pathname('.') - # Git.default_branch(repository_path) # => 'master' - # - # @example with the logging option - # logger = Logger.new(STDOUT, level: Logger::INFO) - # Git.default_branch('.', log: logger) # => 'master' - # I, [2022-04-13T16:01:33.221596 #18415] INFO -- : git '-c' 'core.quotePath=true' '-c' 'color.ui=false' ls-remote '--symref' '--' '.' 'HEAD' 2>&1 - # - # @param repository [URI, Pathname, String] The (possibly remote) repository to get the default branch name for - # - # See [GIT URLS](https://git-scm.com/docs/git-clone#_git_urls_a_id_urls_a) - # for more information. - # - # @param [Hash] options The options for this command (see list of valid - # options below) - # - # @option options [Logger] :log A logger to use for Git operations. Git - # commands are logged at the `:info` level. Additional logging is done - # at the `:debug` level. - # - # @return [String] the name of the default branch - # - def self.default_branch(repository, options = {}) - Base.repository_default_branch(repository, options) - end - - # Export the current HEAD (or a branch, if options[:branch] - # is specified) into the +name+ directory, then remove all traces of git from the - # directory. - # - # See +clone+ for options. Does not obey the :remote option, - # since the .git info will be deleted anyway; always uses the default - # remote, 'origin.' - def self.export(repository, name, options = {}) - options.delete(:remote) - repo = clone(repository, name, {:depth => 1}.merge(options)) - repo.checkout("origin/#{options[:branch]}") if options[:branch] - FileUtils.rm_r File.join(repo.dir.to_s, '.git') - end - - # Same as g.config, but forces it to be at the global level - # - #g.config('user.name', 'Scott Chacon') # sets value - #g.config('user.email', 'email@email.com') # sets value - #g.config('user.name') # returns 'Scott Chacon' - #g.config # returns whole config hash - def self.global_config(name = nil, value = nil) - lib = Git::Lib.new(nil, nil) - if(name && value) - # set value - lib.global_config_set(name, value) - elsif (name) - # return value - lib.global_config_get(name) - else - # return hash - lib.global_config_list - end - end - - # Create an empty Git repository or reinitialize an existing Git repository - # - # @param [Pathname] directory If the `:bare` option is NOT given or is not - # `true`, the repository will be created in `"#{directory}/.git"`. - # Otherwise, the repository is created in `"#{directory}"`. - # - # All directories along the path to `directory` are created if they do not exist. - # - # A relative path is referenced from the current working directory of the process - # and converted to an absolute path using - # [File.expand_path](https://www.rubydoc.info/stdlib/core/File.expand_path). - # - # @param [Hash] options The options for this command (see list of valid - # options below) - # - # @option options [Boolean] :bare Instead of creating a repository at - # `"#{directory}/.git"`, create a bare repository at `"#{directory}"`. - # See [what is a bare repository?](https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-aiddefbarerepositoryabarerepository). - # - # @option options [String] :initial_branch Use the specified name for the - # initial branch in the newly created repository. - # - # @option options [Pathname] :repository the path to put the newly initialized - # Git repository. The default for non-bare repository is `"#{directory}/.git"`. - # - # A relative path is referenced from the current working directory of the process - # and converted to an absolute path using - # [File.expand_path](https://www.rubydoc.info/stdlib/core/File.expand_path). - # - # @option options [Logger] :log A logger to use for Git operations. Git - # commands are logged at the `:info` level. Additional logging is done - # at the `:debug` level. - # - # @return [Git::Base] an object that can execute git commands in the context - # of the newly initialized repository - # - # @example Initialize a repository in the current directory - # git = Git.init - # - # @example Initialize a repository in some other directory - # git = Git.init '~/code/ruby-git' - # - # @example Initialize a bare repository - # git = Git.init '~/code/ruby-git.git', bare: true - # - # @example Initialize a repository in a non-default location (outside of the working copy) - # git = Git.init '~/code/ruby-git', repository: '~/code/ruby-git.git' - # - # @see https://git-scm.com/docs/git-init git init - # - def self.init(directory = '.', options = {}) - Base.init(directory, options) - end - - # returns a Hash containing information about the references - # of the target repository - # - # options - # :refs - # - # @param [String|NilClass] location the target repository location or nil for '.' - # @return [{String=>Hash}] the available references of the target repo. - def self.ls_remote(location = nil, options = {}) - Git::Lib.new.ls_remote(location, options) - end - - # Open a an existing Git working directory - # - # Git.open will most likely be the most common way to create - # a git reference, referring to an existing working directory. - # - # If not provided in the options, the library will assume - # the repository and index are in the default places (`.git/`, `.git/index`). - # - # @example Open the Git working directory in the current directory - # git = Git.open - # - # @example Open a Git working directory in some other directory - # git = Git.open('~/Projects/ruby-git') - # - # @example Use a logger to see what is going on - # logger = Logger.new(STDOUT) - # git = Git.open('~/Projects/ruby-git', log: logger) - # - # @example Open a working copy whose repository is in a non-standard directory - # git = Git.open('~/Projects/ruby-git', repository: '~/Project/ruby-git.git') - # - # @param [Pathname] working_dir the path to the working directory to use - # for git commands. - # - # A relative path is referenced from the current working directory of the process - # and converted to an absolute path using - # [File.expand_path](https://www.rubydoc.info/stdlib/core/File.expand_path). - # - # @param [Hash] options The options for this command (see list of valid - # options below) - # - # @option options [Pathname] :repository used to specify a non-standard path to - # the repository directory. The default is `"#{working_dir}/.git"`. - # - # @option options [Pathname] :index used to specify a non-standard path to an - # index file. The default is `"#{working_dir}/.git/index"` - # - # @option options [Logger] :log A logger to use for Git operations. Git - # commands are logged at the `:info` level. Additional logging is done - # at the `:debug` level. - # - # @return [Git::Base] an object that can execute git commands in the context - # of the opened working copy - # - def self.open(working_dir, options = {}) - Base.open(working_dir, options) - end -end diff --git a/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/author.rb b/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/author.rb deleted file mode 100644 index 86d33047..00000000 --- a/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/author.rb +++ /dev/null @@ -1,14 +0,0 @@ -module Git - class Author - attr_accessor :name, :email, :date - - def initialize(author_string) - if m = /(.*?) <(.*?)> (\d+) (.*)/.match(author_string) - @name = m[1] - @email = m[2] - @date = Time.at(m[3].to_i) - end - end - - end -end diff --git a/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/base.rb b/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/base.rb deleted file mode 100644 index 93dcf16e..00000000 --- a/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/base.rb +++ /dev/null @@ -1,711 +0,0 @@ -require 'git/base/factory' -require 'logger' -require 'open3' - -module Git - # Git::Base is the main public interface for interacting with Git commands. - # - # Instead of creating a Git::Base directly, obtain a Git::Base instance by - # calling one of the follow {Git} class methods: {Git.open}, {Git.init}, - # {Git.clone}, or {Git.bare}. - # - class Base - include Git::Base::Factory - - # (see Git.bare) - def self.bare(git_dir, options = {}) - normalize_paths(options, default_repository: git_dir, bare: true) - self.new(options) - end - - # (see Git.clone) - def self.clone(repository_url, directory, options = {}) - new_options = Git::Lib.new(nil, options[:log]).clone(repository_url, directory, options) - normalize_paths(new_options, bare: options[:bare] || options[:mirror]) - new(new_options) - end - - # (see Git.default_branch) - def self.repository_default_branch(repository, options = {}) - Git::Lib.new(nil, options[:log]).repository_default_branch(repository) - end - - # Returns (and initialize if needed) a Git::Config instance - # - # @return [Git::Config] the current config instance. - def self.config - @@config ||= Config.new - end - - # (see Git.init) - def self.init(directory = '.', options = {}) - normalize_paths(options, default_working_directory: directory, default_repository: directory, bare: options[:bare]) - - init_options = { - :bare => options[:bare], - :initial_branch => options[:initial_branch] - } - - directory = options[:bare] ? options[:repository] : options[:working_directory] - FileUtils.mkdir_p(directory) unless File.exist?(directory) - - # TODO: this dance seems awkward: this creates a Git::Lib so we can call - # init so we can create a new Git::Base which in turn (ultimately) - # creates another/different Git::Lib. - # - # TODO: maybe refactor so this Git::Bare.init does this: - # self.new(opts).init(init_opts) and move all/some of this code into - # Git::Bare#init. This way the init method can be called on any - # repository you have a Git::Base instance for. This would not - # change the existing interface (other than adding to it). - # - Git::Lib.new(options).init(init_options) - - self.new(options) - end - - def self.root_of_worktree(working_dir) - result = working_dir - status = nil - - git_cmd = "#{Git::Base.config.binary_path} -c core.quotePath=true -c color.ui=false rev-parse --show-toplevel 2>&1" - result, status = Open3.capture2(git_cmd, chdir: File.expand_path(working_dir)) - result = result.chomp - - raise ArgumentError, "'#{working_dir}' is not in a git working tree" unless status.success? - result - end - - # (see Git.open) - def self.open(working_dir, options = {}) - raise ArgumentError, "'#{working_dir}' is not a directory" unless Dir.exist?(working_dir) - - working_dir = root_of_worktree(working_dir) unless options[:repository] - - normalize_paths(options, default_working_directory: working_dir) - - self.new(options) - end - - # Create an object that executes Git commands in the context of a working - # copy or a bare repository. - # - # @param [Hash] options The options for this command (see list of valid - # options below) - # - # @option options [Pathname] :working_dir the path to the root of the working - # directory. Should be `nil` if executing commands on a bare repository. - # - # @option options [Pathname] :repository used to specify a non-standard path to - # the repository directory. The default is `"#{working_dir}/.git"`. - # - # @option options [Pathname] :index used to specify a non-standard path to an - # index file. The default is `"#{working_dir}/.git/index"` - # - # @option options [Logger] :log A logger to use for Git operations. Git - # commands are logged at the `:info` level. Additional logging is done - # at the `:debug` level. - # - # @return [Git::Base] an object that can execute git commands in the context - # of the opened working copy or bare repository - # - def initialize(options = {}) - if working_dir = options[:working_directory] - options[:repository] ||= File.join(working_dir, '.git') - options[:index] ||= File.join(options[:repository], 'index') - end - @logger = (options[:log] || Logger.new(nil)) - @logger.info("Starting Git") - - @working_directory = options[:working_directory] ? Git::WorkingDirectory.new(options[:working_directory]) : nil - @repository = options[:repository] ? Git::Repository.new(options[:repository]) : nil - @index = options[:index] ? Git::Index.new(options[:index], false) : nil - end - - # changes current working directory for a block - # to the git working directory - # - # example - # @git.chdir do - # # write files - # @git.add - # @git.commit('message') - # end - def chdir # :yields: the Git::Path - Dir.chdir(dir.path) do - yield dir.path - end - end - - #g.config('user.name', 'Scott Chacon') # sets value - #g.config('user.email', 'email@email.com') # sets value - #g.config('user.email', 'email@email.com', file: 'path/to/custom/config) # sets value in file - #g.config('user.name') # returns 'Scott Chacon' - #g.config # returns whole config hash - def config(name = nil, value = nil, options = {}) - if name && value - # set value - lib.config_set(name, value, options) - elsif name - # return value - lib.config_get(name) - else - # return hash - lib.config_list - end - end - - # returns a reference to the working directory - # @git.dir.path - # @git.dir.writeable? - def dir - @working_directory - end - - # returns reference to the git index file - def index - @index - end - - # returns reference to the git repository directory - # @git.dir.path - def repo - @repository - end - - # returns the repository size in bytes - def repo_size - Dir.glob(File.join(repo.path, '**', '*'), File::FNM_DOTMATCH).reject do |f| - f.include?('..') - end.map do |f| - File.expand_path(f) - end.uniq.map do |f| - File.stat(f).size.to_i - end.reduce(:+) - end - - def set_index(index_file, check = true) - @lib = nil - @index = Git::Index.new(index_file.to_s, check) - end - - def set_working(work_dir, check = true) - @lib = nil - @working_directory = Git::WorkingDirectory.new(work_dir.to_s, check) - end - - # returns +true+ if the branch exists locally - def is_local_branch?(branch) - branch_names = self.branches.local.map {|b| b.name} - branch_names.include?(branch) - end - - # returns +true+ if the branch exists remotely - def is_remote_branch?(branch) - branch_names = self.branches.remote.map {|b| b.name} - branch_names.include?(branch) - end - - # returns +true+ if the branch exists - def is_branch?(branch) - branch_names = self.branches.map {|b| b.name} - branch_names.include?(branch) - end - - # this is a convenience method for accessing the class that wraps all the - # actual 'git' forked system calls. At some point I hope to replace the Git::Lib - # class with one that uses native methods or libgit C bindings - def lib - @lib ||= Git::Lib.new(self, @logger) - end - - # Run a grep for 'string' on the HEAD of the git repository - # - # @example Limit grep's scope by calling grep() from a specific object: - # git.object("v2.3").grep('TODO') - # - # @example Using grep results: - # git.grep("TODO").each do |sha, arr| - # puts "in blob #{sha}:" - # arr.each do |line_no, match_string| - # puts "\t line #{line_no}: '#{match_string}'" - # end - # end - # - # @param string [String] the string to search for - # @param path_limiter [String, Array] a path or array of paths to limit the search to or nil for no limit - # @param opts [Hash] options to pass to the underlying `git grep` command - # - # @option opts [Boolean] :ignore_case (false) ignore case when matching - # @option opts [Boolean] :invert_match (false) select non-matching lines - # @option opts [Boolean] :extended_regexp (false) use extended regular expressions - # @option opts [String] :object (HEAD) the object to search from - # - # @return [Hash] a hash of arrays - # ```Ruby - # { - # 'tree-ish1' => [[line_no1, match_string1], ...], - # 'tree-ish2' => [[line_no1, match_string1], ...], - # ... - # } - # ``` - # - def grep(string, path_limiter = nil, opts = {}) - self.object('HEAD').grep(string, path_limiter, opts) - end - - # updates the repository index using the working directory content - # - # @example - # git.add - # git.add('path/to/file') - # git.add(['path/to/file1','path/to/file2']) - # git.add(:all => true) - # - # options: - # :all => true - # - # @param [String,Array] paths files paths to be added (optional, default='.') - # @param [Hash] options - # @option options [boolean] :all - # Update the index not only where the working tree has a file matching - # but also where the index already has an entry. - # See [the --all option to git-add](https://git-scm.com/docs/git-add#Documentation/git-add.txt--A) - # for more details. - # - def add(paths = '.', **options) - self.lib.add(paths, options) - end - - # removes file(s) from the git repository - def rm(path = '.', opts = {}) - self.lib.rm(path, opts) - end - - alias remove rm - - # resets the working directory to the provided commitish - def reset(commitish = nil, opts = {}) - self.lib.reset(commitish, opts) - end - - # resets the working directory to the commitish with '--hard' - def reset_hard(commitish = nil, opts = {}) - opts = {:hard => true}.merge(opts) - self.lib.reset(commitish, opts) - end - - # cleans the working directory - # - # options: - # :force - # :d - # :ff - # - def clean(opts = {}) - self.lib.clean(opts) - end - - # returns the most recent tag that is reachable from a commit - # - # options: - # :all - # :tags - # :contains - # :debug - # :exact_match - # :dirty - # :abbrev - # :candidates - # :long - # :always - # :match - # - def describe(committish=nil, opts={}) - self.lib.describe(committish, opts) - end - - # reverts the working directory to the provided commitish. - # Accepts a range, such as comittish..HEAD - # - # options: - # :no_edit - # - def revert(commitish = nil, opts = {}) - self.lib.revert(commitish, opts) - end - - # commits all pending changes in the index file to the git repository - # - # options: - # :all - # :allow_empty - # :amend - # :author - # - def commit(message, opts = {}) - self.lib.commit(message, opts) - end - - # commits all pending changes in the index file to the git repository, - # but automatically adds all modified files without having to explicitly - # calling @git.add() on them. - def commit_all(message, opts = {}) - opts = {:add_all => true}.merge(opts) - self.lib.commit(message, opts) - end - - # checks out a branch as the new git working directory - def checkout(*args, **options) - self.lib.checkout(*args, **options) - end - - # checks out an old version of a file - def checkout_file(version, file) - self.lib.checkout_file(version,file) - end - - # fetches changes from a remote branch - this does not modify the working directory, - # it just gets the changes from the remote if there are any - def fetch(remote = 'origin', opts = {}) - if remote.is_a?(Hash) - opts = remote - remote = nil - end - self.lib.fetch(remote, opts) - end - - # Push changes to a remote repository - # - # @overload push(remote = nil, branch = nil, options = {}) - # @param remote [String] the remote repository to push to - # @param branch [String] the branch to push - # @param options [Hash] options to pass to the push command - # - # @option opts [Boolean] :mirror (false) Push all refs under refs/heads/, refs/tags/ and refs/remotes/ - # @option opts [Boolean] :delete (false) Delete refs that don't exist on the remote - # @option opts [Boolean] :force (false) Force updates - # @option opts [Boolean] :tags (false) Push all refs under refs/tags/ - # @option opts [Array, String] :push_options (nil) Push options to transmit - # - # @return [Void] - # - # @raise [Git::FailedError] if the push fails - # @raise [ArgumentError] if a branch is given without a remote - # - def push(*args, **options) - self.lib.push(*args, **options) - end - - # merges one or more branches into the current working branch - # - # you can specify more than one branch to merge by passing an array of branches - def merge(branch, message = 'merge', opts = {}) - self.lib.merge(branch, message, opts) - end - - # iterates over the files which are unmerged - def each_conflict(&block) # :yields: file, your_version, their_version - self.lib.conflicts(&block) - end - - # pulls the given branch from the given remote into the current branch - # - # @git.pull # pulls from origin/master - # @git.pull('upstream') # pulls from upstream/master - # @git.pull('upstream', 'develope') # pulls from upstream/develop - # - def pull(remote = nil, branch = nil) - self.lib.pull(remote, branch) - end - - # returns an array of Git:Remote objects - def remotes - self.lib.remotes.map { |r| Git::Remote.new(self, r) } - end - - # adds a new remote to this repository - # url can be a git url or a Git::Base object if it's a local reference - # - # @git.add_remote('scotts_git', 'git://repo.or.cz/rubygit.git') - # @git.fetch('scotts_git') - # @git.merge('scotts_git/master') - # - # Options: - # :fetch => true - # :track => - def add_remote(name, url, opts = {}) - url = url.repo.path if url.is_a?(Git::Base) - self.lib.remote_add(name, url, opts) - Git::Remote.new(self, name) - end - - # sets the url for a remote - # url can be a git url or a Git::Base object if it's a local reference - # - # @git.set_remote_url('scotts_git', 'git://repo.or.cz/rubygit.git') - # - def set_remote_url(name, url) - url = url.repo.path if url.is_a?(Git::Base) - self.lib.remote_set_url(name, url) - Git::Remote.new(self, name) - end - - # removes a remote from this repository - # - # @git.remove_remote('scott_git') - def remove_remote(name) - self.lib.remote_remove(name) - end - - # returns an array of all Git::Tag objects for this repository - def tags - self.lib.tags.map { |r| tag(r) } - end - - # Creates a new git tag (Git::Tag) - # - # @example - # repo.add_tag('tag_name', object_reference) - # repo.add_tag('tag_name', object_reference, {:options => 'here'}) - # repo.add_tag('tag_name', {:options => 'here'}) - # - # @param [String] name The name of the tag to add - # @param [Hash] options Opstions to pass to `git tag`. - # See [git-tag](https://git-scm.com/docs/git-tag) for more details. - # @option options [boolean] :annotate Make an unsigned, annotated tag object - # @option options [boolean] :a An alias for the `:annotate` option - # @option options [boolean] :d Delete existing tag with the given names. - # @option options [boolean] :f Replace an existing tag with the given name (instead of failing) - # @option options [String] :message Use the given tag message - # @option options [String] :m An alias for the `:message` option - # @option options [boolean] :s Make a GPG-signed tag. - # - def add_tag(name, *options) - self.lib.tag(name, *options) - self.tag(name) - end - - # deletes a tag - def delete_tag(name) - self.lib.tag(name, {:d => true}) - end - - # creates an archive file of the given tree-ish - def archive(treeish, file = nil, opts = {}) - self.object(treeish).archive(file, opts) - end - - # repacks the repository - def repack - self.lib.repack - end - - def gc - self.lib.gc - end - - def apply(file) - if File.exist?(file) - self.lib.apply(file) - end - end - - def apply_mail(file) - self.lib.apply_mail(file) if File.exist?(file) - end - - # Shows objects - # - # @param [String|NilClass] objectish the target object reference (nil == HEAD) - # @param [String|NilClass] path the path of the file to be shown - # @return [String] the object information - def show(objectish=nil, path=nil) - self.lib.show(objectish, path) - end - - ## LOWER LEVEL INDEX OPERATIONS ## - - def with_index(new_index) # :yields: new_index - old_index = @index - set_index(new_index, false) - return_value = yield @index - set_index(old_index) - return_value - end - - def with_temp_index &blk - # Workaround for JRUBY, since they handle the TempFile path different. - # MUST be improved to be safer and OS independent. - if RUBY_PLATFORM == 'java' - temp_path = "/tmp/temp-index-#{(0...15).map{ ('a'..'z').to_a[rand(26)] }.join}" - else - tempfile = Tempfile.new('temp-index') - temp_path = tempfile.path - tempfile.close - tempfile.unlink - end - - with_index(temp_path, &blk) - end - - def checkout_index(opts = {}) - self.lib.checkout_index(opts) - end - - def read_tree(treeish, opts = {}) - self.lib.read_tree(treeish, opts) - end - - def write_tree - self.lib.write_tree - end - - def write_and_commit_tree(opts = {}) - tree = write_tree - commit_tree(tree, opts) - end - - def update_ref(branch, commit) - branch(branch).update_ref(commit) - end - - - def ls_files(location=nil) - self.lib.ls_files(location) - end - - def with_working(work_dir) # :yields: the Git::WorkingDirectory - return_value = false - old_working = @working_directory - set_working(work_dir) - Dir.chdir work_dir do - return_value = yield @working_directory - end - set_working(old_working) - return_value - end - - def with_temp_working &blk - tempfile = Tempfile.new("temp-workdir") - temp_dir = tempfile.path - tempfile.close - tempfile.unlink - Dir.mkdir(temp_dir, 0700) - with_working(temp_dir, &blk) - end - - # runs git rev-parse to convert the objectish to a full sha - # - # @example - # git.revparse("HEAD^^") - # git.revparse('v2.4^{tree}') - # git.revparse('v2.4:/doc/index.html') - # - def revparse(objectish) - self.lib.revparse(objectish) - end - - def ls_tree(objectish) - self.lib.ls_tree(objectish) - end - - def cat_file(objectish) - self.lib.object_contents(objectish) - end - - # returns the name of the branch the working directory is currently on - def current_branch - self.lib.branch_current - end - - private - - # Normalize options before they are sent to Git::Base.new - # - # Updates the options parameter by setting appropriate values for the following keys: - # * options[:working_directory] - # * options[:repository] - # * options[:index] - # - # All three values will be set to absolute paths. An exception is that - # :working_directory will be set to nil if bare is true. - # - private_class_method def self.normalize_paths( - options, default_working_directory: nil, default_repository: nil, bare: false - ) - normalize_working_directory(options, default: default_working_directory, bare: bare) - normalize_repository(options, default: default_repository, bare: bare) - normalize_index(options) - end - - # Normalize options[:working_directory] - # - # If working with a bare repository, set to `nil`. - # Otherwise, set to the first non-nil value of: - # 1. `options[:working_directory]`, - # 2. the `default` parameter, or - # 3. the current working directory - # - # Finally, if options[:working_directory] is a relative path, convert it to an absoluite - # path relative to the current directory. - # - private_class_method def self.normalize_working_directory(options, default:, bare: false) - working_directory = - if bare - nil - else - File.expand_path(options[:working_directory] || default || Dir.pwd) - end - - options[:working_directory] = working_directory - end - - # Normalize options[:repository] - # - # If working with a bare repository, set to the first non-nil value out of: - # 1. `options[:repository]` - # 2. the `default` parameter - # 3. the current working directory - # - # Otherwise, set to the first non-nil value of: - # 1. `options[:repository]` - # 2. `.git` - # - # Next, if options[:repository] refers to a *file* and not a *directory*, set - # options[:repository] to the contents of that file. This is the case when - # working with a submodule or a secondary working tree (created with git worktree - # add). In these cases the repository is actually contained/nested within the - # parent's repository directory. - # - # Finally, if options[:repository] is a relative path, convert it to an absolute - # path relative to: - # 1. the current directory if working with a bare repository or - # 2. the working directory if NOT working with a bare repository - # - private_class_method def self.normalize_repository(options, default:, bare: false) - repository = - if bare - File.expand_path(options[:repository] || default || Dir.pwd) - else - File.expand_path(options[:repository] || '.git', options[:working_directory]) - end - - if File.file?(repository) - repository = File.expand_path(File.open(repository).read[8..-1].strip, options[:working_directory]) - end - - options[:repository] = repository - end - - # Normalize options[:index] - # - # If options[:index] is a relative directory, convert it to an absolute - # directory relative to the repository directory - # - private_class_method def self.normalize_index(options) - index = File.expand_path(options[:index] || 'index', options[:repository]) - options[:index] = index - end - end -end diff --git a/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/base/factory.rb b/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/base/factory.rb deleted file mode 100644 index 25cb1090..00000000 --- a/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/base/factory.rb +++ /dev/null @@ -1,99 +0,0 @@ -module Git - - class Base - - module Factory - # @return [Git::Branch] an object for branch_name - def branch(branch_name = self.current_branch) - Git::Branch.new(self, branch_name) - end - - # @return [Git::Branches] a collection of all the branches in the repository. - # Each branch is represented as a {Git::Branch}. - def branches - Git::Branches.new(self) - end - - # returns a Git::Worktree object for dir, commitish - def worktree(dir, commitish = nil) - Git::Worktree.new(self, dir, commitish) - end - - # returns a Git::worktrees object of all the Git::Worktrees - # objects for this repo - def worktrees - Git::Worktrees.new(self) - end - - # @return [Git::Object::Commit] a commit object - def commit_tree(tree = nil, opts = {}) - Git::Object::Commit.new(self, self.lib.commit_tree(tree, opts)) - end - - # @return [Git::Diff] a Git::Diff object - def diff(objectish = 'HEAD', obj2 = nil) - Git::Diff.new(self, objectish, obj2) - end - - # @return [Git::Object] a Git object - def gblob(objectish) - Git::Object.new(self, objectish, 'blob') - end - - # @return [Git::Object] a Git object - def gcommit(objectish) - Git::Object.new(self, objectish, 'commit') - end - - # @return [Git::Object] a Git object - def gtree(objectish) - Git::Object.new(self, objectish, 'tree') - end - - # @return [Git::Log] a log with the specified number of commits - def log(count = 30) - Git::Log.new(self, count) - end - - # returns a Git::Object of the appropriate type - # you can also call @git.gtree('tree'), but that's - # just for readability. If you call @git.gtree('HEAD') it will - # still return a Git::Object::Commit object. - # - # object calls a factory method that will run a rev-parse - # on the objectish and determine the type of the object and return - # an appropriate object for that type - # - # @return [Git::Object] an instance of the appropriate type of Git::Object - def object(objectish) - Git::Object.new(self, objectish) - end - - # @return [Git::Remote] a remote of the specified name - def remote(remote_name = 'origin') - Git::Remote.new(self, remote_name) - end - - # @return [Git::Status] a status object - def status - Git::Status.new(self) - end - - # @return [Git::Object::Tag] a tag object - def tag(tag_name) - Git::Object.new(self, tag_name, 'tag', true) - end - - # Find as good common ancestors as possible for a merge - # example: g.merge_base('master', 'some_branch', 'some_sha', octopus: true) - # - # @return [Array] a collection of common ancestors - def merge_base(*args) - shas = self.lib.merge_base(*args) - shas.map { |sha| gcommit(sha) } - end - end - - end - -end diff --git a/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/branch.rb b/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/branch.rb deleted file mode 100644 index f6780b03..00000000 --- a/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/branch.rb +++ /dev/null @@ -1,143 +0,0 @@ -require 'git/path' - -module Git - class Branch < Path - attr_accessor :full, :remote, :name - - def initialize(base, name) - @full = name - @base = base - @gcommit = nil - @stashes = nil - @remote, @name = parse_name(name) - end - - def gcommit - @gcommit ||= @base.gcommit(@full) - @gcommit - end - - def stashes - @stashes ||= Git::Stashes.new(@base) - end - - def checkout - check_if_create - @base.checkout(@full) - end - - def archive(file, opts = {}) - @base.lib.archive(@full, file, opts) - end - - # g.branch('new_branch').in_branch do - # # create new file - # # do other stuff - # return true # auto commits and switches back - # end - def in_branch(message = 'in branch work') - old_current = @base.lib.branch_current - checkout - if yield - @base.commit_all(message) - else - @base.reset_hard - end - @base.checkout(old_current) - end - - def create - check_if_create - end - - def delete - @base.lib.branch_delete(@name) - end - - def current - determine_current - end - - def contains?(commit) - !@base.lib.branch_contains(commit, self.name).empty? - end - - def merge(branch = nil, message = nil) - if branch - in_branch do - @base.merge(branch, message) - false - end - # merge a branch into this one - else - # merge this branch into the current one - @base.merge(@name) - end - end - - def update_ref(commit) - if @remote - @base.lib.update_ref("refs/remotes/#{@remote.name}/#{@name}", commit) - else - @base.lib.update_ref("refs/heads/#{@name}", commit) - end - end - - def to_a - [@full] - end - - def to_s - @full - end - - private - - def check_if_create - @base.lib.branch_new(@name) rescue nil - end - - def determine_current - @base.lib.branch_current == @name - end - - BRANCH_NAME_REGEXP = %r{ - ^ - # Optional 'refs/remotes/' at the beggining to specify a remote tracking branch - # with a . is nil if not present. - (?: - (?:(?:refs/)?remotes/)(?[^/]+)/ - )? - (?.*) - $ - }x - - # Given a full branch name return an Array containing the remote and branch names. - # - # Removes 'remotes' from the beggining of the name (if present). - # Takes the second part (splittign by '/') as the remote name. - # Takes the rest as the repo name (can also hold one or more '/'). - # - # Example: - # # local branches - # parse_name('master') #=> [nil, 'master'] - # parse_name('origin/master') #=> [nil, 'origin/master'] - # parse_name('origin/master/v2') #=> [nil, 'origin/master'] - # - # # remote branches - # parse_name('remotes/origin/master') #=> ['origin', 'master'] - # parse_name('remotes/origin/master/v2') #=> ['origin', 'master/v2'] - # parse_name('refs/remotes/origin/master') #=> ['origin', 'master'] - # parse_name('refs/remotes/origin/master/v2') #=> ['origin', 'master/v2'] - # - # param [String] name branch full name. - # return [] an Array containing the remote and branch names. - def parse_name(name) - # Expect this will always match - match = name.match(BRANCH_NAME_REGEXP) - remote = match[:remote_name] ? Git::Remote.new(@base, match[:remote_name]) : nil - branch_name = match[:branch_name] - [ remote, branch_name ] - end - end -end diff --git a/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/branches.rb b/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/branches.rb deleted file mode 100644 index fc871db8..00000000 --- a/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/branches.rb +++ /dev/null @@ -1,71 +0,0 @@ -module Git - - # object that holds all the available branches - class Branches - - include Enumerable - - def initialize(base) - @branches = {} - - @base = base - - @base.lib.branches_all.each do |b| - @branches[b[0]] = Git::Branch.new(@base, b[0]) - end - end - - def local - self.select { |b| !b.remote } - end - - def remote - self.select { |b| b.remote } - end - - # array like methods - - def size - @branches.size - end - - def each(&block) - @branches.values.each(&block) - end - - # Returns the target branch - # - # Example: - # Given (git branch -a): - # master - # remotes/working/master - # - # g.branches['master'].full #=> 'master' - # g.branches['working/master'].full => 'remotes/working/master' - # g.branches['remotes/working/master'].full => 'remotes/working/master' - # - # @param [#to_s] branch_name the target branch name. - # @return [Git::Branch] the target branch. - def [](branch_name) - @branches.values.inject(@branches) do |branches, branch| - branches[branch.full] ||= branch - - # This is how Git (version 1.7.9.5) works. - # Lets you ignore the 'remotes' if its at the beginning of the branch full name (even if is not a real remote branch). - branches[branch.full.sub('remotes/', '')] ||= branch if branch.full =~ /^remotes\/.+/ - - branches - end[branch_name.to_s] - end - - def to_s - out = '' - @branches.each do |k, b| - out << (b.current ? '* ' : ' ') << b.to_s << "\n" - end - out - end - - end - -end diff --git a/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/command_line_result.rb b/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/command_line_result.rb deleted file mode 100644 index 9194a292..00000000 --- a/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/command_line_result.rb +++ /dev/null @@ -1,86 +0,0 @@ -# frozen_string_literal: true - -module Git - # The result of running a git command - # - # This object stores the Git command executed and its status, stdout, and stderr. - # - # @api public - # - class CommandLineResult - # Create a CommandLineResult object - # - # @example - # `true` - # git_cmd = %w[git version] - # status = $? - # stdout = "git version 2.39.1\n" - # stderr = "" - # result = Git::CommandLineResult.new(git_cmd, status, stdout, stderr) - # - # @param git_cmd [Array] the git command that was executed - # @param status [Process::Status] the status of the process - # @param stdout [String] the output of the process - # @param stderr [String] the error output of the process - # - def initialize(git_cmd, status, stdout, stderr) - @git_cmd = git_cmd - @status = status - @stdout = stdout - @stderr = stderr - end - - # @attribute [r] git_cmd - # - # The git command that was executed - # - # @example - # git_cmd = %w[git version] - # result = Git::CommandLineResult.new(git_cmd, $?, "", "") - # result.git_cmd #=> ["git", "version"] - # - # @return [Array] - # - attr_reader :git_cmd - - # @attribute [r] status - # - # The status of the process - # - # @example - # `true` - # status = $? - # result = Git::CommandLineResult.new(status, "", "") - # result.status #=> # - # - # @return [Process::Status] - # - attr_reader :status - - # @attribute [r] stdout - # - # The output of the process - # - # @example - # stdout = "git version 2.39.1\n" - # result = Git::CommandLineResult.new($?, stdout, "") - # result.stdout #=> "git version 2.39.1\n" - # - # @return [String] - # - attr_reader :stdout - - # @attribute [r] stderr - # - # The error output of the process - # - # @example - # stderr = "Tag not found\n" - # result = Git::CommandLineResult.new($?, "", stderr) - # result.stderr #=> "Tag not found\n" - # - # @return [String] - # - attr_reader :stderr - end -end diff --git a/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/config.rb b/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/config.rb deleted file mode 100644 index 4fefe454..00000000 --- a/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/config.rb +++ /dev/null @@ -1,22 +0,0 @@ -module Git - - class Config - - attr_writer :binary_path, :git_ssh - - def initialize - @binary_path = nil - @git_ssh = nil - end - - def binary_path - @binary_path || ENV['GIT_PATH'] && File.join(ENV['GIT_PATH'], 'git') || 'git' - end - - def git_ssh - @git_ssh || ENV['GIT_SSH'] - end - - end - -end diff --git a/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/diff.rb b/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/diff.rb deleted file mode 100644 index d40ddce4..00000000 --- a/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/diff.rb +++ /dev/null @@ -1,155 +0,0 @@ -module Git - - # object that holds the last X commits on given branch - class Diff - include Enumerable - - def initialize(base, from = nil, to = nil) - @base = base - @from = from && from.to_s - @to = to && to.to_s - - @path = nil - @full_diff = nil - @full_diff_files = nil - @stats = nil - end - attr_reader :from, :to - - def name_status - cache_name_status - end - - def path(path) - @path = path - return self - end - - def size - cache_stats - @stats[:total][:files] - end - - def lines - cache_stats - @stats[:total][:lines] - end - - def deletions - cache_stats - @stats[:total][:deletions] - end - - def insertions - cache_stats - @stats[:total][:insertions] - end - - def stats - cache_stats - @stats - end - - # if file is provided and is writable, it will write the patch into the file - def patch(file = nil) - cache_full - @full_diff - end - alias_method :to_s, :patch - - # enumerable methods - - def [](key) - process_full - @full_diff_files.assoc(key)[1] - end - - def each(&block) # :yields: each Git::DiffFile in turn - process_full - @full_diff_files.map { |file| file[1] }.each(&block) - end - - class DiffFile - attr_accessor :patch, :path, :mode, :src, :dst, :type - @base = nil - NIL_BLOB_REGEXP = /\A0{4,40}\z/.freeze - - def initialize(base, hash) - @base = base - @patch = hash[:patch] - @path = hash[:path] - @mode = hash[:mode] - @src = hash[:src] - @dst = hash[:dst] - @type = hash[:type] - @binary = hash[:binary] - end - - def binary? - !!@binary - end - - def blob(type = :dst) - if type == :src && !NIL_BLOB_REGEXP.match(@src) - @base.object(@src) - elsif !NIL_BLOB_REGEXP.match(@dst) - @base.object(@dst) - end - end - end - - private - - def cache_full - @full_diff ||= @base.lib.diff_full(@from, @to, {:path_limiter => @path}) - end - - def process_full - return if @full_diff_files - cache_full - @full_diff_files = process_full_diff - end - - def cache_stats - @stats ||= @base.lib.diff_stats(@from, @to, {:path_limiter => @path}) - end - - def cache_name_status - @name_status ||= @base.lib.diff_name_status(@from, @to, {:path => @path}) - end - - # break up @diff_full - def process_full_diff - defaults = { - :mode => '', - :src => '', - :dst => '', - :type => 'modified' - } - final = {} - current_file = nil - @full_diff.split("\n").each do |line| - if m = %r{\Adiff --git ("?)a/(.+?)\1 ("?)b/(.+?)\3\z}.match(line) - current_file = Git::EscapedPath.new(m[2]).unescape - final[current_file] = defaults.merge({:patch => line, :path => current_file}) - else - if m = /^index ([0-9a-f]{4,40})\.\.([0-9a-f]{4,40})( ......)*/.match(line) - final[current_file][:src] = m[1] - final[current_file][:dst] = m[2] - final[current_file][:mode] = m[3].strip if m[3] - end - if m = /^([[:alpha:]]*?) file mode (......)/.match(line) - final[current_file][:type] = m[1] - final[current_file][:mode] = m[2] - end - if m = /^Binary files /.match(line) - final[current_file][:binary] = true - end - final[current_file][:patch] << "\n" + line - end - end - final.map { |e| [e[0], DiffFile.new(@base, e[1])] } - end - - end -end diff --git a/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/encoding_utils.rb b/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/encoding_utils.rb deleted file mode 100644 index 332b5461..00000000 --- a/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/encoding_utils.rb +++ /dev/null @@ -1,33 +0,0 @@ -# frozen_string_literal: true - -require 'rchardet' - -module Git - # Method that can be used to detect and normalize string encoding - module EncodingUtils - def self.default_encoding - __ENCODING__.name - end - - def self.best_guess_encoding - # Encoding::ASCII_8BIT.name - Encoding::UTF_8.name - end - - def self.detected_encoding(str) - CharDet.detect(str)['encoding'] || best_guess_encoding - end - - def self.encoding_options - { invalid: :replace, undef: :replace } - end - - def self.normalize_encoding(str) - return str if str.valid_encoding? && str.encoding.name == default_encoding - - return str.encode(default_encoding, str.encoding, **encoding_options) if str.valid_encoding? - - str.encode(default_encoding, detected_encoding(str), **encoding_options) - end - end -end diff --git a/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/escaped_path.rb b/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/escaped_path.rb deleted file mode 100644 index 73e4f175..00000000 --- a/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/escaped_path.rb +++ /dev/null @@ -1,77 +0,0 @@ -# frozen_string_literal: true - -module Git - # Represents an escaped Git path string - # - # Git commands that output paths (e.g. ls-files, diff), will escape usual - # characters in the path with backslashes in the same way C escapes control - # characters (e.g. \t for TAB, \n for LF, \\ for backslash) or bytes with values - # larger than 0x80 (e.g. octal \302\265 for "micro" in UTF-8). - # - # @example - # Git::GitPath.new('\302\265').unescape # => "µ" - # - class EscapedPath - UNESCAPES = { - 'a' => 0x07, - 'b' => 0x08, - 't' => 0x09, - 'n' => 0x0a, - 'v' => 0x0b, - 'f' => 0x0c, - 'r' => 0x0d, - 'e' => 0x1b, - '\\' => 0x5c, - '"' => 0x22, - "'" => 0x27 - }.freeze - - attr_reader :path - - def initialize(path) - @path = path - end - - # Convert an escaped path to an unescaped path - def unescape - bytes = escaped_path_to_bytes(path) - str = bytes.pack('C*') - str.force_encoding(Encoding::UTF_8) - end - - private - - def extract_octal(path, index) - [path[index + 1..index + 3].to_i(8), 4] - end - - def extract_escape(path, index) - [UNESCAPES[path[index + 1]], 2] - end - - def extract_single_char(path, index) - [path[index].ord, 1] - end - - def next_byte(path, index) - if path[index] == '\\' && path[index + 1] >= '0' && path[index + 1] <= '7' - extract_octal(path, index) - elsif path[index] == '\\' && UNESCAPES.include?(path[index + 1]) - extract_escape(path, index) - else - extract_single_char(path, index) - end - end - - def escaped_path_to_bytes(path) - index = 0 - [].tap do |bytes| - while index < path.length - byte, chars_used = next_byte(path, index) - bytes << byte - index += chars_used - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/failed_error.rb b/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/failed_error.rb deleted file mode 100644 index 27aa6ed9..00000000 --- a/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/failed_error.rb +++ /dev/null @@ -1,53 +0,0 @@ -# frozen_string_literal: true - -require 'git/git_execute_error' - -module Git - # This error is raised when a git command fails - # - # The git command executed, status, stdout, and stderr are available from this - # object. The #message includes the git command, the status of the process, and - # the stderr of the process. - # - # @api public - # - class FailedError < Git::GitExecuteError - # Create a FailedError object - # - # Since this gem redirects stderr to stdout, the stdout of the process is used. - # - # @example - # `exit 1` # set $? appropriately for this example - # result = Git::CommandLineResult.new(%w[git status], $?, 'stdout', 'stderr') - # error = Git::FailedError.new(result) - # error.message #=> - # "[\"git\", \"status\"]\nstatus: pid 89784 exit 1\noutput: \"stdout\"" - # - # @param result [Git::CommandLineResult] the result of the git command including - # the git command, status, stdout, and stderr - # - def initialize(result) - super("#{result.git_cmd}\nstatus: #{result.status}\noutput: #{result.stdout.inspect}") - @result = result - end - - # @attribute [r] result - # - # The result of the git command including the git command and its status and output - # - # @example - # `exit 1` # set $? appropriately for this example - # result = Git::CommandLineResult.new(%w[git status], $?, 'stdout', 'stderr') - # error = Git::FailedError.new(result) - # error.result #=> - # #, - # @stderr="stderr", - # @stdout="stdout"> - # - # @return [Git::CommandLineResult] - # - attr_reader :result - end -end diff --git a/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/git_execute_error.rb b/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/git_execute_error.rb deleted file mode 100644 index 52d2c80f..00000000 --- a/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/git_execute_error.rb +++ /dev/null @@ -1,7 +0,0 @@ -# frozen_string_literal: true - -module Git - # This error is raised when a git command fails - # - class GitExecuteError < StandardError; end -end \ No newline at end of file diff --git a/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/index.rb b/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/index.rb deleted file mode 100644 index c27820dc..00000000 --- a/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/index.rb +++ /dev/null @@ -1,5 +0,0 @@ -module Git - class Index < Git::Path - - end -end diff --git a/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/lib.rb b/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/lib.rb deleted file mode 100644 index 06f3a2a1..00000000 --- a/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/lib.rb +++ /dev/null @@ -1,1328 +0,0 @@ -require 'git/failed_error' -require 'logger' -require 'tempfile' -require 'zlib' -require 'open3' - -module Git - class Lib - - @@semaphore = Mutex.new - - # The path to the Git working copy. The default is '"./.git"'. - # - # @return [Pathname] the path to the Git working copy. - # - # @see [Git working tree](https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-aiddefworkingtreeaworkingtree) - # - attr_reader :git_work_dir - - # The path to the Git repository directory. The default is - # `"#{git_work_dir}/.git"`. - # - # @return [Pathname] the Git repository directory. - # - # @see [Git repository](https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-aiddefrepositoryarepository) - # - attr_reader :git_dir - - # The Git index file used to stage changes (using `git add`) before they - # are committed. - # - # @return [Pathname] the Git index file - # - # @see [Git index file](https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-aiddefindexaindex) - # - attr_reader :git_index_file - - # Create a new Git::Lib object - # - # @param [Git::Base, Hash] base An object that passes in values for - # @git_work_dir, @git_dir, and @git_index_file - # - # @param [Logger] logger - # - # @option base [Pathname] :working_directory - # @option base [Pathname] :repository - # @option base [Pathname] :index - # - def initialize(base = nil, logger = nil) - @git_dir = nil - @git_index_file = nil - @git_work_dir = nil - @path = nil - @logger = logger || Logger.new(nil) - - if base.is_a?(Git::Base) - @git_dir = base.repo.path - @git_index_file = base.index.path if base.index - @git_work_dir = base.dir.path if base.dir - elsif base.is_a?(Hash) - @git_dir = base[:repository] - @git_index_file = base[:index] - @git_work_dir = base[:working_directory] - end - end - - # creates or reinitializes the repository - # - # options: - # :bare - # :working_directory - # :initial_branch - # - def init(opts={}) - arr_opts = [] - arr_opts << '--bare' if opts[:bare] - arr_opts << "--initial-branch=#{opts[:initial_branch]}" if opts[:initial_branch] - - command('init', *arr_opts) - end - - # tries to clone the given repo - # - # accepts options: - # :bare:: no working directory - # :branch:: name of branch to track (rather than 'master') - # :depth:: the number of commits back to pull - # :filter:: specify partial clone - # :origin:: name of remote (same as remote) - # :path:: directory where the repo will be cloned - # :remote:: name of remote (rather than 'origin') - # :recursive:: after the clone is created, initialize all submodules within, using their default settings. - # - # TODO - make this work with SSH password or auth_key - # - # @return [Hash] the options to pass to {Git::Base.new} - # - def clone(repository_url, directory, opts = {}) - @path = opts[:path] || '.' - clone_dir = opts[:path] ? File.join(@path, directory) : directory - - arr_opts = [] - arr_opts << '--bare' if opts[:bare] - arr_opts << '--branch' << opts[:branch] if opts[:branch] - arr_opts << '--depth' << opts[:depth].to_i if opts[:depth] && opts[:depth].to_i > 0 - arr_opts << '--filter' << opts[:filter] if opts[:filter] - Array(opts[:config]).each { |c| arr_opts << '--config' << c } - arr_opts << '--origin' << opts[:remote] || opts[:origin] if opts[:remote] || opts[:origin] - arr_opts << '--recursive' if opts[:recursive] - arr_opts << '--mirror' if opts[:mirror] - - arr_opts << '--' - - arr_opts << repository_url - arr_opts << clone_dir - - command('clone', *arr_opts) - - return_base_opts_from_clone(clone_dir, opts) - end - - def return_base_opts_from_clone(clone_dir, opts) - base_opts = {} - base_opts[:repository] = clone_dir if (opts[:bare] || opts[:mirror]) - base_opts[:working_directory] = clone_dir unless (opts[:bare] || opts[:mirror]) - base_opts[:log] = opts[:log] if opts[:log] - base_opts - end - - # Returns the name of the default branch of the given repository - # - # @param repository [URI, Pathname, String] The (possibly remote) repository to clone from - # - # @return [String] the name of the default branch - # - def repository_default_branch(repository) - output = command('ls-remote', '--symref', '--', repository, 'HEAD') - - match_data = output.match(%r{^ref: refs/remotes/origin/(?[^\t]+)\trefs/remotes/origin/HEAD$}) - return match_data[:default_branch] if match_data - - match_data = output.match(%r{^ref: refs/heads/(?[^\t]+)\tHEAD$}) - return match_data[:default_branch] if match_data - - raise 'Unable to determine the default branch' - end - - ## READ COMMANDS ## - - # - # Returns most recent tag that is reachable from a commit - # - # accepts options: - # :all - # :tags - # :contains - # :debug - # :exact_match - # :dirty - # :abbrev - # :candidates - # :long - # :always - # :math - # - # @param [String|NilClass] committish target commit sha or object name - # @param [{Symbol=>Object}] opts the given options - # @return [String] the tag name - # - def describe(committish=nil, opts={}) - arr_opts = [] - - arr_opts << '--all' if opts[:all] - arr_opts << '--tags' if opts[:tags] - arr_opts << '--contains' if opts[:contains] - arr_opts << '--debug' if opts[:debug] - arr_opts << '--long' if opts[:long] - arr_opts << '--always' if opts[:always] - arr_opts << '--exact-match' if opts[:exact_match] || opts[:"exact-match"] - - arr_opts << '--dirty' if opts[:dirty] == true - arr_opts << "--dirty=#{opts[:dirty]}" if opts[:dirty].is_a?(String) - - arr_opts << "--abbrev=#{opts[:abbrev]}" if opts[:abbrev] - arr_opts << "--candidates=#{opts[:candidates]}" if opts[:candidates] - arr_opts << "--match=#{opts[:match]}" if opts[:match] - - arr_opts << committish if committish - - return command('describe', *arr_opts) - end - - def log_commits(opts={}) - arr_opts = log_common_options(opts) - - arr_opts << '--pretty=oneline' - - arr_opts += log_path_options(opts) - - command_lines('log', *arr_opts).map { |l| l.split.first } - end - - def full_log_commits(opts={}) - arr_opts = log_common_options(opts) - - arr_opts << '--pretty=raw' - arr_opts << "--skip=#{opts[:skip]}" if opts[:skip] - - arr_opts += log_path_options(opts) - - full_log = command_lines('log', *arr_opts) - - process_commit_log_data(full_log) - end - - def revparse(string) - return string if string =~ /^[A-Fa-f0-9]{40}$/ # passing in a sha - just no-op it - rev = ['head', 'remotes', 'tags'].map do |d| - File.join(@git_dir, 'refs', d, string) - end.find do |path| - File.file?(path) - end - return File.read(rev).chomp if rev - command('rev-parse', string) - end - - def namerev(string) - command('name-rev', string).split[1] - end - - def object_type(sha) - command('cat-file', '-t', sha) - end - - def object_size(sha) - command('cat-file', '-s', sha).to_i - end - - # returns useful array of raw commit object data - def commit_data(sha) - sha = sha.to_s - cdata = command_lines('cat-file', 'commit', sha) - process_commit_data(cdata, sha) - end - - def process_commit_data(data, sha) - hsh = { - 'sha' => sha, - 'parent' => [] - } - - each_cat_file_header(data) do |key, value| - if key == 'parent' - hsh['parent'] << value - else - hsh[key] = value - end - end - - hsh['message'] = data.join("\n") + "\n" - - return hsh - end - - CAT_FILE_HEADER_LINE = /\A(?\w+) (?.*)\z/ - - def each_cat_file_header(data) - while (match = CAT_FILE_HEADER_LINE.match(data.shift)) - key = match[:key] - value_lines = [match[:value]] - - while data.first.start_with?(' ') - value_lines << data.shift.lstrip - end - - yield key, value_lines.join("\n") - end - end - - def tag_data(name) - sha = sha.to_s - tdata = command_lines('cat-file', 'tag', name) - process_tag_data(tdata, name) - end - - def process_tag_data(data, name) - hsh = { 'name' => name } - - each_cat_file_header(data) do |key, value| - hsh[key] = value - end - - hsh['message'] = data.join("\n") + "\n" - - return hsh - end - - def process_commit_log_data(data) - in_message = false - - hsh_array = [] - - hsh = nil - - data.each do |line| - line = line.chomp - - if line[0].nil? - in_message = !in_message - next - end - - in_message = false if in_message && line[0..3] != " " - - if in_message - hsh['message'] << "#{line[4..-1]}\n" - next - end - - key, *value = line.split - value = value.join(' ') - - case key - when 'commit' - hsh_array << hsh if hsh - hsh = {'sha' => value, 'message' => '', 'parent' => []} - when 'parent' - hsh['parent'] << value - else - hsh[key] = value - end - end - - hsh_array << hsh if hsh - - return hsh_array - end - - def object_contents(sha, &block) - command('cat-file', '-p', sha, &block) - end - - def ls_tree(sha) - data = { 'blob' => {}, 'tree' => {}, 'commit' => {} } - - command_lines('ls-tree', sha).each do |line| - (info, filenm) = line.split("\t") - (mode, type, sha) = info.split - data[type][filenm] = {:mode => mode, :sha => sha} - end - - data - end - - def mv(file1, file2) - command_lines('mv', '--', file1, file2) - end - - def full_tree(sha) - command_lines('ls-tree', '-r', sha) - end - - def tree_depth(sha) - full_tree(sha).size - end - - def change_head_branch(branch_name) - command('symbolic-ref', 'HEAD', "refs/heads/#{branch_name}") - end - - BRANCH_LINE_REGEXP = / - ^ - # Prefix indicates if this branch is checked out. The prefix is one of: - (?: - (?\*[[:blank:]]) | # Current branch (checked out in the current worktree) - (?\+[[:blank:]]) | # Branch checked out in a different worktree - [[:blank:]]{2} # Branch not checked out - ) - - # The branch's full refname - (?: - (?\(not[[:blank:]]a[[:blank:]]branch\)) | - (?:\(HEAD[[:blank:]]detached[[:blank:]]at[[:blank:]](?[^\)]+)\)) | - (?[^[[:blank:]]]+) - ) - - # Optional symref - # If this ref is a symbolic reference, this is the ref referenced - (?: - [[:blank:]]->[[:blank:]](?.*) - )? - $ - /x - - def branches_all - command_lines('branch', '-a').map do |line| - match_data = line.match(BRANCH_LINE_REGEXP) - raise GitExecuteError, 'Unexpected branch line format' unless match_data - next nil if match_data[:not_a_branch] || match_data[:detached_ref] - [ - match_data[:refname], - !match_data[:current].nil?, - !match_data[:worktree].nil?, - match_data[:symref] - ] - end.compact - end - - def worktrees_all - arr = [] - directory = '' - # Output example for `worktree list --porcelain`: - # worktree /code/public/ruby-git - # HEAD 4bef5abbba073c77b4d0ccc1ffcd0ed7d48be5d4 - # branch refs/heads/master - # - # worktree /tmp/worktree-1 - # HEAD b8c63206f8d10f57892060375a86ae911fad356e - # detached - # - command_lines('worktree', 'list', '--porcelain').each do |w| - s = w.split("\s") - directory = s[1] if s[0] == 'worktree' - arr << [directory, s[1]] if s[0] == 'HEAD' - end - arr - end - - def worktree_add(dir, commitish = nil) - return command('worktree', 'add', dir, commitish) if !commitish.nil? - command('worktree', 'add', dir) - end - - def worktree_remove(dir) - command('worktree', 'remove', dir) - end - - def worktree_prune - command('worktree', 'prune') - end - - def list_files(ref_dir) - dir = File.join(@git_dir, 'refs', ref_dir) - files = [] - begin - files = Dir.glob('**/*', base: dir).select { |f| File.file?(File.join(dir, f)) } - rescue - end - files - end - - def branch_current - branches_all.select { |b| b[1] }.first[0] rescue nil - end - - def branch_contains(commit, branch_name="") - command("branch", branch_name, "--contains", commit) - end - - # returns hash - # [tree-ish] = [[line_no, match], [line_no, match2]] - # [tree-ish] = [[line_no, match], [line_no, match2]] - def grep(string, opts = {}) - opts[:object] ||= 'HEAD' - - grep_opts = ['-n'] - grep_opts << '-i' if opts[:ignore_case] - grep_opts << '-v' if opts[:invert_match] - grep_opts << '-E' if opts[:extended_regexp] - grep_opts << '-e' - grep_opts << string - grep_opts << opts[:object] if opts[:object].is_a?(String) - grep_opts.push('--', opts[:path_limiter]) if opts[:path_limiter].is_a?(String) - grep_opts.push('--', *opts[:path_limiter]) if opts[:path_limiter].is_a?(Array) - - hsh = {} - command_lines('grep', *grep_opts).each do |line| - if m = /(.*?)\:(\d+)\:(.*)/.match(line) - hsh[m[1]] ||= [] - hsh[m[1]] << [m[2].to_i, m[3]] - end - end - hsh - end - - def diff_full(obj1 = 'HEAD', obj2 = nil, opts = {}) - diff_opts = ['-p'] - diff_opts << obj1 - diff_opts << obj2 if obj2.is_a?(String) - diff_opts << '--' << opts[:path_limiter] if opts[:path_limiter].is_a? String - - command('diff', *diff_opts) - end - - def diff_stats(obj1 = 'HEAD', obj2 = nil, opts = {}) - diff_opts = ['--numstat'] - diff_opts << obj1 - diff_opts << obj2 if obj2.is_a?(String) - diff_opts << '--' << opts[:path_limiter] if opts[:path_limiter].is_a? String - - hsh = {:total => {:insertions => 0, :deletions => 0, :lines => 0, :files => 0}, :files => {}} - - command_lines('diff', *diff_opts).each do |file| - (insertions, deletions, filename) = file.split("\t") - hsh[:total][:insertions] += insertions.to_i - hsh[:total][:deletions] += deletions.to_i - hsh[:total][:lines] = (hsh[:total][:deletions] + hsh[:total][:insertions]) - hsh[:total][:files] += 1 - hsh[:files][filename] = {:insertions => insertions.to_i, :deletions => deletions.to_i} - end - - hsh - end - - def diff_name_status(reference1 = nil, reference2 = nil, opts = {}) - opts_arr = ['--name-status'] - opts_arr << reference1 if reference1 - opts_arr << reference2 if reference2 - - opts_arr << '--' << opts[:path] if opts[:path] - - command_lines('diff', *opts_arr).inject({}) do |memo, line| - status, path = line.split("\t") - memo[path] = status - memo - end - end - - # compares the index and the working directory - def diff_files - diff_as_hash('diff-files') - end - - # compares the index and the repository - def diff_index(treeish) - diff_as_hash('diff-index', treeish) - end - - def ls_files(location=nil) - location ||= '.' - hsh = {} - command_lines('ls-files', '--stage', location).each do |line| - (info, file) = line.split("\t") - (mode, sha, stage) = info.split - if file.start_with?('"') && file.end_with?('"') - file = Git::EscapedPath.new(file[1..-2]).unescape - end - hsh[file] = {:path => file, :mode_index => mode, :sha_index => sha, :stage => stage} - end - hsh - end - - def ls_remote(location=nil, opts={}) - arr_opts = [] - arr_opts << '--refs' if opts[:refs] - arr_opts << (location || '.') - - Hash.new{ |h,k| h[k] = {} }.tap do |hsh| - command_lines('ls-remote', *arr_opts).each do |line| - (sha, info) = line.split("\t") - (ref, type, name) = info.split('/', 3) - type ||= 'head' - type = 'branches' if type == 'heads' - value = {:ref => ref, :sha => sha} - hsh[type].update( name.nil? ? value : { name => value }) - end - end - end - - def ignored_files - command_lines('ls-files', '--others', '-i', '--exclude-standard') - end - - - def config_remote(name) - hsh = {} - config_list.each do |key, value| - if /remote.#{name}/.match(key) - hsh[key.gsub("remote.#{name}.", '')] = value - end - end - hsh - end - - def config_get(name) - command('config', '--get', name, chdir: @git_dir) - end - - def global_config_get(name) - command('config', '--global', '--get', name) - end - - def config_list - parse_config_list command_lines('config', '--list', chdir: @git_dir) - end - - def global_config_list - parse_config_list command_lines('config', '--global', '--list') - end - - def parse_config_list(lines) - hsh = {} - lines.each do |line| - (key, *values) = line.split('=') - hsh[key] = values.join('=') - end - hsh - end - - def parse_config(file) - parse_config_list command_lines('config', '--list', '--file', file) - end - - # Shows objects - # - # @param [String|NilClass] objectish the target object reference (nil == HEAD) - # @param [String|NilClass] path the path of the file to be shown - # @return [String] the object information - def show(objectish=nil, path=nil) - arr_opts = [] - - arr_opts << (path ? "#{objectish}:#{path}" : objectish) - - command('show', *arr_opts.compact, chomp: false) - end - - ## WRITE COMMANDS ## - - def config_set(name, value, options = {}) - if options[:file].to_s.empty? - command('config', name, value) - else - command('config', '--file', options[:file], name, value) - end - end - - def global_config_set(name, value) - command('config', '--global', name, value) - end - - # updates the repository index using the working directory content - # - # lib.add('path/to/file') - # lib.add(['path/to/file1','path/to/file2']) - # lib.add(:all => true) - # - # options: - # :all => true - # :force => true - # - # @param [String,Array] paths files paths to be added to the repository - # @param [Hash] options - def add(paths='.',options={}) - arr_opts = [] - - arr_opts << '--all' if options[:all] - arr_opts << '--force' if options[:force] - - arr_opts << '--' - - arr_opts << paths - - arr_opts.flatten! - - command('add', *arr_opts) - end - - def rm(path = '.', opts = {}) - arr_opts = ['-f'] # overrides the up-to-date check by default - arr_opts << '-r' if opts[:recursive] - arr_opts << '--cached' if opts[:cached] - arr_opts << '--' - arr_opts += Array(path) - - command('rm', *arr_opts) - end - - # Takes the commit message with the options and executes the commit command - # - # accepts options: - # :amend - # :all - # :allow_empty - # :author - # :date - # :no_verify - # :allow_empty_message - # :gpg_sign (accepts true or a gpg key ID as a String) - # :no_gpg_sign (conflicts with :gpg_sign) - # - # @param [String] message the commit message to be used - # @param [Hash] opts the commit options to be used - def commit(message, opts = {}) - arr_opts = [] - arr_opts << "--message=#{message}" if message - arr_opts << '--amend' << '--no-edit' if opts[:amend] - arr_opts << '--all' if opts[:add_all] || opts[:all] - arr_opts << '--allow-empty' if opts[:allow_empty] - arr_opts << "--author=#{opts[:author]}" if opts[:author] - arr_opts << "--date=#{opts[:date]}" if opts[:date].is_a? String - arr_opts << '--no-verify' if opts[:no_verify] - arr_opts << '--allow-empty-message' if opts[:allow_empty_message] - - if opts[:gpg_sign] && opts[:no_gpg_sign] - raise ArgumentError, 'cannot specify :gpg_sign and :no_gpg_sign' - elsif opts[:gpg_sign] - arr_opts << - if opts[:gpg_sign] == true - '--gpg-sign' - else - "--gpg-sign=#{opts[:gpg_sign]}" - end - elsif opts[:no_gpg_sign] - arr_opts << '--no-gpg-sign' - end - - command('commit', *arr_opts) - end - - def reset(commit, opts = {}) - arr_opts = [] - arr_opts << '--hard' if opts[:hard] - arr_opts << commit if commit - command('reset', *arr_opts) - end - - def clean(opts = {}) - arr_opts = [] - arr_opts << '--force' if opts[:force] - arr_opts << '-ff' if opts[:ff] - arr_opts << '-d' if opts[:d] - arr_opts << '-x' if opts[:x] - - command('clean', *arr_opts) - end - - def revert(commitish, opts = {}) - # Forcing --no-edit as default since it's not an interactive session. - opts = {:no_edit => true}.merge(opts) - - arr_opts = [] - arr_opts << '--no-edit' if opts[:no_edit] - arr_opts << commitish - - command('revert', *arr_opts) - end - - def apply(patch_file) - arr_opts = [] - arr_opts << '--' << patch_file if patch_file - command('apply', *arr_opts) - end - - def apply_mail(patch_file) - arr_opts = [] - arr_opts << '--' << patch_file if patch_file - command('am', *arr_opts) - end - - def stashes_all - arr = [] - filename = File.join(@git_dir, 'logs/refs/stash') - if File.exist?(filename) - File.open(filename) do |f| - f.each_with_index do |line, i| - m = line.match(/:(.*)$/) - arr << [i, m[1].strip] - end - end - end - arr - end - - def stash_save(message) - output = command('stash', 'save', message) - output =~ /HEAD is now at/ - end - - def stash_apply(id = nil) - if id - command('stash', 'apply', id) - else - command('stash', 'apply') - end - end - - def stash_clear - command('stash', 'clear') - end - - def stash_list - command('stash', 'list') - end - - def branch_new(branch) - command('branch', branch) - end - - def branch_delete(branch) - command('branch', '-D', branch) - end - - # Runs checkout command to checkout or create branch - # - # accepts options: - # :new_branch - # :force - # :start_point - # - # @param [String] branch - # @param [Hash] opts - def checkout(branch = nil, opts = {}) - if branch.is_a?(Hash) && opts == {} - opts = branch - branch = nil - end - - arr_opts = [] - arr_opts << '-b' if opts[:new_branch] || opts[:b] - arr_opts << '--force' if opts[:force] || opts[:f] - arr_opts << branch if branch - arr_opts << opts[:start_point] if opts[:start_point] && arr_opts.include?('-b') - - command('checkout', *arr_opts) - end - - def checkout_file(version, file) - arr_opts = [] - arr_opts << version - arr_opts << file - command('checkout', *arr_opts) - end - - def merge(branch, message = nil, opts = {}) - arr_opts = [] - arr_opts << '--no-commit' if opts[:no_commit] - arr_opts << '--no-ff' if opts[:no_ff] - arr_opts << '-m' << message if message - arr_opts += Array(branch) - command('merge', *arr_opts) - end - - def merge_base(*args) - opts = args.last.is_a?(Hash) ? args.pop : {} - - arg_opts = [] - - arg_opts << '--octopus' if opts[:octopus] - arg_opts << '--independent' if opts[:independent] - arg_opts << '--fork-point' if opts[:fork_point] - arg_opts << '--all' if opts[:all] - - arg_opts += args - - command('merge-base', *arg_opts).lines.map(&:strip) - end - - def unmerged - unmerged = [] - command_lines('diff', "--cached").each do |line| - unmerged << $1 if line =~ /^\* Unmerged path (.*)/ - end - unmerged - end - - def conflicts # :yields: file, your, their - self.unmerged.each do |f| - your_tempfile = Tempfile.new("YOUR-#{File.basename(f)}") - your = your_tempfile.path - your_tempfile.close # free up file for git command process - command('show', ":2:#{f}", redirect: "> #{escape your}") - - their_tempfile = Tempfile.new("THEIR-#{File.basename(f)}") - their = their_tempfile.path - their_tempfile.close # free up file for git command process - command('show', ":3:#{f}", redirect: "> #{escape their}") - yield(f, your, their) - end - end - - def remote_add(name, url, opts = {}) - arr_opts = ['add'] - arr_opts << '-f' if opts[:with_fetch] || opts[:fetch] - arr_opts << '-t' << opts[:track] if opts[:track] - arr_opts << '--' - arr_opts << name - arr_opts << url - - command('remote', *arr_opts) - end - - def remote_set_url(name, url) - arr_opts = ['set-url'] - arr_opts << name - arr_opts << url - - command('remote', *arr_opts) - end - - def remote_remove(name) - command('remote', 'rm', name) - end - - def remotes - command_lines('remote') - end - - def tags - command_lines('tag') - end - - def tag(name, *opts) - target = opts[0].instance_of?(String) ? opts[0] : nil - - opts = opts.last.instance_of?(Hash) ? opts.last : {} - - if (opts[:a] || opts[:annotate]) && !(opts[:m] || opts[:message]) - raise "Can not create an [:a|:annotate] tag without the precense of [:m|:message]." - end - - arr_opts = [] - - arr_opts << '-f' if opts[:force] || opts[:f] - arr_opts << '-a' if opts[:a] || opts[:annotate] - arr_opts << '-s' if opts[:s] || opts[:sign] - arr_opts << '-d' if opts[:d] || opts[:delete] - arr_opts << name - arr_opts << target if target - - if opts[:m] || opts[:message] - arr_opts << '-m' << (opts[:m] || opts[:message]) - end - - command('tag', *arr_opts) - end - - def fetch(remote, opts) - arr_opts = [] - arr_opts << '--all' if opts[:all] - arr_opts << '--tags' if opts[:t] || opts[:tags] - arr_opts << '--prune' if opts[:p] || opts[:prune] - arr_opts << '--prune-tags' if opts[:P] || opts[:'prune-tags'] - arr_opts << '--force' if opts[:f] || opts[:force] - arr_opts << '--update-head-ok' if opts[:u] || opts[:'update-head-ok'] - arr_opts << '--unshallow' if opts[:unshallow] - arr_opts << '--depth' << opts[:depth] if opts[:depth] - arr_opts << '--' if remote || opts[:ref] - arr_opts << remote if remote - arr_opts << opts[:ref] if opts[:ref] - - command('fetch', *arr_opts) - end - - def push(remote = nil, branch = nil, opts = nil) - if opts.nil? && branch.instance_of?(Hash) - opts = branch - branch = nil - end - - if opts.nil? && remote.instance_of?(Hash) - opts = remote - remote = nil - end - - opts ||= {} - - # Small hack to keep backwards compatibility with the 'push(remote, branch, tags)' method signature. - opts = {:tags => opts} if [true, false].include?(opts) - - raise ArgumentError, "You must specify a remote if a branch is specified" if remote.nil? && !branch.nil? - - arr_opts = [] - arr_opts << '--mirror' if opts[:mirror] - arr_opts << '--delete' if opts[:delete] - arr_opts << '--force' if opts[:force] || opts[:f] - arr_opts << '--all' if opts[:all] && remote - - Array(opts[:push_option]).each { |o| arr_opts << '--push-option' << o } if opts[:push_option] - arr_opts << remote if remote - arr_opts_with_branch = arr_opts.dup - arr_opts_with_branch << branch if branch - - if opts[:mirror] - command('push', *arr_opts_with_branch) - else - command('push', *arr_opts_with_branch) - command('push', '--tags', *arr_opts) if opts[:tags] - end - end - - def pull(remote = nil, branch = nil) - raise ArgumentError, "You must specify a remote if a branch is specified" if remote.nil? && !branch.nil? - - arr_opts = [] - arr_opts << remote if remote - arr_opts << branch if branch - command('pull', *arr_opts) - end - - def tag_sha(tag_name) - head = File.join(@git_dir, 'refs', 'tags', tag_name) - return File.read(head).chomp if File.exist?(head) - - command('show-ref', '--tags', '-s', tag_name) - end - - def repack - command('repack', '-a', '-d') - end - - def gc - command('gc', '--prune', '--aggressive', '--auto') - end - - # reads a tree into the current index file - def read_tree(treeish, opts = {}) - arr_opts = [] - arr_opts << "--prefix=#{opts[:prefix]}" if opts[:prefix] - arr_opts += [treeish] - command('read-tree', *arr_opts) - end - - def write_tree - command('write-tree') - end - - def commit_tree(tree, opts = {}) - opts[:message] ||= "commit tree #{tree}" - t = Tempfile.new('commit-message') - t.write(opts[:message]) - t.close - - arr_opts = [] - arr_opts << tree - arr_opts << '-p' << opts[:parent] if opts[:parent] - arr_opts += Array(opts[:parents]).map { |p| ['-p', p] }.flatten if opts[:parents] - command('commit-tree', *arr_opts, redirect: "< #{escape t.path}") - end - - def update_ref(ref, commit) - command('update-ref', ref, commit) - end - - def checkout_index(opts = {}) - arr_opts = [] - arr_opts << "--prefix=#{opts[:prefix]}" if opts[:prefix] - arr_opts << "--force" if opts[:force] - arr_opts << "--all" if opts[:all] - arr_opts << '--' << opts[:path_limiter] if opts[:path_limiter].is_a? String - - command('checkout-index', *arr_opts) - end - - # creates an archive file - # - # options - # :format (zip, tar) - # :prefix - # :remote - # :path - def archive(sha, file = nil, opts = {}) - opts[:format] ||= 'zip' - - if opts[:format] == 'tgz' - opts[:format] = 'tar' - opts[:add_gzip] = true - end - - if !file - tempfile = Tempfile.new('archive') - file = tempfile.path - # delete it now, before we write to it, so that Ruby doesn't delete it - # when it finalizes the Tempfile. - tempfile.close! - end - - arr_opts = [] - arr_opts << "--format=#{opts[:format]}" if opts[:format] - arr_opts << "--prefix=#{opts[:prefix]}" if opts[:prefix] - arr_opts << "--remote=#{opts[:remote]}" if opts[:remote] - arr_opts << sha - arr_opts << '--' << opts[:path] if opts[:path] - command('archive', *arr_opts, redirect: " > #{escape file}") - if opts[:add_gzip] - file_content = File.read(file) - Zlib::GzipWriter.open(file) do |gz| - gz.write(file_content) - end - end - return file - end - - # returns the current version of git, as an Array of Fixnums. - def current_command_version - output = command('version') - version = output[/\d+(\.\d+)+/] - version_parts = version.split('.').collect { |i| i.to_i } - version_parts.fill(0, version_parts.length...3) - end - - # Returns current_command_version <=> other_version - # - # @example - # lib.current_command_version #=> [2, 42, 0] - # - # lib.compare_version_to(2, 41, 0) #=> 1 - # lib.compare_version_to(2, 42, 0) #=> 0 - # lib.compare_version_to(2, 43, 0) #=> -1 - # - # @param other_version [Array] the other version to compare to - # @return [Integer] -1 if this version is less than other_version, 0 if equal, or 1 if greater than - # - def compare_version_to(*other_version) - current_command_version <=> other_version - end - - def required_command_version - [1, 6] - end - - def meets_required_version? - (self.current_command_version <=> self.required_command_version) >= 0 - end - - def self.warn_if_old_command(lib) - return true if @version_checked - @version_checked = true - unless lib.meets_required_version? - $stderr.puts "[WARNING] The git gem requires git #{lib.required_command_version.join('.')} or later, but only found #{lib.current_command_version.join('.')}. You should probably upgrade." - end - true - end - - private - - # Systen ENV variables involved in the git commands. - # - # @return [] the names of the EVN variables involved in the git commands - ENV_VARIABLE_NAMES = ['GIT_DIR', 'GIT_WORK_TREE', 'GIT_INDEX_FILE', 'GIT_SSH'] - - def command_lines(cmd, *opts, chdir: nil) - cmd_op = command(cmd, *opts, chdir: chdir) - if cmd_op.encoding.name != "UTF-8" - op = cmd_op.encode("UTF-8", "binary", :invalid => :replace, :undef => :replace) - else - op = cmd_op - end - op.split("\n") - end - - # Takes the current git's system ENV variables and store them. - def store_git_system_env_variables - @git_system_env_variables = {} - ENV_VARIABLE_NAMES.each do |env_variable_name| - @git_system_env_variables[env_variable_name] = ENV[env_variable_name] - end - end - - # Takes the previously stored git's ENV variables and set them again on ENV. - def restore_git_system_env_variables - ENV_VARIABLE_NAMES.each do |env_variable_name| - ENV[env_variable_name] = @git_system_env_variables[env_variable_name] - end - end - - # Sets git's ENV variables to the custom values for the current instance. - def set_custom_git_env_variables - ENV['GIT_DIR'] = @git_dir - ENV['GIT_WORK_TREE'] = @git_work_dir - ENV['GIT_INDEX_FILE'] = @git_index_file - ENV['GIT_SSH'] = Git::Base.config.git_ssh - end - - # Runs a block inside an environment with customized ENV variables. - # It restores the ENV after execution. - # - # @param [Proc] block block to be executed within the customized environment - def with_custom_env_variables(&block) - @@semaphore.synchronize do - store_git_system_env_variables() - set_custom_git_env_variables() - return block.call() - end - ensure - restore_git_system_env_variables() - end - - def command(*cmd, redirect: '', chomp: true, chdir: nil, &block) - Git::Lib.warn_if_old_command(self) - - raise 'cmd can not include a nested array' if cmd.any? { |o| o.is_a? Array } - - global_opts = [] - global_opts << "--git-dir=#{@git_dir}" if !@git_dir.nil? - global_opts << "--work-tree=#{@git_work_dir}" if !@git_work_dir.nil? - global_opts << '-c' << 'core.quotePath=true' - global_opts << '-c' << 'color.ui=false' - - escaped_cmd = cmd.map { |part| escape(part) }.join(' ') - - global_opts = global_opts.map { |s| escape(s) }.join(' ') - - git_cmd = "#{Git::Base.config.binary_path} #{global_opts} #{escaped_cmd} #{redirect} 2>&1" - - output = nil - - command_thread = nil; - - status = nil - - with_custom_env_variables do - command_thread = Thread.new do - output, status = run_command(git_cmd, chdir, &block) - end - command_thread.join - end - - @logger.info(git_cmd) - @logger.debug(output) - - if status.exitstatus > 1 || (status.exitstatus == 1 && output != '') - result = Git::CommandLineResult.new(git_cmd, status, output, '') - raise Git::FailedError.new(result) - end - - output.chomp! if output && chomp && !block_given? - - output - end - - # Takes the diff command line output (as Array) and parse it into a Hash - # - # @param [String] diff_command the diff commadn to be used - # @param [Array] opts the diff options to be used - # @return [Hash] the diff as Hash - def diff_as_hash(diff_command, opts=[]) - # update index before diffing to avoid spurious diffs - command('status') - command_lines(diff_command, *opts).inject({}) do |memo, line| - info, file = line.split("\t") - mode_src, mode_dest, sha_src, sha_dest, type = info.split - - memo[file] = { - :mode_index => mode_dest, - :mode_repo => mode_src.to_s[1, 7], - :path => file, - :sha_repo => sha_src, - :sha_index => sha_dest, - :type => type - } - - memo - end - end - - # Returns an array holding the common options for the log commands - # - # @param [Hash] opts the given options - # @return [Array] the set of common options that the log command will use - def log_common_options(opts) - arr_opts = [] - - if opts[:count] && !opts[:count].is_a?(Integer) - raise ArgumentError, "The log count option must be an Integer but was #{opts[:count].inspect}" - end - - arr_opts << "--max-count=#{opts[:count]}" if opts[:count] - arr_opts << "--all" if opts[:all] - arr_opts << "--no-color" - arr_opts << "--cherry" if opts[:cherry] - arr_opts << "--since=#{opts[:since]}" if opts[:since].is_a? String - arr_opts << "--until=#{opts[:until]}" if opts[:until].is_a? String - arr_opts << "--grep=#{opts[:grep]}" if opts[:grep].is_a? String - arr_opts << "--author=#{opts[:author]}" if opts[:author].is_a? String - arr_opts << "#{opts[:between][0].to_s}..#{opts[:between][1].to_s}" if (opts[:between] && opts[:between].size == 2) - - arr_opts - end - - # Retrurns an array holding path options for the log commands - # - # @param [Hash] opts the given options - # @return [Array] the set of path options that the log command will use - def log_path_options(opts) - arr_opts = [] - - arr_opts << opts[:object] if opts[:object].is_a? String - if opts[:path_limiter] - arr_opts << '--' - arr_opts += Array(opts[:path_limiter]) - end - arr_opts - end - - def run_command(git_cmd, chdir=nil, &block) - block ||= Proc.new do |io| - io.readlines.map { |l| Git::EncodingUtils.normalize_encoding(l) }.join - end - - opts = {} - opts[:chdir] = File.expand_path(chdir) if chdir - - Open3.popen2(git_cmd, opts) do |stdin, stdout, wait_thr| - [block.call(stdout), wait_thr.value] - end - end - - def escape(s) - windows_platform? ? escape_for_windows(s) : escape_for_sh(s) - end - - def escape_for_sh(s) - "'#{s && s.to_s.gsub('\'','\'"\'"\'')}'" - end - - def escape_for_windows(s) - # Escape existing double quotes in s and then wrap the result with double quotes - escaped_string = s.to_s.gsub('"','\\"') - %Q{"#{escaped_string}"} - end - - def windows_platform? - # Check if on Windows via RUBY_PLATFORM (CRuby) and RUBY_DESCRIPTION (JRuby) - win_platform_regex = /mingw|mswin/ - RUBY_PLATFORM =~ win_platform_regex || RUBY_DESCRIPTION =~ win_platform_regex - end - end -end diff --git a/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/log.rb b/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/log.rb deleted file mode 100644 index 24f68bcc..00000000 --- a/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/log.rb +++ /dev/null @@ -1,131 +0,0 @@ -module Git - - # object that holds the last X commits on given branch - class Log - include Enumerable - - def initialize(base, count = 30) - dirty_log - @base = base - @count = count - end - - def all - dirty_log - @all = true - self - end - - def object(objectish) - dirty_log - @object = objectish - return self - end - - def author(regex) - dirty_log - @author = regex - return self - end - - def grep(regex) - dirty_log - @grep = regex - return self - end - - def path(path) - dirty_log - @path = path - return self - end - - def skip(num) - dirty_log - @skip = num - return self - end - - def since(date) - dirty_log - @since = date - return self - end - - def until(date) - dirty_log - @until = date - return self - end - - def between(sha1, sha2 = nil) - dirty_log - @between = [sha1, sha2] - return self - end - - def cherry - dirty_log - @cherry = true - return self - end - - def to_s - self.map { |c| c.to_s }.join("\n") - end - - - # forces git log to run - - def size - check_log - @commits.size rescue nil - end - - def each(&block) - check_log - @commits.each(&block) - end - - def first - check_log - @commits.first rescue nil - end - - def last - check_log - @commits.last rescue nil - end - - def [](index) - check_log - @commits[index] rescue nil - end - - - private - - def dirty_log - @dirty_flag = true - end - - def check_log - if @dirty_flag - run_log - @dirty_flag = false - end - end - - # actually run the 'git log' command - def run_log - log = @base.lib.full_log_commits( - count: @count, all: @all, object: @object, path_limiter: @path, since: @since, - author: @author, grep: @grep, skip: @skip, until: @until, between: @between, - cherry: @cherry - ) - @commits = log.map { |c| Git::Object::Commit.new(@base, c['sha'], c) } - end - - end - -end diff --git a/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/object.rb b/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/object.rb deleted file mode 100644 index 30258e92..00000000 --- a/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/object.rb +++ /dev/null @@ -1,312 +0,0 @@ -module Git - - class GitTagNameDoesNotExist< StandardError - end - - # represents a git object - class Object - - class AbstractObject - attr_accessor :objectish, :type, :mode - - attr_writer :size - - def initialize(base, objectish) - @base = base - @objectish = objectish.to_s - @contents = nil - @trees = nil - @size = nil - @sha = nil - end - - def sha - @sha ||= @base.lib.revparse(@objectish) - end - - def size - @size ||= @base.lib.object_size(@objectish) - end - - # Get the object's contents. - # If no block is given, the contents are cached in memory and returned as a string. - # If a block is given, it yields an IO object (via IO::popen) which could be used to - # read a large file in chunks. - # - # Use this for large files so that they are not held in memory. - def contents(&block) - if block_given? - @base.lib.object_contents(@objectish, &block) - else - @contents ||= @base.lib.object_contents(@objectish) - end - end - - def contents_array - self.contents.split("\n") - end - - def to_s - @objectish - end - - def grep(string, path_limiter = nil, opts = {}) - opts = {:object => sha, :path_limiter => path_limiter}.merge(opts) - @base.lib.grep(string, opts) - end - - def diff(objectish) - Git::Diff.new(@base, @objectish, objectish) - end - - def log(count = 30) - Git::Log.new(@base, count).object(@objectish) - end - - # creates an archive of this object (tree) - def archive(file = nil, opts = {}) - @base.lib.archive(@objectish, file, opts) - end - - def tree?; false; end - - def blob?; false; end - - def commit?; false; end - - def tag?; false; end - - end - - - class Blob < AbstractObject - - def initialize(base, sha, mode = nil) - super(base, sha) - @mode = mode - end - - def blob? - true - end - - end - - class Tree < AbstractObject - - def initialize(base, sha, mode = nil) - super(base, sha) - @mode = mode - @trees = nil - @blobs = nil - end - - def children - blobs.merge(subtrees) - end - - def blobs - @blobs ||= check_tree[:blobs] - end - alias_method :files, :blobs - - def trees - @trees ||= check_tree[:trees] - end - alias_method :subtrees, :trees - alias_method :subdirectories, :trees - - def full_tree - @base.lib.full_tree(@objectish) - end - - def depth - @base.lib.tree_depth(@objectish) - end - - def tree? - true - end - - private - - # actually run the git command - def check_tree - @trees = {} - @blobs = {} - - data = @base.lib.ls_tree(@objectish) - - data['tree'].each do |key, tree| - @trees[key] = Git::Object::Tree.new(@base, tree[:sha], tree[:mode]) - end - - data['blob'].each do |key, blob| - @blobs[key] = Git::Object::Blob.new(@base, blob[:sha], blob[:mode]) - end - - { - :trees => @trees, - :blobs => @blobs - } - end - - end - - class Commit < AbstractObject - - def initialize(base, sha, init = nil) - super(base, sha) - @tree = nil - @parents = nil - @author = nil - @committer = nil - @message = nil - if init - set_commit(init) - end - end - - def message - check_commit - @message - end - - def name - @base.lib.namerev(sha) - end - - def gtree - check_commit - Tree.new(@base, @tree) - end - - def parent - parents.first - end - - # array of all parent commits - def parents - check_commit - @parents - end - - # git author - def author - check_commit - @author - end - - def author_date - author.date - end - - # git author - def committer - check_commit - @committer - end - - def committer_date - committer.date - end - alias_method :date, :committer_date - - def diff_parent - diff(parent) - end - - def set_commit(data) - @sha ||= data['sha'] - @committer = Git::Author.new(data['committer']) - @author = Git::Author.new(data['author']) - @tree = Git::Object::Tree.new(@base, data['tree']) - @parents = data['parent'].map{ |sha| Git::Object::Commit.new(@base, sha) } - @message = data['message'].chomp - end - - def commit? - true - end - - private - - # see if this object has been initialized and do so if not - def check_commit - return if @tree - - data = @base.lib.commit_data(@objectish) - set_commit(data) - end - - end - - class Tag < AbstractObject - attr_accessor :name - - def initialize(base, sha, name) - super(base, sha) - @name = name - @annotated = nil - @loaded = false - end - - def annotated? - @annotated ||= (@base.lib.object_type(self.name) == 'tag') - end - - def message - check_tag() - return @message - end - - def tag? - true - end - - def tagger - check_tag() - return @tagger - end - - private - - def check_tag - return if @loaded - - if !self.annotated? - @message = @tagger = nil - else - tdata = @base.lib.tag_data(@name) - @message = tdata['message'].chomp - @tagger = Git::Author.new(tdata['tagger']) - end - - @loaded = true - end - - end - - # if we're calling this, we don't know what type it is yet - # so this is our little factory method - def self.new(base, objectish, type = nil, is_tag = false) - if is_tag - sha = base.lib.tag_sha(objectish) - if sha == '' - raise Git::GitTagNameDoesNotExist.new(objectish) - end - return Git::Object::Tag.new(base, sha, objectish) - end - - type ||= base.lib.object_type(objectish) - klass = - case type - when /blob/ then Blob - when /commit/ then Commit - when /tree/ then Tree - end - klass.new(base, objectish) - end - - end -end diff --git a/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/path.rb b/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/path.rb deleted file mode 100644 index 4b20d9a7..00000000 --- a/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/path.rb +++ /dev/null @@ -1,31 +0,0 @@ -module Git - - class Path - - attr_accessor :path - - def initialize(path, check_path=true) - path = File.expand_path(path) - - if check_path && !File.exist?(path) - raise ArgumentError, 'path does not exist', [path] - end - - @path = path - end - - def readable? - File.readable?(@path) - end - - def writable? - File.writable?(@path) - end - - def to_s - @path - end - - end - -end diff --git a/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/remote.rb b/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/remote.rb deleted file mode 100644 index 9b2f3958..00000000 --- a/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/remote.rb +++ /dev/null @@ -1,38 +0,0 @@ -module Git - class Remote < Path - - attr_accessor :name, :url, :fetch_opts - - def initialize(base, name) - @base = base - config = @base.lib.config_remote(name) - @name = name - @url = config['url'] - @fetch_opts = config['fetch'] - end - - def fetch(opts={}) - @base.fetch(@name, opts) - end - - # merge this remote locally - def merge(branch = @base.current_branch) - remote_tracking_branch = "#{@name}/#{branch}" - @base.merge(remote_tracking_branch) - end - - def branch(branch = @base.current_branch) - remote_tracking_branch = "#{@name}/#{branch}" - Git::Branch.new(@base, remote_tracking_branch) - end - - def remove - @base.lib.remote_remove(@name) - end - - def to_s - @name - end - - end -end diff --git a/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/repository.rb b/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/repository.rb deleted file mode 100644 index 95f3bef6..00000000 --- a/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/repository.rb +++ /dev/null @@ -1,6 +0,0 @@ -module Git - - class Repository < Path - end - -end diff --git a/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/signaled_error.rb b/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/signaled_error.rb deleted file mode 100644 index 279f0fb0..00000000 --- a/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/signaled_error.rb +++ /dev/null @@ -1,50 +0,0 @@ -# frozen_string_literal: true - -require 'git/git_execute_error' - -module Git - # This error is raised when a git command exits because of an uncaught signal - # - # The git command executed, status, stdout, and stderr are available from this - # object. The #message includes the git command, the status of the process, and - # the stderr of the process. - # - # @api public - # - class SignaledError < Git::GitExecuteError - # Create a SignaledError object - # - # @example - # `kill -9 $$` # set $? appropriately for this example - # result = Git::CommandLineResult.new(%w[git status], $?, '', "killed") - # error = Git::SignaledError.new(result) - # error.message #=> - # "[\"git\", \"status\"]\nstatus: pid 88811 SIGKILL (signal 9)\nstderr: \"killed\"" - # - # @param result [Git::CommandLineResult] the result of the git command including the git command, status, stdout, and stderr - # - def initialize(result) - super("#{result.git_cmd}\nstatus: #{result.status}\nstderr: #{result.stderr.inspect}") - @result = result - end - - # @attribute [r] result - # - # The result of the git command including the git command, status, and output - # - # @example - # `kill -9 $$` # set $? appropriately for this example - # result = Git::CommandLineResult.new(%w[git status], $?, '', "killed") - # error = Git::SignaledError.new(result) - # error.result #=> - # #, - # @stderr="killed", - # @stdout=""> - # - # @return [Git::CommandLineResult] - # - attr_reader :result - end -end diff --git a/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/stash.rb b/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/stash.rb deleted file mode 100644 index 97de906c..00000000 --- a/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/stash.rb +++ /dev/null @@ -1,27 +0,0 @@ -module Git - class Stash - - def initialize(base, message, existing=false) - @base = base - @message = message - save unless existing - end - - def save - @saved = @base.lib.stash_save(@message) - end - - def saved? - @saved - end - - def message - @message - end - - def to_s - message - end - - end -end \ No newline at end of file diff --git a/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/stashes.rb b/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/stashes.rb deleted file mode 100644 index 0ebb9bed..00000000 --- a/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/stashes.rb +++ /dev/null @@ -1,55 +0,0 @@ -module Git - - # object that holds all the available stashes - class Stashes - include Enumerable - - def initialize(base) - @stashes = [] - - @base = base - - @base.lib.stashes_all.each do |id, message| - @stashes.unshift(Git::Stash.new(@base, message, true)) - end - end - - # - # Returns an multi-dimensional Array of elements that have been stash saved. - # Array is based on position and name. See Example - # - # @example Returns Array of items that have been stashed - # .all - [0, "testing-stash-all"]] - # @return [Array] - def all - @base.lib.stashes_all - end - - def save(message) - s = Git::Stash.new(@base, message) - @stashes.unshift(s) if s.saved? - end - - def apply(index=nil) - @base.lib.stash_apply(index) - end - - def clear - @base.lib.stash_clear - @stashes = [] - end - - def size - @stashes.size - end - - def each(&block) - @stashes.each(&block) - end - - def [](index) - @stashes[index.to_i] - end - - end -end diff --git a/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/status.rb b/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/status.rb deleted file mode 100644 index 3f741bfd..00000000 --- a/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/status.rb +++ /dev/null @@ -1,198 +0,0 @@ -module Git - # - # A class for git status - # - class Status - include Enumerable - - def initialize(base) - @base = base - construct_status - end - - # - # Returns an Enumerable containing files that have changed from the - # git base directory - # - # @return [Enumerable] - def changed - @files.select { |_k, f| f.type == 'M' } - end - - # - # Determines whether the given file has been changed. - # File path starts at git base directory - # - # @param file [String] The name of the file. - # @example Check if lib/git.rb has changed. - # changed?('lib/git.rb') - # @return [Boolean] - def changed?(file) - changed.member?(file) - end - - # - # Returns an Enumerable containing files that have been added. - # File path starts at git base directory - # - # @return [Enumerable] - def added - @files.select { |_k, f| f.type == 'A' } - end - - # - # Determines whether the given file has been added to the repository - # File path starts at git base directory - # - # @param file [String] The name of the file. - # @example Check if lib/git.rb is added. - # added?('lib/git.rb') - # @return [Boolean] - def added?(file) - added.member?(file) - end - - # - # Returns an Enumerable containing files that have been deleted. - # File path starts at git base directory - # - # @return [Enumerable] - def deleted - @files.select { |_k, f| f.type == 'D' } - end - - # - # Determines whether the given file has been deleted from the repository - # File path starts at git base directory - # - # @param file [String] The name of the file. - # @example Check if lib/git.rb is deleted. - # deleted?('lib/git.rb') - # @return [Boolean] - def deleted?(file) - deleted.member?(file) - end - - # - # Returns an Enumerable containing files that are not tracked in git. - # File path starts at git base directory - # - # @return [Enumerable] - def untracked - @files.select { |_k, f| f.untracked } - end - - # - # Determines whether the given file has is tracked by git. - # File path starts at git base directory - # - # @param file [String] The name of the file. - # @example Check if lib/git.rb is an untracked file. - # untracked?('lib/git.rb') - # @return [Boolean] - def untracked?(file) - untracked.member?(file) - end - - def pretty - out = '' - each do |file| - out << pretty_file(file) - end - out << "\n" - out - end - - def pretty_file(file) - <<~FILE - #{file.path} - \tsha(r) #{file.sha_repo} #{file.mode_repo} - \tsha(i) #{file.sha_index} #{file.mode_index} - \ttype #{file.type} - \tstage #{file.stage} - \tuntrac #{file.untracked} - FILE - end - - # enumerable method - - def [](file) - @files[file] - end - - def each(&block) - @files.values.each(&block) - end - - # subclass that does heavy lifting - class StatusFile - attr_accessor :path, :type, :stage, :untracked - attr_accessor :mode_index, :mode_repo - attr_accessor :sha_index, :sha_repo - - def initialize(base, hash) - @base = base - @path = hash[:path] - @type = hash[:type] - @stage = hash[:stage] - @mode_index = hash[:mode_index] - @mode_repo = hash[:mode_repo] - @sha_index = hash[:sha_index] - @sha_repo = hash[:sha_repo] - @untracked = hash[:untracked] - end - - def blob(type = :index) - if type == :repo - @base.object(@sha_repo) - else - begin - @base.object(@sha_index) - rescue - @base.object(@sha_repo) - end - end - end - end - - private - - def construct_status - @files = @base.lib.ls_files - - fetch_untracked - fetch_modified - fetch_added - - @files.each do |k, file_hash| - @files[k] = StatusFile.new(@base, file_hash) - end - end - - def fetch_untracked - ignore = @base.lib.ignored_files - - root_dir = @base.dir.path - Dir.glob('**/*', File::FNM_DOTMATCH, base: root_dir) do |file| - next if @files[file] || File.directory?(File.join(root_dir, file)) || - ignore.include?(file) || file =~ %r{^.git\/.+} - - @files[file] = { path: file, untracked: true } - end - end - - def fetch_modified - # find modified in tree - @base.lib.diff_files.each do |path, data| - @files[path] ? @files[path].merge!(data) : @files[path] = data - end - end - - def fetch_added - # find added but not committed - new files - @base.lib.diff_index('HEAD').each do |path, data| - @files[path] ? @files[path].merge!(data) : @files[path] = data - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/url.rb b/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/url.rb deleted file mode 100644 index af170615..00000000 --- a/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/url.rb +++ /dev/null @@ -1,127 +0,0 @@ -# frozen_string_literal: true - -require 'addressable/uri' - -module Git - # Methods for parsing a Git URL - # - # Any URL that can be passed to `git clone` can be parsed by this class. - # - # @see https://git-scm.com/docs/git-clone#_git_urls GIT URLs - # @see https://github.com/sporkmonger/addressable Addresable::URI - # - # @api public - # - class URL - # Regexp used to match a Git URL with an alternative SSH syntax - # such as `user@host:path` - # - GIT_ALTERNATIVE_SSH_SYNTAX = %r{ - ^ - (?:(?[^@/]+)@)? # user or nil - (?[^:/]+) # host is required - :(?!/) # : serparator is required, but must not be followed by / - (?.*?) # path is required - $ - }x.freeze - - # Parse a Git URL and return an Addressable::URI object - # - # The URI returned can be converted back to a string with 'to_s'. This is - # guaranteed to return the same URL string that was parsed. - # - # @example - # uri = Git::URL.parse('https://github.com/ruby-git/ruby-git.git') - # #=> # - # uri.scheme #=> "https" - # uri.host #=> "github.com" - # uri.path #=> "/ruby-git/ruby-git.git" - # - # Git::URL.parse('/Users/James/projects/ruby-git') - # #=> # - # - # @param url [String] the Git URL to parse - # - # @return [Addressable::URI] the parsed URI - # - def self.parse(url) - if !url.start_with?('file:') && (m = GIT_ALTERNATIVE_SSH_SYNTAX.match(url)) - GitAltURI.new(user: m[:user], host: m[:host], path: m[:path]) - else - Addressable::URI.parse(url) - end - end - - # The directory `git clone` would use for the repository directory for the given URL - # - # @example - # Git::URL.clone_to('https://github.com/ruby-git/ruby-git.git') #=> 'ruby-git' - # - # @param url [String] the Git URL containing the repository directory - # - # @return [String] the name of the repository directory - # - def self.clone_to(url, bare: false, mirror: false) - uri = parse(url) - path_parts = uri.path.split('/') - path_parts.pop if path_parts.last == '.git' - directory = path_parts.last - if bare || mirror - directory += '.git' unless directory.end_with?('.git') - elsif directory.end_with?('.git') - directory = directory[0..-5] - end - directory - end - end - - # The URI for git's alternative scp-like syntax - # - # This class is necessary to ensure that #to_s returns the same string - # that was passed to the initializer. - # - # @api public - # - class GitAltURI < Addressable::URI - # Create a new GitAltURI object - # - # @example - # uri = Git::GitAltURI.new(user: 'james', host: 'github.com', path: 'james/ruby-git') - # uri.to_s #=> 'james@github.com/james/ruby-git' - # - # @param user [String, nil] the user from the URL or nil - # @param host [String] the host from the URL - # @param path [String] the path from the URL - # - def initialize(user:, host:, path:) - super(scheme: 'git-alt', user: user, host: host, path: path) - end - - # Convert the URI to a String - # - # Addressible::URI forces path to be absolute by prepending a '/' to the - # path. This method removes the '/' when converting back to a string - # since that is what is expected by git. The following is a valid git URL: - # - # `james@github.com:ruby-git/ruby-git.git` - # - # and the following (with the initial '/'' in the path) is NOT a valid git URL: - # - # `james@github.com:/ruby-git/ruby-git.git` - # - # @example - # uri = Git::GitAltURI.new(user: 'james', host: 'github.com', path: 'james/ruby-git') - # uri.path #=> '/james/ruby-git' - # uri.to_s #=> 'james@github.com:james/ruby-git' - # - # @return [String] the URI as a String - # - def to_s - if user - "#{user}@#{host}:#{path[1..-1]}" - else - "#{host}:#{path[1..-1]}" - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/version.rb b/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/version.rb deleted file mode 100644 index 6ab7e075..00000000 --- a/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/version.rb +++ /dev/null @@ -1,5 +0,0 @@ -module Git - # The current gem version - # @return [String] the current gem version. - VERSION='1.19.1' -end diff --git a/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/working_directory.rb b/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/working_directory.rb deleted file mode 100644 index 3f37f1a5..00000000 --- a/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/working_directory.rb +++ /dev/null @@ -1,4 +0,0 @@ -module Git - class WorkingDirectory < Git::Path - end -end diff --git a/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/worktree.rb b/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/worktree.rb deleted file mode 100644 index 24e79b5b..00000000 --- a/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/worktree.rb +++ /dev/null @@ -1,38 +0,0 @@ -require 'git/path' - -module Git - - class Worktree < Path - - attr_accessor :full, :dir, :gcommit - - def initialize(base, dir, gcommit = nil) - @full = dir - @full += ' ' + gcommit if !gcommit.nil? - @base = base - @dir = dir - @gcommit = gcommit - end - - def gcommit - @gcommit ||= @base.gcommit(@full) - @gcommit - end - - def add - @base.lib.worktree_add(@dir, @gcommit) - end - - def remove - @base.lib.worktree_remove(@dir) - end - - def to_a - [@full] - end - - def to_s - @full - end - end -end diff --git a/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/worktrees.rb b/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/worktrees.rb deleted file mode 100644 index 0cc53ba6..00000000 --- a/bundle/ruby/3.2.0/gems/git-1.19.1/lib/git/worktrees.rb +++ /dev/null @@ -1,47 +0,0 @@ -module Git - # object that holds all the available worktrees - class Worktrees - - include Enumerable - - def initialize(base) - @worktrees = {} - - @base = base - - # Array contains [dir, git_hash] - @base.lib.worktrees_all.each do |w| - @worktrees[w[0]] = Git::Worktree.new(@base, w[0], w[1]) - end - end - - # array like methods - - def size - @worktrees.size - end - - def each(&block) - @worktrees.values.each(&block) - end - - def [](worktree_name) - @worktrees.values.inject(@worktrees) do |worktrees, worktree| - worktrees[worktree.full] ||= worktree - worktrees - end[worktree_name.to_s] - end - - def to_s - out = '' - @worktrees.each do |k, b| - out << b.to_s << "\n" - end - out - end - - def prune - @base.lib.worktree_prune - end - end -end diff --git a/bundle/ruby/3.2.0/gems/json-2.7.1/CHANGES.md b/bundle/ruby/3.2.0/gems/json-2.7.1/CHANGES.md deleted file mode 100644 index 16c9f9ee..00000000 --- a/bundle/ruby/3.2.0/gems/json-2.7.1/CHANGES.md +++ /dev/null @@ -1,503 +0,0 @@ -# Changes - -### 2023-12-05 (2.7.1) - -* JSON.dump: handle unenclosed hashes regression #554 -* Overload kwargs in JSON.dump #556 -* [DOC] RDoc for additions #557 -* Fix JSON.dump overload combination #558 - -### 2023-12-01 (2.7.0) - -* Add a strict option to Generator #519 -* `escape_slash` option was renamed as `script_safe` and now also escape U+2028 and U+2029. `escape_slash` is now an alias of `script_safe` #525 -* Remove unnecessary initialization of create_id in JSON.parse() #454 -* Improvements to Hash#to_json in pure implementation generator #203 -* Use ruby_xfree to free buffers #518 -* Fix "unexpected token" offset for Infinity #507 -* Avoid using deprecated BigDecimal.new on JRuby #546 -* Removed code for Ruby 1.8 #540 -* Rename JSON::ParseError to JSON:ParserError #530 -* Call super in included hook #486 -* JRuby requires a minimum of Java 8 #516 -* Always indent even if empty #517 - -### 2022-11-30 (2.6.3) - -* bugfix json/pure mixing escaped with literal unicode raises Encoding::CompatibilityError #483 -* Stop including the parser source __LINE__ in exceptions #470 - -### 2022-11-17 (2.6.2) - -* Remove unknown keyword arg from DateTime.parse #488 -* Ignore java artifacts by @hsbt #489 -* Fix parser bug for empty string allocation #496 - -### 2021-10-24 (2.6.1) - -* Restore version.rb with 2.6.1 - -### 2021-10-14 (2.6.0) - -* Use `rb_enc_interned_str` if available to reduce allocations in `freeze: true` mode. #451. -* Bump required_ruby_version to 2.3. -* Fix compatibility with `GC.compact`. -* Fix some compilation warnings. #469 - -## 2020-12-22 (2.5.1) - -* Restore the compatibility for constants of JSON class. - -## 2020-12-22 (2.5.0) - -* Ready to Ractor-safe at Ruby 3.0. - -## 2020-12-17 (2.4.1) - -* Restore version.rb with 2.4.1 - -## 2020-12-15 (2.4.0) - -* Implement a freeze: parser option #447 -* Fix an issue with generate_pretty and empty objects in the Ruby and Java implementations #449 -* Fix JSON.load_file doc #448 -* Fix pure parser with unclosed arrays / objects #425 -* bundle the LICENSE file in the gem #444 -* Add an option to escape forward slash character #405 -* RDoc for JSON #439 #446 #442 #434 #433 #430 - -## 2020-06-30 (2.3.1) - -* Spelling and grammar fixes for comments. Pull request #191 by Josh - Kline. -* Enhance generic JSON and #generate docs. Pull request #347 by Victor - Shepelev. -* Add :nodoc: for GeneratorMethods. Pull request #349 by Victor Shepelev. -* Baseline changes to help (JRuby) development. Pull request #371 by Karol - Bucek. -* Add metadata for rubygems.org. Pull request #379 by Alexandre ZANNI. -* Remove invalid JSON.generate description from JSON module rdoc. Pull - request #384 by Jeremy Evans. -* Test with TruffleRuby in CI. Pull request #402 by Benoit Daloze. -* Rdoc enhancements. Pull request #413 by Burdette Lamar. -* Fixtures/ are not being tested... Pull request #416 by Marc-André - Lafortune. -* Use frozen string for hash key. Pull request #420 by Marc-André - Lafortune. -* Added :call-seq: to RDoc for some methods. Pull request #422 by Burdette - Lamar. -* Small typo fix. Pull request #423 by Marc-André Lafortune. - -## 2019-12-11 (2.3.0) - * Fix default of `create_additions` to always be `false` for `JSON(user_input)` - and `JSON.parse(user_input, nil)`. - Note that `JSON.load` remains with default `true` and is meant for internal - serialization of trusted data. [CVE-2020-10663] - * Fix passing args all #to_json in json/add/*. - * Fix encoding issues - * Fix issues of keyword vs positional parameter - * Fix JSON::Parser against bigdecimal updates - * Bug fixes to JRuby port - -## 2019-02-21 (2.2.0) - * Adds support for 2.6 BigDecimal and ruby standard library Set datetype. - -## 2017-04-18 (2.1.0) - * Allow passing of `decimal_class` option to specify a class as which to parse - JSON float numbers. -## 2017-03-23 (2.0.4) - * Raise exception for incomplete unicode surrogates/character escape - sequences. This problem was reported by Daniel Gollahon (dgollahon). - * Fix arbitrary heap exposure problem. This problem was reported by Ahmad - Sherif (ahmadsherif). - -## 2017-01-12 (2.0.3) - * Set `required_ruby_version` to 1.9 - * Some small fixes - -## 2016-07-26 (2.0.2) - * Specify `required_ruby_version` for json\_pure. - * Fix issue #295 failure when parsing frozen strings. - -## 2016-07-01 (2.0.1) - * Fix problem when requiring json\_pure and Parser constant was defined top - level. - * Add `RB_GC_GUARD` to avoid possible GC problem via Pete Johns. - * Store `current_nesting` on stack by Aaron Patterson. - -## 2015-09-11 (2.0.0) - * Now complies to newest JSON RFC 7159. - * Implements compatibility to ruby 2.4 integer unification. - * Drops support for old rubies whose life has ended, that is rubies < 2.0. - Also see https://www.ruby-lang.org/en/news/2014/07/01/eol-for-1-8-7-and-1-9-2/ - * There were still some mentions of dual GPL licensing in the source, but JSON - has just the Ruby license that itself includes an explicit dual-licensing - clause that allows covered software to be distributed under the terms of - the Simplified BSD License instead for all ruby versions >= 1.9.3. This is - however a GPL compatible license according to the Free Software Foundation. - I changed these mentions to be consistent with the Ruby license setting in - the gemspec files which were already correct now. - -## 2017-01-13 (1.8.6) - * Be compatible with ancient ruby 1.8 (maybe?) - -## 2015-09-11 (1.8.5) - * Be compatible with ruby 2.4.0 - * There were still some mentions of dual GPL licensing in the source, but JSON - has just the Ruby license that itself includes an explicit dual-licensing - clause that allows covered software to be distributed under the terms of - the Simplified BSD License instead for all ruby versions >= 1.9.3. This is - however a GPL compatible license according to the Free Software Foundation. - I changed these mentions to be consistent with the Ruby license setting in - the gemspec files which were already correct now. - -## 2015-06-01 (1.8.3) - * Fix potential memory leak, thx to nobu. - -## 2015-01-08 (1.8.2) - * Some performance improvements by Vipul A M . - * Fix by Jason R. Clark to avoid mutation of - `JSON.dump_default_options`. - * More tests by Michael Mac-Vicar and fixing - `space_before` accessor in generator. - * Performance on Jruby improved by Ben Browning . - * Some fixes to be compatible with the new Ruby 2.2 by Zachary Scott - and SHIBATA Hiroshi . - -## 2013-05-13 (1.8.1) - * Remove Rubinius exception since transcoding should be working now. - -## 2013-05-13 (1.8.0) - * Fix https://github.com/flori/json/issues/162 reported by Marc-Andre - Lafortune . Thanks! - * Applied patches by Yui NARUSE to suppress warning with - -Wchar-subscripts and better validate UTF-8 strings. - * Applied patch by ginriki@github to remove unnecessary if. - * Add load/dump interface to `JSON::GenericObject` to make - serialize :some_attribute, `JSON::GenericObject` - work in Rails active models for convenient `SomeModel#some_attribute.foo.bar` - access to serialised JSON data. - -## 2013-02-04 (1.7.7) - * Security fix for JSON create_additions default value and - `JSON::GenericObject`. It should not be possible to create additions unless - explicitly requested by setting the create_additions argument to true or - using the JSON.load/dump interface. If `JSON::GenericObject` is supposed to - be automatically deserialised, this has to be explicitly enabled by - setting - JSON::GenericObject.json_creatable = true - as well. - * Remove useless assert in fbuffer implementation. - * Apply patch attached to https://github.com/flori/json/issues#issue/155 - provided by John Shahid , Thx! - * Add license information to rubygems spec data, reported by Jordi Massaguer Pla . - * Improve documentation, thx to Zachary Scott . - -## 2012-11-29 (1.7.6) - * Add `GeneratorState#merge` alias for JRuby, fix state accessor methods. Thx to - jvshahid@github. - * Increase hash likeness of state objects. - -## 2012-08-17 (1.7.5) - * Fix compilation of extension on older rubies. - -## 2012-07-26 (1.7.4) - * Fix compilation problem on AIX, see https://github.com/flori/json/issues/142 - -## 2012-05-12 (1.7.3) - * Work around Rubinius encoding issues using iconv for conversion instead. - -## 2012-05-11 (1.7.2) - * Fix some encoding issues, that cause problems for the pure and the - extension variant in jruby 1.9 mode. - -## 2012-04-28 (1.7.1) - * Some small fixes for building - -## 2012-04-28 (1.7.0) - * Add `JSON::GenericObject` for method access to objects transmitted via JSON. - -## 2012-04-27 (1.6.7) - * Fix possible crash when trying to parse nil value. - -## 2012-02-11 (1.6.6) - * Propagate src encoding to values made from it (fixes 1.9 mode converting - everything to ascii-8bit; harmless for 1.8 mode too) (Thomas E. Enebo - ), should fix - https://github.com/flori/json/issues#issue/119. - * Fix https://github.com/flori/json/issues#issue/124 Thx to Jason Hutchens. - * Fix https://github.com/flori/json/issues#issue/117 - -## 2012-01-15 (1.6.5) - * Vit Ondruch reported a bug that shows up when using - optimisation under GCC 4.7. Thx to him, Bohuslav Kabrda - and Yui NARUSE for debugging and - developing a patch fix. - -## 2011-12-24 (1.6.4) - * Patches that improve speed on JRuby contributed by Charles Oliver Nutter - . - * Support `object_class`/`array_class` with duck typed hash/array. - -## 2011-12-01 (1.6.3) - * Let `JSON.load('')` return nil as well to make mysql text columns (default to - `''`) work better for serialization. - -## 2011-11-21 (1.6.2) - * Add support for OpenStruct and BigDecimal. - * Fix bug when parsing nil in `quirks_mode`. - * Make JSON.dump and JSON.load methods better cooperate with Rails' serialize - method. Just use: - serialize :value, JSON - * Fix bug with time serialization concerning nanoseconds. Thanks for the - patch go to Josh Partlow (jpartlow@github). - * Improve parsing speed for JSON numbers (integers and floats) in a similar way to - what Evan Phoenix suggested in: - https://github.com/flori/json/pull/103 - -## 2011-09-18 (1.6.1) - * Using -target 1.5 to force Java bits to compile with 1.5. - -## 2011-09-12 (1.6.0) - * Extract utilities (prettifier and GUI-editor) in its own gem json-utils. - * Split json/add/core into different files for classes to be serialised. - -## 2011-08-31 (1.5.4) - * Fix memory leak when used from multiple JRuby. (Patch by - jfirebaugh@github). - * Apply patch by Eric Wong that fixes garbage collection problem - reported in https://github.com/flori/json/issues/46. - * Add :quirks_mode option to parser and generator. - * Add support for Rational and Complex number additions via json/add/complex - and json/add/rational requires. - -## 2011-06-20 (1.5.3) - * Alias State#configure method as State#merge to increase duck type synonymy with Hash. - * Add `as_json` methods in json/add/core, so rails can create its json objects - the new way. - -## 2011-05-11 (1.5.2) - * Apply documentation patch by Cory Monty . - * Add gemspecs for json and json\_pure. - * Fix bug in jruby pretty printing. - * Fix bug in `object_class` and `array_class` when inheriting from Hash or - Array. - -## 2011-01-24 (1.5.1) - * Made rake-compiler build a fat binary gem. This should fix issue - https://github.com/flori/json/issues#issue/54. - -## 2011-01-22 (1.5.0) - * Included Java source codes for the Jruby extension made by Daniel Luz - . - * Output full exception message of `deep_const_get` to aid debugging. - * Fixed an issue with ruby 1.9 `Module#const_defined?` method, that was - reported by Riley Goodside. - -## 2010-08-09 (1.4.6) - * Fixed oversight reported in http://github.com/flori/json/issues/closed#issue/23, - always create a new object from the state prototype. - * Made pure and ext api more similar again. - -## 2010-08-07 (1.4.5) - * Manage data structure nesting depth in state object during generation. This - should reduce problems with `to_json` method definіtions that only have one - argument. - * Some fixes in the state objects and additional tests. -## 2010-08-06 (1.4.4) - * Fixes build problem for rubinius under OS X, http://github.com/flori/json/issues/closed#issue/25 - * Fixes crashes described in http://github.com/flori/json/issues/closed#issue/21 and - http://github.com/flori/json/issues/closed#issue/23 -## 2010-05-05 (1.4.3) - * Fixed some test assertions, from Ruby r27587 and r27590, patch by nobu. - * Fixed issue http://github.com/flori/json/issues/#issue/20 reported by - electronicwhisper@github. Thx! - -## 2010-04-26 (1.4.2) - * Applied patch from naruse Yui NARUSE to make building with - Microsoft Visual C possible again. - * Applied patch from devrandom in order to allow building of - json_pure if extensiontask is not present. - * Thanks to Dustin Schneider , who reported a memory - leak, which is fixed in this release. - * Applied 993f261ccb8f911d2ae57e9db48ec7acd0187283 patch from josh@github. - -## 2010-04-25 (1.4.1) - * Fix for a bug reported by Dan DeLeo , caused by T_FIXNUM - being different on 32bit/64bit architectures. - -## 2010-04-23 (1.4.0) - * Major speed improvements and building with simplified - directory/file-structure. - * Extension should at least be compatible with MRI, YARV and Rubinius. - -## 2010-04-07 (1.2.4) - * Triger const_missing callback to make Rails' dynamic class loading work. - -## 2010-03-11 (1.2.3) - * Added a `State#[]` method which returns an attribute's value in order to - increase duck type compatibility to Hash. - -## 2010-02-27 (1.2.2) - * Made some changes to make the building of the parser/generator compatible - to Rubinius. - -## 2009-11-25 (1.2.1) - * Added `:symbolize_names` option to Parser, which returns symbols instead of - strings in object names/keys. - -## 2009-10-01 (1.2.0) - * `fast_generate` now raises an exception for nan and infinite floats. - * On Ruby 1.8 json supports parsing of UTF-8, UTF-16BE, UTF-16LE, UTF-32BE, - and UTF-32LE JSON documents now. Under Ruby 1.9 the M17n conversion - functions are used to convert from all supported encodings. ASCII-8BIT - encoded strings are handled like all strings under Ruby 1.8 were. - * Better documentation - -## 2009-08-23 (1.1.9) - * Added forgotten main doc file `extra_rdoc_files`. - -## 2009-08-23 (1.1.8) - * Applied a patch by OZAWA Sakuro to make json/pure - work in environments that don't provide iconv. - * Applied patch by okkez_ in order to fix Ruby Bug #1768: - http://redmine.ruby-lang.org/issues/show/1768. - * Finally got around to avoid the rather paranoid escaping of ?/ characters - in the generator's output. The parsers aren't affected by this change. - Thanks to Rich Apodaca for the suggestion. - -## 2009-06-29 (1.1.7) - * Security Fix for JSON::Pure::Parser. A specially designed string could - cause catastrophic backtracking in one of the parser's regular expressions - in earlier 1.1.x versions. JSON::Ext::Parser isn't affected by this issue. - Thanks to Bartosz Blimke for reporting this - problem. - * This release also uses a less strict ruby version requirement for the - creation of the mswin32 native gem. - -## 2009-05-10 (1.1.6) - * No changes. І tested native linux gems in the last release and they don't - play well with different ruby versions other than the one the gem was built - with. This release is just to bump the version number in order to skip the - native gem on rubyforge. - -## 2009-05-10 (1.1.5) - * Started to build gems with rake-compiler gem. - * Applied patch object/array class patch from Brian Candler - and fixes. - -## 2009-04-01 (1.1.4) - * Fixed a bug in the creation of serialized generic rails objects reported by - Friedrich Graeter . - * Deleted tests/runner.rb, we're using testrb instead. - * Editor supports Infinity in numbers now. - * Made some changes in order to get the library to compile/run under Ruby - 1.9. - * Improved speed of the code path for the fast_generate method in the pure - variant. - -## 2008-07-10 (1.1.3) - * Wesley Beary reported a bug in json/add/core's DateTime - handling: If the nominator and denominator of the offset were divisible by - each other Ruby's Rational#to_s returns them as an integer not a fraction - with '/'. This caused a ZeroDivisionError during parsing. - * Use Date#start and DateTime#start instead of sg method, while - remaining backwards compatible. - * Supports ragel >= 6.0 now. - * Corrected some tests. - * Some minor changes. - -## 2007-11-27 (1.1.2) - * Remember default dir (last used directory) in editor. - * JSON::Editor.edit method added, the editor can now receive json texts from - the clipboard via C-v. - * Load json texts from an URL pasted via middle button press. - * Added :create_additions option to Parser. This makes it possible to disable - the creation of additions by force, in order to treat json texts as data - while having additions loaded. - * Jacob Maine reported, that JSON(:foo) outputs a JSON - object if the rails addition is enabled, which is wrong. It now outputs a - JSON string "foo" instead, like suggested by Jacob Maine. - * Discovered a bug in the Ruby Bugs Tracker on rubyforge, that was reported - by John Evans lgastako@gmail.com. He could produce a crash in the JSON - generator by returning something other than a String instance from a - to_json method. I now guard against this by doing a rather crude type - check, which raises an exception instead of crashing. - -## 2007-07-06 (1.1.1) - * Yui NARUSE sent some patches to fix tests for Ruby - 1.9. I applied them and adapted some of them a bit to run both on 1.8 and - 1.9. - * Introduced a `JSON.parse!` method without depth checking for people who - like danger. - * Made generate and `pretty_generate` methods configurable by an options hash. - * Added :allow_nan option to parser and generator in order to handle NaN, - Infinity, and -Infinity correctly - if requested. Floats, which aren't numbers, - aren't valid JSON according to RFC4627, so by default an exception will be - raised if any of these symbols are encountered. Thanks to Andrea Censi - for his hint about this. - * Fixed some more tests for Ruby 1.9. - * Implemented dump/load interface of Marshal as suggested in ruby-core:11405 - by murphy . - * Implemented the `max_nesting` feature for generate methods, too. - * Added some implementations for ruby core's custom objects for - serialisation/deserialisation purposes. - -## 2007-05-21 (1.1.0) - * Implemented max_nesting feature for parser to avoid stack overflows for - data from untrusted sources. If you trust the source, you can disable it - with the option max_nesting => false. - * Piers Cawley reported a bug, that not every - character can be escaped by `\` as required by RFC4627. There's a - contradiction between David Crockford's JSON checker test vectors (in - tests/fixtures) and RFC4627, though. I decided to stick to the RFC, because - the JSON checker seems to be a bit older than the RFC. - * Extended license to Ruby License, which includes the GPL. - * Added keyboard shortcuts, and 'Open location' menu item to edit_json.rb. - -## 2007-05-09 (1.0.4) - * Applied a patch from Yui NARUSE to make JSON compile - under Ruby 1.9. Thank you very much for mailing it to me! - * Made binary variants of JSON fail early, instead of falling back to the - pure version. This should avoid overshadowing of eventual problems while - loading of the binary. - -## 2007-03-24 (1.0.3) - * Improved performance of pure variant a bit. - * The ext variant of this release supports the mswin32 platform. Ugh! - -## 2007-03-24 (1.0.2) - * Ext Parser didn't parse 0e0 correctly into 0.0: Fixed! - -## 2007-03-24 (1.0.1) - * Forgot some object files in the build dir. I really like that - not! - -## 2007-03-24 (1.0.0) - * Added C implementations for the JSON generator and a ragel based JSON - parser in C. - * Much more tests, especially fixtures from json.org. - * Further improved conformance to RFC4627. - -## 2007-02-09 (0.4.3) - * Conform more to RFC4627 for JSON: This means JSON strings - now always must contain exactly one object `"{ ... }"` or array `"[ ... ]"` in - order to be parsed without raising an exception. The definition of what - constitutes a whitespace is narrower in JSON than in Ruby ([ \t\r\n]), and - there are differences in floats and integers (no octals or hexadecimals) as - well. - * Added aliases generate and `pretty_generate` of unparse and `pretty_unparse`. - * Fixed a test case. - * Catch an `Iconv::InvalidEncoding` exception, that seems to occur on some Sun - boxes with SunOS 5.8, if iconv doesn't support utf16 conversions. This was - reported by Andrew R Jackson , thanks a bunch! - -## 2006-08-25 (0.4.2) - * Fixed a bug in handling solidi (/-characters), that was reported by - Kevin Gilpin . - -## 2006-02-06 (0.4.1) - * Fixed a bug related to escaping with backslashes. Thanks for the report go - to Florian Munz . - -## 2005-09-23 (0.4.0) - * Initial Rubyforge Version diff --git a/bundle/ruby/3.2.0/gems/json-2.7.1/LICENSE b/bundle/ruby/3.2.0/gems/json-2.7.1/LICENSE deleted file mode 100644 index 426810a7..00000000 --- a/bundle/ruby/3.2.0/gems/json-2.7.1/LICENSE +++ /dev/null @@ -1,56 +0,0 @@ -Ruby is copyrighted free software by Yukihiro Matsumoto . -You can redistribute it and/or modify it under either the terms of the -2-clause BSDL (see the file BSDL), or the conditions below: - - 1. You may make and give away verbatim copies of the source form of the - software without restriction, provided that you duplicate all of the - original copyright notices and associated disclaimers. - - 2. You may modify your copy of the software in any way, provided that - you do at least ONE of the following: - - a) place your modifications in the Public Domain or otherwise - make them Freely Available, such as by posting said - modifications to Usenet or an equivalent medium, or by allowing - the author to include your modifications in the software. - - b) use the modified software only within your corporation or - organization. - - c) give non-standard binaries non-standard names, with - instructions on where to get the original software distribution. - - d) make other distribution arrangements with the author. - - 3. You may distribute the software in object code or binary form, - provided that you do at least ONE of the following: - - a) distribute the binaries and library files of the software, - together with instructions (in the manual page or equivalent) - on where to get the original distribution. - - b) accompany the distribution with the machine-readable source of - the software. - - c) give non-standard binaries non-standard names, with - instructions on where to get the original software distribution. - - d) make other distribution arrangements with the author. - - 4. You may modify and include the part of the software into any other - software (possibly commercial). But some files in the distribution - are not written by the author, so that they are not under these terms. - - For the list of those files and their copying conditions, see the - file LEGAL. - - 5. The scripts and library files supplied as input to or produced as - output from the software do not automatically fall under the - copyright of the software, but belong to whomever generated them, - and may be sold commercially, and may be aggregated with this - software. - - 6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR - IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - PURPOSE. diff --git a/bundle/ruby/3.2.0/gems/json-2.7.1/README.md b/bundle/ruby/3.2.0/gems/json-2.7.1/README.md deleted file mode 100644 index 981313ee..00000000 --- a/bundle/ruby/3.2.0/gems/json-2.7.1/README.md +++ /dev/null @@ -1,425 +0,0 @@ -# JSON implementation for Ruby - -[![CI](https://github.com/flori/json/actions/workflows/ci.yml/badge.svg)](https://github.com/flori/json/actions/workflows/ci.yml) - -## Description - -This is a implementation of the JSON specification according to RFC 7159 -http://www.ietf.org/rfc/rfc7159.txt . Starting from version 1.0.0 on there -will be two variants available: - -* A pure ruby variant, that relies on the iconv and the stringscan - extensions, which are both part of the ruby standard library. -* The quite a bit faster native extension variant, which is in parts - implemented in C or Java and comes with its own unicode conversion - functions and a parser generated by the [Ragel] state machine compiler. - -Both variants of the JSON generator generate UTF-8 character sequences by -default. If an :ascii\_only option with a true value is given, they escape all -non-ASCII and control characters with \uXXXX escape sequences, and support -UTF-16 surrogate pairs in order to be able to generate the whole range of -unicode code points. - -All strings, that are to be encoded as JSON strings, should be UTF-8 byte -sequences on the Ruby side. To encode raw binary strings, that aren't UTF-8 -encoded, please use the to\_json\_raw\_object method of String (which produces -an object, that contains a byte array) and decode the result on the receiving -endpoint. - -## Installation - -It's recommended to use the extension variant of JSON, because it's faster than -the pure ruby variant. If you cannot build it on your system, you can settle -for the latter. - -Just type into the command line as root: - -``` -# rake install -``` - -The above command will build the extensions and install them on your system. - -``` -# rake install_pure -``` - -or - -``` -# ruby install.rb -``` - -will just install the pure ruby implementation of JSON. - -If you use Rubygems you can type - -``` -# gem install json -``` - -instead, to install the newest JSON version. - -There is also a pure ruby json only variant of the gem, that can be installed -with: - -``` -# gem install json_pure -``` - -## Compiling the extensions yourself - -If you want to create the `parser.c` file from its `parser.rl` file or draw nice -graphviz images of the state machines, you need [Ragel]. - -## Usage - -To use JSON you can - -```ruby -require 'json' -``` - -to load the installed variant (either the extension `'json'` or the pure -variant `'json_pure'`). If you have installed the extension variant, you can -pick either the extension variant or the pure variant by typing - -```ruby -require 'json/ext' -``` - -or - -```ruby -require 'json/pure' -``` - -Now you can parse a JSON document into a ruby data structure by calling - -```ruby -JSON.parse(document) -``` - -If you want to generate a JSON document from a ruby data structure call -```ruby -JSON.generate(data) -``` - -You can also use the `pretty_generate` method (which formats the output more -verbosely and nicely) or `fast_generate` (which doesn't do any of the security -checks generate performs, e. g. nesting deepness checks). - -There are also the JSON and JSON[] methods which use parse on a String or -generate a JSON document from an array or hash: - -```ruby -document = JSON 'test' => 23 # => "{\"test\":23}" -document = JSON['test' => 23] # => "{\"test\":23}" -``` - -and - -```ruby -data = JSON '{"test":23}' # => {"test"=>23} -data = JSON['{"test":23}'] # => {"test"=>23} -``` - -You can choose to load a set of common additions to ruby core's objects if -you - -```ruby -require 'json/add/core' -``` - -After requiring this you can, e. g., serialise/deserialise Ruby ranges: - -```ruby -JSON JSON(1..10) # => 1..10 -``` - -To find out how to add JSON support to other or your own classes, read the -section "More Examples" below. - -To get the best compatibility to rails' JSON implementation, you can - -```ruby -require 'json/add/rails' -``` - -Both of the additions attempt to require `'json'` (like above) first, if it has -not been required yet. - -## Serializing exceptions - -The JSON module doesn't extend `Exception` by default. If you convert an `Exception` -object to JSON, it will by default only include the exception message. - -To include the full details, you must either load the `json/add/core` mentioned -above, or specifically load the exception addition: - -```ruby -require 'json/add/exception' -``` - -## More Examples - -To create a JSON document from a ruby data structure, you can call -`JSON.generate` like that: - -```ruby -json = JSON.generate [1, 2, {"a"=>3.141}, false, true, nil, 4..10] -# => "[1,2,{\"a\":3.141},false,true,null,\"4..10\"]" -``` - -To get back a ruby data structure from a JSON document, you have to call -JSON.parse on it: - -```ruby -JSON.parse json -# => [1, 2, {"a"=>3.141}, false, true, nil, "4..10"] -``` - -Note, that the range from the original data structure is a simple -string now. The reason for this is, that JSON doesn't support ranges -or arbitrary classes. In this case the json library falls back to call -`Object#to_json`, which is the same as `#to_s.to_json`. - -It's possible to add JSON support serialization to arbitrary classes by -simply implementing a more specialized version of the `#to_json method`, that -should return a JSON object (a hash converted to JSON with `#to_json`) like -this (don't forget the `*a` for all the arguments): - -```ruby -class Range - def to_json(*a) - { - 'json_class' => self.class.name, # = 'Range' - 'data' => [ first, last, exclude_end? ] - }.to_json(*a) - end -end -``` - -The hash key `json_class` is the class, that will be asked to deserialise the -JSON representation later. In this case it's `Range`, but any namespace of -the form `A::B` or `::A::B` will do. All other keys are arbitrary and can be -used to store the necessary data to configure the object to be deserialised. - -If the key `json_class` is found in a JSON object, the JSON parser checks -if the given class responds to the `json_create` class method. If so, it is -called with the JSON object converted to a Ruby hash. So a range can -be deserialised by implementing `Range.json_create` like this: - -```ruby -class Range - def self.json_create(o) - new(*o['data']) - end -end -``` - -Now it possible to serialise/deserialise ranges as well: - -```ruby -json = JSON.generate [1, 2, {"a"=>3.141}, false, true, nil, 4..10] -# => "[1,2,{\"a\":3.141},false,true,null,{\"json_class\":\"Range\",\"data\":[4,10,false]}]" -JSON.parse json -# => [1, 2, {"a"=>3.141}, false, true, nil, 4..10] -json = JSON.generate [1, 2, {"a"=>3.141}, false, true, nil, 4..10] -# => "[1,2,{\"a\":3.141},false,true,null,{\"json_class\":\"Range\",\"data\":[4,10,false]}]" -JSON.parse json, :create_additions => true -# => [1, 2, {"a"=>3.141}, false, true, nil, 4..10] -``` - -`JSON.generate` always creates the shortest possible string representation of a -ruby data structure in one line. This is good for data storage or network -protocols, but not so good for humans to read. Fortunately there's also -`JSON.pretty_generate` (or `JSON.pretty_generate`) that creates a more readable -output: - -```ruby - puts JSON.pretty_generate([1, 2, {"a"=>3.141}, false, true, nil, 4..10]) - [ - 1, - 2, - { - "a": 3.141 - }, - false, - true, - null, - { - "json_class": "Range", - "data": [ - 4, - 10, - false - ] - } - ] -``` - -There are also the methods `Kernel#j` for generate, and `Kernel#jj` for -`pretty_generate` output to the console, that work analogous to Core Ruby's `p` and -the `pp` library's `pp` methods. - -The script `tools/server.rb` contains a small example if you want to test, how -receiving a JSON object from a webrick server in your browser with the -JavaScript prototype library http://www.prototypejs.org works. - -## Speed Comparisons - -I have created some benchmark results (see the benchmarks/data-p4-3Ghz -subdir of the package) for the JSON-parser to estimate the speed up in the C -extension: - -``` - Comparing times (call_time_mean): - 1 ParserBenchmarkExt#parser 900 repeats: - 553.922304770 ( real) -> 21.500x - 0.001805307 - 2 ParserBenchmarkYAML#parser 1000 repeats: - 224.513358139 ( real) -> 8.714x - 0.004454078 - 3 ParserBenchmarkPure#parser 1000 repeats: - 26.755020642 ( real) -> 1.038x - 0.037376163 - 4 ParserBenchmarkRails#parser 1000 repeats: - 25.763381731 ( real) -> 1.000x - 0.038814780 - calls/sec ( time) -> speed covers - secs/call -``` - -In the table above 1 is `JSON::Ext::Parser`, 2 is `YAML.load` with YAML -compatible JSON document, 3 is is `JSON::Pure::Parser`, and 4 is -`ActiveSupport::JSON.decode`. The ActiveSupport JSON-decoder converts the -input first to YAML and then uses the YAML-parser, the conversion seems to -slow it down so much that it is only as fast as the `JSON::Pure::Parser`! - -If you look at the benchmark data you can see that this is mostly caused by -the frequent high outliers - the median of the Rails-parser runs is still -overall smaller than the median of the `JSON::Pure::Parser` runs: - -``` - Comparing times (call_time_median): - 1 ParserBenchmarkExt#parser 900 repeats: - 800.592479481 ( real) -> 26.936x - 0.001249075 - 2 ParserBenchmarkYAML#parser 1000 repeats: - 271.002390644 ( real) -> 9.118x - 0.003690004 - 3 ParserBenchmarkRails#parser 1000 repeats: - 30.227910865 ( real) -> 1.017x - 0.033082008 - 4 ParserBenchmarkPure#parser 1000 repeats: - 29.722384421 ( real) -> 1.000x - 0.033644676 - calls/sec ( time) -> speed covers - secs/call -``` - -I have benchmarked the `JSON-Generator` as well. This generated a few more -values, because there are different modes that also influence the achieved -speed: - -``` - Comparing times (call_time_mean): - 1 GeneratorBenchmarkExt#generator_fast 1000 repeats: - 547.354332608 ( real) -> 15.090x - 0.001826970 - 2 GeneratorBenchmarkExt#generator_safe 1000 repeats: - 443.968212317 ( real) -> 12.240x - 0.002252414 - 3 GeneratorBenchmarkExt#generator_pretty 900 repeats: - 375.104545883 ( real) -> 10.341x - 0.002665923 - 4 GeneratorBenchmarkPure#generator_fast 1000 repeats: - 49.978706968 ( real) -> 1.378x - 0.020008521 - 5 GeneratorBenchmarkRails#generator 1000 repeats: - 38.531868759 ( real) -> 1.062x - 0.025952543 - 6 GeneratorBenchmarkPure#generator_safe 1000 repeats: - 36.927649925 ( real) -> 1.018x 7 (>=3859) - 0.027079979 - 7 GeneratorBenchmarkPure#generator_pretty 1000 repeats: - 36.272134441 ( real) -> 1.000x 6 (>=3859) - 0.027569373 - calls/sec ( time) -> speed covers - secs/call -``` - -In the table above 1-3 are `JSON::Ext::Generator` methods. 4, 6, and 7 are -`JSON::Pure::Generator` methods and 5 is the Rails JSON generator. It is now a -bit faster than the `generator_safe` and `generator_pretty` methods of the pure -variant but slower than the others. - -To achieve the fastest JSON document output, you can use the `fast_generate` -method. Beware, that this will disable the checking for circular Ruby data -structures, which may cause JSON to go into an infinite loop. - -Here are the median comparisons for completeness' sake: - -``` - Comparing times (call_time_median): - 1 GeneratorBenchmarkExt#generator_fast 1000 repeats: - 708.258020939 ( real) -> 16.547x - 0.001411915 - 2 GeneratorBenchmarkExt#generator_safe 1000 repeats: - 569.105020353 ( real) -> 13.296x - 0.001757145 - 3 GeneratorBenchmarkExt#generator_pretty 900 repeats: - 482.825371244 ( real) -> 11.280x - 0.002071142 - 4 GeneratorBenchmarkPure#generator_fast 1000 repeats: - 62.717626652 ( real) -> 1.465x - 0.015944481 - 5 GeneratorBenchmarkRails#generator 1000 repeats: - 43.965681162 ( real) -> 1.027x - 0.022745013 - 6 GeneratorBenchmarkPure#generator_safe 1000 repeats: - 43.929073409 ( real) -> 1.026x 7 (>=3859) - 0.022763968 - 7 GeneratorBenchmarkPure#generator_pretty 1000 repeats: - 42.802514491 ( real) -> 1.000x 6 (>=3859) - 0.023363113 - calls/sec ( time) -> speed covers - secs/call -``` - -## Development - -### Release - -Update the json.gemspec and json-java.gemspec. - -``` -rbenv shell 2.6.5 -rake build -gem push pkg/json-2.3.0.gem - -rbenv shell jruby-9.2.9.0 -rake build -gem push pkg/json-2.3.0-java.gem -``` - -## Author - -Florian Frank - -## License - -Ruby License, see https://www.ruby-lang.org/en/about/license.txt. - -## Download - -The latest version of this library can be downloaded at - -* https://rubygems.org/gems/json - -Online Documentation should be located at - -* https://www.rubydoc.info/gems/json - -[Ragel]: http://www.colm.net/open-source/ragel/ diff --git a/bundle/ruby/3.2.0/gems/json-2.7.1/ext/json/Makefile b/bundle/ruby/3.2.0/gems/json-2.7.1/ext/json/Makefile deleted file mode 100644 index e24fc22a..00000000 --- a/bundle/ruby/3.2.0/gems/json-2.7.1/ext/json/Makefile +++ /dev/null @@ -1,205 +0,0 @@ - -SHELL = /bin/sh - -# V=0 quiet, V=1 verbose. other values don't work. -V = 0 -V0 = $(V:0=) -Q1 = $(V:1=) -Q = $(Q1:0=@) -ECHO1 = $(V:1=@ :) -ECHO = $(ECHO1:0=@ echo) -NULLCMD = : - -#### Start of system configuration section. #### - -srcdir = . -topdir = /opt/hostedtoolcache/Ruby/3.2.3/x64/include/ruby-3.2.0 -hdrdir = $(topdir) -arch_hdrdir = /opt/hostedtoolcache/Ruby/3.2.3/x64/include/ruby-3.2.0/x86_64-linux -PATH_SEPARATOR = : -VPATH = $(srcdir):$(arch_hdrdir)/ruby:$(hdrdir)/ruby -prefix = $(DESTDIR)/opt/hostedtoolcache/Ruby/3.2.3/x64 -rubysitearchprefix = $(rubylibprefix)/$(sitearch) -rubyarchprefix = $(rubylibprefix)/$(arch) -rubylibprefix = $(libdir)/$(RUBY_BASE_NAME) -exec_prefix = $(prefix) -vendorarchhdrdir = $(vendorhdrdir)/$(sitearch) -sitearchhdrdir = $(sitehdrdir)/$(sitearch) -rubyarchhdrdir = $(rubyhdrdir)/$(arch) -vendorhdrdir = $(rubyhdrdir)/vendor_ruby -sitehdrdir = $(rubyhdrdir)/site_ruby -rubyhdrdir = $(includedir)/$(RUBY_VERSION_NAME) -vendorarchdir = $(vendorlibdir)/$(sitearch) -vendorlibdir = $(vendordir)/$(ruby_version) -vendordir = $(rubylibprefix)/vendor_ruby -sitearchdir = $(sitelibdir)/$(sitearch) -sitelibdir = $(sitedir)/$(ruby_version) -sitedir = $(rubylibprefix)/site_ruby -rubyarchdir = $(rubylibdir)/$(arch) -rubylibdir = $(rubylibprefix)/$(ruby_version) -sitearchincludedir = $(includedir)/$(sitearch) -archincludedir = $(includedir)/$(arch) -sitearchlibdir = $(libdir)/$(sitearch) -archlibdir = $(libdir)/$(arch) -ridir = $(datarootdir)/$(RI_BASE_NAME) -mandir = $(datarootdir)/man -localedir = $(datarootdir)/locale -libdir = $(exec_prefix)/lib -psdir = $(docdir) -pdfdir = $(docdir) -dvidir = $(docdir) -htmldir = $(docdir) -infodir = $(datarootdir)/info -docdir = $(datarootdir)/doc/$(PACKAGE) -oldincludedir = $(DESTDIR)/usr/include -includedir = $(prefix)/include -runstatedir = $(localstatedir)/run -localstatedir = $(prefix)/var -sharedstatedir = $(prefix)/com -sysconfdir = $(prefix)/etc -datadir = $(datarootdir) -datarootdir = $(prefix)/share -libexecdir = $(exec_prefix)/libexec -sbindir = $(exec_prefix)/sbin -bindir = $(exec_prefix)/bin -archdir = $(rubyarchdir) - - -CC_WRAPPER = -CC = gcc -CXX = g++ -LIBRUBY = $(LIBRUBY_SO) -LIBRUBY_A = lib$(RUBY_SO_NAME)-static.a -LIBRUBYARG_SHARED = -Wl,-rpath,$(libdir) -L$(libdir) -l$(RUBY_SO_NAME) -LIBRUBYARG_STATIC = -Wl,-rpath,$(libdir) -L$(libdir) -l$(RUBY_SO_NAME)-static $(MAINLIBS) -empty = -OUTFLAG = -o $(empty) -COUTFLAG = -o $(empty) -CSRCFLAG = $(empty) - -RUBY_EXTCONF_H = -cflags = $(optflags) $(debugflags) $(warnflags) -cxxflags = -optflags = -O3 -fno-fast-math -debugflags = -ggdb3 -warnflags = -Wall -Wextra -Wdeprecated-declarations -Wdiv-by-zero -Wduplicated-cond -Wimplicit-function-declaration -Wimplicit-int -Wmisleading-indentation -Wpointer-arith -Wwrite-strings -Wold-style-definition -Wimplicit-fallthrough=0 -Wmissing-noreturn -Wno-cast-function-type -Wno-constant-logical-operand -Wno-long-long -Wno-missing-field-initializers -Wno-overlength-strings -Wno-packed-bitfield-compat -Wno-parentheses-equality -Wno-self-assign -Wno-tautological-compare -Wno-unused-parameter -Wno-unused-value -Wsuggest-attribute=format -Wsuggest-attribute=noreturn -Wunused-variable -Wundef -cppflags = -CCDLFLAGS = -fPIC -CFLAGS = $(CCDLFLAGS) $(cflags) -fPIC $(ARCH_FLAG) -INCFLAGS = -I. -I$(arch_hdrdir) -I$(hdrdir)/ruby/backward -I$(hdrdir) -I$(srcdir) -DEFS = -CPPFLAGS = -DENABLE_PATH_CHECK=0 $(DEFS) $(cppflags) -CXXFLAGS = $(CCDLFLAGS) $(ARCH_FLAG) -ldflags = -L. -fstack-protector-strong -rdynamic -Wl,-export-dynamic -Wl,--no-as-needed -dldflags = -Wl,--compress-debug-sections=zlib -ARCH_FLAG = -DLDFLAGS = $(ldflags) $(dldflags) $(ARCH_FLAG) -LDSHARED = $(CC) -shared -LDSHAREDXX = $(CXX) -shared -AR = gcc-ar -EXEEXT = - -RUBY_INSTALL_NAME = $(RUBY_BASE_NAME) -RUBY_SO_NAME = ruby -RUBYW_INSTALL_NAME = -RUBY_VERSION_NAME = $(RUBY_BASE_NAME)-$(ruby_version) -RUBYW_BASE_NAME = rubyw -RUBY_BASE_NAME = ruby - -arch = x86_64-linux -sitearch = $(arch) -ruby_version = 3.2.0 -ruby = $(bindir)/$(RUBY_BASE_NAME) -RUBY = $(ruby) -BUILTRUBY = $(bindir)/$(RUBY_BASE_NAME) -ruby_headers = $(hdrdir)/ruby.h $(hdrdir)/ruby/backward.h $(hdrdir)/ruby/ruby.h $(hdrdir)/ruby/defines.h $(hdrdir)/ruby/missing.h $(hdrdir)/ruby/intern.h $(hdrdir)/ruby/st.h $(hdrdir)/ruby/subst.h $(arch_hdrdir)/ruby/config.h - -RM = rm -f -RM_RF = rm -fr -RMDIRS = rmdir --ignore-fail-on-non-empty -p -MAKEDIRS = /usr/bin/mkdir -p -INSTALL = /usr/bin/install -c -INSTALL_PROG = $(INSTALL) -m 0755 -INSTALL_DATA = $(INSTALL) -m 644 -COPY = cp -TOUCH = exit > - -#### End of system configuration section. #### - -preload = -libpath = . $(libdir) -LIBPATH = -L. -L$(libdir) -Wl,-rpath,$(libdir) -DEFFILE = - -CLEANFILES = mkmf.log -DISTCLEANFILES = -DISTCLEANDIRS = - -extout = -extout_prefix = -target_prefix = -LOCAL_LIBS = -LIBS = $(LIBRUBYARG_SHARED) -lm -lpthread -lc -ORIG_SRCS = -SRCS = $(ORIG_SRCS) -OBJS = -HDRS = -LOCAL_HDRS = -TARGET = -TARGET_NAME = -TARGET_ENTRY = Init_$(TARGET_NAME) -DLLIB = -EXTSTATIC = -STATIC_LIB = - -TIMESTAMP_DIR = . -BINDIR = $(bindir) -RUBYCOMMONDIR = $(sitedir)$(target_prefix) -RUBYLIBDIR = $(sitelibdir)$(target_prefix) -RUBYARCHDIR = $(sitearchdir)$(target_prefix) -HDRDIR = $(sitehdrdir)$(target_prefix) -ARCHHDRDIR = $(sitearchhdrdir)$(target_prefix) -TARGET_SO_DIR = -TARGET_SO = $(TARGET_SO_DIR)$(DLLIB) -CLEANLIBS = false -CLEANOBJS = $(OBJS) *.bak -TARGET_SO_DIR_TIMESTAMP = $(TIMESTAMP_DIR)/.sitearchdir.time - -all: Makefile -static: $(STATIC_LIB) -.PHONY: all install static install-so install-rb -.PHONY: clean clean-so clean-static clean-rb - -clean-static:: -clean-rb-default:: -clean-rb:: -clean-so:: -clean: clean-so clean-static clean-rb-default clean-rb - -$(Q)$(RM_RF) $(CLEANLIBS) $(CLEANOBJS) $(CLEANFILES) .*.time - -distclean-rb-default:: -distclean-rb:: -distclean-so:: -distclean-static:: -distclean: clean distclean-so distclean-static distclean-rb-default distclean-rb - -$(Q)$(RM) Makefile $(RUBY_EXTCONF_H) conftest.* mkmf.log - -$(Q)$(RM) core ruby$(EXEEXT) *~ $(DISTCLEANFILES) - -$(Q)$(RMDIRS) $(DISTCLEANDIRS) 2> /dev/null || true - -realclean: distclean -install: install-so install-rb - -install-so: Makefile -install-rb: pre-install-rb do-install-rb install-rb-default -install-rb-default: pre-install-rb-default do-install-rb-default -pre-install-rb: Makefile -pre-install-rb-default: Makefile -do-install-rb: -do-install-rb-default: -pre-install-rb-default: - @$(NULLCMD) - -site-install: site-install-so site-install-rb -site-install-so: install-so -site-install-rb: install-rb - diff --git a/bundle/ruby/3.2.0/gems/json-2.7.1/ext/json/ext/fbuffer/fbuffer.h b/bundle/ruby/3.2.0/gems/json-2.7.1/ext/json/ext/fbuffer/fbuffer.h deleted file mode 100644 index dc8f406b..00000000 --- a/bundle/ruby/3.2.0/gems/json-2.7.1/ext/json/ext/fbuffer/fbuffer.h +++ /dev/null @@ -1,187 +0,0 @@ - -#ifndef _FBUFFER_H_ -#define _FBUFFER_H_ - -#include "ruby.h" - -#ifndef RHASH_SIZE -#define RHASH_SIZE(hsh) (RHASH(hsh)->tbl->num_entries) -#endif - -#ifndef RFLOAT_VALUE -#define RFLOAT_VALUE(val) (RFLOAT(val)->value) -#endif - -#ifndef RARRAY_LEN -#define RARRAY_LEN(ARRAY) RARRAY(ARRAY)->len -#endif -#ifndef RSTRING_PTR -#define RSTRING_PTR(string) RSTRING(string)->ptr -#endif -#ifndef RSTRING_LEN -#define RSTRING_LEN(string) RSTRING(string)->len -#endif - -#ifdef PRIsVALUE -# define RB_OBJ_CLASSNAME(obj) rb_obj_class(obj) -# define RB_OBJ_STRING(obj) (obj) -#else -# define PRIsVALUE "s" -# define RB_OBJ_CLASSNAME(obj) rb_obj_classname(obj) -# define RB_OBJ_STRING(obj) StringValueCStr(obj) -#endif - -#ifdef HAVE_RUBY_ENCODING_H -#include "ruby/encoding.h" -#define FORCE_UTF8(obj) rb_enc_associate((obj), rb_utf8_encoding()) -#else -#define FORCE_UTF8(obj) -#endif - -/* We don't need to guard objects for rbx, so let's do nothing at all. */ -#ifndef RB_GC_GUARD -#define RB_GC_GUARD(object) -#endif - -typedef struct FBufferStruct { - unsigned long initial_length; - char *ptr; - unsigned long len; - unsigned long capa; -} FBuffer; - -#define FBUFFER_INITIAL_LENGTH_DEFAULT 1024 - -#define FBUFFER_PTR(fb) (fb->ptr) -#define FBUFFER_LEN(fb) (fb->len) -#define FBUFFER_CAPA(fb) (fb->capa) -#define FBUFFER_PAIR(fb) FBUFFER_PTR(fb), FBUFFER_LEN(fb) - -static FBuffer *fbuffer_alloc(unsigned long initial_length); -static void fbuffer_free(FBuffer *fb); -static void fbuffer_clear(FBuffer *fb); -static void fbuffer_append(FBuffer *fb, const char *newstr, unsigned long len); -#ifdef JSON_GENERATOR -static void fbuffer_append_long(FBuffer *fb, long number); -#endif -static void fbuffer_append_char(FBuffer *fb, char newchr); -#ifdef JSON_GENERATOR -static FBuffer *fbuffer_dup(FBuffer *fb); -static VALUE fbuffer_to_s(FBuffer *fb); -#endif - -static FBuffer *fbuffer_alloc(unsigned long initial_length) -{ - FBuffer *fb; - if (initial_length <= 0) initial_length = FBUFFER_INITIAL_LENGTH_DEFAULT; - fb = ALLOC(FBuffer); - memset((void *) fb, 0, sizeof(FBuffer)); - fb->initial_length = initial_length; - return fb; -} - -static void fbuffer_free(FBuffer *fb) -{ - if (fb->ptr) ruby_xfree(fb->ptr); - ruby_xfree(fb); -} - -static void fbuffer_clear(FBuffer *fb) -{ - fb->len = 0; -} - -static void fbuffer_inc_capa(FBuffer *fb, unsigned long requested) -{ - unsigned long required; - - if (!fb->ptr) { - fb->ptr = ALLOC_N(char, fb->initial_length); - fb->capa = fb->initial_length; - } - - for (required = fb->capa; requested > required - fb->len; required <<= 1); - - if (required > fb->capa) { - REALLOC_N(fb->ptr, char, required); - fb->capa = required; - } -} - -static void fbuffer_append(FBuffer *fb, const char *newstr, unsigned long len) -{ - if (len > 0) { - fbuffer_inc_capa(fb, len); - MEMCPY(fb->ptr + fb->len, newstr, char, len); - fb->len += len; - } -} - -#ifdef JSON_GENERATOR -static void fbuffer_append_str(FBuffer *fb, VALUE str) -{ - const char *newstr = StringValuePtr(str); - unsigned long len = RSTRING_LEN(str); - - RB_GC_GUARD(str); - - fbuffer_append(fb, newstr, len); -} -#endif - -static void fbuffer_append_char(FBuffer *fb, char newchr) -{ - fbuffer_inc_capa(fb, 1); - *(fb->ptr + fb->len) = newchr; - fb->len++; -} - -#ifdef JSON_GENERATOR -static void freverse(char *start, char *end) -{ - char c; - - while (end > start) { - c = *end, *end-- = *start, *start++ = c; - } -} - -static long fltoa(long number, char *buf) -{ - static char digits[] = "0123456789"; - long sign = number; - char* tmp = buf; - - if (sign < 0) number = -number; - do *tmp++ = digits[number % 10]; while (number /= 10); - if (sign < 0) *tmp++ = '-'; - freverse(buf, tmp - 1); - return tmp - buf; -} - -static void fbuffer_append_long(FBuffer *fb, long number) -{ - char buf[20]; - unsigned long len = fltoa(number, buf); - fbuffer_append(fb, buf, len); -} - -static FBuffer *fbuffer_dup(FBuffer *fb) -{ - unsigned long len = fb->len; - FBuffer *result; - - result = fbuffer_alloc(len); - fbuffer_append(result, FBUFFER_PAIR(fb)); - return result; -} - -static VALUE fbuffer_to_s(FBuffer *fb) -{ - VALUE result = rb_str_new(FBUFFER_PTR(fb), FBUFFER_LEN(fb)); - fbuffer_free(fb); - FORCE_UTF8(result); - return result; -} -#endif -#endif diff --git a/bundle/ruby/3.2.0/gems/json-2.7.1/ext/json/ext/generator/Makefile b/bundle/ruby/3.2.0/gems/json-2.7.1/ext/json/ext/generator/Makefile deleted file mode 100644 index e5adfe76..00000000 --- a/bundle/ruby/3.2.0/gems/json-2.7.1/ext/json/ext/generator/Makefile +++ /dev/null @@ -1,270 +0,0 @@ - -SHELL = /bin/sh - -# V=0 quiet, V=1 verbose. other values don't work. -V = 0 -V0 = $(V:0=) -Q1 = $(V:1=) -Q = $(Q1:0=@) -ECHO1 = $(V:1=@ :) -ECHO = $(ECHO1:0=@ echo) -NULLCMD = : - -#### Start of system configuration section. #### - -srcdir = . -topdir = /opt/hostedtoolcache/Ruby/3.2.3/x64/include/ruby-3.2.0 -hdrdir = $(topdir) -arch_hdrdir = /opt/hostedtoolcache/Ruby/3.2.3/x64/include/ruby-3.2.0/x86_64-linux -PATH_SEPARATOR = : -VPATH = $(srcdir):$(arch_hdrdir)/ruby:$(hdrdir)/ruby -prefix = $(DESTDIR)/opt/hostedtoolcache/Ruby/3.2.3/x64 -rubysitearchprefix = $(rubylibprefix)/$(sitearch) -rubyarchprefix = $(rubylibprefix)/$(arch) -rubylibprefix = $(libdir)/$(RUBY_BASE_NAME) -exec_prefix = $(prefix) -vendorarchhdrdir = $(vendorhdrdir)/$(sitearch) -sitearchhdrdir = $(sitehdrdir)/$(sitearch) -rubyarchhdrdir = $(rubyhdrdir)/$(arch) -vendorhdrdir = $(rubyhdrdir)/vendor_ruby -sitehdrdir = $(rubyhdrdir)/site_ruby -rubyhdrdir = $(includedir)/$(RUBY_VERSION_NAME) -vendorarchdir = $(vendorlibdir)/$(sitearch) -vendorlibdir = $(vendordir)/$(ruby_version) -vendordir = $(rubylibprefix)/vendor_ruby -sitearchdir = $(sitelibdir)/$(sitearch) -sitelibdir = $(sitedir)/$(ruby_version) -sitedir = $(rubylibprefix)/site_ruby -rubyarchdir = $(rubylibdir)/$(arch) -rubylibdir = $(rubylibprefix)/$(ruby_version) -sitearchincludedir = $(includedir)/$(sitearch) -archincludedir = $(includedir)/$(arch) -sitearchlibdir = $(libdir)/$(sitearch) -archlibdir = $(libdir)/$(arch) -ridir = $(datarootdir)/$(RI_BASE_NAME) -mandir = $(datarootdir)/man -localedir = $(datarootdir)/locale -libdir = $(exec_prefix)/lib -psdir = $(docdir) -pdfdir = $(docdir) -dvidir = $(docdir) -htmldir = $(docdir) -infodir = $(datarootdir)/info -docdir = $(datarootdir)/doc/$(PACKAGE) -oldincludedir = $(DESTDIR)/usr/include -includedir = $(prefix)/include -runstatedir = $(localstatedir)/run -localstatedir = $(prefix)/var -sharedstatedir = $(prefix)/com -sysconfdir = $(prefix)/etc -datadir = $(datarootdir) -datarootdir = $(prefix)/share -libexecdir = $(exec_prefix)/libexec -sbindir = $(exec_prefix)/sbin -bindir = $(exec_prefix)/bin -archdir = $(rubyarchdir) - - -CC_WRAPPER = -CC = gcc -CXX = g++ -LIBRUBY = $(LIBRUBY_SO) -LIBRUBY_A = lib$(RUBY_SO_NAME)-static.a -LIBRUBYARG_SHARED = -Wl,-rpath,$(libdir) -L$(libdir) -l$(RUBY_SO_NAME) -LIBRUBYARG_STATIC = -Wl,-rpath,$(libdir) -L$(libdir) -l$(RUBY_SO_NAME)-static $(MAINLIBS) -empty = -OUTFLAG = -o $(empty) -COUTFLAG = -o $(empty) -CSRCFLAG = $(empty) - -RUBY_EXTCONF_H = -cflags = $(optflags) $(debugflags) $(warnflags) -cxxflags = -optflags = -O3 -fno-fast-math -debugflags = -ggdb3 -warnflags = -Wall -Wextra -Wdeprecated-declarations -Wdiv-by-zero -Wduplicated-cond -Wimplicit-function-declaration -Wimplicit-int -Wmisleading-indentation -Wpointer-arith -Wwrite-strings -Wold-style-definition -Wimplicit-fallthrough=0 -Wmissing-noreturn -Wno-cast-function-type -Wno-constant-logical-operand -Wno-long-long -Wno-missing-field-initializers -Wno-overlength-strings -Wno-packed-bitfield-compat -Wno-parentheses-equality -Wno-self-assign -Wno-tautological-compare -Wno-unused-parameter -Wno-unused-value -Wsuggest-attribute=format -Wsuggest-attribute=noreturn -Wunused-variable -Wundef -cppflags = -CCDLFLAGS = -fPIC -CFLAGS = $(CCDLFLAGS) $(cflags) -fPIC $(ARCH_FLAG) -INCFLAGS = -I. -I$(arch_hdrdir) -I$(hdrdir)/ruby/backward -I$(hdrdir) -I$(srcdir) -DEFS = -CPPFLAGS = -DJSON_GENERATOR -DENABLE_PATH_CHECK=0 $(DEFS) $(cppflags) -CXXFLAGS = $(CCDLFLAGS) $(ARCH_FLAG) -ldflags = -L. -fstack-protector-strong -rdynamic -Wl,-export-dynamic -Wl,--no-as-needed -dldflags = -Wl,--compress-debug-sections=zlib -ARCH_FLAG = -DLDFLAGS = $(ldflags) $(dldflags) $(ARCH_FLAG) -LDSHARED = $(CC) -shared -LDSHAREDXX = $(CXX) -shared -AR = gcc-ar -EXEEXT = - -RUBY_INSTALL_NAME = $(RUBY_BASE_NAME) -RUBY_SO_NAME = ruby -RUBYW_INSTALL_NAME = -RUBY_VERSION_NAME = $(RUBY_BASE_NAME)-$(ruby_version) -RUBYW_BASE_NAME = rubyw -RUBY_BASE_NAME = ruby - -arch = x86_64-linux -sitearch = $(arch) -ruby_version = 3.2.0 -ruby = $(bindir)/$(RUBY_BASE_NAME) -RUBY = $(ruby) -BUILTRUBY = $(bindir)/$(RUBY_BASE_NAME) -ruby_headers = $(hdrdir)/ruby.h $(hdrdir)/ruby/backward.h $(hdrdir)/ruby/ruby.h $(hdrdir)/ruby/defines.h $(hdrdir)/ruby/missing.h $(hdrdir)/ruby/intern.h $(hdrdir)/ruby/st.h $(hdrdir)/ruby/subst.h $(arch_hdrdir)/ruby/config.h - -RM = rm -f -RM_RF = rm -fr -RMDIRS = rmdir --ignore-fail-on-non-empty -p -MAKEDIRS = /usr/bin/mkdir -p -INSTALL = /usr/bin/install -c -INSTALL_PROG = $(INSTALL) -m 0755 -INSTALL_DATA = $(INSTALL) -m 644 -COPY = cp -TOUCH = exit > - -#### End of system configuration section. #### - -preload = -libpath = . $(libdir) -LIBPATH = -L. -L$(libdir) -Wl,-rpath,$(libdir) -DEFFILE = - -CLEANFILES = mkmf.log -DISTCLEANFILES = -DISTCLEANDIRS = - -extout = -extout_prefix = -target_prefix = /json/ext -LOCAL_LIBS = -LIBS = $(LIBRUBYARG_SHARED) -lm -lpthread -lc -ORIG_SRCS = generator.c -SRCS = $(ORIG_SRCS) -OBJS = generator.o -HDRS = $(srcdir)/generator.h -LOCAL_HDRS = -TARGET = generator -TARGET_NAME = generator -TARGET_ENTRY = Init_$(TARGET_NAME) -DLLIB = $(TARGET).so -EXTSTATIC = -STATIC_LIB = - -TIMESTAMP_DIR = . -BINDIR = $(bindir) -RUBYCOMMONDIR = $(sitedir)$(target_prefix) -RUBYLIBDIR = $(sitelibdir)$(target_prefix) -RUBYARCHDIR = $(sitearchdir)$(target_prefix) -HDRDIR = $(sitehdrdir)$(target_prefix) -ARCHHDRDIR = $(sitearchhdrdir)$(target_prefix) -TARGET_SO_DIR = -TARGET_SO = $(TARGET_SO_DIR)$(DLLIB) -CLEANLIBS = $(TARGET_SO) false -CLEANOBJS = $(OBJS) *.bak -TARGET_SO_DIR_TIMESTAMP = $(TIMESTAMP_DIR)/.sitearchdir.-.json.-.ext.time - -all: $(DLLIB) -static: $(STATIC_LIB) -.PHONY: all install static install-so install-rb -.PHONY: clean clean-so clean-static clean-rb - -clean-static:: -clean-rb-default:: -clean-rb:: -clean-so:: -clean: clean-so clean-static clean-rb-default clean-rb - -$(Q)$(RM_RF) $(CLEANLIBS) $(CLEANOBJS) $(CLEANFILES) .*.time - -distclean-rb-default:: -distclean-rb:: -distclean-so:: -distclean-static:: -distclean: clean distclean-so distclean-static distclean-rb-default distclean-rb - -$(Q)$(RM) Makefile $(RUBY_EXTCONF_H) conftest.* mkmf.log - -$(Q)$(RM) core ruby$(EXEEXT) *~ $(DISTCLEANFILES) - -$(Q)$(RMDIRS) $(DISTCLEANDIRS) 2> /dev/null || true - -realclean: distclean -install: install-so install-rb - -install-so: $(DLLIB) $(TARGET_SO_DIR_TIMESTAMP) - $(INSTALL_PROG) $(DLLIB) $(RUBYARCHDIR) -clean-static:: - -$(Q)$(RM) $(STATIC_LIB) -install-rb: pre-install-rb do-install-rb install-rb-default -install-rb-default: pre-install-rb-default do-install-rb-default -pre-install-rb: Makefile -pre-install-rb-default: Makefile -do-install-rb: -do-install-rb-default: -pre-install-rb-default: - @$(NULLCMD) -$(TARGET_SO_DIR_TIMESTAMP): - $(Q) $(MAKEDIRS) $(@D) $(RUBYARCHDIR) - $(Q) $(TOUCH) $@ - -site-install: site-install-so site-install-rb -site-install-so: install-so -site-install-rb: install-rb - -.SUFFIXES: .c .m .cc .mm .cxx .cpp .o .S - -.cc.o: - $(ECHO) compiling $(<) - $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$< - -.cc.S: - $(ECHO) translating $(<) - $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$< - -.mm.o: - $(ECHO) compiling $(<) - $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$< - -.mm.S: - $(ECHO) translating $(<) - $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$< - -.cxx.o: - $(ECHO) compiling $(<) - $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$< - -.cxx.S: - $(ECHO) translating $(<) - $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$< - -.cpp.o: - $(ECHO) compiling $(<) - $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$< - -.cpp.S: - $(ECHO) translating $(<) - $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$< - -.c.o: - $(ECHO) compiling $(<) - $(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$< - -.c.S: - $(ECHO) translating $(<) - $(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$< - -.m.o: - $(ECHO) compiling $(<) - $(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$< - -.m.S: - $(ECHO) translating $(<) - $(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$< - -$(TARGET_SO): $(OBJS) Makefile - $(ECHO) linking shared-object json/ext/$(DLLIB) - -$(Q)$(RM) $(@) - $(Q) $(LDSHARED) -o $@ $(OBJS) $(LIBPATH) $(DLDFLAGS) $(LOCAL_LIBS) $(LIBS) - - - -### -generator.o: generator.c generator.h $(srcdir)/../fbuffer/fbuffer.h diff --git a/bundle/ruby/3.2.0/gems/json-2.7.1/ext/json/ext/generator/depend b/bundle/ruby/3.2.0/gems/json-2.7.1/ext/json/ext/generator/depend deleted file mode 100644 index 1a042a25..00000000 --- a/bundle/ruby/3.2.0/gems/json-2.7.1/ext/json/ext/generator/depend +++ /dev/null @@ -1 +0,0 @@ -generator.o: generator.c generator.h $(srcdir)/../fbuffer/fbuffer.h diff --git a/bundle/ruby/3.2.0/gems/json-2.7.1/ext/json/ext/generator/extconf.rb b/bundle/ruby/3.2.0/gems/json-2.7.1/ext/json/ext/generator/extconf.rb deleted file mode 100644 index 8627c5f4..00000000 --- a/bundle/ruby/3.2.0/gems/json-2.7.1/ext/json/ext/generator/extconf.rb +++ /dev/null @@ -1,4 +0,0 @@ -require 'mkmf' - -$defs << "-DJSON_GENERATOR" -create_makefile 'json/ext/generator' diff --git a/bundle/ruby/3.2.0/gems/json-2.7.1/ext/json/ext/generator/generator.c b/bundle/ruby/3.2.0/gems/json-2.7.1/ext/json/ext/generator/generator.c deleted file mode 100644 index a71acfbb..00000000 --- a/bundle/ruby/3.2.0/gems/json-2.7.1/ext/json/ext/generator/generator.c +++ /dev/null @@ -1,1673 +0,0 @@ -#include "../fbuffer/fbuffer.h" -#include "generator.h" - -static VALUE mJSON, mExt, mGenerator, cState, mGeneratorMethods, mObject, - mHash, mArray, -#ifdef RUBY_INTEGER_UNIFICATION - mInteger, -#else - mFixnum, mBignum, -#endif - mFloat, mString, mString_Extend, - mTrueClass, mFalseClass, mNilClass, eGeneratorError, - eNestingError; - -static ID i_to_s, i_to_json, i_new, i_indent, i_space, i_space_before, - i_object_nl, i_array_nl, i_max_nesting, i_allow_nan, i_ascii_only, - i_pack, i_unpack, i_create_id, i_extend, i_key_p, - i_aref, i_send, i_respond_to_p, i_match, i_keys, i_depth, - i_buffer_initial_length, i_dup, i_script_safe, i_escape_slash, i_strict; - -/* - * Copyright 2001-2004 Unicode, Inc. - * - * Disclaimer - * - * This source code is provided as is by Unicode, Inc. No claims are - * made as to fitness for any particular purpose. No warranties of any - * kind are expressed or implied. The recipient agrees to determine - * applicability of information provided. If this file has been - * purchased on magnetic or optical media from Unicode, Inc., the - * sole remedy for any claim will be exchange of defective media - * within 90 days of receipt. - * - * Limitations on Rights to Redistribute This Code - * - * Unicode, Inc. hereby grants the right to freely use the information - * supplied in this file in the creation of products supporting the - * Unicode Standard, and to make copies of this file in any form - * for internal or external distribution as long as this notice - * remains attached. - */ - -/* - * Index into the table below with the first byte of a UTF-8 sequence to - * get the number of trailing bytes that are supposed to follow it. - * Note that *legal* UTF-8 values can't have 4 or 5-bytes. The table is - * left as-is for anyone who may want to do such conversion, which was - * allowed in earlier algorithms. - */ -static const char trailingBytesForUTF8[256] = { - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, 3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5 -}; - -/* - * Magic values subtracted from a buffer value during UTF8 conversion. - * This table contains as many values as there might be trailing bytes - * in a UTF-8 sequence. - */ -static const UTF32 offsetsFromUTF8[6] = { 0x00000000UL, 0x00003080UL, 0x000E2080UL, - 0x03C82080UL, 0xFA082080UL, 0x82082080UL }; - -/* - * Utility routine to tell whether a sequence of bytes is legal UTF-8. - * This must be called with the length pre-determined by the first byte. - * If not calling this from ConvertUTF8to*, then the length can be set by: - * length = trailingBytesForUTF8[*source]+1; - * and the sequence is illegal right away if there aren't that many bytes - * available. - * If presented with a length > 4, this returns 0. The Unicode - * definition of UTF-8 goes up to 4-byte sequences. - */ -static unsigned char isLegalUTF8(const UTF8 *source, unsigned long length) -{ - UTF8 a; - const UTF8 *srcptr = source+length; - switch (length) { - default: return 0; - /* Everything else falls through when "1"... */ - case 4: if ((a = (*--srcptr)) < 0x80 || a > 0xBF) return 0; - case 3: if ((a = (*--srcptr)) < 0x80 || a > 0xBF) return 0; - case 2: if ((a = (*--srcptr)) > 0xBF) return 0; - - switch (*source) { - /* no fall-through in this inner switch */ - case 0xE0: if (a < 0xA0) return 0; break; - case 0xED: if (a > 0x9F) return 0; break; - case 0xF0: if (a < 0x90) return 0; break; - case 0xF4: if (a > 0x8F) return 0; break; - default: if (a < 0x80) return 0; - } - - case 1: if (*source >= 0x80 && *source < 0xC2) return 0; - } - if (*source > 0xF4) return 0; - return 1; -} - -/* Escapes the UTF16 character and stores the result in the buffer buf. */ -static void unicode_escape(char *buf, UTF16 character) -{ - const char *digits = "0123456789abcdef"; - - buf[2] = digits[character >> 12]; - buf[3] = digits[(character >> 8) & 0xf]; - buf[4] = digits[(character >> 4) & 0xf]; - buf[5] = digits[character & 0xf]; -} - -/* Escapes the UTF16 character and stores the result in the buffer buf, then - * the buffer buf is appended to the FBuffer buffer. */ -static void unicode_escape_to_buffer(FBuffer *buffer, char buf[6], UTF16 - character) -{ - unicode_escape(buf, character); - fbuffer_append(buffer, buf, 6); -} - -/* Converts string to a JSON string in FBuffer buffer, where all but the ASCII - * and control characters are JSON escaped. */ -static void convert_UTF8_to_JSON_ASCII(FBuffer *buffer, VALUE string, char script_safe) -{ - const UTF8 *source = (UTF8 *) RSTRING_PTR(string); - const UTF8 *sourceEnd = source + RSTRING_LEN(string); - char buf[6] = { '\\', 'u' }; - - while (source < sourceEnd) { - UTF32 ch = 0; - unsigned short extraBytesToRead = trailingBytesForUTF8[*source]; - if (source + extraBytesToRead >= sourceEnd) { - rb_raise(rb_path2class("JSON::GeneratorError"), - "partial character in source, but hit end"); - } - if (!isLegalUTF8(source, extraBytesToRead+1)) { - rb_raise(rb_path2class("JSON::GeneratorError"), - "source sequence is illegal/malformed utf-8"); - } - /* - * The cases all fall through. See "Note A" below. - */ - switch (extraBytesToRead) { - case 5: ch += *source++; ch <<= 6; /* remember, illegal UTF-8 */ - case 4: ch += *source++; ch <<= 6; /* remember, illegal UTF-8 */ - case 3: ch += *source++; ch <<= 6; - case 2: ch += *source++; ch <<= 6; - case 1: ch += *source++; ch <<= 6; - case 0: ch += *source++; - } - ch -= offsetsFromUTF8[extraBytesToRead]; - - if (ch <= UNI_MAX_BMP) { /* Target is a character <= 0xFFFF */ - /* UTF-16 surrogate values are illegal in UTF-32 */ - if (ch >= UNI_SUR_HIGH_START && ch <= UNI_SUR_LOW_END) { -#if UNI_STRICT_CONVERSION - source -= (extraBytesToRead+1); /* return to the illegal value itself */ - rb_raise(rb_path2class("JSON::GeneratorError"), - "source sequence is illegal/malformed utf-8"); -#else - unicode_escape_to_buffer(buffer, buf, UNI_REPLACEMENT_CHAR); -#endif - } else { - /* normal case */ - if (ch >= 0x20 && ch <= 0x7f) { - switch (ch) { - case '\\': - fbuffer_append(buffer, "\\\\", 2); - break; - case '"': - fbuffer_append(buffer, "\\\"", 2); - break; - case '/': - if(script_safe) { - fbuffer_append(buffer, "\\/", 2); - break; - } - default: - fbuffer_append_char(buffer, (char)ch); - break; - } - } else { - switch (ch) { - case '\n': - fbuffer_append(buffer, "\\n", 2); - break; - case '\r': - fbuffer_append(buffer, "\\r", 2); - break; - case '\t': - fbuffer_append(buffer, "\\t", 2); - break; - case '\f': - fbuffer_append(buffer, "\\f", 2); - break; - case '\b': - fbuffer_append(buffer, "\\b", 2); - break; - default: - unicode_escape_to_buffer(buffer, buf, (UTF16) ch); - break; - } - } - } - } else if (ch > UNI_MAX_UTF16) { -#if UNI_STRICT_CONVERSION - source -= (extraBytesToRead+1); /* return to the start */ - rb_raise(rb_path2class("JSON::GeneratorError"), - "source sequence is illegal/malformed utf8"); -#else - unicode_escape_to_buffer(buffer, buf, UNI_REPLACEMENT_CHAR); -#endif - } else { - /* target is a character in range 0xFFFF - 0x10FFFF. */ - ch -= halfBase; - unicode_escape_to_buffer(buffer, buf, (UTF16)((ch >> halfShift) + UNI_SUR_HIGH_START)); - unicode_escape_to_buffer(buffer, buf, (UTF16)((ch & halfMask) + UNI_SUR_LOW_START)); - } - } - RB_GC_GUARD(string); -} - -/* Converts string to a JSON string in FBuffer buffer, where only the - * characters required by the JSON standard are JSON escaped. The remaining - * characters (should be UTF8) are just passed through and appended to the - * result. */ -static void convert_UTF8_to_JSON(FBuffer *buffer, VALUE string, char script_safe) -{ - const char *ptr = RSTRING_PTR(string), *p; - unsigned long len = RSTRING_LEN(string), start = 0, end = 0; - const char *escape = NULL; - int escape_len; - unsigned char c; - char buf[6] = { '\\', 'u' }; - int ascii_only = rb_enc_str_asciionly_p(string); - - for (start = 0, end = 0; end < len;) { - p = ptr + end; - c = (unsigned char) *p; - if (c < 0x20) { - switch (c) { - case '\n': - escape = "\\n"; - escape_len = 2; - break; - case '\r': - escape = "\\r"; - escape_len = 2; - break; - case '\t': - escape = "\\t"; - escape_len = 2; - break; - case '\f': - escape = "\\f"; - escape_len = 2; - break; - case '\b': - escape = "\\b"; - escape_len = 2; - break; - default: - unicode_escape(buf, (UTF16) *p); - escape = buf; - escape_len = 6; - break; - } - } else { - switch (c) { - case '\\': - escape = "\\\\"; - escape_len = 2; - break; - case '"': - escape = "\\\""; - escape_len = 2; - break; - case '/': - if(script_safe) { - escape = "\\/"; - escape_len = 2; - break; - } - default: - { - unsigned short clen = 1; - if (!ascii_only) { - clen += trailingBytesForUTF8[c]; - if (end + clen > len) { - rb_raise(rb_path2class("JSON::GeneratorError"), - "partial character in source, but hit end"); - } - - if (script_safe && c == 0xE2) { - unsigned char c2 = (unsigned char) *(p+1); - unsigned char c3 = (unsigned char) *(p+2); - if (c2 == 0x80 && (c3 == 0xA8 || c3 == 0xA9)) { - fbuffer_append(buffer, ptr + start, end - start); - start = end = (end + clen); - if (c3 == 0xA8) { - fbuffer_append(buffer, "\\u2028", 6); - } else { - fbuffer_append(buffer, "\\u2029", 6); - } - continue; - } - } - - if (!isLegalUTF8((UTF8 *) p, clen)) { - rb_raise(rb_path2class("JSON::GeneratorError"), - "source sequence is illegal/malformed utf-8"); - } - } - end += clen; - } - continue; - break; - } - } - fbuffer_append(buffer, ptr + start, end - start); - fbuffer_append(buffer, escape, escape_len); - start = ++end; - escape = NULL; - } - fbuffer_append(buffer, ptr + start, end - start); -} - -static char *fstrndup(const char *ptr, unsigned long len) { - char *result; - if (len <= 0) return NULL; - result = ALLOC_N(char, len); - memcpy(result, ptr, len); - return result; -} - -/* - * Document-module: JSON::Ext::Generator - * - * This is the JSON generator implemented as a C extension. It can be - * configured to be used by setting - * - * JSON.generator = JSON::Ext::Generator - * - * with the method generator= in JSON. - * - */ - -/* Explanation of the following: that's the only way to not pollute - * standard library's docs with GeneratorMethods:: which - * are uninformative and take a large place in a list of classes - */ - -/* - * Document-module: JSON::Ext::Generator::GeneratorMethods - * :nodoc: - */ - -/* - * Document-module: JSON::Ext::Generator::GeneratorMethods::Array - * :nodoc: - */ - -/* - * Document-module: JSON::Ext::Generator::GeneratorMethods::Bignum - * :nodoc: - */ - -/* - * Document-module: JSON::Ext::Generator::GeneratorMethods::FalseClass - * :nodoc: - */ - -/* - * Document-module: JSON::Ext::Generator::GeneratorMethods::Fixnum - * :nodoc: - */ - -/* - * Document-module: JSON::Ext::Generator::GeneratorMethods::Float - * :nodoc: - */ - -/* - * Document-module: JSON::Ext::Generator::GeneratorMethods::Hash - * :nodoc: - */ - -/* - * Document-module: JSON::Ext::Generator::GeneratorMethods::Integer - * :nodoc: - */ - -/* - * Document-module: JSON::Ext::Generator::GeneratorMethods::NilClass - * :nodoc: - */ - -/* - * Document-module: JSON::Ext::Generator::GeneratorMethods::Object - * :nodoc: - */ - -/* - * Document-module: JSON::Ext::Generator::GeneratorMethods::String - * :nodoc: - */ - -/* - * Document-module: JSON::Ext::Generator::GeneratorMethods::String::Extend - * :nodoc: - */ - -/* - * Document-module: JSON::Ext::Generator::GeneratorMethods::TrueClass - * :nodoc: - */ - -/* - * call-seq: to_json(state = nil) - * - * Returns a JSON string containing a JSON object, that is generated from - * this Hash instance. - * _state_ is a JSON::State object, that can also be used to configure the - * produced JSON string output further. - */ -static VALUE mHash_to_json(int argc, VALUE *argv, VALUE self) -{ - GENERATE_JSON(object); -} - -/* - * call-seq: to_json(state = nil) - * - * Returns a JSON string containing a JSON array, that is generated from - * this Array instance. - * _state_ is a JSON::State object, that can also be used to configure the - * produced JSON string output further. - */ -static VALUE mArray_to_json(int argc, VALUE *argv, VALUE self) { - GENERATE_JSON(array); -} - -#ifdef RUBY_INTEGER_UNIFICATION -/* - * call-seq: to_json(*) - * - * Returns a JSON string representation for this Integer number. - */ -static VALUE mInteger_to_json(int argc, VALUE *argv, VALUE self) -{ - GENERATE_JSON(integer); -} - -#else -/* - * call-seq: to_json(*) - * - * Returns a JSON string representation for this Integer number. - */ -static VALUE mFixnum_to_json(int argc, VALUE *argv, VALUE self) -{ - GENERATE_JSON(fixnum); -} - -/* - * call-seq: to_json(*) - * - * Returns a JSON string representation for this Integer number. - */ -static VALUE mBignum_to_json(int argc, VALUE *argv, VALUE self) -{ - GENERATE_JSON(bignum); -} -#endif - -/* - * call-seq: to_json(*) - * - * Returns a JSON string representation for this Float number. - */ -static VALUE mFloat_to_json(int argc, VALUE *argv, VALUE self) -{ - GENERATE_JSON(float); -} - -/* - * call-seq: String.included(modul) - * - * Extends _modul_ with the String::Extend module. - */ -static VALUE mString_included_s(VALUE self, VALUE modul) { - VALUE result = rb_funcall(modul, i_extend, 1, mString_Extend); - rb_call_super(1, &modul); - return result; -} - -/* - * call-seq: to_json(*) - * - * This string should be encoded with UTF-8 A call to this method - * returns a JSON string encoded with UTF16 big endian characters as - * \u????. - */ -static VALUE mString_to_json(int argc, VALUE *argv, VALUE self) -{ - GENERATE_JSON(string); -} - -/* - * call-seq: to_json_raw_object() - * - * This method creates a raw object hash, that can be nested into - * other data structures and will be generated as a raw string. This - * method should be used, if you want to convert raw strings to JSON - * instead of UTF-8 strings, e. g. binary data. - */ -static VALUE mString_to_json_raw_object(VALUE self) -{ - VALUE ary; - VALUE result = rb_hash_new(); - rb_hash_aset(result, rb_funcall(mJSON, i_create_id, 0), rb_class_name(rb_obj_class(self))); - ary = rb_funcall(self, i_unpack, 1, rb_str_new2("C*")); - rb_hash_aset(result, rb_str_new2("raw"), ary); - return result; -} - -/* - * call-seq: to_json_raw(*args) - * - * This method creates a JSON text from the result of a call to - * to_json_raw_object of this String. - */ -static VALUE mString_to_json_raw(int argc, VALUE *argv, VALUE self) -{ - VALUE obj = mString_to_json_raw_object(self); - Check_Type(obj, T_HASH); - return mHash_to_json(argc, argv, obj); -} - -/* - * call-seq: json_create(o) - * - * Raw Strings are JSON Objects (the raw bytes are stored in an array for the - * key "raw"). The Ruby String can be created by this module method. - */ -static VALUE mString_Extend_json_create(VALUE self, VALUE o) -{ - VALUE ary; - Check_Type(o, T_HASH); - ary = rb_hash_aref(o, rb_str_new2("raw")); - return rb_funcall(ary, i_pack, 1, rb_str_new2("C*")); -} - -/* - * call-seq: to_json(*) - * - * Returns a JSON string for true: 'true'. - */ -static VALUE mTrueClass_to_json(int argc, VALUE *argv, VALUE self) -{ - GENERATE_JSON(true); -} - -/* - * call-seq: to_json(*) - * - * Returns a JSON string for false: 'false'. - */ -static VALUE mFalseClass_to_json(int argc, VALUE *argv, VALUE self) -{ - GENERATE_JSON(false); -} - -/* - * call-seq: to_json(*) - * - * Returns a JSON string for nil: 'null'. - */ -static VALUE mNilClass_to_json(int argc, VALUE *argv, VALUE self) -{ - GENERATE_JSON(null); -} - -/* - * call-seq: to_json(*) - * - * Converts this object to a string (calling #to_s), converts - * it to a JSON string, and returns the result. This is a fallback, if no - * special method #to_json was defined for some object. - */ -static VALUE mObject_to_json(int argc, VALUE *argv, VALUE self) -{ - VALUE state; - VALUE string = rb_funcall(self, i_to_s, 0); - rb_scan_args(argc, argv, "01", &state); - Check_Type(string, T_STRING); - state = cState_from_state_s(cState, state); - return cState_partial_generate(state, string); -} - -static void State_free(void *ptr) -{ - JSON_Generator_State *state = ptr; - if (state->indent) ruby_xfree(state->indent); - if (state->space) ruby_xfree(state->space); - if (state->space_before) ruby_xfree(state->space_before); - if (state->object_nl) ruby_xfree(state->object_nl); - if (state->array_nl) ruby_xfree(state->array_nl); - if (state->array_delim) fbuffer_free(state->array_delim); - if (state->object_delim) fbuffer_free(state->object_delim); - if (state->object_delim2) fbuffer_free(state->object_delim2); - ruby_xfree(state); -} - -static size_t State_memsize(const void *ptr) -{ - const JSON_Generator_State *state = ptr; - size_t size = sizeof(*state); - if (state->indent) size += state->indent_len + 1; - if (state->space) size += state->space_len + 1; - if (state->space_before) size += state->space_before_len + 1; - if (state->object_nl) size += state->object_nl_len + 1; - if (state->array_nl) size += state->array_nl_len + 1; - if (state->array_delim) size += FBUFFER_CAPA(state->array_delim); - if (state->object_delim) size += FBUFFER_CAPA(state->object_delim); - if (state->object_delim2) size += FBUFFER_CAPA(state->object_delim2); - return size; -} - -#ifndef HAVE_RB_EXT_RACTOR_SAFE -# undef RUBY_TYPED_FROZEN_SHAREABLE -# define RUBY_TYPED_FROZEN_SHAREABLE 0 -#endif - -#ifdef NEW_TYPEDDATA_WRAPPER -static const rb_data_type_t JSON_Generator_State_type = { - "JSON/Generator/State", - {NULL, State_free, State_memsize,}, -#ifdef RUBY_TYPED_FREE_IMMEDIATELY - 0, 0, - RUBY_TYPED_FREE_IMMEDIATELY | RUBY_TYPED_FROZEN_SHAREABLE, -#endif -}; -#endif - -static VALUE cState_s_allocate(VALUE klass) -{ - JSON_Generator_State *state; - return TypedData_Make_Struct(klass, JSON_Generator_State, - &JSON_Generator_State_type, state); -} - -/* - * call-seq: configure(opts) - * - * Configure this State instance with the Hash _opts_, and return - * itself. - */ -static VALUE cState_configure(VALUE self, VALUE opts) -{ - VALUE tmp; - GET_STATE(self); - tmp = rb_check_convert_type(opts, T_HASH, "Hash", "to_hash"); - if (NIL_P(tmp)) tmp = rb_convert_type(opts, T_HASH, "Hash", "to_h"); - opts = tmp; - tmp = rb_hash_aref(opts, ID2SYM(i_indent)); - if (RTEST(tmp)) { - unsigned long len; - Check_Type(tmp, T_STRING); - len = RSTRING_LEN(tmp); - state->indent = fstrndup(RSTRING_PTR(tmp), len + 1); - state->indent_len = len; - } - tmp = rb_hash_aref(opts, ID2SYM(i_space)); - if (RTEST(tmp)) { - unsigned long len; - Check_Type(tmp, T_STRING); - len = RSTRING_LEN(tmp); - state->space = fstrndup(RSTRING_PTR(tmp), len + 1); - state->space_len = len; - } - tmp = rb_hash_aref(opts, ID2SYM(i_space_before)); - if (RTEST(tmp)) { - unsigned long len; - Check_Type(tmp, T_STRING); - len = RSTRING_LEN(tmp); - state->space_before = fstrndup(RSTRING_PTR(tmp), len + 1); - state->space_before_len = len; - } - tmp = rb_hash_aref(opts, ID2SYM(i_array_nl)); - if (RTEST(tmp)) { - unsigned long len; - Check_Type(tmp, T_STRING); - len = RSTRING_LEN(tmp); - state->array_nl = fstrndup(RSTRING_PTR(tmp), len + 1); - state->array_nl_len = len; - } - tmp = rb_hash_aref(opts, ID2SYM(i_object_nl)); - if (RTEST(tmp)) { - unsigned long len; - Check_Type(tmp, T_STRING); - len = RSTRING_LEN(tmp); - state->object_nl = fstrndup(RSTRING_PTR(tmp), len + 1); - state->object_nl_len = len; - } - tmp = ID2SYM(i_max_nesting); - state->max_nesting = 100; - if (option_given_p(opts, tmp)) { - VALUE max_nesting = rb_hash_aref(opts, tmp); - if (RTEST(max_nesting)) { - Check_Type(max_nesting, T_FIXNUM); - state->max_nesting = FIX2LONG(max_nesting); - } else { - state->max_nesting = 0; - } - } - tmp = ID2SYM(i_depth); - state->depth = 0; - if (option_given_p(opts, tmp)) { - VALUE depth = rb_hash_aref(opts, tmp); - if (RTEST(depth)) { - Check_Type(depth, T_FIXNUM); - state->depth = FIX2LONG(depth); - } else { - state->depth = 0; - } - } - tmp = ID2SYM(i_buffer_initial_length); - if (option_given_p(opts, tmp)) { - VALUE buffer_initial_length = rb_hash_aref(opts, tmp); - if (RTEST(buffer_initial_length)) { - long initial_length; - Check_Type(buffer_initial_length, T_FIXNUM); - initial_length = FIX2LONG(buffer_initial_length); - if (initial_length > 0) state->buffer_initial_length = initial_length; - } - } - tmp = rb_hash_aref(opts, ID2SYM(i_allow_nan)); - state->allow_nan = RTEST(tmp); - tmp = rb_hash_aref(opts, ID2SYM(i_ascii_only)); - state->ascii_only = RTEST(tmp); - tmp = rb_hash_aref(opts, ID2SYM(i_script_safe)); - state->script_safe = RTEST(tmp); - if (!state->script_safe) { - tmp = rb_hash_aref(opts, ID2SYM(i_escape_slash)); - state->script_safe = RTEST(tmp); - } - tmp = rb_hash_aref(opts, ID2SYM(i_strict)); - state->strict = RTEST(tmp); - return self; -} - -static void set_state_ivars(VALUE hash, VALUE state) -{ - VALUE ivars = rb_obj_instance_variables(state); - int i = 0; - for (i = 0; i < RARRAY_LEN(ivars); i++) { - VALUE key = rb_funcall(rb_ary_entry(ivars, i), i_to_s, 0); - long key_len = RSTRING_LEN(key); - VALUE value = rb_iv_get(state, StringValueCStr(key)); - rb_hash_aset(hash, rb_str_intern(rb_str_substr(key, 1, key_len - 1)), value); - } -} - -/* - * call-seq: to_h - * - * Returns the configuration instance variables as a hash, that can be - * passed to the configure method. - */ -static VALUE cState_to_h(VALUE self) -{ - VALUE result = rb_hash_new(); - GET_STATE(self); - set_state_ivars(result, self); - rb_hash_aset(result, ID2SYM(i_indent), rb_str_new(state->indent, state->indent_len)); - rb_hash_aset(result, ID2SYM(i_space), rb_str_new(state->space, state->space_len)); - rb_hash_aset(result, ID2SYM(i_space_before), rb_str_new(state->space_before, state->space_before_len)); - rb_hash_aset(result, ID2SYM(i_object_nl), rb_str_new(state->object_nl, state->object_nl_len)); - rb_hash_aset(result, ID2SYM(i_array_nl), rb_str_new(state->array_nl, state->array_nl_len)); - rb_hash_aset(result, ID2SYM(i_allow_nan), state->allow_nan ? Qtrue : Qfalse); - rb_hash_aset(result, ID2SYM(i_ascii_only), state->ascii_only ? Qtrue : Qfalse); - rb_hash_aset(result, ID2SYM(i_max_nesting), LONG2FIX(state->max_nesting)); - rb_hash_aset(result, ID2SYM(i_script_safe), state->script_safe ? Qtrue : Qfalse); - rb_hash_aset(result, ID2SYM(i_strict), state->strict ? Qtrue : Qfalse); - rb_hash_aset(result, ID2SYM(i_depth), LONG2FIX(state->depth)); - rb_hash_aset(result, ID2SYM(i_buffer_initial_length), LONG2FIX(state->buffer_initial_length)); - return result; -} - -/* -* call-seq: [](name) -* -* Returns the value returned by method +name+. -*/ -static VALUE cState_aref(VALUE self, VALUE name) -{ - name = rb_funcall(name, i_to_s, 0); - if (RTEST(rb_funcall(self, i_respond_to_p, 1, name))) { - return rb_funcall(self, i_send, 1, name); - } else { - return rb_attr_get(self, rb_intern_str(rb_str_concat(rb_str_new2("@"), name))); - } -} - -/* -* call-seq: []=(name, value) -* -* Sets the attribute name to value. -*/ -static VALUE cState_aset(VALUE self, VALUE name, VALUE value) -{ - VALUE name_writer; - - name = rb_funcall(name, i_to_s, 0); - name_writer = rb_str_cat2(rb_str_dup(name), "="); - if (RTEST(rb_funcall(self, i_respond_to_p, 1, name_writer))) { - return rb_funcall(self, i_send, 2, name_writer, value); - } else { - rb_ivar_set(self, rb_intern_str(rb_str_concat(rb_str_new2("@"), name)), value); - } - return Qnil; -} - -struct hash_foreach_arg { - FBuffer *buffer; - JSON_Generator_State *state; - VALUE Vstate; - int iter; -}; - -static int -json_object_i(VALUE key, VALUE val, VALUE _arg) -{ - struct hash_foreach_arg *arg = (struct hash_foreach_arg *)_arg; - FBuffer *buffer = arg->buffer; - JSON_Generator_State *state = arg->state; - VALUE Vstate = arg->Vstate; - - char *object_nl = state->object_nl; - long object_nl_len = state->object_nl_len; - char *indent = state->indent; - long indent_len = state->indent_len; - char *delim = FBUFFER_PTR(state->object_delim); - long delim_len = FBUFFER_LEN(state->object_delim); - char *delim2 = FBUFFER_PTR(state->object_delim2); - long delim2_len = FBUFFER_LEN(state->object_delim2); - long depth = state->depth; - int j; - VALUE klass, key_to_s; - - if (arg->iter > 0) fbuffer_append(buffer, delim, delim_len); - if (object_nl) { - fbuffer_append(buffer, object_nl, object_nl_len); - } - if (indent) { - for (j = 0; j < depth; j++) { - fbuffer_append(buffer, indent, indent_len); - } - } - - klass = CLASS_OF(key); - if (klass == rb_cString) { - key_to_s = key; - } else if (klass == rb_cSymbol) { - key_to_s = rb_id2str(SYM2ID(key)); - } else { - key_to_s = rb_funcall(key, i_to_s, 0); - } - Check_Type(key_to_s, T_STRING); - generate_json(buffer, Vstate, state, key_to_s); - fbuffer_append(buffer, delim2, delim2_len); - generate_json(buffer, Vstate, state, val); - - arg->iter++; - return ST_CONTINUE; -} - -static void generate_json_object(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj) -{ - char *object_nl = state->object_nl; - long object_nl_len = state->object_nl_len; - char *indent = state->indent; - long indent_len = state->indent_len; - long max_nesting = state->max_nesting; - long depth = ++state->depth; - int j; - struct hash_foreach_arg arg; - - if (max_nesting != 0 && depth > max_nesting) { - fbuffer_free(buffer); - rb_raise(eNestingError, "nesting of %ld is too deep", --state->depth); - } - fbuffer_append_char(buffer, '{'); - - arg.buffer = buffer; - arg.state = state; - arg.Vstate = Vstate; - arg.iter = 0; - rb_hash_foreach(obj, json_object_i, (VALUE)&arg); - - depth = --state->depth; - if (object_nl) { - fbuffer_append(buffer, object_nl, object_nl_len); - if (indent) { - for (j = 0; j < depth; j++) { - fbuffer_append(buffer, indent, indent_len); - } - } - } - fbuffer_append_char(buffer, '}'); -} - -static void generate_json_array(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj) -{ - char *array_nl = state->array_nl; - long array_nl_len = state->array_nl_len; - char *indent = state->indent; - long indent_len = state->indent_len; - long max_nesting = state->max_nesting; - char *delim = FBUFFER_PTR(state->array_delim); - long delim_len = FBUFFER_LEN(state->array_delim); - long depth = ++state->depth; - int i, j; - if (max_nesting != 0 && depth > max_nesting) { - fbuffer_free(buffer); - rb_raise(eNestingError, "nesting of %ld is too deep", --state->depth); - } - fbuffer_append_char(buffer, '['); - if (array_nl) fbuffer_append(buffer, array_nl, array_nl_len); - for(i = 0; i < RARRAY_LEN(obj); i++) { - if (i > 0) fbuffer_append(buffer, delim, delim_len); - if (indent) { - for (j = 0; j < depth; j++) { - fbuffer_append(buffer, indent, indent_len); - } - } - generate_json(buffer, Vstate, state, rb_ary_entry(obj, i)); - } - state->depth = --depth; - if (array_nl) { - fbuffer_append(buffer, array_nl, array_nl_len); - if (indent) { - for (j = 0; j < depth; j++) { - fbuffer_append(buffer, indent, indent_len); - } - } - } - fbuffer_append_char(buffer, ']'); -} - -#ifdef HAVE_RUBY_ENCODING_H -static int enc_utf8_compatible_p(rb_encoding *enc) -{ - if (enc == rb_usascii_encoding()) return 1; - if (enc == rb_utf8_encoding()) return 1; - return 0; -} -#endif - -static void generate_json_string(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj) -{ - fbuffer_append_char(buffer, '"'); -#ifdef HAVE_RUBY_ENCODING_H - if (!enc_utf8_compatible_p(rb_enc_get(obj))) { - obj = rb_str_export_to_enc(obj, rb_utf8_encoding()); - } -#endif - if (state->ascii_only) { - convert_UTF8_to_JSON_ASCII(buffer, obj, state->script_safe); - } else { - convert_UTF8_to_JSON(buffer, obj, state->script_safe); - } - fbuffer_append_char(buffer, '"'); -} - -static void generate_json_null(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj) -{ - fbuffer_append(buffer, "null", 4); -} - -static void generate_json_false(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj) -{ - fbuffer_append(buffer, "false", 5); -} - -static void generate_json_true(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj) -{ - fbuffer_append(buffer, "true", 4); -} - -static void generate_json_fixnum(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj) -{ - fbuffer_append_long(buffer, FIX2LONG(obj)); -} - -static void generate_json_bignum(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj) -{ - VALUE tmp = rb_funcall(obj, i_to_s, 0); - fbuffer_append_str(buffer, tmp); -} - -#ifdef RUBY_INTEGER_UNIFICATION -static void generate_json_integer(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj) -{ - if (FIXNUM_P(obj)) - generate_json_fixnum(buffer, Vstate, state, obj); - else - generate_json_bignum(buffer, Vstate, state, obj); -} -#endif -static void generate_json_float(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj) -{ - double value = RFLOAT_VALUE(obj); - char allow_nan = state->allow_nan; - VALUE tmp = rb_funcall(obj, i_to_s, 0); - if (!allow_nan) { - if (isinf(value)) { - fbuffer_free(buffer); - rb_raise(eGeneratorError, "%"PRIsVALUE" not allowed in JSON", RB_OBJ_STRING(tmp)); - } else if (isnan(value)) { - fbuffer_free(buffer); - rb_raise(eGeneratorError, "%"PRIsVALUE" not allowed in JSON", RB_OBJ_STRING(tmp)); - } - } - fbuffer_append_str(buffer, tmp); -} - -static void generate_json(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj) -{ - VALUE tmp; - VALUE klass = CLASS_OF(obj); - if (klass == rb_cHash) { - generate_json_object(buffer, Vstate, state, obj); - } else if (klass == rb_cArray) { - generate_json_array(buffer, Vstate, state, obj); - } else if (klass == rb_cString) { - generate_json_string(buffer, Vstate, state, obj); - } else if (obj == Qnil) { - generate_json_null(buffer, Vstate, state, obj); - } else if (obj == Qfalse) { - generate_json_false(buffer, Vstate, state, obj); - } else if (obj == Qtrue) { - generate_json_true(buffer, Vstate, state, obj); - } else if (FIXNUM_P(obj)) { - generate_json_fixnum(buffer, Vstate, state, obj); - } else if (RB_TYPE_P(obj, T_BIGNUM)) { - generate_json_bignum(buffer, Vstate, state, obj); - } else if (klass == rb_cFloat) { - generate_json_float(buffer, Vstate, state, obj); - } else if (state->strict) { - rb_raise(eGeneratorError, "%"PRIsVALUE" not allowed in JSON", RB_OBJ_STRING(CLASS_OF(obj))); - } else if (rb_respond_to(obj, i_to_json)) { - tmp = rb_funcall(obj, i_to_json, 1, Vstate); - Check_Type(tmp, T_STRING); - fbuffer_append_str(buffer, tmp); - } else { - tmp = rb_funcall(obj, i_to_s, 0); - Check_Type(tmp, T_STRING); - generate_json_string(buffer, Vstate, state, tmp); - } -} - -static FBuffer *cState_prepare_buffer(VALUE self) -{ - FBuffer *buffer; - GET_STATE(self); - buffer = fbuffer_alloc(state->buffer_initial_length); - - if (state->object_delim) { - fbuffer_clear(state->object_delim); - } else { - state->object_delim = fbuffer_alloc(16); - } - fbuffer_append_char(state->object_delim, ','); - if (state->object_delim2) { - fbuffer_clear(state->object_delim2); - } else { - state->object_delim2 = fbuffer_alloc(16); - } - if (state->space_before) fbuffer_append(state->object_delim2, state->space_before, state->space_before_len); - fbuffer_append_char(state->object_delim2, ':'); - if (state->space) fbuffer_append(state->object_delim2, state->space, state->space_len); - - if (state->array_delim) { - fbuffer_clear(state->array_delim); - } else { - state->array_delim = fbuffer_alloc(16); - } - fbuffer_append_char(state->array_delim, ','); - if (state->array_nl) fbuffer_append(state->array_delim, state->array_nl, state->array_nl_len); - return buffer; -} - -static VALUE cState_partial_generate(VALUE self, VALUE obj) -{ - FBuffer *buffer = cState_prepare_buffer(self); - GET_STATE(self); - generate_json(buffer, self, state, obj); - return fbuffer_to_s(buffer); -} - -/* - * call-seq: generate(obj) - * - * Generates a valid JSON document from object +obj+ and returns the - * result. If no valid JSON document can be created this method raises a - * GeneratorError exception. - */ -static VALUE cState_generate(VALUE self, VALUE obj) -{ - VALUE result = cState_partial_generate(self, obj); - GET_STATE(self); - (void)state; - return result; -} - -/* - * call-seq: new(opts = {}) - * - * Instantiates a new State object, configured by _opts_. - * - * _opts_ can have the following keys: - * - * * *indent*: a string used to indent levels (default: ''), - * * *space*: a string that is put after, a : or , delimiter (default: ''), - * * *space_before*: a string that is put before a : pair delimiter (default: ''), - * * *object_nl*: a string that is put at the end of a JSON object (default: ''), - * * *array_nl*: a string that is put at the end of a JSON array (default: ''), - * * *allow_nan*: true if NaN, Infinity, and -Infinity should be - * generated, otherwise an exception is thrown, if these values are - * encountered. This options defaults to false. - * * *ascii_only*: true if only ASCII characters should be generated. This - * option defaults to false. - * * *buffer_initial_length*: sets the initial length of the generator's - * internal buffer. - */ -static VALUE cState_initialize(int argc, VALUE *argv, VALUE self) -{ - VALUE opts; - GET_STATE(self); - state->max_nesting = 100; - state->buffer_initial_length = FBUFFER_INITIAL_LENGTH_DEFAULT; - rb_scan_args(argc, argv, "01", &opts); - if (!NIL_P(opts)) cState_configure(self, opts); - return self; -} - -/* - * call-seq: initialize_copy(orig) - * - * Initializes this object from orig if it can be duplicated/cloned and returns - * it. -*/ -static VALUE cState_init_copy(VALUE obj, VALUE orig) -{ - JSON_Generator_State *objState, *origState; - - if (obj == orig) return obj; - GET_STATE_TO(obj, objState); - GET_STATE_TO(orig, origState); - if (!objState) rb_raise(rb_eArgError, "unallocated JSON::State"); - - MEMCPY(objState, origState, JSON_Generator_State, 1); - objState->indent = fstrndup(origState->indent, origState->indent_len); - objState->space = fstrndup(origState->space, origState->space_len); - objState->space_before = fstrndup(origState->space_before, origState->space_before_len); - objState->object_nl = fstrndup(origState->object_nl, origState->object_nl_len); - objState->array_nl = fstrndup(origState->array_nl, origState->array_nl_len); - if (origState->array_delim) objState->array_delim = fbuffer_dup(origState->array_delim); - if (origState->object_delim) objState->object_delim = fbuffer_dup(origState->object_delim); - if (origState->object_delim2) objState->object_delim2 = fbuffer_dup(origState->object_delim2); - return obj; -} - -/* - * call-seq: from_state(opts) - * - * Creates a State object from _opts_, which ought to be Hash to create a - * new State instance configured by _opts_, something else to create an - * unconfigured instance. If _opts_ is a State object, it is just returned. - */ -static VALUE cState_from_state_s(VALUE self, VALUE opts) -{ - if (rb_obj_is_kind_of(opts, self)) { - return opts; - } else if (rb_obj_is_kind_of(opts, rb_cHash)) { - return rb_funcall(self, i_new, 1, opts); - } else { - return rb_class_new_instance(0, NULL, cState); - } -} - -/* - * call-seq: indent() - * - * Returns the string that is used to indent levels in the JSON text. - */ -static VALUE cState_indent(VALUE self) -{ - GET_STATE(self); - return state->indent ? rb_str_new(state->indent, state->indent_len) : rb_str_new2(""); -} - -/* - * call-seq: indent=(indent) - * - * Sets the string that is used to indent levels in the JSON text. - */ -static VALUE cState_indent_set(VALUE self, VALUE indent) -{ - unsigned long len; - GET_STATE(self); - Check_Type(indent, T_STRING); - len = RSTRING_LEN(indent); - if (len == 0) { - if (state->indent) { - ruby_xfree(state->indent); - state->indent = NULL; - state->indent_len = 0; - } - } else { - if (state->indent) ruby_xfree(state->indent); - state->indent = fstrndup(RSTRING_PTR(indent), len); - state->indent_len = len; - } - return Qnil; -} - -/* - * call-seq: space() - * - * Returns the string that is used to insert a space between the tokens in a JSON - * string. - */ -static VALUE cState_space(VALUE self) -{ - GET_STATE(self); - return state->space ? rb_str_new(state->space, state->space_len) : rb_str_new2(""); -} - -/* - * call-seq: space=(space) - * - * Sets _space_ to the string that is used to insert a space between the tokens in a JSON - * string. - */ -static VALUE cState_space_set(VALUE self, VALUE space) -{ - unsigned long len; - GET_STATE(self); - Check_Type(space, T_STRING); - len = RSTRING_LEN(space); - if (len == 0) { - if (state->space) { - ruby_xfree(state->space); - state->space = NULL; - state->space_len = 0; - } - } else { - if (state->space) ruby_xfree(state->space); - state->space = fstrndup(RSTRING_PTR(space), len); - state->space_len = len; - } - return Qnil; -} - -/* - * call-seq: space_before() - * - * Returns the string that is used to insert a space before the ':' in JSON objects. - */ -static VALUE cState_space_before(VALUE self) -{ - GET_STATE(self); - return state->space_before ? rb_str_new(state->space_before, state->space_before_len) : rb_str_new2(""); -} - -/* - * call-seq: space_before=(space_before) - * - * Sets the string that is used to insert a space before the ':' in JSON objects. - */ -static VALUE cState_space_before_set(VALUE self, VALUE space_before) -{ - unsigned long len; - GET_STATE(self); - Check_Type(space_before, T_STRING); - len = RSTRING_LEN(space_before); - if (len == 0) { - if (state->space_before) { - ruby_xfree(state->space_before); - state->space_before = NULL; - state->space_before_len = 0; - } - } else { - if (state->space_before) ruby_xfree(state->space_before); - state->space_before = fstrndup(RSTRING_PTR(space_before), len); - state->space_before_len = len; - } - return Qnil; -} - -/* - * call-seq: object_nl() - * - * This string is put at the end of a line that holds a JSON object (or - * Hash). - */ -static VALUE cState_object_nl(VALUE self) -{ - GET_STATE(self); - return state->object_nl ? rb_str_new(state->object_nl, state->object_nl_len) : rb_str_new2(""); -} - -/* - * call-seq: object_nl=(object_nl) - * - * This string is put at the end of a line that holds a JSON object (or - * Hash). - */ -static VALUE cState_object_nl_set(VALUE self, VALUE object_nl) -{ - unsigned long len; - GET_STATE(self); - Check_Type(object_nl, T_STRING); - len = RSTRING_LEN(object_nl); - if (len == 0) { - if (state->object_nl) { - ruby_xfree(state->object_nl); - state->object_nl = NULL; - } - } else { - if (state->object_nl) ruby_xfree(state->object_nl); - state->object_nl = fstrndup(RSTRING_PTR(object_nl), len); - state->object_nl_len = len; - } - return Qnil; -} - -/* - * call-seq: array_nl() - * - * This string is put at the end of a line that holds a JSON array. - */ -static VALUE cState_array_nl(VALUE self) -{ - GET_STATE(self); - return state->array_nl ? rb_str_new(state->array_nl, state->array_nl_len) : rb_str_new2(""); -} - -/* - * call-seq: array_nl=(array_nl) - * - * This string is put at the end of a line that holds a JSON array. - */ -static VALUE cState_array_nl_set(VALUE self, VALUE array_nl) -{ - unsigned long len; - GET_STATE(self); - Check_Type(array_nl, T_STRING); - len = RSTRING_LEN(array_nl); - if (len == 0) { - if (state->array_nl) { - ruby_xfree(state->array_nl); - state->array_nl = NULL; - } - } else { - if (state->array_nl) ruby_xfree(state->array_nl); - state->array_nl = fstrndup(RSTRING_PTR(array_nl), len); - state->array_nl_len = len; - } - return Qnil; -} - - -/* -* call-seq: check_circular? -* -* Returns true, if circular data structures should be checked, -* otherwise returns false. -*/ -static VALUE cState_check_circular_p(VALUE self) -{ - GET_STATE(self); - return state->max_nesting ? Qtrue : Qfalse; -} - -/* - * call-seq: max_nesting - * - * This integer returns the maximum level of data structure nesting in - * the generated JSON, max_nesting = 0 if no maximum is checked. - */ -static VALUE cState_max_nesting(VALUE self) -{ - GET_STATE(self); - return LONG2FIX(state->max_nesting); -} - -/* - * call-seq: max_nesting=(depth) - * - * This sets the maximum level of data structure nesting in the generated JSON - * to the integer depth, max_nesting = 0 if no maximum should be checked. - */ -static VALUE cState_max_nesting_set(VALUE self, VALUE depth) -{ - GET_STATE(self); - Check_Type(depth, T_FIXNUM); - return state->max_nesting = FIX2LONG(depth); -} - -/* - * call-seq: script_safe - * - * If this boolean is true, the forward slashes will be escaped in - * the json output. - */ -static VALUE cState_script_safe(VALUE self) -{ - GET_STATE(self); - return state->script_safe ? Qtrue : Qfalse; -} - -/* - * call-seq: script_safe=(enable) - * - * This sets whether or not the forward slashes will be escaped in - * the json output. - */ -static VALUE cState_script_safe_set(VALUE self, VALUE enable) -{ - GET_STATE(self); - state->script_safe = RTEST(enable); - return Qnil; -} - -/* - * call-seq: strict - * - * If this boolean is false, types unsupported by the JSON format will - * be serialized as strings. - * If this boolean is true, types unsupported by the JSON format will - * raise a JSON::GeneratorError. - */ -static VALUE cState_strict(VALUE self) -{ - GET_STATE(self); - return state->strict ? Qtrue : Qfalse; -} - -/* - * call-seq: strict=(enable) - * - * This sets whether or not to serialize types unsupported by the - * JSON format as strings. - * If this boolean is false, types unsupported by the JSON format will - * be serialized as strings. - * If this boolean is true, types unsupported by the JSON format will - * raise a JSON::GeneratorError. - */ -static VALUE cState_strict_set(VALUE self, VALUE enable) -{ - GET_STATE(self); - state->strict = RTEST(enable); - return Qnil; -} - -/* - * call-seq: allow_nan? - * - * Returns true, if NaN, Infinity, and -Infinity should be generated, otherwise - * returns false. - */ -static VALUE cState_allow_nan_p(VALUE self) -{ - GET_STATE(self); - return state->allow_nan ? Qtrue : Qfalse; -} - -/* - * call-seq: ascii_only? - * - * Returns true, if only ASCII characters should be generated. Otherwise - * returns false. - */ -static VALUE cState_ascii_only_p(VALUE self) -{ - GET_STATE(self); - return state->ascii_only ? Qtrue : Qfalse; -} - -/* - * call-seq: depth - * - * This integer returns the current depth of data structure nesting. - */ -static VALUE cState_depth(VALUE self) -{ - GET_STATE(self); - return LONG2FIX(state->depth); -} - -/* - * call-seq: depth=(depth) - * - * This sets the maximum level of data structure nesting in the generated JSON - * to the integer depth, max_nesting = 0 if no maximum should be checked. - */ -static VALUE cState_depth_set(VALUE self, VALUE depth) -{ - GET_STATE(self); - Check_Type(depth, T_FIXNUM); - state->depth = FIX2LONG(depth); - return Qnil; -} - -/* - * call-seq: buffer_initial_length - * - * This integer returns the current initial length of the buffer. - */ -static VALUE cState_buffer_initial_length(VALUE self) -{ - GET_STATE(self); - return LONG2FIX(state->buffer_initial_length); -} - -/* - * call-seq: buffer_initial_length=(length) - * - * This sets the initial length of the buffer to +length+, if +length+ > 0, - * otherwise its value isn't changed. - */ -static VALUE cState_buffer_initial_length_set(VALUE self, VALUE buffer_initial_length) -{ - long initial_length; - GET_STATE(self); - Check_Type(buffer_initial_length, T_FIXNUM); - initial_length = FIX2LONG(buffer_initial_length); - if (initial_length > 0) { - state->buffer_initial_length = initial_length; - } - return Qnil; -} - -/* - * - */ -void Init_generator(void) -{ -#ifdef HAVE_RB_EXT_RACTOR_SAFE - rb_ext_ractor_safe(true); -#endif - -#undef rb_intern - rb_require("json/common"); - - mJSON = rb_define_module("JSON"); - mExt = rb_define_module_under(mJSON, "Ext"); - mGenerator = rb_define_module_under(mExt, "Generator"); - - eGeneratorError = rb_path2class("JSON::GeneratorError"); - eNestingError = rb_path2class("JSON::NestingError"); - rb_gc_register_mark_object(eGeneratorError); - rb_gc_register_mark_object(eNestingError); - - cState = rb_define_class_under(mGenerator, "State", rb_cObject); - rb_define_alloc_func(cState, cState_s_allocate); - rb_define_singleton_method(cState, "from_state", cState_from_state_s, 1); - rb_define_method(cState, "initialize", cState_initialize, -1); - rb_define_method(cState, "initialize_copy", cState_init_copy, 1); - rb_define_method(cState, "indent", cState_indent, 0); - rb_define_method(cState, "indent=", cState_indent_set, 1); - rb_define_method(cState, "space", cState_space, 0); - rb_define_method(cState, "space=", cState_space_set, 1); - rb_define_method(cState, "space_before", cState_space_before, 0); - rb_define_method(cState, "space_before=", cState_space_before_set, 1); - rb_define_method(cState, "object_nl", cState_object_nl, 0); - rb_define_method(cState, "object_nl=", cState_object_nl_set, 1); - rb_define_method(cState, "array_nl", cState_array_nl, 0); - rb_define_method(cState, "array_nl=", cState_array_nl_set, 1); - rb_define_method(cState, "max_nesting", cState_max_nesting, 0); - rb_define_method(cState, "max_nesting=", cState_max_nesting_set, 1); - rb_define_method(cState, "script_safe", cState_script_safe, 0); - rb_define_method(cState, "script_safe?", cState_script_safe, 0); - rb_define_method(cState, "script_safe=", cState_script_safe_set, 1); - rb_define_alias(cState, "escape_slash", "script_safe"); - rb_define_alias(cState, "escape_slash?", "script_safe?"); - rb_define_alias(cState, "escape_slash=", "script_safe="); - rb_define_method(cState, "strict", cState_strict, 0); - rb_define_method(cState, "strict?", cState_strict, 0); - rb_define_method(cState, "strict=", cState_strict_set, 1); - rb_define_method(cState, "check_circular?", cState_check_circular_p, 0); - rb_define_method(cState, "allow_nan?", cState_allow_nan_p, 0); - rb_define_method(cState, "ascii_only?", cState_ascii_only_p, 0); - rb_define_method(cState, "depth", cState_depth, 0); - rb_define_method(cState, "depth=", cState_depth_set, 1); - rb_define_method(cState, "buffer_initial_length", cState_buffer_initial_length, 0); - rb_define_method(cState, "buffer_initial_length=", cState_buffer_initial_length_set, 1); - rb_define_method(cState, "configure", cState_configure, 1); - rb_define_alias(cState, "merge", "configure"); - rb_define_method(cState, "to_h", cState_to_h, 0); - rb_define_alias(cState, "to_hash", "to_h"); - rb_define_method(cState, "[]", cState_aref, 1); - rb_define_method(cState, "[]=", cState_aset, 2); - rb_define_method(cState, "generate", cState_generate, 1); - - mGeneratorMethods = rb_define_module_under(mGenerator, "GeneratorMethods"); - mObject = rb_define_module_under(mGeneratorMethods, "Object"); - rb_define_method(mObject, "to_json", mObject_to_json, -1); - mHash = rb_define_module_under(mGeneratorMethods, "Hash"); - rb_define_method(mHash, "to_json", mHash_to_json, -1); - mArray = rb_define_module_under(mGeneratorMethods, "Array"); - rb_define_method(mArray, "to_json", mArray_to_json, -1); -#ifdef RUBY_INTEGER_UNIFICATION - mInteger = rb_define_module_under(mGeneratorMethods, "Integer"); - rb_define_method(mInteger, "to_json", mInteger_to_json, -1); -#else - mFixnum = rb_define_module_under(mGeneratorMethods, "Fixnum"); - rb_define_method(mFixnum, "to_json", mFixnum_to_json, -1); - mBignum = rb_define_module_under(mGeneratorMethods, "Bignum"); - rb_define_method(mBignum, "to_json", mBignum_to_json, -1); -#endif - mFloat = rb_define_module_under(mGeneratorMethods, "Float"); - rb_define_method(mFloat, "to_json", mFloat_to_json, -1); - mString = rb_define_module_under(mGeneratorMethods, "String"); - rb_define_singleton_method(mString, "included", mString_included_s, 1); - rb_define_method(mString, "to_json", mString_to_json, -1); - rb_define_method(mString, "to_json_raw", mString_to_json_raw, -1); - rb_define_method(mString, "to_json_raw_object", mString_to_json_raw_object, 0); - mString_Extend = rb_define_module_under(mString, "Extend"); - rb_define_method(mString_Extend, "json_create", mString_Extend_json_create, 1); - mTrueClass = rb_define_module_under(mGeneratorMethods, "TrueClass"); - rb_define_method(mTrueClass, "to_json", mTrueClass_to_json, -1); - mFalseClass = rb_define_module_under(mGeneratorMethods, "FalseClass"); - rb_define_method(mFalseClass, "to_json", mFalseClass_to_json, -1); - mNilClass = rb_define_module_under(mGeneratorMethods, "NilClass"); - rb_define_method(mNilClass, "to_json", mNilClass_to_json, -1); - - i_to_s = rb_intern("to_s"); - i_to_json = rb_intern("to_json"); - i_new = rb_intern("new"); - i_indent = rb_intern("indent"); - i_space = rb_intern("space"); - i_space_before = rb_intern("space_before"); - i_object_nl = rb_intern("object_nl"); - i_array_nl = rb_intern("array_nl"); - i_max_nesting = rb_intern("max_nesting"); - i_script_safe = rb_intern("script_safe"); - i_escape_slash = rb_intern("escape_slash"); - i_strict = rb_intern("strict"); - i_allow_nan = rb_intern("allow_nan"); - i_ascii_only = rb_intern("ascii_only"); - i_depth = rb_intern("depth"); - i_buffer_initial_length = rb_intern("buffer_initial_length"); - i_pack = rb_intern("pack"); - i_unpack = rb_intern("unpack"); - i_create_id = rb_intern("create_id"); - i_extend = rb_intern("extend"); - i_key_p = rb_intern("key?"); - i_aref = rb_intern("[]"); - i_send = rb_intern("__send__"); - i_respond_to_p = rb_intern("respond_to?"); - i_match = rb_intern("match"); - i_keys = rb_intern("keys"); - i_dup = rb_intern("dup"); -} diff --git a/bundle/ruby/3.2.0/gems/json-2.7.1/ext/json/ext/generator/generator.h b/bundle/ruby/3.2.0/gems/json-2.7.1/ext/json/ext/generator/generator.h deleted file mode 100644 index 1a736b84..00000000 --- a/bundle/ruby/3.2.0/gems/json-2.7.1/ext/json/ext/generator/generator.h +++ /dev/null @@ -1,177 +0,0 @@ -#ifndef _GENERATOR_H_ -#define _GENERATOR_H_ - -#include -#include - -#include "ruby.h" - -#ifdef HAVE_RUBY_RE_H -#include "ruby/re.h" -#else -#include "re.h" -#endif - -#ifndef rb_intern_str -#define rb_intern_str(string) SYM2ID(rb_str_intern(string)) -#endif - -#ifndef rb_obj_instance_variables -#define rb_obj_instance_variables(object) rb_funcall(object, rb_intern("instance_variables"), 0) -#endif - -#define option_given_p(opts, key) RTEST(rb_funcall(opts, i_key_p, 1, key)) - -/* unicode definitions */ - -#define UNI_STRICT_CONVERSION 1 - -typedef unsigned long UTF32; /* at least 32 bits */ -typedef unsigned short UTF16; /* at least 16 bits */ -typedef unsigned char UTF8; /* typically 8 bits */ - -#define UNI_REPLACEMENT_CHAR (UTF32)0x0000FFFD -#define UNI_MAX_BMP (UTF32)0x0000FFFF -#define UNI_MAX_UTF16 (UTF32)0x0010FFFF -#define UNI_MAX_UTF32 (UTF32)0x7FFFFFFF -#define UNI_MAX_LEGAL_UTF32 (UTF32)0x0010FFFF - -#define UNI_SUR_HIGH_START (UTF32)0xD800 -#define UNI_SUR_HIGH_END (UTF32)0xDBFF -#define UNI_SUR_LOW_START (UTF32)0xDC00 -#define UNI_SUR_LOW_END (UTF32)0xDFFF - -static const int halfShift = 10; /* used for shifting by 10 bits */ - -static const UTF32 halfBase = 0x0010000UL; -static const UTF32 halfMask = 0x3FFUL; - -static unsigned char isLegalUTF8(const UTF8 *source, unsigned long length); -static void unicode_escape(char *buf, UTF16 character); -static void unicode_escape_to_buffer(FBuffer *buffer, char buf[6], UTF16 character); -static void convert_UTF8_to_JSON_ASCII(FBuffer *buffer, VALUE string, char script_safe); -static void convert_UTF8_to_JSON(FBuffer *buffer, VALUE string, char script_safe); -static char *fstrndup(const char *ptr, unsigned long len); - -/* ruby api and some helpers */ - -typedef struct JSON_Generator_StateStruct { - char *indent; - long indent_len; - char *space; - long space_len; - char *space_before; - long space_before_len; - char *object_nl; - long object_nl_len; - char *array_nl; - long array_nl_len; - FBuffer *array_delim; - FBuffer *object_delim; - FBuffer *object_delim2; - long max_nesting; - char allow_nan; - char ascii_only; - char script_safe; - char strict; - long depth; - long buffer_initial_length; -} JSON_Generator_State; - -#define GET_STATE_TO(self, state) \ - TypedData_Get_Struct(self, JSON_Generator_State, &JSON_Generator_State_type, state) - -#define GET_STATE(self) \ - JSON_Generator_State *state; \ - GET_STATE_TO(self, state) - -#define GENERATE_JSON(type) \ - FBuffer *buffer; \ - VALUE Vstate; \ - JSON_Generator_State *state; \ - \ - rb_scan_args(argc, argv, "01", &Vstate); \ - Vstate = cState_from_state_s(cState, Vstate); \ - TypedData_Get_Struct(Vstate, JSON_Generator_State, &JSON_Generator_State_type, state); \ - buffer = cState_prepare_buffer(Vstate); \ - generate_json_##type(buffer, Vstate, state, self); \ - return fbuffer_to_s(buffer) - -static VALUE mHash_to_json(int argc, VALUE *argv, VALUE self); -static VALUE mArray_to_json(int argc, VALUE *argv, VALUE self); -#ifdef RUBY_INTEGER_UNIFICATION -static VALUE mInteger_to_json(int argc, VALUE *argv, VALUE self); -#else -static VALUE mFixnum_to_json(int argc, VALUE *argv, VALUE self); -static VALUE mBignum_to_json(int argc, VALUE *argv, VALUE self); -#endif -static VALUE mFloat_to_json(int argc, VALUE *argv, VALUE self); -static VALUE mString_included_s(VALUE self, VALUE modul); -static VALUE mString_to_json(int argc, VALUE *argv, VALUE self); -static VALUE mString_to_json_raw_object(VALUE self); -static VALUE mString_to_json_raw(int argc, VALUE *argv, VALUE self); -static VALUE mString_Extend_json_create(VALUE self, VALUE o); -static VALUE mTrueClass_to_json(int argc, VALUE *argv, VALUE self); -static VALUE mFalseClass_to_json(int argc, VALUE *argv, VALUE self); -static VALUE mNilClass_to_json(int argc, VALUE *argv, VALUE self); -static VALUE mObject_to_json(int argc, VALUE *argv, VALUE self); -static void State_free(void *state); -static VALUE cState_s_allocate(VALUE klass); -static VALUE cState_configure(VALUE self, VALUE opts); -static VALUE cState_to_h(VALUE self); -static void generate_json(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj); -static void generate_json_object(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj); -static void generate_json_array(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj); -static void generate_json_string(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj); -static void generate_json_null(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj); -static void generate_json_false(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj); -static void generate_json_true(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj); -#ifdef RUBY_INTEGER_UNIFICATION -static void generate_json_integer(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj); -#endif -static void generate_json_fixnum(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj); -static void generate_json_bignum(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj); -static void generate_json_float(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj); -static VALUE cState_partial_generate(VALUE self, VALUE obj); -static VALUE cState_generate(VALUE self, VALUE obj); -static VALUE cState_initialize(int argc, VALUE *argv, VALUE self); -static VALUE cState_from_state_s(VALUE self, VALUE opts); -static VALUE cState_indent(VALUE self); -static VALUE cState_indent_set(VALUE self, VALUE indent); -static VALUE cState_space(VALUE self); -static VALUE cState_space_set(VALUE self, VALUE space); -static VALUE cState_space_before(VALUE self); -static VALUE cState_space_before_set(VALUE self, VALUE space_before); -static VALUE cState_object_nl(VALUE self); -static VALUE cState_object_nl_set(VALUE self, VALUE object_nl); -static VALUE cState_array_nl(VALUE self); -static VALUE cState_array_nl_set(VALUE self, VALUE array_nl); -static VALUE cState_max_nesting(VALUE self); -static VALUE cState_max_nesting_set(VALUE self, VALUE depth); -static VALUE cState_allow_nan_p(VALUE self); -static VALUE cState_ascii_only_p(VALUE self); -static VALUE cState_depth(VALUE self); -static VALUE cState_depth_set(VALUE self, VALUE depth); -static VALUE cState_script_safe(VALUE self); -static VALUE cState_script_safe_set(VALUE self, VALUE depth); -static VALUE cState_strict(VALUE self); -static VALUE cState_strict_set(VALUE self, VALUE strict); -static FBuffer *cState_prepare_buffer(VALUE self); -#ifndef ZALLOC -#define ZALLOC(type) ((type *)ruby_zalloc(sizeof(type))) -static inline void *ruby_zalloc(size_t n) -{ - void *p = ruby_xmalloc(n); - memset(p, 0, n); - return p; -} -#endif -#ifdef TypedData_Make_Struct -static const rb_data_type_t JSON_Generator_State_type; -#define NEW_TYPEDDATA_WRAPPER 1 -#else -#define TypedData_Make_Struct(klass, type, ignore, json) Data_Make_Struct(klass, type, NULL, State_free, json) -#define TypedData_Get_Struct(self, JSON_Generator_State, ignore, json) Data_Get_Struct(self, JSON_Generator_State, json) -#endif - -#endif diff --git a/bundle/ruby/3.2.0/gems/json-2.7.1/ext/json/ext/parser/Makefile b/bundle/ruby/3.2.0/gems/json-2.7.1/ext/json/ext/parser/Makefile deleted file mode 100644 index 2d83be4d..00000000 --- a/bundle/ruby/3.2.0/gems/json-2.7.1/ext/json/ext/parser/Makefile +++ /dev/null @@ -1,270 +0,0 @@ - -SHELL = /bin/sh - -# V=0 quiet, V=1 verbose. other values don't work. -V = 0 -V0 = $(V:0=) -Q1 = $(V:1=) -Q = $(Q1:0=@) -ECHO1 = $(V:1=@ :) -ECHO = $(ECHO1:0=@ echo) -NULLCMD = : - -#### Start of system configuration section. #### - -srcdir = . -topdir = /opt/hostedtoolcache/Ruby/3.2.3/x64/include/ruby-3.2.0 -hdrdir = $(topdir) -arch_hdrdir = /opt/hostedtoolcache/Ruby/3.2.3/x64/include/ruby-3.2.0/x86_64-linux -PATH_SEPARATOR = : -VPATH = $(srcdir):$(arch_hdrdir)/ruby:$(hdrdir)/ruby -prefix = $(DESTDIR)/opt/hostedtoolcache/Ruby/3.2.3/x64 -rubysitearchprefix = $(rubylibprefix)/$(sitearch) -rubyarchprefix = $(rubylibprefix)/$(arch) -rubylibprefix = $(libdir)/$(RUBY_BASE_NAME) -exec_prefix = $(prefix) -vendorarchhdrdir = $(vendorhdrdir)/$(sitearch) -sitearchhdrdir = $(sitehdrdir)/$(sitearch) -rubyarchhdrdir = $(rubyhdrdir)/$(arch) -vendorhdrdir = $(rubyhdrdir)/vendor_ruby -sitehdrdir = $(rubyhdrdir)/site_ruby -rubyhdrdir = $(includedir)/$(RUBY_VERSION_NAME) -vendorarchdir = $(vendorlibdir)/$(sitearch) -vendorlibdir = $(vendordir)/$(ruby_version) -vendordir = $(rubylibprefix)/vendor_ruby -sitearchdir = $(sitelibdir)/$(sitearch) -sitelibdir = $(sitedir)/$(ruby_version) -sitedir = $(rubylibprefix)/site_ruby -rubyarchdir = $(rubylibdir)/$(arch) -rubylibdir = $(rubylibprefix)/$(ruby_version) -sitearchincludedir = $(includedir)/$(sitearch) -archincludedir = $(includedir)/$(arch) -sitearchlibdir = $(libdir)/$(sitearch) -archlibdir = $(libdir)/$(arch) -ridir = $(datarootdir)/$(RI_BASE_NAME) -mandir = $(datarootdir)/man -localedir = $(datarootdir)/locale -libdir = $(exec_prefix)/lib -psdir = $(docdir) -pdfdir = $(docdir) -dvidir = $(docdir) -htmldir = $(docdir) -infodir = $(datarootdir)/info -docdir = $(datarootdir)/doc/$(PACKAGE) -oldincludedir = $(DESTDIR)/usr/include -includedir = $(prefix)/include -runstatedir = $(localstatedir)/run -localstatedir = $(prefix)/var -sharedstatedir = $(prefix)/com -sysconfdir = $(prefix)/etc -datadir = $(datarootdir) -datarootdir = $(prefix)/share -libexecdir = $(exec_prefix)/libexec -sbindir = $(exec_prefix)/sbin -bindir = $(exec_prefix)/bin -archdir = $(rubyarchdir) - - -CC_WRAPPER = -CC = gcc -CXX = g++ -LIBRUBY = $(LIBRUBY_SO) -LIBRUBY_A = lib$(RUBY_SO_NAME)-static.a -LIBRUBYARG_SHARED = -Wl,-rpath,$(libdir) -L$(libdir) -l$(RUBY_SO_NAME) -LIBRUBYARG_STATIC = -Wl,-rpath,$(libdir) -L$(libdir) -l$(RUBY_SO_NAME)-static $(MAINLIBS) -empty = -OUTFLAG = -o $(empty) -COUTFLAG = -o $(empty) -CSRCFLAG = $(empty) - -RUBY_EXTCONF_H = -cflags = $(optflags) $(debugflags) $(warnflags) -cxxflags = -optflags = -O3 -fno-fast-math -debugflags = -ggdb3 -warnflags = -Wall -Wextra -Wdeprecated-declarations -Wdiv-by-zero -Wduplicated-cond -Wimplicit-function-declaration -Wimplicit-int -Wmisleading-indentation -Wpointer-arith -Wwrite-strings -Wold-style-definition -Wimplicit-fallthrough=0 -Wmissing-noreturn -Wno-cast-function-type -Wno-constant-logical-operand -Wno-long-long -Wno-missing-field-initializers -Wno-overlength-strings -Wno-packed-bitfield-compat -Wno-parentheses-equality -Wno-self-assign -Wno-tautological-compare -Wno-unused-parameter -Wno-unused-value -Wsuggest-attribute=format -Wsuggest-attribute=noreturn -Wunused-variable -Wundef -cppflags = -CCDLFLAGS = -fPIC -CFLAGS = $(CCDLFLAGS) $(cflags) -fPIC -DSTR_UMINUS_DEDUPE=1 -DSTR_UMINUS_DEDUPE_FROZEN=1 $(ARCH_FLAG) -INCFLAGS = -I. -I$(arch_hdrdir) -I$(hdrdir)/ruby/backward -I$(hdrdir) -I$(srcdir) -DEFS = -CPPFLAGS = -DHAVE_RB_ENC_RAISE -DHAVE_RB_ENC_INTERNED_STR -DENABLE_PATH_CHECK=0 $(DEFS) $(cppflags) -CXXFLAGS = $(CCDLFLAGS) $(ARCH_FLAG) -ldflags = -L. -fstack-protector-strong -rdynamic -Wl,-export-dynamic -Wl,--no-as-needed -dldflags = -Wl,--compress-debug-sections=zlib -ARCH_FLAG = -DLDFLAGS = $(ldflags) $(dldflags) $(ARCH_FLAG) -LDSHARED = $(CC) -shared -LDSHAREDXX = $(CXX) -shared -AR = gcc-ar -EXEEXT = - -RUBY_INSTALL_NAME = $(RUBY_BASE_NAME) -RUBY_SO_NAME = ruby -RUBYW_INSTALL_NAME = -RUBY_VERSION_NAME = $(RUBY_BASE_NAME)-$(ruby_version) -RUBYW_BASE_NAME = rubyw -RUBY_BASE_NAME = ruby - -arch = x86_64-linux -sitearch = $(arch) -ruby_version = 3.2.0 -ruby = $(bindir)/$(RUBY_BASE_NAME) -RUBY = $(ruby) -BUILTRUBY = $(bindir)/$(RUBY_BASE_NAME) -ruby_headers = $(hdrdir)/ruby.h $(hdrdir)/ruby/backward.h $(hdrdir)/ruby/ruby.h $(hdrdir)/ruby/defines.h $(hdrdir)/ruby/missing.h $(hdrdir)/ruby/intern.h $(hdrdir)/ruby/st.h $(hdrdir)/ruby/subst.h $(arch_hdrdir)/ruby/config.h - -RM = rm -f -RM_RF = rm -fr -RMDIRS = rmdir --ignore-fail-on-non-empty -p -MAKEDIRS = /usr/bin/mkdir -p -INSTALL = /usr/bin/install -c -INSTALL_PROG = $(INSTALL) -m 0755 -INSTALL_DATA = $(INSTALL) -m 644 -COPY = cp -TOUCH = exit > - -#### End of system configuration section. #### - -preload = -libpath = . $(libdir) -LIBPATH = -L. -L$(libdir) -Wl,-rpath,$(libdir) -DEFFILE = - -CLEANFILES = mkmf.log -DISTCLEANFILES = -DISTCLEANDIRS = - -extout = -extout_prefix = -target_prefix = /json/ext -LOCAL_LIBS = -LIBS = $(LIBRUBYARG_SHARED) -lm -lpthread -lc -ORIG_SRCS = parser.c -SRCS = $(ORIG_SRCS) -OBJS = parser.o -HDRS = $(srcdir)/parser.h -LOCAL_HDRS = -TARGET = parser -TARGET_NAME = parser -TARGET_ENTRY = Init_$(TARGET_NAME) -DLLIB = $(TARGET).so -EXTSTATIC = -STATIC_LIB = - -TIMESTAMP_DIR = . -BINDIR = $(bindir) -RUBYCOMMONDIR = $(sitedir)$(target_prefix) -RUBYLIBDIR = $(sitelibdir)$(target_prefix) -RUBYARCHDIR = $(sitearchdir)$(target_prefix) -HDRDIR = $(sitehdrdir)$(target_prefix) -ARCHHDRDIR = $(sitearchhdrdir)$(target_prefix) -TARGET_SO_DIR = -TARGET_SO = $(TARGET_SO_DIR)$(DLLIB) -CLEANLIBS = $(TARGET_SO) false -CLEANOBJS = $(OBJS) *.bak -TARGET_SO_DIR_TIMESTAMP = $(TIMESTAMP_DIR)/.sitearchdir.-.json.-.ext.time - -all: $(DLLIB) -static: $(STATIC_LIB) -.PHONY: all install static install-so install-rb -.PHONY: clean clean-so clean-static clean-rb - -clean-static:: -clean-rb-default:: -clean-rb:: -clean-so:: -clean: clean-so clean-static clean-rb-default clean-rb - -$(Q)$(RM_RF) $(CLEANLIBS) $(CLEANOBJS) $(CLEANFILES) .*.time - -distclean-rb-default:: -distclean-rb:: -distclean-so:: -distclean-static:: -distclean: clean distclean-so distclean-static distclean-rb-default distclean-rb - -$(Q)$(RM) Makefile $(RUBY_EXTCONF_H) conftest.* mkmf.log - -$(Q)$(RM) core ruby$(EXEEXT) *~ $(DISTCLEANFILES) - -$(Q)$(RMDIRS) $(DISTCLEANDIRS) 2> /dev/null || true - -realclean: distclean -install: install-so install-rb - -install-so: $(DLLIB) $(TARGET_SO_DIR_TIMESTAMP) - $(INSTALL_PROG) $(DLLIB) $(RUBYARCHDIR) -clean-static:: - -$(Q)$(RM) $(STATIC_LIB) -install-rb: pre-install-rb do-install-rb install-rb-default -install-rb-default: pre-install-rb-default do-install-rb-default -pre-install-rb: Makefile -pre-install-rb-default: Makefile -do-install-rb: -do-install-rb-default: -pre-install-rb-default: - @$(NULLCMD) -$(TARGET_SO_DIR_TIMESTAMP): - $(Q) $(MAKEDIRS) $(@D) $(RUBYARCHDIR) - $(Q) $(TOUCH) $@ - -site-install: site-install-so site-install-rb -site-install-so: install-so -site-install-rb: install-rb - -.SUFFIXES: .c .m .cc .mm .cxx .cpp .o .S - -.cc.o: - $(ECHO) compiling $(<) - $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$< - -.cc.S: - $(ECHO) translating $(<) - $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$< - -.mm.o: - $(ECHO) compiling $(<) - $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$< - -.mm.S: - $(ECHO) translating $(<) - $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$< - -.cxx.o: - $(ECHO) compiling $(<) - $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$< - -.cxx.S: - $(ECHO) translating $(<) - $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$< - -.cpp.o: - $(ECHO) compiling $(<) - $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$< - -.cpp.S: - $(ECHO) translating $(<) - $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$< - -.c.o: - $(ECHO) compiling $(<) - $(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$< - -.c.S: - $(ECHO) translating $(<) - $(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$< - -.m.o: - $(ECHO) compiling $(<) - $(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$< - -.m.S: - $(ECHO) translating $(<) - $(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$< - -$(TARGET_SO): $(OBJS) Makefile - $(ECHO) linking shared-object json/ext/$(DLLIB) - -$(Q)$(RM) $(@) - $(Q) $(LDSHARED) -o $@ $(OBJS) $(LIBPATH) $(DLDFLAGS) $(LOCAL_LIBS) $(LIBS) - - - -### -parser.o: parser.c parser.h $(srcdir)/../fbuffer/fbuffer.h diff --git a/bundle/ruby/3.2.0/gems/json-2.7.1/ext/json/ext/parser/depend b/bundle/ruby/3.2.0/gems/json-2.7.1/ext/json/ext/parser/depend deleted file mode 100644 index 498ffa96..00000000 --- a/bundle/ruby/3.2.0/gems/json-2.7.1/ext/json/ext/parser/depend +++ /dev/null @@ -1 +0,0 @@ -parser.o: parser.c parser.h $(srcdir)/../fbuffer/fbuffer.h diff --git a/bundle/ruby/3.2.0/gems/json-2.7.1/ext/json/ext/parser/extconf.rb b/bundle/ruby/3.2.0/gems/json-2.7.1/ext/json/ext/parser/extconf.rb deleted file mode 100644 index feb586e1..00000000 --- a/bundle/ruby/3.2.0/gems/json-2.7.1/ext/json/ext/parser/extconf.rb +++ /dev/null @@ -1,32 +0,0 @@ -# frozen_string_literal: false -require 'mkmf' - -have_func("rb_enc_raise", "ruby.h") -have_func("rb_enc_interned_str", "ruby.h") - -# checking if String#-@ (str_uminus) dedupes... ' -begin - a = -(%w(t e s t).join) - b = -(%w(t e s t).join) - if a.equal?(b) - $CFLAGS << ' -DSTR_UMINUS_DEDUPE=1 ' - else - $CFLAGS << ' -DSTR_UMINUS_DEDUPE=0 ' - end -rescue NoMethodError - $CFLAGS << ' -DSTR_UMINUS_DEDUPE=0 ' -end - -# checking if String#-@ (str_uminus) directly interns frozen strings... ' -begin - s = rand.to_s.freeze - if (-s).equal?(s) && (-s.dup).equal?(s) - $CFLAGS << ' -DSTR_UMINUS_DEDUPE_FROZEN=1 ' - else - $CFLAGS << ' -DSTR_UMINUS_DEDUPE_FROZEN=0 ' - end -rescue NoMethodError - $CFLAGS << ' -DSTR_UMINUS_DEDUPE_FROZEN=0 ' -end - -create_makefile 'json/ext/parser' diff --git a/bundle/ruby/3.2.0/gems/json-2.7.1/ext/json/ext/parser/parser.c b/bundle/ruby/3.2.0/gems/json-2.7.1/ext/json/ext/parser/parser.c deleted file mode 100644 index 57f87432..00000000 --- a/bundle/ruby/3.2.0/gems/json-2.7.1/ext/json/ext/parser/parser.c +++ /dev/null @@ -1,2211 +0,0 @@ -/* This file is automatically generated from parser.rl by using ragel */ -#line 1 "parser.rl" -#include "../fbuffer/fbuffer.h" -#include "parser.h" - -#if defined HAVE_RUBY_ENCODING_H -# define EXC_ENCODING rb_utf8_encoding(), -# ifndef HAVE_RB_ENC_RAISE -static void -enc_raise(rb_encoding *enc, VALUE exc, const char *fmt, ...) -{ - va_list args; - VALUE mesg; - - va_start(args, fmt); - mesg = rb_enc_vsprintf(enc, fmt, args); - va_end(args); - - rb_exc_raise(rb_exc_new3(exc, mesg)); -} -# define rb_enc_raise enc_raise -# endif -#else -# define EXC_ENCODING /* nothing */ -# define rb_enc_raise rb_raise -#endif - -/* unicode */ - -static const signed char digit_values[256] = { - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1, - -1, -1, -1, -1, -1, -1, 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1 -}; - -static UTF32 unescape_unicode(const unsigned char *p) -{ - signed char b; - UTF32 result = 0; - b = digit_values[p[0]]; - if (b < 0) return UNI_REPLACEMENT_CHAR; - result = (result << 4) | (unsigned char)b; - b = digit_values[p[1]]; - if (b < 0) return UNI_REPLACEMENT_CHAR; - result = (result << 4) | (unsigned char)b; - b = digit_values[p[2]]; - if (b < 0) return UNI_REPLACEMENT_CHAR; - result = (result << 4) | (unsigned char)b; - b = digit_values[p[3]]; - if (b < 0) return UNI_REPLACEMENT_CHAR; - result = (result << 4) | (unsigned char)b; - return result; -} - -static int convert_UTF32_to_UTF8(char *buf, UTF32 ch) -{ - int len = 1; - if (ch <= 0x7F) { - buf[0] = (char) ch; - } else if (ch <= 0x07FF) { - buf[0] = (char) ((ch >> 6) | 0xC0); - buf[1] = (char) ((ch & 0x3F) | 0x80); - len++; - } else if (ch <= 0xFFFF) { - buf[0] = (char) ((ch >> 12) | 0xE0); - buf[1] = (char) (((ch >> 6) & 0x3F) | 0x80); - buf[2] = (char) ((ch & 0x3F) | 0x80); - len += 2; - } else if (ch <= 0x1fffff) { - buf[0] =(char) ((ch >> 18) | 0xF0); - buf[1] =(char) (((ch >> 12) & 0x3F) | 0x80); - buf[2] =(char) (((ch >> 6) & 0x3F) | 0x80); - buf[3] =(char) ((ch & 0x3F) | 0x80); - len += 3; - } else { - buf[0] = '?'; - } - return len; -} - -static VALUE mJSON, mExt, cParser, eParserError, eNestingError; -static VALUE CNaN, CInfinity, CMinusInfinity; - -static ID i_json_creatable_p, i_json_create, i_create_id, i_create_additions, - i_chr, i_max_nesting, i_allow_nan, i_symbolize_names, - i_object_class, i_array_class, i_decimal_class, i_key_p, - i_deep_const_get, i_match, i_match_string, i_aset, i_aref, - i_leftshift, i_new, i_try_convert, i_freeze, i_uminus; - - -#line 125 "parser.rl" - - - -#line 107 "parser.c" -enum {JSON_object_start = 1}; -enum {JSON_object_first_final = 27}; -enum {JSON_object_error = 0}; - -enum {JSON_object_en_main = 1}; - - -#line 167 "parser.rl" - - -static char *JSON_parse_object(JSON_Parser *json, char *p, char *pe, VALUE *result, int current_nesting) -{ - int cs = EVIL; - VALUE last_name = Qnil; - VALUE object_class = json->object_class; - - if (json->max_nesting && current_nesting > json->max_nesting) { - rb_raise(eNestingError, "nesting of %d is too deep", current_nesting); - } - - *result = NIL_P(object_class) ? rb_hash_new() : rb_class_new_instance(0, 0, object_class); - - -#line 131 "parser.c" - { - cs = JSON_object_start; - } - -#line 182 "parser.rl" - -#line 138 "parser.c" - { - if ( p == pe ) - goto _test_eof; - switch ( cs ) - { -case 1: - if ( (*p) == 123 ) - goto st2; - goto st0; -st0: -cs = 0; - goto _out; -st2: - if ( ++p == pe ) - goto _test_eof2; -case 2: - switch( (*p) ) { - case 13: goto st2; - case 32: goto st2; - case 34: goto tr2; - case 47: goto st23; - case 125: goto tr4; - } - if ( 9 <= (*p) && (*p) <= 10 ) - goto st2; - goto st0; -tr2: -#line 149 "parser.rl" - { - char *np; - json->parsing_name = 1; - np = JSON_parse_string(json, p, pe, &last_name); - json->parsing_name = 0; - if (np == NULL) { p--; {p++; cs = 3; goto _out;} } else {p = (( np))-1;} - } - goto st3; -st3: - if ( ++p == pe ) - goto _test_eof3; -case 3: -#line 179 "parser.c" - switch( (*p) ) { - case 13: goto st3; - case 32: goto st3; - case 47: goto st4; - case 58: goto st8; - } - if ( 9 <= (*p) && (*p) <= 10 ) - goto st3; - goto st0; -st4: - if ( ++p == pe ) - goto _test_eof4; -case 4: - switch( (*p) ) { - case 42: goto st5; - case 47: goto st7; - } - goto st0; -st5: - if ( ++p == pe ) - goto _test_eof5; -case 5: - if ( (*p) == 42 ) - goto st6; - goto st5; -st6: - if ( ++p == pe ) - goto _test_eof6; -case 6: - switch( (*p) ) { - case 42: goto st6; - case 47: goto st3; - } - goto st5; -st7: - if ( ++p == pe ) - goto _test_eof7; -case 7: - if ( (*p) == 10 ) - goto st3; - goto st7; -st8: - if ( ++p == pe ) - goto _test_eof8; -case 8: - switch( (*p) ) { - case 13: goto st8; - case 32: goto st8; - case 34: goto tr11; - case 45: goto tr11; - case 47: goto st19; - case 73: goto tr11; - case 78: goto tr11; - case 91: goto tr11; - case 102: goto tr11; - case 110: goto tr11; - case 116: goto tr11; - case 123: goto tr11; - } - if ( (*p) > 10 ) { - if ( 48 <= (*p) && (*p) <= 57 ) - goto tr11; - } else if ( (*p) >= 9 ) - goto st8; - goto st0; -tr11: -#line 133 "parser.rl" - { - VALUE v = Qnil; - char *np = JSON_parse_value(json, p, pe, &v, current_nesting); - if (np == NULL) { - p--; {p++; cs = 9; goto _out;} - } else { - if (NIL_P(json->object_class)) { - OBJ_FREEZE(last_name); - rb_hash_aset(*result, last_name, v); - } else { - rb_funcall(*result, i_aset, 2, last_name, v); - } - {p = (( np))-1;} - } - } - goto st9; -st9: - if ( ++p == pe ) - goto _test_eof9; -case 9: -#line 267 "parser.c" - switch( (*p) ) { - case 13: goto st9; - case 32: goto st9; - case 44: goto st10; - case 47: goto st15; - case 125: goto tr4; - } - if ( 9 <= (*p) && (*p) <= 10 ) - goto st9; - goto st0; -st10: - if ( ++p == pe ) - goto _test_eof10; -case 10: - switch( (*p) ) { - case 13: goto st10; - case 32: goto st10; - case 34: goto tr2; - case 47: goto st11; - } - if ( 9 <= (*p) && (*p) <= 10 ) - goto st10; - goto st0; -st11: - if ( ++p == pe ) - goto _test_eof11; -case 11: - switch( (*p) ) { - case 42: goto st12; - case 47: goto st14; - } - goto st0; -st12: - if ( ++p == pe ) - goto _test_eof12; -case 12: - if ( (*p) == 42 ) - goto st13; - goto st12; -st13: - if ( ++p == pe ) - goto _test_eof13; -case 13: - switch( (*p) ) { - case 42: goto st13; - case 47: goto st10; - } - goto st12; -st14: - if ( ++p == pe ) - goto _test_eof14; -case 14: - if ( (*p) == 10 ) - goto st10; - goto st14; -st15: - if ( ++p == pe ) - goto _test_eof15; -case 15: - switch( (*p) ) { - case 42: goto st16; - case 47: goto st18; - } - goto st0; -st16: - if ( ++p == pe ) - goto _test_eof16; -case 16: - if ( (*p) == 42 ) - goto st17; - goto st16; -st17: - if ( ++p == pe ) - goto _test_eof17; -case 17: - switch( (*p) ) { - case 42: goto st17; - case 47: goto st9; - } - goto st16; -st18: - if ( ++p == pe ) - goto _test_eof18; -case 18: - if ( (*p) == 10 ) - goto st9; - goto st18; -tr4: -#line 157 "parser.rl" - { p--; {p++; cs = 27; goto _out;} } - goto st27; -st27: - if ( ++p == pe ) - goto _test_eof27; -case 27: -#line 363 "parser.c" - goto st0; -st19: - if ( ++p == pe ) - goto _test_eof19; -case 19: - switch( (*p) ) { - case 42: goto st20; - case 47: goto st22; - } - goto st0; -st20: - if ( ++p == pe ) - goto _test_eof20; -case 20: - if ( (*p) == 42 ) - goto st21; - goto st20; -st21: - if ( ++p == pe ) - goto _test_eof21; -case 21: - switch( (*p) ) { - case 42: goto st21; - case 47: goto st8; - } - goto st20; -st22: - if ( ++p == pe ) - goto _test_eof22; -case 22: - if ( (*p) == 10 ) - goto st8; - goto st22; -st23: - if ( ++p == pe ) - goto _test_eof23; -case 23: - switch( (*p) ) { - case 42: goto st24; - case 47: goto st26; - } - goto st0; -st24: - if ( ++p == pe ) - goto _test_eof24; -case 24: - if ( (*p) == 42 ) - goto st25; - goto st24; -st25: - if ( ++p == pe ) - goto _test_eof25; -case 25: - switch( (*p) ) { - case 42: goto st25; - case 47: goto st2; - } - goto st24; -st26: - if ( ++p == pe ) - goto _test_eof26; -case 26: - if ( (*p) == 10 ) - goto st2; - goto st26; - } - _test_eof2: cs = 2; goto _test_eof; - _test_eof3: cs = 3; goto _test_eof; - _test_eof4: cs = 4; goto _test_eof; - _test_eof5: cs = 5; goto _test_eof; - _test_eof6: cs = 6; goto _test_eof; - _test_eof7: cs = 7; goto _test_eof; - _test_eof8: cs = 8; goto _test_eof; - _test_eof9: cs = 9; goto _test_eof; - _test_eof10: cs = 10; goto _test_eof; - _test_eof11: cs = 11; goto _test_eof; - _test_eof12: cs = 12; goto _test_eof; - _test_eof13: cs = 13; goto _test_eof; - _test_eof14: cs = 14; goto _test_eof; - _test_eof15: cs = 15; goto _test_eof; - _test_eof16: cs = 16; goto _test_eof; - _test_eof17: cs = 17; goto _test_eof; - _test_eof18: cs = 18; goto _test_eof; - _test_eof27: cs = 27; goto _test_eof; - _test_eof19: cs = 19; goto _test_eof; - _test_eof20: cs = 20; goto _test_eof; - _test_eof21: cs = 21; goto _test_eof; - _test_eof22: cs = 22; goto _test_eof; - _test_eof23: cs = 23; goto _test_eof; - _test_eof24: cs = 24; goto _test_eof; - _test_eof25: cs = 25; goto _test_eof; - _test_eof26: cs = 26; goto _test_eof; - - _test_eof: {} - _out: {} - } - -#line 183 "parser.rl" - - if (cs >= JSON_object_first_final) { - if (json->create_additions) { - VALUE klassname; - if (NIL_P(json->object_class)) { - klassname = rb_hash_aref(*result, json->create_id); - } else { - klassname = rb_funcall(*result, i_aref, 1, json->create_id); - } - if (!NIL_P(klassname)) { - VALUE klass = rb_funcall(mJSON, i_deep_const_get, 1, klassname); - if (RTEST(rb_funcall(klass, i_json_creatable_p, 0))) { - *result = rb_funcall(klass, i_json_create, 1, *result); - } - } - } - return p + 1; - } else { - return NULL; - } -} - - - -#line 486 "parser.c" -enum {JSON_value_start = 1}; -enum {JSON_value_first_final = 29}; -enum {JSON_value_error = 0}; - -enum {JSON_value_en_main = 1}; - - -#line 283 "parser.rl" - - -static char *JSON_parse_value(JSON_Parser *json, char *p, char *pe, VALUE *result, int current_nesting) -{ - int cs = EVIL; - - -#line 502 "parser.c" - { - cs = JSON_value_start; - } - -#line 290 "parser.rl" - -#line 509 "parser.c" - { - if ( p == pe ) - goto _test_eof; - switch ( cs ) - { -st1: - if ( ++p == pe ) - goto _test_eof1; -case 1: - switch( (*p) ) { - case 13: goto st1; - case 32: goto st1; - case 34: goto tr2; - case 45: goto tr3; - case 47: goto st6; - case 73: goto st10; - case 78: goto st17; - case 91: goto tr7; - case 102: goto st19; - case 110: goto st23; - case 116: goto st26; - case 123: goto tr11; - } - if ( (*p) > 10 ) { - if ( 48 <= (*p) && (*p) <= 57 ) - goto tr3; - } else if ( (*p) >= 9 ) - goto st1; - goto st0; -st0: -cs = 0; - goto _out; -tr2: -#line 235 "parser.rl" - { - char *np = JSON_parse_string(json, p, pe, result); - if (np == NULL) { p--; {p++; cs = 29; goto _out;} } else {p = (( np))-1;} - } - goto st29; -tr3: -#line 240 "parser.rl" - { - char *np; - if(pe > p + 8 && !strncmp(MinusInfinity, p, 9)) { - if (json->allow_nan) { - *result = CMinusInfinity; - {p = (( p + 10))-1;} - p--; {p++; cs = 29; goto _out;} - } else { - rb_enc_raise(EXC_ENCODING eParserError, "unexpected token at '%s'", p); - } - } - np = JSON_parse_float(json, p, pe, result); - if (np != NULL) {p = (( np))-1;} - np = JSON_parse_integer(json, p, pe, result); - if (np != NULL) {p = (( np))-1;} - p--; {p++; cs = 29; goto _out;} - } - goto st29; -tr7: -#line 258 "parser.rl" - { - char *np; - np = JSON_parse_array(json, p, pe, result, current_nesting + 1); - if (np == NULL) { p--; {p++; cs = 29; goto _out;} } else {p = (( np))-1;} - } - goto st29; -tr11: -#line 264 "parser.rl" - { - char *np; - np = JSON_parse_object(json, p, pe, result, current_nesting + 1); - if (np == NULL) { p--; {p++; cs = 29; goto _out;} } else {p = (( np))-1;} - } - goto st29; -tr25: -#line 228 "parser.rl" - { - if (json->allow_nan) { - *result = CInfinity; - } else { - rb_enc_raise(EXC_ENCODING eParserError, "unexpected token at '%s'", p - 7); - } - } - goto st29; -tr27: -#line 221 "parser.rl" - { - if (json->allow_nan) { - *result = CNaN; - } else { - rb_enc_raise(EXC_ENCODING eParserError, "unexpected token at '%s'", p - 2); - } - } - goto st29; -tr31: -#line 215 "parser.rl" - { - *result = Qfalse; - } - goto st29; -tr34: -#line 212 "parser.rl" - { - *result = Qnil; - } - goto st29; -tr37: -#line 218 "parser.rl" - { - *result = Qtrue; - } - goto st29; -st29: - if ( ++p == pe ) - goto _test_eof29; -case 29: -#line 270 "parser.rl" - { p--; {p++; cs = 29; goto _out;} } -#line 629 "parser.c" - switch( (*p) ) { - case 13: goto st29; - case 32: goto st29; - case 47: goto st2; - } - if ( 9 <= (*p) && (*p) <= 10 ) - goto st29; - goto st0; -st2: - if ( ++p == pe ) - goto _test_eof2; -case 2: - switch( (*p) ) { - case 42: goto st3; - case 47: goto st5; - } - goto st0; -st3: - if ( ++p == pe ) - goto _test_eof3; -case 3: - if ( (*p) == 42 ) - goto st4; - goto st3; -st4: - if ( ++p == pe ) - goto _test_eof4; -case 4: - switch( (*p) ) { - case 42: goto st4; - case 47: goto st29; - } - goto st3; -st5: - if ( ++p == pe ) - goto _test_eof5; -case 5: - if ( (*p) == 10 ) - goto st29; - goto st5; -st6: - if ( ++p == pe ) - goto _test_eof6; -case 6: - switch( (*p) ) { - case 42: goto st7; - case 47: goto st9; - } - goto st0; -st7: - if ( ++p == pe ) - goto _test_eof7; -case 7: - if ( (*p) == 42 ) - goto st8; - goto st7; -st8: - if ( ++p == pe ) - goto _test_eof8; -case 8: - switch( (*p) ) { - case 42: goto st8; - case 47: goto st1; - } - goto st7; -st9: - if ( ++p == pe ) - goto _test_eof9; -case 9: - if ( (*p) == 10 ) - goto st1; - goto st9; -st10: - if ( ++p == pe ) - goto _test_eof10; -case 10: - if ( (*p) == 110 ) - goto st11; - goto st0; -st11: - if ( ++p == pe ) - goto _test_eof11; -case 11: - if ( (*p) == 102 ) - goto st12; - goto st0; -st12: - if ( ++p == pe ) - goto _test_eof12; -case 12: - if ( (*p) == 105 ) - goto st13; - goto st0; -st13: - if ( ++p == pe ) - goto _test_eof13; -case 13: - if ( (*p) == 110 ) - goto st14; - goto st0; -st14: - if ( ++p == pe ) - goto _test_eof14; -case 14: - if ( (*p) == 105 ) - goto st15; - goto st0; -st15: - if ( ++p == pe ) - goto _test_eof15; -case 15: - if ( (*p) == 116 ) - goto st16; - goto st0; -st16: - if ( ++p == pe ) - goto _test_eof16; -case 16: - if ( (*p) == 121 ) - goto tr25; - goto st0; -st17: - if ( ++p == pe ) - goto _test_eof17; -case 17: - if ( (*p) == 97 ) - goto st18; - goto st0; -st18: - if ( ++p == pe ) - goto _test_eof18; -case 18: - if ( (*p) == 78 ) - goto tr27; - goto st0; -st19: - if ( ++p == pe ) - goto _test_eof19; -case 19: - if ( (*p) == 97 ) - goto st20; - goto st0; -st20: - if ( ++p == pe ) - goto _test_eof20; -case 20: - if ( (*p) == 108 ) - goto st21; - goto st0; -st21: - if ( ++p == pe ) - goto _test_eof21; -case 21: - if ( (*p) == 115 ) - goto st22; - goto st0; -st22: - if ( ++p == pe ) - goto _test_eof22; -case 22: - if ( (*p) == 101 ) - goto tr31; - goto st0; -st23: - if ( ++p == pe ) - goto _test_eof23; -case 23: - if ( (*p) == 117 ) - goto st24; - goto st0; -st24: - if ( ++p == pe ) - goto _test_eof24; -case 24: - if ( (*p) == 108 ) - goto st25; - goto st0; -st25: - if ( ++p == pe ) - goto _test_eof25; -case 25: - if ( (*p) == 108 ) - goto tr34; - goto st0; -st26: - if ( ++p == pe ) - goto _test_eof26; -case 26: - if ( (*p) == 114 ) - goto st27; - goto st0; -st27: - if ( ++p == pe ) - goto _test_eof27; -case 27: - if ( (*p) == 117 ) - goto st28; - goto st0; -st28: - if ( ++p == pe ) - goto _test_eof28; -case 28: - if ( (*p) == 101 ) - goto tr37; - goto st0; - } - _test_eof1: cs = 1; goto _test_eof; - _test_eof29: cs = 29; goto _test_eof; - _test_eof2: cs = 2; goto _test_eof; - _test_eof3: cs = 3; goto _test_eof; - _test_eof4: cs = 4; goto _test_eof; - _test_eof5: cs = 5; goto _test_eof; - _test_eof6: cs = 6; goto _test_eof; - _test_eof7: cs = 7; goto _test_eof; - _test_eof8: cs = 8; goto _test_eof; - _test_eof9: cs = 9; goto _test_eof; - _test_eof10: cs = 10; goto _test_eof; - _test_eof11: cs = 11; goto _test_eof; - _test_eof12: cs = 12; goto _test_eof; - _test_eof13: cs = 13; goto _test_eof; - _test_eof14: cs = 14; goto _test_eof; - _test_eof15: cs = 15; goto _test_eof; - _test_eof16: cs = 16; goto _test_eof; - _test_eof17: cs = 17; goto _test_eof; - _test_eof18: cs = 18; goto _test_eof; - _test_eof19: cs = 19; goto _test_eof; - _test_eof20: cs = 20; goto _test_eof; - _test_eof21: cs = 21; goto _test_eof; - _test_eof22: cs = 22; goto _test_eof; - _test_eof23: cs = 23; goto _test_eof; - _test_eof24: cs = 24; goto _test_eof; - _test_eof25: cs = 25; goto _test_eof; - _test_eof26: cs = 26; goto _test_eof; - _test_eof27: cs = 27; goto _test_eof; - _test_eof28: cs = 28; goto _test_eof; - - _test_eof: {} - _out: {} - } - -#line 291 "parser.rl" - - if (json->freeze) { - OBJ_FREEZE(*result); - } - - if (cs >= JSON_value_first_final) { - return p; - } else { - return NULL; - } -} - - -#line 884 "parser.c" -enum {JSON_integer_start = 1}; -enum {JSON_integer_first_final = 3}; -enum {JSON_integer_error = 0}; - -enum {JSON_integer_en_main = 1}; - - -#line 311 "parser.rl" - - -static char *JSON_parse_integer(JSON_Parser *json, char *p, char *pe, VALUE *result) -{ - int cs = EVIL; - - -#line 900 "parser.c" - { - cs = JSON_integer_start; - } - -#line 318 "parser.rl" - json->memo = p; - -#line 908 "parser.c" - { - if ( p == pe ) - goto _test_eof; - switch ( cs ) - { -case 1: - switch( (*p) ) { - case 45: goto st2; - case 48: goto st3; - } - if ( 49 <= (*p) && (*p) <= 57 ) - goto st5; - goto st0; -st0: -cs = 0; - goto _out; -st2: - if ( ++p == pe ) - goto _test_eof2; -case 2: - if ( (*p) == 48 ) - goto st3; - if ( 49 <= (*p) && (*p) <= 57 ) - goto st5; - goto st0; -st3: - if ( ++p == pe ) - goto _test_eof3; -case 3: - if ( 48 <= (*p) && (*p) <= 57 ) - goto st0; - goto tr4; -tr4: -#line 308 "parser.rl" - { p--; {p++; cs = 4; goto _out;} } - goto st4; -st4: - if ( ++p == pe ) - goto _test_eof4; -case 4: -#line 949 "parser.c" - goto st0; -st5: - if ( ++p == pe ) - goto _test_eof5; -case 5: - if ( 48 <= (*p) && (*p) <= 57 ) - goto st5; - goto tr4; - } - _test_eof2: cs = 2; goto _test_eof; - _test_eof3: cs = 3; goto _test_eof; - _test_eof4: cs = 4; goto _test_eof; - _test_eof5: cs = 5; goto _test_eof; - - _test_eof: {} - _out: {} - } - -#line 320 "parser.rl" - - if (cs >= JSON_integer_first_final) { - long len = p - json->memo; - fbuffer_clear(json->fbuffer); - fbuffer_append(json->fbuffer, json->memo, len); - fbuffer_append_char(json->fbuffer, '\0'); - *result = rb_cstr2inum(FBUFFER_PTR(json->fbuffer), 10); - return p + 1; - } else { - return NULL; - } -} - - -#line 983 "parser.c" -enum {JSON_float_start = 1}; -enum {JSON_float_first_final = 8}; -enum {JSON_float_error = 0}; - -enum {JSON_float_en_main = 1}; - - -#line 345 "parser.rl" - - -static char *JSON_parse_float(JSON_Parser *json, char *p, char *pe, VALUE *result) -{ - int cs = EVIL; - - -#line 999 "parser.c" - { - cs = JSON_float_start; - } - -#line 352 "parser.rl" - json->memo = p; - -#line 1007 "parser.c" - { - if ( p == pe ) - goto _test_eof; - switch ( cs ) - { -case 1: - switch( (*p) ) { - case 45: goto st2; - case 48: goto st3; - } - if ( 49 <= (*p) && (*p) <= 57 ) - goto st7; - goto st0; -st0: -cs = 0; - goto _out; -st2: - if ( ++p == pe ) - goto _test_eof2; -case 2: - if ( (*p) == 48 ) - goto st3; - if ( 49 <= (*p) && (*p) <= 57 ) - goto st7; - goto st0; -st3: - if ( ++p == pe ) - goto _test_eof3; -case 3: - switch( (*p) ) { - case 46: goto st4; - case 69: goto st5; - case 101: goto st5; - } - goto st0; -st4: - if ( ++p == pe ) - goto _test_eof4; -case 4: - if ( 48 <= (*p) && (*p) <= 57 ) - goto st8; - goto st0; -st8: - if ( ++p == pe ) - goto _test_eof8; -case 8: - switch( (*p) ) { - case 69: goto st5; - case 101: goto st5; - } - if ( (*p) > 46 ) { - if ( 48 <= (*p) && (*p) <= 57 ) - goto st8; - } else if ( (*p) >= 45 ) - goto st0; - goto tr9; -tr9: -#line 339 "parser.rl" - { p--; {p++; cs = 9; goto _out;} } - goto st9; -st9: - if ( ++p == pe ) - goto _test_eof9; -case 9: -#line 1072 "parser.c" - goto st0; -st5: - if ( ++p == pe ) - goto _test_eof5; -case 5: - switch( (*p) ) { - case 43: goto st6; - case 45: goto st6; - } - if ( 48 <= (*p) && (*p) <= 57 ) - goto st10; - goto st0; -st6: - if ( ++p == pe ) - goto _test_eof6; -case 6: - if ( 48 <= (*p) && (*p) <= 57 ) - goto st10; - goto st0; -st10: - if ( ++p == pe ) - goto _test_eof10; -case 10: - switch( (*p) ) { - case 69: goto st0; - case 101: goto st0; - } - if ( (*p) > 46 ) { - if ( 48 <= (*p) && (*p) <= 57 ) - goto st10; - } else if ( (*p) >= 45 ) - goto st0; - goto tr9; -st7: - if ( ++p == pe ) - goto _test_eof7; -case 7: - switch( (*p) ) { - case 46: goto st4; - case 69: goto st5; - case 101: goto st5; - } - if ( 48 <= (*p) && (*p) <= 57 ) - goto st7; - goto st0; - } - _test_eof2: cs = 2; goto _test_eof; - _test_eof3: cs = 3; goto _test_eof; - _test_eof4: cs = 4; goto _test_eof; - _test_eof8: cs = 8; goto _test_eof; - _test_eof9: cs = 9; goto _test_eof; - _test_eof5: cs = 5; goto _test_eof; - _test_eof6: cs = 6; goto _test_eof; - _test_eof10: cs = 10; goto _test_eof; - _test_eof7: cs = 7; goto _test_eof; - - _test_eof: {} - _out: {} - } - -#line 354 "parser.rl" - - if (cs >= JSON_float_first_final) { - VALUE mod = Qnil; - ID method_id = 0; - if (rb_respond_to(json->decimal_class, i_try_convert)) { - mod = json->decimal_class; - method_id = i_try_convert; - } else if (rb_respond_to(json->decimal_class, i_new)) { - mod = json->decimal_class; - method_id = i_new; - } else if (RB_TYPE_P(json->decimal_class, T_CLASS)) { - VALUE name = rb_class_name(json->decimal_class); - const char *name_cstr = RSTRING_PTR(name); - const char *last_colon = strrchr(name_cstr, ':'); - if (last_colon) { - const char *mod_path_end = last_colon - 1; - VALUE mod_path = rb_str_substr(name, 0, mod_path_end - name_cstr); - mod = rb_path_to_class(mod_path); - - const char *method_name_beg = last_colon + 1; - long before_len = method_name_beg - name_cstr; - long len = RSTRING_LEN(name) - before_len; - VALUE method_name = rb_str_substr(name, before_len, len); - method_id = SYM2ID(rb_str_intern(method_name)); - } else { - mod = rb_mKernel; - method_id = SYM2ID(rb_str_intern(name)); - } - } - - long len = p - json->memo; - fbuffer_clear(json->fbuffer); - fbuffer_append(json->fbuffer, json->memo, len); - fbuffer_append_char(json->fbuffer, '\0'); - - if (method_id) { - VALUE text = rb_str_new2(FBUFFER_PTR(json->fbuffer)); - *result = rb_funcallv(mod, method_id, 1, &text); - } else { - *result = DBL2NUM(rb_cstr_to_dbl(FBUFFER_PTR(json->fbuffer), 1)); - } - - return p + 1; - } else { - return NULL; - } -} - - - -#line 1184 "parser.c" -enum {JSON_array_start = 1}; -enum {JSON_array_first_final = 17}; -enum {JSON_array_error = 0}; - -enum {JSON_array_en_main = 1}; - - -#line 432 "parser.rl" - - -static char *JSON_parse_array(JSON_Parser *json, char *p, char *pe, VALUE *result, int current_nesting) -{ - int cs = EVIL; - VALUE array_class = json->array_class; - - if (json->max_nesting && current_nesting > json->max_nesting) { - rb_raise(eNestingError, "nesting of %d is too deep", current_nesting); - } - *result = NIL_P(array_class) ? rb_ary_new() : rb_class_new_instance(0, 0, array_class); - - -#line 1206 "parser.c" - { - cs = JSON_array_start; - } - -#line 445 "parser.rl" - -#line 1213 "parser.c" - { - if ( p == pe ) - goto _test_eof; - switch ( cs ) - { -case 1: - if ( (*p) == 91 ) - goto st2; - goto st0; -st0: -cs = 0; - goto _out; -st2: - if ( ++p == pe ) - goto _test_eof2; -case 2: - switch( (*p) ) { - case 13: goto st2; - case 32: goto st2; - case 34: goto tr2; - case 45: goto tr2; - case 47: goto st13; - case 73: goto tr2; - case 78: goto tr2; - case 91: goto tr2; - case 93: goto tr4; - case 102: goto tr2; - case 110: goto tr2; - case 116: goto tr2; - case 123: goto tr2; - } - if ( (*p) > 10 ) { - if ( 48 <= (*p) && (*p) <= 57 ) - goto tr2; - } else if ( (*p) >= 9 ) - goto st2; - goto st0; -tr2: -#line 409 "parser.rl" - { - VALUE v = Qnil; - char *np = JSON_parse_value(json, p, pe, &v, current_nesting); - if (np == NULL) { - p--; {p++; cs = 3; goto _out;} - } else { - if (NIL_P(json->array_class)) { - rb_ary_push(*result, v); - } else { - rb_funcall(*result, i_leftshift, 1, v); - } - {p = (( np))-1;} - } - } - goto st3; -st3: - if ( ++p == pe ) - goto _test_eof3; -case 3: -#line 1272 "parser.c" - switch( (*p) ) { - case 13: goto st3; - case 32: goto st3; - case 44: goto st4; - case 47: goto st9; - case 93: goto tr4; - } - if ( 9 <= (*p) && (*p) <= 10 ) - goto st3; - goto st0; -st4: - if ( ++p == pe ) - goto _test_eof4; -case 4: - switch( (*p) ) { - case 13: goto st4; - case 32: goto st4; - case 34: goto tr2; - case 45: goto tr2; - case 47: goto st5; - case 73: goto tr2; - case 78: goto tr2; - case 91: goto tr2; - case 102: goto tr2; - case 110: goto tr2; - case 116: goto tr2; - case 123: goto tr2; - } - if ( (*p) > 10 ) { - if ( 48 <= (*p) && (*p) <= 57 ) - goto tr2; - } else if ( (*p) >= 9 ) - goto st4; - goto st0; -st5: - if ( ++p == pe ) - goto _test_eof5; -case 5: - switch( (*p) ) { - case 42: goto st6; - case 47: goto st8; - } - goto st0; -st6: - if ( ++p == pe ) - goto _test_eof6; -case 6: - if ( (*p) == 42 ) - goto st7; - goto st6; -st7: - if ( ++p == pe ) - goto _test_eof7; -case 7: - switch( (*p) ) { - case 42: goto st7; - case 47: goto st4; - } - goto st6; -st8: - if ( ++p == pe ) - goto _test_eof8; -case 8: - if ( (*p) == 10 ) - goto st4; - goto st8; -st9: - if ( ++p == pe ) - goto _test_eof9; -case 9: - switch( (*p) ) { - case 42: goto st10; - case 47: goto st12; - } - goto st0; -st10: - if ( ++p == pe ) - goto _test_eof10; -case 10: - if ( (*p) == 42 ) - goto st11; - goto st10; -st11: - if ( ++p == pe ) - goto _test_eof11; -case 11: - switch( (*p) ) { - case 42: goto st11; - case 47: goto st3; - } - goto st10; -st12: - if ( ++p == pe ) - goto _test_eof12; -case 12: - if ( (*p) == 10 ) - goto st3; - goto st12; -tr4: -#line 424 "parser.rl" - { p--; {p++; cs = 17; goto _out;} } - goto st17; -st17: - if ( ++p == pe ) - goto _test_eof17; -case 17: -#line 1379 "parser.c" - goto st0; -st13: - if ( ++p == pe ) - goto _test_eof13; -case 13: - switch( (*p) ) { - case 42: goto st14; - case 47: goto st16; - } - goto st0; -st14: - if ( ++p == pe ) - goto _test_eof14; -case 14: - if ( (*p) == 42 ) - goto st15; - goto st14; -st15: - if ( ++p == pe ) - goto _test_eof15; -case 15: - switch( (*p) ) { - case 42: goto st15; - case 47: goto st2; - } - goto st14; -st16: - if ( ++p == pe ) - goto _test_eof16; -case 16: - if ( (*p) == 10 ) - goto st2; - goto st16; - } - _test_eof2: cs = 2; goto _test_eof; - _test_eof3: cs = 3; goto _test_eof; - _test_eof4: cs = 4; goto _test_eof; - _test_eof5: cs = 5; goto _test_eof; - _test_eof6: cs = 6; goto _test_eof; - _test_eof7: cs = 7; goto _test_eof; - _test_eof8: cs = 8; goto _test_eof; - _test_eof9: cs = 9; goto _test_eof; - _test_eof10: cs = 10; goto _test_eof; - _test_eof11: cs = 11; goto _test_eof; - _test_eof12: cs = 12; goto _test_eof; - _test_eof17: cs = 17; goto _test_eof; - _test_eof13: cs = 13; goto _test_eof; - _test_eof14: cs = 14; goto _test_eof; - _test_eof15: cs = 15; goto _test_eof; - _test_eof16: cs = 16; goto _test_eof; - - _test_eof: {} - _out: {} - } - -#line 446 "parser.rl" - - if(cs >= JSON_array_first_final) { - return p + 1; - } else { - rb_enc_raise(EXC_ENCODING eParserError, "unexpected token at '%s'", p); - return NULL; - } -} - -static const size_t MAX_STACK_BUFFER_SIZE = 128; -static VALUE json_string_unescape(char *string, char *stringEnd, int intern, int symbolize) -{ - VALUE result = Qnil; - size_t bufferSize = stringEnd - string; - char *p = string, *pe = string, *unescape, *bufferStart, *buffer; - int unescape_len; - char buf[4]; - - if (bufferSize > MAX_STACK_BUFFER_SIZE) { -# ifdef HAVE_RB_ENC_INTERNED_STR - bufferStart = buffer = ALLOC_N(char, bufferSize ? bufferSize : 1); -# else - bufferStart = buffer = ALLOC_N(char, bufferSize); -# endif - } else { -# ifdef HAVE_RB_ENC_INTERNED_STR - bufferStart = buffer = ALLOCA_N(char, bufferSize ? bufferSize : 1); -# else - bufferStart = buffer = ALLOCA_N(char, bufferSize); -# endif - } - - while (pe < stringEnd) { - if (*pe == '\\') { - unescape = (char *) "?"; - unescape_len = 1; - if (pe > p) { - MEMCPY(buffer, p, char, pe - p); - buffer += pe - p; - } - switch (*++pe) { - case 'n': - unescape = (char *) "\n"; - break; - case 'r': - unescape = (char *) "\r"; - break; - case 't': - unescape = (char *) "\t"; - break; - case '"': - unescape = (char *) "\""; - break; - case '\\': - unescape = (char *) "\\"; - break; - case 'b': - unescape = (char *) "\b"; - break; - case 'f': - unescape = (char *) "\f"; - break; - case 'u': - if (pe > stringEnd - 4) { - if (bufferSize > MAX_STACK_BUFFER_SIZE) { - ruby_xfree(bufferStart); - } - rb_enc_raise( - EXC_ENCODING eParserError, - "incomplete unicode character escape sequence at '%s'", p - ); - } else { - UTF32 ch = unescape_unicode((unsigned char *) ++pe); - pe += 3; - if (UNI_SUR_HIGH_START == (ch & 0xFC00)) { - pe++; - if (pe > stringEnd - 6) { - if (bufferSize > MAX_STACK_BUFFER_SIZE) { - ruby_xfree(bufferStart); - } - rb_enc_raise( - EXC_ENCODING eParserError, - "incomplete surrogate pair at '%s'", p - ); - } - if (pe[0] == '\\' && pe[1] == 'u') { - UTF32 sur = unescape_unicode((unsigned char *) pe + 2); - ch = (((ch & 0x3F) << 10) | ((((ch >> 6) & 0xF) + 1) << 16) - | (sur & 0x3FF)); - pe += 5; - } else { - unescape = (char *) "?"; - break; - } - } - unescape_len = convert_UTF32_to_UTF8(buf, ch); - unescape = buf; - } - break; - default: - p = pe; - continue; - } - MEMCPY(buffer, unescape, char, unescape_len); - buffer += unescape_len; - p = ++pe; - } else { - pe++; - } - } - - if (pe > p) { - MEMCPY(buffer, p, char, pe - p); - buffer += pe - p; - } - -# ifdef HAVE_RB_ENC_INTERNED_STR - if (intern) { - result = rb_enc_interned_str(bufferStart, (long)(buffer - bufferStart), rb_utf8_encoding()); - } else { - result = rb_utf8_str_new(bufferStart, (long)(buffer - bufferStart)); - } - if (bufferSize > MAX_STACK_BUFFER_SIZE) { - ruby_xfree(bufferStart); - } -# else - result = rb_utf8_str_new(bufferStart, (long)(buffer - bufferStart)); - - if (bufferSize > MAX_STACK_BUFFER_SIZE) { - ruby_xfree(bufferStart); - } - - if (intern) { - # if STR_UMINUS_DEDUPE_FROZEN - // Starting from MRI 2.8 it is preferable to freeze the string - // before deduplication so that it can be interned directly - // otherwise it would be duplicated first which is wasteful. - result = rb_funcall(rb_str_freeze(result), i_uminus, 0); - # elif STR_UMINUS_DEDUPE - // MRI 2.5 and older do not deduplicate strings that are already - // frozen. - result = rb_funcall(result, i_uminus, 0); - # else - result = rb_str_freeze(result); - # endif - } -# endif - - if (symbolize) { - result = rb_str_intern(result); - } - - return result; -} - - -#line 1592 "parser.c" -enum {JSON_string_start = 1}; -enum {JSON_string_first_final = 8}; -enum {JSON_string_error = 0}; - -enum {JSON_string_en_main = 1}; - - -#line 620 "parser.rl" - - -static int -match_i(VALUE regexp, VALUE klass, VALUE memo) -{ - if (regexp == Qundef) return ST_STOP; - if (RTEST(rb_funcall(klass, i_json_creatable_p, 0)) && - RTEST(rb_funcall(regexp, i_match, 1, rb_ary_entry(memo, 0)))) { - rb_ary_push(memo, klass); - return ST_STOP; - } - return ST_CONTINUE; -} - -static char *JSON_parse_string(JSON_Parser *json, char *p, char *pe, VALUE *result) -{ - int cs = EVIL; - VALUE match_string; - - -#line 1621 "parser.c" - { - cs = JSON_string_start; - } - -#line 640 "parser.rl" - json->memo = p; - -#line 1629 "parser.c" - { - if ( p == pe ) - goto _test_eof; - switch ( cs ) - { -case 1: - if ( (*p) == 34 ) - goto st2; - goto st0; -st0: -cs = 0; - goto _out; -st2: - if ( ++p == pe ) - goto _test_eof2; -case 2: - switch( (*p) ) { - case 34: goto tr2; - case 92: goto st3; - } - if ( 0 <= (signed char)(*(p)) && (*(p)) <= 31 ) - goto st0; - goto st2; -tr2: -#line 607 "parser.rl" - { - *result = json_string_unescape(json->memo + 1, p, json->parsing_name || json-> freeze, json->parsing_name && json->symbolize_names); - if (NIL_P(*result)) { - p--; - {p++; cs = 8; goto _out;} - } else { - {p = (( p + 1))-1;} - } - } -#line 617 "parser.rl" - { p--; {p++; cs = 8; goto _out;} } - goto st8; -st8: - if ( ++p == pe ) - goto _test_eof8; -case 8: -#line 1671 "parser.c" - goto st0; -st3: - if ( ++p == pe ) - goto _test_eof3; -case 3: - if ( (*p) == 117 ) - goto st4; - if ( 0 <= (signed char)(*(p)) && (*(p)) <= 31 ) - goto st0; - goto st2; -st4: - if ( ++p == pe ) - goto _test_eof4; -case 4: - if ( (*p) < 65 ) { - if ( 48 <= (*p) && (*p) <= 57 ) - goto st5; - } else if ( (*p) > 70 ) { - if ( 97 <= (*p) && (*p) <= 102 ) - goto st5; - } else - goto st5; - goto st0; -st5: - if ( ++p == pe ) - goto _test_eof5; -case 5: - if ( (*p) < 65 ) { - if ( 48 <= (*p) && (*p) <= 57 ) - goto st6; - } else if ( (*p) > 70 ) { - if ( 97 <= (*p) && (*p) <= 102 ) - goto st6; - } else - goto st6; - goto st0; -st6: - if ( ++p == pe ) - goto _test_eof6; -case 6: - if ( (*p) < 65 ) { - if ( 48 <= (*p) && (*p) <= 57 ) - goto st7; - } else if ( (*p) > 70 ) { - if ( 97 <= (*p) && (*p) <= 102 ) - goto st7; - } else - goto st7; - goto st0; -st7: - if ( ++p == pe ) - goto _test_eof7; -case 7: - if ( (*p) < 65 ) { - if ( 48 <= (*p) && (*p) <= 57 ) - goto st2; - } else if ( (*p) > 70 ) { - if ( 97 <= (*p) && (*p) <= 102 ) - goto st2; - } else - goto st2; - goto st0; - } - _test_eof2: cs = 2; goto _test_eof; - _test_eof8: cs = 8; goto _test_eof; - _test_eof3: cs = 3; goto _test_eof; - _test_eof4: cs = 4; goto _test_eof; - _test_eof5: cs = 5; goto _test_eof; - _test_eof6: cs = 6; goto _test_eof; - _test_eof7: cs = 7; goto _test_eof; - - _test_eof: {} - _out: {} - } - -#line 642 "parser.rl" - - if (json->create_additions && RTEST(match_string = json->match_string)) { - VALUE klass; - VALUE memo = rb_ary_new2(2); - rb_ary_push(memo, *result); - rb_hash_foreach(match_string, match_i, memo); - klass = rb_ary_entry(memo, 1); - if (RTEST(klass)) { - *result = rb_funcall(klass, i_json_create, 1, *result); - } - } - - if (cs >= JSON_string_first_final) { - return p + 1; - } else { - return NULL; - } -} - -/* - * Document-class: JSON::Ext::Parser - * - * This is the JSON parser implemented as a C extension. It can be configured - * to be used by setting - * - * JSON.parser = JSON::Ext::Parser - * - * with the method parser= in JSON. - * - */ - -static VALUE convert_encoding(VALUE source) -{ -#ifdef HAVE_RUBY_ENCODING_H - rb_encoding *enc = rb_enc_get(source); - if (enc == rb_ascii8bit_encoding()) { - if (OBJ_FROZEN(source)) { - source = rb_str_dup(source); - } - FORCE_UTF8(source); - } else { - source = rb_str_conv_enc(source, rb_enc_get(source), rb_utf8_encoding()); - } -#endif - return source; -} - -/* - * call-seq: new(source, opts => {}) - * - * Creates a new JSON::Ext::Parser instance for the string _source_. - * - * It will be configured by the _opts_ hash. _opts_ can have the following - * keys: - * - * _opts_ can have the following keys: - * * *max_nesting*: The maximum depth of nesting allowed in the parsed data - * structures. Disable depth checking with :max_nesting => false|nil|0, it - * defaults to 100. - * * *allow_nan*: If set to true, allow NaN, Infinity and -Infinity in - * defiance of RFC 4627 to be parsed by the Parser. This option defaults to - * false. - * * *symbolize_names*: If set to true, returns symbols for the names - * (keys) in a JSON object. Otherwise strings are returned, which is - * also the default. It's not possible to use this option in - * conjunction with the *create_additions* option. - * * *create_additions*: If set to false, the Parser doesn't create - * additions even if a matching class and create_id was found. This option - * defaults to false. - * * *object_class*: Defaults to Hash - * * *array_class*: Defaults to Array - */ -static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self) -{ - VALUE source, opts; - GET_PARSER_INIT; - - if (json->Vsource) { - rb_raise(rb_eTypeError, "already initialized instance"); - } - rb_scan_args(argc, argv, "1:", &source, &opts); - if (!NIL_P(opts)) { - VALUE tmp = ID2SYM(i_max_nesting); - if (option_given_p(opts, tmp)) { - VALUE max_nesting = rb_hash_aref(opts, tmp); - if (RTEST(max_nesting)) { - Check_Type(max_nesting, T_FIXNUM); - json->max_nesting = FIX2INT(max_nesting); - } else { - json->max_nesting = 0; - } - } else { - json->max_nesting = 100; - } - tmp = ID2SYM(i_allow_nan); - if (option_given_p(opts, tmp)) { - json->allow_nan = RTEST(rb_hash_aref(opts, tmp)) ? 1 : 0; - } else { - json->allow_nan = 0; - } - tmp = ID2SYM(i_symbolize_names); - if (option_given_p(opts, tmp)) { - json->symbolize_names = RTEST(rb_hash_aref(opts, tmp)) ? 1 : 0; - } else { - json->symbolize_names = 0; - } - tmp = ID2SYM(i_freeze); - if (option_given_p(opts, tmp)) { - json->freeze = RTEST(rb_hash_aref(opts, tmp)) ? 1 : 0; - } else { - json->freeze = 0; - } - tmp = ID2SYM(i_create_additions); - if (option_given_p(opts, tmp)) { - json->create_additions = RTEST(rb_hash_aref(opts, tmp)); - } else { - json->create_additions = 0; - } - if (json->symbolize_names && json->create_additions) { - rb_raise(rb_eArgError, - "options :symbolize_names and :create_additions cannot be " - " used in conjunction"); - } - tmp = ID2SYM(i_create_id); - if (option_given_p(opts, tmp)) { - json->create_id = rb_hash_aref(opts, tmp); - } else { - json->create_id = rb_funcall(mJSON, i_create_id, 0); - } - tmp = ID2SYM(i_object_class); - if (option_given_p(opts, tmp)) { - json->object_class = rb_hash_aref(opts, tmp); - } else { - json->object_class = Qnil; - } - tmp = ID2SYM(i_array_class); - if (option_given_p(opts, tmp)) { - json->array_class = rb_hash_aref(opts, tmp); - } else { - json->array_class = Qnil; - } - tmp = ID2SYM(i_decimal_class); - if (option_given_p(opts, tmp)) { - json->decimal_class = rb_hash_aref(opts, tmp); - } else { - json->decimal_class = Qnil; - } - tmp = ID2SYM(i_match_string); - if (option_given_p(opts, tmp)) { - VALUE match_string = rb_hash_aref(opts, tmp); - json->match_string = RTEST(match_string) ? match_string : Qnil; - } else { - json->match_string = Qnil; - } - } else { - json->max_nesting = 100; - json->allow_nan = 0; - json->create_additions = 0; - json->create_id = Qnil; - json->object_class = Qnil; - json->array_class = Qnil; - json->decimal_class = Qnil; - } - source = convert_encoding(StringValue(source)); - StringValue(source); - json->len = RSTRING_LEN(source); - json->source = RSTRING_PTR(source);; - json->Vsource = source; - return self; -} - - -#line 1920 "parser.c" -enum {JSON_start = 1}; -enum {JSON_first_final = 10}; -enum {JSON_error = 0}; - -enum {JSON_en_main = 1}; - - -#line 828 "parser.rl" - - -/* - * call-seq: parse() - * - * Parses the current JSON text _source_ and returns the complete data - * structure as a result. - * It raises JSON::ParserError if fail to parse. - */ -static VALUE cParser_parse(VALUE self) -{ - char *p, *pe; - int cs = EVIL; - VALUE result = Qnil; - GET_PARSER; - - -#line 1946 "parser.c" - { - cs = JSON_start; - } - -#line 845 "parser.rl" - p = json->source; - pe = p + json->len; - -#line 1955 "parser.c" - { - if ( p == pe ) - goto _test_eof; - switch ( cs ) - { -st1: - if ( ++p == pe ) - goto _test_eof1; -case 1: - switch( (*p) ) { - case 13: goto st1; - case 32: goto st1; - case 34: goto tr2; - case 45: goto tr2; - case 47: goto st6; - case 73: goto tr2; - case 78: goto tr2; - case 91: goto tr2; - case 102: goto tr2; - case 110: goto tr2; - case 116: goto tr2; - case 123: goto tr2; - } - if ( (*p) > 10 ) { - if ( 48 <= (*p) && (*p) <= 57 ) - goto tr2; - } else if ( (*p) >= 9 ) - goto st1; - goto st0; -st0: -cs = 0; - goto _out; -tr2: -#line 820 "parser.rl" - { - char *np = JSON_parse_value(json, p, pe, &result, 0); - if (np == NULL) { p--; {p++; cs = 10; goto _out;} } else {p = (( np))-1;} - } - goto st10; -st10: - if ( ++p == pe ) - goto _test_eof10; -case 10: -#line 1999 "parser.c" - switch( (*p) ) { - case 13: goto st10; - case 32: goto st10; - case 47: goto st2; - } - if ( 9 <= (*p) && (*p) <= 10 ) - goto st10; - goto st0; -st2: - if ( ++p == pe ) - goto _test_eof2; -case 2: - switch( (*p) ) { - case 42: goto st3; - case 47: goto st5; - } - goto st0; -st3: - if ( ++p == pe ) - goto _test_eof3; -case 3: - if ( (*p) == 42 ) - goto st4; - goto st3; -st4: - if ( ++p == pe ) - goto _test_eof4; -case 4: - switch( (*p) ) { - case 42: goto st4; - case 47: goto st10; - } - goto st3; -st5: - if ( ++p == pe ) - goto _test_eof5; -case 5: - if ( (*p) == 10 ) - goto st10; - goto st5; -st6: - if ( ++p == pe ) - goto _test_eof6; -case 6: - switch( (*p) ) { - case 42: goto st7; - case 47: goto st9; - } - goto st0; -st7: - if ( ++p == pe ) - goto _test_eof7; -case 7: - if ( (*p) == 42 ) - goto st8; - goto st7; -st8: - if ( ++p == pe ) - goto _test_eof8; -case 8: - switch( (*p) ) { - case 42: goto st8; - case 47: goto st1; - } - goto st7; -st9: - if ( ++p == pe ) - goto _test_eof9; -case 9: - if ( (*p) == 10 ) - goto st1; - goto st9; - } - _test_eof1: cs = 1; goto _test_eof; - _test_eof10: cs = 10; goto _test_eof; - _test_eof2: cs = 2; goto _test_eof; - _test_eof3: cs = 3; goto _test_eof; - _test_eof4: cs = 4; goto _test_eof; - _test_eof5: cs = 5; goto _test_eof; - _test_eof6: cs = 6; goto _test_eof; - _test_eof7: cs = 7; goto _test_eof; - _test_eof8: cs = 8; goto _test_eof; - _test_eof9: cs = 9; goto _test_eof; - - _test_eof: {} - _out: {} - } - -#line 848 "parser.rl" - - if (cs >= JSON_first_final && p == pe) { - return result; - } else { - rb_enc_raise(EXC_ENCODING eParserError, "unexpected token at '%s'", p); - return Qnil; - } -} - -static void JSON_mark(void *ptr) -{ - JSON_Parser *json = ptr; - rb_gc_mark_maybe(json->Vsource); - rb_gc_mark_maybe(json->create_id); - rb_gc_mark_maybe(json->object_class); - rb_gc_mark_maybe(json->array_class); - rb_gc_mark_maybe(json->decimal_class); - rb_gc_mark_maybe(json->match_string); -} - -static void JSON_free(void *ptr) -{ - JSON_Parser *json = ptr; - fbuffer_free(json->fbuffer); - ruby_xfree(json); -} - -static size_t JSON_memsize(const void *ptr) -{ - const JSON_Parser *json = ptr; - return sizeof(*json) + FBUFFER_CAPA(json->fbuffer); -} - -#ifdef NEW_TYPEDDATA_WRAPPER -static const rb_data_type_t JSON_Parser_type = { - "JSON/Parser", - {JSON_mark, JSON_free, JSON_memsize,}, -#ifdef RUBY_TYPED_FREE_IMMEDIATELY - 0, 0, - RUBY_TYPED_FREE_IMMEDIATELY, -#endif -}; -#endif - -static VALUE cJSON_parser_s_allocate(VALUE klass) -{ - JSON_Parser *json; - VALUE obj = TypedData_Make_Struct(klass, JSON_Parser, &JSON_Parser_type, json); - json->fbuffer = fbuffer_alloc(0); - return obj; -} - -/* - * call-seq: source() - * - * Returns a copy of the current _source_ string, that was used to construct - * this Parser. - */ -static VALUE cParser_source(VALUE self) -{ - GET_PARSER; - return rb_str_dup(json->Vsource); -} - -void Init_parser(void) -{ -#ifdef HAVE_RB_EXT_RACTOR_SAFE - rb_ext_ractor_safe(true); -#endif - -#undef rb_intern - rb_require("json/common"); - mJSON = rb_define_module("JSON"); - mExt = rb_define_module_under(mJSON, "Ext"); - cParser = rb_define_class_under(mExt, "Parser", rb_cObject); - eParserError = rb_path2class("JSON::ParserError"); - eNestingError = rb_path2class("JSON::NestingError"); - rb_gc_register_mark_object(eParserError); - rb_gc_register_mark_object(eNestingError); - rb_define_alloc_func(cParser, cJSON_parser_s_allocate); - rb_define_method(cParser, "initialize", cParser_initialize, -1); - rb_define_method(cParser, "parse", cParser_parse, 0); - rb_define_method(cParser, "source", cParser_source, 0); - - CNaN = rb_const_get(mJSON, rb_intern("NaN")); - rb_gc_register_mark_object(CNaN); - - CInfinity = rb_const_get(mJSON, rb_intern("Infinity")); - rb_gc_register_mark_object(CInfinity); - - CMinusInfinity = rb_const_get(mJSON, rb_intern("MinusInfinity")); - rb_gc_register_mark_object(CMinusInfinity); - - i_json_creatable_p = rb_intern("json_creatable?"); - i_json_create = rb_intern("json_create"); - i_create_id = rb_intern("create_id"); - i_create_additions = rb_intern("create_additions"); - i_chr = rb_intern("chr"); - i_max_nesting = rb_intern("max_nesting"); - i_allow_nan = rb_intern("allow_nan"); - i_symbolize_names = rb_intern("symbolize_names"); - i_object_class = rb_intern("object_class"); - i_array_class = rb_intern("array_class"); - i_decimal_class = rb_intern("decimal_class"); - i_match = rb_intern("match"); - i_match_string = rb_intern("match_string"); - i_key_p = rb_intern("key?"); - i_deep_const_get = rb_intern("deep_const_get"); - i_aset = rb_intern("[]="); - i_aref = rb_intern("[]"); - i_leftshift = rb_intern("<<"); - i_new = rb_intern("new"); - i_try_convert = rb_intern("try_convert"); - i_freeze = rb_intern("freeze"); - i_uminus = rb_intern("-@"); -} - -/* - * Local variables: - * mode: c - * c-file-style: ruby - * indent-tabs-mode: nil - * End: - */ diff --git a/bundle/ruby/3.2.0/gems/json-2.7.1/ext/json/ext/parser/parser.h b/bundle/ruby/3.2.0/gems/json-2.7.1/ext/json/ext/parser/parser.h deleted file mode 100644 index 92ed3fdc..00000000 --- a/bundle/ruby/3.2.0/gems/json-2.7.1/ext/json/ext/parser/parser.h +++ /dev/null @@ -1,96 +0,0 @@ -#ifndef _PARSER_H_ -#define _PARSER_H_ - -#include "ruby.h" - -#ifndef HAVE_RUBY_RE_H -#include "re.h" -#endif - -#ifdef HAVE_RUBY_ST_H -#include "ruby/st.h" -#else -#include "st.h" -#endif - -#ifndef MAYBE_UNUSED -# define MAYBE_UNUSED(x) x -#endif - -#define option_given_p(opts, key) RTEST(rb_funcall(opts, i_key_p, 1, key)) - -/* unicode */ - -typedef unsigned long UTF32; /* at least 32 bits */ -typedef unsigned short UTF16; /* at least 16 bits */ -typedef unsigned char UTF8; /* typically 8 bits */ - -#define UNI_REPLACEMENT_CHAR (UTF32)0x0000FFFD -#define UNI_SUR_HIGH_START (UTF32)0xD800 -#define UNI_SUR_HIGH_END (UTF32)0xDBFF -#define UNI_SUR_LOW_START (UTF32)0xDC00 -#define UNI_SUR_LOW_END (UTF32)0xDFFF - -typedef struct JSON_ParserStruct { - VALUE Vsource; - char *source; - long len; - char *memo; - VALUE create_id; - int max_nesting; - int allow_nan; - int parsing_name; - int symbolize_names; - int freeze; - VALUE object_class; - VALUE array_class; - VALUE decimal_class; - int create_additions; - VALUE match_string; - FBuffer *fbuffer; -} JSON_Parser; - -#define GET_PARSER \ - GET_PARSER_INIT; \ - if (!json->Vsource) rb_raise(rb_eTypeError, "uninitialized instance") -#define GET_PARSER_INIT \ - JSON_Parser *json; \ - TypedData_Get_Struct(self, JSON_Parser, &JSON_Parser_type, json) - -#define MinusInfinity "-Infinity" -#define EVIL 0x666 - -static UTF32 unescape_unicode(const unsigned char *p); -static int convert_UTF32_to_UTF8(char *buf, UTF32 ch); -static char *JSON_parse_object(JSON_Parser *json, char *p, char *pe, VALUE *result, int current_nesting); -static char *JSON_parse_value(JSON_Parser *json, char *p, char *pe, VALUE *result, int current_nesting); -static char *JSON_parse_integer(JSON_Parser *json, char *p, char *pe, VALUE *result); -static char *JSON_parse_float(JSON_Parser *json, char *p, char *pe, VALUE *result); -static char *JSON_parse_array(JSON_Parser *json, char *p, char *pe, VALUE *result, int current_nesting); -static VALUE json_string_unescape(char *string, char *stringEnd, int intern, int symbolize); -static char *JSON_parse_string(JSON_Parser *json, char *p, char *pe, VALUE *result); -static VALUE convert_encoding(VALUE source); -static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self); -static VALUE cParser_parse(VALUE self); -static void JSON_mark(void *json); -static void JSON_free(void *json); -static VALUE cJSON_parser_s_allocate(VALUE klass); -static VALUE cParser_source(VALUE self); -#ifndef ZALLOC -#define ZALLOC(type) ((type *)ruby_zalloc(sizeof(type))) -static inline void *ruby_zalloc(size_t n) -{ - void *p = ruby_xmalloc(n); - memset(p, 0, n); - return p; -} -#endif -#ifdef TypedData_Make_Struct -static const rb_data_type_t JSON_Parser_type; -#define NEW_TYPEDDATA_WRAPPER 1 -#else -#define TypedData_Make_Struct(klass, type, ignore, json) Data_Make_Struct(klass, type, NULL, JSON_free, json) -#define TypedData_Get_Struct(self, JSON_Parser, ignore, json) Data_Get_Struct(self, JSON_Parser, json) -#endif - -#endif diff --git a/bundle/ruby/3.2.0/gems/json-2.7.1/ext/json/ext/parser/parser.rl b/bundle/ruby/3.2.0/gems/json-2.7.1/ext/json/ext/parser/parser.rl deleted file mode 100644 index af190e75..00000000 --- a/bundle/ruby/3.2.0/gems/json-2.7.1/ext/json/ext/parser/parser.rl +++ /dev/null @@ -1,971 +0,0 @@ -#include "../fbuffer/fbuffer.h" -#include "parser.h" - -#if defined HAVE_RUBY_ENCODING_H -# define EXC_ENCODING rb_utf8_encoding(), -# ifndef HAVE_RB_ENC_RAISE -static void -enc_raise(rb_encoding *enc, VALUE exc, const char *fmt, ...) -{ - va_list args; - VALUE mesg; - - va_start(args, fmt); - mesg = rb_enc_vsprintf(enc, fmt, args); - va_end(args); - - rb_exc_raise(rb_exc_new3(exc, mesg)); -} -# define rb_enc_raise enc_raise -# endif -#else -# define EXC_ENCODING /* nothing */ -# define rb_enc_raise rb_raise -#endif - -/* unicode */ - -static const signed char digit_values[256] = { - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, -1, - -1, -1, -1, -1, -1, -1, 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 10, 11, 12, 13, 14, 15, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1 -}; - -static UTF32 unescape_unicode(const unsigned char *p) -{ - signed char b; - UTF32 result = 0; - b = digit_values[p[0]]; - if (b < 0) return UNI_REPLACEMENT_CHAR; - result = (result << 4) | (unsigned char)b; - b = digit_values[p[1]]; - if (b < 0) return UNI_REPLACEMENT_CHAR; - result = (result << 4) | (unsigned char)b; - b = digit_values[p[2]]; - if (b < 0) return UNI_REPLACEMENT_CHAR; - result = (result << 4) | (unsigned char)b; - b = digit_values[p[3]]; - if (b < 0) return UNI_REPLACEMENT_CHAR; - result = (result << 4) | (unsigned char)b; - return result; -} - -static int convert_UTF32_to_UTF8(char *buf, UTF32 ch) -{ - int len = 1; - if (ch <= 0x7F) { - buf[0] = (char) ch; - } else if (ch <= 0x07FF) { - buf[0] = (char) ((ch >> 6) | 0xC0); - buf[1] = (char) ((ch & 0x3F) | 0x80); - len++; - } else if (ch <= 0xFFFF) { - buf[0] = (char) ((ch >> 12) | 0xE0); - buf[1] = (char) (((ch >> 6) & 0x3F) | 0x80); - buf[2] = (char) ((ch & 0x3F) | 0x80); - len += 2; - } else if (ch <= 0x1fffff) { - buf[0] =(char) ((ch >> 18) | 0xF0); - buf[1] =(char) (((ch >> 12) & 0x3F) | 0x80); - buf[2] =(char) (((ch >> 6) & 0x3F) | 0x80); - buf[3] =(char) ((ch & 0x3F) | 0x80); - len += 3; - } else { - buf[0] = '?'; - } - return len; -} - -static VALUE mJSON, mExt, cParser, eParserError, eNestingError; -static VALUE CNaN, CInfinity, CMinusInfinity; - -static ID i_json_creatable_p, i_json_create, i_create_id, i_create_additions, - i_chr, i_max_nesting, i_allow_nan, i_symbolize_names, - i_object_class, i_array_class, i_decimal_class, i_key_p, - i_deep_const_get, i_match, i_match_string, i_aset, i_aref, - i_leftshift, i_new, i_try_convert, i_freeze, i_uminus; - -%%{ - machine JSON_common; - - cr = '\n'; - cr_neg = [^\n]; - ws = [ \t\r\n]; - c_comment = '/*' ( any* - (any* '*/' any* ) ) '*/'; - cpp_comment = '//' cr_neg* cr; - comment = c_comment | cpp_comment; - ignore = ws | comment; - name_separator = ':'; - value_separator = ','; - Vnull = 'null'; - Vfalse = 'false'; - Vtrue = 'true'; - VNaN = 'NaN'; - VInfinity = 'Infinity'; - VMinusInfinity = '-Infinity'; - begin_value = [nft\"\-\[\{NI] | digit; - begin_object = '{'; - end_object = '}'; - begin_array = '['; - end_array = ']'; - begin_string = '"'; - begin_name = begin_string; - begin_number = digit | '-'; -}%% - -%%{ - machine JSON_object; - include JSON_common; - - write data; - - action parse_value { - VALUE v = Qnil; - char *np = JSON_parse_value(json, fpc, pe, &v, current_nesting); - if (np == NULL) { - fhold; fbreak; - } else { - if (NIL_P(json->object_class)) { - OBJ_FREEZE(last_name); - rb_hash_aset(*result, last_name, v); - } else { - rb_funcall(*result, i_aset, 2, last_name, v); - } - fexec np; - } - } - - action parse_name { - char *np; - json->parsing_name = 1; - np = JSON_parse_string(json, fpc, pe, &last_name); - json->parsing_name = 0; - if (np == NULL) { fhold; fbreak; } else fexec np; - } - - action exit { fhold; fbreak; } - - pair = ignore* begin_name >parse_name ignore* name_separator ignore* begin_value >parse_value; - next_pair = ignore* value_separator pair; - - main := ( - begin_object - (pair (next_pair)*)? ignore* - end_object - ) @exit; -}%% - -static char *JSON_parse_object(JSON_Parser *json, char *p, char *pe, VALUE *result, int current_nesting) -{ - int cs = EVIL; - VALUE last_name = Qnil; - VALUE object_class = json->object_class; - - if (json->max_nesting && current_nesting > json->max_nesting) { - rb_raise(eNestingError, "nesting of %d is too deep", current_nesting); - } - - *result = NIL_P(object_class) ? rb_hash_new() : rb_class_new_instance(0, 0, object_class); - - %% write init; - %% write exec; - - if (cs >= JSON_object_first_final) { - if (json->create_additions) { - VALUE klassname; - if (NIL_P(json->object_class)) { - klassname = rb_hash_aref(*result, json->create_id); - } else { - klassname = rb_funcall(*result, i_aref, 1, json->create_id); - } - if (!NIL_P(klassname)) { - VALUE klass = rb_funcall(mJSON, i_deep_const_get, 1, klassname); - if (RTEST(rb_funcall(klass, i_json_creatable_p, 0))) { - *result = rb_funcall(klass, i_json_create, 1, *result); - } - } - } - return p + 1; - } else { - return NULL; - } -} - - -%%{ - machine JSON_value; - include JSON_common; - - write data; - - action parse_null { - *result = Qnil; - } - action parse_false { - *result = Qfalse; - } - action parse_true { - *result = Qtrue; - } - action parse_nan { - if (json->allow_nan) { - *result = CNaN; - } else { - rb_enc_raise(EXC_ENCODING eParserError, "unexpected token at '%s'", p - 2); - } - } - action parse_infinity { - if (json->allow_nan) { - *result = CInfinity; - } else { - rb_enc_raise(EXC_ENCODING eParserError, "unexpected token at '%s'", p - 7); - } - } - action parse_string { - char *np = JSON_parse_string(json, fpc, pe, result); - if (np == NULL) { fhold; fbreak; } else fexec np; - } - - action parse_number { - char *np; - if(pe > fpc + 8 && !strncmp(MinusInfinity, fpc, 9)) { - if (json->allow_nan) { - *result = CMinusInfinity; - fexec p + 10; - fhold; fbreak; - } else { - rb_enc_raise(EXC_ENCODING eParserError, "unexpected token at '%s'", p); - } - } - np = JSON_parse_float(json, fpc, pe, result); - if (np != NULL) fexec np; - np = JSON_parse_integer(json, fpc, pe, result); - if (np != NULL) fexec np; - fhold; fbreak; - } - - action parse_array { - char *np; - np = JSON_parse_array(json, fpc, pe, result, current_nesting + 1); - if (np == NULL) { fhold; fbreak; } else fexec np; - } - - action parse_object { - char *np; - np = JSON_parse_object(json, fpc, pe, result, current_nesting + 1); - if (np == NULL) { fhold; fbreak; } else fexec np; - } - - action exit { fhold; fbreak; } - -main := ignore* ( - Vnull @parse_null | - Vfalse @parse_false | - Vtrue @parse_true | - VNaN @parse_nan | - VInfinity @parse_infinity | - begin_number >parse_number | - begin_string >parse_string | - begin_array >parse_array | - begin_object >parse_object - ) ignore* %*exit; -}%% - -static char *JSON_parse_value(JSON_Parser *json, char *p, char *pe, VALUE *result, int current_nesting) -{ - int cs = EVIL; - - %% write init; - %% write exec; - - if (json->freeze) { - OBJ_FREEZE(*result); - } - - if (cs >= JSON_value_first_final) { - return p; - } else { - return NULL; - } -} - -%%{ - machine JSON_integer; - - write data; - - action exit { fhold; fbreak; } - - main := '-'? ('0' | [1-9][0-9]*) (^[0-9]? @exit); -}%% - -static char *JSON_parse_integer(JSON_Parser *json, char *p, char *pe, VALUE *result) -{ - int cs = EVIL; - - %% write init; - json->memo = p; - %% write exec; - - if (cs >= JSON_integer_first_final) { - long len = p - json->memo; - fbuffer_clear(json->fbuffer); - fbuffer_append(json->fbuffer, json->memo, len); - fbuffer_append_char(json->fbuffer, '\0'); - *result = rb_cstr2inum(FBUFFER_PTR(json->fbuffer), 10); - return p + 1; - } else { - return NULL; - } -} - -%%{ - machine JSON_float; - include JSON_common; - - write data; - - action exit { fhold; fbreak; } - - main := '-'? ( - (('0' | [1-9][0-9]*) '.' [0-9]+ ([Ee] [+\-]?[0-9]+)?) - | (('0' | [1-9][0-9]*) ([Ee] [+\-]?[0-9]+)) - ) (^[0-9Ee.\-]? @exit ); -}%% - -static char *JSON_parse_float(JSON_Parser *json, char *p, char *pe, VALUE *result) -{ - int cs = EVIL; - - %% write init; - json->memo = p; - %% write exec; - - if (cs >= JSON_float_first_final) { - VALUE mod = Qnil; - ID method_id = 0; - if (rb_respond_to(json->decimal_class, i_try_convert)) { - mod = json->decimal_class; - method_id = i_try_convert; - } else if (rb_respond_to(json->decimal_class, i_new)) { - mod = json->decimal_class; - method_id = i_new; - } else if (RB_TYPE_P(json->decimal_class, T_CLASS)) { - VALUE name = rb_class_name(json->decimal_class); - const char *name_cstr = RSTRING_PTR(name); - const char *last_colon = strrchr(name_cstr, ':'); - if (last_colon) { - const char *mod_path_end = last_colon - 1; - VALUE mod_path = rb_str_substr(name, 0, mod_path_end - name_cstr); - mod = rb_path_to_class(mod_path); - - const char *method_name_beg = last_colon + 1; - long before_len = method_name_beg - name_cstr; - long len = RSTRING_LEN(name) - before_len; - VALUE method_name = rb_str_substr(name, before_len, len); - method_id = SYM2ID(rb_str_intern(method_name)); - } else { - mod = rb_mKernel; - method_id = SYM2ID(rb_str_intern(name)); - } - } - - long len = p - json->memo; - fbuffer_clear(json->fbuffer); - fbuffer_append(json->fbuffer, json->memo, len); - fbuffer_append_char(json->fbuffer, '\0'); - - if (method_id) { - VALUE text = rb_str_new2(FBUFFER_PTR(json->fbuffer)); - *result = rb_funcallv(mod, method_id, 1, &text); - } else { - *result = DBL2NUM(rb_cstr_to_dbl(FBUFFER_PTR(json->fbuffer), 1)); - } - - return p + 1; - } else { - return NULL; - } -} - - -%%{ - machine JSON_array; - include JSON_common; - - write data; - - action parse_value { - VALUE v = Qnil; - char *np = JSON_parse_value(json, fpc, pe, &v, current_nesting); - if (np == NULL) { - fhold; fbreak; - } else { - if (NIL_P(json->array_class)) { - rb_ary_push(*result, v); - } else { - rb_funcall(*result, i_leftshift, 1, v); - } - fexec np; - } - } - - action exit { fhold; fbreak; } - - next_element = value_separator ignore* begin_value >parse_value; - - main := begin_array ignore* - ((begin_value >parse_value ignore*) - (ignore* next_element ignore*)*)? - end_array @exit; -}%% - -static char *JSON_parse_array(JSON_Parser *json, char *p, char *pe, VALUE *result, int current_nesting) -{ - int cs = EVIL; - VALUE array_class = json->array_class; - - if (json->max_nesting && current_nesting > json->max_nesting) { - rb_raise(eNestingError, "nesting of %d is too deep", current_nesting); - } - *result = NIL_P(array_class) ? rb_ary_new() : rb_class_new_instance(0, 0, array_class); - - %% write init; - %% write exec; - - if(cs >= JSON_array_first_final) { - return p + 1; - } else { - rb_enc_raise(EXC_ENCODING eParserError, "unexpected token at '%s'", p); - return NULL; - } -} - -static const size_t MAX_STACK_BUFFER_SIZE = 128; -static VALUE json_string_unescape(char *string, char *stringEnd, int intern, int symbolize) -{ - VALUE result = Qnil; - size_t bufferSize = stringEnd - string; - char *p = string, *pe = string, *unescape, *bufferStart, *buffer; - int unescape_len; - char buf[4]; - - if (bufferSize > MAX_STACK_BUFFER_SIZE) { -# ifdef HAVE_RB_ENC_INTERNED_STR - bufferStart = buffer = ALLOC_N(char, bufferSize ? bufferSize : 1); -# else - bufferStart = buffer = ALLOC_N(char, bufferSize); -# endif - } else { -# ifdef HAVE_RB_ENC_INTERNED_STR - bufferStart = buffer = ALLOCA_N(char, bufferSize ? bufferSize : 1); -# else - bufferStart = buffer = ALLOCA_N(char, bufferSize); -# endif - } - - while (pe < stringEnd) { - if (*pe == '\\') { - unescape = (char *) "?"; - unescape_len = 1; - if (pe > p) { - MEMCPY(buffer, p, char, pe - p); - buffer += pe - p; - } - switch (*++pe) { - case 'n': - unescape = (char *) "\n"; - break; - case 'r': - unescape = (char *) "\r"; - break; - case 't': - unescape = (char *) "\t"; - break; - case '"': - unescape = (char *) "\""; - break; - case '\\': - unescape = (char *) "\\"; - break; - case 'b': - unescape = (char *) "\b"; - break; - case 'f': - unescape = (char *) "\f"; - break; - case 'u': - if (pe > stringEnd - 4) { - if (bufferSize > MAX_STACK_BUFFER_SIZE) { - ruby_xfree(bufferStart); - } - rb_enc_raise( - EXC_ENCODING eParserError, - "incomplete unicode character escape sequence at '%s'", p - ); - } else { - UTF32 ch = unescape_unicode((unsigned char *) ++pe); - pe += 3; - if (UNI_SUR_HIGH_START == (ch & 0xFC00)) { - pe++; - if (pe > stringEnd - 6) { - if (bufferSize > MAX_STACK_BUFFER_SIZE) { - ruby_xfree(bufferStart); - } - rb_enc_raise( - EXC_ENCODING eParserError, - "incomplete surrogate pair at '%s'", p - ); - } - if (pe[0] == '\\' && pe[1] == 'u') { - UTF32 sur = unescape_unicode((unsigned char *) pe + 2); - ch = (((ch & 0x3F) << 10) | ((((ch >> 6) & 0xF) + 1) << 16) - | (sur & 0x3FF)); - pe += 5; - } else { - unescape = (char *) "?"; - break; - } - } - unescape_len = convert_UTF32_to_UTF8(buf, ch); - unescape = buf; - } - break; - default: - p = pe; - continue; - } - MEMCPY(buffer, unescape, char, unescape_len); - buffer += unescape_len; - p = ++pe; - } else { - pe++; - } - } - - if (pe > p) { - MEMCPY(buffer, p, char, pe - p); - buffer += pe - p; - } - -# ifdef HAVE_RB_ENC_INTERNED_STR - if (intern) { - result = rb_enc_interned_str(bufferStart, (long)(buffer - bufferStart), rb_utf8_encoding()); - } else { - result = rb_utf8_str_new(bufferStart, (long)(buffer - bufferStart)); - } - if (bufferSize > MAX_STACK_BUFFER_SIZE) { - ruby_xfree(bufferStart); - } -# else - result = rb_utf8_str_new(bufferStart, (long)(buffer - bufferStart)); - - if (bufferSize > MAX_STACK_BUFFER_SIZE) { - ruby_xfree(bufferStart); - } - - if (intern) { - # if STR_UMINUS_DEDUPE_FROZEN - // Starting from MRI 2.8 it is preferable to freeze the string - // before deduplication so that it can be interned directly - // otherwise it would be duplicated first which is wasteful. - result = rb_funcall(rb_str_freeze(result), i_uminus, 0); - # elif STR_UMINUS_DEDUPE - // MRI 2.5 and older do not deduplicate strings that are already - // frozen. - result = rb_funcall(result, i_uminus, 0); - # else - result = rb_str_freeze(result); - # endif - } -# endif - - if (symbolize) { - result = rb_str_intern(result); - } - - return result; -} - -%%{ - machine JSON_string; - include JSON_common; - - write data; - - action parse_string { - *result = json_string_unescape(json->memo + 1, p, json->parsing_name || json-> freeze, json->parsing_name && json->symbolize_names); - if (NIL_P(*result)) { - fhold; - fbreak; - } else { - fexec p + 1; - } - } - - action exit { fhold; fbreak; } - - main := '"' ((^([\"\\] | 0..0x1f) | '\\'[\"\\/bfnrt] | '\\u'[0-9a-fA-F]{4} | '\\'^([\"\\/bfnrtu]|0..0x1f))* %parse_string) '"' @exit; -}%% - -static int -match_i(VALUE regexp, VALUE klass, VALUE memo) -{ - if (regexp == Qundef) return ST_STOP; - if (RTEST(rb_funcall(klass, i_json_creatable_p, 0)) && - RTEST(rb_funcall(regexp, i_match, 1, rb_ary_entry(memo, 0)))) { - rb_ary_push(memo, klass); - return ST_STOP; - } - return ST_CONTINUE; -} - -static char *JSON_parse_string(JSON_Parser *json, char *p, char *pe, VALUE *result) -{ - int cs = EVIL; - VALUE match_string; - - %% write init; - json->memo = p; - %% write exec; - - if (json->create_additions && RTEST(match_string = json->match_string)) { - VALUE klass; - VALUE memo = rb_ary_new2(2); - rb_ary_push(memo, *result); - rb_hash_foreach(match_string, match_i, memo); - klass = rb_ary_entry(memo, 1); - if (RTEST(klass)) { - *result = rb_funcall(klass, i_json_create, 1, *result); - } - } - - if (cs >= JSON_string_first_final) { - return p + 1; - } else { - return NULL; - } -} - -/* - * Document-class: JSON::Ext::Parser - * - * This is the JSON parser implemented as a C extension. It can be configured - * to be used by setting - * - * JSON.parser = JSON::Ext::Parser - * - * with the method parser= in JSON. - * - */ - -static VALUE convert_encoding(VALUE source) -{ -#ifdef HAVE_RUBY_ENCODING_H - rb_encoding *enc = rb_enc_get(source); - if (enc == rb_ascii8bit_encoding()) { - if (OBJ_FROZEN(source)) { - source = rb_str_dup(source); - } - FORCE_UTF8(source); - } else { - source = rb_str_conv_enc(source, rb_enc_get(source), rb_utf8_encoding()); - } -#endif - return source; -} - -/* - * call-seq: new(source, opts => {}) - * - * Creates a new JSON::Ext::Parser instance for the string _source_. - * - * It will be configured by the _opts_ hash. _opts_ can have the following - * keys: - * - * _opts_ can have the following keys: - * * *max_nesting*: The maximum depth of nesting allowed in the parsed data - * structures. Disable depth checking with :max_nesting => false|nil|0, it - * defaults to 100. - * * *allow_nan*: If set to true, allow NaN, Infinity and -Infinity in - * defiance of RFC 4627 to be parsed by the Parser. This option defaults to - * false. - * * *symbolize_names*: If set to true, returns symbols for the names - * (keys) in a JSON object. Otherwise strings are returned, which is - * also the default. It's not possible to use this option in - * conjunction with the *create_additions* option. - * * *create_additions*: If set to false, the Parser doesn't create - * additions even if a matching class and create_id was found. This option - * defaults to false. - * * *object_class*: Defaults to Hash - * * *array_class*: Defaults to Array - */ -static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self) -{ - VALUE source, opts; - GET_PARSER_INIT; - - if (json->Vsource) { - rb_raise(rb_eTypeError, "already initialized instance"); - } - rb_scan_args(argc, argv, "1:", &source, &opts); - if (!NIL_P(opts)) { - VALUE tmp = ID2SYM(i_max_nesting); - if (option_given_p(opts, tmp)) { - VALUE max_nesting = rb_hash_aref(opts, tmp); - if (RTEST(max_nesting)) { - Check_Type(max_nesting, T_FIXNUM); - json->max_nesting = FIX2INT(max_nesting); - } else { - json->max_nesting = 0; - } - } else { - json->max_nesting = 100; - } - tmp = ID2SYM(i_allow_nan); - if (option_given_p(opts, tmp)) { - json->allow_nan = RTEST(rb_hash_aref(opts, tmp)) ? 1 : 0; - } else { - json->allow_nan = 0; - } - tmp = ID2SYM(i_symbolize_names); - if (option_given_p(opts, tmp)) { - json->symbolize_names = RTEST(rb_hash_aref(opts, tmp)) ? 1 : 0; - } else { - json->symbolize_names = 0; - } - tmp = ID2SYM(i_freeze); - if (option_given_p(opts, tmp)) { - json->freeze = RTEST(rb_hash_aref(opts, tmp)) ? 1 : 0; - } else { - json->freeze = 0; - } - tmp = ID2SYM(i_create_additions); - if (option_given_p(opts, tmp)) { - json->create_additions = RTEST(rb_hash_aref(opts, tmp)); - } else { - json->create_additions = 0; - } - if (json->symbolize_names && json->create_additions) { - rb_raise(rb_eArgError, - "options :symbolize_names and :create_additions cannot be " - " used in conjunction"); - } - tmp = ID2SYM(i_create_id); - if (option_given_p(opts, tmp)) { - json->create_id = rb_hash_aref(opts, tmp); - } else { - json->create_id = rb_funcall(mJSON, i_create_id, 0); - } - tmp = ID2SYM(i_object_class); - if (option_given_p(opts, tmp)) { - json->object_class = rb_hash_aref(opts, tmp); - } else { - json->object_class = Qnil; - } - tmp = ID2SYM(i_array_class); - if (option_given_p(opts, tmp)) { - json->array_class = rb_hash_aref(opts, tmp); - } else { - json->array_class = Qnil; - } - tmp = ID2SYM(i_decimal_class); - if (option_given_p(opts, tmp)) { - json->decimal_class = rb_hash_aref(opts, tmp); - } else { - json->decimal_class = Qnil; - } - tmp = ID2SYM(i_match_string); - if (option_given_p(opts, tmp)) { - VALUE match_string = rb_hash_aref(opts, tmp); - json->match_string = RTEST(match_string) ? match_string : Qnil; - } else { - json->match_string = Qnil; - } - } else { - json->max_nesting = 100; - json->allow_nan = 0; - json->create_additions = 0; - json->create_id = Qnil; - json->object_class = Qnil; - json->array_class = Qnil; - json->decimal_class = Qnil; - } - source = convert_encoding(StringValue(source)); - StringValue(source); - json->len = RSTRING_LEN(source); - json->source = RSTRING_PTR(source);; - json->Vsource = source; - return self; -} - -%%{ - machine JSON; - - write data; - - include JSON_common; - - action parse_value { - char *np = JSON_parse_value(json, fpc, pe, &result, 0); - if (np == NULL) { fhold; fbreak; } else fexec np; - } - - main := ignore* ( - begin_value >parse_value - ) ignore*; -}%% - -/* - * call-seq: parse() - * - * Parses the current JSON text _source_ and returns the complete data - * structure as a result. - * It raises JSON::ParserError if fail to parse. - */ -static VALUE cParser_parse(VALUE self) -{ - char *p, *pe; - int cs = EVIL; - VALUE result = Qnil; - GET_PARSER; - - %% write init; - p = json->source; - pe = p + json->len; - %% write exec; - - if (cs >= JSON_first_final && p == pe) { - return result; - } else { - rb_enc_raise(EXC_ENCODING eParserError, "unexpected token at '%s'", p); - return Qnil; - } -} - -static void JSON_mark(void *ptr) -{ - JSON_Parser *json = ptr; - rb_gc_mark_maybe(json->Vsource); - rb_gc_mark_maybe(json->create_id); - rb_gc_mark_maybe(json->object_class); - rb_gc_mark_maybe(json->array_class); - rb_gc_mark_maybe(json->decimal_class); - rb_gc_mark_maybe(json->match_string); -} - -static void JSON_free(void *ptr) -{ - JSON_Parser *json = ptr; - fbuffer_free(json->fbuffer); - ruby_xfree(json); -} - -static size_t JSON_memsize(const void *ptr) -{ - const JSON_Parser *json = ptr; - return sizeof(*json) + FBUFFER_CAPA(json->fbuffer); -} - -#ifdef NEW_TYPEDDATA_WRAPPER -static const rb_data_type_t JSON_Parser_type = { - "JSON/Parser", - {JSON_mark, JSON_free, JSON_memsize,}, -#ifdef RUBY_TYPED_FREE_IMMEDIATELY - 0, 0, - RUBY_TYPED_FREE_IMMEDIATELY, -#endif -}; -#endif - -static VALUE cJSON_parser_s_allocate(VALUE klass) -{ - JSON_Parser *json; - VALUE obj = TypedData_Make_Struct(klass, JSON_Parser, &JSON_Parser_type, json); - json->fbuffer = fbuffer_alloc(0); - return obj; -} - -/* - * call-seq: source() - * - * Returns a copy of the current _source_ string, that was used to construct - * this Parser. - */ -static VALUE cParser_source(VALUE self) -{ - GET_PARSER; - return rb_str_dup(json->Vsource); -} - -void Init_parser(void) -{ -#ifdef HAVE_RB_EXT_RACTOR_SAFE - rb_ext_ractor_safe(true); -#endif - -#undef rb_intern - rb_require("json/common"); - mJSON = rb_define_module("JSON"); - mExt = rb_define_module_under(mJSON, "Ext"); - cParser = rb_define_class_under(mExt, "Parser", rb_cObject); - eParserError = rb_path2class("JSON::ParserError"); - eNestingError = rb_path2class("JSON::NestingError"); - rb_gc_register_mark_object(eParserError); - rb_gc_register_mark_object(eNestingError); - rb_define_alloc_func(cParser, cJSON_parser_s_allocate); - rb_define_method(cParser, "initialize", cParser_initialize, -1); - rb_define_method(cParser, "parse", cParser_parse, 0); - rb_define_method(cParser, "source", cParser_source, 0); - - CNaN = rb_const_get(mJSON, rb_intern("NaN")); - rb_gc_register_mark_object(CNaN); - - CInfinity = rb_const_get(mJSON, rb_intern("Infinity")); - rb_gc_register_mark_object(CInfinity); - - CMinusInfinity = rb_const_get(mJSON, rb_intern("MinusInfinity")); - rb_gc_register_mark_object(CMinusInfinity); - - i_json_creatable_p = rb_intern("json_creatable?"); - i_json_create = rb_intern("json_create"); - i_create_id = rb_intern("create_id"); - i_create_additions = rb_intern("create_additions"); - i_chr = rb_intern("chr"); - i_max_nesting = rb_intern("max_nesting"); - i_allow_nan = rb_intern("allow_nan"); - i_symbolize_names = rb_intern("symbolize_names"); - i_object_class = rb_intern("object_class"); - i_array_class = rb_intern("array_class"); - i_decimal_class = rb_intern("decimal_class"); - i_match = rb_intern("match"); - i_match_string = rb_intern("match_string"); - i_key_p = rb_intern("key?"); - i_deep_const_get = rb_intern("deep_const_get"); - i_aset = rb_intern("[]="); - i_aref = rb_intern("[]"); - i_leftshift = rb_intern("<<"); - i_new = rb_intern("new"); - i_try_convert = rb_intern("try_convert"); - i_freeze = rb_intern("freeze"); - i_uminus = rb_intern("-@"); -} - -/* - * Local variables: - * mode: c - * c-file-style: ruby - * indent-tabs-mode: nil - * End: - */ diff --git a/bundle/ruby/3.2.0/gems/json-2.7.1/ext/json/extconf.rb b/bundle/ruby/3.2.0/gems/json-2.7.1/ext/json/extconf.rb deleted file mode 100644 index 8a99b6a5..00000000 --- a/bundle/ruby/3.2.0/gems/json-2.7.1/ext/json/extconf.rb +++ /dev/null @@ -1,3 +0,0 @@ -require 'mkmf' - -create_makefile('json') diff --git a/bundle/ruby/3.2.0/gems/json-2.7.1/json.gemspec b/bundle/ruby/3.2.0/gems/json-2.7.1/json.gemspec deleted file mode 100644 index 64d0c813..00000000 --- a/bundle/ruby/3.2.0/gems/json-2.7.1/json.gemspec +++ /dev/null @@ -1,68 +0,0 @@ -version = File.foreach(File.join(__dir__, "lib/json/version.rb")) do |line| - /^\s*VERSION\s*=\s*'(.*)'/ =~ line and break $1 -end rescue nil - -Gem::Specification.new do |s| - s.name = "json" - s.version = version - - s.summary = "JSON Implementation for Ruby" - s.description = "This is a JSON implementation as a Ruby extension in C." - s.licenses = ["Ruby"] - s.authors = ["Florian Frank"] - s.email = "flori@ping.de" - - s.extensions = ["ext/json/ext/generator/extconf.rb", "ext/json/ext/parser/extconf.rb", "ext/json/extconf.rb"] - s.extra_rdoc_files = ["README.md"] - s.rdoc_options = ["--title", "JSON implementation for Ruby", "--main", "README.md"] - s.files = [ - "CHANGES.md", - "LICENSE", - "README.md", - "ext/json/ext/fbuffer/fbuffer.h", - "ext/json/ext/generator/depend", - "ext/json/ext/generator/extconf.rb", - "ext/json/ext/generator/generator.c", - "ext/json/ext/generator/generator.h", - "ext/json/ext/parser/depend", - "ext/json/ext/parser/extconf.rb", - "ext/json/ext/parser/parser.c", - "ext/json/ext/parser/parser.h", - "ext/json/ext/parser/parser.rl", - "ext/json/extconf.rb", - "json.gemspec", - "lib/json.rb", - "lib/json/add/bigdecimal.rb", - "lib/json/add/complex.rb", - "lib/json/add/core.rb", - "lib/json/add/date.rb", - "lib/json/add/date_time.rb", - "lib/json/add/exception.rb", - "lib/json/add/ostruct.rb", - "lib/json/add/range.rb", - "lib/json/add/rational.rb", - "lib/json/add/regexp.rb", - "lib/json/add/set.rb", - "lib/json/add/struct.rb", - "lib/json/add/symbol.rb", - "lib/json/add/time.rb", - "lib/json/common.rb", - "lib/json/ext.rb", - "lib/json/generic_object.rb", - "lib/json/pure.rb", - "lib/json/pure/generator.rb", - "lib/json/pure/parser.rb", - "lib/json/version.rb", - ] - s.homepage = "https://flori.github.io/json" - s.metadata = { - 'bug_tracker_uri' => 'https://github.com/flori/json/issues', - 'changelog_uri' => 'https://github.com/flori/json/blob/master/CHANGES.md', - 'documentation_uri' => 'https://flori.github.io/json/doc/index.html', - 'homepage_uri' => s.homepage, - 'source_code_uri' => 'https://github.com/flori/json', - 'wiki_uri' => 'https://github.com/flori/json/wiki' - } - - s.required_ruby_version = Gem::Requirement.new(">= 2.3") -end diff --git a/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json.rb b/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json.rb deleted file mode 100644 index 807488ff..00000000 --- a/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json.rb +++ /dev/null @@ -1,592 +0,0 @@ -#frozen_string_literal: false -require 'json/common' - -## -# = JavaScript \Object Notation (\JSON) -# -# \JSON is a lightweight data-interchange format. -# -# A \JSON value is one of the following: -# - Double-quoted text: "foo". -# - Number: +1+, +1.0+, +2.0e2+. -# - Boolean: +true+, +false+. -# - Null: +null+. -# - \Array: an ordered list of values, enclosed by square brackets: -# ["foo", 1, 1.0, 2.0e2, true, false, null] -# -# - \Object: a collection of name/value pairs, enclosed by curly braces; -# each name is double-quoted text; -# the values may be any \JSON values: -# {"a": "foo", "b": 1, "c": 1.0, "d": 2.0e2, "e": true, "f": false, "g": null} -# -# A \JSON array or object may contain nested arrays, objects, and scalars -# to any depth: -# {"foo": {"bar": 1, "baz": 2}, "bat": [0, 1, 2]} -# [{"foo": 0, "bar": 1}, ["baz", 2]] -# -# == Using \Module \JSON -# -# To make module \JSON available in your code, begin with: -# require 'json' -# -# All examples here assume that this has been done. -# -# === Parsing \JSON -# -# You can parse a \String containing \JSON data using -# either of two methods: -# - JSON.parse(source, opts) -# - JSON.parse!(source, opts) -# -# where -# - +source+ is a Ruby object. -# - +opts+ is a \Hash object containing options -# that control both input allowed and output formatting. -# -# The difference between the two methods -# is that JSON.parse! omits some checks -# and may not be safe for some +source+ data; -# use it only for data from trusted sources. -# Use the safer method JSON.parse for less trusted sources. -# -# ==== Parsing \JSON Arrays -# -# When +source+ is a \JSON array, JSON.parse by default returns a Ruby \Array: -# json = '["foo", 1, 1.0, 2.0e2, true, false, null]' -# ruby = JSON.parse(json) -# ruby # => ["foo", 1, 1.0, 200.0, true, false, nil] -# ruby.class # => Array -# -# The \JSON array may contain nested arrays, objects, and scalars -# to any depth: -# json = '[{"foo": 0, "bar": 1}, ["baz", 2]]' -# JSON.parse(json) # => [{"foo"=>0, "bar"=>1}, ["baz", 2]] -# -# ==== Parsing \JSON \Objects -# -# When the source is a \JSON object, JSON.parse by default returns a Ruby \Hash: -# json = '{"a": "foo", "b": 1, "c": 1.0, "d": 2.0e2, "e": true, "f": false, "g": null}' -# ruby = JSON.parse(json) -# ruby # => {"a"=>"foo", "b"=>1, "c"=>1.0, "d"=>200.0, "e"=>true, "f"=>false, "g"=>nil} -# ruby.class # => Hash -# -# The \JSON object may contain nested arrays, objects, and scalars -# to any depth: -# json = '{"foo": {"bar": 1, "baz": 2}, "bat": [0, 1, 2]}' -# JSON.parse(json) # => {"foo"=>{"bar"=>1, "baz"=>2}, "bat"=>[0, 1, 2]} -# -# ==== Parsing \JSON Scalars -# -# When the source is a \JSON scalar (not an array or object), -# JSON.parse returns a Ruby scalar. -# -# \String: -# ruby = JSON.parse('"foo"') -# ruby # => 'foo' -# ruby.class # => String -# \Integer: -# ruby = JSON.parse('1') -# ruby # => 1 -# ruby.class # => Integer -# \Float: -# ruby = JSON.parse('1.0') -# ruby # => 1.0 -# ruby.class # => Float -# ruby = JSON.parse('2.0e2') -# ruby # => 200 -# ruby.class # => Float -# Boolean: -# ruby = JSON.parse('true') -# ruby # => true -# ruby.class # => TrueClass -# ruby = JSON.parse('false') -# ruby # => false -# ruby.class # => FalseClass -# Null: -# ruby = JSON.parse('null') -# ruby # => nil -# ruby.class # => NilClass -# -# ==== Parsing Options -# -# ====== Input Options -# -# Option +max_nesting+ (\Integer) specifies the maximum nesting depth allowed; -# defaults to +100+; specify +false+ to disable depth checking. -# -# With the default, +false+: -# source = '[0, [1, [2, [3]]]]' -# ruby = JSON.parse(source) -# ruby # => [0, [1, [2, [3]]]] -# Too deep: -# # Raises JSON::NestingError (nesting of 2 is too deep): -# JSON.parse(source, {max_nesting: 1}) -# Bad value: -# # Raises TypeError (wrong argument type Symbol (expected Fixnum)): -# JSON.parse(source, {max_nesting: :foo}) -# -# --- -# -# Option +allow_nan+ (boolean) specifies whether to allow -# NaN, Infinity, and MinusInfinity in +source+; -# defaults to +false+. -# -# With the default, +false+: -# # Raises JSON::ParserError (225: unexpected token at '[NaN]'): -# JSON.parse('[NaN]') -# # Raises JSON::ParserError (232: unexpected token at '[Infinity]'): -# JSON.parse('[Infinity]') -# # Raises JSON::ParserError (248: unexpected token at '[-Infinity]'): -# JSON.parse('[-Infinity]') -# Allow: -# source = '[NaN, Infinity, -Infinity]' -# ruby = JSON.parse(source, {allow_nan: true}) -# ruby # => [NaN, Infinity, -Infinity] -# -# ====== Output Options -# -# Option +symbolize_names+ (boolean) specifies whether returned \Hash keys -# should be Symbols; -# defaults to +false+ (use Strings). -# -# With the default, +false+: -# source = '{"a": "foo", "b": 1.0, "c": true, "d": false, "e": null}' -# ruby = JSON.parse(source) -# ruby # => {"a"=>"foo", "b"=>1.0, "c"=>true, "d"=>false, "e"=>nil} -# Use Symbols: -# ruby = JSON.parse(source, {symbolize_names: true}) -# ruby # => {:a=>"foo", :b=>1.0, :c=>true, :d=>false, :e=>nil} -# -# --- -# -# Option +object_class+ (\Class) specifies the Ruby class to be used -# for each \JSON object; -# defaults to \Hash. -# -# With the default, \Hash: -# source = '{"a": "foo", "b": 1.0, "c": true, "d": false, "e": null}' -# ruby = JSON.parse(source) -# ruby.class # => Hash -# Use class \OpenStruct: -# ruby = JSON.parse(source, {object_class: OpenStruct}) -# ruby # => # -# -# --- -# -# Option +array_class+ (\Class) specifies the Ruby class to be used -# for each \JSON array; -# defaults to \Array. -# -# With the default, \Array: -# source = '["foo", 1.0, true, false, null]' -# ruby = JSON.parse(source) -# ruby.class # => Array -# Use class \Set: -# ruby = JSON.parse(source, {array_class: Set}) -# ruby # => # -# -# --- -# -# Option +create_additions+ (boolean) specifies whether to use \JSON additions in parsing. -# See {\JSON Additions}[#module-JSON-label-JSON+Additions]. -# -# === Generating \JSON -# -# To generate a Ruby \String containing \JSON data, -# use method JSON.generate(source, opts), where -# - +source+ is a Ruby object. -# - +opts+ is a \Hash object containing options -# that control both input allowed and output formatting. -# -# ==== Generating \JSON from Arrays -# -# When the source is a Ruby \Array, JSON.generate returns -# a \String containing a \JSON array: -# ruby = [0, 's', :foo] -# json = JSON.generate(ruby) -# json # => '[0,"s","foo"]' -# -# The Ruby \Array array may contain nested arrays, hashes, and scalars -# to any depth: -# ruby = [0, [1, 2], {foo: 3, bar: 4}] -# json = JSON.generate(ruby) -# json # => '[0,[1,2],{"foo":3,"bar":4}]' -# -# ==== Generating \JSON from Hashes -# -# When the source is a Ruby \Hash, JSON.generate returns -# a \String containing a \JSON object: -# ruby = {foo: 0, bar: 's', baz: :bat} -# json = JSON.generate(ruby) -# json # => '{"foo":0,"bar":"s","baz":"bat"}' -# -# The Ruby \Hash array may contain nested arrays, hashes, and scalars -# to any depth: -# ruby = {foo: [0, 1], bar: {baz: 2, bat: 3}, bam: :bad} -# json = JSON.generate(ruby) -# json # => '{"foo":[0,1],"bar":{"baz":2,"bat":3},"bam":"bad"}' -# -# ==== Generating \JSON from Other Objects -# -# When the source is neither an \Array nor a \Hash, -# the generated \JSON data depends on the class of the source. -# -# When the source is a Ruby \Integer or \Float, JSON.generate returns -# a \String containing a \JSON number: -# JSON.generate(42) # => '42' -# JSON.generate(0.42) # => '0.42' -# -# When the source is a Ruby \String, JSON.generate returns -# a \String containing a \JSON string (with double-quotes): -# JSON.generate('A string') # => '"A string"' -# -# When the source is +true+, +false+ or +nil+, JSON.generate returns -# a \String containing the corresponding \JSON token: -# JSON.generate(true) # => 'true' -# JSON.generate(false) # => 'false' -# JSON.generate(nil) # => 'null' -# -# When the source is none of the above, JSON.generate returns -# a \String containing a \JSON string representation of the source: -# JSON.generate(:foo) # => '"foo"' -# JSON.generate(Complex(0, 0)) # => '"0+0i"' -# JSON.generate(Dir.new('.')) # => '"#"' -# -# ==== Generating Options -# -# ====== Input Options -# -# Option +allow_nan+ (boolean) specifies whether -# +NaN+, +Infinity+, and -Infinity may be generated; -# defaults to +false+. -# -# With the default, +false+: -# # Raises JSON::GeneratorError (920: NaN not allowed in JSON): -# JSON.generate(JSON::NaN) -# # Raises JSON::GeneratorError (917: Infinity not allowed in JSON): -# JSON.generate(JSON::Infinity) -# # Raises JSON::GeneratorError (917: -Infinity not allowed in JSON): -# JSON.generate(JSON::MinusInfinity) -# -# Allow: -# ruby = [Float::NaN, Float::Infinity, Float::MinusInfinity] -# JSON.generate(ruby, allow_nan: true) # => '[NaN,Infinity,-Infinity]' -# -# --- -# -# Option +max_nesting+ (\Integer) specifies the maximum nesting depth -# in +obj+; defaults to +100+. -# -# With the default, +100+: -# obj = [[[[[[0]]]]]] -# JSON.generate(obj) # => '[[[[[[0]]]]]]' -# -# Too deep: -# # Raises JSON::NestingError (nesting of 2 is too deep): -# JSON.generate(obj, max_nesting: 2) -# -# ====== Escaping Options -# -# Options +script_safe+ (boolean) specifies wether '\u2028', '\u2029' -# and '/' should be escaped as to make the JSON object safe to interpolate in script -# tags. -# -# Options +ascii_only+ (boolean) specifies wether all characters outside the ASCII range -# should be escaped. -# -# ====== Output Options -# -# The default formatting options generate the most compact -# \JSON data, all on one line and with no whitespace. -# -# You can use these formatting options to generate -# \JSON data in a more open format, using whitespace. -# See also JSON.pretty_generate. -# -# - Option +array_nl+ (\String) specifies a string (usually a newline) -# to be inserted after each \JSON array; defaults to the empty \String, ''. -# - Option +object_nl+ (\String) specifies a string (usually a newline) -# to be inserted after each \JSON object; defaults to the empty \String, ''. -# - Option +indent+ (\String) specifies the string (usually spaces) to be -# used for indentation; defaults to the empty \String, ''; -# defaults to the empty \String, ''; -# has no effect unless options +array_nl+ or +object_nl+ specify newlines. -# - Option +space+ (\String) specifies a string (usually a space) to be -# inserted after the colon in each \JSON object's pair; -# defaults to the empty \String, ''. -# - Option +space_before+ (\String) specifies a string (usually a space) to be -# inserted before the colon in each \JSON object's pair; -# defaults to the empty \String, ''. -# -# In this example, +obj+ is used first to generate the shortest -# \JSON data (no whitespace), then again with all formatting options -# specified: -# -# obj = {foo: [:bar, :baz], bat: {bam: 0, bad: 1}} -# json = JSON.generate(obj) -# puts 'Compact:', json -# opts = { -# array_nl: "\n", -# object_nl: "\n", -# indent: ' ', -# space_before: ' ', -# space: ' ' -# } -# puts 'Open:', JSON.generate(obj, opts) -# -# Output: -# Compact: -# {"foo":["bar","baz"],"bat":{"bam":0,"bad":1}} -# Open: -# { -# "foo" : [ -# "bar", -# "baz" -# ], -# "bat" : { -# "bam" : 0, -# "bad" : 1 -# } -# } -# -# == \JSON Additions -# -# When you "round trip" a non-\String object from Ruby to \JSON and back, -# you have a new \String, instead of the object you began with: -# ruby0 = Range.new(0, 2) -# json = JSON.generate(ruby0) -# json # => '0..2"' -# ruby1 = JSON.parse(json) -# ruby1 # => '0..2' -# ruby1.class # => String -# -# You can use \JSON _additions_ to preserve the original object. -# The addition is an extension of a ruby class, so that: -# - \JSON.generate stores more information in the \JSON string. -# - \JSON.parse, called with option +create_additions+, -# uses that information to create a proper Ruby object. -# -# This example shows a \Range being generated into \JSON -# and parsed back into Ruby, both without and with -# the addition for \Range: -# ruby = Range.new(0, 2) -# # This passage does not use the addition for Range. -# json0 = JSON.generate(ruby) -# ruby0 = JSON.parse(json0) -# # This passage uses the addition for Range. -# require 'json/add/range' -# json1 = JSON.generate(ruby) -# ruby1 = JSON.parse(json1, create_additions: true) -# # Make a nice display. -# display = <require 'json/add/bigdecimal' -# - Complex: require 'json/add/complex' -# - Date: require 'json/add/date' -# - DateTime: require 'json/add/date_time' -# - Exception: require 'json/add/exception' -# - OpenStruct: require 'json/add/ostruct' -# - Range: require 'json/add/range' -# - Rational: require 'json/add/rational' -# - Regexp: require 'json/add/regexp' -# - Set: require 'json/add/set' -# - Struct: require 'json/add/struct' -# - Symbol: require 'json/add/symbol' -# - Time: require 'json/add/time' -# -# To reduce punctuation clutter, the examples below -# show the generated \JSON via +puts+, rather than the usual +inspect+, -# -# \BigDecimal: -# require 'json/add/bigdecimal' -# ruby0 = BigDecimal(0) # 0.0 -# json = JSON.generate(ruby0) # {"json_class":"BigDecimal","b":"27:0.0"} -# ruby1 = JSON.parse(json, create_additions: true) # 0.0 -# ruby1.class # => BigDecimal -# -# \Complex: -# require 'json/add/complex' -# ruby0 = Complex(1+0i) # 1+0i -# json = JSON.generate(ruby0) # {"json_class":"Complex","r":1,"i":0} -# ruby1 = JSON.parse(json, create_additions: true) # 1+0i -# ruby1.class # Complex -# -# \Date: -# require 'json/add/date' -# ruby0 = Date.today # 2020-05-02 -# json = JSON.generate(ruby0) # {"json_class":"Date","y":2020,"m":5,"d":2,"sg":2299161.0} -# ruby1 = JSON.parse(json, create_additions: true) # 2020-05-02 -# ruby1.class # Date -# -# \DateTime: -# require 'json/add/date_time' -# ruby0 = DateTime.now # 2020-05-02T10:38:13-05:00 -# json = JSON.generate(ruby0) # {"json_class":"DateTime","y":2020,"m":5,"d":2,"H":10,"M":38,"S":13,"of":"-5/24","sg":2299161.0} -# ruby1 = JSON.parse(json, create_additions: true) # 2020-05-02T10:38:13-05:00 -# ruby1.class # DateTime -# -# \Exception (and its subclasses including \RuntimeError): -# require 'json/add/exception' -# ruby0 = Exception.new('A message') # A message -# json = JSON.generate(ruby0) # {"json_class":"Exception","m":"A message","b":null} -# ruby1 = JSON.parse(json, create_additions: true) # A message -# ruby1.class # Exception -# ruby0 = RuntimeError.new('Another message') # Another message -# json = JSON.generate(ruby0) # {"json_class":"RuntimeError","m":"Another message","b":null} -# ruby1 = JSON.parse(json, create_additions: true) # Another message -# ruby1.class # RuntimeError -# -# \OpenStruct: -# require 'json/add/ostruct' -# ruby0 = OpenStruct.new(name: 'Matz', language: 'Ruby') # # -# json = JSON.generate(ruby0) # {"json_class":"OpenStruct","t":{"name":"Matz","language":"Ruby"}} -# ruby1 = JSON.parse(json, create_additions: true) # # -# ruby1.class # OpenStruct -# -# \Range: -# require 'json/add/range' -# ruby0 = Range.new(0, 2) # 0..2 -# json = JSON.generate(ruby0) # {"json_class":"Range","a":[0,2,false]} -# ruby1 = JSON.parse(json, create_additions: true) # 0..2 -# ruby1.class # Range -# -# \Rational: -# require 'json/add/rational' -# ruby0 = Rational(1, 3) # 1/3 -# json = JSON.generate(ruby0) # {"json_class":"Rational","n":1,"d":3} -# ruby1 = JSON.parse(json, create_additions: true) # 1/3 -# ruby1.class # Rational -# -# \Regexp: -# require 'json/add/regexp' -# ruby0 = Regexp.new('foo') # (?-mix:foo) -# json = JSON.generate(ruby0) # {"json_class":"Regexp","o":0,"s":"foo"} -# ruby1 = JSON.parse(json, create_additions: true) # (?-mix:foo) -# ruby1.class # Regexp -# -# \Set: -# require 'json/add/set' -# ruby0 = Set.new([0, 1, 2]) # # -# json = JSON.generate(ruby0) # {"json_class":"Set","a":[0,1,2]} -# ruby1 = JSON.parse(json, create_additions: true) # # -# ruby1.class # Set -# -# \Struct: -# require 'json/add/struct' -# Customer = Struct.new(:name, :address) # Customer -# ruby0 = Customer.new("Dave", "123 Main") # # -# json = JSON.generate(ruby0) # {"json_class":"Customer","v":["Dave","123 Main"]} -# ruby1 = JSON.parse(json, create_additions: true) # # -# ruby1.class # Customer -# -# \Symbol: -# require 'json/add/symbol' -# ruby0 = :foo # foo -# json = JSON.generate(ruby0) # {"json_class":"Symbol","s":"foo"} -# ruby1 = JSON.parse(json, create_additions: true) # foo -# ruby1.class # Symbol -# -# \Time: -# require 'json/add/time' -# ruby0 = Time.now # 2020-05-02 11:28:26 -0500 -# json = JSON.generate(ruby0) # {"json_class":"Time","s":1588436906,"n":840560000} -# ruby1 = JSON.parse(json, create_additions: true) # 2020-05-02 11:28:26 -0500 -# ruby1.class # Time -# -# -# === Custom \JSON Additions -# -# In addition to the \JSON additions provided, -# you can craft \JSON additions of your own, -# either for Ruby built-in classes or for user-defined classes. -# -# Here's a user-defined class +Foo+: -# class Foo -# attr_accessor :bar, :baz -# def initialize(bar, baz) -# self.bar = bar -# self.baz = baz -# end -# end -# -# Here's the \JSON addition for it: -# # Extend class Foo with JSON addition. -# class Foo -# # Serialize Foo object with its class name and arguments -# def to_json(*args) -# { -# JSON.create_id => self.class.name, -# 'a' => [ bar, baz ] -# }.to_json(*args) -# end -# # Deserialize JSON string by constructing new Foo object with arguments. -# def self.json_create(object) -# new(*object['a']) -# end -# end -# -# Demonstration: -# require 'json' -# # This Foo object has no custom addition. -# foo0 = Foo.new(0, 1) -# json0 = JSON.generate(foo0) -# obj0 = JSON.parse(json0) -# # Lood the custom addition. -# require_relative 'foo_addition' -# # This foo has the custom addition. -# foo1 = Foo.new(0, 1) -# json1 = JSON.generate(foo1) -# obj1 = JSON.parse(json1, create_additions: true) -# # Make a nice display. -# display = <" (String) -# With custom addition: {"json_class":"Foo","a":[0,1]} (String) -# Parsed JSON: -# Without custom addition: "#" (String) -# With custom addition: # (Foo) -# -module JSON - require 'json/version' - - begin - require 'json/ext' - rescue LoadError - require 'json/pure' - end -end diff --git a/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/add/bigdecimal.rb b/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/add/bigdecimal.rb deleted file mode 100644 index 3d0d99d6..00000000 --- a/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/add/bigdecimal.rb +++ /dev/null @@ -1,58 +0,0 @@ -#frozen_string_literal: false -unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED - require 'json' -end -begin - require 'bigdecimal' -rescue LoadError -end - -class BigDecimal - - # See #as_json. - def self.json_create(object) - BigDecimal._load object['b'] - end - - # Methods BigDecimal#as_json and +BigDecimal.json_create+ may be used - # to serialize and deserialize a \BigDecimal object; - # see Marshal[https://docs.ruby-lang.org/en/master/Marshal.html]. - # - # \Method BigDecimal#as_json serializes +self+, - # returning a 2-element hash representing +self+: - # - # require 'json/add/bigdecimal' - # x = BigDecimal(2).as_json # => {"json_class"=>"BigDecimal", "b"=>"27:0.2e1"} - # y = BigDecimal(2.0, 4).as_json # => {"json_class"=>"BigDecimal", "b"=>"36:0.2e1"} - # z = BigDecimal(Complex(2, 0)).as_json # => {"json_class"=>"BigDecimal", "b"=>"27:0.2e1"} - # - # \Method +JSON.create+ deserializes such a hash, returning a \BigDecimal object: - # - # BigDecimal.json_create(x) # => 0.2e1 - # BigDecimal.json_create(y) # => 0.2e1 - # BigDecimal.json_create(z) # => 0.2e1 - # - def as_json(*) - { - JSON.create_id => self.class.name, - 'b' => _dump, - } - end - - # Returns a JSON string representing +self+: - # - # require 'json/add/bigdecimal' - # puts BigDecimal(2).to_json - # puts BigDecimal(2.0, 4).to_json - # puts BigDecimal(Complex(2, 0)).to_json - # - # Output: - # - # {"json_class":"BigDecimal","b":"27:0.2e1"} - # {"json_class":"BigDecimal","b":"36:0.2e1"} - # {"json_class":"BigDecimal","b":"27:0.2e1"} - # - def to_json(*args) - as_json.to_json(*args) - end -end if defined?(::BigDecimal) diff --git a/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/add/complex.rb b/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/add/complex.rb deleted file mode 100644 index e3b8e768..00000000 --- a/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/add/complex.rb +++ /dev/null @@ -1,51 +0,0 @@ -#frozen_string_literal: false -unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED - require 'json' -end - -class Complex - - # See #as_json. - def self.json_create(object) - Complex(object['r'], object['i']) - end - - # Methods Complex#as_json and +Complex.json_create+ may be used - # to serialize and deserialize a \Complex object; - # see Marshal[https://docs.ruby-lang.org/en/master/Marshal.html]. - # - # \Method Complex#as_json serializes +self+, - # returning a 2-element hash representing +self+: - # - # require 'json/add/complex' - # x = Complex(2).as_json # => {"json_class"=>"Complex", "r"=>2, "i"=>0} - # y = Complex(2.0, 4).as_json # => {"json_class"=>"Complex", "r"=>2.0, "i"=>4} - # - # \Method +JSON.create+ deserializes such a hash, returning a \Complex object: - # - # Complex.json_create(x) # => (2+0i) - # Complex.json_create(y) # => (2.0+4i) - # - def as_json(*) - { - JSON.create_id => self.class.name, - 'r' => real, - 'i' => imag, - } - end - - # Returns a JSON string representing +self+: - # - # require 'json/add/complex' - # puts Complex(2).to_json - # puts Complex(2.0, 4).to_json - # - # Output: - # - # {"json_class":"Complex","r":2,"i":0} - # {"json_class":"Complex","r":2.0,"i":4} - # - def to_json(*args) - as_json.to_json(*args) - end -end diff --git a/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/add/core.rb b/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/add/core.rb deleted file mode 100644 index bfb017c4..00000000 --- a/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/add/core.rb +++ /dev/null @@ -1,12 +0,0 @@ -#frozen_string_literal: false -# This file requires the implementations of ruby core's custom objects for -# serialisation/deserialisation. - -require 'json/add/date' -require 'json/add/date_time' -require 'json/add/exception' -require 'json/add/range' -require 'json/add/regexp' -require 'json/add/struct' -require 'json/add/symbol' -require 'json/add/time' diff --git a/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/add/date.rb b/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/add/date.rb deleted file mode 100644 index a9e68298..00000000 --- a/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/add/date.rb +++ /dev/null @@ -1,54 +0,0 @@ -#frozen_string_literal: false -unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED - require 'json' -end -require 'date' - -class Date - - # See #as_json. - def self.json_create(object) - civil(*object.values_at('y', 'm', 'd', 'sg')) - end - - alias start sg unless method_defined?(:start) - - # Methods Date#as_json and +Date.json_create+ may be used - # to serialize and deserialize a \Date object; - # see Marshal[https://docs.ruby-lang.org/en/master/Marshal.html]. - # - # \Method Date#as_json serializes +self+, - # returning a 2-element hash representing +self+: - # - # require 'json/add/date' - # x = Date.today.as_json - # # => {"json_class"=>"Date", "y"=>2023, "m"=>11, "d"=>21, "sg"=>2299161.0} - # - # \Method +JSON.create+ deserializes such a hash, returning a \Date object: - # - # Date.json_create(x) - # # => # - # - def as_json(*) - { - JSON.create_id => self.class.name, - 'y' => year, - 'm' => month, - 'd' => day, - 'sg' => start, - } - end - - # Returns a JSON string representing +self+: - # - # require 'json/add/date' - # puts Date.today.to_json - # - # Output: - # - # {"json_class":"Date","y":2023,"m":11,"d":21,"sg":2299161.0} - # - def to_json(*args) - as_json.to_json(*args) - end -end diff --git a/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/add/date_time.rb b/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/add/date_time.rb deleted file mode 100644 index cd2a1611..00000000 --- a/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/add/date_time.rb +++ /dev/null @@ -1,67 +0,0 @@ -#frozen_string_literal: false -unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED - require 'json' -end -require 'date' - -class DateTime - - # See #as_json. - def self.json_create(object) - args = object.values_at('y', 'm', 'd', 'H', 'M', 'S') - of_a, of_b = object['of'].split('/') - if of_b and of_b != '0' - args << Rational(of_a.to_i, of_b.to_i) - else - args << of_a - end - args << object['sg'] - civil(*args) - end - - alias start sg unless method_defined?(:start) - - # Methods DateTime#as_json and +DateTime.json_create+ may be used - # to serialize and deserialize a \DateTime object; - # see Marshal[https://docs.ruby-lang.org/en/master/Marshal.html]. - # - # \Method DateTime#as_json serializes +self+, - # returning a 2-element hash representing +self+: - # - # require 'json/add/datetime' - # x = DateTime.now.as_json - # # => {"json_class"=>"DateTime", "y"=>2023, "m"=>11, "d"=>21, "sg"=>2299161.0} - # - # \Method +JSON.create+ deserializes such a hash, returning a \DateTime object: - # - # DateTime.json_create(x) # BUG? Raises Date::Error "invalid date" - # - def as_json(*) - { - JSON.create_id => self.class.name, - 'y' => year, - 'm' => month, - 'd' => day, - 'H' => hour, - 'M' => min, - 'S' => sec, - 'of' => offset.to_s, - 'sg' => start, - } - end - - # Returns a JSON string representing +self+: - # - # require 'json/add/datetime' - # puts DateTime.now.to_json - # - # Output: - # - # {"json_class":"DateTime","y":2023,"m":11,"d":21,"sg":2299161.0} - # - def to_json(*args) - as_json.to_json(*args) - end -end - - diff --git a/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/add/exception.rb b/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/add/exception.rb deleted file mode 100644 index fa699d6e..00000000 --- a/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/add/exception.rb +++ /dev/null @@ -1,49 +0,0 @@ -#frozen_string_literal: false -unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED - require 'json' -end - -class Exception - - # See #as_json. - def self.json_create(object) - result = new(object['m']) - result.set_backtrace object['b'] - result - end - - # Methods Exception#as_json and +Exception.json_create+ may be used - # to serialize and deserialize a \Exception object; - # see Marshal[https://docs.ruby-lang.org/en/master/Marshal.html]. - # - # \Method Exception#as_json serializes +self+, - # returning a 2-element hash representing +self+: - # - # require 'json/add/exception' - # x = Exception.new('Foo').as_json # => {"json_class"=>"Exception", "m"=>"Foo", "b"=>nil} - # - # \Method +JSON.create+ deserializes such a hash, returning a \Exception object: - # - # Exception.json_create(x) # => # - # - def as_json(*) - { - JSON.create_id => self.class.name, - 'm' => message, - 'b' => backtrace, - } - end - - # Returns a JSON string representing +self+: - # - # require 'json/add/exception' - # puts Exception.new('Foo').to_json - # - # Output: - # - # {"json_class":"Exception","m":"Foo","b":null} - # - def to_json(*args) - as_json.to_json(*args) - end -end diff --git a/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/add/ostruct.rb b/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/add/ostruct.rb deleted file mode 100644 index f912e522..00000000 --- a/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/add/ostruct.rb +++ /dev/null @@ -1,51 +0,0 @@ -#frozen_string_literal: false -unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED - require 'json' -end -require 'ostruct' - -class OpenStruct - - # See #as_json. - def self.json_create(object) - new(object['t'] || object[:t]) - end - - # Methods OpenStruct#as_json and +OpenStruct.json_create+ may be used - # to serialize and deserialize a \OpenStruct object; - # see Marshal[https://docs.ruby-lang.org/en/master/Marshal.html]. - # - # \Method OpenStruct#as_json serializes +self+, - # returning a 2-element hash representing +self+: - # - # require 'json/add/ostruct' - # x = OpenStruct.new('name' => 'Rowdy', :age => nil).as_json - # # => {"json_class"=>"OpenStruct", "t"=>{:name=>'Rowdy', :age=>nil}} - # - # \Method +JSON.create+ deserializes such a hash, returning a \OpenStruct object: - # - # OpenStruct.json_create(x) - # # => # - # - def as_json(*) - klass = self.class.name - klass.to_s.empty? and raise JSON::JSONError, "Only named structs are supported!" - { - JSON.create_id => klass, - 't' => table, - } - end - - # Returns a JSON string representing +self+: - # - # require 'json/add/ostruct' - # puts OpenStruct.new('name' => 'Rowdy', :age => nil).to_json - # - # Output: - # - # {"json_class":"OpenStruct","t":{'name':'Rowdy',"age":null}} - # - def to_json(*args) - as_json.to_json(*args) - end -end diff --git a/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/add/range.rb b/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/add/range.rb deleted file mode 100644 index 1fc8dcde..00000000 --- a/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/add/range.rb +++ /dev/null @@ -1,54 +0,0 @@ -#frozen_string_literal: false -unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED - require 'json' -end - -class Range - - # See #as_json. - def self.json_create(object) - new(*object['a']) - end - - # Methods Range#as_json and +Range.json_create+ may be used - # to serialize and deserialize a \Range object; - # see Marshal[https://docs.ruby-lang.org/en/master/Marshal.html]. - # - # \Method Range#as_json serializes +self+, - # returning a 2-element hash representing +self+: - # - # require 'json/add/range' - # x = (1..4).as_json # => {"json_class"=>"Range", "a"=>[1, 4, false]} - # y = (1...4).as_json # => {"json_class"=>"Range", "a"=>[1, 4, true]} - # z = ('a'..'d').as_json # => {"json_class"=>"Range", "a"=>["a", "d", false]} - # - # \Method +JSON.create+ deserializes such a hash, returning a \Range object: - # - # Range.json_create(x) # => 1..4 - # Range.json_create(y) # => 1...4 - # Range.json_create(z) # => "a".."d" - # - def as_json(*) - { - JSON.create_id => self.class.name, - 'a' => [ first, last, exclude_end? ] - } - end - - # Returns a JSON string representing +self+: - # - # require 'json/add/range' - # puts (1..4).to_json - # puts (1...4).to_json - # puts ('a'..'d').to_json - # - # Output: - # - # {"json_class":"Range","a":[1,4,false]} - # {"json_class":"Range","a":[1,4,true]} - # {"json_class":"Range","a":["a","d",false]} - # - def to_json(*args) - as_json.to_json(*args) - end -end diff --git a/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/add/rational.rb b/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/add/rational.rb deleted file mode 100644 index a6033774..00000000 --- a/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/add/rational.rb +++ /dev/null @@ -1,49 +0,0 @@ -#frozen_string_literal: false -unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED - require 'json' -end - -class Rational - - # See #as_json. - def self.json_create(object) - Rational(object['n'], object['d']) - end - - # Methods Rational#as_json and +Rational.json_create+ may be used - # to serialize and deserialize a \Rational object; - # see Marshal[https://docs.ruby-lang.org/en/master/Marshal.html]. - # - # \Method Rational#as_json serializes +self+, - # returning a 2-element hash representing +self+: - # - # require 'json/add/rational' - # x = Rational(2, 3).as_json - # # => {"json_class"=>"Rational", "n"=>2, "d"=>3} - # - # \Method +JSON.create+ deserializes such a hash, returning a \Rational object: - # - # Rational.json_create(x) - # # => (2/3) - # - def as_json(*) - { - JSON.create_id => self.class.name, - 'n' => numerator, - 'd' => denominator, - } - end - - # Returns a JSON string representing +self+: - # - # require 'json/add/rational' - # puts Rational(2, 3).to_json - # - # Output: - # - # {"json_class":"Rational","n":2,"d":3} - # - def to_json(*args) - as_json.to_json(*args) - end -end diff --git a/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/add/regexp.rb b/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/add/regexp.rb deleted file mode 100644 index 5649a072..00000000 --- a/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/add/regexp.rb +++ /dev/null @@ -1,48 +0,0 @@ -#frozen_string_literal: false -unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED - require 'json' -end - -class Regexp - - # See #as_json. - def self.json_create(object) - new(object['s'], object['o']) - end - - # Methods Regexp#as_json and +Regexp.json_create+ may be used - # to serialize and deserialize a \Regexp object; - # see Marshal[https://docs.ruby-lang.org/en/master/Marshal.html]. - # - # \Method Regexp#as_json serializes +self+, - # returning a 2-element hash representing +self+: - # - # require 'json/add/regexp' - # x = /foo/.as_json - # # => {"json_class"=>"Regexp", "o"=>0, "s"=>"foo"} - # - # \Method +JSON.create+ deserializes such a hash, returning a \Regexp object: - # - # Regexp.json_create(x) # => /foo/ - # - def as_json(*) - { - JSON.create_id => self.class.name, - 'o' => options, - 's' => source, - } - end - - # Returns a JSON string representing +self+: - # - # require 'json/add/regexp' - # puts /foo/.to_json - # - # Output: - # - # {"json_class":"Regexp","o":0,"s":"foo"} - # - def to_json(*args) - as_json.to_json(*args) - end -end diff --git a/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/add/set.rb b/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/add/set.rb deleted file mode 100644 index c521d8b9..00000000 --- a/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/add/set.rb +++ /dev/null @@ -1,48 +0,0 @@ -unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED - require 'json' -end -defined?(::Set) or require 'set' - -class Set - - # See #as_json. - def self.json_create(object) - new object['a'] - end - - # Methods Set#as_json and +Set.json_create+ may be used - # to serialize and deserialize a \Set object; - # see Marshal[https://docs.ruby-lang.org/en/master/Marshal.html]. - # - # \Method Set#as_json serializes +self+, - # returning a 2-element hash representing +self+: - # - # require 'json/add/set' - # x = Set.new(%w/foo bar baz/).as_json - # # => {"json_class"=>"Set", "a"=>["foo", "bar", "baz"]} - # - # \Method +JSON.create+ deserializes such a hash, returning a \Set object: - # - # Set.json_create(x) # => # - # - def as_json(*) - { - JSON.create_id => self.class.name, - 'a' => to_a, - } - end - - # Returns a JSON string representing +self+: - # - # require 'json/add/set' - # puts Set.new(%w/foo bar baz/).to_json - # - # Output: - # - # {"json_class":"Set","a":["foo","bar","baz"]} - # - def to_json(*args) - as_json.to_json(*args) - end -end - diff --git a/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/add/struct.rb b/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/add/struct.rb deleted file mode 100644 index 857bc8fd..00000000 --- a/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/add/struct.rb +++ /dev/null @@ -1,52 +0,0 @@ -#frozen_string_literal: false -unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED - require 'json' -end - -class Struct - - # See #as_json. - def self.json_create(object) - new(*object['v']) - end - - # Methods Struct#as_json and +Struct.json_create+ may be used - # to serialize and deserialize a \Struct object; - # see Marshal[https://docs.ruby-lang.org/en/master/Marshal.html]. - # - # \Method Struct#as_json serializes +self+, - # returning a 2-element hash representing +self+: - # - # require 'json/add/struct' - # Customer = Struct.new('Customer', :name, :address, :zip) - # x = Struct::Customer.new.as_json - # # => {"json_class"=>"Struct::Customer", "v"=>[nil, nil, nil]} - # - # \Method +JSON.create+ deserializes such a hash, returning a \Struct object: - # - # Struct::Customer.json_create(x) - # # => # - # - def as_json(*) - klass = self.class.name - klass.to_s.empty? and raise JSON::JSONError, "Only named structs are supported!" - { - JSON.create_id => klass, - 'v' => values, - } - end - - # Returns a JSON string representing +self+: - # - # require 'json/add/struct' - # Customer = Struct.new('Customer', :name, :address, :zip) - # puts Struct::Customer.new.to_json - # - # Output: - # - # {"json_class":"Struct","t":{'name':'Rowdy',"age":null}} - # - def to_json(*args) - as_json.to_json(*args) - end -end diff --git a/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/add/symbol.rb b/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/add/symbol.rb deleted file mode 100644 index 0fe6e934..00000000 --- a/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/add/symbol.rb +++ /dev/null @@ -1,48 +0,0 @@ - -#frozen_string_literal: false -unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED - require 'json' -end - -class Symbol - - # Methods Symbol#as_json and +Symbol.json_create+ may be used - # to serialize and deserialize a \Symbol object; - # see Marshal[https://docs.ruby-lang.org/en/master/Marshal.html]. - # - # \Method Symbol#as_json serializes +self+, - # returning a 2-element hash representing +self+: - # - # require 'json/add/symbol' - # x = :foo.as_json - # # => {"json_class"=>"Symbol", "s"=>"foo"} - # - # \Method +JSON.create+ deserializes such a hash, returning a \Symbol object: - # - # Symbol.json_create(x) # => :foo - # - def as_json(*) - { - JSON.create_id => self.class.name, - 's' => to_s, - } - end - - # Returns a JSON string representing +self+: - # - # require 'json/add/symbol' - # puts :foo.to_json - # - # Output: - # - # # {"json_class":"Symbol","s":"foo"} - # - def to_json(*a) - as_json.to_json(*a) - end - - # See #as_json. - def self.json_create(o) - o['s'].to_sym - end -end diff --git a/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/add/time.rb b/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/add/time.rb deleted file mode 100644 index 28f12df5..00000000 --- a/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/add/time.rb +++ /dev/null @@ -1,59 +0,0 @@ -#frozen_string_literal: false -unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED - require 'json' -end - -class Time - - # See #as_json. - def self.json_create(object) - if usec = object.delete('u') # used to be tv_usec -> tv_nsec - object['n'] = usec * 1000 - end - if method_defined?(:tv_nsec) - at(object['s'], Rational(object['n'], 1000)) - else - at(object['s'], object['n'] / 1000) - end - end - - # Methods Time#as_json and +Time.json_create+ may be used - # to serialize and deserialize a \Time object; - # see Marshal[https://docs.ruby-lang.org/en/master/Marshal.html]. - # - # \Method Time#as_json serializes +self+, - # returning a 2-element hash representing +self+: - # - # require 'json/add/time' - # x = Time.now.as_json - # # => {"json_class"=>"Time", "s"=>1700931656, "n"=>472846644} - # - # \Method +JSON.create+ deserializes such a hash, returning a \Time object: - # - # Time.json_create(x) - # # => 2023-11-25 11:00:56.472846644 -0600 - # - def as_json(*) - nanoseconds = [ tv_usec * 1000 ] - respond_to?(:tv_nsec) and nanoseconds << tv_nsec - nanoseconds = nanoseconds.max - { - JSON.create_id => self.class.name, - 's' => tv_sec, - 'n' => nanoseconds, - } - end - - # Returns a JSON string representing +self+: - # - # require 'json/add/time' - # puts Time.now.to_json - # - # Output: - # - # {"json_class":"Time","s":1700931678,"n":980650786} - # - def to_json(*args) - as_json.to_json(*args) - end -end diff --git a/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/common.rb b/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/common.rb deleted file mode 100644 index 09006601..00000000 --- a/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/common.rb +++ /dev/null @@ -1,697 +0,0 @@ -#frozen_string_literal: false -require 'json/version' -require 'json/generic_object' - -module JSON - NOT_SET = Object.new.freeze - private_constant :NOT_SET - - class << self - # :call-seq: - # JSON[object] -> new_array or new_string - # - # If +object+ is a \String, - # calls JSON.parse with +object+ and +opts+ (see method #parse): - # json = '[0, 1, null]' - # JSON[json]# => [0, 1, nil] - # - # Otherwise, calls JSON.generate with +object+ and +opts+ (see method #generate): - # ruby = [0, 1, nil] - # JSON[ruby] # => '[0,1,null]' - def [](object, opts = {}) - if object.respond_to? :to_str - JSON.parse(object.to_str, opts) - else - JSON.generate(object, opts) - end - end - - # Returns the JSON parser class that is used by JSON. This is either - # JSON::Ext::Parser or JSON::Pure::Parser: - # JSON.parser # => JSON::Ext::Parser - attr_reader :parser - - # Set the JSON parser class _parser_ to be used by JSON. - def parser=(parser) # :nodoc: - @parser = parser - remove_const :Parser if const_defined?(:Parser, false) - const_set :Parser, parser - end - - # Return the constant located at _path_. The format of _path_ has to be - # either ::A::B::C or A::B::C. In any case, A has to be located at the top - # level (absolute namespace path?). If there doesn't exist a constant at - # the given path, an ArgumentError is raised. - def deep_const_get(path) # :nodoc: - path.to_s.split(/::/).inject(Object) do |p, c| - case - when c.empty? then p - when p.const_defined?(c, true) then p.const_get(c) - else - begin - p.const_missing(c) - rescue NameError => e - raise ArgumentError, "can't get const #{path}: #{e}" - end - end - end - end - - # Set the module _generator_ to be used by JSON. - def generator=(generator) # :nodoc: - old, $VERBOSE = $VERBOSE, nil - @generator = generator - generator_methods = generator::GeneratorMethods - for const in generator_methods.constants - klass = deep_const_get(const) - modul = generator_methods.const_get(const) - klass.class_eval do - instance_methods(false).each do |m| - m.to_s == 'to_json' and remove_method m - end - include modul - end - end - self.state = generator::State - const_set :State, self.state - const_set :SAFE_STATE_PROTOTYPE, State.new # for JRuby - const_set :FAST_STATE_PROTOTYPE, create_fast_state - const_set :PRETTY_STATE_PROTOTYPE, create_pretty_state - ensure - $VERBOSE = old - end - - def create_fast_state - State.new( - :indent => '', - :space => '', - :object_nl => "", - :array_nl => "", - :max_nesting => false - ) - end - - def create_pretty_state - State.new( - :indent => ' ', - :space => ' ', - :object_nl => "\n", - :array_nl => "\n" - ) - end - - # Returns the JSON generator module that is used by JSON. This is - # either JSON::Ext::Generator or JSON::Pure::Generator: - # JSON.generator # => JSON::Ext::Generator - attr_reader :generator - - # Sets or Returns the JSON generator state class that is used by JSON. This is - # either JSON::Ext::Generator::State or JSON::Pure::Generator::State: - # JSON.state # => JSON::Ext::Generator::State - attr_accessor :state - end - - DEFAULT_CREATE_ID = 'json_class'.freeze - private_constant :DEFAULT_CREATE_ID - - CREATE_ID_TLS_KEY = "JSON.create_id".freeze - private_constant :CREATE_ID_TLS_KEY - - # Sets create identifier, which is used to decide if the _json_create_ - # hook of a class should be called; initial value is +json_class+: - # JSON.create_id # => 'json_class' - def self.create_id=(new_value) - Thread.current[CREATE_ID_TLS_KEY] = new_value.dup.freeze - end - - # Returns the current create identifier. - # See also JSON.create_id=. - def self.create_id - Thread.current[CREATE_ID_TLS_KEY] || DEFAULT_CREATE_ID - end - - NaN = 0.0/0 - - Infinity = 1.0/0 - - MinusInfinity = -Infinity - - # The base exception for JSON errors. - class JSONError < StandardError - def self.wrap(exception) - obj = new("Wrapped(#{exception.class}): #{exception.message.inspect}") - obj.set_backtrace exception.backtrace - obj - end - end - - # This exception is raised if a parser error occurs. - class ParserError < JSONError; end - - # This exception is raised if the nesting of parsed data structures is too - # deep. - class NestingError < ParserError; end - - # :stopdoc: - class CircularDatastructure < NestingError; end - # :startdoc: - - # This exception is raised if a generator or unparser error occurs. - class GeneratorError < JSONError; end - # For backwards compatibility - UnparserError = GeneratorError # :nodoc: - - # This exception is raised if the required unicode support is missing on the - # system. Usually this means that the iconv library is not installed. - class MissingUnicodeSupport < JSONError; end - - module_function - - # :call-seq: - # JSON.parse(source, opts) -> object - # - # Returns the Ruby objects created by parsing the given +source+. - # - # Argument +source+ contains the \String to be parsed. - # - # Argument +opts+, if given, contains a \Hash of options for the parsing. - # See {Parsing Options}[#module-JSON-label-Parsing+Options]. - # - # --- - # - # When +source+ is a \JSON array, returns a Ruby \Array: - # source = '["foo", 1.0, true, false, null]' - # ruby = JSON.parse(source) - # ruby # => ["foo", 1.0, true, false, nil] - # ruby.class # => Array - # - # When +source+ is a \JSON object, returns a Ruby \Hash: - # source = '{"a": "foo", "b": 1.0, "c": true, "d": false, "e": null}' - # ruby = JSON.parse(source) - # ruby # => {"a"=>"foo", "b"=>1.0, "c"=>true, "d"=>false, "e"=>nil} - # ruby.class # => Hash - # - # For examples of parsing for all \JSON data types, see - # {Parsing \JSON}[#module-JSON-label-Parsing+JSON]. - # - # Parses nested JSON objects: - # source = <<-EOT - # { - # "name": "Dave", - # "age" :40, - # "hats": [ - # "Cattleman's", - # "Panama", - # "Tophat" - # ] - # } - # EOT - # ruby = JSON.parse(source) - # ruby # => {"name"=>"Dave", "age"=>40, "hats"=>["Cattleman's", "Panama", "Tophat"]} - # - # --- - # - # Raises an exception if +source+ is not valid JSON: - # # Raises JSON::ParserError (783: unexpected token at ''): - # JSON.parse('') - # - def parse(source, opts = {}) - Parser.new(source, **(opts||{})).parse - end - - # :call-seq: - # JSON.parse!(source, opts) -> object - # - # Calls - # parse(source, opts) - # with +source+ and possibly modified +opts+. - # - # Differences from JSON.parse: - # - Option +max_nesting+, if not provided, defaults to +false+, - # which disables checking for nesting depth. - # - Option +allow_nan+, if not provided, defaults to +true+. - def parse!(source, opts = {}) - opts = { - :max_nesting => false, - :allow_nan => true - }.merge(opts) - Parser.new(source, **(opts||{})).parse - end - - # :call-seq: - # JSON.load_file(path, opts={}) -> object - # - # Calls: - # parse(File.read(path), opts) - # - # See method #parse. - def load_file(filespec, opts = {}) - parse(File.read(filespec), opts) - end - - # :call-seq: - # JSON.load_file!(path, opts = {}) - # - # Calls: - # JSON.parse!(File.read(path, opts)) - # - # See method #parse! - def load_file!(filespec, opts = {}) - parse!(File.read(filespec), opts) - end - - # :call-seq: - # JSON.generate(obj, opts = nil) -> new_string - # - # Returns a \String containing the generated \JSON data. - # - # See also JSON.fast_generate, JSON.pretty_generate. - # - # Argument +obj+ is the Ruby object to be converted to \JSON. - # - # Argument +opts+, if given, contains a \Hash of options for the generation. - # See {Generating Options}[#module-JSON-label-Generating+Options]. - # - # --- - # - # When +obj+ is an \Array, returns a \String containing a \JSON array: - # obj = ["foo", 1.0, true, false, nil] - # json = JSON.generate(obj) - # json # => '["foo",1.0,true,false,null]' - # - # When +obj+ is a \Hash, returns a \String containing a \JSON object: - # obj = {foo: 0, bar: 's', baz: :bat} - # json = JSON.generate(obj) - # json # => '{"foo":0,"bar":"s","baz":"bat"}' - # - # For examples of generating from other Ruby objects, see - # {Generating \JSON from Other Objects}[#module-JSON-label-Generating+JSON+from+Other+Objects]. - # - # --- - # - # Raises an exception if any formatting option is not a \String. - # - # Raises an exception if +obj+ contains circular references: - # a = []; b = []; a.push(b); b.push(a) - # # Raises JSON::NestingError (nesting of 100 is too deep): - # JSON.generate(a) - # - def generate(obj, opts = nil) - if State === opts - state = opts - else - state = State.new(opts) - end - state.generate(obj) - end - - # :stopdoc: - # I want to deprecate these later, so I'll first be silent about them, and - # later delete them. - alias unparse generate - module_function :unparse - # :startdoc: - - # :call-seq: - # JSON.fast_generate(obj, opts) -> new_string - # - # Arguments +obj+ and +opts+ here are the same as - # arguments +obj+ and +opts+ in JSON.generate. - # - # By default, generates \JSON data without checking - # for circular references in +obj+ (option +max_nesting+ set to +false+, disabled). - # - # Raises an exception if +obj+ contains circular references: - # a = []; b = []; a.push(b); b.push(a) - # # Raises SystemStackError (stack level too deep): - # JSON.fast_generate(a) - def fast_generate(obj, opts = nil) - if State === opts - state = opts - else - state = JSON.create_fast_state.configure(opts) - end - state.generate(obj) - end - - # :stopdoc: - # I want to deprecate these later, so I'll first be silent about them, and later delete them. - alias fast_unparse fast_generate - module_function :fast_unparse - # :startdoc: - - # :call-seq: - # JSON.pretty_generate(obj, opts = nil) -> new_string - # - # Arguments +obj+ and +opts+ here are the same as - # arguments +obj+ and +opts+ in JSON.generate. - # - # Default options are: - # { - # indent: ' ', # Two spaces - # space: ' ', # One space - # array_nl: "\n", # Newline - # object_nl: "\n" # Newline - # } - # - # Example: - # obj = {foo: [:bar, :baz], bat: {bam: 0, bad: 1}} - # json = JSON.pretty_generate(obj) - # puts json - # Output: - # { - # "foo": [ - # "bar", - # "baz" - # ], - # "bat": { - # "bam": 0, - # "bad": 1 - # } - # } - # - def pretty_generate(obj, opts = nil) - if State === opts - state, opts = opts, nil - else - state = JSON.create_pretty_state - end - if opts - if opts.respond_to? :to_hash - opts = opts.to_hash - elsif opts.respond_to? :to_h - opts = opts.to_h - else - raise TypeError, "can't convert #{opts.class} into Hash" - end - state.configure(opts) - end - state.generate(obj) - end - - # :stopdoc: - # I want to deprecate these later, so I'll first be silent about them, and later delete them. - alias pretty_unparse pretty_generate - module_function :pretty_unparse - # :startdoc: - - class << self - # Sets or returns default options for the JSON.load method. - # Initially: - # opts = JSON.load_default_options - # opts # => {:max_nesting=>false, :allow_nan=>true, :allow_blank=>true, :create_additions=>true} - attr_accessor :load_default_options - end - self.load_default_options = { - :max_nesting => false, - :allow_nan => true, - :allow_blank => true, - :create_additions => true, - } - - # :call-seq: - # JSON.load(source, proc = nil, options = {}) -> object - # - # Returns the Ruby objects created by parsing the given +source+. - # - # - Argument +source+ must be, or be convertible to, a \String: - # - If +source+ responds to instance method +to_str+, - # source.to_str becomes the source. - # - If +source+ responds to instance method +to_io+, - # source.to_io.read becomes the source. - # - If +source+ responds to instance method +read+, - # source.read becomes the source. - # - If both of the following are true, source becomes the \String 'null': - # - Option +allow_blank+ specifies a truthy value. - # - The source, as defined above, is +nil+ or the empty \String ''. - # - Otherwise, +source+ remains the source. - # - Argument +proc+, if given, must be a \Proc that accepts one argument. - # It will be called recursively with each result (depth-first order). - # See details below. - # BEWARE: This method is meant to serialise data from trusted user input, - # like from your own database server or clients under your control, it could - # be dangerous to allow untrusted users to pass JSON sources into it. - # - Argument +opts+, if given, contains a \Hash of options for the parsing. - # See {Parsing Options}[#module-JSON-label-Parsing+Options]. - # The default options can be changed via method JSON.load_default_options=. - # - # --- - # - # When no +proc+ is given, modifies +source+ as above and returns the result of - # parse(source, opts); see #parse. - # - # Source for following examples: - # source = <<-EOT - # { - # "name": "Dave", - # "age" :40, - # "hats": [ - # "Cattleman's", - # "Panama", - # "Tophat" - # ] - # } - # EOT - # - # Load a \String: - # ruby = JSON.load(source) - # ruby # => {"name"=>"Dave", "age"=>40, "hats"=>["Cattleman's", "Panama", "Tophat"]} - # - # Load an \IO object: - # require 'stringio' - # object = JSON.load(StringIO.new(source)) - # object # => {"name"=>"Dave", "age"=>40, "hats"=>["Cattleman's", "Panama", "Tophat"]} - # - # Load a \File object: - # path = 't.json' - # File.write(path, source) - # File.open(path) do |file| - # JSON.load(file) - # end # => {"name"=>"Dave", "age"=>40, "hats"=>["Cattleman's", "Panama", "Tophat"]} - # - # --- - # - # When +proc+ is given: - # - Modifies +source+ as above. - # - Gets the +result+ from calling parse(source, opts). - # - Recursively calls proc(result). - # - Returns the final result. - # - # Example: - # require 'json' - # - # # Some classes for the example. - # class Base - # def initialize(attributes) - # @attributes = attributes - # end - # end - # class User < Base; end - # class Account < Base; end - # class Admin < Base; end - # # The JSON source. - # json = <<-EOF - # { - # "users": [ - # {"type": "User", "username": "jane", "email": "jane@example.com"}, - # {"type": "User", "username": "john", "email": "john@example.com"} - # ], - # "accounts": [ - # {"account": {"type": "Account", "paid": true, "account_id": "1234"}}, - # {"account": {"type": "Account", "paid": false, "account_id": "1235"}} - # ], - # "admins": {"type": "Admin", "password": "0wn3d"} - # } - # EOF - # # Deserializer method. - # def deserialize_obj(obj, safe_types = %w(User Account Admin)) - # type = obj.is_a?(Hash) && obj["type"] - # safe_types.include?(type) ? Object.const_get(type).new(obj) : obj - # end - # # Call to JSON.load - # ruby = JSON.load(json, proc {|obj| - # case obj - # when Hash - # obj.each {|k, v| obj[k] = deserialize_obj v } - # when Array - # obj.map! {|v| deserialize_obj v } - # end - # }) - # pp ruby - # Output: - # {"users"=> - # [#"User", "username"=>"jane", "email"=>"jane@example.com"}>, - # #"User", "username"=>"john", "email"=>"john@example.com"}>], - # "accounts"=> - # [{"account"=> - # #"Account", "paid"=>true, "account_id"=>"1234"}>}, - # {"account"=> - # #"Account", "paid"=>false, "account_id"=>"1235"}>}], - # "admins"=> - # #"Admin", "password"=>"0wn3d"}>} - # - def load(source, proc = nil, options = {}) - opts = load_default_options.merge options - if source.respond_to? :to_str - source = source.to_str - elsif source.respond_to? :to_io - source = source.to_io.read - elsif source.respond_to?(:read) - source = source.read - end - if opts[:allow_blank] && (source.nil? || source.empty?) - source = 'null' - end - result = parse(source, opts) - recurse_proc(result, &proc) if proc - result - end - - # Recursively calls passed _Proc_ if the parsed data structure is an _Array_ or _Hash_ - def recurse_proc(result, &proc) # :nodoc: - case result - when Array - result.each { |x| recurse_proc x, &proc } - proc.call result - when Hash - result.each { |x, y| recurse_proc x, &proc; recurse_proc y, &proc } - proc.call result - else - proc.call result - end - end - - alias restore load - module_function :restore - - class << self - # Sets or returns the default options for the JSON.dump method. - # Initially: - # opts = JSON.dump_default_options - # opts # => {:max_nesting=>false, :allow_nan=>true, :script_safe=>false} - attr_accessor :dump_default_options - end - self.dump_default_options = { - :max_nesting => false, - :allow_nan => true, - :script_safe => false, - } - - # :call-seq: - # JSON.dump(obj, io = nil, limit = nil) - # - # Dumps +obj+ as a \JSON string, i.e. calls generate on the object and returns the result. - # - # The default options can be changed via method JSON.dump_default_options. - # - # - Argument +io+, if given, should respond to method +write+; - # the \JSON \String is written to +io+, and +io+ is returned. - # If +io+ is not given, the \JSON \String is returned. - # - Argument +limit+, if given, is passed to JSON.generate as option +max_nesting+. - # - # --- - # - # When argument +io+ is not given, returns the \JSON \String generated from +obj+: - # obj = {foo: [0, 1], bar: {baz: 2, bat: 3}, bam: :bad} - # json = JSON.dump(obj) - # json # => "{\"foo\":[0,1],\"bar\":{\"baz\":2,\"bat\":3},\"bam\":\"bad\"}" - # - # When argument +io+ is given, writes the \JSON \String to +io+ and returns +io+: - # path = 't.json' - # File.open(path, 'w') do |file| - # JSON.dump(obj, file) - # end # => # - # puts File.read(path) - # Output: - # {"foo":[0,1],"bar":{"baz":2,"bat":3},"bam":"bad"} - def dump(obj, anIO = nil, limit = nil, kwargs = nil) - io_limit_opt = [anIO, limit, kwargs].compact - kwargs = io_limit_opt.pop if io_limit_opt.last.is_a?(Hash) - anIO, limit = io_limit_opt - if anIO.respond_to?(:to_io) - anIO = anIO.to_io - elsif limit.nil? && !anIO.respond_to?(:write) - anIO, limit = nil, anIO - end - opts = JSON.dump_default_options - opts = opts.merge(:max_nesting => limit) if limit - opts = merge_dump_options(opts, **kwargs) if kwargs - result = generate(obj, opts) - if anIO - anIO.write result - anIO - else - result - end - rescue JSON::NestingError - raise ArgumentError, "exceed depth limit" - end - - # Encodes string using String.encode. - def self.iconv(to, from, string) - string.encode(to, from) - end - - def merge_dump_options(opts, strict: NOT_SET) - opts = opts.merge(strict: strict) if NOT_SET != strict - opts - end - - class << self - private :merge_dump_options - end -end - -module ::Kernel - private - - # Outputs _objs_ to STDOUT as JSON strings in the shortest form, that is in - # one line. - def j(*objs) - objs.each do |obj| - puts JSON::generate(obj, :allow_nan => true, :max_nesting => false) - end - nil - end - - # Outputs _objs_ to STDOUT as JSON strings in a pretty format, with - # indentation and over many lines. - def jj(*objs) - objs.each do |obj| - puts JSON::pretty_generate(obj, :allow_nan => true, :max_nesting => false) - end - nil - end - - # If _object_ is string-like, parse the string and return the parsed result as - # a Ruby data structure. Otherwise, generate a JSON text from the Ruby data - # structure object and return it. - # - # The _opts_ argument is passed through to generate/parse respectively. See - # generate and parse for their documentation. - def JSON(object, *args) - if object.respond_to? :to_str - JSON.parse(object.to_str, args.first) - else - JSON.generate(object, args.first) - end - end -end - -# Extends any Class to include _json_creatable?_ method. -class ::Class - # Returns true if this class can be used to create an instance - # from a serialised JSON string. The class has to implement a class - # method _json_create_ that expects a hash as first parameter. The hash - # should include the required data. - def json_creatable? - respond_to?(:json_create) - end -end diff --git a/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/ext.rb b/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/ext.rb deleted file mode 100644 index 7264a857..00000000 --- a/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/ext.rb +++ /dev/null @@ -1,15 +0,0 @@ -require 'json/common' - -module JSON - # This module holds all the modules/classes that implement JSON's - # functionality as C extensions. - module Ext - require 'json/ext/parser' - require 'json/ext/generator' - $DEBUG and warn "Using Ext extension for JSON." - JSON.parser = Parser - JSON.generator = Generator - end - - JSON_LOADED = true unless defined?(::JSON::JSON_LOADED) -end diff --git a/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/ext/generator.so b/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/ext/generator.so deleted file mode 100755 index 07c33df686951825e2f8e9de5d6173f8df78cda8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 215720 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
    @w~hd@b?ZNkxZ8`l22 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

    ^e(GY6oE}8r%6430F#al2EN6O^zLo_OA*DL}r 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

    8=8zV)O5F*mVj-SKf>Dtb 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 diff --git a/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/ext/parser.so b/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/ext/parser.so deleted file mode 100755 index f4f25a59d74371e24e4548229b3d98640f34dfd9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 148112 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

    -#xM}1e&vz#0twmx|KMA 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 z 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 RjsI~OyQ+j^z_BUhe*i4p*h~Nb diff --git a/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/generic_object.rb b/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/generic_object.rb deleted file mode 100644 index 108309db..00000000 --- a/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/generic_object.rb +++ /dev/null @@ -1,71 +0,0 @@ -#frozen_string_literal: false -require 'ostruct' - -module JSON - class GenericObject < OpenStruct - class << self - alias [] new - - def json_creatable? - @json_creatable - end - - attr_writer :json_creatable - - def json_create(data) - data = data.dup - data.delete JSON.create_id - self[data] - end - - def from_hash(object) - case - when object.respond_to?(:to_hash) - result = new - object.to_hash.each do |key, value| - result[key] = from_hash(value) - end - result - when object.respond_to?(:to_ary) - object.to_ary.map { |a| from_hash(a) } - else - object - end - end - - def load(source, proc = nil, opts = {}) - result = ::JSON.load(source, proc, opts.merge(:object_class => self)) - result.nil? ? new : result - end - - def dump(obj, *args) - ::JSON.dump(obj, *args) - end - end - self.json_creatable = false - - def to_hash - table - end - - def [](name) - __send__(name) - end unless method_defined?(:[]) - - def []=(name, value) - __send__("#{name}=", value) - end unless method_defined?(:[]=) - - def |(other) - self.class[other.to_hash.merge(to_hash)] - end - - def as_json(*) - { JSON.create_id => self.class.name }.merge to_hash - end - - def to_json(*a) - as_json.to_json(*a) - end - end -end diff --git a/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/pure.rb b/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/pure.rb deleted file mode 100644 index 53178b36..00000000 --- a/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/pure.rb +++ /dev/null @@ -1,15 +0,0 @@ -require 'json/common' - -module JSON - # This module holds all the modules/classes that implement JSON's - # functionality in pure ruby. - module Pure - require 'json/pure/parser' - require 'json/pure/generator' - $DEBUG and warn "Using Pure library for JSON." - JSON.parser = Parser - JSON.generator = Generator - end - - JSON_LOADED = true unless defined?(::JSON::JSON_LOADED) -end diff --git a/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/pure/generator.rb b/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/pure/generator.rb deleted file mode 100644 index c85222cc..00000000 --- a/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/pure/generator.rb +++ /dev/null @@ -1,513 +0,0 @@ -#frozen_string_literal: false -module JSON - MAP = { - "\x0" => '\u0000', - "\x1" => '\u0001', - "\x2" => '\u0002', - "\x3" => '\u0003', - "\x4" => '\u0004', - "\x5" => '\u0005', - "\x6" => '\u0006', - "\x7" => '\u0007', - "\b" => '\b', - "\t" => '\t', - "\n" => '\n', - "\xb" => '\u000b', - "\f" => '\f', - "\r" => '\r', - "\xe" => '\u000e', - "\xf" => '\u000f', - "\x10" => '\u0010', - "\x11" => '\u0011', - "\x12" => '\u0012', - "\x13" => '\u0013', - "\x14" => '\u0014', - "\x15" => '\u0015', - "\x16" => '\u0016', - "\x17" => '\u0017', - "\x18" => '\u0018', - "\x19" => '\u0019', - "\x1a" => '\u001a', - "\x1b" => '\u001b', - "\x1c" => '\u001c', - "\x1d" => '\u001d', - "\x1e" => '\u001e', - "\x1f" => '\u001f', - '"' => '\"', - '\\' => '\\\\', - } # :nodoc: - - ESCAPE_PATTERN = /[\/"\\\x0-\x1f]/n # :nodoc: - - SCRIPT_SAFE_MAP = MAP.merge( - '/' => '\\/', - "\u2028".b => '\u2028', - "\u2029".b => '\u2029', - ) - - SCRIPT_SAFE_ESCAPE_PATTERN = Regexp.union(ESCAPE_PATTERN, "\u2028".b, "\u2029".b) - - # Convert a UTF8 encoded Ruby string _string_ to a JSON string, encoded with - # UTF16 big endian characters as \u????, and return it. - def utf8_to_json(string, script_safe = false) # :nodoc: - string = string.dup - string.force_encoding(::Encoding::ASCII_8BIT) - if script_safe - string.gsub!(SCRIPT_SAFE_ESCAPE_PATTERN) { SCRIPT_SAFE_MAP[$&] || $& } - else - string.gsub!(ESCAPE_PATTERN) { MAP[$&] || $& } - end - string.force_encoding(::Encoding::UTF_8) - string - end - - def utf8_to_json_ascii(string, script_safe = false) # :nodoc: - string = string.dup - string.force_encoding(::Encoding::ASCII_8BIT) - map = script_safe ? SCRIPT_SAFE_MAP : MAP - string.gsub!(/[\/"\\\x0-\x1f]/n) { map[$&] || $& } - string.gsub!(/( - (?: - [\xc2-\xdf][\x80-\xbf] | - [\xe0-\xef][\x80-\xbf]{2} | - [\xf0-\xf4][\x80-\xbf]{3} - )+ | - [\x80-\xc1\xf5-\xff] # invalid - )/nx) { |c| - c.size == 1 and raise GeneratorError, "invalid utf8 byte: '#{c}'" - s = JSON.iconv('utf-16be', 'utf-8', c).unpack('H*')[0] - s.force_encoding(::Encoding::ASCII_8BIT) - s.gsub!(/.{4}/n, '\\\\u\&') - s.force_encoding(::Encoding::UTF_8) - } - string.force_encoding(::Encoding::UTF_8) - string - rescue => e - raise GeneratorError.wrap(e) - end - - def valid_utf8?(string) - encoding = string.encoding - (encoding == Encoding::UTF_8 || encoding == Encoding::ASCII) && - string.valid_encoding? - end - module_function :utf8_to_json, :utf8_to_json_ascii, :valid_utf8? - - module Pure - module Generator - # This class is used to create State instances, that are use to hold data - # while generating a JSON text from a Ruby data structure. - class State - # Creates a State object from _opts_, which ought to be Hash to create - # a new State instance configured by _opts_, something else to create - # an unconfigured instance. If _opts_ is a State object, it is just - # returned. - def self.from_state(opts) - case - when self === opts - opts - when opts.respond_to?(:to_hash) - new(opts.to_hash) - when opts.respond_to?(:to_h) - new(opts.to_h) - else - SAFE_STATE_PROTOTYPE.dup - end - end - - # Instantiates a new State object, configured by _opts_. - # - # _opts_ can have the following keys: - # - # * *indent*: a string used to indent levels (default: ''), - # * *space*: a string that is put after, a : or , delimiter (default: ''), - # * *space_before*: a string that is put before a : pair delimiter (default: ''), - # * *object_nl*: a string that is put at the end of a JSON object (default: ''), - # * *array_nl*: a string that is put at the end of a JSON array (default: ''), - # * *script_safe*: true if U+2028, U+2029 and forward slash (/) should be escaped - # as to make the JSON object safe to interpolate in a script tag (default: false). - # * *check_circular*: is deprecated now, use the :max_nesting option instead, - # * *max_nesting*: sets the maximum level of data structure nesting in - # the generated JSON, max_nesting = 0 if no maximum should be checked. - # * *allow_nan*: true if NaN, Infinity, and -Infinity should be - # generated, otherwise an exception is thrown, if these values are - # encountered. This options defaults to false. - def initialize(opts = {}) - @indent = '' - @space = '' - @space_before = '' - @object_nl = '' - @array_nl = '' - @allow_nan = false - @ascii_only = false - @script_safe = false - @strict = false - @buffer_initial_length = 1024 - configure opts - end - - # This string is used to indent levels in the JSON text. - attr_accessor :indent - - # This string is used to insert a space between the tokens in a JSON - # string. - attr_accessor :space - - # This string is used to insert a space before the ':' in JSON objects. - attr_accessor :space_before - - # This string is put at the end of a line that holds a JSON object (or - # Hash). - attr_accessor :object_nl - - # This string is put at the end of a line that holds a JSON array. - attr_accessor :array_nl - - # This integer returns the maximum level of data structure nesting in - # the generated JSON, max_nesting = 0 if no maximum is checked. - attr_accessor :max_nesting - - # If this attribute is set to true, forward slashes will be escaped in - # all json strings. - attr_accessor :script_safe - - # If this attribute is set to true, attempting to serialize types not - # supported by the JSON spec will raise a JSON::GeneratorError - attr_accessor :strict - - # :stopdoc: - attr_reader :buffer_initial_length - - def buffer_initial_length=(length) - if length > 0 - @buffer_initial_length = length - end - end - # :startdoc: - - # This integer returns the current depth data structure nesting in the - # generated JSON. - attr_accessor :depth - - def check_max_nesting # :nodoc: - return if @max_nesting.zero? - current_nesting = depth + 1 - current_nesting > @max_nesting and - raise NestingError, "nesting of #{current_nesting} is too deep" - end - - # Returns true, if circular data structures are checked, - # otherwise returns false. - def check_circular? - !@max_nesting.zero? - end - - # Returns true if NaN, Infinity, and -Infinity should be considered as - # valid JSON and output. - def allow_nan? - @allow_nan - end - - # Returns true, if only ASCII characters should be generated. Otherwise - # returns false. - def ascii_only? - @ascii_only - end - - # Returns true, if forward slashes are escaped. Otherwise returns false. - def script_safe? - @script_safe - end - - # Returns true, if forward slashes are escaped. Otherwise returns false. - def strict? - @strict - end - - # Configure this State instance with the Hash _opts_, and return - # itself. - def configure(opts) - if opts.respond_to?(:to_hash) - opts = opts.to_hash - elsif opts.respond_to?(:to_h) - opts = opts.to_h - else - raise TypeError, "can't convert #{opts.class} into Hash" - end - opts.each do |key, value| - instance_variable_set "@#{key}", value - end - @indent = opts[:indent] if opts.key?(:indent) - @space = opts[:space] if opts.key?(:space) - @space_before = opts[:space_before] if opts.key?(:space_before) - @object_nl = opts[:object_nl] if opts.key?(:object_nl) - @array_nl = opts[:array_nl] if opts.key?(:array_nl) - @allow_nan = !!opts[:allow_nan] if opts.key?(:allow_nan) - @ascii_only = opts[:ascii_only] if opts.key?(:ascii_only) - @depth = opts[:depth] || 0 - @buffer_initial_length ||= opts[:buffer_initial_length] - - @script_safe = if opts.key?(:script_safe) - !!opts[:script_safe] - elsif opts.key?(:escape_slash) - !!opts[:escape_slash] - else - false - end - - @strict = !!opts[:strict] if opts.key?(:strict) - - if !opts.key?(:max_nesting) # defaults to 100 - @max_nesting = 100 - elsif opts[:max_nesting] - @max_nesting = opts[:max_nesting] - else - @max_nesting = 0 - end - self - end - alias merge configure - - # Returns the configuration instance variables as a hash, that can be - # passed to the configure method. - def to_h - result = {} - instance_variables.each do |iv| - iv = iv.to_s[1..-1] - result[iv.to_sym] = self[iv] - end - result - end - - alias to_hash to_h - - # Generates a valid JSON document from object +obj+ and - # returns the result. If no valid JSON document can be - # created this method raises a - # GeneratorError exception. - def generate(obj) - result = obj.to_json(self) - JSON.valid_utf8?(result) or raise GeneratorError, - "source sequence #{result.inspect} is illegal/malformed utf-8" - result - end - - # Return the value returned by method +name+. - def [](name) - if respond_to?(name) - __send__(name) - else - instance_variable_get("@#{name}") if - instance_variables.include?("@#{name}".to_sym) # avoid warning - end - end - - def []=(name, value) - if respond_to?(name_writer = "#{name}=") - __send__ name_writer, value - else - instance_variable_set "@#{name}", value - end - end - end - - module GeneratorMethods - module Object - # Converts this object to a string (calling #to_s), converts - # it to a JSON string, and returns the result. This is a fallback, if no - # special method #to_json was defined for some object. - def to_json(generator_state) - if generator_state.strict? - raise GeneratorError, "#{self.class} not allowed in JSON" - else - to_s.to_json - end - end - end - - module Hash - # Returns a JSON string containing a JSON object, that is unparsed from - # this Hash instance. - # _state_ is a JSON::State object, that can also be used to configure the - # produced JSON string output further. - # _depth_ is used to find out nesting depth, to indent accordingly. - def to_json(state = nil, *) - state = State.from_state(state) - state.check_max_nesting - json_transform(state) - end - - private - - def json_shift(state) - state.object_nl.empty? or return '' - state.indent * state.depth - end - - def json_transform(state) - delim = ",#{state.object_nl}" - result = "{#{state.object_nl}" - depth = state.depth += 1 - first = true - indent = !state.object_nl.empty? - each { |key, value| - result << delim unless first - result << state.indent * depth if indent - result = "#{result}#{key.to_s.to_json(state)}#{state.space_before}:#{state.space}" - if state.strict? - raise GeneratorError, "#{value.class} not allowed in JSON" - elsif value.respond_to?(:to_json) - result << value.to_json(state) - else - result << %{"#{String(value)}"} - end - first = false - } - depth = state.depth -= 1 - unless first - result << state.object_nl - result << state.indent * depth if indent - end - result << '}' - result - end - end - - module Array - # Returns a JSON string containing a JSON array, that is unparsed from - # this Array instance. - # _state_ is a JSON::State object, that can also be used to configure the - # produced JSON string output further. - def to_json(state = nil, *) - state = State.from_state(state) - state.check_max_nesting - json_transform(state) - end - - private - - def json_transform(state) - delim = ',' - delim << state.array_nl - result = '[' - result << state.array_nl - depth = state.depth += 1 - first = true - indent = !state.array_nl.empty? - each { |value| - result << delim unless first - result << state.indent * depth if indent - if state.strict? - raise GeneratorError, "#{value.class} not allowed in JSON" - elsif value.respond_to?(:to_json) - result << value.to_json(state) - else - result << %{"#{String(value)}"} - end - first = false - } - depth = state.depth -= 1 - result << state.array_nl - result << state.indent * depth if indent - result << ']' - end - end - - module Integer - # Returns a JSON string representation for this Integer number. - def to_json(*) to_s end - end - - module Float - # Returns a JSON string representation for this Float number. - def to_json(state = nil, *) - state = State.from_state(state) - case - when infinite? - if state.allow_nan? - to_s - else - raise GeneratorError, "#{self} not allowed in JSON" - end - when nan? - if state.allow_nan? - to_s - else - raise GeneratorError, "#{self} not allowed in JSON" - end - else - to_s - end - end - end - - module String - # This string should be encoded with UTF-8 A call to this method - # returns a JSON string encoded with UTF16 big endian characters as - # \u????. - def to_json(state = nil, *args) - state = State.from_state(state) - if encoding == ::Encoding::UTF_8 - string = self - else - string = encode(::Encoding::UTF_8) - end - if state.ascii_only? - '"' << JSON.utf8_to_json_ascii(string, state.script_safe) << '"' - else - '"' << JSON.utf8_to_json(string, state.script_safe) << '"' - end - end - - # Module that holds the extending methods if, the String module is - # included. - module Extend - # Raw Strings are JSON Objects (the raw bytes are stored in an - # array for the key "raw"). The Ruby String can be created by this - # module method. - def json_create(o) - o['raw'].pack('C*') - end - end - - # Extends _modul_ with the String::Extend module. - def self.included(modul) - modul.extend Extend - end - - # This method creates a raw object hash, that can be nested into - # other data structures and will be unparsed as a raw string. This - # method should be used, if you want to convert raw strings to JSON - # instead of UTF-8 strings, e. g. binary data. - def to_json_raw_object - { - JSON.create_id => self.class.name, - 'raw' => self.unpack('C*'), - } - end - - # This method creates a JSON text from the result of - # a call to to_json_raw_object of this String. - def to_json_raw(*args) - to_json_raw_object.to_json(*args) - end - end - - module TrueClass - # Returns a JSON string for true: 'true'. - def to_json(*) 'true' end - end - - module FalseClass - # Returns a JSON string for false: 'false'. - def to_json(*) 'false' end - end - - module NilClass - # Returns a JSON string for nil: 'null'. - def to_json(*) 'null' end - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/pure/parser.rb b/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/pure/parser.rb deleted file mode 100644 index be48c607..00000000 --- a/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/pure/parser.rb +++ /dev/null @@ -1,337 +0,0 @@ -#frozen_string_literal: false -require 'strscan' - -module JSON - module Pure - # This class implements the JSON parser that is used to parse a JSON string - # into a Ruby data structure. - class Parser < StringScanner - STRING = /" ((?:[^\x0-\x1f"\\] | - # escaped special characters: - \\["\\\/bfnrt] | - \\u[0-9a-fA-F]{4} | - # match all but escaped special characters: - \\[\x20-\x21\x23-\x2e\x30-\x5b\x5d-\x61\x63-\x65\x67-\x6d\x6f-\x71\x73\x75-\xff])*) - "/nx - INTEGER = /(-?0|-?[1-9]\d*)/ - FLOAT = /(-? - (?:0|[1-9]\d*) - (?: - \.\d+(?i:e[+-]?\d+) | - \.\d+ | - (?i:e[+-]?\d+) - ) - )/x - NAN = /NaN/ - INFINITY = /Infinity/ - MINUS_INFINITY = /-Infinity/ - OBJECT_OPEN = /\{/ - OBJECT_CLOSE = /\}/ - ARRAY_OPEN = /\[/ - ARRAY_CLOSE = /\]/ - PAIR_DELIMITER = /:/ - COLLECTION_DELIMITER = /,/ - TRUE = /true/ - FALSE = /false/ - NULL = /null/ - IGNORE = %r( - (?: - //[^\n\r]*[\n\r]| # line comments - /\* # c-style comments - (?: - [^*/]| # normal chars - /[^*]| # slashes that do not start a nested comment - \*[^/]| # asterisks that do not end this comment - /(?=\*/) # single slash before this comment's end - )* - \*/ # the End of this comment - |[ \t\r\n]+ # whitespaces: space, horizontal tab, lf, cr - )+ - )mx - - UNPARSED = Object.new.freeze - - # Creates a new JSON::Pure::Parser instance for the string _source_. - # - # It will be configured by the _opts_ hash. _opts_ can have the following - # keys: - # * *max_nesting*: The maximum depth of nesting allowed in the parsed data - # structures. Disable depth checking with :max_nesting => false|nil|0, - # it defaults to 100. - # * *allow_nan*: If set to true, allow NaN, Infinity and -Infinity in - # defiance of RFC 7159 to be parsed by the Parser. This option defaults - # to false. - # * *freeze*: If set to true, all parsed objects will be frozen. Parsed - # string will be deduplicated if possible. - # * *symbolize_names*: If set to true, returns symbols for the names - # (keys) in a JSON object. Otherwise strings are returned, which is - # also the default. It's not possible to use this option in - # conjunction with the *create_additions* option. - # * *create_additions*: If set to true, the Parser creates - # additions when a matching class and create_id are found. This - # option defaults to false. - # * *object_class*: Defaults to Hash - # * *array_class*: Defaults to Array - # * *decimal_class*: Specifies which class to use instead of the default - # (Float) when parsing decimal numbers. This class must accept a single - # string argument in its constructor. - def initialize(source, opts = {}) - opts ||= {} - source = convert_encoding source - super source - if !opts.key?(:max_nesting) # defaults to 100 - @max_nesting = 100 - elsif opts[:max_nesting] - @max_nesting = opts[:max_nesting] - else - @max_nesting = 0 - end - @allow_nan = !!opts[:allow_nan] - @symbolize_names = !!opts[:symbolize_names] - @freeze = !!opts[:freeze] - if opts.key?(:create_additions) - @create_additions = !!opts[:create_additions] - else - @create_additions = false - end - @symbolize_names && @create_additions and raise ArgumentError, - 'options :symbolize_names and :create_additions cannot be used '\ - 'in conjunction' - @create_id = @create_additions ? JSON.create_id : nil - @object_class = opts[:object_class] || Hash - @array_class = opts[:array_class] || Array - @decimal_class = opts[:decimal_class] - @match_string = opts[:match_string] - end - - alias source string - - def reset - super - @current_nesting = 0 - end - - # Parses the current JSON string _source_ and returns the - # complete data structure as a result. - def parse - reset - obj = nil - while !eos? && skip(IGNORE) do end - if eos? - raise ParserError, "source is not valid JSON!" - else - obj = parse_value - UNPARSED.equal?(obj) and raise ParserError, - "source is not valid JSON!" - obj.freeze if @freeze - end - while !eos? && skip(IGNORE) do end - eos? or raise ParserError, "source is not valid JSON!" - obj - end - - private - - def convert_encoding(source) - if source.respond_to?(:to_str) - source = source.to_str - else - raise TypeError, - "#{source.inspect} is not like a string" - end - if source.encoding != ::Encoding::ASCII_8BIT - source = source.encode(::Encoding::UTF_8) - source.force_encoding(::Encoding::ASCII_8BIT) - end - source - end - - # Unescape characters in strings. - UNESCAPE_MAP = Hash.new { |h, k| h[k] = k.chr } - UNESCAPE_MAP.update({ - ?" => '"', - ?\\ => '\\', - ?/ => '/', - ?b => "\b", - ?f => "\f", - ?n => "\n", - ?r => "\r", - ?t => "\t", - ?u => nil, - }) - - EMPTY_8BIT_STRING = '' - if ::String.method_defined?(:encode) - EMPTY_8BIT_STRING.force_encoding Encoding::ASCII_8BIT - end - - STR_UMINUS = ''.respond_to?(:-@) - def parse_string - if scan(STRING) - return '' if self[1].empty? - string = self[1].gsub(%r((?:\\[\\bfnrt"/]|(?:\\u(?:[A-Fa-f\d]{4}))+|\\[\x20-\xff]))n) do |c| - if u = UNESCAPE_MAP[$&[1]] - u - else # \uXXXX - bytes = EMPTY_8BIT_STRING.dup - i = 0 - while c[6 * i] == ?\\ && c[6 * i + 1] == ?u - bytes << c[6 * i + 2, 2].to_i(16) << c[6 * i + 4, 2].to_i(16) - i += 1 - end - JSON.iconv('utf-8', 'utf-16be', bytes).force_encoding(::Encoding::ASCII_8BIT) - end - end - if string.respond_to?(:force_encoding) - string.force_encoding(::Encoding::UTF_8) - end - - if @freeze - if STR_UMINUS - string = -string - else - string.freeze - end - end - - if @create_additions and @match_string - for (regexp, klass) in @match_string - klass.json_creatable? or next - string =~ regexp and return klass.json_create(string) - end - end - string - else - UNPARSED - end - rescue => e - raise ParserError, "Caught #{e.class} at '#{peek(20)}': #{e}" - end - - def parse_value - case - when scan(FLOAT) - if @decimal_class then - if @decimal_class == BigDecimal then - BigDecimal(self[1]) - else - @decimal_class.new(self[1]) || Float(self[1]) - end - else - Float(self[1]) - end - when scan(INTEGER) - Integer(self[1]) - when scan(TRUE) - true - when scan(FALSE) - false - when scan(NULL) - nil - when !UNPARSED.equal?(string = parse_string) - string - when scan(ARRAY_OPEN) - @current_nesting += 1 - ary = parse_array - @current_nesting -= 1 - ary - when scan(OBJECT_OPEN) - @current_nesting += 1 - obj = parse_object - @current_nesting -= 1 - obj - when @allow_nan && scan(NAN) - NaN - when @allow_nan && scan(INFINITY) - Infinity - when @allow_nan && scan(MINUS_INFINITY) - MinusInfinity - else - UNPARSED - end - end - - def parse_array - raise NestingError, "nesting of #@current_nesting is too deep" if - @max_nesting.nonzero? && @current_nesting > @max_nesting - result = @array_class.new - delim = false - loop do - case - when eos? - raise ParserError, "unexpected end of string while parsing array" - when !UNPARSED.equal?(value = parse_value) - delim = false - result << value - skip(IGNORE) - if scan(COLLECTION_DELIMITER) - delim = true - elsif match?(ARRAY_CLOSE) - ; - else - raise ParserError, "expected ',' or ']' in array at '#{peek(20)}'!" - end - when scan(ARRAY_CLOSE) - if delim - raise ParserError, "expected next element in array at '#{peek(20)}'!" - end - break - when skip(IGNORE) - ; - else - raise ParserError, "unexpected token in array at '#{peek(20)}'!" - end - end - result - end - - def parse_object - raise NestingError, "nesting of #@current_nesting is too deep" if - @max_nesting.nonzero? && @current_nesting > @max_nesting - result = @object_class.new - delim = false - loop do - case - when eos? - raise ParserError, "unexpected end of string while parsing object" - when !UNPARSED.equal?(string = parse_string) - skip(IGNORE) - unless scan(PAIR_DELIMITER) - raise ParserError, "expected ':' in object at '#{peek(20)}'!" - end - skip(IGNORE) - unless UNPARSED.equal?(value = parse_value) - result[@symbolize_names ? string.to_sym : string] = value - delim = false - skip(IGNORE) - if scan(COLLECTION_DELIMITER) - delim = true - elsif match?(OBJECT_CLOSE) - ; - else - raise ParserError, "expected ',' or '}' in object at '#{peek(20)}'!" - end - else - raise ParserError, "expected value in object at '#{peek(20)}'!" - end - when scan(OBJECT_CLOSE) - if delim - raise ParserError, "expected next name, value pair in object at '#{peek(20)}'!" - end - if @create_additions and klassname = result[@create_id] - klass = JSON.deep_const_get klassname - break unless klass and klass.json_creatable? - result = klass.json_create(result) - end - break - when skip(IGNORE) - ; - else - raise ParserError, "unexpected token in object at '#{peek(20)}'!" - end - end - result - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/version.rb b/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/version.rb deleted file mode 100644 index b43ceecd..00000000 --- a/bundle/ruby/3.2.0/gems/json-2.7.1/lib/json/version.rb +++ /dev/null @@ -1,9 +0,0 @@ -# frozen_string_literal: false -module JSON - # JSON version - VERSION = '2.7.1' - VERSION_ARRAY = VERSION.split(/\./).map { |x| x.to_i } # :nodoc: - VERSION_MAJOR = VERSION_ARRAY[0] # :nodoc: - VERSION_MINOR = VERSION_ARRAY[1] # :nodoc: - VERSION_BUILD = VERSION_ARRAY[2] # :nodoc: -end diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/AUTHORS b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/AUTHORS deleted file mode 100644 index 05835967..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/AUTHORS +++ /dev/null @@ -1 +0,0 @@ -The author of kramdown is Thomas Leitner . diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/CONTRIBUTERS b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/CONTRIBUTERS deleted file mode 100644 index d7eba890..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/CONTRIBUTERS +++ /dev/null @@ -1,84 +0,0 @@ - Count Name -======= ==== - 964 Thomas Leitner - 18 Ashwin Maroli - 7 Christian Cornelssen - 6 Gioele Barabucci - 5 Gleb Mazovetskiy - 4 Ted Pak - 4 Shuanglei Tao - 4 Dan Allen - 4 Arne Brasseur - 3 Henning Perl - 3 gettalong - 3 Carsten Bormann - 3 Brandur - 3 Ben Armston - 3 Ashwin Maroli - 3 Alex Marandon - 2 Tom Thorogood - 2 Parker Moore - 2 Nathanael Jones - 2 Max Meyer - 2 Jo Hund - 2 Bran - 1 winniehell - 1 William - 1 Uwe Kubosch - 1 utenmiki - 1 Trevor Wennblom - 1 tomykaira - 1 tom93 - 1 Tobin Yehle - 1 timcraft - 1 Tim Blair - 1 Tim Besard - 1 Tim Bates - 1 Sun Yaozhu - 1 Stephen - 1 Stephen Crosby - 1 Stan Hu - 1 Simon Lydell - 1 Simon Coffey - 1 Shusaku NAKAZATO - 1 Sebastian Boehm - 1 scherr - 1 Postmodern - 1 Pete Michaud - 1 Noah Doersing - 1 myqlarson - 1 milo.simpson - 1 Michal Till - 1 Maxime Kjaer - 1 Matt Hickford - 1 Martyn Chamberlin - 1 Marek Tuchowski - 1 Marcus Stollsteimer - 1 Luca Barbato - 1 l3kn - 1 Kir Kolyshkin - 1 Jun Aruga - 1 Jonathan Hooper - 1 John Croisant - 1 Joe Fiorini - 1 Jens Kraemer - 1 Hirofumi Wakasugi - 1 Hector Correa - 1 Florian Klampfer - 1 Floreal Morandat florealm@gmail.com - 1 Fangyi Zhou - 1 Diego Galeota - 1 David Rodríguez - 1 Daniel Bair - 1 Damien Pollet - 1 Christopher Jefferson - 1 Cédric Boutillier - 1 Bob Lail - 1 Ashe Connor - 1 aschmitz <29508+aschmitz@users.noreply.github.com> - 1 Antoine Cotten - 1 Andrew - 1 Alpha Chen - 1 Alex Tomlins - 1 Alexey Vasiliev - 1 284km diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/COPYING b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/COPYING deleted file mode 100644 index 1c29282e..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/COPYING +++ /dev/null @@ -1,30 +0,0 @@ -kramdown - fast, pure-Ruby Markdown-superset converter -Copyright (C) 2009-2013 Thomas Leitner - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -Some test cases and the benchmark files are based on test cases from -the MDTest test suite: - - MDTest - Copyright (c) 2007 Michel Fortin - - diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/README.md b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/README.md deleted file mode 100644 index 981c0044..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/README.md +++ /dev/null @@ -1,77 +0,0 @@ -# kramdown - -## Readme first! - -kramdown was originally licensed under the GPL until the 1.0.0 release. However, due to the many -requests it is now released under the MIT license and therefore can easily be used in commercial -projects, too. - -However, if you use kramdown in a commercial setting, please consider **contributing back any -changes** for the benefit of the community and/or [**becoming a -sponsor**](https://github.com/sponsors/gettalong/) or [**a -patron**](https://www.patreon.com/gettalong) - thanks! - -Sponsors: - -* **GROSSWEBER** provides software - development consulting and training services. - - -## Introduction - -kramdown is a fast, pure Ruby Markdown superset converter, using a strict syntax definition and -supporting several common extensions. - -The syntax definition for the kramdown syntax can be found in **doc/syntax.page** (or online at -) and a quick reference is available in -**doc/quickref.page** or online at . - -The kramdown library is mainly written to support the kramdown-to-HTML conversion chain. However, -due to its flexibility (by creating an internal AST) it supports other input and output formats as -well. Here is a list of the supported formats: - -* input formats: kramdown (a Markdown superset), Markdown, GFM, HTML -* output formats: HTML, kramdown, LaTeX (and therefore PDF), PDF via Prawn - -All the documentation on the available input and output formats is available in the **doc/** -directory and online at . - -Starting from version 1.0.0 kramdown is using a versioning scheme with major, minor and patch parts -in the version number where the major number changes on backwards-incompatible changes, the minor -number on the introduction of new features and the patch number on everything else. - -For information about changes between versions, have a look at - or the commit history! - - -## Usage - -kramdown has a very simple API, so using kramdown is as easy as - -```ruby -require 'kramdown' - -Kramdown::Document.new(text).to_html -``` - -For detailed information have a look at the API documentation of the `Kramdown::Document` class. - -The full API documentation is available at , other sites with an -API documentation for kramdown probably don't provide the complete documentation! - -There are also some third-party libraries that extend the functionality of kramdown -- see the -kramdown Wiki at . - - -## Development - -Just clone the git repository as described in **doc/installation.page** and you are good to go. You -probably want to install `rake` so that you can use the provided rake tasks. - -If you want to run the tests, the development dependencies are needed as well as some additional -programs like `tidy` and `latex`. See the `.travis.yml` file for more information. - - -## License - -MIT - see the **COPYING** file. diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/VERSION b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/VERSION deleted file mode 100644 index 197c4d5c..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/VERSION +++ /dev/null @@ -1 +0,0 @@ -2.4.0 diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/bin/kramdown b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/bin/kramdown deleted file mode 100755 index e1128abe..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/bin/kramdown +++ /dev/null @@ -1,132 +0,0 @@ -#!/usr/bin/env ruby -# -*- coding: utf-8 -*- -# -#-- -# Copyright (C) 2009-2019 Thomas Leitner -# -# This file is part of kramdown which is licensed under the MIT. -#++ -# - -require 'optparse' -require 'rbconfig' -require 'yaml' -require 'kramdown' - -def add_kramdown_options(opts, parsed_options, banner: [], ignore: []) - banner_shown = false - defined_options = [] - Kramdown::Options.definitions.sort.each do |n, definition| - next if ignore.include?(n) - - unless banner_shown - opts.separator("") - banner.each {|part| opts.separator(part) } - opts.separator("") - banner_shown = true - end - - defined_options << n - no = n.to_s.tr('_', '-') - if definition.type == Kramdown::Options::Boolean - opts.on("--[no-]#{no}") {|v| parsed_options[n] = Kramdown::Options.parse(n, v) } - else - type = definition.type - type = String if type == Symbol || type == Object - opts.on("--#{no} ARG", type) {|v| parsed_options[n] = Kramdown::Options.parse(n, v) } - end - - definition.desc.split(/\n/).each do |line| - opts.separator opts.summary_indent + ' ' * 6 + line - end - opts.separator '' - end - defined_options -end - -config_file = nil -begin - config_dir = case RbConfig::CONFIG['host_os'] - when /bccwin|cygwin|djgpp|mingw|mswin|wince/i - File.expand_path((ENV['HOME'] || ENV['USERPROFILE'] || "~") + "/AppData/Local") - when /darwin|mac os/ - File.expand_path("~/Library/Preferences/") - else - File.expand_path(ENV['XDG_CONFIG_HOME'] || '~/.config') - end - config_file = File.join(config_dir, "kramdownrc") -rescue StandardError -end - -options = {} -format = ['html'] - -defined_options = [] -OptionParser.new do |opts| - opts.banner = "Usage: kramdown [options] [FILE FILE ...]" - opts.summary_indent = ' ' * 4 - - opts.separator "" - opts.separator "Command line options:" - opts.separator "" - - opts.on("-i", "--input ARG", "Specify the input format: kramdown (default), " \ - "html, or markdown") {|v| options[:input] = v } - opts.on("-o", "--output ARG", Array, "Specify one or more output formats separated by commas: " \ - "html (default),", "kramdown, latex, man or remove_html_tags") {|v| format = v } - opts.on("-x", "--extension EXT", Array, "Load one or more extensions (without the 'kramdown-' " \ - "prefix) separated", "by commas (e.g. parser-gfm,syntax-coderay)", - "Note: Use this option before other options!") do |exts| - exts.each do |ext| - begin - require "kramdown-#{ext}" - new_options = add_kramdown_options(opts, options, banner: ["#{ext} options:"], - ignore: defined_options) - defined_options.concat(new_options) - rescue LoadError - $stderr.puts "Couldn't load extension #{ext}, ignoring" - end - end - end - opts.separator "" - opts.on("--no-config-file", "Do not read any configuration file. Default behavior is to check " \ - "for a", "configuration file and read it if it exists.") { config_file = nil } - opts.on("--config-file FILE", "Specify the name of a configuration file with kramdown options " \ - "in YAML", "format, e.g. \"auto_id_prefix: ARG\" instead of \"--auto-id-prefix ARG\"", - "and \"auto_ids: false\" instead of \"--no-auto-ids\".", - "Default: #{config_file}") {|v| config_file = v } - opts.separator "" - opts.on("-v", "--version", "Show the version of kramdown") do - puts Kramdown::VERSION - exit - end - opts.on("-h", "--help", "Show the help") do - puts opts.summarize('', 5, 72) - exit - end - - new_options = add_kramdown_options(opts, options, banner: ["kramdown options:"]) - defined_options.concat(new_options) -end.parse! - -begin - if config_file && File.exist?(config_file) - config_file_options = YAML.safe_load(File.read(config_file), [Symbol]) - case config_file_options - when nil # empty configuration file except perhaps YAML header and comments - # Nothing to do - when Hash - options = config_file_options.merge(options) - else - raise Kramdown::Error, "No YAML map in configuration file \"#{config_file}\"" - end - end - doc = Kramdown::Document.new(ARGF.read, options) - result = '' - format.each {|f| result = doc.send("to_#{f}") } - puts result - doc.warnings.each {|warn| $stderr.puts "Warning: #{warn}" } -rescue Kramdown::Error => e - $stderr.puts "Error: #{e.message}" - exit(1) -end diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/data/kramdown/document.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/data/kramdown/document.html deleted file mode 100644 index 731d0ea9..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/data/kramdown/document.html +++ /dev/null @@ -1,22 +0,0 @@ - - - - <% if @converter.root.options[:encoding] %> - - <% end %> -<% -extend ::Kramdown::Utils::Html -title = '' -h = @converter.root.children.find {|c| c.type == :header} -if h - collector = lambda {|c| c.children.collect {|cc| cc.type == :text ? escape_html(cc.value, :text) : collector.call(cc)}.join('')} - title = collector.call(h) -end -%> - <%= title %> - - - - <%= @body %> - - diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/data/kramdown/document.latex b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/data/kramdown/document.latex deleted file mode 100644 index acdf346a..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/data/kramdown/document.latex +++ /dev/null @@ -1,50 +0,0 @@ -<% -encmap = { - 'UTF-8' => 'utf8x', - 'US-ASCII' => 'ascii', - 'ISO-8859-1' => 'latin1', - 'ISO-8859-2' => 'latin2', - 'ISO-8859-3' => 'latin3', - 'ISO-8859-4' => 'latin4', - 'ISO-8859-5' => 'latin5', - 'ISO-8859-9' => 'latin9', - 'ISO-8859-10' => 'latin10', - 'CP850' => 'cp850', - 'CP852' => 'cp852', - 'CP858' => 'cp858', - 'CP437' => 'cp437', - 'CP865' => 'cp865', - 'CP1250' => 'cp120', - 'CP1252' => 'cp1252', - 'CP1257' => 'cp1257' -} -%> -\documentclass{scrartcl} -<% if RUBY_VERSION >= '1.9' %> -\usepackage[<%= encmap[@body.encoding.name] %>]{inputenc} -<% else %> -\usepackage[mathletters]{ucs} -\usepackage[utf8x]{inputenc} -<% end %> -\usepackage[T1]{fontenc} -\usepackage{listings} -<% @converter.data[:packages].each {|pkg| %>\usepackage{<%= pkg %>} -<% } %> -\usepackage{hyperref} - -<% if @converter.data[:packages].include?('fancyvrb') %> -\VerbatimFootnotes -<% end %> - -<% if @converter.data[:packages].include?('acronym') %> -<% @converter.root.options[:abbrev_defs].each_pair do |k,v| %>\acrodef{<%= @converter.normalize_abbreviation_key(k) %>}[<%= k %>]{<%= @converter.escape(v) %>} -<% end %> -<% end %> - -\setcounter{footnote}{<%= @converter.options[:footnote_nr] - 1 %>} - -\hypersetup{colorlinks=true,urlcolor=blue} - -\begin{document} -<%= @body %> -\end{document} diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown.rb b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown.rb deleted file mode 100644 index 3700b9de..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown.rb +++ /dev/null @@ -1,10 +0,0 @@ -# -*- coding: utf-8; frozen_string_literal: true -*- -# -#-- -# Copyright (C) 2009-2019 Thomas Leitner -# -# This file is part of kramdown which is licensed under the MIT. -#++ -# - -require 'kramdown/document' diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/converter.rb b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/converter.rb deleted file mode 100644 index 0055a144..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/converter.rb +++ /dev/null @@ -1,68 +0,0 @@ -# -*- coding: utf-8; frozen_string_literal: true -*- -# -#-- -# Copyright (C) 2009-2019 Thomas Leitner -# -# This file is part of kramdown which is licensed under the MIT. -#++ -# - -require 'kramdown/utils' - -module Kramdown - - # This module contains all available converters, i.e. classes that take a root Element and convert - # it to a specific output format. The result is normally a string. For example, the - # Converter::Html module converts an element tree into valid HTML. - # - # Converters use the Base class for common functionality (like applying a template to the output) - # \- see its API documentation for how to create a custom converter class. - module Converter - - autoload :Base, 'kramdown/converter/base' - autoload :Html, 'kramdown/converter/html' - autoload :Latex, 'kramdown/converter/latex' - autoload :Kramdown, 'kramdown/converter/kramdown' - autoload :Toc, 'kramdown/converter/toc' - autoload :RemoveHtmlTags, 'kramdown/converter/remove_html_tags' - autoload :HashAST, 'kramdown/converter/hash_ast' - autoload :HashAst, 'kramdown/converter/hash_ast' - autoload :Man, 'kramdown/converter/man' - - extend ::Kramdown::Utils::Configurable - - configurable(:syntax_highlighter) - - ['Minted', "Rouge"].each do |klass_name| - kn_down = klass_name.downcase.intern - add_syntax_highlighter(kn_down) do |converter, text, lang, type, opts| - require "kramdown/converter/syntax_highlighter/#{kn_down}" - klass = ::Kramdown::Utils.deep_const_get("::Kramdown::Converter::SyntaxHighlighter::#{klass_name}") - if !klass.const_defined?(:AVAILABLE) || klass::AVAILABLE - add_syntax_highlighter(kn_down, klass) - else - add_syntax_highlighter(kn_down) { nil } - end - syntax_highlighter(kn_down).call(converter, text, lang, type, opts) - end - end - - configurable(:math_engine) - - ["Mathjax"].each do |klass_name| - kn_down = klass_name.downcase.intern - add_math_engine(kn_down) do |converter, el, opts| - require "kramdown/converter/math_engine/#{kn_down}" - klass = ::Kramdown::Utils.deep_const_get("::Kramdown::Converter::MathEngine::#{klass_name}") - if !klass.const_defined?(:AVAILABLE) || klass::AVAILABLE - add_math_engine(kn_down, klass) - else - add_math_engine(kn_down) { nil } - end - math_engine(kn_down).call(converter, el, opts) - end - end - - end - -end diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/converter/base.rb b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/converter/base.rb deleted file mode 100644 index 66a85d64..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/converter/base.rb +++ /dev/null @@ -1,257 +0,0 @@ -# -*- coding: utf-8; frozen_string_literal: true -*- -# -#-- -# Copyright (C) 2009-2019 Thomas Leitner -# -# This file is part of kramdown which is licensed under the MIT. -#++ -# - -require 'erb' -require 'kramdown/utils' -require 'kramdown/document' - -module Kramdown - - module Converter - - # == \Base class for converters - # - # This class serves as base class for all converters. It provides methods that can/should be - # used by all converters (like #generate_id) as well as common functionality that is - # automatically applied to the result (for example, embedding the output into a template). - # - # A converter object is used as a throw-away object, i.e. it is only used for storing the needed - # state information during conversion. Therefore one can't instantiate a converter object - # directly but only use the Base::convert method. - # - # == Implementing a converter - # - # Implementing a new converter is rather easy: just derive a new class from this class and put - # it in the Kramdown::Converter module (the latter is only needed if auto-detection should work - # properly). Then you need to implement the #convert method which has to contain the conversion - # code for converting an element and has to return the conversion result. - # - # The actual transformation of the document tree can be done in any way. However, writing one - # method per element type is a straight forward way to do it - this is how the Html and Latex - # converters do the transformation. - # - # Have a look at the Base::convert method for additional information! - class Base - - # Can be used by a converter for storing arbitrary information during the conversion process. - attr_reader :data - - # The hash with the conversion options. - attr_reader :options - - # The root element that is converted. - attr_reader :root - - # The warnings array. - attr_reader :warnings - - # Initialize the converter with the given +root+ element and +options+ hash. - def initialize(root, options) - @options = options - @root = root - @data = {} - @warnings = [] - end - private_class_method(:new, :allocate) - - # Returns whether the template should be applied before the conversion of the tree. - # - # Defaults to false. - def apply_template_before? - false - end - - # Returns whether the template should be applied after the conversion of the tree. - # - # Defaults to true. - def apply_template_after? - true - end - - # Convert the element tree +tree+ and return the resulting conversion object (normally a - # string) and an array with warning messages. The parameter +options+ specifies the conversion - # options that should be used. - # - # Initializes a new instance of the calling class and then calls the #convert method with - # +tree+ as parameter. - # - # If the +template+ option is specified and non-empty, the template is evaluate with ERB - # before and/or after the tree conversion depending on the result of #apply_template_before? - # and #apply_template_after?. If the template is evaluated before, an empty string is used for - # the body; if evaluated after, the result is used as body. See ::apply_template. - # - # The template resolution is done in the following way (for the converter ConverterName): - # - # 1. Look in the current working directory for the template. - # - # 2. Append +.converter_name+ (e.g. +.html+) to the template name and look for the resulting - # file in the current working directory (the form +.convertername+ is deprecated). - # - # 3. Append +.converter_name+ to the template name and look for it in the kramdown data - # directory (the form +.convertername+ is deprecated). - # - # 4. Check if the template name starts with 'string://' and if so, strip this prefix away and - # use the rest as template. - def self.convert(tree, options = {}) - converter = new(tree, ::Kramdown::Options.merge(options.merge(tree.options[:options] || {}))) - - if !converter.options[:template].empty? && converter.apply_template_before? - apply_template(converter, '') - end - result = converter.convert(tree) - if result.respond_to?(:encode!) && result.encoding != Encoding::BINARY - result.encode!(tree.options[:encoding] || - (raise ::Kramdown::Error, "Missing encoding option on root element")) - end - if !converter.options[:template].empty? && converter.apply_template_after? - result = apply_template(converter, result) - end - - [result, converter.warnings] - end - - # Convert the element +el+ and return the resulting object. - # - # This is the only method that has to be implemented by sub-classes! - def convert(_el) - raise NotImplementedError - end - - # Apply the +template+ using +body+ as the body string. - # - # The template is evaluated using ERB and the body is available in the @body instance variable - # and the converter object in the @converter instance variable. - def self.apply_template(converter, body) # :nodoc: - erb = ERB.new(get_template(converter.options[:template])) - obj = Object.new - obj.instance_variable_set(:@converter, converter) - obj.instance_variable_set(:@body, body) - erb.result(obj.instance_eval { binding }) - end - - # Return the template specified by +template+. - def self.get_template(template) # :nodoc: - format_ext = '.' + ::Kramdown::Utils.snake_case(self.name.split(/::/).last) - shipped = File.join(::Kramdown.data_dir, template + format_ext) - if File.exist?(template) - File.read(template) - elsif File.exist?(template + format_ext) - File.read(template + format_ext) - elsif File.exist?(shipped) - File.read(shipped) - elsif template.start_with?('string://') - template.sub(/\Astring:\/\//, '') - else - raise "The specified template file #{template} does not exist" - end - end - - # Add the given warning +text+ to the warning array. - def warning(text) - @warnings << text - end - - # Return +true+ if the header element +el+ should be used for the table of contents (as - # specified by the +toc_levels+ option). - def in_toc?(el) - @options[:toc_levels].include?(el.options[:level]) && (el.attr['class'] || '') !~ /\bno_toc\b/ - end - - # Return the output header level given a level. - # - # Uses the +header_offset+ option for adjusting the header level. - def output_header_level(level) - [[level + @options[:header_offset], 6].min, 1].max - end - - # Extract the code block/span language from the attributes. - def extract_code_language(attr) - if attr['class'] && attr['class'] =~ /\blanguage-\S+/ - attr['class'].scan(/\blanguage-(\S+)/).first.first - end - end - - # See #extract_code_language - # - # *Warning*: This version will modify the given attributes if a language is present. - def extract_code_language!(attr) - lang = extract_code_language(attr) - attr['class'] = attr['class'].sub(/\blanguage-\S+/, '').strip if lang - attr.delete('class') if lang && attr['class'].empty? - lang - end - - # Highlight the given +text+ in the language +lang+ with the syntax highlighter configured - # through the option 'syntax_highlighter'. - def highlight_code(text, lang, type, opts = {}) - return nil unless @options[:syntax_highlighter] - - highlighter = ::Kramdown::Converter.syntax_highlighter(@options[:syntax_highlighter]) - if highlighter - highlighter.call(self, text, lang, type, opts) - else - warning("The configured syntax highlighter #{@options[:syntax_highlighter]} is not available.") - nil - end - end - - # Format the given math element with the math engine configured through the option - # 'math_engine'. - def format_math(el, opts = {}) - return nil unless @options[:math_engine] - - engine = ::Kramdown::Converter.math_engine(@options[:math_engine]) - if engine - engine.call(self, el, opts) - else - warning("The configured math engine #{@options[:math_engine]} is not available.") - nil - end - end - - # Generate an unique alpha-numeric ID from the the string +str+ for use as a header ID. - # - # Uses the option +auto_id_prefix+: the value of this option is prepended to every generated - # ID. - def generate_id(str) - str = ::Kramdown::Utils::Unidecoder.decode(str) if @options[:transliterated_header_ids] - gen_id = basic_generate_id(str) - gen_id = 'section' if gen_id.empty? - @used_ids ||= {} - if @used_ids.key?(gen_id) - gen_id += "-#{@used_ids[gen_id] += 1}" - else - @used_ids[gen_id] = 0 - end - @options[:auto_id_prefix] + gen_id - end - - # The basic version of the ID generator, without any special provisions for empty or unique - # IDs. - def basic_generate_id(str) - gen_id = str.gsub(/^[^a-zA-Z]+/, '') - gen_id.tr!('^a-zA-Z0-9 -', '') - gen_id.tr!(' ', '-') - gen_id.downcase! - gen_id - end - - SMART_QUOTE_INDICES = {lsquo: 0, rsquo: 1, ldquo: 2, rdquo: 3} # :nodoc: - - # Return the entity that represents the given smart_quote element. - def smart_quote_entity(el) - res = @options[:smart_quotes][SMART_QUOTE_INDICES[el.value]] - ::Kramdown::Utils::Entities.entity(res) - end - - end - - end - -end diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/converter/hash_ast.rb b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/converter/hash_ast.rb deleted file mode 100644 index 95714d43..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/converter/hash_ast.rb +++ /dev/null @@ -1,38 +0,0 @@ -# -*- coding: utf-8; frozen_string_literal: true -*- -# -#-- -# Copyright (C) 2009-2019 Thomas Leitner -# -# This file is part of kramdown which is licensed under the MIT. -#++ -# - -require 'kramdown/parser' -require 'kramdown/converter' -require 'kramdown/utils' - -module Kramdown - - module Converter - - # Converts a Kramdown::Document to a nested hash for further processing or debug output. - class HashAST < Base - - def convert(el) - hash = {type: el.type} - hash[:attr] = el.attr unless el.attr.empty? - hash[:value] = el.value unless el.value.nil? - hash[:options] = el.options unless el.options.empty? - unless el.children.empty? - hash[:children] = [] - el.children.each {|child| hash[:children] << convert(child) } - end - hash - end - - end - - HashAst = HashAST - - end -end diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/converter/html.rb b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/converter/html.rb deleted file mode 100644 index ba233dce..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/converter/html.rb +++ /dev/null @@ -1,537 +0,0 @@ -# -*- coding: utf-8; frozen_string_literal: true -*- -# -#-- -# Copyright (C) 2009-2019 Thomas Leitner -# -# This file is part of kramdown which is licensed under the MIT. -#++ -# - -require 'kramdown/parser' -require 'kramdown/converter' -require 'kramdown/utils' - -module Kramdown - - module Converter - - # Converts a Kramdown::Document to HTML. - # - # You can customize the HTML converter by sub-classing it and overriding the +convert_NAME+ - # methods. Each such method takes the following parameters: - # - # [+el+] The element of type +NAME+ to be converted. - # - # [+indent+] A number representing the current amount of spaces for indent (only used for - # block-level elements). - # - # The return value of such a method has to be a string containing the element +el+ formatted as - # HTML element. - class Html < Base - - include ::Kramdown::Utils::Html - include ::Kramdown::Parser::Html::Constants - - # The amount of indentation used when nesting HTML tags. - attr_accessor :indent - - # Initialize the HTML converter with the given Kramdown document +doc+. - def initialize(root, options) - super - @footnote_counter = @footnote_start = @options[:footnote_nr] - @footnotes = [] - @footnotes_by_name = {} - @footnote_location = nil - @toc = [] - @toc_code = nil - @indent = 2 - @stack = [] - - # stash string representation of symbol to avoid allocations from multiple interpolations. - @highlighter_class = " highlighter-#{options[:syntax_highlighter]}" - @dispatcher = Hash.new {|h, k| h[k] = :"convert_#{k}" } - end - - # Dispatch the conversion of the element +el+ to a +convert_TYPE+ method using the +type+ of - # the element. - def convert(el, indent = -@indent) - send(@dispatcher[el.type], el, indent) - end - - # Return the converted content of the children of +el+ as a string. The parameter +indent+ has - # to be the amount of indentation used for the element +el+. - # - # Pushes +el+ onto the @stack before converting the child elements and pops it from the stack - # afterwards. - def inner(el, indent) - result = +'' - indent += @indent - @stack.push(el) - el.children.each do |inner_el| - result << send(@dispatcher[inner_el.type], inner_el, indent) - end - @stack.pop - result - end - - def convert_blank(_el, _indent) - "\n" - end - - def convert_text(el, _indent) - escaped = escape_html(el.value, :text) - @options[:remove_line_breaks_for_cjk] ? fix_cjk_line_break(escaped) : escaped - end - - def convert_p(el, indent) - if el.options[:transparent] - inner(el, indent) - elsif el.children.size == 1 && el.children.first.type == :img && - el.children.first.options[:ial]&.[](:refs)&.include?('standalone') - convert_standalone_image(el, indent) - else - format_as_block_html("p", el.attr, inner(el, indent), indent) - end - end - - # Helper method used by +convert_p+ to convert a paragraph that only contains a single :img - # element. - def convert_standalone_image(el, indent) - figure_attr = el.attr.dup - image_attr = el.children.first.attr.dup - - figure_attr['class'] = image_attr.delete('class') if image_attr.key?('class') and not figure_attr.key?('class') - figure_attr['id'] = image_attr.delete('id') if image_attr.key?('id') and not figure_attr.key?('id') - - body = "#{' ' * (indent + @indent)}\n" \ - "#{' ' * (indent + @indent)}

    #{image_attr['alt']}
    \n" - format_as_indented_block_html("figure", figure_attr, body, indent) - end - - def convert_codeblock(el, indent) - attr = el.attr.dup - lang = extract_code_language!(attr) - hl_opts = {} - highlighted_code = highlight_code(el.value, el.options[:lang] || lang, :block, hl_opts) - - if highlighted_code - add_syntax_highlighter_to_class_attr(attr, lang || hl_opts[:default_lang]) - "#{' ' * indent}#{highlighted_code}#{' ' * indent}\n" - else - result = escape_html(el.value) - result.chomp! - if el.attr['class'].to_s =~ /\bshow-whitespaces\b/ - result.gsub!(/(?:(^[ \t]+)|([ \t]+$)|([ \t]+))/) do |m| - suffix = ($1 ? '-l' : ($2 ? '-r' : '')) - m.scan(/./).map do |c| - case c - when "\t" then "\t" - when " " then "" - end - end.join('') - end - end - code_attr = {} - code_attr['class'] = "language-#{lang}" if lang - "#{' ' * indent}" \ - "#{result}\n\n" - end - end - - def convert_blockquote(el, indent) - format_as_indented_block_html("blockquote", el.attr, inner(el, indent), indent) - end - - def convert_header(el, indent) - attr = el.attr.dup - if @options[:auto_ids] && !attr['id'] - attr['id'] = generate_id(el.options[:raw_text]) - end - @toc << [el.options[:level], attr['id'], el.children] if attr['id'] && in_toc?(el) - level = output_header_level(el.options[:level]) - format_as_block_html("h#{level}", attr, inner(el, indent), indent) - end - - def convert_hr(el, indent) - "#{' ' * indent}\n" - end - - ZERO_TO_ONETWENTYEIGHT = (0..128).to_a.freeze - private_constant :ZERO_TO_ONETWENTYEIGHT - - def convert_ul(el, indent) - if !@toc_code && el.options.dig(:ial, :refs)&.include?('toc') - @toc_code = [el.type, el.attr, ZERO_TO_ONETWENTYEIGHT.map { rand(36).to_s(36) }.join] - @toc_code.last - elsif !@footnote_location && el.options.dig(:ial, :refs)&.include?('footnotes') - @footnote_location = ZERO_TO_ONETWENTYEIGHT.map { rand(36).to_s(36) }.join - else - format_as_indented_block_html(el.type, el.attr, inner(el, indent), indent) - end - end - alias convert_ol convert_ul - - def convert_dl(el, indent) - format_as_indented_block_html("dl", el.attr, inner(el, indent), indent) - end - - def convert_li(el, indent) - output = ' ' * indent << "<#{el.type}" << html_attributes(el.attr) << ">" - res = inner(el, indent) - if el.children.empty? || (el.children.first.type == :p && el.children.first.options[:transparent]) - output << res << (res =~ /\n\Z/ ? ' ' * indent : '') - else - output << "\n" << res << ' ' * indent - end - output << "\n" - end - alias convert_dd convert_li - - def convert_dt(el, indent) - attr = el.attr.dup - @stack.last.options[:ial][:refs].each do |ref| - if ref =~ /\Aauto_ids(?:-([\w-]+))?/ - attr['id'] = "#{$1}#{basic_generate_id(el.options[:raw_text])}".lstrip - break - end - end if !attr['id'] && @stack.last.options[:ial] && @stack.last.options[:ial][:refs] - format_as_block_html("dt", attr, inner(el, indent), indent) - end - - def convert_html_element(el, indent) - res = inner(el, indent) - if el.options[:category] == :span - "<#{el.value}#{html_attributes(el.attr)}" + \ - (res.empty? && HTML_ELEMENTS_WITHOUT_BODY.include?(el.value) ? " />" : ">#{res}") - else - output = +'' - if @stack.last.type != :html_element || @stack.last.options[:content_model] != :raw - output << ' ' * indent - end - output << "<#{el.value}#{html_attributes(el.attr)}" - if el.options[:is_closed] && el.options[:content_model] == :raw - output << " />" - elsif !res.empty? && el.options[:content_model] != :block - output << ">#{res}" - elsif !res.empty? - output << ">\n#{res.chomp}\n" << ' ' * indent << "" - elsif HTML_ELEMENTS_WITHOUT_BODY.include?(el.value) - output << " />" - else - output << ">" - end - output << "\n" if @stack.last.type != :html_element || @stack.last.options[:content_model] != :raw - output - end - end - - def convert_xml_comment(el, indent) - if el.options[:category] == :block && - (@stack.last.type != :html_element || @stack.last.options[:content_model] != :raw) - ' ' * indent << el.value << "\n" - else - el.value - end - end - alias convert_xml_pi convert_xml_comment - - def convert_table(el, indent) - format_as_indented_block_html(el.type, el.attr, inner(el, indent), indent) - end - alias convert_thead convert_table - alias convert_tbody convert_table - alias convert_tfoot convert_table - alias convert_tr convert_table - - ENTITY_NBSP = ::Kramdown::Utils::Entities.entity('nbsp') # :nodoc: - - def convert_td(el, indent) - res = inner(el, indent) - type = (@stack[-2].type == :thead ? :th : :td) - attr = el.attr - alignment = @stack[-3].options[:alignment][@stack.last.children.index(el)] - if alignment != :default - attr = el.attr.dup - attr['style'] = (attr.key?('style') ? "#{attr['style']}; " : '') + "text-align: #{alignment}" - end - format_as_block_html(type, attr, res.empty? ? entity_to_str(ENTITY_NBSP) : res, indent) - end - - def convert_comment(el, indent) - if el.options[:category] == :block - "#{' ' * indent}\n" - else - "" - end - end - - def convert_br(_el, _indent) - "
    " - end - - def convert_a(el, indent) - format_as_span_html("a", el.attr, inner(el, indent)) - end - - def convert_img(el, _indent) - "" - end - - def convert_codespan(el, _indent) - attr = el.attr.dup - lang = extract_code_language(attr) - hl_opts = {} - result = highlight_code(el.value, lang, :span, hl_opts) - if result - add_syntax_highlighter_to_class_attr(attr, lang || hl_opts[:default_lang]) - else - result = escape_html(el.value) - end - - format_as_span_html('code', attr, result) - end - - def convert_footnote(el, _indent) - repeat = '' - name = @options[:footnote_prefix] + el.options[:name] - if (footnote = @footnotes_by_name[name]) - number = footnote[2] - repeat = ":#{footnote[3] += 1}" - else - number = @footnote_counter - @footnote_counter += 1 - @footnotes << [name, el.value, number, 0] - @footnotes_by_name[name] = @footnotes.last - end - "" \ - "" \ - "#{number}" - end - - def convert_raw(el, _indent) - if !el.options[:type] || el.options[:type].empty? || el.options[:type].include?('html') - el.value + (el.options[:category] == :block ? "\n" : '') - else - '' - end - end - - def convert_em(el, indent) - format_as_span_html(el.type, el.attr, inner(el, indent)) - end - alias convert_strong convert_em - - def convert_entity(el, _indent) - entity_to_str(el.value, el.options[:original]) - end - - TYPOGRAPHIC_SYMS = { - mdash: [::Kramdown::Utils::Entities.entity('mdash')], - ndash: [::Kramdown::Utils::Entities.entity('ndash')], - hellip: [::Kramdown::Utils::Entities.entity('hellip')], - laquo_space: [::Kramdown::Utils::Entities.entity('laquo'), - ::Kramdown::Utils::Entities.entity('nbsp')], - raquo_space: [::Kramdown::Utils::Entities.entity('nbsp'), - ::Kramdown::Utils::Entities.entity('raquo')], - laquo: [::Kramdown::Utils::Entities.entity('laquo')], - raquo: [::Kramdown::Utils::Entities.entity('raquo')], - } # :nodoc: - def convert_typographic_sym(el, _indent) - if (result = @options[:typographic_symbols][el.value]) - escape_html(result, :text) - else - TYPOGRAPHIC_SYMS[el.value].map {|e| entity_to_str(e) }.join('') - end - end - - def convert_smart_quote(el, _indent) - entity_to_str(smart_quote_entity(el)) - end - - def convert_math(el, indent) - if (result = format_math(el, indent: indent)) - result - else - attr = el.attr.dup - attr['class'] = "#{attr['class']} kdmath".lstrip - if el.options[:category] == :block - format_as_block_html('div', attr, "$$\n#{el.value}\n$$", indent) - else - format_as_span_html('span', attr, "$#{el.value}$") - end - end - end - - def convert_abbreviation(el, _indent) - title = @root.options[:abbrev_defs][el.value] - attr = @root.options[:abbrev_attr][el.value].dup - attr['title'] = title unless title.empty? - format_as_span_html("abbr", attr, el.value) - end - - def convert_root(el, indent) - result = inner(el, indent) - if @footnote_location - result.sub!(/#{@footnote_location}/, footnote_content.gsub(/\\/, "\\\\\\\\")) - else - result << footnote_content - end - if @toc_code - toc_tree = generate_toc_tree(@toc, @toc_code[0], @toc_code[1] || {}) - text = if !toc_tree.children.empty? - convert(toc_tree, 0) - else - '' - end - result.sub!(/#{@toc_code.last}/, text.gsub(/\\/, "\\\\\\\\")) - end - result - end - - # Format the given element as span HTML. - def format_as_span_html(name, attr, body) - "<#{name}#{html_attributes(attr)}>#{body}" - end - - # Format the given element as block HTML. - def format_as_block_html(name, attr, body, indent) - "#{' ' * indent}<#{name}#{html_attributes(attr)}>#{body}\n" - end - - # Format the given element as block HTML with a newline after the start tag and indentation - # before the end tag. - def format_as_indented_block_html(name, attr, body, indent) - "#{' ' * indent}<#{name}#{html_attributes(attr)}>\n#{body}#{' ' * indent}\n" - end - - # Add the syntax highlighter name to the 'class' attribute of the given attribute hash. And - # overwrites or add a "language-LANG" part using the +lang+ parameter if +lang+ is not nil. - def add_syntax_highlighter_to_class_attr(attr, lang = nil) - (attr['class'] = (attr['class'] || '') + @highlighter_class).lstrip! - attr['class'].sub!(/\blanguage-\S+|(^)/) { "language-#{lang}#{$1 ? ' ' : ''}" } if lang - end - - # Generate and return an element tree for the table of contents. - def generate_toc_tree(toc, type, attr) - sections = Element.new(type, nil, attr.dup) - sections.attr['id'] ||= 'markdown-toc' - stack = [] - toc.each do |level, id, children| - li = Element.new(:li, nil, nil, level: level) - li.children << Element.new(:p, nil, nil, transparent: true) - a = Element.new(:a, nil) - a.attr['href'] = "##{id}" - a.attr['id'] = "#{sections.attr['id']}-#{id}" - a.children.concat(fix_for_toc_entry(Marshal.load(Marshal.dump(children)))) - li.children.last.children << a - li.children << Element.new(type) - - success = false - until success - if stack.empty? - sections.children << li - stack << li - success = true - elsif stack.last.options[:level] < li.options[:level] - stack.last.children.last.children << li - stack << li - success = true - else - item = stack.pop - item.children.pop if item.children.last.children.empty? - end - end - end - until stack.empty? - item = stack.pop - item.children.pop if item.children.last.children.empty? - end - sections - end - - # Fixes the elements for use in a TOC entry. - def fix_for_toc_entry(elements) - remove_footnotes(elements) - unwrap_links(elements) - elements - end - - # Remove all link elements by unwrapping them. - def unwrap_links(elements) - elements.map! do |c| - unwrap_links(c.children) - c.type == :a ? c.children : c - end.flatten! - end - - # Remove all footnotes from the given elements. - def remove_footnotes(elements) - elements.delete_if do |c| - remove_footnotes(c.children) - c.type == :footnote - end - end - - # Obfuscate the +text+ by using HTML entities. - def obfuscate(text) - result = +'' - text.each_byte do |b| - result << (b > 128 ? b.chr : sprintf("&#%03d;", b)) - end - result.force_encoding(text.encoding) - result - end - - FOOTNOTE_BACKLINK_FMT = "%s%s" - - # Return an HTML ordered list with the footnote content for the used footnotes. - def footnote_content - ol = Element.new(:ol) - ol.attr['start'] = @footnote_start if @footnote_start != 1 - i = 0 - backlink_text = escape_html(@options[:footnote_backlink], :text) - while i < @footnotes.length - name, data, _, repeat = *@footnotes[i] - li = Element.new(:li, nil, 'id' => "fn:#{name}", 'role' => 'doc-endnote') - li.children = Marshal.load(Marshal.dump(data.children)) - - para = nil - if li.children.last.type == :p || @options[:footnote_backlink_inline] - parent = li - while !parent.children.empty? && ![:p, :header].include?(parent.children.last.type) - parent = parent.children.last - end - para = parent.children.last - insert_space = true - end - - unless para - li.children << (para = Element.new(:p)) - insert_space = false - end - - unless @options[:footnote_backlink].empty? - nbsp = entity_to_str(ENTITY_NBSP) - value = sprintf(FOOTNOTE_BACKLINK_FMT, (insert_space ? nbsp : ''), name, backlink_text) - para.children << Element.new(:raw, value) - (1..repeat).each do |index| - value = sprintf(FOOTNOTE_BACKLINK_FMT, nbsp, "#{name}:#{index}", - "#{backlink_text}#{index + 1}") - para.children << Element.new(:raw, value) - end - end - - ol.children << Element.new(:raw, convert(li, 4)) - i += 1 - end - if ol.children.empty? - '' - else - format_as_indented_block_html('div', {class: "footnotes", role: "doc-endnotes"}, convert(ol, 2), 0) - end - end - - end - - end -end diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/converter/kramdown.rb b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/converter/kramdown.rb deleted file mode 100644 index 32e0c2d2..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/converter/kramdown.rb +++ /dev/null @@ -1,453 +0,0 @@ -# -*- coding: utf-8; frozen_string_literal: true -*- -# -#-- -# Copyright (C) 2009-2019 Thomas Leitner -# -# This file is part of kramdown which is licensed under the MIT. -#++ -# - -require 'kramdown/converter' -require 'kramdown/utils' - -module Kramdown - - module Converter - - # Converts an element tree to the kramdown format. - class Kramdown < Base - - # :stopdoc: - - include ::Kramdown::Utils::Html - - def initialize(root, options) - super - @linkrefs = [] - @footnotes = [] - @abbrevs = [] - @stack = [] - @list_indent = @options[:list_indent] - @list_spacing = ' ' * (@list_indent - 2) - end - - def convert(el, opts = {indent: 0}) - res = send("convert_#{el.type}", el, opts) - res = res.dup if res.frozen? - if ![:html_element, :li, :dt, :dd, :td].include?(el.type) && (ial = ial_for_element(el)) - res << ial - res << "\n\n" if el.block? - elsif [:ul, :dl, :ol, :codeblock].include?(el.type) && opts[:next] && - ([el.type, :codeblock].include?(opts[:next].type) || - (opts[:next].type == :blank && opts[:nnext] && - [el.type, :codeblock].include?(opts[:nnext].type))) - res << "^\n\n" - elsif el.block? && - ![:li, :dd, :dt, :td, :th, :tr, :thead, :tbody, :tfoot, :blank].include?(el.type) && - (el.type != :html_element || @stack.last.type != :html_element) && - (el.type != :p || !el.options[:transparent]) - res << "\n" - end - res - end - - def inner(el, opts = {indent: 0}) - @stack.push(el) - result = +'' - el.children.each_with_index do |inner_el, index| - options = opts.dup - options[:index] = index - options[:prev] = (index == 0 ? nil : el.children[index - 1]) - options[:pprev] = (index <= 1 ? nil : el.children[index - 2]) - options[:next] = (index == el.children.length - 1 ? nil : el.children[index + 1]) - options[:nnext] = (index >= el.children.length - 2 ? nil : el.children[index + 2]) - result << convert(inner_el, options) - end - @stack.pop - result - end - - def convert_blank(_el, _opts) - "" - end - - ESCAPED_CHAR_RE = /(\$\$|[\\*_`\[\]\{"'|])|^[ ]{0,3}(:)/ - - def convert_text(el, opts) - if opts[:raw_text] - el.value - else - el.value.gsub(/\A\n/) do - opts[:prev] && opts[:prev].type == :br ? '' : "\n" - end.gsub(/\s+/, ' ').gsub(ESCAPED_CHAR_RE) do - $1 || !opts[:prev] || opts[:prev].type == :br ? "\\#{$1 || $2}" : $& - end - end - end - - def convert_p(el, opts) - w = @options[:line_width] - opts[:indent].to_s.to_i - first, second, *rest = inner(el, opts).strip.gsub(/(.{1,#{w}})( +|$\n?)/, "\\1\n").split(/\n/) - first&.gsub!(/^(?:(#|>)|(\d+)\.|([+-]\s))/) { $1 || $3 ? "\\#{$1 || $3}" : "#{$2}\\." } - second&.gsub!(/^([=-]+\s*?)$/, "\\\1") - res = [first, second, *rest].compact.join("\n") + "\n" - res.gsub!(/^[ ]{0,3}:/, "\\:") - if el.children.length == 1 && el.children.first.type == :math - res = "\\#{res}" - elsif res.start_with?('\$$') && res.end_with?("\\$$\n") - res.sub!(/^\\\$\$/, '\$\$') - end - res - end - - def convert_codeblock(el, _opts) - el.value.split(/\n/).map {|l| l.empty? ? " " : " #{l}" }.join("\n") + "\n" - end - - def convert_blockquote(el, opts) - opts[:indent] += 2 - inner(el, opts).chomp.split(/\n/).map {|l| "> #{l}" }.join("\n") << "\n" - end - - def convert_header(el, opts) - res = +'' - res << "#{'#' * output_header_level(el.options[:level])} #{inner(el, opts)}" - res[-1, 1] = "\\#" if res[-1] == '#' - res << " {##{el.attr['id']}}" if el.attr['id'] && !el.attr['id'].strip.empty? - res << "\n" - end - - def convert_hr(_el, _opts) - "* * *\n" - end - - def convert_ul(el, opts) - inner(el, opts).sub(/\n+\Z/, "\n") - end - alias convert_ol convert_ul - alias convert_dl convert_ul - - def convert_li(el, opts) - sym, width = if @stack.last.type == :ul - ['* ' + @list_spacing, el.children.first && el.children.first.type == :codeblock ? 4 : @list_indent] - else - ["#{opts[:index] + 1}.".ljust(4), 4] - end - if (ial = ial_for_element(el)) - sym << ial << " " - end - - opts[:indent] += width - text = inner(el, opts) - newlines = text.scan(/\n*\Z/).first - first, *last = text.split(/\n/) - last = last.map {|l| " " * width + l }.join("\n") - text = (first.nil? ? "\n" : first + (last.empty? ? "" : "\n") + last + newlines) - if el.children.first && el.children.first.type == :p && !el.children.first.options[:transparent] - res = +"#{sym}#{text}" - res << "^\n" if el.children.size == 1 && @stack.last.children.last == el && - (@stack.last.children.any? {|c| c.children.first.type != :p } || @stack.last.children.size == 1) - res - elsif el.children.first && el.children.first.type == :codeblock - "#{sym}\n #{text}" - else - "#{sym}#{text}" - end - end - - def convert_dd(el, opts) - sym, width = ": " + @list_spacing, (el.children.first && el.children.first.type == :codeblock ? 4 : @list_indent) - if (ial = ial_for_element(el)) - sym << ial << " " - end - - opts[:indent] += width - text = inner(el, opts) - newlines = text.scan(/\n*\Z/).first - first, *last = text.split(/\n/) - last = last.map {|l| " " * width + l }.join("\n") - text = first.to_s + (last.empty? ? "" : "\n") + last + newlines - text.chomp! if text =~ /\n\n\Z/ && opts[:next] && opts[:next].type == :dd - text << "\n" if text !~ /\n\n\Z/ && opts[:next] && opts[:next].type == :dt - text << "\n" if el.children.empty? - if el.children.first && el.children.first.type == :p && !el.children.first.options[:transparent] - "\n#{sym}#{text}" - elsif el.children.first && el.children.first.type == :codeblock - "#{sym}\n #{text}" - else - "#{sym}#{text}" - end - end - - def convert_dt(el, opts) - result = +'' - if (ial = ial_for_element(el)) - result << ial << " " - end - result << inner(el, opts) << "\n" - end - - HTML_TAGS_WITH_BODY = ['div', 'script', 'iframe', 'textarea', 'th', 'td'] - - HTML_ELEMENT_TYPES = [:entity, :text, :html_element].freeze - private_constant :HTML_ELEMENT_TYPES - - def convert_html_element(el, opts) - markdown_attr = el.options[:category] == :block && el.children.any? do |c| - c.type != :html_element && - (c.type != :p || !c.options[:transparent] || - c.children.any? {|t| !HTML_ELEMENT_TYPES.member?(t.type) }) && - c.block? - end - opts[:force_raw_text] = true if %w[script pre code].include?(el.value) - opts[:raw_text] = opts[:force_raw_text] || opts[:block_raw_text] || \ - (el.options[:category] != :span && !markdown_attr) - opts[:block_raw_text] = true if el.options[:category] == :block && opts[:raw_text] - res = inner(el, opts) - if el.options[:category] == :span - "<#{el.value}#{html_attributes(el.attr)}" + \ - (!res.empty? || HTML_TAGS_WITH_BODY.include?(el.value) ? ">#{res}" : " />") - else - output = +'' - attr = el.attr.dup - attr['markdown'] = '1' if markdown_attr - output << "<#{el.value}#{html_attributes(attr)}" - if !res.empty? && el.options[:content_model] != :block - output << ">#{res}" - elsif !res.empty? - output << ">\n#{res}" << "" - elsif HTML_TAGS_WITH_BODY.include?(el.value) - output << ">" - else - output << " />" - end - output << "\n" if @stack.last.type != :html_element || @stack.last.options[:content_model] != :raw - output - end - end - - def convert_xml_comment(el, _opts) - if el.options[:category] == :block && - (@stack.last.type != :html_element || @stack.last.options[:content_model] != :raw) - el.value + "\n" - else - el.value.dup - end - end - alias convert_xml_pi convert_xml_comment - - def convert_table(el, opts) - opts[:alignment] = el.options[:alignment] - inner(el, opts) - end - - def convert_thead(el, opts) - rows = inner(el, opts) - if opts[:alignment].all? {|a| a == :default } - "#{rows}|#{'-' * 10}\n" - else - "#{rows}| " + opts[:alignment].map do |a| - case a - when :left then ":-" - when :right then "-:" - when :center then ":-:" - when :default then "-" - end - end.join(' ') << "\n" - end - end - - def convert_tbody(el, opts) - res = +'' - res << inner(el, opts) - res << '|' << '-' * 10 << "\n" if opts[:next] && opts[:next].type == :tbody - res - end - - def convert_tfoot(el, opts) - "|#{'=' * 10}\n#{inner(el, opts)}" - end - - def convert_tr(el, opts) - "| #{el.children.map {|c| convert(c, opts) }.join(' | ')} |\n" - end - - def convert_td(el, opts) - inner(el, opts) - end - - def convert_comment(el, _opts) - if el.options[:category] == :block - "{::comment}\n#{el.value}\n{:/}\n" - else - "{::comment}#{el.value}{:/}" - end - end - - def convert_br(_el, _opts) - " \n" - end - - def convert_a(el, opts) - if el.attr['href'].empty? - "[#{inner(el, opts)}]()" - elsif el.attr['href'] =~ /^(?:http|ftp)/ || el.attr['href'].count("()") > 0 - index = if (link_el = @linkrefs.find {|c| c.attr['href'] == el.attr['href'] }) - @linkrefs.index(link_el) + 1 - else - @linkrefs << el - @linkrefs.size - end - "[#{inner(el, opts)}][#{index}]" - else - title = parse_title(el.attr['title']) - "[#{inner(el, opts)}](#{el.attr['href']}#{title})" - end - end - - def convert_img(el, _opts) - alt_text = el.attr['alt'].to_s.gsub(ESCAPED_CHAR_RE) { $1 ? "\\#{$1}" : $2 } - src = el.attr['src'].to_s - if src.empty? - "![#{alt_text}]()" - else - title = parse_title(el.attr['title']) - link = if src.count("()") > 0 - "<#{src}>" - else - src - end - "![#{alt_text}](#{link}#{title})" - end - end - - def convert_codespan(el, _opts) - delim = (el.value.scan(/`+/).max || '') + '`' - "#{delim}#{' ' if delim.size > 1}#{el.value}#{' ' if delim.size > 1}#{delim}" - end - - def convert_footnote(el, _opts) - @footnotes << [el.options[:name], el.value] - "[^#{el.options[:name]}]" - end - - def convert_raw(el, _opts) - attr = (el.options[:type] || []).join(' ') - attr = " type=\"#{attr}\"" unless attr.empty? - if @stack.last.type == :html_element - el.value - elsif el.options[:category] == :block - "{::nomarkdown#{attr}}\n#{el.value}\n{:/}\n" - else - "{::nomarkdown#{attr}}#{el.value}{:/}" - end - end - - def convert_em(el, opts) - "*#{inner(el, opts)}*" + - (opts[:next] && [:em, :strong].include?(opts[:next].type) && !ial_for_element(el) ? '{::}' : '') - end - - def convert_strong(el, opts) - "**#{inner(el, opts)}**" + - (opts[:next] && [:em, :strong].include?(opts[:next].type) && !ial_for_element(el) ? '{::}' : '') - end - - def convert_entity(el, _opts) - entity_to_str(el.value, el.options[:original]) - end - - TYPOGRAPHIC_SYMS = { - mdash: '---', ndash: '--', hellip: '...', - laquo_space: '<< ', raquo_space: ' >>', - laquo: '<<', raquo: '>>' - } - def convert_typographic_sym(el, _opts) - TYPOGRAPHIC_SYMS[el.value] - end - - def convert_smart_quote(el, _opts) - el.value.to_s =~ /[rl]dquo/ ? "\"" : "'" - end - - def convert_math(el, _opts) - "$$#{el.value}$$" + (el.options[:category] == :block ? "\n" : '') - end - - def convert_abbreviation(el, _opts) - el.value - end - - def convert_root(el, opts) - res = inner(el, opts) - res << create_link_defs - res << create_footnote_defs - res << create_abbrev_defs - res - end - - def create_link_defs - res = +'' - res << "\n\n" unless @linkrefs.empty? - @linkrefs.each_with_index do |el, i| - title = parse_title(el.attr['title']) - res << "[#{i + 1}]: #{el.attr['href']}#{title}\n" - end - res - end - - def create_footnote_defs - res = +'' - @footnotes.each do |name, data| - res << "[^#{name}]:\n" - res << inner(data).chomp.split(/\n/).map {|l| " #{l}" }.join("\n") + "\n\n" - end - res - end - - def create_abbrev_defs - return '' unless @root.options[:abbrev_defs] - res = +'' - @root.options[:abbrev_defs].each do |name, text| - res << "*[#{name}]: #{text}\n" - res << ial_for_element(Element.new(:unused, nil, @root.options[:abbrev_attr][name])).to_s << "\n\n" - end - res - end - - # Return the IAL containing the attributes of the element +el+. - def ial_for_element(el) - res = el.attr.map do |k, v| - next if [:img, :a].include?(el.type) && ['href', 'src', 'alt', 'title'].include?(k) - next if el.type == :header && k == 'id' && !v.strip.empty? - if v.nil? - '' - elsif k == 'class' && !v.empty? && !v.index(/[\.#]/) - " " + v.split(/\s+/).map {|w| ".#{w}" }.join(" ") - elsif k == 'id' && !v.strip.empty? - " ##{v}" - else - " #{k}=\"#{v}\"" - end - end.compact.join('') - res = "toc" + (res.strip.empty? ? '' : " #{res}") if (el.type == :ul || el.type == :ol) && - el.options.dig(:ial, :refs)&.include?('toc') - res = "footnotes" + (res.strip.empty? ? '' : " #{res}") if (el.type == :ul || el.type == :ol) && - el.options.dig(:ial, :refs)&.include?('footnotes') - if el.type == :dl && el.options[:ial] && el.options[:ial][:refs] - auto_ids = el.options[:ial][:refs].select {|ref| ref.start_with?('auto_ids') }.join(" ") - res = auto_ids << (res.strip.empty? ? '' : " #{res}") unless auto_ids.empty? - end - res.strip.empty? ? nil : "{:#{res}}" - end - - def parse_title(attr) - attr.to_s.empty? ? '' : ' "' + attr.gsub(/"/, '"') + '"' - end - - # :startdoc: - - end - - end -end diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/converter/latex.rb b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/converter/latex.rb deleted file mode 100644 index 25124d5f..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/converter/latex.rb +++ /dev/null @@ -1,625 +0,0 @@ -# -*- coding: utf-8; frozen_string_literal: true -*- -# -#-- -# Copyright (C) 2009-2019 Thomas Leitner -# -# This file is part of kramdown which is licensed under the MIT. -#++ -# - -require 'set' -require 'kramdown/converter' - -module Kramdown - - module Converter - - # Converts an element tree to LaTeX. - # - # This converter uses ideas from other Markdown-to-LaTeX converters like Pandoc and Maruku. - # - # You can customize this converter by sub-classing it and overriding the +convert_NAME+ methods. - # Each such method takes the following parameters: - # - # [+el+] The element of type +NAME+ to be converted. - # - # [+opts+] A hash containing processing options that are passed down from parent elements. The - # key :parent is always set and contains the parent element as value. - # - # The return value of such a method has to be a string containing the element +el+ formatted - # correctly as LaTeX markup. - class Latex < Base - - # Initialize the LaTeX converter with the +root+ element and the conversion +options+. - def initialize(root, options) - super - @data[:packages] = Set.new - end - - # Dispatch the conversion of the element +el+ to a +convert_TYPE+ method using the +type+ of - # the element. - def convert(el, opts = {}) - send("convert_#{el.type}", el, opts) - end - - # Return the converted content of the children of +el+ as a string. - def inner(el, opts) - result = +'' - options = opts.dup.merge(parent: el) - el.children.each_with_index do |inner_el, index| - options[:index] = index - options[:result] = result - result << send("convert_#{inner_el.type}", inner_el, options) - end - result - end - - def convert_root(el, opts) - inner(el, opts) - end - - def convert_blank(_el, opts) - opts[:result] =~ /\n\n\Z|\A\Z/ ? "" : "\n" - end - - def convert_text(el, _opts) - escape(el.value) - end - - def convert_p(el, opts) - if el.children.size == 1 && el.children.first.type == :img && - !(img = convert_img(el.children.first, opts)).empty? - convert_standalone_image(el, opts, img) - else - "#{latex_link_target(el)}#{inner(el, opts)}\n\n" - end - end - - # Helper method used by +convert_p+ to convert a paragraph that only contains a single :img - # element. - def convert_standalone_image(el, _opts, img) - attrs = attribute_list(el) - "\\begin{figure}#{attrs}\n\\begin{center}\n#{img}\n\\end{center}\n" \ - "\\caption{#{escape(el.children.first.attr['alt'])}}\n" \ - "#{latex_link_target(el, true)}\n\\end{figure}#{attrs}\n" - end - - def convert_codeblock(el, _opts) - show_whitespace = el.attr['class'].to_s =~ /\bshow-whitespaces\b/ - lang = extract_code_language(el.attr) - - if @options[:syntax_highlighter] == :minted && - (highlighted_code = highlight_code(el.value, lang, :block)) - @data[:packages] << 'minted' - "#{latex_link_target(el)}#{highlighted_code}\n" - elsif show_whitespace || lang - options = [] - options << (show_whitespace ? "showspaces=true,showtabs=true" : "showspaces=false,showtabs=false") - options << "language=#{lang}" if lang - options << "basicstyle=\\ttfamily\\footnotesize,columns=fixed,frame=tlbr" - id = el.attr['id'] - options << "label=#{id}" if id - attrs = attribute_list(el) - "#{latex_link_target(el)}\\begin{lstlisting}[#{options.join(',')}]\n" \ - "#{el.value}\n\\end{lstlisting}#{attrs}\n" - else - "#{latex_link_target(el)}\\begin{verbatim}#{el.value}\\end{verbatim}\n" - end - end - - def convert_blockquote(el, opts) - latex_environment(el.children.size > 1 ? 'quotation' : 'quote', el, inner(el, opts)) - end - - def convert_header(el, opts) - type = @options[:latex_headers][output_header_level(el.options[:level]) - 1] - if ((id = el.attr['id']) || - (@options[:auto_ids] && (id = generate_id(el.options[:raw_text])))) && in_toc?(el) - "\\#{type}{#{inner(el, opts)}}\\hypertarget{#{id}}{}\\label{#{id}}\n\n" - else - "\\#{type}*{#{inner(el, opts)}}\n\n" - end - end - - def convert_hr(el, _opts) - attrs = attribute_list(el) - "#{latex_link_target(el)}\\begin{center}#{attrs}\n\\rule{3in}{0.4pt}\n\\end{center}#{attrs}\n" - end - - def convert_ul(el, opts) - if !@data[:has_toc] && el.options.dig(:ial, :refs)&.include?('toc') - @data[:has_toc] = true - '\tableofcontents' - else - latex_environment(el.type == :ul ? 'itemize' : 'enumerate', el, inner(el, opts)) - end - end - alias convert_ol convert_ul - - def convert_dl(el, opts) - latex_environment('description', el, inner(el, opts)) - end - - def convert_li(el, opts) - "\\item{} #{latex_link_target(el, true)}#{inner(el, opts).sub(/\n+\Z/, '')}\n" - end - - def convert_dt(el, opts) - "\\item[#{inner(el, opts)}] " - end - - def convert_dd(el, opts) - "#{latex_link_target(el)}#{inner(el, opts)}\n\n" - end - - def convert_html_element(el, opts) - if el.value == 'i' || el.value == 'em' - "\\emph{#{inner(el, opts)}}" - elsif el.value == 'b' || el.value == 'strong' - "\\textbf{#{inner(el, opts)}}" - else - warning("Can't convert HTML element") - '' - end - end - - def convert_xml_comment(el, _opts) - el.value.split(/\n/).map {|l| "% #{l}" }.join("\n") + "\n" - end - - def convert_xml_pi(_el, _opts) - warning("Can't convert XML PI") - '' - end - - TABLE_ALIGNMENT_CHAR = {default: 'l', left: 'l', center: 'c', right: 'r'} # :nodoc: - - def convert_table(el, opts) - @data[:packages] << 'longtable' - align = el.options[:alignment].map {|a| TABLE_ALIGNMENT_CHAR[a] }.join('|') - attrs = attribute_list(el) - "#{latex_link_target(el)}\\begin{longtable}{|#{align}|}#{attrs}\n" \ - "\\hline\n#{inner(el, opts)}\\hline\n\\end{longtable}#{attrs}\n\n" - end - - def convert_thead(el, opts) - "#{inner(el, opts)}\\hline\n" - end - - def convert_tbody(el, opts) - inner(el, opts) - end - - def convert_tfoot(el, opts) - "\\hline \\hline \n#{inner(el, opts)}" - end - - def convert_tr(el, opts) - el.children.map {|c| send("convert_#{c.type}", c, opts) }.join(' & ') << "\\\\\n" - end - - def convert_td(el, opts) - inner(el, opts) - end - - def convert_comment(el, _opts) - el.value.split(/\n/).map {|l| "% #{l}" }.join("\n") << "\n" - end - - def convert_br(_el, opts) - res = +"\\newline" - res << "\n" if (c = opts[:parent].children[opts[:index] + 1]) && - (c.type != :text || c.value !~ /^\s*\n/) - res - end - - def convert_a(el, opts) - url = el.attr['href'] - if url.start_with?('#') - "\\hyperlink{#{url[1..-1].gsub('%', '\\%')}}{#{inner(el, opts)}}" - else - "\\href{#{url.gsub('%', '\\%')}}{#{inner(el, opts)}}" - end - end - - def convert_img(el, _opts) - line = el.options[:location] - if el.attr['src'] =~ /^(https?|ftps?):\/\// - warning("Cannot include non-local image#{line ? " (line #{line})" : ''}") - '' - elsif !el.attr['src'].empty? - @data[:packages] << 'graphicx' - "#{latex_link_target(el)}\\includegraphics{#{el.attr['src']}}" - else - warning("Cannot include image with empty path#{line ? " (line #{line})" : ''}") - '' - end - end - - def convert_codespan(el, _opts) - lang = extract_code_language(el.attr) - if @options[:syntax_highlighter] == :minted && - (highlighted_code = highlight_code(el.value, lang, :span)) - @data[:packages] << 'minted' - "#{latex_link_target(el)}#{highlighted_code}" - else - "\\texttt{#{latex_link_target(el)}#{escape(el.value)}}" - end - end - - def convert_footnote(el, opts) - @data[:packages] << 'fancyvrb' - "\\footnote{#{inner(el.value, opts).rstrip}}" - end - - def convert_raw(el, _opts) - if !el.options[:type] || el.options[:type].empty? || el.options[:type].include?('latex') - el.value + (el.options[:category] == :block ? "\n" : '') - else - '' - end - end - - def convert_em(el, opts) - "\\emph{#{latex_link_target(el)}#{inner(el, opts)}}" - end - - def convert_strong(el, opts) - "\\textbf{#{latex_link_target(el)}#{inner(el, opts)}}" - end - - # Inspired by Maruku: entity conversion table based on the one from htmltolatex - # (http://sourceforge.net/projects/htmltolatex/), with some small adjustments/additions - ENTITY_CONV_TABLE = { - 913 => ['$A$'], - 914 => ['$B$'], - 915 => ['$\Gamma$'], - 916 => ['$\Delta$'], - 917 => ['$E$'], - 918 => ['$Z$'], - 919 => ['$H$'], - 920 => ['$\Theta$'], - 921 => ['$I$'], - 922 => ['$K$'], - 923 => ['$\Lambda$'], - 924 => ['$M$'], - 925 => ['$N$'], - 926 => ['$\Xi$'], - 927 => ['$O$'], - 928 => ['$\Pi$'], - 929 => ['$P$'], - 931 => ['$\Sigma$'], - 932 => ['$T$'], - 933 => ['$Y$'], - 934 => ['$\Phi$'], - 935 => ['$X$'], - 936 => ['$\Psi$'], - 937 => ['$\Omega$'], - 945 => ['$\alpha$'], - 946 => ['$\beta$'], - 947 => ['$\gamma$'], - 948 => ['$\delta$'], - 949 => ['$\epsilon$'], - 950 => ['$\zeta$'], - 951 => ['$\eta$'], - 952 => ['$\theta$'], - 953 => ['$\iota$'], - 954 => ['$\kappa$'], - 955 => ['$\lambda$'], - 956 => ['$\mu$'], - 957 => ['$\nu$'], - 958 => ['$\xi$'], - 959 => ['$o$'], - 960 => ['$\pi$'], - 961 => ['$\rho$'], - 963 => ['$\sigma$'], - 964 => ['$\tau$'], - 965 => ['$\upsilon$'], - 966 => ['$\phi$'], - 967 => ['$\chi$'], - 968 => ['$\psi$'], - 969 => ['$\omega$'], - 962 => ['$\varsigma$'], - 977 => ['$\vartheta$'], - 982 => ['$\varpi$'], - 8230 => ['\ldots'], - 8242 => ['$\prime$'], - 8254 => ['-'], - 8260 => ['/'], - 8472 => ['$\wp$'], - 8465 => ['$\Im$'], - 8476 => ['$\Re$'], - 8501 => ['$\aleph$'], - 8226 => ['$\bullet$'], - 8482 => ['$^{\rm TM}$'], - 8592 => ['$\leftarrow$'], - 8594 => ['$\rightarrow$'], - 8593 => ['$\uparrow$'], - 8595 => ['$\downarrow$'], - 8596 => ['$\leftrightarrow$'], - 8629 => ['$\hookleftarrow$'], - 8657 => ['$\Uparrow$'], - 8659 => ['$\Downarrow$'], - 8656 => ['$\Leftarrow$'], - 8658 => ['$\Rightarrow$'], - 8660 => ['$\Leftrightarrow$'], - 8704 => ['$\forall$'], - 8706 => ['$\partial$'], - 8707 => ['$\exists$'], - 8709 => ['$\emptyset$'], - 8711 => ['$\nabla$'], - 8712 => ['$\in$'], - 8715 => ['$\ni$'], - 8713 => ['$\notin$'], - 8721 => ['$\sum$'], - 8719 => ['$\prod$'], - 8722 => ['$-$'], - 8727 => ['$\ast$'], - 8730 => ['$\surd$'], - 8733 => ['$\propto$'], - 8734 => ['$\infty$'], - 8736 => ['$\angle$'], - 8743 => ['$\wedge$'], - 8744 => ['$\vee$'], - 8745 => ['$\cap$'], - 8746 => ['$\cup$'], - 8747 => ['$\int$'], - 8756 => ['$\therefore$', 'amssymb'], - 8764 => ['$\sim$'], - 8776 => ['$\approx$'], - 8773 => ['$\cong$'], - 8800 => ['$\neq$'], - 8801 => ['$\equiv$'], - 8804 => ['$\leq$'], - 8805 => ['$\geq$'], - 8834 => ['$\subset$'], - 8835 => ['$\supset$'], - 8838 => ['$\subseteq$'], - 8839 => ['$\supseteq$'], - 8836 => ['$\nsubset$', 'amssymb'], - 8853 => ['$\oplus$'], - 8855 => ['$\otimes$'], - 8869 => ['$\perp$'], - 8901 => ['$\cdot$'], - 8968 => ['$\rceil$'], - 8969 => ['$\lceil$'], - 8970 => ['$\lfloor$'], - 8971 => ['$\rfloor$'], - 9001 => ['$\rangle$'], - 9002 => ['$\langle$'], - 9674 => ['$\lozenge$', 'amssymb'], - 9824 => ['$\spadesuit$'], - 9827 => ['$\clubsuit$'], - 9829 => ['$\heartsuit$'], - 9830 => ['$\diamondsuit$'], - 38 => ['\&'], - 34 => ['"'], - 39 => ['\''], - 169 => ['\copyright'], - 60 => ['\textless'], - 62 => ['\textgreater'], - 338 => ['\OE'], - 339 => ['\oe'], - 352 => ['\v{S}'], - 353 => ['\v{s}'], - 376 => ['\"Y'], - 710 => ['\textasciicircum'], - 732 => ['\textasciitilde'], - 8211 => ['--'], - 8212 => ['---'], - 8216 => ['`'], - 8217 => ['\''], - 8220 => ['``'], - 8221 => ['\'\''], - 8224 => ['\dag'], - 8225 => ['\ddag'], - 8240 => ['\permil', 'wasysym'], - 8364 => ['\euro', 'eurosym'], - 8249 => ['\guilsinglleft'], - 8250 => ['\guilsinglright'], - 8218 => ['\quotesinglbase', 'mathcomp'], - 8222 => ['\quotedblbase', 'mathcomp'], - 402 => ['\textflorin', 'mathcomp'], - 381 => ['\v{Z}'], - 382 => ['\v{z}'], - 160 => ['~'], - 161 => ['\textexclamdown'], - 163 => ['\pounds'], - 164 => ['\currency', 'wasysym'], - 165 => ['\textyen', 'textcomp'], - 166 => ['\brokenvert', 'wasysym'], - 167 => ['\S'], - 171 => ['\guillemotleft'], - 187 => ['\guillemotright'], - 174 => ['\textregistered'], - 170 => ['\textordfeminine'], - 172 => ['$\neg$'], - 173 => ['\-'], - 176 => ['$\degree$', 'mathabx'], - 177 => ['$\pm$'], - 180 => ['\''], - 181 => ['$\mu$'], - 182 => ['\P'], - 183 => ['$\cdot$'], - 186 => ['\textordmasculine'], - 162 => ['\cent', 'wasysym'], - 185 => ['$^1$'], - 178 => ['$^2$'], - 179 => ['$^3$'], - 189 => ['$\frac{1}{2}$'], - 188 => ['$\frac{1}{4}$'], - 190 => ['$\frac{3}{4}'], - 192 => ['\`A'], - 193 => ['\\\'A'], - 194 => ['\^A'], - 195 => ['\~A'], - 196 => ['\"A'], - 197 => ['\AA'], - 198 => ['\AE'], - 199 => ['\cC'], - 200 => ['\`E'], - 201 => ['\\\'E'], - 202 => ['\^E'], - 203 => ['\"E'], - 204 => ['\`I'], - 205 => ['\\\'I'], - 206 => ['\^I'], - 207 => ['\"I'], - 208 => ['$\eth$', 'amssymb'], - 209 => ['\~N'], - 210 => ['\`O'], - 211 => ['\\\'O'], - 212 => ['\^O'], - 213 => ['\~O'], - 214 => ['\"O'], - 215 => ['$\times$'], - 216 => ['\O'], - 217 => ['\`U'], - 218 => ['\\\'U'], - 219 => ['\^U'], - 220 => ['\"U'], - 221 => ['\\\'Y'], - 222 => ['\Thorn', 'wasysym'], - 223 => ['\ss'], - 224 => ['\`a'], - 225 => ['\\\'a'], - 226 => ['\^a'], - 227 => ['\~a'], - 228 => ['\"a'], - 229 => ['\aa'], - 230 => ['\ae'], - 231 => ['\cc'], - 232 => ['\`e'], - 233 => ['\\\'e'], - 234 => ['\^e'], - 235 => ['\"e'], - 236 => ['\`i'], - 237 => ['\\\'i'], - 238 => ['\^i'], - 239 => ['\"i'], - 240 => ['$\eth$'], - 241 => ['\~n'], - 242 => ['\`o'], - 243 => ['\\\'o'], - 244 => ['\^o'], - 245 => ['\~o'], - 246 => ['\"o'], - 247 => ['$\divide$'], - 248 => ['\o'], - 249 => ['\`u'], - 250 => ['\\\'u'], - 251 => ['\^u'], - 252 => ['\"u'], - 253 => ['\\\'y'], - 254 => ['\thorn', 'wasysym'], - 255 => ['\"y'], - 8201 => ['\thinspace'], - 8194 => ['\hskip .5em\relax'], - 8195 => ['\quad'], - } # :nodoc: - ENTITY_CONV_TABLE.each_value {|v| v[0] = "#{v[0]}{}" } - - def entity_to_latex(entity) - text, package = ENTITY_CONV_TABLE[entity.code_point] - if text - @data[:packages] << package if package - text - else - warning("Couldn't find entity with code #{entity.code_point} in substitution table!") - '' - end - end - - def convert_entity(el, _opts) - entity_to_latex(el.value) - end - - TYPOGRAPHIC_SYMS = { - mdash: '---', ndash: '--', hellip: '\ldots{}', - laquo_space: '\guillemotleft{}~', raquo_space: '~\guillemotright{}', - laquo: '\guillemotleft{}', raquo: '\guillemotright{}' - } # :nodoc: - def convert_typographic_sym(el, _opts) - if (result = @options[:typographic_symbols][el.value]) - escape(result) - else - TYPOGRAPHIC_SYMS[el.value] - end - end - - def convert_smart_quote(el, opts) - res = entity_to_latex(smart_quote_entity(el)).chomp('{}') - res << "{}" if ((nel = opts[:parent].children[opts[:index] + 1]) && nel.type == :smart_quote) || res =~ /\w$/ - res - end - - def convert_math(el, _opts) - @data[:packages] += %w[amssymb amsmath amsthm amsfonts] - if el.options[:category] == :block - if el.value =~ /\A\s*\\begin\{/ - el.value - else - latex_environment('displaymath', el, el.value) - end - else - "$#{el.value}$" - end - end - - def convert_abbreviation(el, _opts) - @data[:packages] += %w[acronym] - "\\ac{#{normalize_abbreviation_key(el.value)}}" - end - - # Normalize the abbreviation key so that it only contains allowed ASCII character - def normalize_abbreviation_key(key) - key.gsub(/\W/) {|m| m.unpack('H*').first } - end - - # Wrap the +text+ inside a LaTeX environment of type +type+. The element +el+ is passed on to - # the method #attribute_list -- the resulting string is appended to both the \\begin and the - # \\end lines of the LaTeX environment for easier post-processing of LaTeX environments. - def latex_environment(type, el, text) - attrs = attribute_list(el) - "\\begin{#{type}}#{latex_link_target(el)}#{attrs}\n#{text.rstrip}\n\\end{#{type}}#{attrs}\n" - end - - # Return a string containing a valid \hypertarget command if the element has an ID defined, or - # +nil+ otherwise. If the parameter +add_label+ is +true+, a \label command will also be used - # additionally to the \hypertarget command. - def latex_link_target(el, add_label = false) - if (id = el.attr['id']) - "\\hypertarget{#{id}}{}#{add_label ? "\\label{#{id}}" : ''}" - else - nil - end - end - - # Return a LaTeX comment containing all attributes as 'key="value"' pairs. - def attribute_list(el) - attrs = el.attr.map {|k, v| v.nil? ? '' : " #{k}=\"#{v}\"" }.compact.sort.join('') - attrs = " % #{attrs}" unless attrs.empty? - attrs - end - - ESCAPE_MAP = { - "^" => "\\^{}", - "\\" => "\\textbackslash{}", - "~" => "\\ensuremath{\\sim}", - "|" => "\\textbar{}", - "<" => "\\textless{}", - ">" => "\\textgreater{}", - "[" => "{[}", - "]" => "{]}", - }.merge(Hash[*("{}$%&_#".each_char.map {|c| [c, "\\#{c}"] }.flatten)]) # :nodoc: - ESCAPE_RE = Regexp.union(*ESCAPE_MAP.collect {|k, _v| k }) # :nodoc: - - # Escape the special LaTeX characters in the string +str+. - def escape(str) - str.gsub(ESCAPE_RE) {|m| ESCAPE_MAP[m] } - end - - end - - end -end diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/converter/man.rb b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/converter/man.rb deleted file mode 100644 index 28aa2a6e..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/converter/man.rb +++ /dev/null @@ -1,300 +0,0 @@ -# -*- coding: utf-8; frozen_string_literal: true -*- -# -#-- -# Copyright (C) 2009-2019 Thomas Leitner -# -# This file is part of kramdown which is licensed under the MIT. -#++ -# - -require 'kramdown/converter' - -module Kramdown - - module Converter - - # Converts a Kramdown::Document to a manpage in groff format. See man(7), groff_man(7) and - # man-pages(7) for information regarding the output. - class Man < Base - - def convert(el, opts = {indent: 0, result: +''}) #:nodoc: - send("convert_#{el.type}", el, opts) - end - - private - - def inner(el, opts, use = :all) - arr = el.children.reject {|e| e.type == :blank } - arr.each_with_index do |inner_el, index| - next if use == :rest && index == 0 - break if use == :first && index > 0 - options = opts.dup - options[:parent] = el - options[:index] = index - options[:prev] = (index == 0 ? nil : arr[index - 1]) - options[:next] = (index == arr.length - 1 ? nil : arr[index + 1]) - convert(inner_el, options) - end - end - - def convert_root(el, opts) - @title_done = false - opts[:result] = +".\\\" generated by kramdown\n" - inner(el, opts) - opts[:result] - end - - def convert_blank(*) - end - alias convert_hr convert_blank - alias convert_xml_pi convert_blank - - def convert_p(el, opts) - if (opts[:index] != 0 && opts[:prev].type != :header) || - (opts[:parent].type == :blockquote && opts[:index] == 0) - opts[:result] << macro("P") - end - inner(el, opts) - newline(opts[:result]) - end - - def convert_header(el, opts) - return unless opts[:parent].type == :root - case el.options[:level] - when 1 - unless @title_done - @title_done = true - data = el.options[:raw_text].scan(/([^(]+)\s*\((\d\w*)\)(?:\s*-+\s*(.*))?/).first || - el.options[:raw_text].scan(/([^\s]+)\s*(?:-*\s+)?()(.*)/).first - return unless data && data[0] - name = data[0] - section = (data[1].to_s.empty? ? el.attr['data-section'] || '7' : data[1]) - description = (data[2].to_s.empty? ? nil : " - #{data[2]}") - date = el.attr['data-date'] ? quote(el.attr['data-date']) : nil - extra = (el.attr['data-extra'] ? quote(escape(el.attr['data-extra'].to_s)) : nil) - opts[:result] << macro("TH", quote(escape(name.upcase)), quote(section), date, extra) - if description - opts[:result] << macro("SH", "NAME") << escape("#{name}#{description}") << "\n" - end - end - when 2 - opts[:result] << macro("SH", quote(escape(el.options[:raw_text]))) - when 3 - opts[:result] << macro("SS", quote(escape(el.options[:raw_text]))) - else - warning("Header levels greater than three are not supported") - end - end - - def convert_codeblock(el, opts) - opts[:result] << macro("sp") << macro("RS", 4) << macro("EX") - opts[:result] << newline(escape(el.value, true)) - opts[:result] << macro("EE") << macro("RE") - end - - def convert_blockquote(el, opts) - opts[:result] << macro("RS") - inner(el, opts) - opts[:result] << macro("RE") - end - - def convert_ul(el, opts) - compact = (el.attr['class'] =~ /\bcompact\b/) - opts[:result] << macro("sp") << macro("PD", 0) if compact - inner(el, opts) - opts[:result] << macro("PD") if compact - end - alias convert_dl convert_ul - alias convert_ol convert_ul - - def convert_li(el, opts) - sym = (opts[:parent].type == :ul ? '\(bu' : "#{opts[:index] + 1}.") - opts[:result] << macro("IP", sym, 4) - inner(el, opts, :first) - if el.children.size > 1 - opts[:result] << macro("RS") - inner(el, opts, :rest) - opts[:result] << macro("RE") - end - end - - def convert_dt(el, opts) - opts[:result] << macro(opts[:prev] && opts[:prev].type == :dt ? "TQ" : "TP") - inner(el, opts) - opts[:result] << "\n" - end - - def convert_dd(el, opts) - inner(el, opts, :first) - if el.children.size > 1 - opts[:result] << macro("RS") - inner(el, opts, :rest) - opts[:result] << macro("RE") - end - opts[:result] << macro("sp") if opts[:next] && opts[:next].type == :dd - end - - TABLE_CELL_ALIGNMENT = {left: 'l', center: 'c', right: 'r', default: 'l'} - - def convert_table(el, opts) - opts[:alignment] = el.options[:alignment].map {|a| TABLE_CELL_ALIGNMENT[a] } - table_options = ["box"] - table_options << "center" if el.attr['class'] =~ /\bcenter\b/ - opts[:result] << macro("TS") << "#{table_options.join(' ')} ;\n" - inner(el, opts) - opts[:result] << macro("TE") << macro("sp") - end - - def convert_thead(el, opts) - opts[:result] << opts[:alignment].map {|a| "#{a}b" }.join(' ') << " .\n" - inner(el, opts) - opts[:result] << "=\n" - end - - def convert_tbody(el, opts) - opts[:result] << ".T&\n" if opts[:index] != 0 - opts[:result] << opts[:alignment].join(' ') << " .\n" - inner(el, opts) - opts[:result] << (opts[:next].type == :tfoot ? "=\n" : "_\n") if opts[:next] - end - - def convert_tfoot(el, opts) - inner(el, opts) - end - - def convert_tr(el, opts) - inner(el, opts) - opts[:result] << "\n" - end - - def convert_td(el, opts) - result = opts[:result] - opts[:result] = +'' - inner(el, opts) - if opts[:result] =~ /\n/ - warning("Table cells using links are not supported") - result << "\t" - else - result << opts[:result] << "\t" - end - end - - def convert_html_element(*) - warning("HTML elements are not supported") - end - - def convert_xml_comment(el, opts) - newline(opts[:result]) << ".\"#{escape(el.value, true).rstrip.gsub(/\n/, "\n.\"")}\n" - end - alias convert_comment convert_xml_comment - - def convert_a(el, opts) - if el.children.size == 1 && el.children[0].type == :text && - el.attr['href'] == el.children[0].value - newline(opts[:result]) << macro("UR", escape(el.attr['href'])) << macro("UE") - elsif el.attr['href'].start_with?('mailto:') - newline(opts[:result]) << macro("MT", escape(el.attr['href'].sub(/^mailto:/, ''))) << - macro("UE") - else - newline(opts[:result]) << macro("UR", escape(el.attr['href'])) - inner(el, opts) - newline(opts[:result]) << macro("UE") - end - end - - def convert_img(_el, _opts) - warning("Images are not supported") - end - - def convert_em(el, opts) - opts[:result] << '\fI' - inner(el, opts) - opts[:result] << '\fP' - end - - def convert_strong(el, opts) - opts[:result] << '\fB' - inner(el, opts) - opts[:result] << '\fP' - end - - def convert_codespan(el, opts) - opts[:result] << "\\fB#{escape(el.value)}\\fP" - end - - def convert_br(_el, opts) - newline(opts[:result]) << macro("br") - end - - def convert_abbreviation(el, opts) - opts[:result] << escape(el.value) - end - - def convert_math(el, opts) - if el.options[:category] == :block - convert_codeblock(el, opts) - else - convert_codespan(el, opts) - end - end - - def convert_footnote(*) - warning("Footnotes are not supported") - end - - def convert_raw(*) - warning("Raw content is not supported") - end - - def convert_text(el, opts) - text = escape(el.value) - text.lstrip! if opts[:result][-1] == "\n" - opts[:result] << text - end - - def convert_entity(el, opts) - opts[:result] << unicode_char(el.value.code_point) - end - - def convert_smart_quote(el, opts) - opts[:result] << unicode_char(::Kramdown::Utils::Entities.entity(el.value.to_s).code_point) - end - - TYPOGRAPHIC_SYMS_MAP = { - mdash: '\(em', ndash: '\(em', hellip: '\.\.\.', - laquo_space: '\[Fo]', raquo_space: '\[Fc]', laquo: '\[Fo]', raquo: '\[Fc]' - } - - def convert_typographic_sym(el, opts) - opts[:result] << TYPOGRAPHIC_SYMS_MAP[el.value] - end - - def macro(name, *args) - ".#{[name, *args].compact.join(' ')}\n" - end - - def newline(text) - text << "\n" unless text[-1] == "\n" - text - end - - def quote(text) - "\"#{text.gsub(/"/, '\\"')}\"" - end - - def escape(text, preserve_whitespace = false) - text = (preserve_whitespace ? text.dup : text.gsub(/\s+/, ' ')) - text.gsub!('\\', "\\e") - text.gsub!(/^\./, '\\\\&.') - text.gsub!(/[.'-]/) {|m| "\\#{m}" } - text - end - - def unicode_char(codepoint) - "\\[u#{codepoint.to_s(16).rjust(4, '0')}]" - end - - end - - end -end diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/converter/math_engine/mathjax.rb b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/converter/math_engine/mathjax.rb deleted file mode 100644 index 850f541d..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/converter/math_engine/mathjax.rb +++ /dev/null @@ -1,32 +0,0 @@ -# -*- coding: utf-8; frozen_string_literal: true -*- -# -#-- -# Copyright (C) 2009-2019 Thomas Leitner -# -# This file is part of kramdown which is licensed under the MIT. -#++ -# - -module Kramdown::Converter::MathEngine - - # Uses the MathJax javascript library for displaying math. - # - # Note that the javascript library itself is not include or linked, this has to be done - # separately. Only the math content is marked up correctly. - module Mathjax - - def self.call(converter, el, opts) - value = converter.escape_html(el.value) - result = el.options[:category] == :block ? "\\[#{value}\\]\n" : "\\(#{value}\\)" - if el.attr.empty? - result - elsif el.options[:category] == :block - converter.format_as_block_html('div', el.attr, result, opts[:indent]) - else - converter.format_as_span_html('span', el.attr, "$#{el.value}$") - end - end - - end - -end diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/converter/remove_html_tags.rb b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/converter/remove_html_tags.rb deleted file mode 100644 index e2256047..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/converter/remove_html_tags.rb +++ /dev/null @@ -1,57 +0,0 @@ -# -*- coding: utf-8; frozen_string_literal: true -*- -# -#-- -# Copyright (C) 2009-2019 Thomas Leitner -# -# This file is part of kramdown which is licensed under the MIT. -#++ -# - -require 'kramdown/converter' - -module Kramdown - - module Converter - - # Removes all block (and optionally span) level HTML tags from the element tree. - # - # This converter can be used on parsed HTML documents to get an element tree that will only - # contain native kramdown elements. - # - # *Note* that the returned element tree may not be fully conformant (i.e. the content models of - # *some elements may be violated)! - # - # This converter modifies the given tree in-place and returns it. - class RemoveHtmlTags < Base - - def initialize(root, options) - super - @options[:template] = '' - end - - def convert(el) - real_el, el = el, el.value if el.type == :footnote - - children = el.children.dup - index = 0 - while index < children.length - if [:xml_pi].include?(children[index].type) || - (children[index].type == :html_element && %w[style script].include?(children[index].value)) - children[index..index] = [] - elsif children[index].type == :html_element && - ((@options[:remove_block_html_tags] && children[index].options[:category] == :block) || - (@options[:remove_span_html_tags] && children[index].options[:category] == :span)) - children[index..index] = children[index].children - else - convert(children[index]) - index += 1 - end - end - el.children = children - real_el || el - end - - end - - end -end diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/converter/syntax_highlighter.rb b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/converter/syntax_highlighter.rb deleted file mode 100644 index 683acbff..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/converter/syntax_highlighter.rb +++ /dev/null @@ -1,56 +0,0 @@ -# -*- coding: utf-8; frozen_string_literal: true -*- -# -#-- -# Copyright (C) 2009-2019 Thomas Leitner -# -# This file is part of kramdown which is licensed under the MIT. -#++ -# - -module Kramdown - module Converter - - # == Container for Syntax Highlighters - # - # This module serves as container for the syntax highlighters that can be used together with - # kramdown. - # - # A syntax highlighter should not store any data itself but should use the provided converter - # object to do so (See Kramdown::Converter::Base#data). - # - # == Implementing a Syntax Highlighter - # - # Implementing a new syntax highlighter is easy because it is just an object that needs to - # respond to #call. - # - # The method #call needs to take the following arguments: - # - # converter:: This argument contains the converter object that calls the syntax highlighter. It - # can be used, for example, to store data in Kramdown::Converter::Base#data for one - # conversion run. - # - # text:: The raw text that should be highlighted. - # - # lang:: The language that the text should be highlighted for (e.g. ruby, python, ...). - # - # type:: The type of text, either :span for span-level code or :block for a codeblock. - # - # opts:: A Hash with options that may be passed from the converter. - # - # The return value of the method should be the highlighted text, suitable for the given - # converter (e.g. HTML for the HTML converter). - # - # == Special Implementation Details - # - # HTML converter:: If the syntax highlighter is used with an HTML converter, it should return - # :block type text correctly wrapped (i.e. normally inside a pre-tag, but may - # also be a table-tag or just a div-tag) but :span type text *without* a - # code-tag! - # - # Also, a syntax highlighter should store the default highlighting language for - # the invocation in the +opts+ hash under the key :default_lang. - module SyntaxHighlighter - end - - end -end diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/converter/syntax_highlighter/minted.rb b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/converter/syntax_highlighter/minted.rb deleted file mode 100644 index 2119f002..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/converter/syntax_highlighter/minted.rb +++ /dev/null @@ -1,35 +0,0 @@ -# -*- coding: utf-8; frozen_string_literal: true -*- -# -#-- -# Copyright (C) 2009-2019 Thomas Leitner -# -# This file is part of kramdown which is licensed under the MIT. -#++ -# - -module Kramdown::Converter::SyntaxHighlighter - - # Uses Minted to highlight code blocks and code spans. - module Minted - - def self.call(converter, text, lang, type, _opts) - opts = converter.options[:syntax_highlighter_opts] - - # Fallback to default language - lang ||= opts[:default_lang] - - options = [] - options << "breaklines" if opts[:wrap] - options << "linenos" if opts[:line_numbers] - options << "frame=#{opts[:frame]}" if opts[:frame] - - if lang && type == :block - "\\begin{minted}[#{options.join(',')}]{#{lang}}\n#{text}\n\\end{minted}" - elsif lang && type == :span - "\\mintinline{#{lang}}{#{text}}" - else - nil - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/converter/syntax_highlighter/rouge.rb b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/converter/syntax_highlighter/rouge.rb deleted file mode 100644 index ed6a4f83..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/converter/syntax_highlighter/rouge.rb +++ /dev/null @@ -1,85 +0,0 @@ -# -*- coding: utf-8; frozen_string_literal: true -*- -# -#-- -# Copyright (C) 2009-2019 Thomas Leitner -# -# This file is part of kramdown which is licensed under the MIT. -#++ -# - -module Kramdown::Converter::SyntaxHighlighter - - # Uses Rouge which is CSS-compatible to Pygments to highlight code blocks and code spans. - module Rouge - - begin - require 'rouge' - - # Highlighting via Rouge is available if this constant is +true+. - AVAILABLE = true - rescue LoadError, SyntaxError - AVAILABLE = false # :nodoc: - end - - def self.call(converter, text, lang, type, call_opts) - opts = options(converter, type) - call_opts[:default_lang] = opts[:default_lang] - return nil unless lang || opts[:default_lang] || opts[:guess_lang] - - lexer = ::Rouge::Lexer.find_fancy(lang || opts[:default_lang], text) - return nil if opts[:disable] || !lexer || (lexer.tag == "plaintext" && !opts[:guess_lang]) - - opts[:css_class] ||= 'highlight' # For backward compatibility when using Rouge 2.0 - formatter = formatter_class(opts).new(opts) - formatter.format(lexer.lex(text)) - end - - def self.options(converter, type) - prepare_options(converter) - converter.data[:syntax_highlighter_rouge][type] - end - - def self.prepare_options(converter) - return if converter.data.key?(:syntax_highlighter_rouge) - - cache = converter.data[:syntax_highlighter_rouge] = {} - - opts = converter.options[:syntax_highlighter_opts].dup - - span_opts = opts.delete(:span)&.dup || {} - block_opts = opts.delete(:block)&.dup || {} - normalize_keys(span_opts) - normalize_keys(block_opts) - - cache[:span] = opts.merge(span_opts) - cache[:span][:wrap] = false - - cache[:block] = opts.merge(block_opts) - end - - def self.normalize_keys(hash) - return if hash.empty? - - hash.keys.each do |k| - hash[k.kind_of?(String) ? Kramdown::Options.str_to_sym(k) : k] = hash.delete(k) - end - end - - def self.formatter_class(opts = {}) - case formatter = opts[:formatter] - when Class - formatter - when /\A[[:upper:]][[:alnum:]_]*\z/ - ::Rouge::Formatters.const_get(formatter, false) - else - # Available in Rouge 2.0 or later - ::Rouge::Formatters::HTMLLegacy - end - rescue NameError - # Fallback to Rouge 1.x - ::Rouge::Formatters::HTML - end - - end - -end diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/converter/toc.rb b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/converter/toc.rb deleted file mode 100644 index 7ffbc5d3..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/converter/toc.rb +++ /dev/null @@ -1,69 +0,0 @@ -# -*- coding: utf-8; frozen_string_literal: true -*- -# -#-- -# Copyright (C) 2009-2019 Thomas Leitner -# -# This file is part of kramdown which is licensed under the MIT. -#++ -# - -require 'kramdown/converter' - -module Kramdown - - module Converter - - # Converts a Kramdown::Document to an element tree that represents the table of contents. - # - # The returned tree consists of Element objects of type :toc where the root element is just used - # as container object. Each :toc element contains as value the wrapped :header element and under - # the attribute key :id the header ID that should be used (note that this ID may not exist in - # the wrapped element). - # - # Since the TOC tree consists of special :toc elements, one cannot directly feed this tree to - # other converters! - class Toc < Base - - def initialize(root, options) - super - @toc = Element.new(:toc) - @stack = [] - @options[:template] = '' - end - - def convert(el) - if el.type == :header && in_toc?(el) - attr = el.attr.dup - attr['id'] = generate_id(el.options[:raw_text]) if @options[:auto_ids] && !attr['id'] - add_to_toc(el, attr['id']) if attr['id'] - else - el.children.each {|child| convert(child) } - end - @toc - end - - private - - def add_to_toc(el, id) - toc_element = Element.new(:toc, el, id: id) - - success = false - until success - if @stack.empty? - @toc.children << toc_element - @stack << toc_element - success = true - elsif @stack.last.value.options[:level] < el.options[:level] - @stack.last.children << toc_element - @stack << toc_element - success = true - else - @stack.pop - end - end - end - - end - - end -end diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/document.rb b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/document.rb deleted file mode 100644 index 8b75f84b..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/document.rb +++ /dev/null @@ -1,139 +0,0 @@ -# -*- coding: utf-8; frozen_string_literal: true -*- -# -#-- -# Copyright (C) 2009-2019 Thomas Leitner -# -# This file is part of kramdown which is licensed under the MIT. -#++ -# -# = kramdown -# -# kramdown is fast, pure Ruby Markdown superset converter, using a strict syntax definition and -# supporting several common extensions. -# -# The kramdown library is mainly written to support the kramdown-to-HTML conversion chain. However, -# due to its flexibility it supports other input and output formats as well. Here is a list of the -# supported formats: -# -# * input formats: kramdown (a Markdown superset), Markdown, GFM, HTML -# * output formats: HTML, kramdown, LaTeX (and therefore PDF), PDF via Prawn -# -# All the documentation on the available input and output formats is available at -# http://kramdown.gettalong.org. -# -# == Usage -# -# kramdown has a simple API, so using kramdown is as easy as -# -# require 'kramdown' -# -# Kramdown::Document.new(text).to_html -# -# For detailed information have a look at the *\Kramdown::Document* class. -# -# == License -# -# MIT - see the COPYING file. - -require 'kramdown/version' -require 'kramdown/element' -require 'kramdown/error' -require 'kramdown/parser' -require 'kramdown/converter' -require 'kramdown/options' -require 'kramdown/utils' - -module Kramdown - - # Return the data directory for kramdown. - def self.data_dir - unless defined?(@data_dir) - require 'rbconfig' - @data_dir = File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'data', 'kramdown')) - @data_dir = File.expand_path(File.join(RbConfig::CONFIG["datadir"], "kramdown")) unless File.exist?(@data_dir) - raise "kramdown data directory not found! This is a bug, please report it!" unless File.directory?(@data_dir) - end - @data_dir - end - - # The main interface to kramdown. - # - # This class provides a one-stop-shop for using kramdown to convert text into various output - # formats. Use it like this: - # - # require 'kramdown' - # doc = Kramdown::Document.new('This *is* some kramdown text') - # puts doc.to_html - # - # The #to_html method is a shortcut for using the Converter::Html class. See #method_missing for - # more information. - # - # The second argument to the ::new method is an options hash for customizing the behaviour of the - # used parser and the converter. See ::new for more information! - class Document - - # The root Element of the element tree. It is immediately available after the ::new method has - # been called. - attr_accessor :root - - # The options hash which holds the options for parsing/converting the Kramdown document. - attr_reader :options - - # An array of warning messages. It is filled with warnings during the parsing phase (i.e. in - # ::new) and the conversion phase. - attr_reader :warnings - - # Create a new Kramdown document from the string +source+ and use the provided +options+. The - # options that can be used are defined in the Options module. - # - # The special options key :input can be used to select the parser that should parse the - # +source+. It has to be the name of a class in the Kramdown::Parser module. For example, to - # select the kramdown parser, one would set the :input key to +Kramdown+. If this key is not - # set, it defaults to +Kramdown+. - # - # The +source+ is immediately parsed by the selected parser so that the root element is - # immediately available and the output can be generated. - def initialize(source, options = {}) - @options = Options.merge(options).freeze - parser = (@options[:input] || 'kramdown').to_s - parser = parser[0..0].upcase + parser[1..-1] - try_require('parser', parser) - if Parser.const_defined?(parser) - @root, @warnings = Parser.const_get(parser).parse(source, @options) - else - raise Kramdown::Error, "kramdown has no parser to handle the specified " \ - "input format: #{@options[:input]}" - end - end - - # Check if a method is invoked that begins with +to_+ and if so, try to instantiate a converter - # class (i.e. a class in the Kramdown::Converter module) and use it for converting the document. - # - # For example, +to_html+ would instantiate the Kramdown::Converter::Html class. - def method_missing(id, *attr, &block) - if id.to_s =~ /^to_(\w+)$/ && (name = Utils.camelize($1)) && - try_require('converter', name) && Converter.const_defined?(name) - output, warnings = Converter.const_get(name).convert(@root, @options) - @warnings.concat(warnings) - output - else - super - end - end - - def inspect #:nodoc: - "" - end - - # Try requiring a parser or converter class and don't raise an error if the file is not found. - def try_require(type, name) - require("kramdown/#{type}/#{Utils.snake_case(name)}") - true - rescue LoadError - true - end - protected :try_require - - end - -end diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/element.rb b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/element.rb deleted file mode 100644 index c1d1facd..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/element.rb +++ /dev/null @@ -1,551 +0,0 @@ -# -*- coding: utf-8; frozen_string_literal: true -*- -# -#-- -# Copyright (C) 2009-2019 Thomas Leitner -# -# This file is part of kramdown which is licensed under the MIT. -#++ -# - -module Kramdown - - # Represents all elements in the element tree. - # - # kramdown only uses this one class for representing all available elements in an element tree - # (paragraphs, headers, emphasis, ...). The type of element can be set via the #type accessor. - # - # The root of a kramdown element tree has to be an element of type :root. It needs to have certain - # option keys set so that conversions work correctly. If only a part of a tree should be - # converted, duplicate the root node and assign the #children appropriately, e.g: - # - # root = doc.root - # new_root = root.dup - # new_root.children = [root.children[0]] # assign new array with elements to convert - # - # Following is a description of all supported element types. - # - # Note that the option :location may contain the start line number of an element in the source - # document. - # - # == Structural Elements - # - # === :root - # - # [Category] None - # [Usage context] As the root element of a document - # [Content model] Block-level elements - # - # Represents the root of a kramdown document. - # - # The root element contains the following option keys: - # - # :encoding:: When running on Ruby 1.9 this key has to be set to the encoding used for the text - # parts of the kramdown document. - # - # :abbrev_defs:: This key may be used to store the mapping of abbreviation to abbreviation - # definition. - # - # :abbrev_attr:: This key may be used to store the mapping of abbreviation to abbreviation - # attributes. - # - # :options:: This key may be used to store options that were set during parsing of the document. - # - # :footnote_count:: This key stores the number of actually referenced footnotes of the document. - # - # === :blank - # - # [Category] Block-level element - # [Usage context] Where block-level elements are expected - # [Content model] Empty - # - # Represents one or more blank lines. It is not allowed to have two or more consecutive blank - # elements. - # - # The +value+ field may contain the original content of the blank lines. - # - # - # === :p - # - # [Category] Block-level element - # [Usage context] Where block-level elements are expected - # [Content model] Span-level elements - # - # Represents a paragraph. - # - # If the option :transparent is +true+, this element just represents a block of text. I.e. this - # element just functions as a container for span-level elements. - # - # - # === :header - # - # [Category] Block-level element - # [Usage context] Where block-level elements are expected - # [Content model] Span-level elements - # - # Represents a header. - # - # The option :level specifies the header level and has to contain a number between 1 and \6. The - # option :raw_text has to contain the raw header text. - # - # - # === :blockquote - # - # [Category] Block-level element - # [Usage context] Where block-level elements are expected - # [Content model] Block-level elements - # - # Represents a blockquote. - # - # - # === :codeblock - # - # [Category] Block-level element - # [Usage context] Where block-level elements are expected - # [Content model] Empty - # - # Represents a code block, i.e. a block of text that should be used as-is. - # - # The +value+ field has to contain the content of the code block. - # - # The option :lang specifies a highlighting language with possible HTML style options (e.g. - # php?start_inline=1) and should be used instead of a possibly also available language embedded in - # a class name of the form 'language-LANG'. - # - # - # === :ul - # - # [Category] Block-level element - # [Usage context] Where block-level elements are expected - # [Content model] One or more :li elements - # - # Represents an unordered list. - # - # - # === :ol - # - # [Category] Block-level element - # [Usage context] Where block-level elements are expected - # [Content model] One or more :li elements - # - # Represents an ordered list. - # - # - # === :li - # - # [Category] Block-level element - # [Usage context] Inside :ol and :ul elements - # [Content model] Block-level elements - # - # Represents a list item of an ordered or unordered list. - # - # Note that the first child of a list item must not be a :blank element! - # - # - # === :dl - # - # [Category] Block-level element - # [Usage context] Where block-level elements are expected - # [Content model] One or more groups each consisting of one or more :dt elements followed by one - # or more :dd elements. - # - # Represents a definition list which contains groups consisting of terms and definitions for them. - # - # - # === :dt - # - # [Category] Block-level element - # [Usage context] Before :dt or :dd elements inside a :dl elment - # [Content model] Span-level elements - # - # Represents the term part of a term-definition group in a definition list. - # - # - # === :dd - # - # [Category] Block-level element - # [Usage context] After :dt or :dd elements inside a :dl elment - # [Content model] Block-level elements - # - # Represents the definition part of a term-definition group in a definition list. - # - # - # === :hr - # - # [Category] Block-level element - # [Usage context] Where block-level elements are expected - # [Content model] None - # - # Represents a horizontal line. - # - # - # === :table - # - # [Category] Block-level element - # [Usage context] Where block-level elements are expected - # [Content model] Zero or one :thead elements, one or more :tbody elements, zero or one :tfoot - # elements - # - # Represents a table. Each table row (i.e. :tr element) of the table has to contain the same - # number of :td elements. - # - # The option :alignment has to be an array containing the alignment values, exactly one for each - # column of the table. The possible alignment values are :left, :center, :right and :default. - # - # - # === :thead - # - # [Category] None - # [Usage context] As first element inside a :table element - # [Content model] One or more :tr elements - # - # Represents the table header. - # - # - # === :tbody - # - # [Category] None - # [Usage context] After a :thead element but before a :tfoot element inside a :table element - # [Content model] One or more :tr elements - # - # Represents a table body. - # - # - # === :tfoot - # - # [Category] None - # [Usage context] As last element inside a :table element - # [Content model] One or more :tr elements - # - # Represents the table footer. - # - # - # === :tr - # - # [Category] None - # [Usage context] Inside :thead, :tbody and :tfoot elements - # [Content model] One or more :td elements - # - # Represents a table row. - # - # - # === :td - # - # [Category] Block-level element - # [Usage context] Inside :tr elements - # [Content model] As child of :thead/:tr span-level elements, as child of :tbody/:tr and - # :tfoot/:tr block-level elements - # - # Represents a table cell. - # - # - # === :math - # - # [Category] Block/span-level element - # [Usage context] Where block/span-level elements are expected - # [Content model] None - # - # Represents mathematical text that is written in LaTeX. - # - # The +value+ field has to contain the actual mathematical text. - # - # The option :category has to be set to either :span or :block depending on the context where the - # element is used. - # - # - # == Text Markup Elements - # - # === :text - # - # [Category] Span-level element - # [Usage context] Where span-level elements are expected - # [Content model] None - # - # Represents text. - # - # The +value+ field has to contain the text itself. - # - # - # === :br - # - # [Category] Span-level element - # [Usage context] Where span-level elements are expected - # [Content model] None - # - # Represents a hard line break. - # - # - # === :a - # - # [Category] Span-level element - # [Usage context] Where span-level elements are expected - # [Content model] Span-level elements - # - # Represents a link to an URL. - # - # The attribute +href+ has to be set to the URL to which the link points. The attribute +title+ - # optionally contains the title of the link. - # - # - # === :img - # - # [Category] Span-level element - # [Usage context] Where span-level elements are expected - # [Content model] None - # - # Represents an image. - # - # The attribute +src+ has to be set to the URL of the image. The attribute +alt+ has to contain a - # text description of the image. The attribute +title+ optionally contains the title of the image. - # - # - # === :codespan - # - # [Category] Span-level element - # [Usage context] Where span-level elements are expected - # [Content model] None - # - # Represents verbatim text. - # - # The +value+ field has to contain the content of the code span. - # - # - # === :footnote - # - # [Category] Span-level element - # [Usage context] Where span-level elements are expected - # [Content model] None - # - # Represents a footnote marker. - # - # The +value+ field has to contain an element whose children are the content of the footnote. The - # option :name has to contain a valid and unique footnote name. A valid footnote name consists of - # a word character or a digit and then optionally followed by other word characters, digits or - # dashes. - # - # - # === :em - # - # [Category] Span-level element - # [Usage context] Where span-level elements are expected - # [Content model] Span-level elements - # - # Represents emphasis of its contents. - # - # - # === :strong - # - # [Category] Span-level element - # [Usage context] Where span-level elements are expected - # [Content model] Span-level elements - # - # Represents strong importance for its contents. - # - # - # === :entity - # - # [Category] Span-level element - # [Usage context] Where span-level elements are expected - # [Content model] None - # - # Represents an HTML entity. - # - # The +value+ field has to contain an instance of Kramdown::Utils::Entities::Entity. The option - # :original can be used to store the original representation of the entity. - # - # - # === :typographic_sym - # - # [Category] Span-level element - # [Usage context] Where span-level elements are expected - # [Content model] None - # - # Represents a typographic symbol. - # - # The +value+ field needs to contain a Symbol representing the specific typographic symbol from - # the following list: - # - # :mdash:: An mdash character (---) - # :ndash:: An ndash character (--) - # :hellip:: An ellipsis (...) - # :laquo:: A left guillemet (<<) - # :raquo:: A right guillemet (>>) - # :laquo_space:: A left guillemet with a space (<< ) - # :raquo_space:: A right guillemet with a space ( >>) - # - # - # === :smart_quote - # - # [Category] Span-level element - # [Usage context] Where span-level elements are expected - # [Content model] None - # - # Represents a quotation character. - # - # The +value+ field needs to contain a Symbol representing the specific quotation character: - # - # :lsquo:: Left single quote - # :rsquo:: Right single quote - # :ldquo:: Left double quote - # :rdquo:: Right double quote - # - # - # === :abbreviation - # - # [Category] Span-level element - # [Usage context] Where span-level elements are expected - # [Content model] None - # - # Represents a text part that is an abbreviation. - # - # The +value+ field has to contain the text part that is the abbreviation. The definition of the - # abbreviation is stored in the :root element of the document. - # - # - # == Other Elements - # - # === :html_element - # - # [Category] Block/span-level element - # [Usage context] Where block/span-level elements or raw HTML elements are expected - # [Content model] Depends on the element - # - # Represents an HTML element. - # - # The +value+ field has to contain the name of the HTML element the element is representing. - # - # The option :category has to be set to either :span or :block depending on the whether the - # element is a block-level or a span-level element. The option :content_model has to be set to the - # content model for the element (either :block if it contains block-level elements, :span if it - # contains span-level elements or :raw if it contains raw content). - # - # - # === :xml_comment - # - # [Category] Block/span-level element - # [Usage context] Where block/span-level elements are expected or in raw HTML elements - # [Content model] None - # - # Represents an XML/HTML comment. - # - # The +value+ field has to contain the whole XML/HTML comment including the delimiters. - # - # The option :category has to be set to either :span or :block depending on the context where the - # element is used. - # - # - # === :xml_pi - # - # [Category] Block/span-level element - # [Usage context] Where block/span-level elements are expected or in raw HTML elements - # [Content model] None - # - # Represents an XML/HTML processing instruction. - # - # The +value+ field has to contain the whole XML/HTML processing instruction including the - # delimiters. - # - # The option :category has to be set to either :span or :block depending on the context where the - # element is used. - # - # - # === :comment - # - # [Category] Block/span-level element - # [Usage context] Where block/span-level elements are expected - # [Content model] None - # - # Represents a comment. - # - # The +value+ field has to contain the comment. - # - # The option :category has to be set to either :span or :block depending on the context where the - # element is used. If it is set to :span, then no blank lines are allowed in the comment. - # - # - # === :raw - # - # [Category] Block/span-level element - # [Usage context] Where block/span-level elements are expected - # [Content model] None - # - # Represents a raw string that should not be modified. For example, the element could contain some - # HTML code that should be output as-is without modification and escaping. - # - # The +value+ field has to contain the actual raw text. - # - # The option :category has to be set to either :span or :block depending on the context where the - # element is used. If it is set to :span, then no blank lines are allowed in the raw text. - # - # The option :type can be set to an array of strings to define for which converters the raw string - # is valid. - # - class Element - - # A symbol representing the element type. For example, :p or :blockquote. - attr_accessor :type - - # The value of the element. The interpretation of this field depends on the type of the element. - # Many elements don't use this field. - attr_accessor :value - - # The child elements of this element. - attr_accessor :children - - # Create a new Element object of type +type+. The optional parameters +value+, +attr+ and - # +options+ can also be set in this constructor for convenience. - def initialize(type, value = nil, attr = nil, options = nil) - @type, @value, @attr, @options = type, value, attr, options - @children = [] - end - - # The attributes of the element. - def attr - @attr ||= {} - end - - # The options hash for the element. It is used for storing arbitray options. - def options - @options ||= {} - end - - def inspect #:nodoc: - "hallo` the emphasis tag - would normally be converted to an `:html` element with tag type `:em`. - If `html_to_native` is `true`, then the emphasis would be converted to a - native `:em` element. - - This is useful for converters that cannot deal with HTML elements. - - Default: false - Used by: kramdown parser - EOF - - define(:link_defs, Object, {}, <<~EOF) do |val| - Pre-defines link definitions - - This option can be used to pre-define link definitions. The value needs - to be a Hash where the keys are the link identifiers and the values are - two element Arrays with the link URL and the link title. - - If the value is a String, it has to contain a valid YAML hash and the - hash has to follow the above guidelines. - - Default: {} - Used by: kramdown parser - EOF - val = simple_hash_validator(val, :link_defs) - val.each do |_k, v| - if !(Array === v) || v.size > 2 || v.empty? - raise Kramdown::Error, "Invalid structure for hash value of option #{name}" - end - v << nil if v.size == 1 - end - val - end - - define(:footnote_nr, Integer, 1, <<~EOF) - The number of the first footnote - - This option can be used to specify the number that is used for the first - footnote. - - Default: 1 - Used by: HTML converter - EOF - - define(:entity_output, Symbol, :as_char, <<~EOF) - Defines how entities are output - - The possible values are :as_input (entities are output in the same - form as found in the input), :numeric (entities are output in numeric - form), :symbolic (entities are output in symbolic form if possible) or - :as_char (entities are output as characters if possible, only available - on Ruby 1.9). - - Default: :as_char - Used by: HTML converter, kramdown converter - EOF - - TOC_LEVELS_RANGE = (1..6).freeze - TOC_LEVELS_ARRAY = TOC_LEVELS_RANGE.to_a.freeze - private_constant :TOC_LEVELS_RANGE, :TOC_LEVELS_ARRAY - - define(:toc_levels, Object, TOC_LEVELS_ARRAY, <<~EOF) do |val| - Defines the levels that are used for the table of contents - - The individual levels can be specified by separating them with commas - (e.g. 1,2,3) or by using the range syntax (e.g. 1..3). Only the - specified levels are used for the table of contents. - - Default: 1..6 - Used by: HTML/Latex converter - EOF - case val - when String - if val =~ /^(\d)\.\.(\d)$/ - val = Range.new($1.to_i, $2.to_i).to_a - elsif val =~ /^\d(?:,\d)*$/ - val = val.split(/,/).map(&:to_i).uniq - else - raise Kramdown::Error, "Invalid syntax for option toc_levels" - end - when Array - unless val.eql?(TOC_LEVELS_ARRAY) - val = val.map(&:to_i).uniq - end - when Range - if val.eql?(TOC_LEVELS_RANGE) - val = TOC_LEVELS_ARRAY - else - val = val.map(&:to_i).uniq - end - else - raise Kramdown::Error, "Invalid type #{val.class} for option toc_levels" - end - if val.any? {|i| !TOC_LEVELS_RANGE.cover?(i) } - raise Kramdown::Error, "Level numbers for option toc_levels have to be integers from 1 to 6" - end - val - end - - define(:line_width, Integer, 72, <<~EOF) - Defines the line width to be used when outputting a document - - Default: 72 - Used by: kramdown converter - EOF - - define(:latex_headers, Object, %w[section subsection subsubsection paragraph subparagraph subparagraph], <<~EOF) do |val| - Defines the LaTeX commands for different header levels - - The commands for the header levels one to six can be specified by - separating them with commas. - - Default: section,subsection,subsubsection,paragraph,subparagraph,subparagraph - Used by: Latex converter - EOF - simple_array_validator(val, :latex_headers, 6) - end - - SMART_QUOTES_ENTITIES = %w[lsquo rsquo ldquo rdquo].freeze - SMART_QUOTES_STR = SMART_QUOTES_ENTITIES.join(',').freeze - private_constant :SMART_QUOTES_ENTITIES, :SMART_QUOTES_STR - - define(:smart_quotes, Object, SMART_QUOTES_ENTITIES, <<~EOF) do |val| - Defines the HTML entity names or code points for smart quote output - - The entities identified by entity name or code point that should be - used for, in order, a left single quote, a right single quote, a left - double and a right double quote are specified by separating them with - commas. - - Default: lsquo,rsquo,ldquo,rdquo - Used by: HTML/Latex converter - EOF - if val == SMART_QUOTES_STR || val == SMART_QUOTES_ENTITIES - SMART_QUOTES_ENTITIES - else - val = simple_array_validator(val, :smart_quotes, 4) - val.map! {|v| Integer(v) rescue v } - val - end - end - - define(:typographic_symbols, Object, {}, <<~EOF) do |val| - Defines a mapping from typographical symbol to output characters - - Typographical symbols are normally output using their equivalent Unicode - codepoint. However, sometimes one wants to change the output, mostly to - fallback to a sequence of ASCII characters. - - This option allows this by specifying a mapping from typographical - symbol to its output string. For example, the mapping {hellip: ...} would - output the standard ASCII representation of an ellipsis. - - The available typographical symbol names are: - - * hellip: ellipsis - * mdash: em-dash - * ndash: en-dash - * laquo: left guillemet - * raquo: right guillemet - * laquo_space: left guillemet followed by a space - * raquo_space: right guillemet preceeded by a space - - Default: {} - Used by: HTML/Latex converter - EOF - val = simple_hash_validator(val, :typographic_symbols) - val.keys.each do |k| - val[k.kind_of?(String) ? str_to_sym(k) : k] = val.delete(k).to_s - end - val - end - - define(:remove_block_html_tags, Boolean, true, <<~EOF) - Remove block HTML tags - - If this option is `true`, the RemoveHtmlTags converter removes - block HTML tags. - - Default: true - Used by: RemoveHtmlTags converter - EOF - - define(:remove_span_html_tags, Boolean, false, <<~EOF) - Remove span HTML tags - - If this option is `true`, the RemoveHtmlTags converter removes - span HTML tags. - - Default: false - Used by: RemoveHtmlTags converter - EOF - - define(:header_offset, Integer, 0, <<~EOF) - Sets the output offset for headers - - If this option is c (may also be negative) then a header with level n - will be output as a header with level c+n. If c+n is lower than 1, - level 1 will be used. If c+n is greater than 6, level 6 will be used. - - Default: 0 - Used by: HTML converter, Kramdown converter, Latex converter - EOF - - define(:syntax_highlighter, Symbol, :rouge, <<~EOF) - Set the syntax highlighter - - Specifies the syntax highlighter that should be used for highlighting - code blocks and spans. If this option is set to +nil+, no syntax - highlighting is done. - - Options for the syntax highlighter can be set with the - syntax_highlighter_opts configuration option. - - Default: rouge - Used by: HTML/Latex converter - EOF - - define(:syntax_highlighter_opts, Object, {}, <<~EOF) do |val| - Set the syntax highlighter options - - Specifies options for the syntax highlighter set via the - syntax_highlighter configuration option. - - The value needs to be a hash with key-value pairs that are understood by - the used syntax highlighter. - - Default: {} - Used by: HTML/Latex converter - EOF - val = simple_hash_validator(val, :syntax_highlighter_opts) - val.keys.each do |k| - val[k.kind_of?(String) ? str_to_sym(k) : k] = val.delete(k) - end - val - end - - define(:math_engine, Symbol, :mathjax, <<~EOF) - Set the math engine - - Specifies the math engine that should be used for converting math - blocks/spans. If this option is set to +nil+, no math engine is used and - the math blocks/spans are output as is. - - Options for the selected math engine can be set with the - math_engine_opts configuration option. - - Default: mathjax - Used by: HTML converter - EOF - - define(:math_engine_opts, Object, {}, <<~EOF) do |val| - Set the math engine options - - Specifies options for the math engine set via the math_engine - configuration option. - - The value needs to be a hash with key-value pairs that are understood by - the used math engine. - - Default: {} - Used by: HTML converter - EOF - val = simple_hash_validator(val, :math_engine_opts) - val.keys.each do |k| - val[k.kind_of?(String) ? str_to_sym(k) : k] = val.delete(k) - end - val - end - - define(:footnote_backlink, String, '↩', <<~EOF) - Defines the text that should be used for the footnote backlinks - - The footnote backlink is just text, so any special HTML characters will - be escaped. - - If the footnote backlint text is an empty string, no footnote backlinks - will be generated. - - Default: '&8617;' - Used by: HTML converter - EOF - - define(:footnote_backlink_inline, Boolean, false, <<~EOF) - Specifies whether the footnote backlink should always be inline - - With the default of false the footnote backlink is placed at the end of - the last paragraph if there is one, or an extra paragraph with only the - footnote backlink is created. - - Setting this option to true tries to place the footnote backlink in the - last, possibly nested paragraph or header. If this fails (e.g. in the - case of a table), an extra paragraph with only the footnote backlink is - created. - - Default: false - Used by: HTML converter - EOF - - define(:footnote_prefix, String, '', <<~EOF) - Prefix used for footnote IDs - - This option can be used to set a prefix for footnote IDs. This is useful - when rendering multiple documents into the same output file to avoid - duplicate IDs. The prefix should only contain characters that are valid - in an ID! - - Default: '' - Used by: HTML - EOF - - define(:remove_line_breaks_for_cjk, Boolean, false, <<~EOF) - Specifies whether line breaks should be removed between CJK characters - - Default: false - Used by: HTML converter - EOF - - define(:forbidden_inline_options, Object, %w[template], <<~EOF) do |val| - Defines the options that may not be set using the {::options} extension - - The value needs to be an array of option names. - - Default: [template] - Used by: HTML converter - EOF - val.map! {|item| item.kind_of?(String) ? str_to_sym(item) : item } - simple_array_validator(val, :forbidden_inline_options) - end - - define(:list_indent, Integer, 2, <<~EOF) - Sets the number of spaces to use for list indentation - - Default: 2 - Used by: Kramdown converter - EOF - - end - -end diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser.rb b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser.rb deleted file mode 100644 index f77dcf6a..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser.rb +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8; frozen_string_literal: true -*- -# -#-- -# Copyright (C) 2009-2019 Thomas Leitner -# -# This file is part of kramdown which is licensed under the MIT. -#++ -# - -module Kramdown - - # This module contains all available parsers. A parser takes an input string and converts the - # string to an element tree. - # - # New parsers should be derived from the Base class which provides common functionality - see its - # API documentation for how to create a custom converter class. - module Parser - - autoload :Base, 'kramdown/parser/base' - autoload :Kramdown, 'kramdown/parser/kramdown' - autoload :Html, 'kramdown/parser/html' - autoload :Markdown, 'kramdown/parser/markdown' - - end - -end diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/base.rb b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/base.rb deleted file mode 100644 index 71ced7ba..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/base.rb +++ /dev/null @@ -1,131 +0,0 @@ -# -*- coding: utf-8; frozen_string_literal: true -*- -# -#-- -# Copyright (C) 2009-2019 Thomas Leitner -# -# This file is part of kramdown which is licensed under the MIT. -#++ -# - -require 'kramdown/utils' -require 'kramdown/parser' - -module Kramdown - - module Parser - - # == \Base class for parsers - # - # This class serves as base class for parsers. It provides common methods that can/should be - # used by all parsers, especially by those using StringScanner(Kramdown) for parsing. - # - # A parser object is used as a throw-away object, i.e. it is only used for storing the needed - # state information during parsing. Therefore one can't instantiate a parser object directly but - # only use the Base::parse method. - # - # == Implementing a parser - # - # Implementing a new parser is rather easy: just derive a new class from this class and put it - # in the Kramdown::Parser module -- the latter is needed so that the auto-detection of the new - # parser works correctly. Then you need to implement the +#parse+ method which has to contain - # the parsing code. - # - # Have a look at the Base::parse, Base::new and Base#parse methods for additional information! - class Base - - # The hash with the parsing options. - attr_reader :options - - # The array with the parser warnings. - attr_reader :warnings - - # The original source string. - attr_reader :source - - # The root element of element tree that is created from the source string. - attr_reader :root - - # Initialize the parser object with the +source+ string and the parsing +options+. - # - # The @root element, the @warnings array and @text_type (specifies the default type for newly - # created text nodes) are automatically initialized. - def initialize(source, options) - @source = source - @options = Kramdown::Options.merge(options) - @root = Element.new(:root, nil, nil, encoding: (source.encoding rescue nil), location: 1, - options: {}, abbrev_defs: {}, abbrev_attr: {}) - @warnings = [] - @text_type = :text - end - private_class_method(:new, :allocate) - - # Parse the +source+ string into an element tree, possibly using the parsing +options+, and - # return the root element of the element tree and an array with warning messages. - # - # Initializes a new instance of the calling class and then calls the +#parse+ method that must - # be implemented by each subclass. - def self.parse(source, options = {}) - parser = new(source, options) - parser.parse - [parser.root, parser.warnings] - end - - # Parse the source string into an element tree. - # - # The parsing code should parse the source provided in @source and build an element tree the - # root of which should be @root. - # - # This is the only method that has to be implemented by sub-classes! - def parse - raise NotImplementedError - end - - # Add the given warning +text+ to the warning array. - def warning(text) - @warnings << text - # TODO: add position information - end - - # Modify the string +source+ to be usable by the parser (unifies line ending characters to - # +\n+ and makes sure +source+ ends with a new line character). - def adapt_source(source) - unless source.valid_encoding? - raise "The source text contains invalid characters for the used encoding #{source.encoding}" - end - source = source.encode('UTF-8') - source.gsub!(/\r\n?/, "\n") - source.chomp! - source << "\n" - end - - # This helper method adds the given +text+ either to the last element in the +tree+ if it is a - # +type+ element or creates a new text element with the given +type+. - def add_text(text, tree = @tree, type = @text_type) - last = tree.children.last - if last && last.type == type - last.value << text - elsif !text.empty? - location = (last && last.options[:location] || tree.options[:location]) - tree.children << Element.new(type, text, nil, location: location) - end - end - - # Extract the part of the StringScanner +strscan+ backed string specified by the +range+. This - # method works correctly under Ruby 1.8 and Ruby 1.9. - def extract_string(range, strscan) - result = nil - begin - enc = strscan.string.encoding - strscan.string.force_encoding('ASCII-8BIT') - result = strscan.string[range].force_encoding(enc) - ensure - strscan.string.force_encoding(enc) - end - result - end - - end - - end - -end diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/html.rb b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/html.rb deleted file mode 100644 index 03e5de81..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/html.rb +++ /dev/null @@ -1,615 +0,0 @@ -# -*- coding: utf-8; frozen_string_literal: true -*- -# -#-- -# Copyright (C) 2009-2019 Thomas Leitner -# -# This file is part of kramdown which is licensed under the MIT. -#++ -# - -require 'rexml/parsers/baseparser' -require 'strscan' -require 'kramdown/utils' -require 'kramdown/parser' - -module Kramdown - - module Parser - - # Used for parsing an HTML document. - # - # The parsing code is in the Parser module that can also be used by other parsers. - class Html < Base - - # Contains all constants that are used when parsing. - module Constants - - #:stopdoc: - # The following regexps are based on the ones used by REXML, with some slight modifications. - HTML_DOCTYPE_RE = //im - HTML_COMMENT_RE = //m - HTML_INSTRUCTION_RE = /<\?(.*?)\?>/m - HTML_ATTRIBUTE_RE = /\s*(#{REXML::Parsers::BaseParser::UNAME_STR})(?:\s*=\s*(?:(\p{Word}+)|("|')(.*?)\3))?/m - HTML_TAG_RE = /<((?>#{REXML::Parsers::BaseParser::UNAME_STR}))\s*((?>\s+#{REXML::Parsers::BaseParser::UNAME_STR}(?:\s*=\s*(?:\p{Word}+|("|').*?\3))?)*)\s*(\/)?>/m - HTML_TAG_CLOSE_RE = /<\/(#{REXML::Parsers::BaseParser::UNAME_STR})\s*>/m - HTML_ENTITY_RE = /&([\w:][\-\w\.:]*);|&#(\d+);|&\#x([0-9a-fA-F]+);/ - - HTML_CONTENT_MODEL_BLOCK = %w[address applet article aside blockquote body - dd details div dl fieldset figure figcaption - footer form header hgroup iframe li main - map menu nav noscript object section summary td] - HTML_CONTENT_MODEL_SPAN = %w[a abbr acronym b bdo big button cite caption del dfn dt em - h1 h2 h3 h4 h5 h6 i ins label legend optgroup p q rb rbc - rp rt rtc ruby select small span strong sub sup th tt] - HTML_CONTENT_MODEL_RAW = %w[script style math option textarea pre code kbd samp var] - # The following elements are also parsed as raw since they need child elements that cannot - # be expressed using kramdown syntax: colgroup table tbody thead tfoot tr ul ol - - HTML_CONTENT_MODEL = Hash.new {|h, k| h[k] = :raw } - HTML_CONTENT_MODEL_BLOCK.each {|i| HTML_CONTENT_MODEL[i] = :block } - HTML_CONTENT_MODEL_SPAN.each {|i| HTML_CONTENT_MODEL[i] = :span } - HTML_CONTENT_MODEL_RAW.each {|i| HTML_CONTENT_MODEL[i] = :raw } - - # Some HTML elements like script belong to both categories (i.e. are valid in block and - # span HTML) and don't appear therefore! - # script, textarea - HTML_SPAN_ELEMENTS = %w[a abbr acronym b big bdo br button cite code del dfn em i img input - ins kbd label mark option q rb rbc rp rt rtc ruby samp select small - span strong sub sup tt u var] - HTML_BLOCK_ELEMENTS = %w[address article aside applet body blockquote caption col colgroup - dd div dl dt fieldset figcaption footer form h1 h2 h3 h4 h5 h6 - header hgroup hr html head iframe legend menu li main map nav ol - optgroup p pre section summary table tbody td th thead tfoot tr ul] - HTML_ELEMENTS_WITHOUT_BODY = %w[area base br col command embed hr img input keygen link - meta param source track wbr] - - HTML_ELEMENT = Hash.new(false) - (HTML_SPAN_ELEMENTS + HTML_BLOCK_ELEMENTS + HTML_ELEMENTS_WITHOUT_BODY + - HTML_CONTENT_MODEL.keys).each do |a| - HTML_ELEMENT[a] = true - end - end - - # Contains the parsing methods. This module can be mixed into any parser to get HTML parsing - # functionality. The only thing that must be provided by the class are instance variable - # @stack for storing the needed state and @src (instance of StringScanner) for the actual - # parsing. - module Parser - - include Constants - - # Process the HTML start tag that has already be scanned/checked via @src. - # - # Does the common processing steps and then yields to the caller for further processing - # (first parameter is the created element; the second parameter is +true+ if the HTML - # element is already closed, ie. contains no body; the third parameter specifies whether the - # body - and the end tag - need to be handled in case closed=false). - def handle_html_start_tag(line = nil) # :yields: el, closed, handle_body - name = @src[1] - name.downcase! if HTML_ELEMENT[name.downcase] - closed = !@src[4].nil? - attrs = parse_html_attributes(@src[2], line, HTML_ELEMENT[name]) - - el = Element.new(:html_element, name, attrs, category: :block) - el.options[:location] = line if line - @tree.children << el - - if !closed && HTML_ELEMENTS_WITHOUT_BODY.include?(el.value) - closed = true - end - if name == 'script' || name == 'style' - handle_raw_html_tag(name) - yield(el, false, false) - else - yield(el, closed, true) - end - end - - # Parses the given string for HTML attributes and returns the resulting hash. - # - # If the optional +line+ parameter is supplied, it is used in warning messages. - # - # If the optional +in_html_tag+ parameter is set to +false+, attributes are not modified to - # contain only lowercase letters. - def parse_html_attributes(str, line = nil, in_html_tag = true) - attrs = {} - str.scan(HTML_ATTRIBUTE_RE).each do |attr, val, _sep, quoted_val| - attr.downcase! if in_html_tag - if attrs.key?(attr) - warning("Duplicate HTML attribute '#{attr}' on line #{line || '?'} - overwriting previous one") - end - attrs[attr] = val || quoted_val || "" - end - attrs - end - - # Handle the raw HTML tag at the current position. - def handle_raw_html_tag(name) - curpos = @src.pos - if @src.scan_until(/(?=<\/#{name}\s*>)/mi) - add_text(extract_string(curpos...@src.pos, @src), @tree.children.last, :raw) - @src.scan(HTML_TAG_CLOSE_RE) - else - add_text(@src.rest, @tree.children.last, :raw) - @src.terminate - warning("Found no end tag for '#{name}' - auto-closing it") - end - end - - HTML_RAW_START = /(?=<(#{REXML::Parsers::BaseParser::UNAME_STR}|\/|!--|\?))/ # :nodoc: - - # Parse raw HTML from the current source position, storing the found elements in +el+. - # Parsing continues until one of the following criteria are fulfilled: - # - # - The end of the document is reached. - # - The matching end tag for the element +el+ is found (only used if +el+ is an HTML - # element). - # - # When an HTML start tag is found, processing is deferred to #handle_html_start_tag, - # providing the block given to this method. - def parse_raw_html(el, &block) - @stack.push(@tree) - @tree = el - - done = false - while !@src.eos? && !done - if (result = @src.scan_until(HTML_RAW_START)) - add_text(result, @tree, :text) - line = @src.current_line_number - if (result = @src.scan(HTML_COMMENT_RE)) - @tree.children << Element.new(:xml_comment, result, nil, category: :block, location: line) - elsif (result = @src.scan(HTML_INSTRUCTION_RE)) - @tree.children << Element.new(:xml_pi, result, nil, category: :block, location: line) - elsif @src.scan(HTML_TAG_RE) - if method(:handle_html_start_tag).arity.abs >= 1 - handle_html_start_tag(line, &block) - else - handle_html_start_tag(&block) # DEPRECATED: method needs to accept line number in 2.0 - end - elsif @src.scan(HTML_TAG_CLOSE_RE) - if @tree.value == (HTML_ELEMENT[@tree.value] ? @src[1].downcase : @src[1]) - done = true - else - add_text(@src.matched, @tree, :text) - warning("Found invalidly used HTML closing tag for '#{@src[1]}' on " \ - "line #{line} - ignoring it") - end - else - add_text(@src.getch, @tree, :text) - end - else - add_text(@src.rest, @tree, :text) - @src.terminate - if @tree.type == :html_element - warning("Found no end tag for '#{@tree.value}' on line " \ - "#{@tree.options[:location]} - auto-closing it") - end - done = true - end - end - - @tree = @stack.pop - end - - end - - # Converts HTML elements to native elements if possible. - class ElementConverter - - # :stopdoc: - - include Constants - include ::Kramdown::Utils::Entities - - REMOVE_TEXT_CHILDREN = %w[html head hgroup ol ul dl table colgroup tbody thead tfoot tr - select optgroup] - WRAP_TEXT_CHILDREN = %w[body section nav article aside header footer address div li dd - blockquote figure figcaption fieldset form] - REMOVE_WHITESPACE_CHILDREN = %w[body section nav article aside header footer address - div li dd blockquote figure figcaption td th fieldset form] - STRIP_WHITESPACE = %w[address article aside blockquote body caption dd div dl dt fieldset - figcaption form footer header h1 h2 h3 h4 h5 h6 legend li nav p - section td th] - SIMPLE_ELEMENTS = %w[em strong blockquote hr br img p thead tbody tfoot tr td th ul ol dl - li dl dt dd] - - def initialize(root) - @root = root - end - - def self.convert(root, el = root) - new(root).process(el) - end - - # Convert the element +el+ and its children. - def process(el, do_conversion = true, preserve_text = false, parent = nil) - case el.type - when :xml_comment, :xml_pi - ptype = if parent.nil? - 'div' - else - case parent.type - when :html_element then parent.value - when :code_span then 'code' - when :code_block then 'pre' - when :header then 'h1' - else parent.type.to_s - end - end - el.options.replace(category: (HTML_CONTENT_MODEL[ptype] == :span ? :span : :block)) - return - when :html_element - when :root - el.children.map! do |c| - if c.type == :text - process_text(c.value, !do_conversion) - else - process(c) - c - end - end.flatten! - remove_whitespace_children(el) - return - else return - end - - mname = "convert_#{el.value}" - if do_conversion && self.class.method_defined?(mname) - send(mname, el) - else - type = el.value - remove_text_children(el) if do_conversion && REMOVE_TEXT_CHILDREN.include?(type) - - if do_conversion && SIMPLE_ELEMENTS.include?(type) - set_basics(el, type.intern) - process_children(el, do_conversion, preserve_text) - else - process_html_element(el, do_conversion, preserve_text) - end - - if do_conversion - strip_whitespace(el) if STRIP_WHITESPACE.include?(type) - remove_whitespace_children(el) if REMOVE_WHITESPACE_CHILDREN.include?(type) - wrap_text_children(el) if WRAP_TEXT_CHILDREN.include?(type) - end - end - end - - def process_children(el, do_conversion = true, preserve_text = false) - el.children.map! do |c| - if c.type == :text - process_text(c.value, preserve_text || !do_conversion) - else - process(c, do_conversion, preserve_text, el) - c - end - end.flatten! - end - - # Process the HTML text +raw+: compress whitespace (if +preserve+ is +false+) and convert - # entities in entity elements. - def process_text(raw, preserve = false) - raw.gsub!(/\s+/, ' ') unless preserve - src = Kramdown::Utils::StringScanner.new(raw) - result = [] - until src.eos? - if (tmp = src.scan_until(/(?=#{HTML_ENTITY_RE})/o)) - result << Element.new(:text, tmp) - src.scan(HTML_ENTITY_RE) - val = src[1] || (src[2]&.to_i) || src[3].hex - result << if %w[lsquo rsquo ldquo rdquo].include?(val) - Element.new(:smart_quote, val.intern) - elsif %w[mdash ndash hellip laquo raquo].include?(val) - Element.new(:typographic_sym, val.intern) - else - begin - Element.new(:entity, entity(val), nil, original: src.matched) - rescue ::Kramdown::Error - src.pos -= src.matched_size - 1 - Element.new(:entity, ::Kramdown::Utils::Entities.entity('amp')) - end - end - else - result << Element.new(:text, src.rest) - src.terminate - end - end - result - end - - def process_html_element(el, do_conversion = true, preserve_text = false) - el.options.replace(category: HTML_SPAN_ELEMENTS.include?(el.value) ? :span : :block, - content_model: (do_conversion ? HTML_CONTENT_MODEL[el.value] : :raw)) - process_children(el, do_conversion, preserve_text) - end - - def remove_text_children(el) - el.children.delete_if {|c| c.type == :text } - end - - def wrap_text_children(el) - tmp = [] - last_is_p = false - el.children.each do |c| - if !c.block? || c.type == :text - unless last_is_p - tmp << Element.new(:p, nil, nil, transparent: true) - last_is_p = true - end - tmp.last.children << c - tmp - else - tmp << c - last_is_p = false - end - end - el.children = tmp - end - - def strip_whitespace(el) - return if el.children.empty? - if el.children.first.type == :text - el.children.first.value.lstrip! - end - if el.children.last.type == :text - el.children.last.value.rstrip! - end - end - - def remove_whitespace_children(el) - i = -1 - el.children = el.children.reject do |c| - i += 1 - c.type == :text && c.value.strip.empty? && - (i == 0 || i == el.children.length - 1 || ((el.children[i - 1]).block? && - (el.children[i + 1]).block?)) - end - end - - def set_basics(el, type, opts = {}) - el.type = type - el.options.replace(opts) - el.value = nil - end - - def extract_text(el, raw) - raw << el.value.to_s if el.type == :text - el.children.each {|c| extract_text(c, raw) } - end - - def convert_textarea(el) - process_html_element(el, true, true) - end - - def convert_a(el) - if el.attr['href'] - set_basics(el, :a) - process_children(el) - else - process_html_element(el, false) - end - end - - EMPHASIS_TYPE_MAP = {'em' => :em, 'i' => :em, 'strong' => :strong, 'b' => :strong} - def convert_em(el) - text = +'' - extract_text(el, text) - if text =~ /\A\s/ || text =~ /\s\z/ - process_html_element(el, false) - else - set_basics(el, EMPHASIS_TYPE_MAP[el.value]) - process_children(el) - end - end - %w[b strong i].each do |i| - alias_method("convert_#{i}".to_sym, :convert_em) - end - - def convert_h1(el) - set_basics(el, :header, level: el.value[1..1].to_i) - extract_text(el, el.options[:raw_text] = +'') - process_children(el) - end - %w[h2 h3 h4 h5 h6].each do |i| - alias_method("convert_#{i}".to_sym, :convert_h1) - end - - def convert_code(el) - raw = +'' - extract_text(el, raw) - result = process_text(raw, true) - begin - str = result.inject(+'') do |mem, c| - if c.type == :text - mem << c.value - elsif c.type == :entity - mem << if [60, 62, 34, 38].include?(c.value.code_point) - c.value.code_point.chr - else - c.value.char - end - elsif c.type == :smart_quote || c.type == :typographic_sym - mem << entity(c.value.to_s).char - else - raise "Bug - please report" - end - end - result.clear - result << Element.new(:text, str) - rescue StandardError - end - if result.length > 1 || result.first.type != :text - process_html_element(el, false, true) - else - if el.value == 'code' - set_basics(el, :codespan) - el.attr['class']&.gsub!(/\s+\bhighlighter-\w+\b|\bhighlighter-\w+\b\s*/, '') - else - set_basics(el, :codeblock) - if el.children.size == 1 && el.children.first.value == 'code' - value = (el.children.first.attr['class'] || '').scan(/\blanguage-\S+/).first - el.attr['class'] = "#{value} #{el.attr['class']}".rstrip if value - end - end - el.value = result.first.value - el.children.clear - end - end - alias convert_pre convert_code - - def convert_table(el) - unless is_simple_table?(el) - process_html_element(el, false) - return - end - remove_text_children(el) - process_children(el) - set_basics(el, :table) - - calc_alignment = lambda do |c| - if c.type == :tr - el.options[:alignment] = c.children.map do |td| - if td.attr['style'] - td.attr['style'].slice!(/(?:;\s*)?text-align:\s+(center|left|right)/) - td.attr.delete('style') if td.attr['style'].strip.empty? - $1 ? $1.to_sym : :default - else - :default - end - end - else - c.children.each {|cc| calc_alignment.call(cc) } - end - end - calc_alignment.call(el) - el.children.delete_if {|c| c.type == :html_element } - - change_th_type = lambda do |c| - if c.type == :th - c.type = :td - else - c.children.each {|cc| change_th_type.call(cc) } - end - end - change_th_type.call(el) - - if el.children.first.type == :tr - tbody = Element.new(:tbody) - tbody.children = el.children - el.children = [tbody] - end - end - - def is_simple_table?(el) - only_phrasing_content = lambda do |c| - c.children.all? do |cc| - (cc.type == :text || !HTML_BLOCK_ELEMENTS.include?(cc.value)) && only_phrasing_content.call(cc) - end - end - check_cells = proc do |c| - if c.value == 'th' || c.value == 'td' - return false unless only_phrasing_content.call(c) - else - c.children.each {|cc| check_cells.call(cc) } - end - end - check_cells.call(el) - - nr_cells = 0 - check_nr_cells = lambda do |t| - if t.value == 'tr' - count = t.children.select {|cc| cc.value == 'th' || cc.value == 'td' }.length - if count != nr_cells - if nr_cells == 0 - nr_cells = count - else - nr_cells = -1 - break - end - end - else - t.children.each {|cc| check_nr_cells.call(cc) } - end - end - check_nr_cells.call(el) - return false if nr_cells == -1 - - alignment = nil - check_alignment = proc do |t| - if t.value == 'tr' - cur_alignment = t.children.select {|cc| cc.value == 'th' || cc.value == 'td' }.map do |cell| - md = /text-align:\s+(center|left|right|justify|inherit)/.match(cell.attr['style'].to_s) - return false if md && (md[1] == 'justify' || md[1] == 'inherit') - md.nil? ? :default : md[1] - end - alignment = cur_alignment if alignment.nil? - return false if alignment != cur_alignment - else - t.children.each {|cc| check_alignment.call(cc) } - end - end - check_alignment.call(el) - - check_rows = lambda do |t, type| - t.children.all? {|r| (r.value == 'tr' || r.type == :text) && r.children.all? {|c| c.value == type || c.type == :text }} - end - check_rows.call(el, 'td') || - (el.children.all? do |t| - t.type == :text || (t.value == 'thead' && check_rows.call(t, 'th')) || - ((t.value == 'tfoot' || t.value == 'tbody') && check_rows.call(t, 'td')) - end && el.children.any? {|t| t.value == 'tbody' }) - end - - def convert_script(el) - if !is_math_tag?(el) - process_html_element(el) - else - handle_math_tag(el) - end - end - - def is_math_tag?(el) - el.attr['type'].to_s =~ /\bmath\/tex\b/ - end - - def handle_math_tag(el) - set_basics(el, :math, category: (el.attr['type'] =~ /mode=display/ ? :block : :span)) - el.value = el.children.shift.value.sub(/\A(?:%\s*)?\z/m, '\1') - el.attr.delete('type') - end - - end - - include Parser - - # Parse the source string provided on initialization as HTML document. - def parse - @stack, @tree = [], @root - @src = Kramdown::Utils::StringScanner.new(adapt_source(source)) - - while true - if (result = @src.scan(/\s*#{HTML_INSTRUCTION_RE}/o)) - @tree.children << Element.new(:xml_pi, result.strip, nil, category: :block) - elsif (result = @src.scan(/\s*#{HTML_DOCTYPE_RE}/o)) - # ignore the doctype - elsif (result = @src.scan(/\s*#{HTML_COMMENT_RE}/o)) - @tree.children << Element.new(:xml_comment, result.strip, nil, category: :block) - else - break - end - end - - tag_handler = lambda do |c, closed, handle_body| - parse_raw_html(c, &tag_handler) if !closed && handle_body - end - parse_raw_html(@tree, &tag_handler) - - ElementConverter.convert(@tree) - end - - end - - end - -end - diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown.rb b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown.rb deleted file mode 100644 index 7205d58b..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown.rb +++ /dev/null @@ -1,376 +0,0 @@ -# -*- coding: utf-8; frozen_string_literal: true -*- -# -#-- -# Copyright (C) 2009-2019 Thomas Leitner -# -# This file is part of kramdown which is licensed under the MIT. -#++ -# - -require 'strscan' -require 'stringio' -require 'kramdown/parser' - -# TODO: use [[:alpha:]] in all regexp to allow parsing of international values in 1.9.1 -# NOTE: use @src.pre_match only before other check/match?/... operations, otherwise the content is changed - -module Kramdown - - module Parser - - # Used for parsing a document in kramdown format. - # - # If you want to extend the functionality of the parser, you need to do the following: - # - # * Create a new subclass - # * add the needed parser methods - # * modify the @block_parsers and @span_parsers variables and add the names of your parser - # methods - # - # Here is a small example for an extended parser class that parses ERB style tags as raw text if - # they are used as span-level elements (an equivalent block-level parser should probably also be - # made to handle the block case): - # - # require 'kramdown/parser/kramdown' - # - # class Kramdown::Parser::ERBKramdown < Kramdown::Parser::Kramdown - # - # def initialize(source, options) - # super - # @span_parsers.unshift(:erb_tags) - # end - # - # ERB_TAGS_START = /<%.*?%>/ - # - # def parse_erb_tags - # @src.pos += @src.matched_size - # @tree.children << Element.new(:raw, @src.matched) - # end - # define_parser(:erb_tags, ERB_TAGS_START, '<%') - # - # end - # - # The new parser can be used like this: - # - # require 'kramdown/document' - # # require the file with the above parser class - # - # Kramdown::Document.new(input_text, :input => 'ERBKramdown').to_html - # - class Kramdown < Base - - include ::Kramdown - - # Create a new Kramdown parser object with the given +options+. - def initialize(source, options) - super - - reset_env - - @alds = {} - @footnotes = {} - @link_defs = {} - update_link_definitions(@options[:link_defs]) - - @block_parsers = [:blank_line, :codeblock, :codeblock_fenced, :blockquote, :atx_header, - :horizontal_rule, :list, :definition_list, :block_html, :setext_header, - :block_math, :table, :footnote_definition, :link_definition, - :abbrev_definition, :block_extensions, :eob_marker, :paragraph] - @span_parsers = [:emphasis, :codespan, :autolink, :span_html, :footnote_marker, :link, - :smart_quotes, :inline_math, :span_extensions, :html_entity, - :typographic_syms, :line_break, :escaped_chars] - - @span_pattern_cache ||= Hash.new { |h, k| h[k] = {} } - end - private_class_method(:new, :allocate) - - # The source string provided on initialization is parsed into the @root element. - def parse - configure_parser - parse_blocks(@root, adapt_source(source)) - update_tree(@root) - correct_abbreviations_attributes - replace_abbreviations(@root) - @footnotes.each do |_name, data| - update_tree(data[:content]) - replace_abbreviations(data[:content]) - end - footnote_count = 0 - @footnotes.each do |name, data| - (footnote_count += 1; next) if data.key?(:marker) - line = data[:content].options[:location] - warning("Footnote definition for '#{name}' on line #{line} is unreferenced - ignoring") - end - @root.options[:footnote_count] = footnote_count - end - - protected - - # :doc: - # - # Update the parser specific link definitions with the data from +link_defs+ (the value of the - # :link_defs option). - # - # The parameter +link_defs+ is a hash where the keys are possibly unnormalized link IDs and - # the values are two element arrays consisting of the link target and a title (can be +nil+). - def update_link_definitions(link_defs) - link_defs.each {|k, v| @link_defs[normalize_link_id(k)] = v } - end - - # Adapt the object to allow parsing like specified in the options. - def configure_parser - @parsers = {} - (@block_parsers + @span_parsers).each do |name| - if self.class.has_parser?(name) - @parsers[name] = self.class.parser(name) - else - raise Kramdown::Error, "Unknown parser: #{name}" - end - end - @span_start, @span_start_re = span_parser_regexps - end - - # Create the needed span parser regexps. - def span_parser_regexps(parsers = @span_parsers) - span_start = /#{parsers.map {|name| @parsers[name].span_start }.join('|')}/ - [span_start, /(?=#{span_start})/] - end - - # Parse all block-level elements in +text+ into the element +el+. - def parse_blocks(el, text = nil) - @stack.push([@tree, @src, @block_ial]) - @tree, @block_ial = el, nil - @src = (text.nil? ? @src : ::Kramdown::Utils::StringScanner.new(text, el.options[:location])) - - status = catch(:stop_block_parsing) do - until @src.eos? - @block_parsers.any? do |name| - if @src.check(@parsers[name].start_re) - send(@parsers[name].method) - else - false - end - end || begin - warning('Warning: this should not occur - no block parser handled the line') - add_text(@src.scan(/.*\n/)) - end - end - end - - @tree, @src, @block_ial = *@stack.pop - status - end - - # Update the tree by parsing all :+raw_text+ elements with the span-level parser (resets the - # environment) and by updating the attributes from the IALs. - def update_tree(element) - last_blank = nil - element.children.map! do |child| - if child.type == :raw_text - last_blank = nil - reset_env(src: ::Kramdown::Utils::StringScanner.new(child.value, element.options[:location]), - text_type: :text) - parse_spans(child) - child.children - elsif child.type == :eob - update_attr_with_ial(child.attr, child.options[:ial]) if child.options[:ial] - [] - elsif child.type == :blank - if last_blank - last_blank.value << child.value - [] - else - last_blank = child - child - end - else - last_blank = nil - update_tree(child) - update_attr_with_ial(child.attr, child.options[:ial]) if child.options[:ial] - # DEPRECATED: option auto_id_stripping will be removed in 2.0 because then this will be - # the default behaviour - if child.type == :dt || (child.type == :header && @options[:auto_id_stripping]) - update_raw_text(child) - end - child - end - end.flatten! - end - - def span_pattern_cache(stop_re, span_start) - @span_pattern_cache[stop_re][span_start] ||= /(?=#{Regexp.union(stop_re, span_start)})/ - end - private :span_pattern_cache - - # Parse all span-level elements in the source string of @src into +el+. - # - # If the parameter +stop_re+ (a regexp) is used, parsing is immediately stopped if the regexp - # matches and if no block is given or if a block is given and it returns +true+. - # - # The parameter +parsers+ can be used to specify the (span-level) parsing methods that should - # be used for parsing. - # - # The parameter +text_type+ specifies the type which should be used for created text nodes. - def parse_spans(el, stop_re = nil, parsers = nil, text_type = @text_type) - @stack.push([@tree, @text_type]) unless @tree.nil? - @tree, @text_type = el, text_type - - span_start = @span_start - span_start_re = @span_start_re - span_start, span_start_re = span_parser_regexps(parsers) if parsers - parsers ||= @span_parsers - - used_re = (stop_re.nil? ? span_start_re : span_pattern_cache(stop_re, span_start)) - stop_re_found = false - while !@src.eos? && !stop_re_found - if (result = @src.scan_until(used_re)) - add_text(result) - if stop_re && @src.check(stop_re) - stop_re_found = (block_given? ? yield : true) - end - processed = parsers.any? do |name| - if @src.check(@parsers[name].start_re) - send(@parsers[name].method) - true - else - false - end - end unless stop_re_found - add_text(@src.getch) if !processed && !stop_re_found - else - (add_text(@src.rest); @src.terminate) unless stop_re - break - end - end - - @tree, @text_type = @stack.pop - - stop_re_found - end - - # Reset the current parsing environment. The parameter +env+ can be used to set initial - # values for one or more environment variables. - def reset_env(opts = {}) - opts = {text_type: :raw_text, stack: []}.merge(opts) - @src = opts[:src] - @tree = opts[:tree] - @block_ial = opts[:block_ial] - @stack = opts[:stack] - @text_type = opts[:text_type] - end - - # Return the current parsing environment. - def save_env - [@src, @tree, @block_ial, @stack, @text_type] - end - - # Restore the current parsing environment. - def restore_env(env) - @src, @tree, @block_ial, @stack, @text_type = *env - end - - # Update the given attributes hash +attr+ with the information from the inline attribute list - # +ial+ and all referenced ALDs. - def update_attr_with_ial(attr, ial) - ial[:refs]&.each do |ref| - update_attr_with_ial(attr, ref) if (ref = @alds[ref]) - end - ial.each do |k, v| - if k == IAL_CLASS_ATTR - attr[k] = "#{attr[k]} #{v}".lstrip - elsif k.kind_of?(String) - attr[k] = v - end - end - end - - # Update the raw text for automatic ID generation. - def update_raw_text(item) - raw_text = +'' - - append_text = lambda do |child| - if child.type == :text - raw_text << child.value - else - child.children.each {|c| append_text.call(c) } - end - end - - append_text.call(item) - item.options[:raw_text] = raw_text - end - - # Create a new block-level element, taking care of applying a preceding block IAL if it - # exists. This method should always be used for creating a block-level element! - def new_block_el(*args) - el = Element.new(*args) - if @block_ial - el.options[:ial] = @block_ial - @block_ial = nil - end - el - end - - @@parsers = {} - - # Struct class holding all the needed data for one block/span-level parser method. - Data = Struct.new(:name, :start_re, :span_start, :method) - - # Add a parser method - # - # * with the given +name+, - # * using +start_re+ as start regexp - # * and, for span parsers, +span_start+ as a String that can be used in a regexp and - # which identifies the starting character(s) - # - # to the registry. The method name is automatically derived from the +name+ or can explicitly - # be set by using the +meth_name+ parameter. - def self.define_parser(name, start_re, span_start = nil, meth_name = "parse_#{name}") - raise "A parser with the name #{name} already exists!" if @@parsers.key?(name) - @@parsers[name] = Data.new(name, start_re, span_start, meth_name) - end - - # Return the Data structure for the parser +name+. - def self.parser(name = nil) - @@parsers[name] - end - - # Return +true+ if there is a parser called +name+. - def self.has_parser?(name) - @@parsers.key?(name) - end - - # Regexp for matching indentation (one tab or four spaces) - INDENT = /^(?:\t| {4})/ - # Regexp for matching the optional space (zero or up to three spaces) - OPT_SPACE = / {0,3}/ - - require 'kramdown/parser/kramdown/blank_line' - require 'kramdown/parser/kramdown/eob' - require 'kramdown/parser/kramdown/paragraph' - require 'kramdown/parser/kramdown/header' - require 'kramdown/parser/kramdown/blockquote' - require 'kramdown/parser/kramdown/table' - require 'kramdown/parser/kramdown/codeblock' - require 'kramdown/parser/kramdown/horizontal_rule' - require 'kramdown/parser/kramdown/list' - require 'kramdown/parser/kramdown/link' - require 'kramdown/parser/kramdown/extensions' - require 'kramdown/parser/kramdown/footnote' - require 'kramdown/parser/kramdown/html' - require 'kramdown/parser/kramdown/escaped_chars' - require 'kramdown/parser/kramdown/html_entity' - require 'kramdown/parser/kramdown/line_break' - require 'kramdown/parser/kramdown/typographic_symbol' - require 'kramdown/parser/kramdown/autolink' - require 'kramdown/parser/kramdown/codespan' - require 'kramdown/parser/kramdown/emphasis' - require 'kramdown/parser/kramdown/smart_quotes' - require 'kramdown/parser/kramdown/math' - require 'kramdown/parser/kramdown/abbreviation' - - end - - end - -end diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/abbreviation.rb b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/abbreviation.rb deleted file mode 100644 index d1cd2908..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/abbreviation.rb +++ /dev/null @@ -1,78 +0,0 @@ -# -*- coding: utf-8; frozen_string_literal: true -*- -# -#-- -# Copyright (C) 2009-2019 Thomas Leitner -# -# This file is part of kramdown which is licensed under the MIT. -#++ -# - -module Kramdown - module Parser - class Kramdown - - ABBREV_DEFINITION_START = /^#{OPT_SPACE}\*\[(.+?)\]:(.*?)\n/ - - # Parse the link definition at the current location. - def parse_abbrev_definition - start_line_number = @src.current_line_number - @src.pos += @src.matched_size - abbrev_id, abbrev_text = @src[1], @src[2] - abbrev_text.strip! - if @root.options[:abbrev_defs][abbrev_id] - warning("Duplicate abbreviation ID '#{abbrev_id}' on line #{start_line_number} " \ - "- overwriting") - end - @tree.children << new_block_el(:eob, :abbrev_def) - @root.options[:abbrev_defs][abbrev_id] = abbrev_text - @root.options[:abbrev_attr][abbrev_id] = @tree.children.last - true - end - define_parser(:abbrev_definition, ABBREV_DEFINITION_START) - - # Correct abbreviation attributes. - def correct_abbreviations_attributes - @root.options[:abbrev_attr].keys.each do |k| - @root.options[:abbrev_attr][k] = @root.options[:abbrev_attr][k].attr - end - end - - # Replace the abbreviation text with elements. - def replace_abbreviations(el, regexps = nil) - return if @root.options[:abbrev_defs].empty? - unless regexps - sorted_abbrevs = @root.options[:abbrev_defs].keys.sort {|a, b| b.length <=> a.length } - regexps = [Regexp.union(*sorted_abbrevs.map {|k| /#{Regexp.escape(k)}/ })] - regexps << /(?=(?:\W|^)#{regexps.first}(?!\w))/ # regexp should only match on word boundaries - end - el.children.map! do |child| - if child.type == :text && el.options[:content_model] != :raw - if child.value =~ regexps.first - result = [] - strscan = Kramdown::Utils::StringScanner.new(child.value, child.options[:location]) - text_lineno = strscan.current_line_number - while (temp = strscan.scan_until(regexps.last)) - abbr_lineno = strscan.current_line_number - abbr = strscan.scan(regexps.first) # begin of line case of abbr with \W char as first one - if abbr.nil? - temp << strscan.scan(/\W|^/) - abbr = strscan.scan(regexps.first) - end - result << Element.new(:text, temp, nil, location: text_lineno) - result << Element.new(:abbreviation, abbr, nil, location: abbr_lineno) - text_lineno = strscan.current_line_number - end - result << Element.new(:text, strscan.rest, nil, location: text_lineno) - else - child - end - else - replace_abbreviations(child, regexps) - child - end - end.flatten! - end - - end - end -end diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/autolink.rb b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/autolink.rb deleted file mode 100644 index 8fa974e9..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/autolink.rb +++ /dev/null @@ -1,31 +0,0 @@ -# -*- coding: utf-8; frozen_string_literal: true -*- -# -#-- -# Copyright (C) 2009-2019 Thomas Leitner -# -# This file is part of kramdown which is licensed under the MIT. -#++ -# - -module Kramdown - module Parser - class Kramdown - - ACHARS = '[[:alnum:]]-_.' - AUTOLINK_START_STR = "<((mailto|https?|ftps?):.+?|[#{ACHARS}]+?@[#{ACHARS}]+?)>" - AUTOLINK_START = /#{AUTOLINK_START_STR}/u - - # Parse the autolink at the current location. - def parse_autolink - start_line_number = @src.current_line_number - @src.pos += @src.matched_size - href = (@src[2].nil? ? "mailto:#{@src[1]}" : @src[1]) - el = Element.new(:a, nil, {'href' => href}, location: start_line_number) - add_text(@src[1].sub(/^mailto:/, ''), el) - @tree.children << el - end - define_parser(:autolink, AUTOLINK_START, '<') - - end - end -end diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/blank_line.rb b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/blank_line.rb deleted file mode 100644 index bb8989a6..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/blank_line.rb +++ /dev/null @@ -1,30 +0,0 @@ -# -*- coding: utf-8; frozen_string_literal: true -*- -# -#-- -# Copyright (C) 2009-2019 Thomas Leitner -# -# This file is part of kramdown which is licensed under the MIT. -#++ -# - -module Kramdown - module Parser - class Kramdown - - BLANK_LINE = /(?>^\s*\n)+/ - - # Parse the blank line at the current postition. - def parse_blank_line - @src.pos += @src.matched_size - if (last_child = @tree.children.last) && last_child.type == :blank - last_child.value << @src.matched - else - @tree.children << new_block_el(:blank, @src.matched) - end - true - end - define_parser(:blank_line, BLANK_LINE) - - end - end -end diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/block_boundary.rb b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/block_boundary.rb deleted file mode 100644 index daa08849..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/block_boundary.rb +++ /dev/null @@ -1,34 +0,0 @@ -# -*- coding: utf-8; frozen_string_literal: true -*- -# -#-- -# Copyright (C) 2009-2019 Thomas Leitner -# -# This file is part of kramdown which is licensed under the MIT. -#++ -# - -require 'kramdown/parser/kramdown/extensions' -require 'kramdown/parser/kramdown/blank_line' -require 'kramdown/parser/kramdown/eob' - -module Kramdown - module Parser - class Kramdown - - BLOCK_BOUNDARY = /#{BLANK_LINE}|#{EOB_MARKER}|#{IAL_BLOCK_START}|\Z/ - - # Return +true+ if we are after a block boundary. - def after_block_boundary? - last_child = @tree.children.last - !last_child || last_child.type == :blank || - (last_child.type == :eob && last_child.value.nil?) || @block_ial - end - - # Return +true+ if we are before a block boundary. - def before_block_boundary? - @src.check(self.class::BLOCK_BOUNDARY) - end - - end - end -end diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/blockquote.rb b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/blockquote.rb deleted file mode 100644 index 8934c5a2..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/blockquote.rb +++ /dev/null @@ -1,38 +0,0 @@ -# -*- coding: utf-8; frozen_string_literal: true -*- -# -#-- -# Copyright (C) 2009-2019 Thomas Leitner -# -# This file is part of kramdown which is licensed under the MIT. -#++ -# - -require 'kramdown/parser/kramdown/blank_line' -require 'kramdown/parser/kramdown/extensions' -require 'kramdown/parser/kramdown/eob' - -module Kramdown - module Parser - class Kramdown - - BLOCKQUOTE_START = /^#{OPT_SPACE}> ?/ - - # Parse the blockquote at the current location. - def parse_blockquote - start_line_number = @src.current_line_number - result = @src.scan(PARAGRAPH_MATCH) - until @src.match?(self.class::LAZY_END) - result << @src.scan(PARAGRAPH_MATCH) - end - result.gsub!(BLOCKQUOTE_START, '') - - el = new_block_el(:blockquote, nil, nil, location: start_line_number) - @tree.children << el - parse_blocks(el, result) - true - end - define_parser(:blockquote, BLOCKQUOTE_START) - - end - end -end diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/codeblock.rb b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/codeblock.rb deleted file mode 100644 index b2b76d97..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/codeblock.rb +++ /dev/null @@ -1,57 +0,0 @@ -# -*- coding: utf-8; frozen_string_literal: true -*- -# -#-- -# Copyright (C) 2009-2019 Thomas Leitner -# -# This file is part of kramdown which is licensed under the MIT. -#++ -# - -require 'kramdown/parser/kramdown/blank_line' -require 'kramdown/parser/kramdown/extensions' -require 'kramdown/parser/kramdown/eob' -require 'kramdown/parser/kramdown/paragraph' - -module Kramdown - module Parser - class Kramdown - - CODEBLOCK_START = INDENT - CODEBLOCK_MATCH = /(?:#{BLANK_LINE}?(?:#{INDENT}[ \t]*\S.*\n)+(?:(?!#{IAL_BLOCK_START}|#{EOB_MARKER}|^#{OPT_SPACE}#{LAZY_END_HTML_STOP}|^#{OPT_SPACE}#{LAZY_END_HTML_START})^[ \t]*\S.*\n)*)*/ - - # Parse the indented codeblock at the current location. - def parse_codeblock - start_line_number = @src.current_line_number - data = @src.scan(self.class::CODEBLOCK_MATCH) - data.gsub!(/\n( {0,3}\S)/, ' \\1') - data.gsub!(INDENT, '') - @tree.children << new_block_el(:codeblock, data, nil, location: start_line_number) - true - end - define_parser(:codeblock, CODEBLOCK_START) - - FENCED_CODEBLOCK_START = /^~{3,}/ - FENCED_CODEBLOCK_MATCH = /^((~){3,})\s*?((\S+?)(?:\?\S*)?)?\s*?\n(.*?)^\1\2*\s*?\n/m - - # Parse the fenced codeblock at the current location. - def parse_codeblock_fenced - if @src.check(self.class::FENCED_CODEBLOCK_MATCH) - start_line_number = @src.current_line_number - @src.pos += @src.matched_size - el = new_block_el(:codeblock, @src[5], nil, location: start_line_number, fenced: true) - lang = @src[3].to_s.strip - unless lang.empty? - el.options[:lang] = lang - el.attr['class'] = "language-#{@src[4]}" - end - @tree.children << el - true - else - false - end - end - define_parser(:codeblock_fenced, FENCED_CODEBLOCK_START) - - end - end -end diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/codespan.rb b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/codespan.rb deleted file mode 100644 index 44eafb10..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/codespan.rb +++ /dev/null @@ -1,58 +0,0 @@ -# -*- coding: utf-8; frozen_string_literal: true -*- -# -#-- -# Copyright (C) 2009-2019 Thomas Leitner -# -# This file is part of kramdown which is licensed under the MIT. -#++ -# - -module Kramdown - module Parser - class Kramdown - - CODESPAN_DELIMITER = /`+/ - - # Parse the codespan at the current scanner location. - def parse_codespan - start_line_number = @src.current_line_number - result = @src.scan(CODESPAN_DELIMITER) - simple = (result.length == 1) - saved_pos = @src.save_pos - - if simple && @src.pre_match =~ /\s\Z|\A\Z/ && @src.match?(/\s/) - add_text(result) - return - end - - # assign static regex to avoid allocating the same on every instance - # where +result+ equals a single-backtick. Interpolate otherwise. - if result == '`' - scan_pattern = /`/ - str_sub_pattern = /`\Z/ - else - scan_pattern = /#{result}/ - str_sub_pattern = /#{result}\Z/ - end - - if (text = @src.scan_until(scan_pattern)) - text.sub!(str_sub_pattern, '') - unless simple - text = text[1..-1] if text[0..0] == ' ' - text = text[0..-2] if text[-1..-1] == ' ' - end - @tree.children << Element.new(:codespan, text, nil, { - codespan_delimiter: result, - location: start_line_number - }) - - else - @src.revert_pos(saved_pos) - add_text(result) - end - end - define_parser(:codespan, CODESPAN_DELIMITER, '`') - - end - end -end diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/emphasis.rb b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/emphasis.rb deleted file mode 100644 index becba248..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/emphasis.rb +++ /dev/null @@ -1,61 +0,0 @@ -# -*- coding: utf-8; frozen_string_literal: true -*- -# -#-- -# Copyright (C) 2009-2019 Thomas Leitner -# -# This file is part of kramdown which is licensed under the MIT. -#++ -# - -module Kramdown - module Parser - class Kramdown - - EMPHASIS_START = /(?:\*\*?|__?)/ - - # Parse the emphasis at the current location. - def parse_emphasis - start_line_number = @src.current_line_number - saved_pos = @src.save_pos - - result = @src.scan(EMPHASIS_START) - element = (result.length == 2 ? :strong : :em) - type = result[0..0] - - if (type == '_' && @src.pre_match =~ /[[:alpha:]]-?[[:alpha:]]*\z/) || @src.check(/\s/) || - @tree.type == element || @stack.any? {|el, _| el.type == element } - add_text(result) - return - end - - sub_parse = lambda do |delim, elem| - el = Element.new(elem, nil, nil, location: start_line_number) - stop_re = /#{Regexp.escape(delim)}/ - found = parse_spans(el, stop_re) do - (@src.pre_match[-1, 1] !~ /\s/) && - (elem != :em || !@src.match?(/#{Regexp.escape(delim * 2)}(?!#{Regexp.escape(delim)})/)) && - (type != '_' || !@src.match?(/#{Regexp.escape(delim)}[[:alnum:]]/)) && !el.children.empty? - end - [found, el, stop_re] - end - - found, el, stop_re = sub_parse.call(result, element) - if !found && element == :strong && @tree.type != :em - @src.revert_pos(saved_pos) - @src.pos += 1 - found, el, stop_re = sub_parse.call(type, :em) - end - if found - @src.scan(stop_re) - @tree.children << el - else - @src.revert_pos(saved_pos) - @src.pos += result.length - add_text(result) - end - end - define_parser(:emphasis, EMPHASIS_START, '\*|_') - - end - end -end diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/eob.rb b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/eob.rb deleted file mode 100644 index f151a9a3..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/eob.rb +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8; frozen_string_literal: true -*- -# -#-- -# Copyright (C) 2009-2019 Thomas Leitner -# -# This file is part of kramdown which is licensed under the MIT. -#++ -# - -module Kramdown - module Parser - class Kramdown - - EOB_MARKER = /^\^\s*?\n/ - - # Parse the EOB marker at the current location. - def parse_eob_marker - @src.pos += @src.matched_size - @tree.children << new_block_el(:eob) - true - end - define_parser(:eob_marker, EOB_MARKER) - - end - end -end diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/escaped_chars.rb b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/escaped_chars.rb deleted file mode 100644 index 46d8b000..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/escaped_chars.rb +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8; frozen_string_literal: true -*- -# -#-- -# Copyright (C) 2009-2019 Thomas Leitner -# -# This file is part of kramdown which is licensed under the MIT. -#++ -# - -module Kramdown - module Parser - class Kramdown - - ESCAPED_CHARS = /\\([\\.*_+`<>()\[\]{}#!:|"'\$=-])/ - - # Parse the backslash-escaped character at the current location. - def parse_escaped_chars - @src.pos += @src.matched_size - add_text(@src[1]) - end - define_parser(:escaped_chars, ESCAPED_CHARS, '\\\\') - - end - end -end diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/extensions.rb b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/extensions.rb deleted file mode 100644 index 637d0fa8..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/extensions.rb +++ /dev/null @@ -1,214 +0,0 @@ -# -*- coding: utf-8; frozen_string_literal: true -*- -# -#-- -# Copyright (C) 2009-2019 Thomas Leitner -# -# This file is part of kramdown which is licensed under the MIT. -#++ -# - -module Kramdown - module Parser - class Kramdown - - IAL_CLASS_ATTR = 'class' - - # Parse the string +str+ and extract all attributes and add all found attributes to the hash - # +opts+. - def parse_attribute_list(str, opts) - return if str.strip.empty? || str.strip == ':' - attrs = str.scan(ALD_TYPE_ANY) - attrs.each do |key, sep, val, ref, id_and_or_class, _, _| - if ref - (opts[:refs] ||= []) << ref - elsif id_and_or_class - id_and_or_class.scan(ALD_TYPE_ID_OR_CLASS).each do |id_attr, class_attr| - if class_attr - opts[IAL_CLASS_ATTR] = "#{opts[IAL_CLASS_ATTR]} #{class_attr}".lstrip - else - opts['id'] = id_attr - end - end - else - val.gsub!(/\\(\}|#{sep})/, "\\1") - opts[key] = val - end - end - warning("No or invalid attributes found in IAL/ALD content: #{str}") if attrs.empty? - end - - # Update the +ial+ with the information from the inline attribute list +opts+. - def update_ial_with_ial(ial, opts) - (ial[:refs] ||= []).concat(opts[:refs]) if opts.key?(:refs) - opts.each do |k, v| - if k == IAL_CLASS_ATTR - ial[k] = "#{ial[k]} #{v}".lstrip - elsif k.kind_of?(String) - ial[k] = v - end - end - end - - # Parse the generic extension at the current point. The parameter +type+ can either be :block - # or :span depending whether we parse a block or span extension tag. - def parse_extension_start_tag(type) - saved_pos = @src.save_pos - start_line_number = @src.current_line_number - @src.pos += @src.matched_size - - error_block = lambda do |msg| - warning(msg) - @src.revert_pos(saved_pos) - add_text(@src.getch) if type == :span - false - end - - if @src[4] || @src.matched == '{:/}' - name = (@src[4] ? "for '#{@src[4]}' " : '') - return error_block.call("Invalid extension stop tag #{name} found on line " \ - "#{start_line_number} - ignoring it") - end - - ext = @src[1] - opts = {} - body = nil - parse_attribute_list(@src[2] || '', opts) - - unless @src[3] - stop_re = (type == :block ? /#{EXT_BLOCK_STOP_STR % ext}/ : /#{EXT_STOP_STR % ext}/) - if (result = @src.scan_until(stop_re)) - body = result.sub!(stop_re, '') - body.chomp! if type == :block - else - return error_block.call("No stop tag for extension '#{ext}' found on line " \ - "#{start_line_number} - ignoring it") - end - end - - if !handle_extension(ext, opts, body, type, start_line_number) - error_block.call("Invalid extension with name '#{ext}' specified on line " \ - "#{start_line_number} - ignoring it") - else - true - end - end - - def handle_extension(name, opts, body, type, line_no = nil) - case name - when 'comment' - if body.kind_of?(String) - @tree.children << Element.new(:comment, body, nil, category: type, location: line_no) - end - true - when 'nomarkdown' - if body.kind_of?(String) - @tree.children << Element.new(:raw, body, nil, category: type, - location: line_no, type: opts['type'].to_s.split(/\s+/)) - end - true - when 'options' - opts.select do |k, v| - k = k.to_sym - if Kramdown::Options.defined?(k) - if @options[:forbidden_inline_options].include?(k) || - k == :forbidden_inline_options - warning("Option #{k} may not be set inline") - next false - end - - begin - val = Kramdown::Options.parse(k, v) - @options[k] = val - (@root.options[:options] ||= {})[k] = val - rescue StandardError - end - false - else - true - end - end.each do |k, _v| - warning("Unknown kramdown option '#{k}'") - end - @tree.children << new_block_el(:eob, :extension) if type == :block - true - else - false - end - end - - ALD_ID_CHARS = /[\w-]/ - ALD_ANY_CHARS = /\\\}|[^\}]/ - ALD_ID_NAME = /\w#{ALD_ID_CHARS}*/ - ALD_CLASS_NAME = /[^\s\.#]+/ - ALD_TYPE_KEY_VALUE_PAIR = /(#{ALD_ID_NAME})=("|')((?:\\\}|\\\2|[^\}\2])*?)\2/ - ALD_TYPE_CLASS_NAME = /\.(#{ALD_CLASS_NAME})/ - ALD_TYPE_ID_NAME = /#([A-Za-z][\w:-]*)/ - ALD_TYPE_ID_OR_CLASS = /#{ALD_TYPE_ID_NAME}|#{ALD_TYPE_CLASS_NAME}/ - ALD_TYPE_ID_OR_CLASS_MULTI = /((?:#{ALD_TYPE_ID_NAME}|#{ALD_TYPE_CLASS_NAME})+)/ - ALD_TYPE_REF = /(#{ALD_ID_NAME})/ - ALD_TYPE_ANY = /(?:\A|\s)(?:#{ALD_TYPE_KEY_VALUE_PAIR}|#{ALD_TYPE_REF}|#{ALD_TYPE_ID_OR_CLASS_MULTI})(?=\s|\Z)/ - ALD_START = /^#{OPT_SPACE}\{:(#{ALD_ID_NAME}):(#{ALD_ANY_CHARS}+)\}\s*?\n/ - - EXT_STOP_STR = "\\{:/(%s)?\\}" - EXT_START_STR = "\\{::(\\w+)(?:\\s(#{ALD_ANY_CHARS}*?)|)(\\/)?\\}" - EXT_BLOCK_START = /^#{OPT_SPACE}(?:#{EXT_START_STR}|#{EXT_STOP_STR % ALD_ID_NAME})\s*?\n/ - EXT_BLOCK_STOP_STR = "^#{OPT_SPACE}#{EXT_STOP_STR}\s*?\n" - - IAL_BLOCK = /\{:(?!:|\/)(#{ALD_ANY_CHARS}+)\}\s*?\n/ - IAL_BLOCK_START = /^#{OPT_SPACE}#{IAL_BLOCK}/ - - BLOCK_EXTENSIONS_START = /^#{OPT_SPACE}\{:/ - - # Parse one of the block extensions (ALD, block IAL or generic extension) at the current - # location. - def parse_block_extensions - if @src.scan(ALD_START) - parse_attribute_list(@src[2], @alds[@src[1]] ||= {}) - @tree.children << new_block_el(:eob, :ald) - true - elsif @src.check(EXT_BLOCK_START) - parse_extension_start_tag(:block) - elsif @src.scan(IAL_BLOCK_START) - if (last_child = @tree.children.last) && last_child.type != :blank && - (last_child.type != :eob || - [:link_def, :abbrev_def, :footnote_def].include?(last_child.value)) - parse_attribute_list(@src[1], last_child.options[:ial] ||= {}) - @tree.children << new_block_el(:eob, :ial) unless @src.check(IAL_BLOCK_START) - else - parse_attribute_list(@src[1], @block_ial ||= {}) - end - true - else - false - end - end - define_parser(:block_extensions, BLOCK_EXTENSIONS_START) - - EXT_SPAN_START = /#{EXT_START_STR}|#{EXT_STOP_STR % ALD_ID_NAME}/ - IAL_SPAN_START = /\{:(#{ALD_ANY_CHARS}+)\}/ - SPAN_EXTENSIONS_START = /\{:/ - - # Parse the extension span at the current location. - def parse_span_extensions - if @src.check(EXT_SPAN_START) - parse_extension_start_tag(:span) - elsif @src.check(IAL_SPAN_START) - if (last_child = @tree.children.last) && last_child.type != :text - @src.pos += @src.matched_size - attr = {} - parse_attribute_list(@src[1], attr) - update_ial_with_ial(last_child.options[:ial] ||= {}, attr) - update_attr_with_ial(last_child.attr, attr) - else - warning("Found span IAL after text - ignoring it") - add_text(@src.getch) - end - else - add_text(@src.getch) - end - end - define_parser(:span_extensions, SPAN_EXTENSIONS_START, '\{:') - - end - end -end diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/footnote.rb b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/footnote.rb deleted file mode 100644 index b45fc121..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/footnote.rb +++ /dev/null @@ -1,64 +0,0 @@ -# -*- coding: utf-8; frozen_string_literal: true -*- -# -#-- -# Copyright (C) 2009-2019 Thomas Leitner -# -# This file is part of kramdown which is licensed under the MIT. -#++ -# - -require 'kramdown/parser/kramdown/extensions' -require 'kramdown/parser/kramdown/blank_line' -require 'kramdown/parser/kramdown/codeblock' - -module Kramdown - module Parser - class Kramdown - - FOOTNOTE_DEFINITION_START = /^#{OPT_SPACE}\[\^(#{ALD_ID_NAME})\]:\s*?(.*?\n#{CODEBLOCK_MATCH})/ - - # Parse the foot note definition at the current location. - def parse_footnote_definition - start_line_number = @src.current_line_number - @src.pos += @src.matched_size - - el = Element.new(:footnote_def, nil, nil, location: start_line_number) - parse_blocks(el, @src[2].gsub(INDENT, '')) - if @footnotes[@src[1]] - warning("Duplicate footnote name '#{@src[1]}' on line #{start_line_number} - overwriting") - end - @tree.children << new_block_el(:eob, :footnote_def) - (@footnotes[@src[1]] = {})[:content] = el - @footnotes[@src[1]][:eob] = @tree.children.last - true - end - define_parser(:footnote_definition, FOOTNOTE_DEFINITION_START) - - FOOTNOTE_MARKER_START = /\[\^(#{ALD_ID_NAME})\]/ - - # Parse the footnote marker at the current location. - def parse_footnote_marker - start_line_number = @src.current_line_number - @src.pos += @src.matched_size - fn_def = @footnotes[@src[1]] - if fn_def - if fn_def[:eob] - update_attr_with_ial(fn_def[:eob].attr, fn_def[:eob].options[:ial] || {}) - fn_def[:attr] = fn_def[:eob].attr - fn_def[:options] = fn_def[:eob].options - fn_def.delete(:eob) - end - fn_def[:marker] ||= [] - fn_def[:marker].push(Element.new(:footnote, fn_def[:content], fn_def[:attr], - fn_def[:options].merge(name: @src[1], location: start_line_number))) - @tree.children << fn_def[:marker].last - else - warning("Footnote definition for '#{@src[1]}' not found on line #{start_line_number}") - add_text(@src.matched) - end - end - define_parser(:footnote_marker, FOOTNOTE_MARKER_START, '\[') - - end - end -end diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/header.rb b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/header.rb deleted file mode 100644 index d490a464..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/header.rb +++ /dev/null @@ -1,70 +0,0 @@ -# -*- coding: utf-8; frozen_string_literal: true -*- -# -#-- -# Copyright (C) 2009-2019 Thomas Leitner -# -# This file is part of kramdown which is licensed under the MIT. -#++ -# - -require 'kramdown/parser/kramdown/block_boundary' -require 'rexml/xmltokens' - -module Kramdown - module Parser - class Kramdown - - SETEXT_HEADER_START = /^#{OPT_SPACE}(?[^ \t].*)\n(?[-=])[-=]*[ \t\r\f\v]*\n/ - - # Parse the Setext header at the current location. - def parse_setext_header - return false unless after_block_boundary? - text, id = parse_header_contents - return false if text.empty? - add_header(@src["level"] == '-' ? 2 : 1, text, id) - true - end - define_parser(:setext_header, SETEXT_HEADER_START) - - ATX_HEADER_START = /^(?\#{1,6})[\t ]*(?[^ \t].*)\n/ - - # Parse the Atx header at the current location. - def parse_atx_header - return false unless after_block_boundary? - text, id = parse_header_contents - text.sub!(/(?#{REXML::XMLTokens::NAME_START_CHAR}#{REXML::XMLTokens::NAME_CHAR}*)}\z/ - - # Returns header text and optional ID. - def parse_header_contents - text = @src["contents"] - text.rstrip! - id_match = HEADER_ID.match(text) - if id_match - id = id_match["id"] - text = text[0...-id_match[0].length] - text.rstrip! - end - [text, id] - end - - def add_header(level, text, id) - start_line_number = @src.current_line_number - @src.pos += @src.matched_size - el = new_block_el(:header, nil, nil, level: level, raw_text: text, location: start_line_number) - add_text(text, el) - el.attr['id'] = id if id - @tree.children << el - end - - end - end -end diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/horizontal_rule.rb b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/horizontal_rule.rb deleted file mode 100644 index 73a936dc..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/horizontal_rule.rb +++ /dev/null @@ -1,27 +0,0 @@ -# -*- coding: utf-8; frozen_string_literal: true -*- -# -#-- -# Copyright (C) 2009-2019 Thomas Leitner -# -# This file is part of kramdown which is licensed under the MIT. -#++ -# - -module Kramdown - module Parser - class Kramdown - - HR_START = /^#{OPT_SPACE}(\*|-|_)[ \t]*\1[ \t]*\1(\1|[ \t])*\n/ - - # Parse the horizontal rule at the current location. - def parse_horizontal_rule - start_line_number = @src.current_line_number - @src.pos += @src.matched_size - @tree.children << new_block_el(:hr, nil, nil, location: start_line_number) - true - end - define_parser(:horizontal_rule, HR_START) - - end - end -end diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/html.rb b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/html.rb deleted file mode 100644 index 03a33617..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/html.rb +++ /dev/null @@ -1,162 +0,0 @@ -# -*- coding: utf-8; frozen_string_literal: true -*- -# -#-- -# Copyright (C) 2009-2019 Thomas Leitner -# -# This file is part of kramdown which is licensed under the MIT. -#++ -# - -require 'kramdown/parser/html' - -module Kramdown - module Parser - class Kramdown - - include Kramdown::Parser::Html::Parser - - # Mapping of markdown attribute value to content model. I.e. :raw when "0", :default when "1" - # (use default content model for the HTML element), :span when "span", :block when block and - # for everything else +nil+ is returned. - HTML_MARKDOWN_ATTR_MAP = {"0" => :raw, "1" => :default, "span" => :span, "block" => :block} - - TRAILING_WHITESPACE = /[ \t]*\n/ - - def handle_kramdown_html_tag(el, closed, handle_body) - if @block_ial - el.options[:ial] = @block_ial - @block_ial = nil - end - - content_model = if @tree.type != :html_element || @tree.options[:content_model] != :raw - (@options[:parse_block_html] ? HTML_CONTENT_MODEL[el.value] : :raw) - else - :raw - end - if (val = HTML_MARKDOWN_ATTR_MAP[el.attr.delete('markdown')]) - content_model = (val == :default ? HTML_CONTENT_MODEL[el.value] : val) - end - - @src.scan(TRAILING_WHITESPACE) if content_model == :block - el.options[:content_model] = content_model - el.options[:is_closed] = closed - - if !closed && handle_body - if content_model == :block - unless parse_blocks(el) - warning("Found no end tag for '#{el.value}' (line #{el.options[:location]}) - auto-closing it") - end - elsif content_model == :span - curpos = @src.pos - if @src.scan_until(/(?=<\/#{el.value}\s*>)/mi) - add_text(extract_string(curpos...@src.pos, @src), el) - @src.scan(HTML_TAG_CLOSE_RE) - else - add_text(@src.rest, el) - @src.terminate - warning("Found no end tag for '#{el.value}' (line #{el.options[:location]}) - auto-closing it") - end - else - parse_raw_html(el, &method(:handle_kramdown_html_tag)) - end - unless @tree.type == :html_element && @tree.options[:content_model] == :raw - @src.scan(TRAILING_WHITESPACE) - end - end - end - - HTML_BLOCK_START = /^#{OPT_SPACE}<(#{REXML::Parsers::BaseParser::UNAME_STR}|!--|\/)/ - - # Parse the HTML at the current position as block-level HTML. - def parse_block_html - line = @src.current_line_number - if (result = @src.scan(HTML_COMMENT_RE)) - @tree.children << Element.new(:xml_comment, result, nil, category: :block, location: line) - @src.scan(TRAILING_WHITESPACE) - true - else - if @src.check(/^#{OPT_SPACE}#{HTML_TAG_RE}/o) && !HTML_SPAN_ELEMENTS.include?(@src[1].downcase) - @src.pos += @src.matched_size - handle_html_start_tag(line, &method(:handle_kramdown_html_tag)) - Kramdown::Parser::Html::ElementConverter.convert(@root, @tree.children.last) if @options[:html_to_native] - true - elsif @src.check(/^#{OPT_SPACE}#{HTML_TAG_CLOSE_RE}/o) && !HTML_SPAN_ELEMENTS.include?(@src[1].downcase) - name = @src[1].downcase - - if @tree.type == :html_element && @tree.value == name - @src.pos += @src.matched_size - throw :stop_block_parsing, :found - else - false - end - else - false - end - end - end - define_parser(:block_html, HTML_BLOCK_START) - - HTML_SPAN_START = /<(#{REXML::Parsers::BaseParser::UNAME_STR}|!--|\/)/ - - # Parse the HTML at the current position as span-level HTML. - def parse_span_html - line = @src.current_line_number - if (result = @src.scan(HTML_COMMENT_RE)) - @tree.children << Element.new(:xml_comment, result, nil, category: :span, location: line) - elsif (result = @src.scan(HTML_TAG_CLOSE_RE)) - warning("Found invalidly used HTML closing tag for '#{@src[1]}' on line #{line}") - add_text(result) - elsif (result = @src.scan(HTML_TAG_RE)) - tag_name = @src[1] - tag_name.downcase! if HTML_ELEMENT[tag_name.downcase] - if HTML_BLOCK_ELEMENTS.include?(tag_name) - warning("Found block HTML tag '#{tag_name}' in span-level text on line #{line}") - add_text(result) - return - end - - attrs = parse_html_attributes(@src[2], line, HTML_ELEMENT[tag_name]) - attrs.each_value {|value| value.gsub!(/\n+/, ' ') unless value.empty? } - - do_parsing = if HTML_CONTENT_MODEL[tag_name] == :raw || @tree.options[:content_model] == :raw - false - else - @options[:parse_span_html] - end - if (val = HTML_MARKDOWN_ATTR_MAP[attrs.delete('markdown')]) - if val == :block - warning("Cannot use block-level parsing in span-level HTML tag (line #{line}) " \ - "- using default mode") - elsif val == :span - do_parsing = true - elsif val == :default - do_parsing = HTML_CONTENT_MODEL[tag_name] != :raw - elsif val == :raw - do_parsing = false - end - end - - el = Element.new(:html_element, tag_name, attrs, category: :span, location: line, - content_model: (do_parsing ? :span : :raw), is_closed: !!@src[4]) - @tree.children << el - stop_re = /<\/#{Regexp.escape(tag_name)}\s*>/ - stop_re = Regexp.new(stop_re.source, Regexp::IGNORECASE) if HTML_ELEMENT[tag_name] - if !@src[4] && !HTML_ELEMENTS_WITHOUT_BODY.include?(el.value) - if parse_spans(el, stop_re, (do_parsing ? nil : [:span_html])) - @src.scan(stop_re) - else - warning("Found no end tag for '#{el.value}' (line #{line}) - auto-closing it") - add_text(@src.rest, el) - @src.terminate - end - end - Kramdown::Parser::Html::ElementConverter.convert(@root, el) if @options[:html_to_native] - else - add_text(@src.getch) - end - end - define_parser(:span_html, HTML_SPAN_START, '<') - - end - end -end diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/html_entity.rb b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/html_entity.rb deleted file mode 100644 index c89c7baf..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/html_entity.rb +++ /dev/null @@ -1,34 +0,0 @@ -# -*- coding: utf-8; frozen_string_literal: true -*- -# -#-- -# Copyright (C) 2009-2019 Thomas Leitner -# -# This file is part of kramdown which is licensed under the MIT. -#++ -# - -require 'kramdown/parser/html' - -module Kramdown - module Parser - class Kramdown - - # Parse the HTML entity at the current location. - def parse_html_entity - start_line_number = @src.current_line_number - @src.pos += @src.matched_size - begin - value = ::Kramdown::Utils::Entities.entity(@src[1] || (@src[2]&.to_i) || @src[3].hex) - @tree.children << Element.new(:entity, value, - nil, original: @src.matched, location: start_line_number) - rescue ::Kramdown::Error - @tree.children << Element.new(:entity, ::Kramdown::Utils::Entities.entity('amp'), - nil, location: start_line_number) - add_text(@src.matched[1..-1]) - end - end - define_parser(:html_entity, Kramdown::Parser::Html::Constants::HTML_ENTITY_RE, '&') - - end - end -end diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/line_break.rb b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/line_break.rb deleted file mode 100644 index 5f854271..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/line_break.rb +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8; frozen_string_literal: true -*- -# -#-- -# Copyright (C) 2009-2019 Thomas Leitner -# -# This file is part of kramdown which is licensed under the MIT. -#++ -# - -module Kramdown - module Parser - class Kramdown - - LINE_BREAK = /( |\\\\)(?=\n)/ - - # Parse the line break at the current location. - def parse_line_break - @tree.children << Element.new(:br, nil, nil, location: @src.current_line_number) - @src.pos += @src.matched_size - end - define_parser(:line_break, LINE_BREAK, '( |\\\\)(?=\n)') - - end - end -end diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/link.rb b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/link.rb deleted file mode 100644 index 9906bdd6..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/link.rb +++ /dev/null @@ -1,149 +0,0 @@ -# -*- coding: utf-8; frozen_string_literal: true -*- -# -#-- -# Copyright (C) 2009-2019 Thomas Leitner -# -# This file is part of kramdown which is licensed under the MIT. -#++ -# - -require 'kramdown/parser/kramdown/escaped_chars' - -module Kramdown - module Parser - class Kramdown - - # Normalize the link identifier. - def normalize_link_id(id) - id.gsub(/[\s]+/, ' ').downcase - end - - LINK_DEFINITION_START = /^#{OPT_SPACE}\[([^\n\]]+)\]:[ \t]*(?:<(.*?)>|([^\n]*?\S[^\n]*?))(?:(?:[ \t]*?\n|[ \t]+?)[ \t]*?(["'])(.+?)\4)?[ \t]*?\n/ - - # Parse the link definition at the current location. - def parse_link_definition - return false if @src[3].to_s =~ /[ \t]+["']/ - @src.pos += @src.matched_size - link_id, link_url, link_title = normalize_link_id(@src[1]), @src[2] || @src[3], @src[5] - if @link_defs[link_id] - warning("Duplicate link ID '#{link_id}' on line #{@src.current_line_number} - overwriting") - end - @tree.children << new_block_el(:eob, :link_def) - @link_defs[link_id] = [link_url, link_title, @tree.children.last] - true - end - define_parser(:link_definition, LINK_DEFINITION_START) - - # This helper methods adds the approriate attributes to the element +el+ of type +a+ or +img+ - # and the element itself to the @tree. - def add_link(el, href, title, alt_text = nil, ial = nil) - el.options[:ial] = ial - update_attr_with_ial(el.attr, ial) if ial - if el.type == :a - el.attr['href'] = href - else - el.attr['src'] = href - el.attr['alt'] = alt_text - el.children.clear - end - el.attr['title'] = title if title - @tree.children << el - end - - LINK_BRACKET_STOP_RE = /(\])|!?\[/ - LINK_PAREN_STOP_RE = /(\()|(\))|\s(?=['"])/ - LINK_INLINE_ID_RE = /\s*?\[([^\]]+)?\]/ - LINK_INLINE_TITLE_RE = /\s*?(["'])(.+?)\1\s*?\)/m - LINK_START = /!?\[(?=[^^])/ - - # Parse the link at the current scanner position. This method is used to parse normal links as - # well as image links. - def parse_link - start_line_number = @src.current_line_number - result = @src.scan(LINK_START) - cur_pos = @src.pos - saved_pos = @src.save_pos - - link_type = (result =~ /^!/ ? :img : :a) - - # no nested links allowed - if link_type == :a && (@tree.type == :img || @tree.type == :a || - @stack.any? {|t, _| t && (t.type == :img || t.type == :a) }) - add_text(result) - return - end - el = Element.new(link_type, nil, nil, location: start_line_number) - - count = 1 - found = parse_spans(el, LINK_BRACKET_STOP_RE) do - count += (@src[1] ? -1 : 1) - count - el.children.select {|c| c.type == :img }.size == 0 - end - unless found - @src.revert_pos(saved_pos) - add_text(result) - return - end - alt_text = extract_string(cur_pos...@src.pos, @src).gsub(ESCAPED_CHARS, '\1') - @src.scan(LINK_BRACKET_STOP_RE) - - # reference style link or no link url - if @src.scan(LINK_INLINE_ID_RE) || !@src.check(/\(/) - emit_warning = !@src[1] - link_id = normalize_link_id(@src[1] || alt_text) - if @link_defs.key?(link_id) - link_def = @link_defs[link_id] - add_link(el, link_def[0], link_def[1], alt_text, - link_def[2] && link_def[2].options[:ial]) - else - if emit_warning - warning("No link definition for link ID '#{link_id}' found on line #{start_line_number}") - end - @src.revert_pos(saved_pos) - add_text(result) - end - return - end - - # link url in parentheses - if @src.scan(/\(<(.*?)>/) - link_url = @src[1] - if @src.scan(/\)/) - add_link(el, link_url, nil, alt_text) - return - end - else - link_url = +'' - nr_of_brackets = 0 - while (temp = @src.scan_until(LINK_PAREN_STOP_RE)) - link_url << temp - if @src[2] - nr_of_brackets -= 1 - break if nr_of_brackets == 0 - elsif @src[1] - nr_of_brackets += 1 - else - break - end - end - link_url = link_url[1..-2] - link_url.strip! - - if nr_of_brackets == 0 - add_link(el, link_url, nil, alt_text) - return - end - end - - if @src.scan(LINK_INLINE_TITLE_RE) - add_link(el, link_url, @src[2], alt_text) - else - @src.revert_pos(saved_pos) - add_text(result) - end - end - define_parser(:link, LINK_START, '!?\[') - - end - end -end diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/list.rb b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/list.rb deleted file mode 100644 index aa7c3d0a..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/list.rb +++ /dev/null @@ -1,285 +0,0 @@ -# -*- coding: utf-8; frozen_string_literal: true -*- -# -#-- -# Copyright (C) 2009-2019 Thomas Leitner -# -# This file is part of kramdown which is licensed under the MIT. -#++ -# - -require 'kramdown/parser/kramdown/blank_line' -require 'kramdown/parser/kramdown/eob' -require 'kramdown/parser/kramdown/horizontal_rule' -require 'kramdown/parser/kramdown/extensions' - -module Kramdown - module Parser - class Kramdown - - LIST_ITEM_IAL = /^\s*(?:\{:(?!(?:#{ALD_ID_NAME})?:|\/)(#{ALD_ANY_CHARS}+)\})\s*/ - LIST_ITEM_IAL_CHECK = /^#{LIST_ITEM_IAL}?\s*\n/ - - PARSE_FIRST_LIST_LINE_REGEXP_CACHE = Hash.new do |h, indentation| - indent_re = /^ {#{indentation}}/ - content_re = /^(?:(?:\t| {4}){#{indentation / 4}} {#{indentation % 4}}|(?:\t| {4}){#{indentation / 4 + 1}}).*\S.*\n/ - lazy_re = /(?!^ {0,#{[indentation, 3].min}}(?:#{IAL_BLOCK}|#{LAZY_END_HTML_STOP}|#{LAZY_END_HTML_START})).*\S.*\n/ - - h[indentation] = [content_re, lazy_re, indent_re] - end - - # Used for parsing the first line of a list item or a definition, i.e. the line with list item - # marker or the definition marker. - def parse_first_list_line(indentation, content) - if content =~ self.class::LIST_ITEM_IAL_CHECK - indentation = 4 - else - while content =~ /^ *\t/ - temp = content.scan(/^ */).first.length + indentation - content.sub!(/^( *)(\t+)/) { $1 << " " * (4 - (temp % 4) + ($2.length - 1) * 4) } - end - indentation += content[/^ */].length - end - content.sub!(/^\s*/, '') - - [content, indentation, *PARSE_FIRST_LIST_LINE_REGEXP_CACHE[indentation]] - end - - PATTERN_TAIL = /[\t| ].*?\n/ - - LIST_START_UL = /^(#{OPT_SPACE}[+*-])(#{PATTERN_TAIL})/ - LIST_START_OL = /^(#{OPT_SPACE}\d+\.)(#{PATTERN_TAIL})/ - LIST_START = /#{LIST_START_UL}|#{LIST_START_OL}/ - - # Parse the ordered or unordered list at the current location. - def parse_list - start_line_number = @src.current_line_number - type, list_start_re = (@src.check(LIST_START_UL) ? [:ul, LIST_START_UL] : [:ol, LIST_START_OL]) - list = new_block_el(type, nil, nil, location: start_line_number) - - item = nil - content_re, lazy_re, indent_re = nil - eob_found = false - nested_list_found = false - last_is_blank = false - until @src.eos? - start_line_number = @src.current_line_number - if last_is_blank && @src.check(HR_START) - break - elsif @src.scan(EOB_MARKER) - eob_found = true - break - elsif @src.scan(list_start_re) - list.options[:first_list_marker] ||= @src[1].strip - item = Element.new(:li, nil, nil, location: start_line_number) - item.value, indentation, content_re, lazy_re, indent_re = - parse_first_list_line(@src[1].length, @src[2]) - list.children << item - - item.value.sub!(self.class::LIST_ITEM_IAL) do - parse_attribute_list($1, item.options[:ial] ||= {}) - '' - end - - list_start_re = fetch_pattern(type, indentation) - nested_list_found = (item.value =~ LIST_START) - last_is_blank = false - item.value = [item.value] - elsif (result = @src.scan(content_re)) || (!last_is_blank && (result = @src.scan(lazy_re))) - result.sub!(/^(\t+)/) { " " * 4 * $1.length } - indentation_found = result.sub!(indent_re, '') - if !nested_list_found && indentation_found && result =~ LIST_START - item.value << +'' - nested_list_found = true - elsif nested_list_found && !indentation_found && result =~ LIST_START - result = " " * (indentation + 4) << result - end - item.value.last << result - last_is_blank = false - elsif (result = @src.scan(BLANK_LINE)) - nested_list_found = true - last_is_blank = true - item.value.last << result - else - break - end - end - - @tree.children << list - - last = nil - list.children.each do |it| - temp = Element.new(:temp, nil, nil, location: it.options[:location]) - - env = save_env - location = it.options[:location] - it.value.each do |val| - @src = ::Kramdown::Utils::StringScanner.new(val, location) - parse_blocks(temp) - location = @src.current_line_number - end - restore_env(env) - - it.children = temp.children - it.value = nil - - it_children = it.children - next if it_children.empty? - - # Handle the case where an EOB marker is inserted by a block IAL for the first paragraph - it_children.delete_at(1) if it_children.first.type == :p && - it_children.length >= 2 && it_children[1].type == :eob && it_children.first.options[:ial] - - if it_children.first.type == :p && - (it_children.length < 2 || it_children[1].type != :blank || - (it == list.children.last && it_children.length == 2 && !eob_found)) && - (list.children.last != it || list.children.size == 1 || - list.children[0..-2].any? {|cit| !cit.children.first || cit.children.first.type != :p || cit.children.first.options[:transparent] }) - it_children.first.children.first.value << "\n" if it_children.size > 1 && it_children[1].type != :blank - it_children.first.options[:transparent] = true - end - - last = (it_children.last.type == :blank ? it_children.pop : nil) - end - - @tree.children << last if !last.nil? && !eob_found - - true - end - define_parser(:list, LIST_START) - - DEFINITION_LIST_START = /^(#{OPT_SPACE}:)(#{PATTERN_TAIL})/ - - # Parse the ordered or unordered list at the current location. - def parse_definition_list - children = @tree.children - if !children.last || (children.length == 1 && children.last.type != :p) || - (children.length >= 2 && children[-1].type != :p && - (children[-1].type != :blank || children[-1].value != "\n" || children[-2].type != :p)) - return false - end - - first_as_para = false - deflist = new_block_el(:dl) - para = @tree.children.pop - if para.type == :blank - para = @tree.children.pop - first_as_para = true - end - # take location from preceding para which is the first definition term - deflist.options[:location] = para.options[:location] - para.children.first.value.split(/\n/).each do |term| - el = Element.new(:dt, nil, nil, location: @src.current_line_number) - term.sub!(self.class::LIST_ITEM_IAL) do - parse_attribute_list($1, el.options[:ial] ||= {}) - '' - end - el.options[:raw_text] = term - el.children << Element.new(:raw_text, term) - deflist.children << el - end - deflist.options[:ial] = para.options[:ial] - - item = nil - content_re, lazy_re, indent_re = nil - def_start_re = DEFINITION_LIST_START - last_is_blank = false - until @src.eos? - start_line_number = @src.current_line_number - if @src.scan(def_start_re) - item = Element.new(:dd, nil, nil, location: start_line_number) - item.options[:first_as_para] = first_as_para - item.value, indentation, content_re, lazy_re, indent_re = - parse_first_list_line(@src[1].length, @src[2]) - deflist.children << item - - item.value.sub!(self.class::LIST_ITEM_IAL) do |_match| - parse_attribute_list($1, item.options[:ial] ||= {}) - '' - end - - def_start_re = fetch_pattern(:dl, indentation) - first_as_para = false - last_is_blank = false - elsif @src.check(EOB_MARKER) - break - elsif (result = @src.scan(content_re)) || (!last_is_blank && (result = @src.scan(lazy_re))) - result.sub!(/^(\t+)/) { " " * ($1 ? 4 * $1.length : 0) } - result.sub!(indent_re, '') - item.value << result - first_as_para = false - last_is_blank = false - elsif (result = @src.scan(BLANK_LINE)) - first_as_para = true - item.value << result - last_is_blank = true - else - break - end - end - - last = nil - deflist.children.each do |it| - next if it.type == :dt - - parse_blocks(it, it.value) - it.value = nil - it_children = it.children - next if it_children.empty? - - last = (it_children.last.type == :blank ? it_children.pop : nil) - - if it_children.first && it_children.first.type == :p && !it.options.delete(:first_as_para) - it_children.first.children.first.value << "\n" if it_children.size > 1 - it_children.first.options[:transparent] = true - end - end - - children = @tree.children - if children.length >= 1 && children.last.type == :dl - children[-1].children.concat(deflist.children) - elsif children.length >= 2 && children[-1].type == :blank && - children[-2].type == :dl - children.pop - children[-1].children.concat(deflist.children) - else - children << deflist - end - - children << last if last - - true - end - define_parser(:definition_list, DEFINITION_LIST_START) - - private - - # precomputed patterns for indentations 1..4 and fallback expression - # to compute pattern when indentation is outside the 1..4 range. - def fetch_pattern(type, indentation) - if type == :ul - case indentation - when 1 then %r/^( {0}[+*-])(#{PATTERN_TAIL})/o - when 2 then %r/^( {0,1}[+*-])(#{PATTERN_TAIL})/o - when 3 then %r/^( {0,2}[+*-])(#{PATTERN_TAIL})/o - else %r/^( {0,3}[+*-])(#{PATTERN_TAIL})/o - end - elsif type == :ol - case indentation - when 1 then %r/^( {0}\d+\.)(#{PATTERN_TAIL})/o - when 2 then %r/^( {0,1}\d+\.)(#{PATTERN_TAIL})/o - when 3 then %r/^( {0,2}\d+\.)(#{PATTERN_TAIL})/o - else %r/^( {0,3}\d+\.)(#{PATTERN_TAIL})/o - end - elsif type == :dl - case indentation - when 1 then %r/^( {0}:)(#{PATTERN_TAIL})/o - when 2 then %r/^( {0,1}:)(#{PATTERN_TAIL})/o - when 3 then %r/^( {0,2}:)(#{PATTERN_TAIL})/o - else %r/^( {0,3}:)(#{PATTERN_TAIL})/o - end - end - end - - end - end -end diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/math.rb b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/math.rb deleted file mode 100644 index 32c87bfc..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/math.rb +++ /dev/null @@ -1,53 +0,0 @@ -# -*- coding: utf-8; frozen_string_literal: true -*- -# -#-- -# Copyright (C) 2009-2019 Thomas Leitner -# -# This file is part of kramdown which is licensed under the MIT. -#++ -# - -require 'kramdown/parser/kramdown/block_boundary' - -module Kramdown - module Parser - class Kramdown - - BLOCK_MATH_START = /^#{OPT_SPACE}(\\)?\$\$(.*?)\$\$(\s*?\n)?/m - - # Parse the math block at the current location. - def parse_block_math - start_line_number = @src.current_line_number - if !after_block_boundary? - return false - elsif @src[1] - @src.scan(/^#{OPT_SPACE}\\/o) if @src[3] - return false - end - - saved_pos = @src.save_pos - @src.pos += @src.matched_size - data = @src[2].strip - if before_block_boundary? - @tree.children << new_block_el(:math, data, nil, category: :block, location: start_line_number) - true - else - @src.revert_pos(saved_pos) - false - end - end - define_parser(:block_math, BLOCK_MATH_START) - - INLINE_MATH_START = /\$\$(.*?)\$\$/m - - # Parse the inline math at the current location. - def parse_inline_math - start_line_number = @src.current_line_number - @src.pos += @src.matched_size - @tree.children << Element.new(:math, @src[1].strip, nil, category: :span, location: start_line_number) - end - define_parser(:inline_math, INLINE_MATH_START, '\$') - - end - end -end diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/paragraph.rb b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/paragraph.rb deleted file mode 100644 index d89e6a24..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/paragraph.rb +++ /dev/null @@ -1,62 +0,0 @@ -# -*- coding: utf-8; frozen_string_literal: true -*- -# -#-- -# Copyright (C) 2009-2019 Thomas Leitner -# -# This file is part of kramdown which is licensed under the MIT. -#++ -# - -require 'kramdown/parser/kramdown/blank_line' -require 'kramdown/parser/kramdown/extensions' -require 'kramdown/parser/kramdown/eob' -require 'kramdown/parser/kramdown/list' -require 'kramdown/parser/kramdown/html' - -module Kramdown - module Parser - class Kramdown - - LAZY_END_HTML_SPAN_ELEMENTS = HTML_SPAN_ELEMENTS + %w[script] - LAZY_END_HTML_START = /<(?>(?!(?:#{LAZY_END_HTML_SPAN_ELEMENTS.join('|')})\b)#{REXML::Parsers::BaseParser::UNAME_STR})/ - LAZY_END_HTML_STOP = /<\/(?!(?:#{LAZY_END_HTML_SPAN_ELEMENTS.join('|')})\b)#{REXML::Parsers::BaseParser::UNAME_STR}\s*>/m - - LAZY_END = /#{BLANK_LINE}|#{IAL_BLOCK_START}|#{EOB_MARKER}|^#{OPT_SPACE}#{LAZY_END_HTML_STOP}|^#{OPT_SPACE}#{LAZY_END_HTML_START}|\Z/ - - PARAGRAPH_START = /^#{OPT_SPACE}[^ \t].*?\n/ - PARAGRAPH_MATCH = /^.*?\n/ - PARAGRAPH_END = /#{LAZY_END}|#{DEFINITION_LIST_START}/ - - # Parse the paragraph at the current location. - def parse_paragraph - pos = @src.pos - start_line_number = @src.current_line_number - result = @src.scan(PARAGRAPH_MATCH) - until @src.match?(paragraph_end) - result << @src.scan(PARAGRAPH_MATCH) - end - result.rstrip! - if (last_child = @tree.children.last) && last_child.type == :p - last_item_in_para = last_child.children.last - if last_item_in_para && last_item_in_para.type == @text_type - joiner = (extract_string((pos - 3)...pos, @src) == " \n" ? " \n" : "\n") - last_item_in_para.value << joiner << result - else - add_text(result, last_child) - end - else - @tree.children << new_block_el(:p, nil, nil, location: start_line_number) - result.lstrip! - add_text(result, @tree.children.last) - end - true - end - define_parser(:paragraph, PARAGRAPH_START) - - def paragraph_end - self.class::PARAGRAPH_END - end - - end - end -end diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/smart_quotes.rb b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/smart_quotes.rb deleted file mode 100644 index 5c170139..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/smart_quotes.rb +++ /dev/null @@ -1,174 +0,0 @@ -# -*- coding: utf-8; frozen_string_literal: true -*- -# -#-- -# Copyright (C) 2009-2019 Thomas Leitner -# -# This file is part of kramdown which is licensed under the MIT. -#++ -# -#-- -# Parts of this file are based on code from RubyPants: -# -# = RubyPants -- SmartyPants ported to Ruby -# -# Ported by Christian Neukirchen -# Copyright (C) 2004 Christian Neukirchen -# -# Incooporates ideas, comments and documentation by Chad Miller -# Copyright (C) 2004 Chad Miller -# -# Original SmartyPants by John Gruber -# Copyright (C) 2003 John Gruber -# -# -# = RubyPants -- SmartyPants ported to Ruby -# -# -# [snip] -# -# == Authors -# -# John Gruber did all of the hard work of writing this software in -# Perl for Movable Type and almost all of this useful documentation. -# Chad Miller ported it to Python to use with Pyblosxom. -# -# Christian Neukirchen provided the Ruby port, as a general-purpose -# library that follows the *Cloth API. -# -# -# == Copyright and License -# -# === SmartyPants license: -# -# Copyright (c) 2003 John Gruber -# (http://daringfireball.net) -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# -# * Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in -# the documentation and/or other materials provided with the -# distribution. -# -# * Neither the name "SmartyPants" nor the names of its contributors -# may be used to endorse or promote products derived from this -# software without specific prior written permission. -# -# This software is provided by the copyright holders and contributors -# "as is" and any express or implied warranties, including, but not -# limited to, the implied warranties of merchantability and fitness -# for a particular purpose are disclaimed. In no event shall the -# copyright owner or contributors be liable for any direct, indirect, -# incidental, special, exemplary, or consequential damages (including, -# but not limited to, procurement of substitute goods or services; -# loss of use, data, or profits; or business interruption) however -# caused and on any theory of liability, whether in contract, strict -# liability, or tort (including negligence or otherwise) arising in -# any way out of the use of this software, even if advised of the -# possibility of such damage. -# -# === RubyPants license -# -# RubyPants is a derivative work of SmartyPants and smartypants.py. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# -# * Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in -# the documentation and/or other materials provided with the -# distribution. -# -# This software is provided by the copyright holders and contributors -# "as is" and any express or implied warranties, including, but not -# limited to, the implied warranties of merchantability and fitness -# for a particular purpose are disclaimed. In no event shall the -# copyright owner or contributors be liable for any direct, indirect, -# incidental, special, exemplary, or consequential damages (including, -# but not limited to, procurement of substitute goods or services; -# loss of use, data, or profits; or business interruption) however -# caused and on any theory of liability, whether in contract, strict -# liability, or tort (including negligence or otherwise) arising in -# any way out of the use of this software, even if advised of the -# possibility of such damage. -# -# == Links -# -# John Gruber:: http://daringfireball.net -# SmartyPants:: http://daringfireball.net/projects/smartypants -# -# Chad Miller:: http://web.chad.org -# -# Christian Neukirchen:: http://kronavita.de/chris -# -#++ -# - -module Kramdown - module Parser - class Kramdown - - SQ_PUNCT = '[!"#\$\%\'()*+,\-.\/:;<=>?\@\[\\\\\]\^_`{|}~]' - SQ_CLOSE = %![^\ \\\\\t\r\n\\[{(-]! - - SQ_RULES = [ - [/("|')(?=[_*]{1,2}\S)/, [:lquote1]], - [/("|')(?=#{SQ_PUNCT}(?!\.\.)\B)/, [:rquote1]], - # Special case for double sets of quotes, e.g.: - #

    He said, "'Quoted' words in a larger quote."

    - [/(\s?)"'(?=\w)/, [1, :ldquo, :lsquo]], - [/(\s?)'"(?=\w)/, [1, :lsquo, :ldquo]], - # Special case for decade abbreviations (the '80s): - [/(\s?)'(?=\d\ds)/, [1, :rsquo]], - - # Get most opening single/double quotes: - [/(\s)('|")(?=\w)/, [1, :lquote2]], - # Single/double closing quotes: - [/(#{SQ_CLOSE})('|")/, [1, :rquote2]], - # Special case for e.g. "Custer's Last Stand." - [/("|')(?=\s|s\b|$)/, [:rquote1]], - # Any remaining single quotes should be opening ones: - [/(.?)'/m, [1, :lsquo]], - [/(.?)"/m, [1, :ldquo]], - ] # '" - - SQ_SUBSTS = { - [:rquote1, '"'] => :rdquo, - [:rquote1, "'"] => :rsquo, - [:rquote2, '"'] => :rdquo, - [:rquote2, "'"] => :rsquo, - [:lquote1, '"'] => :ldquo, - [:lquote1, "'"] => :lsquo, - [:lquote2, '"'] => :ldquo, - [:lquote2, "'"] => :lsquo, - } - SMART_QUOTES_RE = /[^\\]?["']/ - - # Parse the smart quotes at current location. - def parse_smart_quotes - start_line_number = @src.current_line_number - substs = SQ_RULES.find {|reg, _subst| @src.scan(reg) }[1] - substs.each do |subst| - if subst.kind_of?(Integer) - add_text(@src[subst]) - else - val = SQ_SUBSTS[[subst, @src[subst.to_s[-1, 1].to_i]]] || subst - @tree.children << Element.new(:smart_quote, val, nil, location: start_line_number) - end - end - end - define_parser(:smart_quotes, SMART_QUOTES_RE, '[^\\\\]?["\']') - - end - end -end diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/table.rb b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/table.rb deleted file mode 100644 index 68be6b4c..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/table.rb +++ /dev/null @@ -1,171 +0,0 @@ -# -*- coding: utf-8; frozen_string_literal: true -*- -# -#-- -# Copyright (C) 2009-2019 Thomas Leitner -# -# This file is part of kramdown which is licensed under the MIT. -#++ -# - -require 'kramdown/parser/kramdown/block_boundary' - -module Kramdown - module Parser - class Kramdown - - TABLE_SEP_LINE = /^([+|: \t-]*?-[+|: \t-]*?)[ \t]*\n/ - TABLE_HSEP_ALIGN = /[ \t]?(:?)-+(:?)[ \t]?/ - TABLE_FSEP_LINE = /^[+|: \t=]*?=[+|: \t=]*?[ \t]*\n/ - TABLE_ROW_LINE = /^(.*?)[ \t]*\n/ - TABLE_PIPE_CHECK = /(?:\||.*?[^\\\n]\|)/ - TABLE_LINE = /#{TABLE_PIPE_CHECK}.*?\n/ - TABLE_START = /^#{OPT_SPACE}(?=\S)#{TABLE_LINE}/ - - # Parse the table at the current location. - def parse_table - return false unless after_block_boundary? - - saved_pos = @src.save_pos - orig_pos = @src.pos - table = new_block_el(:table, nil, nil, alignment: [], location: @src.current_line_number) - leading_pipe = (@src.check(TABLE_LINE) =~ /^\s*\|/) - @src.scan(TABLE_SEP_LINE) - - rows = [] - has_footer = false - columns = 0 - - add_container = lambda do |type, force| - if !has_footer || type != :tbody || force - cont = Element.new(type) - cont.children, rows = rows, [] - table.children << cont - end - end - - until @src.eos? - break unless @src.check(TABLE_LINE) - if @src.scan(TABLE_SEP_LINE) - if rows.empty? - # nothing to do, ignoring multiple consecutive separator lines - elsif table.options[:alignment].empty? && !has_footer - add_container.call(:thead, false) - table.options[:alignment] = @src[1].scan(TABLE_HSEP_ALIGN).map do |left, right| - (left.empty? && right.empty? && :default) || (right.empty? && :left) || - (left.empty? && :right) || :center - end - else # treat as normal separator line - add_container.call(:tbody, false) - end - elsif @src.scan(TABLE_FSEP_LINE) - add_container.call(:tbody, true) unless rows.empty? - has_footer = true - elsif @src.scan(TABLE_ROW_LINE) - trow = Element.new(:tr) - - # parse possible code spans on the line and correctly split the line into cells - env = save_env - cells = [] - @src[1].split(/(.*?<\/code>)/).each_with_index do |str, i| - if i.odd? - (cells.empty? ? cells : cells.last) << str - else - reset_env(src: Kramdown::Utils::StringScanner.new(str, @src.current_line_number)) - root = Element.new(:root) - parse_spans(root, nil, [:codespan]) - - root.children.each do |c| - if c.type == :raw_text - f, *l = c.value.split(/(? 1}#{c.value}#{' ' if delim.size > 1}#{delim}" - (cells.empty? ? cells : cells.last) << tmp - end - end - end - end - restore_env(env) - - cells.shift if leading_pipe && cells.first.strip.empty? - cells.pop if cells.last.strip.empty? - cells.each do |cell_text| - tcell = Element.new(:td) - tcell.children << Element.new(:raw_text, cell_text.strip) - trow.children << tcell - end - columns = [columns, cells.length].max - rows << trow - else - break - end - end - - unless before_block_boundary? - @src.revert_pos(saved_pos) - return false - end - - # Parse all lines of the table with the code span parser - env = save_env - l_src = ::Kramdown::Utils::StringScanner.new(extract_string(orig_pos...(@src.pos - 1), @src), - @src.current_line_number) - reset_env(src: l_src) - root = Element.new(:root) - parse_spans(root, nil, [:codespan, :span_html]) - restore_env(env) - - # Check if each line has at least one unescaped pipe that is not inside a code span/code - # HTML element - # Note: It doesn't matter that we parse *all* span HTML elements because the row splitting - # algorithm above only takes elements into account! - pipe_on_line = false - while (c = root.children.shift) - next unless (lines = c.value) - lines = lines.split("\n") - if c.type == :codespan - if lines.size > 2 || (lines.size == 2 && !pipe_on_line) - break - elsif lines.size == 2 && pipe_on_line - pipe_on_line = false - end - else - break if lines.size > 1 && !pipe_on_line && lines.first !~ /^#{TABLE_PIPE_CHECK}/o - pipe_on_line = (lines.size > 1 ? false : pipe_on_line) || (lines.last =~ /^#{TABLE_PIPE_CHECK}/o) - end - end - @src.revert_pos(saved_pos) and return false unless pipe_on_line - - add_container.call(has_footer ? :tfoot : :tbody, false) unless rows.empty? - - if table.children.none? {|el| el.type == :tbody } - warning("Found table without body on line #{table.options[:location]} - ignoring it") - @src.revert_pos(saved_pos) - return false - end - - # adjust all table rows to have equal number of columns, same for alignment defs - table.children.each do |kind| - kind.children.each do |row| - (columns - row.children.length).times do - row.children << Element.new(:td) - end - end - end - if table.options[:alignment].length > columns - table.options[:alignment] = table.options[:alignment][0...columns] - else - table.options[:alignment] += [:default] * (columns - table.options[:alignment].length) - end - - @tree.children << table - - true - end - define_parser(:table, TABLE_START) - - end - end -end diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/typographic_symbol.rb b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/typographic_symbol.rb deleted file mode 100644 index 095c8d53..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/kramdown/typographic_symbol.rb +++ /dev/null @@ -1,44 +0,0 @@ -# -*- coding: utf-8; frozen_string_literal: true -*- -# -#-- -# Copyright (C) 2009-2019 Thomas Leitner -# -# This file is part of kramdown which is licensed under the MIT. -#++ -# - -module Kramdown - module Parser - class Kramdown - - TYPOGRAPHIC_SYMS = [['---', :mdash], ['--', :ndash], ['...', :hellip], - ['\\<<', '<<'], ['\\>>', '>>'], - ['<< ', :laquo_space], [' >>', :raquo_space], - ['<<', :laquo], ['>>', :raquo]] - TYPOGRAPHIC_SYMS_SUBST = Hash[*TYPOGRAPHIC_SYMS.flatten] - TYPOGRAPHIC_SYMS_RE = /#{TYPOGRAPHIC_SYMS.map {|k, _v| Regexp.escape(k) }.join('|')}/ - - # Parse the typographic symbols at the current location. - def parse_typographic_syms - start_line_number = @src.current_line_number - @src.pos += @src.matched_size - val = TYPOGRAPHIC_SYMS_SUBST[@src.matched] - if val.kind_of?(Symbol) - @tree.children << Element.new(:typographic_sym, val, nil, location: start_line_number) - elsif @src.matched == '\\<<' - @tree.children << Element.new(:entity, ::Kramdown::Utils::Entities.entity('lt'), - nil, location: start_line_number) - @tree.children << Element.new(:entity, ::Kramdown::Utils::Entities.entity('lt'), - nil, location: start_line_number) - else - @tree.children << Element.new(:entity, ::Kramdown::Utils::Entities.entity('gt'), - nil, location: start_line_number) - @tree.children << Element.new(:entity, ::Kramdown::Utils::Entities.entity('gt'), - nil, location: start_line_number) - end - end - define_parser(:typographic_syms, TYPOGRAPHIC_SYMS_RE, '--|\\.\\.\\.|(?:\\\\| )?(?:<<|>>)') - - end - end -end diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/markdown.rb b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/markdown.rb deleted file mode 100644 index 9f36758a..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/parser/markdown.rb +++ /dev/null @@ -1,57 +0,0 @@ -# -*- coding: utf-8; frozen_string_literal: true -*- -# -#-- -# Copyright (C) 2009-2019 Thomas Leitner -# -# This file is part of kramdown which is licensed under the MIT. -#++ -# - -require 'kramdown/parser' - -module Kramdown - - module Parser - - # Used for parsing a document in Markdown format. - # - # This parser is based on the kramdown parser and removes the parser methods for the additional - # non-Markdown features. However, since some things are handled differently by the kramdown - # parser methods (like deciding when a list item contains just text), this parser differs from - # real Markdown parsers in some respects. - # - # Note, though, that the parser basically fails just one of the Markdown test cases (some others - # also fail but those failures are negligible). - class Markdown < Kramdown - - # Array with all the parsing methods that should be removed from the standard kramdown parser. - EXTENDED = [:codeblock_fenced, :table, :definition_list, :footnote_definition, - :abbrev_definition, :block_math, :block_extensions, - :footnote_marker, :smart_quotes, :inline_math, :span_extensions, :typographic_syms] - - def initialize(source, options) # :nodoc: - super - @block_parsers.delete_if {|i| EXTENDED.include?(i) } - @span_parsers.delete_if {|i| EXTENDED.include?(i) } - end - - # :stopdoc: - - BLOCK_BOUNDARY = /#{BLANK_LINE}|#{EOB_MARKER}|\Z/ - LAZY_END = /#{BLANK_LINE}|#{EOB_MARKER}|^#{OPT_SPACE}#{LAZY_END_HTML_STOP}| - ^#{OPT_SPACE}#{LAZY_END_HTML_START}|\Z/x - CODEBLOCK_MATCH = /(?:#{BLANK_LINE}?(?:#{INDENT}[ \t]*\S.*\n)+)*/ - PARAGRAPH_END = LAZY_END - - IAL_RAND_CHARS = (('a'..'z').to_a + ('0'..'9').to_a) - IAL_RAND_STRING = (1..20).collect { IAL_RAND_CHARS[rand(IAL_RAND_CHARS.size)] }.join - LIST_ITEM_IAL = /^\s*(#{IAL_RAND_STRING})?\s*\n/ - IAL_SPAN_START = LIST_ITEM_IAL - - # :startdoc: - - end - - end - -end diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/utils.rb b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/utils.rb deleted file mode 100644 index 5928def6..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/utils.rb +++ /dev/null @@ -1,45 +0,0 @@ -# -*- coding: utf-8; frozen_string_literal: true -*- -# -#-- -# Copyright (C) 2009-2019 Thomas Leitner -# -# This file is part of kramdown which is licensed under the MIT. -#++ -# - -module Kramdown - - # == \Utils Module - # - # This module contains utility class/modules/methods that can be used by both parsers and - # converters. - module Utils - - autoload :Entities, 'kramdown/utils/entities' - autoload :Html, 'kramdown/utils/html' - autoload :Unidecoder, 'kramdown/utils/unidecoder' - autoload :StringScanner, 'kramdown/utils/string_scanner' - autoload :Configurable, 'kramdown/utils/configurable' - autoload :LRUCache, 'kramdown/utils/lru_cache' - - # Treat +name+ as if it were snake cased (e.g. snake_case) and camelize it (e.g. SnakeCase). - def self.camelize(name) - name.split('_').inject(+'') {|s, x| s << x[0..0].upcase << x[1..-1] } - end - - # Treat +name+ as if it were camelized (e.g. CamelizedName) and snake-case it (e.g. camelized_name). - def self.snake_case(name) - name = name.dup - name.gsub!(/([A-Z]+)([A-Z][a-z])/, '\1_\2') - name.gsub!(/([a-z])([A-Z])/, '\1_\2') - name.downcase! - name - end - - def self.deep_const_get(str) - ::Object.const_get(str) - end - - end - -end diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/utils/configurable.rb b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/utils/configurable.rb deleted file mode 100644 index 2989493f..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/utils/configurable.rb +++ /dev/null @@ -1,45 +0,0 @@ -# -*- coding: utf-8; frozen_string_literal: true -*- -# -#-- -# Copyright (C) 2009-2019 Thomas Leitner -# -# This file is part of kramdown which is licensed under the MIT. -#++ -# - -module Kramdown - module Utils - - # Methods for registering configurable extensions. - module Configurable - - # Create a new configurable extension called +name+. - # - # Three methods will be defined on the calling object which allow to use this configurable - # extension: - # - # configurables:: Returns a hash of hashes that is used to store all configurables of the - # object. - # - # (ext_name):: Return the configured extension +ext_name+. - # - # add_(ext_name, data=nil, &block):: Define an extension +ext_name+ by specifying either - # the data as argument or by using a block. - def configurable(name) - unless respond_to?(:configurables) - singleton_class.send(:define_method, :configurables) do - @_configurables ||= Hash.new {|h, k| h[k] = {} } - end - end - singleton_class.send(:define_method, name) do |data| - configurables[name][data] - end - singleton_class.send(:define_method, "add_#{name}".intern) do |data, *args, &block| - configurables[name][data] = args.first || block - end - end - - end - - end -end diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/utils/entities.rb b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/utils/entities.rb deleted file mode 100644 index e0cc8a0e..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/utils/entities.rb +++ /dev/null @@ -1,344 +0,0 @@ -# -*- coding: utf-8; frozen_string_literal: true -*- -# -#-- -# Copyright (C) 2009-2019 Thomas Leitner -# -# This file is part of kramdown which is licensed under the MIT. -#++ -# - -module Kramdown - - module Utils - - # Provides convenience methods for handling named and numeric entities. - module Entities - - # Represents an entity that has a +code_point+ and +name+. - Entity = Struct.new(:code_point, :name) do - # Return the UTF8 representation of the entity. - def char - [code_point].pack('U*') rescue nil - end - end - - # Array of arrays. Each sub-array specifies a code point and the associated name. - # - # This table is not used directly -- Entity objects are automatically created from it and put - # into a Hash map when this file is loaded. - ENTITY_TABLE = [ - [913, 'Alpha'], - [914, 'Beta'], - [915, 'Gamma'], - [916, 'Delta'], - [917, 'Epsilon'], - [918, 'Zeta'], - [919, 'Eta'], - [920, 'Theta'], - [921, 'Iota'], - [922, 'Kappa'], - [923, 'Lambda'], - [924, 'Mu'], - [925, 'Nu'], - [926, 'Xi'], - [927, 'Omicron'], - [928, 'Pi'], - [929, 'Rho'], - [931, 'Sigma'], - [932, 'Tau'], - [933, 'Upsilon'], - [934, 'Phi'], - [935, 'Chi'], - [936, 'Psi'], - [937, 'Omega'], - [945, 'alpha'], - [946, 'beta'], - [947, 'gamma'], - [948, 'delta'], - [949, 'epsilon'], - [950, 'zeta'], - [951, 'eta'], - [952, 'theta'], - [953, 'iota'], - [954, 'kappa'], - [955, 'lambda'], - [956, 'mu'], - [957, 'nu'], - [958, 'xi'], - [959, 'omicron'], - [960, 'pi'], - [961, 'rho'], - [963, 'sigma'], - [964, 'tau'], - [965, 'upsilon'], - [966, 'phi'], - [967, 'chi'], - [968, 'psi'], - [969, 'omega'], - [962, 'sigmaf'], - [977, 'thetasym'], - [978, 'upsih'], - [982, 'piv'], - [8204, 'zwnj'], - [8205, 'zwj'], - [8206, 'lrm'], - [8207, 'rlm'], - [8230, 'hellip'], - [8242, 'prime'], - [8243, 'Prime'], - [8254, 'oline'], - [8260, 'frasl'], - [8472, 'weierp'], - [8465, 'image'], - [8476, 'real'], - [8501, 'alefsym'], - [8226, 'bull'], - [8482, 'trade'], - [8592, 'larr'], - [8594, 'rarr'], - [8593, 'uarr'], - [8595, 'darr'], - [8596, 'harr'], - [8629, 'crarr'], - [8657, 'uArr'], - [8659, 'dArr'], - [8656, 'lArr'], - [8658, 'rArr'], - [8660, 'hArr'], - [8704, 'forall'], - [8706, 'part'], - [8707, 'exist'], - [8709, 'empty'], - [8711, 'nabla'], - [8712, 'isin'], - [8715, 'ni'], - [8713, 'notin'], - [8721, 'sum'], - [8719, 'prod'], - [8722, 'minus'], - [8727, 'lowast'], - [8730, 'radic'], - [8733, 'prop'], - [8734, 'infin'], - [8736, 'ang'], - [8743, 'and'], - [8744, 'or'], - [8745, 'cap'], - [8746, 'cup'], - [8747, 'int'], - [8756, 'there4'], - [8764, 'sim'], - [8776, 'asymp'], - [8773, 'cong'], - [8800, 'ne'], - [8801, 'equiv'], - [8804, 'le'], - [8805, 'ge'], - [8834, 'sub'], - [8835, 'sup'], - [8838, 'sube'], - [8839, 'supe'], - [8836, 'nsub'], - [8853, 'oplus'], - [8855, 'otimes'], - [8869, 'perp'], - [8901, 'sdot'], - [8942, 'vellip'], - [8968, 'rceil'], - [8969, 'lceil'], - [8970, 'lfloor'], - [8971, 'rfloor'], - [9001, 'rang'], - [9002, 'lang'], - [9674, 'loz'], - [9824, 'spades'], - [9827, 'clubs'], - [9829, 'hearts'], - [9830, 'diams'], - [38, 'amp'], - [34, 'quot'], - [39, 'apos'], - [169, 'copy'], - [60, 'lt'], - [62, 'gt'], - [338, 'OElig'], - [339, 'oelig'], - [352, 'Scaron'], - [353, 'scaron'], - [376, 'Yuml'], - [710, 'circ'], - [732, 'tilde'], - [8211, 'ndash'], - [8212, 'mdash'], - [8216, 'lsquo'], - [8217, 'rsquo'], - [8220, 'ldquo'], - [8221, 'rdquo'], - [8224, 'dagger'], - [8225, 'Dagger'], - [8240, 'permil'], - [8364, 'euro'], - [8249, 'lsaquo'], - [8250, 'rsaquo'], - [160, 'nbsp'], - [161, 'iexcl'], - [163, 'pound'], - [164, 'curren'], - [165, 'yen'], - [166, 'brvbar'], - [167, 'sect'], - [168, 'uml'], - [171, 'laquo'], - [187, 'raquo'], - [174, 'reg'], - [170, 'ordf'], - [172, 'not'], - [173, 'shy'], - [175, 'macr'], - [176, 'deg'], - [177, 'plusmn'], - [180, 'acute'], - [181, 'micro'], - [182, 'para'], - [183, 'middot'], - [184, 'cedil'], - [186, 'ordm'], - [162, 'cent'], - [185, 'sup1'], - [178, 'sup2'], - [179, 'sup3'], - [189, 'frac12'], - [188, 'frac14'], - [190, 'frac34'], - [191, 'iquest'], - [192, 'Agrave'], - [193, 'Aacute'], - [194, 'Acirc'], - [195, 'Atilde'], - [196, 'Auml'], - [197, 'Aring'], - [198, 'AElig'], - [199, 'Ccedil'], - [200, 'Egrave'], - [201, 'Eacute'], - [202, 'Ecirc'], - [203, 'Euml'], - [204, 'Igrave'], - [205, 'Iacute'], - [206, 'Icirc'], - [207, 'Iuml'], - [208, 'ETH'], - [209, 'Ntilde'], - [210, 'Ograve'], - [211, 'Oacute'], - [212, 'Ocirc'], - [213, 'Otilde'], - [214, 'Ouml'], - [215, 'times'], - [216, 'Oslash'], - [217, 'Ugrave'], - [218, 'Uacute'], - [219, 'Ucirc'], - [220, 'Uuml'], - [221, 'Yacute'], - [222, 'THORN'], - [223, 'szlig'], - [224, 'agrave'], - [225, 'aacute'], - [226, 'acirc'], - [227, 'atilde'], - [228, 'auml'], - [229, 'aring'], - [230, 'aelig'], - [231, 'ccedil'], - [232, 'egrave'], - [233, 'eacute'], - [234, 'ecirc'], - [235, 'euml'], - [236, 'igrave'], - [237, 'iacute'], - [238, 'icirc'], - [239, 'iuml'], - [240, 'eth'], - [241, 'ntilde'], - [242, 'ograve'], - [243, 'oacute'], - [244, 'ocirc'], - [245, 'otilde'], - [246, 'ouml'], - [247, 'divide'], - [248, 'oslash'], - [249, 'ugrave'], - [250, 'uacute'], - [251, 'ucirc'], - [252, 'uuml'], - [253, 'yacute'], - [254, 'thorn'], - [255, 'yuml'], - - [8218, 'sbquo'], - [402, 'fnof'], - [8222, 'bdquo'], - - [128, 8364], - [130, 8218], - [131, 402], - [132, 8222], - [133, 8230], - [134, 8224], - [135, 8225], - [136, 710], - [137, 8240], - [138, 352], - [139, 8249], - [140, 338], - [142, 381], - [145, 8216], - [146, 8217], - [147, 8220], - [148, 8221], - [149, 8226], - [150, 8211], - [151, 8212], - [152, 732], - [153, 8482], - [154, 353], - [155, 8250], - [156, 339], - [158, 382], - [159, 376], - - [8194, 'ensp'], - [8195, 'emsp'], - [8201, 'thinsp'], - ] - - # Contains the mapping of code point (or name) to the actual Entity object. - ENTITY_MAP = Hash.new do |h, k| - if k.kind_of?(Integer) - h[k] = Entity.new(k, nil) - else - raise Kramdown::Error, "Can't handle generic non-integer character reference '#{k}'" - end - end - - ENTITY_TABLE.each do |code_point, data| - if data.kind_of?(String) - ENTITY_MAP[code_point] = ENTITY_MAP[data] = Entity.new(code_point, data) - else - ENTITY_MAP[code_point] = ENTITY_MAP[data] - end - end - - # Return the entity for the given code point or name +point_or_name+. - def entity(point_or_name) - ENTITY_MAP[point_or_name] - end - - module_function :entity - - end - - end - -end diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/utils/html.rb b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/utils/html.rb deleted file mode 100644 index 5f2cd9b6..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/utils/html.rb +++ /dev/null @@ -1,84 +0,0 @@ -# -*- coding: utf-8; frozen_string_literal: true -*- -# -#-- -# Copyright (C) 2009-2019 Thomas Leitner -# -# This file is part of kramdown which is licensed under the MIT. -#++ -# - -require 'rexml/parsers/baseparser' - -module Kramdown - - module Utils - - # Provides convenience methods for HTML related tasks. - # - # *Note* that this module has to be mixed into a class that has a @root (containing an element - # of type :root) and an @options (containing an options hash) instance variable so that some of - # the methods can work correctly. - module Html - - # Convert the entity +e+ to a string. The optional parameter +original+ may contain the - # original representation of the entity. - # - # This method uses the option +entity_output+ to determine the output form for the entity. - def entity_to_str(e, original = nil) - entity_output = @options[:entity_output] - - if entity_output == :as_char && - (c = e.char.encode(@root.options[:encoding]) rescue nil) && - ((c = e.char) == '"' || !ESCAPE_MAP.key?(c)) - c - elsif (entity_output == :as_input || entity_output == :as_char) && original - original - elsif (entity_output == :symbolic || ESCAPE_MAP.key?(e.char)) && !e.name.nil? - "&#{e.name};" - else # default to :numeric - "&##{e.code_point};" - end - end - - # Return the HTML representation of the attributes +attr+. - def html_attributes(attr) - return '' if attr.empty? - - attr.map do |k, v| - v.nil? || (k == 'id' && v.strip.empty?) ? '' : " #{k}=\"#{escape_html(v.to_s, :attribute)}\"" - end.join('') - end - - # :stopdoc: - ESCAPE_MAP = { - '<' => '<', - '>' => '>', - '&' => '&', - '"' => '"', - } - ESCAPE_ALL_RE = /<|>|&/ - ESCAPE_TEXT_RE = Regexp.union(REXML::Parsers::BaseParser::REFERENCE_RE, /<|>|&/) - ESCAPE_ATTRIBUTE_RE = Regexp.union(REXML::Parsers::BaseParser::REFERENCE_RE, /<|>|&|"/) - ESCAPE_RE_FROM_TYPE = {all: ESCAPE_ALL_RE, text: ESCAPE_TEXT_RE, attribute: ESCAPE_ATTRIBUTE_RE} - # :startdoc: - - # Escape the special HTML characters in the string +str+. The parameter +type+ specifies what - # is escaped: :all - all special HTML characters except the quotation mark as well as - # entities, :text - all special HTML characters except the quotation mark but no entities and - # :attribute - all special HTML characters including the quotation mark but no entities. - def escape_html(str, type = :all) - str.gsub(ESCAPE_RE_FROM_TYPE[type]) {|m| ESCAPE_MAP[m] || m } - end - - REDUNDANT_LINE_BREAK_REGEX = /([\p{Han}\p{Hiragana}\p{Katakana}]+)\n([\p{Han}\p{Hiragana}\p{Katakana}]+)/u - def fix_cjk_line_break(str) - while str.gsub!(REDUNDANT_LINE_BREAK_REGEX, '\1\2') - end - str - end - - end - - end - -end diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/utils/lru_cache.rb b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/utils/lru_cache.rb deleted file mode 100644 index 32549fba..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/utils/lru_cache.rb +++ /dev/null @@ -1,41 +0,0 @@ -# -*- coding: utf-8; frozen_string_literal: true -*- -# -#-- -# Copyright (C) 2009-2019 Thomas Leitner -# -# This file is part of kramdown which is licensed under the MIT. -#++ -# - -module Kramdown - module Utils - - # A simple least recently used (LRU) cache. - # - # The cache relies on the fact that Ruby's Hash class maintains insertion order. So deleting - # and re-inserting a key-value pair on access moves the key to the last position. When an - # entry is added and the cache is full, the first entry is removed. - class LRUCache - - # Creates a new LRUCache that can hold +size+ entries. - def initialize(size) - @size = size - @cache = {} - end - - # Returns the stored value for +key+ or +nil+ if no value was stored under the key. - def [](key) - (val = @cache.delete(key)).nil? ? nil : @cache[key] = val - end - - # Stores the +value+ under the +key+. - def []=(key, value) - @cache.delete(key) - @cache[key] = value - @cache.shift if @cache.length > @size - end - - end - - end -end diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/utils/string_scanner.rb b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/utils/string_scanner.rb deleted file mode 100644 index 2ef194ef..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/utils/string_scanner.rb +++ /dev/null @@ -1,81 +0,0 @@ -# -*- coding: utf-8; frozen_string_literal: true -*- -# -#-- -# Copyright (C) 2009-2019 Thomas Leitner -# -# This file is part of kramdown which is licensed under the MIT. -#++ -# - -require 'strscan' - -module Kramdown - module Utils - - # This patched StringScanner adds line number information for current scan position and a - # start_line_number override for nested StringScanners. - class StringScanner < ::StringScanner - - # The start line number. Used for nested StringScanners that scan a sub-string of the source - # document. The kramdown parser uses this, e.g., for span level parsers. - attr_reader :start_line_number - - # Takes the start line number as optional second argument. - # - # Note: The original second argument is no longer used so this should be safe. - def initialize(string, start_line_number = 1) - super(string) - @start_line_number = start_line_number || 1 - @previous_pos = 0 - @previous_line_number = @start_line_number - end - - # Sets the byte position of the scan pointer. - # - # Note: This also resets some internal variables, so always use pos= when setting the position - # and don't use any other method for that! - def pos=(pos) - if self.pos > pos - @previous_line_number = @start_line_number - @previous_pos = 0 - end - super - end - - # Return information needed to revert the byte position of the string scanner in a performant - # way. - # - # The returned data can be fed to #revert_pos to revert the position to the saved one. - # - # Note: Just saving #pos won't be enough. - def save_pos - [pos, @previous_pos, @previous_line_number] - end - - # Revert the position to one saved by #save_pos. - def revert_pos(data) - self.pos = data[0] - @previous_pos, @previous_line_number = data[1], data[2] - end - - # Returns the line number for current charpos. - # - # NOTE: Requires that all line endings are normalized to '\n' - # - # NOTE: Normally we'd have to add one to the count of newlines to get the correct line number. - # However we add the one indirectly by using a one-based start_line_number. - def current_line_number - # Not using string[@previous_pos..best_pos].count('\n') because it is slower - strscan = ::StringScanner.new(string) - strscan.pos = @previous_pos - old_pos = pos + 1 - @previous_line_number += 1 while strscan.skip_until(/\n/) && strscan.pos <= old_pos - - @previous_pos = (eos? ? pos : pos + 1) - @previous_line_number - end - - end - - end -end diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/utils/unidecoder.rb b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/utils/unidecoder.rb deleted file mode 100644 index 6b196a91..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/utils/unidecoder.rb +++ /dev/null @@ -1,50 +0,0 @@ -# -*- coding: utf-8; frozen_string_literal: true -*- -# -#-- -# Copyright (C) 2009-2019 Thomas Leitner -# -# This file is part of kramdown which is licensed under the MIT. -#++ -# -# This file is based on code originally from the Stringex library and needs the data files from -# Stringex to work correctly. - -module Kramdown - module Utils - - # Provides the ability to tranliterate Unicode strings into plain ASCII ones. - module Unidecoder - - gem 'stringex' - path = $:.find do |dir| - File.directory?(File.join(File.expand_path(dir), "stringex", "unidecoder_data")) - end - - if !path - def self.decode(string) - string - end - else - - CODEPOINTS = Hash.new do |h, k| - h[k] = YAML.load_file(File.join(path, "stringex", "unidecoder_data", "#{k}.yml")) - end - - # Transliterate string from Unicode into ASCII. - def self.decode(string) - string.gsub(/[^\x00-\x7f]/u) do |codepoint| - begin - unpacked = codepoint.unpack("U")[0] - CODEPOINTS[sprintf("x%02x", unpacked >> 8)][unpacked & 255] - rescue StandardError - "?" - end - end - end - - end - - end - - end -end diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/version.rb b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/version.rb deleted file mode 100644 index c48916b3..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/lib/kramdown/version.rb +++ /dev/null @@ -1,15 +0,0 @@ -# -*- coding: utf-8; frozen_string_literal: true -*- -# -#-- -# Copyright (C) 2009-2019 Thomas Leitner -# -# This file is part of kramdown which is licensed under the MIT. -#++ -# - -module Kramdown - - # The kramdown version. - VERSION = '2.4.0' - -end diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/man/man1/kramdown.1 b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/man/man1/kramdown.1 deleted file mode 100644 index cfed337f..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/man/man1/kramdown.1 +++ /dev/null @@ -1,355 +0,0 @@ -.\" generated by kramdown -.TH "KRAMDOWN" "1" "January 2019" -.SH NAME -kramdown \- a fast, pure\-Ruby Markdown\-superset converter -.SH "SYNOPSIS" -\fBkramdown\fP [\fIoptions\fP] [\fIFILE\fP\.\.\.] -.SH "DESCRIPTION" -kramdown is primarily used for parsing a superset of Markdown and converting it to different output formats\. It supports standard Markdown (with some minor modifications) and various extensions like tables and definition lists\. Due to its modular architecture it also allows other input formats than Markdown, for example, HTML or Github Flavored Markdown\. -.P -If \fIFILE\fP is not specified, kramdown reads from the standard input\. The result is written to the standard output\. -.P -There are two sets of options that kramdown accepts: The first one includes the options that are used directly by the kramdown binary\. The second set of options controls how kramdown parses and converts its input\. -.P -Default values for this second set can be set using YAML via the configuration file \fBkramdownrc\fP\&\. Note that configuration option names use underscores, not dashes (dashes are just used in the CLI options names), and boolean options do not have a \fBno\fP variant but a value of \fBtrue\fP or \fBfalse\fP\&\. This file has to be in XDG_CONFIG_HOME on Linux/Unix, ~/Library/Preferences on macOS and ~/AppData/Local on Windows\. -.SH "CLI\-ONLY OPTIONS" -.TP -\fB\-i\fP \fIFORMAT\fP, \fB\-\-input\fP \fIFORMAT\fP -Specify the input format\. Available input formats: \fIkramdown\fP (this is the default), \fImarkdown\fP, or \fIhtml\fP\&\. The input format \fIGFM\fP is available through the \fBkramdown\-parser\-gfm\fP gem\. -.TP -\fB\-o\fP \fIFORMAT\fP, \fB\-\-output\fP \fIFORMAT\fP -Specify one or more output formats separated by commas: \fIhtml\fP (default), \fIkramdown\fP, \fIlatex\fP, \fIman\fP or \fIremove_html_tags\fP\&\. The converter \fIpdf\fP is available through the \fBkramdown\-converter\-pdf\fP gem\. -.TP -\fB\-x\fP \fIEXT\fP, \fB\-\-extension\fP \fIEXT\fP -Load one or more extensions\. The name of the extension should not include the \fBkramdown\-\fP prefix, e\.g\. just \fBparser\-gfm\fP\&\. Multiple extensions can be loaded by separating them with commas\. -.RS -.P -Note: This option has to be used before any other options that rely on the extension already being loaded\. -.RE -.TP -\fB\-\-no\-config\-file\fP -Do not read any configuration file\. Default behavior is to check for a configuration file and read it if it exists\. -.TP -\fB\-\-config\-file\fP \fIFILE\fP -Override the default path and name of the configuration file\. -.TP -\fB\-v\fP, \fB\-\-version\fP -Show the version of kramdown\. -.TP -\fB\-h\fP, \fB\-\-help\fP -Show the help\. -.SH "KRAMDOWN OPTIONS" -.TP -\fB\-\-auto\-id\-prefix\fP \fIARG\fP -Prefix used for automatically generated header IDs -.RS -.P -This option can be used to set a prefix for the automatically generated header IDs so that there is no conflict when rendering multiple kramdown documents into one output file separately\. The prefix should only contain characters that are valid in an ID! -.P -Default: \[u2018]\[u2019] Used by: HTML/Latex converter -.RE -.TP -\fB\-\-[no\-]auto\-id\-stripping\fP -Strip all formatting from header text for automatic ID generation -.RS -.P -If this option is \fBtrue\fP, only the text elements of a header are used for generating the ID later (in contrast to just using the raw header text line)\. -.P -This option will be removed in version 2\.0 because this will be the default then\. -.P -Default: false Used by: kramdown parser -.RE -.TP -\fB\-\-[no\-]auto\-ids\fP -Use automatic header ID generation -.RS -.P -If this option is \fBtrue\fP, ID values for all headers are automatically generated if no ID is explicitly specified\. -.P -Default: true Used by: HTML/Latex converter -.RE -.TP -\fB\-\-entity\-output\fP \fIARG\fP -Defines how entities are output -.RS -.P -The possible values are :as_input (entities are output in the same form as found in the input), :numeric (entities are output in numeric form), :symbolic (entities are output in symbolic form if possible) or :as_char (entities are output as characters if possible, only available on Ruby 1\.9)\. -.P -Default: :as_char Used by: HTML converter, kramdown converter -.RE -.TP -\fB\-\-footnote\-backlink\fP \fIARG\fP -Defines the text that should be used for the footnote backlinks -.RS -.P -The footnote backlink is just text, so any special HTML characters will be escaped\. -.P -If the footnote backlint text is an empty string, no footnote backlinks will be generated\. -.P -Default: \[u2018]\[u0026]8617;\[u2019] Used by: HTML converter -.RE -.TP -\fB\-\-[no\-]footnote\-backlink\-inline\fP -Specifies whether the footnote backlink should always be inline -.RS -.P -With the default of false the footnote backlink is placed at the end of the last paragraph if there is one, or an extra paragraph with only the footnote backlink is created\. -.P -Setting this option to true tries to place the footnote backlink in the last, possibly nested paragraph or header\. If this fails (e\.g\. in the case of a table), an extra paragraph with only the footnote backlink is created\. -.P -Default: false Used by: HTML converter -.RE -.TP -\fB\-\-footnote\-nr\fP \fIARG\fP -The number of the first footnote -.RS -.P -This option can be used to specify the number that is used for the first footnote\. -.P -Default: 1 Used by: HTML converter -.RE -.TP -\fB\-\-footnote\-prefix\fP \fIARG\fP -Prefix used for footnote IDs -.RS -.P -This option can be used to set a prefix for footnote IDs\. This is useful when rendering multiple documents into the same output file to avoid duplicate IDs\. The prefix should only contain characters that are valid in an ID! -.P -Default: \[u2018]\[u2019] Used by: HTML -.RE -.TP -\fB\-\-forbidden\-inline\-options\fP \fIARG\fP -Defines the options that may not be set using the {::options} extension -.RS -.P -The value needs to be an array of option names\. -.P -Default: [template] Used by: HTML converter -.RE -.TP -\fB\-\-header\-offset\fP \fIARG\fP -Sets the output offset for headers -.RS -.P -If this option is c (may also be negative) then a header with level n will be output as a header with level c+n\. If c+n is lower than 1, level 1 will be used\. If c+n is greater than 6, level 6 will be used\. -.P -Default: 0 Used by: HTML converter, Kramdown converter, Latex converter -.RE -.TP -\fB\-\-[no\-]html\-to\-native\fP -Convert HTML elements to native elements -.RS -.P -If this option is \fBtrue\fP, the parser converts HTML elements to native elements\. For example, when parsing \fBhallo\fP the emphasis tag would normally be converted to an \fB:html\fP element with tag type \fB:em\fP\&\. If \fBhtml_to_native\fP is \fBtrue\fP, then the emphasis would be converted to a native \fB:em\fP element\. -.P -This is useful for converters that cannot deal with HTML elements\. -.P -Default: false Used by: kramdown parser -.RE -.TP -\fB\-\-latex\-headers\fP \fIARG\fP -Defines the LaTeX commands for different header levels -.RS -.P -The commands for the header levels one to six can be specified by separating them with commas\. -.P -Default: section,subsection,subsubsection,paragraph,subparagraph,subparagraph Used by: Latex converter -.RE -.TP -\fB\-\-line\-width\fP \fIARG\fP -Defines the line width to be used when outputting a document -.RS -.P -Default: 72 Used by: kramdown converter -.RE -.TP -\fB\-\-link\-defs\fP \fIARG\fP -Pre\-defines link definitions -.RS -.P -This option can be used to pre\-define link definitions\. The value needs to be a Hash where the keys are the link identifiers and the values are two element Arrays with the link URL and the link title\. -.P -If the value is a String, it has to contain a valid YAML hash and the hash has to follow the above guidelines\. -.P -Default: {} Used by: kramdown parser -.RE -.TP -\fB\-\-list\-indent\fP \fIARG\fP -Sets the number of spaces to use for list indentation -.RS -.P -Default: 2 Used by: Kramdown converter -.RE -.TP -\fB\-\-math\-engine\fP \fIARG\fP -Set the math engine -.RS -.P -Specifies the math engine that should be used for converting math blocks/spans\. If this option is set to +nil+, no math engine is used and the math blocks/spans are output as is\. -.P -Options for the selected math engine can be set with the math_engine_opts configuration option\. -.P -Default: mathjax Used by: HTML converter -.RE -.TP -\fB\-\-math\-engine\-opts\fP \fIARG\fP -Set the math engine options -.RS -.P -Specifies options for the math engine set via the math_engine configuration option\. -.P -The value needs to be a hash with key\-value pairs that are understood by the used math engine\. -.P -Default: {} Used by: HTML converter -.RE -.TP -\fB\-\-[no\-]parse\-block\-html\fP -Process kramdown syntax in block HTML tags -.RS -.P -If this option is \fBtrue\fP, the kramdown parser processes the content of block HTML tags as text containing block\-level elements\. Since this is not wanted normally, the default is \fBfalse\fP\&\. It is normally better to selectively enable kramdown processing via the markdown attribute\. -.P -Default: false Used by: kramdown parser -.RE -.TP -\fB\-\-[no\-]parse\-span\-html\fP -Process kramdown syntax in span HTML tags -.RS -.P -If this option is \fBtrue\fP, the kramdown parser processes the content of span HTML tags as text containing span\-level elements\. -.P -Default: true Used by: kramdown parser -.RE -.TP -\fB\-\-[no\-]remove\-block\-html\-tags\fP -Remove block HTML tags -.RS -.P -If this option is \fBtrue\fP, the RemoveHtmlTags converter removes block HTML tags\. -.P -Default: true Used by: RemoveHtmlTags converter -.RE -.TP -\fB\-\-[no\-]remove\-line\-breaks\-for\-cjk\fP -Specifies whether line breaks should be removed between CJK characters -.RS -.P -Default: false Used by: HTML converter -.RE -.TP -\fB\-\-[no\-]remove\-span\-html\-tags\fP -Remove span HTML tags -.RS -.P -If this option is \fBtrue\fP, the RemoveHtmlTags converter removes span HTML tags\. -.P -Default: false Used by: RemoveHtmlTags converter -.RE -.TP -\fB\-\-smart\-quotes\fP \fIARG\fP -Defines the HTML entity names or code points for smart quote output -.RS -.P -The entities identified by entity name or code point that should be used for, in order, a left single quote, a right single quote, a left double and a right double quote are specified by separating them with commas\. -.P -Default: lsquo,rsquo,ldquo,rdquo Used by: HTML/Latex converter -.RE -.TP -\fB\-\-syntax\-highlighter\fP \fIARG\fP -Set the syntax highlighter -.RS -.P -Specifies the syntax highlighter that should be used for highlighting code blocks and spans\. If this option is set to +nil+, no syntax highlighting is done\. -.P -Options for the syntax highlighter can be set with the syntax_highlighter_opts configuration option\. -.P -Default: rouge Used by: HTML/Latex converter -.RE -.TP -\fB\-\-syntax\-highlighter\-opts\fP \fIARG\fP -Set the syntax highlighter options -.RS -.P -Specifies options for the syntax highlighter set via the syntax_highlighter configuration option\. -.P -The value needs to be a hash with key\-value pairs that are understood by the used syntax highlighter\. -.P -Default: {} Used by: HTML/Latex converter -.RE -.TP -\fB\-\-template\fP \fIARG\fP -The name of an ERB template file that should be used to wrap the output or the ERB template itself\. -.RS -.P -This is used to wrap the output in an environment so that the output can be used as a stand\-alone document\. For example, an HTML template would provide the needed header and body tags so that the whole output is a valid HTML file\. If no template is specified, the output will be just the converted text\. -.P -When resolving the template file, the given template name is used first\. If such a file is not found, the converter extension (the same as the converter name) is appended\. If the file still cannot be found, the templates name is interpreted as a template name that is provided by kramdown (without the converter extension)\. If the file is still not found, the template name is checked if it starts with \[u2018]string://\[u2019] and if it does, this prefix is removed and the rest is used as template content\. -.P -kramdown provides a default template named \[u2018]document\[u2019] for each converter\. -.P -Default: \[u2018]\[u2019] Used by: all converters -.RE -.TP -\fB\-\-toc\-levels\fP \fIARG\fP -Defines the levels that are used for the table of contents -.RS -.P -The individual levels can be specified by separating them with commas (e\.g\. 1,2,3) or by using the range syntax (e\.g\. 1\.\.3)\. Only the specified levels are used for the table of contents\. -.P -Default: 1\.\.6 Used by: HTML/Latex converter -.RE -.TP -\fB\-\-[no\-]transliterated\-header\-ids\fP -Transliterate the header text before generating the ID -.RS -.P -Only ASCII characters are used in headers IDs\. This is not good for languages with many non\-ASCII characters\. By enabling this option the header text is transliterated to ASCII as good as possible so that the resulting header ID is more useful\. -.P -The stringex library needs to be installed for this feature to work! -.P -Default: false Used by: HTML/Latex converter -.RE -.TP -\fB\-\-typographic\-symbols\fP \fIARG\fP -Defines a mapping from typographical symbol to output characters -.RS -.P -Typographical symbols are normally output using their equivalent Unicode codepoint\. However, sometimes one wants to change the output, mostly to fallback to a sequence of ASCII characters\. -.P -This option allows this by specifying a mapping from typographical symbol to its output string\. For example, the mapping {hellip: \.\.\.} would output the standard ASCII representation of an ellipsis\. -.P -The available typographical symbol names are: -.IP \(bu 4 -hellip: ellipsis -.IP \(bu 4 -mdash: em\-dash -.IP \(bu 4 -ndash: en\-dash -.IP \(bu 4 -laquo: left guillemet -.IP \(bu 4 -raquo: right guillemet -.IP \(bu 4 -laquo_space: left guillemet followed by a space -.IP \(bu 4 -raquo_space: right guillemet preceeded by a space -.P -Default: {} Used by: HTML/Latex converter -.RE -.SH "EXIT STATUS" -The exit status is 0 if no error happened\. Otherwise it is 1\. -.SH "SEE ALSO" -The kramdown website -.UR http://kramdown\.gettalong\.org -.UE -for more information, especially on the supported input syntax\. -.SH "AUTHOR" -kramdown was written by Thomas Leitner -.MT t_leitner@gmx\.at -.UE -\&\. -.P -This manual page was written by Thomas Leitner -.MT t_leitner@gmx\.at -.UE -\&\. diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/run_tests.rb b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/run_tests.rb deleted file mode 100644 index abda5021..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/run_tests.rb +++ /dev/null @@ -1,46 +0,0 @@ -# -*- coding: utf-8; frozen_string_literal: true -*- -# -#-- -# Copyright (C) 2009-2019 Thomas Leitner -# -# This file is part of kramdown which is licensed under the MIT. -#++ -# - -$:.unshift File.dirname(__FILE__) + '/../lib' -require 'kramdown' -require 'test/unit/assertions' -require 'yaml' - -include Test::Unit::Assertions - -arg = ARGV[0] || File.join(File.dirname(__FILE__), 'testcases') - -arg = if File.directory?(arg) - File.join(arg, '**/*.text') - else - arg + '.text' - end - -width = ((size = `stty size 2>/dev/null`).length > 0 ? size.split.last.to_i : 72) rescue 72 -width -= 8 -fwidth = 0 -Dir[arg].each {|f| fwidth = [fwidth, f.length + 10].max }.each do |file| - print(('Testing ' + file + ' ').ljust([fwidth, width].min)) - $stdout.flush - - html_file = file.sub('.text', '.html') - opts_file = file.sub('.text', '.options') - opts_file = File.join(File.dirname(file), 'options') unless File.exist?(opts_file) - options = File.exist?(opts_file) ? YAML.safe_load(File.read(opts_file)) : {auto_ids: false, footnote_nr: 1} - doc = Kramdown::Document.new(File.read(file), options) - begin - assert_equal(File.read(html_file), doc.to_html) - puts 'PASSED' - rescue StandardError - puts ' FAILED' - puts $!.message if $VERBOSE - puts $!.backtrace if $DEBUG - end - puts "Warnings:\n" + doc.warnings.join("\n") if !doc.warnings.empty? && $VERBOSE -end diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/test_files.rb b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/test_files.rb deleted file mode 100644 index 586de3cc..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/test_files.rb +++ /dev/null @@ -1,305 +0,0 @@ -# -*- coding: utf-8; frozen_string_literal: true -*- -# -#-- -# Copyright (C) 2009-2019 Thomas Leitner -# -# This file is part of kramdown which is licensed under the MIT. -#++ -# - -require 'minitest/autorun' -require 'kramdown' -require 'yaml' -require 'tmpdir' -require 'open3' - -begin - require 'kramdown/converter/syntax_highlighter/rouge' - - Kramdown::Converter::SyntaxHighlighter::Rouge.formatter_class.send(:define_method, :format) do |tokens, &b| - super(tokens, &b).sub(/<\/code><\/pre>\n?/, "\n") - end - - # custom formatter for tests - module Rouge - module Formatters - class RougeHTMLFormatters < Kramdown::Converter::SyntaxHighlighter::Rouge.formatter_class - - tag 'rouge_html_formatters' - - def stream(tokens, &b) - yield %(
    ) - super - yield %(
    ) - end - - end - end - end -rescue LoadError, SyntaxError, NameError -end - -Encoding.default_external = 'utf-8' - -class TestFiles < Minitest::Test - - EXCLUDE_KD_FILES = [].compact - - # Generate test methods for kramdown-to-xxx conversion - Dir[File.dirname(__FILE__) + '/testcases/**/*.text'].each do |text_file| - next if EXCLUDE_KD_FILES.any? {|f| text_file =~ /#{f}/ } - basename = text_file.sub(/\.text$/, '') - opts_file = text_file.sub(/\.text$/, '.options') - (Dir[basename + ".*"] - [text_file, opts_file]).each do |output_file| - output_format = File.extname(output_file)[1..-1] - next unless Kramdown::Converter.const_defined?(output_format[0..0].upcase + output_format[1..-1]) - define_method('test_' + text_file.tr('.', '_') + "_to_#{output_format}") do - opts_file = File.join(File.dirname(text_file), 'options') unless File.exist?(opts_file) - options = File.exist?(opts_file) ? YAML.load(File.read(opts_file)) : {auto_ids: false, footnote_nr: 1} - doc = Kramdown::Document.new(File.read(text_file), options) - assert_equal(File.read(output_file), doc.send("to_#{output_format}")) - end - end - end - - # Generate test methods for html-to-{html,kramdown} conversion - `tidy -v 2>&1` - if $?.exitstatus != 0 - warn("Skipping html-to-{html,kramdown} tests because tidy executable is missing") - else - EXCLUDE_HTML_FILES = [ - 'test/testcases/block/06_codeblock/whitespace.html', # bc of span inside pre - 'test/testcases/block/09_html/simple.html', # bc of xml elements - 'test/testcases/span/03_codespan/highlighting.html', # bc of span elements inside code element - 'test/testcases/block/04_header/with_auto_ids.html', # bc of auto_ids=true option - 'test/testcases/block/04_header/header_type_offset.html', # bc of header_offset option - 'test/testcases/block/06_codeblock/rouge/simple.html', # bc of double surrounding
    - 'test/testcases/block/06_codeblock/rouge/multiple.html', # bc of double surrounding
    - 'test/testcases/block/06_codeblock/highlighting.html', # bc of span elements inside code element - 'test/testcases/block/06_codeblock/highlighting-opts.html', # bc of span elements inside code element - 'test/testcases/block/06_codeblock/guess_lang_css_class.html', # bc of double surrounding
    - 'test/testcases/block/12_extension/options3.html', # bc of rouge - 'test/testcases/block/14_table/empty_tag_in_cell.html', # bc of tidy - 'test/testcases/block/15_math/mathjax_preview.html', # bc of mathjax preview - 'test/testcases/block/15_math/mathjax_preview_simple.html', # bc of mathjax preview - 'test/testcases/block/15_math/mathjax_preview_as_code.html', # bc of mathjax preview - 'test/testcases/span/05_html/mark_element.html', # bc of tidy - 'test/testcases/block/09_html/xml.html', # bc of tidy - 'test/testcases/span/05_html/xml.html', # bc of tidy - ].compact - EXCLUDE_HTML_TEXT_FILES = [ - 'test/testcases/block/09_html/parse_as_span.htmlinput', - 'test/testcases/block/09_html/parse_as_raw.htmlinput', - ].compact - Dir[File.dirname(__FILE__) + '/testcases/**/*.{html,htmlinput}'].each do |html_file| - next if EXCLUDE_HTML_FILES.any? {|f| html_file =~ /#{f}/ } - - out_files = [] - out_files << [(html_file =~ /\.htmlinput$/ ? html_file.sub(/input$/, '') : html_file), :to_html] - if html_file =~ /\.htmlinput$/ && EXCLUDE_HTML_TEXT_FILES.none? {|f| html_file =~ /#{f}/ } - out_files << [html_file.sub(/htmlinput$/, 'text'), :to_kramdown] - end - out_files.select {|f, _| File.exist?(f) }.each do |out_file, out_method| - define_method('test_' + html_file.tr('.', '_') + "_to_#{File.extname(out_file)}") do - opts_file = html_file.sub(/\.html(input)?$/, '.options') - opts_file = File.join(File.dirname(html_file), 'options') unless File.exist?(opts_file) - options = File.exist?(opts_file) ? YAML.load(File.read(opts_file)) : {auto_ids: false, footnote_nr: 1} - doc = Kramdown::Document.new(File.read(html_file), options.merge(input: 'html')) - if out_method == :to_html - assert_equal(tidy_output(File.read(out_file)), tidy_output(doc.send(out_method))) - else - assert_equal(File.read(out_file), doc.send(out_method)) - end - end - end - end - end - - def tidy_output(out) - cmd = "tidy -q --doctype omit -utf8" - result, error, status = Open3.capture3(cmd, stdin_data: out) - if status.exitstatus == 2 - raise "Problem using tidy: #{error}" - end - result - end - - # Generate test methods for text-to-latex conversion and compilation - `latex -v 2>&1` - if $?.exitstatus != 0 - warn("Skipping latex compilation tests because latex executable is missing") - else - EXCLUDE_LATEX_FILES = [ - 'test/testcases/span/01_link/image_in_a.text', # bc of image link - 'test/testcases/span/01_link/imagelinks.text', # bc of image links - 'test/testcases/span/01_link/empty_title.text', - 'test/testcases/span/04_footnote/markers.text', # bc of footnote in header - 'test/testcases/block/06_codeblock/with_lang_in_fenced_block_name_with_dash.text', - 'test/testcases/block/06_codeblock/with_lang_in_fenced_block_any_char.text', - 'test/testcases/block/03_paragraph/standalone_image.text', # bc of standalone image - 'test/testcases/cjk-line-break.text', # latex unicode support - ].compact - Dir[File.dirname(__FILE__) + '/testcases/**/*.text'].each do |text_file| - next if EXCLUDE_LATEX_FILES.any? {|f| text_file =~ /#{f}$/ } - define_method('test_' + text_file.tr('.', '_') + "_to_latex_compilation") do - latex = Kramdown::Document.new(File.read(text_file), auto_ids: false, footnote_nr: 1, - template: 'document').to_latex - Dir.mktmpdir do |tmpdir| - result = IO.popen("latex -output-directory='#{tmpdir}' 2>/dev/null", 'r+') do |io| - io.write(latex) - io.close_write - io.read - end - assert($?.exitstatus == 0, result.scan(/^!(.*\n.*)/).join("\n")) - end - end - end - end - - # Generate test methods for text->kramdown->html conversion - `tidy -v 2>&1` - if $?.exitstatus != 0 - warn("Skipping text->kramdown->html tests because tidy executable is missing") - else - EXCLUDE_TEXT_FILES = [ - 'test/testcases/span/05_html/markdown_attr.text', # bc of markdown attr - 'test/testcases/block/09_html/markdown_attr.text', # bc of markdown attr - 'test/testcases/span/extension/options.text', # bc of parse_span_html option - 'test/testcases/block/12_extension/options.text', # bc of options option - 'test/testcases/block/12_extension/options3.text', # bc of options option - 'test/testcases/block/09_html/content_model/tables.text', # bc of parse_block_html option - 'test/testcases/block/09_html/html_to_native/header.text', # bc of auto_ids option that interferes - 'test/testcases/block/09_html/html_to_native/table_simple.text', # bc of tr style attr getting removed - 'test/testcases/block/09_html/simple.text', # bc of webgen:block elements - 'test/testcases/block/11_ial/simple.text', # bc of change of ordering of attributes in header - 'test/testcases/span/extension/comment.text', # bc of comment text modifications (can this be avoided?) - 'test/testcases/block/04_header/header_type_offset.text', # bc of header_offset being applied twice - 'test/testcases/block/06_codeblock/rouge/simple.text', - 'test/testcases/block/06_codeblock/rouge/multiple.text', # check, what document contain more, than one code block - 'test/testcases/block/14_table/empty_tag_in_cell.text', # bc of tidy - 'test/testcases/span/01_link/link_defs_with_ial.text', # bc of attribute ordering - 'test/testcases/span/05_html/mark_element.text', # bc of tidy - 'test/testcases/block/09_html/xml.text', # bc of tidy - 'test/testcases/span/05_html/xml.text', # bc of tidy - 'test/testcases/block/03_paragraph/standalone_image.text', # bc of standalone image - 'test/testcases/cjk-line-break.text', - 'test/testcases/block/09_html/standalone_image_in_div.html', # bc of standalone image - 'test/testcases/span/abbreviations/abbrev_in_html.text', # bc of invalid abbr tag in SVG - ].compact - Dir[File.dirname(__FILE__) + '/testcases/**/*.text'].each do |text_file| - next if EXCLUDE_TEXT_FILES.any? {|f| text_file =~ /#{f}$/ } - html_file = text_file.sub(/\.text$/, '.html') - next unless File.exist?(html_file) - define_method('test_' + text_file.tr('.', '_') + "_to_kramdown_to_html") do - opts_file = text_file.sub(/\.text$/, '.options') - opts_file = File.join(File.dirname(text_file), 'options') unless File.exist?(opts_file) - options = File.exist?(opts_file) ? YAML.load(File.read(opts_file)) : {auto_ids: false, footnote_nr: 1} - kdtext = Kramdown::Document.new(File.read(text_file), options).to_kramdown - html = Kramdown::Document.new(kdtext, options).to_html - assert_equal(tidy_output(File.read(html_file)), tidy_output(html)) - kdtext4 = Kramdown::Document.new(File.read(text_file), options.merge({list_indent: 4})).to_kramdown - html = Kramdown::Document.new(kdtext4, options).to_html - assert_equal(tidy_output(File.read(html_file)), tidy_output(html)) - end - end - end - - # Generate test methods for html-to-kramdown-to-html conversion - `tidy -v 2>&1` - if $?.exitstatus != 0 - warn("Skipping html-to-kramdown-to-html tests because tidy executable is missing") - else - EXCLUDE_HTML_KD_FILES = [ - 'test/testcases/span/extension/options.html', # bc of parse_span_html option - 'test/testcases/span/05_html/normal.html', # bc of br tag before closing p tag - 'test/testcases/block/12_extension/nomarkdown.html', # bc of nomarkdown extension - 'test/testcases/block/12_extension/options3.html', # bc of rouge - 'test/testcases/block/09_html/simple.html', # bc of webgen:block elements - 'test/testcases/block/09_html/markdown_attr.html', # bc of markdown attr - 'test/testcases/block/09_html/html_to_native/table_simple.html', # bc of invalidly converted simple table - 'test/testcases/block/06_codeblock/whitespace.html', # bc of entity to char conversion - 'test/testcases/block/06_codeblock/rouge/simple.html', # bc of double surrounding
    - 'test/testcases/block/06_codeblock/rouge/multiple.html', # bc of double surrounding
    - 'test/testcases/block/06_codeblock/guess_lang_css_class.html', # bc of double surrounding
    - 'test/testcases/block/06_codeblock/highlighting.html', # bc of span elements inside code element - 'test/testcases/block/06_codeblock/highlighting-opts.html', # bc of span elements inside code element - 'test/testcases/block/11_ial/simple.html', # bc of change of ordering of attributes in header - 'test/testcases/span/03_codespan/highlighting.html', # bc of span elements inside code element - 'test/testcases/block/04_header/with_auto_ids.html', # bc of auto_ids=true option - 'test/testcases/block/04_header/header_type_offset.html', # bc of header_offset option - 'test/testcases/block/16_toc/toc_exclude.html', # bc of different attribute ordering - 'test/testcases/span/autolinks/url_links.html', # bc of quot entity being converted to char - 'test/testcases/block/14_table/empty_tag_in_cell.html', # bc of tidy - 'test/testcases/span/01_link/link_defs_with_ial.html', # bc of attribute ordering - 'test/testcases/span/05_html/mark_element.html', # bc of tidy - 'test/testcases/block/09_html/xml.html', # bc of tidy - 'test/testcases/span/05_html/xml.html', # bc of tidy - 'test/testcases/block/03_paragraph/standalone_image.html', # bc of standalone image - 'test/testcases/block/15_math/normal.html', # bc of mathjax and HTML parser - 'test/testcases/block/15_math/gh_128.html', # bc of mathjax and HTML parser - 'test/testcases/span/04_footnote/backlink_inline.html', # bc of mathjax - 'test/testcases/block/09_html/standalone_image_in_div.html', # bc of standalone image - 'test/testcases/block/09_html/processing_instruction.html', # bc of PI - ].compact - Dir[File.dirname(__FILE__) + '/testcases/**/*.html'].each do |html_file| - next if EXCLUDE_HTML_KD_FILES.any? {|f| html_file =~ /#{f}$/ } - define_method('test_' + html_file.tr('.', '_') + "_to_kramdown_to_html") do - kd = Kramdown::Document.new(File.read(html_file), input: 'html', - auto_ids: false, footnote_nr: 1).to_kramdown - opts_file = html_file.sub(/\.html$/, '.options') - opts_file = File.join(File.dirname(html_file), 'options') unless File.exist?(opts_file) - options = File.exist?(opts_file) ? YAML.load(File.read(opts_file)) : {auto_ids: false, footnote_nr: 1} - doc = Kramdown::Document.new(kd, options) - assert_equal(tidy_output(File.read(html_file)), tidy_output(doc.to_html)) - end - end - end - - # Generate test methods for text-manpage conversion - Dir[File.dirname(__FILE__) + '/testcases/man/**/*.text'].each do |text_file| - define_method('test_' + text_file.tr('.', '_') + "_to_man") do - man_file = text_file.sub(/\.text$/, '.man') - doc = Kramdown::Document.new(File.read(text_file)) - assert_equal(File.read(man_file), doc.to_man) - end - end - - EXCLUDE_MODIFY = [ - 'test/testcases/block/06_codeblock/rouge/multiple.text', # bc of HTMLFormater in options - ].compact - - # Generate test methods for asserting that converters don't modify the document tree. - Dir[File.dirname(__FILE__) + '/testcases/**/*.text'].each do |text_file| - opts_file = text_file.sub(/\.text$/, '.options') - options = File.exist?(opts_file) ? YAML.load(File.read(opts_file)) : {auto_ids: false, footnote_nr: 1} - (Kramdown::Converter.constants.map(&:to_sym) - - [:Base, :RemoveHtmlTags, :MathEngine, :SyntaxHighlighter]).each do |conv_class| - next if EXCLUDE_MODIFY.any? {|f| text_file =~ /#{f}$/ } - define_method("test_whether_#{conv_class}_modifies_tree_with_file_#{text_file.tr('.', '_')}") do - doc = Kramdown::Document.new(File.read(text_file), options) - options_before = Marshal.load(Marshal.dump(doc.options)) - tree_before = Marshal.load(Marshal.dump(doc.root)) - Kramdown::Converter.const_get(conv_class).convert(doc.root, doc.options) - assert_equal(options_before, doc.options) - assert_tree_not_changed(tree_before, doc.root) - end - end - end - - def assert_tree_not_changed(old, new) - assert_equal(old.type, new.type, "type mismatch") - if old.value.kind_of?(Kramdown::Element) - assert_tree_not_changed(old.value, new.value) - else - assert(old.value == new.value, "value mismatch") - end - assert_equal(old.attr, new.attr, "attr mismatch") - assert_equal(old.options, new.options, "options mismatch") - assert_equal(old.children.length, new.children.length, "children count mismatch") - - old.children.each_with_index do |child, index| - assert_tree_not_changed(child, new.children[index]) - end - end - -end diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/test_location.rb b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/test_location.rb deleted file mode 100644 index d2642c78..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/test_location.rb +++ /dev/null @@ -1,216 +0,0 @@ -# -*- coding: utf-8; frozen_string_literal: true -*- -# -#-- -# Copyright (C) 2009-2019 Thomas Leitner -# -# This file is part of kramdown which is licensed under the MIT. -#++ -# - -require 'minitest/autorun' -require 'kramdown' - -Encoding.default_external = 'utf-8' - -describe 'location' do - # checks that +element+'s :location option corresponds to the location stored - # in the element.attr['class'] - def check_element_for_location(element) - if (match = /^line-(\d+)/.match(element.attr['class'] || '')) - expected_line = match[1].to_i - assert_equal(expected_line, element.options[:location]) - end - element.children.each do |child| - check_element_for_location(child) - end - end - - # Test cases consist of a kramdown string that uses IALs to specify the expected - # line numbers for a given element. - test_cases = { - 'autolink' => %(testing autolinks\n\n{:.line-3}), - 'blockquote' => %( - > block quote1 - > - > * {:.line-3} list item in block quote - > * {:.line-4} list item in block quote - > {:.line-3} - {:.line-1} - - > block quote2 - {:.line-8} - ), - 'codeblock' => %(\na para\n\n~~~~\ntest code 1\n~~~~\n{:.line-3}\n\n test code 2\n{:.line-8}\n), - 'codespan' => %(a para\n\nanother para ``{:.line-3} with code\n), - 'emphasis' => %( - para *span*{:.line-1} - {:.line-1} - - ## header *span*{:.line-4} - {:.line-4} - - Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod - tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, - quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo - consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse - cillum *short span on single line*{:.line-11} - dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non - *long span over multiple lines - proident, sunt in culpa qui officia deserunt - mollit anim id est laborum.*{:.line-13} - Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod - tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, - quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo - `code span`{:.line-18} - Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod - tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, - quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo - {:.line-7} - ), - 'header' => %( - # header1 - {:.line-1} - - ## header2 - {:.line-4} - - ## header3 - {:.line-7} - - header4 - ======= - {:.line-10} - - ^ - - header5 - ------- - {:.line-16} - ), - 'horizontal_rule' => %(\na para\n\n----\n{:.line-3}\n), - 'html_entity' => "a para\n\nanother para with &{:.line-3} html entity.\n", - 'link' => %( - a para - - This is [a link](http://rubyforge.org){:.line-3} to a page. - - Here comes a ![smiley](../images/smiley.png){:.line-5} - ), - 'list' => %( - * {:.line-1} list item - * {:.line-2} list item - * {:.line-3} list item - {:.line-1} - - {:.line-7} - 1. {:.line-7} list item - 2. {:.line-8} list item - 3. {:.line-9} list item - - {:.line-12} - definition term 1 - : {:.line-13} definition definition 1 - definition term 2 - : {:.line-15} definition definition 2 - ), - 'math_block' => %(\na para\n\n$$5+5$$\n{:.line-3}\n), - 'math_inline' => %(\na para\n\nanother para with inline math $$5+5$${:.line-3}\n), - 'paragraph' => %( - para1 - {:.line-1} - - para2 - {:.line-4} - - Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod - tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, - quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo - consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse - {:.line-7} - - {:.line-14} - para with leading IAL - ), - 'table' => %( - a para - - |first|second|third| - |-----|------|-----| - |a |b |c | - {:.line-3} - ), - 'typographic_symbol' => %( - a para - - another para ---{:.line-3} - - another para ...{:.line-5} - ), - 'gh issue 129' => %( - `|` - {:.line-1} - ), - 'gh issue 131' => %( - * {:.line-1} test - line 2 - * {:.line-3} second - * {:.line-4} third - * {:.line-5} * {:.line-5} one - * {:.line-6} two - ), - 'gh issue 158' => %( - 😁😁😁😁😁😁😁😁😁😁😁😁😁😁😁😁😁😁😁😁😁😁😁😁😁😁😁😁😁😁 - {:.line-1} - - - {:.line-4} T - {:.line-4} - - # T - {:.line-7} - ), - 'gh issue 243 - HTML raw elements' => %( -
      -
    • Test
    • -
    - ), - } - test_cases.each do |name, test_string| - it "Handles #{name}" do - doc = Kramdown::Document.new(test_string.gsub(/^ /, '').strip) - check_element_for_location(doc.root) - end - end - - it 'adds location info to duplicate abbreviation definition warnings' do - test_string = %(This snippet contains a duplicate abbreviation definition - -*[duplicate]: The first definition -*[duplicate]: The second definition - ) - doc = Kramdown::Document.new(test_string.strip) - assert_equal(["Duplicate abbreviation ID 'duplicate' on line 4 - overwriting"], doc.warnings) - end - - it 'handles abbreviations' do - str = "This *is* ABC and\n**and** ABC second\nanother ABC\nas ABC as\nABC at the end.\n\n*[ABC]: ABC" - doc = Kramdown::Document.new(str) - doc.root.children.first.children.select {|e| e.type == :abbreviation }.each_with_index do |e, i| - assert_equal(i + 1, e.options[:location]) - end - end - - it 'handles line breaks' do - str = "First \nsecond\\\\\nthird \n" - doc = Kramdown::Document.new(str) - doc.root.children.first.children.select {|e| e.type == :br }.each_with_index do |e, i| - assert_equal(i + 1, e.options[:location]) - end - end - - it 'handles smart quotes' do - str = "This is 'first'\nand 'second' and\n'third'" - doc = Kramdown::Document.new(str) - doc.root.children.first.children.select {|e| e.type == :smart_quote }.each_with_index do |e, i| - assert_equal(((i + 1) / 2.0).ceil, e.options[:location]) - end - end -end diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/test_string_scanner_kramdown.rb b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/test_string_scanner_kramdown.rb deleted file mode 100644 index 713c03c4..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/test_string_scanner_kramdown.rb +++ /dev/null @@ -1,27 +0,0 @@ -# -*- coding: utf-8; frozen_string_literal: true -*- -# -#-- -# Copyright (C) 2009-2019 Thomas Leitner -# -# This file is part of kramdown which is licensed under the MIT. -#++ -# - -require 'minitest/autorun' -require 'kramdown/utils/string_scanner' - -describe Kramdown::Utils::StringScanner do - [ - ["...........X............", [/X/], 1], - ["1\n2\n3\n4\n5\n6X", [/X/], 6], - ["1\n2\n3\n4\n5\n6X\n7\n8X", [/X/, /X/], 8], - [(".\n" * 1000) + 'X', [/X/], 1001], - ].each_with_index do |test_data, i| - test_string, scan_regexes, expect = test_data - it "computes the correct current_line_number for example ##{i + 1}" do - str_sc = Kramdown::Utils::StringScanner.new(test_string) - scan_regexes.each {|scan_re| str_sc.scan_until(scan_re) } - assert_equal(expect, str_sc.current_line_number) - end - end -end diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/01_blank_line/spaces.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/01_blank_line/spaces.html deleted file mode 100644 index 8b137891..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/01_blank_line/spaces.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/01_blank_line/spaces.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/01_blank_line/spaces.text deleted file mode 100644 index 2cbdaa62..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/01_blank_line/spaces.text +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/01_blank_line/tabs.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/01_blank_line/tabs.html deleted file mode 100644 index 8b137891..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/01_blank_line/tabs.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/01_blank_line/tabs.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/01_blank_line/tabs.text deleted file mode 100644 index 69d6a470..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/01_blank_line/tabs.text +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/02_eob/beginning.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/02_eob/beginning.html deleted file mode 100644 index 8b137891..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/02_eob/beginning.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/02_eob/beginning.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/02_eob/beginning.text deleted file mode 100644 index 8d158026..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/02_eob/beginning.text +++ /dev/null @@ -1,3 +0,0 @@ -^ - - diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/02_eob/end.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/02_eob/end.html deleted file mode 100644 index 8b137891..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/02_eob/end.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/02_eob/end.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/02_eob/end.text deleted file mode 100644 index db56ec3b..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/02_eob/end.text +++ /dev/null @@ -1,3 +0,0 @@ - - -^ diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/02_eob/middle.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/02_eob/middle.html deleted file mode 100644 index 8b137891..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/02_eob/middle.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/02_eob/middle.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/02_eob/middle.text deleted file mode 100644 index 87210a14..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/02_eob/middle.text +++ /dev/null @@ -1,5 +0,0 @@ - - -^ - - diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/indented.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/indented.html deleted file mode 100644 index 810cfc09..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/indented.html +++ /dev/null @@ -1,18 +0,0 @@ -

    This is a para.

    - -

    This is a para.

    - -

    This is a para.

    - -

    This is a para.

    - -
    This is a code block.
    -
    - -

    And this is another.

    - -

    A para - with - mixed -indents. - and with much indent

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/indented.html.gfm b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/indented.html.gfm deleted file mode 100644 index 4440c62e..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/indented.html.gfm +++ /dev/null @@ -1,18 +0,0 @@ -

    This is a para.

    - -

    This is a para.

    - -

    This is a para.

    - -

    This is a para.

    - -
    This is a code block.
    -
    - -

    And this is another.

    - -

    A para -
    with -
    mixed -
    indents. -
    and with much indent

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/indented.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/indented.text deleted file mode 100644 index 5849f5b7..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/indented.text +++ /dev/null @@ -1,19 +0,0 @@ -This is a para. - - This is a para. - - This is a para. - - This is a para. - - This is a code block. - - - -And this is another. - -A para - with - mixed -indents. - and with much indent diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/line_break_last_line.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/line_break_last_line.html deleted file mode 100644 index 9bc47dbf..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/line_break_last_line.html +++ /dev/null @@ -1,9 +0,0 @@ -

    First line
    -https://example.com

    - -

    First line
    -https://example.com

    - -

    Last Line

    - -

    Last Line\

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/line_break_last_line.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/line_break_last_line.text deleted file mode 100644 index bbc4cc53..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/line_break_last_line.text +++ /dev/null @@ -1,9 +0,0 @@ -First line - - -First line\\ - - -Last Line - -Last Line\\ diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/no_newline_at_end.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/no_newline_at_end.html deleted file mode 100644 index 6a209e21..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/no_newline_at_end.html +++ /dev/null @@ -1,5 +0,0 @@ -

    One paragraph -over - multiple lines.

    - -

    Second one without newline.

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/no_newline_at_end.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/no_newline_at_end.text deleted file mode 100644 index 7f1169d6..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/no_newline_at_end.text +++ /dev/null @@ -1,5 +0,0 @@ - One paragraph -over - multiple lines. - -Second one without newline. \ No newline at end of file diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/one_para.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/one_para.html deleted file mode 100644 index 0d20e175..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/one_para.html +++ /dev/null @@ -1 +0,0 @@ -

    This is just a normal paragraph.

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/one_para.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/one_para.text deleted file mode 100644 index 0b01324f..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/one_para.text +++ /dev/null @@ -1 +0,0 @@ -This is just a normal paragraph. diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/standalone_image.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/standalone_image.html deleted file mode 100644 index 7faa971f..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/standalone_image.html +++ /dev/null @@ -1,13 +0,0 @@ -

    para

    - -
    - standalone image -
    standalone image
    -
    - -
    - standalone image -
    standalone image
    -
    - -

    para

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/standalone_image.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/standalone_image.text deleted file mode 100644 index 3010140c..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/standalone_image.text +++ /dev/null @@ -1,9 +0,0 @@ -para -{:standalone} - -![standalone image](some.jpg){:#id .class key="value" standalone} - -![standalone image](some.jpg){:#id .class key="value" standalone} -{:#block-id .block-class block-key="block-value"} - -para diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/to_kramdown.kramdown b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/to_kramdown.kramdown deleted file mode 100644 index 2108d98d..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/to_kramdown.kramdown +++ /dev/null @@ -1,7 +0,0 @@ -aa aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa -\: No definiion list - -a: - -*a*: - diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/to_kramdown.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/to_kramdown.text deleted file mode 100644 index 031d2d18..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/to_kramdown.text +++ /dev/null @@ -1,5 +0,0 @@ -aa aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa aaaa : No definiion list - -a: - -*a*: diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/two_para.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/two_para.html deleted file mode 100644 index d6194ea9..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/two_para.html +++ /dev/null @@ -1,4 +0,0 @@ -

    This is just a normal paragraph. -That goes on to the second line.

    - -

    Another paragraph.

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/two_para.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/two_para.text deleted file mode 100644 index b0c730db..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/two_para.text +++ /dev/null @@ -1,4 +0,0 @@ -This is just a normal paragraph. -That goes on to the second line. - -Another paragraph. diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/with_html_to_native.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/with_html_to_native.html deleted file mode 100644 index a8831e66..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/with_html_to_native.html +++ /dev/null @@ -1 +0,0 @@ -

    some text

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/with_html_to_native.options b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/with_html_to_native.options deleted file mode 100644 index 63936b99..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/with_html_to_native.options +++ /dev/null @@ -1 +0,0 @@ -:html_to_native: true diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/with_html_to_native.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/with_html_to_native.text deleted file mode 100644 index e5fe18a6..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/03_paragraph/with_html_to_native.text +++ /dev/null @@ -1 +0,0 @@ -

    some text diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/atx_header.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/atx_header.html deleted file mode 100644 index 07041072..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/atx_header.html +++ /dev/null @@ -1,57 +0,0 @@ -

    This is a header

    - -

    This is a header

    - -

    This is a header

    - -

    This is a header

    - -
    This is a header
    - -
    This is a header
    - -

    Header

    -

    Header

    - -

    Header

    -
    -

    blockquote

    -
    - -
    header
    -

    paragraph

    - -
    -

    blockquote -### not a header

    -
    - -

    header

    - -

    header

    - -

    header

    - -

    header #

    - -

    header

    - -

    #

    - -

    #

    - -

    Header

    - -

    Header

    - -

    Header

    - -

    Header

    - -

    Header {#9ab}

    - -

    Header{#noid}

    - -

    Header ##{#noid}

    - -

    Last

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/atx_header.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/atx_header.text deleted file mode 100644 index 392b3f69..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/atx_header.text +++ /dev/null @@ -1,54 +0,0 @@ -# This is a header - -## This is a header - -### This is a header - -#### This is a header - -##### This is a header - -###### This is a header - -# Header -^ -# Header - -##Header ##### -> blockquote - -###### header -paragraph - -> blockquote -### not a header - -# header # - -# header# - -#header# - -# header \# - -# header - -# - -# - -### Header {#id} - -### Header ## {#Id} - -### Header ## {#id} - -### Header {#A-Za-z0-9_:t} - -### Header {#9ab} - -### Header{#noid} - -### Header ##{#noid} - -### Last diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/atx_header_no_newline_at_end.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/atx_header_no_newline_at_end.html deleted file mode 100644 index 9f49c3bf..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/atx_header_no_newline_at_end.html +++ /dev/null @@ -1 +0,0 @@ -

    header

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/atx_header_no_newline_at_end.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/atx_header_no_newline_at_end.text deleted file mode 100644 index 7b74be4d..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/atx_header_no_newline_at_end.text +++ /dev/null @@ -1 +0,0 @@ -# header \ No newline at end of file diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/header_type_offset.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/header_type_offset.html deleted file mode 100644 index e031b9a6..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/header_type_offset.html +++ /dev/null @@ -1,11 +0,0 @@ -

    Lorem ipsum

    - -

    Lorem ipsum

    - -

    Lorem ipsum

    - -
    Lorem ipsum
    - -

    Lorem ipsum

    - -

    Lorem ipsum

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/header_type_offset.kramdown b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/header_type_offset.kramdown deleted file mode 100644 index a77deb9b..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/header_type_offset.kramdown +++ /dev/null @@ -1,12 +0,0 @@ -## Lorem ipsum - -### Lorem ipsum - -#### Lorem ipsum - -###### Lorem ipsum - -## Lorem ipsum - -### Lorem ipsum - diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/header_type_offset.latex b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/header_type_offset.latex deleted file mode 100644 index c9017e6e..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/header_type_offset.latex +++ /dev/null @@ -1,12 +0,0 @@ -\subsection*{Lorem ipsum} - -\subsubsection*{Lorem ipsum} - -\paragraph*{Lorem ipsum} - -\subparagraph*{Lorem ipsum} - -\subsection*{Lorem ipsum} - -\subsubsection*{Lorem ipsum} - diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/header_type_offset.options b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/header_type_offset.options deleted file mode 100644 index a8050358..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/header_type_offset.options +++ /dev/null @@ -1,2 +0,0 @@ -:header_offset: 1 -:auto_ids: false \ No newline at end of file diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/header_type_offset.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/header_type_offset.text deleted file mode 100644 index bfaefa28..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/header_type_offset.text +++ /dev/null @@ -1,13 +0,0 @@ -# Lorem ipsum - -## Lorem ipsum - -### Lorem ipsum - -###### Lorem ipsum - -Lorem ipsum -=========== - -Lorem ipsum ------------ diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/setext_header.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/setext_header.html deleted file mode 100644 index 147c3451..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/setext_header.html +++ /dev/null @@ -1,32 +0,0 @@ -

    test

    - -

    test2

    - -

    test

    -

    para

    - -
       header =
    -
    - -

    =

    - -

    This is a para. -With two lines. -And not a header. -=================

    - -
    -

    Blockquote. -Not a Header --

    -
    - -

    header

    - -

    header

    - -

    header

    - -

    header{#noid}

    - -

    header

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/setext_header.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/setext_header.text deleted file mode 100644 index ae94ecd8..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/setext_header.text +++ /dev/null @@ -1,39 +0,0 @@ -test -- - -test2 -========= - -test -- -para - - header -= - - -= - -This is a para. -With two lines. -And not a header. -================= - -> Blockquote. -Not a Header -- - -header {#id} ------------- - -header {#Id} -====== - -header {#A-Za-z0-9_:} ------- - -header{#noid} ------ - -header ------- diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/setext_header_no_newline_at_end.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/setext_header_no_newline_at_end.html deleted file mode 100644 index 9f49c3bf..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/setext_header_no_newline_at_end.html +++ /dev/null @@ -1 +0,0 @@ -

    header

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/setext_header_no_newline_at_end.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/setext_header_no_newline_at_end.text deleted file mode 100644 index 0f00750a..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/setext_header_no_newline_at_end.text +++ /dev/null @@ -1,2 +0,0 @@ -header -====== \ No newline at end of file diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/with_auto_id_prefix.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/with_auto_id_prefix.html deleted file mode 100644 index 724d391b..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/with_auto_id_prefix.html +++ /dev/null @@ -1,3 +0,0 @@ -

    Header 1

    - -

    123

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/with_auto_id_prefix.options b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/with_auto_id_prefix.options deleted file mode 100644 index 83305cbe..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/with_auto_id_prefix.options +++ /dev/null @@ -1,2 +0,0 @@ -:auto_ids: true -:auto_id_prefix: hallo_ diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/with_auto_id_prefix.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/with_auto_id_prefix.text deleted file mode 100644 index acf09fe4..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/with_auto_id_prefix.text +++ /dev/null @@ -1,3 +0,0 @@ -# Header 1 - -# 123 diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/with_auto_id_stripping.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/with_auto_id_stripping.html deleted file mode 100644 index 1d342cd6..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/with_auto_id_stripping.html +++ /dev/null @@ -1 +0,0 @@ -

    This is a header

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/with_auto_id_stripping.options b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/with_auto_id_stripping.options deleted file mode 100644 index 68800f69..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/with_auto_id_stripping.options +++ /dev/null @@ -1 +0,0 @@ -:auto_id_stripping: true diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/with_auto_id_stripping.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/with_auto_id_stripping.text deleted file mode 100644 index 2b57bc8d..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/with_auto_id_stripping.text +++ /dev/null @@ -1 +0,0 @@ -# This is a header diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/with_auto_ids.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/with_auto_ids.html deleted file mode 100644 index af8126d5..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/with_auto_ids.html +++ /dev/null @@ -1,21 +0,0 @@ -

    This is a header

    - -

    12. Another one-1-here

    - -

    Do ^& it now

    - -

    Hallo

    - -

    Not now

    - -

    Hallo

    - -

    23232

    - -

    33333

    - -

    hallO

    - -

    Header without ID

    - -

    Transliterated: Đây-là-ví-dụ

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/with_auto_ids.options b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/with_auto_ids.options deleted file mode 100644 index 0a1fec87..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/with_auto_ids.options +++ /dev/null @@ -1,2 +0,0 @@ -:auto_ids: true -:transliterated_header_ids: true diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/with_auto_ids.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/with_auto_ids.text deleted file mode 100644 index f4cd91b3..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/04_header/with_auto_ids.text +++ /dev/null @@ -1,24 +0,0 @@ -# This is a header - -## 12. Another one-1-here - -### Do ^& it now - -Hallo -===== - -Not now -------- - -# Hallo - -# 23232 - -# 33333 - -## hallO - -# Header without ID -{: id=""} - -# Transliterated: Đây-là-ví-dụ diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/05_blockquote/indented.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/05_blockquote/indented.html deleted file mode 100644 index 734bb7a1..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/05_blockquote/indented.html +++ /dev/null @@ -1,25 +0,0 @@ -
    -

    A normal blockquote.

    -
    - -
    -

    A normal blockquote.

    -
    - -
    -

    A normal blockquote.

    -
    - -
    -

    A normal blockquote.

    -
    - -
    > A codeblock
    -
    - -
    -

    Blockquote -with -mixed -indents.

    -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/05_blockquote/indented.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/05_blockquote/indented.text deleted file mode 100644 index 70850b0d..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/05_blockquote/indented.text +++ /dev/null @@ -1,14 +0,0 @@ -> A normal blockquote. - - > A normal blockquote. - - > A normal blockquote. - - > A normal blockquote. - - > A codeblock - -> Blockquote - > with - >mixed -> indents. diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/05_blockquote/lazy.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/05_blockquote/lazy.html deleted file mode 100644 index 00a21024..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/05_blockquote/lazy.html +++ /dev/null @@ -1,34 +0,0 @@ -
    -

    This is a long -long line.

    -
    - -
    -
    -

    Nested quote -inside -still inside

    -
    -
    - -
    -
    -

    This is a subquote. -over multipline lines. -continuing -here

    -
    -
    - -
    -

    This is a quote - no code

    -
    - -
    -

    This is a quote

    -
    - -
    -

    This is a quote

    -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/05_blockquote/lazy.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/05_blockquote/lazy.text deleted file mode 100644 index adde6a67..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/05_blockquote/lazy.text +++ /dev/null @@ -1,20 +0,0 @@ -> This is a long -long line. - -> > Nested quote -inside -> still inside - -> > This is a subquote. -> > over multipline lines. -> continuing -here - -> This is a quote - no code - -> This is a quote -{: #id} - -> This is a quote -^ diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/05_blockquote/nested.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/05_blockquote/nested.html deleted file mode 100644 index 4bc94f08..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/05_blockquote/nested.html +++ /dev/null @@ -1,10 +0,0 @@ -
    -

    foo

    - -
    -

    bar - baz

    -
    - -

    foo

    -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/05_blockquote/nested.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/05_blockquote/nested.text deleted file mode 100644 index 2176882c..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/05_blockquote/nested.text +++ /dev/null @@ -1,6 +0,0 @@ -> foo -> -> > bar ->> baz -> -> foo diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/05_blockquote/no_newline_at_end.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/05_blockquote/no_newline_at_end.html deleted file mode 100644 index 1de4a60f..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/05_blockquote/no_newline_at_end.html +++ /dev/null @@ -1,4 +0,0 @@ -
    -

    This is a block quote -with no newline.

    -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/05_blockquote/no_newline_at_end.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/05_blockquote/no_newline_at_end.text deleted file mode 100644 index 402648ad..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/05_blockquote/no_newline_at_end.text +++ /dev/null @@ -1,2 +0,0 @@ -> This is a block quote -> with no newline. \ No newline at end of file diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/05_blockquote/very_long_line.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/05_blockquote/very_long_line.html deleted file mode 100644 index 4a9aaf5e..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/05_blockquote/very_long_line.html +++ /dev/null @@ -1,3 +0,0 @@ -
    -

    Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

    -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/05_blockquote/very_long_line.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/05_blockquote/very_long_line.text deleted file mode 100644 index a2b33bdf..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/05_blockquote/very_long_line.text +++ /dev/null @@ -1 +0,0 @@ -> Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/05_blockquote/with_code_blocks.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/05_blockquote/with_code_blocks.html deleted file mode 100644 index 30abd99e..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/05_blockquote/with_code_blocks.html +++ /dev/null @@ -1,15 +0,0 @@ -
    -

    Example:

    - -
    sub status {
    -    print "working";
    -}
    -
    - -

    Or:

    - -
    sub status {
    -    return "working";
    -}
    -
    -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/05_blockquote/with_code_blocks.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/05_blockquote/with_code_blocks.text deleted file mode 100644 index 3b188dd4..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/05_blockquote/with_code_blocks.text +++ /dev/null @@ -1,11 +0,0 @@ ->Example: -> -> sub status { -> print "working"; -> } -> -> Or: -> -> sub status { -> return "working"; -> } diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/disable-highlighting.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/disable-highlighting.html deleted file mode 100644 index 142a5d34..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/disable-highlighting.html +++ /dev/null @@ -1,4 +0,0 @@ -
    x = Class.new
    -
    -
    <a>href</a>
    -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/disable-highlighting.options b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/disable-highlighting.options deleted file mode 100644 index 72e9bc1e..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/disable-highlighting.options +++ /dev/null @@ -1 +0,0 @@ -:enable_coderay: false diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/disable-highlighting.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/disable-highlighting.text deleted file mode 100644 index af4d0bde..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/disable-highlighting.text +++ /dev/null @@ -1,4 +0,0 @@ - x = Class.new -^ - href -{: lang="html"} diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/error.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/error.html deleted file mode 100644 index d9f9da32..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/error.html +++ /dev/null @@ -1,4 +0,0 @@ -

    Some para

    - -

    ~~~~~~ -not codeblock

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/error.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/error.text deleted file mode 100644 index 60ea366c..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/error.text +++ /dev/null @@ -1,4 +0,0 @@ -Some para - -~~~~~~ -not codeblock diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/guess_lang_css_class.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/guess_lang_css_class.html deleted file mode 100644 index 066e909f..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/guess_lang_css_class.html +++ /dev/null @@ -1,15 +0,0 @@ -
    class Foo
    -  def bar
    -    puts 'Hello'
    -  end
    -end
    -
    -
    - -
    class Foo
    -  def bar
    -    puts 'Hello'
    -  end
    -end
    -
    -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/guess_lang_css_class.options b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/guess_lang_css_class.options deleted file mode 100644 index bfc92f45..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/guess_lang_css_class.options +++ /dev/null @@ -1,2 +0,0 @@ -:syntax_highlighter_opts: - guess_lang: true diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/guess_lang_css_class.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/guess_lang_css_class.text deleted file mode 100644 index 4b074a8a..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/guess_lang_css_class.text +++ /dev/null @@ -1,13 +0,0 @@ -~~~ -class Foo - def bar - puts 'Hello' - end -end -~~~ - - class Foo - def bar - puts 'Hello' - end - end diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/highlighting-minted-with-opts.latex b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/highlighting-minted-with-opts.latex deleted file mode 100644 index a092a1f6..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/highlighting-minted-with-opts.latex +++ /dev/null @@ -1,9 +0,0 @@ -\begin{minted}[breaklines,linenos]{ruby} -x = Class.new - -\end{minted} - -\begin{minted}[breaklines,linenos]{html} -this is a reaally, reaally, reaally, reaally, reaally, reaally, reaally, reaally, reaally, reaally, reaally, long link - -\end{minted} diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/highlighting-minted-with-opts.options b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/highlighting-minted-with-opts.options deleted file mode 100644 index b773fc8f..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/highlighting-minted-with-opts.options +++ /dev/null @@ -1,4 +0,0 @@ -:syntax_highlighter: minted -:syntax_highlighter_opts: - wrap: true - line_numbers: true diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/highlighting-minted-with-opts.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/highlighting-minted-with-opts.text deleted file mode 100644 index 26365189..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/highlighting-minted-with-opts.text +++ /dev/null @@ -1,5 +0,0 @@ - x = Class.new -{: .language-ruby} - - this is a reaally, reaally, reaally, reaally, reaally, reaally, reaally, reaally, reaally, reaally, reaally, long link -{: .language-html} diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/highlighting-minted.latex b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/highlighting-minted.latex deleted file mode 100644 index 354d6ab9..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/highlighting-minted.latex +++ /dev/null @@ -1,8 +0,0 @@ -\begin{minted}[]{ruby} -x = Class.new - -\end{minted} -\begin{minted}[]{html} -href - -\end{minted} diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/highlighting-minted.options b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/highlighting-minted.options deleted file mode 100644 index b2ee189a..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/highlighting-minted.options +++ /dev/null @@ -1,3 +0,0 @@ -:syntax_highlighter: minted -:syntax_highlighter_opts: - default_lang: ruby diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/highlighting-minted.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/highlighting-minted.text deleted file mode 100644 index 5ac47460..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/highlighting-minted.text +++ /dev/null @@ -1,4 +0,0 @@ - x = Class.new -^ - href -{: .language-html} diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/highlighting-opts.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/highlighting-opts.html deleted file mode 100644 index b694d375..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/highlighting-opts.html +++ /dev/null @@ -1,6 +0,0 @@ -
    x = Class.new
    -
    -
    -
    <a>href</a>
    -
    -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/highlighting-opts.options b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/highlighting-opts.options deleted file mode 100644 index be21a32e..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/highlighting-opts.options +++ /dev/null @@ -1,7 +0,0 @@ -:syntax_highlighter_opts: - block: - css: class - default_lang: ruby - wrap: span - line_numbers: null - diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/highlighting-opts.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/highlighting-opts.text deleted file mode 100644 index 5ac47460..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/highlighting-opts.text +++ /dev/null @@ -1,4 +0,0 @@ - x = Class.new -^ - href -{: .language-html} diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/highlighting.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/highlighting.html deleted file mode 100644 index 33dd015a..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/highlighting.html +++ /dev/null @@ -1,5 +0,0 @@ -
    x = Class.new
    -
    -
    <a>href</a>
    -
    -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/highlighting.options b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/highlighting.options deleted file mode 100644 index 8133537d..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/highlighting.options +++ /dev/null @@ -1,5 +0,0 @@ -:coderay_default_lang: ruby -:coderay_wrap: span -:coderay_line_numbers: ~ -:coderay_css: class - diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/highlighting.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/highlighting.text deleted file mode 100644 index 5ac47460..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/highlighting.text +++ /dev/null @@ -1,4 +0,0 @@ - x = Class.new -^ - href -{: .language-html} diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/issue_gh45.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/issue_gh45.html deleted file mode 100644 index b096a9ed..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/issue_gh45.html +++ /dev/null @@ -1,164 +0,0 @@ - -

    B

    - -
                           BBBBBBBB. 
    -
    -
    -
    -           BBBB BB BBBBBBBB BBBBB. BBBBBBB BB BBBBB BB BBB BBBB BBBBB BBB BBB BBBB BBB BBBBBBB BBB BBBBBBB. B BBB'B BBBBB BBBB BBB BBBB BBBBBBB BBBB BBBB BBBB BBBBBBBB.
    -
    -
    -                BBB BBBBB BBBBB BBB BBBB BBBB BBBB, BBB BBBBB BB BBBBB BBB BB BBBBBB BBBB BBB BBBBB BBBB BB. BBBBB BBB BBBBB BBBBB BBB BBBB BB BBBB BBBB BBBBB.
    -
    -
    -                         BBBB BBBBB, BBBBB, BBBBBBBB?
    -
    -                   BB BBB BB BBBB BBB BBBB BBB BBBBBB /BBB BB BBBBBBBBB BBBB BBBBBBB BBBBBB BB BBB. 
    -
    -
    -                   BBBB BBBBBBBB BBB BBBB BB BBBBB BBB BBBBBB BBBB BBBBB BBBBBB BBBBBBBBB BBBB BB BBBBB......................................................................
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -              BBBBB B'B BBB BBBBB. BBBB BBBBB BBBBB. ( B BBBBB BBBBBBBBBB BBBBB BBBB'B BBBBB BBBBB. BBB BBBB BBBBB BBBB BBBB. BBBBBBB BBB BB BBBBBBB BBB BBB B BBBB BBBBBBBBBBBB. BBBBB BBBBB.)
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -             BBBB'B BB
    -
    - -

    .

    - -
            B BBB BBB BBB ? B. B BBB BBBBBB BBBB BBB BBBB. BBBBBBB BB BBBBBBB B BBBB BBBB BBB BBBBBB. 
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -         BBBB BB 'BBBB' BBBB BBBBB.
    -
    -
    -                           BBBBBBBB B BBBB BBBBBB BB BBBBBBBB BBB BBBBBBB BBBBBBB BBBBBBB. 
    -
    -
    -     B BBBB BB BBBB. BBBBB BBBBBBBB. BBB BB BB. BB BB BBBB BB BBBBBBBBBB. BB BBBBBBBB BB BBBBBBBBB. 
    -
    -
    -                     BBBBBBBB BB BBBB. BBBBBBB BBB BBBBB BBBBB BBBBB. B'BB BBBBBBB BB BBBBB BBBBB BBBBBBB BBB BBBBB. BBBB. 
    -
    -  B BBBBBB BBBB BB BBBB BBB. (BB BBB BBBBB BBBBB...............B)
    -
    -
    -
    -           BBBB!
    -
    -
    -
    -         BBBB BB BBB BBBBBBB BBBBBB.            B
    -
    - -

    B

    - -
         BBBBB BB/BBB BBBBB!  BBBB BBBB BBBBBBBBBBB 'BBB'B BBBBBB.' 
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -          BBBB BBBBBBB BBBB BB BBB BBBBBBBB BB BBBB BBBBBB BBB BBBBBBBBB BBBB. BBBBBBBB BBBBBBB BBBB BBBB BBBB BB BBBB BB BBBB BB BBBB B BBB BB BBBBB BBBBBB.  B BBBB BBBBBBB BB BBBB BBBBB B BBB BBBBBBB BB BBBBB BBBB. BBB BBBBBBB BBBB. B BBB BBBB BBBB B BBBB BBBBBB BBB B BBBBBB BBBBBB. BBB BB BBBBBB BBBBBB BBBBBBBBBB BB...BBBBB BBBB BBBB BB BBBBB. (BBBBBBB BBB BBBBBB BBB'B BBBB BBB BBBBB BBB BB BBBBB BBBBBBBBBBB  BBBBB B BBBB BBBB BBBBB. 
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -BBBBB BB BB BBBB B'B BBBB BBBBB BBBBB BBB BB BBBBBB/BBB (BBBBB) BBBBBB BB. 
    -                          BBBBBBBB. B BBB BBBB BB BB BBB/BBBBBB BBBBBB BBB BBBB BBBBBBBB BB BB B BBBBBB BBBBBB BBBBB. (BBB/B BBB BBBB BBBB...BBB BBB BBB BBBB BB BB B BBBB BB BBB BB? BBBBBBB B BBB B BBBB BBBBBBBB BBB B BBB BBB BBBBB BBBB BBB BBBB BB B BBBBBBBB BB BBBBB BB BB BBB BBBBB BBB BB BBBBB BBBBBBB B BBB BBBBBBB. BBBBBB (BBBBB) BBBB BBBBB BBBBBBB BBBBB BBBB BBBB BBB. 100 BBBBBB BB BBBBB. BBBB BBB BBB BBBBBB BBB BB. BBB BBBB BB BBB BBBBB! BBB BB BBBBBB BBBBB B BBB'B BBBBBBBBB BBBB BBB BBB. (BBBBBB BBBBBBB BB BBBB BBBBB (BBBBBB BBBBB BBBBB BBBBB.))
    -
    -
    -    BBB B BBBBBBBBBBB BBBB BBB BB BBB. BBBBB BBB BBBBB B BBBB BBBBBB BBBBB BBB. BB BBBBBB BBB BBBB B BBB BB BBBBBBBB BBBBBB BBBB BBB B BBBBBB BBBB BBBBBB BBBBBBB BBBB BBBB BBB BBBBBBBB.
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -           BBBBB!!!!!!!
    -
    -
    -         B BBB BBBB BBBBBB BBBB BBBB BBBB B BBB BBBBB BBB BBBBB B BBBB BBBBBBB BB BB BBBB BBBBBBBBB. B BBBB BBBBBB BBBBBBB BBBB BBBB BBB BBBB.
    -
    -                                               BB BB, BB BBBBBB BBBB, (BBBBBB BB BBB BBBB . BBBBB BB BBBB BBBB BB BB BBBB BBBB B BBBB BB BB (BB BBBB BB BBB BBBBBBB BB BBBBBBB. )) BB'BB BBB BBB'B BB BB BBBB BB B BBBB B BBBBB (BB BBBBBB BB BBB B'BB BBBBBBBB BB BBBB BBBB.)
    -
    -
    -  B BBBBB B'BB BBB BB BBBB BBB BBB.
    -
    - diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/issue_gh45.test b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/issue_gh45.test deleted file mode 100644 index 87f81c91..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/issue_gh45.test +++ /dev/null @@ -1,188 +0,0 @@ - - - B - - - - - BBBBBBBB. - - - - BBBB BB BBBBBBBB BBBBB. BBBBBBB BB BBBBB BB BBB BBBB BBBBB BBB BBB BBBB BBB BBBBBBB BBB BBBBBBB. B BBB'B BBBBB BBBB BBB BBBB BBBBBBB BBBB BBBB BBBB BBBBBBBB. - - - BBB BBBBB BBBBB BBB BBBB BBBB BBBB, BBB BBBBB BB BBBBB BBB BB BBBBBB BBBB BBB BBBBB BBBB BB. BBBBB BBB BBBBB BBBBB BBB BBBB BB BBBB BBBB BBBBB. - - - BBBB BBBBB, BBBBB, BBBBBBBB? - - BB BBB BB BBBB BBB BBBB BBB BBBBBB /BBB BB BBBBBBBBB BBBB BBBBBBB BBBBBB BB BBB. - - - BBBB BBBBBBBB BBB BBBB BB BBBBB BBB BBBBBB BBBB BBBBB BBBBBB BBBBBBBBB BBBB BB BBBBB...................................................................... - - - - - - - - - - - - - - - - - - - - - - BBBBB B'B BBB BBBBB. BBBB BBBBB BBBBB. ( B BBBBB BBBBBBBBBB BBBBB BBBB'B BBBBB BBBBB. BBB BBBB BBBBB BBBB BBBB. BBBBBBB BBB BB BBBBBBB BBB BBB B BBBB BBBBBBBBBBBB. BBBBB BBBBB.) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - BBBB'B BB - - - - - - - - - - - - - - - - - - -. - - B BBB BBB BBB ? B. B BBB BBBBBB BBBB BBB BBBB. BBBBBBB BB BBBBBBB B BBBB BBBB BBB BBBBBB. - - - - - - - - - - - - - - BBBB BB 'BBBB' BBBB BBBBB. - - - BBBBBBBB B BBBB BBBBBB BB BBBBBBBB BBB BBBBBBB BBBBBBB BBBBBBB. - - - B BBBB BB BBBB. BBBBB BBBBBBBB. BBB BB BB. BB BB BBBB BB BBBBBBBBBB. BB BBBBBBBB BB BBBBBBBBB. - - - BBBBBBBB BB BBBB. BBBBBBB BBB BBBBB BBBBB BBBBB. B'BB BBBBBBB BB BBBBB BBBBB BBBBBBB BBB BBBBB. BBBB. - - B BBBBBB BBBB BB BBBB BBB. (BB BBB BBBBB BBBBB...............B) - - - - BBBB! - - - - BBBB BB BBB BBBBBBB BBBBBB. -B - -B - - - - BBBBB BB/BBB BBBBB! BBBB BBBB BBBBBBBBBBB 'BBB'B BBBBBB.' - - - - - - - - - - - - - - - BBBB BBBBBBB BBBB BB BBB BBBBBBBB BB BBBB BBBBBB BBB BBBBBBBBB BBBB. BBBBBBBB BBBBBBB BBBB BBBB BBBB BB BBBB BB BBBB BB BBBB B BBB BB BBBBB BBBBBB. B BBBB BBBBBBB BB BBBB BBBBB B BBB BBBBBBB BB BBBBB BBBB. BBB BBBBBBB BBBB. B BBB BBBB BBBB B BBBB BBBBBB BBB B BBBBBB BBBBBB. BBB BB BBBBBB BBBBBB BBBBBBBBBB BB...BBBBB BBBB BBBB BB BBBBB. (BBBBBBB BBB BBBBBB BBB'B BBBB BBB BBBBB BBB BB BBBBB BBBBBBBBBBB BBBBB B BBBB BBBB BBBBB. - - - - - - - - - - BBBBB BB BB BBBB B'B BBBB BBBBB BBBBB BBB BB BBBBBB/BBB (BBBBB) BBBBBB BB. - BBBBBBBB. B BBB BBBB BB BB BBB/BBBBBB BBBBBB BBB BBBB BBBBBBBB BB BB B BBBBBB BBBBBB BBBBB. (BBB/B BBB BBBB BBBB...BBB BBB BBB BBBB BB BB B BBBB BB BBB BB? BBBBBBB B BBB B BBBB BBBBBBBB BBB B BBB BBB BBBBB BBBB BBB BBBB BB B BBBBBBBB BB BBBBB BB BB BBB BBBBB BBB BB BBBBB BBBBBBB B BBB BBBBBBB. BBBBBB (BBBBB) BBBB BBBBB BBBBBBB BBBBB BBBB BBBB BBB. 100 BBBBBB BB BBBBB. BBBB BBB BBB BBBBBB BBB BB. BBB BBBB BB BBB BBBBB! BBB BB BBBBBB BBBBB B BBB'B BBBBBBBBB BBBB BBB BBB. (BBBBBB BBBBBBB BB BBBB BBBBB (BBBBBB BBBBB BBBBB BBBBB.)) - - - BBB B BBBBBBBBBBB BBBB BBB BB BBB. BBBBB BBB BBBBB B BBBB BBBBBB BBBBB BBB. BB BBBBBB BBB BBBB B BBB BB BBBBBBBB BBBBBB BBBB BBB B BBBBBB BBBB BBBBBB BBBBBBB BBBB BBBB BBB BBBBBBBB. - - - - - - - - - - - - BBBBB!!!!!!! - - - B BBB BBBB BBBBBB BBBB BBBB BBBB B BBB BBBBB BBB BBBBB B BBBB BBBBBBB BB BB BBBB BBBBBBBBB. B BBBB BBBBBB BBBBBBB BBBB BBBB BBB BBBB. - - BB BB, BB BBBBBB BBBB, (BBBBBB BB BBB BBBB . BBBBB BB BBBB BBBB BB BB BBBB BBBB B BBBB BB BB (BB BBBB BB BBB BBBBBBB BB BBBBBBB. )) BB'BB BBB BBB'B BB BB BBBB BB B BBBB B BBBBB (BB BBBBBB BB BBB B'BB BBBBBBBB BB BBBB BBBB.) - - - B BBBBB B'BB BBB BB BBBB BBB BBB. - - - - diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/lazy.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/lazy.html deleted file mode 100644 index 47188f2e..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/lazy.html +++ /dev/null @@ -1,4 +0,0 @@ -
    This is some code
    -
    -This is some  other code
    -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/lazy.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/lazy.text deleted file mode 100644 index 2a95de65..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/lazy.text +++ /dev/null @@ -1,5 +0,0 @@ - This is some -code - - This is some - other code diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/no_newline_at_end.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/no_newline_at_end.html deleted file mode 100644 index 7a003b28..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/no_newline_at_end.html +++ /dev/null @@ -1,2 +0,0 @@ -
    test  
    -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/no_newline_at_end.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/no_newline_at_end.text deleted file mode 100644 index b64563f6..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/no_newline_at_end.text +++ /dev/null @@ -1 +0,0 @@ - test \ No newline at end of file diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/no_newline_at_end_1.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/no_newline_at_end_1.html deleted file mode 100644 index 005870eb..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/no_newline_at_end_1.html +++ /dev/null @@ -1,2 +0,0 @@ -
    test   test
    -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/no_newline_at_end_1.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/no_newline_at_end_1.text deleted file mode 100644 index 65df71e8..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/no_newline_at_end_1.text +++ /dev/null @@ -1,2 +0,0 @@ - test -test diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/normal.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/normal.html deleted file mode 100644 index 0bd2c1f4..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/normal.html +++ /dev/null @@ -1,13 +0,0 @@ -
    starting code
    -
    - -

    paragraph

    - -
    other code  
    -with samples 
    -
    - -

    paragraph

    - -
      ending code
    -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/normal.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/normal.text deleted file mode 100644 index 40ea7023..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/normal.text +++ /dev/null @@ -1,10 +0,0 @@ - starting code - -paragraph - - other code - with samples - -paragraph - - ending code diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/rouge/disabled.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/rouge/disabled.html deleted file mode 100644 index 2cc34d30..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/rouge/disabled.html +++ /dev/null @@ -1,2 +0,0 @@ -
    x = Class.new
    -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/rouge/disabled.options b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/rouge/disabled.options deleted file mode 100644 index 5688828c..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/rouge/disabled.options +++ /dev/null @@ -1,4 +0,0 @@ -:syntax_highlighter: rouge -:syntax_highlighter_opts: - block: - disable: true diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/rouge/disabled.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/rouge/disabled.text deleted file mode 100644 index 0e50b41c..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/rouge/disabled.text +++ /dev/null @@ -1 +0,0 @@ - x = Class.new diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/rouge/multiple.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/rouge/multiple.html deleted file mode 100644 index 6ece5432..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/rouge/multiple.html +++ /dev/null @@ -1,11 +0,0 @@ -
    puts "Hello"
    -
    -
    - -
    puts "World"
    -
    -
    - -
    $foo = new Bar;
    -
    -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/rouge/multiple.options b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/rouge/multiple.options deleted file mode 100644 index b910f756..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/rouge/multiple.options +++ /dev/null @@ -1,4 +0,0 @@ -:syntax_highlighter: rouge -:syntax_highlighter_opts: - default_lang: ruby - formatter: RougeHTMLFormatters diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/rouge/multiple.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/rouge/multiple.text deleted file mode 100644 index d1dd283b..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/rouge/multiple.text +++ /dev/null @@ -1,11 +0,0 @@ -~~~ ruby -puts "Hello" -~~~ - -~~~ ruby -puts "World" -~~~ - -~~~ php?start_inline=1 -$foo = new Bar; -~~~ \ No newline at end of file diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/rouge/simple.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/rouge/simple.html deleted file mode 100644 index 1c2259af..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/rouge/simple.html +++ /dev/null @@ -1,10 +0,0 @@ -
    x = Class.new
    -
    -
    -
    <a>href</a>
    -
    -
    - -
    $foo = new Bar;
    -
    -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/rouge/simple.options b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/rouge/simple.options deleted file mode 100644 index f59e0ff8..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/rouge/simple.options +++ /dev/null @@ -1,3 +0,0 @@ -:syntax_highlighter: rouge -:syntax_highlighter_opts: - default_lang: ruby diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/rouge/simple.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/rouge/simple.text deleted file mode 100644 index 6c740e53..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/rouge/simple.text +++ /dev/null @@ -1,9 +0,0 @@ - x = Class.new -^ - href -{: .language-html} - - -~~~ php?start_inline=1 -$foo = new Bar; -~~~ diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/tilde_syntax.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/tilde_syntax.html deleted file mode 100644 index 1ddd91e9..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/tilde_syntax.html +++ /dev/null @@ -1,7 +0,0 @@ -
    Here comes some code.
    -
    - -
    ~~~~~~~
    -code with tildes
    -~~~~~~~~
    -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/tilde_syntax.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/tilde_syntax.text deleted file mode 100644 index 7625a1bd..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/tilde_syntax.text +++ /dev/null @@ -1,9 +0,0 @@ -~~~~~~~~ -Here comes some code. -~~~~~~~~ - -~~~~~~~~~~~~ -~~~~~~~ -code with tildes -~~~~~~~~ -~~~~~~~~~~~~~~~~~~ diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/whitespace.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/whitespace.html deleted file mode 100644 index dcbb40f3..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/whitespace.html +++ /dev/null @@ -1,3 +0,0 @@ -
    This	issome
    -whitespace
    -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/whitespace.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/whitespace.text deleted file mode 100644 index b15c9c9a..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/whitespace.text +++ /dev/null @@ -1,3 +0,0 @@ - This is some - whitespace -{:.show-whitespaces} diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/with_blank_line.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/with_blank_line.html deleted file mode 100644 index f7c20b2b..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/with_blank_line.html +++ /dev/null @@ -1,13 +0,0 @@ -

    paragraph

    - -
    code block
    -
    -continued here
    -
    - -

    ended

    - -
    next blank line has 4 spaces
    -
    - -

    paragraph

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/with_blank_line.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/with_blank_line.text deleted file mode 100644 index e51dfa53..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/with_blank_line.text +++ /dev/null @@ -1,12 +0,0 @@ -paragraph - - code block - - continued here - - -ended - - next blank line has 4 spaces - -paragraph diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/with_eob_marker.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/with_eob_marker.html deleted file mode 100644 index cca17a20..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/with_eob_marker.html +++ /dev/null @@ -1,6 +0,0 @@ -
    code block
    -
    -continued here
    -
    -
    new block here
    -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/with_eob_marker.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/with_eob_marker.text deleted file mode 100644 index 834c768f..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/with_eob_marker.text +++ /dev/null @@ -1,5 +0,0 @@ - code block - - continued here -^ - new block here diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/with_ial.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/with_ial.html deleted file mode 100644 index 77085b30..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/with_ial.html +++ /dev/null @@ -1,6 +0,0 @@ -
    code block
    -
    -continued here
    -
    -
    new block here
    -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/with_ial.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/with_ial.text deleted file mode 100644 index 4489f2d9..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/with_ial.text +++ /dev/null @@ -1,5 +0,0 @@ - code block - - continued here -{:.cls} - new block here diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/with_lang_in_fenced_block.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/with_lang_in_fenced_block.html deleted file mode 100644 index f5872c30..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/with_lang_in_fenced_block.html +++ /dev/null @@ -1,24 +0,0 @@ -
    def what?
    -  42
    -end
    -
    - -
    def what?
    -  42
    -end
    -
    - -
    def what?
    -  42
    -end
    -
    - -
    def what?
    -  42
    -end
    -
    - -
    def what?
    -  42
    -end
    -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/with_lang_in_fenced_block.options b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/with_lang_in_fenced_block.options deleted file mode 100644 index e2e91dba..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/with_lang_in_fenced_block.options +++ /dev/null @@ -1,2 +0,0 @@ -:syntax_highlighter: null - diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/with_lang_in_fenced_block.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/with_lang_in_fenced_block.text deleted file mode 100644 index 07f437e7..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/with_lang_in_fenced_block.text +++ /dev/null @@ -1,33 +0,0 @@ -~~~ ruby -def what? - 42 -end -~~~ - -~~~ ruby -def what? - 42 -end -~~~ -{:.class1} - -~~~ -def what? - 42 -end -~~~ -{: .language-ruby} - -~~~ ruby -def what? - 42 -end -~~~ -{: .language-python} - -~~~ ruby -def what? - 42 -end -~~~ -{: class="language-python"} diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/with_lang_in_fenced_block_any_char.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/with_lang_in_fenced_block_any_char.html deleted file mode 100644 index 2530b1e0..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/with_lang_in_fenced_block_any_char.html +++ /dev/null @@ -1,8 +0,0 @@ -
    text
    -
    - -
    text
    -
    - -
    text
    -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/with_lang_in_fenced_block_any_char.options b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/with_lang_in_fenced_block_any_char.options deleted file mode 100644 index 871923ca..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/with_lang_in_fenced_block_any_char.options +++ /dev/null @@ -1,2 +0,0 @@ -:enable_coderay: false - diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/with_lang_in_fenced_block_any_char.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/with_lang_in_fenced_block_any_char.text deleted file mode 100644 index 60424a02..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/with_lang_in_fenced_block_any_char.text +++ /dev/null @@ -1,11 +0,0 @@ -~~~ asn.1 -text -~~~ - -~~~ asn#w1 -text -~~~ - -~~~ русский -text -~~~ diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/with_lang_in_fenced_block_name_with_dash.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/with_lang_in_fenced_block_name_with_dash.html deleted file mode 100644 index aa4b60f2..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/with_lang_in_fenced_block_name_with_dash.html +++ /dev/null @@ -1,3 +0,0 @@ -
    s1'dim'a'500'm'500'q'500''
    -index'j'j+1'j-1''
    -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/with_lang_in_fenced_block_name_with_dash.options b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/with_lang_in_fenced_block_name_with_dash.options deleted file mode 100644 index 871923ca..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/with_lang_in_fenced_block_name_with_dash.options +++ /dev/null @@ -1,2 +0,0 @@ -:enable_coderay: false - diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/with_lang_in_fenced_block_name_with_dash.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/with_lang_in_fenced_block_name_with_dash.text deleted file mode 100644 index 423d5b73..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/06_codeblock/with_lang_in_fenced_block_name_with_dash.text +++ /dev/null @@ -1,4 +0,0 @@ -~~~ act-iii -s1'dim'a'500'm'500'q'500'' -index'j'j+1'j-1'' -~~~ diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/07_horizontal_rule/error.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/07_horizontal_rule/error.html deleted file mode 100644 index 068811c0..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/07_horizontal_rule/error.html +++ /dev/null @@ -1,7 +0,0 @@ -

    _ * _

    - -

    — * * *

    - -

    _ - *

    - -

    ———————————————- test

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/07_horizontal_rule/error.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/07_horizontal_rule/error.text deleted file mode 100644 index a024710d..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/07_horizontal_rule/error.text +++ /dev/null @@ -1,7 +0,0 @@ -_ * _ - ---- * * * - -_ - * - ----------------------------------------------- test diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/07_horizontal_rule/normal.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/07_horizontal_rule/normal.html deleted file mode 100644 index e74b6e6c..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/07_horizontal_rule/normal.html +++ /dev/null @@ -1,19 +0,0 @@ -
    -
    -
    - -

    d- -

    - -
    -
    -
    - -

    para

    -

    text

    - -
    - -
    - - -
    -
    - -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/07_horizontal_rule/normal.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/07_horizontal_rule/normal.text deleted file mode 100644 index 986101ab..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/07_horizontal_rule/normal.text +++ /dev/null @@ -1,20 +0,0 @@ -*** -* * * -- - - - -d- - - ---- -___ -*** - -para ------------ -text - -* * * - - - - - - -* * * -{:.test} diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/07_horizontal_rule/sepspaces.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/07_horizontal_rule/sepspaces.html deleted file mode 100644 index dbb86e58..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/07_horizontal_rule/sepspaces.html +++ /dev/null @@ -1,3 +0,0 @@ -
    -
    -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/07_horizontal_rule/sepspaces.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/07_horizontal_rule/sepspaces.text deleted file mode 100644 index a5798b29..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/07_horizontal_rule/sepspaces.text +++ /dev/null @@ -1,3 +0,0 @@ -- - - -* * * -_ _ _ _ _ diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/07_horizontal_rule/septabs.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/07_horizontal_rule/septabs.html deleted file mode 100644 index dbb86e58..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/07_horizontal_rule/septabs.html +++ /dev/null @@ -1,3 +0,0 @@ -
    -
    -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/07_horizontal_rule/septabs.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/07_horizontal_rule/septabs.text deleted file mode 100644 index 464fe20c..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/07_horizontal_rule/septabs.text +++ /dev/null @@ -1,3 +0,0 @@ -- - - -* * * -_ _ _ _ _ diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/brackets_in_item.latex b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/brackets_in_item.latex deleted file mode 100644 index e71fde2a..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/brackets_in_item.latex +++ /dev/null @@ -1,3 +0,0 @@ -\begin{itemize} -\item{} {[}and{]} another -\end{itemize} diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/brackets_in_item.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/brackets_in_item.text deleted file mode 100644 index 515e3a7d..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/brackets_in_item.text +++ /dev/null @@ -1 +0,0 @@ -* \[and\] another diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/escaping.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/escaping.html deleted file mode 100644 index afc795c6..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/escaping.html +++ /dev/null @@ -1,17 +0,0 @@ -

    I have read the book -1984. It was great -- other say that, too!

    - -

    I have read the book -1984. It was great -- other say that, too!

    - -

    I have read the book - 1984. It was great.

    - -

    I have read the book 1984. - - it was great!

    - -

    1984. Was great!

    - -

    - This too!

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/escaping.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/escaping.text deleted file mode 100644 index c3b1c598..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/escaping.text +++ /dev/null @@ -1,17 +0,0 @@ -I have read the book -1984. It was great -- other say that, too! - -I have read the book -1984\. It was great -\- other say that, too! - -I have read the book - 1984. It was great. - -I have read the book 1984. - - it was great! - -1984\. Was great! - -\- This too! diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/item_ial.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/item_ial.html deleted file mode 100644 index e6dfd3a5..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/item_ial.html +++ /dev/null @@ -1,10 +0,0 @@ -
      -
    • IAL at first -continued
    • -
    • another {:.cls}
    • -
    • IAL at last - code
    • -
    • X - test
    • -
    • X OK
    • -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/item_ial.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/item_ial.text deleted file mode 100644 index 67bee706..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/item_ial.text +++ /dev/null @@ -1,8 +0,0 @@ -* {:.cls} IAL at first - continued -* another {:.cls} -* {:.cls} IAL at last - code -* {::nomarkdown type="html"}X{:/nomarkdown} - test -* {::nomarkdown type="html"}X{:/nomarkdown} OK diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/lazy.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/lazy.html deleted file mode 100644 index 01a5f9dd..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/lazy.html +++ /dev/null @@ -1,39 +0,0 @@ -
      -
    • This is a simple -list item
    • -
    • -

      Followed by another -list item

      -
    • -
    • -

      Followed by

      - -

      a para list item -continued here

      -
    • -
    • and a normal one
    • -
    • -

      and

      - -

      a para -continued here

      -
    • -
    - -

    para

    - -
      -
    • multi line -list item
    • -
    - -

    para

    - -
      -
    • list item line1 - one line - two lines
    • -
    • list item line2 -one line -two lines
    • -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/lazy.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/lazy.text deleted file mode 100644 index f372422a..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/lazy.text +++ /dev/null @@ -1,29 +0,0 @@ -* This is a simple -list item -* Followed by another -list item - - -* Followed by - - a para list item -continued here -* and a normal one -* and - - a para -continued here - -para - -* multi line -list item - -para - -* list item line1 - one line - two lines -* list item line2 - one line -two lines diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/lazy_and_nested.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/lazy_and_nested.html deleted file mode 100644 index 90c7447e..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/lazy_and_nested.html +++ /dev/null @@ -1,9 +0,0 @@ -
      -
    1. Root level - * Second level -
        -
      • Third level - * Back to second level
      • -
      -
    2. -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/lazy_and_nested.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/lazy_and_nested.text deleted file mode 100644 index 97a77558..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/lazy_and_nested.text +++ /dev/null @@ -1,4 +0,0 @@ -1. Root level - * Second level - * Third level - * Back to second level diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/list_and_hr.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/list_and_hr.html deleted file mode 100644 index ecf51c76..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/list_and_hr.html +++ /dev/null @@ -1,9 +0,0 @@ -
      -
    • Starting a list
    • -
    - -
    - -
      -
    • Starting a new list
    • -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/list_and_hr.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/list_and_hr.text deleted file mode 100644 index c7fcd47b..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/list_and_hr.text +++ /dev/null @@ -1,5 +0,0 @@ -* Starting a list - -* * * - -* Starting a new list diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/list_and_others.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/list_and_others.html deleted file mode 100644 index 672428ed..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/list_and_others.html +++ /dev/null @@ -1,40 +0,0 @@ -
      -
    • list item
    • -
    - -
    -

    blockquote

    -
    - -

    para -* * * -para - - no list

    - -
      -
    • -

      item

      - -
      -

      block

      -
      - -

      header

      -
    • -
    • -

      test

      - -
      codeblock
      -
      - -

      test

      -
    • -
    • -

      test

      - -
      codeblock
      -
      - -

      test

      -
    • -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/list_and_others.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/list_and_others.text deleted file mode 100644 index f680262c..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/list_and_others.text +++ /dev/null @@ -1,26 +0,0 @@ -* list item - -> blockquote - -para -* * * -para - - no list - -+ item - - > block - - ## header - -* test - - codeblock - - test - -* test - - codeblock - - test diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/mixed.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/mixed.html deleted file mode 100644 index 9bc47e3b..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/mixed.html +++ /dev/null @@ -1,117 +0,0 @@ -

    With tabs/spaces, no paras:

    - -
      -
    • item1
    • -
    • item2
    • -
    • item3
    • -
    - -

    With tabs/spaces, paras:

    - -
      -
    • -

      item1

      -
    • -
    • -

      item2

      -
    • -
    • -

      item3

      -
    • -
    - -

    With tabs/spaces, no paras:

    - -
      -
    1. item1
    2. -
    3. item2
    4. -
    5. item3
    6. -
    - -

    With tabs/spaces, paras:

    - -
      -
    1. -

      item1

      -
    2. -
    3. -

      item2

      -
    4. -
    5. -

      item3

      -
    6. -
    - -

    Nested, without paras:

    - -
      -
    • item1 -
        -
      • item2 -
          -
        • item3
        • -
        -
      • -
      -
    • -
    - -

    Nested, with paras:

    - -
      -
    • -

      item1

      - -
        -
      • item2 -
          -
        • item3 (level 3)
        • -
        -
      • -
      -
    • -
    - -

    Ordered, without paras:

    - -
      -
    1. item1
    2. -
    3. item2 -
        -
      • do
      • -
      • it
      • -
      • now
      • -
      -
    4. -
    5. item3
    6. -
    - -

    Ordered, with paras:

    - -
      -
    1. -

      item1

      -
    2. -
    3. -

      item2

      - -
        -
      • do
      • -
      • it
      • -
      • now
      • -
      -
    4. -
    5. -

      item3

      -
    6. -
    - -

    Mixed tabs and spaces:

    - -
      -
    • some text -
        -
      • nested
      • -
      -
    • -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/mixed.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/mixed.text deleted file mode 100644 index 22b578df..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/mixed.text +++ /dev/null @@ -1,66 +0,0 @@ -With tabs/spaces, no paras: - -* item1 -+ item2 -- item3 - -With tabs/spaces, paras: - -- item1 - -* item2 - -+ item3 - -With tabs/spaces, no paras: - -1. item1 -20. item2 -3. item3 - -With tabs/spaces, paras: - -1. item1 - -2. item2 - -3. item3 - -Nested, without paras: - -* item1 - * item2 - * item3 - -Nested, with paras: - -+ item1 - - * item2 - * item3 (level 3) - -Ordered, without paras: - -1. item1 -2. item2 - * do - * it - * now -3. item3 - -Ordered, with paras: - -1. item1 - -2. item2 - - * do - * it - * now - -3. item3 - -Mixed tabs and spaces: - -* some text - * nested diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/nested.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/nested.html deleted file mode 100644 index 1921ee9d..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/nested.html +++ /dev/null @@ -1,17 +0,0 @@ -
      -
    • some item -
        -
      • nested
      • -
      -
    • -
    • last item
    • -
    -
      -
    • -

      some text

      - -
        -
      • nested
      • -
      -
    • -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/nested.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/nested.text deleted file mode 100644 index c71d864b..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/nested.text +++ /dev/null @@ -1,7 +0,0 @@ -* some item - * nested -* last item -^ -* some text - - * nested diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/other_first_element.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/other_first_element.html deleted file mode 100644 index 3f4cd0f8..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/other_first_element.html +++ /dev/null @@ -1,39 +0,0 @@ -
      -
    • -
      This is a code block.
      -
      -
    • -
    • -
      -

      This is a blockquote.

      -
      -
    • -
    • -

      A header

      -
    • -
    -
      -
    • -
      This is a code block.
      -
      -
    • -
    • -
      -

      This is a blockquote. -continued by some para.

      -
      -
    • -
    • -

      A header

      -

      a para

      -
    • -
    -
      -
    • -
        -
      • nested list
      • -
      • other nested item
      • -
      -
    • -
    • item 2
    • -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/other_first_element.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/other_first_element.text deleted file mode 100644 index 321cef64..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/other_first_element.text +++ /dev/null @@ -1,18 +0,0 @@ -* - This is a code block. -* > This is a blockquote. -* ## A header -^ -* - This is a code block. - -* > This is a blockquote. - continued by some para. - -* A header - ========= - a para -^ -* * nested list - * other nested item -* item 2 diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/simple_ol.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/simple_ol.html deleted file mode 100644 index 84e5a6ba..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/simple_ol.html +++ /dev/null @@ -1,19 +0,0 @@ -
      -
    1. This is a simple list item
    2. -
    3. -

      Followed by another

      -
    4. -
    5. -

      Followed by

      - -

      a para list item

      -
    6. -
    7. and a normal one
    8. -
    9. -

      and

      - -

      a para

      -
    10. -
    - -

    para

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/simple_ol.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/simple_ol.text deleted file mode 100644 index aaf7dae8..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/simple_ol.text +++ /dev/null @@ -1,13 +0,0 @@ -1. This is a simple list item -3. Followed by another - - -10. Followed by - - a para list item -1. and a normal one -2. and - - a para - -para diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/simple_ul.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/simple_ul.html deleted file mode 100644 index 68db05e5..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/simple_ul.html +++ /dev/null @@ -1,48 +0,0 @@ -
      -
    • This is a simple list item
    • -
    • -

      Followed by another

      -
    • -
    • -

      Followed by

      - -

      a para list item

      -
    • -
    • and a normal one
    • -
    • -

      and

      - -

      a para

      -
    • -
    - -

    para

    - -
      -
    • multi line -list item
    • -
    - -

    para

    - -
      -
    • list item line1 -one line -two lines
    • -
    • list item line2 -one line -two lines
    • -
    - -

    para

    - -
      -
    • list item line3 -one line -two lines
    • -
    • list item line4 - one line - two lines
    • -
    - -

    para

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/simple_ul.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/simple_ul.text deleted file mode 100644 index ccd25c35..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/simple_ul.text +++ /dev/null @@ -1,36 +0,0 @@ -* This is a simple list item -* Followed by another - - -* Followed by - - a para list item -* and a normal one -* and - - a para - -para - -* multi line - list item - -para - -* list item line1 - one line - two lines -* list item line2 - one line - two lines - -para - -* list item line3 - one line - two lines -* list item line4 - one line - two lines - -para diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/single_item.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/single_item.html deleted file mode 100644 index e0794614..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/single_item.html +++ /dev/null @@ -1,3 +0,0 @@ -
      -
    • single
    • -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/single_item.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/single_item.text deleted file mode 100644 index 877d3699..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/single_item.text +++ /dev/null @@ -1 +0,0 @@ -* single diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/special_cases.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/special_cases.html deleted file mode 100644 index fbc775ae..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/special_cases.html +++ /dev/null @@ -1,62 +0,0 @@ -
      -
    • -

      not a para -here

      - -
      -

      blockquote

      -
      -
    • -
    • -

      and not - here

      - -
      -

      blockquote

      -
      -
    • -
    • -

      this is a para

      -
    • -
    • -
      -

      blockquote

      -
      -
    • -
    • -

      this too

      -
    • -
    - -

    A paragraph - 1. followed not by ol -- followed not by ul

    - -

    A compact list:

    - -
      -
    • compact
    • -
    • list
    • -
    • items
    • -
    - -

    A normal list:

    - -
      -
    • -

      not

      -
    • -
    • -

      compact

      -
    • -
    • -

      but here

      -
    • -
    - -

    List item without content:

    - -
      -
    • -
    • a
    • -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/special_cases.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/special_cases.text deleted file mode 100644 index 7406305d..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/08_list/special_cases.text +++ /dev/null @@ -1,40 +0,0 @@ -* not a para - here - - > blockquote - -* and not - here - - >blockquote - -* this is a para - -* > blockquote - -* this too - -^ - -A paragraph - 1. followed not by ol -- followed not by ul - -A compact list: - -* compact -* list -* items - -A normal list: - -* not - -* compact - -* but here - -List item without content: - -* -* a diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/comment.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/comment.html deleted file mode 100644 index 8d31bd4e..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/comment.html +++ /dev/null @@ -1,18 +0,0 @@ - - -

    para1

    - - - -

    para2

    - - -

    para

    - -
    -

    This is -

    -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/comment.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/comment.text deleted file mode 100644 index b632bf29..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/comment.text +++ /dev/null @@ -1,15 +0,0 @@ - - -para1 - - - -para2 - - para - -> This is -> diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/content_model/deflists.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/content_model/deflists.html deleted file mode 100644 index 587d55af..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/content_model/deflists.html +++ /dev/null @@ -1,6 +0,0 @@ -
    -
    text
    -
    -

    para

    -
    -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/content_model/deflists.options b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/content_model/deflists.options deleted file mode 100644 index a660da25..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/content_model/deflists.options +++ /dev/null @@ -1 +0,0 @@ -:parse_block_html: true diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/content_model/deflists.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/content_model/deflists.text deleted file mode 100644 index 1e381d1f..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/content_model/deflists.text +++ /dev/null @@ -1,6 +0,0 @@ -
    -
    *text*
    -
    -para -
    -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/content_model/tables.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/content_model/tables.html deleted file mode 100644 index e11dc14b..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/content_model/tables.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - -
    Usage -Output -
    Some data -

    Some more

    -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/content_model/tables.options b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/content_model/tables.options deleted file mode 100644 index a660da25..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/content_model/tables.options +++ /dev/null @@ -1 +0,0 @@ -:parse_block_html: true diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/content_model/tables.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/content_model/tables.text deleted file mode 100644 index c0cf2e7d..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/content_model/tables.text +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - -
    *Usage* -Output -
    Some *data* -# Some more -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html5_attributes.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html5_attributes.html deleted file mode 100644 index 743c8224..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html5_attributes.html +++ /dev/null @@ -1,15 +0,0 @@ -

    paragraph

    - -

    paragraph

    - -

    paragraph

    - -

    paragraph

    - -

    paragraph

    - -

    paragraph

    - -

    paragraph

    - -

    paragraph

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html5_attributes.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html5_attributes.text deleted file mode 100644 index 44a060d3..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html5_attributes.text +++ /dev/null @@ -1,15 +0,0 @@ -

    paragraph

    - -

    paragraph

    - -

    paragraph

    - -

    paragraph

    - -

    paragraph

    - -

    paragraph

    - -

    paragraph

    - -

    paragraph

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_after_block.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_after_block.html deleted file mode 100644 index f51c75bb..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_after_block.html +++ /dev/null @@ -1,7 +0,0 @@ -

    Para

    -
    division
    - -
    -

    Quote

    -
    -
    division
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_after_block.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_after_block.text deleted file mode 100644 index cdcbff6c..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_after_block.text +++ /dev/null @@ -1,5 +0,0 @@ -Para -
    division
    - -> Quote -
    division
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_and_codeblocks.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_and_codeblocks.html deleted file mode 100644 index 93d695aa..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_and_codeblocks.html +++ /dev/null @@ -1,15 +0,0 @@ -

    para

    - -
    codeblock
    -
    - -
    -

    test

    -
    - -
    <p>codeblock</p>
    -
    - -
    -

    test

    -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_and_codeblocks.options b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_and_codeblocks.options deleted file mode 100644 index a660da25..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_and_codeblocks.options +++ /dev/null @@ -1 +0,0 @@ -:parse_block_html: true diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_and_codeblocks.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_and_codeblocks.text deleted file mode 100644 index a3cfda74..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_and_codeblocks.text +++ /dev/null @@ -1,13 +0,0 @@ -para - - codeblock - -
    - test -
    - -

    codeblock

    - -
    - test -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_and_headers.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_and_headers.html deleted file mode 100644 index 65cb7e2b..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_and_headers.html +++ /dev/null @@ -1,5 +0,0 @@ -

    header

    - -
    -====== -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_and_headers.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_and_headers.text deleted file mode 100644 index 64dc477e..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_and_headers.text +++ /dev/null @@ -1,6 +0,0 @@ -header -====== - -
    -====== -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/code.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/code.html deleted file mode 100644 index f4b32210..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/code.html +++ /dev/null @@ -1,10 +0,0 @@ -

    This is a code span with <entities> that should be preserved. -This is a simple code span.

    - -

    Some <

    - -
    Some very important < thing
    -
    - -
    Some code<<
    -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/code.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/code.text deleted file mode 100644 index fda7db54..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/code.text +++ /dev/null @@ -1,9 +0,0 @@ -This is a code span with <entities> that should be preserved. -This is a simple code span. - -

    Some <

    - -
    Some very important < thing
    - -
    Some code<<
    -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/comment.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/comment.html deleted file mode 100644 index dacd4373..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/comment.html +++ /dev/null @@ -1,7 +0,0 @@ -
    - - -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/comment.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/comment.text deleted file mode 100644 index 1788630c..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/comment.text +++ /dev/null @@ -1,8 +0,0 @@ -
    - - - -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/emphasis.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/emphasis.html deleted file mode 100644 index e4389c06..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/emphasis.html +++ /dev/null @@ -1,6 +0,0 @@ -

    This is sizedhallo.

    - -

    This is strongitalic, yes!.

    - -

    This is not converted, as is - this.

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/emphasis.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/emphasis.text deleted file mode 100644 index 7c75930c..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/emphasis.text +++ /dev/null @@ -1,6 +0,0 @@ -This is sizedhallo. - -This is strongitalic, yes!. - -This is not converted, as is - this. diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/entity.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/entity.html deleted file mode 100644 index 5c80ce6b..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/entity.html +++ /dev/null @@ -1 +0,0 @@ -

    This is *raw* HTML text containing < entities!

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/entity.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/entity.text deleted file mode 100644 index 5c80ce6b..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/entity.text +++ /dev/null @@ -1 +0,0 @@ -

    This is *raw* HTML text containing < entities!

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/header.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/header.html deleted file mode 100644 index aebb2065..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/header.html +++ /dev/null @@ -1,6 +0,0 @@ -

    Some headerhere!

    -

    hallo

    -

    hallo

    -

    hallo

    -
    hallo
    -
    hallo
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/header.options b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/header.options deleted file mode 100644 index 987b4d99..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/header.options +++ /dev/null @@ -1,2 +0,0 @@ -:auto_ids: true -:html_to_native: true diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/header.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/header.text deleted file mode 100644 index 27eed3b0..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/header.text +++ /dev/null @@ -1,6 +0,0 @@ -

    Some headerhere!

    -

    hallo

    -

    hallo

    -

    hallo

    -
    hallo
    -
    hallo
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/list_dl.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/list_dl.html deleted file mode 100644 index 6eaccfe3..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/list_dl.html +++ /dev/null @@ -1,8 +0,0 @@ -
    -
    kram
    -
    down
    -
    kram
    -
    down
    -
    kram
    -
    down
    -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/list_dl.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/list_dl.text deleted file mode 100644 index 6eaccfe3..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/list_dl.text +++ /dev/null @@ -1,8 +0,0 @@ -
    -
    kram
    -
    down
    -
    kram
    -
    down
    -
    kram
    -
    down
    -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/list_ol.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/list_ol.html deleted file mode 100644 index eeebdfbe..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/list_ol.html +++ /dev/null @@ -1,15 +0,0 @@ -
      -
    1. This is a simple list item
    2. -
    3. -

      Followed by another

      -
    4. -
    5. -

      Followed by

      -

      a para list item

      -
    6. -
    7. and a normal one
    8. -
    9. -

      and

      -

      a para

      -
    10. -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/list_ol.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/list_ol.text deleted file mode 100644 index 41246dfb..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/list_ol.text +++ /dev/null @@ -1,17 +0,0 @@ -
      -
    1. This is a simple list item
    2. -
    3. -

      Followed by another

      -
    4. -
    5. -

      Followed by

      - -

      a para list item

      -
    6. -
    7. and a normal one
    8. -
    9. -

      and

      - -

      a para

      -
    10. -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/list_ul.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/list_ul.html deleted file mode 100644 index c9b38d08..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/list_ul.html +++ /dev/null @@ -1,19 +0,0 @@ -
      -
    • This is a simple list item
    • -
    • -

      Followed by another

      -
    • -
    • -

      Followed by

      -

      a para list item

      -
    • -
    • and a normal one
    • -
    • -

      and

      -

      a para

      -
    • -
    - -
      -
    • multi line list item
    • -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/list_ul.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/list_ul.text deleted file mode 100644 index 5a2d68e7..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/list_ul.text +++ /dev/null @@ -1,22 +0,0 @@ -
      -
    • This is a simple list item
    • -
    • -

      Followed by another

      -
    • -
    • -

      Followed by

      - -

      a para list item

      -
    • -
    • and a normal one
    • -
    • -

      and

      - -

      a para

      -
    • -
    - -
      -
    • multi line -list item
    • -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/options b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/options deleted file mode 100644 index 63936b99..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/options +++ /dev/null @@ -1 +0,0 @@ -:html_to_native: true diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/paragraph.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/paragraph.html deleted file mode 100644 index a276b1ca..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/paragraph.html +++ /dev/null @@ -1,3 +0,0 @@ -

    Some text here and end

    - -

    Some other text here

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/paragraph.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/paragraph.text deleted file mode 100644 index b10035cd..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/paragraph.text +++ /dev/null @@ -1,4 +0,0 @@ -

    Some text here and end -

    - -

    Some other text here

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/table_normal.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/table_normal.html deleted file mode 100644 index bdd79ee7..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/table_normal.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - -
    UsageOther
    Some *data* -

    Some more

    -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/table_normal.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/table_normal.text deleted file mode 100644 index bdd79ee7..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/table_normal.text +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - -
    UsageOther
    Some *data* -

    Some more

    -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/table_simple.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/table_simple.html deleted file mode 100644 index 88d9e6c3..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/table_simple.html +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - - - - - - -
    UsageOutput
    Some *data*Some more
    - - - - - - - - - - - - - - - - - - - - -
    UsageOutput
    Some *data*Some more
    footlocker
    - - - - - - - - - - - - -
    UsageOutput
    Some *data*Some more
    - - - - - - - - - - -
    Usage -Output -
    Some *data* -Some more -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/table_simple.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/table_simple.text deleted file mode 100644 index ae7852b1..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/table_simple.text +++ /dev/null @@ -1,71 +0,0 @@ - - - - - - - - - -
    Usage -Output -
    Some *data* -Some more -
    - - - - - - - - - - - - - - - - - - - - -
    Usage -Output -
    Some *data* -Some more -
    foot -locker -
    - - - - - - - - - - -
    Usage -Output -
    Some *data* -Some more -
    - - - - - - - - - - -
    Usage -Output -
    Some *data* -Some more -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/typography.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/typography.html deleted file mode 100644 index 24439650..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/typography.html +++ /dev/null @@ -1 +0,0 @@ -

    This is … something “to remember”!

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/typography.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/typography.text deleted file mode 100644 index ee33c5ce..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/html_to_native/typography.text +++ /dev/null @@ -1 +0,0 @@ -

    This is … something “to remember”!

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/invalid_html_1.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/invalid_html_1.html deleted file mode 100644 index 77e0d78a..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/invalid_html_1.html +++ /dev/null @@ -1,5 +0,0 @@ -

    para

    - -

    </div>

    - -

    para

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/invalid_html_1.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/invalid_html_1.text deleted file mode 100644 index f2fc834a..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/invalid_html_1.text +++ /dev/null @@ -1,5 +0,0 @@ -para - -
    - -para diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/invalid_html_2.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/invalid_html_2.html deleted file mode 100644 index b5da12fe..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/invalid_html_2.html +++ /dev/null @@ -1,5 +0,0 @@ -

    para

    - -
    - -

    para

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/invalid_html_2.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/invalid_html_2.text deleted file mode 100644 index 675c94f6..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/invalid_html_2.text +++ /dev/null @@ -1,5 +0,0 @@ -para - -
    - -para diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/markdown_attr.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/markdown_attr.html deleted file mode 100644 index 930b8f41..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/markdown_attr.html +++ /dev/null @@ -1,38 +0,0 @@ -
    -

    para

    -
    - -
    -para -
    - -
    -

    para

    -
    - -
    -*para* -
    - -

    -

    para

    -

    - -

    -para -

    - -

    -para -

    - -

    -*para* -

    - -
    -
    emphasize
    -
    -

    para

    -
    -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/markdown_attr.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/markdown_attr.text deleted file mode 100644 index 12e5aee6..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/markdown_attr.text +++ /dev/null @@ -1,38 +0,0 @@ -
    -*para* -
    - -
    -*para* -
    - -
    -*para* -
    - -
    -*para* -
    - -

    -*para* -

    - -

    -*para* -

    - -

    -*para* -

    - -

    -*para* -

    - -
    -
    *emphasize*
    -
    -para -
    -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/not_parsed.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/not_parsed.html deleted file mode 100644 index 90bda034..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/not_parsed.html +++ /dev/null @@ -1,24 +0,0 @@ -
    -This is some text -
    - -
    -This is some text -
    - -
    -</p> -
    - -
    -

    Foo

    -
    - -

    This is some -text

    - -

    http://example.com

    - -
    -<http://example.com> -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/not_parsed.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/not_parsed.text deleted file mode 100644 index 1d1c71ca..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/not_parsed.text +++ /dev/null @@ -1,24 +0,0 @@ -
    -This is some text -
    - -
    -This is some text -
    - -
    -

    -
    - -
    -

    Foo

    -
    - -

    This is some -text

    - - - -
    - -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/parse_as_raw.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/parse_as_raw.html deleted file mode 100644 index 860f9b2f..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/parse_as_raw.html +++ /dev/null @@ -1,35 +0,0 @@ -

    baz { |qux| quux }

    - -

    This is some para. -

    - - - - -

    parsed -This too -

    - - - - - - - - - -

    http://example.com

    - - - diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/parse_as_raw.htmlinput b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/parse_as_raw.htmlinput deleted file mode 100644 index 22b9ea5c..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/parse_as_raw.htmlinput +++ /dev/null @@ -1,34 +0,0 @@ -

    baz { |qux| quux }

    - -

    This is some para. -

    - - - - -

    parsed -This too -

    - - - - - - - - - -

    http://example.com

    - - diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/parse_as_raw.options b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/parse_as_raw.options deleted file mode 100644 index a660da25..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/parse_as_raw.options +++ /dev/null @@ -1 +0,0 @@ -:parse_block_html: true diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/parse_as_raw.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/parse_as_raw.text deleted file mode 100644 index e0617c41..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/parse_as_raw.text +++ /dev/null @@ -1,33 +0,0 @@ -

    baz { |qux| quux }

    - -This is some para. - - - - -

    *parsed* -This too -

    - - - - - - - - - - - - diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/parse_as_span.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/parse_as_span.html deleted file mode 100644 index 2a6191fb..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/parse_as_span.html +++ /dev/null @@ -1,12 +0,0 @@ -

    This text -should be parsed -as span -

    - -

    This produces `

    -

    ` an unwanted result.</p>

    - -

    This text too

    -

    -some text -

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/parse_as_span.htmlinput b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/parse_as_span.htmlinput deleted file mode 100644 index 4199b8b2..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/parse_as_span.htmlinput +++ /dev/null @@ -1,12 +0,0 @@ -

    This text -should be parsed -as span -

    - -

    This produces `

    -

    ` an unwanted result.</p>

    - -

    This text too

    -

    -some text -

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/parse_as_span.options b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/parse_as_span.options deleted file mode 100644 index a660da25..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/parse_as_span.options +++ /dev/null @@ -1 +0,0 @@ -:parse_block_html: true diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/parse_as_span.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/parse_as_span.text deleted file mode 100644 index d07cf6d8..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/parse_as_span.text +++ /dev/null @@ -1,9 +0,0 @@ -

    This *text -should* be parsed -as span -

    - -

    This produces `

    ` an unwanted result.

    - -

    This *text* too

    -some text diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/parse_block_html.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/parse_block_html.html deleted file mode 100644 index 8de78c04..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/parse_block_html.html +++ /dev/null @@ -1,21 +0,0 @@ -

    -

    test

    -
    - -
    -
    test
    -
    -
    -
    test
    -
    -
    -
    - -
    -
    code block with </div>
    -
    -
    - -
    -

    No matching end tag

    -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/parse_block_html.options b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/parse_block_html.options deleted file mode 100644 index a660da25..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/parse_block_html.options +++ /dev/null @@ -1 +0,0 @@ -:parse_block_html: true diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/parse_block_html.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/parse_block_html.text deleted file mode 100644 index b8b18453..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/parse_block_html.text +++ /dev/null @@ -1,17 +0,0 @@ -
    - test -
    - -
    - test -
    - test -
    -
    - -
    - code block with
    -
    - -
    -No matching end tag diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/processing_instruction.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/processing_instruction.html deleted file mode 100644 index 939b996b..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/processing_instruction.html +++ /dev/null @@ -1,12 +0,0 @@ -

    <?xml version=”1.0”?>

    - -

    para

    - -

    <? test ?> para

    - -

    other

    - -

    <? -multiline text -is allowed -?>

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/processing_instruction.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/processing_instruction.text deleted file mode 100644 index fcb866ff..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/processing_instruction.text +++ /dev/null @@ -1,12 +0,0 @@ - - -para - - para - -other - - diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/simple.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/simple.html deleted file mode 100644 index 0d926c5d..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/simple.html +++ /dev/null @@ -1,60 +0,0 @@ -
    -

    test

    -
    - -

    -para2 -

    - -
    -

    tes

    - -

    test -weiter -

    -
    - -

    para4

    - -
    -
    -
    -

    foo

    -
    -
    -
    -
    -

    bar 

    -
    -
    - -

    para5

    - -
    -

    id

    -
    -

    test

    - -
    -

    hallo

    -
    -
    -

    hallo

    -
    - -

    para6

    - -
    -
    -

    Another para.

    -
    - -

    Test

    - -

    Test

    - -

    Test - -

    - - diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/simple.options b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/simple.options deleted file mode 100644 index a660da25..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/simple.options +++ /dev/null @@ -1 +0,0 @@ -:parse_block_html: true diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/simple.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/simple.text deleted file mode 100644 index a2ffe25e..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/simple.text +++ /dev/null @@ -1,55 +0,0 @@ -
    -test -
    - -

    -para2 -

    - -
    -

    tes

    - -

    test -weiter -

    -
    - -para4 - -
    -
    -
    -foo -
    -
    -
    -
    bar  -
    -
    - -para5 - -
    id -
    test - -
    -hallo -
    -hallo -
    - -para6 - -
    -Another para. -
    - -Test - -

    Test

    - -

    Test - -

    - - diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/standalone_image_in_div.htmlinput b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/standalone_image_in_div.htmlinput deleted file mode 100644 index 72ff4539..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/standalone_image_in_div.htmlinput +++ /dev/null @@ -1,7 +0,0 @@ -
    - inside -
    - -
    - text -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/standalone_image_in_div.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/standalone_image_in_div.text deleted file mode 100644 index 7f0d12cf..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/standalone_image_in_div.text +++ /dev/null @@ -1,8 +0,0 @@ -
    -![inside](src.png) -
    - -
    -[text](website.html) -
    - diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/table.kramdown b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/table.kramdown deleted file mode 100644 index f8d6802e..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/table.kramdown +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - -
    test
    - diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/table.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/table.text deleted file mode 100644 index 32e01da5..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/table.text +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - -
    test
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/textarea.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/textarea.html deleted file mode 100644 index 6f5693ed..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/textarea.html +++ /dev/null @@ -1,8 +0,0 @@ -

    This is a

    - - diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/textarea.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/textarea.text deleted file mode 100644 index a240f5c4..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/textarea.text +++ /dev/null @@ -1,8 +0,0 @@ -This is a - - diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/xml.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/xml.html deleted file mode 100644 index d941bc09..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/xml.html +++ /dev/null @@ -1,8 +0,0 @@ - - -doit - -doit - -doit</some> - diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/xml.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/xml.text deleted file mode 100644 index 6427fae3..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/09_html/xml.text +++ /dev/null @@ -1,7 +0,0 @@ - - -doit - -doit - -doit diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/10_ald/simple.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/10_ald/simple.html deleted file mode 100644 index 74b03d58..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/10_ald/simple.html +++ /dev/null @@ -1,2 +0,0 @@ -

    Some paragraph

    - diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/10_ald/simple.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/10_ald/simple.text deleted file mode 100644 index f58768a3..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/10_ald/simple.text +++ /dev/null @@ -1,8 +0,0 @@ -Some paragraph - -{:id: ref1} -{:id: .class1} - {:id: #id} - {:id: key="value"} - {:id: .class2 .class3 ref2 #id-with key="value" key='value' key='dfsd\}' } -{:test: k ey=value} diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/11_ial/auto_id_and_ial.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/11_ial/auto_id_and_ial.html deleted file mode 100644 index 9857a038..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/11_ial/auto_id_and_ial.html +++ /dev/null @@ -1 +0,0 @@ -

    A header

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/11_ial/auto_id_and_ial.options b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/11_ial/auto_id_and_ial.options deleted file mode 100644 index 8776b552..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/11_ial/auto_id_and_ial.options +++ /dev/null @@ -1 +0,0 @@ -:auto_ids: true diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/11_ial/auto_id_and_ial.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/11_ial/auto_id_and_ial.text deleted file mode 100644 index f521fb0f..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/11_ial/auto_id_and_ial.text +++ /dev/null @@ -1,2 +0,0 @@ -## A header -{:#myid .cls} diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/11_ial/nested.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/11_ial/nested.html deleted file mode 100644 index 84cc368d..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/11_ial/nested.html +++ /dev/null @@ -1,11 +0,0 @@ -
    -test -
    - -
    -

    test

    -
    - -
    -

    para

    -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/11_ial/nested.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/11_ial/nested.text deleted file mode 100644 index 827645cc..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/11_ial/nested.text +++ /dev/null @@ -1,15 +0,0 @@ -{:.cls} -
    -test -
    -{:#id} - -{:.cls} -
    -test -
    -{:#id} - -{:.cls} -> para -{:#id} diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/11_ial/simple.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/11_ial/simple.html deleted file mode 100644 index 1086f0cf..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/11_ial/simple.html +++ /dev/null @@ -1,29 +0,0 @@ -

    Some paragraph.

    - -

    Some paragraph.

    - -
    -

    quote

    -
    - -
      -
    • list
    • -
    - -
    code block
    -
    - -
    other code block
    -
    - -

    A header

    - -

    Some paragraph here

    - -

    Some paragraph here

    - -

    Paragraph

    -

    Paragraph

    - -

    Another header

    - diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/11_ial/simple.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/11_ial/simple.text deleted file mode 100644 index b97eef3f..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/11_ial/simple.text +++ /dev/null @@ -1,41 +0,0 @@ -Some paragraph. -{:.class .-class id key="val"} - -Some paragraph. -{:.cls1#id.cls2} - -> quote -{: #id} - {: .class} - -* list -{: key="val"} - - code block -{: #other} - - other code block - -## A header -{:#myid} - -{:.cls} -Some paragraph here - -{:.cls1} -{:.cls2} -Some paragraph here - -Paragraph -{:.cls} -Paragraph - -Another header -============== -{: .class #other} - -{:id: #id key="valo"} -{:id: #other .myclass other} -{:other: key1="val\"" - ig.nored as_is#this key2='val\'' .other-class} - -{:.invalid} diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/12_extension/comment.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/12_extension/comment.html deleted file mode 100644 index 20b4c662..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/12_extension/comment.html +++ /dev/null @@ -1,8 +0,0 @@ -

    This is a simple paragraph.

    - - - -

    And another paragraph

    - -

    {::comment} -Another paragraph

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/12_extension/comment.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/12_extension/comment.text deleted file mode 100644 index 2dfc9197..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/12_extension/comment.text +++ /dev/null @@ -1,12 +0,0 @@ -This is a simple paragraph. - -{::comment} -This is a comment {:/}which is {:/comment} ignored. -{:/comment} - -And another paragraph - -{::comment this='is' .ignore /} - -{::comment} -Another paragraph diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/12_extension/ignored.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/12_extension/ignored.html deleted file mode 100644 index 17aae5cd..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/12_extension/ignored.html +++ /dev/null @@ -1,8 +0,0 @@ -

    paragraph

    - -

    {::something} -anotherthing -{:/something}

    - -

    {::something/} -paragraph

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/12_extension/ignored.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/12_extension/ignored.text deleted file mode 100644 index ae94a8fe..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/12_extension/ignored.text +++ /dev/null @@ -1,8 +0,0 @@ -paragraph - -{::something} -anotherthing -{:/something} - -{::something/} -paragraph diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/12_extension/nomarkdown.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/12_extension/nomarkdown.html deleted file mode 100644 index 7fe58d50..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/12_extension/nomarkdown.html +++ /dev/null @@ -1,10 +0,0 @@ -

    This is a simple paragraph.

    - -This *is* not processed - -

    And another paragraph

    - -bold - -

    {::nomarkdown} -Another paragraph

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/12_extension/nomarkdown.kramdown b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/12_extension/nomarkdown.kramdown deleted file mode 100644 index 2cee5122..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/12_extension/nomarkdown.kramdown +++ /dev/null @@ -1,20 +0,0 @@ -This is a simple paragraph. - -{::nomarkdown} -This *is* not processed -{:/} - -And another paragraph - -{::nomarkdown type="html"} -bold -{:/} - -{::nomarkdown type="latex"} -\begin{itemize} -\item[Yes] YESSSS! -\end{itemize} -{:/} - -\{::nomarkdown} Another paragraph - diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/12_extension/nomarkdown.latex b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/12_extension/nomarkdown.latex deleted file mode 100644 index 5af0263c..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/12_extension/nomarkdown.latex +++ /dev/null @@ -1,13 +0,0 @@ -This is a simple paragraph. - -This *is* not processed - -And another paragraph - -\begin{itemize} -\item[Yes] YESSSS! -\end{itemize} - -\{::nomarkdown\} -Another paragraph - diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/12_extension/nomarkdown.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/12_extension/nomarkdown.text deleted file mode 100644 index 43d441df..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/12_extension/nomarkdown.text +++ /dev/null @@ -1,21 +0,0 @@ -This is a simple paragraph. - -{::nomarkdown} -This *is* not processed - {:/nomarkdown} - -And another paragraph - -{::nomarkdown this='is' .ignore /} - -{::nomarkdown type='html'} -bold -{:/} -{::nomarkdown type="latex"} -\begin{itemize} -\item[Yes] YESSSS! -\end{itemize} -{:/} - -{::nomarkdown} -Another paragraph diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/12_extension/options.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/12_extension/options.html deleted file mode 100644 index 364a77a5..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/12_extension/options.html +++ /dev/null @@ -1,21 +0,0 @@ -

    No header id

    - -

    without header id

    - -
    -some *para* -
    - -
    -

    some para

    -
    - -

    Some text10.

    - -
    -
      -
    1. -

      Some text. 

      -
    2. -
    -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/12_extension/options.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/12_extension/options.text deleted file mode 100644 index b63f34b5..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/12_extension/options.text +++ /dev/null @@ -1,23 +0,0 @@ -# No header id - -{::options unusedvar="val" /} - -# without header id - -
    -some *para* -
    - -{::options parse_block_html="true" parse_span_html="true" /} - -
    -some *para* -
    - -{::options footnote_nr="10" /} - -Some text[^ab]. - -[^ab]: Some text. - -{::options template="/etc/passwd" /} diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/12_extension/options2.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/12_extension/options2.html deleted file mode 100644 index afe4e13e..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/12_extension/options2.html +++ /dev/null @@ -1,10 +0,0 @@ - -

    Some text1.

    - -
    -
      -
    1. -

      Some text. 

      -
    2. -
    -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/12_extension/options2.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/12_extension/options2.text deleted file mode 100644 index 78abfbee..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/12_extension/options2.text +++ /dev/null @@ -1,5 +0,0 @@ -{::options footnote_nr="da10" /} - -Some text[^ab]. - -[^ab]: Some text. diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/12_extension/options3.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/12_extension/options3.html deleted file mode 100644 index d5a5ad6b..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/12_extension/options3.html +++ /dev/null @@ -1,8 +0,0 @@ -
    x = Class.new
    -
    -
    - -
    x = Class.new
    -
    -
    - diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/12_extension/options3.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/12_extension/options3.text deleted file mode 100644 index f37839b2..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/12_extension/options3.text +++ /dev/null @@ -1,7 +0,0 @@ - x = Class.new -{: .language-ruby} - -{::options syntax_highlighter_opts="{default_lang: ruby\}" /} - - x = Class.new - diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/auto_ids.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/auto_ids.html deleted file mode 100644 index 398628ab..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/auto_ids.html +++ /dev/null @@ -1,15 +0,0 @@ -
    -
    item
    -
    def
    -
    item2
    -
    def
    -
    - -
    -
    item
    -
    def
    -
    item2
    -
    def
    -
    item3
    -
    def
    -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/auto_ids.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/auto_ids.text deleted file mode 100644 index f1797a74..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/auto_ids.text +++ /dev/null @@ -1,18 +0,0 @@ -{:auto_ids} -item -: def - -item2 -: def - -^ - -{:auto_ids-prefix-} -item -: def - -item2 -: def - -{:#id} item3 -: def diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/definition_at_beginning.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/definition_at_beginning.html deleted file mode 100644 index 7c5cc048..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/definition_at_beginning.html +++ /dev/null @@ -1 +0,0 @@ -

    : no definition

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/definition_at_beginning.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/definition_at_beginning.text deleted file mode 100644 index cd3671b9..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/definition_at_beginning.text +++ /dev/null @@ -1 +0,0 @@ -: no definition diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/deflist_ial.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/deflist_ial.html deleted file mode 100644 index 3090b1ef..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/deflist_ial.html +++ /dev/null @@ -1,4 +0,0 @@ -
    -
    item
    -
    definition
    -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/deflist_ial.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/deflist_ial.text deleted file mode 100644 index 587c3b07..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/deflist_ial.text +++ /dev/null @@ -1,4 +0,0 @@ -{:.dl-horizontal} -item -: definition -{:.dl-other} diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/item_ial.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/item_ial.html deleted file mode 100644 index 0ed1197f..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/item_ial.html +++ /dev/null @@ -1,17 +0,0 @@ -
    -
    item
    -
    definition -continued
    -
    another {:.cls}
    -
    -
    code
    -
    -
    -
    IAL at last - no code bc of text
    -
    term
    -
    definition
    -
    term1
    -
    term2
    -
    definition
    -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/item_ial.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/item_ial.text deleted file mode 100644 index 2058d749..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/item_ial.text +++ /dev/null @@ -1,16 +0,0 @@ -item -: {:.cls} definition - continued -: another {:.cls} -: {:.class} - code -: {:.cls} IAL at last - no code bc of text - - -{:.class} term -: definition - -{:.class1} term1 -{:.class2} term2 -: definition diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/multiple_terms.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/multiple_terms.html deleted file mode 100644 index e2e089b3..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/multiple_terms.html +++ /dev/null @@ -1,13 +0,0 @@ -
    -
    kram
    -
    down
    -
    now
    -
    definition 1
    -
    definition 2
    -
    -

    definition 3

    -
    -
    -

    definition 4

    -
    -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/multiple_terms.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/multiple_terms.text deleted file mode 100644 index b834258b..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/multiple_terms.text +++ /dev/null @@ -1,10 +0,0 @@ -kram -*down* -now -: definition 1 -: definition 2 - -: definition 3 - - -: definition 4 diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/no_def_list.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/no_def_list.html deleted file mode 100644 index c16f9623..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/no_def_list.html +++ /dev/null @@ -1,2 +0,0 @@ -

    This is a para -: and not a definition list

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/no_def_list.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/no_def_list.text deleted file mode 100644 index 98b52b37..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/no_def_list.text +++ /dev/null @@ -1,2 +0,0 @@ -This is a para -\: and not a definition list diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/para_wrapping.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/para_wrapping.html deleted file mode 100644 index 5f28fdf8..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/para_wrapping.html +++ /dev/null @@ -1,10 +0,0 @@ -
    -
    term
    -
    -

    definition

    -
    -
    definition
    -
    -

    definition

    -
    -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/para_wrapping.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/para_wrapping.text deleted file mode 100644 index 280fa474..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/para_wrapping.text +++ /dev/null @@ -1,6 +0,0 @@ -term - -: definition -: definition - -: definition diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/separated_by_eob.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/separated_by_eob.html deleted file mode 100644 index 0a1c4dc2..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/separated_by_eob.html +++ /dev/null @@ -1,8 +0,0 @@ -
    -
    kram
    -
    down
    -
    -
    -
    kram
    -
    down
    -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/separated_by_eob.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/separated_by_eob.text deleted file mode 100644 index 56fedf16..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/separated_by_eob.text +++ /dev/null @@ -1,5 +0,0 @@ -kram -: down -^ -kram -: down diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/simple.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/simple.html deleted file mode 100644 index 791f1451..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/simple.html +++ /dev/null @@ -1,10 +0,0 @@ -
    -
    kram
    -
    down
    -
    novalue
    -
    -
    kram
    -
    down -kram
    -
    down
    -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/simple.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/simple.text deleted file mode 100644 index e3bf730e..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/simple.text +++ /dev/null @@ -1,10 +0,0 @@ -kram -: down - -novalue -: - -kram -: down -kram -: down diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/styled_terms.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/styled_terms.html deleted file mode 100644 index cf7d7859..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/styled_terms.html +++ /dev/null @@ -1,4 +0,0 @@ -
    -
    kram
    -
    down
    -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/styled_terms.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/styled_terms.text deleted file mode 100644 index 76eb3553..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/styled_terms.text +++ /dev/null @@ -1,2 +0,0 @@ -*kram* -: down diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/too_much_space.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/too_much_space.html deleted file mode 100644 index b4df8780..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/too_much_space.html +++ /dev/null @@ -1,3 +0,0 @@ -

    para

    - -

    : no definition

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/too_much_space.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/too_much_space.text deleted file mode 100644 index 30ab445c..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/too_much_space.text +++ /dev/null @@ -1,4 +0,0 @@ -para - - -: no definition diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/with_blocks.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/with_blocks.html deleted file mode 100644 index 45b58656..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/with_blocks.html +++ /dev/null @@ -1,38 +0,0 @@ -
    -
    kram
    -
    this is some -text
    -
    -

    this is some -more text

    -
    -
    kram
    -
    -
    -

    blockquote

    -
    -
    -
    kram
    -
    -
    code
    -
    -
    -
    kram
    -
    -
    -
    kram
    -
    down
    -
    -
    -
    kram
    -
    -

    header

    -
    -
    kram
    -
    -
      -
    • list
    • -
    • items
    • -
    -
    -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/with_blocks.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/with_blocks.text deleted file mode 100644 index 15195ce3..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/13_definition_list/with_blocks.text +++ /dev/null @@ -1,24 +0,0 @@ -kram -: this is some - text - - : this is some - more text - -kram -: > blockquote - -kram -: - code - -kram -: kram - : down - -kram -: # header - -kram -: * list - * items diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/empty_tag_in_cell.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/empty_tag_in_cell.html deleted file mode 100644 index af9b3e5f..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/empty_tag_in_cell.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - -
    first line of cell
    second line of cell
    another cell
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/empty_tag_in_cell.options b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/empty_tag_in_cell.options deleted file mode 100644 index 63936b99..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/empty_tag_in_cell.options +++ /dev/null @@ -1 +0,0 @@ -:html_to_native: true diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/empty_tag_in_cell.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/empty_tag_in_cell.text deleted file mode 100644 index 60fec0b4..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/empty_tag_in_cell.text +++ /dev/null @@ -1 +0,0 @@ -| first line of cell
    second line of cell | another cell | diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/errors.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/errors.html deleted file mode 100644 index 302e97ae..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/errors.html +++ /dev/null @@ -1,12 +0,0 @@ -

    No table body

    - -

    |-|-|-

    - -

    |no|table|here|

    - -

    |no|table|here| -paragraph

    - -

    |-|-| -|-|-|

    - diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/errors.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/errors.text deleted file mode 100644 index 3565d5b8..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/errors.text +++ /dev/null @@ -1,13 +0,0 @@ -No table body - -|-|-|- - -[5]: test -|no|table|here| - -|no|table|here| -paragraph - -|-|-| -|-|-| - diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/escaping.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/escaping.html deleted file mode 100644 index b4528a17..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/escaping.html +++ /dev/null @@ -1,52 +0,0 @@ -

    cell 1 | cell 2

    - -

    cell 1 | cell 2

    - - - - - - - - -
    cell 1cell 2 | continued
    - - - - - - - - -
    cell 1cell 2
    - - - - - - - - -
    cell 1code | span
    - -

    cell 1 code | span

    - -

    cell 1 | code | span

    - - - - - - - - - - - - - - -
    cell 1cell `2cell 3
    cell 1`cell 2cell 3
    - -

    cell 1 | cell 2 | cell 3 -cell 1 | cell 2 | cell 3

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/escaping.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/escaping.text deleted file mode 100644 index a8a24d6a..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/escaping.text +++ /dev/null @@ -1,19 +0,0 @@ -`cell 1 | cell 2` - -cell 1 \| cell 2 - -cell 1 | cell 2 \| continued - -cell 1 | cell `2` - -cell 1 | `code | span` - -cell 1 `code | span` - -cell 1 \| `code | span` - -cell 1 | cell `2 | cell 3 -cell 1` | cell 2 | cell 3 - -cell 1 \| cell `2 | cell 3 -cell 1` | cell 2 | cell 3 diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/footer.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/footer.html deleted file mode 100644 index e6596ed5..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/footer.html +++ /dev/null @@ -1,65 +0,0 @@ -

    Simple footer

    - - - - - - - - - - - - - - -
    cell1cell2
    cell3cell4
    - -

    Full footer

    - - - - - - - - - - - - - - -
    cell1cell2
    cell3cell4
    - -

    Footer with separator lines

    - - - - - - - - - - - - - - - - - - -
    cell1cell2
    cell3cell4
    cell5cell6
    - -

    Empty footer

    - - - - - - - - -
    cell1cell2
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/footer.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/footer.text deleted file mode 100644 index faaed8d9..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/footer.text +++ /dev/null @@ -1,25 +0,0 @@ -Simple footer - -| cell1 | cell2 -|= -| cell3 | cell4 - -Full footer - -| cell1 | cell2 -|=======|=======| -| cell3 | cell4 - -Footer with separator lines - -| cell1 | cell2 -|=======|=======| -| cell3 | cell4 -|--- -| cell5 | cell6 -|--- - -Empty footer - -| cell1 | cell2 -|= diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/header.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/header.html deleted file mode 100644 index 647f2c48..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/header.html +++ /dev/null @@ -1,117 +0,0 @@ -

    Simple header

    - - - - - - - - - - - - - - -
    cell1cell2
    cell3cell4
    - -

    Full header

    - - - - - - - - - - - - - - -
    cell1cell2
    cell3cell4
    - -

    With alignment and superfluous alignment defs

    - - - - - - - - - - - - - - - - - - - - -
    defaultleftcenterrightdefault
    cell1cell2cell3cell4cell5
    - -

    With leading sep line

    - - - - - - - - - - - - - - -
    cell1cell2
    cell3cell4
    - -

    Multiple bodies

    - - - - - - - - - - - - - - - - - - - - -
    cell1cell2
    cell3cell4
    cell5cell6
    - -

    Sep line with tab

    - - - - - - - - - - - - - - - - - - -
    rightcenter
    cell1cell2
    cell3cell4
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/header.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/header.text deleted file mode 100644 index 6961bfb9..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/header.text +++ /dev/null @@ -1,39 +0,0 @@ -Simple header - -| cell1 | cell2 -|----- -| cell3 | cell4 - -Full header - -| cell1 | cell2 -|-------|-------| -| cell3 | cell4 - -With alignment and superfluous alignment defs - -| default | left | center | right | default -|-| :- |:-: | -: | - | :-: | :- -| cell1 | cell2 | cell3 | cell4 | cell5 - -With leading sep line - -|:-:|-:| -| cell1 | cell2 -|-------|-------| -| cell3 | cell4 - -Multiple bodies - -| cell1 | cell2 -+ :-: | -| cell3 | cell4 -|----||| -| cell5 | cell6 - -Sep line with tab - -right | center ----: | :---: -cell1 | cell2 -cell3 | cell4 diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/no_table.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/no_table.html deleted file mode 100644 index dce46b1d..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/no_table.html +++ /dev/null @@ -1,3 +0,0 @@ -

    No table

    - -

    | Some | thing | here

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/no_table.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/no_table.text deleted file mode 100644 index 90f90b3d..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/no_table.text +++ /dev/null @@ -1,3 +0,0 @@ -No table - -\| Some \| thing \| here diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/simple.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/simple.html deleted file mode 100644 index 506b4421..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/simple.html +++ /dev/null @@ -1,192 +0,0 @@ - - - - - - - - - - - - - - - - - - - -
    cell1cell2
    cell3cell4
    cell5cell6 |
    cell7cell8
    - -

    Missing cells at end

    - - - - - - - - - - - - - - - - - - - -
    cell1cell2cell3
    cell1  
     cell2cell3
    - -

    Escaped pipe characters

    - - - - - - - - - - - - - - - - -
    cell1 | cell1cell2
    cell1cell2 |
    cell1 | concell2
    - -

    Table with code elements

    - - - - - - - - - - - - - - - - -
    This is a span | with a pipe.   
    Some span</em> herea span | with apipe.
    - -

    Special cases regarding codespan syntax

    - - - - - - - - -
    ab
    - - - - - - - -
    a
    - - - - - - - - - -
    tablewithial
    - - - - - - - - - -
    tablewithial
    - -

    not starting with a bar

    - - - - - - - - -
    simpletable
    - - - - - - - - - - - - - - -
    head1head2
    cell1cell2
    - - - - - - - - - - - - - - -
    head1head2
     cell2
    - - - - - - - - - - - - - - - - -
    ab
    cd
    ef
    - - - - - - - - - - - - - - -
    KeyValue type
    Type"GROUP"|"UNKNOWN"
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/simple.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/simple.text deleted file mode 100644 index 0f225a4e..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/simple.text +++ /dev/null @@ -1,53 +0,0 @@ -| cell1 | cell2 | -|cell3 | cell4| -|cell5|cell6 \| -| cell7|cell8 - -Missing cells at end - -| cell1 | cell2 | cell3 | -| cell1 || -|| cell2 | cell3 - -Escaped pipe characters - -| cell1 \| cell1 | cell2 | -| cell1 | cell2 \| -| cell1 `|` con | cell2 - -Table with code elements - -| This is a span | with a pipe. -| Some span | here | a span | with a | pipe. - -Special cases regarding codespan syntax - -|a|`b` - -|`a` - -{:.cls} -| table | with | ial - -| table | with | ial -{:.cls} - -not starting with a bar - -simple | table - -head1 | head2 -------|------ -cell1 | cell2 - - head1 | head2 --------|------ - | cell2 - -| a | b | - c | d -| e | f | - -| Key | Value type | -|--------|------------------------| -| `Type` | `"GROUP"`\|`"UNKNOWN"` | diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/table_with_footnote.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/table_with_footnote.html deleted file mode 100644 index 7da4f9b3..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/table_with_footnote.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - -
    this is 1a table
    with afootnote
    - -
    -
      -
    1. -

      Something

      - -
      -

      special here

      -
      -

      -
    2. -
    -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/table_with_footnote.latex b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/table_with_footnote.latex deleted file mode 100644 index 99b5312f..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/table_with_footnote.latex +++ /dev/null @@ -1,11 +0,0 @@ -\begin{longtable}{|l|l|} -\hline -this is \footnote{Something - -\begin{quote} -special here -\end{quote}} & a table\\ -with a & footnote\\ -\hline -\end{longtable} - diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/table_with_footnote.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/table_with_footnote.text deleted file mode 100644 index 345fc5d3..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/14_table/table_with_footnote.text +++ /dev/null @@ -1,6 +0,0 @@ -| this is [^1] | a table -| with a | footnote - -[^1]: Something - - > special here diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/15_math/gh_128.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/15_math/gh_128.html deleted file mode 100644 index 9b2c1279..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/15_math/gh_128.html +++ /dev/null @@ -1 +0,0 @@ -\[<script>alert('a')</script> <script>alert('b<')</script>\] diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/15_math/gh_128.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/15_math/gh_128.text deleted file mode 100644 index 95252a76..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/15_math/gh_128.text +++ /dev/null @@ -1 +0,0 @@ -$$ $$ diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/15_math/no_engine.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/15_math/no_engine.html deleted file mode 100644 index 5d6b343e..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/15_math/no_engine.html +++ /dev/null @@ -1,3 +0,0 @@ -
    $$ -5+5 -$$
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/15_math/no_engine.options b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/15_math/no_engine.options deleted file mode 100644 index 06d559e5..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/15_math/no_engine.options +++ /dev/null @@ -1 +0,0 @@ -:math_engine: ~ diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/15_math/no_engine.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/15_math/no_engine.text deleted file mode 100644 index fdee5cfb..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/15_math/no_engine.text +++ /dev/null @@ -1,2 +0,0 @@ -{: #math-id} -$$5+5$$ diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/15_math/normal.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/15_math/normal.html deleted file mode 100644 index f80d56b6..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/15_math/normal.html +++ /dev/null @@ -1,30 +0,0 @@ -

    This is a para. -\(\text{LaTeX} \lambda_5\)

    - -\[\lambda_5 = \alpha + 4\] - -

    \(\lambda_\alpha > 5\) -This is a para.

    - -\[\begin{align*} -&=5 \\ -&=6 \\ -\end{align*}\] - -\[5+5\] - -\[5+5\] - -\[5+5\] - -\[5+5\] - -
    $$5+5$$
    -
    - -
    \[5+5\] -
    -
    \[5+5\] -
    - -\[|x| = 5\] diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/15_math/normal.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/15_math/normal.text deleted file mode 100644 index aa5984a2..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/15_math/normal.text +++ /dev/null @@ -1,30 +0,0 @@ -This is a para. -$$ \text{LaTeX} \lambda_5 $$ - -$$\lambda_5 = \alpha + 4$$ - -$$\lambda_\alpha > 5$$ -This is a para. - -$$\begin{align*} -&=5 \\ -&=6 \\ -\end{align*}$$ - -$$5+5$$ - - $$5+5$$ - - $$5+5$$ - - $$5+5$$ - - $$5+5$$ - -{:.cls} -$$5+5$$ -^ -$$5+5$$ -{:.cls} - -$$|x| = 5$$ diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/16_toc/no_toc.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/16_toc/no_toc.html deleted file mode 100644 index bbb831e9..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/16_toc/no_toc.html +++ /dev/null @@ -1,14 +0,0 @@ - -

    Header level 1

    - -

    Header level 2

    - -

    Header level 3

    - -

    Header level 4

    - -

    Other header level 1

    - -

    Other header level 2

    - -

    Other header level 3

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/16_toc/no_toc.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/16_toc/no_toc.text deleted file mode 100644 index 11ad8291..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/16_toc/no_toc.text +++ /dev/null @@ -1,16 +0,0 @@ -* Here comes the table of content -{:toc} - -# Header level 1 - -## Header level 2 - -### Header level 3 - -#### Header level 4 - -# Other header level 1 - -## Other header level 2 - -### Other header level 3 diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/16_toc/toc_exclude.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/16_toc/toc_exclude.html deleted file mode 100644 index d3526846..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/16_toc/toc_exclude.html +++ /dev/null @@ -1,35 +0,0 @@ -

    Contents

    - - - -

    Header level 1

    - -

    Header level 2

    - -

    Header level 3

    - -

    Header level 4

    - -

    Other header level 1

    - -

    Other header level 2

    - -

    Other header level 3

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/16_toc/toc_exclude.options b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/16_toc/toc_exclude.options deleted file mode 100644 index 8776b552..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/16_toc/toc_exclude.options +++ /dev/null @@ -1 +0,0 @@ -:auto_ids: true diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/16_toc/toc_exclude.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/16_toc/toc_exclude.text deleted file mode 100644 index d8f0b863..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/16_toc/toc_exclude.text +++ /dev/null @@ -1,19 +0,0 @@ -# Contents -{:.no_toc} - -* Here comes the table of content -{:toc} - -# Header level 1 - -## Header level 2 - -### Header level 3 - -#### Header level 4 - -# Other header level 1 - -## Other header level 2 - -### Other header level 3 diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/16_toc/toc_levels.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/16_toc/toc_levels.html deleted file mode 100644 index e50a07c4..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/16_toc/toc_levels.html +++ /dev/null @@ -1,24 +0,0 @@ - - -

    Header level 1

    - -

    Header \` level 2

    - -

    Header level 3

    - -

    Header level 4

    - -

    Other header level 1

    - -

    Other header level 2

    - -

    Other header level 3

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/16_toc/toc_levels.options b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/16_toc/toc_levels.options deleted file mode 100644 index bdfbeba1..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/16_toc/toc_levels.options +++ /dev/null @@ -1,2 +0,0 @@ -:toc_levels: 2..3 -:auto_ids: true diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/16_toc/toc_levels.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/16_toc/toc_levels.text deleted file mode 100644 index 1a62dea2..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/16_toc/toc_levels.text +++ /dev/null @@ -1,16 +0,0 @@ -* Here comes the table of content -{:toc} - -# Header level 1 - -## Header \\\` level 2 - -### Header level 3 - -#### Header level 4 - -# Other header level 1 - -## Other header level 2 - -### Other header level 3 diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/16_toc/toc_with_footnotes.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/16_toc/toc_with_footnotes.html deleted file mode 100644 index 0a3e199a..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/16_toc/toc_with_footnotes.html +++ /dev/null @@ -1,13 +0,0 @@ - - -

    Header1 level 1

    - -
    -
      -
    1. -

      Some footnote content here 

      -
    2. -
    -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/16_toc/toc_with_footnotes.options b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/16_toc/toc_with_footnotes.options deleted file mode 100644 index 8776b552..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/16_toc/toc_with_footnotes.options +++ /dev/null @@ -1 +0,0 @@ -:auto_ids: true diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/16_toc/toc_with_footnotes.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/16_toc/toc_with_footnotes.text deleted file mode 100644 index 5879ed57..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/16_toc/toc_with_footnotes.text +++ /dev/null @@ -1,6 +0,0 @@ -* Here comes the table of content -{:toc} - -# Header[^1] level 1 - -[^1]: Some footnote content here diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/16_toc/toc_with_links.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/16_toc/toc_with_links.html deleted file mode 100644 index ebde543b..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/16_toc/toc_with_links.html +++ /dev/null @@ -1,8 +0,0 @@ -

    Header

    - -

    Header

    - - diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/16_toc/toc_with_links.options b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/16_toc/toc_with_links.options deleted file mode 100644 index 36c20f5a..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/16_toc/toc_with_links.options +++ /dev/null @@ -1,2 +0,0 @@ -:auto_ids: true -:auto_id_stripping: true diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/16_toc/toc_with_links.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/16_toc/toc_with_links.text deleted file mode 100644 index 9b4ac073..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/block/16_toc/toc_with_links.text +++ /dev/null @@ -1,8 +0,0 @@ -# [Header] - -# [Header] - -[header]: test.html - -* toc -{:toc} diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/cjk-line-break.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/cjk-line-break.html deleted file mode 100644 index 82993163..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/cjk-line-break.html +++ /dev/null @@ -1,4 +0,0 @@ -

    一二三四五

    - -

    あいうえお

    - diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/cjk-line-break.options b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/cjk-line-break.options deleted file mode 100644 index 4c86d365..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/cjk-line-break.options +++ /dev/null @@ -1 +0,0 @@ -:remove_line_breaks_for_cjk: true diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/cjk-line-break.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/cjk-line-break.text deleted file mode 100644 index 969c04ca..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/cjk-line-break.text +++ /dev/null @@ -1,12 +0,0 @@ -一 -二 -三 -四 -五 - -あ -い -う -え -お - diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/encoding.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/encoding.html deleted file mode 100644 index 0339347f..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/encoding.html +++ /dev/null @@ -1,46 +0,0 @@ -

    Das ist gewöhnlich ein Über-Problem mit manchen
    -Sälen http://example.org und anderen Dinge. Siehe -Über mich!

    - -
    -

    Vielleicht höre ich nicht richtig?

    -
    - -
      -
    • Sollten wir uns das überlegen? Verhöhne mich nicht!
    • -
    • Ho ho höher! Sind *wir* da?
    • -
    - -

    Titel sind urschön

    - -

    Manche mögens ärmer

    - -
    öha
    -was nun?
    -
    - -
    -
    Töne
    -
    Laute Geräusche
    -
    vielleicht noch was ähnliches
    -
    - - - - - - - - - - - - - - - - -
    hochhöheram höchsten
    überdrübermüde
    - -

    Das ist schön -gemacht

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/encoding.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/encoding.text deleted file mode 100644 index 65edf4b0..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/encoding.text +++ /dev/null @@ -1,28 +0,0 @@ -Das ist gewöhnlich *ein* [Über-Problem](http://example.org) mit manchen -Sälen und anderen Dinge. Siehe -![Über mich](http://example.org)! - -> Vielleicht *höre*{:.red} ich nicht richtig? -{:.test} - -* Sollten wir uns das überl*egen*? *Verhöhne* mich nicht! -* Ho ho höher! Sind \*wir\* da? - -Titel sind urschön -================== - -## Manche mögens *ärmer* {#hot} - - öha - was nun? - -Töne -: Laute Geräusche -: vielleicht noch was ä*hnliches* - -| hoch | höher | am höchsten | -|----------------------------| -| über | drüber | müde | - -

    Das ist schön -gemacht

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/man/example.man b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/man/example.man deleted file mode 100644 index a03d1481..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/man/example.man +++ /dev/null @@ -1,123 +0,0 @@ -.\" generated by kramdown -.TH "NAME" "1" "November 2016" "Some extra data" -.SH NAME -name \- description -.SH "SYNOPSIS" -\fBname\fP [\fBOPTIONS\fP] \fIarguments\fP\.\.\. -.SH "DESCRIPTION" -This is a normal paragraph\. -.sp -.PD 0 -.IP \(bu 4 -A -.IP \(bu 4 -compact -.IP \(bu 4 -list -.IP \(bu 4 -with multiple -.RS -.IP \(bu 4 -items and -.RS -.IP \(bu 4 -nested -.RE -.RE -.IP \(bu 4 -as well -.PD -.RS -.P -blockquotes are fine -.IP 1. 4 -numbered lists -.IP 2. 4 -work too -.RS -.IP 1. 4 -and they -.IP 2. 4 -can be -.RS -.IP 1. 4 -nested -.RE -.RE -.IP 3. 4 -again -.RE -.sp -.RS 4 -.EX -Some fancy code - going - on - here -.EE -.RE -.TP -\fB\-o\fP -.TQ -\fB\-\-option\fP -Description lists -.sp -are useful as well -.P -And compact definition lists: -.sp -.PD 0 -.TP -\fBo\fP -Option -.TP -\fBk\fP -Key -.TP -\fBv\fP -Value -.PD -.TS -box center ; -l l l l . -tables can be centered -.TE -.sp -.TS -box ; -lb lb cb rb . -Default aligned Left aligned Center aligned Right aligned -= -.T& -l l c r . -First body part Second cell Third cell fourth cell -Second \fIline\fP foo \fBstrong\fP baz -Third line \fBquux\fP baz bar -_ -.T& -l l c r . -Second body -2nd line -= -Footer row one -Footer row two -.TE -.sp -.P -Inline formatting like \fIemphasis\fP, \fBstrong\fP and \fBcode span\fP work as ususal\. -.UR are_well\.html -Links -.UE -work, too! As do -.br -line breaks\. -.P -Abbreviations like MD can be used but the abbreviation title is ignored\. -.P -Math elements work \fB\elambda = 5\fP inline and in block form: -.sp -.RS 4 -.EX -\elambda_5 = \ealpha + 4 -.EE -.RE diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/man/example.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/man/example.text deleted file mode 100644 index a0a26149..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/man/example.text +++ /dev/null @@ -1,85 +0,0 @@ -# name(1) - description -{: data-date="November 2016" data-extra="Some extra data"} - -## SYNOPSIS - -`name` \[`OPTIONS`\] *arguments*... - -## DESCRIPTION - -This is a normal paragraph. - -* A -* compact -* list -* with multiple - * items and - * nested -* as well -{:.compact} - -> blockquotes are fine -> -> 1. numbered lists -> -> 2. work too -> 1. and they -> 2. can be -> 1. nested -> -> 3. again - -~~~ -Some fancy code - going - on - here -~~~ - -`-o` -`--option` -: Description lists -: are useful as well - -And compact definition lists: - -`o` -: Option - -`k` -: Key - -`v` -: Value -{:.compact} - -| tables | can | be | centered | -{:.center} - -|-----------------+------------+-----------------+----------------| -| Default aligned |Left aligned| Center aligned | Right aligned | -|-----------------|:-----------|:---------------:|---------------:| -| First body part |Second cell | Third cell | fourth cell | -| Second *line* |foo | **strong** | baz | -| Third line |`quux` | baz | bar | -|-----------------+------------+-----------------+----------------| -| Second body | | | | -| 2nd line | | | | -|=================+============+=================+================| -| Footer row one | | | | -| Footer row two | | | | -|-----------------+------------+-----------------+----------------| - - -Inline formatting like *emphasis*, **strong** and `code span` work -as ususal. [Links](are_well.html) work, too! As do\\ -line breaks. - -Abbreviations like MD can be used but the abbreviation title is -ignored. - -*[MD]: Markdown - -Math elements work $$\lambda = 5$$ inline and in block form: - -$$\lambda_5 = \alpha + 4$$ diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/man/heading-name-dash-description.man b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/man/heading-name-dash-description.man deleted file mode 100644 index 8e47527e..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/man/heading-name-dash-description.man +++ /dev/null @@ -1,4 +0,0 @@ -.\" generated by kramdown -.TH "NAME" "7" -.SH NAME -name \- description diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/man/heading-name-dash-description.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/man/heading-name-dash-description.text deleted file mode 100644 index 832c9213..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/man/heading-name-dash-description.text +++ /dev/null @@ -1 +0,0 @@ -# name -- description diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/man/heading-name-description.man b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/man/heading-name-description.man deleted file mode 100644 index e59dc5ec..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/man/heading-name-description.man +++ /dev/null @@ -1,4 +0,0 @@ -.\" generated by kramdown -.TH "NAME" "1" "November 2016" "Something extra" -.SH NAME -name \- description diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/man/heading-name-description.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/man/heading-name-description.text deleted file mode 100644 index 941482c1..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/man/heading-name-description.text +++ /dev/null @@ -1,2 +0,0 @@ -# name description -{: data-section="1" data-date="November 2016" data-extra="Something extra"} diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/man/heading-name-section-description.man b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/man/heading-name-section-description.man deleted file mode 100644 index 8df4ff71..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/man/heading-name-section-description.man +++ /dev/null @@ -1,4 +0,0 @@ -.\" generated by kramdown -.TH "NAME" "1" -.SH NAME -name \- description diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/man/heading-name-section-description.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/man/heading-name-section-description.text deleted file mode 100644 index 5f3e765b..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/man/heading-name-section-description.text +++ /dev/null @@ -1 +0,0 @@ -# name(1) -- description diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/man/heading-name-section.man b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/man/heading-name-section.man deleted file mode 100644 index 7ca87574..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/man/heading-name-section.man +++ /dev/null @@ -1,2 +0,0 @@ -.\" generated by kramdown -.TH "NAME" "1" diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/man/heading-name-section.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/man/heading-name-section.text deleted file mode 100644 index da98dbda..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/man/heading-name-section.text +++ /dev/null @@ -1 +0,0 @@ -# name(1) diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/man/heading-name.man b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/man/heading-name.man deleted file mode 100644 index 8488496f..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/man/heading-name.man +++ /dev/null @@ -1,2 +0,0 @@ -.\" generated by kramdown -.TH "NAME" "7" diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/man/heading-name.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/man/heading-name.text deleted file mode 100644 index 5f4656ae..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/man/heading-name.text +++ /dev/null @@ -1 +0,0 @@ -# name diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/man/sections.man b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/man/sections.man deleted file mode 100644 index 14ab2336..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/man/sections.man +++ /dev/null @@ -1,4 +0,0 @@ -.\" generated by kramdown -.SH "NAME" -works -.SS "Sub section" diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/man/sections.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/man/sections.text deleted file mode 100644 index d1f5f864..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/man/sections.text +++ /dev/null @@ -1,11 +0,0 @@ -## NAME - -works - -### Sub section - -#### Ignored - -##### Ignored - -###### Ignored diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/man/text-escaping.man b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/man/text-escaping.man deleted file mode 100644 index 710a4f14..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/man/text-escaping.man +++ /dev/null @@ -1,8 +0,0 @@ -.\" generated by kramdown -\&\. at the start of the line -.P -line with \efB backslash symbol -.P -some \. other \- escaped \' symbols -.P -\&\. diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/man/text-escaping.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/man/text-escaping.text deleted file mode 100644 index 052b94f5..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/man/text-escaping.text +++ /dev/null @@ -1,7 +0,0 @@ -. at the start of the line - -line with \fB backslash symbol - -some . other - escaped \' symbols - -. diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/empty.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/empty.html deleted file mode 100644 index a1102ead..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/empty.html +++ /dev/null @@ -1,5 +0,0 @@ -

    This is [] empty.

    - -

    This is [][] empty.

    - -

    This is empty.

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/empty.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/empty.text deleted file mode 100644 index cca5de5f..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/empty.text +++ /dev/null @@ -1,5 +0,0 @@ -This is [] empty. - -This is [][] empty. - -This is [](test.html) empty. diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/empty_title.htmlinput b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/empty_title.htmlinput deleted file mode 100644 index b95b2cc7..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/empty_title.htmlinput +++ /dev/null @@ -1,3 +0,0 @@ -

    Image with empty title: alt text

    - -

    Link reference with empty title.

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/empty_title.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/empty_title.text deleted file mode 100644 index baabe7da..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/empty_title.text +++ /dev/null @@ -1,7 +0,0 @@ -Image with empty title: ![alt text](/images/other.png) - -Link [reference][1] with empty title. - - - -[1]: http://example.tld diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/image_in_a.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/image_in_a.html deleted file mode 100644 index e1f4ade5..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/image_in_a.html +++ /dev/null @@ -1,5 +0,0 @@ -

    Simple: Some alt text

    - -

    Nested: Some alt ![img](text.png) text

    - -

    Simple: Some text alt text text

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/image_in_a.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/image_in_a.text deleted file mode 100644 index bdbfb65e..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/image_in_a.text +++ /dev/null @@ -1,5 +0,0 @@ -Simple: [Some ![alt text](/images/other.png)](local.html) - -Nested: [Some ![alt ![img](text.png) text](/images/other.png)](local.html) - -Simple: [Some *text ![alt text](/images/other.png) text*](local.html) diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/imagelinks.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/imagelinks.html deleted file mode 100644 index 565d36f7..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/imagelinks.html +++ /dev/null @@ -1,15 +0,0 @@ -

    Simple: alt text

    - -

    Simple with title: alt text

    - -

    Empty img link: alt text

    - -

    Reference style: alt text

    - -

    Reference style with title: alt text

    - -

    No alt text:

    - -

    No id: imgo

    - -

    With escaped pipe: an | pipe

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/imagelinks.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/imagelinks.text deleted file mode 100644 index 05050a24..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/imagelinks.text +++ /dev/null @@ -1,18 +0,0 @@ -Simple: ![alt text](/images/other.png) - -Simple with title: ![alt text](/images/other.png "title") - -Empty img link: ![alt text]() - -Reference style: ![alt text][img] - -Reference style with title: ![alt text][imgo] - -No alt text: ![](other.png) - -No id: ![imgo] - -[img]: other.png -[imgo]: other.png "Title" - -With escaped pipe: ![an \| pipe](other.png) diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/inline.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/inline.html deleted file mode 100644 index 8d00efa9..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/inline.html +++ /dev/null @@ -1,46 +0,0 @@ -

    simple URL

    - -

    simple URL

    - -

    simple URL with formatting

    - -

    simple URL with single quoted title

    - -

    simple URL with double quoted title

    - -

    simple URL [with ] escaped

    - -

    simple URL with ] escaped

    - -

    simple URL [with] nested

    - -

    simple URL with [no](link.html) inside

    - -

    simple URL with parens

    - -

    simple URL with parens

    - -

    simple URL broken -on line

    - -

    simple URL with spaces

    - -

    simple URL with spaces

    - -

    simple URL with spaces

    - -

    simple leading/trailing spaces

    - -

    simple leading/trailing spaces

    - -

    simple leading/trailing spaces

    - -

    bad [URL not

    - -

    bad [URL with parens](something(new.html)

    - -

    bad [URL with empty title](something.html ‘’)

    - -

    bad [URL](

    - -

    bad [URL](no

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/inline.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/inline.text deleted file mode 100644 index c7057646..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/inline.text +++ /dev/null @@ -1,48 +0,0 @@ -simple [URL]() - -simple [URL](something.html) - -simple [URL *with* formatting](something.html) - -simple [URL with single quoted title](something.html 'a t"itle') - -simple [URL with double quoted title](something.html "a t'itle") - -simple [URL \[with \] escaped](something.html) - -simple [URL with \] escaped](something.html) - -simple [URL [with] nested](something.html) - -simple [URL with [no](link.html) inside](something.html) - -simple [URL with parens](/something/to(do)) - -simple [URL with parens](/something/to(do "doit") - -simple [URL broken -on line](something.html -"title") - -simple [URL with spaces](with spaces.html) - -simple [URL with spaces](with spaces.html 'title') - -simple [URL with spaces](with (spaces).html) - -simple [leading/trailing spaces]( spaces.html) - -simple [leading/trailing spaces](spaces.html ) - -simple [leading/trailing spaces]( spaces.html ) - - -bad [URL [not](something.html) - -bad [URL with parens](something(new.html) - -bad [URL with empty title](something.html '') - -bad [URL]( - -bad [URL](no diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/latex_escaping.latex b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/latex_escaping.latex deleted file mode 100644 index 63e58e74..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/latex_escaping.latex +++ /dev/null @@ -1,6 +0,0 @@ -\href{https://example.com/~tilde/}{https://example.com/\ensuremath{\sim}tilde/} - -\href{http://example.com/percent\%20percent}{http://example.com/percent\%20percent} - -\href{http://example.com/hash#hash}{http://example.com/hash\#hash} - diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/latex_escaping.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/latex_escaping.text deleted file mode 100644 index 9b27ae86..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/latex_escaping.text +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/link_defs.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/link_defs.html deleted file mode 100644 index 15e2ca71..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/link_defs.html +++ /dev/null @@ -1,9 +0,0 @@ -

    This is a para. -[id]: http://www.example.com/

    - -
    [4]: nourl
    -
    - -

    Points to 1 and 2 and 3 but not [4]

    - -

    Points to _.:,;!?- and otherid8

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/link_defs.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/link_defs.text deleted file mode 100644 index 16a25b5b..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/link_defs.text +++ /dev/null @@ -1,27 +0,0 @@ -This is a para. -[id]: http://www.example.com/ - -[otherid1]: http://wwww.example.com/ "title 1" -[otherid2]: http://wwww.example.com/ 'title 2' -[otherid3]: -[otherid4]: 'title' -[otherid5]: some spaces.html -[otherid6]: some spaces.html 'title' -[otherid7]: some spaces - "title" -[otherid8]:test.html#'test' 'title' - -[break]: http://www.example.com/test/asdf.html - 'Another title' - -[1]: ignored.url - [1]: one.url - [2]: two.url - [3]: three.url - [4]: nourl - -Points to [1] and [2] and [3] but not [4] - -[_.:,;!?-]: http://example.com - -Points to [_.:,;!?-] and [otherid8] diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/link_defs_with_ial.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/link_defs_with_ial.html deleted file mode 100644 index f56d77de..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/link_defs_with_ial.html +++ /dev/null @@ -1,4 +0,0 @@ -

    Link def with attr and attr 2 and attr 3 and attr before

    - -

    test

    - diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/link_defs_with_ial.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/link_defs_with_ial.text deleted file mode 100644 index 59398a3a..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/link_defs_with_ial.text +++ /dev/null @@ -1,16 +0,0 @@ -Link def with [attr] and [attr 2] and [attr 3] and [attr before] - -[attr]: http://example.com 'title' -{: hreflang="en" .test} - -[attr 2]: http://example.com 'title' -{: hreflang="en"} -{: .test} - -[attr 3]: http://example.com -{: .test} -test - -{: hreflang="en"} -{: .test} -[attr before]: http://example.com diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/links_with_angle_brackets.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/links_with_angle_brackets.html deleted file mode 100644 index ecaa31e5..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/links_with_angle_brackets.html +++ /dev/null @@ -1,3 +0,0 @@ -

    This is a link.

    - -

    This is a link.

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/links_with_angle_brackets.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/links_with_angle_brackets.text deleted file mode 100644 index 2cf0ecec..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/links_with_angle_brackets.text +++ /dev/null @@ -1,3 +0,0 @@ -This is a [link](). - -This is a [link]( 'and title'). diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/reference.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/reference.html deleted file mode 100644 index f6fed181..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/reference.html +++ /dev/null @@ -1,37 +0,0 @@ - -

    simple URL and URL

    - -

    simple URL and URL

    - -

    simple 1 and isurl

    - -

    simple 1 and isurl

    - -

    this is [a holy isurl]

    - -

    no [resolution][] here and [here]

    - -

    with a break in -the text

    - -

    this not [isurl] and not [isurl]

    - -

    a Link with_BIG letters

    - -

    bad [no URL] d isurl

    - -

    [no url] invalid.html -[no url]:

    - -

    “title”

    - -

    test url but no title -test [urldef]

    - -

    [urldef]: some.url ‘title”

    - -

    some with spaces

    - -

    this is a ‘special’ occasion for /all/ of us

    - -

    this is predefined for URI

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/reference.options b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/reference.options deleted file mode 100644 index efb4b018..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/reference.options +++ /dev/null @@ -1,3 +0,0 @@ -:link_defs: - predefined: [predefined.html] - URI: [uri.html, My URI] diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/reference.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/reference.text deleted file mode 100644 index 9f39fa70..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/01_link/reference.text +++ /dev/null @@ -1,53 +0,0 @@ -[isurl]: someurl.html - [1]: otherurl.html - -simple [URL][1] and [URL][isurl] - -simple [URL] [1] and [URL] -[isurl] - -simple [1][] and [isurl][] - -simple [1] and [isurl] - -this is [a holy [isurl]] - -no [resolution][] here and [here] - -with a [break in -the text] - - [break in the text]: url.html - -this not \[isurl] and not [isurl\] - -a [Link with_BIG] letters - - [link WITH_big]: letters.html - 'This is the title' - -bad [no URL] d [isurl] - -[no url] invalid.html -[no url]: - -[URL but no title]: invalid.html - - "title" - -test [url but no title] -test [urldef] - -[urldef]: some.url 'title" - - -some [with spaces] - -[with spaces]: with spaces.html "title" - -this [is a 'special' occasion for /all/ of us] - -[is a 'special' occasion for /all/ of us]: occasion.html - - -this is [predefined] for [URI] diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/02_emphasis/empty.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/02_emphasis/empty.html deleted file mode 100644 index 127e6943..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/02_emphasis/empty.html +++ /dev/null @@ -1,3 +0,0 @@ -

    This __is **empty.

    - -

    This **is empty.

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/02_emphasis/empty.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/02_emphasis/empty.text deleted file mode 100644 index c99d053f..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/02_emphasis/empty.text +++ /dev/null @@ -1,3 +0,0 @@ -This __is **empty. - -This ****is empty. diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/02_emphasis/errors.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/02_emphasis/errors.html deleted file mode 100644 index e62f03fd..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/02_emphasis/errors.html +++ /dev/null @@ -1,9 +0,0 @@ -

    This is a *star.

    - -

    This is a **star.

    - -

    This is *a *star.

    - -

    This is *a star*.

    - -

    This** is** a star.

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/02_emphasis/errors.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/02_emphasis/errors.text deleted file mode 100644 index e80e5eb4..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/02_emphasis/errors.text +++ /dev/null @@ -1,9 +0,0 @@ -This is a *star. - -This is a **star. - -This is **a *star*. - -This is *a star\*. - -This** is** a star. diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/02_emphasis/nesting.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/02_emphasis/nesting.html deleted file mode 100644 index 3d34cee1..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/02_emphasis/nesting.html +++ /dev/null @@ -1,41 +0,0 @@ -
      -
    • test test
    • -
    • test test
    • -
    • test test
    • -
    • test test
    • -
    • test test
    • -
    • test test
    • -
    • test test
    • -
    • test test
    • -
    • test test
    • -
    • test test
    • -
    • test test
    • -
    • test test
    • -
    • test test
    • -
    • test test
    • -
    • test test
    • -
    • test test
    • -
    -
      -
    • ab
    • -
    • ab
    • -
    • abc
    • -
    • ab
    • -
    • ab
    • -
    • abc
    • -
    -
      -
    • _a_b
    • -
    • a_b_
    • -
    • a_b_c
    • -
    • __a__b
    • -
    • a__b__
    • -
    • a__b__c
    • -
    • a__2__c
    • -
    • a__2__3
    • -
    • 1__2__3
    • -
    -
      -
    • a _b_ c
    • -
    • a __b__ c
    • -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/02_emphasis/nesting.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/02_emphasis/nesting.text deleted file mode 100644 index ba67e84b..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/02_emphasis/nesting.text +++ /dev/null @@ -1,36 +0,0 @@ -- ***test test*** -- ___test test___ -- *test **test*** -- **test *test*** -- ***test* test** -- ***test** test* -- ***test* test** -- **test *test*** -- *test **test*** -- _test __test___ -- __test _test___ -- ___test_ test__ -- ___test__ test_ -- ___test_ test__ -- __test _test___ -- _test __test___ -^ -- *a*b -- a*b* -- a*b*c -- **a**b -- a**b** -- a**b**c -^ -- _a_b -- a_b_ -- a_b_c -- __a__b -- a__b__ -- a__b__c -- a__2__c -- a__2__3 -- 1__2__3 -^ -- *a _b_ c* -- **a __b__ c** diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/02_emphasis/normal.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/02_emphasis/normal.html deleted file mode 100644 index 89774f43..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/02_emphasis/normal.html +++ /dev/null @@ -1,65 +0,0 @@ -

    This is so hard.

    - -

    This is so hard too.

    - -

    At start -At start

    - -

    At end -At end

    - -

    At start -At start

    - -

    At end -At end

    - -

    And nested.

    - -

    And nest**ed.

    - -

    And *nested* like this.

    - -

    And not_nest_ed.

    - -

    And nested.

    - -

    And nested.

    - -

    And neste.

    - -

    And lonely * here*.

    - -

    And lonely ** here**.

    - -

    And lonely ** here.

    - -

    ** and here**.

    - -

    And compli*cated * here

    - -

    Some**what more * **here

    - -

    Do it *this* way -Or this *this* way -Or that *that* way -Or that *that* way

    - -

    http://blah.com/blah_%28

    - -

    A-_B

    - -
      -
    • test
    • -
    • test
    • -
    • test
    • -
    • (“test”)
    • -
    • (test)
    • -
    • test
    • -
    • `test
    • -
    • test
    • -
    - -

    it–by design–cannot have side-effects.

    - -

    it—by design—cannot have side-effects.

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/02_emphasis/normal.options b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/02_emphasis/normal.options deleted file mode 100644 index 2e6e0a12..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/02_emphasis/normal.options +++ /dev/null @@ -1 +0,0 @@ -:entity_output: :numeric diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/02_emphasis/normal.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/02_emphasis/normal.text deleted file mode 100644 index 1e04b87a..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/02_emphasis/normal.text +++ /dev/null @@ -1,63 +0,0 @@ -This *is* so **hard**. - -This _is_ so __hard__ too. - -*At* start -*At* start - -At *end* -At *end* - -_At_ start -_At_ start - -At _end_ -At _end_ - -And *nest**ed***. - -And *nest**ed*. - -And *nest**ed* like** this. - -And *not_nest_ed*. - -And ***nested***. - -And ___nested___. - -And **nest*e***. - -And lonely * here*. - -And lonely ** here**. - -And **lonely ** here**. - -** and here**. - -And **compli*cated \*** here - -Some***what* more * ***he*re - -Do it *\*this\** way -Or this \**this*\* way -Or that *\*that*\* way -Or that \**that\** way - -[http://blah.com/blah_%28](http://blah.com/blah_%28) - -[A-_B](A_-B) - -- _test_ -- '_test_' -- "_test_" -- ("_test_") -- (_test_) -- “_test_” -- \`_test_' -- „_test_“ - -it--by design--_cannot have side-effects_. - -it---by design---_cannot have side-effects_. diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/empty.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/empty.html deleted file mode 100644 index 20c50519..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/empty.html +++ /dev/null @@ -1,5 +0,0 @@ -

    This is `` empty.

    - -

    This is ``empty.

    - -

    This is ````empty.

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/empty.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/empty.text deleted file mode 100644 index cbb91529..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/empty.text +++ /dev/null @@ -1,5 +0,0 @@ -This is `` empty. - -This is ``empty. - -This is ````empty. diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/errors.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/errors.html deleted file mode 100644 index 1d341a8f..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/errors.html +++ /dev/null @@ -1 +0,0 @@ -

    Not ended `span.

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/errors.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/errors.text deleted file mode 100644 index 7a948b41..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/errors.text +++ /dev/null @@ -1 +0,0 @@ -Not ended `span. diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/highlighting-minted.latex b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/highlighting-minted.latex deleted file mode 100644 index a1f84d90..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/highlighting-minted.latex +++ /dev/null @@ -1,2 +0,0 @@ -You can say \mintinline{ruby}{x = Class.new}, for example. - diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/highlighting-minted.options b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/highlighting-minted.options deleted file mode 100644 index c11ebb6a..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/highlighting-minted.options +++ /dev/null @@ -1 +0,0 @@ -:syntax_highlighter: minted diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/highlighting-minted.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/highlighting-minted.text deleted file mode 100644 index 73732909..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/highlighting-minted.text +++ /dev/null @@ -1 +0,0 @@ -You can say `x = Class.new`{:.language-ruby}, for example. diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/highlighting.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/highlighting.html deleted file mode 100644 index 4294542d..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/highlighting.html +++ /dev/null @@ -1 +0,0 @@ -

    You can say x = Class.new, for example.

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/highlighting.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/highlighting.text deleted file mode 100644 index 73732909..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/highlighting.text +++ /dev/null @@ -1 +0,0 @@ -You can say `x = Class.new`{:.language-ruby}, for example. diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/normal-css-class.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/normal-css-class.html deleted file mode 100644 index ec21686c..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/normal-css-class.html +++ /dev/null @@ -1 +0,0 @@ -

    This is a code-span

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/normal-css-class.options b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/normal-css-class.options deleted file mode 100644 index bfc92f45..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/normal-css-class.options +++ /dev/null @@ -1,2 +0,0 @@ -:syntax_highlighter_opts: - guess_lang: true diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/normal-css-class.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/normal-css-class.text deleted file mode 100644 index f704439a..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/normal-css-class.text +++ /dev/null @@ -1 +0,0 @@ -This is a `code-span` diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/normal.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/normal.html deleted file mode 100644 index 6de2257f..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/normal.html +++ /dev/null @@ -1,20 +0,0 @@ -

    This is a simple span.

    - -

    With some<ht>&ml in it.

    - -

    And ` backticks.

    - -

    And ``some`` more.

    - -

    With backslash in\ it.

    - -

    This is a ` literal backtick. -As `are` these!

    - -

    No literal backtick.

    - -

    something

    - -

    ` `

    - -

    a ` `

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/normal.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/normal.text deleted file mode 100644 index c1889595..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/normal.text +++ /dev/null @@ -1,20 +0,0 @@ -This is `a` simple span. - -With `some&ml` in it. - -And `` ` `` backticks. - -And ``` ``some`` ``` more. - -With backslash `in\` it. - -This is a ` literal backtick. -As \`are\` these! - -No `` literal backtick``. - -`something` - -` ` - -a ` ` diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/rouge/disabled.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/rouge/disabled.html deleted file mode 100644 index 7822f788..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/rouge/disabled.html +++ /dev/null @@ -1 +0,0 @@ -

    You can say Class.

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/rouge/disabled.options b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/rouge/disabled.options deleted file mode 100644 index 34094e96..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/rouge/disabled.options +++ /dev/null @@ -1,4 +0,0 @@ -:syntax_highlighter: rouge -:syntax_highlighter_opts: - span: - disable: true diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/rouge/disabled.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/rouge/disabled.text deleted file mode 100644 index d958d914..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/rouge/disabled.text +++ /dev/null @@ -1 +0,0 @@ -You can say `Class`{:.language-ruby}. diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/rouge/simple.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/rouge/simple.html deleted file mode 100644 index 4294542d..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/rouge/simple.html +++ /dev/null @@ -1 +0,0 @@ -

    You can say x = Class.new, for example.

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/rouge/simple.options b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/rouge/simple.options deleted file mode 100644 index 9ac61e7e..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/rouge/simple.options +++ /dev/null @@ -1 +0,0 @@ -:syntax_highlighter: rouge diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/rouge/simple.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/rouge/simple.text deleted file mode 100644 index 73732909..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/03_codespan/rouge/simple.text +++ /dev/null @@ -1 +0,0 @@ -You can say `x = Class.new`{:.language-ruby}, for example. diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/backlink_inline.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/backlink_inline.html deleted file mode 100644 index cbb88914..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/backlink_inline.html +++ /dev/null @@ -1,79 +0,0 @@ -

    This is 123456789

    - -
    -
      -
    1. - -

      A paragraph 

      -
    2. -
    3. - -

      A header 

      -
    4. -
    5. - -
      -

      blockquote

      - -

      paragraph 

      -
      -
    6. -
    7. - -
      codeblock
      -
      -

      -
    8. -
    9. - -
        -
      • item 1
      • -
      • item 2 -
          -
        • -

          sub item

          - -
          -

          blockquote

          - -

          header 

          -
          -
        • -
        -
      • -
      -
    10. -
    11. - - - - - - - - - - - - -
      ab
      cd
      -

      -
    12. -
    13. - -
      -

      -
    14. -
    15. - -\[x + 2\] -

      -
    16. -
    17. - -
      test -
      -

      -
    18. -
    -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/backlink_inline.options b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/backlink_inline.options deleted file mode 100644 index ac54fc0d..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/backlink_inline.options +++ /dev/null @@ -1 +0,0 @@ -footnote_backlink_inline: true diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/backlink_inline.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/backlink_inline.text deleted file mode 100644 index 55f94a34..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/backlink_inline.text +++ /dev/null @@ -1,38 +0,0 @@ -This is [^paragraph][^header][^blockquote][^codeblock][^list][^table][^hrule][^mathblock][^html] - -[^paragraph]: - A paragraph - -[^header]: - # A header - -[^blockquote]: - > blockquote - > - > paragraph - -[^codeblock]: - codeblock - -[^list]: - * item 1 - * item 2 - * sub item - - > blockquote - > - > # header - -[^table]: - | a | b | - | c | d | - -[^hrule]: - *** - -[^mathblock]: - $$x + 2$$ - -[^html]: -
    test -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/backlink_text.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/backlink_text.html deleted file mode 100644 index b10570db..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/backlink_text.html +++ /dev/null @@ -1,9 +0,0 @@ -

    Some footnote here1

    - -
    -
      -
    1. -

      Some text here text &8617; <img />

      -
    2. -
    -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/backlink_text.options b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/backlink_text.options deleted file mode 100644 index 4c677eff..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/backlink_text.options +++ /dev/null @@ -1 +0,0 @@ -:footnote_backlink: 'text &8617; ' diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/backlink_text.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/backlink_text.text deleted file mode 100644 index 41a6f984..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/backlink_text.text +++ /dev/null @@ -1,3 +0,0 @@ -Some footnote here[^fn] - -[^fn]: Some text here diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/definitions.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/definitions.html deleted file mode 100644 index 9012cc06..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/definitions.html +++ /dev/null @@ -1,17 +0,0 @@ -

    Some para.

    - -
    -

    blockquote

    -
    - -
      -
    • a list -with some text
    • -
    - -
      -
    • other list
    • -
    -
    code
    -
    - diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/definitions.latex b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/definitions.latex deleted file mode 100644 index 965653c8..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/definitions.latex +++ /dev/null @@ -1,17 +0,0 @@ -Some para. - -\begin{quote} -blockquote -\end{quote} - -\begin{itemize} -\item{} a list -with some text -\end{itemize} - -\begin{itemize} -\item{} other list -\end{itemize} -\begin{verbatim}code -\end{verbatim} - diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/definitions.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/definitions.text deleted file mode 100644 index 44b52e00..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/definitions.text +++ /dev/null @@ -1,24 +0,0 @@ -Some para. - -[^footnote]: ignored definition -[^footnote]: Some footnote text - -> blockquote - -[^other]: some - foot - - note text - -* a list - with some text - -[^tnote]: foot note - -* other list -^ - code - -[^1]: - > a blockquote - and some para diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/footnote_nr.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/footnote_nr.html deleted file mode 100644 index 7eedecba..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/footnote_nr.html +++ /dev/null @@ -1,12 +0,0 @@ -

    This is a footnote35. And another36.

    - -
    -
      -
    1. -

      Some text. 

      -
    2. -
    3. -

      Some other text. 

      -
    4. -
    -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/footnote_nr.latex b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/footnote_nr.latex deleted file mode 100644 index 8f07dde0..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/footnote_nr.latex +++ /dev/null @@ -1,2 +0,0 @@ -This is a footnote\footnote{Some text.}. And another\footnote{Some other text.}. - diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/footnote_nr.options b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/footnote_nr.options deleted file mode 100644 index f606ecfa..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/footnote_nr.options +++ /dev/null @@ -1 +0,0 @@ -:footnote_nr: 35 diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/footnote_nr.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/footnote_nr.text deleted file mode 100644 index cad29357..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/footnote_nr.text +++ /dev/null @@ -1,4 +0,0 @@ -This is a footnote[^ab]. And another[^bc]. - -[^ab]: Some text. -[^bc]: Some other text. diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/footnote_prefix.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/footnote_prefix.html deleted file mode 100644 index 4d6cb956..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/footnote_prefix.html +++ /dev/null @@ -1,12 +0,0 @@ -

    This is a1 footnote1. And another2.

    - -
    -
      -
    1. -

      Some text.  2

      -
    2. -
    3. -

      Some other text. 

      -
    4. -
    -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/footnote_prefix.options b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/footnote_prefix.options deleted file mode 100644 index 51d78bc1..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/footnote_prefix.options +++ /dev/null @@ -1 +0,0 @@ -:footnote_prefix: adf123- diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/footnote_prefix.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/footnote_prefix.text deleted file mode 100644 index 884053e8..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/footnote_prefix.text +++ /dev/null @@ -1,4 +0,0 @@ -This is a[^ab] footnote[^ab]. And another[^bc]. - -[^ab]: Some text. -[^bc]: Some other text. diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/inside_footnote.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/inside_footnote.html deleted file mode 100644 index 21c25604..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/inside_footnote.html +++ /dev/null @@ -1,17 +0,0 @@ -

    Lorem ipsum1 dolor sit amet.

    - -

    Lorem ipsum2 dolor sit amet.

    - -
    -
      -
    1. -

      Consecutur adisping.3 

      -
    2. -
    3. -

      Sed ut perspiciatis unde omnis. 

      -
    4. -
    5. -

      Sed ut. 

      -
    6. -
    -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/inside_footnote.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/inside_footnote.text deleted file mode 100644 index f4f91e93..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/inside_footnote.text +++ /dev/null @@ -1,9 +0,0 @@ -Lorem ipsum[^first] dolor sit amet. - -Lorem ipsum[^second] dolor sit amet. - -[^first]: Consecutur adisping.[^third] - -[^second]: Sed ut perspiciatis unde omnis. - -[^third]: Sed ut. diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/markers.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/markers.html deleted file mode 100644 index 0c103f48..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/markers.html +++ /dev/null @@ -1,46 +0,0 @@ -

    This is some *ref.1

    - -
    -

    a blockquote 2

    -
    - -
      -
    • and a list item 3
    • -
    - -

    And a header4

    - -

    A marker without a definition [^without].

    - -

    A marker 5 used twice1 and thrice1.

    - -
    -
      -
    1. -

      Some foot note text  2 3

      -
    2. -
    3. -

      other text -with more lines

      - -
      -

      and a quote

      -
      -

      -
    4. -
    5. -

      some text 

      -
    6. -
    7. - -
      code block
      -continued here
      -
      -

      -
    8. -
    9. - -

      -
    10. -
    -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/markers.latex b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/markers.latex deleted file mode 100644 index 8f406b86..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/markers.latex +++ /dev/null @@ -1,23 +0,0 @@ -This is some *ref.\footnote{Some foot note text} - -\begin{quote} -a blockquote \footnote{other text -with more lines - -\begin{quote} -and a quote -\end{quote}} -\end{quote} - -\begin{itemize} -\item{} and a list item \footnote{some \emph{text}} -\end{itemize} - -\section*{And a header\footnote{\begin{verbatim}code block -continued here -\end{verbatim}}} - -A marker without a definition {[}\^{}without{]}. - -A marker \footnote{} used twice\footnote{Some foot note text} and thrice\footnote{Some foot note text}. - diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/markers.options b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/markers.options deleted file mode 100644 index 5cfe2502..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/markers.options +++ /dev/null @@ -1,2 +0,0 @@ -:auto_ids: false -:entity_output: :symbolic diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/markers.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/markers.text deleted file mode 100644 index 42b77fb5..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/markers.text +++ /dev/null @@ -1,27 +0,0 @@ -This is some *ref.[^fn] - -[^fn]: Some foot note text -{: .class} - -> a blockquote [^3] - -* and a list item [^1] - -# And a header[^now] - -[^1]:some *text* -[^3]: other text - with more lines - - > and a quote - -A marker without a definition [^without]. - -A marker [^empty] used twice[^fn] and thrice[^fn]. - -[^now]: - - code block - continued here - -[^empty]: diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/placement.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/placement.html deleted file mode 100644 index 9acf8a01..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/placement.html +++ /dev/null @@ -1,11 +0,0 @@ -
    -
      -
    1. -

      Footnote \` text 

      -
    2. -
    -
    - -

    Some para with a1 footnote.

    - -

    And another para.

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/placement.options b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/placement.options deleted file mode 100644 index 2e6e0a12..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/placement.options +++ /dev/null @@ -1 +0,0 @@ -:entity_output: :numeric diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/placement.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/placement.text deleted file mode 100644 index 97c0ab1a..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/placement.text +++ /dev/null @@ -1,8 +0,0 @@ -* footnotes will be placed here -{:footnotes} - -Some para with a[^1] footnote. - -[^1]: Footnote \\\` text - -And another para. diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/regexp_problem.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/regexp_problem.html deleted file mode 100644 index ff1b3203..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/regexp_problem.html +++ /dev/null @@ -1,14 +0,0 @@ -

    Something

    -

    something1.

    - -

    Footnotes

    - -

    Test

    -
    -
      -
    1. - -

      A note 

      -
    2. -
    -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/regexp_problem.options b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/regexp_problem.options deleted file mode 100644 index 5cfe2502..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/regexp_problem.options +++ /dev/null @@ -1,2 +0,0 @@ -:auto_ids: false -:entity_output: :symbolic diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/regexp_problem.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/regexp_problem.text deleted file mode 100644 index 6a60c612..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/regexp_problem.text +++ /dev/null @@ -1,52 +0,0 @@ -# Something -something[^note1]. - -# Footnotes -[^note1]: - A note - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -# Test diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/without_backlink.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/without_backlink.html deleted file mode 100644 index 77f8e0d5..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/without_backlink.html +++ /dev/null @@ -1,9 +0,0 @@ -

    Some footnote here1

    - -
    -
      -
    1. -

      Some text here

      -
    2. -
    -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/without_backlink.options b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/without_backlink.options deleted file mode 100644 index 0512dd6d..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/without_backlink.options +++ /dev/null @@ -1 +0,0 @@ -:footnote_backlink: '' diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/without_backlink.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/without_backlink.text deleted file mode 100644 index 41a6f984..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/04_footnote/without_backlink.text +++ /dev/null @@ -1,3 +0,0 @@ -Some footnote here[^fn] - -[^fn]: Some text here diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/across_lines.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/across_lines.html deleted file mode 100644 index e7cec40f..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/across_lines.html +++ /dev/null @@ -1 +0,0 @@ -

    Link: test

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/across_lines.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/across_lines.text deleted file mode 100644 index 8f39d959..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/across_lines.text +++ /dev/null @@ -1,2 +0,0 @@ -Link: test diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/button.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/button.html deleted file mode 100644 index c49bb52f..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/button.html +++ /dev/null @@ -1,7 +0,0 @@ -

    - -

    First some text and then a

    - -

    and then text.

    - -

    A it.

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/button.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/button.text deleted file mode 100644 index e0a7783c..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/button.text +++ /dev/null @@ -1,7 +0,0 @@ - - -First some text and then a - - and then text. - -A it. diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/invalid.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/invalid.html deleted file mode 100644 index 030552fc..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/invalid.html +++ /dev/null @@ -1 +0,0 @@ -

    This is some text

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/invalid.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/invalid.text deleted file mode 100644 index 383f0a83..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/invalid.text +++ /dev/null @@ -1 +0,0 @@ -This is some text diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/link_with_mailto.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/link_with_mailto.html deleted file mode 100644 index 7d0d6ad6..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/link_with_mailto.html +++ /dev/null @@ -1 +0,0 @@ -

    Link: text

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/link_with_mailto.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/link_with_mailto.text deleted file mode 100644 index fb016196..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/link_with_mailto.text +++ /dev/null @@ -1 +0,0 @@ -Link: text diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/mark_element.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/mark_element.html deleted file mode 100644 index b6989b7f..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/mark_element.html +++ /dev/null @@ -1,3 +0,0 @@ -

    Lorem ipsum.

    - -

    Test

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/mark_element.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/mark_element.text deleted file mode 100644 index 6ae30e03..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/mark_element.text +++ /dev/null @@ -1,3 +0,0 @@ -Lorem ipsum. - -Test diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/markdown_attr.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/markdown_attr.html deleted file mode 100644 index 44158c3b..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/markdown_attr.html +++ /dev/null @@ -1,6 +0,0 @@ -

    This is text -This is *text* -This is text -This is text -This is *nothing* to fear about. -This is <http://example.com>.

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/markdown_attr.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/markdown_attr.text deleted file mode 100644 index dcc10ff8..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/markdown_attr.text +++ /dev/null @@ -1,6 +0,0 @@ -This is *text* -This is *text* -This is *text* -This is *text* -This is *nothing* to *fear* about. -This is . diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/normal.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/normal.html deleted file mode 100644 index 3cdc646d..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/normal.html +++ /dev/null @@ -1,43 +0,0 @@ -

    Empty !

    - -

    title is a title.

    - -

    This is <? a PI ?>.

    - -

    This is comment.

    - -

    This is multiline comment.

    - -

    This is tag -now .

    - -

    This is tag - now.

    - -

    This is an empty tag.

    - -

    This is something strange.

    - -

    Auto-closing:

    - -

    Expanding:

    - -

    An invalid tag: <hR>

    - -

    A <p>block tag</p>.

    - -

    An invalid </closing> tag.

    - -

    A tag.

    - -

    An unclosed tag.

    - -

    Some element with | pipe symbol

    - -

    Some element with | pipe symbol

    - -

    Some element with | pipe -symbol|

    - -

    underlined

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/normal.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/normal.text deleted file mode 100644 index 0156d7c0..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/normal.text +++ /dev/null @@ -1,43 +0,0 @@ -Empty ! - -title is a title. - -This is . - -This is comment. - -This is multiline comment. - -This is tag -now . - -This is tag - now. - -This is an empty tag. - -This is _something strange_. - -Auto-closing:
    - -Expanding: - -An invalid tag:
    - -A

    block tag

    . - -An invalid tag. - -A tag. - -An unclosed *tag.* - -Some element with | pipe symbol - -Some element with | pipe symbol - -Some element with | pipe -symbol| - -underlined diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/raw_span_elements.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/raw_span_elements.html deleted file mode 100644 index 808f1dbf..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/raw_span_elements.html +++ /dev/null @@ -1,2 +0,0 @@ -

    This is raw --version and --version and --version and ----version.

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/raw_span_elements.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/raw_span_elements.text deleted file mode 100644 index 5b128fcb..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/raw_span_elements.text +++ /dev/null @@ -1,2 +0,0 @@ -This is raw --version and --version and --version and ----version. diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/xml.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/xml.html deleted file mode 100644 index 00b43c12..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/xml.html +++ /dev/null @@ -1,5 +0,0 @@ -

    This doit test

    - -

    This doit test

    - -

    This doit</some> test

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/xml.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/xml.text deleted file mode 100644 index bc234de4..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/05_html/xml.text +++ /dev/null @@ -1,5 +0,0 @@ -This doit test - -This doit test - -This doit test diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/abbreviations/abbrev.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/abbreviations/abbrev.html deleted file mode 100644 index f247c538..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/abbreviations/abbrev.html +++ /dev/null @@ -1,21 +0,0 @@ -

    This is some text.

    - -

    There is some real concern about OtHeR!

    - -

    is some Think empty about Oesterreich. CSS und CSS3

    - -

    no abbrev here because there is someone and kulis some

    - -
      -
    • (X)HTML test
    • -
    • line two
    • -
    - -

    (X)HTML

    - -
      -
    • test (X)HTML
    • -
    - -

    This is awesome.

    - diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/abbreviations/abbrev.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/abbreviations/abbrev.text deleted file mode 100644 index 1aa8100c..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/abbreviations/abbrev.text +++ /dev/null @@ -1,34 +0,0 @@ -This is some text. - -*[is some]: Yes it is -*[OtHeR!]: This & that - -*[is some]: It is, yes -*[empty]: - -There *is some real* concern about OtHeR! - -is some Think empty about Oesterreich. CSS und CSS3 - -no abbrev here because there is someone and kulis some - -*[Oesterreich]: Very nice country - -*[CSS]: Cascading -*[CSS3]: Cascading 3 - -* (X)HTML test -* line two - -[(X)HTML](http://en.wikipedia.org/wiki/Xhtml) - -* test (X)HTML - -*[(X)HTML]: (eXtensible) HyperText Markup Language - - -This is awesome. - -{:.testit} -*[awesome]: Some text here -{:.test} diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/abbreviations/abbrev_defs.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/abbreviations/abbrev_defs.html deleted file mode 100644 index 108fcfce..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/abbreviations/abbrev_defs.html +++ /dev/null @@ -1,2 +0,0 @@ -
    *[4]: noabbrev
    -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/abbreviations/abbrev_defs.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/abbreviations/abbrev_defs.text deleted file mode 100644 index 3f3a0e5b..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/abbreviations/abbrev_defs.text +++ /dev/null @@ -1,5 +0,0 @@ -*[ABBR]: Some abbreviations - *[one abbr]: one abbrev - *[2 and other]: another - *[3]: yet another - *[4]: noabbrev diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/abbreviations/abbrev_in_html.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/abbreviations/abbrev_in_html.html deleted file mode 100644 index 6da3ca4e..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/abbreviations/abbrev_in_html.html +++ /dev/null @@ -1,9 +0,0 @@ -

    This is some TEST to check.

    - - - This TEST fails. - - - This TEST fails. - - diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/abbreviations/abbrev_in_html.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/abbreviations/abbrev_in_html.text deleted file mode 100644 index e0a0e881..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/abbreviations/abbrev_in_html.text +++ /dev/null @@ -1,10 +0,0 @@ -This is some TEST to check. - - - This TEST fails. - - - This TEST fails. - - -*[TEST]: This Escapes SVG Text. diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/abbreviations/in_footnote.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/abbreviations/in_footnote.html deleted file mode 100644 index 4b6a97f8..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/abbreviations/in_footnote.html +++ /dev/null @@ -1,9 +0,0 @@ -

    There is a TXT file here. 1

    - -
    -
      -
    1. -

      A TXT file. 

      -
    2. -
    -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/abbreviations/in_footnote.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/abbreviations/in_footnote.text deleted file mode 100644 index e7709cb9..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/abbreviations/in_footnote.text +++ /dev/null @@ -1,5 +0,0 @@ -There is a TXT file here. [^1] - -*[TXT]: Text File - -[^1]: A TXT file. diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/autolinks/url_links.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/autolinks/url_links.html deleted file mode 100644 index 90eae7d5..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/autolinks/url_links.html +++ /dev/null @@ -1,15 +0,0 @@ -

    This should be a http://www.example.com/ link. -This should be a john.doe@example.com link. -As should john.doe@example.com this. -As should john_doe@example.com this. -As should CSS@example.com this. -Another ampersand http://www.example.com/?doit&x=y link. -More entities http://www.example.com/?doit&x="y&z=y.

    - -

    Email international übung@macht.den.meister.de, ü.äß@hülse.de -Email invalid: <me@example.com>

    - -

    Autolink with underscore: http://www.example.com/with_under_score

    - -

    http://www.example.com/

    - diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/autolinks/url_links.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/autolinks/url_links.text deleted file mode 100644 index 033e8af4..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/autolinks/url_links.text +++ /dev/null @@ -1,16 +0,0 @@ -This should be a link. -This should be a link. -As should this. -As should this. -As should this. -Another ampersand link. -More entities . - -Email international <übung@macht.den.meister.de>, <ü.äß@hülse.de> -Email invalid: <[me@example.com](mailtos:me@example.com)> - -Autolink with underscore: - - - -*[CSS]: Cascading diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/escaped_chars/normal.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/escaped_chars/normal.html deleted file mode 100644 index 015d5948..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/escaped_chars/normal.html +++ /dev/null @@ -1,47 +0,0 @@ -

    \

    - -

    .

    - -

    *

    - -

    _

    - -

    +

    - -

    -

    - -

    `

    - -

    (

    - -

    )

    - -

    [

    - -

    ]

    - -

    {

    - -

    }

    - -

    #

    - -

    !

    - -

    <<

    - -

    >>

    - -

    :

    - -

    |

    - -

    "

    - -

    '

    - -

    =

    - -

    >

    - -

    <

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/escaped_chars/normal.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/escaped_chars/normal.text deleted file mode 100644 index 1c47104a..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/escaped_chars/normal.text +++ /dev/null @@ -1,47 +0,0 @@ -\\ - -\. - -\* - -\_ - -\+ - -\- - -\` - -\( - -\) - -\[ - -\] - -\{ - -\} - -\# - -\! - -\<< - -\>> - -\: - -\| - -\" - -\' - -\= - -\> - -\< diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/extension/comment.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/extension/comment.html deleted file mode 100644 index 3544d49f..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/extension/comment.html +++ /dev/null @@ -1,6 +0,0 @@ -

    This is a paragraph. -This is a paragraph. -This is a . -This is a paragraph. -This is a {:/comment} simple {:/} paragraph. -This is a {::comment} paragraph.

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/extension/comment.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/extension/comment.text deleted file mode 100644 index 8b9e8d36..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/extension/comment.text +++ /dev/null @@ -1,6 +0,0 @@ -This is a {::comment}simple{:/} paragraph. -This is a {::comment}simple{:/comment} paragraph. -This is a {::comment}simple {:/other} paragraph{:/comment}. -This is a {::comment/} paragraph. -This is a {:/comment} simple {:/} paragraph. -This is a {::comment} paragraph. diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/extension/ignored.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/extension/ignored.html deleted file mode 100644 index 63c2c404..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/extension/ignored.html +++ /dev/null @@ -1 +0,0 @@ -

    This is {::something}paragraph{:/}

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/extension/ignored.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/extension/ignored.text deleted file mode 100644 index a7e77375..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/extension/ignored.text +++ /dev/null @@ -1 +0,0 @@ -This is {::something}paragraph{:/} diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/extension/nomarkdown.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/extension/nomarkdown.html deleted file mode 100644 index 83de9312..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/extension/nomarkdown.html +++ /dev/null @@ -1 +0,0 @@ -

    This is *some* text.

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/extension/nomarkdown.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/extension/nomarkdown.text deleted file mode 100644 index 57c4b38f..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/extension/nomarkdown.text +++ /dev/null @@ -1 +0,0 @@ -This is {::nomarkdown}*some*{:/} text. diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/extension/options.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/extension/options.html deleted file mode 100644 index 48e3076a..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/extension/options.html +++ /dev/null @@ -1 +0,0 @@ -

    This is an option *true*!

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/extension/options.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/extension/options.text deleted file mode 100644 index e289491e..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/extension/options.text +++ /dev/null @@ -1 +0,0 @@ -This is an {::options parse_span_html="false" /} option *true*! diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/ial/simple.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/ial/simple.html deleted file mode 100644 index c0f3a475..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/ial/simple.html +++ /dev/null @@ -1,6 +0,0 @@ -

    This is a span.

    - -

    This is a span.

    - -

    This is an{: .ignored} span ial. -This is an{: .escaped} span ial.

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/ial/simple.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/ial/simple.text deleted file mode 100644 index 8945602b..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/ial/simple.text +++ /dev/null @@ -1,6 +0,0 @@ -This is a `span`{: .hund #dog}. - -This is a `span`{: .hund #dog}{: .katz key='val'}. - -This is an{: .ignored} span ial. -This is an\{: .escaped} span ial. diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/line_breaks/normal.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/line_breaks/normal.html deleted file mode 100644 index 11066a50..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/line_breaks/normal.html +++ /dev/null @@ -1,11 +0,0 @@ -

    This is a line
    -with a line break.

    - -

    This is a line -without a line break.

    - -

    This is a line
    -with a line\
    -break.

    - -

    Line break on last line.

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/line_breaks/normal.latex b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/line_breaks/normal.latex deleted file mode 100644 index a62ff561..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/line_breaks/normal.latex +++ /dev/null @@ -1,12 +0,0 @@ -This is a line\newline -with a line break. - -This is a line -without a line break. - -This is a line \newline -with a line\textbackslash{} \newline -break. - -Line break on last line. - diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/line_breaks/normal.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/line_breaks/normal.text deleted file mode 100644 index 92f866f2..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/line_breaks/normal.text +++ /dev/null @@ -1,11 +0,0 @@ -This is a line -with a line break. - -This is a line -without a line break. - -This is a line \\ -with a line\\ -break. - -Line break on last line. diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/math/no_engine.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/math/no_engine.html deleted file mode 100644 index 3b93c542..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/math/no_engine.html +++ /dev/null @@ -1 +0,0 @@ -

    $5+5$ inline math

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/math/no_engine.options b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/math/no_engine.options deleted file mode 100644 index 06d559e5..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/math/no_engine.options +++ /dev/null @@ -1 +0,0 @@ -:math_engine: ~ diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/math/no_engine.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/math/no_engine.text deleted file mode 100644 index a22f9fd4..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/math/no_engine.text +++ /dev/null @@ -1 +0,0 @@ -$$5+5$$ inline math diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/math/normal.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/math/normal.html deleted file mode 100644 index 459d03f3..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/math/normal.html +++ /dev/null @@ -1,10 +0,0 @@ -

    This is \(\lambda_\alpha > 5\) some math. With \(1 -+ 1\) new line characters in between.

    - -

    \(5+5\) inline math, $5.00 $$no math$$

    - -

    $$5+5$$ inline math

    - -

    \(5+5\)

    - -

    $$5+5$$

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/math/normal.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/math/normal.text deleted file mode 100644 index e37a0078..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/math/normal.text +++ /dev/null @@ -1,10 +0,0 @@ -This is $$\lambda_\alpha > 5$$ some math. With $$1 -+ 1$$ new line characters in between. - -$$5+5$$ inline math, $5.00 \$$no math$$ - -\$\$5+5$$ inline math - -\$$5+5$$ - -\$\$5+5$$ diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/entities.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/entities.html deleted file mode 100644 index 21a29033..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/entities.html +++ /dev/null @@ -1,6 +0,0 @@ -

    This is the A&O. © 2008 by me -As well \& as this. Some ŗ other -values may ¯ may also show but -not st. like &#xYZ;.

    - -

    This <span> is BS&T; done!

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/entities.options b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/entities.options deleted file mode 100644 index 036c5619..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/entities.options +++ /dev/null @@ -1 +0,0 @@ -:entity_output: :as_input diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/entities.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/entities.text deleted file mode 100644 index 7ef42c7b..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/entities.text +++ /dev/null @@ -1,6 +0,0 @@ -This is the A&O. © 2008 by me -As well \& as this. Some ŗ other -values may ¯ may also show but -not st. like &#xYZ;. - -This <span> is BS&T; done! diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/entities_as_char.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/entities_as_char.html deleted file mode 100644 index ed2817bb..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/entities_as_char.html +++ /dev/null @@ -1 +0,0 @@ -

    This "is" 'the' A&O. © 2008 by me ŗ and λ

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/entities_as_char.options b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/entities_as_char.options deleted file mode 100644 index 32a751e3..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/entities_as_char.options +++ /dev/null @@ -1,2 +0,0 @@ -:entity_output: :as_char -:smart_quotes: apos,apos,quot,quot diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/entities_as_char.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/entities_as_char.text deleted file mode 100644 index 279b5115..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/entities_as_char.text +++ /dev/null @@ -1 +0,0 @@ -This "is" 'the' A&O. © 2008 by me ŗ and λ diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/entities_as_input.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/entities_as_input.html deleted file mode 100644 index d2eec9dd..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/entities_as_input.html +++ /dev/null @@ -1 +0,0 @@ -

    This is the A&O. © 2008 by me ŗ and λ

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/entities_as_input.options b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/entities_as_input.options deleted file mode 100644 index 036c5619..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/entities_as_input.options +++ /dev/null @@ -1 +0,0 @@ -:entity_output: :as_input diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/entities_as_input.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/entities_as_input.text deleted file mode 100644 index 1ddf7cdd..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/entities_as_input.text +++ /dev/null @@ -1 +0,0 @@ -This is the A&O. © 2008 by me ŗ and λ diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/entities_numeric.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/entities_numeric.html deleted file mode 100644 index d04613ee..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/entities_numeric.html +++ /dev/null @@ -1 +0,0 @@ -

    This is the A&O. © 2008 by me ŗ and λ

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/entities_numeric.options b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/entities_numeric.options deleted file mode 100644 index 2e6e0a12..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/entities_numeric.options +++ /dev/null @@ -1 +0,0 @@ -:entity_output: :numeric diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/entities_numeric.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/entities_numeric.text deleted file mode 100644 index 1ddf7cdd..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/entities_numeric.text +++ /dev/null @@ -1 +0,0 @@ -This is the A&O. © 2008 by me ŗ and λ diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/entities_symbolic.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/entities_symbolic.html deleted file mode 100644 index 258ba147..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/entities_symbolic.html +++ /dev/null @@ -1 +0,0 @@ -

    This is the A&O. © 2008 by me ŗ and λ

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/entities_symbolic.options b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/entities_symbolic.options deleted file mode 100644 index c195785f..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/entities_symbolic.options +++ /dev/null @@ -1 +0,0 @@ -:entity_output: :symbolic diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/entities_symbolic.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/entities_symbolic.text deleted file mode 100644 index 1ddf7cdd..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/entities_symbolic.text +++ /dev/null @@ -1 +0,0 @@ -This is the A&O. © 2008 by me ŗ and λ diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/greaterthan.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/greaterthan.html deleted file mode 100644 index dcce4cc3..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/greaterthan.html +++ /dev/null @@ -1 +0,0 @@ -

    2 > 1 > 0

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/greaterthan.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/greaterthan.text deleted file mode 100644 index 7dfb7f12..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/greaterthan.text +++ /dev/null @@ -1 +0,0 @@ -2 > 1 > 0 diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/lowerthan.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/lowerthan.html deleted file mode 100644 index 8ebac237..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/lowerthan.html +++ /dev/null @@ -1 +0,0 @@ -

    0 < 1 < 2

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/lowerthan.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/lowerthan.text deleted file mode 100644 index 038df8bb..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/lowerthan.text +++ /dev/null @@ -1 +0,0 @@ -0 < 1 < 2 diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/typography.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/typography.html deleted file mode 100644 index 02d1dbce..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/typography.html +++ /dev/null @@ -1,40 +0,0 @@ -

    This is… something—this too–!

    - -

    This «is» some text, « this » too!

    - -

    “Fancy quotes” are ‘cool’, even in the ’80s! -Je t’ aime. You’re a funny one! Thomas’ name -Mark’s name. “…you” -“‘Nested’ quotes are ‘possible’”, too! -‘“Otherway” is “round”’!

    - -

    ‘Opening now!’

    - -

    ’80s are really cool.

    - -

    Cluster’s Last Stand.

    - -

    Nam liber tempor -“…At vero eos et accusam”

    - -

    Single underscores should work.”

    - -

    Single asterisks should work.”

    - -

    Double underscores should work.’

    - -

    Double asterisks should work.’

    - -

    Hurrah!

    - -

    Absolutely.’

    - -

    “…some Text”

    - -

    “… some Text”

    - -

    This: “…some Text”

    - -

    This: “… some Text”

    - -

    ”[foo]” “[foo]” d “[foo]”

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/typography.options b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/typography.options deleted file mode 100644 index 4f1c17c6..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/typography.options +++ /dev/null @@ -1 +0,0 @@ -:entity_output: symbolic diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/typography.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/typography.text deleted file mode 100644 index 27e090e9..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/typography.text +++ /dev/null @@ -1,40 +0,0 @@ -This is... something---this too--! - -This <> some text, << this >> too! - -"Fancy quotes" are 'cool', even in the '80s! -Je t' aime. You're a funny one! Thomas' name -Mark's name. "...you" -"'Nested' quotes are 'possible'", too! -'"Otherway" is "round"'! - -'Opening now!' - -'80s are really cool. - -Cluster's Last Stand. - -Nam liber tempor -"...At vero eos et accusam" - -"_Single underscores_ should work." - -"*Single asterisks* should work." - -'__Double underscores__ should work.' - -'**Double asterisks** should work.' - -"_Hurrah!_" - -'__Absolutely__.' - -"...some Text" - -"... some Text" - -This: "...some Text" - -This: "... some Text" - -"\[foo]" "\[foo]" d "\[foo]" diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/typography_subst.html b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/typography_subst.html deleted file mode 100644 index 4a6c2260..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/typography_subst.html +++ /dev/null @@ -1,3 +0,0 @@ -

    This ... something---this too--!

    - -

    This <<is>> some text, << this >> too!

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/typography_subst.latex b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/typography_subst.latex deleted file mode 100644 index c7d9ba59..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/typography_subst.latex +++ /dev/null @@ -1,4 +0,0 @@ -This ... something---this too--! - -This \textless{}\textless{}is\textgreater{}\textgreater{} some text, \textless{}\textless{} this \textgreater{}\textgreater{} too! - diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/typography_subst.options b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/typography_subst.options deleted file mode 100644 index d0a03132..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/typography_subst.options +++ /dev/null @@ -1,8 +0,0 @@ -typographic_symbols: - hellip: '...' - mdash: '---' - ndash: '--' - laquo: '<<' - raquo: '>>' - laquo_space: '<< ' - raquo_space: ' >>' diff --git a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/typography_subst.text b/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/typography_subst.text deleted file mode 100644 index a3d59b37..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-2.4.0/test/testcases/span/text_substitutions/typography_subst.text +++ /dev/null @@ -1,3 +0,0 @@ -This ... something---this too--! - -This <> some text, << this >> too! diff --git a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/CONTRIBUTERS b/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/CONTRIBUTERS deleted file mode 100644 index 262ad48c..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/CONTRIBUTERS +++ /dev/null @@ -1,4 +0,0 @@ -Count Name -======= ==== - 15 Ashwin Maroli - 5 Thomas Leitner diff --git a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/COPYING b/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/COPYING deleted file mode 100644 index 417fb2ce..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/COPYING +++ /dev/null @@ -1,21 +0,0 @@ -kramdown-parser-gfm -Copyright (C) 2019 Thomas Leitner - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/VERSION b/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/VERSION deleted file mode 100644 index 9084fa2f..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/VERSION +++ /dev/null @@ -1 +0,0 @@ -1.1.0 diff --git a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/lib/kramdown-parser-gfm.rb b/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/lib/kramdown-parser-gfm.rb deleted file mode 100644 index 3861bcaa..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/lib/kramdown-parser-gfm.rb +++ /dev/null @@ -1,10 +0,0 @@ -# -*- coding: utf-8; frozen_string_literal: true -*- -# -#-- -# Copyright (C) 2019 Thomas Leitner -# -# This file is part of kramdown-parser-gfm which is licensed under the MIT. -#++ -# - -require_relative 'kramdown/parser/gfm' diff --git a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/lib/kramdown/parser/gfm.rb b/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/lib/kramdown/parser/gfm.rb deleted file mode 100644 index c803e12e..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/lib/kramdown/parser/gfm.rb +++ /dev/null @@ -1,220 +0,0 @@ -# -*- coding: utf-8; frozen_string_literal: true -*- -# -#-- -# Copyright (C) 2019 Thomas Leitner -# -# This file is part of kramdown-parser-gfm which is licensed under the MIT. -#++ -# - -require 'kramdown/options' -require 'kramdown/parser/kramdown' - -require_relative 'gfm/options' - -module Kramdown - module Parser - - # This class provides a parser implementation for the GFM dialect of Markdown. - class GFM < Kramdown::Parser::Kramdown - - VERSION = '1.1.0' - - attr_reader :paragraph_end - - def initialize(source, options) - super - @options[:auto_id_stripping] = true - @id_counter = Hash.new(-1) - - @span_parsers.delete(:line_break) if @options[:hard_wrap] - @span_parsers.delete(:typographic_syms) if @options[:gfm_quirks].include?(:no_auto_typographic) - - if @options[:gfm_quirks].include?(:paragraph_end) - atx_header_parser = :atx_header_gfm_quirk - @paragraph_end = self.class::PARAGRAPH_END_GFM - else - atx_header_parser = :atx_header_gfm - @paragraph_end = self.class::PARAGRAPH_END - end - - {codeblock_fenced: :codeblock_fenced_gfm, - atx_header: atx_header_parser}.each do |current, replacement| - i = @block_parsers.index(current) - @block_parsers.delete(current) - @block_parsers.insert(i, replacement) - end - - i = @span_parsers.index(:escaped_chars) - @span_parsers[i] = :escaped_chars_gfm if i - @span_parsers << :strikethrough_gfm - - @hard_line_break = "#{@options[:hard_wrap] ? '' : '\\'}\n" - end - - def parse - super - update_elements(@root) - end - - def update_elements(element) - element.children.map! do |child| - if child.type == :text && child.value.include?(@hard_line_break) - update_text_type(element, child) - elsif child.type == :html_element - child - elsif child.type == :header && @options[:auto_ids] && !child.attr.key?('id') - child.attr['id'] = generate_gfm_header_id(child.options[:raw_text]) - child - else - update_elements(child) - child - end - end.flatten! - end - - # Update the raw text for automatic ID generation. - def update_raw_text(item) - raw_text = +'' - - append_text = lambda do |child| - case child.type - when :text, :codespan, :math - raw_text << child.value - when :entity - raw_text << child.value.char - when :smart_quote - raw_text << ::Kramdown::Utils::Entities.entity(child.value.to_s).char - when :typographic_sym - raw_text << case child.value - when :laquo_space - "« " - when :raquo_space - " »" - else - ::Kramdown::Utils::Entities.entity(child.value.to_s).char - end - else - child.children.each { |c| append_text.call(c) } - end - end - - append_text.call(item) - item.options[:raw_text] = raw_text - end - - NON_WORD_RE = /[^\p{Word}\- \t]/.freeze - - def generate_gfm_header_id(text) - result = text.downcase - result.gsub!(NON_WORD_RE, '') - result.tr!(" \t", '-') - - @id_counter[result] += 1 - counter_result = @id_counter[result] - result << "-#{counter_result}" if counter_result > 0 - - @options[:auto_id_prefix] + result - end - - ATX_HEADER_START = /^(?\#{1,6})[\t ]+(?.*)\n/.freeze - define_parser(:atx_header_gfm, ATX_HEADER_START, nil, 'parse_atx_header') - define_parser(:atx_header_gfm_quirk, ATX_HEADER_START) - - # Copied from kramdown/parser/kramdown/header.rb, removed the first line - def parse_atx_header_gfm_quirk - text, id = parse_header_contents - text.sub!(/[\t ]#+\z/, '') && text.rstrip! - return false if text.empty? - - add_header(@src["level"].length, text, id) - true - end - - FENCED_CODEBLOCK_START = /^[ ]{0,3}[~`]{3,}/.freeze - FENCED_CODEBLOCK_MATCH = /^[ ]{0,3}(([~`]){3,})\s*?((\S+?)(?:\?\S*)?)?\s*?\n(.*?)^[ ]{0,3}\1\2*\s*?\n/m.freeze - define_parser(:codeblock_fenced_gfm, FENCED_CODEBLOCK_START, nil, 'parse_codeblock_fenced') - - STRIKETHROUGH_DELIM = /~~/.freeze - STRIKETHROUGH_MATCH = /#{STRIKETHROUGH_DELIM}(?!\s|~).*?[^\s~]#{STRIKETHROUGH_DELIM}/m.freeze - define_parser(:strikethrough_gfm, STRIKETHROUGH_MATCH, '~~') - - def parse_strikethrough_gfm - line_number = @src.current_line_number - - @src.pos += @src.matched_size - el = Element.new(:html_element, 'del', {}, category: :span, line: line_number) - @tree.children << el - - env = save_env - reset_env(src: Kramdown::Utils::StringScanner.new(@src.matched[2..-3], line_number), - text_type: :text) - parse_spans(el) - restore_env(env) - - el - end - - LIST_TYPES = [:ul, :ol].freeze - - # To handle task-lists we override the parse method for lists, converting matching text into - # checkbox input elements where necessary (as well as applying classes to the ul/ol and li - # elements). - def parse_list - super - current_list = @tree.children.select { |element| LIST_TYPES.include?(element.type) }.last - - is_tasklist = false - box_unchecked = '' - box_checked = '' - - current_list.children.each do |li| - list_items = li.children - next unless !list_items.empty? && list_items[0].type == :p - - # li -> p -> raw_text - descendant = list_items[0].children[0].value - checked = descendant.gsub!(/\A\s*\[ \]\s+/, box_unchecked) - unchecked = descendant.gsub!(/\A\s*\[x\]\s+/i, box_checked) - is_tasklist ||= checked || unchecked - - li.attr['class'] = 'task-list-item' if is_tasklist - end - - current_list.attr['class'] = 'task-list' if is_tasklist - - true - end - - ESCAPED_CHARS_GFM = /\\([\\.*_+`<>()\[\]{}#!:\|"'\$=\-~])/.freeze - define_parser(:escaped_chars_gfm, ESCAPED_CHARS_GFM, '\\\\', :parse_escaped_chars) - - PARAGRAPH_END_GFM = Regexp.union( - LAZY_END, LIST_START, ATX_HEADER_START, DEFINITION_LIST_START, - BLOCKQUOTE_START, FENCED_CODEBLOCK_START - ) - - private - - def update_text_type(element, child) - children = [] - lines = child.value.split(@hard_line_break, -1) - omit_trailing_br = (lines[-1].empty? && Kramdown::Element.category(element) == :block && - element.children[-1] == child) - - lines.each_with_index do |line, index| - new_element_options = {location: child.options[:location] + index} - children << Element.new(:text, (index > 0 ? "\n#{line}" : line), nil, new_element_options) - - if index < lines.size - 2 || (index == lines.size - 2 && !omit_trailing_br) - children << Element.new(:br, nil, nil, new_element_options) - end - end - - children - end - - end - end -end diff --git a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/lib/kramdown/parser/gfm/options.rb b/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/lib/kramdown/parser/gfm/options.rb deleted file mode 100644 index 2fcd7877..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/lib/kramdown/parser/gfm/options.rb +++ /dev/null @@ -1,60 +0,0 @@ -# -*- coding: utf-8; frozen_string_literal: true -*- -# -#-- -# Copyright (C) 2019 Thomas Leitner -# -# This file is part of kramdown-parser-gfm which is licensed under the MIT. -#++ -# - -module Kramdown - module Options - - define(:hard_wrap, Boolean, true, <<~EOF) - Interprets line breaks literally - - Insert HTML `
    ` tags inside paragraphs where the original Markdown - document had newlines (by default, Markdown ignores these newlines). - - Default: true - Used by: GFM parser - EOF - - define(:gfm_quirks, Object, [:paragraph_end], <<~EOF) do |val| - Enables a set of GFM specific quirks - - The way how GFM is transformed on Github often differs from the way - kramdown does things. Many of these differences are negligible but - others are not. - - This option allows one to enable/disable certain GFM quirks, i.e. ways - in which GFM parsing differs from kramdown parsing. - - The value has to be a list of quirk names that should be enabled, - separated by commas. Possible names are: - - * paragraph_end - - Disables the kramdown restriction that at least one blank line has to - be used after a paragraph before a new block element can be started. - - Note that if this quirk is used, lazy line wrapping does not fully - work anymore! - - * no_auto_typographic - - Disables automatic conversion of some characters into their - corresponding typographic symbols (like `--` to em-dash etc). - This helps to achieve results closer to what GitHub Flavored - Markdown produces. - - Default: paragraph_end - Used by: GFM parser - EOF - val = simple_array_validator(val, :gfm_quirks) - val.map! { |v| str_to_sym(v.to_s) } - val - end - - end -end diff --git a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/test_files.rb b/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/test_files.rb deleted file mode 100644 index 664f13dd..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/test_files.rb +++ /dev/null @@ -1,36 +0,0 @@ -# -*- coding: utf-8 -*- -# -#-- -# Copyright (C) 2019 Thomas Leitner -# -# This file is part of kramdown-parser-gfm which is licensed under the MIT. -#++ -# - -require 'minitest/autorun' -require 'kramdown' -require 'kramdown/parser/gfm' -require 'yaml' -require 'tmpdir' - -Encoding.default_external = 'utf-8' - -class TestFiles < Minitest::Test - - # Generate test methods for gfm-to-html conversion - Dir[__dir__ + '/testcases/**/*.text'].each do |text_file| - basename = text_file.sub(/\.text$/, '') - - html_file = basename + '.html' - next unless File.exist?(html_file) - - define_method('test_gfm_' + File.basename(text_file, '.*') + '_to_html') do - opts_file = basename + '.options' - opts_file = File.join(File.dirname(html_file), 'options') if !File.exist?(opts_file) - options = File.exist?(opts_file) ? YAML::load(File.read(opts_file)) : {auto_ids: false, footnote_nr: 1} - doc = Kramdown::Document.new(File.read(text_file), options.merge(input: 'GFM')) - assert_equal(File.read(html_file), doc.to_html) - end - end - -end diff --git a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/atx_header.html b/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/atx_header.html deleted file mode 100644 index 776d7a15..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/atx_header.html +++ /dev/null @@ -1,3 +0,0 @@ -

    header

    - -

    #no header

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/atx_header.text b/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/atx_header.text deleted file mode 100644 index 5e70e2b1..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/atx_header.text +++ /dev/null @@ -1,3 +0,0 @@ -# header - -#no header diff --git a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/backticks_syntax.html b/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/backticks_syntax.html deleted file mode 100644 index 305f4c5f..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/backticks_syntax.html +++ /dev/null @@ -1,14 +0,0 @@ -
    Three backticks
    -
    - -
    Four backticks
    -
    - -
    Unbalanced bottom heavy
    -
    - -
    language no space
    -
    - -
    language with space
    -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/backticks_syntax.options b/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/backticks_syntax.options deleted file mode 100644 index 72e9bc1e..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/backticks_syntax.options +++ /dev/null @@ -1 +0,0 @@ -:enable_coderay: false diff --git a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/backticks_syntax.text b/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/backticks_syntax.text deleted file mode 100644 index fb5c6111..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/backticks_syntax.text +++ /dev/null @@ -1,19 +0,0 @@ -``` -Three backticks -``` - -```` -Four backticks -```` - -``` -Unbalanced bottom heavy -`````` - -````ruby -language no space -```` - -```` ruby -language with space -```` diff --git a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/codeblock_fenced.html b/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/codeblock_fenced.html deleted file mode 100644 index 5ededae1..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/codeblock_fenced.html +++ /dev/null @@ -1,20 +0,0 @@ -

    normal

    - -
    require 'kramdown'
    -
    -Kramdown::Document.new(text).to_html
    -
    - -

    indent with tab

    - -
    ```ruby
    -require 'kramdown'
    -
    -Kramdown::Document.new(text).to_html
    -```
    -
    - -

    indent with 2 spaces

    - -
      console.log("hello");
    -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/codeblock_fenced.options b/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/codeblock_fenced.options deleted file mode 100644 index 72e9bc1e..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/codeblock_fenced.options +++ /dev/null @@ -1 +0,0 @@ -:enable_coderay: false diff --git a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/codeblock_fenced.text b/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/codeblock_fenced.text deleted file mode 100644 index 5e3e192c..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/codeblock_fenced.text +++ /dev/null @@ -1,21 +0,0 @@ -normal - -```ruby -require 'kramdown' - -Kramdown::Document.new(text).to_html -``` - -indent with tab - - ```ruby - require 'kramdown' - - Kramdown::Document.new(text).to_html - ``` - -indent with 2 spaces - - ```js - console.log("hello"); - ``` diff --git a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/hard_line_breaks.html b/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/hard_line_breaks.html deleted file mode 100644 index 1dfb2f08..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/hard_line_breaks.html +++ /dev/null @@ -1,3 +0,0 @@ -

    one
    -two
    -three

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/hard_line_breaks.text b/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/hard_line_breaks.text deleted file mode 100644 index f1287bde..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/hard_line_breaks.text +++ /dev/null @@ -1,3 +0,0 @@ -one -_two_ -three diff --git a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/hard_line_breaks_off.html b/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/hard_line_breaks_off.html deleted file mode 100644 index 4b34619e..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/hard_line_breaks_off.html +++ /dev/null @@ -1,5 +0,0 @@ -

    This is just a normal paragraph.
    -Containing a manual line break above.

    - -

    It was the best of times,
    -it was the worst of times.

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/hard_line_breaks_off.options b/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/hard_line_breaks_off.options deleted file mode 100644 index f2da6832..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/hard_line_breaks_off.options +++ /dev/null @@ -1 +0,0 @@ -:hard_wrap: false diff --git a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/hard_line_breaks_off.text b/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/hard_line_breaks_off.text deleted file mode 100644 index 29e1d485..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/hard_line_breaks_off.text +++ /dev/null @@ -1,5 +0,0 @@ -This is just a normal paragraph. -Containing a manual line break above. - -It was the best of times,\ -it was the worst of times. diff --git a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/header_ids.html b/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/header_ids.html deleted file mode 100644 index b45fe8f3..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/header_ids.html +++ /dev/null @@ -1,27 +0,0 @@ -

    test

    - -

    variable_name

    - -

    abc def öúß

    - -

    192 abc 192

    - -

    ;.;;

    - -

    variable_name

    - -

    variable_name

    - -

    ;;

    - -

    before after tab

    - -

    with code

    - -

    with  ä space

    - -

    With “smart” quotes

    - -

    with — « typographic » … symbols

    - -

    with

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/header_ids.options b/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/header_ids.options deleted file mode 100644 index 8776b552..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/header_ids.options +++ /dev/null @@ -1 +0,0 @@ -:auto_ids: true diff --git a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/header_ids.text b/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/header_ids.text deleted file mode 100644 index 0a89c0b4..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/header_ids.text +++ /dev/null @@ -1,27 +0,0 @@ -### test {#myid} - -### variable_name - -### abc def öúß - -### 192 abc 192 - -### ;.;; - -### variable_name - -### variable_name - -### ;; - -### before after tab - -### with `code` - -### with  ä space - -### With "smart" quotes - -### with --- << typographic >> ... symbols - -### with $$m=5$$ diff --git a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/header_ids_with_prefix.html b/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/header_ids_with_prefix.html deleted file mode 100644 index 4aab0728..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/header_ids_with_prefix.html +++ /dev/null @@ -1,3 +0,0 @@ -

    Header 1

    - -

    123

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/header_ids_with_prefix.options b/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/header_ids_with_prefix.options deleted file mode 100644 index f37255d5..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/header_ids_with_prefix.options +++ /dev/null @@ -1,2 +0,0 @@ -:auto_ids: true -:auto_id_prefix: hallo- diff --git a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/header_ids_with_prefix.text b/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/header_ids_with_prefix.text deleted file mode 100644 index acf09fe4..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/header_ids_with_prefix.text +++ /dev/null @@ -1,3 +0,0 @@ -# Header 1 - -# 123 diff --git a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/no_typographic.html b/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/no_typographic.html deleted file mode 100644 index beecad4c..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/no_typographic.html +++ /dev/null @@ -1,3 +0,0 @@ -

    Header with --ndash

    - -

    with --- << typographic >> ... symbols

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/no_typographic.options b/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/no_typographic.options deleted file mode 100644 index 4a83cd1b..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/no_typographic.options +++ /dev/null @@ -1 +0,0 @@ -:gfm_quirks: [no_auto_typographic] diff --git a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/no_typographic.text b/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/no_typographic.text deleted file mode 100644 index f5796511..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/no_typographic.text +++ /dev/null @@ -1,3 +0,0 @@ -### Header with --ndash - -### with --- << typographic >> ... symbols diff --git a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/paragraph_end-disabled.html b/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/paragraph_end-disabled.html deleted file mode 100644 index 41dfb3a6..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/paragraph_end-disabled.html +++ /dev/null @@ -1,31 +0,0 @@ -

    A
    - - b

    - -

    This is a list
    -- or is it

    - -

    blockquote
    -> text

    - -

    header
    -# text

    - -

    codeblock fenced
    - -puts hello world -

    - -
      -
    • -

      level 1
      -some text

      - -

      begin level 2
      -* level 2
      -* level 2

      -
    • -
    - -

    h1

    -

    ## h2
    -### h3

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/paragraph_end-disabled.options b/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/paragraph_end-disabled.options deleted file mode 100644 index 704f643d..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/paragraph_end-disabled.options +++ /dev/null @@ -1 +0,0 @@ -:gfm_quirks: [] diff --git a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/paragraph_end-disabled.text b/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/paragraph_end-disabled.text deleted file mode 100644 index 4e09e039..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/paragraph_end-disabled.text +++ /dev/null @@ -1,27 +0,0 @@ -A - - b - -This is a list -- or is it - -blockquote -> text - -header -# text - -codeblock fenced -``` -puts hello world -``` - -* level 1 - some text - - begin level 2 - * level 2 - * level 2 - -# h1 -## h2 -### h3 diff --git a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/paragraph_end.html b/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/paragraph_end.html deleted file mode 100644 index c337d61d..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/paragraph_end.html +++ /dev/null @@ -1,38 +0,0 @@ -

    A

    -
      -
    • b
    • -
    - -

    This is a list

    -
      -
    • or is it
    • -
    - -

    blockquote

    -
    -

    text

    -
    - -

    header

    -

    text

    - -

    codeblock fenced

    -
    puts hello world
    -
    - -
      -
    • -

      level 1
      -some text

      - -

      begin level 2

      -
        -
      • level 2
      • -
      • level 2
      • -
      -
    • -
    - -

    h1

    -

    h2

    -

    h3

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/paragraph_end.text b/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/paragraph_end.text deleted file mode 100644 index 4e09e039..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/paragraph_end.text +++ /dev/null @@ -1,27 +0,0 @@ -A - - b - -This is a list -- or is it - -blockquote -> text - -header -# text - -codeblock fenced -``` -puts hello world -``` - -* level 1 - some text - - begin level 2 - * level 2 - * level 2 - -# h1 -## h2 -### h3 diff --git a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/strikethrough.html b/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/strikethrough.html deleted file mode 100644 index d35158fc..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/strikethrough.html +++ /dev/null @@ -1,33 +0,0 @@ -

    This is a test

    - -

    ~This is another test~

    - -

    This is yet another test~

    - -

    ~~ This is a test of it NOT working ~~

    - -

    ~~
    -This
    -is
    -a
    -multiline
    -test
    -~~

    - -

    This is an inline strikethrough test

    - -

    This is an ~~escaped~~ strikethrough.

    - -

    This is a strikethrough with a ~ in the middle

    - -

    I don’t even~ have an extra tilde.

    - -

    This should ~~not be struck.

    - -

    This is a complex strike through *test ~~with nesting involved* here~~.

    - -

    This is a complex strike through *test with apparent nesting involved* here.

    - -

    中文

    - -

    a

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/strikethrough.text b/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/strikethrough.text deleted file mode 100644 index 0984200c..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/strikethrough.text +++ /dev/null @@ -1,33 +0,0 @@ -~~This is a test~~ - -~~~This is another test~~~ - -~~This is yet another test~~~ - -~~ This is a test of it NOT working ~~ - -~~ -This -is -a -**multiline** -test -~~ - -This is an ~~_inline_ **strikethrough**~~ test - -This is an \~~escaped~~ strikethrough. - -This is a ~~strikethrough with a ~ in the middle~~ - -I ~~don't even~~~ have an extra tilde. - -This should ~~not be struck. - -This ~~is a complex *strike* through *test ~~with nesting~~ involved* here~~. - -This ~~is a complex *strike* through *test~~ with apparent nesting ~~involved* here~~. - -~~中文~~ - -~~a~~ diff --git a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/task_list.html b/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/task_list.html deleted file mode 100644 index a11b553b..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/task_list.html +++ /dev/null @@ -1,40 +0,0 @@ -

    unordered task list

    - -
      -
    • first ul task item
    • -
    • second ul task item
    • -
    • third ul task item
    • -
    • fourth ul task item [ ] next
    • -
    - -

    unordered list

    - -
      -
    • -
      -

      first ul item

      -
      -
    • -
    • -
    • -
      test
      -
      -
    • -
    • second ul item
    • -
    - -

    ordered list

    - -
      -
    1. first ol item
    2. -
    3. second ol item
    4. -
    - -

    ordered task list

    - -
      -
    1. first ol task item
    2. -
    3. second ol task item
    4. -
    5. third ol task item
    6. -
    7. fourth ol task item
    8. -
    diff --git a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/task_list.text b/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/task_list.text deleted file mode 100644 index f6ade2fa..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/task_list.text +++ /dev/null @@ -1,26 +0,0 @@ -unordered task list - -- [ ] first ul task item -- [x] second ul task item -- [X] third ul task item -- [ ] fourth ul task item [ ] next - -unordered list - -- > first ul item -- -- - test -- second ul item - -ordered list - -1. first ol item -2. second ol item - -ordered task list - -1. [ ] first ol task item -2. [x] second ol task item -3. [X] third ol task item -4. [ ] fourth ol task item diff --git a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/two_para_hard_line_breaks.html b/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/two_para_hard_line_breaks.html deleted file mode 100644 index d5ba2e41..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/two_para_hard_line_breaks.html +++ /dev/null @@ -1,4 +0,0 @@ -

    This is just a normal paragraph.
    -Containing a line break.

    - -

    Another paragraph.

    diff --git a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/two_para_hard_line_breaks.text b/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/two_para_hard_line_breaks.text deleted file mode 100644 index 6b3d7c55..00000000 --- a/bundle/ruby/3.2.0/gems/kramdown-parser-gfm-1.1.0/test/testcases/two_para_hard_line_breaks.text +++ /dev/null @@ -1,4 +0,0 @@ -This is just a normal paragraph. -Containing a line break. - -Another paragraph. diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/LICENSE.txt b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/LICENSE.txt deleted file mode 100644 index a6497a4b..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/LICENSE.txt +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2017 Fumiaki MATSUSHIMA - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/README.md b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/README.md deleted file mode 100644 index 80b6e1cc..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/README.md +++ /dev/null @@ -1,88 +0,0 @@ -# LanguageServer::Protocol - -A Language Server Protocol SDK for Ruby. - -[![Gem Version](https://badge.fury.io/rb/language_server-protocol.svg)](https://badge.fury.io/rb/language_server-protocol) - -## Installation - -Add this line to your application's Gemfile: - -```ruby -gem 'language_server-protocol' -``` - -And then execute: - - $ bundle - -Or install it yourself as: - - $ gem install language_server-protocol - -## Usage - -Currently, this gem supports only stdio as transport layer out of box. - -```ruby -require "language_server-protocol" - -LSP = LanguageServer::Protocol -writer = LSP::Transport::Stdio::Writer.new -reader = LSP::Transport::Stdio::Reader.new - -subscribers = { - initialize: -> { - LSP::Interface::InitializeResult.new( - capabilities: LSP::Interface::ServerCapabilities.new( - text_document_sync: LSP::Interface::TextDocumentSyncOptions.new( - change: LSP::Constant::TextDocumentSyncKind::FULL - ), - completion_provider: LSP::Interface::CompletionOptions.new( - resolve_provider: true, - trigger_characters: %w(.) - ), - definition_provider: true - ) - ) - } -} - -reader.read do |request| - result = subscribers[request[:method].to_sym].call - writer.write(id: request[:id], result: result) - exit -end -``` - -You can use any IO object as transport layer: - -```ruby -io = StringIO.new -writer = LSP::Transport::Io::Writer.new(io) -reader = LSP::Transport::Io::Reader.new(io) -``` - -## Versioning - -language_server-protocol gem does NOT use semantic versioning. -This gem versions are structured as `x.y.z.t`. -`x.y.z` indicates the [Language server protocol](https://github.com/Microsoft/language-server-protocol/) version and `t` is a monotonically increasing number. - -## Development - -After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment. - -To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org). - -## Contributing - -Bug reports and pull requests are welcome on GitHub at https://github.com/mtsmfm/language_server-protocol-ruby. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct. - -## License - -The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT). - -## Code of Conduct - -Everyone interacting in the LanguageServer::Protocol project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/mtsmfm/language_server-protocol/blob/master/CODE_OF_CONDUCT.md). diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server-protocol.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server-protocol.rb deleted file mode 100644 index 6c000eb6..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server-protocol.rb +++ /dev/null @@ -1 +0,0 @@ -require "language_server/protocol" diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol.rb deleted file mode 100644 index fd910328..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol.rb +++ /dev/null @@ -1,4 +0,0 @@ -require "language_server/protocol/version" -require "language_server/protocol/constant" -require "language_server/protocol/interface" -require "language_server/protocol/transport" diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant.rb deleted file mode 100644 index f9f6046d..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant.rb +++ /dev/null @@ -1,77 +0,0 @@ -module LanguageServer - module Protocol - module Constant - autoload :CodeActionKind, "language_server/protocol/constant/code_action_kind" - autoload :CodeActionTriggerKind, "language_server/protocol/constant/code_action_trigger_kind" - autoload :CompletionItemKind, "language_server/protocol/constant/completion_item_kind" - autoload :CompletionItemTag, "language_server/protocol/constant/completion_item_tag" - autoload :CompletionTriggerKind, "language_server/protocol/constant/completion_trigger_kind" - autoload :DiagnosticSeverity, "language_server/protocol/constant/diagnostic_severity" - autoload :DiagnosticTag, "language_server/protocol/constant/diagnostic_tag" - autoload :DocumentDiagnosticReportKind, "language_server/protocol/constant/document_diagnostic_report_kind" - autoload :DocumentHighlightKind, "language_server/protocol/constant/document_highlight_kind" - autoload :ErrorCodes, "language_server/protocol/constant/error_codes" - autoload :FailureHandlingKind, "language_server/protocol/constant/failure_handling_kind" - autoload :FileChangeType, "language_server/protocol/constant/file_change_type" - autoload :FileOperationPatternKind, "language_server/protocol/constant/file_operation_pattern_kind" - autoload :FoldingRangeKind, "language_server/protocol/constant/folding_range_kind" - autoload :InitializeErrorCodes, "language_server/protocol/constant/initialize_error_codes" - autoload :InlayHintKind, "language_server/protocol/constant/inlay_hint_kind" - autoload :InsertTextFormat, "language_server/protocol/constant/insert_text_format" - autoload :InsertTextMode, "language_server/protocol/constant/insert_text_mode" - autoload :MarkupKind, "language_server/protocol/constant/markup_kind" - autoload :MessageType, "language_server/protocol/constant/message_type" - autoload :MonikerKind, "language_server/protocol/constant/moniker_kind" - autoload :NotebookCellKind, "language_server/protocol/constant/notebook_cell_kind" - autoload :PositionEncodingKind, "language_server/protocol/constant/position_encoding_kind" - autoload :PrepareSupportDefaultBehavior, "language_server/protocol/constant/prepare_support_default_behavior" - autoload :ResourceOperationKind, "language_server/protocol/constant/resource_operation_kind" - autoload :SemanticTokenModifiers, "language_server/protocol/constant/semantic_token_modifiers" - autoload :SemanticTokenTypes, "language_server/protocol/constant/semantic_token_types" - autoload :SignatureHelpTriggerKind, "language_server/protocol/constant/signature_help_trigger_kind" - autoload :SymbolKind, "language_server/protocol/constant/symbol_kind" - autoload :SymbolTag, "language_server/protocol/constant/symbol_tag" - autoload :TextDocumentSaveReason, "language_server/protocol/constant/text_document_save_reason" - autoload :TextDocumentSyncKind, "language_server/protocol/constant/text_document_sync_kind" - autoload :TokenFormat, "language_server/protocol/constant/token_format" - autoload :UniquenessLevel, "language_server/protocol/constant/uniqueness_level" - autoload :WatchKind, "language_server/protocol/constant/watch_kind" - - require "language_server/protocol/constant/code_action_kind" - require "language_server/protocol/constant/code_action_trigger_kind" - require "language_server/protocol/constant/completion_item_kind" - require "language_server/protocol/constant/completion_item_tag" - require "language_server/protocol/constant/completion_trigger_kind" - require "language_server/protocol/constant/diagnostic_severity" - require "language_server/protocol/constant/diagnostic_tag" - require "language_server/protocol/constant/document_diagnostic_report_kind" - require "language_server/protocol/constant/document_highlight_kind" - require "language_server/protocol/constant/error_codes" - require "language_server/protocol/constant/failure_handling_kind" - require "language_server/protocol/constant/file_change_type" - require "language_server/protocol/constant/file_operation_pattern_kind" - require "language_server/protocol/constant/folding_range_kind" - require "language_server/protocol/constant/initialize_error_codes" - require "language_server/protocol/constant/inlay_hint_kind" - require "language_server/protocol/constant/insert_text_format" - require "language_server/protocol/constant/insert_text_mode" - require "language_server/protocol/constant/markup_kind" - require "language_server/protocol/constant/message_type" - require "language_server/protocol/constant/moniker_kind" - require "language_server/protocol/constant/notebook_cell_kind" - require "language_server/protocol/constant/position_encoding_kind" - require "language_server/protocol/constant/prepare_support_default_behavior" - require "language_server/protocol/constant/resource_operation_kind" - require "language_server/protocol/constant/semantic_token_modifiers" - require "language_server/protocol/constant/semantic_token_types" - require "language_server/protocol/constant/signature_help_trigger_kind" - require "language_server/protocol/constant/symbol_kind" - require "language_server/protocol/constant/symbol_tag" - require "language_server/protocol/constant/text_document_save_reason" - require "language_server/protocol/constant/text_document_sync_kind" - require "language_server/protocol/constant/token_format" - require "language_server/protocol/constant/uniqueness_level" - require "language_server/protocol/constant/watch_kind" - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/code_action_kind.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/code_action_kind.rb deleted file mode 100644 index 06d2f417..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/code_action_kind.rb +++ /dev/null @@ -1,85 +0,0 @@ -module LanguageServer - module Protocol - module Constant - # - # The kind of a code action. - # - # Kinds are a hierarchical list of identifiers separated by `.`, - # e.g. `"refactor.extract.function"`. - # - # The set of kinds is open and client needs to announce the kinds it supports - # to the server during initialization. - # A set of predefined code action kinds. - # - module CodeActionKind - # - # Empty kind. - # - EMPTY = '' - # - # Base kind for quickfix actions: 'quickfix'. - # - QUICK_FIX = 'quickfix' - # - # Base kind for refactoring actions: 'refactor'. - # - REFACTOR = 'refactor' - # - # Base kind for refactoring extraction actions: 'refactor.extract'. - # - # Example extract actions: - # - # - Extract method - # - Extract function - # - Extract variable - # - Extract interface from class - # - ... - # - REFACTOR_EXTRACT = 'refactor.extract' - # - # Base kind for refactoring inline actions: 'refactor.inline'. - # - # Example inline actions: - # - # - Inline function - # - Inline variable - # - Inline constant - # - ... - # - REFACTOR_INLINE = 'refactor.inline' - # - # Base kind for refactoring rewrite actions: 'refactor.rewrite'. - # - # Example rewrite actions: - # - # - Convert JavaScript function to class - # - Add or remove parameter - # - Encapsulate field - # - Make method static - # - Move method to base class - # - ... - # - REFACTOR_REWRITE = 'refactor.rewrite' - # - # Base kind for source actions: `source`. - # - # Source code actions apply to the entire file. - # - SOURCE = 'source' - # - # Base kind for an organize imports source action: - # `source.organizeImports`. - # - SOURCE_ORGANIZE_IMPORTS = 'source.organizeImports' - # - # Base kind for a 'fix all' source action: `source.fixAll`. - # - # 'Fix all' actions automatically fix errors that have a clear fix that - # do not require user input. They should not suppress errors or perform - # unsafe fixes such as generating new types or classes. - # - SOURCE_FIX_ALL = 'source.fixAll' - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/code_action_trigger_kind.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/code_action_trigger_kind.rb deleted file mode 100644 index fc7ee17b..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/code_action_trigger_kind.rb +++ /dev/null @@ -1,22 +0,0 @@ -module LanguageServer - module Protocol - module Constant - # - # The reason why code actions were requested. - # - module CodeActionTriggerKind - # - # Code actions were explicitly requested by the user or by an extension. - # - INVOKED = 1 - # - # Code actions were requested automatically. - # - # This typically happens when current selection in a file changes, but can - # also be triggered when file content changes. - # - AUTOMATIC = 2 - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/completion_item_kind.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/completion_item_kind.rb deleted file mode 100644 index 8a92a9d4..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/completion_item_kind.rb +++ /dev/null @@ -1,36 +0,0 @@ -module LanguageServer - module Protocol - module Constant - # - # The kind of a completion entry. - # - module CompletionItemKind - TEXT = 1 - METHOD = 2 - FUNCTION = 3 - CONSTRUCTOR = 4 - FIELD = 5 - VARIABLE = 6 - CLASS = 7 - INTERFACE = 8 - MODULE = 9 - PROPERTY = 10 - UNIT = 11 - VALUE = 12 - ENUM = 13 - KEYWORD = 14 - SNIPPET = 15 - COLOR = 16 - FILE = 17 - REFERENCE = 18 - FOLDER = 19 - ENUM_MEMBER = 20 - CONSTANT = 21 - STRUCT = 22 - EVENT = 23 - OPERATOR = 24 - TYPE_PARAMETER = 25 - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/completion_item_tag.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/completion_item_tag.rb deleted file mode 100644 index bdab62e7..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/completion_item_tag.rb +++ /dev/null @@ -1,16 +0,0 @@ -module LanguageServer - module Protocol - module Constant - # - # Completion item tags are extra annotations that tweak the rendering of a - # completion item. - # - module CompletionItemTag - # - # Render a completion as obsolete, usually using a strike-out. - # - DEPRECATED = 1 - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/completion_trigger_kind.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/completion_trigger_kind.rb deleted file mode 100644 index 3deef326..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/completion_trigger_kind.rb +++ /dev/null @@ -1,26 +0,0 @@ -module LanguageServer - module Protocol - module Constant - # - # How a completion was triggered - # - module CompletionTriggerKind - # - # Completion was triggered by typing an identifier (24x7 code - # complete), manual invocation (e.g Ctrl+Space) or via API. - # - INVOKED = 1 - # - # Completion was triggered by a trigger character specified by - # the `triggerCharacters` properties of the - # `CompletionRegistrationOptions`. - # - TRIGGER_CHARACTER = 2 - # - # Completion was re-triggered as the current completion list is incomplete. - # - TRIGGER_FOR_INCOMPLETE_COMPLETIONS = 3 - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/diagnostic_severity.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/diagnostic_severity.rb deleted file mode 100644 index f7dd6c47..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/diagnostic_severity.rb +++ /dev/null @@ -1,24 +0,0 @@ -module LanguageServer - module Protocol - module Constant - module DiagnosticSeverity - # - # Reports an error. - # - ERROR = 1 - # - # Reports a warning. - # - WARNING = 2 - # - # Reports an information. - # - INFORMATION = 3 - # - # Reports a hint. - # - HINT = 4 - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/diagnostic_tag.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/diagnostic_tag.rb deleted file mode 100644 index 8b6b1048..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/diagnostic_tag.rb +++ /dev/null @@ -1,24 +0,0 @@ -module LanguageServer - module Protocol - module Constant - # - # The diagnostic tags. - # - module DiagnosticTag - # - # Unused or unnecessary code. - # - # Clients are allowed to render diagnostics with this tag faded out - # instead of having an error squiggle. - # - UNNECESSARY = 1 - # - # Deprecated or obsolete code. - # - # Clients are allowed to rendered diagnostics with this tag strike through. - # - DEPRECATED = 2 - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/document_diagnostic_report_kind.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/document_diagnostic_report_kind.rb deleted file mode 100644 index f389f9d7..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/document_diagnostic_report_kind.rb +++ /dev/null @@ -1,21 +0,0 @@ -module LanguageServer - module Protocol - module Constant - # - # The document diagnostic report kinds. - # - module DocumentDiagnosticReportKind - # - # A diagnostic report with a full - # set of problems. - # - FULL = 'full' - # - # A report indicating that the last - # returned report is still accurate. - # - UNCHANGED = 'unchanged' - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/document_highlight_kind.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/document_highlight_kind.rb deleted file mode 100644 index e1430249..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/document_highlight_kind.rb +++ /dev/null @@ -1,23 +0,0 @@ -module LanguageServer - module Protocol - module Constant - # - # A document highlight kind. - # - module DocumentHighlightKind - # - # A textual occurrence. - # - TEXT = 1 - # - # Read-access of a symbol, like reading a variable. - # - READ = 2 - # - # Write-access of a symbol, like writing to a variable. - # - WRITE = 3 - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/error_codes.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/error_codes.rb deleted file mode 100644 index 23b309f0..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/error_codes.rb +++ /dev/null @@ -1,73 +0,0 @@ -module LanguageServer - module Protocol - module Constant - module ErrorCodes - PARSE_ERROR = -32700 - INVALID_REQUEST = -32600 - METHOD_NOT_FOUND = -32601 - INVALID_PARAMS = -32602 - INTERNAL_ERROR = -32603 - # - # This is the start range of JSON-RPC reserved error codes. - # It doesn't denote a real error code. No LSP error codes should - # be defined between the start and end range. For backwards - # compatibility the `ServerNotInitialized` and the `UnknownErrorCode` - # are left in the range. - # - JSONRPC_RESERVED_ERROR_RANGE_START = -32099 - SERVER_ERROR_START = JSONRPC_RESERVED_ERROR_RANGE_START - # - # Error code indicating that a server received a notification or - # request before the server has received the `initialize` request. - # - SERVER_NOT_INITIALIZED = -32002 - UNKNOWN_ERROR_CODE = -32001 - # - # This is the end range of JSON-RPC reserved error codes. - # It doesn't denote a real error code. - # - JSONRPC_RESERVED_ERROR_RANGE_END = -32000 - SERVER_ERROR_END = JSONRPC_RESERVED_ERROR_RANGE_END - # - # This is the start range of LSP reserved error codes. - # It doesn't denote a real error code. - # - LSP_RESERVED_ERROR_RANGE_START = -32899 - # - # A request failed but it was syntactically correct, e.g the - # method name was known and the parameters were valid. The error - # message should contain human readable information about why - # the request failed. - # - REQUEST_FAILED = -32803 - # - # The server cancelled the request. This error code should - # only be used for requests that explicitly support being - # server cancellable. - # - SERVER_CANCELLED = -32802 - # - # The server detected that the content of a document got - # modified outside normal conditions. A server should - # NOT send this error code if it detects a content change - # in it unprocessed messages. The result even computed - # on an older state might still be useful for the client. - # - # If a client decides that a result is not of any use anymore - # the client should cancel the request. - # - CONTENT_MODIFIED = -32801 - # - # The client has canceled a request and a server as detected - # the cancel. - # - REQUEST_CANCELLED = -32800 - # - # This is the end range of LSP reserved error codes. - # It doesn't denote a real error code. - # - LSP_RESERVED_ERROR_RANGE_END = -32800 - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/failure_handling_kind.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/failure_handling_kind.rb deleted file mode 100644 index 3b6d34dd..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/failure_handling_kind.rb +++ /dev/null @@ -1,30 +0,0 @@ -module LanguageServer - module Protocol - module Constant - module FailureHandlingKind - # - # Applying the workspace change is simply aborted if one of the changes - # provided fails. All operations executed before the failing operation - # stay executed. - # - ABORT = 'abort' - # - # All operations are executed transactional. That means they either all - # succeed or no changes at all are applied to the workspace. - # - TRANSACTIONAL = 'transactional' - # - # If the workspace edit contains only textual file changes they are - # executed transactional. If resource changes (create, rename or delete - # file) are part of the change the failure handling strategy is abort. - # - TEXT_ONLY_TRANSACTIONAL = 'textOnlyTransactional' - # - # The client tries to undo the operations already executed. But there is no - # guarantee that this is succeeding. - # - UNDO = 'undo' - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/file_change_type.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/file_change_type.rb deleted file mode 100644 index fb1d019e..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/file_change_type.rb +++ /dev/null @@ -1,23 +0,0 @@ -module LanguageServer - module Protocol - module Constant - # - # The file event type. - # - module FileChangeType - # - # The file got created. - # - CREATED = 1 - # - # The file got changed. - # - CHANGED = 2 - # - # The file got deleted. - # - DELETED = 3 - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/file_operation_pattern_kind.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/file_operation_pattern_kind.rb deleted file mode 100644 index 10e78858..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/file_operation_pattern_kind.rb +++ /dev/null @@ -1,20 +0,0 @@ -module LanguageServer - module Protocol - module Constant - # - # A pattern kind describing if a glob pattern matches a file a folder or - # both. - # - module FileOperationPatternKind - # - # The pattern matches a file only. - # - FILE = 'file' - # - # The pattern matches a folder only. - # - FOLDER = 'folder' - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/folding_range_kind.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/folding_range_kind.rb deleted file mode 100644 index 72f42176..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/folding_range_kind.rb +++ /dev/null @@ -1,24 +0,0 @@ -module LanguageServer - module Protocol - module Constant - # - # A set of predefined range kinds. - # The type is a string since the value set is extensible - # - module FoldingRangeKind - # - # Folding range for a comment - # - COMMENT = 'comment' - # - # Folding range for imports or includes - # - IMPORTS = 'imports' - # - # Folding range for a region (e.g. `#region`) - # - REGION = 'region' - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/initialize_error_codes.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/initialize_error_codes.rb deleted file mode 100644 index bc2aceaf..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/initialize_error_codes.rb +++ /dev/null @@ -1,16 +0,0 @@ -module LanguageServer - module Protocol - module Constant - # - # Known error codes for an `InitializeErrorCodes`; - # - module InitializeErrorCodes - # - # If the protocol version provided by the client can't be handled by - # the server. - # - UNKNOWN_PROTOCOL_VERSION = 1 - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/inlay_hint_kind.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/inlay_hint_kind.rb deleted file mode 100644 index d4d9ec99..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/inlay_hint_kind.rb +++ /dev/null @@ -1,19 +0,0 @@ -module LanguageServer - module Protocol - module Constant - # - # Inlay hint kinds. - # - module InlayHintKind - # - # An inlay hint that for a type annotation. - # - TYPE = 1 - # - # An inlay hint that is for a parameter. - # - PARAMETER = 2 - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/insert_text_format.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/insert_text_format.rb deleted file mode 100644 index 5eb4d6ca..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/insert_text_format.rb +++ /dev/null @@ -1,25 +0,0 @@ -module LanguageServer - module Protocol - module Constant - # - # Defines whether the insert text in a completion item should be interpreted as - # plain text or a snippet. - # - module InsertTextFormat - # - # The primary text to be inserted is treated as a plain string. - # - PLAIN_TEXT = 1 - # - # The primary text to be inserted is treated as a snippet. - # - # A snippet can define tab stops and placeholders with `$1`, `$2` - # and `${3:foo}`. `$0` defines the final tab stop, it defaults to - # the end of the snippet. Placeholders with equal identifiers are linked, - # that is typing in one will update others too. - # - SNIPPET = 2 - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/insert_text_mode.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/insert_text_mode.rb deleted file mode 100644 index 09c7e685..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/insert_text_mode.rb +++ /dev/null @@ -1,30 +0,0 @@ -module LanguageServer - module Protocol - module Constant - # - # How whitespace and indentation is handled during completion - # item insertion. - # - module InsertTextMode - # - # The insertion or replace strings is taken as it is. If the - # value is multi line the lines below the cursor will be - # inserted using the indentation defined in the string value. - # The client will not apply any kind of adjustments to the - # string. - # - AS_IS = 1 - # - # The editor adjusts leading whitespace of new lines so that - # they match the indentation up to the cursor of the line for - # which the item is accepted. - # - # Consider a line like this: <2tabs><3tabs>foo. Accepting a - # multi line completion item is indented using 2 tabs and all - # following lines inserted will be indented using 2 tabs as well. - # - ADJUST_INDENTATION = 2 - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/markup_kind.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/markup_kind.rb deleted file mode 100644 index 58d13542..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/markup_kind.rb +++ /dev/null @@ -1,23 +0,0 @@ -module LanguageServer - module Protocol - module Constant - # - # Describes the content type that a client supports in various - # result literals like `Hover`, `ParameterInfo` or `CompletionItem`. - # - # Please note that `MarkupKinds` must not start with a `$`. This kinds - # are reserved for internal usage. - # - module MarkupKind - # - # Plain text is supported as a content format - # - PLAIN_TEXT = 'plaintext' - # - # Markdown is supported as a content format - # - MARKDOWN = 'markdown' - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/message_type.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/message_type.rb deleted file mode 100644 index 873df8de..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/message_type.rb +++ /dev/null @@ -1,24 +0,0 @@ -module LanguageServer - module Protocol - module Constant - module MessageType - # - # An error message. - # - ERROR = 1 - # - # A warning message. - # - WARNING = 2 - # - # An information message. - # - INFO = 3 - # - # A log message. - # - LOG = 4 - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/moniker_kind.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/moniker_kind.rb deleted file mode 100644 index 8e2c466e..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/moniker_kind.rb +++ /dev/null @@ -1,24 +0,0 @@ -module LanguageServer - module Protocol - module Constant - # - # The moniker kind. - # - module MonikerKind - # - # The moniker represent a symbol that is imported into a project - # - IMPORT = 'import' - # - # The moniker represents a symbol that is exported from a project - # - EXPORT = 'export' - # - # The moniker represents a symbol that is local to a project (e.g. a local - # variable of a function, a class not visible outside the project, ...) - # - LOCAL = 'local' - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/notebook_cell_kind.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/notebook_cell_kind.rb deleted file mode 100644 index 0755c968..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/notebook_cell_kind.rb +++ /dev/null @@ -1,19 +0,0 @@ -module LanguageServer - module Protocol - module Constant - # - # A notebook cell kind. - # - module NotebookCellKind - # - # A markup-cell is formatted source that is used for display. - # - MARKUP = 1 - # - # A code-cell is source code. - # - CODE = 2 - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/position_encoding_kind.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/position_encoding_kind.rb deleted file mode 100644 index 03045e01..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/position_encoding_kind.rb +++ /dev/null @@ -1,32 +0,0 @@ -module LanguageServer - module Protocol - module Constant - # - # A type indicating how positions are encoded, - # specifically what column offsets mean. - # A set of predefined position encoding kinds. - # - module PositionEncodingKind - # - # Character offsets count UTF-8 code units (e.g bytes). - # - UTF8 = 'utf-8' - # - # Character offsets count UTF-16 code units. - # - # This is the default and must always be supported - # by servers - # - UTF16 = 'utf-16' - # - # Character offsets count UTF-32 code units. - # - # Implementation note: these are the same as Unicode code points, - # so this `PositionEncodingKind` may also be used for an - # encoding-agnostic representation of character offsets. - # - UTF32 = 'utf-32' - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/prepare_support_default_behavior.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/prepare_support_default_behavior.rb deleted file mode 100644 index 5ab1947f..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/prepare_support_default_behavior.rb +++ /dev/null @@ -1,13 +0,0 @@ -module LanguageServer - module Protocol - module Constant - module PrepareSupportDefaultBehavior - # - # The client's default behavior is to select the identifier - # according to the language's syntax rule. - # - IDENTIFIER = 1 - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/resource_operation_kind.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/resource_operation_kind.rb deleted file mode 100644 index 1c9d2d45..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/resource_operation_kind.rb +++ /dev/null @@ -1,23 +0,0 @@ -module LanguageServer - module Protocol - module Constant - # - # The kind of resource operations supported by the client. - # - module ResourceOperationKind - # - # Supports creating new files and folders. - # - CREATE = 'create' - # - # Supports renaming existing files and folders. - # - RENAME = 'rename' - # - # Supports deleting existing files and folders. - # - DELETE = 'delete' - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/semantic_token_modifiers.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/semantic_token_modifiers.rb deleted file mode 100644 index d5da2a9d..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/semantic_token_modifiers.rb +++ /dev/null @@ -1,18 +0,0 @@ -module LanguageServer - module Protocol - module Constant - module SemanticTokenModifiers - DECLARATION = 'declaration' - DEFINITION = 'definition' - READONLY = 'readonly' - STATIC = 'static' - DEPRECATED = 'deprecated' - ABSTRACT = 'abstract' - ASYNC = 'async' - MODIFICATION = 'modification' - DOCUMENTATION = 'documentation' - DEFAULT_LIBRARY = 'defaultLibrary' - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/semantic_token_types.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/semantic_token_types.rb deleted file mode 100644 index 98d0425a..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/semantic_token_types.rb +++ /dev/null @@ -1,35 +0,0 @@ -module LanguageServer - module Protocol - module Constant - module SemanticTokenTypes - NAMESPACE = 'namespace' - # - # Represents a generic type. Acts as a fallback for types which - # can't be mapped to a specific type like class or enum. - # - TYPE = 'type' - CLASS = 'class' - ENUM = 'enum' - INTERFACE = 'interface' - STRUCT = 'struct' - TYPE_PARAMETER = 'typeParameter' - PARAMETER = 'parameter' - VARIABLE = 'variable' - PROPERTY = 'property' - ENUM_MEMBER = 'enumMember' - EVENT = 'event' - FUNCTION = 'function' - METHOD = 'method' - MACRO = 'macro' - KEYWORD = 'keyword' - MODIFIER = 'modifier' - COMMENT = 'comment' - STRING = 'string' - NUMBER = 'number' - REGEXP = 'regexp' - OPERATOR = 'operator' - DECORATOR = 'decorator' - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/signature_help_trigger_kind.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/signature_help_trigger_kind.rb deleted file mode 100644 index 6298eca7..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/signature_help_trigger_kind.rb +++ /dev/null @@ -1,24 +0,0 @@ -module LanguageServer - module Protocol - module Constant - # - # How a signature help was triggered. - # - module SignatureHelpTriggerKind - # - # Signature help was invoked manually by the user or by a command. - # - INVOKED = 1 - # - # Signature help was triggered by a trigger character. - # - TRIGGER_CHARACTER = 2 - # - # Signature help was triggered by the cursor moving or by the document - # content changing. - # - CONTENT_CHANGE = 3 - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/symbol_kind.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/symbol_kind.rb deleted file mode 100644 index 4a343cab..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/symbol_kind.rb +++ /dev/null @@ -1,37 +0,0 @@ -module LanguageServer - module Protocol - module Constant - # - # A symbol kind. - # - module SymbolKind - FILE = 1 - MODULE = 2 - NAMESPACE = 3 - PACKAGE = 4 - CLASS = 5 - METHOD = 6 - PROPERTY = 7 - FIELD = 8 - CONSTRUCTOR = 9 - ENUM = 10 - INTERFACE = 11 - FUNCTION = 12 - VARIABLE = 13 - CONSTANT = 14 - STRING = 15 - NUMBER = 16 - BOOLEAN = 17 - ARRAY = 18 - OBJECT = 19 - KEY = 20 - NULL = 21 - ENUM_MEMBER = 22 - STRUCT = 23 - EVENT = 24 - OPERATOR = 25 - TYPE_PARAMETER = 26 - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/symbol_tag.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/symbol_tag.rb deleted file mode 100644 index da56df53..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/symbol_tag.rb +++ /dev/null @@ -1,15 +0,0 @@ -module LanguageServer - module Protocol - module Constant - # - # Symbol tags are extra annotations that tweak the rendering of a symbol. - # - module SymbolTag - # - # Render a symbol as obsolete, usually using a strike-out. - # - DEPRECATED = 1 - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/text_document_save_reason.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/text_document_save_reason.rb deleted file mode 100644 index 42b17052..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/text_document_save_reason.rb +++ /dev/null @@ -1,24 +0,0 @@ -module LanguageServer - module Protocol - module Constant - # - # Represents reasons why a text document is saved. - # - module TextDocumentSaveReason - # - # Manually triggered, e.g. by the user pressing save, by starting - # debugging, or by an API call. - # - MANUAL = 1 - # - # Automatic after a delay. - # - AFTER_DELAY = 2 - # - # When the editor lost focus. - # - FOCUS_OUT = 3 - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/text_document_sync_kind.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/text_document_sync_kind.rb deleted file mode 100644 index ef10dc16..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/text_document_sync_kind.rb +++ /dev/null @@ -1,27 +0,0 @@ -module LanguageServer - module Protocol - module Constant - # - # Defines how the host (editor) should sync document changes to the language - # server. - # - module TextDocumentSyncKind - # - # Documents should not be synced at all. - # - NONE = 0 - # - # Documents are synced by always sending the full content - # of the document. - # - FULL = 1 - # - # Documents are synced by sending the full content on open. - # After that only incremental updates to the document are - # sent. - # - INCREMENTAL = 2 - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/token_format.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/token_format.rb deleted file mode 100644 index 4177d196..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/token_format.rb +++ /dev/null @@ -1,9 +0,0 @@ -module LanguageServer - module Protocol - module Constant - module TokenFormat - RELATIVE = 'relative' - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/uniqueness_level.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/uniqueness_level.rb deleted file mode 100644 index 31d62668..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/uniqueness_level.rb +++ /dev/null @@ -1,31 +0,0 @@ -module LanguageServer - module Protocol - module Constant - # - # Moniker uniqueness level to define scope of the moniker. - # - module UniquenessLevel - # - # The moniker is only unique inside a document - # - DOCUMENT = 'document' - # - # The moniker is unique inside a project for which a dump got created - # - PROJECT = 'project' - # - # The moniker is unique inside the group to which a project belongs - # - GROUP = 'group' - # - # The moniker is unique inside the moniker scheme. - # - SCHEME = 'scheme' - # - # The moniker is globally unique - # - GLOBAL = 'global' - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/watch_kind.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/watch_kind.rb deleted file mode 100644 index 415c9b6a..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/constant/watch_kind.rb +++ /dev/null @@ -1,20 +0,0 @@ -module LanguageServer - module Protocol - module Constant - module WatchKind - # - # Interested in create events. - # - CREATE = 1 - # - # Interested in change events - # - CHANGE = 2 - # - # Interested in delete events - # - DELETE = 4 - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface.rb deleted file mode 100644 index 68c1b57e..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface.rb +++ /dev/null @@ -1,631 +0,0 @@ -module LanguageServer - module Protocol - module Interface - autoload :AnnotatedTextEdit, "language_server/protocol/interface/annotated_text_edit" - autoload :ApplyWorkspaceEditParams, "language_server/protocol/interface/apply_workspace_edit_params" - autoload :ApplyWorkspaceEditResult, "language_server/protocol/interface/apply_workspace_edit_result" - autoload :CallHierarchyClientCapabilities, "language_server/protocol/interface/call_hierarchy_client_capabilities" - autoload :CallHierarchyIncomingCall, "language_server/protocol/interface/call_hierarchy_incoming_call" - autoload :CallHierarchyIncomingCallsParams, "language_server/protocol/interface/call_hierarchy_incoming_calls_params" - autoload :CallHierarchyItem, "language_server/protocol/interface/call_hierarchy_item" - autoload :CallHierarchyOptions, "language_server/protocol/interface/call_hierarchy_options" - autoload :CallHierarchyOutgoingCall, "language_server/protocol/interface/call_hierarchy_outgoing_call" - autoload :CallHierarchyOutgoingCallsParams, "language_server/protocol/interface/call_hierarchy_outgoing_calls_params" - autoload :CallHierarchyPrepareParams, "language_server/protocol/interface/call_hierarchy_prepare_params" - autoload :CallHierarchyRegistrationOptions, "language_server/protocol/interface/call_hierarchy_registration_options" - autoload :CancelParams, "language_server/protocol/interface/cancel_params" - autoload :ChangeAnnotation, "language_server/protocol/interface/change_annotation" - autoload :ClientCapabilities, "language_server/protocol/interface/client_capabilities" - autoload :CodeAction, "language_server/protocol/interface/code_action" - autoload :CodeActionClientCapabilities, "language_server/protocol/interface/code_action_client_capabilities" - autoload :CodeActionContext, "language_server/protocol/interface/code_action_context" - autoload :CodeActionOptions, "language_server/protocol/interface/code_action_options" - autoload :CodeActionParams, "language_server/protocol/interface/code_action_params" - autoload :CodeActionRegistrationOptions, "language_server/protocol/interface/code_action_registration_options" - autoload :CodeDescription, "language_server/protocol/interface/code_description" - autoload :CodeLens, "language_server/protocol/interface/code_lens" - autoload :CodeLensClientCapabilities, "language_server/protocol/interface/code_lens_client_capabilities" - autoload :CodeLensOptions, "language_server/protocol/interface/code_lens_options" - autoload :CodeLensParams, "language_server/protocol/interface/code_lens_params" - autoload :CodeLensRegistrationOptions, "language_server/protocol/interface/code_lens_registration_options" - autoload :CodeLensWorkspaceClientCapabilities, "language_server/protocol/interface/code_lens_workspace_client_capabilities" - autoload :Color, "language_server/protocol/interface/color" - autoload :ColorInformation, "language_server/protocol/interface/color_information" - autoload :ColorPresentation, "language_server/protocol/interface/color_presentation" - autoload :ColorPresentationParams, "language_server/protocol/interface/color_presentation_params" - autoload :Command, "language_server/protocol/interface/command" - autoload :CompletionClientCapabilities, "language_server/protocol/interface/completion_client_capabilities" - autoload :CompletionContext, "language_server/protocol/interface/completion_context" - autoload :CompletionItem, "language_server/protocol/interface/completion_item" - autoload :CompletionItemLabelDetails, "language_server/protocol/interface/completion_item_label_details" - autoload :CompletionList, "language_server/protocol/interface/completion_list" - autoload :CompletionOptions, "language_server/protocol/interface/completion_options" - autoload :CompletionParams, "language_server/protocol/interface/completion_params" - autoload :CompletionRegistrationOptions, "language_server/protocol/interface/completion_registration_options" - autoload :ConfigurationItem, "language_server/protocol/interface/configuration_item" - autoload :ConfigurationParams, "language_server/protocol/interface/configuration_params" - autoload :CreateFile, "language_server/protocol/interface/create_file" - autoload :CreateFileOptions, "language_server/protocol/interface/create_file_options" - autoload :CreateFilesParams, "language_server/protocol/interface/create_files_params" - autoload :DeclarationClientCapabilities, "language_server/protocol/interface/declaration_client_capabilities" - autoload :DeclarationOptions, "language_server/protocol/interface/declaration_options" - autoload :DeclarationParams, "language_server/protocol/interface/declaration_params" - autoload :DeclarationRegistrationOptions, "language_server/protocol/interface/declaration_registration_options" - autoload :DefinitionClientCapabilities, "language_server/protocol/interface/definition_client_capabilities" - autoload :DefinitionOptions, "language_server/protocol/interface/definition_options" - autoload :DefinitionParams, "language_server/protocol/interface/definition_params" - autoload :DefinitionRegistrationOptions, "language_server/protocol/interface/definition_registration_options" - autoload :DeleteFile, "language_server/protocol/interface/delete_file" - autoload :DeleteFileOptions, "language_server/protocol/interface/delete_file_options" - autoload :DeleteFilesParams, "language_server/protocol/interface/delete_files_params" - autoload :Diagnostic, "language_server/protocol/interface/diagnostic" - autoload :DiagnosticClientCapabilities, "language_server/protocol/interface/diagnostic_client_capabilities" - autoload :DiagnosticOptions, "language_server/protocol/interface/diagnostic_options" - autoload :DiagnosticRegistrationOptions, "language_server/protocol/interface/diagnostic_registration_options" - autoload :DiagnosticRelatedInformation, "language_server/protocol/interface/diagnostic_related_information" - autoload :DiagnosticServerCancellationData, "language_server/protocol/interface/diagnostic_server_cancellation_data" - autoload :DiagnosticWorkspaceClientCapabilities, "language_server/protocol/interface/diagnostic_workspace_client_capabilities" - autoload :DidChangeConfigurationClientCapabilities, "language_server/protocol/interface/did_change_configuration_client_capabilities" - autoload :DidChangeConfigurationParams, "language_server/protocol/interface/did_change_configuration_params" - autoload :DidChangeNotebookDocumentParams, "language_server/protocol/interface/did_change_notebook_document_params" - autoload :DidChangeTextDocumentParams, "language_server/protocol/interface/did_change_text_document_params" - autoload :DidChangeWatchedFilesClientCapabilities, "language_server/protocol/interface/did_change_watched_files_client_capabilities" - autoload :DidChangeWatchedFilesParams, "language_server/protocol/interface/did_change_watched_files_params" - autoload :DidChangeWatchedFilesRegistrationOptions, "language_server/protocol/interface/did_change_watched_files_registration_options" - autoload :DidChangeWorkspaceFoldersParams, "language_server/protocol/interface/did_change_workspace_folders_params" - autoload :DidCloseNotebookDocumentParams, "language_server/protocol/interface/did_close_notebook_document_params" - autoload :DidCloseTextDocumentParams, "language_server/protocol/interface/did_close_text_document_params" - autoload :DidOpenNotebookDocumentParams, "language_server/protocol/interface/did_open_notebook_document_params" - autoload :DidOpenTextDocumentParams, "language_server/protocol/interface/did_open_text_document_params" - autoload :DidSaveNotebookDocumentParams, "language_server/protocol/interface/did_save_notebook_document_params" - autoload :DidSaveTextDocumentParams, "language_server/protocol/interface/did_save_text_document_params" - autoload :DocumentColorClientCapabilities, "language_server/protocol/interface/document_color_client_capabilities" - autoload :DocumentColorOptions, "language_server/protocol/interface/document_color_options" - autoload :DocumentColorParams, "language_server/protocol/interface/document_color_params" - autoload :DocumentColorRegistrationOptions, "language_server/protocol/interface/document_color_registration_options" - autoload :DocumentDiagnosticParams, "language_server/protocol/interface/document_diagnostic_params" - autoload :DocumentDiagnosticReportPartialResult, "language_server/protocol/interface/document_diagnostic_report_partial_result" - autoload :DocumentFilter, "language_server/protocol/interface/document_filter" - autoload :DocumentFormattingClientCapabilities, "language_server/protocol/interface/document_formatting_client_capabilities" - autoload :DocumentFormattingOptions, "language_server/protocol/interface/document_formatting_options" - autoload :DocumentFormattingParams, "language_server/protocol/interface/document_formatting_params" - autoload :DocumentFormattingRegistrationOptions, "language_server/protocol/interface/document_formatting_registration_options" - autoload :DocumentHighlight, "language_server/protocol/interface/document_highlight" - autoload :DocumentHighlightClientCapabilities, "language_server/protocol/interface/document_highlight_client_capabilities" - autoload :DocumentHighlightOptions, "language_server/protocol/interface/document_highlight_options" - autoload :DocumentHighlightParams, "language_server/protocol/interface/document_highlight_params" - autoload :DocumentHighlightRegistrationOptions, "language_server/protocol/interface/document_highlight_registration_options" - autoload :DocumentLink, "language_server/protocol/interface/document_link" - autoload :DocumentLinkClientCapabilities, "language_server/protocol/interface/document_link_client_capabilities" - autoload :DocumentLinkOptions, "language_server/protocol/interface/document_link_options" - autoload :DocumentLinkParams, "language_server/protocol/interface/document_link_params" - autoload :DocumentLinkRegistrationOptions, "language_server/protocol/interface/document_link_registration_options" - autoload :DocumentOnTypeFormattingClientCapabilities, "language_server/protocol/interface/document_on_type_formatting_client_capabilities" - autoload :DocumentOnTypeFormattingOptions, "language_server/protocol/interface/document_on_type_formatting_options" - autoload :DocumentOnTypeFormattingParams, "language_server/protocol/interface/document_on_type_formatting_params" - autoload :DocumentOnTypeFormattingRegistrationOptions, "language_server/protocol/interface/document_on_type_formatting_registration_options" - autoload :DocumentRangeFormattingClientCapabilities, "language_server/protocol/interface/document_range_formatting_client_capabilities" - autoload :DocumentRangeFormattingOptions, "language_server/protocol/interface/document_range_formatting_options" - autoload :DocumentRangeFormattingParams, "language_server/protocol/interface/document_range_formatting_params" - autoload :DocumentRangeFormattingRegistrationOptions, "language_server/protocol/interface/document_range_formatting_registration_options" - autoload :DocumentSymbol, "language_server/protocol/interface/document_symbol" - autoload :DocumentSymbolClientCapabilities, "language_server/protocol/interface/document_symbol_client_capabilities" - autoload :DocumentSymbolOptions, "language_server/protocol/interface/document_symbol_options" - autoload :DocumentSymbolParams, "language_server/protocol/interface/document_symbol_params" - autoload :DocumentSymbolRegistrationOptions, "language_server/protocol/interface/document_symbol_registration_options" - autoload :ExecuteCommandClientCapabilities, "language_server/protocol/interface/execute_command_client_capabilities" - autoload :ExecuteCommandOptions, "language_server/protocol/interface/execute_command_options" - autoload :ExecuteCommandParams, "language_server/protocol/interface/execute_command_params" - autoload :ExecuteCommandRegistrationOptions, "language_server/protocol/interface/execute_command_registration_options" - autoload :ExecutionSummary, "language_server/protocol/interface/execution_summary" - autoload :FileCreate, "language_server/protocol/interface/file_create" - autoload :FileDelete, "language_server/protocol/interface/file_delete" - autoload :FileEvent, "language_server/protocol/interface/file_event" - autoload :FileOperationFilter, "language_server/protocol/interface/file_operation_filter" - autoload :FileOperationPattern, "language_server/protocol/interface/file_operation_pattern" - autoload :FileOperationPatternOptions, "language_server/protocol/interface/file_operation_pattern_options" - autoload :FileOperationRegistrationOptions, "language_server/protocol/interface/file_operation_registration_options" - autoload :FileRename, "language_server/protocol/interface/file_rename" - autoload :FileSystemWatcher, "language_server/protocol/interface/file_system_watcher" - autoload :FoldingRange, "language_server/protocol/interface/folding_range" - autoload :FoldingRangeClientCapabilities, "language_server/protocol/interface/folding_range_client_capabilities" - autoload :FoldingRangeOptions, "language_server/protocol/interface/folding_range_options" - autoload :FoldingRangeParams, "language_server/protocol/interface/folding_range_params" - autoload :FoldingRangeRegistrationOptions, "language_server/protocol/interface/folding_range_registration_options" - autoload :FormattingOptions, "language_server/protocol/interface/formatting_options" - autoload :FullDocumentDiagnosticReport, "language_server/protocol/interface/full_document_diagnostic_report" - autoload :Hover, "language_server/protocol/interface/hover" - autoload :HoverClientCapabilities, "language_server/protocol/interface/hover_client_capabilities" - autoload :HoverOptions, "language_server/protocol/interface/hover_options" - autoload :HoverParams, "language_server/protocol/interface/hover_params" - autoload :HoverParams, "language_server/protocol/interface/hover_params" - autoload :HoverRegistrationOptions, "language_server/protocol/interface/hover_registration_options" - autoload :HoverResult, "language_server/protocol/interface/hover_result" - autoload :ImplementationClientCapabilities, "language_server/protocol/interface/implementation_client_capabilities" - autoload :ImplementationOptions, "language_server/protocol/interface/implementation_options" - autoload :ImplementationParams, "language_server/protocol/interface/implementation_params" - autoload :ImplementationRegistrationOptions, "language_server/protocol/interface/implementation_registration_options" - autoload :InitializeError, "language_server/protocol/interface/initialize_error" - autoload :InitializeParams, "language_server/protocol/interface/initialize_params" - autoload :InitializeResult, "language_server/protocol/interface/initialize_result" - autoload :InitializedParams, "language_server/protocol/interface/initialized_params" - autoload :InlayHint, "language_server/protocol/interface/inlay_hint" - autoload :InlayHintClientCapabilities, "language_server/protocol/interface/inlay_hint_client_capabilities" - autoload :InlayHintLabelPart, "language_server/protocol/interface/inlay_hint_label_part" - autoload :InlayHintOptions, "language_server/protocol/interface/inlay_hint_options" - autoload :InlayHintParams, "language_server/protocol/interface/inlay_hint_params" - autoload :InlayHintRegistrationOptions, "language_server/protocol/interface/inlay_hint_registration_options" - autoload :InlayHintWorkspaceClientCapabilities, "language_server/protocol/interface/inlay_hint_workspace_client_capabilities" - autoload :InlineValueClientCapabilities, "language_server/protocol/interface/inline_value_client_capabilities" - autoload :InlineValueContext, "language_server/protocol/interface/inline_value_context" - autoload :InlineValueEvaluatableExpression, "language_server/protocol/interface/inline_value_evaluatable_expression" - autoload :InlineValueOptions, "language_server/protocol/interface/inline_value_options" - autoload :InlineValueParams, "language_server/protocol/interface/inline_value_params" - autoload :InlineValueRegistrationOptions, "language_server/protocol/interface/inline_value_registration_options" - autoload :InlineValueText, "language_server/protocol/interface/inline_value_text" - autoload :InlineValueVariableLookup, "language_server/protocol/interface/inline_value_variable_lookup" - autoload :InlineValueWorkspaceClientCapabilities, "language_server/protocol/interface/inline_value_workspace_client_capabilities" - autoload :InsertReplaceEdit, "language_server/protocol/interface/insert_replace_edit" - autoload :LinkedEditingRangeClientCapabilities, "language_server/protocol/interface/linked_editing_range_client_capabilities" - autoload :LinkedEditingRangeOptions, "language_server/protocol/interface/linked_editing_range_options" - autoload :LinkedEditingRangeParams, "language_server/protocol/interface/linked_editing_range_params" - autoload :LinkedEditingRangeRegistrationOptions, "language_server/protocol/interface/linked_editing_range_registration_options" - autoload :LinkedEditingRanges, "language_server/protocol/interface/linked_editing_ranges" - autoload :Location, "language_server/protocol/interface/location" - autoload :LocationLink, "language_server/protocol/interface/location_link" - autoload :LogMessageParams, "language_server/protocol/interface/log_message_params" - autoload :LogTraceParams, "language_server/protocol/interface/log_trace_params" - autoload :MarkupContent, "language_server/protocol/interface/markup_content" - autoload :Message, "language_server/protocol/interface/message" - autoload :MessageActionItem, "language_server/protocol/interface/message_action_item" - autoload :Moniker, "language_server/protocol/interface/moniker" - autoload :MonikerClientCapabilities, "language_server/protocol/interface/moniker_client_capabilities" - autoload :MonikerOptions, "language_server/protocol/interface/moniker_options" - autoload :MonikerParams, "language_server/protocol/interface/moniker_params" - autoload :MonikerRegistrationOptions, "language_server/protocol/interface/moniker_registration_options" - autoload :NotebookCell, "language_server/protocol/interface/notebook_cell" - autoload :NotebookCellArrayChange, "language_server/protocol/interface/notebook_cell_array_change" - autoload :NotebookCellTextDocumentFilter, "language_server/protocol/interface/notebook_cell_text_document_filter" - autoload :NotebookDocument, "language_server/protocol/interface/notebook_document" - autoload :NotebookDocumentChangeEvent, "language_server/protocol/interface/notebook_document_change_event" - autoload :NotebookDocumentClientCapabilities, "language_server/protocol/interface/notebook_document_client_capabilities" - autoload :NotebookDocumentFilter, "language_server/protocol/interface/notebook_document_filter" - autoload :NotebookDocumentIdentifier, "language_server/protocol/interface/notebook_document_identifier" - autoload :NotebookDocumentSyncClientCapabilities, "language_server/protocol/interface/notebook_document_sync_client_capabilities" - autoload :NotebookDocumentSyncOptions, "language_server/protocol/interface/notebook_document_sync_options" - autoload :NotebookDocumentSyncRegistrationOptions, "language_server/protocol/interface/notebook_document_sync_registration_options" - autoload :NotificationMessage, "language_server/protocol/interface/notification_message" - autoload :OptionalVersionedTextDocumentIdentifier, "language_server/protocol/interface/optional_versioned_text_document_identifier" - autoload :ParameterInformation, "language_server/protocol/interface/parameter_information" - autoload :PartialResultParams, "language_server/protocol/interface/partial_result_params" - autoload :Position, "language_server/protocol/interface/position" - autoload :PrepareRenameParams, "language_server/protocol/interface/prepare_rename_params" - autoload :PreviousResultId, "language_server/protocol/interface/previous_result_id" - autoload :ProgressParams, "language_server/protocol/interface/progress_params" - autoload :PublishDiagnosticsClientCapabilities, "language_server/protocol/interface/publish_diagnostics_client_capabilities" - autoload :PublishDiagnosticsParams, "language_server/protocol/interface/publish_diagnostics_params" - autoload :Range, "language_server/protocol/interface/range" - autoload :ReferenceClientCapabilities, "language_server/protocol/interface/reference_client_capabilities" - autoload :ReferenceContext, "language_server/protocol/interface/reference_context" - autoload :ReferenceOptions, "language_server/protocol/interface/reference_options" - autoload :ReferenceParams, "language_server/protocol/interface/reference_params" - autoload :ReferenceRegistrationOptions, "language_server/protocol/interface/reference_registration_options" - autoload :Registration, "language_server/protocol/interface/registration" - autoload :RegistrationParams, "language_server/protocol/interface/registration_params" - autoload :RegularExpressionsClientCapabilities, "language_server/protocol/interface/regular_expressions_client_capabilities" - autoload :RelatedFullDocumentDiagnosticReport, "language_server/protocol/interface/related_full_document_diagnostic_report" - autoload :RelatedUnchangedDocumentDiagnosticReport, "language_server/protocol/interface/related_unchanged_document_diagnostic_report" - autoload :RelativePattern, "language_server/protocol/interface/relative_pattern" - autoload :RenameClientCapabilities, "language_server/protocol/interface/rename_client_capabilities" - autoload :RenameFile, "language_server/protocol/interface/rename_file" - autoload :RenameFileOptions, "language_server/protocol/interface/rename_file_options" - autoload :RenameFilesParams, "language_server/protocol/interface/rename_files_params" - autoload :RenameOptions, "language_server/protocol/interface/rename_options" - autoload :RenameParams, "language_server/protocol/interface/rename_params" - autoload :RenameRegistrationOptions, "language_server/protocol/interface/rename_registration_options" - autoload :RequestMessage, "language_server/protocol/interface/request_message" - autoload :ResponseError, "language_server/protocol/interface/response_error" - autoload :ResponseMessage, "language_server/protocol/interface/response_message" - autoload :SaveOptions, "language_server/protocol/interface/save_options" - autoload :SelectionRange, "language_server/protocol/interface/selection_range" - autoload :SelectionRangeClientCapabilities, "language_server/protocol/interface/selection_range_client_capabilities" - autoload :SelectionRangeOptions, "language_server/protocol/interface/selection_range_options" - autoload :SelectionRangeParams, "language_server/protocol/interface/selection_range_params" - autoload :SelectionRangeRegistrationOptions, "language_server/protocol/interface/selection_range_registration_options" - autoload :SemanticTokens, "language_server/protocol/interface/semantic_tokens" - autoload :SemanticTokensClientCapabilities, "language_server/protocol/interface/semantic_tokens_client_capabilities" - autoload :SemanticTokensDelta, "language_server/protocol/interface/semantic_tokens_delta" - autoload :SemanticTokensDeltaParams, "language_server/protocol/interface/semantic_tokens_delta_params" - autoload :SemanticTokensDeltaPartialResult, "language_server/protocol/interface/semantic_tokens_delta_partial_result" - autoload :SemanticTokensEdit, "language_server/protocol/interface/semantic_tokens_edit" - autoload :SemanticTokensLegend, "language_server/protocol/interface/semantic_tokens_legend" - autoload :SemanticTokensOptions, "language_server/protocol/interface/semantic_tokens_options" - autoload :SemanticTokensParams, "language_server/protocol/interface/semantic_tokens_params" - autoload :SemanticTokensPartialResult, "language_server/protocol/interface/semantic_tokens_partial_result" - autoload :SemanticTokensRangeParams, "language_server/protocol/interface/semantic_tokens_range_params" - autoload :SemanticTokensRegistrationOptions, "language_server/protocol/interface/semantic_tokens_registration_options" - autoload :SemanticTokensWorkspaceClientCapabilities, "language_server/protocol/interface/semantic_tokens_workspace_client_capabilities" - autoload :ServerCapabilities, "language_server/protocol/interface/server_capabilities" - autoload :SetTraceParams, "language_server/protocol/interface/set_trace_params" - autoload :ShowDocumentClientCapabilities, "language_server/protocol/interface/show_document_client_capabilities" - autoload :ShowDocumentParams, "language_server/protocol/interface/show_document_params" - autoload :ShowDocumentResult, "language_server/protocol/interface/show_document_result" - autoload :ShowMessageParams, "language_server/protocol/interface/show_message_params" - autoload :ShowMessageRequestClientCapabilities, "language_server/protocol/interface/show_message_request_client_capabilities" - autoload :ShowMessageRequestParams, "language_server/protocol/interface/show_message_request_params" - autoload :SignatureHelp, "language_server/protocol/interface/signature_help" - autoload :SignatureHelpClientCapabilities, "language_server/protocol/interface/signature_help_client_capabilities" - autoload :SignatureHelpContext, "language_server/protocol/interface/signature_help_context" - autoload :SignatureHelpOptions, "language_server/protocol/interface/signature_help_options" - autoload :SignatureHelpParams, "language_server/protocol/interface/signature_help_params" - autoload :SignatureHelpRegistrationOptions, "language_server/protocol/interface/signature_help_registration_options" - autoload :SignatureInformation, "language_server/protocol/interface/signature_information" - autoload :StaticRegistrationOptions, "language_server/protocol/interface/static_registration_options" - autoload :SymbolInformation, "language_server/protocol/interface/symbol_information" - autoload :TextDocumentChangeRegistrationOptions, "language_server/protocol/interface/text_document_change_registration_options" - autoload :TextDocumentClientCapabilities, "language_server/protocol/interface/text_document_client_capabilities" - autoload :TextDocumentContentChangeEvent, "language_server/protocol/interface/text_document_content_change_event" - autoload :TextDocumentEdit, "language_server/protocol/interface/text_document_edit" - autoload :TextDocumentIdentifier, "language_server/protocol/interface/text_document_identifier" - autoload :TextDocumentItem, "language_server/protocol/interface/text_document_item" - autoload :TextDocumentPositionParams, "language_server/protocol/interface/text_document_position_params" - autoload :TextDocumentRegistrationOptions, "language_server/protocol/interface/text_document_registration_options" - autoload :TextDocumentSaveRegistrationOptions, "language_server/protocol/interface/text_document_save_registration_options" - autoload :TextDocumentSyncClientCapabilities, "language_server/protocol/interface/text_document_sync_client_capabilities" - autoload :TextDocumentSyncOptions, "language_server/protocol/interface/text_document_sync_options" - autoload :TextDocumentSyncOptions, "language_server/protocol/interface/text_document_sync_options" - autoload :TextEdit, "language_server/protocol/interface/text_edit" - autoload :TypeDefinitionClientCapabilities, "language_server/protocol/interface/type_definition_client_capabilities" - autoload :TypeDefinitionOptions, "language_server/protocol/interface/type_definition_options" - autoload :TypeDefinitionParams, "language_server/protocol/interface/type_definition_params" - autoload :TypeDefinitionRegistrationOptions, "language_server/protocol/interface/type_definition_registration_options" - autoload :TypeHierarchyItem, "language_server/protocol/interface/type_hierarchy_item" - autoload :TypeHierarchyOptions, "language_server/protocol/interface/type_hierarchy_options" - autoload :TypeHierarchyPrepareParams, "language_server/protocol/interface/type_hierarchy_prepare_params" - autoload :TypeHierarchyRegistrationOptions, "language_server/protocol/interface/type_hierarchy_registration_options" - autoload :TypeHierarchySubtypesParams, "language_server/protocol/interface/type_hierarchy_subtypes_params" - autoload :TypeHierarchySupertypesParams, "language_server/protocol/interface/type_hierarchy_supertypes_params" - autoload :UnchangedDocumentDiagnosticReport, "language_server/protocol/interface/unchanged_document_diagnostic_report" - autoload :Unregistration, "language_server/protocol/interface/unregistration" - autoload :UnregistrationParams, "language_server/protocol/interface/unregistration_params" - autoload :VersionedNotebookDocumentIdentifier, "language_server/protocol/interface/versioned_notebook_document_identifier" - autoload :VersionedTextDocumentIdentifier, "language_server/protocol/interface/versioned_text_document_identifier" - autoload :WillSaveTextDocumentParams, "language_server/protocol/interface/will_save_text_document_params" - autoload :WorkDoneProgressBegin, "language_server/protocol/interface/work_done_progress_begin" - autoload :WorkDoneProgressCancelParams, "language_server/protocol/interface/work_done_progress_cancel_params" - autoload :WorkDoneProgressCreateParams, "language_server/protocol/interface/work_done_progress_create_params" - autoload :WorkDoneProgressEnd, "language_server/protocol/interface/work_done_progress_end" - autoload :WorkDoneProgressOptions, "language_server/protocol/interface/work_done_progress_options" - autoload :WorkDoneProgressParams, "language_server/protocol/interface/work_done_progress_params" - autoload :WorkDoneProgressReport, "language_server/protocol/interface/work_done_progress_report" - autoload :WorkspaceDiagnosticParams, "language_server/protocol/interface/workspace_diagnostic_params" - autoload :WorkspaceDiagnosticReport, "language_server/protocol/interface/workspace_diagnostic_report" - autoload :WorkspaceDiagnosticReportPartialResult, "language_server/protocol/interface/workspace_diagnostic_report_partial_result" - autoload :WorkspaceEdit, "language_server/protocol/interface/workspace_edit" - autoload :WorkspaceEditClientCapabilities, "language_server/protocol/interface/workspace_edit_client_capabilities" - autoload :WorkspaceFolder, "language_server/protocol/interface/workspace_folder" - autoload :WorkspaceFoldersChangeEvent, "language_server/protocol/interface/workspace_folders_change_event" - autoload :WorkspaceFoldersServerCapabilities, "language_server/protocol/interface/workspace_folders_server_capabilities" - autoload :WorkspaceFullDocumentDiagnosticReport, "language_server/protocol/interface/workspace_full_document_diagnostic_report" - autoload :WorkspaceSymbol, "language_server/protocol/interface/workspace_symbol" - autoload :WorkspaceSymbolClientCapabilities, "language_server/protocol/interface/workspace_symbol_client_capabilities" - autoload :WorkspaceSymbolOptions, "language_server/protocol/interface/workspace_symbol_options" - autoload :WorkspaceSymbolParams, "language_server/protocol/interface/workspace_symbol_params" - autoload :WorkspaceSymbolRegistrationOptions, "language_server/protocol/interface/workspace_symbol_registration_options" - autoload :WorkspaceUnchangedDocumentDiagnosticReport, "language_server/protocol/interface/workspace_unchanged_document_diagnostic_report" - - require "language_server/protocol/interface/annotated_text_edit" - require "language_server/protocol/interface/apply_workspace_edit_params" - require "language_server/protocol/interface/apply_workspace_edit_result" - require "language_server/protocol/interface/call_hierarchy_client_capabilities" - require "language_server/protocol/interface/call_hierarchy_incoming_call" - require "language_server/protocol/interface/call_hierarchy_incoming_calls_params" - require "language_server/protocol/interface/call_hierarchy_item" - require "language_server/protocol/interface/call_hierarchy_options" - require "language_server/protocol/interface/call_hierarchy_outgoing_call" - require "language_server/protocol/interface/call_hierarchy_outgoing_calls_params" - require "language_server/protocol/interface/call_hierarchy_prepare_params" - require "language_server/protocol/interface/call_hierarchy_registration_options" - require "language_server/protocol/interface/cancel_params" - require "language_server/protocol/interface/change_annotation" - require "language_server/protocol/interface/client_capabilities" - require "language_server/protocol/interface/code_action" - require "language_server/protocol/interface/code_action_client_capabilities" - require "language_server/protocol/interface/code_action_context" - require "language_server/protocol/interface/code_action_options" - require "language_server/protocol/interface/code_action_params" - require "language_server/protocol/interface/code_action_registration_options" - require "language_server/protocol/interface/code_description" - require "language_server/protocol/interface/code_lens" - require "language_server/protocol/interface/code_lens_client_capabilities" - require "language_server/protocol/interface/code_lens_options" - require "language_server/protocol/interface/code_lens_params" - require "language_server/protocol/interface/code_lens_registration_options" - require "language_server/protocol/interface/code_lens_workspace_client_capabilities" - require "language_server/protocol/interface/color" - require "language_server/protocol/interface/color_information" - require "language_server/protocol/interface/color_presentation" - require "language_server/protocol/interface/color_presentation_params" - require "language_server/protocol/interface/command" - require "language_server/protocol/interface/completion_client_capabilities" - require "language_server/protocol/interface/completion_context" - require "language_server/protocol/interface/completion_item" - require "language_server/protocol/interface/completion_item_label_details" - require "language_server/protocol/interface/completion_list" - require "language_server/protocol/interface/completion_options" - require "language_server/protocol/interface/completion_params" - require "language_server/protocol/interface/completion_registration_options" - require "language_server/protocol/interface/configuration_item" - require "language_server/protocol/interface/configuration_params" - require "language_server/protocol/interface/create_file" - require "language_server/protocol/interface/create_file_options" - require "language_server/protocol/interface/create_files_params" - require "language_server/protocol/interface/declaration_client_capabilities" - require "language_server/protocol/interface/declaration_options" - require "language_server/protocol/interface/declaration_params" - require "language_server/protocol/interface/declaration_registration_options" - require "language_server/protocol/interface/definition_client_capabilities" - require "language_server/protocol/interface/definition_options" - require "language_server/protocol/interface/definition_params" - require "language_server/protocol/interface/definition_registration_options" - require "language_server/protocol/interface/delete_file" - require "language_server/protocol/interface/delete_file_options" - require "language_server/protocol/interface/delete_files_params" - require "language_server/protocol/interface/diagnostic" - require "language_server/protocol/interface/diagnostic_client_capabilities" - require "language_server/protocol/interface/diagnostic_options" - require "language_server/protocol/interface/diagnostic_registration_options" - require "language_server/protocol/interface/diagnostic_related_information" - require "language_server/protocol/interface/diagnostic_server_cancellation_data" - require "language_server/protocol/interface/diagnostic_workspace_client_capabilities" - require "language_server/protocol/interface/did_change_configuration_client_capabilities" - require "language_server/protocol/interface/did_change_configuration_params" - require "language_server/protocol/interface/did_change_notebook_document_params" - require "language_server/protocol/interface/did_change_text_document_params" - require "language_server/protocol/interface/did_change_watched_files_client_capabilities" - require "language_server/protocol/interface/did_change_watched_files_params" - require "language_server/protocol/interface/did_change_watched_files_registration_options" - require "language_server/protocol/interface/did_change_workspace_folders_params" - require "language_server/protocol/interface/did_close_notebook_document_params" - require "language_server/protocol/interface/did_close_text_document_params" - require "language_server/protocol/interface/did_open_notebook_document_params" - require "language_server/protocol/interface/did_open_text_document_params" - require "language_server/protocol/interface/did_save_notebook_document_params" - require "language_server/protocol/interface/did_save_text_document_params" - require "language_server/protocol/interface/document_color_client_capabilities" - require "language_server/protocol/interface/document_color_options" - require "language_server/protocol/interface/document_color_params" - require "language_server/protocol/interface/document_color_registration_options" - require "language_server/protocol/interface/document_diagnostic_params" - require "language_server/protocol/interface/document_diagnostic_report_partial_result" - require "language_server/protocol/interface/document_filter" - require "language_server/protocol/interface/document_formatting_client_capabilities" - require "language_server/protocol/interface/document_formatting_options" - require "language_server/protocol/interface/document_formatting_params" - require "language_server/protocol/interface/document_formatting_registration_options" - require "language_server/protocol/interface/document_highlight" - require "language_server/protocol/interface/document_highlight_client_capabilities" - require "language_server/protocol/interface/document_highlight_options" - require "language_server/protocol/interface/document_highlight_params" - require "language_server/protocol/interface/document_highlight_registration_options" - require "language_server/protocol/interface/document_link" - require "language_server/protocol/interface/document_link_client_capabilities" - require "language_server/protocol/interface/document_link_options" - require "language_server/protocol/interface/document_link_params" - require "language_server/protocol/interface/document_link_registration_options" - require "language_server/protocol/interface/document_on_type_formatting_client_capabilities" - require "language_server/protocol/interface/document_on_type_formatting_options" - require "language_server/protocol/interface/document_on_type_formatting_params" - require "language_server/protocol/interface/document_on_type_formatting_registration_options" - require "language_server/protocol/interface/document_range_formatting_client_capabilities" - require "language_server/protocol/interface/document_range_formatting_options" - require "language_server/protocol/interface/document_range_formatting_params" - require "language_server/protocol/interface/document_range_formatting_registration_options" - require "language_server/protocol/interface/document_symbol" - require "language_server/protocol/interface/document_symbol_client_capabilities" - require "language_server/protocol/interface/document_symbol_options" - require "language_server/protocol/interface/document_symbol_params" - require "language_server/protocol/interface/document_symbol_registration_options" - require "language_server/protocol/interface/execute_command_client_capabilities" - require "language_server/protocol/interface/execute_command_options" - require "language_server/protocol/interface/execute_command_params" - require "language_server/protocol/interface/execute_command_registration_options" - require "language_server/protocol/interface/execution_summary" - require "language_server/protocol/interface/file_create" - require "language_server/protocol/interface/file_delete" - require "language_server/protocol/interface/file_event" - require "language_server/protocol/interface/file_operation_filter" - require "language_server/protocol/interface/file_operation_pattern" - require "language_server/protocol/interface/file_operation_pattern_options" - require "language_server/protocol/interface/file_operation_registration_options" - require "language_server/protocol/interface/file_rename" - require "language_server/protocol/interface/file_system_watcher" - require "language_server/protocol/interface/folding_range" - require "language_server/protocol/interface/folding_range_client_capabilities" - require "language_server/protocol/interface/folding_range_options" - require "language_server/protocol/interface/folding_range_params" - require "language_server/protocol/interface/folding_range_registration_options" - require "language_server/protocol/interface/formatting_options" - require "language_server/protocol/interface/full_document_diagnostic_report" - require "language_server/protocol/interface/hover" - require "language_server/protocol/interface/hover_client_capabilities" - require "language_server/protocol/interface/hover_options" - require "language_server/protocol/interface/hover_params" - require "language_server/protocol/interface/hover_params" - require "language_server/protocol/interface/hover_registration_options" - require "language_server/protocol/interface/hover_result" - require "language_server/protocol/interface/implementation_client_capabilities" - require "language_server/protocol/interface/implementation_options" - require "language_server/protocol/interface/implementation_params" - require "language_server/protocol/interface/implementation_registration_options" - require "language_server/protocol/interface/initialize_error" - require "language_server/protocol/interface/initialize_params" - require "language_server/protocol/interface/initialize_result" - require "language_server/protocol/interface/initialized_params" - require "language_server/protocol/interface/inlay_hint" - require "language_server/protocol/interface/inlay_hint_client_capabilities" - require "language_server/protocol/interface/inlay_hint_label_part" - require "language_server/protocol/interface/inlay_hint_options" - require "language_server/protocol/interface/inlay_hint_params" - require "language_server/protocol/interface/inlay_hint_registration_options" - require "language_server/protocol/interface/inlay_hint_workspace_client_capabilities" - require "language_server/protocol/interface/inline_value_client_capabilities" - require "language_server/protocol/interface/inline_value_context" - require "language_server/protocol/interface/inline_value_evaluatable_expression" - require "language_server/protocol/interface/inline_value_options" - require "language_server/protocol/interface/inline_value_params" - require "language_server/protocol/interface/inline_value_registration_options" - require "language_server/protocol/interface/inline_value_text" - require "language_server/protocol/interface/inline_value_variable_lookup" - require "language_server/protocol/interface/inline_value_workspace_client_capabilities" - require "language_server/protocol/interface/insert_replace_edit" - require "language_server/protocol/interface/linked_editing_range_client_capabilities" - require "language_server/protocol/interface/linked_editing_range_options" - require "language_server/protocol/interface/linked_editing_range_params" - require "language_server/protocol/interface/linked_editing_range_registration_options" - require "language_server/protocol/interface/linked_editing_ranges" - require "language_server/protocol/interface/location" - require "language_server/protocol/interface/location_link" - require "language_server/protocol/interface/log_message_params" - require "language_server/protocol/interface/log_trace_params" - require "language_server/protocol/interface/markup_content" - require "language_server/protocol/interface/message" - require "language_server/protocol/interface/message_action_item" - require "language_server/protocol/interface/moniker" - require "language_server/protocol/interface/moniker_client_capabilities" - require "language_server/protocol/interface/moniker_options" - require "language_server/protocol/interface/moniker_params" - require "language_server/protocol/interface/moniker_registration_options" - require "language_server/protocol/interface/notebook_cell" - require "language_server/protocol/interface/notebook_cell_array_change" - require "language_server/protocol/interface/notebook_cell_text_document_filter" - require "language_server/protocol/interface/notebook_document" - require "language_server/protocol/interface/notebook_document_change_event" - require "language_server/protocol/interface/notebook_document_client_capabilities" - require "language_server/protocol/interface/notebook_document_filter" - require "language_server/protocol/interface/notebook_document_identifier" - require "language_server/protocol/interface/notebook_document_sync_client_capabilities" - require "language_server/protocol/interface/notebook_document_sync_options" - require "language_server/protocol/interface/notebook_document_sync_registration_options" - require "language_server/protocol/interface/notification_message" - require "language_server/protocol/interface/optional_versioned_text_document_identifier" - require "language_server/protocol/interface/parameter_information" - require "language_server/protocol/interface/partial_result_params" - require "language_server/protocol/interface/position" - require "language_server/protocol/interface/prepare_rename_params" - require "language_server/protocol/interface/previous_result_id" - require "language_server/protocol/interface/progress_params" - require "language_server/protocol/interface/publish_diagnostics_client_capabilities" - require "language_server/protocol/interface/publish_diagnostics_params" - require "language_server/protocol/interface/range" - require "language_server/protocol/interface/reference_client_capabilities" - require "language_server/protocol/interface/reference_context" - require "language_server/protocol/interface/reference_options" - require "language_server/protocol/interface/reference_params" - require "language_server/protocol/interface/reference_registration_options" - require "language_server/protocol/interface/registration" - require "language_server/protocol/interface/registration_params" - require "language_server/protocol/interface/regular_expressions_client_capabilities" - require "language_server/protocol/interface/related_full_document_diagnostic_report" - require "language_server/protocol/interface/related_unchanged_document_diagnostic_report" - require "language_server/protocol/interface/relative_pattern" - require "language_server/protocol/interface/rename_client_capabilities" - require "language_server/protocol/interface/rename_file" - require "language_server/protocol/interface/rename_file_options" - require "language_server/protocol/interface/rename_files_params" - require "language_server/protocol/interface/rename_options" - require "language_server/protocol/interface/rename_params" - require "language_server/protocol/interface/rename_registration_options" - require "language_server/protocol/interface/request_message" - require "language_server/protocol/interface/response_error" - require "language_server/protocol/interface/response_message" - require "language_server/protocol/interface/save_options" - require "language_server/protocol/interface/selection_range" - require "language_server/protocol/interface/selection_range_client_capabilities" - require "language_server/protocol/interface/selection_range_options" - require "language_server/protocol/interface/selection_range_params" - require "language_server/protocol/interface/selection_range_registration_options" - require "language_server/protocol/interface/semantic_tokens" - require "language_server/protocol/interface/semantic_tokens_client_capabilities" - require "language_server/protocol/interface/semantic_tokens_delta" - require "language_server/protocol/interface/semantic_tokens_delta_params" - require "language_server/protocol/interface/semantic_tokens_delta_partial_result" - require "language_server/protocol/interface/semantic_tokens_edit" - require "language_server/protocol/interface/semantic_tokens_legend" - require "language_server/protocol/interface/semantic_tokens_options" - require "language_server/protocol/interface/semantic_tokens_params" - require "language_server/protocol/interface/semantic_tokens_partial_result" - require "language_server/protocol/interface/semantic_tokens_range_params" - require "language_server/protocol/interface/semantic_tokens_registration_options" - require "language_server/protocol/interface/semantic_tokens_workspace_client_capabilities" - require "language_server/protocol/interface/server_capabilities" - require "language_server/protocol/interface/set_trace_params" - require "language_server/protocol/interface/show_document_client_capabilities" - require "language_server/protocol/interface/show_document_params" - require "language_server/protocol/interface/show_document_result" - require "language_server/protocol/interface/show_message_params" - require "language_server/protocol/interface/show_message_request_client_capabilities" - require "language_server/protocol/interface/show_message_request_params" - require "language_server/protocol/interface/signature_help" - require "language_server/protocol/interface/signature_help_client_capabilities" - require "language_server/protocol/interface/signature_help_context" - require "language_server/protocol/interface/signature_help_options" - require "language_server/protocol/interface/signature_help_params" - require "language_server/protocol/interface/signature_help_registration_options" - require "language_server/protocol/interface/signature_information" - require "language_server/protocol/interface/static_registration_options" - require "language_server/protocol/interface/symbol_information" - require "language_server/protocol/interface/text_document_change_registration_options" - require "language_server/protocol/interface/text_document_client_capabilities" - require "language_server/protocol/interface/text_document_content_change_event" - require "language_server/protocol/interface/text_document_edit" - require "language_server/protocol/interface/text_document_identifier" - require "language_server/protocol/interface/text_document_item" - require "language_server/protocol/interface/text_document_position_params" - require "language_server/protocol/interface/text_document_registration_options" - require "language_server/protocol/interface/text_document_save_registration_options" - require "language_server/protocol/interface/text_document_sync_client_capabilities" - require "language_server/protocol/interface/text_document_sync_options" - require "language_server/protocol/interface/text_document_sync_options" - require "language_server/protocol/interface/text_edit" - require "language_server/protocol/interface/type_definition_client_capabilities" - require "language_server/protocol/interface/type_definition_options" - require "language_server/protocol/interface/type_definition_params" - require "language_server/protocol/interface/type_definition_registration_options" - require "language_server/protocol/interface/type_hierarchy_item" - require "language_server/protocol/interface/type_hierarchy_options" - require "language_server/protocol/interface/type_hierarchy_prepare_params" - require "language_server/protocol/interface/type_hierarchy_registration_options" - require "language_server/protocol/interface/type_hierarchy_subtypes_params" - require "language_server/protocol/interface/type_hierarchy_supertypes_params" - require "language_server/protocol/interface/unchanged_document_diagnostic_report" - require "language_server/protocol/interface/unregistration" - require "language_server/protocol/interface/unregistration_params" - require "language_server/protocol/interface/versioned_notebook_document_identifier" - require "language_server/protocol/interface/versioned_text_document_identifier" - require "language_server/protocol/interface/will_save_text_document_params" - require "language_server/protocol/interface/work_done_progress_begin" - require "language_server/protocol/interface/work_done_progress_cancel_params" - require "language_server/protocol/interface/work_done_progress_create_params" - require "language_server/protocol/interface/work_done_progress_end" - require "language_server/protocol/interface/work_done_progress_options" - require "language_server/protocol/interface/work_done_progress_params" - require "language_server/protocol/interface/work_done_progress_report" - require "language_server/protocol/interface/workspace_diagnostic_params" - require "language_server/protocol/interface/workspace_diagnostic_report" - require "language_server/protocol/interface/workspace_diagnostic_report_partial_result" - require "language_server/protocol/interface/workspace_edit" - require "language_server/protocol/interface/workspace_edit_client_capabilities" - require "language_server/protocol/interface/workspace_folder" - require "language_server/protocol/interface/workspace_folders_change_event" - require "language_server/protocol/interface/workspace_folders_server_capabilities" - require "language_server/protocol/interface/workspace_full_document_diagnostic_report" - require "language_server/protocol/interface/workspace_symbol" - require "language_server/protocol/interface/workspace_symbol_client_capabilities" - require "language_server/protocol/interface/workspace_symbol_options" - require "language_server/protocol/interface/workspace_symbol_params" - require "language_server/protocol/interface/workspace_symbol_registration_options" - require "language_server/protocol/interface/workspace_unchanged_document_diagnostic_report" - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/annotated_text_edit.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/annotated_text_edit.rb deleted file mode 100644 index 4aa719fd..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/annotated_text_edit.rb +++ /dev/null @@ -1,56 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # A special text edit with an additional change annotation. - # - class AnnotatedTextEdit - def initialize(range:, new_text:, annotation_id:) - @attributes = {} - - @attributes[:range] = range - @attributes[:newText] = new_text - @attributes[:annotationId] = annotation_id - - @attributes.freeze - end - - # - # The range of the text document to be manipulated. To insert - # text into a document create a range where start === end. - # - # @return [Range] - def range - attributes.fetch(:range) - end - - # - # The string to be inserted. For delete operations use an - # empty string. - # - # @return [string] - def new_text - attributes.fetch(:newText) - end - - # - # The actual annotation identifier. - # - # @return [string] - def annotation_id - attributes.fetch(:annotationId) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/apply_workspace_edit_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/apply_workspace_edit_params.rb deleted file mode 100644 index 9b55171a..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/apply_workspace_edit_params.rb +++ /dev/null @@ -1,44 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class ApplyWorkspaceEditParams - def initialize(label: nil, edit:) - @attributes = {} - - @attributes[:label] = label if label - @attributes[:edit] = edit - - @attributes.freeze - end - - # - # An optional label of the workspace edit. This label is - # presented in the user interface for example on an undo - # stack to undo the workspace edit. - # - # @return [string] - def label - attributes.fetch(:label) - end - - # - # The edits to apply. - # - # @return [WorkspaceEdit] - def edit - attributes.fetch(:edit) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/apply_workspace_edit_result.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/apply_workspace_edit_result.rb deleted file mode 100644 index 178e7f3d..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/apply_workspace_edit_result.rb +++ /dev/null @@ -1,56 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class ApplyWorkspaceEditResult - def initialize(applied:, failure_reason: nil, failed_change: nil) - @attributes = {} - - @attributes[:applied] = applied - @attributes[:failureReason] = failure_reason if failure_reason - @attributes[:failedChange] = failed_change if failed_change - - @attributes.freeze - end - - # - # Indicates whether the edit was applied or not. - # - # @return [boolean] - def applied - attributes.fetch(:applied) - end - - # - # An optional textual description for why the edit was not applied. - # This may be used by the server for diagnostic logging or to provide - # a suitable error for a request that triggered the edit. - # - # @return [string] - def failure_reason - attributes.fetch(:failureReason) - end - - # - # Depending on the client's failure handling strategy `failedChange` - # might contain the index of the change that failed. This property is - # only available if the client signals a `failureHandling` strategy - # in its client capabilities. - # - # @return [number] - def failed_change - attributes.fetch(:failedChange) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/call_hierarchy_client_capabilities.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/call_hierarchy_client_capabilities.rb deleted file mode 100644 index fdeed261..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/call_hierarchy_client_capabilities.rb +++ /dev/null @@ -1,36 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class CallHierarchyClientCapabilities - def initialize(dynamic_registration: nil) - @attributes = {} - - @attributes[:dynamicRegistration] = dynamic_registration if dynamic_registration - - @attributes.freeze - end - - # - # Whether implementation supports dynamic registration. If this is set to - # `true` the client supports the new `(TextDocumentRegistrationOptions & - # StaticRegistrationOptions)` return value for the corresponding server - # capability as well. - # - # @return [boolean] - def dynamic_registration - attributes.fetch(:dynamicRegistration) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/call_hierarchy_incoming_call.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/call_hierarchy_incoming_call.rb deleted file mode 100644 index 81665d11..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/call_hierarchy_incoming_call.rb +++ /dev/null @@ -1,43 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class CallHierarchyIncomingCall - def initialize(from:, from_ranges:) - @attributes = {} - - @attributes[:from] = from - @attributes[:fromRanges] = from_ranges - - @attributes.freeze - end - - # - # The item that makes the call. - # - # @return [CallHierarchyItem] - def from - attributes.fetch(:from) - end - - # - # The ranges at which the calls appear. This is relative to the caller - # denoted by [`this.from`](#CallHierarchyIncomingCall.from). - # - # @return [Range[]] - def from_ranges - attributes.fetch(:fromRanges) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/call_hierarchy_incoming_calls_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/call_hierarchy_incoming_calls_params.rb deleted file mode 100644 index 2032e344..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/call_hierarchy_incoming_calls_params.rb +++ /dev/null @@ -1,49 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class CallHierarchyIncomingCallsParams - def initialize(work_done_token: nil, partial_result_token: nil, item:) - @attributes = {} - - @attributes[:workDoneToken] = work_done_token if work_done_token - @attributes[:partialResultToken] = partial_result_token if partial_result_token - @attributes[:item] = item - - @attributes.freeze - end - - # - # An optional token that a server can use to report work done progress. - # - # @return [ProgressToken] - def work_done_token - attributes.fetch(:workDoneToken) - end - - # - # An optional token that a server can use to report partial results (e.g. - # streaming) to the client. - # - # @return [ProgressToken] - def partial_result_token - attributes.fetch(:partialResultToken) - end - - # @return [CallHierarchyItem] - def item - attributes.fetch(:item) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/call_hierarchy_item.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/call_hierarchy_item.rb deleted file mode 100644 index 82836bbf..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/call_hierarchy_item.rb +++ /dev/null @@ -1,100 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class CallHierarchyItem - def initialize(name:, kind:, tags: nil, detail: nil, uri:, range:, selection_range:, data: nil) - @attributes = {} - - @attributes[:name] = name - @attributes[:kind] = kind - @attributes[:tags] = tags if tags - @attributes[:detail] = detail if detail - @attributes[:uri] = uri - @attributes[:range] = range - @attributes[:selectionRange] = selection_range - @attributes[:data] = data if data - - @attributes.freeze - end - - # - # The name of this item. - # - # @return [string] - def name - attributes.fetch(:name) - end - - # - # The kind of this item. - # - # @return [SymbolKind] - def kind - attributes.fetch(:kind) - end - - # - # Tags for this item. - # - # @return [1[]] - def tags - attributes.fetch(:tags) - end - - # - # More detail for this item, e.g. the signature of a function. - # - # @return [string] - def detail - attributes.fetch(:detail) - end - - # - # The resource identifier of this item. - # - # @return [string] - def uri - attributes.fetch(:uri) - end - - # - # The range enclosing this symbol not including leading/trailing whitespace - # but everything else, e.g. comments and code. - # - # @return [Range] - def range - attributes.fetch(:range) - end - - # - # The range that should be selected and revealed when this symbol is being - # picked, e.g. the name of a function. Must be contained by the - # [`range`](#CallHierarchyItem.range). - # - # @return [Range] - def selection_range - attributes.fetch(:selectionRange) - end - - # - # A data entry field that is preserved between a call hierarchy prepare and - # incoming calls or outgoing calls requests. - # - # @return [unknown] - def data - attributes.fetch(:data) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/call_hierarchy_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/call_hierarchy_options.rb deleted file mode 100644 index 2d352600..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/call_hierarchy_options.rb +++ /dev/null @@ -1,30 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class CallHierarchyOptions - def initialize(work_done_progress: nil) - @attributes = {} - - @attributes[:workDoneProgress] = work_done_progress if work_done_progress - - @attributes.freeze - end - - # @return [boolean] - def work_done_progress - attributes.fetch(:workDoneProgress) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/call_hierarchy_outgoing_call.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/call_hierarchy_outgoing_call.rb deleted file mode 100644 index 6c636e9f..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/call_hierarchy_outgoing_call.rb +++ /dev/null @@ -1,43 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class CallHierarchyOutgoingCall - def initialize(to:, from_ranges:) - @attributes = {} - - @attributes[:to] = to - @attributes[:fromRanges] = from_ranges - - @attributes.freeze - end - - # - # The item that is called. - # - # @return [CallHierarchyItem] - def to - attributes.fetch(:to) - end - - # - # The range at which this item is called. This is the range relative to - # the caller, e.g the item passed to `callHierarchy/outgoingCalls` request. - # - # @return [Range[]] - def from_ranges - attributes.fetch(:fromRanges) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/call_hierarchy_outgoing_calls_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/call_hierarchy_outgoing_calls_params.rb deleted file mode 100644 index d7331268..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/call_hierarchy_outgoing_calls_params.rb +++ /dev/null @@ -1,49 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class CallHierarchyOutgoingCallsParams - def initialize(work_done_token: nil, partial_result_token: nil, item:) - @attributes = {} - - @attributes[:workDoneToken] = work_done_token if work_done_token - @attributes[:partialResultToken] = partial_result_token if partial_result_token - @attributes[:item] = item - - @attributes.freeze - end - - # - # An optional token that a server can use to report work done progress. - # - # @return [ProgressToken] - def work_done_token - attributes.fetch(:workDoneToken) - end - - # - # An optional token that a server can use to report partial results (e.g. - # streaming) to the client. - # - # @return [ProgressToken] - def partial_result_token - attributes.fetch(:partialResultToken) - end - - # @return [CallHierarchyItem] - def item - attributes.fetch(:item) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/call_hierarchy_prepare_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/call_hierarchy_prepare_params.rb deleted file mode 100644 index 88501f31..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/call_hierarchy_prepare_params.rb +++ /dev/null @@ -1,51 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class CallHierarchyPrepareParams - def initialize(text_document:, position:, work_done_token: nil) - @attributes = {} - - @attributes[:textDocument] = text_document - @attributes[:position] = position - @attributes[:workDoneToken] = work_done_token if work_done_token - - @attributes.freeze - end - - # - # The text document. - # - # @return [TextDocumentIdentifier] - def text_document - attributes.fetch(:textDocument) - end - - # - # The position inside the text document. - # - # @return [Position] - def position - attributes.fetch(:position) - end - - # - # An optional token that a server can use to report work done progress. - # - # @return [ProgressToken] - def work_done_token - attributes.fetch(:workDoneToken) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/call_hierarchy_registration_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/call_hierarchy_registration_options.rb deleted file mode 100644 index 0345d27e..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/call_hierarchy_registration_options.rb +++ /dev/null @@ -1,50 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class CallHierarchyRegistrationOptions - def initialize(document_selector:, work_done_progress: nil, id: nil) - @attributes = {} - - @attributes[:documentSelector] = document_selector - @attributes[:workDoneProgress] = work_done_progress if work_done_progress - @attributes[:id] = id if id - - @attributes.freeze - end - - # - # A document selector to identify the scope of the registration. If set to - # null the document selector provided on the client side will be used. - # - # @return [DocumentSelector] - def document_selector - attributes.fetch(:documentSelector) - end - - # @return [boolean] - def work_done_progress - attributes.fetch(:workDoneProgress) - end - - # - # The id used to register the request. The id can be used to deregister - # the request again. See also Registration#id. - # - # @return [string] - def id - attributes.fetch(:id) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/cancel_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/cancel_params.rb deleted file mode 100644 index 3223acf0..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/cancel_params.rb +++ /dev/null @@ -1,33 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class CancelParams - def initialize(id:) - @attributes = {} - - @attributes[:id] = id - - @attributes.freeze - end - - # - # The request id to cancel. - # - # @return [string | number] - def id - attributes.fetch(:id) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/change_annotation.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/change_annotation.rb deleted file mode 100644 index 75ac91d4..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/change_annotation.rb +++ /dev/null @@ -1,57 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # Additional information that describes document changes. - # - class ChangeAnnotation - def initialize(label:, needs_confirmation: nil, description: nil) - @attributes = {} - - @attributes[:label] = label - @attributes[:needsConfirmation] = needs_confirmation if needs_confirmation - @attributes[:description] = description if description - - @attributes.freeze - end - - # - # A human-readable string describing the actual change. The string - # is rendered prominent in the user interface. - # - # @return [string] - def label - attributes.fetch(:label) - end - - # - # A flag which indicates that user confirmation is needed - # before applying the change. - # - # @return [boolean] - def needs_confirmation - attributes.fetch(:needsConfirmation) - end - - # - # A human-readable string which is rendered less prominent in - # the user interface. - # - # @return [string] - def description - attributes.fetch(:description) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/client_capabilities.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/client_capabilities.rb deleted file mode 100644 index 0e3667ce..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/client_capabilities.rb +++ /dev/null @@ -1,78 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class ClientCapabilities - def initialize(workspace: nil, text_document: nil, notebook_document: nil, window: nil, general: nil, experimental: nil) - @attributes = {} - - @attributes[:workspace] = workspace if workspace - @attributes[:textDocument] = text_document if text_document - @attributes[:notebookDocument] = notebook_document if notebook_document - @attributes[:window] = window if window - @attributes[:general] = general if general - @attributes[:experimental] = experimental if experimental - - @attributes.freeze - end - - # - # Workspace specific client capabilities. - # - # @return [{ applyEdit?: boolean; workspaceEdit?: WorkspaceEditClientCapabilities; didChangeConfiguration?: DidChangeConfigurationClientCapabilities; ... 10 more ...; diagnostics?: DiagnosticWorkspaceClientCapabilities; }] - def workspace - attributes.fetch(:workspace) - end - - # - # Text document specific client capabilities. - # - # @return [TextDocumentClientCapabilities] - def text_document - attributes.fetch(:textDocument) - end - - # - # Capabilities specific to the notebook document support. - # - # @return [NotebookDocumentClientCapabilities] - def notebook_document - attributes.fetch(:notebookDocument) - end - - # - # Window specific client capabilities. - # - # @return [{ workDoneProgress?: boolean; showMessage?: ShowMessageRequestClientCapabilities; showDocument?: ShowDocumentClientCapabilities; }] - def window - attributes.fetch(:window) - end - - # - # General client capabilities. - # - # @return [{ staleRequestSupport?: { cancel: boolean; retryOnContentModified: string[]; }; regularExpressions?: RegularExpressionsClientCapabilities; markdown?: any; positionEncodings?: string[]; }] - def general - attributes.fetch(:general) - end - - # - # Experimental client capabilities. - # - # @return [LSPAny] - def experimental - attributes.fetch(:experimental) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/code_action.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/code_action.rb deleted file mode 100644 index c7876625..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/code_action.rb +++ /dev/null @@ -1,127 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # A code action represents a change that can be performed in code, e.g. to fix - # a problem or to refactor code. - # - # A CodeAction must set either `edit` and/or a `command`. If both are supplied, - # the `edit` is applied first, then the `command` is executed. - # - class CodeAction - def initialize(title:, kind: nil, diagnostics: nil, is_preferred: nil, disabled: nil, edit: nil, command: nil, data: nil) - @attributes = {} - - @attributes[:title] = title - @attributes[:kind] = kind if kind - @attributes[:diagnostics] = diagnostics if diagnostics - @attributes[:isPreferred] = is_preferred if is_preferred - @attributes[:disabled] = disabled if disabled - @attributes[:edit] = edit if edit - @attributes[:command] = command if command - @attributes[:data] = data if data - - @attributes.freeze - end - - # - # A short, human-readable, title for this code action. - # - # @return [string] - def title - attributes.fetch(:title) - end - - # - # The kind of the code action. - # - # Used to filter code actions. - # - # @return [string] - def kind - attributes.fetch(:kind) - end - - # - # The diagnostics that this code action resolves. - # - # @return [Diagnostic[]] - def diagnostics - attributes.fetch(:diagnostics) - end - - # - # Marks this as a preferred action. Preferred actions are used by the - # `auto fix` command and can be targeted by keybindings. - # - # A quick fix should be marked preferred if it properly addresses the - # underlying error. A refactoring should be marked preferred if it is the - # most reasonable choice of actions to take. - # - # @return [boolean] - def is_preferred - attributes.fetch(:isPreferred) - end - - # - # Marks that the code action cannot currently be applied. - # - # Clients should follow the following guidelines regarding disabled code - # actions: - # - # - Disabled code actions are not shown in automatic lightbulbs code - # action menus. - # - # - Disabled actions are shown as faded out in the code action menu when - # the user request a more specific type of code action, such as - # refactorings. - # - # - If the user has a keybinding that auto applies a code action and only - # a disabled code actions are returned, the client should show the user - # an error message with `reason` in the editor. - # - # @return [{ reason: string; }] - def disabled - attributes.fetch(:disabled) - end - - # - # The workspace edit this code action performs. - # - # @return [WorkspaceEdit] - def edit - attributes.fetch(:edit) - end - - # - # A command this code action executes. If a code action - # provides an edit and a command, first the edit is - # executed and then the command. - # - # @return [Command] - def command - attributes.fetch(:command) - end - - # - # A data entry field that is preserved on a code action between - # a `textDocument/codeAction` and a `codeAction/resolve` request. - # - # @return [LSPAny] - def data - attributes.fetch(:data) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/code_action_client_capabilities.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/code_action_client_capabilities.rb deleted file mode 100644 index 57168a7e..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/code_action_client_capabilities.rb +++ /dev/null @@ -1,95 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class CodeActionClientCapabilities - def initialize(dynamic_registration: nil, code_action_literal_support: nil, is_preferred_support: nil, disabled_support: nil, data_support: nil, resolve_support: nil, honors_change_annotations: nil) - @attributes = {} - - @attributes[:dynamicRegistration] = dynamic_registration if dynamic_registration - @attributes[:codeActionLiteralSupport] = code_action_literal_support if code_action_literal_support - @attributes[:isPreferredSupport] = is_preferred_support if is_preferred_support - @attributes[:disabledSupport] = disabled_support if disabled_support - @attributes[:dataSupport] = data_support if data_support - @attributes[:resolveSupport] = resolve_support if resolve_support - @attributes[:honorsChangeAnnotations] = honors_change_annotations if honors_change_annotations - - @attributes.freeze - end - - # - # Whether code action supports dynamic registration. - # - # @return [boolean] - def dynamic_registration - attributes.fetch(:dynamicRegistration) - end - - # - # The client supports code action literals as a valid - # response of the `textDocument/codeAction` request. - # - # @return [{ codeActionKind: { valueSet: string[]; }; }] - def code_action_literal_support - attributes.fetch(:codeActionLiteralSupport) - end - - # - # Whether code action supports the `isPreferred` property. - # - # @return [boolean] - def is_preferred_support - attributes.fetch(:isPreferredSupport) - end - - # - # Whether code action supports the `disabled` property. - # - # @return [boolean] - def disabled_support - attributes.fetch(:disabledSupport) - end - - # - # Whether code action supports the `data` property which is - # preserved between a `textDocument/codeAction` and a - # `codeAction/resolve` request. - # - # @return [boolean] - def data_support - attributes.fetch(:dataSupport) - end - - # - # Whether the client supports resolving additional code action - # properties via a separate `codeAction/resolve` request. - # - # @return [{ properties: string[]; }] - def resolve_support - attributes.fetch(:resolveSupport) - end - - # - # Whether the client honors the change annotations in - # text edits and resource operations returned via the - # `CodeAction#edit` property by for example presenting - # the workspace edit in the user interface and asking - # for confirmation. - # - # @return [boolean] - def honors_change_annotations - attributes.fetch(:honorsChangeAnnotations) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/code_action_context.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/code_action_context.rb deleted file mode 100644 index 18ae99ad..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/code_action_context.rb +++ /dev/null @@ -1,63 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # Contains additional diagnostic information about the context in which - # a code action is run. - # - class CodeActionContext - def initialize(diagnostics:, only: nil, trigger_kind: nil) - @attributes = {} - - @attributes[:diagnostics] = diagnostics - @attributes[:only] = only if only - @attributes[:triggerKind] = trigger_kind if trigger_kind - - @attributes.freeze - end - - # - # An array of diagnostics known on the client side overlapping the range - # provided to the `textDocument/codeAction` request. They are provided so - # that the server knows which errors are currently presented to the user - # for the given range. There is no guarantee that these accurately reflect - # the error state of the resource. The primary parameter - # to compute code actions is the provided range. - # - # @return [Diagnostic[]] - def diagnostics - attributes.fetch(:diagnostics) - end - - # - # Requested kind of actions to return. - # - # Actions not of this kind are filtered out by the client before being - # shown. So servers can omit computing them. - # - # @return [string[]] - def only - attributes.fetch(:only) - end - - # - # The reason why code actions were requested. - # - # @return [CodeActionTriggerKind] - def trigger_kind - attributes.fetch(:triggerKind) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/code_action_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/code_action_options.rb deleted file mode 100644 index 757fdd42..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/code_action_options.rb +++ /dev/null @@ -1,52 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class CodeActionOptions - def initialize(work_done_progress: nil, code_action_kinds: nil, resolve_provider: nil) - @attributes = {} - - @attributes[:workDoneProgress] = work_done_progress if work_done_progress - @attributes[:codeActionKinds] = code_action_kinds if code_action_kinds - @attributes[:resolveProvider] = resolve_provider if resolve_provider - - @attributes.freeze - end - - # @return [boolean] - def work_done_progress - attributes.fetch(:workDoneProgress) - end - - # - # CodeActionKinds that this server may return. - # - # The list of kinds may be generic, such as `CodeActionKind.Refactor`, - # or the server may list out every specific kind they provide. - # - # @return [string[]] - def code_action_kinds - attributes.fetch(:codeActionKinds) - end - - # - # The server provides support to resolve additional - # information for a code action. - # - # @return [boolean] - def resolve_provider - attributes.fetch(:resolveProvider) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/code_action_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/code_action_params.rb deleted file mode 100644 index 45131f2a..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/code_action_params.rb +++ /dev/null @@ -1,73 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # Params for the CodeActionRequest - # - class CodeActionParams - def initialize(work_done_token: nil, partial_result_token: nil, text_document:, range:, context:) - @attributes = {} - - @attributes[:workDoneToken] = work_done_token if work_done_token - @attributes[:partialResultToken] = partial_result_token if partial_result_token - @attributes[:textDocument] = text_document - @attributes[:range] = range - @attributes[:context] = context - - @attributes.freeze - end - - # - # An optional token that a server can use to report work done progress. - # - # @return [ProgressToken] - def work_done_token - attributes.fetch(:workDoneToken) - end - - # - # An optional token that a server can use to report partial results (e.g. - # streaming) to the client. - # - # @return [ProgressToken] - def partial_result_token - attributes.fetch(:partialResultToken) - end - - # - # The document in which the command was invoked. - # - # @return [TextDocumentIdentifier] - def text_document - attributes.fetch(:textDocument) - end - - # - # The range for which the command was invoked. - # - # @return [Range] - def range - attributes.fetch(:range) - end - - # - # Context carrying additional information. - # - # @return [CodeActionContext] - def context - attributes.fetch(:context) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/code_action_registration_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/code_action_registration_options.rb deleted file mode 100644 index c59ebf64..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/code_action_registration_options.rb +++ /dev/null @@ -1,62 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class CodeActionRegistrationOptions - def initialize(document_selector:, work_done_progress: nil, code_action_kinds: nil, resolve_provider: nil) - @attributes = {} - - @attributes[:documentSelector] = document_selector - @attributes[:workDoneProgress] = work_done_progress if work_done_progress - @attributes[:codeActionKinds] = code_action_kinds if code_action_kinds - @attributes[:resolveProvider] = resolve_provider if resolve_provider - - @attributes.freeze - end - - # - # A document selector to identify the scope of the registration. If set to - # null the document selector provided on the client side will be used. - # - # @return [DocumentSelector] - def document_selector - attributes.fetch(:documentSelector) - end - - # @return [boolean] - def work_done_progress - attributes.fetch(:workDoneProgress) - end - - # - # CodeActionKinds that this server may return. - # - # The list of kinds may be generic, such as `CodeActionKind.Refactor`, - # or the server may list out every specific kind they provide. - # - # @return [string[]] - def code_action_kinds - attributes.fetch(:codeActionKinds) - end - - # - # The server provides support to resolve additional - # information for a code action. - # - # @return [boolean] - def resolve_provider - attributes.fetch(:resolveProvider) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/code_description.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/code_description.rb deleted file mode 100644 index eb283138..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/code_description.rb +++ /dev/null @@ -1,36 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # Structure to capture a description for an error code. - # - class CodeDescription - def initialize(href:) - @attributes = {} - - @attributes[:href] = href - - @attributes.freeze - end - - # - # An URI to open with more information about the diagnostic error. - # - # @return [string] - def href - attributes.fetch(:href) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/code_lens.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/code_lens.rb deleted file mode 100644 index 7c2735fb..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/code_lens.rb +++ /dev/null @@ -1,61 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # A code lens represents a command that should be shown along with - # source text, like the number of references, a way to run tests, etc. - # - # A code lens is _unresolved_ when no command is associated to it. For - # performance reasons the creation of a code lens and resolving should be done - # in two stages. - # - class CodeLens - def initialize(range:, command: nil, data: nil) - @attributes = {} - - @attributes[:range] = range - @attributes[:command] = command if command - @attributes[:data] = data if data - - @attributes.freeze - end - - # - # The range in which this code lens is valid. Should only span a single - # line. - # - # @return [Range] - def range - attributes.fetch(:range) - end - - # - # The command this code lens represents. - # - # @return [Command] - def command - attributes.fetch(:command) - end - - # - # A data entry field that is preserved on a code lens item between - # a code lens and a code lens resolve request. - # - # @return [LSPAny] - def data - attributes.fetch(:data) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/code_lens_client_capabilities.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/code_lens_client_capabilities.rb deleted file mode 100644 index b59b8171..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/code_lens_client_capabilities.rb +++ /dev/null @@ -1,33 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class CodeLensClientCapabilities - def initialize(dynamic_registration: nil) - @attributes = {} - - @attributes[:dynamicRegistration] = dynamic_registration if dynamic_registration - - @attributes.freeze - end - - # - # Whether code lens supports dynamic registration. - # - # @return [boolean] - def dynamic_registration - attributes.fetch(:dynamicRegistration) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/code_lens_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/code_lens_options.rb deleted file mode 100644 index e923e862..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/code_lens_options.rb +++ /dev/null @@ -1,39 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class CodeLensOptions - def initialize(work_done_progress: nil, resolve_provider: nil) - @attributes = {} - - @attributes[:workDoneProgress] = work_done_progress if work_done_progress - @attributes[:resolveProvider] = resolve_provider if resolve_provider - - @attributes.freeze - end - - # @return [boolean] - def work_done_progress - attributes.fetch(:workDoneProgress) - end - - # - # Code lens has a resolve provider as well. - # - # @return [boolean] - def resolve_provider - attributes.fetch(:resolveProvider) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/code_lens_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/code_lens_params.rb deleted file mode 100644 index 0386acf7..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/code_lens_params.rb +++ /dev/null @@ -1,52 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class CodeLensParams - def initialize(work_done_token: nil, partial_result_token: nil, text_document:) - @attributes = {} - - @attributes[:workDoneToken] = work_done_token if work_done_token - @attributes[:partialResultToken] = partial_result_token if partial_result_token - @attributes[:textDocument] = text_document - - @attributes.freeze - end - - # - # An optional token that a server can use to report work done progress. - # - # @return [ProgressToken] - def work_done_token - attributes.fetch(:workDoneToken) - end - - # - # An optional token that a server can use to report partial results (e.g. - # streaming) to the client. - # - # @return [ProgressToken] - def partial_result_token - attributes.fetch(:partialResultToken) - end - - # - # The document to request code lens for. - # - # @return [TextDocumentIdentifier] - def text_document - attributes.fetch(:textDocument) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/code_lens_registration_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/code_lens_registration_options.rb deleted file mode 100644 index 7f99d391..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/code_lens_registration_options.rb +++ /dev/null @@ -1,49 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class CodeLensRegistrationOptions - def initialize(document_selector:, work_done_progress: nil, resolve_provider: nil) - @attributes = {} - - @attributes[:documentSelector] = document_selector - @attributes[:workDoneProgress] = work_done_progress if work_done_progress - @attributes[:resolveProvider] = resolve_provider if resolve_provider - - @attributes.freeze - end - - # - # A document selector to identify the scope of the registration. If set to - # null the document selector provided on the client side will be used. - # - # @return [DocumentSelector] - def document_selector - attributes.fetch(:documentSelector) - end - - # @return [boolean] - def work_done_progress - attributes.fetch(:workDoneProgress) - end - - # - # Code lens has a resolve provider as well. - # - # @return [boolean] - def resolve_provider - attributes.fetch(:resolveProvider) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/code_lens_workspace_client_capabilities.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/code_lens_workspace_client_capabilities.rb deleted file mode 100644 index c65f400f..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/code_lens_workspace_client_capabilities.rb +++ /dev/null @@ -1,39 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class CodeLensWorkspaceClientCapabilities - def initialize(refresh_support: nil) - @attributes = {} - - @attributes[:refreshSupport] = refresh_support if refresh_support - - @attributes.freeze - end - - # - # Whether the client implementation supports a refresh request sent from the - # server to the client. - # - # Note that this event is global and will force the client to refresh all - # code lenses currently shown. It should be used with absolute care and is - # useful for situation where a server for example detect a project wide - # change that requires such a calculation. - # - # @return [boolean] - def refresh_support - attributes.fetch(:refreshSupport) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/color.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/color.rb deleted file mode 100644 index 59443f10..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/color.rb +++ /dev/null @@ -1,63 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # Represents a color in RGBA space. - # - class Color - def initialize(red:, green:, blue:, alpha:) - @attributes = {} - - @attributes[:red] = red - @attributes[:green] = green - @attributes[:blue] = blue - @attributes[:alpha] = alpha - - @attributes.freeze - end - - # - # The red component of this color in the range [0-1]. - # - # @return [number] - def red - attributes.fetch(:red) - end - - # - # The green component of this color in the range [0-1]. - # - # @return [number] - def green - attributes.fetch(:green) - end - - # - # The blue component of this color in the range [0-1]. - # - # @return [number] - def blue - attributes.fetch(:blue) - end - - # - # The alpha component of this color in the range [0-1]. - # - # @return [number] - def alpha - attributes.fetch(:alpha) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/color_information.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/color_information.rb deleted file mode 100644 index 20f15bed..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/color_information.rb +++ /dev/null @@ -1,42 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class ColorInformation - def initialize(range:, color:) - @attributes = {} - - @attributes[:range] = range - @attributes[:color] = color - - @attributes.freeze - end - - # - # The range in the document where this color appears. - # - # @return [Range] - def range - attributes.fetch(:range) - end - - # - # The actual color value for this color range. - # - # @return [Color] - def color - attributes.fetch(:color) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/color_presentation.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/color_presentation.rb deleted file mode 100644 index 8dcaad26..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/color_presentation.rb +++ /dev/null @@ -1,57 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class ColorPresentation - def initialize(label:, text_edit: nil, additional_text_edits: nil) - @attributes = {} - - @attributes[:label] = label - @attributes[:textEdit] = text_edit if text_edit - @attributes[:additionalTextEdits] = additional_text_edits if additional_text_edits - - @attributes.freeze - end - - # - # The label of this color presentation. It will be shown on the color - # picker header. By default this is also the text that is inserted when - # selecting this color presentation. - # - # @return [string] - def label - attributes.fetch(:label) - end - - # - # An [edit](#TextEdit) which is applied to a document when selecting - # this presentation for the color. When `falsy` the - # [label](#ColorPresentation.label) is used. - # - # @return [TextEdit] - def text_edit - attributes.fetch(:textEdit) - end - - # - # An optional array of additional [text edits](#TextEdit) that are applied - # when selecting this color presentation. Edits must not overlap with the - # main [edit](#ColorPresentation.textEdit) nor with themselves. - # - # @return [TextEdit[]] - def additional_text_edits - attributes.fetch(:additionalTextEdits) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/color_presentation_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/color_presentation_params.rb deleted file mode 100644 index 7a100a94..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/color_presentation_params.rb +++ /dev/null @@ -1,70 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class ColorPresentationParams - def initialize(work_done_token: nil, partial_result_token: nil, text_document:, color:, range:) - @attributes = {} - - @attributes[:workDoneToken] = work_done_token if work_done_token - @attributes[:partialResultToken] = partial_result_token if partial_result_token - @attributes[:textDocument] = text_document - @attributes[:color] = color - @attributes[:range] = range - - @attributes.freeze - end - - # - # An optional token that a server can use to report work done progress. - # - # @return [ProgressToken] - def work_done_token - attributes.fetch(:workDoneToken) - end - - # - # An optional token that a server can use to report partial results (e.g. - # streaming) to the client. - # - # @return [ProgressToken] - def partial_result_token - attributes.fetch(:partialResultToken) - end - - # - # The text document. - # - # @return [TextDocumentIdentifier] - def text_document - attributes.fetch(:textDocument) - end - - # - # The color information to request presentations for. - # - # @return [Color] - def color - attributes.fetch(:color) - end - - # - # The range where the color would be inserted. Serves as a context. - # - # @return [Range] - def range - attributes.fetch(:range) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/command.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/command.rb deleted file mode 100644 index 8728ade0..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/command.rb +++ /dev/null @@ -1,52 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class Command - def initialize(title:, command:, arguments: nil) - @attributes = {} - - @attributes[:title] = title - @attributes[:command] = command - @attributes[:arguments] = arguments if arguments - - @attributes.freeze - end - - # - # Title of the command, like `save`. - # - # @return [string] - def title - attributes.fetch(:title) - end - - # - # The identifier of the actual command handler. - # - # @return [string] - def command - attributes.fetch(:command) - end - - # - # Arguments that the command handler should be - # invoked with. - # - # @return [LSPAny[]] - def arguments - attributes.fetch(:arguments) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/completion_client_capabilities.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/completion_client_capabilities.rb deleted file mode 100644 index fef70965..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/completion_client_capabilities.rb +++ /dev/null @@ -1,79 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class CompletionClientCapabilities - def initialize(dynamic_registration: nil, completion_item: nil, completion_item_kind: nil, context_support: nil, insert_text_mode: nil, completion_list: nil) - @attributes = {} - - @attributes[:dynamicRegistration] = dynamic_registration if dynamic_registration - @attributes[:completionItem] = completion_item if completion_item - @attributes[:completionItemKind] = completion_item_kind if completion_item_kind - @attributes[:contextSupport] = context_support if context_support - @attributes[:insertTextMode] = insert_text_mode if insert_text_mode - @attributes[:completionList] = completion_list if completion_list - - @attributes.freeze - end - - # - # Whether completion supports dynamic registration. - # - # @return [boolean] - def dynamic_registration - attributes.fetch(:dynamicRegistration) - end - - # - # The client supports the following `CompletionItem` specific - # capabilities. - # - # @return [{ snippetSupport?: boolean; commitCharactersSupport?: boolean; documentationFormat?: MarkupKind[]; deprecatedSupport?: boolean; preselectSupport?: boolean; tagSupport?: { valueSet: 1[]; }; insertReplaceSupport?: boolean; resolveSupport?: { ...; }; insertTextModeSupport?: { ...; }; labelDetailsSupport?: boolean; }] - def completion_item - attributes.fetch(:completionItem) - end - - # @return [{ valueSet?: CompletionItemKind[]; }] - def completion_item_kind - attributes.fetch(:completionItemKind) - end - - # - # The client supports to send additional context information for a - # `textDocument/completion` request. - # - # @return [boolean] - def context_support - attributes.fetch(:contextSupport) - end - - # - # The client's default when the completion item doesn't provide a - # `insertTextMode` property. - # - # @return [InsertTextMode] - def insert_text_mode - attributes.fetch(:insertTextMode) - end - - # - # The client supports the following `CompletionList` specific - # capabilities. - # - # @return [{ itemDefaults?: string[]; }] - def completion_list - attributes.fetch(:completionList) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/completion_context.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/completion_context.rb deleted file mode 100644 index 292f3310..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/completion_context.rb +++ /dev/null @@ -1,48 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # Contains additional information about the context in which a completion - # request is triggered. - # - class CompletionContext - def initialize(trigger_kind:, trigger_character: nil) - @attributes = {} - - @attributes[:triggerKind] = trigger_kind - @attributes[:triggerCharacter] = trigger_character if trigger_character - - @attributes.freeze - end - - # - # How the completion was triggered. - # - # @return [CompletionTriggerKind] - def trigger_kind - attributes.fetch(:triggerKind) - end - - # - # The trigger character (a single character) that has trigger code - # complete. Is undefined if - # `triggerKind !== CompletionTriggerKind.TriggerCharacter` - # - # @return [string] - def trigger_character - attributes.fetch(:triggerCharacter) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/completion_item.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/completion_item.rb deleted file mode 100644 index 16b78d80..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/completion_item.rb +++ /dev/null @@ -1,267 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class CompletionItem - def initialize(label:, label_details: nil, kind: nil, tags: nil, detail: nil, documentation: nil, deprecated: nil, preselect: nil, sort_text: nil, filter_text: nil, insert_text: nil, insert_text_format: nil, insert_text_mode: nil, text_edit: nil, text_edit_text: nil, additional_text_edits: nil, commit_characters: nil, command: nil, data: nil) - @attributes = {} - - @attributes[:label] = label - @attributes[:labelDetails] = label_details if label_details - @attributes[:kind] = kind if kind - @attributes[:tags] = tags if tags - @attributes[:detail] = detail if detail - @attributes[:documentation] = documentation if documentation - @attributes[:deprecated] = deprecated if deprecated - @attributes[:preselect] = preselect if preselect - @attributes[:sortText] = sort_text if sort_text - @attributes[:filterText] = filter_text if filter_text - @attributes[:insertText] = insert_text if insert_text - @attributes[:insertTextFormat] = insert_text_format if insert_text_format - @attributes[:insertTextMode] = insert_text_mode if insert_text_mode - @attributes[:textEdit] = text_edit if text_edit - @attributes[:textEditText] = text_edit_text if text_edit_text - @attributes[:additionalTextEdits] = additional_text_edits if additional_text_edits - @attributes[:commitCharacters] = commit_characters if commit_characters - @attributes[:command] = command if command - @attributes[:data] = data if data - - @attributes.freeze - end - - # - # The label of this completion item. - # - # The label property is also by default the text that - # is inserted when selecting this completion. - # - # If label details are provided the label itself should - # be an unqualified name of the completion item. - # - # @return [string] - def label - attributes.fetch(:label) - end - - # - # Additional details for the label - # - # @return [CompletionItemLabelDetails] - def label_details - attributes.fetch(:labelDetails) - end - - # - # The kind of this completion item. Based of the kind - # an icon is chosen by the editor. The standardized set - # of available values is defined in `CompletionItemKind`. - # - # @return [CompletionItemKind] - def kind - attributes.fetch(:kind) - end - - # - # Tags for this completion item. - # - # @return [1[]] - def tags - attributes.fetch(:tags) - end - - # - # A human-readable string with additional information - # about this item, like type or symbol information. - # - # @return [string] - def detail - attributes.fetch(:detail) - end - - # - # A human-readable string that represents a doc-comment. - # - # @return [string | MarkupContent] - def documentation - attributes.fetch(:documentation) - end - - # - # Indicates if this item is deprecated. - # - # @return [boolean] - def deprecated - attributes.fetch(:deprecated) - end - - # - # Select this item when showing. - # - # *Note* that only one completion item can be selected and that the - # tool / client decides which item that is. The rule is that the *first* - # item of those that match best is selected. - # - # @return [boolean] - def preselect - attributes.fetch(:preselect) - end - - # - # A string that should be used when comparing this item - # with other items. When `falsy` the label is used - # as the sort text for this item. - # - # @return [string] - def sort_text - attributes.fetch(:sortText) - end - - # - # A string that should be used when filtering a set of - # completion items. When `falsy` the label is used as the - # filter text for this item. - # - # @return [string] - def filter_text - attributes.fetch(:filterText) - end - - # - # A string that should be inserted into a document when selecting - # this completion. When `falsy` the label is used as the insert text - # for this item. - # - # The `insertText` is subject to interpretation by the client side. - # Some tools might not take the string literally. For example - # VS Code when code complete is requested in this example - # `con` and a completion item with an `insertText` of - # `console` is provided it will only insert `sole`. Therefore it is - # recommended to use `textEdit` instead since it avoids additional client - # side interpretation. - # - # @return [string] - def insert_text - attributes.fetch(:insertText) - end - - # - # The format of the insert text. The format applies to both the - # `insertText` property and the `newText` property of a provided - # `textEdit`. If omitted defaults to `InsertTextFormat.PlainText`. - # - # Please note that the insertTextFormat doesn't apply to - # `additionalTextEdits`. - # - # @return [InsertTextFormat] - def insert_text_format - attributes.fetch(:insertTextFormat) - end - - # - # How whitespace and indentation is handled during completion - # item insertion. If not provided the client's default value depends on - # the `textDocument.completion.insertTextMode` client capability. - # - # @return [InsertTextMode] - def insert_text_mode - attributes.fetch(:insertTextMode) - end - - # - # An edit which is applied to a document when selecting this completion. - # When an edit is provided the value of `insertText` is ignored. - # - # *Note:* The range of the edit must be a single line range and it must - # contain the position at which completion has been requested. - # - # Most editors support two different operations when accepting a completion - # item. One is to insert a completion text and the other is to replace an - # existing text with a completion text. Since this can usually not be - # predetermined by a server it can report both ranges. Clients need to - # signal support for `InsertReplaceEdit`s via the - # `textDocument.completion.completionItem.insertReplaceSupport` client - # capability property. - # - # *Note 1:* The text edit's range as well as both ranges from an insert - # replace edit must be a [single line] and they must contain the position - # at which completion has been requested. - # *Note 2:* If an `InsertReplaceEdit` is returned the edit's insert range - # must be a prefix of the edit's replace range, that means it must be - # contained and starting at the same position. - # - # @return [TextEdit | InsertReplaceEdit] - def text_edit - attributes.fetch(:textEdit) - end - - # - # The edit text used if the completion item is part of a CompletionList and - # CompletionList defines an item default for the text edit range. - # - # Clients will only honor this property if they opt into completion list - # item defaults using the capability `completionList.itemDefaults`. - # - # If not provided and a list's default range is provided the label - # property is used as a text. - # - # @return [string] - def text_edit_text - attributes.fetch(:textEditText) - end - - # - # An optional array of additional text edits that are applied when - # selecting this completion. Edits must not overlap (including the same - # insert position) with the main edit nor with themselves. - # - # Additional text edits should be used to change text unrelated to the - # current cursor position (for example adding an import statement at the - # top of the file if the completion item will insert an unqualified type). - # - # @return [TextEdit[]] - def additional_text_edits - attributes.fetch(:additionalTextEdits) - end - - # - # An optional set of characters that when pressed while this completion is - # active will accept it first and then type that character. *Note* that all - # commit characters should have `length=1` and that superfluous characters - # will be ignored. - # - # @return [string[]] - def commit_characters - attributes.fetch(:commitCharacters) - end - - # - # An optional command that is executed *after* inserting this completion. - # *Note* that additional modifications to the current document should be - # described with the additionalTextEdits-property. - # - # @return [Command] - def command - attributes.fetch(:command) - end - - # - # A data entry field that is preserved on a completion item between - # a completion and a completion resolve request. - # - # @return [LSPAny] - def data - attributes.fetch(:data) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/completion_item_label_details.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/completion_item_label_details.rb deleted file mode 100644 index a26d3ca0..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/completion_item_label_details.rb +++ /dev/null @@ -1,49 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # Additional details for a completion item label. - # - class CompletionItemLabelDetails - def initialize(detail: nil, description: nil) - @attributes = {} - - @attributes[:detail] = detail if detail - @attributes[:description] = description if description - - @attributes.freeze - end - - # - # An optional string which is rendered less prominently directly after - # {@link CompletionItem.label label}, without any spacing. Should be - # used for function signatures or type annotations. - # - # @return [string] - def detail - attributes.fetch(:detail) - end - - # - # An optional string which is rendered less prominently after - # {@link CompletionItemLabelDetails.detail}. Should be used for fully qualified - # names or file path. - # - # @return [string] - def description - attributes.fetch(:description) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/completion_list.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/completion_list.rb deleted file mode 100644 index f08067cc..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/completion_list.rb +++ /dev/null @@ -1,69 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # Represents a collection of [completion items](#CompletionItem) to be - # presented in the editor. - # - class CompletionList - def initialize(is_incomplete:, item_defaults: nil, items:) - @attributes = {} - - @attributes[:isIncomplete] = is_incomplete - @attributes[:itemDefaults] = item_defaults if item_defaults - @attributes[:items] = items - - @attributes.freeze - end - - # - # This list is not complete. Further typing should result in recomputing - # this list. - # - # Recomputed lists have all their items replaced (not appended) in the - # incomplete completion sessions. - # - # @return [boolean] - def is_incomplete - attributes.fetch(:isIncomplete) - end - - # - # In many cases the items of an actual completion result share the same - # value for properties like `commitCharacters` or the range of a text - # edit. A completion list can therefore define item defaults which will - # be used if a completion item itself doesn't specify the value. - # - # If a completion list specifies a default value and a completion item - # also specifies a corresponding value the one from the item is used. - # - # Servers are only allowed to return default values if the client - # signals support for this via the `completionList.itemDefaults` - # capability. - # - # @return [{ commitCharacters?: string[]; editRange?: Range | { insert: Range; replace: Range; }; insertTextFormat?: InsertTextFormat; insertTextMode?: InsertTextMode; data?: LSPAny; }] - def item_defaults - attributes.fetch(:itemDefaults) - end - - # - # The completion items. - # - # @return [CompletionItem[]] - def items - attributes.fetch(:items) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/completion_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/completion_options.rb deleted file mode 100644 index 5446c090..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/completion_options.rb +++ /dev/null @@ -1,87 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # Completion options. - # - class CompletionOptions - def initialize(work_done_progress: nil, trigger_characters: nil, all_commit_characters: nil, resolve_provider: nil, completion_item: nil) - @attributes = {} - - @attributes[:workDoneProgress] = work_done_progress if work_done_progress - @attributes[:triggerCharacters] = trigger_characters if trigger_characters - @attributes[:allCommitCharacters] = all_commit_characters if all_commit_characters - @attributes[:resolveProvider] = resolve_provider if resolve_provider - @attributes[:completionItem] = completion_item if completion_item - - @attributes.freeze - end - - # @return [boolean] - def work_done_progress - attributes.fetch(:workDoneProgress) - end - - # - # The additional characters, beyond the defaults provided by the client (typically - # [a-zA-Z]), that should automatically trigger a completion request. For example - # `.` in JavaScript represents the beginning of an object property or method and is - # thus a good candidate for triggering a completion request. - # - # Most tools trigger a completion request automatically without explicitly - # requesting it using a keyboard shortcut (e.g. Ctrl+Space). Typically they - # do so when the user starts to type an identifier. For example if the user - # types `c` in a JavaScript file code complete will automatically pop up - # present `console` besides others as a completion item. Characters that - # make up identifiers don't need to be listed here. - # - # @return [string[]] - def trigger_characters - attributes.fetch(:triggerCharacters) - end - - # - # The list of all possible characters that commit a completion. This field - # can be used if clients don't support individual commit characters per - # completion item. See client capability - # `completion.completionItem.commitCharactersSupport`. - # - # If a server provides both `allCommitCharacters` and commit characters on - # an individual completion item the ones on the completion item win. - # - # @return [string[]] - def all_commit_characters - attributes.fetch(:allCommitCharacters) - end - - # - # The server provides support to resolve additional - # information for a completion item. - # - # @return [boolean] - def resolve_provider - attributes.fetch(:resolveProvider) - end - - # - # The server supports the following `CompletionItem` specific - # capabilities. - # - # @return [{ labelDetailsSupport?: boolean; }] - def completion_item - attributes.fetch(:completionItem) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/completion_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/completion_params.rb deleted file mode 100644 index 1bd3b084..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/completion_params.rb +++ /dev/null @@ -1,72 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class CompletionParams - def initialize(text_document:, position:, work_done_token: nil, partial_result_token: nil, context: nil) - @attributes = {} - - @attributes[:textDocument] = text_document - @attributes[:position] = position - @attributes[:workDoneToken] = work_done_token if work_done_token - @attributes[:partialResultToken] = partial_result_token if partial_result_token - @attributes[:context] = context if context - - @attributes.freeze - end - - # - # The text document. - # - # @return [TextDocumentIdentifier] - def text_document - attributes.fetch(:textDocument) - end - - # - # The position inside the text document. - # - # @return [Position] - def position - attributes.fetch(:position) - end - - # - # An optional token that a server can use to report work done progress. - # - # @return [ProgressToken] - def work_done_token - attributes.fetch(:workDoneToken) - end - - # - # An optional token that a server can use to report partial results (e.g. - # streaming) to the client. - # - # @return [ProgressToken] - def partial_result_token - attributes.fetch(:partialResultToken) - end - - # - # The completion context. This is only available if the client specifies - # to send this using the client capability - # `completion.contextSupport === true` - # - # @return [CompletionContext] - def context - attributes.fetch(:context) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/completion_registration_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/completion_registration_options.rb deleted file mode 100644 index 0fd92c6b..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/completion_registration_options.rb +++ /dev/null @@ -1,94 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class CompletionRegistrationOptions - def initialize(document_selector:, work_done_progress: nil, trigger_characters: nil, all_commit_characters: nil, resolve_provider: nil, completion_item: nil) - @attributes = {} - - @attributes[:documentSelector] = document_selector - @attributes[:workDoneProgress] = work_done_progress if work_done_progress - @attributes[:triggerCharacters] = trigger_characters if trigger_characters - @attributes[:allCommitCharacters] = all_commit_characters if all_commit_characters - @attributes[:resolveProvider] = resolve_provider if resolve_provider - @attributes[:completionItem] = completion_item if completion_item - - @attributes.freeze - end - - # - # A document selector to identify the scope of the registration. If set to - # null the document selector provided on the client side will be used. - # - # @return [DocumentSelector] - def document_selector - attributes.fetch(:documentSelector) - end - - # @return [boolean] - def work_done_progress - attributes.fetch(:workDoneProgress) - end - - # - # The additional characters, beyond the defaults provided by the client (typically - # [a-zA-Z]), that should automatically trigger a completion request. For example - # `.` in JavaScript represents the beginning of an object property or method and is - # thus a good candidate for triggering a completion request. - # - # Most tools trigger a completion request automatically without explicitly - # requesting it using a keyboard shortcut (e.g. Ctrl+Space). Typically they - # do so when the user starts to type an identifier. For example if the user - # types `c` in a JavaScript file code complete will automatically pop up - # present `console` besides others as a completion item. Characters that - # make up identifiers don't need to be listed here. - # - # @return [string[]] - def trigger_characters - attributes.fetch(:triggerCharacters) - end - - # - # The list of all possible characters that commit a completion. This field - # can be used if clients don't support individual commit characters per - # completion item. See client capability - # `completion.completionItem.commitCharactersSupport`. - # - # If a server provides both `allCommitCharacters` and commit characters on - # an individual completion item the ones on the completion item win. - # - # @return [string[]] - def all_commit_characters - attributes.fetch(:allCommitCharacters) - end - - # - # The server provides support to resolve additional - # information for a completion item. - # - # @return [boolean] - def resolve_provider - attributes.fetch(:resolveProvider) - end - - # - # The server supports the following `CompletionItem` specific - # capabilities. - # - # @return [{ labelDetailsSupport?: boolean; }] - def completion_item - attributes.fetch(:completionItem) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/configuration_item.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/configuration_item.rb deleted file mode 100644 index 484bacab..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/configuration_item.rb +++ /dev/null @@ -1,42 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class ConfigurationItem - def initialize(scope_uri: nil, section: nil) - @attributes = {} - - @attributes[:scopeUri] = scope_uri if scope_uri - @attributes[:section] = section if section - - @attributes.freeze - end - - # - # The scope to get the configuration section for. - # - # @return [string] - def scope_uri - attributes.fetch(:scopeUri) - end - - # - # The configuration section asked for. - # - # @return [string] - def section - attributes.fetch(:section) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/configuration_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/configuration_params.rb deleted file mode 100644 index 66d3d5c1..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/configuration_params.rb +++ /dev/null @@ -1,30 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class ConfigurationParams - def initialize(items:) - @attributes = {} - - @attributes[:items] = items - - @attributes.freeze - end - - # @return [ConfigurationItem[]] - def items - attributes.fetch(:items) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/create_file.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/create_file.rb deleted file mode 100644 index ca247db5..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/create_file.rb +++ /dev/null @@ -1,63 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # Create file operation - # - class CreateFile - def initialize(kind:, uri:, options: nil, annotation_id: nil) - @attributes = {} - - @attributes[:kind] = kind - @attributes[:uri] = uri - @attributes[:options] = options if options - @attributes[:annotationId] = annotation_id if annotation_id - - @attributes.freeze - end - - # - # A create - # - # @return ["create"] - def kind - attributes.fetch(:kind) - end - - # - # The resource to create. - # - # @return [string] - def uri - attributes.fetch(:uri) - end - - # - # Additional options - # - # @return [CreateFileOptions] - def options - attributes.fetch(:options) - end - - # - # An optional annotation identifier describing the operation. - # - # @return [string] - def annotation_id - attributes.fetch(:annotationId) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/create_file_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/create_file_options.rb deleted file mode 100644 index 41920f90..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/create_file_options.rb +++ /dev/null @@ -1,45 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # Options to create a file. - # - class CreateFileOptions - def initialize(overwrite: nil, ignore_if_exists: nil) - @attributes = {} - - @attributes[:overwrite] = overwrite if overwrite - @attributes[:ignoreIfExists] = ignore_if_exists if ignore_if_exists - - @attributes.freeze - end - - # - # Overwrite existing file. Overwrite wins over `ignoreIfExists` - # - # @return [boolean] - def overwrite - attributes.fetch(:overwrite) - end - - # - # Ignore if exists. - # - # @return [boolean] - def ignore_if_exists - attributes.fetch(:ignoreIfExists) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/create_files_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/create_files_params.rb deleted file mode 100644 index 2af89112..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/create_files_params.rb +++ /dev/null @@ -1,37 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # The parameters sent in notifications/requests for user-initiated creation - # of files. - # - class CreateFilesParams - def initialize(files:) - @attributes = {} - - @attributes[:files] = files - - @attributes.freeze - end - - # - # An array of all files/folders created in this operation. - # - # @return [FileCreate[]] - def files - attributes.fetch(:files) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/declaration_client_capabilities.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/declaration_client_capabilities.rb deleted file mode 100644 index 06aba3a4..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/declaration_client_capabilities.rb +++ /dev/null @@ -1,44 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class DeclarationClientCapabilities - def initialize(dynamic_registration: nil, link_support: nil) - @attributes = {} - - @attributes[:dynamicRegistration] = dynamic_registration if dynamic_registration - @attributes[:linkSupport] = link_support if link_support - - @attributes.freeze - end - - # - # Whether declaration supports dynamic registration. If this is set to - # `true` the client supports the new `DeclarationRegistrationOptions` - # return value for the corresponding server capability as well. - # - # @return [boolean] - def dynamic_registration - attributes.fetch(:dynamicRegistration) - end - - # - # The client supports additional metadata in the form of declaration links. - # - # @return [boolean] - def link_support - attributes.fetch(:linkSupport) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/declaration_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/declaration_options.rb deleted file mode 100644 index d919e00e..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/declaration_options.rb +++ /dev/null @@ -1,30 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class DeclarationOptions - def initialize(work_done_progress: nil) - @attributes = {} - - @attributes[:workDoneProgress] = work_done_progress if work_done_progress - - @attributes.freeze - end - - # @return [boolean] - def work_done_progress - attributes.fetch(:workDoneProgress) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/declaration_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/declaration_params.rb deleted file mode 100644 index 422ac45a..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/declaration_params.rb +++ /dev/null @@ -1,61 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class DeclarationParams - def initialize(text_document:, position:, work_done_token: nil, partial_result_token: nil) - @attributes = {} - - @attributes[:textDocument] = text_document - @attributes[:position] = position - @attributes[:workDoneToken] = work_done_token if work_done_token - @attributes[:partialResultToken] = partial_result_token if partial_result_token - - @attributes.freeze - end - - # - # The text document. - # - # @return [TextDocumentIdentifier] - def text_document - attributes.fetch(:textDocument) - end - - # - # The position inside the text document. - # - # @return [Position] - def position - attributes.fetch(:position) - end - - # - # An optional token that a server can use to report work done progress. - # - # @return [ProgressToken] - def work_done_token - attributes.fetch(:workDoneToken) - end - - # - # An optional token that a server can use to report partial results (e.g. - # streaming) to the client. - # - # @return [ProgressToken] - def partial_result_token - attributes.fetch(:partialResultToken) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/declaration_registration_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/declaration_registration_options.rb deleted file mode 100644 index 5730a6a8..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/declaration_registration_options.rb +++ /dev/null @@ -1,50 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class DeclarationRegistrationOptions - def initialize(work_done_progress: nil, document_selector:, id: nil) - @attributes = {} - - @attributes[:workDoneProgress] = work_done_progress if work_done_progress - @attributes[:documentSelector] = document_selector - @attributes[:id] = id if id - - @attributes.freeze - end - - # @return [boolean] - def work_done_progress - attributes.fetch(:workDoneProgress) - end - - # - # A document selector to identify the scope of the registration. If set to - # null the document selector provided on the client side will be used. - # - # @return [DocumentSelector] - def document_selector - attributes.fetch(:documentSelector) - end - - # - # The id used to register the request. The id can be used to deregister - # the request again. See also Registration#id. - # - # @return [string] - def id - attributes.fetch(:id) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/definition_client_capabilities.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/definition_client_capabilities.rb deleted file mode 100644 index 96ccda48..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/definition_client_capabilities.rb +++ /dev/null @@ -1,42 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class DefinitionClientCapabilities - def initialize(dynamic_registration: nil, link_support: nil) - @attributes = {} - - @attributes[:dynamicRegistration] = dynamic_registration if dynamic_registration - @attributes[:linkSupport] = link_support if link_support - - @attributes.freeze - end - - # - # Whether definition supports dynamic registration. - # - # @return [boolean] - def dynamic_registration - attributes.fetch(:dynamicRegistration) - end - - # - # The client supports additional metadata in the form of definition links. - # - # @return [boolean] - def link_support - attributes.fetch(:linkSupport) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/definition_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/definition_options.rb deleted file mode 100644 index 2bf8471b..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/definition_options.rb +++ /dev/null @@ -1,30 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class DefinitionOptions - def initialize(work_done_progress: nil) - @attributes = {} - - @attributes[:workDoneProgress] = work_done_progress if work_done_progress - - @attributes.freeze - end - - # @return [boolean] - def work_done_progress - attributes.fetch(:workDoneProgress) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/definition_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/definition_params.rb deleted file mode 100644 index f23a9229..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/definition_params.rb +++ /dev/null @@ -1,61 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class DefinitionParams - def initialize(text_document:, position:, work_done_token: nil, partial_result_token: nil) - @attributes = {} - - @attributes[:textDocument] = text_document - @attributes[:position] = position - @attributes[:workDoneToken] = work_done_token if work_done_token - @attributes[:partialResultToken] = partial_result_token if partial_result_token - - @attributes.freeze - end - - # - # The text document. - # - # @return [TextDocumentIdentifier] - def text_document - attributes.fetch(:textDocument) - end - - # - # The position inside the text document. - # - # @return [Position] - def position - attributes.fetch(:position) - end - - # - # An optional token that a server can use to report work done progress. - # - # @return [ProgressToken] - def work_done_token - attributes.fetch(:workDoneToken) - end - - # - # An optional token that a server can use to report partial results (e.g. - # streaming) to the client. - # - # @return [ProgressToken] - def partial_result_token - attributes.fetch(:partialResultToken) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/definition_registration_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/definition_registration_options.rb deleted file mode 100644 index cd6f86aa..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/definition_registration_options.rb +++ /dev/null @@ -1,40 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class DefinitionRegistrationOptions - def initialize(document_selector:, work_done_progress: nil) - @attributes = {} - - @attributes[:documentSelector] = document_selector - @attributes[:workDoneProgress] = work_done_progress if work_done_progress - - @attributes.freeze - end - - # - # A document selector to identify the scope of the registration. If set to - # null the document selector provided on the client side will be used. - # - # @return [DocumentSelector] - def document_selector - attributes.fetch(:documentSelector) - end - - # @return [boolean] - def work_done_progress - attributes.fetch(:workDoneProgress) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/delete_file.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/delete_file.rb deleted file mode 100644 index 27bee5ff..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/delete_file.rb +++ /dev/null @@ -1,63 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # Delete file operation - # - class DeleteFile - def initialize(kind:, uri:, options: nil, annotation_id: nil) - @attributes = {} - - @attributes[:kind] = kind - @attributes[:uri] = uri - @attributes[:options] = options if options - @attributes[:annotationId] = annotation_id if annotation_id - - @attributes.freeze - end - - # - # A delete - # - # @return ["delete"] - def kind - attributes.fetch(:kind) - end - - # - # The file to delete. - # - # @return [string] - def uri - attributes.fetch(:uri) - end - - # - # Delete options. - # - # @return [DeleteFileOptions] - def options - attributes.fetch(:options) - end - - # - # An optional annotation identifier describing the operation. - # - # @return [string] - def annotation_id - attributes.fetch(:annotationId) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/delete_file_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/delete_file_options.rb deleted file mode 100644 index 1d81757c..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/delete_file_options.rb +++ /dev/null @@ -1,45 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # Delete file options - # - class DeleteFileOptions - def initialize(recursive: nil, ignore_if_not_exists: nil) - @attributes = {} - - @attributes[:recursive] = recursive if recursive - @attributes[:ignoreIfNotExists] = ignore_if_not_exists if ignore_if_not_exists - - @attributes.freeze - end - - # - # Delete the content recursively if a folder is denoted. - # - # @return [boolean] - def recursive - attributes.fetch(:recursive) - end - - # - # Ignore the operation if the file doesn't exist. - # - # @return [boolean] - def ignore_if_not_exists - attributes.fetch(:ignoreIfNotExists) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/delete_files_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/delete_files_params.rb deleted file mode 100644 index b9da26c3..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/delete_files_params.rb +++ /dev/null @@ -1,37 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # The parameters sent in notifications/requests for user-initiated deletes - # of files. - # - class DeleteFilesParams - def initialize(files:) - @attributes = {} - - @attributes[:files] = files - - @attributes.freeze - end - - # - # An array of all files/folders deleted in this operation. - # - # @return [FileDelete[]] - def files - attributes.fetch(:files) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/diagnostic.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/diagnostic.rb deleted file mode 100644 index 289ac73f..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/diagnostic.rb +++ /dev/null @@ -1,110 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class Diagnostic - def initialize(range:, severity: nil, code: nil, code_description: nil, source: nil, message:, tags: nil, related_information: nil, data: nil) - @attributes = {} - - @attributes[:range] = range - @attributes[:severity] = severity if severity - @attributes[:code] = code if code - @attributes[:codeDescription] = code_description if code_description - @attributes[:source] = source if source - @attributes[:message] = message - @attributes[:tags] = tags if tags - @attributes[:relatedInformation] = related_information if related_information - @attributes[:data] = data if data - - @attributes.freeze - end - - # - # The range at which the message applies. - # - # @return [Range] - def range - attributes.fetch(:range) - end - - # - # The diagnostic's severity. Can be omitted. If omitted it is up to the - # client to interpret diagnostics as error, warning, info or hint. - # - # @return [DiagnosticSeverity] - def severity - attributes.fetch(:severity) - end - - # - # The diagnostic's code, which might appear in the user interface. - # - # @return [string | number] - def code - attributes.fetch(:code) - end - - # - # An optional property to describe the error code. - # - # @return [CodeDescription] - def code_description - attributes.fetch(:codeDescription) - end - - # - # A human-readable string describing the source of this - # diagnostic, e.g. 'typescript' or 'super lint'. - # - # @return [string] - def source - attributes.fetch(:source) - end - - # - # The diagnostic's message. - # - # @return [string] - def message - attributes.fetch(:message) - end - - # - # Additional metadata about the diagnostic. - # - # @return [DiagnosticTag[]] - def tags - attributes.fetch(:tags) - end - - # - # An array of related diagnostic information, e.g. when symbol-names within - # a scope collide all definitions can be marked via this property. - # - # @return [DiagnosticRelatedInformation[]] - def related_information - attributes.fetch(:relatedInformation) - end - - # - # A data entry field that is preserved between a - # `textDocument/publishDiagnostics` notification and - # `textDocument/codeAction` request. - # - # @return [unknown] - def data - attributes.fetch(:data) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/diagnostic_client_capabilities.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/diagnostic_client_capabilities.rb deleted file mode 100644 index 6cad2ac4..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/diagnostic_client_capabilities.rb +++ /dev/null @@ -1,49 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # Client capabilities specific to diagnostic pull requests. - # - class DiagnosticClientCapabilities - def initialize(dynamic_registration: nil, related_document_support: nil) - @attributes = {} - - @attributes[:dynamicRegistration] = dynamic_registration if dynamic_registration - @attributes[:relatedDocumentSupport] = related_document_support if related_document_support - - @attributes.freeze - end - - # - # Whether implementation supports dynamic registration. If this is set to - # `true` the client supports the new - # `(TextDocumentRegistrationOptions & StaticRegistrationOptions)` - # return value for the corresponding server capability as well. - # - # @return [boolean] - def dynamic_registration - attributes.fetch(:dynamicRegistration) - end - - # - # Whether the clients supports related documents for document diagnostic - # pulls. - # - # @return [boolean] - def related_document_support - attributes.fetch(:relatedDocumentSupport) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/diagnostic_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/diagnostic_options.rb deleted file mode 100644 index 03096372..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/diagnostic_options.rb +++ /dev/null @@ -1,64 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # Diagnostic options. - # - class DiagnosticOptions - def initialize(work_done_progress: nil, identifier: nil, inter_file_dependencies:, workspace_diagnostics:) - @attributes = {} - - @attributes[:workDoneProgress] = work_done_progress if work_done_progress - @attributes[:identifier] = identifier if identifier - @attributes[:interFileDependencies] = inter_file_dependencies - @attributes[:workspaceDiagnostics] = workspace_diagnostics - - @attributes.freeze - end - - # @return [boolean] - def work_done_progress - attributes.fetch(:workDoneProgress) - end - - # - # An optional identifier under which the diagnostics are - # managed by the client. - # - # @return [string] - def identifier - attributes.fetch(:identifier) - end - - # - # Whether the language has inter file dependencies meaning that - # editing code in one file can result in a different diagnostic - # set in another file. Inter file dependencies are common for - # most programming languages and typically uncommon for linters. - # - # @return [boolean] - def inter_file_dependencies - attributes.fetch(:interFileDependencies) - end - - # - # The server provides support for workspace diagnostics as well. - # - # @return [boolean] - def workspace_diagnostics - attributes.fetch(:workspaceDiagnostics) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/diagnostic_registration_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/diagnostic_registration_options.rb deleted file mode 100644 index 95b36341..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/diagnostic_registration_options.rb +++ /dev/null @@ -1,84 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # Diagnostic registration options. - # - class DiagnosticRegistrationOptions - def initialize(document_selector:, work_done_progress: nil, identifier: nil, inter_file_dependencies:, workspace_diagnostics:, id: nil) - @attributes = {} - - @attributes[:documentSelector] = document_selector - @attributes[:workDoneProgress] = work_done_progress if work_done_progress - @attributes[:identifier] = identifier if identifier - @attributes[:interFileDependencies] = inter_file_dependencies - @attributes[:workspaceDiagnostics] = workspace_diagnostics - @attributes[:id] = id if id - - @attributes.freeze - end - - # - # A document selector to identify the scope of the registration. If set to - # null the document selector provided on the client side will be used. - # - # @return [DocumentSelector] - def document_selector - attributes.fetch(:documentSelector) - end - - # @return [boolean] - def work_done_progress - attributes.fetch(:workDoneProgress) - end - - # - # An optional identifier under which the diagnostics are - # managed by the client. - # - # @return [string] - def identifier - attributes.fetch(:identifier) - end - - # - # Whether the language has inter file dependencies meaning that - # editing code in one file can result in a different diagnostic - # set in another file. Inter file dependencies are common for - # most programming languages and typically uncommon for linters. - # - # @return [boolean] - def inter_file_dependencies - attributes.fetch(:interFileDependencies) - end - - # - # The server provides support for workspace diagnostics as well. - # - # @return [boolean] - def workspace_diagnostics - attributes.fetch(:workspaceDiagnostics) - end - - # - # The id used to register the request. The id can be used to deregister - # the request again. See also Registration#id. - # - # @return [string] - def id - attributes.fetch(:id) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/diagnostic_related_information.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/diagnostic_related_information.rb deleted file mode 100644 index ffbc28ce..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/diagnostic_related_information.rb +++ /dev/null @@ -1,47 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # Represents a related message and source code location for a diagnostic. - # This should be used to point to code locations that cause or are related to - # a diagnostics, e.g when duplicating a symbol in a scope. - # - class DiagnosticRelatedInformation - def initialize(location:, message:) - @attributes = {} - - @attributes[:location] = location - @attributes[:message] = message - - @attributes.freeze - end - - # - # The location of this related diagnostic information. - # - # @return [Location] - def location - attributes.fetch(:location) - end - - # - # The message of this related diagnostic information. - # - # @return [string] - def message - attributes.fetch(:message) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/diagnostic_server_cancellation_data.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/diagnostic_server_cancellation_data.rb deleted file mode 100644 index 23e15285..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/diagnostic_server_cancellation_data.rb +++ /dev/null @@ -1,33 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # Cancellation data returned from a diagnostic request. - # - class DiagnosticServerCancellationData - def initialize(retrigger_request:) - @attributes = {} - - @attributes[:retriggerRequest] = retrigger_request - - @attributes.freeze - end - - # @return [boolean] - def retrigger_request - attributes.fetch(:retriggerRequest) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/diagnostic_workspace_client_capabilities.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/diagnostic_workspace_client_capabilities.rb deleted file mode 100644 index 020434b4..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/diagnostic_workspace_client_capabilities.rb +++ /dev/null @@ -1,42 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # Workspace client capabilities specific to diagnostic pull requests. - # - class DiagnosticWorkspaceClientCapabilities - def initialize(refresh_support: nil) - @attributes = {} - - @attributes[:refreshSupport] = refresh_support if refresh_support - - @attributes.freeze - end - - # - # Whether the client implementation supports a refresh request sent from - # the server to the client. - # - # Note that this event is global and will force the client to refresh all - # pulled diagnostics currently shown. It should be used with absolute care - # and is useful for situation where a server for example detects a project - # wide change that requires such a calculation. - # - # @return [boolean] - def refresh_support - attributes.fetch(:refreshSupport) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/did_change_configuration_client_capabilities.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/did_change_configuration_client_capabilities.rb deleted file mode 100644 index 59d3a264..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/did_change_configuration_client_capabilities.rb +++ /dev/null @@ -1,33 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class DidChangeConfigurationClientCapabilities - def initialize(dynamic_registration: nil) - @attributes = {} - - @attributes[:dynamicRegistration] = dynamic_registration if dynamic_registration - - @attributes.freeze - end - - # - # Did change configuration notification supports dynamic registration. - # - # @return [boolean] - def dynamic_registration - attributes.fetch(:dynamicRegistration) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/did_change_configuration_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/did_change_configuration_params.rb deleted file mode 100644 index 66287334..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/did_change_configuration_params.rb +++ /dev/null @@ -1,33 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class DidChangeConfigurationParams - def initialize(settings:) - @attributes = {} - - @attributes[:settings] = settings - - @attributes.freeze - end - - # - # The actual changed settings - # - # @return [LSPAny] - def settings - attributes.fetch(:settings) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/did_change_notebook_document_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/did_change_notebook_document_params.rb deleted file mode 100644 index 087f2365..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/did_change_notebook_document_params.rb +++ /dev/null @@ -1,56 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # The params sent in a change notebook document notification. - # - class DidChangeNotebookDocumentParams - def initialize(notebook_document:, change:) - @attributes = {} - - @attributes[:notebookDocument] = notebook_document - @attributes[:change] = change - - @attributes.freeze - end - - # - # The notebook document that did change. The version number points - # to the version after all provided changes have been applied. - # - # @return [VersionedNotebookDocumentIdentifier] - def notebook_document - attributes.fetch(:notebookDocument) - end - - # - # The actual changes to the notebook document. - # - # The change describes single state change to the notebook document. - # So it moves a notebook document, its cells and its cell text document - # contents from state S to S'. - # - # To mirror the content of a notebook using change events use the - # following approach: - # - start with the same initial content - # - apply the 'notebookDocument/didChange' notifications in the order - # you receive them. - # - # @return [NotebookDocumentChangeEvent] - def change - attributes.fetch(:change) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/did_change_text_document_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/did_change_text_document_params.rb deleted file mode 100644 index 4ef782d0..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/did_change_text_document_params.rb +++ /dev/null @@ -1,56 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class DidChangeTextDocumentParams - def initialize(text_document:, content_changes:) - @attributes = {} - - @attributes[:textDocument] = text_document - @attributes[:contentChanges] = content_changes - - @attributes.freeze - end - - # - # The document that did change. The version number points - # to the version after all provided content changes have - # been applied. - # - # @return [VersionedTextDocumentIdentifier] - def text_document - attributes.fetch(:textDocument) - end - - # - # The actual content changes. The content changes describe single state - # changes to the document. So if there are two content changes c1 (at - # array index 0) and c2 (at array index 1) for a document in state S then - # c1 moves the document from S to S' and c2 from S' to S''. So c1 is - # computed on the state S and c2 is computed on the state S'. - # - # To mirror the content of a document using change events use the following - # approach: - # - start with the same initial content - # - apply the 'textDocument/didChange' notifications in the order you - # receive them. - # - apply the `TextDocumentContentChangeEvent`s in a single notification - # in the order you receive them. - # - # @return [TextDocumentContentChangeEvent[]] - def content_changes - attributes.fetch(:contentChanges) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/did_change_watched_files_client_capabilities.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/did_change_watched_files_client_capabilities.rb deleted file mode 100644 index 8ed6c186..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/did_change_watched_files_client_capabilities.rb +++ /dev/null @@ -1,45 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class DidChangeWatchedFilesClientCapabilities - def initialize(dynamic_registration: nil, relative_pattern_support: nil) - @attributes = {} - - @attributes[:dynamicRegistration] = dynamic_registration if dynamic_registration - @attributes[:relativePatternSupport] = relative_pattern_support if relative_pattern_support - - @attributes.freeze - end - - # - # Did change watched files notification supports dynamic registration. - # Please note that the current protocol doesn't support static - # configuration for file changes from the server side. - # - # @return [boolean] - def dynamic_registration - attributes.fetch(:dynamicRegistration) - end - - # - # Whether the client has support for relative patterns - # or not. - # - # @return [boolean] - def relative_pattern_support - attributes.fetch(:relativePatternSupport) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/did_change_watched_files_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/did_change_watched_files_params.rb deleted file mode 100644 index 4a47ca4c..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/did_change_watched_files_params.rb +++ /dev/null @@ -1,33 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class DidChangeWatchedFilesParams - def initialize(changes:) - @attributes = {} - - @attributes[:changes] = changes - - @attributes.freeze - end - - # - # The actual file events. - # - # @return [FileEvent[]] - def changes - attributes.fetch(:changes) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/did_change_watched_files_registration_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/did_change_watched_files_registration_options.rb deleted file mode 100644 index f78e3f68..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/did_change_watched_files_registration_options.rb +++ /dev/null @@ -1,36 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # Describe options to be used when registering for file system change events. - # - class DidChangeWatchedFilesRegistrationOptions - def initialize(watchers:) - @attributes = {} - - @attributes[:watchers] = watchers - - @attributes.freeze - end - - # - # The watchers to register. - # - # @return [FileSystemWatcher[]] - def watchers - attributes.fetch(:watchers) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/did_change_workspace_folders_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/did_change_workspace_folders_params.rb deleted file mode 100644 index 4ea9b7db..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/did_change_workspace_folders_params.rb +++ /dev/null @@ -1,33 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class DidChangeWorkspaceFoldersParams - def initialize(event:) - @attributes = {} - - @attributes[:event] = event - - @attributes.freeze - end - - # - # The actual workspace folder change event. - # - # @return [WorkspaceFoldersChangeEvent] - def event - attributes.fetch(:event) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/did_close_notebook_document_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/did_close_notebook_document_params.rb deleted file mode 100644 index 5045c914..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/did_close_notebook_document_params.rb +++ /dev/null @@ -1,46 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # The params sent in a close notebook document notification. - # - class DidCloseNotebookDocumentParams - def initialize(notebook_document:, cell_text_documents:) - @attributes = {} - - @attributes[:notebookDocument] = notebook_document - @attributes[:cellTextDocuments] = cell_text_documents - - @attributes.freeze - end - - # - # The notebook document that got closed. - # - # @return [NotebookDocumentIdentifier] - def notebook_document - attributes.fetch(:notebookDocument) - end - - # - # The text documents that represent the content - # of a notebook cell that got closed. - # - # @return [TextDocumentIdentifier[]] - def cell_text_documents - attributes.fetch(:cellTextDocuments) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/did_close_text_document_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/did_close_text_document_params.rb deleted file mode 100644 index f98c3f8c..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/did_close_text_document_params.rb +++ /dev/null @@ -1,33 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class DidCloseTextDocumentParams - def initialize(text_document:) - @attributes = {} - - @attributes[:textDocument] = text_document - - @attributes.freeze - end - - # - # The document that was closed. - # - # @return [TextDocumentIdentifier] - def text_document - attributes.fetch(:textDocument) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/did_open_notebook_document_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/did_open_notebook_document_params.rb deleted file mode 100644 index bd48497d..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/did_open_notebook_document_params.rb +++ /dev/null @@ -1,46 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # The params sent in an open notebook document notification. - # - class DidOpenNotebookDocumentParams - def initialize(notebook_document:, cell_text_documents:) - @attributes = {} - - @attributes[:notebookDocument] = notebook_document - @attributes[:cellTextDocuments] = cell_text_documents - - @attributes.freeze - end - - # - # The notebook document that got opened. - # - # @return [NotebookDocument] - def notebook_document - attributes.fetch(:notebookDocument) - end - - # - # The text documents that represent the content - # of a notebook cell. - # - # @return [TextDocumentItem[]] - def cell_text_documents - attributes.fetch(:cellTextDocuments) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/did_open_text_document_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/did_open_text_document_params.rb deleted file mode 100644 index 9ca6ec9a..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/did_open_text_document_params.rb +++ /dev/null @@ -1,33 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class DidOpenTextDocumentParams - def initialize(text_document:) - @attributes = {} - - @attributes[:textDocument] = text_document - - @attributes.freeze - end - - # - # The document that was opened. - # - # @return [TextDocumentItem] - def text_document - attributes.fetch(:textDocument) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/did_save_notebook_document_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/did_save_notebook_document_params.rb deleted file mode 100644 index 36726f99..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/did_save_notebook_document_params.rb +++ /dev/null @@ -1,36 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # The params sent in a save notebook document notification. - # - class DidSaveNotebookDocumentParams - def initialize(notebook_document:) - @attributes = {} - - @attributes[:notebookDocument] = notebook_document - - @attributes.freeze - end - - # - # The notebook document that got saved. - # - # @return [NotebookDocumentIdentifier] - def notebook_document - attributes.fetch(:notebookDocument) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/did_save_text_document_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/did_save_text_document_params.rb deleted file mode 100644 index 43523afc..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/did_save_text_document_params.rb +++ /dev/null @@ -1,43 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class DidSaveTextDocumentParams - def initialize(text_document:, text: nil) - @attributes = {} - - @attributes[:textDocument] = text_document - @attributes[:text] = text if text - - @attributes.freeze - end - - # - # The document that was saved. - # - # @return [TextDocumentIdentifier] - def text_document - attributes.fetch(:textDocument) - end - - # - # Optional the content when saved. Depends on the includeText value - # when the save notification was requested. - # - # @return [string] - def text - attributes.fetch(:text) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_color_client_capabilities.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_color_client_capabilities.rb deleted file mode 100644 index bb3d8dec..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_color_client_capabilities.rb +++ /dev/null @@ -1,33 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class DocumentColorClientCapabilities - def initialize(dynamic_registration: nil) - @attributes = {} - - @attributes[:dynamicRegistration] = dynamic_registration if dynamic_registration - - @attributes.freeze - end - - # - # Whether document color supports dynamic registration. - # - # @return [boolean] - def dynamic_registration - attributes.fetch(:dynamicRegistration) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_color_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_color_options.rb deleted file mode 100644 index 1fa00f0a..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_color_options.rb +++ /dev/null @@ -1,30 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class DocumentColorOptions - def initialize(work_done_progress: nil) - @attributes = {} - - @attributes[:workDoneProgress] = work_done_progress if work_done_progress - - @attributes.freeze - end - - # @return [boolean] - def work_done_progress - attributes.fetch(:workDoneProgress) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_color_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_color_params.rb deleted file mode 100644 index ead61c4c..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_color_params.rb +++ /dev/null @@ -1,52 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class DocumentColorParams - def initialize(work_done_token: nil, partial_result_token: nil, text_document:) - @attributes = {} - - @attributes[:workDoneToken] = work_done_token if work_done_token - @attributes[:partialResultToken] = partial_result_token if partial_result_token - @attributes[:textDocument] = text_document - - @attributes.freeze - end - - # - # An optional token that a server can use to report work done progress. - # - # @return [ProgressToken] - def work_done_token - attributes.fetch(:workDoneToken) - end - - # - # An optional token that a server can use to report partial results (e.g. - # streaming) to the client. - # - # @return [ProgressToken] - def partial_result_token - attributes.fetch(:partialResultToken) - end - - # - # The text document. - # - # @return [TextDocumentIdentifier] - def text_document - attributes.fetch(:textDocument) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_color_registration_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_color_registration_options.rb deleted file mode 100644 index 1af3533e..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_color_registration_options.rb +++ /dev/null @@ -1,50 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class DocumentColorRegistrationOptions - def initialize(document_selector:, id: nil, work_done_progress: nil) - @attributes = {} - - @attributes[:documentSelector] = document_selector - @attributes[:id] = id if id - @attributes[:workDoneProgress] = work_done_progress if work_done_progress - - @attributes.freeze - end - - # - # A document selector to identify the scope of the registration. If set to - # null the document selector provided on the client side will be used. - # - # @return [DocumentSelector] - def document_selector - attributes.fetch(:documentSelector) - end - - # - # The id used to register the request. The id can be used to deregister - # the request again. See also Registration#id. - # - # @return [string] - def id - attributes.fetch(:id) - end - - # @return [boolean] - def work_done_progress - attributes.fetch(:workDoneProgress) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_diagnostic_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_diagnostic_params.rb deleted file mode 100644 index 298851e0..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_diagnostic_params.rb +++ /dev/null @@ -1,73 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # Parameters of the document diagnostic request. - # - class DocumentDiagnosticParams - def initialize(work_done_token: nil, partial_result_token: nil, text_document:, identifier: nil, previous_result_id: nil) - @attributes = {} - - @attributes[:workDoneToken] = work_done_token if work_done_token - @attributes[:partialResultToken] = partial_result_token if partial_result_token - @attributes[:textDocument] = text_document - @attributes[:identifier] = identifier if identifier - @attributes[:previousResultId] = previous_result_id if previous_result_id - - @attributes.freeze - end - - # - # An optional token that a server can use to report work done progress. - # - # @return [ProgressToken] - def work_done_token - attributes.fetch(:workDoneToken) - end - - # - # An optional token that a server can use to report partial results (e.g. - # streaming) to the client. - # - # @return [ProgressToken] - def partial_result_token - attributes.fetch(:partialResultToken) - end - - # - # The text document. - # - # @return [TextDocumentIdentifier] - def text_document - attributes.fetch(:textDocument) - end - - # - # The additional identifier provided during registration. - # - # @return [string] - def identifier - attributes.fetch(:identifier) - end - - # - # The result id of a previous response if provided. - # - # @return [string] - def previous_result_id - attributes.fetch(:previousResultId) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_diagnostic_report_partial_result.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_diagnostic_report_partial_result.rb deleted file mode 100644 index c8f9b67f..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_diagnostic_report_partial_result.rb +++ /dev/null @@ -1,33 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # A partial result for a document diagnostic report. - # - class DocumentDiagnosticReportPartialResult - def initialize(related_documents:) - @attributes = {} - - @attributes[:relatedDocuments] = related_documents - - @attributes.freeze - end - - # @return [{ [uri: string]: FullDocumentDiagnosticReport | UnchangedDocumentDiagnosticReport; }] - def related_documents - attributes.fetch(:relatedDocuments) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_filter.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_filter.rb deleted file mode 100644 index c116666f..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_filter.rb +++ /dev/null @@ -1,63 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class DocumentFilter - def initialize(language: nil, scheme: nil, pattern: nil) - @attributes = {} - - @attributes[:language] = language if language - @attributes[:scheme] = scheme if scheme - @attributes[:pattern] = pattern if pattern - - @attributes.freeze - end - - # - # A language id, like `typescript`. - # - # @return [string] - def language - attributes.fetch(:language) - end - - # - # A Uri [scheme](#Uri.scheme), like `file` or `untitled`. - # - # @return [string] - def scheme - attributes.fetch(:scheme) - end - - # - # A glob pattern, like `*.{ts,js}`. - # - # Glob patterns can have the following syntax: - # - `*` to match one or more characters in a path segment - # - `?` to match on one character in a path segment - # - `**` to match any number of path segments, including none - # - `{}` to group sub patterns into an OR expression. (e.g. `**​/*.{ts,js}` - # matches all TypeScript and JavaScript files) - # - `[]` to declare a range of characters to match in a path segment - # (e.g., `example.[0-9]` to match on `example.0`, `example.1`, …) - # - `[!...]` to negate a range of characters to match in a path segment - # (e.g., `example.[!0-9]` to match on `example.a`, `example.b`, but - # not `example.0`) - # - # @return [string] - def pattern - attributes.fetch(:pattern) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_formatting_client_capabilities.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_formatting_client_capabilities.rb deleted file mode 100644 index 9fd9f83e..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_formatting_client_capabilities.rb +++ /dev/null @@ -1,33 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class DocumentFormattingClientCapabilities - def initialize(dynamic_registration: nil) - @attributes = {} - - @attributes[:dynamicRegistration] = dynamic_registration if dynamic_registration - - @attributes.freeze - end - - # - # Whether formatting supports dynamic registration. - # - # @return [boolean] - def dynamic_registration - attributes.fetch(:dynamicRegistration) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_formatting_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_formatting_options.rb deleted file mode 100644 index e8780868..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_formatting_options.rb +++ /dev/null @@ -1,30 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class DocumentFormattingOptions - def initialize(work_done_progress: nil) - @attributes = {} - - @attributes[:workDoneProgress] = work_done_progress if work_done_progress - - @attributes.freeze - end - - # @return [boolean] - def work_done_progress - attributes.fetch(:workDoneProgress) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_formatting_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_formatting_params.rb deleted file mode 100644 index e6627428..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_formatting_params.rb +++ /dev/null @@ -1,51 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class DocumentFormattingParams - def initialize(work_done_token: nil, text_document:, options:) - @attributes = {} - - @attributes[:workDoneToken] = work_done_token if work_done_token - @attributes[:textDocument] = text_document - @attributes[:options] = options - - @attributes.freeze - end - - # - # An optional token that a server can use to report work done progress. - # - # @return [ProgressToken] - def work_done_token - attributes.fetch(:workDoneToken) - end - - # - # The document to format. - # - # @return [TextDocumentIdentifier] - def text_document - attributes.fetch(:textDocument) - end - - # - # The format options. - # - # @return [FormattingOptions] - def options - attributes.fetch(:options) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_formatting_registration_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_formatting_registration_options.rb deleted file mode 100644 index 7e6d7c35..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_formatting_registration_options.rb +++ /dev/null @@ -1,40 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class DocumentFormattingRegistrationOptions - def initialize(document_selector:, work_done_progress: nil) - @attributes = {} - - @attributes[:documentSelector] = document_selector - @attributes[:workDoneProgress] = work_done_progress if work_done_progress - - @attributes.freeze - end - - # - # A document selector to identify the scope of the registration. If set to - # null the document selector provided on the client side will be used. - # - # @return [DocumentSelector] - def document_selector - attributes.fetch(:documentSelector) - end - - # @return [boolean] - def work_done_progress - attributes.fetch(:workDoneProgress) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_highlight.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_highlight.rb deleted file mode 100644 index d4347b81..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_highlight.rb +++ /dev/null @@ -1,47 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # A document highlight is a range inside a text document which deserves - # special attention. Usually a document highlight is visualized by changing - # the background color of its range. - # - class DocumentHighlight - def initialize(range:, kind: nil) - @attributes = {} - - @attributes[:range] = range - @attributes[:kind] = kind if kind - - @attributes.freeze - end - - # - # The range this highlight applies to. - # - # @return [Range] - def range - attributes.fetch(:range) - end - - # - # The highlight kind, default is DocumentHighlightKind.Text. - # - # @return [DocumentHighlightKind] - def kind - attributes.fetch(:kind) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_highlight_client_capabilities.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_highlight_client_capabilities.rb deleted file mode 100644 index d8f56118..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_highlight_client_capabilities.rb +++ /dev/null @@ -1,33 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class DocumentHighlightClientCapabilities - def initialize(dynamic_registration: nil) - @attributes = {} - - @attributes[:dynamicRegistration] = dynamic_registration if dynamic_registration - - @attributes.freeze - end - - # - # Whether document highlight supports dynamic registration. - # - # @return [boolean] - def dynamic_registration - attributes.fetch(:dynamicRegistration) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_highlight_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_highlight_options.rb deleted file mode 100644 index 97898eb4..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_highlight_options.rb +++ /dev/null @@ -1,30 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class DocumentHighlightOptions - def initialize(work_done_progress: nil) - @attributes = {} - - @attributes[:workDoneProgress] = work_done_progress if work_done_progress - - @attributes.freeze - end - - # @return [boolean] - def work_done_progress - attributes.fetch(:workDoneProgress) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_highlight_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_highlight_params.rb deleted file mode 100644 index 7ba70c0a..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_highlight_params.rb +++ /dev/null @@ -1,61 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class DocumentHighlightParams - def initialize(text_document:, position:, work_done_token: nil, partial_result_token: nil) - @attributes = {} - - @attributes[:textDocument] = text_document - @attributes[:position] = position - @attributes[:workDoneToken] = work_done_token if work_done_token - @attributes[:partialResultToken] = partial_result_token if partial_result_token - - @attributes.freeze - end - - # - # The text document. - # - # @return [TextDocumentIdentifier] - def text_document - attributes.fetch(:textDocument) - end - - # - # The position inside the text document. - # - # @return [Position] - def position - attributes.fetch(:position) - end - - # - # An optional token that a server can use to report work done progress. - # - # @return [ProgressToken] - def work_done_token - attributes.fetch(:workDoneToken) - end - - # - # An optional token that a server can use to report partial results (e.g. - # streaming) to the client. - # - # @return [ProgressToken] - def partial_result_token - attributes.fetch(:partialResultToken) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_highlight_registration_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_highlight_registration_options.rb deleted file mode 100644 index 2268431f..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_highlight_registration_options.rb +++ /dev/null @@ -1,40 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class DocumentHighlightRegistrationOptions - def initialize(document_selector:, work_done_progress: nil) - @attributes = {} - - @attributes[:documentSelector] = document_selector - @attributes[:workDoneProgress] = work_done_progress if work_done_progress - - @attributes.freeze - end - - # - # A document selector to identify the scope of the registration. If set to - # null the document selector provided on the client side will be used. - # - # @return [DocumentSelector] - def document_selector - attributes.fetch(:documentSelector) - end - - # @return [boolean] - def work_done_progress - attributes.fetch(:workDoneProgress) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_link.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_link.rb deleted file mode 100644 index 2a2ecb23..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_link.rb +++ /dev/null @@ -1,70 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # A document link is a range in a text document that links to an internal or - # external resource, like another text document or a web site. - # - class DocumentLink - def initialize(range:, target: nil, tooltip: nil, data: nil) - @attributes = {} - - @attributes[:range] = range - @attributes[:target] = target if target - @attributes[:tooltip] = tooltip if tooltip - @attributes[:data] = data if data - - @attributes.freeze - end - - # - # The range this link applies to. - # - # @return [Range] - def range - attributes.fetch(:range) - end - - # - # The uri this link points to. If missing a resolve request is sent later. - # - # @return [string] - def target - attributes.fetch(:target) - end - - # - # The tooltip text when you hover over this link. - # - # If a tooltip is provided, is will be displayed in a string that includes - # instructions on how to trigger the link, such as `{0} (ctrl + click)`. - # The specific instructions vary depending on OS, user settings, and - # localization. - # - # @return [string] - def tooltip - attributes.fetch(:tooltip) - end - - # - # A data entry field that is preserved on a document link between a - # DocumentLinkRequest and a DocumentLinkResolveRequest. - # - # @return [LSPAny] - def data - attributes.fetch(:data) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_link_client_capabilities.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_link_client_capabilities.rb deleted file mode 100644 index 5b72cf1f..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_link_client_capabilities.rb +++ /dev/null @@ -1,42 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class DocumentLinkClientCapabilities - def initialize(dynamic_registration: nil, tooltip_support: nil) - @attributes = {} - - @attributes[:dynamicRegistration] = dynamic_registration if dynamic_registration - @attributes[:tooltipSupport] = tooltip_support if tooltip_support - - @attributes.freeze - end - - # - # Whether document link supports dynamic registration. - # - # @return [boolean] - def dynamic_registration - attributes.fetch(:dynamicRegistration) - end - - # - # Whether the client supports the `tooltip` property on `DocumentLink`. - # - # @return [boolean] - def tooltip_support - attributes.fetch(:tooltipSupport) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_link_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_link_options.rb deleted file mode 100644 index c8af140f..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_link_options.rb +++ /dev/null @@ -1,39 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class DocumentLinkOptions - def initialize(work_done_progress: nil, resolve_provider: nil) - @attributes = {} - - @attributes[:workDoneProgress] = work_done_progress if work_done_progress - @attributes[:resolveProvider] = resolve_provider if resolve_provider - - @attributes.freeze - end - - # @return [boolean] - def work_done_progress - attributes.fetch(:workDoneProgress) - end - - # - # Document links have a resolve provider as well. - # - # @return [boolean] - def resolve_provider - attributes.fetch(:resolveProvider) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_link_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_link_params.rb deleted file mode 100644 index b3596cbd..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_link_params.rb +++ /dev/null @@ -1,52 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class DocumentLinkParams - def initialize(work_done_token: nil, partial_result_token: nil, text_document:) - @attributes = {} - - @attributes[:workDoneToken] = work_done_token if work_done_token - @attributes[:partialResultToken] = partial_result_token if partial_result_token - @attributes[:textDocument] = text_document - - @attributes.freeze - end - - # - # An optional token that a server can use to report work done progress. - # - # @return [ProgressToken] - def work_done_token - attributes.fetch(:workDoneToken) - end - - # - # An optional token that a server can use to report partial results (e.g. - # streaming) to the client. - # - # @return [ProgressToken] - def partial_result_token - attributes.fetch(:partialResultToken) - end - - # - # The document to provide document links for. - # - # @return [TextDocumentIdentifier] - def text_document - attributes.fetch(:textDocument) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_link_registration_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_link_registration_options.rb deleted file mode 100644 index 593c21ce..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_link_registration_options.rb +++ /dev/null @@ -1,49 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class DocumentLinkRegistrationOptions - def initialize(document_selector:, work_done_progress: nil, resolve_provider: nil) - @attributes = {} - - @attributes[:documentSelector] = document_selector - @attributes[:workDoneProgress] = work_done_progress if work_done_progress - @attributes[:resolveProvider] = resolve_provider if resolve_provider - - @attributes.freeze - end - - # - # A document selector to identify the scope of the registration. If set to - # null the document selector provided on the client side will be used. - # - # @return [DocumentSelector] - def document_selector - attributes.fetch(:documentSelector) - end - - # @return [boolean] - def work_done_progress - attributes.fetch(:workDoneProgress) - end - - # - # Document links have a resolve provider as well. - # - # @return [boolean] - def resolve_provider - attributes.fetch(:resolveProvider) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_on_type_formatting_client_capabilities.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_on_type_formatting_client_capabilities.rb deleted file mode 100644 index 0941148f..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_on_type_formatting_client_capabilities.rb +++ /dev/null @@ -1,33 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class DocumentOnTypeFormattingClientCapabilities - def initialize(dynamic_registration: nil) - @attributes = {} - - @attributes[:dynamicRegistration] = dynamic_registration if dynamic_registration - - @attributes.freeze - end - - # - # Whether on type formatting supports dynamic registration. - # - # @return [boolean] - def dynamic_registration - attributes.fetch(:dynamicRegistration) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_on_type_formatting_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_on_type_formatting_options.rb deleted file mode 100644 index a5f096c4..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_on_type_formatting_options.rb +++ /dev/null @@ -1,42 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class DocumentOnTypeFormattingOptions - def initialize(first_trigger_character:, more_trigger_character: nil) - @attributes = {} - - @attributes[:firstTriggerCharacter] = first_trigger_character - @attributes[:moreTriggerCharacter] = more_trigger_character if more_trigger_character - - @attributes.freeze - end - - # - # A character on which formatting should be triggered, like `{`. - # - # @return [string] - def first_trigger_character - attributes.fetch(:firstTriggerCharacter) - end - - # - # More trigger characters. - # - # @return [string[]] - def more_trigger_character - attributes.fetch(:moreTriggerCharacter) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_on_type_formatting_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_on_type_formatting_params.rb deleted file mode 100644 index 36f48a6d..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_on_type_formatting_params.rb +++ /dev/null @@ -1,65 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class DocumentOnTypeFormattingParams - def initialize(text_document:, position:, ch:, options:) - @attributes = {} - - @attributes[:textDocument] = text_document - @attributes[:position] = position - @attributes[:ch] = ch - @attributes[:options] = options - - @attributes.freeze - end - - # - # The document to format. - # - # @return [TextDocumentIdentifier] - def text_document - attributes.fetch(:textDocument) - end - - # - # The position around which the on type formatting should happen. - # This is not necessarily the exact position where the character denoted - # by the property `ch` got typed. - # - # @return [Position] - def position - attributes.fetch(:position) - end - - # - # The character that has been typed that triggered the formatting - # on type request. That is not necessarily the last character that - # got inserted into the document since the client could auto insert - # characters as well (e.g. like automatic brace completion). - # - # @return [string] - def ch - attributes.fetch(:ch) - end - - # - # The formatting options. - # - # @return [FormattingOptions] - def options - attributes.fetch(:options) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_on_type_formatting_registration_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_on_type_formatting_registration_options.rb deleted file mode 100644 index 1008261e..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_on_type_formatting_registration_options.rb +++ /dev/null @@ -1,52 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class DocumentOnTypeFormattingRegistrationOptions - def initialize(document_selector:, first_trigger_character:, more_trigger_character: nil) - @attributes = {} - - @attributes[:documentSelector] = document_selector - @attributes[:firstTriggerCharacter] = first_trigger_character - @attributes[:moreTriggerCharacter] = more_trigger_character if more_trigger_character - - @attributes.freeze - end - - # - # A document selector to identify the scope of the registration. If set to - # null the document selector provided on the client side will be used. - # - # @return [DocumentSelector] - def document_selector - attributes.fetch(:documentSelector) - end - - # - # A character on which formatting should be triggered, like `{`. - # - # @return [string] - def first_trigger_character - attributes.fetch(:firstTriggerCharacter) - end - - # - # More trigger characters. - # - # @return [string[]] - def more_trigger_character - attributes.fetch(:moreTriggerCharacter) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_range_formatting_client_capabilities.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_range_formatting_client_capabilities.rb deleted file mode 100644 index 92299215..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_range_formatting_client_capabilities.rb +++ /dev/null @@ -1,33 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class DocumentRangeFormattingClientCapabilities - def initialize(dynamic_registration: nil) - @attributes = {} - - @attributes[:dynamicRegistration] = dynamic_registration if dynamic_registration - - @attributes.freeze - end - - # - # Whether formatting supports dynamic registration. - # - # @return [boolean] - def dynamic_registration - attributes.fetch(:dynamicRegistration) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_range_formatting_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_range_formatting_options.rb deleted file mode 100644 index 9434f407..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_range_formatting_options.rb +++ /dev/null @@ -1,30 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class DocumentRangeFormattingOptions - def initialize(work_done_progress: nil) - @attributes = {} - - @attributes[:workDoneProgress] = work_done_progress if work_done_progress - - @attributes.freeze - end - - # @return [boolean] - def work_done_progress - attributes.fetch(:workDoneProgress) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_range_formatting_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_range_formatting_params.rb deleted file mode 100644 index bc3dd74c..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_range_formatting_params.rb +++ /dev/null @@ -1,60 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class DocumentRangeFormattingParams - def initialize(work_done_token: nil, text_document:, range:, options:) - @attributes = {} - - @attributes[:workDoneToken] = work_done_token if work_done_token - @attributes[:textDocument] = text_document - @attributes[:range] = range - @attributes[:options] = options - - @attributes.freeze - end - - # - # An optional token that a server can use to report work done progress. - # - # @return [ProgressToken] - def work_done_token - attributes.fetch(:workDoneToken) - end - - # - # The document to format. - # - # @return [TextDocumentIdentifier] - def text_document - attributes.fetch(:textDocument) - end - - # - # The range to format - # - # @return [Range] - def range - attributes.fetch(:range) - end - - # - # The format options - # - # @return [FormattingOptions] - def options - attributes.fetch(:options) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_range_formatting_registration_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_range_formatting_registration_options.rb deleted file mode 100644 index 3bdb033f..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_range_formatting_registration_options.rb +++ /dev/null @@ -1,40 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class DocumentRangeFormattingRegistrationOptions - def initialize(document_selector:, work_done_progress: nil) - @attributes = {} - - @attributes[:documentSelector] = document_selector - @attributes[:workDoneProgress] = work_done_progress if work_done_progress - - @attributes.freeze - end - - # - # A document selector to identify the scope of the registration. If set to - # null the document selector provided on the client side will be used. - # - # @return [DocumentSelector] - def document_selector - attributes.fetch(:documentSelector) - end - - # @return [boolean] - def work_done_progress - attributes.fetch(:workDoneProgress) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_symbol.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_symbol.rb deleted file mode 100644 index 97d490a5..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_symbol.rb +++ /dev/null @@ -1,108 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # Represents programming constructs like variables, classes, interfaces etc. - # that appear in a document. Document symbols can be hierarchical and they - # have two ranges: one that encloses its definition and one that points to its - # most interesting range, e.g. the range of an identifier. - # - class DocumentSymbol - def initialize(name:, detail: nil, kind:, tags: nil, deprecated: nil, range:, selection_range:, children: nil) - @attributes = {} - - @attributes[:name] = name - @attributes[:detail] = detail if detail - @attributes[:kind] = kind - @attributes[:tags] = tags if tags - @attributes[:deprecated] = deprecated if deprecated - @attributes[:range] = range - @attributes[:selectionRange] = selection_range - @attributes[:children] = children if children - - @attributes.freeze - end - - # - # The name of this symbol. Will be displayed in the user interface and - # therefore must not be an empty string or a string only consisting of - # white spaces. - # - # @return [string] - def name - attributes.fetch(:name) - end - - # - # More detail for this symbol, e.g the signature of a function. - # - # @return [string] - def detail - attributes.fetch(:detail) - end - - # - # The kind of this symbol. - # - # @return [SymbolKind] - def kind - attributes.fetch(:kind) - end - - # - # Tags for this document symbol. - # - # @return [1[]] - def tags - attributes.fetch(:tags) - end - - # - # Indicates if this symbol is deprecated. - # - # @return [boolean] - def deprecated - attributes.fetch(:deprecated) - end - - # - # The range enclosing this symbol not including leading/trailing whitespace - # but everything else like comments. This information is typically used to - # determine if the clients cursor is inside the symbol to reveal in the - # symbol in the UI. - # - # @return [Range] - def range - attributes.fetch(:range) - end - - # - # The range that should be selected and revealed when this symbol is being - # picked, e.g. the name of a function. Must be contained by the `range`. - # - # @return [Range] - def selection_range - attributes.fetch(:selectionRange) - end - - # - # Children of this symbol, e.g. properties of a class. - # - # @return [DocumentSymbol[]] - def children - attributes.fetch(:children) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_symbol_client_capabilities.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_symbol_client_capabilities.rb deleted file mode 100644 index 4a6e0b28..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_symbol_client_capabilities.rb +++ /dev/null @@ -1,73 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class DocumentSymbolClientCapabilities - def initialize(dynamic_registration: nil, symbol_kind: nil, hierarchical_document_symbol_support: nil, tag_support: nil, label_support: nil) - @attributes = {} - - @attributes[:dynamicRegistration] = dynamic_registration if dynamic_registration - @attributes[:symbolKind] = symbol_kind if symbol_kind - @attributes[:hierarchicalDocumentSymbolSupport] = hierarchical_document_symbol_support if hierarchical_document_symbol_support - @attributes[:tagSupport] = tag_support if tag_support - @attributes[:labelSupport] = label_support if label_support - - @attributes.freeze - end - - # - # Whether document symbol supports dynamic registration. - # - # @return [boolean] - def dynamic_registration - attributes.fetch(:dynamicRegistration) - end - - # - # Specific capabilities for the `SymbolKind` in the - # `textDocument/documentSymbol` request. - # - # @return [{ valueSet?: SymbolKind[]; }] - def symbol_kind - attributes.fetch(:symbolKind) - end - - # - # The client supports hierarchical document symbols. - # - # @return [boolean] - def hierarchical_document_symbol_support - attributes.fetch(:hierarchicalDocumentSymbolSupport) - end - - # - # The client supports tags on `SymbolInformation`. Tags are supported on - # `DocumentSymbol` if `hierarchicalDocumentSymbolSupport` is set to true. - # Clients supporting tags have to handle unknown tags gracefully. - # - # @return [{ valueSet: 1[]; }] - def tag_support - attributes.fetch(:tagSupport) - end - - # - # The client supports an additional label presented in the UI when - # registering a document symbol provider. - # - # @return [boolean] - def label_support - attributes.fetch(:labelSupport) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_symbol_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_symbol_options.rb deleted file mode 100644 index a83e5d49..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_symbol_options.rb +++ /dev/null @@ -1,40 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class DocumentSymbolOptions - def initialize(work_done_progress: nil, label: nil) - @attributes = {} - - @attributes[:workDoneProgress] = work_done_progress if work_done_progress - @attributes[:label] = label if label - - @attributes.freeze - end - - # @return [boolean] - def work_done_progress - attributes.fetch(:workDoneProgress) - end - - # - # A human-readable string that is shown when multiple outlines trees - # are shown for the same document. - # - # @return [string] - def label - attributes.fetch(:label) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_symbol_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_symbol_params.rb deleted file mode 100644 index e3346fe8..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_symbol_params.rb +++ /dev/null @@ -1,52 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class DocumentSymbolParams - def initialize(work_done_token: nil, partial_result_token: nil, text_document:) - @attributes = {} - - @attributes[:workDoneToken] = work_done_token if work_done_token - @attributes[:partialResultToken] = partial_result_token if partial_result_token - @attributes[:textDocument] = text_document - - @attributes.freeze - end - - # - # An optional token that a server can use to report work done progress. - # - # @return [ProgressToken] - def work_done_token - attributes.fetch(:workDoneToken) - end - - # - # An optional token that a server can use to report partial results (e.g. - # streaming) to the client. - # - # @return [ProgressToken] - def partial_result_token - attributes.fetch(:partialResultToken) - end - - # - # The text document. - # - # @return [TextDocumentIdentifier] - def text_document - attributes.fetch(:textDocument) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_symbol_registration_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_symbol_registration_options.rb deleted file mode 100644 index bcd4b295..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/document_symbol_registration_options.rb +++ /dev/null @@ -1,50 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class DocumentSymbolRegistrationOptions - def initialize(document_selector:, work_done_progress: nil, label: nil) - @attributes = {} - - @attributes[:documentSelector] = document_selector - @attributes[:workDoneProgress] = work_done_progress if work_done_progress - @attributes[:label] = label if label - - @attributes.freeze - end - - # - # A document selector to identify the scope of the registration. If set to - # null the document selector provided on the client side will be used. - # - # @return [DocumentSelector] - def document_selector - attributes.fetch(:documentSelector) - end - - # @return [boolean] - def work_done_progress - attributes.fetch(:workDoneProgress) - end - - # - # A human-readable string that is shown when multiple outlines trees - # are shown for the same document. - # - # @return [string] - def label - attributes.fetch(:label) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/execute_command_client_capabilities.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/execute_command_client_capabilities.rb deleted file mode 100644 index fd074ec9..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/execute_command_client_capabilities.rb +++ /dev/null @@ -1,33 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class ExecuteCommandClientCapabilities - def initialize(dynamic_registration: nil) - @attributes = {} - - @attributes[:dynamicRegistration] = dynamic_registration if dynamic_registration - - @attributes.freeze - end - - # - # Execute command supports dynamic registration. - # - # @return [boolean] - def dynamic_registration - attributes.fetch(:dynamicRegistration) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/execute_command_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/execute_command_options.rb deleted file mode 100644 index 71f6c48f..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/execute_command_options.rb +++ /dev/null @@ -1,39 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class ExecuteCommandOptions - def initialize(work_done_progress: nil, commands:) - @attributes = {} - - @attributes[:workDoneProgress] = work_done_progress if work_done_progress - @attributes[:commands] = commands - - @attributes.freeze - end - - # @return [boolean] - def work_done_progress - attributes.fetch(:workDoneProgress) - end - - # - # The commands to be executed on the server - # - # @return [string[]] - def commands - attributes.fetch(:commands) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/execute_command_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/execute_command_params.rb deleted file mode 100644 index 0062a128..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/execute_command_params.rb +++ /dev/null @@ -1,51 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class ExecuteCommandParams - def initialize(work_done_token: nil, command:, arguments: nil) - @attributes = {} - - @attributes[:workDoneToken] = work_done_token if work_done_token - @attributes[:command] = command - @attributes[:arguments] = arguments if arguments - - @attributes.freeze - end - - # - # An optional token that a server can use to report work done progress. - # - # @return [ProgressToken] - def work_done_token - attributes.fetch(:workDoneToken) - end - - # - # The identifier of the actual command handler. - # - # @return [string] - def command - attributes.fetch(:command) - end - - # - # Arguments that the command should be invoked with. - # - # @return [LSPAny[]] - def arguments - attributes.fetch(:arguments) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/execute_command_registration_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/execute_command_registration_options.rb deleted file mode 100644 index d522b3b8..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/execute_command_registration_options.rb +++ /dev/null @@ -1,42 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # Execute command registration options. - # - class ExecuteCommandRegistrationOptions - def initialize(work_done_progress: nil, commands:) - @attributes = {} - - @attributes[:workDoneProgress] = work_done_progress if work_done_progress - @attributes[:commands] = commands - - @attributes.freeze - end - - # @return [boolean] - def work_done_progress - attributes.fetch(:workDoneProgress) - end - - # - # The commands to be executed on the server - # - # @return [string[]] - def commands - attributes.fetch(:commands) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/execution_summary.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/execution_summary.rb deleted file mode 100644 index db0d14d0..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/execution_summary.rb +++ /dev/null @@ -1,45 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class ExecutionSummary - def initialize(execution_order:, success: nil) - @attributes = {} - - @attributes[:executionOrder] = execution_order - @attributes[:success] = success if success - - @attributes.freeze - end - - # - # A strict monotonically increasing value - # indicating the execution order of a cell - # inside a notebook. - # - # @return [number] - def execution_order - attributes.fetch(:executionOrder) - end - - # - # Whether the execution was successful or - # not if known by the client. - # - # @return [boolean] - def success - attributes.fetch(:success) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/file_create.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/file_create.rb deleted file mode 100644 index 3bfb40b0..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/file_create.rb +++ /dev/null @@ -1,36 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # Represents information on a file/folder create. - # - class FileCreate - def initialize(uri:) - @attributes = {} - - @attributes[:uri] = uri - - @attributes.freeze - end - - # - # A file:// URI for the location of the file/folder being created. - # - # @return [string] - def uri - attributes.fetch(:uri) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/file_delete.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/file_delete.rb deleted file mode 100644 index dfc5f7dc..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/file_delete.rb +++ /dev/null @@ -1,36 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # Represents information on a file/folder delete. - # - class FileDelete - def initialize(uri:) - @attributes = {} - - @attributes[:uri] = uri - - @attributes.freeze - end - - # - # A file:// URI for the location of the file/folder being deleted. - # - # @return [string] - def uri - attributes.fetch(:uri) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/file_event.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/file_event.rb deleted file mode 100644 index 1552437a..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/file_event.rb +++ /dev/null @@ -1,45 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # An event describing a file change. - # - class FileEvent - def initialize(uri:, type:) - @attributes = {} - - @attributes[:uri] = uri - @attributes[:type] = type - - @attributes.freeze - end - - # - # The file's URI. - # - # @return [string] - def uri - attributes.fetch(:uri) - end - - # - # The change type. - # - # @return [number] - def type - attributes.fetch(:type) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/file_operation_filter.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/file_operation_filter.rb deleted file mode 100644 index 226378a7..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/file_operation_filter.rb +++ /dev/null @@ -1,46 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # A filter to describe in which file operation requests or notifications - # the server is interested in. - # - class FileOperationFilter - def initialize(scheme: nil, pattern:) - @attributes = {} - - @attributes[:scheme] = scheme if scheme - @attributes[:pattern] = pattern - - @attributes.freeze - end - - # - # A Uri like `file` or `untitled`. - # - # @return [string] - def scheme - attributes.fetch(:scheme) - end - - # - # The actual file operation pattern. - # - # @return [FileOperationPattern] - def pattern - attributes.fetch(:pattern) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/file_operation_pattern.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/file_operation_pattern.rb deleted file mode 100644 index bc74cb54..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/file_operation_pattern.rb +++ /dev/null @@ -1,67 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # A pattern to describe in which file operation requests or notifications - # the server is interested in. - # - class FileOperationPattern - def initialize(glob:, matches: nil, options: nil) - @attributes = {} - - @attributes[:glob] = glob - @attributes[:matches] = matches if matches - @attributes[:options] = options if options - - @attributes.freeze - end - - # - # The glob pattern to match. Glob patterns can have the following syntax: - # - `*` to match one or more characters in a path segment - # - `?` to match on one character in a path segment - # - `**` to match any number of path segments, including none - # - `{}` to group sub patterns into an OR expression. (e.g. `**​/*.{ts,js}` - # matches all TypeScript and JavaScript files) - # - `[]` to declare a range of characters to match in a path segment - # (e.g., `example.[0-9]` to match on `example.0`, `example.1`, …) - # - `[!...]` to negate a range of characters to match in a path segment - # (e.g., `example.[!0-9]` to match on `example.a`, `example.b`, but - # not `example.0`) - # - # @return [string] - def glob - attributes.fetch(:glob) - end - - # - # Whether to match files or folders with this pattern. - # - # Matches both if undefined. - # - # @return [FileOperationPatternKind] - def matches - attributes.fetch(:matches) - end - - # - # Additional options used during matching. - # - # @return [FileOperationPatternOptions] - def options - attributes.fetch(:options) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/file_operation_pattern_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/file_operation_pattern_options.rb deleted file mode 100644 index 4ec58464..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/file_operation_pattern_options.rb +++ /dev/null @@ -1,36 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # Matching options for the file operation pattern. - # - class FileOperationPatternOptions - def initialize(ignore_case: nil) - @attributes = {} - - @attributes[:ignoreCase] = ignore_case if ignore_case - - @attributes.freeze - end - - # - # The pattern should be matched ignoring casing. - # - # @return [boolean] - def ignore_case - attributes.fetch(:ignoreCase) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/file_operation_registration_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/file_operation_registration_options.rb deleted file mode 100644 index d3f38b49..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/file_operation_registration_options.rb +++ /dev/null @@ -1,36 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # The options to register for file operations. - # - class FileOperationRegistrationOptions - def initialize(filters:) - @attributes = {} - - @attributes[:filters] = filters - - @attributes.freeze - end - - # - # The actual filters. - # - # @return [FileOperationFilter[]] - def filters - attributes.fetch(:filters) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/file_rename.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/file_rename.rb deleted file mode 100644 index 09309973..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/file_rename.rb +++ /dev/null @@ -1,45 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # Represents information on a file/folder rename. - # - class FileRename - def initialize(old_uri:, new_uri:) - @attributes = {} - - @attributes[:oldUri] = old_uri - @attributes[:newUri] = new_uri - - @attributes.freeze - end - - # - # A file:// URI for the original location of the file/folder being renamed. - # - # @return [string] - def old_uri - attributes.fetch(:oldUri) - end - - # - # A file:// URI for the new location of the file/folder being renamed. - # - # @return [string] - def new_uri - attributes.fetch(:newUri) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/file_system_watcher.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/file_system_watcher.rb deleted file mode 100644 index bdbe225b..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/file_system_watcher.rb +++ /dev/null @@ -1,45 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class FileSystemWatcher - def initialize(glob_pattern:, kind: nil) - @attributes = {} - - @attributes[:globPattern] = glob_pattern - @attributes[:kind] = kind if kind - - @attributes.freeze - end - - # - # The glob pattern to watch. See {@link GlobPattern glob pattern} - # for more detail. - # - # @return [GlobPattern] - def glob_pattern - attributes.fetch(:globPattern) - end - - # - # The kind of events of interest. If omitted it defaults - # to WatchKind.Create | WatchKind.Change | WatchKind.Delete - # which is 7. - # - # @return [number] - def kind - attributes.fetch(:kind) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/folding_range.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/folding_range.rb deleted file mode 100644 index dea0df3d..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/folding_range.rb +++ /dev/null @@ -1,94 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # Represents a folding range. To be valid, start and end line must be bigger - # than zero and smaller than the number of lines in the document. Clients - # are free to ignore invalid ranges. - # - class FoldingRange - def initialize(start_line:, start_character: nil, end_line:, end_character: nil, kind: nil, collapsed_text: nil) - @attributes = {} - - @attributes[:startLine] = start_line - @attributes[:startCharacter] = start_character if start_character - @attributes[:endLine] = end_line - @attributes[:endCharacter] = end_character if end_character - @attributes[:kind] = kind if kind - @attributes[:collapsedText] = collapsed_text if collapsed_text - - @attributes.freeze - end - - # - # The zero-based start line of the range to fold. The folded area starts - # after the line's last character. To be valid, the end must be zero or - # larger and smaller than the number of lines in the document. - # - # @return [number] - def start_line - attributes.fetch(:startLine) - end - - # - # The zero-based character offset from where the folded range starts. If - # not defined, defaults to the length of the start line. - # - # @return [number] - def start_character - attributes.fetch(:startCharacter) - end - - # - # The zero-based end line of the range to fold. The folded area ends with - # the line's last character. To be valid, the end must be zero or larger - # and smaller than the number of lines in the document. - # - # @return [number] - def end_line - attributes.fetch(:endLine) - end - - # - # The zero-based character offset before the folded range ends. If not - # defined, defaults to the length of the end line. - # - # @return [number] - def end_character - attributes.fetch(:endCharacter) - end - - # - # Describes the kind of the folding range such as `comment` or `region`. - # The kind is used to categorize folding ranges and used by commands like - # 'Fold all comments'. See [FoldingRangeKind](#FoldingRangeKind) for an - # enumeration of standardized kinds. - # - # @return [string] - def kind - attributes.fetch(:kind) - end - - # - # The text that the client should show when the specified range is - # collapsed. If not defined or not supported by the client, a default - # will be chosen by the client. - # - # @return [string] - def collapsed_text - attributes.fetch(:collapsedText) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/folding_range_client_capabilities.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/folding_range_client_capabilities.rb deleted file mode 100644 index 460a22be..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/folding_range_client_capabilities.rb +++ /dev/null @@ -1,76 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class FoldingRangeClientCapabilities - def initialize(dynamic_registration: nil, range_limit: nil, line_folding_only: nil, folding_range_kind: nil, folding_range: nil) - @attributes = {} - - @attributes[:dynamicRegistration] = dynamic_registration if dynamic_registration - @attributes[:rangeLimit] = range_limit if range_limit - @attributes[:lineFoldingOnly] = line_folding_only if line_folding_only - @attributes[:foldingRangeKind] = folding_range_kind if folding_range_kind - @attributes[:foldingRange] = folding_range if folding_range - - @attributes.freeze - end - - # - # Whether implementation supports dynamic registration for folding range - # providers. If this is set to `true` the client supports the new - # `FoldingRangeRegistrationOptions` return value for the corresponding - # server capability as well. - # - # @return [boolean] - def dynamic_registration - attributes.fetch(:dynamicRegistration) - end - - # - # The maximum number of folding ranges that the client prefers to receive - # per document. The value serves as a hint, servers are free to follow the - # limit. - # - # @return [number] - def range_limit - attributes.fetch(:rangeLimit) - end - - # - # If set, the client signals that it only supports folding complete lines. - # If set, client will ignore specified `startCharacter` and `endCharacter` - # properties in a FoldingRange. - # - # @return [boolean] - def line_folding_only - attributes.fetch(:lineFoldingOnly) - end - - # - # Specific options for the folding range kind. - # - # @return [{ valueSet?: string[]; }] - def folding_range_kind - attributes.fetch(:foldingRangeKind) - end - - # - # Specific options for the folding range. - # - # @return [{ collapsedText?: boolean; }] - def folding_range - attributes.fetch(:foldingRange) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/folding_range_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/folding_range_options.rb deleted file mode 100644 index 36f6ebf3..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/folding_range_options.rb +++ /dev/null @@ -1,30 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class FoldingRangeOptions - def initialize(work_done_progress: nil) - @attributes = {} - - @attributes[:workDoneProgress] = work_done_progress if work_done_progress - - @attributes.freeze - end - - # @return [boolean] - def work_done_progress - attributes.fetch(:workDoneProgress) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/folding_range_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/folding_range_params.rb deleted file mode 100644 index c4d35146..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/folding_range_params.rb +++ /dev/null @@ -1,52 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class FoldingRangeParams - def initialize(work_done_token: nil, partial_result_token: nil, text_document:) - @attributes = {} - - @attributes[:workDoneToken] = work_done_token if work_done_token - @attributes[:partialResultToken] = partial_result_token if partial_result_token - @attributes[:textDocument] = text_document - - @attributes.freeze - end - - # - # An optional token that a server can use to report work done progress. - # - # @return [ProgressToken] - def work_done_token - attributes.fetch(:workDoneToken) - end - - # - # An optional token that a server can use to report partial results (e.g. - # streaming) to the client. - # - # @return [ProgressToken] - def partial_result_token - attributes.fetch(:partialResultToken) - end - - # - # The text document. - # - # @return [TextDocumentIdentifier] - def text_document - attributes.fetch(:textDocument) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/folding_range_registration_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/folding_range_registration_options.rb deleted file mode 100644 index abf7938e..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/folding_range_registration_options.rb +++ /dev/null @@ -1,50 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class FoldingRangeRegistrationOptions - def initialize(document_selector:, work_done_progress: nil, id: nil) - @attributes = {} - - @attributes[:documentSelector] = document_selector - @attributes[:workDoneProgress] = work_done_progress if work_done_progress - @attributes[:id] = id if id - - @attributes.freeze - end - - # - # A document selector to identify the scope of the registration. If set to - # null the document selector provided on the client side will be used. - # - # @return [DocumentSelector] - def document_selector - attributes.fetch(:documentSelector) - end - - # @return [boolean] - def work_done_progress - attributes.fetch(:workDoneProgress) - end - - # - # The id used to register the request. The id can be used to deregister - # the request again. See also Registration#id. - # - # @return [string] - def id - attributes.fetch(:id) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/formatting_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/formatting_options.rb deleted file mode 100644 index e0003015..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/formatting_options.rb +++ /dev/null @@ -1,72 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # Value-object describing what options formatting should use. - # - class FormattingOptions - def initialize(tab_size:, insert_spaces:, trim_trailing_whitespace: nil, insert_final_newline: nil, trim_final_newlines: nil) - @attributes = {} - - @attributes[:tabSize] = tab_size - @attributes[:insertSpaces] = insert_spaces - @attributes[:trimTrailingWhitespace] = trim_trailing_whitespace if trim_trailing_whitespace - @attributes[:insertFinalNewline] = insert_final_newline if insert_final_newline - @attributes[:trimFinalNewlines] = trim_final_newlines if trim_final_newlines - - @attributes.freeze - end - - # - # Size of a tab in spaces. - # - # @return [number] - def tab_size - attributes.fetch(:tabSize) - end - - # - # Prefer spaces over tabs. - # - # @return [boolean] - def insert_spaces - attributes.fetch(:insertSpaces) - end - - # - # Trim trailing whitespace on a line. - # - # @return [boolean] - def trim_trailing_whitespace - attributes.fetch(:trimTrailingWhitespace) - end - - # - # Insert a newline character at the end of the file if one does not exist. - # - # @return [boolean] - def insert_final_newline - attributes.fetch(:insertFinalNewline) - end - - # - # Trim all newlines after the final newline at the end of the file. - # - # @return [boolean] - def trim_final_newlines - attributes.fetch(:trimFinalNewlines) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/full_document_diagnostic_report.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/full_document_diagnostic_report.rb deleted file mode 100644 index 9f115524..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/full_document_diagnostic_report.rb +++ /dev/null @@ -1,56 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # A diagnostic report with a full set of problems. - # - class FullDocumentDiagnosticReport - def initialize(kind:, result_id: nil, items:) - @attributes = {} - - @attributes[:kind] = kind - @attributes[:resultId] = result_id if result_id - @attributes[:items] = items - - @attributes.freeze - end - - # - # A full document diagnostic report. - # - # @return [any] - def kind - attributes.fetch(:kind) - end - - # - # An optional result id. If provided it will - # be sent on the next diagnostic request for the - # same document. - # - # @return [string] - def result_id - attributes.fetch(:resultId) - end - - # - # The actual items. - # - # @return [Diagnostic[]] - def items - attributes.fetch(:items) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/hover.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/hover.rb deleted file mode 100644 index 05f5366d..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/hover.rb +++ /dev/null @@ -1,46 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # The result of a hover request. - # - class Hover - def initialize(contents:, range: nil) - @attributes = {} - - @attributes[:contents] = contents - @attributes[:range] = range if range - - @attributes.freeze - end - - # - # The hover's content - # - # @return [MarkupContent | MarkedString | MarkedString[]] - def contents - attributes.fetch(:contents) - end - - # - # An optional range is a range inside a text document - # that is used to visualize a hover, e.g. by changing the background color. - # - # @return [Range] - def range - attributes.fetch(:range) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/hover_client_capabilities.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/hover_client_capabilities.rb deleted file mode 100644 index 8b189edf..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/hover_client_capabilities.rb +++ /dev/null @@ -1,44 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class HoverClientCapabilities - def initialize(dynamic_registration: nil, content_format: nil) - @attributes = {} - - @attributes[:dynamicRegistration] = dynamic_registration if dynamic_registration - @attributes[:contentFormat] = content_format if content_format - - @attributes.freeze - end - - # - # Whether hover supports dynamic registration. - # - # @return [boolean] - def dynamic_registration - attributes.fetch(:dynamicRegistration) - end - - # - # Client supports the follow content formats if the content - # property refers to a `literal of type MarkupContent`. - # The order describes the preferred format of the client. - # - # @return [MarkupKind[]] - def content_format - attributes.fetch(:contentFormat) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/hover_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/hover_options.rb deleted file mode 100644 index 9b4eaa9d..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/hover_options.rb +++ /dev/null @@ -1,30 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class HoverOptions - def initialize(work_done_progress: nil) - @attributes = {} - - @attributes[:workDoneProgress] = work_done_progress if work_done_progress - - @attributes.freeze - end - - # @return [boolean] - def work_done_progress - attributes.fetch(:workDoneProgress) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/hover_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/hover_params.rb deleted file mode 100644 index cfdb626c..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/hover_params.rb +++ /dev/null @@ -1,51 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class HoverParams - def initialize(text_document:, position:, work_done_token: nil) - @attributes = {} - - @attributes[:textDocument] = text_document - @attributes[:position] = position - @attributes[:workDoneToken] = work_done_token if work_done_token - - @attributes.freeze - end - - # - # The text document. - # - # @return [TextDocumentIdentifier] - def text_document - attributes.fetch(:textDocument) - end - - # - # The position inside the text document. - # - # @return [Position] - def position - attributes.fetch(:position) - end - - # - # An optional token that a server can use to report work done progress. - # - # @return [ProgressToken] - def work_done_token - attributes.fetch(:workDoneToken) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/hover_registration_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/hover_registration_options.rb deleted file mode 100644 index 02a4a64b..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/hover_registration_options.rb +++ /dev/null @@ -1,40 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class HoverRegistrationOptions - def initialize(document_selector:, work_done_progress: nil) - @attributes = {} - - @attributes[:documentSelector] = document_selector - @attributes[:workDoneProgress] = work_done_progress if work_done_progress - - @attributes.freeze - end - - # - # A document selector to identify the scope of the registration. If set to - # null the document selector provided on the client side will be used. - # - # @return [DocumentSelector] - def document_selector - attributes.fetch(:documentSelector) - end - - # @return [boolean] - def work_done_progress - attributes.fetch(:workDoneProgress) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/hover_result.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/hover_result.rb deleted file mode 100644 index 81afa632..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/hover_result.rb +++ /dev/null @@ -1,30 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class HoverResult - def initialize(value:) - @attributes = {} - - @attributes[:value] = value - - @attributes.freeze - end - - # @return [string] - def value - attributes.fetch(:value) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/implementation_client_capabilities.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/implementation_client_capabilities.rb deleted file mode 100644 index be8cd0dc..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/implementation_client_capabilities.rb +++ /dev/null @@ -1,44 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class ImplementationClientCapabilities - def initialize(dynamic_registration: nil, link_support: nil) - @attributes = {} - - @attributes[:dynamicRegistration] = dynamic_registration if dynamic_registration - @attributes[:linkSupport] = link_support if link_support - - @attributes.freeze - end - - # - # Whether implementation supports dynamic registration. If this is set to - # `true` the client supports the new `ImplementationRegistrationOptions` - # return value for the corresponding server capability as well. - # - # @return [boolean] - def dynamic_registration - attributes.fetch(:dynamicRegistration) - end - - # - # The client supports additional metadata in the form of definition links. - # - # @return [boolean] - def link_support - attributes.fetch(:linkSupport) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/implementation_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/implementation_options.rb deleted file mode 100644 index 09034c74..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/implementation_options.rb +++ /dev/null @@ -1,30 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class ImplementationOptions - def initialize(work_done_progress: nil) - @attributes = {} - - @attributes[:workDoneProgress] = work_done_progress if work_done_progress - - @attributes.freeze - end - - # @return [boolean] - def work_done_progress - attributes.fetch(:workDoneProgress) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/implementation_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/implementation_params.rb deleted file mode 100644 index e6fc745e..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/implementation_params.rb +++ /dev/null @@ -1,61 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class ImplementationParams - def initialize(text_document:, position:, work_done_token: nil, partial_result_token: nil) - @attributes = {} - - @attributes[:textDocument] = text_document - @attributes[:position] = position - @attributes[:workDoneToken] = work_done_token if work_done_token - @attributes[:partialResultToken] = partial_result_token if partial_result_token - - @attributes.freeze - end - - # - # The text document. - # - # @return [TextDocumentIdentifier] - def text_document - attributes.fetch(:textDocument) - end - - # - # The position inside the text document. - # - # @return [Position] - def position - attributes.fetch(:position) - end - - # - # An optional token that a server can use to report work done progress. - # - # @return [ProgressToken] - def work_done_token - attributes.fetch(:workDoneToken) - end - - # - # An optional token that a server can use to report partial results (e.g. - # streaming) to the client. - # - # @return [ProgressToken] - def partial_result_token - attributes.fetch(:partialResultToken) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/implementation_registration_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/implementation_registration_options.rb deleted file mode 100644 index 3c0c5011..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/implementation_registration_options.rb +++ /dev/null @@ -1,50 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class ImplementationRegistrationOptions - def initialize(document_selector:, work_done_progress: nil, id: nil) - @attributes = {} - - @attributes[:documentSelector] = document_selector - @attributes[:workDoneProgress] = work_done_progress if work_done_progress - @attributes[:id] = id if id - - @attributes.freeze - end - - # - # A document selector to identify the scope of the registration. If set to - # null the document selector provided on the client side will be used. - # - # @return [DocumentSelector] - def document_selector - attributes.fetch(:documentSelector) - end - - # @return [boolean] - def work_done_progress - attributes.fetch(:workDoneProgress) - end - - # - # The id used to register the request. The id can be used to deregister - # the request again. See also Registration#id. - # - # @return [string] - def id - attributes.fetch(:id) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/initialize_error.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/initialize_error.rb deleted file mode 100644 index a0560945..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/initialize_error.rb +++ /dev/null @@ -1,36 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class InitializeError - def initialize(retry:) - @attributes = {} - - @attributes[:retry] = binding.local_variable_get(:retry) - - @attributes.freeze - end - - # - # Indicates whether the client execute the following retry logic: - # (1) show the message provided by the ResponseError to the user - # (2) user selects retry or cancel - # (3) if user selected retry the initialize method is sent again. - # - # @return [boolean] - def retry - attributes.fetch(:retry) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/initialize_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/initialize_params.rb deleted file mode 100644 index 3b0c955d..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/initialize_params.rb +++ /dev/null @@ -1,128 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class InitializeParams - def initialize(work_done_token: nil, process_id:, client_info: nil, locale: nil, root_path: nil, root_uri:, initialization_options: nil, capabilities:, trace: nil, workspace_folders: nil) - @attributes = {} - - @attributes[:workDoneToken] = work_done_token if work_done_token - @attributes[:processId] = process_id - @attributes[:clientInfo] = client_info if client_info - @attributes[:locale] = locale if locale - @attributes[:rootPath] = root_path if root_path - @attributes[:rootUri] = root_uri - @attributes[:initializationOptions] = initialization_options if initialization_options - @attributes[:capabilities] = capabilities - @attributes[:trace] = trace if trace - @attributes[:workspaceFolders] = workspace_folders if workspace_folders - - @attributes.freeze - end - - # - # An optional token that a server can use to report work done progress. - # - # @return [ProgressToken] - def work_done_token - attributes.fetch(:workDoneToken) - end - - # - # The process Id of the parent process that started the server. Is null if - # the process has not been started by another process. If the parent - # process is not alive then the server should exit (see exit notification) - # its process. - # - # @return [number] - def process_id - attributes.fetch(:processId) - end - - # - # Information about the client - # - # @return [{ name: string; version?: string; }] - def client_info - attributes.fetch(:clientInfo) - end - - # - # The locale the client is currently showing the user interface - # in. This must not necessarily be the locale of the operating - # system. - # - # Uses IETF language tags as the value's syntax - # (See https://en.wikipedia.org/wiki/IETF_language_tag) - # - # @return [string] - def locale - attributes.fetch(:locale) - end - - # - # The rootPath of the workspace. Is null - # if no folder is open. - # - # @return [string] - def root_path - attributes.fetch(:rootPath) - end - - # - # The rootUri of the workspace. Is null if no - # folder is open. If both `rootPath` and `rootUri` are set - # `rootUri` wins. - # - # @return [string] - def root_uri - attributes.fetch(:rootUri) - end - - # - # User provided initialization options. - # - # @return [LSPAny] - def initialization_options - attributes.fetch(:initializationOptions) - end - - # - # The capabilities provided by the client (editor or tool) - # - # @return [ClientCapabilities] - def capabilities - attributes.fetch(:capabilities) - end - - # - # The initial trace setting. If omitted trace is disabled ('off'). - # - # @return [TraceValue] - def trace - attributes.fetch(:trace) - end - - # - # The workspace folders configured in the client when the server starts. - # This property is only available if the client supports workspace folders. - # It can be `null` if the client supports workspace folders but none are - # configured. - # - # @return [WorkspaceFolder[]] - def workspace_folders - attributes.fetch(:workspaceFolders) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/initialize_result.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/initialize_result.rb deleted file mode 100644 index 637dad6d..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/initialize_result.rb +++ /dev/null @@ -1,42 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class InitializeResult - def initialize(capabilities:, server_info: nil) - @attributes = {} - - @attributes[:capabilities] = capabilities - @attributes[:serverInfo] = server_info if server_info - - @attributes.freeze - end - - # - # The capabilities the language server provides. - # - # @return [ServerCapabilities] - def capabilities - attributes.fetch(:capabilities) - end - - # - # Information about the server. - # - # @return [{ name: string; version?: string; }] - def server_info - attributes.fetch(:serverInfo) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/initialized_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/initialized_params.rb deleted file mode 100644 index fe7a8d08..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/initialized_params.rb +++ /dev/null @@ -1,24 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class InitializedParams - def initialize() - @attributes = {} - - - @attributes.freeze - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/inlay_hint.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/inlay_hint.rb deleted file mode 100644 index 5c4a92c0..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/inlay_hint.rb +++ /dev/null @@ -1,122 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # Inlay hint information. - # - class InlayHint - def initialize(position:, label:, kind: nil, text_edits: nil, tooltip: nil, padding_left: nil, padding_right: nil, data: nil) - @attributes = {} - - @attributes[:position] = position - @attributes[:label] = label - @attributes[:kind] = kind if kind - @attributes[:textEdits] = text_edits if text_edits - @attributes[:tooltip] = tooltip if tooltip - @attributes[:paddingLeft] = padding_left if padding_left - @attributes[:paddingRight] = padding_right if padding_right - @attributes[:data] = data if data - - @attributes.freeze - end - - # - # The position of this hint. - # - # @return [Position] - def position - attributes.fetch(:position) - end - - # - # The label of this hint. A human readable string or an array of - # InlayHintLabelPart label parts. - # - # *Note* that neither the string nor the label part can be empty. - # - # @return [string | InlayHintLabelPart[]] - def label - attributes.fetch(:label) - end - - # - # The kind of this hint. Can be omitted in which case the client - # should fall back to a reasonable default. - # - # @return [InlayHintKind] - def kind - attributes.fetch(:kind) - end - - # - # Optional text edits that are performed when accepting this inlay hint. - # - # *Note* that edits are expected to change the document so that the inlay - # hint (or its nearest variant) is now part of the document and the inlay - # hint itself is now obsolete. - # - # Depending on the client capability `inlayHint.resolveSupport` clients - # might resolve this property late using the resolve request. - # - # @return [TextEdit[]] - def text_edits - attributes.fetch(:textEdits) - end - - # - # The tooltip text when you hover over this item. - # - # Depending on the client capability `inlayHint.resolveSupport` clients - # might resolve this property late using the resolve request. - # - # @return [string | MarkupContent] - def tooltip - attributes.fetch(:tooltip) - end - - # - # Render padding before the hint. - # - # Note: Padding should use the editor's background color, not the - # background color of the hint itself. That means padding can be used - # to visually align/separate an inlay hint. - # - # @return [boolean] - def padding_left - attributes.fetch(:paddingLeft) - end - - # - # Render padding after the hint. - # - # Note: Padding should use the editor's background color, not the - # background color of the hint itself. That means padding can be used - # to visually align/separate an inlay hint. - # - # @return [boolean] - def padding_right - attributes.fetch(:paddingRight) - end - - # - # A data entry field that is preserved on an inlay hint between - # a `textDocument/inlayHint` and a `inlayHint/resolve` request. - # - # @return [LSPAny] - def data - attributes.fetch(:data) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/inlay_hint_client_capabilities.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/inlay_hint_client_capabilities.rb deleted file mode 100644 index f50db0f6..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/inlay_hint_client_capabilities.rb +++ /dev/null @@ -1,46 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # Inlay hint client capabilities. - # - class InlayHintClientCapabilities - def initialize(dynamic_registration: nil, resolve_support: nil) - @attributes = {} - - @attributes[:dynamicRegistration] = dynamic_registration if dynamic_registration - @attributes[:resolveSupport] = resolve_support if resolve_support - - @attributes.freeze - end - - # - # Whether inlay hints support dynamic registration. - # - # @return [boolean] - def dynamic_registration - attributes.fetch(:dynamicRegistration) - end - - # - # Indicates which properties a client can resolve lazily on an inlay - # hint. - # - # @return [{ properties: string[]; }] - def resolve_support - attributes.fetch(:resolveSupport) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/inlay_hint_label_part.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/inlay_hint_label_part.rb deleted file mode 100644 index 3b21d8a7..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/inlay_hint_label_part.rb +++ /dev/null @@ -1,79 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # An inlay hint label part allows for interactive and composite labels - # of inlay hints. - # - class InlayHintLabelPart - def initialize(value:, tooltip: nil, location: nil, command: nil) - @attributes = {} - - @attributes[:value] = value - @attributes[:tooltip] = tooltip if tooltip - @attributes[:location] = location if location - @attributes[:command] = command if command - - @attributes.freeze - end - - # - # The value of this label part. - # - # @return [string] - def value - attributes.fetch(:value) - end - - # - # The tooltip text when you hover over this label part. Depending on - # the client capability `inlayHint.resolveSupport` clients might resolve - # this property late using the resolve request. - # - # @return [string | MarkupContent] - def tooltip - attributes.fetch(:tooltip) - end - - # - # An optional source code location that represents this - # label part. - # - # The editor will use this location for the hover and for code navigation - # features: This part will become a clickable link that resolves to the - # definition of the symbol at the given location (not necessarily the - # location itself), it shows the hover that shows at the given location, - # and it shows a context menu with further code navigation commands. - # - # Depending on the client capability `inlayHint.resolveSupport` clients - # might resolve this property late using the resolve request. - # - # @return [Location] - def location - attributes.fetch(:location) - end - - # - # An optional command for this label part. - # - # Depending on the client capability `inlayHint.resolveSupport` clients - # might resolve this property late using the resolve request. - # - # @return [Command] - def command - attributes.fetch(:command) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/inlay_hint_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/inlay_hint_options.rb deleted file mode 100644 index 54e9260c..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/inlay_hint_options.rb +++ /dev/null @@ -1,43 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # Inlay hint options used during static registration. - # - class InlayHintOptions - def initialize(work_done_progress: nil, resolve_provider: nil) - @attributes = {} - - @attributes[:workDoneProgress] = work_done_progress if work_done_progress - @attributes[:resolveProvider] = resolve_provider if resolve_provider - - @attributes.freeze - end - - # @return [boolean] - def work_done_progress - attributes.fetch(:workDoneProgress) - end - - # - # The server provides support to resolve additional - # information for an inlay hint item. - # - # @return [boolean] - def resolve_provider - attributes.fetch(:resolveProvider) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/inlay_hint_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/inlay_hint_params.rb deleted file mode 100644 index 6b12f2e3..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/inlay_hint_params.rb +++ /dev/null @@ -1,54 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # A parameter literal used in inlay hint requests. - # - class InlayHintParams - def initialize(work_done_token: nil, text_document:, range:) - @attributes = {} - - @attributes[:workDoneToken] = work_done_token if work_done_token - @attributes[:textDocument] = text_document - @attributes[:range] = range - - @attributes.freeze - end - - # - # An optional token that a server can use to report work done progress. - # - # @return [ProgressToken] - def work_done_token - attributes.fetch(:workDoneToken) - end - - # - # The text document. - # - # @return [TextDocumentIdentifier] - def text_document - attributes.fetch(:textDocument) - end - - # - # The visible document range for which inlay hints should be computed. - # - # @return [Range] - def range - attributes.fetch(:range) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/inlay_hint_registration_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/inlay_hint_registration_options.rb deleted file mode 100644 index 46f8ab91..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/inlay_hint_registration_options.rb +++ /dev/null @@ -1,63 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # Inlay hint options used during static or dynamic registration. - # - class InlayHintRegistrationOptions - def initialize(work_done_progress: nil, resolve_provider: nil, document_selector:, id: nil) - @attributes = {} - - @attributes[:workDoneProgress] = work_done_progress if work_done_progress - @attributes[:resolveProvider] = resolve_provider if resolve_provider - @attributes[:documentSelector] = document_selector - @attributes[:id] = id if id - - @attributes.freeze - end - - # @return [boolean] - def work_done_progress - attributes.fetch(:workDoneProgress) - end - - # - # The server provides support to resolve additional - # information for an inlay hint item. - # - # @return [boolean] - def resolve_provider - attributes.fetch(:resolveProvider) - end - - # - # A document selector to identify the scope of the registration. If set to - # null the document selector provided on the client side will be used. - # - # @return [DocumentSelector] - def document_selector - attributes.fetch(:documentSelector) - end - - # - # The id used to register the request. The id can be used to deregister - # the request again. See also Registration#id. - # - # @return [string] - def id - attributes.fetch(:id) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/inlay_hint_workspace_client_capabilities.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/inlay_hint_workspace_client_capabilities.rb deleted file mode 100644 index ff5450f2..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/inlay_hint_workspace_client_capabilities.rb +++ /dev/null @@ -1,42 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # Client workspace capabilities specific to inlay hints. - # - class InlayHintWorkspaceClientCapabilities - def initialize(refresh_support: nil) - @attributes = {} - - @attributes[:refreshSupport] = refresh_support if refresh_support - - @attributes.freeze - end - - # - # Whether the client implementation supports a refresh request sent from - # the server to the client. - # - # Note that this event is global and will force the client to refresh all - # inlay hints currently shown. It should be used with absolute care and - # is useful for situation where a server for example detects a project wide - # change that requires such a calculation. - # - # @return [boolean] - def refresh_support - attributes.fetch(:refreshSupport) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/inline_value_client_capabilities.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/inline_value_client_capabilities.rb deleted file mode 100644 index 9ba73675..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/inline_value_client_capabilities.rb +++ /dev/null @@ -1,37 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # Client capabilities specific to inline values. - # - class InlineValueClientCapabilities - def initialize(dynamic_registration: nil) - @attributes = {} - - @attributes[:dynamicRegistration] = dynamic_registration if dynamic_registration - - @attributes.freeze - end - - # - # Whether implementation supports dynamic registration for inline - # value providers. - # - # @return [boolean] - def dynamic_registration - attributes.fetch(:dynamicRegistration) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/inline_value_context.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/inline_value_context.rb deleted file mode 100644 index 4cde6639..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/inline_value_context.rb +++ /dev/null @@ -1,44 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class InlineValueContext - def initialize(frame_id:, stopped_location:) - @attributes = {} - - @attributes[:frameId] = frame_id - @attributes[:stoppedLocation] = stopped_location - - @attributes.freeze - end - - # - # The stack frame (as a DAP Id) where the execution has stopped. - # - # @return [number] - def frame_id - attributes.fetch(:frameId) - end - - # - # The document range where execution has stopped. - # Typically the end position of the range denotes the line where the - # inline values are shown. - # - # @return [Range] - def stopped_location - attributes.fetch(:stoppedLocation) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/inline_value_evaluatable_expression.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/inline_value_evaluatable_expression.rb deleted file mode 100644 index 68d0dcd8..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/inline_value_evaluatable_expression.rb +++ /dev/null @@ -1,52 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # Provide an inline value through an expression evaluation. - # - # If only a range is specified, the expression will be extracted from the - # underlying document. - # - # An optional expression can be used to override the extracted expression. - # - class InlineValueEvaluatableExpression - def initialize(range:, expression: nil) - @attributes = {} - - @attributes[:range] = range - @attributes[:expression] = expression if expression - - @attributes.freeze - end - - # - # The document range for which the inline value applies. - # The range is used to extract the evaluatable expression from the - # underlying document. - # - # @return [Range] - def range - attributes.fetch(:range) - end - - # - # If specified the expression overrides the extracted expression. - # - # @return [string] - def expression - attributes.fetch(:expression) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/inline_value_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/inline_value_options.rb deleted file mode 100644 index c2b51b42..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/inline_value_options.rb +++ /dev/null @@ -1,33 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # Inline value options used during static registration. - # - class InlineValueOptions - def initialize(work_done_progress: nil) - @attributes = {} - - @attributes[:workDoneProgress] = work_done_progress if work_done_progress - - @attributes.freeze - end - - # @return [boolean] - def work_done_progress - attributes.fetch(:workDoneProgress) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/inline_value_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/inline_value_params.rb deleted file mode 100644 index a67c11d0..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/inline_value_params.rb +++ /dev/null @@ -1,64 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # A parameter literal used in inline value requests. - # - class InlineValueParams - def initialize(work_done_token: nil, text_document:, range:, context:) - @attributes = {} - - @attributes[:workDoneToken] = work_done_token if work_done_token - @attributes[:textDocument] = text_document - @attributes[:range] = range - @attributes[:context] = context - - @attributes.freeze - end - - # - # An optional token that a server can use to report work done progress. - # - # @return [ProgressToken] - def work_done_token - attributes.fetch(:workDoneToken) - end - - # - # The text document. - # - # @return [TextDocumentIdentifier] - def text_document - attributes.fetch(:textDocument) - end - - # - # The document range for which inline values should be computed. - # - # @return [Range] - def range - attributes.fetch(:range) - end - - # - # Additional information about the context in which inline values were - # requested. - # - # @return [InlineValueContext] - def context - attributes.fetch(:context) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/inline_value_registration_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/inline_value_registration_options.rb deleted file mode 100644 index 921e32fc..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/inline_value_registration_options.rb +++ /dev/null @@ -1,53 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # Inline value options used during static or dynamic registration. - # - class InlineValueRegistrationOptions - def initialize(work_done_progress: nil, document_selector:, id: nil) - @attributes = {} - - @attributes[:workDoneProgress] = work_done_progress if work_done_progress - @attributes[:documentSelector] = document_selector - @attributes[:id] = id if id - - @attributes.freeze - end - - # @return [boolean] - def work_done_progress - attributes.fetch(:workDoneProgress) - end - - # - # A document selector to identify the scope of the registration. If set to - # null the document selector provided on the client side will be used. - # - # @return [DocumentSelector] - def document_selector - attributes.fetch(:documentSelector) - end - - # - # The id used to register the request. The id can be used to deregister - # the request again. See also Registration#id. - # - # @return [string] - def id - attributes.fetch(:id) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/inline_value_text.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/inline_value_text.rb deleted file mode 100644 index 3afcfae9..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/inline_value_text.rb +++ /dev/null @@ -1,45 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # Provide inline value as text. - # - class InlineValueText - def initialize(range:, text:) - @attributes = {} - - @attributes[:range] = range - @attributes[:text] = text - - @attributes.freeze - end - - # - # The document range for which the inline value applies. - # - # @return [Range] - def range - attributes.fetch(:range) - end - - # - # The text of the inline value. - # - # @return [string] - def text - attributes.fetch(:text) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/inline_value_variable_lookup.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/inline_value_variable_lookup.rb deleted file mode 100644 index 11638264..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/inline_value_variable_lookup.rb +++ /dev/null @@ -1,61 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # Provide inline value through a variable lookup. - # - # If only a range is specified, the variable name will be extracted from - # the underlying document. - # - # An optional variable name can be used to override the extracted name. - # - class InlineValueVariableLookup - def initialize(range:, variable_name: nil, case_sensitive_lookup:) - @attributes = {} - - @attributes[:range] = range - @attributes[:variableName] = variable_name if variable_name - @attributes[:caseSensitiveLookup] = case_sensitive_lookup - - @attributes.freeze - end - - # - # The document range for which the inline value applies. - # The range is used to extract the variable name from the underlying - # document. - # - # @return [Range] - def range - attributes.fetch(:range) - end - - # - # If specified the name of the variable to look up. - # - # @return [string] - def variable_name - attributes.fetch(:variableName) - end - - # - # How to perform the lookup. - # - # @return [boolean] - def case_sensitive_lookup - attributes.fetch(:caseSensitiveLookup) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/inline_value_workspace_client_capabilities.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/inline_value_workspace_client_capabilities.rb deleted file mode 100644 index 9a6def7b..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/inline_value_workspace_client_capabilities.rb +++ /dev/null @@ -1,42 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # Client workspace capabilities specific to inline values. - # - class InlineValueWorkspaceClientCapabilities - def initialize(refresh_support: nil) - @attributes = {} - - @attributes[:refreshSupport] = refresh_support if refresh_support - - @attributes.freeze - end - - # - # Whether the client implementation supports a refresh request sent from - # the server to the client. - # - # Note that this event is global and will force the client to refresh all - # inline values currently shown. It should be used with absolute care and - # is useful for situation where a server for example detect a project wide - # change that requires such a calculation. - # - # @return [boolean] - def refresh_support - attributes.fetch(:refreshSupport) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/insert_replace_edit.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/insert_replace_edit.rb deleted file mode 100644 index 536a2d60..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/insert_replace_edit.rb +++ /dev/null @@ -1,54 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # A special text edit to provide an insert and a replace operation. - # - class InsertReplaceEdit - def initialize(new_text:, insert:, replace:) - @attributes = {} - - @attributes[:newText] = new_text - @attributes[:insert] = insert - @attributes[:replace] = replace - - @attributes.freeze - end - - # - # The string to be inserted. - # - # @return [string] - def new_text - attributes.fetch(:newText) - end - - # - # The range if the insert is requested - # - # @return [Range] - def insert - attributes.fetch(:insert) - end - - # - # The range if the replace is requested. - # - # @return [Range] - def replace - attributes.fetch(:replace) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/linked_editing_range_client_capabilities.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/linked_editing_range_client_capabilities.rb deleted file mode 100644 index 277c59f4..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/linked_editing_range_client_capabilities.rb +++ /dev/null @@ -1,36 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class LinkedEditingRangeClientCapabilities - def initialize(dynamic_registration: nil) - @attributes = {} - - @attributes[:dynamicRegistration] = dynamic_registration if dynamic_registration - - @attributes.freeze - end - - # - # Whether the implementation supports dynamic registration. - # If this is set to `true` the client supports the new - # `(TextDocumentRegistrationOptions & StaticRegistrationOptions)` - # return value for the corresponding server capability as well. - # - # @return [boolean] - def dynamic_registration - attributes.fetch(:dynamicRegistration) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/linked_editing_range_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/linked_editing_range_options.rb deleted file mode 100644 index 873e3f73..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/linked_editing_range_options.rb +++ /dev/null @@ -1,30 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class LinkedEditingRangeOptions - def initialize(work_done_progress: nil) - @attributes = {} - - @attributes[:workDoneProgress] = work_done_progress if work_done_progress - - @attributes.freeze - end - - # @return [boolean] - def work_done_progress - attributes.fetch(:workDoneProgress) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/linked_editing_range_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/linked_editing_range_params.rb deleted file mode 100644 index b2400e72..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/linked_editing_range_params.rb +++ /dev/null @@ -1,51 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class LinkedEditingRangeParams - def initialize(text_document:, position:, work_done_token: nil) - @attributes = {} - - @attributes[:textDocument] = text_document - @attributes[:position] = position - @attributes[:workDoneToken] = work_done_token if work_done_token - - @attributes.freeze - end - - # - # The text document. - # - # @return [TextDocumentIdentifier] - def text_document - attributes.fetch(:textDocument) - end - - # - # The position inside the text document. - # - # @return [Position] - def position - attributes.fetch(:position) - end - - # - # An optional token that a server can use to report work done progress. - # - # @return [ProgressToken] - def work_done_token - attributes.fetch(:workDoneToken) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/linked_editing_range_registration_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/linked_editing_range_registration_options.rb deleted file mode 100644 index 649530e2..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/linked_editing_range_registration_options.rb +++ /dev/null @@ -1,50 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class LinkedEditingRangeRegistrationOptions - def initialize(document_selector:, work_done_progress: nil, id: nil) - @attributes = {} - - @attributes[:documentSelector] = document_selector - @attributes[:workDoneProgress] = work_done_progress if work_done_progress - @attributes[:id] = id if id - - @attributes.freeze - end - - # - # A document selector to identify the scope of the registration. If set to - # null the document selector provided on the client side will be used. - # - # @return [DocumentSelector] - def document_selector - attributes.fetch(:documentSelector) - end - - # @return [boolean] - def work_done_progress - attributes.fetch(:workDoneProgress) - end - - # - # The id used to register the request. The id can be used to deregister - # the request again. See also Registration#id. - # - # @return [string] - def id - attributes.fetch(:id) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/linked_editing_ranges.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/linked_editing_ranges.rb deleted file mode 100644 index 3336084c..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/linked_editing_ranges.rb +++ /dev/null @@ -1,46 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class LinkedEditingRanges - def initialize(ranges:, word_pattern: nil) - @attributes = {} - - @attributes[:ranges] = ranges - @attributes[:wordPattern] = word_pattern if word_pattern - - @attributes.freeze - end - - # - # A list of ranges that can be renamed together. The ranges must have - # identical length and contain identical text content. The ranges cannot - # overlap. - # - # @return [Range[]] - def ranges - attributes.fetch(:ranges) - end - - # - # An optional word pattern (regular expression) that describes valid - # contents for the given ranges. If no pattern is provided, the client - # configuration's word pattern will be used. - # - # @return [string] - def word_pattern - attributes.fetch(:wordPattern) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/location.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/location.rb deleted file mode 100644 index d0384968..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/location.rb +++ /dev/null @@ -1,36 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class Location - def initialize(uri:, range:) - @attributes = {} - - @attributes[:uri] = uri - @attributes[:range] = range - - @attributes.freeze - end - - # @return [string] - def uri - attributes.fetch(:uri) - end - - # @return [Range] - def range - attributes.fetch(:range) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/location_link.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/location_link.rb deleted file mode 100644 index 5298c8cd..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/location_link.rb +++ /dev/null @@ -1,68 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class LocationLink - def initialize(origin_selection_range: nil, target_uri:, target_range:, target_selection_range:) - @attributes = {} - - @attributes[:originSelectionRange] = origin_selection_range if origin_selection_range - @attributes[:targetUri] = target_uri - @attributes[:targetRange] = target_range - @attributes[:targetSelectionRange] = target_selection_range - - @attributes.freeze - end - - # - # Span of the origin of this link. - # - # Used as the underlined span for mouse interaction. Defaults to the word - # range at the mouse position. - # - # @return [Range] - def origin_selection_range - attributes.fetch(:originSelectionRange) - end - - # - # The target resource identifier of this link. - # - # @return [string] - def target_uri - attributes.fetch(:targetUri) - end - - # - # The full target range of this link. If the target for example is a symbol - # then target range is the range enclosing this symbol not including - # leading/trailing whitespace but everything else like comments. This - # information is typically used to highlight the range in the editor. - # - # @return [Range] - def target_range - attributes.fetch(:targetRange) - end - - # - # The range that should be selected and revealed when this link is being - # followed, e.g the name of a function. Must be contained by the - # `targetRange`. See also `DocumentSymbol#range` - # - # @return [Range] - def target_selection_range - attributes.fetch(:targetSelectionRange) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/log_message_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/log_message_params.rb deleted file mode 100644 index 36b9246f..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/log_message_params.rb +++ /dev/null @@ -1,42 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class LogMessageParams - def initialize(type:, message:) - @attributes = {} - - @attributes[:type] = type - @attributes[:message] = message - - @attributes.freeze - end - - # - # The message type. See {@link MessageType} - # - # @return [MessageType] - def type - attributes.fetch(:type) - end - - # - # The actual message - # - # @return [string] - def message - attributes.fetch(:message) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/log_trace_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/log_trace_params.rb deleted file mode 100644 index b4a2d41e..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/log_trace_params.rb +++ /dev/null @@ -1,43 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class LogTraceParams - def initialize(message:, verbose: nil) - @attributes = {} - - @attributes[:message] = message - @attributes[:verbose] = verbose if verbose - - @attributes.freeze - end - - # - # The message to be logged. - # - # @return [string] - def message - attributes.fetch(:message) - end - - # - # Additional information that can be computed if the `trace` configuration - # is set to `'verbose'` - # - # @return [string] - def verbose - attributes.fetch(:verbose) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/markup_content.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/markup_content.rb deleted file mode 100644 index 3cbea0c6..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/markup_content.rb +++ /dev/null @@ -1,68 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # A `MarkupContent` literal represents a string value which content is - # interpreted base on its kind flag. Currently the protocol supports - # `plaintext` and `markdown` as markup kinds. - # - # If the kind is `markdown` then the value can contain fenced code blocks like - # in GitHub issues. - # - # Here is an example how such a string can be constructed using - # JavaScript / TypeScript: - # ```typescript - # let markdown: MarkdownContent = { - # kind: MarkupKind.Markdown, - # value: [ - # '# Header', - # 'Some text', - # '```typescript', - # 'someCode();', - # '```' - # ].join('\n') - # }; - # ``` - # - # *Please Note* that clients might sanitize the return markdown. A client could - # decide to remove HTML from the markdown to avoid script execution. - # - class MarkupContent - def initialize(kind:, value:) - @attributes = {} - - @attributes[:kind] = kind - @attributes[:value] = value - - @attributes.freeze - end - - # - # The type of the Markup - # - # @return [MarkupKind] - def kind - attributes.fetch(:kind) - end - - # - # The content itself - # - # @return [string] - def value - attributes.fetch(:value) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/message.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/message.rb deleted file mode 100644 index ceffd339..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/message.rb +++ /dev/null @@ -1,30 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class Message - def initialize(jsonrpc:) - @attributes = {} - - @attributes[:jsonrpc] = jsonrpc - - @attributes.freeze - end - - # @return [string] - def jsonrpc - attributes.fetch(:jsonrpc) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/message_action_item.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/message_action_item.rb deleted file mode 100644 index 71eadc09..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/message_action_item.rb +++ /dev/null @@ -1,33 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class MessageActionItem - def initialize(title:) - @attributes = {} - - @attributes[:title] = title - - @attributes.freeze - end - - # - # A short title like 'Retry', 'Open Log' etc. - # - # @return [string] - def title - attributes.fetch(:title) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/moniker.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/moniker.rb deleted file mode 100644 index 74940b0e..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/moniker.rb +++ /dev/null @@ -1,64 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # Moniker definition to match LSIF 0.5 moniker definition. - # - class Moniker - def initialize(scheme:, identifier:, unique:, kind: nil) - @attributes = {} - - @attributes[:scheme] = scheme - @attributes[:identifier] = identifier - @attributes[:unique] = unique - @attributes[:kind] = kind if kind - - @attributes.freeze - end - - # - # The scheme of the moniker. For example tsc or .Net - # - # @return [string] - def scheme - attributes.fetch(:scheme) - end - - # - # The identifier of the moniker. The value is opaque in LSIF however - # schema owners are allowed to define the structure if they want. - # - # @return [string] - def identifier - attributes.fetch(:identifier) - end - - # - # The scope in which the moniker is unique - # - # @return [UniquenessLevel] - def unique - attributes.fetch(:unique) - end - - # - # The moniker kind if known. - # - # @return [MonikerKind] - def kind - attributes.fetch(:kind) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/moniker_client_capabilities.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/moniker_client_capabilities.rb deleted file mode 100644 index 04d12b33..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/moniker_client_capabilities.rb +++ /dev/null @@ -1,36 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class MonikerClientCapabilities - def initialize(dynamic_registration: nil) - @attributes = {} - - @attributes[:dynamicRegistration] = dynamic_registration if dynamic_registration - - @attributes.freeze - end - - # - # Whether implementation supports dynamic registration. If this is set to - # `true` the client supports the new `(TextDocumentRegistrationOptions & - # StaticRegistrationOptions)` return value for the corresponding server - # capability as well. - # - # @return [boolean] - def dynamic_registration - attributes.fetch(:dynamicRegistration) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/moniker_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/moniker_options.rb deleted file mode 100644 index 5c44abd2..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/moniker_options.rb +++ /dev/null @@ -1,30 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class MonikerOptions - def initialize(work_done_progress: nil) - @attributes = {} - - @attributes[:workDoneProgress] = work_done_progress if work_done_progress - - @attributes.freeze - end - - # @return [boolean] - def work_done_progress - attributes.fetch(:workDoneProgress) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/moniker_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/moniker_params.rb deleted file mode 100644 index e693abfe..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/moniker_params.rb +++ /dev/null @@ -1,61 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class MonikerParams - def initialize(text_document:, position:, work_done_token: nil, partial_result_token: nil) - @attributes = {} - - @attributes[:textDocument] = text_document - @attributes[:position] = position - @attributes[:workDoneToken] = work_done_token if work_done_token - @attributes[:partialResultToken] = partial_result_token if partial_result_token - - @attributes.freeze - end - - # - # The text document. - # - # @return [TextDocumentIdentifier] - def text_document - attributes.fetch(:textDocument) - end - - # - # The position inside the text document. - # - # @return [Position] - def position - attributes.fetch(:position) - end - - # - # An optional token that a server can use to report work done progress. - # - # @return [ProgressToken] - def work_done_token - attributes.fetch(:workDoneToken) - end - - # - # An optional token that a server can use to report partial results (e.g. - # streaming) to the client. - # - # @return [ProgressToken] - def partial_result_token - attributes.fetch(:partialResultToken) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/moniker_registration_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/moniker_registration_options.rb deleted file mode 100644 index 646df03b..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/moniker_registration_options.rb +++ /dev/null @@ -1,40 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class MonikerRegistrationOptions - def initialize(document_selector:, work_done_progress: nil) - @attributes = {} - - @attributes[:documentSelector] = document_selector - @attributes[:workDoneProgress] = work_done_progress if work_done_progress - - @attributes.freeze - end - - # - # A document selector to identify the scope of the registration. If set to - # null the document selector provided on the client side will be used. - # - # @return [DocumentSelector] - def document_selector - attributes.fetch(:documentSelector) - end - - # @return [boolean] - def work_done_progress - attributes.fetch(:workDoneProgress) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/notebook_cell.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/notebook_cell.rb deleted file mode 100644 index 7ea295ce..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/notebook_cell.rb +++ /dev/null @@ -1,69 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # A notebook cell. - # - # A cell's document URI must be unique across ALL notebook - # cells and can therefore be used to uniquely identify a - # notebook cell or the cell's text document. - # - class NotebookCell - def initialize(kind:, document:, metadata: nil, execution_summary: nil) - @attributes = {} - - @attributes[:kind] = kind - @attributes[:document] = document - @attributes[:metadata] = metadata if metadata - @attributes[:executionSummary] = execution_summary if execution_summary - - @attributes.freeze - end - - # - # The cell's kind - # - # @return [any] - def kind - attributes.fetch(:kind) - end - - # - # The URI of the cell's text document - # content. - # - # @return [string] - def document - attributes.fetch(:document) - end - - # - # Additional metadata stored with the cell. - # - # @return [LSPObject] - def metadata - attributes.fetch(:metadata) - end - - # - # Additional execution summary information - # if supported by the client. - # - # @return [ExecutionSummary] - def execution_summary - attributes.fetch(:executionSummary) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/notebook_cell_array_change.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/notebook_cell_array_change.rb deleted file mode 100644 index 5b368659..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/notebook_cell_array_change.rb +++ /dev/null @@ -1,55 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # A change describing how to move a `NotebookCell` - # array from state S to S'. - # - class NotebookCellArrayChange - def initialize(start:, delete_count:, cells: nil) - @attributes = {} - - @attributes[:start] = start - @attributes[:deleteCount] = delete_count - @attributes[:cells] = cells if cells - - @attributes.freeze - end - - # - # The start offset of the cell that changed. - # - # @return [number] - def start - attributes.fetch(:start) - end - - # - # The deleted cells - # - # @return [number] - def delete_count - attributes.fetch(:deleteCount) - end - - # - # The new cells, if any - # - # @return [NotebookCell[]] - def cells - attributes.fetch(:cells) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/notebook_cell_text_document_filter.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/notebook_cell_text_document_filter.rb deleted file mode 100644 index 31fab2c8..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/notebook_cell_text_document_filter.rb +++ /dev/null @@ -1,52 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # A notebook cell text document filter denotes a cell text - # document by different properties. - # - class NotebookCellTextDocumentFilter - def initialize(notebook:, language: nil) - @attributes = {} - - @attributes[:notebook] = notebook - @attributes[:language] = language if language - - @attributes.freeze - end - - # - # A filter that matches against the notebook - # containing the notebook cell. If a string - # value is provided it matches against the - # notebook type. '*' matches every notebook. - # - # @return [string | NotebookDocumentFilter] - def notebook - attributes.fetch(:notebook) - end - - # - # A language id like `python`. - # - # Will be matched against the language id of the - # notebook cell document. '*' matches every language. - # - # @return [string] - def language - attributes.fetch(:language) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/notebook_document.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/notebook_document.rb deleted file mode 100644 index 3901e09b..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/notebook_document.rb +++ /dev/null @@ -1,74 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # A notebook document. - # - class NotebookDocument - def initialize(uri:, notebook_type:, version:, metadata: nil, cells:) - @attributes = {} - - @attributes[:uri] = uri - @attributes[:notebookType] = notebook_type - @attributes[:version] = version - @attributes[:metadata] = metadata if metadata - @attributes[:cells] = cells - - @attributes.freeze - end - - # - # The notebook document's URI. - # - # @return [string] - def uri - attributes.fetch(:uri) - end - - # - # The type of the notebook. - # - # @return [string] - def notebook_type - attributes.fetch(:notebookType) - end - - # - # The version number of this document (it will increase after each - # change, including undo/redo). - # - # @return [number] - def version - attributes.fetch(:version) - end - - # - # Additional metadata stored with the notebook - # document. - # - # @return [LSPObject] - def metadata - attributes.fetch(:metadata) - end - - # - # The cells of a notebook. - # - # @return [NotebookCell[]] - def cells - attributes.fetch(:cells) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/notebook_document_change_event.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/notebook_document_change_event.rb deleted file mode 100644 index 10289aff..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/notebook_document_change_event.rb +++ /dev/null @@ -1,45 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # A change event for a notebook document. - # - class NotebookDocumentChangeEvent - def initialize(metadata: nil, cells: nil) - @attributes = {} - - @attributes[:metadata] = metadata if metadata - @attributes[:cells] = cells if cells - - @attributes.freeze - end - - # - # The changed meta data if any. - # - # @return [LSPObject] - def metadata - attributes.fetch(:metadata) - end - - # - # Changes to cells - # - # @return [{ structure?: { array: NotebookCellArrayChange; didOpen?: TextDocumentItem[]; didClose?: TextDocumentIdentifier[]; }; data?: NotebookCell[]; textContent?: { ...; }[]; }] - def cells - attributes.fetch(:cells) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/notebook_document_client_capabilities.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/notebook_document_client_capabilities.rb deleted file mode 100644 index ea52f0f7..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/notebook_document_client_capabilities.rb +++ /dev/null @@ -1,36 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # Capabilities specific to the notebook document support. - # - class NotebookDocumentClientCapabilities - def initialize(synchronization:) - @attributes = {} - - @attributes[:synchronization] = synchronization - - @attributes.freeze - end - - # - # Capabilities specific to notebook document synchronization - # - # @return [NotebookDocumentSyncClientCapabilities] - def synchronization - attributes.fetch(:synchronization) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/notebook_document_filter.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/notebook_document_filter.rb deleted file mode 100644 index f47975df..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/notebook_document_filter.rb +++ /dev/null @@ -1,79 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # A notebook document filter denotes a notebook document by - # different properties. - # - class NotebookDocumentFilter - def initialize(notebook_type: nil, scheme: nil, pattern: nil) - @attributes = {} - - @attributes[:notebookType] = notebook_type if notebook_type - @attributes[:scheme] = scheme if scheme - @attributes[:pattern] = pattern if pattern - - @attributes.freeze - end - - # - # The type of the enclosing notebook. - # - # --- OR --- - # - # The type of the enclosing notebook. - # - # --- OR --- - # - # The type of the enclosing notebook. - # - # @return [string] - def notebook_type - attributes.fetch(:notebookType) - end - - # - # A Uri [scheme](#Uri.scheme), like `file` or `untitled`. - # - # --- OR --- - # - # A Uri [scheme](#Uri.scheme), like `file` or `untitled`. - # - # --- OR --- - # - # A Uri [scheme](#Uri.scheme), like `file` or `untitled`. - # - # @return [string] - def scheme - attributes.fetch(:scheme) - end - - # - # A glob pattern. - # - # --- OR --- - # - # A glob pattern. - # - # --- OR --- - # - # A glob pattern. - # - # @return [string] - def pattern - attributes.fetch(:pattern) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/notebook_document_identifier.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/notebook_document_identifier.rb deleted file mode 100644 index ab7f9c48..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/notebook_document_identifier.rb +++ /dev/null @@ -1,36 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # A literal to identify a notebook document in the client. - # - class NotebookDocumentIdentifier - def initialize(uri:) - @attributes = {} - - @attributes[:uri] = uri - - @attributes.freeze - end - - # - # The notebook document's URI. - # - # @return [string] - def uri - attributes.fetch(:uri) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/notebook_document_sync_client_capabilities.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/notebook_document_sync_client_capabilities.rb deleted file mode 100644 index 758293d9..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/notebook_document_sync_client_capabilities.rb +++ /dev/null @@ -1,48 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # Notebook specific client capabilities. - # - class NotebookDocumentSyncClientCapabilities - def initialize(dynamic_registration: nil, execution_summary_support: nil) - @attributes = {} - - @attributes[:dynamicRegistration] = dynamic_registration if dynamic_registration - @attributes[:executionSummarySupport] = execution_summary_support if execution_summary_support - - @attributes.freeze - end - - # - # Whether implementation supports dynamic registration. If this is - # set to `true` the client supports the new - # `(TextDocumentRegistrationOptions & StaticRegistrationOptions)` - # return value for the corresponding server capability as well. - # - # @return [boolean] - def dynamic_registration - attributes.fetch(:dynamicRegistration) - end - - # - # The client supports sending execution summary data per cell. - # - # @return [boolean] - def execution_summary_support - attributes.fetch(:executionSummarySupport) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/notebook_document_sync_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/notebook_document_sync_options.rb deleted file mode 100644 index 8e8b5edd..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/notebook_document_sync_options.rb +++ /dev/null @@ -1,56 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # Options specific to a notebook plus its cells - # to be synced to the server. - # - # If a selector provides a notebook document - # filter but no cell selector all cells of a - # matching notebook document will be synced. - # - # If a selector provides no notebook document - # filter but only a cell selector all notebook - # documents that contain at least one matching - # cell will be synced. - # - class NotebookDocumentSyncOptions - def initialize(notebook_selector:, save: nil) - @attributes = {} - - @attributes[:notebookSelector] = notebook_selector - @attributes[:save] = save if save - - @attributes.freeze - end - - # - # The notebooks to be synced - # - # @return [({ notebook: string | NotebookDocumentFilter; cells?: { language: string; }[]; } | { notebook?: string | NotebookDocumentFilter; cells: { ...; }[]; })[]] - def notebook_selector - attributes.fetch(:notebookSelector) - end - - # - # Whether save notification should be forwarded to - # the server. Will only be honored if mode === `notebook`. - # - # @return [boolean] - def save - attributes.fetch(:save) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/notebook_document_sync_registration_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/notebook_document_sync_registration_options.rb deleted file mode 100644 index c9c154db..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/notebook_document_sync_registration_options.rb +++ /dev/null @@ -1,56 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # Registration options specific to a notebook. - # - class NotebookDocumentSyncRegistrationOptions - def initialize(notebook_selector:, save: nil, id: nil) - @attributes = {} - - @attributes[:notebookSelector] = notebook_selector - @attributes[:save] = save if save - @attributes[:id] = id if id - - @attributes.freeze - end - - # - # The notebooks to be synced - # - # @return [({ notebook: string | NotebookDocumentFilter; cells?: { language: string; }[]; } | { notebook?: string | NotebookDocumentFilter; cells: { ...; }[]; })[]] - def notebook_selector - attributes.fetch(:notebookSelector) - end - - # - # Whether save notification should be forwarded to - # the server. Will only be honored if mode === `notebook`. - # - # @return [boolean] - def save - attributes.fetch(:save) - end - - # - # The id used to register the request. The id can be used to deregister - # the request again. See also Registration#id. - # - # @return [string] - def id - attributes.fetch(:id) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/notification_message.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/notification_message.rb deleted file mode 100644 index 33fe4ba6..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/notification_message.rb +++ /dev/null @@ -1,48 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class NotificationMessage - def initialize(jsonrpc:, method:, params: nil) - @attributes = {} - - @attributes[:jsonrpc] = jsonrpc - @attributes[:method] = method - @attributes[:params] = params if params - - @attributes.freeze - end - - # @return [string] - def jsonrpc - attributes.fetch(:jsonrpc) - end - - # - # The method to be invoked. - # - # @return [string] - def method - attributes.fetch(:method) - end - - # - # The notification's params. - # - # @return [any] - def params - attributes.fetch(:params) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/optional_versioned_text_document_identifier.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/optional_versioned_text_document_identifier.rb deleted file mode 100644 index 7d243ed9..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/optional_versioned_text_document_identifier.rb +++ /dev/null @@ -1,50 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class OptionalVersionedTextDocumentIdentifier - def initialize(uri:, version:) - @attributes = {} - - @attributes[:uri] = uri - @attributes[:version] = version - - @attributes.freeze - end - - # - # The text document's URI. - # - # @return [string] - def uri - attributes.fetch(:uri) - end - - # - # The version number of this document. If an optional versioned text document - # identifier is sent from the server to the client and the file is not - # open in the editor (the server has not received an open notification - # before) the server can send `null` to indicate that the version is - # known and the content on disk is the master (as specified with document - # content ownership). - # - # The version number of a document will increase after each change, - # including undo/redo. The number doesn't need to be consecutive. - # - # @return [number] - def version - attributes.fetch(:version) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/parameter_information.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/parameter_information.rb deleted file mode 100644 index 78210f98..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/parameter_information.rb +++ /dev/null @@ -1,56 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # Represents a parameter of a callable-signature. A parameter can - # have a label and a doc-comment. - # - class ParameterInformation - def initialize(label:, documentation: nil) - @attributes = {} - - @attributes[:label] = label - @attributes[:documentation] = documentation if documentation - - @attributes.freeze - end - - # - # The label of this parameter information. - # - # Either a string or an inclusive start and exclusive end offsets within - # its containing signature label. (see SignatureInformation.label). The - # offsets are based on a UTF-16 string representation as `Position` and - # `Range` does. - # - # *Note*: a label of type string should be a substring of its containing - # signature label. Its intended use case is to highlight the parameter - # label part in the `SignatureInformation.label`. - # - # @return [string | [number, number]] - def label - attributes.fetch(:label) - end - - # - # The human-readable doc-comment of this parameter. Will be shown - # in the UI but can be omitted. - # - # @return [string | MarkupContent] - def documentation - attributes.fetch(:documentation) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/partial_result_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/partial_result_params.rb deleted file mode 100644 index 071458d2..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/partial_result_params.rb +++ /dev/null @@ -1,34 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class PartialResultParams - def initialize(partial_result_token: nil) - @attributes = {} - - @attributes[:partialResultToken] = partial_result_token if partial_result_token - - @attributes.freeze - end - - # - # An optional token that a server can use to report partial results (e.g. - # streaming) to the client. - # - # @return [ProgressToken] - def partial_result_token - attributes.fetch(:partialResultToken) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/position.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/position.rb deleted file mode 100644 index 89c18b2d..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/position.rb +++ /dev/null @@ -1,46 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class Position - def initialize(line:, character:) - @attributes = {} - - @attributes[:line] = line - @attributes[:character] = character - - @attributes.freeze - end - - # - # Line position in a document (zero-based). - # - # @return [number] - def line - attributes.fetch(:line) - end - - # - # Character offset on a line in a document (zero-based). The meaning of this - # offset is determined by the negotiated `PositionEncodingKind`. - # - # If the character value is greater than the line length it defaults back - # to the line length. - # - # @return [number] - def character - attributes.fetch(:character) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/prepare_rename_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/prepare_rename_params.rb deleted file mode 100644 index d8f23679..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/prepare_rename_params.rb +++ /dev/null @@ -1,51 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class PrepareRenameParams - def initialize(text_document:, position:, work_done_token: nil) - @attributes = {} - - @attributes[:textDocument] = text_document - @attributes[:position] = position - @attributes[:workDoneToken] = work_done_token if work_done_token - - @attributes.freeze - end - - # - # The text document. - # - # @return [TextDocumentIdentifier] - def text_document - attributes.fetch(:textDocument) - end - - # - # The position inside the text document. - # - # @return [Position] - def position - attributes.fetch(:position) - end - - # - # An optional token that a server can use to report work done progress. - # - # @return [ProgressToken] - def work_done_token - attributes.fetch(:workDoneToken) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/previous_result_id.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/previous_result_id.rb deleted file mode 100644 index b20e7ece..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/previous_result_id.rb +++ /dev/null @@ -1,46 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # A previous result id in a workspace pull request. - # - class PreviousResultId - def initialize(uri:, value:) - @attributes = {} - - @attributes[:uri] = uri - @attributes[:value] = value - - @attributes.freeze - end - - # - # The URI for which the client knows a - # result id. - # - # @return [string] - def uri - attributes.fetch(:uri) - end - - # - # The value of the previous result id. - # - # @return [string] - def value - attributes.fetch(:value) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/progress_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/progress_params.rb deleted file mode 100644 index 34706ae7..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/progress_params.rb +++ /dev/null @@ -1,42 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class ProgressParams - def initialize(token:, value:) - @attributes = {} - - @attributes[:token] = token - @attributes[:value] = value - - @attributes.freeze - end - - # - # The progress token provided by the client or server. - # - # @return [ProgressToken] - def token - attributes.fetch(:token) - end - - # - # The progress data. - # - # @return [T] - def value - attributes.fetch(:value) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/publish_diagnostics_client_capabilities.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/publish_diagnostics_client_capabilities.rb deleted file mode 100644 index d7658be4..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/publish_diagnostics_client_capabilities.rb +++ /dev/null @@ -1,73 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class PublishDiagnosticsClientCapabilities - def initialize(related_information: nil, tag_support: nil, version_support: nil, code_description_support: nil, data_support: nil) - @attributes = {} - - @attributes[:relatedInformation] = related_information if related_information - @attributes[:tagSupport] = tag_support if tag_support - @attributes[:versionSupport] = version_support if version_support - @attributes[:codeDescriptionSupport] = code_description_support if code_description_support - @attributes[:dataSupport] = data_support if data_support - - @attributes.freeze - end - - # - # Whether the clients accepts diagnostics with related information. - # - # @return [boolean] - def related_information - attributes.fetch(:relatedInformation) - end - - # - # Client supports the tag property to provide meta data about a diagnostic. - # Clients supporting tags have to handle unknown tags gracefully. - # - # @return [{ valueSet: DiagnosticTag[]; }] - def tag_support - attributes.fetch(:tagSupport) - end - - # - # Whether the client interprets the version property of the - # `textDocument/publishDiagnostics` notification's parameter. - # - # @return [boolean] - def version_support - attributes.fetch(:versionSupport) - end - - # - # Client supports a codeDescription property - # - # @return [boolean] - def code_description_support - attributes.fetch(:codeDescriptionSupport) - end - - # - # Whether code action supports the `data` property which is - # preserved between a `textDocument/publishDiagnostics` and - # `textDocument/codeAction` request. - # - # @return [boolean] - def data_support - attributes.fetch(:dataSupport) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/publish_diagnostics_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/publish_diagnostics_params.rb deleted file mode 100644 index ab953c15..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/publish_diagnostics_params.rb +++ /dev/null @@ -1,52 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class PublishDiagnosticsParams - def initialize(uri:, version: nil, diagnostics:) - @attributes = {} - - @attributes[:uri] = uri - @attributes[:version] = version if version - @attributes[:diagnostics] = diagnostics - - @attributes.freeze - end - - # - # The URI for which diagnostic information is reported. - # - # @return [string] - def uri - attributes.fetch(:uri) - end - - # - # Optional the version number of the document the diagnostics are published - # for. - # - # @return [number] - def version - attributes.fetch(:version) - end - - # - # An array of diagnostic information items. - # - # @return [Diagnostic[]] - def diagnostics - attributes.fetch(:diagnostics) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/range.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/range.rb deleted file mode 100644 index 679a39e8..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/range.rb +++ /dev/null @@ -1,42 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class Range - def initialize(start:, end:) - @attributes = {} - - @attributes[:start] = start - @attributes[:end] = binding.local_variable_get(:end) - - @attributes.freeze - end - - # - # The range's start position. - # - # @return [Position] - def start - attributes.fetch(:start) - end - - # - # The range's end position. - # - # @return [Position] - def end - attributes.fetch(:end) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/reference_client_capabilities.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/reference_client_capabilities.rb deleted file mode 100644 index f3d204c0..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/reference_client_capabilities.rb +++ /dev/null @@ -1,33 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class ReferenceClientCapabilities - def initialize(dynamic_registration: nil) - @attributes = {} - - @attributes[:dynamicRegistration] = dynamic_registration if dynamic_registration - - @attributes.freeze - end - - # - # Whether references supports dynamic registration. - # - # @return [boolean] - def dynamic_registration - attributes.fetch(:dynamicRegistration) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/reference_context.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/reference_context.rb deleted file mode 100644 index 9259e7b9..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/reference_context.rb +++ /dev/null @@ -1,33 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class ReferenceContext - def initialize(include_declaration:) - @attributes = {} - - @attributes[:includeDeclaration] = include_declaration - - @attributes.freeze - end - - # - # Include the declaration of the current symbol. - # - # @return [boolean] - def include_declaration - attributes.fetch(:includeDeclaration) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/reference_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/reference_options.rb deleted file mode 100644 index 97493e23..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/reference_options.rb +++ /dev/null @@ -1,30 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class ReferenceOptions - def initialize(work_done_progress: nil) - @attributes = {} - - @attributes[:workDoneProgress] = work_done_progress if work_done_progress - - @attributes.freeze - end - - # @return [boolean] - def work_done_progress - attributes.fetch(:workDoneProgress) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/reference_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/reference_params.rb deleted file mode 100644 index d549bb58..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/reference_params.rb +++ /dev/null @@ -1,67 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class ReferenceParams - def initialize(text_document:, position:, work_done_token: nil, partial_result_token: nil, context:) - @attributes = {} - - @attributes[:textDocument] = text_document - @attributes[:position] = position - @attributes[:workDoneToken] = work_done_token if work_done_token - @attributes[:partialResultToken] = partial_result_token if partial_result_token - @attributes[:context] = context - - @attributes.freeze - end - - # - # The text document. - # - # @return [TextDocumentIdentifier] - def text_document - attributes.fetch(:textDocument) - end - - # - # The position inside the text document. - # - # @return [Position] - def position - attributes.fetch(:position) - end - - # - # An optional token that a server can use to report work done progress. - # - # @return [ProgressToken] - def work_done_token - attributes.fetch(:workDoneToken) - end - - # - # An optional token that a server can use to report partial results (e.g. - # streaming) to the client. - # - # @return [ProgressToken] - def partial_result_token - attributes.fetch(:partialResultToken) - end - - # @return [ReferenceContext] - def context - attributes.fetch(:context) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/reference_registration_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/reference_registration_options.rb deleted file mode 100644 index 8f90106a..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/reference_registration_options.rb +++ /dev/null @@ -1,40 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class ReferenceRegistrationOptions - def initialize(document_selector:, work_done_progress: nil) - @attributes = {} - - @attributes[:documentSelector] = document_selector - @attributes[:workDoneProgress] = work_done_progress if work_done_progress - - @attributes.freeze - end - - # - # A document selector to identify the scope of the registration. If set to - # null the document selector provided on the client side will be used. - # - # @return [DocumentSelector] - def document_selector - attributes.fetch(:documentSelector) - end - - # @return [boolean] - def work_done_progress - attributes.fetch(:workDoneProgress) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/registration.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/registration.rb deleted file mode 100644 index 7d3e1516..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/registration.rb +++ /dev/null @@ -1,55 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # General parameters to register for a capability. - # - class Registration - def initialize(id:, method:, register_options: nil) - @attributes = {} - - @attributes[:id] = id - @attributes[:method] = method - @attributes[:registerOptions] = register_options if register_options - - @attributes.freeze - end - - # - # The id used to register the request. The id can be used to deregister - # the request again. - # - # @return [string] - def id - attributes.fetch(:id) - end - - # - # The method / capability to register for. - # - # @return [string] - def method - attributes.fetch(:method) - end - - # - # Options necessary for the registration. - # - # @return [LSPAny] - def register_options - attributes.fetch(:registerOptions) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/registration_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/registration_params.rb deleted file mode 100644 index 4b4d1b65..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/registration_params.rb +++ /dev/null @@ -1,30 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class RegistrationParams - def initialize(registrations:) - @attributes = {} - - @attributes[:registrations] = registrations - - @attributes.freeze - end - - # @return [Registration[]] - def registrations - attributes.fetch(:registrations) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/regular_expressions_client_capabilities.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/regular_expressions_client_capabilities.rb deleted file mode 100644 index 5a27f5a5..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/regular_expressions_client_capabilities.rb +++ /dev/null @@ -1,45 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # Client capabilities specific to regular expressions. - # - class RegularExpressionsClientCapabilities - def initialize(engine:, version: nil) - @attributes = {} - - @attributes[:engine] = engine - @attributes[:version] = version if version - - @attributes.freeze - end - - # - # The engine's name. - # - # @return [string] - def engine - attributes.fetch(:engine) - end - - # - # The engine's version. - # - # @return [string] - def version - attributes.fetch(:version) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/related_full_document_diagnostic_report.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/related_full_document_diagnostic_report.rb deleted file mode 100644 index eb783653..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/related_full_document_diagnostic_report.rb +++ /dev/null @@ -1,69 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # A full diagnostic report with a set of related documents. - # - class RelatedFullDocumentDiagnosticReport - def initialize(kind:, result_id: nil, items:, related_documents: nil) - @attributes = {} - - @attributes[:kind] = kind - @attributes[:resultId] = result_id if result_id - @attributes[:items] = items - @attributes[:relatedDocuments] = related_documents if related_documents - - @attributes.freeze - end - - # - # A full document diagnostic report. - # - # @return [any] - def kind - attributes.fetch(:kind) - end - - # - # An optional result id. If provided it will - # be sent on the next diagnostic request for the - # same document. - # - # @return [string] - def result_id - attributes.fetch(:resultId) - end - - # - # The actual items. - # - # @return [Diagnostic[]] - def items - attributes.fetch(:items) - end - - # - # Diagnostics of related documents. This information is useful - # in programming languages where code in a file A can generate - # diagnostics in a file B which A depends on. An example of - # such a language is C/C++ where marco definitions in a file - # a.cpp and result in errors in a header file b.hpp. - # - # @return [{ [uri: string]: FullDocumentDiagnosticReport | UnchangedDocumentDiagnosticReport; }] - def related_documents - attributes.fetch(:relatedDocuments) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/related_unchanged_document_diagnostic_report.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/related_unchanged_document_diagnostic_report.rb deleted file mode 100644 index 9159a154..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/related_unchanged_document_diagnostic_report.rb +++ /dev/null @@ -1,62 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # An unchanged diagnostic report with a set of related documents. - # - class RelatedUnchangedDocumentDiagnosticReport - def initialize(kind:, result_id:, related_documents: nil) - @attributes = {} - - @attributes[:kind] = kind - @attributes[:resultId] = result_id - @attributes[:relatedDocuments] = related_documents if related_documents - - @attributes.freeze - end - - # - # A document diagnostic report indicating - # no changes to the last result. A server can - # only return `unchanged` if result ids are - # provided. - # - # @return [any] - def kind - attributes.fetch(:kind) - end - - # - # A result id which will be sent on the next - # diagnostic request for the same document. - # - # @return [string] - def result_id - attributes.fetch(:resultId) - end - - # - # Diagnostics of related documents. This information is useful - # in programming languages where code in a file A can generate - # diagnostics in a file B which A depends on. An example of - # such a language is C/C++ where marco definitions in a file - # a.cpp and result in errors in a header file b.hpp. - # - # @return [{ [uri: string]: FullDocumentDiagnosticReport | UnchangedDocumentDiagnosticReport; }] - def related_documents - attributes.fetch(:relatedDocuments) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/relative_pattern.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/relative_pattern.rb deleted file mode 100644 index 0993a2c1..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/relative_pattern.rb +++ /dev/null @@ -1,48 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # A relative pattern is a helper to construct glob patterns that are matched - # relatively to a base URI. The common value for a `baseUri` is a workspace - # folder root, but it can be another absolute URI as well. - # - class RelativePattern - def initialize(base_uri:, pattern:) - @attributes = {} - - @attributes[:baseUri] = base_uri - @attributes[:pattern] = pattern - - @attributes.freeze - end - - # - # A workspace folder or a base URI to which this pattern will be matched - # against relatively. - # - # @return [string | WorkspaceFolder] - def base_uri - attributes.fetch(:baseUri) - end - - # - # The actual glob pattern; - # - # @return [string] - def pattern - attributes.fetch(:pattern) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/rename_client_capabilities.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/rename_client_capabilities.rb deleted file mode 100644 index fb890d09..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/rename_client_capabilities.rb +++ /dev/null @@ -1,69 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class RenameClientCapabilities - def initialize(dynamic_registration: nil, prepare_support: nil, prepare_support_default_behavior: nil, honors_change_annotations: nil) - @attributes = {} - - @attributes[:dynamicRegistration] = dynamic_registration if dynamic_registration - @attributes[:prepareSupport] = prepare_support if prepare_support - @attributes[:prepareSupportDefaultBehavior] = prepare_support_default_behavior if prepare_support_default_behavior - @attributes[:honorsChangeAnnotations] = honors_change_annotations if honors_change_annotations - - @attributes.freeze - end - - # - # Whether rename supports dynamic registration. - # - # @return [boolean] - def dynamic_registration - attributes.fetch(:dynamicRegistration) - end - - # - # Client supports testing for validity of rename operations - # before execution. - # - # @return [boolean] - def prepare_support - attributes.fetch(:prepareSupport) - end - - # - # Client supports the default behavior result - # (`{ defaultBehavior: boolean }`). - # - # The value indicates the default behavior used by the - # client. - # - # @return [1] - def prepare_support_default_behavior - attributes.fetch(:prepareSupportDefaultBehavior) - end - - # - # Whether the client honors the change annotations in - # text edits and resource operations returned via the - # rename request's workspace edit by for example presenting - # the workspace edit in the user interface and asking - # for confirmation. - # - # @return [boolean] - def honors_change_annotations - attributes.fetch(:honorsChangeAnnotations) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/rename_file.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/rename_file.rb deleted file mode 100644 index e297abb7..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/rename_file.rb +++ /dev/null @@ -1,72 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # Rename file operation - # - class RenameFile - def initialize(kind:, old_uri:, new_uri:, options: nil, annotation_id: nil) - @attributes = {} - - @attributes[:kind] = kind - @attributes[:oldUri] = old_uri - @attributes[:newUri] = new_uri - @attributes[:options] = options if options - @attributes[:annotationId] = annotation_id if annotation_id - - @attributes.freeze - end - - # - # A rename - # - # @return ["rename"] - def kind - attributes.fetch(:kind) - end - - # - # The old (existing) location. - # - # @return [string] - def old_uri - attributes.fetch(:oldUri) - end - - # - # The new location. - # - # @return [string] - def new_uri - attributes.fetch(:newUri) - end - - # - # Rename options. - # - # @return [RenameFileOptions] - def options - attributes.fetch(:options) - end - - # - # An optional annotation identifier describing the operation. - # - # @return [string] - def annotation_id - attributes.fetch(:annotationId) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/rename_file_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/rename_file_options.rb deleted file mode 100644 index 44d9ce98..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/rename_file_options.rb +++ /dev/null @@ -1,45 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # Rename file options - # - class RenameFileOptions - def initialize(overwrite: nil, ignore_if_exists: nil) - @attributes = {} - - @attributes[:overwrite] = overwrite if overwrite - @attributes[:ignoreIfExists] = ignore_if_exists if ignore_if_exists - - @attributes.freeze - end - - # - # Overwrite target if existing. Overwrite wins over `ignoreIfExists` - # - # @return [boolean] - def overwrite - attributes.fetch(:overwrite) - end - - # - # Ignores if target exists. - # - # @return [boolean] - def ignore_if_exists - attributes.fetch(:ignoreIfExists) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/rename_files_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/rename_files_params.rb deleted file mode 100644 index e5b7f1d4..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/rename_files_params.rb +++ /dev/null @@ -1,38 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # The parameters sent in notifications/requests for user-initiated renames - # of files. - # - class RenameFilesParams - def initialize(files:) - @attributes = {} - - @attributes[:files] = files - - @attributes.freeze - end - - # - # An array of all files/folders renamed in this operation. When a folder - # is renamed, only the folder will be included, and not its children. - # - # @return [FileRename[]] - def files - attributes.fetch(:files) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/rename_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/rename_options.rb deleted file mode 100644 index cbf02e47..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/rename_options.rb +++ /dev/null @@ -1,39 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class RenameOptions - def initialize(work_done_progress: nil, prepare_provider: nil) - @attributes = {} - - @attributes[:workDoneProgress] = work_done_progress if work_done_progress - @attributes[:prepareProvider] = prepare_provider if prepare_provider - - @attributes.freeze - end - - # @return [boolean] - def work_done_progress - attributes.fetch(:workDoneProgress) - end - - # - # Renames should be checked and tested before being executed. - # - # @return [boolean] - def prepare_provider - attributes.fetch(:prepareProvider) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/rename_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/rename_params.rb deleted file mode 100644 index 419d1893..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/rename_params.rb +++ /dev/null @@ -1,62 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class RenameParams - def initialize(text_document:, position:, work_done_token: nil, new_name:) - @attributes = {} - - @attributes[:textDocument] = text_document - @attributes[:position] = position - @attributes[:workDoneToken] = work_done_token if work_done_token - @attributes[:newName] = new_name - - @attributes.freeze - end - - # - # The text document. - # - # @return [TextDocumentIdentifier] - def text_document - attributes.fetch(:textDocument) - end - - # - # The position inside the text document. - # - # @return [Position] - def position - attributes.fetch(:position) - end - - # - # An optional token that a server can use to report work done progress. - # - # @return [ProgressToken] - def work_done_token - attributes.fetch(:workDoneToken) - end - - # - # The new name of the symbol. If the given name is not valid the - # request must return a [ResponseError](#ResponseError) with an - # appropriate message set. - # - # @return [string] - def new_name - attributes.fetch(:newName) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/rename_registration_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/rename_registration_options.rb deleted file mode 100644 index 9bc11b80..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/rename_registration_options.rb +++ /dev/null @@ -1,49 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class RenameRegistrationOptions - def initialize(document_selector:, work_done_progress: nil, prepare_provider: nil) - @attributes = {} - - @attributes[:documentSelector] = document_selector - @attributes[:workDoneProgress] = work_done_progress if work_done_progress - @attributes[:prepareProvider] = prepare_provider if prepare_provider - - @attributes.freeze - end - - # - # A document selector to identify the scope of the registration. If set to - # null the document selector provided on the client side will be used. - # - # @return [DocumentSelector] - def document_selector - attributes.fetch(:documentSelector) - end - - # @return [boolean] - def work_done_progress - attributes.fetch(:workDoneProgress) - end - - # - # Renames should be checked and tested before being executed. - # - # @return [boolean] - def prepare_provider - attributes.fetch(:prepareProvider) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/request_message.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/request_message.rb deleted file mode 100644 index c2bb99b1..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/request_message.rb +++ /dev/null @@ -1,57 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class RequestMessage - def initialize(jsonrpc:, id:, method:, params: nil) - @attributes = {} - - @attributes[:jsonrpc] = jsonrpc - @attributes[:id] = id - @attributes[:method] = method - @attributes[:params] = params if params - - @attributes.freeze - end - - # @return [string] - def jsonrpc - attributes.fetch(:jsonrpc) - end - - # - # The request id. - # - # @return [string | number] - def id - attributes.fetch(:id) - end - - # - # The method to be invoked. - # - # @return [string] - def method - attributes.fetch(:method) - end - - # - # The method's params. - # - # @return [any] - def params - attributes.fetch(:params) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/response_error.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/response_error.rb deleted file mode 100644 index 4efdf36a..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/response_error.rb +++ /dev/null @@ -1,52 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class ResponseError - def initialize(code:, message:, data: nil) - @attributes = {} - - @attributes[:code] = code - @attributes[:message] = message - @attributes[:data] = data if data - - @attributes.freeze - end - - # - # A number indicating the error type that occurred. - # - # @return [number] - def code - attributes.fetch(:code) - end - - # - # A string providing a short description of the error. - # - # @return [string] - def message - attributes.fetch(:message) - end - - # - # A primitive or structured value that contains additional - # information about the error. Can be omitted. - # - # @return [any] - def data - attributes.fetch(:data) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/response_message.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/response_message.rb deleted file mode 100644 index 98dcceea..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/response_message.rb +++ /dev/null @@ -1,58 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class ResponseMessage - def initialize(jsonrpc:, id:, result: nil, error: nil) - @attributes = {} - - @attributes[:jsonrpc] = jsonrpc - @attributes[:id] = id - @attributes[:result] = result if result - @attributes[:error] = error if error - - @attributes.freeze - end - - # @return [string] - def jsonrpc - attributes.fetch(:jsonrpc) - end - - # - # The request id. - # - # @return [string | number] - def id - attributes.fetch(:id) - end - - # - # The result of a request. This member is REQUIRED on success. - # This member MUST NOT exist if there was an error invoking the method. - # - # @return [string | number | boolean | object] - def result - attributes.fetch(:result) - end - - # - # The error object in case a request fails. - # - # @return [ResponseError] - def error - attributes.fetch(:error) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/save_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/save_options.rb deleted file mode 100644 index 1de39cf3..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/save_options.rb +++ /dev/null @@ -1,33 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class SaveOptions - def initialize(include_text: nil) - @attributes = {} - - @attributes[:includeText] = include_text if include_text - - @attributes.freeze - end - - # - # The client is supposed to include the content on save. - # - # @return [boolean] - def include_text - attributes.fetch(:includeText) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/selection_range.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/selection_range.rb deleted file mode 100644 index 156a2c7c..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/selection_range.rb +++ /dev/null @@ -1,43 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class SelectionRange - def initialize(range:, parent: nil) - @attributes = {} - - @attributes[:range] = range - @attributes[:parent] = parent if parent - - @attributes.freeze - end - - # - # The [range](#Range) of this selection range. - # - # @return [Range] - def range - attributes.fetch(:range) - end - - # - # The parent selection range containing this range. Therefore - # `parent.range` must contain `this.range`. - # - # @return [SelectionRange] - def parent - attributes.fetch(:parent) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/selection_range_client_capabilities.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/selection_range_client_capabilities.rb deleted file mode 100644 index c871ff36..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/selection_range_client_capabilities.rb +++ /dev/null @@ -1,36 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class SelectionRangeClientCapabilities - def initialize(dynamic_registration: nil) - @attributes = {} - - @attributes[:dynamicRegistration] = dynamic_registration if dynamic_registration - - @attributes.freeze - end - - # - # Whether implementation supports dynamic registration for selection range - # providers. If this is set to `true` the client supports the new - # `SelectionRangeRegistrationOptions` return value for the corresponding - # server capability as well. - # - # @return [boolean] - def dynamic_registration - attributes.fetch(:dynamicRegistration) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/selection_range_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/selection_range_options.rb deleted file mode 100644 index baf5e3de..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/selection_range_options.rb +++ /dev/null @@ -1,30 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class SelectionRangeOptions - def initialize(work_done_progress: nil) - @attributes = {} - - @attributes[:workDoneProgress] = work_done_progress if work_done_progress - - @attributes.freeze - end - - # @return [boolean] - def work_done_progress - attributes.fetch(:workDoneProgress) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/selection_range_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/selection_range_params.rb deleted file mode 100644 index b9531da6..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/selection_range_params.rb +++ /dev/null @@ -1,61 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class SelectionRangeParams - def initialize(work_done_token: nil, partial_result_token: nil, text_document:, positions:) - @attributes = {} - - @attributes[:workDoneToken] = work_done_token if work_done_token - @attributes[:partialResultToken] = partial_result_token if partial_result_token - @attributes[:textDocument] = text_document - @attributes[:positions] = positions - - @attributes.freeze - end - - # - # An optional token that a server can use to report work done progress. - # - # @return [ProgressToken] - def work_done_token - attributes.fetch(:workDoneToken) - end - - # - # An optional token that a server can use to report partial results (e.g. - # streaming) to the client. - # - # @return [ProgressToken] - def partial_result_token - attributes.fetch(:partialResultToken) - end - - # - # The text document. - # - # @return [TextDocumentIdentifier] - def text_document - attributes.fetch(:textDocument) - end - - # - # The positions inside the text document. - # - # @return [Position[]] - def positions - attributes.fetch(:positions) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/selection_range_registration_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/selection_range_registration_options.rb deleted file mode 100644 index 8f293c07..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/selection_range_registration_options.rb +++ /dev/null @@ -1,50 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class SelectionRangeRegistrationOptions - def initialize(work_done_progress: nil, document_selector:, id: nil) - @attributes = {} - - @attributes[:workDoneProgress] = work_done_progress if work_done_progress - @attributes[:documentSelector] = document_selector - @attributes[:id] = id if id - - @attributes.freeze - end - - # @return [boolean] - def work_done_progress - attributes.fetch(:workDoneProgress) - end - - # - # A document selector to identify the scope of the registration. If set to - # null the document selector provided on the client side will be used. - # - # @return [DocumentSelector] - def document_selector - attributes.fetch(:documentSelector) - end - - # - # The id used to register the request. The id can be used to deregister - # the request again. See also Registration#id. - # - # @return [string] - def id - attributes.fetch(:id) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/semantic_tokens.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/semantic_tokens.rb deleted file mode 100644 index 6b5456ea..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/semantic_tokens.rb +++ /dev/null @@ -1,45 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class SemanticTokens - def initialize(result_id: nil, data:) - @attributes = {} - - @attributes[:resultId] = result_id if result_id - @attributes[:data] = data - - @attributes.freeze - end - - # - # An optional result id. If provided and clients support delta updating - # the client will include the result id in the next semantic token request. - # A server can then instead of computing all semantic tokens again simply - # send a delta. - # - # @return [string] - def result_id - attributes.fetch(:resultId) - end - - # - # The actual tokens. - # - # @return [number[]] - def data - attributes.fetch(:data) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/semantic_tokens_client_capabilities.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/semantic_tokens_client_capabilities.rb deleted file mode 100644 index 9c32b556..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/semantic_tokens_client_capabilities.rb +++ /dev/null @@ -1,125 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class SemanticTokensClientCapabilities - def initialize(dynamic_registration: nil, requests:, token_types:, token_modifiers:, formats:, overlapping_token_support: nil, multiline_token_support: nil, server_cancel_support: nil, augments_syntax_tokens: nil) - @attributes = {} - - @attributes[:dynamicRegistration] = dynamic_registration if dynamic_registration - @attributes[:requests] = requests - @attributes[:tokenTypes] = token_types - @attributes[:tokenModifiers] = token_modifiers - @attributes[:formats] = formats - @attributes[:overlappingTokenSupport] = overlapping_token_support if overlapping_token_support - @attributes[:multilineTokenSupport] = multiline_token_support if multiline_token_support - @attributes[:serverCancelSupport] = server_cancel_support if server_cancel_support - @attributes[:augmentsSyntaxTokens] = augments_syntax_tokens if augments_syntax_tokens - - @attributes.freeze - end - - # - # Whether implementation supports dynamic registration. If this is set to - # `true` the client supports the new `(TextDocumentRegistrationOptions & - # StaticRegistrationOptions)` return value for the corresponding server - # capability as well. - # - # @return [boolean] - def dynamic_registration - attributes.fetch(:dynamicRegistration) - end - - # - # Which requests the client supports and might send to the server - # depending on the server's capability. Please note that clients might not - # show semantic tokens or degrade some of the user experience if a range - # or full request is advertised by the client but not provided by the - # server. If for example the client capability `requests.full` and - # `request.range` are both set to true but the server only provides a - # range provider the client might not render a minimap correctly or might - # even decide to not show any semantic tokens at all. - # - # @return [{ range?: boolean | {}; full?: boolean | { delta?: boolean; }; }] - def requests - attributes.fetch(:requests) - end - - # - # The token types that the client supports. - # - # @return [string[]] - def token_types - attributes.fetch(:tokenTypes) - end - - # - # The token modifiers that the client supports. - # - # @return [string[]] - def token_modifiers - attributes.fetch(:tokenModifiers) - end - - # - # The formats the clients supports. - # - # @return ["relative"[]] - def formats - attributes.fetch(:formats) - end - - # - # Whether the client supports tokens that can overlap each other. - # - # @return [boolean] - def overlapping_token_support - attributes.fetch(:overlappingTokenSupport) - end - - # - # Whether the client supports tokens that can span multiple lines. - # - # @return [boolean] - def multiline_token_support - attributes.fetch(:multilineTokenSupport) - end - - # - # Whether the client allows the server to actively cancel a - # semantic token request, e.g. supports returning - # ErrorCodes.ServerCancelled. If a server does the client - # needs to retrigger the request. - # - # @return [boolean] - def server_cancel_support - attributes.fetch(:serverCancelSupport) - end - - # - # Whether the client uses semantic tokens to augment existing - # syntax tokens. If set to `true` client side created syntax - # tokens and semantic tokens are both used for colorization. If - # set to `false` the client only uses the returned semantic tokens - # for colorization. - # - # If the value is `undefined` then the client behavior is not - # specified. - # - # @return [boolean] - def augments_syntax_tokens - attributes.fetch(:augmentsSyntaxTokens) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/semantic_tokens_delta.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/semantic_tokens_delta.rb deleted file mode 100644 index 95003e5a..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/semantic_tokens_delta.rb +++ /dev/null @@ -1,40 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class SemanticTokensDelta - def initialize(result_id: nil, edits:) - @attributes = {} - - @attributes[:resultId] = result_id if result_id - @attributes[:edits] = edits - - @attributes.freeze - end - - # @return [string] - def result_id - attributes.fetch(:resultId) - end - - # - # The semantic token edits to transform a previous result into a new - # result. - # - # @return [SemanticTokensEdit[]] - def edits - attributes.fetch(:edits) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/semantic_tokens_delta_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/semantic_tokens_delta_params.rb deleted file mode 100644 index 7a3c26d0..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/semantic_tokens_delta_params.rb +++ /dev/null @@ -1,62 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class SemanticTokensDeltaParams - def initialize(work_done_token: nil, partial_result_token: nil, text_document:, previous_result_id:) - @attributes = {} - - @attributes[:workDoneToken] = work_done_token if work_done_token - @attributes[:partialResultToken] = partial_result_token if partial_result_token - @attributes[:textDocument] = text_document - @attributes[:previousResultId] = previous_result_id - - @attributes.freeze - end - - # - # An optional token that a server can use to report work done progress. - # - # @return [ProgressToken] - def work_done_token - attributes.fetch(:workDoneToken) - end - - # - # An optional token that a server can use to report partial results (e.g. - # streaming) to the client. - # - # @return [ProgressToken] - def partial_result_token - attributes.fetch(:partialResultToken) - end - - # - # The text document. - # - # @return [TextDocumentIdentifier] - def text_document - attributes.fetch(:textDocument) - end - - # - # The result id of a previous response. The result Id can either point to - # a full response or a delta response depending on what was received last. - # - # @return [string] - def previous_result_id - attributes.fetch(:previousResultId) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/semantic_tokens_delta_partial_result.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/semantic_tokens_delta_partial_result.rb deleted file mode 100644 index 2bd5a43d..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/semantic_tokens_delta_partial_result.rb +++ /dev/null @@ -1,30 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class SemanticTokensDeltaPartialResult - def initialize(edits:) - @attributes = {} - - @attributes[:edits] = edits - - @attributes.freeze - end - - # @return [SemanticTokensEdit[]] - def edits - attributes.fetch(:edits) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/semantic_tokens_edit.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/semantic_tokens_edit.rb deleted file mode 100644 index c8e449e8..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/semantic_tokens_edit.rb +++ /dev/null @@ -1,51 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class SemanticTokensEdit - def initialize(start:, delete_count:, data: nil) - @attributes = {} - - @attributes[:start] = start - @attributes[:deleteCount] = delete_count - @attributes[:data] = data if data - - @attributes.freeze - end - - # - # The start offset of the edit. - # - # @return [number] - def start - attributes.fetch(:start) - end - - # - # The count of elements to remove. - # - # @return [number] - def delete_count - attributes.fetch(:deleteCount) - end - - # - # The elements to insert. - # - # @return [number[]] - def data - attributes.fetch(:data) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/semantic_tokens_legend.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/semantic_tokens_legend.rb deleted file mode 100644 index 0d70a1b2..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/semantic_tokens_legend.rb +++ /dev/null @@ -1,42 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class SemanticTokensLegend - def initialize(token_types:, token_modifiers:) - @attributes = {} - - @attributes[:tokenTypes] = token_types - @attributes[:tokenModifiers] = token_modifiers - - @attributes.freeze - end - - # - # The token types a server uses. - # - # @return [string[]] - def token_types - attributes.fetch(:tokenTypes) - end - - # - # The token modifiers a server uses. - # - # @return [string[]] - def token_modifiers - attributes.fetch(:tokenModifiers) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/semantic_tokens_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/semantic_tokens_options.rb deleted file mode 100644 index afa70c77..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/semantic_tokens_options.rb +++ /dev/null @@ -1,58 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class SemanticTokensOptions - def initialize(work_done_progress: nil, legend:, range: nil, full: nil) - @attributes = {} - - @attributes[:workDoneProgress] = work_done_progress if work_done_progress - @attributes[:legend] = legend - @attributes[:range] = range if range - @attributes[:full] = full if full - - @attributes.freeze - end - - # @return [boolean] - def work_done_progress - attributes.fetch(:workDoneProgress) - end - - # - # The legend used by the server - # - # @return [SemanticTokensLegend] - def legend - attributes.fetch(:legend) - end - - # - # Server supports providing semantic tokens for a specific range - # of a document. - # - # @return [boolean | {}] - def range - attributes.fetch(:range) - end - - # - # Server supports providing semantic tokens for a full document. - # - # @return [boolean | { delta?: boolean; }] - def full - attributes.fetch(:full) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/semantic_tokens_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/semantic_tokens_params.rb deleted file mode 100644 index ab4d862a..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/semantic_tokens_params.rb +++ /dev/null @@ -1,52 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class SemanticTokensParams - def initialize(work_done_token: nil, partial_result_token: nil, text_document:) - @attributes = {} - - @attributes[:workDoneToken] = work_done_token if work_done_token - @attributes[:partialResultToken] = partial_result_token if partial_result_token - @attributes[:textDocument] = text_document - - @attributes.freeze - end - - # - # An optional token that a server can use to report work done progress. - # - # @return [ProgressToken] - def work_done_token - attributes.fetch(:workDoneToken) - end - - # - # An optional token that a server can use to report partial results (e.g. - # streaming) to the client. - # - # @return [ProgressToken] - def partial_result_token - attributes.fetch(:partialResultToken) - end - - # - # The text document. - # - # @return [TextDocumentIdentifier] - def text_document - attributes.fetch(:textDocument) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/semantic_tokens_partial_result.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/semantic_tokens_partial_result.rb deleted file mode 100644 index b5132fd5..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/semantic_tokens_partial_result.rb +++ /dev/null @@ -1,30 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class SemanticTokensPartialResult - def initialize(data:) - @attributes = {} - - @attributes[:data] = data - - @attributes.freeze - end - - # @return [number[]] - def data - attributes.fetch(:data) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/semantic_tokens_range_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/semantic_tokens_range_params.rb deleted file mode 100644 index 82c04a5f..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/semantic_tokens_range_params.rb +++ /dev/null @@ -1,61 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class SemanticTokensRangeParams - def initialize(work_done_token: nil, partial_result_token: nil, text_document:, range:) - @attributes = {} - - @attributes[:workDoneToken] = work_done_token if work_done_token - @attributes[:partialResultToken] = partial_result_token if partial_result_token - @attributes[:textDocument] = text_document - @attributes[:range] = range - - @attributes.freeze - end - - # - # An optional token that a server can use to report work done progress. - # - # @return [ProgressToken] - def work_done_token - attributes.fetch(:workDoneToken) - end - - # - # An optional token that a server can use to report partial results (e.g. - # streaming) to the client. - # - # @return [ProgressToken] - def partial_result_token - attributes.fetch(:partialResultToken) - end - - # - # The text document. - # - # @return [TextDocumentIdentifier] - def text_document - attributes.fetch(:textDocument) - end - - # - # The range the semantic tokens are requested for. - # - # @return [Range] - def range - attributes.fetch(:range) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/semantic_tokens_registration_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/semantic_tokens_registration_options.rb deleted file mode 100644 index ea47203b..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/semantic_tokens_registration_options.rb +++ /dev/null @@ -1,78 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class SemanticTokensRegistrationOptions - def initialize(document_selector:, work_done_progress: nil, legend:, range: nil, full: nil, id: nil) - @attributes = {} - - @attributes[:documentSelector] = document_selector - @attributes[:workDoneProgress] = work_done_progress if work_done_progress - @attributes[:legend] = legend - @attributes[:range] = range if range - @attributes[:full] = full if full - @attributes[:id] = id if id - - @attributes.freeze - end - - # - # A document selector to identify the scope of the registration. If set to - # null the document selector provided on the client side will be used. - # - # @return [DocumentSelector] - def document_selector - attributes.fetch(:documentSelector) - end - - # @return [boolean] - def work_done_progress - attributes.fetch(:workDoneProgress) - end - - # - # The legend used by the server - # - # @return [SemanticTokensLegend] - def legend - attributes.fetch(:legend) - end - - # - # Server supports providing semantic tokens for a specific range - # of a document. - # - # @return [boolean | {}] - def range - attributes.fetch(:range) - end - - # - # Server supports providing semantic tokens for a full document. - # - # @return [boolean | { delta?: boolean; }] - def full - attributes.fetch(:full) - end - - # - # The id used to register the request. The id can be used to deregister - # the request again. See also Registration#id. - # - # @return [string] - def id - attributes.fetch(:id) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/semantic_tokens_workspace_client_capabilities.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/semantic_tokens_workspace_client_capabilities.rb deleted file mode 100644 index 86559d07..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/semantic_tokens_workspace_client_capabilities.rb +++ /dev/null @@ -1,39 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class SemanticTokensWorkspaceClientCapabilities - def initialize(refresh_support: nil) - @attributes = {} - - @attributes[:refreshSupport] = refresh_support if refresh_support - - @attributes.freeze - end - - # - # Whether the client implementation supports a refresh request sent from - # the server to the client. - # - # Note that this event is global and will force the client to refresh all - # semantic tokens currently shown. It should be used with absolute care - # and is useful for situation where a server for example detect a project - # wide change that requires such a calculation. - # - # @return [boolean] - def refresh_support - attributes.fetch(:refreshSupport) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/server_capabilities.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/server_capabilities.rb deleted file mode 100644 index 893be388..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/server_capabilities.rb +++ /dev/null @@ -1,352 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class ServerCapabilities - def initialize(position_encoding: nil, text_document_sync: nil, notebook_document_sync: nil, completion_provider: nil, hover_provider: nil, signature_help_provider: nil, declaration_provider: nil, definition_provider: nil, type_definition_provider: nil, implementation_provider: nil, references_provider: nil, document_highlight_provider: nil, document_symbol_provider: nil, code_action_provider: nil, code_lens_provider: nil, document_link_provider: nil, color_provider: nil, document_formatting_provider: nil, document_range_formatting_provider: nil, document_on_type_formatting_provider: nil, rename_provider: nil, folding_range_provider: nil, execute_command_provider: nil, selection_range_provider: nil, linked_editing_range_provider: nil, call_hierarchy_provider: nil, semantic_tokens_provider: nil, moniker_provider: nil, type_hierarchy_provider: nil, inline_value_provider: nil, inlay_hint_provider: nil, diagnostic_provider: nil, workspace_symbol_provider: nil, workspace: nil, experimental: nil) - @attributes = {} - - @attributes[:positionEncoding] = position_encoding if position_encoding - @attributes[:textDocumentSync] = text_document_sync if text_document_sync - @attributes[:notebookDocumentSync] = notebook_document_sync if notebook_document_sync - @attributes[:completionProvider] = completion_provider if completion_provider - @attributes[:hoverProvider] = hover_provider if hover_provider - @attributes[:signatureHelpProvider] = signature_help_provider if signature_help_provider - @attributes[:declarationProvider] = declaration_provider if declaration_provider - @attributes[:definitionProvider] = definition_provider if definition_provider - @attributes[:typeDefinitionProvider] = type_definition_provider if type_definition_provider - @attributes[:implementationProvider] = implementation_provider if implementation_provider - @attributes[:referencesProvider] = references_provider if references_provider - @attributes[:documentHighlightProvider] = document_highlight_provider if document_highlight_provider - @attributes[:documentSymbolProvider] = document_symbol_provider if document_symbol_provider - @attributes[:codeActionProvider] = code_action_provider if code_action_provider - @attributes[:codeLensProvider] = code_lens_provider if code_lens_provider - @attributes[:documentLinkProvider] = document_link_provider if document_link_provider - @attributes[:colorProvider] = color_provider if color_provider - @attributes[:documentFormattingProvider] = document_formatting_provider if document_formatting_provider - @attributes[:documentRangeFormattingProvider] = document_range_formatting_provider if document_range_formatting_provider - @attributes[:documentOnTypeFormattingProvider] = document_on_type_formatting_provider if document_on_type_formatting_provider - @attributes[:renameProvider] = rename_provider if rename_provider - @attributes[:foldingRangeProvider] = folding_range_provider if folding_range_provider - @attributes[:executeCommandProvider] = execute_command_provider if execute_command_provider - @attributes[:selectionRangeProvider] = selection_range_provider if selection_range_provider - @attributes[:linkedEditingRangeProvider] = linked_editing_range_provider if linked_editing_range_provider - @attributes[:callHierarchyProvider] = call_hierarchy_provider if call_hierarchy_provider - @attributes[:semanticTokensProvider] = semantic_tokens_provider if semantic_tokens_provider - @attributes[:monikerProvider] = moniker_provider if moniker_provider - @attributes[:typeHierarchyProvider] = type_hierarchy_provider if type_hierarchy_provider - @attributes[:inlineValueProvider] = inline_value_provider if inline_value_provider - @attributes[:inlayHintProvider] = inlay_hint_provider if inlay_hint_provider - @attributes[:diagnosticProvider] = diagnostic_provider if diagnostic_provider - @attributes[:workspaceSymbolProvider] = workspace_symbol_provider if workspace_symbol_provider - @attributes[:workspace] = workspace if workspace - @attributes[:experimental] = experimental if experimental - - @attributes.freeze - end - - # - # The position encoding the server picked from the encodings offered - # by the client via the client capability `general.positionEncodings`. - # - # If the client didn't provide any position encodings the only valid - # value that a server can return is 'utf-16'. - # - # If omitted it defaults to 'utf-16'. - # - # @return [string] - def position_encoding - attributes.fetch(:positionEncoding) - end - - # - # Defines how text documents are synced. Is either a detailed structure - # defining each notification or for backwards compatibility the - # TextDocumentSyncKind number. If omitted it defaults to - # `TextDocumentSyncKind.None`. - # - # @return [TextDocumentSyncOptions | TextDocumentSyncKind] - def text_document_sync - attributes.fetch(:textDocumentSync) - end - - # - # Defines how notebook documents are synced. - # - # @return [NotebookDocumentSyncOptions | NotebookDocumentSyncRegistrationOptions] - def notebook_document_sync - attributes.fetch(:notebookDocumentSync) - end - - # - # The server provides completion support. - # - # @return [CompletionOptions] - def completion_provider - attributes.fetch(:completionProvider) - end - - # - # The server provides hover support. - # - # @return [boolean | HoverOptions] - def hover_provider - attributes.fetch(:hoverProvider) - end - - # - # The server provides signature help support. - # - # @return [SignatureHelpOptions] - def signature_help_provider - attributes.fetch(:signatureHelpProvider) - end - - # - # The server provides go to declaration support. - # - # @return [boolean | DeclarationOptions | DeclarationRegistrationOptions] - def declaration_provider - attributes.fetch(:declarationProvider) - end - - # - # The server provides goto definition support. - # - # @return [boolean | DefinitionOptions] - def definition_provider - attributes.fetch(:definitionProvider) - end - - # - # The server provides goto type definition support. - # - # @return [boolean | TypeDefinitionOptions | TypeDefinitionRegistrationOptions] - def type_definition_provider - attributes.fetch(:typeDefinitionProvider) - end - - # - # The server provides goto implementation support. - # - # @return [boolean | ImplementationOptions | ImplementationRegistrationOptions] - def implementation_provider - attributes.fetch(:implementationProvider) - end - - # - # The server provides find references support. - # - # @return [boolean | ReferenceOptions] - def references_provider - attributes.fetch(:referencesProvider) - end - - # - # The server provides document highlight support. - # - # @return [boolean | DocumentHighlightOptions] - def document_highlight_provider - attributes.fetch(:documentHighlightProvider) - end - - # - # The server provides document symbol support. - # - # @return [boolean | DocumentSymbolOptions] - def document_symbol_provider - attributes.fetch(:documentSymbolProvider) - end - - # - # The server provides code actions. The `CodeActionOptions` return type is - # only valid if the client signals code action literal support via the - # property `textDocument.codeAction.codeActionLiteralSupport`. - # - # @return [boolean | CodeActionOptions] - def code_action_provider - attributes.fetch(:codeActionProvider) - end - - # - # The server provides code lens. - # - # @return [CodeLensOptions] - def code_lens_provider - attributes.fetch(:codeLensProvider) - end - - # - # The server provides document link support. - # - # @return [DocumentLinkOptions] - def document_link_provider - attributes.fetch(:documentLinkProvider) - end - - # - # The server provides color provider support. - # - # @return [boolean | DocumentColorOptions | DocumentColorRegistrationOptions] - def color_provider - attributes.fetch(:colorProvider) - end - - # - # The server provides document formatting. - # - # @return [boolean | DocumentFormattingOptions] - def document_formatting_provider - attributes.fetch(:documentFormattingProvider) - end - - # - # The server provides document range formatting. - # - # @return [boolean | DocumentRangeFormattingOptions] - def document_range_formatting_provider - attributes.fetch(:documentRangeFormattingProvider) - end - - # - # The server provides document formatting on typing. - # - # @return [DocumentOnTypeFormattingOptions] - def document_on_type_formatting_provider - attributes.fetch(:documentOnTypeFormattingProvider) - end - - # - # The server provides rename support. RenameOptions may only be - # specified if the client states that it supports - # `prepareSupport` in its initial `initialize` request. - # - # @return [boolean | RenameOptions] - def rename_provider - attributes.fetch(:renameProvider) - end - - # - # The server provides folding provider support. - # - # @return [boolean | FoldingRangeOptions | FoldingRangeRegistrationOptions] - def folding_range_provider - attributes.fetch(:foldingRangeProvider) - end - - # - # The server provides execute command support. - # - # @return [ExecuteCommandOptions] - def execute_command_provider - attributes.fetch(:executeCommandProvider) - end - - # - # The server provides selection range support. - # - # @return [boolean | SelectionRangeOptions | SelectionRangeRegistrationOptions] - def selection_range_provider - attributes.fetch(:selectionRangeProvider) - end - - # - # The server provides linked editing range support. - # - # @return [boolean | LinkedEditingRangeOptions | LinkedEditingRangeRegistrationOptions] - def linked_editing_range_provider - attributes.fetch(:linkedEditingRangeProvider) - end - - # - # The server provides call hierarchy support. - # - # @return [boolean | CallHierarchyOptions | CallHierarchyRegistrationOptions] - def call_hierarchy_provider - attributes.fetch(:callHierarchyProvider) - end - - # - # The server provides semantic tokens support. - # - # @return [SemanticTokensOptions | SemanticTokensRegistrationOptions] - def semantic_tokens_provider - attributes.fetch(:semanticTokensProvider) - end - - # - # Whether server provides moniker support. - # - # @return [boolean | MonikerOptions | MonikerRegistrationOptions] - def moniker_provider - attributes.fetch(:monikerProvider) - end - - # - # The server provides type hierarchy support. - # - # @return [boolean | TypeHierarchyOptions | TypeHierarchyRegistrationOptions] - def type_hierarchy_provider - attributes.fetch(:typeHierarchyProvider) - end - - # - # The server provides inline values. - # - # @return [boolean | InlineValueOptions | InlineValueRegistrationOptions] - def inline_value_provider - attributes.fetch(:inlineValueProvider) - end - - # - # The server provides inlay hints. - # - # @return [boolean | InlayHintOptions | InlayHintRegistrationOptions] - def inlay_hint_provider - attributes.fetch(:inlayHintProvider) - end - - # - # The server has support for pull model diagnostics. - # - # @return [DiagnosticOptions | DiagnosticRegistrationOptions] - def diagnostic_provider - attributes.fetch(:diagnosticProvider) - end - - # - # The server provides workspace symbol support. - # - # @return [boolean | WorkspaceSymbolOptions] - def workspace_symbol_provider - attributes.fetch(:workspaceSymbolProvider) - end - - # - # Workspace specific server capabilities - # - # @return [{ workspaceFolders?: WorkspaceFoldersServerCapabilities; fileOperations?: { didCreate?: FileOperationRegistrationOptions; ... 4 more ...; willDelete?: FileOperationRegistrationOptions; }; }] - def workspace - attributes.fetch(:workspace) - end - - # - # Experimental server capabilities. - # - # @return [LSPAny] - def experimental - attributes.fetch(:experimental) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/set_trace_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/set_trace_params.rb deleted file mode 100644 index 5e7ec770..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/set_trace_params.rb +++ /dev/null @@ -1,33 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class SetTraceParams - def initialize(value:) - @attributes = {} - - @attributes[:value] = value - - @attributes.freeze - end - - # - # The new value that should be assigned to the trace setting. - # - # @return [TraceValue] - def value - attributes.fetch(:value) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/show_document_client_capabilities.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/show_document_client_capabilities.rb deleted file mode 100644 index 7632df0c..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/show_document_client_capabilities.rb +++ /dev/null @@ -1,37 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # Client capabilities for the show document request. - # - class ShowDocumentClientCapabilities - def initialize(support:) - @attributes = {} - - @attributes[:support] = support - - @attributes.freeze - end - - # - # The client has support for the show document - # request. - # - # @return [boolean] - def support - attributes.fetch(:support) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/show_document_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/show_document_params.rb deleted file mode 100644 index 0d048d11..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/show_document_params.rb +++ /dev/null @@ -1,71 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # Params to show a resource. - # - class ShowDocumentParams - def initialize(uri:, external: nil, take_focus: nil, selection: nil) - @attributes = {} - - @attributes[:uri] = uri - @attributes[:external] = external if external - @attributes[:takeFocus] = take_focus if take_focus - @attributes[:selection] = selection if selection - - @attributes.freeze - end - - # - # The uri to show. - # - # @return [string] - def uri - attributes.fetch(:uri) - end - - # - # Indicates to show the resource in an external program. - # To show, for example, `https://code.visualstudio.com/` - # in the default WEB browser set `external` to `true`. - # - # @return [boolean] - def external - attributes.fetch(:external) - end - - # - # An optional property to indicate whether the editor - # showing the document should take focus or not. - # Clients might ignore this property if an external - # program is started. - # - # @return [boolean] - def take_focus - attributes.fetch(:takeFocus) - end - - # - # An optional selection range if the document is a text - # document. Clients might ignore the property if an - # external program is started or the file is not a text - # file. - # - # @return [Range] - def selection - attributes.fetch(:selection) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/show_document_result.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/show_document_result.rb deleted file mode 100644 index abe7b633..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/show_document_result.rb +++ /dev/null @@ -1,36 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # The result of an show document request. - # - class ShowDocumentResult - def initialize(success:) - @attributes = {} - - @attributes[:success] = success - - @attributes.freeze - end - - # - # A boolean indicating if the show was successful. - # - # @return [boolean] - def success - attributes.fetch(:success) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/show_message_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/show_message_params.rb deleted file mode 100644 index 186474ab..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/show_message_params.rb +++ /dev/null @@ -1,42 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class ShowMessageParams - def initialize(type:, message:) - @attributes = {} - - @attributes[:type] = type - @attributes[:message] = message - - @attributes.freeze - end - - # - # The message type. See {@link MessageType}. - # - # @return [MessageType] - def type - attributes.fetch(:type) - end - - # - # The actual message. - # - # @return [string] - def message - attributes.fetch(:message) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/show_message_request_client_capabilities.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/show_message_request_client_capabilities.rb deleted file mode 100644 index 33adae12..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/show_message_request_client_capabilities.rb +++ /dev/null @@ -1,36 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # Show message request client capabilities - # - class ShowMessageRequestClientCapabilities - def initialize(message_action_item: nil) - @attributes = {} - - @attributes[:messageActionItem] = message_action_item if message_action_item - - @attributes.freeze - end - - # - # Capabilities specific to the `MessageActionItem` type. - # - # @return [{ additionalPropertiesSupport?: boolean; }] - def message_action_item - attributes.fetch(:messageActionItem) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/show_message_request_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/show_message_request_params.rb deleted file mode 100644 index 3675ade6..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/show_message_request_params.rb +++ /dev/null @@ -1,51 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class ShowMessageRequestParams - def initialize(type:, message:, actions: nil) - @attributes = {} - - @attributes[:type] = type - @attributes[:message] = message - @attributes[:actions] = actions if actions - - @attributes.freeze - end - - # - # The message type. See {@link MessageType} - # - # @return [MessageType] - def type - attributes.fetch(:type) - end - - # - # The actual message - # - # @return [string] - def message - attributes.fetch(:message) - end - - # - # The message action items to present. - # - # @return [MessageActionItem[]] - def actions - attributes.fetch(:actions) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/signature_help.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/signature_help.rb deleted file mode 100644 index f3f56313..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/signature_help.rb +++ /dev/null @@ -1,71 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # Signature help represents the signature of something - # callable. There can be multiple signature but only one - # active and only one active parameter. - # - class SignatureHelp - def initialize(signatures:, active_signature: nil, active_parameter: nil) - @attributes = {} - - @attributes[:signatures] = signatures - @attributes[:activeSignature] = active_signature if active_signature - @attributes[:activeParameter] = active_parameter if active_parameter - - @attributes.freeze - end - - # - # One or more signatures. If no signatures are available the signature help - # request should return `null`. - # - # @return [SignatureInformation[]] - def signatures - attributes.fetch(:signatures) - end - - # - # The active signature. If omitted or the value lies outside the - # range of `signatures` the value defaults to zero or is ignore if - # the `SignatureHelp` as no signatures. - # - # Whenever possible implementors should make an active decision about - # the active signature and shouldn't rely on a default value. - # - # In future version of the protocol this property might become - # mandatory to better express this. - # - # @return [number] - def active_signature - attributes.fetch(:activeSignature) - end - - # - # The active parameter of the active signature. If omitted or the value - # lies outside the range of `signatures[activeSignature].parameters` - # defaults to 0 if the active signature has parameters. If - # the active signature has no parameters it is ignored. - # In future version of the protocol this property might become - # mandatory to better express the active parameter if the - # active signature does have any. - # - # @return [number] - def active_parameter - attributes.fetch(:activeParameter) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/signature_help_client_capabilities.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/signature_help_client_capabilities.rb deleted file mode 100644 index 0a1c58f8..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/signature_help_client_capabilities.rb +++ /dev/null @@ -1,55 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class SignatureHelpClientCapabilities - def initialize(dynamic_registration: nil, signature_information: nil, context_support: nil) - @attributes = {} - - @attributes[:dynamicRegistration] = dynamic_registration if dynamic_registration - @attributes[:signatureInformation] = signature_information if signature_information - @attributes[:contextSupport] = context_support if context_support - - @attributes.freeze - end - - # - # Whether signature help supports dynamic registration. - # - # @return [boolean] - def dynamic_registration - attributes.fetch(:dynamicRegistration) - end - - # - # The client supports the following `SignatureInformation` - # specific properties. - # - # @return [{ documentationFormat?: MarkupKind[]; parameterInformation?: { labelOffsetSupport?: boolean; }; activeParameterSupport?: boolean; }] - def signature_information - attributes.fetch(:signatureInformation) - end - - # - # The client supports to send additional context information for a - # `textDocument/signatureHelp` request. A client that opts into - # contextSupport will also support the `retriggerCharacters` on - # `SignatureHelpOptions`. - # - # @return [boolean] - def context_support - attributes.fetch(:contextSupport) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/signature_help_context.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/signature_help_context.rb deleted file mode 100644 index 5cb0dd29..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/signature_help_context.rb +++ /dev/null @@ -1,74 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # Additional information about the context in which a signature help request - # was triggered. - # - class SignatureHelpContext - def initialize(trigger_kind:, trigger_character: nil, is_retrigger:, active_signature_help: nil) - @attributes = {} - - @attributes[:triggerKind] = trigger_kind - @attributes[:triggerCharacter] = trigger_character if trigger_character - @attributes[:isRetrigger] = is_retrigger - @attributes[:activeSignatureHelp] = active_signature_help if active_signature_help - - @attributes.freeze - end - - # - # Action that caused signature help to be triggered. - # - # @return [SignatureHelpTriggerKind] - def trigger_kind - attributes.fetch(:triggerKind) - end - - # - # Character that caused signature help to be triggered. - # - # This is undefined when triggerKind !== - # SignatureHelpTriggerKind.TriggerCharacter - # - # @return [string] - def trigger_character - attributes.fetch(:triggerCharacter) - end - - # - # `true` if signature help was already showing when it was triggered. - # - # Retriggers occur when the signature help is already active and can be - # caused by actions such as typing a trigger character, a cursor move, or - # document content changes. - # - # @return [boolean] - def is_retrigger - attributes.fetch(:isRetrigger) - end - - # - # The currently active `SignatureHelp`. - # - # The `activeSignatureHelp` has its `SignatureHelp.activeSignature` field - # updated based on the user navigating through available signatures. - # - # @return [SignatureHelp] - def active_signature_help - attributes.fetch(:activeSignatureHelp) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/signature_help_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/signature_help_options.rb deleted file mode 100644 index 2a98a384..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/signature_help_options.rb +++ /dev/null @@ -1,53 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class SignatureHelpOptions - def initialize(work_done_progress: nil, trigger_characters: nil, retrigger_characters: nil) - @attributes = {} - - @attributes[:workDoneProgress] = work_done_progress if work_done_progress - @attributes[:triggerCharacters] = trigger_characters if trigger_characters - @attributes[:retriggerCharacters] = retrigger_characters if retrigger_characters - - @attributes.freeze - end - - # @return [boolean] - def work_done_progress - attributes.fetch(:workDoneProgress) - end - - # - # The characters that trigger signature help - # automatically. - # - # @return [string[]] - def trigger_characters - attributes.fetch(:triggerCharacters) - end - - # - # List of characters that re-trigger signature help. - # - # These trigger characters are only active when signature help is already - # showing. All trigger characters are also counted as re-trigger - # characters. - # - # @return [string[]] - def retrigger_characters - attributes.fetch(:retriggerCharacters) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/signature_help_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/signature_help_params.rb deleted file mode 100644 index 330b141c..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/signature_help_params.rb +++ /dev/null @@ -1,62 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class SignatureHelpParams - def initialize(text_document:, position:, work_done_token: nil, context: nil) - @attributes = {} - - @attributes[:textDocument] = text_document - @attributes[:position] = position - @attributes[:workDoneToken] = work_done_token if work_done_token - @attributes[:context] = context if context - - @attributes.freeze - end - - # - # The text document. - # - # @return [TextDocumentIdentifier] - def text_document - attributes.fetch(:textDocument) - end - - # - # The position inside the text document. - # - # @return [Position] - def position - attributes.fetch(:position) - end - - # - # An optional token that a server can use to report work done progress. - # - # @return [ProgressToken] - def work_done_token - attributes.fetch(:workDoneToken) - end - - # - # The signature help context. This is only available if the client - # specifies to send this using the client capability - # `textDocument.signatureHelp.contextSupport === true` - # - # @return [SignatureHelpContext] - def context - attributes.fetch(:context) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/signature_help_registration_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/signature_help_registration_options.rb deleted file mode 100644 index 70fa0573..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/signature_help_registration_options.rb +++ /dev/null @@ -1,63 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class SignatureHelpRegistrationOptions - def initialize(document_selector:, work_done_progress: nil, trigger_characters: nil, retrigger_characters: nil) - @attributes = {} - - @attributes[:documentSelector] = document_selector - @attributes[:workDoneProgress] = work_done_progress if work_done_progress - @attributes[:triggerCharacters] = trigger_characters if trigger_characters - @attributes[:retriggerCharacters] = retrigger_characters if retrigger_characters - - @attributes.freeze - end - - # - # A document selector to identify the scope of the registration. If set to - # null the document selector provided on the client side will be used. - # - # @return [DocumentSelector] - def document_selector - attributes.fetch(:documentSelector) - end - - # @return [boolean] - def work_done_progress - attributes.fetch(:workDoneProgress) - end - - # - # The characters that trigger signature help - # automatically. - # - # @return [string[]] - def trigger_characters - attributes.fetch(:triggerCharacters) - end - - # - # List of characters that re-trigger signature help. - # - # These trigger characters are only active when signature help is already - # showing. All trigger characters are also counted as re-trigger - # characters. - # - # @return [string[]] - def retrigger_characters - attributes.fetch(:retriggerCharacters) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/signature_information.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/signature_information.rb deleted file mode 100644 index bde96f5e..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/signature_information.rb +++ /dev/null @@ -1,69 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # Represents the signature of something callable. A signature - # can have a label, like a function-name, a doc-comment, and - # a set of parameters. - # - class SignatureInformation - def initialize(label:, documentation: nil, parameters: nil, active_parameter: nil) - @attributes = {} - - @attributes[:label] = label - @attributes[:documentation] = documentation if documentation - @attributes[:parameters] = parameters if parameters - @attributes[:activeParameter] = active_parameter if active_parameter - - @attributes.freeze - end - - # - # The label of this signature. Will be shown in - # the UI. - # - # @return [string] - def label - attributes.fetch(:label) - end - - # - # The human-readable doc-comment of this signature. Will be shown - # in the UI but can be omitted. - # - # @return [string | MarkupContent] - def documentation - attributes.fetch(:documentation) - end - - # - # The parameters of this signature. - # - # @return [ParameterInformation[]] - def parameters - attributes.fetch(:parameters) - end - - # - # The index of the active parameter. - # - # If provided, this is used in place of `SignatureHelp.activeParameter`. - # - # @return [number] - def active_parameter - attributes.fetch(:activeParameter) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/static_registration_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/static_registration_options.rb deleted file mode 100644 index 64480260..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/static_registration_options.rb +++ /dev/null @@ -1,37 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # Static registration options to be returned in the initialize request. - # - class StaticRegistrationOptions - def initialize(id: nil) - @attributes = {} - - @attributes[:id] = id if id - - @attributes.freeze - end - - # - # The id used to register the request. The id can be used to deregister - # the request again. See also Registration#id. - # - # @return [string] - def id - attributes.fetch(:id) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/symbol_information.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/symbol_information.rb deleted file mode 100644 index 6b83c316..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/symbol_information.rb +++ /dev/null @@ -1,93 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # Represents information about programming constructs like variables, classes, - # interfaces etc. - # - class SymbolInformation - def initialize(name:, kind:, tags: nil, deprecated: nil, location:, container_name: nil) - @attributes = {} - - @attributes[:name] = name - @attributes[:kind] = kind - @attributes[:tags] = tags if tags - @attributes[:deprecated] = deprecated if deprecated - @attributes[:location] = location - @attributes[:containerName] = container_name if container_name - - @attributes.freeze - end - - # - # The name of this symbol. - # - # @return [string] - def name - attributes.fetch(:name) - end - - # - # The kind of this symbol. - # - # @return [SymbolKind] - def kind - attributes.fetch(:kind) - end - - # - # Tags for this symbol. - # - # @return [1[]] - def tags - attributes.fetch(:tags) - end - - # - # Indicates if this symbol is deprecated. - # - # @return [boolean] - def deprecated - attributes.fetch(:deprecated) - end - - # - # The location of this symbol. The location's range is used by a tool - # to reveal the location in the editor. If the symbol is selected in the - # tool the range's start information is used to position the cursor. So - # the range usually spans more then the actual symbol's name and does - # normally include things like visibility modifiers. - # - # The range doesn't have to denote a node range in the sense of an abstract - # syntax tree. It can therefore not be used to re-construct a hierarchy of - # the symbols. - # - # @return [Location] - def location - attributes.fetch(:location) - end - - # - # The name of the symbol containing this symbol. This information is for - # user interface purposes (e.g. to render a qualifier in the user interface - # if necessary). It can't be used to re-infer a hierarchy for the document - # symbols. - # - # @return [string] - def container_name - attributes.fetch(:containerName) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/text_document_change_registration_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/text_document_change_registration_options.rb deleted file mode 100644 index e52e1853..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/text_document_change_registration_options.rb +++ /dev/null @@ -1,47 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # Describe options to be used when registering for text document change events. - # - class TextDocumentChangeRegistrationOptions - def initialize(document_selector:, sync_kind:) - @attributes = {} - - @attributes[:documentSelector] = document_selector - @attributes[:syncKind] = sync_kind - - @attributes.freeze - end - - # - # A document selector to identify the scope of the registration. If set to - # null the document selector provided on the client side will be used. - # - # @return [DocumentSelector] - def document_selector - attributes.fetch(:documentSelector) - end - - # - # How documents are synced to the server. See TextDocumentSyncKind.Full - # and TextDocumentSyncKind.Incremental. - # - # @return [TextDocumentSyncKind] - def sync_kind - attributes.fetch(:syncKind) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/text_document_client_capabilities.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/text_document_client_capabilities.rb deleted file mode 100644 index f44f398f..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/text_document_client_capabilities.rb +++ /dev/null @@ -1,297 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # Text document specific client capabilities. - # - class TextDocumentClientCapabilities - def initialize(synchronization: nil, completion: nil, hover: nil, signature_help: nil, declaration: nil, definition: nil, type_definition: nil, implementation: nil, references: nil, document_highlight: nil, document_symbol: nil, code_action: nil, code_lens: nil, document_link: nil, color_provider: nil, formatting: nil, range_formatting: nil, on_type_formatting: nil, rename: nil, publish_diagnostics: nil, folding_range: nil, selection_range: nil, linked_editing_range: nil, call_hierarchy: nil, semantic_tokens: nil, moniker: nil, type_hierarchy: nil, inline_value: nil, inlay_hint: nil, diagnostic: nil) - @attributes = {} - - @attributes[:synchronization] = synchronization if synchronization - @attributes[:completion] = completion if completion - @attributes[:hover] = hover if hover - @attributes[:signatureHelp] = signature_help if signature_help - @attributes[:declaration] = declaration if declaration - @attributes[:definition] = definition if definition - @attributes[:typeDefinition] = type_definition if type_definition - @attributes[:implementation] = implementation if implementation - @attributes[:references] = references if references - @attributes[:documentHighlight] = document_highlight if document_highlight - @attributes[:documentSymbol] = document_symbol if document_symbol - @attributes[:codeAction] = code_action if code_action - @attributes[:codeLens] = code_lens if code_lens - @attributes[:documentLink] = document_link if document_link - @attributes[:colorProvider] = color_provider if color_provider - @attributes[:formatting] = formatting if formatting - @attributes[:rangeFormatting] = range_formatting if range_formatting - @attributes[:onTypeFormatting] = on_type_formatting if on_type_formatting - @attributes[:rename] = rename if rename - @attributes[:publishDiagnostics] = publish_diagnostics if publish_diagnostics - @attributes[:foldingRange] = folding_range if folding_range - @attributes[:selectionRange] = selection_range if selection_range - @attributes[:linkedEditingRange] = linked_editing_range if linked_editing_range - @attributes[:callHierarchy] = call_hierarchy if call_hierarchy - @attributes[:semanticTokens] = semantic_tokens if semantic_tokens - @attributes[:moniker] = moniker if moniker - @attributes[:typeHierarchy] = type_hierarchy if type_hierarchy - @attributes[:inlineValue] = inline_value if inline_value - @attributes[:inlayHint] = inlay_hint if inlay_hint - @attributes[:diagnostic] = diagnostic if diagnostic - - @attributes.freeze - end - - # @return [TextDocumentSyncClientCapabilities] - def synchronization - attributes.fetch(:synchronization) - end - - # - # Capabilities specific to the `textDocument/completion` request. - # - # @return [CompletionClientCapabilities] - def completion - attributes.fetch(:completion) - end - - # - # Capabilities specific to the `textDocument/hover` request. - # - # @return [HoverClientCapabilities] - def hover - attributes.fetch(:hover) - end - - # - # Capabilities specific to the `textDocument/signatureHelp` request. - # - # @return [SignatureHelpClientCapabilities] - def signature_help - attributes.fetch(:signatureHelp) - end - - # - # Capabilities specific to the `textDocument/declaration` request. - # - # @return [DeclarationClientCapabilities] - def declaration - attributes.fetch(:declaration) - end - - # - # Capabilities specific to the `textDocument/definition` request. - # - # @return [DefinitionClientCapabilities] - def definition - attributes.fetch(:definition) - end - - # - # Capabilities specific to the `textDocument/typeDefinition` request. - # - # @return [TypeDefinitionClientCapabilities] - def type_definition - attributes.fetch(:typeDefinition) - end - - # - # Capabilities specific to the `textDocument/implementation` request. - # - # @return [ImplementationClientCapabilities] - def implementation - attributes.fetch(:implementation) - end - - # - # Capabilities specific to the `textDocument/references` request. - # - # @return [ReferenceClientCapabilities] - def references - attributes.fetch(:references) - end - - # - # Capabilities specific to the `textDocument/documentHighlight` request. - # - # @return [DocumentHighlightClientCapabilities] - def document_highlight - attributes.fetch(:documentHighlight) - end - - # - # Capabilities specific to the `textDocument/documentSymbol` request. - # - # @return [DocumentSymbolClientCapabilities] - def document_symbol - attributes.fetch(:documentSymbol) - end - - # - # Capabilities specific to the `textDocument/codeAction` request. - # - # @return [CodeActionClientCapabilities] - def code_action - attributes.fetch(:codeAction) - end - - # - # Capabilities specific to the `textDocument/codeLens` request. - # - # @return [CodeLensClientCapabilities] - def code_lens - attributes.fetch(:codeLens) - end - - # - # Capabilities specific to the `textDocument/documentLink` request. - # - # @return [DocumentLinkClientCapabilities] - def document_link - attributes.fetch(:documentLink) - end - - # - # Capabilities specific to the `textDocument/documentColor` and the - # `textDocument/colorPresentation` request. - # - # @return [DocumentColorClientCapabilities] - def color_provider - attributes.fetch(:colorProvider) - end - - # - # Capabilities specific to the `textDocument/formatting` request. - # - # @return [DocumentFormattingClientCapabilities] - def formatting - attributes.fetch(:formatting) - end - - # - # Capabilities specific to the `textDocument/rangeFormatting` request. - # - # @return [DocumentRangeFormattingClientCapabilities] - def range_formatting - attributes.fetch(:rangeFormatting) - end - - # - # request. - # Capabilities specific to the `textDocument/onTypeFormatting` request. - # - # @return [DocumentOnTypeFormattingClientCapabilities] - def on_type_formatting - attributes.fetch(:onTypeFormatting) - end - - # - # Capabilities specific to the `textDocument/rename` request. - # - # @return [RenameClientCapabilities] - def rename - attributes.fetch(:rename) - end - - # - # Capabilities specific to the `textDocument/publishDiagnostics` - # notification. - # - # @return [PublishDiagnosticsClientCapabilities] - def publish_diagnostics - attributes.fetch(:publishDiagnostics) - end - - # - # Capabilities specific to the `textDocument/foldingRange` request. - # - # @return [FoldingRangeClientCapabilities] - def folding_range - attributes.fetch(:foldingRange) - end - - # - # Capabilities specific to the `textDocument/selectionRange` request. - # - # @return [SelectionRangeClientCapabilities] - def selection_range - attributes.fetch(:selectionRange) - end - - # - # Capabilities specific to the `textDocument/linkedEditingRange` request. - # - # @return [LinkedEditingRangeClientCapabilities] - def linked_editing_range - attributes.fetch(:linkedEditingRange) - end - - # - # Capabilities specific to the various call hierarchy requests. - # - # @return [CallHierarchyClientCapabilities] - def call_hierarchy - attributes.fetch(:callHierarchy) - end - - # - # Capabilities specific to the various semantic token requests. - # - # @return [SemanticTokensClientCapabilities] - def semantic_tokens - attributes.fetch(:semanticTokens) - end - - # - # Capabilities specific to the `textDocument/moniker` request. - # - # @return [MonikerClientCapabilities] - def moniker - attributes.fetch(:moniker) - end - - # - # Capabilities specific to the various type hierarchy requests. - # - # @return [TypeHierarchyClientCapabilities] - def type_hierarchy - attributes.fetch(:typeHierarchy) - end - - # - # Capabilities specific to the `textDocument/inlineValue` request. - # - # @return [InlineValueClientCapabilities] - def inline_value - attributes.fetch(:inlineValue) - end - - # - # Capabilities specific to the `textDocument/inlayHint` request. - # - # @return [InlayHintClientCapabilities] - def inlay_hint - attributes.fetch(:inlayHint) - end - - # - # Capabilities specific to the diagnostic pull model. - # - # @return [DiagnosticClientCapabilities] - def diagnostic - attributes.fetch(:diagnostic) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/text_document_content_change_event.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/text_document_content_change_event.rb deleted file mode 100644 index 0f7c04ed..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/text_document_content_change_event.rb +++ /dev/null @@ -1,59 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # An event describing a change to a text document. If only a text is provided - # it is considered to be the full content of the document. - # - class TextDocumentContentChangeEvent - def initialize(range: nil, range_length: nil, text:) - @attributes = {} - - @attributes[:range] = range if range - @attributes[:rangeLength] = range_length if range_length - @attributes[:text] = text - - @attributes.freeze - end - - # - # The range of the document that changed. - # - # @return [Range, nil] - def range - attributes.fetch(:range) - end - - # - # The optional length of the range that got replaced. - # - # @return [number, nil] - def range_length - attributes.fetch(:rangeLength) - end - - # - # The new text for the provided range. - # - # --- OR --- - # - # The new text of the whole document. - # - # @return [string] - def text - attributes.fetch(:text) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/text_document_edit.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/text_document_edit.rb deleted file mode 100644 index efc07fe8..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/text_document_edit.rb +++ /dev/null @@ -1,42 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class TextDocumentEdit - def initialize(text_document:, edits:) - @attributes = {} - - @attributes[:textDocument] = text_document - @attributes[:edits] = edits - - @attributes.freeze - end - - # - # The text document to change. - # - # @return [OptionalVersionedTextDocumentIdentifier] - def text_document - attributes.fetch(:textDocument) - end - - # - # The edits to be applied. - # - # @return [(TextEdit | AnnotatedTextEdit)[]] - def edits - attributes.fetch(:edits) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/text_document_identifier.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/text_document_identifier.rb deleted file mode 100644 index dfc04fa4..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/text_document_identifier.rb +++ /dev/null @@ -1,33 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class TextDocumentIdentifier - def initialize(uri:) - @attributes = {} - - @attributes[:uri] = uri - - @attributes.freeze - end - - # - # The text document's URI. - # - # @return [string] - def uri - attributes.fetch(:uri) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/text_document_item.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/text_document_item.rb deleted file mode 100644 index 3a6097ed..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/text_document_item.rb +++ /dev/null @@ -1,61 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class TextDocumentItem - def initialize(uri:, language_id:, version:, text:) - @attributes = {} - - @attributes[:uri] = uri - @attributes[:languageId] = language_id - @attributes[:version] = version - @attributes[:text] = text - - @attributes.freeze - end - - # - # The text document's URI. - # - # @return [string] - def uri - attributes.fetch(:uri) - end - - # - # The text document's language identifier. - # - # @return [string] - def language_id - attributes.fetch(:languageId) - end - - # - # The version number of this document (it will increase after each - # change, including undo/redo). - # - # @return [number] - def version - attributes.fetch(:version) - end - - # - # The content of the opened text document. - # - # @return [string] - def text - attributes.fetch(:text) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/text_document_position_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/text_document_position_params.rb deleted file mode 100644 index d5354c65..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/text_document_position_params.rb +++ /dev/null @@ -1,42 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class TextDocumentPositionParams - def initialize(text_document:, position:) - @attributes = {} - - @attributes[:textDocument] = text_document - @attributes[:position] = position - - @attributes.freeze - end - - # - # The text document. - # - # @return [TextDocumentIdentifier] - def text_document - attributes.fetch(:textDocument) - end - - # - # The position inside the text document. - # - # @return [Position] - def position - attributes.fetch(:position) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/text_document_registration_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/text_document_registration_options.rb deleted file mode 100644 index 49373b7d..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/text_document_registration_options.rb +++ /dev/null @@ -1,37 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # General text document registration options. - # - class TextDocumentRegistrationOptions - def initialize(document_selector:) - @attributes = {} - - @attributes[:documentSelector] = document_selector - - @attributes.freeze - end - - # - # A document selector to identify the scope of the registration. If set to - # null the document selector provided on the client side will be used. - # - # @return [DocumentSelector] - def document_selector - attributes.fetch(:documentSelector) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/text_document_save_registration_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/text_document_save_registration_options.rb deleted file mode 100644 index cee01cf0..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/text_document_save_registration_options.rb +++ /dev/null @@ -1,43 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class TextDocumentSaveRegistrationOptions - def initialize(document_selector:, include_text: nil) - @attributes = {} - - @attributes[:documentSelector] = document_selector - @attributes[:includeText] = include_text if include_text - - @attributes.freeze - end - - # - # A document selector to identify the scope of the registration. If set to - # null the document selector provided on the client side will be used. - # - # @return [DocumentSelector] - def document_selector - attributes.fetch(:documentSelector) - end - - # - # The client is supposed to include the content on save. - # - # @return [boolean] - def include_text - attributes.fetch(:includeText) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/text_document_sync_client_capabilities.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/text_document_sync_client_capabilities.rb deleted file mode 100644 index 36262b4d..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/text_document_sync_client_capabilities.rb +++ /dev/null @@ -1,62 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class TextDocumentSyncClientCapabilities - def initialize(dynamic_registration: nil, will_save: nil, will_save_wait_until: nil, did_save: nil) - @attributes = {} - - @attributes[:dynamicRegistration] = dynamic_registration if dynamic_registration - @attributes[:willSave] = will_save if will_save - @attributes[:willSaveWaitUntil] = will_save_wait_until if will_save_wait_until - @attributes[:didSave] = did_save if did_save - - @attributes.freeze - end - - # - # Whether text document synchronization supports dynamic registration. - # - # @return [boolean] - def dynamic_registration - attributes.fetch(:dynamicRegistration) - end - - # - # The client supports sending will save notifications. - # - # @return [boolean] - def will_save - attributes.fetch(:willSave) - end - - # - # The client supports sending a will save request and - # waits for a response providing text edits which will - # be applied to the document before it is saved. - # - # @return [boolean] - def will_save_wait_until - attributes.fetch(:willSaveWaitUntil) - end - - # - # The client supports did save notifications. - # - # @return [boolean] - def did_save - attributes.fetch(:didSave) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/text_document_sync_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/text_document_sync_options.rb deleted file mode 100644 index 5542d9e2..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/text_document_sync_options.rb +++ /dev/null @@ -1,78 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class TextDocumentSyncOptions - def initialize(open_close: nil, change: nil, will_save: nil, will_save_wait_until: nil, save: nil) - @attributes = {} - - @attributes[:openClose] = open_close if open_close - @attributes[:change] = change if change - @attributes[:willSave] = will_save if will_save - @attributes[:willSaveWaitUntil] = will_save_wait_until if will_save_wait_until - @attributes[:save] = save if save - - @attributes.freeze - end - - # - # Open and close notifications are sent to the server. If omitted open - # close notifications should not be sent. - # Open and close notifications are sent to the server. If omitted open - # close notification should not be sent. - # - # @return [boolean] - def open_close - attributes.fetch(:openClose) - end - - # - # Change notifications are sent to the server. See - # TextDocumentSyncKind.None, TextDocumentSyncKind.Full and - # TextDocumentSyncKind.Incremental. If omitted it defaults to - # TextDocumentSyncKind.None. - # - # @return [TextDocumentSyncKind] - def change - attributes.fetch(:change) - end - - # - # If present will save notifications are sent to the server. If omitted - # the notification should not be sent. - # - # @return [boolean] - def will_save - attributes.fetch(:willSave) - end - - # - # If present will save wait until requests are sent to the server. If - # omitted the request should not be sent. - # - # @return [boolean] - def will_save_wait_until - attributes.fetch(:willSaveWaitUntil) - end - - # - # If present save notifications are sent to the server. If omitted the - # notification should not be sent. - # - # @return [boolean | SaveOptions] - def save - attributes.fetch(:save) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/text_edit.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/text_edit.rb deleted file mode 100644 index 6e635364..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/text_edit.rb +++ /dev/null @@ -1,44 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class TextEdit - def initialize(range:, new_text:) - @attributes = {} - - @attributes[:range] = range - @attributes[:newText] = new_text - - @attributes.freeze - end - - # - # The range of the text document to be manipulated. To insert - # text into a document create a range where start === end. - # - # @return [Range] - def range - attributes.fetch(:range) - end - - # - # The string to be inserted. For delete operations use an - # empty string. - # - # @return [string] - def new_text - attributes.fetch(:newText) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/type_definition_client_capabilities.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/type_definition_client_capabilities.rb deleted file mode 100644 index 9cef1f94..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/type_definition_client_capabilities.rb +++ /dev/null @@ -1,44 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class TypeDefinitionClientCapabilities - def initialize(dynamic_registration: nil, link_support: nil) - @attributes = {} - - @attributes[:dynamicRegistration] = dynamic_registration if dynamic_registration - @attributes[:linkSupport] = link_support if link_support - - @attributes.freeze - end - - # - # Whether implementation supports dynamic registration. If this is set to - # `true` the client supports the new `TypeDefinitionRegistrationOptions` - # return value for the corresponding server capability as well. - # - # @return [boolean] - def dynamic_registration - attributes.fetch(:dynamicRegistration) - end - - # - # The client supports additional metadata in the form of definition links. - # - # @return [boolean] - def link_support - attributes.fetch(:linkSupport) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/type_definition_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/type_definition_options.rb deleted file mode 100644 index 96385779..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/type_definition_options.rb +++ /dev/null @@ -1,30 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class TypeDefinitionOptions - def initialize(work_done_progress: nil) - @attributes = {} - - @attributes[:workDoneProgress] = work_done_progress if work_done_progress - - @attributes.freeze - end - - # @return [boolean] - def work_done_progress - attributes.fetch(:workDoneProgress) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/type_definition_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/type_definition_params.rb deleted file mode 100644 index d7baf5c8..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/type_definition_params.rb +++ /dev/null @@ -1,61 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class TypeDefinitionParams - def initialize(text_document:, position:, work_done_token: nil, partial_result_token: nil) - @attributes = {} - - @attributes[:textDocument] = text_document - @attributes[:position] = position - @attributes[:workDoneToken] = work_done_token if work_done_token - @attributes[:partialResultToken] = partial_result_token if partial_result_token - - @attributes.freeze - end - - # - # The text document. - # - # @return [TextDocumentIdentifier] - def text_document - attributes.fetch(:textDocument) - end - - # - # The position inside the text document. - # - # @return [Position] - def position - attributes.fetch(:position) - end - - # - # An optional token that a server can use to report work done progress. - # - # @return [ProgressToken] - def work_done_token - attributes.fetch(:workDoneToken) - end - - # - # An optional token that a server can use to report partial results (e.g. - # streaming) to the client. - # - # @return [ProgressToken] - def partial_result_token - attributes.fetch(:partialResultToken) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/type_definition_registration_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/type_definition_registration_options.rb deleted file mode 100644 index ee8f4d1b..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/type_definition_registration_options.rb +++ /dev/null @@ -1,50 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class TypeDefinitionRegistrationOptions - def initialize(document_selector:, work_done_progress: nil, id: nil) - @attributes = {} - - @attributes[:documentSelector] = document_selector - @attributes[:workDoneProgress] = work_done_progress if work_done_progress - @attributes[:id] = id if id - - @attributes.freeze - end - - # - # A document selector to identify the scope of the registration. If set to - # null the document selector provided on the client side will be used. - # - # @return [DocumentSelector] - def document_selector - attributes.fetch(:documentSelector) - end - - # @return [boolean] - def work_done_progress - attributes.fetch(:workDoneProgress) - end - - # - # The id used to register the request. The id can be used to deregister - # the request again. See also Registration#id. - # - # @return [string] - def id - attributes.fetch(:id) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/type_hierarchy_item.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/type_hierarchy_item.rb deleted file mode 100644 index e833ce66..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/type_hierarchy_item.rb +++ /dev/null @@ -1,102 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class TypeHierarchyItem - def initialize(name:, kind:, tags: nil, detail: nil, uri:, range:, selection_range:, data: nil) - @attributes = {} - - @attributes[:name] = name - @attributes[:kind] = kind - @attributes[:tags] = tags if tags - @attributes[:detail] = detail if detail - @attributes[:uri] = uri - @attributes[:range] = range - @attributes[:selectionRange] = selection_range - @attributes[:data] = data if data - - @attributes.freeze - end - - # - # The name of this item. - # - # @return [string] - def name - attributes.fetch(:name) - end - - # - # The kind of this item. - # - # @return [SymbolKind] - def kind - attributes.fetch(:kind) - end - - # - # Tags for this item. - # - # @return [1[]] - def tags - attributes.fetch(:tags) - end - - # - # More detail for this item, e.g. the signature of a function. - # - # @return [string] - def detail - attributes.fetch(:detail) - end - - # - # The resource identifier of this item. - # - # @return [string] - def uri - attributes.fetch(:uri) - end - - # - # The range enclosing this symbol not including leading/trailing whitespace - # but everything else, e.g. comments and code. - # - # @return [Range] - def range - attributes.fetch(:range) - end - - # - # The range that should be selected and revealed when this symbol is being - # picked, e.g. the name of a function. Must be contained by the - # [`range`](#TypeHierarchyItem.range). - # - # @return [Range] - def selection_range - attributes.fetch(:selectionRange) - end - - # - # A data entry field that is preserved between a type hierarchy prepare and - # supertypes or subtypes requests. It could also be used to identify the - # type hierarchy in the server, helping improve the performance on - # resolving supertypes and subtypes. - # - # @return [LSPAny] - def data - attributes.fetch(:data) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/type_hierarchy_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/type_hierarchy_options.rb deleted file mode 100644 index e29d64ab..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/type_hierarchy_options.rb +++ /dev/null @@ -1,30 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class TypeHierarchyOptions - def initialize(work_done_progress: nil) - @attributes = {} - - @attributes[:workDoneProgress] = work_done_progress if work_done_progress - - @attributes.freeze - end - - # @return [boolean] - def work_done_progress - attributes.fetch(:workDoneProgress) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/type_hierarchy_prepare_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/type_hierarchy_prepare_params.rb deleted file mode 100644 index 696f5e49..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/type_hierarchy_prepare_params.rb +++ /dev/null @@ -1,51 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class TypeHierarchyPrepareParams - def initialize(text_document:, position:, work_done_token: nil) - @attributes = {} - - @attributes[:textDocument] = text_document - @attributes[:position] = position - @attributes[:workDoneToken] = work_done_token if work_done_token - - @attributes.freeze - end - - # - # The text document. - # - # @return [TextDocumentIdentifier] - def text_document - attributes.fetch(:textDocument) - end - - # - # The position inside the text document. - # - # @return [Position] - def position - attributes.fetch(:position) - end - - # - # An optional token that a server can use to report work done progress. - # - # @return [ProgressToken] - def work_done_token - attributes.fetch(:workDoneToken) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/type_hierarchy_registration_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/type_hierarchy_registration_options.rb deleted file mode 100644 index 24e99627..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/type_hierarchy_registration_options.rb +++ /dev/null @@ -1,50 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class TypeHierarchyRegistrationOptions - def initialize(document_selector:, work_done_progress: nil, id: nil) - @attributes = {} - - @attributes[:documentSelector] = document_selector - @attributes[:workDoneProgress] = work_done_progress if work_done_progress - @attributes[:id] = id if id - - @attributes.freeze - end - - # - # A document selector to identify the scope of the registration. If set to - # null the document selector provided on the client side will be used. - # - # @return [DocumentSelector] - def document_selector - attributes.fetch(:documentSelector) - end - - # @return [boolean] - def work_done_progress - attributes.fetch(:workDoneProgress) - end - - # - # The id used to register the request. The id can be used to deregister - # the request again. See also Registration#id. - # - # @return [string] - def id - attributes.fetch(:id) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/type_hierarchy_subtypes_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/type_hierarchy_subtypes_params.rb deleted file mode 100644 index 2253cce3..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/type_hierarchy_subtypes_params.rb +++ /dev/null @@ -1,49 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class TypeHierarchySubtypesParams - def initialize(work_done_token: nil, partial_result_token: nil, item:) - @attributes = {} - - @attributes[:workDoneToken] = work_done_token if work_done_token - @attributes[:partialResultToken] = partial_result_token if partial_result_token - @attributes[:item] = item - - @attributes.freeze - end - - # - # An optional token that a server can use to report work done progress. - # - # @return [ProgressToken] - def work_done_token - attributes.fetch(:workDoneToken) - end - - # - # An optional token that a server can use to report partial results (e.g. - # streaming) to the client. - # - # @return [ProgressToken] - def partial_result_token - attributes.fetch(:partialResultToken) - end - - # @return [TypeHierarchyItem] - def item - attributes.fetch(:item) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/type_hierarchy_supertypes_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/type_hierarchy_supertypes_params.rb deleted file mode 100644 index 05a91f09..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/type_hierarchy_supertypes_params.rb +++ /dev/null @@ -1,49 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class TypeHierarchySupertypesParams - def initialize(work_done_token: nil, partial_result_token: nil, item:) - @attributes = {} - - @attributes[:workDoneToken] = work_done_token if work_done_token - @attributes[:partialResultToken] = partial_result_token if partial_result_token - @attributes[:item] = item - - @attributes.freeze - end - - # - # An optional token that a server can use to report work done progress. - # - # @return [ProgressToken] - def work_done_token - attributes.fetch(:workDoneToken) - end - - # - # An optional token that a server can use to report partial results (e.g. - # streaming) to the client. - # - # @return [ProgressToken] - def partial_result_token - attributes.fetch(:partialResultToken) - end - - # @return [TypeHierarchyItem] - def item - attributes.fetch(:item) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/unchanged_document_diagnostic_report.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/unchanged_document_diagnostic_report.rb deleted file mode 100644 index 45e816f9..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/unchanged_document_diagnostic_report.rb +++ /dev/null @@ -1,50 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # A diagnostic report indicating that the last returned - # report is still accurate. - # - class UnchangedDocumentDiagnosticReport - def initialize(kind:, result_id:) - @attributes = {} - - @attributes[:kind] = kind - @attributes[:resultId] = result_id - - @attributes.freeze - end - - # - # A document diagnostic report indicating - # no changes to the last result. A server can - # only return `unchanged` if result ids are - # provided. - # - # @return [any] - def kind - attributes.fetch(:kind) - end - - # - # A result id which will be sent on the next - # diagnostic request for the same document. - # - # @return [string] - def result_id - attributes.fetch(:resultId) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/unregistration.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/unregistration.rb deleted file mode 100644 index 4dc4d5df..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/unregistration.rb +++ /dev/null @@ -1,46 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # General parameters to unregister a capability. - # - class Unregistration - def initialize(id:, method:) - @attributes = {} - - @attributes[:id] = id - @attributes[:method] = method - - @attributes.freeze - end - - # - # The id used to unregister the request or notification. Usually an id - # provided during the register request. - # - # @return [string] - def id - attributes.fetch(:id) - end - - # - # The method / capability to unregister for. - # - # @return [string] - def method - attributes.fetch(:method) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/unregistration_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/unregistration_params.rb deleted file mode 100644 index 0369357f..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/unregistration_params.rb +++ /dev/null @@ -1,30 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class UnregistrationParams - def initialize(unregisterations:) - @attributes = {} - - @attributes[:unregisterations] = unregisterations - - @attributes.freeze - end - - # @return [Unregistration[]] - def unregisterations - attributes.fetch(:unregisterations) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/versioned_notebook_document_identifier.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/versioned_notebook_document_identifier.rb deleted file mode 100644 index f29e90c7..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/versioned_notebook_document_identifier.rb +++ /dev/null @@ -1,45 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # A versioned notebook document identifier. - # - class VersionedNotebookDocumentIdentifier - def initialize(version:, uri:) - @attributes = {} - - @attributes[:version] = version - @attributes[:uri] = uri - - @attributes.freeze - end - - # - # The version number of this notebook document. - # - # @return [number] - def version - attributes.fetch(:version) - end - - # - # The notebook document's URI. - # - # @return [string] - def uri - attributes.fetch(:uri) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/versioned_text_document_identifier.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/versioned_text_document_identifier.rb deleted file mode 100644 index cb33f5f2..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/versioned_text_document_identifier.rb +++ /dev/null @@ -1,45 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class VersionedTextDocumentIdentifier - def initialize(uri:, version:) - @attributes = {} - - @attributes[:uri] = uri - @attributes[:version] = version - - @attributes.freeze - end - - # - # The text document's URI. - # - # @return [string] - def uri - attributes.fetch(:uri) - end - - # - # The version number of this document. - # - # The version number of a document will increase after each change, - # including undo/redo. The number doesn't need to be consecutive. - # - # @return [number] - def version - attributes.fetch(:version) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/will_save_text_document_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/will_save_text_document_params.rb deleted file mode 100644 index 2f91eaaa..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/will_save_text_document_params.rb +++ /dev/null @@ -1,45 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # The parameters send in a will save text document notification. - # - class WillSaveTextDocumentParams - def initialize(text_document:, reason:) - @attributes = {} - - @attributes[:textDocument] = text_document - @attributes[:reason] = reason - - @attributes.freeze - end - - # - # The document that will be saved. - # - # @return [TextDocumentIdentifier] - def text_document - attributes.fetch(:textDocument) - end - - # - # The 'TextDocumentSaveReason'. - # - # @return [TextDocumentSaveReason] - def reason - attributes.fetch(:reason) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/work_done_progress_begin.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/work_done_progress_begin.rb deleted file mode 100644 index 4f1a0bb2..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/work_done_progress_begin.rb +++ /dev/null @@ -1,80 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class WorkDoneProgressBegin - def initialize(kind:, title:, cancellable: nil, message: nil, percentage: nil) - @attributes = {} - - @attributes[:kind] = kind - @attributes[:title] = title - @attributes[:cancellable] = cancellable if cancellable - @attributes[:message] = message if message - @attributes[:percentage] = percentage if percentage - - @attributes.freeze - end - - # @return ["begin"] - def kind - attributes.fetch(:kind) - end - - # - # Mandatory title of the progress operation. Used to briefly inform about - # the kind of operation being performed. - # - # Examples: "Indexing" or "Linking dependencies". - # - # @return [string] - def title - attributes.fetch(:title) - end - - # - # Controls if a cancel button should show to allow the user to cancel the - # long running operation. Clients that don't support cancellation are - # allowed to ignore the setting. - # - # @return [boolean] - def cancellable - attributes.fetch(:cancellable) - end - - # - # Optional, more detailed associated progress message. Contains - # complementary information to the `title`. - # - # Examples: "3/25 files", "project/src/module2", "node_modules/some_dep". - # If unset, the previous progress message (if any) is still valid. - # - # @return [string] - def message - attributes.fetch(:message) - end - - # - # Optional progress percentage to display (value 100 is considered 100%). - # If not provided infinite progress is assumed and clients are allowed - # to ignore the `percentage` value in subsequent in report notifications. - # - # The value should be steadily rising. Clients are free to ignore values - # that are not following this rule. The value range is [0, 100] - # - # @return [number] - def percentage - attributes.fetch(:percentage) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/work_done_progress_cancel_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/work_done_progress_cancel_params.rb deleted file mode 100644 index aa3be319..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/work_done_progress_cancel_params.rb +++ /dev/null @@ -1,33 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class WorkDoneProgressCancelParams - def initialize(token:) - @attributes = {} - - @attributes[:token] = token - - @attributes.freeze - end - - # - # The token to be used to report progress. - # - # @return [ProgressToken] - def token - attributes.fetch(:token) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/work_done_progress_create_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/work_done_progress_create_params.rb deleted file mode 100644 index 76090a44..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/work_done_progress_create_params.rb +++ /dev/null @@ -1,33 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class WorkDoneProgressCreateParams - def initialize(token:) - @attributes = {} - - @attributes[:token] = token - - @attributes.freeze - end - - # - # The token to be used to report progress. - # - # @return [ProgressToken] - def token - attributes.fetch(:token) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/work_done_progress_end.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/work_done_progress_end.rb deleted file mode 100644 index 31e53ae6..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/work_done_progress_end.rb +++ /dev/null @@ -1,40 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class WorkDoneProgressEnd - def initialize(kind:, message: nil) - @attributes = {} - - @attributes[:kind] = kind - @attributes[:message] = message if message - - @attributes.freeze - end - - # @return ["end"] - def kind - attributes.fetch(:kind) - end - - # - # Optional, a final message indicating to for example indicate the outcome - # of the operation. - # - # @return [string] - def message - attributes.fetch(:message) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/work_done_progress_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/work_done_progress_options.rb deleted file mode 100644 index f0be0f56..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/work_done_progress_options.rb +++ /dev/null @@ -1,30 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class WorkDoneProgressOptions - def initialize(work_done_progress: nil) - @attributes = {} - - @attributes[:workDoneProgress] = work_done_progress if work_done_progress - - @attributes.freeze - end - - # @return [boolean] - def work_done_progress - attributes.fetch(:workDoneProgress) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/work_done_progress_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/work_done_progress_params.rb deleted file mode 100644 index 946daf12..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/work_done_progress_params.rb +++ /dev/null @@ -1,33 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class WorkDoneProgressParams - def initialize(work_done_token: nil) - @attributes = {} - - @attributes[:workDoneToken] = work_done_token if work_done_token - - @attributes.freeze - end - - # - # An optional token that a server can use to report work done progress. - # - # @return [ProgressToken] - def work_done_token - attributes.fetch(:workDoneToken) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/work_done_progress_report.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/work_done_progress_report.rb deleted file mode 100644 index 05efbeaa..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/work_done_progress_report.rb +++ /dev/null @@ -1,70 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class WorkDoneProgressReport - def initialize(kind:, cancellable: nil, message: nil, percentage: nil) - @attributes = {} - - @attributes[:kind] = kind - @attributes[:cancellable] = cancellable if cancellable - @attributes[:message] = message if message - @attributes[:percentage] = percentage if percentage - - @attributes.freeze - end - - # @return ["report"] - def kind - attributes.fetch(:kind) - end - - # - # Controls enablement state of a cancel button. This property is only valid - # if a cancel button got requested in the `WorkDoneProgressBegin` payload. - # - # Clients that don't support cancellation or don't support control the - # button's enablement state are allowed to ignore the setting. - # - # @return [boolean] - def cancellable - attributes.fetch(:cancellable) - end - - # - # Optional, more detailed associated progress message. Contains - # complementary information to the `title`. - # - # Examples: "3/25 files", "project/src/module2", "node_modules/some_dep". - # If unset, the previous progress message (if any) is still valid. - # - # @return [string] - def message - attributes.fetch(:message) - end - - # - # Optional progress percentage to display (value 100 is considered 100%). - # If not provided infinite progress is assumed and clients are allowed - # to ignore the `percentage` value in subsequent in report notifications. - # - # The value should be steadily rising. Clients are free to ignore values - # that are not following this rule. The value range is [0, 100] - # - # @return [number] - def percentage - attributes.fetch(:percentage) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/workspace_diagnostic_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/workspace_diagnostic_params.rb deleted file mode 100644 index c70c219b..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/workspace_diagnostic_params.rb +++ /dev/null @@ -1,65 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # Parameters of the workspace diagnostic request. - # - class WorkspaceDiagnosticParams - def initialize(work_done_token: nil, partial_result_token: nil, identifier: nil, previous_result_ids:) - @attributes = {} - - @attributes[:workDoneToken] = work_done_token if work_done_token - @attributes[:partialResultToken] = partial_result_token if partial_result_token - @attributes[:identifier] = identifier if identifier - @attributes[:previousResultIds] = previous_result_ids - - @attributes.freeze - end - - # - # An optional token that a server can use to report work done progress. - # - # @return [ProgressToken] - def work_done_token - attributes.fetch(:workDoneToken) - end - - # - # An optional token that a server can use to report partial results (e.g. - # streaming) to the client. - # - # @return [ProgressToken] - def partial_result_token - attributes.fetch(:partialResultToken) - end - - # - # The additional identifier provided during registration. - # - # @return [string] - def identifier - attributes.fetch(:identifier) - end - - # - # The currently known diagnostic reports with their - # previous result ids. - # - # @return [PreviousResultId[]] - def previous_result_ids - attributes.fetch(:previousResultIds) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/workspace_diagnostic_report.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/workspace_diagnostic_report.rb deleted file mode 100644 index a27edb1b..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/workspace_diagnostic_report.rb +++ /dev/null @@ -1,33 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # A workspace diagnostic report. - # - class WorkspaceDiagnosticReport - def initialize(items:) - @attributes = {} - - @attributes[:items] = items - - @attributes.freeze - end - - # @return [WorkspaceDocumentDiagnosticReport[]] - def items - attributes.fetch(:items) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/workspace_diagnostic_report_partial_result.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/workspace_diagnostic_report_partial_result.rb deleted file mode 100644 index 591bf80b..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/workspace_diagnostic_report_partial_result.rb +++ /dev/null @@ -1,33 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # A partial result for a workspace diagnostic report. - # - class WorkspaceDiagnosticReportPartialResult - def initialize(items:) - @attributes = {} - - @attributes[:items] = items - - @attributes.freeze - end - - # @return [WorkspaceDocumentDiagnosticReport[]] - def items - attributes.fetch(:items) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/workspace_edit.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/workspace_edit.rb deleted file mode 100644 index 7a3a8678..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/workspace_edit.rb +++ /dev/null @@ -1,68 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class WorkspaceEdit - def initialize(changes: nil, document_changes: nil, change_annotations: nil) - @attributes = {} - - @attributes[:changes] = changes if changes - @attributes[:documentChanges] = document_changes if document_changes - @attributes[:changeAnnotations] = change_annotations if change_annotations - - @attributes.freeze - end - - # - # Holds changes to existing resources. - # - # @return [{}] - def changes - attributes.fetch(:changes) - end - - # - # Depending on the client capability - # `workspace.workspaceEdit.resourceOperations` document changes are either - # an array of `TextDocumentEdit`s to express changes to n different text - # documents where each text document edit addresses a specific version of - # a text document. Or it can contain above `TextDocumentEdit`s mixed with - # create, rename and delete file / folder operations. - # - # Whether a client supports versioned document edits is expressed via - # `workspace.workspaceEdit.documentChanges` client capability. - # - # If a client neither supports `documentChanges` nor - # `workspace.workspaceEdit.resourceOperations` then only plain `TextEdit`s - # using the `changes` property are supported. - # - # @return [TextDocumentEdit[] | (TextDocumentEdit | CreateFile | RenameFile | DeleteFile)[]] - def document_changes - attributes.fetch(:documentChanges) - end - - # - # A map of change annotations that can be referenced in - # `AnnotatedTextEdit`s or create, rename and delete file / folder - # operations. - # - # Whether clients honor this property depends on the client capability - # `workspace.changeAnnotationSupport`. - # - # @return [{ [id: string]: ChangeAnnotation; }] - def change_annotations - attributes.fetch(:changeAnnotations) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/workspace_edit_client_capabilities.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/workspace_edit_client_capabilities.rb deleted file mode 100644 index 35267300..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/workspace_edit_client_capabilities.rb +++ /dev/null @@ -1,75 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class WorkspaceEditClientCapabilities - def initialize(document_changes: nil, resource_operations: nil, failure_handling: nil, normalizes_line_endings: nil, change_annotation_support: nil) - @attributes = {} - - @attributes[:documentChanges] = document_changes if document_changes - @attributes[:resourceOperations] = resource_operations if resource_operations - @attributes[:failureHandling] = failure_handling if failure_handling - @attributes[:normalizesLineEndings] = normalizes_line_endings if normalizes_line_endings - @attributes[:changeAnnotationSupport] = change_annotation_support if change_annotation_support - - @attributes.freeze - end - - # - # The client supports versioned document changes in `WorkspaceEdit`s - # - # @return [boolean] - def document_changes - attributes.fetch(:documentChanges) - end - - # - # The resource operations the client supports. Clients should at least - # support 'create', 'rename' and 'delete' files and folders. - # - # @return [ResourceOperationKind[]] - def resource_operations - attributes.fetch(:resourceOperations) - end - - # - # The failure handling strategy of a client if applying the workspace edit - # fails. - # - # @return [FailureHandlingKind] - def failure_handling - attributes.fetch(:failureHandling) - end - - # - # Whether the client normalizes line endings to the client specific - # setting. - # If set to `true` the client will normalize line ending characters - # in a workspace edit to the client specific new line character(s). - # - # @return [boolean] - def normalizes_line_endings - attributes.fetch(:normalizesLineEndings) - end - - # - # Whether the client in general supports change annotations on text edits, - # create file, rename file and delete file changes. - # - # @return [{ groupsOnLabel?: boolean; }] - def change_annotation_support - attributes.fetch(:changeAnnotationSupport) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/workspace_folder.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/workspace_folder.rb deleted file mode 100644 index 6df0ef57..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/workspace_folder.rb +++ /dev/null @@ -1,43 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class WorkspaceFolder - def initialize(uri:, name:) - @attributes = {} - - @attributes[:uri] = uri - @attributes[:name] = name - - @attributes.freeze - end - - # - # The associated URI for this workspace folder. - # - # @return [string] - def uri - attributes.fetch(:uri) - end - - # - # The name of the workspace folder. Used to refer to this - # workspace folder in the user interface. - # - # @return [string] - def name - attributes.fetch(:name) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/workspace_folders_change_event.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/workspace_folders_change_event.rb deleted file mode 100644 index 56c4c29b..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/workspace_folders_change_event.rb +++ /dev/null @@ -1,45 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # The workspace folder change event. - # - class WorkspaceFoldersChangeEvent - def initialize(added:, removed:) - @attributes = {} - - @attributes[:added] = added - @attributes[:removed] = removed - - @attributes.freeze - end - - # - # The array of added workspace folders - # - # @return [WorkspaceFolder[]] - def added - attributes.fetch(:added) - end - - # - # The array of the removed workspace folders - # - # @return [WorkspaceFolder[]] - def removed - attributes.fetch(:removed) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/workspace_folders_server_capabilities.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/workspace_folders_server_capabilities.rb deleted file mode 100644 index 2451a6bf..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/workspace_folders_server_capabilities.rb +++ /dev/null @@ -1,48 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class WorkspaceFoldersServerCapabilities - def initialize(supported: nil, change_notifications: nil) - @attributes = {} - - @attributes[:supported] = supported if supported - @attributes[:changeNotifications] = change_notifications if change_notifications - - @attributes.freeze - end - - # - # The server has support for workspace folders - # - # @return [boolean] - def supported - attributes.fetch(:supported) - end - - # - # Whether the server wants to receive workspace folder - # change notifications. - # - # If a string is provided, the string is treated as an ID - # under which the notification is registered on the client - # side. The ID can be used to unregister for these events - # using the `client/unregisterCapability` request. - # - # @return [string | boolean] - def change_notifications - attributes.fetch(:changeNotifications) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/workspace_full_document_diagnostic_report.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/workspace_full_document_diagnostic_report.rb deleted file mode 100644 index d7e63fa5..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/workspace_full_document_diagnostic_report.rb +++ /dev/null @@ -1,75 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # A full document diagnostic report for a workspace diagnostic result. - # - class WorkspaceFullDocumentDiagnosticReport - def initialize(kind:, result_id: nil, items:, uri:, version:) - @attributes = {} - - @attributes[:kind] = kind - @attributes[:resultId] = result_id if result_id - @attributes[:items] = items - @attributes[:uri] = uri - @attributes[:version] = version - - @attributes.freeze - end - - # - # A full document diagnostic report. - # - # @return [any] - def kind - attributes.fetch(:kind) - end - - # - # An optional result id. If provided it will - # be sent on the next diagnostic request for the - # same document. - # - # @return [string] - def result_id - attributes.fetch(:resultId) - end - - # - # The actual items. - # - # @return [Diagnostic[]] - def items - attributes.fetch(:items) - end - - # - # The URI for which diagnostic information is reported. - # - # @return [string] - def uri - attributes.fetch(:uri) - end - - # - # The version number for which the diagnostics are reported. - # If the document is not marked as open `null` can be provided. - # - # @return [number] - def version - attributes.fetch(:version) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/workspace_symbol.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/workspace_symbol.rb deleted file mode 100644 index f9603835..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/workspace_symbol.rb +++ /dev/null @@ -1,89 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # A special workspace symbol that supports locations without a range - # - class WorkspaceSymbol - def initialize(name:, kind:, tags: nil, container_name: nil, location:, data: nil) - @attributes = {} - - @attributes[:name] = name - @attributes[:kind] = kind - @attributes[:tags] = tags if tags - @attributes[:containerName] = container_name if container_name - @attributes[:location] = location - @attributes[:data] = data if data - - @attributes.freeze - end - - # - # The name of this symbol. - # - # @return [string] - def name - attributes.fetch(:name) - end - - # - # The kind of this symbol. - # - # @return [SymbolKind] - def kind - attributes.fetch(:kind) - end - - # - # Tags for this completion item. - # - # @return [1[]] - def tags - attributes.fetch(:tags) - end - - # - # The name of the symbol containing this symbol. This information is for - # user interface purposes (e.g. to render a qualifier in the user interface - # if necessary). It can't be used to re-infer a hierarchy for the document - # symbols. - # - # @return [string] - def container_name - attributes.fetch(:containerName) - end - - # - # The location of this symbol. Whether a server is allowed to - # return a location without a range depends on the client - # capability `workspace.symbol.resolveSupport`. - # - # See also `SymbolInformation.location`. - # - # @return [Location | { uri: string; }] - def location - attributes.fetch(:location) - end - - # - # A data entry field that is preserved on a workspace symbol between a - # workspace symbol request and a workspace symbol resolve request. - # - # @return [LSPAny] - def data - attributes.fetch(:data) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/workspace_symbol_client_capabilities.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/workspace_symbol_client_capabilities.rb deleted file mode 100644 index 41207951..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/workspace_symbol_client_capabilities.rb +++ /dev/null @@ -1,64 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class WorkspaceSymbolClientCapabilities - def initialize(dynamic_registration: nil, symbol_kind: nil, tag_support: nil, resolve_support: nil) - @attributes = {} - - @attributes[:dynamicRegistration] = dynamic_registration if dynamic_registration - @attributes[:symbolKind] = symbol_kind if symbol_kind - @attributes[:tagSupport] = tag_support if tag_support - @attributes[:resolveSupport] = resolve_support if resolve_support - - @attributes.freeze - end - - # - # Symbol request supports dynamic registration. - # - # @return [boolean] - def dynamic_registration - attributes.fetch(:dynamicRegistration) - end - - # - # Specific capabilities for the `SymbolKind` in the `workspace/symbol` - # request. - # - # @return [{ valueSet?: SymbolKind[]; }] - def symbol_kind - attributes.fetch(:symbolKind) - end - - # - # The client supports tags on `SymbolInformation` and `WorkspaceSymbol`. - # Clients supporting tags have to handle unknown tags gracefully. - # - # @return [{ valueSet: 1[]; }] - def tag_support - attributes.fetch(:tagSupport) - end - - # - # The client support partial workspace symbols. The client will send the - # request `workspaceSymbol/resolve` to the server to resolve additional - # properties. - # - # @return [{ properties: string[]; }] - def resolve_support - attributes.fetch(:resolveSupport) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/workspace_symbol_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/workspace_symbol_options.rb deleted file mode 100644 index 9f30555e..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/workspace_symbol_options.rb +++ /dev/null @@ -1,40 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class WorkspaceSymbolOptions - def initialize(work_done_progress: nil, resolve_provider: nil) - @attributes = {} - - @attributes[:workDoneProgress] = work_done_progress if work_done_progress - @attributes[:resolveProvider] = resolve_provider if resolve_provider - - @attributes.freeze - end - - # @return [boolean] - def work_done_progress - attributes.fetch(:workDoneProgress) - end - - # - # The server provides support to resolve additional - # information for a workspace symbol. - # - # @return [boolean] - def resolve_provider - attributes.fetch(:resolveProvider) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/workspace_symbol_params.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/workspace_symbol_params.rb deleted file mode 100644 index 48efac33..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/workspace_symbol_params.rb +++ /dev/null @@ -1,56 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # The parameters of a Workspace Symbol Request. - # - class WorkspaceSymbolParams - def initialize(work_done_token: nil, partial_result_token: nil, query:) - @attributes = {} - - @attributes[:workDoneToken] = work_done_token if work_done_token - @attributes[:partialResultToken] = partial_result_token if partial_result_token - @attributes[:query] = query - - @attributes.freeze - end - - # - # An optional token that a server can use to report work done progress. - # - # @return [ProgressToken] - def work_done_token - attributes.fetch(:workDoneToken) - end - - # - # An optional token that a server can use to report partial results (e.g. - # streaming) to the client. - # - # @return [ProgressToken] - def partial_result_token - attributes.fetch(:partialResultToken) - end - - # - # A query string to filter symbols by. Clients may send an empty - # string here to request all symbols. - # - # @return [string] - def query - attributes.fetch(:query) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/workspace_symbol_registration_options.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/workspace_symbol_registration_options.rb deleted file mode 100644 index 6c99282e..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/workspace_symbol_registration_options.rb +++ /dev/null @@ -1,40 +0,0 @@ -module LanguageServer - module Protocol - module Interface - class WorkspaceSymbolRegistrationOptions - def initialize(work_done_progress: nil, resolve_provider: nil) - @attributes = {} - - @attributes[:workDoneProgress] = work_done_progress if work_done_progress - @attributes[:resolveProvider] = resolve_provider if resolve_provider - - @attributes.freeze - end - - # @return [boolean] - def work_done_progress - attributes.fetch(:workDoneProgress) - end - - # - # The server provides support to resolve additional - # information for a workspace symbol. - # - # @return [boolean] - def resolve_provider - attributes.fetch(:resolveProvider) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/workspace_unchanged_document_diagnostic_report.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/workspace_unchanged_document_diagnostic_report.rb deleted file mode 100644 index 611ca3f9..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/interface/workspace_unchanged_document_diagnostic_report.rb +++ /dev/null @@ -1,68 +0,0 @@ -module LanguageServer - module Protocol - module Interface - # - # An unchanged document diagnostic report for a workspace diagnostic result. - # - class WorkspaceUnchangedDocumentDiagnosticReport - def initialize(kind:, result_id:, uri:, version:) - @attributes = {} - - @attributes[:kind] = kind - @attributes[:resultId] = result_id - @attributes[:uri] = uri - @attributes[:version] = version - - @attributes.freeze - end - - # - # A document diagnostic report indicating - # no changes to the last result. A server can - # only return `unchanged` if result ids are - # provided. - # - # @return [any] - def kind - attributes.fetch(:kind) - end - - # - # A result id which will be sent on the next - # diagnostic request for the same document. - # - # @return [string] - def result_id - attributes.fetch(:resultId) - end - - # - # The URI for which diagnostic information is reported. - # - # @return [string] - def uri - attributes.fetch(:uri) - end - - # - # The version number for which the diagnostics are reported. - # If the document is not marked as open `null` can be provided. - # - # @return [number] - def version - attributes.fetch(:version) - end - - attr_reader :attributes - - def to_hash - attributes - end - - def to_json(*args) - to_hash.to_json(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/transport.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/transport.rb deleted file mode 100644 index d93494cd..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/transport.rb +++ /dev/null @@ -1,2 +0,0 @@ -require "language_server/protocol/transport/io" -require "language_server/protocol/transport/stdio" diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/transport/io.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/transport/io.rb deleted file mode 100644 index 3703aacb..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/transport/io.rb +++ /dev/null @@ -1,2 +0,0 @@ -require "language_server/protocol/transport/io/reader" -require "language_server/protocol/transport/io/writer" diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/transport/io/reader.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/transport/io/reader.rb deleted file mode 100644 index 104878e9..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/transport/io/reader.rb +++ /dev/null @@ -1,31 +0,0 @@ -# frozen_string_literal: true - -require "json" - -module LanguageServer - module Protocol - module Transport - module Io - class Reader - def initialize(io) - @io = io - io.binmode - end - - def read(&block) - while buffer = io.gets("\r\n\r\n") - content_length = buffer.match(/Content-Length: (\d+)/i)[1].to_i - message = io.read(content_length) or raise - request = JSON.parse(message, symbolize_names: true) - block.call(request) - end - end - - private - - attr_reader :io - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/transport/io/writer.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/transport/io/writer.rb deleted file mode 100644 index 465d17fc..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/transport/io/writer.rb +++ /dev/null @@ -1,35 +0,0 @@ -module LanguageServer - module Protocol - module Transport - module Io - class Writer - attr_reader :io - - def initialize(io) - @io = io - io.binmode - end - - def write(response) - response_str = response.merge( - jsonrpc: "2.0" - ).to_json - - headers = { - "Content-Length" => response_str.bytesize - } - - headers.each do |k, v| - io.print "#{k}: #{v}\r\n" - end - - io.print "\r\n" - - io.print response_str - io.flush - end - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/transport/stdio.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/transport/stdio.rb deleted file mode 100644 index f111fc3a..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/transport/stdio.rb +++ /dev/null @@ -1,2 +0,0 @@ -require "language_server/protocol/transport/stdio/reader" -require "language_server/protocol/transport/stdio/writer" diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/transport/stdio/reader.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/transport/stdio/reader.rb deleted file mode 100644 index 245e9eef..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/transport/stdio/reader.rb +++ /dev/null @@ -1,13 +0,0 @@ -module LanguageServer - module Protocol - module Transport - module Stdio - class Reader < Io::Reader - def initialize - super STDIN - end - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/transport/stdio/writer.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/transport/stdio/writer.rb deleted file mode 100644 index bdda148a..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/transport/stdio/writer.rb +++ /dev/null @@ -1,13 +0,0 @@ -module LanguageServer - module Protocol - module Transport - module Stdio - class Writer < Io::Writer - def initialize - super STDOUT - end - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/version.rb b/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/version.rb deleted file mode 100644 index 940cd3ad..00000000 --- a/bundle/ruby/3.2.0/gems/language_server-protocol-3.17.0.3/lib/language_server/protocol/version.rb +++ /dev/null @@ -1,5 +0,0 @@ -module LanguageServer - module Protocol - VERSION = "3.17.0.3" - end -end diff --git a/bundle/ruby/3.2.0/gems/mdl-0.13.0/Gemfile b/bundle/ruby/3.2.0/gems/mdl-0.13.0/Gemfile deleted file mode 100644 index 851fabc2..00000000 --- a/bundle/ruby/3.2.0/gems/mdl-0.13.0/Gemfile +++ /dev/null @@ -1,2 +0,0 @@ -source 'https://rubygems.org' -gemspec diff --git a/bundle/ruby/3.2.0/gems/mdl-0.13.0/LICENSE.txt b/bundle/ruby/3.2.0/gems/mdl-0.13.0/LICENSE.txt deleted file mode 100644 index f7de8ff2..00000000 --- a/bundle/ruby/3.2.0/gems/mdl-0.13.0/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2014 Mark Harrison - -MIT License - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/bundle/ruby/3.2.0/gems/mdl-0.13.0/bin/mdl b/bundle/ruby/3.2.0/gems/mdl-0.13.0/bin/mdl deleted file mode 100755 index 3ced42e6..00000000 --- a/bundle/ruby/3.2.0/gems/mdl-0.13.0/bin/mdl +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env ruby -begin - require 'mdl' -rescue LoadError - # For running in development without bundler - $LOAD_PATH << File.expand_path('../lib', File.dirname(__FILE__)) - require 'mdl' -end - -MarkdownLint.run diff --git a/bundle/ruby/3.2.0/gems/mdl-0.13.0/lib/mdl.rb b/bundle/ruby/3.2.0/gems/mdl-0.13.0/lib/mdl.rb deleted file mode 100644 index b0ac5f58..00000000 --- a/bundle/ruby/3.2.0/gems/mdl-0.13.0/lib/mdl.rb +++ /dev/null @@ -1,160 +0,0 @@ -require_relative 'mdl/formatters/sarif' -require_relative 'mdl/cli' -require_relative 'mdl/config' -require_relative 'mdl/doc' -require_relative 'mdl/kramdown_parser' -require_relative 'mdl/ruleset' -require_relative 'mdl/style' -require_relative 'mdl/version' - -require 'kramdown' -require 'mixlib/shellout' - -# Primary MDL container -module MarkdownLint - def self.run(argv = ARGV) - cli = MarkdownLint::CLI.new - cli.run(argv) - ruleset = RuleSet.new - ruleset.load_default unless Config[:skip_default_ruleset] - Config[:rulesets]&.each do |r| - ruleset.load(r) - end - rules = ruleset.rules - Style.load(Config[:style], rules) - # Rule option filter - if Config[:rules] - unless Config[:rules][:include].empty? - rules.select! do |r, v| - Config[:rules][:include].include?(r) or - !(Config[:rules][:include] & v.aliases).empty? - end - end - unless Config[:rules][:exclude].empty? - rules.select! do |r, v| - !Config[:rules][:exclude].include?(r) and - (Config[:rules][:exclude] & v.aliases).empty? - end - end - end - # Tag option filter - if Config[:tags] - rules.reject! { |_r, v| (v.tags & Config[:tags][:include]).empty? } \ - unless Config[:tags][:include].empty? - rules.select! { |_r, v| (v.tags & Config[:tags][:exclude]).empty? } \ - unless Config[:tags][:exclude].empty? - end - - if Config[:list_rules] - puts 'Enabled rules:' - rules.each do |id, rule| - if Config[:verbose] - puts "#{id} (#{rule.aliases.join(', ')}) [#{rule.tags.join(', ')}] " + - "- #{rule.description}" - elsif Config[:show_aliases] - puts "#{rule.aliases.first || id} - #{rule.description}" - else - puts "#{id} - #{rule.description}" - end - end - exit 0 - end - - # Recurse into directories - cli.cli_arguments.each_with_index do |filename, i| - if Dir.exist?(filename) - if Config[:git_recurse] - Dir.chdir(filename) do - cli.cli_arguments[i] = - Mixlib::ShellOut.new("git ls-files '*.md' '*.markdown'") - .run_command.stdout.lines - .map { |m| File.join(filename, m.strip) } - end - else - cli.cli_arguments[i] = Dir["#{filename}/**/*.{md,markdown}"] - end - end - end - cli.cli_arguments.flatten! - - status = 0 - results = [] - docs_to_print = [] - cli.cli_arguments.each do |filename| - puts "Checking #{filename}..." if Config[:verbose] - unless filename == '-' || File.exist?(filename) - warn( - "#{Errno::ENOENT}: No such file or directory - #{filename}", - ) - exit 3 - end - doc = Doc.new_from_file(filename, Config[:ignore_front_matter]) - filename = '(stdin)' if filename == '-' - if Config[:show_kramdown_warnings] - status = 2 unless doc.parsed.warnings.empty? - doc.parsed.warnings.each do |w| - puts "#{filename}: Kramdown Warning: #{w}" - end - end - rules.sort.each do |id, rule| - puts "Processing rule #{id}" if Config[:verbose] - error_lines = rule.check.call(doc) - next if error_lines.nil? || error_lines.empty? - - status = 1 - error_lines.each do |line| - line += doc.offset # Correct line numbers for any yaml front matter - if Config[:json] || Config[:sarif] - results << { - 'filename' => filename, - 'line' => line, - 'rule' => id, - 'aliases' => rule.aliases, - 'description' => rule.description, - 'docs' => rule.docs_url, - } - else - linked_id = linkify(printable_id(rule), rule.docs_url) - puts "#{filename}:#{line}: #{linked_id} " + rule.description.to_s - end - end - - # If we're not in JSON or SARIF mode (URLs are in the object), and we - # cannot make real links (checking if we have a TTY is an OK heuristic - # for that) then, instead of making the output ugly with long URLs, we - # print them at the end. And of course we only want to print each URL - # once. - if !Config[:json] && !Config[:sarif] && - !$stdout.tty? && !docs_to_print.include?(rule) - docs_to_print << rule - end - end - end - - if Config[:json] - require 'json' - puts JSON.generate(results) - elsif Config[:sarif] - puts SarifFormatter.generate(rules, results) - elsif docs_to_print.any? - puts "\nFurther documentation is available for these failures:" - docs_to_print.each do |rule| - puts " - #{printable_id(rule)}: #{rule.docs_url}" - end - end - exit status - end - - def self.printable_id(rule) - return rule.aliases.first if Config[:show_aliases] && rule.aliases.any? - - rule.id - end - - # Creates hyperlinks in terminal emulators, if available: https://gist.github.com/egmontkob/eb114294efbcd5adb1944c9f3cb5feda - def self.linkify(text, url) - return text unless $stdout.tty? && url - - "\e]8;;#{url}\e\\#{text}\e]8;;\e\\" - end -end diff --git a/bundle/ruby/3.2.0/gems/mdl-0.13.0/lib/mdl/cli.rb b/bundle/ruby/3.2.0/gems/mdl-0.13.0/lib/mdl/cli.rb deleted file mode 100644 index e2f0942b..00000000 --- a/bundle/ruby/3.2.0/gems/mdl-0.13.0/lib/mdl/cli.rb +++ /dev/null @@ -1,184 +0,0 @@ -require 'mixlib/cli' -require 'pathname' - -module MarkdownLint - # Our Mixlib::CLI class - class CLI - include Mixlib::CLI - - CONFIG_FILE = '.mdlrc'.freeze - - banner "Usage: #{File.basename($PROGRAM_NAME)} [options] [FILE.md|DIR ...]" - - option :show_aliases, - :short => '-a', - :long => '--[no-]show-aliases', - :description => - 'Show rule alias instead of rule ID when viewing rules', - :boolean => true - - option :config_file, - :short => '-c', - :long => '--config FILE', - :description => 'The configuration file to use', - :default => CONFIG_FILE.to_s - - option :verbose, - :short => '-v', - :long => '--[no-]verbose', - :description => 'Increase verbosity', - :boolean => true - - option :ignore_front_matter, - :short => '-i', - :long => '--[no-]ignore-front-matter', - :boolean => true, - :description => 'Ignore YAML front matter' - - option :show_kramdown_warnings, - :short => '-w', - :long => '--[no-]warnings', - :description => 'Show kramdown warnings', - :boolean => true - - option :tags, - :short => '-t', - :long => '--tags TAG1,TAG2', - :description => 'Only process rules with these tags', - :proc => proc { |v| toggle_list(v, true) } - - option :rules, - :short => '-r', - :long => '--rules RULE1,RULE2', - :description => 'Only process these rules', - :proc => proc { |v| toggle_list(v) } - - option :style, - :short => '-s', - :long => '--style STYLE', - :description => 'Load the given style' - - option :list_rules, - :short => '-l', - :long => '--list-rules', - :boolean => true, - :description => "Don't process any files, just list enabled rules" - - option :git_recurse, - :short => '-g', - :long => '--git-recurse', - :boolean => true, - :description => - 'Only process files known to git when given a directory' - - option :rulesets, - :short => '-u', - :long => '--rulesets RULESET1,RULESET2', - :proc => proc { |v| v.split(',') }, - :description => 'Specify additional ruleset files to load' - - option :skip_default_ruleset, - :short => '-d', - :long => '--skip-default-ruleset', - :boolean => true, - :description => "Don't load the default markdownlint ruleset" - - option :help, - :on => :tail, - :short => '-h', - :long => '--help', - :description => 'Show this message', - :boolean => true, - :show_options => true, - :exit => 0 - - option :version, - :on => :tail, - :short => '-V', - :long => '--version', - :description => 'Show version', - :boolean => true, - :proc => proc { puts MarkdownLint::VERSION }, - :exit => 0 - - option :json, - :short => '-j', - :long => '--json', - :description => 'JSON output', - :boolean => true - - option :sarif, - :short => '-S', - :long => '--sarif', - :description => 'SARIF output', - :boolean => true - - def run(argv = ARGV) - parse_options(argv) - - # Load the config file if it's present - filename = CLI.probe_config_file(config[:config_file]) - - # Only fall back to ~/.mdlrc if we are using the default value for -c - if filename.nil? && (config[:config_file] == CONFIG_FILE) - filename = File.expand_path("~/#{CONFIG_FILE}") - end - - if !filename.nil? && File.exist?(filename) - MarkdownLint::Config.from_file(filename.to_s) - puts "Loaded config from #{filename}" if config[:verbose] - end - - # Put values in the config file - MarkdownLint::Config.merge!(config) - - # Set the correct format for any rules/tags configuration loaded from - # the config file. Ideally this would probably be done as part of the - # config class itself rather than here. - unless MarkdownLint::Config[:rules].nil? - MarkdownLint::Config[:rules] = CLI.toggle_list( - MarkdownLint::Config[:rules], - ) - end - unless MarkdownLint::Config[:tags].nil? - MarkdownLint::Config[:tags] = CLI.toggle_list( - MarkdownLint::Config[:tags], true - ) - end - - # Read from stdin if we didn't provide a filename - cli_arguments << '-' if cli_arguments.empty? && !config[:list_rules] - end - - def self.toggle_list(parts, to_sym = false) - parts = parts.split(',') if parts.instance_of?(String) - if parts.instance_of?(Array) - inc = parts.reject { |p| p.start_with?('~') } - exc = parts.select { |p| p.start_with?('~') }.map { |p| p[1..] } - if to_sym - inc.map!(&:to_sym) - exc.map!(&:to_sym) - end - { :include => inc, :exclude => exc } - else - # We already converted the string into a list of include/exclude - # pairs, so just return as is - parts - end - end - - def self.probe_config_file(path) - expanded_path = File.expand_path(path) - return expanded_path if File.exist?(expanded_path) - - # Look for a file up from the working dir - Pathname.new(expanded_path).ascend do |p| - next unless p.directory? - - config_file = p.join(CONFIG_FILE) - return config_file if File.exist?(config_file) - end - nil - end - end -end diff --git a/bundle/ruby/3.2.0/gems/mdl-0.13.0/lib/mdl/config.rb b/bundle/ruby/3.2.0/gems/mdl-0.13.0/lib/mdl/config.rb deleted file mode 100644 index 313a763f..00000000 --- a/bundle/ruby/3.2.0/gems/mdl-0.13.0/lib/mdl/config.rb +++ /dev/null @@ -1,10 +0,0 @@ -require 'mixlib/config' - -module MarkdownLint - # our Mixlib::Config class - module Config - extend Mixlib::Config - - default :style, 'default' - end -end diff --git a/bundle/ruby/3.2.0/gems/mdl-0.13.0/lib/mdl/doc.rb b/bundle/ruby/3.2.0/gems/mdl-0.13.0/lib/mdl/doc.rb deleted file mode 100644 index 1e8459b7..00000000 --- a/bundle/ruby/3.2.0/gems/mdl-0.13.0/lib/mdl/doc.rb +++ /dev/null @@ -1,309 +0,0 @@ -require 'kramdown' -require_relative 'kramdown_parser' - -module MarkdownLint - ## - # Representation of the markdown document passed to rule checks - class Doc - ## - # A list of raw markdown source lines. Note that the list is 0-indexed, - # while line numbers in the parsed source are 1-indexed, so you need to - # subtract 1 from a line number to get the correct line. The element_line* - # methods take care of this for you. - - attr_reader :lines, :parsed, :elements, :offset - - ## - # A Kramdown::Document object containing the parsed markdown document. - - ## - # A list of top level Kramdown::Element objects from the parsed document. - - ## - # The line number offset which is greater than zero when the - # markdown file contains YAML front matter that should be ignored. - - ## - # Create a new document given a string containing the markdown source - - def initialize(text, ignore_front_matter = false) - regex = /^---\n(.*?)---\n\n?/m - if ignore_front_matter && regex.match(text) - @offset = regex.match(text).to_s.split("\n").length - text.sub!(regex, '') - else - @offset = 0 - end - # The -1 is to cause split to preserve an extra entry in the array so we - # can tell if there's a final newline in the file or not. - @lines = text.split(/\R/, -1) - @parsed = Kramdown::Document.new(text, :input => 'MarkdownLint') - @elements = @parsed.root.children - add_annotations(@elements) - end - - ## - # Alternate 'constructor' passing in a filename - - def self.new_from_file(filename, ignore_front_matter = false) - if filename == '-' - new($stdin.read, ignore_front_matter) - else - new(File.read(filename, :encoding => 'UTF-8'), ignore_front_matter) - end - end - - ## - # Find all elements of a given type, returning their options hash. The - # options hash has most of the useful data about an element and often you - # can just use this in your rules. - # - # # Returns [ { :location => 1, :element_level => 2 }, ... ] - # elements = find_type(:li) - # - # If +nested+ is set to false, this returns only top level elements of a - # given type. - - def find_type(type, nested = true) - find_type_elements(type, nested).map(&:options) - end - - ## - # Find all elements of a given type, returning a list of the element - # objects themselves. - # - # Instead of a single type, a list of types can be provided instead to - # find all types. - # - # If +nested+ is set to false, this returns only top level elements of a - # given type. - - def find_type_elements(type, nested = true, elements = @elements) - results = [] - type = [type] if type.instance_of?(Symbol) - elements.each do |e| - results.push(e) if type.include?(e.type) - if nested && !e.children.empty? - results.concat(find_type_elements(type, nested, e.children)) - end - end - results - end - - ## - # A variation on find_type_elements that allows you to skip drilling down - # into children of specific element types. - # - # Instead of a single type, a list of types can be provided instead to - # find all types. - # - # Unlike find_type_elements, this method will always search for nested - # elements, and skip the element types given to nested_except. - - def find_type_elements_except( - type, nested_except = [], elements = @elements - ) - results = [] - type = [type] if type.instance_of?(Symbol) - nested_except = [nested_except] if nested_except.instance_of?(Symbol) - elements.each do |e| - results.push(e) if type.include?(e.type) - next if nested_except.include?(e.type) || e.children.empty? - - results.concat( - find_type_elements_except(type, nested_except, e.children), - ) - end - results - end - - ## - # Returns the line number a given element is located on in the source - # file. You can pass in either an element object or an options hash here. - - def element_linenumber(element) - element = element.options if element.is_a?(Kramdown::Element) - element[:location] - end - - ## - # Returns the actual source line for a given element. You can pass in an - # element object or an options hash here. This is useful if you need to - # examine the source line directly for your rule to make use of - # information that isn't present in the parsed document. - - def element_line(element) - @lines[element_linenumber(element) - 1] - end - - ## - # Returns a list of line numbers for all elements passed in. You can pass - # in a list of element objects or a list of options hashes here. - - def element_linenumbers(elements) - elements.map { |e| element_linenumber(e) } - end - - ## - # Returns the actual source lines for a list of elements. You can pass in - # a list of elements objects or a list of options hashes here. - - def element_lines(elements) - elements.map { |e| element_line(e) } - end - - ## - # Returns the header 'style' - :atx (hashes at the beginning), :atx_closed - # (atx header style, but with hashes at the end of the line also), :setext - # (underlined). You can pass in the element object or an options hash - # here. - - def header_style(header) - if header.type != :header - raise 'header_style called with non-header element' - end - - line = element_line(header) - if line.start_with?('#') - if line.strip.end_with?('#') - :atx_closed - else - :atx - end - else - :setext - end - end - - ## - # Returns the list style for a list: :asterisk, :plus, :dash, :ordered or - # :ordered_paren depending on which symbol is used to denote the list - # item. You can pass in either the element itself or an options hash here. - - def list_style(item) - raise 'list_style called with non-list element' if item.type != :li - - line = element_line(item).strip.gsub(/^>\s+/, '') - if line.start_with?('*') - :asterisk - elsif line.start_with?('+') - :plus - elsif line.start_with?('-') - :dash - elsif line.match('[0-9]+\.') - :ordered - elsif line.match('[0-9]+\)') - :ordered_paren - else - :unknown - end - end - - ## - # Returns how much a given line is indented. Hard tabs are treated as an - # indent of 8 spaces. You need to pass in the raw string here. - - def indent_for(line) - line.match(/^\s*/)[0].gsub("\t", ' ' * 8).length - end - - ## - # Returns line numbers for lines that match the given regular expression - - def matching_lines(regex) - @lines.each_with_index.select { |text, _linenum| regex.match(text) } - .map do |i| - i[1] + 1 - end - end - - ## - # Returns line numbers for lines that match the given regular expression. - # Only considers text inside of 'text' elements (i.e. regular markdown - # text and not code/links or other elements). - def matching_text_element_lines(regex, exclude_nested = [:a]) - matches = [] - find_type_elements_except(:text, exclude_nested).each do |e| - first_line = e.options[:location] - # We'll error out if kramdown doesn't have location information for - # the current element. It's better to just not match in these cases - # rather than crash. - next if first_line.nil? - - lines = e.value.split("\n") - lines.each_with_index do |l, i| - matches << (first_line + i) if regex.match(l) - end - end - matches - end - - ## - # Extracts the text from an element whose children consist of text - # elements and other things - - def extract_text(element, prefix = '', restore_whitespace = true) - quotes = { - :rdquo => '"', - :ldquo => '"', - :lsquo => "'", - :rsquo => "'", - } - # If anything goes amiss here, e.g. unknown type, then nil will be - # returned and we'll just not catch that part of the text, which seems - # like a sensible failure mode. - lines = element.children.map do |e| - if e.type == :text - e.value - elsif %i{strong em p codespan}.include?(e.type) - extract_text(e, prefix, restore_whitespace).join("\n") - elsif e.type == :smart_quote - quotes[e.value] - end - end.join.split("\n") - # Text blocks have whitespace stripped, so we need to add it back in at - # the beginning. Because this might be in something like a blockquote, - # we optionally strip off a prefix given to the function. - lines[0] = element_line(element).sub(prefix, '') if restore_whitespace - lines - end - - ## - # Returns the element as plaintext - - def extract_as_text(element) - quotes = { - :rdquo => '"', - :ldquo => '"', - :lsquo => "'", - :rsquo => "'", - } - # If anything goes amiss here, e.g. unknown type, then nil will be - # returned and we'll just not catch that part of the text, which seems - # like a sensible failure mode. - element.children.map do |e| - if e.type == :text || e.type == :codespan - e.value - elsif %i{strong em p a}.include?(e.type) - extract_as_text(e).join("\n") - elsif e.type == :smart_quote - quotes[e.value] - end - end.join.split("\n") - end - - private - - ## - # Adds a 'level' and 'parent' option to all elements to show how nested they - # are - - def add_annotations(elements, level = 1, parent = nil) - elements.each do |e| - e.options[:element_level] = level - e.options[:parent] = parent - add_annotations(e.children, level + 1, e) - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/mdl-0.13.0/lib/mdl/formatters/sarif.rb b/bundle/ruby/3.2.0/gems/mdl-0.13.0/lib/mdl/formatters/sarif.rb deleted file mode 100644 index 836b1b29..00000000 --- a/bundle/ruby/3.2.0/gems/mdl-0.13.0/lib/mdl/formatters/sarif.rb +++ /dev/null @@ -1,89 +0,0 @@ -require 'json' - -module MarkdownLint - # SARIF formatter - # - # @see https://docs.oasis-open.org/sarif/sarif/v2.1.0/sarif-v2.1.0.html - class SarifFormatter - class << self - def generate(rules, results) - matched_rules_id = results.map { |result| result['rule'] }.uniq - matched_rules = rules.select { |id, _| matched_rules_id.include?(id) } - JSON.generate(generate_sarif(matched_rules, results)) - end - - def generate_sarif(rules, results) - { - :'$schema' => 'https://raw.githubusercontent.com/oasis-tcs/sarif-spec/master/Schemata/sarif-schema-2.1.0.json', - :version => '2.1.0', - :runs => [ - { - :tool => { - :driver => { - :name => 'Markdown lint', - :version => MarkdownLint::VERSION, - :informationUri => 'https://github.com/markdownlint/markdownlint', - :rules => generate_sarif_rules(rules), - }, - }, - :results => generate_sarif_results(rules, results), - } - ], - } - end - - def generate_sarif_rules(rules) - rules.map do |id, rule| - { - :id => id, - :name => rule.aliases.first.split('-').map(&:capitalize).join, - :defaultConfiguration => { - :level => 'note', - }, - :properties => { - :description => rule.description, - :tags => rule.tags, - :queryURI => rule.docs_url, - }, - :shortDescription => { - :text => rule.description, - }, - :fullDescription => { - :text => rule.description, - }, - :helpUri => rule.docs_url, - :help => { - :text => "More info: #{rule.docs_url}", - :markdown => "[More info](#{rule.docs_url})", - }, - } - end - end - - def generate_sarif_results(rules, results) - results.map do |result| - { - :ruleId => result['rule'], - :ruleIndex => rules.find_index { |id, _| id == result['rule'] }, - :message => { - :text => "#{result['rule']} - #{result['description']}", - }, - :locations => [ - { - :physicalLocation => { - :artifactLocation => { - :uri => result['filename'], - :uriBaseId => '%SRCROOT%', - }, - :region => { - :startLine => result['line'], - }, - }, - } - ], - } - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/mdl-0.13.0/lib/mdl/kramdown_parser.rb b/bundle/ruby/3.2.0/gems/mdl-0.13.0/lib/mdl/kramdown_parser.rb deleted file mode 100644 index eb11d593..00000000 --- a/bundle/ruby/3.2.0/gems/mdl-0.13.0/lib/mdl/kramdown_parser.rb +++ /dev/null @@ -1,21 +0,0 @@ -# Modified version of the kramdown parser to add in features/changes -# appropriate for markdownlint, but which don't make sense to try to put -# upstream. -require 'kramdown/parser/gfm' - -module Kramdown - module Parser - # modified parser class - see comment above - class MarkdownLint < Kramdown::Parser::Kramdown - def initialize(source, options) - super - i = @block_parsers.index(:codeblock_fenced) - @block_parsers.delete(:codeblock_fenced) - @block_parsers.insert(i, :codeblock_fenced_gfm) - end - - # Regular kramdown parser, but with GFM style fenced code blocks - FENCED_CODEBLOCK_MATCH = Kramdown::Parser::GFM::FENCED_CODEBLOCK_MATCH - end - end -end diff --git a/bundle/ruby/3.2.0/gems/mdl-0.13.0/lib/mdl/rules.rb b/bundle/ruby/3.2.0/gems/mdl-0.13.0/lib/mdl/rules.rb deleted file mode 100644 index 50cc44ab..00000000 --- a/bundle/ruby/3.2.0/gems/mdl-0.13.0/lib/mdl/rules.rb +++ /dev/null @@ -1,890 +0,0 @@ -docs do |id, description| - url_hash = [id.downcase, - description.downcase.gsub(/[^a-z]+/, '-')].join('---') - "https://github.com/markdownlint/markdownlint/blob/main/docs/RULES.md##{url_hash}" -end - -rule 'MD001', 'Header levels should only increment by one level at a time' do - tags :headers - aliases 'header-increment' - check do |doc| - headers = doc.find_type(:header) - old_level = nil - errors = [] - headers.each do |h| - errors << h[:location] if old_level && (h[:level] > old_level + 1) - old_level = h[:level] - end - errors - end -end - -rule 'MD002', 'First header should be a top level header' do - tags :headers - aliases 'first-header-h1' - params :level => 1 - check do |doc| - first_header = doc.find_type(:header).first - if first_header && (first_header[:level] != @params[:level]) - [first_header[:location]] - end - end -end - -rule 'MD003', 'Header style' do - # Header styles are things like ### and adding underscores - # See https://daringfireball.net/projects/markdown/syntax#header - tags :headers - aliases 'header-style' - # :style can be one of :consistent, :atx, :atx_closed, :setext - params :style => :consistent - check do |doc| - headers = doc.find_type_elements(:header, false) - if headers.empty? - nil - else - doc_style = if @params[:style] == :consistent - doc.header_style(headers.first) - else - @params[:style] - end - if doc_style == :setext_with_atx - headers.map do |h| - doc.element_linenumber(h) \ - unless (doc.header_style(h) == :setext) || \ - ((doc.header_style(h) == :atx) && \ - (h.options[:level] > 2)) - end.compact - else - headers.map do |h| - doc.element_linenumber(h) \ - if doc.header_style(h) != doc_style - end.compact - end - end - end -end - -rule 'MD004', 'Unordered list style' do - tags :bullet, :ul - aliases 'ul-style' - # :style can be one of :consistent, :asterisk, :plus, :dash, :sublist - params :style => :consistent - check do |doc| - bullets = doc.find_type_elements(:ul).map do |l| - doc.find_type_elements(:li, false, l.children) - end.flatten - if bullets.empty? - nil - else - doc_style = case @params[:style] - when :consistent - doc.list_style(bullets.first) - when :sublist - {} - else - @params[:style] - end - results = [] - bullets.each do |b| - if @params[:style] == :sublist - level = b.options[:element_level] - if doc_style[level] - if doc_style[level] != doc.list_style(b) - results << doc.element_linenumber(b) - end - else - doc_style[level] = doc.list_style(b) - end - elsif doc.list_style(b) != doc_style - results << doc.element_linenumber(b) - end - end - results.compact - end - end -end - -rule 'MD005', 'Inconsistent indentation for list items at the same level' do - tags :bullet, :ul, :indentation - aliases 'list-indent' - check do |doc| - bullets = doc.find_type(:li) - errors = [] - indent_levels = [] - bullets.each do |b| - indent_level = doc.indent_for(doc.element_line(b)) - if indent_levels[b[:element_level]].nil? - indent_levels[b[:element_level]] = indent_level - end - if indent_level != indent_levels[b[:element_level]] - errors << doc.element_linenumber(b) - end - end - errors - end -end - -rule 'MD006', 'Consider starting bulleted lists at the beginning of the line' do - # Starting at the beginning of the line means that indentation for each - # bullet level can be identical. - tags :bullet, :ul, :indentation - aliases 'ul-start-left' - check do |doc| - doc.find_type(:ul, false).reject do |e| - doc.indent_for(doc.element_line(e)) == 0 - end.map { |e| e[:location] } - end -end - -rule 'MD007', 'Unordered list indentation' do - tags :bullet, :ul, :indentation - aliases 'ul-indent' - # Do not default to < 3, see PR#373 or the comments in RULES.md - params :indent => 3 - check do |doc| - errors = [] - indents = doc.find_type(:ul).map do |e| - [doc.indent_for(doc.element_line(e)), doc.element_linenumber(e)] - end - curr_indent = indents[0][0] unless indents.empty? - indents.each do |indent, linenum| - if (indent > curr_indent) && (indent - curr_indent != @params[:indent]) - errors << linenum - end - curr_indent = indent - end - errors - end -end - -rule 'MD009', 'Trailing spaces' do - tags :whitespace - aliases 'no-trailing-spaces' - params :br_spaces => 2 - check do |doc| - errors = doc.matching_lines(/\s$/) - if params[:br_spaces] > 1 - errors -= doc.matching_lines(/\S\s{#{params[:br_spaces]}}$/) - end - errors - end -end - -rule 'MD010', 'Hard tabs' do - tags :whitespace, :hard_tab - aliases 'no-hard-tabs' - params :ignore_code_blocks => false - check do |doc| - # Every line in the document that is part of a code block. Blank lines - # inside of a code block are acceptable. - codeblock_lines = doc.find_type_elements(:codeblock).map do |e| - (doc.element_linenumber(e).. - doc.element_linenumber(e) + e.value.lines.count).to_a - end.flatten - - # Check for lines with hard tab - hard_tab_lines = doc.matching_lines(/\t/) - # Remove lines with hard tabs, if they stem from codeblock - hard_tab_lines -= codeblock_lines if params[:ignore_code_blocks] - hard_tab_lines - end -end - -rule 'MD011', 'Reversed link syntax' do - tags :links - aliases 'no-reversed-links' - check do |doc| - doc.matching_text_element_lines(/\([^)]+\)\[[^\]]+\]/) - end -end - -rule 'MD012', 'Multiple consecutive blank lines' do - tags :whitespace, :blank_lines - aliases 'no-multiple-blanks' - check do |doc| - # Every line in the document that is part of a code block. Blank lines - # inside of a code block are acceptable. - codeblock_lines = doc.find_type_elements(:codeblock).map do |e| - (doc.element_linenumber(e).. - doc.element_linenumber(e) + e.value.lines.count).to_a - end.flatten - blank_lines = doc.matching_lines(/^\s*$/) - cons_blank_lines = blank_lines.each_cons(2).select do |p, n| - n - p == 1 - end.map { |_p, n| n } - cons_blank_lines - codeblock_lines - end -end - -rule 'MD013', 'Line length' do - tags :line_length - aliases 'line-length' - params :line_length => 80, :ignore_code_blocks => false, :code_blocks => true, - :tables => true - - check do |doc| - # Every line in the document that is part of a code block. - codeblock_lines = doc.find_type_elements(:codeblock).map do |e| - (doc.element_linenumber(e).. - doc.element_linenumber(e) + e.value.lines.count).to_a - end.flatten - # Every line in the document that is part of a table. - locations = doc.elements - .map { |e| [e.options[:location], e] } - .reject { |l, _| l.nil? } - table_lines = locations.map.with_index do |(l, e), i| - if e.type == :table - if i + 1 < locations.size - (l..locations[i + 1].first - 1).to_a - else - (l..doc.lines.count).to_a - end - end - end.flatten - overlines = doc.matching_lines(/^.{#{@params[:line_length]}}.*\s/) - if !params[:code_blocks] || params[:ignore_code_blocks] - overlines -= codeblock_lines - unless params[:code_blocks] - warn 'MD013 warning: Parameter :code_blocks is deprecated.' - warn ' Please replace \":code_blocks => false\" by '\ - '\":ignore_code_blocks => true\" in your configuration.' - end - end - overlines -= table_lines unless params[:tables] - overlines - end -end - -rule 'MD014', 'Dollar signs used before commands without showing output' do - tags :code - aliases 'commands-show-output' - check do |doc| - doc.find_type_elements(:codeblock).select do |e| - !e.value.empty? && - !e.value.split(/\n+/).map { |l| l.match(/^\$\s/) }.include?(nil) - end.map { |e| doc.element_linenumber(e) } - end -end - -rule 'MD018', 'No space after hash on atx style header' do - tags :headers, :atx, :spaces - aliases 'no-missing-space-atx' - check do |doc| - doc.find_type_elements(:header).select do |h| - doc.header_style(h) == :atx && doc.element_line(h).match(/^#+[^#\s]/) - end.map { |h| doc.element_linenumber(h) } - end -end - -rule 'MD019', 'Multiple spaces after hash on atx style header' do - tags :headers, :atx, :spaces - aliases 'no-multiple-space-atx' - check do |doc| - doc.find_type_elements(:header).select do |h| - doc.header_style(h) == :atx && doc.element_line(h).match(/^#+\s\s/) - end.map { |h| doc.element_linenumber(h) } - end -end - -rule 'MD020', 'No space inside hashes on closed atx style header' do - tags :headers, :atx_closed, :spaces - aliases 'no-missing-space-closed-atx' - check do |doc| - doc.find_type_elements(:header).select do |h| - doc.header_style(h) == :atx_closed \ - && (doc.element_line(h).match(/^#+[^#\s]/) \ - || doc.element_line(h).match(/[^#\s\\]#+$/)) - end.map { |h| doc.element_linenumber(h) } - end -end - -rule 'MD021', 'Multiple spaces inside hashes on closed atx style header' do - tags :headers, :atx_closed, :spaces - aliases 'no-multiple-space-closed-atx' - check do |doc| - doc.find_type_elements(:header).select do |h| - doc.header_style(h) == :atx_closed \ - && (doc.element_line(h).match(/^#+\s\s/) \ - || doc.element_line(h).match(/\s\s#+$/)) - end.map { |h| doc.element_linenumber(h) } - end -end - -rule 'MD022', 'Headers should be surrounded by blank lines' do - tags :headers, :blank_lines - aliases 'blanks-around-headers' - check do |doc| - errors = [] - doc.find_type_elements(:header, false).each do |h| - header_bad = false - linenum = doc.element_linenumber(h) - # Check previous line - header_bad = true if (linenum > 1) && !doc.lines[linenum - 2].empty? - # Check next line - next_line_idx = doc.header_style(h) == :setext ? linenum + 1 : linenum - next_line = doc.lines[next_line_idx] - header_bad = true if !next_line.nil? && !next_line.empty? - errors << linenum if header_bad - end - # Kramdown requires that headers start on a block boundary, so in most - # cases it won't pick up a header without a blank line before it. We need - # to check regular text and pick out headers ourselves too - doc.find_type_elements(:p, false).each do |p| - linenum = doc.element_linenumber(p) - text = p.children.select { |e| e.type == :text }.map(&:value).join - lines = text.split("\n") - prev_lines = ['', ''] - lines.each do |line| - # First look for ATX style headers without blank lines before - errors << linenum if line.match(/^\#{1,6}/) && !prev_lines[1].empty? - # Next, look for setext style - if line.match(/^(-+|=+)\s*$/) && !prev_lines[0].empty? - errors << (linenum - 1) - end - linenum += 1 - prev_lines << line - prev_lines.shift - end - end - errors.sort - end -end - -rule 'MD023', 'Headers must start at the beginning of the line' do - tags :headers, :spaces - aliases 'header-start-left' - check do |doc| - errors = [] - # The only type of header with spaces actually parsed as such is setext - # style where only the text is indented. We check for that first. - doc.find_type_elements(:header, false).each do |h| - errors << doc.element_linenumber(h) if doc.element_line(h).match(/^\s/) - end - # Next we have to look for things that aren't parsed as headers because - # they start with spaces. - doc.find_type_elements(:p, false).each do |p| - linenum = doc.element_linenumber(p) - lines = doc.extract_text(p) - prev_line = '' - lines.each do |line| - # First look for ATX style headers - errors << linenum if line.match(/^\s+\#{1,6}/) - # Next, look for setext style - if line.match(/^\s+(-+|=+)\s*$/) && !prev_line.empty? - errors << (linenum - 1) - end - linenum += 1 - prev_line = line - end - end - errors.sort - end -end - -rule 'MD024', 'Multiple headers with the same content' do - tags :headers - aliases 'no-duplicate-header' - params :allow_different_nesting => false - check do |doc| - headers = doc.find_type(:header) - allow_different_nesting = params[:allow_different_nesting] - - duplicates = headers.select do |h| - headers.any? do |e| - e[:location] < h[:location] && - e[:raw_text] == h[:raw_text] && - (allow_different_nesting == false || e[:level] != h[:level]) - end - end.to_set - - if allow_different_nesting - same_nesting_duplicates = Set.new - stack = [] - current_level = 0 - doc.find_type(:header).each do |header| - level = header[:level] - text = header[:raw_text] - - if current_level > level - stack.pop - elsif current_level < level - stack.push([text]) - elsif stack.last.include?(text) - same_nesting_duplicates.add(header) - end - - current_level = level - end - - duplicates += same_nesting_duplicates - end - - duplicates.map { |h| doc.element_linenumber(h) } - end -end - -rule 'MD025', 'Multiple top level headers in the same document' do - tags :headers - aliases 'single-h1' - params :level => 1 - check do |doc| - headers = doc.find_type(:header, false).select do |h| - h[:level] == params[:level] - end - if !headers.empty? && (doc.element_linenumber(headers[0]) == 1) - headers[1..].map { |h| doc.element_linenumber(h) } - end - end -end - -rule 'MD026', 'Trailing punctuation in header' do - tags :headers - aliases 'no-trailing-punctuation' - params :punctuation => '.,;:!?' - check do |doc| - doc.find_type(:header).select do |h| - h[:raw_text].match(/[#{params[:punctuation]}]$/) - end.map do |h| - doc.element_linenumber(h) - end - end -end - -rule 'MD027', 'Multiple spaces after blockquote symbol' do - tags :blockquote, :whitespace, :indentation - aliases 'no-multiple-space-blockquote' - check do |doc| - errors = [] - doc.find_type_elements(:blockquote).each do |e| - linenum = doc.element_linenumber(e) - lines = doc.extract_as_text(e) - # Handle first line specially as whitespace is stripped from the text - # element - errors << linenum if doc.element_line(e).match(/^\s*> /) - lines.each do |line| - errors << linenum if line.start_with?(' ') - linenum += 1 - end - end - errors - end -end - -rule 'MD028', 'Blank line inside blockquote' do - tags :blockquote, :whitespace - aliases 'no-blanks-blockquote' - check do |doc| - def check_blockquote(errors, elements) - prev = [nil, nil, nil] - elements.each do |e| - prev.shift - prev << e.type - if prev == %i{blockquote blank blockquote} - # The current location is the start of the second blockquote, so the - # line before will be a blank line in between the two, or at least the - # lowest blank line if there are more than one. - errors << (e.options[:location] - 1) - end - check_blockquote(errors, e.children) - end - end - errors = [] - check_blockquote(errors, doc.elements) - errors - end -end - -rule 'MD029', 'Ordered list item prefix' do - tags :ol - aliases 'ol-prefix' - # Style can be :one or :ordered - params :style => :one - check do |doc| - case params[:style] - when :ordered - doc.find_type_elements(:ol).map do |l| - doc.find_type_elements(:li, false, l.children) - .map.with_index do |i, idx| - unless doc.element_line(i).strip.start_with?("#{idx + 1}. ") - doc.element_linenumber(i) - end - end - end.flatten.compact - when :one - doc.find_type_elements(:ol).map do |l| - doc.find_type_elements(:li, false, l.children) - end.flatten.map do |i| - unless doc.element_line(i).strip.start_with?('1. ') - doc.element_linenumber(i) - end - end.compact - end - end -end - -rule 'MD030', 'Spaces after list markers' do - tags :ol, :ul, :whitespace - aliases 'list-marker-space' - params :ul_single => 1, :ol_single => 1, :ul_multi => 1, :ol_multi => 1 - check do |doc| - errors = [] - doc.find_type_elements(%i{ul ol}).each do |l| - list_type = l.type.to_s - items = doc.find_type_elements(:li, false, l.children) - # The entire list is to use the multi-paragraph spacing rule if any of - # the items in it have multiple paragraphs/other block items. - srule = items.map { |i| i.children.length }.max > 1 ? 'multi' : 'single' - items.each do |i| - line = doc.element_line(i) - # See #278 - sometimes we think non-printable characters are list - # items even if they are not, so this ignore those and prevents - # us from crashing - next if line.empty? - - actual_spaces = line.gsub(/^> /, '').match(/^\s*\S+(\s+)/)[1].length - required_spaces = params["#{list_type}_#{srule}".to_sym] - errors << doc.element_linenumber(i) if required_spaces != actual_spaces - end - end - errors - end -end - -rule 'MD031', 'Fenced code blocks should be surrounded by blank lines' do - tags :code, :blank_lines - aliases 'blanks-around-fences' - check do |doc| - errors = [] - # Some parsers (including kramdown) have trouble detecting fenced code - # blocks without surrounding whitespace, so examine the lines directly. - in_code = false - fence = nil - lines = [''] + doc.lines + [''] - lines.each_with_index do |line, linenum| - line.strip.match(/^(`{3,}|~{3,})/) - unless Regexp.last_match(1) && - ( - !in_code || - (Regexp.last_match(1).slice(0, fence.length) == fence) - ) - next - end - - fence = in_code ? nil : Regexp.last_match(1) - in_code = !in_code - if (in_code && !lines[linenum - 1].empty?) || - (!in_code && !lines[linenum + 1].empty?) - errors << linenum - end - end - errors - end -end - -rule 'MD032', 'Lists should be surrounded by blank lines' do - tags :bullet, :ul, :ol, :blank_lines - aliases 'blanks-around-lists' - check do |doc| - errors = [] - # Some parsers (including kramdown) have trouble detecting lists - # without surrounding whitespace, so examine the lines directly. - in_list = false - in_code = false - fence = nil - prev_line = '' - doc.lines.each_with_index do |line, linenum| - next if line.strip == '{:toc}' - - unless in_code - list_marker = line.strip.match(/^([*+\-]|(\d+\.))\s/) - if list_marker && !in_list && !prev_line.match(/^($|\s)/) - errors << (linenum + 1) - elsif !list_marker && in_list && !line.match(/^($|\s)/) - errors << linenum - end - in_list = list_marker - end - line.strip.match(/^(`{3,}|~{3,})/) - if Regexp.last_match(1) && ( - !in_code || (Regexp.last_match(1).slice(0, fence.length) == fence) - ) - fence = in_code ? nil : Regexp.last_match(1) - in_code = !in_code - in_list = false - end - prev_line = line - end - errors.uniq - end -end - -rule 'MD033', 'Inline HTML' do - tags :html - aliases 'no-inline-html' - params :allowed_elements => '' - check do |doc| - doc.element_linenumbers(doc.find_type(:html_element)) - allowed = params[:allowed_elements].delete(" \t\r\n").downcase.split(',') - errors = doc.find_type_elements(:html_element).reject do |e| - allowed.include?(e.value) - end - doc.element_linenumbers(errors) - end -end - -rule 'MD034', 'Bare URL used' do - tags :links, :url - aliases 'no-bare-urls' - check do |doc| - doc.matching_text_element_lines(%r{https?://}) - end -end - -rule 'MD035', 'Horizontal rule style' do - tags :hr - aliases 'hr-style' - params :style => :consistent - check do |doc| - hrs = doc.find_type(:hr) - if hrs.empty? - [] - else - doc_style = if params[:style] == :consistent - doc.element_line(hrs[0]) - else - params[:style] - end - doc.element_linenumbers( - hrs.reject { |e| doc.element_line(e) == doc_style }, - ) - end - end -end - -rule 'MD036', 'Emphasis used instead of a header' do - tags :headers, :emphasis - aliases 'no-emphasis-as-header' - params :punctuation => '.,;:!?' - check do |doc| - # We are looking for a paragraph consisting entirely of emphasized - # (italic/bold) text. - errors = [] - doc.find_type_elements(:p, false).each do |p| - next if p.children.length > 1 - next unless %i{em strong}.include?(p.children[0].type) - - lines = doc.extract_text(p.children[0], '', false) - next if lines.length > 1 - next if lines.empty? - next if lines[0].match(/[#{params[:punctuation]}]$/) - - errors << doc.element_linenumber(p) - end - errors - end -end - -rule 'MD037', 'Spaces inside emphasis markers' do - tags :whitespace, :emphasis - aliases 'no-space-in-emphasis' - check do |doc| - # Kramdown doesn't parse emphasis with spaces, which means we can just - # look for emphasis patterns inside regular text with spaces just inside - # them. - (doc.matching_text_element_lines(/\s(\*\*?|__?)\s.+\1/) | \ - doc.matching_text_element_lines(/(\*\*?|__?).+\s\1\s/)).sort - end -end - -rule 'MD038', 'Spaces inside code span elements' do - tags :whitespace, :code - aliases 'no-space-in-code' - check do |doc| - # We only want to check single line codespan elements and not fenced code - # block that happen to be parsed as code spans. - doc.element_linenumbers( - doc.find_type_elements(:codespan).select do |i| - i.value.match(/(^\s|\s$)/) && !i.value.include?("\n") - end, - ) - end -end - -rule 'MD039', 'Spaces inside link text' do - tags :whitespace, :links - aliases 'no-space-in-links' - check do |doc| - doc.element_linenumbers( - doc.find_type_elements(:a).reject { |e| e.children.empty? }.select do |e| - e.children.first.type == :text && e.children.last.type == :text && ( - e.children.first.value.start_with?(' ') || - e.children.last.value.end_with?(' ')) - end, - ) - end -end - -rule 'MD040', 'Fenced code blocks should have a language specified' do - tags :code, :language - aliases 'fenced-code-language' - check do |doc| - # Kramdown parses code blocks with language settings as code blocks with - # the class attribute set to language-languagename. - doc.element_linenumbers(doc.find_type_elements(:codeblock).select do |i| - !i.attr['class'].to_s.start_with?('language-') && - !doc.element_line(i).start_with?(' ') - end) - end -end - -rule 'MD041', 'First line in file should be a top level header' do - tags :headers - aliases 'first-line-h1' - params :level => 1 - check do |doc| - first_header = doc.find_type(:header).first - [1] if first_header.nil? || (first_header[:location] != 1) \ - || (first_header[:level] != params[:level]) - end -end - -rule 'MD046', 'Code block style' do - tags :code - aliases 'code-block-style' - params :style => :fenced - check do |doc| - style = @params[:style] - doc.element_linenumbers( - doc.find_type_elements(:codeblock).select do |i| - # for consistent we determine the first one - if style == :consistent - style = if doc.element_line(i).start_with?(' ') - :indented - else - :fenced - end - end - if style == :fenced - # if our parent is a list or a codeblock, we need to ignore - # its spaces, plus 4 more - parent = i.options[:parent] - ignored_spaces = 0 - if parent - parent.options.delete(:children) - parent.options.delete(:parent) - if %i{li codeblock}.include?(parent.type) - linenum = doc.element_linenumbers([parent]).first - indent = doc.indent_for(doc.lines[linenum - 1]) - ignored_spaces = indent + 4 - end - end - start = ' ' * ignored_spaces - doc.element_line(i).start_with?("#{start} ") - else - !doc.element_line(i).start_with?(' ') - end - end, - ) - end -end - -rule 'MD047', 'File should end with a single newline character' do - tags :blank_lines - aliases 'single-trailing-newline' - check do |doc| - error_lines = [] - last_line = doc.lines[-1] - error_lines.push(doc.lines.length) unless last_line.nil? || last_line.empty? - error_lines - end -end - -rule 'MD055', 'Table row doesn\'t begin/end with pipes' do - tags :tables - aliases 'table-rows-start-and-end-with-pipes' - check do |doc| - error_lines = [] - tables = doc.find_type_elements(:table) - lines = doc.lines - - tables.each do |table| - table_pos = table.options[:location] - 1 - table_rows = get_table_rows(lines, table_pos) - - table_rows.each_with_index do |line, index| - if line.length < 2 || line[0] != '|' || line[-1] != '|' - error_lines << (table_pos + index + 1) - end - end - end - - error_lines - end -end - -rule 'MD056', 'Table has inconsistent number of columns' do - tags :tables - aliases 'inconsistent-columns-in-table' - check do |doc| - error_lines = [] - tables = doc.find_type_elements(:table) - lines = doc.lines - - tables.each do |table| - table_pos = table.options[:location] - 1 - table_rows = get_table_rows(lines, table_pos) - - num_headings = number_of_columns_in_a_table_row(lines[table_pos]) - - table_rows.each_with_index do |line, index| - if number_of_columns_in_a_table_row(line) != num_headings - error_lines << (table_pos + index + 1) - end - end - end - - error_lines - end -end - -rule 'MD057', 'Table has missing or invalid header separation (second row)' do - tags :tables - aliases 'table-invalid-second-row' - check do |doc| - error_lines = [] - tables = doc.find_type_elements(:table) - lines = doc.lines - - tables.each do |table| - second_row = '' - - # line number of table start (1-indexed) - # which is equal to second row's index (0-indexed) - line_num = table.options[:location] - second_row = lines[line_num] if line_num < lines.length - - # This pattern matches if - # 1) The row starts and stops with | characters - # 2) Only consists of characters '|', '-', ':' and whitespace - # 3) Each section between the separators (i.e. '|') - # a) has at least three consecutive dashes - # b) can have whitespace at the beginning or the end - # c) can have colon before and/or after dashes (for alignment) - # Some examples: - # |-----|----|-------| --> matches - # |:---:|:---|-------| --> matches - # | :------: | ----| --> matches - # | - - - | - - - | --> does NOT match - # |::---| --> does NOT match - # |----:|:--|----| --> does NOT match - pattern = /^(\|\s*:?-{3,}:?\s*)+\|$/ - unless second_row.match(pattern) - # Second row is not in the form described by the pattern - error_lines << (line_num + 1) - end - end - - error_lines - end -end diff --git a/bundle/ruby/3.2.0/gems/mdl-0.13.0/lib/mdl/ruleset.rb b/bundle/ruby/3.2.0/gems/mdl-0.13.0/lib/mdl/ruleset.rb deleted file mode 100644 index 2fcc0fe3..00000000 --- a/bundle/ruby/3.2.0/gems/mdl-0.13.0/lib/mdl/ruleset.rb +++ /dev/null @@ -1,144 +0,0 @@ -module MarkdownLint - # defines a single rule - class Rule - attr_accessor :id, :description - - def initialize(id, description, fallback_docs: nil, &block) - @id = id - @description = description - @generate_docs = fallback_docs - @docs_overridden = false - @aliases = [] - @tags = [] - @params = {} - instance_eval(&block) - end - - def check(&block) - @check = block unless block.nil? - @check - end - - def tags(*tags) - @tags = tags.flatten.map(&:to_sym) unless tags.empty? - @tags - end - - def aliases(*aliases) - @aliases.concat(aliases) - @aliases - end - - def params(params = nil) - @params.update(params) unless params.nil? - @params - end - - def docs(url = nil, &block) - if block_given? != url.nil? - raise ArgumentError, 'Give either a URL or a block, not both' - end - - raise 'A docs url is already set within this rule' if @docs_overridden - - @generate_docs = block_given? ? block : lambda { |_, _| url } - @docs_overridden = true - end - - def docs_url - @generate_docs&.call(id, description) - end - - # This method calculates the number of columns in a table row - # - # @param [String] table_row A row of the table in question. - # @return [Numeric] Number of columns in the row - def number_of_columns_in_a_table_row(table_row) - columns = table_row.strip.split('|') - - if columns.empty? - # The stripped line consists of zero or more pipe characters - # and nothing more. - # - # Examples of stripped rows: - # '||' --> one column - # '|||' --> two columns - # '|' --> zero columns - [0, table_row.count('|') - 1].max - else - # Number of columns is the number of splited - # segments with pipe separator. The first segment - # is ignored when it's empty string because - # someting like '|1|2|' is split into ['', '1', '2'] - # when using split('|') function. - # - # Some examples: - # '|foo|bar|' --> two columns - # ' |foo|bar|' --> two columns - # '|foo|bar' --> two columns - # 'foo|bar' --> two columns - columns.size - (columns[0].empty? ? 1 : 0) - end - end - - # This method returns all the rows of a table - # - # @param [Array] lines Lines of a doc as an array - # @param [Numeric] pos Position/index of the table in the array - # @return [Array] Rows of the table in an array - def get_table_rows(lines, pos) - table_rows = [] - while pos < lines.length - line = lines[pos] - - # If the previous line is a table and the current line - # 1) includes pipe character - # 2) does not start with code block identifiers - # a) >= 4 spaces - # b) < 4 spaces and ``` right after - # - # it is possibly a table row - unless line.include?('|') && !line.start_with?(' ') && - !line.strip.start_with?('```') - break - end - - table_rows << line - pos += 1 - end - - table_rows - end - end - - # defines a ruleset - class RuleSet - attr_reader :rules - - def initialize - @rules = {} - end - - def rule(id, description, &block) - @rules[id] = - Rule.new(id, description, :fallback_docs => @fallback_docs, &block) - end - - def load(rules_file) - instance_eval(File.read(rules_file), rules_file) - @rules - end - - def docs(url = nil, &block) - if block_given? != url.nil? - raise ArgumentError, 'Give either a URL or a block, not both' - end - - @fallback_docs = block_given? ? block : lambda { |_, _| url } - end - - def load_default - load(File.expand_path('rules.rb', __dir__)) - end - end -end diff --git a/bundle/ruby/3.2.0/gems/mdl-0.13.0/lib/mdl/style.rb b/bundle/ruby/3.2.0/gems/mdl-0.13.0/lib/mdl/style.rb deleted file mode 100644 index b02a36b0..00000000 --- a/bundle/ruby/3.2.0/gems/mdl-0.13.0/lib/mdl/style.rb +++ /dev/null @@ -1,78 +0,0 @@ -require 'set' - -module MarkdownLint - # defines a style - class Style - attr_reader :rules - - def initialize(all_rules) - @tagged_rules = {} - @aliases = {} - all_rules.each do |id, r| - r.tags.each do |t| - @tagged_rules[t] ||= Set.new - @tagged_rules[t] << id - end - r.aliases.each do |a| - @aliases[a] = id - end - end - @all_rules = all_rules - @rules = Set.new - end - - def all - @rules.merge(@all_rules.keys) - end - - def rule(id, params = {}) - if block_given? - raise '"rule" does not take a block. Should this definition go in a ' + - 'ruleset instead?' - end - - id = @aliases[id] if @aliases[id] - raise "No such rule: #{id}" unless @all_rules[id] - - @rules << id - @all_rules[id].params(params) - end - - def exclude_rule(id) - id = @aliases[id] if @aliases[id] - @rules.delete(id) - end - - def tag(tag) - @rules.merge(@tagged_rules[tag]) - end - - def exclude_tag(tag) - @rules.subtract(@tagged_rules[tag]) - end - - def self.load(style_file, rules) - unless style_file.include?('/') || style_file.end_with?('.rb') - tmp = File.expand_path("../styles/#{style_file}.rb", __FILE__) - unless File.exist?(tmp) - warn "#{style_file} does not appear to be a built-in style." + - ' If you meant to pass in your own style file, it must contain' + - " a '/' or end in '.rb'. See https://github.com/markdownlint/" + - 'markdownlint/blob/main/docs/configuration.md' - exit(1) - end - style_file = tmp - end - - unless File.exist?(style_file) - warn "Style '#{style_file}' does not exist." - exit(1) - end - - style = new(rules) - style.instance_eval(File.read(style_file), style_file) - rules.select! { |r| style.rules.include?(r) } - style - end - end -end diff --git a/bundle/ruby/3.2.0/gems/mdl-0.13.0/lib/mdl/styles/all.rb b/bundle/ruby/3.2.0/gems/mdl-0.13.0/lib/mdl/styles/all.rb deleted file mode 100644 index 0702cb5b..00000000 --- a/bundle/ruby/3.2.0/gems/mdl-0.13.0/lib/mdl/styles/all.rb +++ /dev/null @@ -1 +0,0 @@ -all diff --git a/bundle/ruby/3.2.0/gems/mdl-0.13.0/lib/mdl/styles/cirosantilli.rb b/bundle/ruby/3.2.0/gems/mdl-0.13.0/lib/mdl/styles/cirosantilli.rb deleted file mode 100644 index 073503a4..00000000 --- a/bundle/ruby/3.2.0/gems/mdl-0.13.0/lib/mdl/styles/cirosantilli.rb +++ /dev/null @@ -1,15 +0,0 @@ -# Enforce the style guide at https://cirosantilli.com/markdown-style-guide -all -rule 'MD003', :style => :atx -rule 'MD004', :style => :dash -rule 'MD007', :indent => 4 -rule 'MD030', :ul_multi => 3, :ol_multi => 2 -rule 'MD035', :style => '---' - -# Inline HTML - this isn't forbidden by the style guide, and raw HTML use is -# explicitly mentioned in the 'email automatic links' section. -exclude_rule 'MD033' - -# File should end with a single newline character -# this isn't forbidden by the style guide -exclude_rule 'MD047' diff --git a/bundle/ruby/3.2.0/gems/mdl-0.13.0/lib/mdl/styles/default.rb b/bundle/ruby/3.2.0/gems/mdl-0.13.0/lib/mdl/styles/default.rb deleted file mode 100644 index c38b767a..00000000 --- a/bundle/ruby/3.2.0/gems/mdl-0.13.0/lib/mdl/styles/default.rb +++ /dev/null @@ -1,4 +0,0 @@ -all - -exclude_rule 'fenced-code-language' # Fenced code blocks should have a language -exclude_rule 'first-line-h1' # First line in file should be a top level header diff --git a/bundle/ruby/3.2.0/gems/mdl-0.13.0/lib/mdl/styles/relaxed.rb b/bundle/ruby/3.2.0/gems/mdl-0.13.0/lib/mdl/styles/relaxed.rb deleted file mode 100644 index 1153bdd0..00000000 --- a/bundle/ruby/3.2.0/gems/mdl-0.13.0/lib/mdl/styles/relaxed.rb +++ /dev/null @@ -1,11 +0,0 @@ -all -exclude_tag :whitespace -exclude_tag :line_length - -exclude_rule 'MD006' # Lists at beginning of line -exclude_rule 'MD007' # List indentation -exclude_rule 'MD033' # Inline HTML -exclude_rule 'MD034' # Bare URL used -exclude_rule 'MD040' # Fenced code blocks should have a language specified -exclude_rule 'MD041' # First line in file should be a top level header -exclude_rule 'MD047' # File should end with a single newline character diff --git a/bundle/ruby/3.2.0/gems/mdl-0.13.0/lib/mdl/version.rb b/bundle/ruby/3.2.0/gems/mdl-0.13.0/lib/mdl/version.rb deleted file mode 100644 index 715ae952..00000000 --- a/bundle/ruby/3.2.0/gems/mdl-0.13.0/lib/mdl/version.rb +++ /dev/null @@ -1,3 +0,0 @@ -module MarkdownLint - VERSION = '0.13.0'.freeze -end diff --git a/bundle/ruby/3.2.0/gems/mdl-0.13.0/mdl.gemspec b/bundle/ruby/3.2.0/gems/mdl-0.13.0/mdl.gemspec deleted file mode 100644 index c5af0081..00000000 --- a/bundle/ruby/3.2.0/gems/mdl-0.13.0/mdl.gemspec +++ /dev/null @@ -1,35 +0,0 @@ -lib = File.expand_path('lib', __dir__) -$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) -require 'mdl/version' - -Gem::Specification.new do |spec| - spec.name = 'mdl' - spec.version = MarkdownLint::VERSION - spec.authors = ['Mark Harrison'] - spec.email = ['mark@mivok.net'] - spec.summary = 'Markdown lint tool' - spec.description = 'Style checker/lint tool for markdown files' - spec.homepage = 'https://github.com/markdownlint/markdownlint' - spec.license = 'MIT' - spec.metadata['rubygems_mfa_required'] = 'true' - - spec.files = %w{LICENSE.txt Gemfile} + Dir.glob('*.gemspec') + - Dir.glob('lib/**/*') - spec.bindir = 'bin' - spec.executables = %w{mdl} - spec.require_paths = ['lib'] - - spec.required_ruby_version = '>= 2.7' - - spec.add_dependency 'kramdown', '~> 2.3' - spec.add_dependency 'kramdown-parser-gfm', '~> 1.1' - spec.add_dependency 'mixlib-cli', '~> 2.1', '>= 2.1.1' - spec.add_dependency 'mixlib-config', '>= 2.2.1', '< 4' - spec.add_dependency 'mixlib-shellout' - - spec.add_development_dependency 'bundler', '>= 1.12', '< 3' - spec.add_development_dependency 'minitest', '~> 5.9' - spec.add_development_dependency 'pry', '~> 0.10' - spec.add_development_dependency 'rake', '>= 11.2', '< 14' - spec.add_development_dependency 'rubocop', '~> 1.28.1' -end diff --git a/bundle/ruby/3.2.0/gems/method_source-1.0.0/.circleci/config.yml b/bundle/ruby/3.2.0/gems/method_source-1.0.0/.circleci/config.yml deleted file mode 100644 index 0ec85544..00000000 --- a/bundle/ruby/3.2.0/gems/method_source-1.0.0/.circleci/config.yml +++ /dev/null @@ -1,139 +0,0 @@ -version: 2 -references: - repo_restore_cache: &repo_restore_cache - restore_cache: - keys: - - repo-{{ .Environment.CIRCLE_SHA1 }} - - repo_save_cache: &repo_save_cache - save_cache: - key: repo-{{ .Environment.CIRCLE_SHA1 }}-{{ epoch }} - paths: - - ~/method_source - - bundle_install: &bundle_install - run: - name: Install Bundler dependencies - command: bundle install --path ~/method_source/vendor/bundle --jobs 15 - - unit: &unit - run: - name: Run unit tests - command: bundle exec rake - -jobs: - "ruby-1.9": - docker: - - image: kyrylo/ruby-1.9.3p551 - working_directory: /home/circleci/method_source - steps: - - checkout - - <<: *repo_restore_cache - - <<: *bundle_install - - <<: *unit - "ruby-2.0": - docker: - - image: kyrylo/ruby-2.0.0p648 - working_directory: /home/circleci/method_source - steps: - - checkout - - <<: *repo_restore_cache - - <<: *bundle_install - - <<: *unit - "ruby-2.1": - docker: - - image: circleci/ruby:2.1 - working_directory: ~/method_source - steps: - - checkout - - <<: *repo_restore_cache - - <<: *bundle_install - - <<: *unit - "ruby-2.2": - docker: - - image: circleci/ruby:2.2 - working_directory: ~/method_source - steps: - - checkout - - <<: *repo_restore_cache - - <<: *bundle_install - - <<: *unit - "ruby-2.3": - docker: - - image: circleci/ruby:2.3 - working_directory: ~/method_source - steps: - - checkout - - <<: *repo_restore_cache - - <<: *bundle_install - - <<: *unit - "ruby-2.4": - docker: - - image: circleci/ruby:2.4 - working_directory: ~/method_source - steps: - - checkout - - <<: *repo_restore_cache - - <<: *bundle_install - - <<: *unit - "ruby-2.5": - docker: - - image: circleci/ruby:2.5 - working_directory: ~/method_source - steps: - - checkout - - <<: *repo_restore_cache - - <<: *bundle_install - - <<: *unit - "ruby-2.6": - docker: - - image: circleci/ruby:2.6 - working_directory: ~/method_source - steps: - - checkout - - <<: *repo_restore_cache - - <<: *bundle_install - - <<: *unit - "ruby-2.7": - docker: - - image: circleci/ruby:2.7.0 - working_directory: ~/method_source - steps: - - checkout - - <<: *repo_restore_cache - - <<: *bundle_install - - <<: *unit - "jruby-9.1-jdk": - docker: - - image: circleci/jruby:9.1-jdk - working_directory: ~/method_source - steps: - - checkout - - <<: *repo_restore_cache - - <<: *bundle_install - - <<: *unit - "jruby-9.2-jdk": - docker: - - image: circleci/jruby:9.2-jdk - working_directory: ~/method_source - steps: - - checkout - - <<: *repo_restore_cache - - <<: *bundle_install - - <<: *unit - -workflows: - version: 2 - build: - jobs: - - "ruby-1.9" - - "ruby-2.0" - - "ruby-2.1" - - "ruby-2.2" - - "ruby-2.3" - - "ruby-2.4" - - "ruby-2.5" - - "ruby-2.6" - - "ruby-2.7" - - "jruby-9.1-jdk" - - "jruby-9.2-jdk" diff --git a/bundle/ruby/3.2.0/gems/method_source-1.0.0/.gemtest b/bundle/ruby/3.2.0/gems/method_source-1.0.0/.gemtest deleted file mode 100644 index e69de29b..00000000 diff --git a/bundle/ruby/3.2.0/gems/method_source-1.0.0/.yardopts b/bundle/ruby/3.2.0/gems/method_source-1.0.0/.yardopts deleted file mode 100644 index a4e78380..00000000 --- a/bundle/ruby/3.2.0/gems/method_source-1.0.0/.yardopts +++ /dev/null @@ -1 +0,0 @@ --m markdown diff --git a/bundle/ruby/3.2.0/gems/method_source-1.0.0/CHANGELOG.md b/bundle/ruby/3.2.0/gems/method_source-1.0.0/CHANGELOG.md deleted file mode 100644 index cf7b37b8..00000000 --- a/bundle/ruby/3.2.0/gems/method_source-1.0.0/CHANGELOG.md +++ /dev/null @@ -1,10 +0,0 @@ -method_source changelog -======================= - -### master - -### [v1.0.0][v1.0.0] (March 19, 2020) - -* Added Ruby 2.7 support - -[v1.0.0]: https://github.com/banister/method_source/releases/tag/v1.0.0 diff --git a/bundle/ruby/3.2.0/gems/method_source-1.0.0/Gemfile b/bundle/ruby/3.2.0/gems/method_source-1.0.0/Gemfile deleted file mode 100644 index 851fabc2..00000000 --- a/bundle/ruby/3.2.0/gems/method_source-1.0.0/Gemfile +++ /dev/null @@ -1,2 +0,0 @@ -source 'https://rubygems.org' -gemspec diff --git a/bundle/ruby/3.2.0/gems/method_source-1.0.0/LICENSE b/bundle/ruby/3.2.0/gems/method_source-1.0.0/LICENSE deleted file mode 100644 index a0976059..00000000 --- a/bundle/ruby/3.2.0/gems/method_source-1.0.0/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -MIT License - -Copyright (c) 2011 John Mair (banisterfiend) - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/bundle/ruby/3.2.0/gems/method_source-1.0.0/README.markdown b/bundle/ruby/3.2.0/gems/method_source-1.0.0/README.markdown deleted file mode 100644 index 24dfa45d..00000000 --- a/bundle/ruby/3.2.0/gems/method_source-1.0.0/README.markdown +++ /dev/null @@ -1,93 +0,0 @@ -method_source -============= - -[![Circle Build Status](https://circleci.com/gh/banister/method_source.svg?style=shield)](https://circleci.com/gh/banister/method_source) - -(C) John Mair (banisterfiend) 2011 - -_retrieve the sourcecode for a method_ - -*NOTE:* This simply utilizes `Method#source_location`; it - does not access the live AST. - -`method_source` is a utility to return a method's sourcecode as a -Ruby string. Also returns `Proc` and `Lambda` sourcecode. - -Method comments can also be extracted using the `comment` method. - -It is written in pure Ruby (no C). - -* Some Ruby 1.8 support now available. -* Support for MRI, RBX, JRuby, REE - -`method_source` provides the `source` and `comment` methods to the `Method` and -`UnboundMethod` and `Proc` classes. - -* Install the [gem](https://rubygems.org/gems/method_source): `gem install method_source` -* Read the [documentation](https://www.rubydoc.info/github/banister/method_source/master) -* See the [source code](http://github.com/banister/method_source) - -Example: display method source ------------------------------- - - Set.instance_method(:merge).source.display - # => - def merge(enum) - if enum.instance_of?(self.class) - @hash.update(enum.instance_variable_get(:@hash)) - else - do_with_enum(enum) { |o| add(o) } - end - - self - end - -Example: display method comments --------------------------------- - - Set.instance_method(:merge).comment.display - # => - # Merges the elements of the given enumerable object to the set and - # returns self. - -Limitations: ------------- - -* Occasional strange behaviour in Ruby 1.8 -* Cannot return source for C methods. -* Cannot return source for dynamically defined methods. - -Special Thanks --------------- - -[Adam Sanderson](https://github.com/adamsanderson) for `comment` functionality. - -[Dmitry Elastic](https://github.com/dmitryelastic) for the brilliant Ruby 1.8 `source_location` hack. - -[Samuel Kadolph](https://github.com/samuelkadolph) for the JRuby 1.8 `source_location`. - -License -------- - -(The MIT License) - -Copyright (c) 2011 John Mair (banisterfiend) - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/bundle/ruby/3.2.0/gems/method_source-1.0.0/Rakefile b/bundle/ruby/3.2.0/gems/method_source-1.0.0/Rakefile deleted file mode 100644 index 1648a9f2..00000000 --- a/bundle/ruby/3.2.0/gems/method_source-1.0.0/Rakefile +++ /dev/null @@ -1,81 +0,0 @@ -dlext = RbConfig::CONFIG['DLEXT'] -direc = File.dirname(__FILE__) - -require 'rake/clean' -require 'rubygems/package_task' -require "#{direc}/lib/method_source/version" - -CLOBBER.include("**/*.#{dlext}", "**/*~", "**/*#*", "**/*.log", "**/*.o") -CLEAN.include("ext/**/*.#{dlext}", "ext/**/*.log", "ext/**/*.o", - "ext/**/*~", "ext/**/*#*", "ext/**/*.obj", "**/*.rbc", - "ext/**/*.def", "ext/**/*.pdb", "**/*_flymake*.*", "**/*_flymake") - -def apply_spec_defaults(s) - s.name = "method_source" - s.summary = "retrieve the sourcecode for a method" - s.version = MethodSource::VERSION - s.date = Time.now.strftime '%Y-%m-%d' - s.author = "John Mair (banisterfiend)" - s.email = 'jrmair@gmail.com' - s.description = s.summary - s.require_path = 'lib' - s.license = 'MIT' - - s.add_development_dependency("rspec","~>3.6") - s.add_development_dependency("rake", "~>0.9") - s.homepage = "http://banisterfiend.wordpress.com" - s.has_rdoc = 'yard' - s.files = `git ls-files`.split("\n") - s.test_files = `git ls-files -- spec/*`.split("\n") -end - -require "rspec/core/rake_task" -RSpec::Core::RakeTask.new(:spec) do |t| - t.ruby_opts = %w[-w] -end - -desc "reinstall gem" -task :reinstall => :gems do - sh "gem uninstall method_source" rescue nil - sh "gem install #{direc}/pkg/method_source-#{MethodSource::VERSION}.gem" -end - -desc "Set up and run tests" -task :default => [:spec] - -desc "Build the gemspec file" -task :gemspec => "ruby:gemspec" - -namespace :ruby do - spec = Gem::Specification.new do |s| - apply_spec_defaults(s) - s.platform = Gem::Platform::RUBY - end - - Gem::PackageTask.new(spec) do |pkg| - pkg.need_zip = false - pkg.need_tar = false - end - - desc "Generate gemspec file" - task :gemspec do - File.open("#{spec.name}.gemspec", "w") do |f| - f << spec.to_ruby - end - end -end - -desc "build all platform gems at once" -task :gems => [:rmgems, "ruby:gem"] - -desc "remove all platform gems" -task :rmgems => ["ruby:clobber_package"] - -desc "build and push latest gems" -task :pushgems => :gems do - chdir("#{direc}/pkg") do - Dir["*.gem"].each do |gemfile| - sh "gem push #{gemfile}" - end - end -end diff --git a/bundle/ruby/3.2.0/gems/method_source-1.0.0/lib/method_source.rb b/bundle/ruby/3.2.0/gems/method_source-1.0.0/lib/method_source.rb deleted file mode 100644 index 7d16c3b5..00000000 --- a/bundle/ruby/3.2.0/gems/method_source-1.0.0/lib/method_source.rb +++ /dev/null @@ -1,141 +0,0 @@ -# (C) John Mair (banisterfiend) 2011 -# MIT License - -direc = File.dirname(__FILE__) - -require "#{direc}/method_source/version" -require "#{direc}/method_source/source_location" -require "#{direc}/method_source/code_helpers" - -module MethodSource - extend MethodSource::CodeHelpers - - # An Exception to mark errors that were raised trying to find the source from - # a given source_location. - # - class SourceNotFoundError < StandardError; end - - # Helper method responsible for extracting method body. - # Defined here to avoid polluting `Method` class. - # @param [Array] source_location The array returned by Method#source_location - # @param [String] method_name - # @return [String] The method body - def self.source_helper(source_location, name=nil) - raise SourceNotFoundError, "Could not locate source for #{name}!" unless source_location - file, line = *source_location - - expression_at(lines_for(file), line) - rescue SyntaxError => e - raise SourceNotFoundError, "Could not parse source for #{name}: #{e.message}" - end - - # Helper method responsible for opening source file and buffering up - # the comments for a specified method. Defined here to avoid polluting - # `Method` class. - # @param [Array] source_location The array returned by Method#source_location - # @param [String] method_name - # @return [String] The comments up to the point of the method. - def self.comment_helper(source_location, name=nil) - raise SourceNotFoundError, "Could not locate source for #{name}!" unless source_location - file, line = *source_location - - comment_describing(lines_for(file), line) - end - - # Load a memoized copy of the lines in a file. - # - # @param [String] file_name - # @param [String] method_name - # @return [Array] the contents of the file - # @raise [SourceNotFoundError] - def self.lines_for(file_name, name=nil) - @lines_for_file ||= {} - @lines_for_file[file_name] ||= File.readlines(file_name) - rescue Errno::ENOENT => e - raise SourceNotFoundError, "Could not load source for #{name}: #{e.message}" - end - - # @deprecated — use MethodSource::CodeHelpers#complete_expression? - def self.valid_expression?(str) - complete_expression?(str) - rescue SyntaxError - false - end - - # @deprecated — use MethodSource::CodeHelpers#expression_at - def self.extract_code(source_location) - source_helper(source_location) - end - - # This module is to be included by `Method` and `UnboundMethod` and - # provides the `#source` functionality - module MethodExtensions - - # We use the included hook to patch Method#source on rubinius. - # We need to use the included hook as Rubinius defines a `source` - # on Method so including a module will have no effect (as it's - # higher up the MRO). - # @param [Class] klass The class that includes the module. - def self.included(klass) - if klass.method_defined?(:source) && Object.const_defined?(:RUBY_ENGINE) && - RUBY_ENGINE =~ /rbx/ - - klass.class_eval do - orig_source = instance_method(:source) - - define_method(:source) do - begin - super - rescue - orig_source.bind(self).call - end - end - - end - end - end - - # Return the sourcecode for the method as a string - # @return [String] The method sourcecode as a string - # @raise SourceNotFoundException - # - # @example - # Set.instance_method(:clear).source.display - # => - # def clear - # @hash.clear - # self - # end - def source - MethodSource.source_helper(source_location, defined?(name) ? name : inspect) - end - - # Return the comments associated with the method as a string. - # @return [String] The method's comments as a string - # @raise SourceNotFoundException - # - # @example - # Set.instance_method(:clear).comment.display - # => - # # Removes all elements and returns self. - def comment - MethodSource.comment_helper(source_location, defined?(name) ? name : inspect) - end - end -end - -class Method - include MethodSource::SourceLocation::MethodExtensions - include MethodSource::MethodExtensions -end - -class UnboundMethod - include MethodSource::SourceLocation::UnboundMethodExtensions - include MethodSource::MethodExtensions -end - -class Proc - include MethodSource::SourceLocation::ProcExtensions - include MethodSource::MethodExtensions -end - diff --git a/bundle/ruby/3.2.0/gems/method_source-1.0.0/lib/method_source/code_helpers.rb b/bundle/ruby/3.2.0/gems/method_source-1.0.0/lib/method_source/code_helpers.rb deleted file mode 100644 index ccf054a3..00000000 --- a/bundle/ruby/3.2.0/gems/method_source-1.0.0/lib/method_source/code_helpers.rb +++ /dev/null @@ -1,154 +0,0 @@ -module MethodSource - - module CodeHelpers - # Retrieve the first expression starting on the given line of the given file. - # - # This is useful to get module or method source code. - # - # @param [Array, File, String] file The file to parse, either as a File or as - # @param [Integer] line_number The line number at which to look. - # NOTE: The first line in a file is - # line 1! - # @param [Hash] options The optional configuration parameters. - # @option options [Boolean] :strict If set to true, then only completely - # valid expressions are returned. Otherwise heuristics are used to extract - # expressions that may have been valid inside an eval. - # @option options [Integer] :consume A number of lines to automatically - # consume (add to the expression buffer) without checking for validity. - # @return [String] The first complete expression - # @raise [SyntaxError] If the first complete expression can't be identified - def expression_at(file, line_number, options={}) - options = { - :strict => false, - :consume => 0 - }.merge!(options) - - lines = file.is_a?(Array) ? file : file.each_line.to_a - - relevant_lines = lines[(line_number - 1)..-1] || [] - - extract_first_expression(relevant_lines, options[:consume]) - rescue SyntaxError => e - raise if options[:strict] - - begin - extract_first_expression(relevant_lines) do |code| - code.gsub(/\#\{.*?\}/, "temp") - end - rescue SyntaxError - raise e - end - end - - # Retrieve the comment describing the expression on the given line of the given file. - # - # This is useful to get module or method documentation. - # - # @param [Array, File, String] file The file to parse, either as a File or as - # a String or an Array of lines. - # @param [Integer] line_number The line number at which to look. - # NOTE: The first line in a file is line 1! - # @return [String] The comment - def comment_describing(file, line_number) - lines = file.is_a?(Array) ? file : file.each_line.to_a - - extract_last_comment(lines[0..(line_number - 2)]) - end - - # Determine if a string of code is a complete Ruby expression. - # @param [String] code The code to validate. - # @return [Boolean] Whether or not the code is a complete Ruby expression. - # @raise [SyntaxError] Any SyntaxError that does not represent incompleteness. - # @example - # complete_expression?("class Hello") #=> false - # complete_expression?("class Hello; end") #=> true - # complete_expression?("class 123") #=> SyntaxError: unexpected tINTEGER - def complete_expression?(str) - old_verbose = $VERBOSE - $VERBOSE = nil - - catch(:valid) do - eval("BEGIN{throw :valid}\n#{str}") - end - - # Assert that a line which ends with a , or \ is incomplete. - str !~ /[,\\]\s*\z/ - rescue IncompleteExpression - false - ensure - $VERBOSE = old_verbose - end - - private - - # Get the first expression from the input. - # - # @param [Array] lines - # @param [Integer] consume A number of lines to automatically - # consume (add to the expression buffer) without checking for validity. - # @yield a clean-up function to run before checking for complete_expression - # @return [String] a valid ruby expression - # @raise [SyntaxError] - def extract_first_expression(lines, consume=0, &block) - code = consume.zero? ? "" : lines.slice!(0..(consume - 1)).join - - lines.each do |v| - code << v - return code if complete_expression?(block ? block.call(code) : code) - end - raise SyntaxError, "unexpected $end" - end - - # Get the last comment from the input. - # - # @param [Array] lines - # @return [String] - def extract_last_comment(lines) - buffer = "" - - lines.each do |line| - # Add any line that is a valid ruby comment, - # but clear as soon as we hit a non comment line. - if (line =~ /^\s*#/) || (line =~ /^\s*$/) - buffer << line.lstrip - else - buffer.replace("") - end - end - - buffer - end - - # An exception matcher that matches only subsets of SyntaxErrors that can be - # fixed by adding more input to the buffer. - module IncompleteExpression - GENERIC_REGEXPS = [ - /unexpected (\$end|end-of-file|end-of-input|END_OF_FILE)/, # mri, jruby, ruby-2.0, ironruby - /embedded document meets end of file/, # =begin - /unterminated (quoted string|string|regexp|list) meets end of file/, # "quoted string" is ironruby - /can't find string ".*" anywhere before EOF/, # rbx and jruby - /missing 'end' for/, /expecting kWHEN/ # rbx - ] - - RBX_ONLY_REGEXPS = [ - /expecting '[})\]]'(?:$|:)/, /expecting keyword_end/ - ] - - def self.===(ex) - return false unless SyntaxError === ex - case ex.message - when *GENERIC_REGEXPS - true - when *RBX_ONLY_REGEXPS - rbx? - else - false - end - end - - def self.rbx? - RbConfig::CONFIG['ruby_install_name'] == 'rbx' - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/method_source-1.0.0/lib/method_source/source_location.rb b/bundle/ruby/3.2.0/gems/method_source-1.0.0/lib/method_source/source_location.rb deleted file mode 100644 index 76298697..00000000 --- a/bundle/ruby/3.2.0/gems/method_source-1.0.0/lib/method_source/source_location.rb +++ /dev/null @@ -1,138 +0,0 @@ -module MethodSource - module ReeSourceLocation - # Ruby enterprise edition provides all the information that's - # needed, in a slightly different way. - def source_location - [__file__, __line__] rescue nil - end - end - - module SourceLocation - module MethodExtensions - if Proc.method_defined? :__file__ - include ReeSourceLocation - - elsif defined?(RUBY_ENGINE) && RUBY_ENGINE =~ /jruby/ - require 'java' - - # JRuby version source_location hack - # @return [Array] A two element array containing the source location of the method - def source_location - to_java.source_location(Thread.current.to_java.getContext()) - end - else - - - def trace_func(event, file, line, id, binding, classname) - return unless event == 'call' - set_trace_func nil - - @file, @line = file, line - raise :found - end - - private :trace_func - - # Return the source location of a method for Ruby 1.8. - # @return [Array] A two element array. First element is the - # file, second element is the line in the file where the - # method definition is found. - def source_location - if @file.nil? - args =[*(1..(arity<-1 ? -arity-1 : arity ))] - - set_trace_func method(:trace_func).to_proc - call(*args) rescue nil - set_trace_func nil - @file = File.expand_path(@file) if @file && File.exist?(File.expand_path(@file)) - end - [@file, @line] if @file - end - end - end - - module ProcExtensions - if Proc.method_defined? :__file__ - include ReeSourceLocation - - elsif defined?(RUBY_ENGINE) && RUBY_ENGINE =~ /rbx/ - - # Return the source location for a Proc (Rubinius only) - # @return [Array] A two element array. First element is the - # file, second element is the line in the file where the - # proc definition is found. - def source_location - [block.file.to_s, block.line] - end - else - - # Return the source location for a Proc (in implementations - # without Proc#source_location) - # @return [Array] A two element array. First element is the - # file, second element is the line in the file where the - # proc definition is found. - def source_location - self.to_s =~ /@(.*):(\d+)/ - [$1, $2.to_i] - end - end - end - - module UnboundMethodExtensions - if Proc.method_defined? :__file__ - include ReeSourceLocation - - elsif defined?(RUBY_ENGINE) && RUBY_ENGINE =~ /jruby/ - require 'java' - - # JRuby version source_location hack - # @return [Array] A two element array containing the source location of the method - def source_location - to_java.source_location(Thread.current.to_java.getContext()) - end - - else - - - # Return the source location of an instance method for Ruby 1.8. - # @return [Array] A two element array. First element is the - # file, second element is the line in the file where the - # method definition is found. - def source_location - klass = case owner - when Class - owner - when Module - method_owner = owner - Class.new { include(method_owner) } - end - - # deal with immediate values - case - when klass == Symbol - return :a.method(name).source_location - when klass == Integer - return 0.method(name).source_location - when klass == TrueClass - return true.method(name).source_location - when klass == FalseClass - return false.method(name).source_location - when klass == NilClass - return nil.method(name).source_location - end - - begin - Object.instance_method(:method).bind(klass.allocate).call(name).source_location - rescue TypeError - - # Assume we are dealing with a Singleton Class: - # 1. Get the instance object - # 2. Forward the source_location lookup to the instance - instance ||= ObjectSpace.each_object(owner).first - Object.instance_method(:method).bind(instance).call(name).source_location - end - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/method_source-1.0.0/lib/method_source/version.rb b/bundle/ruby/3.2.0/gems/method_source-1.0.0/lib/method_source/version.rb deleted file mode 100644 index 22f52de9..00000000 --- a/bundle/ruby/3.2.0/gems/method_source-1.0.0/lib/method_source/version.rb +++ /dev/null @@ -1,3 +0,0 @@ -module MethodSource - VERSION = '1.0.0'.freeze -end diff --git a/bundle/ruby/3.2.0/gems/method_source-1.0.0/method_source.gemspec b/bundle/ruby/3.2.0/gems/method_source-1.0.0/method_source.gemspec deleted file mode 100644 index 3a5357ad..00000000 --- a/bundle/ruby/3.2.0/gems/method_source-1.0.0/method_source.gemspec +++ /dev/null @@ -1,33 +0,0 @@ -# -*- encoding: utf-8 -*- - -Gem::Specification.new do |s| - s.name = "method_source".freeze - s.version = "1.0.0" - - s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version= - s.require_paths = ["lib".freeze] - s.authors = ["John Mair (banisterfiend)".freeze] - s.date = "2020-03-19" - s.description = "retrieve the sourcecode for a method".freeze - s.email = "jrmair@gmail.com".freeze - s.files = ["CHANGELOG.md".freeze, ".gemtest".freeze, ".travis.yml".freeze, ".yardopts".freeze, "Gemfile".freeze, "LICENSE".freeze, "README.markdown".freeze, "Rakefile".freeze, "lib/method_source.rb".freeze, "lib/method_source/code_helpers.rb".freeze, "lib/method_source/source_location.rb".freeze, "lib/method_source/version.rb".freeze, "method_source.gemspec".freeze, "spec/method_source/code_helpers_spec.rb".freeze, "spec/method_source_spec.rb".freeze, "spec/spec_helper.rb".freeze] - s.homepage = "http://banisterfiend.wordpress.com".freeze - s.licenses = ["MIT".freeze] - s.summary = "retrieve the sourcecode for a method".freeze - s.test_files = ["spec/method_source/code_helpers_spec.rb".freeze, "spec/method_source_spec.rb".freeze, "spec/spec_helper.rb".freeze] - - if s.respond_to? :specification_version then - s.specification_version = 4 - - if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then - s.add_development_dependency(%q.freeze, ["~> 3.6"]) - s.add_development_dependency(%q.freeze, ["~> 0.9"]) - else - s.add_dependency(%q.freeze, ["~> 3.6"]) - s.add_dependency(%q.freeze, ["~> 0.9"]) - end - else - s.add_dependency(%q.freeze, ["~> 3.6"]) - s.add_dependency(%q.freeze, ["~> 0.9"]) - end -end diff --git a/bundle/ruby/3.2.0/gems/method_source-1.0.0/spec/method_source/code_helpers_spec.rb b/bundle/ruby/3.2.0/gems/method_source-1.0.0/spec/method_source/code_helpers_spec.rb deleted file mode 100644 index 287ff893..00000000 --- a/bundle/ruby/3.2.0/gems/method_source-1.0.0/spec/method_source/code_helpers_spec.rb +++ /dev/null @@ -1,43 +0,0 @@ -require 'spec_helper' - -describe MethodSource::CodeHelpers do - before do - @tester = Object.new.extend(MethodSource::CodeHelpers) - end - - [ - ["p = '", "'"], - ["def", "a", "(); end"], - ["p = < - -Mixin::CLI incorporates code from Chef. The Chef notice file follows: - -Chef NOTICE -=========== - -Developed at Chef (http://www.chef.io). - -Contributors and Copyright holders: - - * Copyright 2008, Adam Jacob - * Copyright 2008, Arjuna Christensen - * Copyright 2008, Bryan McLellan - * Copyright 2008, Ezra Zygmuntowicz - * Copyright 2009, Sean Cribbs - * Copyright 2009, Christopher Brown - * Copyright 2009, Thom May - -Chef incorporates code modified from Open4 (http://www.codeforpeople.com/lib/ruby/open4/), which was written by Ara T. Howard. diff --git a/bundle/ruby/3.2.0/gems/mixlib-cli-2.1.8/lib/mixlib/cli.rb b/bundle/ruby/3.2.0/gems/mixlib-cli-2.1.8/lib/mixlib/cli.rb deleted file mode 100644 index f69eb045..00000000 --- a/bundle/ruby/3.2.0/gems/mixlib-cli-2.1.8/lib/mixlib/cli.rb +++ /dev/null @@ -1,453 +0,0 @@ -# -# Author:: Adam Jacob () -# Copyright:: Copyright (c) 2008-2019 Chef Software, Inc. -# License:: Apache License, Version 2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -require "optparse" unless defined?(OptionParser) -require_relative "cli/formatter" -module Mixlib - - # == Mixlib::CLI - # Adds a DSL for defining command line options and methods for parsing those - # options to the including class. - # - # Mixlib::CLI does some setup in #initialize, so the including class must - # call `super()` if it defines a custom initializer. - # - # === DSL - # When included, Mixlib::CLI also extends the including class with its - # ClassMethods, which define the DSL. The primary methods of the DSL are - # ClassMethods#option, which defines a command line option; - # ClassMethods#banner, which defines the "usage" banner; - # and ClassMethods#deprecated_option, which defines a deprecated command-line option. - # - # === Parsing - # Command line options are parsed by calling the instance method - # #parse_options. After calling this method, the attribute #config will - # contain a hash of `:option_name => value` pairs. - module CLI - - module InheritMethods - def inherited(receiver) - receiver.options = deep_dup(options) - receiver.extend(Mixlib::CLI::InheritMethods) - end - - # object:: Instance to clone - # This method will return a "deep clone" of the provided - # `object`. If the provided `object` is an enumerable type the - # contents will be iterated and cloned as well. - def deep_dup(object) - cloned_object = object.respond_to?(:dup) ? object.dup : object - if cloned_object.is_a?(Enumerable) - if cloned_object.is_a?(Hash) - new_hash = cloned_object.class.new - cloned_object.each do |key, value| - cloned_key = deep_dup(key) - cloned_value = deep_dup(value) - new_hash[cloned_key] = cloned_value - end - cloned_object.replace(new_hash) - else - cloned_object.map! do |shallow_instance| - deep_dup(shallow_instance) - end - end - end - cloned_object - rescue TypeError - # Symbol will happily provide a `#dup` method even though - # attempts to clone it will result in an exception (atoms!). - # So if we run into an issue of TypeErrors, just return the - # original object as we gave our "best effort" - object - end - - end - - module ClassMethods - # When this setting is set to +true+, default values supplied to the - # mixlib-cli DSL will be stored in a separate Hash - def use_separate_default_options(true_or_false) - @separate_default_options = true_or_false - end - - def use_separate_defaults? - @separate_default_options ||= false - end - - # Add a command line option. - # - # === Parameters - # name:: The name of the option to add - # args:: A hash of arguments for the option, specifying how it should be parsed. - # Supported arguments: - # :short - The short option, just like from optparse. Example: "-l LEVEL" - # :long - The long option, just like from optparse. Example: "--level LEVEL" - # :description - The description for this item, just like from optparse. - # :default - A default value for this option. Default values will be populated - # on parse into `config` or `default_default`, depending `use_separate_defaults` - # :boolean - indicates the flag is a boolean. You can use this if the flag takes no arguments - # The config value will be set to 'true' if the flag is provided on the CLI and this - # argument is set to true. The config value will be set to false only - # if it has a default value of false - # :required - When set, the option is required. If the command is run without this option, - # it will print a message informing the user of the missing requirement, and exit. Default is false. - # :proc - Proc that will be invoked if the human has specified this option. - # Two forms are supported: - # Proc/1 - provided value is passed in. - # Proc/2 - first argument is provided value. Second is the cli flag option hash. - # Both versions return the value to be assigned to the option. - # :show_options - this option is designated as one that shows all supported options/help when invoked. - # :exit - exit your program with the exit code when this option is given. Example: 0 - # :in - array containing a list of valid values. The value provided at run-time for the option is - # validated against this. If it is not in the list, it will print a message and exit. - # :on :head OR :tail - force this option to display at the beginning or end of the - # option list, respectively - # = - # @return :: the config hash for the created option - # i - def option(name, args) - @options ||= {} - raise(ArgumentError, "Option name must be a symbol") unless name.is_a?(Symbol) - - @options[name.to_sym] = args - end - - # Declare a deprecated option - # - # Add a deprecated command line option. - # - # name :: The name of the deprecated option - # replacement :: The name of the option that replaces this option. - # long :: The original long flag name, or flag name with argument, eg "--user USER" - # short :: The original short-form flag name, eg "-u USER" - # boolean :: true if this is a boolean flag, eg "--[no-]option". - # value_mapper :: a block that accepts the original value from the deprecated option, - # and converts it to a value suitable for the new option. - # If not provided, the value provided to the deprecated option will be - # assigned directly to the converted option. - # keep :: Defaults to true, this ensures that `options[:deprecated_flag]` is - # populated when the deprecated flag is used. If set to false, - # only the value in `replacement` will be set. Results undefined - # if no replacement is provided. You can use this to enforce the transition - # to non-deprecated keys in your code. - # - # === Returns - # :: The config hash for the created option. - def deprecated_option(name, - replacement: nil, - long: nil, - short: nil, - boolean: false, - value_mapper: nil, - keep: true) - - description = if replacement - replacement_cfg = options[replacement] - display_name = CLI::Formatter.combined_option_display_name(replacement_cfg[:short], replacement_cfg[:long]) - "This flag is deprecated. Use #{display_name} instead." - else - "This flag is deprecated and will be removed in a future release." - end - value_mapper ||= Proc.new { |v| v } - - option(name, - long: long, - short: short, - boolean: boolean, - description: description, - on: :tail, - deprecated: true, - keep: keep, - replacement: replacement, - value_mapper: value_mapper) - end - - # Get the hash of current options. - # - # === Returns - # @options:: The current options hash. - def options - @options ||= {} - @options - end - - # Set the current options hash - # - # === Parameters - # val:: The hash to set the options to - # - # === Returns - # @options:: The current options hash. - def options=(val) - raise(ArgumentError, "Options must receive a hash") unless val.is_a?(Hash) - - @options = val - end - - # Change the banner. Defaults to: - # Usage: #{0} (options) - # - # === Parameters - # bstring:: The string to set the banner to - # - # === Returns - # @banner:: The current banner - def banner(bstring = nil) - if bstring - @banner = bstring - else - @banner ||= "Usage: #{$0} (options)" - @banner - end - end - end - - # Gives the command line options definition as configured in the DSL. These - # are used by #parse_options to generate the option parsing code. To get - # the values supplied by the user, see #config. - attr_accessor :options - - # A Hash containing the values supplied by command line options. - # - # The behavior and contents of this Hash vary depending on whether - # ClassMethods#use_separate_default_options is enabled. - # ==== use_separate_default_options *disabled* - # After initialization, +config+ will contain any default values defined - # via the mixlib-config DSL. When #parse_options is called, user-supplied - # values (from ARGV) will be merged in. - # ==== use_separate_default_options *enabled* - # After initialization, this will be an empty hash. When #parse_options is - # called, +config+ is populated *only* with user-supplied values. - attr_accessor :config - - # If ClassMethods#use_separate_default_options is enabled, this will be a - # Hash containing key value pairs of `:option_name => default_value` - # (populated during object initialization). - # - # If use_separate_default_options is disabled, it will always be an empty - # hash. - attr_accessor :default_config - - # Any arguments which were not parsed and placed in "config"--the leftovers. - attr_accessor :cli_arguments - - # Banner for the option parser. If the option parser is printed, e.g., by - # `puts opt_parser`, this string will be used as the first line. - attr_accessor :banner - - # Create a new Mixlib::CLI class. If you override this, make sure you call super! - # - # === Parameters - # *args:: The array of arguments passed to the initializer - # - # === Returns - # object:: Returns an instance of whatever you wanted :) - def initialize(*args) - @options = {} - @config = {} - @default_config = {} - @opt_parser = nil - - # Set the banner - @banner = self.class.banner - - # Dupe the class options for this instance - klass_options = self.class.options - klass_options.keys.inject(@options) { |memo, key| memo[key] = klass_options[key].dup; memo } - - # If use_separate_defaults? is on, default values go in @default_config - defaults_container = if self.class.use_separate_defaults? - @default_config - else - @config - end - - # Set the default configuration values for this instance - @options.each do |config_key, config_opts| - config_opts[:on] ||= :on - config_opts[:boolean] ||= false - config_opts[:required] ||= false - config_opts[:proc] ||= nil - config_opts[:show_options] ||= false - config_opts[:exit] ||= nil - config_opts[:in] ||= nil - if config_opts.key?(:default) - defaults_container[config_key] = config_opts[:default] - end - end - - super(*args) - end - - # Parses an array, by default ARGV, for command line options (as configured at - # the class level). - # === Parameters - # argv:: The array of arguments to parse; defaults to ARGV - # - # === Returns - # argv:: Returns any un-parsed elements. - def parse_options(argv = ARGV, show_deprecations: true) - argv = argv.dup - opt_parser.parse!(argv) - # Do this before our custom validations, so that custom - # validations apply to any converted deprecation values; - # but after parse! so that everything is populated. - handle_deprecated_options(show_deprecations) - - # Deal with any required values - options.each do |opt_key, opt_config| - if opt_config[:required] && !config.key?(opt_key) - reqarg = opt_config[:short] || opt_config[:long] - puts "You must supply #{reqarg}!" - puts @opt_parser - exit 2 - end - if opt_config[:in] - unless opt_config[:in].is_a?(Array) - raise(ArgumentError, "Options config key :in must receive an Array") - end - - if config[opt_key] && !opt_config[:in].include?(config[opt_key]) - reqarg = Formatter.combined_option_display_name(opt_config[:short], opt_config[:long]) - puts "#{reqarg}: #{config[opt_key]} is not one of the allowed values: #{Formatter.friendly_opt_list(opt_config[:in])}" - # TODO - get rid of this. nobody wants to be spammed with a ton of information, particularly since we just told them the exact problem and how to fix it. - puts @opt_parser - exit 2 - end - end - end - - @cli_arguments = argv - argv - end - - # The option parser generated from the mixlib-cli DSL. +opt_parser+ can be - # used to print a help message including the banner and any CLI options via - # `puts opt_parser`. - # === Returns - # opt_parser:: The option parser object. - def opt_parser - @opt_parser ||= OptionParser.new do |opts| - # Set the banner - opts.banner = banner - - # Create new options - options.sort { |a, b| a[0].to_s <=> b[0].to_s }.each do |opt_key, opt_val| - opt_args = build_option_arguments(opt_val) - opt_method = case opt_val[:on] - when :on - :on - when :tail - :on_tail - when :head - :on_head - else - raise ArgumentError, "You must pass :on, :tail, or :head to :on" - end - - parse_block = - Proc.new do |c| - config[opt_key] = if opt_val[:proc] - if opt_val[:proc].arity == 2 - # New hotness to allow for reducer-style procs. - opt_val[:proc].call(c, config[opt_key]) - else - # Older single-argument proc. - opt_val[:proc].call(c) - end - else - # No proc. - c - end - puts opts if opt_val[:show_options] - exit opt_val[:exit] if opt_val[:exit] - end - - full_opt = [ opt_method ] - opt_args.inject(full_opt) { |memo, arg| memo << arg; memo } - full_opt << parse_block - opts.send(*full_opt) - end - end - end - - # Iterates through options declared as deprecated, - # maps values to their replacement options, - # and prints deprecation warnings. - # - # @return NilClass - def handle_deprecated_options(show_deprecations) - merge_in_values = {} - config.each_key do |opt_key| - opt_cfg = options[opt_key] - - # Deprecated entries do not have defaults so no matter what - # separate_default_options are set, if we see a 'config' - # entry that contains a deprecated indicator, then the option was - # explicitly provided by the caller. - # - # opt_cfg may not exist if an inheriting application - # has directly inserted values info config. - next unless opt_cfg && opt_cfg[:deprecated] - - replacement_key = opt_cfg[:replacement] - if replacement_key - # This is the value passed into the deprecated flag. We'll use - # the declared value mapper (defaults to return the same value if caller hasn't - # provided a mapper). - deprecated_val = config[opt_key] - - # We can't modify 'config' since we're iterating it, apply updates - # at the end. - merge_in_values[replacement_key] = opt_cfg[:value_mapper].call(deprecated_val) - config.delete(opt_key) unless opt_cfg[:keep] - end - - # Warn about the deprecation. - if show_deprecations - # Description is also the deprecation message. - display_name = CLI::Formatter.combined_option_display_name(opt_cfg[:short], opt_cfg[:long]) - puts "#{display_name}: #{opt_cfg[:description]}" - end - end - config.merge!(merge_in_values) - nil - end - - def build_option_arguments(opt_setting) - arguments = [] - - arguments << opt_setting[:short] if opt_setting[:short] - arguments << opt_setting[:long] if opt_setting[:long] - if opt_setting.key?(:description) - description = opt_setting[:description].dup - description << " (required)" if opt_setting[:required] - description << " (valid options: #{Formatter.friendly_opt_list(opt_setting[:in])})" if opt_setting[:in] - opt_setting[:description] = description - arguments << description - end - - arguments - end - - def self.included(receiver) - receiver.extend(Mixlib::CLI::ClassMethods) - receiver.extend(Mixlib::CLI::InheritMethods) - end - end -end diff --git a/bundle/ruby/3.2.0/gems/mixlib-cli-2.1.8/lib/mixlib/cli/formatter.rb b/bundle/ruby/3.2.0/gems/mixlib-cli-2.1.8/lib/mixlib/cli/formatter.rb deleted file mode 100644 index 24a2de71..00000000 --- a/bundle/ruby/3.2.0/gems/mixlib-cli-2.1.8/lib/mixlib/cli/formatter.rb +++ /dev/null @@ -1,33 +0,0 @@ - -module Mixlib - module CLI - class Formatter - # Create a string that includes both versions (short/long) of a flag name - # based on on whether short/long/both/neither are provided - # - # @param short [String] the short name of the option. Can be nil. - # @param long [String] the long name of the option. Can be nil. - # @return [String] the formatted flag name as described above - def self.combined_option_display_name(short, long) - usage = "" - # short/long may have an argument (--long ARG) - # splitting on " " and taking first ensures that we get just - # the flag name without the argument if one is present. - usage << short.split(" ").first if short - usage << "/" if long && short - usage << long.split(" ").first if long - usage - end - - # @param opt_array [Array] - # - # @return [String] a friendly quoted list of items complete with "or" - def self.friendly_opt_list(opt_array) - opts = opt_array.map { |x| "'#{x}'" } - return opts.join(" or ") if opts.size < 3 - - opts[0..-2].join(", ") + ", or " + opts[-1] - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/mixlib-cli-2.1.8/lib/mixlib/cli/version.rb b/bundle/ruby/3.2.0/gems/mixlib-cli-2.1.8/lib/mixlib/cli/version.rb deleted file mode 100644 index 3d37a52f..00000000 --- a/bundle/ruby/3.2.0/gems/mixlib-cli-2.1.8/lib/mixlib/cli/version.rb +++ /dev/null @@ -1,5 +0,0 @@ -module Mixlib - module CLI - VERSION = "2.1.8".freeze - end -end diff --git a/bundle/ruby/3.2.0/gems/mixlib-config-3.0.27/LICENSE b/bundle/ruby/3.2.0/gems/mixlib-config-3.0.27/LICENSE deleted file mode 100644 index 11069edd..00000000 --- a/bundle/ruby/3.2.0/gems/mixlib-config-3.0.27/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - -Copyright [yyyy] [name of copyright owner] - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. diff --git a/bundle/ruby/3.2.0/gems/mixlib-config-3.0.27/NOTICE b/bundle/ruby/3.2.0/gems/mixlib-config-3.0.27/NOTICE deleted file mode 100644 index e954f3d4..00000000 --- a/bundle/ruby/3.2.0/gems/mixlib-config-3.0.27/NOTICE +++ /dev/null @@ -1,27 +0,0 @@ -Mixlib::Config NOTICE -================= - -Developed at Chef (http://www.chef.io). - - * Copyright 2009-2016, Chef Software, Inc. - -Mixlib::Config incorporates code from Chef. The Chef notice file follows: - -Chef NOTICE -=========== - -Developed at Chef (http://www.chef.io). - -Contributors and Copyright holders: - - * Copyright 2008, Adam Jacob - * Copyright 2008, Arjuna Christensen - * Copyright 2008, Bryan McLellan - * Copyright 2008, Ezra Zygmuntowicz - * Copyright 2009, Sean Cribbs - * Copyright 2009, Christopher Brown - * Copyright 2009, Thom May - -Chef incorporates code modified from Open4 (http://www.codeforpeople.com/lib/ruby/open4/), which was written by Ara T. Howard. - -Chef incorporates code modified from Merb (http://www.merbivore.com), which is Copyright (c) 2008 Engine Yard. diff --git a/bundle/ruby/3.2.0/gems/mixlib-config-3.0.27/lib/mixlib/config.rb b/bundle/ruby/3.2.0/gems/mixlib-config-3.0.27/lib/mixlib/config.rb deleted file mode 100644 index fd50254c..00000000 --- a/bundle/ruby/3.2.0/gems/mixlib-config-3.0.27/lib/mixlib/config.rb +++ /dev/null @@ -1,739 +0,0 @@ -# -# Author:: Adam Jacob () -# Author:: Nuo Yan () -# Author:: Christopher Brown () -# Copyright:: Copyright (c) 2008-2018, Chef Software Inc. -# License:: Apache License, Version 2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -require_relative "config/version" -require_relative "config/configurable" -require_relative "config/unknown_config_option_error" -require_relative "config/reopened_config_context_with_configurable_error" -require_relative "config/reopened_configurable_with_config_context_error" - -module Mixlib - module Config - def self.extended(base) - class << base; attr_accessor :configuration; end - class << base; attr_accessor :configurables; end - class << base; attr_accessor :config_contexts; end - class << base; attr_accessor :config_context_lists; end - class << base; attr_accessor :config_context_hashes; end - class << base; attr_accessor :config_parent; end - base.configuration = ({}) - base.configurables = ({}) - base.config_contexts = ({}) - base.config_context_lists = ({}) - base.config_context_hashes = ({}) - base.initialize_mixlib_config - end - - def initialize_mixlib_config - @config_strict_mode = nil - end - - # Loads a given ruby file, and runs instance_eval against it in the context of the current - # object. - # - # Raises an IOError if the file cannot be found, or is not readable. - # - # === Parameters - # filename:: A filename to read from - def from_file(filename) - if %w{ .yml .yaml }.include?(File.extname(filename)) - from_yaml(filename) - elsif File.extname(filename) == ".json" - from_json(filename) - elsif File.extname(filename) == ".toml" - from_toml(filename) - else - instance_eval(IO.read(filename), filename, 1) - end - end - - # Parses valid YAML structure into Ruby so it can be ingested into the Class - # - # === Parameters - # filename:: A filename to read from - def from_yaml(filename) - require "yaml" unless defined?(YAML) - from_hash(YAML.load(IO.read(filename))) - end - - # Parses valid JSON structure into Ruby - # - # === Parameters - # filename:: A filename to read from - def from_json(filename) - require "json" unless defined?(JSON) - from_hash(JSON.parse(IO.read(filename))) - end - - def from_toml(filename) - require "tomlrb" unless defined?(Tomlrb) - from_hash(Tomlrb.parse(IO.read(filename), symbolize_keys: true)) - end - - # Transforms a Hash into method-style configuration syntax to be processed - # - # === Parameters - # hash:: A Hash containing configuration - def from_hash(hash) - apply_nested_hash(hash) - end - - # Pass Mixlib::Config.configure() a block, and it will yield itself - # - # === Parameters - # block:: A block that is called with self.configuration as the argument. - def configure(&block) - yield(configuration) - end - - # Get the value of a config option - # - # === Parameters - # config_option:: The config option to return - # - # === Returns - # value:: The value of the config option - # - # === Raises - # :: If the config option does not exist and strict mode is on. - def [](config_option) - internal_get(config_option.to_sym) - end - - # Set the value of a config option - # - # === Parameters - # config_option:: The config option to set (within the []) - # value:: The value for the config option - # - # === Returns - # value:: The new value of the config option - # - # === Raises - # :: If the config option does not exist and strict mode is on. - def []=(config_option, value) - internal_set(config_option.to_sym, value) - end - - # Check if Mixlib::Config has a config option. - # - # === Parameters - # key:: The config option to check for - # - # === Returns - # :: If the config option exists - # :: If the config option does not exist - def key?(key) - configuration.key?(key.to_sym) || config_contexts.key?(key.to_sym) - end - - alias_method :has_key?, :key? - - def is_default?(key) - symbol = key.to_sym - if configurables.key?(symbol) - configurables[symbol].is_default?(configuration) - else - raise ArgumentError, "config option must exist, and not be a context to check for default values" - end - end - - # Resets a config option to its default. - # - # === Parameters - # symbol:: Name of the config option - def delete(symbol) - configuration.delete(symbol) - end - - # Resets all config options to their defaults. - def reset - self.configuration = ({}) - config_contexts.values.each(&:reset) - end - - # Makes a copy of any non-default values. - # - # This returns a shallow copy of the hash; while the hash itself is - # duplicated a la dup, modifying data inside arrays and hashes may modify - # the original Config object. - # - # === Returns - # - # Hash of values the user has set. - # - # === Examples - # - # For example, this config class: - # - # class MyConfig < Mixlib::Config - # default :will_be_set, 1 - # default :will_be_set_to_default, 1 - # default :will_not_be_set, 1 - # configurable(:computed_value) { |x| x*2 } - # config_context :group do - # default :will_not_be_set, 1 - # end - # config_context :group_never_set - # end - # - # MyConfig.x = 2 - # MyConfig.will_be_set = 2 - # MyConfig.will_be_set_to_default = 1 - # MyConfig.computed_value = 2 - # MyConfig.group.x = 3 - # - # produces this: - # - # MyConfig.save == { - # :x => 2, - # :will_be_set => 2, - # :will_be_set_to_default => 1, - # :computed_value => 4, - # :group => { - # :x => 3 - # } - # } - # - def save(include_defaults = false) - result = configuration.dup - if include_defaults - (configurables.keys - result.keys).each do |missing_default| - # Ask any configurables to save themselves into the result array - if configurables[missing_default].has_default - result[missing_default] = configurables[missing_default].default - end - end - end - config_contexts.each_pair do |key, context| - context_result = context.save(include_defaults) - result[key] = context_result if context_result.size != 0 || include_defaults - end - config_context_lists.each_pair do |key, meta| - meta[:values].each do |context| - context_result = context.save(include_defaults) - result[key] = (result[key] || []) << context_result if context_result.size != 0 || include_defaults - end - end - config_context_hashes.each_pair do |key, meta| - meta[:values].each_pair do |context_key, context| - context_result = context.save(include_defaults) - (result[key] ||= {})[context_key] = context_result if context_result.size != 0 || include_defaults - end - end - result - end - alias :to_hash :save - - # Restore non-default values from the given hash. - # - # === Parameters - # hash: a hash in the same format as output by save. - # - # === Returns - # self - def restore(hash) - self.configuration = hash.reject { |key, value| config_contexts.key?(key) } - config_contexts.each do |key, config_context| - if hash.key?(key) - config_context.restore(hash[key]) - else - config_context.reset - end - end - config_context_lists.each do |key, meta| - meta[:values] = [] - if hash.key?(key) - hash[key].each do |val| - context = define_context(meta[:definition_blocks]) - context.restore(val) - meta[:values] << context - end - end - end - config_context_hashes.each do |key, meta| - meta[:values] = {} - if hash.key?(key) - hash[key].each do |vkey, val| - context = define_context(meta[:definition_blocks]) - context.restore(val) - meta[:values][vkey] = context - end - end - end - end - - # Merge an incoming hash with our config options - # - # === Parameters - # hash: a hash in the same format as output by save. - # - # === Returns - # self - def merge!(hash) - hash.each do |key, value| - if config_contexts.key?(key) - # Grab the config context and let internal_get cache it if so desired - config_contexts[key].restore(value) - else - configuration[key] = value - end - end - self - end - - # Return the set of config hash keys. - # This *only* returns hash keys which have been set by the user. In future - # versions this will likely be removed in favor of something more explicit. - # For now though, we want this to match has_key? - # - # === Returns - # result of Hash#keys - def keys - configuration.keys - end - - # Creates a shallow copy of the internal hash - # NOTE: remove this in 3.0 in favor of save. This is completely useless - # with default values and configuration_context. - # - # === Returns - # result of Hash#dup - def hash_dup - save - end - - # metaprogramming to ensure that the slot for method_symbol - # gets set to value after any other logic is run - # - # === Parameters - # method_symbol:: Name of the method (variable setter) - # blk:: logic block to run in setting slot method_symbol to value - # value:: Value to be set in config hash - # - def config_attr_writer(method_symbol, &block) - configurable(method_symbol).writes_value(&block) - end - - # metaprogramming to set the default value for the given config option - # - # === Parameters - # symbol:: Name of the config option - # default_value:: Default value (can be unspecified) - # block:: Logic block that calculates default value - def default(symbol, default_value = nil, &block) - configurable(symbol).defaults_to(default_value, &block) - end - - # metaprogramming to set information about a config option. This may be - # used in one of two ways: - # - # 1. Block-based: - # configurable(:attr) do - # defaults_to 4 - # writes_value { |value| 10 } - # end - # - # 2. Chain-based: - # configurable(:attr).defaults_to(4).writes_value { |value| 10 } - # - # Currently supported configuration: - # - # defaults_to(value): value returned when configurable has no explicit value - # defaults_to BLOCK: block is run when the configurable has no explicit value - # writes_value BLOCK: block that is run to filter a value when it is being set - # - # === Parameters - # symbol:: Name of the config option - # default_value:: Default value [optional] - # block:: Logic block that calculates default value [optional] - # - # === Returns - # The value of the config option. - def configurable(symbol, &block) - unless configurables[symbol] - if config_contexts.key?(symbol) - raise ReopenedConfigContextWithConfigurableError, "Cannot redefine config_context #{symbol} as a configurable value" - end - - configurables[symbol] = Configurable.new(symbol) - define_attr_accessor_methods(symbol) - end - if block - yield(configurables[symbol]) - end - configurables[symbol] - end - - # Allows you to create a new config context where you can define new - # options with default values. - # - # This method allows you to open up the configurable more than once. - # - # For example: - # - # config_context :server_info do - # configurable(:url).defaults_to("http://localhost") - # end - # - # === Parameters - # symbol: the name of the context - # block: a block that will be run in the context of this new config - # class. - def config_context(symbol, &block) - if configurables.key?(symbol) - raise ReopenedConfigurableWithConfigContextError, "Cannot redefine config value #{symbol} with a config context" - end - - if config_contexts.key?(symbol) - context = config_contexts[symbol] - else - context = Class.new - context.extend(::Mixlib::Config) - context.config_parent = self - config_contexts[symbol] = context - define_attr_accessor_methods(symbol) - end - - if block - context.instance_eval(&block) - end - - context - end - - # Allows you to create a new list of config contexts where you can define new - # options with default values. - # - # This method allows you to open up the configurable more than once. - # - # For example: - # - # config_context_list :listeners, :listener do - # configurable(:url).defaults_to("http://localhost") - # end - # - # === Parameters - # symbol: the plural name for contexts in the list - # symbol: the singular name for contexts in the list - # block: a block that will be run in the context of this new config - # class. - def config_context_list(plural_symbol, singular_symbol, &block) - if configurables.key?(plural_symbol) - raise ReopenedConfigurableWithConfigContextError, "Cannot redefine config value #{plural_symbol} with a config context" - end - - unless config_context_lists.key?(plural_symbol) - config_context_lists[plural_symbol] = { - definition_blocks: [], - values: [], - } - define_list_attr_accessor_methods(plural_symbol, singular_symbol) - end - - config_context_lists[plural_symbol][:definition_blocks] << block if block_given? - end - - # Allows you to create a new hash of config contexts where you can define new - # options with default values. - # - # This method allows you to open up the configurable more than once. - # - # For example: - # - # config_context_hash :listeners, :listener do - # configurable(:url).defaults_to("http://localhost") - # end - # - # === Parameters - # symbol: the plural name for contexts in the list - # symbol: the singular name for contexts in the list - # block: a block that will be run in the context of this new config - # class. - def config_context_hash(plural_symbol, singular_symbol, &block) - if configurables.key?(plural_symbol) - raise ReopenedConfigurableWithConfigContextError, "Cannot redefine config value #{plural_symbol} with a config context" - end - - unless config_context_hashes.key?(plural_symbol) - config_context_hashes[plural_symbol] = { - definition_blocks: [], - values: {}, - } - define_hash_attr_accessor_methods(plural_symbol, singular_symbol) - end - - config_context_hashes[plural_symbol][:definition_blocks] << block if block_given? - end - - NOT_PASSED = Object.new - - # Gets or sets strict mode. When strict mode is on, only values which - # were specified with configurable(), default() or writes_with() may be - # retrieved or set. Getting or setting anything else will cause - # Mixlib::Config::UnknownConfigOptionError to be thrown. - # - # If this is set to :warn, unknown values may be get or set, but a warning - # will be printed with Chef::Log.warn if this occurs. - # - # === Parameters - # value:: pass this value to set strict mode [optional] - # - # === Returns - # Current value of config_strict_mode - # - # === Raises - # :: if value is set to something other than true, false, or :warn - # - def config_strict_mode(value = NOT_PASSED) - if value == NOT_PASSED - if @config_strict_mode.nil? - if config_parent - config_parent.config_strict_mode - else - false - end - else - @config_strict_mode - end - else - self.config_strict_mode = value - end - end - - # Sets strict mode. When strict mode is on, only values which - # were specified with configurable(), default() or writes_with() may be - # retrieved or set. All other values - # - # If this is set to :warn, unknown values may be get or set, but a warning - # will be printed with Chef::Log.warn if this occurs. - # - # === Parameters - # value:: pass this value to set strict mode [optional] - # - # === Raises - # :: if value is set to something other than true, false, or :warn - # - def config_strict_mode=(value) - unless [ true, false, :warn, nil ].include?(value) - raise ArgumentError, "config_strict_mode must be true, false, nil or :warn" - end - - @config_strict_mode = value - end - - # Allows for simple lookups and setting of config options via method calls - # on Mixlib::Config. If there any arguments to the method, they are used to set - # the value of the config option. Otherwise, it's a simple get operation. - # - # === Parameters - # method_symbol:: The method called. Must match a config option. - # *args:: Any arguments passed to the method - # - # === Returns - # value:: The value of the config option. - # - # === Raises - # :: If the config option does not exist and strict mode is on. - def method_missing(method_symbol, *args) - method_symbol = $1.to_sym if method_symbol.to_s =~ /(.+)=$/ - internal_get_or_set(method_symbol, *args) - end - - protected - - # Given a (nested) Hash, apply it to the config object and any contexts. - # - # This is preferable to converting it to the string representation with - # the #to_dotted_hash method above. - # - # === Parameters - # hash:: The hash to apply to the config object - def apply_nested_hash(hash) - hash.each do |k, v| - if v.is_a?(Hash) && internal_get(k.to_sym).is_a?(Hash) - # If it is a plain config key (not a context) and the value is a Hash, plain merge the Hashes. - internal_set(k.to_sym, internal_get(k.to_sym).merge(v)) - elsif v.is_a? Hash - # If loading from hash, and we reference a context that doesn't exist - # and warning/strict is off, we need to create the config context that we expected to be here. - context = internal_get(k.to_sym) || config_context(k.to_sym) - context.apply_nested_hash(v) - else - internal_set(k.to_sym, v) - end - end - end - - private - - # Given a (nested) Hash, turn it into a single top-level hash using dots as - # nesting notation. This allows for direction translation into method-style - # setting of Config. - # - # === Parameters - # hash:: The hash to "de-nestify" - # recursive_key:: The existing key to prepend going forward - # - # === Returns - # value:: A single-depth Hash using dot notation to indicate nesting - def to_dotted_hash(hash, recursive_key = "") - hash.each_with_object({}) do |(k , v), ret| - key = recursive_key + k.to_s - if v.is_a? Hash - ret.merge!(to_dotted_hash(v, key + ".")) - else - ret[key] = v - end - end - end - - # Internal dispatch setter for config values. - # - # === Parameters - # symbol:: Name of the method (variable setter) - # value:: Value to be set in config hash - # - def internal_set(symbol, value) - if configurables.key?(symbol) - configurables[symbol].set(configuration, value) - elsif config_contexts.key?(symbol) - config_contexts[symbol].restore(value.to_hash) - else - if config_strict_mode == :warn - Chef::Log.warn("Setting unsupported config value #{symbol}.") - elsif config_strict_mode - raise UnknownConfigOptionError, "Cannot set unsupported config value #{symbol}." - end - configuration[symbol] = value - end - end - - def internal_get(symbol) - if configurables.key?(symbol) - configurables[symbol].get(configuration) - elsif config_contexts.key?(symbol) - config_contexts[symbol] - elsif config_context_lists.key?(symbol) - config_context_lists[symbol] - elsif config_context_hashes.key?(symbol) - config_context_hashes[symbol] - else - if config_strict_mode == :warn - Chef::Log.warn("Reading unsupported config value #{symbol}.") - elsif config_strict_mode - raise UnknownConfigOptionError, "Reading unsupported config value #{symbol}." - end - configuration[symbol] - end - end - - def internal_get_or_set(symbol, *args) - num_args = args.length - # Setting - if num_args > 0 - internal_set(symbol, num_args == 1 ? args[0] : args) - end - - # Returning - internal_get(symbol) - end - - def define_attr_accessor_methods(symbol) - # When Ruby 1.8.7 is no longer supported, this stuff can be done with define_singleton_method! - meta = class << self; self; end - # Setter - meta.send :define_method, "#{symbol}=".to_sym do |value| - internal_set(symbol, value) - end - # Getter - meta.send :define_method, symbol do |*args, &block| - # If a block was given, eval it in the context - if block - # If the block expects no arguments, then instance_eval - if block.arity == 0 - internal_get(symbol).instance_eval(&block) - else # yield to the block - block.yield(internal_get(symbol)) - end - else - internal_get_or_set(symbol, *args) - end - end - end - - def define_list_attr_accessor_methods(plural_symbol, singular_symbol) - # When Ruby 1.8.7 is no longer supported, this stuff can be done with define_singleton_method! - meta = class << self; self; end - # Getter for list - meta.send :define_method, plural_symbol do - internal_get(plural_symbol)[:values] - end - # Adds a single new context to the list - meta.send :define_method, singular_symbol do |&block| - context_list_details = internal_get(plural_symbol) - new_context = define_context(context_list_details[:definition_blocks]) - context_list_details[:values] << new_context - # If the block expects no arguments, then instance_eval - if block.arity == 0 - new_context.instance_eval(&block) - else # yield to the block - block.yield(new_context) - end - end - end - - def define_hash_attr_accessor_methods(plural_symbol, singular_symbol) - # When Ruby 1.8.7 is no longer supported, this stuff can be done with define_singleton_method! - meta = class << self; self; end - # Getter for list - meta.send :define_method, plural_symbol do - internal_get(plural_symbol)[:values] - end - # Adds a single new context to the list - meta.send :define_method, singular_symbol do |key, &block| - context_hash_details = internal_get(plural_symbol) - context = if context_hash_details[:values].key? key - context_hash_details[:values][key] - else - new_context = define_context(context_hash_details[:definition_blocks]) - context_hash_details[:values][key] = new_context - new_context - end - # If the block expects no arguments, then instance_eval - if block.arity == 0 - context.instance_eval(&block) - else # yield to the block - block.yield(context) - end - end - end - - def define_context(definition_blocks) - context = Class.new - context.extend(::Mixlib::Config) - context.config_parent = self - definition_blocks.each do |block| - context.instance_eval(&block) - end - context - end - end -end diff --git a/bundle/ruby/3.2.0/gems/mixlib-config-3.0.27/lib/mixlib/config/configurable.rb b/bundle/ruby/3.2.0/gems/mixlib-config-3.0.27/lib/mixlib/config/configurable.rb deleted file mode 100644 index df2ffd95..00000000 --- a/bundle/ruby/3.2.0/gems/mixlib-config-3.0.27/lib/mixlib/config/configurable.rb +++ /dev/null @@ -1,90 +0,0 @@ -# -# Author:: John Keiser () -# Copyright:: Copyright (c) 2013-2018, Chef Software Inc. -# License:: Apache License, Version 2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -module Mixlib - module Config - class Configurable - attr_reader :symbol - attr_reader :default_value - attr_reader :default_block - - def initialize(symbol) - @symbol = symbol - end - - def has_default? - instance_variable_defined?(:@default_value) - end - - def writes_value? - instance_variable_defined?(:@writes_value) - end - - def default_block? - instance_variable_defined?(:@default_block) - end - - alias_method :has_default, :has_default? - - def defaults_to(default_value = nil, &block) - @default_value = default_value - @default_block = block if block_given? - self - end - - def writes_value(&block) - @writes_value = block - self - end - - def get(config) - if config.key?(symbol) - config[symbol] - elsif default_block? - default_block.call - else - config[symbol] = safe_dup(default_value) - end - end - - def set(config, value) - config[symbol] = writes_value? ? @writes_value.call(value) : value - end - - def default - if default_block? - default_block.call - else - default_value - end - end - - def is_default?(config) - !config.key?(symbol) || config[symbol] == default_value - end - - private - - def safe_dup(e) - e.dup - rescue TypeError - e - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/mixlib-config-3.0.27/lib/mixlib/config/reopened_config_context_with_configurable_error.rb b/bundle/ruby/3.2.0/gems/mixlib-config-3.0.27/lib/mixlib/config/reopened_config_context_with_configurable_error.rb deleted file mode 100644 index a7cae48e..00000000 --- a/bundle/ruby/3.2.0/gems/mixlib-config-3.0.27/lib/mixlib/config/reopened_config_context_with_configurable_error.rb +++ /dev/null @@ -1,24 +0,0 @@ -# -# Author:: John Keiser () -# Copyright:: Copyright (c) 2013-2016 Chef Software, Inc. -# License:: Apache License, Version 2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -module Mixlib - module Config - class ReopenedConfigContextWithConfigurableError < StandardError - end - end -end diff --git a/bundle/ruby/3.2.0/gems/mixlib-config-3.0.27/lib/mixlib/config/reopened_configurable_with_config_context_error.rb b/bundle/ruby/3.2.0/gems/mixlib-config-3.0.27/lib/mixlib/config/reopened_configurable_with_config_context_error.rb deleted file mode 100644 index f598066c..00000000 --- a/bundle/ruby/3.2.0/gems/mixlib-config-3.0.27/lib/mixlib/config/reopened_configurable_with_config_context_error.rb +++ /dev/null @@ -1,24 +0,0 @@ -# -# Author:: John Keiser () -# Copyright:: Copyright (c) 2013-2016 Chef Software, Inc. -# License:: Apache License, Version 2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -module Mixlib - module Config - class ReopenedConfigurableWithConfigContextError < StandardError - end - end -end diff --git a/bundle/ruby/3.2.0/gems/mixlib-config-3.0.27/lib/mixlib/config/unknown_config_option_error.rb b/bundle/ruby/3.2.0/gems/mixlib-config-3.0.27/lib/mixlib/config/unknown_config_option_error.rb deleted file mode 100644 index 961b09af..00000000 --- a/bundle/ruby/3.2.0/gems/mixlib-config-3.0.27/lib/mixlib/config/unknown_config_option_error.rb +++ /dev/null @@ -1,24 +0,0 @@ -# -# Author:: John Keiser () -# Copyright:: Copyright (c) 2013-2016 Chef Software, Inc. -# License:: Apache License, Version 2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -module Mixlib - module Config - class UnknownConfigOptionError < StandardError - end - end -end diff --git a/bundle/ruby/3.2.0/gems/mixlib-config-3.0.27/lib/mixlib/config/version.rb b/bundle/ruby/3.2.0/gems/mixlib-config-3.0.27/lib/mixlib/config/version.rb deleted file mode 100644 index 81629945..00000000 --- a/bundle/ruby/3.2.0/gems/mixlib-config-3.0.27/lib/mixlib/config/version.rb +++ /dev/null @@ -1,25 +0,0 @@ -# -# Author:: Daniel DeLeo () -# Copyright:: Copyright (c) 2013-2018, Chef Software Inc. -# License:: Apache License, Version 2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -module Mixlib - module Config - - VERSION = "3.0.27".freeze - - end -end diff --git a/bundle/ruby/3.2.0/gems/mixlib-shellout-3.2.7/LICENSE b/bundle/ruby/3.2.0/gems/mixlib-shellout-3.2.7/LICENSE deleted file mode 100644 index 11069edd..00000000 --- a/bundle/ruby/3.2.0/gems/mixlib-shellout-3.2.7/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - -Copyright [yyyy] [name of copyright owner] - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. diff --git a/bundle/ruby/3.2.0/gems/mixlib-shellout-3.2.7/lib/mixlib/shellout.rb b/bundle/ruby/3.2.0/gems/mixlib-shellout-3.2.7/lib/mixlib/shellout.rb deleted file mode 100644 index 0f4f6a83..00000000 --- a/bundle/ruby/3.2.0/gems/mixlib-shellout-3.2.7/lib/mixlib/shellout.rb +++ /dev/null @@ -1,373 +0,0 @@ -#-- -# Author:: Daniel DeLeo () -# Copyright:: Copyright (c) Chef Software Inc. -# License:: Apache License, Version 2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -require "etc" unless defined?(Etc) -require "tmpdir" unless defined?(Dir.mktmpdir) -require "fcntl" -require_relative "shellout/exceptions" - -module Mixlib - - class ShellOut - READ_WAIT_TIME = 0.01 - READ_SIZE = 4096 - DEFAULT_READ_TIMEOUT = 600 - - if RUBY_PLATFORM =~ /mswin|mingw|windows/ - require_relative "shellout/windows" - include ShellOut::Windows - else - require_relative "shellout/unix" - include ShellOut::Unix - end - - # User the command will run as. Normally set via options passed to new - attr_accessor :user - attr_accessor :domain - attr_accessor :password - # TODO remove - attr_accessor :with_logon - - # Whether to simulate logon as the user. Normally set via options passed to new - # Always enabled on windows - attr_accessor :login - - # Group the command will run as. Normally set via options passed to new - attr_accessor :group - - # Working directory for the subprocess. Normally set via options to new - attr_accessor :cwd - - # An Array of acceptable exit codes. #error? (and #error!) use this list - # to determine if the command was successful. Normally set via options to new - attr_accessor :valid_exit_codes - - # When live_stdout is set, the stdout of the subprocess will be copied to it - # as the subprocess is running. - attr_accessor :live_stdout - - # When live_stderr is set, the stderr of the subprocess will be copied to it - # as the subprocess is running. - attr_accessor :live_stderr - - # ShellOut will push data from :input down the stdin of the subprocess. - # Normally set via options passed to new. - # Default: nil - attr_accessor :input - - # If a logger is set, ShellOut will log a message before it executes the - # command. - attr_accessor :logger - - # The log level at which ShellOut should log. - attr_accessor :log_level - - # A string which will be prepended to the log message. - attr_accessor :log_tag - - # The command to be executed. - attr_reader :command - - # The umask that will be set for the subcommand. - attr_reader :umask - - # Environment variables that will be set for the subcommand. Refer to the - # documentation of new to understand how ShellOut interprets this. - attr_accessor :environment - - # The maximum time this command is allowed to run. Usually set via options - # to new - attr_writer :timeout - - # The amount of time the subcommand took to execute - attr_reader :execution_time - - # Data written to stdout by the subprocess - attr_reader :stdout - - # Data written to stderr by the subprocess - attr_reader :stderr - - # A Process::Status (or ducktype) object collected when the subprocess is - # reaped. - attr_reader :status - - attr_reader :stdin_pipe, :stdout_pipe, :stderr_pipe, :process_status_pipe - - # Runs windows process with elevated privileges. Required for Powershell commands which need elevated privileges - attr_accessor :elevated - - attr_accessor :sensitive - - # === Arguments: - # Takes a single command, or a list of command fragments. These are used - # as arguments to Kernel.exec. See the Kernel.exec documentation for more - # explanation of how arguments are evaluated. The last argument can be an - # options Hash. - # === Options: - # If the last argument is a Hash, it is removed from the list of args passed - # to exec and used as an options hash. The following options are available: - # * +user+: the user the command should run as. if an integer is given, it is - # used as a uid. A string is treated as a username and resolved to a uid - # with Etc.getpwnam - # * +group+: the group the command should run as. works similarly to +user+ - # * +cwd+: the directory to chdir to before running the command - # * +umask+: a umask to set before running the command. If given as an Integer, - # be sure to use two leading zeros so it's parsed as Octal. A string will - # be treated as an octal integer - # * +returns+: one or more Integer values to use as valid exit codes for the - # subprocess. This only has an effect if you call +error!+ after - # +run_command+. - # * +environment+: a Hash of environment variables to set before the command - # is run. - # * +timeout+: a Numeric value for the number of seconds to wait on the - # child process before raising an Exception. This is calculated as the - # total amount of time that ShellOut waited on the child process without - # receiving any output (i.e., IO.select returned nil). Default is 600 - # seconds. Note: the stdlib Timeout library is not used. - # * +input+: A String of data to be passed to the subcommand. This is - # written to the child process' stdin stream before the process is - # launched. The child's stdin stream will be a pipe, so the size of input - # data should not exceed the system's default pipe capacity (4096 bytes - # is a safe value, though on newer Linux systems the capacity is 64k by - # default). - # * +live_stream+: An IO or Logger-like object (must respond to the append - # operator +<<+) that will receive data as ShellOut reads it from the - # child process. Generally this is used to copy data from the child to - # the parent's stdout so that users may observe the progress of - # long-running commands. - # * +login+: Whether to simulate a login (set secondary groups, primary group, environment - # variables etc) as done by the OS in an actual login - # === Examples: - # Invoke find(1) to search for .rb files: - # find = Mixlib::ShellOut.new("find . -name '*.rb'") - # find.run_command - # # If all went well, the results are on +stdout+ - # puts find.stdout - # # find(1) prints diagnostic info to STDERR: - # puts "error messages" + find.stderr - # # Raise an exception if it didn't exit with 0 - # find.error! - # Run a command as the +www+ user with no extra ENV settings from +/tmp+ - # cmd = Mixlib::ShellOut.new("apachectl", "start", :user => 'www', :env => nil, :cwd => '/tmp') - # cmd.run_command # etc. - def initialize(*command_args) - @stdout, @stderr, @process_status = "", "", "" - @live_stdout = @live_stderr = nil - @input = nil - @log_level = :debug - @log_tag = nil - @environment = {} - @cwd = nil - @valid_exit_codes = [0] - @terminate_reason = nil - @timeout = nil - @elevated = false - @sensitive = false - - if command_args.last.is_a?(Hash) - parse_options(command_args.pop) - end - - @command = command_args.size == 1 ? command_args.first : command_args - end - - # Returns the stream that both is being used by both live_stdout and live_stderr, or nil - def live_stream - live_stdout == live_stderr ? live_stdout : nil - end - - # A shortcut for setting both live_stdout and live_stderr, so that both the - # stdout and stderr from the subprocess will be copied to the same stream as - # the subprocess is running. - def live_stream=(stream) - @live_stdout = @live_stderr = stream - end - - # Set the umask that the subprocess will have. If given as a string, it - # will be converted to an integer by String#oct. - def umask=(new_umask) - @umask = (new_umask.respond_to?(:oct) ? new_umask.oct : new_umask.to_i) & 007777 - end - - # The uid that the subprocess will switch to. If the user attribute was - # given as a username, it is converted to a uid by Etc.getpwnam - # TODO migrate to shellout/unix.rb - def uid - return nil unless user - - user.is_a?(Integer) ? user : Etc.getpwnam(user.to_s).uid - end - - # The gid that the subprocess will switch to. If the group attribute is - # given as a group name, it is converted to a gid by Etc.getgrnam - # TODO migrate to shellout/unix.rb - def gid - return group.is_a?(Integer) ? group : Etc.getgrnam(group.to_s).gid if group - return Etc.getpwuid(uid).gid if using_login? - - nil - end - - def timeout - @timeout || DEFAULT_READ_TIMEOUT - end - - # Creates a String showing the output of the command, including a banner - # showing the exact command executed. Used by +invalid!+ to show command - # results when the command exited with an unexpected status. - def format_for_exception - return "Command execution failed. STDOUT/STDERR suppressed for sensitive resource" if sensitive - - msg = "" - msg << "#{@terminate_reason}\n" if @terminate_reason - msg << "---- Begin output of #{command} ----\n" - msg << "STDOUT: #{stdout.strip}\n" - msg << "STDERR: #{stderr.strip}\n" - msg << "---- End output of #{command} ----\n" - msg << "Ran #{command} returned #{status.exitstatus}" if status - msg - end - - # The exit status of the subprocess. Will be nil if the command is still - # running or died without setting an exit status (e.g., terminated by - # `kill -9`). - def exitstatus - @status&.exitstatus - end - - # Run the command, writing the command's standard out and standard error - # to +stdout+ and +stderr+, and saving its exit status object to +status+ - # === Returns - # returns +self+; +stdout+, +stderr+, +status+, and +exitstatus+ will be - # populated with results of the command - # === Raises - # * Errno::EACCES when you are not privileged to execute the command - # * Errno::ENOENT when the command is not available on the system (or not - # in the current $PATH) - # * CommandTimeout when the command does not complete - # within +timeout+ seconds (default: 600s) - def run_command - if logger - log_message = (log_tag.nil? ? "" : "#{@log_tag} ") << "sh(#{@command})" - logger.send(log_level, log_message) - end - super - end - - # Checks the +exitstatus+ against the set of +valid_exit_codes+. - # === Returns - # +true+ if +exitstatus+ is not in the list of +valid_exit_codes+, false - # otherwise. - def error? - !Array(valid_exit_codes).include?(exitstatus) - end - - # If #error? is true, calls +invalid!+, which raises an Exception. - # === Returns - # nil::: always returns nil when it does not raise - # === Raises - # ::ShellCommandFailed::: via +invalid!+ - def error! - invalid!("Expected process to exit with #{valid_exit_codes.inspect}, but received '#{exitstatus}'") if error? - end - - # Raises a ShellCommandFailed exception, appending the - # command's stdout, stderr, and exitstatus to the exception message. - # === Arguments - # +msg+: A String to use as the basis of the exception message. The - # default explanation is very generic, providing a more informative message - # is highly encouraged. - # === Raises - # ShellCommandFailed always - def invalid!(msg = nil) - msg ||= "Command produced unexpected results" - raise ShellCommandFailed, msg + "\n" + format_for_exception - end - - def inspect - "<#{self.class.name}##{object_id}: command: '#{@command}' process_status: #{@status.inspect} " + - "stdout: '#{stdout.strip}' stderr: '#{stderr.strip}' child_pid: #{@child_pid.inspect} " + - "environment: #{@environment.inspect} timeout: #{timeout} user: #{@user} group: #{@group} working_dir: #{@cwd} >" - end - - private - - def parse_options(opts) - opts.each do |option, setting| - case option.to_s - when "cwd" - self.cwd = setting - when "domain" - self.domain = setting - when "password" - self.password = setting - when "user" - self.user = setting - self.with_logon = setting - when "group" - self.group = setting - when "umask" - self.umask = setting - when "timeout" - self.timeout = setting - when "returns" - self.valid_exit_codes = Array(setting) - when "live_stream" - self.live_stdout = self.live_stderr = setting - when "live_stdout" - self.live_stdout = setting - when "live_stderr" - self.live_stderr = setting - when "input" - self.input = setting - when "logger" - self.logger = setting - when "log_level" - self.log_level = setting - when "log_tag" - self.log_tag = setting - when "environment", "env" - if setting - self.environment = Hash[setting.map { |(k, v)| [k.to_s, v] }] - else - self.environment = {} - end - when "login" - self.login = setting - when "elevated" - self.elevated = setting - when "sensitive" - self.sensitive = setting - else - raise InvalidCommandOption, "option '#{option.inspect}' is not a valid option for #{self.class.name}" - end - end - - validate_options(opts) - end - - def validate_options(opts) - if login && !user - raise InvalidCommandOption, "cannot set login without specifying a user" - end - - super - end - end -end diff --git a/bundle/ruby/3.2.0/gems/mixlib-shellout-3.2.7/lib/mixlib/shellout/exceptions.rb b/bundle/ruby/3.2.0/gems/mixlib-shellout-3.2.7/lib/mixlib/shellout/exceptions.rb deleted file mode 100644 index b45a502d..00000000 --- a/bundle/ruby/3.2.0/gems/mixlib-shellout-3.2.7/lib/mixlib/shellout/exceptions.rb +++ /dev/null @@ -1,9 +0,0 @@ -module Mixlib - class ShellOut - class Error < RuntimeError; end - class ShellCommandFailed < Error; end - class CommandTimeout < Error; end - class InvalidCommandOption < Error; end - class EmptyWindowsCommand < ShellCommandFailed; end - end -end diff --git a/bundle/ruby/3.2.0/gems/mixlib-shellout-3.2.7/lib/mixlib/shellout/helper.rb b/bundle/ruby/3.2.0/gems/mixlib-shellout-3.2.7/lib/mixlib/shellout/helper.rb deleted file mode 100644 index 0c041f89..00000000 --- a/bundle/ruby/3.2.0/gems/mixlib-shellout-3.2.7/lib/mixlib/shellout/helper.rb +++ /dev/null @@ -1,197 +0,0 @@ -#-- -# Author:: Daniel DeLeo () -# Copyright:: Copyright (c) Chef Software Inc. -# License:: Apache License, Version 2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -require_relative "../shellout" -require "chef-utils" unless defined?(ChefUtils) -require "chef-utils/dsl/default_paths" -require "chef-utils/internal" - -module Mixlib - class ShellOut - module Helper - include ChefUtils::Internal - include ChefUtils::DSL::DefaultPaths - - # - # These APIs are considered public for use in ohai and chef (by cookbooks and plugins, etc) - # but are considered private/experimental for now for the direct users of mixlib-shellout. - # - # You can see an example of how to handle the "dependency injection" in the rspec unit test. - # That backend API is left deliberately undocumented for now and may not follow SemVer and may - # break at any time (at least for the rest of 2020). - # - - def shell_out(*args, **options) - options = options.dup - options = __maybe_add_timeout(self, options) - if options.empty? - shell_out_compacted(*__clean_array(*args)) - else - shell_out_compacted(*__clean_array(*args), **options) - end - end - - def shell_out!(*args, **options) - options = options.dup - options = __maybe_add_timeout(self, options) - if options.empty? - shell_out_compacted!(*__clean_array(*args)) - else - shell_out_compacted!(*__clean_array(*args), **options) - end - end - - private - - # helper sugar for resources that support passing timeouts to shell_out - # - # module method to not pollute namespaces, but that means we need self injected as an arg - # @api private - def __maybe_add_timeout(obj, options) - options = options.dup - # historically resources have not properly declared defaults on their timeouts, so a default default of 900s was enforced here - default_val = 900 - return options if options.key?(:timeout) - - # FIXME: need to nuke descendent tracker out of Chef::Provider so we can just define that class here without requiring the - # world, and then just use symbol lookup - if obj.class.ancestors.map(&:name).include?("Chef::Provider") && obj.respond_to?(:new_resource) && obj.new_resource.respond_to?(:timeout) && !options.key?(:timeout) - options[:timeout] = obj.new_resource.timeout ? obj.new_resource.timeout.to_f : default_val - end - options - end - - # helper function to mangle options when `default_env` is true - # - # @api private - def __apply_default_env(options) - options = options.dup - default_env = options.delete(:default_env) - default_env = true if default_env.nil? - if default_env - env_key = options.key?(:env) ? :env : :environment - options[env_key] = { - "LC_ALL" => __config[:internal_locale], - "LANGUAGE" => __config[:internal_locale], - "LANG" => __config[:internal_locale], - __env_path_name => default_paths, - }.update(options[env_key] || {}) - end - options - end - - # The shell_out_compacted/shell_out_compacted! APIs are private but are intended for use - # in rspec tests. They should always be used in rspec tests instead of shell_out to allow - # for less brittle rspec tests. - # - # This expectation: - # - # allow(provider).to receive(:shell_out_compacted!).with("foo", "bar", "baz") - # - # Is met by many different possible calling conventions that mean the same thing: - # - # provider.shell_out!("foo", [ "bar", nil, "baz"]) - # provider.shell_out!(["foo", nil, "bar" ], ["baz"]) - # - # Note that when setting `default_env: false` that you should just setup an expectation on - # :shell_out_compacted for `default_env: false`, rather than the expanded env settings so - # that the default_env implementation can change without breaking unit tests. - # - def shell_out_compacted(*args, **options) - options = __apply_default_env(options) - if options.empty? - __shell_out_command(*args) - else - __shell_out_command(*args, **options) - end - end - - def shell_out_compacted!(*args, **options) - options = __apply_default_env(options) - cmd = if options.empty? - __shell_out_command(*args) - else - __shell_out_command(*args, **options) - end - cmd.error! - cmd - end - - # Helper for subclasses to reject nil out of an array. It allows using the array form of - # shell_out (which avoids the need to surround arguments with quote marks to deal with shells). - # - # @param args [String] variable number of string arguments - # @return [Array] array of strings with nil and null string rejection - # - def __clean_array(*args) - args.flatten.compact.map(&:to_s) - end - - def __shell_out_command(*args, **options) - if __transport_connection - FakeShellOut.new(args, options, __transport_connection.run_command(args.join(" "))) # FIXME: train should accept run_command(*args) - else - cmd = if options.empty? - Mixlib::ShellOut.new(*args) - else - Mixlib::ShellOut.new(*args, **options) - end - cmd.live_stream ||= __io_for_live_stream - cmd.run_command - cmd - end - end - - def __io_for_live_stream - if !STDOUT.closed? && __log.trace? - STDOUT - else - nil - end - end - - def __env_path_name - if ChefUtils.windows? - "Path" - else - "PATH" - end - end - - class FakeShellOut - attr_reader :stdout, :stderr, :exitstatus, :status - - def initialize(args, options, result) - @args = args - @options = options - @stdout = result.stdout - @stderr = result.stderr - @exitstatus = result.exit_status - @status = OpenStruct.new(success?: ( exitstatus == 0 )) - end - - def error? - exitstatus != 0 - end - - def error! - raise Mixlib::ShellOut::ShellCommandFailed, "Unexpected exit status of #{exitstatus} running #{@args}" if error? - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/mixlib-shellout-3.2.7/lib/mixlib/shellout/unix.rb b/bundle/ruby/3.2.0/gems/mixlib-shellout-3.2.7/lib/mixlib/shellout/unix.rb deleted file mode 100644 index c278c32c..00000000 --- a/bundle/ruby/3.2.0/gems/mixlib-shellout-3.2.7/lib/mixlib/shellout/unix.rb +++ /dev/null @@ -1,420 +0,0 @@ -# -# Author:: Daniel DeLeo () -# Copyright:: Copyright (c) Chef Software Inc. -# License:: Apache License, Version 2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -module Mixlib - class ShellOut - module Unix - - # "1.8.7" as a frozen string. We use this with a hack that disables GC to - # avoid segfaults on Ruby 1.8.7, so we need to allocate the fewest - # objects we possibly can. - ONE_DOT_EIGHT_DOT_SEVEN = "1.8.7".freeze - - # Option validation that is unix specific - def validate_options(opts) - if opts[:elevated] - raise InvalidCommandOption, "Option `elevated` is supported for Powershell commands only" - end - end - - # Whether we're simulating a login shell - def using_login? - login && user - end - - # Helper method for sgids - def all_seconderies - ret = [] - Etc.endgrent - while ( g = Etc.getgrent ) - ret << g - end - Etc.endgrent - ret - end - - # The secondary groups that the subprocess will switch to. - # Currently valid only if login is used, and is set - # to the user's secondary groups - def sgids - return nil unless using_login? - - user_name = Etc.getpwuid(uid).name - all_seconderies.select { |g| g.mem.include?(user_name) }.map(&:gid) - end - - # The environment variables that are deduced from simulating logon - # Only valid if login is used - def logon_environment - return {} unless using_login? - - entry = Etc.getpwuid(uid) - # According to `man su`, the set fields are: - # $HOME, $SHELL, $USER, $LOGNAME, $PATH, and $IFS - # Values are copied from "shadow" package in Ubuntu 14.10 - { "HOME" => entry.dir, "SHELL" => entry.shell, "USER" => entry.name, "LOGNAME" => entry.name, "PATH" => "/sbin:/bin:/usr/sbin:/usr/bin", "IFS" => "\t\n" } - end - - # Merges the two environments for the process - def process_environment - logon_environment.merge(environment) - end - - # Run the command, writing the command's standard out and standard error - # to +stdout+ and +stderr+, and saving its exit status object to +status+ - # === Returns - # returns +self+; +stdout+, +stderr+, +status+, and +exitstatus+ will be - # populated with results of the command. - # === Raises - # * Errno::EACCES when you are not privileged to execute the command - # * Errno::ENOENT when the command is not available on the system (or not - # in the current $PATH) - # * Chef::Exceptions::CommandTimeout when the command does not complete - # within +timeout+ seconds (default: 600s). When this happens, ShellOut - # will send a TERM and then KILL to the entire process group to ensure - # that any grandchild processes are terminated. If the invocation of - # the child process spawned multiple child processes (which commonly - # happens if the command is passed as a single string to be interpreted - # by bin/sh, and bin/sh is not bash), the exit status object may not - # contain the correct exit code of the process (of course there is no - # exit code if the command is killed by SIGKILL, also). - def run_command - @child_pid = fork_subprocess - @reaped = false - - configure_parent_process_file_descriptors - - # Ruby 1.8.7 and 1.8.6 from mid 2009 try to allocate objects during GC - # when calling IO.select and IO#read. Disabling GC works around the - # segfault, but obviously it's a bad workaround. We no longer support - # 1.8.6 so we only need this hack for 1.8.7. - GC.disable if RUBY_VERSION == ONE_DOT_EIGHT_DOT_SEVEN - - # CHEF-3390: Marshall.load on Ruby < 1.8.7p369 also has a GC bug related - # to Marshall.load, so try disabling GC first. - propagate_pre_exec_failure - - @status = nil - @result = nil - @execution_time = 0 - - write_to_child_stdin - - until @status - ready_buffers = attempt_buffer_read - unless ready_buffers - @execution_time += READ_WAIT_TIME - if @execution_time >= timeout && !@result - # kill the bad proccess - reap_errant_child - # read anything it wrote when we killed it - attempt_buffer_read - # raise - raise CommandTimeout, "Command timed out after #{@execution_time.to_i}s:\n#{format_for_exception}" - end - end - - attempt_reap - end - - self - rescue Errno::ENOENT - # When ENOENT happens, we can be reasonably sure that the child process - # is going to exit quickly, so we use the blocking variant of waitpid2 - reap - raise - ensure - reap_errant_child if should_reap? - # make one more pass to get the last of the output after the - # child process dies - attempt_buffer_read - # no matter what happens, turn the GC back on, and hope whatever busted - # version of ruby we're on doesn't allocate some objects during the next - # GC run. - GC.enable - close_all_pipes - end - - private - - def set_user - if user - Process.uid = uid - Process.euid = uid - end - end - - def set_group - if group - Process.egid = gid - Process.gid = gid - end - end - - def set_secondarygroups - if sgids - Process.groups = sgids - end - end - - def set_environment - # user-set variables should override the login ones - process_environment.each do |env_var, value| - ENV[env_var] = value - end - end - - def set_umask - File.umask(umask) if umask - end - - def set_cwd - Dir.chdir(cwd) if cwd - end - - # Since we call setsid the child_pgid will be the child_pid, set to negative here - # so it can be directly used in arguments to kill, wait, etc. - def child_pgid - -@child_pid - end - - def initialize_ipc - @stdin_pipe, @stdout_pipe, @stderr_pipe, @process_status_pipe = IO.pipe, IO.pipe, IO.pipe, IO.pipe - @process_status_pipe.last.fcntl(Fcntl::F_SETFD, Fcntl::FD_CLOEXEC) - end - - def child_stdin - @stdin_pipe[1] - end - - def child_stdout - @stdout_pipe[0] - end - - def child_stderr - @stderr_pipe[0] - end - - def child_process_status - @process_status_pipe[0] - end - - def close_all_pipes - child_stdin.close unless child_stdin.closed? - child_stdout.close unless child_stdout.closed? - child_stderr.close unless child_stderr.closed? - child_process_status.close unless child_process_status.closed? - end - - # Replace stdout, and stderr with pipes to the parent, and close the - # reader side of the error marshaling side channel. - # - # If there is no input, close STDIN so when we exec, - # the new program will know it's never getting input ever. - def configure_subprocess_file_descriptors - process_status_pipe.first.close - - # HACK: for some reason, just STDIN.close isn't good enough when running - # under ruby 1.9.2, so make it good enough: - stdin_pipe.last.close - STDIN.reopen stdin_pipe.first - stdin_pipe.first.close unless input - - stdout_pipe.first.close - STDOUT.reopen stdout_pipe.last - stdout_pipe.last.close - - stderr_pipe.first.close - STDERR.reopen stderr_pipe.last - stderr_pipe.last.close - - STDOUT.sync = STDERR.sync = true - STDIN.sync = true if input - end - - def configure_parent_process_file_descriptors - # Close the sides of the pipes we don't care about - stdin_pipe.first.close - stdin_pipe.last.close unless input - stdout_pipe.last.close - stderr_pipe.last.close - process_status_pipe.last.close - # Get output as it happens rather than buffered - child_stdin.sync = true if input - child_stdout.sync = true - child_stderr.sync = true - - true - end - - # Some patch levels of ruby in wide use (in particular the ruby 1.8.6 on OSX) - # segfault when you IO.select a pipe that's reached eof. Weak sauce. - def open_pipes - @open_pipes ||= [child_stdout, child_stderr, child_process_status] - end - - # Keep this unbuffered for now - def write_to_child_stdin - return unless input - - child_stdin << input - child_stdin.close # Kick things off - end - - def attempt_buffer_read - ready = IO.select(open_pipes, nil, nil, READ_WAIT_TIME) - if ready - read_stdout_to_buffer if ready.first.include?(child_stdout) - read_stderr_to_buffer if ready.first.include?(child_stderr) - read_process_status_to_buffer if ready.first.include?(child_process_status) - end - ready - end - - def read_stdout_to_buffer - while ( chunk = child_stdout.read_nonblock(READ_SIZE) ) - @stdout << chunk - @live_stdout << chunk if @live_stdout - end - rescue Errno::EAGAIN - rescue EOFError - open_pipes.delete(child_stdout) - end - - def read_stderr_to_buffer - while ( chunk = child_stderr.read_nonblock(READ_SIZE) ) - @stderr << chunk - @live_stderr << chunk if @live_stderr - end - rescue Errno::EAGAIN - rescue EOFError - open_pipes.delete(child_stderr) - end - - def read_process_status_to_buffer - while ( chunk = child_process_status.read_nonblock(READ_SIZE) ) - @process_status << chunk - end - rescue Errno::EAGAIN - rescue EOFError - open_pipes.delete(child_process_status) - end - - def fork_subprocess - initialize_ipc - - fork do - # Child processes may themselves fork off children. A common case - # is when the command is given as a single string (instead of - # command name plus Array of arguments) and /bin/sh does not - # support the "ONESHOT" optimization (where sh -c does exec without - # forking). To support cleaning up all the children, we need to - # ensure they're in a unique process group. - # - # We use setsid here to abandon our controlling tty and get a new session - # and process group that are set to the pid of the child process. - Process.setsid - - configure_subprocess_file_descriptors - - set_secondarygroups - set_group - set_user - set_environment - set_umask - set_cwd - - begin - command.is_a?(Array) ? exec(*command, close_others: true) : exec(command, close_others: true) - - raise "forty-two" # Should never get here - rescue Exception => e - Marshal.dump(e, process_status_pipe.last) - process_status_pipe.last.flush - end - process_status_pipe.last.close unless process_status_pipe.last.closed? - exit! - end - end - - # Attempt to get a Marshaled error from the side-channel. - # If it's there, un-marshal it and raise. If it's not there, - # assume everything went well. - def propagate_pre_exec_failure - attempt_buffer_read until child_process_status.eof? - e = Marshal.load(@process_status) - raise(Exception === e ? e : "unknown failure: #{e.inspect}") - rescue ArgumentError # If we get an ArgumentError error, then the exec was successful - true - ensure - child_process_status.close - open_pipes.delete(child_process_status) - end - - def reap_errant_child - return if attempt_reap - - @terminate_reason = "Command exceeded allowed execution time, process terminated" - logger&.error("Command exceeded allowed execution time, sending TERM") - Process.kill(:TERM, child_pgid) - sleep 3 - attempt_reap - logger&.error("Command exceeded allowed execution time, sending KILL") - Process.kill(:KILL, child_pgid) - reap - - # Should not hit this but it's possible if something is calling waitall - # in a separate thread. - rescue Errno::ESRCH - nil - end - - def should_reap? - # if we fail to fork, no child pid so nothing to reap - @child_pid && !@reaped - end - - # Unconditionally reap the child process. This is used in scenarios where - # we can be confident the child will exit quickly, and has not spawned - # and grandchild processes. - def reap - results = Process.waitpid2(@child_pid) - @reaped = true - @status = results.last - rescue Errno::ECHILD - # When cleaning up timed-out processes, we might send SIGKILL to the - # whole process group after we've cleaned up the direct child. In that - # case the grandchildren will have been adopted by init so we can't - # reap them even if we wanted to (we don't). - nil - end - - # Try to reap the child process but don't block if it isn't dead yet. - def attempt_reap - results = Process.waitpid2(@child_pid, Process::WNOHANG) - if results - @reaped = true - @status = results.last - else - nil - end - end - - end - end -end diff --git a/bundle/ruby/3.2.0/gems/mixlib-shellout-3.2.7/lib/mixlib/shellout/version.rb b/bundle/ruby/3.2.0/gems/mixlib-shellout-3.2.7/lib/mixlib/shellout/version.rb deleted file mode 100644 index aa03b181..00000000 --- a/bundle/ruby/3.2.0/gems/mixlib-shellout-3.2.7/lib/mixlib/shellout/version.rb +++ /dev/null @@ -1,5 +0,0 @@ -module Mixlib - class ShellOut - VERSION = "3.2.7".freeze - end -end diff --git a/bundle/ruby/3.2.0/gems/mixlib-shellout-3.2.7/lib/mixlib/shellout/windows.rb b/bundle/ruby/3.2.0/gems/mixlib-shellout-3.2.7/lib/mixlib/shellout/windows.rb deleted file mode 100644 index 4c686676..00000000 --- a/bundle/ruby/3.2.0/gems/mixlib-shellout-3.2.7/lib/mixlib/shellout/windows.rb +++ /dev/null @@ -1,431 +0,0 @@ -# -# Author:: Daniel DeLeo () -# Author:: John Keiser () -# Author:: Ho-Sheng Hsiao () -# Copyright:: Copyright (c) Chef Software Inc. -# License:: Apache License, Version 2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -require "win32/process" -require_relative "windows/core_ext" - -module Mixlib - class ShellOut - module Windows - - include Process::Functions - include Process::Constants - - TIME_SLICE = 0.05 - - # Option validation that is windows specific - def validate_options(opts) - if opts[:user] && !opts[:password] - raise InvalidCommandOption, "You must supply a password when supplying a user in windows" - end - - if !opts[:user] && opts[:password] - raise InvalidCommandOption, "You must supply a user when supplying a password in windows" - end - - if opts[:elevated] && !opts[:user] && !opts[:password] - raise InvalidCommandOption, "`elevated` option should be passed only with `username` and `password`." - end - - if opts[:elevated] && opts[:elevated] != true && opts[:elevated] != false - raise InvalidCommandOption, "Invalid value passed for `elevated`. Please provide true/false." - end - end - - #-- - # Missing lots of features from the UNIX version, such as - # uid, etc. - def run_command - # - # Create pipes to capture stdout and stderr, - # - stdout_read, stdout_write = IO.pipe - stderr_read, stderr_write = IO.pipe - stdin_read, stdin_write = IO.pipe - open_streams = [ stdout_read, stderr_read ] - - begin - - # - # Set cwd, environment, appname, etc. - # - app_name, command_line = command_to_run(combine_args(*command)) - create_process_args = { - app_name: app_name, - command_line: command_line, - startup_info: { - stdout: stdout_write, - stderr: stderr_write, - stdin: stdin_read, - }, - environment: inherit_environment.map { |k, v| "#{k}=#{v}" }, - close_handles: false, - } - create_process_args[:cwd] = cwd if cwd - # default to local account database if domain is not specified - create_process_args[:domain] = domain.nil? ? "." : domain - create_process_args[:with_logon] = with_logon if with_logon - create_process_args[:password] = password if password - create_process_args[:elevated] = elevated if elevated - - # - # Start the process - # - process, profile, token = Process.create3(create_process_args) - logger&.debug(format_process(process, app_name, command_line, timeout)) - begin - # Start pushing data into input - stdin_write << input if input - - # Close pipe to kick things off - stdin_write.close - - # - # Wait for the process to finish, consuming output as we go - # - start_wait = Time.now - loop do - wait_status = WaitForSingleObject(process.process_handle, 0) - case wait_status - when WAIT_OBJECT_0 - # Get process exit code - exit_code = [0].pack("l") - unless GetExitCodeProcess(process.process_handle, exit_code) - raise get_last_error - end - - @status = ThingThatLooksSortOfLikeAProcessStatus.new - @status.exitstatus = exit_code.unpack("l").first - - return self - when WAIT_TIMEOUT - # Kill the process - if (Time.now - start_wait) > timeout - begin - require "wmi-lite/wmi" - wmi = WmiLite::Wmi.new - kill_process_tree(process.process_id, wmi, logger) - Process.kill(:KILL, process.process_id) - rescue SystemCallError - logger&.warn("Failed to kill timed out process #{process.process_id}") - end - - raise Mixlib::ShellOut::CommandTimeout, [ - "command timed out:", - format_for_exception, - format_process(process, app_name, command_line, timeout), - ].join("\n") - end - - consume_output(open_streams, stdout_read, stderr_read) - else - raise "Unknown response from WaitForSingleObject(#{process.process_handle}, #{timeout * 1000}): #{wait_status}" - end - - end - - ensure - CloseHandle(process.thread_handle) if process.thread_handle - CloseHandle(process.process_handle) if process.process_handle - Process.unload_user_profile(token, profile) if profile - CloseHandle(token) if token - end - - ensure - # - # Consume all remaining data from the pipes until they are closed - # - stdout_write.close - stderr_write.close - - while consume_output(open_streams, stdout_read, stderr_read) - end - end - end - - class ThingThatLooksSortOfLikeAProcessStatus - attr_accessor :exitstatus - def success? - exitstatus == 0 - end - end - - private - - def consume_output(open_streams, stdout_read, stderr_read) - return false if open_streams.length == 0 - - ready = IO.select(open_streams, nil, nil, READ_WAIT_TIME) - return true unless ready - - if ready.first.include?(stdout_read) - begin - next_chunk = stdout_read.readpartial(READ_SIZE) - @stdout << next_chunk - @live_stdout << next_chunk if @live_stdout - rescue EOFError - stdout_read.close - open_streams.delete(stdout_read) - end - end - - if ready.first.include?(stderr_read) - begin - next_chunk = stderr_read.readpartial(READ_SIZE) - @stderr << next_chunk - @live_stderr << next_chunk if @live_stderr - rescue EOFError - stderr_read.close - open_streams.delete(stderr_read) - end - end - - true - end - - # Use to support array passing semantics on windows - # - # 1. strings with whitespace or quotes in them need quotes around them. - # 2. interior quotes need to get backslash escaped (parser needs to know when it really ends). - # 3. random backlsashes in paths themselves remain untouched. - # 4. if the argument must be quoted by #1 and terminates in a sequence of backslashes then all the backlashes must themselves - # be backslash excaped (double the backslashes). - # 5. if an interior quote that must be escaped by #2 has a sequence of backslashes before it then all the backslashes must - # themselves be backslash excaped along with the backslash escape of the interior quote (double plus one backslashes). - # - # And to restate. We are constructing a string which will be parsed by the windows parser into arguments, and we want those - # arguments to match the *args array we are passed here. So call the windows parser operation A then we need to apply A^-1 to - # our args to construct the string so that applying A gives windows back our *args. - # - # And when the windows parser sees a series of backslashes followed by a double quote, it has to determine if that double quote - # is terminating or not, and how many backslashes to insert in the args. So what it does is divide it by two (rounding down) to - # get the number of backslashes to insert. Then if it is even the double quotes terminate the argument. If it is even the - # double quotes are interior double quotes (the extra backslash quotes the double quote). - # - # We construct the inverse operation so interior double quotes preceeded by N backslashes get 2N+1 backslashes in front of the quote, - # while trailing N backslashes get 2N backslashes in front of the quote that terminates the argument. - # - # see: https://blogs.msdn.microsoft.com/twistylittlepassagesallalike/2011/04/23/everyone-quotes-command-line-arguments-the-wrong-way/ - # - # @api private - # @param args [Array] array of command arguments - # @return String - def combine_args(*args) - return args[0] if args.length == 1 - - args.map do |arg| - if arg =~ /[ \t\n\v"]/ - arg = arg.gsub(/(\\*)"/, '\1\1\"') # interior quotes with N preceeding backslashes need 2N+1 backslashes - arg = arg.sub(/(\\+)$/, '\1\1') # trailing N backslashes need to become 2N backslashes - "\"#{arg}\"" - else - arg - end - end.join(" ") - end - - def command_to_run(command) - return run_under_cmd(command) if should_run_under_cmd?(command) - - candidate = candidate_executable_for_command(command) - - if candidate.length == 0 - raise Mixlib::ShellOut::EmptyWindowsCommand, "could not parse script/executable out of command: `#{command}`" - end - - # Check if the exe exists directly. Otherwise, search PATH. - exe = which(candidate) - if exe_needs_cmd?(exe) - run_under_cmd(command) - else - [ exe, command ] - end - end - - # Batch files MUST use cmd; and if we couldn't find the command we're looking for, - # we assume it must be a cmd builtin. - def exe_needs_cmd?(exe) - !exe || exe =~ /\.bat"?$|\.cmd"?$/i - end - - # cmd does not parse multiple quotes well unless the whole thing is wrapped up in quotes. - # https://github.com/chef/mixlib-shellout/pull/2#issuecomment-4837859 - # http://ss64.com/nt/syntax-esc.html - def run_under_cmd(command) - [ ENV["COMSPEC"], "cmd /c \"#{command}\"" ] - end - - # FIXME: this extracts ARGV[0] but is it correct? - def candidate_executable_for_command(command) - if command =~ /^\s*"(.*?)"/ || command =~ /^\s*([^\s]+)/ - # If we have quotes, do an exact match, else pick the first word ignoring the leading spaces - $1 - else - "" - end - end - - def inherit_environment - result = {} - ENV.each_pair do |k, v| - result[k] = v - end - - environment.each_pair do |k, v| - if v.nil? - result.delete(k) - else - result[k] = v - end - end - result - end - - # api: semi-private - # If there are special characters parsable by cmd.exe (such as file redirection), then - # this method should return true. - # - # This parser is based on - # https://github.com/ruby/ruby/blob/9073db5cb1d3173aff62be5b48d00f0fb2890991/win32/win32.c#L1437 - def should_run_under_cmd?(command) - return true if command =~ /^@/ - - quote = nil - env = false - env_first_char = false - - command.dup.each_char do |c| - case c - when "'", '"' - if !quote - quote = c - elsif quote == c - quote = nil - end - next - when ">", "<", "|", "&", "\n" - return true unless quote - when "%" - return true if env - - env = env_first_char = true - next - else - next unless env - - if env_first_char - env_first_char = false - (env = false) && next if c !~ /[A-Za-z_]/ - end - env = false if c !~ /[A-Za-z1-9_]/ - end - end - false - end - - # FIXME: reduce code duplication with chef/chef - def which(cmd) - exts = ENV["PATHEXT"] ? ENV["PATHEXT"].split(";") + [""] : [""] - # windows always searches '.' first - exts.each do |ext| - filename = "#{cmd}#{ext}" - return filename if File.executable?(filename) && !File.directory?(filename) - end - # only search through the path if the Filename does not contain separators - if File.basename(cmd) == cmd - paths = ENV["PATH"].split(File::PATH_SEPARATOR) - paths.each do |path| - exts.each do |ext| - filename = File.join(path, "#{cmd}#{ext}") - return filename if File.executable?(filename) && !File.directory?(filename) - end - end - end - false - end - - def system_required_processes - [ - "System Idle Process", - "System", - "spoolsv.exe", - "lsass.exe", - "csrss.exe", - "smss.exe", - "svchost.exe", - ] - end - - def unsafe_process?(name, logger) - return false unless system_required_processes.include? name - - logger.debug( - "A request to kill a critical system process - #{name} - was received and skipped." - ) - true - end - - # recursively kills all child processes of given pid - # calls itself querying for children child procs until - # none remain. Important that a single WmiLite instance - # is passed in since each creates its own WMI rpc process - def kill_process_tree(pid, wmi, logger) - wmi.query("select * from Win32_Process where ParentProcessID=#{pid}").each do |instance| - next if unsafe_process?(instance.wmi_ole_object.name, logger) - - child_pid = instance.wmi_ole_object.processid - kill_process_tree(child_pid, wmi, logger) - kill_process(instance, logger) - end - end - - def kill_process(instance, logger) - child_pid = instance.wmi_ole_object.processid - logger&.debug([ - "killing child process #{child_pid}::", - "#{instance.wmi_ole_object.Name} of parent #{pid}", - ].join) - Process.kill(:KILL, instance.wmi_ole_object.processid) - rescue SystemCallError - logger&.debug([ - "Failed to kill child process #{child_pid}::", - "#{instance.wmi_ole_object.Name} of parent #{pid}", - ].join) - end - - def format_process(process, app_name, command_line, timeout) - msg = [] - msg << "ProcessId: #{process.process_id}" - msg << "app_name: #{app_name}" - msg << "command_line: #{command_line}" - msg << "timeout: #{timeout}" - msg.join("\n") - end - - # DEPRECATED do not use - class Utils - include Mixlib::ShellOut::Windows - def self.should_run_under_cmd?(cmd) - Mixlib::ShellOut::Windows::Utils.new.send(:should_run_under_cmd?, cmd) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/mixlib-shellout-3.2.7/lib/mixlib/shellout/windows/core_ext.rb b/bundle/ruby/3.2.0/gems/mixlib-shellout-3.2.7/lib/mixlib/shellout/windows/core_ext.rb deleted file mode 100644 index 70b9db45..00000000 --- a/bundle/ruby/3.2.0/gems/mixlib-shellout-3.2.7/lib/mixlib/shellout/windows/core_ext.rb +++ /dev/null @@ -1,629 +0,0 @@ -# -# Author:: Daniel DeLeo () -# Author:: John Keiser () -# Copyright:: Copyright (c) Chef Software Inc. -# License:: Apache License, Version 2.0 -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -require "win32/process" -require "ffi/win32/extensions" - -# Add new constants for Logon -module Process::Constants - - LOGON32_LOGON_INTERACTIVE = 0x00000002 - LOGON32_LOGON_BATCH = 0x00000004 - LOGON32_PROVIDER_DEFAULT = 0x00000000 - UOI_NAME = 0x00000002 - - WAIT_OBJECT_0 = 0 - WAIT_TIMEOUT = 0x102 - WAIT_ABANDONED = 128 - WAIT_ABANDONED_0 = WAIT_ABANDONED - WAIT_FAILED = 0xFFFFFFFF - - ERROR_PRIVILEGE_NOT_HELD = 1314 - ERROR_LOGON_TYPE_NOT_GRANTED = 0x569 - - # Only documented in Userenv.h ??? - # - ZERO (type Local) is assumed, no docs found - WIN32_PROFILETYPE_LOCAL = 0x00 - WIN32_PROFILETYPE_PT_TEMPORARY = 0x01 - WIN32_PROFILETYPE_PT_ROAMING = 0x02 - WIN32_PROFILETYPE_PT_MANDATORY = 0x04 - WIN32_PROFILETYPE_PT_ROAMING_PREEXISTING = 0x08 - - # The environment block list ends with two nulls (\0\0). - ENVIRONMENT_BLOCK_ENDS = "\0\0".freeze -end - -# Structs required for data handling -module Process::Structs - - class PROFILEINFO < FFI::Struct - layout( - :dwSize, :dword, - :dwFlags, :dword, - :lpUserName, :pointer, - :lpProfilePath, :pointer, - :lpDefaultPath, :pointer, - :lpServerName, :pointer, - :lpPolicyPath, :pointer, - :hProfile, :handle - ) - end - -end - -# Define the functions needed to check with Service windows station -module Process::Functions - ffi_lib :userenv - - attach_pfunc :GetProfileType, - [:pointer], :bool - - attach_pfunc :LoadUserProfileW, - %i{handle pointer}, :bool - - attach_pfunc :UnloadUserProfile, - %i{handle handle}, :bool - - attach_pfunc :CreateEnvironmentBlock, - %i{pointer ulong bool}, :bool - - attach_pfunc :DestroyEnvironmentBlock, - %i{pointer}, :bool - - ffi_lib :advapi32 - - attach_pfunc :LogonUserW, - %i{buffer_in buffer_in buffer_in ulong ulong pointer}, :bool - - attach_pfunc :CreateProcessAsUserW, - %i{ulong buffer_in buffer_inout pointer pointer int - ulong buffer_in buffer_in pointer pointer}, :bool - - ffi_lib :user32 - - attach_pfunc :GetProcessWindowStation, - [], :ulong - - attach_pfunc :GetUserObjectInformationA, - %i{ulong uint buffer_out ulong pointer}, :bool -end - -# Override Process.create to check for running in the Service window station and doing -# a full logon with LogonUser, instead of a CreateProcessWithLogon -# Cloned from https://github.com/djberg96/win32-process/blob/ffi/lib/win32/process.rb -# as of 2015-10-15 from commit cc066e5df25048f9806a610f54bf5f7f253e86f7 -module Process - - class UnsupportedFeature < StandardError; end - - # Explicitly reopen singleton class so that class/constant declarations from - # extensions are visible in Modules.nesting. - class << self - - def create(args) - create3(args).first - end - - def create3(args) - unless args.is_a?(Hash) - raise TypeError, "hash keyword arguments expected" - end - - valid_keys = %w{ - app_name command_line inherit creation_flags cwd environment - startup_info thread_inherit process_inherit close_handles with_logon - domain password elevated - } - - valid_si_keys = %w{ - startf_flags desktop title x y x_size y_size x_count_chars - y_count_chars fill_attribute sw_flags stdin stdout stderr - } - - # Set default values - hash = { - "app_name" => nil, - "creation_flags" => 0, - "close_handles" => true, - } - - # Validate the keys, and convert symbols and case to lowercase strings. - args.each do |key, val| - key = key.to_s.downcase - unless valid_keys.include?(key) - raise ArgumentError, "invalid key '#{key}'" - end - - hash[key] = val - end - - si_hash = {} - - # If the startup_info key is present, validate its subkeys - hash["startup_info"]&.each do |key, val| - key = key.to_s.downcase - unless valid_si_keys.include?(key) - raise ArgumentError, "invalid startup_info key '#{key}'" - end - - si_hash[key] = val - end - - # The +command_line+ key is mandatory unless the +app_name+ key - # is specified. - unless hash["command_line"] - if hash["app_name"] - hash["command_line"] = hash["app_name"] - hash["app_name"] = nil - else - raise ArgumentError, "command_line or app_name must be specified" - end - end - - env = nil - - # Retrieve the environment variables for the specified user. - if hash["with_logon"] - logon, passwd, domain = format_creds_from_hash(hash) - logon_type = hash["elevated"] ? LOGON32_LOGON_BATCH : LOGON32_LOGON_INTERACTIVE - token = logon_user(logon, domain, passwd, logon_type) - logon_ptr = FFI::MemoryPointer.from_string(logon) - profile = PROFILEINFO.new.tap do |dat| - dat[:dwSize] = dat.size - dat[:dwFlags] = 1 - dat[:lpUserName] = logon_ptr - end - - load_user_profile(token, profile.pointer) - env_list = retrieve_environment_variables(token) - end - - # The env string should be passed as a string of ';' separated paths. - if hash["environment"] - env = env_list.nil? ? hash["environment"] : merge_env_variables(env_list, hash["environment"]) - - unless env.respond_to?(:join) - env = hash["environment"].split(File::PATH_SEPARATOR) - end - - env = env.map { |e| e + 0.chr }.join("") + 0.chr - env.to_wide_string! if hash["with_logon"] - end - - # Process SECURITY_ATTRIBUTE structure - process_security = nil - - if hash["process_inherit"] - process_security = SECURITY_ATTRIBUTES.new - process_security[:nLength] = 12 - process_security[:bInheritHandle] = 1 - end - - # Thread SECURITY_ATTRIBUTE structure - thread_security = nil - - if hash["thread_inherit"] - thread_security = SECURITY_ATTRIBUTES.new - thread_security[:nLength] = 12 - thread_security[:bInheritHandle] = 1 - end - - # Automatically handle stdin, stdout and stderr as either IO objects - # or file descriptors. This won't work for StringIO, however. It also - # will not work on JRuby because of the way it handles internal file - # descriptors. - # - %w{stdin stdout stderr}.each do |io| - if si_hash[io] - if si_hash[io].respond_to?(:fileno) - handle = get_osfhandle(si_hash[io].fileno) - else - handle = get_osfhandle(si_hash[io]) - end - - if handle == INVALID_HANDLE_VALUE - ptr = FFI::MemoryPointer.new(:int) - - if windows_version >= 6 && get_errno(ptr) == 0 - errno = ptr.read_int - else - errno = FFI.errno - end - - raise SystemCallError.new("get_osfhandle", errno) - end - - # Most implementations of Ruby on Windows create inheritable - # handles by default, but some do not. RF bug #26988. - bool = SetHandleInformation( - handle, - HANDLE_FLAG_INHERIT, - HANDLE_FLAG_INHERIT - ) - - raise SystemCallError.new("SetHandleInformation", FFI.errno) unless bool - - si_hash[io] = handle - si_hash["startf_flags"] ||= 0 - si_hash["startf_flags"] |= STARTF_USESTDHANDLES - hash["inherit"] = true - end - end - - procinfo = PROCESS_INFORMATION.new - startinfo = STARTUPINFO.new - - unless si_hash.empty? - startinfo[:cb] = startinfo.size - startinfo[:lpDesktop] = si_hash["desktop"] if si_hash["desktop"] - startinfo[:lpTitle] = si_hash["title"] if si_hash["title"] - startinfo[:dwX] = si_hash["x"] if si_hash["x"] - startinfo[:dwY] = si_hash["y"] if si_hash["y"] - startinfo[:dwXSize] = si_hash["x_size"] if si_hash["x_size"] - startinfo[:dwYSize] = si_hash["y_size"] if si_hash["y_size"] - startinfo[:dwXCountChars] = si_hash["x_count_chars"] if si_hash["x_count_chars"] - startinfo[:dwYCountChars] = si_hash["y_count_chars"] if si_hash["y_count_chars"] - startinfo[:dwFillAttribute] = si_hash["fill_attribute"] if si_hash["fill_attribute"] - startinfo[:dwFlags] = si_hash["startf_flags"] if si_hash["startf_flags"] - startinfo[:wShowWindow] = si_hash["sw_flags"] if si_hash["sw_flags"] - startinfo[:cbReserved2] = 0 - startinfo[:hStdInput] = si_hash["stdin"] if si_hash["stdin"] - startinfo[:hStdOutput] = si_hash["stdout"] if si_hash["stdout"] - startinfo[:hStdError] = si_hash["stderr"] if si_hash["stderr"] - end - - app = nil - cmd = nil - - # Convert strings to wide character strings if present - if hash["app_name"] - app = hash["app_name"].to_wide_string - end - - if hash["command_line"] - cmd = hash["command_line"].to_wide_string - end - - if hash["cwd"] - cwd = hash["cwd"].to_wide_string - end - - inherit = hash["inherit"] ? 1 : 0 - - if hash["with_logon"] - - logon, passwd, domain = format_creds_from_hash(hash) - - hash["creation_flags"] |= CREATE_UNICODE_ENVIRONMENT - - winsta_name = get_windows_station_name - - # If running in the service windows station must do a log on to get - # to the interactive desktop. The running process user account must have - # the 'Replace a process level token' permission. This is necessary as - # the logon (which happens with CreateProcessWithLogon) must have an - # interactive windows station to attach to, which is created with the - # LogonUser call with the LOGON32_LOGON_INTERACTIVE flag. - # - # User Access Control (UAC) only applies to interactive logons, so we - # can simulate running a command 'elevated' by running it under a separate - # logon as a batch process. - if hash["elevated"] || winsta_name =~ /^Service-0x0-.*$/i - - logon_type = hash["elevated"] ? LOGON32_LOGON_BATCH : LOGON32_LOGON_INTERACTIVE - token = logon_user(logon, domain, passwd, logon_type) - logon_ptr = FFI::MemoryPointer.from_string(logon) - profile = PROFILEINFO.new.tap do |dat| - dat[:dwSize] = dat.size - dat[:dwFlags] = 1 - dat[:lpUserName] = logon_ptr - end - - if logon_has_roaming_profile? - msg = %w{ - Mixlib does not currently support executing commands as users - configured with Roaming Profiles. [%s] - }.join(" ") % logon.encode("UTF-8").unpack("A*") - raise UnsupportedFeature.new(msg) - end - - load_user_profile(token, profile.pointer) - - create_process_as_user(token, app, cmd, process_security, - thread_security, inherit, hash["creation_flags"], env, - cwd, startinfo, procinfo) - - else - - create_process_with_logon(logon, domain, passwd, LOGON_WITH_PROFILE, - app, cmd, hash["creation_flags"], env, cwd, startinfo, procinfo) - - end - - else - - create_process(app, cmd, process_security, thread_security, inherit, - hash["creation_flags"], env, cwd, startinfo, procinfo) - - end - - # Automatically close the process and thread handles in the - # PROCESS_INFORMATION struct unless explicitly told not to. - if hash["close_handles"] - CloseHandle(procinfo[:hProcess]) - CloseHandle(procinfo[:hThread]) - # Clear these fields so callers don't attempt to close the handle - # which can result in the wrong handle being closed or an - # exception in some circumstances. - procinfo[:hProcess] = 0 - procinfo[:hThread] = 0 - end - - process = ProcessInfo.new( - procinfo[:hProcess], - procinfo[:hThread], - procinfo[:dwProcessId], - procinfo[:dwThreadId] - ) - - [ process, profile, token ] - end - - # See Process::Constants::WIN32_PROFILETYPE - def logon_has_roaming_profile? - get_profile_type >= 2 - end - - def get_profile_type - ptr = FFI::MemoryPointer.new(:uint) - unless GetProfileType(ptr) - raise SystemCallError.new("GetProfileType", FFI.errno) - end - - ptr.read_uint - end - - def load_user_profile(token, profile_ptr) - unless LoadUserProfileW(token, profile_ptr) - raise SystemCallError.new("LoadUserProfileW", FFI.errno) - end - - true - end - - def unload_user_profile(token, profile) - if profile[:hProfile] == 0 - warn "\n\nWARNING: Profile not loaded\n" - else - unless UnloadUserProfile(token, profile[:hProfile]) - raise SystemCallError.new("UnloadUserProfile", FFI.errno) - end - end - true - end - - # Retrieves the environment variables for the specified user. - # - # @param env_pointer [Pointer] The environment block is an array of null-terminated Unicode strings. - # @param token [Integer] User token handle. - # @return [Boolean] true if successfully retrieves the environment variables for the specified user. - # - def create_environment_block(env_pointer, token) - unless CreateEnvironmentBlock(env_pointer, token, false) - raise SystemCallError.new("CreateEnvironmentBlock", FFI.errno) - end - - true - end - - # Frees environment variables created by the CreateEnvironmentBlock function. - # - # @param env_pointer [Pointer] The environment block is an array of null-terminated Unicode strings. - # @return [Boolean] true if successfully frees environment variables created by the CreateEnvironmentBlock function. - # - def destroy_environment_block(env_pointer) - unless DestroyEnvironmentBlock(env_pointer) - raise SystemCallError.new("DestroyEnvironmentBlock", FFI.errno) - end - - true - end - - def create_process_as_user(token, app, cmd, process_security, - thread_security, inherit, creation_flags, env, cwd, startinfo, procinfo) - - bool = CreateProcessAsUserW( - token, # User token handle - app, # App name - cmd, # Command line - process_security, # Process attributes - thread_security, # Thread attributes - inherit, # Inherit handles - creation_flags, # Creation Flags - env, # Environment - cwd, # Working directory - startinfo, # Startup Info - procinfo # Process Info - ) - - unless bool - msg = case FFI.errno - when ERROR_PRIVILEGE_NOT_HELD - [ - %{CreateProcessAsUserW (User '%s' must hold the 'Replace a process}, - %{level token' and 'Adjust Memory Quotas for a process' permissions.}, - %{Logoff the user after adding this right to make it effective.)}, - ].join(" ") % ::ENV["USERNAME"] - else - "CreateProcessAsUserW failed." - end - raise SystemCallError.new(msg, FFI.errno) - end - end - - def create_process_with_logon(logon, domain, passwd, logon_flags, app, cmd, - creation_flags, env, cwd, startinfo, procinfo) - - bool = CreateProcessWithLogonW( - logon, # User - domain, # Domain - passwd, # Password - logon_flags, # Logon flags - app, # App name - cmd, # Command line - creation_flags, # Creation flags - env, # Environment - cwd, # Working directory - startinfo, # Startup Info - procinfo # Process Info - ) - - unless bool - raise SystemCallError.new("CreateProcessWithLogonW", FFI.errno) - end - end - - def create_process(app, cmd, process_security, thread_security, inherit, - creation_flags, env, cwd, startinfo, procinfo) - - bool = CreateProcessW( - app, # App name - cmd, # Command line - process_security, # Process attributes - thread_security, # Thread attributes - inherit, # Inherit handles? - creation_flags, # Creation flags - env, # Environment - cwd, # Working directory - startinfo, # Startup Info - procinfo # Process Info - ) - - unless bool - raise SystemCallError.new("CreateProcessW", FFI.errno) - end - end - - def logon_user(user, domain, passwd, type, provider = LOGON32_PROVIDER_DEFAULT) - token = FFI::MemoryPointer.new(:ulong) - - bool = LogonUserW( - user, # User - domain, # Domain - passwd, # Password - type, # Logon Type - provider, # Logon Provider - token # User token handle - ) - - unless bool - if (FFI.errno == ERROR_LOGON_TYPE_NOT_GRANTED) && (type == LOGON32_LOGON_BATCH) - user_utf8 = user.encode( "UTF-8", invalid: :replace, undef: :replace, replace: "" ).delete("\0") - raise SystemCallError.new("LogonUserW (User '#{user_utf8}' must hold 'Log on as a batch job' permissions.)", FFI.errno) - else - raise SystemCallError.new("LogonUserW", FFI.errno) - end - end - - token.read_ulong - end - - def get_windows_station_name - winsta_name = FFI::MemoryPointer.new(:char, 256) - return_size = FFI::MemoryPointer.new(:ulong) - - bool = GetUserObjectInformationA( - GetProcessWindowStation(), # Window station handle - UOI_NAME, # Information to get - winsta_name, # Buffer to receive information - winsta_name.size, # Size of buffer - return_size # Size filled into buffer - ) - - unless bool - raise SystemCallError.new("GetUserObjectInformationA", FFI.errno) - end - - winsta_name.read_string(return_size.read_ulong) - end - - def format_creds_from_hash(hash) - logon = hash["with_logon"].to_wide_string - - if hash["password"] - passwd = hash["password"].to_wide_string - else - raise ArgumentError, "password must be specified if with_logon is used" - end - - if hash["domain"] - domain = hash["domain"].to_wide_string - end - - [ logon, passwd, domain ] - end - - # Retrieves the environment variables for the specified user. - # - # @param token [Integer] User token handle. - # @return env_list [Array] Environment variables of specified user. - # - def retrieve_environment_variables(token) - env_list = [] - env_pointer = FFI::MemoryPointer.new(:pointer) - create_environment_block(env_pointer, token) - str_ptr = env_pointer.read_pointer - offset = 0 - loop do - new_str_pointer = str_ptr + offset - break if new_str_pointer.read_string(2) == ENVIRONMENT_BLOCK_ENDS - - environment = new_str_pointer.read_wstring - env_list << environment - offset = offset + environment.length * 2 + 2 - end - - # To free the buffer when we have finished with the environment block - destroy_environment_block(str_ptr) - env_list - end - - # Merge environment variables of specified user and current environment variables. - # - # @param fetched_env [Array] environment variables of specified user. - # @param current_env [Array] current environment variables. - # @return [Array] Merged environment variables. - # - def merge_env_variables(fetched_env, current_env) - env_hash_1 = environment_list_to_hash(fetched_env) - env_hash_2 = environment_list_to_hash(current_env) - merged_env = env_hash_2.merge(env_hash_1) - merged_env.map { |k, v| "#{k}=#{v}" } - end - - # Convert an array to a hash. - # - # @param env_var [Array] Environment variables. - # @return [Hash] Converted an array to hash. - # - def environment_list_to_hash(env_var) - Hash[ env_var.map { |pair| pair.split("=", 2) } ] - end - end -end diff --git a/bundle/ruby/3.2.0/gems/nap-1.1.0/LICENSE b/bundle/ruby/3.2.0/gems/nap-1.1.0/LICENSE deleted file mode 100644 index 97c1a79f..00000000 --- a/bundle/ruby/3.2.0/gems/nap-1.1.0/LICENSE +++ /dev/null @@ -1,18 +0,0 @@ -Copyright (c) 2015 Manfred Stienstra, Fingertips - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/bundle/ruby/3.2.0/gems/nap-1.1.0/README.md b/bundle/ruby/3.2.0/gems/nap-1.1.0/README.md deleted file mode 100644 index af0a26ac..00000000 --- a/bundle/ruby/3.2.0/gems/nap-1.1.0/README.md +++ /dev/null @@ -1,80 +0,0 @@ -# Nap - -Nap is an extremely simple REST client for Ruby. It was built to quickly -fire off HTTP requests without having to research net/http internals. - -## Example - -```ruby -gem 'nap' -require 'rest' -require 'json' - -response = REST.get('http://twitter.com/statuses/friends_timeline.json', {}, - {:username => '_evan', :password => 'buttonscat'} -) -if response.ok? - timeline = JSON.parse(response.body) - puts(timeline.map do |item| - "#{item['user']['name']}\n\n#{item['text']}" - end.join("\n\n--\n\n")) -elsif response.forbidden? - puts "Are you sure you're `_evan' and your password is the name of your cat?" -else - puts "Something went wrong (#{response.status_code})" - puts response.body -end -``` - -## Advanced request configuration - -If you need more control over the Net::HTTP request you can pass a block to all of the request methods. -```ruby -response = REST.get('http://google.com') do |http_request| - http_request.open_timeout = 15 - http_request.set_debug_output(STDERR) -end -``` - -## Proxy support - -To enable the proxy settings in Nap, you can either use the HTTP\_PROXY or http\_proxy enviroment variable. - - $ env HTTP_PROXY=http://rob:secret@192.167.1.254:665 ruby app.rb - -## Exceptions - -Nap defines one top-level and three main error types which allow you to catch a whole range of exceptions thrown by underlying protocol implementations. - -* *REST::Error*: Any type of error -* *REST::Error::Timeout*: Read timeouts of various sorts -* *REST::Error::Connection*: Connection errors caused by dropped sockets -* *REST::Error::Protocol*: Request failed because of a problem when handling the HTTP request or response - -In the most basic case you can rescue from the top-level type to warn about fetching problems. - -```ruby -begin - REST.get('http://example.com/pigeons/12') -rescue REST::Error - puts "[!] Failed to fetch Pigeon number 12." -end -``` - -## Contributions - -Nap couldn't be the shining beacon in the eternal darkness without help from: - -* Eloy Durán -* Joshua Sierles -* Thijs van der Vossen - -For all other great human beings, please visit the GitHub contributors page. - -## Changes from 1.0.0 to 1.1.0 - -* REST::Request now allows all HTTP verbs to send a body entity. - -## Changes from 0.8.0 to 1.0.0 - -* Removed REST::DisconnectedError, please use REST::Error::Connection instead. diff --git a/bundle/ruby/3.2.0/gems/nap-1.1.0/lib/rest.rb b/bundle/ruby/3.2.0/gems/nap-1.1.0/lib/rest.rb deleted file mode 100644 index 5f4e36f0..00000000 --- a/bundle/ruby/3.2.0/gems/nap-1.1.0/lib/rest.rb +++ /dev/null @@ -1,106 +0,0 @@ -require 'uri' - -# REST is basically a convenience wrapper around Net::HTTP. It defines a simple and consistant API -# for doing REST-style HTTP calls. -# -# In addition it provides wrappers for the many error classes that can be raised while making -# requests. See REST::Error for a complete discussion of options. -module REST - # Library version - VERSION = '1.1.0' - - # Performs a GET on a resource. See REST::Request.new for a complete discussion of options. - # - # response = REST.get('http://example.com/pigeons/12', - # {'Accept' => 'text/plain'}, - # {:username => 'admin', :password => 'secret'} - # ) - # if response.ok? - # puts response.body - # else - # puts "Couldn't fetch your pigeon (#{response.status_code})" - # end - def self.get(uri, headers={}, options={}, &configure_block) - REST::Request.perform(:get, URI.parse(uri), nil, headers, options, &configure_block) - end - - # Performs a HEAD on a resource. See REST::Request.new for a complete discussion of options. - # - # response = REST.head('http://example.com/pigeons/12') - # if response.ok? - # puts "Your pigeon exists!" - # elsif response.found? - # puts "Someone moved your pigeon!" - # else - # puts "Couldn't fetch your pigeon (#{response.status_code})" - # end - def self.head(uri, headers={}, options={}, &configure_block) - REST::Request.perform(:head, URI.parse(uri), nil, headers, options, &configure_block) - end - - # Performs a DELETE on a resource. See REST::Request.new for a complete discussion of options. - # - # response = REST.delete('http://example.com/pigeons/12') - # if response.ok? - # puts "Your pigeon died ): )" - # elsif response.found? - # puts "Someone moved your pigeon!" - # else - # puts "Couldn't delete your pigeon (#{response.status_code})" - # end - def self.delete(uri, headers={}, options={}, &configure_block) - REST::Request.perform(:delete, URI.parse(uri), nil, headers, options, &configure_block) - end - - # Performs a PATCH on a resource. See REST::Request.new for a complete discussion of options. - # - # response = REST.patch('http://example.com/pigeons/12', - # {'Name' => 'Homer'}.to_xml, - # {'Accept' => 'application/xml, */*', 'Content-Type' => 'application/xml'} - # ) - # if response.ok? - # puts "Your pigeon was renamed to 'Homer'!" - # else - # puts "Couldn't rename your pigeon (#{response.status_code})" - # puts XML.parse(response.body).reason - # end - def self.patch(uri, body, headers={}, options={}, &configure_block) - REST::Request.perform(:patch, URI.parse(uri), body, headers, options, &configure_block) - end - - # Performs a PUT on a resource. See REST::Request.new for a complete discussion of options. - # - # response = REST.put('http://example.com/pigeons/12', - # {'Name' => 'Homer'}.to_xml, - # {'Accept' => 'application/xml, */*', 'Content-Type' => 'application/xml'} - # ) - # if response.ok? - # puts "Your pigeon 'Bowser' was replaced by 'Homer'!" - # else - # puts "Couldn't replace your pigeon (#{response.status_code})" - # puts XML.parse(response.body).reason - # end - def self.put(uri, body, headers={}, options={}, &configure_block) - REST::Request.perform(:put, URI.parse(uri), body, headers, options, &configure_block) - end - - # Performs a POST on a resource. See REST::Request.new for a complete discussion of options. - # - # response = REST.post('http://example.com/pigeons', - # {'Name' => 'Bowser'}.to_xml, - # {'Accept' => 'application/xml, */*', 'Content-Type' => 'application/xml'} - # ) - # if response.created? - # puts "Created a new pigeon called 'Bowser'" - # else - # puts "Couldn't create your pigeon (#{response.status_code})" - # puts XML.parse(response.body).reason - # end - def self.post(uri, body, headers={}, options={}, &configure_block) - REST::Request.perform(:post, URI.parse(uri), body, headers, options, &configure_block) - end -end - -require File.expand_path('../rest/error', __FILE__) -require File.expand_path('../rest/request', __FILE__) -require File.expand_path('../rest/response', __FILE__) diff --git a/bundle/ruby/3.2.0/gems/nap-1.1.0/lib/rest/error.rb b/bundle/ruby/3.2.0/gems/nap-1.1.0/lib/rest/error.rb deleted file mode 100644 index 3eedce30..00000000 --- a/bundle/ruby/3.2.0/gems/nap-1.1.0/lib/rest/error.rb +++ /dev/null @@ -1,92 +0,0 @@ -require 'net/http' - -module REST - # This constant can be used to rescue any of the known `Timeout`, `Connection`, and `Protocol` - # error classes. - # - # For instance, to rescue _any_ type of error that could be raise while making a request: - # - # begin - # REST.get('http://example.com/pigeons/12') - # rescue REST::Error => e - # p e # => Timeout::Error - # end - # - # If you want to rescue only `Timeout` related error classes, however, you can limit the scope: - # - # begin - # REST.get('http://example.com/pigeons/12') - # rescue REST::Error::Timeout => e - # p e # => Timeout::Error - # end - module Error - # This constant can be used to rescue only the known `Timeout` error classes. - module Timeout - def self.class_names - %w( - Errno::ETIMEDOUT - Timeout::Error - Net::OpenTimeout - Net::ReadTimeout - ) - end - end - - # This constant can be used to rescue only the known `Connection` error classes. - module Connection - def self.class_names - %w( - EOFError - Errno::ECONNABORTED - Errno::ECONNREFUSED - Errno::ECONNRESET - Errno::EHOSTDOWN - Errno::EHOSTUNREACH - Errno::EINVAL - Errno::ENETUNREACH - SocketError - OpenSSL::SSL::SSLError - ) - end - end - - # This constant can be used to rescue only the known `Protocol` error classes. - module Protocol - def self.class_names - %w( - Net::HTTPBadResponse - Net::HTTPHeaderSyntaxError - Net::ProtocolError - Zlib::GzipFile::Error - ) - end - end - - private - - [Timeout, Connection, Protocol].each do |mod| - mod.send(:include, Error) - - # Collect all the error classes that exist at runtime. - def mod.classes - class_names.map do |name| - begin - # MRI < 2 does not support full constant paths for `Object.const_get`. - name.split('::').inject(Object) do |current, const| - current.const_get(const) - end - rescue NameError - nil - end - end.compact - end - - # Include the `mod` into the classes. - def mod.extend_classes! - classes.each { |klass| klass.send(:include, self) } - end - - mod.extend_classes! - end - end -end diff --git a/bundle/ruby/3.2.0/gems/nap-1.1.0/lib/rest/request.rb b/bundle/ruby/3.2.0/gems/nap-1.1.0/lib/rest/request.rb deleted file mode 100644 index d9fb0865..00000000 --- a/bundle/ruby/3.2.0/gems/nap-1.1.0/lib/rest/request.rb +++ /dev/null @@ -1,196 +0,0 @@ -require 'uri' -require 'net/http' - -module REST - # Request holds a HTTP request - class Request - attr_accessor :verb, :url, :body, :headers, :options, :request - - # * verb: The verb to use in the request, either :get, :head, :patch, :put, or :post - # * url: The URL to send the request to, must be a URI instance - # * body: The body to use in the request - # * headers: A hash of headers to add to the request - # * options: A hash of additional options - # * username: Username to use for basic authentication - # * password: Password to use for basic authentication - # * tls_verify/verify_ssl: Verify the server certificate against known CA's - # * tls_ca_file: Use a specific file for CA certificates instead of the built-in one - # this only works when :tls_verify is also set. - # * tls_key_and_certificate_file: The client key and certificate file to use for this - # request - # * tls_certificate: The client certficate to use for this request - # * tls_key: The client private key to use for this request - # * configure_block: An optional block that yields the underlying Net::HTTP - # request object allowing for more fine-grained configuration - # - # == Examples - # - # request = REST::Request.new(:get, URI.parse('http://example.com/pigeons/1')) - # - # request = REST::Request.new(:head, URI.parse('http://example.com/pigeons/1')) - # - # request = REST::Request.new(:post, - # URI.parse('http://example.com/pigeons'), - # {'name' => 'Homr'}.to_json, - # {'Accept' => 'application/json, */*', 'Content-Type' => 'application/json; charset=utf-8'} - # ) - # - # # Pass a block to configure the underlying +Net::HTTP+ request. - # request = REST::Request.new(:get, URI.parse('http://example.com/pigeons/largest')) do |http_request| - # http_request.open_timeout = 15 # seconds - # end - # - # == Authentication example - # - # request = REST::Request.new(:put, - # URI.parse('http://example.com/pigeons/1'), - # {'name' => 'Homer'}.to_json, - # {'Accept' => 'application/json, */*', 'Content-Type' => 'application/json; charset=utf-8'}, - # {:username => 'Admin', :password => 'secret'} - # ) - # - # == TLS / SSL examples - # - # # Use a client key and certificate - # request = REST::Request.new(:get, URI.parse('https://example.com/pigeons/1'), nil, {}, { - # :tls_key_and_certificate_file => '/home/alice/keys/example.pem' - # }) - # - # # Use a client certificate and key from a specific location - # key_and_certificate = File.read('/home/alice/keys/example.pem') - # request = REST::Request.new(:get, URI.parse('https://example.com/pigeons/1'), nil, {}, { - # :tls_key => OpenSSL::PKey::RSA.new(key_and_certificate), - # :tls_certificate => OpenSSL::X509::Certificate.new(key_and_certificate) - # }) - # - # # Verify the server certificate against a specific certificate - # request = REST::Request.new(:get, URI.parse('https://example.com/pigeons/1'), nil, {}, { - # :tls_verify => true, - # :tls_ca_file => '/home/alice/keys/example.pem' - # }) - def initialize(verb, url, body=nil, headers={}, options={}, &configure_block) - @verb = verb - @url = url - @body = body - @headers = headers - @options = options - @configure_block = configure_block - end - - # Returns the path (including the query) for the request - def path - [url.path.empty? ? '/' : url.path, url.query].compact.join('?') - end - - def proxy_env - { - 'http' => ENV['HTTP_PROXY'] || ENV['http_proxy'], - 'https' => ENV['HTTPS_PROXY'] || ENV['https_proxy'] - } - end - - def proxy_settings - proxy_env[url.scheme] ? URI.parse(proxy_env[url.scheme]) : nil - end - - def http_proxy - if settings = proxy_settings - Net::HTTP.Proxy(settings.host, settings.port, settings.user, settings.password) - end - end - - # Configures and returns a new Net::HTTP request object - def http_request - if http_proxy - http_request = http_proxy.new(url.host, url.port) - else - http_request = Net::HTTP.new(url.host, url.port) - end - - # enable SSL/TLS - if url.scheme == 'https' - require 'net/https' - require 'openssl' - Error::Connection.extend_classes! - - http_request.use_ssl = true - - if options[:tls_verify] or options[:verify_ssl] - if http_request.respond_to?(:enable_post_connection_check=) - http_request.enable_post_connection_check = true - end - # from http://curl.haxx.se/ca/cacert.pem - http_request.ca_file = options[:tls_ca_file] || File.expand_path('../../../support/cacert.pem', __FILE__) - http_request.verify_mode = OpenSSL::SSL::VERIFY_PEER - else - http_request.verify_mode = OpenSSL::SSL::VERIFY_NONE - end - - if options[:tls_key_and_certificate_file] - key_and_certificate = File.read(options[:tls_key_and_certificate_file]) - options[:tls_key] = OpenSSL::PKey::RSA.new(key_and_certificate) - options[:tls_certificate] = OpenSSL::X509::Certificate.new(key_and_certificate) - end - - if options[:tls_key] and options[:tls_certificate] - http_request.key = options[:tls_key] - http_request.cert = options[:tls_certificate] - elsif options[:tls_key] || options[:tls_certificate] - raise ArgumentError, "Please specify both the certificate and private key (:tls_key and :tls_certificate)" - end - end - - if @configure_block - @configure_block.call(http_request) - end - - http_request - end - - def request_for_verb - case verb - when :get - Net::HTTP::Get.new(path, headers) - when :head - Net::HTTP::Head.new(path, headers) - when :delete - Net::HTTP::Delete.new(path, headers) - when :patch - if defined?(Net::HTTP::Patch) - Net::HTTP::Patch.new(path, headers) - else - raise ArgumentError, "This version of the Ruby standard library doesn't support PATCH" - end - when :put - Net::HTTP::Put.new(path, headers) - when :post - Net::HTTP::Post.new(path, headers) - else - raise ArgumentError, "Unknown HTTP verb `#{verb}'" - end - end - - # Performs the actual request and returns a REST::Response object with the response - def perform - self.request = request_for_verb - request.body = body - - if options[:username] and options[:password] - request.basic_auth(options[:username], options[:password]) - end - - http_request = http_request() - response = http_request.start { |http| http.request(request) } - REST::Response.new(response.code, response.instance_variable_get('@header'), response.body) - end - - # Shortcut for REST::Request.new(*args).perform. - # - # See new for options. - def self.perform(*args, &configure_block) - request = new(*args, &configure_block) - request.perform - end - end -end - diff --git a/bundle/ruby/3.2.0/gems/nap-1.1.0/lib/rest/response.rb b/bundle/ruby/3.2.0/gems/nap-1.1.0/lib/rest/response.rb deleted file mode 100644 index 8ac1e2f4..00000000 --- a/bundle/ruby/3.2.0/gems/nap-1.1.0/lib/rest/response.rb +++ /dev/null @@ -1,46 +0,0 @@ -module REST - # Response holds a HTTP response - class Response - # These codes are used to define convenience boolean accessors on the response object. - # - # Examples - # - # REST::Response.new(200).ok? #=> true - # REST::Response.new(201).ok? #=> falses - # REST::Response.new(403).forbidden? #=> true - CODES = [ - [200, :ok], - [201, :created], - [301, :moved_permanently], - [302, :found], - [400, :bad_request], - [401, :unauthorized], - [403, :forbidden], - [422, :unprocessable_entity], - [404, :not_found], - [500, :internal_server_error] - ] - - attr_accessor :body, :headers, :status_code - - # * status_code: The status code of the response (ie. 200 or '404') - # * headers: The headers of the response - # * body: The body of the response - def initialize(status_code, headers={}, body='') - @status_code = status_code.to_i - @headers = headers - @body = body - end - - CODES.each do |code, name| - define_method "#{name}?" do - status_code == code - end - end - - # Returns _true_ when the status code is in the 2XX range. Returns false otherwise. - def success? - (status_code.to_s =~ /2../) ? true : false - end - end -end \ No newline at end of file diff --git a/bundle/ruby/3.2.0/gems/nap-1.1.0/support/cacert.pem b/bundle/ruby/3.2.0/gems/nap-1.1.0/support/cacert.pem deleted file mode 100644 index 1b24dc6a..00000000 --- a/bundle/ruby/3.2.0/gems/nap-1.1.0/support/cacert.pem +++ /dev/null @@ -1,3988 +0,0 @@ -## -## Bundle of CA Root Certificates -## -## Certificate data from Mozilla as of: Wed Apr 22 03:12:04 2015 -## -## This is a bundle of X.509 certificates of public Certificate Authorities -## (CA). These were automatically extracted from Mozilla's root certificates -## file (certdata.txt). This file can be found in the mozilla source tree: -## http://hg.mozilla.org/releases/mozilla-release/raw-file/default/security/nss/lib/ckfw/builtins/certdata.txt -## -## It contains the certificates in PEM format and therefore -## can be directly used with curl / libcurl / php_curl, or with -## an Apache+mod_ssl webserver for SSL client authentication. -## Just configure this file as the SSLCACertificateFile. -## -## Conversion done with mk-ca-bundle.pl version 1.25. -## SHA1: ed3c0bbfb7912bcc00cd2033b0cb85c98d10559c -## - - -Equifax Secure CA -================= ------BEGIN CERTIFICATE----- -MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEQMA4GA1UE -ChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5 -MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoT -B0VxdWlmYXgxLTArBgNVBAsTJEVxdWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCB -nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPR -fM6fBeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+AcJkVV5MW -8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kCAwEAAaOCAQkwggEFMHAG -A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UE -CxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoG -A1UdEAQTMBGBDzIwMTgwODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvS -spXXR9gjIBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQFMAMB -Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAFjOKer89961 -zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y7qj/WsjTVbJmcVfewCHrPSqnI0kB -BIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee95 -70+sB3c4 ------END CERTIFICATE----- - -GlobalSign Root CA -================== ------BEGIN CERTIFICATE----- -MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQkUx -GTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkds -b2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAwMDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNV -BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYD -VQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDa -DuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavpxy0Sy6sc -THAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp1Wrjsok6Vjk4bwY8iGlb -Kk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdGsnUOhugZitVtbNV4FpWi6cgKOOvyJBNP -c1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrX -gzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV -HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0BAQUF -AAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOzyj1hTdNGCbM+w6Dj -Y1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE38NflNUVyRRBnMRddWQVDf9VMOyG -j/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymPAbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhH -hm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveC -X4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A== ------END CERTIFICATE----- - -GlobalSign Root CA - R2 -======================= ------BEGIN CERTIFICATE----- -MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4GA1UECxMXR2xv -YmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh -bFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT -aWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln -bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6 -ErPLv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8eoLrvozp -s6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklqtTleiDTsvHgMCJiEbKjN -S7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzdC9XZzPnqJworc5HGnRusyMvo4KD0L5CL -TfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pazq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6C -ygPCm48CAwEAAaOBnDCBmTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E -FgQUm+IHV2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9i -YWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG3lm0mi3f3BmGLjAN -BgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp -9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu -01yiPqFbQfXf5WRDLenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG7 -9G+dwfCMNYxdAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7 -TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg== ------END CERTIFICATE----- - -Verisign Class 3 Public Primary Certification Authority - G3 -============================================================ ------BEGIN CERTIFICATE----- -MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV -UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv -cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl -IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw -CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy -dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv -cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkg -Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBAMu6nFL8eB8aHm8bN3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1 -EUGO+i2tKmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGukxUc -cLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBmCC+Vk7+qRy+oRpfw -EuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJXwzw3sJ2zq/3avL6QaaiMxTJ5Xpj -055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWuimi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA -ERSWwauSCPc/L8my/uRan2Te2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5f -j267Cz3qWhMeDGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC -/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565pF4ErWjfJXir0 -xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGtTxzhT5yvDwyd93gN2PQ1VoDa -t20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ== ------END CERTIFICATE----- - -Verisign Class 4 Public Primary Certification Authority - G3 -============================================================ ------BEGIN CERTIFICATE----- -MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV -UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv -cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl -IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw -CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy -dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv -cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkg -Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBAK3LpRFpxlmr8Y+1GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaS -tBO3IFsJ+mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0GbdU6LM -8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLmNxdLMEYH5IBtptiW -Lugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XYufTsgsbSPZUd5cBPhMnZo0QoBmrX -Razwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA -j/ola09b5KROJ1WrIhVZPMq1CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXtt -mhwwjIDLk5Mqg6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm -fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c2NU8Qh0XwRJd -RTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/bLvSHgCwIe34QWKCudiyxLtG -UPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg== ------END CERTIFICATE----- - -Entrust.net Premium 2048 Secure Server CA -========================================= ------BEGIN CERTIFICATE----- -MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u -ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxp -bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV -BAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQx -NzUwNTFaFw0yOTA3MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3 -d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl -MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u -ZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A -MIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOL -Gp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSr -hRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzW -nLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUi -VBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo0IwQDAOBgNVHQ8BAf8E -BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJ -KoZIhvcNAQEFBQADggEBADubj1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPy -T/4xmf3IDExoU8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf -zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5bu/8j72gZyxKT -J1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+bYQLCIt+jerXmCHG8+c8eS9e -nNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/ErfF6adulZkMV8gzURZVE= ------END CERTIFICATE----- - -Baltimore CyberTrust Root -========================= ------BEGIN CERTIFICATE----- -MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJRTESMBAGA1UE -ChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3li -ZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMC -SUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFs -dGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKME -uyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsB -UnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/C -G9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9 -XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjpr -l3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoI -VDaGezq1BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEB -BQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkTI7gQCvlYpNRh -cL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3WgxjkzSswF07r51XgdIGn9w/xZchMB5 -hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsa -Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H -RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp ------END CERTIFICATE----- - -AddTrust Low-Value Services Root -================================ ------BEGIN CERTIFICATE----- -MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML -QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRU -cnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMwMTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQsw -CQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBO -ZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEB -AQUAA4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ulCDtbKRY6 -54eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6ntGO0/7Gcrjyvd7ZWxbWr -oulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyldI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1 -Zmne3yzxbrww2ywkEtvrNTVokMsAsJchPXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJui -GMx1I4S+6+JNM3GOGvDC+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8w -HQYDVR0OBBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8EBTAD -AQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBlMQswCQYDVQQGEwJT -RTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEw -HwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxt -ZBsfzQ3duQH6lmM0MkhHma6X7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0Ph -iVYrqW9yTkkz43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY -eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJlpz/+0WatC7xr -mYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOAWiFeIc9TVPC6b4nbqKqVz4vj -ccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk= ------END CERTIFICATE----- - -AddTrust External Root -====================== ------BEGIN CERTIFICATE----- -MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEUMBIGA1UEChML -QWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYD -VQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEw -NDgzOFowbzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRU -cnVzdCBFeHRlcm5hbCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0Eg -Um9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvtH7xsD821 -+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9uMq/NzgtHj6RQa1wVsfw -Tz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzXmk6vBbOmcZSccbNQYArHE504B4YCqOmo -aSYYkKtMsE8jqzpPhNjfzp/haW+710LXa0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy -2xSoRcRdKn23tNbE7qzNE0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv7 -7+ldU9U0WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYDVR0P -BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0Jvf6xCZU7wO94CTL -VBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEmMCQGA1UECxMdQWRk -VHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsxIjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENB -IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZl -j7DYd7usQWxHYINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5 -6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvCNr4TDea9Y355 -e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEXc4g/VhsxOBi0cQ+azcgOno4u -G+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5amnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ= ------END CERTIFICATE----- - -AddTrust Public Services Root -============================= ------BEGIN CERTIFICATE----- -MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEUMBIGA1UEChML -QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSAwHgYDVQQDExdBZGRU -cnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAxMDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJ -BgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5l -dHdvcmsxIDAeBgNVBAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEF -AAOCAQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV6tsfSlbu -nyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nXGCwwfQ56HmIexkvA/X1i -d9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnPdzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSG -Aa2Il+tmzV7R/9x98oTaunet3IAIx6eH1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAw -HM+A+WD+eeSI8t0A65RF62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0G -A1UdDgQWBBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB -/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDELMAkGA1UEBhMCU0Ux -FDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29yazEgMB4G -A1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4 -JNojVhaTdt02KLmuG7jD8WS6IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL -+YPoRNWyQSW/iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao -GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh4SINhwBk/ox9 -Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQmXiLsks3/QppEIW1cxeMiHV9H -EufOX1362KqxMy3ZdvJOOjMMK7MtkAY= ------END CERTIFICATE----- - -AddTrust Qualified Certificates Root -==================================== ------BEGIN CERTIFICATE----- -MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEUMBIGA1UEChML -QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSMwIQYDVQQDExpBZGRU -cnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcx -CzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQ -IE5ldHdvcmsxIzAhBgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG -9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwqxBb/4Oxx -64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G87B4pfYOQnrjfxvM0PC3 -KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i2O+tCBGaKZnhqkRFmhJePp1tUvznoD1o -L/BLcHwTOK28FSXx1s6rosAx1i+f4P8UWfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GR -wVY18BTcZTYJbqukB8c10cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HU -MIHRMB0GA1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/ -BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6FrpGkwZzELMAkGA1UE -BhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29y -azEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlmaWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQAD -ggEBABmrder4i2VhlRO6aQTvhsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxG -GuoYQ992zPlmhpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X -dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3P6CxB9bpT9ze -RXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9YiQBCYz95OdBEsIJuQRno3eDB -iFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5noxqE= ------END CERTIFICATE----- - -Entrust Root Certification Authority -==================================== ------BEGIN CERTIFICATE----- -MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMCVVMxFjAUBgNV -BAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0Lm5ldC9DUFMgaXMgaW5jb3Jw -b3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMWKGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsG -A1UEAxMkRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0 -MloXDTI2MTEyNzIwNTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMu -MTkwNwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSByZWZlcmVu -Y2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNVBAMTJEVudHJ1c3QgUm9v -dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB -ALaVtkNC+sZtKm9I35RMOVcF7sN5EUFoNu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYsz -A9u3g3s+IIRe7bJWKKf44LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOww -Cj0Yzfv9KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGIrb68 -j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi94DkZfs0Nw4pgHBN -rziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOBsDCBrTAOBgNVHQ8BAf8EBAMCAQYw -DwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAigA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1 -MzQyWjAfBgNVHSMEGDAWgBRokORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DH -hmak8fdLQ/uEvW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA -A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9tO1KzKtvn1ISM -Y/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6ZuaAGAT/3B+XxFNSRuzFVJ7yVTa -v52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTS -W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0 -tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8 ------END CERTIFICATE----- - -RSA Security 2048 v3 -==================== ------BEGIN CERTIFICATE----- -MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6MRkwFwYDVQQK -ExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJpdHkgMjA0OCBWMzAeFw0wMTAy -MjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAXBgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAb -BgNVBAsTFFJTQSBTZWN1cml0eSAyMDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC -AQEAt49VcdKA3XtpeafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7 -Jylg/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGlwSMiuLgb -WhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnhAMFRD0xS+ARaqn1y07iH -KrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP -+Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpuAWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/ -MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4E -FgQUB8NRMKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYcHnmY -v/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/Zb5gEydxiKRz44Rj -0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+f00/FGj1EVDVwfSQpQgdMWD/YIwj -VAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVOrSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395 -nzIlQnQFgCi/vcEkllgVsRch6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kA -pKnXwiJPZ9d37CAFYd4= ------END CERTIFICATE----- - -GeoTrust Global CA -================== ------BEGIN CERTIFICATE----- -MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVTMRYwFAYDVQQK -Ew1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9iYWwgQ0EwHhcNMDIwNTIxMDQw -MDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j -LjEbMBkGA1UEAxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB -CgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjo -BbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDviS2Aelet -8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU1XupGc1V3sjs0l44U+Vc -T4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdReJivbPagU -vTLrGAMoUgRx5aszPeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTAD -AQH/MB0GA1UdDgQWBBTAephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVk -DBF9qn1luMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKInZ57Q -zxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfStQWVYrmm3ok9Nns4 -d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcFPseKUgzbFbS9bZvlxrFUaKnjaZC2 -mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Unhw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6p -XE0zX5IJL4hmXXeXxx12E6nV5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvm -Mw== ------END CERTIFICATE----- - -GeoTrust Global CA 2 -==================== ------BEGIN CERTIFICATE----- -MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN -R2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwHhcNMDQwMzA0MDUw -MDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j -LjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw -ggEKAoIBAQDvPE1APRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/ -NTL8Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hLTytCOb1k -LUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL5mkWRxHCJ1kDs6ZgwiFA -Vvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7S4wMcoKK+xfNAGw6EzywhIdLFnopsk/b -HdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQF -MAMBAf8wHQYDVR0OBBYEFHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNH -K266ZUapEBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6tdEPx7 -srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv/NgdRN3ggX+d6Yvh -ZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywNA0ZF66D0f0hExghAzN4bcLUprbqL -OzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkC -x1YAzUm5s2x7UwQa4qjJqhIFI8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqF -H4z1Ir+rzoPz4iIprn2DQKi6bA== ------END CERTIFICATE----- - -GeoTrust Universal CA -===================== ------BEGIN CERTIFICATE----- -MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN -R2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVyc2FsIENBMB4XDTA0MDMwNDA1 -MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IElu -Yy4xHjAcBgNVBAMTFUdlb1RydXN0IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIP -ADCCAgoCggIBAKYVVaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9t -JPi8cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTTQjOgNB0e -RXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFhF7em6fgemdtzbvQKoiFs -7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2vc7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d -8Lsrlh/eezJS/R27tQahsiFepdaVaH/wmZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7V -qnJNk22CDtucvc+081xdVHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3Cga -Rr0BHdCXteGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZf9hB -Z3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfReBi9Fi1jUIxaS5BZu -KGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+nhutxx9z3SxPGWX9f5NAEC7S8O08 -ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0 -XG0D08DYj3rWMB8GA1UdIwQYMBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIB -hjANBgkqhkiG9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc -aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fXIwjhmF7DWgh2 -qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzynANXH/KttgCJwpQzgXQQpAvvL -oJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0zuzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsK -xr2EoyNB3tZ3b4XUhRxQ4K5RirqNPnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxF -KyDuSN/n3QmOGKjaQI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2 -DFKWkoRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9ER/frslK -xfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQtDF4JbAiXfKM9fJP/P6EU -p8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/SfuvmbJxPgWp6ZKy7PtXny3YuxadIwVyQD8vI -P/rmMuGNG2+k5o7Y+SlIis5z/iw= ------END CERTIFICATE----- - -GeoTrust Universal CA 2 -======================= ------BEGIN CERTIFICATE----- -MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN -R2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwHhcNMDQwMzA0 -MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3Qg -SW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUA -A4ICDwAwggIKAoICAQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0 -DE81WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUGFF+3Qs17 -j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdqXbboW0W63MOhBW9Wjo8Q -JqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxLse4YuU6W3Nx2/zu+z18DwPw76L5GG//a -QMJS9/7jOvdqdzXQ2o3rXhhqMcceujwbKNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2 -WP0+GfPtDCapkzj4T8FdIgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP -20gaXT73y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRthAAn -ZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgocQIgfksILAAX/8sgC -SqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4Lt1ZrtmhN79UNdxzMk+MBB4zsslG -8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2 -+/CfXGJx7Tz0RzgQKzAfBgNVHSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8E -BAMCAYYwDQYJKoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z -dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQL1EuxBRa3ugZ -4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgrFg5fNuH8KrUwJM/gYwx7WBr+ -mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSoag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpq -A1Ihn0CoZ1Dy81of398j9tx4TuaYT1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpg -Y+RdM4kX2TGq2tbzGDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiP -pm8m1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJVOCiNUW7d -FGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH6aLcr34YEoP9VhdBLtUp -gn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwXQMAJKOSLakhT2+zNVVXxxvjpoixMptEm -X36vWkzaH6byHCx+rgIW0lbQL1dTR+iS ------END CERTIFICATE----- - -Visa eCommerce Root -=================== ------BEGIN CERTIFICATE----- -MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBrMQswCQYDVQQG -EwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2Ug -QXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2 -WhcNMjIwNjI0MDAxNjEyWjBrMQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMm -VmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv -bW1lcmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h2mCxlCfL -F9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4ElpF7sDPwsRROEW+1QK8b -RaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdVZqW1LS7YgFmypw23RuwhY/81q6UCzyr0 -TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI -/k4+oKsGGelT84ATB+0tvz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzs -GHxBvfaLdXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG -MB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUFAAOCAQEAX/FBfXxc -CLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcRzCSs00Rsca4BIGsDoo8Ytyk6feUW -YFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pz -zkWKsKZJ/0x9nXGIxHYdkFsd7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBu -YQa7FkKMcPcw++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt -398znM/jra6O1I7mT1GvFpLgXPYHDw== ------END CERTIFICATE----- - -Certum Root CA -============== ------BEGIN CERTIFICATE----- -MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQK -ExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBDQTAeFw0wMjA2MTExMDQ2Mzla -Fw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8u -by4xEjAQBgNVBAMTCUNlcnR1bSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6x -wS7TT3zNJc4YPk/EjG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdL -kKWoePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GIULdtlkIJ -89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapuOb7kky/ZR6By6/qmW6/K -Uz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUgAKpoC6EahQGcxEZjgoi2IrHu/qpGWX7P -NSzVttpd90gzFFS269lvzs2I1qsb2pY7HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkq -hkiG9w0BAQUFAAOCAQEAuI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+ -GXYkHAQaTOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTgxSvg -GrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1qCjqTE5s7FCMTY5w/ -0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5xO/fIR/RpbxXyEV6DHpx8Uq79AtoS -qFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs6GAqm4VKQPNriiTsBhYscw== ------END CERTIFICATE----- - -Comodo AAA Services root -======================== ------BEGIN CERTIFICATE----- -MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS -R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg -TGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAw -MFoXDTI4MTIzMTIzNTk1OVowezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hl -c3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNV -BAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQuaBtDFcCLNSS1UY8y2bmhG -C1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe3M/vg4aijJRPn2jymJBGhCfHdr/jzDUs -i14HZGWCwEiwqJH5YZ92IFCokcdmtet4YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszW -Y19zjNoFmag4qMsXeDZRrOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjH -Ypy+g8cmez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQUoBEK -Iz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wewYDVR0f -BHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNl -cy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29tb2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2Vz -LmNybDANBgkqhkiG9w0BAQUFAAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm -7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz -Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z -8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C -12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg== ------END CERTIFICATE----- - -Comodo Secure Services root -=========================== ------BEGIN CERTIFICATE----- -MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS -R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg -TGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAw -MDAwMFoXDTI4MTIzMTIzNTk1OVowfjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFu -Y2hlc3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAi -BgNVBAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP -ADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPMcm3ye5drswfxdySRXyWP -9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3SHpR7LZQdqnXXs5jLrLxkU0C8j6ysNstc -rbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rC -oznl2yY4rYsK7hljxxwk3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3V -p6ea5EQz6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNVHQ4E -FgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w -gYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL1NlY3VyZUNlcnRpZmlj -YXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRwOi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlm -aWNhdGVTZXJ2aWNlcy5jcmwwDQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm -4J4oqF7Tt/Q05qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj -Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtIgKvcnDe4IRRL -DXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJaD61JlfutuC23bkpgHl9j6Pw -pCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDlizeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1H -RR3B7Hzs/Sk= ------END CERTIFICATE----- - -Comodo Trusted Services root -============================ ------BEGIN CERTIFICATE----- -MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS -R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg -TGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEw -MDAwMDBaFw0yODEyMzEyMzU5NTlaMH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1h -bmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUw -IwYDVQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0BAQEFAAOC -AQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWWfnJSoBVC21ndZHoa0Lh7 -3TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMtTGo87IvDktJTdyR0nAducPy9C1t2ul/y -/9c3S0pgePfw+spwtOpZqqPOSC+pw7ILfhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6 -juljatEPmsbS9Is6FARW1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsS -ivnkBbA7kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0GA1Ud -DgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB -/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21vZG9jYS5jb20vVHJ1c3RlZENlcnRp -ZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRodHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENl -cnRpZmljYXRlU2VydmljZXMuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8Ntw -uleGFTQQuS9/HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32 -pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxISjBc/lDb+XbDA -BHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+xqFx7D+gIIxmOom0jtTYsU0l -R+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/AtyjcndBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O -9y5Xt5hwXsjEeLBi ------END CERTIFICATE----- - -QuoVadis Root CA -================ ------BEGIN CERTIFICATE----- -MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJCTTEZMBcGA1UE -ChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 -eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAz -MTkxODMzMzNaFw0yMTAzMTcxODMzMzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRp -cyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQD -EyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF -AAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Ypli4kVEAkOPcahdxYTMuk -J0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2DrOpm2RgbaIr1VxqYuvXtdj182d6UajtL -F8HVj71lODqV0D1VNk7feVcxKh7YWWVJWCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeL -YzcS19Dsw3sgQUSj7cugF+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWen -AScOospUxbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCCAk4w -PQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVvdmFkaXNvZmZzaG9y -ZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREwggENMIIBCQYJKwYBBAG+WAABMIH7 -MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNlIG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmlj -YXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJs -ZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh -Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYIKwYBBQUHAgEW -Fmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3TKbkGGew5Oanwl4Rqy+/fMIGu -BgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rqy+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkw -FwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0 -aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6 -tlCLMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSkfnIYj9lo -fFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf87C9TqnN7Az10buYWnuul -LsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1RcHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2x -gI4JVrmcGmD+XcHXetwReNDWXcG31a0ymQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi -5upZIof4l/UO/erMkqQWxFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi -5nrQNiOKSnQ2+Q== ------END CERTIFICATE----- - -QuoVadis Root CA 2 -================== ------BEGIN CERTIFICATE----- -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 ------END CERTIFICATE----- - -QuoVadis Root CA 3 -================== ------BEGIN CERTIFICATE----- -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 ------END CERTIFICATE----- - -Security Communication Root CA -============================== ------BEGIN CERTIFICATE----- -MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP -U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw -HhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP -U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw -ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw -8yl89f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJDKaVv0uM -DPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9Ms+k2Y7CI9eNqPPYJayX -5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/NQV3Is00qVUarH9oe4kA92819uZKAnDfd -DJZkndwi92SL32HeFZRSFaB9UslLqCHJxrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2 -JChzAgMBAAGjPzA9MB0GA1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYw -DwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vGkl3g -0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfrUj94nK9NrvjVT8+a -mCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5Bw+SUEmK3TGXX8npN6o7WWWXlDLJ -s58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ -6rBK+1YWc26sTfcioU+tHXotRSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAi -FL39vmwLAw== ------END CERTIFICATE----- - -Sonera Class 2 Root CA -====================== ------BEGIN CERTIFICATE----- -MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG -U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAxMDQwNjA3Mjk0MFoXDTIxMDQw -NjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh -IENsYXNzMiBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3 -/Ei9vX+ALTU74W+oZ6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybT -dXnt5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s3TmVToMG -f+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2EjvOr7nQKV0ba5cTppCD8P -tOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu8nYybieDwnPz3BjotJPqdURrBGAgcVeH -nfO+oJAjPYok4doh28MCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITT -XjwwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt -0jSv9zilzqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/3DEI -cbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvDFNr450kkkdAdavph -Oe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6Tk6ezAyNlNzZRZxe7EJQY670XcSx -EtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLH -llpwrN9M ------END CERTIFICATE----- - -Staat der Nederlanden Root CA -============================= ------BEGIN CERTIFICATE----- -MIIDujCCAqKgAwIBAgIEAJiWijANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJOTDEeMBwGA1UE -ChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFhdCBkZXIgTmVkZXJsYW5kZW4g -Um9vdCBDQTAeFw0wMjEyMTcwOTIzNDlaFw0xNTEyMTYwOTE1MzhaMFUxCzAJBgNVBAYTAk5MMR4w -HAYDVQQKExVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xJjAkBgNVBAMTHVN0YWF0IGRlciBOZWRlcmxh -bmRlbiBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmNK1URF6gaYUmHFt -vsznExvWJw56s2oYHLZhWtVhCb/ekBPHZ+7d89rFDBKeNVU+LCeIQGv33N0iYfXCxw719tV2U02P -jLwYdjeFnejKScfST5gTCaI+Ioicf9byEGW07l8Y1Rfj+MX94p2i71MOhXeiD+EwR+4A5zN9RGca -C1Hoi6CeUJhoNFIfLm0B8mBF8jHrqTFoKbt6QZ7GGX+UtFE5A3+y3qcym7RHjm+0Sq7lr7HcsBth -vJly3uSJt3omXdozSVtSnA71iq3DuD3oBmrC1SoLbHuEvVYFy4ZlkuxEK7COudxwC0barbxjiDn6 -22r+I/q85Ej0ZytqERAhSQIDAQABo4GRMIGOMAwGA1UdEwQFMAMBAf8wTwYDVR0gBEgwRjBEBgRV -HSAAMDwwOgYIKwYBBQUHAgEWLmh0dHA6Ly93d3cucGtpb3ZlcmhlaWQubmwvcG9saWNpZXMvcm9v -dC1wb2xpY3kwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSofeu8Y6R0E3QA7Jbg0zTBLL9s+DAN -BgkqhkiG9w0BAQUFAAOCAQEABYSHVXQ2YcG70dTGFagTtJ+k/rvuFbQvBgwp8qiSpGEN/KtcCFtR -EytNwiphyPgJWPwtArI5fZlmgb9uXJVFIGzmeafR2Bwp/MIgJ1HI8XxdNGdphREwxgDS1/PTfLbw -MVcoEoJz6TMvplW0C5GUR5z6u3pCMuiufi3IvKwUv9kP2Vv8wfl6leF9fpb8cbDCTMjfRTTJzg3y -nGQI0DvDKcWy7ZAEwbEpkcUwb8GpcjPM/l0WFywRaed+/sWDCN+83CI6LiBpIzlWYGeQiy52OfsR -iJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw== ------END CERTIFICATE----- - -UTN DATACorp SGC Root CA -======================== ------BEGIN CERTIFICATE----- -MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCBkzELMAkGA1UE -BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl -IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZ -BgNVBAMTElVUTiAtIERBVEFDb3JwIFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBa -MIGTMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4w -HAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRy -dXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjANBgkqhkiG9w0BAQEFAAOC -AQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ys -raP6LnD43m77VkIVni5c7yPeIbkFdicZD0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlo -wHDyUwDAXlCCpVZvNvlK4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA -9P4yPykqlXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulWbfXv -33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQABo4GrMIGoMAsGA1Ud -DwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRTMtGzz3/64PGgXYVOktKeRR20TzA9 -BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dD -LmNybDAqBgNVHSUEIzAhBggrBgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3 -DQEBBQUAA4IBAQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft -Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyjj98C5OBxOvG0 -I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVHKWss5nbZqSl9Mt3JNjy9rjXx -EZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwP -DPafepE39peC4N1xaf92P2BNPM/3mfnGV/TJVTl4uix5yaaIK/QI ------END CERTIFICATE----- - -UTN USERFirst Hardware Root CA -============================== ------BEGIN CERTIFICATE----- -MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCBlzELMAkGA1UE -BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl -IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAd -BgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgx -OTIyWjCBlzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0 -eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVz -ZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlI -wrthdBKWHTxqctU8EGc6Oe0rE81m65UJM6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFd -tqdt++BxF2uiiPsA3/4aMXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8 -i4fDidNdoI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqIDsjf -Pe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9KsyoUhbAgMBAAGjgbkw -gbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFKFyXyYbKJhDlV0HN9WF -lp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNF -UkZpcnN0LUhhcmR3YXJlLmNybDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUF -BwMGBggrBgEFBQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM -//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28GpgoiskliCE7/yMgUsogW -XecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gECJChicsZUN/KHAG8HQQZexB2 -lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kn -iCrVWFCVH/A7HFe7fRQ5YiuayZSSKqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67 -nfhmqA== ------END CERTIFICATE----- - -Camerfirma Chambers of Commerce Root -==================================== ------BEGIN CERTIFICATE----- -MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe -QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i -ZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAx -NjEzNDNaFw0zNzA5MzAxNjEzNDRaMH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZp -cm1hIFNBIENJRiBBODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3Jn -MSIwIAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0BAQEFAAOC -AQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtbunXF/KGIJPov7coISjlU -xFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0dBmpAPrMMhe5cG3nCYsS4No41XQEMIwRH -NaqbYE6gZj3LJgqcQKH0XZi/caulAGgq7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jW -DA+wWFjbw2Y3npuRVDM30pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFV -d9oKDMyXroDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIGA1Ud -EwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5jaGFtYmVyc2lnbi5v -cmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p26EpW1eLTXYGduHRooowDgYDVR0P -AQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hh -bWJlcnNpZ24ub3JnMCcGA1UdEgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYD -VR0gBFEwTzBNBgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz -aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEBAAxBl8IahsAi -fJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZdp0AJPaxJRUXcLo0waLIJuvvD -L8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wN -UPf6s+xCX6ndbcj0dc97wXImsQEcXCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/n -ADydb47kMgkdTXg0eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1 -erfutGWaIZDgqtCYvDi1czyL+Nw= ------END CERTIFICATE----- - -Camerfirma Global Chambersign Root -================================== ------BEGIN CERTIFICATE----- -MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe -QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i -ZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYx -NDE4WhcNMzcwOTMwMTYxNDE4WjB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJt -YSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEg -MB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUAA4IBDQAw -ggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0Mi+ITaFgCPS3CU6gSS9J -1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/sQJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8O -by4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpVeAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl -6DJWk0aJqCWKZQbua795B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c -8lCrEqWhz0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0TAQH/ -BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1iZXJzaWduLm9yZy9j -aGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4wTcbOX60Qq+UDpfqpFDAOBgNVHQ8B -Af8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAHMCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBj -aGFtYmVyc2lnbi5vcmcwKgYDVR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9y -ZzBbBgNVHSAEVDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh -bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0BAQUFAAOCAQEA -PDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUMbKGKfKX0j//U2K0X1S0E0T9Y -gOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXiryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJ -PJ7oKXqJ1/6v/2j1pReQvayZzKWGVwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4 -IBHNfTIzSJRUTN3cecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREes -t2d/AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A== ------END CERTIFICATE----- - -NetLock Notary (Class A) Root -============================= ------BEGIN CERTIFICATE----- -MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQI -EwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6 -dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9j -ayBLb3pqZWd5em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNDIzMTQ0N1oX -DTE5MDIxOTIzMTQ0N1owga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQH -EwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYD -VQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBLb3pqZWd5em9pIChDbGFz -cyBBKSBUYW51c2l0dmFueWtpYWRvMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHSM -D7tM9DceqQWC2ObhbHDqeLVu0ThEDaiDzl3S1tWBxdRL51uUcCbbO51qTGL3cfNk1mE7PetzozfZ -z+qMkjvN9wfcZnSX9EUi3fRc4L9t875lM+QVOr/bmJBVOMTtplVjC7B4BPTjbsE/jvxReB+SnoPC -/tmwqcm8WgD/qaiYdPv2LD4VOQ22BFWoDpggQrOxJa1+mm9dU7GrDPzr4PN6s6iz/0b2Y6LYOph7 -tqyF/7AlT3Rj5xMHpQqPBffAZG9+pyeAlt7ULoZgx2srXnN7F+eRP2QM2EsiNCubMvJIH5+hCoR6 -4sKtlz2O1cH5VqNQ6ca0+pii7pXmKgOM3wIDAQABo4ICnzCCApswDgYDVR0PAQH/BAQDAgAGMBIG -A1UdEwEB/wQIMAYBAf8CAQQwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaC -Ak1GSUdZRUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pv -bGdhbHRhdGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQu -IEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2Vn -LWJpenRvc2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0 -ZXRlbGUgYXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFz -IGxlaXJhc2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBh -IGh0dHBzOi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVu -b3J6ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBh -bmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sg -Q1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFp -bCBhdCBjcHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4IBAQBIJEb3ulZv+sgoA0BO5TE5 -ayZrU3/b39/zcT0mwBQOxmd7I6gMc90Bu8bKbjc5VdXHjFYgDigKDtIqpLBJUsY4B/6+CgmM0ZjP -ytoUMaFP0jn8DxEsQ8Pdq5PHVT5HfBgaANzze9jyf1JsIPQLX2lS9O74silg6+NJMSEN1rUQQeJB -CWziGppWS3cC9qCbmieH6FUpccKQn0V4GuEVZD3QDtigdp+uxdAu6tYPVuxkf1qbFFgBJ34TUMdr -KuZoPL9coAob4Q566eKAw+np9v1sEZ7Q5SgnK1QyQhSCdeZK8CtmdWOMovsEPoMOmzbwGOQmIMOM -8CgHrTwXZoi1/baI ------END CERTIFICATE----- - -XRamp Global CA Root -==================== ------BEGIN CERTIFICATE----- -MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UE -BhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2Vj -dXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB -dXRob3JpdHkwHhcNMDQxMTAxMTcxNDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMx -HjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkg -U2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3Jp -dHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS638eMpSe2OAtp87ZOqCwu -IR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCPKZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMx -foArtYzAQDsRhtDLooY2YKTVMIJt2W7QDxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FE -zG+gSqmUsE3a56k0enI4qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqs -AxcZZPRaJSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNViPvry -xS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud -EwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASsjVy16bYbMDYGA1UdHwQvMC0wK6Ap -oCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMC -AQEwDQYJKoZIhvcNAQEFBQADggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc -/Kh4ZzXxHfARvbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt -qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLaIR9NmXmd4c8n -nxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSyi6mx5O+aGtA9aZnuqCij4Tyz -8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQO+7ETPTsJ3xCwnR8gooJybQDJbw= ------END CERTIFICATE----- - -Go Daddy Class 2 CA -=================== ------BEGIN CERTIFICATE----- -MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMY -VGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRp -ZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkG -A1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g -RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQAD -ggENADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv -2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+qN1j3hybX2C32 -qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiOr18SPaAIBQi2XKVlOARFmR6j -YGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmY -vLEHZ6IVDd2gWMZEewo+YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0O -BBYEFNLEsNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h/t2o -atTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMu -MTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwG -A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wim -PQoZ+YeAEW5p5JYXMP80kWNyOO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKt -I3lpjbi2Tc7PTMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ -HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VI -Ls9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/b -vZ8= ------END CERTIFICATE----- - -Starfield Class 2 CA -==================== ------BEGIN CERTIFICATE----- -MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzElMCMGA1UEChMc -U3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIg -Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBo -MQswCQYDVQQGEwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAG -A1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqG -SIb3DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf8MOh2tTY -bitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN+lq2cwQlZut3f+dZxkqZ -JRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVm -epsZGD3/cVE8MC5fvj13c7JdBmzDI1aaK4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSN -F4Azbl5KXZnJHoe0nRrA1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HF -MIHCMB0GA1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fRzt0f -hvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNo -bm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24g -QXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGs -afPzWdqbAYcaT1epoXkJKtv3L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLM -PUxA2IGvd56Deruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl -xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynpVSJYACPq4xJD -KVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3 -QBFGmh95DmK/D5fs4C8fF5Q= ------END CERTIFICATE----- - -StartCom Certification Authority -================================ ------BEGIN CERTIFICATE----- -MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN -U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu -ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0 -NjM2WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk -LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg -U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw -ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y -o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/ -Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d -eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt -2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z -6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ -osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/ -untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc -UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT -37uMdBNSSwIDAQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE -FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9jZXJ0LnN0YXJ0 -Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3JsLnN0YXJ0Y29tLm9yZy9zZnNj -YS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFMBgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUH -AgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRw -Oi8vY2VydC5zdGFydGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYg -U3RhcnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlhYmlsaXR5 -LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2YgdGhlIFN0YXJ0Q29tIENl -cnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFpbGFibGUgYXQgaHR0cDovL2NlcnQuc3Rh -cnRjb20ub3JnL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilT -dGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOC -AgEAFmyZ9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8jhvh -3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUWFjgKXlf2Ysd6AgXm -vB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJzewT4F+irsfMuXGRuczE6Eri8sxHk -fY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3 -fsNrarnDy0RLrHiQi+fHLB5LEUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZ -EoalHmdkrQYuL6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq -yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuCO3NJo2pXh5Tl -1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6Vum0ABj6y6koQOdjQK/W/7HW/ -lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkyShNOsF/5oirpt9P/FlUQqmMGqz9IgcgA38coro -g14= ------END CERTIFICATE----- - -Taiwan GRCA -=========== ------BEGIN CERTIFICATE----- -MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/MQswCQYDVQQG -EwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4X -DTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1owPzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dv -dmVybm1lbnQgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQAD -ggIPADCCAgoCggIBAJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qN -w8XRIePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1qgQdW8or5 -BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKyyhwOeYHWtXBiCAEuTk8O -1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAtsF/tnyMKtsc2AtJfcdgEWFelq16TheEfO -htX7MfP6Mb40qij7cEwdScevLJ1tZqa2jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wov -J5pGfaENda1UhhXcSTvxls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7 -Q3hub/FCVGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHKYS1t -B6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoHEgKXTiCQ8P8NHuJB -O9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThNXo+EHWbNxWCWtFJaBYmOlXqYwZE8 -lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1UdDgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNV -HRMEBTADAQH/MDkGBGcqBwAEMTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg2 -09yewDL7MTqKUWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ -TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyfqzvS/3WXy6Tj -Zwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaKZEk9GhiHkASfQlK3T8v+R0F2 -Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFEJPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlU -D7gsL0u8qV1bYH+Mh6XgUmMqvtg7hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6Qz -DxARvBMB1uUO07+1EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+Hbk -Z6MmnD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WXudpVBrkk -7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44VbnzssQwmSNOXfJIoRIM3BKQ -CZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDeLMDDav7v3Aun+kbfYNucpllQdSNpc5Oy -+fwC00fmcc4QAu4njIT/rEUNE1yDMuAlpYYsfPQS ------END CERTIFICATE----- - -Swisscom Root CA 1 -================== ------BEGIN CERTIFICATE----- -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 -NY6E0F/6MBr1mmz0DlP5OlvRHA== ------END CERTIFICATE----- - -DigiCert Assured ID Root CA -=========================== ------BEGIN CERTIFICATE----- -MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQG -EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw -IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzEx -MTEwMDAwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL -ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0Ew -ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7cJpSIqvTO -9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYPmDI2dsze3Tyoou9q+yHy -UmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW -/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpy -oeb6pNnVFzF1roV9Iq4/AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whf -GHdPAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRF -66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzANBgkq -hkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRCdWKuh+vy1dneVrOfzM4UKLkNl2Bc -EkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTffwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38Fn -SbNd67IJKusm7Xi+fT8r87cmNW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i -8b5QZ7dsvfPxH2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe -+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g== ------END CERTIFICATE----- - -DigiCert Global Root CA -======================= ------BEGIN CERTIFICATE----- -MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQG -EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw -HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBDQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAw -MDAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3 -dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkq -hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsBCSDMAZOn -TjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97nh6Vfe63SKMI2tavegw5 -BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt43C/dxC//AH2hdmoRBBYMql1GNXRor5H -4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7PT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y -7vrTC0LUq7dBMtoM1O/4gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQAB -o2MwYTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbRTLtm -8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDQYJKoZIhvcNAQEF -BQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/EsrhMAtudXH/vTBH1jLuG2cenTnmCmr -EbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIt -tep3Sp+dWOIrWcBAI+0tKIJFPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886 -UAb3LujEV0lsYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk -CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= ------END CERTIFICATE----- - -DigiCert High Assurance EV Root CA -================================== ------BEGIN CERTIFICATE----- -MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQG -EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSsw -KQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAw -MFoXDTMxMTExMDAwMDAwMFowbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZ -MBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFu -Y2UgRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm+9S75S0t -Mqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTWPNt0OKRKzE0lgvdKpVMS -OO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEMxChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3 -MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFBIk5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQ -NAQTXKFx01p8VdteZOE3hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUe -h10aUAsgEsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB -Af8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaAFLE+w2kD+L9HAdSY -JhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3NecnzyIZgYIVyHbIUf4KmeqvxgydkAQ -V8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6zeM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFp -myPInngiK3BD41VHMWEZ71jFhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkK -mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe -vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K ------END CERTIFICATE----- - -Certplus Class 2 Primary CA -=========================== ------BEGIN CERTIFICATE----- -MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAwPTELMAkGA1UE -BhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFzcyAyIFByaW1hcnkgQ0EwHhcN -OTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2Vy -dHBsdXMxGzAZBgNVBAMTEkNsYXNzIDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP -ADCCAQoCggEBANxQltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR -5aiRVhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyLkcAbmXuZ -Vg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCdEgETjdyAYveVqUSISnFO -YFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yasH7WLO7dDWWuwJKZtkIvEcupdM5i3y95e -e++U8Rs+yskhwcWYAqqi9lt3m/V+llU0HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRME -CDAGAQH/AgEKMAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJ -YIZIAYb4QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMuY29t -L0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/AN9WM2K191EBkOvD -P9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8yfFC82x/xXp8HVGIutIKPidd3i1R -TtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMRFcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+ -7UCmnYR0ObncHoUW2ikbhiMAybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW -//1IMwrh3KWBkJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7 -l7+ijrRU ------END CERTIFICATE----- - -DST Root CA X3 -============== ------BEGIN CERTIFICATE----- -MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/MSQwIgYDVQQK -ExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMTDkRTVCBSb290IENBIFgzMB4X -DTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVowPzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1 -cmUgVHJ1c3QgQ28uMRcwFQYDVQQDEw5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQAD -ggEPADCCAQoCggEBAN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmT -rE4Orz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEqOLl5CjH9 -UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9bxiqKqy69cK3FCxolkHRy -xXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40d -utolucbY38EVAjqr2m7xPi71XAicPNaDaeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0T -AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQ -MA0GCSqGSIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69ikug -dB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXrAvHRAosZy5Q6XkjE -GB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZzR8srzJmwN0jP41ZL9c8PDHIyh8bw -RLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubS -fZGL+T0yjWW06XyxV3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ ------END CERTIFICATE----- - -DST ACES CA X6 -============== ------BEGIN CERTIFICATE----- -MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBbMQswCQYDVQQG -EwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QxETAPBgNVBAsTCERTVCBBQ0VT -MRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0wMzExMjAyMTE5NThaFw0xNzExMjAyMTE5NTha -MFsxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UE -CxMIRFNUIEFDRVMxFzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOC -AQ8AMIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPuktKe1jzI -DZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7gLFViYsx+tC3dr5BPTCa -pCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZHfAjIgrrep4c9oW24MFbCswKBXy314pow -GCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4aahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPy -MjwmR/onJALJfh1biEITajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1Ud -EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rkc3Qu -Y29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjtodHRwOi8vd3d3LnRy -dXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMtaW5kZXguaHRtbDAdBgNVHQ4EFgQU -CXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZIhvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V2 -5FYrnJmQ6AgwbN99Pe7lv7UkQIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6t -Fr8hlxCBPeP/h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq -nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpRrscL9yuwNwXs -vFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf29w4LTJxoeHtxMcfrHuBnQfO3 -oKfN5XozNmr6mis= ------END CERTIFICATE----- - -TURKTRUST Certificate Services Provider Root 1 -============================================== ------BEGIN CERTIFICATE----- -MIID+zCCAuOgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBtzE/MD0GA1UEAww2VMOcUktUUlVTVCBF -bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGDAJUUjEP -MA0GA1UEBwwGQU5LQVJBMVYwVAYDVQQKDE0oYykgMjAwNSBUw5xSS1RSVVNUIEJpbGdpIMSwbGV0 -acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjAeFw0wNTA1MTMx -MDI3MTdaFw0xNTAzMjIxMDI3MTdaMIG3MT8wPQYDVQQDDDZUw5xSS1RSVVNUIEVsZWt0cm9uaWsg -U2VydGlmaWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLExCzAJBgNVBAYMAlRSMQ8wDQYDVQQHDAZB -TktBUkExVjBUBgNVBAoMTShjKSAyMDA1IFTDnFJLVFJVU1QgQmlsZ2kgxLBsZXRpxZ9pbSB2ZSBC -aWxpxZ9pbSBHw7x2ZW5sacSfaSBIaXptZXRsZXJpIEEuxZ4uMIIBIjANBgkqhkiG9w0BAQEFAAOC -AQ8AMIIBCgKCAQEAylIF1mMD2Bxf3dJ7XfIMYGFbazt0K3gNfUW9InTojAPBxhEqPZW8qZSwu5GX -yGl8hMW0kWxsE2qkVa2kheiVfrMArwDCBRj1cJ02i67L5BuBf5OI+2pVu32Fks66WJ/bMsW9Xe8i -Si9BB35JYbOG7E6mQW6EvAPs9TscyB/C7qju6hJKjRTP8wrgUDn5CDX4EVmt5yLqS8oUBt5CurKZ -8y1UiBAG6uEaPj1nH/vO+3yC6BFdSsG5FOpU2WabfIl9BJpiyelSPJ6c79L1JuTm5Rh8i27fbMx4 -W09ysstcP4wFjdFMjK2Sx+F4f2VsSQZQLJ4ywtdKxnWKWU51b0dewQIDAQABoxAwDjAMBgNVHRME -BTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAV9VX/N5aAWSGk/KEVTCD21F/aAyT8z5Aa9CEKmu46 -sWrv7/hg0Uw2ZkUd82YCdAR7kjCo3gp2D++Vbr3JN+YaDayJSFvMgzbC9UZcWYJWtNX+I7TYVBxE -q8Sn5RTOPEFhfEPmzcSBCYsk+1Ql1haolgxnB2+zUEfjHCQo3SqYpGH+2+oSN7wBGjSFvW5P55Fy -B0SFHljKVETd96y5y4khctuPwGkplyqjrhgjlxxBKot8KsF8kOipKMDTkcatKIdAaLX/7KfS0zgY -nNN9aV3wxqUeJBujR/xpB2jn5Jq07Q+hh4cCzofSSE7hvP/L8XKSRGQDJereW26fyfJOrN3H ------END CERTIFICATE----- - -TURKTRUST Certificate Services Provider Root 2 -============================================== ------BEGIN CERTIFICATE----- -MIIEPDCCAySgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBF -bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEP -MA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUg -QmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwHhcN -MDUxMTA3MTAwNzU3WhcNMTUwOTE2MTAwNzU3WjCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBFbGVr -dHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEPMA0G -A1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmls -acWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwggEiMA0G -CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCpNn7DkUNMwxmYCMjHWHtPFoylzkkBH3MOrHUTpvqe -LCDe2JAOCtFp0if7qnefJ1Il4std2NiDUBd9irWCPwSOtNXwSadktx4uXyCcUHVPr+G1QRT0mJKI -x+XlZEdhR3n9wFHxwZnn3M5q+6+1ATDcRhzviuyV79z/rxAc653YsKpqhRgNF8k+v/Gb0AmJQv2g -QrSdiVFVKc8bcLyEVK3BEx+Y9C52YItdP5qtygy/p1Zbj3e41Z55SZI/4PGXJHpsmxcPbe9TmJEr -5A++WXkHeLuXlfSfadRYhwqp48y2WBmfJiGxxFmNskF1wK1pzpwACPI2/z7woQ8arBT9pmAPAgMB -AAGjQzBBMB0GA1UdDgQWBBTZN7NOBf3Zz58SFq62iS/rJTqIHDAPBgNVHQ8BAf8EBQMDBwYAMA8G -A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAHJglrfJ3NgpXiOFX7KzLXb7iNcX/ntt -Rbj2hWyfIvwqECLsqrkw9qtY1jkQMZkpAL2JZkH7dN6RwRgLn7Vhy506vvWolKMiVW4XSf/SKfE4 -Jl3vpao6+XF75tpYHdN0wgH6PmlYX63LaL4ULptswLbcoCb6dxriJNoaN+BnrdFzgw2lGh1uEpJ+ -hGIAF728JRhX8tepb1mIvDS3LoV4nZbcFMMsilKbloxSZj2GFotHuFEJjOp9zYhys2AzsfAKRO8P -9Qk3iCQOLGsgOqL6EfJANZxEaGM7rDNvY7wsu/LSy3Z9fYjYHcgFHW68lKlmjHdxx/qR+i9Rnuk5 -UrbnBEI= ------END CERTIFICATE----- - -SwissSign Gold CA - G2 -====================== ------BEGIN CERTIFICATE----- -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 ------END CERTIFICATE----- - -SwissSign Silver CA - G2 -======================== ------BEGIN CERTIFICATE----- -MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCQ0gxFTAT -BgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMB4X -DTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0NlowRzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3 -aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG -9w0BAQEFAAOCAg8AMIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644 -N0MvFz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7brYT7QbNHm -+/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieFnbAVlDLaYQ1HTWBCrpJH -6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH6ATK72oxh9TAtvmUcXtnZLi2kUpCe2Uu -MGoM9ZDulebyzYLs2aFK7PayS+VFheZteJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5h -qAaEuSh6XzjZG6k4sIN/c8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5 -FZGkECwJMoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRHHTBs -ROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTfjNFusB3hB48IHpmc -celM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb65i/4z3GcRm25xBWNOHkDRUjvxF3X -CO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ -BAUwAwEB/zAdBgNVHQ4EFgQUF6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRB -tjpbO8tFnb0cwpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0 -cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBAHPGgeAn0i0P -4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShpWJHckRE1qTodvBqlYJ7YH39F -kWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L -3XWgwF15kIwb4FDm3jH+mHtwX6WQ2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx -/uNncqCxv1yL5PqZIseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFa -DGi8aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2Xem1ZqSqP -e97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQRdAtq/gsD/KNVV4n+Ssuu -WxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/OMpXEA29MC/HpeZBoNquBYeaoKRlbEwJ -DIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ub -DgEj8Z+7fNzcbBGXJbLytGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u ------END CERTIFICATE----- - -GeoTrust Primary Certification Authority -======================================== ------BEGIN CERTIFICATE----- -MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQG -EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMoR2VvVHJ1c3QgUHJpbWFyeSBD -ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgx -CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQ -cmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB -CgKCAQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9AWbK7hWN -b6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjAZIVcFU2Ix7e64HXprQU9 -nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE07e9GceBrAqg1cmuXm2bgyxx5X9gaBGge -RwLmnWDiNpcB3841kt++Z8dtd1k7j53WkBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGt -tm/81w7a4DSwDRp35+MImO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD -AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJKoZI -hvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ16CePbJC/kRYkRj5K -Ts4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl4b7UVXGYNTq+k+qurUKykG/g/CFN -NWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6KoKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHa -Floxt/m0cYASSJlyc1pZU8FjUjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG -1riR/aYNKxoUAT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk= ------END CERTIFICATE----- - -thawte Primary Root CA -====================== ------BEGIN CERTIFICATE----- -MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCBqTELMAkGA1UE -BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2 -aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv -cml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3 -MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwg -SW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMv -KGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMT -FnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCs -oPD7gFnUnMekz52hWXMJEEUMDSxuaPFsW0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ -1CRfBsDMRJSUjQJib+ta3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGc -q/gcfomk6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6Sk/K -aAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94JNqR32HuHUETVPm4p -afs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYD -VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XPr87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUF -AAOCAQEAeRHAS7ORtvzw6WfUDW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeE -uzLlQRHAd9mzYJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX -xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2/qxAeeWsEG89 -jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/LHbTY5xZ3Y+m4Q6gLkH3LpVH -z7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7jVaMaA== ------END CERTIFICATE----- - -VeriSign Class 3 Public Primary Certification Authority - G5 -============================================================ ------BEGIN CERTIFICATE----- -MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE -BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO -ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk -IHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRp -ZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCB -yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2ln -biBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBh -dXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmlt -YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw -ggEKAoIBAQCvJAgIKXo1nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKz -j/i5Vbext0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIzSdhD -Y2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQGBO+QueQA5N06tRn/ -Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+rCpSx4/VBEnkjWNHiDxpg8v+R70r -fk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/ -BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2Uv -Z2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy -aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKvMzEzMA0GCSqG -SIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzEp6B4Eq1iDkVwZMXnl2YtmAl+ -X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKE -KQsTb47bDN0lAtukixlE0kF6BWlKWE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiC -Km0oHw0LxOXnGiYZ4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vE -ZV8NhnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq ------END CERTIFICATE----- - -SecureTrust CA -============== ------BEGIN CERTIFICATE----- -MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBIMQswCQYDVQQG -EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xFzAVBgNVBAMTDlNlY3VyZVRy -dXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIzMTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAe -BgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCC -ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQX -OZEzZum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO0gMdA+9t -DWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIaowW8xQmxSPmjL8xk037uH -GFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b -01k/unK8RCSc43Oz969XL0Imnal0ugBS8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmH -ursCAwEAAaOBnTCBmjATBgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/ -BAUwAwEB/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCegJYYj -aHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ -KoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt36Z3q059c4EVlew3KW+JwULKUBRSu -SceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHf -mbx8IVQr5Fiiu1cprp6poxkmD5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZ -nMUFdAvnZyPSCPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR -3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE= ------END CERTIFICATE----- - -Secure Global CA -================ ------BEGIN CERTIFICATE----- -MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQG -EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBH -bG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkxMjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEg -MB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwg -Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jx -YDiJiQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa/FHtaMbQ -bqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJjnIFHovdRIWCQtBJwB1g -8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnIHmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYV -HDGA76oYa8J719rO+TMg1fW9ajMtgQT7sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi -0XPnj3pDAgMBAAGjgZ0wgZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud -EwEB/wQFMAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCswKaAn -oCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsGAQQBgjcVAQQDAgEA -MA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0LURYD7xh8yOOvaliTFGCRsoTciE6+ -OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXOH0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cn -CDpOGR86p1hcF895P4vkp9MmI50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/5 -3CYNv6ZHdAbYiNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc -f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW ------END CERTIFICATE----- - -COMODO Certification Authority -============================== ------BEGIN CERTIFICATE----- -MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCBgTELMAkGA1UE -BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG -A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNVBAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1 -dGhvcml0eTAeFw0wNjEyMDEwMDAwMDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEb -MBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFD -T01PRE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3UcEbVASY06m/weaKXTuH -+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI2GqGd0S7WWaXUF601CxwRM/aN5VCaTww -xHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV -4EajcNxo2f8ESIl33rXp+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA -1KGzqSX+DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5OnKVI -rLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW/zAOBgNVHQ8BAf8E -BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6gPKA6hjhodHRwOi8vY3JsLmNvbW9k -b2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOC -AQEAPpiem/Yb6dc5t3iuHXIYSdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CP -OGEIqB6BCsAvIC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/ -RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4zJVSk/BwJVmc -IGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5ddBA6+C4OmF4O5MBKgxTMVBbkN -+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IBZQ== ------END CERTIFICATE----- - -Network Solutions Certificate Authority -======================================= ------BEGIN CERTIFICATE----- -MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQG -EwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydOZXR3b3Jr -IFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMx -MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu -MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G -CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwzc7MEL7xx -jOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPPOCwGJgl6cvf6UDL4wpPT -aaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rlmGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXT -crA/vGp97Eh/jcOrqnErU2lBUzS1sLnFBgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc -/Qzpf14Dl847ABSHJ3A4qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMB -AAGjgZcwgZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIBBjAP -BgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwubmV0c29sc3NsLmNv -bS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3JpdHkuY3JsMA0GCSqGSIb3DQEBBQUA -A4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc86fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q -4LqILPxFzBiwmZVRDuwduIj/h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/ -GGUsyfJj4akH/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv -wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHNpGxlaKFJdlxD -ydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey ------END CERTIFICATE----- - -WellsSecure Public Root Certificate Authority -============================================= ------BEGIN CERTIFICATE----- -MIIEvTCCA6WgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoM -F1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYw -NAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN -MDcxMjEzMTcwNzU0WhcNMjIxMjE0MDAwNzU0WjCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dl -bGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYD -VQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G -CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDub7S9eeKPCCGeOARBJe+rWxxTkqxtnt3CxC5FlAM1 -iGd0V+PfjLindo8796jE2yljDpFoNoqXjopxaAkH5OjUDk/41itMpBb570OYj7OeUt9tkTmPOL13 -i0Nj67eT/DBMHAGTthP796EfvyXhdDcsHqRePGj4S78NuR4uNuip5Kf4D8uCdXw1LSLWwr8L87T8 -bJVhHlfXBIEyg1J55oNjz7fLY4sR4r1e6/aN7ZVyKLSsEmLpSjPmgzKuBXWVvYSV2ypcm44uDLiB -K0HmOFafSZtsdvqKXfcBeYF8wYNABf5x/Qw/zE5gCQ5lRxAvAcAFP4/4s0HvWkJ+We/SlwxlAgMB -AAGjggE0MIIBMDAPBgNVHRMBAf8EBTADAQH/MDkGA1UdHwQyMDAwLqAsoCqGKGh0dHA6Ly9jcmwu -cGtpLndlbGxzZmFyZ28uY29tL3dzcHJjYS5jcmwwDgYDVR0PAQH/BAQDAgHGMB0GA1UdDgQWBBQm -lRkQ2eihl5H/3BnZtQQ+0nMKajCBsgYDVR0jBIGqMIGngBQmlRkQ2eihl5H/3BnZtQQ+0nMKaqGB -i6SBiDCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRww -GgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMg -Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCAQEwDQYJKoZIhvcNAQEFBQADggEBALkVsUSRzCPI -K0134/iaeycNzXK7mQDKfGYZUMbVmO2rvwNa5U3lHshPcZeG1eMd/ZDJPHV3V3p9+N701NX3leZ0 -bh08rnyd2wIDBSxxSyU+B+NemvVmFymIGjifz6pBA4SXa5M4esowRBskRDPQ5NHcKDj0E0M1NSlj -qHyita04pO2t/caaH/+Xc/77szWnk4bGdpEA5qxRFsQnMlzbc9qlk1eOPm01JghZ1edE13YgY+es -E2fDbbFwRnzVlhE9iW9dqKHrjQrawx0zbKPqZxmamX9LPYNRKh3KL4YMon4QLSvUFpULB6ouFJJJ -tylv2G0xffX8oRAHh84vWdw+WNs= ------END CERTIFICATE----- - -COMODO ECC Certification Authority -================================== ------BEGIN CERTIFICATE----- -MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTELMAkGA1UEBhMC -R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE -ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBB -dXRob3JpdHkwHhcNMDgwMzA2MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0Ix -GzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR -Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRo -b3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSRFtSrYpn1PlILBs5BAH+X -4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0JcfRK9ChQtP6IHG4/bC8vCVlbpVsLM5ni -wz2J+Wos77LTBumjQjBAMB0GA1UdDgQWBBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8E -BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VG -FAkK+qDmfQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdvGDeA -U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY= ------END CERTIFICATE----- - -IGC/A -===== ------BEGIN CERTIFICATE----- -MIIEAjCCAuqgAwIBAgIFORFFEJQwDQYJKoZIhvcNAQEFBQAwgYUxCzAJBgNVBAYTAkZSMQ8wDQYD -VQQIEwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVE -Q1NTSTEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZy -MB4XDTAyMTIxMzE0MjkyM1oXDTIwMTAxNzE0MjkyMlowgYUxCzAJBgNVBAYTAkZSMQ8wDQYDVQQI -EwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVEQ1NT -STEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZyMIIB -IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsh/R0GLFMzvABIaIs9z4iPf930Pfeo2aSVz2 -TqrMHLmh6yeJ8kbpO0px1R2OLc/mratjUMdUC24SyZA2xtgv2pGqaMVy/hcKshd+ebUyiHDKcMCW -So7kVc0dJ5S/znIq7Fz5cyD+vfcuiWe4u0dzEvfRNWk68gq5rv9GQkaiv6GFGvm/5P9JhfejcIYy -HF2fYPepraX/z9E0+X1bF8bc1g4oa8Ld8fUzaJ1O/Id8NhLWo4DoQw1VYZTqZDdH6nfK0LJYBcNd -frGoRpAxVs5wKpayMLh35nnAvSk7/ZR3TL0gzUEl4C7HG7vupARB0l2tEmqKm0f7yd1GQOGdPDPQ -tQIDAQABo3cwdTAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBRjAVBgNVHSAEDjAMMAoGCCqB -egF5AQEBMB0GA1UdDgQWBBSjBS8YYFDCiQrdKyFP/45OqDAxNjAfBgNVHSMEGDAWgBSjBS8YYFDC -iQrdKyFP/45OqDAxNjANBgkqhkiG9w0BAQUFAAOCAQEABdwm2Pp3FURo/C9mOnTgXeQp/wYHE4RK -q89toB9RlPhJy3Q2FLwV3duJL92PoF189RLrn544pEfMs5bZvpwlqwN+Mw+VgQ39FuCIvjfwbF3Q -MZsyK10XZZOYYLxuj7GoPB7ZHPOpJkL5ZB3C55L29B5aqhlSXa/oovdgoPaN8In1buAKBQGVyYsg -Crpa/JosPL3Dt8ldeCUFP1YUmwza+zpI/pdpXsoQhvdOlgQITeywvl3cO45Pwf2aNjSaTFR+FwNI -lQgRHAdvhQh+XU3Endv7rs6y0bO4g2wdsrN58dhwmX7wEwLOXt1R0982gaEbeC9xs/FZTEYYKKuF -0mBWWg== ------END CERTIFICATE----- - -Security Communication EV RootCA1 -================================= ------BEGIN CERTIFICATE----- -MIIDfTCCAmWgAwIBAgIBADANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJKUDElMCMGA1UEChMc -U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEqMCgGA1UECxMhU2VjdXJpdHkgQ29tbXVuaWNh -dGlvbiBFViBSb290Q0ExMB4XDTA3MDYwNjAyMTIzMloXDTM3MDYwNjAyMTIzMlowYDELMAkGA1UE -BhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xKjAoBgNVBAsTIVNl -Y3VyaXR5IENvbW11bmljYXRpb24gRVYgUm9vdENBMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC -AQoCggEBALx/7FebJOD+nLpCeamIivqA4PUHKUPqjgo0No0c+qe1OXj/l3X3L+SqawSERMqm4miO -/VVQYg+kcQ7OBzgtQoVQrTyWb4vVog7P3kmJPdZkLjjlHmy1V4qe70gOzXppFodEtZDkBp2uoQSX -WHnvIEqCa4wiv+wfD+mEce3xDuS4GBPMVjZd0ZoeUWs5bmB2iDQL87PRsJ3KYeJkHcFGB7hj3R4z -ZbOOCVVSPbW9/wfrrWFVGCypaZhKqkDFMxRldAD5kd6vA0jFQFTcD4SQaCDFkpbcLuUCRarAX1T4 -bepJz11sS6/vmsJWXMY1VkJqMF/Cq/biPT+zyRGPMUzXn0kCAwEAAaNCMEAwHQYDVR0OBBYEFDVK -9U2vP9eCOKyrcWUXdYydVZPmMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqG -SIb3DQEBBQUAA4IBAQCoh+ns+EBnXcPBZsdAS5f8hxOQWsTvoMpfi7ent/HWtWS3irO4G8za+6xm -iEHO6Pzk2x6Ipu0nUBsCMCRGef4Eh3CXQHPRwMFXGZpppSeZq51ihPZRwSzJIxXYKLerJRO1RuGG -Av8mjMSIkh1W/hln8lXkgKNrnKt34VFxDSDbEJrbvXZ5B3eZKK2aXtqxT0QsNY6llsf9g/BYxnnW -mHyojf6GPgcWkuF75x3sM3Z+Qi5KhfmRiWiEA4Glm5q+4zfFVKtWOxgtQaQM+ELbmaDgcm+7XeEW -T1MKZPlO9L9OVL14bIjqv5wTJMJwaaJ/D8g8rQjJsJhAoyrniIPtd490 ------END CERTIFICATE----- - -OISTE WISeKey Global Root GA CA -=============================== ------BEGIN CERTIFICATE----- -MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCBijELMAkGA1UE -BhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHlyaWdodCAoYykgMjAwNTEiMCAG -A1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBH -bG9iYWwgUm9vdCBHQSBDQTAeFw0wNTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYD -VQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIw -IAYDVQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5 -IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy0+zAJs9 -Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxRVVuuk+g3/ytr6dTqvirdqFEr12bDYVxg -Asj1znJ7O7jyTmUIms2kahnBAbtzptf2w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbD -d50kc3vkDIzh2TbhmYsFmQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ -/yxViJGg4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t94B3R -LoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw -AwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ -KoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOxSPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vIm -MMkQyh2I+3QZH4VFvbBsUfk2ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4 -+vg1YFkCExh8vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa -hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZiFj4A4xylNoEY -okxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ/L7fCg0= ------END CERTIFICATE----- - -Microsec e-Szigno Root CA -========================= ------BEGIN CERTIFICATE----- -MIIHqDCCBpCgAwIBAgIRAMy4579OKRr9otxmpRwsDxEwDQYJKoZIhvcNAQEFBQAwcjELMAkGA1UE -BhMCSFUxETAPBgNVBAcTCEJ1ZGFwZXN0MRYwFAYDVQQKEw1NaWNyb3NlYyBMdGQuMRQwEgYDVQQL -EwtlLVN6aWdubyBDQTEiMCAGA1UEAxMZTWljcm9zZWMgZS1Temlnbm8gUm9vdCBDQTAeFw0wNTA0 -MDYxMjI4NDRaFw0xNzA0MDYxMjI4NDRaMHIxCzAJBgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVz -dDEWMBQGA1UEChMNTWljcm9zZWMgTHRkLjEUMBIGA1UECxMLZS1Temlnbm8gQ0ExIjAgBgNVBAMT -GU1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB -AQDtyADVgXvNOABHzNuEwSFpLHSQDCHZU4ftPkNEU6+r+ICbPHiN1I2uuO/TEdyB5s87lozWbxXG -d36hL+BfkrYn13aaHUM86tnsL+4582pnS4uCzyL4ZVX+LMsvfUh6PXX5qqAnu3jCBspRwn5mS6/N -oqdNAoI/gqyFxuEPkEeZlApxcpMqyabAvjxWTHOSJ/FrtfX9/DAFYJLG65Z+AZHCabEeHXtTRbjc -QR/Ji3HWVBTji1R4P770Yjtb9aPs1ZJ04nQw7wHb4dSrmZsqa/i9phyGI0Jf7Enemotb9HI6QMVJ -PqW+jqpx62z69Rrkav17fVVA71hu5tnVvCSrwe+3AgMBAAGjggQ3MIIEMzBnBggrBgEFBQcBAQRb -MFkwKAYIKwYBBQUHMAGGHGh0dHBzOi8vcmNhLmUtc3ppZ25vLmh1L29jc3AwLQYIKwYBBQUHMAKG -IWh0dHA6Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNydDAPBgNVHRMBAf8EBTADAQH/MIIBcwYD -VR0gBIIBajCCAWYwggFiBgwrBgEEAYGoGAIBAQEwggFQMCgGCCsGAQUFBwIBFhxodHRwOi8vd3d3 -LmUtc3ppZ25vLmh1L1NaU1ovMIIBIgYIKwYBBQUHAgIwggEUHoIBEABBACAAdABhAG4A+gBzAO0A -dAB2AOEAbgB5ACAA6QByAHQAZQBsAG0AZQB6AOkAcwDpAGgAZQB6ACAA6QBzACAAZQBsAGYAbwBn -AGEAZADhAHMA4QBoAG8AegAgAGEAIABTAHoAbwBsAGcA4QBsAHQAYQB0APMAIABTAHoAbwBsAGcA -4QBsAHQAYQB0AOEAcwBpACAAUwB6AGEAYgDhAGwAeQB6AGEAdABhACAAcwB6AGUAcgBpAG4AdAAg -AGsAZQBsAGwAIABlAGwAagDhAHIAbgBpADoAIABoAHQAdABwADoALwAvAHcAdwB3AC4AZQAtAHMA -egBpAGcAbgBvAC4AaAB1AC8AUwBaAFMAWgAvMIHIBgNVHR8EgcAwgb0wgbqggbeggbSGIWh0dHA6 -Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNybIaBjmxkYXA6Ly9sZGFwLmUtc3ppZ25vLmh1L0NO -PU1pY3Jvc2VjJTIwZS1Temlnbm8lMjBSb290JTIwQ0EsT1U9ZS1Temlnbm8lMjBDQSxPPU1pY3Jv -c2VjJTIwTHRkLixMPUJ1ZGFwZXN0LEM9SFU/Y2VydGlmaWNhdGVSZXZvY2F0aW9uTGlzdDtiaW5h -cnkwDgYDVR0PAQH/BAQDAgEGMIGWBgNVHREEgY4wgYuBEGluZm9AZS1zemlnbm8uaHWkdzB1MSMw -IQYDVQQDDBpNaWNyb3NlYyBlLVN6aWduw7MgUm9vdCBDQTEWMBQGA1UECwwNZS1TemlnbsOzIEhT -WjEWMBQGA1UEChMNTWljcm9zZWMgS2Z0LjERMA8GA1UEBxMIQnVkYXBlc3QxCzAJBgNVBAYTAkhV -MIGsBgNVHSMEgaQwgaGAFMegSXUWYYTbMUuE0vE3QJDvTtz3oXakdDByMQswCQYDVQQGEwJIVTER -MA8GA1UEBxMIQnVkYXBlc3QxFjAUBgNVBAoTDU1pY3Jvc2VjIEx0ZC4xFDASBgNVBAsTC2UtU3pp -Z25vIENBMSIwIAYDVQQDExlNaWNyb3NlYyBlLVN6aWdubyBSb290IENBghEAzLjnv04pGv2i3Gal -HCwPETAdBgNVHQ4EFgQUx6BJdRZhhNsxS4TS8TdAkO9O3PcwDQYJKoZIhvcNAQEFBQADggEBANMT -nGZjWS7KXHAM/IO8VbH0jgdsZifOwTsgqRy7RlRw7lrMoHfqaEQn6/Ip3Xep1fvj1KcExJW4C+FE -aGAHQzAxQmHl7tnlJNUb3+FKG6qfx1/4ehHqE5MAyopYse7tDk2016g2JnzgOsHVV4Lxdbb9iV/a -86g4nzUGCM4ilb7N1fy+W955a9x6qWVmvrElWl/tftOsRm1M9DKHtCAE4Gx4sHfRhUZLphK3dehK -yVZs15KrnfVJONJPU+NVkBHbmJbGSfI+9J8b4PeI3CVimUTYc78/MPMMNz7UwiiAc7EBt51alhQB -S6kRnSlqLtBdgcDPsiBDxwPgN05dCtxZICU= ------END CERTIFICATE----- - -Certigna -======== ------BEGIN CERTIFICATE----- -MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNVBAYTAkZSMRIw -EAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4XDTA3MDYyOTE1MTMwNVoXDTI3 -MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwI -Q2VydGlnbmEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7q -XOEm7RFHYeGifBZ4QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyH -GxnygQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbwzBfsV1/p -ogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q130yGLMLLGq/jj8UEYkg -DncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKf -Irjxwo1p3Po6WAbfAgMBAAGjgbwwgbkwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQ -tCRZvgHyUtVF9lo53BEwZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJ -BgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzjAQ/J -SP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQUFAAOCAQEA -hQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8hbV6lUmPOEvjvKtpv6zf+EwLHyzs+ -ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFncfca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1klu -PBS1xp81HlDQwY9qcEQCYsuuHWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY -1gkIl2PlwS6wt0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw -WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg== ------END CERTIFICATE----- - -TC TrustCenter Class 2 CA II -============================ ------BEGIN CERTIFICATE----- -MIIEqjCCA5KgAwIBAgIOLmoAAQACH9dSISwRXDswDQYJKoZIhvcNAQEFBQAwdjELMAkGA1UEBhMC -REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNVBAsTGVRDIFRydXN0Q2VudGVy -IENsYXNzIDIgQ0ExJTAjBgNVBAMTHFRDIFRydXN0Q2VudGVyIENsYXNzIDIgQ0EgSUkwHhcNMDYw -MTEyMTQzODQzWhcNMjUxMjMxMjI1OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1 -c3RDZW50ZXIgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQTElMCMGA1UE -AxMcVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC -AQoCggEBAKuAh5uO8MN8h9foJIIRszzdQ2Lu+MNF2ujhoF/RKrLqk2jftMjWQ+nEdVl//OEd+DFw -IxuInie5e/060smp6RQvkL4DUsFJzfb95AhmC1eKokKguNV/aVyQMrKXDcpK3EY+AlWJU+MaWss2 -xgdW94zPEfRMuzBwBJWl9jmM/XOBCH2JXjIeIqkiRUuwZi4wzJ9l/fzLganx4Duvo4bRierERXlQ -Xa7pIXSSTYtZgo+U4+lK8edJsBTj9WLL1XK9H7nSn6DNqPoByNkN39r8R52zyFTfSUrxIan+GE7u -SNQZu+995OKdy1u2bv/jzVrndIIFuoAlOMvkaZ6vQaoahPUCAwEAAaOCATQwggEwMA8GA1UdEwEB -/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTjq1RMgKHbVkO3kUrL84J6E1wIqzCB -7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRydXN0Y2VudGVyLmRlL2NybC92Mi90 -Y19jbGFzc18yX2NhX0lJLmNybIaBn2xkYXA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBU -cnVzdENlbnRlciUyMENsYXNzJTIwMiUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21i -SCxPVT1yb290Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u -TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEAjNfffu4bgBCzg/XbEeprS6iSGNn3Bzn1LL4G -dXpoUxUc6krtXvwjshOg0wn/9vYua0Fxec3ibf2uWWuFHbhOIprtZjluS5TmVfwLG4t3wVMTZonZ -KNaL80VKY7f9ewthXbhtvsPcW3nS7Yblok2+XnR8au0WOB9/WIFaGusyiC2y8zl3gK9etmF1Kdsj -TYjKUCjLhdLTEKJZbtOTVAB6okaVhgWcqRmY5TFyDADiZ9lA4CQze28suVyrZZ0srHbqNZn1l7kP -JOzHdiEoZa5X6AeIdUpWoNIFOqTmjZKILPPy4cHGYdtBxceb9w4aUUXCYWvcZCcXjFq32nQozZfk -vQ== ------END CERTIFICATE----- - -TC TrustCenter Universal CA I -============================= ------BEGIN CERTIFICATE----- -MIID3TCCAsWgAwIBAgIOHaIAAQAC7LdggHiNtgYwDQYJKoZIhvcNAQEFBQAweTELMAkGA1UEBhMC -REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNVBAsTG1RDIFRydXN0Q2VudGVy -IFVuaXZlcnNhbCBDQTEmMCQGA1UEAxMdVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBIEkwHhcN -MDYwMzIyMTU1NDI4WhcNMjUxMjMxMjI1OTU5WjB5MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMg -VHJ1c3RDZW50ZXIgR21iSDEkMCIGA1UECxMbVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBMSYw -JAYDVQQDEx1UQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0EgSTCCASIwDQYJKoZIhvcNAQEBBQAD -ggEPADCCAQoCggEBAKR3I5ZEr5D0MacQ9CaHnPM42Q9e3s9B6DGtxnSRJJZ4Hgmgm5qVSkr1YnwC -qMqs+1oEdjneX/H5s7/zA1hV0qq34wQi0fiU2iIIAI3TfCZdzHd55yx4Oagmcw6iXSVphU9VDprv -xrlE4Vc93x9UIuVvZaozhDrzznq+VZeujRIPFDPiUHDDSYcTvFHe15gSWu86gzOSBnWLknwSaHtw -ag+1m7Z3W0hZneTvWq3zwZ7U10VOylY0Ibw+F1tvdwxIAUMpsN0/lm7mlaoMwCC2/T42J5zjXM9O -gdwZu5GQfezmlwQek8wiSdeXhrYTCjxDI3d+8NzmzSQfO4ObNDqDNOMCAwEAAaNjMGEwHwYDVR0j -BBgwFoAUkqR1LKSevoFE63n8isWVpesQdXMwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC -AYYwHQYDVR0OBBYEFJKkdSyknr6BROt5/IrFlaXrEHVzMA0GCSqGSIb3DQEBBQUAA4IBAQAo0uCG -1eb4e/CX3CJrO5UUVg8RMKWaTzqwOuAGy2X17caXJ/4l8lfmXpWMPmRgFVp/Lw0BxbFg/UU1z/Cy -vwbZ71q+s2IhtNerNXxTPqYn8aEt2hojnczd7Dwtnic0XQ/CNnm8yUpiLe1r2X1BQ3y2qsrtYbE3 -ghUJGooWMNjsydZHcnhLEEYUjl8Or+zHL6sQ17bxbuyGssLoDZJz3KL0Dzq/YSMQiZxIQG5wALPT -ujdEWBF6AmqI8Dc08BnprNRlc/ZpjGSUOnmFKbAWKwyCPwacx/0QK54PLLae4xW/2TYcuiUaUj0a -7CIMHOCkoj3w6DnPgcB77V0fb8XQC9eY ------END CERTIFICATE----- - -Deutsche Telekom Root CA 2 -========================== ------BEGIN CERTIFICATE----- -MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMT -RGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEG -A1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENBIDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5 -MjM1OTAwWjBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0G -A1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBS -b290IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEUha88EOQ5 -bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhCQN/Po7qCWWqSG6wcmtoI -KyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1MjwrrFDa1sPeg5TKqAyZMg4ISFZbavva4VhY -AUlfckE8FQYBjl2tqriTtM2e66foai1SNNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aK -Se5TBY8ZTNXeWHmb0mocQqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTV -jlsB9WoHtxa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAPBgNV -HRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAlGRZrTlk5ynr -E/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756AbrsptJh6sTtU6zkXR34ajgv8HzFZMQSy -zhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpaIzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8 -rZ7/gFnkm0W09juwzTkZmDLl6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4G -dyd1Lx+4ivn+xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU -Cm26OWMohpLzGITY+9HPBVZkVw== ------END CERTIFICATE----- - -ComSign Secured CA -================== ------BEGIN CERTIFICATE----- -MIIDqzCCApOgAwIBAgIRAMcoRwmzuGxFjB36JPU2TukwDQYJKoZIhvcNAQEFBQAwPDEbMBkGA1UE -AxMSQ29tU2lnbiBTZWN1cmVkIENBMRAwDgYDVQQKEwdDb21TaWduMQswCQYDVQQGEwJJTDAeFw0w -NDAzMjQxMTM3MjBaFw0yOTAzMTYxNTA0NTZaMDwxGzAZBgNVBAMTEkNvbVNpZ24gU2VjdXJlZCBD -QTEQMA4GA1UEChMHQ29tU2lnbjELMAkGA1UEBhMCSUwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw -ggEKAoIBAQDGtWhfHZQVw6QIVS3joFd67+l0Kru5fFdJGhFeTymHDEjWaueP1H5XJLkGieQcPOqs -49ohgHMhCu95mGwfCP+hUH3ymBvJVG8+pSjsIQQPRbsHPaHA+iqYHU4Gk/v1iDurX8sWv+bznkqH -7Rnqwp9D5PGBpX8QTz7RSmKtUxvLg/8HZaWSLWapW7ha9B20IZFKF3ueMv5WJDmyVIRD9YTC2LxB -kMyd1mja6YJQqTtoz7VdApRgFrFD2UNd3V2Hbuq7s8lr9gOUCXDeFhF6K+h2j0kQmHe5Y1yLM5d1 -9guMsqtb3nQgJT/j8xH5h2iGNXHDHYwt6+UarA9z1YJZQIDTAgMBAAGjgacwgaQwDAYDVR0TBAUw -AwEB/zBEBgNVHR8EPTA7MDmgN6A1hjNodHRwOi8vZmVkaXIuY29tc2lnbi5jby5pbC9jcmwvQ29t -U2lnblNlY3VyZWRDQS5jcmwwDgYDVR0PAQH/BAQDAgGGMB8GA1UdIwQYMBaAFMFL7XC29z58ADsA -j8c+DkWfHl3sMB0GA1UdDgQWBBTBS+1wtvc+fAA7AI/HPg5Fnx5d7DANBgkqhkiG9w0BAQUFAAOC -AQEAFs/ukhNQq3sUnjO2QiBq1BW9Cav8cujvR3qQrFHBZE7piL1DRYHjZiM/EoZNGeQFsOY3wo3a -BijJD4mkU6l1P7CW+6tMM1X5eCZGbxs2mPtCdsGCuY7e+0X5YxtiOzkGynd6qDwJz2w2PQ8KRUtp -FhpFfTMDZflScZAmlaxMDPWLkz/MdXSFmLr/YnpNH4n+rr2UAJm/EaXc4HnFFgt9AmEd6oX5AhVP -51qJThRv4zdLhfXBPGHg/QVBspJ/wx2g0K5SZGBrGMYmnNj1ZOQ2GmKfig8+/21OGVZOIJFsnzQz -OjRXUDpvgV4GxvU+fE6OK85lBi5d0ipTdF7Tbieejw== ------END CERTIFICATE----- - -Cybertrust Global Root -====================== ------BEGIN CERTIFICATE----- -MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYGA1UEChMPQ3li -ZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBSb290MB4XDTA2MTIxNTA4 -MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQD -ExZDeWJlcnRydXN0IEdsb2JhbCBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA -+Mi8vRRQZhP/8NN57CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW -0ozSJ8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2yHLtgwEZL -AfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iPt3sMpTjr3kfb1V05/Iin -89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNzFtApD0mpSPCzqrdsxacwOUBdrsTiXSZT -8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAYXSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAP -BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2 -MDSgMqAwhi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3JsMB8G -A1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUAA4IBAQBW7wojoFRO -lZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMjWqd8BfP9IjsO0QbE2zZMcwSO5bAi -5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUxXOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2 -hO0j9n0Hq0V+09+zv+mKts2oomcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+T -X3EJIrduPuocA06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW -WL1WMRJOEcgh4LMRkWXbtKaIOM5V ------END CERTIFICATE----- - -ePKI Root Certification Authority -================================= ------BEGIN CERTIFICATE----- -MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBeMQswCQYDVQQG -EwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0ZC4xKjAoBgNVBAsMIWVQS0kg -Um9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMx -MjdaMF4xCzAJBgNVBAYTAlRXMSMwIQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEq -MCgGA1UECwwhZVBLSSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0B -AQEFAAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAHSyZbCUNs -IZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAhijHyl3SJCRImHJ7K2RKi -lTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3XDZoTM1PRYfl61dd4s5oz9wCGzh1NlDiv -qOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX -12ruOzjjK9SXDrkb5wdJfzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0O -WQqraffAsgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uUWH1+ -ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLSnT0IFaUQAS2zMnao -lQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pHdmX2Os+PYhcZewoozRrSgx4hxyy/ -vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJipNiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXi -Zo1jDiVN1Rmy5nk3pyKdVDECAwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/Qkqi -MAwGA1UdEwQFMAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH -ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGBuvl2ICO1J2B0 -1GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6YlPwZpVnPDimZI+ymBV3QGypzq -KOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkPJXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdV -xrsStZf0X4OFunHB2WyBEXYKCrC/gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEP -NXubrjlpC2JgQCA2j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+r -GNm65ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUBo2M3IUxE -xJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS/jQ6fbjpKdx2qcgw+BRx -gMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2zGp1iro2C6pSe3VkQw63d4k3jMdXH7Ojy -sP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTEW9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmOD -BCEIZ43ygknQW/2xzQ+DhNQ+IIX3Sj0rnP0qCglN6oH4EZw= ------END CERTIFICATE----- - -T\xc3\x9c\x42\xC4\xB0TAK UEKAE K\xC3\xB6k Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1 - S\xC3\xBCr\xC3\xBCm 3 -============================================================================================================================= ------BEGIN CERTIFICATE----- -MIIFFzCCA/+gAwIBAgIBETANBgkqhkiG9w0BAQUFADCCASsxCzAJBgNVBAYTAlRSMRgwFgYDVQQH -DA9HZWJ6ZSAtIEtvY2FlbGkxRzBFBgNVBAoMPlTDvHJraXllIEJpbGltc2VsIHZlIFRla25vbG9q -aWsgQXJhxZ90xLFybWEgS3VydW11IC0gVMOcQsSwVEFLMUgwRgYDVQQLDD9VbHVzYWwgRWxla3Ry -b25payB2ZSBLcmlwdG9sb2ppIEFyYcWfdMSxcm1hIEVuc3RpdMO8c8O8IC0gVUVLQUUxIzAhBgNV -BAsMGkthbXUgU2VydGlmaWthc3lvbiBNZXJrZXppMUowSAYDVQQDDEFUw5xCxLBUQUsgVUVLQUUg -S8O2ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSAtIFPDvHLDvG0gMzAeFw0wNzA4 -MjQxMTM3MDdaFw0xNzA4MjExMTM3MDdaMIIBKzELMAkGA1UEBhMCVFIxGDAWBgNVBAcMD0dlYnpl -IC0gS29jYWVsaTFHMEUGA1UECgw+VMO8cmtpeWUgQmlsaW1zZWwgdmUgVGVrbm9sb2ppayBBcmHF -n3TEsXJtYSBLdXJ1bXUgLSBUw5xCxLBUQUsxSDBGBgNVBAsMP1VsdXNhbCBFbGVrdHJvbmlrIHZl -IEtyaXB0b2xvamkgQXJhxZ90xLFybWEgRW5zdGl0w7xzw7wgLSBVRUtBRTEjMCEGA1UECwwaS2Ft -dSBTZXJ0aWZpa2FzeW9uIE1lcmtlemkxSjBIBgNVBAMMQVTDnELEsFRBSyBVRUtBRSBLw7ZrIFNl -cnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIC0gU8O8csO8bSAzMIIBIjANBgkqhkiG9w0B -AQEFAAOCAQ8AMIIBCgKCAQEAim1L/xCIOsP2fpTo6iBkcK4hgb46ezzb8R1Sf1n68yJMlaCQvEhO -Eav7t7WNeoMojCZG2E6VQIdhn8WebYGHV2yKO7Rm6sxA/OOqbLLLAdsyv9Lrhc+hDVXDWzhXcLh1 -xnnRFDDtG1hba+818qEhTsXOfJlfbLm4IpNQp81McGq+agV/E5wrHur+R84EpW+sky58K5+eeROR -6Oqeyjh1jmKwlZMq5d/pXpduIF9fhHpEORlAHLpVK/swsoHvhOPc7Jg4OQOFCKlUAwUp8MmPi+oL -hmUZEdPpCSPeaJMDyTYcIW7OjGbxmTDY17PDHfiBLqi9ggtm/oLL4eAagsNAgQIDAQABo0IwQDAd -BgNVHQ4EFgQUvYiHyY/2pAoLquvF/pEjnatKijIwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF -MAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAB18+kmPNOm3JpIWmgV050vQbTlswyb2zrgxvMTfvCr4 -N5EY3ATIZJkrGG2AA1nJrvhY0D7twyOfaTyGOBye79oneNGEN3GKPEs5z35FBtYt2IpNeBLWrcLT -y9LQQfMmNkqblWwM7uXRQydmwYj3erMgbOqwaSvHIOgMA8RBBZniP+Rr+KCGgceExh/VS4ESshYh -LBOhgLJeDEoTniDYYkCrkOpkSi+sDQESeUWoL4cZaMjihccwsnX5OD+ywJO0a+IDRM5noN+J1q2M -dqMTw5RhK2vZbMEHCiIHhWyFJEapvj+LeISCfiQMnf2BN+MlqO02TpUsyZyQ2uypQjyttgI= ------END CERTIFICATE----- - -Buypass Class 2 CA 1 -==================== ------BEGIN CERTIFICATE----- -MIIDUzCCAjugAwIBAgIBATANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU -QnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMiBDQSAxMB4XDTA2 -MTAxMzEwMjUwOVoXDTE2MTAxMzEwMjUwOVowSzELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBh -c3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDIgQ0EgMTCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAIs8B0XY9t/mx8q6jUPFR42wWsE425KEHK8T1A9vNkYgxC7M -cXA0ojTTNy7Y3Tp3L8DrKehc0rWpkTSHIln+zNvnma+WwajHQN2lFYxuyHyXA8vmIPLXl18xoS83 -0r7uvqmtqEyeIWZDO6i88wmjONVZJMHCR3axiFyCO7srpgTXjAePzdVBHfCuuCkslFJgNJQ72uA4 -0Z0zPhX0kzLFANq1KWYOOngPIVJfAuWSeyXTkh4vFZ2B5J2O6O+JzhRMVB0cgRJNcKi+EAUXfh/R -uFdV7c27UsKwHnjCTTZoy1YmwVLBvXb3WNVyfh9EdrsAiR0WnVE1703CVu9r4Iw7DekCAwEAAaNC -MEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUP42aWYv8e3uco684sDntkHGA1sgwDgYDVR0P -AQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQAVGn4TirnoB6NLJzKyQJHyIdFkhb5jatLPgcIV -1Xp+DCmsNx4cfHZSldq1fyOhKXdlyTKdqC5Wq2B2zha0jX94wNWZUYN/Xtm+DKhQ7SLHrQVMdvvt -7h5HZPb3J31cKA9FxVxiXqaakZG3Uxcu3K1gnZZkOb1naLKuBctN518fV4bVIJwo+28TOPX2EZL2 -fZleHwzoq0QkKXJAPTZSr4xYkHPB7GEseaHsh7U/2k3ZIQAw3pDaDtMaSKk+hQsUi4y8QZ5q9w5w -wDX3OaJdZtB7WZ+oRxKaJyOkLY4ng5IgodcVf/EuGO70SH8vf/GhGLWhC5SgYiAynB321O+/TIho ------END CERTIFICATE----- - -Buypass Class 3 CA 1 -==================== ------BEGIN CERTIFICATE----- -MIIDUzCCAjugAwIBAgIBAjANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU -QnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMyBDQSAxMB4XDTA1 -MDUwOTE0MTMwM1oXDTE1MDUwOTE0MTMwM1owSzELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBh -c3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDMgQ0EgMTCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAKSO13TZKWTeXx+HgJHqTjnmGcZEC4DVC69TB4sSveZn8AKx -ifZgisRbsELRwCGoy+Gb72RRtqfPFfV0gGgEkKBYouZ0plNTVUhjP5JW3SROjvi6K//zNIqeKNc0 -n6wv1g/xpC+9UrJJhW05NfBEMJNGJPO251P7vGGvqaMU+8IXF4Rs4HyI+MkcVyzwPX6UvCWThOia -AJpFBUJXgPROztmuOfbIUxAMZTpHe2DC1vqRycZxbL2RhzyRhkmr8w+gbCZ2Xhysm3HljbybIR6c -1jh+JIAVMYKWsUnTYjdbiAwKYjT+p0h+mbEwi5A3lRyoH6UsjfRVyNvdWQrCrXig9IsCAwEAAaNC -MEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUOBTmyPCppAP0Tj4io1vy1uCtQHQwDgYDVR0P -AQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQABZ6OMySU9E2NdFm/soT4JXJEVKirZgCFPBdy7 -pYmrEzMqnji3jG8CcmPHc3ceCQa6Oyh7pEfJYWsICCD8igWKH7y6xsL+z27sEzNxZy5p+qksP2bA -EllNC1QCkoS72xLvg3BweMhT+t/Gxv/ciC8HwEmdMldg0/L2mSlf56oBzKwzqBwKu5HEA6BvtjT5 -htOzdlSY9EqBs1OdTUDs5XcTRa9bqh/YL0yCe/4qxFi7T/ye/QNlGioOw6UgFpRreaaiErS7GqQj -el/wroQk5PMr+4okoyeYZdowdXb8GZHo2+ubPzK/QJcHJrrM85SFSnonk8+QQtS4Wxam58tAA915 ------END CERTIFICATE----- - -EBG Elektronik Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1 -========================================================================== ------BEGIN CERTIFICATE----- -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 ------END CERTIFICATE----- - -certSIGN ROOT CA -================ ------BEGIN CERTIFICATE----- -MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYTAlJPMREwDwYD -VQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTAeFw0wNjA3MDQxNzIwMDRa -Fw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UE -CxMQY2VydFNJR04gUk9PVCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7I -JUqOtdu0KBuqV5Do0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHH -rfAQUySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5dRdY4zTW2 -ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQOA7+j0xbm0bqQfWwCHTD -0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwvJoIQ4uNllAoEwF73XVv4EOLQunpL+943 -AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B -Af8EBAMCAcYwHQYDVR0OBBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IB -AQA+0hyJLjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecYMnQ8 -SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ44gx+FkagQnIl6Z0 -x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6IJd1hJyMctTEHBDa0GpC9oHRxUIlt -vBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNwi/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7Nz -TogVZ96edhBiIL5VaZVDADlN9u6wWk5JRFRYX0KD ------END CERTIFICATE----- - -CNNIC ROOT -========== ------BEGIN CERTIFICATE----- -MIIDVTCCAj2gAwIBAgIESTMAATANBgkqhkiG9w0BAQUFADAyMQswCQYDVQQGEwJDTjEOMAwGA1UE -ChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwHhcNMDcwNDE2MDcwOTE0WhcNMjcwNDE2MDcw -OTE0WjAyMQswCQYDVQQGEwJDTjEOMAwGA1UEChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1Qw -ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDTNfc/c3et6FtzF8LRb+1VvG7q6KR5smzD -o+/hn7E7SIX1mlwhIhAsxYLO2uOabjfhhyzcuQxauohV3/2q2x8x6gHx3zkBwRP9SFIhxFXf2tiz -VHa6dLG3fdfA6PZZxU3Iva0fFNrfWEQlMhkqx35+jq44sDB7R3IJMfAw28Mbdim7aXZOV/kbZKKT -VrdvmW7bCgScEeOAH8tjlBAKqeFkgjH5jCftppkA9nCTGPihNIaj3XrCGHn2emU1z5DrvTOTn1Or -czvmmzQgLx3vqR1jGqCA2wMv+SYahtKNu6m+UjqHZ0gNv7Sg2Ca+I19zN38m5pIEo3/PIKe38zrK -y5nLAgMBAAGjczBxMBEGCWCGSAGG+EIBAQQEAwIABzAfBgNVHSMEGDAWgBRl8jGtKvf33VKWCscC -wQ7vptU7ETAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIB/jAdBgNVHQ4EFgQUZfIxrSr3991S -lgrHAsEO76bVOxEwDQYJKoZIhvcNAQEFBQADggEBAEs17szkrr/Dbq2flTtLP1se31cpolnKOOK5 -Gv+e5m4y3R6u6jW39ZORTtpC4cMXYFDy0VwmuYK36m3knITnA3kXr5g9lNvHugDnuL8BV8F3RTIM -O/G0HAiw/VGgod2aHRM2mm23xzy54cXZF/qD1T0VoDy7HgviyJA/qIYM/PmLXoXLT1tLYhFHxUV8 -BS9BsZ4QaRuZluBVeftOhpm4lNqGOGqTo+fLbuXf6iFViZx9fX+Y9QCJ7uOEwFyWtcVG6kbghVW2 -G8kS1sHNzYDzAgE8yGnLRUhj2JTQ7IUOO04RZfSCjKY9ri4ilAnIXOo8gV0WKgOXFlUJ24pBgp5m -mxE= ------END CERTIFICATE----- - -ApplicationCA - Japanese Government -=================================== ------BEGIN CERTIFICATE----- -MIIDoDCCAoigAwIBAgIBMTANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJKUDEcMBoGA1UEChMT -SmFwYW5lc2UgR292ZXJubWVudDEWMBQGA1UECxMNQXBwbGljYXRpb25DQTAeFw0wNzEyMTIxNTAw -MDBaFw0xNzEyMTIxNTAwMDBaMEMxCzAJBgNVBAYTAkpQMRwwGgYDVQQKExNKYXBhbmVzZSBHb3Zl -cm5tZW50MRYwFAYDVQQLEw1BcHBsaWNhdGlvbkNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB -CgKCAQEAp23gdE6Hj6UG3mii24aZS2QNcfAKBZuOquHMLtJqO8F6tJdhjYq+xpqcBrSGUeQ3DnR4 -fl+Kf5Sk10cI/VBaVuRorChzoHvpfxiSQE8tnfWuREhzNgaeZCw7NCPbXCbkcXmP1G55IrmTwcrN -wVbtiGrXoDkhBFcsovW8R0FPXjQilbUfKW1eSvNNcr5BViCH/OlQR9cwFO5cjFW6WY2H/CPek9AE -jP3vbb3QesmlOmpyM8ZKDQUXKi17safY1vC+9D/qDihtQWEjdnjDuGWk81quzMKq2edY3rZ+nYVu -nyoKb58DKTCXKB28t89UKU5RMfkntigm/qJj5kEW8DOYRwIDAQABo4GeMIGbMB0GA1UdDgQWBBRU -WssmP3HMlEYNllPqa0jQk/5CdTAOBgNVHQ8BAf8EBAMCAQYwWQYDVR0RBFIwUKROMEwxCzAJBgNV -BAYTAkpQMRgwFgYDVQQKDA/ml6XmnKzlm73mlL/lupwxIzAhBgNVBAsMGuOCouODl+ODquOCseOD -vOOCt+ODp+ODs0NBMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADlqRHZ3ODrs -o2dGD/mLBqj7apAxzn7s2tGJfHrrLgy9mTLnsCTWw//1sogJhyzjVOGjprIIC8CFqMjSnHH2HZ9g -/DgzE+Ge3Atf2hZQKXsvcJEPmbo0NI2VdMV+eKlmXb3KIXdCEKxmJj3ekav9FfBv7WxfEPjzFvYD -io+nEhEMy/0/ecGc/WLuo89UDNErXxc+4z6/wCs+CZv+iKZ+tJIX/COUgb1up8WMwusRRdv4QcmW -dupwX3kSa+SjB1oF7ydJzyGfikwJcGapJsErEU4z0g781mzSDjJkaP+tBXhfAx2o45CsJOAPQKdL -rosot4LKGAfmt1t06SAZf7IbiVQ= ------END CERTIFICATE----- - -GeoTrust Primary Certification Authority - G3 -============================================= ------BEGIN CERTIFICATE----- -MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UE -BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA4IEdlb1RydXN0 -IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFy -eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIz -NTk1OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAo -YykgMjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMT -LUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz+uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5j -K/BGvESyiaHAKAxJcCGVn2TAppMSAmUmhsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdE -c5IiaacDiGydY8hS2pgn5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3C -IShwiP/WJmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exALDmKu -dlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZChuOl1UcCAwEAAaNC -MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMR5yo6hTgMdHNxr -2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IBAQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9 -cr5HqQ6XErhK8WTTOd8lNNTBzU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbE -Ap7aDHdlDkQNkv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD -AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUHSJsMC8tJP33s -t/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2Gspki4cErx5z481+oghLrGREt ------END CERTIFICATE----- - -thawte Primary Root CA - G2 -=========================== ------BEGIN CERTIFICATE----- -MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDELMAkGA1UEBhMC -VVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMpIDIwMDcgdGhhd3RlLCBJbmMu -IC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3Qg -Q0EgLSBHMjAeFw0wNzExMDUwMDAwMDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEV -MBMGA1UEChMMdGhhd3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBG -b3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAt -IEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/BebfowJPDQfGAFG6DAJS -LSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6papu+7qzcMBniKI11KOasf2twu8x+qi5 -8/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU -mtgAMADna3+FGO6Lts6KDPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUN -G4k8VIZ3KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41oxXZ3K -rr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg== ------END CERTIFICATE----- - -thawte Primary Root CA - G3 -=========================== ------BEGIN CERTIFICATE----- -MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCBrjELMAkGA1UE -BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2 -aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv -cml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0w -ODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh -d3RlLCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9uMTgwNgYD -VQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIG -A1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A -MIIBCgKCAQEAsr8nLPvb2FvdeHsbnndmgcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2At -P0LMqmsywCPLLEHd5N/8YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC -+BsUa0Lfb1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS99irY -7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2SzhkGcuYMXDhpxwTW -vGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUkOQIDAQABo0IwQDAPBgNVHRMBAf8E -BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJ -KoZIhvcNAQELBQADggEBABpA2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweK -A3rD6z8KLFIWoCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu -t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7cKUGRIjxpp7sC -8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fMm7v/OeZWYdMKp8RcTGB7BXcm -er/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZuMdRAGmI0Nj81Aa6sY6A= ------END CERTIFICATE----- - -GeoTrust Primary Certification Authority - G2 -============================================= ------BEGIN CERTIFICATE----- -MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDELMAkGA1UEBhMC -VVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA3IEdlb1RydXN0IElu -Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBD -ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1 -OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg -MjAwNyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMTLUdl -b1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjB2MBAGByqGSM49AgEG -BSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcLSo17VDs6bl8VAsBQps8lL33KSLjHUGMc -KiEIfJo22Av+0SbFWDEwKCXzXV2juLaltJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYD -VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+ -EVXVMAoGCCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGTqQ7m -ndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBuczrD6ogRLQy7rQkgu2 -npaqBA+K ------END CERTIFICATE----- - -VeriSign Universal Root Certification Authority -=============================================== ------BEGIN CERTIFICATE----- -MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UE -BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO -ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk -IHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9u -IEF1dGhvcml0eTAeFw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJV -UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv -cmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl -IG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNhbCBSb290IENlcnRpZmljYXRpb24gQXV0 -aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj -1mCOkdeQmIN65lgZOIzF9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGP -MiJhgsWHH26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+HLL72 -9fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN/BMReYTtXlT2NJ8I -AfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPTrJ9VAMf2CGqUuV/c4DPxhGD5WycR -tPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0G -CCsGAQUFBwEMBGEwX6FdoFswWTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2O -a8PPgGrUSBgsexkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud -DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4sAPmLGd75JR3 -Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+seQxIcaBlVZaDrHC1LGmWazx -Y8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTx -P/jgdFcrGJ2BtMQo2pSXpXDrrB2+BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+P -wGZsY6rp2aQW9IHRlRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4 -mJO37M2CYfE45k+XmCpajQ== ------END CERTIFICATE----- - -VeriSign Class 3 Public Primary Certification Authority - G4 -============================================================ ------BEGIN CERTIFICATE----- -MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjELMAkGA1UEBhMC -VVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3 -b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVz -ZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmlj -YXRpb24gQXV0aG9yaXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjEL -MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBU -cnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo -b3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5 -IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8 -Utpkmw4tXNherJI9/gHmGUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGz -rl0Bp3vefLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUwAwEB -/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEw -HzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVyaXNpZ24u -Y29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMWkf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMD -A2gAMGUCMGYhDBgmYFo4e1ZC4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIx -AJw9SDkjOVgaFRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA== ------END CERTIFICATE----- - -NetLock Arany (Class Gold) FÅ‘tanúsítvány -============================================ ------BEGIN CERTIFICATE----- -MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQGEwJIVTERMA8G -A1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3MDUGA1UECwwuVGFuw7pzw610 -dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBB -cmFueSAoQ2xhc3MgR29sZCkgRsWRdGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgx -MjA2MTUwODIxWjCBpzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxO -ZXRMb2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlmaWNhdGlv -biBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNzIEdvbGQpIEbFkXRhbsO6 -c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxCRec75LbRTDofTjl5Bu -0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrTlF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw -/HpYzY6b7cNGbIRwXdrzAZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAk -H3B5r9s5VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRGILdw -fzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2BJtr+UBdADTHLpl1 -neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAGAQH/AgEEMA4GA1UdDwEB/wQEAwIB -BjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2MU9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwW -qZw8UQCgwBEIBaeZ5m8BiFRhbvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTta -YtOUZcTh5m2C+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC -bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2FuLjbvrW5Kfna -NwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2XjG4Kvte9nHfRCaexOYNkbQu -dZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E= ------END CERTIFICATE----- - -Staat der Nederlanden Root CA - G2 -================================== ------BEGIN CERTIFICATE----- -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 -66+KAQ== ------END CERTIFICATE----- - -CA Disig -======== ------BEGIN CERTIFICATE----- -MIIEDzCCAvegAwIBAgIBATANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQGEwJTSzETMBEGA1UEBxMK -QnJhdGlzbGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwHhcNMDYw -MzIyMDEzOTM0WhcNMTYwMzIyMDEzOTM0WjBKMQswCQYDVQQGEwJTSzETMBEGA1UEBxMKQnJhdGlz -bGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQCS9jHBfYj9mQGp2HvycXXxMcbzdWb6UShGhJd4NLxs/LxFWYgm -GErENx+hSkS943EE9UQX4j/8SFhvXJ56CbpRNyIjZkMhsDxkovhqFQ4/61HhVKndBpnXmjxUizkD -Pw/Fzsbrg3ICqB9x8y34dQjbYkzo+s7552oftms1grrijxaSfQUMbEYDXcDtab86wYqg6I7ZuUUo -hwjstMoVvoLdtUSLLa2GDGhibYVW8qwUYzrG0ZmsNHhWS8+2rT+MitcE5eN4TPWGqvWP+j1scaMt -ymfraHtuM6kMgiioTGohQBUgDCZbg8KpFhXAJIJdKxatymP2dACw30PEEGBWZ2NFAgMBAAGjgf8w -gfwwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUjbJJaJ1yCCW5wCf1UJNWSEZx+Y8wDgYDVR0P -AQH/BAQDAgEGMDYGA1UdEQQvMC2BE2Nhb3BlcmF0b3JAZGlzaWcuc2uGFmh0dHA6Ly93d3cuZGlz -aWcuc2svY2EwZgYDVR0fBF8wXTAtoCugKYYnaHR0cDovL3d3dy5kaXNpZy5zay9jYS9jcmwvY2Ff -ZGlzaWcuY3JsMCygKqAohiZodHRwOi8vY2EuZGlzaWcuc2svY2EvY3JsL2NhX2Rpc2lnLmNybDAa -BgNVHSAEEzARMA8GDSuBHpGT5goAAAABAQEwDQYJKoZIhvcNAQEFBQADggEBAF00dGFMrzvY/59t -WDYcPQuBDRIrRhCA/ec8J9B6yKm2fnQwM6M6int0wHl5QpNt/7EpFIKrIYwvF/k/Ji/1WcbvgAa3 -mkkp7M5+cTxqEEHA9tOasnxakZzArFvITV734VP/Q3f8nktnbNfzg9Gg4H8l37iYC5oyOGwwoPP/ -CBUz91BKez6jPiCp3C9WgArtQVCwyfTssuMmRAAOb54GvCKWU3BlxFAKRmukLyeBEicTXxChds6K -ezfqwzlhA5WYOudsiCUI/HloDYd9Yvi0X/vF2Ey9WLw/Q1vUHgFNPGO+I++MzVpQuGhU+QqZMxEA -4Z7CRneC9VkGjCFMhwnN5ag= ------END CERTIFICATE----- - -Juur-SK -======= ------BEGIN CERTIFICATE----- -MIIE5jCCA86gAwIBAgIEO45L/DANBgkqhkiG9w0BAQUFADBdMRgwFgYJKoZIhvcNAQkBFglwa2lA -c2suZWUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKExlBUyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMRAw -DgYDVQQDEwdKdXVyLVNLMB4XDTAxMDgzMDE0MjMwMVoXDTE2MDgyNjE0MjMwMVowXTEYMBYGCSqG -SIb3DQEJARYJcGtpQHNrLmVlMQswCQYDVQQGEwJFRTEiMCAGA1UEChMZQVMgU2VydGlmaXRzZWVy -aW1pc2tlc2t1czEQMA4GA1UEAxMHSnV1ci1TSzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBAIFxNj4zB9bjMI0TfncyRsvPGbJgMUaXhvSYRqTCZUXP00B841oiqBB4M8yIsdOBSvZiF3tf -TQou0M+LI+5PAk676w7KvRhj6IAcjeEcjT3g/1tf6mTll+g/mX8MCgkzABpTpyHhOEvWgxutr2TC -+Rx6jGZITWYfGAriPrsfB2WThbkasLnE+w0R9vXW+RvHLCu3GFH+4Hv2qEivbDtPL+/40UceJlfw -UR0zlv/vWT3aTdEVNMfqPxZIe5EcgEMPPbgFPtGzlc3Yyg/CQ2fbt5PgIoIuvvVoKIO5wTtpeyDa -Tpxt4brNj3pssAki14sL2xzVWiZbDcDq5WDQn/413z8CAwEAAaOCAawwggGoMA8GA1UdEwEB/wQF -MAMBAf8wggEWBgNVHSAEggENMIIBCTCCAQUGCisGAQQBzh8BAQEwgfYwgdAGCCsGAQUFBwICMIHD -HoHAAFMAZQBlACAAcwBlAHIAdABpAGYAaQBrAGEAYQB0ACAAbwBuACAAdgDkAGwAagBhAHMAdABh -AHQAdQBkACAAQQBTAC0AaQBzACAAUwBlAHIAdABpAGYAaQB0AHMAZQBlAHIAaQBtAGkAcwBrAGUA -cwBrAHUAcwAgAGEAbABhAG0ALQBTAEsAIABzAGUAcgB0AGkAZgBpAGsAYQBhAHQAaQBkAGUAIABr -AGkAbgBuAGkAdABhAG0AaQBzAGUAawBzMCEGCCsGAQUFBwIBFhVodHRwOi8vd3d3LnNrLmVlL2Nw -cy8wKwYDVR0fBCQwIjAgoB6gHIYaaHR0cDovL3d3dy5zay5lZS9qdXVyL2NybC8wHQYDVR0OBBYE -FASqekej5ImvGs8KQKcYP2/v6X2+MB8GA1UdIwQYMBaAFASqekej5ImvGs8KQKcYP2/v6X2+MA4G -A1UdDwEB/wQEAwIB5jANBgkqhkiG9w0BAQUFAAOCAQEAe8EYlFOiCfP+JmeaUOTDBS8rNXiRTHyo -ERF5TElZrMj3hWVcRrs7EKACr81Ptcw2Kuxd/u+gkcm2k298gFTsxwhwDY77guwqYHhpNjbRxZyL -abVAyJRld/JXIWY7zoVAtjNjGr95HvxcHdMdkxuLDF2FvZkwMhgJkVLpfKG6/2SSmuz+Ne6ML678 -IIbsSt4beDI3poHSna9aEhbKmVv8b20OxaAehsmR0FyYgl9jDIpaq9iVpszLita/ZEuOyoqysOkh -Mp6qqIWYNIE5ITuoOlIyPfZrN4YGWhWY3PARZv40ILcD9EEQfTmEeZZyY7aWAuVrua0ZTbvGRNs2 -yyqcjg== ------END CERTIFICATE----- - -Hongkong Post Root CA 1 -======================= ------BEGIN CERTIFICATE----- -MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoT -DUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMB4XDTAzMDUx -NTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25n -IFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEF -AAOCAQ8AMIIBCgKCAQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1 -ApzQjVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEnPzlTCeqr -auh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjhZY4bXSNmO7ilMlHIhqqh -qZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9nnV0ttgCXjqQesBCNnLsak3c78QA3xMY -V18meMjWCnl3v/evt3a5pQuEF10Q6m/hq5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNV -HRMBAf8ECDAGAQH/AgEDMA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7i -h9legYsCmEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI37pio -l7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clBoiMBdDhViw+5Lmei -IAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJsEhTkYY2sEJCehFC78JZvRZ+K88ps -T/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpOfMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilT -c4afU9hDDl3WY4JxHYB0yvbiAmvZWg== ------END CERTIFICATE----- - -SecureSign RootCA11 -=================== ------BEGIN CERTIFICATE----- -MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDErMCkGA1UEChMi -SmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoGA1UEAxMTU2VjdXJlU2lnbiBS -b290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSsw -KQYDVQQKEyJKYXBhbiBDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1 -cmVTaWduIFJvb3RDQTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvL -TJszi1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8h9uuywGO -wvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOVMdrAG/LuYpmGYz+/3ZMq -g6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rP -O7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitA -bpSACW22s293bzUIUPsCh8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZX -t94wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAKCh -OBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xmKbabfSVSSUOrTC4r -bnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQX5Ucv+2rIrVls4W6ng+4reV6G4pQ -Oh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWrQbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01 -y8hSyn+B/tlr0/cR7SXf+Of5pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061 -lgeLKBObjBmNQSdJQO7e5iNEOdyhIta6A/I= ------END CERTIFICATE----- - -ACEDICOM Root -============= ------BEGIN CERTIFICATE----- -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 ------END CERTIFICATE----- - -Microsec e-Szigno Root CA 2009 -============================== ------BEGIN CERTIFICATE----- -MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYDVQQGEwJIVTER -MA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jv -c2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o -dTAeFw0wOTA2MTYxMTMwMThaFw0yOTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UE -BwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUt -U3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTCCASIw -DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvPkd6mJviZpWNwrZuuyjNA -fW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tccbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG -0IMZfcChEhyVbUr02MelTTMuhTlAdX4UfIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKA -pxn1ntxVUwOXewdI/5n7N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm -1HxdrtbCxkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1+rUC -AwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTLD8bf -QkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAbBgNVHREE -FDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqGSIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0o -lZMEyL/azXm4Q5DwpL7v8u8hmLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfX -I/OMn74dseGkddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775 -tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c2Pm2G2JwCz02 -yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5tHMN1Rq41Bab2XD0h7lbwyYIi -LXpUq3DDfSJlgnCW ------END CERTIFICATE----- - -GlobalSign Root CA - R3 -======================= ------BEGIN CERTIFICATE----- -MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4GA1UECxMXR2xv -YmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh -bFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT -aWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln -bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWt -iHL8RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsTgHeMCOFJ -0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmmKPZpO/bLyCiR5Z2KYVc3 -rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zdQQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjl -OCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZXriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2 -xmmFghcCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE -FI/wS3+oLkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZURUm7 -lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMpjjM5RcOO5LlXbKr8 -EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK6fBdRoyV3XpYKBovHd7NADdBj+1E -bddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQXmcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18 -YIvDQVETI53O9zJrlAGomecsMx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7r -kpeDMdmztcpHWD9f ------END CERTIFICATE----- - -Autoridad de Certificacion Firmaprofesional CIF A62634068 -========================================================= ------BEGIN CERTIFICATE----- -MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCRVMxQjBA -BgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2 -MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEyMzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIw -QAYDVQQDDDlBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBB -NjI2MzQwNjgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDD -Utd9thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQMcas9UX4P -B99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefGL9ItWY16Ck6WaVICqjaY -7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15iNA9wBj4gGFrO93IbJWyTdBSTo3OxDqqH -ECNZXyAFGUftaI6SEspd/NYrspI8IM/hX68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyI -plD9amML9ZMWGxmPsu2bm8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctX -MbScyJCyZ/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirjaEbsX -LZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/TKI8xWVvTyQKmtFLK -bpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF6NkBiDkal4ZkQdU7hwxu+g/GvUgU -vzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVhOSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1Ud -EwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNH -DhpkLzCBpgYDVR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp -cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBvACAAZABlACAA -bABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBlAGwAbwBuAGEAIAAwADgAMAAx -ADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx -51tkljYyGOylMnfX40S2wBEqgLk9am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qk -R71kMrv2JYSiJ0L1ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaP -T481PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS3a/DTg4f -Jl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5kSeTy36LssUzAKh3ntLFl -osS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF3dvd6qJ2gHN99ZwExEWN57kci57q13XR -crHedUTnQn3iV2t93Jm8PYMo6oCTjcVMZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoR -saS8I8nkvof/uZS2+F0gStRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTD -KCOM/iczQ0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQBjLMi -6Et8Vcad+qMUu2WFbm5PEn4KPJ2V ------END CERTIFICATE----- - -Izenpe.com -========== ------BEGIN CERTIFICATE----- -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 ------END CERTIFICATE----- - -Chambers of Commerce Root - 2008 -================================ ------BEGIN CERTIFICATE----- -MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYDVQQGEwJFVTFD -MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv -bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu -QS4xKTAnBgNVBAMTIENoYW1iZXJzIG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEy -Mjk1MFoXDTM4MDczMTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNl -ZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQF -EwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJl -cnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC -AQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW928sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKA -XuFixrYp4YFs8r/lfTJqVKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorj -h40G072QDuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR5gN/ -ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfLZEFHcpOrUMPrCXZk -NNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05aSd+pZgvMPMZ4fKecHePOjlO+Bd5g -D2vlGts/4+EhySnB8esHnFIbAURRPHsl18TlUlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331 -lubKgdaX8ZSD6e2wsWsSaR6s+12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ -0wlf2eOKNcx5Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj -ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAxhduub+84Mxh2 -EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNVHQ4EFgQU+SSsD7K1+HnA+mCI -G8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1+HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJ -BgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNh -bWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENh -bWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDiC -CQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUH -AgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAJASryI1 -wqM58C7e6bXpeHxIvj99RZJe6dqxGfwWPJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH -3qLPaYRgM+gQDROpI9CF5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbU -RWpGqOt1glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaHFoI6 -M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2pSB7+R5KBWIBpih1 -YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MDxvbxrN8y8NmBGuScvfaAFPDRLLmF -9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QGtjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcK -zBIKinmwPQN/aUv0NCB9szTqjktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvG -nrDQWzilm1DefhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg -OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZd0jQ ------END CERTIFICATE----- - -Global Chambersign Root - 2008 -============================== ------BEGIN CERTIFICATE----- -MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYDVQQGEwJFVTFD -MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv -bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu -QS4xJzAlBgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMx -NDBaFw0zODA3MzExMjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUg -Y3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJ -QTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD -aGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMDf -VtPkOpt2RbQT2//BthmLN0EYlVJH6xedKYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXf -XjaOcNFccUMd2drvXNL7G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0 -ZJJ0YPP2zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4ddPB -/gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyGHoiMvvKRhI9lNNgA -TH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2Id3UwD2ln58fQ1DJu7xsepeY7s2M -H/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3VyJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfe -Ox2YItaswTXbo6Al/3K1dh3ebeksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSF -HTynyQbehP9r6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh -wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsogzCtLkykPAgMB -AAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQWBBS5CcqcHtvTbDprru1U8VuT -BjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDprru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UE -BhMCRVUxQzBBBgNVBAcTOk1hZHJpZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJm -aXJtYS5jb20vYWRkcmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJm -aXJtYSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiCCQDJzdPp -1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEWHGh0 -dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAICIf3DekijZBZRG -/5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZUohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6 -ReAJ3spED8IXDneRRXozX1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/s -dZ7LoR/xfxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVza2Mg -9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yydYhz2rXzdpjEetrHH -foUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMdSqlapskD7+3056huirRXhOukP9Du -qqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9OAP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETr -P3iZ8ntxPjzxmKfFGBI/5rsoM0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVq -c5iJWzouE4gev8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z -09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B ------END CERTIFICATE----- - -Go Daddy Root Certificate Authority - G2 -======================================== ------BEGIN CERTIFICATE----- -MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT -B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoTEUdvRGFkZHkuY29tLCBJbmMu -MTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5 -MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6 -b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8G -A1UEAxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKDE6bFIEMBO4Tx5oVJnyfq -9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD -+qK+ihVqf94Lw7YZFAXK6sOoBJQ7RnwyDfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutd -fMh8+7ArU6SSYmlRJQVhGkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMl -NAJWJwGRtDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEAAaNC -MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFDqahQcQZyi27/a9 -BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmXWWcDYfF+OwYxdS2hII5PZYe096ac -vNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r -5N9ss4UXnT3ZJE95kTXWXwTrgIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYV -N8Gb5DKj7Tjo2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO -LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI4uJEvlz36hz1 ------END CERTIFICATE----- - -Starfield Root Certificate Authority - G2 -========================================= ------BEGIN CERTIFICATE----- -MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT -B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s -b2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVsZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0 -eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAw -DgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQg -VGVjaG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZpY2F0ZSBB -dXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL3twQP89o/8ArFv -W59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMgnLRJdzIpVv257IzdIvpy3Cdhl+72WoTs -bhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNk -N3mSwOxGXn/hbVNMYq/NHwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7Nf -ZTD4p7dNdloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0HZbU -JtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC -AQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0GCSqGSIb3DQEBCwUAA4IBAQARWfol -TwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjUsHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx -4mcujJUDJi5DnUox9g61DLu34jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUw -F5okxBDgBPfg8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K -pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1mMpYjn0q7pBZ -c2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0 ------END CERTIFICATE----- - -Starfield Services Root Certificate Authority - G2 -================================================== ------BEGIN CERTIFICATE----- -MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMxEDAOBgNVBAgT -B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s -b2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVsZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRl -IEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNV -BAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxT -dGFyZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2VydmljZXMg -Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC -AQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20pOsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2 -h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm28xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4Pa -hHQUw2eeBGg6345AWh1KTs9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLP -LJGmpufehRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk6mFB -rMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAwDwYDVR0TAQH/BAUw -AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+qAdcwKziIorhtSpzyEZGDMA0GCSqG -SIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMIbw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPP -E95Dz+I0swSdHynVv/heyNXBve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTy -xQGjhdByPq1zqwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd -iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn0q23KXB56jza -YyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCNsSi6 ------END CERTIFICATE----- - -AffirmTrust Commercial -====================== ------BEGIN CERTIFICATE----- -MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UEBhMCVVMxFDAS -BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMB4XDTEw -MDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly -bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEF -AAOCAQ8AMIIBCgKCAQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6Eqdb -DuKPHx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yrba0F8PrV -C8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPALMeIrJmqbTFeurCA+ukV6 -BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1yHp52UKqK39c/s4mT6NmgTWvRLpUHhww -MmWd5jyTXlBOeuM61G7MGvv50jeuJCqrVwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNV -HQ4EFgQUnZPGU4teyq8/nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC -AQYwDQYJKoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYGXUPG -hi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNjvbz4YYCanrHOQnDi -qX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivtZ8SOyUOyXGsViQK8YvxO8rUzqrJv -0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9gN53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0kh -sUlHRUe072o0EclNmsxZt9YCnlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8= ------END CERTIFICATE----- - -AffirmTrust Networking -====================== ------BEGIN CERTIFICATE----- -MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UEBhMCVVMxFDAS -BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMB4XDTEw -MDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly -bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEF -AAOCAQ8AMIIBCgKCAQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SE -Hi3yYJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbuakCNrmreI -dIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRLQESxG9fhwoXA3hA/Pe24 -/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gb -h+0t+nvujArjqWaJGctB+d1ENmHP4ndGyH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNV -HQ4EFgQUBx/S55zawm6iQLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC -AQYwDQYJKoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfOtDIu -UFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzuQY0x2+c06lkh1QF6 -12S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZLgo/bNjR9eUJtGxUAArgFU2HdW23 -WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4uolu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9 -/ZFvgrG+CJPbFEfxojfHRZ48x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s= ------END CERTIFICATE----- - -AffirmTrust Premium -=================== ------BEGIN CERTIFICATE----- -MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UEBhMCVVMxFDAS -BgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMB4XDTEwMDEy -OTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRy -dXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A -MIICCgKCAgEAxBLfqV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtn -BKAQJG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ+jjeRFcV -5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrSs8PhaJyJ+HoAVt70VZVs -+7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmd -GPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d770O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5R -p9EixAqnOEhss/n/fauGV+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NI -S+LI+H+SqHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S5u04 -6uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4IaC1nEWTJ3s7xgaVY5 -/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TXOwF0lkLgAOIua+rF7nKsu7/+6qqo -+Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYEFJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB -/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByv -MiPIs0laUZx2KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg -Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B8OWycvpEgjNC -6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQMKSOyARiqcTtNd56l+0OOF6S -L5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK -+4w1IX2COPKpVJEZNZOUbWo6xbLQu4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmV -BtWVyuEklut89pMFu+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFg -IxpHYoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8GKa1qF60 -g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaORtGdFNrHF+QFlozEJLUb -zxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6eKeC2uAloGRwYQw== ------END CERTIFICATE----- - -AffirmTrust Premium ECC -======================= ------BEGIN CERTIFICATE----- -MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMCVVMxFDASBgNV -BAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQcmVtaXVtIEVDQzAeFw0xMDAx -MjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJBgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1U -cnVzdDEgMB4GA1UEAwwXQWZmaXJtVHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQA -IgNiAAQNMF4bFZ0D0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQ -N8O9ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0GA1UdDgQW -BBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAK -BggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/VsaobgxCd05DhT1wV/GzTjxi+zygk8N53X -57hG8f2h4nECMEJZh0PUUd+60wkyWs6Iflc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKM -eQ== ------END CERTIFICATE----- - -Certum Trusted Network CA -========================= ------BEGIN CERTIFICATE----- -MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBMMSIwIAYDVQQK -ExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlv -biBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIy -MTIwNzM3WhcNMjkxMjMxMTIwNzM3WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBU -ZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 -MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC -AQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rHUV+rpDKmYYe2bg+G0jAC -l/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LMTXPb865Px1bVWqeWifrzq2jUI4ZZJ88J -J7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVUBBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4 -fOQtf/WsX+sWn7Et0brMkUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0 -cvW0QM8xAcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNVHRMB -Af8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYw -DQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15ysHhE49wcrwn9I0j6vSrEuVUEtRCj -jSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfLI9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1 -mS1FhIrlQgnXdAIv94nYmem8J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5aj -Zt3hrvJBW8qYVoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI -03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw= ------END CERTIFICATE----- - -Certinomis - Autorité Racine -============================= ------BEGIN CERTIFICATE----- -MIIFnDCCA4SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjETMBEGA1UEChMK -Q2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxJjAkBgNVBAMMHUNlcnRpbm9taXMg -LSBBdXRvcml0w6kgUmFjaW5lMB4XDTA4MDkxNzA4Mjg1OVoXDTI4MDkxNzA4Mjg1OVowYzELMAkG -A1UEBhMCRlIxEzARBgNVBAoTCkNlcnRpbm9taXMxFzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMSYw -JAYDVQQDDB1DZXJ0aW5vbWlzIC0gQXV0b3JpdMOpIFJhY2luZTCCAiIwDQYJKoZIhvcNAQEBBQAD -ggIPADCCAgoCggIBAJ2Fn4bT46/HsmtuM+Cet0I0VZ35gb5j2CN2DpdUzZlMGvE5x4jYF1AMnmHa -wE5V3udauHpOd4cN5bjr+p5eex7Ezyh0x5P1FMYiKAT5kcOrJ3NqDi5N8y4oH3DfVS9O7cdxbwly -Lu3VMpfQ8Vh30WC8Tl7bmoT2R2FFK/ZQpn9qcSdIhDWerP5pqZ56XjUl+rSnSTV3lqc2W+HN3yNw -2F1MpQiD8aYkOBOo7C+ooWfHpi2GR+6K/OybDnT0K0kCe5B1jPyZOQE51kqJ5Z52qz6WKDgmi92N -jMD2AR5vpTESOH2VwnHu7XSu5DaiQ3XV8QCb4uTXzEIDS3h65X27uK4uIJPT5GHfceF2Z5c/tt9q -c1pkIuVC28+BA5PY9OMQ4HL2AHCs8MF6DwV/zzRpRbWT5BnbUhYjBYkOjUjkJW+zeL9i9Qf6lSTC -lrLooyPCXQP8w9PlfMl1I9f09bze5N/NgL+RiH2nE7Q5uiy6vdFrzPOlKO1Enn1So2+WLhl+HPNb -xxaOu2B9d2ZHVIIAEWBsMsGoOBvrbpgT1u449fCfDu/+MYHB0iSVL1N6aaLwD4ZFjliCK0wi1F6g -530mJ0jfJUaNSih8hp75mxpZuWW/Bd22Ql095gBIgl4g9xGC3srYn+Y3RyYe63j3YcNBZFgCQfna -4NH4+ej9Uji29YnfAgMBAAGjWzBZMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G -A1UdDgQWBBQNjLZh2kS40RR9w759XkjwzspqsDAXBgNVHSAEEDAOMAwGCiqBegFWAgIAAQEwDQYJ -KoZIhvcNAQEFBQADggIBACQ+YAZ+He86PtvqrxyaLAEL9MW12Ukx9F1BjYkMTv9sov3/4gbIOZ/x -WqndIlgVqIrTseYyCYIDbNc/CMf4uboAbbnW/FIyXaR/pDGUu7ZMOH8oMDX/nyNTt7buFHAAQCva -R6s0fl6nVjBhK4tDrP22iCj1a7Y+YEq6QpA0Z43q619FVDsXrIvkxmUP7tCMXWY5zjKn2BCXwH40 -nJ+U8/aGH88bc62UeYdocMMzpXDn2NU4lG9jeeu/Cg4I58UvD0KgKxRA/yHgBcUn4YQRE7rWhh1B -CxMjidPJC+iKunqjo3M3NYB9Ergzd0A4wPpeMNLytqOx1qKVl4GbUu1pTP+A5FPbVFsDbVRfsbjv -JL1vnxHDx2TCDyhihWZeGnuyt++uNckZM6i4J9szVb9o4XVIRFb7zdNIu0eJOqxp9YDG5ERQL1TE -qkPFMTFYvZbF6nVsmnWxTfj3l/+WFvKXTej28xH5On2KOG4Ey+HTRRWqpdEdnV1j6CTmNhTih60b -WfVEm/vXd3wfAXBioSAaosUaKPQhA+4u2cGA6rnZgtZbdsLLO7XSAPCjDuGtbkD326C00EauFddE -wk01+dIL8hf2rGbVJLJP0RyZwG71fet0BLj5TXcJ17TPBzAJ8bgAVtkXFhYKK4bfjwEZGuW7gmP/ -vgt2Fl43N+bYdJeimUV5 ------END CERTIFICATE----- - -Root CA Generalitat Valenciana -============================== ------BEGIN CERTIFICATE----- -MIIGizCCBXOgAwIBAgIEO0XlaDANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJFUzEfMB0GA1UE -ChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290 -IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwHhcNMDEwNzA2MTYyMjQ3WhcNMjEwNzAxMTUyMjQ3 -WjBoMQswCQYDVQQGEwJFUzEfMB0GA1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UE -CxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwggEiMA0G -CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGKqtXETcvIorKA3Qdyu0togu8M1JAJke+WmmmO3I2 -F0zo37i7L3bhQEZ0ZQKQUgi0/6iMweDHiVYQOTPvaLRfX9ptI6GJXiKjSgbwJ/BXufjpTjJ3Cj9B -ZPPrZe52/lSqfR0grvPXdMIKX/UIKFIIzFVd0g/bmoGlu6GzwZTNVOAydTGRGmKy3nXiz0+J2ZGQ -D0EbtFpKd71ng+CT516nDOeB0/RSrFOyA8dEJvt55cs0YFAQexvba9dHq198aMpunUEDEO5rmXte -JajCq+TA81yc477OMUxkHl6AovWDfgzWyoxVjr7gvkkHD6MkQXpYHYTqWBLI4bft75PelAgxAgMB -AAGjggM7MIIDNzAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAGGFmh0dHA6Ly9vY3NwLnBraS5n -dmEuZXMwEgYDVR0TAQH/BAgwBgEB/wIBAjCCAjQGA1UdIASCAiswggInMIICIwYKKwYBBAG/VQIB -ADCCAhMwggHoBggrBgEFBQcCAjCCAdoeggHWAEEAdQB0AG8AcgBpAGQAYQBkACAAZABlACAAQwBl -AHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAFIAYQDtAHoAIABkAGUAIABsAGEAIABHAGUAbgBlAHIA -YQBsAGkAdABhAHQAIABWAGEAbABlAG4AYwBpAGEAbgBhAC4ADQAKAEwAYQAgAEQAZQBjAGwAYQBy -AGEAYwBpAPMAbgAgAGQAZQAgAFAAcgDhAGMAdABpAGMAYQBzACAAZABlACAAQwBlAHIAdABpAGYA -aQBjAGEAYwBpAPMAbgAgAHEAdQBlACAAcgBpAGcAZQAgAGUAbAAgAGYAdQBuAGMAaQBvAG4AYQBt -AGkAZQBuAHQAbwAgAGQAZQAgAGwAYQAgAHAAcgBlAHMAZQBuAHQAZQAgAEEAdQB0AG8AcgBpAGQA -YQBkACAAZABlACAAQwBlAHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAHMAZQAgAGUAbgBjAHUAZQBu -AHQAcgBhACAAZQBuACAAbABhACAAZABpAHIAZQBjAGMAaQDzAG4AIAB3AGUAYgAgAGgAdAB0AHAA -OgAvAC8AdwB3AHcALgBwAGsAaQAuAGcAdgBhAC4AZQBzAC8AYwBwAHMwJQYIKwYBBQUHAgEWGWh0 -dHA6Ly93d3cucGtpLmd2YS5lcy9jcHMwHQYDVR0OBBYEFHs100DSHHgZZu90ECjcPk+yeAT8MIGV -BgNVHSMEgY0wgYqAFHs100DSHHgZZu90ECjcPk+yeAT8oWykajBoMQswCQYDVQQGEwJFUzEfMB0G -A1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5S -b290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmGCBDtF5WgwDQYJKoZIhvcNAQEFBQADggEBACRh -TvW1yEICKrNcda3FbcrnlD+laJWIwVTAEGmiEi8YPyVQqHxK6sYJ2fR1xkDar1CdPaUWu20xxsdz -Ckj+IHLtb8zog2EWRpABlUt9jppSCS/2bxzkoXHPjCpaF3ODR00PNvsETUlR4hTJZGH71BTg9J63 -NI8KJr2XXPR5OkowGcytT6CYirQxlyric21+eLj4iIlPsSKRZEv1UN4D2+XFducTZnV+ZfsBn5OH -iJ35Rld8TWCvmHMTI6QgkYH60GFmuH3Rr9ZvHmw96RH9qfmCIoaZM3Fa6hlXPZHNqcCjbgcTpsnt -+GijnsNacgmHKNHEc8RzGF9QdRYxn7fofMM= ------END CERTIFICATE----- - -A-Trust-nQual-03 -================ ------BEGIN CERTIFICATE----- -MIIDzzCCAregAwIBAgIDAWweMA0GCSqGSIb3DQEBBQUAMIGNMQswCQYDVQQGEwJBVDFIMEYGA1UE -Cgw/QS1UcnVzdCBHZXMuIGYuIFNpY2hlcmhlaXRzc3lzdGVtZSBpbSBlbGVrdHIuIERhdGVudmVy -a2VociBHbWJIMRkwFwYDVQQLDBBBLVRydXN0LW5RdWFsLTAzMRkwFwYDVQQDDBBBLVRydXN0LW5R -dWFsLTAzMB4XDTA1MDgxNzIyMDAwMFoXDTE1MDgxNzIyMDAwMFowgY0xCzAJBgNVBAYTAkFUMUgw -RgYDVQQKDD9BLVRydXN0IEdlcy4gZi4gU2ljaGVyaGVpdHNzeXN0ZW1lIGltIGVsZWt0ci4gRGF0 -ZW52ZXJrZWhyIEdtYkgxGTAXBgNVBAsMEEEtVHJ1c3QtblF1YWwtMDMxGTAXBgNVBAMMEEEtVHJ1 -c3QtblF1YWwtMDMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtPWFuA/OQO8BBC4SA -zewqo51ru27CQoT3URThoKgtUaNR8t4j8DRE/5TrzAUjlUC5B3ilJfYKvUWG6Nm9wASOhURh73+n -yfrBJcyFLGM/BWBzSQXgYHiVEEvc+RFZznF/QJuKqiTfC0Li21a8StKlDJu3Qz7dg9MmEALP6iPE -SU7l0+m0iKsMrmKS1GWH2WrX9IWf5DMiJaXlyDO6w8dB3F/GaswADm0yqLaHNgBid5seHzTLkDx4 -iHQF63n1k3Flyp3HaxgtPVxO59X4PzF9j4fsCiIvI+n+u33J4PTs63zEsMMtYrWacdaxaujs2e3V -cuy+VwHOBVWf3tFgiBCzAgMBAAGjNjA0MA8GA1UdEwEB/wQFMAMBAf8wEQYDVR0OBAoECERqlWdV -eRFPMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAVdRU0VlIXLOThaq/Yy/kgM40 -ozRiPvbY7meIMQQDbwvUB/tOdQ/TLtPAF8fGKOwGDREkDg6lXb+MshOWcdzUzg4NCmgybLlBMRmr -sQd7TZjTXLDR8KdCoLXEjq/+8T/0709GAHbrAvv5ndJAlseIOrifEXnzgGWovR/TeIGgUUw3tKZd -JXDRZslo+S4RFGjxVJgIrCaSD96JntT6s3kr0qN51OyLrIdTaEJMUVF0HhsnLuP1Hyl0Te2v9+GS -mYHovjrHF1D2t8b8m7CKa9aIA5GPBnc6hQLdmNVDeD/GMBWsm2vLV7eJUYs66MmEDNuxUCAKGkq6 -ahq97BvIxYSazQ== ------END CERTIFICATE----- - -TWCA Root Certification Authority -================================= ------BEGIN CERTIFICATE----- -MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJ -VEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMzWhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQG -EwJUVzESMBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NB -IFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK -AoIBAQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFEAcK0HMMx -QhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HHK3XLfJ+utdGdIzdjp9xC -oi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeXRfwZVzsrb+RH9JlF/h3x+JejiB03HFyP -4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/zrX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1r -y+UPizgN7gr8/g+YnzAx3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIB -BjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkqhkiG -9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeCMErJk/9q56YAf4lC -mtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdlsXebQ79NqZp4VKIV66IIArB6nCWlW -QtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62Dlhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVY -T0bf+215WfKEIlKuD8z7fDvnaspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocny -Yh0igzyXxfkZYiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw== ------END CERTIFICATE----- - -Security Communication RootCA2 -============================== ------BEGIN CERTIFICATE----- -MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDElMCMGA1UEChMc -U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMeU2VjdXJpdHkgQ29tbXVuaWNh -dGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoXDTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMC -SlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3Vy -aXR5IENvbW11bmljYXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB -ANAVOVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGrzbl+dp++ -+T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVMVAX3NuRFg3sUZdbcDE3R -3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQhNBqyjoGADdH5H5XTz+L62e4iKrFvlNV -spHEfbmwhRkGeC7bYRr6hfVKkaHnFtWOojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1K -EOtOghY6rCcMU/Gt1SSwawNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8 -QIH4D5csOPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEB -CwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpFcoJxDjrSzG+ntKEj -u/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXcokgfGT+Ok+vx+hfuzU7jBBJV1uXk -3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6q -tnRGEmyR7jTV7JqR50S+kDFy1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29 -mvVXIwAHIRc/SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03 ------END CERTIFICATE----- - -EC-ACC -====== ------BEGIN CERTIFICATE----- -MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB8zELMAkGA1UE -BhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2VydGlmaWNhY2lvIChOSUYgUS0w -ODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYD -VQQLEyxWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UE -CxMsSmVyYXJxdWlhIEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMT -BkVDLUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQGEwJFUzE7 -MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8gKE5JRiBRLTA4MDExNzYt -SSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZl -Z2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQubmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJh -cnF1aWEgRW50aXRhdHMgZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUND -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R85iK -w5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm4CgPukLjbo73FCeT -ae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaVHMf5NLWUhdWZXqBIoH7nF2W4onW4 -HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNdQlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0a -E9jD2z3Il3rucO2n5nzbcc8tlGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw -0JDnJwIDAQABo4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E -BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4opvpXY0wfwYD -VR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBodHRwczovL3d3dy5jYXRjZXJ0 -Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5l -dC92ZXJhcnJlbCAwDQYJKoZIhvcNAQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJ -lF7W2u++AVtd0x7Y/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNa -Al6kSBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhyRp/7SNVe -l+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOSAgu+TGbrIP65y7WZf+a2 -E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xlnJ2lYJU6Un/10asIbvPuW/mIPX64b24D -5EI= ------END CERTIFICATE----- - -Hellenic Academic and Research Institutions RootCA 2011 -======================================================= ------BEGIN CERTIFICATE----- -MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1IxRDBCBgNVBAoT -O0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9y -aXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z -IFJvb3RDQSAyMDExMB4XDTExMTIwNjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYT -AkdSMUQwQgYDVQQKEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z -IENlcnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNo -IEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB -AKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPzdYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI -1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJfel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa -71HFK9+WXesyHgLacEnsbgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u -8yBRQlqD75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSPFEDH -3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNVHRMBAf8EBTADAQH/ -MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp5dgTBCPuQSUwRwYDVR0eBEAwPqA8 -MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQub3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQu -b3JnMA0GCSqGSIb3DQEBBQUAA4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVt -XdMiKahsog2p6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8 -TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7dIsXRSZMFpGD -/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8AcysNnq/onN694/BtZqhFLKPM58N -7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXIl7WdmplNsDz4SgCbZN2fOUvRJ9e4 ------END CERTIFICATE----- - -Actalis Authentication Root CA -============================== ------BEGIN CERTIFICATE----- -MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UEBhMCSVQxDjAM -BgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UE -AwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDky -MjExMjIwMlowazELMAkGA1UEBhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlz -IFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290 -IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNvUTufClrJ -wkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX4ay8IMKx4INRimlNAJZa -by/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9KK3giq0itFZljoZUj5NDKd45RnijMCO6 -zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1f -YVEiVRvjRuPjPdA1YprbrxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2 -oxgkg4YQ51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2Fbe8l -EfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxeKF+w6D9Fz8+vm2/7 -hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4Fv6MGn8i1zeQf1xcGDXqVdFUNaBr8 -EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbnfpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5 -jF66CyCU3nuDuP/jVo23Eek7jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLY -iDrIn3hm7YnzezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt -ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQALe3KHwGCmSUyI -WOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70jsNjLiNmsGe+b7bAEzlgqqI0 -JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDzWochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKx -K3JCaKygvU5a2hi/a5iB0P2avl4VSM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+ -Xlff1ANATIGk0k9jpwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC -4yyXX04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+OkfcvHlXHo -2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7RK4X9p2jIugErsWx0Hbhz -lefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btUZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXem -OR/qnuOf0GZvBeyqdn6/axag67XH/JJULysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9 -vwGYT7JZVEc+NHt4bVaTLnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg== ------END CERTIFICATE----- - -Trustis FPS Root CA -=================== ------BEGIN CERTIFICATE----- -MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQG -EwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQLExNUcnVzdGlzIEZQUyBSb290 -IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTExMzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNV -BAoTD1RydXN0aXMgTGltaXRlZDEcMBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJ -KoZIhvcNAQEBBQADggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQ -RUN+AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihHiTHcDnlk -H5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjjvSkCqPoc4Vu5g6hBSLwa -cY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zt -o3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlBOrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEA -AaNTMFEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAd -BgNVHQ4EFgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01GX2c -GE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmWzaD+vkAMXBJV+JOC -yinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP41BIy+Q7DsdwyhEQsb8tGD+pmQQ9P -8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZEf1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHV -l/9D7S3B2l0pKoU/rGXuhg8FjZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYl -iB6XzCGcKQENZetX2fNXlrtIzYE= ------END CERTIFICATE----- - -StartCom Certification Authority -================================ ------BEGIN CERTIFICATE----- -MIIHhzCCBW+gAwIBAgIBLTANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN -U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu -ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0 -NjM3WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk -LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg -U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw -ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y -o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/ -Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d -eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt -2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z -6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ -osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/ -untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc -UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT -37uMdBNSSwIDAQABo4ICEDCCAgwwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD -VR0OBBYEFE4L7xqkQFulF2mHMMo0aEPQQa7yMB8GA1UdIwQYMBaAFE4L7xqkQFulF2mHMMo0aEPQ -Qa7yMIIBWgYDVR0gBIIBUTCCAU0wggFJBgsrBgEEAYG1NwEBATCCATgwLgYIKwYBBQUHAgEWImh0 -dHA6Ly93d3cuc3RhcnRzc2wuY29tL3BvbGljeS5wZGYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93d3cu -c3RhcnRzc2wuY29tL2ludGVybWVkaWF0ZS5wZGYwgc8GCCsGAQUFBwICMIHCMCcWIFN0YXJ0IENv -bW1lcmNpYWwgKFN0YXJ0Q29tKSBMdGQuMAMCAQEagZZMaW1pdGVkIExpYWJpbGl0eSwgcmVhZCB0 -aGUgc2VjdGlvbiAqTGVnYWwgTGltaXRhdGlvbnMqIG9mIHRoZSBTdGFydENvbSBDZXJ0aWZpY2F0 -aW9uIEF1dGhvcml0eSBQb2xpY3kgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuc3RhcnRzc2wuY29t -L3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBG -cmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQsFAAOCAgEAjo/n3JR5 -fPGFf59Jb2vKXfuM/gTFwWLRfUKKvFO3lANmMD+x5wqnUCBVJX92ehQN6wQOQOY+2IirByeDqXWm -N3PH/UvSTa0XQMhGvjt/UfzDtgUx3M2FIk5xt/JxXrAaxrqTi3iSSoX4eA+D/i+tLPfkpLst0OcN -Org+zvZ49q5HJMqjNTbOx8aHmNrs++myziebiMMEofYLWWivydsQD032ZGNcpRJvkrKTlMeIFw6T -tn5ii5B/q06f/ON1FE8qMt9bDeD1e5MNq6HPh+GlBEXoPBKlCcWw0bdT82AUuoVpaiF8H3VhFyAX -e2w7QSlc4axa0c2Mm+tgHRns9+Ww2vl5GKVFP0lDV9LdJNUso/2RjSe15esUBppMeyG7Oq0wBhjA -2MFrLH9ZXF2RsXAiV+uKa0hK1Q8p7MZAwC+ITGgBF3f0JBlPvfrhsiAhS90a2Cl9qrjeVOwhVYBs -HvUwyKMQ5bLmKhQxw4UtjJixhlpPiVktucf3HMiKf8CdBUrmQk9io20ppB+Fq9vlgcitKj1MXVuE -JnHEhV5xJMqlG2zYYdMa4FTbzrqpMrUi9nNBCV24F10OD5mQ1kfabwo6YigUZ4LZ8dCAWZvLMdib -D4x3TrVoivJs9iQOLWxwxXPR3hTQcY+203sC9uO41Alua551hDnmfyWl8kgAwKQB2j8= ------END CERTIFICATE----- - -StartCom Certification Authority G2 -=================================== ------BEGIN CERTIFICATE----- -MIIFYzCCA0ugAwIBAgIBOzANBgkqhkiG9w0BAQsFADBTMQswCQYDVQQGEwJJTDEWMBQGA1UEChMN -U3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg -RzIwHhcNMTAwMTAxMDEwMDAxWhcNMzkxMjMxMjM1OTAxWjBTMQswCQYDVQQGEwJJTDEWMBQGA1UE -ChMNU3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3Jp -dHkgRzIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2iTZbB7cgNr2Cu+EWIAOVeq8O -o1XJJZlKxdBWQYeQTSFgpBSHO839sj60ZwNq7eEPS8CRhXBF4EKe3ikj1AENoBB5uNsDvfOpL9HG -4A/LnooUCri99lZi8cVytjIl2bLzvWXFDSxu1ZJvGIsAQRSCb0AgJnooD/Uefyf3lLE3PbfHkffi -Aez9lInhzG7TNtYKGXmu1zSCZf98Qru23QumNK9LYP5/Q0kGi4xDuFby2X8hQxfqp0iVAXV16iul -Q5XqFYSdCI0mblWbq9zSOdIxHWDirMxWRST1HFSr7obdljKF+ExP6JV2tgXdNiNnvP8V4so75qbs -O+wmETRIjfaAKxojAuuKHDp2KntWFhxyKrOq42ClAJ8Em+JvHhRYW6Vsi1g8w7pOOlz34ZYrPu8H -vKTlXcxNnw3h3Kq74W4a7I/htkxNeXJdFzULHdfBR9qWJODQcqhaX2YtENwvKhOuJv4KHBnM0D4L -nMgJLvlblnpHnOl68wVQdJVznjAJ85eCXuaPOQgeWeU1FEIT/wCc976qUM/iUUjXuG+v+E5+M5iS -FGI6dWPPe/regjupuznixL0sAA7IF6wT700ljtizkC+p2il9Ha90OrInwMEePnWjFqmveiJdnxMa -z6eg6+OGCtP95paV1yPIN93EfKo2rJgaErHgTuixO/XWb/Ew1wIDAQABo0IwQDAPBgNVHRMBAf8E -BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUS8W0QGutHLOlHGVuRjaJhwUMDrYwDQYJ -KoZIhvcNAQELBQADggIBAHNXPyzVlTJ+N9uWkusZXn5T50HsEbZH77Xe7XRcxfGOSeD8bpkTzZ+K -2s06Ctg6Wgk/XzTQLwPSZh0avZyQN8gMjgdalEVGKua+etqhqaRpEpKwfTbURIfXUfEpY9Z1zRbk -J4kd+MIySP3bmdCPX1R0zKxnNBFi2QwKN4fRoxdIjtIXHfbX/dtl6/2o1PXWT6RbdejF0mCy2wl+ -JYt7ulKSnj7oxXehPOBKc2thz4bcQ///If4jXSRK9dNtD2IEBVeC2m6kMyV5Sy5UGYvMLD0w6dEG -/+gyRr61M3Z3qAFdlsHB1b6uJcDJHgoJIIihDsnzb02CVAAgp9KP5DlUFy6NHrgbuxu9mk47EDTc -nIhT76IxW1hPkWLIwpqazRVdOKnWvvgTtZ8SafJQYqz7Fzf07rh1Z2AQ+4NQ+US1dZxAF7L+/Xld -blhYXzD8AK6vM8EOTmy6p6ahfzLbOOCxchcKK5HsamMm7YnUeMx0HgX4a/6ManY5Ka5lIxKVCCIc -l85bBu4M4ru8H0ST9tg4RQUh7eStqxK2A6RCLi3ECToDZ2mEmuFZkIoohdVddLHRDiBYmxOlsGOm -7XtH/UVVMKTumtTm4ofvmMkyghEpIrwACjFeLQ/Ajulrso8uBtjRkcfGEvRM/TAXw8HaOFvjqerm -obp573PYtlNXLfbQ4ddI ------END CERTIFICATE----- - -Buypass Class 2 Root CA -======================= ------BEGIN CERTIFICATE----- -MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU -QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMiBSb290IENBMB4X -DTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1owTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1 -eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIw -DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1 -g1Lr6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPVL4O2fuPn -9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC911K2GScuVr1QGbNgGE41b -/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHxMlAQTn/0hpPshNOOvEu/XAFOBz3cFIqU -CqTqc/sLUegTBxj6DvEr0VQVfTzh97QZQmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeff -awrbD02TTqigzXsu8lkBarcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgI -zRFo1clrUs3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLiFRhn -Bkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRSP/TizPJhk9H9Z2vX -Uq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN9SG9dKpN6nIDSdvHXx1iY8f93ZHs -M+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxPAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD -VR0OBBYEFMmAd+BikoL1RpzzuvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF -AAOCAgEAU18h9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s -A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3tOluwlN5E40EI -osHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo+fsicdl9sz1Gv7SEr5AcD48S -aq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYd -DnkM/crqJIByw5c/8nerQyIKx+u2DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWD -LfJ6v9r9jv6ly0UsH8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0 -oyLQI+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK75t98biGC -wWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h3PFaTWwyI0PurKju7koS -CTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPzY11aWOIv4x3kqdbQCtCev9eBCfHJxyYN -rJgWVqA= ------END CERTIFICATE----- - -Buypass Class 3 Root CA -======================= ------BEGIN CERTIFICATE----- -MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU -QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMyBSb290IENBMB4X -DTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFowTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1 -eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIw -DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRH -sJ8YZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3EN3coTRiR -5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9tznDDgFHmV0ST9tD+leh -7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX0DJq1l1sDPGzbjniazEuOQAnFN44wOwZ -ZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH -2xc519woe2v1n/MuwU8XKhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV -/afmiSTYzIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvSO1UQ -RwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D34xFMFbG02SrZvPA -Xpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgPK9Dx2hzLabjKSWJtyNBjYt1gD1iq -j6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD -VR0OBBYEFEe4zf/lb+74suwvTg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF -AAOCAgEAACAjQTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV -cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXSIGrs/CIBKM+G -uIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2HJLw5QY33KbmkJs4j1xrG0aG -Q0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsaO5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8 -ZORK15FTAaggiG6cX0S5y2CBNOxv033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2 -KSb12tjE8nVhz36udmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz -6MkEkbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg413OEMXbug -UZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvDu79leNKGef9JOxqDDPDe -eOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq4/g7u9xN12TyUb7mqqta6THuBrxzvxNi -Cp/HuZc= ------END CERTIFICATE----- - -T-TeleSec GlobalRoot Class 3 -============================ ------BEGIN CERTIFICATE----- -MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM -IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU -cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgx -MDAxMTAyOTU2WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz -dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD -ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN8ELg63iIVl6bmlQdTQyK -9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/RLyTPWGrTs0NvvAgJ1gORH8EGoel15YU -NpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZF -iP0Zf3WHHx+xGwpzJFu5ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W -0eDrXltMEnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGjQjBA -MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1A/d2O2GCahKqGFPr -AyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOyWL6ukK2YJ5f+AbGwUgC4TeQbIXQb -fsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzT -ucpH9sry9uetuUg/vBa3wW306gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7h -P0HHRwA11fXT91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml -e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4pTpPDpFQUWw== ------END CERTIFICATE----- - -EE Certification Centre Root CA -=============================== ------BEGIN CERTIFICATE----- -MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQG -EwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1czEoMCYGA1UEAwwfRUUgQ2Vy -dGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYGCSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIw -MTAxMDMwMTAxMDMwWhgPMjAzMDEyMTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlB -UyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRy -ZSBSb290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEBAQUAA4IB -DwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUyeuuOF0+W2Ap7kaJjbMeM -TC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvObntl8jixwKIy72KyaOBhU8E2lf/slLo2 -rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIwWFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw -93X2PaRka9ZP585ArQ/dMtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtN -P2MbRMNE1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYDVR0T -AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/zQas8fElyalL1BSZ -MEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEF -BQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEFBQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+Rj -xY6hUFaTlrg4wCQiZrxTFGGVv9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqM -lIpPnTX/dqQGE5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u -uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIWiAYLtqZLICjU -3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/vGVCJYMzpJJUPwssd8m92kMfM -dcGWxZ0= ------END CERTIFICATE----- - -TURKTRUST Certificate Services Provider Root 2007 -================================================= ------BEGIN CERTIFICATE----- -MIIEPTCCAyWgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvzE/MD0GA1UEAww2VMOcUktUUlVTVCBF -bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEP -MA0GA1UEBwwGQW5rYXJhMV4wXAYDVQQKDFVUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUg -QmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgQXJhbMSxayAyMDA3MB4X -DTA3MTIyNTE4MzcxOVoXDTE3MTIyMjE4MzcxOVowgb8xPzA9BgNVBAMMNlTDnFJLVFJVU1QgRWxl -a3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTELMAkGA1UEBhMCVFIxDzAN -BgNVBAcMBkFua2FyYTFeMFwGA1UECgxVVMOcUktUUlVTVCBCaWxnaSDEsGxldGnFn2ltIHZlIEJp -bGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkgQS7Fni4gKGMpIEFyYWzEsWsgMjAwNzCCASIw -DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKu3PgqMyKVYFeaK7yc9SrToJdPNM8Ig3BnuiD9N -YvDdE3ePYakqtdTyuTFYKTsvP2qcb3N2Je40IIDu6rfwxArNK4aUyeNgsURSsloptJGXg9i3phQv -KUmi8wUG+7RP2qFsmmaf8EMJyupyj+sA1zU511YXRxcw9L6/P8JorzZAwan0qafoEGsIiveGHtya -KhUG9qPw9ODHFNRRf8+0222vR5YXm3dx2KdxnSQM9pQ/hTEST7ruToK4uT6PIzdezKKqdfcYbwnT -rqdUKDT74eA7YH2gvnmJhsifLfkKS8RQouf9eRbHegsYz85M733WB2+Y8a+xwXrXgTW4qhe04MsC -AwEAAaNCMEAwHQYDVR0OBBYEFCnFkKslrxHkYb+j/4hhkeYO/pyBMA4GA1UdDwEB/wQEAwIBBjAP -BgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAQDdr4Ouwo0RSVgrESLFF6QSU2TJ/s -Px+EnWVUXKgWAkD6bho3hO9ynYYKVZ1WKKxmLNA6VpM0ByWtCLCPyA8JWcqdmBzlVPi5RX9ql2+I -aE1KBiY3iAIOtsbWcpnOa3faYjGkVh+uX4132l32iPwa2Z61gfAyuOOI0JzzaqC5mxRZNTZPz/OO -Xl0XrRWV2N2y1RVuAE6zS89mlOTgzbUF2mNXi+WzqtvALhyQRNsaXRik7r4EW5nVcV9VZWRi1aKb -BFmGyGJ353yCRWo9F7/snXUMrqNvWtMvmDb08PUZqxFdyKbjKlhqQgnDvZImZjINXQhVdP+MmNAK -poRq0Tl9 ------END CERTIFICATE----- - -D-TRUST Root Class 3 CA 2 2009 -============================== ------BEGIN CERTIFICATE----- -MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQK -DAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTAe -Fw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NThaME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxE -LVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIw -DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOAD -ER03UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42tSHKXzlA -BF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9RySPocq60vFYJfxLLHLGv -KZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsMlFqVlNpQmvH/pStmMaTJOKDfHR+4CS7z -p+hnUquVH+BGPtikw8paxTGA6Eian5Rp/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUC -AwEAAaOCARowggEWMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ -4PGEMA4GA1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVjdG9y -eS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUyMENBJTIwMiUyMDIw -MDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRlcmV2b2NhdGlvbmxpc3QwQ6BBoD+G -PWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3JsL2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAw -OS5jcmwwDQYJKoZIhvcNAQELBQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm -2H6NMLVwMeniacfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0 -o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4KzCUqNQT4YJEV -dT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8PIWmawomDeCTmGCufsYkl4ph -X5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3YJohw1+qRzT65ysCQblrGXnRl11z+o+I= ------END CERTIFICATE----- - -D-TRUST Root Class 3 CA 2 EV 2009 -================================= ------BEGIN CERTIFICATE----- -MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK -DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw -OTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUwNDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK -DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw -OTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfS -egpnljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM03TP1YtHh -zRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6ZqQTMFexgaDbtCHu39b+T -7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lRp75mpoo6Kr3HGrHhFPC+Oh25z1uxav60 -sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure35 -11H3a6UCAwEAAaOCASQwggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyv -cop9NteaHNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFwOi8v -ZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xhc3MlMjAzJTIwQ0El -MjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1ERT9jZXJ0aWZpY2F0ZXJldm9jYXRp -b25saXN0MEagRKBChkBodHRwOi8vd3d3LmQtdHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xh -c3NfM19jYV8yX2V2XzIwMDkuY3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+ -PPoeUSbrh/Yp3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05 -nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNFCSuGdXzfX2lX -ANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7naxpeG0ILD5EJt/rDiZE4OJudA -NCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqXKVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVv -w9y4AyHqnxbxLFS1 ------END CERTIFICATE----- - -PSCProcert -========== ------BEGIN CERTIFICATE----- -MIIJhjCCB26gAwIBAgIBCzANBgkqhkiG9w0BAQsFADCCAR4xPjA8BgNVBAMTNUF1dG9yaWRhZCBk -ZSBDZXJ0aWZpY2FjaW9uIFJhaXogZGVsIEVzdGFkbyBWZW5lem9sYW5vMQswCQYDVQQGEwJWRTEQ -MA4GA1UEBxMHQ2FyYWNhczEZMBcGA1UECBMQRGlzdHJpdG8gQ2FwaXRhbDE2MDQGA1UEChMtU2lz -dGVtYSBOYWNpb25hbCBkZSBDZXJ0aWZpY2FjaW9uIEVsZWN0cm9uaWNhMUMwQQYDVQQLEzpTdXBl -cmludGVuZGVuY2lhIGRlIFNlcnZpY2lvcyBkZSBDZXJ0aWZpY2FjaW9uIEVsZWN0cm9uaWNhMSUw -IwYJKoZIhvcNAQkBFhZhY3JhaXpAc3VzY2VydGUuZ29iLnZlMB4XDTEwMTIyODE2NTEwMFoXDTIw -MTIyNTIzNTk1OVowgdExJjAkBgkqhkiG9w0BCQEWF2NvbnRhY3RvQHByb2NlcnQubmV0LnZlMQ8w -DQYDVQQHEwZDaGFjYW8xEDAOBgNVBAgTB01pcmFuZGExKjAoBgNVBAsTIVByb3ZlZWRvciBkZSBD -ZXJ0aWZpY2Fkb3MgUFJPQ0VSVDE2MDQGA1UEChMtU2lzdGVtYSBOYWNpb25hbCBkZSBDZXJ0aWZp -Y2FjaW9uIEVsZWN0cm9uaWNhMQswCQYDVQQGEwJWRTETMBEGA1UEAxMKUFNDUHJvY2VydDCCAiIw -DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANW39KOUM6FGqVVhSQ2oh3NekS1wwQYalNo97BVC -wfWMrmoX8Yqt/ICV6oNEolt6Vc5Pp6XVurgfoCfAUFM+jbnADrgV3NZs+J74BCXfgI8Qhd19L3uA -3VcAZCP4bsm+lU/hdezgfl6VzbHvvnpC2Mks0+saGiKLt38GieU89RLAu9MLmV+QfI4tL3czkkoh -RqipCKzx9hEC2ZUWno0vluYC3XXCFCpa1sl9JcLB/KpnheLsvtF8PPqv1W7/U0HU9TI4seJfxPmO -EO8GqQKJ/+MMbpfg353bIdD0PghpbNjU5Db4g7ayNo+c7zo3Fn2/omnXO1ty0K+qP1xmk6wKImG2 -0qCZyFSTXai20b1dCl53lKItwIKOvMoDKjSuc/HUtQy9vmebVOvh+qBa7Dh+PsHMosdEMXXqP+UH -0quhJZb25uSgXTcYOWEAM11G1ADEtMo88aKjPvM6/2kwLkDd9p+cJsmWN63nOaK/6mnbVSKVUyqU -td+tFjiBdWbjxywbk5yqjKPK2Ww8F22c3HxT4CAnQzb5EuE8XL1mv6JpIzi4mWCZDlZTOpx+FIyw -Bm/xhnaQr/2v/pDGj59/i5IjnOcVdo/Vi5QTcmn7K2FjiO/mpF7moxdqWEfLcU8UC17IAggmosvp -r2uKGcfLFFb14dq12fy/czja+eevbqQ34gcnAgMBAAGjggMXMIIDEzASBgNVHRMBAf8ECDAGAQH/ -AgEBMDcGA1UdEgQwMC6CD3N1c2NlcnRlLmdvYi52ZaAbBgVghl4CAqASDBBSSUYtRy0yMDAwNDAz -Ni0wMB0GA1UdDgQWBBRBDxk4qpl/Qguk1yeYVKIXTC1RVDCCAVAGA1UdIwSCAUcwggFDgBStuyId -xuDSAaj9dlBSk+2YwU2u06GCASakggEiMIIBHjE+MDwGA1UEAxM1QXV0b3JpZGFkIGRlIENlcnRp -ZmljYWNpb24gUmFpeiBkZWwgRXN0YWRvIFZlbmV6b2xhbm8xCzAJBgNVBAYTAlZFMRAwDgYDVQQH -EwdDYXJhY2FzMRkwFwYDVQQIExBEaXN0cml0byBDYXBpdGFsMTYwNAYDVQQKEy1TaXN0ZW1hIE5h -Y2lvbmFsIGRlIENlcnRpZmljYWNpb24gRWxlY3Ryb25pY2ExQzBBBgNVBAsTOlN1cGVyaW50ZW5k -ZW5jaWEgZGUgU2VydmljaW9zIGRlIENlcnRpZmljYWNpb24gRWxlY3Ryb25pY2ExJTAjBgkqhkiG -9w0BCQEWFmFjcmFpekBzdXNjZXJ0ZS5nb2IudmWCAQowDgYDVR0PAQH/BAQDAgEGME0GA1UdEQRG -MESCDnByb2NlcnQubmV0LnZloBUGBWCGXgIBoAwMClBTQy0wMDAwMDKgGwYFYIZeAgKgEgwQUklG -LUotMzE2MzUzNzMtNzB2BgNVHR8EbzBtMEagRKBChkBodHRwOi8vd3d3LnN1c2NlcnRlLmdvYi52 -ZS9sY3IvQ0VSVElGSUNBRE8tUkFJWi1TSEEzODRDUkxERVIuY3JsMCOgIaAfhh1sZGFwOi8vYWNy -YWl6LnN1c2NlcnRlLmdvYi52ZTA3BggrBgEFBQcBAQQrMCkwJwYIKwYBBQUHMAGGG2h0dHA6Ly9v -Y3NwLnN1c2NlcnRlLmdvYi52ZTBBBgNVHSAEOjA4MDYGBmCGXgMBAjAsMCoGCCsGAQUFBwIBFh5o -dHRwOi8vd3d3LnN1c2NlcnRlLmdvYi52ZS9kcGMwDQYJKoZIhvcNAQELBQADggIBACtZ6yKZu4Sq -T96QxtGGcSOeSwORR3C7wJJg7ODU523G0+1ng3dS1fLld6c2suNUvtm7CpsR72H0xpkzmfWvADmN -g7+mvTV+LFwxNG9s2/NkAZiqlCxB3RWGymspThbASfzXg0gTB1GEMVKIu4YXx2sviiCtxQuPcD4q -uxtxj7mkoP3YldmvWb8lK5jpY5MvYB7Eqvh39YtsL+1+LrVPQA3uvFd359m21D+VJzog1eWuq2w1 -n8GhHVnchIHuTQfiSLaeS5UtQbHh6N5+LwUeaO6/u5BlOsju6rEYNxxik6SgMexxbJHmpHmJWhSn -FFAFTKQAVzAswbVhltw+HoSvOULP5dAssSS830DD7X9jSr3hTxJkhpXzsOfIt+FTvZLm8wyWuevo -5pLtp4EJFAv8lXrPj9Y0TzYS3F7RNHXGRoAvlQSMx4bEqCaJqD8Zm4G7UaRKhqsLEQ+xrmNTbSjq -3TNWOByyrYDT13K9mmyZY+gAu0F2BbdbmRiKw7gSXFbPVgx96OLP7bx0R/vu0xdOIk9W/1DzLuY5 -poLWccret9W6aAjtmcz9opLLabid+Qqkpj5PkygqYWwHJgD/ll9ohri4zspV4KuxPX+Y1zMOWj3Y -eMLEYC/HYvBhkdI4sPaeVdtAgAUSM84dkpvRabP/v/GSCmE1P93+hvS84Bpxs2Km ------END CERTIFICATE----- - -China Internet Network Information Center EV Certificates Root -============================================================== ------BEGIN CERTIFICATE----- -MIID9zCCAt+gAwIBAgIESJ8AATANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMCQ04xMjAwBgNV -BAoMKUNoaW5hIEludGVybmV0IE5ldHdvcmsgSW5mb3JtYXRpb24gQ2VudGVyMUcwRQYDVQQDDD5D -aGluYSBJbnRlcm5ldCBOZXR3b3JrIEluZm9ybWF0aW9uIENlbnRlciBFViBDZXJ0aWZpY2F0ZXMg -Um9vdDAeFw0xMDA4MzEwNzExMjVaFw0zMDA4MzEwNzExMjVaMIGKMQswCQYDVQQGEwJDTjEyMDAG -A1UECgwpQ2hpbmEgSW50ZXJuZXQgTmV0d29yayBJbmZvcm1hdGlvbiBDZW50ZXIxRzBFBgNVBAMM -PkNoaW5hIEludGVybmV0IE5ldHdvcmsgSW5mb3JtYXRpb24gQ2VudGVyIEVWIENlcnRpZmljYXRl -cyBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAm35z7r07eKpkQ0H1UN+U8i6y -jUqORlTSIRLIOTJCBumD1Z9S7eVnAztUwYyZmczpwA//DdmEEbK40ctb3B75aDFk4Zv6dOtouSCV -98YPjUesWgbdYavi7NifFy2cyjw1l1VxzUOFsUcW9SxTgHbP0wBkvUCZ3czY28Sf1hNfQYOL+Q2H -klY0bBoQCxfVWhyXWIQ8hBouXJE0bhlffxdpxWXvayHG1VA6v2G5BY3vbzQ6sm8UY78WO5upKv23 -KzhmBsUs4qpnHkWnjQRmQvaPK++IIGmPMowUc9orhpFjIpryp9vOiYurXccUwVswah+xt54ugQEC -7c+WXmPbqOY4twIDAQABo2MwYTAfBgNVHSMEGDAWgBR8cks5x8DbYqVPm6oYNJKiyoOCWTAPBgNV -HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUfHJLOcfA22KlT5uqGDSSosqD -glkwDQYJKoZIhvcNAQEFBQADggEBACrDx0M3j92tpLIM7twUbY8opJhJywyA6vPtI2Z1fcXTIWd5 -0XPFtQO3WKwMVC/GVhMPMdoG52U7HW8228gd+f2ABsqjPWYWqJ1MFn3AlUa1UeTiH9fqBk1jjZaM -7+czV0I664zBechNdn3e9rG3geCg+aF4RhcaVpjwTj2rHO3sOdwHSPdj/gauwqRcalsyiMXHM4Ws -ZkJHwlgkmeHlPuV1LI5D1l08eB6olYIpUNHRFrrvwb562bTYzB5MRuF3sTGrvSrIzo9uoV1/A3U0 -5K2JRVRevq4opbs/eHnrc7MKDf2+yfdWrPa37S+bISnHOLaVxATywy39FCqQmbkHzJ8= ------END CERTIFICATE----- - -Swisscom Root CA 2 -================== ------BEGIN CERTIFICATE----- -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 -5OfNeOI5wSsSnqaeG8XmDtkx2Q== ------END CERTIFICATE----- - -Swisscom Root EV CA 2 -===================== ------BEGIN CERTIFICATE----- -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 -l8PVP3wbI+2ksx0WckNLIOFZfsLorSa/ovc= ------END CERTIFICATE----- - -CA Disig Root R1 -================ ------BEGIN CERTIFICATE----- -MIIFaTCCA1GgAwIBAgIJAMMDmu5QkG4oMA0GCSqGSIb3DQEBBQUAMFIxCzAJBgNVBAYTAlNLMRMw -EQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMuMRkwFwYDVQQDExBDQSBEaXNp -ZyBSb290IFIxMB4XDTEyMDcxOTA5MDY1NloXDTQyMDcxOTA5MDY1NlowUjELMAkGA1UEBhMCU0sx -EzARBgNVBAcTCkJyYXRpc2xhdmExEzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERp -c2lnIFJvb3QgUjEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCqw3j33Jijp1pedxiy -3QRkD2P9m5YJgNXoqqXinCaUOuiZc4yd39ffg/N4T0Dhf9Kn0uXKE5Pn7cZ3Xza1lK/oOI7bm+V8 -u8yN63Vz4STN5qctGS7Y1oprFOsIYgrY3LMATcMjfF9DCCMyEtztDK3AfQ+lekLZWnDZv6fXARz2 -m6uOt0qGeKAeVjGu74IKgEH3G8muqzIm1Cxr7X1r5OJeIgpFy4QxTaz+29FHuvlglzmxZcfe+5nk -CiKxLU3lSCZpq+Kq8/v8kiky6bM+TR8noc2OuRf7JT7JbvN32g0S9l3HuzYQ1VTW8+DiR0jm3hTa -YVKvJrT1cU/J19IG32PK/yHoWQbgCNWEFVP3Q+V8xaCJmGtzxmjOZd69fwX3se72V6FglcXM6pM6 -vpmumwKjrckWtc7dXpl4fho5frLABaTAgqWjR56M6ly2vGfb5ipN0gTco65F97yLnByn1tUD3AjL -LhbKXEAz6GfDLuemROoRRRw1ZS0eRWEkG4IupZ0zXWX4Qfkuy5Q/H6MMMSRE7cderVC6xkGbrPAX -ZcD4XW9boAo0PO7X6oifmPmvTiT6l7Jkdtqr9O3jw2Dv1fkCyC2fg69naQanMVXVz0tv/wQFx1is -XxYb5dKj6zHbHzMVTdDypVP1y+E9Tmgt2BLdqvLmTZtJ5cUoobqwWsagtQIDAQABo0IwQDAPBgNV -HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUiQq0OJMa5qvum5EY+fU8PjXQ -04IwDQYJKoZIhvcNAQEFBQADggIBADKL9p1Kyb4U5YysOMo6CdQbzoaz3evUuii+Eq5FLAR0rBNR -xVgYZk2C2tXck8An4b58n1KeElb21Zyp9HWc+jcSjxyT7Ff+Bw+r1RL3D65hXlaASfX8MPWbTx9B -LxyE04nH4toCdu0Jz2zBuByDHBb6lM19oMgY0sidbvW9adRtPTXoHqJPYNcHKfyyo6SdbhWSVhlM -CrDpfNIZTUJG7L399ldb3Zh+pE3McgODWF3vkzpBemOqfDqo9ayk0d2iLbYq/J8BjuIQscTK5Gfb -VSUZP/3oNn6z4eGBrxEWi1CXYBmCAMBrTXO40RMHPuq2MU/wQppt4hF05ZSsjYSVPCGvxdpHyN85 -YmLLW1AL14FABZyb7bq2ix4Eb5YgOe2kfSnbSM6C3NQCjR0EMVrHS/BsYVLXtFHCgWzN4funodKS -ds+xDzdYpPJScWc/DIh4gInByLUfkmO+p3qKViwaqKactV2zY9ATIKHrkWzQjX2v3wvkF7mGnjix -lAxYjOBVqjtjbZqJYLhkKpLGN/R+Q0O3c+gB53+XD9fyexn9GtePyfqFa3qdnom2piiZk4hA9z7N -UaPK6u95RyG1/jLix8NRb76AdPCkwzryT+lf3xkK8jsTQ6wxpLPn6/wY1gGp8yqPNg7rtLG8t0zJ -a7+h89n07eLw4+1knj0vllJPgFOL ------END CERTIFICATE----- - -CA Disig Root R2 -================ ------BEGIN CERTIFICATE----- -MIIFaTCCA1GgAwIBAgIJAJK4iNuwisFjMA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNVBAYTAlNLMRMw -EQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMuMRkwFwYDVQQDExBDQSBEaXNp -ZyBSb290IFIyMB4XDTEyMDcxOTA5MTUzMFoXDTQyMDcxOTA5MTUzMFowUjELMAkGA1UEBhMCU0sx -EzARBgNVBAcTCkJyYXRpc2xhdmExEzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERp -c2lnIFJvb3QgUjIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCio8QACdaFXS1tFPbC -w3OeNcJxVX6B+6tGUODBfEl45qt5WDza/3wcn9iXAng+a0EE6UG9vgMsRfYvZNSrXaNHPWSb6Wia -xswbP7q+sos0Ai6YVRn8jG+qX9pMzk0DIaPY0jSTVpbLTAwAFjxfGs3Ix2ymrdMxp7zo5eFm1tL7 -A7RBZckQrg4FY8aAamkw/dLukO8NJ9+flXP04SXabBbeQTg06ov80egEFGEtQX6sx3dOy1FU+16S -GBsEWmjGycT6txOgmLcRK7fWV8x8nhfRyyX+hk4kLlYMeE2eARKmK6cBZW58Yh2EhN/qwGu1pSqV -g8NTEQxzHQuyRpDRQjrOQG6Vrf/GlK1ul4SOfW+eioANSW1z4nuSHsPzwfPrLgVv2RvPN3YEyLRa -5Beny912H9AZdugsBbPWnDTYltxhh5EF5EQIM8HauQhl1K6yNg3ruji6DOWbnuuNZt2Zz9aJQfYE -koopKW1rOhzndX0CcQ7zwOe9yxndnWCywmZgtrEE7snmhrmaZkCo5xHtgUUDi/ZnWejBBhG93c+A -Ak9lQHhcR1DIm+YfgXvkRKhbhZri3lrVx/k6RGZL5DJUfORsnLMOPReisjQS1n6yqEm70XooQL6i -Fh/f5DcfEXP7kAplQ6INfPgGAVUzfbANuPT1rqVCV3w2EYx7XsQDnYx5nQIDAQABo0IwQDAPBgNV -HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUtZn4r7CU9eMg1gqtzk5WpC5u -Qu0wDQYJKoZIhvcNAQELBQADggIBACYGXnDnZTPIgm7ZnBc6G3pmsgH2eDtpXi/q/075KMOYKmFM -tCQSin1tERT3nLXK5ryeJ45MGcipvXrA1zYObYVybqjGom32+nNjf7xueQgcnYqfGopTpti72TVV -sRHFqQOzVju5hJMiXn7B9hJSi+osZ7z+Nkz1uM/Rs0mSO9MpDpkblvdhuDvEK7Z4bLQjb/D907Je -dR+Zlais9trhxTF7+9FGs9K8Z7RiVLoJ92Owk6Ka+elSLotgEqv89WBW7xBci8QaQtyDW2QOy7W8 -1k/BfDxujRNt+3vrMNDcTa/F1balTFtxyegxvug4BkihGuLq0t4SOVga/4AOgnXmt8kHbA7v/zjx -mHHEt38OFdAlab0inSvtBfZGR6ztwPDUO+Ls7pZbkBNOHlY667DvlruWIxG68kOGdGSVyCh13x01 -utI3gzhTODY7z2zp+WsO0PsE6E9312UBeIYMej4hYvF/Y3EMyZ9E26gnonW+boE+18DrG5gPcFw0 -sorMwIUY6256s/daoQe/qUKS82Ail+QUoQebTnbAjn39pCXHR+3/H3OszMOl6W8KjptlwlCFtaOg -UxLMVYdh84GuEEZhvUQhuMI9dM9+JDX6HAcOmz0iyu8xL4ysEr3vQCj8KWefshNPZiTEUxnpHikV -7+ZtsH8tZ/3zbBt1RqPlShfppNcL ------END CERTIFICATE----- - -ACCVRAIZ1 -========= ------BEGIN CERTIFICATE----- -MIIH0zCCBbugAwIBAgIIXsO3pkN/pOAwDQYJKoZIhvcNAQEFBQAwQjESMBAGA1UEAwwJQUNDVlJB -SVoxMRAwDgYDVQQLDAdQS0lBQ0NWMQ0wCwYDVQQKDARBQ0NWMQswCQYDVQQGEwJFUzAeFw0xMTA1 -MDUwOTM3MzdaFw0zMDEyMzEwOTM3MzdaMEIxEjAQBgNVBAMMCUFDQ1ZSQUlaMTEQMA4GA1UECwwH -UEtJQUNDVjENMAsGA1UECgwEQUNDVjELMAkGA1UEBhMCRVMwggIiMA0GCSqGSIb3DQEBAQUAA4IC -DwAwggIKAoICAQCbqau/YUqXry+XZpp0X9DZlv3P4uRm7x8fRzPCRKPfmt4ftVTdFXxpNRFvu8gM -jmoYHtiP2Ra8EEg2XPBjs5BaXCQ316PWywlxufEBcoSwfdtNgM3802/J+Nq2DoLSRYWoG2ioPej0 -RGy9ocLLA76MPhMAhN9KSMDjIgro6TenGEyxCQ0jVn8ETdkXhBilyNpAlHPrzg5XPAOBOp0KoVdD -aaxXbXmQeOW1tDvYvEyNKKGno6e6Ak4l0Squ7a4DIrhrIA8wKFSVf+DuzgpmndFALW4ir50awQUZ -0m/A8p/4e7MCQvtQqR0tkw8jq8bBD5L/0KIV9VMJcRz/RROE5iZe+OCIHAr8Fraocwa48GOEAqDG -WuzndN9wrqODJerWx5eHk6fGioozl2A3ED6XPm4pFdahD9GILBKfb6qkxkLrQaLjlUPTAYVtjrs7 -8yM2x/474KElB0iryYl0/wiPgL/AlmXz7uxLaL2diMMxs0Dx6M/2OLuc5NF/1OVYm3z61PMOm3WR -5LpSLhl+0fXNWhn8ugb2+1KoS5kE3fj5tItQo05iifCHJPqDQsGH+tUtKSpacXpkatcnYGMN285J -9Y0fkIkyF/hzQ7jSWpOGYdbhdQrqeWZ2iE9x6wQl1gpaepPluUsXQA+xtrn13k/c4LOsOxFwYIRK -Q26ZIMApcQrAZQIDAQABo4ICyzCCAscwfQYIKwYBBQUHAQEEcTBvMEwGCCsGAQUFBzAChkBodHRw -Oi8vd3d3LmFjY3YuZXMvZmlsZWFkbWluL0FyY2hpdm9zL2NlcnRpZmljYWRvcy9yYWl6YWNjdjEu -Y3J0MB8GCCsGAQUFBzABhhNodHRwOi8vb2NzcC5hY2N2LmVzMB0GA1UdDgQWBBTSh7Tj3zcnk1X2 -VuqB5TbMjB4/vTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNKHtOPfNyeTVfZW6oHlNsyM -Hj+9MIIBcwYDVR0gBIIBajCCAWYwggFiBgRVHSAAMIIBWDCCASIGCCsGAQUFBwICMIIBFB6CARAA -QQB1AHQAbwByAGkAZABhAGQAIABkAGUAIABDAGUAcgB0AGkAZgBpAGMAYQBjAGkA8wBuACAAUgBh -AO0AegAgAGQAZQAgAGwAYQAgAEEAQwBDAFYAIAAoAEEAZwBlAG4AYwBpAGEAIABkAGUAIABUAGUA -YwBuAG8AbABvAGcA7QBhACAAeQAgAEMAZQByAHQAaQBmAGkAYwBhAGMAaQDzAG4AIABFAGwAZQBj -AHQAcgDzAG4AaQBjAGEALAAgAEMASQBGACAAUQA0ADYAMAAxADEANQA2AEUAKQAuACAAQwBQAFMA -IABlAG4AIABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBjAGMAdgAuAGUAczAwBggrBgEFBQcCARYk -aHR0cDovL3d3dy5hY2N2LmVzL2xlZ2lzbGFjaW9uX2MuaHRtMFUGA1UdHwROMEwwSqBIoEaGRGh0 -dHA6Ly93d3cuYWNjdi5lcy9maWxlYWRtaW4vQXJjaGl2b3MvY2VydGlmaWNhZG9zL3JhaXphY2N2 -MV9kZXIuY3JsMA4GA1UdDwEB/wQEAwIBBjAXBgNVHREEEDAOgQxhY2N2QGFjY3YuZXMwDQYJKoZI -hvcNAQEFBQADggIBAJcxAp/n/UNnSEQU5CmH7UwoZtCPNdpNYbdKl02125DgBS4OxnnQ8pdpD70E -R9m+27Up2pvZrqmZ1dM8MJP1jaGo/AaNRPTKFpV8M9xii6g3+CfYCS0b78gUJyCpZET/LtZ1qmxN -YEAZSUNUY9rizLpm5U9EelvZaoErQNV/+QEnWCzI7UiRfD+mAM/EKXMRNt6GGT6d7hmKG9Ww7Y49 -nCrADdg9ZuM8Db3VlFzi4qc1GwQA9j9ajepDvV+JHanBsMyZ4k0ACtrJJ1vnE5Bc5PUzolVt3OAJ -TS+xJlsndQAJxGJ3KQhfnlmstn6tn1QwIgPBHnFk/vk4CpYY3QIUrCPLBhwepH2NDd4nQeit2hW3 -sCPdK6jT2iWH7ehVRE2I9DZ+hJp4rPcOVkkO1jMl1oRQQmwgEh0q1b688nCBpHBgvgW1m54ERL5h -I6zppSSMEYCUWqKiuUnSwdzRp+0xESyeGabu4VXhwOrPDYTkF7eifKXeVSUG7szAh1xA2syVP1Xg -Nce4hL60Xc16gwFy7ofmXx2utYXGJt/mwZrpHgJHnyqobalbz+xFd3+YJ5oyXSrjhO7FmGYvliAd -3djDJ9ew+f7Zfc3Qn48LFFhRny+Lwzgt3uiP1o2HpPVWQxaZLPSkVrQ0uGE3ycJYgBugl6H8WY3p -EfbRD0tVNEYqi4Y7 ------END CERTIFICATE----- - -TWCA Global Root CA -=================== ------BEGIN CERTIFICATE----- -MIIFQTCCAymgAwIBAgICDL4wDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCVFcxEjAQBgNVBAoT -CVRBSVdBTi1DQTEQMA4GA1UECxMHUm9vdCBDQTEcMBoGA1UEAxMTVFdDQSBHbG9iYWwgUm9vdCBD -QTAeFw0xMjA2MjcwNjI4MzNaFw0zMDEyMzExNTU5NTlaMFExCzAJBgNVBAYTAlRXMRIwEAYDVQQK -EwlUQUlXQU4tQ0ExEDAOBgNVBAsTB1Jvb3QgQ0ExHDAaBgNVBAMTE1RXQ0EgR2xvYmFsIFJvb3Qg -Q0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCwBdvI64zEbooh745NnHEKH1Jw7W2C -nJfF10xORUnLQEK1EjRsGcJ0pDFfhQKX7EMzClPSnIyOt7h52yvVavKOZsTuKwEHktSz0ALfUPZV -r2YOy+BHYC8rMjk1Ujoog/h7FsYYuGLWRyWRzvAZEk2tY/XTP3VfKfChMBwqoJimFb3u/Rk28OKR -Q4/6ytYQJ0lM793B8YVwm8rqqFpD/G2Gb3PpN0Wp8DbHzIh1HrtsBv+baz4X7GGqcXzGHaL3SekV -tTzWoWH1EfcFbx39Eb7QMAfCKbAJTibc46KokWofwpFFiFzlmLhxpRUZyXx1EcxwdE8tmx2RRP1W -KKD+u4ZqyPpcC1jcxkt2yKsi2XMPpfRaAok/T54igu6idFMqPVMnaR1sjjIsZAAmY2E2TqNGtz99 -sy2sbZCilaLOz9qC5wc0GZbpuCGqKX6mOL6OKUohZnkfs8O1CWfe1tQHRvMq2uYiN2DLgbYPoA/p -yJV/v1WRBXrPPRXAb94JlAGD1zQbzECl8LibZ9WYkTunhHiVJqRaCPgrdLQABDzfuBSO6N+pjWxn -kjMdwLfS7JLIvgm/LCkFbwJrnu+8vyq8W8BQj0FwcYeyTbcEqYSjMq+u7msXi7Kx/mzhkIyIqJdI -zshNy/MGz19qCkKxHh53L46g5pIOBvwFItIm4TFRfTLcDwIDAQABoyMwITAOBgNVHQ8BAf8EBAMC -AQYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAXzSBdu+WHdXltdkCY4QWwa6g -cFGn90xHNcgL1yg9iXHZqjNB6hQbbCEAwGxCGX6faVsgQt+i0trEfJdLjbDorMjupWkEmQqSpqsn -LhpNgb+E1HAerUf+/UqdM+DyucRFCCEK2mlpc3INvjT+lIutwx4116KD7+U4x6WFH6vPNOw/KP4M -8VeGTslV9xzU2KV9Bnpv1d8Q34FOIWWxtuEXeZVFBs5fzNxGiWNoRI2T9GRwoD2dKAXDOXC4Ynsg -/eTb6QihuJ49CcdP+yz4k3ZB3lLg4VfSnQO8d57+nile98FRYB/e2guyLXW3Q0iT5/Z5xoRdgFlg -lPx4mI88k1HtQJAH32RjJMtOcQWh15QaiDLxInQirqWm2BJpTGCjAu4r7NRjkgtevi92a6O2JryP -A9gK8kxkRr05YuWW6zRjESjMlfGt7+/cgFhI6Uu46mWs6fyAtbXIRfmswZ/ZuepiiI7E8UuDEq3m -i4TWnsLrgxifarsbJGAzcMzs9zLzXNl5fe+epP7JI8Mk7hWSsT2RTyaGvWZzJBPqpK5jwa19hAM8 -EHiGG3njxPPyBJUgriOCxLM6AGK/5jYk4Ve6xx6QddVfP5VhK8E7zeWzaGHQRiapIVJpLesux+t3 -zqY6tQMzT3bR51xUAV3LePTJDL/PEo4XLSNolOer/qmyKwbQBM0= ------END CERTIFICATE----- - -TeliaSonera Root CA v1 -====================== ------BEGIN CERTIFICATE----- -MIIFODCCAyCgAwIBAgIRAJW+FqD3LkbxezmCcvqLzZYwDQYJKoZIhvcNAQEFBQAwNzEUMBIGA1UE -CgwLVGVsaWFTb25lcmExHzAdBgNVBAMMFlRlbGlhU29uZXJhIFJvb3QgQ0EgdjEwHhcNMDcxMDE4 -MTIwMDUwWhcNMzIxMDE4MTIwMDUwWjA3MRQwEgYDVQQKDAtUZWxpYVNvbmVyYTEfMB0GA1UEAwwW -VGVsaWFTb25lcmEgUm9vdCBDQSB2MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMK+ -6yfwIaPzaSZVfp3FVRaRXP3vIb9TgHot0pGMYzHw7CTww6XScnwQbfQ3t+XmfHnqjLWCi65ItqwA -3GV17CpNX8GH9SBlK4GoRz6JI5UwFpB/6FcHSOcZrr9FZ7E3GwYq/t75rH2D+1665I+XZ75Ljo1k -B1c4VWk0Nj0TSO9P4tNmHqTPGrdeNjPUtAa9GAH9d4RQAEX1jF3oI7x+/jXh7VB7qTCNGdMJjmhn -Xb88lxhTuylixcpecsHHltTbLaC0H2kD7OriUPEMPPCs81Mt8Bz17Ww5OXOAFshSsCPN4D7c3TxH -oLs1iuKYaIu+5b9y7tL6pe0S7fyYGKkmdtwoSxAgHNN/Fnct7W+A90m7UwW7XWjH1Mh1Fj+JWov3 -F0fUTPHSiXk+TT2YqGHeOh7S+F4D4MHJHIzTjU3TlTazN19jY5szFPAtJmtTfImMMsJu7D0hADnJ -oWjiUIMusDor8zagrC/kb2HCUQk5PotTubtn2txTuXZZNp1D5SDgPTJghSJRt8czu90VL6R4pgd7 -gUY2BIbdeTXHlSw7sKMXNeVzH7RcWe/a6hBle3rQf5+ztCo3O3CLm1u5K7fsslESl1MpWtTwEhDc -TwK7EpIvYtQ/aUN8Ddb8WHUBiJ1YFkveupD/RwGJBmr2X7KQarMCpgKIv7NHfirZ1fpoeDVNAgMB -AAGjPzA9MA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBTwj1k4ALP1j5qW -DNXr+nuqF+gTEjANBgkqhkiG9w0BAQUFAAOCAgEAvuRcYk4k9AwI//DTDGjkk0kiP0Qnb7tt3oNm -zqjMDfz1mgbldxSR651Be5kqhOX//CHBXfDkH1e3damhXwIm/9fH907eT/j3HEbAek9ALCI18Bmx -0GtnLLCo4MBANzX2hFxc469CeP6nyQ1Q6g2EdvZR74NTxnr/DlZJLo961gzmJ1TjTQpgcmLNkQfW -pb/ImWvtxBnmq0wROMVvMeJuScg/doAmAyYp4Db29iBT4xdwNBedY2gea+zDTYa4EzAvXUYNR0PV -G6pZDrlcjQZIrXSHX8f8MVRBE+LHIQ6e4B4N4cB7Q4WQxYpYxmUKeFfyxiMPAdkgS94P+5KFdSpc -c41teyWRyu5FrgZLAMzTsVlQ2jqIOylDRl6XK1TOU2+NSueW+r9xDkKLfP0ooNBIytrEgUy7onOT -JsjrDNYmiLbAJM+7vVvrdX3pCI6GMyx5dwlppYn8s3CQh3aP0yK7Qs69cwsgJirQmz1wHiRszYd2 -qReWt88NkvuOGKmYSdGe/mBEciG5Ge3C9THxOUiIkCR1VBatzvT4aRRkOfujuLpwQMcnHL/EVlP6 -Y2XQ8xwOFvVrhlhNGNTkDY6lnVuR3HYkUD/GKvvZt5y11ubQ2egZixVxSK236thZiNSQvxaz2ems -WWFUyBy6ysHK4bkgTI86k4mloMy/0/Z1pHWWbVY= ------END CERTIFICATE----- - -E-Tugra Certification Authority -=============================== ------BEGIN CERTIFICATE----- -MIIGSzCCBDOgAwIBAgIIamg+nFGby1MwDQYJKoZIhvcNAQELBQAwgbIxCzAJBgNVBAYTAlRSMQ8w -DQYDVQQHDAZBbmthcmExQDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamls -ZXJpIHZlIEhpem1ldGxlcmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBN -ZXJrZXppMSgwJgYDVQQDDB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTEzMDMw -NTEyMDk0OFoXDTIzMDMwMzEyMDk0OFowgbIxCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmEx -QDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhpem1ldGxl -cmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBNZXJrZXppMSgwJgYDVQQD -DB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEFAAOCAg8A -MIICCgKCAgEA4vU/kwVRHoViVF56C/UYB4Oufq9899SKa6VjQzm5S/fDxmSJPZQuVIBSOTkHS0vd -hQd2h8y/L5VMzH2nPbxHD5hw+IyFHnSOkm0bQNGZDbt1bsipa5rAhDGvykPL6ys06I+XawGb1Q5K -CKpbknSFQ9OArqGIW66z6l7LFpp3RMih9lRozt6Plyu6W0ACDGQXwLWTzeHxE2bODHnv0ZEoq1+g -ElIwcxmOj+GMB6LDu0rw6h8VqO4lzKRG+Bsi77MOQ7osJLjFLFzUHPhdZL3Dk14opz8n8Y4e0ypQ -BaNV2cvnOVPAmJ6MVGKLJrD3fY185MaeZkJVgkfnsliNZvcHfC425lAcP9tDJMW/hkd5s3kc91r0 -E+xs+D/iWR+V7kI+ua2oMoVJl0b+SzGPWsutdEcf6ZG33ygEIqDUD13ieU/qbIWGvaimzuT6w+Gz -rt48Ue7LE3wBf4QOXVGUnhMMti6lTPk5cDZvlsouDERVxcr6XQKj39ZkjFqzAQqptQpHF//vkUAq -jqFGOjGY5RH8zLtJVor8udBhmm9lbObDyz51Sf6Pp+KJxWfXnUYTTjF2OySznhFlhqt/7x3U+Lzn -rFpct1pHXFXOVbQicVtbC/DP3KBhZOqp12gKY6fgDT+gr9Oq0n7vUaDmUStVkhUXU8u3Zg5mTPj5 -dUyQ5xJwx0UCAwEAAaNjMGEwHQYDVR0OBBYEFC7j27JJ0JxUeVz6Jyr+zE7S6E5UMA8GA1UdEwEB -/wQFMAMBAf8wHwYDVR0jBBgwFoAULuPbsknQnFR5XPonKv7MTtLoTlQwDgYDVR0PAQH/BAQDAgEG -MA0GCSqGSIb3DQEBCwUAA4ICAQAFNzr0TbdF4kV1JI+2d1LoHNgQk2Xz8lkGpD4eKexd0dCrfOAK -kEh47U6YA5n+KGCRHTAduGN8qOY1tfrTYXbm1gdLymmasoR6d5NFFxWfJNCYExL/u6Au/U5Mh/jO -XKqYGwXgAEZKgoClM4so3O0409/lPun++1ndYYRP0lSWE2ETPo+Aab6TR7U1Q9Jauz1c77NCR807 -VRMGsAnb/WP2OogKmW9+4c4bU2pEZiNRCHu8W1Ki/QY3OEBhj0qWuJA3+GbHeJAAFS6LrVE1Uweo -a2iu+U48BybNCAVwzDk/dr2l02cmAYamU9JgO3xDf1WKvJUawSg5TB9D0pH0clmKuVb8P7Sd2nCc -dlqMQ1DujjByTd//SffGqWfZbawCEeI6FiWnWAjLb1NBnEg4R2gz0dfHj9R0IdTDBZB6/86WiLEV -KV0jq9BgoRJP3vQXzTLlyb/IQ639Lo7xr+L0mPoSHyDYwKcMhcWQ9DstliaxLL5Mq+ux0orJ23gT -Dx4JnW2PAJ8C2sH6H3p6CcRK5ogql5+Ji/03X186zjhZhkuvcQu02PJwT58yE+Owp1fl2tpDy4Q0 -8ijE6m30Ku/Ba3ba+367hTzSU8JNvnHhRdH9I2cNE3X7z2VnIp2usAnRCf8dNL/+I5c30jn6PQ0G -C7TbO6Orb1wdtn7os4I07QZcJA== ------END CERTIFICATE----- - -T-TeleSec GlobalRoot Class 2 -============================ ------BEGIN CERTIFICATE----- -MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM -IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU -cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgx -MDAxMTA0MDE0WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz -dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD -ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUdAqSzm1nzHoqvNK38DcLZ -SBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiCFoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/F -vudocP05l03Sx5iRUKrERLMjfTlH6VJi1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx970 -2cu+fjOlbpSD8DT6IavqjnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGV -WOHAD3bZwI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGjQjBA -MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/WSA2AHmgoCJrjNXy -YdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhyNsZt+U2e+iKo4YFWz827n+qrkRk4 -r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPACuvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNf -vNoBYimipidx5joifsFvHZVwIEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR -3p1m0IvVVGb6g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN -9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlPBSeOE6Fuwg== ------END CERTIFICATE----- - -Atos TrustedRoot 2011 -===================== ------BEGIN CERTIFICATE----- -MIIDdzCCAl+gAwIBAgIIXDPLYixfszIwDQYJKoZIhvcNAQELBQAwPDEeMBwGA1UEAwwVQXRvcyBU -cnVzdGVkUm9vdCAyMDExMQ0wCwYDVQQKDARBdG9zMQswCQYDVQQGEwJERTAeFw0xMTA3MDcxNDU4 -MzBaFw0zMDEyMzEyMzU5NTlaMDwxHjAcBgNVBAMMFUF0b3MgVHJ1c3RlZFJvb3QgMjAxMTENMAsG -A1UECgwEQXRvczELMAkGA1UEBhMCREUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCV -hTuXbyo7LjvPpvMpNb7PGKw+qtn4TaA+Gke5vJrf8v7MPkfoepbCJI419KkM/IL9bcFyYie96mvr -54rMVD6QUM+A1JX76LWC1BTFtqlVJVfbsVD2sGBkWXppzwO3bw2+yj5vdHLqqjAqc2K+SZFhyBH+ -DgMq92og3AIVDV4VavzjgsG1xZ1kCWyjWZgHJ8cblithdHFsQ/H3NYkQ4J7sVaE3IqKHBAUsR320 -HLliKWYoyrfhk/WklAOZuXCFteZI6o1Q/NnezG8HDt0Lcp2AMBYHlT8oDv3FdU9T1nSatCQujgKR -z3bFmx5VdJx4IbHwLfELn8LVlhgf8FQieowHAgMBAAGjfTB7MB0GA1UdDgQWBBSnpQaxLKYJYO7R -l+lwrrw7GWzbITAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKelBrEspglg7tGX6XCuvDsZ -bNshMBgGA1UdIAQRMA8wDQYLKwYBBAGwLQMEAQEwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB -CwUAA4IBAQAmdzTblEiGKkGdLD4GkGDEjKwLVLgfuXvTBznk+j57sj1O7Z8jvZfza1zv7v1Apt+h -k6EKhqzvINB5Ab149xnYJDE0BAGmuhWawyfc2E8PzBhj/5kPDpFrdRbhIfzYJsdHt6bPWHJxfrrh -TZVHO8mvbaG0weyJ9rQPOLXiZNwlz6bb65pcmaHFCN795trV1lpFDMS3wrUU77QR/w4VtfX128a9 -61qn8FYiqTxlVMYVqL2Gns2Dlmh6cYGJ4Qvh6hEbaAjMaZ7snkGeRDImeuKHCnE96+RapNLbxc3G -3mB/ufNPRJLvKrcYPqcZ2Qt9sTdBQrC6YB3y/gkRsPCHe6ed ------END CERTIFICATE----- - -QuoVadis Root CA 1 G3 -===================== ------BEGIN CERTIFICATE----- -MIIFYDCCA0igAwIBAgIUeFhfLq0sGUvjNwc1NBMotZbUZZMwDQYJKoZIhvcNAQELBQAwSDELMAkG -A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv -b3QgQ0EgMSBHMzAeFw0xMjAxMTIxNzI3NDRaFw00MjAxMTIxNzI3NDRaMEgxCzAJBgNVBAYTAkJN -MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDEg -RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCgvlAQjunybEC0BJyFuTHK3C3kEakE -PBtVwedYMB0ktMPvhd6MLOHBPd+C5k+tR4ds7FtJwUrVu4/sh6x/gpqG7D0DmVIB0jWerNrwU8lm -PNSsAgHaJNM7qAJGr6Qc4/hzWHa39g6QDbXwz8z6+cZM5cOGMAqNF34168Xfuw6cwI2H44g4hWf6 -Pser4BOcBRiYz5P1sZK0/CPTz9XEJ0ngnjybCKOLXSoh4Pw5qlPafX7PGglTvF0FBM+hSo+LdoIN -ofjSxxR3W5A2B4GbPgb6Ul5jxaYA/qXpUhtStZI5cgMJYr2wYBZupt0lwgNm3fME0UDiTouG9G/l -g6AnhF4EwfWQvTA9xO+oabw4m6SkltFi2mnAAZauy8RRNOoMqv8hjlmPSlzkYZqn0ukqeI1RPToV -7qJZjqlc3sX5kCLliEVx3ZGZbHqfPT2YfF72vhZooF6uCyP8Wg+qInYtyaEQHeTTRCOQiJ/GKubX -9ZqzWB4vMIkIG1SitZgj7Ah3HJVdYdHLiZxfokqRmu8hqkkWCKi9YSgxyXSthfbZxbGL0eUQMk1f -iyA6PEkfM4VZDdvLCXVDaXP7a3F98N/ETH3Goy7IlXnLc6KOTk0k+17kBL5yG6YnLUlamXrXXAkg -t3+UuU/xDRxeiEIbEbfnkduebPRq34wGmAOtzCjvpUfzUwIDAQABo0IwQDAPBgNVHRMBAf8EBTAD -AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUo5fW816iEOGrRZ88F2Q87gFwnMwwDQYJKoZI -hvcNAQELBQADggIBABj6W3X8PnrHX3fHyt/PX8MSxEBd1DKquGrX1RUVRpgjpeaQWxiZTOOtQqOC -MTaIzen7xASWSIsBx40Bz1szBpZGZnQdT+3Btrm0DWHMY37XLneMlhwqI2hrhVd2cDMT/uFPpiN3 -GPoajOi9ZcnPP/TJF9zrx7zABC4tRi9pZsMbj/7sPtPKlL92CiUNqXsCHKnQO18LwIE6PWThv6ct -Tr1NxNgpxiIY0MWscgKCP6o6ojoilzHdCGPDdRS5YCgtW2jgFqlmgiNR9etT2DGbe+m3nUvriBbP -+V04ikkwj+3x6xn0dxoxGE1nVGwvb2X52z3sIexe9PSLymBlVNFxZPT5pqOBMzYzcfCkeF9OrYMh -3jRJjehZrJ3ydlo28hP0r+AJx2EqbPfgna67hkooby7utHnNkDPDs3b69fBsnQGQ+p6Q9pxyz0fa -wx/kNSBT8lTR32GDpgLiJTjehTItXnOQUl1CxM49S+H5GYQd1aJQzEH7QRTDvdbJWqNjZgKAvQU6 -O0ec7AAmTPWIUb+oI38YB7AL7YsmoWTTYUrrXJ/es69nA7Mf3W1daWhpq1467HxpvMc7hU6eFbm0 -FU/DlXpY18ls6Wy58yljXrQs8C097Vpl4KlbQMJImYFtnh8GKjwStIsPm6Ik8KaN1nrgS7ZklmOV -hMJKzRwuJIczYOXD ------END CERTIFICATE----- - -QuoVadis Root CA 2 G3 -===================== ------BEGIN CERTIFICATE----- -MIIFYDCCA0igAwIBAgIURFc0JFuBiZs18s64KztbpybwdSgwDQYJKoZIhvcNAQELBQAwSDELMAkG -A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv -b3QgQ0EgMiBHMzAeFw0xMjAxMTIxODU5MzJaFw00MjAxMTIxODU5MzJaMEgxCzAJBgNVBAYTAkJN -MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDIg -RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQChriWyARjcV4g/Ruv5r+LrI3HimtFh -ZiFfqq8nUeVuGxbULX1QsFN3vXg6YOJkApt8hpvWGo6t/x8Vf9WVHhLL5hSEBMHfNrMWn4rjyduY -NM7YMxcoRvynyfDStNVNCXJJ+fKH46nafaF9a7I6JaltUkSs+L5u+9ymc5GQYaYDFCDy54ejiK2t -oIz/pgslUiXnFgHVy7g1gQyjO/Dh4fxaXc6AcW34Sas+O7q414AB+6XrW7PFXmAqMaCvN+ggOp+o -MiwMzAkd056OXbxMmO7FGmh77FOm6RQ1o9/NgJ8MSPsc9PG/Srj61YxxSscfrf5BmrODXfKEVu+l -V0POKa2Mq1W/xPtbAd0jIaFYAI7D0GoT7RPjEiuA3GfmlbLNHiJuKvhB1PLKFAeNilUSxmn1uIZo -L1NesNKqIcGY5jDjZ1XHm26sGahVpkUG0CM62+tlXSoREfA7T8pt9DTEceT/AFr2XK4jYIVz8eQQ -sSWu1ZK7E8EM4DnatDlXtas1qnIhO4M15zHfeiFuuDIIfR0ykRVKYnLP43ehvNURG3YBZwjgQQvD -6xVu+KQZ2aKrr+InUlYrAoosFCT5v0ICvybIxo/gbjh9Uy3l7ZizlWNof/k19N+IxWA1ksB8aRxh -lRbQ694Lrz4EEEVlWFA4r0jyWbYW8jwNkALGcC4BrTwV1wIDAQABo0IwQDAPBgNVHRMBAf8EBTAD -AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU7edvdlq/YOxJW8ald7tyFnGbxD0wDQYJKoZI -hvcNAQELBQADggIBAJHfgD9DCX5xwvfrs4iP4VGyvD11+ShdyLyZm3tdquXK4Qr36LLTn91nMX66 -AarHakE7kNQIXLJgapDwyM4DYvmL7ftuKtwGTTwpD4kWilhMSA/ohGHqPHKmd+RCroijQ1h5fq7K -pVMNqT1wvSAZYaRsOPxDMuHBR//47PERIjKWnML2W2mWeyAMQ0GaW/ZZGYjeVYg3UQt4XAoeo0L9 -x52ID8DyeAIkVJOviYeIyUqAHerQbj5hLja7NQ4nlv1mNDthcnPxFlxHBlRJAHpYErAK74X9sbgz -dWqTHBLmYF5vHX/JHyPLhGGfHoJE+V+tYlUkmlKY7VHnoX6XOuYvHxHaU4AshZ6rNRDbIl9qxV6X -U/IyAgkwo1jwDQHVcsaxfGl7w/U2Rcxhbl5MlMVerugOXou/983g7aEOGzPuVBj+D77vfoRrQ+Nw -mNtddbINWQeFFSM51vHfqSYP1kjHs6Yi9TM3WpVHn3u6GBVv/9YUZINJ0gpnIdsPNWNgKCLjsZWD -zYWm3S8P52dSbrsvhXz1SnPnxT7AvSESBT/8twNJAlvIJebiVDj1eYeMHVOyToV7BjjHLPj4sHKN -JeV3UvQDHEimUF+IIDBu8oJDqz2XhOdT+yHBTw8imoa4WSr2Rz0ZiC3oheGe7IUIarFsNMkd7Egr -O3jtZsSOeWmD3n+M ------END CERTIFICATE----- - -QuoVadis Root CA 3 G3 -===================== ------BEGIN CERTIFICATE----- -MIIFYDCCA0igAwIBAgIULvWbAiin23r/1aOp7r0DoM8Sah0wDQYJKoZIhvcNAQELBQAwSDELMAkG -A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv -b3QgQ0EgMyBHMzAeFw0xMjAxMTIyMDI2MzJaFw00MjAxMTIyMDI2MzJaMEgxCzAJBgNVBAYTAkJN -MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDMg -RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCzyw4QZ47qFJenMioKVjZ/aEzHs286 -IxSR/xl/pcqs7rN2nXrpixurazHb+gtTTK/FpRp5PIpM/6zfJd5O2YIyC0TeytuMrKNuFoM7pmRL -Mon7FhY4futD4tN0SsJiCnMK3UmzV9KwCoWdcTzeo8vAMvMBOSBDGzXRU7Ox7sWTaYI+FrUoRqHe -6okJ7UO4BUaKhvVZR74bbwEhELn9qdIoyhA5CcoTNs+cra1AdHkrAj80//ogaX3T7mH1urPnMNA3 -I4ZyYUUpSFlob3emLoG+B01vr87ERRORFHAGjx+f+IdpsQ7vw4kZ6+ocYfx6bIrc1gMLnia6Et3U -VDmrJqMz6nWB2i3ND0/kA9HvFZcba5DFApCTZgIhsUfei5pKgLlVj7WiL8DWM2fafsSntARE60f7 -5li59wzweyuxwHApw0BiLTtIadwjPEjrewl5qW3aqDCYz4ByA4imW0aucnl8CAMhZa634RylsSqi -Md5mBPfAdOhx3v89WcyWJhKLhZVXGqtrdQtEPREoPHtht+KPZ0/l7DxMYIBpVzgeAVuNVejH38DM -dyM0SXV89pgR6y3e7UEuFAUCf+D+IOs15xGsIs5XPd7JMG0QA4XN8f+MFrXBsj6IbGB/kE+V9/Yt -rQE5BwT6dYB9v0lQ7e/JxHwc64B+27bQ3RP+ydOc17KXqQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD -AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUxhfQvKjqAkPyGwaZXSuQILnXnOQwDQYJKoZI -hvcNAQELBQADggIBADRh2Va1EodVTd2jNTFGu6QHcrxfYWLopfsLN7E8trP6KZ1/AvWkyaiTt3px -KGmPc+FSkNrVvjrlt3ZqVoAh313m6Tqe5T72omnHKgqwGEfcIHB9UqM+WXzBusnIFUBhynLWcKzS -t/Ac5IYp8M7vaGPQtSCKFWGafoaYtMnCdvvMujAWzKNhxnQT5WvvoxXqA/4Ti2Tk08HS6IT7SdEQ -TXlm66r99I0xHnAUrdzeZxNMgRVhvLfZkXdxGYFgu/BYpbWcC/ePIlUnwEsBbTuZDdQdm2NnL9Du -DcpmvJRPpq3t/O5jrFc/ZSXPsoaP0Aj/uHYUbt7lJ+yreLVTubY/6CD50qi+YUbKh4yE8/nxoGib -Ih6BJpsQBJFxwAYf3KDTuVan45gtf4Od34wrnDKOMpTwATwiKp9Dwi7DmDkHOHv8XgBCH/MyJnmD -hPbl8MFREsALHgQjDFSlTC9JxUrRtm5gDWv8a4uFJGS3iQ6rJUdbPM9+Sb3H6QrG2vd+DhcI00iX -0HGS8A85PjRqHH3Y8iKuu2n0M7SmSFXRDw4m6Oy2Cy2nhTXN/VnIn9HNPlopNLk9hM6xZdRZkZFW -dSHBd575euFgndOtBBj0fOtek49TSiIp+EgrPk2GrFt/ywaZWWDYWGWVjUTR939+J399roD1B0y2 -PpxxVJkES/1Y+Zj0 ------END CERTIFICATE----- - -DigiCert Assured ID Root G2 -=========================== ------BEGIN CERTIFICATE----- -MIIDljCCAn6gAwIBAgIQC5McOtY5Z+pnI7/Dr5r0SzANBgkqhkiG9w0BAQsFADBlMQswCQYDVQQG -EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw -IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIwHhcNMTMwODAxMTIwMDAwWhcNMzgw -MTE1MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL -ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIw -ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZ5ygvUj82ckmIkzTz+GoeMVSAn61UQbVH -35ao1K+ALbkKz3X9iaV9JPrjIgwrvJUXCzO/GU1BBpAAvQxNEP4HteccbiJVMWWXvdMX0h5i89vq -bFCMP4QMls+3ywPgym2hFEwbid3tALBSfK+RbLE4E9HpEgjAALAcKxHad3A2m67OeYfcgnDmCXRw -VWmvo2ifv922ebPynXApVfSr/5Vh88lAbx3RvpO704gqu52/clpWcTs/1PPRCv4o76Pu2ZmvA9OP -YLfykqGxvYmJHzDNw6YuYjOuFgJ3RFrngQo8p0Quebg/BLxcoIfhG69Rjs3sLPr4/m3wOnyqi+Rn -lTGNAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTO -w0q5mVXyuNtgv6l+vVa1lzan1jANBgkqhkiG9w0BAQsFAAOCAQEAyqVVjOPIQW5pJ6d1Ee88hjZv -0p3GeDgdaZaikmkuOGybfQTUiaWxMTeKySHMq2zNixya1r9I0jJmwYrA8y8678Dj1JGG0VDjA9tz -d29KOVPt3ibHtX2vK0LRdWLjSisCx1BL4GnilmwORGYQRI+tBev4eaymG+g3NJ1TyWGqolKvSnAW -hsI6yLETcDbYz+70CjTVW0z9B5yiutkBclzzTcHdDrEcDcRjvq30FPuJ7KJBDkzMyFdA0G4Dqs0M -jomZmWzwPDCvON9vvKO+KSAnq3T/EyJ43pdSVR6DtVQgA+6uwE9W3jfMw3+qBCe703e4YtsXfJwo -IhNzbM8m9Yop5w== ------END CERTIFICATE----- - -DigiCert Assured ID Root G3 -=========================== ------BEGIN CERTIFICATE----- -MIICRjCCAc2gAwIBAgIQC6Fa+h3foLVJRK/NJKBs7DAKBggqhkjOPQQDAzBlMQswCQYDVQQGEwJV -UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQwIgYD -VQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1 -MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwdjAQ -BgcqhkjOPQIBBgUrgQQAIgNiAAQZ57ysRGXtzbg/WPuNsVepRC0FFfLvC/8QdJ+1YlJfZn4f5dwb -RXkLzMZTCp2NXQLZqVneAlr2lSoOjThKiknGvMYDOAdfVdp+CW7if17QRSAPWXYQ1qAk8C3eNvJs -KTmjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTL0L2p4ZgF -UaFNN6KDec6NHSrkhDAKBggqhkjOPQQDAwNnADBkAjAlpIFFAmsSS3V0T8gj43DydXLefInwz5Fy -YZ5eEJJZVrmDxxDnOOlYJjZ91eQ0hjkCMHw2U/Aw5WJjOpnitqM7mzT6HtoQknFekROn3aRukswy -1vUhZscv6pZjamVFkpUBtA== ------END CERTIFICATE----- - -DigiCert Global Root G2 -======================= ------BEGIN CERTIFICATE----- -MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBhMQswCQYDVQQG -EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw -HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUx -MjAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3 -dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkq -hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI2/Ou8jqJ -kTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx1x7e/dfgy5SDN67sH0NO -3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQq2EGnI/yuum06ZIya7XzV+hdG82MHauV -BJVJ8zUtluNJbd134/tJS7SsVQepj5WztCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyM -UNGPHgm+F6HmIcr9g+UQvIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQAB -o0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV5uNu -5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY1Yl9PMWLSn/pvtsr -F9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4NeF22d+mQrvHRAiGfzZ0JFrabA0U -WTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NGFdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBH -QRFXGU7Aj64GxJUTFy8bJZ918rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/ -iyK5S9kJRaTepLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl -MrY= ------END CERTIFICATE----- - -DigiCert Global Root G3 -======================= ------BEGIN CERTIFICATE----- -MIICPzCCAcWgAwIBAgIQBVVWvPJepDU1w6QP1atFcjAKBggqhkjOPQQDAzBhMQswCQYDVQQGEwJV -UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAwHgYD -VQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMzAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAw -MDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5k -aWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEczMHYwEAYHKoZIzj0C -AQYFK4EEACIDYgAE3afZu4q4C/sLfyHS8L6+c/MzXRq8NOrexpu80JX28MzQC7phW1FGfp4tn+6O -YwwX7Adw9c+ELkCDnOg/QW07rdOkFFk2eJ0DQ+4QE2xy3q6Ip6FrtUPOZ9wj/wMco+I+o0IwQDAP -BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUs9tIpPmhxdiuNkHMEWNp -Yim8S8YwCgYIKoZIzj0EAwMDaAAwZQIxAK288mw/EkrRLTnDCgmXc/SINoyIJ7vmiI1Qhadj+Z4y -3maTD/HMsQmP3Wyr+mt/oAIwOWZbwmSNuJ5Q3KjVSaLtx9zRSX8XAbjIho9OjIgrqJqpisXRAL34 -VOKa5Vt8sycX ------END CERTIFICATE----- - -DigiCert Trusted Root G4 -======================== ------BEGIN CERTIFICATE----- -MIIFkDCCA3igAwIBAgIQBZsbV56OITLiOQe9p3d1XDANBgkqhkiG9w0BAQwFADBiMQswCQYDVQQG -EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSEw -HwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1 -MTIwMDAwWjBiMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0G -CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3yithZwuEp -pz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1Ifxp4VpX6+n6lXFllVcq9o -k3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDVySAdYyktzuxeTsiT+CFhmzTrBcZe7Fsa -vOvJz82sNEBfsXpm7nfISKhmV1efVFiODCu3T6cw2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGY -QJB5w3jHtrHEtWoYOAMQjdjUN6QuBX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6 -MUSaM0C/CNdaSaTC5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCiEhtm -mnTK3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADMfRyVw4/3IbKyEbe7 -f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QYuKZ3AeEPlAwhHbJUKSWJbOUOUlFH -dL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXKchYiCd98THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8 -oR7FwI+isX4KJpn15GkvmB0t9dmpsh3lGwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud -DwEB/wQEAwIBhjAdBgNVHQ4EFgQU7NfjgtJxXWRM3y5nP+e6mK4cD08wDQYJKoZIhvcNAQEMBQAD -ggIBALth2X2pbL4XxJEbw6GiAI3jZGgPVs93rnD5/ZpKmbnJeFwMDF/k5hQpVgs2SV1EY+CtnJYY -ZhsjDT156W1r1lT40jzBQ0CuHVD1UvyQO7uYmWlrx8GnqGikJ9yd+SeuMIW59mdNOj6PWTkiU0Tr -yF0Dyu1Qen1iIQqAyHNm0aAFYF/opbSnr6j3bTWcfFqK1qI4mfN4i/RN0iAL3gTujJtHgXINwBQy -7zBZLq7gcfJW5GqXb5JQbZaNaHqasjYUegbyJLkJEVDXCLG4iXqEI2FCKeWjzaIgQdfRnGTZ6iah -ixTXTBmyUEFxPT9NcCOGDErcgdLMMpSEDQgJlxxPwO5rIHQw0uA5NBCFIRUBCOhVMt5xSdkoF1BN -5r5N0XWs0Mr7QbhDparTwwVETyw2m+L64kW4I1NsBm9nVX9GtUw/bihaeSbSpKhil9Ie4u1Ki7wb -/UdKDd9nZn6yW0HQO+T0O/QEY+nvwlQAUaCKKsnOeMzV6ocEGLPOr0mIr/OSmbaz5mEP0oUA51Aa -5BuVnRmhuZyxm7EAHu/QD09CbMkKvO5D+jpxpchNJqU1/YldvIViHTLSoCtU7ZpXwdv6EM8Zt4tK -G48BtieVU+i2iW1bvGjUI+iLUaJW+fCmgKDWHrO8Dw9TdSmq6hN35N6MgSGtBxBHEa2HPQfRdbzP -82Z+ ------END CERTIFICATE----- - -WoSign -====== ------BEGIN CERTIFICATE----- -MIIFdjCCA16gAwIBAgIQXmjWEXGUY1BWAGjzPsnFkTANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQG -EwJDTjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxKjAoBgNVBAMTIUNlcnRpZmljYXRpb24g -QXV0aG9yaXR5IG9mIFdvU2lnbjAeFw0wOTA4MDgwMTAwMDFaFw0zOTA4MDgwMTAwMDFaMFUxCzAJ -BgNVBAYTAkNOMRowGAYDVQQKExFXb1NpZ24gQ0EgTGltaXRlZDEqMCgGA1UEAxMhQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkgb2YgV29TaWduMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA -vcqNrLiRFVaXe2tcesLea9mhsMMQI/qnobLMMfo+2aYpbxY94Gv4uEBf2zmoAHqLoE1UfcIiePyO -CbiohdfMlZdLdNiefvAA5A6JrkkoRBoQmTIPJYhTpA2zDxIIFgsDcSccf+Hb0v1naMQFXQoOXXDX -2JegvFNBmpGN9J42Znp+VsGQX+axaCA2pIwkLCxHC1l2ZjC1vt7tj/id07sBMOby8w7gLJKA84X5 -KIq0VC6a7fd2/BVoFutKbOsuEo/Uz/4Mx1wdC34FMr5esAkqQtXJTpCzWQ27en7N1QhatH/YHGkR -+ScPewavVIMYe+HdVHpRaG53/Ma/UkpmRqGyZxq7o093oL5d//xWC0Nyd5DKnvnyOfUNqfTq1+ez -EC8wQjchzDBwyYaYD8xYTYO7feUapTeNtqwylwA6Y3EkHp43xP901DfA4v6IRmAR3Qg/UDaruHqk -lWJqbrDKaiFaafPz+x1wOZXzp26mgYmhiMU7ccqjUu6Du/2gd/Tkb+dC221KmYo0SLwX3OSACCK2 -8jHAPwQ+658geda4BmRkAjHXqc1S+4RFaQkAKtxVi8QGRkvASh0JWzko/amrzgD5LkhLJuYwTKVY -yrREgk/nkR4zw7CT/xH8gdLKH3Ep3XZPkiWvHYG3Dy+MwwbMLyejSuQOmbp8HkUff6oZRZb9/D0C -AwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFOFmzw7R -8bNLtwYgFP6HEtX2/vs+MA0GCSqGSIb3DQEBBQUAA4ICAQCoy3JAsnbBfnv8rWTjMnvMPLZdRtP1 -LOJwXcgu2AZ9mNELIaCJWSQBnfmvCX0KI4I01fx8cpm5o9dU9OpScA7F9dY74ToJMuYhOZO9sxXq -T2r09Ys/L3yNWC7F4TmgPsc9SnOeQHrAK2GpZ8nzJLmzbVUsWh2eJXLOC62qx1ViC777Y7NhRCOj -y+EaDveaBk3e1CNOIZZbOVtXHS9dCF4Jef98l7VNg64N1uajeeAz0JmWAjCnPv/So0M/BVoG6kQC -2nz4SNAzqfkHx5Xh9T71XXG68pWpdIhhWeO/yloTunK0jF02h+mmxTwTv97QRCbut+wucPrXnbes -5cVAWubXbHssw1abR80LzvobtCHXt2a49CUwi1wNuepnsvRtrtWhnk/Yn+knArAdBtaP4/tIEp9/ -EaEQPkxROpaw0RPxx9gmrjrKkcRpnd8BKWRRb2jaFOwIQZeQjdCygPLPwj2/kWjFgGcexGATVdVh -mVd8upUPYUk6ynW8yQqTP2cOEvIo4jEbwFcW3wh8GcF+Dx+FHgo2fFt+J7x6v+Db9NpSvd4MVHAx -kUOVyLzwPt0JfjBkUO1/AaQzZ01oT74V77D2AhGiGxMlOtzCWfHjXEa7ZywCRuoeSKbmW9m1vFGi -kpbbqsY3Iqb+zCB0oy2pLmvLwIIRIbWTee5Ehr7XHuQe+w== ------END CERTIFICATE----- - -WoSign China -============ ------BEGIN CERTIFICATE----- -MIIFWDCCA0CgAwIBAgIQUHBrzdgT/BtOOzNy0hFIjTANBgkqhkiG9w0BAQsFADBGMQswCQYDVQQG -EwJDTjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxGzAZBgNVBAMMEkNBIOayg+mAmuagueiv -geS5pjAeFw0wOTA4MDgwMTAwMDFaFw0zOTA4MDgwMTAwMDFaMEYxCzAJBgNVBAYTAkNOMRowGAYD -VQQKExFXb1NpZ24gQ0EgTGltaXRlZDEbMBkGA1UEAwwSQ0Eg5rKD6YCa5qC56K+B5LmmMIICIjAN -BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0EkhHiX8h8EqwqzbdoYGTufQdDTc7WU1/FDWiD+k -8H/rD195L4mx/bxjWDeTmzj4t1up+thxx7S8gJeNbEvxUNUqKaqoGXqW5pWOdO2XCld19AXbbQs5 -uQF/qvbW2mzmBeCkTVL829B0txGMe41P/4eDrv8FAxNXUDf+jJZSEExfv5RxadmWPgxDT74wwJ85 -dE8GRV2j1lY5aAfMh09Qd5Nx2UQIsYo06Yms25tO4dnkUkWMLhQfkWsZHWgpLFbE4h4TV2TwYeO5 -Ed+w4VegG63XX9Gv2ystP9Bojg/qnw+LNVgbExz03jWhCl3W6t8Sb8D7aQdGctyB9gQjF+BNdeFy -b7Ao65vh4YOhn0pdr8yb+gIgthhid5E7o9Vlrdx8kHccREGkSovrlXLp9glk3Kgtn3R46MGiCWOc -76DbT52VqyBPt7D3h1ymoOQ3OMdc4zUPLK2jgKLsLl3Az+2LBcLmc272idX10kaO6m1jGx6KyX2m -+Jzr5dVjhU1zZmkR/sgO9MHHZklTfuQZa/HpelmjbX7FF+Ynxu8b22/8DU0GAbQOXDBGVWCvOGU6 -yke6rCzMRh+yRpY/8+0mBe53oWprfi1tWFxK1I5nuPHa1UaKJ/kR8slC/k7e3x9cxKSGhxYzoacX -GKUN5AXlK8IrC6KVkLn9YDxOiT7nnO4fuwECAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1Ud -EwEB/wQFMAMBAf8wHQYDVR0OBBYEFOBNv9ybQV0T6GTwp+kVpOGBwboxMA0GCSqGSIb3DQEBCwUA -A4ICAQBqinA4WbbaixjIvirTthnVZil6Xc1bL3McJk6jfW+rtylNpumlEYOnOXOvEESS5iVdT2H6 -yAa+Tkvv/vMx/sZ8cApBWNromUuWyXi8mHwCKe0JgOYKOoICKuLJL8hWGSbueBwj/feTZU7n85iY -r83d2Z5AiDEoOqsuC7CsDCT6eiaY8xJhEPRdF/d+4niXVOKM6Cm6jBAyvd0zaziGfjk9DgNyp115 -j0WKWa5bIW4xRtVZjc8VX90xJc/bYNaBRHIpAlf2ltTW/+op2znFuCyKGo3Oy+dCMYYFaA6eFN0A -kLppRQjbbpCBhqcqBT/mhDn4t/lXX0ykeVoQDF7Va/81XwVRHmyjdanPUIPTfPRm94KNPQx96N97 -qA4bLJyuQHCH2u2nFoJavjVsIE4iYdm8UXrNemHcSxH5/mc0zy4EZmFcV5cjjPOGG0jfKq+nwf/Y -jj4Du9gqsPoUJbJRa4ZDhS4HIxaAjUz7tGM7zMN07RujHv41D198HRaG9Q7DlfEvr10lO1Hm13ZB -ONFLAzkopR6RctR9q5czxNM+4Gm2KHmgCY0c0f9BckgG/Jou5yD5m6Leie2uPAmvylezkolwQOQv -T8Jwg0DXJCxr5wkf09XHwQj02w47HAcLQxGEIYbpgNR12KvxAmLBsX5VYc8T1yaw15zLKYs4SgsO -kI26oQ== ------END CERTIFICATE----- - -COMODO RSA Certification Authority -================================== ------BEGIN CERTIFICATE----- -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 -LaZRfyHBNVOFBkpdn627G190 ------END CERTIFICATE----- - -USERTrust RSA Certification Authority -===================================== ------BEGIN CERTIFICATE----- -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 -Q+6IHdfGjjxDah2nGN59PRbxYvnKkKj9 ------END CERTIFICATE----- - -USERTrust ECC Certification Authority -===================================== ------BEGIN CERTIFICATE----- -MIICjzCCAhWgAwIBAgIQXIuZxVqUxdJxVt7NiYDMJjAKBggqhkjOPQQDAzCBiDELMAkGA1UEBhMC -VVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU -aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlv -biBBdXRob3JpdHkwHhcNMTAwMjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMC -VVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU -aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlv -biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQarFRaqfloI+d61SRvU8Za2EurxtW2 -0eZzca7dnNYMYf3boIkDuAUU7FfO7l0/4iGzzvfUinngo4N+LZfQYcTxmdwlkWOrfzCjtHDix6Ez -nPO/LlxTsV+zfTJ/ijTjeXmjQjBAMB0GA1UdDgQWBBQ64QmG1M8ZwpZ2dEl23OA1xmNjmjAOBgNV -HQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjA2Z6EWCNzklwBB -HU6+4WMBzzuqQhFkoJ2UOQIReVx7Hfpkue4WQrO/isIJxOzksU0CMQDpKmFHjFJKS04YcPbWRNZu -9YO6bVi9JNlWSOrvxKJGgYhqOkbRqZtNyWHa0V1Xahg= ------END CERTIFICATE----- - -GlobalSign ECC Root CA - R4 -=========================== ------BEGIN CERTIFICATE----- -MIIB4TCCAYegAwIBAgIRKjikHJYKBN5CsiilC+g0mAIwCgYIKoZIzj0EAwIwUDEkMCIGA1UECxMb -R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD -EwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoXDTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMb -R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD -EwpHbG9iYWxTaWduMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEuMZ5049sJQ6fLjkZHAOkrprl -OQcJFspjsbmG+IpXwVfOQvpzofdlQv8ewQCybnMO/8ch5RikqtlxP6jUuc6MHaNCMEAwDgYDVR0P -AQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFFSwe61FuOJAf/sKbvu+M8k8o4TV -MAoGCCqGSM49BAMCA0gAMEUCIQDckqGgE6bPA7DmxCGXkPoUVy0D7O48027KqGx2vKLeuwIgJ6iF -JzWbVsaj8kfSt24bAgAXqmemFZHe+pTsewv4n4Q= ------END CERTIFICATE----- - -GlobalSign ECC Root CA - R5 -=========================== ------BEGIN CERTIFICATE----- -MIICHjCCAaSgAwIBAgIRYFlJ4CYuu1X5CneKcflK2GwwCgYIKoZIzj0EAwMwUDEkMCIGA1UECxMb -R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD -EwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoXDTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMb -R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD -EwpHbG9iYWxTaWduMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAER0UOlvt9Xb/pOdEh+J8LttV7HpI6 -SFkc8GIxLcB6KP4ap1yztsyX50XUWPrRd21DosCHZTQKH3rd6zwzocWdTaRvQZU4f8kehOvRnkmS -h5SHDDqFSmafnVmTTZdhBoZKo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAd -BgNVHQ4EFgQUPeYpSJvqB8ohREom3m7e0oPQn1kwCgYIKoZIzj0EAwMDaAAwZQIxAOVpEslu28Yx -uglB4Zf4+/2a4n0Sye18ZNPLBSWLVtmg515dTguDnFt2KaAJJiFqYgIwcdK1j1zqO+F4CYWodZI7 -yFz9SO8NdCKoCOJuxUnOxwy8p2Fp8fc74SrL+SvzZpA3 ------END CERTIFICATE----- - -Staat der Nederlanden Root CA - G3 -================================== ------BEGIN CERTIFICATE----- -MIIFdDCCA1ygAwIBAgIEAJiiOTANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJOTDEeMBwGA1UE -CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFhdCBkZXIgTmVkZXJsYW5kZW4g -Um9vdCBDQSAtIEczMB4XDTEzMTExNDExMjg0MloXDTI4MTExMzIzMDAwMFowWjELMAkGA1UEBhMC -TkwxHjAcBgNVBAoMFVN0YWF0IGRlciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5l -ZGVybGFuZGVuIFJvb3QgQ0EgLSBHMzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL4y -olQPcPssXFnrbMSkUeiFKrPMSjTysF/zDsccPVMeiAho2G89rcKezIJnByeHaHE6n3WWIkYFsO2t -x1ueKt6c/DrGlaf1F2cY5y9JCAxcz+bMNO14+1Cx3Gsy8KL+tjzk7FqXxz8ecAgwoNzFs21v0IJy -EavSgWhZghe3eJJg+szeP4TrjTgzkApyI/o1zCZxMdFyKJLZWyNtZrVtB0LrpjPOktvA9mxjeM3K -Tj215VKb8b475lRgsGYeCasH/lSJEULR9yS6YHgamPfJEf0WwTUaVHXvQ9Plrk7O53vDxk5hUUur -mkVLoR9BvUhTFXFkC4az5S6+zqQbwSmEorXLCCN2QyIkHxcE1G6cxvx/K2Ya7Irl1s9N9WMJtxU5 -1nus6+N86U78dULI7ViVDAZCopz35HCz33JvWjdAidiFpNfxC95DGdRKWCyMijmev4SH8RY7Ngzp -07TKbBlBUgmhHbBqv4LvcFEhMtwFdozL92TkA1CvjJFnq8Xy7ljY3r735zHPbMk7ccHViLVlvMDo -FxcHErVc0qsgk7TmgoNwNsXNo42ti+yjwUOH5kPiNL6VizXtBznaqB16nzaeErAMZRKQFWDZJkBE -41ZgpRDUajz9QdwOWke275dhdU/Z/seyHdTtXUmzqWrLZoQT1Vyg3N9udwbRcXXIV2+vD3dbAgMB -AAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRUrfrHkleu -yjWcLhL75LpdINyUVzANBgkqhkiG9w0BAQsFAAOCAgEAMJmdBTLIXg47mAE6iqTnB/d6+Oea31BD -U5cqPco8R5gu4RV78ZLzYdqQJRZlwJ9UXQ4DO1t3ApyEtg2YXzTdO2PCwyiBwpwpLiniyMMB8jPq -KqrMCQj3ZWfGzd/TtiunvczRDnBfuCPRy5FOCvTIeuXZYzbB1N/8Ipf3YF3qKS9Ysr1YvY2WTxB1 -v0h7PVGHoTx0IsL8B3+A3MSs/mrBcDCw6Y5p4ixpgZQJut3+TcCDjJRYwEYgr5wfAvg1VUkvRtTA -8KCWAg8zxXHzniN9lLf9OtMJgwYh/WA9rjLA0u6NpvDntIJ8CsxwyXmA+P5M9zWEGYox+wrZ13+b -8KKaa8MFSu1BYBQw0aoRQm7TIwIEC8Zl3d1Sd9qBa7Ko+gE4uZbqKmxnl4mUnrzhVNXkanjvSr0r -mj1AfsbAddJu+2gw7OyLnflJNZoaLNmzlTnVHpL3prllL+U9bTpITAjc5CgSKL59NVzq4BZ+Extq -1z7XnvwtdbLBFNUjA9tbbws+eC8N3jONFrdI54OagQ97wUNNVQQXOEpR1VmiiXTTn74eS9fGbbeI -JG9gkaSChVtWQbzQRKtqE77RLFi3EjNYsjdj3BP1lB0/QFH1T/U67cjF68IeHRaVesd+QnGTbksV -tzDfqu1XhUisHWrdOWnk4Xl4vs4Fv6EM94B7IWcnMFk= ------END CERTIFICATE----- - -Staat der Nederlanden EV Root CA -================================ ------BEGIN CERTIFICATE----- -MIIFcDCCA1igAwIBAgIEAJiWjTANBgkqhkiG9w0BAQsFADBYMQswCQYDVQQGEwJOTDEeMBwGA1UE -CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSkwJwYDVQQDDCBTdGFhdCBkZXIgTmVkZXJsYW5kZW4g -RVYgUm9vdCBDQTAeFw0xMDEyMDgxMTE5MjlaFw0yMjEyMDgxMTEwMjhaMFgxCzAJBgNVBAYTAk5M -MR4wHAYDVQQKDBVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xKTAnBgNVBAMMIFN0YWF0IGRlciBOZWRl -cmxhbmRlbiBFViBSb290IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA48d+ifkk -SzrSM4M1LGns3Amk41GoJSt5uAg94JG6hIXGhaTK5skuU6TJJB79VWZxXSzFYGgEt9nCUiY4iKTW -O0Cmws0/zZiTs1QUWJZV1VD+hq2kY39ch/aO5ieSZxeSAgMs3NZmdO3dZ//BYY1jTw+bbRcwJu+r -0h8QoPnFfxZpgQNH7R5ojXKhTbImxrpsX23Wr9GxE46prfNeaXUmGD5BKyF/7otdBwadQ8QpCiv8 -Kj6GyzyDOvnJDdrFmeK8eEEzduG/L13lpJhQDBXd4Pqcfzho0LKmeqfRMb1+ilgnQ7O6M5HTp5gV -XJrm0w912fxBmJc+qiXbj5IusHsMX/FjqTf5m3VpTCgmJdrV8hJwRVXj33NeN/UhbJCONVrJ0yPr -08C+eKxCKFhmpUZtcALXEPlLVPxdhkqHz3/KRawRWrUgUY0viEeXOcDPusBCAUCZSCELa6fS/ZbV -0b5GnUngC6agIk440ME8MLxwjyx1zNDFjFE7PZQIZCZhfbnDZY8UnCHQqv0XcgOPvZuM5l5Tnrmd -74K74bzickFbIZTTRTeU0d8JOV3nI6qaHcptqAqGhYqCvkIH1vI4gnPah1vlPNOePqc7nvQDs/nx -fRN0Av+7oeX6AHkcpmZBiFxgV6YuCcS6/ZrPpx9Aw7vMWgpVSzs4dlG4Y4uElBbmVvMCAwEAAaNC -MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFP6rAJCYniT8qcwa -ivsnuL8wbqg7MA0GCSqGSIb3DQEBCwUAA4ICAQDPdyxuVr5Os7aEAJSrR8kN0nbHhp8dB9O2tLsI -eK9p0gtJ3jPFrK3CiAJ9Brc1AsFgyb/E6JTe1NOpEyVa/m6irn0F3H3zbPB+po3u2dfOWBfoqSmu -c0iH55vKbimhZF8ZE/euBhD/UcabTVUlT5OZEAFTdfETzsemQUHSv4ilf0X8rLiltTMMgsT7B/Zq -5SWEXwbKwYY5EdtYzXc7LMJMD16a4/CrPmEbUCTCwPTxGfARKbalGAKb12NMcIxHowNDXLldRqAN -b/9Zjr7dn3LDWyvfjFvO5QxGbJKyCqNMVEIYFRIYvdr8unRu/8G2oGTYqV9Vrp9canaW2HNnh/tN -f1zuacpzEPuKqf2evTY4SUmH9A4U8OmHuD+nT3pajnnUk+S7aFKErGzp85hwVXIy+TSrK0m1zSBi -5Dp6Z2Orltxtrpfs/J92VoguZs9btsmksNcFuuEnL5O7Jiqik7Ab846+HUCjuTaPPoIaGl6I6lD4 -WeKDRikL40Rc4ZW2aZCaFG+XroHPaO+Zmr615+F/+PoTRxZMzG0IQOeLeG9QgkRQP2YGiqtDhFZK -DyAthg710tvSeopLzaXoTvFeJiUBWSOgftL2fiFX1ye8FVdMpEbB4IMeDExNH08GGeL5qPQ6gqGy -eUN51q1veieQA6TqJIc/2b3Z6fJfUEkc7uzXLg== ------END CERTIFICATE----- - -IdenTrust Commercial Root CA 1 -============================== ------BEGIN CERTIFICATE----- -MIIFYDCCA0igAwIBAgIQCgFCgAAAAUUjyES1AAAAAjANBgkqhkiG9w0BAQsFADBKMQswCQYDVQQG -EwJVUzESMBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBS -b290IENBIDEwHhcNMTQwMTE2MTgxMjIzWhcNMzQwMTE2MTgxMjIzWjBKMQswCQYDVQQGEwJVUzES -MBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBSb290IENB -IDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCnUBneP5k91DNG8W9RYYKyqU+PZ4ld -hNlT3Qwo2dfw/66VQ3KZ+bVdfIrBQuExUHTRgQ18zZshq0PirK1ehm7zCYofWjK9ouuU+ehcCuz/ -mNKvcbO0U59Oh++SvL3sTzIwiEsXXlfEU8L2ApeN2WIrvyQfYo3fw7gpS0l4PJNgiCL8mdo2yMKi -1CxUAGc1bnO/AljwpN3lsKImesrgNqUZFvX9t++uP0D1bVoE/c40yiTcdCMbXTMTEl3EASX2MN0C -XZ/g1Ue9tOsbobtJSdifWwLziuQkkORiT0/Br4sOdBeo0XKIanoBScy0RnnGF7HamB4HWfp1IYVl -3ZBWzvurpWCdxJ35UrCLvYf5jysjCiN2O/cz4ckA82n5S6LgTrx+kzmEB/dEcH7+B1rlsazRGMzy -NeVJSQjKVsk9+w8YfYs7wRPCTY/JTw436R+hDmrfYi7LNQZReSzIJTj0+kuniVyc0uMNOYZKdHzV -WYfCP04MXFL0PfdSgvHqo6z9STQaKPNBiDoT7uje/5kdX7rL6B7yuVBgwDHTc+XvvqDtMwt0viAg -xGds8AgDelWAf0ZOlqf0Hj7h9tgJ4TNkK2PXMl6f+cB7D3hvl7yTmvmcEpB4eoCHFddydJxVdHix -uuFucAS6T6C6aMN7/zHwcz09lCqxC0EOoP5NiGVreTO01wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMC -AQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU7UQZwNPwBovupHu+QucmVMiONnYwDQYJKoZI -hvcNAQELBQADggIBAA2ukDL2pkt8RHYZYR4nKM1eVO8lvOMIkPkp165oCOGUAFjvLi5+U1KMtlwH -6oi6mYtQlNeCgN9hCQCTrQ0U5s7B8jeUeLBfnLOic7iPBZM4zY0+sLj7wM+x8uwtLRvM7Kqas6pg -ghstO8OEPVeKlh6cdbjTMM1gCIOQ045U8U1mwF10A0Cj7oV+wh93nAbowacYXVKV7cndJZ5t+qnt -ozo00Fl72u1Q8zW/7esUTTHHYPTa8Yec4kjixsU3+wYQ+nVZZjFHKdp2mhzpgq7vmrlR94gjmmmV -YjzlVYA211QC//G5Xc7UI2/YRYRKW2XviQzdFKcgyxilJbQN+QHwotL0AMh0jqEqSI5l2xPE4iUX -feu+h1sXIFRRk0pTAwvsXcoz7WL9RccvW9xYoIA55vrX/hMUpu09lEpCdNTDd1lzzY9GvlU47/ro -kTLql1gEIt44w8y8bckzOmoKaT+gyOpyj4xjhiO9bTyWnpXgSUyqorkqG5w2gXjtw+hG4iZZRHUe -2XWJUc0QhJ1hYMtd+ZciTY6Y5uN/9lu7rs3KSoFrXgvzUeF0K+l+J6fZmUlO+KWA2yUPHGNiiskz -Z2s8EIPGrd6ozRaOjfAHN3Gf8qv8QfXBi+wAN10J5U6A7/qxXDgGpRtK4dw4LTzcqx+QGtVKnO7R -cGzM7vRX+Bi6hG6H ------END CERTIFICATE----- - -IdenTrust Public Sector Root CA 1 -================================= ------BEGIN CERTIFICATE----- -MIIFZjCCA06gAwIBAgIQCgFCgAAAAUUjz0Z8AAAAAjANBgkqhkiG9w0BAQsFADBNMQswCQYDVQQG -EwJVUzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3Rv -ciBSb290IENBIDEwHhcNMTQwMTE2MTc1MzMyWhcNMzQwMTE2MTc1MzMyWjBNMQswCQYDVQQGEwJV -UzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3RvciBS -b290IENBIDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2IpT8pEiv6EdrCvsnduTy -P4o7ekosMSqMjbCpwzFrqHd2hCa2rIFCDQjrVVi7evi8ZX3yoG2LqEfpYnYeEe4IFNGyRBb06tD6 -Hi9e28tzQa68ALBKK0CyrOE7S8ItneShm+waOh7wCLPQ5CQ1B5+ctMlSbdsHyo+1W/CD80/HLaXI -rcuVIKQxKFdYWuSNG5qrng0M8gozOSI5Cpcu81N3uURF/YTLNiCBWS2ab21ISGHKTN9T0a9SvESf -qy9rg3LvdYDaBjMbXcjaY8ZNzaxmMc3R3j6HEDbhuaR672BQssvKplbgN6+rNBM5Jeg5ZuSYeqoS -mJxZZoY+rfGwyj4GD3vwEUs3oERte8uojHH01bWRNszwFcYr3lEXsZdMUD2xlVl8BX0tIdUAvwFn -ol57plzy9yLxkA2T26pEUWbMfXYD62qoKjgZl3YNa4ph+bz27nb9cCvdKTz4Ch5bQhyLVi9VGxyh -LrXHFub4qjySjmm2AcG1hp2JDws4lFTo6tyePSW8Uybt1as5qsVATFSrsrTZ2fjXctscvG29ZV/v -iDUqZi/u9rNl8DONfJhBaUYPQxxp+pu10GFqzcpL2UyQRqsVWaFHVCkugyhfHMKiq3IXAAaOReyL -4jM9f9oZRORicsPfIsbyVtTdX5Vy7W1f90gDW/3FKqD2cyOEEBsB5wIDAQABo0IwQDAOBgNVHQ8B -Af8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU43HgntinQtnbcZFrlJPrw6PRFKMw -DQYJKoZIhvcNAQELBQADggIBAEf63QqwEZE4rU1d9+UOl1QZgkiHVIyqZJnYWv6IAcVYpZmxI1Qj -t2odIFflAWJBF9MJ23XLblSQdf4an4EKwt3X9wnQW3IV5B4Jaj0z8yGa5hV+rVHVDRDtfULAj+7A -mgjVQdZcDiFpboBhDhXAuM/FSRJSzL46zNQuOAXeNf0fb7iAaJg9TaDKQGXSc3z1i9kKlT/YPyNt -GtEqJBnZhbMX73huqVjRI9PHE+1yJX9dsXNw0H8GlwmEKYBhHfpe/3OsoOOJuBxxFcbeMX8S3OFt -m6/n6J91eEyrRjuazr8FGF1NFTwWmhlQBJqymm9li1JfPFgEKCXAZmExfrngdbkaqIHWchezxQMx -NRF4eKLg6TCMf4DfWN88uieW4oA0beOY02QnrEh+KHdcxiVhJfiFDGX6xDIvpZgF5PgLZxYWxoK4 -Mhn5+bl53B/N66+rDt0b20XkeucC4pVd/GnwU2lhlXV5C15V5jgclKlZM57IcXR5f1GJtshquDDI -ajjDbp7hNxbqBWJMWxJH7ae0s1hWx0nzfxJoCTFx8G34Tkf71oXuxVhAGaQdp/lLQzfcaFpPz+vC -ZHTetBXZ9FRUGi8c15dxVJCO2SCdUyt/q4/i6jC8UDfv8Ue1fXwsBOxonbRJRBD0ckscZOf85muQ -3Wl9af0AVqW3rLatt8o+Ae+c ------END CERTIFICATE----- - -Entrust Root Certification Authority - G2 -========================================= ------BEGIN CERTIFICATE----- -MIIEPjCCAyagAwIBAgIESlOMKDANBgkqhkiG9w0BAQsFADCBvjELMAkGA1UEBhMCVVMxFjAUBgNV -BAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVy -bXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ug -b25seTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIw -HhcNMDkwNzA3MTcyNTU0WhcNMzAxMjA3MTc1NTU0WjCBvjELMAkGA1UEBhMCVVMxFjAUBgNVBAoT -DUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVybXMx -OTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25s -eTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIwggEi -MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6hLZy254Ma+KZ6TABp3bqMriVQRrJ2mFOWHLP -/vaCeb9zYQYKpSfYs1/TRU4cctZOMvJyig/3gxnQaoCAAEUesMfnmr8SVycco2gvCoe9amsOXmXz -HHfV1IWNcCG0szLni6LVhjkCsbjSR87kyUnEO6fe+1R9V77w6G7CebI6C1XiUJgWMhNcL3hWwcKU -s/Ja5CeanyTXxuzQmyWC48zCxEXFjJd6BmsqEZ+pCm5IO2/b1BEZQvePB7/1U1+cPvQXLOZprE4y -TGJ36rfo5bs0vBmLrpxR57d+tVOxMyLlbc9wPBr64ptntoP0jaWvYkxN4FisZDQSA/i2jZRjJKRx -AgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqciZ6 -0B7vfec7aVHUbI2fkBJmqzANBgkqhkiG9w0BAQsFAAOCAQEAeZ8dlsa2eT8ijYfThwMEYGprmi5Z -iXMRrEPR9RP/jTkrwPK9T3CMqS/qF8QLVJ7UG5aYMzyorWKiAHarWWluBh1+xLlEjZivEtRh2woZ -Rkfz6/djwUAFQKXSt/S1mja/qYh2iARVBCuch38aNzx+LaUa2NSJXsq9rD1s2G2v1fN2D807iDgi -nWyTmsQ9v4IbZT+mD12q/OWyFcq1rca8PdCE6OoGcrBNOTJ4vz4RnAuknZoh8/CbCzB428Hch0P+ -vGOaysXCHMnHjf87ElgI5rY97HosTvuDls4MPGmHVHOkc8KT/1EQrBVUAdj8BbGJoX90g5pJ19xO -e4pIb4tF9g== ------END CERTIFICATE----- - -Entrust Root Certification Authority - EC1 -========================================== ------BEGIN CERTIFICATE----- -MIIC+TCCAoCgAwIBAgINAKaLeSkAAAAAUNCR+TAKBggqhkjOPQQDAzCBvzELMAkGA1UEBhMCVVMx -FjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVn -YWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDEyIEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXpl -ZCB1c2Ugb25seTEzMDEGA1UEAxMqRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5 -IC0gRUMxMB4XDTEyMTIxODE1MjUzNloXDTM3MTIxODE1NTUzNlowgb8xCzAJBgNVBAYTAlVTMRYw -FAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0L2xlZ2Fs -LXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxMiBFbnRydXN0LCBJbmMuIC0gZm9yIGF1dGhvcml6ZWQg -dXNlIG9ubHkxMzAxBgNVBAMTKkVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt -IEVDMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABIQTydC6bUF74mzQ61VfZgIaJPRbiWlH47jCffHy -AsWfoPZb1YsGGYZPUxBtByQnoaD41UcZYUx9ypMn6nQM72+WCf5j7HBdNq1nd67JnXxVRDqiY1Ef -9eNi1KlHBz7MIKNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE -FLdj5xrdjekIplWDpOBqUEFlEUJJMAoGCCqGSM49BAMDA2cAMGQCMGF52OVCR98crlOZF7ZvHH3h -vxGU0QOIdeSNiaSKd0bebWHvAvX7td/M/k7//qnmpwIwW5nXhTcGtXsI/esni0qU+eH6p44mCOh8 -kmhtc9hvJqwhAriZtyZBWyVgrtBIGu4G ------END CERTIFICATE----- - -CFCA EV ROOT -============ ------BEGIN CERTIFICATE----- -MIIFjTCCA3WgAwIBAgIEGErM1jANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJDTjEwMC4GA1UE -CgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQDDAxDRkNB -IEVWIFJPT1QwHhcNMTIwODA4MDMwNzAxWhcNMjkxMjMxMDMwNzAxWjBWMQswCQYDVQQGEwJDTjEw -MC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQD -DAxDRkNBIEVWIFJPT1QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDXXWvNED8fBVnV -BU03sQ7smCuOFR36k0sXgiFxEFLXUWRwFsJVaU2OFW2fvwwbwuCjZ9YMrM8irq93VCpLTIpTUnrD -7i7es3ElweldPe6hL6P3KjzJIx1qqx2hp/Hz7KDVRM8Vz3IvHWOX6Jn5/ZOkVIBMUtRSqy5J35DN -uF++P96hyk0g1CXohClTt7GIH//62pCfCqktQT+x8Rgp7hZZLDRJGqgG16iI0gNyejLi6mhNbiyW -ZXvKWfry4t3uMCz7zEasxGPrb382KzRzEpR/38wmnvFyXVBlWY9ps4deMm/DGIq1lY+wejfeWkU7 -xzbh72fROdOXW3NiGUgthxwG+3SYIElz8AXSG7Ggo7cbcNOIabla1jj0Ytwli3i/+Oh+uFzJlU9f -py25IGvPa931DfSCt/SyZi4QKPaXWnuWFo8BGS1sbn85WAZkgwGDg8NNkt0yxoekN+kWzqotaK8K -gWU6cMGbrU1tVMoqLUuFG7OA5nBFDWteNfB/O7ic5ARwiRIlk9oKmSJgamNgTnYGmE69g60dWIol -hdLHZR4tjsbftsbhf4oEIRUpdPA+nJCdDC7xij5aqgwJHsfVPKPtl8MeNPo4+QgO48BdK4PRVmrJ -tqhUUy54Mmc9gn900PvhtgVguXDbjgv5E1hvcWAQUhC5wUEJ73IfZzF4/5YFjQIDAQABo2MwYTAf -BgNVHSMEGDAWgBTj/i39KNALtbq2osS/BqoFjJP7LzAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB -/wQEAwIBBjAdBgNVHQ4EFgQU4/4t/SjQC7W6tqLEvwaqBYyT+y8wDQYJKoZIhvcNAQELBQADggIB -ACXGumvrh8vegjmWPfBEp2uEcwPenStPuiB/vHiyz5ewG5zz13ku9Ui20vsXiObTej/tUxPQ4i9q -ecsAIyjmHjdXNYmEwnZPNDatZ8POQQaIxffu2Bq41gt/UP+TqhdLjOztUmCypAbqTuv0axn96/Ua -4CUqmtzHQTb3yHQFhDmVOdYLO6Qn+gjYXB74BGBSESgoA//vU2YApUo0FmZ8/Qmkrp5nGm9BC2sG -E5uPhnEFtC+NiWYzKXZUmhH4J/qyP5Hgzg0b8zAarb8iXRvTvyUFTeGSGn+ZnzxEk8rUQElsgIfX -BDrDMlI1Dlb4pd19xIsNER9Tyx6yF7Zod1rg1MvIB671Oi6ON7fQAUtDKXeMOZePglr4UeWJoBjn -aH9dCi77o0cOPaYjesYBx4/IXr9tgFa+iiS6M+qf4TIRnvHST4D2G0CvOJ4RUHlzEhLN5mydLIhy -PDCBBpEi6lmt2hkuIsKNuYyH4Ga8cyNfIWRjgEj1oDwYPZTISEEdQLpe/v5WOaHIz16eGWRGENoX -kbcFgKyLmZJ956LYBws2J+dIeWCKw9cTXPhyQN9Ky8+ZAAoACxGV2lZFA4gKn2fQ1XmxqI1AbQ3C -ekD6819kR5LLU7m7Wc5P/dAVUwHY3+vZ5nbv0CO7O6l5s9UCKc2Jo5YPSjXnTkLAdc0Hz+Ys63su ------END CERTIFICATE----- \ No newline at end of file diff --git a/bundle/ruby/3.2.0/gems/no_proxy_fix-0.1.2/.gitignore b/bundle/ruby/3.2.0/gems/no_proxy_fix-0.1.2/.gitignore deleted file mode 100644 index a873c2f9..00000000 --- a/bundle/ruby/3.2.0/gems/no_proxy_fix-0.1.2/.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -/.bundle/ -/.yardoc -/Gemfile.lock -/_yardoc/ -/coverage/ -/doc/ -/pkg/ -/spec/reports/ -/tmp/ -/spec/examples.txt diff --git a/bundle/ruby/3.2.0/gems/no_proxy_fix-0.1.2/.rspec b/bundle/ruby/3.2.0/gems/no_proxy_fix-0.1.2/.rspec deleted file mode 100644 index 83e16f80..00000000 --- a/bundle/ruby/3.2.0/gems/no_proxy_fix-0.1.2/.rspec +++ /dev/null @@ -1,2 +0,0 @@ ---color ---require spec_helper diff --git a/bundle/ruby/3.2.0/gems/no_proxy_fix-0.1.2/.rubocop.yml b/bundle/ruby/3.2.0/gems/no_proxy_fix-0.1.2/.rubocop.yml deleted file mode 100644 index 279b4357..00000000 --- a/bundle/ruby/3.2.0/gems/no_proxy_fix-0.1.2/.rubocop.yml +++ /dev/null @@ -1,13 +0,0 @@ -inherit_from: .rubocop_todo.yml - -AllCops: - TargetRubyVersion: '2.0' - Exclude: - - 'lib/cext/generic_find_proxy.rb' - -Style/Documentation: - Enabled: false - -Metrics/BlockLength: - Exclude: - - 'spec/**/*' diff --git a/bundle/ruby/3.2.0/gems/no_proxy_fix-0.1.2/.rubocop_todo.yml b/bundle/ruby/3.2.0/gems/no_proxy_fix-0.1.2/.rubocop_todo.yml deleted file mode 100644 index e69de29b..00000000 diff --git a/bundle/ruby/3.2.0/gems/no_proxy_fix-0.1.2/.travis.yml b/bundle/ruby/3.2.0/gems/no_proxy_fix-0.1.2/.travis.yml deleted file mode 100644 index c8f9e171..00000000 --- a/bundle/ruby/3.2.0/gems/no_proxy_fix-0.1.2/.travis.yml +++ /dev/null @@ -1,13 +0,0 @@ -sudo: false -language: ruby -rvm: - - '2' - - '2.0' - - '2.1' - - '2.2' - - '2.3.1' - - '2.4.0' - - '2.4.1' -before_install: - - gem update --system - - gem install bundler diff --git a/bundle/ruby/3.2.0/gems/no_proxy_fix-0.1.2/Gemfile b/bundle/ruby/3.2.0/gems/no_proxy_fix-0.1.2/Gemfile deleted file mode 100644 index e286b85e..00000000 --- a/bundle/ruby/3.2.0/gems/no_proxy_fix-0.1.2/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' - -# Specify your gem's dependencies in no_proxy_fix.gemspec -gemspec diff --git a/bundle/ruby/3.2.0/gems/no_proxy_fix-0.1.2/Guardfile b/bundle/ruby/3.2.0/gems/no_proxy_fix-0.1.2/Guardfile deleted file mode 100644 index 8c44b8fb..00000000 --- a/bundle/ruby/3.2.0/gems/no_proxy_fix-0.1.2/Guardfile +++ /dev/null @@ -1,46 +0,0 @@ -guard :bundler do - require 'guard/bundler' - require 'guard/bundler/verify' - helper = Guard::Bundler::Verify.new - - files = ['Gemfile'] - files += Dir['*.gemspec'] if files.any? { |f| helper.uses_gemspec?(f) } - - # Assume files are symlinked from somewhere - files.each { |file| watch(helper.real_path(file)) } -end - -# Note: The cmd option is now required due to the increasing number of ways -# rspec may be run, below are examples of the most common uses. -# * bundler: 'bundle exec rspec' -# * bundler binstubs: 'bin/rspec' -# * spring: 'bin/rspec' (This will use spring if running and you have -# installed the spring binstubs per the docs) -# * zeus: 'zeus rspec' (requires the server to be started separately) -# * 'just' rspec: 'rspec' - -guard :rspec, cmd: 'bundle exec rspec' do - require 'guard/rspec/dsl' - dsl = Guard::RSpec::Dsl.new(self) - - # Feel free to open issues for suggestions and improvements - - # RSpec files - rspec = dsl.rspec - watch(rspec.spec_helper) { rspec.spec_dir } - watch(rspec.spec_support) { rspec.spec_dir } - watch(rspec.spec_files) - - # Ruby files - ruby = dsl.ruby - dsl.watch_spec_files_for(ruby.lib_files) -end - -guard :rubocop do - watch(/.+\.rb$/) - watch(/^Gemfile$/) - watch(/^Rakefile$/) - watch(/^Guardfile$/) - watch(/.+\.gemspec$/) - watch(%r{(?:.+/)?\.rubocop(?:_todo)?\.yml$}) { |m| File.dirname(m[0]) } -end diff --git a/bundle/ruby/3.2.0/gems/no_proxy_fix-0.1.2/LICENSE.txt b/bundle/ruby/3.2.0/gems/no_proxy_fix-0.1.2/LICENSE.txt deleted file mode 100644 index 373004ef..00000000 --- a/bundle/ruby/3.2.0/gems/no_proxy_fix-0.1.2/LICENSE.txt +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2017 Minwoo Lee - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/bundle/ruby/3.2.0/gems/no_proxy_fix-0.1.2/README.md b/bundle/ruby/3.2.0/gems/no_proxy_fix-0.1.2/README.md deleted file mode 100644 index e733c6df..00000000 --- a/bundle/ruby/3.2.0/gems/no_proxy_fix-0.1.2/README.md +++ /dev/null @@ -1,46 +0,0 @@ -# no_proxy_fix - -[![Gem Version](https://badge.fury.io/rb/no_proxy_fix.svg)](http://badge.fury.io/rb/no_proxy_fix) -[![Build Status](https://travis-ci.org/ermaker/no_proxy_fix.svg?branch=master)](https://travis-ci.org/ermaker/no_proxy_fix) -[![Dependency Status](https://gemnasium.com/ermaker/no_proxy_fix.svg)](https://gemnasium.com/ermaker/no_proxy_fix) - - -This fixes https://github.com/ruby/ruby/commit/556e3da4216c926e71dea9ce4ea4a08dcfdc1275 for ruby 2.4.0 and ruby 2.4.1. - -## Installation - -Add this line to your application's Gemfile: - -```ruby -gem 'no_proxy_fix' -``` - -And then execute: - - $ bundle - -Or install it yourself as: - - $ gem install no_proxy_fix - -## Usage - -```ruby -require 'no_proxy_fix' -``` - -## Development - -After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment. - -To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org). - -## Contributing - -Bug reports and pull requests are welcome on GitHub at https://github.com/ermaker/no_proxy_fix. - - -## License - -The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT). - diff --git a/bundle/ruby/3.2.0/gems/no_proxy_fix-0.1.2/Rakefile b/bundle/ruby/3.2.0/gems/no_proxy_fix-0.1.2/Rakefile deleted file mode 100644 index 43e5699b..00000000 --- a/bundle/ruby/3.2.0/gems/no_proxy_fix-0.1.2/Rakefile +++ /dev/null @@ -1,23 +0,0 @@ -begin - require 'bundler/gem_tasks' -rescue LoadError # rubocop:disable Lint/HandleExceptions -end - -begin - require 'rspec/core/rake_task' - RSpec::Core::RakeTask.new(:spec) - task default: :spec -rescue LoadError # rubocop:disable Lint/HandleExceptions -end - -begin - require 'rubocop/rake_task' - RuboCop::RakeTask.new - namespace :rubocop do - desc "Run 'rubocop --auto-gen-config'" - task :todo do - sh 'rubocop --auto-gen-config' - end - end -rescue LoadError # rubocop:disable Lint/HandleExceptions -end diff --git a/bundle/ruby/3.2.0/gems/no_proxy_fix-0.1.2/bin/console b/bundle/ruby/3.2.0/gems/no_proxy_fix-0.1.2/bin/console deleted file mode 100755 index 452fbc3d..00000000 --- a/bundle/ruby/3.2.0/gems/no_proxy_fix-0.1.2/bin/console +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env ruby - -require 'bundler/setup' -require 'no_proxy_fix' - -# You can add fixtures and/or initialization code here to make experimenting -# with your gem easier. You can also use a different console, if you like. - -# (If you use this, don't forget to add pry to your Gemfile!) -# require "pry" -# Pry.start - -require 'irb' -IRB.start diff --git a/bundle/ruby/3.2.0/gems/no_proxy_fix-0.1.2/bin/setup b/bundle/ruby/3.2.0/gems/no_proxy_fix-0.1.2/bin/setup deleted file mode 100755 index dce67d86..00000000 --- a/bundle/ruby/3.2.0/gems/no_proxy_fix-0.1.2/bin/setup +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail -IFS=$'\n\t' -set -vx - -bundle install - -# Do any other automated setup that you need to do here diff --git a/bundle/ruby/3.2.0/gems/no_proxy_fix-0.1.2/lib/cext/generic_find_proxy.rb b/bundle/ruby/3.2.0/gems/no_proxy_fix-0.1.2/lib/cext/generic_find_proxy.rb deleted file mode 100644 index b5ce38d9..00000000 --- a/bundle/ruby/3.2.0/gems/no_proxy_fix-0.1.2/lib/cext/generic_find_proxy.rb +++ /dev/null @@ -1,111 +0,0 @@ -# frozen_string_literal: true - -require 'uri' - -# = uri/generic.rb -# -# Author:: Akira Yamada -# License:: You can redistribute it and/or modify it under the same term as Ruby. -# Revision:: $Id: generic.rb 56878 2016-11-22 23:44:51Z kazu $ -# -# See URI for general documentation -# - -require 'uri/common' - -module URI - - # - # Base class for all URI classes. - # Implements generic URI syntax as per RFC 2396. - # - class Generic - undef find_proxy - - # returns a proxy URI. - # The proxy URI is obtained from environment variables such as http_proxy, - # ftp_proxy, no_proxy, etc. - # If there is no proper proxy, nil is returned. - # - # If the optional parameter, +env+, is specified, it is used instead of ENV. - # - # Note that capitalized variables (HTTP_PROXY, FTP_PROXY, NO_PROXY, etc.) - # are examined too. - # - # But http_proxy and HTTP_PROXY is treated specially under CGI environment. - # It's because HTTP_PROXY may be set by Proxy: header. - # So HTTP_PROXY is not used. - # http_proxy is not used too if the variable is case insensitive. - # CGI_HTTP_PROXY can be used instead. - def find_proxy(env=ENV) - raise BadURIError, "relative URI: #{self}" if self.relative? - name = self.scheme.downcase + '_proxy' - proxy_uri = nil - if name == 'http_proxy' && env.include?('REQUEST_METHOD') # CGI? - # HTTP_PROXY conflicts with *_proxy for proxy settings and - # HTTP_* for header information in CGI. - # So it should be careful to use it. - pairs = env.reject {|k, v| /\Ahttp_proxy\z/i !~ k } - case pairs.length - when 0 # no proxy setting anyway. - proxy_uri = nil - when 1 - k, _ = pairs.shift - if k == 'http_proxy' && env[k.upcase] == nil - # http_proxy is safe to use because ENV is case sensitive. - proxy_uri = env[name] - else - proxy_uri = nil - end - else # http_proxy is safe to use because ENV is case sensitive. - proxy_uri = env.to_hash[name] - end - if !proxy_uri - # Use CGI_HTTP_PROXY. cf. libwww-perl. - proxy_uri = env["CGI_#{name.upcase}"] - end - elsif name == 'http_proxy' - unless proxy_uri = env[name] - if proxy_uri = env[name.upcase] - warn 'The environment variable HTTP_PROXY is discouraged. Use http_proxy.' - end - end - else - proxy_uri = env[name] || env[name.upcase] - end - - if proxy_uri.nil? || proxy_uri.empty? - return nil - end - - if self.hostname - require 'socket' - begin - addr = IPSocket.getaddress(self.hostname) - return nil if /\A127\.|\A::1\z/ =~ addr - rescue SocketError - end - end - - name = 'no_proxy' - if no_proxy = env[name] || env[name.upcase] - no_proxy.scan(/(?!\.)([^:,\s]+)(?::(\d+))?/) {|host, port| - if (!port || self.port == port.to_i) - if /(\A|\.)#{Regexp.quote host}\z/i =~ self.host - return nil - elsif addr - require 'ipaddr' - return nil if - begin - IPAddr.new(host) - rescue IPAddr::InvalidAddressError - next - end.include?(addr) - end - end - } - end - URI.parse(proxy_uri) - end - end -end diff --git a/bundle/ruby/3.2.0/gems/no_proxy_fix-0.1.2/lib/no_proxy_fix.rb b/bundle/ruby/3.2.0/gems/no_proxy_fix-0.1.2/lib/no_proxy_fix.rb deleted file mode 100644 index d3b62364..00000000 --- a/bundle/ruby/3.2.0/gems/no_proxy_fix-0.1.2/lib/no_proxy_fix.rb +++ /dev/null @@ -1,5 +0,0 @@ -require 'no_proxy_fix/version' - -module NoProxyFix - require 'cext/generic_find_proxy' if RUBY_VERSION =~ /\A2\.4\.[10]/ -end diff --git a/bundle/ruby/3.2.0/gems/no_proxy_fix-0.1.2/lib/no_proxy_fix/version.rb b/bundle/ruby/3.2.0/gems/no_proxy_fix-0.1.2/lib/no_proxy_fix/version.rb deleted file mode 100644 index 7691839c..00000000 --- a/bundle/ruby/3.2.0/gems/no_proxy_fix-0.1.2/lib/no_proxy_fix/version.rb +++ /dev/null @@ -1,3 +0,0 @@ -module NoProxyFix - VERSION = '0.1.2'.freeze -end diff --git a/bundle/ruby/3.2.0/gems/no_proxy_fix-0.1.2/no_proxy_fix.gemspec b/bundle/ruby/3.2.0/gems/no_proxy_fix-0.1.2/no_proxy_fix.gemspec deleted file mode 100644 index 46e11a9f..00000000 --- a/bundle/ruby/3.2.0/gems/no_proxy_fix-0.1.2/no_proxy_fix.gemspec +++ /dev/null @@ -1,33 +0,0 @@ - -lib = File.expand_path('../lib', __FILE__) -$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) -require 'no_proxy_fix/version' - -Gem::Specification.new do |spec| - spec.name = 'no_proxy_fix' - spec.version = NoProxyFix::VERSION - spec.authors = ['Minwoo Lee'] - spec.email = ['ermaker@gmail.com'] - - spec.summary = 'A fix for a no_proxy bug on ruby 2.4.0 and 2.4.1' - spec.description = 'A fix for a no_proxy bug: https://github.com/ruby/ruby/commit/556e3da4216c926e71dea9ce4ea4a08dcfdc1275' - spec.homepage = 'https://github.com/ermaker/no_proxy_fix' - spec.license = 'MIT' - - spec.files = `git ls-files -z`.split("\x0").reject do |f| - f.match(%r{^(test|spec|features)/}) - end - spec.bindir = 'exe' - spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) } - spec.require_paths = ['lib'] - - spec.add_development_dependency 'bundler' - spec.add_development_dependency 'rake' - spec.add_development_dependency 'rspec' - spec.add_development_dependency 'rspec-its' - spec.add_development_dependency 'rubocop' - spec.add_development_dependency 'guard' - spec.add_development_dependency 'guard-bundler' - spec.add_development_dependency 'guard-rspec' - spec.add_development_dependency 'guard-rubocop' -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/.document b/bundle/ruby/3.2.0/gems/octokit-8.1.0/.document deleted file mode 100644 index 0ad1bde4..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/.document +++ /dev/null @@ -1,5 +0,0 @@ -lib/**/*.rb -bin/* -features/**/*.feature -- -LICENSE.md diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/CONTRIBUTING.md b/bundle/ruby/3.2.0/gems/octokit-8.1.0/CONTRIBUTING.md deleted file mode 100644 index 669e8168..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/CONTRIBUTING.md +++ /dev/null @@ -1,23 +0,0 @@ -## Submitting a Pull Request - -0. Read our [Code of Conduct](CODE_OF_CONDUCT.md). -1. Check out [Hacking on Octokit](README.md#hacking-on-octokitrb) in the - README for bootstrapping the project for local development. -2. [Fork the repository.][fork] -3. [Create a topic branch.][branch] -4. Add specs for your unimplemented feature or bug fix. -5. Run `script/test`. If your specs pass, return to step 3. -6. Implement your feature or bug fix. -7. Run `script/test`. If your specs fail, return to step 5. -8. Run `open coverage/index.html`. If your changes are not completely covered - by your tests, return to step 4. -9. Add documentation for your feature or bug fix. -10. Run `bundle exec rake doc:yard`. If your changes are not 100% documented, go - back to step 8. -11. Add, commit, and push your changes. For documentation-only fixes, please - add "[ci skip]" to your commit message to avoid needless CI builds. -12. [Submit a pull request.][pr] - -[fork]: https://help.github.com/articles/fork-a-repo -[branch]: https://help.github.com/articles/creating-and-deleting-branches-within-your-repository/ -[pr]: https://help.github.com/articles/using-pull-requests diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/LICENSE.md b/bundle/ruby/3.2.0/gems/octokit-8.1.0/LICENSE.md deleted file mode 100644 index f1983312..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/LICENSE.md +++ /dev/null @@ -1,20 +0,0 @@ -Copyright (c) 2009-2017 Wynn Netherland, Adam Stacoviak, Erik Michaels-Ober - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/README.md b/bundle/ruby/3.2.0/gems/octokit-8.1.0/README.md deleted file mode 100644 index 34d83d8c..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/README.md +++ /dev/null @@ -1,813 +0,0 @@ -# Octokit - -> **Note** -> We've recently renamed the `4-stable` branch to `main`. This might affect you if you're making changes to Octokit's code locally. For more details and for the steps to reconfigure your local clone for the new branch name, check out [this post](https://github.com/octokit/octokit.rb/discussions/1455). - -Ruby toolkit for the GitHub API. - -![logo](https://docs.github.com/assets/images/gundamcat.png) - -Upgrading? Check the [Upgrade Guide](#upgrading-guide) before bumping to a new -[major version][semver]. - -## Table of Contents - -1. [Philosophy](#philosophy) -2. [Installation](#installation) -3. [Making requests](#making-requests) - 1. [Additional Query Parameters](#additional-query-parameters) -4. [Consuming resources](#consuming-resources) -5. [Accessing HTTP responses](#accessing-http-responses) -6. [Handling errors](#handling-errors) -7. [Authentication](#authentication) - 1. [Basic Authentication](#basic-authentication) - 2. [OAuth access tokens](#oauth-access-tokens) - 3. [Two-Factor Authentication](#two-factor-authentication) - 4. [Using a .netrc file](#using-a-netrc-file) - 5. [Application authentication](#application-authentication) - 6. [GitHub App](#github-app) -8. [Default results per_page](#default-results-per_page) -9. [Pagination](#pagination) - 1. [Auto pagination](#auto-pagination) -10. [Working with GitHub Enterprise](#working-with-github-enterprise) - 1. [Interacting with the GitHub.com APIs in GitHub Enterprise](#interacting-with-the-githubcom-apis-in-github-enterprise) - 2. [Interacting with the GitHub Enterprise Admin APIs](#interacting-with-the-github-enterprise-admin-apis) - 3. [Interacting with the GitHub Enterprise Management Console APIs](#interacting-with-the-github-enterprise-management-console-apis) - 4. [SSL Connection Errors](#ssl-connection-errors) -11. [Configuration and defaults](#configuration-and-defaults) - 1. [Configuring module defaults](#configuring-module-defaults) - 2. [Using ENV variables](#using-env-variables) - 3. [Timeouts](#timeouts) -12. [Hypermedia agent](#hypermedia-agent) - 1. [Hypermedia in Octokit](#hypermedia-in-octokit) - 2. [URI templates](#uri-templates) - 3. [The Full Hypermedia Experience™](#the-full-hypermedia-experience) -13. [Upgrading guide](#upgrading-guide) - 1. [Upgrading from 1.x.x](#upgrading-from-1xx) -14. [Advanced usage](#advanced-usage) - 1. [Debugging](#debugging) - 2. [Caching](#caching) -15. [Hacking on Octokit.rb](#hacking-on-octokitrb) - 1. [Code of Conduct](#code-of-conduct) - 2. [Running and writing new tests](#running-and-writing-new-tests) -16. [Supported Ruby Versions](#supported-ruby-versions) -17. [Versioning](#versioning) -18. [Making Repeating Requests](#making-repeating-requests) -19. [License](#license) - -## Philosophy - -API wrappers [should reflect the idioms of the language in which they were -written][wrappers]. Octokit.rb wraps the [GitHub API][github-api] in a flat API -client that follows Ruby conventions and requires little knowledge of REST. -Most methods have positional arguments for required input and an options hash -for optional parameters, headers, or other options: - -```ruby -client = Octokit::Client.new - -# Fetch a README with Accept header for HTML format -client.readme 'al3x/sovereign', :accept => 'application/vnd.github.html' -``` - -[wrappers]: http://wynnnetherland.com/journal/what-makes-a-good-api-wrapper -[github-api]: https://developer.github.com/v3/ - -## Installation - -Install via Rubygems - - gem install octokit - -... or add to your Gemfile - - gem "octokit", "~> 5.0" - -Access the library in Ruby: - - require 'octokit' - -## Making requests - -[API methods][] are available as client instance methods. - -```ruby -# Provide authentication credentials -client = Octokit::Client.new(:access_token => 'personal_access_token') - -# You can still use the username/password syntax by replacing the password value with your PAT. -# client = Octokit::Client.new(:login => 'defunkt', :password => 'personal_access_token') - -# Fetch the current user -client.user -``` - -### Additional query parameters - -When passing additional parameters to GET based request use the following syntax: - -```ruby - # query: { parameter_name: 'value' } - # Example: Get repository listing by owner in ascending order - client.repos({}, query: {type: 'owner', sort: 'asc'}) - - # Example: Get contents of a repository by ref - # https://api.github.com/repos/octokit/octokit.rb/contents/path/to/file.rb?ref=some-other-branch - client.contents('octokit/octokit.rb', path: 'path/to/file.rb', query: {ref: 'some-other-branch'}) -``` - -[api methods]: http://octokit.github.io/octokit.rb/method_list.html - -## Consuming resources - -Most methods return a `Resource` object which provides dot notation and `[]` -access for fields returned in the API response. - -```ruby -client = Octokit::Client.new - -# Fetch a user -user = client.user 'jbarnette' -puts user.name -# => "John Barnette" -puts user.fields -# => -puts user[:company] -# => "GitHub" -user.rels[:gists].href -# => "https://api.github.com/users/jbarnette/gists" -``` - -**Note:** URL fields are culled into a separate `.rels` collection for easier -[Hypermedia](#hypermedia-agent) support. - -## Accessing HTTP responses - -While most methods return a `Resource` object or a Boolean, sometimes you may -need access to the raw HTTP response headers. You can access the last HTTP -response with `Client#last_response`: - -```ruby -user = client.user 'andrewpthorp' -response = client.last_response -etag = response.headers[:etag] -``` - -## Handling errors - -When the API returns an error response, Octokit will raise a Ruby exception. - -A range of different exceptions can be raised depending on the error returned -by the API - for example: - -* A `400 Bad Request` response will lead to an `Octokit::BadRequest` error -* A `403 Forbidden` error with a "rate limited exceeded" message will lead - to a `Octokit::TooManyRequests` error - -All of the different exception classes inherit from `Octokit::Error` and -expose the `#response_status`, `#response_headers` and `#response_body`. -For validation errors, `#errors` will return an `Array` of `Hash`es -with the detailed information -[returned by the API](https://docs.github.com/en/rest/overview/resources-in-the-rest-api#client-errors). - -## Authentication - -Octokit supports the various [authentication methods supported by the GitHub -API][auth]: - -### Basic Authentication - -Using your GitHub username and password is the easiest way to get started -making authenticated requests: - -```ruby -client = Octokit::Client.new(:login => 'defunkt', :password => 'c0d3b4ssssss!') - -user = client.user -user.login -# => "defunkt" -``` - -While Basic Authentication allows you to get started quickly, OAuth access -tokens are the preferred way to authenticate on behalf of users. - -### OAuth access tokens - -[OAuth access tokens][oauth] provide two main benefits over using your username -and password: - -- **Revocable access**. Access tokens can be revoked, removing access for only - that token without having to change your password everywhere. -- **Limited access**. Access tokens have [access scopes][] which allow for more - granular access to API resources. For instance, you can grant a third party - access to your gists but not your private repositories. - -To use an access token with the Octokit client, pass your token in the -`:access_token` options parameter in lieu of your username and password: - -```ruby -client = Octokit::Client.new(:access_token => "") - -user = client.user -user.login -# => "defunkt" -``` - -You can [create access tokens through your GitHub Account Settings](https://help.github.com/articles/creating-an-access-token-for-command-line-use). - -### Two-Factor Authentication - -[Two-Factor Authentication](https://help.github.com/articles/about-two-factor-authentication) brings added security to the account by requiring more information to login. - -Using two-factor authentication for API calls is as simple as adding the [required header](http://developer.github.com/v3/auth/#working-with-two-factor-authentication) as an option: - -```ruby -client = Octokit::Client.new \ - :login => 'defunkt', - :password => 'c0d3b4ssssss!' - -user = client.user("defunkt", :headers => { "X-GitHub-OTP" => "" }) -``` - -### Using a .netrc file - -Octokit supports reading credentials from a netrc file (defaulting to -`~/.netrc`). Given these lines in your netrc: - -``` -machine api.github.com - login defunkt - password c0d3b4ssssss! -``` - -You can now create a client with those credentials: - -```ruby -client = Octokit::Client.new(:netrc => true) -client.login -# => "defunkt" -``` - -But _I want to use OAuth_ you say. Since the GitHub API supports using an OAuth -token as a Basic password, you totally can: - -``` -machine api.github.com - login defunkt - password -``` - -**Note:** Support for netrc requires adding the [netrc gem][] to your Gemfile -or `.gemspec`. - -### Application authentication - -Octokit also supports application-only authentication [using OAuth application client -credentials][app-creds]. Using application credentials will result in making -anonymous API calls on behalf of an application in order to take advantage of -the higher rate limit. - -```ruby -client = Octokit::Client.new \ - :client_id => "", - :client_secret => "" - -user = client.user 'defunkt' -``` - -[auth]: http://developer.github.com/v3/#authentication -[oauth]: http://developer.github.com/v3/oauth/ -[access scopes]: http://developer.github.com/v3/oauth/#scopes -[app-creds]: http://developer.github.com/v3/#increasing-the-unauthenticated-rate-limit-for-oauth-applications - -### GitHub App -Octokit.rb also supports authentication [using a GitHub App](https://docs.github.com/en/developers/apps/managing-github-apps/installing-github-apps), which [requires a generated JWT token](https://docs.github.com/en/developers/apps/building-github-apps/authenticating-with-github-apps#authenticating-as-a-github-app). - -```ruby -client = Octokit::Client.new(:bearer_token => "") -client.app -# => about GitHub App info -``` - -## Default results per_page - -Default results from the GitHub API are 30, if you wish to add more you must do so during Octokit configuration. - -```ruby -Octokit::Client.new(access_token: "", per_page: 100) -``` - -## Pagination - -Many GitHub API resources are [paginated][]. While you may be tempted to start -adding `:page` parameters to your calls, the API returns links to the next, -previous, and last pages for you in the `Link` response header as [Hypermedia -link relations](#hypermedia-agent). - -```ruby -issues = client.issues 'rails/rails' -issues.concat client.get(client.last_response.rels[:next].href) -``` - -### Auto pagination - -For smallish resource lists, Octokit provides auto pagination. When this is -enabled, calls for paginated resources will fetch and concatenate the results -from every page into a single array: - -```ruby -client.auto_paginate = true -issues = client.issues 'rails/rails' -issues.length - -# => 702 -``` - -You can also enable auto pagination for all Octokit client instances: - -```ruby -Octokit.configure do |c| - c.auto_paginate = true -end -``` - -**Note:** While Octokit auto pagination will set the page size to the maximum -`100`, and seek to not overstep your rate limit, you probably want to use a -custom pattern for traversing large lists. - -[paginated]: http://developer.github.com/v3/#pagination - -## Working with GitHub Enterprise - -With a bit of setup, you can also use Octokit with your GitHub Enterprise instance. - -### Interacting with the GitHub.com APIs in GitHub Enterprise - -To interact with the "regular" GitHub.com APIs in GitHub Enterprise, simply configure the `api_endpoint` to match your hostname. For example: - -```ruby -Octokit.configure do |c| - c.api_endpoint = "https:///api/v3/" -end - -client = Octokit::Client.new(:access_token => "") -``` - -### Interacting with the GitHub Enterprise Admin APIs - -The GitHub Enterprise Admin APIs are under a different client: `EnterpriseAdminClient`. You'll need to have an administrator account in order to use these APIs. - -```ruby -admin_client = Octokit::EnterpriseAdminClient.new( - :access_token => "", - :api_endpoint => "https:///api/v3/" -) - -# or -Octokit.configure do |c| - c.api_endpoint = "https:///api/v3/" - c.access_token = "" -end - -admin_client = Octokit.enterprise_admin_client.new -``` - -### Interacting with the GitHub Enterprise Management Console APIs - -The GitHub Enterprise Management Console APIs are also under a separate client: `EnterpriseManagementConsoleClient`. In order to use it, you'll need to provide both your management console password as well as the endpoint to your management console. This is different from the API endpoint provided above. - -```ruby -management_console_client = Octokit::EnterpriseManagementConsoleClient.new( - :management_console_password => "secret", - :management_console_endpoint = "https://hostname:8633" -) - -# or -Octokit.configure do |c| - c.management_console_endpoint = "https://hostname:8633" - c.management_console_password = "secret" -end - -management_console_client = Octokit.enterprise_management_console_client.new -``` - -### SSL Connection Errors - -You _may_ need to disable SSL temporarily while first setting up your GitHub Enterprise install. You can do that with the following configuration: - -```ruby -client.connection_options[:ssl] = { :verify => false } -``` - -Do remember to turn `:verify` back to `true`, as it's important for secure communication. - -## Configuration and defaults - -While `Octokit::Client` accepts a range of options when creating a new client -instance, Octokit's configuration API allows you to set your configuration -options at the module level. This is particularly handy if you're creating a -number of client instances based on some shared defaults. Changing options -affects new instances only and will not modify existing `Octokit::Client` -instances created with previous options. - -### Configuring module defaults - -Every writable attribute in {Octokit::Configurable} can be set one at a time: - -```ruby -Octokit.api_endpoint = 'http://api.github.dev' -Octokit.web_endpoint = 'http://github.dev' -``` - -or in batch: - -```ruby -Octokit.configure do |c| - c.api_endpoint = 'http://api.github.dev' - c.web_endpoint = 'http://github.dev' -end -``` - -### Using ENV variables - -Default configuration values are specified in {Octokit::Default}. Many -attributes will look for a default value from the ENV before returning -Octokit's default. - -```ruby -# Given $OCTOKIT_API_ENDPOINT is "http://api.github.dev" -client.api_endpoint - -# => "http://api.github.dev" -``` - -Deprecation warnings and API endpoints in development preview warnings are -printed to STDOUT by default, these can be disabled by setting the ENV -`OCTOKIT_SILENT=true`. - -### Timeouts - -By default, Octokit does not timeout network requests. To set a timeout, pass in Faraday timeout settings to Octokit's `connection_options` setting. - -```ruby -Octokit.configure do |c| - c.api_endpoint = ENV.fetch('GITHUB_API_ENDPOINT', 'https://api.github.com/') - c.connection_options = { - request: { - open_timeout: 5, - timeout: 5 - } - } -end -``` - -You should set a timeout in order to avoid Ruby’s Timeout module, which can hose your server. Here are some resources for more information on this: - -- [The Oldest Bug In Ruby - Why Rack::Timeout Might Hose your Server](https://www.schneems.com/2017/02/21/the-oldest-bug-in-ruby-why-racktimeout-might-hose-your-server/) -- [Timeout: Ruby's Most Dangerous API](https://www.mikeperham.com/2015/05/08/timeout-rubys-most-dangerous-api/) -- [The Ultimate Guide to Ruby Timeouts](https://github.com/ankane/the-ultimate-guide-to-ruby-timeouts) - -## Hypermedia agent - -Starting in version 2.0, Octokit is [hypermedia][]-enabled. Under the hood, -{Octokit::Client} uses [Sawyer][], a hypermedia client built on [Faraday][]. - -### Hypermedia in Octokit - -Resources returned by Octokit methods contain not only data but hypermedia -link relations: - -```ruby -user = client.user 'technoweenie' - -# Get the repos rel, returned from the API -# as repos_url in the resource -user.rels[:repos].href -# => "https://api.github.com/users/technoweenie/repos" - -repos = user.rels[:repos].get.data -repos.last.name -# => "faraday-zeromq" -``` - -When processing API responses, all `*_url` attributes are culled into the link -relations collection. Any `url` attribute becomes `.rels[:self]`. - -### URI templates - -You might notice many link relations have variable placeholders. Octokit -supports [URI Templates][uri-templates] for parameterized URI expansion: - -```ruby -repo = client.repo 'pengwynn/pingwynn' -rel = repo.rels[:issues] -# => # - -# Get a page of issues -rel.get.data - -# Get issue #2 -rel.get(:uri => {:number => 2}).data -``` - -### The Full Hypermedia Experience™ - -If you want to use Octokit as a pure hypermedia API client, you can start at -the API root and follow link relations from there: - -```ruby -root = client.root -root.rels[:repository].get :uri => {:owner => "octokit", :repo => "octokit.rb" } -root.rels[:user_repositories].get :uri => { :user => "octokit" }, - :query => { :type => "owner" } -``` - -Octokit 3.0 aims to be hypermedia-driven, removing the internal URL -construction currently used throughout the client. - -[hypermedia]: http://en.wikipedia.org/wiki/Hypermedia -[sawyer]: https://github.com/lostisland/sawyer -[faraday]: https://github.com/lostisland/faraday -[uri-templates]: http://tools.ietf.org/html/rfc6570 - -## Upgrading guide - -Version 4.0 - -- **removes support for a [long-deprecated overload][list-pulls] for - passing state as a positional argument** when listing pull requests. Instead, - pass `state` in the method options. -- **drops support for Ruby < 2.0**. -- adds support for new [Enterprise-only APIs](#working-with-github-enterprise). -- adds support for [Repository redirects][redirects]. - -[list-pulls]: https://github.com/octokit/octokit.rb/commit/e48e91f736d5fce51e3bf74d7c9022aaa52f5c5c -[redirects]: https://developer.github.com/changes/2015-05-26-repository-redirects-are-coming/ - -Version 3.0 includes a couple breaking changes when upgrading from v2.x.x: - -The [default media type][default-media-type] is now `v3` instead of `beta`. If -you need to request the older media type, you can set the default media type -for the client: - -```ruby -Octokit.default_media_type = "application/vnd.github.beta+json" -``` - -or per-request - -```ruby -client.emails(:accept => "application/vnd.github.beta+json") -``` - -The long-deprecated `Octokit::Client#create_download` method has been removed. - -[default-media-type]: https://developer.github.com/changes/2014-01-07-upcoming-change-to-default-media-type/ - -### Upgrading from 1.x.x - -Version 2.0 includes a completely rewritten `Client` factory that now memoizes -client instances based on unique configuration options. Breaking changes also -include: - -- `:oauth_token` is now `:access_token` -- `:auto_traversal` is now `:auto_paginate` -- `Hashie::Mash` has been removed. Responses now return a `Sawyer::Resource` - object. This new type behaves mostly like a Ruby `Hash`, but does not fully - support the `Hashie::Mash` API. -- Two new client error types are raised where appropriate: - `Octokit::TooManyRequests` and `Octokit::TooManyLoginAttempts` -- The `search_*` methods from v1.x are now found at `legacy_search_*` -- Support for netrc requires including the [netrc gem][] in your Gemfile or - gemspec. -- DateTime fields are now proper `DateTime` objects. Previous versions outputted DateTime fields as 'String' objects. - -[netrc gem]: https://rubygems.org/gems/netrc - -## Advanced usage - -Since Octokit employs [Faraday][faraday] under the hood, some behavior can be -extended via middleware. - -### Debugging - -Often, it helps to know what Octokit is doing under the hood. You can add a -logger to the middleware that enables you to peek into the underlying HTTP -traffic: - -```ruby -stack = Faraday::RackBuilder.new do |builder| - builder.use Faraday::Retry::Middleware, exceptions: Faraday::Request::Retry::DEFAULT_EXCEPTIONS + [Octokit::ServerError] # or Faraday::Request::Retry for Faraday < 2.0 - builder.use Octokit::Middleware::FollowRedirects - builder.use Octokit::Response::RaiseError - builder.use Octokit::Response::FeedParser - builder.response :logger do |logger| - logger.filter(/(Authorization: "(token|Bearer) )(\w+)/, '\1[REMOVED]') - end - builder.adapter Faraday.default_adapter -end -Octokit.middleware = stack - -client = Octokit::Client.new -client.user 'pengwynn' -``` - -``` -I, [2013-08-22T15:54:38.583300 #88227] INFO -- : get https://api.github.com/users/pengwynn -D, [2013-08-22T15:54:38.583401 #88227] DEBUG -- request: Accept: "application/vnd.github.beta+json" -User-Agent: "Octokit Ruby Gem 2.0.0.rc4" -I, [2013-08-22T15:54:38.843313 #88227] INFO -- Status: 200 -D, [2013-08-22T15:54:38.843459 #88227] DEBUG -- response: server: "GitHub.com" -date: "Thu, 22 Aug 2013 20:54:40 GMT" -content-type: "application/json; charset=utf-8" -transfer-encoding: "chunked" -connection: "close" -status: "200 OK" -x-ratelimit-limit: "60" -x-ratelimit-remaining: "39" -x-ratelimit-reset: "1377205443" -... -``` - -See the [Faraday README][faraday] for more middleware magic. - -### Caching - -If you want to boost performance, stretch your API rate limit, or avoid paying -the hypermedia tax, you can use [Faraday Http Cache][cache]. - -Add the gem to your Gemfile - - gem 'faraday-http-cache' - -Next, construct your own Faraday middleware: - -```ruby -stack = Faraday::RackBuilder.new do |builder| - builder.use Faraday::HttpCache, serializer: Marshal, shared_cache: false - builder.use Octokit::Response::RaiseError - builder.adapter Faraday.default_adapter -end -Octokit.middleware = stack -``` - -Once configured, the middleware will store responses in cache based on ETag -fingerprint and serve those back up for future `304` responses for the same -resource. See the [project README][cache] for advanced usage. - -[cache]: https://github.com/sourcelevel/faraday-http-cache -[faraday]: https://github.com/lostisland/faraday - -## Hacking on Octokit.rb - -If you want to hack on Octokit locally, we try to make [bootstrapping the -project][bootstrapping] as painless as possible. To start hacking, clone and run: - - script/bootstrap - -This will install project dependencies and get you up and running. If you want -to run a Ruby console to poke on Octokit, you can crank one up with: - - script/console - -Using the scripts in `./script` instead of `bundle exec rspec`, `bundle console`, etc. ensures your dependencies are up-to-date. - -### Code of Conduct - -We want both the Octokit.rb and larger Octokit communities to be open -and welcoming environments. Please read and follow both in spirit and -letter [Code of Conduct](CODE_OF_CONDUCT.md). - -### Running and writing new tests - -Octokit uses [VCR][] for recording and playing back API fixtures during test -runs. These cassettes (fixtures) are part of the Git project in the `spec/cassettes` -folder. If you're not recording new cassettes you can run the specs with existing -cassettes with: - - script/test - -Octokit uses environmental variables for storing credentials used in testing. -If you are testing an API endpoint that doesn't require authentication, you -can get away without any additional configuration. For the most part, tests -use an authenticated client, using a token stored in `ENV['OCTOKIT_TEST_GITHUB_TOKEN']`. -There are several different authentication methods used across the api. -Here is the full list of configurable environmental variables for testing -Octokit: - -| ENV Variable | Description | -| :----------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `OCTOKIT_TEST_GITHUB_LOGIN` | GitHub login name (preferably one created specifically for testing against). | -| `OCTOKIT_TEST_GITHUB_PASSWORD` | Password for the test GitHub login. | -| `OCTOKIT_TEST_GITHUB_TOKEN` | [Personal Access Token](https://github.com/blog/1509-personal-api-tokens) for the test GitHub login. | -| `OCTOKIT_TEST_GITHUB_CLIENT_ID` | Test OAuth application client id. | -| `OCTOKIT_TEST_GITHUB_CLIENT_SECRET` | Test OAuth application client secret. | -| `OCTOKIT_TEST_GITHUB_REPOSITORY` | Test repository to perform destructive actions against, this should not be set to any repository of importance. **Automatically created by the test suite if nonexistent** Default: `api-sandbox` | -| `OCTOKIT_TEST_GITHUB_ORGANIZATION` | Test organization. | -| `OCTOKIT_TEST_GITHUB_ENTERPRISE_LOGIN` | GitHub Enterprise login name. | -| `OCTOKIT_TEST_GITHUB_ENTERPRISE_TOKEN` | GitHub Enterprise token. | -| `OCTOKIT_TEST_GITHUB_ENTERPRISE_MANAGEMENT_CONSOLE_PASSWORD` | GitHub Enterprise management console password. | -| `OCTOKIT_TEST_GITHUB_ENTERPRISE_ENDPOINT` | GitHub Enterprise hostname. | -| `OCTOKIT_TEST_GITHUB_ENTERPRISE_MANAGEMENT_CONSOLE_ENDPOINT` | GitHub Enterprise Management Console endpoint. | -| `OCTOKIT_TEST_GITHUB_INTEGRATION` | [GitHub Integration](https://developer.github.com/early-access/integrations/) owned by your test organization. | -| `OCTOKIT_TEST_GITHUB_INTEGRATION_INSTALLATION` | Installation of the GitHub Integration specified above. | -| `OCTOKIT_TEST_INTEGRATION_PEM_KEY` | File path to the private key generated from your integration. | - -Since we periodically refresh our cassettes, please keep some points in mind -when writing new specs. - -- **Specs should be idempotent**. The HTTP calls made during a spec should be - able to be run over and over. This means deleting a known resource prior to - creating it if the name has to be unique. -- **Specs should be able to be run in random order.** If a spec depends on - another resource as a fixture, make sure that's created in the scope of the - spec and not depend on a previous spec to create the data needed. -- **Do not depend on authenticated user info.** Instead of asserting - actual values in resources, try to assert the existence of a key or that a - response is an Array. We're testing the client, not the API. - -[bootstrapping]: http://wynnnetherland.com/linked/2013012801/bootstrapping-consistency -[vcr]: https://github.com/vcr/vcr - -## Supported Ruby Versions - -This library aims to support and is [tested against][actions] the following Ruby -implementations: - -* Ruby 2.7 -* Ruby 3.0 -* Ruby 3.1 -* Ruby 3.2 - -If something doesn't work on one of these Ruby versions, it's a bug. - -This library may inadvertently work (or seem to work) on other Ruby -implementations, but support will only be provided for the versions listed -above. - -If you would like this library to support another Ruby version, you may -volunteer to be a maintainer. Being a maintainer entails making sure all tests -run and pass on that implementation. When something breaks on your -implementation, you will be responsible for providing patches in a timely -fashion. If critical issues for a particular implementation exist at the time -of a major release, support for that Ruby version may be dropped. - -[actions]: https://github.com/octokit/octokit.rb/actions - -## Versioning - -This library aims to adhere to [Semantic Versioning 2.0.0][semver]. Violations -of this scheme should be reported as bugs. Specifically, if a minor or patch -version is released that breaks backward compatibility, that version should be -immediately yanked and/or a new version should be immediately released that -restores compatibility. Breaking changes to the public API will only be -introduced with new major versions. As a result of this policy, you can (and -should) specify a dependency on this gem using the [Pessimistic Version -Constraint][pvc] with two digits of precision. For example: - - spec.add_dependency 'octokit', '~> 3.0' - -The changes made between versions can be seen on the [project releases page][releases]. - -[semver]: http://semver.org/ -[pvc]: http://guides.rubygems.org/patterns/#pessimistic-version-constraint -[releases]: https://github.com/octokit/octokit.rb/releases - -## Making Repeating Requests - -In most cases it would be best to use [webhooks](https://developer.github.com/webhooks/), but sometimes webhooks don't provide all of the information needed. In those cases where one might need to poll for progress or retry a request on failure, we designed [Octopoller](https://github.com/octokit/octopoller.rb). Octopoller is a micro gem perfect for making repeating requests. - -```ruby -Octopoller.poll(timeout: 15.seconds) do - begin - client.request_progress # ex. request a long running job's status - rescue Error - :re_poll - end -end -``` - -This is useful when making requests for a long running job's progress (ex. requesting a [Source Import's progress](https://developer.github.com/v3/migrations/source_imports/#get-import-progress)). - -## License - -Copyright (c) 2009-2014 Wynn Netherland, Adam Stacoviak, Erik Michaels-Ober - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/Rakefile b/bundle/ruby/3.2.0/gems/octokit-8.1.0/Rakefile deleted file mode 100644 index 8d212a5d..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/Rakefile +++ /dev/null @@ -1,28 +0,0 @@ -# frozen_string_literal: true - -require 'bundler' -Bundler::GemHelper.install_tasks - -task test: :spec -task default: :spec - -desc 'Run RSpec' -task :spec do - if Process.respond_to?(:fork) - sh('rspec-queue') - else - sh('rspec') - end -end - -namespace :doc do - require 'yard' - YARD::Rake::YardocTask.new do |task| - task.files = ['README.md', 'LICENSE.md', 'lib/**/*.rb'] - task.options = [ - '--output-dir', 'doc/yard', - '--markup', 'markdown' - ] - end -rescue LoadError -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/ext/sawyer/relation.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/ext/sawyer/relation.rb deleted file mode 100644 index 84e975be..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/ext/sawyer/relation.rb +++ /dev/null @@ -1,12 +0,0 @@ -# frozen_string_literal: true - -require 'sawyer' - -patch = Module.new do - def href(options = nil) - # Temporary workaround for: https://github.com/octokit/octokit.rb/issues/727 - name.to_s == 'ssh' ? @href : super - end -end - -Sawyer::Relation.send(:prepend, patch) diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit.rb deleted file mode 100644 index cf5340aa..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit.rb +++ /dev/null @@ -1,66 +0,0 @@ -# frozen_string_literal: true - -require 'octokit/default' -require 'octokit/client' -require 'octokit/enterprise_admin_client' -require 'octokit/enterprise_management_console_client' - -# Ruby toolkit for the GitHub API -module Octokit - class << self - include Octokit::Configurable - - # API client based on configured options {Configurable} - # - # @return [Octokit::Client] API wrapper - def client - return @client if defined?(@client) && @client.same_options?(options) - - @client = Octokit::Client.new(options) - end - - # EnterpriseAdminClient client based on configured options {Configurable} - # - # @return [Octokit::EnterpriseAdminClient] API wrapper - def enterprise_admin_client - if defined?(@enterprise_admin_client) && @enterprise_admin_client.same_options?(options) - return @enterprise_admin_client - end - - @enterprise_admin_client = Octokit::EnterpriseAdminClient.new(options) - end - - # EnterpriseManagementConsoleClient client based on configured options {Configurable} - # - # @return [Octokit::EnterpriseManagementConsoleClient] API wrapper - def enterprise_management_console_client - if defined?(@enterprise_management_console_client) && @enterprise_management_console_client.same_options?(options) - return @enterprise_management_console_client - end - - @enterprise_management_console_client = Octokit::EnterpriseManagementConsoleClient.new(options) - end - - private - - def respond_to_missing?(method_name, include_private = false) - client.respond_to?(method_name, include_private) || - enterprise_admin_client.respond_to?(method_name, include_private) || - enterprise_management_console_client.respond_to?(method_name, include_private) - end - - def method_missing(method_name, *args, &block) - if client.respond_to?(method_name) - return client.send(method_name, *args, &block) - elsif enterprise_admin_client.respond_to?(method_name) - return enterprise_admin_client.send(method_name, *args, &block) - elsif enterprise_management_console_client.respond_to?(method_name) - return enterprise_management_console_client.send(method_name, *args, &block) - end - - super - end - end -end - -Octokit.setup diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/arguments.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/arguments.rb deleted file mode 100644 index d329ec49..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/arguments.rb +++ /dev/null @@ -1,14 +0,0 @@ -# frozen_string_literal: true - -module Octokit - # Extracts options from method arguments - # @private - class Arguments < Array - attr_reader :options - - def initialize(args) - @options = args.last.is_a?(::Hash) ? args.pop : {} - super(args) - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/authentication.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/authentication.rb deleted file mode 100644 index 48a4c3e6..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/authentication.rb +++ /dev/null @@ -1,80 +0,0 @@ -# frozen_string_literal: true - -module Octokit - # Authentication methods for {Octokit::Client} - module Authentication - # In Faraday 2.x, the authorization middleware uses new interface - FARADAY_BASIC_AUTH_KEYS = - if Gem::Version.new(Faraday::VERSION) >= Gem::Version.new('2.0') - %i[authorization basic] - else - [:basic_auth] - end - - # Indicates if the client was supplied Basic Auth - # username and password - # - # @see https://developer.github.com/v3/#authentication - # @return [Boolean] - def basic_authenticated? - !!(@login && @password) - end - - # Indicates if the client was supplied an OAuth - # access token - # - # @see https://developer.github.com/v3/#authentication - # @return [Boolean] - def token_authenticated? - !!@access_token - end - - # Indicates if the client was supplied a bearer token - # - # @see https://developer.github.com/early-access/integrations/authentication/#as-an-integration - # @return [Boolean] - def bearer_authenticated? - !!@bearer_token - end - - # Indicates if the client was supplied an OAuth - # access token or Basic Auth username and password - # - # @see https://developer.github.com/v3/#authentication - # @return [Boolean] - def user_authenticated? - basic_authenticated? || token_authenticated? - end - - # Indicates if the client has OAuth Application - # client_id and secret credentials to make anonymous - # requests at a higher rate limit - # - # @see https://developer.github.com/v3/#unauthenticated-rate-limited-requests - # @return [Boolean] - def application_authenticated? - !!(@client_id && @client_secret) - end - - private - - def login_from_netrc - return unless netrc? - - require 'netrc' - info = Netrc.read netrc_file - netrc_host = URI.parse(api_endpoint).host - creds = info[netrc_host] - if creds.nil? - # creds will be nil if there is no netrc for this end point - octokit_warn "Error loading credentials from netrc file for #{api_endpoint}" - else - creds = creds.to_a - self.login = creds.shift - self.password = creds.shift - end - rescue LoadError - octokit_warn 'Please install netrc gem for .netrc support' - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client.rb deleted file mode 100644 index b4005bf7..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client.rb +++ /dev/null @@ -1,278 +0,0 @@ -# frozen_string_literal: true - -require 'octokit/connection' -require 'octokit/warnable' -require 'octokit/arguments' -require 'octokit/repo_arguments' -require 'octokit/configurable' -require 'octokit/authentication' -require 'octokit/gist' -require 'octokit/rate_limit' -require 'octokit/repository' -require 'octokit/user' -require 'octokit/organization' -require 'octokit/client/actions_artifacts' -require 'octokit/client/actions_secrets' -require 'octokit/client/actions_workflows' -require 'octokit/client/actions_workflow_jobs' -require 'octokit/client/actions_workflow_runs' -require 'octokit/client/apps' -require 'octokit/client/checks' -require 'octokit/client/code_scanning' -require 'octokit/client/codespaces_secrets' -require 'octokit/client/commits' -require 'octokit/client/commit_comments' -require 'octokit/client/commit_pulls' -require 'octokit/client/commit_branches' -require 'octokit/client/community_profile' -require 'octokit/client/contents' -require 'octokit/client/downloads' -require 'octokit/client/dependabot_secrets' -require 'octokit/client/deployments' -require 'octokit/client/environments' -require 'octokit/client/emojis' -require 'octokit/client/events' -require 'octokit/client/feeds' -require 'octokit/client/gists' -require 'octokit/client/gitignore' -require 'octokit/client/hooks' -require 'octokit/client/issues' -require 'octokit/client/labels' -require 'octokit/client/legacy_search' -require 'octokit/client/licenses' -require 'octokit/client/meta' -require 'octokit/client/markdown' -require 'octokit/client/marketplace' -require 'octokit/client/milestones' -require 'octokit/client/notifications' -require 'octokit/client/oauth_applications' -require 'octokit/client/objects' -require 'octokit/client/organizations' -require 'octokit/client/pages' -require 'octokit/client/projects' -require 'octokit/client/pub_sub_hubbub' -require 'octokit/client/pull_requests' -require 'octokit/client/rate_limit' -require 'octokit/client/reactions' -require 'octokit/client/refs' -require 'octokit/client/releases' -require 'octokit/client/repositories' -require 'octokit/client/repository_invitations' -require 'octokit/client/reviews' -require 'octokit/client/say' -require 'octokit/client/search' -require 'octokit/client/service_status' -require 'octokit/client/source_import' -require 'octokit/client/stats' -require 'octokit/client/statuses' -require 'octokit/client/tokens' -require 'octokit/client/traffic' -require 'octokit/client/users' -require 'ext/sawyer/relation' - -module Octokit - # Client for the GitHub API - # - # @see https://developer.github.com - class Client - include Octokit::Authentication - include Octokit::Configurable - include Octokit::Connection - include Octokit::Warnable - include Octokit::Client::ActionsArtifacts - include Octokit::Client::ActionsSecrets - include Octokit::Client::Checks - include Octokit::Client::CodeScanning - include Octokit::Client::CodespacesSecrets - include Octokit::Client::Commits - include Octokit::Client::CommitComments - include Octokit::Client::CommitPulls - include Octokit::Client::CommitBranches - include Octokit::Client::CommunityProfile - include Octokit::Client::Contents - include Octokit::Client::DependabotSecrets - include Octokit::Client::Deployments - include Octokit::Client::Downloads - include Octokit::Client::Environments - include Octokit::Client::Emojis - include Octokit::Client::Events - include Octokit::Client::Feeds - include Octokit::Client::Gists - include Octokit::Client::Gitignore - include Octokit::Client::Hooks - include Octokit::Client::ActionsWorkflows - include Octokit::Client::ActionsWorkflowJobs - include Octokit::Client::ActionsWorkflowRuns - include Octokit::Client::Apps - include Octokit::Client::Issues - include Octokit::Client::Labels - include Octokit::Client::LegacySearch - include Octokit::Client::Licenses - include Octokit::Client::Meta - include Octokit::Client::Markdown - include Octokit::Client::Marketplace - include Octokit::Client::Milestones - include Octokit::Client::Notifications - include Octokit::Client::OauthApplications - include Octokit::Client::Objects - include Octokit::Client::Organizations - include Octokit::Client::Pages - include Octokit::Client::Projects - include Octokit::Client::PubSubHubbub - include Octokit::Client::PullRequests - include Octokit::Client::RateLimit - include Octokit::Client::Reactions - include Octokit::Client::Refs - include Octokit::Client::Releases - include Octokit::Client::Repositories - include Octokit::Client::RepositoryInvitations - include Octokit::Client::Reviews - include Octokit::Client::Say - include Octokit::Client::Search - include Octokit::Client::ServiceStatus - include Octokit::Client::SourceImport - include Octokit::Client::Stats - include Octokit::Client::Statuses - include Octokit::Client::Tokens - include Octokit::Client::Traffic - include Octokit::Client::Users - - # Header keys that can be passed in options hash to {#get},{#head} - CONVENIENCE_HEADERS = Set.new(%i[accept content_type]) - - def initialize(options = {}) - # Use options passed in, but fall back to module defaults - # - # rubocop:disable Style/HashEachMethods - # - # This may look like a `.keys.each` which should be replaced with `#each_key`, but - # this doesn't actually work, since `#keys` is just a method we've defined ourselves. - # The class doesn't fulfill the whole `Enumerable` contract. - Octokit::Configurable.keys.each do |key| - # rubocop:enable Style/HashEachMethods - value = options[key].nil? ? Octokit.instance_variable_get(:"@#{key}") : options[key] - instance_variable_set(:"@#{key}", value) - end - - login_from_netrc unless user_authenticated? || application_authenticated? - end - - # Text representation of the client, masking tokens and passwords - # - # @return [String] - def inspect - inspected = super - - # mask password - inspected.gsub! @password, '*******' if @password - if @management_console_password - inspected.gsub! @management_console_password, '*******' - end - inspected.gsub! @bearer_token, '********' if @bearer_token - # Only show last 4 of token, secret - if @access_token - inspected.gsub! @access_token, "#{'*' * 36}#{@access_token[36..]}" - end - if @client_secret - inspected.gsub! @client_secret, "#{'*' * 36}#{@client_secret[36..]}" - end - - inspected - end - - # Duplicate client using client_id and client_secret as - # Basic Authentication credentials. - # @example - # Octokit.client_id = "foo" - # Octokit.client_secret = "bar" - # - # # GET https://api.github.com/?client_id=foo&client_secret=bar - # Octokit.get "/" - # - # Octokit.client.as_app do |client| - # # GET https://foo:bar@api.github.com/ - # client.get "/" - # end - def as_app(key = client_id, secret = client_secret) - if key.to_s.empty? || secret.to_s.empty? - raise ApplicationCredentialsRequired, 'client_id and client_secret required' - end - - app_client = dup - app_client.client_id = app_client.client_secret = nil - app_client.login = key - app_client.password = secret - - yield app_client if block_given? - end - - # Set username for authentication - # - # @param value [String] GitHub username - def login=(value) - reset_agent - @login = value - end - - # Set password for authentication - # - # @param value [String] GitHub password - def password=(value) - reset_agent - @password = value - end - - # Set OAuth access token for authentication - # - # @param value [String] 40 character GitHub OAuth access token - def access_token=(value) - reset_agent - @access_token = value - end - - # Set Bearer Token for authentication - # - # @param value [String] JWT - def bearer_token=(value) - reset_agent - @bearer_token = value - end - - # Set OAuth app client_id - # - # @param value [String] 20 character GitHub OAuth app client_id - def client_id=(value) - reset_agent - @client_id = value - end - - # Set OAuth app client_secret - # - # @param value [String] 40 character GitHub OAuth app client_secret - def client_secret=(value) - reset_agent - @client_secret = value - end - - def client_without_redirects(options = {}) - conn_opts = @connection_options - conn_opts[:url] = @api_endpoint - conn_opts[:builder] = @middleware.dup if @middleware - conn_opts[:proxy] = @proxy if @proxy - conn_opts[:ssl] = { verify_mode: @ssl_verify_mode } if @ssl_verify_mode - conn = Faraday.new(conn_opts) do |http| - if basic_authenticated? - http.request(*FARADAY_BASIC_AUTH_KEYS, @login, @password) - elsif token_authenticated? - http.request :authorization, 'token', @access_token - elsif bearer_authenticated? - http.request :authorization, 'Bearer', @bearer_token - end - http.headers['accept'] = options[:accept] if options.key?(:accept) - end - conn.builder.delete(Octokit::Middleware::FollowRedirects) - - conn - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/actions_artifacts.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/actions_artifacts.rb deleted file mode 100644 index d79cdb93..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/actions_artifacts.rb +++ /dev/null @@ -1,71 +0,0 @@ -# frozen_string_literal: true - -module Octokit - class Client - # Methods for the Actions Artifacts API - # - # @see https://developer.github.com/v3/actions/artifacts - module ActionsArtifacts - # List all artifacts for a repository - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # - # @return [Sawyer::Resource] the total count and an array of artifacts - # @see https://developer.github.com/v3/actions/artifacts#list-artifacts-for-a-repository - def repository_artifacts(repo, options = {}) - paginate "#{Repository.path repo}/actions/artifacts", options do |data, last_response| - data.artifacts.concat last_response.data.artifacts - end - end - - # List all artifacts for a workflow run - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param workflow_run_id [Integer] Id of a workflow run - # - # @return [Sawyer::Resource] the total count and an array of artifacts - # @see https://docs.github.com/en/rest/actions/artifacts#list-workflow-run-artifacts - def workflow_run_artifacts(repo, workflow_run_id, options = {}) - paginate "#{Repository.path repo}/actions/runs/#{workflow_run_id}/artifacts", options do |data, last_response| - data.artifacts.concat last_response.data.artifacts - end - end - - # Get an artifact - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param id [Integer] Id of an artifact - # - # @return [Sawyer::Resource] Artifact information - # @see https://docs.github.com/en/rest/actions/artifacts#get-an-artifact - def artifact(repo, id, options = {}) - get "#{Repository.path repo}/actions/artifacts/#{id}", options - end - - # Get a download URL for an artifact - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param id [Integer] Id of an artifact - # - # @return [String] URL to the .zip archive of the artifact - # @see https://docs.github.com/en/rest/actions/artifacts#download-an-artifact - def artifact_download_url(repo, id, options = {}) - url = "#{Repository.path repo}/actions/artifacts/#{id}/zip" - - response = client_without_redirects.head(url, options) - response.headers['Location'] - end - - # Delete an artifact - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param id [Integer] Id of an artifact - # - # @return [Boolean] Return true if the artifact was successfully deleted - # @see https://docs.github.com/en/rest/actions/artifacts#delete-an-artifact - def delete_artifact(repo, id, options = {}) - boolean_from_response :delete, "#{Repository.path repo}/actions/artifacts/#{id}", options - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/actions_secrets.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/actions_secrets.rb deleted file mode 100644 index 1abf2a7f..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/actions_secrets.rb +++ /dev/null @@ -1,161 +0,0 @@ -# frozen_string_literal: true - -module Octokit - class Client - # Methods for the Actions Secrets API - # - # @see https://developer.github.com/v3/actions/secrets/ - module ActionsSecrets - # Get public key for secrets encryption - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @return [Hash] key_id and key - # @see https://developer.github.com/v3/actions/secrets/#get-your-public-key - def get_actions_public_key(repo) - get "#{Repository.path repo}/actions/secrets/public-key" - end - - # Get public key for secrets encryption - # - # @param org [String] A GitHub organization - # @return [Hash] key_id and key - # @see https://developer.github.com/v3/actions/secrets/#get-your-public-key - def get_org_actions_public_key(org) - get "#{Organization.path org}/actions/secrets/public-key" - end - - # List secrets - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @return [Hash] total_count and list of secrets (each item is hash with name, created_at and updated_at) - # @see https://developer.github.com/v3/actions/secrets/#list-secrets-for-a-repository - def list_actions_secrets(repo) - paginate "#{Repository.path repo}/actions/secrets" do |data, last_response| - data.secrets.concat last_response.data.secrets - end - end - - # List org secrets - # - # @param org [String] A GitHub organization - # @return [Hash] total_count and list of secrets (each item is hash with name, created_at and updated_at) - # @see https://developer.github.com/v3/actions/secrets/#list-organization-secrets - def list_org_actions_secrets(org) - paginate "#{Organization.path org}/actions/secrets" do |data, last_response| - data.secrets.concat last_response.data.secrets - end - end - - # Get a secret - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param name [String] Name of secret - # @return [Hash] name, created_at and updated_at - # @see https://developer.github.com/v3/actions/secrets/#get-a-secret - def get_actions_secret(repo, name) - get "#{Repository.path repo}/actions/secrets/#{name}" - end - - # Get an org secret - # - # @param org [String] A GitHub organization - # @param name [String] Name of secret - # @return [Hash] name, created_at and updated_at - # @see https://developer.github.com/v3/actions/secrets/#get-a-secret - def get_org_actions_secret(org, name) - get "#{Organization.path org}/actions/secrets/#{name}" - end - - # Create or update secrets - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param name [String] Name of secret - # @param options [Hash] encrypted_value and key_id - # @see https://developer.github.com/v3/actions/secrets/#create-or-update-a-secret-for-a-repository - def create_or_update_actions_secret(repo, name, options) - put "#{Repository.path repo}/actions/secrets/#{name}", options - end - - # Create or update org secrets - # - # @param org [String] A GitHub organization - # @param name [String] Name of secret - # @param options [Hash] encrypted_value and key_id - # @see https://developer.github.com/v3/actions/secrets/#create-or-update-a-secret - def create_or_update_org_actions_secret(org, name, options) - put "#{Organization.path org}/actions/secrets/#{name}", options - end - - # Delete a secret - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param name [String] Name of secret - # @see https://developer.github.com/v3/actions/secrets/#delete-a-secret-from-a-repository - def delete_actions_secret(repo, name) - boolean_from_response :delete, "#{Repository.path repo}/actions/secrets/#{name}" - end - - # Delete an org secret - # - # @param org [String] A GitHub organization - # @param name [String] Name of secret - # @see https://developer.github.com/v3/actions/secrets/#delete-a-secret - def delete_org_actions_secret(org, name) - boolean_from_response :delete, "#{Organization.path org}/actions/secrets/#{name}" - end - - # Get environment public key for secrets encryption - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param environment [String] Name of environment - # @return [Hash] key_id and key - # @see https://docs.github.com/en/rest/actions/secrets#get-an-environment-public-key - def get_actions_environment_public_key(repo, environment) - get "#{Repository.path repo}/environments/#{environment}/secrets/public-key" - end - - # List environment secrets - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param environment [String] Name of environment - # @return [Hash] total_count and list of secrets (each item is hash with name, created_at and updated_at) - # @see https://developer.github.com/v3/actions/secrets/#list-environment-secrets - def list_actions_environment_secrets(repo, environment) - paginate "#{Repository.path repo}/environments/#{environment}/secrets" do |data, last_response| - data.secrets.concat last_response.data.secrets - end - end - - # Get an environment secret - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param environment [String] Name of environment - # @param name [String] Name of secret - # @return [Hash] name, created_at and updated_at - # @see https://docs.github.com/en/rest/actions/secrets#get-an-environment-secret - def get_actions_environment_secret(repo, environment, name) - get "#{Repository.path repo}/environments/#{environment}/secrets/#{name}" - end - - # Create or update an environment secret - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param environment [String] Name of environment - # @param name [String] Name of secret - # @param options [Hash] encrypted_value and key_id - # @see https://docs.github.com/en/rest/actions/secrets#create-or-update-an-environment-secret - def create_or_update_actions_environment_secret(repo, environment, name, options) - put "#{Repository.path repo}/environments/#{environment}/secrets/#{name}", options - end - - # Delete environment secret - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param environment [String] Name of environment - # @param name [String] Name of secret - # @see https://docs.github.com/en/rest/actions/secrets#delete-an-environment-secret - def delete_actions_environment_secret(repo, environment, name) - boolean_from_response :delete, "#{Repository.path repo}/environments/#{environment}/secrets/#{name}" - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/actions_workflow_jobs.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/actions_workflow_jobs.rb deleted file mode 100644 index d7a34bfe..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/actions_workflow_jobs.rb +++ /dev/null @@ -1,65 +0,0 @@ -# frozen_string_literal: true - -module Octokit - class Client - # Methods for the Actions Workflows jobs API - # - # @see https://docs.github.com/rest/actions/workflow-jobs - module ActionsWorkflowJobs - # Get a job for a workflow run - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param job_id [Integer, String] Id of the job - # - # @return [Sawyer::Resource] Job information - # @see https://docs.github.com/rest/actions/workflow-jobs#get-a-job-for-a-workflow-run - def workflow_run_job(repo, job_id, options = {}) - get "#{Repository.path repo}/actions/jobs/#{job_id}", options - end - - # Download job logs for a workflow run - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param job_id [Integer, String] Id of the job - # - # @return [String] URL to the archived log files of the job - # @see https://docs.github.com/rest/actions/workflow-jobs#download-job-logs-for-a-workflow-run - def workflow_run_job_logs(repo, job_id, options = {}) - url = "#{Repository.path repo}/actions/jobs/#{job_id}/logs" - - response = client_without_redirects.head(url, options) - response.headers['Location'] - end - - # List jobs for a workflow run attempt - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param run_id [Integer, String] Id of the workflow run - # @param attempt_number [Integer, String] Attempt number of the workflow run - # - # @return [Sawyer::Resource] Jobs information - # @see https://docs.github.com/rest/actions/workflow-jobs#list-jobs-for-a-workflow-run-attempt - def workflow_run_attempt_jobs(repo, run_id, attempt_number, options = {}) - paginate "#{Repository.path repo}/actions/runs/#{run_id}/attempts/#{attempt_number}/jobs", options do |data, last_response| - data.jobs.concat last_response.data.jobs - end - end - alias list_workflow_run_attempt_jobs workflow_run_attempt_jobs - - # List jobs for a workflow run - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param run_id [Integer, String] Id of the workflow run - # @option options [String] :filter Optional filtering by a `completed_at` timestamp - # - # @return [Sawyer::Resource] Jobs information - # @see https://docs.github.com/rest/actions/workflow-jobs#list-jobs-for-a-workflow-run - def workflow_run_jobs(repo, run_id, options = {}) - paginate "#{Repository.path repo}/actions/runs/#{run_id}/jobs", options do |data, last_response| - data.jobs.concat last_response.data.jobs - end - end - alias list_workflow_run_jobs workflow_run_jobs - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/actions_workflow_runs.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/actions_workflow_runs.rb deleted file mode 100644 index 6048af0e..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/actions_workflow_runs.rb +++ /dev/null @@ -1,125 +0,0 @@ -# frozen_string_literal: true - -module Octokit - class Client - # Methods for the Actions Workflows runs API - # - # @see https://docs.github.com/rest/actions/workflow-runs - module ActionsWorkflowRuns - # List all runs for a repository workflow - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param workflow [Integer, String] Id or file name of the workflow - # @option options [String] :actor Optional filtering by a user - # @option options [String] :branch Optional filtering by a branch - # @option options [String] :event Optional filtering by the event type - # @option options [String] :status Optional filtering by a status or conclusion - # - # @return [Sawyer::Resource] the total count and an array of workflows - # @see https://developer.github.com/v3/actions/workflow-runs/#list-workflow-runs - def workflow_runs(repo, workflow, options = {}) - paginate "#{Repository.path repo}/actions/workflows/#{workflow}/runs", options do |data, last_response| - data.workflow_runs.concat last_response.data.workflow_runs - end - end - alias list_workflow_runs workflow_runs - - # List all workflow runs for a repository - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @option options [String] :actor Optional filtering by the login of a user - # @option options [String] :branch Optional filtering by a branch - # @option options [String] :event Optional filtering by the event type (e.g. push, pull_request, issue) - # @option options [String] :status Optional filtering by a status or conclusion (e.g. success, completed...) - # - # @return [Sawyer::Resource] the total count and an array of workflows - # @see https://developer.github.com/v3/actions/workflow-runs/#list-repository-workflow-runs - def repository_workflow_runs(repo, options = {}) - paginate "#{Repository.path repo}/actions/runs", options do |data, last_response| - data.workflow_runs.concat last_response.data.workflow_runs - end - end - alias list_repository_workflow_runs repository_workflow_runs - - # Get a workflow run - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param id [Integer] Id of a workflow run - # - # @return [Sawyer::Resource] Run information - # @see https://developer.github.com/v3/actions/workflow-runs/#get-a-workflow-run - def workflow_run(repo, id, options = {}) - get "#{Repository.path repo}/actions/runs/#{id}", options - end - - # Re-runs a workflow run - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param id [Integer] Id of a workflow run - # - # @return [Boolean] Returns true if the re-run request was accepted - # @see https://developer.github.com/v3/actions/workflow-runs/#re-run-a-workflow - def rerun_workflow_run(repo, id, options = {}) - boolean_from_response :post, "#{Repository.path repo}/actions/runs/#{id}/rerun", options - end - - # Cancels a workflow run - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param id [Integer] Id of a workflow run - # - # @return [Boolean] Returns true if the cancellation was accepted - # @see https://developer.github.com/v3/actions/workflow-runs/#cancel-a-workflow-run - def cancel_workflow_run(repo, id, options = {}) - boolean_from_response :post, "#{Repository.path repo}/actions/runs/#{id}/cancel", options - end - - # Deletes a workflow run - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param id [Integer] Id of a workflow run - # - # @return [Boolean] Returns true if the run is deleted - # @see https://docs.github.com/en/rest/reference/actions#delete-a-workflow-run - def delete_workflow_run(repo, id, options = {}) - boolean_from_response :delete, "#{Repository.path repo}/actions/runs/#{id}", options - end - - # Get a download url for archived log files of a workflow run - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param id [Integer] Id of a workflow run - # - # @return [String] URL to the archived log files of the run - # @see https://developer.github.com/v3/actions/workflow-runs/#download-workflow-run-logs - def workflow_run_logs(repo, id, options = {}) - url = "#{Repository.path repo}/actions/runs/#{id}/logs" - - response = client_without_redirects.head(url, options) - response.headers['Location'] - end - - # Delete all log files of a workflow run - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param id [Integer] Id of a workflow run - # - # @return [Boolean] Returns true if the logs are deleted - # @see https://developer.github.com/v3/actions/workflow-runs/#delete-workflow-run-logs - def delete_workflow_run_logs(repo, id, options = {}) - boolean_from_response :delete, "#{Repository.path repo}/actions/runs/#{id}/logs", options - end - - # Get workflow run usage - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param id [Integer] Id of a workflow run - # - # @return [Sawyer::Resource] Run usage - # @see https://developer.github.com/v3/actions/workflow-runs/#get-workflow-run-usage - def workflow_run_usage(repo, id, options = {}) - get "#{Repository.path repo}/actions/runs/#{id}/timing", options - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/actions_workflows.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/actions_workflows.rb deleted file mode 100644 index 48325102..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/actions_workflows.rb +++ /dev/null @@ -1,68 +0,0 @@ -# frozen_string_literal: true - -module Octokit - class Client - # Methods for the Actions Workflows API - # - # @see https://developer.github.com/v3/actions/workflows - module ActionsWorkflows - # Get the workflows in a repository - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # - # @return [Sawyer::Resource] the total count and an array of workflows - # @see https://developer.github.com/v3/actions/workflows/#list-repository-workflows - def workflows(repo, options = {}) - paginate "#{Repository.path repo}/actions/workflows", options do |data, last_response| - data.workflows.concat last_response.data.workflows - end - end - alias list_workflows workflows - - # Get single workflow in a repository - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param id [Integer, String] Id or file name of the workflow - # - # @return [Sawyer::Resource] A single workflow - # @see https://developer.github.com/v3/actions/workflows/#get-a-workflow - def workflow(repo, id, options = {}) - get "#{Repository.path repo}/actions/workflows/#{id}", options - end - - # Create a workflow dispatch event - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param id [Integer, String] Id or file name of the workflow - # @param ref [String] A SHA, branch name, or tag name - # - # @return [Boolean] True if event was dispatched, false otherwise - # @see https://docs.github.com/en/rest/reference/actions#create-a-workflow-dispatch-event - def workflow_dispatch(repo, id, ref, options = {}) - boolean_from_response :post, "#{Repository.path repo}/actions/workflows/#{id}/dispatches", options.merge({ ref: ref }) - end - - # Enable a workflow - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param id [Integer, String] Id or file name of the workflow - # - # @return [Boolean] True if workflow was enabled, false otherwise - # @see https://docs.github.com/en/rest/actions/workflows#enable-a-workflow - def workflow_enable(repo, id, options = {}) - boolean_from_response :put, "#{Repository.path repo}/actions/workflows/#{id}/enable", options - end - - # Disable a workflow - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param id [Integer, String] Id or file name of the workflow - # - # @return [Boolean] True if workflow was disabled, false otherwise - # @see https://docs.github.com/en/rest/actions/workflows#disable-a-workflow - def workflow_disable(repo, id, options = {}) - boolean_from_response :put, "#{Repository.path repo}/actions/workflows/#{id}/disable", options - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/apps.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/apps.rb deleted file mode 100644 index 6464d9cb..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/apps.rb +++ /dev/null @@ -1,247 +0,0 @@ -# frozen_string_literal: true - -module Octokit - class Client - # Methods for the Apps API - module Apps - # Get the authenticated App - # - # @param options [Hash] A customizable set of options - # - # @see https://developer.github.com/v3/apps/#get-the-authenticated-app - # - # @return [Sawyer::Resource] App information - def app(options = {}) - get 'app', options - end - - # Find all installations that belong to an App - # - # @param options [Hash] A customizable set of options - # - # @see https://developer.github.com/v3/apps/#list-installations - # - # @return [Array] the total_count and an array of installations - def find_app_installations(options = {}) - paginate 'app/installations', options - end - alias find_installations find_app_installations - - def find_integration_installations(options = {}) - octokit_warn( - 'Deprecated: Octokit::Client::Apps#find_integration_installations ' \ - 'method is deprecated. Please update your call to use ' \ - 'Octokit::Client::Apps#find_app_installations before the next major ' \ - 'Octokit version update.' - ) - find_app_installations(options) - end - - # Find all installations that are accessible to the authenticated user - # - # @param options [Hash] A customizable set of options - # - # @see https://developer.github.com/v3/apps/installations/#list-installations-for-a-user - # - # @return [Sawyer::Resource] the total_count and an array of installations - def find_user_installations(options = {}) - paginate('user/installations', options) do |data, last_response| - data.installations.concat last_response.data.installations - end - end - - # Get a single installation - # - # @param id [Integer] Installation id - # - # @see https://developer.github.com/v3/apps/#get-an-installation - # - # @return [Sawyer::Resource] Installation information - def installation(id, options = {}) - get "app/installations/#{id}", options - end - - # Create a new installation token - # - # @param installation [Integer] The id of a GitHub App Installation - # @param options [Hash] A customizable set of options - # - # @see https://developer.github.com/v3/apps/#create-a-new-installation-token - # - # @return [] An installation token - def create_app_installation_access_token(installation, options = {}) - post "app/installations/#{installation}/access_tokens", options - end - alias create_installation_access_token create_app_installation_access_token - - def create_integration_installation_access_token(installation, options = {}) - octokit_warn( - 'Deprecated: Octokit::Client::Apps#create_integration_installation_access_token ' \ - 'method is deprecated. Please update your call to use ' \ - 'Octokit::Client::Apps#create_app_installation_access_token before the next major ' \ - 'Octokit version update.' - ) - create_app_installation_access_token(installation, options) - end - - # Enables an app to find the organization's installation information. - # - # @param organization [String] Organization GitHub login - # @param options [Hash] A customizable set of options - # - # @see https://developer.github.com/v3/apps/#get-an-organization-installation - # - # @return [Sawyer::Resource] Installation information - def find_organization_installation(organization, options = {}) - get "#{Organization.path(organization)}/installation", options - end - - # Enables an app to find the repository's installation information. - # - # @param repo [String] A GitHub repository - # @param options [Hash] A customizable set of options - # - # @see https://developer.github.com/v3/apps/#get-a-repository-installation - # - # @return [Sawyer::Resource] Installation information - def find_repository_installation(repo, options = {}) - get "#{Repository.path(repo)}/installation", options - end - - # Enables an app to find the user's installation information. - # - # @param user [String] GitHub user login - # @param options [Hash] A customizable set of options - # - # @see https://developer.github.com/v3/apps/#get-a-user-installation - # - # @return [Sawyer::Resource] Installation information - def find_user_installation(user, options = {}) - get "#{User.path(user)}/installation", options - end - - # List repositories that are accessible to the authenticated installation - # - # @param options [Hash] A customizable set of options - # - # @see https://developer.github.com/v3/apps/installations/#list-repositories - # - # @return [Sawyer::Resource] the total_count and an array of repositories - def list_app_installation_repositories(options = {}) - paginate('installation/repositories', options) do |data, last_response| - data.repositories.concat last_response.data.repositories - end - end - alias list_installation_repos list_app_installation_repositories - - def list_integration_installation_repositories(options = {}) - octokit_warn( - 'Deprecated: Octokit::Client::Apps#list_integration_installation_repositories ' \ - 'method is deprecated. Please update your call to use ' \ - 'Octokit::Client::Apps#list_app_installation_repositories before the next major ' \ - 'Octokit version update.' - ) - list_app_installation_repositories(options) - end - - # Add a single repository to an installation - # - # @param installation [Integer] The id of a GitHub App Installation - # @param repo [Integer] The id of the GitHub repository - # @param options [Hash] A customizable set of options - # - # @see https://developer.github.com/v3/apps/installations/#add-repository-to-installation - # - # @return [Boolean] Success - def add_repository_to_app_installation(installation, repo, options = {}) - boolean_from_response :put, "user/installations/#{installation}/repositories/#{repo}", options - end - alias add_repo_to_installation add_repository_to_app_installation - - def add_repository_to_integration_installation(installation, repo, options = {}) - octokit_warn( - 'Deprecated: Octokit::Client::Apps#add_repository_to_integration_installation ' \ - 'method is deprecated. Please update your call to use ' \ - 'Octokit::Client::Apps#add_repository_to_app_installation before the next major ' \ - 'Octokit version update.' - ) - add_repository_to_app_installation(installation, repo, options) - end - - # Remove a single repository to an installation - # - # @param installation [Integer] The id of a GitHub App Installation - # @param repo [Integer] The id of the GitHub repository - # @param options [Hash] A customizable set of options - # - # @see https://developer.github.com/v3/apps/installations/#remove-repository-from-installation - # - # @return [Boolean] Success - def remove_repository_from_app_installation(installation, repo, options = {}) - boolean_from_response :delete, "user/installations/#{installation}/repositories/#{repo}", options - end - alias remove_repo_from_installation remove_repository_from_app_installation - - def remove_repository_from_integration_installation(installation, repo, options = {}) - octokit_warn( - 'Deprecated: Octokit::Client::Apps#remove_repository_from_integration_installation ' \ - 'method is deprecated. Please update your call to use ' \ - 'Octokit::Client::Apps#remove_repository_from_app_installation before the next major ' \ - 'Octokit version update.' - ) - remove_repository_from_app_installation(installation, repo, options) - end - - # List repositories accessible to the user for an installation - # - # @param installation [Integer] The id of a GitHub App Installation - # @param options [Hash] A customizable set of options - # - # @see https://developer.github.com/v3/apps/installations/#list-repositories-accessible-to-the-user-for-an-installation - # - # @return [Sawyer::Resource] the total_count and an array of repositories - def find_installation_repositories_for_user(installation, options = {}) - paginate("user/installations/#{installation}/repositories", options) do |data, last_response| - data.repositories.concat last_response.data.repositories - end - end - - # Delete an installation and uninstall a GitHub App - # - # @param installation [Integer] The id of a GitHub App Installation - # @param options [Hash] A customizable set of options - # - # @see https://developer.github.com/v3/apps/#delete-an-installation - # - # @return [Boolean] Success - def delete_installation(installation, options = {}) - boolean_from_response :delete, "app/installations/#{installation}", options - end - - # Returns a list of webhook deliveries for the webhook configured for a GitHub App. - # - # @param options [Hash] A customizable set of options - # - # @see https://docs.github.com/en/rest/apps/webhooks#list-deliveries-for-an-app-webhook - # - # @return [Array] an array of hook deliveries - def list_app_hook_deliveries(options = {}) - paginate('app/hook/deliveries', options) do |data, last_response| - data.concat last_response.data - end - end - - # Redeliver a delivery for the webhook configured for a GitHub App. - # - # @param delivery_id [Integer] The id of a GitHub App Hook Delivery - # @param options [Hash] A customizable set of options - # - # @see https://developer.github.com/v3/apps/#redeliver-a-delivery-for-an-app-webhook - # - # @return [Boolean] Success - def deliver_app_hook(delivery_id, options = {}) - boolean_from_response :post, "app/hook/deliveries/#{delivery_id}/attempts", options - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/checks.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/checks.rb deleted file mode 100644 index c22c6be3..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/checks.rb +++ /dev/null @@ -1,200 +0,0 @@ -# frozen_string_literal: true - -module Octokit - class Client - # Methods for the Checks API - # - # @see https://developer.github.com/v3/checks/ - module Checks - # Methods for Check Runs - # - # @see https://developer.github.com/v3/checks/runs/ - - # Create a check run - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param name [String] The name of the check - # @param head_sha [String] The SHA of the commit to check - # @return [Sawyer::Resource] A hash representing the new check run - # @see https://developer.github.com/v3/checks/runs/#create-a-check-run - # @example Create a check run - # check_run = @client.create_check_run("octocat/Hello-World", "my-check", "7638417db6d59f3c431d3e1f261cc637155684cd") - # check_run.name # => "my-check" - # check_run.head_sha # => "7638417db6d59f3c431d3e1f261cc637155684cd" - # check_run.status # => "queued" - def create_check_run(repo, name, head_sha, options = {}) - options[:name] = name - options[:head_sha] = head_sha - - post "#{Repository.path repo}/check-runs", options - end - - # Update a check run - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param id [Integer] The ID of the check run - # @return [Sawyer::Resource] A hash representing the updated check run - # @see https://developer.github.com/v3/checks/runs/#update-a-check-run - # @example Update a check run - # check_run = @client.update_check_run("octocat/Hello-World", 51295429, status: "in_progress") - # check_run.id # => 51295429 - # check_run.status # => "in_progress" - def update_check_run(repo, id, options = {}) - patch "#{Repository.path repo}/check-runs/#{id}", options - end - - # List check runs for a specific ref - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param ref [String] A SHA, branch name, or tag name - # @param options [Hash] A set of optional filters - # @option options [String] :check_name Returns check runs with the specified name - # @option options [String] :status Returns check runs with the specified status - # @option options [String] :filter Filters check runs by their completed_at timestamp - # @return [Sawyer::Resource] A hash representing a collection of check runs - # @see https://developer.github.com/v3/checks/runs/#list-check-runs-for-a-specific-ref - # @example List check runs for a specific ref - # result = @client.check_runs_for_ref("octocat/Hello-World", "7638417db6d59f3c431d3e1f261cc637155684cd", status: "in_progress") - # result.total_count # => 1 - # result.check_runs.count # => 1 - # result.check_runs[0].id # => 51295429 - # result.check_runs[0].status # => "in_progress" - def check_runs_for_ref(repo, ref, options = {}) - paginate "#{Repository.path repo}/commits/#{ref}/check-runs", options do |data, last_response| - data.check_runs.concat last_response.data.check_runs - data.total_count += last_response.data.total_count - end - end - alias list_check_runs_for_ref check_runs_for_ref - - # List check runs in a check suite - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param id [Integer] The ID of the check suite - # @param options [Hash] A set of optional filters - # @option options [String] :check_name Returns check runs with the specified name - # @option options [String] :status Returns check runs with the specified status - # @option options [String] :filter Filters check runs by their completed_at timestamp - # @return [Sawyer::Resource] A hash representing a collection of check runs - # @see https://developer.github.com/v3/checks/runs/#list-check-runs-in-a-check-suite - # @example List check runs in a check suite - # result = @client.check_runs_for_check_suite("octocat/Hello-World", 50440400, status: "in_progress") - # result.total_count # => 1 - # result.check_runs.count # => 1 - # result.check_runs[0].check_suite.id # => 50440400 - # result.check_runs[0].status # => "in_progress" - def check_runs_for_check_suite(repo, id, options = {}) - paginate "#{Repository.path repo}/check-suites/#{id}/check-runs", options do |data, last_response| - data.check_runs.concat last_response.data.check_runs - data.total_count += last_response.data.total_count - end - end - alias list_check_runs_for_check_suite check_runs_for_check_suite - - # Get a single check run - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param id [Integer] The ID of the check run - # @return [Sawyer::Resource] A hash representing the check run - # @see https://developer.github.com/v3/checks/runs/#get-a-single-check-run - def check_run(repo, id, options = {}) - get "#{Repository.path repo}/check-runs/#{id}", options - end - - # List annotations for a check run - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param id [Integer] The ID of the check run - # @return [Array] An array of hashes representing check run annotations - # @see https://developer.github.com/v3/checks/runs/#list-annotations-for-a-check-run - # @example List annotations for a check run - # annotations = @client.check_run_annotations("octocat/Hello-World", 51295429) - # annotations.count # => 1 - # annotations[0].path # => "README.md" - # annotations[0].message # => "Looks good!" - def check_run_annotations(repo, id, options = {}) - paginate "#{Repository.path repo}/check-runs/#{id}/annotations", options - end - - # Methods for Check Suites - # - # @see https://developer.github.com/v3/checks/suites/ - - # Get a single check suite - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param id [Integer] The ID of the check suite - # @return [Sawyer::Resource] A hash representing the check suite - # @see https://developer.github.com/v3/checks/suites/#get-a-single-check-suite - def check_suite(repo, id, options = {}) - get "#{Repository.path repo}/check-suites/#{id}", options - end - - # List check suites for a specific ref - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param ref [String] A SHA, branch name, or tag name - # @param options [Hash] A set of optional filters - # @option options [Integer] :app_id Filters check suites by GitHub App id - # @option options [String] :check_name Filters checks suites by the name of the check run - # @return [Sawyer::Resource] A hash representing a collection of check suites - # @see https://developer.github.com/v3/checks/suites/#list-check-suites-for-a-specific-ref - # @example List check suites for a specific ref - # result = @client.check_suites_for_ref("octocat/Hello-World", "7638417db6d59f3c431d3e1f261cc637155684cd", app_id: 76765) - # result.total_count # => 1 - # result.check_suites.count # => 1 - # result.check_suites[0].id # => 50440400 - # result.check_suites[0].app.id # => 76765 - def check_suites_for_ref(repo, ref, options = {}) - paginate "#{Repository.path repo}/commits/#{ref}/check-suites", options do |data, last_response| - data.check_suites.concat last_response.data.check_suites - data.total_count += last_response.data.total_count - end - end - alias list_check_suites_for_ref check_suites_for_ref - - # Set preferences for check suites on a repository - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param options [Hash] Preferences to set - # @return [Sawyer::Resource] A hash representing the repository's check suite preferences - # @see https://developer.github.com/v3/checks/suites/#set-preferences-for-check-suites-on-a-repository - # @example Set preferences for check suites on a repository - # result = @client.set_check_suite_preferences("octocat/Hello-World", auto_trigger_checks: [{ app_id: 76765, setting: false }]) - # result.preferences.auto_trigger_checks.count # => 1 - # result.preferences.auto_trigger_checks[0].app_id # => 76765 - # result.preferences.auto_trigger_checks[0].setting # => false - # result.repository.full_name # => "octocat/Hello-World" - def set_check_suite_preferences(repo, options = {}) - patch "#{Repository.path repo}/check-suites/preferences", options - end - - # Create a check suite - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param head_sha [String] The SHA of the commit to check - # @return [Sawyer::Resource] A hash representing the new check suite - # @see https://developer.github.com/v3/checks/suites/#create-a-check-suite - # @example Create a check suite - # check_suite = @client.create_check_suite("octocat/Hello-World", "7638417db6d59f3c431d3e1f261cc637155684cd") - # check_suite.head_sha # => "7638417db6d59f3c431d3e1f261cc637155684cd" - # check_suite.status # => "queued" - def create_check_suite(repo, head_sha, options = {}) - options[:head_sha] = head_sha - - post "#{Repository.path repo}/check-suites", options - end - - # Rerequest check suite - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param id [Integer] The ID of the check suite - # @return [Boolean] True if successful, raises an error otherwise - # @see https://developer.github.com/v3/checks/suites/#rerequest-check-suite - def rerequest_check_suite(repo, id, options = {}) - post "#{Repository.path repo}/check-suites/#{id}/rerequest", options - true - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/code_scanning.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/code_scanning.rb deleted file mode 100644 index 9b51bed2..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/code_scanning.rb +++ /dev/null @@ -1,53 +0,0 @@ -# frozen_string_literal: true - -require 'base64' -require 'tempfile' -require 'zlib' - -module Octokit - class Client - # Methods for the code scanning alerts API - # - # @see https://docs.github.com/rest/code-scanning - module CodeScanning - # Uploads SARIF data containing the results of a code scanning analysis - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param file [String] Path to the SARIF file to upload - # @param sha [String] The SHA of the commit to which the analysis you are uploading relates - # @param ref [String] The full Git reference, formatted as `refs/heads/`, `refs/pull//merge`, or `refs/pull//head` - # - # @return [Sawyer::Resource] SARIF upload information - # @see https://docs.github.com/rest/code-scanning#upload-an-analysis-as-sarif-data - def upload_sarif_data(repo, file, sha, ref, options = {}) - options[:sarif] = compress_sarif_data(file) - options[:commit_sha] = sha - options[:ref] = ref - - post "#{Repository.path repo}/code-scanning/sarifs", options - end - - # Gets information about a SARIF upload - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param sarif_id [String] The SARIF ID obtained after uploading - # - # @return [Sawyer::Resource] SARIF upload information - # @see https://docs.github.com/rest/code-scanning#get-information-about-a-sarif-upload - def get_sarif_upload_information(repo, sarif_id, options = {}) - get "#{Repository.path repo}/code-scanning/sarifs/#{sarif_id}", options - end - - private - - def compress_sarif_data(file) - Tempfile.create('sarif.gz') do |tempfile| - Zlib::GzipWriter.open(tempfile) do |gz_file| - gz_file.write File.binread(file) - end - Base64.strict_encode64(tempfile.read) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/codespaces_secrets.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/codespaces_secrets.rb deleted file mode 100644 index 08fa2f5b..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/codespaces_secrets.rb +++ /dev/null @@ -1,108 +0,0 @@ -# frozen_string_literal: true - -module Octokit - class Client - # Methods for the Codespaces Secrets API - # - # @see https://docs.github.com/en/rest/codespaces/ - module CodespacesSecrets - # Get public key for secrets encryption - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @return [Hash] key_id and key - # @see https://docs.github.com/en/rest/codespaces/repository-secrets#get-a-repository-public-key - def get_codespaces_public_key(repo) - get "#{Repository.path repo}/codespaces/secrets/public-key" - end - - # Get public key for secrets encryption - # - # @param org [String] A GitHub organization - # @return [Hash] key_id and key - # @see https://docs.github.com/en/rest/codespaces/organization-secrets?apiVersion=2022-11-28#get-an-organization-public-key - def get_org_codespaces_public_key(org) - get "#{Organization.path org}/codespaces/secrets/public-key" - end - - # List secrets - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @return [Hash] total_count and list of secrets (each item is hash with name, created_at and updated_at) - # @see https://docs.github.com/en/rest/codespaces/repository-secrets?apiVersion=2022-11-28#list-repository-secrets - def list_codespaces_secrets(repo) - paginate "#{Repository.path repo}/codespaces/secrets" do |data, last_response| - data.secrets.concat last_response.data.secrets - end - end - - # List org secrets - # - # @param org [String] A GitHub organization - # @return [Hash] total_count and list of secrets (each item is hash with name, created_at and updated_at) - # @see https://docs.github.com/en/rest/codespaces/organization-secrets?apiVersion=2022-11-28#list-organization-secrets - def list_org_codespaces_secrets(org) - paginate "#{Organization.path org}/codespaces/secrets" do |data, last_response| - data.secrets.concat last_response.data.secrets - end - end - - # Get a secret - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param name [String] Name of secret - # @return [Hash] name, created_at, updated_at, and visibility - # @see https://docs.github.com/en/rest/codespaces/repository-secrets?apiVersion=2022-11-28#get-a-repository-secret - def get_codespaces_secret(repo, name) - get "#{Repository.path repo}/codespaces/secrets/#{name}" - end - - # Get an org secret - # - # @param org [String] A GitHub organization - # @param name [String] Name of secret - # @return [Hash] name, created_at, updated_at, and visibility - # @see https://docs.github.com/en/rest/codespaces/organization-secrets?apiVersion=2022-11-28#get-an-organization-secret - def get_org_codespaces_secret(org, name) - get "#{Organization.path org}/codespaces/secrets/#{name}" - end - - # Create or update secrets - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param name [String] Name of secret - # @param options [Hash] encrypted_value and key_id - # @see https://docs.github.com/en/rest/codespaces/repository-secrets?apiVersion=2022-11-28#create-or-update-a-repository-secret - def create_or_update_codespaces_secret(repo, name, options) - put "#{Repository.path repo}/codespaces/secrets/#{name}", options - end - - # Create or update org secrets - # - # @param org [String] A GitHub organization - # @param name [String] Name of secret - # @param options [Hash] encrypted_value and key_id - # @see https://docs.github.com/en/rest/codespaces/organization-secrets?apiVersion=2022-11-28#create-or-update-an-organization-secret - def create_or_update_org_codespaces_secret(org, name, options) - put "#{Organization.path org}/codespaces/secrets/#{name}", options - end - - # Delete a secret - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param name [String] Name of secret - # @see https://docs.github.com/en/rest/codespaces/repository-secrets?apiVersion=2022-11-28#delete-a-repository-secret - def delete_codespaces_secret(repo, name) - boolean_from_response :delete, "#{Repository.path repo}/codespaces/secrets/#{name}" - end - - # Delete an org secret - # - # @param org [String] A GitHub organization - # @param name [String] Name of secret - # @see https://docs.github.com/en/rest/codespaces/organization-secrets?apiVersion=2022-11-28#delete-an-organization-secret - def delete_org_codespaces_secret(org, name) - boolean_from_response :delete, "#{Organization.path org}/codespaces/secrets/#{name}" - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/commit_branches.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/commit_branches.rb deleted file mode 100644 index fb060dbe..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/commit_branches.rb +++ /dev/null @@ -1,20 +0,0 @@ -# frozen_string_literal: true - -module Octokit - class Client - # Methods for the Branches for HEAD API - # - # @see https://developer.github.com/v3/repos/commits/ - module CommitBranches - # List branches for a single HEAD commit - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param sha [String] The SHA of the commit whose branches will be fetched - # @return [Array] List of branches - # @see https://developer.github.com/v3/repos/commits/#list-branches-for-head-commit - def commit_branches(repo, sha, options = {}) - paginate "#{Repository.path repo}/commits/#{sha}/branches-where-head", options - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/commit_comments.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/commit_comments.rb deleted file mode 100644 index 36af5382..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/commit_comments.rb +++ /dev/null @@ -1,95 +0,0 @@ -# frozen_string_literal: true - -module Octokit - class Client - # Methods for the Commit Comments API - # - # @see https://developer.github.com/v3/repos/comments/ - module CommitComments - # List all commit comments - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @return [Array] List of commit comments - # @see https://developer.github.com/v3/repos/comments/#list-commit-comments-for-a-repository - def list_commit_comments(repo, options = {}) - paginate "#{Repository.path repo}/comments", options - end - - # List comments for a single commit - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param sha [String] The SHA of the commit whose comments will be fetched - # @return [Array] List of commit comments - # @see https://developer.github.com/v3/repos/comments/#list-comments-for-a-single-commit - def commit_comments(repo, sha, options = {}) - paginate "#{Repository.path repo}/commits/#{sha}/comments", options - end - - # Get a single commit comment - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param id [String] The ID of the comment to fetch - # @return [Sawyer::Resource] Commit comment - # @see https://developer.github.com/v3/repos/comments/#get-a-single-commit-comment - def commit_comment(repo, id, options = {}) - get "#{Repository.path repo}/comments/#{id}", options - end - - # Create a commit comment - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param sha [String] Sha of the commit to comment on - # @param body [String] Message - # @param path [String] Relative path of file to comment on - # @param line [Integer] Line number in the file to comment on - # @param position [Integer] Line index in the diff to comment on - # @return [Sawyer::Resource] Commit comment - # @see https://developer.github.com/v3/repos/comments/#create-a-commit-comment - # @example Create a commit comment - # comment = Octokit.create_commit_comment("octocat/Hello-World", "827efc6d56897b048c772eb4087f854f46256132", "My comment message", "README.md", 10, 1) - # comment.commit_id # => "827efc6d56897b048c772eb4087f854f46256132" - # comment.id # => 54321 - # comment.body # => "My comment message" - # comment.path # => "README.md" - # comment.line # => 10 - # comment.position # => 1 - def create_commit_comment(repo, sha, body, path = nil, line = nil, position = nil, options = {}) - params = { - body: body, - path: path, - line: line, - position: position - } - post "#{Repository.path repo}/commits/#{sha}/comments", options.merge(params) - end - - # Update a commit comment - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param id [String] The ID of the comment to update - # @param body [String] Message - # @return [Sawyer::Resource] Updated commit comment - # @see https://developer.github.com/v3/repos/comments/#update-a-commit-comment - # @example Update a commit comment - # comment = Octokit.update_commit_comment("octocat/Hello-World", "860296", "Updated commit comment") - # comment.id # => 860296 - # comment.body # => "Updated commit comment" - def update_commit_comment(repo, id, body, options = {}) - params = { - body: body - } - patch "#{Repository.path repo}/comments/#{id}", options.merge(params) - end - - # Delete a commit comment - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param id [String] The ID of the comment to delete - # @return [Boolean] Success - # @see https://developer.github.com/v3/repos/comments/#delete-a-commit-comment - def delete_commit_comment(repo, id, options = {}) - boolean_from_response :delete, "#{Repository.path repo}/comments/#{id}", options - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/commit_pulls.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/commit_pulls.rb deleted file mode 100644 index 1e5a16f5..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/commit_pulls.rb +++ /dev/null @@ -1,20 +0,0 @@ -# frozen_string_literal: true - -module Octokit - class Client - # Methods for the Commit Pulls API - # - # @see https://developer.github.com/v3/repos/comments/ - module CommitPulls - # List pulls for a single commit - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param sha [String] The SHA of the commit whose pulls will be fetched - # @return [Array] List of commit pulls - # @see https://developer.github.com/v3/repos/commits/#list-pull-requests-associated-with-commit - def commit_pulls(repo, sha, options = {}) - paginate "#{Repository.path repo}/commits/#{sha}/pulls", options - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/commits.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/commits.rb deleted file mode 100644 index fa73b7e2..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/commits.rb +++ /dev/null @@ -1,236 +0,0 @@ -# frozen_string_literal: true - -require 'date' - -module Octokit - class Client - # Methods for the Commits API - # - # @see https://developer.github.com/v3/repos/commits/ - module Commits - # List commits - # - # @overload commits(repo, sha_or_branch, options = {}) - # @deprecated - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param sha_or_branch [String] A commit SHA or branch name - # @param options [String] :sha Commit SHA or branch name from which to start the list - # @overload commits(repo, options = {}) - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param options [String] :sha Commit SHA or branch name from which to start the list - # @return [Array] An array of hashes representing commits - # @see https://developer.github.com/v3/repos/commits/#list-commits-on-a-repository - def commits(*args) - arguments = Octokit::RepoArguments.new(args) - sha_or_branch = arguments.pop - arguments.options[:sha] = sha_or_branch if sha_or_branch - paginate "#{Repository.new(arguments.repo).path}/commits", arguments.options - end - alias list_commits commits - - # Get commits after a specified date - # - # @overload commits_since(repo, date, options = {}) - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param date [String] Date on which we want to compare - # @param options [String] :sha Commit SHA or branch name from which to start the list - # @overload commits_since(repo, date, sha_or_branch, options = {}) - # @deprecated - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param date [String] Date on which we want to compare - # @param sha_or_branch [String] A commit SHA or branch name - # @param options [String] :sha Commit SHA or branch name from which to start the list - # @return [Array] An array of hashes representing commits - # @see https://developer.github.com/v3/repos/commits/#list-commits-on-a-repository - # @example - # Octokit.commits_since('octokit/octokit.rb', '2012-10-01') - def commits_since(*args) - arguments = Octokit::RepoArguments.new(args) - date = parse_date(arguments.shift) - params = arguments.options - params.merge!(since: iso8601(date)) - sha_or_branch = arguments.pop - params[:sha] = sha_or_branch if sha_or_branch - commits(arguments.repo, params) - end - - # Get commits before a specified date - # - # @overload commits_before(repo, date, options = {}) - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param date [String] Date on which we want to compare - # @overload commits_before(repo, date, sha_or_branch, options = {}) - # @deprecated - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param date [String] Date on which we want to compare - # @param sha_or_branch [String] Commit SHA or branch name from which to start the list - # @return [Array] An array of hashes representing commits - # @see https://developer.github.com/v3/repos/commits/#list-commits-on-a-repository - # @example - # Octokit.commits_before('octokit/octokit.rb', '2012-10-01') - def commits_before(*args) - arguments = Octokit::RepoArguments.new(args) - date = parse_date(arguments.shift) - params = arguments.options - params.merge!(until: iso8601(date)) - sha_or_branch = arguments.pop - params[:sha] = sha_or_branch if sha_or_branch - commits(arguments.repo, params) - end - - # Get commits on a specified date - # - # @overload commits_on(repo, date, options = {}) - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param date [String] Date on which we want to compare - # @overload commits_on(repo, date, sha_or_branch, options = {}) - # @deprecated - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param date [String] Date on which we want to compare - # @param sha_or_branch [String] Commit SHA or branch name from which to start the list - # @return [Array] An array of hashes representing commits - # @see https://developer.github.com/v3/repos/commits/#list-commits-on-a-repository - # @example - # Octokit.commits_on('octokit/octokit.rb', '2012-10-01') - def commits_on(*args) - arguments = Octokit::RepoArguments.new(args) - date = parse_date(arguments.shift) - params = arguments.options - end_date = date + 1 - params.merge!(since: iso8601(date), until: iso8601(end_date)) - sha_or_branch = arguments.pop - params[:sha] = sha_or_branch if sha_or_branch - commits(arguments.repo, params) - end - - # Get commits made between two nominated dates - # - # @overload commits_between(repo, start_date, end_date, options = {}) - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param start_date [String] Start Date on which we want to compare - # @param end_date [String] End Date on which we want to compare - # @overload commits_between(repo, start_date, end_date, sha_or_branch, options = {}) - # @deprecated - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param start_date [String] Start Date on which we want to compare - # @param end_date [String] End Date on which we want to compare - # @param sha_or_branch [String] Commit SHA or branch name from which to start the list - # @return [Array] An array of hashes representing commits - # @see https://developer.github.com/v3/repos/commits/#list-commits-on-a-repository - # @example - # Octokit.commits_between('octokit/octokit.rb', '2012-10-01', '2012-11-01') - def commits_between(*args) - arguments = Octokit::RepoArguments.new(args) - date = parse_date(arguments.shift) - end_date = parse_date(arguments.shift) - if date > end_date - raise ArgumentError, "Start date #{date} does not precede #{end_date}" - end - - params = arguments.options - params.merge!(since: iso8601(date), until: iso8601(end_date)) - sha_or_branch = arguments.pop - params[:sha] = sha_or_branch if sha_or_branch - commits(arguments.repo, params) - end - - # Get a single commit - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param sha [String] The SHA of the commit to fetch - # @return [Sawyer::Resource] A hash representing the commit - # @see https://developer.github.com/v3/repos/commits/#get-a-single-commit - def commit(repo, sha, options = {}) - get "#{Repository.path repo}/commits/#{sha}", options - end - - # Get a detailed git commit - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param sha [String] The SHA of the commit to fetch - # @return [Sawyer::Resource] A hash representing the commit - # @see https://developer.github.com/v3/git/commits/#get-a-commit - def git_commit(repo, sha, options = {}) - get "#{Repository.path repo}/git/commits/#{sha}", options - end - - # Create a commit - # - # Optionally pass author and committer hashes in options - # if you'd like manual control over those parameters. If absent, details will be - # inferred from the authenticated user. See GitHub's documentation - # for details about how to format committer identities. - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param message [String] The commit message - # @param tree [String] The SHA of the tree object the new commit will point to - # @param parents [String, Array] One SHA (for a normal commit) or an array of SHAs (for a merge) of the new commit's parent commits. If ommitted or empty, a root commit will be created - # @return [Sawyer::Resource] A hash representing the new commit - # @see https://developer.github.com/v3/git/commits/#create-a-commit - # @example Create a commit - # commit = Octokit.create_commit("octocat/Hello-World", "My commit message", "827efc6d56897b048c772eb4087f854f46256132", "7d1b31e74ee336d15cbd21741bc88a537ed063a0") - # commit.sha # => "7638417db6d59f3c431d3e1f261cc637155684cd" - # commit.tree.sha # => "827efc6d56897b048c772eb4087f854f46256132" - # commit.message # => "My commit message" - # commit.committer # => { "name" => "Wynn Netherland", "email" => "wynn@github.com", ... } - def create_commit(repo, message, tree, parents = nil, options = {}) - params = { message: message, tree: tree } - params[:parents] = [parents].flatten if parents - post "#{Repository.path repo}/git/commits", options.merge(params) - end - - # Compare two commits - # - # When using auto_pagination, commits from all pages will be concatenated - # into the commits attribute of the first page's response. - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param start [String] The sha of the starting commit - # @param endd [String] The sha of the ending commit - # @return [Sawyer::Resource] A hash representing the comparison - # @see https://developer.github.com/v3/repos/commits/#compare-two-commits - def compare(repo, start, endd, options = {}) - paginate "#{Repository.path repo}/compare/#{start}...#{endd}", options do |data, last_response| - data.commits.concat last_response.data.commits - end - end - - # Merge a branch or sha - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param base [String] The name of the base branch to merge into - # @param head [String] The branch or SHA1 to merge - # @option options [String] :commit_message The commit message for the merge - # @return [Sawyer::Resource] A hash representing the comparison - # @see https://developer.github.com/v3/repos/merging/#perform-a-merge - def merge(repo, base, head, options = {}) - params = { - base: base, - head: head - }.merge(options) - post "#{Repository.path repo}/merges", params - end - - protected - - def iso8601(date) - if date.respond_to?(:iso8601) - date.iso8601 - else - date.strftime('%Y-%m-%dT%H:%M:%S%Z') - end - end - - # Parses the given string representation of a date, throwing a meaningful exception - # (containing the date that failed to parse) in case of failure. - # - # @param date [String] String representation of a date - # @return [DateTime] - def parse_date(date) - date = DateTime.parse(date.to_s) - rescue ArgumentError - raise ArgumentError, "#{date} is not a valid date" - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/community_profile.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/community_profile.rb deleted file mode 100644 index e50b47c4..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/community_profile.rb +++ /dev/null @@ -1,21 +0,0 @@ -# frozen_string_literal: true - -module Octokit - class Client - # Methods for the Community Profile API - # - # @see https://developer.github.com/v3/repos/community/ - module CommunityProfile - # Get community profile metrics for a repository - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @return [Sawyer::Resource] Community profile metrics - # @see https://developer.github.com/v3/repos/community/#retrieve-community-profile-metrics - # @example Get community profile metrics for octokit/octokit.rb - # @client.community_profile('octokit/octokit.rb') - def community_profile(repo, options = {}) - get "#{Repository.path repo}/community/profile", options - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/contents.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/contents.rb deleted file mode 100644 index cf7ceeb1..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/contents.rb +++ /dev/null @@ -1,167 +0,0 @@ -# frozen_string_literal: true - -require 'base64' - -module Octokit - class Client - # Methods for the Repo Contents API - # - # @see https://developer.github.com/v3/repos/contents/ - module Contents - # Receive the default Readme for a repository - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @option options [String] :ref name of the Commit/Branch/Tag. Defaults to “master”. - # @return [Sawyer::Resource] The detail of the readme - # @see https://developer.github.com/v3/repos/contents/#get-the-readme - # @example Get the readme file for a repo - # Octokit.readme("octokit/octokit.rb") - # @example Get the readme file for a particular branch of the repo - # Octokit.readme("octokit/octokit.rb", :query => {:ref => 'some-other-branch'}) - def readme(repo, options = {}) - get "#{Repository.path repo}/readme", options - end - - # Receive a listing of a repository folder or the contents of a file - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @option options [String] :path A folder or file path - # @option options [String] :ref name of the Commit/Branch/Tag. Defaults to “master”. - # @return [Sawyer::Resource] The contents of a file or list of the files in the folder - # @see https://developer.github.com/v3/repos/contents/#get-contents - # @example List the contents of lib/octokit.rb - # Octokit.contents("octokit/octokit.rb", :path => 'lib/octokit.rb') - # @example Lists the contents of lib /octokit.rb on a particular branch - # Octokit.contents("octokit/octokit.rb", :path => 'lib/octokit.rb', :query => {:ref => 'some-other-branch'}) - def contents(repo, options = {}) - options = options.dup - repo_path = options.delete :path - url = "#{Repository.path repo}/contents/#{repo_path}" - get url, options - end - alias content contents - - # Add content to a repository - # - # @overload create_contents(repo, path, message, content = nil, options = {}) - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param path [String] A path for the new content - # @param message [String] A commit message for adding the content - # @param optional content [String] The content for the file - # @option options [String] :branch The branch on which to add the content - # @option options [String] :file Path or Ruby File object for content - # @return [Sawyer::Resource] The contents and commit info for the addition - # @see https://developer.github.com/v3/repos/contents/#create-a-file - # @example Add content at lib/octokit.rb - # Octokit.create_contents("octokit/octokit.rb", - # "lib/octokit.rb", - # "Adding content", - # "File content", - # :branch => "my-new-feature") - def create_contents(*args) - args = args.map { |item| item&.dup } - options = args.last.is_a?(Hash) ? args.pop : {} - repo = args.shift - path = args.shift - message = args.shift - content = args.shift - if content.nil? && file = options.delete(:file) - case file - when String - if File.exist?(file) - file = File.open(file, 'r') - content = file.read - file.close - end - when File, Tempfile - content = file.read - file.close - end - end - raise ArgumentError, 'content or :file option required' if content.nil? - - options[:content] = Base64.strict_encode64(content) - options[:message] = message - url = "#{Repository.path repo}/contents/#{path}" - put url, options - end - alias create_content create_contents - alias add_content create_contents - alias add_contents create_contents - - # Update content in a repository - # - # @overload update_contents(repo, path, message, sha, content = nil, options = {}) - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param path [String] A path for the content to update - # @param message [String] A commit message for updating the content - # @param sha [String] The _blob sha_ of the content to update - # @param content [String] The content for the file - # @option options [String] :branch The branch on which to update the content - # @option options [String] :file Path or Ruby File object for content - # @return [Sawyer::Resource] The contents and commit info for the update - # @see https://developer.github.com/v3/repos/contents/#update-a-file - # @example Update content at lib/octokit.rb - # Octokit.update_contents("octokit/octokit.rb", - # "lib/octokit.rb", - # "Updating content", - # "7eb95f97e1a0636015df3837478d3f15184a5f49", - # "File content", - # :branch => "my-new-feature") - def update_contents(*args) - options = args.last.is_a?(Hash) ? args.pop : {} - repo = args.shift - path = args.shift - message = args.shift - sha = args.shift - content = args.shift - options.merge!(sha: sha) - create_contents(repo, path, message, content, options) - end - alias update_content update_contents - - # Delete content in a repository - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param path [String] A path for the content to delete - # @param message [String] A commit message for deleting the content - # @param sha [String] The _blob sha_ of the content to delete - # @option options [String] :branch The branch on which to delete the content - # @return [Sawyer::Resource] The commit info for the delete - # @see https://developer.github.com/v3/repos/contents/#delete-a-file - # @example Delete content at lib/octokit.rb - # Octokit.delete_contents("octokit/octokit.rb", - # "lib/octokit.rb", - # "Deleting content", - # "7eb95f97e1a0636015df3837478d3f15184a5f49", - # :branch => "my-new-feature") - def delete_contents(repo, path, message, sha, options = {}) - options[:message] = message - options[:sha] = sha - url = "#{Repository.path repo}/contents/#{path}" - delete url, options - end - alias delete_content delete_contents - alias remove_content delete_contents - alias remove_contents delete_contents - - # This method will provide a URL to download a tarball or zipball archive for a repository. - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository. - # @option options format [String] Either tarball (default) or zipball. - # @option options [String] :ref Optional valid Git reference, defaults to master. - # @return [String] Location of the download - # @see https://developer.github.com/v3/repos/contents/#get-archive-link - # @example Get archive link for octokit/octokit.rb - # Octokit.archive_link("octokit/octokit.rb") - def archive_link(repo, options = {}) - repo_ref = ERB::Util.url_encode(options.delete(:ref)) - format = (options.delete :format) || 'tarball' - url = "#{Repository.path repo}/#{format}/#{repo_ref}" - - response = client_without_redirects.head(url, options) - response.headers['Location'] - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/dependabot_secrets.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/dependabot_secrets.rb deleted file mode 100644 index 5ac765a5..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/dependabot_secrets.rb +++ /dev/null @@ -1,108 +0,0 @@ -# frozen_string_literal: true - -module Octokit - class Client - # Methods for the dependabot Secrets API - # - # @see https://docs.github.com/en/rest/dependabot/ - module DependabotSecrets - # Get public key for secrets encryption - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @return [Hash] key_id and key - # @see https://docs.github.com/en/rest/dependabot/repository-secrets#get-a-repository-public-key - def get_dependabot_public_key(repo) - get "#{Repository.path repo}/dependabot/secrets/public-key" - end - - # Get public key for secrets encryption - # - # @param org [String] A GitHub organization - # @return [Hash] key_id and key - # @see https://docs.github.com/en/rest/dependabot/organization-secrets?apiVersion=2022-11-28#get-an-organization-public-key - def get_org_dependabot_public_key(org) - get "#{Organization.path org}/dependabot/secrets/public-key" - end - - # List secrets - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @return [Hash] total_count and list of secrets (each item is hash with name, created_at and updated_at) - # @see https://docs.github.com/en/rest/dependabot/repository-secrets?apiVersion=2022-11-28#list-repository-secrets - def list_dependabot_secrets(repo) - paginate "#{Repository.path repo}/dependabot/secrets" do |data, last_response| - data.secrets.concat last_response.data.secrets - end - end - - # List org secrets - # - # @param org [String] A GitHub organization - # @return [Hash] total_count and list of secrets (each item is hash with name, created_at and updated_at) - # @see https://docs.github.com/en/rest/dependabot/organization-secrets?apiVersion=2022-11-28#list-organization-secrets - def list_org_dependabot_secrets(org) - paginate "#{Organization.path org}/dependabot/secrets" do |data, last_response| - data.secrets.concat last_response.data.secrets - end - end - - # Get a secret - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param name [String] Name of secret - # @return [Hash] name, created_at, updated_at, and visibility - # @see https://docs.github.com/en/rest/dependabot/repository-secrets?apiVersion=2022-11-28#get-a-repository-secret - def get_dependabot_secret(repo, name) - get "#{Repository.path repo}/dependabot/secrets/#{name}" - end - - # Get an org secret - # - # @param org [String] A GitHub organization - # @param name [String] Name of secret - # @return [Hash] name, created_at, updated_at, and visibility - # @see https://docs.github.com/en/rest/dependabot/organization-secrets?apiVersion=2022-11-28#get-an-organization-secret - def get_org_dependabot_secret(org, name) - get "#{Organization.path org}/dependabot/secrets/#{name}" - end - - # Create or update secrets - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param name [String] Name of secret - # @param options [Hash] encrypted_value and key_id - # @see https://docs.github.com/en/rest/dependabot/repository-secrets?apiVersion=2022-11-28#create-or-update-a-repository-secret - def create_or_update_dependabot_secret(repo, name, options) - put "#{Repository.path repo}/dependabot/secrets/#{name}", options - end - - # Create or update org secrets - # - # @param org [String] A GitHub organization - # @param name [String] Name of secret - # @param options [Hash] encrypted_value and key_id - # @see https://docs.github.com/en/rest/dependabot/organization-secrets?apiVersion=2022-11-28#create-or-update-an-organization-secret - def create_or_update_org_dependabot_secret(org, name, options) - put "#{Organization.path org}/dependabot/secrets/#{name}", options - end - - # Delete a secret - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param name [String] Name of secret - # @see https://docs.github.com/en/rest/dependabot/repository-secrets?apiVersion=2022-11-28#delete-a-repository-secret - def delete_dependabot_secret(repo, name) - boolean_from_response :delete, "#{Repository.path repo}/dependabot/secrets/#{name}" - end - - # Delete an org secret - # - # @param org [String] A GitHub organization - # @param name [String] Name of secret - # @see https://docs.github.com/en/rest/dependabot/organization-secrets?apiVersion=2022-11-28#delete-an-organization-secret - def delete_org_dependabot_secret(org, name) - boolean_from_response :delete, "#{Organization.path org}/dependabot/secrets/#{name}" - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/deployments.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/deployments.rb deleted file mode 100644 index 73026090..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/deployments.rb +++ /dev/null @@ -1,82 +0,0 @@ -# frozen_string_literal: true - -module Octokit - class Client - # Methods for the Deployments API - # - # @see https://developer.github.com/v3/repos/commits/deployments/ - module Deployments - # Fetch a single deployment for a repository - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param deployment_id [Integer, String, Repository, Hash] A GitHub repository - # @return A single deployment - # @see https://developer.github.com/v3/repos/deployments/#get-a-single-deployment - def deployment(repo, deployment_id, options = {}) - get("#{Repository.path repo}/deployments/#{deployment_id}", options) - end - - # List all deployments for a repository - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @return [Array] A list of deployments - # @see https://developer.github.com/v3/repos/deployments/#list-deployments - def deployments(repo, options = {}) - paginate("#{Repository.path repo}/deployments", options) - end - alias list_deployments deployments - - # Create a deployment for a ref - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param ref [String] The ref to deploy - # @option options [String] :task Used by the deployment system to allow different execution paths. Defaults to "deploy". - # @option options [String] :payload Meta info about the deployment - # @option options [Boolean] :auto_merge Optional parameter to merge the default branch into the requested deployment branch if necessary. Default: true - # @option options [Array] :required_contexts Optional array of status contexts verified against commit status checks. - # @option options [String] :environment Optional name for the target deployment environment (e.g., production, staging, qa). Default: "production" - # @option options [String] :description Optional short description. - # @return [Sawyer::Resource] A deployment - # @see https://developer.github.com/v3/repos/deployments/#create-a-deployment - def create_deployment(repo, ref, options = {}) - options[:ref] = ref - post("#{Repository.path repo}/deployments", options) - end - - # Delete a Deployment - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param deployment_id [Integer, String, Repository, Hash] A GitHub repository - # @return [No Content] - # @see https://developer.github.com/v3/repos/deployments/#delete-a-deployment - def delete_deployment(repo, deployment_id, options = {}) - delete("#{Repository.path repo}/deployments/#{deployment_id}", options) - end - - # List all statuses for a Deployment - # - # @param deployment_url [String] A URL for a deployment resource - # @return [Array] A list of deployment statuses - # @see https://developer.github.com/v3/repos/deployments/#list-deployment-statuses - def deployment_statuses(deployment_url, options = {}) - deployment = get(deployment_url, accept: options[:accept]) - paginate(deployment.rels[:statuses].href, options) - end - alias list_deployment_statuses deployment_statuses - - # Create a deployment status for a Deployment - # - # @param deployment_url [String] A URL for a deployment resource - # @param state [String] The state: pending, success, failure, error - # @option options [String] :target_url The target URL to associate with this status. Default: "" - # @option options [String] :description A short description of the status. Maximum length of 140 characters. Default: "" - # @return [Sawyer::Resource] A deployment status - # @see https://developer.github.com/v3/repos/deployments/#create-a-deployment-status - def create_deployment_status(deployment_url, state, options = {}) - deployment = get(deployment_url, accept: options[:accept]) - options[:state] = state.to_s.downcase - post(deployment.rels[:statuses].href, options) - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/downloads.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/downloads.rb deleted file mode 100644 index 2543e6ff..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/downloads.rb +++ /dev/null @@ -1,49 +0,0 @@ -# frozen_string_literal: true - -module Octokit - class Client - # Methods for the Repo Downloads API - # - # @see https://developer.github.com/v3/repos/downloads/ - module Downloads - # List available downloads for a repository - # - # @param repo [Integer, String, Repository, Hash] A Github Repository - # @return [Array] A list of available downloads - # @deprecated As of December 11th, 2012: https://github.com/blog/1302-goodbye-uploads - # @see https://developer.github.com/v3/repos/downloads/#list-downloads-for-a-repository - # @example List all downloads for Github/Hubot - # Octokit.downloads("github/hubot") - def downloads(repo, options = {}) - paginate "#{Repository.path repo}/downloads", options - end - alias list_downloads downloads - - # Get single download for a repository - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param id [Integer] ID of the download - # @return [Sawyer::Resource] A single download from the repository - # @deprecated As of December 11th, 2012: https://github.com/blog/1302-goodbye-uploads - # @see https://developer.github.com/v3/repos/downloads/#get-a-single-download - # @example Get the "Robawt" download from Github/Hubot - # Octokit.download("github/hubot") - def download(repo, id, options = {}) - get "#{Repository.path repo}/downloads/#{id}", options - end - - # Delete a single download for a repository - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param id [Integer] ID of the download - # @deprecated As of December 11th, 2012: https://github.com/blog/1302-goodbye-uploads - # @see https://developer.github.com/v3/repos/downloads/#delete-a-download - # @return [Boolean] Status - # @example Get the "Robawt" download from Github/Hubot - # Octokit.delete_download("github/hubot", 1234) - def delete_download(repo, id, options = {}) - boolean_from_response :delete, "#{Repository.path repo}/downloads/#{id}", options - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/emojis.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/emojis.rb deleted file mode 100644 index 969383ff..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/emojis.rb +++ /dev/null @@ -1,18 +0,0 @@ -# frozen_string_literal: true - -module Octokit - class Client - # Methods for the Emojis API - module Emojis - # List all emojis used on GitHub - # - # @return [Sawyer::Resource] A list of all emojis on GitHub - # @see https://developer.github.com/v3/emojis/#emojis - # @example List all emojis - # Octokit.emojis - def emojis(options = {}) - get 'emojis', options - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/environments.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/environments.rb deleted file mode 100644 index 33f43d98..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/environments.rb +++ /dev/null @@ -1,55 +0,0 @@ -# frozen_string_literal: true - -module Octokit - class Client - # Methods for the Environments API - # - # @see https://docs.github.com/en/rest/deployments/environments - module Environments - # Fetch a single environment for a repository - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param environment_name [String] The name of the environment - # @return A single environment - # @see https://docs.github.com/en/rest/deployments/environments#get-an-environment - def environment(repo, environment_name, options = {}) - get("#{Repository.path repo}/environments/#{environment_name}", options) - end - - # Lists the environments for a repository - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @option options [Integer] :per_page The number of results per page (max 100). Default: 30 - # @option options [Integer] :page Page number of the results to fetch. Default: 1 - # @return [Sawyer::Resource] Total count of environments and list of environments - # @see https://docs.github.com/en/rest/deployments/environments#list-environments - def environments(repo, options = {}) - get("#{Repository.path repo}/environments", options) - end - alias list_environments environments - - # Create or update an environment with protection rules, such as required reviewers - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param environment_name [String] The name of the environment - # @option options [Integer] :wait_timer The amount of time to delay a job after the job is initially triggered. The time (in minutes) must be an integer between 0 and 43,200 (30 days). - # @option options [Array] :reviewers The people or teams that may review jobs that reference the environment. You can list up to six users or teams as reviewers. - # @option options [Object] :deployment_branch_policy The type of deployment branch policy for this environment. To allow all branches to deploy, set to null. - # @return [Sawyer::Resource] An environment - # @see https://docs.github.com/en/rest/deployments/environments#create-or-update-an-environment - def create_or_update_environment(repo, environment_name, options = {}) - put("#{Repository.path repo}/environments/#{environment_name}", options) - end - - # Delete an Environment - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param environment_name [String] The name of the environment - # @return [No Content] - # @see https://docs.github.com/en/rest/deployments/environments#delete-an-environment - def delete_environment(repo, environment_name, options = {}) - delete("#{Repository.path repo}/environments/#{environment_name}", options) - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/events.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/events.rb deleted file mode 100644 index ceea04b5..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/events.rb +++ /dev/null @@ -1,151 +0,0 @@ -# frozen_string_literal: true - -module Octokit - class Client - # Method for the Events API - # - # @see https://developer.github.com/v3/activity/events/ - # @see https://developer.github.com/v3/issues/events/ - module Events - # List all public events for GitHub - # - # @return [Array] A list of all public events from GitHub - # @see https://developer.github.com/v3/activity/events/#list-public-events - # @example List all pubilc events - # Octokit.public_events - def public_events(options = {}) - paginate 'events', options - end - - # List all user events - # - # @param user [Integer, String] GitHub user login or id. - # @return [Array] A list of all user events - # @see https://developer.github.com/v3/activity/events/#list-events-performed-by-a-user - # @example List all user events - # Octokit.user_events("sferik") - def user_events(user, options = {}) - paginate "#{User.path user}/events", options - end - - # List public user events - # - # @param user [Integer, String] GitHub user login or id - # @return [Array] A list of public user events - # @see https://developer.github.com/v3/activity/events/#list-public-events-performed-by-a-user - # @example List public user events - # Octokit.user_events("sferik") - def user_public_events(user, options = {}) - paginate "#{User.path user}/events/public", options - end - - # List events that a user has received - # - # @param user [Integer, String] GitHub user login or id - # @return [Array] A list of all user received events - # @see https://developer.github.com/v3/activity/events/#list-events-that-a-user-has-received - # @example List all user received events - # Octokit.received_events("sferik") - def received_events(user, options = {}) - paginate "#{User.path user}/received_events", options - end - - # List public events a user has received - # - # @param user [Integer, String] GitHub user login or id - # @return [Array] A list of public user received events - # @see https://developer.github.com/v3/activity/events/#list-public-events-that-a-user-has-received - # @example List public user received events - # Octokit.received_public_events("sferik") - def received_public_events(user, options = {}) - paginate "#{User.path user}/received_events/public", options - end - - # List events for a repository - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @return [Array] A list of events for a repository - # @see https://developer.github.com/v3/activity/events/#list-repository-events - # @example List events for a repository - # Octokit.repository_events("sferik/rails_admin") - def repository_events(repo, options = {}) - paginate "#{Repository.path repo}/events", options - end - - # List public events for a repository's network - # - # @param repo [String, Repository, Hash] A GitHub repository - # @return [Array] A list of events for a repository's network - # @see https://developer.github.com/v3/activity/events/#list-public-events-for-a-network-of-repositories - # @example List events for a repository's network - # Octokit.repository_network_events("sferik/rails_admin") - def repository_network_events(repo, options = {}) - paginate "networks/#{Repository.new(repo)}/events", options - end - - # List all events for an organization - # - # Requires authenticated client. - # - # @param org [String] Organization GitHub handle - # @return [Array] List of all events from a GitHub organization - # @see https://developer.github.com/v3/activity/events/#list-events-for-an-organization - # @example List events for the lostisland organization - # @client.organization_events("lostisland") - def organization_events(org, options = {}) - paginate "users/#{login}/events/orgs/#{org}", options - end - - # List an organization's public events - # - # @param org [String, Integer] Organization GitHub login or id. - # @return [Array] List of public events from a GitHub organization - # @see https://developer.github.com/v3/activity/events/#list-public-events-for-an-organization - # @example List public events for GitHub - # Octokit.organization_public_events("GitHub") - def organization_public_events(org, options = {}) - paginate "#{Organization.path org}/events", options - end - - # Get all Issue Events for a given Repository - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # - # @return [Array] Array of all Issue Events for this Repository - # @see https://developer.github.com/v3/issues/events/#list-events-for-a-repository - # @see https://developer.github.com/v3/activity/events/#list-issue-events-for-a-repository - # @example Get all Issue Events for Octokit - # Octokit.repository_issue_events("octokit/octokit.rb") - def repository_issue_events(repo, options = {}) - paginate "#{Repository.path repo}/issues/events", options - end - alias repo_issue_events repository_issue_events - - # List events for an Issue - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param number [Integer] Issue number - # - # @return [Array] Array of events for that issue - # @see https://developer.github.com/v3/issues/events/#list-events-for-an-issue - # @example List all issues events for issue #38 on octokit/octokit.rb - # Octokit.issue_events("octokit/octokit.rb", 38) - def issue_events(repo, number, options = {}) - paginate "#{Repository.path repo}/issues/#{number}/events", options - end - - # Get information on a single Issue Event - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param number [Integer] Event number - # - # @return [Sawyer::Resource] A single Event for an Issue - # @see https://developer.github.com/v3/issues/events/#get-a-single-event - # @example Get Event information for ID 3094334 (a pull request was closed) - # Octokit.issue_event("octokit/octokit.rb", 3094334) - def issue_event(repo, number, options = {}) - paginate "#{Repository.path repo}/issues/events/#{number}", options - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/feeds.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/feeds.rb deleted file mode 100644 index a689a636..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/feeds.rb +++ /dev/null @@ -1,32 +0,0 @@ -# frozen_string_literal: true - -module Octokit - class Client - # Methods for the Feeds API - # - # @see https://developer.github.com/v3/activity/feeds/ - module Feeds - # List Feeds - # - # The feeds returned depend on authentication, see the GitHub API docs - # for more information. - # - # @return [Array] list of feeds - # @see https://developer.github.com/v3/activity/feeds/#list-feeds - def feeds - get 'feeds' - end - - # Get a Feed by name - # - # @param name [Symbol, String] Name of feed to retrieve. - # @return [Feed] Parsed feed in the format returned by the configured - # parser. - def feed(name, options = {}) - if rel = feeds._links[name] - get rel.href, accept: rel.type, options: options - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/gists.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/gists.rb deleted file mode 100644 index 34b7921e..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/gists.rb +++ /dev/null @@ -1,234 +0,0 @@ -# frozen_string_literal: true - -module Octokit - class Client - # Methods for the Gists API - # - # @see https://developer.github.com/v3/gists/ - module Gists - # List gists for a user or all public gists - # - # @param user [String] An optional user to filter listing - # @return [Array] A list of gists - # @example Fetch all gists for defunkt - # Octokit.gists('defunkt') - # @example Fetch all public gists - # Octokit.gists - # @see https://developer.github.com/v3/gists/#list-gists - def gists(user = nil, options = {}) - if user.nil? - paginate 'gists', options - else - paginate "#{User.path user}/gists", options - end - end - alias list_gists gists - - # List public gists - # - # @return [Array] A list of gists - # @example Fetch all public gists - # Octokit.public_gists - # @see https://developer.github.com/v3/gists/#list-gists - def public_gists(options = {}) - paginate 'gists/public', options - end - - # List the authenticated user’s starred gists - # - # @return [Array] A list of gists - # @see https://developer.github.com/v3/gists/#list-gists - def starred_gists(options = {}) - paginate 'gists/starred', options - end - - # Get a single gist - # - # @param gist [String] ID of gist to fetch - # @option options [String] :sha Specific gist revision SHA - # @return [Sawyer::Resource] Gist information - # @see https://developer.github.com/v3/gists/#get-a-single-gist - # @see https://developer.github.com/v3/gists/#get-a-specific-revision-of-a-gist - def gist(gist, options = {}) - options = options.dup - if sha = options.delete(:sha) - get "gists/#{Gist.new(gist)}/#{sha}", options - else - get "gists/#{Gist.new(gist)}", options - end - end - - # Create a gist - # - # @param options [Hash] Gist information. - # @option options [String] :description - # @option options [Boolean] :public Sets gist visibility - # @option options [Array] :files Files that make up this gist. Keys - # should be the filename, the value a Hash with a :content key with text - # content of the Gist. - # @return [Sawyer::Resource] Newly created gist info - # @see https://developer.github.com/v3/gists/#create-a-gist - def create_gist(options = {}) - post 'gists', options - end - - # Edit a gist - # - # @param options [Hash] Gist information. - # @option options [String] :description - # @option options [Hash] :files Files that make up this gist. Keys - # should be the filename, the value a Hash with a :content key with text - # content of the Gist. - # - # NOTE: All files from the previous version of the - # gist are carried over by default if not included in the hash. Deletes - # can be performed by including the filename with a null hash. - # @return - # [Sawyer::Resource] Newly created gist info - # @see https://developer.github.com/v3/gists/#edit-a-gist - # @example Update a gist - # @client.edit_gist('some_id', { - # :files => {"boo.md" => {"content" => "updated stuff"}} - # }) - def edit_gist(gist, options = {}) - patch "gists/#{Gist.new(gist)}", options - end - - # List gist commits - # - # @param gist [String] Gist ID - # @return [Array] List of commits to the gist - # @see https://developer.github.com/v3/gists/#list-gist-commits - # @example List commits for a gist - # @client.gist_commits('some_id') - def gist_commits(gist, options = {}) - paginate "gists/#{Gist.new(gist)}/commits", options - end - - # - # Star a gist - # - # @param gist [String] Gist ID - # @return [Boolean] Indicates if gist is starred successfully - # @see https://developer.github.com/v3/gists/#star-a-gist - def star_gist(gist, options = {}) - boolean_from_response :put, "gists/#{Gist.new(gist)}/star", options - end - - # Unstar a gist - # - # @param gist [String] Gist ID - # @return [Boolean] Indicates if gist is unstarred successfully - # @see https://developer.github.com/v3/gists/#unstar-a-gist - def unstar_gist(gist, options = {}) - boolean_from_response :delete, "gists/#{Gist.new(gist)}/star", options - end - - # Check if a gist is starred - # - # @param gist [String] Gist ID - # @return [Boolean] Indicates if gist is starred - # @see https://developer.github.com/v3/gists/#check-if-a-gist-is-starred - def gist_starred?(gist, options = {}) - boolean_from_response :get, "gists/#{Gist.new(gist)}/star", options - end - - # Fork a gist - # - # @param gist [String] Gist ID - # @return [Sawyer::Resource] Data for the new gist - # @see https://developer.github.com/v3/gists/#fork-a-gist - def fork_gist(gist, options = {}) - post "gists/#{Gist.new(gist)}/forks", options - end - - # List gist forks - # - # @param gist [String] Gist ID - # @return [Array] List of gist forks - # @see https://developer.github.com/v3/gists/#list-gist-forks - # @example List gist forks - # @client.gist_forks('some-id') - def gist_forks(gist, options = {}) - paginate "gists/#{Gist.new(gist)}/forks", options - end - - # Delete a gist - # - # @param gist [String] Gist ID - # @return [Boolean] Indicating success of deletion - # @see https://developer.github.com/v3/gists/#delete-a-gist - def delete_gist(gist, options = {}) - boolean_from_response :delete, "gists/#{Gist.new(gist)}", options - end - - # List gist comments - # - # @param gist_id [String] Gist Id. - # @return [Array] Array of hashes representing comments. - # @see https://developer.github.com/v3/gists/comments/#list-comments-on-a-gist - # @example - # Octokit.gist_comments('3528ae645') - def gist_comments(gist_id, options = {}) - paginate "gists/#{gist_id}/comments", options - end - - # Get gist comment - # - # @param gist_id [String] Id of the gist. - # @param gist_comment_id [Integer] Id of the gist comment. - # @return [Sawyer::Resource] Hash representing gist comment. - # @see https://developer.github.com/v3/gists/comments/#get-a-single-comment - # @example - # Octokit.gist_comment('208sdaz3', 1451398) - def gist_comment(gist_id, gist_comment_id, options = {}) - get "gists/#{gist_id}/comments/#{gist_comment_id}", options - end - - # Create gist comment - # - # Requires authenticated client. - # - # @param gist_id [String] Id of the gist. - # @param comment [String] Comment contents. - # @return [Sawyer::Resource] Hash representing the new comment. - # @see https://developer.github.com/v3/gists/comments/#create-a-comment - # @example - # @client.create_gist_comment('3528645', 'This is very helpful.') - def create_gist_comment(gist_id, comment, options = {}) - options = options.merge({ body: comment }) - post "gists/#{gist_id}/comments", options - end - - # Update gist comment - # - # Requires authenticated client - # - # @param gist_id [String] Id of the gist. - # @param gist_comment_id [Integer] Id of the gist comment to update. - # @param comment [String] Updated comment contents. - # @return [Sawyer::Resource] Hash representing the updated comment. - # @see https://developer.github.com/v3/gists/comments/#edit-a-comment - # @example - # @client.update_gist_comment('208sdaz3', '3528645', ':heart:') - def update_gist_comment(gist_id, gist_comment_id, comment, options = {}) - options = options.merge({ body: comment }) - patch "gists/#{gist_id}/comments/#{gist_comment_id}", options - end - - # Delete gist comment - # - # Requires authenticated client. - # - # @param gist_id [String] Id of the gist. - # @param gist_comment_id [Integer] Id of the gist comment to delete. - # @return [Boolean] True if comment deleted, false otherwise. - # @see https://developer.github.com/v3/gists/comments/#delete-a-comment - # @example - # @client.delete_gist_comment('208sdaz3', '586399') - def delete_gist_comment(gist_id, gist_comment_id, options = {}) - boolean_from_response(:delete, "gists/#{gist_id}/comments/#{gist_comment_id}", options) - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/gitignore.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/gitignore.rb deleted file mode 100644 index 9436f9d3..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/gitignore.rb +++ /dev/null @@ -1,43 +0,0 @@ -# frozen_string_literal: true - -module Octokit - class Client - # Methods for the Gitignore API - # - # @see https://developer.github.com/v3/gitignore/ - module Gitignore - # Listing available gitignore templates. - # - # These templates can be passed option when creating a repository. - # - # @see https://developer.github.com/v3/gitignore/#listing-available-templates - # - # @return [Array] List of templates. - # - # @example Git all the gitignore templates - # @client.gitignore_templates - def gitignore_templates(options = {}) - get 'gitignore/templates', options - end - - # Get a gitignore template. - # - # Use the raw {http://developer.github.com/v3/media/ media type} to get - # the raw contents. - # - # @param template_name [String] Name of the template. Template names are - # case sensitive, make sure to use a valid name from the - # .gitignore_templates list. - # - # @see https://developer.github.com/v3/gitignore/#get-a-single-template - # - # @return [Sawyer::Resource] Gitignore template - # - # @example Get the Ruby gitignore template - # @client.gitignore_template('Ruby') - def gitignore_template(template_name, options = {}) - get "gitignore/templates/#{template_name}", options - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/hooks.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/hooks.rb deleted file mode 100644 index 49f0bd8d..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/hooks.rb +++ /dev/null @@ -1,287 +0,0 @@ -# frozen_string_literal: true - -module Octokit - class Client - # Methods for the Hooks API - module Hooks - # List repo hooks - # - # Requires authenticated client. - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository. - # @return [Array] Array of hashes representing hooks. - # @see https://developer.github.com/v3/repos/hooks/#list-hooks - # @example - # @client.hooks('octokit/octokit.rb') - def hooks(repo, options = {}) - paginate "#{Repository.path repo}/hooks", options - end - - # Get single hook - # - # Requires authenticated client. - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository. - # @param id [Integer] Id of the hook to get. - # @return [Sawyer::Resource] Hash representing hook. - # @see https://developer.github.com/v3/repos/hooks/#get-single-hook - # @example - # @client.hook('octokit/octokit.rb', 100000) - def hook(repo, id, options = {}) - get "#{Repository.path repo}/hooks/#{id}", options - end - - # Create a hook - # - # Requires authenticated client. - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository. - # @param name [String] The name of the service that is being called. See - # {https://api.github.com/hooks Hooks} for the possible names. - # @param config [Hash] A Hash containing key/value pairs to provide - # settings for this hook. These settings vary between the services and - # are defined in the {https://github.com/github/github-services github-services} repo. - # @option options [Array] :events ('["push"]') Determines what - # events the hook is triggered for. - # @option options [Boolean] :active Determines whether the hook is - # actually triggered on pushes. - # @return [Sawyer::Resource] Hook info for the new hook - # @see https://api.github.com/hooks - # @see https://github.com/github/github-services - # @see https://developer.github.com/v3/repos/hooks/#create-a-hook - # @example - # @client.create_hook( - # 'octokit/octokit.rb', - # 'web', - # { - # :url => 'http://something.com/webhook', - # :content_type => 'json' - # }, - # { - # :events => ['push', 'pull_request'], - # :active => true - # } - # ) - def create_hook(repo, name, config, options = {}) - options = { name: name, config: config, events: ['push'], active: true }.merge(options) - post "#{Repository.path repo}/hooks", options - end - - # Edit a hook - # - # Requires authenticated client. - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository. - # @param id [Integer] Id of the hook being updated. - # @param name [String] The name of the service that is being called. See - # {https://api.github.com/hooks Hooks} for the possible names. - # @param config [Hash] A Hash containing key/value pairs to provide - # settings for this hook. These settings vary between the services and - # are defined in the {https://github.com/github/github-services github-services} repo. - # @option options [Array] :events ('["push"]') Determines what - # events the hook is triggered for. - # @option options [Array] :add_events Determines a list of events - # to be added to the list of events that the Hook triggers for. - # @option options [Array] :remove_events Determines a list of events - # to be removed from the list of events that the Hook triggers for. - # @option options [Boolean] :active Determines whether the hook is - # actually triggered on pushes. - # @return [Sawyer::Resource] Hook info for the updated hook - # @see https://api.github.com/hooks - # @see https://github.com/github/github-services - # @see https://developer.github.com/v3/repos/hooks/#edit-a-hook - # @example - # @client.edit_hook( - # 'octokit/octokit.rb', - # 100000, - # 'web', - # { - # :url => 'http://something.com/webhook', - # :content_type => 'json' - # }, - # { - # :add_events => ['status'], - # :remove_events => ['pull_request'], - # :active => true - # } - # ) - def edit_hook(repo, id, name, config, options = {}) - options = { name: name, config: config }.merge(options) - patch "#{Repository.path repo}/hooks/#{id}", options - end - - # Delete hook - # - # Requires authenticated client. - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository. - # @param id [Integer] Id of the hook to remove. - # @return [Boolean] True if hook removed, false otherwise. - # @see https://developer.github.com/v3/repos/hooks/#delete-a-hook - # @example - # @client.remove_hook('octokit/octokit.rb', 1000000) - def remove_hook(repo, id, options = {}) - boolean_from_response :delete, "#{Repository.path repo}/hooks/#{id}", options - end - - # Test hook - # - # Requires authenticated client. - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository. - # @param id [Integer] Id of the hook to test. - # @return [Boolean] Success - # @see https://developer.github.com/v3/repos/hooks/#test-a-push-hook - # @example - # @client.test_hook('octokit/octokit.rb', 1000000) - def test_hook(repo, id, options = {}) - boolean_from_response :post, "#{Repository.path repo}/hooks/#{id}/tests", options - end - - # Ping hook - # - # Requires authenticated client. - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository. - # @param id [Integer] Id of the hook to send a ping. - # @return [Boolean] Ping requested? - # @see https://developer.github.com/v3/repos/hooks/#ping-a-hook - # @example - # @client.ping_hook('octokit/octokit.rb', 1000000) - def ping_hook(repo, id, options = {}) - boolean_from_response :post, "#{Repository.path repo}/hooks/#{id}/pings", options - end - - # List org hooks - # - # Requires client authenticated as admin for the org. - # - # @param org [String, Integer] Organization GitHub login or id. - # @return [Array] Array of hashes representing hooks. - # @see https://developer.github.com/v3/orgs/hooks/#list-hooks - # @example - # @client.org_hooks('octokit') - def org_hooks(org, options = {}) - paginate "#{Organization.path org}/hooks", options - end - alias list_org_hooks org_hooks - - # Get an org hook - # - # Requires client authenticated as admin for the org. - # - # @param org [String, Integer] Organization GitHub login or id. - # @param id [Integer] Id of the hook to get. - # @return [Sawyer::Resource] Hash representing hook. - # @see https://developer.github.com/v3/orgs/hooks/#get-single-hook - # @example - # @client.org_hook('octokit', 123) - def org_hook(org, id, options = {}) - get "#{Organization.path org}/hooks/#{id}", options - end - - # Create an org hook - # - # Requires client authenticated as admin for the org. - # - # @param org [String, Integer] Organization GitHub login or id. - # @param config [Hash] A Hash containing key/value pairs to provide - # settings for this hook. - # @option options [Array] :events ('["push"]') Determines what - # events the hook is triggered for. - # @option options [Boolean] :active Determines whether the hook is - # actually triggered on pushes. - # @return [Sawyer::Resource] Hook info for the new hook - # @see https://api.github.com/hooks - # @see https://developer.github.com/v3/orgs/hooks/#create-a-hook - # @example - # @client.create_org_hook( - # 'octokit', - # { - # :url => 'http://something.com/webhook', - # :content_type => 'json' - # }, - # { - # :events => ['push', 'pull_request'], - # :active => true - # } - # ) - def create_org_hook(org, config, options = {}) - options = { name: 'web', config: config }.merge(options) - post "#{Organization.path org}/hooks", options - end - - # Update an org hook - # - # Requires client authenticated as admin for the org. - # - # @param org [String, Integer] Organization GitHub login or id. - # @param id [Integer] Id of the hook to update. - # @param config [Hash] A Hash containing key/value pairs to provide - # settings for this hook. - # @option options [Array] :events ('["push"]') Determines what - # events the hook is triggered for. - # @option options [Boolean] :active Determines whether the hook is - # actually triggered on pushes. - # @return [Sawyer::Resource] Hook info for the new hook - # @see https://api.github.com/hooks - # @see https://developer.github.com/v3/orgs/hooks/#edit-a-hook - # @example - # @client.edit_org_hook( - # 'octokit', - # 123, - # { - # :url => 'http://something.com/webhook', - # :content_type => 'json' - # }, - # { - # :events => ['push', 'pull_request'], - # :active => true - # } - # ) - def edit_org_hook(org, id, config, options = {}) - options = { config: config }.merge(options) - patch "#{Organization.path org}/hooks/#{id}", options - end - alias update_org_hook edit_org_hook - - # Ping org hook - # - # Requires client authenticated as admin for the org. - # - # @param org [String, Integer] Organization GitHub login or id. - # @param id [Integer] Id of the hook to update. - # @return [Boolean] Success - # @see https://developer.github.com/v3/orgs/hooks/#ping-a-hook - # @example - # @client.ping_org_hook('octokit', 1000000) - def ping_org_hook(org, id, options = {}) - boolean_from_response :post, "#{Organization.path org}/hooks/#{id}/pings", options - end - - # Remove org hook - # - # Requires client authenticated as admin for the org. - # - # @param org [String, Integer] Organization GitHub login or id. - # @param id [Integer] Id of the hook to update. - # @return [Boolean] True if hook removed, false otherwise. - # @see https://developer.github.com/v3/orgs/hooks/#delete-a-hook - # @example - # @client.remove_org_hook('octokit', 1000000) - def remove_org_hook(org, id, options = {}) - boolean_from_response :delete, "#{Organization.path org}/hooks/#{id}", options - end - - # Parse payload string - # - # @param payload_string [String] The payload - # @return [Sawyer::Resource] The payload object - # @see https://developer.github.com/v3/activity/events/types/ - def parse_payload(payload_string) - payload_hash = agent.class.decode payload_string - Sawyer::Resource.new agent, payload_hash - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/issues.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/issues.rb deleted file mode 100644 index 7e5ecc73..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/issues.rb +++ /dev/null @@ -1,367 +0,0 @@ -# frozen_string_literal: true - -module Octokit - class Client - # Methods for the Issues API - # - # @see https://developer.github.com/v3/issues/ - module Issues - # List issues for the authenticated user or repository - # - # @param repository [Integer, String, Repository, Hash] A GitHub repository. - # @param options [Sawyer::Resource] A customizable set of options. - # @option options [Integer] :milestone Milestone number. - # @option options [String] :state (open) State: open, closed, or all. - # @option options [String] :assignee User login. - # @option options [String] :creator User login. - # @option options [String] :mentioned User login. - # @option options [String] :labels List of comma separated Label names. Example: bug,ui,@high. - # @option options [String] :sort (created) Sort: created, updated, or comments. - # @option options [String] :direction (desc) Direction: asc or desc. - # @option options [Integer] :page (1) Page number. - # @return [Array] A list of issues for a repository. - # @see https://developer.github.com/v3/issues/#list-issues-for-a-repository - # @see https://developer.github.com/v3/issues/#list-issues - # @example List issues for a repository - # Octokit.list_issues("sferik/rails_admin") - # @example List issues for the authenticated user across repositories - # @client = Octokit::Client.new(:login => 'foo', :password => 'bar') - # @client.list_issues - def list_issues(repository = nil, options = {}) - path = repository ? "#{Repository.new(repository).path}/issues" : 'issues' - paginate path, options - end - alias issues list_issues - - # List all issues across owned and member repositories for the authenticated user - # - # @param options [Sawyer::Resource] A customizable set of options. - # @option options [String] :filter (assigned) State: assigned, created, mentioned, subscribed or closed. - # @option options [String] :state (open) State: open, closed, or all. - # @option options [Array] :labels List of Label names. Example: ['bug', 'ui', '@high']. - # @option options [String] :sort (created) Sort: created, updated, or comments. - # @option options [String] :direction (desc) Direction: asc or desc. - # @option options [Integer] :page (1) Page number. - # @option options [String] :since Timestamp in ISO 8601 - # format: YYYY-MM-DDTHH:MM:SSZ - # @return [Array] A list of issues for a repository. - # @see https://developer.github.com/v3/issues/#list-issues - # @example List issues for the authenticated user across owned and member repositories - # @client = Octokit::Client.new(:login => 'foo', :password => 'bar') - # @client.user_issues - def user_issues(options = {}) - paginate 'user/issues', options - end - - # List all issues for a given organization for the authenticated user - # - # @param org [String, Integer] Organization GitHub login or id. - # @param options [Sawyer::Resource] A customizable set of options. - # @option options [String] :filter (assigned) State: assigned, created, mentioned, subscribed or closed. - # @option options [String] :state (open) State: open, closed, or all. - # @option options [Array] :labels List of Label names. Example: ['bug', 'ui', '@high']. - # @option options [String] :sort (created) Sort: created, updated, or comments. - # @option options [String] :direction (desc) Direction: asc or desc. - # @option options [Integer] :page (1) Page number. - # @option options [String] :since Timestamp in ISO 8601 - # format: YYYY-MM-DDTHH:MM:SSZ - # @return [Array] A list of issues. - # @see https://developer.github.com/v3/issues/#list-issues - # @example List all issues for a given organization for the authenticated user - # @client = Octokit::Client.new(:login => 'foo', :password => 'bar') - # @client.org_issues("octokit") - def org_issues(org, options = {}) - paginate "#{Organization.path org}/issues", options - end - - # Create an issue for a repository - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param title [String] A descriptive title - # @param body [String] An optional concise description - # @param options [Hash] A customizable set of options. - # @option options [String] :assignee User login. - # @option options [Array] :assignees User login. - # @option options [Integer] :milestone Milestone number. - # @option options [String] :labels List of comma separated Label names. Example: bug,ui,@high. - # @return [Sawyer::Resource] Your newly created issue - # @see https://developer.github.com/v3/issues/#create-an-issue - # @example Create a new Issues for a repository - # Octokit.create_issue("sferik/rails_admin", 'Updated Docs', 'Added some extra links') - def create_issue(repo, title, body = nil, options = {}) - options[:labels] = case options[:labels] - when String - options[:labels].split(',').map(&:strip) - when Array - options[:labels] - else - [] - end - parameters = { title: title } - parameters[:body] = body unless body.nil? - post "#{Repository.path repo}/issues", options.merge(parameters) - end - alias open_issue create_issue - - # Get a single issue from a repository - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param number [Integer] Number ID of the issue - # @return [Sawyer::Resource] The issue you requested, if it exists - # @see https://developer.github.com/v3/issues/#get-a-single-issue - # @example Get issue #25 from octokit/octokit.rb - # Octokit.issue("octokit/octokit.rb", "25") - def issue(repo, number, options = {}) - get "#{Repository.path repo}/issues/#{number}", options - end - - # Close an issue - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param number [Integer] Number ID of the issue - # @param options [Hash] A customizable set of options. - # @option options [String] :assignee User login. - # @option options [Array] :assignees User login. - # @option options [Integer] :milestone Milestone number. - # @option options [Array] :labels List of Label names. Example: ['bug', 'ui', '@high']. - # @return [Sawyer::Resource] The updated Issue - # @see https://developer.github.com/v3/issues/#edit-an-issue - # @example Close Issue #25 from octokit/octokit.rb - # Octokit.close_issue("octokit/octokit.rb", "25") - def close_issue(repo, number, options = {}) - patch "#{Repository.path repo}/issues/#{number}", options.merge({ state: 'closed' }) - end - - # Reopen an issue - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param number [Integer] Number ID of the issue - # @param options [Hash] A customizable set of options. - # @option options [String] :assignee User login. - # @option options [Array] :assignees User login. - # @option options [Integer] :milestone Milestone number. - # @option options [Array] :labels List of Label names. Example: ['bug', 'ui', '@high']. - # @return [Sawyer::Resource] The updated Issue - # @see https://developer.github.com/v3/issues/#edit-an-issue - # @example Reopen Issue #25 from octokit/octokit.rb - # Octokit.reopen_issue("octokit/octokit.rb", "25") - def reopen_issue(repo, number, options = {}) - patch "#{Repository.path repo}/issues/#{number}", options.merge({ state: 'open' }) - end - - # Lock an issue's conversation, limiting it to collaborators - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param number [Integer] Number ID of the issue - # @return [Boolean] Success - # @see https://developer.github.com/v3/issues/#lock-an-issue - # @example Lock Issue #25 from octokit/octokit.rb - # Octokit.lock_issue("octokit/octokit.rb", "25") - def lock_issue(repo, number, options = {}) - boolean_from_response :put, "#{Repository.path repo}/issues/#{number}/lock", options - end - - # Unlock an issue's conversation, opening it to all viewers - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param number [Integer] Number ID of the issue - # @return [Boolean] Success - # @see https://developer.github.com/v3/issues/#unlock-an-issue - # @example Unlock Issue #25 from octokit/octokit.rb - # Octokit.close_issue("octokit/octokit.rb", "25") - def unlock_issue(repo, number, options = {}) - boolean_from_response :delete, "#{Repository.path repo}/issues/#{number}/lock", options - end - - # Update an issue - # - # @overload update_issue(repo, number, title, body, options) - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param number [Integer] Number ID of the issue - # @param title [String] Updated title for the issue - # @param body [String] Updated body of the issue - # @param options [Hash] A customizable set of options. - # @option options [String] :assignee User login. - # @option options [Array] :assignees User login. - # @option options [Integer] :milestone Milestone number. - # @option options [String] :labels List of comma separated Label names. Example: bug,ui,@high. - # @option options [String] :state State of the issue. open or closed - # - # @overload update_issue(repo, number, options) - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param number [Integer] Number ID of the issue - # @param options [Hash] A customizable set of options. - # @option options [String] :title Updated title for the issue - # @option options [String] :body Updated body of the issue - # @option options [String] :assignee User login. - # @option options [Array] :assignees User login. - # @option options [Integer] :milestone Milestone number. - # @option options [Array] :labels List of Label names. Example: ['bug', 'ui', '@high']. - # @option options [String] :state State of the issue. open or closed - # @return [Sawyer::Resource] The updated Issue - # @see https://developer.github.com/v3/issues/#edit-an-issue - # - # @example Change the title of Issue #25 - # Octokit.update_issue("octokit/octokit.rb", "25", "A new title", "the same body") - # - # @example Change only the assignee of Issue #25 - # Octokit.update_issue("octokit/octokit.rb", "25", :assignee => "pengwynn") - def update_issue(repo, number, *args) - arguments = Arguments.new(args) - opts = arguments.options - - unless arguments.empty? - opts[:title] = arguments.shift - opts[:body] = arguments.shift - end - - patch "#{Repository.path repo}/issues/#{number}", opts - end - - # Get all comments attached to issues for the repository - # - # By default, Issue Comments are ordered by ascending ID. - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param options [Hash] Optional parameters - # @option options [String] :sort created or updated - # @option options [String] :direction asc or desc. Ignored without sort - # parameter. - # @option options [String] :since Timestamp in ISO 8601 - # format: YYYY-MM-DDTHH:MM:SSZ - # - # @return [Array] List of issues comments. - # - # @see https://developer.github.com/v3/issues/comments/#list-comments-in-a-repository - # - # @example Get the comments for issues in the octokit repository - # @client.issues_comments("octokit/octokit.rb") - # - # @example Get issues comments, sort by updated descending since a time - # @client.issues_comments("octokit/octokit.rb", { - # :sort => 'desc', - # :direction => 'asc', - # :since => '2010-05-04T23:45:02Z' - # }) - def issues_comments(repo, options = {}) - paginate "#{Repository.path repo}/issues/comments", options - end - - # Get all comments attached to an issue - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param number [Integer] Number ID of the issue - # @return [Array] Array of comments that belong to an issue - # @see https://developer.github.com/v3/issues/comments/#list-comments-on-an-issue - # @example Get comments for issue #25 from octokit/octokit.rb - # Octokit.issue_comments("octokit/octokit.rb", "25") - def issue_comments(repo, number, options = {}) - paginate "#{Repository.path repo}/issues/#{number}/comments", options - end - - # Get a single comment attached to an issue - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param number [Integer] Number ID of the comment - # @return [Sawyer::Resource] The specific comment in question - # @see https://developer.github.com/v3/issues/comments/#get-a-single-comment - # @example Get comment #1194549 from an issue on octokit/octokit.rb - # Octokit.issue_comment("octokit/octokit.rb", 1194549) - def issue_comment(repo, number, options = {}) - paginate "#{Repository.path repo}/issues/comments/#{number}", options - end - - # Add a comment to an issue - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param number [Integer] Issue number - # @param comment [String] Comment to be added - # @return [Sawyer::Resource] Comment - # @see https://developer.github.com/v3/issues/comments/#create-a-comment - # @example Add the comment "Almost to v1" to Issue #23 on octokit/octokit.rb - # Octokit.add_comment("octokit/octokit.rb", 23, "Almost to v1") - def add_comment(repo, number, comment, options = {}) - post "#{Repository.path repo}/issues/#{number}/comments", options.merge({ body: comment }) - end - - # Update a single comment on an issue - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param number [Integer] Comment number - # @param comment [String] Body of the comment which will replace the existing body. - # @return [Sawyer::Resource] Comment - # @see https://developer.github.com/v3/issues/comments/#edit-a-comment - # @example Update the comment #1194549 with body "I've started this on my 25-issue-comments-v3 fork" on an issue on octokit/octokit.rb - # Octokit.update_comment("octokit/octokit.rb", 1194549, "Almost to v1, added this on my fork") - def update_comment(repo, number, comment, options = {}) - patch "#{Repository.path repo}/issues/comments/#{number}", options.merge({ body: comment }) - end - - # Delete a single comment - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param number [Integer] Comment number - # @return [Boolean] Success - # @see https://developer.github.com/v3/issues/comments/#delete-a-comment - # @example Delete the comment #1194549 on an issue on octokit/octokit.rb - # Octokit.delete_comment("octokit/octokit.rb", 1194549) - def delete_comment(repo, number, options = {}) - boolean_from_response :delete, "#{Repository.path repo}/issues/comments/#{number}", options - end - - # Get the timeline for an issue - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param number [Integer] Number ID of the comment - # @return [Sawyer::Resource] The timeline for this issue - # @see https://developer.github.com/v3/issues/timeline/ - # @example Get timeline for issue #1435 on octokit/octokit.rb - # Octokit.issue_timeline("octokit/octokit.rb", 1435) - def issue_timeline(repo, number, options = {}) - paginate "#{Repository.path repo}/issues/#{number}/timeline", options - end - - # Lists the available assignees for issues in a repository. - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @return [Array] List of GitHub users. - # @see https://developer.github.com/v3/issues/assignees/#list-assignees - # @example Get available assignees on repository octokit/octokit.rb - # Octokit.list_assignees("octokit/octokit.rb") - def list_assignees(repo, options = {}) - paginate "#{Repository.path repo}/assignees", options - end - - # Add assignees to an issue - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param number [Integer] Issue number - # @param assignees [Array] Assignees to be added - # @return [Sawyer::Resource] Issue - # @see https://developer.github.com/v3/issues/assignees/#add-assignees-to-an-issue - # @example Add assignees "pengwynn" and "joeyw" to Issue #23 on octokit/octokit.rb - # Octokit.add_assignees("octokit/octokit.rb", 23, ["pengwynn", "joeyw"]) - def add_assignees(repo, number, assignees, options = {}) - post "#{Repository.path repo}/issues/#{number}/assignees", options.merge({ assignees: assignees }) - end - - # Remove assignees from an issue - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param number [Integer] Issue number - # @param assignees [Array] Assignees to be removed - # @param options [Hash] Header params for request - # @return [Sawyer::Resource] Issue - # @see https://developer.github.com/v3/issues/assignees/#remove-assignees-from-an-issue - # @example Remove assignees "pengwynn" and "joeyw" from Issue #23 on octokit/octokit.rb - # Octokit.remove_assignees("octokit/octokit.rb", 23, ["pengwynn", "joeyw"]) - # - # @example Remove assignees "pengwynn" from Issue #23 on octokit/octokit.rb - # Octokit.remove_assignees("octokit/octokit.rb", 23, ["pengwynn"], - # :accept => "application/vnd.github.v3+json") - def remove_assignees(repo, number, assignees, options = {}) - delete "#{Repository.path repo}/issues/#{number}/assignees", options.merge({ assignees: assignees }) - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/labels.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/labels.rb deleted file mode 100644 index 99a9bbd0..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/labels.rb +++ /dev/null @@ -1,156 +0,0 @@ -# frozen_string_literal: true - -require 'erb' - -module Octokit - class Client - # Methods for the Issue Labels API - # - # @see https://developer.github.com/v3/issues/labels/ - module Labels - # List available labels for a repository - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @return [Array] A list of the labels across the repository - # @see https://developer.github.com/v3/issues/labels/#list-all-labels-for-this-repository - # @example List labels for octokit/octokit.rb - # Octokit.labels("octokit/octokit.rb") - def labels(repo, options = {}) - paginate "#{Repository.path repo}/labels", options - end - - # Get single label for a repository - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param name [String] Name of the label - # @return [Sawyer::Resource] A single label from the repository - # @see https://developer.github.com/v3/issues/labels/#get-a-single-label - # @example Get the "V3 Addition" label from octokit/octokit.rb - # Octokit.label("octokit/octokit.rb", "V3 Addition") - def label(repo, name, options = {}) - get "#{Repository.path repo}/labels/#{ERB::Util.url_encode(name)}", options - end - - # Add a label to a repository - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param label [String] A new label - # @param color [String] A color, in hex, without the leading # - # @return [Sawyer::Resource] The new label - # @see https://developer.github.com/v3/issues/labels/#create-a-label - # @example Add a new label "Version 1.0" with color "#cccccc" - # Octokit.add_label("octokit/octokit.rb", "Version 1.0", "cccccc") - def add_label(repo, label, color = 'ffffff', options = {}) - post "#{Repository.path repo}/labels", options.merge({ name: label, color: color }) - end - - # Update a label - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param label [String] The name of the label which will be updated - # @param options [Hash] A customizable set of options. - # @option options [String] :name An updated label name - # @option options [String] :color An updated color value, in hex, without leading # - # @return [Sawyer::Resource] The updated label - # @see https://developer.github.com/v3/issues/labels/#update-a-label - # @example Update the label "Version 1.0" with new color "#cceeaa" - # Octokit.update_label("octokit/octokit.rb", "Version 1.0", {:color => "cceeaa"}) - def update_label(repo, label, options = {}) - patch "#{Repository.path repo}/labels/#{ERB::Util.url_encode(label)}", options - end - - # Delete a label from a repository. - # - # This deletes the label from the repository, and removes it from all issues. - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param label [String] String name of the label - # @return [Boolean] Success - # @see https://developer.github.com/v3/issues/labels/#delete-a-label - # @example Delete the label "Version 1.0" from the repository. - # Octokit.delete_label!("octokit/octokit.rb", "Version 1.0") - def delete_label!(repo, label, options = {}) - boolean_from_response :delete, "#{Repository.path repo}/labels/#{ERB::Util.url_encode(label)}", options - end - - # Remove a label from an Issue - # - # This removes the label from the Issue - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param number [Integer] Number ID of the issue - # @param label [String] String name of the label - # @return [Array] A list of the labels currently on the issue - # @see https://developer.github.com/v3/issues/labels/#remove-a-label-from-an-issue - # @example Remove the label "Version 1.0" from the repository. - # Octokit.remove_label("octokit/octokit.rb", 23, "Version 1.0") - def remove_label(repo, number, label, options = {}) - delete "#{Repository.path repo}/issues/#{number}/labels/#{ERB::Util.url_encode(label)}", options - end - - # Remove all label from an Issue - # - # This removes the label from the Issue - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param number [Integer] Number ID of the issue - # @return [Boolean] Success of operation - # @see https://developer.github.com/v3/issues/labels/#remove-all-labels-from-an-issue - # @example Remove all labels from Issue #23 - # Octokit.remove_all_labels("octokit/octokit.rb", 23) - def remove_all_labels(repo, number, options = {}) - boolean_from_response :delete, "#{Repository.path repo}/issues/#{number}/labels", options - end - - # List labels for a given issue - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param number [Integer] Number ID of the issue - # @return [Array] A list of the labels currently on the issue - # @see https://developer.github.com/v3/issues/labels/#list-labels-on-an-issue - # @example List labels for octokit/octokit.rb, issue # 1 - # Octokit.labels_for_issue("octokit/octokit.rb", 1) - def labels_for_issue(repo, number, options = {}) - paginate "#{Repository.path repo}/issues/#{number}/labels", options - end - - # Add label(s) to an Issue - # - # @param repo [Integer, String, Repository, Hash] A Github repository - # @param number [Integer] Number ID of the issue - # @param labels [Array] An array of labels to apply to this Issue - # @return [Array] A list of the labels currently on the issue - # @see https://developer.github.com/v3/issues/labels/#add-labels-to-an-issue - # @example Add two labels for octokit/octokit.rb - # Octokit.add_labels_to_an_issue("octokit/octokit.rb", 10, ['V3 Transition', 'Improvement']) - def add_labels_to_an_issue(repo, number, labels) - post "#{Repository.path repo}/issues/#{number}/labels", labels - end - - # Replace all labels on an Issue - # - # @param repo [Integer, String, Repository, Hash] A Github repository - # @param number [Integer] Number ID of the issue - # @param labels [Array] An array of labels to use as replacement - # @return [Array] A list of the labels currently on the issue - # @see https://developer.github.com/v3/issues/labels/#replace-all-labels-for-an-issue - # @example Replace labels for octokit/octokit.rb Issue #10 - # Octokit.replace_all_labels("octokit/octokit.rb", 10, ['V3 Transition', 'Improvement']) - def replace_all_labels(repo, number, labels, _options = {}) - put "#{Repository.path repo}/issues/#{number}/labels", labels - end - - # Get labels for every issue in a milestone - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param number [Integer] Number ID of the milestone - # @return [Array] A list of the labels across the milestone - # @see http://developer.github.com/v3/issues/labels/#get-labels-for-every-issue-in-a-milestone - # @example List all labels for milestone #2 on octokit/octokit.rb - # Octokit.labels_for_milestone("octokit/octokit.rb", 2) - def labels_for_milestone(repo, number, options = {}) - paginate "#{Repository.path repo}/milestones/#{number}/labels", options - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/legacy_search.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/legacy_search.rb deleted file mode 100644 index 64caf9aa..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/legacy_search.rb +++ /dev/null @@ -1,42 +0,0 @@ -# frozen_string_literal: true - -module Octokit - class Client - # Methods for the Legacy Search API - # - # @see https://developer.github.com/v3/search/ - module LegacySearch - # Legacy repository search - # - # @see https://developer.github.com/v3/search/#search-repositories - # @param q [String] Search keyword - # @return [Array] List of repositories found - def legacy_search_repositories(q, options = {}) - get("legacy/repos/search/#{q}", options)['repositories'] - end - - # Legacy search issues within a repository - # - # @param repo [String, Repository, Hash] A GitHub repository - # @param search_term [String] The term to search for - # @param state [String] :state (open) open or closed. - # @return [Array] A list of issues matching the search term and state - # @example Search for 'test' in the open issues for sferik/rails_admin - # Octokit.search_issues("sferik/rails_admin", 'test', 'open') - def legacy_search_issues(repo, search_term, state = 'open', options = {}) - get("legacy/issues/search/#{Repository.new(repo)}/#{state}/#{search_term}", options)['issues'] - end - - # Search for user. - # - # @param search [String] User to search for. - # @return [Array] Array of hashes representing users. - # @see https://developer.github.com/v3/search/#search-users - # @example - # Octokit.search_users('pengwynn') - def legacy_search_users(search, options = {}) - get("legacy/user/search/#{search}", options)['users'] - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/licenses.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/licenses.rb deleted file mode 100644 index 4365b430..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/licenses.rb +++ /dev/null @@ -1,42 +0,0 @@ -# frozen_string_literal: true - -module Octokit - class Client - # Methods for licenses API - # - module Licenses - # List all licenses - # - # @see https://developer.github.com/v3/licenses/#list-all-licenses - # @return [Array] A list of licenses - # @example - # Octokit.licenses - def licenses(options = {}) - paginate 'licenses', options - end - - # List an individual license - # - # @see https://developer.github.com/v3/licenses/#get-an-individual-license - # @param license_name [String] The license name - # @return An individual license - # @example - # Octokit.license 'mit' - def license(license_name, options = {}) - get "licenses/#{license_name}", options - end - - # Returns the contents of the repository’s license file, if one is detected. - # - # @see https://developer.github.com/v3/licenses/#get-the-contents-of-a-repositorys-license - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @option options [String] :ref name of the Commit/Branch/Tag. Defaults to 'master'. - # @return [Sawyer::Resource] The detail of the license file - # @example - # Octokit.repository_license_contents 'benbalter/licensee' - def repository_license_contents(repo, options = {}) - get "#{Repository.path repo}/license", options - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/markdown.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/markdown.rb deleted file mode 100644 index f1de7990..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/markdown.rb +++ /dev/null @@ -1,27 +0,0 @@ -# frozen_string_literal: true - -module Octokit - class Client - # Methods for the Markdown API - # - # @see https://developer.github.com/v3/markdown/ - module Markdown - # Render an arbitrary Markdown document - # - # @param text [String] Markdown source - # @option options [String] (optional) :mode (`markdown` or `gfm`) - # @option options [String] (optional) :context Repo context - # @return [String] HTML renderization - # @see https://developer.github.com/v3/markdown/#render-an-arbitrary-markdown-document - # @example Render some GFM - # Octokit.markdown('Fixed in #111', :mode => "gfm", :context => "octokit/octokit.rb") - def markdown(text, options = {}) - options[:text] = text - options[:repo] = Repository.new(options[:repo]) if options[:repo] - options[:accept] = 'application/vnd.github.raw' - - post 'markdown', options - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/marketplace.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/marketplace.rb deleted file mode 100644 index 53d593e7..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/marketplace.rb +++ /dev/null @@ -1,56 +0,0 @@ -# frozen_string_literal: true - -module Octokit - class Client - # Methods for the Marketplace Listing API - # - # @see https://developer.github.com/v3/apps/marketplace/ - module Marketplace - # List all plans for an app's marketplace listing - # - # @param options [Hash] A customizable set of options - # - # @see https://developer.github.com/v3/apps/marketplace/#list-all-plans-for-your-marketplace-listing - # - # @return [Array] A list of plans - def list_plans(options = {}) - paginate '/marketplace_listing/plans', options - end - - # List all GitHub accounts on a specific plan - # - # @param plan_id [Integer] The id of the GitHub plan - # @param options [Hash] A customizable set of options - # - # @see https://developer.github.com/v3/apps/marketplace/#list-all-github-accounts-user-or-organization-on-a-specific-plan - # - # @return [Array] A list of accounts - def list_accounts_for_plan(plan_id, options = {}) - paginate "/marketplace_listing/plans/#{plan_id}/accounts", options - end - - # Get the plan associated with a given GitHub account - # - # @param account_id [Integer] The id of the GitHub account - # @param options [Hash] A customizable set of options - # - # @see https://developer.github.com/v3/apps/marketplace/#check-if-a-github-account-is-associated-with-any-marketplace-listing - # - # @return Account with plan details, or nil - def plan_for_account(account_id, options = {}) - get "/marketplace_listing/accounts/#{account_id}", options - end - - # Get user's Marketplace purchases - # - # @param options [Hash] A customizable set of options - # - # @see https://developer.github.com/v3/apps/marketplace/#get-a-users-marketplace-purchases - # - # @return [Array] A list of Marketplace purchases - def marketplace_purchases(options = {}) - get '/user/marketplace_purchases', options - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/meta.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/meta.rb deleted file mode 100644 index aa7d97ce..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/meta.rb +++ /dev/null @@ -1,20 +0,0 @@ -# frozen_string_literal: true - -module Octokit - class Client - # Methods for the Meta API - # - # @see https://developer.github.com/v3/meta/ - module Meta - # Get meta information about GitHub.com, the service. - # @see https://developer.github.com/v3/meta/#meta - # @return [Sawyer::Resource] Hash with meta information. - # @example Get GitHub meta information - # @client.github_meta - def meta(options = {}) - get 'meta', options - end - alias github_meta meta - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/milestones.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/milestones.rb deleted file mode 100644 index 07a41b9c..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/milestones.rb +++ /dev/null @@ -1,87 +0,0 @@ -# frozen_string_literal: true - -module Octokit - class Client - # Methods for the Issues Milestones API - # - # @see https://developer.github.com/v3/issues/milestones/ - module Milestones - # List milestones for a repository - # - # @param repository [Integer, String, Repository, Hash] A GitHub repository - # @param options [Hash] A customizable set of options. - # @option options [Integer] :milestone Milestone number. - # @option options [String] :state (open) State: open, closed, or all. - # @option options [String] :sort (created) Sort: created, updated, or comments. - # @option options [String] :direction (desc) Direction: asc or desc. - # @return [Array] A list of milestones for a repository. - # @see https://developer.github.com/v3/issues/milestones/#list-milestones-for-a-repository - # @example List milestones for a repository - # Octokit.list_milestones("octokit/octokit.rb") - def list_milestones(repository, options = {}) - paginate "#{Repository.path repository}/milestones", options - end - alias milestones list_milestones - - # Get a single milestone for a repository - # - # @param repository [Integer, String, Repository, Hash] A GitHub repository - # @param options [Hash] A customizable set of options. - # @option options [Integer] :milestone Milestone number. - # @return [Sawyer::Resource] A single milestone from a repository. - # @see https://developer.github.com/v3/issues/milestones/#get-a-single-milestone - # @example Get a single milestone for a repository - # Octokit.milestone("octokit/octokit.rb", 1) - def milestone(repository, number, options = {}) - get "#{Repository.path repository}/milestones/#{number}", options - end - - # Create a milestone for a repository - # - # @param repository [Integer, String, Repository, Hash] A GitHub repository - # @param title [String] A unique title. - # @param options [Hash] A customizable set of options. - # @option options [String] :state (open) State: open or closed. - # @option options [String] :description A meaningful description - # @option options [Time] :due_on Set if the milestone has a due date - # @return [Sawyer::Resource] A single milestone object - # @see https://developer.github.com/v3/issues/milestones/#create-a-milestone - # @example Create a milestone for a repository - # Octokit.create_milestone("octokit/octokit.rb", "0.7.0", {:description => 'Add support for v3 of Github API'}) - def create_milestone(repository, title, options = {}) - post "#{Repository.path repository}/milestones", options.merge({ title: title }) - end - - # Update a milestone for a repository - # - # @param repository [Integer, String, Repository, Hash] A GitHub repository - # @param number [String, Integer] ID of the milestone - # @param options [Hash] A customizable set of options. - # @option options [String] :title A unique title. - # @option options [String] :state (open) State: open or closed. - # @option options [String] :description A meaningful description - # @option options [Time] :due_on Set if the milestone has a due date - # @return [Sawyer::Resource] A single milestone object - # @see https://developer.github.com/v3/issues/milestones/#update-a-milestone - # @example Update a milestone for a repository - # Octokit.update_milestone("octokit/octokit.rb", 1, {:description => 'Add support for v3 of Github API'}) - def update_milestone(repository, number, options = {}) - patch "#{Repository.path repository}/milestones/#{number}", options - end - alias edit_milestone update_milestone - - # Delete a single milestone for a repository - # - # @param repository [Integer, String, Repository, Hash] A GitHub repository - # @param options [Hash] A customizable set of options. - # @option options [Integer] :milestone Milestone number. - # @return [Boolean] Success - # @see https://developer.github.com/v3/issues/milestones/#delete-a-milestone - # @example Delete a single milestone from a repository - # Octokit.delete_milestone("octokit/octokit.rb", 1) - def delete_milestone(repository, number, options = {}) - boolean_from_response :delete, "#{Repository.path repository}/milestones/#{number}", options - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/notifications.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/notifications.rb deleted file mode 100644 index 5e8236bc..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/notifications.rb +++ /dev/null @@ -1,167 +0,0 @@ -# frozen_string_literal: true - -module Octokit - class Client - # Methods for the Notifications API - # - # @see https://developer.github.com/v3/activity/notifications/ - module Notifications - # List your notifications - # - # @param options [Hash] Optional parameters - # @option options [Boolean] :all 'true' to show notifications marked as - # read. - # @option options [Boolean] :participating 'true' to show only - # notifications in which the user is directly participating or - # mentioned. - # @option options [String] :since Time filters out any notifications - # updated before the given time. The time should be passed in as UTC in - # the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. Ex. '2012-10-09T23:39:01Z' - # @return [Array] Array of notifications. - # @see https://developer.github.com/v3/activity/notifications/#list-your-notifications - # @example Get users notifications - # @client.notifications - # @example Get all notifications since a certain time. - # @client.notifications({all: true, since: '2012-10-09T23:39:01Z'}) - def notifications(options = {}) - paginate 'notifications', options - end - - # List your notifications in a repository - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param options [Hash] Optional parameters - # @option options [Boolean] :all 'true' to show notifications marked as - # read. - # @option options [Boolean] :participating 'true' to show only - # notifications in which the user is directly participating or - # mentioned. - # @option options [String] :since Time filters out any notifications - # updated before the given time. The time should be passed in as UTC in - # the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. Ex. '2012-10-09T23:39:01Z' - # @return [Array] Array of notifications. - # @see https://developer.github.com/v3/activity/notifications/#list-your-notifications-in-a-repository - # @example Get your notifications for octokit/octokit.rb - # @client.repository_notifications('octokit/octokit.rb') - # @example Get your notifications for octokit/octokit.rb since a time. - # @client.repository_notifications({since: '2012-10-09T23:39:01Z'}) - def repository_notifications(repo, options = {}) - paginate "#{Repository.path repo}/notifications", options - end - alias repo_notifications repository_notifications - - # Mark notifications as read - # - # @param options [Hash] Optional parameters - # @option options [Boolean] :unread Changes the unread status of the - # threads. - # @option options [Boolean] :read Inverse of 'unread'. - # @option options [String] :last_read_at ('Now') Describes the last point - # that notifications were checked. Anything updated since this time - # will not be updated. The time should be passed in as UTC in the - # ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. Ex. '2012-10-09T23:39:01Z' - # @return [Boolean] True if marked as read, false otherwise - # @see https://developer.github.com/v3/activity/notifications/#mark-as-read - # - # @example - # @client.mark_notifications_as_read - def mark_notifications_as_read(options = {}) - request :put, 'notifications', options - - last_response.status == 205 - end - - # Mark notifications from a specific repository as read - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param options [Hash] Optional parameters - # @option options [Boolean] :unread Changes the unread status of the - # threads. - # @option options [Boolean] :read Inverse of 'unread'. - # @option options [String] :last_read_at ('Now') Describes the last point - # that notifications were checked. Anything updated since this time - # will not be updated. The time should be passed in as UTC in the - # ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ. Ex. '2012-10-09T23:39:01Z' - # @return [Boolean] True if marked as read, false otherwise - # @see https://developer.github.com/v3/activity/notifications/#mark-notifications-as-read-in-a-repository - # @example - # @client.mark_notifications_as_read("octokit/octokit.rb") - def mark_repository_notifications_as_read(repo, options = {}) - request :put, "#{Repository.path repo}/notifications", options - - last_response.status == 205 - end - alias mark_repo_notifications_as_read mark_repository_notifications_as_read - - # List notifications for a specific thread - # - # @param thread_id [Integer] Id of the thread. - # @return [Array] Array of notifications. - # @see https://developer.github.com/v3/activity/notifications/#view-a-single-thread - # - # @example - # @client.notification_thread(1000) - def thread_notifications(thread_id, options = {}) - get "notifications/threads/#{thread_id}", options - end - - # Mark thread as read - # - # @param thread_id [Integer] Id of the thread to update. - # @return [Boolean] True if updated, false otherwise. - # @see https://developer.github.com/v3/activity/notifications/#mark-a-thread-as-read - # @example - # @client.mark_thread_as_read(1, :read => false) - def mark_thread_as_read(thread_id, options = {}) - request :patch, "notifications/threads/#{thread_id}", options - - last_response.status == 205 - end - - # Get thread subscription - # - # @param thread_id [Integer] Id of the thread. - # @return [Sawyer::Resource] Subscription. - # @see https://developer.github.com/v3/activity/notifications/#get-a-thread-subscription - # @example - # @client.thread_subscription(1) - def thread_subscription(thread_id, options = {}) - get "notifications/threads/#{thread_id}/subscription", options - end - - # Update thread subscription - # - # This lets you subscribe to a thread, or ignore it. Subscribing to a - # thread is unnecessary if the user is already subscribed to the - # repository. Ignoring a thread will mute all future notifications (until - # you comment or get @mentioned). - # - # @param thread_id [Integer] Id of the thread. - # @param options - # @option options [Boolean] :subscribed Determines if notifications - # should be received from this repository. - # @option options [Boolean] :ignored Deterimines if all notifications - # should be blocked from this repository. - # @return [Sawyer::Resource] Updated subscription. - # @see https://developer.github.com/v3/activity/notifications/#set-a-thread-subscription - # @example Subscribe to notifications - # @client.update_thread_subscription(1, :subscribed => true) - # @example Ignore notifications from a repo - # @client.update_thread_subscription(1, :ignored => true) - def update_thread_subscription(thread_id, options = {}) - put "notifications/threads/#{thread_id}/subscription", options - end - - # Delete a thread subscription - # - # @param thread_id [Integer] Id of the thread. - # @return [Boolean] True if delete successful, false otherwise. - # @see https://developer.github.com/v3/activity/notifications/#delete-a-thread-subscription - # @example - # @client.delete_thread_subscription(1) - def delete_thread_subscription(thread_id, options = {}) - boolean_from_response :delete, "notifications/threads/#{thread_id}/subscription", options - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/oauth_applications.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/oauth_applications.rb deleted file mode 100644 index 6db7197b..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/oauth_applications.rb +++ /dev/null @@ -1,116 +0,0 @@ -# frozen_string_literal: true - -module Octokit - class Client - # Methods for the OauthApplications API - # - # @see https://developer.github.com/v3/apps/oauth_applications - module OauthApplications - # Check if a token is valid. - # - # Applications can check if a token is valid without rate limits. - # - # @param access_token [String] 40 character GitHub OAuth access token - # - # @return [Sawyer::Resource] A single authorization for the authenticated user - # @see https://developer.github.com/v3/apps/oauth_applications/#check-a-token - # - # @example - # client = Octokit::Client.new(:client_id => 'abcdefg12345', :client_secret => 'secret') - # client.check_token('deadbeef1234567890deadbeef987654321') - def check_token(access_token, options = {}) - options[:access_token] = access_token - - key = options.delete(:client_id) || client_id - secret = options.delete(:client_secret) || client_secret - - as_app(key, secret) do |app_client| - app_client.post "applications/#{client_id}/token", options - end - end - alias check_application_authorization check_token - - # Reset a token - # - # Applications can reset a token without requiring a user to re-authorize. - # - # @param access_token [String] 40 character GitHub OAuth access token - # - # @return [Sawyer::Resource] A single authorization for the authenticated user - # @see https://developer.github.com/v3/apps/oauth_applications/#reset-a-token - # - # @example - # client = Octokit::Client.new(:client_id => 'abcdefg12345', :client_secret => 'secret') - # client.reset_token('deadbeef1234567890deadbeef987654321') - def reset_token(access_token, options = {}) - options[:access_token] = access_token - - key = options.delete(:client_id) || client_id - secret = options.delete(:client_secret) || client_secret - - as_app(key, secret) do |app_client| - app_client.patch "applications/#{client_id}/token", options - end - end - alias reset_application_authorization reset_token - - # Delete an app token - # - # Applications can revoke (delete) a token - # - # @param access_token [String] 40 character GitHub OAuth access token - # - # @return [Boolean] Result - # @see https://developer.github.com/v3/apps/oauth_applications/#delete-an-app-token - # - # @example - # client = Octokit::Client.new(:client_id => 'abcdefg12345', :client_secret => 'secret') - # client.delete_app_token('deadbeef1234567890deadbeef987654321') - def delete_app_token(access_token, options = {}) - options[:access_token] = access_token - - key = options.delete(:client_id) || client_id - secret = options.delete(:client_secret) || client_secret - - begin - as_app(key, secret) do |app_client| - app_client.delete "applications/#{client_id}/token", options - app_client.last_response.status == 204 - end - rescue Octokit::NotFound - false - end - end - alias delete_application_authorization delete_app_token - alias revoke_application_authorization delete_app_token - - # Delete an app authorization - # - # OAuth application owners can revoke a grant for their OAuth application and a specific user. - # - # @param access_token [String] 40 character GitHub OAuth access token - # - # @return [Boolean] Result - # @see https://developer.github.com/v3/apps/oauth_applications/#delete-an-app-token - # - # @example - # client = Octokit::Client.new(:client_id => 'abcdefg12345', :client_secret => 'secret') - # client.delete_app_authorization('deadbeef1234567890deadbeef987654321') - def delete_app_authorization(access_token, options = {}) - options[:access_token] = access_token - - key = options.delete(:client_id) || client_id - secret = options.delete(:client_secret) || client_secret - - begin - as_app(key, secret) do |app_client| - app_client.delete "applications/#{client_id}/grant", options - app_client.last_response.status == 204 - end - rescue Octokit::NotFound - false - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/objects.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/objects.rb deleted file mode 100644 index 0b3f5d7e..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/objects.rb +++ /dev/null @@ -1,141 +0,0 @@ -# frozen_string_literal: true - -module Octokit - class Client - # Methods for the Git Data API - # - # @see https://developer.github.com/v3/git/ - module Objects - # Get a single tree, fetching information about its root-level objects - # - # Pass :recursive => true in options to fetch information about all of the tree's objects, including those in subdirectories. - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param tree_sha [String] The SHA of the tree to fetch - # @return [Sawyer::Resource] A hash representing the fetched tree - # @see https://developer.github.com/v3/git/trees/#get-a-tree - # @see https://developer.github.com/v3/git/trees/#get-a-tree-recursively - # @example Fetch a tree and inspect the path of one of its files - # tree = Octokit.tree("octocat/Hello-World", "9fb037999f264ba9a7fc6274d15fa3ae2ab98312") - # tree.tree.first.path # => "file.rb" - # @example Fetch a tree recursively - # tree = Octokit.tree("octocat/Hello-World", "fc6274d15fa3ae2ab983129fb037999f264ba9a7", :recursive => true) - # tree.tree.first.path # => "subdir/file.txt" - def tree(repo, tree_sha, options = {}) - get "#{Repository.path repo}/git/trees/#{tree_sha}", options - end - - # Create a tree - # - # Pass :base_tree => "827efc6..." in options to update an existing tree with new data. - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param tree [Array] An array of hashes representing a tree structure - # @return [Sawyer::Resource] A hash representing the new tree - # @see https://developer.github.com/v3/git/trees/#create-a-tree - # @example Create a tree containing one file - # tree = Octokit.create_tree("octocat/Hello-World", [ { :path => "file.rb", :mode => "100644", :type => "blob", :sha => "44b4fc6d56897b048c772eb4087f854f46256132" } ]) - # tree.sha # => "cd8274d15fa3ae2ab983129fb037999f264ba9a7" - # tree.tree.first.path # => "file.rb" - def create_tree(repo, tree, options = {}) - parameters = { tree: tree } - post "#{Repository.path repo}/git/trees", options.merge(parameters) - end - - # Get a single blob, fetching its content and encoding - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param blob_sha [String] The SHA of the blob to fetch - # @return [Sawyer::Resource] A hash representing the fetched blob - # @see https://developer.github.com/v3/git/blobs/#get-a-blob - # @example Fetch a blob and inspect its contents - # blob = Octokit.blob("octocat/Hello-World", "827efc6d56897b048c772eb4087f854f46256132") - # blob.encoding # => "utf-8" - # blob.content # => "Foo bar baz" - # @example Fetch a base64-encoded blob and inspect its contents - # require "base64" - # blob = Octokit.blob("octocat/Hello-World", "827efc6d56897b048c772eb4087f854f46256132") - # blob.encoding # => "base64" - # blob.content # => "Rm9vIGJhciBiYXo=" - # Base64.decode64(blob.content) # => "Foo bar baz" - def blob(repo, blob_sha, options = {}) - get "#{Repository.path repo}/git/blobs/#{blob_sha}", options - end - - # Create a blob - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param content [String] Content of the blob - # @param encoding [String] The content's encoding. utf-8 and base64 are accepted. If your data cannot be losslessly sent as a UTF-8 string, you can base64 encode it - # @return [String] The new blob's SHA, e.g. 827efc6d56897b048c772eb4087f854f46256132 - # @see https://developer.github.com/v3/git/blobs/#create-a-blob - # @example Create a blob containing foo bar baz - # Octokit.create_blob("octocat/Hello-World", "foo bar baz") - # @example Create a blob containing foo bar baz, encoded using base64 - # require "base64" - # Octokit.create_blob("octocat/Hello-World", Base64.encode64("foo bar baz"), "base64") - def create_blob(repo, content, encoding = 'utf-8', options = {}) - parameters = { - content: content, - encoding: encoding - } - blob = post "#{Repository.path repo}/git/blobs", options.merge(parameters) - - blob.sha - end - - # Get a tag - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository. - # @param tag_sha [String] The SHA of the tag to fetch. - # @return [Sawyer::Resource] Hash representing the tag. - # @see https://developer.github.com/v3/git/tags/#get-a-tag - # @example Fetch a tag - # Octokit.tag('octokit/octokit.rb', '23aad20633f4d2981b1c7209a800db3014774e96') - def tag(repo, tag_sha, options = {}) - get "#{Repository.path repo}/git/tags/#{tag_sha}", options - end - - # Create a tag - # - # Requires authenticated client. - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository. - # @param tag [String] Tag string. - # @param message [String] Tag message. - # @param object_sha [String] SHA of the git object this is tagging. - # @param type [String] Type of the object we're tagging. Normally this is - # a `commit` but it can also be a `tree` or a `blob`. - # @param tagger_name [String] Name of the author of the tag. - # @param tagger_email [String] Email of the author of the tag. - # @param tagger_date [string] Timestamp of when this object was tagged. - # @return [Sawyer::Resource] Hash representing new tag. - # @see https://developer.github.com/v3/git/tags/#create-a-tag-object - # @example - # @client.create_tag( - # "octokit/octokit.rb", - # "v9000.0.0", - # "Version 9000\n", - # "f4cdf6eb734f32343ce3f27670c17b35f54fd82e", - # "commit", - # "Wynn Netherland", - # "wynn.netherland@gmail.com", - # "2012-06-03T17:03:11-07:00" - # ) - def create_tag(repo, tag, message, object_sha, type, tagger_name, tagger_email, tagger_date, options = {}) - options.merge!( - tag: tag, - message: message, - object: object_sha, - type: type, - tagger: { - name: tagger_name, - email: tagger_email, - date: tagger_date - } - ) - post "#{Repository.path repo}/git/tags", options - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/organizations.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/organizations.rb deleted file mode 100644 index b4b0e7ac..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/organizations.rb +++ /dev/null @@ -1,864 +0,0 @@ -# frozen_string_literal: true - -module Octokit - class Client - # Methods for the Organizations API - # - # @see https://developer.github.com/v3/orgs/ - module Organizations - # Get an organization - # - # @param org [String, Integer] Organization GitHub login or id. - # @return [Sawyer::Resource] Hash representing GitHub organization. - # @see https://developer.github.com/v3/orgs/#get-an-organization - # @example - # Octokit.organization('github') - # @example - # Octokit.org('github') - def organization(org, options = {}) - get Organization.path(org), options - end - alias org organization - - # Update an organization. - # - # Requires authenticated client with proper organization permissions. - # - # @param org [String, Integer] Organization GitHub login or id. - # @param values [Hash] The updated organization attributes. - # @option values [String] :billing_email Billing email address. This address is not publicized. - # @option values [String] :company Company name. - # @option values [String] :email Publicly visible email address. - # @option values [String] :location Location of organization. - # @option values [String] :name GitHub username for organization. - # @option values [String] :default_repository_permission The default permission members have on organization repositories. - # @option values [Boolean] :members_can_create_repositories Set true to allow members to create repositories on the organization. - # @return [Sawyer::Resource] Hash representing GitHub organization. - # @see https://developer.github.com/v3/orgs/#edit-an-organization - # @example - # @client.update_organization('github', { - # :billing_email => 'support@github.com', - # :company => 'GitHub', - # :email => 'support@github.com', - # :location => 'San Francisco', - # :name => 'github' - # }) - # @example - # @client.update_org('github', {:company => 'Unicorns, Inc.'}) - def update_organization(org, values, options = {}) - patch Organization.path(org), options.merge(values) - end - alias update_org update_organization - - # Delete an organization. - # - # Requires authenticated organization owner. - # - # @param org [String, Integer] Organization login or ID. - # @return [Boolean] True if deletion successful, otherwise false. - # @see https://docs.github.com/rest/orgs/orgs#delete-an-organization - # @example - # @client.delete_organization("my-org") - # @example - # @client.delete_org("my-org") - def delete_organization(org) - boolean_from_response :delete, Organization.path(org) - end - alias delete_org delete_organization - - # Get organizations for a user. - # - # Nonauthenticated calls to this method will return organizations that - # the user is a public member. - # - # Use an authenticated client to get both public and private organizations - # for a user. - # - # Calling this method on a `@client` will return that users organizations. - # Private organizations are included only if the `@client` is authenticated. - # - # @param user [Integer, String] GitHub user login or id of the user to get - # list of organizations. - # @return [Array] Array of hashes representing organizations. - # @see https://developer.github.com/v3/orgs/#list-your-organizations - # @see https://developer.github.com/v3/orgs/#list-user-organizations - # @example - # Octokit.organizations('pengwynn') - # @example - # @client.organizations('pengwynn') - # @example - # Octokit.orgs('pengwynn') - # @example - # Octokit.list_organizations('pengwynn') - # @example - # Octokit.list_orgs('pengwynn') - # @example - # @client.organizations - def organizations(user = nil, options = {}) - paginate "#{User.path user}/orgs", options - end - alias list_organizations organizations - alias list_orgs organizations - alias orgs organizations - - # List all GitHub organizations - # - # This provides a list of every organization, in the order that they - # were created. - # - # @param options [Hash] Optional options. - # @option options [Integer] :since The integer ID of the last - # Organization that you’ve seen. - # - # @see https://developer.github.com/v3/orgs/#list-all-organizations - # - # @return [Array] List of GitHub organizations. - def all_organizations(options = {}) - paginate 'organizations', options - end - alias all_orgs all_organizations - - # List organization repositories - # - # Public repositories are available without authentication. Private repos - # require authenticated organization member. - # - # @param org [String, Integer] Organization GitHub login or id for which - # to list repos. - # @option options [String] :type ('all') Filter by repository type. - # `all`, `public`, `member`, `sources`, `forks`, or `private`. - # - # @return [Array] List of repositories - # @see https://developer.github.com/v3/repos/#list-organization-repositories - # @example - # Octokit.organization_repositories('github') - # @example - # Octokit.org_repositories('github') - # @example - # Octokit.org_repos('github') - # @example - # @client.org_repos('github', {:type => 'private'}) - def organization_repositories(org, options = {}) - paginate "#{Organization.path org}/repos", options - end - alias org_repositories organization_repositories - alias org_repos organization_repositories - - # Get organization members - # - # Public members of the organization are returned by default. An - # authenticated client that is a member of the GitHub organization - # is required to get private members. - # - # @param org [String, Integer] Organization GitHub login or id. - # @return [Array] Array of hashes representing users. - # @see https://developer.github.com/v3/orgs/members/#members-list - # @example - # Octokit.organization_members('github') - # @example - # Octokit.org_members('github') - def organization_members(org, options = {}) - options = options.dup - path = 'public_' if options.delete(:public) - paginate "#{Organization.path org}/#{path}members", options - end - alias org_members organization_members - - # Get organization public members - # - # Lists the public members of an organization - # - # @param org [String] Organization GitHub username. - # @return [Array] Array of hashes representing users. - # @see https://developer.github.com/v3/orgs/members/#public-members-list - # @example - # Octokit.organization_public_members('github') - # @example - # Octokit.org_public_members('github') - def organization_public_members(org, options = {}) - organization_members org, options.merge(public: true) - end - alias org_public_members organization_public_members - - # Check if a user is a member of an organization. - # - # Use this to check if another user is a member of an organization that - # you are a member. If you are not in the organization you are checking, - # use .organization_public_member? instead. - # - # @param org [String, Integer] Organization GitHub login or id. - # @param user [String] GitHub username of the user to check. - # - # @return [Boolean] Is a member? - # - # @see https://developer.github.com/v3/orgs/members/#check-membership - # - # @example Check if a user is in your organization - # @client.organization_member?('your_organization', 'pengwynn') - # => false - def organization_member?(org, user, options = {}) - result = boolean_from_response(:get, "#{Organization.path org}/members/#{user}", options) - if !result && last_response && last_response.status == 302 - boolean_from_response :get, last_response.headers['Location'] - else - result - end - end - alias org_member? organization_member? - - # Check if a user is a public member of an organization. - # - # If you are checking for membership of a user of an organization that - # you are in, use .organization_member? instead. - # - # @param org [String, Integer] Organization GitHub login or id. - # @param user [String] GitHub username of the user to check. - # - # @return [Boolean] Is a public member? - # - # @see https://developer.github.com/v3/orgs/members/#check-public-membership - # - # @example Check if a user is a hubbernaut - # @client.organization_public_member?('github', 'pengwynn') - # => true - def organization_public_member?(org, user, options = {}) - boolean_from_response :get, "#{Organization.path org}/public_members/#{user}", options - end - alias org_public_member? organization_public_member? - - # List pending organization invitations - # - # Requires authenticated organization member. - # - # @param org [String, Integer] Organization GitHub login or id. - # @return [Array] Array of hashes representing invitations. - # @see https://developer.github.com/v3/orgs/members/#list-pending-organization-invitations - # - # @example - # @client.organization_invitations('github') - def organization_invitations(org, options = {}) - get "#{Organization.path org}/invitations", options - end - alias org_invitations organization_invitations - - # List outside collaborators for an organization - # - # Requires authenticated organization members. - # - # @param org [String, Integer] Organization GitHub login or id. - # @return [Array] Array of hashes representing users. - # @see https://developer.github.com/v3/orgs/outside_collaborators/#list-outside-collaborators - # - # @example - # @client.outside_collaborators('github') - def outside_collaborators(org, options = {}) - paginate "#{Organization.path org}/outside_collaborators", options - end - - # Remove outside collaborator from an organization - # - # Requires authenticated organization members. - # - # @param org [String, Integer] Organization GitHub login or id. - # @param user [String] GitHub username to be removed as outside collaborator - # @return [Boolean] Return true if outside collaborator removed from organization, false otherwise. - # @see https://developer.github.com/v3/orgs/outside-collaborators/#remove-outside-collaborator - # - # @example - # @client.remove_outside_collaborator('github', 'lizzhale') - def remove_outside_collaborator(org, user, options = {}) - boolean_from_response :delete, "#{Organization.path org}/outside_collaborators/#{user}", options - end - - # Converts an organization member to an outside collaborator - # - # Requires authenticated organization members. - # - # @param org [String, Integer] Organization GitHub login or id. - # @param user [String] GitHub username to be removed as outside collaborator - # @return [Boolean] Return true if outside collaborator removed from organization, false otherwise. - # @see https://developer.github.com/v3/orgs/outside-collaborators/#convert-member-to-outside-collaborator - # - # @example - # @client.convert_to_outside_collaborator('github', 'lizzhale') - def convert_to_outside_collaborator(org, user, options = {}) - boolean_from_response :put, "#{Organization.path org}/outside_collaborators/#{user}", options - end - - # List teams - # - # Requires authenticated organization member. - # - # @param org [String, Integer] Organization GitHub login or id. - # @return [Array] Array of hashes representing teams. - # @see https://developer.github.com/v3/orgs/teams/#list-teams - # @example - # @client.organization_teams('github') - # @example - # @client.org_teams('github') - def organization_teams(org, options = {}) - paginate "#{Organization.path org}/teams", options - end - alias org_teams organization_teams - - # Create team - # - # Requires authenticated organization owner. - # - # @param org [String, Integer] Organization GitHub login or id. - # @option options [String] :name Team name. - # @option options [Array] :repo_names Repositories for the team. - # @option options [Array] :maintainers Maintainers for the team. - # @option options [Integer] :parent_team_id ID of a team to set as the parent team. - # @return [Sawyer::Resource] Hash representing new team. - # @see https://developer.github.com/v3/orgs/teams/#create-team - # @example - # @client.create_team('github', { - # :name => 'Designers', - # :repo_names => ['github/dotfiles'] - # }) - def create_team(org, options = {}) - if options.key?(:permission) - octokit_warn 'Deprecated: Passing :permission option to #create_team. Assign team repository permission by passing :permission to #add_team_repository instead.' - end - post "#{Organization.path org}/teams", options - end - - # Get team - # - # Requires authenticated organization member. - # - # @param team_id [Integer] Team id. - # @return [Sawyer::Resource] Hash representing team. - # @see https://developer.github.com/v3/orgs/teams/#get-team - # @example - # @client.team(100000) - def team(team_id, options = {}) - get "teams/#{team_id}", options - end - - # Get team by name and org - # - # Requires authenticated organization member. - # - # @param org [String, Integer] Organization GitHub login or id. - # @param team_slug [String] Team slug. - # @return [Sawyer::Resource] Hash representing team. - # @see https://developer.github.com/v3/teams/#get-team-by-name - # @example - # @client.team_by_name("github", "justice-league") - def team_by_name(org, team_slug, options = {}) - get "#{Organization.path(org)}/teams/#{team_slug}", options - end - - # Check team permissions for a repository - # - # Requires authenticated organization member. - # - # @param org [String, Integer] Organization GitHub login or id. - # @param team_slug_or_id [String, Integer] Team slug or Team ID. - # @param owner [String] Owner name for the repository. - # @param repo [String] Name of the repo to check permissions against. - # @return [String, Sawyer::Resource] Depending on options it may be an empty string or a resource. - # @example - # # Check whether the team has any permissions with the repository - # @client.team_permissions_for_repo("github", "justice-league", "octocat", "hello-world") - # - # @example - # # Get the full repository object including the permissions level and role for the team - # @client.team_permissions_for_repo("github", "justice-league", "octocat", "hello-world", :accept => 'application/vnd.github.v3.repository+json') - # @see https://docs.github.com/en/rest/teams/teams#check-team-permissions-for-a-repository - def team_permissions_for_repo(org, team_slug_or_id, owner, repo, options = {}) - get "#{Organization.path(org)}/teams/#{team_slug_or_id}/repos/#{owner}/#{repo}", options - end - - # List child teams - # - # Requires authenticated organization member. - # - # @param team_id [Integer] Team id. - # @return [Sawyer::Resource] Hash representing team. - # @see https://developer.github.com/v3/orgs/teams/#list-child-teams - # @example - # @client.child_teams(100000, :accept => "application/vnd.github.hellcat-preview+json") - def child_teams(team_id, options = {}) - paginate "teams/#{team_id}/teams", options - end - - # Update team - # - # Requires authenticated organization owner. - # - # @param team_id [Integer] Team id. - # @option options [String] :name Team name. - # @option options [String] :permission Permissions the team has for team repositories. - # - # `pull` - team members can pull, but not push to or administer these repositories. - # `push` - team members can pull and push, but not administer these repositories. - # `admin` - team members can pull, push and administer these repositories. - # @option options [Integer] :parent_team_id ID of a team to set as the parent team. - # @return [Sawyer::Resource] Hash representing updated team. - # @see https://developer.github.com/v3/orgs/teams/#edit-team - # @example - # @client.update_team(100000, { - # :name => 'Front-end Designers', - # :permission => 'push' - # }) - def update_team(team_id, options = {}) - patch "teams/#{team_id}", options - end - - # Delete team - # - # Requires authenticated organization owner. - # - # @param team_id [Integer] Team id. - # @return [Boolean] True if deletion successful, false otherwise. - # @see https://developer.github.com/v3/orgs/teams/#delete-team - # @example - # @client.delete_team(100000) - def delete_team(team_id, options = {}) - boolean_from_response :delete, "teams/#{team_id}", options - end - - # List team members - # - # Requires authenticated organization member. - # - # @param team_id [Integer] Team id. - # @return [Array] Array of hashes representing users. - # @see https://developer.github.com/v3/orgs/teams/#list-team-members - # @example - # @client.team_members(100000) - def team_members(team_id, options = {}) - paginate "teams/#{team_id}/members", options - end - - # Add team member - # - # Requires authenticated organization owner or member with team - # `admin` permission. - # - # @param team_id [Integer] Team id. - # @param user [String] GitHub username of new team member. - # @return [Boolean] True on successful addition, false otherwise. - # @see https://developer.github.com/v3/orgs/teams/#add-team-member - # @example - # @client.add_team_member(100000, 'pengwynn') - # - # @example - # # Opt-in to future behavior for this endpoint. Adds the member to the - # # team if they're already an org member. If not, the method will return - # # 422 and indicate the user should call the new Team Membership endpoint. - # @client.add_team_member \ - # 100000, - # 'pengwynn', - # :accept => "application/vnd.github.the-wasp-preview+json" - # @see https://developer.github.com/changes/2014-08-05-team-memberships-api/ - def add_team_member(team_id, user, options = {}) - # There's a bug in this API call. The docs say to leave the body blank, - # but it fails if the body is both blank and the content-length header - # is not 0. - boolean_from_response :put, "teams/#{team_id}/members/#{user}", options.merge({ name: user }) - end - - # Remove team member - # - # Requires authenticated organization owner or member with team - # `admin` permission. - # - # @param team_id [Integer] Team id. - # @param user [String] GitHub username of the user to boot. - # @return [Boolean] True if user removed, false otherwise. - # @see https://developer.github.com/v3/orgs/teams/#remove-team-member - # @example - # @client.remove_team_member(100000, 'pengwynn') - def remove_team_member(team_id, user, options = {}) - boolean_from_response :delete, "teams/#{team_id}/members/#{user}", options - end - - # Check if a user is a member of a team. - # - # Use this to check if another user is a member of a team that - # you are a member. - # - # @param team_id [Integer] Team id. - # @param user [String] GitHub username of the user to check. - # - # @return [Boolean] Is a member? - # - # @see https://developer.github.com/v3/orgs/teams/#get-team-member - # - # @example Check if a user is in your team - # @client.team_member?(100000, 'pengwynn') - # => false - def team_member?(team_id, user, options = {}) - boolean_from_response :get, "teams/#{team_id}/members/#{user}", options - end - - # List pending team invitations - # - # Requires authenticated organization member. - # - # @param team_id [Integer] Team id. - # @return [Array] Array of hashes representing invitations. - # @see https://developer.github.com/v3/orgs/teams/#list-pending-team-invitations - # - # @example - # @client.team_invitations('github') - def team_invitations(team_id, options = {}) - get "teams/#{team_id}/invitations", options - end - - # List team repositories - # - # Requires authenticated organization member. - # - # @param team_id [Integer] Team id. - # @return [Array] Array of hashes representing repositories. - # @see https://developer.github.com/v3/orgs/teams/#list-team-repos - # @example - # @client.team_repositories(100000) - # @example - # @client.team_repos(100000) - def team_repositories(team_id, options = {}) - paginate "teams/#{team_id}/repos", options - end - alias team_repos team_repositories - - # Check if a repo is managed by a specific team - # - # @param team_id [Integer] Team ID. - # @param repo [String, Hash, Repository] A GitHub repository. - # @return [Boolean] True if managed by a team. False if not managed by - # the team OR the requesting user does not have authorization to access - # the team information. - # @see https://developer.github.com/v3/orgs/teams/#check-if-a-team-manages-a-repository - # @example - # @client.team_repository?(8675309, 'octokit/octokit.rb') - # @example - # @client.team_repo?(8675309, 'octokit/octokit.rb') - def team_repository?(team_id, repo, _options = {}) - boolean_from_response :get, "teams/#{team_id}/repos/#{Repository.new(repo)}" - end - alias team_repo? team_repository? - - # Add team repository - # - # This can also be used to update the permission of an existing team - # - # Requires authenticated user to be an owner of the organization that the - # team is associated with. Also, the repo must be owned by the - # organization, or a direct form of a repo owned by the organization. - # - # @param team_id [Integer] Team id. - # @param repo [String, Hash, Repository] A GitHub repository. - # @option options [String] :permission The permission to grant the team. - # Only valid on organization-owned repositories. - # Can be one of: pull, push, or admin. - # If not specified, the team's permission attribute will be - # used to determine what permission to grant the team on this repository. - # @return [Boolean] True if successful, false otherwise. - # @see Octokit::Repository - # @see https://developer.github.com/v3/orgs/teams/#add-or-update-team-repository - # @example - # @client.add_team_repository(100000, 'github/developer.github.com') - # @example - # @client.add_team_repo(100000, 'github/developer.github.com') - # @example Add a team with admin permissions - # @client.add_team_repository(100000, 'github/developer.github.com', permission: 'admin') - def add_team_repository(team_id, repo, options = {}) - boolean_from_response :put, "teams/#{team_id}/repos/#{Repository.new(repo)}", options - end - alias add_team_repo add_team_repository - - # Remove team repository - # - # Removes repository from team. Does not delete the repository. - # - # Requires authenticated organization owner. - # - # @param team_id [Integer] Team id. - # @param repo [String, Hash, Repository] A GitHub repository. - # @return [Boolean] Return true if repo removed from team, false otherwise. - # @see Octokit::Repository - # @see https://developer.github.com/v3/orgs/teams/#remove-team-repository - # @example - # @client.remove_team_repository(100000, 'github/developer.github.com') - # @example - # @client.remove_team_repo(100000, 'github/developer.github.com') - def remove_team_repository(team_id, repo, _options = {}) - boolean_from_response :delete, "teams/#{team_id}/repos/#{Repository.new(repo)}" - end - alias remove_team_repo remove_team_repository - - # Remove organization member - # - # Requires authenticated organization owner or member with team `admin` access. - # - # @param org [String, Integer] Organization GitHub login or id. - # @param user [String] GitHub username of user to remove. - # @return [Boolean] True if removal is successful, false otherwise. - # @see https://developer.github.com/v3/orgs/members/#remove-a-member - # @example - # @client.remove_organization_member('github', 'pengwynn') - # @example - # @client.remove_org_member('github', 'pengwynn') - def remove_organization_member(org, user, options = {}) - # this is a synonym for: for team in org.teams: remove_team_member(team.id, user) - # provided in the GH API v3 - boolean_from_response :delete, "#{Organization.path org}/members/#{user}", options - end - alias remove_org_member remove_organization_member - - # Publicize a user's membership of an organization - # - # Requires authenticated organization owner. - # - # @param org [String, Integer] Organization GitHub login or id. - # @param user [String] GitHub username of user to publicize. - # @return [Boolean] True if publicization successful, false otherwise. - # @see https://developer.github.com/v3/orgs/members/#publicize-a-users-membership - # @example - # @client.publicize_membership('github', 'pengwynn') - def publicize_membership(org, user, options = {}) - boolean_from_response :put, "#{Organization.path org}/public_members/#{user}", options - end - - # Conceal a user's membership of an organization. - # - # Requires authenticated organization owner. - # - # @param org [String, Integer] Organization GitHub login or id. - # @param user [String] GitHub username of user to unpublicize. - # @return [Boolean] True of unpublicization successful, false otherwise. - # @see https://developer.github.com/v3/orgs/members/#conceal-a-users-membership - # @example - # @client.unpublicize_membership('github', 'pengwynn') - # @example - # @client.conceal_membership('github', 'pengwynn') - def unpublicize_membership(org, user, options = {}) - boolean_from_response :delete, "#{Organization.path org}/public_members/#{user}", options - end - alias conceal_membership unpublicize_membership - - # List all teams for the authenticated user across all their orgs - # - # @return [Array] Array of team resources. - # @see https://developer.github.com/v3/orgs/teams/#list-user-teams - def user_teams(options = {}) - paginate 'user/teams', options - end - - # Check if a user has a team membership. - # - # @param team_id [Integer] Team id. - # @param user [String] GitHub username of the user to check. - # - # @return [Sawyer::Resource] Hash of team membership info - # - # @see https://developer.github.com/v3/orgs/teams/#get-team-membership - # - # @example Check if a user has a membership for a team - # @client.team_membership(1234, 'pengwynn') - def team_membership(team_id, user, options = {}) - get "teams/#{team_id}/memberships/#{user}", options - end - - # Add or invite a user to a team - # - # @param team_id [Integer] Team id. - # @param user [String] GitHub username of the user to invite. - # - # @return [Sawyer::Resource] Hash of team membership info - # - # @see https://developer.github.com/v3/orgs/teams/#add-or-update-team-membership - # - # @example Check if a user has a membership for a team - # @client.add_team_membership(1234, 'pengwynn') - def add_team_membership(team_id, user, options = {}) - put "teams/#{team_id}/memberships/#{user}", options - end - - # Remove team membership - # - # @param team_id [Integer] Team id. - # @param user [String] GitHub username of the user to boot. - # @return [Boolean] True if user removed, false otherwise. - # @see https://developer.github.com/v3/orgs/teams/#remove-team-membership - # @example - # @client.remove_team_membership(100000, 'pengwynn') - def remove_team_membership(team_id, user, options = {}) - boolean_from_response :delete, "teams/#{team_id}/memberships/#{user}", options - end - - # List all organizations memberships for the authenticated user - # - # @return [Array] Array of organizations memberships. - # @see https://developer.github.com/v3/orgs/members/#list-your-organization-memberships - def organization_memberships(options = {}) - paginate 'user/memberships/orgs', options - end - alias org_memberships organization_memberships - - # Get an organization membership - # - # @param org [Integer, String] The GitHub Organization. - # @option options [String] :user The login of the user, otherwise authenticated user. - # @return [Sawyer::Resource] Hash representing the organization membership. - # @see https://developer.github.com/v3/orgs/members/#get-your-organization-membership - # @see https://developer.github.com/v3/orgs/members/#get-organization-membership - def organization_membership(org, options = {}) - options = options.dup - if user = options.delete(:user) - get "#{Organization.path(org)}/memberships/#{user}", options - else - get "user/memberships/orgs/#{org}", options - end - end - alias org_membership organization_membership - - # Edit an organization membership - # - # @param org [String, Integer] Organization GitHub login or id. - # @option options [String] :role The role of the user in the organization. - # @option options [String] :state The state that the membership should be in. - # @option options [String] :user The login of the user, otherwise authenticated user. - # @return [Sawyer::Resource] Hash representing the updated organization membership. - # @see https://developer.github.com/v3/orgs/members/#edit-your-organization-membership - # @see https://developer.github.com/v3/orgs/members/#add-or-update-organization-membership - def update_organization_membership(org, options = {}) - options = options.dup - if user = options.delete(:user) - options.delete(:state) - put "#{Organization.path(org)}/memberships/#{user}", options - else - options.delete(:role) - patch "user/memberships/orgs/#{org}", options - end - end - alias update_org_membership update_organization_membership - - # Remove an organization membership - # - # @param org [String, Integer] Organization GitHub login or id. - # @return [Boolean] Success - # @see https://developer.github.com/v3/orgs/members/#remove-organization-membership - def remove_organization_membership(org, options = {}) - options = options.dup - user = options.delete(:user) - user && boolean_from_response(:delete, "#{Organization.path(org)}/memberships/#{user}", options) - end - alias remove_org_membership remove_organization_membership - - # Initiates the generation of a migration archive. - # - # Requires authenticated organization owner. - # - # @param org [String, Integer] Organization GitHub login or id. - # @param repositories [Array] :repositories Repositories for the organization. - # @option options [Boolean, optional] :lock_repositories Indicates whether repositories should be locked during migration - # @return [Sawyer::Resource] Hash representing the new migration. - # @example - # @client.start_migration('github', ['github/dotfiles']) - # @see https://docs.github.com/en/rest/reference/migrations#start-an-organization-migration - def start_migration(org, repositories, options = {}) - options[:repositories] = repositories - post "#{Organization.path(org)}/migrations", options - end - - # Lists the most recent migrations. - # - # Requires authenticated organization owner. - # - # @param org [String, Integer] Organization GitHub login or id. - # @return [Array] Array of migration resources. - # @see https://docs.github.com/en/rest/reference/migrations#list-organization-migrations - def migrations(org, options = {}) - paginate "#{Organization.path(org)}/migrations", options - end - - # Fetches the status of a migration. - # - # Requires authenticated organization owner. - # - # @param org [String, Integer] Organization GitHub login or id. - # @param id [Integer] ID number of the migration. - # @see https://docs.github.com/en/rest/reference/migrations#get-an-organization-migration-status - def migration_status(org, id, options = {}) - get "#{Organization.path(org)}/migrations/#{id}", options - end - - # Fetches the URL to a migration archive. - # - # Requires authenticated organization owner. - # - # @param org [String, Integer] Organization GitHub login or id. - # @param id [Integer] ID number of the migration. - # @see https://docs.github.com/en/rest/reference/migrations#download-an-organization-migration-archive - def migration_archive_url(org, id, options = {}) - url = "#{Organization.path(org)}/migrations/#{id}/archive" - - response = client_without_redirects(options).get(url) - response.headers['location'] - end - - # Deletes a previous migration archive. - # - # Requires authenticated organization owner. - # - # @param org [String, Integer] Organization GitHub login or id. - # @param id [Integer] ID number of the migration. - # @see https://docs.github.com/en/rest/reference/migrations#delete-an-organization-migration-archive - def delete_migration_archive(org, id, options = {}) - delete "#{Organization.path(org)}/migrations/#{id}/archive", options - end - - # Unlock a previous migration archive. - # - # Requires authenticated organization owner. - # - # @param org [String, Integer] Organization GitHub login or id. - # @param id [Integer] ID number of the migration. - # @param repo [String] Name of the repository. - # @see https://docs.github.com/en/rest/reference/migrations#unlock-an-organization-repository - def unlock_repository(org, id, repo, options = {}) - delete "#{Organization.path(org)}/migrations/#{id}/repos/#{repo}/lock", options - end - - # Get GitHub Actions billing for an organization - # - # Requires authenticated organization owner. - # - # @param org [String, Integer] Organization GitHub login or id. - # @return [Sawyer::Resource] Hash representing GitHub Actions billing for an organization. - # @see https://docs.github.com/en/rest/reference/billing#get-github-actions-billing-for-an-organization - # - # @example - # @client.billing_actions('github') - def billing_actions(org) - get "#{Organization.path(org)}/settings/billing/actions" - end - - # Get organization audit log. - # - # Gets the audit log for an organization. - # - # @param org [String, Integer] Organization GitHub login or id for which - # to retrieve the audit log. - # @option options [String] :include ('all') Filter by event type. - # `all`, `git` or `web`. - # @option options [String] :phrase A search phrase. - # @option options [String] :order ('desc') The order of audit log events. To list newest events first, specify desc. - # To list oldest events first, specify asc. - # - # @return [Array] List of events - # @see https://docs.github.com/en/enterprise-cloud@latest/rest/orgs/orgs#get-the-audit-log-for-an-organization - # @example - # Octokit.organization_audit_log('github', {include: 'all', phrase: 'action:org.add_member created:>2022-08-29 user:octocat'}) - def organization_audit_log(org, options = {}) - paginate "#{Organization.path org}/audit-log", options - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/pages.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/pages.rb deleted file mode 100644 index e1e7b08f..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/pages.rb +++ /dev/null @@ -1,61 +0,0 @@ -# frozen_string_literal: true - -module Octokit - class Client - # Methods for the Pages API - # - # @see https://developer.github.com/v3/repos/pages/ - module Pages - # List Pages information for a repository - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @return Sawyer::Resource A GitHub Pages resource - # @see https://developer.github.com/v3/repos/pages/#get-information-about-a-pages-site - def pages(repo, options = {}) - get "#{Repository.path repo}/pages", options - end - - # Get a specific Pages build by ID - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param id [Integer, String] Build ID - # @return [Sawyer::Resource] Pages build information - # @see https://developer.github.com/v3/repos/pages/#list-a-specific-pages-build - # @example - # Octokit.pages_build("github/developer.github.com", 5472601) - def pages_build(repo, id, options = {}) - get "#{Repository.path repo}/pages/builds/#{id}", options - end - - # List Pages builds for a repository - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @return [Array] A list of build history for a repository. - # @see https://developer.github.com/v3/repos/pages/#list-pages-builds - def pages_builds(repo, options = {}) - get "#{Repository.path repo}/pages/builds", options - end - alias list_pages_builds pages_builds - - # List the latest Pages build information for a repository - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @return Sawyer::Resource A GitHub Pages resource about a build - # @see https://developer.github.com/v3/repos/pages/#list-latest-pages-build - def latest_pages_build(repo, options = {}) - get "#{Repository.path repo}/pages/builds/latest", options - end - - # Request a page build for the latest revision of the default branch - # - # You can only request builds for your repositories - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @return [Sawyer::Resource] Request result - # @see https://developer.github.com/v3/repos/pages/#request-a-page-build - def request_page_build(repo, options = {}) - post "#{Repository.path repo}/pages/builds", options - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/projects.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/projects.rb deleted file mode 100644 index 619f3a89..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/projects.rb +++ /dev/null @@ -1,294 +0,0 @@ -# frozen_string_literal: true - -module Octokit - class Client - # Methods for Projects API - # - # @see https://docs.github.com/en/rest/projects - module Projects - # List projects for a repository - # - # Requires authenticated client - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @return [Array] Repository projects - # @see https://developer.github.com/v3/projects/#list-repository-projects - # @example - # @client.projects('octokit/octokit.rb') - def projects(repo, options = {}) - paginate "#{Repository.path repo}/projects", options - end - - # Create a project - # - # Requires authenticated client - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param name [String] Project name - # @option options [String] :body Body of the project - # @return [Sawyer::Resource] Fresh new project - # @see https://developer.github.com/v3/projects/#create-a-repository-project - # @example Create project with only a name - # @client.create_project('octokit/octokit.rb', 'implement new APIs') - # - # @example Create project with name and body - # @client.create_project('octokit/octokit.rb', 'bugs be gone', body: 'Fix all the bugs @joeyw creates') - def create_project(repo, name, options = {}) - options[:name] = name - post "#{Repository.path repo}/projects", options - end - - # List organization projects - # - # Requires authenticated client - # - # @param org [String] A GitHub organization - # @return [Array] Organization projects - # @see https://developer.github.com/v3/projects/#list-organization-projects - # @example - # @client.org_projects("octokit") - def org_projects(org, options = {}) - paginate "orgs/#{org}/projects", options - end - alias organization_projects org_projects - - # Create organization project - # - # Requires authenticated client - # - # @param org [String] A GitHub organization - # @param name [String] Project name - # @option options [String] :body Project body - # @return [Sawyer::Resource] Organization project - # @see https://developer.github.com/v3/projects/#create-an-organization-project - # @example Create with only a name - # @client.create_org_project("octocat", "make more octocats") - # @example Create a project with name and body - # @client.create_org_project("octokit", "octocan", body: 'Improve clients') - def create_org_project(org, name, options = {}) - options[:name] = name - post "orgs/#{org}/projects", options - end - alias create_organization_project create_org_project - - # Get a project by id - # - # @param id [Integer] Project id - # @return [Sawyer::Resource] Project - # @see https://developer.github.com/v3/projects/#get-a-project - # @example - # Octokit.project(123942) - def project(id, options = {}) - get "projects/#{id}", options - end - - # Update a project - # - # Requires authenticated client - # - # @param id [Integer] Project id - # @option options [String] :name Project name - # @option options [String] :body Project body - # @return [Sawyer::Resource] Project - # @see https://developer.github.com/v3/projects/#update-a-project - # @example Update project name - # @client.update_project(123942, name: 'New name') - def update_project(id, options = {}) - patch "projects/#{id}", options - end - - # Delete a project - # - # Requires authenticated client - # - # @param id [Integer] Project id - # @return [Boolean] Result of deletion - # @see https://developer.github.com/v3/projects/#delete-a-project - # @example - # @client.delete_project(123942) - def delete_project(id, options = {}) - boolean_from_response :delete, "projects/#{id}", options - end - - # List project columns - # - # @param id [Integer] Project id - # @return [Array] List of project columns - # @see https://developer.github.com/v3/projects/columns/#list-project-columns - # @example - # @client.project_columns(123942) - def project_columns(id, options = {}) - paginate "projects/#{id}/columns", options - end - - # Create a project column - # - # Requires authenticated client - # - # @param id [Integer] Project column id - # @param name [String] New column name - # @return [Sawyer::Resource] Newly created column - # @see https://developer.github.com/v3/projects/columns/#create-a-project-column - # @example - # @client.create_project_column(123942, "To Dones") - def create_project_column(id, name, options = {}) - options[:name] = name - post "projects/#{id}/columns", options - end - - # Get a project column by ID - # - # @param id [Integer] Project column id - # @return [Sawyer::Resource] Project column - # @see https://developer.github.com/v3/projects/columns/#get-a-project-column - # @example - # Octokit.project_column(30294) - def project_column(id, options = {}) - get "projects/columns/#{id}", options - end - - # Update a project column - # - # Requires authenticated client - # - # @param id [Integer] Project column id - # @param name [String] New column name - # @return [Sawyer::Resource] Updated column - # @see https://developer.github.com/v3/projects/columns/#update-a-project-column - # @example - # @client.update_project_column(30294, "new column name") - def update_project_column(id, name, options = {}) - options[:name] = name - patch "projects/columns/#{id}", options - end - - # Delete a project column - # - # Requires authenticated client - # - # @param id [Integer] Project column id - # @return [Boolean] Result of deletion request, true when deleted - # @see https://developer.github.com/v3/projects/columns/#delete-a-project-column - # @example - # @client.delete_project_column(30294) - def delete_project_column(id, options = {}) - boolean_from_response :delete, "projects/columns/#{id}", options - end - - # Move a project column - # - # Requires authenticated client - # - # @param id [Integer] Project column id - # @param position [String] New position for the column. Can be one of - # first, last, or after:, where - # is the id value of a column in the same project. - # @return [Sawyer::Resource] Result - # @see https://developer.github.com/v3/projects/columns/#move-a-project-column - # @example - # @client.move_project_column(30294, "last") - def move_project_column(id, position, options = {}) - options[:position] = position - post "projects/columns/#{id}/moves", options - end - - # List columns cards - # - # Requires authenticated client - # - # @param id [Integer] Project column id - # @return [Array] Cards in the column - # @see https://developer.github.com/v3/projects/cards/#list-project-cards - # @example - # @client.column_cards(30294) - def column_cards(id, options = {}) - paginate "projects/columns/#{id}/cards", options - end - - # Create project card - # - # Requires authenticated client - # - # @param id [Integer] Project column id - # @option options [String] :note Card contents for a note type - # @option options [Integer] :content_id Issue ID for the card contents - # @option options [String] :content_type Type of content to associate - # with the card. Issue is presently the only avaiable value - # @note If :note is supplied, :content_id and :content_type must be - # excluded. Similarly, if :content_id is supplied, :content_type must - # be set and :note must not be included. - # @return [Sawyer::Resource] Newly created card - # @see https://developer.github.com/v3/projects/cards/#create-a-project-card - # @example Create a project card with a note - # @client.create_project_card(123495, note: 'New note card') - # @example Create a project card for an repository issue - # @client.create_project_card(123495, content_id: 1, content_type: 'Issue') - def create_project_card(id, options = {}) - post "projects/columns/#{id}/cards", options - end - - # Get a project card - # - # Requires authenticated client - # - # @param id [Integer] Project card id - # @return [Sawyer::Resource] Project card - # @see https://developer.github.com/v3/projects/cards/#get-a-project-card - # @example - # @client.project_card(123495) - def project_card(id, options = {}) - get "projects/columns/cards/#{id}", options - end - - # Update a project card - # - # Requires authenticated client - # - # @param id [Integer] Project card id - # @option options [String] :note The card's note content. Only valid for - # cards without another type of content, so this cannot be specified if - # the card already has a content_id and content_type. - # @return [Sawyer::Resource] Updated project card - # @see https://developer.github.com/v3/projects/cards/#update-a-project-card - # @example - # @client.update_project_card(12345, note: 'new note') - def update_project_card(id, options = {}) - patch "projects/columns/cards/#{id}", options - end - - # Move a project card - # - # Requires authenticated client - # - # @param id [Integer] Project card id - # @param position [String] Can be one of top, bottom, - # or after:, where is the id value of a - # card in the same column, or in the new column specified by column_id. - # @option options [Integer] :column_id The column id to move the card to, - # must be column in same project - # @return [Sawyer::Resource] Empty sawyer resource - # @see https://developer.github.com/v3/projects/cards/#move-a-project-card - # @example Move a card to the bottom of the same column - # @client.move_project_card(123495, 'bottom') - # @example Move a card to the top of another column - # @client.move_project_card(123495, 'top', column_id: 59402) - def move_project_card(id, position, options = {}) - options[:position] = position - post "projects/columns/cards/#{id}/moves", options - end - - # Delete a project card - # - # Requires authenticated client - # - # @param id [Integer] Project card id - # @return [Boolean] True of deleted, false otherwise - # @see https://developer.github.com/v3/projects/cards/#delete-a-project-card - # @example - # @client.delete_project_card(123495) - def delete_project_card(id, options = {}) - boolean_from_response :delete, "projects/columns/cards/#{id}", options - end - end # Projects - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/pub_sub_hubbub.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/pub_sub_hubbub.rb deleted file mode 100644 index 28ad171d..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/pub_sub_hubbub.rb +++ /dev/null @@ -1,111 +0,0 @@ -# frozen_string_literal: true - -module Octokit - class Client - # Methods for the PubSubHubbub API - # - # @see https://developer.github.com/v3/repos/hooks/#pubsubhubbub - module PubSubHubbub - # Subscribe to a pubsub topic - # - # @param topic [String] A recoginized and supported pubsub topic - # @param callback [String] A callback url to be posted to when the topic event is fired - # @param secret [String] An optional shared secret used to generate a SHA1 HMAC of the outgoing body content - # @return [Boolean] true if the subscribe was successful, otherwise an error is raised - # @see https://developer.github.com/v3/repos/hooks/#subscribing - # @example Subscribe to push events from one of your repositories, having an email sent when fired - # client = Octokit::Client.new(:oauth_token = "token") - # client.subscribe("https://github.com/joshk/devise_imapable/events/push", "github://Email?address=josh.kalderimis@gmail.com") - def subscribe(topic, callback, secret = nil) - options = { - 'hub.callback': callback, - 'hub.mode': 'subscribe', - 'hub.topic': topic - } - options.merge!('hub.secret': secret) unless secret.nil? - - response = pub_sub_hubbub_request(options) - - response.status == 204 - end - - # Unsubscribe from a pubsub topic - # - # @param topic [String] A recoginized pubsub topic - # @param callback [String] A callback url to be unsubscribed from - # @return [Boolean] true if the unsubscribe was successful, otherwise an error is raised - # @see https://developer.github.com/v3/repos/hooks/#subscribing - # @example Unsubscribe to push events from one of your repositories, no longer having an email sent when fired - # client = Octokit::Client.new(:oauth_token = "token") - # client.unsubscribe("https://github.com/joshk/devise_imapable/events/push", "github://Email?address=josh.kalderimis@gmail.com") - def unsubscribe(topic, callback) - options = { - 'hub.callback': callback, - 'hub.mode': 'unsubscribe', - 'hub.topic': topic - } - response = pub_sub_hubbub_request(options) - - response.status == 204 - end - - # Subscribe to a repository through pubsub - # - # @param repo [String, Repository, Hash] A GitHub repository - # @param service_name [String] service name owner - # @param service_arguments [Hash] params that will be passed by subscribed hook. - # List of services is available @ https://github.com/github/github-services/tree/master/docs. - # Please refer Data node for complete list of arguments. - # @param secret [String] An optional shared secret used to generate a SHA1 HMAC of the outgoing body content - # @return [Boolean] True if subscription successful, false otherwise - # @see https://developer.github.com/v3/repos/hooks/#subscribing - # @example Subscribe to push events to one of your repositories to Travis-CI - # client = Octokit::Client.new(:oauth_token = "token") - # client.subscribe_service_hook('joshk/device_imapable', 'Travis', { :token => "test", :domain => "domain", :user => "user" }) - def subscribe_service_hook(repo, service_name, service_arguments = {}, secret = nil) - topic = "#{Octokit.web_endpoint}#{Repository.new(repo)}/events/push" - callback = "github://#{service_name}?#{service_arguments.collect { |k, v| [k, v].map { |p| URI.encode_www_form_component(p) }.join('=') }.join('&')}" - subscribe(topic, callback, secret) - end - - # Unsubscribe repository through pubsub - # - # @param repo [String, Repository, Hash] A GitHub repository - # @param service_name [String] service name owner - # List of services is available @ https://github.com/github/github-services/tree/master/docs. - # @see https://developer.github.com/v3/repos/hooks/#subscribing - # @example Subscribe to push events to one of your repositories to Travis-CI - # client = Octokit::Client.new(:oauth_token = "token") - # client.unsubscribe_service_hook('joshk/device_imapable', 'Travis') - def unsubscribe_service_hook(repo, service_name) - topic = "#{Octokit.web_endpoint}#{Repository.new(repo)}/events/push" - callback = "github://#{service_name}" - unsubscribe(topic, callback) - end - - private - - def pub_sub_hubbub_request(options = {}) - # This method is janky, bypass normal stack so we don't - # serialize request as JSON - conn = Faraday.new(url: @api_endpoint) do |http| - http.headers[:user_agent] = user_agent - if basic_authenticated? - http.request(*FARADAY_BASIC_AUTH_KEYS, @login, @password) - elsif token_authenticated? - http.request :authorization, 'token', @access_token - end - http.request :url_encoded - http.use Octokit::Response::RaiseError - http.adapter Faraday.default_adapter - end - - conn.post do |req| - req.url 'hub' - req.headers['Content-Type'] = 'application/x-www-form-urlencoded' - req.body = options - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/pull_requests.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/pull_requests.rb deleted file mode 100644 index b0f2124a..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/pull_requests.rb +++ /dev/null @@ -1,316 +0,0 @@ -# frozen_string_literal: true - -module Octokit - class Client - # Methods for the Pull Requests API - # - # @see https://developer.github.com/v3/pulls/ - module PullRequests - # List pull requests for a repository - # - # @overload pull_requests(repo, options) - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param options [Hash] Method options - # @option options [String] :state `open` or `closed` or `all`. - # @return [Array] Array of pulls - # @see https://developer.github.com/v3/pulls/#list-pull-requests - # @example - # Octokit.pull_requests('rails/rails', :state => 'closed') - def pull_requests(repo, options = {}) - paginate "#{Repository.path repo}/pulls", options - end - alias pulls pull_requests - - # Get a pull request - # - # @see https://developer.github.com/v3/pulls/#get-a-single-pull-request - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param number [Integer] Number of the pull request to fetch - # @return [Sawyer::Resource] Pull request info - # @example - # Octokit.pull_request('rails/rails', 42, :state => 'closed') - def pull_request(repo, number, options = {}) - get "#{Repository.path repo}/pulls/#{number}", options - end - alias pull pull_request - - # Create a pull request - # - # @see https://developer.github.com/v3/pulls/#create-a-pull-request - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param base [String] The branch (or git ref) you want your changes - # pulled into. This should be an existing branch on the current - # repository. You cannot submit a pull request to one repo that requests - # a merge to a base of another repo. - # @param head [String] The branch (or git ref) where your changes are implemented. - # @param title [String] Title for the pull request - # @param body [String] The body for the pull request (optional). Supports GFM. - # @return [Sawyer::Resource] The newly created pull request - # @example - # @client.create_pull_request("octokit/octokit.rb", "master", "feature-branch", - # "Pull Request title", "Pull Request body") - def create_pull_request(repo, base, head, title, body = nil, options = {}) - pull = { - base: base, - head: head, - title: title - } - pull[:body] = body unless body.nil? - post "#{Repository.path repo}/pulls", options.merge(pull) - end - - # Create a pull request from existing issue - # - # @see https://developer.github.com/v3/pulls/#alternative-input - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param base [String] The branch (or git ref) you want your changes - # pulled into. This should be an existing branch on the current - # repository. You cannot submit a pull request to one repo that requests - # a merge to a base of another repo. - # @param head [String] The branch (or git ref) where your changes are implemented. - # @param issue [Integer] Number of Issue on which to base this pull request - # @return [Sawyer::Resource] The newly created pull request - def create_pull_request_for_issue(repo, base, head, issue, options = {}) - pull = { - base: base, - head: head, - issue: issue - } - post "#{Repository.path repo}/pulls", options.merge(pull) - end - - # Update a pull request - # @overload update_pull_request(repo, number, title=nil, body=nil, state=nil, options = {}) - # @deprecated - # @param repo [Integer, String, Hash, Repository] A GitHub repository. - # @param number [Integer] Number of pull request to update. - # @param title [String] Title for the pull request. - # @param body [String] Body content for pull request. Supports GFM. - # @param state [String] State of the pull request. `open` or `closed`. - # @overload update_pull_request(repo, number, options = {}) - # @param repo [Integer, String, Hash, Repository] A GitHub repository. - # @param number [Integer] Number of pull request to update. - # @option options [String] :title Title for the pull request. - # @option options [String] :body Body for the pull request. - # @option options [String] :state State for the pull request. - # @return [Sawyer::Resource] Hash representing updated pull request. - # @see https://developer.github.com/v3/pulls/#update-a-pull-request - # @example - # @client.update_pull_request('octokit/octokit.rb', 67, 'new title', 'updated body', 'closed') - # @example Passing nil for optional attributes to update specific attributes. - # @client.update_pull_request('octokit/octokit.rb', 67, nil, nil, 'open') - # @example Empty body by passing empty string - # @client.update_pull_request('octokit/octokit.rb', 67, nil, '') - def update_pull_request(*args) - arguments = Octokit::Arguments.new(args) - repo = arguments.shift - number = arguments.shift - patch "#{Repository.path repo}/pulls/#{number}", arguments.options - end - - # Close a pull request - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository. - # @param number [Integer] Number of pull request to update. - # @return [Sawyer::Resource] Hash representing updated pull request. - # @see https://developer.github.com/v3/pulls/#update-a-pull-request - # @example - # @client.close_pull_request('octokit/octokit.rb', 67) - def close_pull_request(repo, number, options = {}) - options.merge! state: 'closed' - update_pull_request(repo, number, options) - end - - # List commits on a pull request - # - # @see https://developer.github.com/v3/pulls/#list-commits-on-a-pull-request - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param number [Integer] Number of pull request - # @return [Array] List of commits - def pull_request_commits(repo, number, options = {}) - paginate "#{Repository.path repo}/pulls/#{number}/commits", options - end - alias pull_commits pull_request_commits - - # List pull request comments for a repository - # - # By default, Review Comments are ordered by ascending ID. - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param options [Hash] Optional parameters - # @option options [String] :sort created or updated - # @option options [String] :direction asc or desc. Ignored without sort - # parameter. - # @option options [String] :since Timestamp in ISO 8601 - # format: YYYY-MM-DDTHH:MM:SSZ - # - # @return [Array] List of pull request review comments. - # - # @see https://developer.github.com/v3/pulls/comments/#list-comments-in-a-repository - # - # @example Get the pull request review comments in the octokit repository - # @client.issues_comments("octokit/octokit.rb") - # - # @example Get review comments, sort by updated asc since a time - # @client.pull_requests_comments("octokit/octokit.rb", { - # :sort => 'updated', - # :direction => 'asc', - # :since => '2010-05-04T23:45:02Z' - # }) - def pull_requests_comments(repo, options = {}) - paginate("#{Repository.path repo}/pulls/comments", options) - end - alias pulls_comments pull_requests_comments - alias reviews_comments pull_requests_comments - - # List comments on a pull request - # - # @see https://developer.github.com/v3/pulls/comments/#list-comments-on-a-pull-request - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param number [Integer] Number of pull request - # @return [Array] List of comments - def pull_request_comments(repo, number, options = {}) - # return the comments for a pull request - paginate("#{Repository.path repo}/pulls/#{number}/comments", options) - end - alias pull_comments pull_request_comments - alias review_comments pull_request_comments - - # Get a pull request comment - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param comment_id [Integer] Id of comment to get - # @return [Sawyer::Resource] Hash representing the comment - # @see https://developer.github.com/v3/pulls/comments/#get-a-single-comment - # @example - # @client.pull_request_comment("pengwynn/octkit", 1903950) - def pull_request_comment(repo, comment_id, options = {}) - get "#{Repository.path repo}/pulls/comments/#{comment_id}", options - end - alias pull_comment pull_request_comment - alias review_comment pull_request_comment - - # Create a pull request comment - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param pull_id [Integer] Pull request id - # @param body [String] Comment content - # @param commit_id [String] Sha of the commit to comment on. - # @param path [String] Relative path of the file to comment on. - # @param line [Integer] Line index in the diff to comment on. - # For a multi-line comment, the last line of the range - # and specify 'start_line' in the 'options'. - # @return [Sawyer::Resource] Hash representing the new comment - # @deprecated The position will be deprecated in the next major version. Please refer to the details below. - # @see https://developer.github.com/v3/pulls/comments/#create-a-comment - # @example - # @client.create_pull_request_comment("octokit/octokit.rb", 163, ":shipit:", - # "2d3201e4440903d8b04a5487842053ca4883e5f0", "lib/octokit/request.rb", 47) - def create_pull_request_comment(repo, pull_id, body, commit_id, path, line, options = {}) - options.merge!({ - body: body, - commit_id: commit_id, - path: path, - line: line - }) - post "#{Repository.path repo}/pulls/#{pull_id}/comments", options - end - alias create_pull_comment create_pull_request_comment - alias create_view_comment create_pull_request_comment - - # Create reply to a pull request comment - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param pull_id [Integer] Pull request id - # @param body [String] Comment contents - # @param comment_id [Integer] Comment id to reply to - # @return [Sawyer::Resource] Hash representing new comment - # @see https://developer.github.com/v3/pulls/comments/#create-a-comment - # @example - # @client.create_pull_request_comment_reply("octokit/octokit.rb", 163, "done.", 1903950) - def create_pull_request_comment_reply(repo, pull_id, body, comment_id, options = {}) - options.merge!({ - body: body, - in_reply_to: comment_id - }) - post "#{Repository.path repo}/pulls/#{pull_id}/comments", options - end - alias create_pull_reply create_pull_request_comment_reply - alias create_review_reply create_pull_request_comment_reply - - # Update pull request comment - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param comment_id [Integer] Id of the comment to update - # @param body [String] Updated comment content - # @return [Sawyer::Resource] Hash representing the updated comment - # @see https://developer.github.com/v3/pulls/comments/#edit-a-comment - # @example - # @client.update_pull_request_comment("octokit/octokit.rb", 1903950, ":shipit:") - def update_pull_request_comment(repo, comment_id, body, options = {}) - options.merge! body: body - patch("#{Repository.path repo}/pulls/comments/#{comment_id}", options) - end - alias update_pull_comment update_pull_request_comment - alias update_review_comment update_pull_request_comment - - # Delete pull request comment - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param comment_id [Integer] Id of the comment to delete - # @return [Boolean] True if deleted, false otherwise - # @see https://developer.github.com/v3/pulls/comments/#delete-a-comment - # @example - # @client.delete_pull_request_comment("octokit/octokit.rb", 1902707) - def delete_pull_request_comment(repo, comment_id, options = {}) - boolean_from_response(:delete, "#{Repository.path repo}/pulls/comments/#{comment_id}", options) - end - alias delete_pull_comment delete_pull_request_comment - alias delete_review_comment delete_pull_request_comment - - # List files on a pull request - # - # @see https://developer.github.com/v3/pulls/#list-pull-requests-files - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param number [Integer] Number of pull request - # @return [Array] List of files - def pull_request_files(repo, number, options = {}) - paginate "#{Repository.path repo}/pulls/#{number}/files", options - end - alias pull_files pull_request_files - - # Update a pull request branch - # - # @see https://developer.github.com/v3/pulls/#update-a-pull-request-branch - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param number [Integer] Number of pull request - # @param options [Hash] Optional parameters (e.g. expected_head_sha) - # @return [Boolean] True if the pull request branch has been updated - def update_pull_request_branch(repo, number, options = {}) - boolean_from_response(:put, "#{Repository.path repo}/pulls/#{number}/update-branch", options) - end - - # Merge a pull request - # - # @see https://developer.github.com/v3/pulls/#merge-a-pull-request-merge-button - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param number [Integer] Number of pull request - # @param commit_message [String] Optional commit message for the merge commit - # @return [Array] Merge commit info if successful - def merge_pull_request(repo, number, commit_message = '', options = {}) - put "#{Repository.path repo}/pulls/#{number}/merge", options.merge({ commit_message: commit_message }) - end - - # Check pull request merge status - # - # @see https://developer.github.com/v3/pulls/#get-if-a-pull-request-has-been-merged - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param number [Integer] Number of pull request - # @return [Boolean] True if the pull request has been merged - def pull_merged?(repo, number, options = {}) - boolean_from_response :get, "#{Repository.path repo}/pulls/#{number}/merge", options - end - alias pull_request_merged? pull_merged? - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/rate_limit.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/rate_limit.rb deleted file mode 100644 index 7387a029..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/rate_limit.rb +++ /dev/null @@ -1,52 +0,0 @@ -# frozen_string_literal: true - -module Octokit - class Client - # Methods for API rate limiting info - # - # @see https://developer.github.com/v3/#rate-limiting - module RateLimit - # Get rate limit info from last response if available - # or make a new request to fetch rate limit - # - # @see https://developer.github.com/v3/rate_limit/#rate-limit - # @return [Octokit::RateLimit] Rate limit info - def rate_limit(_options = {}) - return rate_limit! if last_response.nil? - - Octokit::RateLimit.from_response(last_response) - end - alias ratelimit rate_limit - - # Get number of rate limted requests remaining - # - # @see https://developer.github.com/v3/rate_limit/#rate-limit - # @return [Integer] Number of requests remaining in this period - def rate_limit_remaining(_options = {}) - octokit_warn 'Deprecated: Please use .rate_limit.remaining' - rate_limit.remaining - end - alias ratelimit_remaining rate_limit_remaining - - # Refresh rate limit info by making a new request - # - # @see https://developer.github.com/v3/rate_limit/#rate-limit - # @return [Octokit::RateLimit] Rate limit info - def rate_limit!(_options = {}) - get 'rate_limit' - Octokit::RateLimit.from_response(last_response) - end - alias ratelimit! rate_limit! - - # Refresh rate limit info and get number of rate limted requests remaining - # - # @see https://developer.github.com/v3/rate_limit/#rate-limit - # @return [Integer] Number of requests remaining in this period - def rate_limit_remaining!(_options = {}) - octokit_warn 'Deprecated: Please use .rate_limit!.remaining' - rate_limit!.remaining - end - alias ratelimit_remaining! rate_limit_remaining! - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/reactions.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/reactions.rb deleted file mode 100644 index 438998bd..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/reactions.rb +++ /dev/null @@ -1,204 +0,0 @@ -# frozen_string_literal: true - -module Octokit - class Client - # Methods for the Reacions API - # - # @see https://developer.github.com/v3/reactions/ - module Reactions - # List reactions for a commit comment - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param id [Integer] The id of the commit comment - # @see https://developer.github.com/v3/reactions/#list-reactions-for-a-commit-comment - # - # @example - # @client.commit_comment_reactions("octokit/octokit.rb", 1) - # - # @return [Array] Array of Hashes representing the reactions. - def commit_comment_reactions(repo, id, options = {}) - get "#{Repository.path repo}/comments/#{id}/reactions", options - end - - # Create a reaction for a commit comment - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param id [Integer] The id of the commit comment - # @param reaction [String] The Reaction - # @see https://developer.github.com/v3/reactions/#create-reaction-for-a-commit-comment - # @see https://developer.github.com/v3/reactions/#reaction-types - # - # @example - # @client.create_commit_comment_reactions("octokit/octokit.rb", 1) - # - # @return [] Hash representing the reaction - def create_commit_comment_reaction(repo, id, reaction, options = {}) - options = options.merge(content: reaction) - post "#{Repository.path repo}/comments/#{id}/reactions", options - end - - # List reactions for an issue - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param number [Integer] The Issue number - # @see https://developer.github.com/v3/reactions/#list-reactions-for-an-issue - # - # @example - # @client.issue_reactions("octokit/octokit.rb", 1) - # - # @return [Array] Array of Hashes representing the reactions. - def issue_reactions(repo, number, options = {}) - get "#{Repository.path repo}/issues/#{number}/reactions", options - end - - # Create reaction for an issue - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param number [Integer] The Issue number - # @param reaction [String] The Reaction - # - # @see https://developer.github.com/v3/reactions/#create-reaction-for-an-issue - # @see https://developer.github.com/v3/reactions/#reaction-types - # - # @example - # @client.create_issue_reaction("octokit/octokit.rb", 1) - # - # @return [] Hash representing the reaction. - def create_issue_reaction(repo, number, reaction, options = {}) - options = options.merge(content: reaction) - post "#{Repository.path repo}/issues/#{number}/reactions", options - end - - # List reactions for an issue comment - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param id [Integer] The Issue comment id - # - # @see https://developer.github.com/v3/reactions/#list-reactions-for-an-issue-comment - # - # @example - # @client.issue_comment_reactions("octokit/octokit.rb", 1) - # - # @return [Array] Array of Hashes representing the reactions. - def issue_comment_reactions(repo, id, options = {}) - get "#{Repository.path repo}/issues/comments/#{id}/reactions", options - end - - # Create reaction for an issue comment - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param id [Integer] The Issue comment id - # @param reaction [String] The Reaction - # - # @see https://developer.github.com/v3/reactions/#create-reaction-for-an-issue-comment - # @see https://developer.github.com/v3/reactions/#reaction-types - # - # @example - # @client.create_issue_comment_reaction("octokit/octokit.rb", 1) - # - # @return [] Hashes representing the reaction. - def create_issue_comment_reaction(repo, id, reaction, options = {}) - options = options.merge(content: reaction) - post "#{Repository.path repo}/issues/comments/#{id}/reactions", options - end - - # List reactions for a pull request review comment - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param id [Integer] The Issue comment id - # - # @see https://developer.github.com/v3/reactions/#list-reactions-for-a-pull-request-review-comment - # - # @example - # @client.pull_request_review_comment_reactions("octokit/octokit.rb", 1) - # - # @return [Array] Array of Hashes representing the reactions. - def pull_request_review_comment_reactions(repo, id, options = {}) - get "#{Repository.path repo}/pulls/comments/#{id}/reactions", options - end - - # Create reaction for a pull request review comment - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param id [Integer] The Issue comment id - # @param reaction [String] The Reaction - # - # @see https://developer.github.com/v3/reactions/#create-reaction-for-a-pull-request-review-comment - # @see https://developer.github.com/v3/reactions/#reaction-types - # - # @example - # @client.create_pull_request_reiew_comment_reaction("octokit/octokit.rb", 1) - # - # @return [] Hash representing the reaction. - def create_pull_request_review_comment_reaction(repo, id, reaction, options = {}) - options = options.merge(content: reaction) - post "#{Repository.path repo}/pulls/comments/#{id}/reactions", options - end - - # Delete a reaction - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param issue_id [Integer] The Issue comment id - # @param reaction_id [Integer] The Reaction id - # - # @see https://docs.github.com/en/rest/reactions/reactions#delete-an-issue-reaction - # - # @example - # @client.delete_issue_reaction("octokit/octokit.rb", 1, 2) - # - # @return [Boolean] Return true if reaction was deleted, false otherwise. - def delete_issue_reaction(repo, issue_id, reaction_id, options = {}) - boolean_from_response :delete, "#{Repository.path repo}/issues/#{issue_id}/reactions/#{reaction_id}", options - end - - # List reactions for a release - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param id [Integer] The Release id - # - # @see https://docs.github.com/en/free-pro-team@latest/rest/reactions/reactions?apiVersion=2022-11-28#list-reactions-for-a-release - # - # @example - # @client.release_reactions("octokit/octokit.rb", 1) - # - # @return [Array] Array of Hashes representing the reactions. - def release_reactions(repo, release_id, options = {}) - get "#{Repository.path repo}/releases/#{release_id}/reactions", options - end - - # Create reaction for a release - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param id [Integer] The Release id - # @param reaction [String] The Reaction - # - # @see https://docs.github.com/en/free-pro-team@latest/rest/reactions/reactions?apiVersion=2022-11-28#create-reaction-for-a-release - # @see https://developer.github.com/v3/reactions/#reaction-types - # - # @example - # @client.create_release_reaction("octokit/octokit.rb", 1) - # - # @return [] Hash representing the reaction. - def create_release_reaction(repo, release_id, reaction, options = {}) - options = options.merge(content: reaction) - post "#{Repository.path repo}/releases/#{release_id}/reactions", options - end - - # Delete a reaction for a release - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param issue_id [Integer] The Release id - # @param reaction_id [Integer] The Reaction id - # - # @see https://docs.github.com/en/free-pro-team@latest/rest/reactions/reactions?apiVersion=2022-11-28#delete-a-release-reaction - # - # @example - # @client.delete_release_reaction("octokit/octokit.rb", 1, 2) - # - # @return [Boolean] Return true if reaction was deleted, false otherwise. - def delete_release_reaction(repo, release_id, reaction_id, options = {}) - boolean_from_response :delete, "#{Repository.path repo}/releases/#{release_id}/reactions/#{reaction_id}", options - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/refs.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/refs.rb deleted file mode 100644 index 6fa52f40..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/refs.rb +++ /dev/null @@ -1,131 +0,0 @@ -# frozen_string_literal: true - -module Octokit - class Client - # Methods for References for Git Data API - # - # @see https://developer.github.com/v3/git/refs/ - module Refs - # List all refs for a given user and repo - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param namespace [String] The ref namespace, e.g. tag or heads - # @return [Array] A list of references matching the repo and the namespace - # @see https://developer.github.com/v3/git/refs/#get-all-references - # @example Fetch all refs for sferik/rails_admin - # Octokit.refs("sferik/rails_admin") - def refs(repo, namespace = nil, options = {}) - path = "#{Repository.path repo}/git/refs" - path += "/#{namespace}" unless namespace.nil? - paginate path, options - end - alias list_refs refs - alias references refs - alias list_references refs - - # Fetch matching refs - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param ref [String] The ref, e.g. tags/v0.0.3 or heads/rails-3 - # @return [Array] The reference matching the given repo and the ref id - # @see https://developer.github.com/v3/git/refs/#list-matching-references - # @example Fetch refs matching tags/v2 for sferik/rails_admin - # Octokit.ref("sferik/rails_admin","tags/v2") - def matching_refs(repo, ref, options = {}) - paginate "#{Repository.path repo}/git/matching-refs/#{ref}", options - end - - # Fetch a given reference - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param ref [String] The ref, e.g. tags/v0.0.3 - # @return [Sawyer::Resource] The reference matching the given repo and the ref id - # @see https://developer.github.com/v3/git/refs/#get-a-reference - # @example Fetch tags/v0.0.3 for sferik/rails_admin - # Octokit.ref("sferik/rails_admin","tags/v0.0.3") - def ref(repo, ref, options = {}) - get "#{Repository.path repo}/git/refs/#{ref}", options - end - alias reference ref - - # Create a reference - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param ref [String] The ref, e.g. tags/v0.0.3 - # @param sha [String] A SHA, e.g. 827efc6d56897b048c772eb4087f854f46256132 - # @return [Array] The list of references, already containing the new one - # @see https://developer.github.com/v3/git/refs/#create-a-reference - # @example Create refs/heads/master for octocat/Hello-World with sha 827efc6d56897b048c772eb4087f854f46256132 - # Octokit.create_ref("octocat/Hello-World", "heads/master", "827efc6d56897b048c772eb4087f854f46256132") - def create_ref(repo, ref, sha, options = {}) - ref = "refs/#{ref}" unless ref =~ %r{\Arefs/} - parameters = { - ref: ref, - sha: sha - } - post "#{Repository.path repo}/git/refs", options.merge(parameters) - end - alias create_reference create_ref - - # Update a reference - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param ref [String] The ref, e.g. tags/v0.0.3 - # @param sha [String] A SHA, e.g. 827efc6d56897b048c772eb4087f854f46256132 - # @param force [Boolean] A flag indicating whether to force the update or to make sure the update is a fast-forward update. - # @return [Array] The list of references updated - # @see https://developer.github.com/v3/git/refs/#update-a-reference - # @example Force update heads/sc/featureA for octocat/Hello-World with sha aa218f56b14c9653891f9e74264a383fa43fefbd - # Octokit.update_ref("octocat/Hello-World", "heads/sc/featureA", "aa218f56b14c9653891f9e74264a383fa43fefbd") - def update_ref(repo, ref, sha, force = false, options = {}) - parameters = { - sha: sha, - force: force - } - patch "#{Repository.path repo}/git/refs/#{ref}", options.merge(parameters) - end - alias update_reference update_ref - - # Update a branch - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param branch [String] The ref, e.g. feature/new-shiny - # @param sha [String] A SHA, e.g. 827efc6d56897b048c772eb4087f854f46256132 - # @param force [Boolean] A flag indicating whether to force the update or to make sure the update is a fast-forward update. - # @return [Array] The list of references updated - # @see https://developer.github.com/v3/git/refs/#update-a-reference - # @example Force update heads/sc/featureA for octocat/Hello-World with sha aa218f56b14c9653891f9e74264a383fa43fefbd - # Octokit.update_branch("octocat/Hello-World", "sc/featureA", "aa218f56b14c9653891f9e74264a383fa43fefbd") - # @example Fast-forward update heads/sc/featureA for octocat/Hello-World with sha aa218f56b14c9653891f9e74264a383fa43fefbd - # Octokit.update_branch("octocat/Hello-World", "sc/featureA", "aa218f56b14c9653891f9e74264a383fa43fefbd", false) - def update_branch(repo, branch, sha, force = true, options = {}) - update_ref repo, "heads/#{branch}", sha, force, options - end - - # Delete a single branch - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param branch [String] The branch, e.g. fix-refs - # @return [Boolean] Success - # @see https://developer.github.com/v3/git/refs/#delete-a-reference - # @example Delete uritemplate for sigmavirus24/github3.py - # Octokit.delete_branch("sigmavirus24/github3.py", "uritemplate") - def delete_branch(repo, branch, options = {}) - delete_ref repo, "heads/#{branch}", options - end - - # Delete a single reference - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param ref [String] The ref, e.g. tags/v0.0.3 - # @return [Boolean] Success - # @see https://developer.github.com/v3/git/refs/#delete-a-reference - # @example Delete tags/v0.0.3 for sferik/rails_admin - # Octokit.delete_ref("sferik/rails_admin","tags/v0.0.3") - def delete_ref(repo, ref, options = {}) - boolean_from_response :delete, "#{Repository.path repo}/git/refs/#{ref}", options - end - alias delete_reference delete_ref - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/releases.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/releases.rb deleted file mode 100644 index 5a6efdd1..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/releases.rb +++ /dev/null @@ -1,164 +0,0 @@ -# frozen_string_literal: true - -module Octokit - class Client - # Methods for the Releases API - # - # @see https://developer.github.com/v3/repos/releases/ - module Releases - # List releases for a repository - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @return [Array] A list of releases - # @see https://developer.github.com/v3/repos/releases/#list-releases-for-a-repository - def releases(repo, options = {}) - paginate "#{Repository.path repo}/releases", options - end - alias list_releases releases - - # Create a release - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param tag_name [String] Git tag from which to create release - # @option options [String] :target_commitish Specifies the commitish value that determines where the Git tag is created from. - # @option options [String] :name Name for the release - # @option options [String] :body Content for release notes - # @option options [Boolean] :draft Mark this release as a draft - # @option options [Boolean] :prerelease Mark this release as a pre-release - # @return [Sawyer::Resource] The release - # @see https://developer.github.com/v3/repos/releases/#create-a-release - def create_release(repo, tag_name, options = {}) - opts = options.merge(tag_name: tag_name) - post "#{Repository.path repo}/releases", opts - end - - # Get a release - # - # @param url [String] URL for the release as returned from .releases - # @return [Sawyer::Resource] The release - # @see https://developer.github.com/v3/repos/releases/#get-a-single-release - def release(url, options = {}) - get url, options - end - - # Update a release - # - # @param url [String] URL for the release as returned from .releases - # @option options [String] :tag_name Git tag from which to create release - # @option options [String] :target_commitish Specifies the commitish value that determines where the Git tag is created from. - # @option options [String] :name Name for the release - # @option options [String] :body Content for release notes - # @option options [Boolean] :draft Mark this release as a draft - # @option options [Boolean] :prerelease Mark this release as a pre-release - # @return [Sawyer::Resource] The release - # @see https://developer.github.com/v3/repos/releases/#edit-a-release - def update_release(url, options = {}) - patch url, options - end - alias edit_release update_release - - # Delete a release - # - # @param url [String] URL for the release as returned from .releases - # @return [Boolean] Success or failure - # @see https://developer.github.com/v3/repos/releases/#delete-a-release - def delete_release(url, options = {}) - boolean_from_response(:delete, url, options) - end - - # List release assets - # - # @param release_url [String] URL for the release as returned from .releases - # @return [Array] A list of release assets - # @see https://developer.github.com/v3/repos/releases/#list-assets-for-a-release - def release_assets(release_url, options = {}) - paginate release(release_url).rels[:assets].href, options - end - - # Upload a release asset - # - # @param release_url [String] URL for the release as returned from .releases - # @param path_or_file [String] Path to file to upload - # @option options [String] :content_type The MIME type for the file to upload - # @option options [String] :name The name for the file - # @return [Sawyer::Resource] The release asset - # @see https://developer.github.com/v3/repos/releases/#upload-a-release-asset - def upload_asset(release_url, path_or_file, options = {}) - file = path_or_file.respond_to?(:read) ? path_or_file : File.new(path_or_file, 'rb') - options[:content_type] ||= content_type_from_file(file) - raise Octokit::MissingContentType if options[:content_type].nil? - - unless name = options[:name] - name = File.basename(file.path) - end - upload_url = release(release_url).rels[:upload].href_template.expand(name: name) - - request :post, upload_url, file.read, parse_query_and_convenience_headers(options) - ensure - file&.close - end - - # Get a single release asset - # - # - # @param asset_url [String] URL for the asset as returned from .release_assets - # @return [Sawyer::Resource] The release asset - # @see https://developer.github.com/v3/repos/releases/#get-a-single-release-asset - def release_asset(asset_url, options = {}) - get(asset_url, options) - end - - # Update a release asset - # - # @param asset_url [String] URL for the asset as returned from .release_assets - # @option options [String] :name The name for the file - # @option options [String] :label The download text for the file - # @return [Sawyer::Resource] The release asset - # @see https://developer.github.com/v3/repos/releases/#edit-a-release-asset - def update_release_asset(asset_url, options = {}) - patch(asset_url, options) - end - alias edit_release_asset update_release_asset - - # Delete a release asset - # - # @param asset_url [String] URL for the asset as returned from .release_assets - # @return [Boolean] Success or failure - # @see https://developer.github.com/v3/repos/releases/#delete-a-release-asset - def delete_release_asset(asset_url, options = {}) - boolean_from_response(:delete, asset_url, options) - end - - # Get the release for a given tag - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param tag_name [String] the name for a tag - # @return [Sawyer::Resource] The release - # @see https://developer.github.com/v3/repos/releases/#get-a-release-by-tag-name - def release_for_tag(repo, tag_name, options = {}) - get "#{Repository.path repo}/releases/tags/#{tag_name}", options - end - - # Get the latest release - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @return [Sawyer::Resource] The release - # @see https://developer.github.com/v3/repos/releases/#get-the-latest-release - def latest_release(repo, options = {}) - get "#{Repository.path repo}/releases/latest", options - end - - private - - def content_type_from_file(file) - require 'mime/types' - if mime_type = MIME::Types.type_for(file.path).first - mime_type.content_type - end - rescue LoadError - msg = 'Please pass content_type or install mime-types gem to guess content type from file' - raise Octokit::MissingContentType, msg - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/repositories.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/repositories.rb deleted file mode 100644 index 8e447965..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/repositories.rb +++ /dev/null @@ -1,779 +0,0 @@ -# frozen_string_literal: true - -module Octokit - class Client - # Methods for the Repositories API - # - # @see https://developer.github.com/v3/repos/ - module Repositories - # Check if a repository exists - # - # @see https://developer.github.com/v3/repos/#get - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @return [Boolean] - def repository?(repo, options = {}) - !!repository(repo, options) - rescue Octokit::InvalidRepository, Octokit::NotFound - false - end - - # Get a single repository - # - # @see https://developer.github.com/v3/repos/#get - # @see https://developer.github.com/v3/licenses/#get-a-repositorys-license - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @return [Sawyer::Resource] Repository information - def repository(repo, options = {}) - get Repository.path(repo), options - end - alias repo repository - - # Edit a repository - # - # @see https://developer.github.com/v3/repos/#update-a-repository - # @param repo [String, Hash, Repository] A GitHub repository - # @param options [Hash] Repository information to update - # @option options [String] :name Name of the repo - # @option options [String] :description Description of the repo - # @option options [String] :homepage Home page of the repo - # @option options [String] :private `true` makes the repository private, and `false` makes it public. - # @option options [String] :has_issues `true` enables issues for this repo, `false` disables issues. - # @option options [String] :has_wiki `true` enables wiki for this repo, `false` disables wiki. - # @option options [Boolean] :is_template `true` makes the repository a template, `false` makes it not a template. - # @option options [String] :has_downloads `true` enables downloads for this repo, `false` disables downloads. - # @option options [String] :default_branch Update the default branch for this repository. - # @return [Sawyer::Resource] Repository information - def edit_repository(repo, options = {}) - repo = Repository.new(repo) - options[:name] ||= repo.name - patch "repos/#{repo}", options - end - alias edit edit_repository - alias update_repository edit_repository - alias update edit_repository - - # List user repositories - # - # If user is not supplied, repositories for the current - # authenticated user are returned. - # - # @note If the user provided is a GitHub organization, only the - # organization's public repositories will be listed. For retrieving - # organization repositories the {Organizations#organization_repositories} - # method should be used instead. - # @see https://developer.github.com/v3/repos/#list-your-repositories - # @see https://developer.github.com/v3/repos/#list-user-repositories - # @param user [Integer, String] Optional GitHub user login or id for which - # to list repos. - # @return [Array] List of repositories - def repositories(user = nil, options = {}) - paginate "#{User.path user}/repos", options - end - alias list_repositories repositories - alias list_repos repositories - alias repos repositories - - # List all repositories - # - # This provides a dump of every repository, in the order that they were - # created. - # - # @see https://developer.github.com/v3/repos/#list-all-public-repositories - # - # @param options [Hash] Optional options - # @option options [Integer] :since The integer ID of the last Repository - # that you’ve seen. - # @return [Array] List of repositories. - def all_repositories(options = {}) - paginate 'repositories', options - end - - # Star a repository - # - # @param repo [String, Hash, Repository] A GitHub repository - # @return [Boolean] `true` if successfully starred - # @see https://developer.github.com/v3/activity/starring/#star-a-repository - def star(repo, options = {}) - boolean_from_response :put, "user/starred/#{Repository.new(repo)}", options - end - - # Unstar a repository - # - # @param repo [String, Hash, Repository] A GitHub repository - # @return [Boolean] `true` if successfully unstarred - # @see https://developer.github.com/v3/activity/starring/#unstar-a-repository - def unstar(repo, options = {}) - boolean_from_response :delete, "user/starred/#{Repository.new(repo)}", options - end - - # Watch a repository - # - # @param repo [String, Hash, Repository] A GitHub repository - # @return [Boolean] `true` if successfully watched - # @deprecated Use #star instead - # @see https://developer.github.com/v3/activity/watching/#watch-a-repository-legacy - def watch(repo, options = {}) - boolean_from_response :put, "user/watched/#{Repository.new(repo)}", options - end - - # Unwatch a repository - # - # @param repo [String, Hash, Repository] A GitHub repository - # @return [Boolean] `true` if successfully unwatched - # @deprecated Use #unstar instead - # @see https://developer.github.com/v3/activity/watching/#stop-watching-a-repository-legacy - def unwatch(repo, options = {}) - boolean_from_response :delete, "user/watched/#{Repository.new(repo)}", options - end - - # Fork a repository - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @return [Sawyer::Resource] Repository info for the new fork - # @see https://developer.github.com/v3/repos/forks/#create-a-fork - def fork(repo, options = {}) - post "#{Repository.path repo}/forks", options - end - - # Create a repository for a user or organization - # - # @param name [String] Name of the new repo - # @option options [String] :description Description of the repo - # @option options [String] :homepage Home page of the repo - # @option options [String] :private `true` makes the repository private, and `false` makes it public. - # @option options [String] :has_issues `true` enables issues for this repo, `false` disables issues. - # @option options [String] :has_wiki `true` enables wiki for this repo, `false` disables wiki. - # @option options [Boolean] :is_template `true` makes this repo available as a template repository, `false` to prevent it. - # @option options [String] :has_downloads `true` enables downloads for this repo, `false` disables downloads. - # @option options [String] :organization Short name for the org under which to create the repo. - # @option options [Integer] :team_id The id of the team that will be granted access to this repository. This is only valid when creating a repo in an organization. - # @option options [Boolean] :auto_init `true` to create an initial commit with empty README. Default is `false`. - # @option options [String] :gitignore_template Desired language or platform .gitignore template to apply. Ignored if auto_init parameter is not provided. - # @return [Sawyer::Resource] Repository info for the new repository - # @see https://developer.github.com/v3/repos/#create - def create_repository(name, options = {}) - opts = options.dup - organization = opts.delete :organization - opts.merge! name: name - - if organization.nil? - post 'user/repos', opts - else - post "#{Organization.path organization}/repos", opts - end - end - alias create_repo create_repository - alias create create_repository - - # Delete repository - # - # Note: If OAuth is used, 'delete_repo' scope is required - # - # @see https://developer.github.com/v3/repos/#delete-a-repository - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @return [Boolean] `true` if repository was deleted - def delete_repository(repo, options = {}) - boolean_from_response :delete, Repository.path(repo), options - end - alias delete_repo delete_repository - - # Transfer repository - # - # Transfer a repository owned by your organization - # - # @see https://developer.github.com/v3/repos/#transfer-a-repository - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param new_owner [String] The username or organization name the repository will be transferred to. - # @param options [Array] :team_ids ID of the team or teams to add to the repository. Teams can only be added to organization-owned repositories. - # @return [Sawyer::Resource] Repository info for the transferred repository - def transfer_repository(repo, new_owner, options = {}) - post "#{Repository.path repo}/transfer", options.merge({ new_owner: new_owner }) - end - alias transfer_repo transfer_repository - - # Create a repository for a user or organization generated from a template repository - # - # @param repo [Integer, String, Hash, Repository] A GitHub template repository - # @param name [String] Name of the new repo - # @option options [String] :owner Organization or user who the new repository will belong to. - # @option options [String] :description Description of the repo - # @option options [String] :private `true` makes the repository private, and `false` makes it public. - # @option options [Boolean] :include_all_branches `true` copies all branches from the template repository, `false` (default) makes it only copy the master branch. - # @return [Sawyer::Resource] Repository info for the new repository - def create_repository_from_template(repo, name, options = {}) - options.merge! name: name - post "#{Repository.path repo}/generate", options - end - alias create_repo_from_template create_repository_from_template - - # Hide a public repository - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @return [Sawyer::Resource] Updated repository info - def set_private(repo, options = {}) - # GitHub Api for setting private updated to use private attr, rather than public - update_repository repo, options.merge({ private: true }) - end - - # Unhide a private repository - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @return [Sawyer::Resource] Updated repository info - def set_public(repo, options = {}) - # GitHub Api for setting private updated to use private attr, rather than public - update_repository repo, options.merge({ private: false }) - end - - # Get deploy keys on a repo - # - # Requires authenticated client. - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @return [Array] Array of hashes representing deploy keys. - # @see https://developer.github.com/v3/repos/keys/#list-deploy-keys - # @example - # @client.deploy_keys('octokit/octokit.rb') - # @example - # @client.list_deploy_keys('octokit/octokit.rb') - def deploy_keys(repo, options = {}) - paginate "#{Repository.path repo}/keys", options - end - alias list_deploy_keys deploy_keys - - # Get a single deploy key for a repo - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository. - # @param id [Integer] Deploy key ID. - # @return [Sawyer::Resource] Deploy key. - # @see https://developer.github.com/v3/repos/keys/#get-a-deploy-key - # @example - # @client.deploy_key('octokit/octokit.rb', 8675309) - def deploy_key(repo, id, options = {}) - get "#{Repository.path repo}/keys/#{id}", options - end - - # Add deploy key to a repo - # - # Requires authenticated client. - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository. - # @param title [String] Title reference for the deploy key. - # @param key [String] Public key. - # @return [Sawyer::Resource] Hash representing newly added key. - # @see https://developer.github.com/v3/repos/keys/#add-a-new-deploy-key - # @example - # @client.add_deploy_key('octokit/octokit.rb', 'Staging server', 'ssh-rsa AAA...') - def add_deploy_key(repo, title, key, options = {}) - post "#{Repository.path repo}/keys", options.merge(title: title, key: key) - end - - # Edit a deploy key - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository. - # @param id [Integer] Deploy key ID. - # @param options [Hash] Attributes to edit. - # @option title [String] Key title. - # @option key [String] Public key. - # @return [Sawyer::Resource] Updated deploy key. - # @deprecated This method is no longer supported in the API - # @see https://developer.github.com/changes/2014-02-24-finer-grained-scopes-for-ssh-keys/ - # @see https://developer.github.com/v3/repos/keys/#edit-a-deploy-key - # @example Update the key for a deploy key. - # @client.edit_deploy_key('octokit/octokit.rb', 8675309, :key => 'ssh-rsa BBB...') - # @example - # @client.update_deploy_key('octokit/octokit.rb', 8675309, :title => 'Uber', :key => 'ssh-rsa BBB...')) - def edit_deploy_key(repo, id, options) - patch "#{Repository.path repo}/keys/#{id}", options - end - alias update_deploy_key edit_deploy_key - - # Remove deploy key from a repo - # - # Requires authenticated client. - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository. - # @param id [Integer] Id of the deploy key to remove. - # @return [Boolean] True if key removed, false otherwise. - # @see https://developer.github.com/v3/repos/keys/#remove-a-deploy-key - # @example - # @client.remove_deploy_key('octokit/octokit.rb', 100000) - def remove_deploy_key(repo, id, options = {}) - boolean_from_response :delete, "#{Repository.path repo}/keys/#{id}", options - end - - # List collaborators - # - # Requires authenticated client for private repos. - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository. - # @option options [String] :affiliation Filters the return array by affiliation. - # Can be one of: outside, direct, or all. - # If not specified, defaults to all - # @return [Array] Array of hashes representing collaborating users. - # @see https://developer.github.com/v3/repos/collaborators/#list-collaborators - # @example - # Octokit.collaborators('octokit/octokit.rb') - # @example - # Octokit.collabs('octokit/octokit.rb') - # @example - # @client.collabs('octokit/octokit.rb') - def collaborators(repo, options = {}) - paginate "#{Repository.path repo}/collaborators", options - end - alias collabs collaborators - - # Add collaborator to repo - # - # This can also be used to update the permission of an existing collaborator - # - # Requires authenticated client. - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository. - # @param collaborator [String] Collaborator GitHub username to add. - # @option options [String] :permission The permission to grant the collaborator. - # Only valid on organization-owned repositories. - # Can be one of: pull, push, or admin. - # If not specified, defaults to push - # @return [Boolean] True if collaborator added, false otherwise. - # @see https://developer.github.com/v3/repos/collaborators/#add-user-as-a-collaborator - # @example - # @client.add_collaborator('octokit/octokit.rb', 'holman') - # @example - # @client.add_collab('octokit/octokit.rb', 'holman') - # @example Add a collaborator with admin permissions - # @client.add_collaborator('octokit/octokit.rb', 'holman', permission: 'admin') - def add_collaborator(repo, collaborator, options = {}) - boolean_from_response :put, "#{Repository.path repo}/collaborators/#{collaborator}", options - end - alias add_collab add_collaborator - - # Remove collaborator from repo. - # - # Requires authenticated client. - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository. - # @param collaborator [String] Collaborator GitHub username to remove. - # @return [Boolean] True if collaborator removed, false otherwise. - # @see https://developer.github.com/v3/repos/collaborators/#remove-user-as-a-collaborator - # @example - # @client.remove_collaborator('octokit/octokit.rb', 'holman') - # @example - # @client.remove_collab('octokit/octokit.rb', 'holman') - def remove_collaborator(repo, collaborator, options = {}) - boolean_from_response :delete, "#{Repository.path repo}/collaborators/#{collaborator}", options - end - alias remove_collab remove_collaborator - - # Checks if a user is a collaborator for a repo. - # - # Requires authenticated client. - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository. - # @param collaborator [String] Collaborator GitHub username to check. - # @return [Boolean] True if user is a collaborator, false otherwise. - # @see https://developer.github.com/v3/repos/collaborators/#check-if-a-user-is-a-collaborator - # @example - # @client.collaborator?('octokit/octokit.rb', 'holman') - def collaborator?(repo, collaborator, options = {}) - boolean_from_response :get, "#{Repository.path repo}/collaborators/#{collaborator}", options - end - - # Get a user's permission level for a repo. - # - # Requires authenticated client - # - # @return [Sawyer::Resource] Hash representing the user's permission level for the given repository - # @see https://developer.github.com/v3/repos/collaborators/#review-a-users-permission-level - # @example - # @client.permission_level('octokit/octokit.rb', 'lizzhale') - def permission_level(repo, collaborator, options = {}) - get "#{Repository.path repo}/collaborators/#{collaborator}/permission", options - end - - # List teams for a repo - # - # Requires authenticated client that is an owner or collaborator of the repo. - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository. - # @return [Array] Array of hashes representing teams. - # @see https://developer.github.com/v3/repos/#list-teams - # @example - # @client.repository_teams('octokit/pengwynn') - # @example - # @client.repo_teams('octokit/pengwynn') - # @example - # @client.teams('octokit/pengwynn') - def repository_teams(repo, options = {}) - paginate "#{Repository.path repo}/teams", options - end - alias repo_teams repository_teams - alias teams repository_teams - - # List all topics for a repository - # - # Requires authenticated client for private repos. - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository. - # @return [Sawyer::Resource] representing the topics for given repo - # @see https://developer.github.com/v3/repos/#list-all-topics-for-a-repository - # @example List topics for octokit/octokit.rb - # Octokit.topics('octokit/octokit.rb') - # @example List topics for octokit/octokit.rb - # client.topics('octokit/octokit.rb') - def topics(repo, options = {}) - paginate "#{Repository.path repo}/topics", options - end - - # Replace all topics for a repository - # - # Requires authenticated client. - # - # @param repo [Integer, String, Repository, Hash] A Github repository - # @param names [Array] An array of topics to add to the repository. - # @return [Sawyer::Resource] representing the replaced topics for given repo - # @see https://developer.github.com/v3/repos/#replace-all-topics-for-a-repository - # @example Replace topics for octokit/octokit.rb - # client.replace_all_topics('octokit/octokit.rb', ['octocat', 'atom', 'electron', 'API']) - # @example Clear all topics for octokit/octokit.rb - # client.replace_all_topics('octokit/octokit.rb', []) - def replace_all_topics(repo, names, options = {}) - put "#{Repository.path repo}/topics", options.merge(names: names) - end - - # List contributors to a repo - # - # Requires authenticated client for private repos. - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository. - # @param anon [Boolean] Set true to include anonymous contributors. - # @return [Array] Array of hashes representing users. - # @see https://developer.github.com/v3/repos/#list-contributors - # @example - # Octokit.contributors('octokit/octokit.rb', true) - # @example - # Octokit.contribs('octokit/octokit.rb') - # @example - # @client.contribs('octokit/octokit.rb') - def contributors(repo, anon = nil, options = {}) - options[:anon] = 1 if anon.to_s[/1|true/] - paginate "#{Repository.path repo}/contributors", options - end - alias contribs contributors - - # List stargazers of a repo - # - # Requires authenticated client for private repos. - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository. - # @return [Array] Array of hashes representing users. - # @see https://developer.github.com/v3/activity/starring/#list-stargazers - # @example - # Octokit.stargazers('octokit/octokit.rb') - # @example - # @client.stargazers('octokit/octokit.rb') - def stargazers(repo, options = {}) - paginate "#{Repository.path repo}/stargazers", options - end - - # @deprecated Use {#stargazers} instead - # - # List watchers of repo. - # - # Requires authenticated client for private repos. - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository. - # @return [Array] Array of hashes representing users. - # @see https://developer.github.com/v3/repos/watching/#list-watchers - # @example - # Octokit.watchers('octokit/octokit.rb') - # @example - # @client.watchers('octokit/octokit.rb') - def watchers(repo, options = {}) - paginate "#{Repository.path repo}/watchers", options - end - - # List forks - # - # Requires authenticated client for private repos. - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository. - # @return [Array] Array of hashes representing repos. - # @see https://developer.github.com/v3/repos/forks/#list-forks - # @example - # Octokit.forks('octokit/octokit.rb') - # @example - # Octokit.network('octokit/octokit.rb') - # @example - # @client.forks('octokit/octokit.rb') - def forks(repo, options = {}) - paginate "#{Repository.path repo}/forks", options - end - alias network forks - - # List languages of code in the repo. - # - # Requires authenticated client for private repos. - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository. - # @return [Array] Array of Hashes representing languages. - # @see https://developer.github.com/v3/repos/#list-languages - # @example - # Octokit.languages('octokit/octokit.rb') - # @example - # @client.languages('octokit/octokit.rb') - def languages(repo, options = {}) - paginate "#{Repository.path repo}/languages", options - end - - # List tags - # - # Requires authenticated client for private repos. - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository. - # @return [Array] Array of hashes representing tags. - # @see https://developer.github.com/v3/repos/#list-tags - # @example - # Octokit.tags('octokit/octokit.rb') - # @example - # @client.tags('octokit/octokit.rb') - def tags(repo, options = {}) - paginate "#{Repository.path repo}/tags", options - end - - # List branches - # - # Requires authenticated client for private repos. - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository. - # @return [Array] Array of hashes representing branches. - # @see https://developer.github.com/v3/repos/#list-branches - # @example - # Octokit.branches('octokit/octokit.rb') - # @example - # @client.branches('octokit/octokit.rb') - def branches(repo, options = {}) - paginate "#{Repository.path repo}/branches", options - end - - # Get a single branch from a repository - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository. - # @param branch [String] Branch name - # @return [Sawyer::Resource] The branch requested, if it exists - # @see https://developer.github.com/v3/repos/#get-branch - # @example Get branch 'master` from octokit/octokit.rb - # Octokit.branch("octokit/octokit.rb", "master") - def branch(repo, branch, options = {}) - get "#{Repository.path repo}/branches/#{CGI.escape(branch)}", options - end - alias get_branch branch - - # Lock a single branch from a repository - # - # Requires authenticated client - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository. - # @param branch [String] Branch name - # @option options [Hash] :required_status_checks If not null, the following keys are required: - # :enforce_admins [boolean] Enforce required status checks for repository administrators. - # :strict [boolean] Require branches to be up to date before merging. - # :contexts [Array] The list of status checks to require in order to merge into this branch - # - # @option options [Hash] :restrictions If not null, the following keys are required: - # :users [Array] The list of user logins with push access - # :teams [Array] The list of team slugs with push access. - # - # Teams and users restrictions are only available for organization-owned repositories. - # @return [Sawyer::Resource] The protected branch - # @see https://developer.github.com/v3/repos/#enabling-and-disabling-branch-protection - # @example - # @client.protect_branch('octokit/octokit.rb', 'master', foo) - def protect_branch(repo, branch, options = {}) - options[:restrictions] ||= nil - options[:required_status_checks] ||= nil - put "#{Repository.path repo}/branches/#{branch}/protection", options - end - - # Get branch protection summary - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository. - # @param branch [String] Branch name - # @return [Sawyer::Resource, nil] Branch protection summary or nil if the branch - # is not protected - # @see https://developer.github.com/v3/repos/branches/#get-branch-protection - # @example - # @client.branch_protection('octokit/octokit.rb', 'master') - def branch_protection(repo, branch, options = {}) - get "#{Repository.path repo}/branches/#{branch}/protection", options - rescue Octokit::BranchNotProtected - nil - end - - # Unlock a single branch from a repository - # - # Requires authenticated client - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository. - # @param branch [String] Branch name - # @return [Sawyer::Resource] The unprotected branch - # @see https://developer.github.com/v3/repos/#enabling-and-disabling-branch-protection - # @example - # @client.unprotect_branch('octokit/octokit.rb', 'master') - def unprotect_branch(repo, branch, options = {}) - boolean_from_response :delete, "#{Repository.path repo}/branches/#{branch}/protection", options - end - - # Rename a single branch from a repository - # - # Requires authenticated client - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository. - # @param branch [String] Current branch name - # @param new_name [String] New branch name - # @return [Sawyer::Resource] The renamed branch - # @see https://developer.github.com/v3/repos/#rename-a-branch - # @example - # @client.rename_branch('octokit/octokit.rb', 'master', 'main') - def rename_branch(repo, branch, new_name, options = {}) - params = { - new_name: new_name - } - post "#{Repository.path repo}/branches/#{branch}/rename", params.merge(options) - end - - # List users available for assigning to issues. - # - # Requires authenticated client for private repos. - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository. - # @return [Array] Array of hashes representing users. - # @see https://developer.github.com/v3/issues/assignees/#list-assignees - # @example - # Octokit.repository_assignees('octokit/octokit.rb') - # @example - # Octokit.repo_assignees('octokit/octokit.rb') - # @example - # @client.repository_assignees('octokit/octokit.rb') - def repository_assignees(repo, options = {}) - paginate "#{Repository.path repo}/assignees", options - end - alias repo_assignees repository_assignees - - # Check to see if a particular user is an assignee for a repository. - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository. - # @param assignee [String] User login to check - # @return [Boolean] True if assignable on project, false otherwise. - # @see https://developer.github.com/v3/issues/assignees/#check-assignee - # @example - # Octokit.check_assignee('octokit/octokit.rb', 'andrew') - def check_assignee(repo, assignee, options = {}) - boolean_from_response :get, "#{Repository.path repo}/assignees/#{assignee}", options - end - - # List watchers subscribing to notifications for a repo - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository. - # @return [Array] Array of users watching. - # @see https://developer.github.com/v3/activity/watching/#list-watchers - # @example - # @client.subscribers("octokit/octokit.rb") - def subscribers(repo, options = {}) - paginate "#{Repository.path repo}/subscribers", options - end - - # Get a repository subscription - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository. - # @return [Sawyer::Resource] Repository subscription. - # @see https://developer.github.com/v3/activity/watching/#get-a-repository-subscription - # @example - # @client.subscription("octokit/octokit.rb") - def subscription(repo, options = {}) - get "#{Repository.path repo}/subscription", options - end - - # Update repository subscription - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository. - # @param options [Hash] - # - # @option options [Boolean] :subscribed Determines if notifications - # should be received from this repository. - # @option options [Boolean] :ignored Deterimines if all notifications - # should be blocked from this repository. - # @return [Sawyer::Resource] Updated repository subscription. - # @see https://developer.github.com/v3/activity/watching/#set-a-repository-subscription - # @example Subscribe to notifications for a repository - # @client.update_subscription("octokit/octokit.rb", {subscribed: true}) - def update_subscription(repo, options = {}) - put "#{Repository.path repo}/subscription", options - end - - # Delete a repository subscription - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository. - # @return [Boolean] True if subscription deleted, false otherwise. - # @see https://developer.github.com/v3/activity/watching/#delete-a-repository-subscription - # - # @example - # @client.delete_subscription("octokit/octokit.rb") - def delete_subscription(repo, options = {}) - boolean_from_response :delete, "#{Repository.path repo}/subscription", options - end - - # Create a repository dispatch event - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository. - # @param event_type [String] A custom webhook event name. - # @option options [Hash] :client_payload payload with extra information - # about the webhook event that your action or worklow may use. - # - # @return [Boolean] True if event was dispatched, false otherwise. - # @see https://developer.github.com/v3/repos/#create-a-repository-dispatch-event - def dispatch_event(repo, event_type, options = {}) - boolean_from_response :post, "#{Repository.path repo}/dispatches", options.merge({ event_type: event_type }) - end - - # Check to see if vulnerability alerts are enabled for a repository - # - # The authenticated user must have admin access to the repository. - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository. - # @return [Boolean] True if vulnerability alerts are enabled, false otherwise. - # @see https://docs.github.com/en/rest/reference/repos#check-if-vulnerability-alerts-are-enabled-for-a-repository - # - # @example - # @client.vulnerability_alerts_enabled?("octokit/octokit.rb") - def vulnerability_alerts_enabled?(repo, options = {}) - boolean_from_response(:get, "#{Repository.path repo}/vulnerability-alerts", options) - end - - # Enable vulnerability alerts for a repository - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository. - # @param options [Hash] - # - # @return [Boolean] True if vulnerability alerts enabled, false otherwise. - # @see https://docs.github.com/en/rest/reference/repos#enable-vulnerability-alerts - # @example Enable vulnerability alerts for a repository - # @client.enable_vulnerability_alerts("octokit/octokit.rb") - def enable_vulnerability_alerts(repo, options = {}) - boolean_from_response(:put, "#{Repository.path repo}/vulnerability-alerts", options) - end - - # Disable vulnerability alerts for a repository - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository. - # @param options [Hash] - # - # @return [Boolean] True if vulnerability alerts disabled, false otherwise. - # @see https://docs.github.com/en/rest/reference/repos#disable-vulnerability-alerts - # @example Disable vulnerability alerts for a repository - # @client.disable_vulnerability_alerts("octokit/octokit.rb") - def disable_vulnerability_alerts(repo, options = {}) - boolean_from_response(:delete, "#{Repository.path repo}/vulnerability-alerts", options) - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/repository_invitations.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/repository_invitations.rb deleted file mode 100644 index e3e2c809..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/repository_invitations.rb +++ /dev/null @@ -1,96 +0,0 @@ -# frozen_string_literal: true - -module Octokit - class Client - # Methods for the Repository Invitations API - # - # @see https://developer.github.com/v3/repos/invitations/ - module RepositoryInvitations - # Invite a user to a repository - # - # Requires authenticated client - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param user [String] User GitHub username to add - # @return [Sawyer::Resource] The repository invitation - # @see https://developer.github.com/v3/repos/collaborators/#add-user-as-a-collaborator - def invite_user_to_repository(repo, user, options = {}) - put "#{Repository.path repo}/collaborators/#{user}", options - end - alias invite_user_to_repo invite_user_to_repository - - # List all invitations for a repository - # - # Requires authenticated client - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @return [Array] A list of invitations - # @see https://developer.github.com/v3/repos/invitations/#list-invitations-for-a-repository - def repository_invitations(repo, options = {}) - paginate "#{Repository.path repo}/invitations", options - end - alias repo_invitations repository_invitations - - # Delete an invitation for a repository - # - # Requires authenticated client - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param invitation_id [Integer] The id of the invitation - # @return [Boolean] True if the invitation was successfully deleted - # @see https://developer.github.com/v3/repos/invitations/#delete-a-repository-invitation - def delete_repository_invitation(repo, invitation_id, options = {}) - boolean_from_response :delete, "#{Repository.path repo}/invitations/#{invitation_id}", options - end - alias delete_repo_invitation delete_repository_invitation - - # Update an invitation for a repository - # - # Requires authenticated client - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param invitation_id [Integer] The id of the invitation - # @return [Sawyer::Resource] The updated repository invitation - # @see https://developer.github.com/v3/repos/invitations/#update-a-repository-invitation - def update_repository_invitation(repo, invitation_id, options = {}) - patch "#{Repository.path repo}/invitations/#{invitation_id}", options - end - alias update_repo_invitation update_repository_invitation - - # List all repository invitations for the user - # - # Requires authenticated client - # - # @return [Array] The users repository invitations - # @see https://developer.github.com/v3/repos/invitations/#list-a-users-repository-invitations - def user_repository_invitations(options = {}) - paginate '/user/repository_invitations', options - end - alias user_repo_invitations user_repository_invitations - - # Accept a repository invitation - # - # Requires authenticated client - # - # @param invitation_id [Integer] The id of the invitation - # @return [Boolean] True if the acceptance of the invitation was successful - # @see https://developer.github.com/v3/repos/invitations/#accept-a-repository-invitation - def accept_repository_invitation(invitation_id, options = {}) - patch "/user/repository_invitations/#{invitation_id}", options - end - alias accept_repo_invitation accept_repository_invitation - - # Decline a repository invitation - # - # Requires authenticated client - # - # @param invitation_id [Integer] The id of the invitation - # @return [Boolean] True if the acceptance of the invitation was successful - # @see https://developer.github.com/v3/repos/invitations/#decline-a-repository-invitation - def decline_repository_invitation(invitation_id, options = {}) - boolean_from_response :delete, "/user/repository_invitations/#{invitation_id}", options - end - alias decline_invitation decline_repository_invitation - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/reviews.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/reviews.rb deleted file mode 100644 index e1d410e3..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/reviews.rb +++ /dev/null @@ -1,227 +0,0 @@ -# frozen_string_literal: true - -module Octokit - class Client - # Methods for the Reviews API - # - # @see https://developer.github.com/v3/pulls/reviews/ - module Reviews - # List reviews on a pull request - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param number [Integer] Number ID of the pull request - # @see https://developer.github.com/v3/pulls/reviews/#list-reviews-on-a-pull-request - # - # @example - # @client.pull_request_reviews('octokit/octokit.rb', 2) - # - # @return [Array] Array of Hashes representing the reviews - def pull_request_reviews(repo, number, options = {}) - paginate "#{Repository.path repo}/pulls/#{number}/reviews", options - end - - # Get a single review - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param number [Integer] Number ID of the pull request - # @param review [Integer] The id of the review - # @see https://developer.github.com/v3/pulls/reviews/#get-a-single-review - # - # @example - # @client.pull_request_review('octokit/octokit.rb', 825, 6505518) - # - # @return [Sawyer::Resource] Hash representing the review - def pull_request_review(repo, number, review, options = {}) - get "#{Repository.path repo}/pulls/#{number}/reviews/#{review}", options - end - - # Delete a pending review - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param number [Integer] Number ID of the pull request - # @param review [Integer] The id of the review - # @see https://developer.github.com/v3/pulls/reviews/#delete-a-pending-review - # - # @example - # @client.delete_pull_request_review('octokit/octokit.rb', 825, 6505518) - # - # @return [Sawyer::Resource] Hash representing the deleted review - def delete_pull_request_review(repo, number, review, options = {}) - delete "#{Repository.path repo}/pulls/#{number}/reviews/#{review}", options - end - - # Get comments for a single review - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param number [Integer] Number ID of the pull request - # @param review [Integer] The id of the review - # @see https://developer.github.com/v3/pulls/reviews/#get-comments-for-a-single-review - # - # @example - # @client.pull_request_review_comments('octokit/octokit.rb', 825, 6505518) - # - # @return [Array] Array of Hashes representing the review comments - def pull_request_review_comments(repo, number, review, options = {}) - paginate "#{Repository.path repo}/pulls/#{number}/reviews/#{review}/comments", options - end - - # Create a pull request review - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param number [Integer] Number ID of the pull request - # @param options [Hash] Method options - # @option options [String] :event The review action (event) to perform; - # can be one of APPROVE, REQUEST_CHANGES, or COMMENT. - # If left blank, the review is left PENDING. - # @option options [String] :body The body text of the pull request review - # @option options [Array] :comments Comments part of the review - # @option comments [String] :path The path to the file being commented on - # @option comments [Integer] :position The position in the file to be commented on - # @option comments [String] :body Body of the comment - # @see https://developer.github.com/v3/pulls/reviews/#create-a-pull-request-review - # - # @example - # comments = [ - # { path: '.travis.yml', position: 10, body: 'ruby-head is under development that is not stable.' }, - # { path: '.travis.yml', position: 32, body: 'ruby-head is also required in thervm section.' }, - # ] - # options = { event: 'REQUEST_CHANGES', comments: comments } - # @client.create_pull_request_review('octokit/octokit.rb', 844, options) - # - # @return [Sawyer::Resource>] Hash respresenting the review - def create_pull_request_review(repo, number, options = {}) - post "#{Repository.path repo}/pulls/#{number}/reviews", options - end - - # Submit a pull request review - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param number [Integer] Number ID of the pull request - # @param review [Integer] The id of the review - # @param event [String] The review action (event) to perform; can be one of - # APPROVE, REQUEST_CHANGES, or COMMENT. - # @param options [Hash] Method options - # @option options [String] :body The body text of the pull request review - # @see https://developer.github.com/v3/pulls/reviews/#submit-a-pull-request-review - # - # @example - # @client.submit_pull_request_review('octokit/octokit.rb', 825, 6505518, - # 'APPROVE', body: 'LGTM!') - # - # @return [Sawyer::Resource] Hash respresenting the review - def submit_pull_request_review(repo, number, review, event, options = {}) - options = options.merge(event: event) - post "#{Repository.path repo}/pulls/#{number}/reviews/#{review}/events", options - end - - # Dismiss a pull request review - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param number [Integer] Number ID of the pull request - # @param review [Integer] The id of the review - # @param message [String] The message for the pull request review dismissal - # @see https://developer.github.com/v3/pulls/reviews/#dismiss-a-pull-request-review - # - # @example - # @client.dismiss_pull_request_review('octokit/octokit.rb', 825, 6505518, 'The message.') - # - # @return [Sawyer::Resource] Hash representing the dismissed review - def dismiss_pull_request_review(repo, number, review, message, options = {}) - options = options.merge(message: message) - put "#{Repository.path repo}/pulls/#{number}/reviews/#{review}/dismissals", options - end - - # List review requests - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param number [Integer] Number ID of the pull request - # @see https://developer.github.com/v3/pulls/review_requests/#list-review-requests - # - # @example - # @client.pull_request_review_requests('octokit/octokit.rb', 2) - # - # @return [Array] Array of Hashes representing the review requests - def pull_request_review_requests(repo, number, options = {}) - paginate "#{Repository.path repo}/pulls/#{number}/requested_reviewers", options - end - - # Create a review request - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param number [Integer] Number ID of the pull request - # @param reviewers [Hash] :reviewers [Array] An array of user logins - # @param options [Hash] :team_reviewers [Array] An array of team slugs - # @see https://developer.github.com/v3/pulls/review_requests/#request-reviewers-for-a-pull-request - # - # @example - # @client.request_pull_request_review('octokit/octokit.rb', 2, reviewers: ['soudy']) - # - # @return [Sawyer::Resource>] Hash respresenting the pull request - def request_pull_request_review(repo, number, reviewers = {}, options = {}) - # TODO(5.0): remove deprecated behavior - if reviewers.is_a?(Array) - octokit_warn( - 'Deprecated: Octokit::Client#request_pull_request_review ' \ - "no longer takes a separate :reviewers argument.\n" \ - 'Please update your call to pass :reviewers and :team_reviewers as part of the options hash.' - ) - options = options.merge(reviewers: reviewers) - else - options = options.merge(reviewers) - end - - post "#{Repository.path repo}/pulls/#{number}/requested_reviewers", options - end - - # Delete a review request - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param id [Integer] The id of the pull request - # @param reviewers [Hash] :reviewers [Array] An array of user logins - # @param options [Hash] :team_reviewers [Array] An array of team slugs - # - # @see https://developer.github.com/v3/pulls/review_requests/#delete-a-review-request - # - # @example - # options = { - # "reviewers" => [ "octocat", "hubot", "other_user" ], - # "team_reviewers" => [ "justice-league" ] - # } - # @client.delete_pull_request_review_request('octokit/octokit.rb', 2, options) - # - # @return [Sawyer::Resource>] Hash representing the pull request - def delete_pull_request_review_request(repo, id, reviewers = {}, options = {}) - # TODO(5.0): remove deprecated behavior - if !reviewers.empty? && !options.empty? - octokit_warn( - 'Deprecated: Octokit::Client#delete_pull_request_review_request ' \ - "no longer takes a separate :reviewers argument.\n" \ - 'Please update your call to pass :reviewers and :team_reviewers as part of the options hash.' - ) - end - # For backwards compatibility, this endpoint can be called with a separate reviewers hash. - # If not called with a separate hash, then 'reviewers' is, in fact, 'options'. - options = options.merge(reviewers) - delete "#{Repository.path repo}/pulls/#{id}/requested_reviewers", options - end - - # Update a review request comment - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param number [Integer] Number ID of the pull request - # @param review [Integer] The id of the review - # @param body [String] body text of the pull request review. - # @param options [Hash] Method options - # @see https://developer.github.com/v3/pulls/reviews/#update-a-pull-request-review - # - # @example - # @client.update_pull_request_review('octokit/octokit.rb', 825, 6505518, 'This is close to perfect! Please address the suggested inline change. And add more about this.') - # - # @return [Sawyer::Resource] Hash representing the review comment - def update_pull_request_review(repo, number, review, body, options = {}) - options[:body] = body - put "#{Repository.path repo}/pulls/#{number}/reviews/#{review}", options - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/say.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/say.rb deleted file mode 100644 index 6245adf3..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/say.rb +++ /dev/null @@ -1,18 +0,0 @@ -# frozen_string_literal: true - -module Octokit - class Client - # Methods for the unpublished Octocat API - module Say - # Return a nifty ASCII Octocat with GitHub wisdom - # or your own - # - # @return [String] - def say(text = nil, options = {}) - options[:s] = text if text - get 'octocat', options - end - alias octocat say - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/search.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/search.rb deleted file mode 100644 index 6d030d54..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/search.rb +++ /dev/null @@ -1,105 +0,0 @@ -# frozen_string_literal: true - -module Octokit - class Client - # Methods for the Search API - # - # @see https://developer.github.com/v3/search/ - module Search - # Search code - # - # @param query [String] Search term and qualifiers - # @param options [Hash] Sort and pagination options - # @option options [String] :sort Sort field - # @option options [String] :order Sort order (asc or desc) - # @option options [Integer] :page Page of paginated results - # @option options [Integer] :per_page Number of items per page - # @return [Sawyer::Resource] Search results object - # @see https://developer.github.com/v3/search/#search-code - def search_code(query, options = {}) - search 'search/code', query, options - end - - # Search commits - # - # @param query [String] Search terms and qualifiers - # @param options [Hash] Sort and pagination options - # @option options [String] :sort Sort field - # @option options [String] :order Sort order (asc or desc) - # @option options [Integer] :page Page of paginated results - # @option options [Integer] :per_page Number of items per page - # @return [Sawyer::Resource] Search results object - # @see https://developer.github.com/v3/search/#search-commits - def search_commits(query, options = {}) - search 'search/commits', query, options - end - - # Search issues - # - # @param query [String] Search term and qualifiers - # @param options [Hash] Sort and pagination options - # @option options [String] :sort Sort field - # @option options [String] :order Sort order (asc or desc) - # @option options [Integer] :page Page of paginated results - # @option options [Integer] :per_page Number of items per page - # @return [Sawyer::Resource] Search results object - # @see https://developer.github.com/v3/search/#search-issues-and-pull-requests - # @see https://docs.github.com/en/rest/search#limitations-on-query-length - def search_issues(query, options = {}) - search 'search/issues', query, options - end - - # Search repositories - # - # @param query [String] Search term and qualifiers - # @param options [Hash] Sort and pagination options - # @option options [String] :sort Sort field - # @option options [String] :order Sort order (asc or desc) - # @option options [Integer] :page Page of paginated results - # @option options [Integer] :per_page Number of items per page - # @return [Sawyer::Resource] Search results object - # @see https://developer.github.com/v3/search/#search-repositories - def search_repositories(query, options = {}) - search 'search/repositories', query, options - end - alias search_repos search_repositories - - # Search topics - # - # @param query [String] Search term and qualifiers - # @param options [Hash] Sort and pagination options - # @option options [String] :sort Sort field - # @option options [String] :order Sort order (asc or desc) - # @option options [Integer] :page Page of paginated results - # @option options [Integer] :per_page Number of items per page - # @return [Sawyer::Resource] Search results object - # @see https://developer.github.com/v3/search/#search-topics - def search_topics(query, options = {}) - search 'search/topics', query, options - end - - # Search users - # - # @param query [String] Search term and qualifiers - # @param options [Hash] Sort and pagination options - # @option options [String] :sort Sort field - # @option options [String] :order Sort order (asc or desc) - # @option options [Integer] :page Page of paginated results - # @option options [Integer] :per_page Number of items per page - # @return [Sawyer::Resource] Search results object - # @see https://developer.github.com/v3/search/#search-users - def search_users(query, options = {}) - search 'search/users', query, options - end - - private - - def search(path, query, options = {}) - opts = options.merge(q: query) - paginate(path, opts) do |data, last_response| - data.items.concat last_response.data.items - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/service_status.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/service_status.rb deleted file mode 100644 index 2e8a1826..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/service_status.rb +++ /dev/null @@ -1,48 +0,0 @@ -# frozen_string_literal: true - -module Octokit - class Client - # Methods for the GitHub Status API - # - # @see https://status.github.com/api - module ServiceStatus - # Root for status API - # @private - SUMMARY_ROOT = 'https://www.githubstatus.com/api/v2/summary.json' - STATUS_ROOT = 'https://www.githubstatus.com/api/v2/status.json' - COMPONENTS_ROOT = 'https://www.githubstatus.com/api/v2/components.json' - - # Returns a summary with the current status and the last status messages. - # - # @return [] GitHub status summary - # @see https://www.githubstatus.com/api#summory - def github_status_summary - get(SUMMARY_ROOT) - end - - # Returns the current system status - # - # @return [Sawyer::Resource] GitHub status - # @see https://www.githubstatus.com/api#status - def github_status - get(STATUS_ROOT) - end - - # Returns the last human communication, status, and timestamp. - # - # @return [Sawyer::Resource] GitHub status last message - # @see https://www.githubstatus.com/api/#components - def github_status_last_message - get(COMPONENTS_ROOT).components.first - end - - # Returns the most recent human communications with status and timestamp. - # - # @return [Array] GitHub status messages - # @see https://www.githubstatus.com/api#components - def github_status_messages - get(COMPONENTS_ROOT).components - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/source_import.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/source_import.rb deleted file mode 100644 index 7cc13a92..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/source_import.rb +++ /dev/null @@ -1,156 +0,0 @@ -# frozen_string_literal: true - -module Octokit - class Client - # Methods for the Source Import API - # - # @see https://developer.github.com/v3/migration/source_imports - module SourceImport - # Start a source import to a GitHub repository using GitHub Importer. - # - # @overload start_source_import(repo, vcs, vcs_url, options = {}) - # @deprecated - # @param repo [Integer, String, Hash, Repository] A GitHub repository. - # @param vcs [String] The originating VCS type. Can be one of "subversion", "git", "mercurial", or "tfvc". - # @param vcs_url [String] The URL of the originating repository. - # @param options [Hash] - # @option options [String] :vcs_username If authentication is required, the username to provide to vcs_url. - # @option options [String] :vcs_password If authentication is required, the password to provide to vcs_url. - # @option options [String] :tfvc_project For a tfvc import, the name of the project that is being imported. - # @overload start_source_import(repo, vcs_url, options = {}) - # @param repo [Integer, String, Hash, Repository] A GitHub repository. - # @param vcs_url [String] The URL of the originating repository. - # @param options [Hash] - # @param options [String] :vcs The originating VCS type. Can be one of "subversion", "git", "mercurial", or "tfvc". - # @option options [String] :vcs_username If authentication is required, the username to provide to vcs_url. - # @option options [String] :vcs_password If authentication is required, the password to provide to vcs_url. - # @option options [String] :tfvc_project For a tfvc import, the name of the project that is being imported. - # @return [Sawyer::Resource] Hash representing the repository import - # @see https://developer.github.com/v3/migration/source_imports/#start-an-import - # - # @example - # @client.start_source_import("octokit/octokit.rb", "http://svn.mycompany.com/svn/myproject", { - # :vcs => "subversion", - # :vcs_username" => "octocat", - # :vcs_password => "secret" - # }) - def start_source_import(*args) - arguments = Octokit::RepoArguments.new(args) - vcs_url = arguments.pop - vcs = arguments.pop - if vcs - octokit_warn 'Octokit#start_source_import vcs parameter is now an option, please update your call before the next major Octokit version update.' - arguments.options.merge!(vcs: vcs) - end - options = arguments.options.merge(vcs_url: vcs_url) - put "#{Repository.path arguments.repo}/import", options - end - - # View the progress of an import. - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository. - # @return [Sawyer::Resource] Hash representing the progress of the import - # @see https://developer.github.com/v3/migration/source_imports/#get-import-progress - # - # @example - # @client.source_import_progress("octokit/octokit.rb") - def source_import_progress(repo, options = {}) - get "#{Repository.path repo}/import", options - end - - # Update source import with authentication or project choice - # Restart source import if no options are passed - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository. - # @return [Sawyer::Resource] Hash representing the repository import - # @see https://developer.github.com/v3/migration/source_imports/#update-existing-import - # @option options [String] :vcs_username If authentication is required, the username to provide to vcs_url. - # @option options [String] :vcs_password If authentication is required, the password to provide to vcs_url. - # @option options [String] To update project choice, please refer to the project_choice array from the progress return hash for the exact attributes. - # https://developer.github.com/v3/migration/source_imports/#update-existing-import - # - # @example - # @client.update_source_import("octokit/octokit.rb", { - # :vcs_username" => "octocat", - # :vcs_password => "secret" - # }) - def update_source_import(repo, options = {}) - patch "#{Repository.path repo}/import", options - end - - # List source import commit authors - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository. - # @param options [Hash] - # @option options [String] :since Only authors found after this id are returned. - # @return [Array] Array of hashes representing commit_authors. - # @see https://developer.github.com/v3/migration/source_imports/#get-commit-authors - # - # @example - # @client.source_import_commit_authors("octokit/octokit.rb") - def source_import_commit_authors(repo, options = {}) - get "#{Repository.path repo}/import/authors", options - end - - # Update an author's identity for the import. - # - # @param author_url [String] The source import API url for the commit author - # @param values [Hash] The updated author attributes - # @option values [String] :email The new Git author email. - # @option values [String] :name The new Git author name. - # @return [Sawyer::Resource] Hash representing the updated commit author - # @see https://developer.github.com/v3/migration/source_imports/#map-a-commit-author - # - # @example - # author_url = "https://api.github.com/repos/octokit/octokit.rb/import/authors/1" - # @client.map_source_import_commit_author(author_url, { - # :email => "hubot@github.com", - # :name => "Hubot the Robot" - # }) - def map_source_import_commit_author(author_url, values, options = {}) - options = options.merge(values) - patch author_url, options - end - - # Stop an import for a repository. - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository. - # @return [Boolean] True if the import has been cancelled, false otherwise. - # @see https://developer.github.com/v3/migration/source_imports/#cancel-an-import - # - # @example - # @client.cancel_source_import("octokit/octokit.rb") - def cancel_source_import(repo, options = {}) - boolean_from_response :delete, "#{Repository.path repo}/import", options - end - - # List source import large files - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository. - # @param options [Hash] - # @option options [Integer] :page Page of paginated results - # @return [Array] Array of hashes representing files over 100MB. - # @see https://developer.github.com/v3/migration/source_imports/#get-large-files - # - # @example - # @client.source_import_large_files("octokit/octokit.rb") - def source_import_large_files(repo, options = {}) - get "#{Repository.path repo}/import/large_files", options - end - - # Set preference for using Git LFS to import files over 100MB - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository. - # @param use_lfs [String] Preference for using Git LFS to import large files. Can be one of "opt_in" or "opt_out" - # @return [Sawyer::Resource] Hash representing the repository import - # @see https://developer.github.com/v3/migration/source_imports/#set-git-lfs-preference - # - # @example - # @client.opt_in_source_import_lfs("octokit/octokit.rb", "opt_in") - def set_source_import_lfs_preference(repo, use_lfs, options = {}) - options = options.merge(use_lfs: use_lfs) - patch "#{Repository.path repo}/import/lfs", options - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/stats.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/stats.rb deleted file mode 100644 index 637efa66..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/stats.rb +++ /dev/null @@ -1,108 +0,0 @@ -# frozen_string_literal: true - -module Octokit - class Client - # Methods for the Repository Statistics API - # - # @see https://developer.github.com/v3/repos/statistics/ - module Stats - # Get contributors list with additions, deletions, and commit counts - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @option retry_timeout [Number] How long Octokit should keep trying to get stats (in seconds) - # @option retry_wait [Number] How long Octokit should wait between retries. - # @return [Array] Array of contributor stats - # @see https://developer.github.com/v3/repos/statistics/#get-contributors-list-with-additions-deletions-and-commit-counts - # @example Get contributor stats for octokit - # @client.contributors_stats('octokit/octokit.rb') - def contributors_stats(repo, options = {}) - get_stats(repo, 'contributors', options) - end - alias contributor_stats contributors_stats - - # Get the last year of commit activity data - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @option retry_timeout [Number] How long Octokit should keep trying to get stats (in seconds) - # @option retry_wait [Number] How long Octokit should wait between retries. - # @return [Array] The last year of commit activity grouped by - # week. The days array is a group of commits per day, starting on Sunday. - # @see https://developer.github.com/v3/repos/statistics/#get-the-last-year-of-commit-activity-data - # @example Get commit activity for octokit - # @client.commit_activity_stats('octokit/octokit.rb') - def commit_activity_stats(repo, options = {}) - get_stats(repo, 'commit_activity', options) - end - - # Get the number of additions and deletions per week - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @option retry_timeout [Number] How long Octokit should keep trying to get stats (in seconds) - # @option retry_wait [Number] How long Octokit should wait between retries. - # @return [Array] Weekly aggregate of the number of additions - # and deletions pushed to a repository. - # @see https://developer.github.com/v3/repos/statistics/#get-the-number-of-additions-and-deletions-per-week - # @example Get code frequency stats for octokit - # @client.code_frequency_stats('octokit/octokit.rb') - def code_frequency_stats(repo, options = {}) - get_stats(repo, 'code_frequency', options) - end - - # Get the weekly commit count for the repo owner and everyone else - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @option retry_timeout [Number] How long Octokit should keep trying to get stats (in seconds) - # @option retry_wait [Number] How long Octokit should wait between retries. - # @return [Sawyer::Resource] Total commit counts for the owner and total commit - # counts in all. all is everyone combined, including the owner in the last - # 52 weeks. If you’d like to get the commit counts for non-owners, you can - # subtract all from owner. - # @see https://developer.github.com/v3/repos/statistics/#get-the-weekly-commit-count-for-the-repository-owner-and-everyone-else - # @example Get weekly commit counts for octokit - # @client.participation_stats("octokit/octokit.rb") - def participation_stats(repo, options = {}) - get_stats(repo, 'participation', options) - end - - # Get the number of commits per hour in each day - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @option retry_timeout [Number] How long Octokit should keep trying to get stats (in seconds) - # @option retry_wait [Number] How long Octokit should wait between retries. - # @return [Array] Arrays containing the day number, hour number, and - # number of commits - # @see https://developer.github.com/v3/repos/statistics/#get-the-number-of-commits-per-hour-in-each-day - # @example Get octokit punch card - # @octokit.punch_card_stats - def punch_card_stats(repo, options = {}) - get_stats(repo, 'punch_card', options) - end - alias punch_card punch_card_stats - - private - - # @private Get stats for a repository - # - # @param repo [Integer, String, Hash, Repository] A GitHub repository - # @param metric [String] The metrics you are looking for - # @return [Array or nil] Stats in metric-specific format, or nil if not yet calculated. - # @see https://developer.github.com/v3/repos/statistics/ - def get_stats(repo, metric, options = {}) - options = options.dup - if retry_timeout = options.delete(:retry_timeout) - retry_wait = options.delete(:retry_wait) || 0.5 - timeout = Time.now + retry_timeout - end - loop do - data = get("#{Repository.path repo}/stats/#{metric}", options) - return data if last_response.status == 200 - return [] if last_response.status == 204 - return nil unless retry_timeout - return nil if Time.now >= timeout - - sleep retry_wait if retry_wait - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/statuses.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/statuses.rb deleted file mode 100644 index 6696424e..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/statuses.rb +++ /dev/null @@ -1,47 +0,0 @@ -# frozen_string_literal: true - -module Octokit - class Client - # Methods for the Commit Statuses API - # - # @see https://developer.github.com/v3/repos/statuses/ - module Statuses - # List all statuses for a given commit - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param sha [String] The SHA1 for the commit - # @return [Array] A list of statuses - # @see https://developer.github.com/v3/repos/statuses/#list-statuses-for-a-specific-ref - def statuses(repo, sha, options = {}) - paginate "#{Repository.path repo}/statuses/#{sha}", options - end - alias list_statuses statuses - - # Get the combined status for a ref - # - # @param repo [Integer, String, Repository, Hash] a GitHub repository - # @param ref [String] A Sha or Ref to fetch the status of - # @return [Sawyer::Resource] The combined status for the commit - # @see https://developer.github.com/v3/repos/statuses/#get-the-combined-status-for-a-specific-ref - def combined_status(repo, ref, options = {}) - get "#{Repository.path repo}/commits/#{ref}/status", options - end - alias status combined_status - - # Create status for a commit - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @param sha [String] The SHA1 for the commit - # @param state [String] The state: pending, success, failure, error - # @option options [String] :context A context to differentiate this status from others - # @option options [String] :target_url A link to more details about this status - # @option options [String] :description A short human-readable description of this status - # @return [Sawyer::Resource] A status - # @see https://developer.github.com/v3/repos/statuses/#create-a-status - def create_status(repo, sha, state, options = {}) - options = options.merge(state: state) - post "#{Repository.path repo}/statuses/#{sha}", options - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/tokens.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/tokens.rb deleted file mode 100644 index 05771dba..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/tokens.rb +++ /dev/null @@ -1,31 +0,0 @@ -# frozen_string_literal: true - -module Octokit - class Client - # Method to check scopes - # - # @see https://developer.github.com/v3/oauth_authorizations/#oauth-authorizations-api - module Tokens - # Check scopes for a token - # - # @param token [String] GitHub OAuth token - # @param options [Hash] Header params for request - # @return [Array] OAuth scopes - # @see https://developer.github.com/v3/oauth/#scopes - def scopes(token = @access_token, options = {}) - options = options.dup - raise ArgumentError, 'Access token required' if token.nil? - - auth = { 'Authorization' => "token #{token}" } - headers = (options.delete(:headers) || {}).merge(auth) - - agent.call(:get, 'user', headers: headers) - .headers['X-OAuth-Scopes'] - .to_s - .split(',') - .map(&:strip) - .sort - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/traffic.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/traffic.rb deleted file mode 100644 index eccb52df..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/traffic.rb +++ /dev/null @@ -1,64 +0,0 @@ -# frozen_string_literal: true - -module Octokit - class Client - # Methods for the Traffic API - # - # @see https://developer.github.com/v3/repos/traffic/ - module Traffic - # Get the top 10 referrers over the last 14 days - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @return [Array] List of referrers and stats - # @see https://developer.github.com/v3/repos/traffic/#list-referrers - # @example - # @client.top_referrers('octokit/octokit.rb') - def top_referrers(repo, options = {}) - get "#{Repository.path repo}/traffic/popular/referrers", options - end - - # Get the top 10 popular contents over the last 14 days - # - # @param repo [Integer, String, Repository, Hash] A GitHub repository - # @return [Array] List of popular contents - # @see https://developer.github.com/v3/repos/traffic/#list-paths - # @example - # @client.top_paths('octokit/octokit.rb') - def top_paths(repo, options = {}) - get "#{Repository.path repo}/traffic/popular/paths", options - end - - # Get the total number of views and breakdown per day or week for the - # last 14 days - # - # @param repo [Integer, String, Repository, Hash] A GitHub Repository - # @option options [String] :per ('day') Views per. day or - # week - # @return [Sawyer::Resource] Breakdown of view stats - # @see https://developer.github.com/v3/repos/traffic/#views - # @example Views per day - # @client.views('octokit/octokit.rb') - # @example Views per week - # @client.views('octokit/octokit.rb', per: 'week') - def views(repo, options = {}) - get "#{Repository.path repo}/traffic/views", options - end - - # Get the total number of clones and breakdown per day or week for the - # last 14 days - # - # @param repo [Integer, String, Repository, Hash] A GitHub Repository - # @option options [String] :per ('day') Views per. day or - # week - # @return [Sawyer::Resource] Breakdown of clone stats - # @see https://developer.github.com/v3/repos/traffic/#clones - # @example Clones per day - # @client.clones('octokit/octokit.rb') - # @example Clones per week - # @client.clones('octokit/octokit.rb', per: 'week') - def clones(repo, options = {}) - get "#{Repository.path repo}/traffic/clones", options - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/users.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/users.rb deleted file mode 100644 index 34e55791..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/client/users.rb +++ /dev/null @@ -1,462 +0,0 @@ -# frozen_string_literal: true - -module Octokit - class Client - # Methods for the Users API - # - # @see https://developer.github.com/v3/users/ - module Users - # List all GitHub users - # - # This provides a list of every user, in the order that they signed up - # for GitHub. - # - # @param options [Hash] Optional options. - # @option options [Integer] :since The integer ID of the last User that - # you’ve seen. - # - # @see https://developer.github.com/v3/users/#get-all-users - # - # @return [Array] List of GitHub users. - def all_users(options = {}) - paginate 'users', options - end - - # Get a single user - # - # @param user [Integer, String] GitHub user login or id. - # @return [Sawyer::Resource] - # @see https://developer.github.com/v3/users/#get-a-single-user - # @see https://developer.github.com/v3/users/#get-the-authenticated-user - # @example - # Octokit.user("sferik") - def user(user = nil, options = {}) - get User.path(user), options - end - - # Retrieve the access_token. - # - # @param code [String] Authorization code generated by GitHub. - # @param app_id [String] Client Id we received when our application was registered with GitHub. Defaults to client_id. - # @param app_secret [String] Client Secret we received when our application was registered with GitHub. Defaults to client_secret. - # @return [Sawyer::Resource] Hash holding the access token. - # @see https://developer.github.com/v3/oauth/#web-application-flow - # @example - # Octokit.exchange_code_for_token('aaaa', 'xxxx', 'yyyy', {:accept => 'application/json'}) - def exchange_code_for_token(code, app_id = client_id, app_secret = client_secret, options = {}) - options = options.merge({ - code: code, - client_id: app_id, - client_secret: app_secret, - headers: { - content_type: 'application/json', - accept: 'application/json' - } - }) - - post "#{web_endpoint}login/oauth/access_token", options - end - - # Refresh a user's access token with a refresh token. - # - # Applications can refresh an access token without requiring a user to re-authorize using refresh access token. - # - # @param code [String] 40 character GitHub OAuth refresh access token - # - # @return [Sawyer::Resource] - # @see https://docs.github.com/en/apps/creating-github-apps/authenticating-with-a-github-app/refreshing-user-access-tokens#refreshing-a-user-access-token-with-a-refresh-token - # - # @example - # client = Octokit::Client.new(:client_id => 'abcdefg12345', :client_secret => 'secret') - # client.refresh_access_token('40-character-refresh-token') - def refresh_access_token(code, app_id = client_id, app_secret = client_secret, options = {}) - options = options.merge({ - refresh_token: code, - client_id: app_id, - client_secret: app_secret, - grant_type: 'refresh_token', - headers: { - content_type: 'application/json', - accept: 'application/json' - } - }) - - post "#{web_endpoint}login/oauth/access_token", options - end - - # Validate user username and password - # - # @param options [Hash] User credentials - # @option options [String] :login GitHub login - # @option options [String] :password GitHub password - # @return [Boolean] True if credentials are valid - def validate_credentials(options = {}) - !self.class.new(options).user.nil? - rescue Octokit::Unauthorized - false - end - - # Update the authenticated user - # - # @param options [Hash] A customizable set of options. - # @option options [String] :name - # @option options [String] :email Publically visible email address. - # @option options [String] :blog - # @option options [String] :company - # @option options [String] :location - # @option options [Boolean] :hireable - # @option options [String] :bio - # @return [Sawyer::Resource] - # @see https://developer.github.com/v3/users/#update-the-authenticated-user - # @example - # Octokit.update_user(:name => "Erik Michaels-Ober", :email => "sferik@gmail.com", :company => "Code for America", :location => "San Francisco", :hireable => false) - def update_user(options) - patch 'user', options - end - - # Get a user's followers. - # - # @param user [Integer, String] GitHub user login or id of the user whose - # list of followers you are getting. - # @return [Array] Array of hashes representing users - # followers. - # @see https://developer.github.com/v3/users/followers/#list-followers-of-a-user - # @example - # Octokit.followers('pengwynn') - def followers(user = login, options = {}) - paginate "#{User.path user}/followers", options - end - - # Get list of users a user is following. - # - # @param user [Intger, String] GitHub user login or id of the user who you - # are getting the list of the people they follow. - # @return [Array] Array of hashes representing users a - # user is following. - # @see https://developer.github.com/v3/users/followers/#list-users-followed-by-another-user - # @example - # Octokit.following('pengwynn') - def following(user = login, options = {}) - paginate "#{User.path user}/following", options - end - - # Check if you are following a user. Alternatively, check if a given user - # is following a target user. - # - # Requries an authenticated client. - # - # @overload follows?(target) - # @param target [String] GitHub login of the user that you want to - # check if you are following. - # @overload follows?(user, target) - # @param user [Integer, String] GitHub user login or id of first user - # @param target [String] GitHub login of the target user - # @return [Boolean] True following target user, false otherwise. - # @see https://developer.github.com/v3/users/followers/#check-if-you-are-following-a-user - # @see https://developer.github.com/v3/users/followers/#check-if-one-user-follows-another - # @example - # @client.follows?('pengwynn') - # @example - # @client.follows?('catsby', 'pengwynn') - def follows?(*args) - target = args.pop - user = args.first - boolean_from_response :get, "#{User.path user}/following/#{target}" - end - - # Follow a user. - # - # Requires authenticatied client. - # - # @param user [String] Username of the user to follow. - # @return [Boolean] True if follow was successful, false otherwise. - # @see https://developer.github.com/v3/users/followers/#follow-a-user - # @example - # @client.follow('holman') - def follow(user, options = {}) - boolean_from_response :put, "user/following/#{user}", options - end - - # Unfollow a user. - # - # Requires authenticated client. - # - # @param user [String] Username of the user to unfollow. - # @return [Boolean] True if unfollow was successful, false otherwise. - # @see https://developer.github.com/v3/users/followers/#unfollow-a-user - # @example - # @client.unfollow('holman') - def unfollow(user, options = {}) - boolean_from_response :delete, "user/following/#{user}", options - end - - # Get list of repos starred by a user. - # - # @param user [Integer, String] GitHub user login of the user to get the - # list of their starred repositories. - # @param options [Hash] Optional options - # @option options [String] :sort (created) Sort: created or updated. - # @option options [String] :direction (desc) Direction: asc or desc. - # @return [Array] Array of hashes representing repositories starred by user. - # @see https://developer.github.com/v3/activity/starring/#list-repositories-being-starred - # @example - # Octokit.starred('pengwynn') - def starred(user = login, options = {}) - paginate user_path(user, 'starred'), options - end - - # Check if you are starring a repo. - # - # Requires authenticated client. - # - # @param repo [String, Hash, Repository] A GitHub repository - # @return [Boolean] True if you are following the repo, false otherwise. - # @see https://developer.github.com/v3/activity/starring/#check-if-you-are-starring-a-repository - # @example - # @client.starred?('pengwynn/octokit') - def starred?(repo, options = {}) - boolean_from_response :get, "user/starred/#{Repository.new(repo)}", options - end - - # Get a public key. - # - # Note, when using dot notation to retrieve the values, ruby will return - # the hash key for the public keys value instead of the actual value, use - # symbol or key string to retrieve the value. See example. - # - # Requires authenticated client. - # - # @param key_id [Integer] Key to retreive. - # @return [Sawyer::Resource] Hash representing the key. - # @see https://developer.github.com/v3/users/keys/#get-a-single-public-key - # @example - # @client.key(1) - # @example Retrieve public key contents - # public_key = @client.key(1) - # public_key.key - # # => Error - # - # public_key[:key] - # # => "ssh-rsa AAA..." - # - # public_key['key'] - # # => "ssh-rsa AAA..." - def key(key_id, options = {}) - get "user/keys/#{key_id}", options - end - - # Get list of public keys for user. - # - # Requires authenticated client. - # - # @return [Array] Array of hashes representing public keys. - # @see https://developer.github.com/v3/users/keys/#list-your-public-keys - # @example - # @client.keys - def keys(options = {}) - paginate 'user/keys', options - end - - # Get list of public keys for user. - # - # @param user [Integer, String] GitHub user login or id. - # @return [Array] Array of hashes representing public keys. - # @see https://developer.github.com/v3/users/keys/#list-public-keys-for-a-user - # @example - # @client.user_keys('pengwynn') - def user_keys(user, options = {}) - # TODO: Roll this into .keys - paginate "#{User.path user}/keys", options - end - - # Add public key to user account. - # - # Requires authenticated client. - # - # @param title [String] Title to give reference to the public key. - # @param key [String] Public key. - # @return [Sawyer::Resource] Hash representing the newly added public key. - # @see https://developer.github.com/v3/users/keys/#create-a-public-key - # @example - # @client.add_key('Personal projects key', 'ssh-rsa AAA...') - def add_key(title, key, options = {}) - post 'user/keys', options.merge({ title: title, key: key }) - end - - # Update a public key - # - # Requires authenticated client - # - # @param key_id [Integer] Id of key to update. - # @param options [Hash] Hash containing attributes to update. - # @option options [String] :title - # @option options [String] :key - # @return [Sawyer::Resource] Hash representing the updated public key. - # - # @deprecated This method is no longer supported in the API - # @see https://developer.github.com/v3/users/keys/#update-a-public-key - # @see https://developer.github.com/changes/2014-02-24-finer-grained-scopes-for-ssh-keys/ - # @example - # @client.update_key(1, :title => 'new title', :key => "ssh-rsa BBB") - def update_key(key_id, options = {}) - patch "user/keys/#{key_id}", options - end - - # Remove a public key from user account. - # - # Requires authenticated client. - # - # @param id [String] Id of the public key to remove. - # @return [Boolean] True if removal was successful, false otherwise. - # @see https://developer.github.com/v3/users/keys/#delete-a-public-key - # @example - # @client.remove_key(1) - def remove_key(id, options = {}) - boolean_from_response :delete, "user/keys/#{id}", options - end - - # List email addresses for a user. - # - # Requires authenticated client. - # - # @return [Array] Array of email addresses. - # @see https://developer.github.com/v3/users/emails/#list-email-addresses-for-a-user - # @example - # @client.emails - def emails(options = {}) - paginate 'user/emails', options - end - - # Add email address to user. - # - # Requires authenticated client. - # - # @param email [String] Email address to add to the user. - # @return [Array] Array of all email addresses of the user. - # @see https://developer.github.com/v3/users/emails/#add-email-addresses - # @example - # @client.add_email('new_email@user.com') - def add_email(email, _options = {}) - email = Array(email) - post 'user/emails', email - end - - # Remove email from user. - # - # Requires authenticated client. - # - # @param email [String] Email address to remove. - # @return [Array] Array of all email addresses of the user. - # @see https://developer.github.com/v3/users/emails/#delete-email-addresses - # @example - # @client.remove_email('old_email@user.com') - def remove_email(email) - email = Array(email) - boolean_from_response :delete, 'user/emails', email - end - - # List repositories being watched by a user. - # - # @param user [Integer, String] GitHub user login or id. - # @return [Array] Array of repositories. - # @see https://developer.github.com/v3/activity/watching/#list-repositories-being-watched - # @example - # @client.subscriptions("pengwynn") - def subscriptions(user = login, options = {}) - paginate user_path(user, 'subscriptions'), options - end - alias watched subscriptions - - # Initiates the generation of a migration archive. - # - # Requires authenticated user. - # - # @param repositories [Array] :repositories Repositories for the organization. - # @option options [Boolean, optional] :lock_repositories Indicates whether repositories should be locked during migration - # @option options [Boolean, optional] :exclude_attachments Exclude attachments fro the migration data - # @return [Sawyer::Resource] Hash representing the new migration. - # @example - # @client.start_migration(['octocat/hello-world']) - # @see https://docs.github.com/en/rest/reference/migrations#start-a-user-migration - def start_user_migration(repositories, options = {}) - options[:repositories] = repositories - post 'user/migrations', options - end - - # Lists the most recent migrations. - # - # Requires authenticated user. - # - # @return [Array] Array of migration resources. - # @see https://docs.github.com/en/rest/reference/migrations#list-user-migrations - def user_migrations(options = {}) - paginate 'user/migrations', options - end - - # Fetches the status of a migration. - # - # Requires authenticated user. - # - # @param id [Integer] ID number of the migration. - # @see https://docs.github.com/en/rest/reference/migrations#get-a-user-migration-status - def user_migration_status(id, options = {}) - get "user/migrations/#{id}", options - end - - # Fetches the URL to a migration archive. - # - # Requires authenticated user. - # - # @param id [Integer] ID number of the migration. - # @see https://docs.github.com/en/rest/reference/migrations#download-a-user-migration-archive - def user_migration_archive_url(id, options = {}) - url = "user/migrations/#{id}/archive" - - response = client_without_redirects(options).get(url) - response.headers['location'] - end - - # Deletes a previous migration archive. - # - # Requires authenticated user. - # - # @param id [Integer] ID number of the migration. - # @see https://docs.github.com/en/rest/reference/migrations#delete-a-user-migration-archive - def delete_user_migration_archive(id, options = {}) - delete "user/migrations/#{id}/archive", options - end - - # List repositories for a user migration. - # - # Requires authenticated user. - # - # @param id [Integer] ID number of the migration. - # @see https://docs.github.com/en/rest/reference/migrations#list-repositories-for-a-user-migration - def user_migration_repositories(id, options = {}) - get "user/migrations/#{id}/repositories", options - end - - # Unlock a user repository which has been locked by a migration. - # - # Requires authenticated user. - # - # @param id [Integer] ID number of the migration. - # @param repo [String] Name of the repository. - # @see https://docs.github.com/en/rest/reference/migrations#unlock-a-user-repository - def unlock_user_repository(id, repo, options = {}) - delete "user/migrations/#{id}/repos/#{repo}/lock", options - end - end - - private - - # convenience method for constructing a user specific path, if the user is logged in - def user_path(user, path) - if user == login && user_authenticated? - "user/#{path}" - else - "#{User.path user}/#{path}" - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/configurable.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/configurable.rb deleted file mode 100644 index 1ec590b4..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/configurable.rb +++ /dev/null @@ -1,155 +0,0 @@ -# frozen_string_literal: true - -module Octokit - # Configuration options for {Client}, defaulting to values - # in {Default} - module Configurable - # @!attribute [w] access_token - # @see https://developer.github.com/v3/oauth/ - # @return [String] OAuth2 access token for authentication - # @!attribute api_endpoint - # @return [String] Base URL for API requests. default: https://api.github.com/ - # @!attribute auto_paginate - # @return [Boolean] Auto fetch next page of results until rate limit reached - # @!attribute [w] bearer_token - # @see https://developer.github.com/early-access/integrations/authentication/#as-an-integration - # @return [String] JWT bearer token for authentication - # @!attribute client_id - # @see https://developer.github.com/v3/oauth/ - # @return [String] Configure OAuth app key - # @!attribute [w] client_secret - # @see https://developer.github.com/v3/oauth/ - # @return [String] Configure OAuth app secret - # @!attribute default_media_type - # @see https://developer.github.com/v3/media/ - # @return [String] Configure preferred media type (for API versioning, for example) - # @!attribute connection_options - # @see https://github.com/lostisland/faraday - # @return [Hash] Configure connection options for Faraday - # @!attribute login - # @return [String] GitHub username for Basic Authentication - # @!attribute management_console_password - # @return [String] An admin password set up for your GitHub Enterprise management console - # @!attribute management_console_endpoint - # @return [String] Base URL for API requests to the GitHub Enterprise management console - # @!attribute middleware - # @see https://github.com/lostisland/faraday - # @return [Faraday::Builder or Faraday::RackBuilder] Configure middleware for Faraday - # @!attribute netrc - # @return [Boolean] Instruct Octokit to get credentials from .netrc file - # @!attribute netrc_file - # @return [String] Path to .netrc file. default: ~/.netrc - # @!attribute [w] password - # @return [String] GitHub password for Basic Authentication - # @!attribute per_page - # @return [String] Configure page size for paginated results. API default: 30 - # @!attribute proxy - # @see https://github.com/lostisland/faraday - # @return [String] URI for proxy server - # @!attribute ssl_verify_mode - # @see https://github.com/lostisland/faraday - # @return [String] SSL verify mode for ssl connections - # @!attribute user_agent - # @return [String] Configure User-Agent header for requests. - # @!attribute web_endpoint - # @return [String] Base URL for web URLs. default: https://github.com/ - - attr_accessor :access_token, :auto_paginate, :bearer_token, :client_id, - :client_secret, :default_media_type, :connection_options, - :middleware, :netrc, :netrc_file, - :per_page, :proxy, :ssl_verify_mode, :user_agent - attr_writer :password, :web_endpoint, :api_endpoint, :login, - :management_console_endpoint, :management_console_password - - class << self - # List of configurable keys for {Octokit::Client} - # @return [Array] of option keys - def keys - @keys ||= %i[ - access_token - api_endpoint - auto_paginate - bearer_token - client_id - client_secret - connection_options - default_media_type - login - management_console_endpoint - management_console_password - middleware - netrc - netrc_file - per_page - password - proxy - ssl_verify_mode - user_agent - web_endpoint - ] - end - end - - # Set configuration options using a block - def configure - yield self - end - - # Reset configuration options to default values - def reset! - # rubocop:disable Style/HashEachMethods - # - # This may look like a `.keys.each` which should be replaced with `#each_key`, but - # this doesn't actually work, since `#keys` is just a method we've defined ourselves. - # The class doesn't fulfill the whole `Enumerable` contract. - Octokit::Configurable.keys.each do |key| - # rubocop:enable Style/HashEachMethods - instance_variable_set(:"@#{key}", Octokit::Default.options[key]) - end - self - end - alias setup reset! - - # Compares client options to a Hash of requested options - # - # @param opts [Hash] Options to compare with current client options - # @return [Boolean] - def same_options?(opts) - opts.hash == options.hash - end - - def api_endpoint - File.join(@api_endpoint, '') - end - - def management_console_endpoint - File.join(@management_console_endpoint, '') - end - - # Base URL for generated web URLs - # - # @return [String] Default: https://github.com/ - def web_endpoint - File.join(@web_endpoint, '') - end - - def login - @login ||= (user.login if token_authenticated?) - end - - def netrc? - !!@netrc - end - - private - - def options - Octokit::Configurable.keys.to_h { |key| [key, instance_variable_get(:"@#{key}")] } - end - - def fetch_client_id_and_secret(overrides = {}) - opts = options.merge(overrides) - opts.values_at :client_id, :client_secret - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/connection.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/connection.rb deleted file mode 100644 index 1ee5c201..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/connection.rb +++ /dev/null @@ -1,218 +0,0 @@ -# frozen_string_literal: true - -require 'sawyer' -require 'octokit/authentication' -module Octokit - # Network layer for API clients. - module Connection - include Octokit::Authentication - - # Header keys that can be passed in options hash to {#get},{#head} - CONVENIENCE_HEADERS = Set.new(%i[accept content_type]) - - # Make a HTTP GET request - # - # @param url [String] The path, relative to {#api_endpoint} - # @param options [Hash] Query and header params for request - # @return [Sawyer::Resource] - def get(url, options = {}) - request :get, url, parse_query_and_convenience_headers(options) - end - - # Make a HTTP POST request - # - # @param url [String] The path, relative to {#api_endpoint} - # @param options [Hash] Body and header params for request - # @return [Sawyer::Resource] - def post(url, options = {}) - request :post, url, options - end - - # Make a HTTP PUT request - # - # @param url [String] The path, relative to {#api_endpoint} - # @param options [Hash] Body and header params for request - # @return [Sawyer::Resource] - def put(url, options = {}) - request :put, url, options - end - - # Make a HTTP PATCH request - # - # @param url [String] The path, relative to {#api_endpoint} - # @param options [Hash] Body and header params for request - # @return [Sawyer::Resource] - def patch(url, options = {}) - request :patch, url, options - end - - # Make a HTTP DELETE request - # - # @param url [String] The path, relative to {#api_endpoint} - # @param options [Hash] Query and header params for request - # @return [Sawyer::Resource] - def delete(url, options = {}) - request :delete, url, options - end - - # Make a HTTP HEAD request - # - # @param url [String] The path, relative to {#api_endpoint} - # @param options [Hash] Query and header params for request - # @return [Sawyer::Resource] - def head(url, options = {}) - request :head, url, parse_query_and_convenience_headers(options) - end - - # Make one or more HTTP GET requests, optionally fetching - # the next page of results from URL in Link response header based - # on value in {#auto_paginate}. - # - # @param url [String] The path, relative to {#api_endpoint} - # @param options [Hash] Query and header params for request - # @param block [Block] Block to perform the data concatination of the - # multiple requests. The block is called with two parameters, the first - # contains the contents of the requests so far and the second parameter - # contains the latest response. - # @return [Sawyer::Resource] - def paginate(url, options = {}) - opts = parse_query_and_convenience_headers(options) - if @auto_paginate || @per_page - opts[:query][:per_page] ||= @per_page || (@auto_paginate ? 100 : nil) - end - - data = request(:get, url, opts.dup) - - if @auto_paginate - while @last_response.rels[:next] && rate_limit.remaining > 0 - @last_response = @last_response.rels[:next].get(headers: opts[:headers]) - if block_given? - yield(data, @last_response) - else - data.concat(@last_response.data) if @last_response.data.is_a?(Array) - end - end - - end - - data - end - - # Hypermedia agent for the GitHub API - # - # @return [Sawyer::Agent] - def agent - @agent ||= Sawyer::Agent.new(endpoint, sawyer_options) do |http| - http.headers[:accept] = default_media_type - http.headers[:content_type] = 'application/json' - http.headers[:user_agent] = user_agent - if basic_authenticated? - http.request(*FARADAY_BASIC_AUTH_KEYS, @login, @password) - elsif token_authenticated? - http.request :authorization, 'token', @access_token - elsif bearer_authenticated? - http.request :authorization, 'Bearer', @bearer_token - elsif application_authenticated? - http.request(*FARADAY_BASIC_AUTH_KEYS, @client_id, @client_secret) - end - end - end - - # Fetch the root resource for the API - # - # @return [Sawyer::Resource] - def root - get '/' - end - - # Response for last HTTP request - # - # @return [Sawyer::Response] - def last_response - @last_response if defined? @last_response - end - - protected - - def endpoint - api_endpoint - end - - private - - def reset_agent - @agent = nil - end - - def request(method, path, data, options = {}) - if data.is_a?(Hash) - options[:query] = data.delete(:query) || {} - options[:headers] = data.delete(:headers) || {} - if accept = data.delete(:accept) - options[:headers][:accept] = accept - end - end - - @last_response = response = agent.call(method, Addressable::URI.parse(path.to_s).normalize.to_s, data, options) - response_data_correctly_encoded(response) - rescue Octokit::Error => e - @last_response = nil - raise e - end - - # Executes the request, checking if it was successful - # - # @return [Boolean] True on success, false otherwise - def boolean_from_response(method, path, options = {}) - request(method, path, options) - [201, 202, 204].include? @last_response.status - rescue Octokit::NotFound - false - end - - def sawyer_options - opts = { - links_parser: Sawyer::LinkParsers::Simple.new - } - conn_opts = @connection_options - conn_opts[:builder] = @middleware.dup if @middleware - conn_opts[:proxy] = @proxy if @proxy - if conn_opts[:ssl].nil? - conn_opts[:ssl] = { verify_mode: @ssl_verify_mode } if @ssl_verify_mode - else - verify = @connection_options[:ssl][:verify] - conn_opts[:ssl] = { - verify: verify, - verify_mode: verify == false ? 0 : @ssl_verify_mode - } - end - opts[:faraday] = Faraday.new(conn_opts) - - opts - end - - def parse_query_and_convenience_headers(options) - options = options.dup - headers = options.delete(:headers) { {} } - CONVENIENCE_HEADERS.each do |h| - if header = options.delete(h) - headers[h] = header - end - end - query = options.delete(:query) - opts = { query: options } - opts[:query].merge!(query) if query.is_a?(Hash) - opts[:headers] = headers unless headers.empty? - - opts - end - - def response_data_correctly_encoded(response) - content_type = response.headers.fetch('content-type', '') - return response.data unless content_type.include?('charset') && response.data.is_a?(String) - - reported_encoding = content_type.match(/charset=([^ ]+)/)[1] - response.data.force_encoding(reported_encoding) - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/default.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/default.rb deleted file mode 100644 index 852e4def..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/default.rb +++ /dev/null @@ -1,189 +0,0 @@ -# frozen_string_literal: true - -require 'octokit/middleware/follow_redirects' -require 'octokit/response/raise_error' -require 'octokit/response/feed_parser' -require 'octokit/version' -require 'octokit/warnable' - -if Gem::Version.new(Faraday::VERSION) >= Gem::Version.new('2.0') - begin - require 'faraday/retry' - rescue LoadError - Octokit::Warnable.octokit_warn 'To use retry middleware with Faraday v2.0+, install `faraday-retry` gem' - end -end - -module Octokit - # Default configuration options for {Client} - module Default - # Default API endpoint - API_ENDPOINT = 'https://api.github.com' - - # Default User Agent header string - USER_AGENT = "Octokit Ruby Gem #{Octokit::VERSION}" - - # Default media type - MEDIA_TYPE = 'application/vnd.github.v3+json' - - # Default WEB endpoint - WEB_ENDPOINT = 'https://github.com' - - # Default Faraday middleware stack - MIDDLEWARE = Faraday::RackBuilder.new do |builder| - # In Faraday 2.x, Faraday::Request::Retry was moved to a separate gem - # so we use it only when it's available. - if defined?(Faraday::Request::Retry) - retry_exceptions = Faraday::Request::Retry::DEFAULT_EXCEPTIONS + [Octokit::ServerError] - builder.use Faraday::Request::Retry, exceptions: retry_exceptions - elsif defined?(Faraday::Retry::Middleware) - retry_exceptions = Faraday::Retry::Middleware::DEFAULT_EXCEPTIONS + [Octokit::ServerError] - builder.use Faraday::Retry::Middleware, exceptions: retry_exceptions - end - - builder.use Octokit::Middleware::FollowRedirects - builder.use Octokit::Response::RaiseError - builder.use Octokit::Response::FeedParser - builder.adapter Faraday.default_adapter - end - - class << self - # Configuration options - # @return [Hash] - def options - Octokit::Configurable.keys.to_h { |key| [key, send(key)] } - end - - # Default access token from ENV - # @return [String] - def access_token - ENV.fetch('OCTOKIT_ACCESS_TOKEN', nil) - end - - # Default API endpoint from ENV or {API_ENDPOINT} - # @return [String] - def api_endpoint - ENV.fetch('OCTOKIT_API_ENDPOINT') { API_ENDPOINT } - end - - # Default pagination preference from ENV - # @return [String] - def auto_paginate - ENV.fetch('OCTOKIT_AUTO_PAGINATE', nil) - end - - # Default bearer token from ENV - # @return [String] - def bearer_token - ENV.fetch('OCTOKIT_BEARER_TOKEN', nil) - end - - # Default OAuth app key from ENV - # @return [String] - def client_id - ENV.fetch('OCTOKIT_CLIENT_ID', nil) - end - - # Default OAuth app secret from ENV - # @return [String] - def client_secret - ENV.fetch('OCTOKIT_SECRET', nil) - end - - # Default management console password from ENV - # @return [String] - def management_console_password - ENV.fetch('OCTOKIT_ENTERPRISE_MANAGEMENT_CONSOLE_PASSWORD', nil) - end - - # Default management console endpoint from ENV - # @return [String] - def management_console_endpoint - ENV.fetch('OCTOKIT_ENTERPRISE_MANAGEMENT_CONSOLE_ENDPOINT', nil) - end - - # Default options for Faraday::Connection - # @return [Hash] - def connection_options - { - headers: { - accept: default_media_type, - user_agent: user_agent - } - } - end - - # Default media type from ENV or {MEDIA_TYPE} - # @return [String] - def default_media_type - ENV.fetch('OCTOKIT_DEFAULT_MEDIA_TYPE') { MEDIA_TYPE } - end - - # Default GitHub username for Basic Auth from ENV - # @return [String] - def login - ENV.fetch('OCTOKIT_LOGIN', nil) - end - - # Default middleware stack for Faraday::Connection - # from {MIDDLEWARE} - # @return [Faraday::RackBuilder or Faraday::Builder] - def middleware - MIDDLEWARE - end - - # Default GitHub password for Basic Auth from ENV - # @return [String] - def password - ENV.fetch('OCTOKIT_PASSWORD', nil) - end - - # Default pagination page size from ENV - # @return [Integer] Page size - def per_page - page_size = ENV.fetch('OCTOKIT_PER_PAGE', nil) - - page_size&.to_i - end - - # Default proxy server URI for Faraday connection from ENV - # @return [String] - def proxy - ENV.fetch('OCTOKIT_PROXY', nil) - end - - # Default SSL verify mode from ENV - # @return [Integer] - def ssl_verify_mode - # 0 is OpenSSL::SSL::VERIFY_NONE - # 1 is OpenSSL::SSL::SSL_VERIFY_PEER - # the standard default for SSL is SSL_VERIFY_PEER which requires a server certificate check on the client - ENV.fetch('OCTOKIT_SSL_VERIFY_MODE', 1).to_i - end - - # Default User-Agent header string from ENV or {USER_AGENT} - # @return [String] - def user_agent - ENV.fetch('OCTOKIT_USER_AGENT') { USER_AGENT } - end - - # Default web endpoint from ENV or {WEB_ENDPOINT} - # @return [String] - def web_endpoint - ENV.fetch('OCTOKIT_WEB_ENDPOINT') { WEB_ENDPOINT } - end - - # Default behavior for reading .netrc file - # @return [Boolean] - def netrc - ENV.fetch('OCTOKIT_NETRC', false) - end - - # Default path for .netrc file - # @return [String] - def netrc_file - ENV.fetch('OCTOKIT_NETRC_FILE') { File.join(Dir.home.to_s, '.netrc') } - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/enterprise_admin_client.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/enterprise_admin_client.rb deleted file mode 100644 index 8b334ee3..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/enterprise_admin_client.rb +++ /dev/null @@ -1,46 +0,0 @@ -# frozen_string_literal: true - -require 'octokit/connection' -require 'octokit/configurable' -require 'octokit/warnable' -require 'octokit/enterprise_admin_client/admin_stats' -require 'octokit/enterprise_admin_client/license' -require 'octokit/enterprise_admin_client/orgs' -require 'octokit/enterprise_admin_client/search_indexing' -require 'octokit/enterprise_admin_client/users' - -module Octokit - # EnterpriseAdminClient is only meant to be used by GitHub Enterprise Admins - # and provides access the Admin only API endpoints including Admin Stats, - # Management Console, and the Search Indexing API. - # - # @see Octokit::Client Use Octokit::Client for regular API use for GitHub - # and GitHub Enterprise. - # @see https://developer.github.com/v3/enterprise/ - class EnterpriseAdminClient - include Octokit::Configurable - include Octokit::Connection - include Octokit::Warnable - include Octokit::EnterpriseAdminClient::AdminStats - include Octokit::EnterpriseAdminClient::License - include Octokit::EnterpriseAdminClient::Orgs - include Octokit::EnterpriseAdminClient::SearchIndexing - include Octokit::EnterpriseAdminClient::Users - - def initialize(options = {}) - # Use options passed in, but fall back to module defaults - # - # rubocop:disable Style/HashEachMethods - # - # This may look like a `.keys.each` which should be replaced with `#each_key`, but - # this doesn't actually work, since `#keys` is just a method we've defined ourselves. - # The class doesn't fulfill the whole `Enumerable` contract. - Octokit::Configurable.keys.each do |key| - # rubocop:enable Style/HashEachMethods - instance_variable_set(:"@#{key}", options[key] || Octokit.instance_variable_get(:"@#{key}")) - end - - login_from_netrc unless user_authenticated? || application_authenticated? - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/enterprise_admin_client/admin_stats.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/enterprise_admin_client/admin_stats.rb deleted file mode 100644 index 80d3d813..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/enterprise_admin_client/admin_stats.rb +++ /dev/null @@ -1,119 +0,0 @@ -# frozen_string_literal: true - -module Octokit - class EnterpriseAdminClient - # Methods for the Enterprise Admin Stats API - # - # @see https://developer.github.com/v3/enterprise-admin/admin_stats/ - module AdminStats - # Get all available stats - # - # @return [Sawyer::Resource] All available stats - # @example Get all available stats - # @client.admin_stats - def admin_stats - get_admin_stats 'all' - end - - # Get only repository-related stats - # - # @return [Sawyer::Resource] Only repository-related stats - # @example Get only repository-related stats - # @client.admin_repository_stats - def admin_repository_stats - get_admin_stats 'repos' - end - - # Get only hooks-related stats - # - # @return [Sawyer::Resource] Only hooks-related stats - # @example Get only hooks-related stats - # @client.admin_hooks_stats - def admin_hooks_stats - get_admin_stats 'hooks' - end - - # Get only pages-related stats - # - # @return [Sawyer::Resource] Only pages-related stats - # @example Get only pages-related stats - # @client.admin_pages_stats - def admin_pages_stats - get_admin_stats 'pages' - end - - # Get only organization-related stats - # - # @return [Sawyer::Resource] Only organization-related stats - # @example Get only organization-related stats - # @client.admin_organization_stats - def admin_organization_stats - get_admin_stats 'orgs' - end - - # Get only user-related stats - # - # @return [Sawyer::Resource] Only user-related stats - # @example Get only user-related stats - # @client.admin_users_stats - def admin_users_stats - get_admin_stats 'users' - end - - # Get only pull request-related stats - # - # @return [Sawyer::Resource] Only pull request-related stats - # @example Get only pull request-related stats - # @client.admin_pull_requests_stats - def admin_pull_requests_stats - get_admin_stats 'pulls' - end - - # Get only issue-related stats - # - # @return [Sawyer::Resource] Only issue-related stats - # @example Get only issue-related stats - # @client.admin_issues_stats - def admin_issues_stats - get_admin_stats 'issues' - end - - # Get only milestone-related stats - # - # @return [Sawyer::Resource] Only milestone-related stats - # @example Get only milestone-related stats - # @client.admin_milestones_stats - def admin_milestones_stats - get_admin_stats 'milestones' - end - - # Get only gist-related stats - # - # @return [Sawyer::Resource] Only only gist-related stats - # @example Get only gist-related stats - # @client.admin_gits_stats - def admin_gists_stats - get_admin_stats 'gists' - end - - # Get only comment-related stats - # - # @return [Sawyer::Resource] Only comment-related stats - # @example Get only comment-related stats - # @client.admin_comments_stats - def admin_comments_stats - get_admin_stats 'comments' - end - - private - - # @private Get enterprise stats - # - # @param metric [String] The metrics you are looking for - # @return [Sawyer::Resource] Magical unicorn stats - def get_admin_stats(metric) - get "enterprise/stats/#{metric}" - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/enterprise_admin_client/license.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/enterprise_admin_client/license.rb deleted file mode 100644 index 4150cb51..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/enterprise_admin_client/license.rb +++ /dev/null @@ -1,17 +0,0 @@ -# frozen_string_literal: true - -module Octokit - class EnterpriseAdminClient - # Methods for the Enterprise License API - # - # @see https://developer.github.com/v3/enterprise-admin/license/ - module License - # Get information about the Enterprise license - # - # @return [Sawyer::Resource] The license information - def license_info - get 'enterprise/settings/license' - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/enterprise_admin_client/orgs.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/enterprise_admin_client/orgs.rb deleted file mode 100644 index 2dd2af29..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/enterprise_admin_client/orgs.rb +++ /dev/null @@ -1,26 +0,0 @@ -# frozen_string_literal: true - -module Octokit - class EnterpriseAdminClient - # Methods for the Enterprise Orgs API - # - # @see https://developer.github.com/v3/enterprise-admin/orgs/ - module Orgs - # Create a new organization on the instance. - # - # @param login [String] The organization's username. - # @param admin [String] The login of the user who will manage this organization. - # @param options [Hash] A set of options. - # @option options [String] :profile_name The organization's display name. - # @return [nil] - # @see https://developer.github.com/v3/enterprise-admin/orgs/#create-an-organization - # @example - # @admin_client.create_organization('SuchAGreatOrg', 'gjtorikian') - def create_organization(login, admin, options = {}) - options[:login] = login - options[:admin] = admin - post 'admin/organizations', options - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/enterprise_admin_client/search_indexing.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/enterprise_admin_client/search_indexing.rb deleted file mode 100644 index d725af9c..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/enterprise_admin_client/search_indexing.rb +++ /dev/null @@ -1,82 +0,0 @@ -# frozen_string_literal: true - -module Octokit - class EnterpriseAdminClient - # Methods for the Enterprise Search Indexing API - # - # @see https://developer.github.com/v3/enterprise-admin/search_indexing/ - module SearchIndexing - # Queue a User or Organization to be indexed - # - # @param user [String] A GitHub Enterprise user or organization - # @return [Sawyer:Resource] Result of the queuing containing `:message` - def index_user(user) - queue_index user - end - alias index_organization index_user - - # Queue a Repository to be indexed - # - # @param repo [String, Hash, Repository] A GitHub repository - # @return [Sawyer:Resource] Result of the queuing containing `:message` - def index_repository(repo) - queue_index Repository.new repo - end - - # Queue a repository's Issues to be indexed - # - # @param repo [String, Hash, Repository] A GitHub repository - # @return [Sawyer:Resource] Result of the queuing containing `:message` - def index_repository_issues(repo) - queue_index "#{Repository.new repo}/issues" - end - - # Queue a repository's code to be indexed - # - # @param repo [String, Hash, Repository] A GitHub repository - # @return [Sawyer:Resource] Result of the queuing containing `:message` - def index_repository_code(repo) - queue_index "#{Repository.new repo}/code" - end - - # Queue a user's or organization's repositories to be indexed - # - # @param user [String] A GitHub Enterprise user or organization - # @return [Sawyer:Resource] Result of the queuing containing `:message` - def index_users_repositories(user) - queue_index "#{user}/*" - end - alias index_organizations_repositories index_users_repositories - - # Queue an index of all the issues across all of a user's or - # organization's repositories - # - # @param user [String] A GitHub Enterprise user or organization - # @return [Sawyer:Resource] Result of the queuing containing `:message` - def index_users_repositories_issues(user) - queue_index "#{user}/*/issues" - end - alias index_organizations_repositories_issues index_users_repositories_issues - - # Queue an index of all the code contained in all of a user's or - # organization's repositories - # - # @param user [String] A GitHub Enterprise user or organization - # @return [Sawyer:Resource] Result of the queuing containing `:message` - def index_users_repositories_code(user) - queue_index "#{user}/*/code" - end - alias index_organizations_repositories_code index_users_repositories_code - - private - - # @private Queue a target for indexing - # - # @param target [String] Target to index - # @return [Sawyer:Resource] Result of the queuing containing `:message` - def queue_index(target) - post 'staff/indexing_jobs', target: target - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/enterprise_admin_client/users.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/enterprise_admin_client/users.rb deleted file mode 100644 index 182d851a..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/enterprise_admin_client/users.rb +++ /dev/null @@ -1,129 +0,0 @@ -# frozen_string_literal: true - -module Octokit - class EnterpriseAdminClient - # Methods for the Enterprise User Administration API - # - # @see https://developer.github.com/enterprise/v3/enterprise-admin/users/ - module Users - # Create a new user. - # - # @param login [String] The user's username. - # @param email [String] The user's email address. - # @see https://developer.github.com/enterprise/v3/enterprise-admin/users#create-a-new-user - # @example - # @admin_client.create_user('foobar', 'notreal@foo.bar') - def create_user(login, email, options = {}) - options[:login] = login - options[:email] = email - post 'admin/users', options - end - - # Promote an ordinary user to a site administrator - # - # @param user [String] Username of the user to promote. - # @return [Boolean] True if promote was successful, false otherwise. - # @see https://developer.github.com/enterprise/v3/enterprise-admin/users/#promote-an-ordinary-user-to-a-site-administrator - # @example - # @admin_client.promote('holman') - def promote(user, options = {}) - boolean_from_response :put, "users/#{user}/site_admin", options - end - - # Demote a site administrator to an ordinary user - # - # @param user [String] Username of the user to demote. - # @return [Boolean] True if demote was successful, false otherwise. - # @see https://developer.github.com/enterprise/v3/enterprise-admin/users/#demote-a-site-administrator-to-an-ordinary-user - # @example - # @admin_client.demote('holman') - def demote(user, options = {}) - boolean_from_response :delete, "users/#{user}/site_admin", options - end - - # Rename a user. - # - # @param old_login [String] The user's old username. - # @param new_login [String] The user's new username. - # @see https://developer.github.com/enterprise/v3/enterprise-admin/users/#rename-an-existing-user - # @example - # @admin_client.rename_user('foobar', 'foofoobar') - def rename_user(old_login, new_login, options = {}) - options[:login] = new_login - patch "admin/users/#{old_login}", options - end - - # Deletes a user. - # - # @param username [String] The username to delete. - # @see https://developer.github.com/enterprise/v3/enterprise-admin/users/#delete-a-user - # @example - # @admin_client.delete_key(1) - def delete_user(username, options = {}) - boolean_from_response :delete, "admin/users/#{username}", options - end - - # Suspend a user. - # - # @param user [String] Username of the user to suspend. - # @return [Boolean] True if suspend was successful, false otherwise. - # @see https://developer.github.com/enterprise/v3/enterprise-admin/users/#suspend-a-user - # @example - # @admin_client.suspend('holman') - def suspend(user, options = {}) - boolean_from_response :put, "users/#{user}/suspended", options - end - - # Unsuspend a user. - # - # @param user [String] Username of the user to unsuspend. - # @return [Boolean] True if unsuspend was successful, false otherwise. - # @see https://developer.github.com/enterprise/v3/enterprise-admin/users/#unsuspend-a-user - # @example - # @admin_client.unsuspend('holman') - def unsuspend(user, options = {}) - boolean_from_response :delete, "users/#{user}/suspended", options - end - - # Creates an impersonation OAuth token. - # - # @param login [String] The user to create a token for. - # @param options [Array] :scopes The scopes to apply. - # @see https://developer.github.com/enterprise/v3/enterprise-admin/users/#create-an-impersonation-oauth-token - # @example - # @admin_client.create_impersonation_token('foobar', {:scopes => ['repo:write']}) - def create_impersonation_token(login, options = {}) - post "admin/users/#{login}/authorizations", options - end - - # Deletes an impersonation OAuth token. - # - # @param login [String] The user whose token should be deleted. - # @see https://developer.github.com/enterprise/v3/enterprise-admin/users/#delete-an-impersonation-oauth-token - # @example - # @admin_client.delete_impersonation_token('foobar') - def delete_impersonation_token(login, options = {}) - boolean_from_response :delete, "admin/users/#{login}/authorizations", options - end - - # Lists all the public SSH keys. - # - # @see https://developer.github.com/enterprise/v3/enterprise-admin/users/#list-all-public-keys - # @example - # @admin_client.list_all_keys - def list_all_keys(options = {}) - get 'admin/keys', options - end - - # Deletes a public SSH keys. - # - # @param id [Number] The ID of the key to delete. - # @see https://developer.github.com/enterprise/v3/enterprise-admin/users/#delete-a-public-key - # @example - # @admin_client.delete_key(1) - def delete_key(id, options = {}) - boolean_from_response :delete, "admin/keys/#{id}", options - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/enterprise_management_console_client.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/enterprise_management_console_client.rb deleted file mode 100644 index 244e16e4..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/enterprise_management_console_client.rb +++ /dev/null @@ -1,56 +0,0 @@ -# frozen_string_literal: true - -require 'octokit/configurable' -require 'octokit/connection' -require 'octokit/warnable' -require 'octokit/enterprise_management_console_client/management_console' - -module Octokit - # EnterpriseManagementConsoleClient is only meant to be used by GitHub Enterprise Admins - # and provides access to the management console API endpoints. - # - # @see Octokit::Client Use Octokit::Client for regular API use for GitHub - # and GitHub Enterprise. - # @see https://developer.github.com/v3/enterprise-admin/management_console/ - class EnterpriseManagementConsoleClient - include Octokit::Configurable - include Octokit::Connection - include Octokit::Warnable - include Octokit::EnterpriseManagementConsoleClient::ManagementConsole - - def initialize(options = {}) - # Use options passed in, but fall back to module defaults - # rubocop:disable Style/HashEachMethods - # - # This may look like a `.keys.each` which should be replaced with `#each_key`, but - # this doesn't actually work, since `#keys` is just a method we've defined ourselves. - # The class doesn't fulfill the whole `Enumerable` contract. - Octokit::Configurable.keys.each do |key| - # rubocop:enable Style/HashEachMethods - instance_variable_set(:"@#{key}", options[key] || Octokit.instance_variable_get(:"@#{key}")) - end - end - - protected - - def endpoint - management_console_endpoint - end - - # Set Enterprise Management Console password - # - # @param value [String] Management console admin password - def management_console_password=(value) - reset_agent - @management_console_password = value - end - - # Set Enterprise Management Console endpoint - # - # @param value [String] Management console endpoint - def management_console_endpoint=(value) - reset_agent - @management_console_endpoint = value - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/enterprise_management_console_client/management_console.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/enterprise_management_console_client/management_console.rb deleted file mode 100644 index f267ee58..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/enterprise_management_console_client/management_console.rb +++ /dev/null @@ -1,176 +0,0 @@ -# frozen_string_literal: true - -module Octokit - class EnterpriseManagementConsoleClient - # Methods for the Enterprise Management Console API - # - # @see https://developer.github.com/v3/enterprise-admin/management_console/ - module ManagementConsole - # Uploads a license for the first time - # - # @param license [String] The path to your .ghl license file. - # @param settings [Hash] A hash configuration of the initial settings. - # - # @see https://docs.github.com/en/enterprise-server@3.4/rest/enterprise-admin/management-console#create-a-github-license - # @return nil - def upload_license(license, settings = nil) - conn = faraday_configuration - - params = {} - params[:license] = Faraday::UploadIO.new(license, 'binary') - params[:password] = @management_console_password - params[:settings] = settings.to_json.to_s unless settings.nil? - - @last_response = conn.post('/setup/api/start', params) - end - - # Start a configuration process. - # - # @return nil - def start_configuration - post '/setup/api/configure', password_hash - end - - # Upgrade an Enterprise installation - # - # @param license [String] The path to your .ghl license file. - # - # @return nil - def upgrade(license) - conn = faraday_configuration - - params = {} - params[:license] = Faraday::UploadIO.new(license, 'binary') - params[:api_key] = @management_console_password - @last_response = conn.post('/setup/api/upgrade', params) - end - - # Get information about the Enterprise installation - # - # @return [Sawyer::Resource] The installation information - def config_status - get '/setup/api/configcheck', password_hash - end - alias config_check config_status - - # Get information about the Enterprise installation - # - # @return [Sawyer::Resource] The settings - def settings - get '/setup/api/settings', password_hash - end - alias get_settings settings - - # Modify the Enterprise settings - # - # @param settings [Hash] A hash configuration of the new settings - # - # @return [nil] - def edit_settings(settings) - queries = password_hash - queries[:query][:settings] = settings.to_json.to_s - put '/setup/api/settings', queries - end - - # Get information about the Enterprise maintenance status - # - # @return [Sawyer::Resource] The maintenance status - def maintenance_status - get '/setup/api/maintenance', password_hash - end - alias get_maintenance_status maintenance_status - - # Start (or turn off) the Enterprise maintenance mode - # - # @param maintenance [Hash] A hash configuration of the maintenance settings - # @return [nil] - def set_maintenance_status(maintenance) - queries = password_hash - queries[:query][:maintenance] = maintenance.to_json.to_s - post '/setup/api/maintenance', queries - end - alias edit_maintenance_status set_maintenance_status - - # Fetch the authorized SSH keys on the Enterprise install - # - # @return [Sawyer::Resource] An array of authorized SSH keys - def authorized_keys - get '/setup/api/settings/authorized-keys', password_hash - end - alias get_authorized_keys authorized_keys - - # Add an authorized SSH keys on the Enterprise install - # - # @param key Either the file path to a key, a File handler to the key, or the contents of the key itself - # @return [Sawyer::Resource] An array of authorized SSH keys - def add_authorized_key(key) - queries = password_hash - case key - when String - if File.exist?(key) - key = File.open(key, 'r') - content = key.read.strip - key.close - else - content = key - end - when File - content = key.read.strip - key.close - end - - queries[:query][:authorized_key] = content - post '/setup/api/settings/authorized-keys', queries - end - - # Removes an authorized SSH keys from the Enterprise install - # - # @param key Either the file path to a key, a File handler to the key, or the contents of the key itself - # @return [Sawyer::Resource] An array of authorized SSH keys - def remove_authorized_key(key) - queries = password_hash - case key - when String - if File.exist?(key) - key = File.open(key, 'r') - content = key.read.strip - key.close - else - content = key - end - when File - content = key.read.strip - key.close - end - - queries[:query][:authorized_key] = content - delete '/setup/api/settings/authorized-keys', queries - end - alias delete_authorized_key remove_authorized_key - end - - private - - def password_hash - { query: { api_key: @management_console_password } } - end - - # We fall back to raw Faraday for handling the licenses because I'm suspicious - # that Sawyer isn't handling binary POSTs correctly: https://github.com/lostisland/sawyer/blob/03fca4c020f465ec42856d0486ec3991859b0aed/lib/sawyer/agent.rb#L85 - def faraday_configuration - @faraday_configuration ||= Faraday.new(url: @management_console_endpoint) do |http| - http.headers[:user_agent] = user_agent - http.request :multipart - http.request :url_encoded - - # Disabling SSL is essential for certain self-hosted Enterprise instances - if connection_options[:ssl] && !connection_options[:ssl][:verify] - http.ssl[:verify] = false - end - - http.use Octokit::Response::RaiseError - http.adapter Faraday.default_adapter - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/error.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/error.rb deleted file mode 100644 index f607bf02..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/error.rb +++ /dev/null @@ -1,363 +0,0 @@ -# frozen_string_literal: true - -module Octokit - # Custom error class for rescuing from all GitHub errors - class Error < StandardError - attr_reader :context - - # Returns the appropriate Octokit::Error subclass based - # on status and response message - # - # @param [Hash] response HTTP response - # @return [Octokit::Error] - def self.from_response(response) - status = response[:status].to_i - body = response[:body].to_s - headers = response[:response_headers] - - if klass = case status - when 400 then Octokit::BadRequest - when 401 then error_for_401(headers) - when 403 then error_for_403(body) - when 404 then error_for_404(body) - when 405 then Octokit::MethodNotAllowed - when 406 then Octokit::NotAcceptable - when 409 then Octokit::Conflict - when 415 then Octokit::UnsupportedMediaType - when 422 then error_for_422(body) - when 451 then Octokit::UnavailableForLegalReasons - when 400..499 then Octokit::ClientError - when 500 then Octokit::InternalServerError - when 501 then Octokit::NotImplemented - when 502 then Octokit::BadGateway - when 503 then Octokit::ServiceUnavailable - when 500..599 then Octokit::ServerError - end - klass.new(response) - end - end - - def build_error_context - if RATE_LIMITED_ERRORS.include?(self.class) - @context = Octokit::RateLimit.from_response(@response) - end - end - - def initialize(response = nil) - @response = response - super(build_error_message) - build_error_context - end - - # Documentation URL returned by the API for some errors - # - # @return [String] - def documentation_url - data[:documentation_url] if data.is_a? Hash - end - - # Returns most appropriate error for 401 HTTP status code - # @private - # rubocop:disable Naming/VariableNumber - def self.error_for_401(headers) - # rubocop:enbale Naming/VariableNumber - if Octokit::OneTimePasswordRequired.required_header(headers) - Octokit::OneTimePasswordRequired - else - Octokit::Unauthorized - end - end - - # Returns most appropriate error for 403 HTTP status code - # @private - def self.error_for_403(body) - # rubocop:enable Naming/VariableNumber - case body - when /rate limit exceeded/i, /exceeded a secondary rate limit/i - Octokit::TooManyRequests - when /login attempts exceeded/i - Octokit::TooManyLoginAttempts - when /(returns|for) blobs (up to|between) [0-9-]+ MB/i - Octokit::TooLargeContent - when /abuse/i - Octokit::AbuseDetected - when /repository access blocked/i - Octokit::RepositoryUnavailable - when /email address must be verified/i - Octokit::UnverifiedEmail - when /account was suspended/i - Octokit::AccountSuspended - when /billing issue/i - Octokit::BillingIssue - when /Resource protected by organization SAML enforcement/i - Octokit::SAMLProtected - when /suspended your access|This installation has been suspended/i - Octokit::InstallationSuspended - else - Octokit::Forbidden - end - end - - # Return most appropriate error for 404 HTTP status code - # @private - # rubocop:disable Naming/VariableNumber - def self.error_for_404(body) - # rubocop:enable Naming/VariableNumber - if body =~ /Branch not protected/i - Octokit::BranchNotProtected - else - Octokit::NotFound - end - end - - # Return most appropriate error for 422 HTTP status code - # @private - # rubocop:disable Naming/VariableNumber - def self.error_for_422(body) - # rubocop:enable Naming/VariableNumber - if body =~ /PullRequestReviewComment/i && body =~ /(commit_id|end_commit_oid) is not part of the pull request/i - Octokit::CommitIsNotPartOfPullRequest - elsif body =~ /Path diff too large/i - Octokit::PathDiffTooLarge - else - Octokit::UnprocessableEntity - end - end - - # Array of validation errors - # @return [Array] Error info - def errors - if data.is_a?(Hash) - data[:errors] || [] - else - [] - end - end - - # Status code returned by the GitHub server. - # - # @return [Integer] - def response_status - @response[:status] - end - - # Headers returned by the GitHub server. - # - # @return [Hash] - def response_headers - @response[:response_headers] - end - - # Body returned by the GitHub server. - # - # @return [String] - def response_body - @response[:body] - end - - private - - def data - @data ||= - if (body = @response[:body]) && !body.empty? - if body.is_a?(String) && - @response[:response_headers] && - @response[:response_headers][:content_type] =~ /json/ - - Sawyer::Agent.serializer.decode(body) - else - body - end - end - end - - def response_message - case data - when Hash - data[:message] - when String - data - end - end - - def response_error - "Error: #{data[:error]}" if data.is_a?(Hash) && data[:error] - end - - def response_error_summary - return nil unless data.is_a?(Hash) && !Array(data[:errors]).empty? - - summary = +"\nError summary:\n" - summary << data[:errors].map do |error| - if error.is_a? Hash - error.map { |k, v| " #{k}: #{v}" } - else - " #{error}" - end - end.join("\n") - - summary - end - - def build_error_message - return nil if @response.nil? - - message = +"#{@response[:method].to_s.upcase} " - message << "#{redact_url(@response[:url].to_s.dup)}: " - message << "#{@response[:status]} - " - message << response_message.to_s unless response_message.nil? - message << response_error.to_s unless response_error.nil? - message << response_error_summary.to_s unless response_error_summary.nil? - message << " // See: #{documentation_url}" unless documentation_url.nil? - message - end - - def redact_url(url_string) - %w[client_secret access_token api_key].each do |token| - if url_string.include? token - url_string.gsub!(/#{token}=\S+/, "#{token}=(redacted)") - end - end - url_string - end - end - - # Raised on errors in the 400-499 range - class ClientError < Error; end - - # Raised when GitHub returns a 400 HTTP status code - class BadRequest < ClientError; end - - # Raised when GitHub returns a 401 HTTP status code - class Unauthorized < ClientError; end - - # Raised when GitHub returns a 401 HTTP status code - # and headers include "X-GitHub-OTP" - class OneTimePasswordRequired < ClientError - # @private - OTP_DELIVERY_PATTERN = /required; (\w+)/i.freeze - - # @private - def self.required_header(headers) - OTP_DELIVERY_PATTERN.match headers['X-GitHub-OTP'].to_s - end - - # Delivery method for the user's OTP - # - # @return [String] - def password_delivery - @password_delivery ||= delivery_method_from_header - end - - private - - def delivery_method_from_header - if match = self.class.required_header(@response[:response_headers]) - match[1] - end - end - end - - # Raised when GitHub returns a 403 HTTP status code - class Forbidden < ClientError; end - - # Raised when GitHub returns a 403 HTTP status code - # and body matches 'rate limit exceeded' - class TooManyRequests < Forbidden; end - - # Raised when GitHub returns a 403 HTTP status code - # and body matches 'login attempts exceeded' - class TooManyLoginAttempts < Forbidden; end - - # Raised when GitHub returns a 403 HTTP status code - # and body matches 'returns blobs up to [0-9]+ MB' - class TooLargeContent < Forbidden; end - - # Raised when GitHub returns a 403 HTTP status code - # and body matches 'abuse' - class AbuseDetected < Forbidden; end - - # Raised when GitHub returns a 403 HTTP status code - # and body matches 'repository access blocked' - class RepositoryUnavailable < Forbidden; end - - # Raised when GitHub returns a 403 HTTP status code - # and body matches 'email address must be verified' - class UnverifiedEmail < Forbidden; end - - # Raised when GitHub returns a 403 HTTP status code - # and body matches 'account was suspended' - class AccountSuspended < Forbidden; end - - # Raised when GitHub returns a 403 HTTP status code - # and body matches 'billing issue' - class BillingIssue < Forbidden; end - - # Raised when GitHub returns a 403 HTTP status code - # and body matches 'Resource protected by organization SAML enforcement' - class SAMLProtected < Forbidden; end - - # Raised when GitHub returns a 403 HTTP status code - # and body matches 'suspended your access' - class InstallationSuspended < Forbidden; end - - # Raised when GitHub returns a 404 HTTP status code - class NotFound < ClientError; end - - # Raised when GitHub returns a 404 HTTP status code - # and body matches 'Branch not protected' - class BranchNotProtected < ClientError; end - - # Raised when GitHub returns a 405 HTTP status code - class MethodNotAllowed < ClientError; end - - # Raised when GitHub returns a 406 HTTP status code - class NotAcceptable < ClientError; end - - # Raised when GitHub returns a 409 HTTP status code - class Conflict < ClientError; end - - # Raised when GitHub returns a 414 HTTP status code - class UnsupportedMediaType < ClientError; end - - # Raised when GitHub returns a 422 HTTP status code - class UnprocessableEntity < ClientError; end - - # Raised when GitHub returns a 422 HTTP status code - # and body matches 'PullRequestReviewComment' and 'commit_id (or end_commit_oid) is not part of the pull request' - class CommitIsNotPartOfPullRequest < UnprocessableEntity; end - - # Raised when GitHub returns a 422 HTTP status code and body matches 'Path diff too large'. - # It could occur when attempting to post review comments on a "too large" file. - class PathDiffTooLarge < UnprocessableEntity; end - - # Raised when GitHub returns a 451 HTTP status code - class UnavailableForLegalReasons < ClientError; end - - # Raised on errors in the 500-599 range - class ServerError < Error; end - - # Raised when GitHub returns a 500 HTTP status code - class InternalServerError < ServerError; end - - # Raised when GitHub returns a 501 HTTP status code - class NotImplemented < ServerError; end - - # Raised when GitHub returns a 502 HTTP status code - class BadGateway < ServerError; end - - # Raised when GitHub returns a 503 HTTP status code - class ServiceUnavailable < ServerError; end - - # Raised when client fails to provide valid Content-Type - class MissingContentType < ArgumentError; end - - # Raised when a method requires an application client_id - # and secret but none is provided - class ApplicationCredentialsRequired < StandardError; end - - # Raised when a repository is created with an invalid format - class InvalidRepository < ArgumentError; end - - RATE_LIMITED_ERRORS = [Octokit::TooManyRequests, Octokit::AbuseDetected].freeze -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/gist.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/gist.rb deleted file mode 100644 index cb6dab98..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/gist.rb +++ /dev/null @@ -1,35 +0,0 @@ -# frozen_string_literal: true - -module Octokit - # Class to parse and create Gist URLs - class Gist - # !@attribute id - # @return [String] Gist ID - attr_accessor :id - - # Instantiate {Gist} object from Gist URL - # @ return [Gist] - def self.from_url(url) - Gist.new(URI.parse(url).path[1..]) - end - - def initialize(gist) - case gist - when Integer, String - @id = gist.to_s - end - end - - # Gist ID - # @return [String] - def to_s - @id - end - - # Gist URL - # @return [String] - def url - "https://gist.github.com/#{@id}" - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/middleware/follow_redirects.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/middleware/follow_redirects.rb deleted file mode 100644 index fe291cf2..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/middleware/follow_redirects.rb +++ /dev/null @@ -1,135 +0,0 @@ -# frozen_string_literal: true - -require 'faraday' -require 'set' - -# Adapted from lostisland/faraday_middleware. Trimmed down to just the logic -# that we need for octokit.rb. -# -# https://github.com/lostisland/faraday_middleware/blob/138766e/lib/faraday_middleware/response/follow_redirects.rb - -module Octokit - module Middleware - # Public: Exception thrown when the maximum amount of requests is exceeded. - class RedirectLimitReached < Faraday::ClientError - attr_reader :response - - def initialize(response) - super("too many redirects; last one to: #{response['location']}") - @response = response - end - end - - # Public: Follow HTTP 301, 302, 303, and 307 redirects. - # - # For HTTP 303, the original GET, POST, PUT, DELETE, or PATCH request gets - # converted into a GET. For HTTP 301, 302, and 307, the HTTP method remains - # unchanged. - # - # This middleware currently only works with synchronous requests; i.e. it - # doesn't support parallelism. - class FollowRedirects < Faraday::Middleware - # HTTP methods for which 30x redirects can be followed - ALLOWED_METHODS = Set.new %i[head options get post put patch delete] - - # HTTP redirect status codes that this middleware implements - REDIRECT_CODES = Set.new [301, 302, 303, 307] - - # Keys in env hash which will get cleared between requests - ENV_TO_CLEAR = Set.new %i[status response response_headers] - - # Default value for max redirects followed - FOLLOW_LIMIT = 3 - - # Regex that matches characters that need to be escaped in URLs, sans - # the "%" character which we assume already represents an escaped - # sequence. - URI_UNSAFE = %r{[^\-_.!~*'()a-zA-Z\d;/?:@&=+$,\[\]%]}.freeze - - # Public: Initialize the middleware. - # - # options - An options Hash (default: {}): - # :limit - A Integer redirect limit (default: 3). - def initialize(app, options = {}) - super(app) - @options = options - - @convert_to_get = Set.new [303] - end - - def call(env) - perform_with_redirection(env, follow_limit) - end - - private - - def convert_to_get?(response) - !%i[head options].include?(response.env[:method]) && - @convert_to_get.include?(response.status) - end - - def perform_with_redirection(env, follows) - request_body = env[:body] - response = @app.call(env) - - response.on_complete do |response_env| - if follow_redirect?(response_env, response) - raise(RedirectLimitReached, response) if follows.zero? - - new_request_env = update_env(response_env, request_body, response) - response = perform_with_redirection(new_request_env, follows - 1) - end - end - response - end - - def update_env(env, request_body, response) - original_url = env[:url] - env[:url] += safe_escape(response['location']) - unless same_host?(original_url, env[:url]) - # HACK: Faraday’s Authorization middlewares don’t touch the request if the `Authorization` header is set. - # This is a workaround to drop authentication info. - # See https://github.com/octokit/octokit.rb/pull/1359#issuecomment-925609697 - env[:request_headers]['Authorization'] = 'dummy' - end - - if convert_to_get?(response) - env[:method] = :get - env[:body] = nil - else - env[:body] = request_body - end - - ENV_TO_CLEAR.each { |key| env.delete(key) } - - env - end - - def follow_redirect?(env, response) - ALLOWED_METHODS.include?(env[:method]) && - REDIRECT_CODES.include?(response.status) - end - - def follow_limit - @options.fetch(:limit, FOLLOW_LIMIT) - end - - def same_host?(original_url, redirect_url) - original_uri = Addressable::URI.parse(original_url) - redirect_uri = Addressable::URI.parse(redirect_url) - - redirect_uri.host.nil? || original_uri.host == redirect_uri.host - end - - # Internal: Escapes unsafe characters from a URL which might be a path - # component only or a fully-qualified URI so that it can be joined onto a - # URI:HTTP using the `+` operator. Doesn't escape "%" characters so to not - # risk double-escaping. - def safe_escape(uri) - uri.to_s.gsub(URI_UNSAFE) do |match| - "%#{match.unpack('H2' * match.bytesize).join('%').upcase}" - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/organization.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/organization.rb deleted file mode 100644 index a3cb0dec..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/organization.rb +++ /dev/null @@ -1,19 +0,0 @@ -# frozen_string_literal: true - -module Octokit - # GitHub organization class to generate API path urls - class Organization - # Get the api path for an organization - # - # @param org [String, Integer] GitHub organization login or id - # @return [String] Organization Api path - def self.path(org) - case org - when String - "orgs/#{org}" - when Integer - "organizations/#{org}" - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/rate_limit.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/rate_limit.rb deleted file mode 100644 index fd6020d3..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/rate_limit.rb +++ /dev/null @@ -1,35 +0,0 @@ -# frozen_string_literal: true - -module Octokit - # Class for API Rate Limit info - # - # @!attribute [w] limit - # @return [Integer] Max tries per rate limit period - # @!attribute [w] remaining - # @return [Integer] Remaining tries per rate limit period - # @!attribute [w] resets_at - # @return [Time] Indicates when rate limit resets - # @!attribute [w] resets_in - # @return [Integer] Number of seconds when rate limit resets - # - # @see https://developer.github.com/v3/#rate-limiting - class RateLimit < Struct.new(:limit, :remaining, :resets_at, :resets_in) - # Get rate limit info from HTTP response - # - # @param response [#headers] HTTP response - # @return [RateLimit] - def self.from_response(response) - info = new - headers = response.headers if response.respond_to?(:headers) && !response.headers.nil? - headers ||= response.response_headers if response.respond_to?(:response_headers) && !response.response_headers.nil? - if headers - info.limit = (headers['X-RateLimit-Limit'] || 1).to_i - info.remaining = (headers['X-RateLimit-Remaining'] || 1).to_i - info.resets_at = Time.at((headers['X-RateLimit-Reset'] || Time.now).to_i) - info.resets_in = [(info.resets_at - Time.now).to_i, 0].max - end - - info - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/repo_arguments.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/repo_arguments.rb deleted file mode 100644 index 9598fb26..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/repo_arguments.rb +++ /dev/null @@ -1,18 +0,0 @@ -# frozen_string_literal: true - -module Octokit - # Class to extract options from Ruby arguments for - # Repository-related methods - class RepoArguments < Arguments - # !@attribute [r] repo - # @return [Repository] - attr_reader :repo - - def initialize(args) - arguments = super(args) - @repo = arguments.shift - - arguments - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/repository.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/repository.rb deleted file mode 100644 index c6524cef..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/repository.rb +++ /dev/null @@ -1,96 +0,0 @@ -# frozen_string_literal: true - -module Octokit - # Class to parse GitHub repository owner and name from - # URLs and to generate URLs - class Repository - attr_accessor :owner, :name, :id - - NAME_WITH_OWNER_PATTERN = %r{\A[\w.-]+/[\w.-]+\z}i.freeze - - # Instantiate from a GitHub repository URL - # - # @return [Repository] - def self.from_url(url) - new URI.parse(url).path[1..] - .gsub(%r{^repos/}, '') - .split('/', 3)[0..1] - .join('/') - end - - # @raise [Octokit::InvalidRepository] if the repository - # has an invalid format - def initialize(repo) - case repo - when Integer - @id = repo - when NAME_WITH_OWNER_PATTERN - @owner, @name = repo.split('/') - when Repository - @owner = repo.owner - @name = repo.name - when Hash - @name = repo[:repo] || repo[:name] - @owner = repo[:owner] || repo[:user] || repo[:username] - else - raise_invalid_repository!(repo) - end - validate_owner_and_name!(repo) if @owner && @name - end - - # Repository owner/name - # @return [String] - def slug - "#{@owner}/#{@name}" - end - alias to_s slug - - # @return [String] Repository API path - def path - return named_api_path if @owner && @name - - id_api_path if @id - end - - # Get the api path for a repo - # @param repo [Integer, String, Hash, Repository] A GitHub repository. - # @return [String] Api path. - def self.path(repo) - new(repo).path - end - - # @return [String] Api path for owner/name identified repos - def named_api_path - "repos/#{slug}" - end - - # @return [String] Api path for id identified repos - def id_api_path - "repositories/#{@id}" - end - - # Repository URL based on {Octokit::Client#web_endpoint} - # @return [String] - def url - "#{Octokit.web_endpoint}#{slug}" - end - - alias user owner - alias username owner - alias repo name - - private - - def validate_owner_and_name!(repo) - if @owner.include?('/') || @name.include?('/') || !url.match(URI::ABS_URI) - raise_invalid_repository!(repo) - end - end - - def raise_invalid_repository!(repo) - msg = "#{repo.inspect} is invalid as a repository identifier. " \ - 'Use the user/repo (String) format, or the repository ID (Integer), or a hash containing :repo and :user keys.' - raise Octokit::InvalidRepository, msg - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/response/base_middleware.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/response/base_middleware.rb deleted file mode 100644 index ed971a20..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/response/base_middleware.rb +++ /dev/null @@ -1,10 +0,0 @@ -# frozen_string_literal: true - -require 'faraday' - -module Octokit - module Response - # In Faraday 2.x, Faraday::Response::Middleware was removed - BaseMiddleware = defined?(Faraday::Response::Middleware) ? Faraday::Response::Middleware : Faraday::Middleware - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/response/feed_parser.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/response/feed_parser.rb deleted file mode 100644 index 3a73b063..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/response/feed_parser.rb +++ /dev/null @@ -1,17 +0,0 @@ -# frozen_string_literal: true - -require 'octokit/response/base_middleware' - -module Octokit - module Response - # Parses RSS and Atom feed responses. - class FeedParser < BaseMiddleware - def on_complete(env) - if env[:response_headers]['content-type'] =~ /(\batom|\brss)/ - require 'rss' - env[:body] = RSS::Parser.parse env[:body] - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/response/raise_error.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/response/raise_error.rb deleted file mode 100644 index 4b0fab0c..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/response/raise_error.rb +++ /dev/null @@ -1,19 +0,0 @@ -# frozen_string_literal: true - -require 'octokit/response/base_middleware' -require 'octokit/error' - -module Octokit - # Faraday response middleware - module Response - # This class raises an Octokit-flavored exception based - # HTTP status codes returned by the API - class RaiseError < BaseMiddleware - def on_complete(response) - if error = Octokit::Error.from_response(response) - raise error - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/user.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/user.rb deleted file mode 100644 index 1adf3d08..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/user.rb +++ /dev/null @@ -1,21 +0,0 @@ -# frozen_string_literal: true - -module Octokit - # GitHub user class to generate API path urls - class User - # Get the api path for a user - # - # @param user [String, Integer] GitHub user login or id - # @return [String] User Api path - def self.path(user) - case user - when String - "users/#{user}" - when Integer - "user/#{user}" - else - 'user' - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/version.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/version.rb deleted file mode 100644 index 628af1c3..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/version.rb +++ /dev/null @@ -1,19 +0,0 @@ -# frozen_string_literal: true - -module Octokit - # Current major release. - # @return [Integer] - MAJOR = 8 - - # Current minor release. - # @return [Integer] - MINOR = 1 - - # Current patch level. - # @return [Integer] - PATCH = 0 - - # Full release version. - # @return [String] - VERSION = [MAJOR, MINOR, PATCH].join('.').freeze -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/warnable.rb b/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/warnable.rb deleted file mode 100644 index 63551f64..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/lib/octokit/warnable.rb +++ /dev/null @@ -1,16 +0,0 @@ -# frozen_string_literal: true - -module Octokit - # Allows warnings to be suppressed via environment variable. - module Warnable - module_function - - # Wrapper around Kernel#warn to print warnings unless - # OCTOKIT_SILENT is set to true. - # - # @return [nil] - def octokit_warn(*message) - warn message unless ENV['OCTOKIT_SILENT'] - end - end -end diff --git a/bundle/ruby/3.2.0/gems/octokit-8.1.0/octokit.gemspec b/bundle/ruby/3.2.0/gems/octokit-8.1.0/octokit.gemspec deleted file mode 100644 index c9ca5afa..00000000 --- a/bundle/ruby/3.2.0/gems/octokit-8.1.0/octokit.gemspec +++ /dev/null @@ -1,25 +0,0 @@ -# frozen_string_literal: true - -lib = File.expand_path('lib', __dir__) -$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) -require 'octokit/version' - -Gem::Specification.new do |spec| - spec.add_dependency 'base64' - spec.add_dependency 'faraday', '>= 1', '< 3' - spec.add_dependency 'sawyer', '~> 0.9' - spec.authors = ['Wynn Netherland', 'Erik Michaels-Ober', 'Clint Shryock'] - spec.description = 'Simple wrapper for the GitHub API' - spec.email = ['wynn.netherland@gmail.com', 'sferik@gmail.com', 'clint@ctshryock.com'] - spec.files = %w[.document CONTRIBUTING.md LICENSE.md README.md Rakefile octokit.gemspec] - spec.files += Dir.glob('lib/**/*.rb') - spec.homepage = 'https://github.com/octokit/octokit.rb' - spec.licenses = ['MIT'] - spec.name = 'octokit' - spec.require_paths = ['lib'] - spec.required_ruby_version = '>= 2.7.0' - spec.required_rubygems_version = '>= 1.3.5' - spec.summary = 'Ruby toolkit for working with the GitHub API' - spec.version = Octokit::VERSION.dup - spec.metadata = { 'rubygems_mfa_required' => 'true' } -end diff --git a/bundle/ruby/3.2.0/gems/open4-1.3.4/LICENSE b/bundle/ruby/3.2.0/gems/open4-1.3.4/LICENSE deleted file mode 100644 index 38060d85..00000000 --- a/bundle/ruby/3.2.0/gems/open4-1.3.4/LICENSE +++ /dev/null @@ -1,3 +0,0 @@ -same as Ruby's - -http://www.ruby-lang.org/en/LICENSE.txt diff --git a/bundle/ruby/3.2.0/gems/open4-1.3.4/README b/bundle/ruby/3.2.0/gems/open4-1.3.4/README deleted file mode 100644 index 3f6231e4..00000000 --- a/bundle/ruby/3.2.0/gems/open4-1.3.4/README +++ /dev/null @@ -1,403 +0,0 @@ -URIS - - http://rubyforge.org/projects/codeforpeople/ - http://www.codeforpeople.com/lib/ruby/ - -SYNOPSIS - - open child process with handles on pid, stdin, stdout, and stderr: manage - child processes and their io handles easily. - -INSTALL - - ~> gem install open4 - -SAMPLES - - ---------------------------------------------------------------------------- - simple usage - ---------------------------------------------------------------------------- - - harp: > cat sample/simple.rb - require "open4" - - pid, stdin, stdout, stderr = Open4::popen4 "sh" - - stdin.puts "echo 42.out" - stdin.puts "echo 42.err 1>&2" - stdin.close - - ignored, status = Process::waitpid2 pid - - puts "pid : #{ pid }" - puts "stdout : #{ stdout.read.strip }" - puts "stderr : #{ stderr.read.strip }" - puts "status : #{ status.inspect }" - puts "exitstatus : #{ status.exitstatus }" - - - harp: > ruby sample/simple.rb - pid : 17273 - stdout : 42.out - stderr : 42.err - status : # - exitstatus : 0 - - - ---------------------------------------------------------------------------- - in block form - the child process is automatically waited for - ---------------------------------------------------------------------------- - - harp: > cat sample/block.rb - require 'open4' - - status = - Open4::popen4("sh") do |pid, stdin, stdout, stderr| - stdin.puts "echo 42.out" - stdin.puts "echo 42.err 1>&2" - stdin.close - - puts "pid : #{ pid }" - puts "stdout : #{ stdout.read.strip }" - puts "stderr : #{ stderr.read.strip }" - end - - puts "status : #{ status.inspect }" - puts "exitstatus : #{ status.exitstatus }" - - - harp: > ruby sample/block.rb - pid : 17295 - stdout : 42.out - stderr : 42.err - status : # - exitstatus : 0 - - ---------------------------------------------------------------------------- - exceptions are marshaled from child to parent if fork/exec fails - ---------------------------------------------------------------------------- - - harp: > cat sample/exception.rb - require "open4" - Open4::popen4 "noexist" - - - harp: > ruby sample/exception.rb - /dmsp/reference/ruby-1.8.1//lib/ruby/site_ruby/open4.rb:100:in `popen4': No such file or directory - noexist (Errno::ENOENT) - from sample/exception.rb:3 - - ---------------------------------------------------------------------------- - the spawn method provides and even more convenient method of running a - process, allowing any object that supports 'each', 'read', or 'to_s' to be - given as stdin and any objects that support '<<' to be given as - stdout/stderr. an exception is thrown if the exec'd cmd fails (nonzero - exitstatus) unless the option 'raise'=>false is given - ---------------------------------------------------------------------------- - - harp: > cat sample/spawn.rb - require 'open4' - include Open4 - - cat = ' ruby -e" ARGF.each{|line| STDOUT << line} " ' - - stdout, stderr = '', '' - status = spawn cat, 'stdin' => '42', 'stdout' => stdout, 'stderr' => stderr - p status - p stdout - p stderr - - stdout, stderr = '', '' - status = spawn cat, 0=>'42', 1=>stdout, 2=>stderr - p status - p stdout - p stderr - - - harp: > RUBYLIB=lib ruby sample/spawn.rb - 0 - "42" - "" - 0 - "42" - "" - - - ---------------------------------------------------------------------------- - the bg/background method is similar to spawn, but the process is - automatically set running in a thread. the returned thread has several - methods added dynamically which return the pid and blocking calls to the - exitstatus. - ---------------------------------------------------------------------------- - - harp: > cat sample/bg.rb - require 'yaml' - require 'open4' - include Open4 - - stdin = '42' - stdout = '' - stderr = '' - - t = bg 'ruby -e"sleep 4; puts ARGF.read"', 0=>stdin, 1=>stdout, 2=>stderr - - waiter = Thread.new{ y t.pid => t.exitstatus } # t.exitstatus is a blocking call! - - while((status = t.status)) - y "status" => status - sleep 1 - end - - waiter.join - - y "stdout" => stdout - - - harp: > ruby sample/bg.rb - --- - status: run - --- - status: sleep - --- - status: sleep - --- - status: sleep - --- - 21357: 0 - --- - stdout: "42\n" - - ---------------------------------------------------------------------------- - the timeout methods can be used to ensure execution is preceding at the - desired interval. note also how to setup a 'pipeline' - ---------------------------------------------------------------------------- - - harp: > cat sample/stdin_timeout.rb - require 'open4' - - producer = 'ruby -e" STDOUT.sync = true; loop{sleep(rand+rand) and puts 42} "' - - consumer = 'ruby -e" STDOUT.sync = true; STDIN.each{|line| puts line} "' - - open4(producer) do |pid, i, o, e| - - open4.spawn consumer, :stdin=>o, :stdout=>STDOUT, :stdin_timeout => 1.4 - - end - - - harp: > ruby sample/stdin_timeout.rb - 42 - 42 - 42 - 42 - 42 - /dmsp/reference/ruby-1.8.1//lib/ruby/1.8/timeout.rb:42:in `relay': execution expired (Timeout::Error) - - ---------------------------------------------------------------------------- - pfork4 is similar to popen4, but instead of executing a command, it runs - ruby code in a child process. if the child process raises an exception, it - propagates to the parent. - ---------------------------------------------------------------------------- - - harp: > cat sample/pfork4.rb - require 'open4' - - echo = lambda do - $stdout.write $stdin.read - raise 'finish implementing me' - end - - org_message = "hello, world!" - got_message = nil - exception = nil - - begin - Open4.pfork4(echo) do |cid, stdin, stdout, stderr| - stdin.write org_message - stdin.close - got_message = stdout.read - end - rescue RuntimeError => e - exception = e.to_s - end - - puts "org_message: #{org_message}" - puts "got_message: #{got_message}" - puts "exception : #{exception}" - - - harp: > ruby sample/pfork4.rb - org_message: hello, world! - got_message: hello, world! - exception : finish implementing me - -HISTORY - 1.0.0 - - added ability for spawn to take a proc (respond_to?(:call)) - - cmd = ' ruby -e" 42.times{ puts 0b101010 } " ' - include Open4 - spawn cmd, :stdout => lambda{|buf| puts buf} - - - 0.9.5: - - another patch from Corey Jewett, this time dealing with ruby's handling - of chdir and threads. basically the 'cwd' keyword to open4 cannot work - with multiple threads (aka background) because ruby cannot cause green - threads to have an actuall different working dir. the moral is that the - :cwd/'cwd' keyword to spawn will work with 0 or 1 threads in effect. - - 0.9.4: - - patch to #background from Corey Jewett - - - 0.9.3: - - removed some debugging output accidentally left in 0.9.2. arggh! - - 0.9.2: - - fixed a descriptor leak. thanks Andre Nathan. - - 0.9.1: - - fixed warning with '-w' : @cid not initialized. thanks blaise tarr. - - 0.9.0: - - added the ability for open4.spawn to take either an array of arguments - or multiple arguments in order to specify the argv for the command run. - for example - - open4.spawn ['touch', 'difficult to "quote"'], :stdout=>STDOUT - - same thing - - open4.spawn 'touch', 'difficult to "quote"', :stdout=>STDOUT - - thanks to jordan breeding for this suggestion - - - - added 'cwd'/:cwd keyword. usage is pretty obivous - - open4.spawn 'pwd', 1=>STDOUT, :cwd=>'/tmp' #=> /tmp - - this one also from jordan - - 0.8.0: - - - fixed a critical bug whereby a process producing tons of stdout, but for - which the stdout was not handled, would cause the child process to - become blocked/hung writing to the pipe. eg, this command would cause a - hang - - include Open4 - - spawn 'ruby -e" puts Array.new(65536){ 42 } "' - - whereas this one would not - - include Open4 - - spawn 'ruby -e" puts Array.new(65536){ 42 } "', :stdout=>StringIO.new - - this version handles the former by spawning a 'null' thread which reads, - but does not process stdout/stderr. that way commands which generate - tons of output will never become blocked. - - 0.7.0: - - merged functionality of exitstatus/status keywords: - - include Open4 - - spawn 'ruby -e "exit 42"' # raises - spawn 'ruby -e "exit 42"', :status=>true # ok, returns status - spawn 'ruby -e "exit 42"', :status=>42 # raises if status != 42 - spawn 'ruby -e "exit 42"', :status=>0,42 # raises if status != 0||42 - - - the 0.6.0 was broken on rubyforge... this release fixes that (somehow!?) - - 0.6.0: - - added feature for exitstatus to be list of acceptable exit statuses - - Open4.spawn 'ruby -e "exit 42"' # raises - Open4.spawn 'ruby -e "exit 42"', :exitstatus=>[0,42] # ok - - - added :status switch, which will always simply return the status (no - error thrown for failure) - - Open4.spawn 'ruby -e "exit 42"' # raises - status = Open4.spawn 'ruby -e "exit 42"', :status=>true # ok - - note, however, that any SpawnError does in fact contain the failed - status so, even when they are thrown, error status can be retrieved: - - include Open4 - - status = - begin - spawn 'ruby -e "exit 42"' - rescue SpawnError => e - warn{ e } - e.status - end - - 0.5.1: - - fixes a __critical__ but in ThreadEnsemble class that had a race - condition that could cause thread deadlock. sorry bout that folks. - - 0.5.0: - - on the suggestion of tim pease (thanks tim!), i added timeout features - to open4. the command run may have an overall timeout and individual - timeouts set for each of the io handles. for example - - cmd = 'command_that_produce_out_at_one_second_intervals' - - open4.spawn cmd, :stdout_timeout => 2 - - or - - cmd = 'command_that_should_complete_in_about_one_minute' - - open4.spawn cmd, :timeout => 60 - - or - - cmd = 'consumes_input_at_one_line_per_second_rate' - - input = %w( 42 forty-two 42.0 ) - - open4.spawn cmd, :stdin=>input, :stdin_timeout=>1 - - - added 'open4' alias so one can write - - open4.spawn vs Open4.spawn - - or even - - open4(cmd) do |pid,i,o,e| - end - - - added signal info to SpawnError - - 0.4.0: - - improved error handling contributed by jordan breeding. - - introduction of background/bg method - - 0.3.0 : - - bug fix from jordan breeding. general clean up. added spawn method. - - 0.2.0 : - - added exception marshaled from child -> parent when exec fails. thanks - to jordan breeding for a patch (yay!) and paul brannan for this most - excellent idea. - - 0.1.0 : - - fixed docs to correctly show return value of popen4 (pid first not last). - thanks Stefanie Tellex for catching this. - 0.0.0 : - - initial version - -AUTHOR - - ara.t.howard@gmail.com - -LICENSE - - ruby's diff --git a/bundle/ruby/3.2.0/gems/open4-1.3.4/README.erb b/bundle/ruby/3.2.0/gems/open4-1.3.4/README.erb deleted file mode 100644 index 3f6231e4..00000000 --- a/bundle/ruby/3.2.0/gems/open4-1.3.4/README.erb +++ /dev/null @@ -1,403 +0,0 @@ -URIS - - http://rubyforge.org/projects/codeforpeople/ - http://www.codeforpeople.com/lib/ruby/ - -SYNOPSIS - - open child process with handles on pid, stdin, stdout, and stderr: manage - child processes and their io handles easily. - -INSTALL - - ~> gem install open4 - -SAMPLES - - ---------------------------------------------------------------------------- - simple usage - ---------------------------------------------------------------------------- - - harp: > cat sample/simple.rb - require "open4" - - pid, stdin, stdout, stderr = Open4::popen4 "sh" - - stdin.puts "echo 42.out" - stdin.puts "echo 42.err 1>&2" - stdin.close - - ignored, status = Process::waitpid2 pid - - puts "pid : #{ pid }" - puts "stdout : #{ stdout.read.strip }" - puts "stderr : #{ stderr.read.strip }" - puts "status : #{ status.inspect }" - puts "exitstatus : #{ status.exitstatus }" - - - harp: > ruby sample/simple.rb - pid : 17273 - stdout : 42.out - stderr : 42.err - status : # - exitstatus : 0 - - - ---------------------------------------------------------------------------- - in block form - the child process is automatically waited for - ---------------------------------------------------------------------------- - - harp: > cat sample/block.rb - require 'open4' - - status = - Open4::popen4("sh") do |pid, stdin, stdout, stderr| - stdin.puts "echo 42.out" - stdin.puts "echo 42.err 1>&2" - stdin.close - - puts "pid : #{ pid }" - puts "stdout : #{ stdout.read.strip }" - puts "stderr : #{ stderr.read.strip }" - end - - puts "status : #{ status.inspect }" - puts "exitstatus : #{ status.exitstatus }" - - - harp: > ruby sample/block.rb - pid : 17295 - stdout : 42.out - stderr : 42.err - status : # - exitstatus : 0 - - ---------------------------------------------------------------------------- - exceptions are marshaled from child to parent if fork/exec fails - ---------------------------------------------------------------------------- - - harp: > cat sample/exception.rb - require "open4" - Open4::popen4 "noexist" - - - harp: > ruby sample/exception.rb - /dmsp/reference/ruby-1.8.1//lib/ruby/site_ruby/open4.rb:100:in `popen4': No such file or directory - noexist (Errno::ENOENT) - from sample/exception.rb:3 - - ---------------------------------------------------------------------------- - the spawn method provides and even more convenient method of running a - process, allowing any object that supports 'each', 'read', or 'to_s' to be - given as stdin and any objects that support '<<' to be given as - stdout/stderr. an exception is thrown if the exec'd cmd fails (nonzero - exitstatus) unless the option 'raise'=>false is given - ---------------------------------------------------------------------------- - - harp: > cat sample/spawn.rb - require 'open4' - include Open4 - - cat = ' ruby -e" ARGF.each{|line| STDOUT << line} " ' - - stdout, stderr = '', '' - status = spawn cat, 'stdin' => '42', 'stdout' => stdout, 'stderr' => stderr - p status - p stdout - p stderr - - stdout, stderr = '', '' - status = spawn cat, 0=>'42', 1=>stdout, 2=>stderr - p status - p stdout - p stderr - - - harp: > RUBYLIB=lib ruby sample/spawn.rb - 0 - "42" - "" - 0 - "42" - "" - - - ---------------------------------------------------------------------------- - the bg/background method is similar to spawn, but the process is - automatically set running in a thread. the returned thread has several - methods added dynamically which return the pid and blocking calls to the - exitstatus. - ---------------------------------------------------------------------------- - - harp: > cat sample/bg.rb - require 'yaml' - require 'open4' - include Open4 - - stdin = '42' - stdout = '' - stderr = '' - - t = bg 'ruby -e"sleep 4; puts ARGF.read"', 0=>stdin, 1=>stdout, 2=>stderr - - waiter = Thread.new{ y t.pid => t.exitstatus } # t.exitstatus is a blocking call! - - while((status = t.status)) - y "status" => status - sleep 1 - end - - waiter.join - - y "stdout" => stdout - - - harp: > ruby sample/bg.rb - --- - status: run - --- - status: sleep - --- - status: sleep - --- - status: sleep - --- - 21357: 0 - --- - stdout: "42\n" - - ---------------------------------------------------------------------------- - the timeout methods can be used to ensure execution is preceding at the - desired interval. note also how to setup a 'pipeline' - ---------------------------------------------------------------------------- - - harp: > cat sample/stdin_timeout.rb - require 'open4' - - producer = 'ruby -e" STDOUT.sync = true; loop{sleep(rand+rand) and puts 42} "' - - consumer = 'ruby -e" STDOUT.sync = true; STDIN.each{|line| puts line} "' - - open4(producer) do |pid, i, o, e| - - open4.spawn consumer, :stdin=>o, :stdout=>STDOUT, :stdin_timeout => 1.4 - - end - - - harp: > ruby sample/stdin_timeout.rb - 42 - 42 - 42 - 42 - 42 - /dmsp/reference/ruby-1.8.1//lib/ruby/1.8/timeout.rb:42:in `relay': execution expired (Timeout::Error) - - ---------------------------------------------------------------------------- - pfork4 is similar to popen4, but instead of executing a command, it runs - ruby code in a child process. if the child process raises an exception, it - propagates to the parent. - ---------------------------------------------------------------------------- - - harp: > cat sample/pfork4.rb - require 'open4' - - echo = lambda do - $stdout.write $stdin.read - raise 'finish implementing me' - end - - org_message = "hello, world!" - got_message = nil - exception = nil - - begin - Open4.pfork4(echo) do |cid, stdin, stdout, stderr| - stdin.write org_message - stdin.close - got_message = stdout.read - end - rescue RuntimeError => e - exception = e.to_s - end - - puts "org_message: #{org_message}" - puts "got_message: #{got_message}" - puts "exception : #{exception}" - - - harp: > ruby sample/pfork4.rb - org_message: hello, world! - got_message: hello, world! - exception : finish implementing me - -HISTORY - 1.0.0 - - added ability for spawn to take a proc (respond_to?(:call)) - - cmd = ' ruby -e" 42.times{ puts 0b101010 } " ' - include Open4 - spawn cmd, :stdout => lambda{|buf| puts buf} - - - 0.9.5: - - another patch from Corey Jewett, this time dealing with ruby's handling - of chdir and threads. basically the 'cwd' keyword to open4 cannot work - with multiple threads (aka background) because ruby cannot cause green - threads to have an actuall different working dir. the moral is that the - :cwd/'cwd' keyword to spawn will work with 0 or 1 threads in effect. - - 0.9.4: - - patch to #background from Corey Jewett - - - 0.9.3: - - removed some debugging output accidentally left in 0.9.2. arggh! - - 0.9.2: - - fixed a descriptor leak. thanks Andre Nathan. - - 0.9.1: - - fixed warning with '-w' : @cid not initialized. thanks blaise tarr. - - 0.9.0: - - added the ability for open4.spawn to take either an array of arguments - or multiple arguments in order to specify the argv for the command run. - for example - - open4.spawn ['touch', 'difficult to "quote"'], :stdout=>STDOUT - - same thing - - open4.spawn 'touch', 'difficult to "quote"', :stdout=>STDOUT - - thanks to jordan breeding for this suggestion - - - - added 'cwd'/:cwd keyword. usage is pretty obivous - - open4.spawn 'pwd', 1=>STDOUT, :cwd=>'/tmp' #=> /tmp - - this one also from jordan - - 0.8.0: - - - fixed a critical bug whereby a process producing tons of stdout, but for - which the stdout was not handled, would cause the child process to - become blocked/hung writing to the pipe. eg, this command would cause a - hang - - include Open4 - - spawn 'ruby -e" puts Array.new(65536){ 42 } "' - - whereas this one would not - - include Open4 - - spawn 'ruby -e" puts Array.new(65536){ 42 } "', :stdout=>StringIO.new - - this version handles the former by spawning a 'null' thread which reads, - but does not process stdout/stderr. that way commands which generate - tons of output will never become blocked. - - 0.7.0: - - merged functionality of exitstatus/status keywords: - - include Open4 - - spawn 'ruby -e "exit 42"' # raises - spawn 'ruby -e "exit 42"', :status=>true # ok, returns status - spawn 'ruby -e "exit 42"', :status=>42 # raises if status != 42 - spawn 'ruby -e "exit 42"', :status=>0,42 # raises if status != 0||42 - - - the 0.6.0 was broken on rubyforge... this release fixes that (somehow!?) - - 0.6.0: - - added feature for exitstatus to be list of acceptable exit statuses - - Open4.spawn 'ruby -e "exit 42"' # raises - Open4.spawn 'ruby -e "exit 42"', :exitstatus=>[0,42] # ok - - - added :status switch, which will always simply return the status (no - error thrown for failure) - - Open4.spawn 'ruby -e "exit 42"' # raises - status = Open4.spawn 'ruby -e "exit 42"', :status=>true # ok - - note, however, that any SpawnError does in fact contain the failed - status so, even when they are thrown, error status can be retrieved: - - include Open4 - - status = - begin - spawn 'ruby -e "exit 42"' - rescue SpawnError => e - warn{ e } - e.status - end - - 0.5.1: - - fixes a __critical__ but in ThreadEnsemble class that had a race - condition that could cause thread deadlock. sorry bout that folks. - - 0.5.0: - - on the suggestion of tim pease (thanks tim!), i added timeout features - to open4. the command run may have an overall timeout and individual - timeouts set for each of the io handles. for example - - cmd = 'command_that_produce_out_at_one_second_intervals' - - open4.spawn cmd, :stdout_timeout => 2 - - or - - cmd = 'command_that_should_complete_in_about_one_minute' - - open4.spawn cmd, :timeout => 60 - - or - - cmd = 'consumes_input_at_one_line_per_second_rate' - - input = %w( 42 forty-two 42.0 ) - - open4.spawn cmd, :stdin=>input, :stdin_timeout=>1 - - - added 'open4' alias so one can write - - open4.spawn vs Open4.spawn - - or even - - open4(cmd) do |pid,i,o,e| - end - - - added signal info to SpawnError - - 0.4.0: - - improved error handling contributed by jordan breeding. - - introduction of background/bg method - - 0.3.0 : - - bug fix from jordan breeding. general clean up. added spawn method. - - 0.2.0 : - - added exception marshaled from child -> parent when exec fails. thanks - to jordan breeding for a patch (yay!) and paul brannan for this most - excellent idea. - - 0.1.0 : - - fixed docs to correctly show return value of popen4 (pid first not last). - thanks Stefanie Tellex for catching this. - 0.0.0 : - - initial version - -AUTHOR - - ara.t.howard@gmail.com - -LICENSE - - ruby's diff --git a/bundle/ruby/3.2.0/gems/open4-1.3.4/lib/open4.rb b/bundle/ruby/3.2.0/gems/open4-1.3.4/lib/open4.rb deleted file mode 100644 index 04f7dcc9..00000000 --- a/bundle/ruby/3.2.0/gems/open4-1.3.4/lib/open4.rb +++ /dev/null @@ -1,437 +0,0 @@ -# vim: ts=2:sw=2:sts=2:et:fdm=marker -require 'fcntl' -require 'timeout' -require 'thread' - -module Open4 - VERSION = '1.3.4' - def Open4.version() VERSION end - - def Open4.description - 'open child process with handles on pid, stdin, stdout, and stderr: manage child processes and their io handles easily.' - end - - class Error < ::StandardError; end - - def pfork4(fun, &b) - Open4.do_popen(b, :block) do |ps_read, _| - ps_read.close - begin - fun.call - rescue SystemExit => e - # Make it seem to the caller that calling Kernel#exit in +fun+ kills - # the child process normally. Kernel#exit! bypasses this rescue - # block. - exit! e.status - else - exit! 0 - end - end - end - module_function :pfork4 - - def popen4(*cmd, &b) - Open4.do_popen(b, :init) do |ps_read, ps_write| - ps_read.fcntl(Fcntl::F_SETFD, Fcntl::FD_CLOEXEC) - ps_write.fcntl(Fcntl::F_SETFD, Fcntl::FD_CLOEXEC) - exec(*cmd) - raise 'forty-two' # Is this really needed? - end - end - alias open4 popen4 - module_function :popen4 - module_function :open4 - - def popen4ext(closefds=false, *cmd, &b) - Open4.do_popen(b, :init, closefds) do |ps_read, ps_write| - ps_read.fcntl(Fcntl::F_SETFD, Fcntl::FD_CLOEXEC) - ps_write.fcntl(Fcntl::F_SETFD, Fcntl::FD_CLOEXEC) - exec(*cmd) - raise 'forty-two' # Is this really needed? - end - end - module_function :popen4ext - - def self.do_popen(b = nil, exception_propagation_at = nil, closefds=false, &cmd) - pw, pr, pe, ps = IO.pipe, IO.pipe, IO.pipe, IO.pipe - - verbose = $VERBOSE - begin - $VERBOSE = nil - - cid = fork { - if closefds - exlist = [0, 1, 2] | [pw,pr,pe,ps].map{|p| [p.first.fileno, p.last.fileno] }.flatten - ObjectSpace.each_object(IO){|io| - io.close if (not io.closed?) and (not exlist.include? io.fileno) rescue nil - } - end - - pw.last.close - STDIN.reopen pw.first - pw.first.close - - pr.first.close - STDOUT.reopen pr.last - pr.last.close - - pe.first.close - STDERR.reopen pe.last - pe.last.close - - STDOUT.sync = STDERR.sync = true - - begin - cmd.call(ps) - rescue Exception => e - Marshal.dump(e, ps.last) - ps.last.flush - ensure - ps.last.close unless ps.last.closed? - end - - exit! - } - ensure - $VERBOSE = verbose - end - - [ pw.first, pr.last, pe.last, ps.last ].each { |fd| fd.close } - - Open4.propagate_exception cid, ps.first if exception_propagation_at == :init - - pw.last.sync = true - - pi = [ pw.last, pr.first, pe.first ] - - begin - return [cid, *pi] unless b - - begin - b.call(cid, *pi) - ensure - pi.each { |fd| fd.close unless fd.closed? } - end - - Open4.propagate_exception cid, ps.first if exception_propagation_at == :block - - Process.waitpid2(cid).last - ensure - ps.first.close unless ps.first.closed? - end - end - - def self.propagate_exception(cid, ps_read) - e = Marshal.load ps_read - raise Exception === e ? e : "unknown failure!" - rescue EOFError - # Child process did not raise exception. - rescue - # Child process raised exception; wait it in order to avoid a zombie. - Process.waitpid2 cid - raise - ensure - ps_read.close - end - - class SpawnError < Error - attr 'cmd' - attr 'status' - attr 'signals' - def exitstatus - @status.exitstatus - end - def initialize cmd, status - @cmd, @status = cmd, status - @signals = {} - if status.signaled? - @signals['termsig'] = status.termsig - @signals['stopsig'] = status.stopsig - end - sigs = @signals.map{|k,v| "#{ k }:#{ v.inspect }"}.join(' ') - super "cmd <#{ cmd }> failed with status <#{ exitstatus.inspect }> signals <#{ sigs }>" - end - end - - class ThreadEnsemble - attr 'threads' - - def initialize cid - @cid, @threads, @argv, @done, @running = cid, [], [], Queue.new, false - @killed = false - end - - def add_thread *a, &b - @running ? raise : (@argv << [a, b]) - end - -# -# take down process more nicely -# - def killall - c = Thread.critical - return nil if @killed - Thread.critical = true - (@threads - [Thread.current]).each{|t| t.kill rescue nil} - @killed = true - ensure - Thread.critical = c - end - - def run - @running = true - - begin - @argv.each do |a, b| - @threads << Thread.new(*a) do |*_a| - begin - b[*_a] - ensure - killall rescue nil if $! - @done.push Thread.current - end - end - end - rescue - killall - raise - ensure - all_done - end - - @threads.map{|t| t.value} - end - - def all_done - @threads.size.times{ @done.pop } - end - end - - def to timeout = nil - Timeout.timeout(timeout){ yield } - end - module_function :to - - def new_thread *a, &b - cur = Thread.current - Thread.new(*a) do |*_a| - begin - b[*_a] - rescue Exception => e - cur.raise e - end - end - end - module_function :new_thread - - def getopts opts = {} - lambda do |*args| - keys, default, _ = args - catch(:opt) do - [keys].flatten.each do |key| - [key, key.to_s, key.to_s.intern].each do |_key| - throw :opt, opts[_key] if opts.has_key?(_key) - end - end - default - end - end - end - module_function :getopts - - def relay src, dst = nil, t = nil - send_dst = - if dst.respond_to?(:call) - lambda{|buf| dst.call(buf)} - elsif dst.respond_to?(:<<) - lambda{|buf| dst << buf } - else - lambda{|buf| buf } - end - - unless src.nil? - if src.respond_to? :gets - while buf = to(t){ src.gets } - send_dst[buf] - end - - elsif src.respond_to? :each - q = Queue.new - th = nil - - timer_set = lambda do |_t| - th = new_thread{ to(_t){ q.pop } } - end - - timer_cancel = lambda do |_t| - th.kill if th rescue nil - end - - timer_set[t] - begin - src.each do |_buf| - timer_cancel[t] - send_dst[_buf] - timer_set[t] - end - ensure - timer_cancel[t] - end - - elsif src.respond_to? :read - buf = to(t){ src.read } - send_dst[buf] - - else - buf = to(t){ src.to_s } - send_dst[buf] - end - end - end - module_function :relay - - def spawn arg, *argv - argv.unshift(arg) - opts = ((argv.size > 1 and Hash === argv.last) ? argv.pop : {}) - argv.flatten! - cmd = argv.join(' ') - - - getopt = getopts opts - - ignore_exit_failure = getopt[ 'ignore_exit_failure', getopt['quiet', false] ] - ignore_exec_failure = getopt[ 'ignore_exec_failure', !getopt['raise', true] ] - exitstatus = getopt[ %w( exitstatus exit_status status ) ] - stdin = getopt[ %w( stdin in i 0 ) << 0 ] - stdout = getopt[ %w( stdout out o 1 ) << 1 ] - stderr = getopt[ %w( stderr err e 2 ) << 2 ] - pid = getopt[ 'pid' ] - timeout = getopt[ %w( timeout spawn_timeout ) ] - stdin_timeout = getopt[ %w( stdin_timeout ) ] - stdout_timeout = getopt[ %w( stdout_timeout io_timeout ) ] - stderr_timeout = getopt[ %w( stderr_timeout ) ] - status = getopt[ %w( status ) ] - cwd = getopt[ %w( cwd dir ) ] - closefds = getopt[ %w( close_fds ) ] - - exitstatus = - case exitstatus - when TrueClass, FalseClass - ignore_exit_failure = true if exitstatus - [0] - else - [*(exitstatus || 0)].map{|i| Integer i} - end - - stdin ||= '' if stdin_timeout - stdout ||= '' if stdout_timeout - stderr ||= '' if stderr_timeout - - started = false - - status = - begin - chdir(cwd) do - Timeout::timeout(timeout) do - popen4ext(closefds, *argv) do |c, i, o, e| - started = true - - %w( replace pid= << push update ).each do |msg| - break(pid.send(msg, c)) if pid.respond_to? msg - end - - te = ThreadEnsemble.new c - - te.add_thread(i, stdin) do |_i, _stdin| - relay _stdin, _i, stdin_timeout - _i.close rescue nil - end - - te.add_thread(o, stdout) do |_o, _stdout| - relay _o, _stdout, stdout_timeout - end - - te.add_thread(e, stderr) do |_o, _stderr| # HACK: I think this is a bug - relay e, _stderr, stderr_timeout - end - - te.run - end - end - end - rescue - raise unless(not started and ignore_exec_failure) - end - - raise SpawnError.new(cmd, status) unless - (ignore_exit_failure or (status.nil? and ignore_exec_failure) or exitstatus.include?(status.exitstatus)) - - status - end - module_function :spawn - - def chdir cwd, &block - return(block.call Dir.pwd) unless cwd - Dir.chdir cwd, &block - end - module_function :chdir - - def background arg, *argv - require 'thread' - q = Queue.new - opts = { 'pid' => q, :pid => q } - case argv.last - when Hash - argv.last.update opts - else - argv.push opts - end - thread = Thread.new(arg, argv){|_arg, _argv| spawn _arg, *_argv} - sc = class << thread; self; end - sc.module_eval { - define_method(:pid){ @pid ||= q.pop } - define_method(:spawn_status){ @spawn_status ||= value } - define_method(:exitstatus){ @exitstatus ||= spawn_status.exitstatus } - } - thread - end - alias bg background - module_function :background - module_function :bg - - def maim pid, opts = {} - getopt = getopts opts - sigs = getopt[ 'signals', %w(SIGTERM SIGQUIT SIGKILL) ] - suspend = getopt[ 'suspend', 4 ] - pid = Integer pid - existed = false - sigs.each do |sig| - begin - Process.kill sig, pid - existed = true - rescue Errno::ESRCH - return(existed ? nil : true) - end - return true unless alive? pid - sleep suspend - return true unless alive? pid - end - return(not alive?(pid)) - end - module_function :maim - - def alive pid - pid = Integer pid - begin - Process.kill 0, pid - true - rescue Errno::ESRCH - false - end - end - alias alive? alive - module_function :alive - module_function :'alive?' -end - -def open4(*cmd, &b) cmd.size == 0 ? Open4 : Open4::popen4(*cmd, &b) end diff --git a/bundle/ruby/3.2.0/gems/open4-1.3.4/open4.gemspec b/bundle/ruby/3.2.0/gems/open4-1.3.4/open4.gemspec deleted file mode 100644 index b208175d..00000000 --- a/bundle/ruby/3.2.0/gems/open4-1.3.4/open4.gemspec +++ /dev/null @@ -1,53 +0,0 @@ -## open4.gemspec -# - -Gem::Specification::new do |spec| - spec.name = "open4" - spec.version = "1.3.4" - spec.platform = Gem::Platform::RUBY - spec.summary = "open4" - spec.description = "open child process with handles on pid, stdin, stdout, and stderr: manage child processes and their io handles easily." - spec.license = "Ruby" - - spec.files = -["LICENSE", - "README", - "README.erb", - "lib", - "lib/open4.rb", - "open4.gemspec", - "rakefile", - "samples", - "samples/bg.rb", - "samples/block.rb", - "samples/exception.rb", - "samples/jesse-caldwell.rb", - "samples/pfork4.rb", - "samples/simple.rb", - "samples/spawn.rb", - "samples/stdin_timeout.rb", - "samples/timeout.rb", - "test", - "test/lib", - "test/lib/test_case.rb", - "test/pfork4_test.rb", - "test/popen4_test.rb", - "test/popen4ext_test.rb", - "white_box", - "white_box/leak.rb"] - - spec.executables = [] - - spec.require_path = "lib" - - spec.test_files = nil - - - - spec.extensions.push(*[]) - - spec.rubyforge_project = "codeforpeople" - spec.author = "Ara T. Howard" - spec.email = "ara.t.howard@gmail.com" - spec.homepage = "https://github.com/ahoward/open4" -end diff --git a/bundle/ruby/3.2.0/gems/open4-1.3.4/rakefile b/bundle/ruby/3.2.0/gems/open4-1.3.4/rakefile deleted file mode 100644 index 71ae6c50..00000000 --- a/bundle/ruby/3.2.0/gems/open4-1.3.4/rakefile +++ /dev/null @@ -1,394 +0,0 @@ -This.rubyforge_project = 'codeforpeople' -This.author = "Ara T. Howard" -This.email = "ara.t.howard@gmail.com" -This.homepage = "https://github.com/ahoward/#{ This.lib }" - -task :license do - open('LICENSE', 'w'){|fd| fd.puts "Ruby"} -end - -task :default do - puts((Rake::Task.tasks.map{|task| task.name.gsub(/::/,':')} - ['default']).sort) -end - -task :test do - run_tests! -end - -namespace :test do - task(:unit){ run_tests!(:unit) } - task(:functional){ run_tests!(:functional) } - task(:integration){ run_tests!(:integration) } -end - -def run_tests!(which = nil) - which ||= '**' - test_dir = File.join(This.dir, "test") - test_glob ||= File.join(test_dir, "#{ which }/**_test.rb") - test_rbs = Dir.glob(test_glob).sort - - div = ('=' * 119) - line = ('-' * 119) - - test_rbs.each_with_index do |test_rb, index| - testno = index + 1 - command = "#{ This.ruby } -rubygems -w -I ./lib -I ./test/lib #{ test_rb }" - - puts - say(div, :color => :cyan, :bold => true) - say("@#{ testno } => ", :bold => true, :method => :print) - say(command, :color => :cyan, :bold => true) - say(line, :color => :cyan, :bold => true) - - system(command) - - say(line, :color => :cyan, :bold => true) - - status = $?.exitstatus - - if status.zero? - say("@#{ testno } <= ", :bold => true, :color => :white, :method => :print) - say("SUCCESS", :color => :green, :bold => true) - else - say("@#{ testno } <= ", :bold => true, :color => :white, :method => :print) - say("FAILURE", :color => :red, :bold => true) - end - say(line, :color => :cyan, :bold => true) - - exit(status) unless status.zero? - end -end - - -task :gemspec do - ignore_extensions = ['git', 'svn', 'tmp', /sw./, 'bak', 'gem'] - ignore_directories = ['pkg'] - ignore_files = ['test/log'] - - shiteless = - lambda do |list| - list.delete_if do |entry| - next unless test(?e, entry) - extension = File.basename(entry).split(%r/[.]/).last - ignore_extensions.any?{|ext| ext === extension} - end - list.delete_if do |entry| - next unless test(?d, entry) - dirname = File.expand_path(entry) - ignore_directories.any?{|dir| File.expand_path(dir) == dirname} - end - list.delete_if do |entry| - next unless test(?f, entry) - filename = File.expand_path(entry) - ignore_files.any?{|file| File.expand_path(file) == filename} - end - end - - lib = This.lib - object = This.object - version = This.version - files = shiteless[Dir::glob("**/**")] - executables = shiteless[Dir::glob("bin/*")].map{|exe| File.basename(exe)} - #has_rdoc = true #File.exist?('doc') - test_files = "test/#{ lib }.rb" if File.file?("test/#{ lib }.rb") - summary = object.respond_to?(:summary) ? object.summary : "summary: #{ lib } kicks the ass" - description = object.respond_to?(:description) ? object.description : "description: #{ lib } kicks the ass" - license = object.respond_to?(:license) ? object.license : "Ruby" - - if This.extensions.nil? - This.extensions = [] - extensions = This.extensions - %w( Makefile configure extconf.rb ).each do |ext| - extensions << ext if File.exists?(ext) - end - end - extensions = [extensions].flatten.compact - - if This.dependencies.nil? - dependencies = [] - else - case This.dependencies - when Hash - dependencies = This.dependencies.values - when Array - dependencies = This.dependencies - end - end - - template = - if test(?e, 'gemspec.erb') - Template{ IO.read('gemspec.erb') } - else - Template { - <<-__ - ## <%= lib %>.gemspec - # - - Gem::Specification::new do |spec| - spec.name = <%= lib.inspect %> - spec.version = <%= version.inspect %> - spec.platform = Gem::Platform::RUBY - spec.summary = <%= lib.inspect %> - spec.description = <%= description.inspect %> - spec.license = <%= license.inspect %> - - spec.files =\n<%= files.sort.pretty_inspect %> - spec.executables = <%= executables.inspect %> - - spec.require_path = "lib" - - spec.test_files = <%= test_files.inspect %> - - <% dependencies.each do |lib_version| %> - spec.add_dependency(*<%= Array(lib_version).flatten.inspect %>) - <% end %> - - spec.extensions.push(*<%= extensions.inspect %>) - - spec.rubyforge_project = <%= This.rubyforge_project.inspect %> - spec.author = <%= This.author.inspect %> - spec.email = <%= This.email.inspect %> - spec.homepage = <%= This.homepage.inspect %> - end - __ - } - end - - Fu.mkdir_p(This.pkgdir) - gemspec = "#{ lib }.gemspec" - open(gemspec, "w"){|fd| fd.puts(template)} - This.gemspec = gemspec -end - -task :gem => [:clean, :gemspec] do - Fu.mkdir_p(This.pkgdir) - before = Dir['*.gem'] - cmd = "gem build #{ This.gemspec }" - `#{ cmd }` - after = Dir['*.gem'] - gem = ((after - before).first || after.first) or abort('no gem!') - Fu.mv(gem, This.pkgdir) - This.gem = File.join(This.pkgdir, File.basename(gem)) -end - -task :readme do - samples = '' - prompt = '~ > ' - lib = This.lib - version = This.version - - Dir['sample*/*'].sort.each do |sample| - samples << "\n" << " <========< #{ sample } >========>" << "\n\n" - - cmd = "cat #{ sample }" - samples << Util.indent(prompt + cmd, 2) << "\n\n" - samples << Util.indent(`#{ cmd }`, 4) << "\n" - - cmd = "ruby #{ sample }" - samples << Util.indent(prompt + cmd, 2) << "\n\n" - - cmd = "ruby -e'STDOUT.sync=true; exec %(ruby -I ./lib #{ sample })'" - samples << Util.indent(`#{ cmd } 2>&1`, 4) << "\n" - end - - template = - if test(?e, 'README.erb') - Template{ IO.read('README.erb') } - else - Template { - <<-__ - NAME - #{ lib } - - DESCRIPTION - - INSTALL - gem install #{ lib } - - SAMPLES - #{ samples } - __ - } - end - - open("README", "w"){|fd| fd.puts template} -end - - -task :clean do - Dir[File.join(This.pkgdir, '**/**')].each{|entry| Fu.rm_rf(entry)} -end - - -task :release => [:clean, :gemspec, :gem] do - gems = Dir[File.join(This.pkgdir, '*.gem')].flatten - raise "which one? : #{ gems.inspect }" if gems.size > 1 - raise "no gems?" if gems.size < 1 - - cmd = "gem push #{ This.gem }" - puts cmd - puts - system(cmd) - abort("cmd(#{ cmd }) failed with (#{ $?.inspect })") unless $?.exitstatus.zero? - - cmd = "rubyforge login && rubyforge add_release #{ This.rubyforge_project } #{ This.lib } #{ This.version } #{ This.gem }" - puts cmd - puts - system(cmd) - abort("cmd(#{ cmd }) failed with (#{ $?.inspect })") unless $?.exitstatus.zero? -end - - - - - -BEGIN { -# support for this rakefile -# - $VERBOSE = nil - - require 'ostruct' - require 'erb' - require 'fileutils' - require 'rbconfig' - require 'pp' - -# fu shortcut -# - Fu = FileUtils - -# cache a bunch of stuff about this rakefile/environment -# - This = OpenStruct.new - - This.file = File.expand_path(__FILE__) - This.dir = File.dirname(This.file) - This.pkgdir = File.join(This.dir, 'pkg') - -# grok lib -# - lib = ENV['LIB'] - unless lib - lib = File.basename(Dir.pwd).sub(/[-].*$/, '') - end - This.lib = lib - -# grok version -# - version = ENV['VERSION'] - unless version - require "./lib/#{ This.lib }" - This.name = lib.capitalize - This.object = eval(This.name) - version = This.object.send(:version) - end - This.version = version - -# see if dependencies are export by the module -# - if This.object.respond_to?(:dependencies) - This.dependencies = This.object.dependencies - end - -# we need to know the name of the lib an it's version -# - abort('no lib') unless This.lib - abort('no version') unless This.version - -# discover full path to this ruby executable -# - c = Config::CONFIG - bindir = c["bindir"] || c['BINDIR'] - ruby_install_name = c['ruby_install_name'] || c['RUBY_INSTALL_NAME'] || 'ruby' - ruby_ext = c['EXEEXT'] || '' - ruby = File.join(bindir, (ruby_install_name + ruby_ext)) - This.ruby = ruby - -# some utils -# - module Util - def indent(s, n = 2) - s = unindent(s) - ws = ' ' * n - s.gsub(%r/^/, ws) - end - - def unindent(s) - indent = nil - s.each_line do |line| - next if line =~ %r/^\s*$/ - indent = line[%r/^\s*/] and break - end - indent ? s.gsub(%r/^#{ indent }/, "") : s - end - extend self - end - -# template support -# - class Template - def initialize(&block) - @block = block - @template = block.call.to_s - end - def expand(b=nil) - ERB.new(Util.unindent(@template)).result((b||@block).binding) - end - alias_method 'to_s', 'expand' - end - def Template(*args, &block) Template.new(*args, &block) end - -# colored console output support -# - This.ansi = { - :clear => "\e[0m", - :reset => "\e[0m", - :erase_line => "\e[K", - :erase_char => "\e[P", - :bold => "\e[1m", - :dark => "\e[2m", - :underline => "\e[4m", - :underscore => "\e[4m", - :blink => "\e[5m", - :reverse => "\e[7m", - :concealed => "\e[8m", - :black => "\e[30m", - :red => "\e[31m", - :green => "\e[32m", - :yellow => "\e[33m", - :blue => "\e[34m", - :magenta => "\e[35m", - :cyan => "\e[36m", - :white => "\e[37m", - :on_black => "\e[40m", - :on_red => "\e[41m", - :on_green => "\e[42m", - :on_yellow => "\e[43m", - :on_blue => "\e[44m", - :on_magenta => "\e[45m", - :on_cyan => "\e[46m", - :on_white => "\e[47m" - } - def say(phrase, *args) - options = args.last.is_a?(Hash) ? args.pop : {} - options[:color] = args.shift.to_s.to_sym unless args.empty? - keys = options.keys - keys.each{|key| options[key.to_s.to_sym] = options.delete(key)} - - color = options[:color] - bold = options.has_key?(:bold) - - parts = [phrase] - parts.unshift(This.ansi[color]) if color - parts.unshift(This.ansi[:bold]) if bold - parts.push(This.ansi[:clear]) if parts.size > 1 - - method = options[:method] || :puts - - Kernel.send(method, parts.join) - end - -# always run out of the project dir -# - Dir.chdir(This.dir) -} diff --git a/bundle/ruby/3.2.0/gems/open4-1.3.4/samples/bg.rb b/bundle/ruby/3.2.0/gems/open4-1.3.4/samples/bg.rb deleted file mode 100644 index 1dcf3e88..00000000 --- a/bundle/ruby/3.2.0/gems/open4-1.3.4/samples/bg.rb +++ /dev/null @@ -1,21 +0,0 @@ -require 'yaml' -require 'open4' -include Open4 - -stdin = '42' -stdout = '' -stderr = '' - -t = bg 'ruby -e"sleep 4; puts ARGF.read"', 0=>stdin, 1=>stdout, 2=>stderr - -waiter = Thread.new{ y t.pid => t.exitstatus } # t.exitstatus is a blocking call! - -while((status = t.status)) - y "status" => status - sleep 1 -end - -waiter.join - -y "stdout" => stdout - diff --git a/bundle/ruby/3.2.0/gems/open4-1.3.4/samples/block.rb b/bundle/ruby/3.2.0/gems/open4-1.3.4/samples/block.rb deleted file mode 100644 index 320f5c3f..00000000 --- a/bundle/ruby/3.2.0/gems/open4-1.3.4/samples/block.rb +++ /dev/null @@ -1,19 +0,0 @@ -require 'open4' -# -# when using block form the child process is automatically waited using -# waitpid2 -# - -status = - Open4::popen4("sh") do |pid, stdin, stdout, stderr| - stdin.puts "echo 42.out" - stdin.puts "echo 42.err 1>&2" - stdin.close - - puts "pid : #{ pid }" - puts "stdout : #{ stdout.read.strip }" - puts "stderr : #{ stderr.read.strip }" - end - - puts "status : #{ status.inspect }" - puts "exitstatus : #{ status.exitstatus }" diff --git a/bundle/ruby/3.2.0/gems/open4-1.3.4/samples/exception.rb b/bundle/ruby/3.2.0/gems/open4-1.3.4/samples/exception.rb deleted file mode 100644 index 3294c02b..00000000 --- a/bundle/ruby/3.2.0/gems/open4-1.3.4/samples/exception.rb +++ /dev/null @@ -1,3 +0,0 @@ -require "open4" - -Open4::popen4 "noexist" diff --git a/bundle/ruby/3.2.0/gems/open4-1.3.4/samples/jesse-caldwell.rb b/bundle/ruby/3.2.0/gems/open4-1.3.4/samples/jesse-caldwell.rb deleted file mode 100644 index 6b292378..00000000 --- a/bundle/ruby/3.2.0/gems/open4-1.3.4/samples/jesse-caldwell.rb +++ /dev/null @@ -1,131 +0,0 @@ -#!/usr/bin/env ruby - -require 'open4' -require 'pp' - -# define a function we can call later. the function will take two -# arguments: -# command which we will run via open4 and be able to -# send stdin as well as collect the pid, stderr and stdout. -# input optional data string to send to command on stdin -# -# this returns a hash of the command's pid, stderr, stdout, and status. -def run_cmd(command, input = nil) - - # we will use open4 in block form, which means that the variables - # used inside the block will not be available once open4 has - # finished. as long as variables are declared outside of the - # block, they can be set inside the block and are available after - # the block has finished. - err = out = procid = status = verbose = nil - - # using a begin so we can use rescue later on. - begin - - # run our command with open4 in block form. - stat = Open4::popen4(command) do |pid, stdin, stdout, stderr| - - # the default behavior of ruby is to internally buffer I/O - # ports when they are opened. open4 may not detect that stderr - # and/or stdout has closed because ruby is helpfully buffering - # the pipe for us. if open4 hangs, try uncommenting the next - # two lines. - # stderr.sync = true - # stdout.sync = true - - # set procid to pid so we can see it outside of the block. - procid = pid - - # if you want to use stdin, talk to stdin here. i tried it - # with bc. generally i only need to capture output, not - # interact with commands i'm running. - stdin.puts input if input - - # stdin is opened write only. you'll raise an exception if - # you try to read anything from it. here you can try to read - # the first character from stdin. - # stdin.gets(1) - - # now close stdin. - stdin.close - - # make stderr and stdout available outside the block as well. - # removing the read will return pointers to objects rather - # than the data that the objects contain. - out = stdout.read - err = stderr.read - - # as stdin is write-only, stderr and stdout are read only. - # you'll raise an exception if you try to write to either. - # stderr.puts 'building appears to be on fire' - - # end of open4 block. pid, stdin, stdout and stderr are no - # longer accessible. - end - - # now outside of the open4 block, we can get the exit status - # of our command by calling stat.exitstatus. - status = stat.exitstatus - - # our function returns status from a command. however, if you - # tell the function to run a command that does not exist, ruby - # will raise an exception. we will trap that exception here, make - # up a non-zero exit status, convert the ruby error to a string, - # and populate err with it. - rescue Errno::ENOENT => stderr - status = 1 - err = stderr.to_s - - # handle null commands gracefully - rescue TypeError => stderr - status = 2 - err = 'Can\'t execute null command.' - - # done calling and/or rescuing open4. - end - - # uncomment to make function print output. - verbose = true - - # print the values if verbose is not nil. - print "\n============================================================" if verbose - print "\ncommand: #{ command }" if verbose - print "\ninput : \n\n#{ input }\n" if (verbose and input) - print "\npid : #{ procid }" if verbose - print "\nstatus : #{ status }" if verbose - print "\nstdout : #{ out }\n" if verbose - print "\nstderr : #{ err }\n" if verbose - print "============================================================\n" if verbose - - # now that (we think) we have handled everything, return a hash - # with the process id, standard error, standard output, and the - # exit status. - return { - :pid => procid, # integer - :stderr => err, # string - :stdout => out, # string - :status => status, # integer - } - - # return terminates function. code here will not run! - print 'this will never show up.' - -# end of run_cmd function. -end - -# this will raise an exception which our function will trap, -# complaining that the command does not exist. -cmd = run_cmd('/bin/does/not/exist') - -# something that will produce a fair amount of output. you do have -# an nmap source tree lying around, right? -cmd = run_cmd('cd nmap-5.51 ; ./configure') - -# bc, to illustrate using stdin. -cmd = run_cmd('bc', "2^16\nquit") - -# uncomment to see hash returned by run_cmd function. -# pp cmd - -# test function with null command -cmd = run_cmd(nil) diff --git a/bundle/ruby/3.2.0/gems/open4-1.3.4/samples/pfork4.rb b/bundle/ruby/3.2.0/gems/open4-1.3.4/samples/pfork4.rb deleted file mode 100644 index 84e81dd7..00000000 --- a/bundle/ruby/3.2.0/gems/open4-1.3.4/samples/pfork4.rb +++ /dev/null @@ -1,24 +0,0 @@ -require 'open4' - -echo = lambda do - $stdout.write $stdin.read - raise 'finish implementing me' -end - -org_message = "hello, world!" -got_message = nil -exception = nil - -begin - Open4.pfork4(echo) do |cid, stdin, stdout, stderr| - stdin.write org_message - stdin.close - got_message = stdout.read - end -rescue RuntimeError => e - exception = e.to_s -end - -puts "org_message: #{org_message}" -puts "got_message: #{got_message}" -puts "exception : #{exception}" diff --git a/bundle/ruby/3.2.0/gems/open4-1.3.4/samples/simple.rb b/bundle/ruby/3.2.0/gems/open4-1.3.4/samples/simple.rb deleted file mode 100644 index 7b44b835..00000000 --- a/bundle/ruby/3.2.0/gems/open4-1.3.4/samples/simple.rb +++ /dev/null @@ -1,15 +0,0 @@ -require "open4" - -pid, stdin, stdout, stderr = Open4::popen4 "sh" - -stdin.puts "echo 42.out" -stdin.puts "echo 42.err 1>&2" -stdin.close - -ignored, status = Process::waitpid2 pid - -puts "pid : #{ pid }" -puts "stdout : #{ stdout.read.strip }" -puts "stderr : #{ stderr.read.strip }" -puts "status : #{ status.inspect }" -puts "exitstatus : #{ status.exitstatus }" diff --git a/bundle/ruby/3.2.0/gems/open4-1.3.4/samples/spawn.rb b/bundle/ruby/3.2.0/gems/open4-1.3.4/samples/spawn.rb deleted file mode 100644 index de740168..00000000 --- a/bundle/ruby/3.2.0/gems/open4-1.3.4/samples/spawn.rb +++ /dev/null @@ -1,16 +0,0 @@ -require 'open4' -include Open4 - -cat = 'ruby -e" ARGF.each{|line| STDOUT << line} "' - -stdout, stderr = '', '' -status = spawn cat, 'stdin' => '42', 'stdout' => stdout, 'stderr' => stderr -p status -p stdout -p stderr - -stdout, stderr = '', '' -status = spawn cat, 0=>'42', 1=>stdout, 2=>stderr -p status -p stdout -p stderr diff --git a/bundle/ruby/3.2.0/gems/open4-1.3.4/samples/stdin_timeout.rb b/bundle/ruby/3.2.0/gems/open4-1.3.4/samples/stdin_timeout.rb deleted file mode 100644 index 8680bee2..00000000 --- a/bundle/ruby/3.2.0/gems/open4-1.3.4/samples/stdin_timeout.rb +++ /dev/null @@ -1,9 +0,0 @@ -require 'open4' - -producer = 'ruby -e" STDOUT.sync = true; loop{sleep(rand+rand) and puts 42} " 2>/dev/null' - -consumer = 'ruby -e" STDOUT.sync = true; STDIN.each{|line| puts line} "' - -open4(producer) do |pid, i, o, e| - open4.spawn consumer, 0=>o, 1=>STDOUT, :stdin_timeout => 1.4 -end diff --git a/bundle/ruby/3.2.0/gems/open4-1.3.4/samples/timeout.rb b/bundle/ruby/3.2.0/gems/open4-1.3.4/samples/timeout.rb deleted file mode 100644 index 8b68d1cb..00000000 --- a/bundle/ruby/3.2.0/gems/open4-1.3.4/samples/timeout.rb +++ /dev/null @@ -1,37 +0,0 @@ - -require 'open4' - -def show_failure - fork{ yield } - Process.wait - puts -end - -# -# command timeout -# - show_failure{ - open4.spawn 'sleep 42', 'timeout' => 1 - } - -# -# stdin timeout -# - show_failure{ - - producer = 'ruby -e" STDOUT.sync = true; loop{sleep(rand+rand) and puts 42} " 2>/dev/null' - - consumer = 'ruby -e" STDOUT.sync = true; STDIN.each{|line| puts line} "' - - open4(producer) do |pid, i, o, e| - open4.spawn consumer, 0=>o, 1=>STDOUT, :stdin_timeout => 1.4 - end - } - -# -# stdout timeout (stderr is similar) -# - - show_failure{ - open4.spawn 'ruby -e" sleep 2 and puts 42 "', 'stdout_timeout' => 1 - } diff --git a/bundle/ruby/3.2.0/gems/open4-1.3.4/test/lib/test_case.rb b/bundle/ruby/3.2.0/gems/open4-1.3.4/test/lib/test_case.rb deleted file mode 100644 index 915aa143..00000000 --- a/bundle/ruby/3.2.0/gems/open4-1.3.4/test/lib/test_case.rb +++ /dev/null @@ -1,23 +0,0 @@ -# coding: utf-8 - -require 'minitest/autorun' -require 'open4' -require 'rbconfig' - -module Open4 - class TestCase < MiniTest::Unit::TestCase - include Open4 - - # Custom exception class for tests so we don't shadow possible - # programming errors. - class MyError < RuntimeError; end - - def on_mri? - ::RbConfig::CONFIG['ruby_install_name'] == 'ruby' - end - - def wait_status(cid) - Process.waitpid2(cid).last.exitstatus - end - end -end diff --git a/bundle/ruby/3.2.0/gems/open4-1.3.4/test/pfork4_test.rb b/bundle/ruby/3.2.0/gems/open4-1.3.4/test/pfork4_test.rb deleted file mode 100644 index 6574b89a..00000000 --- a/bundle/ruby/3.2.0/gems/open4-1.3.4/test/pfork4_test.rb +++ /dev/null @@ -1,150 +0,0 @@ -require 'test_case' - -module Open4 - -class PFork4Test < TestCase - def test_fun_successful_return - fun = lambda { 'lucky me' } - cid, _ = pfork4 fun - assert_equal 0, wait_status(cid) - end - - def test_fun_force_exit - exit_code = 43 - fun = lambda { exit! exit_code } - cid, _ = pfork4 fun - assert_equal exit_code, wait_status(cid) - end - - def test_fun_normal_exit - exit_code = 43 - fun = lambda { exit exit_code } - cid, _ = pfork4 fun - assert_equal exit_code, wait_status(cid) - end - - def test_fun_does_not_propagate_exception_without_block - fun = lambda { raise MyError } - cid, _ = pfork4 fun - refute_equal 0, wait_status(cid) - end - - def test_fun_propagate_exception_with_block - fun = lambda { raise MyError } - assert_raises(MyError) { pfork4(fun) {} } - end - - def test_fun_propagate_exception_with_block_avoids_zombie_child_process - fun = lambda { raise MyError } - assert_raises(MyError) { pfork4(fun) {} } - assert_empty Process.waitall - end - - def test_call_block_upon_exception - fun = lambda { raise MyError } - block_called = false - assert_raises(MyError) { pfork4(fun) { block_called = true } } - assert_equal true, block_called - end - - def test_passes_child_pid_to_block - fun = lambda { $stdout.write Process.pid } - cid_in_block = nil - cid_in_fun = nil - pfork4(fun) do |cid, _, stdout, _| - cid_in_block = cid - cid_in_fun = stdout.read.to_i - end - assert_equal cid_in_fun, cid_in_block - end - - def test_io_pipes_without_block - via_msg = 'foo' - err_msg = 'bar' - fun = lambda do - $stdout.write $stdin.read - $stderr.write err_msg - end - out_actual, err_actual = nil, nil - cid, stdin, stdout, stderr = pfork4 fun - stdin.write via_msg - stdin.close - out_actual = stdout.read - err_actual = stderr.read - assert_equal via_msg, out_actual - assert_equal err_msg, err_actual - assert_equal 0, wait_status(cid) - end - - def test_io_pipes_with_block - via_msg = 'foo' - err_msg = 'bar' - fun = lambda do - $stdout.write $stdin.read - $stderr.write err_msg - end - out_actual, err_actual = nil, nil - status = pfork4(fun) do |_, stdin, stdout, stderr| - stdin.write via_msg - stdin.close - out_actual = stdout.read - err_actual = stderr.read - end - assert_equal via_msg, out_actual - assert_equal err_msg, err_actual - assert_equal 0, status.exitstatus - end - - def test_exec_in_fun - via_msg = 'foo' - fun = lambda { exec %{ruby -e "print '#{via_msg}'"} } - out_actual = nil - status = pfork4(fun) do |_, stdin, stdout, _| - stdin.close - out_actual = stdout.read - end - assert_equal via_msg, out_actual - assert_equal 0, status.exitstatus - end - - def test_io_pipes_and_then_exception_propagation_with_block - via_msg = 'foo' - err_msg = 'bar' - fun = lambda do - $stdout.write $stdin.read - $stderr.write err_msg - raise MyError - end - out_actual, err_actual = nil, nil - assert_raises(MyError) do - pfork4(fun) do |_, stdin, stdout, stderr| - stdin.write via_msg - stdin.close - out_actual = stdout.read - err_actual = stderr.read - end - end - assert_equal via_msg, out_actual - assert_equal err_msg, err_actual - end - - def test_blocked_on_io_read_and_exception_propagation_with_block - fun = lambda do - $stdin.read - raise MyError - end - out_actual, err_actual = nil, nil - assert_raises(MyError) do - pfork4(fun) do |_, stdin, stdout, stderr| - stdin.write 'foo' - stdin.close - out_actual = stdout.read - err_actual = stderr.read - end - end - assert_equal '', out_actual - assert_equal '', err_actual - end -end - -end diff --git a/bundle/ruby/3.2.0/gems/open4-1.3.4/test/popen4_test.rb b/bundle/ruby/3.2.0/gems/open4-1.3.4/test/popen4_test.rb deleted file mode 100644 index 550fe53c..00000000 --- a/bundle/ruby/3.2.0/gems/open4-1.3.4/test/popen4_test.rb +++ /dev/null @@ -1,82 +0,0 @@ -require 'test_case' - -module Open4 - -class POpen4Test < TestCase - UNKNOWN_CMD = 'asdfadsfjlkkk' - UNKNOWN_CMD_ERRORS = [Errno::ENOENT, Errno::EINVAL] - - def test_unknown_command_propagates_exception - err = assert_raises(*UNKNOWN_CMD_ERRORS) { popen4 UNKNOWN_CMD } - assert_match(/#{UNKNOWN_CMD}/, err.to_s) if on_mri? - end - - def test_exception_propagation_avoids_zombie_child_process - assert_raises(*UNKNOWN_CMD_ERRORS) { popen4 UNKNOWN_CMD } - assert_empty Process.waitall - end - - def test_exit_failure - code = 43 - cid, _ = popen4 %{ruby -e "exit #{43}"} - assert_equal code, wait_status(cid) - end - - def test_exit_success - cid, _ = popen4 %{ruby -e "exit"} - assert_equal 0, wait_status(cid) - end - - def test_passes_child_pid_to_block - cmd = %{ruby -e "STDOUT.print Process.pid"} - cid_in_block = nil - cid_in_fun = nil - popen4(cmd) do |cid, _, stdout, _| - cid_in_block = cid - cid_in_fun = stdout.read.to_i - end - assert_equal cid_in_fun, cid_in_block - end - - def test_io_pipes_without_block - via_msg = 'foo' - err_msg = 'bar' - cmd = <<-END -ruby -e " - STDOUT.write STDIN.read - STDERR.write '#{err_msg}' -" - END - cid, stdin, stdout, stderr = popen4 cmd - stdin.write via_msg - stdin.close - out_actual = stdout.read - err_actual = stderr.read - assert_equal via_msg, out_actual - assert_equal err_msg, err_actual - assert_equal 0, wait_status(cid) - end - - def test_io_pipes_with_block - via_msg = 'foo' - err_msg = 'bar' - out_actual, err_actual = nil - cmd = <<-END -ruby -e " - STDOUT.write STDIN.read - STDERR.write '#{err_msg}' -" - END - status = popen4(cmd) do |_, stdin, stdout, stderr| - stdin.write via_msg - stdin.close - out_actual = stdout.read - err_actual = stderr.read - end - assert_equal via_msg, out_actual - assert_equal err_msg, err_actual - assert_equal 0, status.exitstatus - end -end - -end diff --git a/bundle/ruby/3.2.0/gems/open4-1.3.4/test/popen4ext_test.rb b/bundle/ruby/3.2.0/gems/open4-1.3.4/test/popen4ext_test.rb deleted file mode 100644 index 5d5d0d57..00000000 --- a/bundle/ruby/3.2.0/gems/open4-1.3.4/test/popen4ext_test.rb +++ /dev/null @@ -1,89 +0,0 @@ -require 'test_case' -require 'socket' - -module Open4 - -class POpen4Test < TestCase - UNKNOWN_CMD = 'asdfadsfjlkkk' - UNKNOWN_CMD_ERRORS = [Errno::ENOENT, Errno::EINVAL] - - def test_unknown_command_propagates_exception - err = assert_raises(*UNKNOWN_CMD_ERRORS) { popen4ext true, UNKNOWN_CMD } - assert_match(/#{UNKNOWN_CMD}/, err.to_s) if on_mri? - end - - def test_exception_propagation_avoids_zombie_child_process - assert_raises(*UNKNOWN_CMD_ERRORS) { popen4ext true, UNKNOWN_CMD } - assert_empty Process.waitall - end - - def test_exit_failure - code = 43 - cid, _ = popen4ext true, %{ruby -e "exit #{43}"} - assert_equal code, wait_status(cid) - end - - def test_exit_success - cid, _ = popen4ext true, %{ruby -e "exit"} - assert_equal 0, wait_status(cid) - end - - def test_passes_child_pid_to_block - cmd = %{ruby -e "STDOUT.print Process.pid"} - cid_in_block = nil - cid_in_fun = nil - popen4ext(true, cmd) do |cid, _, stdout, _| - cid_in_block = cid - cid_in_fun = stdout.read.to_i - end - assert_equal cid_in_fun, cid_in_block - end - - def test_io_pipes_without_block - via_msg = 'foo' - err_msg = 'bar' - cmd = <<-END -ruby -e " - STDOUT.write STDIN.read - STDERR.write '#{err_msg}' -" - END - cid, stdin, stdout, stderr = popen4ext true, cmd - stdin.write via_msg - stdin.close - out_actual = stdout.read - err_actual = stderr.read - assert_equal via_msg, out_actual - assert_equal err_msg, err_actual - assert_equal 0, wait_status(cid) - end - - def test_io_pipes_with_block - via_msg = 'foo' - err_msg = 'bar' - out_actual, err_actual = nil - cmd = <<-END -ruby -e " - STDOUT.write STDIN.read - STDERR.write '#{err_msg}' -" - END - status = popen4ext(true, cmd) do |_, stdin, stdout, stderr| - stdin.write via_msg - stdin.close - out_actual = stdout.read - err_actual = stderr.read - end - assert_equal via_msg, out_actual - assert_equal err_msg, err_actual - assert_equal 0, status.exitstatus - end - - def test_close_ignores_errors - TCPSocket.new('localhost', 59367).close rescue nil - cid, _ = popen4ext true, %{ruby -e "exit"} - assert_equal 0, wait_status(cid) - end -end - -end diff --git a/bundle/ruby/3.2.0/gems/open4-1.3.4/white_box/leak.rb b/bundle/ruby/3.2.0/gems/open4-1.3.4/white_box/leak.rb deleted file mode 100644 index a724c7a6..00000000 --- a/bundle/ruby/3.2.0/gems/open4-1.3.4/white_box/leak.rb +++ /dev/null @@ -1,17 +0,0 @@ -require 'open4' - -pid = Process.pid -fds = lambda{|pid| Dir["/proc/#{ pid }/fd/*"]} - -loop do - before = fds[pid] - Open4.popen4 'ruby -e"buf = STDIN.read; STDOUT.puts buf; STDERR.puts buf "' do |p,i,o,e| - i.puts 42 - i.close_write - o.read - e.read - end - after = fds[pid] - p(after - before) - puts -end diff --git a/bundle/ruby/3.2.0/gems/parallel-1.24.0/MIT-LICENSE.txt b/bundle/ruby/3.2.0/gems/parallel-1.24.0/MIT-LICENSE.txt deleted file mode 100644 index a8889b2a..00000000 --- a/bundle/ruby/3.2.0/gems/parallel-1.24.0/MIT-LICENSE.txt +++ /dev/null @@ -1,20 +0,0 @@ -Copyright (C) 2013 Michael Grosser - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/bundle/ruby/3.2.0/gems/parallel-1.24.0/lib/parallel.rb b/bundle/ruby/3.2.0/gems/parallel-1.24.0/lib/parallel.rb deleted file mode 100644 index ee83a07c..00000000 --- a/bundle/ruby/3.2.0/gems/parallel-1.24.0/lib/parallel.rb +++ /dev/null @@ -1,676 +0,0 @@ -# frozen_string_literal: true -require 'rbconfig' -require 'parallel/version' - -module Parallel - Stop = Object.new.freeze - - class DeadWorker < StandardError - end - - class Break < StandardError - attr_reader :value - - def initialize(value = nil) - super() - @value = value - end - end - - class Kill < Break - end - - class UndumpableException < StandardError - attr_reader :backtrace - - def initialize(original) - super "#{original.class}: #{original.message}" - @backtrace = original.backtrace - end - end - - class ExceptionWrapper - attr_reader :exception - - def initialize(exception) - # Remove the bindings stack added by the better_errors gem, - # because it cannot be marshalled - if exception.instance_variable_defined? :@__better_errors_bindings_stack - exception.send :remove_instance_variable, :@__better_errors_bindings_stack - end - - @exception = - begin - Marshal.dump(exception) && exception - rescue StandardError - UndumpableException.new(exception) - end - end - end - - class Worker - attr_reader :pid, :read, :write - attr_accessor :thread - - def initialize(read, write, pid) - @read = read - @write = write - @pid = pid - end - - def stop - close_pipes - wait # if it goes zombie, rather wait here to be able to debug - end - - # might be passed to started_processes and simultaneously closed by another thread - # when running in isolation mode, so we have to check if it is closed before closing - def close_pipes - read.close unless read.closed? - write.close unless write.closed? - end - - def work(data) - begin - Marshal.dump(data, write) - rescue Errno::EPIPE - raise DeadWorker - end - - result = begin - Marshal.load(read) - rescue EOFError - raise DeadWorker - end - raise result.exception if result.is_a?(ExceptionWrapper) - result - end - - private - - def wait - Process.wait(pid) - rescue Interrupt - # process died - end - end - - class JobFactory - def initialize(source, mutex) - @lambda = (source.respond_to?(:call) && source) || queue_wrapper(source) - @source = source.to_a unless @lambda # turn Range and other Enumerable-s into an Array - @mutex = mutex - @index = -1 - @stopped = false - end - - def next - if producer? - # - index and item stay in sync - # - do not call lambda after it has returned Stop - item, index = @mutex.synchronize do - return if @stopped - item = @lambda.call - @stopped = (item == Stop) - return if @stopped - [item, @index += 1] - end - else - index = @mutex.synchronize { @index += 1 } - return if index >= size - item = @source[index] - end - [item, index] - end - - def size - if producer? - Float::INFINITY - else - @source.size - end - end - - # generate item that is sent to workers - # just index is faster + less likely to blow up with unserializable errors - def pack(item, index) - producer? ? [item, index] : index - end - - # unpack item that is sent to workers - def unpack(data) - producer? ? data : [@source[data], data] - end - - private - - def producer? - @lambda - end - - def queue_wrapper(array) - array.respond_to?(:num_waiting) && array.respond_to?(:pop) && -> { array.pop(false) } - end - end - - class UserInterruptHandler - INTERRUPT_SIGNAL = :SIGINT - - class << self - # kill all these pids or threads if user presses Ctrl+c - def kill_on_ctrl_c(pids, options) - @to_be_killed ||= [] - old_interrupt = nil - signal = options.fetch(:interrupt_signal, INTERRUPT_SIGNAL) - - if @to_be_killed.empty? - old_interrupt = trap_interrupt(signal) do - warn 'Parallel execution interrupted, exiting ...' - @to_be_killed.flatten.each { |pid| kill(pid) } - end - end - - @to_be_killed << pids - - yield - ensure - @to_be_killed.pop # do not kill pids that could be used for new processes - restore_interrupt(old_interrupt, signal) if @to_be_killed.empty? - end - - def kill(thing) - Process.kill(:KILL, thing) - rescue Errno::ESRCH - # some linux systems already automatically killed the children at this point - # so we just ignore them not being there - end - - private - - def trap_interrupt(signal) - old = Signal.trap signal, 'IGNORE' - - Signal.trap signal do - yield - if !old || old == "DEFAULT" - raise Interrupt - else - old.call - end - end - - old - end - - def restore_interrupt(old, signal) - Signal.trap signal, old - end - end - end - - class << self - def in_threads(options = { count: 2 }) - threads = [] - count, = extract_count_from_options(options) - - Thread.handle_interrupt(Exception => :never) do - Thread.handle_interrupt(Exception => :immediate) do - count.times do |i| - threads << Thread.new { yield(i) } - end - threads.map(&:value) - end - ensure - threads.each(&:kill) - end - end - - def in_processes(options = {}, &block) - count, options = extract_count_from_options(options) - count ||= processor_count - map(0...count, options.merge(in_processes: count), &block) - end - - def each(array, options = {}, &block) - map(array, options.merge(preserve_results: false), &block) - end - - def any?(*args, &block) - raise "You must provide a block when calling #any?" if block.nil? - !each(*args) { |*a| raise Kill if block.call(*a) } - end - - def all?(*args, &block) - raise "You must provide a block when calling #all?" if block.nil? - !!each(*args) { |*a| raise Kill unless block.call(*a) } - end - - def each_with_index(array, options = {}, &block) - each(array, options.merge(with_index: true), &block) - end - - def map(source, options = {}, &block) - options = options.dup - options[:mutex] = Mutex.new - - if options[:in_processes] && options[:in_threads] - raise ArgumentError, "Please specify only one of `in_processes` or `in_threads`." - elsif RUBY_PLATFORM =~ (/java/) && !(options[:in_processes]) - method = :in_threads - size = options[method] || processor_count - elsif options[:in_threads] - method = :in_threads - size = options[method] - elsif options[:in_ractors] - method = :in_ractors - size = options[method] - else - method = :in_processes - if Process.respond_to?(:fork) - size = options[method] || processor_count - else - warn "Process.fork is not supported by this Ruby" - size = 0 - end - end - - job_factory = JobFactory.new(source, options[:mutex]) - size = [job_factory.size, size].min - - options[:return_results] = (options[:preserve_results] != false || !!options[:finish]) - add_progress_bar!(job_factory, options) - - result = - if size == 0 - work_direct(job_factory, options, &block) - elsif method == :in_threads - work_in_threads(job_factory, options.merge(count: size), &block) - elsif method == :in_ractors - work_in_ractors(job_factory, options.merge(count: size), &block) - else - work_in_processes(job_factory, options.merge(count: size), &block) - end - - return result.value if result.is_a?(Break) - raise result if result.is_a?(Exception) - options[:return_results] ? result : source - end - - def map_with_index(array, options = {}, &block) - map(array, options.merge(with_index: true), &block) - end - - def flat_map(*args, &block) - map(*args, &block).flatten(1) - end - - def filter_map(*args, &block) - map(*args, &block).compact - end - - # Number of physical processor cores on the current system. - def physical_processor_count - @physical_processor_count ||= begin - ppc = - case RbConfig::CONFIG["target_os"] - when /darwin[12]/ - IO.popen("/usr/sbin/sysctl -n hw.physicalcpu").read.to_i - when /linux/ - cores = {} # unique physical ID / core ID combinations - phy = 0 - File.read("/proc/cpuinfo").scan(/^physical id.*|^core id.*/) do |ln| - if ln.start_with?("physical") - phy = ln[/\d+/] - elsif ln.start_with?("core") - cid = "#{phy}:#{ln[/\d+/]}" - cores[cid] = true unless cores[cid] - end - end - cores.count - when /mswin|mingw/ - require 'win32ole' - result_set = WIN32OLE.connect("winmgmts://").ExecQuery( - "select NumberOfCores from Win32_Processor" - ) - result_set.to_enum.collect(&:NumberOfCores).reduce(:+) - else - processor_count - end - # fall back to logical count if physical info is invalid - ppc > 0 ? ppc : processor_count - end - end - - # Number of processors seen by the OS, used for process scheduling - def processor_count - require 'etc' - @processor_count ||= Integer(ENV['PARALLEL_PROCESSOR_COUNT'] || Etc.nprocessors) - end - - def worker_number - Thread.current[:parallel_worker_number] - end - - # TODO: this does not work when doing threads in forks, so should remove and yield the number instead if needed - def worker_number=(worker_num) - Thread.current[:parallel_worker_number] = worker_num - end - - private - - def add_progress_bar!(job_factory, options) - if progress_options = options[:progress] - raise "Progressbar can only be used with array like items" if job_factory.size == Float::INFINITY - require 'ruby-progressbar' - - if progress_options == true - progress_options = { title: "Progress" } - elsif progress_options.respond_to? :to_str - progress_options = { title: progress_options.to_str } - end - - progress_options = { - total: job_factory.size, - format: '%t |%E | %B | %a' - }.merge(progress_options) - - progress = ProgressBar.create(progress_options) - old_finish = options[:finish] - options[:finish] = lambda do |item, i, result| - old_finish.call(item, i, result) if old_finish - progress.increment - end - end - end - - def work_direct(job_factory, options, &block) - self.worker_number = 0 - results = [] - exception = nil - begin - while set = job_factory.next - item, index = set - results << with_instrumentation(item, index, options) do - call_with_index(item, index, options, &block) - end - end - rescue StandardError - exception = $! - end - exception || results - ensure - self.worker_number = nil - end - - def work_in_threads(job_factory, options, &block) - raise "interrupt_signal is no longer supported for threads" if options[:interrupt_signal] - results = [] - results_mutex = Mutex.new # arrays are not thread-safe on jRuby - exception = nil - - in_threads(options) do |worker_num| - self.worker_number = worker_num - # as long as there are more jobs, work on one of them - while !exception && set = job_factory.next - begin - item, index = set - result = with_instrumentation item, index, options do - call_with_index(item, index, options, &block) - end - results_mutex.synchronize { results[index] = result } - rescue StandardError - exception = $! - end - end - end - - exception || results - end - - def work_in_ractors(job_factory, options) - exception = nil - results = [] - results_mutex = Mutex.new # arrays are not thread-safe on jRuby - - callback = options[:ractor] - if block_given? || !callback - raise ArgumentError, "pass the code you want to execute as `ractor: [ClassName, :method_name]`" - end - - # build - ractors = Array.new(options.fetch(:count)) do - Ractor.new do - loop do - got = receive - (klass, method_name), item, index = got - break if index == :break - begin - Ractor.yield [nil, klass.send(method_name, item), item, index] - rescue StandardError => e - Ractor.yield [e, nil, item, index] - end - end - end - end - - # start - ractors.dup.each do |ractor| - if set = job_factory.next - item, index = set - instrument_start item, index, options - ractor.send [callback, item, index] - else - ractor.send([[nil, nil], nil, :break]) # stop the ractor - ractors.delete ractor - end - end - - # replace with new items - while set = job_factory.next - item_next, index_next = set - done, (exception, result, item, index) = Ractor.select(*ractors) - if exception - ractors.delete done - break - end - instrument_finish item, index, result, options - results_mutex.synchronize { results[index] = (options[:preserve_results] == false ? nil : result) } - - instrument_start item_next, index_next, options - done.send([callback, item_next, index_next]) - end - - # finish - ractors.each do |ractor| - (new_exception, result, item, index) = ractor.take - exception ||= new_exception - next if new_exception - instrument_finish item, index, result, options - results_mutex.synchronize { results[index] = (options[:preserve_results] == false ? nil : result) } - ractor.send([[nil, nil], nil, :break]) # stop the ractor - end - - exception || results - end - - def work_in_processes(job_factory, options, &blk) - workers = create_workers(job_factory, options, &blk) - results = [] - results_mutex = Mutex.new # arrays are not thread-safe - exception = nil - - UserInterruptHandler.kill_on_ctrl_c(workers.map(&:pid), options) do - in_threads(options) do |i| - worker = workers[i] - worker.thread = Thread.current - worked = false - - begin - loop do - break if exception - item, index = job_factory.next - break unless index - - if options[:isolation] - worker = replace_worker(job_factory, workers, i, options, blk) if worked - worked = true - worker.thread = Thread.current - end - - begin - result = with_instrumentation item, index, options do - worker.work(job_factory.pack(item, index)) - end - results_mutex.synchronize { results[index] = result } # arrays are not threads safe on jRuby - rescue StandardError => e - exception = e - if exception.is_a?(Kill) - (workers - [worker]).each do |w| - w.thread&.kill - UserInterruptHandler.kill(w.pid) - end - end - end - end - ensure - worker.stop - end - end - end - - exception || results - end - - def replace_worker(job_factory, workers, index, options, blk) - options[:mutex].synchronize do - # old worker is no longer used ... stop it - worker = workers[index] - worker.stop - - # create a new replacement worker - running = workers - [worker] - workers[index] = worker(job_factory, options.merge(started_workers: running, worker_number: index), &blk) - end - end - - def create_workers(job_factory, options, &block) - workers = [] - Array.new(options[:count]).each_with_index do |_, i| - workers << worker(job_factory, options.merge(started_workers: workers, worker_number: i), &block) - end - workers - end - - def worker(job_factory, options, &block) - child_read, parent_write = IO.pipe - parent_read, child_write = IO.pipe - - pid = Process.fork do - self.worker_number = options[:worker_number] - - begin - options.delete(:started_workers).each(&:close_pipes) - - parent_write.close - parent_read.close - - process_incoming_jobs(child_read, child_write, job_factory, options, &block) - ensure - child_read.close - child_write.close - end - end - - child_read.close - child_write.close - - Worker.new(parent_read, parent_write, pid) - end - - def process_incoming_jobs(read, write, job_factory, options, &block) - until read.eof? - data = Marshal.load(read) - item, index = job_factory.unpack(data) - - result = - begin - call_with_index(item, index, options, &block) - # https://github.com/rspec/rspec-support/blob/673133cdd13b17077b3d88ece8d7380821f8d7dc/lib/rspec/support.rb#L132-L140 - rescue NoMemoryError, SignalException, Interrupt, SystemExit # rubocop:disable Lint/ShadowedException - raise $! - rescue Exception # # rubocop:disable Lint/RescueException - ExceptionWrapper.new($!) - end - - begin - Marshal.dump(result, write) - rescue Errno::EPIPE - return # parent thread already dead - end - end - end - - # options is either a Integer or a Hash with :count - def extract_count_from_options(options) - if options.is_a?(Hash) - count = options[:count] - else - count = options - options = {} - end - [count, options] - end - - def call_with_index(item, index, options, &block) - args = [item] - args << index if options[:with_index] - results = block.call(*args) - if options[:return_results] - results - else - nil # avoid GC overhead of passing large results around - end - end - - def with_instrumentation(item, index, options) - instrument_start(item, index, options) - result = yield - instrument_finish(item, index, result, options) - result unless options[:preserve_results] == false - end - - def instrument_finish(item, index, result, options) - return unless (on_finish = options[:finish]) - return instrument_finish_in_order(item, index, result, options) if options[:finish_in_order] - options[:mutex].synchronize { on_finish.call(item, index, result) } - end - - # yield results in the order of the input items - # needs to use `options` to store state between executions - # needs to use `done` index since a nil result would also be valid - def instrument_finish_in_order(item, index, result, options) - options[:mutex].synchronize do - # initialize our state - options[:finish_done] ||= [] - options[:finish_expecting] ||= 0 # we wait for item at index 0 - - # store current result - options[:finish_done][index] = [item, result] - - # yield all results that are now in order - break unless index == options[:finish_expecting] - index.upto(options[:finish_done].size).each do |i| - break unless (done = options[:finish_done][i]) - options[:finish_done][i] = nil # allow GC to free this item and result - options[:finish].call(done[0], i, done[1]) - options[:finish_expecting] += 1 - end - end - end - - def instrument_start(item, index, options) - return unless on_start = options[:start] - options[:mutex].synchronize { on_start.call(item, index) } - end - end -end diff --git a/bundle/ruby/3.2.0/gems/parallel-1.24.0/lib/parallel/version.rb b/bundle/ruby/3.2.0/gems/parallel-1.24.0/lib/parallel/version.rb deleted file mode 100644 index 885742b0..00000000 --- a/bundle/ruby/3.2.0/gems/parallel-1.24.0/lib/parallel/version.rb +++ /dev/null @@ -1,4 +0,0 @@ -# frozen_string_literal: true -module Parallel - VERSION = Version = '1.24.0' # rubocop:disable Naming/ConstantName -end diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/LICENSE.txt b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/LICENSE.txt deleted file mode 100644 index 971310e3..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/LICENSE.txt +++ /dev/null @@ -1,25 +0,0 @@ -Copyright (c) 2013-2016 whitequark - -Parts of the source are derived from ruby_parser: -Copyright (c) Ryan Davis, seattle.rb - -MIT License - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/bin/ruby-parse b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/bin/ruby-parse deleted file mode 100755 index e5d30f84..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/bin/ruby-parse +++ /dev/null @@ -1,7 +0,0 @@ -#! /usr/bin/env ruby -# frozen_string_literal: true - -$LOAD_PATH.unshift(File.expand_path('../../lib', __FILE__)) -require 'parser/runner/ruby_parse' - -Parser::Runner::RubyParse.go(ARGV) diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/bin/ruby-rewrite b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/bin/ruby-rewrite deleted file mode 100755 index 10f7d631..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/bin/ruby-rewrite +++ /dev/null @@ -1,7 +0,0 @@ -#! /usr/bin/env ruby -# frozen_string_literal: true - -$LOAD_PATH.unshift(File.expand_path('../../lib', __FILE__)) -require 'parser/runner/ruby_rewrite' - -Parser::Runner::RubyRewrite.go(ARGV) diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/gauntlet_parser.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/gauntlet_parser.rb deleted file mode 100644 index 864fe5b0..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/gauntlet_parser.rb +++ /dev/null @@ -1,123 +0,0 @@ -# frozen_string_literal: true - -require 'gauntlet' -require 'parser/all' -require 'shellwords' - -class ParserGauntlet < Gauntlet - RUBY20 = 'ruby' - RUBY19 = 'ruby1.9.1' - RUBY18 = '/opt/rubies/ruby-1.8.7-p370/bin/ruby' - - def try(parser, ruby, file, show_ok: false) - try_ruby = lambda do |e| - Process.spawn(%{#{ruby} -c #{Shellwords.escape file}}, - :err => '/dev/null', :out => '/dev/null') - _, status = Process.wait2 - - if status.success? - # Bug in Parser. - puts "Parser bug." - @result[file] = { parser.to_s => "#{e.class}: #{e.to_s}" } - else - # No, this file is not Ruby. - yield if block_given? - end - end - - begin - parser.parse_file(file) - - rescue Parser::SyntaxError => e - if e.diagnostic.location.resize(2).is?('<%') - puts "ERb." - return - end - - try_ruby.call(e) - - rescue ArgumentError, RegexpError, - Encoding::UndefinedConversionError => e - puts "#{file}: #{e.class}: #{e.to_s}" - - try_ruby.call(e) - - rescue Interrupt - raise - - rescue Exception => e - puts "Parser bug: #{file} #{e.class}: #{e.to_s}" - @result[file] = { parser.to_s => "#{e.class}: #{e.to_s}" } - - else - puts "Ok." if show_ok - end - end - - def parse(name) - puts "GEM: #{name}" - - @result = {} - - if ENV.include?('FAST') - total_size = Dir["**/*.rb"].map(&File.method(:size)).reduce(:+) - if total_size > 300_000 - puts "Skip." - return - end - end - - Dir["**/*.rb"].each do |file| - next if File.directory? file - - try(Parser::Ruby20, RUBY20, file) do - puts "Trying 1.9:" - try(Parser::Ruby19, RUBY19, file, show_ok: true) do - puts "Trying 1.8:" - try(Parser::Ruby18, RUBY18, file, show_ok: true) do - puts "Invalid syntax." - end - end - end - end - - @result - end - - def run(name) - data[name] = parse(name) - self.dirty = true - end - - def should_skip?(name) - data[name] == {} - end - - def load_yaml(*) - data = super - @was_errors = data.count { |_name, errs| errs != {} } - - data - end - - def shutdown - super - - errors = data.count { |_name, errs| errs != {} } - total = data.count - percent = "%.5f" % [100 - errors.to_f / total * 100] - puts "!!! was: #{@was_errors} now: #{errors} total: #{total} frac: #{percent}%" - end -end - -filter = ARGV.shift -filter = Regexp.new filter if filter - -gauntlet = ParserGauntlet.new - -if ENV.include? 'UPDATE' - gauntlet.source_index - gauntlet.update_gem_tarballs -end - -gauntlet.run_the_gauntlet filter diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser.rb deleted file mode 100644 index 043941bf..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser.rb +++ /dev/null @@ -1,90 +0,0 @@ -# frozen_string_literal: true - -if RUBY_VERSION =~ /^1\.[89]\./ - require 'parser/version' - raise LoadError, <<-UNSUPPORTED_VERSION_MSG -parser v#{Parser::VERSION} cannot run on Ruby #{RUBY_VERSION}. -Please upgrade to Ruby 2.0.0 or higher, or use an older version of the parser gem. - UNSUPPORTED_VERSION_MSG -end - -require 'set' -require 'racc/parser' - -require 'ast' - -## -# @api public -# -module Parser - require 'parser/version' - require 'parser/messages' - require 'parser/deprecation' - - module AST - require 'parser/ast/node' - require 'parser/ast/processor' - require 'parser/meta' - end - - module Source - require 'parser/source/buffer' - require 'parser/source/range' - - require 'parser/source/comment' - require 'parser/source/comment/associator' - - require 'parser/source/rewriter' - require 'parser/source/rewriter/action' - require 'parser/source/tree_rewriter' - require 'parser/source/tree_rewriter/action' - - require 'parser/source/map' - require 'parser/source/map/operator' - require 'parser/source/map/collection' - require 'parser/source/map/constant' - require 'parser/source/map/variable' - require 'parser/source/map/keyword' - require 'parser/source/map/definition' - require 'parser/source/map/method_definition' - require 'parser/source/map/send' - require 'parser/source/map/index' - require 'parser/source/map/condition' - require 'parser/source/map/ternary' - require 'parser/source/map/for' - require 'parser/source/map/rescue_body' - require 'parser/source/map/heredoc' - require 'parser/source/map/objc_kwarg' - end - - require 'parser/syntax_error' - require 'parser/clobbering_error' - require 'parser/diagnostic' - require 'parser/diagnostic/engine' - - require 'parser/static_environment' - - if RUBY_ENGINE == 'truffleruby' - require 'parser/lexer-F0' - else - require 'parser/lexer-F1' - end - require 'parser/lexer-strings' - require 'parser/lexer/literal' - require 'parser/lexer/stack_state' - require 'parser/lexer/dedenter' - - module Builders - require 'parser/builders/default' - end - - require 'parser/context' - require 'parser/max_numparam_stack' - require 'parser/current_arg_stack' - require 'parser/variables_stack' - - require 'parser/base' - - require 'parser/rewriter' - require 'parser/tree_rewriter' -end diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/all.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/all.rb deleted file mode 100644 index cc3fdb73..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/all.rb +++ /dev/null @@ -1,17 +0,0 @@ -# frozen_string_literal: true - -require 'parser/ruby18' -require 'parser/ruby19' -require 'parser/ruby20' -require 'parser/ruby21' -require 'parser/ruby22' -require 'parser/ruby23' -require 'parser/ruby24' -require 'parser/ruby25' -require 'parser/ruby26' -require 'parser/ruby27' -require 'parser/ruby30' -require 'parser/ruby31' -require 'parser/ruby32' -require 'parser/ruby33' -require 'parser/ruby34' diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ast/node.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ast/node.rb deleted file mode 100644 index bee8e29a..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ast/node.rb +++ /dev/null @@ -1,40 +0,0 @@ -# frozen_string_literal: true - -module Parser - module AST - - ## - # {Parser::AST::Node} contains information about a single AST node and its - # child nodes. It extends the basic [AST::Node](https://www.rubydoc.info/gems/ast/AST/Node) - # class provided by gem [ast](https://www.rubydoc.info/gems/ast). - # - # @api public - # - # @!attribute [r] location - # Source map for this Node. - # @return [Parser::Source::Map] - # - class Node < ::AST::Node - attr_reader :location - - alias loc location - - ## - # Assigns various properties to this AST node. Currently only the - # location can be set. - # - # @param [Hash] properties - # @option properties [Parser::Source::Map] :location Location information - # of the node. - # - def assign_properties(properties) - if (location = properties[:location]) - location = location.dup if location.frozen? - location.node = self - @location = location - end - end - end - - end -end diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ast/processor.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ast/processor.rb deleted file mode 100644 index fe65b4cc..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ast/processor.rb +++ /dev/null @@ -1,291 +0,0 @@ -# frozen_string_literal: true - -module Parser - module AST - - ## - # @api public - # - class Processor < ::AST::Processor - def process_regular_node(node) - node.updated(nil, process_all(node)) - end - - alias on_dstr process_regular_node - alias on_dsym process_regular_node - alias on_regexp process_regular_node - alias on_xstr process_regular_node - alias on_splat process_regular_node - alias on_kwsplat process_regular_node - alias on_array process_regular_node - alias on_pair process_regular_node - alias on_hash process_regular_node - alias on_kwargs process_regular_node - alias on_irange process_regular_node - alias on_erange process_regular_node - - def on_var(node) - node - end - - # @private - def process_variable_node(node) - on_var(node) - end - - alias on_lvar process_variable_node - alias on_ivar process_variable_node - alias on_gvar process_variable_node - alias on_cvar process_variable_node - alias on_back_ref process_variable_node - alias on_nth_ref process_variable_node - - def on_vasgn(node) - name, value_node = *node - - if !value_node.nil? - node.updated(nil, [ - name, process(value_node) - ]) - else - node - end - end - - # @private - def process_var_asgn_node(node) - on_vasgn(node) - end - - alias on_lvasgn process_var_asgn_node - alias on_ivasgn process_var_asgn_node - alias on_gvasgn process_var_asgn_node - alias on_cvasgn process_var_asgn_node - - alias on_and_asgn process_regular_node - alias on_or_asgn process_regular_node - - def on_op_asgn(node) - var_node, method_name, value_node = *node - - node.updated(nil, [ - process(var_node), method_name, process(value_node) - ]) - end - - alias on_mlhs process_regular_node - alias on_masgn process_regular_node - - def on_const(node) - scope_node, name = *node - - node.updated(nil, [ - process(scope_node), name - ]) - end - - def on_casgn(node) - scope_node, name, value_node = *node - - if !value_node.nil? - node.updated(nil, [ - process(scope_node), name, process(value_node) - ]) - else - node.updated(nil, [ - process(scope_node), name - ]) - end - end - - alias on_args process_regular_node - - def on_argument(node) - arg_name, value_node = *node - - if !value_node.nil? - node.updated(nil, [ - arg_name, process(value_node) - ]) - else - node - end - end - - # @private - def process_argument_node(node) - on_argument(node) - end - - alias on_arg process_argument_node - alias on_optarg process_argument_node - alias on_restarg process_argument_node - alias on_blockarg process_argument_node - alias on_shadowarg process_argument_node - alias on_kwarg process_argument_node - alias on_kwoptarg process_argument_node - alias on_kwrestarg process_argument_node - alias on_forward_arg process_argument_node - - def on_procarg0(node) - if node.children[0].is_a?(Symbol) - # This branch gets executed when the builder - # is not configured to emit and 'arg' inside 'procarg0', i.e. when - # Parser::Builders::Default.emit_arg_inside_procarg0 - # is set to false. - # - # If this flag is set to true this branch is unreachable. - # s(:procarg0, :a) - on_argument(node) - else - # s(:procarg0, s(:arg, :a), s(:arg, :b)) - process_regular_node(node) - end - end - - alias on_arg_expr process_regular_node - alias on_restarg_expr process_regular_node - alias on_blockarg_expr process_regular_node - alias on_block_pass process_regular_node - - alias on_forwarded_restarg process_regular_node - alias on_forwarded_kwrestarg process_regular_node - - alias on_module process_regular_node - alias on_class process_regular_node - alias on_sclass process_regular_node - - def on_def(node) - name, args_node, body_node = *node - - node.updated(nil, [ - name, - process(args_node), process(body_node) - ]) - end - - def on_defs(node) - definee_node, name, args_node, body_node = *node - - node.updated(nil, [ - process(definee_node), name, - process(args_node), process(body_node) - ]) - end - - alias on_undef process_regular_node - alias on_alias process_regular_node - - def on_send(node) - receiver_node, method_name, *arg_nodes = *node - - receiver_node = process(receiver_node) if receiver_node - node.updated(nil, [ - receiver_node, method_name, *process_all(arg_nodes) - ]) - end - - alias on_csend on_send - - alias on_index process_regular_node - alias on_indexasgn process_regular_node - - alias on_block process_regular_node - alias on_lambda process_regular_node - - def on_numblock(node) - method_call, max_numparam, body = *node - - node.updated(nil, [ - process(method_call), max_numparam, process(body) - ]) - end - - alias on_while process_regular_node - alias on_while_post process_regular_node - alias on_until process_regular_node - alias on_until_post process_regular_node - alias on_for process_regular_node - - alias on_return process_regular_node - alias on_break process_regular_node - alias on_next process_regular_node - alias on_redo process_regular_node - alias on_retry process_regular_node - alias on_super process_regular_node - alias on_yield process_regular_node - alias on_defined? process_regular_node - - alias on_not process_regular_node - alias on_and process_regular_node - alias on_or process_regular_node - - alias on_if process_regular_node - - alias on_when process_regular_node - alias on_case process_regular_node - - alias on_iflipflop process_regular_node - alias on_eflipflop process_regular_node - - alias on_match_current_line process_regular_node - alias on_match_with_lvasgn process_regular_node - - alias on_resbody process_regular_node - alias on_rescue process_regular_node - alias on_ensure process_regular_node - - alias on_begin process_regular_node - alias on_kwbegin process_regular_node - - alias on_preexe process_regular_node - alias on_postexe process_regular_node - - alias on_case_match process_regular_node - alias on_in_match process_regular_node - alias on_match_pattern process_regular_node - alias on_match_pattern_p process_regular_node - alias on_in_pattern process_regular_node - alias on_if_guard process_regular_node - alias on_unless_guard process_regular_node - alias on_match_var process_variable_node - alias on_match_rest process_regular_node - alias on_pin process_regular_node - alias on_match_alt process_regular_node - alias on_match_as process_regular_node - alias on_array_pattern process_regular_node - alias on_array_pattern_with_tail process_regular_node - alias on_hash_pattern process_regular_node - alias on_const_pattern process_regular_node - alias on_find_pattern process_regular_node - - # @private - def process_variable_node(node) - warn 'Parser::AST::Processor#process_variable_node is deprecated as a' \ - ' public API and will be removed. Please use ' \ - 'Parser::AST::Processor#on_var instead.' - on_var(node) - end - - # @private - def process_var_asgn_node(node) - warn 'Parser::AST::Processor#process_var_asgn_node is deprecated as a' \ - ' public API and will be removed. Please use ' \ - 'Parser::AST::Processor#on_vasgn instead.' - on_vasgn(node) - end - - # @private - def process_argument_node(node) - warn 'Parser::AST::Processor#process_argument_node is deprecated as a' \ - ' public API and will be removed. Please use ' \ - 'Parser::AST::Processor#on_argument instead.' - on_argument(node) - end - - def on_empty_else(node) - node - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/base.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/base.rb deleted file mode 100644 index b71562e7..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/base.rb +++ /dev/null @@ -1,291 +0,0 @@ -# frozen_string_literal: true - -module Parser - - ## - # Base class for version-specific parsers. - # - # @api public - # - # @!attribute [r] diagnostics - # @return [Parser::Diagnostic::Engine] - # - # @!attribute [r] static_env - # @return [Parser::StaticEnvironment] - # - class Base < Racc::Parser - ## - # Parses a string of Ruby code and returns the AST. If the source - # cannot be parsed, {SyntaxError} is raised and a diagnostic is - # printed to `stderr`. - # - # @example - # Parser::Base.parse('puts "hello"') - # - # @param [String] string The block of code to parse. - # @param [String] file The name of the file the code originated from. - # @param [Numeric] line The initial line number. - # @return [Parser::AST::Node] - # - def self.parse(string, file='(string)', line=1) - parser = default_parser - source_buffer = setup_source_buffer(file, line, string, parser.default_encoding) - parser.parse(source_buffer) - end - - ## - # Parses a string of Ruby code and returns the AST and comments. If the - # source cannot be parsed, {SyntaxError} is raised and a diagnostic is - # printed to `stderr`. - # - # @example - # Parser::Base.parse_with_comments('puts "hello"') - # - # @param [String] string The block of code to parse. - # @param [String] file The name of the file the code originated from. - # @param [Numeric] line The initial line number. - # @return [Array] - # - def self.parse_with_comments(string, file='(string)', line=1) - parser = default_parser - source_buffer = setup_source_buffer(file, line, string, parser.default_encoding) - parser.parse_with_comments(source_buffer) - end - - ## - # Parses Ruby source code by reading it from a file. If the source - # cannot be parsed, {SyntaxError} is raised and a diagnostic is - # printed to `stderr`. - # - # @param [String] filename Path to the file to parse. - # @return [Parser::AST::Node] - # @see #parse - # - def self.parse_file(filename) - parse(File.read(filename), filename) - end - - ## - # Parses Ruby source code by reading it from a file and returns the AST and - # comments. If the source cannot be parsed, {SyntaxError} is raised and a - # diagnostic is printed to `stderr`. - # - # @param [String] filename Path to the file to parse. - # @return [Array] - # @see #parse - # - def self.parse_file_with_comments(filename) - parse_with_comments(File.read(filename), filename) - end - - ## - # @return [Parser::Base] parser with the default options set. - # - def self.default_parser - parser = new - - parser.diagnostics.all_errors_are_fatal = true - parser.diagnostics.ignore_warnings = true - - parser.diagnostics.consumer = lambda do |diagnostic| - $stderr.puts(diagnostic.render) - end - - parser - end - - def self.setup_source_buffer(file, line, string, encoding) - string = string.dup.force_encoding(encoding) - - source_buffer = Source::Buffer.new(file, line) - - if name == 'Parser::Ruby18' - source_buffer.raw_source = string - else - source_buffer.source = string - end - - source_buffer - end - private_class_method :setup_source_buffer - - attr_reader :lexer - attr_reader :diagnostics - attr_reader :builder - attr_reader :static_env - attr_reader :source_buffer - attr_reader :context - attr_reader :max_numparam_stack - attr_reader :current_arg_stack - attr_reader :pattern_variables - attr_reader :pattern_hash_keys - - ## - # @param [Parser::Builders::Default] builder The AST builder to use. - # - def initialize(builder=Parser::Builders::Default.new) - @diagnostics = Diagnostic::Engine.new - - @static_env = StaticEnvironment.new - - # Stack that holds current parsing context - @context = Context.new - - # Maximum numbered parameters stack - @max_numparam_stack = MaxNumparamStack.new - - # Current argument names stack - @current_arg_stack = CurrentArgStack.new - - # Stack of set of variables used in the current pattern - @pattern_variables = VariablesStack.new - - # Stack of set of keys used in the current hash in pattern matchinig - @pattern_hash_keys = VariablesStack.new - - @lexer = Lexer.new(version) - @lexer.diagnostics = @diagnostics - @lexer.static_env = @static_env - @lexer.context = @context - - @builder = builder - @builder.parser = self - - # Last emitted token - @last_token = nil - - if self.class::Racc_debug_parser && ENV['RACC_DEBUG'] - @yydebug = true - end - - reset - end - - ## - # Resets the state of the parser. - # - def reset - @source_buffer = nil - - @lexer.reset - @static_env.reset - @context.reset - @current_arg_stack.reset - @pattern_variables.reset - @pattern_hash_keys.reset - - self - end - - ## - # Parses a source buffer and returns the AST, or `nil` in case of a non fatal error. - # - # @param [Parser::Source::Buffer] source_buffer The source buffer to parse. - # @return [Parser::AST::Node, nil] - # - def parse(source_buffer) - @lexer.source_buffer = source_buffer - @source_buffer = source_buffer - - do_parse || nil # Force `false` to `nil`, see https://github.com/ruby/racc/pull/136 - ensure - # Don't keep references to the source file. - @source_buffer = nil - @lexer.source_buffer = nil - end - - ## - # Parses a source buffer and returns the AST and the source code comments. - # - # @see #parse - # @see Parser::Source::Comment#associate - # @return [Array] - # - def parse_with_comments(source_buffer) - @lexer.comments = [] - - [ parse(source_buffer), @lexer.comments ] - ensure - @lexer.comments = nil - end - - ## - # Parses a source buffer and returns the AST, the source code comments, - # and the tokens emitted by the lexer. In case of a fatal error, a {SyntaxError} - # is raised, unless `recover` is true. In case of an error - # (non-fatal or recovered), `nil` is returned instead of the AST, and - # comments as well as tokens are only returned up to the location of - # the error. - # - # Currently, token stream format returned by #tokenize is not documented, - # but is considered part of a public API and only changed according - # to Semantic Versioning. - # - # However, note that the exact token composition of various constructs - # might vary. For example, a string `"foo"` is represented equally well - # by `:tSTRING_BEG " :tSTRING_CONTENT foo :tSTRING_END "` and - # `:tSTRING "foo"`; such details must not be relied upon. - # - # @param [Parser::Source::Buffer] source_buffer - # @param [Boolean] recover If true, recover from syntax errors. False by default. - # @return [Array] - # - def tokenize(source_buffer, recover=false) - @lexer.tokens = [] - @lexer.comments = [] - - begin - ast = parse(source_buffer) - rescue Parser::SyntaxError - raise if !recover - end - - [ ast, @lexer.comments, @lexer.tokens ] - ensure - @lexer.tokens = nil - @lexer.comments = nil - end - - private - - def next_token - token = @lexer.advance - @last_token = token - token - end - - def check_kwarg_name(name_t) - case name_t[0] - when /^[a-z_]/ - # OK - when /^[A-Z]/ - diagnostic :error, :argument_const, nil, name_t - end - end - - def diagnostic(level, reason, arguments, location_t, highlights_ts=[]) - _, location = location_t - - highlights = highlights_ts.map do |token| - _, range = token - range - end - - @diagnostics.process( - Diagnostic.new(level, reason, arguments, location, highlights)) - - if level == :error - yyerror - end - end - - def on_error(error_token_id, error_value, value_stack) - token_name = token_to_str(error_token_id) - _, location = error_value - - @diagnostics.process(Diagnostic.new( - :error, :unexpected_token, { :token => token_name }, location)) - end - end - -end diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/builders/default.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/builders/default.rb deleted file mode 100644 index 8003d624..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/builders/default.rb +++ /dev/null @@ -1,2338 +0,0 @@ -# frozen_string_literal: true - -module Parser - - ## - # Default AST builder. Uses {AST::Node}s. - # - class Builders::Default - class << self - ## - # AST compatibility attribute; since `-> {}` is not semantically - # equivalent to `lambda {}`, all new code should set this attribute - # to true. - # - # If set to false (the default), `-> {}` is emitted as - # `s(:block, s(:send, nil, :lambda), s(:args), nil)`. - # - # If set to true, `-> {}` is emitted as - # `s(:block, s(:lambda), s(:args), nil)`. - # - # @return [Boolean] - attr_accessor :emit_lambda - end - - @emit_lambda = false - - class << self - ## - # AST compatibility attribute; block arguments of `m { |a| }` are - # not semantically equivalent to block arguments of `m { |a,| }` or `m { |a, b| }`, - # all new code should set this attribute to true. - # - # If set to false (the default), arguments of `m { |a| }` are emitted as - # `s(:args, s(:arg, :a))`. - # - # If set to true, arguments of `m { |a| }` are emitted as - # `s(:args, s(:procarg0, :a)). - # - # @return [Boolean] - attr_accessor :emit_procarg0 - end - - @emit_procarg0 = false - - class << self - ## - # AST compatibility attribute; locations of `__ENCODING__` are not the same - # as locations of `Encoding::UTF_8` causing problems during rewriting, - # all new code should set this attribute to true. - # - # If set to false (the default), `__ENCODING__` is emitted as - # ` s(:const, s(:const, nil, :Encoding), :UTF_8)`. - # - # If set to true, `__ENCODING__` is emitted as - # `s(:__ENCODING__)`. - # - # @return [Boolean] - attr_accessor :emit_encoding - end - - @emit_encoding = false - - class << self - ## - # AST compatibility attribute; indexed assignment, `x[] = 1`, is not - # semantically equivalent to calling the method directly, `x.[]=(1)`. - # Specifically, in the former case, the expression's value is always 1, - # and in the latter case, the expression's value is the return value - # of the `[]=` method. - # - # If set to false (the default), `self[1]` is emitted as - # `s(:send, s(:self), :[], s(:int, 1))`, and `self[1] = 2` is - # emitted as `s(:send, s(:self), :[]=, s(:int, 1), s(:int, 2))`. - # - # If set to true, `self[1]` is emitted as - # `s(:index, s(:self), s(:int, 1))`, and `self[1] = 2` is - # emitted as `s(:indexasgn, s(:self), s(:int, 1), s(:int, 2))`. - # - # @return [Boolean] - attr_accessor :emit_index - end - - @emit_index = false - - class << self - ## - # AST compatibility attribute; causes a single non-mlhs - # block argument to be wrapped in s(:procarg0). - # - # If set to false (the default), block arguments `|a|` are emitted as - # `s(:args, s(:procarg0, :a))` - # - # If set to true, block arguments `|a|` are emitted as - # `s(:args, s(:procarg0, s(:arg, :a))` - # - # @return [Boolean] - attr_accessor :emit_arg_inside_procarg0 - end - - @emit_arg_inside_procarg0 = false - - class << self - ## - # AST compatibility attribute; arguments forwarding initially - # didn't have support for leading arguments - # (i.e. `def m(a, ...); end` was a syntax error). However, Ruby 3.0 - # added support for any number of arguments in front of the `...`. - # - # If set to false (the default): - # 1. `def m(...) end` is emitted as - # s(:def, :m, s(:forward_args), nil) - # 2. `def m(a, b, ...) end` is emitted as - # s(:def, :m, - # s(:args, s(:arg, :a), s(:arg, :b), s(:forward_arg))) - # - # If set to true it uses a single format: - # 1. `def m(...) end` is emitted as - # s(:def, :m, s(:args, s(:forward_arg))) - # 2. `def m(a, b, ...) end` is emitted as - # s(:def, :m, s(:args, s(:arg, :a), s(:arg, :b), s(:forward_arg))) - # - # It does't matter that much on 2.7 (because there can't be any leading arguments), - # but on 3.0 it should be better enabled to use a single AST format. - # - # @return [Boolean] - attr_accessor :emit_forward_arg - end - - @emit_forward_arg = false - - class << self - ## - # AST compatibility attribute; Starting from Ruby 2.7 keyword arguments - # of method calls that are passed explicitly as a hash (i.e. with curly braces) - # are treated as positional arguments and Ruby 2.7 emits a warning on such method - # call. Ruby 3.0 given an ArgumentError. - # - # If set to false (the default) the last hash argument is emitted as `hash`: - # - # ``` - # (send nil :foo - # (hash - # (pair - # (sym :bar) - # (int 42)))) - # ``` - # - # If set to true it is emitted as `kwargs`: - # - # ``` - # (send nil :foo - # (kwargs - # (pair - # (sym :bar) - # (int 42)))) - # ``` - # - # Note that `kwargs` node is just a replacement for `hash` argument, - # so if there's are multiple arguments (or a `kwsplat`) all of them - # are wrapped into `kwargs` instead of `hash`: - # - # ``` - # (send nil :foo - # (kwargs - # (pair - # (sym :a) - # (int 42)) - # (kwsplat - # (send nil :b)) - # (pair - # (sym :c) - # (int 10)))) - # ``` - attr_accessor :emit_kwargs - end - - @emit_kwargs = false - - class << self - ## - # AST compatibility attribute; Starting from 3.0 Ruby returns - # true/false from single-line pattern matching with `in` keyword. - # - # Before 3.0 there was an exception if given value doesn't match pattern. - # - # NOTE: This attribute affects only Ruby 2.7 grammar. - # 3.0 grammar always emits `match_pattern`/`match_pattern_p` - # - # If compatibility attribute set to false `foo in bar` is emitted as `in_match`: - # - # ``` - # (in-match - # (send nil :foo) - # (match-var :bar)) - # ``` - # - # If set to true it's emitted as `match_pattern_p`: - # ``` - # (match-pattern-p - # (send nil :foo) - # (match-var :bar)) - # ``` - attr_accessor :emit_match_pattern - end - - @emit_match_pattern = false - - class << self - ## - # @api private - def modernize - @emit_lambda = true - @emit_procarg0 = true - @emit_encoding = true - @emit_index = true - @emit_arg_inside_procarg0 = true - @emit_forward_arg = true - @emit_kwargs = true - @emit_match_pattern = true - end - end - - ## - # @api private - attr_accessor :parser - - ## - # If set to true (the default), `__FILE__` and `__LINE__` are transformed to - # literal nodes. For example, `s(:str, "lib/foo.rb")` and `s(:int, 10)`. - # - # If set to false, `__FILE__` and `__LINE__` are emitted as-is, - # i.e. as `s(:__FILE__)` and `s(:__LINE__)` nodes. - # - # Source maps are identical in both cases. - # - # @return [Boolean] - attr_accessor :emit_file_line_as_literals - - ## - # Initializes attributes: - # - # * `emit_file_line_as_literals`: `true` - def initialize - @emit_file_line_as_literals = true - end - - # @!parse private - - # - # Literals - # - - # Singletons - - def nil(nil_t) - n0(:nil, - token_map(nil_t)) - end - - def true(true_t) - n0(:true, - token_map(true_t)) - end - - def false(false_t) - n0(:false, - token_map(false_t)) - end - - # Numerics - - def integer(integer_t) - numeric(:int, integer_t) - end - - def float(float_t) - numeric(:float, float_t) - end - - def rational(rational_t) - numeric(:rational, rational_t) - end - - def complex(complex_t) - numeric(:complex, complex_t) - end - - def numeric(kind, token) - n(kind, [ value(token) ], - Source::Map::Operator.new(nil, loc(token))) - end - private :numeric - - def unary_num(unary_t, numeric) - value, = *numeric - operator_loc = loc(unary_t) - - case value(unary_t) - when '+' - value = +value - when '-' - value = -value - end - - numeric.updated(nil, [ value ], - :location => - Source::Map::Operator.new( - operator_loc, - operator_loc.join(numeric.loc.expression))) - end - - def __LINE__(__LINE__t) - n0(:__LINE__, - token_map(__LINE__t)) - end - - # Strings - - def string(string_t) - n(:str, [ string_value(string_t) ], - delimited_string_map(string_t)) - end - - def string_internal(string_t) - n(:str, [ string_value(string_t) ], - unquoted_map(string_t)) - end - - def string_compose(begin_t, parts, end_t) - if collapse_string_parts?(parts) - if begin_t.nil? && end_t.nil? - parts.first - else - n(:str, parts.first.children, - string_map(begin_t, parts, end_t)) - end - else - n(:dstr, [ *parts ], - string_map(begin_t, parts, end_t)) - end - end - - def character(char_t) - n(:str, [ string_value(char_t) ], - prefix_string_map(char_t)) - end - - def __FILE__(__FILE__t) - n0(:__FILE__, - token_map(__FILE__t)) - end - - # Symbols - - def symbol(symbol_t) - n(:sym, [ string_value(symbol_t).to_sym ], - prefix_string_map(symbol_t)) - end - - def symbol_internal(symbol_t) - n(:sym, [ string_value(symbol_t).to_sym ], - unquoted_map(symbol_t)) - end - - def symbol_compose(begin_t, parts, end_t) - if collapse_string_parts?(parts) - str = parts.first - - n(:sym, [ str.children.first.to_sym ], - collection_map(begin_t, str.loc.expression, end_t)) - elsif @parser.version == 18 && parts.empty? - diagnostic :error, :empty_symbol, nil, loc(begin_t).join(loc(end_t)) - else - n(:dsym, [ *parts ], - collection_map(begin_t, parts, end_t)) - end - end - - # Executable strings - - def xstring_compose(begin_t, parts, end_t) - n(:xstr, [ *parts ], - string_map(begin_t, parts, end_t)) - end - - # Indented (interpolated, noninterpolated, executable) strings - - def dedent_string(node, dedent_level) - if !dedent_level.nil? - dedenter = Lexer::Dedenter.new(dedent_level) - - case node.type - when :str - str = node.children.first - dedenter.dedent(str) - when :dstr, :xstr - children = node.children.map do |str_node| - if str_node.type == :str - str = str_node.children.first - dedenter.dedent(str) - next nil if str.empty? - else - dedenter.interrupt - end - str_node - end - - node = node.updated(nil, children.compact) - end - end - - node - end - - # Regular expressions - - def regexp_options(regopt_t) - options = value(regopt_t). - each_char.sort.uniq. - map(&:to_sym) - - n(:regopt, options, - token_map(regopt_t)) - end - - def regexp_compose(begin_t, parts, end_t, options) - begin - static_regexp(parts, options) - rescue RegexpError => e - diagnostic :error, :invalid_regexp, { :message => e.message }, - loc(begin_t).join(loc(end_t)) - end - - n(:regexp, (parts << options), - regexp_map(begin_t, end_t, options)) - end - - # Arrays - - def array(begin_t, elements, end_t) - n(:array, elements, - collection_map(begin_t, elements, end_t)) - end - - def splat(star_t, arg=nil) - if arg.nil? - n0(:splat, - unary_op_map(star_t)) - else - n(:splat, [ arg ], - unary_op_map(star_t, arg)) - end - end - - def word(parts) - if collapse_string_parts?(parts) - parts.first - else - n(:dstr, [ *parts ], - collection_map(nil, parts, nil)) - end - end - - def words_compose(begin_t, parts, end_t) - n(:array, [ *parts ], - collection_map(begin_t, parts, end_t)) - end - - def symbols_compose(begin_t, parts, end_t) - parts = parts.map do |part| - case part.type - when :str - value, = *part - part.updated(:sym, [ value.to_sym ]) - when :dstr - part.updated(:dsym) - else - part - end - end - - n(:array, [ *parts ], - collection_map(begin_t, parts, end_t)) - end - - # Hashes - - def pair(key, assoc_t, value) - n(:pair, [ key, value ], - binary_op_map(key, assoc_t, value)) - end - - def pair_list_18(list) - if list.size % 2 != 0 - diagnostic :error, :odd_hash, nil, list.last.loc.expression - else - list. - each_slice(2).map do |key, value| - n(:pair, [ key, value ], - binary_op_map(key, nil, value)) - end - end - end - - def pair_keyword(key_t, value) - key_map, pair_map = pair_keyword_map(key_t, value) - - key = n(:sym, [ value(key_t).to_sym ], key_map) - - n(:pair, [ key, value ], pair_map) - end - - def pair_quoted(begin_t, parts, end_t, value) - end_t, pair_map = pair_quoted_map(begin_t, end_t, value) - - key = symbol_compose(begin_t, parts, end_t) - - n(:pair, [ key, value ], pair_map) - end - - def pair_label(key_t) - key_l = loc(key_t) - value_l = key_l.adjust(end_pos: -1) - - label = value(key_t) - value = - if label =~ /\A[[:lower:]]/ - n(:ident, [ label.to_sym ], Source::Map::Variable.new(value_l)) - else - n(:const, [ nil, label.to_sym ], Source::Map::Constant.new(nil, value_l, value_l)) - end - pair_keyword(key_t, accessible(value)) - end - - def kwsplat(dstar_t, arg) - n(:kwsplat, [ arg ], - unary_op_map(dstar_t, arg)) - end - - def associate(begin_t, pairs, end_t) - key_set = Set.new - - pairs.each do |pair| - next unless pair.type.eql?(:pair) - - key, = *pair - - case key.type - when :sym, :str, :int, :float - when :rational, :complex, :regexp - next unless @parser.version >= 31 - else - next - end - - unless key_set.add?(key) - diagnostic :warning, :duplicate_hash_key, nil, key.loc.expression - end - end - - n(:hash, [ *pairs ], - collection_map(begin_t, pairs, end_t)) - end - - # Ranges - - def range_inclusive(lhs, dot2_t, rhs) - n(:irange, [ lhs, rhs ], - range_map(lhs, dot2_t, rhs)) - end - - def range_exclusive(lhs, dot3_t, rhs) - n(:erange, [ lhs, rhs ], - range_map(lhs, dot3_t, rhs)) - end - - # - # Access - # - - def self(token) - n0(:self, - token_map(token)) - end - - def ident(token) - n(:ident, [ value(token).to_sym ], - variable_map(token)) - end - - def ivar(token) - n(:ivar, [ value(token).to_sym ], - variable_map(token)) - end - - def gvar(token) - gvar_name = value(token) - - if gvar_name.start_with?('$0') && gvar_name.length > 2 - diagnostic :error, :gvar_name, { :name => gvar_name }, loc(token) - end - - n(:gvar, [ gvar_name.to_sym ], - variable_map(token)) - end - - def cvar(token) - n(:cvar, [ value(token).to_sym ], - variable_map(token)) - end - - def back_ref(token) - n(:back_ref, [ value(token).to_sym ], - token_map(token)) - end - - def nth_ref(token) - n(:nth_ref, [ value(token) ], - token_map(token)) - end - - def accessible(node) - case node.type - when :__FILE__ - if @emit_file_line_as_literals - n(:str, [ node.loc.expression.source_buffer.name ], - node.loc.dup) - else - node - end - - when :__LINE__ - if @emit_file_line_as_literals - n(:int, [ node.loc.expression.line ], - node.loc.dup) - else - node - end - - when :__ENCODING__ - if !self.class.emit_encoding - n(:const, [ n(:const, [ nil, :Encoding], nil), :UTF_8 ], - node.loc.dup) - else - node - end - - when :ident - name, = *node - - if %w[? !].any? { |c| name.to_s.end_with?(c) } - diagnostic :error, :invalid_id_to_get, - { :identifier => name.to_s }, node.loc.expression - end - - # Numbered parameters are not declared anywhere, - # so they take precedence over method calls in numblock contexts - if @parser.version >= 27 && @parser.try_declare_numparam(node) - return node.updated(:lvar) - end - - unless @parser.static_env.declared?(name) - if @parser.version == 33 && - name == :it && - @parser.context.in_block && - !@parser.max_numparam_stack.has_ordinary_params? - diagnostic :warning, :ambiguous_it_call, nil, node.loc.expression - end - - return n(:send, [ nil, name ], - var_send_map(node)) - end - - if name.to_s == parser.current_arg_stack.top - diagnostic :error, :circular_argument_reference, - { :var_name => name.to_s }, node.loc.expression - end - - node.updated(:lvar) - - else - node - end - end - - def const(name_t) - n(:const, [ nil, value(name_t).to_sym ], - constant_map(nil, nil, name_t)) - end - - def const_global(t_colon3, name_t) - cbase = n0(:cbase, token_map(t_colon3)) - - n(:const, [ cbase, value(name_t).to_sym ], - constant_map(cbase, t_colon3, name_t)) - end - - def const_fetch(scope, t_colon2, name_t) - n(:const, [ scope, value(name_t).to_sym ], - constant_map(scope, t_colon2, name_t)) - end - - def __ENCODING__(__ENCODING__t) - n0(:__ENCODING__, - token_map(__ENCODING__t)) - end - - # - # Assignment - # - - def assignable(node) - case node.type - when :cvar - node.updated(:cvasgn) - - when :ivar - node.updated(:ivasgn) - - when :gvar - node.updated(:gvasgn) - - when :const - if @parser.context.in_def - diagnostic :error, :dynamic_const, nil, node.loc.expression - end - - node.updated(:casgn) - - when :ident - name, = *node - - var_name = node.children[0].to_s - name_loc = node.loc.expression - - check_assignment_to_numparam(var_name, name_loc) - check_reserved_for_numparam(var_name, name_loc) - - @parser.static_env.declare(name) - - node.updated(:lvasgn) - - when :match_var - name, = *node - - var_name = node.children[0].to_s - name_loc = node.loc.expression - - check_assignment_to_numparam(var_name, name_loc) - check_reserved_for_numparam(var_name, name_loc) - - node - - when :nil, :self, :true, :false, - :__FILE__, :__LINE__, :__ENCODING__ - diagnostic :error, :invalid_assignment, nil, node.loc.expression - - when :back_ref, :nth_ref - diagnostic :error, :backref_assignment, nil, node.loc.expression - end - end - - def const_op_assignable(node) - node.updated(:casgn) - end - - def assign(lhs, eql_t, rhs) - (lhs << rhs).updated(nil, nil, - :location => lhs.loc. - with_operator(loc(eql_t)). - with_expression(join_exprs(lhs, rhs))) - end - - def op_assign(lhs, op_t, rhs) - case lhs.type - when :gvasgn, :ivasgn, :lvasgn, :cvasgn, :casgn, :send, :csend, :index - operator = value(op_t)[0..-1].to_sym - source_map = lhs.loc. - with_operator(loc(op_t)). - with_expression(join_exprs(lhs, rhs)) - - if lhs.type == :index - lhs = lhs.updated(:indexasgn) - end - - case operator - when :'&&' - n(:and_asgn, [ lhs, rhs ], source_map) - when :'||' - n(:or_asgn, [ lhs, rhs ], source_map) - else - n(:op_asgn, [ lhs, operator, rhs ], source_map) - end - - when :back_ref, :nth_ref - diagnostic :error, :backref_assignment, nil, lhs.loc.expression - end - end - - def multi_lhs(begin_t, items, end_t) - n(:mlhs, [ *items ], - collection_map(begin_t, items, end_t)) - end - - def multi_assign(lhs, eql_t, rhs) - n(:masgn, [ lhs, rhs ], - binary_op_map(lhs, eql_t, rhs)) - end - - # - # Class and module definition - # - - def def_class(class_t, name, - lt_t, superclass, - body, end_t) - n(:class, [ name, superclass, body ], - module_definition_map(class_t, name, lt_t, end_t)) - end - - def def_sclass(class_t, lshft_t, expr, - body, end_t) - n(:sclass, [ expr, body ], - module_definition_map(class_t, nil, lshft_t, end_t)) - end - - def def_module(module_t, name, - body, end_t) - n(:module, [ name, body ], - module_definition_map(module_t, name, nil, end_t)) - end - - # - # Method (un)definition - # - - def def_method(def_t, name_t, args, - body, end_t) - check_reserved_for_numparam(value(name_t), loc(name_t)) - - n(:def, [ value(name_t).to_sym, args, body ], - definition_map(def_t, nil, name_t, end_t)) - end - - def def_endless_method(def_t, name_t, args, - assignment_t, body) - check_reserved_for_numparam(value(name_t), loc(name_t)) - - n(:def, [ value(name_t).to_sym, args, body ], - endless_definition_map(def_t, nil, name_t, assignment_t, body)) - end - - def def_singleton(def_t, definee, dot_t, - name_t, args, - body, end_t) - validate_definee(definee) - check_reserved_for_numparam(value(name_t), loc(name_t)) - - n(:defs, [ definee, value(name_t).to_sym, args, body ], - definition_map(def_t, dot_t, name_t, end_t)) - end - - def def_endless_singleton(def_t, definee, dot_t, - name_t, args, - assignment_t, body) - validate_definee(definee) - check_reserved_for_numparam(value(name_t), loc(name_t)) - - n(:defs, [ definee, value(name_t).to_sym, args, body ], - endless_definition_map(def_t, dot_t, name_t, assignment_t, body)) - end - - def undef_method(undef_t, names) - n(:undef, [ *names ], - keyword_map(undef_t, nil, names, nil)) - end - - def alias(alias_t, to, from) - n(:alias, [ to, from ], - keyword_map(alias_t, nil, [to, from], nil)) - end - - # - # Formal arguments - # - - def args(begin_t, args, end_t, check_args=true) - args = check_duplicate_args(args) if check_args - validate_no_forward_arg_after_restarg(args) - - map = collection_map(begin_t, args, end_t) - if !self.class.emit_forward_arg && args.length == 1 && args[0].type == :forward_arg - n(:forward_args, [], map) - else - n(:args, args, map) - end - end - - def numargs(max_numparam) - n(:numargs, [ max_numparam ], nil) - end - - def forward_only_args(begin_t, dots_t, end_t) - if self.class.emit_forward_arg - arg = forward_arg(dots_t) - n(:args, [ arg ], - collection_map(begin_t, [ arg ], end_t)) - else - n(:forward_args, [], collection_map(begin_t, token_map(dots_t), end_t)) - end - end - - def forward_arg(dots_t) - n(:forward_arg, [], token_map(dots_t)) - end - - def arg(name_t) - check_reserved_for_numparam(value(name_t), loc(name_t)) - - n(:arg, [ value(name_t).to_sym ], - variable_map(name_t)) - end - - def optarg(name_t, eql_t, value) - check_reserved_for_numparam(value(name_t), loc(name_t)) - - n(:optarg, [ value(name_t).to_sym, value ], - variable_map(name_t). - with_operator(loc(eql_t)). - with_expression(loc(name_t).join(value.loc.expression))) - end - - def restarg(star_t, name_t=nil) - if name_t - check_reserved_for_numparam(value(name_t), loc(name_t)) - n(:restarg, [ value(name_t).to_sym ], - arg_prefix_map(star_t, name_t)) - else - n0(:restarg, - arg_prefix_map(star_t)) - end - end - - def kwarg(name_t) - check_reserved_for_numparam(value(name_t), loc(name_t)) - - n(:kwarg, [ value(name_t).to_sym ], - kwarg_map(name_t)) - end - - def kwoptarg(name_t, value) - check_reserved_for_numparam(value(name_t), loc(name_t)) - - n(:kwoptarg, [ value(name_t).to_sym, value ], - kwarg_map(name_t, value)) - end - - def kwrestarg(dstar_t, name_t=nil) - if name_t - check_reserved_for_numparam(value(name_t), loc(name_t)) - - n(:kwrestarg, [ value(name_t).to_sym ], - arg_prefix_map(dstar_t, name_t)) - else - n0(:kwrestarg, - arg_prefix_map(dstar_t)) - end - end - - def kwnilarg(dstar_t, nil_t) - n0(:kwnilarg, - arg_prefix_map(dstar_t, nil_t)) - end - - def shadowarg(name_t) - check_reserved_for_numparam(value(name_t), loc(name_t)) - - n(:shadowarg, [ value(name_t).to_sym ], - variable_map(name_t)) - end - - def blockarg(amper_t, name_t) - if !name_t.nil? - check_reserved_for_numparam(value(name_t), loc(name_t)) - end - - arg_name = name_t ? value(name_t).to_sym : nil - n(:blockarg, [ arg_name ], - arg_prefix_map(amper_t, name_t)) - end - - def procarg0(arg) - if self.class.emit_procarg0 - if arg.type == :arg && self.class.emit_arg_inside_procarg0 - n(:procarg0, [ arg ], - Source::Map::Collection.new(nil, nil, arg.location.expression)) - else - arg.updated(:procarg0) - end - else - arg - end - end - - # Ruby 1.8 block arguments - - def arg_expr(expr) - if expr.type == :lvasgn - expr.updated(:arg) - else - n(:arg_expr, [ expr ], - expr.loc.dup) - end - end - - def restarg_expr(star_t, expr=nil) - if expr.nil? - n0(:restarg, token_map(star_t)) - elsif expr.type == :lvasgn - expr.updated(:restarg) - else - n(:restarg_expr, [ expr ], - expr.loc.dup) - end - end - - def blockarg_expr(amper_t, expr) - if expr.type == :lvasgn - expr.updated(:blockarg) - else - n(:blockarg_expr, [ expr ], - expr.loc.dup) - end - end - - # MacRuby Objective-C arguments - - def objc_kwarg(kwname_t, assoc_t, name_t) - kwname_l = loc(kwname_t) - if assoc_t.nil? # a: b, not a => b - kwname_l = kwname_l.resize(kwname_l.size - 1) - operator_l = kwname_l.end.resize(1) - else - operator_l = loc(assoc_t) - end - - n(:objc_kwarg, [ value(kwname_t).to_sym, value(name_t).to_sym ], - Source::Map::ObjcKwarg.new(kwname_l, operator_l, loc(name_t), - kwname_l.join(loc(name_t)))) - end - - def objc_restarg(star_t, name=nil) - if name.nil? - n0(:restarg, arg_prefix_map(star_t)) - elsif name.type == :arg # regular restarg - name.updated(:restarg, nil, - { :location => name.loc.with_operator(loc(star_t)) }) - else # restarg with objc_kwarg inside - n(:objc_restarg, [ name ], - unary_op_map(star_t, name)) - end - end - - # - # Method calls - # - - def call_type_for_dot(dot_t) - if !dot_t.nil? && value(dot_t) == :anddot - :csend - else - # This case is a bit tricky. ruby23.y returns the token tDOT with - # the value :dot, and the token :tANDDOT with the value :anddot. - # - # But, ruby{18..22}.y (which unconditionally expect tDOT) just - # return "." there, since they are to be kept close to the corresponding - # Ruby MRI grammars. - # - # Thankfully, we don't have to care. - :send - end - end - - def forwarded_args(dots_t) - n(:forwarded_args, [], token_map(dots_t)) - end - - def forwarded_restarg(star_t) - n(:forwarded_restarg, [], token_map(star_t)) - end - - def forwarded_kwrestarg(dstar_t) - n(:forwarded_kwrestarg, [], token_map(dstar_t)) - end - - def call_method(receiver, dot_t, selector_t, - lparen_t=nil, args=[], rparen_t=nil) - type = call_type_for_dot(dot_t) - - if self.class.emit_kwargs - rewrite_hash_args_to_kwargs(args) - end - - if selector_t.nil? - n(type, [ receiver, :call, *args ], - send_map(receiver, dot_t, nil, lparen_t, args, rparen_t)) - else - n(type, [ receiver, value(selector_t).to_sym, *args ], - send_map(receiver, dot_t, selector_t, lparen_t, args, rparen_t)) - end - end - - def call_lambda(lambda_t) - if self.class.emit_lambda - n0(:lambda, expr_map(loc(lambda_t))) - else - n(:send, [ nil, :lambda ], - send_map(nil, nil, lambda_t)) - end - end - - def block(method_call, begin_t, args, body, end_t) - _receiver, _selector, *call_args = *method_call - - if method_call.type == :yield - diagnostic :error, :block_given_to_yield, nil, method_call.loc.keyword, [loc(begin_t)] - end - - last_arg = call_args.last - if last_arg && (last_arg.type == :block_pass || last_arg.type == :forwarded_args) - diagnostic :error, :block_and_blockarg, nil, last_arg.loc.expression, [loc(begin_t)] - end - - if args.type == :numargs - block_type = :numblock - args = args.children[0] - else - block_type = :block - end - - if [:send, :csend, :index, :super, :zsuper, :lambda].include?(method_call.type) - n(block_type, [ method_call, args, body ], - block_map(method_call.loc.expression, begin_t, end_t)) - else - # Code like "return foo 1 do end" is reduced in a weird sequence. - # Here, method_call is actually (return). - actual_send, = *method_call - block = - n(block_type, [ actual_send, args, body ], - block_map(actual_send.loc.expression, begin_t, end_t)) - - n(method_call.type, [ block ], - method_call.loc.with_expression(join_exprs(method_call, block))) - end - end - - def block_pass(amper_t, arg) - n(:block_pass, [ arg ], - unary_op_map(amper_t, arg)) - end - - def objc_varargs(pair, rest_of_varargs) - value, first_vararg = *pair - vararg_array = array(nil, [ first_vararg, *rest_of_varargs ], nil). - updated(:objc_varargs) - pair.updated(nil, [ value, vararg_array ], - { :location => pair.loc.with_expression( - pair.loc.expression.join(vararg_array.loc.expression)) }) - end - - def attr_asgn(receiver, dot_t, selector_t) - method_name = (value(selector_t) + '=').to_sym - type = call_type_for_dot(dot_t) - - # Incomplete method call. - n(type, [ receiver, method_name ], - send_map(receiver, dot_t, selector_t)) - end - - def index(receiver, lbrack_t, indexes, rbrack_t) - if self.class.emit_kwargs - rewrite_hash_args_to_kwargs(indexes) - end - - if self.class.emit_index - n(:index, [ receiver, *indexes ], - index_map(receiver, lbrack_t, rbrack_t)) - else - n(:send, [ receiver, :[], *indexes ], - send_index_map(receiver, lbrack_t, rbrack_t)) - end - end - - def index_asgn(receiver, lbrack_t, indexes, rbrack_t) - if self.class.emit_index - n(:indexasgn, [ receiver, *indexes ], - index_map(receiver, lbrack_t, rbrack_t)) - else - # Incomplete method call. - n(:send, [ receiver, :[]=, *indexes ], - send_index_map(receiver, lbrack_t, rbrack_t)) - end - end - - def binary_op(receiver, operator_t, arg) - source_map = send_binary_op_map(receiver, operator_t, arg) - - if @parser.version == 18 - operator = value(operator_t) - - if operator == '!=' - method_call = n(:send, [ receiver, :==, arg ], source_map) - elsif operator == '!~' - method_call = n(:send, [ receiver, :=~, arg ], source_map) - end - - if %w(!= !~).include?(operator) - return n(:not, [ method_call ], - expr_map(source_map.expression)) - end - end - - n(:send, [ receiver, value(operator_t).to_sym, arg ], - source_map) - end - - def match_op(receiver, match_t, arg) - source_map = send_binary_op_map(receiver, match_t, arg) - - if (regexp = static_regexp_node(receiver)) - regexp.names.each do |name| - @parser.static_env.declare(name) - end - - n(:match_with_lvasgn, [ receiver, arg ], - source_map) - else - n(:send, [ receiver, :=~, arg ], - source_map) - end - end - - def unary_op(op_t, receiver) - case value(op_t) - when '+', '-' - method = value(op_t) + '@' - else - method = value(op_t) - end - - n(:send, [ receiver, method.to_sym ], - send_unary_op_map(op_t, receiver)) - end - - def not_op(not_t, begin_t=nil, receiver=nil, end_t=nil) - if @parser.version == 18 - n(:not, [ check_condition(receiver) ], - unary_op_map(not_t, receiver)) - else - if receiver.nil? - nil_node = n0(:begin, collection_map(begin_t, nil, end_t)) - - n(:send, [ - nil_node, :'!' - ], send_unary_op_map(not_t, nil_node)) - else - n(:send, [ check_condition(receiver), :'!' ], - send_map(nil, nil, not_t, begin_t, [receiver], end_t)) - end - end - end - - # - # Control flow - # - - # Logical operations: and, or - - def logical_op(type, lhs, op_t, rhs) - n(type, [ lhs, rhs ], - binary_op_map(lhs, op_t, rhs)) - end - - # Conditionals - - def condition(cond_t, cond, then_t, - if_true, else_t, if_false, end_t) - n(:if, [ check_condition(cond), if_true, if_false ], - condition_map(cond_t, cond, then_t, if_true, else_t, if_false, end_t)) - end - - def condition_mod(if_true, if_false, cond_t, cond) - n(:if, [ check_condition(cond), if_true, if_false ], - keyword_mod_map(if_true || if_false, cond_t, cond)) - end - - def ternary(cond, question_t, if_true, colon_t, if_false) - n(:if, [ check_condition(cond), if_true, if_false ], - ternary_map(cond, question_t, if_true, colon_t, if_false)) - end - - # Case matching - - def when(when_t, patterns, then_t, body) - children = patterns << body - n(:when, children, - keyword_map(when_t, then_t, children, nil)) - end - - def case(case_t, expr, when_bodies, else_t, else_body, end_t) - n(:case, [ expr, *(when_bodies << else_body)], - condition_map(case_t, expr, nil, nil, else_t, else_body, end_t)) - end - - # Loops - - def loop(type, keyword_t, cond, do_t, body, end_t) - n(type, [ check_condition(cond), body ], - keyword_map(keyword_t, do_t, nil, end_t)) - end - - def loop_mod(type, body, keyword_t, cond) - if body.type == :kwbegin - type = :"#{type}_post" - end - - n(type, [ check_condition(cond), body ], - keyword_mod_map(body, keyword_t, cond)) - end - - def for(for_t, iterator, in_t, iteratee, - do_t, body, end_t) - n(:for, [ iterator, iteratee, body ], - for_map(for_t, in_t, do_t, end_t)) - end - - # Keywords - - def keyword_cmd(type, keyword_t, lparen_t=nil, args=[], rparen_t=nil) - if type == :yield && args.count > 0 - last_arg = args.last - if last_arg.type == :block_pass - diagnostic :error, :block_given_to_yield, nil, loc(keyword_t), [last_arg.loc.expression] - end - end - - if %i[yield super].include?(type) && self.class.emit_kwargs - rewrite_hash_args_to_kwargs(args) - end - - n(type, args, - keyword_map(keyword_t, lparen_t, args, rparen_t)) - end - - # BEGIN, END - - def preexe(preexe_t, lbrace_t, compstmt, rbrace_t) - n(:preexe, [ compstmt ], - keyword_map(preexe_t, lbrace_t, [], rbrace_t)) - end - - def postexe(postexe_t, lbrace_t, compstmt, rbrace_t) - n(:postexe, [ compstmt ], - keyword_map(postexe_t, lbrace_t, [], rbrace_t)) - end - - # Exception handling - - def rescue_body(rescue_t, - exc_list, assoc_t, exc_var, - then_t, compound_stmt) - n(:resbody, [ exc_list, exc_var, compound_stmt ], - rescue_body_map(rescue_t, exc_list, assoc_t, - exc_var, then_t, compound_stmt)) - end - - def begin_body(compound_stmt, rescue_bodies=[], - else_t=nil, else_=nil, - ensure_t=nil, ensure_=nil) - if rescue_bodies.any? - if else_t - compound_stmt = - n(:rescue, - [ compound_stmt, *(rescue_bodies + [ else_ ]) ], - eh_keyword_map(compound_stmt, nil, rescue_bodies, else_t, else_)) - else - compound_stmt = - n(:rescue, - [ compound_stmt, *(rescue_bodies + [ nil ]) ], - eh_keyword_map(compound_stmt, nil, rescue_bodies, nil, nil)) - end - elsif else_t - statements = [] - if !compound_stmt.nil? - if compound_stmt.type == :begin - statements += compound_stmt.children - else - statements.push(compound_stmt) - end - end - statements.push( - n(:begin, [ else_ ], - collection_map(else_t, [ else_ ], nil))) - compound_stmt = - n(:begin, statements, - collection_map(nil, statements, nil)) - end - - if ensure_t - compound_stmt = - n(:ensure, - [ compound_stmt, ensure_ ], - eh_keyword_map(compound_stmt, ensure_t, [ ensure_ ], nil, nil)) - end - - compound_stmt - end - - # - # Expression grouping - # - - def compstmt(statements) - case - when statements.none? - nil - when statements.one? - statements.first - else - n(:begin, statements, - collection_map(nil, statements, nil)) - end - end - - def begin(begin_t, body, end_t) - if body.nil? - # A nil expression: `()'. - n0(:begin, - collection_map(begin_t, nil, end_t)) - elsif body.type == :mlhs || - (body.type == :begin && - body.loc.begin.nil? && body.loc.end.nil?) - # Synthesized (begin) from compstmt "a; b" or (mlhs) - # from multi_lhs "(a, b) = *foo". - n(body.type, body.children, - collection_map(begin_t, body.children, end_t)) - else - n(:begin, [ body ], - collection_map(begin_t, [ body ], end_t)) - end - end - - def begin_keyword(begin_t, body, end_t) - if body.nil? - # A nil expression: `begin end'. - n0(:kwbegin, - collection_map(begin_t, nil, end_t)) - elsif (body.type == :begin && - body.loc.begin.nil? && body.loc.end.nil?) - # Synthesized (begin) from compstmt "a; b". - n(:kwbegin, body.children, - collection_map(begin_t, body.children, end_t)) - else - n(:kwbegin, [ body ], - collection_map(begin_t, [ body ], end_t)) - end - end - - # - # PATTERN MATCHING - # - - def case_match(case_t, expr, in_bodies, else_t, else_body, end_t) - else_body = n(:empty_else, nil, token_map(else_t)) if else_t && !else_body - n(:case_match, [ expr, *(in_bodies << else_body)], - condition_map(case_t, expr, nil, nil, else_t, else_body, end_t)) - end - - def in_match(lhs, in_t, rhs) - n(:in_match, [lhs, rhs], - binary_op_map(lhs, in_t, rhs)) - end - - def match_pattern(lhs, match_t, rhs) - n(:match_pattern, [lhs, rhs], - binary_op_map(lhs, match_t, rhs)) - end - - def match_pattern_p(lhs, match_t, rhs) - n(:match_pattern_p, [lhs, rhs], - binary_op_map(lhs, match_t, rhs)) - end - - def in_pattern(in_t, pattern, guard, then_t, body) - children = [pattern, guard, body] - n(:in_pattern, children, - keyword_map(in_t, then_t, children.compact, nil)) - end - - def if_guard(if_t, if_body) - n(:if_guard, [if_body], guard_map(if_t, if_body)) - end - - def unless_guard(unless_t, unless_body) - n(:unless_guard, [unless_body], guard_map(unless_t, unless_body)) - end - - def match_var(name_t) - name = value(name_t).to_sym - name_l = loc(name_t) - - check_lvar_name(name, name_l) - check_duplicate_pattern_variable(name, name_l) - @parser.static_env.declare(name) - - n(:match_var, [ name ], - variable_map(name_t)) - end - - def match_hash_var(name_t) - name = value(name_t).to_sym - - expr_l = loc(name_t) - name_l = expr_l.adjust(end_pos: -1) - - check_lvar_name(name, name_l) - check_duplicate_pattern_variable(name, name_l) - @parser.static_env.declare(name) - - n(:match_var, [ name ], - Source::Map::Variable.new(name_l, expr_l)) - end - - def match_hash_var_from_str(begin_t, strings, end_t) - if strings.length > 1 - diagnostic :error, :pm_interp_in_var_name, nil, loc(begin_t).join(loc(end_t)) - end - - string = strings[0] - - case string.type - when :str - # MRI supports plain strings in hash pattern matching - name, = *string - name_l = string.loc.expression - - check_lvar_name(name, name_l) - check_duplicate_pattern_variable(name, name_l) - - @parser.static_env.declare(name) - - if (begin_l = string.loc.begin) - # exclude beginning of the string from the location of the variable - name_l = name_l.adjust(begin_pos: begin_l.length) - end - - if (end_l = string.loc.end) - # exclude end of the string from the location of the variable - name_l = name_l.adjust(end_pos: -end_l.length) - end - - expr_l = loc(begin_t).join(string.loc.expression).join(loc(end_t)) - n(:match_var, [ name.to_sym ], - Source::Map::Variable.new(name_l, expr_l)) - when :begin - match_hash_var_from_str(begin_t, string.children, end_t) - else - # we only can get here if there is an interpolation, e.g., ``in "#{ a }":` - diagnostic :error, :pm_interp_in_var_name, nil, loc(begin_t).join(loc(end_t)) - end - end - - def match_rest(star_t, name_t = nil) - if name_t.nil? - n0(:match_rest, - unary_op_map(star_t)) - else - name = match_var(name_t) - n(:match_rest, [ name ], - unary_op_map(star_t, name)) - end - end - - def hash_pattern(lbrace_t, kwargs, rbrace_t) - args = check_duplicate_args(kwargs) - n(:hash_pattern, args, - collection_map(lbrace_t, args, rbrace_t)) - end - - def array_pattern(lbrack_t, elements, rbrack_t) - return n(:array_pattern, nil, collection_map(lbrack_t, [], rbrack_t)) if elements.nil? - - trailing_comma = false - - node_elements = elements.map do |element| - if element.type == :match_with_trailing_comma - trailing_comma = true - element.children.first - else - trailing_comma = false - element - end - end - - node_type = trailing_comma ? :array_pattern_with_tail : :array_pattern - - n(node_type, node_elements, - collection_map(lbrack_t, elements, rbrack_t)) - end - - def find_pattern(lbrack_t, elements, rbrack_t) - n(:find_pattern, elements, - collection_map(lbrack_t, elements, rbrack_t)) - end - - def match_with_trailing_comma(match, comma_t) - n(:match_with_trailing_comma, [ match ], expr_map(match.loc.expression.join(loc(comma_t)))) - end - - def const_pattern(const, ldelim_t, pattern, rdelim_t) - n(:const_pattern, [const, pattern], - Source::Map::Collection.new( - loc(ldelim_t), loc(rdelim_t), - const.loc.expression.join(loc(rdelim_t)) - ) - ) - end - - def pin(pin_t, var) - n(:pin, [ var ], - send_unary_op_map(pin_t, var)) - end - - def match_alt(left, pipe_t, right) - source_map = binary_op_map(left, pipe_t, right) - - n(:match_alt, [ left, right ], - source_map) - end - - def match_as(value, assoc_t, as) - source_map = binary_op_map(value, assoc_t, as) - - n(:match_as, [ value, as ], - source_map) - end - - def match_nil_pattern(dstar_t, nil_t) - n0(:match_nil_pattern, - arg_prefix_map(dstar_t, nil_t)) - end - - def match_pair(label_type, label, value) - if label_type == :label - check_duplicate_pattern_key(label[0], label[1]) - pair_keyword(label, value) - else - begin_t, parts, end_t = label - label_loc = loc(begin_t).join(loc(end_t)) - - # quoted label like "label": value - if (var_name = static_string(parts)) - check_duplicate_pattern_key(var_name, label_loc) - else - diagnostic :error, :pm_interp_in_var_name, nil, label_loc - end - - pair_quoted(begin_t, parts, end_t, value) - end - end - - def match_label(label_type, label) - if label_type == :label - match_hash_var(label) - else - # quoted label like "label": value - begin_t, strings, end_t = label - match_hash_var_from_str(begin_t, strings, end_t) - end - end - - private - - # - # VERIFICATION - # - - def check_condition(cond) - case cond.type - when :masgn - if @parser.version <= 23 - diagnostic :error, :masgn_as_condition, nil, cond.loc.expression - else - cond - end - - when :begin - if cond.children.count == 1 - cond.updated(nil, [ - check_condition(cond.children.last) - ]) - else - cond - end - - when :and, :or - lhs, rhs = *cond - - if @parser.version == 18 - cond - else - cond.updated(cond.type, [ - check_condition(lhs), - check_condition(rhs) - ]) - end - - when :irange, :erange - lhs, rhs = *cond - - type = case cond.type - when :irange then :iflipflop - when :erange then :eflipflop - end - - lhs_condition = check_condition(lhs) unless lhs.nil? - rhs_condition = check_condition(rhs) unless rhs.nil? - - return cond.updated(type, [ - lhs_condition, - rhs_condition - ]) - - when :regexp - n(:match_current_line, [ cond ], expr_map(cond.loc.expression)) - - else - cond - end - end - - def check_duplicate_args(args, map={}) - args.each do |this_arg| - case this_arg.type - when :arg, :optarg, :restarg, :blockarg, - :kwarg, :kwoptarg, :kwrestarg, - :shadowarg - - check_duplicate_arg(this_arg, map) - - when :procarg0 - - if this_arg.children[0].is_a?(Symbol) - # s(:procarg0, :a) - check_duplicate_arg(this_arg, map) - else - # s(:procarg0, s(:arg, :a), ...) - check_duplicate_args(this_arg.children, map) - end - - when :mlhs - check_duplicate_args(this_arg.children, map) - end - end - end - - def check_duplicate_arg(this_arg, map={}) - this_name, = *this_arg - - that_arg = map[this_name] - that_name, = *that_arg - - if that_arg.nil? - map[this_name] = this_arg - elsif arg_name_collides?(this_name, that_name) - diagnostic :error, :duplicate_argument, nil, - this_arg.loc.name, [ that_arg.loc.name ] - end - end - - def validate_no_forward_arg_after_restarg(args) - restarg = nil - forward_arg = nil - args.each do |arg| - case arg.type - when :restarg then restarg = arg - when :forward_arg then forward_arg = arg - end - end - - if !forward_arg.nil? && !restarg.nil? - diagnostic :error, :forward_arg_after_restarg, nil, forward_arg.loc.expression, [restarg.loc.expression] - end - end - - def check_assignment_to_numparam(name, loc) - # MRI < 2.7 treats numbered parameters as regular variables - # and so it's allowed to perform assignments like `_1 = 42`. - return if @parser.version < 27 - - assigning_to_numparam = - @parser.context.in_dynamic_block? && - name =~ /\A_([1-9])\z/ && - @parser.max_numparam_stack.has_numparams? - - if assigning_to_numparam - diagnostic :error, :cant_assign_to_numparam, { :name => name }, loc - end - end - - def check_reserved_for_numparam(name, loc) - # MRI < 3.0 accepts assignemnt to variables like _1 - # if it's not a numbered parameter. MRI 3.0 and newer throws an error. - return if @parser.version < 30 - - if name =~ /\A_([1-9])\z/ - diagnostic :error, :reserved_for_numparam, { :name => name }, loc - end - end - - def arg_name_collides?(this_name, that_name) - case @parser.version - when 18 - this_name == that_name - when 19 - # Ignore underscore. - this_name != :_ && - this_name == that_name - else - # Ignore everything beginning with underscore. - this_name && this_name[0] != '_' && - this_name == that_name - end - end - - def check_lvar_name(name, loc) - if name =~ /\A[[[:lower:]]_][[[:alnum:]]_]*\z/ - # OK - else - diagnostic :error, :lvar_name, { name: name }, loc - end - end - - def check_duplicate_pattern_variable(name, loc) - return if name.to_s.start_with?('_') - - if @parser.pattern_variables.declared?(name) - diagnostic :error, :duplicate_variable_name, { name: name.to_s }, loc - end - - @parser.pattern_variables.declare(name) - end - - def check_duplicate_pattern_key(name, loc) - if @parser.pattern_hash_keys.declared?(name) - diagnostic :error, :duplicate_pattern_key, { name: name.to_s }, loc - end - - @parser.pattern_hash_keys.declare(name) - end - - # - # SOURCE MAPS - # - - def n(type, children, source_map) - AST::Node.new(type, children, :location => source_map) - end - - def n0(type, source_map) - n(type, [], source_map) - end - - def join_exprs(left_expr, right_expr) - left_expr.loc.expression. - join(right_expr.loc.expression) - end - - def token_map(token) - Source::Map.new(loc(token)) - end - - def delimited_string_map(string_t) - str_range = loc(string_t) - - begin_l = str_range.with(end_pos: str_range.begin_pos + 1) - - end_l = str_range.with(begin_pos: str_range.end_pos - 1) - - Source::Map::Collection.new(begin_l, end_l, - loc(string_t)) - end - - def prefix_string_map(symbol) - str_range = loc(symbol) - - begin_l = str_range.with(end_pos: str_range.begin_pos + 1) - - Source::Map::Collection.new(begin_l, nil, - loc(symbol)) - end - - def unquoted_map(token) - Source::Map::Collection.new(nil, nil, - loc(token)) - end - - def pair_keyword_map(key_t, value_e) - key_range = loc(key_t) - - key_l = key_range.adjust(end_pos: -1) - - colon_l = key_range.with(begin_pos: key_range.end_pos - 1) - - [ # key map - Source::Map::Collection.new(nil, nil, - key_l), - # pair map - Source::Map::Operator.new(colon_l, - key_range.join(value_e.loc.expression)) ] - end - - def pair_quoted_map(begin_t, end_t, value_e) - end_l = loc(end_t) - - quote_l = end_l.with(begin_pos: end_l.end_pos - 2, - end_pos: end_l.end_pos - 1) - - colon_l = end_l.with(begin_pos: end_l.end_pos - 1) - - [ # modified end token - [ value(end_t), quote_l ], - # pair map - Source::Map::Operator.new(colon_l, - loc(begin_t).join(value_e.loc.expression)) ] - end - - def expr_map(loc) - Source::Map.new(loc) - end - - def collection_map(begin_t, parts, end_t) - if begin_t.nil? || end_t.nil? - if parts.any? - expr_l = join_exprs(parts.first, parts.last) - elsif !begin_t.nil? - expr_l = loc(begin_t) - elsif !end_t.nil? - expr_l = loc(end_t) - end - else - expr_l = loc(begin_t).join(loc(end_t)) - end - - Source::Map::Collection.new(loc(begin_t), loc(end_t), expr_l) - end - - def string_map(begin_t, parts, end_t) - if begin_t && value(begin_t).start_with?('<<') - if parts.any? - expr_l = join_exprs(parts.first, parts.last) - else - expr_l = loc(end_t).begin - end - - Source::Map::Heredoc.new(loc(begin_t), expr_l, loc(end_t)) - else - collection_map(begin_t, parts, end_t) - end - end - - def regexp_map(begin_t, end_t, options_e) - Source::Map::Collection.new(loc(begin_t), loc(end_t), - loc(begin_t).join(options_e.loc.expression)) - end - - def constant_map(scope, colon2_t, name_t) - if scope.nil? - expr_l = loc(name_t) - else - expr_l = scope.loc.expression.join(loc(name_t)) - end - - Source::Map::Constant.new(loc(colon2_t), loc(name_t), expr_l) - end - - def variable_map(name_t) - Source::Map::Variable.new(loc(name_t)) - end - - def binary_op_map(left_e, op_t, right_e) - Source::Map::Operator.new(loc(op_t), join_exprs(left_e, right_e)) - end - - def unary_op_map(op_t, arg_e=nil) - if arg_e.nil? - expr_l = loc(op_t) - else - expr_l = loc(op_t).join(arg_e.loc.expression) - end - - Source::Map::Operator.new(loc(op_t), expr_l) - end - - def range_map(start_e, op_t, end_e) - if start_e && end_e - expr_l = join_exprs(start_e, end_e) - elsif start_e - expr_l = start_e.loc.expression.join(loc(op_t)) - elsif end_e - expr_l = loc(op_t).join(end_e.loc.expression) - end - - Source::Map::Operator.new(loc(op_t), expr_l) - end - - def arg_prefix_map(op_t, name_t=nil) - if name_t.nil? - expr_l = loc(op_t) - else - expr_l = loc(op_t).join(loc(name_t)) - end - - Source::Map::Variable.new(loc(name_t), expr_l) - end - - def kwarg_map(name_t, value_e=nil) - label_range = loc(name_t) - name_range = label_range.adjust(end_pos: -1) - - if value_e - expr_l = loc(name_t).join(value_e.loc.expression) - else - expr_l = loc(name_t) - end - - Source::Map::Variable.new(name_range, expr_l) - end - - def module_definition_map(keyword_t, name_e, operator_t, end_t) - if name_e - name_l = name_e.loc.expression - end - - Source::Map::Definition.new(loc(keyword_t), - loc(operator_t), name_l, - loc(end_t)) - end - - def definition_map(keyword_t, operator_t, name_t, end_t) - Source::Map::MethodDefinition.new(loc(keyword_t), - loc(operator_t), loc(name_t), - loc(end_t), nil, nil) - end - - def endless_definition_map(keyword_t, operator_t, name_t, assignment_t, body_e) - body_l = body_e.loc.expression - - Source::Map::MethodDefinition.new(loc(keyword_t), - loc(operator_t), loc(name_t), nil, - loc(assignment_t), body_l) - end - - def send_map(receiver_e, dot_t, selector_t, begin_t=nil, args=[], end_t=nil) - if receiver_e - begin_l = receiver_e.loc.expression - elsif selector_t - begin_l = loc(selector_t) - end - - if end_t - end_l = loc(end_t) - elsif args.any? - end_l = args.last.loc.expression - elsif selector_t - end_l = loc(selector_t) - end - - Source::Map::Send.new(loc(dot_t), loc(selector_t), - loc(begin_t), loc(end_t), - begin_l.join(end_l)) - end - - def var_send_map(variable_e) - Source::Map::Send.new(nil, variable_e.loc.expression, - nil, nil, - variable_e.loc.expression) - end - - def send_binary_op_map(lhs_e, selector_t, rhs_e) - Source::Map::Send.new(nil, loc(selector_t), - nil, nil, - join_exprs(lhs_e, rhs_e)) - end - - def send_unary_op_map(selector_t, arg_e) - if arg_e.nil? - expr_l = loc(selector_t) - else - expr_l = loc(selector_t).join(arg_e.loc.expression) - end - - Source::Map::Send.new(nil, loc(selector_t), - nil, nil, - expr_l) - end - - def index_map(receiver_e, lbrack_t, rbrack_t) - Source::Map::Index.new(loc(lbrack_t), loc(rbrack_t), - receiver_e.loc.expression.join(loc(rbrack_t))) - end - - def send_index_map(receiver_e, lbrack_t, rbrack_t) - Source::Map::Send.new(nil, loc(lbrack_t).join(loc(rbrack_t)), - nil, nil, - receiver_e.loc.expression.join(loc(rbrack_t))) - end - - def block_map(receiver_l, begin_t, end_t) - Source::Map::Collection.new(loc(begin_t), loc(end_t), - receiver_l.join(loc(end_t))) - end - - def keyword_map(keyword_t, begin_t, args, end_t) - args ||= [] - - if end_t - end_l = loc(end_t) - elsif args.any? && !args.last.nil? - end_l = args.last.loc.expression - elsif args.any? && args.count > 1 - end_l = args[-2].loc.expression - else - end_l = loc(keyword_t) - end - - Source::Map::Keyword.new(loc(keyword_t), loc(begin_t), loc(end_t), - loc(keyword_t).join(end_l)) - end - - def keyword_mod_map(pre_e, keyword_t, post_e) - Source::Map::Keyword.new(loc(keyword_t), nil, nil, - join_exprs(pre_e, post_e)) - end - - def condition_map(keyword_t, cond_e, begin_t, body_e, else_t, else_e, end_t) - if end_t - end_l = loc(end_t) - elsif else_e && else_e.loc.expression - end_l = else_e.loc.expression - elsif loc(else_t) - end_l = loc(else_t) - elsif body_e && body_e.loc.expression - end_l = body_e.loc.expression - elsif loc(begin_t) - end_l = loc(begin_t) - else - end_l = cond_e.loc.expression - end - - Source::Map::Condition.new(loc(keyword_t), - loc(begin_t), loc(else_t), loc(end_t), - loc(keyword_t).join(end_l)) - end - - def ternary_map(begin_e, question_t, mid_e, colon_t, end_e) - Source::Map::Ternary.new(loc(question_t), loc(colon_t), - join_exprs(begin_e, end_e)) - end - - def for_map(keyword_t, in_t, begin_t, end_t) - Source::Map::For.new(loc(keyword_t), loc(in_t), - loc(begin_t), loc(end_t), - loc(keyword_t).join(loc(end_t))) - end - - def rescue_body_map(keyword_t, exc_list_e, assoc_t, - exc_var_e, then_t, - compstmt_e) - end_l = compstmt_e.loc.expression if compstmt_e - end_l = loc(then_t) if end_l.nil? && then_t - end_l = exc_var_e.loc.expression if end_l.nil? && exc_var_e - end_l = exc_list_e.loc.expression if end_l.nil? && exc_list_e - end_l = loc(keyword_t) if end_l.nil? - - Source::Map::RescueBody.new(loc(keyword_t), loc(assoc_t), loc(then_t), - loc(keyword_t).join(end_l)) - end - - def eh_keyword_map(compstmt_e, keyword_t, body_es, - else_t, else_e) - if compstmt_e.nil? - if keyword_t.nil? - begin_l = body_es.first.loc.expression - else - begin_l = loc(keyword_t) - end - else - begin_l = compstmt_e.loc.expression - end - - if else_t - if else_e.nil? - end_l = loc(else_t) - else - end_l = else_e.loc.expression - end - elsif !body_es.last.nil? - end_l = body_es.last.loc.expression - else - end_l = loc(keyword_t) - end - - Source::Map::Condition.new(loc(keyword_t), nil, loc(else_t), nil, - begin_l.join(end_l)) - end - - def guard_map(keyword_t, guard_body_e) - keyword_l = loc(keyword_t) - guard_body_l = guard_body_e.loc.expression - - Source::Map::Keyword.new(keyword_l, nil, nil, keyword_l.join(guard_body_l)) - end - - # - # HELPERS - # - - # Extract a static string from e.g. a regular expression, - # honoring the fact that MRI expands interpolations like #{""} - # at parse time. - def static_string(nodes) - nodes.map do |node| - case node.type - when :str - node.children[0] - when :begin - if (string = static_string(node.children)) - string - else - return nil - end - else - return nil - end - end.join - end - - def static_regexp(parts, options) - source = static_string(parts) - return nil if source.nil? - - source = case - when options.children.include?(:u) - source.encode(Encoding::UTF_8) - when options.children.include?(:e) - source.encode(Encoding::EUC_JP) - when options.children.include?(:s) - source.encode(Encoding::WINDOWS_31J) - when options.children.include?(:n) - source.encode(Encoding::BINARY) - else - source - end - - Regexp.new(source, (Regexp::EXTENDED if options.children.include?(:x))) - end - - def static_regexp_node(node) - if node.type == :regexp - if @parser.version >= 33 && node.children[0..-2].any? { |child| child.type != :str } - return nil - end - - parts, options = node.children[0..-2], node.children[-1] - static_regexp(parts, options) - end - end - - def collapse_string_parts?(parts) - parts.one? && - [:str, :dstr].include?(parts.first.type) - end - - def value(token) - token[0] - end - - def string_value(token) - unless token[0].valid_encoding? - diagnostic(:error, :invalid_encoding, nil, token[1]) - end - - token[0] - end - - def loc(token) - # Pass through `nil`s and return nil for tNL. - token[1] if token && token[0] - end - - def diagnostic(type, reason, arguments, location, highlights=[]) - @parser.diagnostics.process( - Diagnostic.new(type, reason, arguments, location, highlights)) - - if type == :error - @parser.send :yyerror - end - end - - def validate_definee(definee) - case definee.type - when :int, :str, :dstr, :sym, :dsym, - :regexp, :array, :hash - - diagnostic :error, :singleton_literal, nil, definee.loc.expression - false - else - true - end - end - - def rewrite_hash_args_to_kwargs(args) - if args.any? && kwargs?(args.last) - # foo(..., bar: baz) - args[args.length - 1] = args[args.length - 1].updated(:kwargs) - elsif args.length > 1 && args.last.type == :block_pass && kwargs?(args[args.length - 2]) - # foo(..., bar: baz, &blk) - args[args.length - 2] = args[args.length - 2].updated(:kwargs) - end - end - - def kwargs?(node) - node.type == :hash && node.loc.begin.nil? && node.loc.end.nil? - end - end - -end diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/clobbering_error.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/clobbering_error.rb deleted file mode 100644 index 61240c3d..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/clobbering_error.rb +++ /dev/null @@ -1,13 +0,0 @@ -# frozen_string_literal: true - -module Parser - ## - # {Parser::ClobberingError} is raised when {Parser::Source::Rewriter} - # detects a clobbering rewrite action. This class inherits {RuntimeError} - # rather than {StandardError} for backward compatibility. - # - # @api public - # - class ClobberingError < RuntimeError - end -end diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/color.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/color.rb deleted file mode 100644 index d528f79b..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/color.rb +++ /dev/null @@ -1,32 +0,0 @@ -# frozen_string_literal: true - -module Parser - module Color - def self.color(str, code, bold: false) - return str unless STDOUT.tty? - code = Array(code) - code.unshift(1) if bold - "\e[#{code.join(';')}m#{str}\e[0m" - end - - def self.red(str, bold: false) - color(str, 31, bold: bold) - end - - def self.green(str, bold: false) - color(str, 32, bold: bold) - end - - def self.yellow(str, bold: false) - color(str, 33, bold: bold) - end - - def self.magenta(str, bold: false) - color(str, 35, bold: bold) - end - - def self.underline(str) - color(str, 4) - end - end -end diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/context.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/context.rb deleted file mode 100644 index ff5f24dc..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/context.rb +++ /dev/null @@ -1,49 +0,0 @@ -# frozen_string_literal: true - -module Parser - # Context of parsing that is represented by a stack of scopes. - # - # Supported states: - # + :class - in the class body (class A; end) - # + :module - in the module body (module M; end) - # + :sclass - in the singleton class body (class << obj; end) - # + :def - in the method body (def m; end) - # + :defs - in the singleton method body (def self.m; end) - # + :def_open_args - in the arglist of the method definition - # keep in mind that it's set **only** after reducing the first argument, - # if you need to handle the first argument check `lex_state == expr_fname` - # + :block - in the block body (tap {}) - # + :lambda - in the lambda body (-> {}) - # - class Context - FLAGS = %i[ - in_defined - in_kwarg - in_argdef - in_def - in_class - in_block - in_lambda - ] - - def initialize - reset - end - - def reset - @in_defined = false - @in_kwarg = false - @in_argdef = false - @in_def = false - @in_class = false - @in_block = false - @in_lambda = false - end - - attr_accessor(*FLAGS) - - def in_dynamic_block? - in_block || in_lambda - end - end -end diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/current.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/current.rb deleted file mode 100644 index 29136d39..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/current.rb +++ /dev/null @@ -1,137 +0,0 @@ -# frozen_string_literal: true - -module Parser - class << self - def warn_syntax_deviation(feature, version) - warn "warning: parser/current is loading #{feature}, which recognizes " \ - "#{version}-compliant syntax, but you are running #{RUBY_VERSION}.\n" \ - "Please see https://github.com/whitequark/parser#compatibility-with-ruby-mri." - end - private :warn_syntax_deviation - end - - case RUBY_VERSION - when /^2\.0\./ - current_version = '2.0.0' - if RUBY_VERSION != current_version - warn_syntax_deviation 'parser/ruby20', current_version - end - - require 'parser/ruby20' - CurrentRuby = Ruby20 - - when /^2\.1\./ - current_version = '2.1.10' - if RUBY_VERSION != current_version - warn_syntax_deviation 'parser/ruby21', current_version - end - - require 'parser/ruby21' - CurrentRuby = Ruby21 - - when /^2\.2\./ - current_version = '2.2.10' - if RUBY_VERSION != current_version - warn_syntax_deviation 'parser/ruby22', current_version - end - - require 'parser/ruby22' - CurrentRuby = Ruby22 - - when /^2\.3\./ - current_version = '2.3.8' - if RUBY_VERSION != current_version - warn_syntax_deviation 'parser/ruby23', current_version - end - - require 'parser/ruby23' - CurrentRuby = Ruby23 - - when /^2\.4\./ - current_version = '2.4.10' - if RUBY_VERSION != current_version - warn_syntax_deviation 'parser/ruby24', current_version - end - - require 'parser/ruby24' - CurrentRuby = Ruby24 - - when /^2\.5\./ - current_version = '2.5.9' - if RUBY_VERSION != current_version - warn_syntax_deviation 'parser/ruby25', current_version - end - - require 'parser/ruby25' - CurrentRuby = Ruby25 - - when /^2\.6\./ - current_version = '2.6.10' - if RUBY_VERSION != current_version - warn_syntax_deviation 'parser/ruby26', current_version - end - - require 'parser/ruby26' - CurrentRuby = Ruby26 - - when /^2\.7\./ - current_version = '2.7.8' - if RUBY_VERSION != current_version - warn_syntax_deviation 'parser/ruby27', current_version - end - - require 'parser/ruby27' - CurrentRuby = Ruby27 - - when /^3\.0\./ - current_version = '3.0.6' - if RUBY_VERSION != current_version - warn_syntax_deviation 'parser/ruby30', current_version - end - - require 'parser/ruby30' - CurrentRuby = Ruby30 - - when /^3\.1\./ - current_version = '3.1.4' - if RUBY_VERSION != current_version - warn_syntax_deviation 'parser/ruby31', current_version - end - - require 'parser/ruby31' - CurrentRuby = Ruby31 - - when /^3\.2\./ - current_version = '3.2.3' - if RUBY_VERSION != current_version - warn_syntax_deviation 'parser/ruby32', current_version - end - - require 'parser/ruby32' - CurrentRuby = Ruby32 - - when /^3\.3\./ - current_version = '3.3.0' - if RUBY_VERSION != current_version - warn_syntax_deviation 'parser/ruby33', current_version - end - - require 'parser/ruby33' - CurrentRuby = Ruby33 - - when /^3\.4\./ - current_version = '3.4.0' - if RUBY_VERSION != current_version - warn_syntax_deviation 'parser/ruby34', current_version - end - - require 'parser/ruby34' - CurrentRuby = Ruby34 - - else # :nocov: - # Keep this in sync with released Ruby. - warn_syntax_deviation 'parser/ruby33', '3.3.x' - require 'parser/ruby33' - CurrentRuby = Ruby33 - end -end diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/current_arg_stack.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/current_arg_stack.rb deleted file mode 100644 index d0d58027..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/current_arg_stack.rb +++ /dev/null @@ -1,46 +0,0 @@ -# frozen_string_literal: true - -module Parser - # Stack that holds names of current arguments, - # i.e. while parsing - # def m1(a = (def m2(b = def m3(c = 1); end); end)); end - # ^ - # stack is [:a, :b, :c] - # - # Emulates `p->cur_arg` in MRI's parse.y - # - # @api private - # - class CurrentArgStack - attr_reader :stack - - def initialize - @stack = [] - freeze - end - - def empty? - @stack.size == 0 - end - - def push(value) - @stack << value - end - - def set(value) - @stack[@stack.length - 1] = value - end - - def pop - @stack.pop - end - - def reset - @stack.clear - end - - def top - @stack.last - end - end -end diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/deprecation.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/deprecation.rb deleted file mode 100644 index 0e9b6ed7..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/deprecation.rb +++ /dev/null @@ -1,13 +0,0 @@ -# frozen_string_literal: true - -module Parser - ## - # @api private - # - module Deprecation - attr_writer :warned_of_deprecation - def warn_of_deprecation - @warned_of_deprecation ||= warn(self::DEPRECATION_WARNING) || true - end - end -end diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/diagnostic.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/diagnostic.rb deleted file mode 100644 index e9f1b0a9..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/diagnostic.rb +++ /dev/null @@ -1,163 +0,0 @@ -# frozen_string_literal: true - -module Parser - - ## - # @api public - # - # @!attribute [r] level - # @see LEVELS - # @return [Symbol] diagnostic level - # - # @!attribute [r] reason - # @see Parser::MESSAGES - # @return [Symbol] reason for error - # - # @!attribute [r] arguments - # @see Parser::MESSAGES - # @return [Symbol] extended arguments that describe the error - # - # @!attribute [r] message - # @return [String] error message - # - # @!attribute [r] location - # Main error-related source range. - # @return [Parser::Source::Range] - # - # @!attribute [r] highlights - # Supplementary error-related source ranges. - # @return [Array] - # - class Diagnostic - ## - # Collection of the available diagnostic levels. - # - # @return [Array] - # - LEVELS = [:note, :warning, :error, :fatal].freeze - - attr_reader :level, :reason, :arguments - attr_reader :location, :highlights - - ## - # @param [Symbol] level - # @param [Symbol] reason - # @param [Hash] arguments - # @param [Parser::Source::Range] location - # @param [Array] highlights - # - def initialize(level, reason, arguments, location, highlights=[]) - unless LEVELS.include?(level) - raise ArgumentError, - "Diagnostic#level must be one of #{LEVELS.join(', ')}; " \ - "#{level.inspect} provided." - end - raise 'Expected a location' unless location - - @level = level - @reason = reason - @arguments = (arguments || {}).dup.freeze - @location = location - @highlights = highlights.dup.freeze - - freeze - end - - ## - # @return [String] the rendered message. - # - def message - Messages.compile(@reason, @arguments) - end - - ## - # Renders the diagnostic message as a clang-like diagnostic. - # - # @example - # diagnostic.render # => - # # [ - # # "(fragment:0):1:5: error: unexpected token $end", - # # "foo +", - # # " ^" - # # ] - # - # @return [Array] - # - def render - if @location.line == @location.last_line || @location.is?("\n") - ["#{@location}: #{@level}: #{message}"] + render_line(@location) - else - # multi-line diagnostic - first_line = first_line_only(@location) - last_line = last_line_only(@location) - num_lines = (@location.last_line - @location.line) + 1 - buffer = @location.source_buffer - - last_lineno, last_column = buffer.decompose_position(@location.end_pos) - ["#{@location}-#{last_lineno}:#{last_column}: #{@level}: #{message}"] + - render_line(first_line, num_lines > 2, false) + - render_line(last_line, false, true) - end - end - - private - - ## - # Renders one source line in clang diagnostic style, with highlights. - # - # @return [Array] - # - def render_line(range, ellipsis=false, range_end=false) - source_line = range.source_line - highlight_line = ' ' * source_line.length - - @highlights.each do |highlight| - line_range = range.source_buffer.line_range(range.line) - if highlight = highlight.intersect(line_range) - highlight_line[highlight.column_range] = '~' * highlight.size - end - end - - if range.is?("\n") - highlight_line += "^" - else - if !range_end && range.size >= 1 - highlight_line[range.column_range] = '^' + '~' * (range.size - 1) - else - highlight_line[range.column_range] = '~' * range.size - end - end - - highlight_line += '...' if ellipsis - - [source_line, highlight_line]. - map { |line| "#{range.source_buffer.name}:#{range.line}: #{line}" } - end - - ## - # If necessary, shrink a `Range` so as to include only the first line. - # - # @return [Parser::Source::Range] - # - def first_line_only(range) - if range.line != range.last_line - range.resize(range.source =~ /\n/) - else - range - end - end - - ## - # If necessary, shrink a `Range` so as to include only the last line. - # - # @return [Parser::Source::Range] - # - def last_line_only(range) - if range.line != range.last_line - range.adjust(begin_pos: range.source =~ /[^\n]*\z/) - else - range - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/diagnostic/engine.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/diagnostic/engine.rb deleted file mode 100644 index a29f6178..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/diagnostic/engine.rb +++ /dev/null @@ -1,104 +0,0 @@ -# frozen_string_literal: true - -module Parser - - ## - # {Parser::Diagnostic::Engine} provides a basic API for dealing with - # diagnostics by delegating them to registered consumers. - # - # @example - # buffer = Parser::Source::Buffer.new(__FILE__, source: 'foobar') - # - # consumer = lambda do |diagnostic| - # puts diagnostic.message - # end - # - # engine = Parser::Diagnostic::Engine.new(consumer) - # diagnostic = Parser::Diagnostic.new( - # :warning, :unexpected_token, { :token => 'abc' }, buffer, 1..2) - # - # engine.process(diagnostic) # => "unexpected token abc" - # - # @api public - # - # @!attribute [rw] consumer - # @return [#call(Diagnostic)] - # - # @!attribute [rw] all_errors_are_fatal - # When set to `true` any error that is encountered will result in - # {Parser::SyntaxError} being raised. - # @return [Boolean] - # - # @!attribute [rw] ignore_warnings - # When set to `true` warnings will be ignored. - # @return [Boolean] - # - class Diagnostic::Engine - attr_accessor :consumer - - attr_accessor :all_errors_are_fatal - attr_accessor :ignore_warnings - - ## - # @param [#call(Diagnostic)] consumer - # - def initialize(consumer=nil) - @consumer = consumer - - @all_errors_are_fatal = false - @ignore_warnings = false - end - - ## - # Processes a `diagnostic`: - # * Passes the diagnostic to the consumer, if it's not a warning when - # `ignore_warnings` is set. - # * After that, raises {Parser::SyntaxError} when `all_errors_are_fatal` - # is set to true. - # - # @param [Parser::Diagnostic] diagnostic - # @return [Parser::Diagnostic::Engine] - # @see ignore? - # @see raise? - # - def process(diagnostic) - if ignore?(diagnostic) - # do nothing - elsif @consumer - @consumer.call(diagnostic) - end - - if raise?(diagnostic) - raise Parser::SyntaxError, diagnostic - end - - self - end - - protected - - ## - # Checks whether `diagnostic` should be ignored. - # - # @param [Parser::Diagnostic] diagnostic - # @return [Boolean] - # - def ignore?(diagnostic) - @ignore_warnings && - diagnostic.level == :warning - end - - ## - # Checks whether `diagnostic` should be raised as an exception. - # - # @param [Parser::Diagnostic] diagnostic - # @return [Boolean] - # - def raise?(diagnostic) - (@all_errors_are_fatal && - diagnostic.level == :error) || - diagnostic.level == :fatal - end - end - -end diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/lexer-F0.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/lexer-F0.rb deleted file mode 100644 index 42cb0dde..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/lexer-F0.rb +++ /dev/null @@ -1,12922 +0,0 @@ -# -*- encoding:utf-8; warn-indent:false; frozen_string_literal: true -*- - -# line 1 "lib/parser/lexer.rl" - -# line 3 "lib/parser/lexer.rl" -# -# === BEFORE YOU START === -# -# Read the Ruby Hacking Guide chapter 11, available in English at -# http://whitequark.org/blog/2013/04/01/ruby-hacking-guide-ch-11-finite-state-lexer/ -# -# Remember two things about Ragel scanners: -# -# 1) Longest match wins. -# -# 2) If two matches have the same length, the first -# in source code wins. -# -# General rules of making Ragel and Bison happy: -# -# * `p` (position) and `@te` contain the index of the character -# they're pointing to ("current"), plus one. `@ts` contains the index -# of the corresponding character. The code for extracting matched token is: -# -# @source_buffer.slice(@ts...@te) -# -# * If your input is `foooooooobar` and the rule is: -# -# 'f' 'o'+ -# -# the result will be: -# -# foooooooobar -# ^ ts=0 ^ p=te=9 -# -# * A Ragel lexer action should not emit more than one token, unless -# you know what you are doing. -# -# * All Ragel commands (fnext, fgoto, ...) end with a semicolon. -# -# * If an action emits the token and transitions to another state, use -# these Ragel commands: -# -# emit($whatever) -# fnext $next_state; fbreak; -# -# If you perform `fgoto` in an action which does not emit a token nor -# rewinds the stream pointer, the parser's side-effectful, -# context-sensitive lookahead actions will break in a hard to detect -# and debug way. -# -# * If an action does not emit a token: -# -# fgoto $next_state; -# -# * If an action features lookbehind, i.e. matches characters with the -# intent of passing them to another action: -# -# p = @ts - 1 -# fgoto $next_state; -# -# or, if the lookbehind consists of a single character: -# -# fhold; fgoto $next_state; -# -# * Ragel merges actions. So, if you have `e_lparen = '(' %act` and -# `c_lparen = '('` and a lexer action `e_lparen | c_lparen`, the result -# _will_ invoke the action `act`. -# -# e_something stands for "something with **e**mbedded action". -# -# * EOF is explicit and is matched by `c_eof`. If you want to introspect -# the state of the lexer, add this rule to the state: -# -# c_eof => do_eof; -# -# * If you proceed past EOF, the lexer will complain: -# -# NoMethodError: undefined method `ord' for nil:NilClass -# - -class Parser::Lexer - - -# line 85 "lib/parser/lexer-F0.rb" -class << self - attr_accessor :_lex_actions - private :_lex_actions, :_lex_actions= -end -self._lex_actions = [ - 0, 1, 0, 1, 16, 1, 17, 1, - 18, 1, 19, 1, 32, 1, 33, 1, - 34, 1, 35, 1, 37, 1, 38, 1, - 39, 1, 40, 1, 41, 1, 42, 1, - 43, 1, 44, 1, 45, 1, 46, 1, - 47, 1, 48, 1, 49, 1, 50, 1, - 51, 1, 52, 1, 53, 1, 54, 1, - 55, 1, 56, 1, 57, 1, 61, 1, - 62, 1, 63, 1, 64, 1, 65, 1, - 66, 1, 67, 1, 68, 1, 69, 1, - 70, 1, 71, 1, 72, 1, 73, 1, - 74, 1, 75, 1, 76, 1, 77, 1, - 78, 1, 79, 1, 80, 1, 81, 1, - 82, 1, 83, 1, 84, 1, 85, 1, - 86, 1, 87, 1, 88, 1, 89, 1, - 90, 1, 91, 1, 93, 1, 94, 1, - 95, 1, 100, 1, 101, 1, 102, 1, - 103, 1, 104, 1, 105, 1, 106, 1, - 107, 1, 112, 1, 113, 1, 114, 1, - 115, 1, 116, 1, 119, 1, 120, 1, - 121, 1, 122, 1, 125, 1, 126, 1, - 128, 1, 129, 1, 130, 1, 131, 1, - 132, 1, 133, 1, 135, 1, 136, 1, - 139, 1, 140, 1, 141, 1, 142, 1, - 144, 1, 145, 1, 155, 1, 156, 1, - 157, 1, 158, 1, 159, 1, 160, 1, - 161, 1, 162, 1, 163, 1, 164, 1, - 165, 1, 166, 1, 168, 1, 169, 1, - 170, 1, 171, 1, 172, 1, 173, 1, - 174, 1, 176, 1, 178, 1, 179, 1, - 180, 1, 184, 1, 186, 1, 187, 1, - 189, 1, 190, 1, 191, 1, 192, 1, - 193, 1, 194, 1, 195, 1, 196, 1, - 197, 1, 198, 1, 199, 1, 200, 1, - 201, 1, 203, 1, 204, 1, 205, 1, - 206, 1, 207, 1, 208, 1, 210, 1, - 211, 1, 230, 1, 231, 1, 232, 1, - 233, 1, 234, 1, 235, 1, 236, 1, - 237, 1, 238, 1, 240, 1, 241, 1, - 242, 1, 243, 1, 244, 1, 246, 1, - 247, 1, 248, 1, 250, 1, 252, 1, - 254, 1, 255, 1, 256, 1, 258, 1, - 259, 1, 260, 1, 263, 1, 264, 1, - 266, 1, 267, 1, 268, 1, 269, 1, - 270, 1, 271, 1, 274, 1, 275, 1, - 276, 1, 277, 1, 278, 1, 279, 1, - 280, 1, 281, 1, 282, 1, 283, 1, - 286, 1, 287, 1, 288, 1, 289, 1, - 290, 1, 291, 1, 292, 1, 293, 1, - 294, 1, 295, 1, 296, 2, 0, 18, - 2, 0, 100, 2, 0, 104, 2, 0, - 105, 2, 0, 167, 2, 0, 169, 2, - 0, 239, 2, 0, 284, 2, 0, 285, - 2, 0, 288, 2, 0, 289, 2, 2, - 249, 2, 3, 249, 2, 4, 249, 2, - 5, 249, 2, 6, 249, 2, 7, 249, - 2, 9, 251, 2, 10, 251, 2, 11, - 251, 2, 12, 251, 2, 13, 251, 2, - 14, 111, 2, 14, 134, 2, 14, 181, - 2, 14, 245, 2, 15, 261, 2, 16, - 0, 2, 16, 32, 2, 16, 33, 2, - 16, 34, 2, 16, 75, 2, 16, 84, - 2, 16, 94, 2, 16, 105, 2, 16, - 116, 2, 16, 118, 2, 16, 135, 2, - 16, 142, 2, 16, 143, 2, 16, 155, - 2, 16, 168, 2, 16, 190, 2, 16, - 201, 2, 16, 202, 2, 16, 208, 2, - 16, 209, 2, 16, 264, 2, 16, 265, - 2, 16, 292, 2, 17, 18, 2, 18, - 0, 2, 18, 75, 2, 18, 84, 2, - 18, 94, 2, 18, 117, 2, 18, 135, - 2, 18, 142, 2, 18, 190, 2, 18, - 201, 2, 18, 208, 2, 18, 264, 2, - 18, 292, 2, 19, 92, 2, 19, 177, - 2, 19, 188, 2, 19, 271, 2, 20, - 92, 2, 20, 177, 2, 20, 188, 2, - 20, 257, 2, 21, 177, 2, 21, 188, - 2, 22, 177, 2, 22, 188, 2, 23, - 177, 2, 23, 188, 2, 24, 177, 2, - 24, 198, 2, 25, 177, 2, 25, 188, - 2, 26, 177, 2, 27, 253, 2, 28, - 110, 2, 28, 182, 2, 28, 262, 2, - 29, 261, 2, 30, 108, 2, 30, 109, - 2, 30, 127, 2, 30, 183, 2, 30, - 260, 2, 31, 261, 2, 35, 0, 2, - 36, 175, 2, 37, 179, 2, 38, 179, - 2, 39, 185, 2, 41, 47, 2, 42, - 47, 2, 43, 47, 2, 44, 47, 2, - 45, 47, 2, 46, 47, 2, 47, 1, - 2, 53, 0, 2, 53, 49, 2, 53, - 58, 2, 53, 59, 2, 53, 60, 2, - 53, 96, 2, 53, 97, 2, 53, 98, - 2, 53, 99, 2, 53, 123, 2, 53, - 124, 2, 53, 137, 2, 53, 138, 2, - 53, 147, 2, 53, 148, 2, 53, 149, - 2, 53, 150, 2, 53, 151, 2, 53, - 152, 2, 53, 153, 2, 53, 154, 2, - 53, 212, 2, 53, 213, 2, 53, 215, - 2, 53, 216, 2, 53, 217, 2, 53, - 218, 2, 53, 219, 2, 53, 220, 2, - 53, 221, 2, 53, 223, 2, 53, 224, - 2, 53, 225, 2, 53, 226, 2, 53, - 227, 2, 53, 228, 2, 53, 229, 2, - 53, 272, 2, 53, 273, 3, 17, 18, - 0, 3, 17, 18, 75, 3, 17, 18, - 84, 3, 17, 18, 94, 3, 17, 18, - 117, 3, 17, 18, 135, 3, 17, 18, - 142, 3, 17, 18, 190, 3, 17, 18, - 201, 3, 17, 18, 208, 3, 17, 18, - 264, 3, 17, 18, 292, 3, 45, 47, - 1, 3, 46, 47, 1, 3, 47, 1, - 249, 3, 48, 8, 251, 3, 49, 8, - 251, 3, 53, 0, 99, 3, 53, 16, - 98, 3, 53, 16, 124, 3, 53, 16, - 272, 3, 53, 18, 146, 3, 53, 18, - 214, 3, 53, 18, 272, 3, 53, 33, - 97, 3, 53, 39, 152, 3, 53, 39, - 153, 3, 53, 45, 221, 4, 41, 47, - 1, 249, 4, 42, 47, 1, 249, 4, - 43, 47, 1, 249, 4, 44, 47, 1, - 249, 4, 45, 47, 1, 249, 4, 46, - 47, 1, 249, 4, 53, 16, 33, 97, - 4, 53, 17, 18, 146, 4, 53, 17, - 18, 272, 4, 53, 47, 1, 222, 5, - 53, 45, 47, 1, 222, 5, 53, 46, - 47, 1, 222 -] - -class << self - attr_accessor :_lex_trans_keys - private :_lex_trans_keys, :_lex_trans_keys= -end -self._lex_trans_keys = [ - 0, 0, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 58, 58, 58, 58, 46, 46, - 0, 127, 58, 58, 60, - 60, 62, 62, 10, 10, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 115, 115, - 99, 99, 117, 117, 101, - 101, 108, 116, 101, 101, - 115, 115, 115, 115, 105, 105, - 108, 108, 105, 105, 108, - 108, 58, 58, 0, 127, - 10, 10, 0, 127, 9, 92, - 10, 10, 9, 92, 58, - 58, 98, 98, 101, 101, - 103, 103, 105, 105, 110, 110, - 0, 127, 61, 61, 9, - 92, 9, 92, 9, 92, - 9, 92, 9, 92, 10, 10, - 0, 127, 0, 127, 61, - 126, 93, 93, 0, 127, - 0, 127, 10, 10, 34, 34, - 10, 10, 39, 39, 0, - 127, 10, 96, 96, 96, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 58, 58, 58, 58, - 0, 127, 43, 57, 48, 57, - 48, 57, 48, 57, 48, - 57, 115, 115, 99, 99, - 117, 117, 101, 101, 99, 99, - 117, 117, 101, 101, 0, - 127, 58, 58, 9, 92, - 9, 92, 9, 92, 9, 92, - 9, 92, 9, 92, 60, - 60, 10, 10, 9, 92, - 9, 92, 10, 10, 10, 10, - 10, 10, 10, 10, 46, - 46, 101, 101, 103, 103, - 105, 105, 110, 110, 69, 69, - 78, 78, 68, 68, 95, - 95, 95, 95, 0, 26, - 0, 0, 36, 64, 0, 127, - 48, 57, 0, 127, 0, - 127, 0, 127, 0, 127, - 9, 32, 0, 0, 61, 126, - 10, 10, 10, 10, 0, - 127, 0, 127, 48, 57, - 115, 115, 38, 38, 42, 42, - 64, 64, 58, 58, 60, - 61, 62, 62, 61, 126, - 61, 61, 61, 62, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 93, 93, 10, 10, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 124, 124, 0, 127, - 0, 127, 9, 32, 10, 10, - 10, 10, 46, 46, 10, - 10, 0, 0, 0, 127, - 0, 127, 61, 61, 0, 0, - 9, 32, 0, 0, 61, - 126, 10, 10, 10, 10, - 38, 38, 42, 42, 64, 64, - 60, 61, 62, 62, 61, - 126, 61, 61, 61, 62, - 0, 127, 93, 93, 10, 10, - 124, 124, 0, 126, 0, - 127, 0, 61, 9, 61, - 9, 61, 0, 0, 9, 61, - 9, 62, 46, 46, 46, - 46, 58, 58, 9, 32, - 0, 0, 0, 127, 0, 0, - 9, 124, 0, 0, 10, - 10, 10, 10, 0, 0, - 9, 61, 58, 58, 60, 60, - 62, 62, 9, 32, 10, - 10, 0, 127, 102, 102, - 101, 101, 110, 110, 104, 104, - 0, 127, 0, 127, 0, - 127, 0, 0, 0, 127, - 10, 10, 0, 123, 9, 32, - 10, 10, 10, 10, 10, - 10, 0, 0, 111, 111, - 0, 0, 0, 127, 0, 127, - 9, 32, 0, 0, 10, - 10, 10, 10, 10, 10, - 0, 0, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 58, 61, 0, 0, 61, - 126, 61, 61, 0, 0, - 0, 0, 0, 0, 9, 32, - 61, 61, 9, 32, 61, - 126, 10, 10, 10, 10, - 0, 127, 38, 61, 0, 0, - 42, 61, 61, 61, 9, - 92, 9, 92, 9, 92, - 46, 46, 46, 46, 10, 10, - 0, 26, 0, 127, 0, - 127, 61, 61, 0, 0, - 61, 126, 61, 62, 0, 0, - 0, 0, 0, 0, 0, - 0, 61, 126, 0, 127, - 48, 57, 38, 38, 42, 42, - 64, 64, 60, 61, 62, - 62, 61, 61, 61, 62, - 0, 127, 48, 57, 0, 127, - 124, 124, 64, 64, 60, - 61, 0, 0, 10, 34, - 10, 39, 96, 96, 62, 62, - 61, 126, 61, 62, 0, - 26, 0, 127, 0, 127, - 0, 127, 0, 0, 10, 10, - 0, 0, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 61, 126, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 0, 61, 124, 0, - 92, 9, 32, 0, 0, - 10, 10, 10, 10, 10, 10, - 0, 0, 0, 127, 0, - 127, 9, 32, 0, 0, - 10, 10, 10, 10, 10, 10, - 0, 0, 0, 127, 0, - 127, 61, 61, 0, 0, - 9, 32, 0, 0, 61, 126, - 10, 10, 10, 10, 0, - 127, 0, 127, 48, 57, - 61, 61, 38, 61, 0, 0, - 0, 0, 42, 61, 61, - 62, 46, 57, 46, 46, - 10, 10, 48, 101, 48, 95, - 46, 120, 48, 114, 43, - 57, 48, 105, 102, 102, - 0, 0, 101, 105, 0, 0, - 0, 0, 48, 114, 48, - 114, 48, 114, 48, 114, - 105, 114, 102, 102, 0, 0, - 101, 105, 115, 115, 0, - 0, 0, 0, 48, 114, - 48, 114, 48, 114, 48, 114, - 48, 114, 48, 114, 48, - 114, 48, 114, 46, 114, - 48, 114, 46, 114, 48, 114, - 58, 58, 60, 61, 62, - 62, 61, 126, 61, 61, - 61, 62, 0, 127, 0, 127, - 0, 0, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 0, - 10, 10, 0, 0, 0, - 0, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 9, 92, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 0, 61, 124, 0, 0, - 9, 92, 9, 92, 9, 92, - 46, 46, 46, 46, 10, - 10, 46, 46, 10, 10, - 10, 61, 10, 10, 10, 101, - 10, 110, 10, 100, 10, - 10, 0, 95, 9, 32, - 0, 0, 10, 10, 10, 10, - 98, 98, 9, 32, 10, - 10, 95, 95, 0 -] - -class << self - attr_accessor :_lex_key_spans - private :_lex_key_spans, :_lex_key_spans= -end -self._lex_key_spans = [ - 0, 128, 128, 128, 128, 128, 128, 128, - 1, 1, 1, 128, 1, 1, 1, 1, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 1, 1, 1, 1, 9, 1, - 1, 1, 1, 1, 1, 1, 1, 128, - 1, 128, 84, 1, 84, 1, 1, 1, - 1, 1, 1, 128, 1, 84, 84, 84, - 84, 84, 1, 128, 128, 66, 1, 128, - 128, 1, 1, 1, 1, 128, 87, 1, - 128, 128, 128, 128, 128, 128, 1, 1, - 128, 15, 10, 10, 10, 10, 1, 1, - 1, 1, 1, 1, 1, 128, 1, 84, - 84, 84, 84, 84, 84, 1, 1, 84, - 84, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 27, - 0, 29, 128, 10, 128, 128, 128, 128, - 24, 0, 66, 1, 1, 128, 128, 10, - 1, 1, 1, 1, 1, 2, 1, 66, - 1, 2, 128, 128, 128, 128, 128, 128, - 128, 1, 1, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 1, 128, - 128, 24, 1, 1, 1, 1, 0, 128, - 128, 1, 0, 24, 0, 66, 1, 1, - 1, 1, 1, 2, 1, 66, 1, 2, - 128, 1, 1, 1, 127, 128, 62, 53, - 53, 0, 53, 54, 1, 1, 1, 24, - 0, 128, 0, 116, 0, 1, 1, 0, - 53, 1, 1, 1, 24, 1, 128, 1, - 1, 1, 1, 128, 128, 128, 0, 128, - 1, 124, 24, 1, 1, 1, 0, 1, - 0, 128, 128, 24, 0, 1, 1, 1, - 0, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 4, 0, 66, 1, 0, - 0, 0, 24, 1, 24, 66, 1, 1, - 128, 24, 0, 20, 1, 84, 84, 84, - 1, 1, 1, 27, 128, 128, 1, 0, - 66, 2, 0, 0, 0, 0, 66, 128, - 10, 1, 1, 1, 2, 1, 1, 2, - 128, 10, 128, 1, 1, 2, 0, 25, - 30, 1, 1, 66, 2, 27, 128, 128, - 128, 0, 1, 0, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 66, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 0, 64, 93, 24, 0, - 1, 1, 1, 0, 128, 128, 24, 0, - 1, 1, 1, 0, 128, 128, 1, 0, - 24, 0, 66, 1, 1, 128, 128, 10, - 1, 24, 0, 0, 20, 2, 12, 1, - 1, 54, 48, 75, 67, 15, 58, 1, - 0, 5, 0, 0, 67, 67, 67, 67, - 10, 1, 0, 5, 1, 0, 0, 67, - 67, 67, 67, 67, 67, 67, 67, 69, - 67, 69, 67, 1, 2, 1, 66, 1, - 2, 128, 128, 0, 128, 128, 128, 128, - 128, 128, 0, 1, 0, 0, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 84, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 0, 64, 0, - 84, 84, 84, 1, 1, 1, 1, 1, - 52, 1, 92, 101, 91, 1, 96, 24, - 0, 1, 1, 1, 24, 1, 1 -] - -class << self - attr_accessor :_lex_index_offsets - private :_lex_index_offsets, :_lex_index_offsets= -end -self._lex_index_offsets = [ - 0, 0, 129, 258, 387, 516, 645, 774, - 903, 905, 907, 909, 1038, 1040, 1042, 1044, - 1046, 1175, 1304, 1433, 1562, 1691, 1820, 1949, - 2078, 2207, 2336, 2465, 2594, 2723, 2852, 2981, - 3110, 3239, 3368, 3370, 3372, 3374, 3376, 3386, - 3388, 3390, 3392, 3394, 3396, 3398, 3400, 3402, - 3531, 3533, 3662, 3747, 3749, 3834, 3836, 3838, - 3840, 3842, 3844, 3846, 3975, 3977, 4062, 4147, - 4232, 4317, 4402, 4404, 4533, 4662, 4729, 4731, - 4860, 4989, 4991, 4993, 4995, 4997, 5126, 5214, - 5216, 5345, 5474, 5603, 5732, 5861, 5990, 5992, - 5994, 6123, 6139, 6150, 6161, 6172, 6183, 6185, - 6187, 6189, 6191, 6193, 6195, 6197, 6326, 6328, - 6413, 6498, 6583, 6668, 6753, 6838, 6840, 6842, - 6927, 7012, 7014, 7016, 7018, 7020, 7022, 7024, - 7026, 7028, 7030, 7032, 7034, 7036, 7038, 7040, - 7068, 7069, 7099, 7228, 7239, 7368, 7497, 7626, - 7755, 7780, 7781, 7848, 7850, 7852, 7981, 8110, - 8121, 8123, 8125, 8127, 8129, 8131, 8134, 8136, - 8203, 8205, 8208, 8337, 8466, 8595, 8724, 8853, - 8982, 9111, 9113, 9115, 9244, 9373, 9502, 9631, - 9760, 9889, 10018, 10147, 10276, 10405, 10534, 10663, - 10792, 10921, 11050, 11179, 11308, 11437, 11566, 11695, - 11824, 11953, 12082, 12211, 12340, 12469, 12598, 12727, - 12856, 12985, 13114, 13243, 13372, 13501, 13630, 13759, - 13888, 14017, 14146, 14275, 14404, 14533, 14662, 14791, - 14920, 15049, 15178, 15307, 15436, 15565, 15694, 15823, - 15952, 16081, 16210, 16339, 16468, 16597, 16726, 16855, - 16984, 17113, 17242, 17371, 17500, 17629, 17758, 17887, - 18016, 18145, 18274, 18403, 18532, 18661, 18790, 18919, - 19048, 19177, 19306, 19435, 19564, 19693, 19822, 19824, - 19953, 20082, 20107, 20109, 20111, 20113, 20115, 20116, - 20245, 20374, 20376, 20377, 20402, 20403, 20470, 20472, - 20474, 20476, 20478, 20480, 20483, 20485, 20552, 20554, - 20557, 20686, 20688, 20690, 20692, 20820, 20949, 21012, - 21066, 21120, 21121, 21175, 21230, 21232, 21234, 21236, - 21261, 21262, 21391, 21392, 21509, 21510, 21512, 21514, - 21515, 21569, 21571, 21573, 21575, 21600, 21602, 21731, - 21733, 21735, 21737, 21739, 21868, 21997, 22126, 22127, - 22256, 22258, 22383, 22408, 22410, 22412, 22414, 22415, - 22417, 22418, 22547, 22676, 22701, 22702, 22704, 22706, - 22708, 22709, 22838, 22967, 23096, 23225, 23354, 23483, - 23612, 23741, 23870, 23999, 24128, 24257, 24386, 24515, - 24644, 24773, 24902, 25031, 25036, 25037, 25104, 25106, - 25107, 25108, 25109, 25134, 25136, 25161, 25228, 25230, - 25232, 25361, 25386, 25387, 25408, 25410, 25495, 25580, - 25665, 25667, 25669, 25671, 25699, 25828, 25957, 25959, - 25960, 26027, 26030, 26031, 26032, 26033, 26034, 26101, - 26230, 26241, 26243, 26245, 26247, 26250, 26252, 26254, - 26257, 26386, 26397, 26526, 26528, 26530, 26533, 26534, - 26560, 26591, 26593, 26595, 26662, 26665, 26693, 26822, - 26951, 27080, 27081, 27083, 27084, 27213, 27342, 27471, - 27600, 27729, 27858, 27987, 28116, 28245, 28374, 28503, - 28632, 28761, 28890, 29019, 29148, 29277, 29406, 29535, - 29664, 29793, 29922, 30051, 30180, 30309, 30438, 30567, - 30696, 30825, 30954, 31083, 31212, 31341, 31470, 31599, - 31728, 31857, 31986, 32115, 32244, 32373, 32502, 32631, - 32760, 32889, 33018, 33147, 33276, 33405, 33534, 33663, - 33792, 33921, 34050, 34179, 34308, 34437, 34566, 34695, - 34824, 34953, 35020, 35149, 35278, 35407, 35536, 35665, - 35794, 35923, 36052, 36181, 36310, 36439, 36568, 36697, - 36826, 36955, 37084, 37213, 37342, 37471, 37600, 37729, - 37858, 37987, 38116, 38245, 38246, 38311, 38405, 38430, - 38431, 38433, 38435, 38437, 38438, 38567, 38696, 38721, - 38722, 38724, 38726, 38728, 38729, 38858, 38987, 38989, - 38990, 39015, 39016, 39083, 39085, 39087, 39216, 39345, - 39356, 39358, 39383, 39384, 39385, 39406, 39409, 39422, - 39424, 39426, 39481, 39530, 39606, 39674, 39690, 39749, - 39751, 39752, 39758, 39759, 39760, 39828, 39896, 39964, - 40032, 40043, 40045, 40046, 40052, 40054, 40055, 40056, - 40124, 40192, 40260, 40328, 40396, 40464, 40532, 40600, - 40670, 40738, 40808, 40876, 40878, 40881, 40883, 40950, - 40952, 40955, 41084, 41213, 41214, 41343, 41472, 41601, - 41730, 41859, 41988, 41989, 41991, 41992, 41993, 42122, - 42251, 42380, 42509, 42638, 42767, 42896, 43025, 43154, - 43283, 43412, 43541, 43670, 43799, 43928, 44057, 44186, - 44315, 44444, 44573, 44702, 44831, 44960, 45089, 45218, - 45347, 45476, 45605, 45734, 45863, 45992, 46121, 46250, - 46379, 46508, 46637, 46766, 46851, 46980, 47109, 47238, - 47367, 47496, 47625, 47754, 47883, 48012, 48141, 48270, - 48399, 48528, 48657, 48786, 48915, 49044, 49173, 49302, - 49431, 49560, 49689, 49818, 49947, 50076, 50205, 50334, - 50463, 50592, 50721, 50850, 50979, 51108, 51237, 51366, - 51495, 51624, 51753, 51882, 52011, 52140, 52269, 52398, - 52527, 52656, 52785, 52914, 53043, 53172, 53301, 53430, - 53559, 53688, 53817, 53946, 54075, 54204, 54333, 54462, - 54591, 54720, 54849, 54978, 55107, 55236, 55237, 55302, - 55303, 55388, 55473, 55558, 55560, 55562, 55564, 55566, - 55568, 55621, 55623, 55716, 55818, 55910, 55912, 56009, - 56034, 56035, 56037, 56039, 56041, 56066, 56068 -] - -class << self - attr_accessor :_lex_indicies - private :_lex_indicies, :_lex_indicies= -end -self._lex_indicies = [ - 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, - 2, 1, 1, 2, 1, 2, 1, 1, - 2, 2, 1, 1, 1, 3, 1, 1, - 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 1, 1, 1, 1, 1, 1, - 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2, 1, 2, 2, 0, - 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2, 2, 2, 1, 2, - 0, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, - 2, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 2, 2, 2, 2, 2, - 2, 2, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 2, 2, 2, - 1, 2, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 2, 2, 2, - 2, 1, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 2, 2, 2, 2, - 2, 2, 6, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 2, 2, 2, - 2, 5, 2, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 2, 2, 2, - 2, 2, 5, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 2, 2, 2, - 2, 2, 2, 2, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 2, 2, - 2, 2, 7, 2, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 2, 2, - 2, 2, 2, 7, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 8, 8, - 8, 8, 8, 8, 8, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 8, - 8, 8, 8, 9, 8, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 8, - 8, 8, 8, 8, 9, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 11, 11, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 11, - 11, 11, 11, 11, 11, 11, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, - 11, 11, 11, 11, 11, 11, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, - 11, 11, 11, 11, 11, 10, 12, 12, - 12, 12, 12, 12, 12, 12, 12, 12, - 12, 12, 12, 12, 12, 12, 12, 12, - 12, 12, 12, 12, 12, 12, 12, 12, - 12, 12, 12, 12, 12, 12, 12, 14, - 12, 12, 12, 12, 12, 12, 12, 12, - 12, 12, 12, 12, 12, 12, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, - 15, 12, 12, 12, 12, 14, 12, 13, - 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, - 13, 12, 12, 12, 12, 13, 12, 13, - 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, - 13, 12, 12, 12, 12, 12, 13, 15, - 12, 12, 16, 17, 12, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 20, 18, - 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 21, - 18, 18, 18, 18, 20, 18, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 18, 18, 18, 18, 19, 18, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 18, 18, 18, 18, 18, 19, 21, 18, - 23, 22, 24, 22, 25, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 27, - 22, 27, 27, 27, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 27, 22, - 22, 22, 22, 28, 29, 22, 30, 22, - 31, 32, 33, 34, 35, 28, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 36, 22, 37, 33, 38, 39, 22, 26, - 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, - 26, 40, 41, 33, 42, 26, 22, 26, - 26, 26, 26, 26, 26, 26, 26, 43, - 26, 26, 26, 26, 26, 26, 26, 26, - 44, 26, 26, 45, 26, 46, 26, 26, - 26, 47, 48, 22, 42, 22, 26, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 49, 22, 49, 49, 49, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 49, - 22, 22, 22, 22, 50, 51, 22, 52, - 22, 53, 54, 55, 56, 57, 50, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 58, 22, 59, 55, 60, 61, 22, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 62, 63, 55, 24, 19, 22, - 19, 19, 19, 19, 19, 19, 19, 19, - 64, 19, 19, 19, 19, 19, 19, 19, - 19, 65, 19, 19, 66, 19, 67, 19, - 19, 19, 68, 69, 22, 24, 22, 19, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 20, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 21, 22, 22, 22, 22, 20, - 22, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 22, 22, 22, 22, 19, - 22, 19, 19, 19, 19, 19, 70, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 22, 22, 22, 22, 22, - 19, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 20, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 21, 22, 22, 22, 22, - 20, 22, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 22, 22, 22, 22, - 19, 22, 19, 19, 19, 19, 71, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 22, 22, 22, 22, - 22, 19, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 20, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 21, 22, 22, 22, - 22, 20, 22, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 22, 22, 22, - 22, 19, 22, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 72, 19, 19, - 19, 19, 19, 19, 19, 22, 22, 22, - 22, 22, 19, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 20, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 21, 22, 22, - 22, 22, 20, 22, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 22, 22, - 22, 22, 19, 22, 19, 19, 73, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 22, 22, - 22, 22, 22, 19, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 20, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 21, 22, - 22, 22, 22, 20, 22, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 22, - 22, 22, 22, 19, 22, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 74, 19, 19, 19, 19, 19, 22, - 22, 22, 22, 22, 19, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 20, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 21, - 22, 22, 22, 22, 20, 22, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 22, 22, 22, 22, 19, 22, 19, 19, - 19, 19, 70, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 22, 22, 22, 22, 22, 19, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 20, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 21, 22, 22, 22, 22, 20, 22, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 22, 22, 22, 22, 19, 22, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 75, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 22, 22, 22, 22, 22, 19, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 20, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 21, 22, 22, 22, 22, 20, 22, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 22, 22, 22, 22, 19, 22, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 76, 19, 19, 19, 19, - 19, 19, 19, 77, 19, 19, 19, 19, - 19, 19, 22, 22, 22, 22, 22, 19, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 20, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 21, 22, 22, 22, 22, 20, - 22, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 22, 22, 22, 22, 19, - 22, 19, 19, 19, 19, 78, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 22, 22, 22, 22, 22, - 19, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 20, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 21, 22, 22, 22, 22, - 20, 22, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 22, 22, 22, 22, - 19, 22, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 79, 19, 19, 19, - 19, 19, 19, 19, 22, 22, 22, 22, - 22, 19, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 20, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 21, 22, 22, 22, - 22, 20, 22, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 22, 22, 22, - 22, 19, 22, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 70, 19, 19, - 19, 19, 19, 19, 19, 22, 22, 22, - 22, 22, 19, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 20, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 21, 22, 22, - 22, 22, 20, 22, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 22, 22, - 22, 22, 19, 22, 19, 19, 19, 19, - 19, 19, 19, 19, 80, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 22, 22, - 22, 22, 22, 19, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 20, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 21, 22, - 22, 22, 22, 20, 22, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 22, - 22, 22, 22, 19, 22, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 70, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 22, - 22, 22, 22, 22, 19, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 20, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 21, - 22, 22, 22, 22, 20, 22, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 22, 22, 22, 22, 19, 22, 19, 19, - 19, 19, 19, 19, 19, 81, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 22, 22, 22, 22, 22, 19, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 20, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 21, 22, 22, 22, 22, 20, 22, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 22, 22, 22, 22, 19, 22, 19, - 19, 19, 19, 19, 19, 19, 19, 82, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 22, 22, 22, 22, 22, 19, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 20, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 21, 22, 22, 22, 22, 20, 22, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 22, 22, 22, 22, 19, 22, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 74, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 22, 22, 22, 22, 22, 19, - 84, 83, 85, 83, 86, 83, 55, 83, - 87, 83, 83, 83, 83, 83, 83, 83, - 88, 83, 89, 83, 90, 83, 55, 83, - 91, 83, 55, 83, 92, 83, 86, 83, - 94, 93, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 97, 95, 97, 97, 97, - 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 97, 95, 95, 95, 95, 95, - 95, 95, 98, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 96, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 95, 99, 95, - 95, 96, 95, 96, 96, 96, 100, 96, - 96, 96, 96, 96, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 95, 95, 95, - 95, 95, 96, 101, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 103, 95, - 103, 103, 103, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 103, 95, 95, - 95, 95, 95, 95, 95, 104, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 95, 105, 95, 95, 102, 95, 102, 102, - 102, 106, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 95, 95, 95, 95, 95, 102, 108, 107, - 108, 108, 108, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 108, 107, 107, - 107, 107, 107, 107, 107, 109, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 110, 107, 111, 107, 112, 107, 112, - 112, 112, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 112, 107, 107, 107, - 107, 107, 107, 107, 113, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 114, 107, 115, 116, 118, 117, 119, 117, - 120, 117, 121, 117, 122, 117, 124, 124, - 124, 124, 124, 124, 124, 124, 124, 124, - 124, 124, 124, 124, 124, 124, 124, 124, - 124, 124, 124, 124, 124, 124, 124, 124, - 124, 124, 124, 124, 124, 124, 124, 124, - 124, 124, 124, 124, 124, 124, 124, 124, - 124, 124, 124, 124, 124, 124, 123, 123, - 123, 123, 123, 123, 123, 123, 123, 123, - 124, 124, 124, 124, 124, 124, 124, 123, - 123, 123, 123, 123, 123, 123, 123, 123, - 123, 123, 123, 123, 123, 123, 123, 123, - 123, 123, 123, 123, 123, 123, 123, 123, - 123, 124, 124, 124, 124, 124, 124, 123, - 123, 123, 123, 123, 123, 123, 123, 123, - 123, 123, 123, 123, 123, 123, 123, 123, - 123, 123, 123, 123, 123, 123, 123, 123, - 123, 124, 124, 124, 124, 124, 123, 125, - 115, 126, 127, 126, 126, 126, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, - 126, 115, 115, 128, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, - 129, 129, 129, 129, 129, 129, 129, 129, - 129, 129, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 130, 115, 131, 132, - 131, 131, 131, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 131, 115, 115, - 133, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 134, 134, 134, - 134, 134, 134, 134, 134, 134, 134, 115, - 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, - 115, 135, 115, 137, 138, 137, 137, 137, - 136, 136, 136, 136, 136, 136, 136, 136, - 136, 136, 136, 136, 136, 136, 136, 136, - 136, 136, 137, 136, 136, 139, 136, 136, - 136, 136, 136, 136, 136, 136, 136, 136, - 136, 136, 140, 140, 140, 140, 140, 140, - 140, 140, 140, 140, 136, 136, 136, 136, - 136, 136, 136, 136, 136, 136, 136, 136, - 136, 136, 136, 136, 136, 136, 136, 136, - 136, 136, 136, 136, 136, 136, 136, 136, - 136, 136, 136, 136, 136, 136, 141, 136, - 143, 144, 143, 143, 143, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 143, - 142, 142, 145, 142, 142, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 142, 142, 142, 142, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 142, - 142, 142, 142, 147, 142, 143, 148, 143, - 143, 143, 142, 142, 142, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 142, - 142, 142, 142, 142, 143, 142, 142, 145, - 142, 142, 142, 142, 142, 142, 142, 142, - 142, 142, 142, 142, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 142, - 147, 142, 127, 115, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 151, 151, 149, - 151, 149, 151, 151, 149, 149, 151, 151, - 151, 152, 151, 151, 153, 153, 153, 153, - 153, 153, 153, 153, 153, 153, 151, 151, - 151, 151, 151, 151, 151, 150, 150, 150, - 150, 150, 150, 150, 150, 150, 150, 150, - 150, 150, 150, 150, 150, 150, 150, 150, - 150, 150, 150, 150, 150, 150, 150, 149, - 151, 149, 149, 150, 151, 150, 150, 150, - 150, 150, 150, 150, 150, 150, 150, 150, - 150, 150, 150, 150, 150, 150, 150, 150, - 150, 150, 150, 150, 150, 150, 150, 149, - 149, 149, 151, 149, 150, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 151, 151, 151, - 151, 151, 151, 151, 151, 151, 151, 149, - 149, 149, 149, 149, 149, 149, 151, 151, - 151, 151, 151, 151, 151, 151, 151, 151, - 151, 151, 151, 151, 151, 151, 151, 151, - 151, 151, 151, 151, 151, 151, 151, 151, - 149, 149, 149, 149, 151, 149, 151, 151, - 151, 151, 151, 151, 151, 151, 151, 151, - 151, 151, 151, 151, 151, 151, 151, 151, - 151, 151, 151, 151, 151, 151, 151, 151, - 149, 149, 149, 149, 149, 151, 154, 151, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 151, - 149, 154, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 156, 149, 149, - 149, 149, 157, 149, 149, 149, 149, 149, - 158, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 125, 149, 149, 149, 155, 155, 155, 155, - 155, 155, 155, 155, 155, 155, 155, 155, - 155, 155, 155, 155, 155, 155, 155, 155, - 155, 155, 155, 155, 155, 155, 149, 149, - 149, 149, 155, 159, 155, 155, 155, 155, - 155, 155, 155, 155, 155, 155, 155, 155, - 155, 155, 155, 155, 155, 155, 155, 155, - 155, 155, 155, 155, 155, 155, 149, 149, - 149, 158, 149, 155, 161, 161, 161, 161, - 161, 161, 161, 161, 161, 161, 162, 161, - 161, 161, 161, 161, 161, 161, 161, 161, - 161, 161, 161, 161, 161, 161, 161, 161, - 161, 161, 161, 161, 161, 161, 161, 161, - 161, 161, 161, 161, 161, 161, 161, 161, - 161, 161, 161, 161, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 161, 161, - 161, 161, 161, 161, 161, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 161, - 161, 161, 161, 160, 161, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 161, - 161, 161, 161, 161, 160, 164, 163, 167, - 166, 162, 161, 167, 168, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 156, - 149, 149, 149, 149, 157, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 155, 155, - 155, 155, 155, 155, 155, 155, 155, 155, - 155, 155, 155, 155, 155, 155, 155, 155, - 155, 155, 155, 155, 155, 155, 155, 155, - 149, 149, 149, 149, 155, 159, 155, 155, - 155, 155, 155, 155, 155, 155, 155, 155, - 155, 155, 155, 155, 155, 155, 155, 155, - 155, 155, 155, 155, 155, 155, 155, 155, - 149, 149, 149, 149, 149, 155, 170, 169, - 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 167, 169, 167, 170, - 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, - 115, 172, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, - 171, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 173, 115, 115, 174, 115, 172, - 115, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 115, 115, 115, 115, 171, - 115, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 115, 115, 115, 115, 115, - 171, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 172, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 173, 149, 149, 174, 149, - 172, 149, 171, 171, 171, 171, 171, 171, - 175, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 149, 149, 149, 149, - 171, 149, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 149, 149, 149, 149, - 149, 171, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 172, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 173, 149, 149, 174, - 149, 172, 149, 171, 171, 171, 171, 171, - 171, 171, 171, 176, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 149, 149, 149, - 149, 171, 149, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 149, 149, 149, - 149, 149, 171, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 172, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 173, 149, 149, - 174, 149, 172, 149, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 171, - 171, 177, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 149, 149, - 149, 149, 171, 149, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 149, 149, - 149, 149, 149, 171, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 172, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 173, 149, - 149, 174, 149, 172, 149, 171, 171, 171, - 177, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 149, - 149, 149, 149, 171, 149, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 149, - 149, 149, 149, 149, 171, 178, 178, 178, - 178, 178, 178, 178, 178, 178, 178, 178, - 178, 178, 178, 178, 178, 178, 178, 178, - 178, 178, 178, 178, 178, 178, 178, 178, - 178, 178, 178, 178, 178, 178, 180, 178, - 178, 178, 178, 178, 178, 178, 178, 178, - 178, 178, 178, 178, 178, 179, 179, 179, - 179, 179, 179, 179, 179, 179, 179, 181, - 178, 178, 178, 178, 180, 178, 179, 179, - 179, 179, 179, 179, 179, 179, 179, 179, - 179, 179, 179, 179, 179, 179, 179, 179, - 179, 179, 179, 179, 179, 179, 179, 179, - 178, 178, 178, 178, 179, 178, 179, 179, - 179, 179, 179, 179, 179, 179, 179, 179, - 179, 179, 179, 179, 179, 179, 179, 179, - 179, 179, 179, 179, 179, 179, 179, 179, - 178, 178, 178, 178, 178, 179, 181, 178, - 178, 182, 183, 183, 183, 183, 183, 183, - 183, 183, 183, 183, 183, 183, 183, 183, - 183, 183, 183, 183, 183, 183, 183, 183, - 183, 183, 183, 183, 183, 183, 183, 183, - 183, 183, 183, 183, 183, 183, 183, 183, - 183, 183, 183, 183, 183, 183, 183, 183, - 183, 183, 184, 184, 184, 184, 184, 184, - 184, 184, 184, 184, 183, 183, 183, 183, - 183, 183, 183, 184, 184, 184, 184, 184, - 184, 184, 184, 184, 184, 184, 184, 184, - 184, 184, 184, 184, 184, 184, 184, 184, - 184, 184, 184, 184, 184, 183, 183, 183, - 183, 184, 183, 184, 184, 184, 184, 184, - 184, 184, 184, 184, 184, 184, 184, 184, - 184, 184, 184, 184, 184, 184, 184, 184, - 184, 184, 184, 184, 184, 183, 183, 183, - 183, 183, 184, 186, 185, 186, 185, 185, - 187, 187, 187, 187, 187, 187, 187, 187, - 187, 187, 185, 187, 187, 187, 187, 187, - 187, 187, 187, 187, 187, 185, 188, 188, - 188, 188, 188, 188, 188, 188, 188, 188, - 185, 190, 190, 190, 190, 190, 190, 190, - 190, 190, 190, 189, 191, 191, 191, 191, - 191, 191, 191, 191, 191, 191, 189, 193, - 192, 194, 192, 195, 192, 196, 192, 198, - 197, 199, 197, 200, 197, 183, 183, 183, - 183, 183, 183, 183, 183, 183, 183, 183, - 183, 183, 183, 183, 183, 183, 183, 183, - 183, 183, 183, 183, 183, 183, 183, 183, - 183, 183, 183, 183, 183, 183, 183, 183, - 183, 183, 183, 183, 183, 183, 183, 183, - 183, 183, 183, 183, 183, 201, 201, 201, - 201, 201, 201, 201, 201, 201, 201, 183, - 183, 183, 183, 183, 183, 183, 201, 201, - 201, 201, 201, 201, 201, 201, 201, 201, - 201, 201, 201, 201, 201, 201, 201, 201, - 201, 201, 201, 201, 201, 201, 201, 201, - 183, 183, 183, 183, 201, 183, 201, 201, - 201, 201, 201, 201, 201, 201, 201, 201, - 201, 201, 201, 201, 201, 201, 201, 201, - 201, 201, 201, 201, 201, 201, 201, 201, - 183, 183, 183, 183, 183, 201, 202, 189, - 203, 204, 203, 203, 203, 189, 189, 189, - 189, 189, 189, 189, 189, 189, 189, 189, - 189, 189, 189, 189, 189, 189, 189, 203, - 189, 189, 205, 189, 189, 189, 189, 189, - 189, 189, 189, 189, 189, 189, 189, 189, - 189, 189, 189, 189, 189, 189, 189, 189, - 189, 189, 189, 206, 189, 189, 189, 189, - 189, 189, 189, 189, 189, 189, 189, 189, - 189, 189, 189, 189, 189, 189, 189, 189, - 189, 189, 189, 189, 189, 189, 189, 189, - 189, 189, 189, 207, 189, 208, 209, 208, - 208, 208, 189, 189, 189, 189, 189, 189, - 189, 189, 189, 189, 189, 189, 189, 189, - 189, 189, 189, 189, 208, 189, 189, 210, - 189, 189, 189, 189, 189, 189, 189, 189, - 189, 189, 189, 189, 189, 189, 189, 189, - 189, 189, 189, 189, 189, 189, 189, 189, - 211, 189, 189, 189, 189, 189, 189, 189, - 189, 189, 189, 189, 189, 189, 189, 189, - 189, 189, 189, 189, 189, 189, 189, 189, - 189, 189, 189, 189, 189, 189, 189, 189, - 212, 189, 214, 215, 214, 214, 214, 213, - 213, 213, 213, 213, 213, 213, 213, 213, - 213, 213, 213, 213, 213, 213, 213, 213, - 213, 214, 213, 213, 216, 213, 213, 213, - 213, 213, 213, 213, 213, 213, 213, 213, - 213, 213, 213, 213, 213, 213, 213, 213, - 213, 213, 213, 213, 213, 217, 213, 213, - 213, 213, 213, 213, 213, 213, 213, 213, - 213, 213, 213, 213, 213, 213, 213, 213, - 213, 213, 213, 213, 213, 213, 213, 213, - 213, 213, 213, 213, 213, 218, 213, 220, - 221, 220, 220, 220, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 220, 219, - 219, 222, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 223, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 224, 219, 220, 221, 220, 220, - 220, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 220, 219, 219, 222, 219, - 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 225, - 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 224, - 219, 220, 226, 220, 220, 220, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, - 220, 219, 219, 222, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 223, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 224, 219, 227, 189, - 204, 189, 229, 230, 229, 229, 229, 228, - 228, 228, 228, 228, 228, 228, 228, 228, - 228, 228, 228, 228, 228, 228, 228, 228, - 228, 229, 228, 228, 231, 228, 228, 232, - 228, 228, 228, 228, 228, 228, 228, 233, - 228, 228, 228, 228, 228, 228, 228, 228, - 228, 228, 228, 228, 228, 228, 228, 228, - 228, 228, 228, 228, 228, 228, 228, 228, - 228, 228, 228, 228, 228, 228, 228, 228, - 228, 228, 228, 228, 228, 228, 228, 228, - 228, 228, 228, 228, 228, 234, 228, 236, - 230, 236, 236, 236, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 236, 235, - 235, 231, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 234, 235, 239, 238, 241, 240, - 242, 237, 243, 237, 244, 228, 246, 245, - 247, 245, 248, 245, 249, 245, 250, 245, - 251, 245, 252, 245, 253, 245, 254, 245, - 255, 245, 245, 245, 255, 245, 245, 245, - 245, 245, 256, 245, 245, 245, 245, 245, - 245, 245, 245, 245, 245, 245, 245, 245, - 245, 245, 255, 245, 257, 258, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, - 2, 259, 2, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 260, 260, 260, - 260, 260, 260, 260, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 260, 260, - 260, 260, 0, 260, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 260, 260, - 260, 260, 260, 0, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 260, 261, - 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 5, - 5, 5, 5, 5, 5, 5, 5, 5, - 5, 261, 261, 261, 261, 261, 261, 261, - 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 261, 261, 261, 261, 5, 261, - 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 261, 261, 261, 261, 261, 5, - 262, 262, 262, 262, 262, 262, 262, 262, - 262, 262, 262, 262, 262, 262, 262, 262, - 262, 262, 262, 262, 262, 262, 262, 262, - 262, 262, 262, 262, 262, 262, 262, 262, - 262, 262, 262, 262, 262, 262, 262, 262, - 262, 262, 262, 262, 262, 262, 262, 262, - 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 262, 262, 262, 262, 262, 262, - 262, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 262, 262, 262, 262, 7, - 262, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 262, 262, 262, 262, 262, - 7, 264, 265, 265, 265, 264, 265, 265, - 265, 265, 266, 267, 266, 266, 266, 265, - 265, 265, 265, 265, 265, 265, 265, 265, - 265, 265, 265, 264, 265, 265, 265, 265, - 265, 266, 268, 265, 269, 270, 271, 272, - 265, 265, 265, 273, 274, 265, 274, 265, - 275, 265, 265, 265, 265, 265, 265, 265, - 265, 265, 265, 276, 265, 277, 278, 279, - 265, 265, 280, 281, 280, 280, 282, 280, - 280, 280, 280, 280, 280, 280, 280, 280, - 280, 280, 280, 280, 280, 280, 280, 280, - 280, 280, 280, 280, 283, 284, 265, 275, - 285, 275, 286, 287, 288, 289, 290, 291, - 263, 263, 292, 263, 263, 263, 293, 294, - 295, 263, 263, 296, 297, 298, 299, 263, - 300, 263, 301, 263, 265, 302, 265, 274, - 265, 263, 303, 303, 303, 303, 303, 303, - 303, 303, 303, 303, 303, 303, 303, 303, - 303, 303, 303, 303, 303, 303, 303, 303, - 303, 303, 303, 303, 303, 303, 303, 303, - 303, 303, 303, 304, 303, 303, 303, 303, - 303, 303, 303, 303, 303, 303, 303, 303, - 303, 303, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 303, 303, 303, 304, - 303, 304, 303, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 303, 303, 303, - 303, 263, 303, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 303, 303, 303, - 303, 303, 263, 266, 305, 266, 266, 266, - 305, 305, 305, 305, 305, 305, 305, 305, - 305, 305, 305, 305, 305, 305, 305, 305, - 305, 305, 266, 305, 306, 275, 307, 307, - 275, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 275, 307, - 308, 309, 310, 311, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 9, 9, 312, - 9, 312, 9, 9, 312, 312, 9, 9, - 9, 314, 9, 9, 315, 315, 315, 315, - 315, 315, 315, 315, 315, 315, 9, 9, - 9, 9, 9, 9, 9, 313, 313, 313, - 313, 313, 313, 313, 313, 313, 313, 313, - 313, 313, 313, 313, 313, 313, 313, 313, - 313, 313, 313, 313, 313, 313, 313, 312, - 9, 312, 312, 313, 9, 313, 313, 313, - 313, 313, 313, 313, 313, 313, 313, 313, - 313, 313, 313, 313, 313, 313, 313, 313, - 313, 313, 313, 313, 313, 313, 313, 312, - 312, 312, 9, 312, 313, 316, 316, 316, - 316, 316, 316, 316, 316, 316, 316, 316, - 316, 316, 316, 316, 316, 316, 316, 316, - 316, 316, 316, 316, 316, 316, 316, 316, - 316, 316, 316, 316, 316, 316, 316, 316, - 316, 316, 316, 316, 316, 316, 316, 316, - 316, 316, 316, 316, 316, 313, 313, 313, - 313, 313, 313, 313, 313, 313, 313, 316, - 316, 316, 316, 316, 316, 316, 313, 313, - 313, 313, 313, 313, 313, 313, 313, 313, - 313, 313, 313, 313, 313, 313, 313, 313, - 313, 313, 313, 313, 313, 313, 313, 313, - 316, 316, 316, 316, 313, 316, 313, 313, - 313, 313, 313, 313, 313, 313, 313, 313, - 313, 313, 313, 313, 313, 313, 313, 313, - 313, 313, 313, 313, 313, 313, 313, 313, - 316, 316, 316, 316, 316, 313, 315, 315, - 315, 315, 315, 315, 315, 315, 315, 315, - 316, 317, 307, 275, 307, 275, 307, 275, - 307, 319, 318, 275, 320, 307, 275, 307, - 321, 275, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, - 312, 275, 312, 275, 307, 275, 275, 307, - 303, 303, 303, 303, 303, 303, 303, 303, - 303, 303, 303, 303, 303, 303, 303, 303, - 303, 303, 303, 303, 303, 303, 303, 303, - 303, 303, 303, 303, 303, 303, 303, 303, - 303, 304, 303, 303, 303, 303, 303, 303, - 303, 303, 303, 303, 303, 303, 303, 303, - 280, 280, 280, 280, 280, 280, 280, 280, - 280, 280, 303, 303, 303, 304, 303, 304, - 303, 280, 280, 280, 280, 280, 280, 280, - 280, 280, 280, 280, 280, 280, 280, 280, - 280, 280, 280, 280, 280, 280, 280, 280, - 280, 280, 280, 303, 303, 303, 303, 280, - 303, 280, 280, 280, 280, 280, 280, 280, - 280, 280, 280, 280, 280, 280, 280, 280, - 280, 280, 280, 280, 280, 280, 280, 280, - 280, 280, 280, 303, 303, 303, 303, 303, - 280, 322, 322, 322, 322, 322, 322, 322, - 322, 322, 322, 322, 322, 322, 322, 322, - 322, 322, 322, 322, 322, 322, 322, 322, - 322, 322, 322, 322, 322, 322, 322, 322, - 322, 322, 304, 322, 322, 322, 322, 322, - 322, 322, 322, 322, 322, 322, 322, 322, - 322, 280, 280, 280, 280, 280, 280, 280, - 280, 280, 280, 322, 322, 322, 304, 322, - 304, 322, 280, 280, 280, 280, 323, 280, - 280, 280, 280, 280, 280, 280, 280, 280, - 280, 280, 280, 280, 280, 280, 280, 280, - 280, 280, 280, 280, 322, 322, 322, 322, - 280, 322, 280, 280, 280, 280, 280, 280, - 280, 280, 280, 280, 280, 280, 280, 280, - 280, 280, 280, 280, 280, 280, 280, 280, - 280, 280, 280, 280, 322, 322, 322, 322, - 322, 280, 322, 322, 322, 322, 322, 322, - 322, 322, 322, 322, 322, 322, 322, 322, - 322, 322, 322, 322, 322, 322, 322, 322, - 322, 322, 322, 322, 322, 322, 322, 322, - 322, 322, 322, 304, 322, 322, 322, 322, - 322, 322, 322, 322, 322, 322, 322, 322, - 322, 322, 280, 280, 280, 280, 280, 280, - 280, 280, 280, 280, 322, 322, 322, 304, - 322, 304, 322, 280, 280, 280, 280, 280, - 280, 324, 280, 280, 280, 280, 280, 280, - 280, 280, 280, 280, 280, 280, 280, 280, - 280, 280, 280, 280, 280, 322, 322, 322, - 322, 280, 322, 280, 280, 280, 280, 280, - 280, 280, 280, 280, 280, 280, 280, 280, - 280, 280, 280, 280, 280, 280, 280, 280, - 280, 280, 280, 280, 280, 322, 322, 322, - 322, 322, 280, 322, 322, 322, 322, 322, - 322, 322, 322, 322, 322, 322, 322, 322, - 322, 322, 322, 322, 322, 322, 322, 322, - 322, 322, 322, 322, 322, 322, 322, 322, - 322, 322, 322, 322, 304, 322, 322, 322, - 322, 322, 322, 322, 322, 322, 322, 322, - 322, 322, 322, 280, 280, 280, 280, 280, - 280, 280, 280, 280, 280, 322, 322, 322, - 304, 322, 304, 322, 280, 280, 280, 280, - 280, 280, 280, 280, 325, 280, 280, 280, - 280, 280, 280, 280, 280, 280, 280, 280, - 280, 280, 280, 280, 280, 280, 322, 322, - 322, 322, 280, 322, 280, 280, 280, 280, - 280, 280, 280, 280, 280, 280, 280, 280, - 280, 280, 280, 280, 280, 280, 280, 280, - 280, 280, 280, 280, 280, 280, 322, 322, - 322, 322, 322, 280, 322, 322, 322, 322, - 322, 322, 322, 322, 322, 322, 322, 322, - 322, 322, 322, 322, 322, 322, 322, 322, - 322, 322, 322, 322, 322, 322, 322, 322, - 322, 322, 322, 322, 322, 304, 322, 322, - 322, 322, 322, 322, 322, 322, 322, 322, - 322, 322, 322, 322, 280, 280, 280, 280, - 280, 280, 280, 280, 280, 280, 322, 322, - 322, 304, 322, 304, 322, 280, 280, 280, - 280, 280, 280, 280, 280, 280, 280, 280, - 280, 280, 326, 280, 280, 280, 280, 280, - 280, 280, 280, 280, 280, 280, 280, 322, - 322, 322, 322, 280, 322, 280, 280, 280, - 280, 280, 280, 280, 280, 280, 280, 280, - 280, 280, 280, 280, 280, 280, 280, 280, - 280, 280, 280, 280, 280, 280, 280, 322, - 322, 322, 322, 322, 280, 322, 322, 322, - 322, 322, 322, 322, 322, 322, 322, 322, - 322, 322, 322, 322, 322, 322, 322, 322, - 322, 322, 322, 322, 322, 322, 322, 322, - 322, 322, 322, 322, 322, 322, 304, 322, - 322, 322, 322, 322, 322, 322, 322, 322, - 322, 322, 322, 322, 322, 280, 280, 280, - 280, 280, 280, 280, 280, 280, 280, 322, - 322, 322, 304, 322, 304, 322, 280, 280, - 280, 280, 280, 280, 280, 280, 280, 280, - 280, 280, 280, 327, 280, 280, 280, 280, - 280, 280, 280, 280, 280, 280, 280, 280, - 322, 322, 322, 322, 280, 322, 280, 280, - 280, 280, 280, 280, 280, 280, 280, 280, - 280, 280, 280, 280, 280, 280, 280, 280, - 280, 280, 280, 280, 280, 280, 280, 280, - 322, 322, 322, 322, 322, 280, 322, 322, - 322, 322, 322, 322, 322, 322, 322, 322, - 322, 322, 322, 322, 322, 322, 322, 322, - 322, 322, 322, 322, 322, 322, 322, 322, - 322, 322, 322, 322, 322, 322, 322, 304, - 322, 322, 322, 322, 322, 322, 322, 322, - 322, 322, 322, 322, 322, 322, 280, 280, - 280, 280, 280, 280, 280, 280, 280, 280, - 322, 322, 322, 304, 322, 304, 322, 280, - 280, 280, 326, 280, 280, 280, 280, 280, - 280, 280, 280, 280, 280, 280, 280, 280, - 280, 280, 280, 280, 280, 280, 280, 280, - 280, 322, 322, 322, 322, 280, 322, 280, - 280, 280, 280, 280, 280, 280, 280, 280, - 280, 280, 280, 280, 280, 280, 280, 280, - 280, 280, 280, 280, 280, 280, 280, 280, - 280, 322, 322, 322, 322, 322, 280, 321, - 312, 267, 312, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 304, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 328, 328, 328, - 304, 328, 304, 328, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 328, 328, - 328, 328, 329, 328, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 328, 328, - 328, 328, 328, 263, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 304, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 328, 328, - 328, 304, 328, 304, 328, 263, 263, 263, - 263, 330, 331, 263, 263, 263, 263, 263, - 332, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 328, - 328, 328, 328, 263, 328, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 328, - 328, 328, 328, 328, 263, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 304, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 328, - 328, 328, 304, 328, 304, 328, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 333, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 328, 328, 328, 328, 263, 328, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 328, 328, 328, 328, 328, 263, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 304, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 328, 328, 328, 304, 328, 304, 328, 263, - 263, 334, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 328, 328, 328, 328, 263, 328, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 328, 328, 328, 328, 328, 263, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 304, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 328, 328, 328, 304, 328, 304, 328, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 335, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 328, 328, 328, 328, 263, 328, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 328, 328, 328, 328, 328, 263, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 304, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 328, 328, 328, 304, 328, 304, - 328, 263, 263, 263, 336, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 328, 328, 328, 328, 263, - 328, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 328, 328, 328, 328, 328, - 263, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 304, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 328, 328, 328, 304, 328, - 304, 328, 263, 263, 263, 263, 263, 263, - 263, 263, 337, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 328, 328, 328, 328, - 263, 328, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 328, 328, 328, 328, - 328, 263, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 304, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 328, 328, 328, 304, - 328, 304, 328, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 338, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 328, 328, 328, - 328, 263, 328, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 328, 328, 328, - 328, 328, 263, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 304, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 328, 328, 328, - 304, 328, 304, 328, 263, 263, 263, 263, - 263, 263, 339, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 328, 328, - 328, 328, 263, 328, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 328, 328, - 328, 328, 328, 263, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 304, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 328, 328, - 328, 304, 328, 304, 328, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 328, - 328, 328, 328, 340, 328, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 328, - 328, 328, 328, 328, 263, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 304, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 328, - 328, 328, 304, 328, 304, 328, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 328, 328, 328, 328, 341, 328, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 328, 328, 328, 328, 328, 263, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 304, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 328, 328, 328, 304, 328, 304, 328, 263, - 263, 263, 263, 263, 263, 263, 263, 342, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 328, 328, 328, 328, 263, 328, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 328, 328, 328, 328, 328, 263, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 304, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 328, 328, 328, 304, 328, 304, 328, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 343, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 328, 328, 328, 328, 263, 328, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 328, 328, 328, 328, 328, 263, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 304, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 328, 328, 328, 304, 328, 304, - 328, 263, 263, 263, 263, 339, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 328, 328, 328, 328, 263, - 328, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 328, 328, 328, 328, 328, - 263, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 304, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 328, 328, 328, 304, 328, - 304, 328, 263, 263, 263, 263, 263, 263, - 263, 263, 344, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 328, 328, 328, 328, - 263, 328, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 328, 328, 328, 328, - 328, 263, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 304, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 328, 328, 328, 304, - 328, 304, 328, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 343, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 328, 328, 328, - 328, 263, 328, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 328, 328, 328, - 328, 328, 263, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 304, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 328, 328, 328, - 304, 328, 304, 328, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 328, 328, - 328, 328, 263, 328, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 345, - 263, 346, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 328, 328, - 328, 328, 328, 263, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 304, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 328, 328, - 328, 304, 328, 304, 328, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 328, - 328, 328, 328, 263, 328, 263, 263, 263, - 263, 263, 263, 263, 263, 347, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 328, - 328, 328, 328, 328, 263, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 304, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 328, - 328, 328, 304, 328, 304, 328, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 328, 328, 328, 328, 263, 328, 348, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 328, 328, 328, 328, 328, 263, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 304, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 328, 328, 328, 304, 328, 304, 328, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 328, 328, 328, 328, 263, 328, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 341, 263, 263, 263, 263, 263, 263, - 263, 328, 328, 328, 328, 328, 263, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 304, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 328, 328, 328, 304, 328, 304, 328, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 328, 328, 328, 328, 263, 328, - 263, 263, 263, 341, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 328, 328, 328, 328, 328, 263, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 304, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 328, 328, 328, 304, 328, 304, - 328, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 328, 328, 328, 328, 263, - 328, 263, 263, 263, 263, 349, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 350, 263, 263, 263, 263, 263, - 263, 263, 263, 328, 328, 328, 328, 328, - 263, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 304, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 328, 328, 328, 304, 328, - 304, 328, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 328, 328, 328, 328, - 263, 328, 263, 263, 263, 263, 263, 263, - 351, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 328, 328, 328, 328, - 328, 263, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 304, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 328, 328, 328, 304, - 328, 304, 328, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 328, 328, 328, - 328, 263, 328, 263, 263, 263, 263, 263, - 263, 263, 263, 352, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 328, 328, 328, - 328, 328, 263, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 304, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 328, 328, 328, - 304, 328, 304, 328, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 328, 328, - 328, 328, 263, 328, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 341, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 328, 328, - 328, 328, 328, 263, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 304, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 328, 328, - 328, 304, 328, 304, 328, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 328, - 328, 328, 328, 263, 328, 263, 263, 263, - 263, 353, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 328, - 328, 328, 328, 328, 263, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 304, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 328, - 328, 328, 304, 328, 304, 328, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 328, 328, 328, 328, 263, 328, 354, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 328, 328, 328, 328, 328, 263, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 304, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 328, 328, 328, 304, 328, 304, 328, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 328, 328, 328, 328, 263, 328, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 341, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 328, 328, 328, 328, 328, 263, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 304, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 328, 328, 328, 304, 328, 304, 328, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 328, 328, 328, 328, 263, 328, - 355, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 356, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 328, 328, 328, 328, 328, 263, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 304, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 328, 328, 328, 304, 328, 304, - 328, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 328, 328, 328, 328, 263, - 328, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 357, 263, 263, 263, 263, - 263, 263, 263, 328, 328, 328, 328, 328, - 263, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 304, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 328, 328, 328, 304, 328, - 304, 328, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 328, 328, 328, 328, - 263, 328, 263, 263, 263, 263, 341, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 328, 328, 328, 328, - 328, 263, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 304, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 328, 328, 328, 304, - 328, 304, 328, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 328, 328, 328, - 328, 263, 328, 358, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 328, 328, 328, - 328, 328, 263, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 304, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 328, 328, 328, - 304, 328, 304, 328, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 328, 328, - 328, 328, 263, 328, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 348, 263, - 263, 263, 263, 263, 263, 263, 328, 328, - 328, 328, 328, 263, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 304, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 328, 328, - 328, 304, 328, 304, 328, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 328, - 328, 328, 328, 263, 328, 263, 263, 263, - 263, 359, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 341, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 328, - 328, 328, 328, 328, 263, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 304, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 328, - 328, 328, 304, 328, 304, 328, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 328, 328, 328, 328, 263, 328, 263, 263, - 263, 263, 263, 360, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 328, 328, 328, 328, 328, 263, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 304, - 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 361, 361, 361, 304, 361, 304, 361, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 361, 361, 361, 361, 263, 361, 263, - 263, 263, 263, 263, 263, 263, 263, 362, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 361, 361, 361, 361, 361, 263, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 304, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 328, 328, 328, 304, 328, 304, 328, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 328, 328, 328, 328, 263, 328, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 363, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 328, 328, 328, 328, 328, 263, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 304, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 328, 328, 328, 304, 328, 304, - 328, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 328, 328, 328, 328, 263, - 328, 263, 263, 263, 263, 364, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 328, 328, 328, 328, 328, - 263, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 304, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 328, 328, 328, 304, 328, - 304, 328, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 328, 328, 328, 328, - 263, 328, 263, 263, 263, 365, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 328, 328, 328, 328, - 328, 263, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 304, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 328, 328, 328, 304, - 328, 366, 328, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 328, 328, 328, - 328, 263, 328, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 328, 328, 328, - 328, 328, 263, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 304, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 328, 328, 328, - 304, 328, 304, 328, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 328, 328, - 328, 328, 263, 328, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 367, - 263, 368, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 328, 328, - 328, 328, 328, 263, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 304, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 328, 328, - 328, 304, 328, 304, 328, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 328, - 328, 328, 328, 263, 328, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 369, - 263, 263, 263, 263, 263, 263, 263, 328, - 328, 328, 328, 328, 263, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 304, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 328, - 328, 328, 304, 328, 304, 328, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 328, 328, 328, 328, 263, 328, 263, 263, - 263, 263, 341, 263, 263, 263, 370, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 328, 328, 328, 328, 328, 263, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 304, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 328, 328, 328, 304, 328, 304, 328, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 328, 328, 328, 328, 263, 328, 263, - 263, 263, 263, 263, 341, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 328, 328, 328, 328, 328, 263, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 304, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 328, 328, 328, 304, 328, 304, 328, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 328, 328, 328, 328, 263, 328, - 263, 263, 263, 341, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 371, 263, 263, 263, 263, 263, - 263, 263, 328, 328, 328, 328, 328, 263, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 304, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 328, 328, 328, 304, 328, 304, - 328, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 328, 328, 328, 328, 263, - 328, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 372, 263, 263, - 263, 263, 263, 328, 328, 328, 328, 328, - 263, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 304, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 328, 328, 328, 304, 328, - 304, 328, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 328, 328, 328, 328, - 263, 328, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 357, 263, 263, 263, 263, - 263, 263, 263, 263, 328, 328, 328, 328, - 328, 263, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 304, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 328, 328, 328, 304, - 328, 304, 328, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 328, 328, 328, - 328, 263, 328, 373, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 295, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 328, 328, 328, - 328, 328, 263, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 304, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 328, 328, 328, - 304, 328, 304, 328, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 328, 328, - 328, 328, 263, 328, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 355, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 328, 328, - 328, 328, 328, 263, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 304, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 328, 328, - 328, 304, 328, 304, 328, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 328, - 328, 328, 328, 263, 328, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 341, 263, - 263, 263, 263, 263, 263, 263, 263, 328, - 328, 328, 328, 328, 263, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 304, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 328, - 328, 328, 304, 328, 304, 328, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 328, 328, 328, 328, 263, 328, 263, 263, - 263, 263, 263, 341, 263, 263, 263, 263, - 263, 263, 263, 341, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 328, 328, 328, 328, 328, 263, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 304, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 328, 328, 328, 304, 328, 304, 328, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 328, 328, 328, 328, 263, 328, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 374, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 328, 328, 328, 328, 328, 263, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 304, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 328, 328, 328, 304, 328, 304, 328, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 328, 328, 328, 328, 263, 328, - 263, 263, 263, 375, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 328, 328, 328, 328, 328, 263, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 304, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 328, 328, 328, 304, 328, 304, - 328, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 328, 328, 328, 328, 263, - 328, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 376, 263, 263, - 263, 263, 263, 328, 328, 328, 328, 328, - 263, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 304, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 328, 328, 328, 304, 328, - 304, 328, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 328, 328, 328, 328, - 263, 328, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 357, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 328, 328, 328, 328, - 328, 263, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 304, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 328, 328, 328, 304, - 328, 304, 328, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 328, 328, 328, - 328, 263, 328, 263, 263, 263, 263, 377, - 263, 263, 263, 378, 263, 263, 263, 263, - 263, 379, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 328, 328, 328, - 328, 328, 263, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 304, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 328, 328, 328, - 304, 328, 304, 328, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 328, 328, - 328, 328, 263, 328, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 379, 263, 263, 328, 328, - 328, 328, 328, 263, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 304, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 328, 328, - 328, 304, 328, 304, 328, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 328, - 328, 328, 328, 263, 328, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 341, 263, 263, 263, 263, 263, 263, 328, - 328, 328, 328, 328, 263, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 304, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 328, - 328, 328, 304, 328, 304, 328, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 328, 328, 328, 328, 263, 328, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 341, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 328, 328, 328, 328, 328, 263, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 304, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 328, 328, 328, 304, 328, 304, 328, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 328, 328, 328, 328, 263, 328, 263, - 263, 263, 263, 380, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 328, 328, 328, 328, 328, 263, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 304, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 328, 328, 328, 304, 328, 304, 328, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 328, 328, 328, 328, 263, 328, - 263, 263, 263, 381, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 382, 383, 263, 263, 263, 263, - 263, 263, 328, 328, 328, 328, 328, 263, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 304, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 328, 328, 328, 304, 328, 304, - 328, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 328, 328, 328, 328, 263, - 328, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 341, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 328, 328, 328, 328, 328, - 263, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 304, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 328, 328, 328, 304, 328, - 304, 328, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 328, 328, 328, 328, - 263, 328, 263, 263, 384, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 328, 328, 328, 328, - 328, 263, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 304, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 328, 328, 328, 304, - 328, 304, 328, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 328, 328, 328, - 328, 263, 328, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 357, - 263, 263, 263, 263, 263, 328, 328, 328, - 328, 328, 263, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 304, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 328, 328, 328, - 304, 328, 304, 328, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 328, 328, - 328, 328, 263, 328, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 385, 263, 263, - 386, 263, 263, 263, 263, 263, 328, 328, - 328, 328, 328, 263, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 304, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 328, 328, - 328, 304, 328, 304, 328, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 328, - 328, 328, 328, 263, 328, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 341, 263, 328, - 328, 328, 328, 328, 263, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 304, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 328, - 328, 328, 304, 328, 304, 328, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 328, 328, 328, 328, 263, 328, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 352, - 263, 263, 263, 263, 263, 263, 263, 263, - 328, 328, 328, 328, 328, 263, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 304, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 328, 328, 328, 304, 328, 304, 328, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 328, 328, 328, 328, 263, 328, 263, - 263, 263, 263, 387, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 388, 263, 263, 263, 263, - 263, 328, 328, 328, 328, 328, 263, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 304, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 328, 328, 328, 304, 328, 304, 328, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 328, 328, 328, 328, 263, 328, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 370, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 328, 328, 328, 328, 328, 263, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 304, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 328, 328, 328, 304, 328, 304, - 328, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 328, 328, 328, 328, 263, - 328, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 389, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 328, 328, 328, 328, 328, - 263, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 304, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 328, 328, 328, 304, 328, - 304, 328, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 328, 328, 328, 328, - 263, 328, 263, 263, 263, 263, 295, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 328, 328, 328, 328, - 328, 263, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 304, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 328, 328, 328, 304, - 328, 304, 328, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 328, 328, 328, - 328, 263, 328, 263, 263, 263, 263, 263, - 263, 263, 390, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 384, 263, 263, 263, - 263, 263, 263, 263, 263, 328, 328, 328, - 328, 328, 263, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 304, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 328, 328, 328, - 304, 328, 304, 328, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 328, 328, - 328, 328, 263, 328, 263, 263, 263, 263, - 352, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 328, 328, - 328, 328, 328, 263, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 304, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 328, 328, - 328, 304, 328, 304, 328, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 328, - 328, 328, 328, 263, 328, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 391, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 328, - 328, 328, 328, 328, 263, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 304, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 328, - 328, 328, 304, 328, 304, 328, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 328, 328, 328, 328, 263, 328, 263, 263, - 263, 392, 263, 263, 263, 263, 263, 263, - 263, 393, 263, 263, 263, 263, 263, 263, - 263, 394, 263, 263, 263, 263, 263, 263, - 328, 328, 328, 328, 328, 263, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 304, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 328, 328, 328, 304, 328, 304, 328, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 328, 328, 328, 328, 263, 328, 263, - 263, 263, 263, 370, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 328, 328, 328, 328, 328, 263, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 304, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 328, 328, 328, 304, 328, 304, 328, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 328, 328, 328, 328, 263, 328, - 263, 263, 263, 263, 358, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 328, 328, 328, 328, 328, 263, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 304, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 328, 328, 328, 304, 328, 304, - 328, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 328, 328, 328, 328, 263, - 328, 263, 263, 263, 263, 263, 263, 263, - 263, 378, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 328, 328, 328, 328, 328, - 263, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 304, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 328, 328, 328, 304, 328, - 304, 328, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 328, 328, 328, 328, - 263, 328, 263, 263, 263, 263, 263, 263, - 263, 395, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 328, 328, 328, 328, - 328, 263, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 304, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 328, 328, 328, 304, - 328, 304, 328, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 328, 328, 328, - 328, 263, 328, 263, 263, 263, 263, 352, - 263, 263, 263, 376, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 328, 328, 328, - 328, 328, 263, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 304, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 328, 328, 328, - 304, 328, 304, 328, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 328, 328, - 328, 328, 263, 328, 263, 263, 263, 263, - 263, 263, 263, 263, 396, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 328, 328, - 328, 328, 328, 263, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 304, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 328, 328, - 328, 304, 328, 304, 328, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 328, - 328, 328, 328, 263, 328, 263, 263, 263, - 263, 397, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 328, - 328, 328, 328, 328, 263, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 304, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 328, - 328, 328, 304, 328, 304, 328, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 328, 328, 328, 328, 263, 328, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 346, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 328, 328, 328, 328, 328, 263, 275, 307, - 399, 400, 400, 400, 399, 400, 400, 400, - 400, 401, 400, 401, 401, 401, 400, 400, - 400, 400, 400, 400, 400, 400, 400, 400, - 400, 400, 399, 400, 400, 400, 400, 400, - 401, 400, 400, 402, 400, 400, 400, 400, - 400, 400, 400, 400, 400, 400, 403, 400, - 400, 400, 400, 400, 400, 400, 400, 400, - 400, 400, 400, 400, 400, 400, 400, 400, - 400, 398, 398, 398, 398, 398, 398, 398, - 398, 398, 398, 398, 398, 398, 398, 398, - 398, 398, 398, 398, 398, 398, 398, 398, - 398, 398, 398, 400, 404, 400, 400, 398, - 400, 398, 398, 398, 398, 398, 398, 398, - 398, 398, 398, 398, 398, 398, 398, 398, - 398, 398, 398, 398, 398, 398, 398, 398, - 398, 398, 398, 400, 400, 400, 400, 400, - 398, 405, 405, 405, 405, 405, 405, 405, - 405, 405, 405, 405, 405, 405, 405, 405, - 405, 405, 405, 405, 405, 405, 405, 405, - 405, 405, 405, 405, 405, 405, 405, 405, - 405, 405, 14, 405, 405, 405, 405, 405, - 405, 405, 405, 405, 405, 405, 405, 405, - 405, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 15, 405, 405, 405, 405, - 14, 405, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 405, 405, 405, 405, - 13, 405, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 405, 405, 405, 405, - 405, 13, 401, 406, 401, 401, 401, 406, - 406, 406, 406, 406, 406, 406, 406, 406, - 406, 406, 406, 406, 406, 406, 406, 406, - 406, 401, 406, 407, 408, 409, 410, 411, - 405, 412, 405, 413, 415, 416, 416, 416, - 415, 416, 416, 416, 416, 417, 418, 417, - 417, 417, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 415, 416, - 416, 416, 416, 416, 417, 419, 416, 420, - 416, 421, 422, 416, 416, 416, 423, 424, - 416, 424, 416, 421, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 425, 426, 427, 416, 416, 428, 428, 428, - 428, 428, 428, 428, 428, 428, 428, 428, - 428, 428, 428, 428, 428, 428, 428, 428, - 428, 428, 428, 428, 428, 428, 428, 429, - 430, 416, 421, 414, 421, 414, 414, 414, - 414, 414, 414, 414, 414, 414, 414, 414, - 414, 414, 414, 414, 414, 414, 414, 414, - 414, 414, 414, 414, 414, 414, 414, 416, - 431, 416, 424, 416, 414, 432, 432, 432, - 432, 432, 432, 432, 432, 432, 432, 432, - 432, 432, 432, 432, 432, 432, 432, 432, - 432, 432, 432, 432, 432, 432, 432, 432, - 432, 432, 432, 432, 432, 432, 433, 432, - 432, 432, 432, 432, 432, 432, 432, 432, - 432, 432, 432, 432, 432, 414, 414, 414, - 414, 414, 414, 414, 414, 414, 414, 432, - 432, 432, 432, 432, 433, 432, 414, 414, - 414, 414, 414, 414, 414, 414, 414, 414, - 414, 414, 414, 414, 414, 414, 414, 414, - 414, 414, 414, 414, 414, 414, 414, 414, - 432, 432, 432, 432, 414, 432, 414, 414, - 414, 414, 414, 414, 414, 414, 414, 414, - 414, 414, 414, 414, 414, 414, 414, 414, - 414, 414, 414, 414, 414, 414, 414, 414, - 432, 432, 432, 432, 432, 414, 435, 434, - 436, 417, 437, 417, 417, 417, 437, 437, - 437, 437, 437, 437, 437, 437, 437, 437, - 437, 437, 437, 437, 437, 437, 437, 437, - 417, 437, 438, 421, 439, 439, 421, 439, - 439, 439, 439, 439, 439, 439, 439, 439, - 439, 439, 439, 439, 439, 439, 439, 439, - 439, 439, 439, 439, 439, 439, 439, 439, - 439, 439, 439, 439, 439, 439, 439, 439, - 439, 439, 439, 439, 439, 439, 439, 439, - 439, 439, 439, 439, 439, 439, 439, 439, - 439, 439, 439, 439, 439, 439, 439, 439, - 439, 439, 439, 439, 421, 439, 440, 441, - 442, 443, 421, 439, 421, 439, 421, 439, - 421, 444, 439, 421, 439, 446, 421, 445, - 445, 445, 445, 445, 445, 445, 445, 445, - 445, 445, 445, 445, 445, 445, 445, 445, - 445, 445, 445, 445, 445, 445, 445, 445, - 445, 445, 445, 445, 445, 445, 445, 445, - 445, 445, 445, 445, 445, 445, 445, 445, - 445, 445, 445, 445, 445, 445, 445, 445, - 445, 445, 445, 445, 445, 445, 445, 445, - 445, 445, 445, 445, 445, 445, 421, 445, - 421, 439, 421, 421, 439, 447, 447, 447, - 447, 447, 447, 447, 447, 447, 447, 447, - 447, 447, 447, 447, 447, 447, 447, 447, - 447, 447, 447, 447, 447, 447, 447, 447, - 447, 447, 447, 447, 447, 447, 433, 447, - 447, 447, 447, 447, 447, 447, 447, 447, - 447, 447, 447, 447, 447, 428, 428, 428, - 428, 428, 428, 428, 428, 428, 428, 447, - 447, 447, 447, 447, 433, 447, 428, 428, - 428, 428, 428, 428, 428, 428, 428, 428, - 428, 428, 428, 428, 428, 428, 428, 428, - 428, 428, 428, 428, 428, 428, 428, 428, - 447, 447, 447, 447, 428, 447, 428, 428, - 428, 428, 428, 428, 428, 428, 428, 428, - 428, 428, 428, 428, 428, 428, 428, 428, - 428, 428, 428, 428, 428, 428, 428, 428, - 447, 447, 447, 447, 447, 428, 446, 445, - 418, 445, 421, 439, 449, 448, 448, 448, - 449, 448, 448, 448, 448, 450, 451, 450, - 450, 450, 448, 448, 448, 448, 448, 448, - 448, 448, 448, 448, 448, 448, 449, 448, - 448, 448, 448, 448, 450, 448, 448, 452, - 448, 24, 453, 448, 454, 448, 455, 24, - 55, 456, 57, 24, 448, 448, 448, 448, - 448, 448, 448, 448, 448, 448, 457, 448, - 458, 55, 459, 460, 448, 448, 448, 448, - 448, 448, 448, 448, 448, 448, 448, 448, - 448, 448, 448, 448, 448, 448, 448, 448, - 448, 448, 448, 448, 448, 448, 448, 55, - 461, 55, 24, 448, 448, 448, 448, 448, - 448, 448, 448, 448, 448, 462, 448, 448, - 448, 448, 448, 448, 448, 448, 463, 448, - 448, 464, 448, 465, 448, 448, 448, 68, - 69, 448, 24, 448, 466, 466, 466, 466, - 466, 466, 466, 466, 466, 450, 466, 450, - 450, 450, 466, 466, 466, 466, 466, 466, - 466, 466, 466, 466, 466, 466, 466, 466, - 466, 466, 466, 466, 450, 466, 466, 466, - 466, 50, 51, 466, 52, 466, 53, 54, - 55, 56, 57, 50, 466, 466, 466, 466, - 466, 466, 466, 466, 466, 466, 58, 466, - 59, 55, 60, 61, 466, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 62, - 63, 55, 24, 19, 466, 19, 19, 19, - 19, 19, 19, 19, 19, 64, 19, 19, - 19, 19, 19, 19, 19, 19, 65, 19, - 19, 66, 19, 67, 19, 19, 19, 68, - 69, 466, 24, 466, 19, 467, 468, 468, - 468, 467, 468, 468, 468, 468, 55, 469, - 55, 55, 55, 468, 468, 468, 468, 468, - 468, 468, 468, 468, 468, 468, 468, 467, - 468, 468, 468, 468, 468, 55, 468, 468, - 468, 468, 468, 468, 468, 468, 468, 468, - 468, 468, 468, 468, 468, 468, 468, 468, - 468, 468, 468, 468, 468, 468, 468, 468, - 468, 468, 55, 468, 55, 469, 55, 55, - 55, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 55, 18, 18, 18, 18, - 18, 24, 18, 18, 18, 18, 18, 18, - 18, 55, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, - 55, 18, 55, 469, 55, 55, 55, 18, - 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, - 18, 55, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 55, 18, - 470, 55, 469, 55, 55, 55, 471, 471, - 471, 471, 471, 471, 471, 471, 471, 471, - 471, 471, 471, 471, 471, 471, 471, 471, - 55, 471, 471, 471, 471, 471, 471, 471, - 471, 471, 472, 471, 471, 471, 471, 471, - 471, 471, 471, 471, 471, 471, 471, 471, - 471, 471, 471, 471, 471, 55, 471, 55, - 469, 55, 55, 55, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 55, 18, - 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 55, 55, 18, 473, 467, - 55, 467, 475, 474, 477, 478, 477, 477, - 477, 476, 476, 476, 476, 476, 476, 476, - 476, 476, 476, 476, 476, 476, 476, 476, - 476, 476, 476, 477, 476, 479, 467, 467, - 467, 467, 467, 467, 467, 467, 467, 467, - 467, 467, 467, 467, 467, 467, 467, 467, - 467, 467, 467, 467, 467, 467, 467, 467, - 467, 467, 467, 467, 467, 467, 467, 20, - 467, 467, 467, 467, 467, 467, 467, 467, - 467, 467, 467, 467, 467, 467, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 21, 467, 467, 467, 467, 20, 467, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 467, 467, 467, 467, 19, 467, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 467, 467, 467, 467, 467, 19, 480, - 55, 469, 55, 55, 55, 467, 467, 467, - 467, 467, 467, 467, 467, 467, 467, 467, - 467, 467, 467, 467, 467, 467, 467, 55, - 467, 467, 467, 467, 467, 467, 467, 467, - 467, 467, 467, 467, 467, 467, 467, 467, - 467, 467, 467, 467, 467, 467, 467, 467, - 467, 467, 467, 467, 55, 467, 467, 467, - 467, 467, 467, 467, 467, 467, 467, 467, - 467, 467, 467, 467, 467, 467, 467, 467, - 467, 467, 467, 467, 467, 467, 467, 467, - 467, 467, 467, 467, 467, 467, 467, 467, - 467, 467, 467, 467, 467, 467, 467, 467, - 467, 467, 467, 467, 467, 467, 467, 467, - 467, 467, 467, 467, 467, 467, 467, 467, - 467, 467, 467, 24, 467, 481, 482, 483, - 484, 485, 486, 55, 469, 55, 55, 55, - 467, 467, 467, 467, 467, 467, 467, 467, - 467, 467, 467, 467, 467, 467, 467, 467, - 467, 467, 55, 467, 467, 467, 467, 467, - 467, 467, 467, 467, 24, 467, 467, 467, - 467, 467, 467, 467, 467, 467, 467, 467, - 467, 467, 467, 467, 467, 467, 467, 55, - 467, 55, 474, 24, 487, 24, 487, 488, - 489, 488, 488, 488, 476, 476, 476, 476, - 476, 476, 476, 476, 476, 476, 476, 476, - 476, 476, 476, 476, 476, 476, 488, 476, - 490, 487, 491, 491, 491, 491, 491, 491, - 491, 491, 491, 27, 491, 27, 27, 27, - 491, 491, 491, 491, 491, 491, 491, 491, - 491, 491, 491, 491, 491, 491, 491, 491, - 491, 491, 27, 491, 491, 491, 491, 28, - 29, 491, 30, 491, 31, 32, 33, 34, - 35, 28, 491, 491, 491, 491, 491, 491, - 491, 491, 491, 491, 36, 491, 37, 33, - 38, 39, 491, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 40, 41, 33, - 42, 26, 491, 26, 26, 26, 26, 26, - 26, 26, 26, 43, 26, 26, 26, 26, - 26, 26, 26, 26, 44, 26, 26, 45, - 26, 46, 26, 26, 26, 47, 48, 491, - 42, 491, 26, 55, 487, 492, 487, 493, - 487, 494, 487, 495, 94, 94, 94, 495, - 94, 94, 94, 94, 496, 94, 496, 496, - 496, 94, 94, 94, 94, 94, 94, 94, - 94, 94, 94, 94, 94, 495, 94, 94, - 94, 94, 94, 496, 94, 94, 94, 94, - 94, 94, 94, 94, 94, 94, 94, 94, - 94, 94, 94, 94, 94, 94, 94, 94, - 94, 94, 94, 94, 94, 94, 94, 94, - 94, 94, 94, 94, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 96, 94, 497, - 94, 94, 96, 94, 96, 96, 96, 100, - 96, 96, 96, 96, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 96, 94, 94, - 94, 94, 94, 96, 93, 93, 93, 93, - 93, 93, 93, 93, 93, 93, 93, 93, - 93, 93, 93, 93, 93, 93, 93, 93, - 93, 93, 93, 93, 93, 93, 93, 93, - 93, 93, 93, 93, 93, 498, 93, 93, - 93, 93, 93, 93, 93, 93, 93, 93, - 93, 93, 93, 93, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 96, 94, 93, - 93, 93, 93, 498, 93, 96, 96, 96, - 96, 96, 96, 96, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 96, 96, 93, - 93, 93, 93, 96, 93, 96, 96, 96, - 96, 96, 96, 96, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 96, 96, 93, - 93, 93, 93, 93, 96, 499, 499, 499, - 499, 499, 499, 499, 499, 499, 97, 499, - 97, 97, 97, 499, 499, 499, 499, 499, - 499, 499, 499, 499, 499, 499, 499, 499, - 499, 499, 499, 499, 499, 97, 499, 499, - 499, 499, 499, 499, 499, 98, 499, 499, - 499, 499, 499, 499, 499, 499, 499, 499, - 499, 499, 499, 499, 499, 499, 499, 499, - 499, 499, 499, 499, 499, 499, 96, 96, - 96, 96, 96, 96, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 96, 96, 96, - 499, 99, 499, 499, 96, 499, 96, 96, - 96, 100, 96, 96, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 96, 96, 96, - 499, 499, 499, 499, 499, 96, 500, 499, - 499, 499, 499, 499, 499, 499, 499, 499, - 499, 499, 499, 499, 499, 499, 499, 499, - 499, 499, 499, 499, 499, 499, 499, 499, - 499, 499, 499, 499, 499, 499, 499, 499, - 498, 499, 499, 499, 499, 499, 499, 499, - 499, 499, 499, 499, 499, 499, 499, 96, - 96, 96, 96, 96, 96, 96, 96, 96, - 96, 94, 499, 499, 499, 499, 498, 499, - 96, 96, 96, 96, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 96, 96, 96, - 96, 96, 499, 499, 499, 499, 96, 499, - 96, 96, 96, 96, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 96, 501, 96, - 96, 96, 96, 96, 96, 96, 96, 96, - 96, 96, 499, 499, 499, 499, 499, 96, - 101, 499, 503, 502, 502, 502, 503, 502, - 502, 502, 502, 504, 502, 504, 504, 504, - 502, 502, 502, 502, 502, 502, 502, 502, - 502, 502, 502, 502, 503, 502, 502, 502, - 502, 502, 504, 502, 502, 505, 502, 502, - 502, 502, 502, 502, 502, 502, 502, 502, - 502, 502, 502, 502, 502, 502, 502, 502, - 502, 502, 502, 502, 502, 502, 502, 502, - 502, 502, 502, 502, 502, 502, 502, 502, - 502, 502, 502, 502, 502, 502, 502, 502, - 502, 502, 502, 502, 502, 502, 502, 502, - 502, 502, 502, 502, 502, 502, 506, 502, - 502, 502, 502, 502, 502, 502, 507, 502, - 502, 502, 502, 502, 502, 502, 502, 502, - 502, 502, 502, 502, 502, 502, 502, 502, - 502, 502, 502, 502, 502, 508, 502, 504, - 509, 504, 504, 504, 509, 509, 509, 509, - 509, 509, 509, 509, 509, 509, 509, 509, - 509, 509, 509, 509, 509, 509, 504, 509, - 510, 511, 512, 513, 515, 514, 516, 517, - 514, 518, 520, 521, 521, 521, 520, 521, - 521, 521, 521, 522, 523, 522, 522, 522, - 521, 521, 521, 521, 521, 521, 521, 521, - 521, 521, 521, 521, 520, 521, 521, 521, - 521, 521, 522, 521, 521, 524, 521, 521, - 521, 521, 521, 521, 521, 521, 521, 521, - 521, 521, 521, 521, 521, 521, 521, 521, - 521, 521, 521, 521, 521, 521, 521, 521, - 521, 521, 521, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 521, 525, 521, - 521, 519, 521, 519, 519, 519, 519, 519, - 519, 519, 519, 526, 519, 519, 519, 519, - 519, 519, 519, 519, 527, 519, 519, 528, - 519, 529, 519, 519, 519, 521, 521, 521, - 521, 521, 519, 530, 530, 530, 530, 530, - 530, 530, 530, 530, 530, 530, 530, 530, - 530, 530, 530, 530, 530, 530, 530, 530, - 530, 530, 530, 530, 530, 530, 530, 530, - 530, 530, 530, 530, 530, 530, 530, 530, - 530, 530, 530, 530, 530, 530, 530, 530, - 530, 530, 530, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 530, 530, 530, - 530, 530, 530, 530, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 530, 530, - 530, 530, 519, 530, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 530, 530, - 530, 530, 530, 519, 522, 531, 522, 522, - 522, 531, 531, 531, 531, 531, 531, 531, - 531, 531, 531, 531, 531, 531, 531, 531, - 531, 531, 531, 522, 531, 532, 533, 534, - 535, 536, 538, 537, 539, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 540, - 540, 540, 540, 540, 540, 540, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 540, 540, 540, 540, 519, 540, 519, 519, - 519, 519, 519, 541, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 540, 540, 540, 540, 540, 519, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 540, 540, 540, 540, 540, 540, 540, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 540, 540, 540, 540, 519, 540, 519, - 519, 519, 519, 542, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 540, 540, 540, 540, 540, 519, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 540, 540, 540, 540, 540, 540, 540, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 540, 540, 540, 540, 519, 540, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 543, 519, 519, 519, 519, 519, - 519, 519, 540, 540, 540, 540, 540, 519, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 540, 540, 540, 540, 540, 540, - 540, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 540, 540, 540, 540, 519, - 540, 519, 519, 544, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 540, 540, 540, 540, 540, - 519, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 540, 540, 540, 540, 540, - 540, 540, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 540, 540, 540, 540, - 519, 540, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 545, 519, - 519, 519, 519, 519, 540, 540, 540, 540, - 540, 519, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 540, 540, 540, 540, - 540, 540, 540, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 540, 540, 540, - 540, 519, 540, 519, 519, 519, 519, 541, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 540, 540, 540, - 540, 540, 519, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 540, 540, 540, - 540, 540, 540, 540, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 540, 540, - 540, 540, 519, 540, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 546, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 540, 540, - 540, 540, 540, 519, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 540, 540, - 540, 540, 540, 540, 540, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 540, - 540, 540, 540, 519, 540, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 547, 519, 519, 519, 519, 519, 519, 519, - 548, 519, 519, 519, 519, 519, 519, 540, - 540, 540, 540, 540, 519, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 540, - 540, 540, 540, 540, 540, 540, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 540, 540, 540, 540, 519, 540, 519, 519, - 519, 519, 549, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 540, 540, 540, 540, 540, 519, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 540, 540, 540, 540, 540, 540, 540, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 540, 540, 540, 540, 519, 540, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 550, 519, 519, 519, 519, 519, 519, - 519, 540, 540, 540, 540, 540, 519, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 540, 540, 540, 540, 540, 540, 540, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 540, 540, 540, 540, 519, 540, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 541, 519, 519, 519, 519, 519, - 519, 519, 540, 540, 540, 540, 540, 519, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 540, 540, 540, 540, 540, 540, - 540, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 540, 540, 540, 540, 519, - 540, 519, 519, 519, 519, 519, 519, 519, - 519, 551, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 540, 540, 540, 540, 540, - 519, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 540, 540, 540, 540, 540, - 540, 540, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 540, 540, 540, 540, - 519, 540, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 541, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 540, 540, 540, 540, - 540, 519, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 540, 540, 540, 540, - 540, 540, 540, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 540, 540, 540, - 540, 519, 540, 519, 519, 519, 519, 519, - 519, 519, 552, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 540, 540, 540, - 540, 540, 519, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 540, 540, 540, - 540, 540, 540, 540, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 540, 540, - 540, 540, 519, 540, 519, 519, 519, 519, - 519, 519, 519, 519, 553, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 540, 540, - 540, 540, 540, 519, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 540, 540, - 540, 540, 540, 540, 540, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 540, - 540, 540, 540, 519, 540, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 545, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 540, - 540, 540, 540, 540, 519, 555, 125, 125, - 125, 555, 125, 125, 125, 125, 556, 557, - 556, 556, 556, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 555, - 125, 125, 125, 125, 125, 556, 558, 125, - 559, 125, 560, 561, 125, 562, 125, 563, - 564, 125, 565, 566, 567, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 568, - 125, 569, 570, 571, 572, 125, 573, 574, - 573, 573, 575, 573, 573, 573, 573, 573, - 573, 573, 573, 573, 573, 573, 573, 573, - 573, 573, 573, 573, 573, 573, 573, 573, - 576, 577, 125, 578, 579, 125, 580, 581, - 582, 583, 584, 585, 554, 554, 586, 554, - 554, 554, 587, 588, 589, 554, 554, 590, - 591, 592, 593, 554, 594, 554, 595, 554, - 596, 597, 125, 578, 125, 554, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 599, - 598, 599, 599, 599, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 599, 172, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 173, 598, 598, 174, 598, 172, 598, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 598, 600, 598, 598, 554, 598, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 598, 598, 598, 598, 598, 554, 602, - 601, 601, 603, 601, 604, 606, 607, 605, - 605, 605, 605, 605, 605, 605, 605, 605, - 605, 605, 605, 605, 605, 605, 605, 605, - 605, 605, 605, 605, 605, 605, 605, 605, - 605, 605, 605, 605, 605, 605, 605, 605, - 605, 605, 605, 605, 605, 605, 605, 605, - 605, 605, 605, 605, 605, 605, 605, 605, - 605, 605, 605, 605, 605, 605, 605, 605, - 605, 605, 605, 605, 605, 605, 608, 605, - 610, 609, 611, 612, 613, 556, 614, 556, - 556, 556, 614, 614, 614, 614, 614, 614, - 614, 614, 614, 614, 614, 614, 614, 614, - 614, 614, 614, 614, 556, 614, 616, 615, - 618, 619, 618, 618, 618, 617, 617, 617, - 617, 617, 617, 617, 617, 617, 617, 617, - 617, 617, 617, 617, 617, 617, 617, 618, - 617, 125, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 125, 620, 621, 622, 623, 624, - 626, 626, 626, 626, 626, 626, 626, 626, - 626, 626, 626, 626, 626, 626, 626, 626, - 626, 626, 626, 626, 626, 626, 626, 626, - 626, 626, 626, 626, 626, 626, 626, 626, - 626, 626, 626, 626, 626, 626, 626, 626, - 626, 626, 626, 626, 626, 626, 626, 626, - 625, 625, 625, 625, 625, 625, 625, 625, - 625, 625, 626, 626, 626, 626, 626, 626, - 626, 627, 627, 627, 627, 627, 627, 627, - 627, 627, 627, 627, 627, 627, 627, 627, - 627, 627, 627, 627, 627, 627, 627, 627, - 627, 627, 627, 626, 626, 626, 626, 626, - 626, 627, 627, 627, 627, 627, 627, 627, - 627, 627, 627, 627, 627, 627, 627, 627, - 627, 627, 627, 627, 627, 627, 627, 627, - 627, 627, 627, 626, 626, 626, 626, 626, - 625, 629, 628, 628, 628, 628, 628, 628, - 628, 628, 628, 628, 628, 628, 628, 628, - 628, 628, 628, 628, 628, 628, 628, 628, - 125, 628, 630, 632, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 125, 631, - 125, 115, 126, 127, 126, 126, 126, 628, - 628, 628, 628, 628, 628, 628, 628, 628, - 628, 628, 628, 628, 628, 628, 628, 628, - 628, 126, 628, 628, 128, 628, 628, 628, - 628, 628, 628, 628, 628, 628, 628, 628, - 628, 129, 129, 129, 129, 129, 129, 129, - 129, 129, 129, 628, 628, 628, 125, 628, - 628, 628, 628, 628, 628, 628, 628, 628, - 628, 628, 628, 628, 628, 628, 628, 628, - 628, 628, 628, 628, 628, 628, 628, 628, - 628, 628, 628, 628, 628, 130, 628, 143, - 144, 143, 143, 143, 142, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 143, 142, - 142, 145, 142, 142, 142, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 142, 142, 142, 142, 142, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 142, - 142, 142, 147, 142, 126, 127, 126, 126, - 126, 628, 628, 628, 628, 628, 628, 628, - 628, 628, 628, 628, 628, 628, 628, 628, - 628, 628, 628, 126, 628, 628, 128, 628, - 628, 628, 628, 628, 628, 628, 628, 628, - 628, 628, 628, 129, 129, 129, 129, 129, - 129, 129, 129, 129, 129, 628, 628, 628, - 125, 125, 628, 628, 628, 628, 628, 628, - 628, 628, 628, 628, 628, 628, 628, 628, - 628, 628, 628, 628, 628, 628, 628, 628, - 628, 628, 628, 628, 628, 628, 628, 130, - 628, 634, 620, 636, 635, 638, 637, 620, - 639, 639, 639, 620, 639, 639, 639, 639, - 639, 639, 639, 639, 639, 639, 639, 639, - 639, 639, 639, 639, 639, 639, 639, 639, - 639, 620, 639, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 641, 642, 620, 643, - 151, 644, 642, 620, 620, 645, 646, 620, - 646, 620, 151, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 647, 620, 648, - 649, 650, 620, 651, 640, 640, 640, 640, - 640, 640, 640, 640, 640, 640, 640, 640, - 640, 640, 640, 640, 640, 640, 640, 640, - 640, 640, 640, 640, 640, 640, 652, 620, - 620, 151, 640, 151, 640, 640, 640, 640, - 640, 640, 640, 640, 640, 640, 640, 640, - 640, 640, 640, 640, 640, 640, 640, 640, - 640, 640, 640, 640, 640, 640, 620, 653, - 620, 654, 620, 640, 655, 655, 655, 655, - 655, 655, 655, 655, 655, 655, 655, 655, - 655, 655, 655, 655, 655, 655, 655, 655, - 655, 655, 655, 655, 655, 655, 655, 655, - 655, 655, 655, 655, 655, 656, 655, 655, - 655, 655, 655, 655, 655, 655, 655, 655, - 655, 655, 655, 655, 640, 640, 640, 640, - 640, 640, 640, 640, 640, 640, 655, 655, - 655, 657, 655, 656, 655, 640, 640, 640, - 640, 640, 640, 640, 640, 640, 640, 640, - 640, 640, 640, 640, 640, 640, 640, 640, - 640, 640, 640, 640, 640, 640, 640, 655, - 655, 655, 655, 640, 655, 640, 640, 640, - 640, 640, 640, 640, 640, 640, 640, 640, - 640, 640, 640, 640, 640, 640, 640, 640, - 640, 640, 640, 640, 640, 640, 640, 655, - 655, 655, 655, 655, 640, 659, 658, 660, - 662, 663, 661, 661, 661, 661, 661, 661, - 661, 661, 661, 661, 661, 661, 661, 661, - 661, 661, 661, 661, 661, 661, 661, 661, - 661, 661, 661, 661, 661, 661, 661, 661, - 661, 661, 661, 661, 661, 661, 661, 661, - 661, 661, 661, 661, 661, 661, 661, 661, - 661, 661, 661, 661, 661, 661, 661, 661, - 661, 661, 661, 661, 661, 661, 661, 661, - 661, 664, 661, 666, 667, 665, 668, 669, - 670, 671, 151, 655, 655, 672, 655, 655, - 655, 655, 655, 655, 655, 655, 655, 655, - 655, 655, 655, 655, 655, 655, 655, 655, - 655, 655, 655, 655, 655, 655, 655, 655, - 655, 655, 655, 655, 655, 655, 655, 655, - 655, 655, 655, 655, 655, 655, 655, 655, - 655, 655, 655, 655, 655, 655, 655, 655, - 655, 655, 655, 655, 655, 655, 655, 655, - 655, 655, 655, 151, 655, 655, 655, 655, - 655, 655, 655, 655, 655, 655, 655, 655, - 655, 655, 655, 655, 655, 655, 655, 655, - 655, 655, 655, 655, 655, 655, 655, 655, - 655, 655, 655, 655, 655, 655, 655, 655, - 655, 655, 655, 655, 655, 655, 655, 655, - 655, 655, 655, 655, 655, 150, 150, 150, - 150, 150, 150, 150, 150, 150, 150, 655, - 655, 655, 655, 655, 655, 655, 150, 150, - 150, 150, 150, 150, 150, 150, 150, 150, - 150, 150, 150, 150, 150, 150, 150, 150, - 150, 150, 150, 150, 150, 150, 150, 150, - 655, 655, 655, 655, 150, 655, 150, 150, - 150, 150, 150, 150, 150, 150, 150, 150, - 150, 150, 150, 150, 150, 150, 150, 150, - 150, 150, 150, 150, 150, 150, 150, 150, - 655, 655, 655, 655, 655, 150, 153, 153, - 153, 153, 153, 153, 153, 153, 153, 153, - 655, 673, 655, 151, 655, 151, 655, 151, - 674, 655, 151, 655, 151, 655, 151, 151, - 655, 675, 675, 675, 675, 675, 675, 675, - 675, 675, 675, 675, 675, 675, 675, 675, - 675, 675, 675, 675, 675, 675, 675, 675, - 675, 675, 675, 675, 675, 675, 675, 675, - 675, 675, 675, 675, 675, 675, 675, 675, - 675, 675, 675, 675, 675, 675, 675, 675, - 675, 677, 677, 677, 677, 677, 677, 677, - 677, 677, 677, 675, 675, 675, 675, 675, - 675, 678, 676, 676, 676, 676, 676, 676, - 676, 676, 676, 676, 676, 676, 676, 676, - 676, 676, 676, 676, 676, 676, 676, 676, - 676, 676, 676, 676, 675, 675, 675, 675, - 676, 675, 676, 676, 676, 676, 676, 676, - 676, 676, 676, 676, 676, 676, 676, 676, - 676, 676, 676, 676, 676, 676, 676, 676, - 676, 676, 676, 676, 675, 675, 675, 675, - 675, 676, 680, 680, 680, 680, 680, 680, - 680, 680, 680, 680, 679, 681, 681, 681, - 681, 681, 681, 681, 681, 681, 681, 681, - 681, 681, 681, 681, 681, 681, 681, 681, - 681, 681, 681, 681, 681, 681, 681, 681, - 681, 681, 681, 681, 681, 681, 681, 681, - 681, 681, 681, 681, 681, 681, 681, 681, - 681, 681, 681, 681, 681, 683, 683, 683, - 683, 683, 683, 683, 683, 683, 683, 681, - 681, 681, 681, 681, 681, 681, 682, 682, - 682, 682, 682, 682, 682, 682, 682, 682, - 682, 682, 682, 682, 682, 682, 682, 682, - 682, 682, 682, 682, 682, 682, 682, 682, - 681, 681, 681, 681, 682, 681, 682, 682, - 682, 682, 682, 682, 682, 682, 682, 682, - 682, 682, 682, 682, 682, 682, 682, 682, - 682, 682, 682, 682, 682, 682, 682, 682, - 681, 681, 681, 681, 681, 682, 673, 655, - 672, 655, 684, 685, 620, 686, 166, 156, - 156, 156, 156, 156, 156, 156, 156, 156, - 156, 156, 156, 156, 156, 156, 156, 156, - 156, 156, 156, 156, 156, 156, 167, 156, - 168, 157, 157, 157, 157, 157, 157, 157, - 157, 157, 157, 157, 157, 157, 157, 157, - 157, 157, 157, 157, 157, 157, 157, 157, - 157, 157, 157, 157, 157, 167, 157, 167, - 170, 125, 620, 578, 125, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 125, 620, 125, 629, - 620, 690, 689, 689, 689, 690, 689, 689, - 689, 689, 689, 689, 689, 689, 689, 689, - 689, 689, 689, 689, 689, 689, 689, 689, - 689, 689, 689, 690, 689, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 172, 115, - 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 173, - 115, 115, 174, 115, 172, 115, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 171, - 115, 115, 115, 115, 171, 115, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 171, - 115, 115, 115, 115, 115, 171, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 172, - 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 171, - 173, 620, 620, 174, 620, 172, 620, 171, - 171, 171, 171, 691, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 171, - 171, 620, 620, 620, 620, 171, 620, 171, - 171, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 171, - 171, 620, 620, 620, 620, 620, 171, 620, - 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, - 172, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 171, - 171, 171, 171, 171, 171, 171, 171, 171, - 171, 173, 620, 620, 174, 620, 172, 620, - 171, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 692, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 620, 620, 620, 620, 171, 620, - 171, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 620, 620, 620, 620, 620, 171, - 693, 694, 620, 615, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 599, 598, 599, - 599, 599, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 599, 172, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 173, 598, - 598, 174, 598, 172, 598, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 598, - 600, 598, 598, 695, 598, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 598, - 598, 598, 598, 598, 554, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 599, 598, - 599, 599, 599, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 599, 172, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 173, - 598, 598, 174, 598, 172, 598, 554, 554, - 554, 554, 696, 697, 554, 554, 554, 554, - 554, 698, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 598, 600, 598, 598, 554, 598, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 598, 598, 598, 598, 598, 554, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 599, - 598, 599, 599, 599, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 599, 172, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 173, 598, 598, 174, 598, 172, 598, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 699, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 598, 600, 598, 598, 554, 598, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 598, 598, 598, 598, 598, 554, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 599, 598, 599, 599, 599, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 599, - 172, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 173, 598, 598, 174, 598, 172, 598, - 554, 554, 700, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 598, 600, 598, 598, 554, 598, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 598, 598, 598, 598, 598, 554, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 599, 598, 599, 599, 599, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 599, 172, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 173, 598, 598, 174, 598, 172, - 598, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 701, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 598, 600, 598, 598, 554, - 598, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 598, 598, 598, 598, 598, - 554, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 599, 598, 599, 599, 599, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 599, 172, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 173, 598, 598, 174, 598, - 172, 598, 554, 554, 554, 702, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 598, 600, 598, 598, - 554, 598, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 598, 598, 598, 598, - 598, 554, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 599, 598, 599, 599, 599, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 599, 172, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 173, 598, 598, 174, - 598, 172, 598, 554, 554, 554, 554, 554, - 554, 554, 554, 703, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 598, 600, 598, - 598, 554, 598, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 598, 598, 598, - 598, 598, 554, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 599, 598, 599, 599, - 599, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 599, 172, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 173, 598, 598, - 174, 598, 172, 598, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 704, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 598, 600, - 598, 598, 554, 598, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 598, 598, - 598, 598, 598, 554, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 599, 598, 599, - 599, 599, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 599, 172, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 173, 598, - 598, 174, 598, 172, 598, 554, 554, 554, - 554, 554, 554, 705, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 598, - 600, 598, 598, 554, 598, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 598, - 598, 598, 598, 598, 554, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 599, 598, - 599, 599, 599, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 599, 172, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 173, - 598, 598, 174, 598, 172, 598, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 598, 600, 598, 598, 706, 598, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 598, 598, 598, 598, 598, 554, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 599, - 598, 599, 599, 599, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 599, 172, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 173, 598, 598, 174, 598, 172, 598, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 598, 600, 598, 598, 707, 598, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 598, 598, 598, 598, 598, 554, 115, - 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, - 172, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 173, 115, 115, 174, 115, 172, 115, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 115, 115, 115, 115, 554, 115, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 115, 115, 115, 115, 115, 554, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 599, 598, 599, 599, 599, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 599, 172, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 173, 598, 598, 174, 598, 172, - 598, 554, 554, 554, 554, 554, 554, 554, - 554, 708, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 598, 600, 598, 598, 554, - 598, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 598, 598, 598, 598, 598, - 554, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 599, 598, 599, 599, 599, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 599, 172, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 173, 598, 598, 174, 598, - 172, 598, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 709, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 598, 600, 598, 598, - 554, 598, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 598, 598, 598, 598, - 598, 554, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 599, 598, 599, 599, 599, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 599, 172, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 173, 598, 598, 174, - 598, 172, 598, 554, 554, 554, 554, 705, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 598, 600, 598, - 598, 554, 598, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 598, 598, 598, - 598, 598, 554, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 599, 598, 599, 599, - 599, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 599, 172, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 173, 598, 598, - 174, 598, 172, 598, 554, 554, 554, 554, - 554, 554, 554, 554, 710, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 598, 600, - 598, 598, 554, 598, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 598, 598, - 598, 598, 598, 554, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 599, 598, 599, - 599, 599, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 599, 172, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 173, 598, - 598, 174, 598, 172, 598, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 709, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 598, - 600, 598, 598, 554, 598, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 598, - 598, 598, 598, 598, 554, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 599, 598, - 599, 599, 599, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 599, 172, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 173, - 598, 598, 174, 598, 172, 598, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 598, 600, 598, 598, 554, 598, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 711, 554, 712, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 598, 598, 598, 598, 598, 554, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 599, - 598, 599, 599, 599, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 599, 172, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 173, 598, 598, 174, 598, 172, 598, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 598, 600, 598, 598, 554, 598, 554, - 554, 554, 554, 554, 554, 554, 554, 713, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 598, 598, 598, 598, 598, 554, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 599, 598, 599, 599, 599, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 599, - 172, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 173, 598, 598, 174, 598, 172, 598, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 598, 600, 598, 598, 554, 598, - 714, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 598, 598, 598, 598, 598, 554, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 599, 598, 599, 599, 599, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 599, 172, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 173, 598, 598, 174, 598, 172, - 598, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 598, 600, 598, 598, 554, - 598, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 707, 554, 554, 554, 554, - 554, 554, 554, 598, 598, 598, 598, 598, - 554, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 599, 598, 599, 599, 599, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 599, 172, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 173, 598, 598, 174, 598, - 172, 598, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 598, 600, 598, 598, - 554, 598, 554, 554, 554, 707, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 598, 598, 598, 598, - 598, 554, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 599, 598, 599, 599, 599, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 599, 172, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 173, 598, 598, 174, - 598, 172, 598, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 598, 600, 598, - 598, 554, 598, 554, 554, 554, 554, 715, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 716, 554, 554, 554, - 554, 554, 554, 554, 554, 598, 598, 598, - 598, 598, 554, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 599, 598, 599, 599, - 599, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 599, 172, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 173, 598, 598, - 174, 598, 172, 598, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 598, 600, - 598, 598, 554, 598, 554, 554, 554, 554, - 554, 554, 717, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 598, 598, - 598, 598, 598, 554, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 599, 598, 599, - 599, 599, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 599, 172, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 173, 598, - 598, 174, 598, 172, 598, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 598, - 600, 598, 598, 554, 598, 554, 554, 554, - 554, 554, 554, 554, 554, 718, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 598, - 598, 598, 598, 598, 554, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 599, 598, - 599, 599, 599, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 599, 172, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 173, - 598, 598, 174, 598, 172, 598, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 598, 600, 598, 598, 554, 598, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 707, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 598, 598, 598, 598, 598, 554, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 599, - 598, 599, 599, 599, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 599, 172, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 173, 598, 598, 174, 598, 172, 598, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 598, 600, 598, 598, 554, 598, 554, - 554, 554, 554, 719, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 598, 598, 598, 598, 598, 554, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 599, 598, 599, 599, 599, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 599, - 172, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 173, 598, 598, 174, 598, 172, 598, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 598, 600, 598, 598, 554, 598, - 720, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 598, 598, 598, 598, 598, 554, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 599, 598, 599, 599, 599, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 599, 172, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 173, 598, 598, 174, 598, 172, - 598, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 598, 600, 598, 598, 554, - 598, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 707, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 598, 598, 598, 598, 598, - 554, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 599, 598, 599, 599, 599, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 599, 172, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 173, 598, 598, 174, 598, - 172, 598, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 598, 600, 598, 598, - 554, 598, 721, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 722, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 598, 598, 598, 598, - 598, 554, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 599, 598, 599, 599, 599, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 599, 172, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 173, 598, 598, 174, - 598, 172, 598, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 598, 600, 598, - 598, 554, 598, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 723, 554, 554, - 554, 554, 554, 554, 554, 598, 598, 598, - 598, 598, 554, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 599, 598, 599, 599, - 599, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 599, 172, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 173, 598, 598, - 174, 598, 172, 598, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 598, 600, - 598, 598, 554, 598, 554, 554, 554, 554, - 707, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 598, 598, - 598, 598, 598, 554, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 599, 598, 599, - 599, 599, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 599, 172, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 173, 598, - 598, 174, 598, 172, 598, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 598, - 600, 598, 598, 554, 598, 724, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 598, - 598, 598, 598, 598, 554, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 599, 598, - 599, 599, 599, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 599, 172, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 173, - 598, 598, 174, 598, 172, 598, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 598, 600, 598, 598, 554, 598, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 714, 554, 554, 554, 554, 554, 554, 554, - 598, 598, 598, 598, 598, 554, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 599, - 598, 599, 599, 599, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 599, 172, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 173, 598, 598, 174, 598, 172, 598, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 598, 600, 598, 598, 554, 598, 554, - 554, 554, 554, 725, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 707, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 598, 598, 598, 598, 598, 554, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 599, 598, 599, 599, 599, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 599, - 172, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 173, 598, 598, 174, 598, 172, 598, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 598, 600, 598, 598, 554, 598, - 554, 554, 554, 554, 554, 707, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 598, 598, 598, 598, 598, 554, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 599, 598, 599, 599, 599, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 599, 172, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 173, 598, 598, 174, 598, 172, - 598, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 598, 600, 598, 598, 554, - 598, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 726, 554, 727, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 598, 598, 598, 598, 598, - 554, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 599, 598, 599, 599, 599, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 599, 172, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 173, 598, 598, 174, 598, - 172, 598, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 598, 600, 598, 598, - 554, 598, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 728, 554, 554, 554, - 554, 554, 554, 554, 598, 598, 598, 598, - 598, 554, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 599, 598, 599, 599, 599, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 599, 172, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 173, 598, 598, 174, - 598, 172, 598, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 598, 600, 598, - 598, 554, 598, 554, 554, 554, 554, 707, - 554, 554, 554, 725, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 598, 598, 598, - 598, 598, 554, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 599, 598, 599, 599, - 599, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 599, 172, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 173, 598, 598, - 174, 598, 172, 598, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 598, 600, - 598, 598, 554, 598, 554, 554, 554, 707, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 729, 554, - 554, 554, 554, 554, 554, 554, 598, 598, - 598, 598, 598, 554, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 599, 598, 599, - 599, 599, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 599, 172, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 173, 598, - 598, 174, 598, 172, 598, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 598, - 600, 598, 598, 554, 598, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 730, 554, 554, 554, 554, 554, 598, - 598, 598, 598, 598, 554, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 599, 598, - 599, 599, 599, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 599, 172, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 173, - 598, 598, 174, 598, 172, 598, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 598, 600, 598, 598, 554, 598, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 723, - 554, 554, 554, 554, 554, 554, 554, 554, - 598, 598, 598, 598, 598, 554, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 599, - 598, 599, 599, 599, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 599, 172, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 173, 598, 598, 174, 598, 172, 598, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 598, 600, 598, 598, 554, 598, 731, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 589, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 598, 598, 598, 598, 598, 554, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 599, 598, 599, 599, 599, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 599, - 172, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 173, 598, 598, 174, 598, 172, 598, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 598, 600, 598, 598, 554, 598, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 721, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 598, 598, 598, 598, 598, 554, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 599, 598, 599, 599, 599, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 599, 172, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 173, 598, 598, 174, 598, 172, - 598, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 598, 600, 598, 598, 554, - 598, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 707, 554, 554, 554, 554, 554, - 554, 554, 554, 598, 598, 598, 598, 598, - 554, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 599, 598, 599, 599, 599, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 599, 172, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 173, 598, 598, 174, 598, - 172, 598, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 598, 600, 598, 598, - 554, 598, 554, 554, 554, 554, 554, 732, - 554, 554, 554, 554, 554, 554, 554, 707, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 598, 598, 598, 598, - 598, 554, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 599, 598, 599, 599, 599, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 599, 172, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 173, 598, 598, 174, - 598, 172, 598, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 598, 600, 598, - 598, 554, 598, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 733, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 598, 598, 598, - 598, 598, 554, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 599, 598, 599, 599, - 599, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 599, 172, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 173, 598, 598, - 174, 598, 172, 598, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 598, 600, - 598, 598, 554, 598, 554, 554, 554, 734, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 598, 598, - 598, 598, 598, 554, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 599, 598, 599, - 599, 599, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 599, 172, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 173, 598, - 598, 174, 598, 172, 598, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 598, - 600, 598, 598, 554, 598, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 735, 554, 554, 554, 554, 554, 598, - 598, 598, 598, 598, 554, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 599, 598, - 599, 599, 599, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 599, 172, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 173, - 598, 598, 174, 598, 172, 598, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 598, 600, 598, 598, 554, 598, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 723, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 598, 598, 598, 598, 598, 554, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 599, - 598, 599, 599, 599, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 599, 172, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 173, 598, 598, 174, 598, 172, 598, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 598, 600, 598, 598, 554, 598, 554, - 554, 554, 554, 736, 554, 554, 554, 737, - 554, 554, 554, 554, 554, 738, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 598, 598, 598, 598, 598, 554, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 599, 598, 599, 599, 599, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 599, - 172, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 173, 598, 598, 174, 598, 172, 598, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 598, 600, 598, 598, 554, 598, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 738, - 554, 554, 598, 598, 598, 598, 598, 554, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 599, 598, 599, 599, 599, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 599, 172, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 173, 598, 598, 174, 598, 172, - 598, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 598, 600, 598, 598, 554, - 598, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 707, 554, 554, 554, - 554, 554, 554, 598, 598, 598, 598, 598, - 554, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 599, 598, 599, 599, 599, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 599, 172, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 173, 598, 598, 174, 598, - 172, 598, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 598, 600, 598, 598, - 554, 598, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 707, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 598, 598, 598, 598, - 598, 554, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 599, 598, 599, 599, 599, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 599, 172, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 173, 598, 598, 174, - 598, 172, 598, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 598, 600, 598, - 598, 554, 598, 554, 554, 554, 554, 739, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 598, 598, 598, - 598, 598, 554, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 599, 598, 599, 599, - 599, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 599, 172, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 173, 598, 598, - 174, 598, 172, 598, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 598, 600, - 598, 598, 554, 598, 554, 554, 554, 740, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 741, 742, - 554, 554, 554, 554, 554, 554, 598, 598, - 598, 598, 598, 554, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 599, 598, 599, - 599, 599, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 599, 172, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 173, 598, - 598, 174, 598, 172, 598, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 598, - 600, 598, 598, 554, 598, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 707, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 598, - 598, 598, 598, 598, 554, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 599, 598, - 599, 599, 599, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 599, 172, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 173, - 598, 598, 174, 598, 172, 598, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 598, 600, 598, 598, 554, 598, 554, 554, - 743, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 598, 598, 598, 598, 598, 554, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 599, - 598, 599, 599, 599, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 599, 172, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 173, 598, 598, 174, 598, 172, 598, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 598, 600, 598, 598, 554, 598, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 744, 554, 554, 554, 554, - 554, 598, 598, 598, 598, 598, 554, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 599, 598, 599, 599, 599, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 599, - 172, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 173, 598, 598, 174, 598, 172, 598, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 598, 600, 598, 598, 554, 598, - 554, 554, 554, 554, 745, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 598, 598, 598, 598, 598, 554, - 746, 746, 746, 746, 746, 746, 746, 746, - 746, 746, 746, 746, 746, 746, 746, 746, - 746, 746, 746, 746, 746, 746, 746, 746, - 746, 746, 746, 746, 746, 746, 746, 746, - 746, 748, 746, 746, 746, 746, 746, 746, - 746, 746, 746, 746, 746, 746, 746, 746, - 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 749, 746, 746, 750, 746, 748, - 746, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 746, 746, 746, 746, 747, - 746, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 746, 746, 746, 746, 746, - 747, 606, 751, 605, 605, 605, 605, 605, - 605, 605, 605, 605, 605, 605, 605, 605, - 605, 605, 605, 605, 605, 605, 605, 605, - 605, 605, 605, 605, 605, 605, 605, 605, - 605, 605, 605, 605, 605, 605, 605, 605, - 605, 605, 605, 605, 605, 605, 605, 605, - 605, 605, 605, 605, 605, 605, 605, 605, - 605, 605, 605, 605, 605, 605, 605, 605, - 605, 605, 608, 605, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 599, 598, 599, - 599, 599, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 599, 172, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 173, 598, - 598, 174, 598, 172, 598, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 598, - 600, 598, 598, 554, 598, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 752, 554, - 554, 753, 554, 554, 554, 554, 554, 598, - 598, 598, 598, 598, 554, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 599, 598, - 599, 599, 599, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 599, 172, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 173, - 598, 598, 174, 598, 172, 598, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 598, 600, 598, 598, 554, 598, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 707, 554, - 598, 598, 598, 598, 598, 554, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 599, - 598, 599, 599, 599, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 599, 172, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 173, 598, 598, 174, 598, 172, 598, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 598, 600, 598, 598, 554, 598, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 718, 554, 554, 554, 554, 554, 554, 554, - 554, 598, 598, 598, 598, 598, 554, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 599, 598, 599, 599, 599, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 599, - 172, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 173, 598, 598, 174, 598, 172, 598, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 598, 600, 598, 598, 554, 598, - 554, 554, 554, 554, 754, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 755, 554, 554, 554, - 554, 554, 598, 598, 598, 598, 598, 554, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 599, 598, 599, 599, 599, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 599, 172, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 173, 598, 598, 174, 598, 172, - 598, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 598, 600, 598, 598, 554, - 598, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 725, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 598, 598, 598, 598, 598, - 554, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 599, 598, 599, 599, 599, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 599, 172, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 173, 598, 598, 174, 598, - 172, 598, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 598, 600, 598, 598, - 554, 598, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 756, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 598, 598, 598, 598, - 598, 554, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 599, 598, 599, 599, 599, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 599, 172, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 173, 598, 598, 174, - 598, 172, 598, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 598, 600, 598, - 598, 554, 598, 554, 554, 554, 554, 589, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 598, 598, 598, - 598, 598, 554, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 599, 598, 599, 599, - 599, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 599, 172, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 173, 598, 598, - 174, 598, 172, 598, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 598, 600, - 598, 598, 554, 598, 554, 554, 554, 554, - 554, 554, 554, 757, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 758, 554, 554, - 554, 554, 554, 554, 554, 554, 598, 598, - 598, 598, 598, 554, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 599, 598, 599, - 599, 599, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 599, 172, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 173, 598, - 598, 174, 598, 172, 598, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 598, - 600, 598, 598, 554, 598, 554, 554, 554, - 554, 718, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 598, - 598, 598, 598, 598, 554, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 599, 598, - 599, 599, 599, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 599, 172, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 173, - 598, 598, 174, 598, 172, 598, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 598, 600, 598, 598, 554, 598, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 723, 554, 554, 554, 554, 554, - 598, 598, 598, 598, 598, 554, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 599, - 598, 599, 599, 599, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 599, 172, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 173, 598, 598, 174, 598, 172, 598, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 598, 600, 598, 598, 554, 598, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 759, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 598, 598, 598, 598, 598, 554, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 599, 598, 599, 599, 599, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 599, - 172, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 173, 598, 598, 174, 598, 172, 598, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 598, 600, 598, 598, 554, 598, - 554, 554, 554, 760, 554, 554, 554, 554, - 554, 554, 554, 761, 554, 554, 554, 554, - 554, 554, 554, 762, 554, 554, 554, 554, - 554, 554, 598, 598, 598, 598, 598, 554, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 599, 598, 599, 599, 599, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 599, 172, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 173, 598, 598, 174, 598, 172, - 598, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 598, 600, 598, 598, 554, - 598, 554, 554, 554, 554, 725, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 598, 598, 598, 598, 598, - 554, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 599, 598, 599, 599, 599, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 599, 172, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 173, 598, 598, 174, 598, - 172, 598, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 598, 600, 598, 598, - 554, 598, 554, 554, 554, 554, 763, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 598, 598, 598, 598, - 598, 554, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 599, 598, 599, 599, 599, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 599, 172, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 173, 598, 598, 174, - 598, 172, 598, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 598, 600, 598, - 598, 554, 598, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 764, 554, 554, - 554, 554, 554, 554, 554, 598, 598, 598, - 598, 598, 554, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 599, 598, 599, 599, - 599, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 599, 172, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 173, 598, 598, - 174, 598, 172, 598, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 598, 600, - 598, 598, 554, 598, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 732, 554, - 554, 554, 554, 554, 554, 554, 598, 598, - 598, 598, 598, 554, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 599, 598, 599, - 599, 599, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 599, 172, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 173, 598, - 598, 174, 598, 172, 598, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 598, - 600, 598, 598, 554, 598, 554, 554, 554, - 554, 554, 554, 554, 554, 765, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 598, - 598, 598, 598, 598, 554, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 599, 598, - 599, 599, 599, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 599, 172, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 173, - 598, 598, 174, 598, 172, 598, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 598, 600, 598, 598, 554, 598, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 732, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 598, 598, 598, 598, 598, 554, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 599, - 598, 599, 599, 599, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 599, 172, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 173, 598, 598, 174, 598, 172, 598, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 598, 600, 598, 598, 554, 598, 554, - 554, 554, 554, 554, 554, 554, 766, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 598, 598, 598, 598, 598, 554, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 599, 598, 599, 599, 599, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 599, - 172, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 173, 598, 598, 174, 598, 172, 598, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 598, 600, 598, 598, 554, 598, - 554, 554, 554, 554, 718, 554, 554, 554, - 767, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 598, 598, 598, 598, 598, 554, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 599, 598, 599, 599, 599, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 599, 172, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 173, 598, 598, 174, 598, 172, - 598, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 598, 600, 598, 598, 554, - 598, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 768, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 598, 598, 598, 598, 598, - 554, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 599, 598, 599, 599, 599, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 599, 172, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 173, 598, 598, 174, 598, - 172, 598, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 598, 600, 598, 598, - 554, 598, 554, 554, 554, 554, 732, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 598, 598, 598, 598, - 598, 554, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 599, 598, 599, 599, 599, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 599, 172, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 173, 598, 598, 174, - 598, 172, 598, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 598, 600, 598, - 598, 554, 598, 554, 554, 554, 554, 554, - 554, 554, 554, 769, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 598, 598, 598, - 598, 598, 554, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 599, 598, 599, 599, - 599, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 599, 172, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 173, 598, 598, - 174, 598, 172, 598, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 598, 600, - 598, 598, 554, 598, 554, 554, 554, 554, - 770, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 598, 598, - 598, 598, 598, 554, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 599, 598, 599, - 599, 599, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 599, 172, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 173, 598, - 598, 174, 598, 172, 598, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 598, - 600, 598, 598, 554, 598, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 712, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 598, - 598, 598, 598, 598, 554, 771, 125, 620, - 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 772, 620, 774, - 773, 773, 773, 774, 773, 773, 773, 773, - 775, 776, 775, 775, 775, 773, 773, 773, - 773, 773, 773, 773, 773, 773, 773, 773, - 773, 774, 773, 773, 773, 773, 773, 775, - 773, 773, 777, 773, 773, 773, 773, 773, - 773, 773, 773, 773, 773, 773, 773, 773, - 773, 773, 773, 773, 773, 773, 773, 773, - 773, 773, 773, 773, 773, 773, 773, 773, - 773, 773, 773, 773, 773, 773, 773, 773, - 773, 773, 773, 773, 773, 773, 773, 773, - 773, 773, 773, 773, 773, 773, 773, 773, - 773, 773, 773, 778, 773, 775, 779, 775, - 775, 775, 779, 779, 779, 779, 779, 779, - 779, 779, 779, 779, 779, 779, 779, 779, - 779, 779, 779, 779, 775, 779, 780, 781, - 782, 783, 784, 786, 785, 787, 789, 790, - 790, 790, 789, 790, 790, 790, 790, 791, - 792, 791, 791, 791, 790, 790, 790, 790, - 790, 790, 790, 790, 790, 790, 790, 790, - 789, 790, 790, 790, 790, 790, 791, 790, - 793, 794, 790, 790, 790, 793, 790, 790, - 790, 790, 790, 790, 790, 790, 790, 790, - 790, 790, 790, 790, 790, 790, 790, 790, - 790, 790, 790, 790, 790, 790, 790, 788, - 788, 788, 788, 788, 788, 788, 788, 788, - 788, 788, 788, 788, 788, 788, 788, 788, - 788, 788, 788, 788, 788, 788, 788, 788, - 788, 790, 795, 790, 790, 788, 790, 788, - 788, 788, 788, 788, 788, 788, 788, 788, - 788, 788, 788, 788, 788, 788, 788, 788, - 788, 788, 788, 788, 788, 788, 788, 788, - 788, 790, 790, 790, 790, 790, 788, 796, - 796, 796, 796, 796, 796, 796, 796, 796, - 796, 796, 796, 796, 796, 796, 796, 796, - 796, 796, 796, 796, 796, 796, 796, 796, - 796, 796, 796, 796, 796, 796, 796, 796, - 180, 796, 796, 796, 796, 796, 796, 796, - 796, 796, 796, 796, 796, 796, 796, 179, - 179, 179, 179, 179, 179, 179, 179, 179, - 179, 181, 796, 796, 796, 796, 180, 796, - 179, 179, 179, 179, 179, 179, 179, 179, - 179, 179, 179, 179, 179, 179, 179, 179, - 179, 179, 179, 179, 179, 179, 179, 179, - 179, 179, 796, 796, 796, 796, 179, 796, - 179, 179, 179, 179, 179, 179, 179, 179, - 179, 179, 179, 179, 179, 179, 179, 179, - 179, 179, 179, 179, 179, 179, 179, 179, - 179, 179, 796, 796, 796, 796, 796, 179, - 791, 797, 791, 791, 791, 797, 797, 797, - 797, 797, 797, 797, 797, 797, 797, 797, - 797, 797, 797, 797, 797, 797, 797, 791, - 797, 798, 799, 800, 801, 802, 803, 796, - 804, 806, 807, 807, 807, 806, 807, 807, - 807, 807, 808, 809, 808, 808, 808, 807, - 807, 807, 807, 807, 807, 807, 807, 807, - 807, 807, 807, 806, 807, 807, 807, 807, - 807, 808, 810, 811, 812, 813, 814, 815, - 811, 816, 817, 818, 814, 819, 820, 821, - 814, 822, 823, 823, 823, 823, 823, 823, - 823, 823, 823, 824, 825, 826, 827, 828, - 829, 830, 831, 832, 831, 831, 833, 831, - 831, 831, 831, 831, 831, 831, 831, 831, - 831, 831, 831, 831, 831, 831, 831, 831, - 831, 831, 831, 831, 834, 835, 836, 814, - 837, 811, 838, 839, 840, 841, 842, 843, - 805, 805, 844, 805, 805, 805, 845, 846, - 847, 805, 805, 848, 849, 850, 851, 805, - 852, 805, 853, 805, 854, 855, 856, 857, - 807, 805, 189, 189, 189, 189, 189, 189, - 189, 189, 189, 189, 189, 189, 189, 189, - 189, 189, 189, 189, 189, 189, 189, 189, - 189, 189, 189, 189, 189, 189, 189, 189, - 189, 189, 189, 858, 189, 189, 189, 189, - 189, 189, 189, 189, 189, 189, 189, 189, - 189, 189, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 189, 189, 189, 189, - 189, 858, 189, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 189, 189, 189, - 189, 805, 189, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 189, 189, 189, - 189, 189, 805, 860, 859, 861, 808, 862, - 808, 808, 808, 862, 862, 862, 862, 862, - 862, 862, 862, 862, 862, 862, 862, 862, - 862, 862, 862, 862, 862, 808, 862, 863, - 865, 864, 864, 864, 864, 864, 864, 864, - 864, 864, 864, 864, 864, 864, 864, 864, - 864, 864, 864, 864, 864, 864, 864, 864, - 864, 864, 864, 864, 864, 864, 864, 864, - 864, 864, 864, 864, 864, 864, 864, 864, - 864, 864, 864, 864, 864, 864, 864, 864, - 864, 864, 864, 864, 864, 864, 864, 864, - 864, 864, 864, 864, 864, 864, 864, 864, - 864, 865, 864, 866, 867, 868, 869, 870, - 870, 870, 870, 870, 870, 870, 870, 870, - 870, 870, 870, 870, 870, 870, 870, 870, - 870, 870, 870, 870, 870, 870, 870, 870, - 870, 870, 870, 870, 870, 870, 870, 870, - 184, 184, 870, 184, 870, 184, 184, 870, - 870, 184, 184, 184, 871, 184, 184, 872, - 872, 872, 872, 872, 872, 872, 872, 872, - 872, 184, 184, 184, 184, 184, 184, 184, - 201, 201, 201, 201, 201, 201, 201, 201, - 201, 201, 201, 201, 201, 201, 201, 201, - 201, 201, 201, 201, 201, 201, 201, 201, - 201, 201, 870, 184, 870, 870, 201, 184, - 201, 201, 201, 201, 201, 201, 201, 201, - 201, 201, 201, 201, 201, 201, 201, 201, - 201, 201, 201, 201, 201, 201, 201, 201, - 201, 201, 870, 870, 870, 184, 870, 201, - 873, 873, 873, 873, 873, 873, 873, 873, - 873, 873, 873, 873, 873, 873, 873, 873, - 873, 873, 873, 873, 873, 873, 873, 873, - 873, 873, 873, 873, 873, 873, 873, 873, - 873, 873, 873, 873, 873, 873, 873, 873, - 873, 873, 873, 873, 873, 873, 873, 873, - 201, 201, 201, 201, 201, 201, 201, 201, - 201, 201, 873, 873, 873, 873, 873, 873, - 873, 201, 201, 201, 201, 201, 201, 201, - 201, 201, 201, 201, 201, 201, 201, 201, - 201, 201, 201, 201, 201, 201, 201, 201, - 201, 201, 201, 873, 873, 873, 873, 201, - 873, 201, 201, 201, 201, 201, 201, 201, - 201, 201, 201, 201, 201, 201, 201, 201, - 201, 201, 201, 201, 201, 201, 201, 201, - 201, 201, 201, 873, 873, 873, 873, 873, - 201, 872, 872, 872, 872, 872, 872, 872, - 872, 872, 872, 873, 874, 189, 814, 875, - 875, 875, 875, 875, 875, 875, 876, 875, - 875, 875, 875, 875, 875, 875, 875, 875, - 875, 875, 875, 875, 875, 874, 875, 877, - 878, 814, 879, 879, 879, 879, 879, 879, - 879, 879, 879, 879, 879, 879, 879, 879, - 879, 879, 879, 879, 874, 879, 874, 880, - 875, 882, 881, 188, 188, 188, 188, 188, - 188, 188, 188, 188, 188, 881, 884, 883, - 885, 883, 188, 188, 188, 188, 188, 188, - 188, 188, 188, 188, 886, 886, 886, 886, - 886, 886, 886, 886, 886, 886, 886, 887, - 886, 886, 886, 886, 886, 886, 886, 886, - 886, 886, 886, 886, 886, 886, 886, 886, - 886, 886, 886, 886, 886, 886, 886, 886, - 886, 888, 886, 886, 886, 886, 886, 887, - 886, 187, 187, 187, 187, 187, 187, 187, - 187, 187, 187, 886, 886, 886, 886, 886, - 886, 886, 886, 886, 886, 886, 886, 886, - 886, 886, 886, 886, 886, 886, 886, 886, - 886, 886, 886, 886, 886, 886, 886, 886, - 886, 886, 886, 886, 886, 886, 886, 886, - 186, 886, 890, 889, 891, 891, 891, 891, - 891, 891, 891, 891, 891, 891, 889, 889, - 889, 889, 889, 889, 889, 889, 892, 889, - 893, 894, 889, 889, 889, 889, 889, 889, - 889, 889, 889, 895, 889, 889, 889, 889, - 889, 889, 889, 889, 896, 889, 889, 889, - 889, 889, 889, 897, 889, 889, 892, 889, - 893, 894, 889, 889, 889, 898, 889, 889, - 889, 889, 889, 895, 889, 889, 899, 889, - 889, 889, 889, 889, 896, 889, 190, 190, - 190, 190, 190, 190, 190, 190, 190, 190, - 900, 900, 900, 900, 900, 900, 900, 900, - 900, 900, 900, 901, 900, 900, 900, 900, - 900, 900, 900, 900, 900, 900, 900, 900, - 900, 900, 900, 900, 900, 900, 900, 900, - 900, 900, 900, 900, 900, 902, 900, 900, - 900, 900, 900, 901, 900, 900, 900, 903, - 900, 900, 900, 900, 900, 900, 900, 900, - 904, 900, 905, 189, 905, 189, 189, 191, - 191, 191, 191, 191, 191, 191, 191, 191, - 191, 189, 191, 191, 191, 191, 191, 191, - 191, 191, 191, 191, 906, 906, 906, 906, - 906, 906, 906, 906, 906, 906, 906, 906, - 906, 906, 906, 906, 906, 906, 906, 906, - 906, 906, 906, 906, 906, 906, 906, 906, - 906, 906, 906, 906, 906, 906, 906, 906, - 906, 905, 906, 906, 906, 906, 906, 906, - 906, 906, 906, 907, 906, 909, 908, 910, - 912, 911, 911, 911, 913, 911, 914, 915, - 891, 891, 891, 891, 891, 891, 891, 891, - 891, 891, 889, 889, 889, 889, 889, 889, - 889, 889, 889, 889, 889, 889, 889, 889, - 889, 889, 889, 889, 889, 889, 889, 889, - 889, 889, 889, 889, 889, 889, 889, 889, - 889, 889, 889, 889, 889, 889, 889, 897, - 889, 889, 889, 889, 889, 889, 889, 889, - 889, 898, 889, 889, 889, 889, 889, 889, - 889, 889, 899, 889, 916, 916, 916, 916, - 916, 916, 916, 916, 916, 916, 889, 889, - 889, 889, 889, 889, 889, 889, 889, 889, - 889, 889, 889, 889, 889, 889, 889, 889, - 889, 889, 889, 889, 889, 889, 889, 889, - 889, 889, 889, 889, 889, 889, 889, 889, - 889, 889, 889, 917, 889, 889, 889, 889, - 889, 889, 889, 889, 889, 898, 889, 889, - 889, 889, 889, 889, 889, 889, 899, 889, - 919, 919, 919, 919, 919, 919, 919, 919, - 919, 919, 918, 918, 918, 918, 918, 918, - 918, 918, 918, 918, 918, 918, 918, 918, - 918, 918, 918, 918, 918, 918, 918, 918, - 918, 918, 918, 918, 918, 918, 918, 918, - 918, 918, 918, 918, 918, 918, 918, 920, - 918, 918, 918, 918, 918, 918, 918, 918, - 918, 921, 918, 918, 918, 918, 918, 918, - 918, 918, 922, 918, 919, 919, 919, 919, - 919, 919, 919, 919, 919, 919, 918, 918, - 918, 918, 918, 918, 918, 918, 918, 918, - 918, 918, 918, 918, 918, 918, 918, 918, - 918, 918, 918, 918, 918, 918, 918, 918, - 918, 918, 918, 918, 918, 918, 918, 918, - 918, 918, 918, 923, 918, 918, 918, 918, - 918, 918, 918, 918, 918, 921, 918, 918, - 918, 918, 918, 918, 918, 918, 922, 918, - 921, 918, 918, 918, 918, 918, 918, 918, - 918, 922, 918, 925, 924, 926, 928, 927, - 927, 927, 929, 927, 931, 930, 932, 933, - 935, 935, 934, 934, 934, 934, 934, 934, - 934, 934, 934, 934, 934, 934, 934, 934, - 934, 934, 934, 934, 934, 934, 934, 934, - 934, 934, 934, 934, 934, 934, 934, 934, - 934, 934, 934, 934, 934, 934, 934, 934, - 934, 934, 934, 934, 934, 934, 934, 936, - 934, 934, 934, 934, 934, 934, 934, 934, - 934, 937, 934, 934, 934, 934, 934, 934, - 934, 934, 938, 934, 939, 939, 918, 918, - 918, 918, 918, 918, 918, 918, 918, 918, - 918, 918, 918, 918, 918, 918, 918, 918, - 918, 918, 918, 918, 918, 918, 918, 918, - 918, 918, 918, 918, 918, 918, 918, 918, - 918, 918, 918, 918, 918, 918, 918, 918, - 918, 918, 918, 940, 918, 918, 918, 918, - 918, 918, 918, 918, 918, 921, 918, 918, - 918, 918, 918, 918, 918, 918, 922, 918, - 939, 939, 918, 918, 918, 918, 918, 918, - 918, 918, 918, 918, 918, 918, 918, 918, - 918, 918, 918, 918, 918, 918, 918, 918, - 918, 918, 918, 918, 918, 918, 918, 918, - 918, 918, 918, 918, 918, 918, 918, 918, - 918, 918, 918, 918, 918, 918, 918, 923, - 918, 918, 918, 918, 918, 918, 918, 918, - 918, 921, 918, 918, 918, 918, 918, 918, - 918, 918, 922, 918, 942, 942, 942, 942, - 942, 942, 942, 942, 942, 942, 941, 941, - 941, 941, 941, 941, 941, 941, 941, 941, - 941, 941, 941, 941, 941, 941, 941, 941, - 941, 941, 941, 941, 941, 941, 941, 941, - 941, 941, 941, 941, 941, 941, 941, 941, - 941, 941, 941, 943, 941, 941, 941, 941, - 941, 941, 941, 941, 941, 944, 941, 941, - 941, 941, 941, 941, 941, 941, 945, 941, - 947, 947, 947, 947, 947, 947, 947, 947, - 947, 947, 946, 946, 946, 946, 946, 946, - 946, 946, 946, 946, 946, 946, 946, 946, - 946, 946, 946, 946, 946, 946, 946, 946, - 946, 946, 946, 946, 946, 946, 946, 946, - 946, 946, 946, 946, 946, 946, 946, 948, - 946, 946, 946, 946, 946, 946, 946, 946, - 946, 949, 946, 946, 946, 946, 946, 946, - 946, 946, 950, 946, 952, 952, 952, 952, - 952, 952, 952, 952, 952, 952, 951, 951, - 951, 951, 951, 951, 951, 952, 952, 952, - 952, 952, 952, 951, 951, 951, 951, 951, - 951, 951, 951, 951, 951, 951, 951, 951, - 951, 951, 951, 951, 951, 951, 951, 951, - 951, 951, 951, 953, 951, 952, 952, 952, - 952, 952, 952, 951, 951, 954, 951, 951, - 951, 951, 951, 951, 951, 951, 955, 951, - 956, 956, 956, 956, 956, 956, 956, 956, - 956, 956, 918, 918, 918, 918, 918, 918, - 918, 956, 956, 956, 956, 956, 956, 918, - 918, 918, 918, 918, 918, 918, 918, 918, - 918, 918, 918, 918, 918, 918, 918, 918, - 918, 918, 918, 918, 918, 918, 918, 957, - 918, 956, 956, 956, 956, 956, 956, 918, - 918, 921, 918, 918, 918, 918, 918, 918, - 918, 918, 922, 918, 956, 956, 956, 956, - 956, 956, 956, 956, 956, 956, 918, 918, - 918, 918, 918, 918, 918, 956, 956, 956, - 956, 956, 956, 918, 918, 918, 918, 918, - 918, 918, 918, 918, 918, 918, 918, 918, - 918, 918, 918, 918, 918, 918, 918, 918, - 918, 918, 918, 923, 918, 956, 956, 956, - 956, 956, 956, 918, 918, 921, 918, 918, - 918, 918, 918, 918, 918, 918, 922, 918, - 959, 958, 960, 960, 960, 960, 960, 960, - 960, 960, 960, 960, 958, 958, 958, 958, - 958, 958, 958, 958, 958, 958, 958, 961, - 958, 958, 958, 958, 958, 958, 958, 958, - 958, 958, 958, 958, 958, 958, 958, 958, - 958, 958, 958, 958, 958, 958, 958, 958, - 958, 962, 958, 958, 958, 958, 958, 961, - 958, 958, 958, 963, 958, 958, 958, 958, - 958, 958, 958, 958, 964, 958, 965, 965, - 965, 965, 965, 965, 965, 965, 965, 965, - 958, 958, 958, 958, 958, 958, 958, 958, - 958, 958, 958, 958, 958, 958, 958, 958, - 958, 958, 958, 958, 958, 958, 958, 958, - 958, 958, 958, 958, 958, 958, 958, 958, - 958, 958, 958, 958, 958, 966, 958, 958, - 958, 958, 958, 958, 958, 958, 958, 963, - 958, 958, 958, 958, 958, 958, 958, 958, - 964, 958, 967, 918, 968, 968, 968, 968, - 968, 968, 968, 968, 968, 968, 918, 918, - 918, 918, 918, 918, 918, 918, 918, 918, - 918, 969, 918, 918, 918, 918, 918, 918, - 918, 918, 918, 918, 918, 918, 918, 918, - 918, 918, 918, 918, 918, 918, 918, 918, - 918, 918, 918, 970, 918, 918, 918, 918, - 918, 969, 918, 918, 918, 921, 918, 918, - 918, 918, 918, 918, 918, 918, 922, 918, - 968, 968, 968, 968, 968, 968, 968, 968, - 968, 968, 918, 918, 918, 918, 918, 918, - 918, 918, 918, 918, 918, 918, 918, 918, - 918, 918, 918, 918, 918, 918, 918, 918, - 918, 918, 918, 918, 918, 918, 918, 918, - 918, 918, 918, 918, 918, 918, 918, 923, - 918, 918, 918, 918, 918, 918, 918, 918, - 918, 921, 918, 918, 918, 918, 918, 918, - 918, 918, 922, 918, 876, 883, 814, 971, - 875, 865, 875, 972, 973, 883, 883, 883, - 883, 883, 883, 883, 883, 883, 883, 883, - 883, 883, 883, 883, 883, 883, 883, 883, - 883, 883, 883, 883, 883, 883, 883, 883, - 883, 883, 883, 883, 883, 883, 883, 883, - 883, 883, 883, 883, 883, 883, 883, 883, - 883, 883, 883, 883, 883, 883, 883, 883, - 883, 883, 883, 883, 883, 883, 883, 883, - 883, 883, 883, 883, 865, 883, 865, 875, - 865, 814, 875, 870, 870, 870, 870, 870, - 870, 870, 870, 870, 870, 870, 870, 870, - 870, 870, 870, 870, 870, 870, 870, 870, - 870, 870, 870, 870, 870, 870, 870, 870, - 870, 870, 870, 870, 870, 870, 870, 870, - 870, 870, 870, 870, 870, 870, 870, 870, - 870, 870, 870, 201, 201, 201, 201, 201, - 201, 201, 201, 201, 201, 870, 870, 870, - 870, 870, 870, 974, 201, 201, 201, 201, - 201, 201, 201, 201, 201, 201, 201, 201, - 201, 201, 201, 201, 201, 201, 201, 201, - 201, 201, 201, 201, 201, 201, 870, 870, - 870, 870, 201, 870, 201, 201, 201, 201, - 201, 201, 201, 201, 201, 201, 201, 201, - 201, 201, 201, 201, 201, 201, 201, 201, - 201, 201, 201, 201, 201, 201, 870, 870, - 870, 870, 870, 201, 189, 189, 189, 189, - 189, 189, 189, 189, 189, 189, 189, 189, - 189, 189, 189, 189, 189, 189, 189, 189, - 189, 189, 189, 189, 189, 189, 189, 189, - 189, 189, 189, 189, 189, 858, 189, 189, - 189, 189, 189, 189, 189, 189, 189, 189, - 189, 189, 189, 189, 831, 831, 831, 831, - 831, 831, 831, 831, 831, 831, 975, 189, - 189, 189, 189, 858, 189, 831, 831, 831, - 831, 831, 831, 831, 831, 831, 831, 831, - 831, 831, 831, 831, 831, 831, 831, 831, - 831, 831, 831, 831, 831, 831, 831, 189, - 189, 189, 189, 831, 189, 831, 831, 831, - 831, 831, 831, 831, 831, 831, 831, 831, - 831, 831, 831, 831, 831, 831, 831, 831, - 831, 831, 831, 831, 831, 831, 831, 189, - 189, 189, 189, 189, 831, 976, 977, 977, - 977, 977, 977, 977, 977, 977, 977, 977, - 977, 977, 977, 977, 977, 977, 977, 977, - 977, 977, 977, 977, 977, 977, 977, 977, - 977, 977, 977, 977, 977, 977, 977, 858, - 977, 977, 977, 977, 977, 977, 977, 977, - 977, 977, 977, 977, 977, 977, 831, 831, - 831, 831, 831, 831, 831, 831, 831, 831, - 975, 977, 977, 977, 977, 858, 977, 831, - 831, 831, 831, 978, 831, 831, 831, 831, - 831, 831, 831, 831, 831, 831, 831, 831, - 831, 831, 831, 831, 831, 831, 831, 831, - 831, 977, 977, 977, 977, 831, 977, 831, - 831, 831, 831, 831, 831, 831, 831, 831, - 831, 831, 831, 831, 831, 831, 831, 831, - 831, 831, 831, 831, 831, 831, 831, 831, - 831, 977, 977, 977, 977, 977, 831, 977, - 977, 977, 977, 977, 977, 977, 977, 977, - 977, 977, 977, 977, 977, 977, 977, 977, - 977, 977, 977, 977, 977, 977, 977, 977, - 977, 977, 977, 977, 977, 977, 977, 977, - 858, 977, 977, 977, 977, 977, 977, 977, - 977, 977, 977, 977, 977, 977, 977, 831, - 831, 831, 831, 831, 831, 831, 831, 831, - 831, 975, 977, 977, 977, 977, 858, 977, - 831, 831, 831, 831, 831, 831, 979, 831, - 831, 831, 831, 831, 831, 831, 831, 831, - 831, 831, 831, 831, 831, 831, 831, 831, - 831, 831, 977, 977, 977, 977, 831, 977, - 831, 831, 831, 831, 831, 831, 831, 831, - 831, 831, 831, 831, 831, 831, 831, 831, - 831, 831, 831, 831, 831, 831, 831, 831, - 831, 831, 977, 977, 977, 977, 977, 831, - 977, 977, 977, 977, 977, 977, 977, 977, - 977, 977, 977, 977, 977, 977, 977, 977, - 977, 977, 977, 977, 977, 977, 977, 977, - 977, 977, 977, 977, 977, 977, 977, 977, - 977, 858, 977, 977, 977, 977, 977, 977, - 977, 977, 977, 977, 977, 977, 977, 977, - 831, 831, 831, 831, 831, 831, 831, 831, - 831, 831, 975, 977, 977, 977, 977, 858, - 977, 831, 831, 831, 831, 831, 831, 831, - 831, 980, 831, 831, 831, 831, 831, 831, - 831, 831, 831, 831, 831, 831, 831, 831, - 831, 831, 831, 977, 977, 977, 977, 831, - 977, 831, 831, 831, 831, 831, 831, 831, - 831, 831, 831, 831, 831, 831, 831, 831, - 831, 831, 831, 831, 831, 831, 831, 831, - 831, 831, 831, 977, 977, 977, 977, 977, - 831, 977, 977, 977, 977, 977, 977, 977, - 977, 977, 977, 977, 977, 977, 977, 977, - 977, 977, 977, 977, 977, 977, 977, 977, - 977, 977, 977, 977, 977, 977, 977, 977, - 977, 977, 858, 977, 977, 977, 977, 977, - 977, 977, 977, 977, 977, 977, 977, 977, - 977, 831, 831, 831, 831, 831, 831, 831, - 831, 831, 831, 975, 977, 977, 977, 977, - 858, 977, 831, 831, 831, 831, 831, 831, - 831, 831, 831, 831, 831, 831, 831, 981, - 831, 831, 831, 831, 831, 831, 831, 831, - 831, 831, 831, 831, 977, 977, 977, 977, - 831, 977, 831, 831, 831, 831, 831, 831, - 831, 831, 831, 831, 831, 831, 831, 831, - 831, 831, 831, 831, 831, 831, 831, 831, - 831, 831, 831, 831, 977, 977, 977, 977, - 977, 831, 977, 977, 977, 977, 977, 977, - 977, 977, 977, 977, 977, 977, 977, 977, - 977, 977, 977, 977, 977, 977, 977, 977, - 977, 977, 977, 977, 977, 977, 977, 977, - 977, 977, 977, 858, 977, 977, 977, 977, - 977, 977, 977, 977, 977, 977, 977, 977, - 977, 977, 831, 831, 831, 831, 831, 831, - 831, 831, 831, 831, 975, 977, 977, 977, - 977, 858, 977, 831, 831, 831, 831, 831, - 831, 831, 831, 831, 831, 831, 831, 831, - 982, 831, 831, 831, 831, 831, 831, 831, - 831, 831, 831, 831, 831, 977, 977, 977, - 977, 831, 977, 831, 831, 831, 831, 831, - 831, 831, 831, 831, 831, 831, 831, 831, - 831, 831, 831, 831, 831, 831, 831, 831, - 831, 831, 831, 831, 831, 977, 977, 977, - 977, 977, 831, 977, 977, 977, 977, 977, - 977, 977, 977, 977, 977, 977, 977, 977, - 977, 977, 977, 977, 977, 977, 977, 977, - 977, 977, 977, 977, 977, 977, 977, 977, - 977, 977, 977, 977, 858, 977, 977, 977, - 977, 977, 977, 977, 977, 977, 977, 977, - 977, 977, 977, 831, 831, 831, 831, 831, - 831, 831, 831, 831, 831, 975, 977, 977, - 977, 977, 858, 977, 831, 831, 831, 981, - 831, 831, 831, 831, 831, 831, 831, 831, - 831, 831, 831, 831, 831, 831, 831, 831, - 831, 831, 831, 831, 831, 831, 977, 977, - 977, 977, 831, 977, 831, 831, 831, 831, - 831, 831, 831, 831, 831, 831, 831, 831, - 831, 831, 831, 831, 831, 831, 831, 831, - 831, 831, 831, 831, 831, 831, 977, 977, - 977, 977, 977, 831, 983, 985, 984, 986, - 987, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 858, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 988, - 858, 988, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 989, 988, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 988, 805, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 858, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 988, 858, 988, 805, 805, 805, 805, 990, - 991, 805, 805, 805, 805, 805, 992, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 805, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 988, 805, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 858, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 988, 858, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 993, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 805, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 988, 805, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 858, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 988, 858, 988, 805, 805, 994, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 805, 988, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 988, 805, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 858, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 988, 858, 988, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 995, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 988, 988, 988, 988, 805, 988, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 988, 988, 988, 988, 988, 805, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 858, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 988, 988, 988, 988, 988, 858, 988, 805, - 805, 805, 996, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 805, 988, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 988, 805, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 858, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 988, 858, 988, - 805, 805, 805, 805, 805, 805, 805, 805, - 997, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 805, 988, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 988, 805, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 858, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 988, 858, - 988, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 998, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 805, - 988, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 988, - 805, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 858, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 988, - 858, 988, 805, 805, 805, 805, 805, 805, - 999, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 805, 988, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 988, 805, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 858, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 988, 858, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 1000, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 988, 805, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 858, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 988, 858, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 1001, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 988, 805, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 858, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 988, 858, 988, 805, 805, 805, - 805, 805, 805, 805, 805, 1002, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 805, 988, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 988, 805, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 858, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 988, 858, 988, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 1003, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 988, 988, 988, 988, 805, 988, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 988, 988, 988, 988, 988, 805, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 858, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 988, 988, 988, 988, 988, 858, 988, 805, - 805, 805, 805, 1004, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 805, 988, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 988, 805, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 858, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 988, 858, 988, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 1005, 988, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 988, 805, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 858, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 988, 858, - 988, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 1006, - 988, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 988, - 805, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 858, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 988, - 858, 988, 805, 805, 805, 805, 805, 805, - 805, 805, 1007, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 805, 988, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 988, 805, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 858, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 988, 858, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 1003, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 805, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 988, 805, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 858, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 988, 858, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 805, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 1008, - 805, 1009, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 988, 805, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 858, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 988, 858, 988, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 805, 988, 805, 805, 805, - 805, 805, 805, 805, 805, 1010, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 988, 805, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 858, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 988, 858, 988, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 988, 988, 988, 988, 805, 988, 1011, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 988, 988, 988, 988, 988, 805, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 858, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 988, 988, 988, 988, 988, 858, 988, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 805, 988, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 1012, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 988, 805, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 858, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 988, 858, 988, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 805, 988, - 805, 805, 805, 1013, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 988, 805, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 858, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 988, 858, - 988, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 805, - 988, 805, 805, 805, 805, 1014, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 1015, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 988, - 805, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 858, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 988, - 858, 988, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 805, 988, 805, 805, 805, 805, 805, 805, - 1016, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 988, 805, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 858, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 988, 858, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 805, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 1017, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 988, 805, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 858, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 988, 858, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 805, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 1013, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 988, 805, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 858, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 988, 858, 988, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 805, 988, 805, 805, 805, - 805, 1018, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 988, 805, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 858, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 988, 858, 988, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 988, 988, 988, 988, 805, 988, 1019, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 988, 988, 988, 988, 988, 805, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 858, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 988, 988, 988, 988, 988, 858, 988, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 805, 988, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 1020, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 988, 805, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 858, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 988, 858, 988, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 805, 988, - 1021, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 1022, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 988, 805, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 858, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 988, 858, - 988, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 805, - 988, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 1023, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 988, - 805, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 858, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 988, - 858, 988, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 805, 988, 805, 805, 805, 805, 1013, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 988, 805, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 858, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 988, 858, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 805, 988, 1024, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 988, 805, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 858, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 988, 858, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 805, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 1025, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 988, 805, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 858, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 988, 858, 988, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 805, 988, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 1026, - 805, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 988, 805, 1027, 1027, 1027, - 1027, 1027, 1027, 1027, 1027, 1027, 203, 204, - 203, 203, 203, 1027, 1027, 1027, 1027, 1027, - 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, - 1027, 1027, 1027, 1027, 1027, 203, 858, 1027, - 205, 1027, 1027, 1027, 1027, 1027, 1027, 1027, - 1027, 1027, 1027, 1027, 1027, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 1027, - 1027, 206, 1027, 1027, 858, 1027, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 1027, 207, 1027, 1027, 805, 1027, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 1027, 1027, 1027, 1027, 1027, 805, 220, 221, - 220, 220, 220, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 220, 219, 219, - 222, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, - 219, 225, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, - 219, 224, 219, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 858, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 988, 858, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 805, 988, 805, 805, 805, 805, - 1029, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 1030, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 988, 805, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 858, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 988, 858, 988, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 805, 988, 805, 805, 805, - 805, 805, 1031, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 988, 805, 1032, 1032, 1032, - 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, - 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, - 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, - 1032, 1032, 1032, 1032, 1032, 1032, 858, 1032, - 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, - 1032, 1032, 1032, 1032, 1032, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 1032, - 1032, 1032, 1032, 1032, 858, 1032, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 1032, 1032, 1032, 1032, 805, 1032, 805, 805, - 805, 805, 805, 805, 805, 805, 1033, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 1032, 1032, 1032, 1032, 1032, 805, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 858, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 988, 988, 988, 988, 988, 858, 988, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 805, 988, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 1034, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 988, 805, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 858, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 988, 858, 988, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 805, 988, - 805, 805, 805, 805, 1035, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 988, 805, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 858, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 988, 858, - 988, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 805, - 988, 805, 805, 805, 1036, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 988, - 805, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 858, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 988, - 1037, 988, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 805, 988, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 988, 805, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 858, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 988, 858, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 805, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 1038, 805, - 1039, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 988, 805, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 858, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 988, 858, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 805, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 1040, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 988, 805, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 858, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 988, 858, 988, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 805, 988, 805, 805, 805, - 805, 1013, 805, 805, 805, 1041, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 988, 805, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 858, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 988, 858, 988, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 988, 988, 988, 988, 805, 988, 805, 805, - 805, 805, 805, 1013, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 988, 988, 988, 988, 988, 805, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 858, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 988, 988, 988, 988, 988, 858, 988, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 805, 988, 805, - 805, 805, 1006, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 1042, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 988, 805, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 858, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 988, 858, 988, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 805, 988, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 1043, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 988, 805, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 858, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 988, 858, - 988, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 805, - 988, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 1023, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 988, - 805, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 858, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 988, - 858, 988, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 805, 988, 1044, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 847, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 988, 805, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 858, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 988, 858, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 805, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 1045, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 988, 805, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 858, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 988, 858, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 805, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 1046, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 988, 805, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 858, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 988, 858, 988, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 805, 988, 805, 805, 805, - 805, 1006, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 988, 805, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 858, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 988, 858, 988, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 988, 988, 988, 988, 805, 988, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 1013, - 805, 805, 805, 805, 805, 805, 805, 805, - 988, 988, 988, 988, 988, 805, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 858, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 988, 988, 988, 988, 988, 858, 988, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 805, 988, 805, - 805, 805, 805, 805, 1047, 805, 805, 805, - 805, 805, 805, 805, 1013, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 988, 805, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 858, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 988, 858, 988, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 805, 988, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 1048, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 988, 805, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 858, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 988, 858, - 988, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 805, - 988, 805, 805, 805, 1049, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 988, - 805, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 858, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 988, - 858, 988, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 805, 988, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 1050, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 988, 805, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 858, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 988, 858, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 805, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 1023, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 988, 805, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 858, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 988, 858, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 805, 988, 805, 805, 805, 805, - 1051, 805, 805, 805, 1052, 805, 805, 805, - 805, 805, 1053, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 988, 805, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 858, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 988, 858, 988, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 805, 988, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 1054, 805, 805, 988, - 988, 988, 988, 988, 805, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 858, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 988, 858, 988, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 988, 988, 988, 988, 805, 988, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 1020, 805, 805, 805, 805, 805, 805, - 988, 988, 988, 988, 988, 805, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 858, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 988, 988, 988, 988, 988, 858, 988, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 805, 988, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 1006, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 988, 805, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 858, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 988, 858, 988, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 805, 988, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 1055, 805, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 988, 805, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 858, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 988, 858, - 988, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 805, - 988, 805, 805, 805, 805, 1056, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 988, - 805, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 858, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 988, - 858, 988, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 805, 988, 805, 805, 805, 1057, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 1058, 1059, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 988, 805, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 858, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 988, 858, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 805, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 1006, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 988, 805, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 858, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 988, 858, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 805, 988, 805, 805, 1060, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 988, 805, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 858, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 988, 858, 988, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 805, 988, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 1061, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 988, 805, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 858, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 988, 858, 988, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 988, 988, 988, 988, 805, 988, 805, 805, - 805, 805, 1047, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 988, 988, 988, 988, 988, 805, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 858, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 988, 988, 988, 988, 988, 858, 988, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 805, 988, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 1062, 805, 805, 1063, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 988, 805, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 858, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 988, 858, 988, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 805, 988, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 1006, 805, 988, 988, 988, 988, 988, 805, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 858, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 988, 858, - 988, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 805, - 988, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 1064, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 988, - 805, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 858, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 988, - 858, 988, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 805, 988, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 1020, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 988, 805, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 858, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 988, 858, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 805, 988, 805, 805, 805, 805, 1065, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 1066, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 988, 805, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 858, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 988, 858, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 805, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 1067, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 988, 805, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 858, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 988, 858, 988, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 805, 988, 805, 805, 805, - 805, 805, 1006, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 988, 805, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 858, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 988, 858, 988, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 988, 988, 988, 988, 805, 988, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 1068, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 988, 988, 988, 988, 988, 805, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 858, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 988, 988, 988, 988, 988, 858, 988, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 805, 988, 805, - 805, 805, 805, 1069, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 988, 805, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 858, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 988, 858, 988, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 805, 988, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 1055, 805, 805, 805, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 988, 805, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 858, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 988, 858, - 988, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 805, - 988, 805, 805, 805, 805, 805, 805, 805, - 1070, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 1071, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 988, - 805, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 858, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 988, - 858, 988, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 805, 988, 805, 805, 805, 805, 1017, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 988, 805, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 858, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 988, 858, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 805, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 1046, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 988, 805, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 858, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 988, 858, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 805, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 1072, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 988, 805, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 858, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 988, 858, 988, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 805, 988, 805, 805, 805, - 1073, 805, 805, 805, 805, 805, 805, 805, - 1074, 805, 805, 805, 805, 805, 805, 805, - 1075, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 988, 805, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 858, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 988, 858, 988, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 988, 988, 988, 988, 805, 988, 805, 805, - 805, 805, 1076, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 988, 988, 988, 988, 988, 805, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 858, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 988, 988, 988, 988, 988, 858, 988, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 805, 988, 805, - 805, 805, 805, 805, 1012, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 988, 805, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 858, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 988, 858, 988, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 805, 988, - 805, 805, 805, 805, 1077, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 988, 805, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 858, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 988, 858, - 988, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 805, - 988, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 1078, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 988, - 805, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 858, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 988, - 858, 988, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 805, 988, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 1047, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 988, 805, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 858, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 988, 858, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 805, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 1079, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 988, 805, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 858, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 988, 858, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 805, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 1047, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 988, 805, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 858, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 988, 858, 988, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 805, 988, 805, 805, 805, - 805, 805, 805, 805, 1080, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 988, 805, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 858, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 988, 858, 988, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 988, 988, 988, 988, 805, 988, 805, 805, - 805, 805, 1017, 805, 805, 805, 1081, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 988, 988, 988, 988, 988, 805, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 858, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 988, 988, 988, 988, 988, 858, 988, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 805, 988, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 1082, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 988, 805, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 858, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 988, 858, 988, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 805, 988, - 805, 805, 805, 805, 1047, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 988, 805, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 858, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 988, 858, - 988, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 805, - 988, 805, 805, 805, 805, 805, 805, 805, - 805, 1083, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 988, - 805, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 858, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 988, - 858, 988, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 805, 988, 805, 805, 805, 805, 1084, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 988, 805, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 858, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 988, 858, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 805, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 1085, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 988, 805, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 858, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 988, 858, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 805, 988, 805, 805, 805, 1055, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 988, 805, 1086, 874, 864, 864, - 864, 864, 864, 864, 864, 864, 864, 864, - 864, 864, 864, 864, 864, 864, 864, 864, - 864, 864, 864, 864, 864, 864, 864, 864, - 864, 864, 864, 864, 864, 864, 864, 864, - 864, 864, 864, 864, 864, 864, 864, 864, - 864, 864, 864, 864, 864, 864, 864, 864, - 864, 864, 864, 864, 864, 864, 864, 864, - 864, 864, 864, 864, 814, 864, 1087, 1089, - 1088, 1089, 1089, 1089, 1088, 1088, 1088, 1088, - 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, - 1088, 1088, 1088, 1088, 1088, 1088, 1089, 1088, - 1088, 1090, 1088, 1088, 1091, 1088, 1088, 1088, - 1088, 1088, 1088, 1088, 233, 1088, 1088, 1088, - 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, - 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, - 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, - 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, - 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, - 1088, 1088, 1092, 1088, 229, 230, 229, 229, - 229, 1093, 1093, 1093, 1093, 1093, 1093, 1093, - 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, - 1093, 1093, 1093, 229, 1093, 1093, 231, 1093, - 1093, 232, 1093, 1093, 1093, 1093, 1093, 1093, - 1093, 233, 1093, 1093, 1093, 1093, 1093, 1093, - 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, - 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, - 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, - 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, - 1093, 1093, 1093, 1093, 1093, 1093, 1093, 234, - 1093, 236, 1094, 236, 236, 236, 1094, 1094, - 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, - 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, - 236, 1094, 1094, 231, 1094, 1094, 1094, 1094, - 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, - 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, - 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, - 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, - 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, - 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, - 1094, 1094, 1094, 1094, 234, 1094, 1096, 1095, - 1098, 1097, 239, 238, 244, 1093, 242, 1093, - 1100, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1101, 1099, 1100, 1099, 1100, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1103, 1099, 1100, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1104, 1099, 1100, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1105, 1099, 1107, 1105, - 1109, 1108, 1108, 1108, 1109, 1108, 1108, 1108, - 1108, 1110, 1111, 1110, 1110, 1110, 1108, 1108, - 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, - 1108, 1108, 1109, 1108, 1108, 1108, 1108, 1108, - 1110, 1108, 1108, 1112, 1108, 1108, 1108, 1108, - 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, - 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, - 1108, 1108, 1108, 1108, 1108, 1113, 1108, 1108, - 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, - 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, - 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, - 1108, 1108, 1108, 1108, 1114, 1108, 1108, 1115, - 1108, 1110, 1116, 1110, 1110, 1110, 1116, 1116, - 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, - 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, - 1110, 1116, 1117, 1118, 1119, 1120, 1121, 1123, - 1122, 1125, 1126, 1125, 1125, 1125, 1124, 1124, - 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, - 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, - 1125, 1124, 1111, 1122, 1127, 1122, 0 -] - -class << self - attr_accessor :_lex_trans_targs - private :_lex_trans_targs, :_lex_trans_targs= -end -self._lex_trans_targs = [ - 130, 129, 0, 2, 131, 132, 4, 133, - 134, 134, 134, 134, 247, 7, 8, 9, - 247, 247, 276, 11, 12, 276, 276, 280, - 280, 16, 11, 17, 278, 279, 281, 282, - 280, 276, 283, 284, 286, 13, 14, 287, - 288, 15, 280, 18, 19, 24, 31, 290, - 291, 17, 278, 279, 281, 282, 280, 276, - 283, 284, 286, 13, 14, 287, 288, 15, - 18, 19, 24, 31, 290, 291, 289, 20, - 21, 22, 23, 25, 26, 29, 27, 28, - 30, 32, 33, 276, 35, 36, 37, 39, - 42, 40, 41, 43, 45, 307, 307, 307, - 308, 47, 310, 48, 311, 49, 308, 47, - 310, 48, 311, 345, 50, 345, 51, 52, - 50, 345, 51, 345, 345, 345, 55, 56, - 57, 58, 356, 345, 345, 345, 61, 62, - 63, 345, 66, 61, 62, 63, 345, 66, - 64, 64, 62, 63, 366, 65, 64, 64, - 62, 63, 366, 65, 62, 345, 383, 345, - 68, 384, 390, 72, 399, 400, 77, 78, - 72, 73, 398, 73, 398, 345, 74, 75, - 76, 401, 79, 80, 347, 53, 349, 82, - 83, 406, 508, 85, 86, 87, 508, 516, - 516, 516, 90, 538, 537, 516, 540, 542, - 516, 95, 96, 97, 546, 516, 99, 100, - 557, 526, 579, 103, 104, 105, 109, 110, - 103, 104, 105, 109, 110, 106, 106, 104, - 105, 107, 108, 106, 106, 104, 105, 107, - 108, 627, 104, 516, 696, 111, 698, 113, - 117, 699, 115, 696, 112, 696, 114, 698, - 114, 698, 116, 698, 696, 710, 119, 120, - 121, 716, 123, 124, 125, 126, 127, 710, - 710, 128, 1, 3, 129, 129, 129, 135, - 134, 134, 136, 137, 138, 139, 141, 144, - 145, 146, 147, 134, 148, 149, 151, 153, - 154, 155, 159, 161, 162, 163, 179, 184, - 191, 196, 203, 210, 213, 214, 218, 212, - 222, 230, 234, 236, 241, 243, 246, 134, - 134, 134, 134, 134, 134, 140, 134, 140, - 134, 142, 5, 143, 134, 6, 134, 134, - 150, 152, 134, 156, 157, 158, 154, 160, - 134, 164, 165, 174, 177, 166, 167, 168, - 169, 170, 171, 172, 173, 135, 175, 176, - 178, 180, 183, 181, 182, 185, 188, 186, - 187, 189, 190, 192, 194, 193, 195, 197, - 198, 134, 199, 200, 201, 202, 134, 204, - 207, 205, 206, 208, 209, 211, 215, 216, - 217, 219, 221, 220, 223, 224, 225, 227, - 226, 228, 229, 231, 232, 233, 235, 237, - 238, 239, 240, 242, 244, 245, 248, 247, - 247, 249, 250, 252, 253, 247, 247, 247, - 251, 247, 251, 10, 254, 247, 256, 255, - 255, 259, 260, 261, 262, 255, 264, 265, - 266, 267, 269, 271, 272, 273, 274, 275, - 255, 257, 255, 258, 255, 255, 255, 255, - 255, 263, 255, 263, 268, 255, 270, 255, - 276, 276, 277, 292, 293, 279, 295, 296, - 283, 297, 298, 299, 300, 301, 303, 304, - 305, 306, 276, 276, 276, 276, 276, 276, - 280, 285, 276, 276, 276, 276, 276, 276, - 276, 276, 276, 294, 276, 294, 276, 276, - 276, 276, 302, 276, 34, 38, 44, 307, - 309, 312, 46, 307, 307, 308, 313, 313, - 314, 315, 317, 319, 320, 313, 313, 316, - 313, 316, 313, 318, 313, 313, 313, 322, - 321, 321, 323, 324, 325, 327, 329, 330, - 335, 342, 321, 321, 321, 321, 326, 321, - 326, 321, 328, 321, 321, 322, 331, 332, - 333, 334, 336, 337, 340, 338, 339, 341, - 343, 344, 346, 345, 354, 355, 357, 358, - 360, 361, 362, 363, 365, 367, 368, 371, - 372, 397, 403, 404, 405, 406, 407, 408, - 409, 410, 364, 412, 429, 434, 441, 446, - 448, 454, 457, 458, 462, 456, 466, 477, - 481, 484, 492, 496, 499, 500, 345, 50, - 51, 345, 53, 348, 345, 345, 350, 352, - 353, 345, 351, 345, 345, 345, 345, 345, - 54, 345, 345, 345, 345, 345, 359, 345, - 359, 345, 345, 59, 345, 60, 345, 345, - 364, 345, 369, 345, 370, 345, 345, 345, - 373, 382, 345, 67, 385, 386, 387, 345, - 388, 69, 391, 392, 70, 395, 396, 345, - 374, 376, 345, 375, 345, 345, 377, 380, - 381, 345, 378, 379, 345, 345, 345, 345, - 345, 345, 389, 345, 383, 393, 394, 345, - 393, 345, 383, 393, 71, 402, 345, 345, - 345, 345, 345, 81, 84, 345, 411, 413, - 414, 424, 427, 415, 416, 417, 418, 419, - 420, 421, 422, 423, 425, 426, 428, 430, - 433, 431, 432, 435, 438, 436, 437, 439, - 440, 442, 444, 443, 445, 447, 449, 451, - 450, 452, 453, 455, 423, 459, 460, 461, - 463, 465, 464, 467, 468, 469, 474, 470, - 471, 472, 345, 346, 347, 53, 473, 352, - 475, 476, 478, 479, 480, 482, 483, 485, - 486, 487, 490, 488, 489, 491, 493, 494, - 495, 497, 498, 345, 364, 501, 501, 502, - 503, 504, 506, 501, 501, 501, 505, 501, - 505, 501, 507, 501, 509, 508, 508, 510, - 511, 508, 512, 514, 508, 508, 508, 508, - 513, 508, 513, 515, 508, 517, 516, 516, - 520, 521, 522, 516, 523, 525, 528, 529, - 530, 531, 532, 516, 533, 534, 539, 567, - 571, 516, 572, 574, 576, 516, 577, 578, - 580, 584, 586, 587, 589, 590, 608, 613, - 620, 628, 635, 642, 647, 648, 652, 646, - 657, 667, 673, 676, 685, 689, 693, 694, - 695, 528, 518, 516, 519, 516, 516, 516, - 516, 516, 516, 524, 516, 524, 516, 88, - 527, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 535, 516, 536, 516, 516, 89, - 91, 516, 92, 548, 559, 562, 541, 563, - 564, 549, 553, 555, 516, 541, 92, 543, - 545, 93, 516, 543, 516, 544, 516, 516, - 94, 547, 516, 516, 550, 552, 516, 550, - 551, 553, 555, 552, 516, 554, 516, 516, - 556, 558, 516, 98, 516, 516, 516, 560, - 552, 553, 555, 560, 561, 516, 550, 552, - 553, 555, 516, 550, 552, 553, 555, 516, - 565, 552, 553, 555, 565, 566, 516, 92, - 567, 541, 568, 553, 555, 569, 552, 92, - 569, 541, 570, 573, 575, 516, 101, 102, - 516, 516, 581, 582, 583, 578, 585, 516, - 516, 588, 516, 516, 516, 591, 592, 601, - 606, 593, 594, 595, 596, 597, 598, 599, - 600, 517, 602, 603, 604, 605, 517, 607, - 609, 612, 610, 611, 517, 517, 614, 617, - 615, 616, 618, 619, 517, 621, 623, 622, - 624, 625, 626, 516, 516, 629, 517, 630, - 516, 631, 632, 633, 634, 518, 636, 639, - 637, 638, 640, 641, 643, 644, 645, 517, - 649, 650, 651, 653, 655, 656, 654, 517, - 658, 659, 660, 663, 661, 662, 664, 665, - 666, 668, 670, 669, 671, 672, 674, 675, - 677, 678, 680, 683, 679, 681, 682, 684, - 686, 687, 688, 690, 691, 692, 516, 516, - 696, 697, 701, 702, 703, 696, 696, 696, - 700, 696, 696, 705, 704, 706, 704, 707, - 708, 709, 704, 704, 710, 710, 711, 712, - 713, 715, 717, 718, 710, 710, 710, 714, - 710, 714, 710, 118, 710, 710, 710, 122 -] - -class << self - attr_accessor :_lex_trans_actions - private :_lex_trans_actions, :_lex_trans_actions= -end -self._lex_trans_actions = [ - 0, 53, 0, 0, 0, 0, 0, 0, - 95, 65, 93, 71, 111, 0, 0, 0, - 99, 101, 161, 0, 0, 135, 157, 727, - 733, 1, 3, 3, 481, 971, 3, 484, - 971, 499, 971, 3, 3, 481, 3, 487, - 3, 3, 901, 3, 3, 3, 3, 3, - 3, 0, 11, 925, 0, 13, 925, 139, - 925, 0, 0, 11, 0, 15, 0, 0, - 0, 0, 0, 0, 0, 0, 733, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 159, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 171, 163, 169, - 742, 0, 0, 0, 742, 1, 905, 3, - 3, 3, 905, 259, 0, 219, 0, 1, - 3, 520, 3, 265, 217, 261, 0, 0, - 0, 0, 0, 255, 201, 223, 0, 1, - 0, 195, 0, 3, 478, 3, 517, 3, - 5, 547, 829, 547, 976, 547, 0, 7, - 550, 7, 913, 7, 397, 263, 0, 209, - 0, 0, 0, 0, 751, 751, 0, 0, - 17, 17, 676, 0, 1, 257, 0, 0, - 0, 751, 0, 0, 766, 0, 0, 0, - 0, 766, 287, 0, 0, 0, 275, 351, - 295, 347, 0, 51, 51, 353, 805, 805, - 349, 0, 0, 0, 0, 345, 0, 0, - 0, 0, 0, 0, 1, 0, 0, 0, - 3, 478, 3, 3, 3, 5, 547, 829, - 547, 547, 547, 0, 7, 550, 7, 7, - 7, 917, 397, 291, 371, 0, 823, 0, - 45, 45, 0, 369, 0, 373, 5, 981, - 0, 921, 1, 909, 357, 393, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 381, - 427, 395, 0, 0, 55, 59, 57, 724, - 75, 73, 0, 1, 0, 0, 51, 51, - 0, 0, 0, 67, 0, 0, 0, 0, - 721, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 97, - 63, 89, 490, 85, 833, 5, 553, 0, - 91, 0, 0, 0, 83, 0, 87, 69, - 0, 0, 79, 0, 0, 0, 718, 0, - 81, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 718, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 77, 0, 0, 0, 0, 61, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 51, 105, - 103, 0, 0, 51, 0, 109, 107, 837, - 5, 556, 0, 0, 1, 493, 0, 117, - 115, 0, 1, 0, 0, 113, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 121, 0, 586, 0, 598, 125, 496, 123, - 841, 5, 559, 0, 0, 127, 0, 119, - 141, 143, 736, 1, 0, 733, 0, 0, - 733, 0, 0, 0, 0, 0, 0, 51, - 51, 51, 153, 151, 131, 406, 658, 147, - 730, 0, 149, 133, 145, 137, 403, 646, - 463, 505, 845, 5, 562, 0, 661, 155, - 129, 400, 897, 502, 0, 0, 0, 165, - 51, 51, 0, 167, 664, 739, 175, 177, - 0, 0, 0, 0, 0, 179, 849, 5, - 565, 0, 181, 1, 508, 173, 466, 748, - 185, 183, 0, 1, 0, 0, 0, 0, - 0, 0, 193, 189, 514, 853, 5, 568, - 0, 191, 1, 511, 187, 745, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 769, 225, 0, 712, 0, 0, - 51, 757, 0, 0, 757, 757, 0, 0, - 51, 772, 0, 772, 0, 772, 772, 772, - 0, 0, 772, 769, 769, 769, 769, 769, - 769, 769, 769, 769, 769, 769, 769, 769, - 769, 769, 769, 769, 0, 0, 247, 25, - 25, 592, 9, 0, 604, 613, 0, 766, - 0, 619, 0, 637, 631, 625, 249, 523, - 3, 251, 221, 412, 253, 857, 5, 571, - 0, 231, 199, 0, 241, 0, 667, 229, - 757, 227, 0, 243, 0, 245, 409, 197, - 0, 0, 205, 0, 0, 0, 0, 215, - 0, 0, 0, 0, 0, 0, 0, 235, - 0, 0, 589, 0, 601, 610, 0, 0, - 0, 616, 0, 0, 634, 640, 628, 622, - 207, 203, 0, 682, 19, 19, 0, 237, - 0, 685, 21, 21, 0, 0, 679, 233, - 239, 211, 213, 0, 0, 649, 1, 769, - 769, 769, 769, 769, 769, 769, 769, 769, - 769, 769, 769, 766, 769, 769, 769, 769, - 769, 769, 769, 769, 769, 769, 769, 769, - 769, 769, 769, 769, 769, 769, 769, 769, - 769, 769, 769, 769, 763, 769, 769, 769, - 769, 769, 769, 769, 769, 769, 769, 769, - 769, 760, 688, 933, 929, 23, 23, 760, - 769, 769, 769, 769, 769, 769, 769, 769, - 769, 769, 769, 769, 769, 769, 769, 769, - 769, 769, 769, 469, 754, 267, 269, 0, - 1, 0, 0, 271, 529, 861, 5, 574, - 0, 273, 1, 526, 51, 281, 279, 0, - 1, 277, 0, 0, 285, 283, 535, 865, - 5, 577, 0, 1, 532, 811, 315, 313, - 0, 1, 0, 293, 0, 51, 817, 0, - 0, 0, 0, 307, 0, 0, 799, 799, - 0, 309, 0, 0, 0, 305, 51, 808, - 808, 808, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 820, 814, 595, 0, 607, 341, 541, - 337, 301, 869, 5, 580, 0, 343, 0, - 0, 327, 303, 335, 297, 670, 673, 333, - 289, 329, 0, 339, 0, 415, 323, 0, - 0, 966, 881, 37, 0, 0, 997, 0, - 0, 37, 706, 706, 893, 802, 0, 43, - 715, 0, 889, 41, 448, 0, 451, 454, - 0, 0, 460, 457, 37, 37, 885, 0, - 0, 39, 39, 0, 433, 0, 442, 430, - 51, 0, 439, 0, 445, 436, 956, 33, - 33, 700, 700, 0, 0, 946, 29, 29, - 694, 694, 951, 31, 31, 697, 697, 941, - 27, 27, 691, 691, 0, 0, 961, 877, - 937, 991, 35, 703, 703, 937, 35, 709, - 799, 986, 0, 0, 0, 299, 0, 0, - 643, 325, 808, 808, 808, 796, 808, 652, - 311, 1, 538, 655, 331, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 793, 0, 0, 0, 0, 796, 0, - 0, 0, 0, 0, 778, 784, 0, 0, - 0, 0, 0, 0, 787, 0, 0, 0, - 0, 0, 784, 321, 319, 0, 775, 0, - 317, 0, 0, 0, 0, 790, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 781, - 0, 0, 0, 0, 0, 0, 0, 790, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 472, 475, - 359, 826, 826, 45, 826, 367, 361, 365, - 0, 363, 355, 0, 421, 0, 377, 0, - 0, 0, 375, 418, 383, 385, 0, 1, - 0, 51, 0, 51, 387, 544, 873, 5, - 583, 0, 391, 0, 389, 379, 424, 0 -] - -class << self - attr_accessor :_lex_to_state_actions - private :_lex_to_state_actions, :_lex_to_state_actions= -end -self._lex_to_state_actions = [ - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 47, 47, 0, 0, 0, 0, 47, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 47, - 0, 0, 0, 0, 0, 0, 0, 47, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 47, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 47, 0, 0, 0, 0, - 0, 47, 0, 0, 0, 0, 0, 0, - 0, 47, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 47, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 47, 0, 0, - 0, 0, 0, 0, 47, 0, 0, 0, - 0, 0, 0, 0, 47, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 47, 0, 0, 0, 0, 0, 0, 0, - 47, 0, 0, 0, 0, 0, 47, 0, - 0, 0, 0, 0, 0, 0, 0 -] - -class << self - attr_accessor :_lex_from_state_actions - private :_lex_from_state_actions, :_lex_from_state_actions= -end -self._lex_from_state_actions = [ - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 49, 49, 0, 0, 0, 0, 49, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 49, - 0, 0, 0, 0, 0, 0, 0, 49, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 49, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 49, 0, 0, 0, 0, - 0, 49, 0, 0, 0, 0, 0, 0, - 0, 49, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 49, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 49, 0, 0, - 0, 0, 0, 0, 49, 0, 0, 0, - 0, 0, 0, 0, 49, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 49, 0, 0, 0, 0, 0, 0, 0, - 49, 0, 0, 0, 0, 0, 49, 0, - 0, 0, 0, 0, 0, 0, 0 -] - -class << self - attr_accessor :_lex_eof_trans - private :_lex_eof_trans, :_lex_eof_trans= -end -self._lex_eof_trans = [ - 0, 0, 0, 0, 0, 9, 11, 13, - 13, 13, 13, 19, 19, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 94, 96, - 96, 96, 108, 108, 108, 116, 118, 118, - 118, 118, 118, 124, 116, 116, 116, 116, - 116, 116, 116, 150, 150, 150, 150, 150, - 150, 116, 166, 116, 166, 150, 150, 116, - 116, 150, 150, 150, 150, 179, 179, 179, - 184, 186, 186, 186, 190, 190, 193, 193, - 193, 193, 198, 198, 198, 184, 190, 190, - 190, 190, 190, 190, 190, 190, 190, 229, - 236, 238, 238, 238, 238, 229, 246, 246, - 246, 246, 246, 246, 246, 246, 246, 246, - 0, 0, 261, 261, 262, 263, 0, 304, - 306, 307, 308, 309, 311, 313, 317, 317, - 308, 308, 308, 308, 319, 308, 308, 313, - 308, 308, 304, 323, 323, 323, 323, 323, - 323, 313, 313, 329, 329, 329, 329, 329, - 329, 329, 329, 329, 329, 329, 329, 329, - 329, 329, 329, 329, 329, 329, 329, 329, - 329, 329, 329, 329, 329, 329, 329, 329, - 329, 329, 329, 329, 329, 329, 362, 329, - 329, 329, 329, 329, 329, 329, 329, 329, - 329, 329, 329, 329, 329, 329, 329, 329, - 329, 329, 329, 329, 329, 329, 329, 329, - 329, 329, 329, 329, 329, 329, 329, 329, - 329, 329, 329, 329, 329, 329, 329, 329, - 329, 329, 329, 329, 329, 329, 308, 0, - 406, 407, 408, 410, 406, 406, 414, 0, - 433, 435, 437, 438, 439, 440, 441, 443, - 440, 440, 440, 440, 440, 446, 440, 440, - 448, 446, 446, 440, 0, 467, 468, 19, - 19, 471, 472, 19, 468, 468, 475, 477, - 480, 468, 481, 468, 482, 483, 485, 487, - 468, 475, 488, 488, 477, 488, 492, 488, - 488, 488, 488, 0, 94, 500, 501, 500, - 500, 0, 510, 511, 513, 515, 517, 515, - 519, 0, 531, 532, 533, 534, 536, 538, - 540, 541, 541, 541, 541, 541, 541, 541, - 541, 541, 541, 541, 541, 541, 541, 541, - 541, 0, 599, 602, 605, 606, 610, 612, - 613, 614, 615, 616, 618, 621, 622, 624, - 626, 629, 631, 632, 116, 629, 634, 629, - 621, 636, 638, 621, 621, 656, 659, 661, - 662, 666, 669, 670, 671, 672, 656, 656, - 656, 656, 656, 656, 656, 656, 656, 656, - 676, 680, 682, 656, 656, 621, 687, 688, - 688, 688, 621, 621, 621, 689, 116, 621, - 621, 694, 621, 616, 599, 599, 599, 599, - 599, 599, 599, 599, 599, 599, 599, 116, - 599, 599, 599, 599, 599, 599, 599, 599, - 599, 599, 599, 599, 599, 599, 599, 599, - 599, 599, 599, 599, 599, 599, 599, 599, - 599, 599, 599, 599, 599, 599, 599, 599, - 599, 599, 599, 599, 599, 599, 599, 599, - 599, 599, 599, 599, 599, 599, 599, 599, - 747, 606, 599, 599, 599, 599, 599, 599, - 599, 599, 599, 599, 599, 599, 599, 599, - 599, 599, 599, 599, 599, 599, 599, 599, - 599, 599, 599, 772, 621, 0, 780, 781, - 782, 784, 786, 788, 0, 797, 798, 799, - 800, 802, 797, 805, 0, 190, 860, 862, - 863, 864, 865, 867, 869, 871, 874, 874, - 190, 876, 878, 879, 880, 876, 882, 884, - 884, 887, 887, 890, 901, 190, 907, 909, - 911, 912, 915, 916, 890, 890, 919, 919, - 919, 925, 927, 928, 931, 933, 934, 935, - 919, 919, 942, 947, 952, 919, 919, 959, - 959, 919, 919, 884, 876, 876, 884, 876, - 876, 871, 190, 977, 978, 978, 978, 978, - 978, 978, 984, 871, 987, 988, 989, 989, - 989, 989, 989, 989, 989, 989, 989, 989, - 989, 989, 989, 989, 989, 989, 989, 989, - 989, 989, 989, 989, 989, 989, 989, 989, - 989, 989, 989, 989, 989, 989, 989, 989, - 989, 989, 1028, 1029, 989, 989, 1033, 989, - 989, 989, 989, 989, 989, 989, 989, 989, - 989, 989, 989, 989, 989, 989, 989, 989, - 989, 989, 989, 989, 989, 989, 989, 989, - 989, 989, 989, 989, 989, 989, 989, 989, - 989, 989, 989, 989, 989, 989, 989, 989, - 989, 989, 989, 989, 989, 989, 989, 989, - 989, 989, 989, 989, 989, 989, 989, 989, - 989, 989, 989, 989, 989, 1087, 865, 1088, - 0, 1094, 1095, 1096, 1098, 1094, 1094, 1094, - 0, 1103, 1103, 1103, 1103, 1107, 0, 1117, - 1118, 1119, 1121, 1123, 1125, 1123, 1123 -] - -class << self - attr_accessor :lex_start -end -self.lex_start = 128; -class << self - attr_accessor :lex_error -end -self.lex_error = 0; - -class << self - attr_accessor :lex_en_expr_variable -end -self.lex_en_expr_variable = 129; -class << self - attr_accessor :lex_en_expr_fname -end -self.lex_en_expr_fname = 134; -class << self - attr_accessor :lex_en_expr_endfn -end -self.lex_en_expr_endfn = 247; -class << self - attr_accessor :lex_en_expr_dot -end -self.lex_en_expr_dot = 255; -class << self - attr_accessor :lex_en_expr_arg -end -self.lex_en_expr_arg = 276; -class << self - attr_accessor :lex_en_expr_cmdarg -end -self.lex_en_expr_cmdarg = 307; -class << self - attr_accessor :lex_en_expr_endarg -end -self.lex_en_expr_endarg = 313; -class << self - attr_accessor :lex_en_expr_mid -end -self.lex_en_expr_mid = 321; -class << self - attr_accessor :lex_en_expr_beg -end -self.lex_en_expr_beg = 345; -class << self - attr_accessor :lex_en_expr_labelarg -end -self.lex_en_expr_labelarg = 501; -class << self - attr_accessor :lex_en_expr_value -end -self.lex_en_expr_value = 508; -class << self - attr_accessor :lex_en_expr_end -end -self.lex_en_expr_end = 516; -class << self - attr_accessor :lex_en_leading_dot -end -self.lex_en_leading_dot = 696; -class << self - attr_accessor :lex_en_line_comment -end -self.lex_en_line_comment = 704; -class << self - attr_accessor :lex_en_line_begin -end -self.lex_en_line_begin = 710; -class << self - attr_accessor :lex_en_inside_string -end -self.lex_en_inside_string = 128; - - -# line 82 "lib/parser/lexer.rl" - # % - - attr_reader :source_buffer - - attr_accessor :diagnostics - attr_accessor :static_env - attr_accessor :force_utf32 - - attr_accessor :cond, :cmdarg, :context, :command_start - - attr_accessor :tokens, :comments - - attr_reader :paren_nest, :cmdarg_stack, :cond_stack, :lambda_stack, :version - - def initialize(version) - @version = version - @static_env = nil - @context = nil - - @tokens = nil - @comments = nil - - @_lex_actions = - if self.class.respond_to?(:_lex_actions, true) - self.class.send :_lex_actions - else - [] - end - - @emit_integer = lambda { |chars, p| emit(:tINTEGER, chars); p } - @emit_rational = lambda { |chars, p| emit(:tRATIONAL, Rational(chars)); p } - @emit_imaginary = lambda { |chars, p| emit(:tIMAGINARY, Complex(0, chars)); p } - @emit_imaginary_rational = lambda { |chars, p| emit(:tIMAGINARY, Complex(0, Rational(chars))); p } - @emit_integer_re = lambda { |chars, p| emit(:tINTEGER, chars, @ts, @te - 2); p - 2 } - @emit_integer_if = lambda { |chars, p| emit(:tINTEGER, chars, @ts, @te - 2); p - 2 } - @emit_integer_rescue = lambda { |chars, p| emit(:tINTEGER, chars, @ts, @te - 6); p - 6 } - - @emit_float = lambda { |chars, p| emit(:tFLOAT, Float(chars)); p } - @emit_imaginary_float = lambda { |chars, p| emit(:tIMAGINARY, Complex(0, Float(chars))); p } - @emit_float_if = lambda { |chars, p| emit(:tFLOAT, Float(chars), @ts, @te - 2); p - 2 } - @emit_float_rescue = lambda { |chars, p| emit(:tFLOAT, Float(chars), @ts, @te - 6); p - 6 } - - reset - end - - def reset(reset_state=true) - # Ragel state: - if reset_state - # Unit tests set state prior to resetting lexer. - @cs = self.class.lex_en_line_begin - - @cond = StackState.new('cond') - @cmdarg = StackState.new('cmdarg') - @cond_stack = [] - @cmdarg_stack = [] - end - - @force_utf32 = false # Set to true by some tests - - @source_pts = nil # @source as a codepoint array - - @p = 0 # stream position (saved manually in #advance) - @ts = nil # token start - @te = nil # token end - @act = 0 # next action - - @stack = [] # state stack - @top = 0 # state stack top pointer - - # Lexer state: - @token_queue = [] - - @eq_begin_s = nil # location of last encountered =begin - @sharp_s = nil # location of last encountered # - - @newline_s = nil # location of last encountered newline - - @num_base = nil # last numeric base - @num_digits_s = nil # starting position of numeric digits - @num_suffix_s = nil # starting position of numeric suffix - @num_xfrm = nil # numeric suffix-induced transformation - - # Ruby 1.9 ->() lambdas emit a distinct token if do/{ is - # encountered after a matching closing parenthesis. - @paren_nest = 0 - @lambda_stack = [] - - # If the lexer is in `command state' (aka expr_value) - # at the entry to #advance, it will transition to expr_cmdarg - # instead of expr_arg at certain points. - @command_start = true - - # State before =begin / =end block comment - @cs_before_block_comment = self.class.lex_en_line_begin - - @strings = Parser::LexerStrings.new(self, @version) - end - - def source_buffer=(source_buffer) - @source_buffer = source_buffer - - if @source_buffer - source = @source_buffer.source - - if source.encoding == Encoding::UTF_8 - @source_pts = source.unpack('U*') - else - @source_pts = source.unpack('C*') - end - - if @source_pts[0] == 0xfeff - # Skip byte order mark. - @p = 1 - end - else - @source_pts = nil - end - - @strings.source_buffer = @source_buffer - @strings.source_pts = @source_pts - end - - def encoding - @source_buffer.source.encoding - end - - LEX_STATES = { - :line_begin => lex_en_line_begin, - :expr_dot => lex_en_expr_dot, - :expr_fname => lex_en_expr_fname, - :expr_value => lex_en_expr_value, - :expr_beg => lex_en_expr_beg, - :expr_mid => lex_en_expr_mid, - :expr_arg => lex_en_expr_arg, - :expr_cmdarg => lex_en_expr_cmdarg, - :expr_end => lex_en_expr_end, - :expr_endarg => lex_en_expr_endarg, - :expr_endfn => lex_en_expr_endfn, - :expr_labelarg => lex_en_expr_labelarg, - - :inside_string => lex_en_inside_string - } - - def state - LEX_STATES.invert.fetch(@cs, @cs) - end - - def state=(state) - @cs = LEX_STATES.fetch(state) - end - - def push_cmdarg - @cmdarg_stack.push(@cmdarg) - @cmdarg = StackState.new("cmdarg.#{@cmdarg_stack.count}") - end - - def pop_cmdarg - @cmdarg = @cmdarg_stack.pop - end - - def push_cond - @cond_stack.push(@cond) - @cond = StackState.new("cond.#{@cond_stack.count}") - end - - def pop_cond - @cond = @cond_stack.pop - end - - def dedent_level - @strings.dedent_level - end - - # Return next token: [type, value]. - def advance - unless @token_queue.empty? - return @token_queue.shift - end - - # Ugly, but dependent on Ragel output. Consider refactoring it somehow. - klass = self.class - _lex_trans_keys = klass.send :_lex_trans_keys - _lex_key_spans = klass.send :_lex_key_spans - _lex_index_offsets = klass.send :_lex_index_offsets - _lex_indicies = klass.send :_lex_indicies - _lex_trans_targs = klass.send :_lex_trans_targs - _lex_trans_actions = klass.send :_lex_trans_actions - _lex_to_state_actions = klass.send :_lex_to_state_actions - _lex_from_state_actions = klass.send :_lex_from_state_actions - _lex_eof_trans = klass.send :_lex_eof_trans - _lex_actions = @_lex_actions - - pe = @source_pts.size + 2 - p, eof = @p, pe - - cmd_state = @command_start - @command_start = false - - -# line 8568 "lib/parser/lexer-F0.rb" -begin # ragel flat - testEof = false - _slen, _trans, _keys, _inds, _acts, _nacts = nil - _goto_level = 0 - _resume = 10 - _eof_trans = 15 - _again = 20 - _test_eof = 30 - _out = 40 - while true - _trigger_goto = false - if _goto_level <= 0 - if p == pe - _goto_level = _test_eof - next - end - if @cs == 0 - _goto_level = _out - next - end - end - if _goto_level <= _resume - _acts = _lex_from_state_actions[ @cs] - _nacts = _lex_actions[_acts] - _acts += 1 - while _nacts > 0 - _nacts -= 1 - _acts += 1 - case _lex_actions[_acts - 1] - when 52 then -# line 1 "NONE" - begin - @ts = p - end -# line 8603 "lib/parser/lexer-F0.rb" - end # from state action switch - end - if _trigger_goto - next - end - _keys = @cs << 1 - _inds = _lex_index_offsets[ @cs] - _slen = _lex_key_spans[ @cs] - _wide = ( (@source_pts[p] || 0)) - _trans = if ( _slen > 0 && - _lex_trans_keys[_keys] <= _wide && - _wide <= _lex_trans_keys[_keys + 1] - ) then - _lex_indicies[ _inds + _wide - _lex_trans_keys[_keys] ] - else - _lex_indicies[ _inds + _slen ] - end - end - if _goto_level <= _eof_trans - @cs = _lex_trans_targs[_trans] - if _lex_trans_actions[_trans] != 0 - _acts = _lex_trans_actions[_trans] - _nacts = _lex_actions[_acts] - _acts += 1 - while _nacts > 0 - _nacts -= 1 - _acts += 1 - case _lex_actions[_acts - 1] - when 0 then -# line 539 "lib/parser/lexer.rl" - begin - - # Record position of a newline for precise location reporting on tNL - # tokens. - # - # This action is embedded directly into c_nl, as it is idempotent and - # there are no cases when we need to skip it. - @newline_s = p - end - when 1 then -# line 673 "lib/parser/lexer.rl" - begin - @num_xfrm = @emit_integer end - when 2 then -# line 674 "lib/parser/lexer.rl" - begin - @num_xfrm = @emit_rational end - when 3 then -# line 675 "lib/parser/lexer.rl" - begin - @num_xfrm = @emit_imaginary end - when 4 then -# line 676 "lib/parser/lexer.rl" - begin - @num_xfrm = @emit_imaginary_rational end - when 5 then -# line 677 "lib/parser/lexer.rl" - begin - @num_xfrm = @emit_integer_re end - when 6 then -# line 678 "lib/parser/lexer.rl" - begin - @num_xfrm = @emit_integer_if end - when 7 then -# line 679 "lib/parser/lexer.rl" - begin - @num_xfrm = @emit_integer_rescue end - when 8 then -# line 682 "lib/parser/lexer.rl" - begin - @num_xfrm = @emit_float end - when 9 then -# line 683 "lib/parser/lexer.rl" - begin - @num_xfrm = @emit_imaginary_float end - when 10 then -# line 684 "lib/parser/lexer.rl" - begin - @num_xfrm = @emit_float_if end - when 11 then -# line 688 "lib/parser/lexer.rl" - begin - @num_xfrm = @emit_rational end - when 12 then -# line 689 "lib/parser/lexer.rl" - begin - @num_xfrm = @emit_imaginary_rational end - when 13 then -# line 690 "lib/parser/lexer.rl" - begin - @num_xfrm = @emit_float_rescue end - when 14 then -# line 696 "lib/parser/lexer.rl" - begin - - e_lbrace - end - when 15 then -# line 700 "lib/parser/lexer.rl" - begin - - if @strings.close_interp_on_current_literal(p) - p = p - 1; - @cs = 128; - begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - - @paren_nest -= 1 - end - when 16 then -# line 723 "lib/parser/lexer.rl" - begin - - p = on_newline(p) - end - when 17 then -# line 733 "lib/parser/lexer.rl" - begin - @sharp_s = p - 1 end - when 18 then -# line 736 "lib/parser/lexer.rl" - begin - emit_comment_from_range(p, pe) end - when 19 then -# line 777 "lib/parser/lexer.rl" - begin - tm = p end - when 20 then -# line 778 "lib/parser/lexer.rl" - begin - tm = p - 2 end - when 21 then -# line 783 "lib/parser/lexer.rl" - begin - tm = p end - when 22 then -# line 784 "lib/parser/lexer.rl" - begin - tm = p - 2 end - when 23 then -# line 785 "lib/parser/lexer.rl" - begin - tm = p - 2 end - when 24 then -# line 786 "lib/parser/lexer.rl" - begin - tm = p - 2 end - when 25 then -# line 787 "lib/parser/lexer.rl" - begin - tm = p - 3 end - when 26 then -# line 792 "lib/parser/lexer.rl" - begin - tm = p - 2 end - when 27 then -# line 797 "lib/parser/lexer.rl" - begin - tm = p - 2 end - when 28 then -# line 803 "lib/parser/lexer.rl" - begin - - @cond.push(false); @cmdarg.push(false) - - @paren_nest += 1 - end - when 29 then -# line 809 "lib/parser/lexer.rl" - begin - - @paren_nest -= 1 - end - when 30 then -# line 816 "lib/parser/lexer.rl" - begin - - @cond.push(false); @cmdarg.push(false) - - @paren_nest += 1 - - if version?(18) - @command_start = true - end - end - when 31 then -# line 826 "lib/parser/lexer.rl" - begin - - @paren_nest -= 1 - end - when 32 then -# line 1061 "lib/parser/lexer.rl" - begin - tm = p end - when 33 then -# line 1074 "lib/parser/lexer.rl" - begin - tm = p end - when 34 then -# line 1102 "lib/parser/lexer.rl" - begin - tm = p end - when 35 then -# line 1299 "lib/parser/lexer.rl" - begin - heredoc_e = p end - when 36 then -# line 1300 "lib/parser/lexer.rl" - begin - new_herebody_s = p end - when 37 then -# line 1400 "lib/parser/lexer.rl" - begin - tm = p - 1; diag_msg = :ivar_name end - when 38 then -# line 1401 "lib/parser/lexer.rl" - begin - tm = p - 2; diag_msg = :cvar_name end - when 39 then -# line 1488 "lib/parser/lexer.rl" - begin - tm = p end - when 40 then -# line 1595 "lib/parser/lexer.rl" - begin - ident_tok = tok; ident_ts = @ts; ident_te = @te; end - when 41 then -# line 1781 "lib/parser/lexer.rl" - begin - @num_base = 16; @num_digits_s = p end - when 42 then -# line 1782 "lib/parser/lexer.rl" - begin - @num_base = 10; @num_digits_s = p end - when 43 then -# line 1783 "lib/parser/lexer.rl" - begin - @num_base = 8; @num_digits_s = p end - when 44 then -# line 1784 "lib/parser/lexer.rl" - begin - @num_base = 2; @num_digits_s = p end - when 45 then -# line 1785 "lib/parser/lexer.rl" - begin - @num_base = 10; @num_digits_s = @ts end - when 46 then -# line 1786 "lib/parser/lexer.rl" - begin - @num_base = 8; @num_digits_s = @ts end - when 47 then -# line 1787 "lib/parser/lexer.rl" - begin - @num_suffix_s = p end - when 48 then -# line 1830 "lib/parser/lexer.rl" - begin - @num_suffix_s = p end - when 49 then -# line 1831 "lib/parser/lexer.rl" - begin - @num_suffix_s = p end - when 50 then -# line 2034 "lib/parser/lexer.rl" - begin - tm = p end - when 53 then -# line 1 "NONE" - begin - @te = p+1 - end - when 54 then -# line 848 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - emit_global_var - - @cs = (stack_pop); begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - end - when 55 then -# line 848 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - emit_global_var - - @cs = (stack_pop); begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - end - when 56 then -# line 855 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - emit_class_var - - @cs = (stack_pop); begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - end - when 57 then -# line 862 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - emit_instance_var - - @cs = (stack_pop); begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - end - when 58 then -# line 880 "lib/parser/lexer.rl" - begin - @act = 4; end - when 59 then -# line 884 "lib/parser/lexer.rl" - begin - @act = 5; end - when 60 then -# line 888 "lib/parser/lexer.rl" - begin - @act = 6; end - when 61 then -# line 880 "lib/parser/lexer.rl" - begin - @te = p+1 - begin emit_table(KEYWORDS_BEGIN); - @cs = 247; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - end - end - when 62 then -# line 888 "lib/parser/lexer.rl" - begin - @te = p+1 - begin emit(:tIDENTIFIER) - @cs = 247; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - end - end - when 63 then -# line 892 "lib/parser/lexer.rl" - begin - @te = p+1 - begin p = @ts - 1 - @cs = 516; begin - @stack[ @top] = @cs - @top+= 1 - @cs = 129 - _trigger_goto = true - _goto_level = _again - break - end - end - end - when 64 then -# line 901 "lib/parser/lexer.rl" - begin - @te = p+1 - begin emit_table(PUNCTUATION) - @cs = 247; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - end - end - when 65 then -# line 905 "lib/parser/lexer.rl" - begin - @te = p+1 - begin p = p - 1; p = p - 1; begin - @cs = 516 - _trigger_goto = true - _goto_level = _again - break - end - end - end - when 66 then -# line 911 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - if version?(23) - type, delimiter = tok[0..-2], tok[-1].chr - @strings.push_literal(type, delimiter, @ts) - begin - @cs = 128 - _trigger_goto = true - _goto_level = _again - break - end - - else - p = @ts - 1 - begin - @cs = 516 - _trigger_goto = true - _goto_level = _again - break - end - - end - end - end - when 67 then -# line 925 "lib/parser/lexer.rl" - begin - @te = p+1 - begin p = p - 1; begin - @cs = 516 - _trigger_goto = true - _goto_level = _again - break - end - end - end - when 68 then -# line 566 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - # Sit at EOF indefinitely. #advance would return $eof each time. - # This allows to feed the lexer more data if needed; this is only used - # in tests. - # - # Note that this action is not embedded into e_eof like e_nl and e_bs - # below. This is due to the fact that scanner state at EOF is observed - # by tests, and encapsulating it in a rule would break the introspection. - p = p - 1; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - end - when 69 then -# line 880 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin emit_table(KEYWORDS_BEGIN); - @cs = 247; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - end - end - when 70 then -# line 884 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin emit(:tCONSTANT) - @cs = 247; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - end - end - when 71 then -# line 888 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin emit(:tIDENTIFIER) - @cs = 247; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - end - end - when 72 then -# line 892 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin p = @ts - 1 - @cs = 516; begin - @stack[ @top] = @cs - @top+= 1 - @cs = 129 - _trigger_goto = true - _goto_level = _again - break - end - end - end - when 73 then -# line 901 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin emit_table(PUNCTUATION) - @cs = 247; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - end - end - when 74 then -# line 908 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin p = p - 1; begin - @cs = 345 - _trigger_goto = true - _goto_level = _again - break - end - end - end - when 75 then -# line 922 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; end - when 76 then -# line 925 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin p = p - 1; begin - @cs = 516 - _trigger_goto = true - _goto_level = _again - break - end - end - end - when 77 then -# line 901 "lib/parser/lexer.rl" - begin - begin p = (( @te))-1; end - begin emit_table(PUNCTUATION) - @cs = 247; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - end - end - when 78 then -# line 925 "lib/parser/lexer.rl" - begin - begin p = (( @te))-1; end - begin p = p - 1; begin - @cs = 516 - _trigger_goto = true - _goto_level = _again - break - end - end - end - when 79 then -# line 1 "NONE" - begin - case @act - when 4 then - begin begin p = (( @te))-1; end - emit_table(KEYWORDS_BEGIN); - @cs = 247; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - end - when 5 then - begin begin p = (( @te))-1; end - emit(:tCONSTANT) - @cs = 247; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - end - when 6 then - begin begin p = (( @te))-1; end - emit(:tIDENTIFIER) - @cs = 247; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - end -end - end - when 80 then -# line 937 "lib/parser/lexer.rl" - begin - @te = p+1 - begin emit(:tLABEL, tok(@ts, @te - 2), @ts, @te - 1) - p = p - 1; @cs = 501; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - end - end - when 81 then -# line 941 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - if @version >= 31 && @context.in_argdef - emit(:tBDOT3, '...'.freeze) - # emit(:tNL, "\n".freeze, @te - 1, @te) - @cs = 516; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - else - p -= 3; - begin - @cs = 516 - _trigger_goto = true - _goto_level = _again - break - end - - end - end - end - when 82 then -# line 955 "lib/parser/lexer.rl" - begin - @te = p+1 - begin p = p - 1; begin - @cs = 516 - _trigger_goto = true - _goto_level = _again - break - end - end - end - when 83 then -# line 566 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - # Sit at EOF indefinitely. #advance would return $eof each time. - # This allows to feed the lexer more data if needed; this is only used - # in tests. - # - # Note that this action is not embedded into e_eof like e_nl and e_bs - # below. This is due to the fact that scanner state at EOF is observed - # by tests, and encapsulating it in a rule would break the introspection. - p = p - 1; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - end - when 84 then -# line 952 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; end - when 85 then -# line 955 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin p = p - 1; begin - @cs = 516 - _trigger_goto = true - _goto_level = _again - break - end - end - end - when 86 then -# line 955 "lib/parser/lexer.rl" - begin - begin p = (( @te))-1; end - begin p = p - 1; begin - @cs = 516 - _trigger_goto = true - _goto_level = _again - break - end - end - end - when 87 then -# line 981 "lib/parser/lexer.rl" - begin - @te = p+1 - begin emit_table(PUNCTUATION) - @cs = 276; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - end - end - when 88 then -# line 987 "lib/parser/lexer.rl" - begin - @te = p+1 - begin p = p - 1; begin - @cs = 516 - _trigger_goto = true - _goto_level = _again - break - end - end - end - when 89 then -# line 566 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - # Sit at EOF indefinitely. #advance would return $eof each time. - # This allows to feed the lexer more data if needed; this is only used - # in tests. - # - # Note that this action is not embedded into e_eof like e_nl and e_bs - # below. This is due to the fact that scanner state at EOF is observed - # by tests, and encapsulating it in a rule would break the introspection. - p = p - 1; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - end - when 90 then -# line 966 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin emit(:tCONSTANT) - @cs = (arg_or_cmdarg(cmd_state)); begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - end - end - when 91 then -# line 970 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin emit(:tIDENTIFIER) - @cs = (arg_or_cmdarg(cmd_state)); begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - end - end - when 92 then -# line 974 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin emit(:tFID, tok(@ts, tm), @ts, tm) - @cs = (arg_or_cmdarg(cmd_state)); p = tm - 1; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - end - end - when 93 then -# line 981 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin emit_table(PUNCTUATION) - @cs = 276; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - end - end - when 94 then -# line 984 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; end - when 95 then -# line 987 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin p = p - 1; begin - @cs = 516 - _trigger_goto = true - _goto_level = _again - break - end - end - end - when 96 then -# line 1065 "lib/parser/lexer.rl" - begin - @act = 33; end - when 97 then -# line 1075 "lib/parser/lexer.rl" - begin - @act = 34; end - when 98 then -# line 1114 "lib/parser/lexer.rl" - begin - @act = 39; end - when 99 then -# line 1119 "lib/parser/lexer.rl" - begin - @act = 40; end - when 100 then -# line 1047 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - # Unlike expr_beg as invoked in the next rule, do not warn - p = @ts - 1 - begin - @cs = 516 - _trigger_goto = true - _goto_level = _again - break - end - - end - end - when 101 then -# line 1065 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - check_ambiguous_slash(tm) - - p = tm - 1 - begin - @cs = 345 - _trigger_goto = true - _goto_level = _again - break - end - - end - end - when 102 then -# line 1086 "lib/parser/lexer.rl" - begin - @te = p+1 - begin p = p - 1; p = p - 1; begin - @cs = 345 - _trigger_goto = true - _goto_level = _again - break - end - end - end - when 103 then -# line 1094 "lib/parser/lexer.rl" - begin - @te = p+1 - begin p = @ts - 1; begin - @cs = 345 - _trigger_goto = true - _goto_level = _again - break - end - end - end - when 104 then -# line 1103 "lib/parser/lexer.rl" - begin - @te = p+1 - begin p = tm - 1; begin - @cs = 516 - _trigger_goto = true - _goto_level = _again - break - end - end - end - when 105 then -# line 1114 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - p = @ts - 1 - begin - @cs = 516 - _trigger_goto = true - _goto_level = _again - break - end - - end - end - when 106 then -# line 1128 "lib/parser/lexer.rl" - begin - @te = p+1 - begin p = p - 1; begin - @cs = 345 - _trigger_goto = true - _goto_level = _again - break - end - end - end - when 107 then -# line 566 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - # Sit at EOF indefinitely. #advance would return $eof each time. - # This allows to feed the lexer more data if needed; this is only used - # in tests. - # - # Note that this action is not embedded into e_eof like e_nl and e_bs - # below. This is due to the fact that scanner state at EOF is observed - # by tests, and encapsulating it in a rule would break the introspection. - p = p - 1; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - end - when 108 then -# line 1003 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - if version?(18) - emit(:tLPAREN2, '('.freeze, @te - 1, @te) - @cs = 508; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - else - emit(:tLPAREN_ARG, '('.freeze, @te - 1, @te) - @cs = 345; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - end - end - when 109 then -# line 1016 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin emit(:tLPAREN2, '('.freeze) - @cs = 345; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - end - end - when 110 then -# line 1022 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin emit(:tLBRACK, '['.freeze, @te - 1, @te) - @cs = 345; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - end - end - when 111 then -# line 1028 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - if @lambda_stack.last == @paren_nest - @lambda_stack.pop - emit(:tLAMBEG, '{'.freeze, @te - 1, @te) - else - emit(:tLCURLY, '{'.freeze, @te - 1, @te) - end - @command_start = true - @paren_nest += 1 - @cs = 508; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - end - when 112 then -# line 1056 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin p = p - 1; begin - @cs = 345 - _trigger_goto = true - _goto_level = _again - break - end - end - end - when 113 then -# line 1075 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - diagnostic :warning, :ambiguous_prefix, { :prefix => tok(tm, @te) }, - range(tm, @te) - - p = tm - 1 - begin - @cs = 345 - _trigger_goto = true - _goto_level = _again - break - end - - end - end - when 114 then -# line 1091 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin p = p - 1; begin - @cs = 345 - _trigger_goto = true - _goto_level = _again - break - end - end - end - when 115 then -# line 1114 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - p = @ts - 1 - begin - @cs = 516 - _trigger_goto = true - _goto_level = _again - break - end - - end - end - when 116 then -# line 1119 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; end - when 117 then -# line 1122 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin begin - @cs = 516 - _trigger_goto = true - _goto_level = _again - break - end - end - end - when 118 then -# line 1125 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin p = p - 1; begin - @cs = 516 - _trigger_goto = true - _goto_level = _again - break - end - end - end - when 119 then -# line 1128 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin p = p - 1; begin - @cs = 345 - _trigger_goto = true - _goto_level = _again - break - end - end - end - when 120 then -# line 1119 "lib/parser/lexer.rl" - begin - begin p = (( @te))-1; end - end - when 121 then -# line 1128 "lib/parser/lexer.rl" - begin - begin p = (( @te))-1; end - begin p = p - 1; begin - @cs = 345 - _trigger_goto = true - _goto_level = _again - break - end - end - end - when 122 then -# line 1 "NONE" - begin - case @act - when 33 then - begin begin p = (( @te))-1; end - - check_ambiguous_slash(tm) - - p = tm - 1 - begin - @cs = 345 - _trigger_goto = true - _goto_level = _again - break - end - - end - when 34 then - begin begin p = (( @te))-1; end - - diagnostic :warning, :ambiguous_prefix, { :prefix => tok(tm, @te) }, - range(tm, @te) - - p = tm - 1 - begin - @cs = 345 - _trigger_goto = true - _goto_level = _again - break - end - - end - when 39 then - begin begin p = (( @te))-1; end - - p = @ts - 1 - begin - @cs = 516 - _trigger_goto = true - _goto_level = _again - break - end - - end - else - begin begin p = (( @te))-1; end -end -end - end - when 123 then -# line 1151 "lib/parser/lexer.rl" - begin - @act = 46; end - when 124 then -# line 1164 "lib/parser/lexer.rl" - begin - @act = 47; end - when 125 then -# line 1164 "lib/parser/lexer.rl" - begin - @te = p+1 - begin p = @ts - 1 - begin - @cs = 276 - _trigger_goto = true - _goto_level = _again - break - end - end - end - when 126 then -# line 566 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - # Sit at EOF indefinitely. #advance would return $eof each time. - # This allows to feed the lexer more data if needed; this is only used - # in tests. - # - # Note that this action is not embedded into e_eof like e_nl and e_bs - # below. This is due to the fact that scanner state at EOF is observed - # by tests, and encapsulating it in a rule would break the introspection. - p = p - 1; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - end - when 127 then -# line 1141 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - emit(:tLPAREN_ARG, '('.freeze, @te - 1, @te) - if version?(18) - @cs = 508; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - else - @cs = 345; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - end - end - when 128 then -# line 1164 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin p = @ts - 1 - begin - @cs = 276 - _trigger_goto = true - _goto_level = _again - break - end - end - end - when 129 then -# line 1164 "lib/parser/lexer.rl" - begin - begin p = (( @te))-1; end - begin p = @ts - 1 - begin - @cs = 276 - _trigger_goto = true - _goto_level = _again - break - end - end - end - when 130 then -# line 1 "NONE" - begin - case @act - when 46 then - begin begin p = (( @te))-1; end - - if @cond.active? - emit(:kDO_COND, 'do'.freeze, @te - 2, @te) - else - emit(:kDO, 'do'.freeze, @te - 2, @te) - end - @cs = 508; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - when 47 then - begin begin p = (( @te))-1; end - p = @ts - 1 - begin - @cs = 276 - _trigger_goto = true - _goto_level = _again - break - end - end -end - end - when 131 then -# line 1200 "lib/parser/lexer.rl" - begin - @te = p+1 - begin emit_do(true) - @cs = 508; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - end - end - when 132 then -# line 1206 "lib/parser/lexer.rl" - begin - @te = p+1 - begin p = p - 1; begin - @cs = 516 - _trigger_goto = true - _goto_level = _again - break - end - end - end - when 133 then -# line 566 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - # Sit at EOF indefinitely. #advance would return $eof each time. - # This allows to feed the lexer more data if needed; this is only used - # in tests. - # - # Note that this action is not embedded into e_eof like e_nl and e_bs - # below. This is due to the fact that scanner state at EOF is observed - # by tests, and encapsulating it in a rule would break the introspection. - p = p - 1; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - end - when 134 then -# line 1187 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - if @lambda_stack.last == @paren_nest - @lambda_stack.pop - emit(:tLAMBEG, '{'.freeze) - else - emit(:tLBRACE_ARG, '{'.freeze) - end - @paren_nest += 1 - @command_start = true - @cs = 508; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - end - when 135 then -# line 1203 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; end - when 136 then -# line 1206 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin p = p - 1; begin - @cs = 516 - _trigger_goto = true - _goto_level = _again - break - end - end - end - when 137 then -# line 1218 "lib/parser/lexer.rl" - begin - @act = 54; end - when 138 then -# line 1222 "lib/parser/lexer.rl" - begin - @act = 55; end - when 139 then -# line 1230 "lib/parser/lexer.rl" - begin - @te = p+1 - begin p = p - 1; begin - @cs = 345 - _trigger_goto = true - _goto_level = _again - break - end - end - end - when 140 then -# line 566 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - # Sit at EOF indefinitely. #advance would return $eof each time. - # This allows to feed the lexer more data if needed; this is only used - # in tests. - # - # Note that this action is not embedded into e_eof like e_nl and e_bs - # below. This is due to the fact that scanner state at EOF is observed - # by tests, and encapsulating it in a rule would break the introspection. - p = p - 1; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - end - when 141 then -# line 1222 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin p = @ts - 1; begin - @cs = 345 - _trigger_goto = true - _goto_level = _again - break - end - end - end - when 142 then -# line 1224 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; end - when 143 then -# line 1227 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin p = p - 1; begin - @cs = 516 - _trigger_goto = true - _goto_level = _again - break - end - end - end - when 144 then -# line 1230 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin p = p - 1; begin - @cs = 345 - _trigger_goto = true - _goto_level = _again - break - end - end - end - when 145 then -# line 1 "NONE" - begin - case @act - when 54 then - begin begin p = (( @te))-1; end - emit_table(KEYWORDS) - @cs = 345; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - end - when 55 then - begin begin p = (( @te))-1; end - p = @ts - 1; begin - @cs = 345 - _trigger_goto = true - _goto_level = _again - break - end - end -end - end - when 146 then -# line 1245 "lib/parser/lexer.rl" - begin - @act = 60; end - when 147 then -# line 1348 "lib/parser/lexer.rl" - begin - @act = 67; end - when 148 then -# line 1442 "lib/parser/lexer.rl" - begin - @act = 76; end - when 149 then -# line 1483 "lib/parser/lexer.rl" - begin - @act = 80; end - when 150 then -# line 1489 "lib/parser/lexer.rl" - begin - @act = 81; end - when 151 then -# line 1495 "lib/parser/lexer.rl" - begin - @act = 82; end - when 152 then -# line 1586 "lib/parser/lexer.rl" - begin - @act = 86; end - when 153 then -# line 831 "lib/parser/lexer.rl" - begin - @act = 87; end - when 154 then -# line 1632 "lib/parser/lexer.rl" - begin - @act = 91; end - when 155 then -# line 1245 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - emit(:tUNARY_NUM, tok(@ts, @ts + 1), @ts, @ts + 1) - p = p - 1; @cs = 516; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - end - when 156 then -# line 1262 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - type = delimiter = tok[0].chr - @strings.push_literal(type, delimiter, @ts) - - p = p - 1; - begin - @cs = 128 - _trigger_goto = true - _goto_level = _again - break - end - - end - end - when 157 then -# line 1272 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - type, delimiter = @source_buffer.slice(@ts, 1).chr, tok[-1].chr - @strings.push_literal(type, delimiter, @ts) - begin - @cs = 128 - _trigger_goto = true - _goto_level = _again - break - end - - end - end - when 158 then -# line 1280 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - type, delimiter = tok[0..-2], tok[-1].chr - @strings.push_literal(type, delimiter, @ts) - begin - @cs = 128 - _trigger_goto = true - _goto_level = _again - break - end - - end - end - when 159 then -# line 1357 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - p = p - 1; p = p - 1; - emit(:tSYMBEG, tok(@ts, @ts + 1), @ts, @ts + 1) - begin - @cs = 134 - _trigger_goto = true - _goto_level = _again - break - end - - end - end - when 160 then -# line 1365 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - type, delimiter = tok, tok[-1].chr - @strings.push_literal(type, delimiter, @ts); - - begin - @cs = 128 - _trigger_goto = true - _goto_level = _again - break - end - - end - end - when 161 then -# line 1375 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - emit(:tSYMBOL, tok(@ts + 1, @ts + 2)) - @cs = 516; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - end - when 162 then -# line 1389 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - gvar_name = tok(@ts + 1) - - if @version >= 33 && gvar_name.start_with?('$0') && gvar_name.length > 2 - diagnostic :error, :gvar_name, { :name => gvar_name }, range(@ts + 1, @te) - end - - emit(:tSYMBOL, gvar_name, @ts) - @cs = 516; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - end - when 163 then -# line 1416 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - p, next_state = @strings.read_character_constant(@ts) - p = p - 1; # Ragel will do `p += 1` to consume input, prevent it - - # If strings lexer founds a character constant (?a) emit it, - # otherwise read ternary operator - if @token_queue.empty? - begin - @cs = (next_state) - _trigger_goto = true - _goto_level = _again - break - end - - else - @cs = (next_state); - begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - end - end - when 164 then -# line 1431 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - diagnostic :fatal, :incomplete_escape, nil, range(@ts, @ts + 1) - end - end - when 165 then -# line 1483 "lib/parser/lexer.rl" - begin - @te = p+1 - begin emit_table(PUNCTUATION_BEGIN) - begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - end - end - when 166 then -# line 1504 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - p = p - 1; - - if version?(18) - ident = tok(@ts, @te - 2) - - emit((@source_buffer.slice(@ts, 1) =~ /[A-Z]/) ? :tCONSTANT : :tIDENTIFIER, - ident, @ts, @te - 2) - p = p - 1; # continue as a symbol - - if !@static_env.nil? && @static_env.declared?(ident) - @cs = 516; - else - @cs = (arg_or_cmdarg(cmd_state)); - end - else - emit(:tLABEL, tok(@ts, @te - 2), @ts, @te - 1) - @cs = 501; - end - - begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - end - when 167 then -# line 1542 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - # Here we scan and conditionally emit "\n": - # + if it's there - # + and emitted we do nothing - # + and not emitted we return `p` to "\n" to process it on the next scan - # + if it's not there we do nothing - followed_by_nl = @te - 1 == @newline_s - nl_emitted = false - dots_te = followed_by_nl ? @te - 1 : @te - - if @version >= 30 - if @lambda_stack.any? && @lambda_stack.last + 1 == @paren_nest - # To reject `->(...)` like `->...` - emit(:tDOT3, '...'.freeze, @ts, dots_te) - else - emit(:tBDOT3, '...'.freeze, @ts, dots_te) - - if @version >= 31 && followed_by_nl && @context.in_argdef - emit(:tNL, @te - 1, @te) - nl_emitted = true - end - end - elsif @version >= 27 - emit(:tBDOT3, '...'.freeze, @ts, dots_te) - else - emit(:tDOT3, '...'.freeze, @ts, dots_te) - end - - if followed_by_nl && !nl_emitted - # return "\n" to process it on the next scan - p = p - 1; - end - - @cs = 345; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - end - when 168 then -# line 1597 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - emit(:tIDENTIFIER, ident_tok, ident_ts, ident_te) - p = ident_te - 1 - - if !@static_env.nil? && @static_env.declared?(ident_tok) && @version < 25 - @cs = 247; - else - @cs = 307; - end - begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - end - when 169 then -# line 1616 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - p = @ts - 1 - @cs_before_block_comment = @cs - begin - @cs = 710 - _trigger_goto = true - _goto_level = _again - break - end - - end - end - when 170 then -# line 1632 "lib/parser/lexer.rl" - begin - @te = p+1 - begin p = @ts - 1; begin - @cs = 516 - _trigger_goto = true - _goto_level = _again - break - end - end - end - when 171 then -# line 566 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - # Sit at EOF indefinitely. #advance would return $eof each time. - # This allows to feed the lexer more data if needed; this is only used - # in tests. - # - # Note that this action is not embedded into e_eof like e_nl and e_bs - # below. This is due to the fact that scanner state at EOF is observed - # by tests, and encapsulating it in a rule would break the introspection. - p = p - 1; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - end - when 172 then -# line 1245 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - emit(:tUNARY_NUM, tok(@ts, @ts + 1), @ts, @ts + 1) - p = p - 1; @cs = 516; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - end - when 173 then -# line 1252 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin emit(:tSTAR, '*'.freeze) - begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - end - end - when 174 then -# line 1287 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - diagnostic :fatal, :string_eof, nil, range(@ts, @ts + 1) - end - end - when 175 then -# line 1301 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - tok(@ts, heredoc_e) =~ /^<<(-?)(~?)(["'`]?)(.*)\3$/m - - indent = !$1.empty? || !$2.empty? - dedent_body = !$2.empty? - type = $3.empty? ? '<<"'.freeze : ('<<'.freeze + $3) - delimiter = $4 - - if @version >= 27 - if delimiter.count("\n") > 0 || delimiter.count("\r") > 0 - diagnostic :error, :unterminated_heredoc_id, nil, range(@ts, @ts + 1) - end - elsif @version >= 24 - if delimiter.count("\n") > 0 - if delimiter.end_with?("\n") - diagnostic :warning, :heredoc_id_ends_with_nl, nil, range(@ts, @ts + 1) - delimiter = delimiter.rstrip - else - diagnostic :fatal, :heredoc_id_has_newline, nil, range(@ts, @ts + 1) - end - end - end - - if dedent_body && version?(18, 19, 20, 21, 22) - emit(:tLSHFT, '<<'.freeze, @ts, @ts + 2) - p = @ts + 1 - @cs = 345; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - else - @strings.push_literal(type, delimiter, @ts, heredoc_e, indent, dedent_body); - @strings.herebody_s ||= new_herebody_s - - p = @strings.herebody_s - 1 - @cs = 128; - end - end - end - when 176 then -# line 1348 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - diagnostic :error, :unterminated_heredoc_id, nil, range(@ts, @ts + 1) - end - end - when 177 then -# line 1381 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - emit(:tSYMBOL, tok(@ts + 1, tm), @ts, tm) - p = tm - 1 - @cs = 516; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - end - when 178 then -# line 1389 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - gvar_name = tok(@ts + 1) - - if @version >= 33 && gvar_name.start_with?('$0') && gvar_name.length > 2 - diagnostic :error, :gvar_name, { :name => gvar_name }, range(@ts + 1, @te) - end - - emit(:tSYMBOL, gvar_name, @ts) - @cs = 516; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - end - when 179 then -# line 1403 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - emit_colon_with_digits(p, tm, diag_msg) - - @cs = 516; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - end - when 180 then -# line 1431 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - diagnostic :fatal, :incomplete_escape, nil, range(@ts, @ts + 1) - end - end - when 181 then -# line 1459 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - if @lambda_stack.last == @paren_nest - @lambda_stack.pop - @command_start = true - emit(:tLAMBEG, '{'.freeze) - else - emit(:tLBRACE, '{'.freeze) - end - @paren_nest += 1 - begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - end - when 182 then -# line 1473 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin emit(:tLBRACK, '['.freeze) - begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - end - end - when 183 then -# line 1478 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin emit(:tLPAREN, '('.freeze) - begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - end - end - when 184 then -# line 1483 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin emit_table(PUNCTUATION_BEGIN) - begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - end - end - when 185 then -# line 1489 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin emit(:kRESCUE, 'rescue'.freeze, @ts, tm) - p = tm - 1 - @cs = 321; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - end - end - when 186 then -# line 1531 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - if @version >= 27 - emit(:tBDOT2) - else - emit(:tDOT2) - end - - @cs = 345; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - end - when 187 then -# line 1542 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - # Here we scan and conditionally emit "\n": - # + if it's there - # + and emitted we do nothing - # + and not emitted we return `p` to "\n" to process it on the next scan - # + if it's not there we do nothing - followed_by_nl = @te - 1 == @newline_s - nl_emitted = false - dots_te = followed_by_nl ? @te - 1 : @te - - if @version >= 30 - if @lambda_stack.any? && @lambda_stack.last + 1 == @paren_nest - # To reject `->(...)` like `->...` - emit(:tDOT3, '...'.freeze, @ts, dots_te) - else - emit(:tBDOT3, '...'.freeze, @ts, dots_te) - - if @version >= 31 && followed_by_nl && @context.in_argdef - emit(:tNL, @te - 1, @te) - nl_emitted = true - end - end - elsif @version >= 27 - emit(:tBDOT3, '...'.freeze, @ts, dots_te) - else - emit(:tDOT3, '...'.freeze, @ts, dots_te) - end - - if followed_by_nl && !nl_emitted - # return "\n" to process it on the next scan - p = p - 1; - end - - @cs = 345; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - end - when 188 then -# line 1586 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin p = @ts - 1 - begin - @cs = 516 - _trigger_goto = true - _goto_level = _again - break - end - end - end - when 189 then -# line 831 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - emit(:tIDENTIFIER) - - if !@static_env.nil? && @static_env.declared?(tok) - @cs = 247; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - elsif @version >= 32 && tok =~ /\A_[1-9]\z/ - @cs = 247; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - else - @cs = (arg_or_cmdarg(cmd_state)); begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - end - end - when 190 then -# line 1613 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; end - when 191 then -# line 1616 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - p = @ts - 1 - @cs_before_block_comment = @cs - begin - @cs = 710 - _trigger_goto = true - _goto_level = _again - break - end - - end - end - when 192 then -# line 1632 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin p = @ts - 1; begin - @cs = 516 - _trigger_goto = true - _goto_level = _again - break - end - end - end - when 193 then -# line 1287 "lib/parser/lexer.rl" - begin - begin p = (( @te))-1; end - begin - diagnostic :fatal, :string_eof, nil, range(@ts, @ts + 1) - end - end - when 194 then -# line 1348 "lib/parser/lexer.rl" - begin - begin p = (( @te))-1; end - begin - diagnostic :error, :unterminated_heredoc_id, nil, range(@ts, @ts + 1) - end - end - when 195 then -# line 831 "lib/parser/lexer.rl" - begin - begin p = (( @te))-1; end - begin - emit(:tIDENTIFIER) - - if !@static_env.nil? && @static_env.declared?(tok) - @cs = 247; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - elsif @version >= 32 && tok =~ /\A_[1-9]\z/ - @cs = 247; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - else - @cs = (arg_or_cmdarg(cmd_state)); begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - end - end - when 196 then -# line 1613 "lib/parser/lexer.rl" - begin - begin p = (( @te))-1; end - end - when 197 then -# line 1632 "lib/parser/lexer.rl" - begin - begin p = (( @te))-1; end - begin p = @ts - 1; begin - @cs = 516 - _trigger_goto = true - _goto_level = _again - break - end - end - end - when 198 then -# line 1 "NONE" - begin - case @act - when 60 then - begin begin p = (( @te))-1; end - - emit(:tUNARY_NUM, tok(@ts, @ts + 1), @ts, @ts + 1) - p = p - 1; @cs = 516; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - when 67 then - begin begin p = (( @te))-1; end - - diagnostic :error, :unterminated_heredoc_id, nil, range(@ts, @ts + 1) - end - when 76 then - begin begin p = (( @te))-1; end - - if @version >= 27 - emit(:tPIPE, tok(@ts, @ts + 1), @ts, @ts + 1) - p = p - 1; - @cs = 345; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - else - p -= 2 - begin - @cs = 516 - _trigger_goto = true - _goto_level = _again - break - end - - end - end - when 80 then - begin begin p = (( @te))-1; end - emit_table(PUNCTUATION_BEGIN) - begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - end - when 81 then - begin begin p = (( @te))-1; end - emit(:kRESCUE, 'rescue'.freeze, @ts, tm) - p = tm - 1 - @cs = 321; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - end - when 82 then - begin begin p = (( @te))-1; end - emit_table(KEYWORDS_BEGIN) - @command_start = true - @cs = 508; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - end - when 86 then - begin begin p = (( @te))-1; end - p = @ts - 1 - begin - @cs = 516 - _trigger_goto = true - _goto_level = _again - break - end - end - when 87 then - begin begin p = (( @te))-1; end - - emit(:tIDENTIFIER) - - if !@static_env.nil? && @static_env.declared?(tok) - @cs = 247; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - elsif @version >= 32 && tok =~ /\A_[1-9]\z/ - @cs = 247; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - else - @cs = (arg_or_cmdarg(cmd_state)); begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - end - when 91 then - begin begin p = (( @te))-1; end - p = @ts - 1; begin - @cs = 516 - _trigger_goto = true - _goto_level = _again - break - end - end -end - end - when 199 then -# line 1652 "lib/parser/lexer.rl" - begin - @te = p+1 - begin p = p - 1; begin - @cs = 345 - _trigger_goto = true - _goto_level = _again - break - end - end - end - when 200 then -# line 566 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - # Sit at EOF indefinitely. #advance would return $eof each time. - # This allows to feed the lexer more data if needed; this is only used - # in tests. - # - # Note that this action is not embedded into e_eof like e_nl and e_bs - # below. This is due to the fact that scanner state at EOF is observed - # by tests, and encapsulating it in a rule would break the introspection. - p = p - 1; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - end - when 201 then -# line 1640 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; end - when 202 then -# line 1643 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - if @context.in_kwarg - p = p - 1; begin - @cs = 516 - _trigger_goto = true - _goto_level = _again - break - end - - else - begin - @cs = 710 - _trigger_goto = true - _goto_level = _again - break - end - - end - end - end - when 203 then -# line 1652 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin p = p - 1; begin - @cs = 345 - _trigger_goto = true - _goto_level = _again - break - end - end - end - when 204 then -# line 1662 "lib/parser/lexer.rl" - begin - @te = p+1 - begin p = @ts - 1 - begin - @cs = 516 - _trigger_goto = true - _goto_level = _again - break - end - end - end - when 205 then -# line 1667 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - @strings.push_literal(tok, tok, @ts) - begin - @cs = 128 - _trigger_goto = true - _goto_level = _again - break - end - - end - end - when 206 then -# line 1678 "lib/parser/lexer.rl" - begin - @te = p+1 - begin p = p - 1; begin - @cs = 345 - _trigger_goto = true - _goto_level = _again - break - end - end - end - when 207 then -# line 566 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - # Sit at EOF indefinitely. #advance would return $eof each time. - # This allows to feed the lexer more data if needed; this is only used - # in tests. - # - # Note that this action is not embedded into e_eof like e_nl and e_bs - # below. This is due to the fact that scanner state at EOF is observed - # by tests, and encapsulating it in a rule would break the introspection. - p = p - 1; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - end - when 208 then -# line 1672 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; end - when 209 then -# line 1675 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin begin - @cs = 710 - _trigger_goto = true - _goto_level = _again - break - end - end - end - when 210 then -# line 1678 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin p = p - 1; begin - @cs = 345 - _trigger_goto = true - _goto_level = _again - break - end - end - end - when 211 then -# line 1678 "lib/parser/lexer.rl" - begin - begin p = (( @te))-1; end - begin p = p - 1; begin - @cs = 345 - _trigger_goto = true - _goto_level = _again - break - end - end - end - when 212 then -# line 1697 "lib/parser/lexer.rl" - begin - @act = 104; end - when 213 then -# line 1726 "lib/parser/lexer.rl" - begin - @act = 105; end - when 214 then -# line 1730 "lib/parser/lexer.rl" - begin - @act = 106; end - when 215 then -# line 1735 "lib/parser/lexer.rl" - begin - @act = 107; end - when 216 then -# line 1740 "lib/parser/lexer.rl" - begin - @act = 108; end - when 217 then -# line 1745 "lib/parser/lexer.rl" - begin - @act = 109; end - when 218 then -# line 1749 "lib/parser/lexer.rl" - begin - @act = 110; end - when 219 then -# line 1760 "lib/parser/lexer.rl" - begin - @act = 111; end - when 220 then -# line 1774 "lib/parser/lexer.rl" - begin - @act = 112; end - when 221 then -# line 1788 "lib/parser/lexer.rl" - begin - @act = 113; end - when 222 then -# line 1806 "lib/parser/lexer.rl" - begin - @act = 115; end - when 223 then -# line 1818 "lib/parser/lexer.rl" - begin - @act = 116; end - when 224 then -# line 1833 "lib/parser/lexer.rl" - begin - @act = 117; end - when 225 then -# line 1862 "lib/parser/lexer.rl" - begin - @act = 119; end - when 226 then -# line 831 "lib/parser/lexer.rl" - begin - @act = 123; end - when 227 then -# line 1884 "lib/parser/lexer.rl" - begin - @act = 124; end - when 228 then -# line 1910 "lib/parser/lexer.rl" - begin - @act = 126; end - when 229 then -# line 1916 "lib/parser/lexer.rl" - begin - @act = 127; end - when 230 then -# line 1689 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - emit(:tLAMBDA, '->'.freeze, @ts, @ts + 2) - - @lambda_stack.push @paren_nest - @cs = 247; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - end - when 231 then -# line 1730 "lib/parser/lexer.rl" - begin - @te = p+1 - begin emit_singleton_class - @cs = 508; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - end - end - when 232 then -# line 1851 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - type, delimiter = tok, tok[-1].chr - @strings.push_literal(type, delimiter, @ts, nil, false, false, true); - begin - @cs = 128 - _trigger_goto = true - _goto_level = _again - break - end - - end - end - when 233 then -# line 1870 "lib/parser/lexer.rl" - begin - @te = p+1 - begin p = @ts - 1; begin - @stack[ @top] = @cs - @top+= 1 - @cs = 129 - _trigger_goto = true - _goto_level = _again - break - end - end - end - when 234 then -# line 1877 "lib/parser/lexer.rl" - begin - @te = p+1 - begin emit_table(PUNCTUATION) - @cs = 255; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - end - end - when 235 then -# line 1901 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - emit_table(PUNCTUATION) - @cs = 508; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - end - when 236 then -# line 1910 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - emit_table(PUNCTUATION); - @cs = 508; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - end - when 237 then -# line 1937 "lib/parser/lexer.rl" - begin - @te = p+1 - begin emit(:tOP_ASGN, tok(@ts, @te - 1)) - @cs = 345; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - end - end - when 238 then -# line 1941 "lib/parser/lexer.rl" - begin - @te = p+1 - begin emit(:tEH, '?'.freeze) - @cs = 508; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - end - end - when 239 then -# line 1949 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - if @paren_nest == 0 - diagnostic :warning, :triple_dot_at_eol, nil, range(@ts, @te - 1) - end - - emit(:tDOT3, '...'.freeze, @ts, @te - 1) - p = p - 1; - @cs = 345; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - end - when 240 then -# line 1960 "lib/parser/lexer.rl" - begin - @te = p+1 - begin emit_table(PUNCTUATION) - @cs = 345; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - end - end - when 241 then -# line 1973 "lib/parser/lexer.rl" - begin - @te = p+1 - begin emit(:tSEMI, ';'.freeze) - @command_start = true - @cs = 508; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - end - end - when 242 then -# line 1977 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - diagnostic :error, :bare_backslash, nil, range(@ts, @ts + 1) - p = p - 1; - end - end - when 243 then -# line 1983 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - diagnostic :fatal, :unexpected, { :character => tok.inspect[1..-2] } - end - end - when 244 then -# line 566 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - # Sit at EOF indefinitely. #advance would return $eof each time. - # This allows to feed the lexer more data if needed; this is only used - # in tests. - # - # Note that this action is not embedded into e_eof like e_nl and e_bs - # below. This is due to the fact that scanner state at EOF is observed - # by tests, and encapsulating it in a rule would break the introspection. - p = p - 1; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - end - when 245 then -# line 1697 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - if @lambda_stack.last == @paren_nest - @lambda_stack.pop - - if tok == '{'.freeze - emit(:tLAMBEG, '{'.freeze) - else # 'do' - emit(:kDO_LAMBDA, 'do'.freeze) - end - else - if tok == '{'.freeze - emit(:tLCURLY, '{'.freeze) - else # 'do' - emit_do - end - end - if tok == '{'.freeze - @paren_nest += 1 - end - @command_start = true - - @cs = 508; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - end - when 246 then -# line 1726 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin emit_table(KEYWORDS) - @cs = 134; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - end - end - when 247 then -# line 1730 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin emit_singleton_class - @cs = 508; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - end - end - when 248 then -# line 1740 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin emit_table(KEYWORDS) - @command_start = true - @cs = 508; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - end - end - when 249 then -# line 1788 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - digits = numeric_literal_int - - if version?(18, 19, 20) - emit(:tINTEGER, digits.to_i(@num_base), @ts, @num_suffix_s) - p = @num_suffix_s - 1 - else - p = @num_xfrm.call(digits.to_i(@num_base), p) - end - begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - end - when 250 then -# line 1801 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - diagnostic :error, :no_dot_digit_literal - end - end - when 251 then -# line 1833 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - digits = tok(@ts, @num_suffix_s) - - if version?(18, 19, 20) - emit(:tFLOAT, Float(digits), @ts, @num_suffix_s) - p = @num_suffix_s - 1 - else - p = @num_xfrm.call(digits, p) - end - begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - end - when 252 then -# line 1862 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin emit(:tCONSTANT) - @cs = (arg_or_cmdarg(cmd_state)); begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - end - end - when 253 then -# line 1866 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin emit(:tCONSTANT, tok(@ts, tm), @ts, tm) - p = tm - 1; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - end - end - when 254 then -# line 1870 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin p = @ts - 1; begin - @stack[ @top] = @cs - @top+= 1 - @cs = 129 - _trigger_goto = true - _goto_level = _again - break - end - end - end - when 255 then -# line 1877 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin emit_table(PUNCTUATION) - @cs = 255; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - end - end - when 256 then -# line 831 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - emit(:tIDENTIFIER) - - if !@static_env.nil? && @static_env.declared?(tok) - @cs = 247; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - elsif @version >= 32 && tok =~ /\A_[1-9]\z/ - @cs = 247; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - else - @cs = (arg_or_cmdarg(cmd_state)); begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - end - end - when 257 then -# line 1884 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - if tm == @te - # Suffix was consumed, e.g. foo! - emit(:tFID) - else - # Suffix was not consumed, e.g. foo!= - emit(:tIDENTIFIER, tok(@ts, tm), @ts, tm) - p = tm - 1 - end - @cs = 276; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - end - when 258 then -# line 1901 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - emit_table(PUNCTUATION) - @cs = 508; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - end - when 259 then -# line 1910 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - emit_table(PUNCTUATION); - @cs = 508; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - end - when 260 then -# line 1916 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin emit_table(PUNCTUATION) - @cs = 345; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - end - end - when 261 then -# line 1920 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - emit_rbrace_rparen_rbrack - - if tok == '}'.freeze || tok == ']'.freeze - if @version >= 25 - @cs = 516; - else - @cs = 313; - end - else # ) - # fnext expr_endfn; ? - end - - begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - end - when 262 then -# line 1945 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin emit(:tLBRACK2, '['.freeze) - @cs = 345; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - end - end - when 263 then -# line 1960 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin emit_table(PUNCTUATION) - @cs = 345; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - end - end - when 264 then -# line 1967 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; end - when 265 then -# line 1970 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin begin - @cs = 696 - _trigger_goto = true - _goto_level = _again - break - end - end - end - when 266 then -# line 1983 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - diagnostic :fatal, :unexpected, { :character => tok.inspect[1..-2] } - end - end - when 267 then -# line 1788 "lib/parser/lexer.rl" - begin - begin p = (( @te))-1; end - begin - digits = numeric_literal_int - - if version?(18, 19, 20) - emit(:tINTEGER, digits.to_i(@num_base), @ts, @num_suffix_s) - p = @num_suffix_s - 1 - else - p = @num_xfrm.call(digits.to_i(@num_base), p) - end - begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - end - when 268 then -# line 1801 "lib/parser/lexer.rl" - begin - begin p = (( @te))-1; end - begin - diagnostic :error, :no_dot_digit_literal - end - end - when 269 then -# line 1833 "lib/parser/lexer.rl" - begin - begin p = (( @te))-1; end - begin - digits = tok(@ts, @num_suffix_s) - - if version?(18, 19, 20) - emit(:tFLOAT, Float(digits), @ts, @num_suffix_s) - p = @num_suffix_s - 1 - else - p = @num_xfrm.call(digits, p) - end - begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - end - when 270 then -# line 1983 "lib/parser/lexer.rl" - begin - begin p = (( @te))-1; end - begin - diagnostic :fatal, :unexpected, { :character => tok.inspect[1..-2] } - end - end - when 271 then -# line 1 "NONE" - begin - case @act - when 104 then - begin begin p = (( @te))-1; end - - if @lambda_stack.last == @paren_nest - @lambda_stack.pop - - if tok == '{'.freeze - emit(:tLAMBEG, '{'.freeze) - else # 'do' - emit(:kDO_LAMBDA, 'do'.freeze) - end - else - if tok == '{'.freeze - emit(:tLCURLY, '{'.freeze) - else # 'do' - emit_do - end - end - if tok == '{'.freeze - @paren_nest += 1 - end - @command_start = true - - @cs = 508; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - when 105 then - begin begin p = (( @te))-1; end - emit_table(KEYWORDS) - @cs = 134; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - end - when 106 then - begin begin p = (( @te))-1; end - emit_singleton_class - @cs = 508; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - end - when 107 then - begin begin p = (( @te))-1; end - emit_table(KEYWORDS) - @cs = 345; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - end - when 108 then - begin begin p = (( @te))-1; end - emit_table(KEYWORDS) - @command_start = true - @cs = 508; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - end - when 109 then - begin begin p = (( @te))-1; end - emit_table(KEYWORDS) - @cs = 321; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - end - when 110 then - begin begin p = (( @te))-1; end - - emit_table(KEYWORDS) - - if version?(18) && tok == 'not'.freeze - @cs = 345; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - else - @cs = 276; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - end - when 111 then - begin begin p = (( @te))-1; end - - if version?(18) - emit(:tIDENTIFIER) - - unless !@static_env.nil? && @static_env.declared?(tok) - @cs = (arg_or_cmdarg(cmd_state)); - end - else - emit(:k__ENCODING__, '__ENCODING__'.freeze) - end - begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - when 112 then - begin begin p = (( @te))-1; end - emit_table(KEYWORDS) - begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - end - when 113 then - begin begin p = (( @te))-1; end - - digits = numeric_literal_int - - if version?(18, 19, 20) - emit(:tINTEGER, digits.to_i(@num_base), @ts, @num_suffix_s) - p = @num_suffix_s - 1 - else - p = @num_xfrm.call(digits.to_i(@num_base), p) - end - begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - when 115 then - begin begin p = (( @te))-1; end - - if version?(18, 19, 20) - diagnostic :error, - :trailing_in_number, { :character => tok(@te - 1, @te) }, - range(@te - 1, @te) - else - emit(:tINTEGER, tok(@ts, @te - 1).to_i, @ts, @te - 1) - p = p - 1; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - end - when 116 then - begin begin p = (( @te))-1; end - - if version?(18, 19, 20) - diagnostic :error, - :trailing_in_number, { :character => tok(@te - 1, @te) }, - range(@te - 1, @te) - else - emit(:tFLOAT, tok(@ts, @te - 1).to_f, @ts, @te - 1) - p = p - 1; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - end - when 117 then - begin begin p = (( @te))-1; end - - digits = tok(@ts, @num_suffix_s) - - if version?(18, 19, 20) - emit(:tFLOAT, Float(digits), @ts, @num_suffix_s) - p = @num_suffix_s - 1 - else - p = @num_xfrm.call(digits, p) - end - begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - when 119 then - begin begin p = (( @te))-1; end - emit(:tCONSTANT) - @cs = (arg_or_cmdarg(cmd_state)); begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - end - when 123 then - begin begin p = (( @te))-1; end - - emit(:tIDENTIFIER) - - if !@static_env.nil? && @static_env.declared?(tok) - @cs = 247; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - elsif @version >= 32 && tok =~ /\A_[1-9]\z/ - @cs = 247; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - else - @cs = (arg_or_cmdarg(cmd_state)); begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - end - when 124 then - begin begin p = (( @te))-1; end - - if tm == @te - # Suffix was consumed, e.g. foo! - emit(:tFID) - else - # Suffix was not consumed, e.g. foo!= - emit(:tIDENTIFIER, tok(@ts, tm), @ts, tm) - p = tm - 1 - end - @cs = 276; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - when 126 then - begin begin p = (( @te))-1; end - - emit_table(PUNCTUATION); - @cs = 508; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - when 127 then - begin begin p = (( @te))-1; end - emit_table(PUNCTUATION) - @cs = 345; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - end -end - end - when 272 then -# line 1999 "lib/parser/lexer.rl" - begin - @act = 140; end - when 273 then -# line 2038 "lib/parser/lexer.rl" - begin - @act = 144; end - when 274 then -# line 2024 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - emit(:tNL, nil, @newline_s, @newline_s + 1) - if @version < 27 - p = p - 1; @cs = 710; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - else - emit(:tBDOT3) - @cs = 345; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - end - end - when 275 then -# line 2035 "lib/parser/lexer.rl" - begin - @te = p+1 - begin p = tm - 1; begin - @cs = 516 - _trigger_goto = true - _goto_level = _again - break - end - end - end - when 276 then -# line 2038 "lib/parser/lexer.rl" - begin - @te = p+1 - begin emit(:tNL, nil, @newline_s, @newline_s + 1) - p = p - 1; @cs = 710; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - end - end - when 277 then -# line 1999 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - if @version < 27 - # Ruby before 2.7 doesn't support comments before leading dot. - # If a line after "a" starts with a comment then "a" is a self-contained statement. - # So in that case we emit a special tNL token and start reading the - # next line as a separate statement. - # - # Note: block comments before leading dot are not supported on any version of Ruby. - emit(:tNL, nil, @newline_s, @newline_s + 1) - p = p - 1; @cs = 710; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - end - end - when 278 then -# line 2013 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - emit(:tNL, nil, @newline_s, @newline_s + 1) - if @version < 27 - p = p - 1; @cs = 710; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - else - emit(:tBDOT2) - @cs = 345; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - end - end - when 279 then -# line 2035 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin p = tm - 1; begin - @cs = 516 - _trigger_goto = true - _goto_level = _again - break - end - end - end - when 280 then -# line 2038 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin emit(:tNL, nil, @newline_s, @newline_s + 1) - p = p - 1; @cs = 710; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - end - end - when 281 then -# line 1999 "lib/parser/lexer.rl" - begin - begin p = (( @te))-1; end - begin - if @version < 27 - # Ruby before 2.7 doesn't support comments before leading dot. - # If a line after "a" starts with a comment then "a" is a self-contained statement. - # So in that case we emit a special tNL token and start reading the - # next line as a separate statement. - # - # Note: block comments before leading dot are not supported on any version of Ruby. - emit(:tNL, nil, @newline_s, @newline_s + 1) - p = p - 1; @cs = 710; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - end - end - when 282 then -# line 2038 "lib/parser/lexer.rl" - begin - begin p = (( @te))-1; end - begin emit(:tNL, nil, @newline_s, @newline_s + 1) - p = p - 1; @cs = 710; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - end - end - when 283 then -# line 1 "NONE" - begin - case @act - when 140 then - begin begin p = (( @te))-1; end - - if @version < 27 - # Ruby before 2.7 doesn't support comments before leading dot. - # If a line after "a" starts with a comment then "a" is a self-contained statement. - # So in that case we emit a special tNL token and start reading the - # next line as a separate statement. - # - # Note: block comments before leading dot are not supported on any version of Ruby. - emit(:tNL, nil, @newline_s, @newline_s + 1) - p = p - 1; @cs = 710; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - end - when 144 then - begin begin p = (( @te))-1; end - emit(:tNL, nil, @newline_s, @newline_s + 1) - p = p - 1; @cs = 710; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - end -end - end - when 284 then -# line 2048 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - emit_comment(@eq_begin_s, @te) - begin - @cs = (@cs_before_block_comment) - _trigger_goto = true - _goto_level = _again - break - end - - end - end - when 285 then -# line 2053 "lib/parser/lexer.rl" - begin - @te = p+1 - end - when 286 then -# line 2048 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - emit_comment(@eq_begin_s, @te) - begin - @cs = (@cs_before_block_comment) - _trigger_goto = true - _goto_level = _again - break - end - - end - end - when 287 then -# line 2056 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - diagnostic :fatal, :embedded_document, nil, - range(@eq_begin_s, @eq_begin_s + '=begin'.length) - end - end - when 288 then -# line 2066 "lib/parser/lexer.rl" - begin - @te = p+1 - begin @eq_begin_s = @ts - begin - @cs = 704 - _trigger_goto = true - _goto_level = _again - break - end - end - end - when 289 then -# line 2070 "lib/parser/lexer.rl" - begin - @te = p+1 - begin p = pe - 3 end - end - when 290 then -# line 2073 "lib/parser/lexer.rl" - begin - @te = p+1 - begin cmd_state = true; p = p - 1; begin - @cs = 508 - _trigger_goto = true - _goto_level = _again - break - end - end - end - when 291 then -# line 566 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - # Sit at EOF indefinitely. #advance would return $eof each time. - # This allows to feed the lexer more data if needed; this is only used - # in tests. - # - # Note that this action is not embedded into e_eof like e_nl and e_bs - # below. This is due to the fact that scanner state at EOF is observed - # by tests, and encapsulating it in a rule would break the introspection. - p = p - 1; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - end - when 292 then -# line 2063 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; end - when 293 then -# line 2066 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin @eq_begin_s = @ts - begin - @cs = 704 - _trigger_goto = true - _goto_level = _again - break - end - end - end - when 294 then -# line 2073 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin cmd_state = true; p = p - 1; begin - @cs = 508 - _trigger_goto = true - _goto_level = _again - break - end - end - end - when 295 then -# line 2073 "lib/parser/lexer.rl" - begin - begin p = (( @te))-1; end - begin cmd_state = true; p = p - 1; begin - @cs = 508 - _trigger_goto = true - _goto_level = _again - break - end - end - end - when 296 then -# line 2080 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - p, next_state = @strings.advance(p) - - p = p - 1; # Ragel will do `p += 1` to consume input, prevent it - @cs = (next_state); - begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - end -# line 12621 "lib/parser/lexer-F0.rb" - end # action switch - end - end - if _trigger_goto - next - end - end - if _goto_level <= _again - _acts = _lex_to_state_actions[ @cs] - _nacts = _lex_actions[_acts] - _acts += 1 - while _nacts > 0 - _nacts -= 1 - _acts += 1 - case _lex_actions[_acts - 1] - when 51 then -# line 1 "NONE" - begin - @ts = nil; end -# line 12641 "lib/parser/lexer-F0.rb" - end # to state action switch - end - if _trigger_goto - next - end - if @cs == 0 - _goto_level = _out - next - end - p += 1 - if p != pe - _goto_level = _resume - next - end - end - if _goto_level <= _test_eof - if p == eof - if _lex_eof_trans[ @cs] > 0 - _trans = _lex_eof_trans[ @cs] - 1; - _goto_level = _eof_trans - next; - end - end - end - if _goto_level <= _out - break - end - end - end - -# line 281 "lib/parser/lexer.rl" - # % - - # Ragel creates a local variable called `testEof` but it doesn't use - # it in any assignment. This dead code is here to swallow the warning. - # It has no runtime cost because Ruby doesn't produce any instructions from it. - if false - testEof - end - - @p = p - - if @token_queue.any? - @token_queue.shift - elsif @cs == klass.lex_error - [ false, [ '$error'.freeze, range(p - 1, p) ] ] - else - eof = @source_pts.size - [ false, [ '$eof'.freeze, range(eof, eof) ] ] - end - end - - protected - - def version?(*versions) - versions.include?(@version) - end - - def stack_pop - @top -= 1 - @stack[@top] - end - - def tok(s = @ts, e = @te) - @source_buffer.slice(s, e - s) - end - - def range(s = @ts, e = @te) - Parser::Source::Range.new(@source_buffer, s, e) - end - - def emit(type, value = tok, s = @ts, e = @te) - token = [ type, [ value, range(s, e) ] ] - - @token_queue.push(token) - - @tokens.push(token) if @tokens - - token - end - - def emit_table(table, s = @ts, e = @te) - value = tok(s, e) - - emit(table[value], value, s, e) - end - - def emit_do(do_block=false) - if @cond.active? - emit(:kDO_COND, 'do'.freeze) - elsif @cmdarg.active? || do_block - emit(:kDO_BLOCK, 'do'.freeze) - else - emit(:kDO, 'do'.freeze) - end - end - - def arg_or_cmdarg(cmd_state) - if cmd_state - self.class.lex_en_expr_cmdarg - else - self.class.lex_en_expr_arg - end - end - - def emit_comment(s = @ts, e = @te) - if @comments - @comments.push(Parser::Source::Comment.new(range(s, e))) - end - - if @tokens - @tokens.push([ :tCOMMENT, [ tok(s, e), range(s, e) ] ]) - end - - nil - end - - def emit_comment_from_range(p, pe) - emit_comment(@sharp_s, p == pe ? p - 2 : p) - end - - def diagnostic(type, reason, arguments=nil, location=range, highlights=[]) - @diagnostics.process( - Parser::Diagnostic.new(type, reason, arguments, location, highlights)) - end - - - def e_lbrace - @cond.push(false); @cmdarg.push(false) - - current_literal = @strings.literal - if current_literal - current_literal.start_interp_brace - end - end - - def numeric_literal_int - digits = tok(@num_digits_s, @num_suffix_s) - - if digits.end_with? '_'.freeze - diagnostic :error, :trailing_in_number, { :character => '_'.freeze }, - range(@te - 1, @te) - elsif digits.empty? && @num_base == 8 && version?(18) - # 1.8 did not raise an error on 0o. - digits = '0'.freeze - elsif digits.empty? - diagnostic :error, :empty_numeric - elsif @num_base == 8 && (invalid_idx = digits.index(/[89]/)) - invalid_s = @num_digits_s + invalid_idx - diagnostic :error, :invalid_octal, nil, - range(invalid_s, invalid_s + 1) - end - digits - end - - def on_newline(p) - @strings.on_newline(p) - end - - def check_ambiguous_slash(tm) - if tok(tm, tm + 1) == '/'.freeze - # Ambiguous regexp literal. - if @version < 30 - diagnostic :warning, :ambiguous_literal, nil, range(tm, tm + 1) - else - diagnostic :warning, :ambiguous_regexp, nil, range(tm, tm + 1) - end - end - end - - def emit_global_var(ts = @ts, te = @te) - if tok(ts, te) =~ /^\$([1-9][0-9]*)$/ - emit(:tNTH_REF, tok(ts + 1, te).to_i, ts, te) - elsif tok =~ /^\$([&`'+])$/ - emit(:tBACK_REF, tok(ts, te), ts, te) - else - emit(:tGVAR, tok(ts, te), ts, te) - end - end - - def emit_class_var(ts = @ts, te = @te) - if tok(ts, te) =~ /^@@[0-9]/ - diagnostic :error, :cvar_name, { :name => tok(ts, te) } - end - - emit(:tCVAR, tok(ts, te), ts, te) - end - - def emit_instance_var(ts = @ts, te = @te) - if tok(ts, te) =~ /^@[0-9]/ - diagnostic :error, :ivar_name, { :name => tok(ts, te) } - end - - emit(:tIVAR, tok(ts, te), ts, te) - end - - def emit_rbrace_rparen_rbrack - emit_table(PUNCTUATION) - - if @version < 24 - @cond.lexpop - @cmdarg.lexpop - else - @cond.pop - @cmdarg.pop - end - end - - def emit_colon_with_digits(p, tm, diag_msg) - if @version >= 27 - diagnostic :error, diag_msg, { name: tok(tm, @te) }, range(tm, @te) - else - emit(:tCOLON, tok(@ts, @ts + 1), @ts, @ts + 1) - p = @ts - end - p - end - - def emit_singleton_class - emit(:kCLASS, 'class'.freeze, @ts, @ts + 5) - emit(:tLSHFT, '<<'.freeze, @te - 2, @te) - end - - # Mapping of strings to parser tokens. - - PUNCTUATION = { - '=' => :tEQL, '&' => :tAMPER2, '|' => :tPIPE, - '!' => :tBANG, '^' => :tCARET, '+' => :tPLUS, - '-' => :tMINUS, '*' => :tSTAR2, '/' => :tDIVIDE, - '%' => :tPERCENT, '~' => :tTILDE, ',' => :tCOMMA, - ';' => :tSEMI, '.' => :tDOT, '..' => :tDOT2, - '...' => :tDOT3, '[' => :tLBRACK2, ']' => :tRBRACK, - '(' => :tLPAREN2, ')' => :tRPAREN, '?' => :tEH, - ':' => :tCOLON, '&&' => :tANDOP, '||' => :tOROP, - '-@' => :tUMINUS, '+@' => :tUPLUS, '~@' => :tTILDE, - '**' => :tPOW, '->' => :tLAMBDA, '=~' => :tMATCH, - '!~' => :tNMATCH, '==' => :tEQ, '!=' => :tNEQ, - '>' => :tGT, '>>' => :tRSHFT, '>=' => :tGEQ, - '<' => :tLT, '<<' => :tLSHFT, '<=' => :tLEQ, - '=>' => :tASSOC, '::' => :tCOLON2, '===' => :tEQQ, - '<=>' => :tCMP, '[]' => :tAREF, '[]=' => :tASET, - '{' => :tLCURLY, '}' => :tRCURLY, '`' => :tBACK_REF2, - '!@' => :tBANG, '&.' => :tANDDOT, - } - - PUNCTUATION_BEGIN = { - '&' => :tAMPER, '*' => :tSTAR, '**' => :tDSTAR, - '+' => :tUPLUS, '-' => :tUMINUS, '::' => :tCOLON3, - '(' => :tLPAREN, '{' => :tLBRACE, '[' => :tLBRACK, - } - - KEYWORDS = { - 'if' => :kIF_MOD, 'unless' => :kUNLESS_MOD, - 'while' => :kWHILE_MOD, 'until' => :kUNTIL_MOD, - 'rescue' => :kRESCUE_MOD, 'defined?' => :kDEFINED, - 'BEGIN' => :klBEGIN, 'END' => :klEND, - } - - KEYWORDS_BEGIN = { - 'if' => :kIF, 'unless' => :kUNLESS, - 'while' => :kWHILE, 'until' => :kUNTIL, - 'rescue' => :kRESCUE, 'defined?' => :kDEFINED, - 'BEGIN' => :klBEGIN, 'END' => :klEND, - } - - ESCAPE_WHITESPACE = { - " " => '\s', "\r" => '\r', "\n" => '\n', "\t" => '\t', - "\v" => '\v', "\f" => '\f' - } - - %w(class module def undef begin end then elsif else ensure case when - for break next redo retry in do return yield super self nil true - false and or not alias __FILE__ __LINE__ __ENCODING__).each do |keyword| - KEYWORDS_BEGIN[keyword] = KEYWORDS[keyword] = :"k#{keyword.upcase}" - end - - -# line 2089 "lib/parser/lexer.rl" - - # % -end diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/lexer-F1.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/lexer-F1.rb deleted file mode 100644 index c49f5898..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/lexer-F1.rb +++ /dev/null @@ -1,14875 +0,0 @@ -# -*- encoding:utf-8; warn-indent:false; frozen_string_literal: true -*- - -# line 1 "lib/parser/lexer.rl" - -# line 3 "lib/parser/lexer.rl" -# -# === BEFORE YOU START === -# -# Read the Ruby Hacking Guide chapter 11, available in English at -# http://whitequark.org/blog/2013/04/01/ruby-hacking-guide-ch-11-finite-state-lexer/ -# -# Remember two things about Ragel scanners: -# -# 1) Longest match wins. -# -# 2) If two matches have the same length, the first -# in source code wins. -# -# General rules of making Ragel and Bison happy: -# -# * `p` (position) and `@te` contain the index of the character -# they're pointing to ("current"), plus one. `@ts` contains the index -# of the corresponding character. The code for extracting matched token is: -# -# @source_buffer.slice(@ts...@te) -# -# * If your input is `foooooooobar` and the rule is: -# -# 'f' 'o'+ -# -# the result will be: -# -# foooooooobar -# ^ ts=0 ^ p=te=9 -# -# * A Ragel lexer action should not emit more than one token, unless -# you know what you are doing. -# -# * All Ragel commands (fnext, fgoto, ...) end with a semicolon. -# -# * If an action emits the token and transitions to another state, use -# these Ragel commands: -# -# emit($whatever) -# fnext $next_state; fbreak; -# -# If you perform `fgoto` in an action which does not emit a token nor -# rewinds the stream pointer, the parser's side-effectful, -# context-sensitive lookahead actions will break in a hard to detect -# and debug way. -# -# * If an action does not emit a token: -# -# fgoto $next_state; -# -# * If an action features lookbehind, i.e. matches characters with the -# intent of passing them to another action: -# -# p = @ts - 1 -# fgoto $next_state; -# -# or, if the lookbehind consists of a single character: -# -# fhold; fgoto $next_state; -# -# * Ragel merges actions. So, if you have `e_lparen = '(' %act` and -# `c_lparen = '('` and a lexer action `e_lparen | c_lparen`, the result -# _will_ invoke the action `act`. -# -# e_something stands for "something with **e**mbedded action". -# -# * EOF is explicit and is matched by `c_eof`. If you want to introspect -# the state of the lexer, add this rule to the state: -# -# c_eof => do_eof; -# -# * If you proceed past EOF, the lexer will complain: -# -# NoMethodError: undefined method `ord' for nil:NilClass -# - -class Parser::Lexer - - -# line 85 "lib/parser/lexer-F1.rb" -class << self - attr_accessor :_lex_trans_keys - private :_lex_trans_keys, :_lex_trans_keys= -end -self._lex_trans_keys = [ - 0, 0, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 58, 58, 58, 58, 46, 46, - 0, 127, 58, 58, 60, - 60, 62, 62, 10, 10, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 115, 115, - 99, 99, 117, 117, 101, - 101, 108, 116, 101, 101, - 115, 115, 115, 115, 105, 105, - 108, 108, 105, 105, 108, - 108, 58, 58, 0, 127, - 10, 10, 0, 127, 9, 92, - 10, 10, 9, 92, 58, - 58, 98, 98, 101, 101, - 103, 103, 105, 105, 110, 110, - 0, 127, 61, 61, 9, - 92, 9, 92, 9, 92, - 9, 92, 9, 92, 10, 10, - 0, 127, 0, 127, 61, - 126, 93, 93, 0, 127, - 0, 127, 10, 10, 34, 34, - 10, 10, 39, 39, 0, - 127, 10, 96, 96, 96, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 58, 58, 58, 58, - 0, 127, 43, 57, 48, 57, - 48, 57, 48, 57, 48, - 57, 115, 115, 99, 99, - 117, 117, 101, 101, 99, 99, - 117, 117, 101, 101, 0, - 127, 58, 58, 9, 92, - 9, 92, 9, 92, 9, 92, - 9, 92, 9, 92, 60, - 60, 10, 10, 9, 92, - 9, 92, 10, 10, 10, 10, - 10, 10, 10, 10, 46, - 46, 101, 101, 103, 103, - 105, 105, 110, 110, 69, 69, - 78, 78, 68, 68, 95, - 95, 95, 95, 0, 26, - 0, 0, 36, 64, 0, 127, - 48, 57, 0, 127, 0, - 127, 0, 127, 0, 127, - 9, 32, 0, 0, 61, 126, - 10, 10, 10, 10, 0, - 127, 0, 127, 48, 57, - 115, 115, 38, 38, 42, 42, - 64, 64, 58, 58, 60, - 61, 62, 62, 61, 126, - 61, 61, 61, 62, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 93, 93, 10, 10, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 124, 124, 0, 127, - 0, 127, 9, 32, 10, 10, - 10, 10, 46, 46, 10, - 10, 0, 0, 0, 127, - 0, 127, 61, 61, 0, 0, - 9, 32, 0, 0, 61, - 126, 10, 10, 10, 10, - 38, 38, 42, 42, 64, 64, - 60, 61, 62, 62, 61, - 126, 61, 61, 61, 62, - 0, 127, 93, 93, 10, 10, - 124, 124, 0, 126, 0, - 127, 0, 61, 9, 61, - 9, 61, 0, 0, 9, 61, - 9, 62, 46, 46, 46, - 46, 58, 58, 9, 32, - 0, 0, 0, 127, 0, 0, - 9, 124, 0, 0, 10, - 10, 10, 10, 0, 0, - 9, 61, 58, 58, 60, 60, - 62, 62, 9, 32, 10, - 10, 0, 127, 102, 102, - 101, 101, 110, 110, 104, 104, - 0, 127, 0, 127, 0, - 127, 0, 0, 0, 127, - 10, 10, 0, 123, 9, 32, - 10, 10, 10, 10, 10, - 10, 0, 0, 111, 111, - 0, 0, 0, 127, 0, 127, - 9, 32, 0, 0, 10, - 10, 10, 10, 10, 10, - 0, 0, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 58, 61, 0, 0, 61, - 126, 61, 61, 0, 0, - 0, 0, 0, 0, 9, 32, - 61, 61, 9, 32, 61, - 126, 10, 10, 10, 10, - 0, 127, 38, 61, 0, 0, - 42, 61, 61, 61, 9, - 92, 9, 92, 9, 92, - 46, 46, 46, 46, 10, 10, - 0, 26, 0, 127, 0, - 127, 61, 61, 0, 0, - 61, 126, 61, 62, 0, 0, - 0, 0, 0, 0, 0, - 0, 61, 126, 0, 127, - 48, 57, 38, 38, 42, 42, - 64, 64, 60, 61, 62, - 62, 61, 61, 61, 62, - 0, 127, 48, 57, 0, 127, - 124, 124, 64, 64, 60, - 61, 0, 0, 10, 34, - 10, 39, 96, 96, 62, 62, - 61, 126, 61, 62, 0, - 26, 0, 127, 0, 127, - 0, 127, 0, 0, 10, 10, - 0, 0, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 61, 126, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 0, 61, 124, 0, - 92, 9, 32, 0, 0, - 10, 10, 10, 10, 10, 10, - 0, 0, 0, 127, 0, - 127, 9, 32, 0, 0, - 10, 10, 10, 10, 10, 10, - 0, 0, 0, 127, 0, - 127, 61, 61, 0, 0, - 9, 32, 0, 0, 61, 126, - 10, 10, 10, 10, 0, - 127, 0, 127, 48, 57, - 61, 61, 38, 61, 0, 0, - 0, 0, 42, 61, 61, - 62, 46, 57, 46, 46, - 10, 10, 48, 101, 48, 95, - 46, 120, 48, 114, 43, - 57, 48, 105, 102, 102, - 0, 0, 101, 105, 0, 0, - 0, 0, 48, 114, 48, - 114, 48, 114, 48, 114, - 105, 114, 102, 102, 0, 0, - 101, 105, 115, 115, 0, - 0, 0, 0, 48, 114, - 48, 114, 48, 114, 48, 114, - 48, 114, 48, 114, 48, - 114, 48, 114, 46, 114, - 48, 114, 46, 114, 48, 114, - 58, 58, 60, 61, 62, - 62, 61, 126, 61, 61, - 61, 62, 0, 127, 0, 127, - 0, 0, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 0, - 10, 10, 0, 0, 0, - 0, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 9, 92, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 0, 61, 124, 0, 0, - 9, 92, 9, 92, 9, 92, - 46, 46, 46, 46, 10, - 10, 46, 46, 10, 10, - 10, 61, 10, 10, 10, 101, - 10, 110, 10, 100, 10, - 10, 0, 95, 9, 32, - 0, 0, 10, 10, 10, 10, - 98, 98, 9, 32, 10, - 10, 95, 95, 0 -] - -class << self - attr_accessor :_lex_key_spans - private :_lex_key_spans, :_lex_key_spans= -end -self._lex_key_spans = [ - 0, 128, 128, 128, 128, 128, 128, 128, - 1, 1, 1, 128, 1, 1, 1, 1, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 1, 1, 1, 1, 9, 1, - 1, 1, 1, 1, 1, 1, 1, 128, - 1, 128, 84, 1, 84, 1, 1, 1, - 1, 1, 1, 128, 1, 84, 84, 84, - 84, 84, 1, 128, 128, 66, 1, 128, - 128, 1, 1, 1, 1, 128, 87, 1, - 128, 128, 128, 128, 128, 128, 1, 1, - 128, 15, 10, 10, 10, 10, 1, 1, - 1, 1, 1, 1, 1, 128, 1, 84, - 84, 84, 84, 84, 84, 1, 1, 84, - 84, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 27, - 0, 29, 128, 10, 128, 128, 128, 128, - 24, 0, 66, 1, 1, 128, 128, 10, - 1, 1, 1, 1, 1, 2, 1, 66, - 1, 2, 128, 128, 128, 128, 128, 128, - 128, 1, 1, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 1, 128, - 128, 24, 1, 1, 1, 1, 0, 128, - 128, 1, 0, 24, 0, 66, 1, 1, - 1, 1, 1, 2, 1, 66, 1, 2, - 128, 1, 1, 1, 127, 128, 62, 53, - 53, 0, 53, 54, 1, 1, 1, 24, - 0, 128, 0, 116, 0, 1, 1, 0, - 53, 1, 1, 1, 24, 1, 128, 1, - 1, 1, 1, 128, 128, 128, 0, 128, - 1, 124, 24, 1, 1, 1, 0, 1, - 0, 128, 128, 24, 0, 1, 1, 1, - 0, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 4, 0, 66, 1, 0, - 0, 0, 24, 1, 24, 66, 1, 1, - 128, 24, 0, 20, 1, 84, 84, 84, - 1, 1, 1, 27, 128, 128, 1, 0, - 66, 2, 0, 0, 0, 0, 66, 128, - 10, 1, 1, 1, 2, 1, 1, 2, - 128, 10, 128, 1, 1, 2, 0, 25, - 30, 1, 1, 66, 2, 27, 128, 128, - 128, 0, 1, 0, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 66, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 0, 64, 93, 24, 0, - 1, 1, 1, 0, 128, 128, 24, 0, - 1, 1, 1, 0, 128, 128, 1, 0, - 24, 0, 66, 1, 1, 128, 128, 10, - 1, 24, 0, 0, 20, 2, 12, 1, - 1, 54, 48, 75, 67, 15, 58, 1, - 0, 5, 0, 0, 67, 67, 67, 67, - 10, 1, 0, 5, 1, 0, 0, 67, - 67, 67, 67, 67, 67, 67, 67, 69, - 67, 69, 67, 1, 2, 1, 66, 1, - 2, 128, 128, 0, 128, 128, 128, 128, - 128, 128, 0, 1, 0, 0, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 84, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 0, 64, 0, - 84, 84, 84, 1, 1, 1, 1, 1, - 52, 1, 92, 101, 91, 1, 96, 24, - 0, 1, 1, 1, 24, 1, 1 -] - -class << self - attr_accessor :_lex_index_offsets - private :_lex_index_offsets, :_lex_index_offsets= -end -self._lex_index_offsets = [ - 0, 0, 129, 258, 387, 516, 645, 774, - 903, 905, 907, 909, 1038, 1040, 1042, 1044, - 1046, 1175, 1304, 1433, 1562, 1691, 1820, 1949, - 2078, 2207, 2336, 2465, 2594, 2723, 2852, 2981, - 3110, 3239, 3368, 3370, 3372, 3374, 3376, 3386, - 3388, 3390, 3392, 3394, 3396, 3398, 3400, 3402, - 3531, 3533, 3662, 3747, 3749, 3834, 3836, 3838, - 3840, 3842, 3844, 3846, 3975, 3977, 4062, 4147, - 4232, 4317, 4402, 4404, 4533, 4662, 4729, 4731, - 4860, 4989, 4991, 4993, 4995, 4997, 5126, 5214, - 5216, 5345, 5474, 5603, 5732, 5861, 5990, 5992, - 5994, 6123, 6139, 6150, 6161, 6172, 6183, 6185, - 6187, 6189, 6191, 6193, 6195, 6197, 6326, 6328, - 6413, 6498, 6583, 6668, 6753, 6838, 6840, 6842, - 6927, 7012, 7014, 7016, 7018, 7020, 7022, 7024, - 7026, 7028, 7030, 7032, 7034, 7036, 7038, 7040, - 7068, 7069, 7099, 7228, 7239, 7368, 7497, 7626, - 7755, 7780, 7781, 7848, 7850, 7852, 7981, 8110, - 8121, 8123, 8125, 8127, 8129, 8131, 8134, 8136, - 8203, 8205, 8208, 8337, 8466, 8595, 8724, 8853, - 8982, 9111, 9113, 9115, 9244, 9373, 9502, 9631, - 9760, 9889, 10018, 10147, 10276, 10405, 10534, 10663, - 10792, 10921, 11050, 11179, 11308, 11437, 11566, 11695, - 11824, 11953, 12082, 12211, 12340, 12469, 12598, 12727, - 12856, 12985, 13114, 13243, 13372, 13501, 13630, 13759, - 13888, 14017, 14146, 14275, 14404, 14533, 14662, 14791, - 14920, 15049, 15178, 15307, 15436, 15565, 15694, 15823, - 15952, 16081, 16210, 16339, 16468, 16597, 16726, 16855, - 16984, 17113, 17242, 17371, 17500, 17629, 17758, 17887, - 18016, 18145, 18274, 18403, 18532, 18661, 18790, 18919, - 19048, 19177, 19306, 19435, 19564, 19693, 19822, 19824, - 19953, 20082, 20107, 20109, 20111, 20113, 20115, 20116, - 20245, 20374, 20376, 20377, 20402, 20403, 20470, 20472, - 20474, 20476, 20478, 20480, 20483, 20485, 20552, 20554, - 20557, 20686, 20688, 20690, 20692, 20820, 20949, 21012, - 21066, 21120, 21121, 21175, 21230, 21232, 21234, 21236, - 21261, 21262, 21391, 21392, 21509, 21510, 21512, 21514, - 21515, 21569, 21571, 21573, 21575, 21600, 21602, 21731, - 21733, 21735, 21737, 21739, 21868, 21997, 22126, 22127, - 22256, 22258, 22383, 22408, 22410, 22412, 22414, 22415, - 22417, 22418, 22547, 22676, 22701, 22702, 22704, 22706, - 22708, 22709, 22838, 22967, 23096, 23225, 23354, 23483, - 23612, 23741, 23870, 23999, 24128, 24257, 24386, 24515, - 24644, 24773, 24902, 25031, 25036, 25037, 25104, 25106, - 25107, 25108, 25109, 25134, 25136, 25161, 25228, 25230, - 25232, 25361, 25386, 25387, 25408, 25410, 25495, 25580, - 25665, 25667, 25669, 25671, 25699, 25828, 25957, 25959, - 25960, 26027, 26030, 26031, 26032, 26033, 26034, 26101, - 26230, 26241, 26243, 26245, 26247, 26250, 26252, 26254, - 26257, 26386, 26397, 26526, 26528, 26530, 26533, 26534, - 26560, 26591, 26593, 26595, 26662, 26665, 26693, 26822, - 26951, 27080, 27081, 27083, 27084, 27213, 27342, 27471, - 27600, 27729, 27858, 27987, 28116, 28245, 28374, 28503, - 28632, 28761, 28890, 29019, 29148, 29277, 29406, 29535, - 29664, 29793, 29922, 30051, 30180, 30309, 30438, 30567, - 30696, 30825, 30954, 31083, 31212, 31341, 31470, 31599, - 31728, 31857, 31986, 32115, 32244, 32373, 32502, 32631, - 32760, 32889, 33018, 33147, 33276, 33405, 33534, 33663, - 33792, 33921, 34050, 34179, 34308, 34437, 34566, 34695, - 34824, 34953, 35020, 35149, 35278, 35407, 35536, 35665, - 35794, 35923, 36052, 36181, 36310, 36439, 36568, 36697, - 36826, 36955, 37084, 37213, 37342, 37471, 37600, 37729, - 37858, 37987, 38116, 38245, 38246, 38311, 38405, 38430, - 38431, 38433, 38435, 38437, 38438, 38567, 38696, 38721, - 38722, 38724, 38726, 38728, 38729, 38858, 38987, 38989, - 38990, 39015, 39016, 39083, 39085, 39087, 39216, 39345, - 39356, 39358, 39383, 39384, 39385, 39406, 39409, 39422, - 39424, 39426, 39481, 39530, 39606, 39674, 39690, 39749, - 39751, 39752, 39758, 39759, 39760, 39828, 39896, 39964, - 40032, 40043, 40045, 40046, 40052, 40054, 40055, 40056, - 40124, 40192, 40260, 40328, 40396, 40464, 40532, 40600, - 40670, 40738, 40808, 40876, 40878, 40881, 40883, 40950, - 40952, 40955, 41084, 41213, 41214, 41343, 41472, 41601, - 41730, 41859, 41988, 41989, 41991, 41992, 41993, 42122, - 42251, 42380, 42509, 42638, 42767, 42896, 43025, 43154, - 43283, 43412, 43541, 43670, 43799, 43928, 44057, 44186, - 44315, 44444, 44573, 44702, 44831, 44960, 45089, 45218, - 45347, 45476, 45605, 45734, 45863, 45992, 46121, 46250, - 46379, 46508, 46637, 46766, 46851, 46980, 47109, 47238, - 47367, 47496, 47625, 47754, 47883, 48012, 48141, 48270, - 48399, 48528, 48657, 48786, 48915, 49044, 49173, 49302, - 49431, 49560, 49689, 49818, 49947, 50076, 50205, 50334, - 50463, 50592, 50721, 50850, 50979, 51108, 51237, 51366, - 51495, 51624, 51753, 51882, 52011, 52140, 52269, 52398, - 52527, 52656, 52785, 52914, 53043, 53172, 53301, 53430, - 53559, 53688, 53817, 53946, 54075, 54204, 54333, 54462, - 54591, 54720, 54849, 54978, 55107, 55236, 55237, 55302, - 55303, 55388, 55473, 55558, 55560, 55562, 55564, 55566, - 55568, 55621, 55623, 55716, 55818, 55910, 55912, 56009, - 56034, 56035, 56037, 56039, 56041, 56066, 56068 -] - -class << self - attr_accessor :_lex_indicies - private :_lex_indicies, :_lex_indicies= -end -self._lex_indicies = [ - 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, - 2, 1, 1, 2, 1, 2, 1, 1, - 2, 2, 1, 1, 1, 3, 1, 1, - 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 1, 1, 1, 1, 1, 1, - 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2, 1, 2, 2, 0, - 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2, 2, 2, 1, 2, - 0, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, - 2, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 2, 2, 2, 2, 2, - 2, 2, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 2, 2, 2, - 1, 2, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 2, 2, 2, - 2, 1, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 2, 2, 2, 2, - 2, 2, 6, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 2, 2, 2, - 2, 5, 2, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 2, 2, 2, - 2, 2, 5, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 2, 2, 2, - 2, 2, 2, 2, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 2, 2, - 2, 2, 7, 2, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 2, 2, - 2, 2, 2, 7, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 8, 8, - 8, 8, 8, 8, 8, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 8, - 8, 8, 8, 9, 8, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 8, - 8, 8, 8, 8, 9, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 11, 11, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 11, - 11, 11, 11, 11, 11, 11, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, - 11, 11, 11, 11, 11, 11, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, - 11, 11, 11, 11, 11, 10, 12, 12, - 12, 12, 12, 12, 12, 12, 12, 12, - 12, 12, 12, 12, 12, 12, 12, 12, - 12, 12, 12, 12, 12, 12, 12, 12, - 12, 12, 12, 12, 12, 12, 12, 14, - 12, 12, 12, 12, 12, 12, 12, 12, - 12, 12, 12, 12, 12, 12, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, - 15, 12, 12, 12, 12, 14, 12, 13, - 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, - 13, 12, 12, 12, 12, 13, 12, 13, - 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, - 13, 12, 12, 12, 12, 12, 13, 15, - 12, 12, 16, 17, 12, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 20, 18, - 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 21, - 18, 18, 18, 18, 20, 18, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 18, 18, 18, 18, 19, 18, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 18, 18, 18, 18, 18, 19, 21, 18, - 23, 22, 24, 22, 25, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 27, - 22, 27, 27, 27, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 27, 22, - 22, 22, 22, 28, 29, 22, 30, 22, - 31, 32, 33, 34, 35, 28, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 36, 22, 37, 33, 38, 39, 22, 26, - 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, - 26, 40, 41, 33, 42, 26, 22, 26, - 26, 26, 26, 26, 26, 26, 26, 43, - 26, 26, 26, 26, 26, 26, 26, 26, - 44, 26, 26, 45, 26, 46, 26, 26, - 26, 47, 48, 22, 42, 22, 26, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 49, 22, 49, 49, 49, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 49, - 22, 22, 22, 22, 50, 51, 22, 52, - 22, 53, 54, 55, 56, 57, 50, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 58, 22, 59, 55, 60, 61, 22, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 62, 63, 55, 24, 19, 22, - 19, 19, 19, 19, 19, 19, 19, 19, - 64, 19, 19, 19, 19, 19, 19, 19, - 19, 65, 19, 19, 66, 19, 67, 19, - 19, 19, 68, 69, 22, 24, 22, 19, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 20, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 21, 22, 22, 22, 22, 20, - 22, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 22, 22, 22, 22, 19, - 22, 19, 19, 19, 19, 19, 70, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 22, 22, 22, 22, 22, - 19, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 20, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 21, 22, 22, 22, 22, - 20, 22, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 22, 22, 22, 22, - 19, 22, 19, 19, 19, 19, 71, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 22, 22, 22, 22, - 22, 19, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 20, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 21, 22, 22, 22, - 22, 20, 22, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 22, 22, 22, - 22, 19, 22, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 72, 19, 19, - 19, 19, 19, 19, 19, 22, 22, 22, - 22, 22, 19, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 20, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 21, 22, 22, - 22, 22, 20, 22, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 22, 22, - 22, 22, 19, 22, 19, 19, 73, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 22, 22, - 22, 22, 22, 19, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 20, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 21, 22, - 22, 22, 22, 20, 22, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 22, - 22, 22, 22, 19, 22, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 74, 19, 19, 19, 19, 19, 22, - 22, 22, 22, 22, 19, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 20, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 21, - 22, 22, 22, 22, 20, 22, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 22, 22, 22, 22, 19, 22, 19, 19, - 19, 19, 70, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 22, 22, 22, 22, 22, 19, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 20, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 21, 22, 22, 22, 22, 20, 22, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 22, 22, 22, 22, 19, 22, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 75, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 22, 22, 22, 22, 22, 19, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 20, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 21, 22, 22, 22, 22, 20, 22, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 22, 22, 22, 22, 19, 22, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 76, 19, 19, 19, 19, - 19, 19, 19, 77, 19, 19, 19, 19, - 19, 19, 22, 22, 22, 22, 22, 19, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 20, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 21, 22, 22, 22, 22, 20, - 22, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 22, 22, 22, 22, 19, - 22, 19, 19, 19, 19, 78, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 22, 22, 22, 22, 22, - 19, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 20, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 21, 22, 22, 22, 22, - 20, 22, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 22, 22, 22, 22, - 19, 22, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 79, 19, 19, 19, - 19, 19, 19, 19, 22, 22, 22, 22, - 22, 19, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 20, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 21, 22, 22, 22, - 22, 20, 22, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 22, 22, 22, - 22, 19, 22, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 70, 19, 19, - 19, 19, 19, 19, 19, 22, 22, 22, - 22, 22, 19, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 20, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 21, 22, 22, - 22, 22, 20, 22, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 22, 22, - 22, 22, 19, 22, 19, 19, 19, 19, - 19, 19, 19, 19, 80, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 22, 22, - 22, 22, 22, 19, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 20, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 21, 22, - 22, 22, 22, 20, 22, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 22, - 22, 22, 22, 19, 22, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 70, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 22, - 22, 22, 22, 22, 19, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 20, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 21, - 22, 22, 22, 22, 20, 22, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 22, 22, 22, 22, 19, 22, 19, 19, - 19, 19, 19, 19, 19, 81, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 22, 22, 22, 22, 22, 19, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 20, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 21, 22, 22, 22, 22, 20, 22, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 22, 22, 22, 22, 19, 22, 19, - 19, 19, 19, 19, 19, 19, 19, 82, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 22, 22, 22, 22, 22, 19, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, - 20, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 21, 22, 22, 22, 22, 20, 22, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 22, 22, 22, 22, 19, 22, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 74, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 22, 22, 22, 22, 22, 19, - 84, 83, 85, 83, 86, 83, 55, 83, - 87, 83, 83, 83, 83, 83, 83, 83, - 88, 83, 89, 83, 90, 83, 55, 83, - 91, 83, 55, 83, 92, 83, 86, 83, - 94, 93, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 97, 95, 97, 97, 97, - 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 97, 95, 95, 95, 95, 95, - 95, 95, 98, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 96, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 95, 99, 95, - 95, 96, 95, 96, 96, 96, 100, 96, - 96, 96, 96, 96, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 95, 95, 95, - 95, 95, 96, 101, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 103, 95, - 103, 103, 103, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 103, 95, 95, - 95, 95, 95, 95, 95, 104, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 95, 105, 95, 95, 102, 95, 102, 102, - 102, 106, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 95, 95, 95, 95, 95, 102, 108, 107, - 108, 108, 108, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 108, 107, 107, - 107, 107, 107, 107, 107, 109, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 110, 107, 111, 107, 112, 107, 112, - 112, 112, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 112, 107, 107, 107, - 107, 107, 107, 107, 113, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, - 114, 107, 115, 116, 118, 117, 119, 117, - 120, 117, 121, 117, 122, 117, 124, 124, - 124, 124, 124, 124, 124, 124, 124, 124, - 124, 124, 124, 124, 124, 124, 124, 124, - 124, 124, 124, 124, 124, 124, 124, 124, - 124, 124, 124, 124, 124, 124, 124, 124, - 124, 124, 124, 124, 124, 124, 124, 124, - 124, 124, 124, 124, 124, 124, 123, 123, - 123, 123, 123, 123, 123, 123, 123, 123, - 124, 124, 124, 124, 124, 124, 124, 123, - 123, 123, 123, 123, 123, 123, 123, 123, - 123, 123, 123, 123, 123, 123, 123, 123, - 123, 123, 123, 123, 123, 123, 123, 123, - 123, 124, 124, 124, 124, 124, 124, 123, - 123, 123, 123, 123, 123, 123, 123, 123, - 123, 123, 123, 123, 123, 123, 123, 123, - 123, 123, 123, 123, 123, 123, 123, 123, - 123, 124, 124, 124, 124, 124, 123, 125, - 115, 126, 127, 126, 126, 126, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, - 126, 115, 115, 128, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, - 129, 129, 129, 129, 129, 129, 129, 129, - 129, 129, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 130, 115, 131, 132, - 131, 131, 131, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 131, 115, 115, - 133, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 134, 134, 134, - 134, 134, 134, 134, 134, 134, 134, 115, - 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, - 115, 135, 115, 137, 138, 137, 137, 137, - 136, 136, 136, 136, 136, 136, 136, 136, - 136, 136, 136, 136, 136, 136, 136, 136, - 136, 136, 137, 136, 136, 139, 136, 136, - 136, 136, 136, 136, 136, 136, 136, 136, - 136, 136, 140, 140, 140, 140, 140, 140, - 140, 140, 140, 140, 136, 136, 136, 136, - 136, 136, 136, 136, 136, 136, 136, 136, - 136, 136, 136, 136, 136, 136, 136, 136, - 136, 136, 136, 136, 136, 136, 136, 136, - 136, 136, 136, 136, 136, 136, 141, 136, - 143, 144, 143, 143, 143, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 143, - 142, 142, 145, 142, 142, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 142, 142, 142, 142, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 142, - 142, 142, 142, 147, 142, 143, 148, 143, - 143, 143, 142, 142, 142, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 142, - 142, 142, 142, 142, 143, 142, 142, 145, - 142, 142, 142, 142, 142, 142, 142, 142, - 142, 142, 142, 142, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 142, - 147, 142, 127, 115, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 151, 151, 149, - 151, 149, 151, 151, 149, 149, 151, 151, - 151, 152, 151, 151, 153, 153, 153, 153, - 153, 153, 153, 153, 153, 153, 151, 151, - 151, 151, 151, 151, 151, 150, 150, 150, - 150, 150, 150, 150, 150, 150, 150, 150, - 150, 150, 150, 150, 150, 150, 150, 150, - 150, 150, 150, 150, 150, 150, 150, 149, - 151, 149, 149, 150, 151, 150, 150, 150, - 150, 150, 150, 150, 150, 150, 150, 150, - 150, 150, 150, 150, 150, 150, 150, 150, - 150, 150, 150, 150, 150, 150, 150, 149, - 149, 149, 151, 149, 150, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 151, 151, 151, - 151, 151, 151, 151, 151, 151, 151, 149, - 149, 149, 149, 149, 149, 149, 151, 151, - 151, 151, 151, 151, 151, 151, 151, 151, - 151, 151, 151, 151, 151, 151, 151, 151, - 151, 151, 151, 151, 151, 151, 151, 151, - 149, 149, 149, 149, 151, 149, 151, 151, - 151, 151, 151, 151, 151, 151, 151, 151, - 151, 151, 151, 151, 151, 151, 151, 151, - 151, 151, 151, 151, 151, 151, 151, 151, - 149, 149, 149, 149, 149, 151, 154, 151, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 151, - 149, 154, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 156, 149, 149, - 149, 149, 157, 149, 149, 149, 149, 149, - 158, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 125, 149, 149, 149, 155, 155, 155, 155, - 155, 155, 155, 155, 155, 155, 155, 155, - 155, 155, 155, 155, 155, 155, 155, 155, - 155, 155, 155, 155, 155, 155, 149, 149, - 149, 149, 155, 159, 155, 155, 155, 155, - 155, 155, 155, 155, 155, 155, 155, 155, - 155, 155, 155, 155, 155, 155, 155, 155, - 155, 155, 155, 155, 155, 155, 149, 149, - 149, 158, 149, 155, 161, 161, 161, 161, - 161, 161, 161, 161, 161, 161, 162, 161, - 161, 161, 161, 161, 161, 161, 161, 161, - 161, 161, 161, 161, 161, 161, 161, 161, - 161, 161, 161, 161, 161, 161, 161, 161, - 161, 161, 161, 161, 161, 161, 161, 161, - 161, 161, 161, 161, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 161, 161, - 161, 161, 161, 161, 161, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 161, - 161, 161, 161, 160, 161, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 160, - 160, 160, 160, 160, 160, 160, 160, 161, - 161, 161, 161, 161, 160, 164, 163, 167, - 166, 162, 161, 167, 168, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 156, - 149, 149, 149, 149, 157, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 155, 155, - 155, 155, 155, 155, 155, 155, 155, 155, - 155, 155, 155, 155, 155, 155, 155, 155, - 155, 155, 155, 155, 155, 155, 155, 155, - 149, 149, 149, 149, 155, 159, 155, 155, - 155, 155, 155, 155, 155, 155, 155, 155, - 155, 155, 155, 155, 155, 155, 155, 155, - 155, 155, 155, 155, 155, 155, 155, 155, - 149, 149, 149, 149, 149, 155, 170, 169, - 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 167, 169, 167, 170, - 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, - 115, 172, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, - 171, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 173, 115, 115, 174, 115, 172, - 115, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 115, 115, 115, 115, 171, - 115, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 115, 115, 115, 115, 115, - 171, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 172, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 173, 149, 149, 174, 149, - 172, 149, 171, 171, 171, 171, 171, 171, - 175, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 149, 149, 149, 149, - 171, 149, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 149, 149, 149, 149, - 149, 171, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 172, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 173, 149, 149, 174, - 149, 172, 149, 171, 171, 171, 171, 171, - 171, 171, 171, 176, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 149, 149, 149, - 149, 171, 149, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 149, 149, 149, - 149, 149, 171, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 172, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 173, 149, 149, - 174, 149, 172, 149, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 171, - 171, 177, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 149, 149, - 149, 149, 171, 149, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 149, 149, - 149, 149, 149, 171, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 149, 172, 149, 149, - 149, 149, 149, 149, 149, 149, 149, 149, - 149, 149, 149, 149, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 173, 149, - 149, 174, 149, 172, 149, 171, 171, 171, - 177, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 149, - 149, 149, 149, 171, 149, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 149, - 149, 149, 149, 149, 171, 178, 178, 178, - 178, 178, 178, 178, 178, 178, 178, 178, - 178, 178, 178, 178, 178, 178, 178, 178, - 178, 178, 178, 178, 178, 178, 178, 178, - 178, 178, 178, 178, 178, 178, 180, 178, - 178, 178, 178, 178, 178, 178, 178, 178, - 178, 178, 178, 178, 178, 179, 179, 179, - 179, 179, 179, 179, 179, 179, 179, 181, - 178, 178, 178, 178, 180, 178, 179, 179, - 179, 179, 179, 179, 179, 179, 179, 179, - 179, 179, 179, 179, 179, 179, 179, 179, - 179, 179, 179, 179, 179, 179, 179, 179, - 178, 178, 178, 178, 179, 178, 179, 179, - 179, 179, 179, 179, 179, 179, 179, 179, - 179, 179, 179, 179, 179, 179, 179, 179, - 179, 179, 179, 179, 179, 179, 179, 179, - 178, 178, 178, 178, 178, 179, 181, 178, - 178, 182, 183, 183, 183, 183, 183, 183, - 183, 183, 183, 183, 183, 183, 183, 183, - 183, 183, 183, 183, 183, 183, 183, 183, - 183, 183, 183, 183, 183, 183, 183, 183, - 183, 183, 183, 183, 183, 183, 183, 183, - 183, 183, 183, 183, 183, 183, 183, 183, - 183, 183, 184, 184, 184, 184, 184, 184, - 184, 184, 184, 184, 183, 183, 183, 183, - 183, 183, 183, 184, 184, 184, 184, 184, - 184, 184, 184, 184, 184, 184, 184, 184, - 184, 184, 184, 184, 184, 184, 184, 184, - 184, 184, 184, 184, 184, 183, 183, 183, - 183, 184, 183, 184, 184, 184, 184, 184, - 184, 184, 184, 184, 184, 184, 184, 184, - 184, 184, 184, 184, 184, 184, 184, 184, - 184, 184, 184, 184, 184, 183, 183, 183, - 183, 183, 184, 186, 185, 186, 185, 185, - 187, 187, 187, 187, 187, 187, 187, 187, - 187, 187, 185, 187, 187, 187, 187, 187, - 187, 187, 187, 187, 187, 185, 188, 188, - 188, 188, 188, 188, 188, 188, 188, 188, - 185, 190, 190, 190, 190, 190, 190, 190, - 190, 190, 190, 189, 191, 191, 191, 191, - 191, 191, 191, 191, 191, 191, 189, 193, - 192, 194, 192, 195, 192, 196, 192, 198, - 197, 199, 197, 200, 197, 183, 183, 183, - 183, 183, 183, 183, 183, 183, 183, 183, - 183, 183, 183, 183, 183, 183, 183, 183, - 183, 183, 183, 183, 183, 183, 183, 183, - 183, 183, 183, 183, 183, 183, 183, 183, - 183, 183, 183, 183, 183, 183, 183, 183, - 183, 183, 183, 183, 183, 201, 201, 201, - 201, 201, 201, 201, 201, 201, 201, 183, - 183, 183, 183, 183, 183, 183, 201, 201, - 201, 201, 201, 201, 201, 201, 201, 201, - 201, 201, 201, 201, 201, 201, 201, 201, - 201, 201, 201, 201, 201, 201, 201, 201, - 183, 183, 183, 183, 201, 183, 201, 201, - 201, 201, 201, 201, 201, 201, 201, 201, - 201, 201, 201, 201, 201, 201, 201, 201, - 201, 201, 201, 201, 201, 201, 201, 201, - 183, 183, 183, 183, 183, 201, 202, 189, - 203, 204, 203, 203, 203, 189, 189, 189, - 189, 189, 189, 189, 189, 189, 189, 189, - 189, 189, 189, 189, 189, 189, 189, 203, - 189, 189, 205, 189, 189, 189, 189, 189, - 189, 189, 189, 189, 189, 189, 189, 189, - 189, 189, 189, 189, 189, 189, 189, 189, - 189, 189, 189, 206, 189, 189, 189, 189, - 189, 189, 189, 189, 189, 189, 189, 189, - 189, 189, 189, 189, 189, 189, 189, 189, - 189, 189, 189, 189, 189, 189, 189, 189, - 189, 189, 189, 207, 189, 208, 209, 208, - 208, 208, 189, 189, 189, 189, 189, 189, - 189, 189, 189, 189, 189, 189, 189, 189, - 189, 189, 189, 189, 208, 189, 189, 210, - 189, 189, 189, 189, 189, 189, 189, 189, - 189, 189, 189, 189, 189, 189, 189, 189, - 189, 189, 189, 189, 189, 189, 189, 189, - 211, 189, 189, 189, 189, 189, 189, 189, - 189, 189, 189, 189, 189, 189, 189, 189, - 189, 189, 189, 189, 189, 189, 189, 189, - 189, 189, 189, 189, 189, 189, 189, 189, - 212, 189, 214, 215, 214, 214, 214, 213, - 213, 213, 213, 213, 213, 213, 213, 213, - 213, 213, 213, 213, 213, 213, 213, 213, - 213, 214, 213, 213, 216, 213, 213, 213, - 213, 213, 213, 213, 213, 213, 213, 213, - 213, 213, 213, 213, 213, 213, 213, 213, - 213, 213, 213, 213, 213, 217, 213, 213, - 213, 213, 213, 213, 213, 213, 213, 213, - 213, 213, 213, 213, 213, 213, 213, 213, - 213, 213, 213, 213, 213, 213, 213, 213, - 213, 213, 213, 213, 213, 218, 213, 220, - 221, 220, 220, 220, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 220, 219, - 219, 222, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 223, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 224, 219, 220, 221, 220, 220, - 220, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 220, 219, 219, 222, 219, - 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 225, - 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 224, - 219, 220, 226, 220, 220, 220, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, - 220, 219, 219, 222, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 223, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 224, 219, 227, 189, - 204, 189, 229, 230, 229, 229, 229, 228, - 228, 228, 228, 228, 228, 228, 228, 228, - 228, 228, 228, 228, 228, 228, 228, 228, - 228, 229, 228, 228, 231, 228, 228, 232, - 228, 228, 228, 228, 228, 228, 228, 233, - 228, 228, 228, 228, 228, 228, 228, 228, - 228, 228, 228, 228, 228, 228, 228, 228, - 228, 228, 228, 228, 228, 228, 228, 228, - 228, 228, 228, 228, 228, 228, 228, 228, - 228, 228, 228, 228, 228, 228, 228, 228, - 228, 228, 228, 228, 228, 234, 228, 236, - 230, 236, 236, 236, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 236, 235, - 235, 231, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, - 235, 235, 234, 235, 239, 238, 241, 240, - 242, 237, 243, 237, 244, 228, 246, 245, - 247, 245, 248, 245, 249, 245, 250, 245, - 251, 245, 252, 245, 253, 245, 254, 245, - 255, 245, 245, 245, 255, 245, 245, 245, - 245, 245, 256, 245, 245, 245, 245, 245, - 245, 245, 245, 245, 245, 245, 245, 245, - 245, 245, 255, 245, 257, 258, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, - 2, 259, 2, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, - 260, 260, 260, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 260, 260, 260, - 260, 260, 260, 260, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 260, 260, - 260, 260, 0, 260, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 260, 260, - 260, 260, 260, 0, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 260, 261, - 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 261, 5, - 5, 5, 5, 5, 5, 5, 5, 5, - 5, 261, 261, 261, 261, 261, 261, 261, - 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 261, 261, 261, 261, 5, 261, - 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 261, 261, 261, 261, 261, 5, - 262, 262, 262, 262, 262, 262, 262, 262, - 262, 262, 262, 262, 262, 262, 262, 262, - 262, 262, 262, 262, 262, 262, 262, 262, - 262, 262, 262, 262, 262, 262, 262, 262, - 262, 262, 262, 262, 262, 262, 262, 262, - 262, 262, 262, 262, 262, 262, 262, 262, - 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 262, 262, 262, 262, 262, 262, - 262, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 262, 262, 262, 262, 7, - 262, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 262, 262, 262, 262, 262, - 7, 264, 265, 265, 265, 264, 265, 265, - 265, 265, 266, 267, 266, 266, 266, 265, - 265, 265, 265, 265, 265, 265, 265, 265, - 265, 265, 265, 264, 265, 265, 265, 265, - 265, 266, 268, 265, 269, 270, 271, 272, - 265, 265, 265, 273, 274, 265, 274, 265, - 275, 265, 265, 265, 265, 265, 265, 265, - 265, 265, 265, 276, 265, 277, 278, 279, - 265, 265, 280, 281, 280, 280, 282, 280, - 280, 280, 280, 280, 280, 280, 280, 280, - 280, 280, 280, 280, 280, 280, 280, 280, - 280, 280, 280, 280, 283, 284, 265, 275, - 285, 275, 286, 287, 288, 289, 290, 291, - 263, 263, 292, 263, 263, 263, 293, 294, - 295, 263, 263, 296, 297, 298, 299, 263, - 300, 263, 301, 263, 265, 302, 265, 274, - 265, 263, 303, 303, 303, 303, 303, 303, - 303, 303, 303, 303, 303, 303, 303, 303, - 303, 303, 303, 303, 303, 303, 303, 303, - 303, 303, 303, 303, 303, 303, 303, 303, - 303, 303, 303, 304, 303, 303, 303, 303, - 303, 303, 303, 303, 303, 303, 303, 303, - 303, 303, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 303, 303, 303, 304, - 303, 304, 303, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 303, 303, 303, - 303, 263, 303, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 303, 303, 303, - 303, 303, 263, 266, 305, 266, 266, 266, - 305, 305, 305, 305, 305, 305, 305, 305, - 305, 305, 305, 305, 305, 305, 305, 305, - 305, 305, 266, 305, 306, 275, 307, 307, - 275, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 275, 307, - 308, 309, 310, 311, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 9, 9, 312, - 9, 312, 9, 9, 312, 312, 9, 9, - 9, 314, 9, 9, 315, 315, 315, 315, - 315, 315, 315, 315, 315, 315, 9, 9, - 9, 9, 9, 9, 9, 313, 313, 313, - 313, 313, 313, 313, 313, 313, 313, 313, - 313, 313, 313, 313, 313, 313, 313, 313, - 313, 313, 313, 313, 313, 313, 313, 312, - 9, 312, 312, 313, 9, 313, 313, 313, - 313, 313, 313, 313, 313, 313, 313, 313, - 313, 313, 313, 313, 313, 313, 313, 313, - 313, 313, 313, 313, 313, 313, 313, 312, - 312, 312, 9, 312, 313, 316, 316, 316, - 316, 316, 316, 316, 316, 316, 316, 316, - 316, 316, 316, 316, 316, 316, 316, 316, - 316, 316, 316, 316, 316, 316, 316, 316, - 316, 316, 316, 316, 316, 316, 316, 316, - 316, 316, 316, 316, 316, 316, 316, 316, - 316, 316, 316, 316, 316, 313, 313, 313, - 313, 313, 313, 313, 313, 313, 313, 316, - 316, 316, 316, 316, 316, 316, 313, 313, - 313, 313, 313, 313, 313, 313, 313, 313, - 313, 313, 313, 313, 313, 313, 313, 313, - 313, 313, 313, 313, 313, 313, 313, 313, - 316, 316, 316, 316, 313, 316, 313, 313, - 313, 313, 313, 313, 313, 313, 313, 313, - 313, 313, 313, 313, 313, 313, 313, 313, - 313, 313, 313, 313, 313, 313, 313, 313, - 316, 316, 316, 316, 316, 313, 315, 315, - 315, 315, 315, 315, 315, 315, 315, 315, - 316, 317, 307, 275, 307, 275, 307, 275, - 307, 319, 318, 275, 320, 307, 275, 307, - 321, 275, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, - 312, 275, 312, 275, 307, 275, 275, 307, - 303, 303, 303, 303, 303, 303, 303, 303, - 303, 303, 303, 303, 303, 303, 303, 303, - 303, 303, 303, 303, 303, 303, 303, 303, - 303, 303, 303, 303, 303, 303, 303, 303, - 303, 304, 303, 303, 303, 303, 303, 303, - 303, 303, 303, 303, 303, 303, 303, 303, - 280, 280, 280, 280, 280, 280, 280, 280, - 280, 280, 303, 303, 303, 304, 303, 304, - 303, 280, 280, 280, 280, 280, 280, 280, - 280, 280, 280, 280, 280, 280, 280, 280, - 280, 280, 280, 280, 280, 280, 280, 280, - 280, 280, 280, 303, 303, 303, 303, 280, - 303, 280, 280, 280, 280, 280, 280, 280, - 280, 280, 280, 280, 280, 280, 280, 280, - 280, 280, 280, 280, 280, 280, 280, 280, - 280, 280, 280, 303, 303, 303, 303, 303, - 280, 322, 322, 322, 322, 322, 322, 322, - 322, 322, 322, 322, 322, 322, 322, 322, - 322, 322, 322, 322, 322, 322, 322, 322, - 322, 322, 322, 322, 322, 322, 322, 322, - 322, 322, 304, 322, 322, 322, 322, 322, - 322, 322, 322, 322, 322, 322, 322, 322, - 322, 280, 280, 280, 280, 280, 280, 280, - 280, 280, 280, 322, 322, 322, 304, 322, - 304, 322, 280, 280, 280, 280, 323, 280, - 280, 280, 280, 280, 280, 280, 280, 280, - 280, 280, 280, 280, 280, 280, 280, 280, - 280, 280, 280, 280, 322, 322, 322, 322, - 280, 322, 280, 280, 280, 280, 280, 280, - 280, 280, 280, 280, 280, 280, 280, 280, - 280, 280, 280, 280, 280, 280, 280, 280, - 280, 280, 280, 280, 322, 322, 322, 322, - 322, 280, 322, 322, 322, 322, 322, 322, - 322, 322, 322, 322, 322, 322, 322, 322, - 322, 322, 322, 322, 322, 322, 322, 322, - 322, 322, 322, 322, 322, 322, 322, 322, - 322, 322, 322, 304, 322, 322, 322, 322, - 322, 322, 322, 322, 322, 322, 322, 322, - 322, 322, 280, 280, 280, 280, 280, 280, - 280, 280, 280, 280, 322, 322, 322, 304, - 322, 304, 322, 280, 280, 280, 280, 280, - 280, 324, 280, 280, 280, 280, 280, 280, - 280, 280, 280, 280, 280, 280, 280, 280, - 280, 280, 280, 280, 280, 322, 322, 322, - 322, 280, 322, 280, 280, 280, 280, 280, - 280, 280, 280, 280, 280, 280, 280, 280, - 280, 280, 280, 280, 280, 280, 280, 280, - 280, 280, 280, 280, 280, 322, 322, 322, - 322, 322, 280, 322, 322, 322, 322, 322, - 322, 322, 322, 322, 322, 322, 322, 322, - 322, 322, 322, 322, 322, 322, 322, 322, - 322, 322, 322, 322, 322, 322, 322, 322, - 322, 322, 322, 322, 304, 322, 322, 322, - 322, 322, 322, 322, 322, 322, 322, 322, - 322, 322, 322, 280, 280, 280, 280, 280, - 280, 280, 280, 280, 280, 322, 322, 322, - 304, 322, 304, 322, 280, 280, 280, 280, - 280, 280, 280, 280, 325, 280, 280, 280, - 280, 280, 280, 280, 280, 280, 280, 280, - 280, 280, 280, 280, 280, 280, 322, 322, - 322, 322, 280, 322, 280, 280, 280, 280, - 280, 280, 280, 280, 280, 280, 280, 280, - 280, 280, 280, 280, 280, 280, 280, 280, - 280, 280, 280, 280, 280, 280, 322, 322, - 322, 322, 322, 280, 322, 322, 322, 322, - 322, 322, 322, 322, 322, 322, 322, 322, - 322, 322, 322, 322, 322, 322, 322, 322, - 322, 322, 322, 322, 322, 322, 322, 322, - 322, 322, 322, 322, 322, 304, 322, 322, - 322, 322, 322, 322, 322, 322, 322, 322, - 322, 322, 322, 322, 280, 280, 280, 280, - 280, 280, 280, 280, 280, 280, 322, 322, - 322, 304, 322, 304, 322, 280, 280, 280, - 280, 280, 280, 280, 280, 280, 280, 280, - 280, 280, 326, 280, 280, 280, 280, 280, - 280, 280, 280, 280, 280, 280, 280, 322, - 322, 322, 322, 280, 322, 280, 280, 280, - 280, 280, 280, 280, 280, 280, 280, 280, - 280, 280, 280, 280, 280, 280, 280, 280, - 280, 280, 280, 280, 280, 280, 280, 322, - 322, 322, 322, 322, 280, 322, 322, 322, - 322, 322, 322, 322, 322, 322, 322, 322, - 322, 322, 322, 322, 322, 322, 322, 322, - 322, 322, 322, 322, 322, 322, 322, 322, - 322, 322, 322, 322, 322, 322, 304, 322, - 322, 322, 322, 322, 322, 322, 322, 322, - 322, 322, 322, 322, 322, 280, 280, 280, - 280, 280, 280, 280, 280, 280, 280, 322, - 322, 322, 304, 322, 304, 322, 280, 280, - 280, 280, 280, 280, 280, 280, 280, 280, - 280, 280, 280, 327, 280, 280, 280, 280, - 280, 280, 280, 280, 280, 280, 280, 280, - 322, 322, 322, 322, 280, 322, 280, 280, - 280, 280, 280, 280, 280, 280, 280, 280, - 280, 280, 280, 280, 280, 280, 280, 280, - 280, 280, 280, 280, 280, 280, 280, 280, - 322, 322, 322, 322, 322, 280, 322, 322, - 322, 322, 322, 322, 322, 322, 322, 322, - 322, 322, 322, 322, 322, 322, 322, 322, - 322, 322, 322, 322, 322, 322, 322, 322, - 322, 322, 322, 322, 322, 322, 322, 304, - 322, 322, 322, 322, 322, 322, 322, 322, - 322, 322, 322, 322, 322, 322, 280, 280, - 280, 280, 280, 280, 280, 280, 280, 280, - 322, 322, 322, 304, 322, 304, 322, 280, - 280, 280, 326, 280, 280, 280, 280, 280, - 280, 280, 280, 280, 280, 280, 280, 280, - 280, 280, 280, 280, 280, 280, 280, 280, - 280, 322, 322, 322, 322, 280, 322, 280, - 280, 280, 280, 280, 280, 280, 280, 280, - 280, 280, 280, 280, 280, 280, 280, 280, - 280, 280, 280, 280, 280, 280, 280, 280, - 280, 322, 322, 322, 322, 322, 280, 321, - 312, 267, 312, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 304, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 328, 328, 328, - 304, 328, 304, 328, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 328, 328, - 328, 328, 329, 328, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 328, 328, - 328, 328, 328, 263, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 304, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 328, 328, - 328, 304, 328, 304, 328, 263, 263, 263, - 263, 330, 331, 263, 263, 263, 263, 263, - 332, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 328, - 328, 328, 328, 263, 328, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 328, - 328, 328, 328, 328, 263, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 304, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 328, - 328, 328, 304, 328, 304, 328, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 333, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 328, 328, 328, 328, 263, 328, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 328, 328, 328, 328, 328, 263, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 304, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 328, 328, 328, 304, 328, 304, 328, 263, - 263, 334, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 328, 328, 328, 328, 263, 328, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 328, 328, 328, 328, 328, 263, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 304, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 328, 328, 328, 304, 328, 304, 328, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 335, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 328, 328, 328, 328, 263, 328, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 328, 328, 328, 328, 328, 263, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 304, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 328, 328, 328, 304, 328, 304, - 328, 263, 263, 263, 336, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 328, 328, 328, 328, 263, - 328, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 328, 328, 328, 328, 328, - 263, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 304, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 328, 328, 328, 304, 328, - 304, 328, 263, 263, 263, 263, 263, 263, - 263, 263, 337, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 328, 328, 328, 328, - 263, 328, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 328, 328, 328, 328, - 328, 263, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 304, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 328, 328, 328, 304, - 328, 304, 328, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 338, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 328, 328, 328, - 328, 263, 328, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 328, 328, 328, - 328, 328, 263, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 304, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 328, 328, 328, - 304, 328, 304, 328, 263, 263, 263, 263, - 263, 263, 339, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 328, 328, - 328, 328, 263, 328, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 328, 328, - 328, 328, 328, 263, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 304, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 328, 328, - 328, 304, 328, 304, 328, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 328, - 328, 328, 328, 340, 328, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 328, - 328, 328, 328, 328, 263, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 304, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 328, - 328, 328, 304, 328, 304, 328, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 328, 328, 328, 328, 341, 328, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 328, 328, 328, 328, 328, 263, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 304, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 328, 328, 328, 304, 328, 304, 328, 263, - 263, 263, 263, 263, 263, 263, 263, 342, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 328, 328, 328, 328, 263, 328, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 328, 328, 328, 328, 328, 263, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 304, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 328, 328, 328, 304, 328, 304, 328, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 343, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 328, 328, 328, 328, 263, 328, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 328, 328, 328, 328, 328, 263, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 304, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 328, 328, 328, 304, 328, 304, - 328, 263, 263, 263, 263, 339, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 328, 328, 328, 328, 263, - 328, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 328, 328, 328, 328, 328, - 263, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 304, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 328, 328, 328, 304, 328, - 304, 328, 263, 263, 263, 263, 263, 263, - 263, 263, 344, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 328, 328, 328, 328, - 263, 328, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 328, 328, 328, 328, - 328, 263, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 304, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 328, 328, 328, 304, - 328, 304, 328, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 343, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 328, 328, 328, - 328, 263, 328, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 328, 328, 328, - 328, 328, 263, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 304, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 328, 328, 328, - 304, 328, 304, 328, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 328, 328, - 328, 328, 263, 328, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 345, - 263, 346, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 328, 328, - 328, 328, 328, 263, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 304, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 328, 328, - 328, 304, 328, 304, 328, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 328, - 328, 328, 328, 263, 328, 263, 263, 263, - 263, 263, 263, 263, 263, 347, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 328, - 328, 328, 328, 328, 263, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 304, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 328, - 328, 328, 304, 328, 304, 328, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 328, 328, 328, 328, 263, 328, 348, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 328, 328, 328, 328, 328, 263, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 304, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 328, 328, 328, 304, 328, 304, 328, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 328, 328, 328, 328, 263, 328, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 341, 263, 263, 263, 263, 263, 263, - 263, 328, 328, 328, 328, 328, 263, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 304, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 328, 328, 328, 304, 328, 304, 328, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 328, 328, 328, 328, 263, 328, - 263, 263, 263, 341, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 328, 328, 328, 328, 328, 263, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 304, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 328, 328, 328, 304, 328, 304, - 328, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 328, 328, 328, 328, 263, - 328, 263, 263, 263, 263, 349, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 350, 263, 263, 263, 263, 263, - 263, 263, 263, 328, 328, 328, 328, 328, - 263, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 304, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 328, 328, 328, 304, 328, - 304, 328, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 328, 328, 328, 328, - 263, 328, 263, 263, 263, 263, 263, 263, - 351, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 328, 328, 328, 328, - 328, 263, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 304, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 328, 328, 328, 304, - 328, 304, 328, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 328, 328, 328, - 328, 263, 328, 263, 263, 263, 263, 263, - 263, 263, 263, 352, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 328, 328, 328, - 328, 328, 263, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 304, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 328, 328, 328, - 304, 328, 304, 328, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 328, 328, - 328, 328, 263, 328, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 341, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 328, 328, - 328, 328, 328, 263, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 304, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 328, 328, - 328, 304, 328, 304, 328, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 328, - 328, 328, 328, 263, 328, 263, 263, 263, - 263, 353, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 328, - 328, 328, 328, 328, 263, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 304, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 328, - 328, 328, 304, 328, 304, 328, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 328, 328, 328, 328, 263, 328, 354, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 328, 328, 328, 328, 328, 263, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 304, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 328, 328, 328, 304, 328, 304, 328, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 328, 328, 328, 328, 263, 328, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 341, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 328, 328, 328, 328, 328, 263, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 304, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 328, 328, 328, 304, 328, 304, 328, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 328, 328, 328, 328, 263, 328, - 355, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 356, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 328, 328, 328, 328, 328, 263, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 304, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 328, 328, 328, 304, 328, 304, - 328, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 328, 328, 328, 328, 263, - 328, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 357, 263, 263, 263, 263, - 263, 263, 263, 328, 328, 328, 328, 328, - 263, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 304, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 328, 328, 328, 304, 328, - 304, 328, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 328, 328, 328, 328, - 263, 328, 263, 263, 263, 263, 341, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 328, 328, 328, 328, - 328, 263, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 304, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 328, 328, 328, 304, - 328, 304, 328, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 328, 328, 328, - 328, 263, 328, 358, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 328, 328, 328, - 328, 328, 263, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 304, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 328, 328, 328, - 304, 328, 304, 328, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 328, 328, - 328, 328, 263, 328, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 348, 263, - 263, 263, 263, 263, 263, 263, 328, 328, - 328, 328, 328, 263, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 304, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 328, 328, - 328, 304, 328, 304, 328, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 328, - 328, 328, 328, 263, 328, 263, 263, 263, - 263, 359, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 341, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 328, - 328, 328, 328, 328, 263, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 304, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 328, - 328, 328, 304, 328, 304, 328, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 328, 328, 328, 328, 263, 328, 263, 263, - 263, 263, 263, 360, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 328, 328, 328, 328, 328, 263, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 304, - 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 361, 361, 361, 304, 361, 304, 361, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 361, 361, 361, 361, 263, 361, 263, - 263, 263, 263, 263, 263, 263, 263, 362, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 361, 361, 361, 361, 361, 263, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 304, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 328, 328, 328, 304, 328, 304, 328, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 328, 328, 328, 328, 263, 328, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 363, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 328, 328, 328, 328, 328, 263, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 304, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 328, 328, 328, 304, 328, 304, - 328, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 328, 328, 328, 328, 263, - 328, 263, 263, 263, 263, 364, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 328, 328, 328, 328, 328, - 263, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 304, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 328, 328, 328, 304, 328, - 304, 328, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 328, 328, 328, 328, - 263, 328, 263, 263, 263, 365, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 328, 328, 328, 328, - 328, 263, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 304, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 328, 328, 328, 304, - 328, 366, 328, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 328, 328, 328, - 328, 263, 328, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 328, 328, 328, - 328, 328, 263, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 304, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 328, 328, 328, - 304, 328, 304, 328, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 328, 328, - 328, 328, 263, 328, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 367, - 263, 368, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 328, 328, - 328, 328, 328, 263, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 304, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 328, 328, - 328, 304, 328, 304, 328, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 328, - 328, 328, 328, 263, 328, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 369, - 263, 263, 263, 263, 263, 263, 263, 328, - 328, 328, 328, 328, 263, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 304, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 328, - 328, 328, 304, 328, 304, 328, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 328, 328, 328, 328, 263, 328, 263, 263, - 263, 263, 341, 263, 263, 263, 370, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 328, 328, 328, 328, 328, 263, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 304, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 328, 328, 328, 304, 328, 304, 328, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 328, 328, 328, 328, 263, 328, 263, - 263, 263, 263, 263, 341, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 328, 328, 328, 328, 328, 263, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 304, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 328, 328, 328, 304, 328, 304, 328, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 328, 328, 328, 328, 263, 328, - 263, 263, 263, 341, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 371, 263, 263, 263, 263, 263, - 263, 263, 328, 328, 328, 328, 328, 263, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 304, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 328, 328, 328, 304, 328, 304, - 328, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 328, 328, 328, 328, 263, - 328, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 372, 263, 263, - 263, 263, 263, 328, 328, 328, 328, 328, - 263, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 304, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 328, 328, 328, 304, 328, - 304, 328, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 328, 328, 328, 328, - 263, 328, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 357, 263, 263, 263, 263, - 263, 263, 263, 263, 328, 328, 328, 328, - 328, 263, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 304, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 328, 328, 328, 304, - 328, 304, 328, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 328, 328, 328, - 328, 263, 328, 373, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 295, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 328, 328, 328, - 328, 328, 263, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 304, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 328, 328, 328, - 304, 328, 304, 328, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 328, 328, - 328, 328, 263, 328, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 355, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 328, 328, - 328, 328, 328, 263, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 304, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 328, 328, - 328, 304, 328, 304, 328, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 328, - 328, 328, 328, 263, 328, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 341, 263, - 263, 263, 263, 263, 263, 263, 263, 328, - 328, 328, 328, 328, 263, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 304, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 328, - 328, 328, 304, 328, 304, 328, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 328, 328, 328, 328, 263, 328, 263, 263, - 263, 263, 263, 341, 263, 263, 263, 263, - 263, 263, 263, 341, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 328, 328, 328, 328, 328, 263, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 304, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 328, 328, 328, 304, 328, 304, 328, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 328, 328, 328, 328, 263, 328, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 374, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 328, 328, 328, 328, 328, 263, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 304, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 328, 328, 328, 304, 328, 304, 328, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 328, 328, 328, 328, 263, 328, - 263, 263, 263, 375, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 328, 328, 328, 328, 328, 263, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 304, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 328, 328, 328, 304, 328, 304, - 328, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 328, 328, 328, 328, 263, - 328, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 376, 263, 263, - 263, 263, 263, 328, 328, 328, 328, 328, - 263, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 304, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 328, 328, 328, 304, 328, - 304, 328, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 328, 328, 328, 328, - 263, 328, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 357, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 328, 328, 328, 328, - 328, 263, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 304, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 328, 328, 328, 304, - 328, 304, 328, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 328, 328, 328, - 328, 263, 328, 263, 263, 263, 263, 377, - 263, 263, 263, 378, 263, 263, 263, 263, - 263, 379, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 328, 328, 328, - 328, 328, 263, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 304, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 328, 328, 328, - 304, 328, 304, 328, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 328, 328, - 328, 328, 263, 328, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 379, 263, 263, 328, 328, - 328, 328, 328, 263, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 304, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 328, 328, - 328, 304, 328, 304, 328, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 328, - 328, 328, 328, 263, 328, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 341, 263, 263, 263, 263, 263, 263, 328, - 328, 328, 328, 328, 263, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 304, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 328, - 328, 328, 304, 328, 304, 328, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 328, 328, 328, 328, 263, 328, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 341, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 328, 328, 328, 328, 328, 263, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 304, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 328, 328, 328, 304, 328, 304, 328, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 328, 328, 328, 328, 263, 328, 263, - 263, 263, 263, 380, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 328, 328, 328, 328, 328, 263, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 304, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 328, 328, 328, 304, 328, 304, 328, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 328, 328, 328, 328, 263, 328, - 263, 263, 263, 381, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 382, 383, 263, 263, 263, 263, - 263, 263, 328, 328, 328, 328, 328, 263, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 304, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 328, 328, 328, 304, 328, 304, - 328, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 328, 328, 328, 328, 263, - 328, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 341, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 328, 328, 328, 328, 328, - 263, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 304, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 328, 328, 328, 304, 328, - 304, 328, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 328, 328, 328, 328, - 263, 328, 263, 263, 384, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 328, 328, 328, 328, - 328, 263, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 304, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 328, 328, 328, 304, - 328, 304, 328, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 328, 328, 328, - 328, 263, 328, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 357, - 263, 263, 263, 263, 263, 328, 328, 328, - 328, 328, 263, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 304, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 328, 328, 328, - 304, 328, 304, 328, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 328, 328, - 328, 328, 263, 328, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 385, 263, 263, - 386, 263, 263, 263, 263, 263, 328, 328, - 328, 328, 328, 263, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 304, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 328, 328, - 328, 304, 328, 304, 328, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 328, - 328, 328, 328, 263, 328, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 341, 263, 328, - 328, 328, 328, 328, 263, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 304, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 328, - 328, 328, 304, 328, 304, 328, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 328, 328, 328, 328, 263, 328, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 352, - 263, 263, 263, 263, 263, 263, 263, 263, - 328, 328, 328, 328, 328, 263, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 304, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 328, 328, 328, 304, 328, 304, 328, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 328, 328, 328, 328, 263, 328, 263, - 263, 263, 263, 387, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 388, 263, 263, 263, 263, - 263, 328, 328, 328, 328, 328, 263, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 304, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 328, 328, 328, 304, 328, 304, 328, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 328, 328, 328, 328, 263, 328, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 370, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 328, 328, 328, 328, 328, 263, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 304, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 328, 328, 328, 304, 328, 304, - 328, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 328, 328, 328, 328, 263, - 328, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 389, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 328, 328, 328, 328, 328, - 263, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 304, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 328, 328, 328, 304, 328, - 304, 328, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 328, 328, 328, 328, - 263, 328, 263, 263, 263, 263, 295, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 328, 328, 328, 328, - 328, 263, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 304, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 328, 328, 328, 304, - 328, 304, 328, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 328, 328, 328, - 328, 263, 328, 263, 263, 263, 263, 263, - 263, 263, 390, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 384, 263, 263, 263, - 263, 263, 263, 263, 263, 328, 328, 328, - 328, 328, 263, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 304, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 328, 328, 328, - 304, 328, 304, 328, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 328, 328, - 328, 328, 263, 328, 263, 263, 263, 263, - 352, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 328, 328, - 328, 328, 328, 263, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 304, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 328, 328, - 328, 304, 328, 304, 328, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 328, - 328, 328, 328, 263, 328, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 391, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 328, - 328, 328, 328, 328, 263, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 304, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 328, - 328, 328, 304, 328, 304, 328, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 328, 328, 328, 328, 263, 328, 263, 263, - 263, 392, 263, 263, 263, 263, 263, 263, - 263, 393, 263, 263, 263, 263, 263, 263, - 263, 394, 263, 263, 263, 263, 263, 263, - 328, 328, 328, 328, 328, 263, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 304, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 328, 328, 328, 304, 328, 304, 328, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 328, 328, 328, 328, 263, 328, 263, - 263, 263, 263, 370, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 328, 328, 328, 328, 328, 263, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 304, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 328, 328, 328, 304, 328, 304, 328, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 328, 328, 328, 328, 263, 328, - 263, 263, 263, 263, 358, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 328, 328, 328, 328, 328, 263, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 304, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 328, 328, 328, 304, 328, 304, - 328, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 328, 328, 328, 328, 263, - 328, 263, 263, 263, 263, 263, 263, 263, - 263, 378, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 328, 328, 328, 328, 328, - 263, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 304, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 328, 328, 328, 304, 328, - 304, 328, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 328, 328, 328, 328, - 263, 328, 263, 263, 263, 263, 263, 263, - 263, 395, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 328, 328, 328, 328, - 328, 263, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 304, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 328, 328, 328, 304, - 328, 304, 328, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 328, 328, 328, - 328, 263, 328, 263, 263, 263, 263, 352, - 263, 263, 263, 376, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 328, 328, 328, - 328, 328, 263, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 304, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 328, 328, 328, - 304, 328, 304, 328, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 328, 328, - 328, 328, 263, 328, 263, 263, 263, 263, - 263, 263, 263, 263, 396, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 328, 328, - 328, 328, 328, 263, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 304, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 328, 328, - 328, 304, 328, 304, 328, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 328, - 328, 328, 328, 263, 328, 263, 263, 263, - 263, 397, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 328, - 328, 328, 328, 328, 263, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 304, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 328, - 328, 328, 304, 328, 304, 328, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 328, 328, 328, 328, 263, 328, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 263, 346, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, - 328, 328, 328, 328, 328, 263, 275, 307, - 399, 400, 400, 400, 399, 400, 400, 400, - 400, 401, 400, 401, 401, 401, 400, 400, - 400, 400, 400, 400, 400, 400, 400, 400, - 400, 400, 399, 400, 400, 400, 400, 400, - 401, 400, 400, 402, 400, 400, 400, 400, - 400, 400, 400, 400, 400, 400, 403, 400, - 400, 400, 400, 400, 400, 400, 400, 400, - 400, 400, 400, 400, 400, 400, 400, 400, - 400, 398, 398, 398, 398, 398, 398, 398, - 398, 398, 398, 398, 398, 398, 398, 398, - 398, 398, 398, 398, 398, 398, 398, 398, - 398, 398, 398, 400, 404, 400, 400, 398, - 400, 398, 398, 398, 398, 398, 398, 398, - 398, 398, 398, 398, 398, 398, 398, 398, - 398, 398, 398, 398, 398, 398, 398, 398, - 398, 398, 398, 400, 400, 400, 400, 400, - 398, 405, 405, 405, 405, 405, 405, 405, - 405, 405, 405, 405, 405, 405, 405, 405, - 405, 405, 405, 405, 405, 405, 405, 405, - 405, 405, 405, 405, 405, 405, 405, 405, - 405, 405, 14, 405, 405, 405, 405, 405, - 405, 405, 405, 405, 405, 405, 405, 405, - 405, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 15, 405, 405, 405, 405, - 14, 405, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 405, 405, 405, 405, - 13, 405, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 405, 405, 405, 405, - 405, 13, 401, 406, 401, 401, 401, 406, - 406, 406, 406, 406, 406, 406, 406, 406, - 406, 406, 406, 406, 406, 406, 406, 406, - 406, 401, 406, 407, 408, 409, 410, 411, - 405, 412, 405, 413, 415, 416, 416, 416, - 415, 416, 416, 416, 416, 417, 418, 417, - 417, 417, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 415, 416, - 416, 416, 416, 416, 417, 419, 416, 420, - 416, 421, 422, 416, 416, 416, 423, 424, - 416, 424, 416, 421, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 425, 426, 427, 416, 416, 428, 428, 428, - 428, 428, 428, 428, 428, 428, 428, 428, - 428, 428, 428, 428, 428, 428, 428, 428, - 428, 428, 428, 428, 428, 428, 428, 429, - 430, 416, 421, 414, 421, 414, 414, 414, - 414, 414, 414, 414, 414, 414, 414, 414, - 414, 414, 414, 414, 414, 414, 414, 414, - 414, 414, 414, 414, 414, 414, 414, 416, - 431, 416, 424, 416, 414, 432, 432, 432, - 432, 432, 432, 432, 432, 432, 432, 432, - 432, 432, 432, 432, 432, 432, 432, 432, - 432, 432, 432, 432, 432, 432, 432, 432, - 432, 432, 432, 432, 432, 432, 433, 432, - 432, 432, 432, 432, 432, 432, 432, 432, - 432, 432, 432, 432, 432, 414, 414, 414, - 414, 414, 414, 414, 414, 414, 414, 432, - 432, 432, 432, 432, 433, 432, 414, 414, - 414, 414, 414, 414, 414, 414, 414, 414, - 414, 414, 414, 414, 414, 414, 414, 414, - 414, 414, 414, 414, 414, 414, 414, 414, - 432, 432, 432, 432, 414, 432, 414, 414, - 414, 414, 414, 414, 414, 414, 414, 414, - 414, 414, 414, 414, 414, 414, 414, 414, - 414, 414, 414, 414, 414, 414, 414, 414, - 432, 432, 432, 432, 432, 414, 435, 434, - 436, 417, 437, 417, 417, 417, 437, 437, - 437, 437, 437, 437, 437, 437, 437, 437, - 437, 437, 437, 437, 437, 437, 437, 437, - 417, 437, 438, 421, 439, 439, 421, 439, - 439, 439, 439, 439, 439, 439, 439, 439, - 439, 439, 439, 439, 439, 439, 439, 439, - 439, 439, 439, 439, 439, 439, 439, 439, - 439, 439, 439, 439, 439, 439, 439, 439, - 439, 439, 439, 439, 439, 439, 439, 439, - 439, 439, 439, 439, 439, 439, 439, 439, - 439, 439, 439, 439, 439, 439, 439, 439, - 439, 439, 439, 439, 421, 439, 440, 441, - 442, 443, 421, 439, 421, 439, 421, 439, - 421, 444, 439, 421, 439, 446, 421, 445, - 445, 445, 445, 445, 445, 445, 445, 445, - 445, 445, 445, 445, 445, 445, 445, 445, - 445, 445, 445, 445, 445, 445, 445, 445, - 445, 445, 445, 445, 445, 445, 445, 445, - 445, 445, 445, 445, 445, 445, 445, 445, - 445, 445, 445, 445, 445, 445, 445, 445, - 445, 445, 445, 445, 445, 445, 445, 445, - 445, 445, 445, 445, 445, 445, 421, 445, - 421, 439, 421, 421, 439, 447, 447, 447, - 447, 447, 447, 447, 447, 447, 447, 447, - 447, 447, 447, 447, 447, 447, 447, 447, - 447, 447, 447, 447, 447, 447, 447, 447, - 447, 447, 447, 447, 447, 447, 433, 447, - 447, 447, 447, 447, 447, 447, 447, 447, - 447, 447, 447, 447, 447, 428, 428, 428, - 428, 428, 428, 428, 428, 428, 428, 447, - 447, 447, 447, 447, 433, 447, 428, 428, - 428, 428, 428, 428, 428, 428, 428, 428, - 428, 428, 428, 428, 428, 428, 428, 428, - 428, 428, 428, 428, 428, 428, 428, 428, - 447, 447, 447, 447, 428, 447, 428, 428, - 428, 428, 428, 428, 428, 428, 428, 428, - 428, 428, 428, 428, 428, 428, 428, 428, - 428, 428, 428, 428, 428, 428, 428, 428, - 447, 447, 447, 447, 447, 428, 446, 445, - 418, 445, 421, 439, 449, 448, 448, 448, - 449, 448, 448, 448, 448, 450, 451, 450, - 450, 450, 448, 448, 448, 448, 448, 448, - 448, 448, 448, 448, 448, 448, 449, 448, - 448, 448, 448, 448, 450, 448, 448, 452, - 448, 24, 453, 448, 454, 448, 455, 24, - 55, 456, 57, 24, 448, 448, 448, 448, - 448, 448, 448, 448, 448, 448, 457, 448, - 458, 55, 459, 460, 448, 448, 448, 448, - 448, 448, 448, 448, 448, 448, 448, 448, - 448, 448, 448, 448, 448, 448, 448, 448, - 448, 448, 448, 448, 448, 448, 448, 55, - 461, 55, 24, 448, 448, 448, 448, 448, - 448, 448, 448, 448, 448, 462, 448, 448, - 448, 448, 448, 448, 448, 448, 463, 448, - 448, 464, 448, 465, 448, 448, 448, 68, - 69, 448, 24, 448, 466, 466, 466, 466, - 466, 466, 466, 466, 466, 450, 466, 450, - 450, 450, 466, 466, 466, 466, 466, 466, - 466, 466, 466, 466, 466, 466, 466, 466, - 466, 466, 466, 466, 450, 466, 466, 466, - 466, 50, 51, 466, 52, 466, 53, 54, - 55, 56, 57, 50, 466, 466, 466, 466, - 466, 466, 466, 466, 466, 466, 58, 466, - 59, 55, 60, 61, 466, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 62, - 63, 55, 24, 19, 466, 19, 19, 19, - 19, 19, 19, 19, 19, 64, 19, 19, - 19, 19, 19, 19, 19, 19, 65, 19, - 19, 66, 19, 67, 19, 19, 19, 68, - 69, 466, 24, 466, 19, 467, 468, 468, - 468, 467, 468, 468, 468, 468, 55, 469, - 55, 55, 55, 468, 468, 468, 468, 468, - 468, 468, 468, 468, 468, 468, 468, 467, - 468, 468, 468, 468, 468, 55, 468, 468, - 468, 468, 468, 468, 468, 468, 468, 468, - 468, 468, 468, 468, 468, 468, 468, 468, - 468, 468, 468, 468, 468, 468, 468, 468, - 468, 468, 55, 468, 55, 469, 55, 55, - 55, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 55, 18, 18, 18, 18, - 18, 24, 18, 18, 18, 18, 18, 18, - 18, 55, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, - 55, 18, 55, 469, 55, 55, 55, 18, - 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, - 18, 55, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 55, 18, - 470, 55, 469, 55, 55, 55, 471, 471, - 471, 471, 471, 471, 471, 471, 471, 471, - 471, 471, 471, 471, 471, 471, 471, 471, - 55, 471, 471, 471, 471, 471, 471, 471, - 471, 471, 472, 471, 471, 471, 471, 471, - 471, 471, 471, 471, 471, 471, 471, 471, - 471, 471, 471, 471, 471, 55, 471, 55, - 469, 55, 55, 55, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 55, 18, - 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 55, 55, 18, 473, 467, - 55, 467, 475, 474, 477, 478, 477, 477, - 477, 476, 476, 476, 476, 476, 476, 476, - 476, 476, 476, 476, 476, 476, 476, 476, - 476, 476, 476, 477, 476, 479, 467, 467, - 467, 467, 467, 467, 467, 467, 467, 467, - 467, 467, 467, 467, 467, 467, 467, 467, - 467, 467, 467, 467, 467, 467, 467, 467, - 467, 467, 467, 467, 467, 467, 467, 20, - 467, 467, 467, 467, 467, 467, 467, 467, - 467, 467, 467, 467, 467, 467, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 21, 467, 467, 467, 467, 20, 467, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 467, 467, 467, 467, 19, 467, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, 19, 19, - 19, 467, 467, 467, 467, 467, 19, 480, - 55, 469, 55, 55, 55, 467, 467, 467, - 467, 467, 467, 467, 467, 467, 467, 467, - 467, 467, 467, 467, 467, 467, 467, 55, - 467, 467, 467, 467, 467, 467, 467, 467, - 467, 467, 467, 467, 467, 467, 467, 467, - 467, 467, 467, 467, 467, 467, 467, 467, - 467, 467, 467, 467, 55, 467, 467, 467, - 467, 467, 467, 467, 467, 467, 467, 467, - 467, 467, 467, 467, 467, 467, 467, 467, - 467, 467, 467, 467, 467, 467, 467, 467, - 467, 467, 467, 467, 467, 467, 467, 467, - 467, 467, 467, 467, 467, 467, 467, 467, - 467, 467, 467, 467, 467, 467, 467, 467, - 467, 467, 467, 467, 467, 467, 467, 467, - 467, 467, 467, 24, 467, 481, 482, 483, - 484, 485, 486, 55, 469, 55, 55, 55, - 467, 467, 467, 467, 467, 467, 467, 467, - 467, 467, 467, 467, 467, 467, 467, 467, - 467, 467, 55, 467, 467, 467, 467, 467, - 467, 467, 467, 467, 24, 467, 467, 467, - 467, 467, 467, 467, 467, 467, 467, 467, - 467, 467, 467, 467, 467, 467, 467, 55, - 467, 55, 474, 24, 487, 24, 487, 488, - 489, 488, 488, 488, 476, 476, 476, 476, - 476, 476, 476, 476, 476, 476, 476, 476, - 476, 476, 476, 476, 476, 476, 488, 476, - 490, 487, 491, 491, 491, 491, 491, 491, - 491, 491, 491, 27, 491, 27, 27, 27, - 491, 491, 491, 491, 491, 491, 491, 491, - 491, 491, 491, 491, 491, 491, 491, 491, - 491, 491, 27, 491, 491, 491, 491, 28, - 29, 491, 30, 491, 31, 32, 33, 34, - 35, 28, 491, 491, 491, 491, 491, 491, - 491, 491, 491, 491, 36, 491, 37, 33, - 38, 39, 491, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 40, 41, 33, - 42, 26, 491, 26, 26, 26, 26, 26, - 26, 26, 26, 43, 26, 26, 26, 26, - 26, 26, 26, 26, 44, 26, 26, 45, - 26, 46, 26, 26, 26, 47, 48, 491, - 42, 491, 26, 55, 487, 492, 487, 493, - 487, 494, 487, 495, 94, 94, 94, 495, - 94, 94, 94, 94, 496, 94, 496, 496, - 496, 94, 94, 94, 94, 94, 94, 94, - 94, 94, 94, 94, 94, 495, 94, 94, - 94, 94, 94, 496, 94, 94, 94, 94, - 94, 94, 94, 94, 94, 94, 94, 94, - 94, 94, 94, 94, 94, 94, 94, 94, - 94, 94, 94, 94, 94, 94, 94, 94, - 94, 94, 94, 94, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 96, 94, 497, - 94, 94, 96, 94, 96, 96, 96, 100, - 96, 96, 96, 96, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 96, 94, 94, - 94, 94, 94, 96, 93, 93, 93, 93, - 93, 93, 93, 93, 93, 93, 93, 93, - 93, 93, 93, 93, 93, 93, 93, 93, - 93, 93, 93, 93, 93, 93, 93, 93, - 93, 93, 93, 93, 93, 498, 93, 93, - 93, 93, 93, 93, 93, 93, 93, 93, - 93, 93, 93, 93, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 96, 94, 93, - 93, 93, 93, 498, 93, 96, 96, 96, - 96, 96, 96, 96, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 96, 96, 93, - 93, 93, 93, 96, 93, 96, 96, 96, - 96, 96, 96, 96, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 96, 96, 93, - 93, 93, 93, 93, 96, 499, 499, 499, - 499, 499, 499, 499, 499, 499, 97, 499, - 97, 97, 97, 499, 499, 499, 499, 499, - 499, 499, 499, 499, 499, 499, 499, 499, - 499, 499, 499, 499, 499, 97, 499, 499, - 499, 499, 499, 499, 499, 98, 499, 499, - 499, 499, 499, 499, 499, 499, 499, 499, - 499, 499, 499, 499, 499, 499, 499, 499, - 499, 499, 499, 499, 499, 499, 96, 96, - 96, 96, 96, 96, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 96, 96, 96, - 499, 99, 499, 499, 96, 499, 96, 96, - 96, 100, 96, 96, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 96, 96, 96, - 499, 499, 499, 499, 499, 96, 500, 499, - 499, 499, 499, 499, 499, 499, 499, 499, - 499, 499, 499, 499, 499, 499, 499, 499, - 499, 499, 499, 499, 499, 499, 499, 499, - 499, 499, 499, 499, 499, 499, 499, 499, - 498, 499, 499, 499, 499, 499, 499, 499, - 499, 499, 499, 499, 499, 499, 499, 96, - 96, 96, 96, 96, 96, 96, 96, 96, - 96, 94, 499, 499, 499, 499, 498, 499, - 96, 96, 96, 96, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 96, 96, 96, - 96, 96, 499, 499, 499, 499, 96, 499, - 96, 96, 96, 96, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 96, 501, 96, - 96, 96, 96, 96, 96, 96, 96, 96, - 96, 96, 499, 499, 499, 499, 499, 96, - 101, 499, 503, 502, 502, 502, 503, 502, - 502, 502, 502, 504, 502, 504, 504, 504, - 502, 502, 502, 502, 502, 502, 502, 502, - 502, 502, 502, 502, 503, 502, 502, 502, - 502, 502, 504, 502, 502, 505, 502, 502, - 502, 502, 502, 502, 502, 502, 502, 502, - 502, 502, 502, 502, 502, 502, 502, 502, - 502, 502, 502, 502, 502, 502, 502, 502, - 502, 502, 502, 502, 502, 502, 502, 502, - 502, 502, 502, 502, 502, 502, 502, 502, - 502, 502, 502, 502, 502, 502, 502, 502, - 502, 502, 502, 502, 502, 502, 506, 502, - 502, 502, 502, 502, 502, 502, 507, 502, - 502, 502, 502, 502, 502, 502, 502, 502, - 502, 502, 502, 502, 502, 502, 502, 502, - 502, 502, 502, 502, 502, 508, 502, 504, - 509, 504, 504, 504, 509, 509, 509, 509, - 509, 509, 509, 509, 509, 509, 509, 509, - 509, 509, 509, 509, 509, 509, 504, 509, - 510, 511, 512, 513, 515, 514, 516, 517, - 514, 518, 520, 521, 521, 521, 520, 521, - 521, 521, 521, 522, 523, 522, 522, 522, - 521, 521, 521, 521, 521, 521, 521, 521, - 521, 521, 521, 521, 520, 521, 521, 521, - 521, 521, 522, 521, 521, 524, 521, 521, - 521, 521, 521, 521, 521, 521, 521, 521, - 521, 521, 521, 521, 521, 521, 521, 521, - 521, 521, 521, 521, 521, 521, 521, 521, - 521, 521, 521, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 521, 525, 521, - 521, 519, 521, 519, 519, 519, 519, 519, - 519, 519, 519, 526, 519, 519, 519, 519, - 519, 519, 519, 519, 527, 519, 519, 528, - 519, 529, 519, 519, 519, 521, 521, 521, - 521, 521, 519, 530, 530, 530, 530, 530, - 530, 530, 530, 530, 530, 530, 530, 530, - 530, 530, 530, 530, 530, 530, 530, 530, - 530, 530, 530, 530, 530, 530, 530, 530, - 530, 530, 530, 530, 530, 530, 530, 530, - 530, 530, 530, 530, 530, 530, 530, 530, - 530, 530, 530, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 530, 530, 530, - 530, 530, 530, 530, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 530, 530, - 530, 530, 519, 530, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 530, 530, - 530, 530, 530, 519, 522, 531, 522, 522, - 522, 531, 531, 531, 531, 531, 531, 531, - 531, 531, 531, 531, 531, 531, 531, 531, - 531, 531, 531, 522, 531, 532, 533, 534, - 535, 536, 538, 537, 539, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 540, - 540, 540, 540, 540, 540, 540, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 540, 540, 540, 540, 519, 540, 519, 519, - 519, 519, 519, 541, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 540, 540, 540, 540, 540, 519, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 540, 540, 540, 540, 540, 540, 540, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 540, 540, 540, 540, 519, 540, 519, - 519, 519, 519, 542, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 540, 540, 540, 540, 540, 519, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 540, 540, 540, 540, 540, 540, 540, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 540, 540, 540, 540, 519, 540, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 543, 519, 519, 519, 519, 519, - 519, 519, 540, 540, 540, 540, 540, 519, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 540, 540, 540, 540, 540, 540, - 540, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 540, 540, 540, 540, 519, - 540, 519, 519, 544, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 540, 540, 540, 540, 540, - 519, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 540, 540, 540, 540, 540, - 540, 540, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 540, 540, 540, 540, - 519, 540, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 545, 519, - 519, 519, 519, 519, 540, 540, 540, 540, - 540, 519, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 540, 540, 540, 540, - 540, 540, 540, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 540, 540, 540, - 540, 519, 540, 519, 519, 519, 519, 541, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 540, 540, 540, - 540, 540, 519, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 540, 540, 540, - 540, 540, 540, 540, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 540, 540, - 540, 540, 519, 540, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 546, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 540, 540, - 540, 540, 540, 519, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 540, 540, - 540, 540, 540, 540, 540, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 540, - 540, 540, 540, 519, 540, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 547, 519, 519, 519, 519, 519, 519, 519, - 548, 519, 519, 519, 519, 519, 519, 540, - 540, 540, 540, 540, 519, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 540, - 540, 540, 540, 540, 540, 540, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 540, 540, 540, 540, 519, 540, 519, 519, - 519, 519, 549, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 540, 540, 540, 540, 540, 519, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 540, 540, 540, 540, 540, 540, 540, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 540, 540, 540, 540, 519, 540, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 550, 519, 519, 519, 519, 519, 519, - 519, 540, 540, 540, 540, 540, 519, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 540, 540, 540, 540, 540, 540, 540, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 540, 540, 540, 540, 519, 540, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 541, 519, 519, 519, 519, 519, - 519, 519, 540, 540, 540, 540, 540, 519, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 540, 540, 540, 540, 540, 540, - 540, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 540, 540, 540, 540, 519, - 540, 519, 519, 519, 519, 519, 519, 519, - 519, 551, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 540, 540, 540, 540, 540, - 519, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 540, 540, 540, 540, 540, - 540, 540, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 540, 540, 540, 540, - 519, 540, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 541, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 540, 540, 540, 540, - 540, 519, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 540, 540, 540, 540, - 540, 540, 540, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 540, 540, 540, - 540, 519, 540, 519, 519, 519, 519, 519, - 519, 519, 552, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 540, 540, 540, - 540, 540, 519, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 540, 540, 540, - 540, 540, 540, 540, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 540, 540, - 540, 540, 519, 540, 519, 519, 519, 519, - 519, 519, 519, 519, 553, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 540, 540, - 540, 540, 540, 519, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, 540, 540, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 540, 540, - 540, 540, 540, 540, 540, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 540, - 540, 540, 540, 519, 540, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, - 545, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 540, - 540, 540, 540, 540, 519, 555, 125, 125, - 125, 555, 125, 125, 125, 125, 556, 557, - 556, 556, 556, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 555, - 125, 125, 125, 125, 125, 556, 558, 125, - 559, 125, 560, 561, 125, 562, 125, 563, - 564, 125, 565, 566, 567, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 568, - 125, 569, 570, 571, 572, 125, 573, 574, - 573, 573, 575, 573, 573, 573, 573, 573, - 573, 573, 573, 573, 573, 573, 573, 573, - 573, 573, 573, 573, 573, 573, 573, 573, - 576, 577, 125, 578, 579, 125, 580, 581, - 582, 583, 584, 585, 554, 554, 586, 554, - 554, 554, 587, 588, 589, 554, 554, 590, - 591, 592, 593, 554, 594, 554, 595, 554, - 596, 597, 125, 578, 125, 554, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 599, - 598, 599, 599, 599, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 599, 172, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 173, 598, 598, 174, 598, 172, 598, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 598, 600, 598, 598, 554, 598, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 598, 598, 598, 598, 598, 554, 602, - 601, 601, 603, 601, 604, 606, 607, 605, - 605, 605, 605, 605, 605, 605, 605, 605, - 605, 605, 605, 605, 605, 605, 605, 605, - 605, 605, 605, 605, 605, 605, 605, 605, - 605, 605, 605, 605, 605, 605, 605, 605, - 605, 605, 605, 605, 605, 605, 605, 605, - 605, 605, 605, 605, 605, 605, 605, 605, - 605, 605, 605, 605, 605, 605, 605, 605, - 605, 605, 605, 605, 605, 605, 608, 605, - 610, 609, 611, 612, 613, 556, 614, 556, - 556, 556, 614, 614, 614, 614, 614, 614, - 614, 614, 614, 614, 614, 614, 614, 614, - 614, 614, 614, 614, 556, 614, 616, 615, - 618, 619, 618, 618, 618, 617, 617, 617, - 617, 617, 617, 617, 617, 617, 617, 617, - 617, 617, 617, 617, 617, 617, 617, 618, - 617, 125, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 125, 620, 621, 622, 623, 624, - 626, 626, 626, 626, 626, 626, 626, 626, - 626, 626, 626, 626, 626, 626, 626, 626, - 626, 626, 626, 626, 626, 626, 626, 626, - 626, 626, 626, 626, 626, 626, 626, 626, - 626, 626, 626, 626, 626, 626, 626, 626, - 626, 626, 626, 626, 626, 626, 626, 626, - 625, 625, 625, 625, 625, 625, 625, 625, - 625, 625, 626, 626, 626, 626, 626, 626, - 626, 627, 627, 627, 627, 627, 627, 627, - 627, 627, 627, 627, 627, 627, 627, 627, - 627, 627, 627, 627, 627, 627, 627, 627, - 627, 627, 627, 626, 626, 626, 626, 626, - 626, 627, 627, 627, 627, 627, 627, 627, - 627, 627, 627, 627, 627, 627, 627, 627, - 627, 627, 627, 627, 627, 627, 627, 627, - 627, 627, 627, 626, 626, 626, 626, 626, - 625, 629, 628, 628, 628, 628, 628, 628, - 628, 628, 628, 628, 628, 628, 628, 628, - 628, 628, 628, 628, 628, 628, 628, 628, - 125, 628, 630, 632, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, 631, 631, 631, 125, 631, - 125, 115, 126, 127, 126, 126, 126, 628, - 628, 628, 628, 628, 628, 628, 628, 628, - 628, 628, 628, 628, 628, 628, 628, 628, - 628, 126, 628, 628, 128, 628, 628, 628, - 628, 628, 628, 628, 628, 628, 628, 628, - 628, 129, 129, 129, 129, 129, 129, 129, - 129, 129, 129, 628, 628, 628, 125, 628, - 628, 628, 628, 628, 628, 628, 628, 628, - 628, 628, 628, 628, 628, 628, 628, 628, - 628, 628, 628, 628, 628, 628, 628, 628, - 628, 628, 628, 628, 628, 130, 628, 143, - 144, 143, 143, 143, 142, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 143, 142, - 142, 145, 142, 142, 142, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 142, 142, 142, 142, 142, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 142, - 142, 142, 147, 142, 126, 127, 126, 126, - 126, 628, 628, 628, 628, 628, 628, 628, - 628, 628, 628, 628, 628, 628, 628, 628, - 628, 628, 628, 126, 628, 628, 128, 628, - 628, 628, 628, 628, 628, 628, 628, 628, - 628, 628, 628, 129, 129, 129, 129, 129, - 129, 129, 129, 129, 129, 628, 628, 628, - 125, 125, 628, 628, 628, 628, 628, 628, - 628, 628, 628, 628, 628, 628, 628, 628, - 628, 628, 628, 628, 628, 628, 628, 628, - 628, 628, 628, 628, 628, 628, 628, 130, - 628, 634, 620, 636, 635, 638, 637, 620, - 639, 639, 639, 620, 639, 639, 639, 639, - 639, 639, 639, 639, 639, 639, 639, 639, - 639, 639, 639, 639, 639, 639, 639, 639, - 639, 620, 639, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 641, 642, 620, 643, - 151, 644, 642, 620, 620, 645, 646, 620, - 646, 620, 151, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 647, 620, 648, - 649, 650, 620, 651, 640, 640, 640, 640, - 640, 640, 640, 640, 640, 640, 640, 640, - 640, 640, 640, 640, 640, 640, 640, 640, - 640, 640, 640, 640, 640, 640, 652, 620, - 620, 151, 640, 151, 640, 640, 640, 640, - 640, 640, 640, 640, 640, 640, 640, 640, - 640, 640, 640, 640, 640, 640, 640, 640, - 640, 640, 640, 640, 640, 640, 620, 653, - 620, 654, 620, 640, 655, 655, 655, 655, - 655, 655, 655, 655, 655, 655, 655, 655, - 655, 655, 655, 655, 655, 655, 655, 655, - 655, 655, 655, 655, 655, 655, 655, 655, - 655, 655, 655, 655, 655, 656, 655, 655, - 655, 655, 655, 655, 655, 655, 655, 655, - 655, 655, 655, 655, 640, 640, 640, 640, - 640, 640, 640, 640, 640, 640, 655, 655, - 655, 657, 655, 656, 655, 640, 640, 640, - 640, 640, 640, 640, 640, 640, 640, 640, - 640, 640, 640, 640, 640, 640, 640, 640, - 640, 640, 640, 640, 640, 640, 640, 655, - 655, 655, 655, 640, 655, 640, 640, 640, - 640, 640, 640, 640, 640, 640, 640, 640, - 640, 640, 640, 640, 640, 640, 640, 640, - 640, 640, 640, 640, 640, 640, 640, 655, - 655, 655, 655, 655, 640, 659, 658, 660, - 662, 663, 661, 661, 661, 661, 661, 661, - 661, 661, 661, 661, 661, 661, 661, 661, - 661, 661, 661, 661, 661, 661, 661, 661, - 661, 661, 661, 661, 661, 661, 661, 661, - 661, 661, 661, 661, 661, 661, 661, 661, - 661, 661, 661, 661, 661, 661, 661, 661, - 661, 661, 661, 661, 661, 661, 661, 661, - 661, 661, 661, 661, 661, 661, 661, 661, - 661, 664, 661, 666, 667, 665, 668, 669, - 670, 671, 151, 655, 655, 672, 655, 655, - 655, 655, 655, 655, 655, 655, 655, 655, - 655, 655, 655, 655, 655, 655, 655, 655, - 655, 655, 655, 655, 655, 655, 655, 655, - 655, 655, 655, 655, 655, 655, 655, 655, - 655, 655, 655, 655, 655, 655, 655, 655, - 655, 655, 655, 655, 655, 655, 655, 655, - 655, 655, 655, 655, 655, 655, 655, 655, - 655, 655, 655, 151, 655, 655, 655, 655, - 655, 655, 655, 655, 655, 655, 655, 655, - 655, 655, 655, 655, 655, 655, 655, 655, - 655, 655, 655, 655, 655, 655, 655, 655, - 655, 655, 655, 655, 655, 655, 655, 655, - 655, 655, 655, 655, 655, 655, 655, 655, - 655, 655, 655, 655, 655, 150, 150, 150, - 150, 150, 150, 150, 150, 150, 150, 655, - 655, 655, 655, 655, 655, 655, 150, 150, - 150, 150, 150, 150, 150, 150, 150, 150, - 150, 150, 150, 150, 150, 150, 150, 150, - 150, 150, 150, 150, 150, 150, 150, 150, - 655, 655, 655, 655, 150, 655, 150, 150, - 150, 150, 150, 150, 150, 150, 150, 150, - 150, 150, 150, 150, 150, 150, 150, 150, - 150, 150, 150, 150, 150, 150, 150, 150, - 655, 655, 655, 655, 655, 150, 153, 153, - 153, 153, 153, 153, 153, 153, 153, 153, - 655, 673, 655, 151, 655, 151, 655, 151, - 674, 655, 151, 655, 151, 655, 151, 151, - 655, 675, 675, 675, 675, 675, 675, 675, - 675, 675, 675, 675, 675, 675, 675, 675, - 675, 675, 675, 675, 675, 675, 675, 675, - 675, 675, 675, 675, 675, 675, 675, 675, - 675, 675, 675, 675, 675, 675, 675, 675, - 675, 675, 675, 675, 675, 675, 675, 675, - 675, 677, 677, 677, 677, 677, 677, 677, - 677, 677, 677, 675, 675, 675, 675, 675, - 675, 678, 676, 676, 676, 676, 676, 676, - 676, 676, 676, 676, 676, 676, 676, 676, - 676, 676, 676, 676, 676, 676, 676, 676, - 676, 676, 676, 676, 675, 675, 675, 675, - 676, 675, 676, 676, 676, 676, 676, 676, - 676, 676, 676, 676, 676, 676, 676, 676, - 676, 676, 676, 676, 676, 676, 676, 676, - 676, 676, 676, 676, 675, 675, 675, 675, - 675, 676, 680, 680, 680, 680, 680, 680, - 680, 680, 680, 680, 679, 681, 681, 681, - 681, 681, 681, 681, 681, 681, 681, 681, - 681, 681, 681, 681, 681, 681, 681, 681, - 681, 681, 681, 681, 681, 681, 681, 681, - 681, 681, 681, 681, 681, 681, 681, 681, - 681, 681, 681, 681, 681, 681, 681, 681, - 681, 681, 681, 681, 681, 683, 683, 683, - 683, 683, 683, 683, 683, 683, 683, 681, - 681, 681, 681, 681, 681, 681, 682, 682, - 682, 682, 682, 682, 682, 682, 682, 682, - 682, 682, 682, 682, 682, 682, 682, 682, - 682, 682, 682, 682, 682, 682, 682, 682, - 681, 681, 681, 681, 682, 681, 682, 682, - 682, 682, 682, 682, 682, 682, 682, 682, - 682, 682, 682, 682, 682, 682, 682, 682, - 682, 682, 682, 682, 682, 682, 682, 682, - 681, 681, 681, 681, 681, 682, 673, 655, - 672, 655, 684, 685, 620, 686, 166, 156, - 156, 156, 156, 156, 156, 156, 156, 156, - 156, 156, 156, 156, 156, 156, 156, 156, - 156, 156, 156, 156, 156, 156, 167, 156, - 168, 157, 157, 157, 157, 157, 157, 157, - 157, 157, 157, 157, 157, 157, 157, 157, - 157, 157, 157, 157, 157, 157, 157, 157, - 157, 157, 157, 157, 157, 167, 157, 167, - 170, 125, 620, 578, 125, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 125, 620, 125, 629, - 620, 690, 689, 689, 689, 690, 689, 689, - 689, 689, 689, 689, 689, 689, 689, 689, - 689, 689, 689, 689, 689, 689, 689, 689, - 689, 689, 689, 690, 689, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 172, 115, - 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 173, - 115, 115, 174, 115, 172, 115, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 171, - 115, 115, 115, 115, 171, 115, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 171, - 115, 115, 115, 115, 115, 171, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 172, - 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 171, - 173, 620, 620, 174, 620, 172, 620, 171, - 171, 171, 171, 691, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 171, - 171, 620, 620, 620, 620, 171, 620, 171, - 171, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 171, - 171, 620, 620, 620, 620, 620, 171, 620, - 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, - 172, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 171, - 171, 171, 171, 171, 171, 171, 171, 171, - 171, 173, 620, 620, 174, 620, 172, 620, - 171, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 692, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 620, 620, 620, 620, 171, 620, - 171, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 171, 171, 171, 171, 171, 171, - 171, 171, 620, 620, 620, 620, 620, 171, - 693, 694, 620, 615, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 599, 598, 599, - 599, 599, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 599, 172, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 173, 598, - 598, 174, 598, 172, 598, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 598, - 600, 598, 598, 695, 598, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 598, - 598, 598, 598, 598, 554, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 599, 598, - 599, 599, 599, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 599, 172, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 173, - 598, 598, 174, 598, 172, 598, 554, 554, - 554, 554, 696, 697, 554, 554, 554, 554, - 554, 698, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 598, 600, 598, 598, 554, 598, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 598, 598, 598, 598, 598, 554, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 599, - 598, 599, 599, 599, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 599, 172, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 173, 598, 598, 174, 598, 172, 598, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 699, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 598, 600, 598, 598, 554, 598, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 598, 598, 598, 598, 598, 554, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 599, 598, 599, 599, 599, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 599, - 172, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 173, 598, 598, 174, 598, 172, 598, - 554, 554, 700, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 598, 600, 598, 598, 554, 598, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 598, 598, 598, 598, 598, 554, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 599, 598, 599, 599, 599, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 599, 172, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 173, 598, 598, 174, 598, 172, - 598, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 701, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 598, 600, 598, 598, 554, - 598, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 598, 598, 598, 598, 598, - 554, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 599, 598, 599, 599, 599, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 599, 172, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 173, 598, 598, 174, 598, - 172, 598, 554, 554, 554, 702, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 598, 600, 598, 598, - 554, 598, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 598, 598, 598, 598, - 598, 554, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 599, 598, 599, 599, 599, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 599, 172, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 173, 598, 598, 174, - 598, 172, 598, 554, 554, 554, 554, 554, - 554, 554, 554, 703, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 598, 600, 598, - 598, 554, 598, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 598, 598, 598, - 598, 598, 554, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 599, 598, 599, 599, - 599, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 599, 172, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 173, 598, 598, - 174, 598, 172, 598, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 704, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 598, 600, - 598, 598, 554, 598, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 598, 598, - 598, 598, 598, 554, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 599, 598, 599, - 599, 599, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 599, 172, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 173, 598, - 598, 174, 598, 172, 598, 554, 554, 554, - 554, 554, 554, 705, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 598, - 600, 598, 598, 554, 598, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 598, - 598, 598, 598, 598, 554, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 599, 598, - 599, 599, 599, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 599, 172, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 173, - 598, 598, 174, 598, 172, 598, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 598, 600, 598, 598, 706, 598, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 598, 598, 598, 598, 598, 554, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 599, - 598, 599, 599, 599, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 599, 172, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 173, 598, 598, 174, 598, 172, 598, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 598, 600, 598, 598, 707, 598, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 598, 598, 598, 598, 598, 554, 115, - 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, - 172, 115, 115, 115, 115, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 173, 115, 115, 174, 115, 172, 115, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 115, 115, 115, 115, 554, 115, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 115, 115, 115, 115, 115, 554, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 599, 598, 599, 599, 599, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 599, 172, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 173, 598, 598, 174, 598, 172, - 598, 554, 554, 554, 554, 554, 554, 554, - 554, 708, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 598, 600, 598, 598, 554, - 598, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 598, 598, 598, 598, 598, - 554, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 599, 598, 599, 599, 599, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 599, 172, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 173, 598, 598, 174, 598, - 172, 598, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 709, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 598, 600, 598, 598, - 554, 598, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 598, 598, 598, 598, - 598, 554, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 599, 598, 599, 599, 599, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 599, 172, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 173, 598, 598, 174, - 598, 172, 598, 554, 554, 554, 554, 705, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 598, 600, 598, - 598, 554, 598, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 598, 598, 598, - 598, 598, 554, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 599, 598, 599, 599, - 599, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 599, 172, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 173, 598, 598, - 174, 598, 172, 598, 554, 554, 554, 554, - 554, 554, 554, 554, 710, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 598, 600, - 598, 598, 554, 598, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 598, 598, - 598, 598, 598, 554, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 599, 598, 599, - 599, 599, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 599, 172, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 173, 598, - 598, 174, 598, 172, 598, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 709, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 598, - 600, 598, 598, 554, 598, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 598, - 598, 598, 598, 598, 554, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 599, 598, - 599, 599, 599, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 599, 172, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 173, - 598, 598, 174, 598, 172, 598, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 598, 600, 598, 598, 554, 598, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 711, 554, 712, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 598, 598, 598, 598, 598, 554, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 599, - 598, 599, 599, 599, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 599, 172, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 173, 598, 598, 174, 598, 172, 598, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 598, 600, 598, 598, 554, 598, 554, - 554, 554, 554, 554, 554, 554, 554, 713, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 598, 598, 598, 598, 598, 554, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 599, 598, 599, 599, 599, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 599, - 172, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 173, 598, 598, 174, 598, 172, 598, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 598, 600, 598, 598, 554, 598, - 714, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 598, 598, 598, 598, 598, 554, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 599, 598, 599, 599, 599, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 599, 172, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 173, 598, 598, 174, 598, 172, - 598, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 598, 600, 598, 598, 554, - 598, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 707, 554, 554, 554, 554, - 554, 554, 554, 598, 598, 598, 598, 598, - 554, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 599, 598, 599, 599, 599, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 599, 172, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 173, 598, 598, 174, 598, - 172, 598, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 598, 600, 598, 598, - 554, 598, 554, 554, 554, 707, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 598, 598, 598, 598, - 598, 554, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 599, 598, 599, 599, 599, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 599, 172, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 173, 598, 598, 174, - 598, 172, 598, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 598, 600, 598, - 598, 554, 598, 554, 554, 554, 554, 715, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 716, 554, 554, 554, - 554, 554, 554, 554, 554, 598, 598, 598, - 598, 598, 554, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 599, 598, 599, 599, - 599, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 599, 172, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 173, 598, 598, - 174, 598, 172, 598, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 598, 600, - 598, 598, 554, 598, 554, 554, 554, 554, - 554, 554, 717, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 598, 598, - 598, 598, 598, 554, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 599, 598, 599, - 599, 599, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 599, 172, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 173, 598, - 598, 174, 598, 172, 598, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 598, - 600, 598, 598, 554, 598, 554, 554, 554, - 554, 554, 554, 554, 554, 718, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 598, - 598, 598, 598, 598, 554, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 599, 598, - 599, 599, 599, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 599, 172, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 173, - 598, 598, 174, 598, 172, 598, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 598, 600, 598, 598, 554, 598, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 707, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 598, 598, 598, 598, 598, 554, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 599, - 598, 599, 599, 599, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 599, 172, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 173, 598, 598, 174, 598, 172, 598, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 598, 600, 598, 598, 554, 598, 554, - 554, 554, 554, 719, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 598, 598, 598, 598, 598, 554, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 599, 598, 599, 599, 599, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 599, - 172, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 173, 598, 598, 174, 598, 172, 598, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 598, 600, 598, 598, 554, 598, - 720, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 598, 598, 598, 598, 598, 554, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 599, 598, 599, 599, 599, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 599, 172, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 173, 598, 598, 174, 598, 172, - 598, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 598, 600, 598, 598, 554, - 598, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 707, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 598, 598, 598, 598, 598, - 554, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 599, 598, 599, 599, 599, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 599, 172, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 173, 598, 598, 174, 598, - 172, 598, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 598, 600, 598, 598, - 554, 598, 721, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 722, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 598, 598, 598, 598, - 598, 554, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 599, 598, 599, 599, 599, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 599, 172, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 173, 598, 598, 174, - 598, 172, 598, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 598, 600, 598, - 598, 554, 598, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 723, 554, 554, - 554, 554, 554, 554, 554, 598, 598, 598, - 598, 598, 554, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 599, 598, 599, 599, - 599, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 599, 172, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 173, 598, 598, - 174, 598, 172, 598, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 598, 600, - 598, 598, 554, 598, 554, 554, 554, 554, - 707, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 598, 598, - 598, 598, 598, 554, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 599, 598, 599, - 599, 599, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 599, 172, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 173, 598, - 598, 174, 598, 172, 598, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 598, - 600, 598, 598, 554, 598, 724, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 598, - 598, 598, 598, 598, 554, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 599, 598, - 599, 599, 599, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 599, 172, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 173, - 598, 598, 174, 598, 172, 598, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 598, 600, 598, 598, 554, 598, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 714, 554, 554, 554, 554, 554, 554, 554, - 598, 598, 598, 598, 598, 554, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 599, - 598, 599, 599, 599, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 599, 172, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 173, 598, 598, 174, 598, 172, 598, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 598, 600, 598, 598, 554, 598, 554, - 554, 554, 554, 725, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 707, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 598, 598, 598, 598, 598, 554, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 599, 598, 599, 599, 599, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 599, - 172, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 173, 598, 598, 174, 598, 172, 598, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 598, 600, 598, 598, 554, 598, - 554, 554, 554, 554, 554, 707, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 598, 598, 598, 598, 598, 554, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 599, 598, 599, 599, 599, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 599, 172, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 173, 598, 598, 174, 598, 172, - 598, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 598, 600, 598, 598, 554, - 598, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 726, 554, 727, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 598, 598, 598, 598, 598, - 554, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 599, 598, 599, 599, 599, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 599, 172, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 173, 598, 598, 174, 598, - 172, 598, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 598, 600, 598, 598, - 554, 598, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 728, 554, 554, 554, - 554, 554, 554, 554, 598, 598, 598, 598, - 598, 554, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 599, 598, 599, 599, 599, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 599, 172, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 173, 598, 598, 174, - 598, 172, 598, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 598, 600, 598, - 598, 554, 598, 554, 554, 554, 554, 707, - 554, 554, 554, 725, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 598, 598, 598, - 598, 598, 554, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 599, 598, 599, 599, - 599, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 599, 172, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 173, 598, 598, - 174, 598, 172, 598, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 598, 600, - 598, 598, 554, 598, 554, 554, 554, 707, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 729, 554, - 554, 554, 554, 554, 554, 554, 598, 598, - 598, 598, 598, 554, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 599, 598, 599, - 599, 599, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 599, 172, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 173, 598, - 598, 174, 598, 172, 598, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 598, - 600, 598, 598, 554, 598, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 730, 554, 554, 554, 554, 554, 598, - 598, 598, 598, 598, 554, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 599, 598, - 599, 599, 599, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 599, 172, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 173, - 598, 598, 174, 598, 172, 598, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 598, 600, 598, 598, 554, 598, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 723, - 554, 554, 554, 554, 554, 554, 554, 554, - 598, 598, 598, 598, 598, 554, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 599, - 598, 599, 599, 599, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 599, 172, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 173, 598, 598, 174, 598, 172, 598, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 598, 600, 598, 598, 554, 598, 731, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 589, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 598, 598, 598, 598, 598, 554, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 599, 598, 599, 599, 599, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 599, - 172, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 173, 598, 598, 174, 598, 172, 598, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 598, 600, 598, 598, 554, 598, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 721, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 598, 598, 598, 598, 598, 554, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 599, 598, 599, 599, 599, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 599, 172, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 173, 598, 598, 174, 598, 172, - 598, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 598, 600, 598, 598, 554, - 598, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 707, 554, 554, 554, 554, 554, - 554, 554, 554, 598, 598, 598, 598, 598, - 554, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 599, 598, 599, 599, 599, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 599, 172, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 173, 598, 598, 174, 598, - 172, 598, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 598, 600, 598, 598, - 554, 598, 554, 554, 554, 554, 554, 732, - 554, 554, 554, 554, 554, 554, 554, 707, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 598, 598, 598, 598, - 598, 554, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 599, 598, 599, 599, 599, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 599, 172, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 173, 598, 598, 174, - 598, 172, 598, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 598, 600, 598, - 598, 554, 598, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 733, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 598, 598, 598, - 598, 598, 554, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 599, 598, 599, 599, - 599, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 599, 172, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 173, 598, 598, - 174, 598, 172, 598, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 598, 600, - 598, 598, 554, 598, 554, 554, 554, 734, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 598, 598, - 598, 598, 598, 554, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 599, 598, 599, - 599, 599, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 599, 172, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 173, 598, - 598, 174, 598, 172, 598, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 598, - 600, 598, 598, 554, 598, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 735, 554, 554, 554, 554, 554, 598, - 598, 598, 598, 598, 554, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 599, 598, - 599, 599, 599, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 599, 172, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 173, - 598, 598, 174, 598, 172, 598, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 598, 600, 598, 598, 554, 598, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 723, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 598, 598, 598, 598, 598, 554, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 599, - 598, 599, 599, 599, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 599, 172, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 173, 598, 598, 174, 598, 172, 598, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 598, 600, 598, 598, 554, 598, 554, - 554, 554, 554, 736, 554, 554, 554, 737, - 554, 554, 554, 554, 554, 738, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 598, 598, 598, 598, 598, 554, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 599, 598, 599, 599, 599, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 599, - 172, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 173, 598, 598, 174, 598, 172, 598, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 598, 600, 598, 598, 554, 598, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 738, - 554, 554, 598, 598, 598, 598, 598, 554, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 599, 598, 599, 599, 599, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 599, 172, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 173, 598, 598, 174, 598, 172, - 598, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 598, 600, 598, 598, 554, - 598, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 707, 554, 554, 554, - 554, 554, 554, 598, 598, 598, 598, 598, - 554, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 599, 598, 599, 599, 599, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 599, 172, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 173, 598, 598, 174, 598, - 172, 598, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 598, 600, 598, 598, - 554, 598, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 707, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 598, 598, 598, 598, - 598, 554, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 599, 598, 599, 599, 599, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 599, 172, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 173, 598, 598, 174, - 598, 172, 598, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 598, 600, 598, - 598, 554, 598, 554, 554, 554, 554, 739, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 598, 598, 598, - 598, 598, 554, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 599, 598, 599, 599, - 599, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 599, 172, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 173, 598, 598, - 174, 598, 172, 598, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 598, 600, - 598, 598, 554, 598, 554, 554, 554, 740, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 741, 742, - 554, 554, 554, 554, 554, 554, 598, 598, - 598, 598, 598, 554, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 599, 598, 599, - 599, 599, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 599, 172, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 173, 598, - 598, 174, 598, 172, 598, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 598, - 600, 598, 598, 554, 598, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 707, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 598, - 598, 598, 598, 598, 554, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 599, 598, - 599, 599, 599, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 599, 172, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 173, - 598, 598, 174, 598, 172, 598, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 598, 600, 598, 598, 554, 598, 554, 554, - 743, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 598, 598, 598, 598, 598, 554, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 599, - 598, 599, 599, 599, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 599, 172, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 173, 598, 598, 174, 598, 172, 598, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 598, 600, 598, 598, 554, 598, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 744, 554, 554, 554, 554, - 554, 598, 598, 598, 598, 598, 554, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 599, 598, 599, 599, 599, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 599, - 172, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 173, 598, 598, 174, 598, 172, 598, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 598, 600, 598, 598, 554, 598, - 554, 554, 554, 554, 745, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 598, 598, 598, 598, 598, 554, - 746, 746, 746, 746, 746, 746, 746, 746, - 746, 746, 746, 746, 746, 746, 746, 746, - 746, 746, 746, 746, 746, 746, 746, 746, - 746, 746, 746, 746, 746, 746, 746, 746, - 746, 748, 746, 746, 746, 746, 746, 746, - 746, 746, 746, 746, 746, 746, 746, 746, - 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 749, 746, 746, 750, 746, 748, - 746, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 746, 746, 746, 746, 747, - 746, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 747, 747, 747, 747, 747, - 747, 747, 747, 746, 746, 746, 746, 746, - 747, 606, 751, 605, 605, 605, 605, 605, - 605, 605, 605, 605, 605, 605, 605, 605, - 605, 605, 605, 605, 605, 605, 605, 605, - 605, 605, 605, 605, 605, 605, 605, 605, - 605, 605, 605, 605, 605, 605, 605, 605, - 605, 605, 605, 605, 605, 605, 605, 605, - 605, 605, 605, 605, 605, 605, 605, 605, - 605, 605, 605, 605, 605, 605, 605, 605, - 605, 605, 608, 605, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 599, 598, 599, - 599, 599, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 599, 172, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 173, 598, - 598, 174, 598, 172, 598, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 598, - 600, 598, 598, 554, 598, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 752, 554, - 554, 753, 554, 554, 554, 554, 554, 598, - 598, 598, 598, 598, 554, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 599, 598, - 599, 599, 599, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 599, 172, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 173, - 598, 598, 174, 598, 172, 598, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 598, 600, 598, 598, 554, 598, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 707, 554, - 598, 598, 598, 598, 598, 554, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 599, - 598, 599, 599, 599, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 599, 172, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 173, 598, 598, 174, 598, 172, 598, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 598, 600, 598, 598, 554, 598, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 718, 554, 554, 554, 554, 554, 554, 554, - 554, 598, 598, 598, 598, 598, 554, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 599, 598, 599, 599, 599, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 599, - 172, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 173, 598, 598, 174, 598, 172, 598, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 598, 600, 598, 598, 554, 598, - 554, 554, 554, 554, 754, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 755, 554, 554, 554, - 554, 554, 598, 598, 598, 598, 598, 554, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 599, 598, 599, 599, 599, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 599, 172, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 173, 598, 598, 174, 598, 172, - 598, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 598, 600, 598, 598, 554, - 598, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 725, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 598, 598, 598, 598, 598, - 554, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 599, 598, 599, 599, 599, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 599, 172, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 173, 598, 598, 174, 598, - 172, 598, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 598, 600, 598, 598, - 554, 598, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 756, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 598, 598, 598, 598, - 598, 554, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 599, 598, 599, 599, 599, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 599, 172, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 173, 598, 598, 174, - 598, 172, 598, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 598, 600, 598, - 598, 554, 598, 554, 554, 554, 554, 589, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 598, 598, 598, - 598, 598, 554, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 599, 598, 599, 599, - 599, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 599, 172, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 173, 598, 598, - 174, 598, 172, 598, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 598, 600, - 598, 598, 554, 598, 554, 554, 554, 554, - 554, 554, 554, 757, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 758, 554, 554, - 554, 554, 554, 554, 554, 554, 598, 598, - 598, 598, 598, 554, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 599, 598, 599, - 599, 599, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 599, 172, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 173, 598, - 598, 174, 598, 172, 598, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 598, - 600, 598, 598, 554, 598, 554, 554, 554, - 554, 718, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 598, - 598, 598, 598, 598, 554, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 599, 598, - 599, 599, 599, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 599, 172, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 173, - 598, 598, 174, 598, 172, 598, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 598, 600, 598, 598, 554, 598, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 723, 554, 554, 554, 554, 554, - 598, 598, 598, 598, 598, 554, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 599, - 598, 599, 599, 599, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 599, 172, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 173, 598, 598, 174, 598, 172, 598, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 598, 600, 598, 598, 554, 598, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 759, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 598, 598, 598, 598, 598, 554, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 599, 598, 599, 599, 599, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 599, - 172, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 173, 598, 598, 174, 598, 172, 598, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 598, 600, 598, 598, 554, 598, - 554, 554, 554, 760, 554, 554, 554, 554, - 554, 554, 554, 761, 554, 554, 554, 554, - 554, 554, 554, 762, 554, 554, 554, 554, - 554, 554, 598, 598, 598, 598, 598, 554, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 599, 598, 599, 599, 599, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 599, 172, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 173, 598, 598, 174, 598, 172, - 598, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 598, 600, 598, 598, 554, - 598, 554, 554, 554, 554, 725, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 598, 598, 598, 598, 598, - 554, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 599, 598, 599, 599, 599, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 599, 172, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 173, 598, 598, 174, 598, - 172, 598, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 598, 600, 598, 598, - 554, 598, 554, 554, 554, 554, 763, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 598, 598, 598, 598, - 598, 554, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 599, 598, 599, 599, 599, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 599, 172, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 173, 598, 598, 174, - 598, 172, 598, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 598, 600, 598, - 598, 554, 598, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 764, 554, 554, - 554, 554, 554, 554, 554, 598, 598, 598, - 598, 598, 554, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 599, 598, 599, 599, - 599, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 599, 172, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 173, 598, 598, - 174, 598, 172, 598, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 598, 600, - 598, 598, 554, 598, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 732, 554, - 554, 554, 554, 554, 554, 554, 598, 598, - 598, 598, 598, 554, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 599, 598, 599, - 599, 599, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 599, 172, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 173, 598, - 598, 174, 598, 172, 598, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 598, - 600, 598, 598, 554, 598, 554, 554, 554, - 554, 554, 554, 554, 554, 765, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 598, - 598, 598, 598, 598, 554, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 599, 598, - 599, 599, 599, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 599, 172, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 173, - 598, 598, 174, 598, 172, 598, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 598, 600, 598, 598, 554, 598, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 732, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 598, 598, 598, 598, 598, 554, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 599, - 598, 599, 599, 599, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 599, 172, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 173, 598, 598, 174, 598, 172, 598, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 598, 600, 598, 598, 554, 598, 554, - 554, 554, 554, 554, 554, 554, 766, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 598, 598, 598, 598, 598, 554, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 599, 598, 599, 599, 599, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 599, - 172, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 173, 598, 598, 174, 598, 172, 598, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 598, 600, 598, 598, 554, 598, - 554, 554, 554, 554, 718, 554, 554, 554, - 767, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 598, 598, 598, 598, 598, 554, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 599, 598, 599, 599, 599, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 599, 172, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 173, 598, 598, 174, 598, 172, - 598, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 598, 600, 598, 598, 554, - 598, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 768, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 598, 598, 598, 598, 598, - 554, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 599, 598, 599, 599, 599, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 599, 172, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 173, 598, 598, 174, 598, - 172, 598, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 598, 600, 598, 598, - 554, 598, 554, 554, 554, 554, 732, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 598, 598, 598, 598, - 598, 554, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 599, 598, 599, 599, 599, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 599, 172, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 173, 598, 598, 174, - 598, 172, 598, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 598, 600, 598, - 598, 554, 598, 554, 554, 554, 554, 554, - 554, 554, 554, 769, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 598, 598, 598, - 598, 598, 554, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 599, 598, 599, 599, - 599, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 599, 172, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 173, 598, 598, - 174, 598, 172, 598, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 598, 600, - 598, 598, 554, 598, 554, 554, 554, 554, - 770, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 598, 598, - 598, 598, 598, 554, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 599, 598, 599, - 599, 599, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 599, 172, 598, 598, - 598, 598, 598, 598, 598, 598, 598, 598, - 598, 598, 598, 598, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 173, 598, - 598, 174, 598, 172, 598, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 598, - 600, 598, 598, 554, 598, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, - 712, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 598, - 598, 598, 598, 598, 554, 771, 125, 620, - 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 772, 620, 774, - 773, 773, 773, 774, 773, 773, 773, 773, - 775, 776, 775, 775, 775, 773, 773, 773, - 773, 773, 773, 773, 773, 773, 773, 773, - 773, 774, 773, 773, 773, 773, 773, 775, - 773, 773, 777, 773, 773, 773, 773, 773, - 773, 773, 773, 773, 773, 773, 773, 773, - 773, 773, 773, 773, 773, 773, 773, 773, - 773, 773, 773, 773, 773, 773, 773, 773, - 773, 773, 773, 773, 773, 773, 773, 773, - 773, 773, 773, 773, 773, 773, 773, 773, - 773, 773, 773, 773, 773, 773, 773, 773, - 773, 773, 773, 778, 773, 775, 779, 775, - 775, 775, 779, 779, 779, 779, 779, 779, - 779, 779, 779, 779, 779, 779, 779, 779, - 779, 779, 779, 779, 775, 779, 780, 781, - 782, 783, 784, 786, 785, 787, 789, 790, - 790, 790, 789, 790, 790, 790, 790, 791, - 792, 791, 791, 791, 790, 790, 790, 790, - 790, 790, 790, 790, 790, 790, 790, 790, - 789, 790, 790, 790, 790, 790, 791, 790, - 793, 794, 790, 790, 790, 793, 790, 790, - 790, 790, 790, 790, 790, 790, 790, 790, - 790, 790, 790, 790, 790, 790, 790, 790, - 790, 790, 790, 790, 790, 790, 790, 788, - 788, 788, 788, 788, 788, 788, 788, 788, - 788, 788, 788, 788, 788, 788, 788, 788, - 788, 788, 788, 788, 788, 788, 788, 788, - 788, 790, 795, 790, 790, 788, 790, 788, - 788, 788, 788, 788, 788, 788, 788, 788, - 788, 788, 788, 788, 788, 788, 788, 788, - 788, 788, 788, 788, 788, 788, 788, 788, - 788, 790, 790, 790, 790, 790, 788, 796, - 796, 796, 796, 796, 796, 796, 796, 796, - 796, 796, 796, 796, 796, 796, 796, 796, - 796, 796, 796, 796, 796, 796, 796, 796, - 796, 796, 796, 796, 796, 796, 796, 796, - 180, 796, 796, 796, 796, 796, 796, 796, - 796, 796, 796, 796, 796, 796, 796, 179, - 179, 179, 179, 179, 179, 179, 179, 179, - 179, 181, 796, 796, 796, 796, 180, 796, - 179, 179, 179, 179, 179, 179, 179, 179, - 179, 179, 179, 179, 179, 179, 179, 179, - 179, 179, 179, 179, 179, 179, 179, 179, - 179, 179, 796, 796, 796, 796, 179, 796, - 179, 179, 179, 179, 179, 179, 179, 179, - 179, 179, 179, 179, 179, 179, 179, 179, - 179, 179, 179, 179, 179, 179, 179, 179, - 179, 179, 796, 796, 796, 796, 796, 179, - 791, 797, 791, 791, 791, 797, 797, 797, - 797, 797, 797, 797, 797, 797, 797, 797, - 797, 797, 797, 797, 797, 797, 797, 791, - 797, 798, 799, 800, 801, 802, 803, 796, - 804, 806, 807, 807, 807, 806, 807, 807, - 807, 807, 808, 809, 808, 808, 808, 807, - 807, 807, 807, 807, 807, 807, 807, 807, - 807, 807, 807, 806, 807, 807, 807, 807, - 807, 808, 810, 811, 812, 813, 814, 815, - 811, 816, 817, 818, 814, 819, 820, 821, - 814, 822, 823, 823, 823, 823, 823, 823, - 823, 823, 823, 824, 825, 826, 827, 828, - 829, 830, 831, 832, 831, 831, 833, 831, - 831, 831, 831, 831, 831, 831, 831, 831, - 831, 831, 831, 831, 831, 831, 831, 831, - 831, 831, 831, 831, 834, 835, 836, 814, - 837, 811, 838, 839, 840, 841, 842, 843, - 805, 805, 844, 805, 805, 805, 845, 846, - 847, 805, 805, 848, 849, 850, 851, 805, - 852, 805, 853, 805, 854, 855, 856, 857, - 807, 805, 189, 189, 189, 189, 189, 189, - 189, 189, 189, 189, 189, 189, 189, 189, - 189, 189, 189, 189, 189, 189, 189, 189, - 189, 189, 189, 189, 189, 189, 189, 189, - 189, 189, 189, 858, 189, 189, 189, 189, - 189, 189, 189, 189, 189, 189, 189, 189, - 189, 189, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 189, 189, 189, 189, - 189, 858, 189, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 189, 189, 189, - 189, 805, 189, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 189, 189, 189, - 189, 189, 805, 860, 859, 861, 808, 862, - 808, 808, 808, 862, 862, 862, 862, 862, - 862, 862, 862, 862, 862, 862, 862, 862, - 862, 862, 862, 862, 862, 808, 862, 863, - 865, 864, 864, 864, 864, 864, 864, 864, - 864, 864, 864, 864, 864, 864, 864, 864, - 864, 864, 864, 864, 864, 864, 864, 864, - 864, 864, 864, 864, 864, 864, 864, 864, - 864, 864, 864, 864, 864, 864, 864, 864, - 864, 864, 864, 864, 864, 864, 864, 864, - 864, 864, 864, 864, 864, 864, 864, 864, - 864, 864, 864, 864, 864, 864, 864, 864, - 864, 865, 864, 866, 867, 868, 869, 870, - 870, 870, 870, 870, 870, 870, 870, 870, - 870, 870, 870, 870, 870, 870, 870, 870, - 870, 870, 870, 870, 870, 870, 870, 870, - 870, 870, 870, 870, 870, 870, 870, 870, - 184, 184, 870, 184, 870, 184, 184, 870, - 870, 184, 184, 184, 871, 184, 184, 872, - 872, 872, 872, 872, 872, 872, 872, 872, - 872, 184, 184, 184, 184, 184, 184, 184, - 201, 201, 201, 201, 201, 201, 201, 201, - 201, 201, 201, 201, 201, 201, 201, 201, - 201, 201, 201, 201, 201, 201, 201, 201, - 201, 201, 870, 184, 870, 870, 201, 184, - 201, 201, 201, 201, 201, 201, 201, 201, - 201, 201, 201, 201, 201, 201, 201, 201, - 201, 201, 201, 201, 201, 201, 201, 201, - 201, 201, 870, 870, 870, 184, 870, 201, - 873, 873, 873, 873, 873, 873, 873, 873, - 873, 873, 873, 873, 873, 873, 873, 873, - 873, 873, 873, 873, 873, 873, 873, 873, - 873, 873, 873, 873, 873, 873, 873, 873, - 873, 873, 873, 873, 873, 873, 873, 873, - 873, 873, 873, 873, 873, 873, 873, 873, - 201, 201, 201, 201, 201, 201, 201, 201, - 201, 201, 873, 873, 873, 873, 873, 873, - 873, 201, 201, 201, 201, 201, 201, 201, - 201, 201, 201, 201, 201, 201, 201, 201, - 201, 201, 201, 201, 201, 201, 201, 201, - 201, 201, 201, 873, 873, 873, 873, 201, - 873, 201, 201, 201, 201, 201, 201, 201, - 201, 201, 201, 201, 201, 201, 201, 201, - 201, 201, 201, 201, 201, 201, 201, 201, - 201, 201, 201, 873, 873, 873, 873, 873, - 201, 872, 872, 872, 872, 872, 872, 872, - 872, 872, 872, 873, 874, 189, 814, 875, - 875, 875, 875, 875, 875, 875, 876, 875, - 875, 875, 875, 875, 875, 875, 875, 875, - 875, 875, 875, 875, 875, 874, 875, 877, - 878, 814, 879, 879, 879, 879, 879, 879, - 879, 879, 879, 879, 879, 879, 879, 879, - 879, 879, 879, 879, 874, 879, 874, 880, - 875, 882, 881, 188, 188, 188, 188, 188, - 188, 188, 188, 188, 188, 881, 884, 883, - 885, 883, 188, 188, 188, 188, 188, 188, - 188, 188, 188, 188, 886, 886, 886, 886, - 886, 886, 886, 886, 886, 886, 886, 887, - 886, 886, 886, 886, 886, 886, 886, 886, - 886, 886, 886, 886, 886, 886, 886, 886, - 886, 886, 886, 886, 886, 886, 886, 886, - 886, 888, 886, 886, 886, 886, 886, 887, - 886, 187, 187, 187, 187, 187, 187, 187, - 187, 187, 187, 886, 886, 886, 886, 886, - 886, 886, 886, 886, 886, 886, 886, 886, - 886, 886, 886, 886, 886, 886, 886, 886, - 886, 886, 886, 886, 886, 886, 886, 886, - 886, 886, 886, 886, 886, 886, 886, 886, - 186, 886, 890, 889, 891, 891, 891, 891, - 891, 891, 891, 891, 891, 891, 889, 889, - 889, 889, 889, 889, 889, 889, 892, 889, - 893, 894, 889, 889, 889, 889, 889, 889, - 889, 889, 889, 895, 889, 889, 889, 889, - 889, 889, 889, 889, 896, 889, 889, 889, - 889, 889, 889, 897, 889, 889, 892, 889, - 893, 894, 889, 889, 889, 898, 889, 889, - 889, 889, 889, 895, 889, 889, 899, 889, - 889, 889, 889, 889, 896, 889, 190, 190, - 190, 190, 190, 190, 190, 190, 190, 190, - 900, 900, 900, 900, 900, 900, 900, 900, - 900, 900, 900, 901, 900, 900, 900, 900, - 900, 900, 900, 900, 900, 900, 900, 900, - 900, 900, 900, 900, 900, 900, 900, 900, - 900, 900, 900, 900, 900, 902, 900, 900, - 900, 900, 900, 901, 900, 900, 900, 903, - 900, 900, 900, 900, 900, 900, 900, 900, - 904, 900, 905, 189, 905, 189, 189, 191, - 191, 191, 191, 191, 191, 191, 191, 191, - 191, 189, 191, 191, 191, 191, 191, 191, - 191, 191, 191, 191, 906, 906, 906, 906, - 906, 906, 906, 906, 906, 906, 906, 906, - 906, 906, 906, 906, 906, 906, 906, 906, - 906, 906, 906, 906, 906, 906, 906, 906, - 906, 906, 906, 906, 906, 906, 906, 906, - 906, 905, 906, 906, 906, 906, 906, 906, - 906, 906, 906, 907, 906, 909, 908, 910, - 912, 911, 911, 911, 913, 911, 914, 915, - 891, 891, 891, 891, 891, 891, 891, 891, - 891, 891, 889, 889, 889, 889, 889, 889, - 889, 889, 889, 889, 889, 889, 889, 889, - 889, 889, 889, 889, 889, 889, 889, 889, - 889, 889, 889, 889, 889, 889, 889, 889, - 889, 889, 889, 889, 889, 889, 889, 897, - 889, 889, 889, 889, 889, 889, 889, 889, - 889, 898, 889, 889, 889, 889, 889, 889, - 889, 889, 899, 889, 916, 916, 916, 916, - 916, 916, 916, 916, 916, 916, 889, 889, - 889, 889, 889, 889, 889, 889, 889, 889, - 889, 889, 889, 889, 889, 889, 889, 889, - 889, 889, 889, 889, 889, 889, 889, 889, - 889, 889, 889, 889, 889, 889, 889, 889, - 889, 889, 889, 917, 889, 889, 889, 889, - 889, 889, 889, 889, 889, 898, 889, 889, - 889, 889, 889, 889, 889, 889, 899, 889, - 919, 919, 919, 919, 919, 919, 919, 919, - 919, 919, 918, 918, 918, 918, 918, 918, - 918, 918, 918, 918, 918, 918, 918, 918, - 918, 918, 918, 918, 918, 918, 918, 918, - 918, 918, 918, 918, 918, 918, 918, 918, - 918, 918, 918, 918, 918, 918, 918, 920, - 918, 918, 918, 918, 918, 918, 918, 918, - 918, 921, 918, 918, 918, 918, 918, 918, - 918, 918, 922, 918, 919, 919, 919, 919, - 919, 919, 919, 919, 919, 919, 918, 918, - 918, 918, 918, 918, 918, 918, 918, 918, - 918, 918, 918, 918, 918, 918, 918, 918, - 918, 918, 918, 918, 918, 918, 918, 918, - 918, 918, 918, 918, 918, 918, 918, 918, - 918, 918, 918, 923, 918, 918, 918, 918, - 918, 918, 918, 918, 918, 921, 918, 918, - 918, 918, 918, 918, 918, 918, 922, 918, - 921, 918, 918, 918, 918, 918, 918, 918, - 918, 922, 918, 925, 924, 926, 928, 927, - 927, 927, 929, 927, 931, 930, 932, 933, - 935, 935, 934, 934, 934, 934, 934, 934, - 934, 934, 934, 934, 934, 934, 934, 934, - 934, 934, 934, 934, 934, 934, 934, 934, - 934, 934, 934, 934, 934, 934, 934, 934, - 934, 934, 934, 934, 934, 934, 934, 934, - 934, 934, 934, 934, 934, 934, 934, 936, - 934, 934, 934, 934, 934, 934, 934, 934, - 934, 937, 934, 934, 934, 934, 934, 934, - 934, 934, 938, 934, 939, 939, 918, 918, - 918, 918, 918, 918, 918, 918, 918, 918, - 918, 918, 918, 918, 918, 918, 918, 918, - 918, 918, 918, 918, 918, 918, 918, 918, - 918, 918, 918, 918, 918, 918, 918, 918, - 918, 918, 918, 918, 918, 918, 918, 918, - 918, 918, 918, 940, 918, 918, 918, 918, - 918, 918, 918, 918, 918, 921, 918, 918, - 918, 918, 918, 918, 918, 918, 922, 918, - 939, 939, 918, 918, 918, 918, 918, 918, - 918, 918, 918, 918, 918, 918, 918, 918, - 918, 918, 918, 918, 918, 918, 918, 918, - 918, 918, 918, 918, 918, 918, 918, 918, - 918, 918, 918, 918, 918, 918, 918, 918, - 918, 918, 918, 918, 918, 918, 918, 923, - 918, 918, 918, 918, 918, 918, 918, 918, - 918, 921, 918, 918, 918, 918, 918, 918, - 918, 918, 922, 918, 942, 942, 942, 942, - 942, 942, 942, 942, 942, 942, 941, 941, - 941, 941, 941, 941, 941, 941, 941, 941, - 941, 941, 941, 941, 941, 941, 941, 941, - 941, 941, 941, 941, 941, 941, 941, 941, - 941, 941, 941, 941, 941, 941, 941, 941, - 941, 941, 941, 943, 941, 941, 941, 941, - 941, 941, 941, 941, 941, 944, 941, 941, - 941, 941, 941, 941, 941, 941, 945, 941, - 947, 947, 947, 947, 947, 947, 947, 947, - 947, 947, 946, 946, 946, 946, 946, 946, - 946, 946, 946, 946, 946, 946, 946, 946, - 946, 946, 946, 946, 946, 946, 946, 946, - 946, 946, 946, 946, 946, 946, 946, 946, - 946, 946, 946, 946, 946, 946, 946, 948, - 946, 946, 946, 946, 946, 946, 946, 946, - 946, 949, 946, 946, 946, 946, 946, 946, - 946, 946, 950, 946, 952, 952, 952, 952, - 952, 952, 952, 952, 952, 952, 951, 951, - 951, 951, 951, 951, 951, 952, 952, 952, - 952, 952, 952, 951, 951, 951, 951, 951, - 951, 951, 951, 951, 951, 951, 951, 951, - 951, 951, 951, 951, 951, 951, 951, 951, - 951, 951, 951, 953, 951, 952, 952, 952, - 952, 952, 952, 951, 951, 954, 951, 951, - 951, 951, 951, 951, 951, 951, 955, 951, - 956, 956, 956, 956, 956, 956, 956, 956, - 956, 956, 918, 918, 918, 918, 918, 918, - 918, 956, 956, 956, 956, 956, 956, 918, - 918, 918, 918, 918, 918, 918, 918, 918, - 918, 918, 918, 918, 918, 918, 918, 918, - 918, 918, 918, 918, 918, 918, 918, 957, - 918, 956, 956, 956, 956, 956, 956, 918, - 918, 921, 918, 918, 918, 918, 918, 918, - 918, 918, 922, 918, 956, 956, 956, 956, - 956, 956, 956, 956, 956, 956, 918, 918, - 918, 918, 918, 918, 918, 956, 956, 956, - 956, 956, 956, 918, 918, 918, 918, 918, - 918, 918, 918, 918, 918, 918, 918, 918, - 918, 918, 918, 918, 918, 918, 918, 918, - 918, 918, 918, 923, 918, 956, 956, 956, - 956, 956, 956, 918, 918, 921, 918, 918, - 918, 918, 918, 918, 918, 918, 922, 918, - 959, 958, 960, 960, 960, 960, 960, 960, - 960, 960, 960, 960, 958, 958, 958, 958, - 958, 958, 958, 958, 958, 958, 958, 961, - 958, 958, 958, 958, 958, 958, 958, 958, - 958, 958, 958, 958, 958, 958, 958, 958, - 958, 958, 958, 958, 958, 958, 958, 958, - 958, 962, 958, 958, 958, 958, 958, 961, - 958, 958, 958, 963, 958, 958, 958, 958, - 958, 958, 958, 958, 964, 958, 965, 965, - 965, 965, 965, 965, 965, 965, 965, 965, - 958, 958, 958, 958, 958, 958, 958, 958, - 958, 958, 958, 958, 958, 958, 958, 958, - 958, 958, 958, 958, 958, 958, 958, 958, - 958, 958, 958, 958, 958, 958, 958, 958, - 958, 958, 958, 958, 958, 966, 958, 958, - 958, 958, 958, 958, 958, 958, 958, 963, - 958, 958, 958, 958, 958, 958, 958, 958, - 964, 958, 967, 918, 968, 968, 968, 968, - 968, 968, 968, 968, 968, 968, 918, 918, - 918, 918, 918, 918, 918, 918, 918, 918, - 918, 969, 918, 918, 918, 918, 918, 918, - 918, 918, 918, 918, 918, 918, 918, 918, - 918, 918, 918, 918, 918, 918, 918, 918, - 918, 918, 918, 970, 918, 918, 918, 918, - 918, 969, 918, 918, 918, 921, 918, 918, - 918, 918, 918, 918, 918, 918, 922, 918, - 968, 968, 968, 968, 968, 968, 968, 968, - 968, 968, 918, 918, 918, 918, 918, 918, - 918, 918, 918, 918, 918, 918, 918, 918, - 918, 918, 918, 918, 918, 918, 918, 918, - 918, 918, 918, 918, 918, 918, 918, 918, - 918, 918, 918, 918, 918, 918, 918, 923, - 918, 918, 918, 918, 918, 918, 918, 918, - 918, 921, 918, 918, 918, 918, 918, 918, - 918, 918, 922, 918, 876, 883, 814, 971, - 875, 865, 875, 972, 973, 883, 883, 883, - 883, 883, 883, 883, 883, 883, 883, 883, - 883, 883, 883, 883, 883, 883, 883, 883, - 883, 883, 883, 883, 883, 883, 883, 883, - 883, 883, 883, 883, 883, 883, 883, 883, - 883, 883, 883, 883, 883, 883, 883, 883, - 883, 883, 883, 883, 883, 883, 883, 883, - 883, 883, 883, 883, 883, 883, 883, 883, - 883, 883, 883, 883, 865, 883, 865, 875, - 865, 814, 875, 870, 870, 870, 870, 870, - 870, 870, 870, 870, 870, 870, 870, 870, - 870, 870, 870, 870, 870, 870, 870, 870, - 870, 870, 870, 870, 870, 870, 870, 870, - 870, 870, 870, 870, 870, 870, 870, 870, - 870, 870, 870, 870, 870, 870, 870, 870, - 870, 870, 870, 201, 201, 201, 201, 201, - 201, 201, 201, 201, 201, 870, 870, 870, - 870, 870, 870, 974, 201, 201, 201, 201, - 201, 201, 201, 201, 201, 201, 201, 201, - 201, 201, 201, 201, 201, 201, 201, 201, - 201, 201, 201, 201, 201, 201, 870, 870, - 870, 870, 201, 870, 201, 201, 201, 201, - 201, 201, 201, 201, 201, 201, 201, 201, - 201, 201, 201, 201, 201, 201, 201, 201, - 201, 201, 201, 201, 201, 201, 870, 870, - 870, 870, 870, 201, 189, 189, 189, 189, - 189, 189, 189, 189, 189, 189, 189, 189, - 189, 189, 189, 189, 189, 189, 189, 189, - 189, 189, 189, 189, 189, 189, 189, 189, - 189, 189, 189, 189, 189, 858, 189, 189, - 189, 189, 189, 189, 189, 189, 189, 189, - 189, 189, 189, 189, 831, 831, 831, 831, - 831, 831, 831, 831, 831, 831, 975, 189, - 189, 189, 189, 858, 189, 831, 831, 831, - 831, 831, 831, 831, 831, 831, 831, 831, - 831, 831, 831, 831, 831, 831, 831, 831, - 831, 831, 831, 831, 831, 831, 831, 189, - 189, 189, 189, 831, 189, 831, 831, 831, - 831, 831, 831, 831, 831, 831, 831, 831, - 831, 831, 831, 831, 831, 831, 831, 831, - 831, 831, 831, 831, 831, 831, 831, 189, - 189, 189, 189, 189, 831, 976, 977, 977, - 977, 977, 977, 977, 977, 977, 977, 977, - 977, 977, 977, 977, 977, 977, 977, 977, - 977, 977, 977, 977, 977, 977, 977, 977, - 977, 977, 977, 977, 977, 977, 977, 858, - 977, 977, 977, 977, 977, 977, 977, 977, - 977, 977, 977, 977, 977, 977, 831, 831, - 831, 831, 831, 831, 831, 831, 831, 831, - 975, 977, 977, 977, 977, 858, 977, 831, - 831, 831, 831, 978, 831, 831, 831, 831, - 831, 831, 831, 831, 831, 831, 831, 831, - 831, 831, 831, 831, 831, 831, 831, 831, - 831, 977, 977, 977, 977, 831, 977, 831, - 831, 831, 831, 831, 831, 831, 831, 831, - 831, 831, 831, 831, 831, 831, 831, 831, - 831, 831, 831, 831, 831, 831, 831, 831, - 831, 977, 977, 977, 977, 977, 831, 977, - 977, 977, 977, 977, 977, 977, 977, 977, - 977, 977, 977, 977, 977, 977, 977, 977, - 977, 977, 977, 977, 977, 977, 977, 977, - 977, 977, 977, 977, 977, 977, 977, 977, - 858, 977, 977, 977, 977, 977, 977, 977, - 977, 977, 977, 977, 977, 977, 977, 831, - 831, 831, 831, 831, 831, 831, 831, 831, - 831, 975, 977, 977, 977, 977, 858, 977, - 831, 831, 831, 831, 831, 831, 979, 831, - 831, 831, 831, 831, 831, 831, 831, 831, - 831, 831, 831, 831, 831, 831, 831, 831, - 831, 831, 977, 977, 977, 977, 831, 977, - 831, 831, 831, 831, 831, 831, 831, 831, - 831, 831, 831, 831, 831, 831, 831, 831, - 831, 831, 831, 831, 831, 831, 831, 831, - 831, 831, 977, 977, 977, 977, 977, 831, - 977, 977, 977, 977, 977, 977, 977, 977, - 977, 977, 977, 977, 977, 977, 977, 977, - 977, 977, 977, 977, 977, 977, 977, 977, - 977, 977, 977, 977, 977, 977, 977, 977, - 977, 858, 977, 977, 977, 977, 977, 977, - 977, 977, 977, 977, 977, 977, 977, 977, - 831, 831, 831, 831, 831, 831, 831, 831, - 831, 831, 975, 977, 977, 977, 977, 858, - 977, 831, 831, 831, 831, 831, 831, 831, - 831, 980, 831, 831, 831, 831, 831, 831, - 831, 831, 831, 831, 831, 831, 831, 831, - 831, 831, 831, 977, 977, 977, 977, 831, - 977, 831, 831, 831, 831, 831, 831, 831, - 831, 831, 831, 831, 831, 831, 831, 831, - 831, 831, 831, 831, 831, 831, 831, 831, - 831, 831, 831, 977, 977, 977, 977, 977, - 831, 977, 977, 977, 977, 977, 977, 977, - 977, 977, 977, 977, 977, 977, 977, 977, - 977, 977, 977, 977, 977, 977, 977, 977, - 977, 977, 977, 977, 977, 977, 977, 977, - 977, 977, 858, 977, 977, 977, 977, 977, - 977, 977, 977, 977, 977, 977, 977, 977, - 977, 831, 831, 831, 831, 831, 831, 831, - 831, 831, 831, 975, 977, 977, 977, 977, - 858, 977, 831, 831, 831, 831, 831, 831, - 831, 831, 831, 831, 831, 831, 831, 981, - 831, 831, 831, 831, 831, 831, 831, 831, - 831, 831, 831, 831, 977, 977, 977, 977, - 831, 977, 831, 831, 831, 831, 831, 831, - 831, 831, 831, 831, 831, 831, 831, 831, - 831, 831, 831, 831, 831, 831, 831, 831, - 831, 831, 831, 831, 977, 977, 977, 977, - 977, 831, 977, 977, 977, 977, 977, 977, - 977, 977, 977, 977, 977, 977, 977, 977, - 977, 977, 977, 977, 977, 977, 977, 977, - 977, 977, 977, 977, 977, 977, 977, 977, - 977, 977, 977, 858, 977, 977, 977, 977, - 977, 977, 977, 977, 977, 977, 977, 977, - 977, 977, 831, 831, 831, 831, 831, 831, - 831, 831, 831, 831, 975, 977, 977, 977, - 977, 858, 977, 831, 831, 831, 831, 831, - 831, 831, 831, 831, 831, 831, 831, 831, - 982, 831, 831, 831, 831, 831, 831, 831, - 831, 831, 831, 831, 831, 977, 977, 977, - 977, 831, 977, 831, 831, 831, 831, 831, - 831, 831, 831, 831, 831, 831, 831, 831, - 831, 831, 831, 831, 831, 831, 831, 831, - 831, 831, 831, 831, 831, 977, 977, 977, - 977, 977, 831, 977, 977, 977, 977, 977, - 977, 977, 977, 977, 977, 977, 977, 977, - 977, 977, 977, 977, 977, 977, 977, 977, - 977, 977, 977, 977, 977, 977, 977, 977, - 977, 977, 977, 977, 858, 977, 977, 977, - 977, 977, 977, 977, 977, 977, 977, 977, - 977, 977, 977, 831, 831, 831, 831, 831, - 831, 831, 831, 831, 831, 975, 977, 977, - 977, 977, 858, 977, 831, 831, 831, 981, - 831, 831, 831, 831, 831, 831, 831, 831, - 831, 831, 831, 831, 831, 831, 831, 831, - 831, 831, 831, 831, 831, 831, 977, 977, - 977, 977, 831, 977, 831, 831, 831, 831, - 831, 831, 831, 831, 831, 831, 831, 831, - 831, 831, 831, 831, 831, 831, 831, 831, - 831, 831, 831, 831, 831, 831, 977, 977, - 977, 977, 977, 831, 983, 985, 984, 986, - 987, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 858, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 988, - 858, 988, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 989, 988, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 988, 805, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 858, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 988, 858, 988, 805, 805, 805, 805, 990, - 991, 805, 805, 805, 805, 805, 992, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 805, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 988, 805, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 858, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 988, 858, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 993, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 805, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 988, 805, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 858, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 988, 858, 988, 805, 805, 994, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 805, 988, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 988, 805, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 858, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 988, 858, 988, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 995, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 988, 988, 988, 988, 805, 988, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 988, 988, 988, 988, 988, 805, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 858, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 988, 988, 988, 988, 988, 858, 988, 805, - 805, 805, 996, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 805, 988, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 988, 805, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 858, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 988, 858, 988, - 805, 805, 805, 805, 805, 805, 805, 805, - 997, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 805, 988, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 988, 805, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 858, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 988, 858, - 988, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 998, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 805, - 988, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 988, - 805, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 858, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 988, - 858, 988, 805, 805, 805, 805, 805, 805, - 999, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 805, 988, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 988, 805, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 858, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 988, 858, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 1000, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 988, 805, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 858, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 988, 858, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 1001, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 988, 805, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 858, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 988, 858, 988, 805, 805, 805, - 805, 805, 805, 805, 805, 1002, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 805, 988, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 988, 805, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 858, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 988, 858, 988, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 1003, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 988, 988, 988, 988, 805, 988, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 988, 988, 988, 988, 988, 805, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 858, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 988, 988, 988, 988, 988, 858, 988, 805, - 805, 805, 805, 1004, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 805, 988, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 988, 805, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 858, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 988, 858, 988, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 1005, 988, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 988, 805, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 858, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 988, 858, - 988, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 1006, - 988, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 988, - 805, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 858, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 988, - 858, 988, 805, 805, 805, 805, 805, 805, - 805, 805, 1007, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 805, 988, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 988, 805, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 858, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 988, 858, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 1003, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 805, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 988, 805, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 858, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 988, 858, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 805, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 1008, - 805, 1009, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 988, 805, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 858, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 988, 858, 988, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 805, 988, 805, 805, 805, - 805, 805, 805, 805, 805, 1010, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 988, 805, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 858, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 988, 858, 988, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 988, 988, 988, 988, 805, 988, 1011, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 988, 988, 988, 988, 988, 805, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 858, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 988, 988, 988, 988, 988, 858, 988, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 805, 988, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 1012, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 988, 805, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 858, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 988, 858, 988, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 805, 988, - 805, 805, 805, 1013, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 988, 805, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 858, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 988, 858, - 988, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 805, - 988, 805, 805, 805, 805, 1014, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 1015, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 988, - 805, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 858, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 988, - 858, 988, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 805, 988, 805, 805, 805, 805, 805, 805, - 1016, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 988, 805, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 858, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 988, 858, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 805, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 1017, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 988, 805, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 858, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 988, 858, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 805, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 1013, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 988, 805, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 858, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 988, 858, 988, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 805, 988, 805, 805, 805, - 805, 1018, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 988, 805, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 858, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 988, 858, 988, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 988, 988, 988, 988, 805, 988, 1019, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 988, 988, 988, 988, 988, 805, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 858, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 988, 988, 988, 988, 988, 858, 988, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 805, 988, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 1020, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 988, 805, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 858, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 988, 858, 988, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 805, 988, - 1021, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 1022, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 988, 805, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 858, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 988, 858, - 988, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 805, - 988, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 1023, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 988, - 805, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 858, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 988, - 858, 988, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 805, 988, 805, 805, 805, 805, 1013, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 988, 805, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 858, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 988, 858, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 805, 988, 1024, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 988, 805, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 858, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 988, 858, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 805, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 1025, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 988, 805, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 858, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 988, 858, 988, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 805, 988, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 1026, - 805, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 988, 805, 1027, 1027, 1027, - 1027, 1027, 1027, 1027, 1027, 1027, 203, 204, - 203, 203, 203, 1027, 1027, 1027, 1027, 1027, - 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, - 1027, 1027, 1027, 1027, 1027, 203, 858, 1027, - 205, 1027, 1027, 1027, 1027, 1027, 1027, 1027, - 1027, 1027, 1027, 1027, 1027, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 1027, - 1027, 206, 1027, 1027, 858, 1027, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 1027, 207, 1027, 1027, 805, 1027, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 1027, 1027, 1027, 1027, 1027, 805, 220, 221, - 220, 220, 220, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 220, 219, 219, - 222, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, - 219, 225, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, - 219, 224, 219, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 858, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 988, 858, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 805, 988, 805, 805, 805, 805, - 1029, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 1030, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 988, 805, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 858, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 988, 858, 988, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 805, 988, 805, 805, 805, - 805, 805, 1031, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 988, 805, 1032, 1032, 1032, - 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, - 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, - 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, - 1032, 1032, 1032, 1032, 1032, 1032, 858, 1032, - 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, - 1032, 1032, 1032, 1032, 1032, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 1032, - 1032, 1032, 1032, 1032, 858, 1032, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 1032, 1032, 1032, 1032, 805, 1032, 805, 805, - 805, 805, 805, 805, 805, 805, 1033, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 1032, 1032, 1032, 1032, 1032, 805, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 858, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 988, 988, 988, 988, 988, 858, 988, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 805, 988, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 1034, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 988, 805, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 858, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 988, 858, 988, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 805, 988, - 805, 805, 805, 805, 1035, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 988, 805, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 858, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 988, 858, - 988, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 805, - 988, 805, 805, 805, 1036, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 988, - 805, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 858, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 988, - 1037, 988, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 805, 988, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 988, 805, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 858, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 988, 858, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 805, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 1038, 805, - 1039, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 988, 805, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 858, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 988, 858, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 805, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 1040, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 988, 805, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 858, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 988, 858, 988, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 805, 988, 805, 805, 805, - 805, 1013, 805, 805, 805, 1041, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 988, 805, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 858, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 988, 858, 988, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 988, 988, 988, 988, 805, 988, 805, 805, - 805, 805, 805, 1013, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 988, 988, 988, 988, 988, 805, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 858, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 988, 988, 988, 988, 988, 858, 988, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 805, 988, 805, - 805, 805, 1006, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 1042, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 988, 805, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 858, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 988, 858, 988, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 805, 988, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 1043, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 988, 805, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 858, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 988, 858, - 988, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 805, - 988, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 1023, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 988, - 805, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 858, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 988, - 858, 988, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 805, 988, 1044, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 847, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 988, 805, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 858, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 988, 858, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 805, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 1045, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 988, 805, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 858, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 988, 858, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 805, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 1046, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 988, 805, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 858, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 988, 858, 988, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 805, 988, 805, 805, 805, - 805, 1006, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 988, 805, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 858, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 988, 858, 988, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 988, 988, 988, 988, 805, 988, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 1013, - 805, 805, 805, 805, 805, 805, 805, 805, - 988, 988, 988, 988, 988, 805, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 858, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 988, 988, 988, 988, 988, 858, 988, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 805, 988, 805, - 805, 805, 805, 805, 1047, 805, 805, 805, - 805, 805, 805, 805, 1013, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 988, 805, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 858, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 988, 858, 988, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 805, 988, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 1048, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 988, 805, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 858, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 988, 858, - 988, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 805, - 988, 805, 805, 805, 1049, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 988, - 805, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 858, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 988, - 858, 988, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 805, 988, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 1050, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 988, 805, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 858, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 988, 858, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 805, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 1023, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 988, 805, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 858, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 988, 858, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 805, 988, 805, 805, 805, 805, - 1051, 805, 805, 805, 1052, 805, 805, 805, - 805, 805, 1053, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 988, 805, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 858, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 988, 858, 988, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 805, 988, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 1054, 805, 805, 988, - 988, 988, 988, 988, 805, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 858, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 988, 858, 988, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 988, 988, 988, 988, 805, 988, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 1020, 805, 805, 805, 805, 805, 805, - 988, 988, 988, 988, 988, 805, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 858, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 988, 988, 988, 988, 988, 858, 988, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 805, 988, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 1006, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 988, 805, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 858, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 988, 858, 988, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 805, 988, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 1055, 805, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 988, 805, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 858, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 988, 858, - 988, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 805, - 988, 805, 805, 805, 805, 1056, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 988, - 805, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 858, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 988, - 858, 988, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 805, 988, 805, 805, 805, 1057, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 1058, 1059, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 988, 805, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 858, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 988, 858, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 805, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 1006, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 988, 805, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 858, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 988, 858, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 805, 988, 805, 805, 1060, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 988, 805, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 858, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 988, 858, 988, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 805, 988, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 1061, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 988, 805, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 858, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 988, 858, 988, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 988, 988, 988, 988, 805, 988, 805, 805, - 805, 805, 1047, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 988, 988, 988, 988, 988, 805, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 858, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 988, 988, 988, 988, 988, 858, 988, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 805, 988, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 1062, 805, 805, 1063, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 988, 805, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 858, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 988, 858, 988, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 805, 988, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 1006, 805, 988, 988, 988, 988, 988, 805, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 858, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 988, 858, - 988, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 805, - 988, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 1064, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 988, - 805, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 858, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 988, - 858, 988, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 805, 988, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 1020, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 988, 805, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 858, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 988, 858, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 805, 988, 805, 805, 805, 805, 1065, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 1066, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 988, 805, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 858, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 988, 858, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 805, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 1067, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 988, 805, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 858, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 988, 858, 988, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 805, 988, 805, 805, 805, - 805, 805, 1006, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 988, 805, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 858, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 988, 858, 988, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 988, 988, 988, 988, 805, 988, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 1068, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 988, 988, 988, 988, 988, 805, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 858, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 988, 988, 988, 988, 988, 858, 988, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 805, 988, 805, - 805, 805, 805, 1069, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 988, 805, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 858, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 988, 858, 988, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 805, 988, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 1055, 805, 805, 805, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 988, 805, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 858, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 988, 858, - 988, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 805, - 988, 805, 805, 805, 805, 805, 805, 805, - 1070, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 1071, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 988, - 805, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 858, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 988, - 858, 988, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 805, 988, 805, 805, 805, 805, 1017, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 988, 805, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 858, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 988, 858, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 805, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 1046, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 988, 805, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 858, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 988, 858, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 805, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 1072, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 988, 805, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 858, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 988, 858, 988, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 805, 988, 805, 805, 805, - 1073, 805, 805, 805, 805, 805, 805, 805, - 1074, 805, 805, 805, 805, 805, 805, 805, - 1075, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 988, 805, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 858, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 988, 858, 988, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 988, 988, 988, 988, 805, 988, 805, 805, - 805, 805, 1076, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 988, 988, 988, 988, 988, 805, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 858, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 988, 988, 988, 988, 988, 858, 988, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 805, 988, 805, - 805, 805, 805, 805, 1012, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 988, 805, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 858, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 988, 858, 988, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 805, 988, - 805, 805, 805, 805, 1077, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 988, 805, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 858, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 988, 858, - 988, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 805, - 988, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 1078, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 988, - 805, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 858, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 988, - 858, 988, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 805, 988, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 1047, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 988, 805, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 858, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 988, 858, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 805, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 1079, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 988, 805, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 858, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 988, 858, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 805, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 1047, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 988, 805, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 858, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 988, 858, 988, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 805, 988, 805, 805, 805, - 805, 805, 805, 805, 1080, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 988, 805, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 858, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 988, - 988, 988, 988, 988, 858, 988, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 988, 988, 988, 988, 805, 988, 805, 805, - 805, 805, 1017, 805, 805, 805, 1081, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 988, 988, 988, 988, 988, 805, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 858, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 988, 988, 988, 988, 988, 858, 988, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 805, 988, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 1082, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 988, 805, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 858, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 988, 988, 988, 988, 988, 858, 988, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 805, 988, - 805, 805, 805, 805, 1047, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 988, 805, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 858, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 988, 988, 988, 988, 988, 858, - 988, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 805, - 988, 805, 805, 805, 805, 805, 805, 805, - 805, 1083, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 988, - 805, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 858, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 988, 988, 988, 988, 988, - 858, 988, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 805, 988, 805, 805, 805, 805, 1084, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 988, 805, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 858, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 988, 988, 988, 988, - 988, 858, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 805, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 1085, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 988, 805, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 988, 858, 988, 988, 988, - 988, 988, 988, 988, 988, 988, 988, 988, - 988, 988, 988, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 988, 988, 988, - 988, 988, 858, 988, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 805, 988, 805, 805, 805, 1055, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 805, 805, - 805, 805, 805, 805, 805, 805, 988, 988, - 988, 988, 988, 805, 1086, 874, 864, 864, - 864, 864, 864, 864, 864, 864, 864, 864, - 864, 864, 864, 864, 864, 864, 864, 864, - 864, 864, 864, 864, 864, 864, 864, 864, - 864, 864, 864, 864, 864, 864, 864, 864, - 864, 864, 864, 864, 864, 864, 864, 864, - 864, 864, 864, 864, 864, 864, 864, 864, - 864, 864, 864, 864, 864, 864, 864, 864, - 864, 864, 864, 864, 814, 864, 1087, 1089, - 1088, 1089, 1089, 1089, 1088, 1088, 1088, 1088, - 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, - 1088, 1088, 1088, 1088, 1088, 1088, 1089, 1088, - 1088, 1090, 1088, 1088, 1091, 1088, 1088, 1088, - 1088, 1088, 1088, 1088, 233, 1088, 1088, 1088, - 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, - 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, - 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, - 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, - 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, - 1088, 1088, 1092, 1088, 229, 230, 229, 229, - 229, 1093, 1093, 1093, 1093, 1093, 1093, 1093, - 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, - 1093, 1093, 1093, 229, 1093, 1093, 231, 1093, - 1093, 232, 1093, 1093, 1093, 1093, 1093, 1093, - 1093, 233, 1093, 1093, 1093, 1093, 1093, 1093, - 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, - 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, - 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, - 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, - 1093, 1093, 1093, 1093, 1093, 1093, 1093, 234, - 1093, 236, 1094, 236, 236, 236, 1094, 1094, - 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, - 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, - 236, 1094, 1094, 231, 1094, 1094, 1094, 1094, - 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, - 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, - 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, - 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, - 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, - 1094, 1094, 1094, 1094, 1094, 1094, 1094, 1094, - 1094, 1094, 1094, 1094, 234, 1094, 1096, 1095, - 1098, 1097, 239, 238, 244, 1093, 242, 1093, - 1100, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1101, 1099, 1100, 1099, 1100, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1103, 1099, 1100, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1104, 1099, 1100, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1099, 1099, 1099, 1099, - 1099, 1099, 1099, 1099, 1105, 1099, 1107, 1105, - 1109, 1108, 1108, 1108, 1109, 1108, 1108, 1108, - 1108, 1110, 1111, 1110, 1110, 1110, 1108, 1108, - 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, - 1108, 1108, 1109, 1108, 1108, 1108, 1108, 1108, - 1110, 1108, 1108, 1112, 1108, 1108, 1108, 1108, - 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, - 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, - 1108, 1108, 1108, 1108, 1108, 1113, 1108, 1108, - 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, - 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, - 1108, 1108, 1108, 1108, 1108, 1108, 1108, 1108, - 1108, 1108, 1108, 1108, 1114, 1108, 1108, 1115, - 1108, 1110, 1116, 1110, 1110, 1110, 1116, 1116, - 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, - 1116, 1116, 1116, 1116, 1116, 1116, 1116, 1116, - 1110, 1116, 1117, 1118, 1119, 1120, 1121, 1123, - 1122, 1125, 1126, 1125, 1125, 1125, 1124, 1124, - 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, - 1124, 1124, 1124, 1124, 1124, 1124, 1124, 1124, - 1125, 1124, 1111, 1122, 1127, 1122, 0 -] - -class << self - attr_accessor :_lex_trans_targs - private :_lex_trans_targs, :_lex_trans_targs= -end -self._lex_trans_targs = [ - 130, 129, 0, 2, 131, 132, 4, 133, - 134, 134, 134, 134, 247, 7, 8, 9, - 247, 247, 276, 11, 12, 276, 276, 280, - 280, 16, 11, 17, 278, 279, 281, 282, - 280, 276, 283, 284, 286, 13, 14, 287, - 288, 15, 280, 18, 19, 24, 31, 290, - 291, 17, 278, 279, 281, 282, 280, 276, - 283, 284, 286, 13, 14, 287, 288, 15, - 18, 19, 24, 31, 290, 291, 289, 20, - 21, 22, 23, 25, 26, 29, 27, 28, - 30, 32, 33, 276, 35, 36, 37, 39, - 42, 40, 41, 43, 45, 307, 307, 307, - 308, 47, 310, 48, 311, 49, 308, 47, - 310, 48, 311, 345, 50, 345, 51, 52, - 50, 345, 51, 345, 345, 345, 55, 56, - 57, 58, 356, 345, 345, 345, 61, 62, - 63, 345, 66, 61, 62, 63, 345, 66, - 64, 64, 62, 63, 366, 65, 64, 64, - 62, 63, 366, 65, 62, 345, 383, 345, - 68, 384, 390, 72, 399, 400, 77, 78, - 72, 73, 398, 73, 398, 345, 74, 75, - 76, 401, 79, 80, 347, 53, 349, 82, - 83, 406, 508, 85, 86, 87, 508, 516, - 516, 516, 90, 538, 537, 516, 540, 542, - 516, 95, 96, 97, 546, 516, 99, 100, - 557, 526, 579, 103, 104, 105, 109, 110, - 103, 104, 105, 109, 110, 106, 106, 104, - 105, 107, 108, 106, 106, 104, 105, 107, - 108, 627, 104, 516, 696, 111, 698, 113, - 117, 699, 115, 696, 112, 696, 114, 698, - 114, 698, 116, 698, 696, 710, 119, 120, - 121, 716, 123, 124, 125, 126, 127, 710, - 710, 128, 1, 3, 129, 129, 129, 135, - 134, 134, 136, 137, 138, 139, 141, 144, - 145, 146, 147, 134, 148, 149, 151, 153, - 154, 155, 159, 161, 162, 163, 179, 184, - 191, 196, 203, 210, 213, 214, 218, 212, - 222, 230, 234, 236, 241, 243, 246, 134, - 134, 134, 134, 134, 134, 140, 134, 140, - 134, 142, 5, 143, 134, 6, 134, 134, - 150, 152, 134, 156, 157, 158, 154, 160, - 134, 164, 165, 174, 177, 166, 167, 168, - 169, 170, 171, 172, 173, 135, 175, 176, - 178, 180, 183, 181, 182, 185, 188, 186, - 187, 189, 190, 192, 194, 193, 195, 197, - 198, 134, 199, 200, 201, 202, 134, 204, - 207, 205, 206, 208, 209, 211, 215, 216, - 217, 219, 221, 220, 223, 224, 225, 227, - 226, 228, 229, 231, 232, 233, 235, 237, - 238, 239, 240, 242, 244, 245, 248, 247, - 247, 249, 250, 252, 253, 247, 247, 247, - 251, 247, 251, 10, 254, 247, 256, 255, - 255, 259, 260, 261, 262, 255, 264, 265, - 266, 267, 269, 271, 272, 273, 274, 275, - 255, 257, 255, 258, 255, 255, 255, 255, - 255, 263, 255, 263, 268, 255, 270, 255, - 276, 276, 277, 292, 293, 279, 295, 296, - 283, 297, 298, 299, 300, 301, 303, 304, - 305, 306, 276, 276, 276, 276, 276, 276, - 280, 285, 276, 276, 276, 276, 276, 276, - 276, 276, 276, 294, 276, 294, 276, 276, - 276, 276, 302, 276, 34, 38, 44, 307, - 309, 312, 46, 307, 307, 308, 313, 313, - 314, 315, 317, 319, 320, 313, 313, 316, - 313, 316, 313, 318, 313, 313, 313, 322, - 321, 321, 323, 324, 325, 327, 329, 330, - 335, 342, 321, 321, 321, 321, 326, 321, - 326, 321, 328, 321, 321, 322, 331, 332, - 333, 334, 336, 337, 340, 338, 339, 341, - 343, 344, 346, 345, 354, 355, 357, 358, - 360, 361, 362, 363, 365, 367, 368, 371, - 372, 397, 403, 404, 405, 406, 407, 408, - 409, 410, 364, 412, 429, 434, 441, 446, - 448, 454, 457, 458, 462, 456, 466, 477, - 481, 484, 492, 496, 499, 500, 345, 50, - 51, 345, 53, 348, 345, 345, 350, 352, - 353, 345, 351, 345, 345, 345, 345, 345, - 54, 345, 345, 345, 345, 345, 359, 345, - 359, 345, 345, 59, 345, 60, 345, 345, - 364, 345, 369, 345, 370, 345, 345, 345, - 373, 382, 345, 67, 385, 386, 387, 345, - 388, 69, 391, 392, 70, 395, 396, 345, - 374, 376, 345, 375, 345, 345, 377, 380, - 381, 345, 378, 379, 345, 345, 345, 345, - 345, 345, 389, 345, 383, 393, 394, 345, - 393, 345, 383, 393, 71, 402, 345, 345, - 345, 345, 345, 81, 84, 345, 411, 413, - 414, 424, 427, 415, 416, 417, 418, 419, - 420, 421, 422, 423, 425, 426, 428, 430, - 433, 431, 432, 435, 438, 436, 437, 439, - 440, 442, 444, 443, 445, 447, 449, 451, - 450, 452, 453, 455, 423, 459, 460, 461, - 463, 465, 464, 467, 468, 469, 474, 470, - 471, 472, 345, 346, 347, 53, 473, 352, - 475, 476, 478, 479, 480, 482, 483, 485, - 486, 487, 490, 488, 489, 491, 493, 494, - 495, 497, 498, 345, 364, 501, 501, 502, - 503, 504, 506, 501, 501, 501, 505, 501, - 505, 501, 507, 501, 509, 508, 508, 510, - 511, 508, 512, 514, 508, 508, 508, 508, - 513, 508, 513, 515, 508, 517, 516, 516, - 520, 521, 522, 516, 523, 525, 528, 529, - 530, 531, 532, 516, 533, 534, 539, 567, - 571, 516, 572, 574, 576, 516, 577, 578, - 580, 584, 586, 587, 589, 590, 608, 613, - 620, 628, 635, 642, 647, 648, 652, 646, - 657, 667, 673, 676, 685, 689, 693, 694, - 695, 528, 518, 516, 519, 516, 516, 516, - 516, 516, 516, 524, 516, 524, 516, 88, - 527, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 535, 516, 536, 516, 516, 89, - 91, 516, 92, 548, 559, 562, 541, 563, - 564, 549, 553, 555, 516, 541, 92, 543, - 545, 93, 516, 543, 516, 544, 516, 516, - 94, 547, 516, 516, 550, 552, 516, 550, - 551, 553, 555, 552, 516, 554, 516, 516, - 556, 558, 516, 98, 516, 516, 516, 560, - 552, 553, 555, 560, 561, 516, 550, 552, - 553, 555, 516, 550, 552, 553, 555, 516, - 565, 552, 553, 555, 565, 566, 516, 92, - 567, 541, 568, 553, 555, 569, 552, 92, - 569, 541, 570, 573, 575, 516, 101, 102, - 516, 516, 581, 582, 583, 578, 585, 516, - 516, 588, 516, 516, 516, 591, 592, 601, - 606, 593, 594, 595, 596, 597, 598, 599, - 600, 517, 602, 603, 604, 605, 517, 607, - 609, 612, 610, 611, 517, 517, 614, 617, - 615, 616, 618, 619, 517, 621, 623, 622, - 624, 625, 626, 516, 516, 629, 517, 630, - 516, 631, 632, 633, 634, 518, 636, 639, - 637, 638, 640, 641, 643, 644, 645, 517, - 649, 650, 651, 653, 655, 656, 654, 517, - 658, 659, 660, 663, 661, 662, 664, 665, - 666, 668, 670, 669, 671, 672, 674, 675, - 677, 678, 680, 683, 679, 681, 682, 684, - 686, 687, 688, 690, 691, 692, 516, 516, - 696, 697, 701, 702, 703, 696, 696, 696, - 700, 696, 696, 705, 704, 706, 704, 707, - 708, 709, 704, 704, 710, 710, 711, 712, - 713, 715, 717, 718, 710, 710, 710, 714, - 710, 714, 710, 118, 710, 710, 710, 122 -] - -class << self - attr_accessor :_lex_trans_actions - private :_lex_trans_actions, :_lex_trans_actions= -end -self._lex_trans_actions = [ - 0, 1, 0, 0, 0, 0, 0, 0, - 2, 3, 4, 5, 6, 0, 0, 0, - 7, 8, 9, 0, 0, 10, 11, 12, - 13, 14, 15, 15, 16, 17, 15, 18, - 17, 19, 17, 15, 15, 16, 15, 20, - 15, 15, 21, 15, 15, 15, 15, 15, - 15, 0, 22, 23, 0, 24, 23, 25, - 23, 0, 0, 22, 0, 26, 0, 0, - 0, 0, 0, 0, 0, 0, 13, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 27, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 28, 29, 30, - 31, 0, 0, 0, 31, 14, 32, 15, - 15, 15, 32, 33, 0, 34, 0, 14, - 15, 35, 15, 36, 37, 38, 0, 0, - 0, 0, 0, 39, 40, 41, 0, 14, - 0, 42, 0, 15, 43, 15, 44, 15, - 45, 46, 47, 46, 48, 46, 0, 49, - 50, 49, 51, 49, 52, 53, 0, 54, - 0, 0, 0, 0, 55, 55, 0, 0, - 56, 56, 57, 0, 14, 58, 0, 0, - 0, 55, 0, 0, 59, 0, 0, 0, - 0, 59, 60, 0, 0, 0, 61, 62, - 63, 64, 0, 65, 65, 66, 67, 67, - 68, 0, 0, 0, 0, 69, 0, 0, - 0, 0, 0, 0, 14, 0, 0, 0, - 15, 43, 15, 15, 15, 45, 46, 47, - 46, 46, 46, 0, 49, 50, 49, 49, - 49, 70, 52, 71, 72, 0, 73, 0, - 74, 74, 0, 75, 0, 76, 45, 77, - 0, 78, 14, 79, 80, 81, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 82, - 83, 86, 0, 0, 87, 88, 89, 90, - 91, 92, 0, 14, 0, 0, 65, 65, - 0, 0, 0, 93, 0, 0, 0, 0, - 94, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 95, - 96, 97, 98, 99, 100, 45, 101, 0, - 102, 0, 0, 0, 103, 0, 104, 105, - 0, 0, 106, 0, 0, 0, 107, 0, - 108, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 107, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 109, 0, 0, 0, 0, 110, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 65, 111, - 112, 0, 0, 65, 0, 113, 114, 115, - 45, 116, 0, 0, 14, 117, 0, 118, - 119, 0, 14, 0, 0, 120, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 121, 0, 122, 0, 123, 124, 125, 126, - 127, 45, 128, 0, 0, 129, 0, 130, - 131, 132, 133, 14, 0, 13, 0, 0, - 13, 0, 0, 0, 0, 0, 0, 65, - 65, 65, 134, 135, 136, 137, 138, 139, - 140, 0, 141, 142, 143, 144, 145, 146, - 147, 148, 149, 45, 150, 0, 151, 152, - 153, 154, 155, 156, 0, 0, 0, 157, - 65, 65, 0, 158, 159, 160, 161, 162, - 0, 0, 0, 0, 0, 163, 164, 45, - 165, 0, 166, 14, 167, 168, 169, 170, - 171, 172, 0, 14, 0, 0, 0, 0, - 0, 0, 173, 174, 175, 176, 45, 177, - 0, 178, 14, 179, 180, 181, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 182, 183, 0, 184, 0, 0, - 65, 185, 0, 0, 185, 185, 0, 0, - 65, 186, 0, 186, 0, 186, 186, 186, - 0, 0, 186, 182, 182, 182, 182, 182, - 182, 182, 182, 182, 182, 182, 182, 182, - 182, 182, 182, 182, 0, 0, 187, 188, - 188, 189, 190, 0, 191, 192, 0, 59, - 0, 193, 0, 194, 195, 196, 197, 198, - 15, 199, 200, 201, 202, 203, 45, 204, - 0, 205, 206, 0, 207, 0, 208, 209, - 185, 210, 0, 211, 0, 212, 213, 214, - 0, 0, 215, 0, 0, 0, 0, 216, - 0, 0, 0, 0, 0, 0, 0, 217, - 0, 0, 218, 0, 219, 220, 0, 0, - 0, 221, 0, 0, 222, 223, 224, 225, - 226, 227, 0, 228, 229, 229, 0, 230, - 0, 231, 232, 232, 0, 0, 233, 234, - 235, 236, 237, 0, 0, 238, 14, 182, - 182, 182, 182, 182, 182, 182, 182, 182, - 182, 182, 182, 59, 182, 182, 182, 182, - 182, 182, 182, 182, 182, 182, 182, 182, - 182, 182, 182, 182, 182, 182, 182, 182, - 182, 182, 182, 182, 239, 182, 182, 182, - 182, 182, 182, 182, 182, 182, 182, 182, - 182, 240, 241, 242, 243, 244, 244, 240, - 182, 182, 182, 182, 182, 182, 182, 182, - 182, 182, 182, 182, 182, 182, 182, 182, - 182, 182, 182, 245, 246, 247, 248, 0, - 14, 0, 0, 249, 250, 251, 45, 252, - 0, 253, 14, 254, 65, 255, 256, 0, - 14, 257, 0, 0, 258, 259, 260, 261, - 45, 262, 0, 14, 263, 264, 265, 266, - 0, 14, 0, 267, 0, 65, 268, 0, - 0, 0, 0, 269, 0, 0, 270, 270, - 0, 271, 0, 0, 0, 272, 65, 273, - 273, 273, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 274, 275, 276, 0, 277, 278, 279, - 280, 281, 282, 45, 283, 0, 284, 0, - 0, 285, 286, 287, 288, 289, 290, 291, - 292, 293, 0, 294, 0, 295, 296, 0, - 0, 297, 298, 299, 0, 0, 300, 0, - 0, 299, 301, 301, 302, 303, 0, 304, - 305, 0, 306, 307, 308, 0, 309, 310, - 0, 0, 311, 312, 299, 299, 313, 0, - 0, 314, 314, 0, 315, 0, 316, 317, - 65, 0, 318, 0, 319, 320, 321, 322, - 322, 323, 323, 0, 0, 324, 325, 325, - 326, 326, 327, 328, 328, 329, 329, 330, - 331, 331, 332, 332, 0, 0, 333, 334, - 335, 336, 337, 338, 338, 335, 337, 339, - 270, 340, 0, 0, 0, 341, 0, 0, - 342, 343, 273, 273, 273, 344, 273, 345, - 346, 14, 347, 348, 349, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 350, 0, 0, 0, 0, 344, 0, - 0, 0, 0, 0, 351, 352, 0, 0, - 0, 0, 0, 0, 353, 0, 0, 0, - 0, 0, 352, 354, 355, 0, 356, 0, - 357, 0, 0, 0, 0, 358, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 359, - 0, 0, 0, 0, 0, 0, 0, 358, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 360, 361, - 362, 363, 363, 74, 363, 364, 365, 366, - 0, 367, 368, 0, 369, 0, 370, 0, - 0, 0, 371, 372, 373, 374, 0, 14, - 0, 65, 0, 65, 375, 376, 377, 45, - 378, 0, 379, 0, 380, 381, 382, 0 -] - -class << self - attr_accessor :_lex_to_state_actions - private :_lex_to_state_actions, :_lex_to_state_actions= -end -self._lex_to_state_actions = [ - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 84, 84, 0, 0, 0, 0, 84, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 84, - 0, 0, 0, 0, 0, 0, 0, 84, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 84, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 84, 0, 0, 0, 0, - 0, 84, 0, 0, 0, 0, 0, 0, - 0, 84, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 84, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 84, 0, 0, - 0, 0, 0, 0, 84, 0, 0, 0, - 0, 0, 0, 0, 84, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 84, 0, 0, 0, 0, 0, 0, 0, - 84, 0, 0, 0, 0, 0, 84, 0, - 0, 0, 0, 0, 0, 0, 0 -] - -class << self - attr_accessor :_lex_from_state_actions - private :_lex_from_state_actions, :_lex_from_state_actions= -end -self._lex_from_state_actions = [ - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 85, 85, 0, 0, 0, 0, 85, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 85, - 0, 0, 0, 0, 0, 0, 0, 85, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 85, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 85, 0, 0, 0, 0, - 0, 85, 0, 0, 0, 0, 0, 0, - 0, 85, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 85, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 85, 0, 0, - 0, 0, 0, 0, 85, 0, 0, 0, - 0, 0, 0, 0, 85, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 85, 0, 0, 0, 0, 0, 0, 0, - 85, 0, 0, 0, 0, 0, 85, 0, - 0, 0, 0, 0, 0, 0, 0 -] - -class << self - attr_accessor :_lex_eof_trans - private :_lex_eof_trans, :_lex_eof_trans= -end -self._lex_eof_trans = [ - 0, 0, 0, 0, 0, 9, 11, 13, - 13, 13, 13, 19, 19, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 94, 96, - 96, 96, 108, 108, 108, 116, 118, 118, - 118, 118, 118, 124, 116, 116, 116, 116, - 116, 116, 116, 150, 150, 150, 150, 150, - 150, 116, 166, 116, 166, 150, 150, 116, - 116, 150, 150, 150, 150, 179, 179, 179, - 184, 186, 186, 186, 190, 190, 193, 193, - 193, 193, 198, 198, 198, 184, 190, 190, - 190, 190, 190, 190, 190, 190, 190, 229, - 236, 238, 238, 238, 238, 229, 246, 246, - 246, 246, 246, 246, 246, 246, 246, 246, - 0, 0, 261, 261, 262, 263, 0, 304, - 306, 307, 308, 309, 311, 313, 317, 317, - 308, 308, 308, 308, 319, 308, 308, 313, - 308, 308, 304, 323, 323, 323, 323, 323, - 323, 313, 313, 329, 329, 329, 329, 329, - 329, 329, 329, 329, 329, 329, 329, 329, - 329, 329, 329, 329, 329, 329, 329, 329, - 329, 329, 329, 329, 329, 329, 329, 329, - 329, 329, 329, 329, 329, 329, 362, 329, - 329, 329, 329, 329, 329, 329, 329, 329, - 329, 329, 329, 329, 329, 329, 329, 329, - 329, 329, 329, 329, 329, 329, 329, 329, - 329, 329, 329, 329, 329, 329, 329, 329, - 329, 329, 329, 329, 329, 329, 329, 329, - 329, 329, 329, 329, 329, 329, 308, 0, - 406, 407, 408, 410, 406, 406, 414, 0, - 433, 435, 437, 438, 439, 440, 441, 443, - 440, 440, 440, 440, 440, 446, 440, 440, - 448, 446, 446, 440, 0, 467, 468, 19, - 19, 471, 472, 19, 468, 468, 475, 477, - 480, 468, 481, 468, 482, 483, 485, 487, - 468, 475, 488, 488, 477, 488, 492, 488, - 488, 488, 488, 0, 94, 500, 501, 500, - 500, 0, 510, 511, 513, 515, 517, 515, - 519, 0, 531, 532, 533, 534, 536, 538, - 540, 541, 541, 541, 541, 541, 541, 541, - 541, 541, 541, 541, 541, 541, 541, 541, - 541, 0, 599, 602, 605, 606, 610, 612, - 613, 614, 615, 616, 618, 621, 622, 624, - 626, 629, 631, 632, 116, 629, 634, 629, - 621, 636, 638, 621, 621, 656, 659, 661, - 662, 666, 669, 670, 671, 672, 656, 656, - 656, 656, 656, 656, 656, 656, 656, 656, - 676, 680, 682, 656, 656, 621, 687, 688, - 688, 688, 621, 621, 621, 689, 116, 621, - 621, 694, 621, 616, 599, 599, 599, 599, - 599, 599, 599, 599, 599, 599, 599, 116, - 599, 599, 599, 599, 599, 599, 599, 599, - 599, 599, 599, 599, 599, 599, 599, 599, - 599, 599, 599, 599, 599, 599, 599, 599, - 599, 599, 599, 599, 599, 599, 599, 599, - 599, 599, 599, 599, 599, 599, 599, 599, - 599, 599, 599, 599, 599, 599, 599, 599, - 747, 606, 599, 599, 599, 599, 599, 599, - 599, 599, 599, 599, 599, 599, 599, 599, - 599, 599, 599, 599, 599, 599, 599, 599, - 599, 599, 599, 772, 621, 0, 780, 781, - 782, 784, 786, 788, 0, 797, 798, 799, - 800, 802, 797, 805, 0, 190, 860, 862, - 863, 864, 865, 867, 869, 871, 874, 874, - 190, 876, 878, 879, 880, 876, 882, 884, - 884, 887, 887, 890, 901, 190, 907, 909, - 911, 912, 915, 916, 890, 890, 919, 919, - 919, 925, 927, 928, 931, 933, 934, 935, - 919, 919, 942, 947, 952, 919, 919, 959, - 959, 919, 919, 884, 876, 876, 884, 876, - 876, 871, 190, 977, 978, 978, 978, 978, - 978, 978, 984, 871, 987, 988, 989, 989, - 989, 989, 989, 989, 989, 989, 989, 989, - 989, 989, 989, 989, 989, 989, 989, 989, - 989, 989, 989, 989, 989, 989, 989, 989, - 989, 989, 989, 989, 989, 989, 989, 989, - 989, 989, 1028, 1029, 989, 989, 1033, 989, - 989, 989, 989, 989, 989, 989, 989, 989, - 989, 989, 989, 989, 989, 989, 989, 989, - 989, 989, 989, 989, 989, 989, 989, 989, - 989, 989, 989, 989, 989, 989, 989, 989, - 989, 989, 989, 989, 989, 989, 989, 989, - 989, 989, 989, 989, 989, 989, 989, 989, - 989, 989, 989, 989, 989, 989, 989, 989, - 989, 989, 989, 989, 989, 1087, 865, 1088, - 0, 1094, 1095, 1096, 1098, 1094, 1094, 1094, - 0, 1103, 1103, 1103, 1103, 1107, 0, 1117, - 1118, 1119, 1121, 1123, 1125, 1123, 1123 -] - -class << self - attr_accessor :lex_start -end -self.lex_start = 128; -class << self - attr_accessor :lex_error -end -self.lex_error = 0; - -class << self - attr_accessor :lex_en_expr_variable -end -self.lex_en_expr_variable = 129; -class << self - attr_accessor :lex_en_expr_fname -end -self.lex_en_expr_fname = 134; -class << self - attr_accessor :lex_en_expr_endfn -end -self.lex_en_expr_endfn = 247; -class << self - attr_accessor :lex_en_expr_dot -end -self.lex_en_expr_dot = 255; -class << self - attr_accessor :lex_en_expr_arg -end -self.lex_en_expr_arg = 276; -class << self - attr_accessor :lex_en_expr_cmdarg -end -self.lex_en_expr_cmdarg = 307; -class << self - attr_accessor :lex_en_expr_endarg -end -self.lex_en_expr_endarg = 313; -class << self - attr_accessor :lex_en_expr_mid -end -self.lex_en_expr_mid = 321; -class << self - attr_accessor :lex_en_expr_beg -end -self.lex_en_expr_beg = 345; -class << self - attr_accessor :lex_en_expr_labelarg -end -self.lex_en_expr_labelarg = 501; -class << self - attr_accessor :lex_en_expr_value -end -self.lex_en_expr_value = 508; -class << self - attr_accessor :lex_en_expr_end -end -self.lex_en_expr_end = 516; -class << self - attr_accessor :lex_en_leading_dot -end -self.lex_en_leading_dot = 696; -class << self - attr_accessor :lex_en_line_comment -end -self.lex_en_line_comment = 704; -class << self - attr_accessor :lex_en_line_begin -end -self.lex_en_line_begin = 710; -class << self - attr_accessor :lex_en_inside_string -end -self.lex_en_inside_string = 128; - - -# line 82 "lib/parser/lexer.rl" - # % - - attr_reader :source_buffer - - attr_accessor :diagnostics - attr_accessor :static_env - attr_accessor :force_utf32 - - attr_accessor :cond, :cmdarg, :context, :command_start - - attr_accessor :tokens, :comments - - attr_reader :paren_nest, :cmdarg_stack, :cond_stack, :lambda_stack, :version - - def initialize(version) - @version = version - @static_env = nil - @context = nil - - @tokens = nil - @comments = nil - - @_lex_actions = - if self.class.respond_to?(:_lex_actions, true) - self.class.send :_lex_actions - else - [] - end - - @emit_integer = lambda { |chars, p| emit(:tINTEGER, chars); p } - @emit_rational = lambda { |chars, p| emit(:tRATIONAL, Rational(chars)); p } - @emit_imaginary = lambda { |chars, p| emit(:tIMAGINARY, Complex(0, chars)); p } - @emit_imaginary_rational = lambda { |chars, p| emit(:tIMAGINARY, Complex(0, Rational(chars))); p } - @emit_integer_re = lambda { |chars, p| emit(:tINTEGER, chars, @ts, @te - 2); p - 2 } - @emit_integer_if = lambda { |chars, p| emit(:tINTEGER, chars, @ts, @te - 2); p - 2 } - @emit_integer_rescue = lambda { |chars, p| emit(:tINTEGER, chars, @ts, @te - 6); p - 6 } - - @emit_float = lambda { |chars, p| emit(:tFLOAT, Float(chars)); p } - @emit_imaginary_float = lambda { |chars, p| emit(:tIMAGINARY, Complex(0, Float(chars))); p } - @emit_float_if = lambda { |chars, p| emit(:tFLOAT, Float(chars), @ts, @te - 2); p - 2 } - @emit_float_rescue = lambda { |chars, p| emit(:tFLOAT, Float(chars), @ts, @te - 6); p - 6 } - - reset - end - - def reset(reset_state=true) - # Ragel state: - if reset_state - # Unit tests set state prior to resetting lexer. - @cs = self.class.lex_en_line_begin - - @cond = StackState.new('cond') - @cmdarg = StackState.new('cmdarg') - @cond_stack = [] - @cmdarg_stack = [] - end - - @force_utf32 = false # Set to true by some tests - - @source_pts = nil # @source as a codepoint array - - @p = 0 # stream position (saved manually in #advance) - @ts = nil # token start - @te = nil # token end - @act = 0 # next action - - @stack = [] # state stack - @top = 0 # state stack top pointer - - # Lexer state: - @token_queue = [] - - @eq_begin_s = nil # location of last encountered =begin - @sharp_s = nil # location of last encountered # - - @newline_s = nil # location of last encountered newline - - @num_base = nil # last numeric base - @num_digits_s = nil # starting position of numeric digits - @num_suffix_s = nil # starting position of numeric suffix - @num_xfrm = nil # numeric suffix-induced transformation - - # Ruby 1.9 ->() lambdas emit a distinct token if do/{ is - # encountered after a matching closing parenthesis. - @paren_nest = 0 - @lambda_stack = [] - - # If the lexer is in `command state' (aka expr_value) - # at the entry to #advance, it will transition to expr_cmdarg - # instead of expr_arg at certain points. - @command_start = true - - # State before =begin / =end block comment - @cs_before_block_comment = self.class.lex_en_line_begin - - @strings = Parser::LexerStrings.new(self, @version) - end - - def source_buffer=(source_buffer) - @source_buffer = source_buffer - - if @source_buffer - source = @source_buffer.source - - if source.encoding == Encoding::UTF_8 - @source_pts = source.unpack('U*') - else - @source_pts = source.unpack('C*') - end - - if @source_pts[0] == 0xfeff - # Skip byte order mark. - @p = 1 - end - else - @source_pts = nil - end - - @strings.source_buffer = @source_buffer - @strings.source_pts = @source_pts - end - - def encoding - @source_buffer.source.encoding - end - - LEX_STATES = { - :line_begin => lex_en_line_begin, - :expr_dot => lex_en_expr_dot, - :expr_fname => lex_en_expr_fname, - :expr_value => lex_en_expr_value, - :expr_beg => lex_en_expr_beg, - :expr_mid => lex_en_expr_mid, - :expr_arg => lex_en_expr_arg, - :expr_cmdarg => lex_en_expr_cmdarg, - :expr_end => lex_en_expr_end, - :expr_endarg => lex_en_expr_endarg, - :expr_endfn => lex_en_expr_endfn, - :expr_labelarg => lex_en_expr_labelarg, - - :inside_string => lex_en_inside_string - } - - def state - LEX_STATES.invert.fetch(@cs, @cs) - end - - def state=(state) - @cs = LEX_STATES.fetch(state) - end - - def push_cmdarg - @cmdarg_stack.push(@cmdarg) - @cmdarg = StackState.new("cmdarg.#{@cmdarg_stack.count}") - end - - def pop_cmdarg - @cmdarg = @cmdarg_stack.pop - end - - def push_cond - @cond_stack.push(@cond) - @cond = StackState.new("cond.#{@cond_stack.count}") - end - - def pop_cond - @cond = @cond_stack.pop - end - - def dedent_level - @strings.dedent_level - end - - # Return next token: [type, value]. - def advance - unless @token_queue.empty? - return @token_queue.shift - end - - # Ugly, but dependent on Ragel output. Consider refactoring it somehow. - klass = self.class - _lex_trans_keys = klass.send :_lex_trans_keys - _lex_key_spans = klass.send :_lex_key_spans - _lex_index_offsets = klass.send :_lex_index_offsets - _lex_indicies = klass.send :_lex_indicies - _lex_trans_targs = klass.send :_lex_trans_targs - _lex_trans_actions = klass.send :_lex_trans_actions - _lex_to_state_actions = klass.send :_lex_to_state_actions - _lex_from_state_actions = klass.send :_lex_from_state_actions - _lex_eof_trans = klass.send :_lex_eof_trans - _lex_actions = @_lex_actions - - pe = @source_pts.size + 2 - p, eof = @p, pe - - cmd_state = @command_start - @command_start = false - - -# line 8435 "lib/parser/lexer-F1.rb" -begin - testEof = false - _slen, _trans, _keys, _inds, _acts, _nacts = nil - _goto_level = 0 - _resume = 10 - _eof_trans = 15 - _again = 20 - _test_eof = 30 - _out = 40 - while true - if _goto_level <= 0 - if p == pe - _goto_level = _test_eof - next - end - if @cs == 0 - _goto_level = _out - next - end - end - if _goto_level <= _resume - case _lex_from_state_actions[ @cs] - when 85 then -# line 1 "NONE" - begin - @ts = p - end -# line 8463 "lib/parser/lexer-F1.rb" - end - _keys = @cs << 1 - _inds = _lex_index_offsets[ @cs] - _slen = _lex_key_spans[ @cs] - _wide = ( (@source_pts[p] || 0)) - _trans = if ( _slen > 0 && - _lex_trans_keys[_keys] <= _wide && - _wide <= _lex_trans_keys[_keys + 1] - ) then - _lex_indicies[ _inds + _wide - _lex_trans_keys[_keys] ] - else - _lex_indicies[ _inds + _slen ] - end - end - if _goto_level <= _eof_trans - @cs = _lex_trans_targs[_trans] - if _lex_trans_actions[_trans] != 0 - case _lex_trans_actions[_trans] - when 14 then -# line 539 "lib/parser/lexer.rl" - begin - - # Record position of a newline for precise location reporting on tNL - # tokens. - # - # This action is embedded directly into c_nl, as it is idempotent and - # there are no cases when we need to skip it. - @newline_s = p - end - when 15 then -# line 723 "lib/parser/lexer.rl" - begin - - p = on_newline(p) - end - when 45 then -# line 733 "lib/parser/lexer.rl" - begin - @sharp_s = p - 1 end - when 49 then -# line 736 "lib/parser/lexer.rl" - begin - emit_comment_from_range(p, pe) end - when 190 then -# line 777 "lib/parser/lexer.rl" - begin - tm = p end - when 22 then -# line 1061 "lib/parser/lexer.rl" - begin - tm = p end - when 24 then -# line 1074 "lib/parser/lexer.rl" - begin - tm = p end - when 26 then -# line 1102 "lib/parser/lexer.rl" - begin - tm = p end - when 56 then -# line 1299 "lib/parser/lexer.rl" - begin - heredoc_e = p end - when 229 then -# line 1400 "lib/parser/lexer.rl" - begin - tm = p - 1; diag_msg = :ivar_name end - when 232 then -# line 1401 "lib/parser/lexer.rl" - begin - tm = p - 2; diag_msg = :cvar_name end - when 244 then -# line 1488 "lib/parser/lexer.rl" - begin - tm = p end - when 188 then -# line 1595 "lib/parser/lexer.rl" - begin - ident_tok = tok; ident_ts = @ts; ident_te = @te; end - when 331 then -# line 1781 "lib/parser/lexer.rl" - begin - @num_base = 16; @num_digits_s = p end - when 325 then -# line 1782 "lib/parser/lexer.rl" - begin - @num_base = 10; @num_digits_s = p end - when 328 then -# line 1783 "lib/parser/lexer.rl" - begin - @num_base = 8; @num_digits_s = p end - when 322 then -# line 1784 "lib/parser/lexer.rl" - begin - @num_base = 2; @num_digits_s = p end - when 337 then -# line 1785 "lib/parser/lexer.rl" - begin - @num_base = 10; @num_digits_s = @ts end - when 299 then -# line 1786 "lib/parser/lexer.rl" - begin - @num_base = 8; @num_digits_s = @ts end - when 314 then -# line 1787 "lib/parser/lexer.rl" - begin - @num_suffix_s = p end - when 307 then -# line 1830 "lib/parser/lexer.rl" - begin - @num_suffix_s = p end - when 304 then -# line 1831 "lib/parser/lexer.rl" - begin - @num_suffix_s = p end - when 74 then -# line 2034 "lib/parser/lexer.rl" - begin - tm = p end - when 65 then -# line 1 "NONE" - begin - @te = p+1 - end - when 1 then -# line 848 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - emit_global_var - - @cs = (stack_pop); begin - p += 1 - _goto_level = _out - next - end - - end - end - when 87 then -# line 848 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - emit_global_var - - @cs = (stack_pop); begin - p += 1 - _goto_level = _out - next - end - - end - end - when 89 then -# line 855 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - emit_class_var - - @cs = (stack_pop); begin - p += 1 - _goto_level = _out - next - end - - end - end - when 88 then -# line 862 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - emit_instance_var - - @cs = (stack_pop); begin - p += 1 - _goto_level = _out - next - end - - end - end - when 110 then -# line 880 "lib/parser/lexer.rl" - begin - @te = p+1 - begin emit_table(KEYWORDS_BEGIN); - @cs = 247; begin - p += 1 - _goto_level = _out - next - end - end - end - when 96 then -# line 888 "lib/parser/lexer.rl" - begin - @te = p+1 - begin emit(:tIDENTIFIER) - @cs = 247; begin - p += 1 - _goto_level = _out - next - end - end - end - when 3 then -# line 892 "lib/parser/lexer.rl" - begin - @te = p+1 - begin p = @ts - 1 - @cs = 516; begin - @stack[ @top] = @cs - @top+= 1 - @cs = 129 - _goto_level = _again - next - end - end - end - when 93 then -# line 901 "lib/parser/lexer.rl" - begin - @te = p+1 - begin emit_table(PUNCTUATION) - @cs = 247; begin - p += 1 - _goto_level = _out - next - end - end - end - when 105 then -# line 905 "lib/parser/lexer.rl" - begin - @te = p+1 - begin p = p - 1; p = p - 1; begin - @cs = 516 - _goto_level = _again - next - end - end - end - when 5 then -# line 911 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - if version?(23) - type, delimiter = tok[0..-2], tok[-1].chr - @strings.push_literal(type, delimiter, @ts) - begin - @cs = 128 - _goto_level = _again - next - end - - else - p = @ts - 1 - begin - @cs = 516 - _goto_level = _again - next - end - - end - end - end - when 92 then -# line 925 "lib/parser/lexer.rl" - begin - @te = p+1 - begin p = p - 1; begin - @cs = 516 - _goto_level = _again - next - end - end - end - when 91 then -# line 566 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - # Sit at EOF indefinitely. #advance would return $eof each time. - # This allows to feed the lexer more data if needed; this is only used - # in tests. - # - # Note that this action is not embedded into e_eof like e_nl and e_bs - # below. This is due to the fact that scanner state at EOF is observed - # by tests, and encapsulating it in a rule would break the introspection. - p = p - 1; begin - p += 1 - _goto_level = _out - next - end - - end - end - when 109 then -# line 880 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin emit_table(KEYWORDS_BEGIN); - @cs = 247; begin - p += 1 - _goto_level = _out - next - end - end - end - when 106 then -# line 884 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin emit(:tCONSTANT) - @cs = 247; begin - p += 1 - _goto_level = _out - next - end - end - end - when 108 then -# line 888 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin emit(:tIDENTIFIER) - @cs = 247; begin - p += 1 - _goto_level = _out - next - end - end - end - when 103 then -# line 892 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin p = @ts - 1 - @cs = 516; begin - @stack[ @top] = @cs - @top+= 1 - @cs = 129 - _goto_level = _again - next - end - end - end - when 99 then -# line 901 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin emit_table(PUNCTUATION) - @cs = 247; begin - p += 1 - _goto_level = _out - next - end - end - end - when 104 then -# line 908 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin p = p - 1; begin - @cs = 345 - _goto_level = _again - next - end - end - end - when 97 then -# line 922 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; end - when 102 then -# line 925 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin p = p - 1; begin - @cs = 516 - _goto_level = _again - next - end - end - end - when 4 then -# line 901 "lib/parser/lexer.rl" - begin - begin p = (( @te))-1; end - begin emit_table(PUNCTUATION) - @cs = 247; begin - p += 1 - _goto_level = _out - next - end - end - end - when 2 then -# line 925 "lib/parser/lexer.rl" - begin - begin p = (( @te))-1; end - begin p = p - 1; begin - @cs = 516 - _goto_level = _again - next - end - end - end - when 95 then -# line 1 "NONE" - begin - case @act - when 4 then - begin begin p = (( @te))-1; end - emit_table(KEYWORDS_BEGIN); - @cs = 247; begin - p += 1 - _goto_level = _out - next - end - end - when 5 then - begin begin p = (( @te))-1; end - emit(:tCONSTANT) - @cs = 247; begin - p += 1 - _goto_level = _out - next - end - end - when 6 then - begin begin p = (( @te))-1; end - emit(:tIDENTIFIER) - @cs = 247; begin - p += 1 - _goto_level = _out - next - end - end -end - end - when 7 then -# line 937 "lib/parser/lexer.rl" - begin - @te = p+1 - begin emit(:tLABEL, tok(@ts, @te - 2), @ts, @te - 1) - p = p - 1; @cs = 501; begin - p += 1 - _goto_level = _out - next - end - end - end - when 8 then -# line 941 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - if @version >= 31 && @context.in_argdef - emit(:tBDOT3, '...'.freeze) - # emit(:tNL, "\n".freeze, @te - 1, @te) - @cs = 516; begin - p += 1 - _goto_level = _out - next - end - - else - p -= 3; - begin - @cs = 516 - _goto_level = _again - next - end - - end - end - end - when 112 then -# line 955 "lib/parser/lexer.rl" - begin - @te = p+1 - begin p = p - 1; begin - @cs = 516 - _goto_level = _again - next - end - end - end - when 111 then -# line 566 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - # Sit at EOF indefinitely. #advance would return $eof each time. - # This allows to feed the lexer more data if needed; this is only used - # in tests. - # - # Note that this action is not embedded into e_eof like e_nl and e_bs - # below. This is due to the fact that scanner state at EOF is observed - # by tests, and encapsulating it in a rule would break the introspection. - p = p - 1; begin - p += 1 - _goto_level = _out - next - end - - end - end - when 114 then -# line 952 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; end - when 113 then -# line 955 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin p = p - 1; begin - @cs = 516 - _goto_level = _again - next - end - end - end - when 6 then -# line 955 "lib/parser/lexer.rl" - begin - begin p = (( @te))-1; end - begin p = p - 1; begin - @cs = 516 - _goto_level = _again - next - end - end - end - when 120 then -# line 981 "lib/parser/lexer.rl" - begin - @te = p+1 - begin emit_table(PUNCTUATION) - @cs = 276; begin - p += 1 - _goto_level = _out - next - end - end - end - when 119 then -# line 987 "lib/parser/lexer.rl" - begin - @te = p+1 - begin p = p - 1; begin - @cs = 516 - _goto_level = _again - next - end - end - end - when 118 then -# line 566 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - # Sit at EOF indefinitely. #advance would return $eof each time. - # This allows to feed the lexer more data if needed; this is only used - # in tests. - # - # Note that this action is not embedded into e_eof like e_nl and e_bs - # below. This is due to the fact that scanner state at EOF is observed - # by tests, and encapsulating it in a rule would break the introspection. - p = p - 1; begin - p += 1 - _goto_level = _out - next - end - - end - end - when 130 then -# line 966 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin emit(:tCONSTANT) - @cs = (arg_or_cmdarg(cmd_state)); begin - p += 1 - _goto_level = _out - next - end - end - end - when 121 then -# line 970 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin emit(:tIDENTIFIER) - @cs = (arg_or_cmdarg(cmd_state)); begin - p += 1 - _goto_level = _out - next - end - end - end - when 126 then -# line 981 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin emit_table(PUNCTUATION) - @cs = 276; begin - p += 1 - _goto_level = _out - next - end - end - end - when 124 then -# line 984 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; end - when 129 then -# line 987 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin p = p - 1; begin - @cs = 516 - _goto_level = _again - next - end - end - end - when 153 then -# line 1047 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - # Unlike expr_beg as invoked in the next rule, do not warn - p = @ts - 1 - begin - @cs = 516 - _goto_level = _again - next - end - - end - end - when 136 then -# line 1065 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - check_ambiguous_slash(tm) - - p = tm - 1 - begin - @cs = 345 - _goto_level = _again - next - end - - end - end - when 142 then -# line 1086 "lib/parser/lexer.rl" - begin - @te = p+1 - begin p = p - 1; p = p - 1; begin - @cs = 345 - _goto_level = _again - next - end - end - end - when 10 then -# line 1094 "lib/parser/lexer.rl" - begin - @te = p+1 - begin p = @ts - 1; begin - @cs = 345 - _goto_level = _again - next - end - end - end - when 144 then -# line 1103 "lib/parser/lexer.rl" - begin - @te = p+1 - begin p = tm - 1; begin - @cs = 516 - _goto_level = _again - next - end - end - end - when 25 then -# line 1114 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - p = @ts - 1 - begin - @cs = 516 - _goto_level = _again - next - end - - end - end - when 131 then -# line 1128 "lib/parser/lexer.rl" - begin - @te = p+1 - begin p = p - 1; begin - @cs = 345 - _goto_level = _again - next - end - end - end - when 132 then -# line 566 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - # Sit at EOF indefinitely. #advance would return $eof each time. - # This allows to feed the lexer more data if needed; this is only used - # in tests. - # - # Note that this action is not embedded into e_eof like e_nl and e_bs - # below. This is due to the fact that scanner state at EOF is observed - # by tests, and encapsulating it in a rule would break the introspection. - p = p - 1; begin - p += 1 - _goto_level = _out - next - end - - end - end - when 143 then -# line 1056 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin p = p - 1; begin - @cs = 345 - _goto_level = _again - next - end - end - end - when 139 then -# line 1075 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - diagnostic :warning, :ambiguous_prefix, { :prefix => tok(tm, @te) }, - range(tm, @te) - - p = tm - 1 - begin - @cs = 345 - _goto_level = _again - next - end - - end - end - when 141 then -# line 1091 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin p = p - 1; begin - @cs = 345 - _goto_level = _again - next - end - end - end - when 135 then -# line 1114 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - p = @ts - 1 - begin - @cs = 516 - _goto_level = _again - next - end - - end - end - when 134 then -# line 1119 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; end - when 152 then -# line 1128 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin p = p - 1; begin - @cs = 345 - _goto_level = _again - next - end - end - end - when 11 then -# line 1119 "lib/parser/lexer.rl" - begin - begin p = (( @te))-1; end - end - when 27 then -# line 1128 "lib/parser/lexer.rl" - begin - begin p = (( @te))-1; end - begin p = p - 1; begin - @cs = 345 - _goto_level = _again - next - end - end - end - when 9 then -# line 1 "NONE" - begin - case @act - when 33 then - begin begin p = (( @te))-1; end - - check_ambiguous_slash(tm) - - p = tm - 1 - begin - @cs = 345 - _goto_level = _again - next - end - - end - when 34 then - begin begin p = (( @te))-1; end - - diagnostic :warning, :ambiguous_prefix, { :prefix => tok(tm, @te) }, - range(tm, @te) - - p = tm - 1 - begin - @cs = 345 - _goto_level = _again - next - end - - end - when 39 then - begin begin p = (( @te))-1; end - - p = @ts - 1 - begin - @cs = 516 - _goto_level = _again - next - end - - end - else - begin begin p = (( @te))-1; end -end -end - end - when 29 then -# line 1164 "lib/parser/lexer.rl" - begin - @te = p+1 - begin p = @ts - 1 - begin - @cs = 276 - _goto_level = _again - next - end - end - end - when 157 then -# line 566 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - # Sit at EOF indefinitely. #advance would return $eof each time. - # This allows to feed the lexer more data if needed; this is only used - # in tests. - # - # Note that this action is not embedded into e_eof like e_nl and e_bs - # below. This is due to the fact that scanner state at EOF is observed - # by tests, and encapsulating it in a rule would break the introspection. - p = p - 1; begin - p += 1 - _goto_level = _out - next - end - - end - end - when 158 then -# line 1164 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin p = @ts - 1 - begin - @cs = 276 - _goto_level = _again - next - end - end - end - when 30 then -# line 1164 "lib/parser/lexer.rl" - begin - begin p = (( @te))-1; end - begin p = @ts - 1 - begin - @cs = 276 - _goto_level = _again - next - end - end - end - when 28 then -# line 1 "NONE" - begin - case @act - when 46 then - begin begin p = (( @te))-1; end - - if @cond.active? - emit(:kDO_COND, 'do'.freeze, @te - 2, @te) - else - emit(:kDO, 'do'.freeze, @te - 2, @te) - end - @cs = 508; begin - p += 1 - _goto_level = _out - next - end - - end - when 47 then - begin begin p = (( @te))-1; end - p = @ts - 1 - begin - @cs = 276 - _goto_level = _again - next - end - end -end - end - when 168 then -# line 1200 "lib/parser/lexer.rl" - begin - @te = p+1 - begin emit_do(true) - @cs = 508; begin - p += 1 - _goto_level = _out - next - end - end - end - when 161 then -# line 1206 "lib/parser/lexer.rl" - begin - @te = p+1 - begin p = p - 1; begin - @cs = 516 - _goto_level = _again - next - end - end - end - when 162 then -# line 566 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - # Sit at EOF indefinitely. #advance would return $eof each time. - # This allows to feed the lexer more data if needed; this is only used - # in tests. - # - # Note that this action is not embedded into e_eof like e_nl and e_bs - # below. This is due to the fact that scanner state at EOF is observed - # by tests, and encapsulating it in a rule would break the introspection. - p = p - 1; begin - p += 1 - _goto_level = _out - next - end - - end - end - when 163 then -# line 1203 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; end - when 166 then -# line 1206 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin p = p - 1; begin - @cs = 516 - _goto_level = _again - next - end - end - end - when 172 then -# line 1230 "lib/parser/lexer.rl" - begin - @te = p+1 - begin p = p - 1; begin - @cs = 345 - _goto_level = _again - next - end - end - end - when 171 then -# line 566 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - # Sit at EOF indefinitely. #advance would return $eof each time. - # This allows to feed the lexer more data if needed; this is only used - # in tests. - # - # Note that this action is not embedded into e_eof like e_nl and e_bs - # below. This is due to the fact that scanner state at EOF is observed - # by tests, and encapsulating it in a rule would break the introspection. - p = p - 1; begin - p += 1 - _goto_level = _out - next - end - - end - end - when 180 then -# line 1222 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin p = @ts - 1; begin - @cs = 345 - _goto_level = _again - next - end - end - end - when 174 then -# line 1224 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; end - when 178 then -# line 1230 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin p = p - 1; begin - @cs = 345 - _goto_level = _again - next - end - end - end - when 173 then -# line 1 "NONE" - begin - case @act - when 54 then - begin begin p = (( @te))-1; end - emit_table(KEYWORDS) - @cs = 345; begin - p += 1 - _goto_level = _out - next - end - end - when 55 then - begin begin p = (( @te))-1; end - p = @ts - 1; begin - @cs = 345 - _goto_level = _again - next - end - end -end - end - when 42 then -# line 1245 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - emit(:tUNARY_NUM, tok(@ts, @ts + 1), @ts, @ts + 1) - p = p - 1; @cs = 516; begin - p += 1 - _goto_level = _out - next - end - - end - end - when 214 then -# line 1262 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - type = delimiter = tok[0].chr - @strings.push_literal(type, delimiter, @ts) - - p = p - 1; - begin - @cs = 128 - _goto_level = _again - next - end - - end - end - when 206 then -# line 1272 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - type, delimiter = @source_buffer.slice(@ts, 1).chr, tok[-1].chr - @strings.push_literal(type, delimiter, @ts) - begin - @cs = 128 - _goto_level = _again - next - end - - end - end - when 40 then -# line 1280 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - type, delimiter = tok[0..-2], tok[-1].chr - @strings.push_literal(type, delimiter, @ts) - begin - @cs = 128 - _goto_level = _again - next - end - - end - end - when 227 then -# line 1357 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - p = p - 1; p = p - 1; - emit(:tSYMBEG, tok(@ts, @ts + 1), @ts, @ts + 1) - begin - @cs = 134 - _goto_level = _again - next - end - - end - end - when 215 then -# line 1365 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - type, delimiter = tok, tok[-1].chr - @strings.push_literal(type, delimiter, @ts); - - begin - @cs = 128 - _goto_level = _again - next - end - - end - end - when 226 then -# line 1375 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - emit(:tSYMBOL, tok(@ts + 1, @ts + 2)) - @cs = 516; begin - p += 1 - _goto_level = _out - next - end - - end - end - when 54 then -# line 1389 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - gvar_name = tok(@ts + 1) - - if @version >= 33 && gvar_name.start_with?('$0') && gvar_name.length > 2 - diagnostic :error, :gvar_name, { :name => gvar_name }, range(@ts + 1, @te) - end - - emit(:tSYMBOL, gvar_name, @ts) - @cs = 516; begin - p += 1 - _goto_level = _out - next - end - - end - end - when 236 then -# line 1416 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - p, next_state = @strings.read_character_constant(@ts) - p = p - 1; # Ragel will do `p += 1` to consume input, prevent it - - # If strings lexer founds a character constant (?a) emit it, - # otherwise read ternary operator - if @token_queue.empty? - begin - @cs = (next_state) - _goto_level = _again - next - end - - else - @cs = (next_state); - begin - p += 1 - _goto_level = _out - next - end - - end - end - end - when 237 then -# line 1431 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - diagnostic :fatal, :incomplete_escape, nil, range(@ts, @ts + 1) - end - end - when 216 then -# line 1483 "lib/parser/lexer.rl" - begin - @te = p+1 - begin emit_table(PUNCTUATION_BEGIN) - begin - p += 1 - _goto_level = _out - next - end - end - end - when 37 then -# line 1504 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - p = p - 1; - - if version?(18) - ident = tok(@ts, @te - 2) - - emit((@source_buffer.slice(@ts, 1) =~ /[A-Z]/) ? :tCONSTANT : :tIDENTIFIER, - ident, @ts, @te - 2) - p = p - 1; # continue as a symbol - - if !@static_env.nil? && @static_env.declared?(ident) - @cs = 516; - else - @cs = (arg_or_cmdarg(cmd_state)); - end - else - emit(:tLABEL, tok(@ts, @te - 2), @ts, @te - 1) - @cs = 501; - end - - begin - p += 1 - _goto_level = _out - next - end - - end - end - when 34 then -# line 1597 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - emit(:tIDENTIFIER, ident_tok, ident_ts, ident_te) - p = ident_te - 1 - - if !@static_env.nil? && @static_env.declared?(ident_tok) && @version < 25 - @cs = 247; - else - @cs = 307; - end - begin - p += 1 - _goto_level = _out - next - end - - end - end - when 200 then -# line 1616 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - p = @ts - 1 - @cs_before_block_comment = @cs - begin - @cs = 710 - _goto_level = _again - next - end - - end - end - when 41 then -# line 1632 "lib/parser/lexer.rl" - begin - @te = p+1 - begin p = @ts - 1; begin - @cs = 516 - _goto_level = _again - next - end - end - end - when 183 then -# line 566 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - # Sit at EOF indefinitely. #advance would return $eof each time. - # This allows to feed the lexer more data if needed; this is only used - # in tests. - # - # Note that this action is not embedded into e_eof like e_nl and e_bs - # below. This is due to the fact that scanner state at EOF is observed - # by tests, and encapsulating it in a rule would break the introspection. - p = p - 1; begin - p += 1 - _goto_level = _out - next - end - - end - end - when 210 then -# line 1245 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - emit(:tUNARY_NUM, tok(@ts, @ts + 1), @ts, @ts + 1) - p = p - 1; @cs = 516; begin - p += 1 - _goto_level = _out - next - end - - end - end - when 209 then -# line 1252 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin emit(:tSTAR, '*'.freeze) - begin - p += 1 - _goto_level = _out - next - end - end - end - when 205 then -# line 1287 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - diagnostic :fatal, :string_eof, nil, range(@ts, @ts + 1) - end - end - when 234 then -# line 1348 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - diagnostic :error, :unterminated_heredoc_id, nil, range(@ts, @ts + 1) - end - end - when 217 then -# line 1389 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - gvar_name = tok(@ts + 1) - - if @version >= 33 && gvar_name.start_with?('$0') && gvar_name.length > 2 - diagnostic :error, :gvar_name, { :name => gvar_name }, range(@ts + 1, @te) - end - - emit(:tSYMBOL, gvar_name, @ts) - @cs = 516; begin - p += 1 - _goto_level = _out - next - end - - end - end - when 230 then -# line 1403 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - emit_colon_with_digits(p, tm, diag_msg) - - @cs = 516; begin - p += 1 - _goto_level = _out - next - end - - end - end - when 235 then -# line 1431 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - diagnostic :fatal, :incomplete_escape, nil, range(@ts, @ts + 1) - end - end - when 207 then -# line 1483 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin emit_table(PUNCTUATION_BEGIN) - begin - p += 1 - _goto_level = _out - next - end - end - end - when 211 then -# line 1531 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - if @version >= 27 - emit(:tBDOT2) - else - emit(:tDOT2) - end - - @cs = 345; begin - p += 1 - _goto_level = _out - next - end - - end - end - when 212 then -# line 1542 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - # Here we scan and conditionally emit "\n": - # + if it's there - # + and emitted we do nothing - # + and not emitted we return `p` to "\n" to process it on the next scan - # + if it's not there we do nothing - followed_by_nl = @te - 1 == @newline_s - nl_emitted = false - dots_te = followed_by_nl ? @te - 1 : @te - - if @version >= 30 - if @lambda_stack.any? && @lambda_stack.last + 1 == @paren_nest - # To reject `->(...)` like `->...` - emit(:tDOT3, '...'.freeze, @ts, dots_te) - else - emit(:tBDOT3, '...'.freeze, @ts, dots_te) - - if @version >= 31 && followed_by_nl && @context.in_argdef - emit(:tNL, @te - 1, @te) - nl_emitted = true - end - end - elsif @version >= 27 - emit(:tBDOT3, '...'.freeze, @ts, dots_te) - else - emit(:tDOT3, '...'.freeze, @ts, dots_te) - end - - if followed_by_nl && !nl_emitted - # return "\n" to process it on the next scan - p = p - 1; - end - - @cs = 345; begin - p += 1 - _goto_level = _out - next - end - - end - end - when 187 then -# line 831 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - emit(:tIDENTIFIER) - - if !@static_env.nil? && @static_env.declared?(tok) - @cs = 247; begin - p += 1 - _goto_level = _out - next - end - - elsif @version >= 32 && tok =~ /\A_[1-9]\z/ - @cs = 247; begin - p += 1 - _goto_level = _out - next - end - - else - @cs = (arg_or_cmdarg(cmd_state)); begin - p += 1 - _goto_level = _out - next - end - - end - end - end - when 197 then -# line 1613 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; end - when 199 then -# line 1616 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - p = @ts - 1 - @cs_before_block_comment = @cs - begin - @cs = 710 - _goto_level = _again - next - end - - end - end - when 202 then -# line 1632 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin p = @ts - 1; begin - @cs = 516 - _goto_level = _again - next - end - end - end - when 39 then -# line 1287 "lib/parser/lexer.rl" - begin - begin p = (( @te))-1; end - begin - diagnostic :fatal, :string_eof, nil, range(@ts, @ts + 1) - end - end - when 58 then -# line 1348 "lib/parser/lexer.rl" - begin - begin p = (( @te))-1; end - begin - diagnostic :error, :unterminated_heredoc_id, nil, range(@ts, @ts + 1) - end - end - when 33 then -# line 831 "lib/parser/lexer.rl" - begin - begin p = (( @te))-1; end - begin - emit(:tIDENTIFIER) - - if !@static_env.nil? && @static_env.declared?(tok) - @cs = 247; begin - p += 1 - _goto_level = _out - next - end - - elsif @version >= 32 && tok =~ /\A_[1-9]\z/ - @cs = 247; begin - p += 1 - _goto_level = _out - next - end - - else - @cs = (arg_or_cmdarg(cmd_state)); begin - p += 1 - _goto_level = _out - next - end - - end - end - end - when 38 then -# line 1613 "lib/parser/lexer.rl" - begin - begin p = (( @te))-1; end - end - when 53 then -# line 1632 "lib/parser/lexer.rl" - begin - begin p = (( @te))-1; end - begin p = @ts - 1; begin - @cs = 516 - _goto_level = _again - next - end - end - end - when 36 then -# line 1 "NONE" - begin - case @act - when 60 then - begin begin p = (( @te))-1; end - - emit(:tUNARY_NUM, tok(@ts, @ts + 1), @ts, @ts + 1) - p = p - 1; @cs = 516; begin - p += 1 - _goto_level = _out - next - end - - end - when 67 then - begin begin p = (( @te))-1; end - - diagnostic :error, :unterminated_heredoc_id, nil, range(@ts, @ts + 1) - end - when 76 then - begin begin p = (( @te))-1; end - - if @version >= 27 - emit(:tPIPE, tok(@ts, @ts + 1), @ts, @ts + 1) - p = p - 1; - @cs = 345; begin - p += 1 - _goto_level = _out - next - end - - else - p -= 2 - begin - @cs = 516 - _goto_level = _again - next - end - - end - end - when 80 then - begin begin p = (( @te))-1; end - emit_table(PUNCTUATION_BEGIN) - begin - p += 1 - _goto_level = _out - next - end - end - when 81 then - begin begin p = (( @te))-1; end - emit(:kRESCUE, 'rescue'.freeze, @ts, tm) - p = tm - 1 - @cs = 321; begin - p += 1 - _goto_level = _out - next - end - end - when 82 then - begin begin p = (( @te))-1; end - emit_table(KEYWORDS_BEGIN) - @command_start = true - @cs = 508; begin - p += 1 - _goto_level = _out - next - end - end - when 86 then - begin begin p = (( @te))-1; end - p = @ts - 1 - begin - @cs = 516 - _goto_level = _again - next - end - end - when 87 then - begin begin p = (( @te))-1; end - - emit(:tIDENTIFIER) - - if !@static_env.nil? && @static_env.declared?(tok) - @cs = 247; begin - p += 1 - _goto_level = _out - next - end - - elsif @version >= 32 && tok =~ /\A_[1-9]\z/ - @cs = 247; begin - p += 1 - _goto_level = _out - next - end - - else - @cs = (arg_or_cmdarg(cmd_state)); begin - p += 1 - _goto_level = _out - next - end - - end - end - when 91 then - begin begin p = (( @te))-1; end - p = @ts - 1; begin - @cs = 516 - _goto_level = _again - next - end - end -end - end - when 247 then -# line 1652 "lib/parser/lexer.rl" - begin - @te = p+1 - begin p = p - 1; begin - @cs = 345 - _goto_level = _again - next - end - end - end - when 248 then -# line 566 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - # Sit at EOF indefinitely. #advance would return $eof each time. - # This allows to feed the lexer more data if needed; this is only used - # in tests. - # - # Note that this action is not embedded into e_eof like e_nl and e_bs - # below. This is due to the fact that scanner state at EOF is observed - # by tests, and encapsulating it in a rule would break the introspection. - p = p - 1; begin - p += 1 - _goto_level = _out - next - end - - end - end - when 249 then -# line 1640 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; end - when 253 then -# line 1652 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin p = p - 1; begin - @cs = 345 - _goto_level = _again - next - end - end - end - when 61 then -# line 1662 "lib/parser/lexer.rl" - begin - @te = p+1 - begin p = @ts - 1 - begin - @cs = 516 - _goto_level = _again - next - end - end - end - when 257 then -# line 1667 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - @strings.push_literal(tok, tok, @ts) - begin - @cs = 128 - _goto_level = _again - next - end - - end - end - when 256 then -# line 1678 "lib/parser/lexer.rl" - begin - @te = p+1 - begin p = p - 1; begin - @cs = 345 - _goto_level = _again - next - end - end - end - when 255 then -# line 566 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - # Sit at EOF indefinitely. #advance would return $eof each time. - # This allows to feed the lexer more data if needed; this is only used - # in tests. - # - # Note that this action is not embedded into e_eof like e_nl and e_bs - # below. This is due to the fact that scanner state at EOF is observed - # by tests, and encapsulating it in a rule would break the introspection. - p = p - 1; begin - p += 1 - _goto_level = _out - next - end - - end - end - when 259 then -# line 1672 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; end - when 258 then -# line 1678 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin p = p - 1; begin - @cs = 345 - _goto_level = _again - next - end - end - end - when 60 then -# line 1678 "lib/parser/lexer.rl" - begin - begin p = (( @te))-1; end - begin p = p - 1; begin - @cs = 345 - _goto_level = _again - next - end - end - end - when 292 then -# line 1689 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - emit(:tLAMBDA, '->'.freeze, @ts, @ts + 2) - - @lambda_stack.push @paren_nest - @cs = 247; begin - p += 1 - _goto_level = _out - next - end - - end - end - when 71 then -# line 1730 "lib/parser/lexer.rl" - begin - @te = p+1 - begin emit_singleton_class - @cs = 508; begin - p += 1 - _goto_level = _out - next - end - end - end - when 267 then -# line 1851 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - type, delimiter = tok, tok[-1].chr - @strings.push_literal(type, delimiter, @ts, nil, false, false, true); - begin - @cs = 128 - _goto_level = _again - next - end - - end - end - when 63 then -# line 1870 "lib/parser/lexer.rl" - begin - @te = p+1 - begin p = @ts - 1; begin - @stack[ @top] = @cs - @top+= 1 - @cs = 129 - _goto_level = _again - next - end - end - end - when 288 then -# line 1877 "lib/parser/lexer.rl" - begin - @te = p+1 - begin emit_table(PUNCTUATION) - @cs = 255; begin - p += 1 - _goto_level = _out - next - end - end - end - when 341 then -# line 1901 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - emit_table(PUNCTUATION) - @cs = 508; begin - p += 1 - _goto_level = _out - next - end - - end - end - when 281 then -# line 1910 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - emit_table(PUNCTUATION); - @cs = 508; begin - p += 1 - _goto_level = _out - next - end - - end - end - when 286 then -# line 1937 "lib/parser/lexer.rl" - begin - @te = p+1 - begin emit(:tOP_ASGN, tok(@ts, @te - 1)) - @cs = 345; begin - p += 1 - _goto_level = _out - next - end - end - end - when 272 then -# line 1941 "lib/parser/lexer.rl" - begin - @te = p+1 - begin emit(:tEH, '?'.freeze) - @cs = 508; begin - p += 1 - _goto_level = _out - next - end - end - end - when 269 then -# line 1960 "lib/parser/lexer.rl" - begin - @te = p+1 - begin emit_table(PUNCTUATION) - @cs = 345; begin - p += 1 - _goto_level = _out - next - end - end - end - when 271 then -# line 1973 "lib/parser/lexer.rl" - begin - @te = p+1 - begin emit(:tSEMI, ';'.freeze) - @command_start = true - @cs = 508; begin - p += 1 - _goto_level = _out - next - end - end - end - when 346 then -# line 1977 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - diagnostic :error, :bare_backslash, nil, range(@ts, @ts + 1) - p = p - 1; - end - end - when 266 then -# line 1983 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - diagnostic :fatal, :unexpected, { :character => tok.inspect[1..-2] } - end - end - when 265 then -# line 566 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - # Sit at EOF indefinitely. #advance would return $eof each time. - # This allows to feed the lexer more data if needed; this is only used - # in tests. - # - # Note that this action is not embedded into e_eof like e_nl and e_bs - # below. This is due to the fact that scanner state at EOF is observed - # by tests, and encapsulating it in a rule would break the introspection. - p = p - 1; begin - p += 1 - _goto_level = _out - next - end - - end - end - when 357 then -# line 1726 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin emit_table(KEYWORDS) - @cs = 134; begin - p += 1 - _goto_level = _out - next - end - end - end - when 355 then -# line 1730 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin emit_singleton_class - @cs = 508; begin - p += 1 - _goto_level = _out - next - end - end - end - when 354 then -# line 1740 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin emit_table(KEYWORDS) - @command_start = true - @cs = 508; begin - p += 1 - _goto_level = _out - next - end - end - end - when 296 then -# line 1801 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - diagnostic :error, :no_dot_digit_literal - end - end - when 343 then -# line 1862 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin emit(:tCONSTANT) - @cs = (arg_or_cmdarg(cmd_state)); begin - p += 1 - _goto_level = _out - next - end - end - end - when 285 then -# line 1870 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin p = @ts - 1; begin - @stack[ @top] = @cs - @top+= 1 - @cs = 129 - _goto_level = _again - next - end - end - end - when 293 then -# line 1877 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin emit_table(PUNCTUATION) - @cs = 255; begin - p += 1 - _goto_level = _out - next - end - end - end - when 349 then -# line 831 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - emit(:tIDENTIFIER) - - if !@static_env.nil? && @static_env.declared?(tok) - @cs = 247; begin - p += 1 - _goto_level = _out - next - end - - elsif @version >= 32 && tok =~ /\A_[1-9]\z/ - @cs = 247; begin - p += 1 - _goto_level = _out - next - end - - else - @cs = (arg_or_cmdarg(cmd_state)); begin - p += 1 - _goto_level = _out - next - end - - end - end - end - when 291 then -# line 1901 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - emit_table(PUNCTUATION) - @cs = 508; begin - p += 1 - _goto_level = _out - next - end - - end - end - when 287 then -# line 1910 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - emit_table(PUNCTUATION); - @cs = 508; begin - p += 1 - _goto_level = _out - next - end - - end - end - when 280 then -# line 1916 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin emit_table(PUNCTUATION) - @cs = 345; begin - p += 1 - _goto_level = _out - next - end - end - end - when 294 then -# line 1960 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin emit_table(PUNCTUATION) - @cs = 345; begin - p += 1 - _goto_level = _out - next - end - end - end - when 278 then -# line 1967 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; end - when 284 then -# line 1983 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - diagnostic :fatal, :unexpected, { :character => tok.inspect[1..-2] } - end - end - when 69 then -# line 1788 "lib/parser/lexer.rl" - begin - begin p = (( @te))-1; end - begin - digits = numeric_literal_int - - if version?(18, 19, 20) - emit(:tINTEGER, digits.to_i(@num_base), @ts, @num_suffix_s) - p = @num_suffix_s - 1 - else - p = @num_xfrm.call(digits.to_i(@num_base), p) - end - begin - p += 1 - _goto_level = _out - next - end - - end - end - when 64 then -# line 1801 "lib/parser/lexer.rl" - begin - begin p = (( @te))-1; end - begin - diagnostic :error, :no_dot_digit_literal - end - end - when 68 then -# line 1833 "lib/parser/lexer.rl" - begin - begin p = (( @te))-1; end - begin - digits = tok(@ts, @num_suffix_s) - - if version?(18, 19, 20) - emit(:tFLOAT, Float(digits), @ts, @num_suffix_s) - p = @num_suffix_s - 1 - else - p = @num_xfrm.call(digits, p) - end - begin - p += 1 - _goto_level = _out - next - end - - end - end - when 62 then -# line 1983 "lib/parser/lexer.rl" - begin - begin p = (( @te))-1; end - begin - diagnostic :fatal, :unexpected, { :character => tok.inspect[1..-2] } - end - end - when 66 then -# line 1 "NONE" - begin - case @act - when 104 then - begin begin p = (( @te))-1; end - - if @lambda_stack.last == @paren_nest - @lambda_stack.pop - - if tok == '{'.freeze - emit(:tLAMBEG, '{'.freeze) - else # 'do' - emit(:kDO_LAMBDA, 'do'.freeze) - end - else - if tok == '{'.freeze - emit(:tLCURLY, '{'.freeze) - else # 'do' - emit_do - end - end - if tok == '{'.freeze - @paren_nest += 1 - end - @command_start = true - - @cs = 508; begin - p += 1 - _goto_level = _out - next - end - - end - when 105 then - begin begin p = (( @te))-1; end - emit_table(KEYWORDS) - @cs = 134; begin - p += 1 - _goto_level = _out - next - end - end - when 106 then - begin begin p = (( @te))-1; end - emit_singleton_class - @cs = 508; begin - p += 1 - _goto_level = _out - next - end - end - when 107 then - begin begin p = (( @te))-1; end - emit_table(KEYWORDS) - @cs = 345; begin - p += 1 - _goto_level = _out - next - end - end - when 108 then - begin begin p = (( @te))-1; end - emit_table(KEYWORDS) - @command_start = true - @cs = 508; begin - p += 1 - _goto_level = _out - next - end - end - when 109 then - begin begin p = (( @te))-1; end - emit_table(KEYWORDS) - @cs = 321; begin - p += 1 - _goto_level = _out - next - end - end - when 110 then - begin begin p = (( @te))-1; end - - emit_table(KEYWORDS) - - if version?(18) && tok == 'not'.freeze - @cs = 345; begin - p += 1 - _goto_level = _out - next - end - - else - @cs = 276; begin - p += 1 - _goto_level = _out - next - end - - end - end - when 111 then - begin begin p = (( @te))-1; end - - if version?(18) - emit(:tIDENTIFIER) - - unless !@static_env.nil? && @static_env.declared?(tok) - @cs = (arg_or_cmdarg(cmd_state)); - end - else - emit(:k__ENCODING__, '__ENCODING__'.freeze) - end - begin - p += 1 - _goto_level = _out - next - end - - end - when 112 then - begin begin p = (( @te))-1; end - emit_table(KEYWORDS) - begin - p += 1 - _goto_level = _out - next - end - end - when 113 then - begin begin p = (( @te))-1; end - - digits = numeric_literal_int - - if version?(18, 19, 20) - emit(:tINTEGER, digits.to_i(@num_base), @ts, @num_suffix_s) - p = @num_suffix_s - 1 - else - p = @num_xfrm.call(digits.to_i(@num_base), p) - end - begin - p += 1 - _goto_level = _out - next - end - - end - when 115 then - begin begin p = (( @te))-1; end - - if version?(18, 19, 20) - diagnostic :error, - :trailing_in_number, { :character => tok(@te - 1, @te) }, - range(@te - 1, @te) - else - emit(:tINTEGER, tok(@ts, @te - 1).to_i, @ts, @te - 1) - p = p - 1; begin - p += 1 - _goto_level = _out - next - end - - end - end - when 116 then - begin begin p = (( @te))-1; end - - if version?(18, 19, 20) - diagnostic :error, - :trailing_in_number, { :character => tok(@te - 1, @te) }, - range(@te - 1, @te) - else - emit(:tFLOAT, tok(@ts, @te - 1).to_f, @ts, @te - 1) - p = p - 1; begin - p += 1 - _goto_level = _out - next - end - - end - end - when 117 then - begin begin p = (( @te))-1; end - - digits = tok(@ts, @num_suffix_s) - - if version?(18, 19, 20) - emit(:tFLOAT, Float(digits), @ts, @num_suffix_s) - p = @num_suffix_s - 1 - else - p = @num_xfrm.call(digits, p) - end - begin - p += 1 - _goto_level = _out - next - end - - end - when 119 then - begin begin p = (( @te))-1; end - emit(:tCONSTANT) - @cs = (arg_or_cmdarg(cmd_state)); begin - p += 1 - _goto_level = _out - next - end - end - when 123 then - begin begin p = (( @te))-1; end - - emit(:tIDENTIFIER) - - if !@static_env.nil? && @static_env.declared?(tok) - @cs = 247; begin - p += 1 - _goto_level = _out - next - end - - elsif @version >= 32 && tok =~ /\A_[1-9]\z/ - @cs = 247; begin - p += 1 - _goto_level = _out - next - end - - else - @cs = (arg_or_cmdarg(cmd_state)); begin - p += 1 - _goto_level = _out - next - end - - end - end - when 124 then - begin begin p = (( @te))-1; end - - if tm == @te - # Suffix was consumed, e.g. foo! - emit(:tFID) - else - # Suffix was not consumed, e.g. foo!= - emit(:tIDENTIFIER, tok(@ts, tm), @ts, tm) - p = tm - 1 - end - @cs = 276; begin - p += 1 - _goto_level = _out - next - end - - end - when 126 then - begin begin p = (( @te))-1; end - - emit_table(PUNCTUATION); - @cs = 508; begin - p += 1 - _goto_level = _out - next - end - - end - when 127 then - begin begin p = (( @te))-1; end - emit_table(PUNCTUATION) - @cs = 345; begin - p += 1 - _goto_level = _out - next - end - end -end - end - when 368 then -# line 2024 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - emit(:tNL, nil, @newline_s, @newline_s + 1) - if @version < 27 - p = p - 1; @cs = 710; begin - p += 1 - _goto_level = _out - next - end - - else - emit(:tBDOT3) - @cs = 345; begin - p += 1 - _goto_level = _out - next - end - - end - end - end - when 80 then -# line 2035 "lib/parser/lexer.rl" - begin - @te = p+1 - begin p = tm - 1; begin - @cs = 516 - _goto_level = _again - next - end - end - end - when 362 then -# line 2038 "lib/parser/lexer.rl" - begin - @te = p+1 - begin emit(:tNL, nil, @newline_s, @newline_s + 1) - p = p - 1; @cs = 710; begin - p += 1 - _goto_level = _out - next - end - end - end - when 365 then -# line 1999 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - if @version < 27 - # Ruby before 2.7 doesn't support comments before leading dot. - # If a line after "a" starts with a comment then "a" is a self-contained statement. - # So in that case we emit a special tNL token and start reading the - # next line as a separate statement. - # - # Note: block comments before leading dot are not supported on any version of Ruby. - emit(:tNL, nil, @newline_s, @newline_s + 1) - p = p - 1; @cs = 710; begin - p += 1 - _goto_level = _out - next - end - - end - end - end - when 367 then -# line 2013 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - emit(:tNL, nil, @newline_s, @newline_s + 1) - if @version < 27 - p = p - 1; @cs = 710; begin - p += 1 - _goto_level = _out - next - end - - else - emit(:tBDOT2) - @cs = 345; begin - p += 1 - _goto_level = _out - next - end - - end - end - end - when 366 then -# line 2035 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin p = tm - 1; begin - @cs = 516 - _goto_level = _again - next - end - end - end - when 364 then -# line 2038 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin emit(:tNL, nil, @newline_s, @newline_s + 1) - p = p - 1; @cs = 710; begin - p += 1 - _goto_level = _out - next - end - end - end - when 75 then -# line 1999 "lib/parser/lexer.rl" - begin - begin p = (( @te))-1; end - begin - if @version < 27 - # Ruby before 2.7 doesn't support comments before leading dot. - # If a line after "a" starts with a comment then "a" is a self-contained statement. - # So in that case we emit a special tNL token and start reading the - # next line as a separate statement. - # - # Note: block comments before leading dot are not supported on any version of Ruby. - emit(:tNL, nil, @newline_s, @newline_s + 1) - p = p - 1; @cs = 710; begin - p += 1 - _goto_level = _out - next - end - - end - end - end - when 72 then -# line 2038 "lib/parser/lexer.rl" - begin - begin p = (( @te))-1; end - begin emit(:tNL, nil, @newline_s, @newline_s + 1) - p = p - 1; @cs = 710; begin - p += 1 - _goto_level = _out - next - end - end - end - when 76 then -# line 1 "NONE" - begin - case @act - when 140 then - begin begin p = (( @te))-1; end - - if @version < 27 - # Ruby before 2.7 doesn't support comments before leading dot. - # If a line after "a" starts with a comment then "a" is a self-contained statement. - # So in that case we emit a special tNL token and start reading the - # next line as a separate statement. - # - # Note: block comments before leading dot are not supported on any version of Ruby. - emit(:tNL, nil, @newline_s, @newline_s + 1) - p = p - 1; @cs = 710; begin - p += 1 - _goto_level = _out - next - end - - end - end - when 144 then - begin begin p = (( @te))-1; end - emit(:tNL, nil, @newline_s, @newline_s + 1) - p = p - 1; @cs = 710; begin - p += 1 - _goto_level = _out - next - end - end -end - end - when 371 then -# line 2048 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - emit_comment(@eq_begin_s, @te) - begin - @cs = (@cs_before_block_comment) - _goto_level = _again - next - end - - end - end - when 370 then -# line 2056 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - diagnostic :fatal, :embedded_document, nil, - range(@eq_begin_s, @eq_begin_s + '=begin'.length) - end - end - when 381 then -# line 2066 "lib/parser/lexer.rl" - begin - @te = p+1 - begin @eq_begin_s = @ts - begin - @cs = 704 - _goto_level = _again - next - end - end - end - when 82 then -# line 2070 "lib/parser/lexer.rl" - begin - @te = p+1 - begin p = pe - 3 end - end - when 373 then -# line 2073 "lib/parser/lexer.rl" - begin - @te = p+1 - begin cmd_state = true; p = p - 1; begin - @cs = 508 - _goto_level = _again - next - end - end - end - when 374 then -# line 566 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - # Sit at EOF indefinitely. #advance would return $eof each time. - # This allows to feed the lexer more data if needed; this is only used - # in tests. - # - # Note that this action is not embedded into e_eof like e_nl and e_bs - # below. This is due to the fact that scanner state at EOF is observed - # by tests, and encapsulating it in a rule would break the introspection. - p = p - 1; begin - p += 1 - _goto_level = _out - next - end - - end - end - when 375 then -# line 2063 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; end - when 380 then -# line 2066 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin @eq_begin_s = @ts - begin - @cs = 704 - _goto_level = _again - next - end - end - end - when 379 then -# line 2073 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin cmd_state = true; p = p - 1; begin - @cs = 508 - _goto_level = _again - next - end - end - end - when 81 then -# line 2073 "lib/parser/lexer.rl" - begin - begin p = (( @te))-1; end - begin cmd_state = true; p = p - 1; begin - @cs = 508 - _goto_level = _again - next - end - end - end - when 86 then -# line 2080 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - p, next_state = @strings.advance(p) - - p = p - 1; # Ragel will do `p += 1` to consume input, prevent it - @cs = (next_state); - begin - p += 1 - _goto_level = _out - next - end - - end - end - when 52 then -# line 539 "lib/parser/lexer.rl" - begin - - # Record position of a newline for precise location reporting on tNL - # tokens. - # - # This action is embedded directly into c_nl, as it is idempotent and - # there are no cases when we need to skip it. - @newline_s = p - end -# line 736 "lib/parser/lexer.rl" - begin - emit_comment_from_range(p, pe) end - when 154 then -# line 539 "lib/parser/lexer.rl" - begin - - # Record position of a newline for precise location reporting on tNL - # tokens. - # - # This action is embedded directly into c_nl, as it is idempotent and - # there are no cases when we need to skip it. - @newline_s = p - end -# line 1047 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - # Unlike expr_beg as invoked in the next rule, do not warn - p = @ts - 1 - begin - @cs = 516 - _goto_level = _again - next - end - - end - end - when 145 then -# line 539 "lib/parser/lexer.rl" - begin - - # Record position of a newline for precise location reporting on tNL - # tokens. - # - # This action is embedded directly into c_nl, as it is idempotent and - # there are no cases when we need to skip it. - @newline_s = p - end -# line 1103 "lib/parser/lexer.rl" - begin - @te = p+1 - begin p = tm - 1; begin - @cs = 516 - _goto_level = _again - next - end - end - end - when 137 then -# line 539 "lib/parser/lexer.rl" - begin - - # Record position of a newline for precise location reporting on tNL - # tokens. - # - # This action is embedded directly into c_nl, as it is idempotent and - # there are no cases when we need to skip it. - @newline_s = p - end -# line 1114 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - p = @ts - 1 - begin - @cs = 516 - _goto_level = _again - next - end - - end - end - when 213 then -# line 539 "lib/parser/lexer.rl" - begin - - # Record position of a newline for precise location reporting on tNL - # tokens. - # - # This action is embedded directly into c_nl, as it is idempotent and - # there are no cases when we need to skip it. - @newline_s = p - end -# line 1542 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - # Here we scan and conditionally emit "\n": - # + if it's there - # + and emitted we do nothing - # + and not emitted we return `p` to "\n" to process it on the next scan - # + if it's not there we do nothing - followed_by_nl = @te - 1 == @newline_s - nl_emitted = false - dots_te = followed_by_nl ? @te - 1 : @te - - if @version >= 30 - if @lambda_stack.any? && @lambda_stack.last + 1 == @paren_nest - # To reject `->(...)` like `->...` - emit(:tDOT3, '...'.freeze, @ts, dots_te) - else - emit(:tBDOT3, '...'.freeze, @ts, dots_te) - - if @version >= 31 && followed_by_nl && @context.in_argdef - emit(:tNL, @te - 1, @te) - nl_emitted = true - end - end - elsif @version >= 27 - emit(:tBDOT3, '...'.freeze, @ts, dots_te) - else - emit(:tDOT3, '...'.freeze, @ts, dots_te) - end - - if followed_by_nl && !nl_emitted - # return "\n" to process it on the next scan - p = p - 1; - end - - @cs = 345; begin - p += 1 - _goto_level = _out - next - end - - end - end - when 201 then -# line 539 "lib/parser/lexer.rl" - begin - - # Record position of a newline for precise location reporting on tNL - # tokens. - # - # This action is embedded directly into c_nl, as it is idempotent and - # there are no cases when we need to skip it. - @newline_s = p - end -# line 1616 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - p = @ts - 1 - @cs_before_block_comment = @cs - begin - @cs = 710 - _goto_level = _again - next - end - - end - end - when 295 then -# line 539 "lib/parser/lexer.rl" - begin - - # Record position of a newline for precise location reporting on tNL - # tokens. - # - # This action is embedded directly into c_nl, as it is idempotent and - # there are no cases when we need to skip it. - @newline_s = p - end -# line 1949 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - if @paren_nest == 0 - diagnostic :warning, :triple_dot_at_eol, nil, range(@ts, @te - 1) - end - - emit(:tDOT3, '...'.freeze, @ts, @te - 1) - p = p - 1; - @cs = 345; begin - p += 1 - _goto_level = _out - next - end - - end - end - when 372 then -# line 539 "lib/parser/lexer.rl" - begin - - # Record position of a newline for precise location reporting on tNL - # tokens. - # - # This action is embedded directly into c_nl, as it is idempotent and - # there are no cases when we need to skip it. - @newline_s = p - end -# line 2048 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - emit_comment(@eq_begin_s, @te) - begin - @cs = (@cs_before_block_comment) - _goto_level = _again - next - end - - end - end - when 369 then -# line 539 "lib/parser/lexer.rl" - begin - - # Record position of a newline for precise location reporting on tNL - # tokens. - # - # This action is embedded directly into c_nl, as it is idempotent and - # there are no cases when we need to skip it. - @newline_s = p - end -# line 2053 "lib/parser/lexer.rl" - begin - @te = p+1 - end - when 382 then -# line 539 "lib/parser/lexer.rl" - begin - - # Record position of a newline for precise location reporting on tNL - # tokens. - # - # This action is embedded directly into c_nl, as it is idempotent and - # there are no cases when we need to skip it. - @newline_s = p - end -# line 2066 "lib/parser/lexer.rl" - begin - @te = p+1 - begin @eq_begin_s = @ts - begin - @cs = 704 - _goto_level = _again - next - end - end - end - when 83 then -# line 539 "lib/parser/lexer.rl" - begin - - # Record position of a newline for precise location reporting on tNL - # tokens. - # - # This action is embedded directly into c_nl, as it is idempotent and - # there are no cases when we need to skip it. - @newline_s = p - end -# line 2070 "lib/parser/lexer.rl" - begin - @te = p+1 - begin p = pe - 3 end - end - when 317 then -# line 674 "lib/parser/lexer.rl" - begin - @num_xfrm = @emit_rational end -# line 1788 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - digits = numeric_literal_int - - if version?(18, 19, 20) - emit(:tINTEGER, digits.to_i(@num_base), @ts, @num_suffix_s) - p = @num_suffix_s - 1 - else - p = @num_xfrm.call(digits.to_i(@num_base), p) - end - begin - p += 1 - _goto_level = _out - next - end - - end - end - when 315 then -# line 675 "lib/parser/lexer.rl" - begin - @num_xfrm = @emit_imaginary end -# line 1788 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - digits = numeric_literal_int - - if version?(18, 19, 20) - emit(:tINTEGER, digits.to_i(@num_base), @ts, @num_suffix_s) - p = @num_suffix_s - 1 - else - p = @num_xfrm.call(digits.to_i(@num_base), p) - end - begin - p += 1 - _goto_level = _out - next - end - - end - end - when 320 then -# line 676 "lib/parser/lexer.rl" - begin - @num_xfrm = @emit_imaginary_rational end -# line 1788 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - digits = numeric_literal_int - - if version?(18, 19, 20) - emit(:tINTEGER, digits.to_i(@num_base), @ts, @num_suffix_s) - p = @num_suffix_s - 1 - else - p = @num_xfrm.call(digits.to_i(@num_base), p) - end - begin - p += 1 - _goto_level = _out - next - end - - end - end - when 318 then -# line 677 "lib/parser/lexer.rl" - begin - @num_xfrm = @emit_integer_re end -# line 1788 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - digits = numeric_literal_int - - if version?(18, 19, 20) - emit(:tINTEGER, digits.to_i(@num_base), @ts, @num_suffix_s) - p = @num_suffix_s - 1 - else - p = @num_xfrm.call(digits.to_i(@num_base), p) - end - begin - p += 1 - _goto_level = _out - next - end - - end - end - when 316 then -# line 678 "lib/parser/lexer.rl" - begin - @num_xfrm = @emit_integer_if end -# line 1788 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - digits = numeric_literal_int - - if version?(18, 19, 20) - emit(:tINTEGER, digits.to_i(@num_base), @ts, @num_suffix_s) - p = @num_suffix_s - 1 - else - p = @num_xfrm.call(digits.to_i(@num_base), p) - end - begin - p += 1 - _goto_level = _out - next - end - - end - end - when 319 then -# line 679 "lib/parser/lexer.rl" - begin - @num_xfrm = @emit_integer_rescue end -# line 1788 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - digits = numeric_literal_int - - if version?(18, 19, 20) - emit(:tINTEGER, digits.to_i(@num_base), @ts, @num_suffix_s) - p = @num_suffix_s - 1 - else - p = @num_xfrm.call(digits.to_i(@num_base), p) - end - begin - p += 1 - _goto_level = _out - next - end - - end - end - when 308 then -# line 683 "lib/parser/lexer.rl" - begin - @num_xfrm = @emit_imaginary_float end -# line 1833 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - digits = tok(@ts, @num_suffix_s) - - if version?(18, 19, 20) - emit(:tFLOAT, Float(digits), @ts, @num_suffix_s) - p = @num_suffix_s - 1 - else - p = @num_xfrm.call(digits, p) - end - begin - p += 1 - _goto_level = _out - next - end - - end - end - when 309 then -# line 684 "lib/parser/lexer.rl" - begin - @num_xfrm = @emit_float_if end -# line 1833 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - digits = tok(@ts, @num_suffix_s) - - if version?(18, 19, 20) - emit(:tFLOAT, Float(digits), @ts, @num_suffix_s) - p = @num_suffix_s - 1 - else - p = @num_xfrm.call(digits, p) - end - begin - p += 1 - _goto_level = _out - next - end - - end - end - when 310 then -# line 688 "lib/parser/lexer.rl" - begin - @num_xfrm = @emit_rational end -# line 1833 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - digits = tok(@ts, @num_suffix_s) - - if version?(18, 19, 20) - emit(:tFLOAT, Float(digits), @ts, @num_suffix_s) - p = @num_suffix_s - 1 - else - p = @num_xfrm.call(digits, p) - end - begin - p += 1 - _goto_level = _out - next - end - - end - end - when 312 then -# line 689 "lib/parser/lexer.rl" - begin - @num_xfrm = @emit_imaginary_rational end -# line 1833 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - digits = tok(@ts, @num_suffix_s) - - if version?(18, 19, 20) - emit(:tFLOAT, Float(digits), @ts, @num_suffix_s) - p = @num_suffix_s - 1 - else - p = @num_xfrm.call(digits, p) - end - begin - p += 1 - _goto_level = _out - next - end - - end - end - when 311 then -# line 690 "lib/parser/lexer.rl" - begin - @num_xfrm = @emit_float_rescue end -# line 1833 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - digits = tok(@ts, @num_suffix_s) - - if version?(18, 19, 20) - emit(:tFLOAT, Float(digits), @ts, @num_suffix_s) - p = @num_suffix_s - 1 - else - p = @num_xfrm.call(digits, p) - end - begin - p += 1 - _goto_level = _out - next - end - - end - end - when 147 then -# line 696 "lib/parser/lexer.rl" - begin - - e_lbrace - end -# line 1028 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - if @lambda_stack.last == @paren_nest - @lambda_stack.pop - emit(:tLAMBEG, '{'.freeze, @te - 1, @te) - else - emit(:tLCURLY, '{'.freeze, @te - 1, @te) - end - @command_start = true - @paren_nest += 1 - @cs = 508; begin - p += 1 - _goto_level = _out - next - end - - end - end - when 169 then -# line 696 "lib/parser/lexer.rl" - begin - - e_lbrace - end -# line 1187 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - if @lambda_stack.last == @paren_nest - @lambda_stack.pop - emit(:tLAMBEG, '{'.freeze) - else - emit(:tLBRACE_ARG, '{'.freeze) - end - @paren_nest += 1 - @command_start = true - @cs = 508; begin - p += 1 - _goto_level = _out - next - end - - end - end - when 245 then -# line 696 "lib/parser/lexer.rl" - begin - - e_lbrace - end -# line 1459 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - if @lambda_stack.last == @paren_nest - @lambda_stack.pop - @command_start = true - emit(:tLAMBEG, '{'.freeze) - else - emit(:tLBRACE, '{'.freeze) - end - @paren_nest += 1 - begin - p += 1 - _goto_level = _out - next - end - - end - end - when 360 then -# line 696 "lib/parser/lexer.rl" - begin - - e_lbrace - end -# line 1697 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - if @lambda_stack.last == @paren_nest - @lambda_stack.pop - - if tok == '{'.freeze - emit(:tLAMBEG, '{'.freeze) - else # 'do' - emit(:kDO_LAMBDA, 'do'.freeze) - end - else - if tok == '{'.freeze - emit(:tLCURLY, '{'.freeze) - else # 'do' - emit_do - end - end - if tok == '{'.freeze - @paren_nest += 1 - end - @command_start = true - - @cs = 508; begin - p += 1 - _goto_level = _out - next - end - - end - end - when 361 then -# line 700 "lib/parser/lexer.rl" - begin - - if @strings.close_interp_on_current_literal(p) - p = p - 1; - @cs = 128; - begin - p += 1 - _goto_level = _out - next - end - - end - - @paren_nest -= 1 - end -# line 1920 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - emit_rbrace_rparen_rbrack - - if tok == '}'.freeze || tok == ']'.freeze - if @version >= 25 - @cs = 516; - else - @cs = 313; - end - else # ) - # fnext expr_endfn; ? - end - - begin - p += 1 - _goto_level = _out - next - end - - end - end - when 43 then -# line 723 "lib/parser/lexer.rl" - begin - - p = on_newline(p) - end -# line 539 "lib/parser/lexer.rl" - begin - - # Record position of a newline for precise location reporting on tNL - # tokens. - # - # This action is embedded directly into c_nl, as it is idempotent and - # there are no cases when we need to skip it. - @newline_s = p - end - when 16 then -# line 723 "lib/parser/lexer.rl" - begin - - p = on_newline(p) - end -# line 1061 "lib/parser/lexer.rl" - begin - tm = p end - when 18 then -# line 723 "lib/parser/lexer.rl" - begin - - p = on_newline(p) - end -# line 1074 "lib/parser/lexer.rl" - begin - tm = p end - when 20 then -# line 723 "lib/parser/lexer.rl" - begin - - p = on_newline(p) - end -# line 1102 "lib/parser/lexer.rl" - begin - tm = p end - when 98 then -# line 723 "lib/parser/lexer.rl" - begin - - p = on_newline(p) - end -# line 922 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; end - when 117 then -# line 723 "lib/parser/lexer.rl" - begin - - p = on_newline(p) - end -# line 952 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; end - when 125 then -# line 723 "lib/parser/lexer.rl" - begin - - p = on_newline(p) - end -# line 984 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; end - when 19 then -# line 723 "lib/parser/lexer.rl" - begin - - p = on_newline(p) - end -# line 1114 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - p = @ts - 1 - begin - @cs = 516 - _goto_level = _again - next - end - - end - end - when 156 then -# line 723 "lib/parser/lexer.rl" - begin - - p = on_newline(p) - end -# line 1119 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; end - when 148 then -# line 723 "lib/parser/lexer.rl" - begin - - p = on_newline(p) - end -# line 1125 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin p = p - 1; begin - @cs = 516 - _goto_level = _again - next - end - end - end - when 167 then -# line 723 "lib/parser/lexer.rl" - begin - - p = on_newline(p) - end -# line 1203 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; end - when 179 then -# line 723 "lib/parser/lexer.rl" - begin - - p = on_newline(p) - end -# line 1224 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; end - when 175 then -# line 723 "lib/parser/lexer.rl" - begin - - p = on_newline(p) - end -# line 1227 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin p = p - 1; begin - @cs = 516 - _goto_level = _again - next - end - end - end - when 44 then -# line 723 "lib/parser/lexer.rl" - begin - - p = on_newline(p) - end -# line 1245 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - emit(:tUNARY_NUM, tok(@ts, @ts + 1), @ts, @ts + 1) - p = p - 1; @cs = 516; begin - p += 1 - _goto_level = _out - next - end - - end - end - when 35 then -# line 723 "lib/parser/lexer.rl" - begin - - p = on_newline(p) - end -# line 1597 "lib/parser/lexer.rl" - begin - @te = p+1 - begin - emit(:tIDENTIFIER, ident_tok, ident_ts, ident_te) - p = ident_te - 1 - - if !@static_env.nil? && @static_env.declared?(ident_tok) && @version < 25 - @cs = 247; - else - @cs = 307; - end - begin - p += 1 - _goto_level = _out - next - end - - end - end - when 198 then -# line 723 "lib/parser/lexer.rl" - begin - - p = on_newline(p) - end -# line 1613 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; end - when 254 then -# line 723 "lib/parser/lexer.rl" - begin - - p = on_newline(p) - end -# line 1640 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; end - when 250 then -# line 723 "lib/parser/lexer.rl" - begin - - p = on_newline(p) - end -# line 1643 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - if @context.in_kwarg - p = p - 1; begin - @cs = 516 - _goto_level = _again - next - end - - else - begin - @cs = 710 - _goto_level = _again - next - end - - end - end - end - when 263 then -# line 723 "lib/parser/lexer.rl" - begin - - p = on_newline(p) - end -# line 1672 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; end - when 260 then -# line 723 "lib/parser/lexer.rl" - begin - - p = on_newline(p) - end -# line 1675 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin begin - @cs = 710 - _goto_level = _again - next - end - end - end - when 347 then -# line 723 "lib/parser/lexer.rl" - begin - - p = on_newline(p) - end -# line 1967 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; end - when 279 then -# line 723 "lib/parser/lexer.rl" - begin - - p = on_newline(p) - end -# line 1970 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin begin - @cs = 696 - _goto_level = _again - next - end - end - end - when 376 then -# line 723 "lib/parser/lexer.rl" - begin - - p = on_newline(p) - end -# line 2063 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; end - when 46 then -# line 733 "lib/parser/lexer.rl" - begin - @sharp_s = p - 1 end -# line 736 "lib/parser/lexer.rl" - begin - emit_comment_from_range(p, pe) end - when 50 then -# line 736 "lib/parser/lexer.rl" - begin - emit_comment_from_range(p, pe) end -# line 539 "lib/parser/lexer.rl" - begin - - # Record position of a newline for precise location reporting on tNL - # tokens. - # - # This action is embedded directly into c_nl, as it is idempotent and - # there are no cases when we need to skip it. - @newline_s = p - end - when 101 then -# line 736 "lib/parser/lexer.rl" - begin - emit_comment_from_range(p, pe) end -# line 922 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; end - when 116 then -# line 736 "lib/parser/lexer.rl" - begin - emit_comment_from_range(p, pe) end -# line 952 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; end - when 128 then -# line 736 "lib/parser/lexer.rl" - begin - emit_comment_from_range(p, pe) end -# line 984 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; end - when 150 then -# line 736 "lib/parser/lexer.rl" - begin - emit_comment_from_range(p, pe) end -# line 1122 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin begin - @cs = 516 - _goto_level = _again - next - end - end - end - when 165 then -# line 736 "lib/parser/lexer.rl" - begin - emit_comment_from_range(p, pe) end -# line 1203 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; end - when 177 then -# line 736 "lib/parser/lexer.rl" - begin - emit_comment_from_range(p, pe) end -# line 1224 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; end - when 204 then -# line 736 "lib/parser/lexer.rl" - begin - emit_comment_from_range(p, pe) end -# line 1613 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; end - when 252 then -# line 736 "lib/parser/lexer.rl" - begin - emit_comment_from_range(p, pe) end -# line 1640 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; end - when 262 then -# line 736 "lib/parser/lexer.rl" - begin - emit_comment_from_range(p, pe) end -# line 1672 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; end - when 283 then -# line 736 "lib/parser/lexer.rl" - begin - emit_comment_from_range(p, pe) end -# line 1967 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; end - when 378 then -# line 736 "lib/parser/lexer.rl" - begin - emit_comment_from_range(p, pe) end -# line 2063 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; end - when 122 then -# line 777 "lib/parser/lexer.rl" - begin - tm = p end -# line 974 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin emit(:tFID, tok(@ts, tm), @ts, tm) - @cs = (arg_or_cmdarg(cmd_state)); p = tm - 1; begin - p += 1 - _goto_level = _out - next - end - end - end - when 218 then -# line 777 "lib/parser/lexer.rl" - begin - tm = p end -# line 1381 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - emit(:tSYMBOL, tok(@ts + 1, tm), @ts, tm) - p = tm - 1 - @cs = 516; begin - p += 1 - _goto_level = _out - next - end - - end - end - when 189 then -# line 777 "lib/parser/lexer.rl" - begin - tm = p end -# line 1586 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin p = @ts - 1 - begin - @cs = 516 - _goto_level = _again - next - end - end - end - when 276 then -# line 777 "lib/parser/lexer.rl" - begin - tm = p end -# line 1 "NONE" - begin - case @act - when 104 then - begin begin p = (( @te))-1; end - - if @lambda_stack.last == @paren_nest - @lambda_stack.pop - - if tok == '{'.freeze - emit(:tLAMBEG, '{'.freeze) - else # 'do' - emit(:kDO_LAMBDA, 'do'.freeze) - end - else - if tok == '{'.freeze - emit(:tLCURLY, '{'.freeze) - else # 'do' - emit_do - end - end - if tok == '{'.freeze - @paren_nest += 1 - end - @command_start = true - - @cs = 508; begin - p += 1 - _goto_level = _out - next - end - - end - when 105 then - begin begin p = (( @te))-1; end - emit_table(KEYWORDS) - @cs = 134; begin - p += 1 - _goto_level = _out - next - end - end - when 106 then - begin begin p = (( @te))-1; end - emit_singleton_class - @cs = 508; begin - p += 1 - _goto_level = _out - next - end - end - when 107 then - begin begin p = (( @te))-1; end - emit_table(KEYWORDS) - @cs = 345; begin - p += 1 - _goto_level = _out - next - end - end - when 108 then - begin begin p = (( @te))-1; end - emit_table(KEYWORDS) - @command_start = true - @cs = 508; begin - p += 1 - _goto_level = _out - next - end - end - when 109 then - begin begin p = (( @te))-1; end - emit_table(KEYWORDS) - @cs = 321; begin - p += 1 - _goto_level = _out - next - end - end - when 110 then - begin begin p = (( @te))-1; end - - emit_table(KEYWORDS) - - if version?(18) && tok == 'not'.freeze - @cs = 345; begin - p += 1 - _goto_level = _out - next - end - - else - @cs = 276; begin - p += 1 - _goto_level = _out - next - end - - end - end - when 111 then - begin begin p = (( @te))-1; end - - if version?(18) - emit(:tIDENTIFIER) - - unless !@static_env.nil? && @static_env.declared?(tok) - @cs = (arg_or_cmdarg(cmd_state)); - end - else - emit(:k__ENCODING__, '__ENCODING__'.freeze) - end - begin - p += 1 - _goto_level = _out - next - end - - end - when 112 then - begin begin p = (( @te))-1; end - emit_table(KEYWORDS) - begin - p += 1 - _goto_level = _out - next - end - end - when 113 then - begin begin p = (( @te))-1; end - - digits = numeric_literal_int - - if version?(18, 19, 20) - emit(:tINTEGER, digits.to_i(@num_base), @ts, @num_suffix_s) - p = @num_suffix_s - 1 - else - p = @num_xfrm.call(digits.to_i(@num_base), p) - end - begin - p += 1 - _goto_level = _out - next - end - - end - when 115 then - begin begin p = (( @te))-1; end - - if version?(18, 19, 20) - diagnostic :error, - :trailing_in_number, { :character => tok(@te - 1, @te) }, - range(@te - 1, @te) - else - emit(:tINTEGER, tok(@ts, @te - 1).to_i, @ts, @te - 1) - p = p - 1; begin - p += 1 - _goto_level = _out - next - end - - end - end - when 116 then - begin begin p = (( @te))-1; end - - if version?(18, 19, 20) - diagnostic :error, - :trailing_in_number, { :character => tok(@te - 1, @te) }, - range(@te - 1, @te) - else - emit(:tFLOAT, tok(@ts, @te - 1).to_f, @ts, @te - 1) - p = p - 1; begin - p += 1 - _goto_level = _out - next - end - - end - end - when 117 then - begin begin p = (( @te))-1; end - - digits = tok(@ts, @num_suffix_s) - - if version?(18, 19, 20) - emit(:tFLOAT, Float(digits), @ts, @num_suffix_s) - p = @num_suffix_s - 1 - else - p = @num_xfrm.call(digits, p) - end - begin - p += 1 - _goto_level = _out - next - end - - end - when 119 then - begin begin p = (( @te))-1; end - emit(:tCONSTANT) - @cs = (arg_or_cmdarg(cmd_state)); begin - p += 1 - _goto_level = _out - next - end - end - when 123 then - begin begin p = (( @te))-1; end - - emit(:tIDENTIFIER) - - if !@static_env.nil? && @static_env.declared?(tok) - @cs = 247; begin - p += 1 - _goto_level = _out - next - end - - elsif @version >= 32 && tok =~ /\A_[1-9]\z/ - @cs = 247; begin - p += 1 - _goto_level = _out - next - end - - else - @cs = (arg_or_cmdarg(cmd_state)); begin - p += 1 - _goto_level = _out - next - end - - end - end - when 124 then - begin begin p = (( @te))-1; end - - if tm == @te - # Suffix was consumed, e.g. foo! - emit(:tFID) - else - # Suffix was not consumed, e.g. foo!= - emit(:tIDENTIFIER, tok(@ts, tm), @ts, tm) - p = tm - 1 - end - @cs = 276; begin - p += 1 - _goto_level = _out - next - end - - end - when 126 then - begin begin p = (( @te))-1; end - - emit_table(PUNCTUATION); - @cs = 508; begin - p += 1 - _goto_level = _out - next - end - - end - when 127 then - begin begin p = (( @te))-1; end - emit_table(PUNCTUATION) - @cs = 345; begin - p += 1 - _goto_level = _out - next - end - end -end - end - when 123 then -# line 778 "lib/parser/lexer.rl" - begin - tm = p - 2 end -# line 974 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin emit(:tFID, tok(@ts, tm), @ts, tm) - @cs = (arg_or_cmdarg(cmd_state)); p = tm - 1; begin - p += 1 - _goto_level = _out - next - end - end - end - when 219 then -# line 778 "lib/parser/lexer.rl" - begin - tm = p - 2 end -# line 1381 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - emit(:tSYMBOL, tok(@ts + 1, tm), @ts, tm) - p = tm - 1 - @cs = 516; begin - p += 1 - _goto_level = _out - next - end - - end - end - when 191 then -# line 778 "lib/parser/lexer.rl" - begin - tm = p - 2 end -# line 1586 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin p = @ts - 1 - begin - @cs = 516 - _goto_level = _again - next - end - end - end - when 277 then -# line 778 "lib/parser/lexer.rl" - begin - tm = p - 2 end -# line 1884 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - if tm == @te - # Suffix was consumed, e.g. foo! - emit(:tFID) - else - # Suffix was not consumed, e.g. foo!= - emit(:tIDENTIFIER, tok(@ts, tm), @ts, tm) - p = tm - 1 - end - @cs = 276; begin - p += 1 - _goto_level = _out - next - end - - end - end - when 220 then -# line 783 "lib/parser/lexer.rl" - begin - tm = p end -# line 1381 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - emit(:tSYMBOL, tok(@ts + 1, tm), @ts, tm) - p = tm - 1 - @cs = 516; begin - p += 1 - _goto_level = _out - next - end - - end - end - when 192 then -# line 783 "lib/parser/lexer.rl" - begin - tm = p end -# line 1586 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin p = @ts - 1 - begin - @cs = 516 - _goto_level = _again - next - end - end - end - when 221 then -# line 784 "lib/parser/lexer.rl" - begin - tm = p - 2 end -# line 1381 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - emit(:tSYMBOL, tok(@ts + 1, tm), @ts, tm) - p = tm - 1 - @cs = 516; begin - p += 1 - _goto_level = _out - next - end - - end - end - when 193 then -# line 784 "lib/parser/lexer.rl" - begin - tm = p - 2 end -# line 1586 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin p = @ts - 1 - begin - @cs = 516 - _goto_level = _again - next - end - end - end - when 225 then -# line 785 "lib/parser/lexer.rl" - begin - tm = p - 2 end -# line 1381 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - emit(:tSYMBOL, tok(@ts + 1, tm), @ts, tm) - p = tm - 1 - @cs = 516; begin - p += 1 - _goto_level = _out - next - end - - end - end - when 196 then -# line 785 "lib/parser/lexer.rl" - begin - tm = p - 2 end -# line 1586 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin p = @ts - 1 - begin - @cs = 516 - _goto_level = _again - next - end - end - end - when 224 then -# line 786 "lib/parser/lexer.rl" - begin - tm = p - 2 end -# line 1381 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - emit(:tSYMBOL, tok(@ts + 1, tm), @ts, tm) - p = tm - 1 - @cs = 516; begin - p += 1 - _goto_level = _out - next - end - - end - end - when 195 then -# line 786 "lib/parser/lexer.rl" - begin - tm = p - 2 end -# line 1 "NONE" - begin - case @act - when 60 then - begin begin p = (( @te))-1; end - - emit(:tUNARY_NUM, tok(@ts, @ts + 1), @ts, @ts + 1) - p = p - 1; @cs = 516; begin - p += 1 - _goto_level = _out - next - end - - end - when 67 then - begin begin p = (( @te))-1; end - - diagnostic :error, :unterminated_heredoc_id, nil, range(@ts, @ts + 1) - end - when 76 then - begin begin p = (( @te))-1; end - - if @version >= 27 - emit(:tPIPE, tok(@ts, @ts + 1), @ts, @ts + 1) - p = p - 1; - @cs = 345; begin - p += 1 - _goto_level = _out - next - end - - else - p -= 2 - begin - @cs = 516 - _goto_level = _again - next - end - - end - end - when 80 then - begin begin p = (( @te))-1; end - emit_table(PUNCTUATION_BEGIN) - begin - p += 1 - _goto_level = _out - next - end - end - when 81 then - begin begin p = (( @te))-1; end - emit(:kRESCUE, 'rescue'.freeze, @ts, tm) - p = tm - 1 - @cs = 321; begin - p += 1 - _goto_level = _out - next - end - end - when 82 then - begin begin p = (( @te))-1; end - emit_table(KEYWORDS_BEGIN) - @command_start = true - @cs = 508; begin - p += 1 - _goto_level = _out - next - end - end - when 86 then - begin begin p = (( @te))-1; end - p = @ts - 1 - begin - @cs = 516 - _goto_level = _again - next - end - end - when 87 then - begin begin p = (( @te))-1; end - - emit(:tIDENTIFIER) - - if !@static_env.nil? && @static_env.declared?(tok) - @cs = 247; begin - p += 1 - _goto_level = _out - next - end - - elsif @version >= 32 && tok =~ /\A_[1-9]\z/ - @cs = 247; begin - p += 1 - _goto_level = _out - next - end - - else - @cs = (arg_or_cmdarg(cmd_state)); begin - p += 1 - _goto_level = _out - next - end - - end - end - when 91 then - begin begin p = (( @te))-1; end - p = @ts - 1; begin - @cs = 516 - _goto_level = _again - next - end - end -end - end - when 222 then -# line 787 "lib/parser/lexer.rl" - begin - tm = p - 3 end -# line 1381 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - emit(:tSYMBOL, tok(@ts + 1, tm), @ts, tm) - p = tm - 1 - @cs = 516; begin - p += 1 - _goto_level = _out - next - end - - end - end - when 194 then -# line 787 "lib/parser/lexer.rl" - begin - tm = p - 3 end -# line 1586 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin p = @ts - 1 - begin - @cs = 516 - _goto_level = _again - next - end - end - end - when 223 then -# line 792 "lib/parser/lexer.rl" - begin - tm = p - 2 end -# line 1381 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - emit(:tSYMBOL, tok(@ts + 1, tm), @ts, tm) - p = tm - 1 - @cs = 516; begin - p += 1 - _goto_level = _out - next - end - - end - end - when 342 then -# line 797 "lib/parser/lexer.rl" - begin - tm = p - 2 end -# line 1866 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin emit(:tCONSTANT, tok(@ts, tm), @ts, tm) - p = tm - 1; begin - p += 1 - _goto_level = _out - next - end - end - end - when 146 then -# line 803 "lib/parser/lexer.rl" - begin - - @cond.push(false); @cmdarg.push(false) - - @paren_nest += 1 - end -# line 1022 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin emit(:tLBRACK, '['.freeze, @te - 1, @te) - @cs = 345; begin - p += 1 - _goto_level = _out - next - end - end - end - when 238 then -# line 803 "lib/parser/lexer.rl" - begin - - @cond.push(false); @cmdarg.push(false) - - @paren_nest += 1 - end -# line 1473 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin emit(:tLBRACK, '['.freeze) - begin - p += 1 - _goto_level = _out - next - end - end - end - when 345 then -# line 803 "lib/parser/lexer.rl" - begin - - @cond.push(false); @cmdarg.push(false) - - @paren_nest += 1 - end -# line 1945 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin emit(:tLBRACK2, '['.freeze) - @cs = 345; begin - p += 1 - _goto_level = _out - next - end - end - end - when 348 then -# line 809 "lib/parser/lexer.rl" - begin - - @paren_nest -= 1 - end -# line 1920 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - emit_rbrace_rparen_rbrack - - if tok == '}'.freeze || tok == ']'.freeze - if @version >= 25 - @cs = 516; - else - @cs = 313; - end - else # ) - # fnext expr_endfn; ? - end - - begin - p += 1 - _goto_level = _out - next - end - - end - end - when 138 then -# line 816 "lib/parser/lexer.rl" - begin - - @cond.push(false); @cmdarg.push(false) - - @paren_nest += 1 - - if version?(18) - @command_start = true - end - end -# line 1003 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - if version?(18) - emit(:tLPAREN2, '('.freeze, @te - 1, @te) - @cs = 508; begin - p += 1 - _goto_level = _out - next - end - - else - emit(:tLPAREN_ARG, '('.freeze, @te - 1, @te) - @cs = 345; begin - p += 1 - _goto_level = _out - next - end - - end - end - end - when 151 then -# line 816 "lib/parser/lexer.rl" - begin - - @cond.push(false); @cmdarg.push(false) - - @paren_nest += 1 - - if version?(18) - @command_start = true - end - end -# line 1016 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin emit(:tLPAREN2, '('.freeze) - @cs = 345; begin - p += 1 - _goto_level = _out - next - end - end - end - when 159 then -# line 816 "lib/parser/lexer.rl" - begin - - @cond.push(false); @cmdarg.push(false) - - @paren_nest += 1 - - if version?(18) - @command_start = true - end - end -# line 1141 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - emit(:tLPAREN_ARG, '('.freeze, @te - 1, @te) - if version?(18) - @cs = 508; begin - p += 1 - _goto_level = _out - next - end - - else - @cs = 345; begin - p += 1 - _goto_level = _out - next - end - - end - end - end - when 208 then -# line 816 "lib/parser/lexer.rl" - begin - - @cond.push(false); @cmdarg.push(false) - - @paren_nest += 1 - - if version?(18) - @command_start = true - end - end -# line 1478 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin emit(:tLPAREN, '('.freeze) - begin - p += 1 - _goto_level = _out - next - end - end - end - when 289 then -# line 816 "lib/parser/lexer.rl" - begin - - @cond.push(false); @cmdarg.push(false) - - @paren_nest += 1 - - if version?(18) - @command_start = true - end - end -# line 1916 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin emit_table(PUNCTUATION) - @cs = 345; begin - p += 1 - _goto_level = _out - next - end - end - end - when 290 then -# line 826 "lib/parser/lexer.rl" - begin - - @paren_nest -= 1 - end -# line 1920 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - emit_rbrace_rparen_rbrack - - if tok == '}'.freeze || tok == ']'.freeze - if @version >= 25 - @cs = 516; - else - @cs = 313; - end - else # ) - # fnext expr_endfn; ? - end - - begin - p += 1 - _goto_level = _out - next - end - - end - end - when 57 then -# line 1299 "lib/parser/lexer.rl" - begin - heredoc_e = p end -# line 539 "lib/parser/lexer.rl" - begin - - # Record position of a newline for precise location reporting on tNL - # tokens. - # - # This action is embedded directly into c_nl, as it is idempotent and - # there are no cases when we need to skip it. - @newline_s = p - end - when 233 then -# line 1300 "lib/parser/lexer.rl" - begin - new_herebody_s = p end -# line 1301 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - tok(@ts, heredoc_e) =~ /^<<(-?)(~?)(["'`]?)(.*)\3$/m - - indent = !$1.empty? || !$2.empty? - dedent_body = !$2.empty? - type = $3.empty? ? '<<"'.freeze : ('<<'.freeze + $3) - delimiter = $4 - - if @version >= 27 - if delimiter.count("\n") > 0 || delimiter.count("\r") > 0 - diagnostic :error, :unterminated_heredoc_id, nil, range(@ts, @ts + 1) - end - elsif @version >= 24 - if delimiter.count("\n") > 0 - if delimiter.end_with?("\n") - diagnostic :warning, :heredoc_id_ends_with_nl, nil, range(@ts, @ts + 1) - delimiter = delimiter.rstrip - else - diagnostic :fatal, :heredoc_id_has_newline, nil, range(@ts, @ts + 1) - end - end - end - - if dedent_body && version?(18, 19, 20, 21, 22) - emit(:tLSHFT, '<<'.freeze, @ts, @ts + 2) - p = @ts + 1 - @cs = 345; begin - p += 1 - _goto_level = _out - next - end - - else - @strings.push_literal(type, delimiter, @ts, heredoc_e, indent, dedent_body); - @strings.herebody_s ||= new_herebody_s - - p = @strings.herebody_s - 1 - @cs = 128; - end - end - end - when 228 then -# line 1400 "lib/parser/lexer.rl" - begin - tm = p - 1; diag_msg = :ivar_name end -# line 1403 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - emit_colon_with_digits(p, tm, diag_msg) - - @cs = 516; begin - p += 1 - _goto_level = _out - next - end - - end - end - when 231 then -# line 1401 "lib/parser/lexer.rl" - begin - tm = p - 2; diag_msg = :cvar_name end -# line 1403 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - emit_colon_with_digits(p, tm, diag_msg) - - @cs = 516; begin - p += 1 - _goto_level = _out - next - end - - end - end - when 241 then -# line 1488 "lib/parser/lexer.rl" - begin - tm = p end -# line 1489 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin emit(:kRESCUE, 'rescue'.freeze, @ts, tm) - p = tm - 1 - @cs = 321; begin - p += 1 - _goto_level = _out - next - end - end - end - when 332 then -# line 1781 "lib/parser/lexer.rl" - begin - @num_base = 16; @num_digits_s = p end -# line 1787 "lib/parser/lexer.rl" - begin - @num_suffix_s = p end - when 326 then -# line 1782 "lib/parser/lexer.rl" - begin - @num_base = 10; @num_digits_s = p end -# line 1787 "lib/parser/lexer.rl" - begin - @num_suffix_s = p end - when 329 then -# line 1783 "lib/parser/lexer.rl" - begin - @num_base = 8; @num_digits_s = p end -# line 1787 "lib/parser/lexer.rl" - begin - @num_suffix_s = p end - when 323 then -# line 1784 "lib/parser/lexer.rl" - begin - @num_base = 2; @num_digits_s = p end -# line 1787 "lib/parser/lexer.rl" - begin - @num_suffix_s = p end - when 338 then -# line 1785 "lib/parser/lexer.rl" - begin - @num_base = 10; @num_digits_s = @ts end -# line 1787 "lib/parser/lexer.rl" - begin - @num_suffix_s = p end - when 301 then -# line 1786 "lib/parser/lexer.rl" - begin - @num_base = 8; @num_digits_s = @ts end -# line 1787 "lib/parser/lexer.rl" - begin - @num_suffix_s = p end - when 339 then -# line 1787 "lib/parser/lexer.rl" - begin - @num_suffix_s = p end -# line 673 "lib/parser/lexer.rl" - begin - @num_xfrm = @emit_integer end - when 184 then -# line 1 "NONE" - begin - @te = p+1 - end -# line 539 "lib/parser/lexer.rl" - begin - - # Record position of a newline for precise location reporting on tNL - # tokens. - # - # This action is embedded directly into c_nl, as it is idempotent and - # there are no cases when we need to skip it. - @newline_s = p - end - when 305 then -# line 1 "NONE" - begin - @te = p+1 - end -# line 1831 "lib/parser/lexer.rl" - begin - @num_suffix_s = p end - when 107 then -# line 1 "NONE" - begin - @te = p+1 - end -# line 880 "lib/parser/lexer.rl" - begin - @act = 4; end - when 94 then -# line 1 "NONE" - begin - @te = p+1 - end -# line 884 "lib/parser/lexer.rl" - begin - @act = 5; end - when 90 then -# line 1 "NONE" - begin - @te = p+1 - end -# line 888 "lib/parser/lexer.rl" - begin - @act = 6; end - when 12 then -# line 1 "NONE" - begin - @te = p+1 - end -# line 1065 "lib/parser/lexer.rl" - begin - @act = 33; end - when 140 then -# line 1 "NONE" - begin - @te = p+1 - end -# line 1075 "lib/parser/lexer.rl" - begin - @act = 34; end - when 13 then -# line 1 "NONE" - begin - @te = p+1 - end -# line 1114 "lib/parser/lexer.rl" - begin - @act = 39; end - when 133 then -# line 1 "NONE" - begin - @te = p+1 - end -# line 1119 "lib/parser/lexer.rl" - begin - @act = 40; end - when 160 then -# line 1 "NONE" - begin - @te = p+1 - end -# line 1151 "lib/parser/lexer.rl" - begin - @act = 46; end - when 31 then -# line 1 "NONE" - begin - @te = p+1 - end -# line 1164 "lib/parser/lexer.rl" - begin - @act = 47; end - when 181 then -# line 1 "NONE" - begin - @te = p+1 - end -# line 1218 "lib/parser/lexer.rl" - begin - @act = 54; end - when 170 then -# line 1 "NONE" - begin - @te = p+1 - end -# line 1222 "lib/parser/lexer.rl" - begin - @act = 55; end - when 55 then -# line 1 "NONE" - begin - @te = p+1 - end -# line 1348 "lib/parser/lexer.rl" - begin - @act = 67; end - when 246 then -# line 1 "NONE" - begin - @te = p+1 - end -# line 1442 "lib/parser/lexer.rl" - begin - @act = 76; end - when 185 then -# line 1 "NONE" - begin - @te = p+1 - end -# line 1483 "lib/parser/lexer.rl" - begin - @act = 80; end - when 240 then -# line 1 "NONE" - begin - @te = p+1 - end -# line 1489 "lib/parser/lexer.rl" - begin - @act = 81; end - when 239 then -# line 1 "NONE" - begin - @te = p+1 - end -# line 1495 "lib/parser/lexer.rl" - begin - @act = 82; end - when 59 then -# line 1 "NONE" - begin - @te = p+1 - end -# line 1586 "lib/parser/lexer.rl" - begin - @act = 86; end - when 182 then -# line 1 "NONE" - begin - @te = p+1 - end -# line 831 "lib/parser/lexer.rl" - begin - @act = 87; end - when 186 then -# line 1 "NONE" - begin - @te = p+1 - end -# line 1632 "lib/parser/lexer.rl" - begin - @act = 91; end - when 356 then -# line 1 "NONE" - begin - @te = p+1 - end -# line 1697 "lib/parser/lexer.rl" - begin - @act = 104; end - when 351 then -# line 1 "NONE" - begin - @te = p+1 - end -# line 1726 "lib/parser/lexer.rl" - begin - @act = 105; end - when 359 then -# line 1 "NONE" - begin - @te = p+1 - end -# line 1735 "lib/parser/lexer.rl" - begin - @act = 107; end - when 352 then -# line 1 "NONE" - begin - @te = p+1 - end -# line 1740 "lib/parser/lexer.rl" - begin - @act = 108; end - when 353 then -# line 1 "NONE" - begin - @te = p+1 - end -# line 1745 "lib/parser/lexer.rl" - begin - @act = 109; end - when 358 then -# line 1 "NONE" - begin - @te = p+1 - end -# line 1749 "lib/parser/lexer.rl" - begin - @act = 110; end - when 350 then -# line 1 "NONE" - begin - @te = p+1 - end -# line 1760 "lib/parser/lexer.rl" - begin - @act = 111; end - when 344 then -# line 1 "NONE" - begin - @te = p+1 - end -# line 1774 "lib/parser/lexer.rl" - begin - @act = 112; end - when 270 then -# line 1 "NONE" - begin - @te = p+1 - end -# line 1788 "lib/parser/lexer.rl" - begin - @act = 113; end - when 303 then -# line 1 "NONE" - begin - @te = p+1 - end -# line 1818 "lib/parser/lexer.rl" - begin - @act = 116; end - when 67 then -# line 1 "NONE" - begin - @te = p+1 - end -# line 1833 "lib/parser/lexer.rl" - begin - @act = 117; end - when 273 then -# line 1 "NONE" - begin - @te = p+1 - end -# line 1862 "lib/parser/lexer.rl" - begin - @act = 119; end - when 264 then -# line 1 "NONE" - begin - @te = p+1 - end -# line 831 "lib/parser/lexer.rl" - begin - @act = 123; end - when 275 then -# line 1 "NONE" - begin - @te = p+1 - end -# line 1884 "lib/parser/lexer.rl" - begin - @act = 124; end - when 268 then -# line 1 "NONE" - begin - @te = p+1 - end -# line 1910 "lib/parser/lexer.rl" - begin - @act = 126; end - when 274 then -# line 1 "NONE" - begin - @te = p+1 - end -# line 1916 "lib/parser/lexer.rl" - begin - @act = 127; end - when 73 then -# line 1 "NONE" - begin - @te = p+1 - end -# line 1999 "lib/parser/lexer.rl" - begin - @act = 140; end - when 363 then -# line 1 "NONE" - begin - @te = p+1 - end -# line 2038 "lib/parser/lexer.rl" - begin - @act = 144; end - when 47 then -# line 733 "lib/parser/lexer.rl" - begin - @sharp_s = p - 1 end -# line 736 "lib/parser/lexer.rl" - begin - emit_comment_from_range(p, pe) end -# line 539 "lib/parser/lexer.rl" - begin - - # Record position of a newline for precise location reporting on tNL - # tokens. - # - # This action is embedded directly into c_nl, as it is idempotent and - # there are no cases when we need to skip it. - @newline_s = p - end - when 100 then -# line 733 "lib/parser/lexer.rl" - begin - @sharp_s = p - 1 end -# line 736 "lib/parser/lexer.rl" - begin - emit_comment_from_range(p, pe) end -# line 922 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; end - when 115 then -# line 733 "lib/parser/lexer.rl" - begin - @sharp_s = p - 1 end -# line 736 "lib/parser/lexer.rl" - begin - emit_comment_from_range(p, pe) end -# line 952 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; end - when 127 then -# line 733 "lib/parser/lexer.rl" - begin - @sharp_s = p - 1 end -# line 736 "lib/parser/lexer.rl" - begin - emit_comment_from_range(p, pe) end -# line 984 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; end - when 149 then -# line 733 "lib/parser/lexer.rl" - begin - @sharp_s = p - 1 end -# line 736 "lib/parser/lexer.rl" - begin - emit_comment_from_range(p, pe) end -# line 1122 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin begin - @cs = 516 - _goto_level = _again - next - end - end - end - when 164 then -# line 733 "lib/parser/lexer.rl" - begin - @sharp_s = p - 1 end -# line 736 "lib/parser/lexer.rl" - begin - emit_comment_from_range(p, pe) end -# line 1203 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; end - when 176 then -# line 733 "lib/parser/lexer.rl" - begin - @sharp_s = p - 1 end -# line 736 "lib/parser/lexer.rl" - begin - emit_comment_from_range(p, pe) end -# line 1224 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; end - when 203 then -# line 733 "lib/parser/lexer.rl" - begin - @sharp_s = p - 1 end -# line 736 "lib/parser/lexer.rl" - begin - emit_comment_from_range(p, pe) end -# line 1613 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; end - when 251 then -# line 733 "lib/parser/lexer.rl" - begin - @sharp_s = p - 1 end -# line 736 "lib/parser/lexer.rl" - begin - emit_comment_from_range(p, pe) end -# line 1640 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; end - when 261 then -# line 733 "lib/parser/lexer.rl" - begin - @sharp_s = p - 1 end -# line 736 "lib/parser/lexer.rl" - begin - emit_comment_from_range(p, pe) end -# line 1672 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; end - when 282 then -# line 733 "lib/parser/lexer.rl" - begin - @sharp_s = p - 1 end -# line 736 "lib/parser/lexer.rl" - begin - emit_comment_from_range(p, pe) end -# line 1967 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; end - when 377 then -# line 733 "lib/parser/lexer.rl" - begin - @sharp_s = p - 1 end -# line 736 "lib/parser/lexer.rl" - begin - emit_comment_from_range(p, pe) end -# line 2063 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; end - when 334 then -# line 1785 "lib/parser/lexer.rl" - begin - @num_base = 10; @num_digits_s = @ts end -# line 1787 "lib/parser/lexer.rl" - begin - @num_suffix_s = p end -# line 673 "lib/parser/lexer.rl" - begin - @num_xfrm = @emit_integer end - when 298 then -# line 1786 "lib/parser/lexer.rl" - begin - @num_base = 8; @num_digits_s = @ts end -# line 1787 "lib/parser/lexer.rl" - begin - @num_suffix_s = p end -# line 673 "lib/parser/lexer.rl" - begin - @num_xfrm = @emit_integer end - when 313 then -# line 1787 "lib/parser/lexer.rl" - begin - @num_suffix_s = p end -# line 673 "lib/parser/lexer.rl" - begin - @num_xfrm = @emit_integer end -# line 1788 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - digits = numeric_literal_int - - if version?(18, 19, 20) - emit(:tINTEGER, digits.to_i(@num_base), @ts, @num_suffix_s) - p = @num_suffix_s - 1 - else - p = @num_xfrm.call(digits.to_i(@num_base), p) - end - begin - p += 1 - _goto_level = _out - next - end - - end - end - when 306 then -# line 1830 "lib/parser/lexer.rl" - begin - @num_suffix_s = p end -# line 682 "lib/parser/lexer.rl" - begin - @num_xfrm = @emit_float end -# line 1833 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - digits = tok(@ts, @num_suffix_s) - - if version?(18, 19, 20) - emit(:tFLOAT, Float(digits), @ts, @num_suffix_s) - p = @num_suffix_s - 1 - else - p = @num_xfrm.call(digits, p) - end - begin - p += 1 - _goto_level = _out - next - end - - end - end - when 302 then -# line 1831 "lib/parser/lexer.rl" - begin - @num_suffix_s = p end -# line 682 "lib/parser/lexer.rl" - begin - @num_xfrm = @emit_float end -# line 1833 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - digits = tok(@ts, @num_suffix_s) - - if version?(18, 19, 20) - emit(:tFLOAT, Float(digits), @ts, @num_suffix_s) - p = @num_suffix_s - 1 - else - p = @num_xfrm.call(digits, p) - end - begin - p += 1 - _goto_level = _out - next - end - - end - end - when 155 then -# line 1 "NONE" - begin - @te = p+1 - end -# line 539 "lib/parser/lexer.rl" - begin - - # Record position of a newline for precise location reporting on tNL - # tokens. - # - # This action is embedded directly into c_nl, as it is idempotent and - # there are no cases when we need to skip it. - @newline_s = p - end -# line 1119 "lib/parser/lexer.rl" - begin - @act = 40; end - when 21 then -# line 1 "NONE" - begin - @te = p+1 - end -# line 723 "lib/parser/lexer.rl" - begin - - p = on_newline(p) - end -# line 1114 "lib/parser/lexer.rl" - begin - @act = 39; end - when 32 then -# line 1 "NONE" - begin - @te = p+1 - end -# line 723 "lib/parser/lexer.rl" - begin - - p = on_newline(p) - end -# line 1164 "lib/parser/lexer.rl" - begin - @act = 47; end - when 79 then -# line 1 "NONE" - begin - @te = p+1 - end -# line 723 "lib/parser/lexer.rl" - begin - - p = on_newline(p) - end -# line 1999 "lib/parser/lexer.rl" - begin - @act = 140; end - when 51 then -# line 1 "NONE" - begin - @te = p+1 - end -# line 736 "lib/parser/lexer.rl" - begin - emit_comment_from_range(p, pe) end -# line 1245 "lib/parser/lexer.rl" - begin - @act = 60; end - when 70 then -# line 1 "NONE" - begin - @te = p+1 - end -# line 736 "lib/parser/lexer.rl" - begin - emit_comment_from_range(p, pe) end -# line 1730 "lib/parser/lexer.rl" - begin - @act = 106; end - when 78 then -# line 1 "NONE" - begin - @te = p+1 - end -# line 736 "lib/parser/lexer.rl" - begin - emit_comment_from_range(p, pe) end -# line 1999 "lib/parser/lexer.rl" - begin - @act = 140; end - when 23 then -# line 1 "NONE" - begin - @te = p+1 - end -# line 1074 "lib/parser/lexer.rl" - begin - tm = p end -# line 1075 "lib/parser/lexer.rl" - begin - @act = 34; end - when 243 then -# line 1 "NONE" - begin - @te = p+1 - end -# line 1488 "lib/parser/lexer.rl" - begin - tm = p end -# line 1586 "lib/parser/lexer.rl" - begin - @act = 86; end - when 242 then -# line 1 "NONE" - begin - @te = p+1 - end -# line 1488 "lib/parser/lexer.rl" - begin - tm = p end -# line 831 "lib/parser/lexer.rl" - begin - @act = 87; end - when 335 then -# line 1 "NONE" - begin - @te = p+1 - end -# line 1785 "lib/parser/lexer.rl" - begin - @num_base = 10; @num_digits_s = @ts end -# line 1788 "lib/parser/lexer.rl" - begin - @act = 113; end - when 330 then -# line 1781 "lib/parser/lexer.rl" - begin - @num_base = 16; @num_digits_s = p end -# line 1787 "lib/parser/lexer.rl" - begin - @num_suffix_s = p end -# line 673 "lib/parser/lexer.rl" - begin - @num_xfrm = @emit_integer end -# line 1788 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - digits = numeric_literal_int - - if version?(18, 19, 20) - emit(:tINTEGER, digits.to_i(@num_base), @ts, @num_suffix_s) - p = @num_suffix_s - 1 - else - p = @num_xfrm.call(digits.to_i(@num_base), p) - end - begin - p += 1 - _goto_level = _out - next - end - - end - end - when 324 then -# line 1782 "lib/parser/lexer.rl" - begin - @num_base = 10; @num_digits_s = p end -# line 1787 "lib/parser/lexer.rl" - begin - @num_suffix_s = p end -# line 673 "lib/parser/lexer.rl" - begin - @num_xfrm = @emit_integer end -# line 1788 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - digits = numeric_literal_int - - if version?(18, 19, 20) - emit(:tINTEGER, digits.to_i(@num_base), @ts, @num_suffix_s) - p = @num_suffix_s - 1 - else - p = @num_xfrm.call(digits.to_i(@num_base), p) - end - begin - p += 1 - _goto_level = _out - next - end - - end - end - when 327 then -# line 1783 "lib/parser/lexer.rl" - begin - @num_base = 8; @num_digits_s = p end -# line 1787 "lib/parser/lexer.rl" - begin - @num_suffix_s = p end -# line 673 "lib/parser/lexer.rl" - begin - @num_xfrm = @emit_integer end -# line 1788 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - digits = numeric_literal_int - - if version?(18, 19, 20) - emit(:tINTEGER, digits.to_i(@num_base), @ts, @num_suffix_s) - p = @num_suffix_s - 1 - else - p = @num_xfrm.call(digits.to_i(@num_base), p) - end - begin - p += 1 - _goto_level = _out - next - end - - end - end - when 321 then -# line 1784 "lib/parser/lexer.rl" - begin - @num_base = 2; @num_digits_s = p end -# line 1787 "lib/parser/lexer.rl" - begin - @num_suffix_s = p end -# line 673 "lib/parser/lexer.rl" - begin - @num_xfrm = @emit_integer end -# line 1788 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - digits = numeric_literal_int - - if version?(18, 19, 20) - emit(:tINTEGER, digits.to_i(@num_base), @ts, @num_suffix_s) - p = @num_suffix_s - 1 - else - p = @num_xfrm.call(digits.to_i(@num_base), p) - end - begin - p += 1 - _goto_level = _out - next - end - - end - end - when 333 then -# line 1785 "lib/parser/lexer.rl" - begin - @num_base = 10; @num_digits_s = @ts end -# line 1787 "lib/parser/lexer.rl" - begin - @num_suffix_s = p end -# line 673 "lib/parser/lexer.rl" - begin - @num_xfrm = @emit_integer end -# line 1788 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - digits = numeric_literal_int - - if version?(18, 19, 20) - emit(:tINTEGER, digits.to_i(@num_base), @ts, @num_suffix_s) - p = @num_suffix_s - 1 - else - p = @num_xfrm.call(digits.to_i(@num_base), p) - end - begin - p += 1 - _goto_level = _out - next - end - - end - end - when 297 then -# line 1786 "lib/parser/lexer.rl" - begin - @num_base = 8; @num_digits_s = @ts end -# line 1787 "lib/parser/lexer.rl" - begin - @num_suffix_s = p end -# line 673 "lib/parser/lexer.rl" - begin - @num_xfrm = @emit_integer end -# line 1788 "lib/parser/lexer.rl" - begin - @te = p -p = p - 1; begin - digits = numeric_literal_int - - if version?(18, 19, 20) - emit(:tINTEGER, digits.to_i(@num_base), @ts, @num_suffix_s) - p = @num_suffix_s - 1 - else - p = @num_xfrm.call(digits.to_i(@num_base), p) - end - begin - p += 1 - _goto_level = _out - next - end - - end - end - when 17 then -# line 1 "NONE" - begin - @te = p+1 - end -# line 723 "lib/parser/lexer.rl" - begin - - p = on_newline(p) - end -# line 1074 "lib/parser/lexer.rl" - begin - tm = p end -# line 1075 "lib/parser/lexer.rl" - begin - @act = 34; end - when 48 then -# line 1 "NONE" - begin - @te = p+1 - end -# line 733 "lib/parser/lexer.rl" - begin - @sharp_s = p - 1 end -# line 736 "lib/parser/lexer.rl" - begin - emit_comment_from_range(p, pe) end -# line 1245 "lib/parser/lexer.rl" - begin - @act = 60; end - when 77 then -# line 1 "NONE" - begin - @te = p+1 - end -# line 733 "lib/parser/lexer.rl" - begin - @sharp_s = p - 1 end -# line 736 "lib/parser/lexer.rl" - begin - emit_comment_from_range(p, pe) end -# line 1999 "lib/parser/lexer.rl" - begin - @act = 140; end - when 340 then -# line 1 "NONE" - begin - @te = p+1 - end -# line 1787 "lib/parser/lexer.rl" - begin - @num_suffix_s = p end -# line 673 "lib/parser/lexer.rl" - begin - @num_xfrm = @emit_integer end -# line 1806 "lib/parser/lexer.rl" - begin - @act = 115; end - when 336 then -# line 1 "NONE" - begin - @te = p+1 - end -# line 1785 "lib/parser/lexer.rl" - begin - @num_base = 10; @num_digits_s = @ts end -# line 1787 "lib/parser/lexer.rl" - begin - @num_suffix_s = p end -# line 673 "lib/parser/lexer.rl" - begin - @num_xfrm = @emit_integer end -# line 1806 "lib/parser/lexer.rl" - begin - @act = 115; end - when 300 then -# line 1 "NONE" - begin - @te = p+1 - end -# line 1786 "lib/parser/lexer.rl" - begin - @num_base = 8; @num_digits_s = @ts end -# line 1787 "lib/parser/lexer.rl" - begin - @num_suffix_s = p end -# line 673 "lib/parser/lexer.rl" - begin - @num_xfrm = @emit_integer end -# line 1806 "lib/parser/lexer.rl" - begin - @act = 115; end -# line 14586 "lib/parser/lexer-F1.rb" - end - end - end - if _goto_level <= _again - case _lex_to_state_actions[ @cs] - when 84 then -# line 1 "NONE" - begin - @ts = nil; end -# line 14596 "lib/parser/lexer-F1.rb" - end - - if @cs == 0 - _goto_level = _out - next - end - p += 1 - if p != pe - _goto_level = _resume - next - end - end - if _goto_level <= _test_eof - if p == eof - if _lex_eof_trans[ @cs] > 0 - _trans = _lex_eof_trans[ @cs] - 1; - _goto_level = _eof_trans - next; - end - end - - end - if _goto_level <= _out - break - end -end - end - -# line 281 "lib/parser/lexer.rl" - # % - - # Ragel creates a local variable called `testEof` but it doesn't use - # it in any assignment. This dead code is here to swallow the warning. - # It has no runtime cost because Ruby doesn't produce any instructions from it. - if false - testEof - end - - @p = p - - if @token_queue.any? - @token_queue.shift - elsif @cs == klass.lex_error - [ false, [ '$error'.freeze, range(p - 1, p) ] ] - else - eof = @source_pts.size - [ false, [ '$eof'.freeze, range(eof, eof) ] ] - end - end - - protected - - def version?(*versions) - versions.include?(@version) - end - - def stack_pop - @top -= 1 - @stack[@top] - end - - def tok(s = @ts, e = @te) - @source_buffer.slice(s, e - s) - end - - def range(s = @ts, e = @te) - Parser::Source::Range.new(@source_buffer, s, e) - end - - def emit(type, value = tok, s = @ts, e = @te) - token = [ type, [ value, range(s, e) ] ] - - @token_queue.push(token) - - @tokens.push(token) if @tokens - - token - end - - def emit_table(table, s = @ts, e = @te) - value = tok(s, e) - - emit(table[value], value, s, e) - end - - def emit_do(do_block=false) - if @cond.active? - emit(:kDO_COND, 'do'.freeze) - elsif @cmdarg.active? || do_block - emit(:kDO_BLOCK, 'do'.freeze) - else - emit(:kDO, 'do'.freeze) - end - end - - def arg_or_cmdarg(cmd_state) - if cmd_state - self.class.lex_en_expr_cmdarg - else - self.class.lex_en_expr_arg - end - end - - def emit_comment(s = @ts, e = @te) - if @comments - @comments.push(Parser::Source::Comment.new(range(s, e))) - end - - if @tokens - @tokens.push([ :tCOMMENT, [ tok(s, e), range(s, e) ] ]) - end - - nil - end - - def emit_comment_from_range(p, pe) - emit_comment(@sharp_s, p == pe ? p - 2 : p) - end - - def diagnostic(type, reason, arguments=nil, location=range, highlights=[]) - @diagnostics.process( - Parser::Diagnostic.new(type, reason, arguments, location, highlights)) - end - - - def e_lbrace - @cond.push(false); @cmdarg.push(false) - - current_literal = @strings.literal - if current_literal - current_literal.start_interp_brace - end - end - - def numeric_literal_int - digits = tok(@num_digits_s, @num_suffix_s) - - if digits.end_with? '_'.freeze - diagnostic :error, :trailing_in_number, { :character => '_'.freeze }, - range(@te - 1, @te) - elsif digits.empty? && @num_base == 8 && version?(18) - # 1.8 did not raise an error on 0o. - digits = '0'.freeze - elsif digits.empty? - diagnostic :error, :empty_numeric - elsif @num_base == 8 && (invalid_idx = digits.index(/[89]/)) - invalid_s = @num_digits_s + invalid_idx - diagnostic :error, :invalid_octal, nil, - range(invalid_s, invalid_s + 1) - end - digits - end - - def on_newline(p) - @strings.on_newline(p) - end - - def check_ambiguous_slash(tm) - if tok(tm, tm + 1) == '/'.freeze - # Ambiguous regexp literal. - if @version < 30 - diagnostic :warning, :ambiguous_literal, nil, range(tm, tm + 1) - else - diagnostic :warning, :ambiguous_regexp, nil, range(tm, tm + 1) - end - end - end - - def emit_global_var(ts = @ts, te = @te) - if tok(ts, te) =~ /^\$([1-9][0-9]*)$/ - emit(:tNTH_REF, tok(ts + 1, te).to_i, ts, te) - elsif tok =~ /^\$([&`'+])$/ - emit(:tBACK_REF, tok(ts, te), ts, te) - else - emit(:tGVAR, tok(ts, te), ts, te) - end - end - - def emit_class_var(ts = @ts, te = @te) - if tok(ts, te) =~ /^@@[0-9]/ - diagnostic :error, :cvar_name, { :name => tok(ts, te) } - end - - emit(:tCVAR, tok(ts, te), ts, te) - end - - def emit_instance_var(ts = @ts, te = @te) - if tok(ts, te) =~ /^@[0-9]/ - diagnostic :error, :ivar_name, { :name => tok(ts, te) } - end - - emit(:tIVAR, tok(ts, te), ts, te) - end - - def emit_rbrace_rparen_rbrack - emit_table(PUNCTUATION) - - if @version < 24 - @cond.lexpop - @cmdarg.lexpop - else - @cond.pop - @cmdarg.pop - end - end - - def emit_colon_with_digits(p, tm, diag_msg) - if @version >= 27 - diagnostic :error, diag_msg, { name: tok(tm, @te) }, range(tm, @te) - else - emit(:tCOLON, tok(@ts, @ts + 1), @ts, @ts + 1) - p = @ts - end - p - end - - def emit_singleton_class - emit(:kCLASS, 'class'.freeze, @ts, @ts + 5) - emit(:tLSHFT, '<<'.freeze, @te - 2, @te) - end - - # Mapping of strings to parser tokens. - - PUNCTUATION = { - '=' => :tEQL, '&' => :tAMPER2, '|' => :tPIPE, - '!' => :tBANG, '^' => :tCARET, '+' => :tPLUS, - '-' => :tMINUS, '*' => :tSTAR2, '/' => :tDIVIDE, - '%' => :tPERCENT, '~' => :tTILDE, ',' => :tCOMMA, - ';' => :tSEMI, '.' => :tDOT, '..' => :tDOT2, - '...' => :tDOT3, '[' => :tLBRACK2, ']' => :tRBRACK, - '(' => :tLPAREN2, ')' => :tRPAREN, '?' => :tEH, - ':' => :tCOLON, '&&' => :tANDOP, '||' => :tOROP, - '-@' => :tUMINUS, '+@' => :tUPLUS, '~@' => :tTILDE, - '**' => :tPOW, '->' => :tLAMBDA, '=~' => :tMATCH, - '!~' => :tNMATCH, '==' => :tEQ, '!=' => :tNEQ, - '>' => :tGT, '>>' => :tRSHFT, '>=' => :tGEQ, - '<' => :tLT, '<<' => :tLSHFT, '<=' => :tLEQ, - '=>' => :tASSOC, '::' => :tCOLON2, '===' => :tEQQ, - '<=>' => :tCMP, '[]' => :tAREF, '[]=' => :tASET, - '{' => :tLCURLY, '}' => :tRCURLY, '`' => :tBACK_REF2, - '!@' => :tBANG, '&.' => :tANDDOT, - } - - PUNCTUATION_BEGIN = { - '&' => :tAMPER, '*' => :tSTAR, '**' => :tDSTAR, - '+' => :tUPLUS, '-' => :tUMINUS, '::' => :tCOLON3, - '(' => :tLPAREN, '{' => :tLBRACE, '[' => :tLBRACK, - } - - KEYWORDS = { - 'if' => :kIF_MOD, 'unless' => :kUNLESS_MOD, - 'while' => :kWHILE_MOD, 'until' => :kUNTIL_MOD, - 'rescue' => :kRESCUE_MOD, 'defined?' => :kDEFINED, - 'BEGIN' => :klBEGIN, 'END' => :klEND, - } - - KEYWORDS_BEGIN = { - 'if' => :kIF, 'unless' => :kUNLESS, - 'while' => :kWHILE, 'until' => :kUNTIL, - 'rescue' => :kRESCUE, 'defined?' => :kDEFINED, - 'BEGIN' => :klBEGIN, 'END' => :klEND, - } - - ESCAPE_WHITESPACE = { - " " => '\s', "\r" => '\r', "\n" => '\n', "\t" => '\t', - "\v" => '\v', "\f" => '\f' - } - - %w(class module def undef begin end then elsif else ensure case when - for break next redo retry in do return yield super self nil true - false and or not alias __FILE__ __LINE__ __ENCODING__).each do |keyword| - KEYWORDS_BEGIN[keyword] = KEYWORDS[keyword] = :"k#{keyword.upcase}" - end - - -# line 2089 "lib/parser/lexer.rl" - - # % -end diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/lexer-strings.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/lexer-strings.rb deleted file mode 100644 index ca8be09e..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/lexer-strings.rb +++ /dev/null @@ -1,5424 +0,0 @@ -# -*- encoding:utf-8; warn-indent:false; frozen_string_literal: true -*- - -# line 1 "lib/parser/lexer-strings.rl" - -# line 3 "lib/parser/lexer-strings.rl" -class Parser::LexerStrings - - -# line 9 "lib/parser/lexer-strings.rb" -class << self - attr_accessor :_lex_actions - private :_lex_actions, :_lex_actions= -end -self._lex_actions = [ - 0, 1, 0, 1, 18, 1, 22, 1, - 23, 1, 24, 1, 25, 1, 26, 1, - 27, 1, 28, 1, 32, 1, 33, 1, - 34, 1, 35, 1, 36, 1, 37, 1, - 38, 1, 42, 1, 43, 1, 44, 1, - 46, 1, 47, 1, 48, 1, 49, 1, - 52, 1, 53, 1, 54, 1, 55, 1, - 56, 1, 57, 1, 60, 1, 61, 1, - 62, 1, 63, 1, 64, 1, 65, 1, - 66, 1, 69, 1, 70, 1, 71, 1, - 72, 1, 73, 1, 74, 1, 75, 1, - 76, 1, 77, 1, 79, 1, 80, 1, - 81, 2, 0, 27, 2, 0, 37, 2, - 0, 46, 2, 0, 52, 2, 0, 56, - 2, 0, 62, 2, 0, 65, 2, 0, - 72, 2, 0, 77, 2, 1, 31, 2, - 1, 41, 2, 1, 78, 2, 2, 31, - 2, 2, 41, 2, 2, 78, 2, 3, - 31, 2, 3, 41, 2, 3, 78, 2, - 8, 31, 2, 8, 41, 2, 8, 78, - 2, 10, 31, 2, 10, 41, 2, 10, - 78, 2, 11, 31, 2, 11, 41, 2, - 11, 78, 2, 12, 31, 2, 12, 41, - 2, 12, 78, 2, 13, 31, 2, 13, - 41, 2, 13, 78, 2, 14, 31, 2, - 14, 41, 2, 14, 78, 2, 15, 31, - 2, 15, 41, 2, 15, 78, 2, 16, - 31, 2, 16, 41, 2, 16, 78, 2, - 17, 31, 2, 17, 41, 2, 17, 78, - 2, 18, 45, 2, 18, 51, 2, 19, - 30, 2, 19, 40, 2, 19, 59, 2, - 19, 68, 2, 20, 29, 2, 20, 30, - 2, 20, 39, 2, 20, 40, 2, 20, - 58, 2, 20, 59, 2, 20, 67, 2, - 20, 68, 2, 21, 29, 2, 21, 30, - 2, 21, 39, 2, 21, 40, 2, 21, - 58, 2, 21, 59, 2, 21, 67, 2, - 21, 68, 2, 22, 78, 2, 25, 0, - 3, 0, 50, 18, 3, 2, 5, 31, - 3, 2, 5, 41, 3, 2, 5, 78, - 3, 2, 6, 31, 3, 2, 6, 41, - 3, 2, 6, 78, 3, 4, 5, 31, - 3, 4, 5, 41, 3, 4, 5, 78, - 3, 4, 6, 31, 3, 4, 6, 41, - 3, 4, 6, 78, 3, 8, 6, 31, - 3, 8, 6, 41, 3, 8, 6, 78, - 3, 9, 5, 31, 3, 9, 5, 41, - 3, 9, 5, 78, 3, 15, 16, 31, - 3, 15, 16, 41, 3, 15, 16, 78, - 3, 18, 17, 31, 3, 18, 17, 41, - 3, 18, 17, 78, 4, 2, 5, 6, - 31, 4, 2, 5, 6, 41, 4, 2, - 5, 6, 78, 4, 4, 5, 6, 31, - 4, 4, 5, 6, 41, 4, 4, 5, - 6, 78, 4, 7, 5, 6, 31, 4, - 7, 5, 6, 41, 4, 7, 5, 6, - 78, 4, 9, 5, 6, 31, 4, 9, - 5, 6, 41, 4, 9, 5, 6, 78 -] - -class << self - attr_accessor :_lex_trans_keys - private :_lex_trans_keys, :_lex_trans_keys= -end -self._lex_trans_keys = [ - 0, 0, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 45, 0, 120, 0, 120, - 0, 92, 0, 120, 0, 120, - 0, 45, 0, 120, 0, - 120, 67, 99, 45, 45, - 0, 92, 0, 120, 0, 102, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 45, - 0, 120, 0, 120, 0, 92, - 0, 120, 0, 120, 0, - 45, 0, 120, 0, 120, - 67, 99, 45, 45, 0, 92, - 0, 120, 0, 102, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 127, 0, - 122, 0, 45, 0, 120, - 0, 120, 0, 92, 0, 120, - 0, 120, 0, 45, 0, - 120, 0, 120, 67, 99, - 45, 45, 0, 92, 0, 120, - 0, 102, 0, 26, 0, - 92, 9, 32, 36, 123, - 0, 127, 0, 0, 48, 57, - 0, 127, 0, 127, 0, - 127, 0, 127, 0, 120, - 0, 0, 0, 0, 48, 55, - 48, 55, 0, 0, 0, - 0, 0, 92, 0, 0, - 0, 0, 0, 0, 0, 92, - 45, 45, 0, 0, 0, - 0, 0, 0, 0, 92, - 48, 102, 48, 102, 0, 0, - 48, 102, 48, 102, 0, - 0, 0, 45, 0, 92, - 0, 92, 0, 0, 0, 0, - 0, 92, 48, 102, 48, - 102, 0, 0, 0, 45, - 10, 10, 0, 92, 48, 123, - 48, 102, 48, 102, 48, - 102, 0, 0, 0, 125, - 0, 125, 0, 0, 0, 125, - 0, 0, 0, 125, 0, - 125, 0, 125, 0, 125, - 0, 0, 0, 125, 0, 125, - 0, 125, 0, 125, 0, - 125, 0, 125, 0, 0, - 0, 0, 48, 102, 0, 0, - 0, 92, 36, 123, 0, - 127, 0, 0, 48, 57, - 0, 127, 0, 127, 0, 127, - 0, 127, 0, 120, 0, - 0, 0, 0, 48, 55, - 48, 55, 0, 0, 0, 0, - 0, 92, 0, 0, 0, - 0, 0, 0, 0, 92, - 45, 45, 0, 0, 0, 0, - 0, 0, 0, 92, 48, - 102, 48, 102, 0, 0, - 48, 102, 48, 102, 0, 0, - 0, 45, 0, 92, 0, - 92, 0, 0, 0, 0, - 0, 92, 48, 102, 48, 102, - 0, 0, 0, 45, 10, - 10, 0, 92, 48, 123, - 48, 102, 48, 102, 48, 102, - 0, 0, 0, 125, 0, - 125, 0, 0, 0, 125, - 0, 0, 0, 125, 0, 125, - 0, 125, 0, 125, 0, - 0, 0, 125, 0, 125, - 0, 125, 0, 125, 0, 125, - 0, 125, 0, 0, 0, - 0, 48, 102, 0, 0, - 0, 92, 9, 32, 0, 26, - 0, 92, 0, 26, 0, - 35, 36, 123, 0, 127, - 0, 0, 48, 57, 0, 127, - 0, 127, 0, 127, 0, - 127, 0, 26, 0, 35, - 9, 32, 36, 123, 0, 127, - 0, 0, 48, 57, 0, - 127, 0, 127, 0, 127, - 0, 127, 0, 32, 9, 32, - 65, 122, 65, 122, 63, - 63, 0, 0, 0, 127, - 0, 127, 0, 120, 0, 0, - 0, 0, 48, 55, 48, - 55, 0, 0, 0, 0, - 0, 92, 0, 0, 0, 0, - 0, 0, 0, 92, 45, - 45, 0, 0, 0, 0, - 0, 0, 0, 92, 48, 102, - 48, 102, 0, 0, 48, - 102, 48, 102, 0, 0, - 0, 45, 0, 92, 0, 92, - 0, 0, 0, 0, 0, - 92, 48, 102, 48, 102, - 0, 0, 0, 45, 10, 10, - 0, 92, 48, 123, 48, - 102, 48, 102, 48, 102, - 0, 0, 0, 125, 0, 125, - 0, 0, 0, 125, 0, - 0, 0, 125, 0, 125, - 0, 125, 0, 125, 0, 0, - 0, 125, 0, 125, 0, - 125, 0, 125, 0, 125, - 0, 125, 0, 125, 0, 125, - 0, 125, 0, 125, 0, - 125, 0, 125, 0, 125, - 0, 125, 0, 125, 0, 125, - 0, 125, 0, 125, 0, - 125, 0, 0, 0, 0, - 48, 102, 0, 0, 0 -] - -class << self - attr_accessor :_lex_key_spans - private :_lex_key_spans, :_lex_key_spans= -end -self._lex_key_spans = [ - 0, 128, 128, 128, 128, 46, 121, 121, - 93, 121, 121, 46, 121, 121, 33, 1, - 93, 121, 103, 128, 128, 128, 128, 46, - 121, 121, 93, 121, 121, 46, 121, 121, - 33, 1, 93, 121, 103, 128, 128, 128, - 128, 128, 128, 128, 128, 123, 46, 121, - 121, 93, 121, 121, 46, 121, 121, 33, - 1, 93, 121, 103, 27, 93, 24, 88, - 128, 0, 10, 128, 128, 128, 128, 121, - 0, 0, 8, 8, 0, 0, 93, 0, - 0, 0, 93, 1, 0, 0, 0, 93, - 55, 55, 0, 55, 55, 0, 46, 93, - 93, 0, 0, 93, 55, 55, 0, 46, - 1, 93, 76, 55, 55, 55, 0, 126, - 126, 0, 126, 0, 126, 126, 126, 126, - 0, 126, 126, 126, 126, 126, 126, 0, - 0, 55, 0, 93, 88, 128, 0, 10, - 128, 128, 128, 128, 121, 0, 0, 8, - 8, 0, 0, 93, 0, 0, 0, 93, - 1, 0, 0, 0, 93, 55, 55, 0, - 55, 55, 0, 46, 93, 93, 0, 0, - 93, 55, 55, 0, 46, 1, 93, 76, - 55, 55, 55, 0, 126, 126, 0, 126, - 0, 126, 126, 126, 126, 0, 126, 126, - 126, 126, 126, 126, 0, 0, 55, 0, - 93, 24, 27, 93, 27, 36, 88, 128, - 0, 10, 128, 128, 128, 128, 27, 36, - 24, 88, 128, 0, 10, 128, 128, 128, - 128, 33, 24, 58, 58, 1, 0, 128, - 128, 121, 0, 0, 8, 8, 0, 0, - 93, 0, 0, 0, 93, 1, 0, 0, - 0, 93, 55, 55, 0, 55, 55, 0, - 46, 93, 93, 0, 0, 93, 55, 55, - 0, 46, 1, 93, 76, 55, 55, 55, - 0, 126, 126, 0, 126, 0, 126, 126, - 126, 126, 0, 126, 126, 126, 126, 126, - 126, 126, 126, 126, 126, 126, 126, 126, - 126, 126, 126, 126, 126, 126, 0, 0, - 55, 0 -] - -class << self - attr_accessor :_lex_index_offsets - private :_lex_index_offsets, :_lex_index_offsets= -end -self._lex_index_offsets = [ - 0, 0, 129, 258, 387, 516, 563, 685, - 807, 901, 1023, 1145, 1192, 1314, 1436, 1470, - 1472, 1566, 1688, 1792, 1921, 2050, 2179, 2308, - 2355, 2477, 2599, 2693, 2815, 2937, 2984, 3106, - 3228, 3262, 3264, 3358, 3480, 3584, 3713, 3842, - 3971, 4100, 4229, 4358, 4487, 4616, 4740, 4787, - 4909, 5031, 5125, 5247, 5369, 5416, 5538, 5660, - 5694, 5696, 5790, 5912, 6016, 6044, 6138, 6163, - 6252, 6381, 6382, 6393, 6522, 6651, 6780, 6909, - 7031, 7032, 7033, 7042, 7051, 7052, 7053, 7147, - 7148, 7149, 7150, 7244, 7246, 7247, 7248, 7249, - 7343, 7399, 7455, 7456, 7512, 7568, 7569, 7616, - 7710, 7804, 7805, 7806, 7900, 7956, 8012, 8013, - 8060, 8062, 8156, 8233, 8289, 8345, 8401, 8402, - 8529, 8656, 8657, 8784, 8785, 8912, 9039, 9166, - 9293, 9294, 9421, 9548, 9675, 9802, 9929, 10056, - 10057, 10058, 10114, 10115, 10209, 10298, 10427, 10428, - 10439, 10568, 10697, 10826, 10955, 11077, 11078, 11079, - 11088, 11097, 11098, 11099, 11193, 11194, 11195, 11196, - 11290, 11292, 11293, 11294, 11295, 11389, 11445, 11501, - 11502, 11558, 11614, 11615, 11662, 11756, 11850, 11851, - 11852, 11946, 12002, 12058, 12059, 12106, 12108, 12202, - 12279, 12335, 12391, 12447, 12448, 12575, 12702, 12703, - 12830, 12831, 12958, 13085, 13212, 13339, 13340, 13467, - 13594, 13721, 13848, 13975, 14102, 14103, 14104, 14160, - 14161, 14255, 14280, 14308, 14402, 14430, 14467, 14556, - 14685, 14686, 14697, 14826, 14955, 15084, 15213, 15241, - 15278, 15303, 15392, 15521, 15522, 15533, 15662, 15791, - 15920, 16049, 16083, 16108, 16167, 16226, 16228, 16229, - 16358, 16487, 16609, 16610, 16611, 16620, 16629, 16630, - 16631, 16725, 16726, 16727, 16728, 16822, 16824, 16825, - 16826, 16827, 16921, 16977, 17033, 17034, 17090, 17146, - 17147, 17194, 17288, 17382, 17383, 17384, 17478, 17534, - 17590, 17591, 17638, 17640, 17734, 17811, 17867, 17923, - 17979, 17980, 18107, 18234, 18235, 18362, 18363, 18490, - 18617, 18744, 18871, 18872, 18999, 19126, 19253, 19380, - 19507, 19634, 19761, 19888, 20015, 20142, 20269, 20396, - 20523, 20650, 20777, 20904, 21031, 21158, 21285, 21286, - 21287, 21343 -] - -class << self - attr_accessor :_lex_indicies - private :_lex_indicies, :_lex_indicies= -end -self._lex_indicies = [ - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2, 2, 0, 2, 0, 2, 2, - 0, 0, 2, 2, 2, 3, 2, 2, - 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 2, 2, 2, 2, 2, 2, - 2, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 0, 2, 0, 0, 1, - 2, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 0, 0, 0, 2, 0, - 1, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 0, 0, 0, 0, 0, - 0, 0, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 0, 0, 0, 0, - 2, 0, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 0, 0, 0, 0, - 0, 2, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 0, 0, 0, 0, - 0, 0, 7, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 0, 0, 0, - 0, 5, 0, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 0, 0, 0, - 0, 0, 5, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 0, 0, 0, - 0, 0, 0, 0, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 0, 0, - 0, 0, 8, 0, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 0, 0, - 0, 0, 0, 8, 10, 11, 11, 11, - 10, 11, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 10, 11, - 11, 11, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 11, - 11, 12, 11, 10, 13, 13, 13, 10, - 13, 13, 13, 13, 13, 14, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 10, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, - 15, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 16, 13, 10, 13, 13, - 13, 10, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 10, - 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 17, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 16, 13, 10, - 18, 18, 18, 10, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, - 18, 10, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 19, 18, - 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 20, 18, 10, 21, 21, - 21, 10, 21, 21, 21, 21, 21, 22, - 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 10, - 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 23, 21, 10, - 21, 21, 21, 10, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, - 21, 10, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 23, - 21, 10, 11, 11, 11, 10, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 10, 11, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 24, 11, - 10, 25, 25, 25, 10, 25, 25, 25, - 25, 25, 26, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 10, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 27, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 28, 25, 25, 25, - 25, 25, 25, 29, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, - 30, 25, 10, 25, 25, 25, 10, 25, - 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 10, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 30, 25, 31, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 32, 10, 32, 10, - 10, 33, 33, 33, 10, 33, 33, 33, - 33, 33, 33, 33, 33, 33, 33, 33, - 33, 33, 33, 33, 33, 33, 33, 33, - 33, 33, 10, 33, 33, 33, 33, 33, - 33, 33, 33, 33, 33, 33, 33, 33, - 33, 33, 33, 33, 33, 33, 33, 33, - 33, 33, 33, 33, 33, 33, 33, 33, - 33, 33, 33, 33, 33, 33, 33, 34, - 33, 33, 33, 33, 33, 33, 33, 33, - 33, 33, 33, 33, 33, 33, 33, 33, - 33, 33, 33, 33, 33, 33, 33, 33, - 33, 33, 33, 33, 35, 33, 10, 13, - 13, 13, 10, 13, 13, 13, 13, 13, - 14, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, - 10, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 17, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 16, 13, - 10, 36, 36, 36, 10, 36, 36, 36, - 36, 36, 36, 36, 36, 36, 36, 36, - 36, 36, 36, 36, 36, 36, 36, 36, - 36, 36, 10, 36, 36, 36, 36, 36, - 36, 36, 36, 36, 36, 36, 36, 36, - 36, 36, 36, 36, 36, 36, 36, 36, - 37, 37, 37, 37, 37, 37, 37, 37, - 37, 37, 36, 36, 36, 36, 36, 36, - 36, 37, 37, 37, 37, 37, 37, 36, - 36, 36, 36, 36, 36, 36, 36, 36, - 36, 36, 36, 36, 36, 36, 36, 36, - 36, 36, 36, 36, 36, 36, 36, 36, - 36, 37, 37, 37, 37, 37, 37, 36, - 38, 38, 38, 38, 38, 38, 38, 38, - 38, 38, 38, 38, 38, 38, 38, 38, - 38, 38, 38, 38, 38, 38, 38, 38, - 38, 38, 38, 38, 38, 38, 38, 38, - 38, 40, 40, 38, 40, 38, 40, 40, - 38, 38, 40, 40, 40, 41, 40, 40, - 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 40, 40, 40, 40, 40, 40, - 40, 39, 39, 39, 39, 39, 39, 39, - 39, 39, 39, 39, 39, 39, 39, 39, - 39, 39, 39, 39, 39, 39, 39, 39, - 39, 39, 39, 38, 40, 38, 38, 39, - 40, 39, 39, 39, 39, 39, 39, 39, - 39, 39, 39, 39, 39, 39, 39, 39, - 39, 39, 39, 39, 39, 39, 39, 39, - 39, 39, 39, 38, 38, 38, 40, 38, - 39, 38, 38, 38, 38, 38, 38, 38, - 38, 38, 38, 38, 38, 38, 38, 38, - 38, 38, 38, 38, 38, 38, 38, 38, - 38, 38, 38, 38, 38, 38, 38, 38, - 38, 38, 38, 38, 38, 38, 38, 38, - 38, 38, 38, 38, 38, 38, 38, 38, - 38, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 38, 38, 38, 38, 38, - 38, 38, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 38, 38, 38, 38, - 40, 38, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 38, 38, 38, 38, - 38, 40, 38, 38, 38, 38, 38, 38, - 38, 38, 38, 38, 38, 38, 38, 38, - 38, 38, 38, 38, 38, 38, 38, 38, - 38, 38, 38, 38, 38, 38, 38, 38, - 38, 38, 38, 38, 38, 38, 38, 38, - 38, 38, 38, 38, 38, 38, 38, 38, - 38, 38, 44, 44, 44, 44, 44, 44, - 44, 44, 44, 44, 38, 38, 38, 38, - 38, 38, 45, 43, 43, 43, 43, 43, - 43, 43, 43, 43, 43, 43, 43, 43, - 43, 43, 43, 43, 43, 43, 43, 43, - 43, 43, 43, 43, 43, 38, 38, 38, - 38, 43, 38, 43, 43, 43, 43, 43, - 43, 43, 43, 43, 43, 43, 43, 43, - 43, 43, 43, 43, 43, 43, 43, 43, - 43, 43, 43, 43, 43, 38, 38, 38, - 38, 38, 43, 38, 38, 38, 38, 38, - 38, 38, 38, 38, 38, 38, 38, 38, - 38, 38, 38, 38, 38, 38, 38, 38, - 38, 38, 38, 38, 38, 38, 38, 38, - 38, 38, 38, 38, 38, 38, 38, 38, - 38, 38, 38, 38, 38, 38, 38, 38, - 38, 38, 38, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 38, 38, 38, - 38, 38, 38, 38, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 38, 38, - 38, 38, 46, 38, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 38, 38, - 38, 38, 38, 46, 48, 49, 49, 49, - 48, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 48, 49, - 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 49, - 49, 50, 49, 48, 51, 51, 51, 48, - 51, 51, 51, 51, 51, 52, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 48, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, - 53, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 54, 51, 48, 51, 51, - 51, 48, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 48, - 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 55, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 54, 51, 48, - 56, 56, 56, 48, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, - 56, 48, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 57, 56, - 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 58, 56, 48, 59, 59, - 59, 48, 59, 59, 59, 59, 59, 60, - 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 48, - 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 61, 59, 48, - 59, 59, 59, 48, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, - 59, 48, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 61, - 59, 48, 49, 49, 49, 48, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 48, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 62, 49, - 48, 63, 63, 63, 48, 63, 63, 63, - 63, 63, 64, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 48, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 65, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 66, 63, 63, 63, - 63, 63, 63, 67, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, - 68, 63, 48, 63, 63, 63, 48, 63, - 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 48, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 68, 63, 69, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 48, 48, 48, 48, - 48, 48, 48, 48, 70, 48, 70, 48, - 48, 71, 71, 71, 48, 71, 71, 71, - 71, 71, 71, 71, 71, 71, 71, 71, - 71, 71, 71, 71, 71, 71, 71, 71, - 71, 71, 48, 71, 71, 71, 71, 71, - 71, 71, 71, 71, 71, 71, 71, 71, - 71, 71, 71, 71, 71, 71, 71, 71, - 71, 71, 71, 71, 71, 71, 71, 71, - 71, 71, 71, 71, 71, 71, 71, 72, - 71, 71, 71, 71, 71, 71, 71, 71, - 71, 71, 71, 71, 71, 71, 71, 71, - 71, 71, 71, 71, 71, 71, 71, 71, - 71, 71, 71, 71, 73, 71, 48, 51, - 51, 51, 48, 51, 51, 51, 51, 51, - 52, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, - 48, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 55, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 54, 51, - 48, 74, 74, 74, 48, 74, 74, 74, - 74, 74, 74, 74, 74, 74, 74, 74, - 74, 74, 74, 74, 74, 74, 74, 74, - 74, 74, 48, 74, 74, 74, 74, 74, - 74, 74, 74, 74, 74, 74, 74, 74, - 74, 74, 74, 74, 74, 74, 74, 74, - 75, 75, 75, 75, 75, 75, 75, 75, - 75, 75, 74, 74, 74, 74, 74, 74, - 74, 75, 75, 75, 75, 75, 75, 74, - 74, 74, 74, 74, 74, 74, 74, 74, - 74, 74, 74, 74, 74, 74, 74, 74, - 74, 74, 74, 74, 74, 74, 74, 74, - 74, 75, 75, 75, 75, 75, 75, 74, - 76, 76, 76, 76, 76, 76, 76, 76, - 76, 76, 76, 76, 76, 76, 76, 76, - 76, 76, 76, 76, 76, 76, 76, 76, - 76, 76, 76, 76, 76, 76, 76, 76, - 76, 78, 78, 76, 78, 76, 78, 78, - 76, 76, 78, 78, 78, 79, 78, 78, - 80, 80, 80, 80, 80, 80, 80, 80, - 80, 80, 78, 78, 78, 78, 78, 78, - 78, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 76, 78, 76, 76, 77, - 78, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 76, 76, 76, 78, 76, - 77, 76, 76, 76, 76, 76, 76, 76, - 76, 76, 76, 76, 76, 76, 76, 76, - 76, 76, 76, 76, 76, 76, 76, 76, - 76, 76, 76, 76, 76, 76, 76, 76, - 76, 76, 76, 76, 76, 76, 76, 76, - 76, 76, 76, 76, 76, 76, 76, 76, - 76, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 76, 76, 76, 76, 76, - 76, 76, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 76, 76, 76, 76, - 78, 76, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 78, 78, 78, 78, - 78, 78, 78, 78, 76, 76, 76, 76, - 76, 78, 76, 76, 76, 76, 76, 76, - 76, 76, 76, 76, 76, 76, 76, 76, - 76, 76, 76, 76, 76, 76, 76, 76, - 76, 76, 76, 76, 76, 76, 76, 76, - 76, 76, 76, 76, 76, 76, 76, 76, - 76, 76, 76, 76, 76, 76, 76, 76, - 76, 76, 82, 82, 82, 82, 82, 82, - 82, 82, 82, 82, 76, 76, 76, 76, - 76, 76, 83, 81, 81, 81, 81, 81, - 81, 81, 81, 81, 81, 81, 81, 81, - 81, 81, 81, 81, 81, 81, 81, 81, - 81, 81, 81, 81, 81, 76, 76, 76, - 76, 81, 76, 81, 81, 81, 81, 81, - 81, 81, 81, 81, 81, 81, 81, 81, - 81, 81, 81, 81, 81, 81, 81, 81, - 81, 81, 81, 81, 81, 76, 76, 76, - 76, 76, 81, 76, 76, 76, 76, 76, - 76, 76, 76, 76, 76, 76, 76, 76, - 76, 76, 76, 76, 76, 76, 76, 76, - 76, 76, 76, 76, 76, 76, 76, 76, - 76, 76, 76, 76, 76, 76, 76, 76, - 76, 76, 76, 76, 76, 76, 76, 76, - 76, 76, 76, 85, 85, 85, 85, 85, - 85, 85, 85, 85, 85, 76, 76, 76, - 76, 76, 76, 76, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 76, 76, - 76, 76, 84, 76, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 76, 76, - 76, 76, 76, 84, 86, 86, 86, 86, - 86, 86, 86, 86, 86, 86, 86, 86, - 86, 86, 86, 86, 86, 86, 86, 86, - 86, 86, 86, 86, 86, 86, 86, 86, - 86, 86, 86, 86, 86, 88, 88, 86, - 88, 86, 88, 88, 86, 86, 88, 88, - 88, 89, 88, 88, 90, 90, 90, 90, - 90, 90, 90, 90, 90, 90, 88, 88, - 88, 88, 88, 88, 88, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 86, - 88, 86, 86, 87, 88, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 86, - 86, 86, 88, 86, 87, 86, 86, 86, - 86, 86, 86, 86, 86, 86, 86, 86, - 86, 86, 86, 86, 86, 86, 86, 86, - 86, 86, 86, 86, 86, 86, 86, 86, - 86, 86, 86, 86, 86, 86, 86, 86, - 86, 86, 86, 86, 86, 86, 86, 86, - 86, 86, 86, 86, 86, 88, 88, 88, - 88, 88, 88, 88, 88, 88, 88, 86, - 86, 86, 86, 86, 86, 86, 88, 88, - 88, 88, 88, 88, 88, 88, 88, 88, - 88, 88, 88, 88, 88, 88, 88, 88, - 88, 88, 88, 88, 88, 88, 88, 88, - 86, 86, 86, 86, 88, 86, 88, 88, - 88, 88, 88, 88, 88, 88, 88, 88, - 88, 88, 88, 88, 88, 88, 88, 88, - 88, 88, 88, 88, 88, 88, 88, 88, - 86, 86, 86, 86, 86, 88, 86, 86, - 86, 86, 86, 86, 86, 86, 86, 86, - 86, 86, 86, 86, 86, 86, 86, 86, - 86, 86, 86, 86, 86, 86, 86, 86, - 86, 86, 86, 86, 86, 86, 86, 86, - 86, 86, 86, 86, 86, 86, 86, 86, - 86, 86, 86, 86, 86, 86, 92, 92, - 92, 92, 92, 92, 92, 92, 92, 92, - 86, 86, 86, 86, 86, 86, 93, 91, - 91, 91, 91, 91, 91, 91, 91, 91, - 91, 91, 91, 91, 91, 91, 91, 91, - 91, 91, 91, 91, 91, 91, 91, 91, - 91, 86, 86, 86, 86, 91, 86, 91, - 91, 91, 91, 91, 91, 91, 91, 91, - 91, 91, 91, 91, 91, 91, 91, 91, - 91, 91, 91, 91, 91, 91, 91, 91, - 91, 86, 86, 86, 86, 86, 91, 86, - 86, 86, 86, 86, 86, 86, 86, 86, - 86, 86, 86, 86, 86, 86, 86, 86, - 86, 86, 86, 86, 86, 86, 86, 86, - 86, 86, 86, 86, 86, 86, 86, 86, - 86, 86, 86, 86, 86, 86, 86, 86, - 86, 86, 86, 86, 86, 86, 86, 95, - 95, 95, 95, 95, 95, 95, 95, 95, - 95, 86, 86, 86, 86, 86, 86, 86, - 94, 94, 94, 94, 94, 94, 94, 94, - 94, 94, 94, 94, 94, 94, 94, 94, - 94, 94, 94, 94, 94, 94, 94, 94, - 94, 94, 86, 86, 86, 86, 94, 86, - 94, 94, 94, 94, 94, 94, 94, 94, - 94, 94, 94, 94, 94, 94, 94, 94, - 94, 94, 94, 94, 94, 94, 94, 94, - 94, 94, 86, 86, 86, 86, 86, 94, - 97, 96, 96, 96, 97, 96, 96, 96, - 96, 98, 99, 98, 98, 98, 96, 96, - 96, 96, 96, 96, 96, 96, 96, 96, - 96, 96, 97, 96, 96, 96, 96, 96, - 98, 96, 96, 96, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 96, 96, 96, - 96, 96, 96, 96, 96, 96, 96, 96, - 96, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 96, 101, 96, 96, 100, - 96, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 100, 96, 102, 103, 103, 103, - 102, 103, 103, 103, 103, 103, 103, 103, - 103, 103, 103, 103, 103, 103, 103, 103, - 103, 103, 103, 103, 103, 103, 102, 103, - 103, 103, 103, 103, 103, 103, 103, 103, - 103, 103, 103, 103, 103, 103, 103, 103, - 103, 104, 103, 102, 105, 105, 105, 102, - 105, 105, 105, 105, 105, 106, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 102, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, - 107, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 108, 105, 102, 105, 105, - 105, 102, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 102, - 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 109, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 108, 105, 102, - 110, 110, 110, 102, 110, 110, 110, 110, - 110, 110, 110, 110, 110, 110, 110, 110, - 110, 110, 110, 110, 110, 110, 110, 110, - 110, 102, 110, 110, 110, 110, 110, 110, - 110, 110, 110, 110, 110, 110, 110, 110, - 110, 110, 110, 110, 110, 110, 110, 110, - 110, 110, 110, 110, 110, 110, 110, 110, - 110, 110, 110, 110, 110, 110, 111, 110, - 110, 110, 110, 110, 110, 110, 110, 110, - 110, 110, 110, 110, 110, 110, 110, 110, - 110, 110, 110, 110, 110, 110, 110, 110, - 110, 110, 110, 112, 110, 102, 113, 113, - 113, 102, 113, 113, 113, 113, 113, 114, - 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 102, - 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 115, 113, 102, - 113, 113, 113, 102, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, - 113, 102, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 115, - 113, 102, 103, 103, 103, 102, 103, 103, - 103, 103, 103, 103, 103, 103, 103, 103, - 103, 103, 103, 103, 103, 103, 103, 103, - 103, 103, 103, 102, 103, 103, 103, 103, - 103, 103, 103, 103, 103, 103, 103, 103, - 103, 103, 103, 103, 103, 103, 116, 103, - 102, 117, 117, 117, 102, 117, 117, 117, - 117, 117, 118, 117, 117, 117, 117, 117, - 117, 117, 117, 117, 117, 117, 117, 117, - 117, 117, 102, 117, 117, 117, 117, 117, - 117, 117, 117, 117, 117, 117, 117, 117, - 117, 117, 117, 117, 117, 117, 117, 117, - 117, 117, 117, 117, 117, 117, 117, 117, - 117, 117, 117, 117, 117, 117, 117, 117, - 117, 117, 117, 119, 117, 117, 117, 117, - 117, 117, 117, 117, 117, 117, 117, 117, - 117, 117, 117, 117, 117, 117, 117, 117, - 117, 117, 117, 117, 120, 117, 117, 117, - 117, 117, 117, 121, 117, 117, 117, 117, - 117, 117, 117, 117, 117, 117, 117, 117, - 117, 117, 117, 117, 117, 117, 117, 117, - 122, 117, 102, 117, 117, 117, 102, 117, - 117, 117, 117, 117, 117, 117, 117, 117, - 117, 117, 117, 117, 117, 117, 117, 117, - 117, 117, 117, 117, 102, 117, 117, 117, - 117, 117, 117, 117, 117, 117, 117, 117, - 117, 117, 117, 117, 117, 117, 117, 117, - 117, 117, 117, 117, 117, 117, 117, 117, - 117, 117, 117, 117, 117, 117, 117, 117, - 117, 117, 117, 117, 117, 117, 117, 117, - 117, 117, 117, 117, 117, 117, 117, 117, - 117, 117, 117, 117, 117, 117, 117, 117, - 117, 117, 117, 117, 117, 117, 117, 117, - 117, 117, 117, 117, 117, 117, 117, 117, - 117, 117, 117, 117, 117, 117, 117, 117, - 117, 117, 117, 117, 117, 117, 117, 117, - 117, 117, 122, 117, 123, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, 124, 102, 124, 102, - 102, 125, 125, 125, 102, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 102, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 126, - 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 127, 125, 102, 105, - 105, 105, 102, 105, 105, 105, 105, 105, - 106, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, - 102, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 109, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 108, 105, - 102, 128, 128, 128, 102, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 102, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 129, 129, 129, 129, 129, 129, 129, 129, - 129, 129, 128, 128, 128, 128, 128, 128, - 128, 129, 129, 129, 129, 129, 129, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 128, 128, 128, 128, 128, - 128, 129, 129, 129, 129, 129, 129, 128, - 97, 130, 130, 130, 97, 130, 130, 130, - 130, 130, 130, 130, 130, 130, 130, 130, - 130, 130, 130, 130, 130, 130, 130, 130, - 130, 130, 97, 130, 132, 131, 131, 131, - 132, 131, 131, 131, 131, 133, 134, 133, - 133, 133, 131, 131, 131, 131, 131, 131, - 131, 131, 131, 131, 131, 131, 132, 131, - 131, 131, 131, 131, 133, 131, 131, 135, - 131, 131, 131, 131, 131, 131, 131, 131, - 131, 131, 131, 131, 131, 131, 131, 131, - 131, 131, 131, 131, 131, 131, 131, 131, - 131, 131, 131, 131, 131, 131, 131, 131, - 131, 131, 131, 131, 131, 131, 131, 131, - 131, 131, 131, 131, 131, 131, 131, 131, - 131, 131, 131, 131, 131, 131, 131, 131, - 136, 131, 133, 137, 133, 133, 133, 137, - 137, 137, 137, 137, 137, 137, 137, 137, - 137, 137, 137, 137, 137, 137, 137, 137, - 137, 133, 137, 139, 138, 138, 138, 138, - 138, 138, 138, 138, 138, 138, 138, 138, - 138, 138, 138, 138, 138, 138, 138, 138, - 138, 138, 138, 138, 138, 138, 138, 140, - 138, 138, 138, 138, 138, 138, 138, 138, - 138, 138, 138, 138, 138, 138, 138, 138, - 138, 138, 138, 138, 138, 138, 138, 138, - 138, 138, 138, 138, 138, 138, 138, 138, - 138, 138, 138, 138, 138, 138, 138, 138, - 138, 138, 138, 138, 138, 138, 138, 138, - 138, 138, 138, 138, 138, 138, 138, 138, - 138, 138, 141, 138, 142, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 142, - 142, 142, 142, 142, 142, 142, 142, 142, - 142, 142, 142, 142, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 142, 142, - 142, 142, 142, 142, 142, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 142, - 142, 142, 142, 1, 142, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 142, - 142, 142, 142, 142, 1, 142, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, - 142, 143, 143, 143, 143, 143, 143, 143, - 143, 143, 143, 143, 143, 143, 143, 143, - 143, 143, 143, 143, 143, 143, 143, 143, - 143, 143, 143, 143, 143, 143, 143, 143, - 143, 143, 143, 143, 143, 143, 143, 143, - 143, 143, 143, 143, 143, 143, 143, 143, - 143, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 143, 143, 143, 143, 143, - 143, 143, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 143, 143, 143, 143, - 5, 143, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 143, 143, 143, 143, - 143, 5, 144, 144, 144, 144, 144, 144, - 144, 144, 144, 144, 144, 144, 144, 144, - 144, 144, 144, 144, 144, 144, 144, 144, - 144, 144, 144, 144, 144, 144, 144, 144, - 144, 144, 144, 144, 144, 144, 144, 144, - 144, 144, 144, 144, 144, 144, 144, 144, - 144, 144, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 144, 144, 144, 144, - 144, 144, 144, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 144, 144, 144, - 144, 6, 144, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 144, 144, 144, - 144, 144, 6, 145, 145, 145, 145, 145, - 145, 145, 145, 145, 145, 145, 145, 145, - 145, 145, 145, 145, 145, 145, 145, 145, - 145, 145, 145, 145, 145, 145, 145, 145, - 145, 145, 145, 145, 145, 145, 145, 145, - 145, 145, 145, 145, 145, 145, 145, 145, - 145, 145, 145, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 145, 145, 145, - 145, 145, 145, 145, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 145, 145, - 145, 145, 8, 145, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 145, 145, - 145, 145, 145, 8, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 146, 146, - 146, 146, 146, 146, 146, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 146, - 146, 146, 146, 9, 146, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 146, - 146, 146, 146, 146, 9, 149, 148, 148, - 148, 149, 148, 148, 148, 148, 148, 148, - 148, 148, 148, 148, 148, 148, 148, 148, - 148, 148, 148, 148, 148, 148, 148, 149, - 148, 148, 148, 148, 148, 148, 148, 148, - 148, 148, 148, 148, 148, 148, 148, 148, - 148, 148, 148, 148, 148, 150, 150, 150, - 150, 150, 150, 150, 150, 148, 148, 148, - 148, 148, 148, 148, 148, 148, 148, 148, - 151, 148, 148, 148, 148, 148, 148, 148, - 148, 148, 152, 148, 148, 148, 148, 148, - 148, 148, 148, 148, 148, 148, 148, 148, - 148, 148, 148, 148, 148, 148, 148, 148, - 153, 148, 148, 148, 148, 148, 148, 148, - 148, 148, 148, 148, 148, 148, 148, 148, - 148, 148, 154, 148, 148, 155, 148, 156, - 157, 159, 159, 159, 159, 159, 159, 159, - 159, 158, 160, 160, 160, 160, 160, 160, - 160, 160, 158, 158, 161, 161, 33, 33, - 33, 161, 33, 33, 33, 33, 33, 33, - 33, 33, 33, 33, 33, 33, 33, 33, - 33, 33, 33, 33, 33, 33, 33, 161, - 33, 33, 33, 33, 33, 33, 33, 33, - 33, 33, 33, 33, 33, 33, 33, 33, - 33, 33, 33, 33, 33, 33, 33, 33, - 33, 33, 33, 33, 33, 33, 33, 33, - 33, 33, 33, 33, 34, 33, 33, 33, - 33, 33, 33, 33, 33, 33, 33, 33, - 33, 33, 33, 33, 33, 33, 33, 33, - 33, 33, 33, 33, 33, 33, 33, 33, - 33, 162, 33, 163, 164, 165, 165, 33, - 33, 33, 165, 33, 33, 33, 33, 33, - 33, 33, 33, 33, 33, 33, 33, 33, - 33, 33, 33, 33, 33, 33, 33, 33, - 165, 33, 33, 33, 33, 33, 33, 33, - 33, 33, 33, 33, 33, 33, 33, 33, - 33, 33, 33, 33, 33, 33, 33, 33, - 33, 33, 33, 33, 33, 33, 33, 33, - 33, 33, 33, 33, 33, 34, 33, 33, - 33, 33, 33, 33, 33, 33, 33, 33, - 33, 33, 33, 33, 33, 33, 33, 33, - 33, 33, 33, 33, 33, 33, 33, 33, - 33, 33, 166, 33, 32, 165, 167, 168, - 169, 169, 18, 18, 18, 169, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 169, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, - 19, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 170, 18, 171, - 171, 171, 171, 171, 171, 171, 171, 171, - 171, 169, 169, 169, 169, 169, 169, 169, - 171, 171, 171, 171, 171, 171, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 169, 169, 169, 169, 169, - 171, 171, 171, 171, 171, 171, 169, 173, - 173, 173, 173, 173, 173, 173, 173, 173, - 173, 172, 172, 172, 172, 172, 172, 172, - 173, 173, 173, 173, 173, 173, 172, 172, - 172, 172, 172, 172, 172, 172, 172, 172, - 172, 172, 172, 172, 172, 172, 172, 172, - 172, 172, 172, 172, 172, 172, 172, 172, - 173, 173, 173, 173, 173, 173, 172, 172, - 174, 174, 174, 174, 174, 174, 174, 174, - 174, 174, 165, 165, 165, 165, 165, 165, - 165, 174, 174, 174, 174, 174, 174, 165, - 165, 165, 165, 165, 165, 165, 165, 165, - 165, 165, 165, 165, 165, 165, 165, 165, - 165, 165, 165, 165, 165, 165, 165, 165, - 165, 174, 174, 174, 174, 174, 174, 165, - 176, 176, 176, 176, 176, 176, 176, 176, - 176, 176, 175, 175, 175, 175, 175, 175, - 175, 176, 176, 176, 176, 176, 176, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 175, 175, 175, 175, 175, 175, 175, - 175, 176, 176, 176, 176, 176, 176, 175, - 175, 165, 11, 11, 11, 165, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 165, 11, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 177, 11, - 161, 18, 18, 18, 161, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 161, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 19, - 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 20, 18, 161, 178, - 178, 178, 161, 178, 178, 178, 178, 178, - 178, 178, 178, 178, 178, 178, 178, 178, - 178, 178, 178, 178, 178, 178, 178, 178, - 161, 178, 178, 178, 178, 178, 178, 178, - 178, 178, 178, 178, 178, 178, 178, 178, - 178, 178, 178, 178, 178, 178, 178, 178, - 178, 178, 178, 178, 178, 178, 178, 178, - 178, 178, 178, 178, 178, 178, 178, 178, - 178, 178, 178, 178, 178, 178, 178, 178, - 178, 178, 178, 178, 178, 178, 178, 178, - 178, 178, 178, 178, 178, 178, 178, 178, - 178, 178, 179, 178, 180, 181, 181, 178, - 178, 178, 181, 178, 178, 178, 178, 178, - 178, 178, 178, 178, 178, 178, 178, 178, - 178, 178, 178, 178, 178, 178, 178, 178, - 181, 178, 178, 178, 178, 178, 178, 178, - 178, 178, 178, 178, 178, 178, 178, 178, - 178, 178, 178, 178, 178, 178, 178, 178, - 178, 178, 178, 178, 178, 178, 178, 178, - 178, 178, 178, 178, 178, 178, 178, 178, - 178, 178, 178, 178, 178, 178, 178, 178, - 178, 178, 178, 178, 178, 178, 178, 178, - 178, 178, 178, 178, 178, 178, 178, 178, - 178, 178, 182, 178, 183, 183, 183, 183, - 183, 183, 183, 183, 183, 183, 181, 181, - 181, 181, 181, 181, 181, 183, 183, 183, - 183, 183, 183, 181, 181, 181, 181, 181, - 181, 181, 181, 181, 181, 181, 181, 181, - 181, 181, 181, 181, 181, 181, 181, 181, - 181, 181, 181, 181, 181, 183, 183, 183, - 183, 183, 183, 181, 185, 185, 185, 185, - 185, 185, 185, 185, 185, 185, 184, 184, - 184, 184, 184, 184, 184, 185, 185, 185, - 185, 185, 185, 184, 184, 184, 184, 184, - 184, 184, 184, 184, 184, 184, 184, 184, - 184, 184, 184, 184, 184, 184, 184, 184, - 184, 184, 184, 184, 184, 185, 185, 185, - 185, 185, 185, 184, 184, 181, 11, 11, - 11, 181, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 181, - 11, 11, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 11, - 11, 11, 177, 11, 186, 181, 181, 18, - 18, 18, 181, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, - 181, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 19, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 20, 18, 188, 188, 188, 188, - 188, 188, 188, 188, 188, 188, 187, 187, - 187, 187, 187, 187, 187, 188, 188, 188, - 188, 188, 188, 187, 187, 187, 187, 187, - 187, 187, 187, 187, 187, 187, 187, 187, - 187, 187, 187, 187, 187, 187, 187, 187, - 187, 187, 187, 187, 187, 188, 188, 188, - 188, 188, 188, 187, 187, 187, 187, 187, - 187, 187, 187, 187, 187, 187, 187, 187, - 187, 187, 187, 187, 187, 187, 187, 189, - 187, 190, 190, 190, 190, 190, 190, 190, - 190, 190, 190, 187, 187, 187, 187, 187, - 187, 187, 190, 190, 190, 190, 190, 190, - 187, 187, 187, 187, 187, 187, 187, 187, - 187, 187, 187, 187, 187, 187, 187, 187, - 187, 187, 187, 187, 187, 187, 187, 187, - 187, 187, 190, 190, 190, 190, 190, 190, - 187, 191, 191, 191, 191, 191, 191, 191, - 191, 191, 191, 187, 187, 187, 187, 187, - 187, 187, 191, 191, 191, 191, 191, 191, - 187, 187, 187, 187, 187, 187, 187, 187, - 187, 187, 187, 187, 187, 187, 187, 187, - 187, 187, 187, 187, 187, 187, 187, 187, - 187, 187, 191, 191, 191, 191, 191, 191, - 187, 192, 192, 192, 192, 192, 192, 192, - 192, 192, 192, 187, 187, 187, 187, 187, - 187, 187, 192, 192, 192, 192, 192, 192, - 187, 187, 187, 187, 187, 187, 187, 187, - 187, 187, 187, 187, 187, 187, 187, 187, - 187, 187, 187, 187, 187, 187, 187, 187, - 187, 187, 192, 192, 192, 192, 192, 192, - 187, 193, 196, 195, 195, 195, 196, 195, - 195, 195, 195, 197, 195, 195, 195, 195, - 195, 195, 195, 195, 195, 195, 195, 195, - 195, 195, 195, 195, 196, 195, 195, 195, - 195, 195, 197, 195, 195, 195, 195, 195, - 195, 195, 195, 195, 195, 195, 195, 195, - 195, 195, 198, 198, 198, 198, 198, 198, - 198, 198, 198, 198, 195, 195, 195, 195, - 195, 195, 195, 198, 198, 198, 198, 198, - 198, 195, 195, 195, 195, 195, 195, 195, - 195, 195, 195, 195, 195, 195, 195, 195, - 195, 195, 195, 195, 195, 195, 195, 195, - 195, 195, 195, 198, 198, 198, 198, 198, - 198, 195, 195, 195, 195, 195, 195, 195, - 195, 195, 195, 195, 195, 195, 195, 195, - 195, 195, 195, 195, 195, 195, 195, 199, - 195, 196, 195, 195, 195, 196, 195, 195, - 195, 195, 194, 195, 195, 195, 195, 195, - 195, 195, 195, 195, 195, 195, 195, 195, - 195, 195, 195, 196, 195, 195, 195, 195, - 195, 194, 195, 195, 195, 195, 195, 195, - 195, 195, 195, 195, 195, 195, 195, 195, - 195, 200, 200, 200, 200, 200, 200, 200, - 200, 200, 200, 195, 195, 195, 195, 195, - 195, 195, 200, 200, 200, 200, 200, 200, - 195, 195, 195, 195, 195, 195, 195, 195, - 195, 195, 195, 195, 195, 195, 195, 195, - 195, 195, 195, 195, 195, 195, 195, 195, - 195, 195, 200, 200, 200, 200, 200, 200, - 195, 195, 195, 195, 195, 195, 195, 195, - 195, 195, 195, 195, 195, 195, 195, 195, - 195, 195, 195, 195, 195, 195, 201, 195, - 194, 196, 200, 200, 200, 196, 200, 200, - 200, 200, 194, 200, 200, 200, 200, 200, - 200, 200, 200, 200, 200, 200, 200, 200, - 200, 200, 200, 196, 200, 200, 200, 200, - 200, 194, 200, 200, 200, 200, 200, 200, - 200, 200, 200, 200, 200, 200, 200, 200, - 200, 200, 200, 200, 200, 200, 200, 200, - 200, 200, 200, 200, 200, 200, 200, 200, - 200, 200, 200, 200, 200, 200, 200, 200, - 200, 200, 200, 200, 200, 200, 200, 200, - 200, 200, 200, 200, 200, 200, 200, 200, - 200, 200, 200, 200, 200, 200, 200, 200, - 200, 200, 200, 200, 200, 200, 200, 200, - 200, 200, 200, 200, 200, 200, 200, 200, - 200, 200, 200, 200, 200, 200, 200, 200, - 200, 200, 200, 200, 200, 200, 194, 200, - 202, 196, 203, 203, 203, 196, 203, 203, - 203, 203, 197, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 196, 203, 203, 203, 203, - 203, 197, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 198, 198, 198, 198, 198, 198, 198, - 198, 198, 198, 203, 203, 203, 203, 203, - 203, 203, 198, 198, 198, 198, 198, 198, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 198, 198, 198, 198, 198, 198, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 194, 203, - 196, 203, 203, 203, 196, 203, 203, 203, - 203, 194, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 196, 203, 203, 203, 203, 203, - 194, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 200, 200, 200, 200, 200, 200, 200, 200, - 200, 200, 203, 203, 203, 203, 203, 203, - 203, 200, 200, 200, 200, 200, 200, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 200, 200, 200, 200, 200, 200, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 196, 203, 196, - 203, 203, 203, 196, 203, 203, 203, 203, - 204, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 196, 203, 203, 203, 203, 203, 204, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 205, - 205, 205, 205, 205, 205, 205, 205, 205, - 205, 203, 203, 203, 203, 203, 203, 203, - 205, 205, 205, 205, 205, 205, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 205, 205, 205, 205, 205, 205, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 206, 203, 196, 203, - 203, 203, 196, 203, 203, 203, 203, 204, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 196, 203, 203, 203, 203, 203, 204, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 198, 198, - 198, 198, 198, 198, 198, 198, 198, 198, - 203, 203, 203, 203, 203, 203, 203, 198, - 198, 198, 198, 198, 198, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 198, - 198, 198, 198, 198, 198, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 206, 203, 207, 196, 203, - 203, 203, 196, 203, 203, 203, 203, 204, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 196, 203, 203, 203, 203, 203, 204, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, - 203, 203, 203, 203, 203, 203, 203, 208, - 208, 208, 208, 208, 208, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 208, - 208, 208, 208, 208, 208, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 206, 203, 196, 203, 203, - 203, 196, 203, 203, 203, 203, 204, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 196, - 203, 203, 203, 203, 203, 204, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 209, 209, 209, - 209, 209, 209, 209, 209, 209, 209, 203, - 203, 203, 203, 203, 203, 203, 209, 209, - 209, 209, 209, 209, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 209, 209, - 209, 209, 209, 209, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 206, 203, 196, 203, 203, 203, - 196, 203, 203, 203, 203, 204, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 196, 203, - 203, 203, 203, 203, 204, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 210, 210, 210, 210, - 210, 210, 210, 210, 210, 210, 203, 203, - 203, 203, 203, 203, 203, 210, 210, 210, - 210, 210, 210, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 210, 210, 210, - 210, 210, 210, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 206, 203, 196, 203, 203, 203, 196, - 203, 203, 203, 203, 204, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 196, 203, 203, - 203, 203, 203, 204, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 211, 211, 211, 211, 211, - 211, 211, 211, 211, 211, 203, 203, 203, - 203, 203, 203, 203, 211, 211, 211, 211, - 211, 211, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 211, 211, 211, 211, - 211, 211, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 206, 203, 196, 203, 203, 203, 196, 203, - 203, 203, 203, 204, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 196, 203, 203, 203, - 203, 203, 204, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 212, 212, 212, 212, 212, 212, - 212, 212, 212, 212, 203, 203, 203, 203, - 203, 203, 203, 212, 212, 212, 212, 212, - 212, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 212, 212, 212, 212, 212, - 212, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 206, - 203, 196, 203, 203, 203, 196, 203, 203, - 203, 203, 194, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 196, 203, 203, 203, 203, - 203, 194, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 212, 212, 212, 212, 212, 212, 212, - 212, 212, 212, 203, 203, 203, 203, 203, - 203, 203, 212, 212, 212, 212, 212, 212, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 212, 212, 212, 212, 212, 212, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 194, 203, - 213, 214, 216, 216, 216, 216, 216, 216, - 216, 216, 216, 216, 215, 215, 215, 215, - 215, 215, 215, 216, 216, 216, 216, 216, - 216, 215, 215, 215, 215, 215, 215, 215, - 215, 215, 215, 215, 215, 215, 215, 215, - 215, 215, 215, 215, 215, 215, 215, 215, - 215, 215, 215, 216, 216, 216, 216, 216, - 216, 215, 215, 218, 217, 217, 217, 218, - 217, 217, 217, 217, 217, 219, 217, 217, - 217, 217, 217, 217, 217, 217, 217, 217, - 217, 217, 217, 217, 217, 218, 217, 217, - 217, 217, 217, 217, 217, 217, 220, 217, - 217, 217, 217, 217, 217, 217, 217, 217, - 217, 217, 217, 217, 217, 217, 217, 217, - 217, 217, 217, 217, 217, 217, 217, 217, - 217, 217, 217, 217, 217, 217, 217, 217, - 217, 217, 217, 217, 217, 217, 217, 217, - 217, 217, 217, 217, 217, 217, 217, 217, - 217, 217, 217, 217, 217, 217, 217, 221, - 217, 223, 222, 222, 222, 222, 222, 222, - 222, 222, 222, 222, 222, 222, 222, 222, - 222, 222, 222, 222, 222, 222, 222, 222, - 222, 222, 222, 222, 222, 224, 222, 222, - 222, 222, 222, 222, 222, 222, 222, 222, - 222, 222, 222, 222, 222, 222, 222, 222, - 222, 222, 222, 222, 222, 222, 222, 222, - 222, 222, 222, 222, 222, 222, 222, 222, - 222, 222, 222, 222, 222, 222, 222, 222, - 222, 222, 222, 222, 222, 222, 222, 222, - 222, 222, 222, 222, 222, 222, 222, 222, - 225, 222, 226, 226, 226, 226, 226, 226, - 226, 226, 226, 226, 226, 226, 226, 226, - 226, 226, 226, 226, 226, 226, 226, 226, - 226, 226, 226, 226, 226, 226, 226, 226, - 226, 226, 226, 226, 226, 226, 226, 226, - 226, 226, 226, 226, 226, 226, 226, 226, - 226, 226, 39, 39, 39, 39, 39, 39, - 39, 39, 39, 39, 226, 226, 226, 226, - 226, 226, 226, 39, 39, 39, 39, 39, - 39, 39, 39, 39, 39, 39, 39, 39, - 39, 39, 39, 39, 39, 39, 39, 39, - 39, 39, 39, 39, 39, 226, 226, 226, - 226, 39, 226, 39, 39, 39, 39, 39, - 39, 39, 39, 39, 39, 39, 39, 39, - 39, 39, 39, 39, 39, 39, 39, 39, - 39, 39, 39, 39, 39, 226, 226, 226, - 226, 226, 39, 226, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 226, 227, - 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 43, - 43, 43, 43, 43, 43, 43, 43, 43, - 43, 227, 227, 227, 227, 227, 227, 227, - 43, 43, 43, 43, 43, 43, 43, 43, - 43, 43, 43, 43, 43, 43, 43, 43, - 43, 43, 43, 43, 43, 43, 43, 43, - 43, 43, 227, 227, 227, 227, 43, 227, - 43, 43, 43, 43, 43, 43, 43, 43, - 43, 43, 43, 43, 43, 43, 43, 43, - 43, 43, 43, 43, 43, 43, 43, 43, - 43, 43, 227, 227, 227, 227, 227, 43, - 228, 228, 228, 228, 228, 228, 228, 228, - 228, 228, 228, 228, 228, 228, 228, 228, - 228, 228, 228, 228, 228, 228, 228, 228, - 228, 228, 228, 228, 228, 228, 228, 228, - 228, 228, 228, 228, 228, 228, 228, 228, - 228, 228, 228, 228, 228, 228, 228, 228, - 43, 43, 43, 43, 43, 43, 43, 43, - 43, 43, 228, 228, 228, 228, 228, 228, - 228, 44, 44, 44, 44, 44, 44, 44, - 44, 44, 44, 44, 44, 44, 44, 44, - 44, 44, 44, 44, 44, 44, 44, 44, - 44, 44, 44, 228, 228, 228, 228, 44, - 228, 44, 44, 44, 44, 44, 44, 44, - 44, 44, 44, 44, 44, 44, 44, 44, - 44, 44, 44, 44, 44, 44, 44, 44, - 44, 44, 44, 228, 228, 228, 228, 228, - 44, 229, 229, 229, 229, 229, 229, 229, - 229, 229, 229, 229, 229, 229, 229, 229, - 229, 229, 229, 229, 229, 229, 229, 229, - 229, 229, 229, 229, 229, 229, 229, 229, - 229, 229, 229, 229, 229, 229, 229, 229, - 229, 229, 229, 229, 229, 229, 229, 229, - 229, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 229, 229, 229, 229, 229, - 229, 229, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 229, 229, 229, 229, - 46, 229, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 229, 229, 229, 229, - 229, 46, 230, 230, 230, 230, 230, 230, - 230, 230, 230, 230, 230, 230, 230, 230, - 230, 230, 230, 230, 230, 230, 230, 230, - 230, 230, 230, 230, 230, 230, 230, 230, - 230, 230, 230, 230, 230, 230, 230, 230, - 230, 230, 230, 230, 230, 230, 230, 230, - 230, 230, 46, 46, 46, 46, 46, 46, - 46, 46, 46, 46, 230, 230, 230, 230, - 230, 230, 230, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 230, 230, 230, - 230, 47, 230, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 47, 47, 47, - 47, 47, 47, 47, 47, 230, 230, 230, - 230, 230, 47, 233, 232, 232, 232, 233, - 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 233, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 234, 234, 234, 234, 234, - 234, 234, 234, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 235, 232, - 232, 232, 232, 232, 232, 232, 232, 232, - 236, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 237, 232, - 232, 232, 232, 232, 232, 232, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, - 238, 232, 232, 239, 232, 240, 241, 243, - 243, 243, 243, 243, 243, 243, 243, 242, - 244, 244, 244, 244, 244, 244, 244, 244, - 242, 242, 245, 245, 71, 71, 71, 245, - 71, 71, 71, 71, 71, 71, 71, 71, - 71, 71, 71, 71, 71, 71, 71, 71, - 71, 71, 71, 71, 71, 245, 71, 71, - 71, 71, 71, 71, 71, 71, 71, 71, - 71, 71, 71, 71, 71, 71, 71, 71, - 71, 71, 71, 71, 71, 71, 71, 71, - 71, 71, 71, 71, 71, 71, 71, 71, - 71, 71, 72, 71, 71, 71, 71, 71, - 71, 71, 71, 71, 71, 71, 71, 71, - 71, 71, 71, 71, 71, 71, 71, 71, - 71, 71, 71, 71, 71, 71, 71, 246, - 71, 247, 248, 249, 249, 71, 71, 71, - 249, 71, 71, 71, 71, 71, 71, 71, - 71, 71, 71, 71, 71, 71, 71, 71, - 71, 71, 71, 71, 71, 71, 249, 71, - 71, 71, 71, 71, 71, 71, 71, 71, - 71, 71, 71, 71, 71, 71, 71, 71, - 71, 71, 71, 71, 71, 71, 71, 71, - 71, 71, 71, 71, 71, 71, 71, 71, - 71, 71, 71, 72, 71, 71, 71, 71, - 71, 71, 71, 71, 71, 71, 71, 71, - 71, 71, 71, 71, 71, 71, 71, 71, - 71, 71, 71, 71, 71, 71, 71, 71, - 250, 71, 70, 249, 251, 252, 253, 253, - 56, 56, 56, 253, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, - 56, 253, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 57, 56, - 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 254, 56, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 253, - 253, 253, 253, 253, 253, 253, 255, 255, - 255, 255, 255, 255, 253, 253, 253, 253, - 253, 253, 253, 253, 253, 253, 253, 253, - 253, 253, 253, 253, 253, 253, 253, 253, - 253, 253, 253, 253, 253, 253, 255, 255, - 255, 255, 255, 255, 253, 257, 257, 257, - 257, 257, 257, 257, 257, 257, 257, 256, - 256, 256, 256, 256, 256, 256, 257, 257, - 257, 257, 257, 257, 256, 256, 256, 256, - 256, 256, 256, 256, 256, 256, 256, 256, - 256, 256, 256, 256, 256, 256, 256, 256, - 256, 256, 256, 256, 256, 256, 257, 257, - 257, 257, 257, 257, 256, 256, 258, 258, - 258, 258, 258, 258, 258, 258, 258, 258, - 249, 249, 249, 249, 249, 249, 249, 258, - 258, 258, 258, 258, 258, 249, 249, 249, - 249, 249, 249, 249, 249, 249, 249, 249, - 249, 249, 249, 249, 249, 249, 249, 249, - 249, 249, 249, 249, 249, 249, 249, 258, - 258, 258, 258, 258, 258, 249, 260, 260, - 260, 260, 260, 260, 260, 260, 260, 260, - 259, 259, 259, 259, 259, 259, 259, 260, - 260, 260, 260, 260, 260, 259, 259, 259, - 259, 259, 259, 259, 259, 259, 259, 259, - 259, 259, 259, 259, 259, 259, 259, 259, - 259, 259, 259, 259, 259, 259, 259, 260, - 260, 260, 260, 260, 260, 259, 259, 249, - 49, 49, 49, 249, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 49, - 49, 249, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 261, 49, 245, 56, - 56, 56, 245, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, - 245, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 57, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 58, 56, 245, 262, 262, 262, - 245, 262, 262, 262, 262, 262, 262, 262, - 262, 262, 262, 262, 262, 262, 262, 262, - 262, 262, 262, 262, 262, 262, 245, 262, - 262, 262, 262, 262, 262, 262, 262, 262, - 262, 262, 262, 262, 262, 262, 262, 262, - 262, 262, 262, 262, 262, 262, 262, 262, - 262, 262, 262, 262, 262, 262, 262, 262, - 262, 262, 262, 262, 262, 262, 262, 262, - 262, 262, 262, 262, 262, 262, 262, 262, - 262, 262, 262, 262, 262, 262, 262, 262, - 262, 262, 262, 262, 262, 262, 262, 262, - 263, 262, 264, 265, 265, 262, 262, 262, - 265, 262, 262, 262, 262, 262, 262, 262, - 262, 262, 262, 262, 262, 262, 262, 262, - 262, 262, 262, 262, 262, 262, 265, 262, - 262, 262, 262, 262, 262, 262, 262, 262, - 262, 262, 262, 262, 262, 262, 262, 262, - 262, 262, 262, 262, 262, 262, 262, 262, - 262, 262, 262, 262, 262, 262, 262, 262, - 262, 262, 262, 262, 262, 262, 262, 262, - 262, 262, 262, 262, 262, 262, 262, 262, - 262, 262, 262, 262, 262, 262, 262, 262, - 262, 262, 262, 262, 262, 262, 262, 262, - 266, 262, 267, 267, 267, 267, 267, 267, - 267, 267, 267, 267, 265, 265, 265, 265, - 265, 265, 265, 267, 267, 267, 267, 267, - 267, 265, 265, 265, 265, 265, 265, 265, - 265, 265, 265, 265, 265, 265, 265, 265, - 265, 265, 265, 265, 265, 265, 265, 265, - 265, 265, 265, 267, 267, 267, 267, 267, - 267, 265, 269, 269, 269, 269, 269, 269, - 269, 269, 269, 269, 268, 268, 268, 268, - 268, 268, 268, 269, 269, 269, 269, 269, - 269, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 269, 269, 269, 269, 269, - 269, 268, 268, 265, 49, 49, 49, 265, - 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 265, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 49, - 261, 49, 270, 265, 265, 56, 56, 56, - 265, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 265, 56, - 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 57, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, - 58, 56, 272, 272, 272, 272, 272, 272, - 272, 272, 272, 272, 271, 271, 271, 271, - 271, 271, 271, 272, 272, 272, 272, 272, - 272, 271, 271, 271, 271, 271, 271, 271, - 271, 271, 271, 271, 271, 271, 271, 271, - 271, 271, 271, 271, 271, 271, 271, 271, - 271, 271, 271, 272, 272, 272, 272, 272, - 272, 271, 271, 271, 271, 271, 271, 271, - 271, 271, 271, 271, 271, 271, 271, 271, - 271, 271, 271, 271, 271, 273, 271, 274, - 274, 274, 274, 274, 274, 274, 274, 274, - 274, 271, 271, 271, 271, 271, 271, 271, - 274, 274, 274, 274, 274, 274, 271, 271, - 271, 271, 271, 271, 271, 271, 271, 271, - 271, 271, 271, 271, 271, 271, 271, 271, - 271, 271, 271, 271, 271, 271, 271, 271, - 274, 274, 274, 274, 274, 274, 271, 275, - 275, 275, 275, 275, 275, 275, 275, 275, - 275, 271, 271, 271, 271, 271, 271, 271, - 275, 275, 275, 275, 275, 275, 271, 271, - 271, 271, 271, 271, 271, 271, 271, 271, - 271, 271, 271, 271, 271, 271, 271, 271, - 271, 271, 271, 271, 271, 271, 271, 271, - 275, 275, 275, 275, 275, 275, 271, 276, - 276, 276, 276, 276, 276, 276, 276, 276, - 276, 271, 271, 271, 271, 271, 271, 271, - 276, 276, 276, 276, 276, 276, 271, 271, - 271, 271, 271, 271, 271, 271, 271, 271, - 271, 271, 271, 271, 271, 271, 271, 271, - 271, 271, 271, 271, 271, 271, 271, 271, - 276, 276, 276, 276, 276, 276, 271, 277, - 280, 279, 279, 279, 280, 279, 279, 279, - 279, 281, 279, 279, 279, 279, 279, 279, - 279, 279, 279, 279, 279, 279, 279, 279, - 279, 279, 280, 279, 279, 279, 279, 279, - 281, 279, 279, 279, 279, 279, 279, 279, - 279, 279, 279, 279, 279, 279, 279, 279, - 282, 282, 282, 282, 282, 282, 282, 282, - 282, 282, 279, 279, 279, 279, 279, 279, - 279, 282, 282, 282, 282, 282, 282, 279, - 279, 279, 279, 279, 279, 279, 279, 279, - 279, 279, 279, 279, 279, 279, 279, 279, - 279, 279, 279, 279, 279, 279, 279, 279, - 279, 282, 282, 282, 282, 282, 282, 279, - 279, 279, 279, 279, 279, 279, 279, 279, - 279, 279, 279, 279, 279, 279, 279, 279, - 279, 279, 279, 279, 279, 283, 279, 280, - 279, 279, 279, 280, 279, 279, 279, 279, - 278, 279, 279, 279, 279, 279, 279, 279, - 279, 279, 279, 279, 279, 279, 279, 279, - 279, 280, 279, 279, 279, 279, 279, 278, - 279, 279, 279, 279, 279, 279, 279, 279, - 279, 279, 279, 279, 279, 279, 279, 284, - 284, 284, 284, 284, 284, 284, 284, 284, - 284, 279, 279, 279, 279, 279, 279, 279, - 284, 284, 284, 284, 284, 284, 279, 279, - 279, 279, 279, 279, 279, 279, 279, 279, - 279, 279, 279, 279, 279, 279, 279, 279, - 279, 279, 279, 279, 279, 279, 279, 279, - 284, 284, 284, 284, 284, 284, 279, 279, - 279, 279, 279, 279, 279, 279, 279, 279, - 279, 279, 279, 279, 279, 279, 279, 279, - 279, 279, 279, 279, 285, 279, 278, 280, - 284, 284, 284, 280, 284, 284, 284, 284, - 278, 284, 284, 284, 284, 284, 284, 284, - 284, 284, 284, 284, 284, 284, 284, 284, - 284, 280, 284, 284, 284, 284, 284, 278, - 284, 284, 284, 284, 284, 284, 284, 284, - 284, 284, 284, 284, 284, 284, 284, 284, - 284, 284, 284, 284, 284, 284, 284, 284, - 284, 284, 284, 284, 284, 284, 284, 284, - 284, 284, 284, 284, 284, 284, 284, 284, - 284, 284, 284, 284, 284, 284, 284, 284, - 284, 284, 284, 284, 284, 284, 284, 284, - 284, 284, 284, 284, 284, 284, 284, 284, - 284, 284, 284, 284, 284, 284, 284, 284, - 284, 284, 284, 284, 284, 284, 284, 284, - 284, 284, 284, 284, 284, 284, 284, 284, - 284, 284, 284, 284, 278, 284, 286, 280, - 287, 287, 287, 280, 287, 287, 287, 287, - 281, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 280, 287, 287, 287, 287, 287, 281, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 282, - 282, 282, 282, 282, 282, 282, 282, 282, - 282, 287, 287, 287, 287, 287, 287, 287, - 282, 282, 282, 282, 282, 282, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 282, 282, 282, 282, 282, 282, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 278, 287, 280, 287, - 287, 287, 280, 287, 287, 287, 287, 278, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 280, 287, 287, 287, 287, 287, 278, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 284, 284, - 284, 284, 284, 284, 284, 284, 284, 284, - 287, 287, 287, 287, 287, 287, 287, 284, - 284, 284, 284, 284, 284, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 284, - 284, 284, 284, 284, 284, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 280, 287, 280, 287, 287, - 287, 280, 287, 287, 287, 287, 288, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 280, - 287, 287, 287, 287, 287, 288, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 289, 289, 289, - 289, 289, 289, 289, 289, 289, 289, 287, - 287, 287, 287, 287, 287, 287, 289, 289, - 289, 289, 289, 289, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 289, 289, - 289, 289, 289, 289, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 290, 287, 280, 287, 287, 287, - 280, 287, 287, 287, 287, 288, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 280, 287, - 287, 287, 287, 287, 288, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 282, 282, 282, 282, - 282, 282, 282, 282, 282, 282, 287, 287, - 287, 287, 287, 287, 287, 282, 282, 282, - 282, 282, 282, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 282, 282, 282, - 282, 282, 282, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 290, 287, 291, 280, 287, 287, 287, - 280, 287, 287, 287, 287, 288, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 280, 287, - 287, 287, 287, 287, 288, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 292, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 287, 287, - 287, 287, 287, 287, 287, 292, 292, 292, - 292, 292, 292, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 292, 292, 292, - 292, 292, 292, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 290, 287, 280, 287, 287, 287, 280, - 287, 287, 287, 287, 288, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 280, 287, 287, - 287, 287, 287, 288, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 293, 293, 293, 293, 293, - 293, 293, 293, 293, 293, 287, 287, 287, - 287, 287, 287, 287, 293, 293, 293, 293, - 293, 293, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 293, 293, 293, 293, - 293, 293, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 290, 287, 280, 287, 287, 287, 280, 287, - 287, 287, 287, 288, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 280, 287, 287, 287, - 287, 287, 288, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 294, 294, 294, 294, 294, 294, - 294, 294, 294, 294, 287, 287, 287, 287, - 287, 287, 287, 294, 294, 294, 294, 294, - 294, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 294, 294, 294, 294, 294, - 294, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 290, - 287, 280, 287, 287, 287, 280, 287, 287, - 287, 287, 288, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 280, 287, 287, 287, 287, - 287, 288, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 295, 295, 295, 295, 295, 295, 295, - 295, 295, 295, 287, 287, 287, 287, 287, - 287, 287, 295, 295, 295, 295, 295, 295, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 295, 295, 295, 295, 295, 295, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 290, 287, - 280, 287, 287, 287, 280, 287, 287, 287, - 287, 288, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 280, 287, 287, 287, 287, 287, - 288, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 296, 296, 296, 296, 296, 296, 296, 296, - 296, 296, 287, 287, 287, 287, 287, 287, - 287, 296, 296, 296, 296, 296, 296, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 296, 296, 296, 296, 296, 296, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 290, 287, 280, - 287, 287, 287, 280, 287, 287, 287, 287, - 278, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 280, 287, 287, 287, 287, 287, 278, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 296, - 296, 296, 296, 296, 296, 296, 296, 296, - 296, 287, 287, 287, 287, 287, 287, 287, - 296, 296, 296, 296, 296, 296, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 296, 296, 296, 296, 296, 296, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, 287, 287, 278, 287, 297, 298, - 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 299, 299, 299, 299, 299, 299, - 299, 300, 300, 300, 300, 300, 300, 299, - 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, - 299, 299, 299, 299, 299, 299, 299, 299, - 299, 300, 300, 300, 300, 300, 300, 299, - 299, 302, 301, 301, 301, 302, 301, 301, - 301, 301, 303, 304, 303, 303, 303, 301, - 301, 301, 301, 301, 301, 301, 301, 301, - 301, 301, 301, 302, 301, 301, 301, 301, - 301, 303, 301, 301, 301, 301, 301, 301, - 301, 301, 301, 301, 301, 301, 301, 301, - 301, 301, 301, 301, 301, 301, 301, 301, - 301, 301, 301, 301, 301, 301, 301, 301, - 301, 301, 301, 301, 301, 301, 301, 301, - 301, 301, 301, 301, 301, 301, 301, 301, - 301, 301, 301, 301, 301, 301, 301, 301, - 301, 301, 301, 301, 301, 305, 301, 303, - 306, 303, 303, 303, 306, 306, 306, 306, - 306, 306, 306, 306, 306, 306, 306, 306, - 306, 306, 306, 306, 306, 306, 303, 306, - 307, 308, 308, 308, 307, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, 307, 308, 310, 309, 309, 309, - 310, 309, 309, 309, 309, 309, 311, 309, - 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 310, 309, - 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, - 309, 309, 309, 309, 309, 309, 309, 309, - 312, 309, 313, 314, 314, 314, 313, 314, - 314, 314, 314, 314, 315, 314, 314, 314, - 314, 314, 314, 314, 314, 314, 314, 314, - 314, 314, 314, 314, 313, 314, 317, 316, - 316, 316, 317, 316, 316, 316, 316, 316, - 318, 316, 316, 316, 316, 316, 316, 316, - 316, 316, 316, 316, 316, 316, 316, 316, - 317, 316, 316, 316, 316, 316, 316, 316, - 316, 319, 316, 321, 320, 320, 320, 320, - 320, 320, 320, 320, 320, 320, 320, 320, - 320, 320, 320, 320, 320, 320, 320, 320, - 320, 320, 320, 320, 320, 320, 320, 322, - 320, 320, 320, 320, 320, 320, 320, 320, - 320, 320, 320, 320, 320, 320, 320, 320, - 320, 320, 320, 320, 320, 320, 320, 320, - 320, 320, 320, 320, 320, 320, 320, 320, - 320, 320, 320, 320, 320, 320, 320, 320, - 320, 320, 320, 320, 320, 320, 320, 320, - 320, 320, 320, 320, 320, 320, 320, 320, - 320, 320, 323, 320, 324, 324, 324, 324, - 324, 324, 324, 324, 324, 324, 324, 324, - 324, 324, 324, 324, 324, 324, 324, 324, - 324, 324, 324, 324, 324, 324, 324, 324, - 324, 324, 324, 324, 324, 324, 324, 324, - 324, 324, 324, 324, 324, 324, 324, 324, - 324, 324, 324, 324, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 324, 324, - 324, 324, 324, 324, 324, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 324, - 324, 324, 324, 77, 324, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 77, - 77, 77, 77, 77, 77, 77, 77, 324, - 324, 324, 324, 324, 77, 324, 80, 80, - 80, 80, 80, 80, 80, 80, 80, 80, - 324, 325, 325, 325, 325, 325, 325, 325, - 325, 325, 325, 325, 325, 325, 325, 325, - 325, 325, 325, 325, 325, 325, 325, 325, - 325, 325, 325, 325, 325, 325, 325, 325, - 325, 325, 325, 325, 325, 325, 325, 325, - 325, 325, 325, 325, 325, 325, 325, 325, - 325, 81, 81, 81, 81, 81, 81, 81, - 81, 81, 81, 325, 325, 325, 325, 325, - 325, 325, 81, 81, 81, 81, 81, 81, - 81, 81, 81, 81, 81, 81, 81, 81, - 81, 81, 81, 81, 81, 81, 81, 81, - 81, 81, 81, 81, 325, 325, 325, 325, - 81, 325, 81, 81, 81, 81, 81, 81, - 81, 81, 81, 81, 81, 81, 81, 81, - 81, 81, 81, 81, 81, 81, 81, 81, - 81, 81, 81, 81, 325, 325, 325, 325, - 325, 81, 326, 326, 326, 326, 326, 326, - 326, 326, 326, 326, 326, 326, 326, 326, - 326, 326, 326, 326, 326, 326, 326, 326, - 326, 326, 326, 326, 326, 326, 326, 326, - 326, 326, 326, 326, 326, 326, 326, 326, - 326, 326, 326, 326, 326, 326, 326, 326, - 326, 326, 81, 81, 81, 81, 81, 81, - 81, 81, 81, 81, 326, 326, 326, 326, - 326, 326, 326, 82, 82, 82, 82, 82, - 82, 82, 82, 82, 82, 82, 82, 82, - 82, 82, 82, 82, 82, 82, 82, 82, - 82, 82, 82, 82, 82, 326, 326, 326, - 326, 82, 326, 82, 82, 82, 82, 82, - 82, 82, 82, 82, 82, 82, 82, 82, - 82, 82, 82, 82, 82, 82, 82, 82, - 82, 82, 82, 82, 82, 326, 326, 326, - 326, 326, 82, 327, 327, 327, 327, 327, - 327, 327, 327, 327, 327, 327, 327, 327, - 327, 327, 327, 327, 327, 327, 327, 327, - 327, 327, 327, 327, 327, 327, 327, 327, - 327, 327, 327, 327, 327, 327, 327, 327, - 327, 327, 327, 327, 327, 327, 327, 327, - 327, 327, 327, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 327, 327, 327, - 327, 327, 327, 327, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 327, 327, - 327, 327, 84, 327, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 327, 327, - 327, 327, 327, 84, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, 328, 84, 84, 84, 84, - 84, 84, 84, 84, 84, 84, 328, 328, - 328, 328, 328, 328, 328, 85, 85, 85, - 85, 85, 85, 85, 85, 85, 85, 85, - 85, 85, 85, 85, 85, 85, 85, 85, - 85, 85, 85, 85, 85, 85, 85, 328, - 328, 328, 328, 85, 328, 85, 85, 85, - 85, 85, 85, 85, 85, 85, 85, 85, - 85, 85, 85, 85, 85, 85, 85, 85, - 85, 85, 85, 85, 85, 85, 85, 328, - 328, 328, 328, 328, 85, 330, 329, 329, - 329, 330, 329, 329, 329, 329, 329, 331, - 329, 329, 329, 329, 329, 329, 329, 329, - 329, 329, 329, 329, 329, 329, 329, 330, - 329, 333, 332, 332, 332, 333, 332, 332, - 332, 332, 334, 335, 334, 334, 334, 332, - 332, 332, 332, 332, 332, 332, 332, 332, - 332, 332, 332, 333, 332, 332, 332, 332, - 332, 334, 332, 332, 336, 332, 334, 337, - 334, 334, 334, 337, 337, 337, 337, 337, - 337, 337, 337, 337, 337, 337, 337, 337, - 337, 337, 337, 337, 337, 334, 337, 339, - 338, 338, 338, 338, 338, 338, 338, 338, - 338, 338, 338, 338, 338, 338, 338, 338, - 338, 338, 338, 338, 338, 338, 338, 338, - 338, 338, 338, 340, 338, 338, 338, 338, - 338, 338, 338, 338, 338, 338, 338, 338, - 338, 338, 338, 338, 338, 338, 338, 338, - 338, 338, 338, 338, 338, 338, 338, 338, - 338, 338, 338, 338, 338, 338, 338, 338, - 338, 338, 338, 338, 338, 338, 338, 338, - 338, 338, 338, 338, 338, 338, 338, 338, - 338, 338, 338, 338, 338, 338, 341, 338, - 342, 342, 342, 342, 342, 342, 342, 342, - 342, 342, 342, 342, 342, 342, 342, 342, - 342, 342, 342, 342, 342, 342, 342, 342, - 342, 342, 342, 342, 342, 342, 342, 342, - 342, 342, 342, 342, 342, 342, 342, 342, - 342, 342, 342, 342, 342, 342, 342, 342, - 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 342, 342, 342, 342, 342, 342, - 342, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 342, 342, 342, 342, 87, - 342, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, - 87, 87, 87, 342, 342, 342, 342, 342, - 87, 342, 90, 90, 90, 90, 90, 90, - 90, 90, 90, 90, 342, 343, 343, 343, - 343, 343, 343, 343, 343, 343, 343, 343, - 343, 343, 343, 343, 343, 343, 343, 343, - 343, 343, 343, 343, 343, 343, 343, 343, - 343, 343, 343, 343, 343, 343, 343, 343, - 343, 343, 343, 343, 343, 343, 343, 343, - 343, 343, 343, 343, 343, 91, 91, 91, - 91, 91, 91, 91, 91, 91, 91, 343, - 343, 343, 343, 343, 343, 343, 91, 91, - 91, 91, 91, 91, 91, 91, 91, 91, - 91, 91, 91, 91, 91, 91, 91, 91, - 91, 91, 91, 91, 91, 91, 91, 91, - 343, 343, 343, 343, 91, 343, 91, 91, - 91, 91, 91, 91, 91, 91, 91, 91, - 91, 91, 91, 91, 91, 91, 91, 91, - 91, 91, 91, 91, 91, 91, 91, 91, - 343, 343, 343, 343, 343, 91, 344, 344, - 344, 344, 344, 344, 344, 344, 344, 344, - 344, 344, 344, 344, 344, 344, 344, 344, - 344, 344, 344, 344, 344, 344, 344, 344, - 344, 344, 344, 344, 344, 344, 344, 344, - 344, 344, 344, 344, 344, 344, 344, 344, - 344, 344, 344, 344, 344, 344, 91, 91, - 91, 91, 91, 91, 91, 91, 91, 91, - 344, 344, 344, 344, 344, 344, 344, 92, - 92, 92, 92, 92, 92, 92, 92, 92, - 92, 92, 92, 92, 92, 92, 92, 92, - 92, 92, 92, 92, 92, 92, 92, 92, - 92, 344, 344, 344, 344, 92, 344, 92, - 92, 92, 92, 92, 92, 92, 92, 92, - 92, 92, 92, 92, 92, 92, 92, 92, - 92, 92, 92, 92, 92, 92, 92, 92, - 92, 344, 344, 344, 344, 344, 92, 345, - 345, 345, 345, 345, 345, 345, 345, 345, - 345, 345, 345, 345, 345, 345, 345, 345, - 345, 345, 345, 345, 345, 345, 345, 345, - 345, 345, 345, 345, 345, 345, 345, 345, - 345, 345, 345, 345, 345, 345, 345, 345, - 345, 345, 345, 345, 345, 345, 345, 94, - 94, 94, 94, 94, 94, 94, 94, 94, - 94, 345, 345, 345, 345, 345, 345, 345, - 94, 94, 94, 94, 94, 94, 94, 94, - 94, 94, 94, 94, 94, 94, 94, 94, - 94, 94, 94, 94, 94, 94, 94, 94, - 94, 94, 345, 345, 345, 345, 94, 345, - 94, 94, 94, 94, 94, 94, 94, 94, - 94, 94, 94, 94, 94, 94, 94, 94, - 94, 94, 94, 94, 94, 94, 94, 94, - 94, 94, 345, 345, 345, 345, 345, 94, - 346, 346, 346, 346, 346, 346, 346, 346, - 346, 346, 346, 346, 346, 346, 346, 346, - 346, 346, 346, 346, 346, 346, 346, 346, - 346, 346, 346, 346, 346, 346, 346, 346, - 346, 346, 346, 346, 346, 346, 346, 346, - 346, 346, 346, 346, 346, 346, 346, 346, - 94, 94, 94, 94, 94, 94, 94, 94, - 94, 94, 346, 346, 346, 346, 346, 346, - 346, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 346, 346, 346, 346, 95, - 346, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 95, 95, 95, 95, 95, - 95, 95, 95, 346, 346, 346, 346, 346, - 95, 348, 347, 347, 347, 348, 347, 347, - 347, 347, 349, 350, 349, 349, 349, 347, - 347, 347, 347, 347, 347, 347, 347, 347, - 347, 347, 347, 348, 347, 347, 347, 347, - 347, 349, 347, 349, 351, 349, 349, 349, - 351, 351, 351, 351, 351, 351, 351, 351, - 351, 351, 351, 351, 351, 351, 351, 351, - 351, 351, 349, 351, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 352, 352, - 352, 352, 352, 352, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 352, 353, - 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, - 353, 354, 354, 354, 354, 354, 354, 353, - 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, - 353, 353, 353, 353, 353, 353, 353, 353, - 353, 354, 355, 97, 356, 356, 356, 356, - 356, 356, 356, 356, 356, 356, 356, 356, - 356, 356, 356, 356, 356, 356, 356, 356, - 356, 356, 356, 356, 356, 356, 356, 356, - 356, 356, 356, 356, 356, 356, 356, 356, - 356, 356, 356, 356, 356, 356, 356, 356, - 356, 356, 356, 356, 356, 356, 356, 356, - 356, 356, 356, 356, 356, 356, 356, 356, - 356, 356, 356, 356, 356, 356, 357, 357, - 357, 357, 357, 357, 357, 357, 357, 357, - 357, 357, 357, 357, 357, 357, 357, 357, - 357, 357, 357, 357, 357, 357, 357, 357, - 356, 356, 356, 356, 357, 356, 357, 357, - 357, 357, 357, 357, 357, 357, 357, 357, - 357, 357, 357, 357, 357, 357, 357, 357, - 357, 357, 357, 357, 357, 357, 357, 357, - 356, 356, 356, 356, 356, 357, 358, 358, - 358, 358, 358, 358, 358, 358, 358, 358, - 358, 358, 358, 358, 358, 358, 358, 358, - 358, 358, 358, 358, 358, 358, 358, 358, - 358, 358, 358, 358, 358, 358, 358, 358, - 358, 358, 358, 358, 358, 358, 358, 358, - 358, 358, 358, 358, 358, 358, 359, 359, - 359, 359, 359, 359, 359, 359, 359, 359, - 358, 358, 358, 358, 358, 358, 358, 359, - 359, 359, 359, 359, 359, 359, 359, 359, - 359, 359, 359, 359, 359, 359, 359, 359, - 359, 359, 359, 359, 359, 359, 359, 359, - 359, 358, 358, 358, 358, 359, 358, 359, - 359, 359, 359, 359, 359, 359, 359, 359, - 359, 359, 359, 359, 359, 359, 359, 359, - 359, 359, 359, 359, 359, 359, 359, 359, - 359, 358, 358, 358, 358, 358, 359, 362, - 361, 361, 361, 362, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, - 361, 362, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 363, - 363, 363, 363, 363, 363, 363, 363, 361, - 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 364, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 365, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 366, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 361, 361, 361, 361, - 361, 361, 361, 361, 367, 361, 361, 368, - 361, 369, 370, 372, 372, 372, 372, 372, - 372, 372, 372, 371, 373, 373, 373, 373, - 373, 373, 373, 373, 371, 371, 374, 374, - 125, 125, 125, 374, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, - 125, 374, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 126, 125, - 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 375, 125, 376, 377, 378, - 378, 125, 125, 125, 378, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 378, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 126, - 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 379, 125, 124, 378, - 380, 381, 382, 382, 110, 110, 110, 382, - 110, 110, 110, 110, 110, 110, 110, 110, - 110, 110, 110, 110, 110, 110, 110, 110, - 110, 110, 110, 110, 110, 382, 110, 110, - 110, 110, 110, 110, 110, 110, 110, 110, - 110, 110, 110, 110, 110, 110, 110, 110, - 110, 110, 110, 110, 110, 110, 110, 110, - 110, 110, 110, 110, 110, 110, 110, 110, - 110, 110, 111, 110, 110, 110, 110, 110, - 110, 110, 110, 110, 110, 110, 110, 110, - 110, 110, 110, 110, 110, 110, 110, 110, - 110, 110, 110, 110, 110, 110, 110, 383, - 110, 384, 384, 384, 384, 384, 384, 384, - 384, 384, 384, 382, 382, 382, 382, 382, - 382, 382, 384, 384, 384, 384, 384, 384, - 382, 382, 382, 382, 382, 382, 382, 382, - 382, 382, 382, 382, 382, 382, 382, 382, - 382, 382, 382, 382, 382, 382, 382, 382, - 382, 382, 384, 384, 384, 384, 384, 384, - 382, 386, 386, 386, 386, 386, 386, 386, - 386, 386, 386, 385, 385, 385, 385, 385, - 385, 385, 386, 386, 386, 386, 386, 386, - 385, 385, 385, 385, 385, 385, 385, 385, - 385, 385, 385, 385, 385, 385, 385, 385, - 385, 385, 385, 385, 385, 385, 385, 385, - 385, 385, 386, 386, 386, 386, 386, 386, - 385, 385, 387, 387, 387, 387, 387, 387, - 387, 387, 387, 387, 378, 378, 378, 378, - 378, 378, 378, 387, 387, 387, 387, 387, - 387, 378, 378, 378, 378, 378, 378, 378, - 378, 378, 378, 378, 378, 378, 378, 378, - 378, 378, 378, 378, 378, 378, 378, 378, - 378, 378, 378, 387, 387, 387, 387, 387, - 387, 378, 389, 389, 389, 389, 389, 389, - 389, 389, 389, 389, 388, 388, 388, 388, - 388, 388, 388, 389, 389, 389, 389, 389, - 389, 388, 388, 388, 388, 388, 388, 388, - 388, 388, 388, 388, 388, 388, 388, 388, - 388, 388, 388, 388, 388, 388, 388, 388, - 388, 388, 388, 389, 389, 389, 389, 389, - 389, 388, 388, 378, 103, 103, 103, 378, - 103, 103, 103, 103, 103, 103, 103, 103, - 103, 103, 103, 103, 103, 103, 103, 103, - 103, 103, 103, 103, 103, 378, 103, 103, - 103, 103, 103, 103, 103, 103, 103, 103, - 103, 103, 103, 103, 103, 103, 103, 103, - 390, 103, 374, 110, 110, 110, 374, 110, - 110, 110, 110, 110, 110, 110, 110, 110, - 110, 110, 110, 110, 110, 110, 110, 110, - 110, 110, 110, 110, 374, 110, 110, 110, - 110, 110, 110, 110, 110, 110, 110, 110, - 110, 110, 110, 110, 110, 110, 110, 110, - 110, 110, 110, 110, 110, 110, 110, 110, - 110, 110, 110, 110, 110, 110, 110, 110, - 110, 111, 110, 110, 110, 110, 110, 110, - 110, 110, 110, 110, 110, 110, 110, 110, - 110, 110, 110, 110, 110, 110, 110, 110, - 110, 110, 110, 110, 110, 110, 112, 110, - 374, 391, 391, 391, 374, 391, 391, 391, - 391, 391, 391, 391, 391, 391, 391, 391, - 391, 391, 391, 391, 391, 391, 391, 391, - 391, 391, 374, 391, 391, 391, 391, 391, - 391, 391, 391, 391, 391, 391, 391, 391, - 391, 391, 391, 391, 391, 391, 391, 391, - 391, 391, 391, 391, 391, 391, 391, 391, - 391, 391, 391, 391, 391, 391, 391, 391, - 391, 391, 391, 391, 391, 391, 391, 391, - 391, 391, 391, 391, 391, 391, 391, 391, - 391, 391, 391, 391, 391, 391, 391, 391, - 391, 391, 391, 391, 392, 391, 393, 394, - 394, 391, 391, 391, 394, 391, 391, 391, - 391, 391, 391, 391, 391, 391, 391, 391, - 391, 391, 391, 391, 391, 391, 391, 391, - 391, 391, 394, 391, 391, 391, 391, 391, - 391, 391, 391, 391, 391, 391, 391, 391, - 391, 391, 391, 391, 391, 391, 391, 391, - 391, 391, 391, 391, 391, 391, 391, 391, - 391, 391, 391, 391, 391, 391, 391, 391, - 391, 391, 391, 391, 391, 391, 391, 391, - 391, 391, 391, 391, 391, 391, 391, 391, - 391, 391, 391, 391, 391, 391, 391, 391, - 391, 391, 391, 391, 395, 391, 396, 396, - 396, 396, 396, 396, 396, 396, 396, 396, - 394, 394, 394, 394, 394, 394, 394, 396, - 396, 396, 396, 396, 396, 394, 394, 394, - 394, 394, 394, 394, 394, 394, 394, 394, - 394, 394, 394, 394, 394, 394, 394, 394, - 394, 394, 394, 394, 394, 394, 394, 396, - 396, 396, 396, 396, 396, 394, 398, 398, - 398, 398, 398, 398, 398, 398, 398, 398, - 397, 397, 397, 397, 397, 397, 397, 398, - 398, 398, 398, 398, 398, 397, 397, 397, - 397, 397, 397, 397, 397, 397, 397, 397, - 397, 397, 397, 397, 397, 397, 397, 397, - 397, 397, 397, 397, 397, 397, 397, 398, - 398, 398, 398, 398, 398, 397, 397, 394, - 103, 103, 103, 394, 103, 103, 103, 103, - 103, 103, 103, 103, 103, 103, 103, 103, - 103, 103, 103, 103, 103, 103, 103, 103, - 103, 394, 103, 103, 103, 103, 103, 103, - 103, 103, 103, 103, 103, 103, 103, 103, - 103, 103, 103, 103, 390, 103, 399, 394, - 394, 110, 110, 110, 394, 110, 110, 110, - 110, 110, 110, 110, 110, 110, 110, 110, - 110, 110, 110, 110, 110, 110, 110, 110, - 110, 110, 394, 110, 110, 110, 110, 110, - 110, 110, 110, 110, 110, 110, 110, 110, - 110, 110, 110, 110, 110, 110, 110, 110, - 110, 110, 110, 110, 110, 110, 110, 110, - 110, 110, 110, 110, 110, 110, 110, 111, - 110, 110, 110, 110, 110, 110, 110, 110, - 110, 110, 110, 110, 110, 110, 110, 110, - 110, 110, 110, 110, 110, 110, 110, 110, - 110, 110, 110, 110, 112, 110, 401, 401, - 401, 401, 401, 401, 401, 401, 401, 401, - 400, 400, 400, 400, 400, 400, 400, 401, - 401, 401, 401, 401, 401, 400, 400, 400, - 400, 400, 400, 400, 400, 400, 400, 400, - 400, 400, 400, 400, 400, 400, 400, 400, - 400, 400, 400, 400, 400, 400, 400, 401, - 401, 401, 401, 401, 401, 400, 400, 400, - 400, 400, 400, 400, 400, 400, 400, 400, - 400, 400, 400, 400, 400, 400, 400, 400, - 400, 402, 400, 403, 403, 403, 403, 403, - 403, 403, 403, 403, 403, 400, 400, 400, - 400, 400, 400, 400, 403, 403, 403, 403, - 403, 403, 400, 400, 400, 400, 400, 400, - 400, 400, 400, 400, 400, 400, 400, 400, - 400, 400, 400, 400, 400, 400, 400, 400, - 400, 400, 400, 400, 403, 403, 403, 403, - 403, 403, 400, 404, 404, 404, 404, 404, - 404, 404, 404, 404, 404, 400, 400, 400, - 400, 400, 400, 400, 404, 404, 404, 404, - 404, 404, 400, 400, 400, 400, 400, 400, - 400, 400, 400, 400, 400, 400, 400, 400, - 400, 400, 400, 400, 400, 400, 400, 400, - 400, 400, 400, 400, 404, 404, 404, 404, - 404, 404, 400, 405, 405, 405, 405, 405, - 405, 405, 405, 405, 405, 400, 400, 400, - 400, 400, 400, 400, 405, 405, 405, 405, - 405, 405, 400, 400, 400, 400, 400, 400, - 400, 400, 400, 400, 400, 400, 400, 400, - 400, 400, 400, 400, 400, 400, 400, 400, - 400, 400, 400, 400, 405, 405, 405, 405, - 405, 405, 400, 406, 409, 408, 408, 408, - 409, 408, 408, 408, 408, 410, 408, 408, - 408, 408, 408, 408, 408, 408, 408, 408, - 408, 408, 408, 408, 408, 408, 409, 408, - 408, 408, 408, 408, 410, 408, 408, 408, - 408, 408, 408, 408, 408, 408, 408, 408, - 408, 408, 408, 408, 411, 411, 411, 411, - 411, 411, 411, 411, 411, 411, 408, 408, - 408, 408, 408, 408, 408, 411, 411, 411, - 411, 411, 411, 408, 408, 408, 408, 408, - 408, 408, 408, 408, 408, 408, 408, 408, - 408, 408, 408, 408, 408, 408, 408, 408, - 408, 408, 408, 408, 408, 411, 411, 411, - 411, 411, 411, 408, 408, 408, 408, 408, - 408, 408, 408, 408, 408, 408, 408, 408, - 408, 408, 408, 408, 408, 408, 408, 408, - 408, 412, 408, 409, 408, 408, 408, 409, - 408, 408, 408, 408, 407, 408, 408, 408, - 408, 408, 408, 408, 408, 408, 408, 408, - 408, 408, 408, 408, 408, 409, 408, 408, - 408, 408, 408, 407, 408, 408, 408, 408, - 408, 408, 408, 408, 408, 408, 408, 408, - 408, 408, 408, 413, 413, 413, 413, 413, - 413, 413, 413, 413, 413, 408, 408, 408, - 408, 408, 408, 408, 413, 413, 413, 413, - 413, 413, 408, 408, 408, 408, 408, 408, - 408, 408, 408, 408, 408, 408, 408, 408, - 408, 408, 408, 408, 408, 408, 408, 408, - 408, 408, 408, 408, 413, 413, 413, 413, - 413, 413, 408, 408, 408, 408, 408, 408, - 408, 408, 408, 408, 408, 408, 408, 408, - 408, 408, 408, 408, 408, 408, 408, 408, - 414, 408, 407, 409, 413, 413, 413, 409, - 413, 413, 413, 413, 407, 413, 413, 413, - 413, 413, 413, 413, 413, 413, 413, 413, - 413, 413, 413, 413, 413, 409, 413, 413, - 413, 413, 413, 407, 413, 413, 413, 413, - 413, 413, 413, 413, 413, 413, 413, 413, - 413, 413, 413, 413, 413, 413, 413, 413, - 413, 413, 413, 413, 413, 413, 413, 413, - 413, 413, 413, 413, 413, 413, 413, 413, - 413, 413, 413, 413, 413, 413, 413, 413, - 413, 413, 413, 413, 413, 413, 413, 413, - 413, 413, 413, 413, 413, 413, 413, 413, - 413, 413, 413, 413, 413, 413, 413, 413, - 413, 413, 413, 413, 413, 413, 413, 413, - 413, 413, 413, 413, 413, 413, 413, 413, - 413, 413, 413, 413, 413, 413, 413, 413, - 407, 413, 415, 409, 416, 416, 416, 409, - 416, 416, 416, 416, 410, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 409, 416, 416, - 416, 416, 416, 410, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 417, 417, 417, 417, 417, - 417, 417, 417, 417, 417, 416, 416, 416, - 416, 416, 416, 416, 417, 417, 417, 417, - 417, 417, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 417, 417, 417, 417, - 417, 417, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 407, 416, 409, 416, 416, 416, 409, 416, - 416, 416, 416, 407, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 409, 416, 416, 416, - 416, 416, 407, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 413, 413, 413, 413, 413, 413, - 413, 413, 413, 413, 416, 416, 416, 416, - 416, 416, 416, 413, 413, 413, 413, 413, - 413, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 413, 413, 413, 413, 413, - 413, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 409, - 416, 409, 416, 416, 416, 409, 416, 416, - 416, 416, 418, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 409, 416, 416, 416, 416, - 416, 418, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 419, 419, 419, 419, 419, 419, 419, - 419, 419, 419, 416, 416, 416, 416, 416, - 416, 416, 419, 419, 419, 419, 419, 419, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 419, 419, 419, 419, 419, 419, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 420, 416, - 409, 416, 416, 416, 409, 416, 416, 416, - 416, 418, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 409, 416, 416, 416, 416, 416, - 418, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 417, 417, 417, 417, 417, 417, 417, 417, - 417, 417, 416, 416, 416, 416, 416, 416, - 416, 417, 417, 417, 417, 417, 417, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 417, 417, 417, 417, 417, 417, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 420, 416, 421, - 409, 416, 416, 416, 409, 416, 416, 416, - 416, 418, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 409, 416, 416, 416, 416, 416, - 418, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 422, 422, 422, 422, 422, 422, 422, 422, - 422, 422, 416, 416, 416, 416, 416, 416, - 416, 422, 422, 422, 422, 422, 422, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 422, 422, 422, 422, 422, 422, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 420, 416, 409, - 416, 416, 416, 409, 416, 416, 416, 416, - 418, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 409, 416, 416, 416, 416, 416, 418, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 423, - 423, 423, 423, 423, 423, 423, 423, 423, - 423, 416, 416, 416, 416, 416, 416, 416, - 423, 423, 423, 423, 423, 423, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 423, 423, 423, 423, 423, 423, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 420, 416, 409, 416, - 416, 416, 409, 416, 416, 416, 416, 418, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 409, 416, 416, 416, 416, 416, 418, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 424, 424, - 424, 424, 424, 424, 424, 424, 424, 424, - 416, 416, 416, 416, 416, 416, 416, 424, - 424, 424, 424, 424, 424, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 424, - 424, 424, 424, 424, 424, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 420, 416, 409, 416, 416, - 416, 409, 416, 416, 416, 416, 418, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 409, - 416, 416, 416, 416, 416, 418, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 425, 425, 425, - 425, 425, 425, 425, 425, 425, 425, 416, - 416, 416, 416, 416, 416, 416, 425, 425, - 425, 425, 425, 425, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 425, 425, - 425, 425, 425, 425, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 420, 416, 409, 416, 416, 416, - 409, 416, 416, 416, 416, 418, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 409, 416, - 416, 416, 416, 416, 418, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 426, 426, 426, 426, - 426, 426, 426, 426, 426, 426, 416, 416, - 416, 416, 416, 416, 416, 426, 426, 426, - 426, 426, 426, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 426, 426, 426, - 426, 426, 426, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 420, 416, 409, 416, 416, 416, 409, - 416, 416, 416, 416, 407, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 409, 416, 416, - 416, 416, 416, 407, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 426, 426, 426, 426, 426, - 426, 426, 426, 426, 426, 416, 416, 416, - 416, 416, 416, 416, 426, 426, 426, 426, - 426, 426, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 426, 426, 426, 426, - 426, 426, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 407, 416, 409, 416, 416, 416, 409, 416, - 416, 416, 416, 427, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 409, 416, 416, 416, - 416, 416, 427, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 428, 428, 428, 428, 428, 428, - 428, 428, 428, 428, 416, 416, 416, 416, - 416, 416, 416, 428, 428, 428, 428, 428, - 428, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 428, 428, 428, 428, 428, - 428, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 420, - 416, 409, 416, 416, 416, 409, 416, 416, - 416, 416, 427, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 409, 416, 416, 416, 416, - 416, 427, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 429, 429, 429, 429, 429, 429, 429, - 429, 429, 429, 416, 416, 416, 416, 416, - 416, 416, 429, 429, 429, 429, 429, 429, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 429, 429, 429, 429, 429, 429, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 420, 416, - 409, 416, 416, 416, 409, 416, 416, 416, - 416, 427, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 409, 416, 416, 416, 416, 416, - 427, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 430, 430, 430, 430, 430, 430, 430, 430, - 430, 430, 416, 416, 416, 416, 416, 416, - 416, 430, 430, 430, 430, 430, 430, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 430, 430, 430, 430, 430, 430, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 407, 416, 409, - 416, 416, 416, 409, 416, 416, 416, 416, - 427, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 409, 416, 416, 416, 416, 416, 427, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 431, - 431, 431, 431, 431, 431, 431, 431, 431, - 431, 416, 416, 416, 416, 416, 416, 416, - 431, 431, 431, 431, 431, 431, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 431, 431, 431, 431, 431, 431, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 407, 416, 409, 416, - 416, 416, 409, 416, 416, 416, 416, 427, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 409, 416, 416, 416, 416, 416, 427, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 432, 432, - 432, 432, 432, 432, 432, 432, 432, 432, - 416, 416, 416, 416, 416, 416, 416, 432, - 432, 432, 432, 432, 432, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 432, - 432, 432, 432, 432, 432, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 407, 416, 409, 416, 416, - 416, 409, 416, 416, 416, 416, 427, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 409, - 416, 416, 416, 416, 416, 427, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 433, 433, 433, - 433, 433, 433, 433, 433, 433, 433, 416, - 416, 416, 416, 416, 416, 416, 433, 433, - 433, 433, 433, 433, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 433, 433, - 433, 433, 433, 433, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 407, 416, 409, 416, 416, 416, - 409, 416, 416, 416, 416, 427, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 409, 416, - 416, 416, 416, 416, 427, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 434, 434, 434, 434, - 434, 434, 434, 434, 434, 434, 416, 416, - 416, 416, 416, 416, 416, 434, 434, 434, - 434, 434, 434, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 434, 434, 434, - 434, 434, 434, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 407, 416, 409, 416, 416, 416, 409, - 416, 416, 416, 416, 427, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 409, 416, 416, - 416, 416, 416, 427, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 426, 426, 426, 426, 426, - 426, 426, 426, 426, 426, 416, 416, 416, - 416, 416, 416, 416, 426, 426, 426, 426, - 426, 426, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 426, 426, 426, 426, - 426, 426, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 407, 416, 409, 416, 416, 416, 409, 416, - 416, 416, 416, 427, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 409, 416, 416, 416, - 416, 416, 427, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 435, 435, 435, 435, 435, 435, - 435, 435, 435, 435, 416, 416, 416, 416, - 416, 416, 416, 435, 435, 435, 435, 435, - 435, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 435, 435, 435, 435, 435, - 435, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 420, - 416, 409, 416, 416, 416, 409, 416, 416, - 416, 416, 427, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 409, 416, 416, 416, 416, - 416, 427, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 436, 436, 436, 436, 436, 436, 436, - 436, 436, 436, 416, 416, 416, 416, 416, - 416, 416, 436, 436, 436, 436, 436, 436, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 436, 436, 436, 436, 436, 436, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 420, 416, - 409, 416, 416, 416, 409, 416, 416, 416, - 416, 427, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 409, 416, 416, 416, 416, 416, - 427, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 437, 437, 437, 437, 437, 437, 437, 437, - 437, 437, 416, 416, 416, 416, 416, 416, - 416, 437, 437, 437, 437, 437, 437, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 437, 437, 437, 437, 437, 437, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 420, 416, 409, - 416, 416, 416, 409, 416, 416, 416, 416, - 427, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 409, 416, 416, 416, 416, 416, 427, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 438, - 438, 438, 438, 438, 438, 438, 438, 438, - 438, 416, 416, 416, 416, 416, 416, 416, - 438, 438, 438, 438, 438, 438, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 438, 438, 438, 438, 438, 438, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 420, 416, 409, 416, - 416, 416, 409, 416, 416, 416, 416, 427, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 409, 416, 416, 416, 416, 416, 427, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 426, 426, - 426, 426, 426, 426, 426, 426, 426, 426, - 416, 416, 416, 416, 416, 416, 416, 426, - 426, 426, 426, 426, 426, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 426, - 426, 426, 426, 426, 426, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 420, 416, 439, 440, 442, - 442, 442, 442, 442, 442, 442, 442, 442, - 442, 441, 441, 441, 441, 441, 441, 441, - 442, 442, 442, 442, 442, 442, 441, 441, - 441, 441, 441, 441, 441, 441, 441, 441, - 441, 441, 441, 441, 441, 441, 441, 441, - 441, 441, 441, 441, 441, 441, 441, 441, - 442, 442, 442, 442, 442, 442, 441, 441, - 0 -] - -class << self - attr_accessor :_lex_trans_targs - private :_lex_trans_targs, :_lex_trans_targs= -end -self._lex_trans_targs = [ - 61, 64, 65, 2, 66, 67, 68, 4, - 69, 70, 61, 77, 78, 81, 82, 94, - 91, 83, 84, 85, 9, 86, 87, 88, - 96, 98, 99, 103, 104, 105, 100, 15, - 8, 79, 80, 17, 128, 129, 131, 133, - 134, 20, 135, 136, 137, 22, 138, 139, - 131, 146, 147, 150, 151, 163, 160, 152, - 153, 154, 27, 155, 156, 157, 165, 167, - 168, 172, 173, 174, 169, 33, 26, 148, - 149, 35, 197, 198, 205, 207, 208, 38, - 209, 210, 211, 40, 212, 213, 215, 218, - 219, 42, 220, 221, 222, 44, 223, 224, - 230, 0, 229, 229, 231, 233, 229, 239, - 240, 243, 244, 256, 253, 245, 246, 247, - 50, 248, 249, 250, 258, 260, 261, 265, - 266, 267, 262, 56, 49, 241, 242, 58, - 303, 304, 60, 61, 61, 62, 61, 63, - 71, 61, 61, 1, 3, 61, 61, 61, - 61, 61, 61, 61, 72, 73, 74, 5, - 11, 16, 106, 18, 61, 61, 61, 75, - 76, 61, 6, 61, 61, 61, 7, 61, - 61, 61, 10, 89, 61, 90, 92, 61, - 93, 95, 97, 12, 61, 61, 13, 101, - 61, 102, 14, 61, 107, 111, 108, 109, - 110, 61, 61, 112, 113, 116, 118, 127, - 114, 115, 61, 117, 119, 121, 120, 61, - 122, 123, 124, 125, 126, 61, 61, 61, - 130, 131, 131, 131, 132, 140, 131, 19, - 21, 131, 131, 131, 131, 131, 131, 131, - 141, 142, 143, 23, 29, 34, 175, 36, - 131, 131, 131, 144, 145, 131, 24, 131, - 131, 131, 25, 131, 131, 131, 28, 158, - 131, 159, 161, 131, 162, 164, 166, 30, - 131, 131, 31, 170, 131, 171, 32, 131, - 176, 180, 177, 178, 179, 131, 131, 181, - 182, 185, 187, 196, 183, 184, 131, 186, - 188, 190, 189, 131, 191, 192, 193, 194, - 195, 131, 131, 131, 199, 200, 200, 201, - 200, 202, 200, 200, 200, 203, 203, 203, - 204, 203, 203, 203, 205, 205, 205, 206, - 205, 37, 39, 205, 205, 205, 205, 205, - 205, 214, 214, 214, 215, 215, 216, 215, - 217, 215, 215, 41, 43, 215, 215, 215, - 215, 215, 215, 225, 225, 226, 225, 225, - 227, 228, 227, 45, 229, 232, 229, 232, - 229, 234, 235, 236, 46, 52, 57, 268, - 59, 229, 229, 229, 237, 238, 229, 47, - 229, 229, 229, 48, 229, 229, 229, 51, - 251, 229, 252, 254, 229, 255, 257, 259, - 53, 229, 229, 54, 263, 229, 264, 55, - 229, 269, 273, 270, 271, 272, 229, 229, - 274, 275, 278, 289, 302, 276, 277, 229, - 279, 280, 281, 283, 282, 229, 284, 285, - 286, 287, 288, 290, 297, 291, 292, 293, - 294, 295, 296, 298, 299, 300, 301, 229, - 229, 229, 305 -] - -class << self - attr_accessor :_lex_trans_actions - private :_lex_trans_actions, :_lex_trans_actions= -end -self._lex_trans_actions = [ - 25, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 23, 0, 11, 0, 301, 0, - 0, 11, 0, 0, 0, 0, 301, 0, - 11, 0, 301, 0, 11, 11, 0, 0, - 0, 0, 0, 0, 0, 0, 37, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 35, 0, 11, 0, 301, 0, 0, 11, - 0, 0, 0, 0, 301, 0, 11, 0, - 301, 0, 11, 11, 0, 0, 0, 0, - 0, 0, 0, 0, 61, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 77, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 89, 121, 0, 11, 93, 0, - 11, 0, 301, 0, 0, 11, 0, 0, - 0, 0, 301, 0, 11, 0, 301, 0, - 11, 11, 0, 0, 0, 0, 0, 0, - 0, 0, 95, 17, 15, 0, 97, 11, - 11, 19, 21, 0, 0, 13, 238, 277, - 274, 253, 250, 392, 3, 3, 3, 3, - 3, 3, 3, 3, 133, 223, 160, 0, - 0, 142, 0, 332, 151, 308, 0, 419, - 356, 404, 0, 0, 449, 0, 0, 368, - 0, 11, 0, 0, 344, 320, 0, 0, - 434, 0, 1, 196, 0, 0, 0, 0, - 0, 187, 214, 0, 0, 0, 0, 0, - 0, 0, 380, 0, 0, 0, 0, 124, - 0, 0, 0, 0, 0, 205, 178, 169, - 0, 31, 29, 100, 11, 11, 33, 0, - 0, 27, 241, 283, 280, 259, 256, 396, - 3, 3, 3, 3, 3, 3, 3, 3, - 136, 226, 163, 0, 0, 145, 0, 336, - 154, 312, 0, 424, 360, 409, 0, 0, - 454, 0, 0, 372, 0, 11, 0, 0, - 348, 324, 0, 0, 439, 0, 1, 199, - 0, 0, 0, 0, 0, 190, 217, 0, - 0, 0, 0, 0, 0, 0, 384, 0, - 0, 0, 0, 127, 0, 0, 0, 0, - 0, 208, 181, 172, 0, 41, 39, 0, - 103, 0, 43, 45, 232, 49, 47, 106, - 0, 51, 235, 304, 57, 55, 109, 11, - 59, 0, 0, 53, 244, 289, 286, 265, - 262, 65, 63, 112, 71, 69, 0, 115, - 11, 73, 75, 0, 0, 67, 247, 295, - 292, 271, 268, 81, 79, 0, 118, 83, - 85, 0, 87, 0, 298, 5, 91, 0, - 400, 3, 3, 3, 3, 3, 3, 3, - 3, 139, 229, 166, 0, 0, 148, 0, - 340, 157, 316, 0, 429, 364, 414, 0, - 0, 459, 0, 0, 376, 0, 11, 0, - 0, 352, 328, 0, 0, 444, 0, 1, - 202, 0, 0, 0, 0, 0, 193, 220, - 0, 0, 0, 0, 0, 0, 0, 388, - 0, 0, 0, 0, 0, 130, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 211, - 184, 175, 0 -] - -class << self - attr_accessor :_lex_to_state_actions - private :_lex_to_state_actions, :_lex_to_state_actions= -end -self._lex_to_state_actions = [ - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 7, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 7, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 7, 0, 0, 7, 0, 7, 0, 0, - 0, 0, 0, 0, 0, 0, 7, 7, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 7, 0, 7, 0, 7, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0 -] - -class << self - attr_accessor :_lex_from_state_actions - private :_lex_from_state_actions, :_lex_from_state_actions= -end -self._lex_from_state_actions = [ - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 9, 9, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 9, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 9, 0, 0, 9, 0, 9, 0, 0, - 0, 0, 0, 0, 0, 0, 9, 9, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 9, 0, 9, 0, 9, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0 -] - -class << self - attr_accessor :_lex_eof_trans - private :_lex_eof_trans, :_lex_eof_trans= -end -self._lex_eof_trans = [ - 0, 1, 1, 1, 1, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 39, 39, 39, 39, 49, - 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 77, 77, 77, - 77, 87, 87, 87, 87, 0, 103, 103, - 103, 103, 103, 103, 103, 103, 103, 103, - 103, 103, 103, 103, 0, 0, 138, 139, - 143, 143, 143, 144, 145, 146, 147, 148, - 157, 158, 159, 159, 159, 162, 162, 164, - 165, 166, 166, 166, 168, 169, 170, 170, - 170, 173, 173, 166, 176, 176, 166, 162, - 162, 181, 182, 182, 182, 185, 185, 182, - 182, 182, 188, 188, 188, 188, 194, 195, - 195, 195, 195, 203, 195, 195, 195, 195, - 208, 195, 195, 195, 195, 195, 195, 214, - 215, 216, 216, 0, 223, 227, 227, 227, - 228, 229, 230, 231, 232, 241, 242, 243, - 243, 243, 246, 246, 248, 249, 250, 250, - 250, 252, 253, 254, 254, 254, 257, 257, - 250, 260, 260, 250, 246, 246, 265, 266, - 266, 266, 269, 269, 266, 266, 266, 272, - 272, 272, 272, 278, 279, 279, 279, 279, - 287, 279, 279, 279, 279, 292, 279, 279, - 279, 279, 279, 279, 298, 299, 300, 300, - 0, 307, 308, 0, 314, 0, 321, 325, - 325, 325, 326, 327, 328, 329, 0, 0, - 338, 339, 343, 343, 343, 344, 345, 346, - 347, 0, 352, 0, 355, 0, 357, 357, - 359, 361, 370, 371, 372, 372, 372, 375, - 375, 377, 378, 379, 379, 379, 381, 382, - 383, 383, 383, 386, 386, 379, 389, 389, - 379, 375, 375, 394, 395, 395, 395, 398, - 398, 395, 395, 395, 401, 401, 401, 401, - 407, 408, 408, 408, 408, 416, 408, 408, - 408, 408, 422, 408, 408, 408, 408, 408, - 408, 408, 408, 408, 408, 408, 408, 408, - 408, 408, 408, 408, 408, 408, 440, 441, - 442, 442 -] - -class << self - attr_accessor :lex_start -end -self.lex_start = 60; -class << self - attr_accessor :lex_error -end -self.lex_error = 0; - -class << self - attr_accessor :lex_en_interp_words -end -self.lex_en_interp_words = 61; -class << self - attr_accessor :lex_en_interp_string -end -self.lex_en_interp_string = 131; -class << self - attr_accessor :lex_en_plain_words -end -self.lex_en_plain_words = 200; -class << self - attr_accessor :lex_en_plain_string -end -self.lex_en_plain_string = 203; -class << self - attr_accessor :lex_en_interp_backslash_delimited -end -self.lex_en_interp_backslash_delimited = 205; -class << self - attr_accessor :lex_en_plain_backslash_delimited -end -self.lex_en_plain_backslash_delimited = 214; -class << self - attr_accessor :lex_en_interp_backslash_delimited_words -end -self.lex_en_interp_backslash_delimited_words = 215; -class << self - attr_accessor :lex_en_plain_backslash_delimited_words -end -self.lex_en_plain_backslash_delimited_words = 225; -class << self - attr_accessor :lex_en_regexp_modifiers -end -self.lex_en_regexp_modifiers = 227; -class << self - attr_accessor :lex_en_character -end -self.lex_en_character = 229; -class << self - attr_accessor :lex_en_unknown -end -self.lex_en_unknown = 60; - - -# line 6 "lib/parser/lexer-strings.rl" - # % - - ESCAPES = { - ?a.ord => "\a", ?b.ord => "\b", ?e.ord => "\e", ?f.ord => "\f", - ?n.ord => "\n", ?r.ord => "\r", ?s.ord => "\s", ?t.ord => "\t", - ?v.ord => "\v", ?\\.ord => "\\" - }.freeze - - REGEXP_META_CHARACTERS = Regexp.union(*"\\$()*+.<>?[]^{|}".chars).freeze - - attr_accessor :herebody_s - - # Set by "main" lexer - attr_accessor :source_buffer, :source_pts - - def initialize(lexer, version) - @lexer = lexer - @version = version - - @_lex_actions = - if self.class.respond_to?(:_lex_actions, true) - self.class.send :_lex_actions - else - [] - end - - reset - end - - def reset - @cs = self.class.lex_en_unknown - @literal_stack = [] - - @escape_s = nil # starting position of current sequence - @escape = nil # last escaped sequence, as string - - @herebody_s = nil # starting position of current heredoc line - - # After encountering the closing line of <<~SQUIGGLY_HEREDOC, - # we store the indentation level and give it out to the parser - # on request. It is not possible to infer indentation level just - # from the AST because escape sequences such as `\ ` or `\t` are - # expanded inside the lexer, but count as non-whitespace for - # indentation purposes. - @dedent_level = nil - end - - LEX_STATES = { - :interp_string => lex_en_interp_string, - :interp_words => lex_en_interp_words, - :plain_string => lex_en_plain_string, - :plain_words => lex_en_plain_string, - } - - def advance(p) - # Ugly, but dependent on Ragel output. Consider refactoring it somehow. - klass = self.class - _lex_trans_keys = klass.send :_lex_trans_keys - _lex_key_spans = klass.send :_lex_key_spans - _lex_index_offsets = klass.send :_lex_index_offsets - _lex_indicies = klass.send :_lex_indicies - _lex_trans_targs = klass.send :_lex_trans_targs - _lex_trans_actions = klass.send :_lex_trans_actions - _lex_to_state_actions = klass.send :_lex_to_state_actions - _lex_from_state_actions = klass.send :_lex_from_state_actions - _lex_eof_trans = klass.send :_lex_eof_trans - _lex_actions = @_lex_actions - - pe = source_pts.size + 2 - eof = pe - - -# line 3357 "lib/parser/lexer-strings.rb" -begin # ragel flat - testEof = false - _slen, _trans, _keys, _inds, _acts, _nacts = nil - _goto_level = 0 - _resume = 10 - _eof_trans = 15 - _again = 20 - _test_eof = 30 - _out = 40 - while true - _trigger_goto = false - if _goto_level <= 0 - if p == pe - _goto_level = _test_eof - next - end - if @cs == 0 - _goto_level = _out - next - end - end - if _goto_level <= _resume - _acts = _lex_from_state_actions[ @cs] - _nacts = _lex_actions[_acts] - _acts += 1 - while _nacts > 0 - _nacts -= 1 - _acts += 1 - case _lex_actions[_acts - 1] - when 24 then -# line 1 "NONE" - begin - @ts = p - end -# line 3392 "lib/parser/lexer-strings.rb" - end # from state action switch - end - if _trigger_goto - next - end - _keys = @cs << 1 - _inds = _lex_index_offsets[ @cs] - _slen = _lex_key_spans[ @cs] - _wide = ( (source_pts[p] || 0)) - _trans = if ( _slen > 0 && - _lex_trans_keys[_keys] <= _wide && - _wide <= _lex_trans_keys[_keys + 1] - ) then - _lex_indicies[ _inds + _wide - _lex_trans_keys[_keys] ] - else - _lex_indicies[ _inds + _slen ] - end - end - if _goto_level <= _eof_trans - @cs = _lex_trans_targs[_trans] - if _lex_trans_actions[_trans] != 0 - _acts = _lex_trans_actions[_trans] - _nacts = _lex_actions[_acts] - _acts += 1 - while _nacts > 0 - _nacts -= 1 - _acts += 1 - case _lex_actions[_acts - 1] - when 0 then -# line 525 "lib/parser/lexer-strings.rl" - begin - - # Record position of a newline for precise location reporting on tNL - # tokens. - # - # This action is embedded directly into c_nl, as it is idempotent and - # there are no cases when we need to skip it. - @newline_s = p - end - when 1 then -# line 581 "lib/parser/lexer-strings.rl" - begin - - unicode_points(p) - end - when 2 then -# line 585 "lib/parser/lexer-strings.rl" - begin - - unescape_char(p) - end - when 3 then -# line 589 "lib/parser/lexer-strings.rl" - begin - - diagnostic :fatal, :invalid_escape - end - when 4 then -# line 593 "lib/parser/lexer-strings.rl" - begin - - read_post_meta_or_ctrl_char(p) - end - when 5 then -# line 597 "lib/parser/lexer-strings.rl" - begin - - slash_c_char - end - when 6 then -# line 601 "lib/parser/lexer-strings.rl" - begin - - slash_m_char - end - when 7 then -# line 607 "lib/parser/lexer-strings.rl" - begin - encode_escaped_char(p) end - when 8 then -# line 613 "lib/parser/lexer-strings.rl" - begin - @escape = "\x7f" end - when 9 then -# line 614 "lib/parser/lexer-strings.rl" - begin - encode_escaped_char(p) end - when 10 then -# line 621 "lib/parser/lexer-strings.rl" - begin - @escape = encode_escape(tok(@escape_s, p).to_i(8) % 0x100) end - when 11 then -# line 625 "lib/parser/lexer-strings.rl" - begin - @escape = encode_escape(tok(@escape_s + 1, p).to_i(16)) end - when 12 then -# line 629 "lib/parser/lexer-strings.rl" - begin - - diagnostic :fatal, :invalid_hex_escape, nil, range(@escape_s - 1, p + 2) - end - when 13 then -# line 635 "lib/parser/lexer-strings.rl" - begin - @escape = tok(@escape_s + 1, p).to_i(16).chr(Encoding::UTF_8) end - when 14 then -# line 639 "lib/parser/lexer-strings.rl" - begin - - check_invalid_escapes(p) - end - when 15 then -# line 645 "lib/parser/lexer-strings.rl" - begin - - check_invalid_escapes(p) - end - when 16 then -# line 659 "lib/parser/lexer-strings.rl" - begin - - diagnostic :fatal, :unterminated_unicode, nil, range(p - 1, p) - end - when 17 then -# line 685 "lib/parser/lexer-strings.rl" - begin - - diagnostic :fatal, :escape_eof, nil, range(p - 1, p) - end - when 18 then -# line 691 "lib/parser/lexer-strings.rl" - begin - - @escape_s = p - @escape = nil - end - when 19 then -# line 808 "lib/parser/lexer-strings.rl" - begin - interp_var_kind = :gvar end - when 20 then -# line 809 "lib/parser/lexer-strings.rl" - begin - interp_var_kind = :cvar end - when 21 then -# line 810 "lib/parser/lexer-strings.rl" - begin - interp_var_kind = :ivar end - when 22 then -# line 944 "lib/parser/lexer-strings.rl" - begin - @escape = nil end - when 25 then -# line 1 "NONE" - begin - @te = p+1 - end - when 26 then -# line 842 "lib/parser/lexer-strings.rl" - begin - @te = p+1 - begin - current_literal = literal - extend_interp_code(current_literal) - @root_lexer_state = @lexer.class.lex_en_expr_value; - begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - end - when 27 then -# line 761 "lib/parser/lexer-strings.rl" - begin - @te = p+1 - begin - current_literal = literal - extend_string_eol_check_eof(current_literal, pe) - - if current_literal.heredoc? - line = extend_string_eol_heredoc_line - - # Try ending the heredoc with the complete most recently - # scanned line. @herebody_s always refers to the start of such line. - if current_literal.nest_and_try_closing(line, @herebody_s, @ts) - # Adjust @herebody_s to point to the next line. - @herebody_s = @te - - # Continue regular lexing after the heredoc reference (< unknown_options.join } - end - - emit(:tREGEXP_OPT) - @root_lexer_state = @lexer.class.lex_en_expr_end; - begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - end - when 77 then -# line 953 "lib/parser/lexer-strings.rl" - begin - @te = p+1 - begin - escape = ESCAPE_WHITESPACE[source_buffer.slice(@ts + 1, 1)] - diagnostic :warning, :invalid_escape_use, { :escape => escape }, range - - p = @ts - 1 - @root_lexer_state = @lexer.class.lex_en_expr_end; - begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - end - when 78 then -# line 946 "lib/parser/lexer-strings.rl" - begin - @te = p -p = p - 1; begin - emit_character_constant - - @root_lexer_state = @lexer.class.lex_en_expr_end; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - end - when 79 then -# line 964 "lib/parser/lexer-strings.rl" - begin - @te = p -p = p - 1; begin - p = @ts - 1 - @root_lexer_state = @lexer.class.lex_en_expr_end; - begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - end - when 80 then -# line 946 "lib/parser/lexer-strings.rl" - begin - begin p = (( @te))-1; end - begin - emit_character_constant - - @root_lexer_state = @lexer.class.lex_en_expr_end; begin - p += 1 - _trigger_goto = true - _goto_level = _out - break - end - - end - end - when 81 then -# line 972 "lib/parser/lexer-strings.rl" - begin - @te = p+1 - begin raise 'bug' end - end -# line 4935 "lib/parser/lexer-strings.rb" - end # action switch - end - end - if _trigger_goto - next - end - end - if _goto_level <= _again - _acts = _lex_to_state_actions[ @cs] - _nacts = _lex_actions[_acts] - _acts += 1 - while _nacts > 0 - _nacts -= 1 - _acts += 1 - case _lex_actions[_acts - 1] - when 23 then -# line 1 "NONE" - begin - @ts = nil; end -# line 4955 "lib/parser/lexer-strings.rb" - end # to state action switch - end - if _trigger_goto - next - end - if @cs == 0 - _goto_level = _out - next - end - p += 1 - if p != pe - _goto_level = _resume - next - end - end - if _goto_level <= _test_eof - if p == eof - if _lex_eof_trans[ @cs] > 0 - _trans = _lex_eof_trans[ @cs] - 1; - _goto_level = _eof_trans - next; - end - end - end - if _goto_level <= _out - break - end - end - end - -# line 78 "lib/parser/lexer-strings.rl" - # % - - # Ragel creates a local variable called `testEof` but it doesn't use - # it in any assignment. This dead code is here to swallow the warning. - # It has no runtime cost because Ruby doesn't produce any instructions from it. - if false - testEof - end - - [p, @root_lexer_state] - end - - def read_character_constant(p) - @cs = self.class.lex_en_character - - advance(p) - end - - # - # === LITERAL STACK === - # - - def push_literal(*args) - new_literal = Parser::Lexer::Literal.new(self, *args) - @literal_stack.push(new_literal) - @cs = next_state_for_literal(new_literal) - end - - def next_state_for_literal(literal) - if literal.words? && literal.backslash_delimited? - if literal.interpolate? - self.class.lex_en_interp_backslash_delimited_words - else - self.class.lex_en_plain_backslash_delimited_words - end - elsif literal.words? && !literal.backslash_delimited? - if literal.interpolate? - self.class.lex_en_interp_words - else - self.class.lex_en_plain_words - end - elsif !literal.words? && literal.backslash_delimited? - if literal.interpolate? - self.class.lex_en_interp_backslash_delimited - else - self.class.lex_en_plain_backslash_delimited - end - else - if literal.interpolate? - self.class.lex_en_interp_string - else - self.class.lex_en_plain_string - end - end - end - - def continue_lexing(current_literal) - @cs = next_state_for_literal(current_literal) - end - - def literal - @literal_stack.last - end - - def pop_literal - old_literal = @literal_stack.pop - - @dedent_level = old_literal.dedent_level - - if old_literal.type == :tREGEXP_BEG - @root_lexer_state = @lexer.class.lex_en_inside_string - - # Fetch modifiers. - self.class.lex_en_regexp_modifiers - else - @root_lexer_state = @lexer.class.lex_en_expr_end - - # Do nothing, yield to main lexer - nil - end - end - - def close_interp_on_current_literal(p) - current_literal = literal - if current_literal - if current_literal.end_interp_brace_and_try_closing - if version?(18, 19) - emit(:tRCURLY, '}'.freeze, p - 1, p) - @lexer.cond.lexpop - @lexer.cmdarg.lexpop - else - emit(:tSTRING_DEND, '}'.freeze, p - 1, p) - end - - if current_literal.saved_herebody_s - @herebody_s = current_literal.saved_herebody_s - end - - continue_lexing(current_literal) - - return true - end - end - end - - def dedent_level - # We erase @dedent_level as a precaution to avoid accidentally - # using a stale value. - dedent_level, @dedent_level = @dedent_level, nil - dedent_level - end - - # This hook is triggered by "main" lexer on every newline character - def on_newline(p) - # After every heredoc was parsed, @herebody_s contains the - # position of next token after all heredocs. - if @herebody_s - p = @herebody_s - @herebody_s = nil - end - p - end - - protected - - def eof_codepoint?(point) - [0x04, 0x1a, 0x00].include? point - end - - def version?(*versions) - versions.include?(@version) - end - - def tok(s = @ts, e = @te) - @source_buffer.slice(s, e - s) - end - - def range(s = @ts, e = @te) - Parser::Source::Range.new(@source_buffer, s, e) - end - - def emit(type, value = tok, s = @ts, e = @te) - @lexer.send(:emit, type, value, s, e) - end - - def diagnostic(type, reason, arguments=nil, location=range, highlights=[]) - @lexer.send(:diagnostic, type, reason, arguments, location, highlights) - end - - def cond - @lexer.cond - end - - def emit_invalid_escapes? - # always true for old Rubies - return true if @version < 32 - - # in "?\u123" case we don't push any literals - # but we always emit invalid escapes - return true if literal.nil? - - # Ruby >= 32, regexp, exceptional case - !literal.regexp? - end - - # String escaping - - def extend_string_escaped - current_literal = literal - # Get the first character after the backslash. - escaped_char = source_buffer.slice(@escape_s, 1).chr - - if current_literal.munge_escape? escaped_char - # If this particular literal uses this character as an opening - # or closing delimiter, it is an escape sequence for that - # particular character. Write it without the backslash. - - if current_literal.regexp? && REGEXP_META_CHARACTERS.match(escaped_char) - # Regular expressions should include escaped delimiters in their - # escaped form, except when the escaped character is - # a closing delimiter but not a regexp metacharacter. - # - # The backslash itself cannot be used as a closing delimiter - # at the same time as an escape symbol, but it is always munged, - # so this branch also executes for the non-closing-delimiter case - # for the backslash. - current_literal.extend_string(tok, @ts, @te) - else - current_literal.extend_string(escaped_char, @ts, @te) - end - else - # It does not. So this is an actual escape sequence, yay! - if current_literal.squiggly_heredoc? && escaped_char == "\n".freeze - # Squiggly heredocs like - # <<~-HERE - # 1\ - # 2 - # HERE - # treat '\' as a line continuation, but still dedent the body, so the heredoc above becomes "12\n". - # This information is emitted as is, without escaping, - # later this escape sequence (\\\n) gets handled manually in the Lexer::Dedenter - current_literal.extend_string(tok, @ts, @te) - elsif current_literal.supports_line_continuation_via_slash? && escaped_char == "\n".freeze - # Heredocs, regexp and a few other types of literals support line - # continuation via \\\n sequence. The code like - # "a\ - # b" - # must be parsed as "ab" - current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) - elsif current_literal.regexp? && @version >= 31 && %w[c C m M].include?(escaped_char) - # Ruby >= 3.1 escapes \c- and \m chars, that's the only escape sequence - # supported by regexes so far, so it needs a separate branch. - current_literal.extend_string(@escape, @ts, @te) - elsif current_literal.regexp? - # Regular expressions should include escape sequences in their - # escaped form. On the other hand, escaped newlines are removed (in cases like "\\C-\\\n\\M-x") - current_literal.extend_string(tok.gsub("\\\n".freeze, ''.freeze), @ts, @te) - else - current_literal.extend_string(@escape || tok, @ts, @te) - end - end - end - - def extend_interp_code(current_literal) - current_literal.flush_string - current_literal.extend_content - - emit(:tSTRING_DBEG, '#{'.freeze) - - if current_literal.heredoc? - current_literal.saved_herebody_s = @herebody_s - @herebody_s = nil - end - - current_literal.start_interp_brace - @lexer.command_start = true - end - - def extend_interp_digit_var - if @version >= 27 - literal.extend_string(tok, @ts, @te) - else - message = tok.start_with?('#@@') ? :cvar_name : :ivar_name - diagnostic :error, message, { :name => tok(@ts + 1, @te) }, range(@ts + 1, @te) - end - end - - def extend_string_eol_check_eof(current_literal, pe) - if @te == pe - diagnostic :fatal, :string_eof, nil, - range(current_literal.str_s, current_literal.str_s + 1) - end - end - - def extend_string_eol_heredoc_line - line = tok(@herebody_s, @ts).gsub(/\r+$/, ''.freeze) - - if version?(18, 19, 20) - # See ruby:c48b4209c - line = line.gsub(/\r.*$/, ''.freeze) - end - line - end - - def extend_string_eol_heredoc_intertwined(p) - if @herebody_s - # This is a regular literal intertwined with a heredoc. Like: - # - # p <<-foo+"1 - # bar - # foo - # 2" - # - # which, incidentally, evaluates to "bar\n1\n2". - p = @herebody_s - 1 - @herebody_s = nil - end - p - end - - def extend_string_eol_words(current_literal, p) - if current_literal.words? && !eof_codepoint?(source_pts[p]) - current_literal.extend_space @ts, @te - else - # A literal newline is appended if the heredoc was _not_ closed - # this time (see fbreak above). See also Literal#nest_and_try_closing - # for rationale of calling #flush_string here. - current_literal.extend_string tok, @ts, @te - current_literal.flush_string - end - end - - def extend_string_slice_end(lookahead) - # tLABEL_END is only possible in non-cond context on >= 2.2 - if @version >= 22 && !cond.active? - lookahead = source_buffer.slice(@te, 2) - end - lookahead - end - - def extend_string_for_token_range(current_literal, string) - current_literal.extend_string(string, @ts, @te) - end - - def encode_escape(ord) - ord.chr.force_encoding(source_buffer.source.encoding) - end - - def unescape_char(p) - codepoint = source_pts[p - 1] - - if @version >= 30 && (codepoint == 117 || codepoint == 85) # 'u' or 'U' - diagnostic :fatal, :invalid_escape - end - - if (@escape = ESCAPES[codepoint]).nil? - @escape = encode_escape(source_buffer.slice(p - 1, 1)) - end - end - - def unicode_points(p) - @escape = "" - - codepoints = tok(@escape_s + 2, p - 1) - codepoint_s = @escape_s + 2 - - if @version < 24 - if codepoints.start_with?(" ") || codepoints.start_with?("\t") - diagnostic :fatal, :invalid_unicode_escape, nil, - range(@escape_s + 2, @escape_s + 3) - end - - if spaces_p = codepoints.index(/[ \t]{2}/) - diagnostic :fatal, :invalid_unicode_escape, nil, - range(codepoint_s + spaces_p + 1, codepoint_s + spaces_p + 2) - end - - if codepoints.end_with?(" ") || codepoints.end_with?("\t") - diagnostic :fatal, :invalid_unicode_escape, nil, range(p - 1, p) - end - end - - codepoints.scan(/([0-9a-fA-F]+)|([ \t]+)/).each do |(codepoint_str, spaces)| - if spaces - codepoint_s += spaces.length - else - codepoint = codepoint_str.to_i(16) - - if codepoint >= 0x110000 - diagnostic :error, :unicode_point_too_large, nil, - range(codepoint_s, codepoint_s + codepoint_str.length) - break - end - - @escape += codepoint.chr(Encoding::UTF_8) - codepoint_s += codepoint_str.length - end - end - end - - def read_post_meta_or_ctrl_char(p) - @escape = source_buffer.slice(p - 1, 1).chr - - if @version >= 27 && ((0..8).include?(@escape.ord) || (14..31).include?(@escape.ord)) - diagnostic :fatal, :invalid_escape - end - end - - def extend_interp_var(current_literal) - current_literal.flush_string - current_literal.extend_content - - emit(:tSTRING_DVAR, nil, @ts, @ts + 1) - - @ts - end - - def emit_interp_var(interp_var_kind) - case interp_var_kind - when :cvar - @lexer.send(:emit_class_var, @ts + 1, @te) - when :ivar - @lexer.send(:emit_instance_var, @ts + 1, @te) - when :gvar - @lexer.send(:emit_global_var, @ts + 1, @te) - end - end - - def encode_escaped_char(p) - @escape = encode_escape(tok(p - 2, p).to_i(16)) - end - - def slash_c_char - @escape = encode_escape(@escape[0].ord & 0x9f) - end - - def slash_m_char - @escape = encode_escape(@escape[0].ord | 0x80) - end - - def emit_character_constant - value = @escape || tok(@ts + 1) - - if version?(18) - emit(:tINTEGER, value.getbyte(0)) - else - emit(:tCHARACTER, value) - end - end - - def check_ambiguous_slash(tm) - if tok(tm, tm + 1) == '/'.freeze - # Ambiguous regexp literal. - if @version < 30 - diagnostic :warning, :ambiguous_literal, nil, range(tm, tm + 1) - else - diagnostic :warning, :ambiguous_regexp, nil, range(tm, tm + 1) - end - end - end - - def check_invalid_escapes(p) - if emit_invalid_escapes? - diagnostic :fatal, :invalid_unicode_escape, nil, range(@escape_s - 1, p) - end - end - - ESCAPE_WHITESPACE = { - " " => '\s', "\r" => '\r', "\n" => '\n', "\t" => '\t', - "\v" => '\v', "\f" => '\f' - } - - -# line 975 "lib/parser/lexer-strings.rl" - - # % - -end diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/lexer/dedenter.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/lexer/dedenter.rb deleted file mode 100644 index 5746cff6..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/lexer/dedenter.rb +++ /dev/null @@ -1,88 +0,0 @@ -# frozen_string_literal: true - -module Parser - - class Lexer::Dedenter - # Tab (\t) counts as 8 spaces - TAB_WIDTH = 8 - - def initialize(dedent_level) - @dedent_level = dedent_level - @at_line_begin = true - @indent_level = 0 - end - - # For a heredoc like - # <<-HERE - # a - # b - # HERE - # this method gets called with " a\n" and " b\n" - # - # However, the following heredoc: - # - # <<-HERE - # a\ - # b - # HERE - # calls this method only once with a string " a\\\n b\n" - # - # This is important because technically it's a single line, - # but it has to be concatenated __after__ dedenting. - # - # It has no effect for non-squiggly heredocs, i.e. it simply removes "\\\n" - # Of course, lexer could do it but once again: it's all because of dedenting. - # - def dedent(string) - original_encoding = string.encoding - # Prevent the following error when processing binary encoded source. - # "\xC0".split # => ArgumentError (invalid byte sequence in UTF-8) - lines = string.force_encoding(Encoding::BINARY).split("\\\n") - if lines.length == 1 - # If the line continuation sequence was found but there is no second - # line, it was not really a line continuation and must be ignored. - lines = [string.force_encoding(original_encoding)] - else - lines.map! {|s| s.force_encoding(original_encoding) } - end - - if @at_line_begin - lines_to_dedent = lines - else - _first, *lines_to_dedent = lines - end - - lines_to_dedent.each do |line| - left_to_remove = @dedent_level - remove = 0 - - line.each_char do |char| - break if left_to_remove <= 0 - case char - when ?\s - remove += 1 - left_to_remove -= 1 - when ?\t - break if TAB_WIDTH * (remove / TAB_WIDTH + 1) > @dedent_level - remove += 1 - left_to_remove -= TAB_WIDTH - else - # no more spaces or tabs - break - end - end - - line.slice!(0, remove) - end - - string.replace(lines.join) - - @at_line_begin = string.end_with?("\n") - end - - def interrupt - @at_line_begin = false - end - end - -end diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/lexer/explanation.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/lexer/explanation.rb deleted file mode 100644 index 2ca384c5..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/lexer/explanation.rb +++ /dev/null @@ -1,55 +0,0 @@ -# frozen_string_literal: true - -module Parser - - module Lexer::Explanation - - def self.included(klass) - klass.class_exec do - alias_method :state_before_explanation=, :state= - alias_method :advance_before_explanation, :advance - - remove_method :state=, :advance - end - end - - # Like #advance, but also pretty-print the token and its position - # in the stream to `stdout`. - def advance - type, (val, range) = advance_before_explanation - - more = "(in-kwarg)" if @context.in_kwarg - - puts decorate(range, - Color.green("#{type} #{val.inspect}"), - "#{state.to_s.ljust(12)} #{@cond} #{@cmdarg} #{more}") - - [ type, [val, range] ] - end - - def state=(new_state) - puts " #{Color.yellow(">>> STATE SET <<<", bold: true)} " + - "#{new_state.to_s.ljust(12)} #{@cond} #{@cmdarg}".rjust(66) - - self.state_before_explanation = new_state - end - - private - - def decorate(range, token, info) - from, to = range.begin.column, range.end.column - - line = range.source_line + ' ' - line[from...to] = Color.underline(line[from...to]) - - tail_len = to - from - 1 - tail = '~' * (tail_len >= 0 ? tail_len : 0) - decoration = "#{" " * from}#{Color.red("^#{tail}", bold: true)} #{token} ". - ljust(68) + info - - [ line, decoration ] - end - - end - -end diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/lexer/literal.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/lexer/literal.rb deleted file mode 100644 index 537d32ea..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/lexer/literal.rb +++ /dev/null @@ -1,284 +0,0 @@ -# encoding: binary -# frozen_string_literal: true - -module Parser - - class Lexer::Literal - DELIMITERS = { '(' => ')', '[' => ']', '{' => '}', '<' => '>' } - SPACE = ' '.ord - TAB = "\t".ord - - TYPES = { - # type start token interpolate? - "'" => [ :tSTRING_BEG, false ], - "<<'" => [ :tSTRING_BEG, false ], - '%q' => [ :tSTRING_BEG, false ], - '"' => [ :tSTRING_BEG, true ], - '<<"' => [ :tSTRING_BEG, true ], - '%' => [ :tSTRING_BEG, true ], - '%Q' => [ :tSTRING_BEG, true ], - - '%w' => [ :tQWORDS_BEG, false ], - '%W' => [ :tWORDS_BEG, true ], - - '%i' => [ :tQSYMBOLS_BEG, false ], - '%I' => [ :tSYMBOLS_BEG, true ], - - ":'" => [ :tSYMBEG, false ], - '%s' => [ :tSYMBEG, false ], - ':"' => [ :tSYMBEG, true ], - - '/' => [ :tREGEXP_BEG, true ], - '%r' => [ :tREGEXP_BEG, true ], - - '%x' => [ :tXSTRING_BEG, true ], - '`' => [ :tXSTRING_BEG, true ], - '<<`' => [ :tXSTRING_BEG, true ], - } - - attr_reader :heredoc_e, :str_s, :dedent_level - attr_accessor :saved_herebody_s - - def initialize(lexer, str_type, delimiter, str_s, heredoc_e = nil, - indent = false, dedent_body = false, label_allowed = false) - @lexer = lexer - @nesting = 1 - - # DELIMITERS and TYPES are hashes with keys encoded in binary. - # Coerce incoming data to the same encoding. - str_type = coerce_encoding(str_type) - delimiter = coerce_encoding(delimiter) - - unless TYPES.include?(str_type) - lexer.send(:diagnostic, :error, :unexpected_percent_str, - { :type => str_type }, @lexer.send(:range, str_s, str_s + 2)) - end - - # String type. For :'foo', it is :' - @str_type = str_type - # Start of the string type specifier. - @str_s = str_s - - @start_tok, @interpolate = TYPES[str_type] - @start_delim = DELIMITERS.include?(delimiter) ? delimiter : nil - @end_delim = DELIMITERS.fetch(delimiter, delimiter) - - @heredoc_e = heredoc_e - @indent = indent - @label_allowed = label_allowed - - @dedent_body = dedent_body - @dedent_level = nil - - @interp_braces = 0 - - @space_emitted = true - - # Monolithic strings are glued into a single token, e.g. - # tSTRING_BEG tSTRING_CONTENT tSTRING_END -> tSTRING. - @monolithic = (@start_tok == :tSTRING_BEG && - %w(' ").include?(str_type) && - !heredoc?) - - # Capture opening delimiter in percent-literals. - @str_type += delimiter if @str_type.start_with?('%'.freeze) - - clear_buffer - - emit_start_tok unless @monolithic - end - - def interpolate? - @interpolate - end - - def words? - type == :tWORDS_BEG || type == :tQWORDS_BEG || - type == :tSYMBOLS_BEG || type == :tQSYMBOLS_BEG - end - - def regexp? - type == :tREGEXP_BEG - end - - def heredoc? - !!@heredoc_e - end - - def plain_heredoc? - heredoc? && !@dedent_body - end - - def squiggly_heredoc? - heredoc? && @dedent_body - end - - def backslash_delimited? - @end_delim == '\\'.freeze - end - - def type - @start_tok - end - - def munge_escape?(character) - character = coerce_encoding(character) - - if words? && character =~ /[ \t\v\r\f\n]/ - true - else - ['\\'.freeze, @start_delim, @end_delim].include?(character) - end - end - - def nest_and_try_closing(delimiter, ts, te, lookahead=nil) - delimiter = coerce_encoding(delimiter) - - if @start_delim && @start_delim == delimiter - @nesting += 1 - elsif delimiter?(delimiter) - @nesting -= 1 - end - - # Finalize if last matching delimiter is closed. - if @nesting == 0 - if words? - extend_space(ts, ts) - end - - if lookahead && @label_allowed && lookahead[0] == ?: && - lookahead[1] != ?: && @start_tok == :tSTRING_BEG - # This is a quoted label. - flush_string - emit(:tLABEL_END, @end_delim, ts, te + 1) - elsif @monolithic - # Emit the string as a single token. - emit(:tSTRING, @buffer, @str_s, te) - else - # If this is a heredoc, @buffer contains the sentinel now. - # Just throw it out. Lexer flushes the heredoc after each - # non-heredoc-terminating \n anyway, so no data will be lost. - flush_string unless heredoc? - - emit(:tSTRING_END, @end_delim, ts, te) - end - end - end - - def infer_indent_level(line) - return if !@dedent_body - - indent_level = 0 - line.each_char do |char| - case char - when ?\s - indent_level += 1 - when ?\t - indent_level += (8 - indent_level % 8) - else - if @dedent_level.nil? || @dedent_level > indent_level - @dedent_level = indent_level - end - break - end - end - end - - def start_interp_brace - @interp_braces += 1 - end - - def end_interp_brace_and_try_closing - @interp_braces -= 1 - - (@interp_braces == 0) - end - - def extend_string(string, ts, te) - @buffer_s ||= ts - @buffer_e = te - - @buffer << string - end - - def flush_string - if @monolithic - emit_start_tok - @monolithic = false - end - - unless @buffer.empty? - emit(:tSTRING_CONTENT, @buffer, @buffer_s, @buffer_e) - - clear_buffer - extend_content - end - end - - def extend_content - @space_emitted = false - end - - def extend_space(ts, te) - flush_string - - unless @space_emitted - emit(:tSPACE, nil, ts, te) - - @space_emitted = true - end - end - - def supports_line_continuation_via_slash? - !words? && @interpolate - end - - protected - - def delimiter?(delimiter) - if heredoc? - # This heredoc is valid: - # <<~E - # E - # and this: - # <<~E - # E - # but this one is not: - # <<~' E' - # E - # because there are not enough leading spaces in the closing delimiter. - delimiter.end_with?(@end_delim) && - delimiter.sub(/#{Regexp.escape(@end_delim)}\z/, '').bytes.all? { |c| c == SPACE || c == TAB } - elsif @indent - @end_delim == delimiter.lstrip - else - @end_delim == delimiter - end - end - - def coerce_encoding(string) - string.b - end - - def clear_buffer - @buffer = ''.dup - - # Prime the buffer with lexer encoding; otherwise, - # concatenation will produce varying results. - @buffer.force_encoding(@lexer.source_buffer.source.encoding) - - @buffer_s = nil - @buffer_e = nil - end - - def emit_start_tok - str_e = @heredoc_e || @str_s + @str_type.length - emit(@start_tok, @str_type, @str_s, str_e) - end - - def emit(token, type, s, e) - @lexer.send(:emit, token, type, s, e) - end - end - -end diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/lexer/stack_state.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/lexer/stack_state.rb deleted file mode 100644 index d97114f1..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/lexer/stack_state.rb +++ /dev/null @@ -1,49 +0,0 @@ -# frozen_string_literal: true - -module Parser - - class Lexer::StackState - def initialize(name) - @name = name.freeze - clear - end - - def clear - @stack = 0 - end - - def push(bit) - bit_value = bit ? 1 : 0 - @stack = (@stack << 1) | bit_value - - bit - end - - def pop - bit_value = @stack & 1 - @stack >>= 1 - - bit_value == 1 - end - - def lexpop - @stack = ((@stack >> 1) | (@stack & 1)) - @stack[0] == 1 - end - - def active? - @stack[0] == 1 - end - - def empty? - @stack == 0 - end - - def to_s - "[#{@stack.to_s(2)} <= #{@name}]" - end - - alias inspect to_s - end - -end diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/macruby.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/macruby.rb deleted file mode 100644 index 5895f3b6..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/macruby.rb +++ /dev/null @@ -1,9634 +0,0 @@ -# -*- encoding:utf-8; warn-indent:false; frozen_string_literal: true -*- -# -# DO NOT MODIFY!!!! -# This file is automatically generated by Racc 1.7.3 -# from Racc grammar file "macruby.y". -# - -require 'racc/parser.rb' - - -require 'parser' - -module Parser - class MacRuby < Parser::Base - - - def version - 19 # closest released match: v1_9_0_2 - end - - def default_encoding - Encoding::BINARY - end - - def local_push - @static_env.extend_static - @lexer.cmdarg.push(false) - @lexer.cond.push(false) - end - - def local_pop - @static_env.unextend - @lexer.cmdarg.pop - @lexer.cond.pop - end -##### State transition tables begin ### - -racc_action_table = [ - -460, 5, 69, 70, 66, 9, 52, -460, -460, -460, - 58, 59, -460, -460, -460, 62, -460, 60, 61, 63, - 28, 29, 67, 68, -460, 257, -460, -460, -460, 27, - 26, 25, 93, 92, 94, 95, -460, -460, 18, -460, - -460, -460, -460, -460, 8, 42, 7, 10, 97, 96, - 98, 87, 51, 89, 88, 90, 535, 91, 99, 100, - 514, 85, 86, 39, 40, 38, -460, -460, -460, -460, - -460, -460, -460, -460, -460, -460, -460, -460, -460, -460, - 101, 468, -460, -460, -460, 37, -460, -460, 31, -93, - -460, 53, 54, -460, -460, 55, -460, 33, -460, 556, - -460, 41, -460, -460, -460, -460, -460, -460, -460, 19, - -460, 256, -460, -100, 84, 76, 79, 80, 208, 81, - 82, 113, -99, 736, 77, 83, -460, -460, -460, -460, - -463, -460, 57, -460, 78, -460, 759, -463, -463, -463, - -473, 204, -463, -463, -463, 667, -463, 526, 514, -87, - 197, 527, 514, 588, -463, 209, -463, -463, -463, -95, - 504, 534, 555, 503, 198, -97, -463, -463, 667, -463, - -463, -463, -463, -463, 105, 514, 514, -95, -97, 104, - -94, 105, 205, 206, -92, -94, 104, 587, 105, -93, - -100, 588, 199, 104, -85, 419, -463, -463, -463, -463, - -463, -463, -463, -463, -463, -463, -463, -463, -463, -463, - 205, 206, -463, -463, -463, -87, -463, -463, -92, 200, - -463, -96, -89, -463, -463, 587, -463, -91, -463, 247, - -463, 667, -463, -463, -463, -463, -463, -463, -463, -286, - -463, 758, -463, 300, -100, 105, -286, -286, -286, 588, - 104, -87, -286, -286, -87, -286, -463, -463, -463, -463, - -87, -463, 105, -463, -87, -463, 105, 104, 105, 786, - -89, 104, 105, 104, 257, -286, -286, 104, -286, -286, - -286, -286, -286, 587, 301, -86, 257, -96, -89, 105, - 105, -95, -97, -98, 104, 104, -95, -97, -534, -94, - 209, 631, 209, 520, -94, -286, -286, -286, -286, -286, - -286, -286, -286, -286, -286, -286, -286, -286, -286, 205, - 206, -286, -286, -286, -89, 573, -473, -89, 366, -286, - 491, 105, -286, -89, 545, -96, 104, -286, 252, -286, - -96, -286, -286, -286, -286, -286, -286, -286, -538, -286, - 252, -286, -534, 205, 206, -538, -538, -538, -535, 767, - 256, -538, -538, 719, -538, -286, -286, 588, -90, -85, - -286, 249, 256, -538, -98, -93, -531, -404, 250, -99, - 504, 205, 206, 506, -538, -538, -460, -538, -538, -538, - -538, -538, -88, -460, 379, 547, 546, 543, -90, 767, - 775, 587, 647, 646, 645, 651, 648, 768, 545, 209, - 504, 418, -95, 506, -538, -538, -538, -538, -538, -538, - -538, -538, -538, -538, -538, -538, -538, -538, -460, -404, - -538, -538, -538, 420, 574, -460, -404, 421, -538, 720, - -531, -538, 545, 209, -460, -404, -538, 817, -538, 208, - -538, -538, -538, -538, -538, -538, -538, 76, -538, -538, - -538, 545, -531, -404, 302, 303, 77, -532, -538, 547, - 546, 548, 803, -538, -538, -538, 78, -88, 850, -538, - -538, -538, -538, -96, -463, -538, -538, -538, -97, -538, - 775, -463, 647, 646, 645, 651, 648, 228, -538, -538, - -538, -538, 376, 547, 546, 550, -538, 378, 377, -538, - -538, -470, -538, -538, -538, -538, -538, 453, -470, -463, - -538, -94, 547, 546, 552, 545, -463, -538, 545, 225, - -469, -532, -534, 227, 226, -463, -538, -469, 464, -538, - -538, -538, -538, -538, -538, -538, -538, -538, -538, -538, - -538, -538, -538, -532, -538, -538, -538, -538, -538, 721, - -538, 486, 487, -538, 491, -538, -538, -538, 938, -538, - -534, -538, 466, -538, -538, -538, -538, -538, -538, -538, - -538, -538, -80, -538, -538, -538, 547, 546, -66, 547, - 546, 557, -538, 468, 504, 699, 228, 506, 568, -538, - -538, -538, -538, -286, -538, 569, -538, -91, -96, 707, - -286, -286, -286, -99, -65, -286, -286, -286, 732, -286, - 647, 646, 645, 651, 648, 228, 205, 206, 225, -286, - -286, -286, 227, 226, 223, 224, 205, 206, 209, -286, - -286, -87, -286, -286, -286, -286, -286, -95, -89, -471, - 781, 631, -86, -468, -97, 653, -471, 225, -94, 476, - -468, 227, 226, 105, 657, 656, 660, 659, 104, -286, - -286, -286, -286, -286, -286, -286, -286, -286, -286, -286, - -286, -286, -286, 477, 202, -286, -286, -286, -330, 722, - -286, 203, 484, -286, 261, -330, -286, -286, 731, -286, - 201, -286, 209, -286, -330, -286, -286, -286, -286, -286, - -286, -286, 252, -286, 488, -286, 492, 650, -465, 647, - 646, 645, 651, 648, 493, -465, -466, 228, -467, -286, - -286, -286, -286, -466, -286, -467, -286, 499, -98, 277, - 69, 70, 66, 9, 52, 540, 105, 500, 58, 59, - 507, 104, 541, 62, 653, 60, 61, 63, 28, 29, - 67, 68, 508, 657, 656, 660, 659, 27, 26, 25, - 93, 92, 94, 95, 693, 694, 18, 468, 695, 99, - 100, 562, 8, 42, 520, 10, 97, 96, 98, 87, - 51, 89, 88, 90, 368, 91, 99, 100, 524, 85, - 86, 39, 40, 38, 228, 232, 237, 238, 239, 234, - 236, 244, 245, 240, 241, 415, 221, 222, -472, 105, - 242, 243, 416, 37, 104, -472, 279, 105, 525, 53, - 54, 417, 104, 55, -472, 33, 225, 558, 231, 41, - 227, 226, 223, 224, 235, 233, 229, 19, 230, 781, - 631, 105, 84, 76, 79, 80, 104, 81, 82, 228, - 561, 482, 77, 83, 564, 246, -281, -233, 483, -266, - 57, 209, 78, -281, -281, -281, 252, 481, -281, -281, - -281, 650, -281, 647, 646, 645, 651, 648, 578, 228, - 228, 225, -281, -281, -281, 227, 226, 223, 224, 228, - 228, 209, -281, -281, 209, -281, -281, -281, -281, -281, - 775, 209, 647, 646, 645, 651, 648, -80, 653, 639, - 775, 613, 647, 646, 645, 651, 648, 657, 656, 660, - 659, 209, -281, -281, -281, -281, -281, -281, -281, -281, - -281, -281, -281, -281, -281, -281, 497, 771, -281, -281, - -281, -280, 624, -281, 631, 209, -281, 771, -280, -281, - -281, 663, -281, 520, -281, 670, -281, -280, -281, -281, - -281, -281, -281, -281, -281, 494, -281, 698, -281, 701, - 522, -267, 495, 708, 453, 453, 209, 523, 724, 466, - 209, 417, -281, -281, -281, -281, 521, -281, 743, -281, - 277, 69, 70, 66, 9, 52, 468, 624, 530, 58, - 59, 209, 252, 252, 62, 529, 60, 61, 63, 28, - 29, 67, 68, 624, 531, 228, 228, 750, 27, 26, - 25, 93, 92, 94, 95, -266, 775, 18, 647, 646, - 645, 651, 648, 8, 42, 754, 10, 97, 96, 98, - 87, 51, 89, 88, 90, 761, 91, 99, 100, 763, - 85, 86, 39, 40, 38, 775, 766, 647, 646, 645, - 651, 648, 775, 771, 647, 646, 645, 651, 648, -287, - 769, -287, 774, 777, 37, 778, -287, 31, -287, 631, - 53, 54, 785, 209, 55, -287, 33, -287, 209, 794, - 41, 775, 771, 647, 646, 645, 651, 648, 19, 653, - -268, 774, 805, 84, 76, 79, 80, 807, 81, 82, - 660, 659, 810, 77, 83, 5, 69, 70, 66, 9, - 52, 57, 811, 78, 58, 59, 731, 818, 653, 62, - 209, 60, 61, 63, 28, 29, 67, 68, 824, 660, - 659, 825, 624, 27, 26, 25, 93, 92, 94, 95, - 731, 775, 18, 647, 646, 645, 651, 648, 8, 42, - 7, 10, 97, 96, 98, 87, 51, 89, 88, 90, - 845, 91, 99, 100, 848, 85, 86, 39, 40, 38, - 775, 767, 647, 646, 645, 651, 648, 775, 771, 647, - 646, 645, 651, 648, -472, 209, -286, 901, 852, 37, - 854, -472, 31, -286, 860, 53, 54, 862, -535, 55, - -472, 33, -286, 209, 865, 41, 775, 771, 647, 646, - 645, 651, 648, 19, 653, -269, 872, 873, 84, 76, - 79, 80, 876, 81, 82, 660, 659, 878, 77, 83, - 277, 69, 70, 66, 9, 52, 57, 466, 78, 58, - 59, 881, 886, 653, 62, 209, 60, 61, 63, 28, - 29, 67, 68, 890, 660, 659, 893, 895, 27, 26, - 25, 93, 92, 94, 95, 897, 775, 18, 647, 646, - 645, 651, 648, 8, 42, 897, 10, 97, 96, 98, - 87, 51, 89, 88, 90, 209, 91, 99, 100, 902, - 85, 86, 39, 40, 38, 775, 905, 647, 646, 645, - 651, 648, 775, 771, 647, 646, 645, 651, 648, 884, - 906, -286, -280, 911, 37, 913, 885, 31, -286, -280, - 53, 54, 916, -535, 55, 883, 33, -286, -280, 918, - 41, 775, 771, 647, 646, 645, 651, 648, 19, 653, - 897, 897, 923, 84, 76, 79, 80, 499, 81, 82, - 660, 659, 931, 77, 83, 277, 69, 70, 66, 9, - 52, 57, 932, 78, 58, 59, 940, 466, 653, 62, - 209, 60, 61, 63, 28, 29, 67, 68, 953, 660, - 659, 897, 897, 27, 26, 25, 93, 92, 94, 95, - 897, 815, 18, 647, 646, 645, 957, 648, 8, 42, - 940, 10, 97, 96, 98, 87, 51, 89, 88, 90, - 960, 91, 99, 100, 961, 85, 86, 39, 40, 38, - 815, 530, 647, 646, 645, 963, 648, 775, 922, 647, - 646, 645, 651, 648, -287, 897, -286, 531, 897, 37, - 897, -287, 31, -286, -535, 53, 54, -534, -535, 55, - -287, 33, -286, 940, 897, 41, 775, 940, 647, 646, - 645, 651, 648, 19, 653, 897, nil, nil, 84, 76, - 79, 80, nil, 81, 82, 660, 659, nil, 77, 83, - 277, 69, 70, 66, 9, 52, 57, nil, 78, 58, - 59, nil, nil, 653, 62, nil, 60, 61, 63, 28, - 29, 67, 68, nil, 660, 659, nil, nil, 27, 26, - 25, 93, 92, 94, 95, nil, nil, 18, 108, 109, - 110, 111, 112, 8, 42, nil, 10, 97, 96, 98, - 87, 51, 89, 88, 90, nil, 91, 99, 100, nil, - 85, 86, 39, 40, 38, 228, 108, 109, 110, 111, - 112, nil, 775, nil, 647, 646, 645, 651, 648, nil, - nil, 242, 243, nil, 37, nil, nil, 279, nil, nil, - 53, 54, nil, nil, 55, nil, 33, 225, nil, 231, - 41, 227, 226, 223, 224, nil, nil, nil, 19, 653, - nil, nil, nil, 84, 76, 79, 80, nil, 81, 82, - 660, 659, nil, 77, 83, 277, 69, 70, 66, 9, - 52, 57, nil, 78, 58, 59, nil, nil, nil, 62, - nil, 60, 61, 63, 28, 29, 67, 68, 108, 109, - 110, 111, 112, 27, 26, 25, 93, 92, 94, 95, - nil, nil, 18, nil, nil, nil, nil, 565, 8, 42, - nil, 10, 97, 96, 98, 87, 51, 89, 88, 90, - nil, 91, 99, 100, nil, 85, 86, 39, 40, 38, - 228, 232, 237, 238, 239, 234, 236, 244, 245, 240, - 241, nil, 221, 222, nil, nil, 242, 243, nil, 37, - nil, nil, 279, nil, nil, 53, 54, nil, nil, 55, - nil, 33, 225, nil, 231, 41, 227, 226, 223, 224, - 235, 233, 229, 19, 230, nil, nil, nil, 84, 76, - 79, 80, nil, 81, 82, nil, nil, nil, 77, 83, - nil, 246, -539, nil, nil, nil, 57, nil, 78, -539, - -539, -539, nil, nil, -539, -539, -539, 650, -539, 647, - 646, 645, 651, 648, nil, nil, nil, -539, -539, -539, - -539, 108, 109, 110, 111, 112, nil, nil, -539, -539, - nil, -539, -539, -539, -539, -539, nil, nil, nil, nil, - nil, nil, nil, nil, 653, 688, nil, nil, nil, nil, - nil, nil, nil, 657, 656, 660, 659, nil, -539, -539, - -539, -539, -539, -539, -539, -539, -539, -539, -539, -539, - -539, -539, nil, nil, -539, -539, -539, nil, nil, -539, - nil, nil, -539, nil, nil, -539, -539, nil, -539, nil, - -539, nil, -539, nil, -539, -539, -539, -539, -539, -539, - -539, -540, -539, -539, -539, nil, nil, nil, -540, -540, - -540, nil, nil, -540, -540, -540, 228, -540, -539, -539, - -539, -539, nil, -539, nil, -539, -540, -540, -540, -540, - nil, nil, 242, 243, nil, nil, nil, -540, -540, nil, - -540, -540, -540, -540, -540, nil, nil, nil, 225, nil, - 231, nil, 227, 226, 223, 224, nil, nil, 229, nil, - 230, nil, nil, nil, nil, nil, nil, -540, -540, -540, - -540, -540, -540, -540, -540, -540, -540, -540, -540, -540, - -540, nil, nil, -540, -540, -540, nil, nil, -540, nil, - nil, -540, nil, nil, -540, -540, nil, -540, nil, -540, - nil, -540, nil, -540, -540, -540, -540, -540, -540, -540, - nil, -540, -540, -540, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, -540, -540, -540, - -540, nil, -540, nil, -540, 277, 69, 70, 66, 9, - 52, nil, nil, nil, 58, 59, nil, nil, nil, 62, - nil, 60, 61, 63, 28, 29, 67, 68, nil, nil, - nil, nil, nil, 27, 26, 25, 93, 92, 94, 95, - nil, nil, 18, nil, nil, nil, nil, nil, 8, 42, - nil, 10, 97, 96, 98, 87, 51, 89, 88, 90, - nil, 91, 99, 100, nil, 85, 86, 39, 40, 38, - 228, 232, 237, 238, 239, 234, 236, 244, 245, 240, - 241, nil, -557, -557, nil, nil, 242, 243, nil, 37, - nil, nil, 31, nil, nil, 53, 54, nil, nil, 55, - nil, 33, 225, nil, 231, 41, 227, 226, 223, 224, - 235, 233, 229, 19, 230, nil, nil, nil, 84, 76, - 79, 80, nil, 81, 82, nil, nil, nil, 77, 83, - 277, 69, 70, 66, 9, 52, 57, nil, 78, 58, - 59, nil, nil, nil, 62, nil, 60, 61, 63, 28, - 29, 67, 68, nil, nil, nil, nil, nil, 27, 26, - 25, 93, 92, 94, 95, nil, nil, 18, nil, nil, - nil, nil, nil, 8, 42, nil, 10, 97, 96, 98, - 87, 51, 89, 88, 90, nil, 91, 99, 100, nil, - 85, 86, 39, 40, 38, 228, 232, 237, 238, 239, - 234, 236, 244, 245, 240, 241, nil, -557, -557, nil, - nil, 242, 243, nil, 37, nil, nil, 31, nil, nil, - 53, 54, nil, nil, 55, nil, 33, 225, nil, 231, - 41, 227, 226, 223, 224, 235, 233, 229, 19, 230, - nil, nil, nil, 84, 76, 79, 80, nil, 81, 82, - nil, nil, nil, 77, 83, 277, 69, 70, 66, 9, - 52, 57, nil, 78, 58, 59, nil, nil, nil, 62, - nil, 60, 61, 63, 28, 29, 67, 68, nil, nil, - nil, nil, nil, 27, 26, 25, 93, 92, 94, 95, - nil, nil, 18, nil, nil, nil, nil, nil, 8, 42, - nil, 10, 97, 96, 98, 87, 51, 89, 88, 90, - nil, 91, 99, 100, nil, 85, 86, 39, 40, 38, - 228, -557, -557, -557, -557, 234, 236, nil, nil, -557, - -557, nil, nil, nil, nil, nil, 242, 243, nil, 37, - nil, nil, 31, nil, nil, 53, 54, nil, nil, 55, - nil, 33, 225, nil, 231, 41, 227, 226, 223, 224, - 235, 233, 229, 19, 230, nil, nil, nil, 84, 76, - 79, 80, nil, 81, 82, nil, nil, nil, 77, 83, - 277, 69, 70, 66, 9, 52, 57, nil, 78, 58, - 59, nil, nil, nil, 62, nil, 60, 61, 63, 28, - 29, 67, 68, nil, nil, nil, nil, nil, 27, 26, - 25, 93, 92, 94, 95, nil, nil, 18, nil, nil, - nil, nil, nil, 8, 42, nil, 10, 97, 96, 98, - 87, 51, 89, 88, 90, nil, 91, 99, 100, nil, - 85, 86, 39, 40, 38, 228, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 242, 243, nil, 37, nil, nil, 31, nil, nil, - 53, 54, nil, nil, 55, nil, 33, 225, nil, 231, - 41, 227, 226, 223, 224, nil, nil, 229, 19, 230, - nil, nil, nil, 84, 76, 79, 80, nil, 81, 82, - nil, nil, nil, 77, 83, 277, 69, 70, 66, 9, - 52, 57, nil, 78, 58, 59, nil, nil, nil, 62, - nil, 60, 61, 63, 28, 29, 67, 68, nil, nil, - nil, nil, nil, 27, 26, 25, 93, 92, 94, 95, - nil, nil, 18, nil, nil, nil, nil, nil, 8, 42, - nil, 10, 97, 96, 98, 87, 51, 89, 88, 90, - nil, 91, 99, 100, nil, 85, 86, 39, 40, 38, - 228, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 242, 243, nil, 37, - nil, nil, 31, nil, nil, 53, 54, nil, nil, 55, - nil, 33, 225, nil, 231, 41, 227, 226, 223, 224, - nil, nil, 229, 19, 230, nil, nil, nil, 84, 76, - 79, 80, nil, 81, 82, nil, nil, nil, 77, 83, - 277, 69, 70, 66, 9, 52, 57, nil, 78, 58, - 59, nil, nil, nil, 62, nil, 60, 61, 63, 28, - 29, 67, 68, nil, nil, nil, nil, nil, 27, 26, - 25, 93, 92, 94, 95, nil, nil, 18, nil, nil, - nil, nil, nil, 8, 42, nil, 10, 97, 96, 98, - 87, 51, 89, 88, 90, nil, 91, 99, 100, nil, - 85, 86, 39, 40, 38, 228, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 242, 243, nil, 37, nil, nil, 31, nil, nil, - 53, 54, nil, nil, 55, nil, 33, 225, nil, 231, - 41, 227, 226, 223, 224, nil, nil, 229, 19, 230, - nil, nil, nil, 84, 76, 79, 80, nil, 81, 82, - nil, nil, nil, 77, 83, 277, 69, 70, 66, 9, - 52, 57, nil, 78, 58, 59, nil, nil, nil, 62, - nil, 60, 61, 63, 28, 29, 67, 68, nil, nil, - nil, nil, nil, 27, 26, 25, 93, 92, 94, 95, - nil, nil, 18, nil, nil, nil, nil, nil, 8, 42, - nil, 10, 97, 96, 98, 87, 51, 89, 88, 90, - nil, 91, 99, 100, nil, 85, 86, 39, 40, 38, - 228, -557, -557, -557, -557, 234, 236, nil, nil, -557, - -557, nil, nil, nil, nil, nil, 242, 243, nil, 37, - nil, nil, 31, nil, nil, 53, 54, nil, nil, 55, - nil, 33, 225, nil, 231, 41, 227, 226, 223, 224, - 235, 233, 229, 19, 230, nil, nil, nil, 84, 76, - 79, 80, nil, 81, 82, nil, nil, nil, 77, 83, - 277, 69, 70, 66, 9, 52, 57, nil, 78, 58, - 59, nil, nil, nil, 62, nil, 60, 61, 63, 28, - 29, 67, 68, nil, nil, nil, nil, nil, 27, 26, - 25, 93, 92, 94, 95, nil, nil, 18, nil, nil, - nil, nil, nil, 8, 42, nil, 10, 97, 96, 98, - 87, 51, 89, 88, 90, nil, 91, 99, 100, nil, - 85, 86, 39, 40, 38, 228, -557, -557, -557, -557, - 234, 236, nil, nil, -557, -557, nil, nil, nil, nil, - nil, 242, 243, nil, 37, nil, nil, 31, nil, nil, - 53, 54, nil, nil, 55, nil, 33, 225, nil, 231, - 41, 227, 226, 223, 224, 235, 233, 229, 19, 230, - nil, nil, nil, 84, 76, 79, 80, nil, 81, 82, - nil, nil, nil, 77, 83, 277, 69, 70, 66, 9, - 52, 57, nil, 78, 58, 59, nil, nil, nil, 62, - nil, 60, 61, 63, 28, 29, 67, 68, nil, nil, - nil, nil, nil, 27, 26, 25, 93, 92, 94, 95, - nil, nil, 18, nil, nil, nil, nil, nil, 8, 42, - nil, 10, 97, 96, 98, 87, 51, 89, 88, 90, - nil, 91, 99, 100, nil, 85, 86, 39, 40, 38, - 228, -557, -557, -557, -557, 234, 236, nil, nil, -557, - -557, nil, nil, nil, nil, nil, 242, 243, nil, 37, - nil, nil, 31, nil, nil, 53, 54, nil, nil, 55, - nil, 33, 225, nil, 231, 41, 227, 226, 223, 224, - 235, 233, 229, 19, 230, nil, nil, nil, 84, 76, - 79, 80, nil, 81, 82, nil, nil, nil, 77, 83, - 277, 69, 70, 66, 9, 52, 57, nil, 78, 58, - 59, nil, nil, nil, 62, nil, 60, 61, 63, 28, - 29, 67, 68, nil, nil, nil, nil, nil, 27, 26, - 25, 93, 92, 94, 95, nil, nil, 18, nil, nil, - nil, nil, nil, 8, 42, nil, 10, 97, 96, 98, - 87, 51, 89, 88, 90, nil, 91, 99, 100, nil, - 85, 86, 39, 40, 38, 228, -557, -557, -557, -557, - 234, 236, nil, nil, -557, -557, nil, nil, nil, nil, - nil, 242, 243, nil, 37, nil, nil, 31, nil, nil, - 53, 54, nil, nil, 55, nil, 33, 225, nil, 231, - 41, 227, 226, 223, 224, 235, 233, 229, 19, 230, - nil, nil, nil, 84, 76, 79, 80, nil, 81, 82, - nil, nil, nil, 77, 83, 277, 69, 70, 66, 9, - 52, 57, nil, 78, 58, 59, nil, nil, nil, 62, - nil, 60, 61, 63, 28, 29, 67, 68, nil, nil, - nil, nil, nil, 27, 26, 25, 93, 92, 94, 95, - nil, nil, 18, nil, nil, nil, nil, nil, 8, 42, - nil, 10, 97, 96, 98, 87, 51, 89, 88, 90, - nil, 91, 99, 100, nil, 85, 86, 39, 40, 38, - 228, -557, -557, -557, -557, 234, 236, nil, nil, -557, - -557, nil, nil, nil, nil, nil, 242, 243, nil, 37, - nil, nil, 31, nil, nil, 53, 54, nil, nil, 55, - nil, 33, 225, nil, 231, 41, 227, 226, 223, 224, - 235, 233, 229, 19, 230, nil, nil, nil, 84, 76, - 79, 80, nil, 81, 82, nil, nil, nil, 77, 83, - 277, 69, 70, 66, 9, 52, 57, nil, 78, 58, - 59, nil, nil, nil, 62, nil, 60, 61, 63, 28, - 29, 67, 68, nil, nil, nil, nil, nil, 27, 26, - 25, 93, 92, 94, 95, nil, nil, 18, nil, nil, - nil, nil, nil, 8, 42, nil, 10, 97, 96, 98, - 87, 51, 89, 88, 90, nil, 91, 99, 100, nil, - 85, 86, 39, 40, 38, 228, 232, 237, 238, 239, - 234, 236, nil, nil, 240, 241, nil, nil, nil, nil, - nil, 242, 243, nil, 37, nil, nil, 31, nil, nil, - 53, 54, nil, nil, 55, nil, 33, 225, nil, 231, - 41, 227, 226, 223, 224, 235, 233, 229, 19, 230, - nil, nil, nil, 84, 76, 79, 80, nil, 81, 82, - nil, nil, nil, 77, 83, 277, 69, 70, 66, 9, - 52, 57, nil, 78, 58, 59, nil, nil, nil, 62, - nil, 60, 61, 63, 28, 29, 67, 68, nil, nil, - nil, nil, nil, 27, 26, 25, 93, 92, 94, 95, - nil, nil, 18, nil, nil, nil, nil, nil, 8, 42, - nil, 10, 97, 96, 98, 87, 51, 89, 88, 90, - nil, 91, 99, 100, nil, 85, 86, 39, 40, 38, - 228, 232, 237, 238, 239, 234, 236, 244, nil, 240, - 241, nil, nil, nil, nil, nil, 242, 243, nil, 37, - nil, nil, 31, nil, nil, 53, 54, nil, nil, 55, - nil, 33, 225, nil, 231, 41, 227, 226, 223, 224, - 235, 233, 229, 19, 230, nil, nil, nil, 84, 76, - 79, 80, nil, 81, 82, nil, nil, nil, 77, 83, - 277, 69, 70, 66, 9, 52, 57, nil, 78, 58, - 59, nil, nil, nil, 62, nil, 60, 61, 63, 28, - 29, 67, 68, nil, nil, nil, nil, nil, 27, 26, - 25, 93, 92, 94, 95, nil, nil, 18, nil, nil, - nil, nil, nil, 8, 42, nil, 10, 97, 96, 98, - 87, 51, 89, 88, 90, nil, 91, 99, 100, nil, - 85, 86, 39, 40, 38, 228, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 242, 243, nil, 37, nil, nil, 31, nil, nil, - 53, 54, nil, nil, 55, nil, 33, 225, nil, 231, - 41, 227, 226, 223, 224, nil, nil, nil, 19, nil, - nil, nil, nil, 84, 76, 79, 80, nil, 81, 82, - nil, nil, nil, 77, 83, 277, 69, 70, 66, 9, - 52, 57, nil, 78, 58, 59, nil, nil, nil, 62, - nil, 60, 61, 63, 28, 29, 67, 68, nil, nil, - nil, nil, nil, 27, 26, 25, 93, 92, 94, 95, - nil, nil, 18, nil, nil, nil, nil, nil, 8, 42, - nil, 10, 97, 96, 98, 87, 51, 89, 88, 90, - nil, 91, 99, 100, nil, 85, 86, 39, 40, 38, - 228, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 242, 243, nil, 37, - nil, nil, 31, nil, nil, 53, 54, nil, nil, 55, - nil, 33, 225, nil, nil, 41, 227, 226, 223, 224, - nil, nil, nil, 19, nil, nil, nil, nil, 84, 76, - 79, 80, nil, 81, 82, nil, nil, nil, 77, 83, - 277, 69, 70, 66, 9, 52, 57, nil, 78, 58, - 59, nil, nil, nil, 62, nil, 60, 61, 63, 28, - 29, 67, 68, nil, nil, nil, nil, nil, 27, 26, - 25, 93, 92, 94, 95, nil, nil, 18, nil, nil, - nil, nil, nil, 8, 42, nil, 10, 97, 96, 98, - 87, 51, 89, 88, 90, nil, 91, 99, 100, nil, - 85, 86, 39, 40, 38, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 37, nil, nil, 31, nil, nil, - 53, 54, nil, nil, 55, nil, 33, nil, nil, nil, - 41, nil, nil, nil, nil, nil, nil, nil, 19, nil, - nil, nil, nil, 84, 76, 79, 80, nil, 81, 82, - nil, nil, nil, 77, 83, 277, 69, 70, 66, 9, - 52, 57, nil, 78, 58, 59, nil, nil, nil, 62, - nil, 60, 61, 63, 28, 29, 67, 68, nil, nil, - nil, nil, nil, 27, 26, 25, 93, 92, 94, 95, - nil, nil, 18, nil, nil, nil, nil, nil, 8, 42, - nil, 10, 97, 96, 98, 87, 51, 89, 88, 90, - nil, 91, 99, 100, nil, 85, 86, 39, 40, 38, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 37, - nil, nil, 31, nil, nil, 53, 54, nil, nil, 55, - nil, 33, nil, nil, nil, 41, nil, nil, nil, nil, - nil, nil, nil, 19, nil, nil, nil, nil, 84, 76, - 79, 80, nil, 81, 82, nil, nil, nil, 77, 83, - 277, 69, 70, 66, 9, 52, 57, nil, 78, 58, - 59, nil, nil, nil, 62, nil, 60, 61, 63, 28, - 29, 67, 68, nil, nil, nil, nil, nil, 27, 26, - 25, 93, 92, 94, 95, nil, nil, 18, nil, nil, - nil, nil, nil, 8, 42, nil, 10, 97, 96, 98, - 87, 51, 89, 88, 90, nil, 91, 99, 100, nil, - 85, 86, 39, 40, 38, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 37, nil, nil, 31, nil, nil, - 53, 54, nil, nil, 55, nil, 33, nil, nil, nil, - 41, nil, nil, nil, nil, nil, nil, nil, 19, nil, - nil, nil, nil, 84, 76, 79, 80, nil, 81, 82, - nil, nil, nil, 77, 83, 277, 69, 70, 66, 9, - 52, 57, nil, 78, 58, 59, nil, nil, nil, 62, - nil, 60, 61, 63, 28, 29, 67, 68, nil, nil, - nil, nil, nil, 27, 26, 25, 93, 92, 94, 95, - nil, nil, 18, nil, nil, nil, nil, nil, 8, 42, - nil, 10, 97, 96, 98, 87, 51, 89, 88, 90, - nil, 91, 99, 100, nil, 85, 86, 39, 40, 38, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 37, - nil, nil, 31, nil, nil, 53, 54, nil, nil, 55, - nil, 33, nil, nil, nil, 41, nil, nil, nil, nil, - nil, nil, nil, 19, nil, nil, nil, nil, 84, 76, - 79, 80, nil, 81, 82, nil, nil, nil, 77, 83, - 277, 69, 70, 66, 9, 52, 57, nil, 78, 58, - 59, nil, nil, nil, 62, nil, 60, 61, 63, 28, - 29, 67, 68, nil, nil, nil, nil, nil, 27, 26, - 25, 93, 92, 94, 95, nil, nil, 18, nil, nil, - nil, nil, nil, 8, 42, nil, 10, 97, 96, 98, - 87, 51, 89, 88, 90, nil, 91, 99, 100, nil, - 85, 86, 39, 40, 38, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 37, nil, nil, 31, nil, nil, - 53, 54, nil, nil, 55, nil, 33, nil, nil, nil, - 41, nil, nil, nil, nil, nil, nil, nil, 19, nil, - nil, nil, nil, 84, 76, 79, 80, nil, 81, 82, - nil, nil, nil, 77, 83, 277, 69, 70, 66, 9, - 52, 57, nil, 78, 58, 59, nil, nil, nil, 62, - nil, 60, 61, 63, 28, 29, 67, 68, nil, nil, - nil, nil, nil, 27, 26, 25, 93, 92, 94, 95, - nil, nil, 18, nil, nil, nil, nil, nil, 8, 42, - nil, 10, 97, 96, 98, 87, 51, 89, 88, 90, - nil, 91, 99, 100, nil, 85, 86, 39, 40, 38, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 37, - nil, nil, 31, nil, nil, 53, 54, nil, nil, 55, - nil, 33, nil, nil, nil, 41, nil, nil, nil, nil, - nil, nil, nil, 19, nil, nil, nil, nil, 84, 76, - 79, 80, nil, 81, 82, nil, nil, nil, 77, 83, - 277, 69, 70, 66, 9, 52, 57, nil, 78, 58, - 59, nil, nil, nil, 62, nil, 60, 61, 63, 28, - 29, 67, 68, nil, nil, nil, nil, nil, 27, 26, - 25, 93, 92, 94, 95, nil, nil, 18, nil, nil, - nil, nil, nil, 8, 42, nil, 10, 97, 96, 98, - 87, 51, 89, 88, 90, nil, 91, 99, 100, nil, - 85, 86, 39, 40, 38, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 37, nil, nil, 31, nil, nil, - 53, 54, nil, nil, 55, nil, 33, nil, nil, nil, - 41, nil, nil, nil, nil, nil, nil, nil, 19, nil, - nil, nil, nil, 84, 76, 79, 80, nil, 81, 82, - nil, nil, nil, 77, 83, nil, 69, 70, 66, 9, - 52, 57, nil, 78, 58, 59, nil, nil, nil, 62, - nil, 60, 61, 63, 28, 29, 67, 68, nil, nil, - nil, nil, nil, 27, 26, 25, 93, 92, 94, 95, - nil, nil, 18, nil, nil, nil, nil, nil, 8, 42, - 7, 10, 97, 96, 98, 87, 51, 89, 88, 90, - nil, 91, 99, 100, nil, 85, 86, 39, 40, 38, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 37, - nil, nil, 31, nil, nil, 53, 54, nil, nil, 55, - nil, 33, nil, nil, nil, 41, nil, nil, nil, nil, - nil, nil, nil, 19, nil, nil, nil, nil, 84, 76, - 79, 80, nil, 81, 82, nil, nil, nil, 77, 83, - nil, 69, 70, 66, nil, 52, 57, nil, 78, 58, - 59, nil, nil, nil, 62, nil, 60, 61, 63, 28, - 29, 67, 68, nil, nil, nil, nil, nil, 27, 26, - 25, 93, 92, 94, 95, nil, nil, 220, nil, nil, - nil, nil, nil, nil, 42, nil, nil, 97, 96, 98, - 87, 51, 89, 88, 90, nil, 91, 99, 100, nil, - 85, 86, 39, 40, 38, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 213, nil, nil, 219, nil, nil, - 53, 54, nil, nil, 55, nil, nil, nil, nil, nil, - 41, nil, nil, nil, nil, nil, nil, nil, 218, nil, - nil, nil, nil, 84, 76, 79, 80, nil, 81, 82, - nil, nil, nil, 77, 83, nil, 69, 70, 66, nil, - 52, 57, nil, 78, 58, 59, nil, nil, nil, 62, - nil, 60, 61, 63, 28, 29, 67, 68, nil, nil, - nil, nil, nil, 27, 26, 25, 93, 92, 94, 95, - nil, nil, 220, nil, nil, nil, nil, nil, nil, 42, - nil, nil, 97, 96, 98, 87, 51, 89, 88, 90, - 272, 91, 99, 100, nil, 85, 86, 39, 40, 38, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 213, - nil, nil, 219, nil, nil, 53, 54, nil, nil, 55, - nil, 270, nil, 268, nil, 41, nil, nil, nil, nil, - nil, nil, nil, 218, nil, nil, nil, nil, 84, 76, - 79, 80, nil, 81, 82, nil, nil, nil, 77, 83, - nil, 69, 70, 66, nil, 52, 57, nil, 78, 58, - 59, nil, nil, nil, 62, nil, 60, 61, 63, 28, - 29, 67, 68, nil, nil, nil, nil, nil, 27, 26, - 25, 93, 92, 94, 95, nil, nil, 220, nil, nil, - nil, nil, nil, nil, 42, nil, nil, 97, 96, 98, - 87, 51, 89, 88, 90, 272, 91, 99, 100, nil, - 85, 86, 39, 40, 38, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 213, nil, nil, 219, nil, nil, - 53, 54, nil, nil, 55, nil, 270, nil, 268, nil, - 41, nil, nil, nil, nil, nil, nil, nil, 218, nil, - nil, nil, nil, 84, 76, 79, 80, nil, 81, 82, - nil, nil, nil, 77, 83, nil, 69, 70, 66, nil, - 52, 57, nil, 78, 58, 59, nil, nil, nil, 62, - nil, 60, 61, 63, 28, 29, 67, 68, nil, nil, - nil, nil, nil, 27, 26, 25, 93, 92, 94, 95, - nil, nil, 220, nil, nil, nil, nil, nil, nil, 42, - nil, nil, 97, 96, 98, 87, 51, 89, 88, 90, - 272, 91, 99, 100, nil, 85, 86, 39, 40, 38, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 213, - nil, nil, 219, nil, nil, 53, 54, nil, nil, 55, - nil, 270, nil, 268, nil, 41, nil, nil, nil, nil, - nil, nil, nil, 218, nil, nil, nil, nil, 84, 76, - 79, 80, nil, 81, 82, nil, nil, nil, 77, 83, - nil, 69, 70, 66, nil, 52, 57, nil, 78, 58, - 59, nil, nil, nil, 62, nil, 60, 61, 63, 293, - 294, 67, 68, nil, nil, nil, nil, nil, 289, 290, - 296, 93, 92, 94, 95, nil, nil, 220, nil, nil, - nil, nil, nil, nil, 291, nil, nil, 97, 96, 98, - 87, 51, 89, 88, 90, nil, 91, 99, 100, nil, - 85, 86, nil, 650, 297, 647, 646, 645, 651, 648, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 287, nil, nil, 284, nil, nil, - 53, 54, nil, nil, 55, nil, 283, nil, nil, nil, - 653, nil, nil, nil, nil, nil, nil, nil, nil, 657, - 656, 660, 659, 84, 76, 79, 80, nil, 81, 82, - nil, nil, nil, 77, 83, nil, 69, 70, 66, nil, - 52, 57, nil, 78, 58, 59, nil, nil, nil, 62, - nil, 60, 61, 63, 293, 294, 67, 68, nil, nil, - nil, nil, nil, 289, 290, 296, 93, 92, 94, 95, - nil, nil, 220, nil, nil, nil, nil, 562, nil, 291, - nil, nil, 97, 96, 98, 87, 51, 89, 88, 90, - nil, 91, 99, 100, nil, 85, 86, nil, nil, 297, - 228, 232, 237, 238, 239, 234, 236, 244, 245, 240, - 241, nil, 221, 222, nil, nil, 242, 243, nil, 287, - nil, nil, 219, nil, nil, 53, 54, nil, nil, 55, - nil, nil, 225, nil, 231, nil, 227, 226, 223, 224, - 235, 233, 229, nil, 230, nil, nil, nil, 84, 76, - 79, 80, nil, 81, 82, nil, nil, nil, 77, 83, - nil, 246, nil, 299, nil, nil, 57, nil, 78, 69, - 70, 66, nil, 52, nil, nil, nil, 58, 59, nil, - nil, nil, 62, nil, 60, 61, 63, 293, 294, 67, - 68, nil, nil, nil, nil, nil, 289, 290, 296, 93, - 92, 94, 95, nil, nil, 220, nil, nil, nil, nil, - nil, nil, 42, nil, nil, 97, 96, 98, 87, 51, - 89, 88, 90, nil, 91, 99, 100, nil, 85, 86, - 39, 40, 38, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 213, nil, nil, 219, nil, nil, 53, 54, - nil, nil, 55, nil, nil, nil, nil, nil, 41, nil, - nil, nil, nil, nil, nil, nil, 218, nil, nil, nil, - nil, 84, 76, 79, 80, nil, 81, 82, nil, nil, - nil, 77, 83, nil, 69, 70, 66, nil, 52, 57, - nil, 78, 58, 59, nil, nil, nil, 62, nil, 60, - 61, 63, 293, 294, 67, 68, nil, nil, nil, nil, - nil, 289, 290, 296, 93, 92, 94, 95, nil, nil, - 220, nil, nil, nil, nil, nil, nil, 42, nil, nil, - 97, 96, 98, 87, 51, 89, 88, 90, nil, 91, - 99, 100, nil, 85, 86, 39, 40, 38, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 213, nil, nil, - 219, nil, nil, 53, 54, nil, nil, 55, nil, nil, - nil, nil, nil, 41, nil, nil, nil, nil, nil, nil, - nil, 218, nil, nil, nil, nil, 84, 76, 79, 80, - nil, 81, 82, nil, nil, nil, 77, 83, nil, 69, - 70, 66, nil, 52, 57, nil, 78, 58, 59, nil, - nil, nil, 62, nil, 60, 61, 63, 293, 294, 67, - 68, nil, nil, nil, nil, nil, 289, 290, 296, 93, - 92, 94, 95, nil, nil, 220, nil, nil, nil, nil, - nil, nil, 42, nil, nil, 97, 96, 98, 87, 51, - 89, 88, 90, nil, 91, 99, 100, nil, 85, 86, - 39, 40, 38, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 213, nil, nil, 219, nil, nil, 53, 54, - nil, nil, 55, nil, nil, nil, nil, nil, 41, nil, - nil, nil, nil, nil, nil, nil, 218, nil, nil, nil, - nil, 84, 76, 79, 80, nil, 81, 82, nil, nil, - nil, 77, 83, nil, 69, 70, 66, nil, 52, 57, - nil, 78, 58, 59, nil, nil, nil, 62, nil, 60, - 61, 63, 28, 29, 67, 68, nil, nil, nil, nil, - nil, 27, 26, 25, 93, 92, 94, 95, nil, nil, - 18, nil, nil, nil, nil, nil, nil, 42, nil, nil, - 97, 96, 98, 87, 51, 89, 88, 90, nil, 91, - 99, 100, nil, 85, 86, 39, 40, 38, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 213, nil, nil, - 219, nil, nil, 53, 54, nil, nil, 55, nil, nil, - nil, nil, nil, 41, nil, nil, nil, nil, nil, nil, - nil, 19, nil, nil, nil, nil, 84, 76, 79, 80, - nil, 81, 82, nil, nil, nil, 77, 83, nil, 69, - 70, 66, nil, 52, 57, nil, 78, 58, 59, nil, - nil, nil, 62, nil, 60, 61, 63, 293, 294, 67, - 68, nil, nil, nil, nil, nil, 289, 290, 296, 93, - 92, 94, 95, nil, nil, 220, nil, nil, nil, nil, - nil, nil, 42, nil, nil, 97, 96, 98, 87, 51, - 89, 88, 90, 272, 91, 99, 100, nil, 85, 86, - 39, 40, 38, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 213, nil, nil, 219, nil, nil, 53, 54, - nil, nil, 55, nil, 270, nil, nil, nil, 41, nil, - nil, nil, nil, nil, nil, nil, 218, nil, nil, nil, - nil, 84, 76, 79, 80, nil, 81, 82, nil, nil, - nil, 77, 83, nil, 69, 70, 66, nil, 52, 57, - nil, 78, 58, 59, nil, nil, nil, 62, nil, 60, - 61, 63, 293, 294, 67, 68, nil, nil, nil, nil, - nil, 289, 290, 296, 93, 92, 94, 95, nil, nil, - 220, nil, nil, nil, nil, nil, nil, 42, nil, nil, - 97, 96, 98, 87, 51, 89, 88, 90, 272, 91, - 99, 100, nil, 85, 86, 39, 40, 38, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 213, nil, nil, - 219, nil, nil, 53, 54, nil, nil, 55, nil, nil, - nil, nil, nil, 41, nil, nil, nil, nil, nil, nil, - nil, 218, nil, nil, nil, nil, 84, 76, 79, 80, - nil, 81, 82, nil, nil, nil, 77, 83, nil, 69, - 70, 66, nil, 52, 57, nil, 78, 58, 59, nil, - nil, nil, 62, nil, 60, 61, 63, 28, 29, 67, - 68, nil, nil, nil, nil, nil, 27, 26, 25, 93, - 92, 94, 95, nil, nil, 18, nil, nil, nil, nil, - nil, nil, 42, nil, nil, 97, 96, 98, 87, 51, - 89, 88, 90, nil, 91, 99, 100, nil, 85, 86, - 39, 40, 38, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 213, nil, nil, 219, nil, nil, 53, 54, - nil, nil, 55, nil, nil, nil, nil, nil, 41, nil, - nil, nil, nil, nil, nil, nil, 19, nil, nil, nil, - nil, 84, 76, 79, 80, nil, 81, 82, nil, nil, - nil, 77, 83, nil, 69, 70, 66, nil, 52, 57, - nil, 78, 58, 59, nil, nil, nil, 62, nil, 60, - 61, 63, 28, 29, 67, 68, nil, nil, nil, nil, - nil, 27, 26, 25, 93, 92, 94, 95, nil, nil, - 18, nil, nil, nil, nil, nil, nil, 42, nil, nil, - 97, 96, 98, 87, 51, 89, 88, 90, nil, 91, - 99, 100, nil, 85, 86, 39, 40, 38, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 213, nil, nil, - 219, nil, nil, 53, 54, nil, nil, 55, nil, nil, - nil, nil, nil, 41, nil, nil, nil, nil, nil, nil, - nil, 19, nil, nil, nil, nil, 84, 76, 79, 80, - nil, 81, 82, nil, nil, nil, 77, 83, nil, 69, - 70, 66, nil, 52, 57, nil, 78, 58, 59, nil, - nil, nil, 62, nil, 60, 61, 63, 28, 29, 67, - 68, nil, nil, nil, nil, nil, 27, 26, 25, 93, - 92, 94, 95, nil, nil, 18, nil, nil, nil, nil, - nil, nil, 42, nil, nil, 97, 96, 98, 87, 51, - 89, 88, 90, nil, 91, 99, 100, nil, 85, 86, - 39, 40, 38, 228, 232, 237, 238, 239, 234, 236, - 244, 245, 240, 241, nil, 221, 222, nil, nil, 242, - 243, nil, 213, nil, -233, 219, nil, nil, 53, 54, - nil, nil, 55, nil, nil, 225, nil, 231, 41, 227, - 226, 223, 224, 235, 233, 229, 19, 230, nil, nil, - nil, 84, 76, 79, 80, nil, 81, 82, nil, nil, - nil, 77, 83, 105, 246, nil, -233, nil, 104, 57, - nil, 78, 69, 70, 66, nil, 52, nil, nil, nil, - 58, 59, nil, nil, nil, 62, nil, 60, 61, 63, - 293, 294, 67, 68, nil, nil, nil, nil, nil, 289, - 290, 296, 93, 92, 94, 95, nil, nil, 220, nil, - nil, nil, nil, nil, nil, 291, nil, nil, 97, 96, - 98, 87, 51, 89, 88, 90, nil, 91, 99, 100, - nil, 85, 86, nil, 650, 297, 647, 646, 645, 651, - 648, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 331, nil, nil, 31, nil, - nil, 53, 54, nil, nil, 55, nil, 33, nil, nil, - nil, 653, nil, nil, nil, nil, nil, nil, nil, nil, - 657, 656, 660, 659, 84, 76, 79, 80, nil, 81, - 82, nil, nil, nil, 77, 83, nil, 69, 70, 66, - nil, 52, 57, nil, 78, 58, 59, nil, nil, nil, - 62, nil, 60, 61, 63, 293, 294, 67, 68, nil, - nil, nil, nil, nil, 289, 290, 296, 93, 92, 94, - 95, nil, nil, 220, nil, nil, nil, nil, nil, nil, - 291, nil, nil, 97, 96, 98, 336, 51, 89, 88, - 337, nil, 91, 99, 100, nil, 85, 86, nil, 650, - 297, 647, 646, 645, 651, 648, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 343, nil, nil, - 338, nil, nil, 219, nil, nil, 53, 54, nil, nil, - 55, nil, nil, nil, nil, nil, 653, nil, nil, nil, - nil, nil, nil, nil, nil, 657, 656, 660, 659, 84, - 76, 79, 80, nil, 81, 82, nil, nil, nil, 77, - 83, nil, 69, 70, 66, nil, 52, 57, nil, 78, - 58, 59, nil, nil, nil, 62, nil, 60, 61, 63, - 293, 294, 67, 68, nil, nil, nil, nil, nil, 289, - 290, 296, 93, 92, 94, 95, nil, nil, 220, nil, - nil, nil, nil, nil, nil, 291, nil, nil, 97, 96, - 98, 336, 51, 89, 88, 337, nil, 91, 99, 100, - nil, 85, 86, nil, 732, 297, 647, 646, 645, 651, - 648, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 338, nil, nil, 219, nil, - nil, 53, 54, nil, nil, 55, nil, nil, nil, nil, - nil, 653, nil, nil, nil, nil, nil, nil, nil, nil, - 657, 656, 660, 659, 84, 76, 79, 80, nil, 81, - 82, nil, nil, nil, 77, 83, nil, 69, 70, 66, - 9, 52, 57, nil, 78, 58, 59, nil, nil, nil, - 62, nil, 60, 61, 63, 28, 29, 67, 68, nil, - nil, nil, nil, nil, 27, 26, 25, 93, 92, 94, - 95, nil, nil, 18, nil, nil, nil, nil, nil, 8, - 42, 7, 10, 97, 96, 98, 87, 51, 89, 88, - 90, nil, 91, 99, 100, nil, 85, 86, 39, 40, - 38, 228, 232, 237, 238, 239, 234, 236, 244, 245, - 240, 241, nil, 221, 222, nil, nil, 242, 243, nil, - 37, nil, nil, 31, nil, nil, 53, 54, nil, nil, - 55, nil, 33, 225, nil, 231, 41, 227, 226, 223, - 224, 235, 233, 229, 19, 230, nil, nil, nil, 84, - 76, 79, 80, nil, 81, 82, nil, nil, nil, 77, - 83, nil, 246, nil, nil, nil, 368, 57, nil, 78, - 69, 70, 66, nil, 52, nil, nil, nil, 58, 59, - nil, nil, nil, 62, nil, 60, 61, 63, 28, 29, - 67, 68, nil, nil, nil, nil, nil, 27, 26, 25, - 93, 92, 94, 95, nil, nil, 18, nil, nil, nil, - nil, nil, nil, 42, nil, nil, 97, 96, 98, 87, - 51, 89, 88, 90, nil, 91, 99, 100, nil, 85, - 86, 39, 40, 38, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 213, nil, nil, 219, nil, nil, 53, - 54, nil, nil, 55, nil, nil, nil, nil, nil, 41, - nil, nil, nil, nil, nil, nil, nil, 19, nil, nil, - nil, nil, 84, 76, 79, 80, nil, 81, 82, nil, - nil, nil, 77, 83, nil, 69, 70, 66, nil, 52, - 57, nil, 78, 58, 59, nil, nil, nil, 62, nil, - 60, 61, 63, 28, 29, 67, 68, nil, nil, nil, - nil, nil, 27, 26, 25, 93, 92, 94, 95, nil, - nil, 18, nil, nil, nil, nil, nil, nil, 42, nil, - nil, 97, 96, 98, 87, 51, 89, 88, 90, nil, - 91, 99, 100, nil, 85, 86, 39, 40, 38, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 213, nil, - nil, 219, nil, nil, 53, 54, nil, nil, 55, nil, - nil, nil, nil, nil, 41, nil, nil, nil, nil, nil, - nil, nil, 19, nil, nil, nil, nil, 84, 76, 79, - 80, nil, 81, 82, nil, nil, nil, 77, 83, nil, - 69, 70, 66, nil, 52, 57, nil, 78, 58, 59, - nil, nil, nil, 62, nil, 60, 61, 63, 28, 29, - 67, 68, nil, nil, nil, nil, nil, 27, 26, 25, - 93, 92, 94, 95, nil, nil, 18, nil, nil, nil, - nil, nil, nil, 42, nil, nil, 97, 96, 98, 87, - 51, 89, 88, 90, nil, 91, 99, 100, nil, 85, - 86, 39, 40, 38, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 213, nil, nil, 219, nil, nil, 53, - 54, nil, nil, 55, nil, nil, nil, nil, nil, 41, - nil, nil, nil, nil, nil, nil, nil, 19, nil, nil, - nil, nil, 84, 76, 79, 80, nil, 81, 82, nil, - nil, nil, 77, 83, nil, 69, 70, 66, nil, 52, - 57, nil, 78, 58, 59, nil, nil, nil, 62, nil, - 60, 61, 63, 28, 29, 67, 68, nil, nil, nil, - nil, nil, 27, 26, 25, 93, 92, 94, 95, nil, - nil, 18, nil, nil, nil, nil, nil, nil, 42, nil, - nil, 97, 96, 98, 87, 51, 89, 88, 90, nil, - 91, 99, 100, nil, 85, 86, 39, 40, 38, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 213, nil, - nil, 219, nil, nil, 53, 54, nil, nil, 55, nil, - nil, nil, nil, nil, 41, nil, nil, nil, nil, nil, - nil, nil, 19, nil, nil, nil, nil, 84, 76, 79, - 80, nil, 81, 82, nil, nil, nil, 77, 83, nil, - 69, 70, 66, 9, 52, 57, nil, 78, 58, 59, - nil, nil, nil, 62, nil, 60, 61, 63, 28, 29, - 67, 68, nil, nil, nil, nil, nil, 27, 26, 25, - 93, 92, 94, 95, nil, nil, 18, nil, nil, nil, - nil, nil, 8, 42, nil, 10, 97, 96, 98, 87, - 51, 89, 88, 90, nil, 91, 99, 100, nil, 85, - 86, 39, 40, 38, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 37, nil, nil, 31, nil, nil, 53, - 54, nil, nil, 55, nil, 33, nil, nil, nil, 41, - nil, nil, nil, nil, nil, nil, nil, 19, nil, nil, - nil, nil, 84, 76, 79, 80, nil, 81, 82, nil, - nil, nil, 77, 83, nil, 69, 70, 66, nil, 52, - 57, nil, 78, 58, 59, nil, nil, nil, 62, nil, - 60, 61, 63, 28, 29, 67, 68, nil, nil, nil, - nil, nil, 27, 26, 25, 93, 92, 94, 95, nil, - nil, 220, nil, nil, nil, nil, nil, nil, 42, nil, - nil, 97, 96, 98, 87, 51, 89, 88, 90, nil, - 91, 99, 100, nil, 85, 86, 39, 40, 38, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 213, nil, - nil, 219, nil, nil, 53, 54, nil, nil, 55, nil, - 385, nil, nil, nil, 41, nil, nil, nil, nil, nil, - nil, nil, 218, nil, nil, nil, nil, 84, 76, 79, - 80, nil, 81, 82, nil, nil, nil, 77, 83, nil, - 69, 70, 66, nil, 52, 57, nil, 78, 58, 59, - nil, nil, nil, 62, nil, 60, 61, 63, 28, 29, - 67, 68, nil, nil, nil, nil, nil, 27, 26, 25, - 93, 92, 94, 95, nil, nil, 220, nil, nil, nil, - nil, nil, nil, 42, nil, nil, 97, 96, 98, 87, - 51, 89, 88, 90, nil, 91, 99, 100, nil, 85, - 86, 39, 40, 38, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 213, nil, nil, 219, nil, nil, 53, - 54, nil, nil, 55, nil, 385, nil, nil, nil, 41, - nil, nil, nil, nil, nil, nil, nil, 218, nil, nil, - nil, nil, 84, 76, 79, 80, nil, 81, 82, nil, - nil, nil, 77, 83, nil, 69, 70, 66, nil, 52, - 57, nil, 78, 58, 59, nil, nil, nil, 62, nil, - 60, 61, 63, 28, 29, 67, 68, nil, nil, nil, - nil, nil, 27, 26, 25, 93, 92, 94, 95, nil, - nil, 220, nil, nil, nil, nil, nil, nil, 42, nil, - nil, 97, 96, 98, 87, 51, 89, 88, 90, nil, - 91, 99, 100, nil, 85, 86, 39, 40, 38, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 213, nil, - nil, 219, nil, nil, 53, 54, nil, nil, 55, nil, - nil, nil, nil, nil, 41, nil, nil, nil, nil, nil, - nil, nil, 218, nil, nil, nil, nil, 84, 76, 79, - 80, nil, 81, 82, nil, nil, nil, 77, 83, nil, - 69, 70, 66, nil, 52, 57, nil, 78, 58, 59, - nil, nil, nil, 62, nil, 60, 61, 63, 28, 29, - 67, 68, nil, nil, nil, nil, nil, 27, 26, 25, - 93, 92, 94, 95, nil, nil, 220, nil, nil, nil, - nil, nil, nil, 42, nil, nil, 97, 96, 98, 87, - 51, 89, 88, 90, 272, 91, 99, 100, nil, 85, - 86, 39, 40, 38, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 213, nil, nil, 219, nil, nil, 53, - 54, nil, nil, 55, nil, 270, nil, 268, nil, 41, - nil, nil, nil, nil, nil, nil, nil, 218, nil, nil, - nil, nil, 84, 76, 79, 80, nil, 81, 82, nil, - nil, nil, 77, 83, nil, 69, 70, 66, nil, 52, - 57, nil, 78, 58, 59, nil, nil, nil, 62, nil, - 60, 61, 63, 28, 29, 67, 68, nil, nil, nil, - nil, nil, 27, 26, 25, 93, 92, 94, 95, nil, - nil, 220, nil, nil, nil, nil, nil, nil, 42, nil, - nil, 97, 96, 98, 87, 51, 89, 88, 90, nil, - 91, 99, 100, nil, 85, 86, 39, 40, 38, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 213, nil, - nil, 219, nil, nil, 53, 54, nil, nil, 55, nil, - nil, nil, nil, nil, 41, nil, nil, nil, nil, nil, - nil, nil, 218, nil, nil, nil, nil, 84, 76, 79, - 80, nil, 81, 82, nil, nil, nil, 77, 83, nil, - 69, 70, 66, nil, 52, 57, nil, 78, 58, 59, - nil, nil, nil, 62, nil, 60, 61, 63, 28, 29, - 67, 68, nil, nil, nil, nil, nil, 27, 26, 25, - 93, 92, 94, 95, nil, nil, 18, nil, nil, nil, - nil, nil, nil, 42, nil, nil, 97, 96, 98, 87, - 51, 89, 88, 90, nil, 91, 99, 100, nil, 85, - 86, 39, 40, 38, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 213, nil, nil, 219, nil, nil, 53, - 54, nil, nil, 55, nil, nil, nil, nil, nil, 41, - nil, nil, nil, nil, nil, nil, nil, 19, nil, nil, - nil, nil, 84, 76, 79, 80, nil, 81, 82, nil, - nil, nil, 77, 83, nil, 69, 70, 66, nil, 52, - 57, nil, 78, 58, 59, nil, nil, nil, 62, nil, - 60, 61, 63, 28, 29, 67, 68, nil, nil, nil, - nil, nil, 27, 26, 25, 93, 92, 94, 95, nil, - nil, 18, nil, nil, nil, nil, nil, nil, 42, nil, - nil, 97, 96, 98, 87, 51, 89, 88, 90, nil, - 91, 99, 100, nil, 85, 86, 39, 40, 38, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 213, nil, - nil, 219, nil, nil, 53, 54, nil, nil, 55, nil, - nil, nil, nil, nil, 41, nil, nil, nil, nil, nil, - nil, nil, 19, nil, nil, nil, nil, 84, 76, 79, - 80, nil, 81, 82, nil, nil, nil, 77, 83, nil, - 69, 70, 66, nil, 52, 57, nil, 78, 58, 59, - nil, nil, nil, 62, nil, 60, 61, 63, 28, 29, - 67, 68, nil, nil, nil, nil, nil, 27, 26, 25, - 93, 92, 94, 95, nil, nil, 18, nil, nil, nil, - nil, nil, nil, 42, nil, nil, 97, 96, 98, 87, - 51, 89, 88, 90, nil, 91, 99, 100, nil, 85, - 86, 39, 40, 38, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 213, nil, nil, 219, nil, nil, 53, - 54, nil, nil, 55, nil, nil, nil, nil, nil, 41, - nil, nil, nil, nil, nil, nil, nil, 19, nil, nil, - nil, nil, 84, 76, 79, 80, nil, 81, 82, nil, - nil, nil, 77, 83, nil, 69, 70, 66, nil, 52, - 57, nil, 78, 58, 59, nil, nil, nil, 62, nil, - 60, 61, 63, 28, 29, 67, 68, nil, nil, nil, - nil, nil, 27, 26, 25, 93, 92, 94, 95, nil, - nil, 18, nil, nil, nil, nil, nil, nil, 42, nil, - nil, 97, 96, 98, 87, 51, 89, 88, 90, nil, - 91, 99, 100, nil, 85, 86, 39, 40, 38, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 213, nil, - nil, 219, nil, nil, 53, 54, nil, nil, 55, nil, - nil, nil, nil, nil, 41, nil, nil, nil, nil, nil, - nil, nil, 19, nil, nil, nil, nil, 84, 76, 79, - 80, nil, 81, 82, nil, nil, nil, 77, 83, 209, - 69, 70, 66, nil, 52, 57, nil, 78, 58, 59, - nil, nil, nil, 62, nil, 60, 61, 63, 293, 294, - 67, 68, nil, nil, nil, nil, nil, 289, 290, 296, - 93, 92, 94, 95, nil, nil, 220, nil, nil, nil, - nil, nil, nil, 42, nil, nil, 97, 96, 98, 87, - 51, 89, 88, 90, nil, 91, 99, 100, nil, 85, - 86, 39, 40, 38, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 213, nil, nil, 219, nil, nil, 53, - 54, nil, nil, 55, nil, nil, nil, nil, nil, 41, - nil, nil, nil, nil, nil, nil, nil, 218, nil, nil, - nil, nil, 84, 76, 79, 80, nil, 81, 82, nil, - nil, nil, 77, 83, nil, 69, 70, 66, nil, 52, - 57, nil, 78, 58, 59, nil, nil, nil, 62, nil, - 60, 61, 63, 293, 294, 67, 68, nil, nil, nil, - nil, nil, 289, 290, 296, 93, 92, 94, 95, nil, - nil, 220, nil, nil, nil, nil, nil, nil, 42, nil, - nil, 97, 96, 98, 87, 51, 89, 88, 90, nil, - 91, 99, 100, nil, 85, 86, 39, 40, 38, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 213, nil, - nil, 219, nil, nil, 53, 54, nil, nil, 55, nil, - nil, nil, nil, nil, 41, nil, nil, nil, nil, nil, - nil, nil, 218, nil, nil, nil, nil, 84, 76, 79, - 80, nil, 81, 82, nil, nil, nil, 77, 83, nil, - 69, 70, 66, nil, 52, 57, nil, 78, 58, 59, - nil, nil, nil, 62, nil, 60, 61, 63, 293, 294, - 67, 68, nil, nil, nil, nil, nil, 289, 290, 296, - 93, 92, 94, 95, nil, nil, 220, nil, nil, nil, - nil, nil, nil, 42, nil, nil, 97, 96, 98, 87, - 51, 89, 88, 90, nil, 91, 99, 100, nil, 85, - 86, 39, 40, 38, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 213, nil, nil, 219, nil, nil, 53, - 54, nil, nil, 55, nil, nil, nil, nil, nil, 41, - nil, nil, nil, nil, nil, nil, nil, 218, nil, nil, - nil, nil, 84, 76, 79, 80, nil, 81, 82, nil, - nil, nil, 77, 83, nil, 69, 70, 66, nil, 52, - 57, nil, 78, 58, 59, nil, nil, nil, 62, nil, - 60, 61, 63, 293, 294, 67, 68, nil, nil, nil, - nil, nil, 289, 290, 296, 93, 92, 94, 95, nil, - nil, 220, nil, nil, nil, nil, nil, nil, 42, nil, - nil, 97, 96, 98, 87, 51, 89, 88, 90, nil, - 91, 99, 100, nil, 85, 86, 39, 40, 38, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 213, nil, - nil, 219, nil, nil, 53, 54, nil, nil, 55, nil, - nil, nil, nil, nil, 41, nil, nil, nil, nil, nil, - nil, nil, 218, nil, nil, nil, nil, 84, 76, 79, - 80, nil, 81, 82, nil, nil, nil, 77, 83, nil, - 69, 70, 66, nil, 52, 57, nil, 78, 58, 59, - nil, nil, nil, 62, nil, 60, 61, 63, 293, 294, - 67, 68, nil, nil, nil, nil, nil, 289, 290, 296, - 93, 92, 94, 95, nil, nil, 220, nil, nil, nil, - nil, nil, nil, 42, nil, nil, 97, 96, 98, 87, - 51, 89, 88, 90, nil, 91, 99, 100, nil, 85, - 86, 39, 40, 38, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 213, nil, nil, 219, nil, nil, 53, - 54, nil, nil, 55, nil, nil, nil, nil, nil, 41, - nil, nil, nil, nil, nil, nil, nil, 218, nil, nil, - nil, nil, 84, 76, 79, 80, nil, 81, 82, nil, - nil, nil, 77, 83, nil, 69, 70, 66, nil, 52, - 57, nil, 78, 58, 59, nil, nil, nil, 62, nil, - 60, 61, 63, 293, 294, 67, 68, nil, nil, nil, - nil, nil, 289, 290, 296, 93, 92, 94, 95, nil, - nil, 220, nil, nil, nil, nil, nil, nil, 42, nil, - nil, 97, 96, 98, 87, 51, 89, 88, 90, nil, - 91, 99, 100, nil, 85, 86, 39, 40, 38, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 213, nil, - nil, 219, nil, nil, 53, 54, nil, nil, 55, nil, - nil, nil, nil, nil, 41, nil, nil, nil, nil, nil, - nil, nil, 218, nil, nil, nil, nil, 84, 76, 79, - 80, nil, 81, 82, nil, nil, nil, 77, 83, nil, - 69, 70, 66, nil, 52, 57, nil, 78, 58, 59, - nil, nil, nil, 62, nil, 60, 61, 63, 293, 294, - 67, 68, nil, nil, nil, nil, nil, 289, 290, 296, - 93, 92, 94, 95, nil, nil, 220, nil, nil, nil, - nil, nil, nil, 42, nil, nil, 97, 96, 98, 87, - 51, 89, 88, 90, nil, 91, 99, 100, nil, 85, - 86, 39, 40, 38, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 213, nil, nil, 219, nil, nil, 53, - 54, nil, nil, 55, nil, nil, nil, nil, nil, 41, - nil, nil, nil, nil, nil, nil, nil, 218, nil, nil, - nil, nil, 84, 76, 79, 80, nil, 81, 82, nil, - nil, nil, 77, 83, nil, 69, 70, 66, nil, 52, - 57, nil, 78, 58, 59, nil, nil, nil, 62, nil, - 60, 61, 63, 293, 294, 67, 68, nil, nil, nil, - nil, nil, 289, 290, 296, 93, 92, 94, 95, nil, - nil, 220, nil, nil, nil, nil, nil, nil, 42, nil, - nil, 97, 96, 98, 87, 51, 89, 88, 90, nil, - 91, 99, 100, nil, 85, 86, 39, 40, 38, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 213, nil, - nil, 219, nil, nil, 53, 54, nil, nil, 55, nil, - nil, nil, nil, nil, 41, nil, nil, nil, nil, nil, - nil, nil, 218, nil, nil, nil, nil, 84, 76, 79, - 80, nil, 81, 82, nil, nil, nil, 77, 83, nil, - 69, 70, 66, nil, 52, 57, nil, 78, 58, 59, - nil, nil, nil, 62, nil, 60, 61, 63, 293, 294, - 67, 68, nil, nil, nil, nil, nil, 289, 290, 296, - 93, 92, 94, 95, nil, nil, 220, nil, nil, nil, - nil, nil, nil, 42, nil, nil, 97, 96, 98, 87, - 51, 89, 88, 90, nil, 91, 99, 100, nil, 85, - 86, 39, 40, 38, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 213, nil, nil, 219, nil, nil, 53, - 54, nil, nil, 55, nil, nil, nil, nil, nil, 41, - nil, nil, nil, nil, nil, nil, nil, 218, nil, nil, - nil, nil, 84, 76, 79, 80, nil, 81, 82, nil, - nil, nil, 77, 83, nil, 69, 70, 66, nil, 52, - 57, nil, 78, 58, 59, nil, nil, nil, 62, nil, - 60, 61, 63, 293, 294, 67, 68, nil, nil, nil, - nil, nil, 289, 290, 296, 93, 92, 94, 95, nil, - nil, 220, nil, nil, nil, nil, nil, nil, 42, nil, - nil, 97, 96, 98, 87, 51, 89, 88, 90, nil, - 91, 99, 100, nil, 85, 86, 39, 40, 38, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 213, nil, - nil, 219, nil, nil, 53, 54, nil, nil, 55, nil, - nil, nil, nil, nil, 41, nil, nil, nil, nil, nil, - nil, nil, 218, nil, nil, nil, nil, 84, 76, 79, - 80, nil, 81, 82, nil, nil, nil, 77, 83, nil, - 69, 70, 66, nil, 52, 57, nil, 78, 58, 59, - nil, nil, nil, 62, nil, 60, 61, 63, 293, 294, - 67, 68, nil, nil, nil, nil, nil, 289, 290, 296, - 93, 92, 94, 95, nil, nil, 220, nil, nil, nil, - nil, nil, nil, 42, nil, nil, 97, 96, 98, 87, - 51, 89, 88, 90, nil, 91, 99, 100, nil, 85, - 86, 39, 40, 38, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 213, nil, nil, 219, nil, nil, 53, - 54, nil, nil, 55, nil, nil, nil, nil, nil, 41, - nil, nil, nil, nil, nil, nil, nil, 218, nil, nil, - nil, nil, 84, 76, 79, 80, nil, 81, 82, nil, - nil, nil, 77, 83, nil, 69, 70, 66, nil, 52, - 57, nil, 78, 58, 59, nil, nil, nil, 62, nil, - 60, 61, 63, 293, 294, 67, 68, nil, nil, nil, - nil, nil, 289, 290, 296, 93, 92, 94, 95, nil, - nil, 220, nil, nil, nil, nil, nil, nil, 42, nil, - nil, 97, 96, 98, 87, 51, 89, 88, 90, nil, - 91, 99, 100, nil, 85, 86, 39, 40, 38, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 213, nil, - nil, 219, nil, nil, 53, 54, nil, nil, 55, nil, - nil, nil, nil, nil, 41, nil, nil, nil, nil, nil, - nil, nil, 218, nil, nil, nil, nil, 84, 76, 79, - 80, nil, 81, 82, nil, nil, nil, 77, 83, nil, - 69, 70, 66, nil, 52, 57, nil, 78, 58, 59, - nil, nil, nil, 62, nil, 60, 61, 63, 293, 294, - 67, 68, nil, nil, nil, nil, nil, 289, 290, 296, - 93, 92, 94, 95, nil, nil, 220, nil, nil, nil, - nil, nil, nil, 42, nil, nil, 97, 96, 98, 87, - 51, 89, 88, 90, nil, 91, 99, 100, nil, 85, - 86, 39, 40, 38, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 213, nil, nil, 219, nil, nil, 53, - 54, nil, nil, 55, nil, nil, nil, nil, nil, 41, - nil, nil, nil, nil, nil, nil, nil, 218, nil, nil, - nil, nil, 84, 76, 79, 80, nil, 81, 82, nil, - nil, nil, 77, 83, nil, 69, 70, 66, nil, 52, - 57, nil, 78, 58, 59, nil, nil, nil, 62, nil, - 60, 61, 63, 293, 294, 67, 68, nil, nil, nil, - nil, nil, 289, 290, 296, 93, 92, 94, 95, nil, - nil, 220, nil, nil, nil, nil, nil, nil, 42, nil, - nil, 97, 96, 98, 87, 51, 89, 88, 90, nil, - 91, 99, 100, nil, 85, 86, 39, 40, 38, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 213, nil, - nil, 219, nil, nil, 53, 54, nil, nil, 55, nil, - nil, nil, nil, nil, 41, nil, nil, nil, nil, nil, - nil, nil, 218, nil, nil, nil, nil, 84, 76, 79, - 80, nil, 81, 82, nil, nil, nil, 77, 83, nil, - 69, 70, 66, nil, 52, 57, nil, 78, 58, 59, - nil, nil, nil, 62, nil, 60, 61, 63, 293, 294, - 67, 68, nil, nil, nil, nil, nil, 289, 290, 296, - 93, 92, 94, 95, nil, nil, 220, nil, nil, nil, - nil, nil, nil, 42, nil, nil, 97, 96, 98, 87, - 51, 89, 88, 90, nil, 91, 99, 100, nil, 85, - 86, 39, 40, 38, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 213, nil, nil, 219, nil, nil, 53, - 54, nil, nil, 55, nil, nil, nil, nil, nil, 41, - nil, nil, nil, nil, nil, nil, nil, 218, nil, nil, - nil, nil, 84, 76, 79, 80, nil, 81, 82, nil, - nil, nil, 77, 83, nil, 69, 70, 66, nil, 52, - 57, nil, 78, 58, 59, nil, nil, nil, 62, nil, - 60, 61, 63, 293, 294, 67, 68, nil, nil, nil, - nil, nil, 289, 290, 296, 93, 92, 94, 95, nil, - nil, 220, nil, nil, nil, nil, nil, nil, 42, nil, - nil, 97, 96, 98, 87, 51, 89, 88, 90, nil, - 91, 99, 100, nil, 85, 86, 39, 40, 38, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 213, nil, - nil, 219, nil, nil, 53, 54, nil, nil, 55, nil, - nil, nil, nil, nil, 41, nil, nil, nil, nil, nil, - nil, nil, 218, nil, nil, nil, nil, 84, 76, 79, - 80, nil, 81, 82, nil, nil, nil, 77, 83, nil, - 69, 70, 66, nil, 52, 57, nil, 78, 58, 59, - nil, nil, nil, 62, nil, 60, 61, 63, 293, 294, - 67, 68, nil, nil, nil, nil, nil, 289, 290, 296, - 93, 92, 94, 95, nil, nil, 220, nil, nil, nil, - nil, nil, nil, 42, nil, nil, 97, 96, 98, 87, - 51, 89, 88, 90, nil, 91, 99, 100, nil, 85, - 86, 39, 40, 38, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 213, nil, nil, 219, nil, nil, 53, - 54, nil, nil, 55, nil, nil, nil, nil, nil, 41, - nil, nil, nil, nil, nil, nil, nil, 218, nil, nil, - nil, nil, 84, 76, 79, 80, nil, 81, 82, nil, - nil, nil, 77, 83, nil, 69, 70, 66, nil, 52, - 57, nil, 78, 58, 59, nil, nil, nil, 62, nil, - 60, 61, 63, 293, 294, 67, 68, nil, nil, nil, - nil, nil, 289, 290, 296, 93, 92, 94, 95, nil, - nil, 220, nil, nil, nil, nil, nil, nil, 42, nil, - nil, 97, 96, 98, 87, 51, 89, 88, 90, nil, - 91, 99, 100, nil, 85, 86, 39, 40, 38, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 213, nil, - nil, 219, nil, nil, 53, 54, nil, nil, 55, nil, - nil, nil, nil, nil, 41, nil, nil, nil, nil, nil, - nil, nil, 218, nil, nil, nil, nil, 84, 76, 79, - 80, nil, 81, 82, nil, nil, nil, 77, 83, nil, - 69, 70, 66, nil, 52, 57, nil, 78, 58, 59, - nil, nil, nil, 62, nil, 60, 61, 63, 293, 294, - 67, 68, nil, nil, nil, nil, nil, 289, 290, 296, - 93, 92, 94, 95, nil, nil, 220, nil, nil, nil, - nil, nil, nil, 42, nil, nil, 97, 96, 98, 87, - 51, 89, 88, 90, nil, 91, 99, 100, nil, 85, - 86, 39, 40, 38, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 213, nil, nil, 219, nil, nil, 53, - 54, nil, nil, 55, nil, nil, nil, nil, nil, 41, - nil, nil, nil, nil, nil, nil, nil, 218, nil, nil, - nil, nil, 84, 76, 79, 80, nil, 81, 82, nil, - nil, nil, 77, 83, nil, 69, 70, 66, nil, 52, - 57, nil, 78, 58, 59, nil, nil, nil, 62, nil, - 60, 61, 63, 293, 294, 67, 68, nil, nil, nil, - nil, nil, 289, 290, 296, 93, 92, 94, 95, nil, - nil, 220, nil, nil, nil, nil, nil, nil, 42, nil, - nil, 97, 96, 98, 87, 51, 89, 88, 90, nil, - 91, 99, 100, nil, 85, 86, 39, 40, 38, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 213, nil, - nil, 219, nil, nil, 53, 54, nil, nil, 55, nil, - nil, nil, nil, nil, 41, nil, nil, nil, nil, nil, - nil, nil, 218, nil, nil, nil, nil, 84, 76, 79, - 80, nil, 81, 82, nil, nil, nil, 77, 83, nil, - 69, 70, 66, nil, 52, 57, nil, 78, 58, 59, - nil, nil, nil, 62, nil, 60, 61, 63, 293, 294, - 67, 68, nil, nil, nil, nil, nil, 289, 290, 296, - 93, 92, 94, 95, nil, nil, 220, nil, nil, nil, - nil, nil, nil, 42, nil, nil, 97, 96, 98, 87, - 51, 89, 88, 90, nil, 91, 99, 100, nil, 85, - 86, 39, 40, 38, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 213, nil, nil, 219, nil, nil, 53, - 54, nil, nil, 55, nil, nil, nil, nil, nil, 41, - nil, nil, nil, nil, nil, nil, nil, 218, nil, nil, - nil, nil, 84, 76, 79, 80, nil, 81, 82, nil, - nil, nil, 77, 83, nil, 69, 70, 66, nil, 52, - 57, nil, 78, 58, 59, nil, nil, nil, 62, nil, - 60, 61, 63, 293, 294, 67, 68, nil, nil, nil, - nil, nil, 289, 290, 296, 93, 92, 94, 95, nil, - nil, 220, nil, nil, nil, nil, nil, nil, 42, nil, - nil, 97, 96, 98, 87, 51, 89, 88, 90, nil, - 91, 99, 100, nil, 85, 86, 39, 40, 38, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 213, nil, - nil, 219, nil, nil, 53, 54, nil, nil, 55, nil, - nil, nil, nil, nil, 41, nil, nil, nil, nil, nil, - nil, nil, 218, nil, nil, nil, nil, 84, 76, 79, - 80, nil, 81, 82, nil, nil, nil, 77, 83, nil, - 69, 70, 66, nil, 52, 57, nil, 78, 58, 59, - nil, nil, nil, 62, nil, 60, 61, 63, 293, 294, - 67, 68, nil, nil, nil, nil, nil, 289, 290, 296, - 93, 92, 94, 95, nil, nil, 220, nil, nil, nil, - nil, nil, nil, 42, nil, nil, 97, 96, 98, 87, - 51, 89, 88, 90, nil, 91, 99, 100, nil, 85, - 86, 39, 40, 38, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 213, nil, nil, 219, nil, nil, 53, - 54, nil, nil, 55, nil, nil, nil, nil, nil, 41, - nil, nil, nil, nil, nil, nil, nil, 218, nil, nil, - nil, nil, 84, 76, 79, 80, nil, 81, 82, nil, - nil, nil, 77, 83, nil, 69, 70, 66, nil, 52, - 57, nil, 78, 58, 59, nil, nil, nil, 62, nil, - 60, 61, 63, 293, 294, 67, 68, nil, nil, nil, - nil, nil, 289, 290, 296, 93, 92, 94, 95, nil, - nil, 220, nil, nil, nil, nil, nil, nil, 42, nil, - nil, 97, 96, 98, 87, 51, 89, 88, 90, nil, - 91, 99, 100, nil, 85, 86, 39, 40, 38, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 213, nil, - nil, 219, nil, nil, 53, 54, nil, nil, 55, nil, - nil, nil, nil, nil, 41, nil, nil, nil, nil, nil, - nil, nil, 218, nil, nil, nil, nil, 84, 76, 79, - 80, nil, 81, 82, nil, nil, nil, 77, 83, nil, - 69, 70, 66, nil, 52, 57, nil, 78, 58, 59, - nil, nil, nil, 62, nil, 60, 61, 63, 293, 294, - 67, 68, nil, nil, nil, nil, nil, 289, 290, 296, - 93, 92, 94, 95, nil, nil, 220, nil, nil, nil, - nil, nil, nil, 42, nil, nil, 97, 96, 98, 87, - 51, 89, 88, 90, nil, 91, 99, 100, nil, 85, - 86, 39, 40, 38, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 213, nil, nil, 219, nil, nil, 53, - 54, nil, nil, 55, nil, nil, nil, nil, nil, 41, - nil, nil, nil, nil, nil, nil, nil, 218, nil, nil, - nil, nil, 84, 76, 79, 80, nil, 81, 82, nil, - nil, nil, 77, 83, nil, 69, 70, 66, nil, 52, - 57, nil, 78, 58, 59, nil, nil, nil, 62, nil, - 60, 61, 63, 293, 294, 67, 68, nil, nil, nil, - nil, nil, 289, 290, 296, 93, 92, 94, 95, nil, - nil, 220, nil, nil, nil, nil, nil, nil, 42, nil, - nil, 97, 96, 98, 87, 51, 89, 88, 90, nil, - 91, 99, 100, nil, 85, 86, 39, 40, 38, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 213, nil, - nil, 219, nil, nil, 53, 54, nil, nil, 55, nil, - nil, nil, nil, nil, 41, nil, nil, nil, nil, nil, - nil, nil, 218, nil, nil, nil, nil, 84, 76, 79, - 80, nil, 81, 82, nil, nil, nil, 77, 83, nil, - 69, 70, 66, nil, 52, 57, nil, 78, 58, 59, - nil, nil, nil, 62, nil, 60, 61, 63, 293, 294, - 67, 68, nil, nil, nil, nil, nil, 289, 290, 296, - 93, 92, 94, 95, nil, nil, 220, nil, nil, nil, - nil, nil, nil, 42, nil, nil, 97, 96, 98, 87, - 51, 89, 88, 90, nil, 91, 99, 100, nil, 85, - 86, 39, 40, 38, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 213, nil, nil, 219, nil, nil, 53, - 54, nil, nil, 55, nil, nil, nil, nil, nil, 41, - nil, nil, nil, nil, nil, nil, nil, 218, nil, nil, - nil, nil, 84, 76, 79, 80, nil, 81, 82, nil, - nil, nil, 77, 83, nil, 69, 70, 66, nil, 52, - 57, nil, 78, 58, 59, nil, nil, nil, 62, nil, - 60, 61, 63, 28, 29, 67, 68, nil, nil, nil, - nil, nil, 27, 26, 25, 93, 92, 94, 95, nil, - nil, 220, nil, nil, nil, nil, nil, nil, 42, nil, - nil, 97, 96, 98, 87, 51, 89, 88, 90, 272, - 91, 99, 100, nil, 85, 86, 39, 40, 38, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 213, nil, - nil, 219, nil, nil, 53, 54, nil, nil, 55, nil, - 270, nil, 268, nil, 41, nil, nil, nil, nil, nil, - nil, nil, 218, nil, nil, nil, nil, 84, 76, 79, - 80, nil, 81, 82, nil, nil, nil, 77, 83, nil, - 69, 70, 66, nil, 52, 57, nil, 78, 58, 59, - nil, nil, nil, 62, nil, 60, 61, 63, 28, 29, - 67, 68, nil, nil, nil, nil, nil, 27, 26, 25, - 93, 92, 94, 95, nil, nil, 220, nil, nil, nil, - nil, nil, nil, 42, nil, nil, 97, 96, 98, 87, - 51, 89, 88, 90, 272, 91, 99, 100, nil, 85, - 86, 39, 40, 38, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 213, nil, nil, 219, nil, nil, 458, - 54, nil, nil, 55, nil, 270, nil, 268, nil, 41, - nil, nil, nil, nil, nil, nil, nil, 218, nil, nil, - nil, nil, 84, 76, 79, 80, nil, 81, 82, nil, - nil, nil, 77, 83, nil, 69, 70, 66, nil, 52, - 57, nil, 78, 58, 59, nil, nil, nil, 62, nil, - 60, 61, 63, 28, 29, 67, 68, nil, nil, nil, - nil, nil, 27, 26, 25, 93, 92, 94, 95, nil, - nil, 220, nil, nil, nil, nil, nil, nil, 42, nil, - nil, 97, 96, 98, 87, 51, 89, 88, 90, 272, - 91, 99, 100, nil, 85, 86, 39, 40, 38, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 213, nil, - nil, 219, nil, nil, 53, 54, nil, nil, 55, nil, - 270, nil, 268, nil, 41, nil, nil, nil, nil, nil, - nil, nil, 218, nil, nil, nil, nil, 84, 76, 79, - 80, nil, 81, 82, nil, nil, nil, 77, 83, 209, - 69, 70, 66, nil, 52, 57, nil, 78, 58, 59, - nil, nil, nil, 62, nil, 60, 61, 63, 293, 294, - 67, 68, nil, nil, nil, nil, nil, 289, 290, 296, - 93, 92, 94, 95, nil, nil, 220, nil, nil, nil, - nil, nil, nil, 42, nil, nil, 97, 96, 98, 87, - 51, 89, 88, 90, nil, 91, 99, 100, nil, 85, - 86, 39, 40, 38, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 213, nil, nil, 219, nil, nil, 53, - 54, nil, nil, 55, nil, nil, nil, nil, nil, 41, - nil, nil, nil, nil, nil, nil, nil, 218, nil, nil, - nil, nil, 84, 76, 79, 80, nil, 81, 82, nil, - nil, nil, 77, 83, nil, 69, 70, 66, nil, 52, - 57, nil, 78, 58, 59, nil, nil, nil, 62, nil, - 60, 61, 63, 293, 294, 67, 68, nil, nil, nil, - nil, nil, 289, 290, 296, 93, 92, 94, 95, nil, - nil, 220, nil, nil, nil, nil, nil, nil, 42, nil, - nil, 97, 96, 98, 87, 51, 89, 88, 90, nil, - 91, 99, 100, nil, 85, 86, 39, 40, 38, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 213, nil, - nil, 219, nil, nil, 53, 54, nil, nil, 55, nil, - nil, nil, nil, nil, 41, nil, nil, nil, nil, nil, - nil, nil, 218, nil, nil, nil, nil, 84, 76, 79, - 80, nil, 81, 82, nil, nil, nil, 77, 83, nil, - 69, 70, 66, nil, 52, 57, nil, 78, 58, 59, - nil, nil, nil, 62, nil, 60, 61, 63, 293, 294, - 67, 68, nil, nil, nil, nil, nil, 289, 290, 296, - 93, 92, 94, 95, nil, nil, 220, nil, nil, nil, - nil, nil, nil, 42, nil, nil, 97, 96, 98, 87, - 51, 89, 88, 90, nil, 91, 99, 100, nil, 85, - 86, 39, 40, 38, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 213, nil, nil, 219, nil, nil, 53, - 54, nil, nil, 55, nil, nil, nil, nil, nil, 41, - nil, nil, nil, nil, nil, nil, nil, 218, nil, nil, - nil, nil, 84, 76, 79, 80, nil, 81, 82, nil, - nil, nil, 77, 83, nil, 69, 70, 66, 9, 52, - 57, nil, 78, 58, 59, nil, nil, nil, 62, nil, - 60, 61, 63, 28, 29, 67, 68, nil, nil, nil, - nil, nil, 27, 26, 25, 93, 92, 94, 95, nil, - nil, 18, nil, nil, nil, nil, nil, 8, 42, nil, - 10, 97, 96, 98, 87, 51, 89, 88, 90, nil, - 91, 99, 100, nil, 85, 86, 39, 40, 38, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 37, nil, - nil, 31, nil, nil, 53, 54, nil, nil, 55, nil, - 33, nil, nil, nil, 41, nil, nil, nil, nil, nil, - nil, nil, 19, nil, nil, nil, nil, 84, 76, 79, - 80, nil, 81, 82, nil, nil, nil, 77, 83, nil, - 69, 70, 66, nil, 52, 57, nil, 78, 58, 59, - nil, nil, nil, 62, nil, 60, 61, 63, 293, 294, - 67, 68, nil, nil, nil, nil, nil, 289, 290, 296, - 93, 92, 94, 95, nil, nil, 220, nil, nil, nil, - nil, nil, nil, 291, nil, nil, 97, 96, 98, 87, - 51, 89, 88, 90, nil, 91, 99, 100, nil, 85, - 86, nil, nil, 297, 228, 232, 237, 238, 239, 234, - 236, 244, 245, 240, 241, nil, 221, 222, nil, nil, - 242, 243, nil, 287, nil, nil, 219, nil, nil, 53, - 54, nil, nil, 55, nil, nil, 225, nil, 231, nil, - 227, 226, 223, 224, 235, 233, 229, nil, 230, nil, - nil, nil, 84, 76, 79, 80, nil, 81, 82, nil, - nil, nil, 77, 83, nil, 246, nil, 479, nil, nil, - 57, nil, 78, 69, 70, 66, nil, 52, nil, nil, - nil, 58, 59, nil, nil, nil, 62, nil, 60, 61, - 63, 293, 294, 67, 68, nil, nil, nil, nil, nil, - 289, 290, 296, 93, 92, 94, 95, nil, nil, 220, - nil, nil, nil, nil, nil, nil, 291, nil, nil, 97, - 96, 98, 87, 51, 89, 88, 90, nil, 91, 99, - 100, nil, 85, 86, nil, 732, 297, 647, 646, 645, - 651, 648, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 287, nil, nil, 284, - nil, nil, 53, 54, nil, nil, 55, nil, nil, nil, - nil, nil, 653, nil, nil, nil, nil, nil, nil, nil, - nil, 657, 656, 660, 659, 84, 76, 79, 80, nil, - 81, 82, nil, nil, nil, 77, 83, nil, 69, 70, - 66, nil, 52, 57, nil, 78, 58, 59, nil, nil, - nil, 62, nil, 60, 61, 63, 293, 294, 67, 68, - nil, nil, nil, nil, nil, 289, 290, 296, 93, 92, - 94, 95, nil, nil, 220, nil, nil, nil, nil, nil, - nil, 42, nil, nil, 97, 96, 98, 87, 51, 89, - 88, 90, nil, 91, 99, 100, nil, 85, 86, 39, - 40, 38, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 213, nil, nil, 219, 497, nil, 53, 54, nil, - nil, 55, nil, nil, nil, nil, nil, 41, nil, nil, - nil, nil, nil, nil, nil, 218, nil, nil, nil, nil, - 84, 76, 79, 80, nil, 81, 82, nil, nil, nil, - 77, 83, nil, 69, 70, 66, nil, 52, 57, nil, - 78, 58, 59, nil, nil, nil, 62, nil, 60, 61, - 63, 28, 29, 67, 68, nil, nil, nil, nil, nil, - 27, 26, 25, 93, 92, 94, 95, nil, nil, 18, - nil, nil, nil, nil, nil, nil, 42, nil, nil, 97, - 96, 98, 87, 51, 89, 88, 90, nil, 91, 99, - 100, nil, 85, 86, 39, 40, 38, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 213, nil, nil, 219, - nil, nil, 53, 54, nil, nil, 55, nil, nil, nil, - nil, nil, 41, nil, nil, nil, nil, nil, nil, nil, - 19, nil, nil, nil, nil, 84, 76, 79, 80, nil, - 81, 82, nil, nil, nil, 77, 83, nil, 69, 70, - 66, nil, 52, 57, nil, 78, 58, 59, nil, nil, - nil, 62, nil, 60, 61, 63, 28, 29, 67, 68, - nil, nil, nil, nil, nil, 27, 26, 25, 93, 92, - 94, 95, nil, nil, 18, nil, nil, nil, nil, nil, - nil, 42, nil, nil, 97, 96, 98, 87, 51, 89, - 88, 90, nil, 91, 99, 100, nil, 85, 86, 39, - 40, 38, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 213, nil, nil, 219, nil, nil, 53, 54, nil, - nil, 55, nil, nil, nil, nil, nil, 41, nil, nil, - nil, nil, nil, nil, nil, 19, nil, nil, nil, nil, - 84, 76, 79, 80, nil, 81, 82, nil, nil, nil, - 77, 83, nil, 69, 70, 66, nil, 52, 57, nil, - 78, 58, 59, nil, nil, nil, 62, nil, 60, 61, - 63, 28, 29, 67, 68, nil, nil, nil, nil, nil, - 27, 26, 25, 93, 92, 94, 95, nil, nil, 18, - nil, nil, nil, nil, nil, nil, 42, nil, nil, 97, - 96, 98, 87, 51, 89, 88, 90, nil, 91, 99, - 100, nil, 85, 86, 39, 40, 38, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 213, nil, nil, 219, - nil, nil, 53, 54, nil, nil, 55, nil, nil, nil, - nil, nil, 41, nil, nil, nil, nil, nil, nil, nil, - 19, nil, nil, nil, nil, 84, 76, 79, 80, nil, - 81, 82, nil, nil, nil, 77, 83, nil, 69, 70, - 66, nil, 52, 57, nil, 78, 58, 59, nil, nil, - nil, 62, nil, 60, 61, 63, 28, 29, 67, 68, - nil, nil, nil, nil, nil, 27, 26, 25, 93, 92, - 94, 95, nil, nil, 18, nil, nil, nil, nil, nil, - nil, 42, nil, nil, 97, 96, 98, 87, 51, 89, - 88, 90, nil, 91, 99, 100, nil, 85, 86, 39, - 40, 38, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 213, nil, nil, 219, nil, nil, 53, 54, nil, - nil, 55, nil, nil, nil, nil, nil, 41, nil, nil, - nil, nil, nil, nil, nil, 19, nil, nil, nil, nil, - 84, 76, 79, 80, nil, 81, 82, nil, nil, nil, - 77, 83, nil, 69, 70, 66, nil, 52, 57, nil, - 78, 58, 59, nil, nil, nil, 62, nil, 60, 61, - 63, 293, 294, 67, 68, nil, nil, nil, nil, nil, - 289, 290, 296, 93, 92, 94, 95, nil, nil, 220, - nil, nil, nil, nil, nil, nil, 42, nil, nil, 97, - 96, 98, 87, 51, 89, 88, 90, nil, 91, 99, - 100, nil, 85, 86, 39, 40, 38, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 213, nil, nil, 219, - nil, nil, 53, 54, nil, nil, 55, nil, nil, nil, - nil, nil, 41, nil, nil, nil, nil, nil, nil, nil, - 218, nil, nil, nil, nil, 84, 76, 79, 80, nil, - 81, 82, nil, nil, nil, 77, 83, nil, 69, 70, - 66, nil, 52, 57, nil, 78, 58, 59, nil, nil, - nil, 62, nil, 60, 61, 63, 28, 29, 67, 68, - nil, nil, nil, nil, nil, 27, 26, 25, 93, 92, - 94, 95, nil, nil, 220, nil, nil, nil, nil, nil, - nil, 42, nil, nil, 97, 96, 98, 87, 51, 89, - 88, 90, 272, 91, 99, 100, nil, 85, 86, 39, - 40, 38, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 213, nil, nil, 219, nil, nil, 53, 54, nil, - nil, 55, nil, 270, nil, 268, nil, 41, nil, nil, - nil, nil, nil, nil, nil, 218, nil, nil, nil, nil, - 84, 76, 79, 80, nil, 81, 82, nil, nil, nil, - 77, 83, nil, 69, 70, 66, nil, 52, 57, nil, - 78, 58, 59, nil, nil, nil, 62, nil, 60, 61, - 63, 293, 294, 67, 68, nil, nil, nil, nil, nil, - 289, 290, 296, 93, 92, 94, 95, nil, nil, 220, - nil, nil, nil, nil, nil, nil, 42, nil, nil, 97, - 96, 98, 87, 51, 89, 88, 90, nil, 91, 99, - 100, nil, 85, 86, 39, 40, 38, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 213, nil, nil, 219, - nil, nil, 53, 54, nil, nil, 55, nil, nil, nil, - nil, nil, 41, nil, nil, nil, nil, nil, nil, nil, - 218, nil, nil, nil, nil, 84, 76, 79, 80, nil, - 81, 82, nil, nil, nil, 77, 83, nil, 69, 70, - 66, nil, 52, 57, nil, 78, 58, 59, nil, nil, - nil, 62, nil, 60, 61, 63, 293, 294, 67, 68, - nil, nil, nil, nil, nil, 289, 290, 296, 93, 92, - 94, 95, nil, nil, 220, nil, nil, nil, nil, nil, - nil, 42, nil, nil, 97, 96, 98, 87, 51, 89, - 88, 90, nil, 91, 99, 100, nil, 85, 86, 39, - 40, 38, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 213, nil, nil, 219, nil, nil, 53, 54, nil, - nil, 55, nil, nil, nil, nil, nil, 41, nil, nil, - nil, nil, nil, nil, nil, 218, nil, nil, nil, nil, - 84, 76, 79, 80, nil, 81, 82, nil, nil, nil, - 77, 83, nil, 69, 70, 66, nil, 52, 57, nil, - 78, 58, 59, nil, nil, nil, 62, nil, 60, 61, - 63, 293, 294, 67, 68, nil, nil, nil, nil, nil, - 289, 290, 296, 93, 92, 94, 95, nil, nil, 220, - nil, nil, nil, nil, nil, nil, 42, nil, nil, 97, - 96, 98, 87, 51, 89, 88, 90, nil, 91, 99, - 100, nil, 85, 86, 39, 40, 38, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 213, nil, nil, 219, - nil, nil, 53, 54, nil, nil, 55, nil, nil, nil, - nil, nil, 41, nil, nil, nil, nil, nil, nil, nil, - 218, nil, nil, nil, nil, 84, 76, 79, 80, nil, - 81, 82, nil, nil, nil, 77, 83, nil, 69, 70, - 66, nil, 52, 57, nil, 78, 58, 59, nil, nil, - nil, 62, nil, 60, 61, 63, 28, 29, 67, 68, - nil, nil, nil, nil, nil, 27, 26, 25, 93, 92, - 94, 95, nil, nil, 18, nil, nil, nil, nil, nil, - nil, 42, nil, nil, 97, 96, 98, 87, 51, 89, - 88, 90, 272, 91, 99, 100, nil, 85, 86, 39, - 40, 38, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 213, nil, nil, 219, nil, nil, 53, 54, nil, - nil, 55, nil, nil, nil, 268, nil, 41, nil, nil, - nil, nil, nil, nil, nil, 19, nil, nil, nil, nil, - 84, 76, 79, 80, nil, 81, 82, nil, nil, nil, - 77, 83, nil, 69, 70, 66, nil, 52, 57, nil, - 78, 58, 59, nil, nil, nil, 62, nil, 60, 61, - 63, 293, 294, 67, 68, nil, nil, nil, nil, nil, - 289, 290, 296, 93, 92, 94, 95, nil, nil, 220, - nil, nil, nil, nil, nil, nil, 42, nil, nil, 97, - 96, 98, 87, 51, 89, 88, 90, 272, 91, 99, - 100, nil, 85, 86, 39, 40, 38, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 213, nil, nil, 219, - nil, nil, 53, 54, nil, nil, 55, nil, 608, nil, - 268, nil, 41, nil, nil, nil, nil, nil, nil, nil, - 218, nil, nil, nil, nil, 84, 76, 79, 80, nil, - 81, 82, nil, nil, nil, 77, 83, nil, 69, 70, - 66, nil, 52, 57, nil, 78, 58, 59, nil, nil, - nil, 62, nil, 60, 61, 63, 293, 294, 67, 68, - nil, nil, nil, nil, nil, 289, 290, 296, 93, 92, - 94, 95, nil, nil, 220, nil, nil, nil, nil, nil, - nil, 42, nil, nil, 97, 96, 98, 87, 51, 89, - 88, 90, 272, 91, 99, 100, nil, 85, 86, 39, - 40, 38, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 213, nil, nil, 219, nil, nil, 53, 54, nil, - nil, 55, nil, nil, nil, 268, nil, 41, nil, nil, - nil, nil, nil, nil, nil, 218, nil, nil, nil, nil, - 84, 76, 79, 80, nil, 81, 82, nil, nil, nil, - 77, 83, nil, 69, 70, 66, nil, 52, 57, nil, - 78, 58, 59, nil, nil, nil, 62, nil, 60, 61, - 63, 293, 294, 67, 68, nil, nil, nil, nil, nil, - 289, 290, 296, 93, 92, 94, 95, nil, nil, 220, - nil, nil, nil, nil, nil, nil, 42, nil, nil, 97, - 96, 98, 87, 51, 89, 88, 90, nil, 91, 99, - 100, nil, 85, 86, 39, 40, 38, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 213, nil, nil, 219, - nil, nil, 53, 54, nil, nil, 55, nil, nil, nil, - nil, nil, 41, nil, nil, nil, nil, nil, nil, nil, - 218, nil, nil, nil, nil, 84, 76, 79, 80, nil, - 81, 82, nil, nil, nil, 77, 83, nil, 69, 70, - 66, 9, 52, 57, nil, 78, 58, 59, nil, nil, - nil, 62, nil, 60, 61, 63, 28, 29, 67, 68, - nil, nil, nil, nil, nil, 27, 26, 25, 93, 92, - 94, 95, nil, nil, 18, nil, nil, nil, nil, nil, - 8, 42, nil, 10, 97, 96, 98, 87, 51, 89, - 88, 90, nil, 91, 99, 100, nil, 85, 86, 39, - 40, 38, 228, 232, 237, 238, 239, 234, 236, 244, - 245, 240, 241, nil, 221, 222, nil, nil, 242, 243, - nil, 37, nil, nil, 31, nil, nil, 53, 54, nil, - nil, 55, nil, 33, 225, nil, 231, 41, 227, 226, - 223, 224, 235, 233, 229, 19, 230, nil, nil, nil, - 84, 76, 79, 80, nil, 81, 82, nil, nil, nil, - 77, 83, nil, 246, nil, nil, nil, 368, 57, nil, - 78, 69, 70, 66, nil, 52, nil, nil, nil, 58, - 59, nil, nil, nil, 62, nil, 60, 61, 63, 293, - 294, 67, 68, nil, nil, nil, nil, nil, 289, 290, - 296, 93, 92, 94, 95, nil, nil, 220, nil, nil, - nil, nil, nil, nil, 291, nil, nil, 97, 96, 98, - 87, 51, 89, 88, 90, nil, 91, 99, 100, nil, - 85, 86, nil, 650, 297, 647, 646, 645, 651, 648, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 287, nil, nil, 284, nil, nil, - 53, 54, nil, nil, 55, nil, nil, nil, nil, nil, - 653, 688, nil, nil, nil, nil, nil, nil, nil, 657, - 656, 660, 659, 84, 76, 79, 80, nil, 81, 82, - nil, nil, nil, 77, 83, nil, 69, 70, 66, nil, - 52, 57, nil, 78, 58, 59, nil, nil, nil, 62, - nil, 60, 61, 63, 28, 29, 67, 68, nil, nil, - nil, nil, nil, 27, 26, 25, 93, 92, 94, 95, - nil, nil, 220, nil, nil, nil, nil, nil, nil, 42, - nil, nil, 97, 96, 98, 87, 51, 89, 88, 90, - 272, 91, 99, 100, nil, 85, 86, 39, 40, 38, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 213, - nil, nil, 219, nil, nil, 53, 54, nil, nil, 55, - nil, 270, nil, 268, nil, 41, nil, nil, nil, nil, - nil, nil, nil, 218, nil, nil, nil, nil, 84, 76, - 79, 80, nil, 81, 82, nil, nil, nil, 77, 83, - nil, 69, 70, 66, nil, 52, 57, nil, 78, 58, - 59, nil, nil, nil, 62, nil, 60, 61, 63, 293, - 294, 67, 68, nil, nil, nil, nil, nil, 289, 290, - 296, 93, 92, 94, 95, nil, nil, 220, nil, nil, - nil, nil, nil, nil, 291, nil, nil, 97, 96, 98, - 87, 51, 89, 88, 90, nil, 91, 99, 100, nil, - 85, 86, nil, 650, 297, 647, 646, 645, 651, 648, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 287, nil, nil, 284, nil, nil, - 53, 54, nil, nil, 55, nil, nil, nil, nil, nil, - 653, nil, nil, nil, nil, nil, nil, nil, nil, 657, - 656, 660, 659, 84, 76, 79, 80, nil, 81, 82, - nil, nil, nil, 77, 83, nil, 69, 70, 66, nil, - 52, 57, nil, 78, 58, 59, nil, nil, nil, 62, - nil, 60, 61, 63, 293, 294, 67, 68, nil, nil, - nil, nil, nil, 289, 290, 296, 93, 92, 94, 95, - nil, nil, 220, nil, nil, nil, nil, nil, nil, 42, - nil, nil, 97, 96, 98, 87, 51, 89, 88, 90, - nil, 91, 99, 100, nil, 85, 86, 39, 40, 38, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 213, - nil, nil, 219, nil, nil, 53, 54, nil, nil, 55, - nil, nil, nil, nil, nil, 41, nil, nil, nil, nil, - nil, nil, nil, 218, nil, nil, nil, nil, 84, 76, - 79, 80, nil, 81, 82, nil, nil, nil, 77, 83, - nil, 69, 70, 66, nil, 52, 57, nil, 78, 58, - 59, nil, nil, nil, 62, nil, 60, 61, 63, 293, - 294, 67, 68, nil, nil, nil, nil, nil, 289, 290, - 296, 93, 92, 94, 95, nil, nil, 220, nil, nil, - nil, nil, nil, nil, 42, nil, nil, 97, 96, 98, - 87, 51, 89, 88, 90, nil, 91, 99, 100, nil, - 85, 86, 39, 40, 38, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 213, nil, nil, 219, nil, nil, - 53, 54, nil, nil, 55, nil, nil, nil, nil, nil, - 41, nil, nil, nil, nil, nil, nil, nil, 218, nil, - nil, nil, nil, 84, 76, 79, 80, nil, 81, 82, - nil, nil, nil, 77, 83, nil, 69, 70, 66, nil, - 52, 57, nil, 78, 58, 59, nil, nil, nil, 62, - nil, 60, 61, 63, 293, 294, 67, 68, nil, nil, - nil, nil, nil, 289, 290, 296, 93, 92, 94, 95, - nil, nil, 220, nil, nil, nil, nil, nil, nil, 42, - nil, nil, 97, 96, 98, 87, 51, 89, 88, 90, - nil, 91, 99, 100, nil, 85, 86, 39, 40, 38, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 213, - nil, nil, 219, nil, nil, 53, 54, nil, nil, 55, - nil, nil, nil, nil, nil, 41, nil, nil, nil, nil, - nil, nil, nil, 218, nil, nil, nil, nil, 84, 76, - 79, 80, nil, 81, 82, nil, nil, nil, 77, 83, - nil, 69, 70, 66, nil, 52, 57, nil, 78, 58, - 59, nil, nil, nil, 62, nil, 60, 61, 63, 28, - 29, 67, 68, nil, nil, nil, nil, nil, 27, 26, - 25, 93, 92, 94, 95, nil, nil, 18, nil, nil, - nil, nil, nil, nil, 42, nil, nil, 97, 96, 98, - 87, 51, 89, 88, 90, nil, 91, 99, 100, nil, - 85, 86, 39, 40, 38, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 213, nil, nil, 219, nil, nil, - 53, 54, nil, nil, 55, nil, nil, nil, nil, nil, - 41, nil, nil, nil, nil, nil, nil, nil, 19, nil, - nil, nil, nil, 84, 76, 79, 80, nil, 81, 82, - nil, nil, nil, 77, 83, nil, 69, 70, 66, nil, - 52, 57, nil, 78, 58, 59, nil, nil, nil, 62, - nil, 60, 61, 63, 293, 294, 67, 68, nil, nil, - nil, nil, nil, 289, 290, 296, 93, 92, 94, 95, - nil, nil, 220, nil, nil, nil, nil, nil, nil, 42, - nil, nil, 97, 96, 98, 87, 51, 89, 88, 90, - nil, 91, 99, 100, nil, 85, 86, 39, 40, 38, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 213, - nil, nil, 219, nil, nil, 53, 54, nil, nil, 55, - nil, 385, nil, nil, nil, 41, nil, nil, nil, nil, - nil, nil, nil, 218, nil, nil, nil, nil, 84, 76, - 79, 80, nil, 81, 82, nil, nil, nil, 77, 83, - nil, 69, 70, 66, nil, 52, 57, nil, 78, 58, - 59, nil, nil, nil, 62, nil, 60, 61, 63, 293, - 294, 67, 68, nil, nil, nil, nil, nil, 289, 290, - 296, 93, 92, 94, 95, nil, nil, 220, nil, nil, - nil, nil, nil, nil, 42, nil, nil, 97, 96, 98, - 87, 51, 89, 88, 90, 272, 91, 99, 100, nil, - 85, 86, 39, 40, 38, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 213, nil, nil, 219, nil, nil, - 53, 54, nil, nil, 55, nil, 608, nil, nil, nil, - 41, nil, nil, nil, nil, nil, nil, nil, 218, nil, - nil, nil, nil, 84, 76, 79, 80, nil, 81, 82, - nil, nil, nil, 77, 83, nil, 69, 70, 66, nil, - 52, 57, nil, 78, 58, 59, nil, nil, nil, 62, - nil, 60, 61, 63, 293, 294, 67, 68, nil, nil, - nil, nil, nil, 289, 290, 296, 93, 92, 94, 95, - nil, nil, 220, nil, nil, nil, nil, nil, nil, 42, - nil, nil, 97, 96, 98, 87, 51, 89, 88, 90, - 272, 91, 99, 100, nil, 85, 86, 39, 40, 38, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 213, - nil, nil, 219, nil, nil, 53, 54, nil, nil, 55, - nil, nil, nil, nil, nil, 41, nil, nil, nil, nil, - nil, nil, nil, 218, nil, nil, nil, nil, 84, 76, - 79, 80, nil, 81, 82, nil, nil, nil, 77, 83, - nil, 69, 70, 66, nil, 52, 57, nil, 78, 58, - 59, nil, nil, nil, 62, nil, 60, 61, 63, 293, - 294, 67, 68, nil, nil, nil, nil, nil, 289, 290, - 296, 93, 92, 94, 95, nil, nil, 220, nil, nil, - nil, nil, nil, nil, 42, nil, nil, 97, 96, 98, - 87, 51, 89, 88, 90, nil, 91, 99, 100, nil, - 85, 86, 39, 40, 38, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 213, nil, nil, 219, nil, nil, - 53, 54, nil, nil, 55, nil, 270, nil, nil, nil, - 41, nil, nil, nil, nil, nil, nil, nil, 218, nil, - nil, nil, nil, 84, 76, 79, 80, nil, 81, 82, - nil, nil, nil, 77, 83, nil, 69, 70, 66, nil, - 52, 57, nil, 78, 58, 59, nil, nil, nil, 62, - nil, 60, 61, 63, 28, 29, 67, 68, nil, nil, - nil, nil, nil, 27, 26, 25, 93, 92, 94, 95, - nil, nil, 220, nil, nil, nil, nil, nil, nil, 42, - nil, nil, 97, 96, 98, 87, 51, 89, 88, 90, - 272, 91, 99, 100, nil, 85, 86, 39, 40, 38, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 213, - nil, nil, 219, nil, nil, 53, 54, nil, nil, 55, - nil, 270, nil, 268, nil, 41, nil, nil, nil, nil, - nil, nil, nil, 218, nil, nil, nil, nil, 84, 76, - 79, 80, nil, 81, 82, nil, nil, nil, 77, 83, - nil, 69, 70, 66, nil, 52, 57, nil, 78, 58, - 59, nil, nil, nil, 62, nil, 60, 61, 63, 28, - 29, 67, 68, nil, nil, nil, nil, nil, 27, 26, - 25, 93, 92, 94, 95, nil, nil, 220, nil, nil, - nil, nil, nil, nil, 42, nil, nil, 97, 96, 98, - 87, 51, 89, 88, 90, 272, 91, 99, 100, nil, - 85, 86, 39, 40, 38, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 213, nil, nil, 219, nil, nil, - 53, 54, nil, nil, 55, nil, 270, nil, 268, nil, - 41, nil, nil, nil, nil, nil, nil, nil, 218, nil, - nil, nil, nil, 84, 76, 79, 80, nil, 81, 82, - nil, nil, nil, 77, 83, nil, 69, 70, 66, nil, - 52, 57, nil, 78, 58, 59, nil, nil, nil, 62, - nil, 60, 61, 63, 28, 29, 67, 68, nil, nil, - nil, nil, nil, 27, 26, 25, 93, 92, 94, 95, - nil, nil, 18, nil, nil, nil, nil, nil, nil, 42, - nil, nil, 97, 96, 98, 87, 51, 89, 88, 90, - nil, 91, 99, 100, nil, 85, 86, 39, 40, 38, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 213, - nil, nil, 219, nil, nil, 53, 54, nil, nil, 55, - nil, nil, nil, nil, nil, 41, nil, nil, nil, nil, - nil, nil, nil, 19, nil, nil, nil, nil, 84, 76, - 79, 80, nil, 81, 82, nil, nil, nil, 77, 83, - nil, 69, 70, 66, nil, 52, 57, nil, 78, 58, - 59, nil, nil, nil, 62, nil, 60, 61, 63, 293, - 294, 67, 68, nil, nil, nil, nil, nil, 289, 290, - 296, 93, 92, 94, 95, nil, nil, 220, nil, nil, - nil, nil, nil, nil, 42, nil, nil, 97, 96, 98, - 87, 51, 89, 88, 90, nil, 91, 99, 100, nil, - 85, 86, 39, 40, 38, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 213, nil, nil, 219, nil, nil, - 53, 54, nil, nil, 55, nil, nil, nil, nil, nil, - 41, nil, nil, nil, nil, nil, nil, nil, 218, nil, - nil, nil, nil, 84, 76, 79, 80, nil, 81, 82, - nil, nil, nil, 77, 83, nil, 69, 70, 66, nil, - 52, 57, nil, 78, 58, 59, nil, nil, nil, 62, - nil, 60, 61, 63, 293, 294, 67, 68, nil, nil, - nil, nil, nil, 289, 290, 296, 93, 92, 94, 95, - nil, nil, 220, nil, nil, nil, nil, nil, nil, 42, - nil, nil, 97, 96, 98, 87, 51, 89, 88, 90, - nil, 91, 99, 100, nil, 85, 86, 39, 40, 38, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 213, - nil, nil, 219, nil, nil, 53, 54, nil, nil, 55, - nil, 705, nil, nil, nil, 41, nil, nil, nil, nil, - nil, nil, nil, 218, nil, nil, nil, nil, 84, 76, - 79, 80, nil, 81, 82, nil, nil, nil, 77, 83, - nil, 69, 70, 66, nil, 52, 57, nil, 78, 58, - 59, nil, nil, nil, 62, nil, 60, 61, 63, 293, - 294, 67, 68, nil, nil, nil, nil, nil, 289, 290, - 296, 93, 92, 94, 95, nil, nil, 220, nil, nil, - nil, nil, nil, nil, 42, nil, nil, 97, 96, 98, - 87, 51, 89, 88, 90, nil, 91, 99, 100, nil, - 85, 86, 39, 40, 38, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 213, nil, nil, 219, nil, nil, - 53, 54, nil, nil, 55, nil, nil, nil, nil, nil, - 41, nil, nil, nil, nil, nil, nil, nil, 218, nil, - nil, nil, nil, 84, 76, 79, 80, nil, 81, 82, - nil, nil, nil, 77, 83, nil, 69, 70, 66, nil, - 52, 57, nil, 78, 58, 59, nil, nil, nil, 62, - nil, 60, 61, 63, 28, 29, 67, 68, nil, nil, - nil, nil, nil, 27, 26, 25, 93, 92, 94, 95, - nil, nil, 220, nil, nil, nil, nil, nil, nil, 42, - nil, nil, 97, 96, 98, 87, 51, 89, 88, 90, - nil, 91, 99, 100, nil, 85, 86, 39, 40, 38, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 213, - nil, nil, 219, nil, nil, 53, 54, nil, nil, 55, - nil, nil, nil, nil, nil, 41, nil, nil, nil, nil, - nil, nil, nil, 218, nil, nil, nil, nil, 84, 76, - 79, 80, nil, 81, 82, nil, nil, nil, 77, 83, - nil, 69, 70, 66, nil, 52, 57, nil, 78, 58, - 59, nil, nil, nil, 62, nil, 60, 61, 63, 28, - 29, 67, 68, nil, nil, nil, nil, nil, 27, 26, - 25, 93, 92, 94, 95, nil, nil, 220, nil, nil, - nil, nil, nil, nil, 42, nil, nil, 97, 96, 98, - 87, 51, 89, 88, 90, nil, 91, 99, 100, nil, - 85, 86, 39, 40, 38, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 213, nil, nil, 219, nil, nil, - 53, 54, nil, nil, 55, nil, nil, nil, nil, nil, - 41, nil, nil, nil, nil, nil, nil, nil, 218, nil, - nil, nil, nil, 84, 76, 79, 80, nil, 81, 82, - nil, nil, nil, 77, 83, nil, 69, 70, 66, nil, - 52, 57, nil, 78, 58, 59, nil, nil, nil, 62, - nil, 60, 61, 63, 28, 29, 67, 68, nil, nil, - nil, nil, nil, 27, 26, 25, 93, 92, 94, 95, - nil, nil, 220, nil, nil, nil, nil, nil, nil, 42, - nil, nil, 97, 96, 98, 87, 51, 89, 88, 90, - nil, 91, 99, 100, nil, 85, 86, 39, 40, 38, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 213, - nil, nil, 219, nil, nil, 53, 54, nil, nil, 55, - nil, nil, nil, nil, nil, 41, nil, nil, nil, nil, - nil, nil, nil, 218, nil, nil, nil, nil, 84, 76, - 79, 80, nil, 81, 82, nil, nil, nil, 77, 83, - nil, 69, 70, 66, nil, 52, 57, nil, 78, 58, - 59, nil, nil, nil, 62, nil, 60, 61, 63, 28, - 29, 67, 68, nil, nil, nil, nil, nil, 27, 26, - 25, 93, 92, 94, 95, nil, nil, 220, nil, nil, - nil, nil, nil, nil, 42, nil, nil, 97, 96, 98, - 87, 51, 89, 88, 90, nil, 91, 99, 100, nil, - 85, 86, 39, 40, 38, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 213, nil, nil, 219, nil, nil, - 53, 54, nil, nil, 55, nil, nil, nil, nil, nil, - 41, nil, nil, nil, nil, nil, nil, nil, 218, nil, - nil, nil, nil, 84, 76, 79, 80, nil, 81, 82, - nil, nil, nil, 77, 83, nil, 69, 70, 66, nil, - 52, 57, nil, 78, 58, 59, nil, nil, nil, 62, - nil, 60, 61, 63, 293, 294, 67, 68, nil, nil, - nil, nil, nil, 289, 290, 296, 93, 92, 94, 95, - nil, nil, 220, nil, nil, nil, nil, nil, nil, 42, - nil, nil, 97, 96, 98, 87, 51, 89, 88, 90, - nil, 91, 99, 100, nil, 85, 86, 39, 40, 38, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 213, - nil, nil, 219, nil, nil, 53, 54, nil, nil, 55, - nil, nil, nil, nil, nil, 41, nil, nil, nil, nil, - nil, nil, nil, 218, nil, nil, nil, nil, 84, 76, - 79, 80, nil, 81, 82, nil, nil, nil, 77, 83, - nil, 69, 70, 66, nil, 52, 57, nil, 78, 58, - 59, nil, nil, nil, 62, nil, 60, 61, 63, 293, - 294, 67, 68, nil, nil, nil, nil, nil, 289, 290, - 296, 93, 92, 94, 95, nil, nil, 220, nil, nil, - nil, nil, nil, nil, 291, nil, nil, 97, 96, 98, - 87, 51, 89, 88, 90, nil, 91, 99, 100, nil, - 85, 86, nil, 732, 297, 647, 646, 645, 651, 648, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 287, nil, nil, 284, nil, nil, - 53, 54, nil, nil, 55, nil, nil, nil, nil, nil, - 653, nil, nil, nil, nil, nil, nil, nil, nil, 657, - 656, 660, 659, 84, 76, 79, 80, nil, 81, 82, - nil, nil, nil, 77, 83, nil, 69, 70, 66, nil, - 52, 57, nil, 78, 58, 59, nil, nil, nil, 62, - nil, 60, 61, 63, 293, 294, 67, 68, nil, nil, - nil, nil, nil, 289, 290, 296, 93, 92, 94, 95, - nil, nil, 220, nil, nil, nil, nil, nil, nil, 291, - nil, nil, 97, 96, 98, 87, 51, 89, 88, 90, - nil, 91, 99, 100, nil, 85, 86, nil, nil, 297, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 287, - nil, nil, 284, nil, nil, 53, 54, nil, nil, 55, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 84, 76, - 79, 80, nil, 81, 82, nil, nil, nil, 77, 83, - nil, 69, 70, 66, nil, 52, 57, nil, 78, 58, - 59, nil, nil, nil, 62, nil, 60, 61, 63, 28, - 29, 67, 68, nil, nil, nil, nil, nil, 27, 26, - 25, 93, 92, 94, 95, nil, nil, 18, nil, nil, - nil, nil, nil, nil, 42, nil, nil, 97, 96, 98, - 87, 51, 89, 88, 90, nil, 91, 99, 100, nil, - 85, 86, 39, 40, 38, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 213, nil, nil, 219, nil, nil, - 53, 54, nil, nil, 55, nil, nil, nil, nil, nil, - 41, nil, nil, nil, nil, nil, nil, nil, 19, nil, - nil, nil, nil, 84, 76, 79, 80, nil, 81, 82, - nil, nil, nil, 77, 83, nil, 69, 70, 66, nil, - 52, 57, nil, 78, 58, 59, nil, nil, nil, 62, - nil, 60, 61, 63, 293, 294, 67, 68, nil, nil, - nil, nil, nil, 289, 290, 296, 93, 92, 94, 95, - nil, nil, 220, nil, nil, nil, nil, nil, nil, 42, - nil, nil, 97, 96, 98, 87, 51, 89, 88, 90, - nil, 91, 99, 100, nil, 85, 86, 39, 40, 38, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 213, - nil, nil, 219, nil, nil, 53, 54, nil, nil, 55, - nil, nil, nil, nil, nil, 41, nil, nil, nil, nil, - nil, nil, nil, 218, nil, nil, nil, nil, 84, 76, - 79, 80, nil, 81, 82, nil, nil, nil, 77, 83, - nil, 69, 70, 66, nil, 52, 57, nil, 78, 58, - 59, nil, nil, nil, 62, nil, 60, 61, 63, 28, - 29, 67, 68, nil, nil, nil, nil, nil, 27, 26, - 25, 93, 92, 94, 95, nil, nil, 220, nil, nil, - nil, nil, nil, nil, 42, nil, nil, 97, 96, 98, - 87, 51, 89, 88, 90, nil, 91, 99, 100, nil, - 85, 86, 39, 40, 38, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 213, nil, nil, 219, nil, nil, - 53, 54, nil, nil, 55, nil, nil, nil, nil, nil, - 41, nil, nil, nil, nil, nil, nil, nil, 218, nil, - nil, nil, nil, 84, 76, 79, 80, nil, 81, 82, - nil, nil, nil, 77, 83, nil, 69, 70, 66, nil, - 52, 57, nil, 78, 58, 59, nil, nil, nil, 62, - nil, 60, 61, 63, 293, 294, 67, 68, nil, nil, - nil, nil, nil, 289, 290, 296, 93, 92, 94, 95, - nil, nil, 220, nil, nil, nil, nil, nil, nil, 42, - nil, nil, 97, 96, 98, 87, 51, 89, 88, 90, - nil, 91, 99, 100, nil, 85, 86, 39, 40, 38, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 213, - nil, nil, 219, nil, nil, 53, 54, nil, nil, 55, - nil, nil, nil, nil, nil, 41, nil, nil, nil, nil, - nil, nil, nil, 218, nil, nil, nil, nil, 84, 76, - 79, 80, nil, 81, 82, nil, nil, nil, 77, 83, - nil, 69, 70, 66, nil, 52, 57, nil, 78, 58, - 59, nil, nil, nil, 62, nil, 60, 61, 63, 293, - 294, 67, 68, nil, nil, nil, nil, nil, 289, 290, - 296, 93, 92, 94, 95, nil, nil, 220, nil, nil, - nil, nil, nil, nil, 42, nil, nil, 97, 96, 98, - 87, 51, 89, 88, 90, nil, 91, 99, 100, nil, - 85, 86, 39, 40, 38, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 213, nil, nil, 219, nil, nil, - 53, 54, nil, nil, 55, nil, nil, nil, nil, nil, - 41, nil, nil, nil, nil, nil, nil, nil, 218, nil, - nil, nil, nil, 84, 76, 79, 80, nil, 81, 82, - nil, nil, nil, 77, 83, nil, 69, 70, 66, nil, - 52, 57, nil, 78, 58, 59, nil, nil, nil, 62, - nil, 60, 61, 63, 293, 294, 67, 68, nil, nil, - nil, nil, nil, 289, 290, 296, 93, 92, 94, 95, - nil, nil, 220, nil, nil, nil, nil, nil, nil, 42, - nil, nil, 97, 96, 98, 87, 51, 89, 88, 90, - nil, 91, 99, 100, nil, 85, 86, 39, 40, 38, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 213, - nil, nil, 219, nil, nil, 53, 54, nil, nil, 55, - nil, nil, nil, nil, nil, 41, nil, nil, nil, nil, - nil, nil, nil, 218, nil, nil, nil, nil, 84, 76, - 79, 80, nil, 81, 82, nil, nil, nil, 77, 83, - nil, 69, 70, 66, nil, 52, 57, nil, 78, 58, - 59, nil, nil, nil, 62, nil, 60, 61, 63, 293, - 294, 67, 68, nil, nil, nil, nil, nil, 289, 290, - 296, 93, 92, 94, 95, nil, nil, 220, nil, nil, - nil, nil, nil, nil, 42, nil, nil, 97, 96, 98, - 87, 51, 89, 88, 90, nil, 91, 99, 100, nil, - 85, 86, 39, 40, 38, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 213, nil, nil, 219, nil, nil, - 53, 54, nil, nil, 55, nil, nil, nil, nil, nil, - 41, nil, nil, nil, nil, nil, nil, nil, 218, nil, - nil, nil, nil, 84, 76, 79, 80, nil, 81, 82, - nil, nil, nil, 77, 83, nil, 69, 70, 66, nil, - 52, 57, nil, 78, 58, 59, nil, nil, nil, 62, - nil, 60, 61, 63, 293, 294, 67, 68, nil, nil, - nil, nil, nil, 289, 290, 296, 93, 92, 94, 95, - nil, nil, 220, nil, nil, nil, nil, nil, nil, 42, - nil, nil, 97, 96, 98, 87, 51, 89, 88, 90, - nil, 91, 99, 100, nil, 85, 86, 39, 40, 38, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 213, - nil, nil, 219, nil, nil, 53, 54, nil, nil, 55, - nil, nil, nil, nil, nil, 41, nil, nil, nil, nil, - nil, nil, nil, 218, nil, nil, nil, nil, 84, 76, - 79, 80, nil, 81, 82, nil, nil, nil, 77, 83, - nil, 69, 70, 66, nil, 52, 57, nil, 78, 58, - 59, nil, nil, nil, 62, nil, 60, 61, 63, 293, - 294, 67, 68, nil, nil, nil, nil, nil, 289, 290, - 296, 93, 92, 94, 95, nil, nil, 220, nil, nil, - nil, nil, nil, nil, 42, nil, nil, 97, 96, 98, - 87, 51, 89, 88, 90, 272, 91, 99, 100, nil, - 85, 86, 39, 40, 38, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 213, nil, nil, 219, nil, nil, - 53, 54, nil, nil, 55, nil, 270, nil, 268, nil, - 41, nil, nil, nil, nil, nil, nil, nil, 218, nil, - nil, nil, nil, 84, 76, 79, 80, nil, 81, 82, - nil, nil, nil, 77, 83, nil, 69, 70, 66, nil, - 52, 57, nil, 78, 58, 59, nil, nil, nil, 62, - nil, 60, 61, 63, 293, 294, 67, 68, nil, nil, - nil, nil, nil, 289, 290, 296, 93, 92, 94, 95, - nil, nil, 220, nil, nil, nil, nil, nil, nil, 42, - nil, nil, 97, 96, 98, 87, 51, 89, 88, 90, - 272, 91, 99, 100, nil, 85, 86, 39, 40, 38, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 213, - nil, nil, 219, nil, nil, 53, 54, nil, nil, 55, - nil, 270, nil, 268, nil, 41, nil, nil, nil, nil, - nil, nil, nil, 218, nil, nil, nil, nil, 84, 76, - 79, 80, nil, 81, 82, nil, nil, nil, 77, 83, - nil, 69, 70, 66, nil, 52, 57, nil, 78, 58, - 59, nil, nil, nil, 62, nil, 60, 61, 63, 293, - 294, 67, 68, nil, nil, nil, nil, nil, 289, 290, - 296, 93, 92, 94, 95, nil, nil, 220, nil, nil, - nil, nil, nil, nil, 291, nil, nil, 97, 96, 98, - 87, 51, 89, 88, 90, nil, 91, 99, 100, nil, - 85, 86, nil, nil, 297, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 831, nil, nil, 219, nil, nil, - 53, 54, nil, nil, 55, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 84, 76, 79, 80, nil, 81, 82, - nil, nil, nil, 77, 83, nil, 69, 70, 66, nil, - 52, 57, nil, 78, 58, 59, nil, nil, nil, 62, - nil, 60, 61, 63, 293, 294, 67, 68, nil, nil, - nil, nil, nil, 289, 290, 296, 93, 92, 94, 95, - nil, nil, 220, nil, nil, nil, nil, nil, nil, 42, - nil, nil, 97, 96, 98, 87, 51, 89, 88, 90, - nil, 91, 99, 100, nil, 85, 86, 39, 40, 38, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 213, - nil, nil, 219, nil, nil, 53, 54, nil, nil, 55, - nil, nil, nil, nil, nil, 41, nil, nil, nil, nil, - nil, nil, nil, 218, nil, nil, nil, nil, 84, 76, - 79, 80, nil, 81, 82, nil, nil, nil, 77, 83, - nil, 69, 70, 66, nil, 52, 57, nil, 78, 58, - 59, nil, nil, nil, 62, nil, 60, 61, 63, 28, - 29, 67, 68, nil, nil, nil, nil, nil, 27, 26, - 25, 93, 92, 94, 95, nil, nil, 18, nil, nil, - nil, nil, nil, nil, 42, nil, nil, 97, 96, 98, - 87, 51, 89, 88, 90, nil, 91, 99, 100, nil, - 85, 86, 39, 40, 38, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 213, nil, nil, 219, nil, nil, - 53, 54, nil, nil, 55, nil, nil, nil, nil, nil, - 41, nil, nil, nil, nil, nil, nil, nil, 19, nil, - nil, nil, nil, 84, 76, 79, 80, nil, 81, 82, - nil, nil, nil, 77, 83, nil, 69, 70, 66, nil, - 52, 57, nil, 78, 58, 59, nil, nil, nil, 62, - nil, 60, 61, 63, 293, 294, 67, 68, nil, nil, - nil, nil, nil, 289, 290, 296, 93, 92, 94, 95, - nil, nil, 220, nil, nil, nil, nil, nil, nil, 42, - nil, nil, 97, 96, 98, 87, 51, 89, 88, 90, - nil, 91, 99, 100, nil, 85, 86, 39, 40, 38, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 213, - nil, nil, 219, nil, nil, 53, 54, nil, nil, 55, - nil, 608, nil, nil, nil, 41, nil, nil, nil, nil, - nil, nil, nil, 218, nil, nil, nil, nil, 84, 76, - 79, 80, nil, 81, 82, nil, nil, nil, 77, 83, - nil, 69, 70, 66, nil, 52, 57, nil, 78, 58, - 59, nil, nil, nil, 62, nil, 60, 61, 63, 293, - 294, 67, 68, nil, nil, nil, nil, nil, 289, 290, - 296, 93, 92, 94, 95, nil, nil, 220, nil, nil, - nil, nil, nil, nil, 42, nil, nil, 97, 96, 98, - 87, 51, 89, 88, 90, nil, 91, 99, 100, nil, - 85, 86, 39, 40, 38, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 213, nil, nil, 219, nil, nil, - 53, 54, nil, nil, 55, nil, nil, nil, nil, nil, - 41, nil, nil, nil, nil, nil, nil, nil, 218, nil, - nil, nil, nil, 84, 76, 79, 80, nil, 81, 82, - nil, nil, nil, 77, 83, nil, 69, 70, 66, nil, - 52, 57, nil, 78, 58, 59, nil, nil, nil, 62, - nil, 60, 61, 63, 293, 294, 67, 68, nil, nil, - nil, nil, nil, 289, 290, 296, 93, 92, 94, 95, - nil, nil, 220, nil, nil, nil, nil, nil, nil, 291, - nil, nil, 97, 96, 98, 87, 51, 89, 88, 90, - nil, 91, 99, 100, nil, 85, 86, nil, nil, 297, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 875, - nil, nil, 219, nil, nil, 53, 54, nil, nil, 55, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 84, 76, - 79, 80, nil, 81, 82, nil, nil, nil, 77, 83, - nil, 69, 70, 66, nil, 52, 57, nil, 78, 58, - 59, nil, nil, nil, 62, nil, 60, 61, 63, 293, - 294, 67, 68, nil, nil, nil, nil, nil, 289, 290, - 296, 93, 92, 94, 95, nil, nil, 220, nil, nil, - nil, nil, nil, nil, 42, nil, nil, 97, 96, 98, - 87, 51, 89, 88, 90, 272, 91, 99, 100, nil, - 85, 86, 39, 40, 38, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 213, nil, nil, 219, nil, nil, - 53, 54, nil, nil, 55, nil, 608, nil, 268, nil, - 41, nil, nil, nil, nil, nil, nil, nil, 218, nil, - nil, nil, nil, 84, 76, 79, 80, nil, 81, 82, - nil, nil, nil, 77, 83, nil, 69, 70, 66, nil, - 52, 57, nil, 78, 58, 59, nil, nil, nil, 62, - nil, 60, 61, 63, 293, 294, 67, 68, nil, nil, - nil, nil, nil, 289, 290, 296, 93, 92, 94, 95, - nil, nil, 220, nil, nil, nil, nil, nil, nil, 42, - nil, nil, 97, 96, 98, 87, 51, 89, 88, 90, - nil, 91, 99, 100, nil, 85, 86, 39, 40, 38, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 213, - nil, nil, 219, nil, nil, 53, 54, nil, nil, 55, - nil, 608, nil, 268, nil, 41, nil, nil, nil, nil, - nil, nil, nil, 218, nil, nil, nil, nil, 84, 76, - 79, 80, nil, 81, 82, nil, nil, nil, 77, 83, - nil, 69, 70, 66, nil, 52, 57, nil, 78, 58, - 59, nil, nil, nil, 62, nil, 60, 61, 63, 28, - 29, 67, 68, nil, nil, nil, nil, nil, 27, 26, - 25, 93, 92, 94, 95, nil, nil, 220, nil, nil, - nil, nil, nil, nil, 42, nil, nil, 97, 96, 98, - 87, 51, 89, 88, 90, 272, 91, 99, 100, nil, - 85, 86, 39, 40, 38, 228, 232, 237, 238, 239, - 234, 236, 244, 245, 240, 241, nil, 221, 222, nil, - nil, 242, 243, nil, 213, nil, nil, 219, nil, nil, - 53, 54, nil, nil, 55, nil, 270, 225, 268, 231, - 41, 227, 226, 223, 224, 235, 233, 229, 218, 230, - nil, nil, nil, 84, 76, 79, 80, nil, 81, 82, - nil, nil, nil, 77, 83, 209, 246, -403, nil, nil, - nil, 57, nil, 78, -403, -403, -403, nil, nil, -403, - -403, -403, nil, -403, nil, nil, nil, nil, nil, nil, - nil, nil, -403, -403, -403, nil, nil, nil, nil, nil, - nil, nil, nil, -403, -403, nil, -403, -403, -403, -403, - -403, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, -403, -403, -403, -403, -403, -403, -403, - -403, -403, -403, -403, -403, -403, -403, nil, nil, -403, - -403, -403, nil, nil, -403, nil, 252, -403, nil, nil, - -403, -403, nil, -403, nil, -403, nil, -403, nil, -403, - -403, -403, -403, -403, -403, -403, -293, -403, -403, -403, - nil, nil, nil, -293, -293, -293, nil, nil, -293, -293, - -293, nil, -293, -403, -403, nil, -403, nil, -403, nil, - nil, nil, -293, -293, nil, nil, nil, nil, nil, nil, - nil, nil, -293, -293, nil, -293, -293, -293, -293, -293, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, -293, -293, -293, -293, -293, -293, -293, -293, - -293, -293, -293, -293, -293, -293, nil, nil, -293, -293, - -293, nil, nil, -293, nil, 261, -293, nil, nil, -293, - -293, nil, -293, nil, -293, nil, -293, nil, -293, -293, - -293, -293, -293, -293, -293, -239, -293, nil, -293, nil, - nil, nil, -239, -239, -239, nil, nil, -239, -239, -239, - nil, -239, -293, -293, nil, -293, nil, -293, nil, nil, - -239, -239, -239, nil, nil, nil, nil, nil, nil, nil, - nil, -239, -239, nil, -239, -239, -239, -239, -239, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, -239, -239, -239, -239, -239, -239, -239, -239, -239, - -239, -239, -239, -239, -239, nil, nil, -239, -239, -239, - nil, nil, -239, nil, 252, -239, nil, nil, -239, -239, - nil, -239, nil, -239, nil, -239, nil, -239, -239, -239, - -239, -239, -239, -239, -239, -239, -239, -239, nil, nil, - nil, -239, -239, -239, nil, nil, -239, -239, -239, nil, - -239, -239, -239, nil, -239, nil, -239, nil, nil, nil, - -239, nil, nil, nil, nil, nil, nil, nil, nil, nil, - -239, -239, nil, -239, -239, -239, -239, -239, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, -239, - nil, nil, nil, nil, nil, nil, -239, -239, -239, nil, - nil, -239, -239, -239, nil, -239, nil, nil, nil, nil, - nil, -239, nil, nil, nil, -239, nil, nil, -239, nil, - nil, nil, nil, 252, -239, -239, -239, nil, -239, -239, - -239, -239, -239, nil, nil, nil, nil, nil, 394, 398, - nil, nil, 395, nil, nil, nil, -239, nil, nil, nil, - 149, 150, nil, 146, 128, 129, 130, 137, 134, 136, - -239, nil, 131, 132, nil, -239, -239, 151, 152, 138, - 139, nil, nil, -239, nil, nil, 252, nil, 252, -239, - nil, nil, nil, nil, 143, 142, nil, 127, 148, 145, - 144, 140, 141, 135, 133, 125, 147, 126, nil, nil, - 153, -239, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, -239, nil, nil, nil, nil, - -239, 164, 175, 165, 188, 161, 181, 171, 170, 191, - 192, 186, 169, 168, 163, 189, 193, 194, 173, 162, - 176, 180, 182, 174, 167, nil, nil, nil, 183, 190, - 185, 184, 177, 187, 172, 160, 179, 178, nil, nil, - nil, nil, nil, 159, 166, 157, 158, 154, 155, 156, - 116, 118, 115, nil, 117, nil, nil, nil, nil, nil, - nil, nil, 149, 150, nil, 146, 128, 129, 130, 137, - 134, 136, nil, nil, 131, 132, nil, nil, nil, 151, - 152, 138, 139, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 143, 142, nil, 127, - 148, 145, 144, 140, 141, 135, 133, 125, 147, 126, - nil, nil, 153, 84, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 83, 164, 175, 165, 188, 161, - 181, 171, 170, 191, 192, 186, 169, 168, 163, 189, - 193, 194, 173, 162, 176, 180, 182, 174, 167, nil, - nil, nil, 183, 190, 185, 184, 177, 187, 172, 160, - 179, 178, nil, nil, nil, nil, nil, 159, 166, 157, - 158, 154, 155, 156, 116, 118, nil, nil, 117, nil, - nil, nil, nil, nil, nil, nil, 149, 150, nil, 146, - 128, 129, 130, 137, 134, 136, nil, nil, 131, 132, - nil, nil, nil, 151, 152, 138, 139, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 143, 142, nil, 127, 148, 145, 144, 140, 141, 135, - 133, 125, 147, 126, nil, nil, 153, 84, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 83, 164, - 175, 165, 188, 161, 181, 171, 170, 191, 192, 186, - 169, 168, 163, 189, 193, 194, 173, 162, 176, 180, - 182, 174, 167, nil, nil, nil, 183, 190, 185, 184, - 177, 187, 172, 160, 179, 178, nil, nil, nil, nil, - nil, 159, 166, 157, 158, 154, 155, 156, 116, 118, - nil, nil, 117, nil, nil, nil, nil, nil, nil, nil, - 149, 150, nil, 146, 128, 129, 130, 137, 134, 136, - nil, nil, 131, 132, nil, nil, nil, 151, 152, 138, - 139, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 143, 142, nil, 127, 148, 145, - 144, 140, 141, 135, 133, 125, 147, 126, nil, nil, - 153, 84, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 83, 164, 175, 165, 188, 161, 181, 171, - 170, 191, 192, 186, 169, 168, 163, 189, 193, 194, - 173, 162, 176, 180, 182, 174, 167, nil, nil, nil, - 183, 190, 185, 184, 177, 187, 172, 160, 179, 178, - nil, nil, nil, nil, nil, 159, 166, 157, 158, 154, - 155, 156, 116, 118, nil, nil, 117, nil, nil, nil, - nil, nil, nil, nil, 149, 150, nil, 146, 128, 129, - 130, 137, 134, 136, nil, nil, 131, 132, nil, nil, - nil, 151, 152, 138, 139, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 143, 142, - nil, 127, 148, 145, 144, 140, 141, 135, 133, 125, - 147, 126, nil, nil, 153, 84, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 83, 164, 175, 165, - 188, 161, 181, 171, 170, 191, 192, 186, 169, 168, - 163, 189, 193, 194, 173, 162, 176, 180, 182, 174, - 167, nil, nil, nil, 183, 190, 185, 353, 352, 354, - 351, 160, 179, 178, nil, nil, nil, nil, nil, 159, - 166, 157, 158, 348, 349, 350, 346, 118, 89, 88, - 347, nil, 91, nil, nil, nil, nil, nil, 149, 150, - nil, 146, 128, 129, 130, 137, 134, 136, nil, nil, - 131, 132, nil, nil, nil, 151, 152, 138, 139, nil, - nil, nil, nil, nil, 358, nil, nil, nil, nil, nil, - nil, nil, 143, 142, nil, 127, 148, 145, 144, 140, - 141, 135, 133, 125, 147, 126, nil, nil, 153, 164, - 175, 165, 188, 161, 181, 171, 170, 191, 192, 186, - 169, 168, 163, 189, 193, 194, 173, 162, 176, 180, - 182, 174, 167, nil, nil, nil, 183, 190, 185, 184, - 177, 187, 172, 160, 179, 178, nil, nil, nil, nil, - nil, 159, 166, 157, 158, 154, 155, 156, 116, 118, - nil, nil, 117, nil, nil, nil, nil, nil, nil, nil, - 149, 150, nil, 146, 128, 129, 130, 137, 134, 136, - nil, nil, 131, 132, nil, nil, nil, 151, 152, 138, - 139, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 143, 142, nil, 127, 148, 145, - 144, 140, 141, 135, 133, 125, 147, 126, 401, 405, - 153, nil, 400, nil, nil, nil, nil, nil, nil, nil, - 149, 150, nil, 146, 128, 129, 130, 137, 134, 136, - nil, nil, 131, 132, nil, nil, nil, 151, 152, 138, - 139, nil, nil, nil, nil, nil, 252, nil, nil, nil, - nil, nil, nil, nil, 143, 142, nil, 127, 148, 145, - 144, 140, 141, 135, 133, 125, 147, 126, 450, 398, - 153, nil, 451, nil, nil, nil, nil, nil, nil, nil, - 149, 150, nil, 146, 128, 129, 130, 137, 134, 136, - nil, nil, 131, 132, nil, nil, nil, 151, 152, 138, - 139, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 143, 142, nil, 127, 148, 145, - 144, 140, 141, 135, 133, 125, 147, 126, 450, 398, - 153, nil, 451, nil, nil, nil, nil, nil, nil, nil, - 149, 150, nil, 146, 128, 129, 130, 137, 134, 136, - nil, nil, 131, 132, nil, nil, nil, 151, 152, 138, - 139, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 143, 142, nil, 127, 148, 145, - 144, 140, 141, 135, 133, 125, 147, 126, 579, 398, - 153, nil, 580, nil, nil, nil, nil, nil, nil, nil, - 149, 150, nil, 146, 128, 129, 130, 137, 134, 136, - nil, nil, 131, 132, nil, nil, nil, 151, 152, 138, - 139, nil, nil, nil, nil, nil, 252, nil, nil, nil, - nil, nil, nil, nil, 143, 142, nil, 127, 148, 145, - 144, 140, 141, 135, 133, 125, 147, 126, 581, 405, - 153, nil, 582, nil, nil, nil, nil, nil, nil, nil, - 149, 150, nil, 146, 128, 129, 130, 137, 134, 136, - nil, nil, 131, 132, nil, nil, nil, 151, 152, 138, - 139, nil, nil, nil, nil, nil, 252, nil, nil, nil, - nil, nil, nil, nil, 143, 142, nil, 127, 148, 145, - 144, 140, 141, 135, 133, 125, 147, 126, 617, 398, - 153, nil, 618, nil, nil, nil, nil, nil, nil, nil, - 149, 150, nil, 146, 128, 129, 130, 137, 134, 136, - nil, nil, 131, 132, nil, nil, nil, 151, 152, 138, - 139, nil, nil, nil, nil, nil, 252, nil, nil, nil, - nil, nil, nil, nil, 143, 142, nil, 127, 148, 145, - 144, 140, 141, 135, 133, 125, 147, 126, 620, 405, - 153, nil, 621, nil, nil, nil, nil, nil, nil, nil, - 149, 150, nil, 146, 128, 129, 130, 137, 134, 136, - nil, nil, 131, 132, nil, nil, nil, 151, 152, 138, - 139, nil, nil, nil, nil, nil, 252, nil, nil, nil, - nil, nil, nil, nil, 143, 142, nil, 127, 148, 145, - 144, 140, 141, 135, 133, 125, 147, 126, 579, 398, - 153, nil, 580, nil, nil, nil, nil, nil, nil, nil, - 149, 150, nil, 146, 128, 129, 130, 137, 134, 136, - nil, nil, 131, 132, nil, nil, nil, 151, 152, 138, - 139, nil, nil, nil, nil, nil, 252, nil, nil, nil, - nil, nil, nil, nil, 143, 142, nil, 127, 148, 145, - 144, 140, 141, 135, 133, 125, 147, 126, 581, 405, - 153, nil, 582, nil, nil, nil, nil, nil, nil, nil, - 149, 150, nil, 146, 128, 129, 130, 137, 134, 136, - nil, nil, 131, 132, nil, nil, nil, 151, 152, 138, - 139, nil, nil, nil, nil, nil, 252, nil, nil, nil, - nil, nil, nil, nil, 143, 142, nil, 127, 148, 145, - 144, 140, 141, 135, 133, 125, 147, 126, 673, 398, - 153, nil, 674, nil, nil, nil, nil, nil, nil, nil, - 149, 150, nil, 146, 128, 129, 130, 137, 134, 136, - nil, nil, 131, 132, nil, nil, nil, 151, 152, 138, - 139, nil, nil, nil, nil, nil, 252, nil, nil, nil, - nil, nil, nil, nil, 143, 142, nil, 127, 148, 145, - 144, 140, 141, 135, 133, 125, 147, 126, 675, 405, - 153, nil, 676, nil, nil, nil, nil, nil, nil, nil, - 149, 150, nil, 146, 128, 129, 130, 137, 134, 136, - nil, nil, 131, 132, nil, nil, nil, 151, 152, 138, - 139, nil, nil, nil, nil, nil, 252, nil, nil, nil, - nil, nil, nil, nil, 143, 142, nil, 127, 148, 145, - 144, 140, 141, 135, 133, 125, 147, 126, 678, 405, - 153, nil, 679, nil, nil, nil, nil, nil, nil, nil, - 149, 150, nil, 146, 128, 129, 130, 137, 134, 136, - nil, nil, 131, 132, nil, nil, nil, 151, 152, 138, - 139, nil, nil, nil, nil, nil, 252, nil, nil, nil, - nil, nil, nil, nil, 143, 142, nil, 127, 148, 145, - 144, 140, 141, 135, 133, 125, 147, 126, 450, 398, - 153, nil, 451, nil, nil, nil, nil, nil, nil, nil, - 149, 150, nil, 146, 128, 129, 130, 137, 134, 136, - nil, nil, 131, 132, nil, nil, nil, 151, 152, 138, - 139, nil, nil, nil, nil, nil, 252, nil, nil, nil, - nil, nil, nil, nil, 143, 142, nil, 127, 148, 145, - 144, 140, 141, 135, 133, 125, 147, 126, 927, 398, - 153, nil, 928, nil, nil, nil, nil, nil, nil, nil, - 149, 150, nil, 146, 128, 129, 130, 137, 134, 136, - nil, nil, 131, 132, nil, nil, nil, 151, 152, 138, - 139, nil, nil, nil, nil, nil, 252, nil, nil, nil, - nil, nil, nil, nil, 143, 142, nil, 127, 148, 145, - 144, 140, 141, 135, 133, 125, 147, 126, 929, 405, - 153, nil, 930, nil, nil, nil, nil, nil, nil, nil, - 149, 150, nil, 146, 128, 129, 130, 137, 134, 136, - nil, nil, 131, 132, nil, nil, nil, 151, 152, 138, - 139, nil, nil, nil, nil, nil, 252, nil, nil, nil, - nil, nil, nil, nil, 143, 142, nil, 127, 148, 145, - 144, 140, 141, 135, 133, 125, 147, 126, 949, 405, - 153, nil, 948, nil, nil, nil, nil, nil, nil, nil, - 149, 150, nil, 146, 128, 129, 130, 137, 134, 136, - nil, nil, 131, 132, nil, nil, nil, 151, 152, 138, - 139, nil, nil, nil, nil, nil, 252, nil, nil, nil, - nil, nil, nil, nil, 143, 142, nil, 127, 148, 145, - 144, 140, 141, 135, 133, 125, 147, 126, nil, nil, - 153, 228, 232, 237, 238, 239, 234, 236, 244, 245, - 240, 241, nil, 221, 222, nil, nil, 242, 243, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 225, nil, 231, nil, 227, 226, 223, - 224, 235, 233, 229, nil, 230, nil, 228, 232, 237, - 238, 239, 234, 236, 244, 245, 240, 241, nil, 221, - 222, nil, 246, 242, 243, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 225, - nil, 231, nil, 227, 226, 223, 224, 235, 233, 229, - nil, 230, nil, 228, 232, 237, 238, 239, 234, 236, - 244, 245, 240, 241, nil, 221, 222, nil, 246, 242, - 243, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 225, nil, 231, nil, 227, - 226, 223, 224, 235, 233, 229, nil, 230, nil, 228, - 232, 237, 238, 239, 234, 236, 244, 245, 240, 241, - nil, 221, 222, nil, 246, 242, 243, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 225, nil, 231, nil, 227, 226, 223, 224, 235, - 233, 229, nil, 230, nil, 228, 232, 237, 238, 239, - 234, 236, 244, 245, 240, 241, nil, 221, 222, nil, - 246, 242, 243, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 225, nil, 231, - nil, 227, 226, 223, 224, 235, 233, 229, nil, 230, - nil, 228, 232, 237, 238, 239, 234, 236, 244, 245, - 240, 241, nil, 221, 222, nil, 246, 242, 243, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 225, nil, 231, nil, 227, 226, 223, - 224, 235, 233, 229, nil, 230, nil, 228, 232, 237, - 238, 239, 234, 236, 244, 245, 240, 241, nil, 221, - 222, nil, 246, 242, 243, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 225, - nil, 231, nil, 227, 226, 223, 224, 235, 233, 229, - nil, 230, nil, 228, 232, 237, 238, 239, 234, 236, - 244, 245, 240, 241, nil, 221, 222, nil, 246, 242, - 243, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 225, nil, 231, nil, 227, - 226, 223, 224, 235, 233, 229, nil, 230, nil, 228, - 232, 237, 238, 239, 234, 236, 244, 245, 240, 241, - nil, 221, 222, nil, 246, 242, 243, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 225, nil, 231, nil, 227, 226, 223, 224, 235, - 233, 229, nil, 230, nil, 228, 232, 237, 238, 239, - 234, 236, 244, 245, 240, 241, nil, 221, 222, nil, - 246, 242, 243, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 225, nil, 231, - nil, 227, 226, 223, 224, 235, 233, 229, nil, 230, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 246 ] - -racc_action_check = [ - 87, 0, 0, 0, 0, 0, 0, 87, 87, 87, - 0, 0, 87, 87, 87, 0, 87, 0, 0, 0, - 0, 0, 0, 0, 87, 56, 87, 87, 87, 0, - 0, 0, 0, 0, 0, 0, 87, 87, 0, 87, - 87, 87, 87, 87, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 342, 0, 0, 0, - 322, 0, 0, 0, 0, 0, 87, 87, 87, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, - 1, 597, 87, 87, 87, 0, 87, 87, 0, 329, - 87, 0, 0, 87, 87, 0, 87, 0, 87, 364, - 87, 0, 87, 87, 87, 87, 87, 87, 87, 0, - 87, 56, 87, 332, 0, 0, 0, 0, 18, 0, - 0, 7, 524, 597, 0, 0, 87, 87, 87, 87, - 90, 87, 0, 87, 0, 87, 638, 90, 90, 90, - 212, 15, 90, 90, 90, 516, 90, 338, 323, 617, - 10, 338, 671, 448, 90, 18, 90, 90, 90, 673, - 313, 342, 364, 313, 11, 674, 90, 90, 517, 90, - 90, 90, 90, 90, 322, 753, 853, 927, 928, 322, - 788, 342, 536, 536, 15, 951, 342, 448, 3, 212, - 15, 459, 12, 3, 329, 214, 90, 90, 90, 90, - 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, - 412, 412, 90, 90, 90, 617, 90, 90, 332, 13, - 90, 929, 618, 90, 90, 459, 90, 524, 90, 21, - 90, 789, 90, 90, 90, 90, 90, 90, 90, 400, - 90, 638, 90, 35, 214, 516, 400, 400, 400, 460, - 516, 617, 400, 400, 617, 400, 90, 90, 90, 90, - 617, 90, 323, 90, 673, 90, 671, 323, 517, 671, - 674, 671, 536, 517, 24, 400, 400, 536, 400, 400, - 400, 400, 400, 460, 37, 788, 292, 675, 618, 753, - 853, 927, 928, 676, 753, 853, 927, 928, 929, 951, - 412, 858, 42, 858, 951, 400, 400, 400, 400, 400, - 400, 400, 400, 400, 400, 400, 400, 400, 400, 542, - 542, 400, 400, 400, 618, 400, 36, 618, 101, 400, - 418, 789, 400, 618, 360, 929, 789, 400, 24, 400, - 929, 400, 400, 400, 400, 400, 400, 400, 401, 400, - 292, 400, 675, 628, 628, 401, 401, 401, 676, 650, - 24, 401, 401, 579, 401, 400, 400, 594, 400, 36, - 400, 23, 292, 401, 400, 36, 336, 746, 23, 418, - 314, 16, 16, 314, 401, 401, 346, 401, 401, 401, - 401, 401, 675, 346, 195, 360, 360, 360, 676, 732, - 774, 594, 774, 774, 774, 774, 774, 650, 361, 542, - 317, 213, 579, 317, 401, 401, 401, 401, 401, 401, - 401, 401, 401, 401, 401, 401, 401, 401, 336, 746, - 401, 401, 401, 215, 401, 336, 746, 216, 401, 580, - 336, 401, 362, 628, 336, 746, 401, 732, 401, 220, - 401, 401, 401, 401, 401, 401, 401, 74, 401, 401, - 401, 363, 336, 746, 38, 38, 74, 337, 620, 361, - 361, 361, 723, 581, 401, 401, 74, 401, 774, 401, - 581, 581, 581, 401, 347, 581, 581, 581, 580, 581, - 901, 347, 901, 901, 901, 901, 901, 424, 581, 581, - 581, 581, 115, 362, 362, 362, 678, 115, 115, 581, - 581, 348, 581, 581, 581, 581, 581, 251, 348, 337, - 620, 723, 363, 363, 363, 553, 337, 620, 365, 424, - 349, 337, 620, 424, 424, 337, 620, 349, 265, 581, - 581, 581, 581, 581, 581, 581, 581, 581, 581, 581, - 581, 581, 581, 337, 620, 581, 581, 581, 678, 581, - 581, 297, 297, 581, 301, 678, 581, 581, 901, 581, - 678, 581, 266, 581, 678, 581, 581, 581, 581, 581, - 581, 581, 612, 581, 581, 581, 553, 553, 612, 365, - 365, 365, 678, 269, 637, 553, 443, 637, 394, 581, - 581, 581, 581, 582, 581, 395, 581, 301, 581, 566, - 582, 582, 582, 301, 278, 582, 582, 582, 587, 582, - 587, 587, 587, 587, 587, 425, 311, 311, 443, 582, - 582, 582, 443, 443, 443, 443, 321, 321, 280, 582, - 582, 394, 582, 582, 582, 582, 582, 394, 395, 350, - 662, 662, 566, 351, 395, 587, 350, 425, 566, 281, - 351, 425, 425, 275, 587, 587, 587, 587, 275, 582, - 582, 582, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, 582, 282, 14, 582, 582, 582, 43, 582, - 582, 14, 287, 582, 290, 43, 582, 582, 587, 582, - 14, 582, 291, 582, 43, 582, 582, 582, 582, 582, - 582, 582, 296, 582, 298, 582, 302, 639, 352, 639, - 639, 639, 639, 639, 303, 352, 353, 306, 354, 582, - 582, 582, 582, 353, 582, 354, 582, 309, 582, 31, - 31, 31, 31, 31, 31, 356, 326, 310, 31, 31, - 315, 326, 356, 31, 639, 31, 31, 31, 31, 31, - 31, 31, 316, 639, 639, 639, 639, 31, 31, 31, - 31, 31, 31, 31, 546, 546, 31, 318, 546, 546, - 546, 383, 31, 31, 327, 31, 31, 31, 31, 31, - 31, 31, 31, 31, 328, 31, 31, 31, 331, 31, - 31, 31, 31, 31, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 211, 383, 383, 285, 535, - 383, 383, 211, 31, 535, 285, 31, 683, 333, 31, - 31, 211, 683, 31, 285, 31, 383, 374, 383, 31, - 383, 383, 383, 383, 383, 383, 383, 31, 383, 941, - 941, 689, 31, 31, 31, 31, 689, 31, 31, 444, - 380, 286, 31, 31, 386, 383, 51, 383, 286, 388, - 31, 392, 31, 51, 51, 51, 402, 286, 51, 51, - 51, 511, 51, 511, 511, 511, 511, 511, 414, 426, - 427, 444, 51, 51, 51, 444, 444, 444, 444, 428, - 429, 455, 51, 51, 461, 51, 51, 51, 51, 51, - 850, 474, 850, 850, 850, 850, 850, 475, 511, 511, - 902, 478, 902, 902, 902, 902, 902, 511, 511, 511, - 511, 480, 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 485, 850, 51, 51, - 51, 288, 489, 51, 498, 501, 51, 902, 288, 51, - 51, 513, 51, 518, 51, 519, 51, 288, 51, 51, - 51, 51, 51, 51, 51, 304, 51, 550, 51, 556, - 330, 563, 304, 567, 570, 575, 583, 330, 585, 598, - 600, 304, 51, 51, 51, 51, 330, 51, 605, 51, - 52, 52, 52, 52, 52, 52, 607, 614, 340, 52, - 52, 616, 619, 622, 52, 340, 52, 52, 52, 52, - 52, 52, 52, 623, 340, 626, 627, 629, 52, 52, - 52, 52, 52, 52, 52, 632, 653, 52, 653, 653, - 653, 653, 653, 52, 52, 633, 52, 52, 52, 52, - 52, 52, 52, 52, 52, 641, 52, 52, 52, 642, - 52, 52, 52, 52, 52, 771, 643, 771, 771, 771, - 771, 771, 766, 653, 766, 766, 766, 766, 766, 484, - 651, 527, 653, 658, 52, 661, 484, 52, 527, 664, - 52, 52, 669, 672, 52, 484, 52, 527, 681, 686, - 52, 810, 771, 810, 810, 810, 810, 810, 52, 766, - 704, 771, 725, 52, 52, 52, 52, 726, 52, 52, - 766, 766, 727, 52, 52, 113, 113, 113, 113, 113, - 113, 52, 729, 52, 113, 113, 730, 734, 810, 113, - 739, 113, 113, 113, 113, 113, 113, 113, 740, 810, - 810, 741, 745, 113, 113, 113, 113, 113, 113, 113, - 760, 848, 113, 848, 848, 848, 848, 848, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 767, 113, 113, 113, 773, 113, 113, 113, 113, 113, - 938, 775, 938, 938, 938, 938, 938, 893, 848, 893, - 893, 893, 893, 893, 829, 776, 621, 848, 779, 113, - 782, 829, 113, 621, 791, 113, 113, 795, 621, 113, - 829, 113, 621, 796, 799, 113, 895, 938, 895, 895, - 895, 895, 895, 113, 893, 800, 812, 813, 113, 113, - 113, 113, 819, 113, 113, 893, 893, 820, 113, 113, - 197, 197, 197, 197, 197, 197, 113, 822, 113, 197, - 197, 826, 831, 895, 197, 836, 197, 197, 197, 197, - 197, 197, 197, 837, 895, 895, 838, 841, 197, 197, - 197, 197, 197, 197, 197, 842, 940, 197, 940, 940, - 940, 940, 940, 197, 197, 844, 197, 197, 197, 197, - 197, 197, 197, 197, 197, 847, 197, 197, 197, 849, - 197, 197, 197, 197, 197, 957, 855, 957, 957, 957, - 957, 957, 897, 940, 897, 897, 897, 897, 897, 830, - 856, 679, 832, 861, 197, 866, 830, 197, 679, 832, - 197, 197, 867, 679, 197, 830, 197, 679, 832, 868, - 197, 916, 957, 916, 916, 916, 916, 916, 197, 897, - 869, 871, 875, 197, 197, 197, 197, 882, 197, 197, - 897, 897, 887, 197, 197, 219, 219, 219, 219, 219, - 219, 197, 888, 197, 219, 219, 903, 924, 916, 219, - 926, 219, 219, 219, 219, 219, 219, 219, 933, 916, - 916, 934, 935, 219, 219, 219, 219, 219, 219, 219, - 936, 731, 219, 731, 731, 731, 937, 731, 219, 219, - 939, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 942, 219, 219, 219, 943, 219, 219, 219, 219, 219, - 873, 874, 873, 873, 873, 944, 873, 918, 874, 918, - 918, 918, 918, 918, 886, 945, 930, 874, 946, 219, - 947, 886, 219, 930, 948, 219, 219, 949, 930, 219, - 886, 219, 930, 958, 967, 219, 953, 968, 953, 953, - 953, 953, 953, 219, 918, 969, nil, nil, 219, 219, - 219, 219, nil, 219, 219, 918, 918, nil, 219, 219, - 279, 279, 279, 279, 279, 279, 219, nil, 219, 279, - 279, nil, nil, 953, 279, nil, 279, 279, 279, 279, - 279, 279, 279, nil, 953, 953, nil, nil, 279, 279, - 279, 279, 279, 279, 279, nil, nil, 279, 6, 6, - 6, 6, 6, 279, 279, nil, 279, 279, 279, 279, - 279, 279, 279, 279, 279, nil, 279, 279, 279, nil, - 279, 279, 279, 279, 279, 430, 276, 276, 276, 276, - 276, nil, 963, nil, 963, 963, 963, 963, 963, nil, - nil, 430, 430, nil, 279, nil, nil, 279, nil, nil, - 279, 279, nil, nil, 279, nil, 279, 430, nil, 430, - 279, 430, 430, 430, 430, nil, nil, nil, 279, 963, - nil, nil, nil, 279, 279, 279, 279, nil, 279, 279, - 963, 963, nil, 279, 279, 284, 284, 284, 284, 284, - 284, 279, nil, 279, 284, 284, nil, nil, nil, 284, - nil, 284, 284, 284, 284, 284, 284, 284, 473, 473, - 473, 473, 473, 284, 284, 284, 284, 284, 284, 284, - nil, nil, 284, nil, nil, nil, nil, 391, 284, 284, - nil, 284, 284, 284, 284, 284, 284, 284, 284, 284, - nil, 284, 284, 284, nil, 284, 284, 284, 284, 284, - 391, 391, 391, 391, 391, 391, 391, 391, 391, 391, - 391, nil, 391, 391, nil, nil, 391, 391, nil, 284, - nil, nil, 284, nil, nil, 284, 284, nil, nil, 284, - nil, 284, 391, nil, 391, 284, 391, 391, 391, 391, - 391, 391, 391, 284, 391, nil, nil, nil, 284, 284, - 284, 284, nil, 284, 284, nil, nil, nil, 284, 284, - nil, 391, 405, nil, nil, nil, 284, nil, 284, 405, - 405, 405, nil, nil, 405, 405, 405, 538, 405, 538, - 538, 538, 538, 538, nil, nil, nil, 405, 405, 405, - 405, 611, 611, 611, 611, 611, nil, nil, 405, 405, - nil, 405, 405, 405, 405, 405, nil, nil, nil, nil, - nil, nil, nil, nil, 538, 538, nil, nil, nil, nil, - nil, nil, nil, 538, 538, 538, 538, nil, 405, 405, - 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, - 405, 405, nil, nil, 405, 405, 405, nil, nil, 405, - nil, nil, 405, nil, nil, 405, 405, nil, 405, nil, - 405, nil, 405, nil, 405, 405, 405, 405, 405, 405, - 405, 406, 405, 405, 405, nil, nil, nil, 406, 406, - 406, nil, nil, 406, 406, 406, 434, 406, 405, 405, - 405, 405, nil, 405, nil, 405, 406, 406, 406, 406, - nil, nil, 434, 434, nil, nil, nil, 406, 406, nil, - 406, 406, 406, 406, 406, nil, nil, nil, 434, nil, - 434, nil, 434, 434, 434, 434, nil, nil, 434, nil, - 434, nil, nil, nil, nil, nil, nil, 406, 406, 406, - 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, - 406, nil, nil, 406, 406, 406, nil, nil, 406, nil, - nil, 406, nil, nil, 406, 406, nil, 406, nil, 406, - nil, 406, nil, 406, 406, 406, 406, 406, 406, 406, - nil, 406, 406, 406, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 406, 406, 406, - 406, nil, 406, nil, 406, 512, 512, 512, 512, 512, - 512, nil, nil, nil, 512, 512, nil, nil, nil, 512, - nil, 512, 512, 512, 512, 512, 512, 512, nil, nil, - nil, nil, nil, 512, 512, 512, 512, 512, 512, 512, - nil, nil, 512, nil, nil, nil, nil, nil, 512, 512, - nil, 512, 512, 512, 512, 512, 512, 512, 512, 512, - nil, 512, 512, 512, nil, 512, 512, 512, 512, 512, - 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, - 422, nil, 422, 422, nil, nil, 422, 422, nil, 512, - nil, nil, 512, nil, nil, 512, 512, nil, nil, 512, - nil, 512, 422, nil, 422, 512, 422, 422, 422, 422, - 422, 422, 422, 512, 422, nil, nil, nil, 512, 512, - 512, 512, nil, 512, 512, nil, nil, nil, 512, 512, - 515, 515, 515, 515, 515, 515, 512, nil, 512, 515, - 515, nil, nil, nil, 515, nil, 515, 515, 515, 515, - 515, 515, 515, nil, nil, nil, nil, nil, 515, 515, - 515, 515, 515, 515, 515, nil, nil, 515, nil, nil, - nil, nil, nil, 515, 515, nil, 515, 515, 515, 515, - 515, 515, 515, 515, 515, nil, 515, 515, 515, nil, - 515, 515, 515, 515, 515, 423, 423, 423, 423, 423, - 423, 423, 423, 423, 423, 423, nil, 423, 423, nil, - nil, 423, 423, nil, 515, nil, nil, 515, nil, nil, - 515, 515, nil, nil, 515, nil, 515, 423, nil, 423, - 515, 423, 423, 423, 423, 423, 423, 423, 515, 423, - nil, nil, nil, 515, 515, 515, 515, nil, 515, 515, - nil, nil, nil, 515, 515, 537, 537, 537, 537, 537, - 537, 515, nil, 515, 537, 537, nil, nil, nil, 537, - nil, 537, 537, 537, 537, 537, 537, 537, nil, nil, - nil, nil, nil, 537, 537, 537, 537, 537, 537, 537, - nil, nil, 537, nil, nil, nil, nil, nil, 537, 537, - nil, 537, 537, 537, 537, 537, 537, 537, 537, 537, - nil, 537, 537, 537, nil, 537, 537, 537, 537, 537, - 433, 433, 433, 433, 433, 433, 433, nil, nil, 433, - 433, nil, nil, nil, nil, nil, 433, 433, nil, 537, - nil, nil, 537, nil, nil, 537, 537, nil, nil, 537, - nil, 537, 433, nil, 433, 537, 433, 433, 433, 433, - 433, 433, 433, 537, 433, nil, nil, nil, 537, 537, - 537, 537, nil, 537, 537, nil, nil, nil, 537, 537, - 589, 589, 589, 589, 589, 589, 537, nil, 537, 589, - 589, nil, nil, nil, 589, nil, 589, 589, 589, 589, - 589, 589, 589, nil, nil, nil, nil, nil, 589, 589, - 589, 589, 589, 589, 589, nil, nil, 589, nil, nil, - nil, nil, nil, 589, 589, nil, 589, 589, 589, 589, - 589, 589, 589, 589, 589, nil, 589, 589, 589, nil, - 589, 589, 589, 589, 589, 435, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 435, 435, nil, 589, nil, nil, 589, nil, nil, - 589, 589, nil, nil, 589, nil, 589, 435, nil, 435, - 589, 435, 435, 435, 435, nil, nil, 435, 589, 435, - nil, nil, nil, 589, 589, 589, 589, nil, 589, 589, - nil, nil, nil, 589, 589, 602, 602, 602, 602, 602, - 602, 589, nil, 589, 602, 602, nil, nil, nil, 602, - nil, 602, 602, 602, 602, 602, 602, 602, nil, nil, - nil, nil, nil, 602, 602, 602, 602, 602, 602, 602, - nil, nil, 602, nil, nil, nil, nil, nil, 602, 602, - nil, 602, 602, 602, 602, 602, 602, 602, 602, 602, - nil, 602, 602, 602, nil, 602, 602, 602, 602, 602, - 436, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 436, 436, nil, 602, - nil, nil, 602, nil, nil, 602, 602, nil, nil, 602, - nil, 602, 436, nil, 436, 602, 436, 436, 436, 436, - nil, nil, 436, 602, 436, nil, nil, nil, 602, 602, - 602, 602, nil, 602, 602, nil, nil, nil, 602, 602, - 603, 603, 603, 603, 603, 603, 602, nil, 602, 603, - 603, nil, nil, nil, 603, nil, 603, 603, 603, 603, - 603, 603, 603, nil, nil, nil, nil, nil, 603, 603, - 603, 603, 603, 603, 603, nil, nil, 603, nil, nil, - nil, nil, nil, 603, 603, nil, 603, 603, 603, 603, - 603, 603, 603, 603, 603, nil, 603, 603, 603, nil, - 603, 603, 603, 603, 603, 437, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 437, 437, nil, 603, nil, nil, 603, nil, nil, - 603, 603, nil, nil, 603, nil, 603, 437, nil, 437, - 603, 437, 437, 437, 437, nil, nil, 437, 603, 437, - nil, nil, nil, 603, 603, 603, 603, nil, 603, 603, - nil, nil, nil, 603, 603, 631, 631, 631, 631, 631, - 631, 603, nil, 603, 631, 631, nil, nil, nil, 631, - nil, 631, 631, 631, 631, 631, 631, 631, nil, nil, - nil, nil, nil, 631, 631, 631, 631, 631, 631, 631, - nil, nil, 631, nil, nil, nil, nil, nil, 631, 631, - nil, 631, 631, 631, 631, 631, 631, 631, 631, 631, - nil, 631, 631, 631, nil, 631, 631, 631, 631, 631, - 438, 438, 438, 438, 438, 438, 438, nil, nil, 438, - 438, nil, nil, nil, nil, nil, 438, 438, nil, 631, - nil, nil, 631, nil, nil, 631, 631, nil, nil, 631, - nil, 631, 438, nil, 438, 631, 438, 438, 438, 438, - 438, 438, 438, 631, 438, nil, nil, nil, 631, 631, - 631, 631, nil, 631, 631, nil, nil, nil, 631, 631, - 682, 682, 682, 682, 682, 682, 631, nil, 631, 682, - 682, nil, nil, nil, 682, nil, 682, 682, 682, 682, - 682, 682, 682, nil, nil, nil, nil, nil, 682, 682, - 682, 682, 682, 682, 682, nil, nil, 682, nil, nil, - nil, nil, nil, 682, 682, nil, 682, 682, 682, 682, - 682, 682, 682, 682, 682, nil, 682, 682, 682, nil, - 682, 682, 682, 682, 682, 439, 439, 439, 439, 439, - 439, 439, nil, nil, 439, 439, nil, nil, nil, nil, - nil, 439, 439, nil, 682, nil, nil, 682, nil, nil, - 682, 682, nil, nil, 682, nil, 682, 439, nil, 439, - 682, 439, 439, 439, 439, 439, 439, 439, 682, 439, - nil, nil, nil, 682, 682, 682, 682, nil, 682, 682, - nil, nil, nil, 682, 682, 687, 687, 687, 687, 687, - 687, 682, nil, 682, 687, 687, nil, nil, nil, 687, - nil, 687, 687, 687, 687, 687, 687, 687, nil, nil, - nil, nil, nil, 687, 687, 687, 687, 687, 687, 687, - nil, nil, 687, nil, nil, nil, nil, nil, 687, 687, - nil, 687, 687, 687, 687, 687, 687, 687, 687, 687, - nil, 687, 687, 687, nil, 687, 687, 687, 687, 687, - 440, 440, 440, 440, 440, 440, 440, nil, nil, 440, - 440, nil, nil, nil, nil, nil, 440, 440, nil, 687, - nil, nil, 687, nil, nil, 687, 687, nil, nil, 687, - nil, 687, 440, nil, 440, 687, 440, 440, 440, 440, - 440, 440, 440, 687, 440, nil, nil, nil, 687, 687, - 687, 687, nil, 687, 687, nil, nil, nil, 687, 687, - 697, 697, 697, 697, 697, 697, 687, nil, 687, 697, - 697, nil, nil, nil, 697, nil, 697, 697, 697, 697, - 697, 697, 697, nil, nil, nil, nil, nil, 697, 697, - 697, 697, 697, 697, 697, nil, nil, 697, nil, nil, - nil, nil, nil, 697, 697, nil, 697, 697, 697, 697, - 697, 697, 697, 697, 697, nil, 697, 697, 697, nil, - 697, 697, 697, 697, 697, 441, 441, 441, 441, 441, - 441, 441, nil, nil, 441, 441, nil, nil, nil, nil, - nil, 441, 441, nil, 697, nil, nil, 697, nil, nil, - 697, 697, nil, nil, 697, nil, 697, 441, nil, 441, - 697, 441, 441, 441, 441, 441, 441, 441, 697, 441, - nil, nil, nil, 697, 697, 697, 697, nil, 697, 697, - nil, nil, nil, 697, 697, 735, 735, 735, 735, 735, - 735, 697, nil, 697, 735, 735, nil, nil, nil, 735, - nil, 735, 735, 735, 735, 735, 735, 735, nil, nil, - nil, nil, nil, 735, 735, 735, 735, 735, 735, 735, - nil, nil, 735, nil, nil, nil, nil, nil, 735, 735, - nil, 735, 735, 735, 735, 735, 735, 735, 735, 735, - nil, 735, 735, 735, nil, 735, 735, 735, 735, 735, - 442, 442, 442, 442, 442, 442, 442, nil, nil, 442, - 442, nil, nil, nil, nil, nil, 442, 442, nil, 735, - nil, nil, 735, nil, nil, 735, 735, nil, nil, 735, - nil, 735, 442, nil, 442, 735, 442, 442, 442, 442, - 442, 442, 442, 735, 442, nil, nil, nil, 735, 735, - 735, 735, nil, 735, 735, nil, nil, nil, 735, 735, - 750, 750, 750, 750, 750, 750, 735, nil, 735, 750, - 750, nil, nil, nil, 750, nil, 750, 750, 750, 750, - 750, 750, 750, nil, nil, nil, nil, nil, 750, 750, - 750, 750, 750, 750, 750, nil, nil, 750, nil, nil, - nil, nil, nil, 750, 750, nil, 750, 750, 750, 750, - 750, 750, 750, 750, 750, nil, 750, 750, 750, nil, - 750, 750, 750, 750, 750, 445, 445, 445, 445, 445, - 445, 445, nil, nil, 445, 445, nil, nil, nil, nil, - nil, 445, 445, nil, 750, nil, nil, 750, nil, nil, - 750, 750, nil, nil, 750, nil, 750, 445, nil, 445, - 750, 445, 445, 445, 445, 445, 445, 445, 750, 445, - nil, nil, nil, 750, 750, 750, 750, nil, 750, 750, - nil, nil, nil, 750, 750, 783, 783, 783, 783, 783, - 783, 750, nil, 750, 783, 783, nil, nil, nil, 783, - nil, 783, 783, 783, 783, 783, 783, 783, nil, nil, - nil, nil, nil, 783, 783, 783, 783, 783, 783, 783, - nil, nil, 783, nil, nil, nil, nil, nil, 783, 783, - nil, 783, 783, 783, 783, 783, 783, 783, 783, 783, - nil, 783, 783, 783, nil, 783, 783, 783, 783, 783, - 446, 446, 446, 446, 446, 446, 446, 446, nil, 446, - 446, nil, nil, nil, nil, nil, 446, 446, nil, 783, - nil, nil, 783, nil, nil, 783, 783, nil, nil, 783, - nil, 783, 446, nil, 446, 783, 446, 446, 446, 446, - 446, 446, 446, 783, 446, nil, nil, nil, 783, 783, - 783, 783, nil, 783, 783, nil, nil, nil, 783, 783, - 784, 784, 784, 784, 784, 784, 783, nil, 783, 784, - 784, nil, nil, nil, 784, nil, 784, 784, 784, 784, - 784, 784, 784, nil, nil, nil, nil, nil, 784, 784, - 784, 784, 784, 784, 784, nil, nil, 784, nil, nil, - nil, nil, nil, 784, 784, nil, 784, 784, 784, 784, - 784, 784, 784, 784, 784, nil, 784, 784, 784, nil, - 784, 784, 784, 784, 784, 431, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 431, 431, nil, 784, nil, nil, 784, nil, nil, - 784, 784, nil, nil, 784, nil, 784, 431, nil, 431, - 784, 431, 431, 431, 431, nil, nil, nil, 784, nil, - nil, nil, nil, 784, 784, 784, 784, nil, 784, 784, - nil, nil, nil, 784, 784, 787, 787, 787, 787, 787, - 787, 784, nil, 784, 787, 787, nil, nil, nil, 787, - nil, 787, 787, 787, 787, 787, 787, 787, nil, nil, - nil, nil, nil, 787, 787, 787, 787, 787, 787, 787, - nil, nil, 787, nil, nil, nil, nil, nil, 787, 787, - nil, 787, 787, 787, 787, 787, 787, 787, 787, 787, - nil, 787, 787, 787, nil, 787, 787, 787, 787, 787, - 432, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 432, 432, nil, 787, - nil, nil, 787, nil, nil, 787, 787, nil, nil, 787, - nil, 787, 432, nil, nil, 787, 432, 432, 432, 432, - nil, nil, nil, 787, nil, nil, nil, nil, 787, 787, - 787, 787, nil, 787, 787, nil, nil, nil, 787, 787, - 793, 793, 793, 793, 793, 793, 787, nil, 787, 793, - 793, nil, nil, nil, 793, nil, 793, 793, 793, 793, - 793, 793, 793, nil, nil, nil, nil, nil, 793, 793, - 793, 793, 793, 793, 793, nil, nil, 793, nil, nil, - nil, nil, nil, 793, 793, nil, 793, 793, 793, 793, - 793, 793, 793, 793, 793, nil, 793, 793, 793, nil, - 793, 793, 793, 793, 793, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 793, nil, nil, 793, nil, nil, - 793, 793, nil, nil, 793, nil, 793, nil, nil, nil, - 793, nil, nil, nil, nil, nil, nil, nil, 793, nil, - nil, nil, nil, 793, 793, 793, 793, nil, 793, 793, - nil, nil, nil, 793, 793, 828, 828, 828, 828, 828, - 828, 793, nil, 793, 828, 828, nil, nil, nil, 828, - nil, 828, 828, 828, 828, 828, 828, 828, nil, nil, - nil, nil, nil, 828, 828, 828, 828, 828, 828, 828, - nil, nil, 828, nil, nil, nil, nil, nil, 828, 828, - nil, 828, 828, 828, 828, 828, 828, 828, 828, 828, - nil, 828, 828, 828, nil, 828, 828, 828, 828, 828, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 828, - nil, nil, 828, nil, nil, 828, 828, nil, nil, 828, - nil, 828, nil, nil, nil, 828, nil, nil, nil, nil, - nil, nil, nil, 828, nil, nil, nil, nil, 828, 828, - 828, 828, nil, 828, 828, nil, nil, nil, 828, 828, - 834, 834, 834, 834, 834, 834, 828, nil, 828, 834, - 834, nil, nil, nil, 834, nil, 834, 834, 834, 834, - 834, 834, 834, nil, nil, nil, nil, nil, 834, 834, - 834, 834, 834, 834, 834, nil, nil, 834, nil, nil, - nil, nil, nil, 834, 834, nil, 834, 834, 834, 834, - 834, 834, 834, 834, 834, nil, 834, 834, 834, nil, - 834, 834, 834, 834, 834, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 834, nil, nil, 834, nil, nil, - 834, 834, nil, nil, 834, nil, 834, nil, nil, nil, - 834, nil, nil, nil, nil, nil, nil, nil, 834, nil, - nil, nil, nil, 834, 834, 834, 834, nil, 834, 834, - nil, nil, nil, 834, 834, 835, 835, 835, 835, 835, - 835, 834, nil, 834, 835, 835, nil, nil, nil, 835, - nil, 835, 835, 835, 835, 835, 835, 835, nil, nil, - nil, nil, nil, 835, 835, 835, 835, 835, 835, 835, - nil, nil, 835, nil, nil, nil, nil, nil, 835, 835, - nil, 835, 835, 835, 835, 835, 835, 835, 835, 835, - nil, 835, 835, 835, nil, 835, 835, 835, 835, 835, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 835, - nil, nil, 835, nil, nil, 835, 835, nil, nil, 835, - nil, 835, nil, nil, nil, 835, nil, nil, nil, nil, - nil, nil, nil, 835, nil, nil, nil, nil, 835, 835, - 835, 835, nil, 835, 835, nil, nil, nil, 835, 835, - 904, 904, 904, 904, 904, 904, 835, nil, 835, 904, - 904, nil, nil, nil, 904, nil, 904, 904, 904, 904, - 904, 904, 904, nil, nil, nil, nil, nil, 904, 904, - 904, 904, 904, 904, 904, nil, nil, 904, nil, nil, - nil, nil, nil, 904, 904, nil, 904, 904, 904, 904, - 904, 904, 904, 904, 904, nil, 904, 904, 904, nil, - 904, 904, 904, 904, 904, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 904, nil, nil, 904, nil, nil, - 904, 904, nil, nil, 904, nil, 904, nil, nil, nil, - 904, nil, nil, nil, nil, nil, nil, nil, 904, nil, - nil, nil, nil, 904, 904, 904, 904, nil, 904, 904, - nil, nil, nil, 904, 904, 910, 910, 910, 910, 910, - 910, 904, nil, 904, 910, 910, nil, nil, nil, 910, - nil, 910, 910, 910, 910, 910, 910, 910, nil, nil, - nil, nil, nil, 910, 910, 910, 910, 910, 910, 910, - nil, nil, 910, nil, nil, nil, nil, nil, 910, 910, - nil, 910, 910, 910, 910, 910, 910, 910, 910, 910, - nil, 910, 910, 910, nil, 910, 910, 910, 910, 910, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 910, - nil, nil, 910, nil, nil, 910, 910, nil, nil, 910, - nil, 910, nil, nil, nil, 910, nil, nil, nil, nil, - nil, nil, nil, 910, nil, nil, nil, nil, 910, 910, - 910, 910, nil, 910, 910, nil, nil, nil, 910, 910, - 912, 912, 912, 912, 912, 912, 910, nil, 910, 912, - 912, nil, nil, nil, 912, nil, 912, 912, 912, 912, - 912, 912, 912, nil, nil, nil, nil, nil, 912, 912, - 912, 912, 912, 912, 912, nil, nil, 912, nil, nil, - nil, nil, nil, 912, 912, nil, 912, 912, 912, 912, - 912, 912, 912, 912, 912, nil, 912, 912, 912, nil, - 912, 912, 912, 912, 912, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 912, nil, nil, 912, nil, nil, - 912, 912, nil, nil, 912, nil, 912, nil, nil, nil, - 912, nil, nil, nil, nil, nil, nil, nil, 912, nil, - nil, nil, nil, 912, 912, 912, 912, nil, 912, 912, - nil, nil, nil, 912, 912, nil, 5, 5, 5, 5, - 5, 912, nil, 912, 5, 5, nil, nil, nil, 5, - nil, 5, 5, 5, 5, 5, 5, 5, nil, nil, - nil, nil, nil, 5, 5, 5, 5, 5, 5, 5, - nil, nil, 5, nil, nil, nil, nil, nil, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - nil, 5, 5, 5, nil, 5, 5, 5, 5, 5, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 5, - nil, nil, 5, nil, nil, 5, 5, nil, nil, 5, - nil, 5, nil, nil, nil, 5, nil, nil, nil, nil, - nil, nil, nil, 5, nil, nil, nil, nil, 5, 5, - 5, 5, nil, 5, 5, nil, nil, nil, 5, 5, - nil, 19, 19, 19, nil, 19, 5, nil, 5, 19, - 19, nil, nil, nil, 19, nil, 19, 19, 19, 19, - 19, 19, 19, nil, nil, nil, nil, nil, 19, 19, - 19, 19, 19, 19, 19, nil, nil, 19, nil, nil, - nil, nil, nil, nil, 19, nil, nil, 19, 19, 19, - 19, 19, 19, 19, 19, nil, 19, 19, 19, nil, - 19, 19, 19, 19, 19, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 19, nil, nil, 19, nil, nil, - 19, 19, nil, nil, 19, nil, nil, nil, nil, nil, - 19, nil, nil, nil, nil, nil, nil, nil, 19, nil, - nil, nil, nil, 19, 19, 19, 19, nil, 19, 19, - nil, nil, nil, 19, 19, nil, 27, 27, 27, nil, - 27, 19, nil, 19, 27, 27, nil, nil, nil, 27, - nil, 27, 27, 27, 27, 27, 27, 27, nil, nil, - nil, nil, nil, 27, 27, 27, 27, 27, 27, 27, - nil, nil, 27, nil, nil, nil, nil, nil, nil, 27, - nil, nil, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, nil, 27, 27, 27, 27, 27, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 27, - nil, nil, 27, nil, nil, 27, 27, nil, nil, 27, - nil, 27, nil, 27, nil, 27, nil, nil, nil, nil, - nil, nil, nil, 27, nil, nil, nil, nil, 27, 27, - 27, 27, nil, 27, 27, nil, nil, nil, 27, 27, - nil, 28, 28, 28, nil, 28, 27, nil, 27, 28, - 28, nil, nil, nil, 28, nil, 28, 28, 28, 28, - 28, 28, 28, nil, nil, nil, nil, nil, 28, 28, - 28, 28, 28, 28, 28, nil, nil, 28, nil, nil, - nil, nil, nil, nil, 28, nil, nil, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, 28, nil, - 28, 28, 28, 28, 28, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 28, nil, nil, 28, nil, nil, - 28, 28, nil, nil, 28, nil, 28, nil, 28, nil, - 28, nil, nil, nil, nil, nil, nil, nil, 28, nil, - nil, nil, nil, 28, 28, 28, 28, nil, 28, 28, - nil, nil, nil, 28, 28, nil, 29, 29, 29, nil, - 29, 28, nil, 28, 29, 29, nil, nil, nil, 29, - nil, 29, 29, 29, 29, 29, 29, 29, nil, nil, - nil, nil, nil, 29, 29, 29, 29, 29, 29, 29, - nil, nil, 29, nil, nil, nil, nil, nil, nil, 29, - nil, nil, 29, 29, 29, 29, 29, 29, 29, 29, - 29, 29, 29, 29, nil, 29, 29, 29, 29, 29, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 29, - nil, nil, 29, nil, nil, 29, 29, nil, nil, 29, - nil, 29, nil, 29, nil, 29, nil, nil, nil, nil, - nil, nil, nil, 29, nil, nil, nil, nil, 29, 29, - 29, 29, nil, 29, 29, nil, nil, nil, 29, 29, - nil, 32, 32, 32, nil, 32, 29, nil, 29, 32, - 32, nil, nil, nil, 32, nil, 32, 32, 32, 32, - 32, 32, 32, nil, nil, nil, nil, nil, 32, 32, - 32, 32, 32, 32, 32, nil, nil, 32, nil, nil, - nil, nil, nil, nil, 32, nil, nil, 32, 32, 32, - 32, 32, 32, 32, 32, nil, 32, 32, 32, nil, - 32, 32, nil, 688, 32, 688, 688, 688, 688, 688, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 32, nil, nil, 32, nil, nil, - 32, 32, nil, nil, 32, nil, 32, nil, nil, nil, - 688, nil, nil, nil, nil, nil, nil, nil, nil, 688, - 688, 688, 688, 32, 32, 32, 32, nil, 32, 32, - nil, nil, nil, 32, 32, nil, 33, 33, 33, nil, - 33, 32, nil, 32, 33, 33, nil, nil, nil, 33, - nil, 33, 33, 33, 33, 33, 33, 33, nil, nil, - nil, nil, nil, 33, 33, 33, 33, 33, 33, 33, - nil, nil, 33, nil, nil, nil, nil, 584, nil, 33, - nil, nil, 33, 33, 33, 33, 33, 33, 33, 33, - nil, 33, 33, 33, nil, 33, 33, nil, nil, 33, - 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, - 584, nil, 584, 584, nil, nil, 584, 584, nil, 33, - nil, nil, 33, nil, nil, 33, 33, nil, nil, 33, - nil, nil, 584, nil, 584, nil, 584, 584, 584, 584, - 584, 584, 584, nil, 584, nil, nil, nil, 33, 33, - 33, 33, nil, 33, 33, nil, nil, nil, 33, 33, - nil, 584, nil, 33, nil, nil, 33, nil, 33, 39, - 39, 39, nil, 39, nil, nil, nil, 39, 39, nil, - nil, nil, 39, nil, 39, 39, 39, 39, 39, 39, - 39, nil, nil, nil, nil, nil, 39, 39, 39, 39, - 39, 39, 39, nil, nil, 39, nil, nil, nil, nil, - nil, nil, 39, nil, nil, 39, 39, 39, 39, 39, - 39, 39, 39, nil, 39, 39, 39, nil, 39, 39, - 39, 39, 39, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 39, nil, nil, 39, nil, nil, 39, 39, - nil, nil, 39, nil, nil, nil, nil, nil, 39, nil, - nil, nil, nil, nil, nil, nil, 39, nil, nil, nil, - nil, 39, 39, 39, 39, nil, 39, 39, nil, nil, - nil, 39, 39, nil, 40, 40, 40, nil, 40, 39, - nil, 39, 40, 40, nil, nil, nil, 40, nil, 40, - 40, 40, 40, 40, 40, 40, nil, nil, nil, nil, - nil, 40, 40, 40, 40, 40, 40, 40, nil, nil, - 40, nil, nil, nil, nil, nil, nil, 40, nil, nil, - 40, 40, 40, 40, 40, 40, 40, 40, nil, 40, - 40, 40, nil, 40, 40, 40, 40, 40, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 40, nil, nil, - 40, nil, nil, 40, 40, nil, nil, 40, nil, nil, - nil, nil, nil, 40, nil, nil, nil, nil, nil, nil, - nil, 40, nil, nil, nil, nil, 40, 40, 40, 40, - nil, 40, 40, nil, nil, nil, 40, 40, nil, 41, - 41, 41, nil, 41, 40, nil, 40, 41, 41, nil, - nil, nil, 41, nil, 41, 41, 41, 41, 41, 41, - 41, nil, nil, nil, nil, nil, 41, 41, 41, 41, - 41, 41, 41, nil, nil, 41, nil, nil, nil, nil, - nil, nil, 41, nil, nil, 41, 41, 41, 41, 41, - 41, 41, 41, nil, 41, 41, 41, nil, 41, 41, - 41, 41, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 41, nil, nil, 41, nil, nil, 41, 41, - nil, nil, 41, nil, nil, nil, nil, nil, 41, nil, - nil, nil, nil, nil, nil, nil, 41, nil, nil, nil, - nil, 41, 41, 41, 41, nil, 41, 41, nil, nil, - nil, 41, 41, nil, 53, 53, 53, nil, 53, 41, - nil, 41, 53, 53, nil, nil, nil, 53, nil, 53, - 53, 53, 53, 53, 53, 53, nil, nil, nil, nil, - nil, 53, 53, 53, 53, 53, 53, 53, nil, nil, - 53, nil, nil, nil, nil, nil, nil, 53, nil, nil, - 53, 53, 53, 53, 53, 53, 53, 53, nil, 53, - 53, 53, nil, 53, 53, 53, 53, 53, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 53, nil, nil, - 53, nil, nil, 53, 53, nil, nil, 53, nil, nil, - nil, nil, nil, 53, nil, nil, nil, nil, nil, nil, - nil, 53, nil, nil, nil, nil, 53, 53, 53, 53, - nil, 53, 53, nil, nil, nil, 53, 53, nil, 54, - 54, 54, nil, 54, 53, nil, 53, 54, 54, nil, - nil, nil, 54, nil, 54, 54, 54, 54, 54, 54, - 54, nil, nil, nil, nil, nil, 54, 54, 54, 54, - 54, 54, 54, nil, nil, 54, nil, nil, nil, nil, - nil, nil, 54, nil, nil, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 54, 54, nil, 54, 54, - 54, 54, 54, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 54, nil, nil, 54, nil, nil, 54, 54, - nil, nil, 54, nil, 54, nil, nil, nil, 54, nil, - nil, nil, nil, nil, nil, nil, 54, nil, nil, nil, - nil, 54, 54, 54, 54, nil, 54, 54, nil, nil, - nil, 54, 54, nil, 55, 55, 55, nil, 55, 54, - nil, 54, 55, 55, nil, nil, nil, 55, nil, 55, - 55, 55, 55, 55, 55, 55, nil, nil, nil, nil, - nil, 55, 55, 55, 55, 55, 55, 55, nil, nil, - 55, nil, nil, nil, nil, nil, nil, 55, nil, nil, - 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, - 55, 55, nil, 55, 55, 55, 55, 55, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 55, nil, nil, - 55, nil, nil, 55, 55, nil, nil, 55, nil, nil, - nil, nil, nil, 55, nil, nil, nil, nil, nil, nil, - nil, 55, nil, nil, nil, nil, 55, 55, 55, 55, - nil, 55, 55, nil, nil, nil, 55, 55, nil, 58, - 58, 58, nil, 58, 55, nil, 55, 58, 58, nil, - nil, nil, 58, nil, 58, 58, 58, 58, 58, 58, - 58, nil, nil, nil, nil, nil, 58, 58, 58, 58, - 58, 58, 58, nil, nil, 58, nil, nil, nil, nil, - nil, nil, 58, nil, nil, 58, 58, 58, 58, 58, - 58, 58, 58, nil, 58, 58, 58, nil, 58, 58, - 58, 58, 58, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 58, nil, nil, 58, nil, nil, 58, 58, - nil, nil, 58, nil, nil, nil, nil, nil, 58, nil, - nil, nil, nil, nil, nil, nil, 58, nil, nil, nil, - nil, 58, 58, 58, 58, nil, 58, 58, nil, nil, - nil, 58, 58, nil, 59, 59, 59, nil, 59, 58, - nil, 58, 59, 59, nil, nil, nil, 59, nil, 59, - 59, 59, 59, 59, 59, 59, nil, nil, nil, nil, - nil, 59, 59, 59, 59, 59, 59, 59, nil, nil, - 59, nil, nil, nil, nil, nil, nil, 59, nil, nil, - 59, 59, 59, 59, 59, 59, 59, 59, nil, 59, - 59, 59, nil, 59, 59, 59, 59, 59, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 59, nil, nil, - 59, nil, nil, 59, 59, nil, nil, 59, nil, nil, - nil, nil, nil, 59, nil, nil, nil, nil, nil, nil, - nil, 59, nil, nil, nil, nil, 59, 59, 59, 59, - nil, 59, 59, nil, nil, nil, 59, 59, nil, 62, - 62, 62, nil, 62, 59, nil, 59, 62, 62, nil, - nil, nil, 62, nil, 62, 62, 62, 62, 62, 62, - 62, nil, nil, nil, nil, nil, 62, 62, 62, 62, - 62, 62, 62, nil, nil, 62, nil, nil, nil, nil, - nil, nil, 62, nil, nil, 62, 62, 62, 62, 62, - 62, 62, 62, nil, 62, 62, 62, nil, 62, 62, - 62, 62, 62, 596, 596, 596, 596, 596, 596, 596, - 596, 596, 596, 596, nil, 596, 596, nil, nil, 596, - 596, nil, 62, nil, 596, 62, nil, nil, 62, 62, - nil, nil, 62, nil, nil, 596, nil, 596, 62, 596, - 596, 596, 596, 596, 596, 596, 62, 596, nil, nil, - nil, 62, 62, 62, 62, nil, 62, 62, nil, nil, - nil, 62, 62, 62, 596, nil, 596, nil, 62, 62, - nil, 62, 63, 63, 63, nil, 63, nil, nil, nil, - 63, 63, nil, nil, nil, 63, nil, 63, 63, 63, - 63, 63, 63, 63, nil, nil, nil, nil, nil, 63, - 63, 63, 63, 63, 63, 63, nil, nil, 63, nil, - nil, nil, nil, nil, nil, 63, nil, nil, 63, 63, - 63, 63, 63, 63, 63, 63, nil, 63, 63, 63, - nil, 63, 63, nil, 761, 63, 761, 761, 761, 761, - 761, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 63, nil, nil, 63, nil, - nil, 63, 63, nil, nil, 63, nil, 63, nil, nil, - nil, 761, nil, nil, nil, nil, nil, nil, nil, nil, - 761, 761, 761, 761, 63, 63, 63, 63, nil, 63, - 63, nil, nil, nil, 63, 63, nil, 64, 64, 64, - nil, 64, 63, nil, 63, 64, 64, nil, nil, nil, - 64, nil, 64, 64, 64, 64, 64, 64, 64, nil, - nil, nil, nil, nil, 64, 64, 64, 64, 64, 64, - 64, nil, nil, 64, nil, nil, nil, nil, nil, nil, - 64, nil, nil, 64, 64, 64, 64, 64, 64, 64, - 64, nil, 64, 64, 64, nil, 64, 64, nil, 763, - 64, 763, 763, 763, 763, 763, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 64, nil, nil, - 64, nil, nil, 64, nil, nil, 64, 64, nil, nil, - 64, nil, nil, nil, nil, nil, 763, nil, nil, nil, - nil, nil, nil, nil, nil, 763, 763, 763, 763, 64, - 64, 64, 64, nil, 64, 64, nil, nil, nil, 64, - 64, nil, 65, 65, 65, nil, 65, 64, nil, 64, - 65, 65, nil, nil, nil, 65, nil, 65, 65, 65, - 65, 65, 65, 65, nil, nil, nil, nil, nil, 65, - 65, 65, 65, 65, 65, 65, nil, nil, 65, nil, - nil, nil, nil, nil, nil, 65, nil, nil, 65, 65, - 65, 65, 65, 65, 65, 65, nil, 65, 65, 65, - nil, 65, 65, nil, 805, 65, 805, 805, 805, 805, - 805, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 65, nil, nil, 65, nil, - nil, 65, 65, nil, nil, 65, nil, nil, nil, nil, - nil, 805, nil, nil, nil, nil, nil, nil, nil, nil, - 805, 805, 805, 805, 65, 65, 65, 65, nil, 65, - 65, nil, nil, nil, 65, 65, nil, 103, 103, 103, - 103, 103, 65, nil, 65, 103, 103, nil, nil, nil, - 103, nil, 103, 103, 103, 103, 103, 103, 103, nil, - nil, nil, nil, nil, 103, 103, 103, 103, 103, 103, - 103, nil, nil, 103, nil, nil, nil, nil, nil, 103, - 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, - 103, nil, 103, 103, 103, nil, 103, 103, 103, 103, - 103, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, nil, 20, 20, nil, nil, 20, 20, nil, - 103, nil, nil, 103, nil, nil, 103, 103, nil, nil, - 103, nil, 103, 20, nil, 20, 103, 20, 20, 20, - 20, 20, 20, 20, 103, 20, nil, nil, nil, 103, - 103, 103, 103, nil, 103, 103, nil, nil, nil, 103, - 103, nil, 20, nil, nil, nil, 103, 103, nil, 103, - 108, 108, 108, nil, 108, nil, nil, nil, 108, 108, - nil, nil, nil, 108, nil, 108, 108, 108, 108, 108, - 108, 108, nil, nil, nil, nil, nil, 108, 108, 108, - 108, 108, 108, 108, nil, nil, 108, nil, nil, nil, - nil, nil, nil, 108, nil, nil, 108, 108, 108, 108, - 108, 108, 108, 108, nil, 108, 108, 108, nil, 108, - 108, 108, 108, 108, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 108, nil, nil, 108, nil, nil, 108, - 108, nil, nil, 108, nil, nil, nil, nil, nil, 108, - nil, nil, nil, nil, nil, nil, nil, 108, nil, nil, - nil, nil, 108, 108, 108, 108, nil, 108, 108, nil, - nil, nil, 108, 108, nil, 109, 109, 109, nil, 109, - 108, nil, 108, 109, 109, nil, nil, nil, 109, nil, - 109, 109, 109, 109, 109, 109, 109, nil, nil, nil, - nil, nil, 109, 109, 109, 109, 109, 109, 109, nil, - nil, 109, nil, nil, nil, nil, nil, nil, 109, nil, - nil, 109, 109, 109, 109, 109, 109, 109, 109, nil, - 109, 109, 109, nil, 109, 109, 109, 109, 109, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 109, nil, - nil, 109, nil, nil, 109, 109, nil, nil, 109, nil, - nil, nil, nil, nil, 109, nil, nil, nil, nil, nil, - nil, nil, 109, nil, nil, nil, nil, 109, 109, 109, - 109, nil, 109, 109, nil, nil, nil, 109, 109, nil, - 110, 110, 110, nil, 110, 109, nil, 109, 110, 110, - nil, nil, nil, 110, nil, 110, 110, 110, 110, 110, - 110, 110, nil, nil, nil, nil, nil, 110, 110, 110, - 110, 110, 110, 110, nil, nil, 110, nil, nil, nil, - nil, nil, nil, 110, nil, nil, 110, 110, 110, 110, - 110, 110, 110, 110, nil, 110, 110, 110, nil, 110, - 110, 110, 110, 110, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 110, nil, nil, 110, nil, nil, 110, - 110, nil, nil, 110, nil, nil, nil, nil, nil, 110, - nil, nil, nil, nil, nil, nil, nil, 110, nil, nil, - nil, nil, 110, 110, 110, 110, nil, 110, 110, nil, - nil, nil, 110, 110, nil, 111, 111, 111, nil, 111, - 110, nil, 110, 111, 111, nil, nil, nil, 111, nil, - 111, 111, 111, 111, 111, 111, 111, nil, nil, nil, - nil, nil, 111, 111, 111, 111, 111, 111, 111, nil, - nil, 111, nil, nil, nil, nil, nil, nil, 111, nil, - nil, 111, 111, 111, 111, 111, 111, 111, 111, nil, - 111, 111, 111, nil, 111, 111, 111, 111, 111, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 111, nil, - nil, 111, nil, nil, 111, 111, nil, nil, 111, nil, - nil, nil, nil, nil, 111, nil, nil, nil, nil, nil, - nil, nil, 111, nil, nil, nil, nil, 111, 111, 111, - 111, nil, 111, 111, nil, nil, nil, 111, 111, nil, - 112, 112, 112, 112, 112, 111, nil, 111, 112, 112, - nil, nil, nil, 112, nil, 112, 112, 112, 112, 112, - 112, 112, nil, nil, nil, nil, nil, 112, 112, 112, - 112, 112, 112, 112, nil, nil, 112, nil, nil, nil, - nil, nil, 112, 112, nil, 112, 112, 112, 112, 112, - 112, 112, 112, 112, nil, 112, 112, 112, nil, 112, - 112, 112, 112, 112, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 112, nil, nil, 112, nil, nil, 112, - 112, nil, nil, 112, nil, 112, nil, nil, nil, 112, - nil, nil, nil, nil, nil, nil, nil, 112, nil, nil, - nil, nil, 112, 112, 112, 112, nil, 112, 112, nil, - nil, nil, 112, 112, nil, 198, 198, 198, nil, 198, - 112, nil, 112, 198, 198, nil, nil, nil, 198, nil, - 198, 198, 198, 198, 198, 198, 198, nil, nil, nil, - nil, nil, 198, 198, 198, 198, 198, 198, 198, nil, - nil, 198, nil, nil, nil, nil, nil, nil, 198, nil, - nil, 198, 198, 198, 198, 198, 198, 198, 198, nil, - 198, 198, 198, nil, 198, 198, 198, 198, 198, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 198, nil, - nil, 198, nil, nil, 198, 198, nil, nil, 198, nil, - 198, nil, nil, nil, 198, nil, nil, nil, nil, nil, - nil, nil, 198, nil, nil, nil, nil, 198, 198, 198, - 198, nil, 198, 198, nil, nil, nil, 198, 198, nil, - 199, 199, 199, nil, 199, 198, nil, 198, 199, 199, - nil, nil, nil, 199, nil, 199, 199, 199, 199, 199, - 199, 199, nil, nil, nil, nil, nil, 199, 199, 199, - 199, 199, 199, 199, nil, nil, 199, nil, nil, nil, - nil, nil, nil, 199, nil, nil, 199, 199, 199, 199, - 199, 199, 199, 199, nil, 199, 199, 199, nil, 199, - 199, 199, 199, 199, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 199, nil, nil, 199, nil, nil, 199, - 199, nil, nil, 199, nil, 199, nil, nil, nil, 199, - nil, nil, nil, nil, nil, nil, nil, 199, nil, nil, - nil, nil, 199, 199, 199, 199, nil, 199, 199, nil, - nil, nil, 199, 199, nil, 200, 200, 200, nil, 200, - 199, nil, 199, 200, 200, nil, nil, nil, 200, nil, - 200, 200, 200, 200, 200, 200, 200, nil, nil, nil, - nil, nil, 200, 200, 200, 200, 200, 200, 200, nil, - nil, 200, nil, nil, nil, nil, nil, nil, 200, nil, - nil, 200, 200, 200, 200, 200, 200, 200, 200, nil, - 200, 200, 200, nil, 200, 200, 200, 200, 200, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 200, nil, - nil, 200, nil, nil, 200, 200, nil, nil, 200, nil, - nil, nil, nil, nil, 200, nil, nil, nil, nil, nil, - nil, nil, 200, nil, nil, nil, nil, 200, 200, 200, - 200, nil, 200, 200, nil, nil, nil, 200, 200, nil, - 201, 201, 201, nil, 201, 200, nil, 200, 201, 201, - nil, nil, nil, 201, nil, 201, 201, 201, 201, 201, - 201, 201, nil, nil, nil, nil, nil, 201, 201, 201, - 201, 201, 201, 201, nil, nil, 201, nil, nil, nil, - nil, nil, nil, 201, nil, nil, 201, 201, 201, 201, - 201, 201, 201, 201, 201, 201, 201, 201, nil, 201, - 201, 201, 201, 201, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 201, nil, nil, 201, nil, nil, 201, - 201, nil, nil, 201, nil, 201, nil, 201, nil, 201, - nil, nil, nil, nil, nil, nil, nil, 201, nil, nil, - nil, nil, 201, 201, 201, 201, nil, 201, 201, nil, - nil, nil, 201, 201, nil, 204, 204, 204, nil, 204, - 201, nil, 201, 204, 204, nil, nil, nil, 204, nil, - 204, 204, 204, 204, 204, 204, 204, nil, nil, nil, - nil, nil, 204, 204, 204, 204, 204, 204, 204, nil, - nil, 204, nil, nil, nil, nil, nil, nil, 204, nil, - nil, 204, 204, 204, 204, 204, 204, 204, 204, nil, - 204, 204, 204, nil, 204, 204, 204, 204, 204, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 204, nil, - nil, 204, nil, nil, 204, 204, nil, nil, 204, nil, - nil, nil, nil, nil, 204, nil, nil, nil, nil, nil, - nil, nil, 204, nil, nil, nil, nil, 204, 204, 204, - 204, nil, 204, 204, nil, nil, nil, 204, 204, nil, - 205, 205, 205, nil, 205, 204, nil, 204, 205, 205, - nil, nil, nil, 205, nil, 205, 205, 205, 205, 205, - 205, 205, nil, nil, nil, nil, nil, 205, 205, 205, - 205, 205, 205, 205, nil, nil, 205, nil, nil, nil, - nil, nil, nil, 205, nil, nil, 205, 205, 205, 205, - 205, 205, 205, 205, nil, 205, 205, 205, nil, 205, - 205, 205, 205, 205, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 205, nil, nil, 205, nil, nil, 205, - 205, nil, nil, 205, nil, nil, nil, nil, nil, 205, - nil, nil, nil, nil, nil, nil, nil, 205, nil, nil, - nil, nil, 205, 205, 205, 205, nil, 205, 205, nil, - nil, nil, 205, 205, nil, 206, 206, 206, nil, 206, - 205, nil, 205, 206, 206, nil, nil, nil, 206, nil, - 206, 206, 206, 206, 206, 206, 206, nil, nil, nil, - nil, nil, 206, 206, 206, 206, 206, 206, 206, nil, - nil, 206, nil, nil, nil, nil, nil, nil, 206, nil, - nil, 206, 206, 206, 206, 206, 206, 206, 206, nil, - 206, 206, 206, nil, 206, 206, 206, 206, 206, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 206, nil, - nil, 206, nil, nil, 206, 206, nil, nil, 206, nil, - nil, nil, nil, nil, 206, nil, nil, nil, nil, nil, - nil, nil, 206, nil, nil, nil, nil, 206, 206, 206, - 206, nil, 206, 206, nil, nil, nil, 206, 206, nil, - 207, 207, 207, nil, 207, 206, nil, 206, 207, 207, - nil, nil, nil, 207, nil, 207, 207, 207, 207, 207, - 207, 207, nil, nil, nil, nil, nil, 207, 207, 207, - 207, 207, 207, 207, nil, nil, 207, nil, nil, nil, - nil, nil, nil, 207, nil, nil, 207, 207, 207, 207, - 207, 207, 207, 207, nil, 207, 207, 207, nil, 207, - 207, 207, 207, 207, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 207, nil, nil, 207, nil, nil, 207, - 207, nil, nil, 207, nil, nil, nil, nil, nil, 207, - nil, nil, nil, nil, nil, nil, nil, 207, nil, nil, - nil, nil, 207, 207, 207, 207, nil, 207, 207, nil, - nil, nil, 207, 207, nil, 208, 208, 208, nil, 208, - 207, nil, 207, 208, 208, nil, nil, nil, 208, nil, - 208, 208, 208, 208, 208, 208, 208, nil, nil, nil, - nil, nil, 208, 208, 208, 208, 208, 208, 208, nil, - nil, 208, nil, nil, nil, nil, nil, nil, 208, nil, - nil, 208, 208, 208, 208, 208, 208, 208, 208, nil, - 208, 208, 208, nil, 208, 208, 208, 208, 208, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 208, nil, - nil, 208, nil, nil, 208, 208, nil, nil, 208, nil, - nil, nil, nil, nil, 208, nil, nil, nil, nil, nil, - nil, nil, 208, nil, nil, nil, nil, 208, 208, 208, - 208, nil, 208, 208, nil, nil, nil, 208, 208, 208, - 218, 218, 218, nil, 218, 208, nil, 208, 218, 218, - nil, nil, nil, 218, nil, 218, 218, 218, 218, 218, - 218, 218, nil, nil, nil, nil, nil, 218, 218, 218, - 218, 218, 218, 218, nil, nil, 218, nil, nil, nil, - nil, nil, nil, 218, nil, nil, 218, 218, 218, 218, - 218, 218, 218, 218, nil, 218, 218, 218, nil, 218, - 218, 218, 218, 218, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 218, nil, nil, 218, nil, nil, 218, - 218, nil, nil, 218, nil, nil, nil, nil, nil, 218, - nil, nil, nil, nil, nil, nil, nil, 218, nil, nil, - nil, nil, 218, 218, 218, 218, nil, 218, 218, nil, - nil, nil, 218, 218, nil, 221, 221, 221, nil, 221, - 218, nil, 218, 221, 221, nil, nil, nil, 221, nil, - 221, 221, 221, 221, 221, 221, 221, nil, nil, nil, - nil, nil, 221, 221, 221, 221, 221, 221, 221, nil, - nil, 221, nil, nil, nil, nil, nil, nil, 221, nil, - nil, 221, 221, 221, 221, 221, 221, 221, 221, nil, - 221, 221, 221, nil, 221, 221, 221, 221, 221, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 221, nil, - nil, 221, nil, nil, 221, 221, nil, nil, 221, nil, - nil, nil, nil, nil, 221, nil, nil, nil, nil, nil, - nil, nil, 221, nil, nil, nil, nil, 221, 221, 221, - 221, nil, 221, 221, nil, nil, nil, 221, 221, nil, - 222, 222, 222, nil, 222, 221, nil, 221, 222, 222, - nil, nil, nil, 222, nil, 222, 222, 222, 222, 222, - 222, 222, nil, nil, nil, nil, nil, 222, 222, 222, - 222, 222, 222, 222, nil, nil, 222, nil, nil, nil, - nil, nil, nil, 222, nil, nil, 222, 222, 222, 222, - 222, 222, 222, 222, nil, 222, 222, 222, nil, 222, - 222, 222, 222, 222, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 222, nil, nil, 222, nil, nil, 222, - 222, nil, nil, 222, nil, nil, nil, nil, nil, 222, - nil, nil, nil, nil, nil, nil, nil, 222, nil, nil, - nil, nil, 222, 222, 222, 222, nil, 222, 222, nil, - nil, nil, 222, 222, nil, 223, 223, 223, nil, 223, - 222, nil, 222, 223, 223, nil, nil, nil, 223, nil, - 223, 223, 223, 223, 223, 223, 223, nil, nil, nil, - nil, nil, 223, 223, 223, 223, 223, 223, 223, nil, - nil, 223, nil, nil, nil, nil, nil, nil, 223, nil, - nil, 223, 223, 223, 223, 223, 223, 223, 223, nil, - 223, 223, 223, nil, 223, 223, 223, 223, 223, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 223, nil, - nil, 223, nil, nil, 223, 223, nil, nil, 223, nil, - nil, nil, nil, nil, 223, nil, nil, nil, nil, nil, - nil, nil, 223, nil, nil, nil, nil, 223, 223, 223, - 223, nil, 223, 223, nil, nil, nil, 223, 223, nil, - 224, 224, 224, nil, 224, 223, nil, 223, 224, 224, - nil, nil, nil, 224, nil, 224, 224, 224, 224, 224, - 224, 224, nil, nil, nil, nil, nil, 224, 224, 224, - 224, 224, 224, 224, nil, nil, 224, nil, nil, nil, - nil, nil, nil, 224, nil, nil, 224, 224, 224, 224, - 224, 224, 224, 224, nil, 224, 224, 224, nil, 224, - 224, 224, 224, 224, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 224, nil, nil, 224, nil, nil, 224, - 224, nil, nil, 224, nil, nil, nil, nil, nil, 224, - nil, nil, nil, nil, nil, nil, nil, 224, nil, nil, - nil, nil, 224, 224, 224, 224, nil, 224, 224, nil, - nil, nil, 224, 224, nil, 225, 225, 225, nil, 225, - 224, nil, 224, 225, 225, nil, nil, nil, 225, nil, - 225, 225, 225, 225, 225, 225, 225, nil, nil, nil, - nil, nil, 225, 225, 225, 225, 225, 225, 225, nil, - nil, 225, nil, nil, nil, nil, nil, nil, 225, nil, - nil, 225, 225, 225, 225, 225, 225, 225, 225, nil, - 225, 225, 225, nil, 225, 225, 225, 225, 225, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 225, nil, - nil, 225, nil, nil, 225, 225, nil, nil, 225, nil, - nil, nil, nil, nil, 225, nil, nil, nil, nil, nil, - nil, nil, 225, nil, nil, nil, nil, 225, 225, 225, - 225, nil, 225, 225, nil, nil, nil, 225, 225, nil, - 226, 226, 226, nil, 226, 225, nil, 225, 226, 226, - nil, nil, nil, 226, nil, 226, 226, 226, 226, 226, - 226, 226, nil, nil, nil, nil, nil, 226, 226, 226, - 226, 226, 226, 226, nil, nil, 226, nil, nil, nil, - nil, nil, nil, 226, nil, nil, 226, 226, 226, 226, - 226, 226, 226, 226, nil, 226, 226, 226, nil, 226, - 226, 226, 226, 226, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 226, nil, nil, 226, nil, nil, 226, - 226, nil, nil, 226, nil, nil, nil, nil, nil, 226, - nil, nil, nil, nil, nil, nil, nil, 226, nil, nil, - nil, nil, 226, 226, 226, 226, nil, 226, 226, nil, - nil, nil, 226, 226, nil, 227, 227, 227, nil, 227, - 226, nil, 226, 227, 227, nil, nil, nil, 227, nil, - 227, 227, 227, 227, 227, 227, 227, nil, nil, nil, - nil, nil, 227, 227, 227, 227, 227, 227, 227, nil, - nil, 227, nil, nil, nil, nil, nil, nil, 227, nil, - nil, 227, 227, 227, 227, 227, 227, 227, 227, nil, - 227, 227, 227, nil, 227, 227, 227, 227, 227, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 227, nil, - nil, 227, nil, nil, 227, 227, nil, nil, 227, nil, - nil, nil, nil, nil, 227, nil, nil, nil, nil, nil, - nil, nil, 227, nil, nil, nil, nil, 227, 227, 227, - 227, nil, 227, 227, nil, nil, nil, 227, 227, nil, - 228, 228, 228, nil, 228, 227, nil, 227, 228, 228, - nil, nil, nil, 228, nil, 228, 228, 228, 228, 228, - 228, 228, nil, nil, nil, nil, nil, 228, 228, 228, - 228, 228, 228, 228, nil, nil, 228, nil, nil, nil, - nil, nil, nil, 228, nil, nil, 228, 228, 228, 228, - 228, 228, 228, 228, nil, 228, 228, 228, nil, 228, - 228, 228, 228, 228, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 228, nil, nil, 228, nil, nil, 228, - 228, nil, nil, 228, nil, nil, nil, nil, nil, 228, - nil, nil, nil, nil, nil, nil, nil, 228, nil, nil, - nil, nil, 228, 228, 228, 228, nil, 228, 228, nil, - nil, nil, 228, 228, nil, 229, 229, 229, nil, 229, - 228, nil, 228, 229, 229, nil, nil, nil, 229, nil, - 229, 229, 229, 229, 229, 229, 229, nil, nil, nil, - nil, nil, 229, 229, 229, 229, 229, 229, 229, nil, - nil, 229, nil, nil, nil, nil, nil, nil, 229, nil, - nil, 229, 229, 229, 229, 229, 229, 229, 229, nil, - 229, 229, 229, nil, 229, 229, 229, 229, 229, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 229, nil, - nil, 229, nil, nil, 229, 229, nil, nil, 229, nil, - nil, nil, nil, nil, 229, nil, nil, nil, nil, nil, - nil, nil, 229, nil, nil, nil, nil, 229, 229, 229, - 229, nil, 229, 229, nil, nil, nil, 229, 229, nil, - 230, 230, 230, nil, 230, 229, nil, 229, 230, 230, - nil, nil, nil, 230, nil, 230, 230, 230, 230, 230, - 230, 230, nil, nil, nil, nil, nil, 230, 230, 230, - 230, 230, 230, 230, nil, nil, 230, nil, nil, nil, - nil, nil, nil, 230, nil, nil, 230, 230, 230, 230, - 230, 230, 230, 230, nil, 230, 230, 230, nil, 230, - 230, 230, 230, 230, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 230, nil, nil, 230, nil, nil, 230, - 230, nil, nil, 230, nil, nil, nil, nil, nil, 230, - nil, nil, nil, nil, nil, nil, nil, 230, nil, nil, - nil, nil, 230, 230, 230, 230, nil, 230, 230, nil, - nil, nil, 230, 230, nil, 231, 231, 231, nil, 231, - 230, nil, 230, 231, 231, nil, nil, nil, 231, nil, - 231, 231, 231, 231, 231, 231, 231, nil, nil, nil, - nil, nil, 231, 231, 231, 231, 231, 231, 231, nil, - nil, 231, nil, nil, nil, nil, nil, nil, 231, nil, - nil, 231, 231, 231, 231, 231, 231, 231, 231, nil, - 231, 231, 231, nil, 231, 231, 231, 231, 231, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 231, nil, - nil, 231, nil, nil, 231, 231, nil, nil, 231, nil, - nil, nil, nil, nil, 231, nil, nil, nil, nil, nil, - nil, nil, 231, nil, nil, nil, nil, 231, 231, 231, - 231, nil, 231, 231, nil, nil, nil, 231, 231, nil, - 232, 232, 232, nil, 232, 231, nil, 231, 232, 232, - nil, nil, nil, 232, nil, 232, 232, 232, 232, 232, - 232, 232, nil, nil, nil, nil, nil, 232, 232, 232, - 232, 232, 232, 232, nil, nil, 232, nil, nil, nil, - nil, nil, nil, 232, nil, nil, 232, 232, 232, 232, - 232, 232, 232, 232, nil, 232, 232, 232, nil, 232, - 232, 232, 232, 232, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 232, nil, nil, 232, nil, nil, 232, - 232, nil, nil, 232, nil, nil, nil, nil, nil, 232, - nil, nil, nil, nil, nil, nil, nil, 232, nil, nil, - nil, nil, 232, 232, 232, 232, nil, 232, 232, nil, - nil, nil, 232, 232, nil, 233, 233, 233, nil, 233, - 232, nil, 232, 233, 233, nil, nil, nil, 233, nil, - 233, 233, 233, 233, 233, 233, 233, nil, nil, nil, - nil, nil, 233, 233, 233, 233, 233, 233, 233, nil, - nil, 233, nil, nil, nil, nil, nil, nil, 233, nil, - nil, 233, 233, 233, 233, 233, 233, 233, 233, nil, - 233, 233, 233, nil, 233, 233, 233, 233, 233, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 233, nil, - nil, 233, nil, nil, 233, 233, nil, nil, 233, nil, - nil, nil, nil, nil, 233, nil, nil, nil, nil, nil, - nil, nil, 233, nil, nil, nil, nil, 233, 233, 233, - 233, nil, 233, 233, nil, nil, nil, 233, 233, nil, - 234, 234, 234, nil, 234, 233, nil, 233, 234, 234, - nil, nil, nil, 234, nil, 234, 234, 234, 234, 234, - 234, 234, nil, nil, nil, nil, nil, 234, 234, 234, - 234, 234, 234, 234, nil, nil, 234, nil, nil, nil, - nil, nil, nil, 234, nil, nil, 234, 234, 234, 234, - 234, 234, 234, 234, nil, 234, 234, 234, nil, 234, - 234, 234, 234, 234, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 234, nil, nil, 234, nil, nil, 234, - 234, nil, nil, 234, nil, nil, nil, nil, nil, 234, - nil, nil, nil, nil, nil, nil, nil, 234, nil, nil, - nil, nil, 234, 234, 234, 234, nil, 234, 234, nil, - nil, nil, 234, 234, nil, 235, 235, 235, nil, 235, - 234, nil, 234, 235, 235, nil, nil, nil, 235, nil, - 235, 235, 235, 235, 235, 235, 235, nil, nil, nil, - nil, nil, 235, 235, 235, 235, 235, 235, 235, nil, - nil, 235, nil, nil, nil, nil, nil, nil, 235, nil, - nil, 235, 235, 235, 235, 235, 235, 235, 235, nil, - 235, 235, 235, nil, 235, 235, 235, 235, 235, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 235, nil, - nil, 235, nil, nil, 235, 235, nil, nil, 235, nil, - nil, nil, nil, nil, 235, nil, nil, nil, nil, nil, - nil, nil, 235, nil, nil, nil, nil, 235, 235, 235, - 235, nil, 235, 235, nil, nil, nil, 235, 235, nil, - 236, 236, 236, nil, 236, 235, nil, 235, 236, 236, - nil, nil, nil, 236, nil, 236, 236, 236, 236, 236, - 236, 236, nil, nil, nil, nil, nil, 236, 236, 236, - 236, 236, 236, 236, nil, nil, 236, nil, nil, nil, - nil, nil, nil, 236, nil, nil, 236, 236, 236, 236, - 236, 236, 236, 236, nil, 236, 236, 236, nil, 236, - 236, 236, 236, 236, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 236, nil, nil, 236, nil, nil, 236, - 236, nil, nil, 236, nil, nil, nil, nil, nil, 236, - nil, nil, nil, nil, nil, nil, nil, 236, nil, nil, - nil, nil, 236, 236, 236, 236, nil, 236, 236, nil, - nil, nil, 236, 236, nil, 237, 237, 237, nil, 237, - 236, nil, 236, 237, 237, nil, nil, nil, 237, nil, - 237, 237, 237, 237, 237, 237, 237, nil, nil, nil, - nil, nil, 237, 237, 237, 237, 237, 237, 237, nil, - nil, 237, nil, nil, nil, nil, nil, nil, 237, nil, - nil, 237, 237, 237, 237, 237, 237, 237, 237, nil, - 237, 237, 237, nil, 237, 237, 237, 237, 237, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 237, nil, - nil, 237, nil, nil, 237, 237, nil, nil, 237, nil, - nil, nil, nil, nil, 237, nil, nil, nil, nil, nil, - nil, nil, 237, nil, nil, nil, nil, 237, 237, 237, - 237, nil, 237, 237, nil, nil, nil, 237, 237, nil, - 238, 238, 238, nil, 238, 237, nil, 237, 238, 238, - nil, nil, nil, 238, nil, 238, 238, 238, 238, 238, - 238, 238, nil, nil, nil, nil, nil, 238, 238, 238, - 238, 238, 238, 238, nil, nil, 238, nil, nil, nil, - nil, nil, nil, 238, nil, nil, 238, 238, 238, 238, - 238, 238, 238, 238, nil, 238, 238, 238, nil, 238, - 238, 238, 238, 238, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 238, nil, nil, 238, nil, nil, 238, - 238, nil, nil, 238, nil, nil, nil, nil, nil, 238, - nil, nil, nil, nil, nil, nil, nil, 238, nil, nil, - nil, nil, 238, 238, 238, 238, nil, 238, 238, nil, - nil, nil, 238, 238, nil, 239, 239, 239, nil, 239, - 238, nil, 238, 239, 239, nil, nil, nil, 239, nil, - 239, 239, 239, 239, 239, 239, 239, nil, nil, nil, - nil, nil, 239, 239, 239, 239, 239, 239, 239, nil, - nil, 239, nil, nil, nil, nil, nil, nil, 239, nil, - nil, 239, 239, 239, 239, 239, 239, 239, 239, nil, - 239, 239, 239, nil, 239, 239, 239, 239, 239, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 239, nil, - nil, 239, nil, nil, 239, 239, nil, nil, 239, nil, - nil, nil, nil, nil, 239, nil, nil, nil, nil, nil, - nil, nil, 239, nil, nil, nil, nil, 239, 239, 239, - 239, nil, 239, 239, nil, nil, nil, 239, 239, nil, - 240, 240, 240, nil, 240, 239, nil, 239, 240, 240, - nil, nil, nil, 240, nil, 240, 240, 240, 240, 240, - 240, 240, nil, nil, nil, nil, nil, 240, 240, 240, - 240, 240, 240, 240, nil, nil, 240, nil, nil, nil, - nil, nil, nil, 240, nil, nil, 240, 240, 240, 240, - 240, 240, 240, 240, nil, 240, 240, 240, nil, 240, - 240, 240, 240, 240, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 240, nil, nil, 240, nil, nil, 240, - 240, nil, nil, 240, nil, nil, nil, nil, nil, 240, - nil, nil, nil, nil, nil, nil, nil, 240, nil, nil, - nil, nil, 240, 240, 240, 240, nil, 240, 240, nil, - nil, nil, 240, 240, nil, 241, 241, 241, nil, 241, - 240, nil, 240, 241, 241, nil, nil, nil, 241, nil, - 241, 241, 241, 241, 241, 241, 241, nil, nil, nil, - nil, nil, 241, 241, 241, 241, 241, 241, 241, nil, - nil, 241, nil, nil, nil, nil, nil, nil, 241, nil, - nil, 241, 241, 241, 241, 241, 241, 241, 241, nil, - 241, 241, 241, nil, 241, 241, 241, 241, 241, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 241, nil, - nil, 241, nil, nil, 241, 241, nil, nil, 241, nil, - nil, nil, nil, nil, 241, nil, nil, nil, nil, nil, - nil, nil, 241, nil, nil, nil, nil, 241, 241, 241, - 241, nil, 241, 241, nil, nil, nil, 241, 241, nil, - 242, 242, 242, nil, 242, 241, nil, 241, 242, 242, - nil, nil, nil, 242, nil, 242, 242, 242, 242, 242, - 242, 242, nil, nil, nil, nil, nil, 242, 242, 242, - 242, 242, 242, 242, nil, nil, 242, nil, nil, nil, - nil, nil, nil, 242, nil, nil, 242, 242, 242, 242, - 242, 242, 242, 242, nil, 242, 242, 242, nil, 242, - 242, 242, 242, 242, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 242, nil, nil, 242, nil, nil, 242, - 242, nil, nil, 242, nil, nil, nil, nil, nil, 242, - nil, nil, nil, nil, nil, nil, nil, 242, nil, nil, - nil, nil, 242, 242, 242, 242, nil, 242, 242, nil, - nil, nil, 242, 242, nil, 243, 243, 243, nil, 243, - 242, nil, 242, 243, 243, nil, nil, nil, 243, nil, - 243, 243, 243, 243, 243, 243, 243, nil, nil, nil, - nil, nil, 243, 243, 243, 243, 243, 243, 243, nil, - nil, 243, nil, nil, nil, nil, nil, nil, 243, nil, - nil, 243, 243, 243, 243, 243, 243, 243, 243, nil, - 243, 243, 243, nil, 243, 243, 243, 243, 243, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 243, nil, - nil, 243, nil, nil, 243, 243, nil, nil, 243, nil, - nil, nil, nil, nil, 243, nil, nil, nil, nil, nil, - nil, nil, 243, nil, nil, nil, nil, 243, 243, 243, - 243, nil, 243, 243, nil, nil, nil, 243, 243, nil, - 244, 244, 244, nil, 244, 243, nil, 243, 244, 244, - nil, nil, nil, 244, nil, 244, 244, 244, 244, 244, - 244, 244, nil, nil, nil, nil, nil, 244, 244, 244, - 244, 244, 244, 244, nil, nil, 244, nil, nil, nil, - nil, nil, nil, 244, nil, nil, 244, 244, 244, 244, - 244, 244, 244, 244, nil, 244, 244, 244, nil, 244, - 244, 244, 244, 244, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 244, nil, nil, 244, nil, nil, 244, - 244, nil, nil, 244, nil, nil, nil, nil, nil, 244, - nil, nil, nil, nil, nil, nil, nil, 244, nil, nil, - nil, nil, 244, 244, 244, 244, nil, 244, 244, nil, - nil, nil, 244, 244, nil, 245, 245, 245, nil, 245, - 244, nil, 244, 245, 245, nil, nil, nil, 245, nil, - 245, 245, 245, 245, 245, 245, 245, nil, nil, nil, - nil, nil, 245, 245, 245, 245, 245, 245, 245, nil, - nil, 245, nil, nil, nil, nil, nil, nil, 245, nil, - nil, 245, 245, 245, 245, 245, 245, 245, 245, nil, - 245, 245, 245, nil, 245, 245, 245, 245, 245, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 245, nil, - nil, 245, nil, nil, 245, 245, nil, nil, 245, nil, - nil, nil, nil, nil, 245, nil, nil, nil, nil, nil, - nil, nil, 245, nil, nil, nil, nil, 245, 245, 245, - 245, nil, 245, 245, nil, nil, nil, 245, 245, nil, - 246, 246, 246, nil, 246, 245, nil, 245, 246, 246, - nil, nil, nil, 246, nil, 246, 246, 246, 246, 246, - 246, 246, nil, nil, nil, nil, nil, 246, 246, 246, - 246, 246, 246, 246, nil, nil, 246, nil, nil, nil, - nil, nil, nil, 246, nil, nil, 246, 246, 246, 246, - 246, 246, 246, 246, nil, 246, 246, 246, nil, 246, - 246, 246, 246, 246, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 246, nil, nil, 246, nil, nil, 246, - 246, nil, nil, 246, nil, nil, nil, nil, nil, 246, - nil, nil, nil, nil, nil, nil, nil, 246, nil, nil, - nil, nil, 246, 246, 246, 246, nil, 246, 246, nil, - nil, nil, 246, 246, nil, 252, 252, 252, nil, 252, - 246, nil, 246, 252, 252, nil, nil, nil, 252, nil, - 252, 252, 252, 252, 252, 252, 252, nil, nil, nil, - nil, nil, 252, 252, 252, 252, 252, 252, 252, nil, - nil, 252, nil, nil, nil, nil, nil, nil, 252, nil, - nil, 252, 252, 252, 252, 252, 252, 252, 252, 252, - 252, 252, 252, nil, 252, 252, 252, 252, 252, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 252, nil, - nil, 252, nil, nil, 252, 252, nil, nil, 252, nil, - 252, nil, 252, nil, 252, nil, nil, nil, nil, nil, - nil, nil, 252, nil, nil, nil, nil, 252, 252, 252, - 252, nil, 252, 252, nil, nil, nil, 252, 252, nil, - 253, 253, 253, nil, 253, 252, nil, 252, 253, 253, - nil, nil, nil, 253, nil, 253, 253, 253, 253, 253, - 253, 253, nil, nil, nil, nil, nil, 253, 253, 253, - 253, 253, 253, 253, nil, nil, 253, nil, nil, nil, - nil, nil, nil, 253, nil, nil, 253, 253, 253, 253, - 253, 253, 253, 253, 253, 253, 253, 253, nil, 253, - 253, 253, 253, 253, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 253, nil, nil, 253, nil, nil, 253, - 253, nil, nil, 253, nil, 253, nil, 253, nil, 253, - nil, nil, nil, nil, nil, nil, nil, 253, nil, nil, - nil, nil, 253, 253, 253, 253, nil, 253, 253, nil, - nil, nil, 253, 253, nil, 261, 261, 261, nil, 261, - 253, nil, 253, 261, 261, nil, nil, nil, 261, nil, - 261, 261, 261, 261, 261, 261, 261, nil, nil, nil, - nil, nil, 261, 261, 261, 261, 261, 261, 261, nil, - nil, 261, nil, nil, nil, nil, nil, nil, 261, nil, - nil, 261, 261, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, nil, 261, 261, 261, 261, 261, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 261, nil, - nil, 261, nil, nil, 261, 261, nil, nil, 261, nil, - 261, nil, 261, nil, 261, nil, nil, nil, nil, nil, - nil, nil, 261, nil, nil, nil, nil, 261, 261, 261, - 261, nil, 261, 261, nil, nil, nil, 261, 261, 261, - 268, 268, 268, nil, 268, 261, nil, 261, 268, 268, - nil, nil, nil, 268, nil, 268, 268, 268, 268, 268, - 268, 268, nil, nil, nil, nil, nil, 268, 268, 268, - 268, 268, 268, 268, nil, nil, 268, nil, nil, nil, - nil, nil, nil, 268, nil, nil, 268, 268, 268, 268, - 268, 268, 268, 268, nil, 268, 268, 268, nil, 268, - 268, 268, 268, 268, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 268, nil, nil, 268, nil, nil, 268, - 268, nil, nil, 268, nil, nil, nil, nil, nil, 268, - nil, nil, nil, nil, nil, nil, nil, 268, nil, nil, - nil, nil, 268, 268, 268, 268, nil, 268, 268, nil, - nil, nil, 268, 268, nil, 270, 270, 270, nil, 270, - 268, nil, 268, 270, 270, nil, nil, nil, 270, nil, - 270, 270, 270, 270, 270, 270, 270, nil, nil, nil, - nil, nil, 270, 270, 270, 270, 270, 270, 270, nil, - nil, 270, nil, nil, nil, nil, nil, nil, 270, nil, - nil, 270, 270, 270, 270, 270, 270, 270, 270, nil, - 270, 270, 270, nil, 270, 270, 270, 270, 270, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 270, nil, - nil, 270, nil, nil, 270, 270, nil, nil, 270, nil, - nil, nil, nil, nil, 270, nil, nil, nil, nil, nil, - nil, nil, 270, nil, nil, nil, nil, 270, 270, 270, - 270, nil, 270, 270, nil, nil, nil, 270, 270, nil, - 272, 272, 272, nil, 272, 270, nil, 270, 272, 272, - nil, nil, nil, 272, nil, 272, 272, 272, 272, 272, - 272, 272, nil, nil, nil, nil, nil, 272, 272, 272, - 272, 272, 272, 272, nil, nil, 272, nil, nil, nil, - nil, nil, nil, 272, nil, nil, 272, 272, 272, 272, - 272, 272, 272, 272, nil, 272, 272, 272, nil, 272, - 272, 272, 272, 272, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 272, nil, nil, 272, nil, nil, 272, - 272, nil, nil, 272, nil, nil, nil, nil, nil, 272, - nil, nil, nil, nil, nil, nil, nil, 272, nil, nil, - nil, nil, 272, 272, 272, 272, nil, 272, 272, nil, - nil, nil, 272, 272, nil, 277, 277, 277, 277, 277, - 272, nil, 272, 277, 277, nil, nil, nil, 277, nil, - 277, 277, 277, 277, 277, 277, 277, nil, nil, nil, - nil, nil, 277, 277, 277, 277, 277, 277, 277, nil, - nil, 277, nil, nil, nil, nil, nil, 277, 277, nil, - 277, 277, 277, 277, 277, 277, 277, 277, 277, nil, - 277, 277, 277, nil, 277, 277, 277, 277, 277, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 277, nil, - nil, 277, nil, nil, 277, 277, nil, nil, 277, nil, - 277, nil, nil, nil, 277, nil, nil, nil, nil, nil, - nil, nil, 277, nil, nil, nil, nil, 277, 277, 277, - 277, nil, 277, 277, nil, nil, nil, 277, 277, nil, - 283, 283, 283, nil, 283, 277, nil, 277, 283, 283, - nil, nil, nil, 283, nil, 283, 283, 283, 283, 283, - 283, 283, nil, nil, nil, nil, nil, 283, 283, 283, - 283, 283, 283, 283, nil, nil, 283, nil, nil, nil, - nil, nil, nil, 283, nil, nil, 283, 283, 283, 283, - 283, 283, 283, 283, nil, 283, 283, 283, nil, 283, - 283, nil, nil, 283, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, nil, 263, 263, nil, nil, - 263, 263, nil, 283, nil, nil, 283, nil, nil, 283, - 283, nil, nil, 283, nil, nil, 263, nil, 263, nil, - 263, 263, 263, 263, 263, 263, 263, nil, 263, nil, - nil, nil, 283, 283, 283, 283, nil, 283, 283, nil, - nil, nil, 283, 283, nil, 263, nil, 283, nil, nil, - 283, nil, 283, 299, 299, 299, nil, 299, nil, nil, - nil, 299, 299, nil, nil, nil, 299, nil, 299, 299, - 299, 299, 299, 299, 299, nil, nil, nil, nil, nil, - 299, 299, 299, 299, 299, 299, 299, nil, nil, 299, - nil, nil, nil, nil, nil, nil, 299, nil, nil, 299, - 299, 299, 299, 299, 299, 299, 299, nil, 299, 299, - 299, nil, 299, 299, nil, 807, 299, 807, 807, 807, - 807, 807, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 299, nil, nil, 299, - nil, nil, 299, 299, nil, nil, 299, nil, nil, nil, - nil, nil, 807, nil, nil, nil, nil, nil, nil, nil, - nil, 807, 807, 807, 807, 299, 299, 299, 299, nil, - 299, 299, nil, nil, nil, 299, 299, nil, 308, 308, - 308, nil, 308, 299, nil, 299, 308, 308, nil, nil, - nil, 308, nil, 308, 308, 308, 308, 308, 308, 308, - nil, nil, nil, nil, nil, 308, 308, 308, 308, 308, - 308, 308, nil, nil, 308, nil, nil, nil, nil, nil, - nil, 308, nil, nil, 308, 308, 308, 308, 308, 308, - 308, 308, nil, 308, 308, 308, nil, 308, 308, 308, - 308, 308, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 308, nil, nil, 308, 308, nil, 308, 308, nil, - nil, 308, nil, nil, nil, nil, nil, 308, nil, nil, - nil, nil, nil, nil, nil, 308, nil, nil, nil, nil, - 308, 308, 308, 308, nil, 308, 308, nil, nil, nil, - 308, 308, nil, 324, 324, 324, nil, 324, 308, nil, - 308, 324, 324, nil, nil, nil, 324, nil, 324, 324, - 324, 324, 324, 324, 324, nil, nil, nil, nil, nil, - 324, 324, 324, 324, 324, 324, 324, nil, nil, 324, - nil, nil, nil, nil, nil, nil, 324, nil, nil, 324, - 324, 324, 324, 324, 324, 324, 324, nil, 324, 324, - 324, nil, 324, 324, 324, 324, 324, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 324, nil, nil, 324, - nil, nil, 324, 324, nil, nil, 324, nil, nil, nil, - nil, nil, 324, nil, nil, nil, nil, nil, nil, nil, - 324, nil, nil, nil, nil, 324, 324, 324, 324, nil, - 324, 324, nil, nil, nil, 324, 324, nil, 325, 325, - 325, nil, 325, 324, nil, 324, 325, 325, nil, nil, - nil, 325, nil, 325, 325, 325, 325, 325, 325, 325, - nil, nil, nil, nil, nil, 325, 325, 325, 325, 325, - 325, 325, nil, nil, 325, nil, nil, nil, nil, nil, - nil, 325, nil, nil, 325, 325, 325, 325, 325, 325, - 325, 325, nil, 325, 325, 325, nil, 325, 325, 325, - 325, 325, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 325, nil, nil, 325, nil, nil, 325, 325, nil, - nil, 325, nil, nil, nil, nil, nil, 325, nil, nil, - nil, nil, nil, nil, nil, 325, nil, nil, nil, nil, - 325, 325, 325, 325, nil, 325, 325, nil, nil, nil, - 325, 325, nil, 343, 343, 343, nil, 343, 325, nil, - 325, 343, 343, nil, nil, nil, 343, nil, 343, 343, - 343, 343, 343, 343, 343, nil, nil, nil, nil, nil, - 343, 343, 343, 343, 343, 343, 343, nil, nil, 343, - nil, nil, nil, nil, nil, nil, 343, nil, nil, 343, - 343, 343, 343, 343, 343, 343, 343, nil, 343, 343, - 343, nil, 343, 343, 343, 343, 343, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 343, nil, nil, 343, - nil, nil, 343, 343, nil, nil, 343, nil, nil, nil, - nil, nil, 343, nil, nil, nil, nil, nil, nil, nil, - 343, nil, nil, nil, nil, 343, 343, 343, 343, nil, - 343, 343, nil, nil, nil, 343, 343, nil, 358, 358, - 358, nil, 358, 343, nil, 343, 358, 358, nil, nil, - nil, 358, nil, 358, 358, 358, 358, 358, 358, 358, - nil, nil, nil, nil, nil, 358, 358, 358, 358, 358, - 358, 358, nil, nil, 358, nil, nil, nil, nil, nil, - nil, 358, nil, nil, 358, 358, 358, 358, 358, 358, - 358, 358, nil, 358, 358, 358, nil, 358, 358, 358, - 358, 358, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 358, nil, nil, 358, nil, nil, 358, 358, nil, - nil, 358, nil, nil, nil, nil, nil, 358, nil, nil, - nil, nil, nil, nil, nil, 358, nil, nil, nil, nil, - 358, 358, 358, 358, nil, 358, 358, nil, nil, nil, - 358, 358, nil, 385, 385, 385, nil, 385, 358, nil, - 358, 385, 385, nil, nil, nil, 385, nil, 385, 385, - 385, 385, 385, 385, 385, nil, nil, nil, nil, nil, - 385, 385, 385, 385, 385, 385, 385, nil, nil, 385, - nil, nil, nil, nil, nil, nil, 385, nil, nil, 385, - 385, 385, 385, 385, 385, 385, 385, nil, 385, 385, - 385, nil, 385, 385, 385, 385, 385, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 385, nil, nil, 385, - nil, nil, 385, 385, nil, nil, 385, nil, nil, nil, - nil, nil, 385, nil, nil, nil, nil, nil, nil, nil, - 385, nil, nil, nil, nil, 385, 385, 385, 385, nil, - 385, 385, nil, nil, nil, 385, 385, nil, 417, 417, - 417, nil, 417, 385, nil, 385, 417, 417, nil, nil, - nil, 417, nil, 417, 417, 417, 417, 417, 417, 417, - nil, nil, nil, nil, nil, 417, 417, 417, 417, 417, - 417, 417, nil, nil, 417, nil, nil, nil, nil, nil, - nil, 417, nil, nil, 417, 417, 417, 417, 417, 417, - 417, 417, 417, 417, 417, 417, nil, 417, 417, 417, - 417, 417, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 417, nil, nil, 417, nil, nil, 417, 417, nil, - nil, 417, nil, 417, nil, 417, nil, 417, nil, nil, - nil, nil, nil, nil, nil, 417, nil, nil, nil, nil, - 417, 417, 417, 417, nil, 417, 417, nil, nil, nil, - 417, 417, nil, 419, 419, 419, nil, 419, 417, nil, - 417, 419, 419, nil, nil, nil, 419, nil, 419, 419, - 419, 419, 419, 419, 419, nil, nil, nil, nil, nil, - 419, 419, 419, 419, 419, 419, 419, nil, nil, 419, - nil, nil, nil, nil, nil, nil, 419, nil, nil, 419, - 419, 419, 419, 419, 419, 419, 419, nil, 419, 419, - 419, nil, 419, 419, 419, 419, 419, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 419, nil, nil, 419, - nil, nil, 419, 419, nil, nil, 419, nil, nil, nil, - nil, nil, 419, nil, nil, nil, nil, nil, nil, nil, - 419, nil, nil, nil, nil, 419, 419, 419, 419, nil, - 419, 419, nil, nil, nil, 419, 419, nil, 420, 420, - 420, nil, 420, 419, nil, 419, 420, 420, nil, nil, - nil, 420, nil, 420, 420, 420, 420, 420, 420, 420, - nil, nil, nil, nil, nil, 420, 420, 420, 420, 420, - 420, 420, nil, nil, 420, nil, nil, nil, nil, nil, - nil, 420, nil, nil, 420, 420, 420, 420, 420, 420, - 420, 420, nil, 420, 420, 420, nil, 420, 420, 420, - 420, 420, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 420, nil, nil, 420, nil, nil, 420, 420, nil, - nil, 420, nil, nil, nil, nil, nil, 420, nil, nil, - nil, nil, nil, nil, nil, 420, nil, nil, nil, nil, - 420, 420, 420, 420, nil, 420, 420, nil, nil, nil, - 420, 420, nil, 421, 421, 421, nil, 421, 420, nil, - 420, 421, 421, nil, nil, nil, 421, nil, 421, 421, - 421, 421, 421, 421, 421, nil, nil, nil, nil, nil, - 421, 421, 421, 421, 421, 421, 421, nil, nil, 421, - nil, nil, nil, nil, nil, nil, 421, nil, nil, 421, - 421, 421, 421, 421, 421, 421, 421, nil, 421, 421, - 421, nil, 421, 421, 421, 421, 421, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 421, nil, nil, 421, - nil, nil, 421, 421, nil, nil, 421, nil, nil, nil, - nil, nil, 421, nil, nil, nil, nil, nil, nil, nil, - 421, nil, nil, nil, nil, 421, 421, 421, 421, nil, - 421, 421, nil, nil, nil, 421, 421, nil, 458, 458, - 458, nil, 458, 421, nil, 421, 458, 458, nil, nil, - nil, 458, nil, 458, 458, 458, 458, 458, 458, 458, - nil, nil, nil, nil, nil, 458, 458, 458, 458, 458, - 458, 458, nil, nil, 458, nil, nil, nil, nil, nil, - nil, 458, nil, nil, 458, 458, 458, 458, 458, 458, - 458, 458, 458, 458, 458, 458, nil, 458, 458, 458, - 458, 458, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 458, nil, nil, 458, nil, nil, 458, 458, nil, - nil, 458, nil, nil, nil, 458, nil, 458, nil, nil, - nil, nil, nil, nil, nil, 458, nil, nil, nil, nil, - 458, 458, 458, 458, nil, 458, 458, nil, nil, nil, - 458, 458, nil, 464, 464, 464, nil, 464, 458, nil, - 458, 464, 464, nil, nil, nil, 464, nil, 464, 464, - 464, 464, 464, 464, 464, nil, nil, nil, nil, nil, - 464, 464, 464, 464, 464, 464, 464, nil, nil, 464, - nil, nil, nil, nil, nil, nil, 464, nil, nil, 464, - 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, - 464, nil, 464, 464, 464, 464, 464, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 464, nil, nil, 464, - nil, nil, 464, 464, nil, nil, 464, nil, 464, nil, - 464, nil, 464, nil, nil, nil, nil, nil, nil, nil, - 464, nil, nil, nil, nil, 464, 464, 464, 464, nil, - 464, 464, nil, nil, nil, 464, 464, nil, 466, 466, - 466, nil, 466, 464, nil, 464, 466, 466, nil, nil, - nil, 466, nil, 466, 466, 466, 466, 466, 466, 466, - nil, nil, nil, nil, nil, 466, 466, 466, 466, 466, - 466, 466, nil, nil, 466, nil, nil, nil, nil, nil, - nil, 466, nil, nil, 466, 466, 466, 466, 466, 466, - 466, 466, 466, 466, 466, 466, nil, 466, 466, 466, - 466, 466, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 466, nil, nil, 466, nil, nil, 466, 466, nil, - nil, 466, nil, nil, nil, 466, nil, 466, nil, nil, - nil, nil, nil, nil, nil, 466, nil, nil, nil, nil, - 466, 466, 466, 466, nil, 466, 466, nil, nil, nil, - 466, 466, nil, 468, 468, 468, nil, 468, 466, nil, - 466, 468, 468, nil, nil, nil, 468, nil, 468, 468, - 468, 468, 468, 468, 468, nil, nil, nil, nil, nil, - 468, 468, 468, 468, 468, 468, 468, nil, nil, 468, - nil, nil, nil, nil, nil, nil, 468, nil, nil, 468, - 468, 468, 468, 468, 468, 468, 468, nil, 468, 468, - 468, nil, 468, 468, 468, 468, 468, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 468, nil, nil, 468, - nil, nil, 468, 468, nil, nil, 468, nil, nil, nil, - nil, nil, 468, nil, nil, nil, nil, nil, nil, nil, - 468, nil, nil, nil, nil, 468, 468, 468, 468, nil, - 468, 468, nil, nil, nil, 468, 468, nil, 472, 472, - 472, 472, 472, 468, nil, 468, 472, 472, nil, nil, - nil, 472, nil, 472, 472, 472, 472, 472, 472, 472, - nil, nil, nil, nil, nil, 472, 472, 472, 472, 472, - 472, 472, nil, nil, 472, nil, nil, nil, nil, nil, - 472, 472, nil, 472, 472, 472, 472, 472, 472, 472, - 472, 472, nil, 472, 472, 472, nil, 472, 472, 472, - 472, 472, 408, 408, 408, 408, 408, 408, 408, 408, - 408, 408, 408, nil, 408, 408, nil, nil, 408, 408, - nil, 472, nil, nil, 472, nil, nil, 472, 472, nil, - nil, 472, nil, 472, 408, nil, 408, 472, 408, 408, - 408, 408, 408, 408, 408, 472, 408, nil, nil, nil, - 472, 472, 472, 472, nil, 472, 472, nil, nil, nil, - 472, 472, nil, 408, nil, nil, nil, 472, 472, nil, - 472, 479, 479, 479, nil, 479, nil, nil, nil, 479, - 479, nil, nil, nil, 479, nil, 479, 479, 479, 479, - 479, 479, 479, nil, nil, nil, nil, nil, 479, 479, - 479, 479, 479, 479, 479, nil, nil, 479, nil, nil, - nil, nil, nil, nil, 479, nil, nil, 479, 479, 479, - 479, 479, 479, 479, 479, nil, 479, 479, 479, nil, - 479, 479, nil, 864, 479, 864, 864, 864, 864, 864, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 479, nil, nil, 479, nil, nil, - 479, 479, nil, nil, 479, nil, nil, nil, nil, nil, - 864, 864, nil, nil, nil, nil, nil, nil, nil, 864, - 864, 864, 864, 479, 479, 479, 479, nil, 479, 479, - nil, nil, nil, 479, 479, nil, 481, 481, 481, nil, - 481, 479, nil, 479, 481, 481, nil, nil, nil, 481, - nil, 481, 481, 481, 481, 481, 481, 481, nil, nil, - nil, nil, nil, 481, 481, 481, 481, 481, 481, 481, - nil, nil, 481, nil, nil, nil, nil, nil, nil, 481, - nil, nil, 481, 481, 481, 481, 481, 481, 481, 481, - 481, 481, 481, 481, nil, 481, 481, 481, 481, 481, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 481, - nil, nil, 481, nil, nil, 481, 481, nil, nil, 481, - nil, 481, nil, 481, nil, 481, nil, nil, nil, nil, - nil, nil, nil, 481, nil, nil, nil, nil, 481, 481, - 481, 481, nil, 481, 481, nil, nil, nil, 481, 481, - nil, 488, 488, 488, nil, 488, 481, nil, 481, 488, - 488, nil, nil, nil, 488, nil, 488, 488, 488, 488, - 488, 488, 488, nil, nil, nil, nil, nil, 488, 488, - 488, 488, 488, 488, 488, nil, nil, 488, nil, nil, - nil, nil, nil, nil, 488, nil, nil, 488, 488, 488, - 488, 488, 488, 488, 488, nil, 488, 488, 488, nil, - 488, 488, nil, 890, 488, 890, 890, 890, 890, 890, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 488, nil, nil, 488, nil, nil, - 488, 488, nil, nil, 488, nil, nil, nil, nil, nil, - 890, nil, nil, nil, nil, nil, nil, nil, nil, 890, - 890, 890, 890, 488, 488, 488, 488, nil, 488, 488, - nil, nil, nil, 488, 488, nil, 491, 491, 491, nil, - 491, 488, nil, 488, 491, 491, nil, nil, nil, 491, - nil, 491, 491, 491, 491, 491, 491, 491, nil, nil, - nil, nil, nil, 491, 491, 491, 491, 491, 491, 491, - nil, nil, 491, nil, nil, nil, nil, nil, nil, 491, - nil, nil, 491, 491, 491, 491, 491, 491, 491, 491, - nil, 491, 491, 491, nil, 491, 491, 491, 491, 491, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 491, - nil, nil, 491, nil, nil, 491, 491, nil, nil, 491, - nil, nil, nil, nil, nil, 491, nil, nil, nil, nil, - nil, nil, nil, 491, nil, nil, nil, nil, 491, 491, - 491, 491, nil, 491, 491, nil, nil, nil, 491, 491, - nil, 492, 492, 492, nil, 492, 491, nil, 491, 492, - 492, nil, nil, nil, 492, nil, 492, 492, 492, 492, - 492, 492, 492, nil, nil, nil, nil, nil, 492, 492, - 492, 492, 492, 492, 492, nil, nil, 492, nil, nil, - nil, nil, nil, nil, 492, nil, nil, 492, 492, 492, - 492, 492, 492, 492, 492, nil, 492, 492, 492, nil, - 492, 492, 492, 492, 492, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 492, nil, nil, 492, nil, nil, - 492, 492, nil, nil, 492, nil, nil, nil, nil, nil, - 492, nil, nil, nil, nil, nil, nil, nil, 492, nil, - nil, nil, nil, 492, 492, 492, 492, nil, 492, 492, - nil, nil, nil, 492, 492, nil, 493, 493, 493, nil, - 493, 492, nil, 492, 493, 493, nil, nil, nil, 493, - nil, 493, 493, 493, 493, 493, 493, 493, nil, nil, - nil, nil, nil, 493, 493, 493, 493, 493, 493, 493, - nil, nil, 493, nil, nil, nil, nil, nil, nil, 493, - nil, nil, 493, 493, 493, 493, 493, 493, 493, 493, - nil, 493, 493, 493, nil, 493, 493, 493, 493, 493, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 493, - nil, nil, 493, nil, nil, 493, 493, nil, nil, 493, - nil, nil, nil, nil, nil, 493, nil, nil, nil, nil, - nil, nil, nil, 493, nil, nil, nil, nil, 493, 493, - 493, 493, nil, 493, 493, nil, nil, nil, 493, 493, - nil, 497, 497, 497, nil, 497, 493, nil, 493, 497, - 497, nil, nil, nil, 497, nil, 497, 497, 497, 497, - 497, 497, 497, nil, nil, nil, nil, nil, 497, 497, - 497, 497, 497, 497, 497, nil, nil, 497, nil, nil, - nil, nil, nil, nil, 497, nil, nil, 497, 497, 497, - 497, 497, 497, 497, 497, nil, 497, 497, 497, nil, - 497, 497, 497, 497, 497, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 497, nil, nil, 497, nil, nil, - 497, 497, nil, nil, 497, nil, nil, nil, nil, nil, - 497, nil, nil, nil, nil, nil, nil, nil, 497, nil, - nil, nil, nil, 497, 497, 497, 497, nil, 497, 497, - nil, nil, nil, 497, 497, nil, 499, 499, 499, nil, - 499, 497, nil, 497, 499, 499, nil, nil, nil, 499, - nil, 499, 499, 499, 499, 499, 499, 499, nil, nil, - nil, nil, nil, 499, 499, 499, 499, 499, 499, 499, - nil, nil, 499, nil, nil, nil, nil, nil, nil, 499, - nil, nil, 499, 499, 499, 499, 499, 499, 499, 499, - nil, 499, 499, 499, nil, 499, 499, 499, 499, 499, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 499, - nil, nil, 499, nil, nil, 499, 499, nil, nil, 499, - nil, 499, nil, nil, nil, 499, nil, nil, nil, nil, - nil, nil, nil, 499, nil, nil, nil, nil, 499, 499, - 499, 499, nil, 499, 499, nil, nil, nil, 499, 499, - nil, 503, 503, 503, nil, 503, 499, nil, 499, 503, - 503, nil, nil, nil, 503, nil, 503, 503, 503, 503, - 503, 503, 503, nil, nil, nil, nil, nil, 503, 503, - 503, 503, 503, 503, 503, nil, nil, 503, nil, nil, - nil, nil, nil, nil, 503, nil, nil, 503, 503, 503, - 503, 503, 503, 503, 503, 503, 503, 503, 503, nil, - 503, 503, 503, 503, 503, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 503, nil, nil, 503, nil, nil, - 503, 503, nil, nil, 503, nil, 503, nil, nil, nil, - 503, nil, nil, nil, nil, nil, nil, nil, 503, nil, - nil, nil, nil, 503, 503, 503, 503, nil, 503, 503, - nil, nil, nil, 503, 503, nil, 506, 506, 506, nil, - 506, 503, nil, 503, 506, 506, nil, nil, nil, 506, - nil, 506, 506, 506, 506, 506, 506, 506, nil, nil, - nil, nil, nil, 506, 506, 506, 506, 506, 506, 506, - nil, nil, 506, nil, nil, nil, nil, nil, nil, 506, - nil, nil, 506, 506, 506, 506, 506, 506, 506, 506, - 506, 506, 506, 506, nil, 506, 506, 506, 506, 506, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 506, - nil, nil, 506, nil, nil, 506, 506, nil, nil, 506, - nil, nil, nil, nil, nil, 506, nil, nil, nil, nil, - nil, nil, nil, 506, nil, nil, nil, nil, 506, 506, - 506, 506, nil, 506, 506, nil, nil, nil, 506, 506, - nil, 520, 520, 520, nil, 520, 506, nil, 506, 520, - 520, nil, nil, nil, 520, nil, 520, 520, 520, 520, - 520, 520, 520, nil, nil, nil, nil, nil, 520, 520, - 520, 520, 520, 520, 520, nil, nil, 520, nil, nil, - nil, nil, nil, nil, 520, nil, nil, 520, 520, 520, - 520, 520, 520, 520, 520, nil, 520, 520, 520, nil, - 520, 520, 520, 520, 520, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 520, nil, nil, 520, nil, nil, - 520, 520, nil, nil, 520, nil, 520, nil, nil, nil, - 520, nil, nil, nil, nil, nil, nil, nil, 520, nil, - nil, nil, nil, 520, 520, 520, 520, nil, 520, 520, - nil, nil, nil, 520, 520, nil, 521, 521, 521, nil, - 521, 520, nil, 520, 521, 521, nil, nil, nil, 521, - nil, 521, 521, 521, 521, 521, 521, 521, nil, nil, - nil, nil, nil, 521, 521, 521, 521, 521, 521, 521, - nil, nil, 521, nil, nil, nil, nil, nil, nil, 521, - nil, nil, 521, 521, 521, 521, 521, 521, 521, 521, - 521, 521, 521, 521, nil, 521, 521, 521, 521, 521, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 521, - nil, nil, 521, nil, nil, 521, 521, nil, nil, 521, - nil, 521, nil, 521, nil, 521, nil, nil, nil, nil, - nil, nil, nil, 521, nil, nil, nil, nil, 521, 521, - 521, 521, nil, 521, 521, nil, nil, nil, 521, 521, - nil, 531, 531, 531, nil, 531, 521, nil, 521, 531, - 531, nil, nil, nil, 531, nil, 531, 531, 531, 531, - 531, 531, 531, nil, nil, nil, nil, nil, 531, 531, - 531, 531, 531, 531, 531, nil, nil, 531, nil, nil, - nil, nil, nil, nil, 531, nil, nil, 531, 531, 531, - 531, 531, 531, 531, 531, 531, 531, 531, 531, nil, - 531, 531, 531, 531, 531, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 531, nil, nil, 531, nil, nil, - 531, 531, nil, nil, 531, nil, 531, nil, 531, nil, - 531, nil, nil, nil, nil, nil, nil, nil, 531, nil, - nil, nil, nil, 531, 531, 531, 531, nil, 531, 531, - nil, nil, nil, 531, 531, nil, 534, 534, 534, nil, - 534, 531, nil, 531, 534, 534, nil, nil, nil, 534, - nil, 534, 534, 534, 534, 534, 534, 534, nil, nil, - nil, nil, nil, 534, 534, 534, 534, 534, 534, 534, - nil, nil, 534, nil, nil, nil, nil, nil, nil, 534, - nil, nil, 534, 534, 534, 534, 534, 534, 534, 534, - nil, 534, 534, 534, nil, 534, 534, 534, 534, 534, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 534, - nil, nil, 534, nil, nil, 534, 534, nil, nil, 534, - nil, nil, nil, nil, nil, 534, nil, nil, nil, nil, - nil, nil, nil, 534, nil, nil, nil, nil, 534, 534, - 534, 534, nil, 534, 534, nil, nil, nil, 534, 534, - nil, 562, 562, 562, nil, 562, 534, nil, 534, 562, - 562, nil, nil, nil, 562, nil, 562, 562, 562, 562, - 562, 562, 562, nil, nil, nil, nil, nil, 562, 562, - 562, 562, 562, 562, 562, nil, nil, 562, nil, nil, - nil, nil, nil, nil, 562, nil, nil, 562, 562, 562, - 562, 562, 562, 562, 562, nil, 562, 562, 562, nil, - 562, 562, 562, 562, 562, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 562, nil, nil, 562, nil, nil, - 562, 562, nil, nil, 562, nil, nil, nil, nil, nil, - 562, nil, nil, nil, nil, nil, nil, nil, 562, nil, - nil, nil, nil, 562, 562, 562, 562, nil, 562, 562, - nil, nil, nil, 562, 562, nil, 564, 564, 564, nil, - 564, 562, nil, 562, 564, 564, nil, nil, nil, 564, - nil, 564, 564, 564, 564, 564, 564, 564, nil, nil, - nil, nil, nil, 564, 564, 564, 564, 564, 564, 564, - nil, nil, 564, nil, nil, nil, nil, nil, nil, 564, - nil, nil, 564, 564, 564, 564, 564, 564, 564, 564, - nil, 564, 564, 564, nil, 564, 564, 564, 564, 564, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 564, - nil, nil, 564, nil, nil, 564, 564, nil, nil, 564, - nil, 564, nil, nil, nil, 564, nil, nil, nil, nil, - nil, nil, nil, 564, nil, nil, nil, nil, 564, 564, - 564, 564, nil, 564, 564, nil, nil, nil, 564, 564, - nil, 565, 565, 565, nil, 565, 564, nil, 564, 565, - 565, nil, nil, nil, 565, nil, 565, 565, 565, 565, - 565, 565, 565, nil, nil, nil, nil, nil, 565, 565, - 565, 565, 565, 565, 565, nil, nil, 565, nil, nil, - nil, nil, nil, nil, 565, nil, nil, 565, 565, 565, - 565, 565, 565, 565, 565, nil, 565, 565, 565, nil, - 565, 565, 565, 565, 565, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 565, nil, nil, 565, nil, nil, - 565, 565, nil, nil, 565, nil, nil, nil, nil, nil, - 565, nil, nil, nil, nil, nil, nil, nil, 565, nil, - nil, nil, nil, 565, 565, 565, 565, nil, 565, 565, - nil, nil, nil, 565, 565, nil, 568, 568, 568, nil, - 568, 565, nil, 565, 568, 568, nil, nil, nil, 568, - nil, 568, 568, 568, 568, 568, 568, 568, nil, nil, - nil, nil, nil, 568, 568, 568, 568, 568, 568, 568, - nil, nil, 568, nil, nil, nil, nil, nil, nil, 568, - nil, nil, 568, 568, 568, 568, 568, 568, 568, 568, - nil, 568, 568, 568, nil, 568, 568, 568, 568, 568, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 568, - nil, nil, 568, nil, nil, 568, 568, nil, nil, 568, - nil, nil, nil, nil, nil, 568, nil, nil, nil, nil, - nil, nil, nil, 568, nil, nil, nil, nil, 568, 568, - 568, 568, nil, 568, 568, nil, nil, nil, 568, 568, - nil, 569, 569, 569, nil, 569, 568, nil, 568, 569, - 569, nil, nil, nil, 569, nil, 569, 569, 569, 569, - 569, 569, 569, nil, nil, nil, nil, nil, 569, 569, - 569, 569, 569, 569, 569, nil, nil, 569, nil, nil, - nil, nil, nil, nil, 569, nil, nil, 569, 569, 569, - 569, 569, 569, 569, 569, nil, 569, 569, 569, nil, - 569, 569, 569, 569, 569, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 569, nil, nil, 569, nil, nil, - 569, 569, nil, nil, 569, nil, nil, nil, nil, nil, - 569, nil, nil, nil, nil, nil, nil, nil, 569, nil, - nil, nil, nil, 569, 569, 569, 569, nil, 569, 569, - nil, nil, nil, 569, 569, nil, 573, 573, 573, nil, - 573, 569, nil, 569, 573, 573, nil, nil, nil, 573, - nil, 573, 573, 573, 573, 573, 573, 573, nil, nil, - nil, nil, nil, 573, 573, 573, 573, 573, 573, 573, - nil, nil, 573, nil, nil, nil, nil, nil, nil, 573, - nil, nil, 573, 573, 573, 573, 573, 573, 573, 573, - nil, 573, 573, 573, nil, 573, 573, 573, 573, 573, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 573, - nil, nil, 573, nil, nil, 573, 573, nil, nil, 573, - nil, nil, nil, nil, nil, 573, nil, nil, nil, nil, - nil, nil, nil, 573, nil, nil, nil, nil, 573, 573, - 573, 573, nil, 573, 573, nil, nil, nil, 573, 573, - nil, 574, 574, 574, nil, 574, 573, nil, 573, 574, - 574, nil, nil, nil, 574, nil, 574, 574, 574, 574, - 574, 574, 574, nil, nil, nil, nil, nil, 574, 574, - 574, 574, 574, 574, 574, nil, nil, 574, nil, nil, - nil, nil, nil, nil, 574, nil, nil, 574, 574, 574, - 574, 574, 574, 574, 574, nil, 574, 574, 574, nil, - 574, 574, 574, 574, 574, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 574, nil, nil, 574, nil, nil, - 574, 574, nil, nil, 574, nil, nil, nil, nil, nil, - 574, nil, nil, nil, nil, nil, nil, nil, 574, nil, - nil, nil, nil, 574, 574, 574, 574, nil, 574, 574, - nil, nil, nil, 574, 574, nil, 608, 608, 608, nil, - 608, 574, nil, 574, 608, 608, nil, nil, nil, 608, - nil, 608, 608, 608, 608, 608, 608, 608, nil, nil, - nil, nil, nil, 608, 608, 608, 608, 608, 608, 608, - nil, nil, 608, nil, nil, nil, nil, nil, nil, 608, - nil, nil, 608, 608, 608, 608, 608, 608, 608, 608, - nil, 608, 608, 608, nil, 608, 608, 608, 608, 608, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 608, - nil, nil, 608, nil, nil, 608, 608, nil, nil, 608, - nil, nil, nil, nil, nil, 608, nil, nil, nil, nil, - nil, nil, nil, 608, nil, nil, nil, nil, 608, 608, - 608, 608, nil, 608, 608, nil, nil, nil, 608, 608, - nil, 613, 613, 613, nil, 613, 608, nil, 608, 613, - 613, nil, nil, nil, 613, nil, 613, 613, 613, 613, - 613, 613, 613, nil, nil, nil, nil, nil, 613, 613, - 613, 613, 613, 613, 613, nil, nil, 613, nil, nil, - nil, nil, nil, nil, 613, nil, nil, 613, 613, 613, - 613, 613, 613, 613, 613, nil, 613, 613, 613, nil, - 613, 613, nil, 913, 613, 913, 913, 913, 913, 913, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 613, nil, nil, 613, nil, nil, - 613, 613, nil, nil, 613, nil, nil, nil, nil, nil, - 913, nil, nil, nil, nil, nil, nil, nil, nil, 913, - 913, 913, 913, 613, 613, 613, 613, nil, 613, 613, - nil, nil, nil, 613, 613, nil, 624, 624, 624, nil, - 624, 613, nil, 613, 624, 624, nil, nil, nil, 624, - nil, 624, 624, 624, 624, 624, 624, 624, nil, nil, - nil, nil, nil, 624, 624, 624, 624, 624, 624, 624, - nil, nil, 624, nil, nil, nil, nil, nil, nil, 624, - nil, nil, 624, 624, 624, 624, 624, 624, 624, 624, - nil, 624, 624, 624, nil, 624, 624, nil, nil, 624, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 624, - nil, nil, 624, nil, nil, 624, 624, nil, nil, 624, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 624, 624, - 624, 624, nil, 624, 624, nil, nil, nil, 624, 624, - nil, 677, 677, 677, nil, 677, 624, nil, 624, 677, - 677, nil, nil, nil, 677, nil, 677, 677, 677, 677, - 677, 677, 677, nil, nil, nil, nil, nil, 677, 677, - 677, 677, 677, 677, 677, nil, nil, 677, nil, nil, - nil, nil, nil, nil, 677, nil, nil, 677, 677, 677, - 677, 677, 677, 677, 677, nil, 677, 677, 677, nil, - 677, 677, 677, 677, 677, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 677, nil, nil, 677, nil, nil, - 677, 677, nil, nil, 677, nil, nil, nil, nil, nil, - 677, nil, nil, nil, nil, nil, nil, nil, 677, nil, - nil, nil, nil, 677, 677, 677, 677, nil, 677, 677, - nil, nil, nil, 677, 677, nil, 705, 705, 705, nil, - 705, 677, nil, 677, 705, 705, nil, nil, nil, 705, - nil, 705, 705, 705, 705, 705, 705, 705, nil, nil, - nil, nil, nil, 705, 705, 705, 705, 705, 705, 705, - nil, nil, 705, nil, nil, nil, nil, nil, nil, 705, - nil, nil, 705, 705, 705, 705, 705, 705, 705, 705, - nil, 705, 705, 705, nil, 705, 705, 705, 705, 705, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 705, - nil, nil, 705, nil, nil, 705, 705, nil, nil, 705, - nil, nil, nil, nil, nil, 705, nil, nil, nil, nil, - nil, nil, nil, 705, nil, nil, nil, nil, 705, 705, - 705, 705, nil, 705, 705, nil, nil, nil, 705, 705, - nil, 707, 707, 707, nil, 707, 705, nil, 705, 707, - 707, nil, nil, nil, 707, nil, 707, 707, 707, 707, - 707, 707, 707, nil, nil, nil, nil, nil, 707, 707, - 707, 707, 707, 707, 707, nil, nil, 707, nil, nil, - nil, nil, nil, nil, 707, nil, nil, 707, 707, 707, - 707, 707, 707, 707, 707, nil, 707, 707, 707, nil, - 707, 707, 707, 707, 707, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 707, nil, nil, 707, nil, nil, - 707, 707, nil, nil, 707, nil, nil, nil, nil, nil, - 707, nil, nil, nil, nil, nil, nil, nil, 707, nil, - nil, nil, nil, 707, 707, 707, 707, nil, 707, 707, - nil, nil, nil, 707, 707, nil, 719, 719, 719, nil, - 719, 707, nil, 707, 719, 719, nil, nil, nil, 719, - nil, 719, 719, 719, 719, 719, 719, 719, nil, nil, - nil, nil, nil, 719, 719, 719, 719, 719, 719, 719, - nil, nil, 719, nil, nil, nil, nil, nil, nil, 719, - nil, nil, 719, 719, 719, 719, 719, 719, 719, 719, - nil, 719, 719, 719, nil, 719, 719, 719, 719, 719, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 719, - nil, nil, 719, nil, nil, 719, 719, nil, nil, 719, - nil, nil, nil, nil, nil, 719, nil, nil, nil, nil, - nil, nil, nil, 719, nil, nil, nil, nil, 719, 719, - 719, 719, nil, 719, 719, nil, nil, nil, 719, 719, - nil, 720, 720, 720, nil, 720, 719, nil, 719, 720, - 720, nil, nil, nil, 720, nil, 720, 720, 720, 720, - 720, 720, 720, nil, nil, nil, nil, nil, 720, 720, - 720, 720, 720, 720, 720, nil, nil, 720, nil, nil, - nil, nil, nil, nil, 720, nil, nil, 720, 720, 720, - 720, 720, 720, 720, 720, nil, 720, 720, 720, nil, - 720, 720, 720, 720, 720, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 720, nil, nil, 720, nil, nil, - 720, 720, nil, nil, 720, nil, nil, nil, nil, nil, - 720, nil, nil, nil, nil, nil, nil, nil, 720, nil, - nil, nil, nil, 720, 720, 720, 720, nil, 720, 720, - nil, nil, nil, 720, 720, nil, 721, 721, 721, nil, - 721, 720, nil, 720, 721, 721, nil, nil, nil, 721, - nil, 721, 721, 721, 721, 721, 721, 721, nil, nil, - nil, nil, nil, 721, 721, 721, 721, 721, 721, 721, - nil, nil, 721, nil, nil, nil, nil, nil, nil, 721, - nil, nil, 721, 721, 721, 721, 721, 721, 721, 721, - nil, 721, 721, 721, nil, 721, 721, 721, 721, 721, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 721, - nil, nil, 721, nil, nil, 721, 721, nil, nil, 721, - nil, nil, nil, nil, nil, 721, nil, nil, nil, nil, - nil, nil, nil, 721, nil, nil, nil, nil, 721, 721, - 721, 721, nil, 721, 721, nil, nil, nil, 721, 721, - nil, 722, 722, 722, nil, 722, 721, nil, 721, 722, - 722, nil, nil, nil, 722, nil, 722, 722, 722, 722, - 722, 722, 722, nil, nil, nil, nil, nil, 722, 722, - 722, 722, 722, 722, 722, nil, nil, 722, nil, nil, - nil, nil, nil, nil, 722, nil, nil, 722, 722, 722, - 722, 722, 722, 722, 722, nil, 722, 722, 722, nil, - 722, 722, 722, 722, 722, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 722, nil, nil, 722, nil, nil, - 722, 722, nil, nil, 722, nil, nil, nil, nil, nil, - 722, nil, nil, nil, nil, nil, nil, nil, 722, nil, - nil, nil, nil, 722, 722, 722, 722, nil, 722, 722, - nil, nil, nil, 722, 722, nil, 724, 724, 724, nil, - 724, 722, nil, 722, 724, 724, nil, nil, nil, 724, - nil, 724, 724, 724, 724, 724, 724, 724, nil, nil, - nil, nil, nil, 724, 724, 724, 724, 724, 724, 724, - nil, nil, 724, nil, nil, nil, nil, nil, nil, 724, - nil, nil, 724, 724, 724, 724, 724, 724, 724, 724, - nil, 724, 724, 724, nil, 724, 724, 724, 724, 724, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 724, - nil, nil, 724, nil, nil, 724, 724, nil, nil, 724, - nil, nil, nil, nil, nil, 724, nil, nil, nil, nil, - nil, nil, nil, 724, nil, nil, nil, nil, 724, 724, - 724, 724, nil, 724, 724, nil, nil, nil, 724, 724, - nil, 736, 736, 736, nil, 736, 724, nil, 724, 736, - 736, nil, nil, nil, 736, nil, 736, 736, 736, 736, - 736, 736, 736, nil, nil, nil, nil, nil, 736, 736, - 736, 736, 736, 736, 736, nil, nil, 736, nil, nil, - nil, nil, nil, nil, 736, nil, nil, 736, 736, 736, - 736, 736, 736, 736, 736, 736, 736, 736, 736, nil, - 736, 736, 736, 736, 736, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 736, nil, nil, 736, nil, nil, - 736, 736, nil, nil, 736, nil, 736, nil, 736, nil, - 736, nil, nil, nil, nil, nil, nil, nil, 736, nil, - nil, nil, nil, 736, 736, 736, 736, nil, 736, 736, - nil, nil, nil, 736, 736, nil, 743, 743, 743, nil, - 743, 736, nil, 736, 743, 743, nil, nil, nil, 743, - nil, 743, 743, 743, 743, 743, 743, 743, nil, nil, - nil, nil, nil, 743, 743, 743, 743, 743, 743, 743, - nil, nil, 743, nil, nil, nil, nil, nil, nil, 743, - nil, nil, 743, 743, 743, 743, 743, 743, 743, 743, - 743, 743, 743, 743, nil, 743, 743, 743, 743, 743, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 743, - nil, nil, 743, nil, nil, 743, 743, nil, nil, 743, - nil, 743, nil, 743, nil, 743, nil, nil, nil, nil, - nil, nil, nil, 743, nil, nil, nil, nil, 743, 743, - 743, 743, nil, 743, 743, nil, nil, nil, 743, 743, - nil, 754, 754, 754, nil, 754, 743, nil, 743, 754, - 754, nil, nil, nil, 754, nil, 754, 754, 754, 754, - 754, 754, 754, nil, nil, nil, nil, nil, 754, 754, - 754, 754, 754, 754, 754, nil, nil, 754, nil, nil, - nil, nil, nil, nil, 754, nil, nil, 754, 754, 754, - 754, 754, 754, 754, 754, nil, 754, 754, 754, nil, - 754, 754, nil, nil, 754, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 754, nil, nil, 754, nil, nil, - 754, 754, nil, nil, 754, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 754, 754, 754, 754, nil, 754, 754, - nil, nil, nil, 754, 754, nil, 768, 768, 768, nil, - 768, 754, nil, 754, 768, 768, nil, nil, nil, 768, - nil, 768, 768, 768, 768, 768, 768, 768, nil, nil, - nil, nil, nil, 768, 768, 768, 768, 768, 768, 768, - nil, nil, 768, nil, nil, nil, nil, nil, nil, 768, - nil, nil, 768, 768, 768, 768, 768, 768, 768, 768, - nil, 768, 768, 768, nil, 768, 768, 768, 768, 768, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 768, - nil, nil, 768, nil, nil, 768, 768, nil, nil, 768, - nil, nil, nil, nil, nil, 768, nil, nil, nil, nil, - nil, nil, nil, 768, nil, nil, nil, nil, 768, 768, - 768, 768, nil, 768, 768, nil, nil, nil, 768, 768, - nil, 781, 781, 781, nil, 781, 768, nil, 768, 781, - 781, nil, nil, nil, 781, nil, 781, 781, 781, 781, - 781, 781, 781, nil, nil, nil, nil, nil, 781, 781, - 781, 781, 781, 781, 781, nil, nil, 781, nil, nil, - nil, nil, nil, nil, 781, nil, nil, 781, 781, 781, - 781, 781, 781, 781, 781, nil, 781, 781, 781, nil, - 781, 781, 781, 781, 781, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 781, nil, nil, 781, nil, nil, - 781, 781, nil, nil, 781, nil, nil, nil, nil, nil, - 781, nil, nil, nil, nil, nil, nil, nil, 781, nil, - nil, nil, nil, 781, 781, 781, 781, nil, 781, 781, - nil, nil, nil, 781, 781, nil, 786, 786, 786, nil, - 786, 781, nil, 781, 786, 786, nil, nil, nil, 786, - nil, 786, 786, 786, 786, 786, 786, 786, nil, nil, - nil, nil, nil, 786, 786, 786, 786, 786, 786, 786, - nil, nil, 786, nil, nil, nil, nil, nil, nil, 786, - nil, nil, 786, 786, 786, 786, 786, 786, 786, 786, - nil, 786, 786, 786, nil, 786, 786, 786, 786, 786, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 786, - nil, nil, 786, nil, nil, 786, 786, nil, nil, 786, - nil, 786, nil, nil, nil, 786, nil, nil, nil, nil, - nil, nil, nil, 786, nil, nil, nil, nil, 786, 786, - 786, 786, nil, 786, 786, nil, nil, nil, 786, 786, - nil, 803, 803, 803, nil, 803, 786, nil, 786, 803, - 803, nil, nil, nil, 803, nil, 803, 803, 803, 803, - 803, 803, 803, nil, nil, nil, nil, nil, 803, 803, - 803, 803, 803, 803, 803, nil, nil, 803, nil, nil, - nil, nil, nil, nil, 803, nil, nil, 803, 803, 803, - 803, 803, 803, 803, 803, nil, 803, 803, 803, nil, - 803, 803, 803, 803, 803, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 803, nil, nil, 803, nil, nil, - 803, 803, nil, nil, 803, nil, nil, nil, nil, nil, - 803, nil, nil, nil, nil, nil, nil, nil, 803, nil, - nil, nil, nil, 803, 803, 803, 803, nil, 803, 803, - nil, nil, nil, 803, 803, nil, 817, 817, 817, nil, - 817, 803, nil, 803, 817, 817, nil, nil, nil, 817, - nil, 817, 817, 817, 817, 817, 817, 817, nil, nil, - nil, nil, nil, 817, 817, 817, 817, 817, 817, 817, - nil, nil, 817, nil, nil, nil, nil, nil, nil, 817, - nil, nil, 817, 817, 817, 817, 817, 817, 817, 817, - nil, 817, 817, 817, nil, 817, 817, nil, nil, 817, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 817, - nil, nil, 817, nil, nil, 817, 817, nil, nil, 817, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 817, 817, - 817, 817, nil, 817, 817, nil, nil, nil, 817, 817, - nil, 878, 878, 878, nil, 878, 817, nil, 817, 878, - 878, nil, nil, nil, 878, nil, 878, 878, 878, 878, - 878, 878, 878, nil, nil, nil, nil, nil, 878, 878, - 878, 878, 878, 878, 878, nil, nil, 878, nil, nil, - nil, nil, nil, nil, 878, nil, nil, 878, 878, 878, - 878, 878, 878, 878, 878, 878, 878, 878, 878, nil, - 878, 878, 878, 878, 878, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 878, nil, nil, 878, nil, nil, - 878, 878, nil, nil, 878, nil, 878, nil, 878, nil, - 878, nil, nil, nil, nil, nil, nil, nil, 878, nil, - nil, nil, nil, 878, 878, 878, 878, nil, 878, 878, - nil, nil, nil, 878, 878, nil, 881, 881, 881, nil, - 881, 878, nil, 878, 881, 881, nil, nil, nil, 881, - nil, 881, 881, 881, 881, 881, 881, 881, nil, nil, - nil, nil, nil, 881, 881, 881, 881, 881, 881, 881, - nil, nil, 881, nil, nil, nil, nil, nil, nil, 881, - nil, nil, 881, 881, 881, 881, 881, 881, 881, 881, - nil, 881, 881, 881, nil, 881, 881, 881, 881, 881, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 881, - nil, nil, 881, nil, nil, 881, 881, nil, nil, 881, - nil, 881, nil, 881, nil, 881, nil, nil, nil, nil, - nil, nil, nil, 881, nil, nil, nil, nil, 881, 881, - 881, 881, nil, 881, 881, nil, nil, nil, 881, 881, - nil, 883, 883, 883, nil, 883, 881, nil, 881, 883, - 883, nil, nil, nil, 883, nil, 883, 883, 883, 883, - 883, 883, 883, nil, nil, nil, nil, nil, 883, 883, - 883, 883, 883, 883, 883, nil, nil, 883, nil, nil, - nil, nil, nil, nil, 883, nil, nil, 883, 883, 883, - 883, 883, 883, 883, 883, 883, 883, 883, 883, nil, - 883, 883, 883, 883, 883, 447, 447, 447, 447, 447, - 447, 447, 447, 447, 447, 447, nil, 447, 447, nil, - nil, 447, 447, nil, 883, nil, nil, 883, nil, nil, - 883, 883, nil, nil, 883, nil, 883, 447, 883, 447, - 883, 447, 447, 447, 447, 447, 447, 447, 883, 447, - nil, nil, nil, 883, 883, 883, 883, nil, 883, 883, - nil, nil, nil, 883, 883, 447, 447, 25, nil, nil, - nil, 883, nil, 883, 25, 25, 25, nil, nil, 25, - 25, 25, nil, 25, nil, nil, nil, nil, nil, nil, - nil, nil, 25, 25, 25, nil, nil, nil, nil, nil, - nil, nil, nil, 25, 25, nil, 25, 25, 25, 25, - 25, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, nil, nil, 25, - 25, 25, nil, nil, 25, nil, 25, 25, nil, nil, - 25, 25, nil, 25, nil, 25, nil, 25, nil, 25, - 25, 25, 25, 25, 25, 25, 26, 25, 25, 25, - nil, nil, nil, 26, 26, 26, nil, nil, 26, 26, - 26, nil, 26, 25, 25, nil, 25, nil, 25, nil, - nil, nil, 26, 26, nil, nil, nil, nil, nil, nil, - nil, nil, 26, 26, nil, 26, 26, 26, 26, 26, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, nil, nil, 26, 26, - 26, nil, nil, 26, nil, 26, 26, nil, nil, 26, - 26, nil, 26, nil, 26, nil, 26, nil, 26, 26, - 26, 26, 26, 26, 26, 396, 26, nil, 26, nil, - nil, nil, 396, 396, 396, nil, nil, 396, 396, 396, - nil, 396, 26, 26, nil, 26, nil, 26, nil, nil, - 396, 396, 396, nil, nil, nil, nil, nil, nil, nil, - nil, 396, 396, nil, 396, 396, 396, 396, 396, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 396, 396, 396, 396, 396, 396, 396, 396, 396, - 396, 396, 396, 396, 396, nil, nil, 396, 396, 396, - nil, nil, 396, nil, 396, 396, nil, nil, 396, 396, - nil, 396, nil, 396, nil, 396, nil, 396, 396, 396, - 396, 396, 396, 396, 449, 396, 396, 396, nil, nil, - nil, 449, 449, 449, nil, nil, 449, 449, 449, nil, - 449, 396, 396, nil, 396, nil, 396, nil, nil, nil, - 449, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 449, 449, nil, 449, 449, 449, 449, 449, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 452, - nil, nil, nil, nil, nil, nil, 452, 452, 452, nil, - nil, 452, 452, 452, nil, 452, nil, nil, nil, nil, - nil, 449, nil, nil, nil, 452, nil, nil, 449, nil, - nil, nil, nil, 449, 449, 452, 452, nil, 452, 452, - 452, 452, 452, nil, nil, nil, nil, nil, 202, 202, - nil, nil, 202, nil, nil, nil, 449, nil, nil, nil, - 202, 202, nil, 202, 202, 202, 202, 202, 202, 202, - 449, nil, 202, 202, nil, 449, 452, 202, 202, 202, - 202, nil, nil, 452, nil, nil, 202, nil, 452, 452, - nil, nil, nil, nil, 202, 202, nil, 202, 202, 202, - 202, 202, 202, 202, 202, 202, 202, 202, nil, nil, - 202, 452, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 452, nil, nil, nil, nil, - 452, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, nil, nil, nil, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, nil, nil, - nil, nil, nil, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, nil, 8, nil, nil, nil, nil, nil, - nil, nil, 8, 8, nil, 8, 8, 8, 8, 8, - 8, 8, nil, nil, 8, 8, nil, nil, nil, 8, - 8, 8, 8, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 8, 8, nil, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - nil, nil, 8, 8, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 8, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, nil, - nil, nil, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, nil, nil, nil, nil, nil, 9, 9, 9, - 9, 9, 9, 9, 9, 9, nil, nil, 9, nil, - nil, nil, nil, nil, nil, nil, 9, 9, nil, 9, - 9, 9, 9, 9, 9, 9, nil, nil, 9, 9, - nil, nil, nil, 9, 9, 9, 9, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 9, 9, nil, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, nil, nil, 9, 9, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 9, 375, - 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, - 375, 375, 375, 375, 375, 375, 375, 375, 375, 375, - 375, 375, 375, nil, nil, nil, 375, 375, 375, 375, - 375, 375, 375, 375, 375, 375, nil, nil, nil, nil, - nil, 375, 375, 375, 375, 375, 375, 375, 375, 375, - nil, nil, 375, nil, nil, nil, nil, nil, nil, nil, - 375, 375, nil, 375, 375, 375, 375, 375, 375, 375, - nil, nil, 375, 375, nil, nil, nil, 375, 375, 375, - 375, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 375, 375, nil, 375, 375, 375, - 375, 375, 375, 375, 375, 375, 375, 375, nil, nil, - 375, 375, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 375, 560, 560, 560, 560, 560, 560, 560, - 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, - 560, 560, 560, 560, 560, 560, 560, nil, nil, nil, - 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, - nil, nil, nil, nil, nil, 560, 560, 560, 560, 560, - 560, 560, 560, 560, nil, nil, 560, nil, nil, nil, - nil, nil, nil, nil, 560, 560, nil, 560, 560, 560, - 560, 560, 560, 560, nil, nil, 560, 560, nil, nil, - nil, 560, 560, 560, 560, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 560, 560, - nil, 560, 560, 560, 560, 560, 560, 560, 560, 560, - 560, 560, nil, nil, 560, 560, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 560, 66, 66, 66, - 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, - 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, - 66, nil, nil, nil, 66, 66, 66, 66, 66, 66, - 66, 66, 66, 66, nil, nil, nil, nil, nil, 66, - 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, - 66, nil, 66, nil, nil, nil, nil, nil, 66, 66, - nil, 66, 66, 66, 66, 66, 66, 66, nil, nil, - 66, 66, nil, nil, nil, 66, 66, 66, 66, nil, - nil, nil, nil, nil, 66, nil, nil, nil, nil, nil, - nil, nil, 66, 66, nil, 66, 66, 66, 66, 66, - 66, 66, 66, 66, 66, 66, nil, nil, 66, 690, - 690, 690, 690, 690, 690, 690, 690, 690, 690, 690, - 690, 690, 690, 690, 690, 690, 690, 690, 690, 690, - 690, 690, 690, nil, nil, nil, 690, 690, 690, 690, - 690, 690, 690, 690, 690, 690, nil, nil, nil, nil, - nil, 690, 690, 690, 690, 690, 690, 690, 690, 690, - nil, nil, 690, nil, nil, nil, nil, nil, nil, nil, - 690, 690, nil, 690, 690, 690, 690, 690, 690, 690, - nil, nil, 690, 690, nil, nil, nil, 690, 690, 690, - 690, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 690, 690, nil, 690, 690, 690, - 690, 690, 690, 690, 690, 690, 690, 690, 203, 203, - 690, nil, 203, nil, nil, nil, nil, nil, nil, nil, - 203, 203, nil, 203, 203, 203, 203, 203, 203, 203, - nil, nil, 203, 203, nil, nil, nil, 203, 203, 203, - 203, nil, nil, nil, nil, nil, 203, nil, nil, nil, - nil, nil, nil, nil, 203, 203, nil, 203, 203, 203, - 203, 203, 203, 203, 203, 203, 203, 203, 249, 249, - 203, nil, 249, nil, nil, nil, nil, nil, nil, nil, - 249, 249, nil, 249, 249, 249, 249, 249, 249, 249, - nil, nil, 249, 249, nil, nil, nil, 249, 249, 249, - 249, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 249, 249, nil, 249, 249, 249, - 249, 249, 249, 249, 249, 249, 249, 249, 250, 250, - 249, nil, 250, nil, nil, nil, nil, nil, nil, nil, - 250, 250, nil, 250, 250, 250, 250, 250, 250, 250, - nil, nil, 250, 250, nil, nil, nil, 250, 250, 250, - 250, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 250, 250, nil, 250, 250, 250, - 250, 250, 250, 250, 250, 250, 250, 250, 415, 415, - 250, nil, 415, nil, nil, nil, nil, nil, nil, nil, - 415, 415, nil, 415, 415, 415, 415, 415, 415, 415, - nil, nil, 415, 415, nil, nil, nil, 415, 415, 415, - 415, nil, nil, nil, nil, nil, 415, nil, nil, nil, - nil, nil, nil, nil, 415, 415, nil, 415, 415, 415, - 415, 415, 415, 415, 415, 415, 415, 415, 416, 416, - 415, nil, 416, nil, nil, nil, nil, nil, nil, nil, - 416, 416, nil, 416, 416, 416, 416, 416, 416, 416, - nil, nil, 416, 416, nil, nil, nil, 416, 416, 416, - 416, nil, nil, nil, nil, nil, 416, nil, nil, nil, - nil, nil, nil, nil, 416, 416, nil, 416, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, 482, 482, - 416, nil, 482, nil, nil, nil, nil, nil, nil, nil, - 482, 482, nil, 482, 482, 482, 482, 482, 482, 482, - nil, nil, 482, 482, nil, nil, nil, 482, 482, 482, - 482, nil, nil, nil, nil, nil, 482, nil, nil, nil, - nil, nil, nil, nil, 482, 482, nil, 482, 482, 482, - 482, 482, 482, 482, 482, 482, 482, 482, 483, 483, - 482, nil, 483, nil, nil, nil, nil, nil, nil, nil, - 483, 483, nil, 483, 483, 483, 483, 483, 483, 483, - nil, nil, 483, 483, nil, nil, nil, 483, 483, 483, - 483, nil, nil, nil, nil, nil, 483, nil, nil, nil, - nil, nil, nil, nil, 483, 483, nil, 483, 483, 483, - 483, 483, 483, 483, 483, 483, 483, 483, 494, 494, - 483, nil, 494, nil, nil, nil, nil, nil, nil, nil, - 494, 494, nil, 494, 494, 494, 494, 494, 494, 494, - nil, nil, 494, 494, nil, nil, nil, 494, 494, 494, - 494, nil, nil, nil, nil, nil, 494, nil, nil, nil, - nil, nil, nil, nil, 494, 494, nil, 494, 494, 494, - 494, 494, 494, 494, 494, 494, 494, 494, 495, 495, - 494, nil, 495, nil, nil, nil, nil, nil, nil, nil, - 495, 495, nil, 495, 495, 495, 495, 495, 495, 495, - nil, nil, 495, 495, nil, nil, nil, 495, 495, 495, - 495, nil, nil, nil, nil, nil, 495, nil, nil, nil, - nil, nil, nil, nil, 495, 495, nil, 495, 495, 495, - 495, 495, 495, 495, 495, 495, 495, 495, 522, 522, - 495, nil, 522, nil, nil, nil, nil, nil, nil, nil, - 522, 522, nil, 522, 522, 522, 522, 522, 522, 522, - nil, nil, 522, 522, nil, nil, nil, 522, 522, 522, - 522, nil, nil, nil, nil, nil, 522, nil, nil, nil, - nil, nil, nil, nil, 522, 522, nil, 522, 522, 522, - 522, 522, 522, 522, 522, 522, 522, 522, 523, 523, - 522, nil, 523, nil, nil, nil, nil, nil, nil, nil, - 523, 523, nil, 523, 523, 523, 523, 523, 523, 523, - nil, nil, 523, 523, nil, nil, nil, 523, 523, 523, - 523, nil, nil, nil, nil, nil, 523, nil, nil, nil, - nil, nil, nil, nil, 523, 523, nil, 523, 523, 523, - 523, 523, 523, 523, 523, 523, 523, 523, 529, 529, - 523, nil, 529, nil, nil, nil, nil, nil, nil, nil, - 529, 529, nil, 529, 529, 529, 529, 529, 529, 529, - nil, nil, 529, 529, nil, nil, nil, 529, 529, 529, - 529, nil, nil, nil, nil, nil, 529, nil, nil, nil, - nil, nil, nil, nil, 529, 529, nil, 529, 529, 529, - 529, 529, 529, 529, 529, 529, 529, 529, 530, 530, - 529, nil, 530, nil, nil, nil, nil, nil, nil, nil, - 530, 530, nil, 530, 530, 530, 530, 530, 530, 530, - nil, nil, 530, 530, nil, nil, nil, 530, 530, 530, - 530, nil, nil, nil, nil, nil, 530, nil, nil, nil, - nil, nil, nil, nil, 530, 530, nil, 530, 530, 530, - 530, 530, 530, 530, 530, 530, 530, 530, 884, 884, - 530, nil, 884, nil, nil, nil, nil, nil, nil, nil, - 884, 884, nil, 884, 884, 884, 884, 884, 884, 884, - nil, nil, 884, 884, nil, nil, nil, 884, 884, 884, - 884, nil, nil, nil, nil, nil, 884, nil, nil, nil, - nil, nil, nil, nil, 884, 884, nil, 884, 884, 884, - 884, 884, 884, 884, 884, 884, 884, 884, 885, 885, - 884, nil, 885, nil, nil, nil, nil, nil, nil, nil, - 885, 885, nil, 885, 885, 885, 885, 885, 885, 885, - nil, nil, 885, 885, nil, nil, nil, 885, 885, 885, - 885, nil, nil, nil, nil, nil, 885, nil, nil, nil, - nil, nil, nil, nil, 885, 885, nil, 885, 885, 885, - 885, 885, 885, 885, 885, 885, 885, 885, 922, 922, - 885, nil, 922, nil, nil, nil, nil, nil, nil, nil, - 922, 922, nil, 922, 922, 922, 922, 922, 922, 922, - nil, nil, 922, 922, nil, nil, nil, 922, 922, 922, - 922, nil, nil, nil, nil, nil, 922, nil, nil, nil, - nil, nil, nil, nil, 922, 922, nil, 922, 922, 922, - 922, 922, 922, 922, 922, 922, 922, 922, nil, nil, - 922, 496, 496, 496, 496, 496, 496, 496, 496, 496, - 496, 496, nil, 496, 496, nil, nil, 496, 496, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 496, nil, 496, nil, 496, 496, 496, - 496, 496, 496, 496, nil, 496, nil, 625, 625, 625, - 625, 625, 625, 625, 625, 625, 625, 625, nil, 625, - 625, nil, 496, 625, 625, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 625, - nil, 625, nil, 625, 625, 625, 625, 625, 625, 625, - nil, 625, nil, 703, 703, 703, 703, 703, 703, 703, - 703, 703, 703, 703, nil, 703, 703, nil, 625, 703, - 703, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 703, nil, 703, nil, 703, - 703, 703, 703, 703, 703, 703, nil, 703, nil, 706, - 706, 706, 706, 706, 706, 706, 706, 706, 706, 706, - nil, 706, 706, nil, 703, 706, 706, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 706, nil, 706, nil, 706, 706, 706, 706, 706, - 706, 706, nil, 706, nil, 710, 710, 710, 710, 710, - 710, 710, 710, 710, 710, 710, nil, 710, 710, nil, - 706, 710, 710, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 710, nil, 710, - nil, 710, 710, 710, 710, 710, 710, 710, nil, 710, - nil, 712, 712, 712, 712, 712, 712, 712, 712, 712, - 712, 712, nil, 712, 712, nil, 710, 712, 712, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 712, nil, 712, nil, 712, 712, 712, - 712, 712, 712, 712, nil, 712, nil, 715, 715, 715, - 715, 715, 715, 715, 715, 715, 715, 715, nil, 715, - 715, nil, 712, 715, 715, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 715, - nil, 715, nil, 715, 715, 715, 715, 715, 715, 715, - nil, 715, nil, 717, 717, 717, 717, 717, 717, 717, - 717, 717, 717, 717, nil, 717, 717, nil, 715, 717, - 717, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 717, nil, 717, nil, 717, - 717, 717, 717, 717, 717, 717, nil, 717, nil, 802, - 802, 802, 802, 802, 802, 802, 802, 802, 802, 802, - nil, 802, 802, nil, 717, 802, 802, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 802, nil, 802, nil, 802, 802, 802, 802, 802, - 802, 802, nil, 802, nil, 804, 804, 804, 804, 804, - 804, 804, 804, 804, 804, 804, nil, 804, 804, nil, - 802, 804, 804, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 804, nil, 804, - nil, 804, 804, 804, 804, 804, 804, 804, nil, 804, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 804 ] - -racc_action_pointer = [ - 0, 80, nil, 62, nil, 4744, 1499, 10, 21299, 21423, - 39, 29, 57, 133, 607, 55, 345, nil, 29, 4869, - 7135, 202, nil, 294, 249, 20787, 20896, 4994, 5119, 5244, - nil, 738, 5369, 5494, nil, 114, 240, 229, 403, 5627, - 5752, 5877, 176, 611, nil, nil, nil, nil, nil, nil, - nil, 866, 999, 6002, 6127, 6252, 0, nil, 6377, 6502, - nil, nil, 6627, 6760, 6885, 7010, 21795, nil, nil, nil, - nil, nil, nil, nil, 342, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 0, nil, nil, - 130, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 328, nil, 7135, nil, nil, nil, nil, 7268, 7393, - 7518, 7643, 7768, 1124, nil, 449, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 265, nil, 1249, 7893, 8018, - 8143, 8268, 21167, 21967, 8393, 8518, 8643, 8768, 8893, nil, - nil, 738, 54, 356, 109, 298, 351, nil, 9018, 1374, - 360, 9143, 9268, 9393, 9518, 9643, 9768, 9893, 10018, 10143, - 10268, 10393, 10518, 10643, 10768, 10893, 11018, 11143, 11268, 11393, - 11518, 11643, 11768, 11893, 12018, 12143, 12268, nil, nil, 22027, - 22087, 421, 12393, 12518, nil, nil, nil, nil, nil, nil, - nil, 12643, nil, 13268, nil, 409, 443, nil, 12768, 506, - 12893, nil, 13018, nil, nil, 537, 1527, 13143, 479, 1499, - 512, 569, 554, 13268, 1624, 741, 784, 637, 874, nil, - 605, 576, 261, nil, nil, nil, 623, 500, 585, 13401, - nil, 478, 650, 658, 898, nil, 661, nil, 13526, 730, - 738, 590, nil, 34, 254, 656, 650, 284, 690, nil, - nil, 600, 48, 136, 13651, 13776, 620, 768, 663, 65, - 903, 743, 89, 804, nil, nil, 351, 442, 96, nil, - 931, nil, 55, 13901, nil, nil, 309, 407, 434, 453, - 572, 576, 641, 649, 651, nil, 668, nil, 14026, nil, - 274, 348, 382, 401, 39, 468, nil, nil, nil, nil, - nil, nil, nil, nil, 725, 21547, nil, nil, nil, nil, - 748, nil, nil, 738, nil, 14151, 735, nil, 740, nil, - nil, 1624, 745, nil, 512, 519, 21005, nil, nil, nil, - 239, 348, 787, nil, nil, 1752, 1861, nil, 15276, nil, - nil, nil, 174, nil, 798, 22147, 22207, 14276, 244, 14401, - 14526, 14651, 1994, 2119, 431, 559, 823, 824, 833, 834, - 1499, 3619, 3744, 2244, 1810, 2369, 2494, 2619, 2744, 2869, - 2994, 3119, 3244, 530, 793, 3369, 3494, 20659, 79, 21114, - nil, nil, 21169, nil, nil, 775, nil, nil, 14776, 117, - 175, 778, nil, nil, 14901, nil, 15026, nil, 15151, nil, - nil, nil, 15276, 1609, 785, 788, nil, nil, 792, 15409, - 805, 15534, 22267, 22327, 1002, 857, nil, nil, 15659, 823, - nil, 15784, 15909, 16034, 22387, 22447, 22915, 16159, 940, 16284, - nil, 829, nil, 16409, nil, nil, 16534, nil, nil, nil, - nil, 830, 1994, 949, nil, 2119, 119, 142, 947, 956, - 16659, 16784, 22507, 22567, 98, nil, nil, 1004, nil, 22627, - 22687, 16909, nil, nil, 17034, 693, 146, 2244, 1716, nil, - nil, nil, 283, nil, nil, nil, 721, nil, nil, nil, - 859, nil, nil, 465, nil, nil, 849, nil, nil, nil, - 21671, nil, 17159, 852, 17284, 17409, 523, 889, 17534, 17659, - 888, nil, nil, 17784, 17909, 889, nil, nil, nil, 277, - 353, 473, 603, 860, 5494, 860, nil, 567, nil, 2369, - nil, nil, nil, nil, 293, nil, 6627, -6, 860, nil, - 864, nil, 2494, 2619, nil, 869, nil, 919, 18034, nil, - nil, 1742, 453, 18159, 878, nil, 885, 125, 198, 923, - 443, 1129, 924, 894, 18284, 22961, 959, 960, 317, 1019, - nil, 2744, 906, 958, nil, nil, nil, 468, 108, 666, - nil, 926, 930, 937, nil, nil, nil, nil, nil, nil, - 272, 1029, nil, 985, nil, nil, nil, nil, 1032, nil, - nil, 1034, 637, nil, 1075, nil, nil, nil, nil, 1083, - nil, 140, 967, 135, 141, 263, 269, 18409, 481, 1254, - nil, 972, 2869, 701, nil, nil, 1090, 2994, 5382, 725, - 21907, nil, nil, nil, nil, nil, nil, 3119, nil, nil, - nil, nil, nil, 23007, 981, 18534, 23053, 18659, nil, nil, - 23099, nil, 23145, nil, nil, 23191, nil, 23237, nil, 18784, - 18909, 19034, 19159, 386, 19284, 983, 988, 993, nil, 1024, - 1005, 1360, 312, nil, 1128, 3244, 19409, nil, nil, 1014, - 1036, 1142, nil, 19534, nil, 1023, 352, nil, nil, nil, - 3369, nil, nil, 163, 19659, nil, nil, nil, nil, nil, - 1029, 6773, nil, 6898, nil, nil, 1021, 1129, 19784, nil, - nil, 1014, nil, 1055, 349, 1104, 1079, nil, nil, 1199, - nil, 19909, 1201, 3494, 3619, nil, 20034, 3744, 156, 205, - nil, 1205, nil, 3869, nil, 1208, 1097, nil, nil, 1112, - 1106, nil, 23283, 20159, 23329, 7023, nil, 13414, nil, nil, - 1050, nil, 1128, 1108, nil, nil, nil, 20284, nil, 1130, - 1118, nil, 1128, nil, nil, nil, 1132, nil, 3994, 1127, - 1252, 1207, 1255, nil, 4119, 4244, 1139, 1144, 1147, nil, - nil, 1148, 1156, nil, 1166, nil, nil, 1179, 1110, 1180, - 859, nil, nil, 164, nil, 1307, 1321, nil, 287, nil, - nil, 1324, nil, nil, 15422, nil, 1206, 1213, 1220, 1231, - nil, 1232, nil, 1389, 1364, 1307, nil, nil, 20409, nil, - nil, 20534, 1360, 20659, 22747, 22807, 1377, 1260, 1373, nil, - 15672, nil, nil, 1146, nil, 1175, nil, 1271, nil, nil, - nil, 439, 869, 1257, 4369, nil, nil, nil, nil, nil, - 4494, nil, 4619, 18172, nil, nil, 1300, nil, 1396, nil, - nil, nil, 22867, nil, 1258, nil, 1264, 165, 166, 209, - 1379, nil, nil, 1269, 1272, 1273, 1281, 1287, 1139, 1291, - 1235, 836, 1421, 1425, 1316, 1326, 1329, 1331, 1375, 1378, - nil, 173, nil, 1425, nil, nil, nil, 1264, 1344, nil, - nil, nil, nil, 1521, nil, nil, nil, 1345, 1348, 1356, - nil, nil ] - -racc_action_default = [ - -3, -557, -1, -543, -4, -557, -7, -557, -557, -557, - -557, -557, -557, -557, -557, -280, -39, -40, -545, -557, - -45, -47, -48, -49, -255, -255, -255, -290, -326, -327, - -65, -11, -69, -77, -79, -557, -472, -557, -557, -557, - -557, -557, -545, -232, -273, -274, -275, -276, -277, -278, - -279, -533, -11, -557, -556, -525, -298, -300, -557, -557, - -304, -307, -543, -557, -557, -557, -557, -328, -329, -331, - -332, -421, -422, -423, -424, -425, -440, -428, -429, -442, - -444, -433, -438, -454, -442, -456, -457, -531, -461, -462, - -532, -464, -465, -466, -467, -468, -469, -470, -471, -474, - -475, -557, -2, -544, -552, -553, -554, -6, -557, -557, - -557, -557, -557, -3, -15, -557, -106, -107, -108, -109, - -110, -111, -112, -113, -114, -118, -119, -120, -121, -122, - -123, -124, -125, -126, -127, -128, -129, -130, -131, -132, - -133, -134, -135, -136, -137, -138, -139, -140, -141, -142, - -143, -144, -145, -146, -147, -148, -149, -150, -151, -152, - -153, -154, -155, -156, -157, -158, -159, -160, -161, -162, - -163, -164, -165, -166, -167, -168, -169, -170, -171, -172, - -173, -174, -175, -176, -177, -178, -179, -180, -181, -182, - -183, -184, -185, -186, -187, -20, -115, -11, -557, -557, - -557, -241, -557, -557, -557, -557, -557, -557, -545, -546, - -44, -557, -472, -557, -280, -557, -557, -224, -557, -11, - -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, - -557, -557, -557, -557, -557, -557, -557, -557, -557, -557, - -557, -557, -557, -557, -557, -557, -557, -391, -393, -557, - -557, -54, -241, -557, -297, -396, -405, -407, -60, -402, - -61, -545, -62, -233, -243, -265, -265, -248, -557, -266, - -557, -527, -557, -63, -64, -543, -12, -557, -67, -11, - -545, -557, -70, -73, -11, -85, -557, -557, -92, -290, - -293, -545, -557, -326, -327, -330, -403, -557, -75, -557, - -81, -287, -458, -459, -557, -209, -210, -225, -557, -413, - -557, -283, -234, -549, -549, -557, -557, -549, -557, -299, - -383, -46, -557, -557, -557, -557, -543, -557, -544, -472, - -557, -557, -280, -557, -342, -343, -101, -102, -557, -104, - -557, -280, -557, -557, -472, -319, -106, -107, -147, -148, - -149, -165, -170, -177, -180, -321, -557, -523, -557, -426, - -557, -557, -557, -557, -557, -557, 972, -5, -555, -21, - -22, -23, -24, -25, -557, -557, -17, -18, -19, -116, - -557, -27, -36, -188, -266, -557, -557, -28, -37, -38, - -29, -190, -545, -242, -534, -535, -255, -400, -536, -537, - -535, -534, -255, -399, -401, -536, -537, -35, -198, -41, - -42, -43, -545, -296, -557, -557, -557, -241, -287, -557, - -557, -557, -199, -200, -201, -202, -203, -204, -205, -206, - -211, -212, -213, -214, -215, -216, -217, -218, -219, -220, - -221, -222, -223, -226, -227, -228, -229, -545, -372, -255, - -534, -535, -255, -52, -55, -545, -256, -257, -258, -372, - -372, -545, -292, -244, -264, -245, -264, -262, -557, -267, - -530, -10, -544, -14, -545, -66, -285, -82, -71, -557, - -545, -241, -557, -557, -91, -557, -458, -459, -557, -78, - -83, -557, -557, -557, -557, -557, -230, -557, -556, -556, - -282, -545, -235, -551, -550, -237, -551, -288, -289, -526, - -301, -495, -11, -333, -334, -11, -557, -557, -557, -557, - -557, -241, -557, -557, -287, -312, -101, -102, -103, -557, - -557, -241, -315, -476, -557, -557, -557, -11, -495, -323, - -541, -542, -545, -427, -441, -446, -557, -448, -430, -443, - -557, -445, -432, -557, -435, -437, -557, -455, -8, -16, - -557, -26, -557, -272, -557, -557, -404, -557, -557, -557, - -56, -240, -397, -557, -557, -58, -398, -295, -547, -534, - -535, -534, -535, -545, -188, -557, -373, -377, -375, -11, - -50, -394, -51, -395, -372, -238, -45, -557, -265, -254, - -545, -260, -11, -11, -291, -265, -263, -268, -557, -528, - -529, -13, -68, -557, -74, -80, -545, -534, -535, -239, - -88, -90, -557, -76, -557, -197, -207, -208, -545, -556, - -340, -11, -414, -556, -415, -416, -284, -549, -557, -495, - -386, -522, -522, -522, -494, -496, -497, -498, -499, -500, - -501, -557, -504, -557, -506, -512, -514, -515, -517, -518, - -519, -557, -556, -335, -556, -305, -336, -337, -308, -557, - -311, -557, -545, -534, -535, -538, -286, -557, -101, -102, - -105, -545, -11, -557, -478, -317, -557, -11, -495, -557, - -557, -524, -447, -450, -451, -452, -453, -11, -431, -434, - -436, -439, -117, -189, -270, -557, -191, -557, -548, -31, - -193, -32, -194, -57, -33, -196, -34, -195, -59, -557, - -557, -557, -557, -404, -557, -522, -522, -522, -371, -557, - -377, -557, -501, -510, -557, -11, -557, -251, -259, -545, - -557, -557, -246, -264, -269, -72, -86, -84, -294, -9, - -11, -420, -341, -557, -557, -418, -236, -384, -387, -389, - -377, -557, -487, -557, -490, -492, -557, -557, -557, -503, - -344, -557, -346, -348, -355, -501, -545, -516, -520, -557, - -338, -557, -557, -11, -11, -310, -557, -11, -404, -557, - -404, -557, -477, -11, -320, -557, -545, -480, -324, -557, - -271, -30, -192, -557, -231, -362, -364, -557, -367, -369, - -557, -374, -557, -378, -379, -381, -382, -557, -392, -557, - -265, -250, -265, -261, -406, -408, -265, -419, -11, -93, - -557, -557, -100, -417, -11, -11, -545, -522, -522, -507, - -521, -522, -522, -513, -522, -502, -508, -545, -557, -353, - -557, -505, -302, -557, -303, -557, -557, -268, -556, -313, - -316, -557, -322, -479, -495, -449, -522, -522, -522, -522, - -511, -522, -376, -557, -509, -557, -53, -249, -264, -252, - -247, -264, -413, -241, -557, -557, -99, -557, -557, -385, - -557, -483, -485, -557, -488, -557, -491, -557, -493, -345, - -347, -351, -557, -356, -11, -306, -309, -409, -410, -411, - -11, -318, -11, -557, -359, -361, -557, -365, -557, -368, - -370, -380, -557, -287, -265, -412, -545, -534, -535, -538, - -98, -388, -390, -522, -522, -522, -522, -349, -557, -354, - -557, -556, -557, -557, -522, -522, -522, -522, -286, -538, - -253, -404, -481, -557, -484, -486, -489, -557, -352, -339, - -314, -325, -357, -557, -360, -363, -366, -522, -350, -522, - -482, -358 ] - -racc_goto_table = [ - 119, 119, 207, 392, 355, 11, 210, 313, 498, 629, - 11, 314, 317, 519, 687, 310, 489, 13, 454, 566, - 295, 295, 13, 103, 396, 402, 308, 779, 102, 264, - 264, 264, 727, 106, 640, 282, 11, 512, 515, 726, - 609, 463, 465, 114, 196, 278, 644, 312, 13, 382, - 389, 295, 295, 295, 455, 6, 729, 11, 119, 281, - 6, 322, 323, 122, 122, 326, 124, 124, 334, 13, - 298, 449, 452, 644, 502, 505, 280, 528, 509, 814, - 609, 255, 259, 251, 258, 260, 816, 327, 665, 668, - 599, 839, 106, 843, 776, 870, 606, 900, 606, 107, - 262, 273, 274, 2, 544, 361, 551, 554, 11, 1, - 365, 369, 370, 371, 372, 589, 749, 11, 11, 903, - 13, 591, 728, 195, 593, 335, 602, 603, 375, 13, - 13, 342, 345, 594, 560, 839, 315, 601, 456, 600, - 739, 357, 316, 319, 510, 333, 532, 356, 539, 501, - 320, 386, 386, 324, 783, 325, 784, 677, 6, 910, - 682, 793, 760, 537, 538, 690, 864, 373, 6, 730, - 813, 939, 638, 757, 644, 782, 511, 248, 834, 835, - 448, 459, 460, 907, 633, 381, 387, 390, 753, 900, - 359, 407, 360, 362, 363, 406, 614, 367, 553, 812, - 364, 870, 11, 264, 669, 623, 838, 958, 841, 692, - 723, 796, 847, 697, 13, 837, 374, nil, nil, 583, - 843, 921, nil, 644, 11, 380, 968, 839, 816, 836, - nil, nil, nil, nil, nil, nil, 13, 396, 402, nil, - nil, nil, nil, 746, nil, nil, nil, 281, nil, nil, - 867, nil, 868, nil, 264, 264, nil, 866, nil, 397, - nil, 735, nil, 264, nil, nil, nil, nil, 680, nil, - nil, 295, nil, nil, nil, 485, nil, nil, nil, nil, - nil, nil, 11, 616, 11, nil, nil, 295, nil, 11, - nil, nil, nil, 278, 13, 472, 13, 700, 278, 788, - 471, 13, 490, nil, 619, 106, 959, 281, 790, nil, - nil, nil, 281, nil, nil, nil, 619, 609, nil, nil, - 478, 318, nil, 672, 474, nil, 457, 516, 517, 480, - 745, nil, 473, 681, 461, 933, nil, 713, nil, nil, - 912, nil, 718, nil, 619, nil, nil, nil, nil, 255, - 634, 518, 619, 259, nil, nil, 106, nil, 944, nil, - nil, 859, nil, nil, nil, nil, nil, 119, 821, 908, - nil, nil, 533, nil, 737, 606, 567, nil, nil, nil, - nil, 742, nil, nil, nil, 14, 787, nil, nil, nil, - 14, nil, nil, nil, nil, nil, nil, nil, 756, 644, - nil, nil, nil, nil, 211, nil, nil, nil, 406, nil, - 559, nil, 211, 211, 211, 598, 14, 286, 286, 264, - nil, 605, nil, nil, nil, nil, nil, nil, nil, nil, - 122, 585, nil, 124, nil, nil, nil, 14, 211, nil, - nil, nil, nil, 211, 211, nil, nil, 211, 330, 340, - 340, nil, 386, 571, nil, 570, nil, nil, nil, 576, - 637, 575, nil, nil, 384, 388, nil, 295, 828, nil, - nil, nil, 397, 671, nil, 406, 295, 11, nil, nil, - nil, nil, 490, 264, nil, nil, nil, 406, 14, 13, - nil, 490, 635, 211, 211, 211, 211, 14, 14, nil, - 686, nil, nil, nil, nil, nil, 571, nil, 590, 571, - 606, 592, nil, 606, nil, 406, nil, 11, nil, nil, - 11, 406, nil, 264, nil, nil, nil, 611, nil, 13, - nil, nil, 13, 264, 467, nil, 469, 683, 470, 397, - 662, nil, 11, 664, 909, nil, 666, 666, nil, nil, - nil, 397, 119, 951, 13, 709, 711, nil, nil, nil, - 714, 716, nil, nil, nil, 684, 685, 567, 904, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 397, - nil, 925, 14, 211, 211, 211, 211, 397, nil, 211, - 211, 211, 211, 211, 11, 702, 877, nil, 879, nil, - 567, 295, 880, nil, 14, nil, 13, 11, 11, 15, - nil, nil, 295, nil, 15, 122, 490, 734, 124, 13, - 13, nil, 751, nil, nil, nil, 755, 747, 798, nil, - 740, 741, nil, nil, nil, nil, 11, 211, 211, nil, - 15, 288, 288, nil, nil, 791, 211, nil, 13, nil, - 795, 563, nil, nil, nil, nil, 567, nil, nil, 752, - nil, 15, 14, nil, 14, 567, nil, nil, 286, 14, - nil, nil, 332, 341, 341, nil, 571, nil, nil, 576, - 789, nil, 119, nil, 286, 926, nil, 11, nil, 820, - nil, nil, 11, 822, 801, nil, 826, nil, nil, 13, - 950, nil, 11, nil, 13, nil, 619, nil, nil, 211, - 211, nil, 15, 792, 13, nil, nil, nil, nil, 797, - 725, 15, 15, nil, 597, 799, nil, nil, 211, nil, - 607, nil, 318, nil, 610, nil, nil, nil, nil, nil, - 11, nil, 295, 211, nil, nil, nil, nil, nil, nil, - nil, nil, 13, nil, nil, 11, 861, nil, nil, 833, - nil, nil, nil, 819, nil, 632, nil, 13, nil, 607, - nil, nil, 318, 770, nil, nil, nil, nil, 827, nil, - nil, nil, nil, nil, 853, nil, 384, nil, 11, 11, - nil, nil, 11, nil, nil, nil, nil, 413, 11, nil, - 13, 13, 211, nil, 13, 295, 15, nil, nil, nil, - 13, 855, 856, nil, nil, 858, nil, nil, nil, 666, - nil, nil, nil, nil, nil, nil, nil, nil, 15, nil, - 704, nil, nil, 11, nil, 924, nil, nil, nil, 11, - 11, nil, nil, 211, nil, 13, nil, nil, nil, nil, - 462, 13, 13, nil, nil, nil, 882, 14, nil, nil, - nil, nil, 887, 888, 286, nil, 211, nil, nil, 475, - nil, nil, nil, 286, 744, 943, nil, 406, nil, nil, - nil, nil, 211, nil, nil, 264, 15, nil, 15, nil, - nil, 770, 288, 15, 849, nil, 842, 14, nil, 844, - 14, nil, nil, nil, nil, nil, 211, nil, 288, 11, - 567, nil, nil, nil, 406, 11, 211, 11, nil, 211, - nil, 13, 14, nil, nil, nil, nil, 13, nil, 13, - nil, nil, 941, nil, nil, nil, nil, nil, 942, nil, - 869, 397, nil, 871, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 211, 211, nil, nil, 311, 211, 211, - nil, nil, 321, 321, nil, nil, 321, nil, 770, nil, - 770, 800, nil, nil, 14, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 14, 14, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 286, nil, - nil, 577, nil, nil, nil, nil, nil, nil, nil, 286, - nil, nil, 321, 321, 321, 321, 14, nil, nil, nil, - nil, 937, 770, 934, nil, nil, 935, nil, 936, nil, - nil, nil, nil, nil, 846, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 595, nil, 945, nil, nil, 946, - 604, 947, 857, nil, nil, nil, nil, nil, 770, nil, - 770, nil, 211, 612, nil, nil, nil, 14, nil, 615, - nil, nil, 14, nil, 24, nil, nil, 770, nil, 24, - nil, 15, 14, nil, nil, nil, 967, nil, 288, nil, - 636, nil, 211, 24, nil, nil, 969, 288, nil, nil, - nil, 24, 24, 24, nil, 24, nil, nil, nil, 409, - 410, 411, 412, nil, nil, nil, nil, nil, nil, nil, - 14, 15, nil, nil, 15, nil, 24, 24, nil, nil, - nil, 691, 24, 24, nil, 14, 24, nil, nil, 830, - nil, nil, nil, nil, 607, nil, 15, 857, nil, nil, - nil, nil, nil, nil, nil, 696, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 211, nil, 14, 14, - nil, nil, 14, nil, nil, nil, nil, 24, 14, nil, - nil, nil, 24, 24, 24, 24, 24, 24, nil, 738, - nil, nil, nil, nil, nil, nil, nil, nil, 15, nil, - nil, nil, 874, nil, nil, nil, nil, nil, nil, nil, - nil, 15, 15, 14, nil, nil, nil, 748, nil, 14, - 14, nil, 288, nil, nil, nil, nil, nil, 321, 321, - nil, nil, nil, 288, nil, nil, nil, nil, nil, nil, - 15, nil, nil, nil, nil, nil, nil, 536, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 542, nil, nil, nil, nil, nil, 211, nil, - nil, 24, 24, 24, 24, 24, nil, nil, 24, 24, - 24, 24, 24, nil, nil, nil, nil, nil, nil, 14, - nil, 15, nil, 24, nil, 14, 15, 14, nil, nil, - nil, nil, nil, nil, nil, nil, 15, nil, 36, nil, - nil, nil, nil, 36, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 24, 24, 823, nil, - nil, nil, nil, nil, nil, 24, nil, nil, nil, 36, - 285, 285, nil, nil, 15, nil, nil, nil, nil, nil, - nil, 24, nil, 24, nil, nil, nil, nil, 24, 15, - 36, nil, 311, 832, nil, 851, nil, nil, nil, nil, - nil, 329, 344, 344, 344, nil, 762, 764, 765, nil, - nil, nil, nil, nil, nil, 863, nil, nil, nil, nil, - nil, nil, 15, 15, nil, nil, 15, nil, 24, 24, - nil, 628, 15, nil, nil, nil, nil, nil, nil, nil, - nil, 36, nil, nil, nil, nil, nil, 24, nil, nil, - 36, 36, nil, nil, nil, 889, 341, nil, nil, nil, - nil, nil, 24, nil, nil, nil, 899, 15, 321, nil, - nil, nil, nil, 15, 15, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 806, 808, 809, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 24, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 36, nil, nil, nil, nil, - nil, nil, nil, 15, nil, nil, nil, nil, nil, 15, - nil, 15, nil, nil, nil, nil, nil, 36, nil, nil, - nil, nil, 24, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 24, nil, nil, nil, - nil, nil, nil, nil, nil, 24, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 24, 891, 892, nil, nil, 894, 896, nil, 898, - nil, 321, nil, nil, nil, 36, 24, 36, nil, 24, - nil, 285, 36, nil, nil, 24, nil, nil, nil, nil, - nil, 914, 915, 917, 919, 24, 920, 285, 24, nil, - nil, 24, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 24, 24, nil, nil, nil, 24, 24, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 24, nil, nil, nil, nil, 952, 954, - 955, 956, nil, nil, nil, nil, 24, 24, nil, 962, - 964, 965, 966, nil, nil, 321, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 970, nil, 971, 24, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 24, nil, nil, nil, nil, 24, nil, nil, nil, - nil, 24, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 24, nil, nil, nil, nil, nil, nil, nil, nil, - 36, 24, nil, nil, nil, nil, nil, 285, nil, nil, - nil, nil, nil, nil, nil, nil, 285, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 24, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 36, nil, nil, 36, 24, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 36, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 24, nil, 24, 24, nil, - nil, 24, nil, nil, nil, nil, nil, 24, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 36, nil, nil, - nil, nil, 24, nil, nil, nil, nil, nil, 24, 24, - 36, 36, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 285, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 285, nil, nil, nil, nil, nil, nil, 36, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 217, nil, nil, nil, nil, 24, nil, nil, - 263, 263, 263, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 305, 306, 307, nil, nil, nil, 24, nil, - nil, nil, nil, nil, 24, nil, 24, 263, 263, nil, - 36, nil, nil, nil, nil, 36, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 36, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 36, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 36, nil, - nil, nil, 829, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 36, 36, nil, nil, 36, nil, nil, nil, nil, - nil, 36, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 344, nil, nil, nil, nil, - nil, 383, 263, 391, 263, nil, 36, 408, nil, nil, - nil, nil, 36, 36, nil, nil, nil, nil, nil, nil, - nil, 217, nil, nil, 422, 423, 424, 425, 426, 427, - 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, - 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, - nil, nil, nil, nil, nil, 263, 263, nil, nil, nil, - nil, nil, nil, nil, 263, nil, nil, nil, nil, nil, - nil, 263, nil, 263, nil, 263, nil, nil, nil, nil, - nil, nil, 36, nil, nil, nil, nil, nil, 36, nil, - 36, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 496, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 263, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 263, nil, 408, 584, 391, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 596, nil, nil, nil, nil, nil, 263, nil, 263, - nil, 263, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 263, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 625, 626, 627, nil, nil, nil, - nil, nil, 263, nil, nil, nil, 263, nil, nil, 263, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 263, 263, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 263, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 703, nil, 263, 706, nil, - nil, 710, 712, nil, nil, nil, 715, 717, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 263, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 263, nil, - 802, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 710, 712, 717, 715, nil, 804, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 263, - nil, nil, nil, nil, nil, nil, 263, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 263, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 263, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 802, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 263, nil, nil, 263, nil, 263 ] - -racc_goto_check = [ - 52, 52, 29, 22, 51, 17, 18, 61, 10, 11, - 17, 63, 63, 87, 93, 8, 47, 20, 36, 23, - 58, 58, 20, 6, 34, 34, 29, 85, 4, 31, - 31, 31, 117, 91, 128, 45, 17, 84, 84, 116, - 157, 66, 66, 14, 14, 41, 119, 60, 20, 25, - 25, 58, 58, 58, 22, 7, 121, 17, 52, 9, - 7, 16, 16, 55, 55, 16, 56, 56, 17, 20, - 46, 34, 34, 119, 62, 62, 42, 49, 62, 123, - 157, 64, 64, 35, 35, 35, 124, 4, 86, 86, - 67, 152, 91, 153, 112, 154, 67, 110, 67, 5, - 40, 40, 40, 2, 147, 143, 147, 147, 17, 1, - 143, 16, 16, 16, 16, 37, 12, 17, 17, 113, - 20, 65, 119, 15, 65, 19, 37, 37, 28, 20, - 20, 50, 50, 38, 57, 152, 59, 68, 69, 71, - 72, 79, 80, 81, 83, 88, 90, 94, 95, 96, - 97, 61, 61, 98, 99, 100, 101, 102, 7, 103, - 104, 105, 128, 106, 107, 108, 109, 7, 7, 114, - 122, 113, 125, 126, 119, 11, 127, 129, 130, 131, - 132, 134, 135, 136, 137, 18, 18, 18, 138, 110, - 141, 18, 142, 144, 145, 52, 47, 5, 146, 121, - 148, 154, 17, 31, 87, 47, 117, 113, 117, 149, - 23, 128, 112, 150, 20, 151, 2, nil, nil, 22, - 153, 123, nil, 119, 17, 9, 113, 152, 124, 121, - nil, nil, nil, nil, nil, nil, 20, 34, 34, nil, - nil, nil, nil, 23, nil, nil, nil, 9, nil, nil, - 117, nil, 117, nil, 31, 31, nil, 116, nil, 64, - nil, 37, nil, 31, nil, nil, nil, nil, 49, nil, - nil, 58, nil, nil, nil, 29, nil, nil, nil, nil, - nil, nil, 17, 22, 17, nil, nil, 58, nil, 17, - nil, nil, nil, 41, 20, 6, 20, 147, 41, 23, - 4, 20, 45, nil, 34, 91, 85, 9, 23, nil, - nil, nil, 9, nil, nil, nil, 34, 157, nil, nil, - 46, 26, nil, 22, 42, nil, 40, 16, 16, 42, - 47, nil, 7, 22, 40, 117, nil, 36, nil, nil, - 93, nil, 36, nil, 34, nil, nil, nil, nil, 64, - 25, 4, 34, 64, nil, nil, 91, nil, 117, nil, - nil, 86, nil, nil, nil, nil, nil, 52, 67, 11, - nil, nil, 91, nil, 66, 67, 29, nil, nil, nil, - nil, 66, nil, nil, nil, 21, 84, nil, nil, nil, - 21, nil, nil, nil, nil, nil, nil, nil, 62, 119, - nil, nil, nil, nil, 21, nil, nil, nil, 52, nil, - 14, nil, 21, 21, 21, 63, 21, 21, 21, 31, - nil, 63, nil, nil, nil, nil, nil, nil, nil, nil, - 55, 29, nil, 56, nil, nil, nil, 21, 21, nil, - nil, nil, nil, 21, 21, nil, nil, 21, 21, 21, - 21, nil, 61, 64, nil, 35, nil, nil, nil, 64, - 63, 35, nil, nil, 26, 26, nil, 58, 84, nil, - nil, nil, 64, 61, nil, 52, 58, 17, nil, nil, - nil, nil, 45, 31, nil, nil, nil, 52, 21, 20, - nil, 45, 60, 21, 21, 21, 21, 21, 21, nil, - 8, nil, nil, nil, nil, nil, 64, nil, 35, 64, - 67, 35, nil, 67, nil, 52, nil, 17, nil, nil, - 17, 52, nil, 31, nil, nil, nil, 7, nil, 20, - nil, nil, 20, 31, 26, nil, 26, 16, 26, 64, - 9, nil, 17, 9, 87, nil, 91, 91, nil, nil, - nil, 64, 52, 23, 20, 18, 18, nil, nil, nil, - 18, 18, nil, nil, nil, 91, 91, 29, 84, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 64, - nil, 10, 21, 21, 21, 21, 21, 64, nil, 21, - 21, 21, 21, 21, 17, 14, 66, nil, 66, nil, - 29, 58, 66, nil, 21, nil, 20, 17, 17, 24, - nil, nil, 58, nil, 24, 55, 45, 9, 56, 20, - 20, nil, 60, nil, nil, nil, 60, 45, 51, nil, - 9, 9, nil, nil, nil, nil, 17, 21, 21, nil, - 24, 24, 24, nil, nil, 8, 21, nil, 20, nil, - 8, 26, nil, nil, nil, nil, 29, nil, nil, 9, - nil, 24, 21, nil, 21, 29, nil, nil, 21, 21, - nil, nil, 24, 24, 24, nil, 64, nil, nil, 64, - 16, nil, 52, nil, 21, 22, nil, 17, nil, 61, - nil, nil, 17, 63, 18, nil, 61, nil, nil, 20, - 66, nil, 17, nil, 20, nil, 34, nil, nil, 21, - 21, nil, 24, 91, 20, nil, nil, nil, nil, 91, - 115, 24, 24, nil, 26, 9, nil, nil, 21, nil, - 26, nil, 26, nil, 26, nil, nil, nil, nil, nil, - 17, nil, 58, 21, nil, nil, nil, nil, nil, nil, - nil, nil, 20, nil, nil, 17, 8, nil, nil, 17, - nil, nil, nil, 9, nil, 26, nil, 20, nil, 26, - nil, nil, 26, 111, nil, nil, nil, nil, 9, nil, - nil, nil, nil, nil, 16, nil, 26, nil, 17, 17, - nil, nil, 17, nil, nil, nil, nil, 43, 17, nil, - 20, 20, 21, nil, 20, 58, 24, nil, nil, nil, - 20, 9, 9, nil, nil, 9, nil, nil, nil, 91, - nil, nil, nil, nil, nil, nil, nil, nil, 24, nil, - 26, nil, nil, 17, nil, 63, nil, nil, nil, 17, - 17, nil, nil, 21, nil, 20, nil, nil, nil, nil, - 43, 20, 20, nil, nil, nil, 9, 21, nil, nil, - nil, nil, 9, 9, 21, nil, 21, nil, nil, 43, - nil, nil, nil, 21, 26, 8, nil, 52, nil, nil, - nil, nil, 21, nil, nil, 31, 24, nil, 24, nil, - nil, 111, 24, 24, 111, nil, 115, 21, nil, 115, - 21, nil, nil, nil, nil, nil, 21, nil, 24, 17, - 29, nil, nil, nil, 52, 17, 21, 17, nil, 21, - nil, 20, 21, nil, nil, nil, nil, 20, nil, 20, - nil, nil, 9, nil, nil, nil, nil, nil, 9, nil, - 115, 64, nil, 115, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 21, 21, nil, nil, 27, 21, 21, - nil, nil, 27, 27, nil, nil, 27, nil, 111, nil, - 111, 26, nil, nil, 21, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 21, 21, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 21, nil, - nil, 43, nil, nil, nil, nil, nil, nil, nil, 21, - nil, nil, 27, 27, 27, 27, 21, nil, nil, nil, - nil, 111, 111, 115, nil, nil, 115, nil, 115, nil, - nil, nil, nil, nil, 26, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 43, nil, 115, nil, nil, 115, - 43, 115, 26, nil, nil, nil, nil, nil, 111, nil, - 111, nil, 21, 43, nil, nil, nil, 21, nil, 43, - nil, nil, 21, nil, 39, nil, nil, 111, nil, 39, - nil, 24, 21, nil, nil, nil, 115, nil, 24, nil, - 43, nil, 21, 39, nil, nil, 115, 24, nil, nil, - nil, 39, 39, 39, nil, 39, nil, nil, nil, 27, - 27, 27, 27, nil, nil, nil, nil, nil, nil, nil, - 21, 24, nil, nil, 24, nil, 39, 39, nil, nil, - nil, 43, 39, 39, nil, 21, 39, nil, nil, 21, - nil, nil, nil, nil, 26, nil, 24, 26, nil, nil, - nil, nil, nil, nil, nil, 24, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 21, nil, 21, 21, - nil, nil, 21, nil, nil, nil, nil, 39, 21, nil, - nil, nil, 39, 39, 39, 39, 39, 39, nil, 43, - nil, nil, nil, nil, nil, nil, nil, nil, 24, nil, - nil, nil, 21, nil, nil, nil, nil, nil, nil, nil, - nil, 24, 24, 21, nil, nil, nil, 43, nil, 21, - 21, nil, 24, nil, nil, nil, nil, nil, 27, 27, - nil, nil, nil, 24, nil, nil, nil, nil, nil, nil, - 24, nil, nil, nil, nil, nil, nil, 27, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 27, nil, nil, nil, nil, nil, 21, nil, - nil, 39, 39, 39, 39, 39, nil, nil, 39, 39, - 39, 39, 39, nil, nil, nil, nil, nil, nil, 21, - nil, 24, nil, 39, nil, 21, 24, 21, nil, nil, - nil, nil, nil, nil, nil, nil, 24, nil, 48, nil, - nil, nil, nil, 48, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 39, 39, 43, nil, - nil, nil, nil, nil, nil, 39, nil, nil, nil, 48, - 48, 48, nil, nil, 24, nil, nil, nil, nil, nil, - nil, 39, nil, 39, nil, nil, nil, nil, 39, 24, - 48, nil, 27, 24, nil, 43, nil, nil, nil, nil, - nil, 48, 48, 48, 48, nil, 118, 118, 118, nil, - nil, nil, nil, nil, nil, 43, nil, nil, nil, nil, - nil, nil, 24, 24, nil, nil, 24, nil, 39, 39, - nil, 27, 24, nil, nil, nil, nil, nil, nil, nil, - nil, 48, nil, nil, nil, nil, nil, 39, nil, nil, - 48, 48, nil, nil, nil, 43, 24, nil, nil, nil, - nil, nil, 39, nil, nil, nil, 43, 24, 27, nil, - nil, nil, nil, 24, 24, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 118, 118, 118, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 39, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 48, nil, nil, nil, nil, - nil, nil, nil, 24, nil, nil, nil, nil, nil, 24, - nil, 24, nil, nil, nil, nil, nil, 48, nil, nil, - nil, nil, 39, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 39, nil, nil, nil, - nil, nil, nil, nil, nil, 39, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 39, 118, 118, nil, nil, 118, 118, nil, 118, - nil, 27, nil, nil, nil, 48, 39, 48, nil, 39, - nil, 48, 48, nil, nil, 39, nil, nil, nil, nil, - nil, 118, 118, 118, 118, 39, 118, 48, 39, nil, - nil, 39, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 39, 39, nil, nil, nil, 39, 39, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 39, nil, nil, nil, nil, 118, 118, - 118, 118, nil, nil, nil, nil, 39, 39, nil, 118, - 118, 118, 118, nil, nil, 27, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 118, nil, 118, 39, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 39, nil, nil, nil, nil, 39, nil, nil, nil, - nil, 39, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 39, nil, nil, nil, nil, nil, nil, nil, nil, - 48, 39, nil, nil, nil, nil, nil, 48, nil, nil, - nil, nil, nil, nil, nil, nil, 48, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 39, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 48, nil, nil, 48, 39, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 48, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 39, nil, 39, 39, nil, - nil, 39, nil, nil, nil, nil, nil, 39, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 48, nil, nil, - nil, nil, 39, nil, nil, nil, nil, nil, 39, 39, - 48, 48, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 48, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 48, nil, nil, nil, nil, nil, nil, 48, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 30, nil, nil, nil, nil, 39, nil, nil, - 30, 30, 30, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 30, 30, 30, nil, nil, nil, 39, nil, - nil, nil, nil, nil, 39, nil, 39, 30, 30, nil, - 48, nil, nil, nil, nil, 48, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 48, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 48, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 48, nil, - nil, nil, 48, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 48, 48, nil, nil, 48, nil, nil, nil, nil, - nil, 48, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 48, nil, nil, nil, nil, - nil, 30, 30, 30, 30, nil, 48, 30, nil, nil, - nil, nil, 48, 48, nil, nil, nil, nil, nil, nil, - nil, 30, nil, nil, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, - nil, nil, nil, nil, nil, 30, 30, nil, nil, nil, - nil, nil, nil, nil, 30, nil, nil, nil, nil, nil, - nil, 30, nil, 30, nil, 30, nil, nil, nil, nil, - nil, nil, 48, nil, nil, nil, nil, nil, 48, nil, - 48, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 30, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 30, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 30, nil, 30, 30, 30, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 30, nil, nil, nil, nil, nil, 30, nil, 30, - nil, 30, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 30, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 30, 30, 30, nil, nil, nil, - nil, nil, 30, nil, nil, nil, 30, nil, nil, 30, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 30, 30, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 30, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 30, nil, 30, 30, nil, - nil, 30, 30, nil, nil, nil, 30, 30, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 30, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 30, nil, - 30, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 30, 30, 30, 30, nil, 30, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 30, - nil, nil, nil, nil, nil, nil, 30, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 30, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 30, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 30, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 30, nil, nil, 30, nil, 30 ] - -racc_goto_pointer = [ - nil, 109, 103, nil, 25, 94, 20, 55, -37, 28, - -301, -489, -513, nil, 35, 114, 3, 5, -13, 62, - 17, 385, -198, -373, 609, -149, 266, 904, 14, -16, - 1933, 2, nil, nil, -178, 59, -233, -333, -320, 1074, - 73, 14, 45, 589, nil, 3, 37, -283, 1308, -261, - 67, -62, -8, nil, nil, 55, 58, -245, -12, 82, - -7, -47, -239, -43, 57, -328, -224, -368, -321, -115, - nil, -319, -461, nil, nil, nil, nil, nil, nil, 75, - 87, 87, nil, -176, -285, -635, -428, -314, 82, nil, - -196, 30, nil, -524, 81, -208, -162, 93, 93, -511, - 94, -512, -368, -700, -372, -524, -182, -191, -374, -632, - -751, 120, -559, -731, -418, 133, -548, -555, 735, -465, - nil, -531, -561, -652, -645, -339, -465, -144, -477, 156, - -580, -580, -67, nil, -75, -75, -675, -315, -445, nil, - nil, 116, 116, 26, 113, 113, -165, -256, 118, -337, - -334, -546, -670, -670, -712, nil, nil, -426 ] - -racc_goto_default = [ - nil, nil, nil, 3, nil, 4, 328, 276, nil, 309, - nil, 780, nil, 275, nil, nil, nil, 215, 17, 12, - 216, 304, nil, nil, 214, nil, 269, 16, nil, 414, - 20, 21, 22, 23, 622, nil, nil, nil, nil, 292, - 393, 30, nil, nil, 32, 35, 34, nil, 212, 339, - nil, 121, 399, 120, 123, 72, 73, nil, 43, nil, - 630, 265, nil, 266, 404, 572, nil, 267, nil, nil, - 253, nil, nil, 44, 45, 46, 47, 48, 49, 50, - nil, 254, 56, nil, nil, nil, nil, nil, nil, 64, - nil, 513, 65, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 772, 652, nil, 773, nil, 641, nil, 643, nil, 840, - 586, nil, nil, nil, 649, nil, nil, nil, 689, nil, - nil, nil, nil, 403, nil, nil, nil, nil, nil, 71, - 74, 75, nil, nil, nil, nil, nil, 549, nil, nil, - nil, 642, 654, 655, 733, 658, 661, 271 ] - -racc_reduce_table = [ - 0, 0, :racc_error, - 1, 138, :_reduce_none, - 2, 139, :_reduce_2, - 0, 140, :_reduce_3, - 1, 140, :_reduce_4, - 3, 140, :_reduce_5, - 2, 140, :_reduce_6, - 1, 142, :_reduce_none, - 4, 142, :_reduce_8, - 4, 145, :_reduce_9, - 2, 146, :_reduce_10, - 0, 150, :_reduce_11, - 1, 150, :_reduce_12, - 3, 150, :_reduce_13, - 2, 150, :_reduce_14, - 0, 165, :_reduce_15, - 4, 144, :_reduce_16, - 3, 144, :_reduce_17, - 3, 144, :_reduce_18, - 3, 144, :_reduce_19, - 2, 144, :_reduce_20, - 3, 144, :_reduce_21, - 3, 144, :_reduce_22, - 3, 144, :_reduce_23, - 3, 144, :_reduce_24, - 3, 144, :_reduce_25, - 4, 144, :_reduce_26, - 3, 144, :_reduce_27, - 3, 144, :_reduce_28, - 3, 144, :_reduce_29, - 6, 144, :_reduce_30, - 5, 144, :_reduce_31, - 5, 144, :_reduce_32, - 5, 144, :_reduce_33, - 5, 144, :_reduce_34, - 3, 144, :_reduce_35, - 3, 144, :_reduce_36, - 3, 144, :_reduce_37, - 3, 144, :_reduce_38, - 1, 144, :_reduce_none, - 1, 164, :_reduce_none, - 3, 164, :_reduce_41, - 3, 164, :_reduce_42, - 3, 164, :_reduce_43, - 2, 164, :_reduce_44, - 1, 164, :_reduce_none, - 1, 153, :_reduce_none, - 1, 155, :_reduce_none, - 1, 155, :_reduce_none, - 1, 169, :_reduce_none, - 4, 169, :_reduce_50, - 4, 169, :_reduce_51, - 0, 175, :_reduce_52, - 5, 173, :_reduce_53, - 2, 168, :_reduce_54, - 3, 168, :_reduce_55, - 4, 168, :_reduce_56, - 5, 168, :_reduce_57, - 4, 168, :_reduce_58, - 5, 168, :_reduce_59, - 2, 168, :_reduce_60, - 2, 168, :_reduce_61, - 2, 168, :_reduce_62, - 2, 168, :_reduce_63, - 2, 168, :_reduce_64, - 1, 156, :_reduce_65, - 3, 156, :_reduce_66, - 1, 179, :_reduce_67, - 3, 179, :_reduce_68, - 1, 178, :_reduce_none, - 2, 178, :_reduce_70, - 3, 178, :_reduce_71, - 5, 178, :_reduce_72, - 2, 178, :_reduce_73, - 4, 178, :_reduce_74, - 2, 178, :_reduce_75, - 4, 178, :_reduce_76, - 1, 178, :_reduce_77, - 3, 178, :_reduce_78, - 1, 182, :_reduce_none, - 3, 182, :_reduce_80, - 2, 181, :_reduce_81, - 3, 181, :_reduce_82, - 1, 184, :_reduce_83, - 3, 184, :_reduce_84, - 1, 183, :_reduce_85, - 4, 183, :_reduce_86, - 3, 183, :_reduce_87, - 3, 183, :_reduce_88, - 3, 183, :_reduce_89, - 3, 183, :_reduce_90, - 2, 183, :_reduce_91, - 1, 183, :_reduce_92, - 1, 154, :_reduce_93, - 4, 154, :_reduce_94, - 3, 154, :_reduce_95, - 3, 154, :_reduce_96, - 3, 154, :_reduce_97, - 3, 154, :_reduce_98, - 2, 154, :_reduce_99, - 1, 154, :_reduce_100, - 1, 186, :_reduce_101, - 1, 186, :_reduce_none, - 2, 187, :_reduce_103, - 1, 187, :_reduce_104, - 3, 187, :_reduce_105, - 1, 188, :_reduce_none, - 1, 188, :_reduce_none, - 1, 188, :_reduce_none, - 1, 188, :_reduce_none, - 1, 188, :_reduce_none, - 1, 191, :_reduce_111, - 1, 191, :_reduce_none, - 1, 151, :_reduce_none, - 1, 151, :_reduce_none, - 1, 152, :_reduce_115, - 0, 194, :_reduce_116, - 4, 152, :_reduce_117, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 190, :_reduce_none, - 1, 190, :_reduce_none, - 1, 190, :_reduce_none, - 1, 190, :_reduce_none, - 1, 190, :_reduce_none, - 1, 190, :_reduce_none, - 1, 190, :_reduce_none, - 1, 190, :_reduce_none, - 1, 190, :_reduce_none, - 1, 190, :_reduce_none, - 1, 190, :_reduce_none, - 1, 190, :_reduce_none, - 1, 190, :_reduce_none, - 1, 190, :_reduce_none, - 1, 190, :_reduce_none, - 1, 190, :_reduce_none, - 1, 190, :_reduce_none, - 1, 190, :_reduce_none, - 1, 190, :_reduce_none, - 1, 190, :_reduce_none, - 1, 190, :_reduce_none, - 1, 190, :_reduce_none, - 1, 190, :_reduce_none, - 1, 190, :_reduce_none, - 1, 190, :_reduce_none, - 1, 190, :_reduce_none, - 1, 190, :_reduce_none, - 1, 190, :_reduce_none, - 1, 190, :_reduce_none, - 1, 190, :_reduce_none, - 1, 190, :_reduce_none, - 1, 190, :_reduce_none, - 1, 190, :_reduce_none, - 1, 190, :_reduce_none, - 1, 190, :_reduce_none, - 1, 190, :_reduce_none, - 1, 190, :_reduce_none, - 1, 190, :_reduce_none, - 1, 190, :_reduce_none, - 1, 190, :_reduce_none, - 1, 190, :_reduce_none, - 3, 167, :_reduce_188, - 5, 167, :_reduce_189, - 3, 167, :_reduce_190, - 5, 167, :_reduce_191, - 6, 167, :_reduce_192, - 5, 167, :_reduce_193, - 5, 167, :_reduce_194, - 5, 167, :_reduce_195, - 5, 167, :_reduce_196, - 4, 167, :_reduce_197, - 3, 167, :_reduce_198, - 3, 167, :_reduce_199, - 3, 167, :_reduce_200, - 3, 167, :_reduce_201, - 3, 167, :_reduce_202, - 3, 167, :_reduce_203, - 3, 167, :_reduce_204, - 3, 167, :_reduce_205, - 3, 167, :_reduce_206, - 4, 167, :_reduce_207, - 4, 167, :_reduce_208, - 2, 167, :_reduce_209, - 2, 167, :_reduce_210, - 3, 167, :_reduce_211, - 3, 167, :_reduce_212, - 3, 167, :_reduce_213, - 3, 167, :_reduce_214, - 3, 167, :_reduce_215, - 3, 167, :_reduce_216, - 3, 167, :_reduce_217, - 3, 167, :_reduce_218, - 3, 167, :_reduce_219, - 3, 167, :_reduce_220, - 3, 167, :_reduce_221, - 3, 167, :_reduce_222, - 3, 167, :_reduce_223, - 2, 167, :_reduce_224, - 2, 167, :_reduce_225, - 3, 167, :_reduce_226, - 3, 167, :_reduce_227, - 3, 167, :_reduce_228, - 3, 167, :_reduce_229, - 3, 167, :_reduce_230, - 6, 167, :_reduce_231, - 1, 167, :_reduce_none, - 1, 163, :_reduce_none, - 1, 196, :_reduce_none, - 2, 196, :_reduce_none, - 4, 196, :_reduce_236, - 2, 196, :_reduce_237, - 3, 201, :_reduce_238, - 0, 202, :_reduce_239, - 1, 202, :_reduce_none, - 0, 159, :_reduce_241, - 1, 159, :_reduce_none, - 1, 177, :_reduce_243, - 2, 177, :_reduce_244, - 2, 177, :_reduce_245, - 4, 177, :_reduce_246, - 6, 177, :_reduce_247, - 1, 177, :_reduce_248, - 4, 205, :_reduce_249, - 3, 205, :_reduce_250, - 2, 205, :_reduce_251, - 4, 205, :_reduce_252, - 6, 205, :_reduce_253, - 1, 205, :_reduce_254, - 0, 207, :_reduce_255, - 2, 172, :_reduce_256, - 1, 206, :_reduce_257, - 0, 208, :_reduce_258, - 3, 206, :_reduce_259, - 0, 209, :_reduce_260, - 4, 206, :_reduce_261, - 2, 204, :_reduce_262, - 2, 203, :_reduce_263, - 1, 203, :_reduce_264, - 0, 203, :_reduce_265, - 1, 198, :_reduce_266, - 2, 198, :_reduce_267, - 3, 198, :_reduce_268, - 4, 198, :_reduce_269, - 3, 162, :_reduce_270, - 4, 162, :_reduce_271, - 2, 162, :_reduce_272, - 1, 195, :_reduce_none, - 1, 195, :_reduce_none, - 1, 195, :_reduce_none, - 1, 195, :_reduce_none, - 1, 195, :_reduce_none, - 1, 195, :_reduce_none, - 1, 195, :_reduce_none, - 1, 195, :_reduce_none, - 1, 195, :_reduce_281, - 3, 195, :_reduce_282, - 0, 233, :_reduce_283, - 4, 195, :_reduce_284, - 3, 195, :_reduce_285, - 3, 195, :_reduce_286, - 2, 195, :_reduce_287, - 3, 195, :_reduce_288, - 3, 195, :_reduce_289, - 1, 195, :_reduce_290, - 4, 195, :_reduce_291, - 3, 195, :_reduce_292, - 1, 195, :_reduce_293, - 5, 195, :_reduce_294, - 4, 195, :_reduce_295, - 3, 195, :_reduce_296, - 2, 195, :_reduce_297, - 1, 195, :_reduce_none, - 2, 195, :_reduce_299, - 0, 234, :_reduce_300, - 3, 195, :_reduce_301, - 6, 195, :_reduce_302, - 6, 195, :_reduce_303, - 0, 235, :_reduce_304, - 0, 236, :_reduce_305, - 7, 195, :_reduce_306, - 0, 237, :_reduce_307, - 0, 238, :_reduce_308, - 7, 195, :_reduce_309, - 5, 195, :_reduce_310, - 4, 195, :_reduce_311, - 0, 239, :_reduce_312, - 0, 240, :_reduce_313, - 9, 195, :_reduce_314, - 0, 241, :_reduce_315, - 6, 195, :_reduce_316, - 0, 242, :_reduce_317, - 7, 195, :_reduce_318, - 0, 243, :_reduce_319, - 5, 195, :_reduce_320, - 0, 244, :_reduce_321, - 6, 195, :_reduce_322, - 0, 245, :_reduce_323, - 0, 246, :_reduce_324, - 9, 195, :_reduce_325, - 1, 195, :_reduce_326, - 1, 195, :_reduce_327, - 1, 195, :_reduce_328, - 1, 195, :_reduce_329, - 1, 158, :_reduce_none, - 1, 226, :_reduce_331, - 1, 229, :_reduce_332, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 2, 221, :_reduce_335, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 222, :_reduce_none, - 5, 222, :_reduce_339, - 1, 148, :_reduce_none, - 2, 148, :_reduce_341, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 247, :_reduce_none, - 3, 247, :_reduce_345, - 1, 250, :_reduce_346, - 3, 250, :_reduce_347, - 1, 249, :_reduce_none, - 4, 249, :_reduce_349, - 6, 249, :_reduce_350, - 3, 249, :_reduce_351, - 5, 249, :_reduce_352, - 2, 249, :_reduce_353, - 4, 249, :_reduce_354, - 1, 249, :_reduce_355, - 3, 249, :_reduce_356, - 6, 251, :_reduce_357, - 8, 251, :_reduce_358, - 4, 251, :_reduce_359, - 6, 251, :_reduce_360, - 4, 251, :_reduce_361, - 2, 251, :_reduce_none, - 6, 251, :_reduce_363, - 2, 251, :_reduce_364, - 4, 251, :_reduce_365, - 6, 251, :_reduce_366, - 2, 251, :_reduce_367, - 4, 251, :_reduce_368, - 2, 251, :_reduce_369, - 4, 251, :_reduce_370, - 1, 251, :_reduce_371, - 0, 174, :_reduce_372, - 1, 174, :_reduce_373, - 3, 257, :_reduce_374, - 1, 257, :_reduce_375, - 4, 257, :_reduce_376, - 0, 258, :_reduce_377, - 2, 258, :_reduce_378, - 1, 259, :_reduce_379, - 3, 259, :_reduce_380, - 1, 260, :_reduce_381, - 1, 260, :_reduce_none, - 0, 264, :_reduce_383, - 3, 220, :_reduce_384, - 4, 262, :_reduce_385, - 1, 262, :_reduce_386, - 0, 267, :_reduce_387, - 4, 263, :_reduce_388, - 0, 268, :_reduce_389, - 4, 263, :_reduce_390, - 0, 269, :_reduce_391, - 5, 266, :_reduce_392, - 2, 170, :_reduce_393, - 4, 170, :_reduce_394, - 4, 170, :_reduce_395, - 2, 219, :_reduce_396, - 4, 219, :_reduce_397, - 4, 219, :_reduce_398, - 3, 219, :_reduce_399, - 3, 219, :_reduce_400, - 3, 219, :_reduce_401, - 2, 219, :_reduce_402, - 1, 219, :_reduce_403, - 4, 219, :_reduce_404, - 0, 271, :_reduce_405, - 5, 218, :_reduce_406, - 0, 272, :_reduce_407, - 5, 218, :_reduce_408, - 5, 224, :_reduce_409, - 1, 273, :_reduce_410, - 1, 273, :_reduce_none, - 6, 147, :_reduce_412, - 0, 147, :_reduce_413, - 1, 274, :_reduce_414, - 1, 274, :_reduce_none, - 1, 274, :_reduce_none, - 2, 275, :_reduce_417, - 1, 275, :_reduce_none, - 2, 149, :_reduce_419, - 1, 149, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 211, :_reduce_424, - 1, 277, :_reduce_425, - 2, 277, :_reduce_426, - 3, 278, :_reduce_427, - 1, 278, :_reduce_428, - 1, 278, :_reduce_429, - 3, 212, :_reduce_430, - 4, 213, :_reduce_431, - 3, 214, :_reduce_432, - 0, 282, :_reduce_433, - 3, 282, :_reduce_434, - 1, 283, :_reduce_435, - 2, 283, :_reduce_436, - 3, 215, :_reduce_437, - 0, 285, :_reduce_438, - 3, 285, :_reduce_439, - 0, 279, :_reduce_440, - 2, 279, :_reduce_441, - 0, 280, :_reduce_442, - 2, 280, :_reduce_443, - 0, 281, :_reduce_444, - 2, 281, :_reduce_445, - 1, 284, :_reduce_446, - 2, 284, :_reduce_447, - 0, 287, :_reduce_448, - 4, 284, :_reduce_449, - 1, 286, :_reduce_450, - 1, 286, :_reduce_451, - 1, 286, :_reduce_452, - 1, 286, :_reduce_none, - 1, 192, :_reduce_454, - 3, 193, :_reduce_455, - 1, 276, :_reduce_456, - 1, 276, :_reduce_457, - 2, 276, :_reduce_458, - 2, 276, :_reduce_459, - 1, 185, :_reduce_460, - 1, 185, :_reduce_461, - 1, 185, :_reduce_462, - 1, 185, :_reduce_463, - 1, 185, :_reduce_464, - 1, 185, :_reduce_465, - 1, 185, :_reduce_466, - 1, 185, :_reduce_467, - 1, 185, :_reduce_468, - 1, 185, :_reduce_469, - 1, 185, :_reduce_470, - 1, 185, :_reduce_471, - 1, 216, :_reduce_472, - 1, 157, :_reduce_473, - 1, 161, :_reduce_474, - 1, 161, :_reduce_475, - 1, 227, :_reduce_476, - 3, 227, :_reduce_477, - 2, 227, :_reduce_478, - 3, 230, :_reduce_479, - 2, 230, :_reduce_480, - 6, 265, :_reduce_481, - 8, 265, :_reduce_482, - 4, 265, :_reduce_483, - 6, 265, :_reduce_484, - 4, 265, :_reduce_485, - 6, 265, :_reduce_486, - 2, 265, :_reduce_487, - 4, 265, :_reduce_488, - 6, 265, :_reduce_489, - 2, 265, :_reduce_490, - 4, 265, :_reduce_491, - 2, 265, :_reduce_492, - 4, 265, :_reduce_493, - 1, 265, :_reduce_494, - 0, 265, :_reduce_495, - 1, 261, :_reduce_496, - 1, 261, :_reduce_497, - 1, 261, :_reduce_498, - 1, 261, :_reduce_499, - 1, 248, :_reduce_none, - 1, 248, :_reduce_501, - 3, 248, :_reduce_502, - 2, 248, :_reduce_503, - 1, 289, :_reduce_none, - 3, 289, :_reduce_505, - 1, 252, :_reduce_506, - 3, 252, :_reduce_507, - 3, 290, :_reduce_508, - 3, 291, :_reduce_509, - 1, 253, :_reduce_510, - 3, 253, :_reduce_511, - 1, 288, :_reduce_512, - 3, 288, :_reduce_513, - 1, 292, :_reduce_none, - 1, 292, :_reduce_none, - 2, 254, :_reduce_516, - 1, 254, :_reduce_517, - 1, 293, :_reduce_none, - 1, 293, :_reduce_none, - 2, 256, :_reduce_520, - 2, 255, :_reduce_521, - 0, 255, :_reduce_522, - 1, 231, :_reduce_none, - 3, 231, :_reduce_524, - 0, 217, :_reduce_525, - 2, 217, :_reduce_none, - 1, 200, :_reduce_527, - 3, 200, :_reduce_528, - 3, 294, :_reduce_529, - 2, 294, :_reduce_530, - 1, 176, :_reduce_none, - 1, 176, :_reduce_none, - 1, 176, :_reduce_none, - 1, 171, :_reduce_none, - 1, 171, :_reduce_none, - 1, 171, :_reduce_none, - 1, 171, :_reduce_none, - 1, 270, :_reduce_none, - 1, 270, :_reduce_none, - 1, 270, :_reduce_none, - 1, 232, :_reduce_none, - 1, 232, :_reduce_none, - 0, 141, :_reduce_none, - 1, 141, :_reduce_none, - 0, 166, :_reduce_none, - 1, 166, :_reduce_none, - 2, 180, :_reduce_547, - 2, 160, :_reduce_548, - 0, 199, :_reduce_none, - 1, 199, :_reduce_none, - 1, 199, :_reduce_none, - 1, 228, :_reduce_552, - 1, 228, :_reduce_none, - 1, 143, :_reduce_none, - 2, 143, :_reduce_none, - 0, 197, :_reduce_556 ] - -racc_reduce_n = 557 - -racc_shift_n = 972 - -racc_token_table = { - false => 0, - :error => 1, - :kCLASS => 2, - :kMODULE => 3, - :kDEF => 4, - :kUNDEF => 5, - :kBEGIN => 6, - :kRESCUE => 7, - :kENSURE => 8, - :kEND => 9, - :kIF => 10, - :kUNLESS => 11, - :kTHEN => 12, - :kELSIF => 13, - :kELSE => 14, - :kCASE => 15, - :kWHEN => 16, - :kWHILE => 17, - :kUNTIL => 18, - :kFOR => 19, - :kBREAK => 20, - :kNEXT => 21, - :kREDO => 22, - :kRETRY => 23, - :kIN => 24, - :kDO => 25, - :kDO_COND => 26, - :kDO_BLOCK => 27, - :kDO_LAMBDA => 28, - :kRETURN => 29, - :kYIELD => 30, - :kSUPER => 31, - :kSELF => 32, - :kNIL => 33, - :kTRUE => 34, - :kFALSE => 35, - :kAND => 36, - :kOR => 37, - :kNOT => 38, - :kIF_MOD => 39, - :kUNLESS_MOD => 40, - :kWHILE_MOD => 41, - :kUNTIL_MOD => 42, - :kRESCUE_MOD => 43, - :kALIAS => 44, - :kDEFINED => 45, - :klBEGIN => 46, - :klEND => 47, - :k__LINE__ => 48, - :k__FILE__ => 49, - :k__ENCODING__ => 50, - :tIDENTIFIER => 51, - :tFID => 52, - :tGVAR => 53, - :tIVAR => 54, - :tCONSTANT => 55, - :tLABEL => 56, - :tCVAR => 57, - :tNTH_REF => 58, - :tBACK_REF => 59, - :tSTRING_CONTENT => 60, - :tINTEGER => 61, - :tFLOAT => 62, - :tUPLUS => 63, - :tUMINUS => 64, - :tUNARY_NUM => 65, - :tPOW => 66, - :tCMP => 67, - :tEQ => 68, - :tEQQ => 69, - :tNEQ => 70, - :tGEQ => 71, - :tLEQ => 72, - :tANDOP => 73, - :tOROP => 74, - :tMATCH => 75, - :tNMATCH => 76, - :tDOT => 77, - :tDOT2 => 78, - :tDOT3 => 79, - :tAREF => 80, - :tASET => 81, - :tLSHFT => 82, - :tRSHFT => 83, - :tCOLON2 => 84, - :tCOLON3 => 85, - :tOP_ASGN => 86, - :tASSOC => 87, - :tLPAREN => 88, - :tLPAREN2 => 89, - :tRPAREN => 90, - :tLPAREN_ARG => 91, - :tLBRACK => 92, - :tLBRACK2 => 93, - :tRBRACK => 94, - :tLBRACE => 95, - :tLBRACE_ARG => 96, - :tSTAR => 97, - :tSTAR2 => 98, - :tAMPER => 99, - :tAMPER2 => 100, - :tTILDE => 101, - :tPERCENT => 102, - :tDIVIDE => 103, - :tPLUS => 104, - :tMINUS => 105, - :tLT => 106, - :tGT => 107, - :tPIPE => 108, - :tBANG => 109, - :tCARET => 110, - :tLCURLY => 111, - :tRCURLY => 112, - :tBACK_REF2 => 113, - :tSYMBEG => 114, - :tSTRING_BEG => 115, - :tXSTRING_BEG => 116, - :tREGEXP_BEG => 117, - :tREGEXP_OPT => 118, - :tWORDS_BEG => 119, - :tQWORDS_BEG => 120, - :tSTRING_DBEG => 121, - :tSTRING_DVAR => 122, - :tSTRING_END => 123, - :tSTRING => 124, - :tSYMBOL => 125, - :tNL => 126, - :tEH => 127, - :tCOLON => 128, - :tCOMMA => 129, - :tSPACE => 130, - :tSEMI => 131, - :tLAMBDA => 132, - :tLAMBEG => 133, - :tCHARACTER => 134, - :tEQL => 135, - :tLOWEST => 136 } - -racc_nt_base = 137 - -racc_use_result_var = true - -Racc_arg = [ - racc_action_table, - racc_action_check, - racc_action_default, - racc_action_pointer, - racc_goto_table, - racc_goto_check, - racc_goto_default, - racc_goto_pointer, - racc_nt_base, - racc_reduce_table, - racc_token_table, - racc_shift_n, - racc_reduce_n, - racc_use_result_var ] -Ractor.make_shareable(Racc_arg) if defined?(Ractor) - -Racc_token_to_s_table = [ - "$end", - "error", - "kCLASS", - "kMODULE", - "kDEF", - "kUNDEF", - "kBEGIN", - "kRESCUE", - "kENSURE", - "kEND", - "kIF", - "kUNLESS", - "kTHEN", - "kELSIF", - "kELSE", - "kCASE", - "kWHEN", - "kWHILE", - "kUNTIL", - "kFOR", - "kBREAK", - "kNEXT", - "kREDO", - "kRETRY", - "kIN", - "kDO", - "kDO_COND", - "kDO_BLOCK", - "kDO_LAMBDA", - "kRETURN", - "kYIELD", - "kSUPER", - "kSELF", - "kNIL", - "kTRUE", - "kFALSE", - "kAND", - "kOR", - "kNOT", - "kIF_MOD", - "kUNLESS_MOD", - "kWHILE_MOD", - "kUNTIL_MOD", - "kRESCUE_MOD", - "kALIAS", - "kDEFINED", - "klBEGIN", - "klEND", - "k__LINE__", - "k__FILE__", - "k__ENCODING__", - "tIDENTIFIER", - "tFID", - "tGVAR", - "tIVAR", - "tCONSTANT", - "tLABEL", - "tCVAR", - "tNTH_REF", - "tBACK_REF", - "tSTRING_CONTENT", - "tINTEGER", - "tFLOAT", - "tUPLUS", - "tUMINUS", - "tUNARY_NUM", - "tPOW", - "tCMP", - "tEQ", - "tEQQ", - "tNEQ", - "tGEQ", - "tLEQ", - "tANDOP", - "tOROP", - "tMATCH", - "tNMATCH", - "tDOT", - "tDOT2", - "tDOT3", - "tAREF", - "tASET", - "tLSHFT", - "tRSHFT", - "tCOLON2", - "tCOLON3", - "tOP_ASGN", - "tASSOC", - "tLPAREN", - "tLPAREN2", - "tRPAREN", - "tLPAREN_ARG", - "tLBRACK", - "tLBRACK2", - "tRBRACK", - "tLBRACE", - "tLBRACE_ARG", - "tSTAR", - "tSTAR2", - "tAMPER", - "tAMPER2", - "tTILDE", - "tPERCENT", - "tDIVIDE", - "tPLUS", - "tMINUS", - "tLT", - "tGT", - "tPIPE", - "tBANG", - "tCARET", - "tLCURLY", - "tRCURLY", - "tBACK_REF2", - "tSYMBEG", - "tSTRING_BEG", - "tXSTRING_BEG", - "tREGEXP_BEG", - "tREGEXP_OPT", - "tWORDS_BEG", - "tQWORDS_BEG", - "tSTRING_DBEG", - "tSTRING_DVAR", - "tSTRING_END", - "tSTRING", - "tSYMBOL", - "tNL", - "tEH", - "tCOLON", - "tCOMMA", - "tSPACE", - "tSEMI", - "tLAMBDA", - "tLAMBEG", - "tCHARACTER", - "tEQL", - "tLOWEST", - "$start", - "program", - "top_compstmt", - "top_stmts", - "opt_terms", - "top_stmt", - "terms", - "stmt", - "bodystmt", - "compstmt", - "opt_rescue", - "opt_else", - "opt_ensure", - "stmts", - "fitem", - "undef_list", - "expr_value", - "lhs", - "command_call", - "mlhs", - "var_lhs", - "primary_value", - "opt_call_args", - "rbracket", - "backref", - "mrhs", - "arg_value", - "expr", - "@1", - "opt_nl", - "arg", - "command", - "block_command", - "block_call", - "operation2", - "command_args", - "cmd_brace_block", - "opt_block_param", - "@2", - "operation", - "call_args", - "mlhs_basic", - "mlhs_inner", - "rparen", - "mlhs_head", - "mlhs_item", - "mlhs_node", - "mlhs_post", - "variable", - "cname", - "cpath", - "fname", - "op", - "reswords", - "fsym", - "symbol", - "dsym", - "@3", - "primary", - "aref_args", - "none", - "args", - "trailer", - "assocs", - "paren_args", - "opt_paren_args", - "opt_block_arg", - "block_arg", - "call_args2", - "open_args", - "@4", - "@5", - "@6", - "literal", - "strings", - "xstring", - "regexp", - "words", - "qwords", - "var_ref", - "assoc_list", - "brace_block", - "method_call", - "lambda", - "then", - "if_tail", - "do", - "case_body", - "for_var", - "k_class", - "superclass", - "term", - "k_module", - "f_arglist", - "singleton", - "dot_or_colon", - "@7", - "@8", - "@9", - "@10", - "@11", - "@12", - "@13", - "@14", - "@15", - "@16", - "@17", - "@18", - "@19", - "@20", - "f_marg", - "f_norm_arg", - "f_margs", - "f_marg_list", - "block_param", - "f_arg", - "f_block_optarg", - "f_rest_arg", - "opt_f_block_arg", - "f_block_arg", - "block_param_def", - "opt_bv_decl", - "bv_decls", - "bvar", - "f_bad_arg", - "f_larglist", - "lambda_body", - "@21", - "f_args", - "do_block", - "@22", - "@23", - "@24", - "operation3", - "@25", - "@26", - "cases", - "exc_list", - "exc_var", - "numeric", - "string", - "string1", - "string_contents", - "xstring_contents", - "regexp_contents", - "word_list", - "word", - "string_content", - "qword_list", - "string_dvar", - "@27", - "f_optarg", - "f_arg_item", - "f_opt", - "f_block_opt", - "restarg_mark", - "blkarg_mark", - "assoc" ] -Ractor.make_shareable(Racc_token_to_s_table) if defined?(Ractor) - -Racc_debug_parser = false - -##### State transition tables end ##### - -# reduce 0 omitted - -# reduce 1 omitted - -def _reduce_2(val, _values, result) - result = @builder.compstmt(val[0]) - - result -end - -def _reduce_3(val, _values, result) - result = [] - - result -end - -def _reduce_4(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_5(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_6(val, _values, result) - result = [ val[1] ] - - result -end - -# reduce 7 omitted - -def _reduce_8(val, _values, result) - result = @builder.preexe(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_9(val, _values, result) - rescue_bodies = val[1] - else_t, else_ = val[2] - ensure_t, ensure_ = val[3] - - if rescue_bodies.empty? && !else_t.nil? - diagnostic :warning, :useless_else, nil, else_t - end - - result = @builder.begin_body(val[0], - rescue_bodies, - else_t, else_, - ensure_t, ensure_) - - result -end - -def _reduce_10(val, _values, result) - result = @builder.compstmt(val[0]) - - result -end - -def _reduce_11(val, _values, result) - result = [] - - result -end - -def _reduce_12(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_13(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_14(val, _values, result) - result = [ val[1] ] - - result -end - -def _reduce_15(val, _values, result) - @lexer.state = :expr_fname - - result -end - -def _reduce_16(val, _values, result) - result = @builder.alias(val[0], val[1], val[3]) - - result -end - -def _reduce_17(val, _values, result) - result = @builder.alias(val[0], - @builder.gvar(val[1]), - @builder.gvar(val[2])) - - result -end - -def _reduce_18(val, _values, result) - result = @builder.alias(val[0], - @builder.gvar(val[1]), - @builder.back_ref(val[2])) - - result -end - -def _reduce_19(val, _values, result) - diagnostic :error, :nth_ref_alias, nil, val[2] - - result -end - -def _reduce_20(val, _values, result) - result = @builder.undef_method(val[0], val[1]) - - result -end - -def _reduce_21(val, _values, result) - result = @builder.condition_mod(val[0], nil, - val[1], val[2]) - - result -end - -def _reduce_22(val, _values, result) - result = @builder.condition_mod(nil, val[0], - val[1], val[2]) - - result -end - -def _reduce_23(val, _values, result) - result = @builder.loop_mod(:while, val[0], val[1], val[2]) - - result -end - -def _reduce_24(val, _values, result) - result = @builder.loop_mod(:until, val[0], val[1], val[2]) - - result -end - -def _reduce_25(val, _values, result) - rescue_body = @builder.rescue_body(val[1], - nil, nil, nil, - nil, val[2]) - - result = @builder.begin_body(val[0], [ rescue_body ]) - - result -end - -def _reduce_26(val, _values, result) - result = @builder.postexe(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_27(val, _values, result) - result = @builder.assign(val[0], val[1], val[2]) - - result -end - -def _reduce_28(val, _values, result) - result = @builder.multi_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_29(val, _values, result) - result = @builder.op_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_30(val, _values, result) - result = @builder.op_assign( - @builder.index( - val[0], val[1], val[2], val[3]), - val[4], val[5]) - - result -end - -def _reduce_31(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_32(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_33(val, _values, result) - diagnostic :error, :const_reassignment, nil, val[3] - - result -end - -def _reduce_34(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_35(val, _values, result) - @builder.op_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_36(val, _values, result) - result = @builder.assign(val[0], val[1], - @builder.array(nil, val[2], nil)) - - result -end - -def _reduce_37(val, _values, result) - result = @builder.multi_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_38(val, _values, result) - result = @builder.multi_assign(val[0], val[1], - @builder.array(nil, val[2], nil)) - - result -end - -# reduce 39 omitted - -# reduce 40 omitted - -def _reduce_41(val, _values, result) - result = @builder.logical_op(:and, val[0], val[1], val[2]) - - result -end - -def _reduce_42(val, _values, result) - result = @builder.logical_op(:or, val[0], val[1], val[2]) - - result -end - -def _reduce_43(val, _values, result) - result = @builder.not_op(val[0], nil, val[2], nil) - - result -end - -def _reduce_44(val, _values, result) - result = @builder.not_op(val[0], nil, val[1], nil) - - result -end - -# reduce 45 omitted - -# reduce 46 omitted - -# reduce 47 omitted - -# reduce 48 omitted - -# reduce 49 omitted - -def _reduce_50(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2], - *val[3]) - - result -end - -def _reduce_51(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2], - *val[3]) - - result -end - -def _reduce_52(val, _values, result) - @static_env.extend_dynamic - result = @context.dup - @context.in_block = true - - result -end - -def _reduce_53(val, _values, result) - result = [ val[0], val[2], val[3], val[4] ] - - @static_env.unextend - @context.in_block = val[1].in_block - - result -end - -def _reduce_54(val, _values, result) - result = @builder.call_method(nil, nil, val[0], - *val[1]) - - result -end - -def _reduce_55(val, _values, result) - method_call = @builder.call_method(nil, nil, val[0], - *val[1]) - - begin_t, args, body, end_t = val[2] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_56(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2], - *val[3]) - - result -end - -def _reduce_57(val, _values, result) - method_call = @builder.call_method(val[0], val[1], val[2], - *val[3]) - - begin_t, args, body, end_t = val[4] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_58(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2], - *val[3]) - - result -end - -def _reduce_59(val, _values, result) - method_call = @builder.call_method(val[0], val[1], val[2], - *val[3]) - - begin_t, args, body, end_t = val[4] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_60(val, _values, result) - result = @builder.keyword_cmd(:super, val[0], - *val[1]) - - result -end - -def _reduce_61(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0], - *val[1]) - - result -end - -def _reduce_62(val, _values, result) - result = @builder.keyword_cmd(:return, val[0], - nil, val[1], nil) - - result -end - -def _reduce_63(val, _values, result) - result = @builder.keyword_cmd(:break, val[0], - nil, val[1], nil) - - result -end - -def _reduce_64(val, _values, result) - result = @builder.keyword_cmd(:next, val[0], - nil, val[1], nil) - - result -end - -def _reduce_65(val, _values, result) - result = @builder.multi_lhs(nil, val[0], nil) - - result -end - -def _reduce_66(val, _values, result) - result = @builder.begin(val[0], val[1], val[2]) - - result -end - -def _reduce_67(val, _values, result) - result = @builder.multi_lhs(nil, val[0], nil) - - result -end - -def _reduce_68(val, _values, result) - result = @builder.multi_lhs(val[0], val[1], val[2]) - - result -end - -# reduce 69 omitted - -def _reduce_70(val, _values, result) - result = val[0]. - push(val[1]) - - result -end - -def _reduce_71(val, _values, result) - result = val[0]. - push(@builder.splat(val[1], val[2])) - - result -end - -def _reduce_72(val, _values, result) - result = val[0]. - push(@builder.splat(val[1], val[2])). - concat(val[4]) - - result -end - -def _reduce_73(val, _values, result) - result = val[0]. - push(@builder.splat(val[1])) - - result -end - -def _reduce_74(val, _values, result) - result = val[0]. - push(@builder.splat(val[1])). - concat(val[3]) - - result -end - -def _reduce_75(val, _values, result) - result = [ @builder.splat(val[0], val[1]) ] - - result -end - -def _reduce_76(val, _values, result) - result = [ @builder.splat(val[0], val[1]), - *val[3] ] - - result -end - -def _reduce_77(val, _values, result) - result = [ @builder.splat(val[0]) ] - - result -end - -def _reduce_78(val, _values, result) - result = [ @builder.splat(val[0]), - *val[2] ] - - result -end - -# reduce 79 omitted - -def _reduce_80(val, _values, result) - result = @builder.begin(val[0], val[1], val[2]) - - result -end - -def _reduce_81(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_82(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_83(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_84(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_85(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_86(val, _values, result) - result = @builder.index_asgn(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_87(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_88(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_89(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_90(val, _values, result) - result = @builder.assignable( - @builder.const_fetch(val[0], val[1], val[2])) - - result -end - -def _reduce_91(val, _values, result) - result = @builder.assignable( - @builder.const_global(val[0], val[1])) - - result -end - -def _reduce_92(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_93(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_94(val, _values, result) - result = @builder.index_asgn(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_95(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_96(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_97(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_98(val, _values, result) - result = @builder.assignable( - @builder.const_fetch(val[0], val[1], val[2])) - - result -end - -def _reduce_99(val, _values, result) - result = @builder.assignable( - @builder.const_global(val[0], val[1])) - - result -end - -def _reduce_100(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_101(val, _values, result) - diagnostic :error, :module_name_const, nil, val[0] - - result -end - -# reduce 102 omitted - -def _reduce_103(val, _values, result) - result = @builder.const_global(val[0], val[1]) - - result -end - -def _reduce_104(val, _values, result) - result = @builder.const(val[0]) - - result -end - -def _reduce_105(val, _values, result) - result = @builder.const_fetch(val[0], val[1], val[2]) - - result -end - -# reduce 106 omitted - -# reduce 107 omitted - -# reduce 108 omitted - -# reduce 109 omitted - -# reduce 110 omitted - -def _reduce_111(val, _values, result) - result = @builder.symbol_internal(val[0]) - - result -end - -# reduce 112 omitted - -# reduce 113 omitted - -# reduce 114 omitted - -def _reduce_115(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_116(val, _values, result) - @lexer.state = :expr_fname - - result -end - -def _reduce_117(val, _values, result) - result = val[0] << val[3] - - result -end - -# reduce 118 omitted - -# reduce 119 omitted - -# reduce 120 omitted - -# reduce 121 omitted - -# reduce 122 omitted - -# reduce 123 omitted - -# reduce 124 omitted - -# reduce 125 omitted - -# reduce 126 omitted - -# reduce 127 omitted - -# reduce 128 omitted - -# reduce 129 omitted - -# reduce 130 omitted - -# reduce 131 omitted - -# reduce 132 omitted - -# reduce 133 omitted - -# reduce 134 omitted - -# reduce 135 omitted - -# reduce 136 omitted - -# reduce 137 omitted - -# reduce 138 omitted - -# reduce 139 omitted - -# reduce 140 omitted - -# reduce 141 omitted - -# reduce 142 omitted - -# reduce 143 omitted - -# reduce 144 omitted - -# reduce 145 omitted - -# reduce 146 omitted - -# reduce 147 omitted - -# reduce 148 omitted - -# reduce 149 omitted - -# reduce 150 omitted - -# reduce 151 omitted - -# reduce 152 omitted - -# reduce 153 omitted - -# reduce 154 omitted - -# reduce 155 omitted - -# reduce 156 omitted - -# reduce 157 omitted - -# reduce 158 omitted - -# reduce 159 omitted - -# reduce 160 omitted - -# reduce 161 omitted - -# reduce 162 omitted - -# reduce 163 omitted - -# reduce 164 omitted - -# reduce 165 omitted - -# reduce 166 omitted - -# reduce 167 omitted - -# reduce 168 omitted - -# reduce 169 omitted - -# reduce 170 omitted - -# reduce 171 omitted - -# reduce 172 omitted - -# reduce 173 omitted - -# reduce 174 omitted - -# reduce 175 omitted - -# reduce 176 omitted - -# reduce 177 omitted - -# reduce 178 omitted - -# reduce 179 omitted - -# reduce 180 omitted - -# reduce 181 omitted - -# reduce 182 omitted - -# reduce 183 omitted - -# reduce 184 omitted - -# reduce 185 omitted - -# reduce 186 omitted - -# reduce 187 omitted - -def _reduce_188(val, _values, result) - result = @builder.assign(val[0], val[1], val[2]) - - result -end - -def _reduce_189(val, _values, result) - rescue_body = @builder.rescue_body(val[3], - nil, nil, nil, - nil, val[4]) - - rescue_ = @builder.begin_body(val[2], [ rescue_body ]) - - result = @builder.assign(val[0], val[1], rescue_) - - result -end - -def _reduce_190(val, _values, result) - result = @builder.op_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_191(val, _values, result) - rescue_body = @builder.rescue_body(val[3], - nil, nil, nil, - nil, val[4]) - - rescue_ = @builder.begin_body(val[2], [ rescue_body ]) - - result = @builder.op_assign(val[0], val[1], rescue_) - - result -end - -def _reduce_192(val, _values, result) - result = @builder.op_assign( - @builder.index( - val[0], val[1], val[2], val[3]), - val[4], val[5]) - - result -end - -def _reduce_193(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_194(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_195(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_196(val, _values, result) - diagnostic :error, :dynamic_const, nil, val[2], [ val[3] ] - - result -end - -def _reduce_197(val, _values, result) - diagnostic :error, :dynamic_const, nil, val[1], [ val[2] ] - - result -end - -def _reduce_198(val, _values, result) - result = @builder.op_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_199(val, _values, result) - result = @builder.range_inclusive(val[0], val[1], val[2]) - - result -end - -def _reduce_200(val, _values, result) - result = @builder.range_exclusive(val[0], val[1], val[2]) - - result -end - -def _reduce_201(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_202(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_203(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_204(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_205(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_206(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_207(val, _values, result) - result = @builder.unary_op(val[0], - @builder.binary_op( - @builder.integer(val[1]), - val[2], val[3])) - - result -end - -def _reduce_208(val, _values, result) - result = @builder.unary_op(val[0], - @builder.binary_op( - @builder.float(val[1]), - val[2], val[3])) - - result -end - -def _reduce_209(val, _values, result) - result = @builder.unary_op(val[0], val[1]) - - result -end - -def _reduce_210(val, _values, result) - result = @builder.unary_op(val[0], val[1]) - - result -end - -def _reduce_211(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_212(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_213(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_214(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_215(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_216(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_217(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_218(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_219(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_220(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_221(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_222(val, _values, result) - result = @builder.match_op(val[0], val[1], val[2]) - - result -end - -def _reduce_223(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_224(val, _values, result) - result = @builder.not_op(val[0], nil, val[1], nil) - - result -end - -def _reduce_225(val, _values, result) - result = @builder.unary_op(val[0], val[1]) - - result -end - -def _reduce_226(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_227(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_228(val, _values, result) - result = @builder.logical_op(:and, val[0], val[1], val[2]) - - result -end - -def _reduce_229(val, _values, result) - result = @builder.logical_op(:or, val[0], val[1], val[2]) - - result -end - -def _reduce_230(val, _values, result) - result = @builder.keyword_cmd(:defined?, val[0], nil, [ val[2] ], nil) - - result -end - -def _reduce_231(val, _values, result) - result = @builder.ternary(val[0], val[1], - val[2], val[4], val[5]) - - result -end - -# reduce 232 omitted - -# reduce 233 omitted - -# reduce 234 omitted - -# reduce 235 omitted - -def _reduce_236(val, _values, result) - result = val[0] << @builder.associate(nil, val[2], nil) - - result -end - -def _reduce_237(val, _values, result) - result = [ @builder.associate(nil, val[0], nil) ] - - result -end - -def _reduce_238(val, _values, result) - result = val - - result -end - -def _reduce_239(val, _values, result) - result = [ nil, [], nil ] - - result -end - -# reduce 240 omitted - -def _reduce_241(val, _values, result) - result = [] - - result -end - -# reduce 242 omitted - -def _reduce_243(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_244(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_245(val, _values, result) - result = [ @builder.associate(nil, val[0], nil) ] - result.concat(val[1]) - - result -end - -def _reduce_246(val, _values, result) - assocs = @builder.associate(nil, val[2], nil) - result = val[0] << assocs - result.concat(val[3]) - - result -end - -def _reduce_247(val, _values, result) - val[2][-1] = @builder.objc_varargs(val[2][-1], val[4]) - assocs = @builder.associate(nil, val[2], nil) - result = val[0] << assocs - result.concat(val[5]) - - result -end - -def _reduce_248(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_249(val, _values, result) - result = [ val[0], *val[2].concat(val[3]) ] - - result -end - -def _reduce_250(val, _values, result) - result = [ val[0], val[2] ] - - result -end - -def _reduce_251(val, _values, result) - result = [ @builder.associate(nil, val[0], nil), - *val[1] ] - - result -end - -def _reduce_252(val, _values, result) - result = [ val[0], - @builder.associate(nil, val[2], nil), - *val[3] ] - - result -end - -def _reduce_253(val, _values, result) - result = [ val[0], - *val[2]. - push(@builder.associate(nil, val[4], nil)). - concat(val[5]) ] - - result -end - -def _reduce_254(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_255(val, _values, result) - result = @lexer.cmdarg.dup - @lexer.cmdarg.push(true) - - result -end - -def _reduce_256(val, _values, result) - @lexer.cmdarg = val[0] - - result = val[1] - - result -end - -def _reduce_257(val, _values, result) - result = [ nil, val[0], nil ] - - result -end - -def _reduce_258(val, _values, result) - @lexer.state = :expr_endarg - - result -end - -def _reduce_259(val, _values, result) - result = [ val[0], [], val[2] ] - - result -end - -def _reduce_260(val, _values, result) - @lexer.state = :expr_endarg - - result -end - -def _reduce_261(val, _values, result) - result = [ val[0], val[1], val[3] ] - - result -end - -def _reduce_262(val, _values, result) - result = @builder.block_pass(val[0], val[1]) - - result -end - -def _reduce_263(val, _values, result) - result = [ val[1] ] - - result -end - -def _reduce_264(val, _values, result) - result = [] - - result -end - -def _reduce_265(val, _values, result) - result = [] - - result -end - -def _reduce_266(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_267(val, _values, result) - result = [ @builder.splat(val[0], val[1]) ] - - result -end - -def _reduce_268(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_269(val, _values, result) - result = val[0] << @builder.splat(val[2], val[3]) - - result -end - -def _reduce_270(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_271(val, _values, result) - result = val[0] << @builder.splat(val[2], val[3]) - - result -end - -def _reduce_272(val, _values, result) - result = [ @builder.splat(val[0], val[1]) ] - - result -end - -# reduce 273 omitted - -# reduce 274 omitted - -# reduce 275 omitted - -# reduce 276 omitted - -# reduce 277 omitted - -# reduce 278 omitted - -# reduce 279 omitted - -# reduce 280 omitted - -def _reduce_281(val, _values, result) - result = @builder.call_method(nil, nil, val[0]) - - result -end - -def _reduce_282(val, _values, result) - result = @builder.begin_keyword(val[0], val[1], val[2]) - - result -end - -def _reduce_283(val, _values, result) - @lexer.state = :expr_endarg - - result -end - -def _reduce_284(val, _values, result) - result = @builder.begin(val[0], val[1], val[3]) - - result -end - -def _reduce_285(val, _values, result) - result = @builder.begin(val[0], val[1], val[2]) - - result -end - -def _reduce_286(val, _values, result) - result = @builder.const_fetch(val[0], val[1], val[2]) - - result -end - -def _reduce_287(val, _values, result) - result = @builder.const_global(val[0], val[1]) - - result -end - -def _reduce_288(val, _values, result) - result = @builder.array(val[0], val[1], val[2]) - - result -end - -def _reduce_289(val, _values, result) - result = @builder.associate(val[0], val[1], val[2]) - - result -end - -def _reduce_290(val, _values, result) - result = @builder.keyword_cmd(:return, val[0]) - - result -end - -def _reduce_291(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_292(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0], val[1], [], val[2]) - - result -end - -def _reduce_293(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0]) - - result -end - -def _reduce_294(val, _values, result) - result = @builder.keyword_cmd(:defined?, val[0], - val[2], [ val[3] ], val[4]) - - result -end - -def _reduce_295(val, _values, result) - result = @builder.not_op(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_296(val, _values, result) - result = @builder.not_op(val[0], val[1], nil, val[2]) - - result -end - -def _reduce_297(val, _values, result) - method_call = @builder.call_method(nil, nil, val[0]) - - begin_t, args, body, end_t = val[1] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -# reduce 298 omitted - -def _reduce_299(val, _values, result) - begin_t, args, body, end_t = val[1] - result = @builder.block(val[0], - begin_t, args, body, end_t) - - result -end - -def _reduce_300(val, _values, result) - result = @context.dup - @context.in_lambda = true - - result -end - -def _reduce_301(val, _values, result) - lambda_call = @builder.call_lambda(val[0]) - - args, (begin_t, body, end_t) = val[2] - result = @builder.block(lambda_call, - begin_t, args, body, end_t) - - @context.in_lambda = val[1].in_lambda - - result -end - -def _reduce_302(val, _values, result) - else_t, else_ = val[4] - result = @builder.condition(val[0], val[1], val[2], - val[3], else_t, - else_, val[5]) - - result -end - -def _reduce_303(val, _values, result) - else_t, else_ = val[4] - result = @builder.condition(val[0], val[1], val[2], - else_, else_t, - val[3], val[5]) - - result -end - -def _reduce_304(val, _values, result) - @lexer.cond.push(true) - - result -end - -def _reduce_305(val, _values, result) - @lexer.cond.pop - - result -end - -def _reduce_306(val, _values, result) - result = @builder.loop(:while, val[0], val[2], val[3], - val[5], val[6]) - - result -end - -def _reduce_307(val, _values, result) - @lexer.cond.push(true) - - result -end - -def _reduce_308(val, _values, result) - @lexer.cond.pop - - result -end - -def _reduce_309(val, _values, result) - result = @builder.loop(:until, val[0], val[2], val[3], - val[5], val[6]) - - result -end - -def _reduce_310(val, _values, result) - *when_bodies, (else_t, else_body) = *val[3] - - result = @builder.case(val[0], val[1], - when_bodies, else_t, else_body, - val[4]) - - result -end - -def _reduce_311(val, _values, result) - *when_bodies, (else_t, else_body) = *val[2] - - result = @builder.case(val[0], nil, - when_bodies, else_t, else_body, - val[3]) - - result -end - -def _reduce_312(val, _values, result) - @lexer.cond.push(true) - - result -end - -def _reduce_313(val, _values, result) - @lexer.cond.pop - - result -end - -def _reduce_314(val, _values, result) - result = @builder.for(val[0], val[1], - val[2], val[4], - val[5], val[7], val[8]) - - result -end - -def _reduce_315(val, _values, result) - local_push - @context.in_class = true - - result -end - -def _reduce_316(val, _values, result) - k_class, ctx = val[0] - if @context.in_def - diagnostic :error, :class_in_def, nil, k_class - end - - lt_t, superclass = val[2] - result = @builder.def_class(k_class, val[1], - lt_t, superclass, - val[4], val[5]) - - local_pop - @context.in_class = ctx.in_class - - result -end - -def _reduce_317(val, _values, result) - @context.in_def = false - @context.in_class = false - local_push - - result -end - -def _reduce_318(val, _values, result) - k_class, ctx = val[0] - result = @builder.def_sclass(k_class, val[1], val[2], - val[5], val[6]) - - local_pop - @context.in_def = ctx.in_def - @context.in_class = ctx.in_class - - result -end - -def _reduce_319(val, _values, result) - @context.in_class = true - local_push - - result -end - -def _reduce_320(val, _values, result) - k_mod, ctx = val[0] - if @context.in_def - diagnostic :error, :module_in_def, nil, k_mod - end - - result = @builder.def_module(k_mod, val[1], - val[3], val[4]) - - local_pop - @context.in_class = ctx.in_class - - result -end - -def _reduce_321(val, _values, result) - local_push - result = context.dup - @context.in_def = true - - result -end - -def _reduce_322(val, _values, result) - result = @builder.def_method(val[0], val[1], - val[3], val[4], val[5]) - - local_pop - @context.in_def = val[2].in_def - - result -end - -def _reduce_323(val, _values, result) - @lexer.state = :expr_fname - - result -end - -def _reduce_324(val, _values, result) - local_push - result = context.dup - @context.in_def = true - - result -end - -def _reduce_325(val, _values, result) - result = @builder.def_singleton(val[0], val[1], val[2], - val[4], val[6], val[7], val[8]) - - local_pop - @context.in_def = val[5].in_def - - result -end - -def _reduce_326(val, _values, result) - result = @builder.keyword_cmd(:break, val[0]) - - result -end - -def _reduce_327(val, _values, result) - result = @builder.keyword_cmd(:next, val[0]) - - result -end - -def _reduce_328(val, _values, result) - result = @builder.keyword_cmd(:redo, val[0]) - - result -end - -def _reduce_329(val, _values, result) - result = @builder.keyword_cmd(:retry, val[0]) - - result -end - -# reduce 330 omitted - -def _reduce_331(val, _values, result) - result = [ val[0], @context.dup ] - - result -end - -def _reduce_332(val, _values, result) - result = [ val[0], @context.dup ] - - result -end - -# reduce 333 omitted - -# reduce 334 omitted - -def _reduce_335(val, _values, result) - result = val[1] - - result -end - -# reduce 336 omitted - -# reduce 337 omitted - -# reduce 338 omitted - -def _reduce_339(val, _values, result) - else_t, else_ = val[4] - result = [ val[0], - @builder.condition(val[0], val[1], val[2], - val[3], else_t, - else_, nil), - ] - - result -end - -# reduce 340 omitted - -def _reduce_341(val, _values, result) - result = val - - result -end - -# reduce 342 omitted - -# reduce 343 omitted - -# reduce 344 omitted - -def _reduce_345(val, _values, result) - result = @builder.multi_lhs(val[0], val[1], val[2]) - - result -end - -def _reduce_346(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_347(val, _values, result) - result = val[0] << val[2] - - result -end - -# reduce 348 omitted - -def _reduce_349(val, _values, result) - result = val[0]. - push(@builder.objc_restarg(val[2], val[3])) - - result -end - -def _reduce_350(val, _values, result) - result = val[0]. - push(@builder.objc_restarg(val[2], val[3])). - concat(val[5]) - - result -end - -def _reduce_351(val, _values, result) - result = val[0]. - push(@builder.objc_restarg(val[2])) - - result -end - -def _reduce_352(val, _values, result) - result = val[0]. - push(@builder.objc_restarg(val[2])). - concat(val[4]) - - result -end - -def _reduce_353(val, _values, result) - result = [ @builder.objc_restarg(val[0], val[1]) ] - - result -end - -def _reduce_354(val, _values, result) - result = [ @builder.objc_restarg(val[0], val[1]), - *val[3] ] - - result -end - -def _reduce_355(val, _values, result) - result = [ @builder.objc_restarg(val[0]) ] - - result -end - -def _reduce_356(val, _values, result) - result = [ @builder.objc_restarg(val[0]), - *val[2] ] - - result -end - -def _reduce_357(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_358(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[6]). - concat(val[7]) - - result -end - -def _reduce_359(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_360(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_361(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -# reduce 362 omitted - -def _reduce_363(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_364(val, _values, result) - if val[1].empty? && val[0].size == 1 - result = [@builder.procarg0(val[0][0])] - else - result = val[0].concat(val[1]) - end - - result -end - -def _reduce_365(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_366(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_367(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_368(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_369(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_370(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_371(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_372(val, _values, result) - result = @builder.args(nil, [], nil) - - result -end - -def _reduce_373(val, _values, result) - @lexer.state = :expr_value - - result -end - -def _reduce_374(val, _values, result) - result = @builder.args(val[0], val[1], val[2]) - - result -end - -def _reduce_375(val, _values, result) - result = @builder.args(val[0], [], val[0]) - - result -end - -def _reduce_376(val, _values, result) - result = @builder.args(val[0], val[1].concat(val[2]), val[3]) - - result -end - -def _reduce_377(val, _values, result) - result = [] - - result -end - -def _reduce_378(val, _values, result) - result = val[1] - - result -end - -def _reduce_379(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_380(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_381(val, _values, result) - @static_env.declare val[0][0] - result = @builder.shadowarg(val[0]) - - result -end - -# reduce 382 omitted - -def _reduce_383(val, _values, result) - @static_env.extend_dynamic - - result -end - -def _reduce_384(val, _values, result) - result = [ val[1], val[2] ] - - @static_env.unextend - - result -end - -def _reduce_385(val, _values, result) - result = @builder.args(val[0], val[1].concat(val[2]), val[3]) - - result -end - -def _reduce_386(val, _values, result) - result = @builder.args(nil, val[0], nil) - - result -end - -def _reduce_387(val, _values, result) - result = @context.dup - @context.in_lambda = true - - result -end - -def _reduce_388(val, _values, result) - result = [ val[0], val[2], val[3] ] - @context.in_lambda = val[1].in_lambda - - result -end - -def _reduce_389(val, _values, result) - result = @context.dup - @context.in_lambda = true - - result -end - -def _reduce_390(val, _values, result) - result = [ val[0], val[2], val[3] ] - @context.in_lambda = val[1].in_lambda - - result -end - -def _reduce_391(val, _values, result) - @static_env.extend_dynamic - result = @context.dup - @context.in_block = true - - result -end - -def _reduce_392(val, _values, result) - result = [ val[0], val[2], val[3], val[4] ] - - @static_env.unextend - @context.in_block = val[1].in_block - - result -end - -def _reduce_393(val, _values, result) - begin_t, block_args, body, end_t = val[1] - result = @builder.block(val[0], - begin_t, block_args, body, end_t) - - result -end - -def _reduce_394(val, _values, result) - lparen_t, args, rparen_t = val[3] - result = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - result -end - -def _reduce_395(val, _values, result) - lparen_t, args, rparen_t = val[3] - result = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - result -end - -def _reduce_396(val, _values, result) - lparen_t, args, rparen_t = val[1] - result = @builder.call_method(nil, nil, val[0], - lparen_t, args, rparen_t) - - result -end - -def _reduce_397(val, _values, result) - lparen_t, args, rparen_t = val[3] - result = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - result -end - -def _reduce_398(val, _values, result) - lparen_t, args, rparen_t = val[3] - result = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - result -end - -def _reduce_399(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2]) - - result -end - -def _reduce_400(val, _values, result) - lparen_t, args, rparen_t = val[2] - result = @builder.call_method(val[0], val[1], nil, - lparen_t, args, rparen_t) - - result -end - -def _reduce_401(val, _values, result) - lparen_t, args, rparen_t = val[2] - result = @builder.call_method(val[0], val[1], nil, - lparen_t, args, rparen_t) - - result -end - -def _reduce_402(val, _values, result) - lparen_t, args, rparen_t = val[1] - result = @builder.keyword_cmd(:super, val[0], - lparen_t, args, rparen_t) - - result -end - -def _reduce_403(val, _values, result) - result = @builder.keyword_cmd(:zsuper, val[0]) - - result -end - -def _reduce_404(val, _values, result) - result = @builder.index(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_405(val, _values, result) - @static_env.extend_dynamic - result = @context.dup - @context.in_block = true - - result -end - -def _reduce_406(val, _values, result) - result = [ val[0], val[2], val[3], val[4] ] - - @static_env.unextend - @context.in_block = val[1].in_block - - result -end - -def _reduce_407(val, _values, result) - @static_env.extend_dynamic - result = @context.dup - @context.in_block = true - - result -end - -def _reduce_408(val, _values, result) - result = [ val[0], val[2], val[3], val[4] ] - - @static_env.unextend - @context.in_block = val[1].in_block - - result -end - -def _reduce_409(val, _values, result) - result = [ @builder.when(val[0], val[1], val[2], val[3]), - *val[4] ] - - result -end - -def _reduce_410(val, _values, result) - result = [ val[0] ] - - result -end - -# reduce 411 omitted - -def _reduce_412(val, _values, result) - assoc_t, exc_var = val[2] - - if val[1] - exc_list = @builder.array(nil, val[1], nil) - end - - result = [ @builder.rescue_body(val[0], - exc_list, assoc_t, exc_var, - val[3], val[4]), - *val[5] ] - - result -end - -def _reduce_413(val, _values, result) - result = [] - - result -end - -def _reduce_414(val, _values, result) - result = [ val[0] ] - - result -end - -# reduce 415 omitted - -# reduce 416 omitted - -def _reduce_417(val, _values, result) - result = [ val[0], val[1] ] - - result -end - -# reduce 418 omitted - -def _reduce_419(val, _values, result) - result = [ val[0], val[1] ] - - result -end - -# reduce 420 omitted - -# reduce 421 omitted - -# reduce 422 omitted - -# reduce 423 omitted - -def _reduce_424(val, _values, result) - result = @builder.string_compose(nil, val[0], nil) - - result -end - -def _reduce_425(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_426(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_427(val, _values, result) - result = @builder.string_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_428(val, _values, result) - result = @builder.string(val[0]) - - result -end - -def _reduce_429(val, _values, result) - result = @builder.character(val[0]) - - result -end - -def _reduce_430(val, _values, result) - result = @builder.xstring_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_431(val, _values, result) - opts = @builder.regexp_options(val[3]) - result = @builder.regexp_compose(val[0], val[1], val[2], opts) - - result -end - -def _reduce_432(val, _values, result) - result = @builder.words_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_433(val, _values, result) - result = [] - - result -end - -def _reduce_434(val, _values, result) - result = val[0] << @builder.word(val[1]) - - result -end - -def _reduce_435(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_436(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_437(val, _values, result) - result = @builder.words_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_438(val, _values, result) - result = [] - - result -end - -def _reduce_439(val, _values, result) - result = val[0] << @builder.string_internal(val[1]) - - result -end - -def _reduce_440(val, _values, result) - result = [] - - result -end - -def _reduce_441(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_442(val, _values, result) - result = [] - - result -end - -def _reduce_443(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_444(val, _values, result) - result = [] - - result -end - -def _reduce_445(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_446(val, _values, result) - result = @builder.string_internal(val[0]) - - result -end - -def _reduce_447(val, _values, result) - result = val[1] - - result -end - -def _reduce_448(val, _values, result) - @lexer.cond.push(false) - @lexer.cmdarg.push(false) - - result -end - -def _reduce_449(val, _values, result) - @lexer.cond.lexpop - @lexer.cmdarg.lexpop - - result = @builder.begin(val[0], val[2], val[3]) - - result -end - -def _reduce_450(val, _values, result) - result = @builder.gvar(val[0]) - - result -end - -def _reduce_451(val, _values, result) - result = @builder.ivar(val[0]) - - result -end - -def _reduce_452(val, _values, result) - result = @builder.cvar(val[0]) - - result -end - -# reduce 453 omitted - -def _reduce_454(val, _values, result) - result = @builder.symbol(val[0]) - - result -end - -def _reduce_455(val, _values, result) - result = @builder.symbol_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_456(val, _values, result) - result = @builder.integer(val[0]) - - result -end - -def _reduce_457(val, _values, result) - result = @builder.float(val[0]) - - result -end - -def _reduce_458(val, _values, result) - num = @builder.integer(val[1]) - if @builder.respond_to? :negate - # AST builder interface compatibility - result = @builder.negate(val[0], num) - else - result = @builder.unary_num(val[0], num) - end - - result -end - -def _reduce_459(val, _values, result) - num = @builder.float(val[1]) - if @builder.respond_to? :negate - # AST builder interface compatibility - result = @builder.negate(val[0], num) - else - result = @builder.unary_num(val[0], num) - end - - result -end - -def _reduce_460(val, _values, result) - result = @builder.ident(val[0]) - - result -end - -def _reduce_461(val, _values, result) - result = @builder.ivar(val[0]) - - result -end - -def _reduce_462(val, _values, result) - result = @builder.gvar(val[0]) - - result -end - -def _reduce_463(val, _values, result) - result = @builder.const(val[0]) - - result -end - -def _reduce_464(val, _values, result) - result = @builder.cvar(val[0]) - - result -end - -def _reduce_465(val, _values, result) - result = @builder.nil(val[0]) - - result -end - -def _reduce_466(val, _values, result) - result = @builder.self(val[0]) - - result -end - -def _reduce_467(val, _values, result) - result = @builder.true(val[0]) - - result -end - -def _reduce_468(val, _values, result) - result = @builder.false(val[0]) - - result -end - -def _reduce_469(val, _values, result) - result = @builder.__FILE__(val[0]) - - result -end - -def _reduce_470(val, _values, result) - result = @builder.__LINE__(val[0]) - - result -end - -def _reduce_471(val, _values, result) - result = @builder.__ENCODING__(val[0]) - - result -end - -def _reduce_472(val, _values, result) - result = @builder.accessible(val[0]) - - result -end - -def _reduce_473(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_474(val, _values, result) - result = @builder.nth_ref(val[0]) - - result -end - -def _reduce_475(val, _values, result) - result = @builder.back_ref(val[0]) - - result -end - -def _reduce_476(val, _values, result) - result = nil - - result -end - -def _reduce_477(val, _values, result) - result = [ val[0], val[1] ] - - result -end - -def _reduce_478(val, _values, result) - yyerrok - result = nil - - result -end - -def _reduce_479(val, _values, result) - result = @builder.args(val[0], val[1], val[2]) - - @lexer.state = :expr_value - - result -end - -def _reduce_480(val, _values, result) - result = @builder.args(nil, val[0], nil) - - result -end - -def _reduce_481(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_482(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[6]). - concat(val[7]) - - result -end - -def _reduce_483(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_484(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_485(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_486(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_487(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_488(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_489(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_490(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_491(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_492(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_493(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_494(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_495(val, _values, result) - result = [] - - result -end - -def _reduce_496(val, _values, result) - diagnostic :error, :argument_const, nil, val[0] - - result -end - -def _reduce_497(val, _values, result) - diagnostic :error, :argument_ivar, nil, val[0] - - result -end - -def _reduce_498(val, _values, result) - diagnostic :error, :argument_gvar, nil, val[0] - - result -end - -def _reduce_499(val, _values, result) - diagnostic :error, :argument_cvar, nil, val[0] - - result -end - -# reduce 500 omitted - -def _reduce_501(val, _values, result) - @static_env.declare val[0][0] - - result = @builder.arg(val[0]) - - result -end - -def _reduce_502(val, _values, result) - @static_env.declare val[2][0] - - result = @builder.objc_kwarg(val[0], val[1], val[2]) - - result -end - -def _reduce_503(val, _values, result) - @static_env.declare val[1][0] - - result = @builder.objc_kwarg(val[0], nil, val[1]) - - result -end - -# reduce 504 omitted - -def _reduce_505(val, _values, result) - result = @builder.multi_lhs(val[0], val[1], val[2]) - - result -end - -def _reduce_506(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_507(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_508(val, _values, result) - @static_env.declare val[0][0] - - result = @builder.optarg(val[0], val[1], val[2]) - - result -end - -def _reduce_509(val, _values, result) - @static_env.declare val[0][0] - - result = @builder.optarg(val[0], val[1], val[2]) - - result -end - -def _reduce_510(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_511(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_512(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_513(val, _values, result) - result = val[0] << val[2] - - result -end - -# reduce 514 omitted - -# reduce 515 omitted - -def _reduce_516(val, _values, result) - @static_env.declare val[1][0] - - result = [ @builder.restarg(val[0], val[1]) ] - - result -end - -def _reduce_517(val, _values, result) - result = [ @builder.restarg(val[0]) ] - - result -end - -# reduce 518 omitted - -# reduce 519 omitted - -def _reduce_520(val, _values, result) - @static_env.declare val[1][0] - - result = @builder.blockarg(val[0], val[1]) - - result -end - -def _reduce_521(val, _values, result) - result = [ val[1] ] - - result -end - -def _reduce_522(val, _values, result) - result = [] - - result -end - -# reduce 523 omitted - -def _reduce_524(val, _values, result) - result = val[1] - - result -end - -def _reduce_525(val, _values, result) - result = [] - - result -end - -# reduce 526 omitted - -def _reduce_527(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_528(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_529(val, _values, result) - result = @builder.pair(val[0], val[1], val[2]) - - result -end - -def _reduce_530(val, _values, result) - result = @builder.pair_keyword(val[0], val[1]) - - result -end - -# reduce 531 omitted - -# reduce 532 omitted - -# reduce 533 omitted - -# reduce 534 omitted - -# reduce 535 omitted - -# reduce 536 omitted - -# reduce 537 omitted - -# reduce 538 omitted - -# reduce 539 omitted - -# reduce 540 omitted - -# reduce 541 omitted - -# reduce 542 omitted - -# reduce 543 omitted - -# reduce 544 omitted - -# reduce 545 omitted - -# reduce 546 omitted - -def _reduce_547(val, _values, result) - result = val[1] - - result -end - -def _reduce_548(val, _values, result) - result = val[1] - - result -end - -# reduce 549 omitted - -# reduce 550 omitted - -# reduce 551 omitted - -def _reduce_552(val, _values, result) - yyerrok - - result -end - -# reduce 553 omitted - -# reduce 554 omitted - -# reduce 555 omitted - -def _reduce_556(val, _values, result) - result = nil - - result -end - -def _reduce_none(val, _values, result) - val[0] -end - - end # class MacRuby -end # module Parser diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/max_numparam_stack.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/max_numparam_stack.rb deleted file mode 100644 index 9a741c72..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/max_numparam_stack.rb +++ /dev/null @@ -1,56 +0,0 @@ -# frozen_string_literal: true - -module Parser - - # Holds p->max_numparam from parse.y - # - # @api private - class MaxNumparamStack - attr_reader :stack - - ORDINARY_PARAMS = -1 - - def initialize - @stack = [] - end - - def empty? - @stack.size == 0 - end - - def has_ordinary_params! - set(ORDINARY_PARAMS) - end - - def has_ordinary_params? - top == ORDINARY_PARAMS - end - - def has_numparams? - top && top > 0 - end - - def register(numparam) - set( [top, numparam].max ) - end - - def top - @stack.last[:value] - end - - def push(static:) - @stack.push(value: 0, static: static) - end - - def pop - @stack.pop[:value] - end - - private - - def set(value) - @stack.last[:value] = value - end - end - -end diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/messages.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/messages.rb deleted file mode 100644 index c82c6343..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/messages.rb +++ /dev/null @@ -1,125 +0,0 @@ -# frozen_string_literal: true - -module Parser - ## - # Diagnostic messages (errors, warnings and notices) that can be generated. - # - # @see Diagnostic - # - # @api public - # - MESSAGES = { - # Lexer errors - :unicode_point_too_large => 'invalid Unicode codepoint (too large)', - :invalid_escape => 'invalid escape character syntax', - :incomplete_escape => 'incomplete character syntax', - :invalid_hex_escape => 'invalid hex escape', - :invalid_unicode_escape => 'invalid Unicode escape', - :unterminated_unicode => 'unterminated Unicode escape', - :escape_eof => 'escape sequence meets end of file', - :string_eof => 'unterminated string meets end of file', - :regexp_options => 'unknown regexp options: %{options}', - :cvar_name => "`%{name}' is not allowed as a class variable name", - :ivar_name => "`%{name}' is not allowed as an instance variable name", - :gvar_name => "`%{name}' is not allowed as a global variable name", - :trailing_in_number => "trailing `%{character}' in number", - :empty_numeric => 'numeric literal without digits', - :invalid_octal => 'invalid octal digit', - :no_dot_digit_literal => 'no . floating literal anymore; put 0 before dot', - :bare_backslash => 'bare backslash only allowed before newline', - :unexpected => "unexpected `%{character}'", - :embedded_document => 'embedded document meets end of file (and they embark on a romantic journey)', - :heredoc_id_has_newline => 'here document identifier across newlines, never match', - :heredoc_id_ends_with_nl => 'here document identifier ends with a newline', - :unterminated_heredoc_id => 'unterminated heredoc id', - - # Lexer warnings - :invalid_escape_use => 'invalid character syntax; use ?%{escape}', - :ambiguous_literal => 'ambiguous first argument; put parentheses or a space even after the operator', - :ambiguous_regexp => "ambiguity between regexp and two divisions: wrap regexp in parentheses or add a space after `/' operator", - :ambiguous_prefix => "`%{prefix}' interpreted as argument prefix", - :triple_dot_at_eol => '... at EOL, should be parenthesized', - - # Parser errors - :nth_ref_alias => 'cannot define an alias for a back-reference variable', - :begin_in_method => 'BEGIN in method', - :backref_assignment => 'cannot assign to a back-reference variable', - :invalid_assignment => 'cannot assign to a keyword', - :module_name_const => 'class or module name must be a constant literal', - :unexpected_token => 'unexpected token %{token}', - :argument_const => 'formal argument cannot be a constant', - :argument_ivar => 'formal argument cannot be an instance variable', - :argument_gvar => 'formal argument cannot be a global variable', - :argument_cvar => 'formal argument cannot be a class variable', - :duplicate_argument => 'duplicate argument name', - :empty_symbol => 'empty symbol literal', - :odd_hash => 'odd number of entries for a hash', - :singleton_literal => 'cannot define a singleton method for a literal', - :dynamic_const => 'dynamic constant assignment', - :const_reassignment => 'constant re-assignment', - :module_in_def => 'module definition in method body', - :class_in_def => 'class definition in method body', - :unexpected_percent_str => '%{type}: unknown type of percent-literal', - :block_and_blockarg => 'both block argument and literal block are passed', - :masgn_as_condition => 'multiple assignment in conditional context', - :block_given_to_yield => 'block given to yield', - :invalid_regexp => '%{message}', - :invalid_return => 'Invalid return in class/module body', - :csend_in_lhs_of_masgn => '&. inside multiple assignment destination', - :cant_assign_to_numparam => 'cannot assign to numbered parameter %{name}', - :reserved_for_numparam => '%{name} is reserved for numbered parameter', - :ordinary_param_defined => 'ordinary parameter is defined', - :numparam_used_in_outer_scope => 'numbered parameter is already used in an outer scope', - :circular_argument_reference => 'circular argument reference %{var_name}', - :pm_interp_in_var_name => 'symbol literal with interpolation is not allowed', - :lvar_name => "`%{name}' is not allowed as a local variable name", - :undefined_lvar => "no such local variable: `%{name}'", - :duplicate_variable_name => 'duplicate variable name %{name}', - :duplicate_pattern_key => 'duplicate hash pattern key %{name}', - :endless_setter => 'setter method cannot be defined in an endless method definition', - :invalid_id_to_get => 'identifier %{identifier} is not valid to get', - :forward_arg_after_restarg => '... after rest argument', - :no_anonymous_blockarg => 'no anonymous block parameter', - :no_anonymous_restarg => 'no anonymous rest parameter', - :no_anonymous_kwrestarg => 'no anonymous keyword rest parameter', - :ambiguous_anonymous_restarg => 'anonymous rest parameter is also used within block', - :ambiguous_anonymous_kwrestarg => 'anonymous keyword rest parameter is also used within block', - :ambiguous_anonymous_blockarg => 'anonymous block parameter is also used within block', - - # Parser warnings - :useless_else => 'else without rescue is useless', - :duplicate_hash_key => 'key is duplicated and overwritten', - :ambiguous_it_call => '`it` calls without arguments refers to the first block param', - - # Parser errors that are not Ruby errors - :invalid_encoding => 'literal contains escape sequences incompatible with UTF-8', - - # Rewriter diagnostics - :invalid_action => 'cannot %{action}', - :clobbered => 'clobbered by: %{action}', - - # Rewriter diagnostics - :different_replacements => 'different replacements: %{replacement} vs %{other_replacement}', - :swallowed_insertions => 'this replacement:', - :swallowed_insertions_conflict => 'swallows some inner rewriting actions:', - :crossing_deletions => 'the deletion of:', - :crossing_deletions_conflict => 'is crossing:', - :crossing_insertions => 'the rewriting action on:', - :crossing_insertions_conflict => 'is crossing that on:', - }.freeze - - # @api private - module Messages - # Formats the message, returns a raw template if there's nothing to interpolate - # - # Code like `format("", {})` gives a warning, and so this method tries interpolating - # only if `arguments` hash is not empty. - # - # @api private - def self.compile(reason, arguments) - template = MESSAGES[reason] - return template if Hash === arguments && arguments.empty? - format(template, arguments) - end - end -end diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/meta.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/meta.rb deleted file mode 100644 index 83ab9d40..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/meta.rb +++ /dev/null @@ -1,40 +0,0 @@ -# frozen_string_literal: true - -module Parser - # Parser metadata - module Meta - - # All node types that parser can produce. Not all parser versions - # will be able to produce every possible node. - NODE_TYPES = - %i( - true false nil int float str dstr - sym dsym xstr regopt regexp array splat - pair kwsplat hash irange erange self - lvar ivar cvar gvar const defined? lvasgn - ivasgn cvasgn gvasgn casgn mlhs masgn - op_asgn and_asgn ensure rescue arg_expr - or_asgn back_ref nth_ref - match_with_lvasgn match_current_line - module class sclass def defs undef alias args - cbase arg optarg restarg blockarg block_pass kwarg kwoptarg - kwrestarg kwnilarg send csend super zsuper yield block - and not or if when case while until while_post - until_post for break next redo return resbody - kwbegin begin retry preexe postexe iflipflop eflipflop - shadowarg complex rational __FILE__ __LINE__ __ENCODING__ - ident lambda indexasgn index procarg0 - restarg_expr blockarg_expr - objc_kwarg objc_restarg objc_varargs - numargs numblock forward_args forwarded_args forward_arg - case_match in_match in_pattern - match_var pin match_alt match_as match_rest - array_pattern match_with_trailing_comma array_pattern_with_tail - hash_pattern const_pattern if_guard unless_guard match_nil_pattern - empty_else find_pattern kwargs - match_pattern_p match_pattern - forwarded_restarg forwarded_kwrestarg - ).to_set.freeze - - end # Meta -end # Parser diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/rewriter.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/rewriter.rb deleted file mode 100644 index f81ebb18..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/rewriter.rb +++ /dev/null @@ -1,105 +0,0 @@ -# frozen_string_literal: true - -module Parser - - ## - # {Parser::Rewriter} is deprecated. Use {Parser::TreeRewriter} instead. - # It has a backwards compatible API and uses {Parser::Source::TreeRewriter} - # instead of {Parser::Source::Rewriter}. - # Please check the documentation for {Parser::Source::Rewriter} for details. - # - # @api public - # @deprecated Use {Parser::TreeRewriter} - # - class Rewriter < Parser::AST::Processor - ## - # Rewrites the AST/source buffer and returns a String containing the new - # version. - # - # @param [Parser::Source::Buffer] source_buffer - # @param [Parser::AST::Node] ast - # @return [String] - # - def rewrite(source_buffer, ast) - @source_rewriter = Source::Rewriter.new(source_buffer) - - process(ast) - - @source_rewriter.process - end - - ## - # Returns `true` if the specified node is an assignment node, returns false - # otherwise. - # - # @param [Parser::AST::Node] node - # @return [Boolean] - # - def assignment?(node) - [:lvasgn, :ivasgn, :gvasgn, :cvasgn, :casgn].include?(node.type) - end - - ## - # Removes the source range. - # - # @param [Parser::Source::Range] range - # - def remove(range) - @source_rewriter.remove(range) - end - - ## - # Wraps the given source range with the given values. - # - # @param [Parser::Source::Range] range - # @param [String] content - # - def wrap(range, before, after) - @source_rewriter.wrap(range, before, after) - end - - ## - # Inserts new code before the given source range. - # - # @param [Parser::Source::Range] range - # @param [String] content - # - def insert_before(range, content) - @source_rewriter.insert_before(range, content) - end - - ## - # Inserts new code after the given source range. - # - # @param [Parser::Source::Range] range - # @param [String] content - # - def insert_after(range, content) - @source_rewriter.insert_after(range, content) - end - - ## - # Replaces the code of the source range `range` with `content`. - # - # @param [Parser::Source::Range] range - # @param [String] content - # - def replace(range, content) - @source_rewriter.replace(range, content) - end - - DEPRECATION_WARNING = [ - 'Parser::Rewriter is deprecated.', - 'Please update your code to use Parser::TreeRewriter instead' - ].join("\n").freeze - - extend Deprecation - - def initialize(*) - self.class.warn_of_deprecation - Source::Rewriter.warned_of_deprecation = true - super - end - end - -end diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ruby18.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ruby18.rb deleted file mode 100644 index 5f1630a2..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ruby18.rb +++ /dev/null @@ -1,9272 +0,0 @@ -# -*- encoding:utf-8; warn-indent:false; frozen_string_literal: true -*- -# -# DO NOT MODIFY!!!! -# This file is automatically generated by Racc 1.7.3 -# from Racc grammar file "ruby18.y". -# - -require 'racc/parser.rb' - - -require 'parser' - -module Parser - class Ruby18 < Parser::Base - - - def version - 18 - end - - def default_encoding - Encoding::BINARY - end - - def local_push - @static_env.extend_static - @lexer.cmdarg.push(false) - @lexer.cond.push(false) - end - - def local_pop - @static_env.unextend - @lexer.cmdarg.pop - @lexer.cond.pop - end -##### State transition tables begin ### - -racc_action_table = [ - -482, 197, 198, 197, 198, 491, 816, -482, -482, -482, - 513, 580, 580, -482, -482, -80, -482, 433, 581, 581, - 491, 560, 533, -87, 560, -482, 504, 491, -86, 97, - 505, -431, 397, 197, 198, -482, -482, -82, -482, -482, - -482, -482, -482, 491, 491, 497, 465, 498, -84, -83, - -81, 661, 660, 664, 663, 559, 188, -61, 559, 715, - 293, 293, 189, -482, -482, -482, -482, -482, -482, -482, - -482, -482, -482, -482, -482, -482, -482, -80, -87, -482, - -482, -482, 261, 548, 532, 724, -74, -482, 190, 101, - -482, 293, -86, 623, 100, -482, -69, -482, 191, -482, - -482, -482, -482, -482, -482, -482, -277, -482, -482, -482, - 192, -478, 512, -277, -277, -277, 101, -72, 490, -277, - -277, 100, -277, -482, -482, -79, -75, 236, -482, -83, - -78, 101, 101, 490, 623, -76, 100, 100, 101, -74, - 490, -277, -277, 100, -277, -277, -277, -277, -277, -74, - -76, -75, -73, 692, 101, 101, 490, 490, 623, 100, - 100, -85, 608, 560, 498, 260, 261, -74, 693, -277, - -277, -277, -277, -277, -277, -277, -277, -277, -277, -277, - -277, -277, -277, 261, 560, -277, -277, -277, -74, 551, - 101, -74, 622, -277, 74, 100, -277, 559, -76, -82, - 196, -277, 75, -277, 523, -277, -277, -277, -277, -277, - -277, -277, -272, -277, -84, -277, -76, 284, 559, -272, - -272, -272, 816, -479, -272, -272, -272, 256, -272, -277, - -277, 101, -77, 622, -277, -85, 100, -76, -272, -272, - -76, 197, 198, -79, 256, -475, -87, -272, -272, 260, - -272, -272, -272, -272, -272, 101, 101, 622, 286, 287, - 100, 100, 523, -77, 525, 524, 260, 661, 660, 664, - 663, 463, 464, 285, 675, -272, -272, -272, -272, -272, - -272, -272, -272, -272, -272, -272, -272, -272, -272, 293, - -476, -272, -272, -272, -419, 101, -272, 770, 351, -272, - 100, -419, -272, -272, -431, -272, -475, -272, 363, -272, - -419, -272, -272, -272, -272, -272, -272, -272, -226, -272, - 465, -272, 525, 524, 521, -226, -226, -226, -475, 543, - -226, -226, -226, -482, -226, -272, -272, -272, -272, -423, - -272, 523, 253, -81, -226, 194, -423, -72, 396, 254, - -80, -476, 195, -226, -226, -423, -226, -226, -226, -226, - -226, 193, -419, -78, 479, -482, -86, 478, -478, -419, - 398, -226, -74, -476, 523, -82, 544, 682, -226, -226, - -226, 399, -482, -226, -226, -226, -423, -226, -479, -482, - 428, 360, -226, -423, -478, 362, 361, -226, -482, -226, - 523, 525, 524, 526, 256, -226, -226, -226, 523, -226, - -226, -226, -226, -226, -482, 430, -482, -478, -482, -76, - -73, -482, -84, -81, -478, -429, -478, -226, 433, -478, - -482, -319, -429, -478, 525, 524, 528, -479, -319, 479, - 217, -226, 481, -226, -479, -226, -226, -319, -482, -479, - 101, -478, -226, -479, 438, 100, -428, 256, -226, 393, - 525, 524, 529, -428, 197, 198, 394, -482, 525, 524, - 534, -479, 214, 101, -482, 395, 216, 215, 100, -478, - -226, -427, 657, -482, 655, 654, 653, 656, -427, -478, - -478, -478, -60, -478, -226, 101, -226, -478, -478, -226, - 100, -482, -478, 453, -478, -478, -478, -478, -478, -478, - -478, 479, 197, 198, 484, -478, -478, -478, -478, -478, - -478, -478, 217, 736, 608, -424, -425, 661, 660, 664, - 663, -478, -424, -425, -478, -478, -478, -478, -478, -478, - -478, -478, -478, -478, -426, -478, -478, -478, -478, -478, - -430, -426, 664, 663, 214, 459, 518, -430, 216, 215, - 212, 213, 460, 519, 479, 454, -430, 481, 455, -478, - 694, 458, -478, -478, 461, -478, -478, 736, 608, -478, - -271, -478, 265, -478, 293, -478, 657, -271, 655, 654, - 653, 656, 256, -478, 466, 467, -271, 217, -478, -478, - -478, -478, -478, -478, 473, 474, 293, -478, -478, -479, - -479, -479, 217, -479, 483, 486, -83, -479, -479, 353, - 502, 503, -479, 647, -479, -479, -479, -479, -479, -479, - -479, 661, 660, 664, 663, -479, -479, -479, -479, -479, - -479, -479, 217, 537, 214, 538, 540, -259, 216, 215, - 542, -479, 256, 217, -479, -479, -479, -479, -479, -479, - -479, -479, -479, -479, 217, -479, -479, -479, -479, -479, - 468, 217, 217, 570, 214, 500, 577, 469, 216, 215, - 212, 213, 501, 293, 582, 236, 395, 592, 593, -479, - 551, 499, -479, -479, -69, -479, -479, 594, 471, -479, - 509, -479, 608, -479, 293, -479, 657, 507, 655, 654, - 653, 656, 618, -479, 498, 626, 508, 674, -479, -479, - -479, -479, -479, -479, 677, -278, 438, -479, -479, 67, - 68, 64, -278, 51, 438, 695, -85, 56, 57, 706, - 433, -278, 60, 433, 58, 59, 61, 23, 24, 65, - 66, 661, 660, 664, 663, 22, 28, 27, 90, 89, - 91, 92, 669, 670, 17, 671, 95, 96, 245, 539, - 709, 41, 710, 717, 94, 93, 84, 50, 86, 85, - 88, 87, 95, 96, 719, 82, 83, 38, 39, 37, - 217, 221, 226, 227, 228, 223, 225, 233, 234, 229, - 230, -278, 210, 211, -279, 723, 231, 232, -278, 202, - 256, -279, 206, 256, 217, 52, 53, -278, 217, 54, - -279, 726, 214, -259, 220, 40, 216, 215, 212, 213, - 224, 222, 218, 18, 219, 730, 732, 608, 81, 74, - 76, 77, 78, 79, 740, 741, 742, 75, 80, 745, - 101, 235, 747, -215, -277, 100, 67, 68, 64, 7, - 51, -277, 751, 755, 56, 57, -479, 757, 760, 60, - -277, 58, 59, 61, 23, 24, 65, 66, 761, 762, - 763, 765, 22, 28, 27, 90, 89, 91, 92, -260, - 771, 17, 103, 104, 105, 106, 107, 6, 41, 8, - 9, 94, 93, 84, 50, 86, 85, 88, 87, 95, - 96, -277, 82, 83, 38, 39, 37, -430, -277, 825, - 779, -271, -278, -479, -430, -279, 826, -277, -271, -278, - 780, 570, -279, -430, 570, 824, 36, -271, -278, 30, - 256, -279, 52, 53, 256, 236, 54, -277, 32, 570, - 792, 793, 40, 657, -277, 655, 654, 653, 656, -479, - 18, 794, 799, -277, 801, 81, 74, 76, 77, 78, - 79, 807, 809, 293, 75, 80, 67, 68, 64, 820, - 51, 827, 353, 828, 56, 57, 829, 831, 832, 60, - 647, 58, 59, 61, 248, 249, 65, 66, 661, 660, - 664, 663, 247, 277, 281, 90, 89, 91, 92, 103, - 104, 105, 106, 107, 834, 837, 841, 842, 278, 848, - 849, 94, 93, 84, 50, 86, 85, 88, 87, 95, - 96, 850, 82, 83, 760, 760, 282, 217, 221, 226, - 227, 228, 223, 225, 233, 234, 229, 230, 761, -499, - -499, 863, 570, 231, 232, 570, 774, 473, 876, 206, - 877, 878, 52, 53, 882, 885, 54, 760, 887, 214, - 888, 220, 570, 216, 215, 212, 213, 224, 222, 218, - 570, 219, 570, nil, nil, 81, 74, 76, 77, 78, - 79, nil, nil, nil, 75, 80, nil, 67, 68, 64, - 777, 51, nil, nil, nil, 56, 57, nil, nil, nil, - 60, nil, 58, 59, 61, 248, 249, 65, 66, nil, - nil, nil, nil, 247, 277, 281, 90, 89, 91, 92, - 103, 104, 105, 106, 107, nil, nil, 539, nil, 278, - nil, nil, 94, 93, 84, 50, 86, 85, 88, 87, - 95, 96, nil, 82, 83, nil, nil, 282, 217, 221, - 226, 227, 228, 223, 225, 233, 234, 229, 230, nil, - 210, 211, nil, nil, 231, 232, nil, 774, nil, nil, - 206, nil, nil, 52, 53, nil, nil, 54, nil, nil, - 214, nil, 220, nil, 216, 215, 212, 213, 224, 222, - 218, nil, 219, nil, nil, nil, 81, 74, 76, 77, - 78, 79, nil, nil, nil, 75, 80, nil, nil, 235, - nil, 857, 5, 67, 68, 64, 7, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 23, 24, 65, 66, nil, nil, nil, nil, 22, - 28, 27, 90, 89, 91, 92, nil, nil, 17, nil, - nil, nil, nil, nil, 6, 41, 8, 9, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, 38, 39, 37, 217, 221, 226, 227, 228, 223, - 225, 233, 234, 229, 230, nil, -499, -499, nil, nil, - 231, 232, nil, 36, nil, nil, 30, nil, nil, 52, - 53, nil, nil, 54, nil, 32, 214, nil, 220, 40, - 216, 215, 212, 213, 224, 222, 218, 18, 219, nil, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 5, 67, 68, 64, 7, 51, nil, - nil, nil, 56, 57, nil, nil, nil, 60, nil, 58, - 59, 61, 23, 24, 65, 66, nil, nil, nil, nil, - 22, 28, 27, 90, 89, 91, 92, nil, nil, 17, - nil, nil, nil, nil, nil, 6, 41, 8, 9, 94, - 93, 84, 50, 86, 85, 88, 87, 95, 96, nil, - 82, 83, 38, 39, 37, 217, -499, -499, -499, -499, - 223, 225, nil, nil, -499, -499, nil, nil, nil, nil, - nil, 231, 232, nil, 36, nil, nil, 267, nil, nil, - 52, 53, nil, nil, 54, nil, 32, 214, nil, 220, - 40, 216, 215, 212, 213, 224, 222, 218, 18, 219, - nil, nil, nil, 81, 74, 76, 77, 78, 79, nil, - nil, nil, 75, 80, 5, 67, 68, 64, 7, 51, - nil, nil, nil, 56, 57, nil, nil, nil, 60, nil, - 58, 59, 61, 23, 24, 65, 66, nil, nil, nil, - nil, 22, 28, 27, 90, 89, 91, 92, nil, nil, - 17, nil, nil, nil, nil, nil, 6, 41, 8, 9, - 94, 93, 84, 50, 86, 85, 88, 87, 95, 96, - nil, 82, 83, 38, 39, 37, 217, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 231, 232, nil, 36, nil, nil, 30, nil, - nil, 52, 53, nil, nil, 54, nil, 32, 214, nil, - 220, 40, 216, 215, 212, 213, nil, nil, 218, 18, - 219, nil, nil, nil, 81, 74, 76, 77, 78, 79, - nil, nil, nil, 75, 80, 5, 67, 68, 64, 7, - 51, nil, nil, nil, 56, 57, nil, nil, nil, 60, - nil, 58, 59, 61, 23, 24, 65, 66, nil, nil, - nil, nil, 22, 28, 27, 90, 89, 91, 92, nil, - nil, 17, nil, nil, nil, nil, nil, 6, 41, 8, - 9, 94, 93, 84, 50, 86, 85, 88, 87, 95, - 96, nil, 82, 83, 38, 39, 37, 217, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 231, 232, nil, 36, nil, nil, 30, - nil, nil, 52, 53, nil, nil, 54, nil, 32, 214, - nil, 220, 40, 216, 215, 212, 213, nil, nil, 218, - 18, 219, nil, nil, nil, 81, 74, 76, 77, 78, - 79, nil, nil, nil, 75, 80, 5, 67, 68, 64, - 7, 51, nil, nil, nil, 56, 57, nil, nil, nil, - 60, nil, 58, 59, 61, 23, 24, 65, 66, nil, - nil, nil, nil, 22, 28, 27, 90, 89, 91, 92, - nil, nil, 17, nil, nil, nil, nil, nil, 6, 41, - 8, 9, 94, 93, 84, 50, 86, 85, 88, 87, - 95, 96, nil, 82, 83, 38, 39, 37, 217, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 231, 232, nil, 36, nil, nil, - 30, nil, nil, 52, 53, nil, nil, 54, nil, 32, - 214, nil, 220, 40, 216, 215, 212, 213, nil, nil, - 218, 18, 219, nil, nil, nil, 81, 74, 76, 77, - 78, 79, nil, nil, nil, 75, 80, 5, 67, 68, - 64, 7, 51, nil, nil, nil, 56, 57, nil, nil, - nil, 60, nil, 58, 59, 61, 23, 24, 65, 66, - nil, nil, nil, nil, 22, 28, 27, 90, 89, 91, - 92, nil, nil, 17, nil, nil, nil, nil, nil, 6, - 41, 8, 9, 94, 93, 84, 50, 86, 85, 88, - 87, 95, 96, nil, 82, 83, 38, 39, 37, 217, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 231, 232, nil, 36, nil, - nil, 30, nil, nil, 52, 53, nil, nil, 54, nil, - 32, 214, nil, 220, 40, 216, 215, 212, 213, nil, - nil, 218, 18, 219, nil, nil, nil, 81, 74, 76, - 77, 78, 79, nil, nil, nil, 75, 80, 5, 67, - 68, 64, 7, 51, nil, nil, nil, 56, 57, nil, - nil, nil, 60, nil, 58, 59, 61, 23, 24, 65, - 66, nil, nil, nil, nil, 22, 28, 27, 90, 89, - 91, 92, nil, nil, 17, nil, nil, nil, nil, nil, - 6, 41, 8, 9, 94, 93, 84, 50, 86, 85, - 88, 87, 95, 96, nil, 82, 83, 38, 39, 37, - 217, -499, -499, -499, -499, 223, 225, nil, nil, -499, - -499, nil, nil, nil, nil, nil, 231, 232, nil, 36, - nil, nil, 267, nil, nil, 52, 53, nil, nil, 54, - nil, 32, 214, nil, 220, 40, 216, 215, 212, 213, - 224, 222, 218, 18, 219, nil, nil, nil, 81, 74, - 76, 77, 78, 79, nil, nil, nil, 75, 80, 5, - 67, 68, 64, 7, 51, nil, nil, nil, 56, 57, - nil, nil, nil, 60, nil, 58, 59, 61, 23, 24, - 65, 66, nil, nil, nil, nil, 22, 28, 27, 90, - 89, 91, 92, nil, nil, 17, nil, nil, nil, nil, - nil, 6, 41, 8, 9, 94, 93, 84, 50, 86, - 85, 88, 87, 95, 96, nil, 82, 83, 38, 39, - 37, 217, -499, -499, -499, -499, 223, 225, nil, nil, - -499, -499, nil, nil, nil, nil, nil, 231, 232, nil, - 36, nil, nil, 267, nil, nil, 52, 53, nil, nil, - 54, nil, 32, 214, nil, 220, 40, 216, 215, 212, - 213, 224, 222, 218, 18, 219, nil, nil, nil, 81, - 74, 76, 77, 78, 79, nil, nil, nil, 75, 80, - 5, 67, 68, 64, 7, 51, nil, nil, nil, 56, - 57, nil, nil, nil, 60, nil, 58, 59, 61, 23, - 24, 65, 66, nil, nil, nil, nil, 22, 28, 27, - 90, 89, 91, 92, nil, nil, 17, nil, nil, nil, - nil, nil, 6, 41, 8, 9, 94, 93, 84, 50, - 86, 85, 88, 87, 95, 96, nil, 82, 83, 38, - 39, 37, 217, -499, -499, -499, -499, 223, 225, nil, - nil, -499, -499, nil, nil, nil, nil, nil, 231, 232, - nil, 36, nil, nil, 30, nil, nil, 52, 53, nil, - nil, 54, nil, 32, 214, nil, 220, 40, 216, 215, - 212, 213, 224, 222, 218, 18, 219, nil, nil, nil, - 81, 74, 76, 77, 78, 79, nil, nil, nil, 75, - 80, 5, 67, 68, 64, 7, 51, nil, nil, nil, - 56, 57, nil, nil, nil, 60, nil, 58, 59, 61, - 23, 24, 65, 66, nil, nil, nil, nil, 22, 28, - 27, 90, 89, 91, 92, nil, nil, 17, nil, nil, - nil, nil, nil, 6, 41, 8, 9, 94, 93, 84, - 50, 86, 85, 88, 87, 95, 96, nil, 82, 83, - 38, 39, 37, 217, -499, -499, -499, -499, 223, 225, - nil, nil, -499, -499, nil, nil, nil, nil, nil, 231, - 232, nil, 36, nil, nil, 30, nil, nil, 52, 53, - nil, nil, 54, nil, 32, 214, nil, 220, 40, 216, - 215, 212, 213, 224, 222, 218, 18, 219, nil, nil, - nil, 81, 74, 76, 77, 78, 79, nil, nil, nil, - 75, 80, 5, 67, 68, 64, 7, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 23, 24, 65, 66, nil, nil, nil, nil, 22, - 28, 27, 90, 89, 91, 92, nil, nil, 17, nil, - nil, nil, nil, nil, 6, 41, 8, 9, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, 38, 39, 37, 217, -499, -499, -499, -499, 223, - 225, nil, nil, -499, -499, nil, nil, nil, nil, nil, - 231, 232, nil, 36, nil, nil, 30, nil, nil, 52, - 53, nil, nil, 54, nil, 32, 214, nil, 220, 40, - 216, 215, 212, 213, 224, 222, 218, 18, 219, nil, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 5, 67, 68, 64, 7, 51, nil, - nil, nil, 56, 57, nil, nil, nil, 60, nil, 58, - 59, 61, 23, 24, 65, 66, nil, nil, nil, nil, - 22, 28, 27, 90, 89, 91, 92, nil, nil, 17, - nil, nil, nil, nil, nil, 6, 41, 8, 9, 94, - 93, 84, 50, 86, 85, 88, 87, 95, 96, nil, - 82, 83, 38, 39, 37, 217, 221, 226, 227, 228, - 223, 225, nil, nil, 229, 230, nil, nil, nil, nil, - nil, 231, 232, nil, 36, nil, nil, 30, nil, nil, - 52, 53, nil, nil, 54, nil, 32, 214, nil, 220, - 40, 216, 215, 212, 213, 224, 222, 218, 18, 219, - nil, nil, nil, 81, 74, 76, 77, 78, 79, nil, - nil, nil, 75, 80, 5, 67, 68, 64, 7, 51, - nil, nil, nil, 56, 57, nil, nil, nil, 60, nil, - 58, 59, 61, 23, 24, 65, 66, nil, nil, nil, - nil, 22, 28, 27, 90, 89, 91, 92, nil, nil, - 17, nil, nil, nil, nil, nil, 6, 41, 8, 9, - 94, 93, 84, 50, 86, 85, 88, 87, 95, 96, - nil, 82, 83, 38, 39, 37, 217, 221, 226, 227, - 228, 223, 225, 233, nil, 229, 230, nil, nil, nil, - nil, nil, 231, 232, nil, 36, nil, nil, 30, nil, - nil, 52, 53, nil, nil, 54, nil, 32, 214, nil, - 220, 40, 216, 215, 212, 213, 224, 222, 218, 18, - 219, nil, nil, nil, 81, 74, 76, 77, 78, 79, - nil, nil, nil, 75, 80, 5, 67, 68, 64, 7, - 51, nil, nil, nil, 56, 57, nil, nil, nil, 60, - nil, 58, 59, 61, 23, 24, 65, 66, nil, nil, - nil, nil, 22, 28, 27, 90, 89, 91, 92, nil, - nil, 17, nil, nil, nil, nil, nil, 6, 41, 8, - 9, 94, 93, 84, 50, 86, 85, 88, 87, 95, - 96, nil, 82, 83, 38, 39, 37, 217, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 231, 232, nil, 36, nil, nil, 30, - nil, nil, 52, 53, nil, nil, 54, nil, 32, 214, - nil, 220, 40, 216, 215, 212, 213, nil, nil, nil, - 18, nil, nil, nil, nil, 81, 74, 76, 77, 78, - 79, nil, nil, nil, 75, 80, 5, 67, 68, 64, - 7, 51, nil, nil, nil, 56, 57, nil, nil, nil, - 60, nil, 58, 59, 61, 23, 24, 65, 66, nil, - nil, nil, nil, 22, 28, 27, 90, 89, 91, 92, - nil, nil, 17, nil, nil, nil, nil, nil, 6, 41, - 8, 9, 94, 93, 84, 50, 86, 85, 88, 87, - 95, 96, nil, 82, 83, 38, 39, 37, 217, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 231, 232, nil, 36, nil, nil, - 30, nil, nil, 52, 53, nil, nil, 54, nil, 32, - 214, nil, 220, 40, 216, 215, 212, 213, nil, nil, - nil, 18, nil, nil, nil, nil, 81, 74, 76, 77, - 78, 79, nil, nil, nil, 75, 80, 5, 67, 68, - 64, 7, 51, nil, nil, nil, 56, 57, nil, nil, - nil, 60, nil, 58, 59, 61, 23, 24, 65, 66, - nil, nil, nil, nil, 22, 28, 27, 90, 89, 91, - 92, nil, nil, 17, nil, nil, nil, nil, nil, 6, - 41, 8, 9, 94, 93, 84, 50, 86, 85, 88, - 87, 95, 96, nil, 82, 83, 38, 39, 37, 217, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 231, 232, nil, 36, nil, - nil, 30, nil, nil, 52, 53, nil, nil, 54, nil, - 32, 214, nil, nil, 40, 216, 215, 212, 213, nil, - nil, nil, 18, nil, nil, nil, nil, 81, 74, 76, - 77, 78, 79, nil, nil, nil, 75, 80, 5, 67, - 68, 64, 7, 51, nil, nil, nil, 56, 57, nil, - nil, nil, 60, nil, 58, 59, 61, 23, 24, 65, - 66, nil, nil, nil, nil, 22, 28, 27, 90, 89, - 91, 92, nil, nil, 17, nil, nil, nil, nil, nil, - 6, 41, 8, 9, 94, 93, 84, 50, 86, 85, - 88, 87, 95, 96, nil, 82, 83, 38, 39, 37, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 36, - nil, nil, 30, nil, nil, 52, 53, nil, nil, 54, - nil, 32, nil, nil, nil, 40, nil, nil, nil, nil, - nil, nil, nil, 18, nil, nil, nil, nil, 81, 74, - 76, 77, 78, 79, nil, nil, nil, 75, 80, 5, - 67, 68, 64, 7, 51, nil, nil, nil, 56, 57, - nil, nil, nil, 60, nil, 58, 59, 61, 23, 24, - 65, 66, nil, nil, nil, nil, 22, 28, 27, 90, - 89, 91, 92, nil, nil, 17, nil, nil, nil, nil, - nil, 6, 41, 8, 9, 94, 93, 84, 50, 86, - 85, 88, 87, 95, 96, nil, 82, 83, 38, 39, - 37, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 36, nil, nil, 30, nil, nil, 52, 53, nil, nil, - 54, nil, 32, nil, nil, nil, 40, nil, nil, nil, - nil, nil, nil, nil, 18, nil, nil, nil, nil, 81, - 74, 76, 77, 78, 79, nil, nil, nil, 75, 80, - 5, 67, 68, 64, 7, 51, nil, nil, nil, 56, - 57, nil, nil, nil, 60, nil, 58, 59, 61, 23, - 24, 65, 66, nil, nil, nil, nil, 22, 28, 27, - 90, 89, 91, 92, nil, nil, 17, nil, nil, nil, - nil, nil, 6, 41, 8, 9, 94, 93, 84, 50, - 86, 85, 88, 87, 95, 96, nil, 82, 83, 38, - 39, 37, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 36, nil, nil, 30, nil, nil, 52, 53, nil, - nil, 54, nil, 32, nil, nil, nil, 40, nil, nil, - nil, nil, nil, nil, nil, 18, nil, nil, nil, nil, - 81, 74, 76, 77, 78, 79, nil, nil, nil, 75, - 80, 5, 67, 68, 64, 7, 51, nil, nil, nil, - 56, 57, nil, nil, nil, 60, nil, 58, 59, 61, - 23, 24, 65, 66, nil, nil, nil, nil, 22, 28, - 27, 90, 89, 91, 92, nil, nil, 17, nil, nil, - nil, nil, nil, 6, 41, 8, 9, 94, 93, 84, - 50, 86, 85, 88, 87, 95, 96, nil, 82, 83, - 38, 39, 37, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 36, nil, nil, 30, nil, nil, 52, 53, - nil, nil, 54, nil, 32, nil, nil, nil, 40, nil, - nil, nil, nil, nil, nil, nil, 18, nil, nil, nil, - nil, 81, 74, 76, 77, 78, 79, nil, nil, nil, - 75, 80, 5, 67, 68, 64, 7, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 23, 24, 65, 66, nil, nil, nil, nil, 22, - 28, 27, 90, 89, 91, 92, nil, nil, 17, nil, - nil, nil, nil, nil, 6, 41, 8, 9, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, 38, 39, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 36, nil, nil, 30, nil, nil, 52, - 53, nil, nil, 54, nil, 32, nil, nil, nil, 40, - nil, nil, nil, nil, nil, nil, nil, 18, nil, nil, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 5, 67, 68, 64, 7, 51, nil, - nil, nil, 56, 57, nil, nil, nil, 60, nil, 58, - 59, 61, 23, 24, 65, 66, nil, nil, nil, nil, - 22, 28, 27, 90, 89, 91, 92, nil, nil, 17, - nil, nil, nil, nil, nil, 6, 41, 8, 9, 94, - 93, 84, 50, 86, 85, 88, 87, 95, 96, nil, - 82, 83, 38, 39, 37, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 36, nil, nil, 30, nil, nil, - 52, 53, nil, nil, 54, nil, 32, nil, nil, nil, - 40, nil, nil, nil, nil, nil, nil, nil, 18, nil, - nil, nil, nil, 81, 74, 76, 77, 78, 79, nil, - nil, nil, 75, 80, 5, 67, 68, 64, 7, 51, - nil, nil, nil, 56, 57, nil, nil, nil, 60, nil, - 58, 59, 61, 23, 24, 65, 66, nil, nil, nil, - nil, 22, 28, 27, 90, 89, 91, 92, nil, nil, - 17, nil, nil, nil, nil, nil, 6, 41, 8, 9, - 94, 93, 84, 50, 86, 85, 88, 87, 95, 96, - nil, 82, 83, 38, 39, 37, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 36, nil, nil, 30, nil, - nil, 52, 53, nil, nil, 54, nil, 32, nil, nil, - nil, 40, nil, nil, nil, nil, nil, nil, nil, 18, - nil, nil, nil, nil, 81, 74, 76, 77, 78, 79, - nil, nil, nil, 75, 80, 5, 67, 68, 64, 7, - 51, nil, nil, nil, 56, 57, nil, nil, nil, 60, - nil, 58, 59, 61, 23, 24, 65, 66, nil, nil, - nil, nil, 22, 28, 27, 90, 89, 91, 92, nil, - nil, 17, nil, nil, nil, nil, nil, 6, 41, 8, - 9, 94, 93, 84, 50, 86, 85, 88, 87, 95, - 96, nil, 82, 83, 38, 39, 37, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 36, nil, nil, 30, - nil, nil, 52, 53, nil, nil, 54, nil, 32, nil, - nil, nil, 40, nil, nil, nil, nil, nil, nil, nil, - 18, nil, nil, nil, nil, 81, 74, 76, 77, 78, - 79, nil, nil, nil, 75, 80, 5, 67, 68, 64, - 7, 51, nil, nil, nil, 56, 57, nil, nil, nil, - 60, nil, 58, 59, 61, 23, 24, 65, 66, nil, - nil, nil, nil, 22, 28, 27, 90, 89, 91, 92, - nil, nil, 17, nil, nil, nil, nil, nil, 6, 41, - 8, 9, 94, 93, 84, 50, 86, 85, 88, 87, - 95, 96, nil, 82, 83, 38, 39, 37, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 36, nil, nil, - 30, nil, nil, 52, 53, nil, nil, 54, nil, 32, - nil, nil, nil, 40, nil, nil, nil, nil, nil, nil, - nil, 18, nil, nil, nil, nil, 81, 74, 76, 77, - 78, 79, nil, nil, nil, 75, 80, 5, 67, 68, - 64, 7, 51, nil, nil, nil, 56, 57, nil, nil, - nil, 60, nil, 58, 59, 61, 23, 24, 65, 66, - nil, nil, nil, nil, 22, 28, 27, 90, 89, 91, - 92, nil, nil, 17, nil, nil, nil, nil, nil, 6, - 41, 8, 9, 94, 93, 84, 50, 86, 85, 88, - 87, 95, 96, nil, 82, 83, 38, 39, 37, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 36, nil, - nil, 30, nil, nil, 52, 53, nil, nil, 54, nil, - 32, nil, nil, nil, 40, nil, nil, nil, nil, nil, - nil, nil, 18, nil, nil, nil, nil, 81, 74, 76, - 77, 78, 79, nil, nil, nil, 75, 80, 5, 67, - 68, 64, 7, 51, nil, nil, nil, 56, 57, nil, - nil, nil, 60, nil, 58, 59, 61, 23, 24, 65, - 66, nil, nil, nil, nil, 22, 28, 27, 90, 89, - 91, 92, nil, nil, 17, nil, nil, nil, nil, nil, - 6, 41, 8, 9, 94, 93, 84, 50, 86, 85, - 88, 87, 95, 96, nil, 82, 83, 38, 39, 37, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 36, - nil, nil, 30, nil, nil, 52, 53, nil, nil, 54, - nil, 32, nil, nil, nil, 40, nil, nil, nil, nil, - nil, nil, nil, 18, nil, nil, nil, nil, 81, 74, - 76, 77, 78, 79, nil, nil, nil, 75, 80, 5, - 67, 68, 64, 7, 51, nil, nil, nil, 56, 57, - nil, nil, nil, 60, nil, 58, 59, 61, 23, 24, - 65, 66, nil, nil, nil, nil, 22, 28, 27, 90, - 89, 91, 92, nil, nil, 17, nil, nil, nil, nil, - nil, 6, 41, 8, 9, 94, 93, 84, 50, 86, - 85, 88, 87, 95, 96, nil, 82, 83, 38, 39, - 37, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 36, nil, nil, 30, nil, nil, 52, 53, nil, nil, - 54, nil, 32, nil, nil, nil, 40, nil, nil, nil, - nil, nil, nil, nil, 18, nil, nil, nil, nil, 81, - 74, 76, 77, 78, 79, nil, nil, nil, 75, 80, - 5, 67, 68, 64, 7, 51, nil, nil, nil, 56, - 57, nil, nil, nil, 60, nil, 58, 59, 61, 23, - 24, 65, 66, nil, nil, nil, nil, 22, 28, 27, - 90, 89, 91, 92, nil, nil, 17, nil, nil, nil, - nil, nil, 6, 41, 8, 9, 94, 93, 84, 50, - 86, 85, 88, 87, 95, 96, nil, 82, 83, 38, - 39, 37, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 36, nil, nil, 30, nil, nil, 52, 53, nil, - nil, 54, nil, 32, nil, nil, nil, 40, nil, nil, - nil, nil, nil, nil, nil, 18, nil, nil, nil, nil, - 81, 74, 76, 77, 78, 79, nil, nil, nil, 75, - 80, 67, 68, 64, 7, 51, nil, nil, nil, 56, - 57, nil, nil, nil, 60, nil, 58, 59, 61, 23, - 24, 65, 66, nil, nil, nil, nil, 22, 28, 27, - 90, 89, 91, 92, nil, nil, 17, nil, nil, nil, - nil, nil, 6, 41, 8, 9, 94, 93, 84, 50, - 86, 85, 88, 87, 95, 96, nil, 82, 83, 38, - 39, 37, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 36, nil, nil, 30, nil, nil, 52, 53, nil, - nil, 54, nil, 32, nil, nil, nil, 40, nil, nil, - nil, nil, nil, nil, nil, 18, nil, nil, nil, nil, - 81, 74, 76, 77, 78, 79, nil, nil, nil, 75, - 80, 155, 166, 156, 179, 152, 172, 162, 161, 182, - 183, 177, 160, 159, 154, 180, 184, 185, 164, 153, - 167, 171, 173, 165, 158, nil, nil, 174, 181, 176, - 175, 168, 178, 163, 151, 170, 169, nil, nil, nil, - nil, nil, 150, 157, 148, 149, 146, 147, 111, 113, - 110, nil, 112, nil, nil, nil, nil, nil, nil, 141, - 142, nil, 139, 123, 124, 125, nil, 128, 130, nil, - nil, 126, nil, nil, nil, nil, 143, 144, 131, 132, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 136, 135, nil, 122, 140, 138, 137, - 133, 134, 129, 127, 120, nil, 121, nil, nil, 145, - 81, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 80, 155, 166, 156, 179, 152, 172, 162, 161, 182, - 183, 177, 160, 159, 154, 180, 184, 185, 164, 153, - 167, 171, 173, 165, 158, nil, nil, 174, 181, 176, - 175, 168, 178, 163, 151, 170, 169, nil, nil, nil, - nil, nil, 150, 157, 148, 149, 146, 147, 111, 113, - nil, nil, 112, nil, nil, nil, nil, nil, nil, 141, - 142, nil, 139, 123, 124, 125, nil, 128, 130, nil, - nil, 126, nil, nil, nil, nil, 143, 144, 131, 132, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 136, 135, nil, 122, 140, 138, 137, - 133, 134, 129, 127, 120, nil, 121, nil, nil, 145, - 81, nil, nil, 67, 68, 64, nil, 51, nil, nil, - 80, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 23, 24, 65, 66, nil, nil, nil, nil, 22, - 28, 27, 90, 89, 91, 92, nil, nil, 17, nil, - nil, nil, nil, nil, nil, 41, nil, nil, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, 38, 39, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 202, nil, nil, 206, nil, nil, 52, - 53, nil, nil, 54, nil, nil, nil, nil, nil, 40, - nil, nil, nil, nil, nil, nil, nil, 18, nil, nil, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 67, 68, 64, nil, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 23, 24, 65, 66, nil, nil, nil, nil, 22, - 28, 27, 90, 89, 91, 92, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 41, nil, nil, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, 38, 39, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 202, nil, nil, 206, nil, nil, 52, - 53, nil, nil, 54, nil, nil, nil, nil, nil, 40, - nil, nil, nil, nil, nil, nil, nil, 209, nil, nil, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 67, 68, 64, nil, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 248, 249, 65, 66, nil, nil, nil, nil, 247, - 28, 27, 90, 89, 91, 92, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 41, nil, nil, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, 38, 39, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 202, nil, nil, 206, nil, nil, 52, - 53, nil, nil, 54, nil, 243, nil, 245, nil, 40, - nil, nil, nil, nil, nil, nil, nil, 209, nil, nil, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 67, 68, 64, nil, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 248, 249, 65, 66, nil, nil, nil, nil, 247, - 28, 27, 90, 89, 91, 92, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 41, nil, nil, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, 38, 39, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 202, nil, nil, 206, nil, nil, 52, - 53, nil, nil, 54, nil, 243, nil, 245, nil, 40, - nil, nil, nil, nil, nil, nil, nil, 209, nil, nil, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 67, 68, 64, nil, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 248, 249, 65, 66, nil, nil, nil, nil, 247, - 28, 27, 90, 89, 91, 92, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 41, nil, nil, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, 38, 39, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 202, nil, nil, 206, nil, nil, 52, - 53, nil, nil, 54, nil, 243, nil, 245, nil, 40, - nil, nil, nil, nil, nil, nil, nil, 209, nil, nil, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, -249, -249, -249, nil, -249, nil, nil, - nil, -249, -249, nil, nil, nil, -249, nil, -249, -249, - -249, -249, -249, -249, -249, nil, nil, nil, nil, -249, - -249, -249, -249, -249, -249, -249, nil, nil, nil, nil, - nil, nil, nil, nil, nil, -249, nil, nil, -249, -249, - -249, -249, -249, -249, -249, -249, -249, -249, nil, -249, - -249, -249, -249, -249, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, -249, nil, nil, -249, 256, nil, -249, - -249, nil, nil, -249, nil, -249, nil, -249, nil, -249, - nil, nil, nil, nil, nil, nil, nil, -249, nil, nil, - nil, nil, -249, -249, -249, -249, -249, -249, nil, nil, - nil, -249, -249, -249, -249, -249, nil, -249, nil, nil, - nil, -249, -249, nil, nil, nil, -249, nil, -249, -249, - -249, -249, -249, -249, -249, nil, nil, nil, nil, -249, - -249, -249, -249, -249, -249, -249, nil, nil, nil, nil, - nil, nil, nil, nil, nil, -249, nil, nil, -249, -249, - -249, -249, -249, -249, -249, -249, -249, -249, nil, -249, - -249, -249, -249, -249, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, -249, nil, nil, -249, 265, nil, -249, - -249, nil, nil, -249, nil, -249, nil, -249, nil, -249, - nil, nil, nil, nil, nil, nil, nil, -249, nil, nil, - nil, nil, -249, -249, -249, -249, -249, -249, nil, nil, - nil, -249, -249, 67, 68, 64, nil, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 248, 249, 65, 66, nil, nil, nil, nil, 247, - 277, 281, 90, 89, 91, 92, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 278, nil, nil, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, nil, nil, 282, nil, 217, 221, 226, 227, 228, - 223, 225, 233, 234, 229, 230, nil, 210, 211, nil, - nil, 231, 232, 275, nil, nil, 272, nil, nil, 52, - 53, nil, nil, 54, nil, 271, nil, 214, nil, 220, - nil, 216, 215, 212, 213, 224, 222, 218, nil, 219, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 67, 68, 64, 235, 51, 570, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 248, 249, 65, 66, nil, nil, nil, nil, 247, - 277, 281, 90, 89, 91, 92, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 278, nil, nil, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, nil, nil, 282, nil, 217, 221, 226, 227, 228, - 223, 225, 233, 234, 229, 230, nil, 210, 211, nil, - nil, 231, 232, 275, nil, nil, 206, nil, nil, 52, - 53, nil, nil, 54, nil, nil, nil, 214, nil, 220, - nil, 216, 215, 212, 213, 224, 222, 218, nil, 219, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 67, 68, 64, 235, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 248, 249, 65, 66, nil, nil, nil, nil, 247, - 277, 281, 90, 89, 91, 92, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 41, nil, nil, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, 38, 39, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 202, nil, nil, 206, nil, nil, 52, - 53, nil, nil, 54, nil, nil, nil, nil, nil, 40, - nil, nil, nil, nil, nil, nil, nil, 209, nil, nil, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 67, 68, 64, nil, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 248, 249, 65, 66, nil, nil, nil, nil, 247, - 277, 281, 90, 89, 91, 92, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 41, nil, nil, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, 38, 39, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 202, nil, nil, 206, nil, nil, 52, - 53, nil, nil, 54, nil, nil, nil, nil, nil, 40, - nil, nil, nil, nil, nil, nil, nil, 209, nil, nil, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 67, 68, 64, nil, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 248, 249, 65, 66, nil, nil, nil, nil, 247, - 277, 281, 90, 89, 91, 92, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 41, nil, nil, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, 38, 39, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 202, nil, nil, 206, nil, nil, 52, - 53, nil, nil, 54, nil, nil, nil, nil, nil, 40, - nil, nil, nil, nil, nil, nil, nil, 209, nil, nil, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 67, 68, 64, nil, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 23, 24, 65, 66, nil, nil, nil, nil, 22, - 28, 27, 90, 89, 91, 92, nil, nil, 17, nil, - nil, nil, nil, nil, nil, 41, nil, nil, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, 38, 39, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 202, nil, nil, 206, nil, nil, 52, - 53, nil, nil, 54, nil, nil, nil, nil, nil, 40, - nil, nil, nil, nil, nil, nil, nil, 18, nil, nil, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 67, 68, 64, nil, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 248, 249, 65, 66, nil, nil, nil, nil, 247, - 28, 27, 90, 89, 91, 92, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 41, nil, nil, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, 38, 39, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 202, nil, nil, 206, nil, nil, 52, - 53, nil, nil, 54, nil, 301, nil, nil, nil, 40, - nil, nil, nil, nil, nil, nil, nil, 209, nil, nil, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 67, 68, 64, nil, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 248, 249, 65, 66, nil, nil, nil, nil, 247, - 277, 281, 90, 89, 91, 92, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 41, nil, nil, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, 38, 39, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 202, nil, nil, 206, nil, nil, 52, - 53, nil, nil, 54, nil, nil, nil, nil, nil, 40, - nil, nil, nil, nil, nil, nil, nil, 209, nil, nil, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 67, 68, 64, nil, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 23, 24, 65, 66, nil, nil, nil, nil, 22, - 28, 27, 90, 89, 91, 92, nil, nil, 17, nil, - nil, nil, nil, nil, nil, 41, nil, nil, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, 38, 39, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 202, nil, nil, 206, nil, nil, 52, - 53, nil, nil, 54, nil, nil, nil, nil, nil, 40, - nil, nil, nil, nil, nil, nil, nil, 18, nil, nil, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 67, 68, 64, nil, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 23, 24, 65, 66, nil, nil, nil, nil, 22, - 28, 27, 90, 89, 91, 92, nil, nil, 17, nil, - nil, nil, nil, nil, nil, 41, nil, nil, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, 38, 39, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 202, nil, nil, 206, nil, nil, 52, - 53, nil, nil, 54, nil, nil, nil, nil, nil, 40, - nil, nil, nil, nil, nil, nil, nil, 18, nil, nil, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 67, 68, 64, nil, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 248, 249, 65, 66, nil, nil, nil, nil, 247, - 277, 281, 90, 89, 91, 92, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 278, nil, nil, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, nil, nil, 282, nil, 217, 221, 226, 227, 228, - 223, 225, 233, 234, 229, 230, nil, 210, 211, nil, - nil, 231, 232, 317, nil, nil, 30, nil, nil, 52, - 53, nil, nil, 54, nil, 32, nil, 214, nil, 220, - nil, 216, 215, 212, 213, 224, 222, 218, nil, 219, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 67, 68, 64, 235, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 248, 249, 65, 66, nil, nil, nil, nil, 247, - 277, 281, 90, 89, 91, 92, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 278, nil, nil, 94, 93, - 322, 50, 86, 85, 323, 87, 95, 96, nil, 82, - 83, nil, nil, 282, nil, 217, 221, 226, 227, 228, - 223, 225, 233, 234, 229, 230, nil, 210, 211, nil, - 329, 231, 232, 324, nil, nil, 206, nil, nil, 52, - 53, nil, nil, 54, nil, nil, nil, 214, nil, 220, - nil, 216, 215, 212, 213, 224, 222, 218, nil, 219, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 67, 68, 64, 235, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 248, 249, 65, 66, nil, nil, nil, nil, 247, - 277, 281, 90, 89, 91, 92, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 278, nil, nil, 94, 93, - 322, 50, 86, 85, 323, 87, 95, 96, nil, 82, - 83, nil, nil, 282, nil, 217, 221, 226, 227, 228, - 223, 225, 233, 234, 229, 230, nil, 210, 211, nil, - nil, 231, 232, 324, nil, nil, 206, nil, nil, 52, - 53, nil, nil, 54, nil, nil, nil, 214, nil, 220, - nil, 216, 215, 212, 213, 224, 222, 218, nil, 219, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, -475, -475, -475, 235, -475, nil, nil, - nil, -475, -475, nil, nil, nil, -475, nil, -475, -475, - -475, -475, -475, -475, -475, nil, -475, nil, nil, -475, - -475, -475, -475, -475, -475, -475, nil, nil, nil, nil, - nil, nil, nil, nil, nil, -475, nil, nil, -475, -475, - -475, -475, -475, -475, -475, -475, -475, -475, nil, -475, - -475, -475, -475, -475, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, -475, nil, nil, -475, -475, nil, -475, - -475, nil, nil, -475, nil, -475, nil, -475, nil, -475, - nil, nil, nil, nil, nil, nil, nil, -475, nil, -475, - nil, nil, -475, -475, -475, -475, -475, -475, nil, nil, - nil, -475, -475, -476, -476, -476, nil, -476, nil, nil, - nil, -476, -476, nil, nil, nil, -476, nil, -476, -476, - -476, -476, -476, -476, -476, nil, -476, nil, nil, -476, - -476, -476, -476, -476, -476, -476, nil, nil, nil, nil, - nil, nil, nil, nil, nil, -476, nil, nil, -476, -476, - -476, -476, -476, -476, -476, -476, -476, -476, nil, -476, - -476, -476, -476, -476, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, -476, nil, nil, -476, -476, nil, -476, - -476, nil, nil, -476, nil, -476, nil, -476, nil, -476, - nil, nil, nil, nil, nil, nil, nil, -476, nil, -476, - nil, nil, -476, -476, -476, -476, -476, -476, nil, nil, - nil, -476, -476, 67, 68, 64, nil, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 23, 24, 65, 66, nil, nil, nil, nil, 22, - 28, 27, 90, 89, 91, 92, nil, nil, 17, nil, - nil, nil, nil, nil, nil, 41, nil, nil, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, 38, 39, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 202, nil, nil, 206, nil, nil, 52, - 53, nil, nil, 54, nil, nil, nil, nil, nil, 40, - nil, nil, nil, nil, nil, nil, nil, 18, nil, nil, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 67, 68, 64, nil, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 23, 24, 65, 66, nil, nil, nil, nil, 22, - 28, 27, 90, 89, 91, 92, nil, nil, 17, nil, - nil, nil, nil, nil, nil, 41, nil, nil, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, 38, 39, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 202, nil, nil, 206, nil, nil, 52, - 53, nil, nil, 54, nil, nil, nil, nil, nil, 40, - nil, nil, nil, nil, nil, nil, nil, 18, nil, nil, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 67, 68, 64, nil, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 23, 24, 65, 66, nil, nil, nil, nil, 22, - 28, 27, 90, 89, 91, 92, nil, nil, 17, nil, - nil, nil, nil, nil, nil, 41, nil, nil, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, 38, 39, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 202, nil, nil, 206, nil, nil, 52, - 53, nil, nil, 54, nil, nil, nil, nil, nil, 40, - nil, nil, nil, nil, nil, nil, nil, 18, nil, nil, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 67, 68, 64, nil, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 23, 24, 65, 66, nil, nil, nil, nil, 22, - 28, 27, 90, 89, 91, 92, nil, nil, 17, nil, - nil, nil, nil, nil, nil, 41, nil, nil, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, 38, 39, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 202, nil, nil, 206, nil, nil, 52, - 53, nil, nil, 54, nil, nil, nil, nil, nil, 40, - nil, nil, nil, nil, nil, nil, nil, 18, nil, nil, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 67, 68, 64, 7, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 23, 24, 65, 66, nil, nil, nil, nil, 22, - 28, 27, 90, 89, 91, 92, nil, nil, 17, nil, - nil, nil, nil, nil, 6, 41, 8, 9, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, 38, 39, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 36, nil, nil, 30, nil, nil, 52, - 53, nil, nil, 54, nil, 32, nil, nil, nil, 40, - nil, nil, nil, nil, nil, nil, nil, 18, nil, nil, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 67, 68, 64, nil, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 23, 24, 65, 66, nil, nil, nil, nil, 22, - 28, 27, 90, 89, 91, 92, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 41, nil, nil, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, 38, 39, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 202, nil, nil, 206, nil, nil, 52, - 53, nil, nil, 54, nil, 371, nil, nil, nil, 40, - nil, nil, nil, nil, nil, nil, nil, 209, nil, nil, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 67, 68, 64, nil, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 23, 24, 65, 66, nil, nil, nil, nil, 22, - 28, 27, 90, 89, 91, 92, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 41, nil, nil, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, 38, 39, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 202, nil, nil, 206, nil, nil, 52, - 53, nil, nil, 54, nil, 371, nil, nil, nil, 40, - nil, nil, nil, nil, nil, nil, nil, 209, nil, nil, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 67, 68, 64, nil, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 23, 24, 65, 66, nil, nil, nil, nil, 22, - 28, 27, 90, 89, 91, 92, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 41, nil, nil, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, 38, 39, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 202, nil, nil, 206, nil, nil, 52, - 53, nil, nil, 54, nil, nil, nil, nil, nil, 40, - nil, nil, nil, nil, nil, nil, nil, 209, nil, nil, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 67, 68, 64, nil, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 248, 249, 65, 66, nil, nil, nil, nil, 247, - 28, 27, 90, 89, 91, 92, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 41, nil, nil, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, 38, 39, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 202, nil, nil, 206, nil, nil, 52, - 53, nil, nil, 54, nil, 301, nil, nil, nil, 40, - nil, nil, nil, nil, nil, nil, nil, 209, nil, nil, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 67, 68, 64, nil, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 23, 24, 65, 66, nil, nil, nil, nil, 22, - 28, 27, 90, 89, 91, 92, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 41, nil, nil, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, 38, 39, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 202, nil, nil, 206, nil, nil, 52, - 53, nil, nil, 54, nil, nil, nil, nil, nil, 40, - nil, nil, nil, nil, nil, nil, nil, 209, nil, nil, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 67, 68, 64, nil, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 23, 24, 65, 66, nil, nil, nil, nil, 22, - 28, 27, 90, 89, 91, 92, nil, nil, 17, nil, - nil, nil, nil, nil, nil, 41, nil, nil, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, 38, 39, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 202, nil, nil, 206, nil, nil, 52, - 53, nil, nil, 54, nil, nil, nil, nil, nil, 40, - nil, nil, nil, nil, nil, nil, nil, 18, nil, nil, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 67, 68, 64, nil, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 23, 24, 65, 66, nil, nil, nil, nil, 22, - 28, 27, 90, 89, 91, 92, nil, nil, 17, nil, - nil, nil, nil, nil, nil, 41, nil, nil, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, 38, 39, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 202, nil, nil, 206, nil, nil, 52, - 53, nil, nil, 54, nil, nil, nil, nil, nil, 40, - nil, nil, nil, nil, nil, nil, nil, 18, nil, nil, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 67, 68, 64, nil, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 248, 249, 65, 66, nil, nil, nil, nil, 247, - 277, 281, 90, 89, 91, 92, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 41, nil, nil, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, 38, 39, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 202, nil, nil, 206, nil, nil, 52, - 53, nil, nil, 54, nil, nil, nil, nil, nil, 40, - nil, nil, nil, nil, nil, nil, nil, 209, nil, nil, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 67, 68, 64, nil, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 248, 249, 65, 66, nil, nil, nil, nil, 247, - 277, 281, 90, 89, 91, 92, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 41, nil, nil, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, 38, 39, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 202, nil, nil, 206, nil, nil, 52, - 53, nil, nil, 54, nil, nil, nil, nil, nil, 40, - nil, nil, nil, nil, nil, nil, nil, 209, nil, nil, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 67, 68, 64, nil, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 248, 249, 65, 66, nil, nil, nil, nil, 247, - 277, 281, 90, 89, 91, 92, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 41, nil, nil, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, 38, 39, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 202, nil, nil, 206, nil, nil, 52, - 53, nil, nil, 54, nil, nil, nil, nil, nil, 40, - nil, nil, nil, nil, nil, nil, nil, 209, nil, nil, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 67, 68, 64, nil, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 248, 249, 65, 66, nil, nil, nil, nil, 247, - 277, 281, 90, 89, 91, 92, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 41, nil, nil, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, 38, 39, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 202, nil, nil, 206, nil, nil, 52, - 53, nil, nil, 54, nil, nil, nil, nil, nil, 40, - nil, nil, nil, nil, nil, nil, nil, 209, nil, nil, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 67, 68, 64, nil, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 248, 249, 65, 66, nil, nil, nil, nil, 247, - 277, 281, 90, 89, 91, 92, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 41, nil, nil, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, 38, 39, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 202, nil, nil, 206, nil, nil, 52, - 53, nil, nil, 54, nil, nil, nil, nil, nil, 40, - nil, nil, nil, nil, nil, nil, nil, 209, nil, nil, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 67, 68, 64, nil, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 248, 249, 65, 66, nil, nil, nil, nil, 247, - 277, 281, 90, 89, 91, 92, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 41, nil, nil, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, 38, 39, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 202, nil, nil, 206, nil, nil, 52, - 53, nil, nil, 54, nil, nil, nil, nil, nil, 40, - nil, nil, nil, nil, nil, nil, nil, 209, nil, nil, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 67, 68, 64, nil, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 248, 249, 65, 66, nil, nil, nil, nil, 247, - 277, 281, 90, 89, 91, 92, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 41, nil, nil, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, 38, 39, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 202, nil, nil, 206, nil, nil, 52, - 53, nil, nil, 54, nil, nil, nil, nil, nil, 40, - nil, nil, nil, nil, nil, nil, nil, 209, nil, nil, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 67, 68, 64, nil, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 248, 249, 65, 66, nil, nil, nil, nil, 247, - 277, 281, 90, 89, 91, 92, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 41, nil, nil, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, 38, 39, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 202, nil, nil, 206, nil, nil, 52, - 53, nil, nil, 54, nil, nil, nil, nil, nil, 40, - nil, nil, nil, nil, nil, nil, nil, 209, nil, nil, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 67, 68, 64, nil, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 248, 249, 65, 66, nil, nil, nil, nil, 247, - 277, 281, 90, 89, 91, 92, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 41, nil, nil, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, 38, 39, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 202, nil, nil, 206, nil, nil, 52, - 53, nil, nil, 54, nil, nil, nil, nil, nil, 40, - nil, nil, nil, nil, nil, nil, nil, 209, nil, nil, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 67, 68, 64, nil, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 248, 249, 65, 66, nil, nil, nil, nil, 247, - 277, 281, 90, 89, 91, 92, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 41, nil, nil, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, 38, 39, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 202, nil, nil, 206, nil, nil, 52, - 53, nil, nil, 54, nil, nil, nil, nil, nil, 40, - nil, nil, nil, nil, nil, nil, nil, 209, nil, nil, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 67, 68, 64, nil, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 248, 249, 65, 66, nil, nil, nil, nil, 247, - 277, 281, 90, 89, 91, 92, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 41, nil, nil, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, 38, 39, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 202, nil, nil, 206, nil, nil, 52, - 53, nil, nil, 54, nil, nil, nil, nil, nil, 40, - nil, nil, nil, nil, nil, nil, nil, 209, nil, nil, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 67, 68, 64, nil, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 248, 249, 65, 66, nil, nil, nil, nil, 247, - 277, 281, 90, 89, 91, 92, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 41, nil, nil, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, 38, 39, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 202, nil, nil, 206, nil, nil, 52, - 53, nil, nil, 54, nil, nil, nil, nil, nil, 40, - nil, nil, nil, nil, nil, nil, nil, 209, nil, nil, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 67, 68, 64, nil, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 248, 249, 65, 66, nil, nil, nil, nil, 247, - 277, 281, 90, 89, 91, 92, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 41, nil, nil, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, 38, 39, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 202, nil, nil, 206, nil, nil, 52, - 53, nil, nil, 54, nil, nil, nil, nil, nil, 40, - nil, nil, nil, nil, nil, nil, nil, 209, nil, nil, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 67, 68, 64, nil, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 248, 249, 65, 66, nil, nil, nil, nil, 247, - 277, 281, 90, 89, 91, 92, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 41, nil, nil, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, 38, 39, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 202, nil, nil, 206, nil, nil, 52, - 53, nil, nil, 54, nil, nil, nil, nil, nil, 40, - nil, nil, nil, nil, nil, nil, nil, 209, nil, nil, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 67, 68, 64, nil, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 248, 249, 65, 66, nil, nil, nil, nil, 247, - 277, 281, 90, 89, 91, 92, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 41, nil, nil, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, 38, 39, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 202, nil, nil, 206, nil, nil, 52, - 53, nil, nil, 54, nil, nil, nil, nil, nil, 40, - nil, nil, nil, nil, nil, nil, nil, 209, nil, nil, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 67, 68, 64, nil, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 248, 249, 65, 66, nil, nil, nil, nil, 247, - 277, 281, 90, 89, 91, 92, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 41, nil, nil, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, 38, 39, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 202, nil, nil, 206, nil, nil, 52, - 53, nil, nil, 54, nil, nil, nil, nil, nil, 40, - nil, nil, nil, nil, nil, nil, nil, 209, nil, nil, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 67, 68, 64, nil, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 248, 249, 65, 66, nil, nil, nil, nil, 247, - 277, 281, 90, 89, 91, 92, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 41, nil, nil, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, 38, 39, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 202, nil, nil, 206, nil, nil, 52, - 53, nil, nil, 54, nil, nil, nil, nil, nil, 40, - nil, nil, nil, nil, nil, nil, nil, 209, nil, nil, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 67, 68, 64, nil, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 248, 249, 65, 66, nil, nil, nil, nil, 247, - 277, 281, 90, 89, 91, 92, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 41, nil, nil, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, 38, 39, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 202, nil, nil, 206, nil, nil, 52, - 53, nil, nil, 54, nil, nil, nil, nil, nil, 40, - nil, nil, nil, nil, nil, nil, nil, 209, nil, nil, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 67, 68, 64, nil, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 248, 249, 65, 66, nil, nil, nil, nil, 247, - 277, 281, 90, 89, 91, 92, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 41, nil, nil, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, 38, 39, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 202, nil, nil, 206, nil, nil, 52, - 53, nil, nil, 54, nil, nil, nil, nil, nil, 40, - nil, nil, nil, nil, nil, nil, nil, 209, nil, nil, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 67, 68, 64, nil, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 248, 249, 65, 66, nil, nil, nil, nil, 247, - 277, 281, 90, 89, 91, 92, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 41, nil, nil, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, 38, 39, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 202, nil, nil, 206, nil, nil, 52, - 53, nil, nil, 54, nil, nil, nil, nil, nil, 40, - nil, nil, nil, nil, nil, nil, nil, 209, nil, nil, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 67, 68, 64, nil, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 248, 249, 65, 66, nil, nil, nil, nil, 247, - 277, 281, 90, 89, 91, 92, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 41, nil, nil, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, 38, 39, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 202, nil, nil, 206, nil, nil, 52, - 53, nil, nil, 54, nil, nil, nil, nil, nil, 40, - nil, nil, nil, nil, nil, nil, nil, 209, nil, nil, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 67, 68, 64, nil, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 248, 249, 65, 66, nil, nil, nil, nil, 247, - 277, 281, 90, 89, 91, 92, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 41, nil, nil, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, 38, 39, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 202, nil, nil, 206, nil, nil, 52, - 53, nil, nil, 54, nil, nil, nil, nil, nil, 40, - nil, nil, nil, nil, nil, nil, nil, 209, nil, nil, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 67, 68, 64, nil, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 248, 249, 65, 66, nil, nil, nil, nil, 247, - 277, 281, 90, 89, 91, 92, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 41, nil, nil, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, 38, 39, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 202, nil, nil, 206, nil, nil, 52, - 53, nil, nil, 54, nil, nil, nil, nil, nil, 40, - nil, nil, nil, nil, nil, nil, nil, 209, nil, nil, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 67, 68, 64, nil, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 248, 249, 65, 66, nil, nil, nil, nil, 247, - 277, 281, 90, 89, 91, 92, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 41, nil, nil, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, 38, 39, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 202, nil, nil, 206, nil, nil, 52, - 53, nil, nil, 54, nil, nil, nil, nil, nil, 40, - nil, nil, nil, nil, nil, nil, nil, 209, nil, nil, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 67, 68, 64, nil, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 248, 249, 65, 66, nil, nil, nil, nil, 247, - 277, 281, 90, 89, 91, 92, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 41, nil, nil, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, 38, 39, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 202, nil, nil, 206, nil, nil, 52, - 53, nil, nil, 54, nil, nil, nil, nil, nil, 40, - nil, nil, nil, nil, nil, nil, nil, 209, nil, nil, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 67, 68, 64, nil, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 248, 249, 65, 66, nil, nil, nil, nil, 247, - 277, 281, 90, 89, 91, 92, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 41, nil, nil, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, 38, 39, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 202, nil, nil, 206, nil, nil, 52, - 53, nil, nil, 54, nil, nil, nil, nil, nil, 40, - nil, nil, nil, nil, nil, nil, nil, 209, nil, nil, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 67, 68, 64, nil, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 248, 249, 65, 66, nil, nil, nil, nil, 247, - 277, 281, 90, 89, 91, 92, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 41, nil, nil, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, 38, 39, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 202, nil, nil, 206, nil, nil, 52, - 53, nil, nil, 54, nil, nil, nil, nil, nil, 40, - nil, nil, nil, nil, nil, nil, nil, 209, nil, nil, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 67, 68, 64, nil, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 248, 249, 65, 66, nil, nil, nil, nil, 247, - 277, 281, 90, 89, 91, 92, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 41, nil, nil, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, 38, 39, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 202, nil, nil, 206, nil, nil, 52, - 53, nil, nil, 54, nil, nil, nil, nil, nil, 40, - nil, nil, nil, nil, nil, nil, nil, 209, nil, nil, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 67, 68, 64, nil, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 248, 249, 65, 66, nil, nil, nil, nil, 247, - 277, 281, 90, 89, 91, 92, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 41, nil, nil, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, 38, 39, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 202, nil, nil, 206, nil, nil, 52, - 53, nil, nil, 54, nil, nil, nil, nil, nil, 40, - nil, nil, nil, nil, nil, nil, nil, 209, nil, nil, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 67, 68, 64, nil, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 248, 249, 65, 66, nil, nil, nil, nil, 247, - 28, 27, 90, 89, 91, 92, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 41, nil, nil, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, 38, 39, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 202, nil, nil, 206, nil, nil, 52, - 53, nil, nil, 54, nil, 243, nil, 245, nil, 40, - nil, nil, nil, nil, nil, nil, nil, 209, nil, nil, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 67, 68, 64, nil, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 248, 249, 65, 66, nil, nil, nil, nil, 247, - 28, 27, 90, 89, 91, 92, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 41, nil, nil, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, 38, 39, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 202, nil, nil, 206, nil, nil, 447, - 53, nil, nil, 54, nil, 243, nil, 245, nil, 40, - nil, nil, nil, nil, nil, nil, nil, 209, nil, nil, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 67, 68, 64, nil, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 248, 249, 65, 66, nil, nil, nil, nil, 247, - 28, 27, 90, 89, 91, 92, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 41, nil, nil, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, 38, 39, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 202, nil, nil, 206, nil, 451, 52, - 53, nil, nil, 54, nil, 243, nil, 245, nil, 40, - nil, nil, nil, nil, nil, nil, nil, 209, nil, nil, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 67, 68, 64, nil, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 248, 249, 65, 66, nil, nil, nil, nil, 247, - 277, 281, 90, 89, 91, 92, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 278, nil, nil, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, nil, nil, 282, nil, 217, 221, 226, 227, 228, - 223, 225, 233, 234, 229, 230, nil, 210, 211, nil, - nil, 231, 232, 275, nil, nil, 206, nil, nil, 52, - 53, nil, nil, 54, nil, nil, nil, 214, nil, 220, - nil, 216, 215, 212, 213, 224, 222, 218, nil, 219, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 67, 68, 64, 235, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 248, 249, 65, 66, nil, nil, nil, nil, 247, - 277, 281, 90, 89, 91, 92, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 41, nil, nil, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, 38, 39, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 202, nil, nil, 206, 471, nil, 52, - 53, nil, nil, 54, nil, nil, nil, nil, nil, 40, - nil, nil, nil, nil, nil, nil, nil, 209, nil, nil, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 67, 68, 64, nil, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 248, 249, 65, 66, nil, nil, nil, nil, 247, - 277, 281, 90, 89, 91, 92, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 41, nil, nil, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, 38, 39, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 202, nil, nil, 206, nil, nil, 52, - 53, nil, nil, 54, nil, nil, nil, nil, nil, 40, - nil, nil, nil, nil, nil, nil, nil, 209, nil, nil, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 67, 68, 64, nil, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 23, 24, 65, 66, nil, nil, nil, nil, 22, - 28, 27, 90, 89, 91, 92, nil, nil, 17, nil, - nil, nil, nil, nil, nil, 41, nil, nil, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, 38, 39, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 202, nil, nil, 206, nil, nil, 52, - 53, nil, nil, 54, nil, nil, nil, nil, nil, 40, - nil, nil, nil, nil, nil, nil, nil, 18, nil, nil, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 67, 68, 64, nil, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 23, 24, 65, 66, nil, nil, nil, nil, 22, - 28, 27, 90, 89, 91, 92, nil, nil, 17, nil, - nil, nil, nil, nil, nil, 41, nil, nil, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, 38, 39, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 202, nil, nil, 206, nil, nil, 52, - 53, nil, nil, 54, nil, nil, nil, nil, nil, 40, - nil, nil, nil, nil, nil, nil, nil, 18, nil, nil, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 67, 68, 64, nil, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 23, 24, 65, 66, nil, nil, nil, nil, 22, - 28, 27, 90, 89, 91, 92, nil, nil, 17, nil, - nil, nil, nil, nil, nil, 41, nil, nil, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, 38, 39, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 202, nil, nil, 206, nil, nil, 52, - 53, nil, nil, 54, nil, nil, nil, nil, nil, 40, - nil, nil, nil, nil, nil, nil, nil, 18, nil, nil, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 67, 68, 64, nil, 51, nil, nil, - nil, 56, 57, nil, nil, nil, 60, nil, 58, 59, - 61, 23, 24, 65, 66, nil, nil, nil, nil, 22, - 28, 27, 90, 89, 91, 92, nil, nil, 17, nil, - nil, nil, nil, nil, nil, 41, nil, nil, 94, 93, - 84, 50, 86, 85, 88, 87, 95, 96, nil, 82, - 83, 38, 39, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 202, nil, nil, 206, nil, nil, 52, - 53, nil, nil, 54, nil, nil, nil, nil, nil, 40, - nil, nil, nil, nil, nil, nil, nil, 18, nil, nil, - nil, nil, 81, 74, 76, 77, 78, 79, nil, nil, - nil, 75, 80, 155, 166, 156, 179, 152, 172, 162, - 161, 182, 183, 177, 160, 159, 154, 180, 184, 185, - 164, 153, 167, 171, 173, 165, 158, nil, nil, 174, - 181, 176, 175, 168, 178, 163, 151, 170, 169, nil, - nil, nil, nil, nil, 150, 157, 148, 149, 146, 147, - 111, 113, nil, nil, 112, nil, nil, nil, nil, nil, - nil, 141, 142, nil, 139, 123, 124, 125, nil, 128, - 130, nil, nil, 126, nil, nil, nil, nil, 143, 144, - 131, 132, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 136, 135, nil, 122, 140, - 138, 137, 133, 134, 129, 127, 120, nil, 121, nil, - nil, 145, 81, nil, nil, 67, 68, 64, nil, 51, - nil, nil, 80, 56, 57, nil, nil, nil, 60, nil, - 58, 59, 61, 248, 249, 65, 66, nil, nil, nil, - nil, 247, 277, 281, 90, 89, 91, 92, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 41, nil, nil, - 94, 93, 84, 50, 86, 85, 88, 87, 95, 96, - nil, 82, 83, 38, 39, 37, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 202, nil, nil, 206, nil, - nil, 52, 53, nil, nil, 54, nil, nil, nil, nil, - nil, 40, nil, nil, nil, nil, nil, nil, nil, 209, - nil, nil, nil, nil, 81, 74, 76, 77, 78, 79, - nil, nil, nil, 75, 80, -249, -249, -249, nil, -249, - nil, nil, nil, -249, -249, nil, nil, nil, -249, nil, - -249, -249, -249, -249, -249, -249, -249, nil, nil, nil, - nil, -249, -249, -249, -249, -249, -249, -249, nil, nil, - nil, nil, nil, nil, nil, nil, nil, -249, nil, nil, - -249, -249, -249, -249, -249, -249, -249, -249, -249, -249, - nil, -249, -249, -249, -249, -249, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, -249, nil, nil, -249, 256, - nil, -249, -249, nil, nil, -249, nil, -249, nil, -249, - nil, -249, nil, nil, nil, nil, nil, nil, nil, -249, - nil, nil, nil, nil, -249, -249, -249, -249, -249, -249, - nil, nil, nil, -249, -249, -480, -480, -480, nil, -480, - nil, nil, nil, -480, -480, nil, nil, nil, -480, nil, - -480, -480, -480, -480, -480, -480, -480, nil, nil, nil, - nil, -480, -480, -480, -480, -480, -480, -480, nil, nil, - nil, nil, nil, nil, nil, nil, nil, -480, nil, nil, - -480, -480, -480, -480, -480, -480, -480, -480, -480, -480, - nil, -480, -480, -480, -480, -480, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, -480, nil, nil, -480, -480, - nil, -480, -480, nil, nil, -480, nil, -480, nil, -480, - nil, -480, nil, nil, nil, nil, nil, nil, nil, -480, - nil, nil, nil, nil, -480, -480, -480, -480, -480, -480, - nil, nil, nil, -480, -480, -481, -481, -481, nil, -481, - nil, nil, nil, -481, -481, nil, nil, nil, -481, nil, - -481, -481, -481, -481, -481, -481, -481, nil, nil, nil, - nil, -481, -481, -481, -481, -481, -481, -481, nil, nil, - nil, nil, nil, nil, nil, nil, nil, -481, nil, nil, - -481, -481, -481, -481, -481, -481, -481, -481, -481, -481, - nil, -481, -481, -481, -481, -481, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, -481, nil, nil, -481, -481, - nil, -481, -481, nil, nil, -481, nil, -481, nil, -481, - nil, -481, nil, nil, nil, nil, nil, nil, nil, -481, - nil, nil, nil, nil, -481, -481, -481, -481, -481, -481, - nil, nil, nil, -481, -481, 67, 68, 64, nil, 51, - nil, nil, nil, 56, 57, nil, nil, nil, 60, nil, - 58, 59, 61, 248, 249, 65, 66, nil, nil, nil, - nil, 247, 28, 27, 90, 89, 91, 92, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 41, nil, nil, - 94, 93, 84, 50, 86, 85, 88, 87, 95, 96, - nil, 82, 83, 38, 39, 37, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 202, nil, nil, 206, nil, - nil, 52, 53, nil, nil, 54, nil, 301, nil, nil, - nil, 40, nil, nil, nil, nil, nil, nil, nil, 209, - nil, nil, nil, nil, 81, 74, 76, 77, 78, 79, - nil, nil, nil, 75, 80, 67, 68, 64, nil, 51, - nil, nil, nil, 56, 57, nil, nil, nil, 60, nil, - 58, 59, 61, 248, 249, 65, 66, nil, nil, nil, - nil, 247, 277, 281, 90, 89, 91, 92, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 41, nil, nil, - 94, 93, 84, 50, 86, 85, 88, 87, 95, 96, - nil, 82, 83, 38, 39, 37, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 202, nil, nil, 206, nil, - nil, 52, 53, nil, nil, 54, nil, nil, nil, nil, - nil, 40, nil, nil, nil, nil, nil, nil, nil, 209, - nil, nil, nil, nil, 81, 74, 76, 77, 78, 79, - nil, nil, nil, 75, 80, 67, 68, 64, nil, 51, - nil, nil, nil, 56, 57, nil, nil, nil, 60, nil, - 58, 59, 61, 248, 249, 65, 66, nil, nil, nil, - nil, 247, 277, 281, 90, 89, 91, 92, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 41, nil, nil, - 94, 93, 84, 50, 86, 85, 88, 87, 95, 96, - nil, 82, 83, 38, 39, 37, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 202, nil, nil, 206, nil, - nil, 52, 53, nil, nil, 54, nil, nil, nil, nil, - nil, 40, nil, nil, nil, nil, nil, nil, nil, 209, - nil, nil, nil, nil, 81, 74, 76, 77, 78, 79, - nil, nil, nil, 75, 80, 67, 68, 64, nil, 51, - nil, nil, nil, 56, 57, nil, nil, nil, 60, nil, - 58, 59, 61, 248, 249, 65, 66, nil, nil, nil, - nil, 247, 277, 281, 90, 89, 91, 92, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 41, nil, nil, - 94, 93, 84, 50, 86, 85, 88, 87, 95, 96, - nil, 82, 83, 38, 39, 37, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 202, nil, nil, 206, nil, - nil, 52, 53, nil, nil, 54, nil, nil, nil, nil, - nil, 40, nil, nil, nil, nil, nil, nil, nil, 209, - nil, nil, nil, nil, 81, 74, 76, 77, 78, 79, - nil, nil, nil, 75, 80, 67, 68, 64, nil, 51, - nil, nil, nil, 56, 57, nil, nil, nil, 60, nil, - 58, 59, 61, 248, 249, 65, 66, nil, nil, nil, - nil, 247, 277, 281, 90, 89, 91, 92, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 41, nil, nil, - 94, 93, 84, 50, 86, 85, 88, 87, 95, 96, - nil, 82, 83, 38, 39, 37, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 202, nil, nil, 206, nil, - nil, 52, 53, nil, nil, 54, nil, 562, nil, 245, - nil, 40, nil, nil, nil, nil, nil, nil, nil, 209, - nil, nil, nil, nil, 81, 74, 76, 77, 78, 79, - nil, nil, nil, 75, 80, 67, 68, 64, nil, 51, - nil, nil, nil, 56, 57, nil, nil, nil, 60, nil, - 58, 59, 61, 248, 249, 65, 66, nil, nil, nil, - nil, 247, 277, 281, 90, 89, 91, 92, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 41, nil, nil, - 94, 93, 84, 50, 86, 85, 88, 87, 95, 96, - nil, 82, 83, 38, 39, 37, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 202, nil, nil, 206, nil, - nil, 52, 53, nil, nil, 54, nil, 566, nil, 245, - nil, 40, nil, nil, nil, nil, nil, nil, nil, 209, - nil, nil, nil, nil, 81, 74, 76, 77, 78, 79, - nil, nil, nil, 75, 80, 67, 68, 64, nil, 51, - nil, nil, nil, 56, 57, nil, nil, nil, 60, nil, - 58, 59, 61, 248, 249, 65, 66, nil, nil, nil, - nil, 247, 277, 281, 90, 89, 91, 92, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 41, nil, nil, - 94, 93, 84, 50, 86, 85, 88, 87, 95, 96, - nil, 82, 83, 38, 39, 37, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 202, nil, nil, 206, nil, - nil, 52, 53, nil, nil, 54, nil, nil, nil, nil, - nil, 40, nil, nil, nil, nil, nil, nil, nil, 209, - nil, nil, nil, nil, 81, 74, 76, 77, 78, 79, - nil, nil, nil, 75, 80, 67, 68, 64, nil, 51, - nil, nil, nil, 56, 57, nil, nil, nil, 60, nil, - 58, 59, 61, 23, 24, 65, 66, nil, nil, nil, - nil, 22, 28, 27, 90, 89, 91, 92, nil, nil, - 17, nil, nil, nil, nil, nil, nil, 41, nil, nil, - 94, 93, 84, 50, 86, 85, 88, 87, 95, 96, - nil, 82, 83, 38, 39, 37, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 202, nil, nil, 206, nil, - nil, 52, 53, nil, nil, 54, nil, 586, nil, 245, - nil, 40, nil, nil, nil, nil, nil, nil, nil, 18, - nil, nil, nil, nil, 81, 74, 76, 77, 78, 79, - nil, nil, nil, 75, 80, 67, 68, 64, nil, 51, - nil, nil, nil, 56, 57, nil, nil, nil, 60, nil, - 58, 59, 61, 248, 249, 65, 66, nil, nil, nil, - nil, 247, 28, 27, 90, 89, 91, 92, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 41, nil, nil, - 94, 93, 84, 50, 86, 85, 88, 87, 95, 96, - nil, 82, 83, 38, 39, 37, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 202, nil, nil, 206, nil, - nil, 52, 53, nil, nil, 54, nil, 301, nil, nil, - nil, 40, nil, nil, nil, nil, nil, nil, nil, 209, - nil, nil, nil, nil, 81, 74, 76, 77, 78, 79, - nil, nil, nil, 75, 80, 67, 68, 64, nil, 51, - nil, nil, nil, 56, 57, nil, nil, nil, 60, nil, - 58, 59, 61, 248, 249, 65, 66, nil, nil, nil, - nil, 247, 277, 281, 90, 89, 91, 92, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 41, nil, nil, - 94, 93, 84, 50, 86, 85, 88, 87, 95, 96, - nil, 82, 83, 38, 39, 37, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 202, nil, nil, 206, nil, - nil, 52, 53, nil, nil, 54, nil, nil, nil, nil, - nil, 40, nil, nil, nil, nil, nil, nil, nil, 209, - nil, nil, nil, nil, 81, 74, 76, 77, 78, 79, - nil, nil, nil, 75, 80, 67, 68, 64, nil, 51, - nil, nil, nil, 56, 57, nil, nil, nil, 60, nil, - 58, 59, 61, 248, 249, 65, 66, nil, nil, nil, - nil, 247, 277, 281, 90, 89, 91, 92, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 41, nil, nil, - 94, 93, 84, 50, 86, 85, 88, 87, 95, 96, - nil, 82, 83, 38, 39, 37, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 202, nil, nil, 206, nil, - nil, 52, 53, nil, nil, 54, nil, nil, nil, nil, - nil, 40, nil, nil, nil, nil, nil, nil, nil, 209, - nil, nil, nil, nil, 81, 74, 76, 77, 78, 79, - nil, nil, nil, 75, 80, 67, 68, 64, nil, 51, - nil, nil, nil, 56, 57, nil, nil, nil, 60, nil, - 58, 59, 61, 248, 249, 65, 66, nil, nil, nil, - nil, 247, 277, 281, 90, 89, 91, 92, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 41, nil, nil, - 94, 93, 84, 50, 86, 85, 88, 87, 95, 96, - nil, 82, 83, 38, 39, 37, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 202, nil, nil, 206, nil, - nil, 52, 53, nil, nil, 54, nil, nil, nil, nil, - nil, 40, nil, nil, nil, nil, nil, nil, nil, 209, - nil, nil, nil, nil, 81, 74, 76, 77, 78, 79, - nil, nil, nil, 75, 80, 67, 68, 64, nil, 51, - nil, nil, nil, 56, 57, nil, nil, nil, 60, nil, - 58, 59, 61, 23, 24, 65, 66, nil, nil, nil, - nil, 22, 28, 27, 90, 89, 91, 92, nil, nil, - 17, nil, nil, nil, nil, nil, nil, 41, nil, nil, - 94, 93, 84, 50, 86, 85, 88, 87, 95, 96, - nil, 82, 83, 38, 39, 37, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 202, nil, nil, 206, nil, - nil, 52, 53, nil, nil, 54, nil, nil, nil, nil, - nil, 40, nil, nil, nil, nil, nil, nil, nil, 18, - nil, nil, nil, nil, 81, 74, 76, 77, 78, 79, - nil, nil, nil, 75, 80, 67, 68, 64, nil, 51, - nil, nil, nil, 56, 57, nil, nil, nil, 60, nil, - 58, 59, 61, 248, 249, 65, 66, nil, nil, nil, - nil, 247, 277, 281, 90, 89, 91, 92, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 41, nil, nil, - 94, 93, 84, 50, 86, 85, 88, 87, 95, 96, - nil, 82, 83, 38, 39, 37, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 202, nil, nil, 206, nil, - nil, 52, 53, nil, nil, 54, nil, 371, nil, nil, - nil, 40, nil, nil, nil, nil, nil, nil, nil, 209, - nil, nil, nil, nil, 81, 74, 76, 77, 78, 79, - nil, nil, nil, 75, 80, 67, 68, 64, nil, 51, - nil, nil, nil, 56, 57, nil, nil, nil, 60, nil, - 58, 59, 61, 248, 249, 65, 66, nil, nil, nil, - nil, 247, 277, 281, 90, 89, 91, 92, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 41, nil, nil, - 94, 93, 84, 50, 86, 85, 88, 87, 95, 96, - nil, 82, 83, 38, 39, 37, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 202, nil, nil, 206, nil, - nil, 52, 53, nil, nil, 54, nil, 614, nil, nil, - nil, 40, nil, nil, nil, nil, nil, nil, nil, 209, - nil, nil, nil, nil, 81, 74, 76, 77, 78, 79, - nil, nil, nil, 75, 80, 67, 68, 64, nil, 51, - nil, nil, nil, 56, 57, nil, nil, nil, 60, nil, - 58, 59, 61, 248, 249, 65, 66, nil, nil, nil, - nil, 247, 277, 281, 90, 89, 91, 92, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 41, nil, nil, - 94, 93, 84, 50, 86, 85, 88, 87, 95, 96, - nil, 82, 83, 38, 39, 37, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 202, nil, nil, 206, nil, - nil, 52, 53, nil, nil, 54, nil, nil, nil, nil, - nil, 40, nil, nil, nil, nil, nil, nil, nil, 209, - nil, nil, nil, nil, 81, 74, 76, 77, 78, 79, - nil, nil, nil, 75, 80, 67, 68, 64, nil, 51, - nil, nil, nil, 56, 57, nil, nil, nil, 60, nil, - 58, 59, 61, 248, 249, 65, 66, nil, nil, nil, - nil, 247, 277, 281, 90, 89, 91, 92, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 41, nil, nil, - 94, 93, 84, 50, 86, 85, 88, 87, 95, 96, - nil, 82, 83, 38, 39, 37, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 202, nil, nil, 206, nil, - nil, 52, 53, nil, nil, 54, nil, nil, nil, nil, - nil, 40, nil, nil, nil, nil, nil, nil, nil, 209, - nil, nil, nil, nil, 81, 74, 76, 77, 78, 79, - nil, nil, nil, 75, 80, 67, 68, 64, nil, 51, - nil, nil, nil, 56, 57, nil, nil, nil, 60, nil, - 58, 59, 61, 248, 249, 65, 66, nil, nil, nil, - nil, 247, 277, 281, 90, 89, 91, 92, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 41, nil, nil, - 94, 93, 84, 50, 86, 85, 88, 87, 95, 96, - nil, 82, 83, 38, 39, 37, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 202, nil, nil, 206, nil, - nil, 52, 53, nil, nil, 54, nil, 630, nil, nil, - nil, 40, nil, nil, nil, nil, nil, nil, nil, 209, - nil, nil, nil, nil, 81, 74, 76, 77, 78, 79, - nil, nil, nil, 75, 80, 67, 68, 64, nil, 51, - nil, nil, nil, 56, 57, nil, nil, nil, 60, nil, - 58, 59, 61, 248, 249, 65, 66, nil, nil, nil, - nil, 247, 28, 27, 90, 89, 91, 92, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 41, nil, nil, - 94, 93, 84, 50, 86, 85, 88, 87, 95, 96, - nil, 82, 83, 38, 39, 37, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 202, nil, nil, 206, nil, - nil, 52, 53, nil, nil, 54, nil, 301, nil, nil, - nil, 40, nil, nil, nil, nil, nil, nil, nil, 209, - nil, nil, nil, nil, 81, 74, 76, 77, 78, 79, - nil, nil, nil, 75, 80, 67, 68, 64, nil, 51, - nil, nil, nil, 56, 57, nil, nil, nil, 60, nil, - 58, 59, 61, 248, 249, 65, 66, nil, nil, nil, - nil, 247, 28, 27, 90, 89, 91, 92, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 41, nil, nil, - 94, 93, 84, 50, 86, 85, 88, 87, 95, 96, - nil, 82, 83, 38, 39, 37, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 202, nil, nil, 206, nil, - nil, 52, 53, nil, nil, 54, nil, 301, nil, nil, - nil, 40, nil, nil, nil, nil, nil, nil, nil, 209, - nil, nil, nil, nil, 81, 74, 76, 77, 78, 79, - nil, nil, nil, 75, 80, 67, 68, 64, nil, 51, - nil, nil, nil, 56, 57, nil, nil, nil, 60, nil, - 58, 59, 61, 23, 24, 65, 66, nil, nil, nil, - nil, 22, 28, 27, 90, 89, 91, 92, nil, nil, - 17, nil, nil, nil, nil, nil, nil, 41, nil, nil, - 94, 93, 84, 50, 86, 85, 88, 87, 95, 96, - nil, 82, 83, 38, 39, 37, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 202, nil, nil, 206, nil, - nil, 52, 53, nil, nil, 54, nil, nil, nil, nil, - nil, 40, nil, nil, nil, nil, nil, nil, nil, 18, - nil, nil, nil, nil, 81, 74, 76, 77, 78, 79, - nil, nil, nil, 75, 80, 155, 166, 156, 179, 152, - 172, 162, 161, 182, 183, 177, 160, 159, 154, 180, - 184, 185, 164, 153, 167, 171, 173, 165, 158, nil, - nil, 174, 181, 176, 175, 168, 178, 163, 151, 170, - 169, nil, nil, nil, nil, nil, 150, 157, 148, 149, - 146, 147, 111, 113, nil, nil, 112, nil, nil, nil, - nil, nil, nil, 141, 142, nil, 139, 123, 124, 125, - nil, 128, 130, nil, nil, 126, nil, nil, nil, nil, - 143, 144, 131, 132, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 136, 135, nil, - 122, 140, 138, 137, 133, 134, 129, 127, 120, nil, - 121, nil, nil, 145, 81, nil, nil, 67, 68, 64, - nil, 51, nil, nil, 80, 56, 57, nil, nil, nil, - 60, nil, 58, 59, 61, 248, 249, 65, 66, nil, - nil, nil, nil, 247, 277, 281, 90, 89, 91, 92, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 41, - nil, nil, 94, 93, 84, 50, 86, 85, 88, 87, - 95, 96, nil, 82, 83, 38, 39, 37, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 202, nil, nil, - 206, nil, nil, 52, 53, nil, nil, 54, nil, nil, - nil, nil, nil, 40, nil, nil, nil, nil, nil, nil, - nil, 209, nil, nil, nil, nil, 81, 74, 76, 77, - 78, 79, nil, nil, nil, 75, 80, 67, 68, 64, - nil, 51, nil, nil, nil, 56, 57, nil, nil, nil, - 60, nil, 58, 59, 61, 248, 249, 65, 66, nil, - nil, nil, nil, 247, 277, 281, 90, 89, 91, 92, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 41, - nil, nil, 94, 93, 84, 50, 86, 85, 88, 87, - 95, 96, nil, 82, 83, 38, 39, 37, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 202, nil, nil, - 206, nil, nil, 52, 53, nil, nil, 54, nil, 681, - nil, nil, nil, 40, nil, nil, nil, nil, nil, nil, - nil, 209, nil, nil, nil, nil, 81, 74, 76, 77, - 78, 79, nil, nil, nil, 75, 80, 67, 68, 64, - nil, 51, nil, nil, nil, 56, 57, nil, nil, nil, - 60, nil, 58, 59, 61, 23, 24, 65, 66, nil, - nil, nil, nil, 22, 28, 27, 90, 89, 91, 92, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 41, - nil, nil, 94, 93, 84, 50, 86, 85, 88, 87, - 95, 96, nil, 82, 83, 38, 39, 37, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 202, nil, nil, - 206, nil, nil, 52, 53, nil, nil, 54, nil, nil, - nil, nil, nil, 40, nil, nil, nil, nil, nil, nil, - nil, 209, nil, nil, nil, nil, 81, 74, 76, 77, - 78, 79, nil, nil, nil, 75, 80, 67, 68, 64, - nil, 51, nil, nil, nil, 56, 57, nil, nil, nil, - 60, nil, 58, 59, 61, 23, 24, 65, 66, nil, - nil, nil, nil, 22, 28, 27, 90, 89, 91, 92, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 41, - nil, nil, 94, 93, 84, 50, 86, 85, 88, 87, - 95, 96, nil, 82, 83, 38, 39, 37, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 202, nil, nil, - 206, nil, nil, 52, 53, nil, nil, 54, nil, nil, - nil, nil, nil, 40, nil, nil, nil, nil, nil, nil, - nil, 209, nil, nil, nil, nil, 81, 74, 76, 77, - 78, 79, nil, nil, nil, 75, 80, 67, 68, 64, - nil, 51, nil, nil, nil, 56, 57, nil, nil, nil, - 60, nil, 58, 59, 61, 23, 24, 65, 66, nil, - nil, nil, nil, 22, 28, 27, 90, 89, 91, 92, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 41, - nil, nil, 94, 93, 84, 50, 86, 85, 88, 87, - 95, 96, nil, 82, 83, 38, 39, 37, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 202, nil, nil, - 206, nil, nil, 52, 53, nil, nil, 54, nil, nil, - nil, nil, nil, 40, nil, nil, nil, nil, nil, nil, - nil, 209, nil, nil, nil, nil, 81, 74, 76, 77, - 78, 79, nil, nil, nil, 75, 80, 67, 68, 64, - nil, 51, nil, nil, nil, 56, 57, nil, nil, nil, - 60, nil, 58, 59, 61, 248, 249, 65, 66, nil, - nil, nil, nil, 247, 277, 281, 90, 89, 91, 92, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 41, - nil, nil, 94, 93, 84, 50, 86, 85, 88, 87, - 95, 96, nil, 82, 83, 38, 39, 37, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 202, nil, nil, - 206, nil, nil, 52, 53, nil, nil, 54, nil, nil, - nil, nil, nil, 40, nil, nil, nil, nil, nil, nil, - nil, 209, nil, nil, nil, nil, 81, 74, 76, 77, - 78, 79, nil, nil, nil, 75, 80, 67, 68, 64, - nil, 51, nil, nil, nil, 56, 57, nil, nil, nil, - 60, nil, 58, 59, 61, 248, 249, 65, 66, nil, - nil, nil, nil, 247, 277, 281, 90, 89, 91, 92, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 41, - nil, nil, 94, 93, 84, 50, 86, 85, 88, 87, - 95, 96, nil, 82, 83, 38, 39, 37, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 202, nil, nil, - 206, nil, nil, 52, 53, nil, nil, 54, nil, nil, - nil, nil, nil, 40, nil, nil, nil, nil, nil, nil, - nil, 209, nil, nil, nil, nil, 81, 74, 76, 77, - 78, 79, nil, nil, nil, 75, 80, 67, 68, 64, - nil, 51, nil, nil, nil, 56, 57, nil, nil, nil, - 60, nil, 58, 59, 61, 248, 249, 65, 66, nil, - nil, nil, nil, 247, 277, 281, 90, 89, 91, 92, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 278, - nil, nil, 94, 93, 84, 50, 86, 85, 88, 87, - 95, 96, nil, 82, 83, nil, nil, 282, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 275, nil, nil, - 272, nil, nil, 52, 53, nil, nil, 54, nil, 699, - nil, 700, nil, nil, nil, nil, nil, nil, nil, nil, - 701, nil, nil, nil, nil, nil, 81, 74, 76, 77, - 78, 79, nil, nil, nil, 75, 80, 67, 68, 64, - nil, 51, nil, nil, nil, 56, 57, nil, nil, nil, - 60, nil, 58, 59, 61, 248, 249, 65, 66, nil, - nil, nil, nil, 247, 277, 281, 90, 89, 91, 92, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 41, - nil, nil, 94, 93, 84, 50, 86, 85, 88, 87, - 95, 96, nil, 82, 83, 38, 39, 37, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 202, nil, nil, - 206, nil, nil, 52, 53, nil, nil, 54, nil, nil, - nil, nil, nil, 40, nil, nil, nil, nil, nil, nil, - nil, 209, nil, nil, nil, nil, 81, 74, 76, 77, - 78, 79, nil, nil, nil, 75, 80, 67, 68, 64, - nil, 51, nil, nil, nil, 56, 57, nil, nil, nil, - 60, nil, 58, 59, 61, 248, 249, 65, 66, nil, - nil, nil, nil, 247, 277, 281, 90, 89, 91, 92, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 41, - nil, nil, 94, 93, 84, 50, 86, 85, 88, 87, - 95, 96, nil, 82, 83, 38, 39, 37, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 202, nil, nil, - 206, nil, nil, 52, 53, nil, nil, 54, nil, nil, - nil, nil, nil, 40, nil, nil, nil, nil, nil, nil, - nil, 209, nil, nil, nil, nil, 81, 74, 76, 77, - 78, 79, nil, nil, nil, 75, 80, 67, 68, 64, - nil, 51, nil, nil, nil, 56, 57, nil, nil, nil, - 60, nil, 58, 59, 61, 248, 249, 65, 66, nil, - nil, nil, nil, 247, 28, 27, 90, 89, 91, 92, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 41, - nil, nil, 94, 93, 84, 50, 86, 85, 88, 87, - 95, 96, nil, 82, 83, 38, 39, 37, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 202, nil, nil, - 206, nil, nil, 52, 53, nil, nil, 54, nil, 562, - nil, 245, nil, 40, nil, nil, nil, nil, nil, nil, - nil, 209, nil, nil, nil, nil, 81, 74, 76, 77, - 78, 79, nil, nil, nil, 75, 80, 67, 68, 64, - nil, 51, nil, nil, nil, 56, 57, nil, nil, nil, - 60, nil, 58, 59, 61, 248, 249, 65, 66, nil, - nil, nil, nil, 247, 277, 281, 90, 89, 91, 92, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 41, - nil, nil, 94, 93, 84, 50, 86, 85, 88, 87, - 95, 96, nil, 82, 83, 38, 39, 37, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 202, nil, nil, - 206, nil, nil, 52, 53, nil, nil, 54, nil, nil, - nil, nil, nil, 40, nil, nil, nil, nil, nil, nil, - nil, 209, nil, nil, nil, nil, 81, 74, 76, 77, - 78, 79, nil, nil, nil, 75, 80, 67, 68, 64, - nil, 51, nil, nil, nil, 56, 57, nil, nil, nil, - 60, nil, 58, 59, 61, 248, 249, 65, 66, nil, - nil, nil, nil, 247, 277, 281, 90, 89, 91, 92, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 41, - nil, nil, 94, 93, 84, 50, 86, 85, 88, 87, - 95, 96, nil, 82, 83, 38, 39, 37, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 202, nil, nil, - 206, nil, nil, 52, 53, nil, nil, 54, nil, nil, - nil, nil, nil, 40, nil, nil, nil, nil, nil, nil, - nil, 209, nil, nil, nil, nil, 81, 74, 76, 77, - 78, 79, nil, nil, nil, 75, 80, 67, 68, 64, - nil, 51, nil, nil, nil, 56, 57, nil, nil, nil, - 60, nil, 58, 59, 61, 248, 249, 65, 66, nil, - nil, nil, nil, 247, 277, 281, 90, 89, 91, 92, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 41, - nil, nil, 94, 93, 84, 50, 86, 85, 88, 87, - 95, 96, nil, 82, 83, 38, 39, 37, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 202, nil, nil, - 206, nil, nil, 52, 53, nil, nil, 54, nil, nil, - nil, nil, nil, 40, nil, nil, nil, nil, nil, nil, - nil, 209, nil, nil, nil, nil, 81, 74, 76, 77, - 78, 79, nil, nil, nil, 75, 80, 67, 68, 64, - nil, 51, nil, nil, nil, 56, 57, nil, nil, nil, - 60, nil, 58, 59, 61, 23, 24, 65, 66, nil, - nil, nil, nil, 22, 28, 27, 90, 89, 91, 92, - nil, nil, 17, nil, nil, nil, nil, nil, nil, 41, - nil, nil, 94, 93, 84, 50, 86, 85, 88, 87, - 95, 96, nil, 82, 83, 38, 39, 37, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 202, nil, nil, - 206, nil, nil, 52, 53, nil, nil, 54, nil, nil, - nil, nil, nil, 40, nil, nil, nil, nil, nil, nil, - nil, 18, nil, nil, nil, nil, 81, 74, 76, 77, - 78, 79, nil, nil, nil, 75, 80, 67, 68, 64, - nil, 51, nil, nil, nil, 56, 57, nil, nil, nil, - 60, nil, 58, 59, 61, 248, 249, 65, 66, nil, - nil, nil, nil, 247, 277, 281, 90, 89, 91, 92, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 41, - nil, nil, 94, 93, 84, 50, 86, 85, 88, 87, - 95, 96, nil, 82, 83, 38, 39, 37, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 202, nil, nil, - 206, nil, nil, 52, 53, nil, nil, 54, nil, nil, - nil, nil, nil, 40, nil, nil, nil, nil, nil, nil, - nil, 209, nil, nil, nil, nil, 81, 74, 76, 77, - 78, 79, nil, nil, nil, 75, 80, 67, 68, 64, - nil, 51, nil, nil, nil, 56, 57, nil, nil, nil, - 60, nil, 58, 59, 61, 23, 24, 65, 66, nil, - nil, nil, nil, 22, 28, 27, 90, 89, 91, 92, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 41, - nil, nil, 94, 93, 84, 50, 86, 85, 88, 87, - 95, 96, nil, 82, 83, 38, 39, 37, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 202, nil, nil, - 206, nil, nil, 52, 53, nil, nil, 54, nil, nil, - nil, nil, nil, 40, nil, nil, nil, nil, nil, nil, - nil, 209, nil, nil, nil, nil, 81, 74, 76, 77, - 78, 79, nil, nil, nil, 75, 80, 67, 68, 64, - nil, 51, nil, nil, nil, 56, 57, nil, nil, nil, - 60, nil, 58, 59, 61, 248, 249, 65, 66, nil, - nil, nil, nil, 247, 277, 281, 90, 89, 91, 92, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 41, - nil, nil, 94, 93, 84, 50, 86, 85, 88, 87, - 95, 96, nil, 82, 83, 38, 39, 37, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 202, nil, nil, - 206, nil, nil, 52, 53, nil, nil, 54, nil, nil, - nil, nil, nil, 40, nil, nil, nil, nil, nil, nil, - nil, 209, nil, nil, nil, nil, 81, 74, 76, 77, - 78, 79, nil, nil, nil, 75, 80, 67, 68, 64, - nil, 51, nil, nil, nil, 56, 57, nil, nil, nil, - 60, nil, 58, 59, 61, 248, 249, 65, 66, nil, - nil, nil, nil, 247, 277, 281, 90, 89, 91, 92, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 41, - nil, nil, 94, 93, 84, 50, 86, 85, 88, 87, - 95, 96, nil, 82, 83, 38, 39, 37, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 202, nil, nil, - 206, nil, nil, 52, 53, nil, nil, 54, nil, nil, - nil, nil, nil, 40, nil, nil, nil, nil, nil, nil, - nil, 209, nil, nil, nil, nil, 81, 74, 76, 77, - 78, 79, nil, nil, nil, 75, 80, 67, 68, 64, - nil, 51, nil, nil, nil, 56, 57, nil, nil, nil, - 60, nil, 58, 59, 61, 248, 249, 65, 66, nil, - nil, nil, nil, 247, 277, 281, 90, 89, 91, 92, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 41, - nil, nil, 94, 93, 84, 50, 86, 85, 88, 87, - 95, 96, nil, 82, 83, 38, 39, 37, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 202, nil, nil, - 206, nil, nil, 52, 53, nil, nil, 54, nil, nil, - nil, nil, nil, 40, nil, nil, nil, nil, nil, nil, - nil, 209, nil, nil, nil, nil, 81, 74, 76, 77, - 78, 79, nil, nil, nil, 75, 80, 67, 68, 64, - nil, 51, nil, nil, nil, 56, 57, nil, nil, nil, - 60, nil, 58, 59, 61, 248, 249, 65, 66, nil, - nil, nil, nil, 247, 277, 281, 90, 89, 91, 92, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 278, - nil, nil, 94, 93, 84, 50, 86, 85, 88, 87, - 95, 96, nil, 82, 83, nil, nil, 282, nil, 217, - 221, 226, 227, 228, 223, 225, 233, 234, 229, 230, - nil, 210, 211, nil, nil, 231, 232, 774, nil, nil, - 206, nil, nil, 52, 53, nil, nil, 54, nil, nil, - nil, 214, nil, 220, nil, 216, 215, 212, 213, 224, - 222, 218, nil, 219, nil, nil, 81, 74, 76, 77, - 78, 79, nil, nil, nil, 75, 80, 67, 68, 64, - 235, 51, nil, nil, nil, 56, 57, nil, nil, nil, - 60, nil, 58, 59, 61, 248, 249, 65, 66, nil, - nil, nil, nil, 247, 277, 281, 90, 89, 91, 92, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 41, - nil, nil, 94, 93, 84, 50, 86, 85, 88, 87, - 95, 96, nil, 82, 83, 38, 39, 37, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 202, nil, nil, - 206, nil, nil, 52, 53, nil, nil, 54, nil, 782, - nil, 245, nil, 40, nil, nil, nil, nil, nil, nil, - nil, 209, nil, nil, nil, nil, 81, 74, 76, 77, - 78, 79, nil, nil, nil, 75, 80, 67, 68, 64, - nil, 51, nil, nil, nil, 56, 57, nil, nil, nil, - 60, nil, 58, 59, 61, 248, 249, 65, 66, nil, - nil, nil, nil, 247, 277, 281, 90, 89, 91, 92, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 41, - nil, nil, 94, 93, 84, 50, 86, 85, 88, 87, - 95, 96, nil, 82, 83, 38, 39, 37, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 202, nil, nil, - 206, nil, nil, 52, 53, nil, nil, 54, nil, 788, - nil, 245, nil, 40, nil, nil, nil, nil, nil, nil, - nil, 209, nil, nil, nil, nil, 81, 74, 76, 77, - 78, 79, nil, nil, nil, 75, 80, 67, 68, 64, - nil, 51, nil, nil, nil, 56, 57, nil, nil, nil, - 60, nil, 58, 59, 61, 248, 249, 65, 66, nil, - nil, nil, nil, 247, 277, 281, 90, 89, 91, 92, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 41, - nil, nil, 94, 93, 84, 50, 86, 85, 88, 87, - 95, 96, nil, 82, 83, 38, 39, 37, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 202, nil, nil, - 206, nil, nil, 52, 53, nil, nil, 54, nil, 790, - nil, 245, nil, 40, nil, nil, nil, nil, nil, nil, - nil, 209, nil, nil, nil, nil, 81, 74, 76, 77, - 78, 79, nil, nil, nil, 75, 80, 67, 68, 64, - nil, 51, nil, nil, nil, 56, 57, nil, nil, nil, - 60, nil, 58, 59, 61, 248, 249, 65, 66, nil, - nil, nil, nil, 247, 277, 281, 90, 89, 91, 92, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 278, - nil, nil, 94, 93, 84, 50, 86, 85, 88, 87, - 95, 96, nil, 82, 83, nil, nil, 282, nil, 217, - 221, 226, 227, 228, 223, 225, 233, 234, 229, 230, - nil, 210, 211, nil, nil, 231, 232, 774, nil, nil, - 206, nil, nil, 52, 53, nil, nil, 54, nil, nil, - nil, 214, nil, 220, nil, 216, 215, 212, 213, 224, - 222, 218, nil, 219, nil, nil, 81, 74, 76, 77, - 78, 79, nil, nil, nil, 75, 80, 67, 68, 64, - 235, 51, nil, nil, nil, 56, 57, nil, nil, nil, - 60, nil, 58, 59, 61, 23, 24, 65, 66, nil, - nil, nil, nil, 22, 28, 27, 90, 89, 91, 92, - nil, nil, 17, nil, nil, nil, nil, nil, nil, 41, - nil, nil, 94, 93, 84, 50, 86, 85, 88, 87, - 95, 96, nil, 82, 83, 38, 39, 37, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 202, nil, nil, - 206, nil, nil, 52, 53, nil, nil, 54, nil, nil, - nil, nil, nil, 40, nil, nil, nil, nil, nil, nil, - nil, 18, nil, nil, nil, nil, 81, 74, 76, 77, - 78, 79, nil, nil, nil, 75, 80, 67, 68, 64, - nil, 51, nil, nil, nil, 56, 57, nil, nil, nil, - 60, nil, 58, 59, 61, 248, 249, 65, 66, nil, - nil, nil, nil, 247, 277, 281, 90, 89, 91, 92, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 41, - nil, nil, 94, 93, 84, 50, 86, 85, 88, 87, - 95, 96, nil, 82, 83, 38, 39, 37, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 202, nil, nil, - 206, nil, nil, 52, 53, nil, nil, 54, nil, 804, - nil, nil, nil, 40, nil, nil, nil, nil, nil, nil, - nil, 209, nil, nil, nil, nil, 81, 74, 76, 77, - 78, 79, nil, nil, nil, 75, 80, 67, 68, 64, - nil, 51, nil, nil, nil, 56, 57, nil, nil, nil, - 60, nil, 58, 59, 61, 248, 249, 65, 66, nil, - nil, nil, nil, 247, 277, 281, 90, 89, 91, 92, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 41, - nil, nil, 94, 93, 84, 50, 86, 85, 88, 87, - 95, 96, nil, 82, 83, 38, 39, 37, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 202, nil, nil, - 206, nil, nil, 52, 53, nil, nil, 54, nil, nil, - nil, nil, nil, 40, nil, nil, nil, nil, nil, nil, - nil, 209, nil, nil, nil, nil, 81, 74, 76, 77, - 78, 79, nil, nil, nil, 75, 80, 67, 68, 64, - nil, 51, nil, nil, nil, 56, 57, nil, nil, nil, - 60, nil, 58, 59, 61, 248, 249, 65, 66, nil, - nil, nil, nil, 247, 277, 281, 90, 89, 91, 92, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 41, - nil, nil, 94, 93, 84, 50, 86, 85, 88, 87, - 95, 96, nil, 82, 83, 38, 39, 37, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 202, nil, nil, - 206, nil, nil, 52, 53, nil, nil, 54, nil, nil, - nil, nil, nil, 40, nil, nil, nil, nil, nil, nil, - nil, 209, nil, nil, nil, nil, 81, 74, 76, 77, - 78, 79, nil, nil, nil, 75, 80, 67, 68, 64, - nil, 51, nil, nil, nil, 56, 57, nil, nil, nil, - 60, nil, 58, 59, 61, 248, 249, 65, 66, nil, - nil, nil, nil, 247, 277, 281, 90, 89, 91, 92, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 278, - nil, nil, 94, 93, 84, 50, 86, 85, 88, 87, - 95, 96, nil, 82, 83, nil, nil, 282, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 275, nil, nil, - 272, nil, nil, 52, 53, nil, nil, 54, nil, 823, - nil, 822, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 81, 74, 76, 77, - 78, 79, nil, nil, nil, 75, 80, 67, 68, 64, - nil, 51, nil, nil, nil, 56, 57, nil, nil, nil, - 60, nil, 58, 59, 61, 248, 249, 65, 66, nil, - nil, nil, nil, 247, 277, 281, 90, 89, 91, 92, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 41, - nil, nil, 94, 93, 84, 50, 86, 85, 88, 87, - 95, 96, nil, 82, 83, 38, 39, 37, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 202, nil, nil, - 206, nil, nil, 52, 53, nil, nil, 54, nil, nil, - nil, nil, nil, 40, nil, nil, nil, nil, nil, nil, - nil, 209, nil, nil, nil, nil, 81, 74, 76, 77, - 78, 79, nil, nil, nil, 75, 80, 67, 68, 64, - nil, 51, nil, nil, nil, 56, 57, nil, nil, nil, - 60, nil, 58, 59, 61, 248, 249, 65, 66, nil, - nil, nil, nil, 247, 277, 281, 90, 89, 91, 92, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 41, - nil, nil, 94, 93, 84, 50, 86, 85, 88, 87, - 95, 96, nil, 82, 83, 38, 39, 37, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 202, nil, nil, - 206, nil, nil, 52, 53, nil, nil, 54, nil, nil, - nil, nil, nil, 40, nil, nil, nil, nil, nil, nil, - nil, 209, nil, nil, nil, nil, 81, 74, 76, 77, - 78, 79, nil, nil, nil, 75, 80, 67, 68, 64, - nil, 51, nil, nil, nil, 56, 57, nil, nil, nil, - 60, nil, 58, 59, 61, 248, 249, 65, 66, nil, - nil, nil, nil, 247, 277, 281, 90, 89, 91, 92, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 41, - nil, nil, 94, 93, 84, 50, 86, 85, 88, 87, - 95, 96, nil, 82, 83, 38, 39, 37, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 202, nil, nil, - 206, nil, nil, 52, 53, nil, nil, 54, nil, nil, - nil, nil, nil, 40, nil, nil, nil, nil, nil, nil, - nil, 209, nil, nil, nil, nil, 81, 74, 76, 77, - 78, 79, nil, nil, nil, 75, 80, 67, 68, 64, - nil, 51, nil, nil, nil, 56, 57, nil, nil, nil, - 60, nil, 58, 59, 61, 248, 249, 65, 66, nil, - nil, nil, nil, 247, 277, 281, 90, 89, 91, 92, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 41, - nil, nil, 94, 93, 84, 50, 86, 85, 88, 87, - 95, 96, nil, 82, 83, 38, 39, 37, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 202, nil, nil, - 206, nil, nil, 52, 53, nil, nil, 54, nil, nil, - nil, nil, nil, 40, nil, nil, nil, nil, nil, nil, - nil, 209, nil, nil, nil, nil, 81, 74, 76, 77, - 78, 79, nil, nil, nil, 75, 80, 67, 68, 64, - nil, 51, nil, nil, nil, 56, 57, nil, nil, nil, - 60, nil, 58, 59, 61, 248, 249, 65, 66, nil, - nil, nil, nil, 247, 277, 281, 90, 89, 91, 92, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 278, - nil, nil, 94, 93, 84, 50, 86, 85, 88, 87, - 95, 96, nil, 82, 83, nil, nil, 282, nil, 217, - 221, 226, 227, 228, 223, 225, 233, 234, 229, 230, - nil, 210, 211, nil, nil, 231, 232, 774, nil, nil, - 206, nil, nil, 52, 53, nil, nil, 54, nil, nil, - nil, 214, nil, 220, nil, 216, 215, 212, 213, 224, - 222, 218, nil, 219, nil, nil, 81, 74, 76, 77, - 78, 79, nil, nil, nil, 75, 80, 67, 68, 64, - 235, 51, nil, nil, nil, 56, 57, nil, nil, nil, - 60, nil, 58, 59, 61, 248, 249, 65, 66, nil, - nil, nil, nil, 247, 28, 27, 90, 89, 91, 92, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 41, - nil, nil, 94, 93, 84, 50, 86, 85, 88, 87, - 95, 96, nil, 82, 83, 38, 39, 37, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 202, nil, nil, - 206, nil, nil, 52, 53, nil, nil, 54, nil, 301, - nil, nil, nil, 40, nil, nil, nil, nil, nil, nil, - nil, 209, nil, nil, nil, nil, 81, 74, 76, 77, - 78, 79, nil, nil, nil, 75, 80, 67, 68, 64, - nil, 51, nil, nil, nil, 56, 57, nil, nil, nil, - 60, nil, 58, 59, 61, 248, 249, 65, 66, nil, - nil, nil, nil, 247, 277, 281, 90, 89, 91, 92, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 278, - nil, nil, 94, 93, 84, 50, 86, 85, 88, 87, - 95, 96, nil, 82, 83, nil, nil, 282, nil, 217, - 221, 226, 227, 228, 223, 225, 233, 234, 229, 230, - nil, 210, 211, nil, nil, 231, 232, 774, nil, nil, - 206, nil, nil, 52, 53, nil, nil, 54, nil, nil, - nil, 214, nil, 220, nil, 216, 215, 212, 213, 224, - 222, 218, nil, 219, nil, nil, 81, 74, 76, 77, - 78, 79, nil, nil, nil, 75, 80, 67, 68, 64, - 235, 51, nil, nil, nil, 56, 57, nil, nil, nil, - 60, nil, 58, 59, 61, 248, 249, 65, 66, nil, - nil, nil, nil, 247, 277, 281, 90, 89, 91, 92, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 41, - nil, nil, 94, 93, 84, 50, 86, 85, 88, 87, - 95, 96, nil, 82, 83, 38, 39, 37, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 202, nil, nil, - 206, nil, nil, 52, 53, nil, nil, 54, nil, 866, - nil, 245, nil, 40, nil, nil, nil, nil, nil, nil, - nil, 209, nil, nil, nil, nil, 81, 74, 76, 77, - 78, 79, nil, nil, nil, 75, 80, 67, 68, 64, - nil, 51, nil, nil, nil, 56, 57, nil, nil, nil, - 60, nil, 58, 59, 61, 248, 249, 65, 66, nil, - nil, nil, nil, 247, 277, 281, 90, 89, 91, 92, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 41, - nil, nil, 94, 93, 84, 50, 86, 85, 88, 87, - 95, 96, nil, 82, 83, 38, 39, 37, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 202, nil, nil, - 206, nil, nil, 52, 53, nil, nil, 54, nil, 869, - nil, 245, nil, 40, nil, nil, nil, nil, nil, nil, - nil, 209, nil, nil, nil, nil, 81, 74, 76, 77, - 78, 79, nil, nil, nil, 75, 80, 67, 68, 64, - nil, 51, nil, nil, nil, 56, 57, nil, nil, nil, - 60, nil, 58, 59, 61, 248, 249, 65, 66, nil, - nil, nil, nil, 247, 277, 281, 90, 89, 91, 92, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 278, - nil, nil, 94, 93, 84, 50, 86, 85, 88, 87, - 95, 96, nil, 82, 83, nil, nil, 282, nil, 217, - 221, 226, 227, 228, 223, 225, 233, 234, 229, 230, - nil, 210, 211, nil, nil, 231, 232, 774, nil, nil, - 206, nil, nil, 52, 53, nil, nil, 54, nil, nil, - nil, 214, nil, 220, nil, 216, 215, 212, 213, 224, - 222, 218, nil, 219, nil, nil, 81, 74, 76, 77, - 78, 79, nil, nil, nil, 75, 80, 67, 68, 64, - 235, 51, nil, nil, nil, 56, 57, nil, nil, nil, - 60, nil, 58, 59, 61, 248, 249, 65, 66, nil, - nil, nil, nil, 247, 277, 281, 90, 89, 91, 92, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 41, - nil, nil, 94, 93, 84, 50, 86, 85, 88, 87, - 95, 96, nil, 82, 83, 38, 39, 37, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 202, nil, nil, - 206, nil, nil, 52, 53, nil, nil, 54, nil, nil, - nil, nil, nil, 40, nil, nil, nil, nil, nil, nil, - nil, 209, nil, nil, nil, nil, 81, 74, 76, 77, - 78, 79, nil, nil, nil, 75, 80, 67, 68, 64, - nil, 51, nil, nil, nil, 56, 57, nil, nil, nil, - 60, nil, 58, 59, 61, 248, 249, 65, 66, nil, - nil, nil, nil, 247, 277, 281, 90, 89, 91, 92, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 41, - nil, nil, 94, 93, 84, 50, 86, 85, 88, 87, - 95, 96, nil, 82, 83, 38, 39, 37, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 202, nil, nil, - 206, nil, nil, 52, 53, nil, nil, 54, nil, nil, - nil, nil, nil, 40, nil, nil, nil, nil, nil, nil, - nil, 209, nil, nil, nil, nil, 81, 74, 76, 77, - 78, 79, nil, nil, nil, 75, 80, 67, 68, 64, - nil, 51, nil, nil, nil, 56, 57, nil, nil, nil, - 60, nil, 58, 59, 61, 248, 249, 65, 66, nil, - nil, nil, nil, 247, 277, 281, 90, 89, 91, 92, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 278, - nil, nil, 94, 93, 84, 50, 86, 85, 88, 87, - 95, 96, nil, 82, 83, nil, nil, 282, nil, 217, - 221, 226, 227, 228, 223, 225, 233, 234, 229, 230, - nil, 210, 211, nil, nil, 231, 232, 774, nil, nil, - 206, nil, nil, 52, 53, nil, nil, 54, nil, nil, - nil, 214, nil, 220, nil, 216, 215, 212, 213, 224, - 222, 218, nil, 219, nil, nil, 81, 74, 76, 77, - 78, 79, nil, nil, nil, 75, 80, 67, 68, 64, - 235, 51, nil, nil, nil, 56, 57, nil, nil, nil, - 60, nil, 58, 59, 61, 248, 249, 65, 66, nil, - nil, nil, nil, 247, 277, 281, 90, 89, 91, 92, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 41, - nil, nil, 94, 93, 84, 50, 86, 85, 88, 87, - 95, 96, nil, 82, 83, 38, 39, 37, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 202, nil, nil, - 206, nil, nil, 52, 53, nil, nil, 54, nil, 891, - nil, 245, nil, 40, nil, nil, nil, nil, nil, nil, - nil, 209, nil, nil, nil, nil, 81, 74, 76, 77, - 78, 79, nil, nil, nil, 75, 80, 67, 68, 64, - nil, 51, nil, nil, nil, 56, 57, nil, nil, nil, - 60, nil, 58, 59, 61, 248, 249, 65, 66, nil, - nil, nil, nil, 247, 277, 281, 90, 89, 91, 92, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 278, - nil, nil, 94, 93, 84, 50, 86, 85, 88, 87, - 95, 96, nil, 82, 83, nil, nil, 282, nil, 217, - 221, 226, 227, 228, 223, 225, 233, 234, 229, 230, - nil, 210, 211, nil, nil, 231, 232, 774, nil, nil, - 206, nil, nil, 52, 53, nil, nil, 54, nil, nil, - nil, 214, nil, 220, nil, 216, 215, 212, 213, 224, - 222, 218, nil, 219, nil, nil, 81, 74, 76, 77, - 78, 79, nil, nil, nil, 75, 80, 67, 68, 64, - 235, 51, nil, nil, nil, 56, 57, nil, nil, nil, - 60, nil, 58, 59, 61, 248, 249, 65, 66, nil, - nil, nil, nil, 247, 277, 281, 90, 89, 91, 92, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 41, - nil, nil, 94, 93, 84, 50, 86, 85, 88, 87, - 95, 96, nil, 82, 83, 38, 39, 37, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 202, nil, nil, - 206, nil, nil, 52, 53, nil, nil, 54, nil, nil, - nil, nil, nil, 40, nil, nil, nil, nil, nil, nil, - nil, 209, nil, nil, nil, nil, 81, 74, 76, 77, - 78, 79, nil, nil, nil, 75, 80, 155, 166, 156, - 179, 152, 172, 162, 161, 182, 183, 177, 160, 159, - 154, 180, 184, 185, 164, 153, 167, 171, 173, 165, - 158, nil, nil, 174, 181, 176, 338, 337, 339, 336, - 151, 170, 169, nil, nil, nil, nil, nil, 150, 157, - 148, 149, 334, 335, 332, 113, 86, 85, 333, 87, - nil, nil, nil, nil, nil, 141, 142, nil, 139, 123, - 124, 125, nil, 128, 130, nil, nil, 126, nil, nil, - nil, nil, 143, 144, 131, 132, nil, nil, nil, nil, - nil, 343, nil, nil, nil, nil, nil, nil, nil, 136, - 135, nil, 122, 140, 138, 137, 133, 134, 129, 127, - 120, nil, 121, nil, nil, 145, 155, 166, 156, 179, - 152, 172, 162, 161, 182, 183, 177, 160, 159, 154, - 180, 184, 185, 164, 153, 167, 171, 173, 165, 158, - nil, nil, 174, 181, 176, 175, 168, 178, 163, 151, - 170, 169, nil, nil, nil, nil, nil, 150, 157, 148, - 149, 146, 147, 111, 113, nil, nil, 112, nil, nil, - nil, nil, nil, nil, 141, 142, nil, 139, 123, 124, - 125, nil, 128, 130, nil, nil, 126, nil, nil, nil, - nil, 143, 144, 131, 132, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 136, 135, - nil, 122, 140, 138, 137, 133, 134, 129, 127, 120, - nil, 121, nil, nil, 145, 217, 221, 226, 227, 228, - 223, 225, 233, 234, 229, 230, nil, 210, 211, nil, - nil, 231, 232, nil, nil, nil, -215, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 214, nil, 220, - nil, 216, 215, 212, 213, 224, 222, 218, nil, 219, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 235, nil, -215, 217, - 221, 226, 227, 228, 223, 225, 233, 234, 229, 230, - nil, 210, 211, nil, nil, 231, 232, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 214, nil, 220, nil, 216, 215, 212, 213, 224, - 222, 218, nil, 219, nil, nil, nil, nil, nil, nil, - nil, 378, 381, nil, nil, 379, nil, nil, nil, nil, - 235, 558, 141, 142, nil, 139, 123, 124, 125, nil, - 128, 130, nil, nil, 126, nil, nil, nil, nil, 143, - 144, 131, 132, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 136, 135, nil, 122, - 140, 138, 137, 133, 134, 129, 127, 120, nil, 121, - 383, 387, 145, nil, 385, nil, nil, nil, nil, nil, - nil, 141, 142, nil, 139, 123, 124, 125, nil, 128, - 130, nil, nil, 126, nil, nil, nil, nil, 143, 144, - 131, 132, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 136, 135, nil, 122, 140, - 138, 137, 133, 134, 129, 127, 120, nil, 121, 435, - 381, 145, nil, 436, nil, nil, nil, nil, nil, nil, - 141, 142, nil, 139, 123, 124, 125, nil, 128, 130, - nil, nil, 126, nil, nil, nil, nil, 143, 144, 131, - 132, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 136, 135, nil, 122, 140, 138, - 137, 133, 134, 129, 127, 120, nil, 121, 435, 381, - 145, nil, 436, nil, nil, nil, nil, nil, nil, 141, - 142, nil, 139, 123, 124, 125, nil, 128, 130, nil, - nil, 126, nil, nil, nil, nil, 143, 144, 131, 132, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 136, 135, nil, 122, 140, 138, 137, - 133, 134, 129, 127, 120, nil, 121, 552, 381, 145, - nil, 553, nil, nil, nil, nil, nil, nil, 141, 142, - nil, 139, 123, 124, 125, nil, 128, 130, nil, nil, - 126, nil, nil, nil, nil, 143, 144, 131, 132, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 136, 135, nil, 122, 140, 138, 137, 133, - 134, 129, 127, 120, nil, 121, 554, 387, 145, nil, - 555, nil, nil, nil, nil, nil, nil, 141, 142, nil, - 139, 123, 124, 125, nil, 128, 130, nil, nil, 126, - nil, nil, nil, nil, 143, 144, 131, 132, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 136, 135, nil, 122, 140, 138, 137, 133, 134, - 129, 127, 120, nil, 121, 596, 381, 145, nil, 597, - nil, nil, nil, nil, nil, nil, 141, 142, nil, 139, - 123, 124, 125, nil, 128, 130, nil, nil, 126, nil, - nil, nil, nil, 143, 144, 131, 132, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 136, 135, nil, 122, 140, 138, 137, 133, 134, 129, - 127, 120, nil, 121, 599, 387, 145, nil, 600, nil, - nil, nil, nil, nil, nil, 141, 142, nil, 139, 123, - 124, 125, nil, 128, 130, nil, nil, 126, nil, nil, - nil, nil, 143, 144, 131, 132, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 136, - 135, nil, 122, 140, 138, 137, 133, 134, 129, 127, - 120, nil, 121, 552, 381, 145, nil, 553, nil, nil, - nil, nil, nil, nil, 141, 142, nil, 139, 123, 124, - 125, nil, 128, 130, nil, nil, 126, nil, nil, nil, - nil, 143, 144, 131, 132, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 136, 135, - nil, 122, 140, 138, 137, 133, 134, 129, 127, 120, - nil, 121, 554, 387, 145, nil, 555, nil, nil, nil, - nil, nil, nil, 141, 142, nil, 139, 123, 124, 125, - nil, 128, 130, nil, nil, 126, nil, nil, nil, nil, - 143, 144, 131, 132, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 136, 135, nil, - 122, 140, 138, 137, 133, 134, 129, 127, 120, nil, - 121, nil, nil, 145, 217, 221, 226, 227, 228, 223, - 225, 233, 234, 229, 230, nil, 210, 211, nil, nil, - 231, 232, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 214, nil, 220, nil, - 216, 215, 212, 213, 224, 222, 218, nil, 219, nil, - nil, nil, nil, nil, nil, 632, 381, nil, nil, 633, - nil, nil, nil, nil, 293, 235, 141, 142, nil, 139, - 123, 124, 125, nil, 128, 130, nil, nil, 126, nil, - nil, nil, nil, 143, 144, 131, 132, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 136, 135, nil, 122, 140, 138, 137, 133, 134, 129, - 127, 120, nil, 121, 634, 387, 145, nil, 635, nil, - nil, nil, nil, nil, nil, 141, 142, nil, 139, 123, - 124, 125, nil, 128, 130, nil, nil, 126, nil, nil, - nil, nil, 143, 144, 131, 132, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 136, - 135, nil, 122, 140, 138, 137, 133, 134, 129, 127, - 120, nil, 121, 637, 387, 145, nil, 638, nil, nil, - nil, nil, nil, nil, 141, 142, nil, 139, 123, 124, - 125, nil, 128, 130, nil, nil, 126, nil, nil, nil, - nil, 143, 144, 131, 132, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 136, 135, - nil, 122, 140, 138, 137, 133, 134, 129, 127, 120, - nil, 121, 435, 381, 145, nil, 436, nil, nil, nil, - nil, nil, nil, 141, 142, nil, 139, 123, 124, 125, - nil, 128, 130, nil, nil, 126, nil, nil, nil, nil, - 143, 144, 131, 132, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 136, 135, nil, - 122, 140, 138, 137, 133, 134, 129, 127, 120, nil, - 121, 435, 381, 145, nil, 436, nil, nil, nil, nil, - nil, nil, 141, 142, nil, 139, 123, 124, 125, nil, - 128, 130, nil, nil, 126, nil, nil, nil, nil, 143, - 144, 131, 132, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 136, 135, nil, 122, - 140, 138, 137, 133, 134, 129, 127, 120, nil, 121, - 435, 381, 145, nil, 436, nil, nil, nil, nil, nil, - nil, 141, 142, nil, 139, 123, 124, 125, nil, 128, - 130, nil, nil, 126, nil, nil, nil, nil, 143, 144, - 131, 132, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 136, 135, nil, 122, 140, - 138, 137, 133, 134, 129, 127, 120, nil, 121, nil, - nil, 145, 217, 221, 226, 227, 228, 223, 225, 233, - 234, 229, 230, nil, 210, 211, nil, nil, 231, 232, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 214, nil, 220, nil, 216, 215, - 212, 213, 224, 222, 218, nil, 219, nil, 217, 221, - 226, 227, 228, 223, 225, 233, 234, 229, 230, nil, - 210, 211, 293, 235, 231, 232, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 214, nil, 220, nil, 216, 215, 212, 213, 224, 222, - 218, nil, 219, nil, nil, nil, 859, 381, nil, nil, - 860, nil, nil, nil, nil, nil, nil, 141, 142, 235, - 139, 123, 124, 125, nil, 128, 130, nil, nil, 126, - nil, nil, nil, nil, 143, 144, 131, 132, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 136, 135, nil, 122, 140, 138, 137, 133, 134, - 129, 127, 120, nil, 121, 861, 387, 145, nil, 862, - nil, nil, nil, nil, nil, nil, 141, 142, nil, 139, - 123, 124, 125, nil, 128, 130, nil, nil, 126, nil, - nil, nil, nil, 143, 144, 131, 132, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 136, 135, nil, 122, 140, 138, 137, 133, 134, 129, - 127, 120, nil, 121, nil, nil, 145 ] - -racc_action_check = [ - 383, 514, 514, 520, 520, 308, 757, 383, 383, 383, - 328, 442, 713, 383, 383, 315, 383, 584, 442, 713, - 309, 426, 349, 318, 448, 383, 324, 629, 502, 1, - 324, 201, 203, 605, 605, 383, 383, 632, 383, 383, - 383, 383, 383, 729, 800, 313, 396, 313, 633, 634, - 745, 757, 757, 757, 757, 426, 8, 593, 448, 584, - 442, 713, 9, 383, 383, 383, 383, 383, 383, 383, - 383, 383, 383, 383, 383, 383, 383, 201, 203, 383, - 383, 383, 55, 383, 349, 605, 596, 383, 10, 514, - 383, 520, 396, 493, 514, 383, 593, 383, 11, 383, - 383, 383, 383, 383, 383, 383, 385, 383, 383, 383, - 12, 634, 328, 385, 385, 385, 308, 315, 308, 385, - 385, 308, 385, 383, 383, 318, 383, 20, 383, 383, - 502, 309, 328, 309, 494, 597, 309, 328, 629, 632, - 629, 385, 385, 629, 385, 385, 385, 385, 385, 596, - 633, 634, 745, 552, 729, 800, 729, 800, 746, 729, - 800, 635, 805, 449, 805, 55, 26, 596, 553, 385, - 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, - 385, 385, 385, 279, 576, 385, 385, 385, 596, 385, - 493, 596, 493, 385, 72, 493, 385, 449, 597, 552, - 14, 385, 72, 385, 530, 385, 385, 385, 385, 385, - 385, 385, 50, 385, 553, 385, 597, 34, 576, 50, - 50, 50, 850, 635, 50, 50, 50, 26, 50, 385, - 385, 494, 385, 494, 385, 385, 494, 597, 50, 50, - 597, 15, 15, 14, 279, 322, 14, 50, 50, 26, - 50, 50, 50, 50, 50, 746, 3, 746, 37, 37, - 746, 3, 345, 635, 530, 530, 279, 850, 850, 850, - 850, 282, 282, 36, 530, 50, 50, 50, 50, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 41, - 323, 50, 50, 50, 322, 312, 50, 695, 97, 50, - 312, 322, 50, 50, 35, 50, 322, 50, 186, 50, - 322, 50, 50, 50, 50, 50, 50, 50, 434, 50, - 285, 50, 345, 345, 345, 434, 434, 434, 322, 378, - 434, 434, 434, 599, 434, 50, 50, 50, 50, 323, - 50, 346, 25, 695, 434, 13, 323, 35, 202, 25, - 35, 323, 13, 434, 434, 323, 434, 434, 434, 434, - 434, 13, 332, 285, 299, 637, 285, 299, 859, 332, - 204, 437, 378, 323, 347, 378, 379, 542, 437, 437, - 437, 205, 599, 437, 437, 437, 333, 437, 860, 599, - 241, 110, 434, 333, 599, 110, 110, 437, 599, 434, - 348, 346, 346, 346, 434, 434, 437, 437, 350, 437, - 437, 437, 437, 437, 637, 242, 599, 859, 861, 379, - 542, 637, 379, 542, 859, 334, 637, 434, 246, 859, - 637, 42, 334, 859, 347, 347, 347, 860, 42, 300, - 402, 434, 300, 434, 860, 437, 434, 42, 637, 860, - 513, 859, 437, 860, 255, 513, 335, 437, 437, 200, - 348, 348, 348, 335, 296, 296, 200, 861, 350, 350, - 350, 860, 402, 642, 861, 200, 402, 402, 642, 861, - 437, 336, 647, 861, 647, 647, 647, 647, 336, 554, - 554, 554, 266, 554, 437, 648, 437, 554, 554, 437, - 648, 861, 554, 268, 554, 554, 554, 554, 554, 554, - 554, 303, 307, 307, 303, 554, 554, 554, 554, 554, - 554, 554, 421, 617, 617, 337, 338, 647, 647, 647, - 647, 554, 337, 338, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 339, 554, 554, 554, 554, 554, - 273, 339, 760, 760, 421, 274, 341, 273, 421, 421, - 421, 421, 274, 341, 305, 269, 273, 305, 270, 554, - 554, 274, 554, 554, 275, 554, 554, 872, 872, 554, - 276, 554, 277, 554, 278, 554, 516, 276, 516, 516, - 516, 516, 281, 554, 286, 287, 276, 290, 554, 554, - 554, 554, 554, 554, 294, 295, 298, 554, 554, 555, - 555, 555, 403, 555, 302, 304, 554, 555, 555, 314, - 317, 319, 555, 516, 555, 555, 555, 555, 555, 555, - 555, 516, 516, 516, 516, 555, 555, 555, 555, 555, - 555, 555, 422, 364, 403, 365, 370, 373, 403, 403, - 377, 555, 384, 404, 555, 555, 555, 555, 555, 555, - 555, 555, 555, 555, 405, 555, 555, 555, 555, 555, - 288, 406, 407, 431, 422, 316, 440, 288, 422, 422, - 422, 422, 316, 441, 443, 444, 288, 450, 452, 555, - 555, 316, 555, 555, 453, 555, 555, 457, 462, 555, - 326, 555, 472, 555, 475, 555, 755, 326, 755, 755, - 755, 755, 489, 555, 495, 496, 326, 528, 555, 555, - 555, 555, 555, 555, 533, 461, 545, 555, 555, 60, - 60, 60, 461, 60, 549, 556, 555, 60, 60, 563, - 565, 461, 60, 568, 60, 60, 60, 60, 60, 60, - 60, 755, 755, 755, 755, 60, 60, 60, 60, 60, - 60, 60, 524, 524, 60, 524, 524, 524, 570, 368, - 578, 60, 579, 585, 60, 60, 60, 60, 60, 60, - 60, 60, 60, 60, 588, 60, 60, 60, 60, 60, - 368, 368, 368, 368, 368, 368, 368, 368, 368, 368, - 368, 505, 368, 368, 723, 595, 368, 368, 505, 60, - 598, 723, 60, 601, 603, 60, 60, 505, 604, 60, - 723, 606, 368, 609, 368, 60, 368, 368, 368, 368, - 368, 368, 368, 60, 368, 610, 613, 619, 60, 60, - 60, 60, 60, 60, 625, 627, 628, 60, 60, 631, - 60, 368, 640, 368, 600, 60, 99, 99, 99, 99, - 99, 600, 645, 649, 99, 99, 600, 650, 651, 99, - 600, 99, 99, 99, 99, 99, 99, 99, 657, 662, - 665, 667, 99, 99, 99, 99, 99, 99, 99, 680, - 698, 99, 4, 4, 4, 4, 4, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, - 99, 638, 99, 99, 99, 99, 99, 772, 638, 773, - 702, 775, 827, 638, 772, 878, 773, 638, 775, 827, - 703, 704, 878, 772, 707, 773, 99, 775, 827, 99, - 711, 878, 99, 99, 712, 714, 99, 862, 99, 718, - 720, 721, 99, 819, 862, 819, 819, 819, 819, 862, - 99, 722, 734, 862, 737, 99, 99, 99, 99, 99, - 99, 748, 752, 753, 99, 99, 699, 699, 699, 766, - 699, 774, 99, 776, 699, 699, 777, 784, 785, 699, - 819, 699, 699, 699, 699, 699, 699, 699, 819, 819, - 819, 819, 699, 699, 699, 699, 699, 699, 699, 108, - 108, 108, 108, 108, 786, 789, 802, 803, 699, 808, - 810, 699, 699, 699, 699, 699, 699, 699, 699, 699, - 699, 811, 699, 699, 812, 815, 699, 400, 400, 400, - 400, 400, 400, 400, 400, 400, 400, 400, 816, 400, - 400, 828, 835, 400, 400, 838, 699, 839, 856, 699, - 857, 858, 699, 699, 867, 873, 699, 874, 875, 400, - 876, 400, 880, 400, 400, 400, 400, 400, 400, 400, - 883, 400, 894, nil, nil, 699, 699, 699, 699, 699, - 699, nil, nil, nil, 699, 699, nil, 823, 823, 823, - 699, 823, nil, nil, nil, 823, 823, nil, nil, nil, - 823, nil, 823, 823, 823, 823, 823, 823, 823, nil, - nil, nil, nil, 823, 823, 823, 823, 823, 823, 823, - 352, 352, 352, 352, 352, nil, nil, 557, nil, 823, - nil, nil, 823, 823, 823, 823, 823, 823, 823, 823, - 823, 823, nil, 823, 823, nil, nil, 823, 557, 557, - 557, 557, 557, 557, 557, 557, 557, 557, 557, nil, - 557, 557, nil, nil, 557, 557, nil, 823, nil, nil, - 823, nil, nil, 823, 823, nil, nil, 823, nil, nil, - 557, nil, 557, nil, 557, 557, 557, 557, 557, 557, - 557, nil, 557, nil, nil, nil, 823, 823, 823, 823, - 823, 823, nil, nil, nil, 823, 823, nil, nil, 557, - nil, 823, 0, 0, 0, 0, 0, 0, nil, nil, - nil, 0, 0, nil, nil, nil, 0, nil, 0, 0, - 0, 0, 0, 0, 0, nil, nil, nil, nil, 0, - 0, 0, 0, 0, 0, 0, nil, nil, 0, nil, - nil, nil, nil, nil, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, nil, 0, - 0, 0, 0, 0, 401, 401, 401, 401, 401, 401, - 401, 401, 401, 401, 401, nil, 401, 401, nil, nil, - 401, 401, nil, 0, nil, nil, 0, nil, nil, 0, - 0, nil, nil, 0, nil, 0, 401, nil, 401, 0, - 401, 401, 401, 401, 401, 401, 401, 0, 401, nil, - nil, nil, 0, 0, 0, 0, 0, 0, nil, nil, - nil, 0, 0, 30, 30, 30, 30, 30, 30, nil, - nil, nil, 30, 30, nil, nil, nil, 30, nil, 30, - 30, 30, 30, 30, 30, 30, nil, nil, nil, nil, - 30, 30, 30, 30, 30, 30, 30, nil, nil, 30, - nil, nil, nil, nil, nil, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, nil, - 30, 30, 30, 30, 30, 411, 411, 411, 411, 411, - 411, 411, nil, nil, 411, 411, nil, nil, nil, nil, - nil, 411, 411, nil, 30, nil, nil, 30, nil, nil, - 30, 30, nil, nil, 30, nil, 30, 411, nil, 411, - 30, 411, 411, 411, 411, 411, 411, 411, 30, 411, - nil, nil, nil, 30, 30, 30, 30, 30, 30, nil, - nil, nil, 30, 30, 51, 51, 51, 51, 51, 51, - nil, nil, nil, 51, 51, nil, nil, nil, 51, nil, - 51, 51, 51, 51, 51, 51, 51, nil, nil, nil, - nil, 51, 51, 51, 51, 51, 51, 51, nil, nil, - 51, nil, nil, nil, nil, nil, 51, 51, 51, 51, - 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, - nil, 51, 51, 51, 51, 51, 412, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 412, 412, nil, 51, nil, nil, 51, nil, - nil, 51, 51, nil, nil, 51, nil, 51, 412, nil, - 412, 51, 412, 412, 412, 412, nil, nil, 412, 51, - 412, nil, nil, nil, 51, 51, 51, 51, 51, 51, - nil, nil, nil, 51, 51, 188, 188, 188, 188, 188, - 188, nil, nil, nil, 188, 188, nil, nil, nil, 188, - nil, 188, 188, 188, 188, 188, 188, 188, nil, nil, - nil, nil, 188, 188, 188, 188, 188, 188, 188, nil, - nil, 188, nil, nil, nil, nil, nil, 188, 188, 188, - 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, - 188, nil, 188, 188, 188, 188, 188, 413, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 413, 413, nil, 188, nil, nil, 188, - nil, nil, 188, 188, nil, nil, 188, nil, 188, 413, - nil, 413, 188, 413, 413, 413, 413, nil, nil, 413, - 188, 413, nil, nil, nil, 188, 188, 188, 188, 188, - 188, nil, nil, nil, 188, 188, 189, 189, 189, 189, - 189, 189, nil, nil, nil, 189, 189, nil, nil, nil, - 189, nil, 189, 189, 189, 189, 189, 189, 189, nil, - nil, nil, nil, 189, 189, 189, 189, 189, 189, 189, - nil, nil, 189, nil, nil, nil, nil, nil, 189, 189, - 189, 189, 189, 189, 189, 189, 189, 189, 189, 189, - 189, 189, nil, 189, 189, 189, 189, 189, 414, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 414, 414, nil, 189, nil, nil, - 189, nil, nil, 189, 189, nil, nil, 189, nil, 189, - 414, nil, 414, 189, 414, 414, 414, 414, nil, nil, - 414, 189, 414, nil, nil, nil, 189, 189, 189, 189, - 189, 189, nil, nil, nil, 189, 189, 206, 206, 206, - 206, 206, 206, nil, nil, nil, 206, 206, nil, nil, - nil, 206, nil, 206, 206, 206, 206, 206, 206, 206, - nil, nil, nil, nil, 206, 206, 206, 206, 206, 206, - 206, nil, nil, 206, nil, nil, nil, nil, nil, 206, - 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, - 206, 206, 206, nil, 206, 206, 206, 206, 206, 415, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 415, 415, nil, 206, nil, - nil, 206, nil, nil, 206, 206, nil, nil, 206, nil, - 206, 415, nil, 415, 206, 415, 415, 415, 415, nil, - nil, 415, 206, 415, nil, nil, nil, 206, 206, 206, - 206, 206, 206, nil, nil, nil, 206, 206, 267, 267, - 267, 267, 267, 267, nil, nil, nil, 267, 267, nil, - nil, nil, 267, nil, 267, 267, 267, 267, 267, 267, - 267, nil, nil, nil, nil, 267, 267, 267, 267, 267, - 267, 267, nil, nil, 267, nil, nil, nil, nil, nil, - 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, - 267, 267, 267, 267, nil, 267, 267, 267, 267, 267, - 416, 416, 416, 416, 416, 416, 416, nil, nil, 416, - 416, nil, nil, nil, nil, nil, 416, 416, nil, 267, - nil, nil, 267, nil, nil, 267, 267, nil, nil, 267, - nil, 267, 416, nil, 416, 267, 416, 416, 416, 416, - 416, 416, 416, 267, 416, nil, nil, nil, 267, 267, - 267, 267, 267, 267, nil, nil, nil, 267, 267, 272, - 272, 272, 272, 272, 272, nil, nil, nil, 272, 272, - nil, nil, nil, 272, nil, 272, 272, 272, 272, 272, - 272, 272, nil, nil, nil, nil, 272, 272, 272, 272, - 272, 272, 272, nil, nil, 272, nil, nil, nil, nil, - nil, 272, 272, 272, 272, 272, 272, 272, 272, 272, - 272, 272, 272, 272, 272, nil, 272, 272, 272, 272, - 272, 417, 417, 417, 417, 417, 417, 417, nil, nil, - 417, 417, nil, nil, nil, nil, nil, 417, 417, nil, - 272, nil, nil, 272, nil, nil, 272, 272, nil, nil, - 272, nil, 272, 417, nil, 417, 272, 417, 417, 417, - 417, 417, 417, 417, 272, 417, nil, nil, nil, 272, - 272, 272, 272, 272, 272, nil, nil, nil, 272, 272, - 488, 488, 488, 488, 488, 488, nil, nil, nil, 488, - 488, nil, nil, nil, 488, nil, 488, 488, 488, 488, - 488, 488, 488, nil, nil, nil, nil, 488, 488, 488, - 488, 488, 488, 488, nil, nil, 488, nil, nil, nil, - nil, nil, 488, 488, 488, 488, 488, 488, 488, 488, - 488, 488, 488, 488, 488, 488, nil, 488, 488, 488, - 488, 488, 418, 418, 418, 418, 418, 418, 418, nil, - nil, 418, 418, nil, nil, nil, nil, nil, 418, 418, - nil, 488, nil, nil, 488, nil, nil, 488, 488, nil, - nil, 488, nil, 488, 418, nil, 418, 488, 418, 418, - 418, 418, 418, 418, 418, 488, 418, nil, nil, nil, - 488, 488, 488, 488, 488, 488, nil, nil, nil, 488, - 488, 492, 492, 492, 492, 492, 492, nil, nil, nil, - 492, 492, nil, nil, nil, 492, nil, 492, 492, 492, - 492, 492, 492, 492, nil, nil, nil, nil, 492, 492, - 492, 492, 492, 492, 492, nil, nil, 492, nil, nil, - nil, nil, nil, 492, 492, 492, 492, 492, 492, 492, - 492, 492, 492, 492, 492, 492, 492, nil, 492, 492, - 492, 492, 492, 419, 419, 419, 419, 419, 419, 419, - nil, nil, 419, 419, nil, nil, nil, nil, nil, 419, - 419, nil, 492, nil, nil, 492, nil, nil, 492, 492, - nil, nil, 492, nil, 492, 419, nil, 419, 492, 419, - 419, 419, 419, 419, 419, 419, 492, 419, nil, nil, - nil, 492, 492, 492, 492, 492, 492, nil, nil, nil, - 492, 492, 497, 497, 497, 497, 497, 497, nil, nil, - nil, 497, 497, nil, nil, nil, 497, nil, 497, 497, - 497, 497, 497, 497, 497, nil, nil, nil, nil, 497, - 497, 497, 497, 497, 497, 497, nil, nil, 497, nil, - nil, nil, nil, nil, 497, 497, 497, 497, 497, 497, - 497, 497, 497, 497, 497, 497, 497, 497, nil, 497, - 497, 497, 497, 497, 420, 420, 420, 420, 420, 420, - 420, nil, nil, 420, 420, nil, nil, nil, nil, nil, - 420, 420, nil, 497, nil, nil, 497, nil, nil, 497, - 497, nil, nil, 497, nil, 497, 420, nil, 420, 497, - 420, 420, 420, 420, 420, 420, 420, 497, 420, nil, - nil, nil, 497, 497, 497, 497, 497, 497, nil, nil, - nil, 497, 497, 515, 515, 515, 515, 515, 515, nil, - nil, nil, 515, 515, nil, nil, nil, 515, nil, 515, - 515, 515, 515, 515, 515, 515, nil, nil, nil, nil, - 515, 515, 515, 515, 515, 515, 515, nil, nil, 515, - nil, nil, nil, nil, nil, 515, 515, 515, 515, 515, - 515, 515, 515, 515, 515, 515, 515, 515, 515, nil, - 515, 515, 515, 515, 515, 423, 423, 423, 423, 423, - 423, 423, nil, nil, 423, 423, nil, nil, nil, nil, - nil, 423, 423, nil, 515, nil, nil, 515, nil, nil, - 515, 515, nil, nil, 515, nil, 515, 423, nil, 423, - 515, 423, 423, 423, 423, 423, 423, 423, 515, 423, - nil, nil, nil, 515, 515, 515, 515, 515, 515, nil, - nil, nil, 515, 515, 561, 561, 561, 561, 561, 561, - nil, nil, nil, 561, 561, nil, nil, nil, 561, nil, - 561, 561, 561, 561, 561, 561, 561, nil, nil, nil, - nil, 561, 561, 561, 561, 561, 561, 561, nil, nil, - 561, nil, nil, nil, nil, nil, 561, 561, 561, 561, - 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, - nil, 561, 561, 561, 561, 561, 424, 424, 424, 424, - 424, 424, 424, 424, nil, 424, 424, nil, nil, nil, - nil, nil, 424, 424, nil, 561, nil, nil, 561, nil, - nil, 561, 561, nil, nil, 561, nil, 561, 424, nil, - 424, 561, 424, 424, 424, 424, 424, 424, 424, 561, - 424, nil, nil, nil, 561, 561, 561, 561, 561, 561, - nil, nil, nil, 561, 561, 590, 590, 590, 590, 590, - 590, nil, nil, nil, 590, 590, nil, nil, nil, 590, - nil, 590, 590, 590, 590, 590, 590, 590, nil, nil, - nil, nil, 590, 590, 590, 590, 590, 590, 590, nil, - nil, 590, nil, nil, nil, nil, nil, 590, 590, 590, - 590, 590, 590, 590, 590, 590, 590, 590, 590, 590, - 590, nil, 590, 590, 590, 590, 590, 408, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 408, 408, nil, 590, nil, nil, 590, - nil, nil, 590, 590, nil, nil, 590, nil, 590, 408, - nil, 408, 590, 408, 408, 408, 408, nil, nil, nil, - 590, nil, nil, nil, nil, 590, 590, 590, 590, 590, - 590, nil, nil, nil, 590, 590, 591, 591, 591, 591, - 591, 591, nil, nil, nil, 591, 591, nil, nil, nil, - 591, nil, 591, 591, 591, 591, 591, 591, 591, nil, - nil, nil, nil, 591, 591, 591, 591, 591, 591, 591, - nil, nil, 591, nil, nil, nil, nil, nil, 591, 591, - 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, - 591, 591, nil, 591, 591, 591, 591, 591, 409, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 409, 409, nil, 591, nil, nil, - 591, nil, nil, 591, 591, nil, nil, 591, nil, 591, - 409, nil, 409, 591, 409, 409, 409, 409, nil, nil, - nil, 591, nil, nil, nil, nil, 591, 591, 591, 591, - 591, 591, nil, nil, nil, 591, 591, 608, 608, 608, - 608, 608, 608, nil, nil, nil, 608, 608, nil, nil, - nil, 608, nil, 608, 608, 608, 608, 608, 608, 608, - nil, nil, nil, nil, 608, 608, 608, 608, 608, 608, - 608, nil, nil, 608, nil, nil, nil, nil, nil, 608, - 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, - 608, 608, 608, nil, 608, 608, 608, 608, 608, 410, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 410, 410, nil, 608, nil, - nil, 608, nil, nil, 608, 608, nil, nil, 608, nil, - 608, 410, nil, nil, 608, 410, 410, 410, 410, nil, - nil, nil, 608, nil, nil, nil, nil, 608, 608, 608, - 608, 608, 608, nil, nil, nil, 608, 608, 641, 641, - 641, 641, 641, 641, nil, nil, nil, 641, 641, nil, - nil, nil, 641, nil, 641, 641, 641, 641, 641, 641, - 641, nil, nil, nil, nil, 641, 641, 641, 641, 641, - 641, 641, nil, nil, 641, nil, nil, nil, nil, nil, - 641, 641, 641, 641, 641, 641, 641, 641, 641, 641, - 641, 641, 641, 641, nil, 641, 641, 641, 641, 641, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 641, - nil, nil, 641, nil, nil, 641, 641, nil, nil, 641, - nil, 641, nil, nil, nil, 641, nil, nil, nil, nil, - nil, nil, nil, 641, nil, nil, nil, nil, 641, 641, - 641, 641, 641, 641, nil, nil, nil, 641, 641, 646, - 646, 646, 646, 646, 646, nil, nil, nil, 646, 646, - nil, nil, nil, 646, nil, 646, 646, 646, 646, 646, - 646, 646, nil, nil, nil, nil, 646, 646, 646, 646, - 646, 646, 646, nil, nil, 646, nil, nil, nil, nil, - nil, 646, 646, 646, 646, 646, 646, 646, 646, 646, - 646, 646, 646, 646, 646, nil, 646, 646, 646, 646, - 646, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 646, nil, nil, 646, nil, nil, 646, 646, nil, nil, - 646, nil, 646, nil, nil, nil, 646, nil, nil, nil, - nil, nil, nil, nil, 646, nil, nil, nil, nil, 646, - 646, 646, 646, 646, 646, nil, nil, nil, 646, 646, - 673, 673, 673, 673, 673, 673, nil, nil, nil, 673, - 673, nil, nil, nil, 673, nil, 673, 673, 673, 673, - 673, 673, 673, nil, nil, nil, nil, 673, 673, 673, - 673, 673, 673, 673, nil, nil, 673, nil, nil, nil, - nil, nil, 673, 673, 673, 673, 673, 673, 673, 673, - 673, 673, 673, 673, 673, 673, nil, 673, 673, 673, - 673, 673, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 673, nil, nil, 673, nil, nil, 673, 673, nil, - nil, 673, nil, 673, nil, nil, nil, 673, nil, nil, - nil, nil, nil, nil, nil, 673, nil, nil, nil, nil, - 673, 673, 673, 673, 673, 673, nil, nil, nil, 673, - 673, 708, 708, 708, 708, 708, 708, nil, nil, nil, - 708, 708, nil, nil, nil, 708, nil, 708, 708, 708, - 708, 708, 708, 708, nil, nil, nil, nil, 708, 708, - 708, 708, 708, 708, 708, nil, nil, 708, nil, nil, - nil, nil, nil, 708, 708, 708, 708, 708, 708, 708, - 708, 708, 708, 708, 708, 708, 708, nil, 708, 708, - 708, 708, 708, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 708, nil, nil, 708, nil, nil, 708, 708, - nil, nil, 708, nil, 708, nil, nil, nil, 708, nil, - nil, nil, nil, nil, nil, nil, 708, nil, nil, nil, - nil, 708, 708, 708, 708, 708, 708, nil, nil, nil, - 708, 708, 726, 726, 726, 726, 726, 726, nil, nil, - nil, 726, 726, nil, nil, nil, 726, nil, 726, 726, - 726, 726, 726, 726, 726, nil, nil, nil, nil, 726, - 726, 726, 726, 726, 726, 726, nil, nil, 726, nil, - nil, nil, nil, nil, 726, 726, 726, 726, 726, 726, - 726, 726, 726, 726, 726, 726, 726, 726, nil, 726, - 726, 726, 726, 726, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 726, nil, nil, 726, nil, nil, 726, - 726, nil, nil, 726, nil, 726, nil, nil, nil, 726, - nil, nil, nil, nil, nil, nil, nil, 726, nil, nil, - nil, nil, 726, 726, 726, 726, 726, 726, nil, nil, - nil, 726, 726, 738, 738, 738, 738, 738, 738, nil, - nil, nil, 738, 738, nil, nil, nil, 738, nil, 738, - 738, 738, 738, 738, 738, 738, nil, nil, nil, nil, - 738, 738, 738, 738, 738, 738, 738, nil, nil, 738, - nil, nil, nil, nil, nil, 738, 738, 738, 738, 738, - 738, 738, 738, 738, 738, 738, 738, 738, 738, nil, - 738, 738, 738, 738, 738, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 738, nil, nil, 738, nil, nil, - 738, 738, nil, nil, 738, nil, 738, nil, nil, nil, - 738, nil, nil, nil, nil, nil, nil, nil, 738, nil, - nil, nil, nil, 738, 738, 738, 738, 738, 738, nil, - nil, nil, 738, 738, 739, 739, 739, 739, 739, 739, - nil, nil, nil, 739, 739, nil, nil, nil, 739, nil, - 739, 739, 739, 739, 739, 739, 739, nil, nil, nil, - nil, 739, 739, 739, 739, 739, 739, 739, nil, nil, - 739, nil, nil, nil, nil, nil, 739, 739, 739, 739, - 739, 739, 739, 739, 739, 739, 739, 739, 739, 739, - nil, 739, 739, 739, 739, 739, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 739, nil, nil, 739, nil, - nil, 739, 739, nil, nil, 739, nil, 739, nil, nil, - nil, 739, nil, nil, nil, nil, nil, nil, nil, 739, - nil, nil, nil, nil, 739, 739, 739, 739, 739, 739, - nil, nil, nil, 739, 739, 743, 743, 743, 743, 743, - 743, nil, nil, nil, 743, 743, nil, nil, nil, 743, - nil, 743, 743, 743, 743, 743, 743, 743, nil, nil, - nil, nil, 743, 743, 743, 743, 743, 743, 743, nil, - nil, 743, nil, nil, nil, nil, nil, 743, 743, 743, - 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, - 743, nil, 743, 743, 743, 743, 743, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 743, nil, nil, 743, - nil, nil, 743, 743, nil, nil, 743, nil, 743, nil, - nil, nil, 743, nil, nil, nil, nil, nil, nil, nil, - 743, nil, nil, nil, nil, 743, 743, 743, 743, 743, - 743, nil, nil, nil, 743, 743, 750, 750, 750, 750, - 750, 750, nil, nil, nil, 750, 750, nil, nil, nil, - 750, nil, 750, 750, 750, 750, 750, 750, 750, nil, - nil, nil, nil, 750, 750, 750, 750, 750, 750, 750, - nil, nil, 750, nil, nil, nil, nil, nil, 750, 750, - 750, 750, 750, 750, 750, 750, 750, 750, 750, 750, - 750, 750, nil, 750, 750, 750, 750, 750, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 750, nil, nil, - 750, nil, nil, 750, 750, nil, nil, 750, nil, 750, - nil, nil, nil, 750, nil, nil, nil, nil, nil, nil, - nil, 750, nil, nil, nil, nil, 750, 750, 750, 750, - 750, 750, nil, nil, nil, 750, 750, 796, 796, 796, - 796, 796, 796, nil, nil, nil, 796, 796, nil, nil, - nil, 796, nil, 796, 796, 796, 796, 796, 796, 796, - nil, nil, nil, nil, 796, 796, 796, 796, 796, 796, - 796, nil, nil, 796, nil, nil, nil, nil, nil, 796, - 796, 796, 796, 796, 796, 796, 796, 796, 796, 796, - 796, 796, 796, nil, 796, 796, 796, 796, 796, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 796, nil, - nil, 796, nil, nil, 796, 796, nil, nil, 796, nil, - 796, nil, nil, nil, 796, nil, nil, nil, nil, nil, - nil, nil, 796, nil, nil, nil, nil, 796, 796, 796, - 796, 796, 796, nil, nil, nil, 796, 796, 840, 840, - 840, 840, 840, 840, nil, nil, nil, 840, 840, nil, - nil, nil, 840, nil, 840, 840, 840, 840, 840, 840, - 840, nil, nil, nil, nil, 840, 840, 840, 840, 840, - 840, 840, nil, nil, 840, nil, nil, nil, nil, nil, - 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, - 840, 840, 840, 840, nil, 840, 840, 840, 840, 840, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 840, - nil, nil, 840, nil, nil, 840, 840, nil, nil, 840, - nil, 840, nil, nil, nil, 840, nil, nil, nil, nil, - nil, nil, nil, 840, nil, nil, nil, nil, 840, 840, - 840, 840, 840, 840, nil, nil, nil, 840, 840, 847, - 847, 847, 847, 847, 847, nil, nil, nil, 847, 847, - nil, nil, nil, 847, nil, 847, 847, 847, 847, 847, - 847, 847, nil, nil, nil, nil, 847, 847, 847, 847, - 847, 847, 847, nil, nil, 847, nil, nil, nil, nil, - nil, 847, 847, 847, 847, 847, 847, 847, 847, 847, - 847, 847, 847, 847, 847, nil, 847, 847, 847, 847, - 847, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 847, nil, nil, 847, nil, nil, 847, 847, nil, nil, - 847, nil, 847, nil, nil, nil, 847, nil, nil, nil, - nil, nil, nil, nil, 847, nil, nil, nil, nil, 847, - 847, 847, 847, 847, 847, nil, nil, nil, 847, 847, - 854, 854, 854, 854, 854, 854, nil, nil, nil, 854, - 854, nil, nil, nil, 854, nil, 854, 854, 854, 854, - 854, 854, 854, nil, nil, nil, nil, 854, 854, 854, - 854, 854, 854, 854, nil, nil, 854, nil, nil, nil, - nil, nil, 854, 854, 854, 854, 854, 854, 854, 854, - 854, 854, 854, 854, 854, 854, nil, 854, 854, 854, - 854, 854, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 854, nil, nil, 854, nil, nil, 854, 854, nil, - nil, 854, nil, 854, nil, nil, nil, 854, nil, nil, - nil, nil, nil, nil, nil, 854, nil, nil, nil, nil, - 854, 854, 854, 854, 854, 854, nil, nil, nil, 854, - 854, 5, 5, 5, 5, 5, nil, nil, nil, 5, - 5, nil, nil, nil, 5, nil, 5, 5, 5, 5, - 5, 5, 5, nil, nil, nil, nil, 5, 5, 5, - 5, 5, 5, 5, nil, nil, 5, nil, nil, nil, - nil, nil, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, nil, 5, 5, 5, - 5, 5, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 5, nil, nil, 5, nil, nil, 5, 5, nil, - nil, 5, nil, 5, nil, nil, nil, 5, nil, nil, - nil, nil, nil, nil, nil, 5, nil, nil, nil, nil, - 5, 5, 5, 5, 5, 5, nil, nil, nil, 5, - 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, nil, nil, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, nil, nil, nil, - nil, nil, 6, 6, 6, 6, 6, 6, 6, 6, - 6, nil, 6, nil, nil, nil, nil, nil, nil, 6, - 6, nil, 6, 6, 6, 6, nil, 6, 6, nil, - nil, 6, nil, nil, nil, nil, 6, 6, 6, 6, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 6, 6, nil, 6, 6, 6, 6, - 6, 6, 6, 6, 6, nil, 6, nil, nil, 6, - 6, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, nil, nil, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, nil, nil, nil, - nil, nil, 7, 7, 7, 7, 7, 7, 7, 7, - nil, nil, 7, nil, nil, nil, nil, nil, nil, 7, - 7, nil, 7, 7, 7, 7, nil, 7, 7, nil, - nil, 7, nil, nil, nil, nil, 7, 7, 7, 7, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 7, 7, nil, 7, 7, 7, 7, - 7, 7, 7, 7, 7, nil, 7, nil, nil, 7, - 7, nil, nil, 17, 17, 17, nil, 17, nil, nil, - 7, 17, 17, nil, nil, nil, 17, nil, 17, 17, - 17, 17, 17, 17, 17, nil, nil, nil, nil, 17, - 17, 17, 17, 17, 17, 17, nil, nil, 17, nil, - nil, nil, nil, nil, nil, 17, nil, nil, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, nil, 17, - 17, 17, 17, 17, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 17, nil, nil, 17, nil, nil, 17, - 17, nil, nil, 17, nil, nil, nil, nil, nil, 17, - nil, nil, nil, nil, nil, nil, nil, 17, nil, nil, - nil, nil, 17, 17, 17, 17, 17, 17, nil, nil, - nil, 17, 17, 18, 18, 18, nil, 18, nil, nil, - nil, 18, 18, nil, nil, nil, 18, nil, 18, 18, - 18, 18, 18, 18, 18, nil, nil, nil, nil, 18, - 18, 18, 18, 18, 18, 18, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 18, nil, nil, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, nil, 18, - 18, 18, 18, 18, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 18, nil, nil, 18, nil, nil, 18, - 18, nil, nil, 18, nil, nil, nil, nil, nil, 18, - nil, nil, nil, nil, nil, nil, nil, 18, nil, nil, - nil, nil, 18, 18, 18, 18, 18, 18, nil, nil, - nil, 18, 18, 22, 22, 22, nil, 22, nil, nil, - nil, 22, 22, nil, nil, nil, 22, nil, 22, 22, - 22, 22, 22, 22, 22, nil, nil, nil, nil, 22, - 22, 22, 22, 22, 22, 22, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 22, nil, nil, 22, 22, - 22, 22, 22, 22, 22, 22, 22, 22, nil, 22, - 22, 22, 22, 22, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 22, nil, nil, 22, nil, nil, 22, - 22, nil, nil, 22, nil, 22, nil, 22, nil, 22, - nil, nil, nil, nil, nil, nil, nil, 22, nil, nil, - nil, nil, 22, 22, 22, 22, 22, 22, nil, nil, - nil, 22, 22, 23, 23, 23, nil, 23, nil, nil, - nil, 23, 23, nil, nil, nil, 23, nil, 23, 23, - 23, 23, 23, 23, 23, nil, nil, nil, nil, 23, - 23, 23, 23, 23, 23, 23, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 23, nil, nil, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, nil, 23, - 23, 23, 23, 23, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 23, nil, nil, 23, nil, nil, 23, - 23, nil, nil, 23, nil, 23, nil, 23, nil, 23, - nil, nil, nil, nil, nil, nil, nil, 23, nil, nil, - nil, nil, 23, 23, 23, 23, 23, 23, nil, nil, - nil, 23, 23, 24, 24, 24, nil, 24, nil, nil, - nil, 24, 24, nil, nil, nil, 24, nil, 24, 24, - 24, 24, 24, 24, 24, nil, nil, nil, nil, 24, - 24, 24, 24, 24, 24, 24, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 24, nil, nil, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, nil, 24, - 24, 24, 24, 24, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 24, nil, nil, 24, nil, nil, 24, - 24, nil, nil, 24, nil, 24, nil, 24, nil, 24, - nil, nil, nil, nil, nil, nil, nil, 24, nil, nil, - nil, nil, 24, 24, 24, 24, 24, 24, nil, nil, - nil, 24, 24, 27, 27, 27, nil, 27, nil, nil, - nil, 27, 27, nil, nil, nil, 27, nil, 27, 27, - 27, 27, 27, 27, 27, nil, nil, nil, nil, 27, - 27, 27, 27, 27, 27, 27, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 27, nil, nil, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, nil, 27, - 27, 27, 27, 27, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 27, nil, nil, 27, 27, nil, 27, - 27, nil, nil, 27, nil, 27, nil, 27, nil, 27, - nil, nil, nil, nil, nil, nil, nil, 27, nil, nil, - nil, nil, 27, 27, 27, 27, 27, 27, nil, nil, - nil, 27, 27, 28, 28, 28, nil, 28, nil, nil, - nil, 28, 28, nil, nil, nil, 28, nil, 28, 28, - 28, 28, 28, 28, 28, nil, nil, nil, nil, 28, - 28, 28, 28, 28, 28, 28, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 28, nil, nil, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, nil, 28, - 28, 28, 28, 28, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 28, nil, nil, 28, 28, nil, 28, - 28, nil, nil, 28, nil, 28, nil, 28, nil, 28, - nil, nil, nil, nil, nil, nil, nil, 28, nil, nil, - nil, nil, 28, 28, 28, 28, 28, 28, nil, nil, - nil, 28, 28, 31, 31, 31, nil, 31, nil, nil, - nil, 31, 31, nil, nil, nil, 31, nil, 31, 31, - 31, 31, 31, 31, 31, nil, nil, nil, nil, 31, - 31, 31, 31, 31, 31, 31, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 31, nil, nil, 31, 31, - 31, 31, 31, 31, 31, 31, 31, 31, nil, 31, - 31, nil, nil, 31, nil, 830, 830, 830, 830, 830, - 830, 830, 830, 830, 830, 830, nil, 830, 830, nil, - nil, 830, 830, 31, nil, nil, 31, nil, nil, 31, - 31, nil, nil, 31, nil, 31, nil, 830, nil, 830, - nil, 830, 830, 830, 830, 830, 830, 830, nil, 830, - nil, nil, 31, 31, 31, 31, 31, 31, nil, nil, - nil, 31, 31, 32, 32, 32, 830, 32, 830, nil, - nil, 32, 32, nil, nil, nil, 32, nil, 32, 32, - 32, 32, 32, 32, 32, nil, nil, nil, nil, 32, - 32, 32, 32, 32, 32, 32, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 32, nil, nil, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, nil, 32, - 32, nil, nil, 32, nil, 19, 19, 19, 19, 19, - 19, 19, 19, 19, 19, 19, nil, 19, 19, nil, - nil, 19, 19, 32, nil, nil, 32, nil, nil, 32, - 32, nil, nil, 32, nil, nil, nil, 19, nil, 19, - nil, 19, 19, 19, 19, 19, 19, 19, nil, 19, - nil, nil, 32, 32, 32, 32, 32, 32, nil, nil, - nil, 32, 32, 38, 38, 38, 19, 38, nil, nil, - nil, 38, 38, nil, nil, nil, 38, nil, 38, 38, - 38, 38, 38, 38, 38, nil, nil, nil, nil, 38, - 38, 38, 38, 38, 38, 38, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 38, nil, nil, 38, 38, - 38, 38, 38, 38, 38, 38, 38, 38, nil, 38, - 38, 38, 38, 38, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 38, nil, nil, 38, nil, nil, 38, - 38, nil, nil, 38, nil, nil, nil, nil, nil, 38, - nil, nil, nil, nil, nil, nil, nil, 38, nil, nil, - nil, nil, 38, 38, 38, 38, 38, 38, nil, nil, - nil, 38, 38, 39, 39, 39, nil, 39, nil, nil, - nil, 39, 39, nil, nil, nil, 39, nil, 39, 39, - 39, 39, 39, 39, 39, nil, nil, nil, nil, 39, - 39, 39, 39, 39, 39, 39, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 39, nil, nil, 39, 39, - 39, 39, 39, 39, 39, 39, 39, 39, nil, 39, - 39, 39, 39, 39, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 39, nil, nil, 39, nil, nil, 39, - 39, nil, nil, 39, nil, nil, nil, nil, nil, 39, - nil, nil, nil, nil, nil, nil, nil, 39, nil, nil, - nil, nil, 39, 39, 39, 39, 39, 39, nil, nil, - nil, 39, 39, 40, 40, 40, nil, 40, nil, nil, - nil, 40, 40, nil, nil, nil, 40, nil, 40, 40, - 40, 40, 40, 40, 40, nil, nil, nil, nil, 40, - 40, 40, 40, 40, 40, 40, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 40, nil, nil, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, nil, 40, - 40, 40, 40, 40, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 40, nil, nil, 40, nil, nil, 40, - 40, nil, nil, 40, nil, nil, nil, nil, nil, 40, - nil, nil, nil, nil, nil, nil, nil, 40, nil, nil, - nil, nil, 40, 40, 40, 40, 40, 40, nil, nil, - nil, 40, 40, 52, 52, 52, nil, 52, nil, nil, - nil, 52, 52, nil, nil, nil, 52, nil, 52, 52, - 52, 52, 52, 52, 52, nil, nil, nil, nil, 52, - 52, 52, 52, 52, 52, 52, nil, nil, 52, nil, - nil, nil, nil, nil, nil, 52, nil, nil, 52, 52, - 52, 52, 52, 52, 52, 52, 52, 52, nil, 52, - 52, 52, 52, 52, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 52, nil, nil, 52, nil, nil, 52, - 52, nil, nil, 52, nil, nil, nil, nil, nil, 52, - nil, nil, nil, nil, nil, nil, nil, 52, nil, nil, - nil, nil, 52, 52, 52, 52, 52, 52, nil, nil, - nil, 52, 52, 53, 53, 53, nil, 53, nil, nil, - nil, 53, 53, nil, nil, nil, 53, nil, 53, 53, - 53, 53, 53, 53, 53, nil, nil, nil, nil, 53, - 53, 53, 53, 53, 53, 53, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 53, nil, nil, 53, 53, - 53, 53, 53, 53, 53, 53, 53, 53, nil, 53, - 53, 53, 53, 53, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 53, nil, nil, 53, nil, nil, 53, - 53, nil, nil, 53, nil, 53, nil, nil, nil, 53, - nil, nil, nil, nil, nil, nil, nil, 53, nil, nil, - nil, nil, 53, 53, 53, 53, 53, 53, nil, nil, - nil, 53, 53, 54, 54, 54, nil, 54, nil, nil, - nil, 54, 54, nil, nil, nil, 54, nil, 54, 54, - 54, 54, 54, 54, 54, nil, nil, nil, nil, 54, - 54, 54, 54, 54, 54, 54, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 54, nil, nil, 54, 54, - 54, 54, 54, 54, 54, 54, 54, 54, nil, 54, - 54, 54, 54, 54, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 54, nil, nil, 54, nil, nil, 54, - 54, nil, nil, 54, nil, nil, nil, nil, nil, 54, - nil, nil, nil, nil, nil, nil, nil, 54, nil, nil, - nil, nil, 54, 54, 54, 54, 54, 54, nil, nil, - nil, 54, 54, 56, 56, 56, nil, 56, nil, nil, - nil, 56, 56, nil, nil, nil, 56, nil, 56, 56, - 56, 56, 56, 56, 56, nil, nil, nil, nil, 56, - 56, 56, 56, 56, 56, 56, nil, nil, 56, nil, - nil, nil, nil, nil, nil, 56, nil, nil, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, nil, 56, - 56, 56, 56, 56, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 56, nil, nil, 56, nil, nil, 56, - 56, nil, nil, 56, nil, nil, nil, nil, nil, 56, - nil, nil, nil, nil, nil, nil, nil, 56, nil, nil, - nil, nil, 56, 56, 56, 56, 56, 56, nil, nil, - nil, 56, 56, 57, 57, 57, nil, 57, nil, nil, - nil, 57, 57, nil, nil, nil, 57, nil, 57, 57, - 57, 57, 57, 57, 57, nil, nil, nil, nil, 57, - 57, 57, 57, 57, 57, 57, nil, nil, 57, nil, - nil, nil, nil, nil, nil, 57, nil, nil, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 57, nil, 57, - 57, 57, 57, 57, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 57, nil, nil, 57, nil, nil, 57, - 57, nil, nil, 57, nil, nil, nil, nil, nil, 57, - nil, nil, nil, nil, nil, nil, nil, 57, nil, nil, - nil, nil, 57, 57, 57, 57, 57, 57, nil, nil, - nil, 57, 57, 61, 61, 61, nil, 61, nil, nil, - nil, 61, 61, nil, nil, nil, 61, nil, 61, 61, - 61, 61, 61, 61, 61, nil, nil, nil, nil, 61, - 61, 61, 61, 61, 61, 61, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 61, nil, nil, 61, 61, - 61, 61, 61, 61, 61, 61, 61, 61, nil, 61, - 61, nil, nil, 61, nil, 239, 239, 239, 239, 239, - 239, 239, 239, 239, 239, 239, nil, 239, 239, nil, - nil, 239, 239, 61, nil, nil, 61, nil, nil, 61, - 61, nil, nil, 61, nil, 61, nil, 239, nil, 239, - nil, 239, 239, 239, 239, 239, 239, 239, nil, 239, - nil, nil, 61, 61, 61, 61, 61, 61, nil, nil, - nil, 61, 61, 62, 62, 62, 239, 62, nil, nil, - nil, 62, 62, nil, nil, nil, 62, nil, 62, 62, - 62, 62, 62, 62, 62, nil, nil, nil, nil, 62, - 62, 62, 62, 62, 62, 62, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 62, nil, nil, 62, 62, - 62, 62, 62, 62, 62, 62, 62, 62, nil, 62, - 62, nil, nil, 62, nil, 376, 376, 376, 376, 376, - 376, 376, 376, 376, 376, 376, nil, 376, 376, nil, - 62, 376, 376, 62, nil, nil, 62, nil, nil, 62, - 62, nil, nil, 62, nil, nil, nil, 376, nil, 376, - nil, 376, 376, 376, 376, 376, 376, 376, nil, 376, - nil, nil, 62, 62, 62, 62, 62, 62, nil, nil, - nil, 62, 62, 63, 63, 63, 376, 63, nil, nil, - nil, 63, 63, nil, nil, nil, 63, nil, 63, 63, - 63, 63, 63, 63, 63, nil, nil, nil, nil, 63, - 63, 63, 63, 63, 63, 63, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 63, nil, nil, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, nil, 63, - 63, nil, nil, 63, nil, 390, 390, 390, 390, 390, - 390, 390, 390, 390, 390, 390, nil, 390, 390, nil, - nil, 390, 390, 63, nil, nil, 63, nil, nil, 63, - 63, nil, nil, 63, nil, nil, nil, 390, nil, 390, - nil, 390, 390, 390, 390, 390, 390, 390, nil, 390, - nil, nil, 63, 63, 63, 63, 63, 63, nil, nil, - nil, 63, 63, 84, 84, 84, 390, 84, nil, nil, - nil, 84, 84, nil, nil, nil, 84, nil, 84, 84, - 84, 84, 84, 84, 84, nil, 84, nil, nil, 84, - 84, 84, 84, 84, 84, 84, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 84, nil, nil, 84, 84, - 84, 84, 84, 84, 84, 84, 84, 84, nil, 84, - 84, 84, 84, 84, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 84, nil, nil, 84, 84, nil, 84, - 84, nil, nil, 84, nil, 84, nil, 84, nil, 84, - nil, nil, nil, nil, nil, nil, nil, 84, nil, 84, - nil, nil, 84, 84, 84, 84, 84, 84, nil, nil, - nil, 84, 84, 88, 88, 88, nil, 88, nil, nil, - nil, 88, 88, nil, nil, nil, 88, nil, 88, 88, - 88, 88, 88, 88, 88, nil, 88, nil, nil, 88, - 88, 88, 88, 88, 88, 88, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 88, nil, nil, 88, 88, - 88, 88, 88, 88, 88, 88, 88, 88, nil, 88, - 88, 88, 88, 88, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 88, nil, nil, 88, 88, nil, 88, - 88, nil, nil, 88, nil, 88, nil, 88, nil, 88, - nil, nil, nil, nil, nil, nil, nil, 88, nil, 88, - nil, nil, 88, 88, 88, 88, 88, 88, nil, nil, - nil, 88, 88, 103, 103, 103, nil, 103, nil, nil, - nil, 103, 103, nil, nil, nil, 103, nil, 103, 103, - 103, 103, 103, 103, 103, nil, nil, nil, nil, 103, - 103, 103, 103, 103, 103, 103, nil, nil, 103, nil, - nil, nil, nil, nil, nil, 103, nil, nil, 103, 103, - 103, 103, 103, 103, 103, 103, 103, 103, nil, 103, - 103, 103, 103, 103, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 103, nil, nil, 103, nil, nil, 103, - 103, nil, nil, 103, nil, nil, nil, nil, nil, 103, - nil, nil, nil, nil, nil, nil, nil, 103, nil, nil, - nil, nil, 103, 103, 103, 103, 103, 103, nil, nil, - nil, 103, 103, 104, 104, 104, nil, 104, nil, nil, - nil, 104, 104, nil, nil, nil, 104, nil, 104, 104, - 104, 104, 104, 104, 104, nil, nil, nil, nil, 104, - 104, 104, 104, 104, 104, 104, nil, nil, 104, nil, - nil, nil, nil, nil, nil, 104, nil, nil, 104, 104, - 104, 104, 104, 104, 104, 104, 104, 104, nil, 104, - 104, 104, 104, 104, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 104, nil, nil, 104, nil, nil, 104, - 104, nil, nil, 104, nil, nil, nil, nil, nil, 104, - nil, nil, nil, nil, nil, nil, nil, 104, nil, nil, - nil, nil, 104, 104, 104, 104, 104, 104, nil, nil, - nil, 104, 104, 105, 105, 105, nil, 105, nil, nil, - nil, 105, 105, nil, nil, nil, 105, nil, 105, 105, - 105, 105, 105, 105, 105, nil, nil, nil, nil, 105, - 105, 105, 105, 105, 105, 105, nil, nil, 105, nil, - nil, nil, nil, nil, nil, 105, nil, nil, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, nil, 105, - 105, 105, 105, 105, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 105, nil, nil, 105, nil, nil, 105, - 105, nil, nil, 105, nil, nil, nil, nil, nil, 105, - nil, nil, nil, nil, nil, nil, nil, 105, nil, nil, - nil, nil, 105, 105, 105, 105, 105, 105, nil, nil, - nil, 105, 105, 106, 106, 106, nil, 106, nil, nil, - nil, 106, 106, nil, nil, nil, 106, nil, 106, 106, - 106, 106, 106, 106, 106, nil, nil, nil, nil, 106, - 106, 106, 106, 106, 106, 106, nil, nil, 106, nil, - nil, nil, nil, nil, nil, 106, nil, nil, 106, 106, - 106, 106, 106, 106, 106, 106, 106, 106, nil, 106, - 106, 106, 106, 106, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 106, nil, nil, 106, nil, nil, 106, - 106, nil, nil, 106, nil, nil, nil, nil, nil, 106, - nil, nil, nil, nil, nil, nil, nil, 106, nil, nil, - nil, nil, 106, 106, 106, 106, 106, 106, nil, nil, - nil, 106, 106, 107, 107, 107, 107, 107, nil, nil, - nil, 107, 107, nil, nil, nil, 107, nil, 107, 107, - 107, 107, 107, 107, 107, nil, nil, nil, nil, 107, - 107, 107, 107, 107, 107, 107, nil, nil, 107, nil, - nil, nil, nil, nil, 107, 107, 107, 107, 107, 107, - 107, 107, 107, 107, 107, 107, 107, 107, nil, 107, - 107, 107, 107, 107, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 107, nil, nil, 107, nil, nil, 107, - 107, nil, nil, 107, nil, 107, nil, nil, nil, 107, - nil, nil, nil, nil, nil, nil, nil, 107, nil, nil, - nil, nil, 107, 107, 107, 107, 107, 107, nil, nil, - nil, 107, 107, 190, 190, 190, nil, 190, nil, nil, - nil, 190, 190, nil, nil, nil, 190, nil, 190, 190, - 190, 190, 190, 190, 190, nil, nil, nil, nil, 190, - 190, 190, 190, 190, 190, 190, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 190, nil, nil, 190, 190, - 190, 190, 190, 190, 190, 190, 190, 190, nil, 190, - 190, 190, 190, 190, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 190, nil, nil, 190, nil, nil, 190, - 190, nil, nil, 190, nil, 190, nil, nil, nil, 190, - nil, nil, nil, nil, nil, nil, nil, 190, nil, nil, - nil, nil, 190, 190, 190, 190, 190, 190, nil, nil, - nil, 190, 190, 191, 191, 191, nil, 191, nil, nil, - nil, 191, 191, nil, nil, nil, 191, nil, 191, 191, - 191, 191, 191, 191, 191, nil, nil, nil, nil, 191, - 191, 191, 191, 191, 191, 191, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 191, nil, nil, 191, 191, - 191, 191, 191, 191, 191, 191, 191, 191, nil, 191, - 191, 191, 191, 191, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 191, nil, nil, 191, nil, nil, 191, - 191, nil, nil, 191, nil, 191, nil, nil, nil, 191, - nil, nil, nil, nil, nil, nil, nil, 191, nil, nil, - nil, nil, 191, 191, 191, 191, 191, 191, nil, nil, - nil, 191, 191, 192, 192, 192, nil, 192, nil, nil, - nil, 192, 192, nil, nil, nil, 192, nil, 192, 192, - 192, 192, 192, 192, 192, nil, nil, nil, nil, 192, - 192, 192, 192, 192, 192, 192, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 192, nil, nil, 192, 192, - 192, 192, 192, 192, 192, 192, 192, 192, nil, 192, - 192, 192, 192, 192, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 192, nil, nil, 192, nil, nil, 192, - 192, nil, nil, 192, nil, nil, nil, nil, nil, 192, - nil, nil, nil, nil, nil, nil, nil, 192, nil, nil, - nil, nil, 192, 192, 192, 192, 192, 192, nil, nil, - nil, 192, 192, 193, 193, 193, nil, 193, nil, nil, - nil, 193, 193, nil, nil, nil, 193, nil, 193, 193, - 193, 193, 193, 193, 193, nil, nil, nil, nil, 193, - 193, 193, 193, 193, 193, 193, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 193, nil, nil, 193, 193, - 193, 193, 193, 193, 193, 193, 193, 193, nil, 193, - 193, 193, 193, 193, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 193, nil, nil, 193, nil, nil, 193, - 193, nil, nil, 193, nil, 193, nil, nil, nil, 193, - nil, nil, nil, nil, nil, nil, nil, 193, nil, nil, - nil, nil, 193, 193, 193, 193, 193, 193, nil, nil, - nil, 193, 193, 196, 196, 196, nil, 196, nil, nil, - nil, 196, 196, nil, nil, nil, 196, nil, 196, 196, - 196, 196, 196, 196, 196, nil, nil, nil, nil, 196, - 196, 196, 196, 196, 196, 196, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 196, nil, nil, 196, 196, - 196, 196, 196, 196, 196, 196, 196, 196, nil, 196, - 196, 196, 196, 196, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 196, nil, nil, 196, nil, nil, 196, - 196, nil, nil, 196, nil, nil, nil, nil, nil, 196, - nil, nil, nil, nil, nil, nil, nil, 196, nil, nil, - nil, nil, 196, 196, 196, 196, 196, 196, nil, nil, - nil, 196, 196, 197, 197, 197, nil, 197, nil, nil, - nil, 197, 197, nil, nil, nil, 197, nil, 197, 197, - 197, 197, 197, 197, 197, nil, nil, nil, nil, 197, - 197, 197, 197, 197, 197, 197, nil, nil, 197, nil, - nil, nil, nil, nil, nil, 197, nil, nil, 197, 197, - 197, 197, 197, 197, 197, 197, 197, 197, nil, 197, - 197, 197, 197, 197, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 197, nil, nil, 197, nil, nil, 197, - 197, nil, nil, 197, nil, nil, nil, nil, nil, 197, - nil, nil, nil, nil, nil, nil, nil, 197, nil, nil, - nil, nil, 197, 197, 197, 197, 197, 197, nil, nil, - nil, 197, 197, 198, 198, 198, nil, 198, nil, nil, - nil, 198, 198, nil, nil, nil, 198, nil, 198, 198, - 198, 198, 198, 198, 198, nil, nil, nil, nil, 198, - 198, 198, 198, 198, 198, 198, nil, nil, 198, nil, - nil, nil, nil, nil, nil, 198, nil, nil, 198, 198, - 198, 198, 198, 198, 198, 198, 198, 198, nil, 198, - 198, 198, 198, 198, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 198, nil, nil, 198, nil, nil, 198, - 198, nil, nil, 198, nil, nil, nil, nil, nil, 198, - nil, nil, nil, nil, nil, nil, nil, 198, nil, nil, - nil, nil, 198, 198, 198, 198, 198, 198, nil, nil, - nil, 198, 198, 209, 209, 209, nil, 209, nil, nil, - nil, 209, 209, nil, nil, nil, 209, nil, 209, 209, - 209, 209, 209, 209, 209, nil, nil, nil, nil, 209, - 209, 209, 209, 209, 209, 209, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 209, nil, nil, 209, 209, - 209, 209, 209, 209, 209, 209, 209, 209, nil, 209, - 209, 209, 209, 209, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 209, nil, nil, 209, nil, nil, 209, - 209, nil, nil, 209, nil, nil, nil, nil, nil, 209, - nil, nil, nil, nil, nil, nil, nil, 209, nil, nil, - nil, nil, 209, 209, 209, 209, 209, 209, nil, nil, - nil, 209, 209, 210, 210, 210, nil, 210, nil, nil, - nil, 210, 210, nil, nil, nil, 210, nil, 210, 210, - 210, 210, 210, 210, 210, nil, nil, nil, nil, 210, - 210, 210, 210, 210, 210, 210, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 210, nil, nil, 210, 210, - 210, 210, 210, 210, 210, 210, 210, 210, nil, 210, - 210, 210, 210, 210, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 210, nil, nil, 210, nil, nil, 210, - 210, nil, nil, 210, nil, nil, nil, nil, nil, 210, - nil, nil, nil, nil, nil, nil, nil, 210, nil, nil, - nil, nil, 210, 210, 210, 210, 210, 210, nil, nil, - nil, 210, 210, 211, 211, 211, nil, 211, nil, nil, - nil, 211, 211, nil, nil, nil, 211, nil, 211, 211, - 211, 211, 211, 211, 211, nil, nil, nil, nil, 211, - 211, 211, 211, 211, 211, 211, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 211, nil, nil, 211, 211, - 211, 211, 211, 211, 211, 211, 211, 211, nil, 211, - 211, 211, 211, 211, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 211, nil, nil, 211, nil, nil, 211, - 211, nil, nil, 211, nil, nil, nil, nil, nil, 211, - nil, nil, nil, nil, nil, nil, nil, 211, nil, nil, - nil, nil, 211, 211, 211, 211, 211, 211, nil, nil, - nil, 211, 211, 212, 212, 212, nil, 212, nil, nil, - nil, 212, 212, nil, nil, nil, 212, nil, 212, 212, - 212, 212, 212, 212, 212, nil, nil, nil, nil, 212, - 212, 212, 212, 212, 212, 212, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 212, nil, nil, 212, 212, - 212, 212, 212, 212, 212, 212, 212, 212, nil, 212, - 212, 212, 212, 212, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 212, nil, nil, 212, nil, nil, 212, - 212, nil, nil, 212, nil, nil, nil, nil, nil, 212, - nil, nil, nil, nil, nil, nil, nil, 212, nil, nil, - nil, nil, 212, 212, 212, 212, 212, 212, nil, nil, - nil, 212, 212, 213, 213, 213, nil, 213, nil, nil, - nil, 213, 213, nil, nil, nil, 213, nil, 213, 213, - 213, 213, 213, 213, 213, nil, nil, nil, nil, 213, - 213, 213, 213, 213, 213, 213, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 213, nil, nil, 213, 213, - 213, 213, 213, 213, 213, 213, 213, 213, nil, 213, - 213, 213, 213, 213, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 213, nil, nil, 213, nil, nil, 213, - 213, nil, nil, 213, nil, nil, nil, nil, nil, 213, - nil, nil, nil, nil, nil, nil, nil, 213, nil, nil, - nil, nil, 213, 213, 213, 213, 213, 213, nil, nil, - nil, 213, 213, 214, 214, 214, nil, 214, nil, nil, - nil, 214, 214, nil, nil, nil, 214, nil, 214, 214, - 214, 214, 214, 214, 214, nil, nil, nil, nil, 214, - 214, 214, 214, 214, 214, 214, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 214, nil, nil, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, nil, 214, - 214, 214, 214, 214, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 214, nil, nil, 214, nil, nil, 214, - 214, nil, nil, 214, nil, nil, nil, nil, nil, 214, - nil, nil, nil, nil, nil, nil, nil, 214, nil, nil, - nil, nil, 214, 214, 214, 214, 214, 214, nil, nil, - nil, 214, 214, 215, 215, 215, nil, 215, nil, nil, - nil, 215, 215, nil, nil, nil, 215, nil, 215, 215, - 215, 215, 215, 215, 215, nil, nil, nil, nil, 215, - 215, 215, 215, 215, 215, 215, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 215, nil, nil, 215, 215, - 215, 215, 215, 215, 215, 215, 215, 215, nil, 215, - 215, 215, 215, 215, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 215, nil, nil, 215, nil, nil, 215, - 215, nil, nil, 215, nil, nil, nil, nil, nil, 215, - nil, nil, nil, nil, nil, nil, nil, 215, nil, nil, - nil, nil, 215, 215, 215, 215, 215, 215, nil, nil, - nil, 215, 215, 216, 216, 216, nil, 216, nil, nil, - nil, 216, 216, nil, nil, nil, 216, nil, 216, 216, - 216, 216, 216, 216, 216, nil, nil, nil, nil, 216, - 216, 216, 216, 216, 216, 216, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 216, nil, nil, 216, 216, - 216, 216, 216, 216, 216, 216, 216, 216, nil, 216, - 216, 216, 216, 216, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 216, nil, nil, 216, nil, nil, 216, - 216, nil, nil, 216, nil, nil, nil, nil, nil, 216, - nil, nil, nil, nil, nil, nil, nil, 216, nil, nil, - nil, nil, 216, 216, 216, 216, 216, 216, nil, nil, - nil, 216, 216, 217, 217, 217, nil, 217, nil, nil, - nil, 217, 217, nil, nil, nil, 217, nil, 217, 217, - 217, 217, 217, 217, 217, nil, nil, nil, nil, 217, - 217, 217, 217, 217, 217, 217, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 217, nil, nil, 217, 217, - 217, 217, 217, 217, 217, 217, 217, 217, nil, 217, - 217, 217, 217, 217, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 217, nil, nil, 217, nil, nil, 217, - 217, nil, nil, 217, nil, nil, nil, nil, nil, 217, - nil, nil, nil, nil, nil, nil, nil, 217, nil, nil, - nil, nil, 217, 217, 217, 217, 217, 217, nil, nil, - nil, 217, 217, 218, 218, 218, nil, 218, nil, nil, - nil, 218, 218, nil, nil, nil, 218, nil, 218, 218, - 218, 218, 218, 218, 218, nil, nil, nil, nil, 218, - 218, 218, 218, 218, 218, 218, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 218, nil, nil, 218, 218, - 218, 218, 218, 218, 218, 218, 218, 218, nil, 218, - 218, 218, 218, 218, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 218, nil, nil, 218, nil, nil, 218, - 218, nil, nil, 218, nil, nil, nil, nil, nil, 218, - nil, nil, nil, nil, nil, nil, nil, 218, nil, nil, - nil, nil, 218, 218, 218, 218, 218, 218, nil, nil, - nil, 218, 218, 219, 219, 219, nil, 219, nil, nil, - nil, 219, 219, nil, nil, nil, 219, nil, 219, 219, - 219, 219, 219, 219, 219, nil, nil, nil, nil, 219, - 219, 219, 219, 219, 219, 219, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 219, nil, nil, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 219, nil, 219, - 219, 219, 219, 219, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 219, nil, nil, 219, nil, nil, 219, - 219, nil, nil, 219, nil, nil, nil, nil, nil, 219, - nil, nil, nil, nil, nil, nil, nil, 219, nil, nil, - nil, nil, 219, 219, 219, 219, 219, 219, nil, nil, - nil, 219, 219, 220, 220, 220, nil, 220, nil, nil, - nil, 220, 220, nil, nil, nil, 220, nil, 220, 220, - 220, 220, 220, 220, 220, nil, nil, nil, nil, 220, - 220, 220, 220, 220, 220, 220, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 220, nil, nil, 220, 220, - 220, 220, 220, 220, 220, 220, 220, 220, nil, 220, - 220, 220, 220, 220, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 220, nil, nil, 220, nil, nil, 220, - 220, nil, nil, 220, nil, nil, nil, nil, nil, 220, - nil, nil, nil, nil, nil, nil, nil, 220, nil, nil, - nil, nil, 220, 220, 220, 220, 220, 220, nil, nil, - nil, 220, 220, 221, 221, 221, nil, 221, nil, nil, - nil, 221, 221, nil, nil, nil, 221, nil, 221, 221, - 221, 221, 221, 221, 221, nil, nil, nil, nil, 221, - 221, 221, 221, 221, 221, 221, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 221, nil, nil, 221, 221, - 221, 221, 221, 221, 221, 221, 221, 221, nil, 221, - 221, 221, 221, 221, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 221, nil, nil, 221, nil, nil, 221, - 221, nil, nil, 221, nil, nil, nil, nil, nil, 221, - nil, nil, nil, nil, nil, nil, nil, 221, nil, nil, - nil, nil, 221, 221, 221, 221, 221, 221, nil, nil, - nil, 221, 221, 222, 222, 222, nil, 222, nil, nil, - nil, 222, 222, nil, nil, nil, 222, nil, 222, 222, - 222, 222, 222, 222, 222, nil, nil, nil, nil, 222, - 222, 222, 222, 222, 222, 222, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 222, nil, nil, 222, 222, - 222, 222, 222, 222, 222, 222, 222, 222, nil, 222, - 222, 222, 222, 222, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 222, nil, nil, 222, nil, nil, 222, - 222, nil, nil, 222, nil, nil, nil, nil, nil, 222, - nil, nil, nil, nil, nil, nil, nil, 222, nil, nil, - nil, nil, 222, 222, 222, 222, 222, 222, nil, nil, - nil, 222, 222, 223, 223, 223, nil, 223, nil, nil, - nil, 223, 223, nil, nil, nil, 223, nil, 223, 223, - 223, 223, 223, 223, 223, nil, nil, nil, nil, 223, - 223, 223, 223, 223, 223, 223, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 223, nil, nil, 223, 223, - 223, 223, 223, 223, 223, 223, 223, 223, nil, 223, - 223, 223, 223, 223, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 223, nil, nil, 223, nil, nil, 223, - 223, nil, nil, 223, nil, nil, nil, nil, nil, 223, - nil, nil, nil, nil, nil, nil, nil, 223, nil, nil, - nil, nil, 223, 223, 223, 223, 223, 223, nil, nil, - nil, 223, 223, 224, 224, 224, nil, 224, nil, nil, - nil, 224, 224, nil, nil, nil, 224, nil, 224, 224, - 224, 224, 224, 224, 224, nil, nil, nil, nil, 224, - 224, 224, 224, 224, 224, 224, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 224, nil, nil, 224, 224, - 224, 224, 224, 224, 224, 224, 224, 224, nil, 224, - 224, 224, 224, 224, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 224, nil, nil, 224, nil, nil, 224, - 224, nil, nil, 224, nil, nil, nil, nil, nil, 224, - nil, nil, nil, nil, nil, nil, nil, 224, nil, nil, - nil, nil, 224, 224, 224, 224, 224, 224, nil, nil, - nil, 224, 224, 225, 225, 225, nil, 225, nil, nil, - nil, 225, 225, nil, nil, nil, 225, nil, 225, 225, - 225, 225, 225, 225, 225, nil, nil, nil, nil, 225, - 225, 225, 225, 225, 225, 225, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 225, nil, nil, 225, 225, - 225, 225, 225, 225, 225, 225, 225, 225, nil, 225, - 225, 225, 225, 225, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 225, nil, nil, 225, nil, nil, 225, - 225, nil, nil, 225, nil, nil, nil, nil, nil, 225, - nil, nil, nil, nil, nil, nil, nil, 225, nil, nil, - nil, nil, 225, 225, 225, 225, 225, 225, nil, nil, - nil, 225, 225, 226, 226, 226, nil, 226, nil, nil, - nil, 226, 226, nil, nil, nil, 226, nil, 226, 226, - 226, 226, 226, 226, 226, nil, nil, nil, nil, 226, - 226, 226, 226, 226, 226, 226, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 226, nil, nil, 226, 226, - 226, 226, 226, 226, 226, 226, 226, 226, nil, 226, - 226, 226, 226, 226, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 226, nil, nil, 226, nil, nil, 226, - 226, nil, nil, 226, nil, nil, nil, nil, nil, 226, - nil, nil, nil, nil, nil, nil, nil, 226, nil, nil, - nil, nil, 226, 226, 226, 226, 226, 226, nil, nil, - nil, 226, 226, 227, 227, 227, nil, 227, nil, nil, - nil, 227, 227, nil, nil, nil, 227, nil, 227, 227, - 227, 227, 227, 227, 227, nil, nil, nil, nil, 227, - 227, 227, 227, 227, 227, 227, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 227, nil, nil, 227, 227, - 227, 227, 227, 227, 227, 227, 227, 227, nil, 227, - 227, 227, 227, 227, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 227, nil, nil, 227, nil, nil, 227, - 227, nil, nil, 227, nil, nil, nil, nil, nil, 227, - nil, nil, nil, nil, nil, nil, nil, 227, nil, nil, - nil, nil, 227, 227, 227, 227, 227, 227, nil, nil, - nil, 227, 227, 228, 228, 228, nil, 228, nil, nil, - nil, 228, 228, nil, nil, nil, 228, nil, 228, 228, - 228, 228, 228, 228, 228, nil, nil, nil, nil, 228, - 228, 228, 228, 228, 228, 228, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 228, nil, nil, 228, 228, - 228, 228, 228, 228, 228, 228, 228, 228, nil, 228, - 228, 228, 228, 228, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 228, nil, nil, 228, nil, nil, 228, - 228, nil, nil, 228, nil, nil, nil, nil, nil, 228, - nil, nil, nil, nil, nil, nil, nil, 228, nil, nil, - nil, nil, 228, 228, 228, 228, 228, 228, nil, nil, - nil, 228, 228, 229, 229, 229, nil, 229, nil, nil, - nil, 229, 229, nil, nil, nil, 229, nil, 229, 229, - 229, 229, 229, 229, 229, nil, nil, nil, nil, 229, - 229, 229, 229, 229, 229, 229, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 229, nil, nil, 229, 229, - 229, 229, 229, 229, 229, 229, 229, 229, nil, 229, - 229, 229, 229, 229, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 229, nil, nil, 229, nil, nil, 229, - 229, nil, nil, 229, nil, nil, nil, nil, nil, 229, - nil, nil, nil, nil, nil, nil, nil, 229, nil, nil, - nil, nil, 229, 229, 229, 229, 229, 229, nil, nil, - nil, 229, 229, 230, 230, 230, nil, 230, nil, nil, - nil, 230, 230, nil, nil, nil, 230, nil, 230, 230, - 230, 230, 230, 230, 230, nil, nil, nil, nil, 230, - 230, 230, 230, 230, 230, 230, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 230, nil, nil, 230, 230, - 230, 230, 230, 230, 230, 230, 230, 230, nil, 230, - 230, 230, 230, 230, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 230, nil, nil, 230, nil, nil, 230, - 230, nil, nil, 230, nil, nil, nil, nil, nil, 230, - nil, nil, nil, nil, nil, nil, nil, 230, nil, nil, - nil, nil, 230, 230, 230, 230, 230, 230, nil, nil, - nil, 230, 230, 231, 231, 231, nil, 231, nil, nil, - nil, 231, 231, nil, nil, nil, 231, nil, 231, 231, - 231, 231, 231, 231, 231, nil, nil, nil, nil, 231, - 231, 231, 231, 231, 231, 231, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 231, nil, nil, 231, 231, - 231, 231, 231, 231, 231, 231, 231, 231, nil, 231, - 231, 231, 231, 231, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 231, nil, nil, 231, nil, nil, 231, - 231, nil, nil, 231, nil, nil, nil, nil, nil, 231, - nil, nil, nil, nil, nil, nil, nil, 231, nil, nil, - nil, nil, 231, 231, 231, 231, 231, 231, nil, nil, - nil, 231, 231, 232, 232, 232, nil, 232, nil, nil, - nil, 232, 232, nil, nil, nil, 232, nil, 232, 232, - 232, 232, 232, 232, 232, nil, nil, nil, nil, 232, - 232, 232, 232, 232, 232, 232, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 232, nil, nil, 232, 232, - 232, 232, 232, 232, 232, 232, 232, 232, nil, 232, - 232, 232, 232, 232, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 232, nil, nil, 232, nil, nil, 232, - 232, nil, nil, 232, nil, nil, nil, nil, nil, 232, - nil, nil, nil, nil, nil, nil, nil, 232, nil, nil, - nil, nil, 232, 232, 232, 232, 232, 232, nil, nil, - nil, 232, 232, 233, 233, 233, nil, 233, nil, nil, - nil, 233, 233, nil, nil, nil, 233, nil, 233, 233, - 233, 233, 233, 233, 233, nil, nil, nil, nil, 233, - 233, 233, 233, 233, 233, 233, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 233, nil, nil, 233, 233, - 233, 233, 233, 233, 233, 233, 233, 233, nil, 233, - 233, 233, 233, 233, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 233, nil, nil, 233, nil, nil, 233, - 233, nil, nil, 233, nil, nil, nil, nil, nil, 233, - nil, nil, nil, nil, nil, nil, nil, 233, nil, nil, - nil, nil, 233, 233, 233, 233, 233, 233, nil, nil, - nil, 233, 233, 234, 234, 234, nil, 234, nil, nil, - nil, 234, 234, nil, nil, nil, 234, nil, 234, 234, - 234, 234, 234, 234, 234, nil, nil, nil, nil, 234, - 234, 234, 234, 234, 234, 234, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 234, nil, nil, 234, 234, - 234, 234, 234, 234, 234, 234, 234, 234, nil, 234, - 234, 234, 234, 234, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 234, nil, nil, 234, nil, nil, 234, - 234, nil, nil, 234, nil, nil, nil, nil, nil, 234, - nil, nil, nil, nil, nil, nil, nil, 234, nil, nil, - nil, nil, 234, 234, 234, 234, 234, 234, nil, nil, - nil, 234, 234, 235, 235, 235, nil, 235, nil, nil, - nil, 235, 235, nil, nil, nil, 235, nil, 235, 235, - 235, 235, 235, 235, 235, nil, nil, nil, nil, 235, - 235, 235, 235, 235, 235, 235, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 235, nil, nil, 235, 235, - 235, 235, 235, 235, 235, 235, 235, 235, nil, 235, - 235, 235, 235, 235, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 235, nil, nil, 235, nil, nil, 235, - 235, nil, nil, 235, nil, nil, nil, nil, nil, 235, - nil, nil, nil, nil, nil, nil, nil, 235, nil, nil, - nil, nil, 235, 235, 235, 235, 235, 235, nil, nil, - nil, 235, 235, 243, 243, 243, nil, 243, nil, nil, - nil, 243, 243, nil, nil, nil, 243, nil, 243, 243, - 243, 243, 243, 243, 243, nil, nil, nil, nil, 243, - 243, 243, 243, 243, 243, 243, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 243, nil, nil, 243, 243, - 243, 243, 243, 243, 243, 243, 243, 243, nil, 243, - 243, 243, 243, 243, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 243, nil, nil, 243, nil, nil, 243, - 243, nil, nil, 243, nil, nil, nil, nil, nil, 243, - nil, nil, nil, nil, nil, nil, nil, 243, nil, nil, - nil, nil, 243, 243, 243, 243, 243, 243, nil, nil, - nil, 243, 243, 245, 245, 245, nil, 245, nil, nil, - nil, 245, 245, nil, nil, nil, 245, nil, 245, 245, - 245, 245, 245, 245, 245, nil, nil, nil, nil, 245, - 245, 245, 245, 245, 245, 245, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 245, nil, nil, 245, 245, - 245, 245, 245, 245, 245, 245, 245, 245, nil, 245, - 245, 245, 245, 245, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 245, nil, nil, 245, nil, nil, 245, - 245, nil, nil, 245, nil, nil, nil, nil, nil, 245, - nil, nil, nil, nil, nil, nil, nil, 245, nil, nil, - nil, nil, 245, 245, 245, 245, 245, 245, nil, nil, - nil, 245, 245, 256, 256, 256, nil, 256, nil, nil, - nil, 256, 256, nil, nil, nil, 256, nil, 256, 256, - 256, 256, 256, 256, 256, nil, nil, nil, nil, 256, - 256, 256, 256, 256, 256, 256, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 256, nil, nil, 256, 256, - 256, 256, 256, 256, 256, 256, 256, 256, nil, 256, - 256, 256, 256, 256, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 256, nil, nil, 256, nil, nil, 256, - 256, nil, nil, 256, nil, 256, nil, 256, nil, 256, - nil, nil, nil, nil, nil, nil, nil, 256, nil, nil, - nil, nil, 256, 256, 256, 256, 256, 256, nil, nil, - nil, 256, 256, 257, 257, 257, nil, 257, nil, nil, - nil, 257, 257, nil, nil, nil, 257, nil, 257, 257, - 257, 257, 257, 257, 257, nil, nil, nil, nil, 257, - 257, 257, 257, 257, 257, 257, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 257, nil, nil, 257, 257, - 257, 257, 257, 257, 257, 257, 257, 257, nil, 257, - 257, 257, 257, 257, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 257, nil, nil, 257, nil, nil, 257, - 257, nil, nil, 257, nil, 257, nil, 257, nil, 257, - nil, nil, nil, nil, nil, nil, nil, 257, nil, nil, - nil, nil, 257, 257, 257, 257, 257, 257, nil, nil, - nil, 257, 257, 265, 265, 265, nil, 265, nil, nil, - nil, 265, 265, nil, nil, nil, 265, nil, 265, 265, - 265, 265, 265, 265, 265, nil, nil, nil, nil, 265, - 265, 265, 265, 265, 265, 265, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 265, nil, nil, 265, 265, - 265, 265, 265, 265, 265, 265, 265, 265, nil, 265, - 265, 265, 265, 265, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 265, nil, nil, 265, nil, 265, 265, - 265, nil, nil, 265, nil, 265, nil, 265, nil, 265, - nil, nil, nil, nil, nil, nil, nil, 265, nil, nil, - nil, nil, 265, 265, 265, 265, 265, 265, nil, nil, - nil, 265, 265, 271, 271, 271, nil, 271, nil, nil, - nil, 271, 271, nil, nil, nil, 271, nil, 271, 271, - 271, 271, 271, 271, 271, nil, nil, nil, nil, 271, - 271, 271, 271, 271, 271, 271, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 271, nil, nil, 271, 271, - 271, 271, 271, 271, 271, 271, 271, 271, nil, 271, - 271, nil, nil, 271, nil, 470, 470, 470, 470, 470, - 470, 470, 470, 470, 470, 470, nil, 470, 470, nil, - nil, 470, 470, 271, nil, nil, 271, nil, nil, 271, - 271, nil, nil, 271, nil, nil, nil, 470, nil, 470, - nil, 470, 470, 470, 470, 470, 470, 470, nil, 470, - nil, nil, 271, 271, 271, 271, 271, 271, nil, nil, - nil, 271, 271, 292, 292, 292, 470, 292, nil, nil, - nil, 292, 292, nil, nil, nil, 292, nil, 292, 292, - 292, 292, 292, 292, 292, nil, nil, nil, nil, 292, - 292, 292, 292, 292, 292, 292, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 292, nil, nil, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, nil, 292, - 292, 292, 292, 292, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 292, nil, nil, 292, 292, nil, 292, - 292, nil, nil, 292, nil, nil, nil, nil, nil, 292, - nil, nil, nil, nil, nil, nil, nil, 292, nil, nil, - nil, nil, 292, 292, 292, 292, 292, 292, nil, nil, - nil, 292, 292, 301, 301, 301, nil, 301, nil, nil, - nil, 301, 301, nil, nil, nil, 301, nil, 301, 301, - 301, 301, 301, 301, 301, nil, nil, nil, nil, 301, - 301, 301, 301, 301, 301, 301, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 301, nil, nil, 301, 301, - 301, 301, 301, 301, 301, 301, 301, 301, nil, 301, - 301, 301, 301, 301, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 301, nil, nil, 301, nil, nil, 301, - 301, nil, nil, 301, nil, nil, nil, nil, nil, 301, - nil, nil, nil, nil, nil, nil, nil, 301, nil, nil, - nil, nil, 301, 301, 301, 301, 301, 301, nil, nil, - nil, 301, 301, 310, 310, 310, nil, 310, nil, nil, - nil, 310, 310, nil, nil, nil, 310, nil, 310, 310, - 310, 310, 310, 310, 310, nil, nil, nil, nil, 310, - 310, 310, 310, 310, 310, 310, nil, nil, 310, nil, - nil, nil, nil, nil, nil, 310, nil, nil, 310, 310, - 310, 310, 310, 310, 310, 310, 310, 310, nil, 310, - 310, 310, 310, 310, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 310, nil, nil, 310, nil, nil, 310, - 310, nil, nil, 310, nil, nil, nil, nil, nil, 310, - nil, nil, nil, nil, nil, nil, nil, 310, nil, nil, - nil, nil, 310, 310, 310, 310, 310, 310, nil, nil, - nil, 310, 310, 311, 311, 311, nil, 311, nil, nil, - nil, 311, 311, nil, nil, nil, 311, nil, 311, 311, - 311, 311, 311, 311, 311, nil, nil, nil, nil, 311, - 311, 311, 311, 311, 311, 311, nil, nil, 311, nil, - nil, nil, nil, nil, nil, 311, nil, nil, 311, 311, - 311, 311, 311, 311, 311, 311, 311, 311, nil, 311, - 311, 311, 311, 311, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 311, nil, nil, 311, nil, nil, 311, - 311, nil, nil, 311, nil, nil, nil, nil, nil, 311, - nil, nil, nil, nil, nil, nil, nil, 311, nil, nil, - nil, nil, 311, 311, 311, 311, 311, 311, nil, nil, - nil, 311, 311, 329, 329, 329, nil, 329, nil, nil, - nil, 329, 329, nil, nil, nil, 329, nil, 329, 329, - 329, 329, 329, 329, 329, nil, nil, nil, nil, 329, - 329, 329, 329, 329, 329, 329, nil, nil, 329, nil, - nil, nil, nil, nil, nil, 329, nil, nil, 329, 329, - 329, 329, 329, 329, 329, 329, 329, 329, nil, 329, - 329, 329, 329, 329, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 329, nil, nil, 329, nil, nil, 329, - 329, nil, nil, 329, nil, nil, nil, nil, nil, 329, - nil, nil, nil, nil, nil, nil, nil, 329, nil, nil, - nil, nil, 329, 329, 329, 329, 329, 329, nil, nil, - nil, 329, 329, 343, 343, 343, nil, 343, nil, nil, - nil, 343, 343, nil, nil, nil, 343, nil, 343, 343, - 343, 343, 343, 343, 343, nil, nil, nil, nil, 343, - 343, 343, 343, 343, 343, 343, nil, nil, 343, nil, - nil, nil, nil, nil, nil, 343, nil, nil, 343, 343, - 343, 343, 343, 343, 343, 343, 343, 343, nil, 343, - 343, 343, 343, 343, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 343, nil, nil, 343, nil, nil, 343, - 343, nil, nil, 343, nil, nil, nil, nil, nil, 343, - nil, nil, nil, nil, nil, nil, nil, 343, nil, nil, - nil, nil, 343, 343, 343, 343, 343, 343, nil, nil, - nil, 343, 343, 359, 359, 359, 359, 359, 359, 359, - 359, 359, 359, 359, 359, 359, 359, 359, 359, 359, - 359, 359, 359, 359, 359, 359, 359, nil, nil, 359, - 359, 359, 359, 359, 359, 359, 359, 359, 359, nil, - nil, nil, nil, nil, 359, 359, 359, 359, 359, 359, - 359, 359, nil, nil, 359, nil, nil, nil, nil, nil, - nil, 359, 359, nil, 359, 359, 359, 359, nil, 359, - 359, nil, nil, 359, nil, nil, nil, nil, 359, 359, - 359, 359, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 359, 359, nil, 359, 359, - 359, 359, 359, 359, 359, 359, 359, nil, 359, nil, - nil, 359, 359, nil, nil, 371, 371, 371, nil, 371, - nil, nil, 359, 371, 371, nil, nil, nil, 371, nil, - 371, 371, 371, 371, 371, 371, 371, nil, nil, nil, - nil, 371, 371, 371, 371, 371, 371, 371, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 371, nil, nil, - 371, 371, 371, 371, 371, 371, 371, 371, 371, 371, - nil, 371, 371, 371, 371, 371, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 371, nil, nil, 371, nil, - nil, 371, 371, nil, nil, 371, nil, nil, nil, nil, - nil, 371, nil, nil, nil, nil, nil, nil, nil, 371, - nil, nil, nil, nil, 371, 371, 371, 371, 371, 371, - nil, nil, nil, 371, 371, 380, 380, 380, nil, 380, - nil, nil, nil, 380, 380, nil, nil, nil, 380, nil, - 380, 380, 380, 380, 380, 380, 380, nil, nil, nil, - nil, 380, 380, 380, 380, 380, 380, 380, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 380, nil, nil, - 380, 380, 380, 380, 380, 380, 380, 380, 380, 380, - nil, 380, 380, 380, 380, 380, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 380, nil, nil, 380, 380, - nil, 380, 380, nil, nil, 380, nil, 380, nil, 380, - nil, 380, nil, nil, nil, nil, nil, nil, nil, 380, - nil, nil, nil, nil, 380, 380, 380, 380, 380, 380, - nil, nil, nil, 380, 380, 387, 387, 387, nil, 387, - nil, nil, nil, 387, 387, nil, nil, nil, 387, nil, - 387, 387, 387, 387, 387, 387, 387, nil, nil, nil, - nil, 387, 387, 387, 387, 387, 387, 387, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 387, nil, nil, - 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, - nil, 387, 387, 387, 387, 387, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 387, nil, nil, 387, 387, - nil, 387, 387, nil, nil, 387, nil, 387, nil, 387, - nil, 387, nil, nil, nil, nil, nil, nil, nil, 387, - nil, nil, nil, nil, 387, 387, 387, 387, 387, 387, - nil, nil, nil, 387, 387, 388, 388, 388, nil, 388, - nil, nil, nil, 388, 388, nil, nil, nil, 388, nil, - 388, 388, 388, 388, 388, 388, 388, nil, nil, nil, - nil, 388, 388, 388, 388, 388, 388, 388, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 388, nil, nil, - 388, 388, 388, 388, 388, 388, 388, 388, 388, 388, - nil, 388, 388, 388, 388, 388, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 388, nil, nil, 388, 388, - nil, 388, 388, nil, nil, 388, nil, 388, nil, 388, - nil, 388, nil, nil, nil, nil, nil, nil, nil, 388, - nil, nil, nil, nil, 388, 388, 388, 388, 388, 388, - nil, nil, nil, 388, 388, 395, 395, 395, nil, 395, - nil, nil, nil, 395, 395, nil, nil, nil, 395, nil, - 395, 395, 395, 395, 395, 395, 395, nil, nil, nil, - nil, 395, 395, 395, 395, 395, 395, 395, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 395, nil, nil, - 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, - nil, 395, 395, 395, 395, 395, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 395, nil, nil, 395, nil, - nil, 395, 395, nil, nil, 395, nil, 395, nil, nil, - nil, 395, nil, nil, nil, nil, nil, nil, nil, 395, - nil, nil, nil, nil, 395, 395, 395, 395, 395, 395, - nil, nil, nil, 395, 395, 397, 397, 397, nil, 397, - nil, nil, nil, 397, 397, nil, nil, nil, 397, nil, - 397, 397, 397, 397, 397, 397, 397, nil, nil, nil, - nil, 397, 397, 397, 397, 397, 397, 397, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 397, nil, nil, - 397, 397, 397, 397, 397, 397, 397, 397, 397, 397, - nil, 397, 397, 397, 397, 397, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 397, nil, nil, 397, nil, - nil, 397, 397, nil, nil, 397, nil, nil, nil, nil, - nil, 397, nil, nil, nil, nil, nil, nil, nil, 397, - nil, nil, nil, nil, 397, 397, 397, 397, 397, 397, - nil, nil, nil, 397, 397, 398, 398, 398, nil, 398, - nil, nil, nil, 398, 398, nil, nil, nil, 398, nil, - 398, 398, 398, 398, 398, 398, 398, nil, nil, nil, - nil, 398, 398, 398, 398, 398, 398, 398, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 398, nil, nil, - 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, - nil, 398, 398, 398, 398, 398, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 398, nil, nil, 398, nil, - nil, 398, 398, nil, nil, 398, nil, nil, nil, nil, - nil, 398, nil, nil, nil, nil, nil, nil, nil, 398, - nil, nil, nil, nil, 398, 398, 398, 398, 398, 398, - nil, nil, nil, 398, 398, 399, 399, 399, nil, 399, - nil, nil, nil, 399, 399, nil, nil, nil, 399, nil, - 399, 399, 399, 399, 399, 399, 399, nil, nil, nil, - nil, 399, 399, 399, 399, 399, 399, 399, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 399, nil, nil, - 399, 399, 399, 399, 399, 399, 399, 399, 399, 399, - nil, 399, 399, 399, 399, 399, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 399, nil, nil, 399, nil, - nil, 399, 399, nil, nil, 399, nil, nil, nil, nil, - nil, 399, nil, nil, nil, nil, nil, nil, nil, 399, - nil, nil, nil, nil, 399, 399, 399, 399, 399, 399, - nil, nil, nil, 399, 399, 428, 428, 428, nil, 428, - nil, nil, nil, 428, 428, nil, nil, nil, 428, nil, - 428, 428, 428, 428, 428, 428, 428, nil, nil, nil, - nil, 428, 428, 428, 428, 428, 428, 428, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 428, nil, nil, - 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, - nil, 428, 428, 428, 428, 428, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 428, nil, nil, 428, nil, - nil, 428, 428, nil, nil, 428, nil, 428, nil, 428, - nil, 428, nil, nil, nil, nil, nil, nil, nil, 428, - nil, nil, nil, nil, 428, 428, 428, 428, 428, 428, - nil, nil, nil, 428, 428, 430, 430, 430, nil, 430, - nil, nil, nil, 430, 430, nil, nil, nil, 430, nil, - 430, 430, 430, 430, 430, 430, 430, nil, nil, nil, - nil, 430, 430, 430, 430, 430, 430, 430, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 430, nil, nil, - 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, - nil, 430, 430, 430, 430, 430, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 430, nil, nil, 430, nil, - nil, 430, 430, nil, nil, 430, nil, 430, nil, 430, - nil, 430, nil, nil, nil, nil, nil, nil, nil, 430, - nil, nil, nil, nil, 430, 430, 430, 430, 430, 430, - nil, nil, nil, 430, 430, 433, 433, 433, nil, 433, - nil, nil, nil, 433, 433, nil, nil, nil, 433, nil, - 433, 433, 433, 433, 433, 433, 433, nil, nil, nil, - nil, 433, 433, 433, 433, 433, 433, 433, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 433, nil, nil, - 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, - nil, 433, 433, 433, 433, 433, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 433, nil, nil, 433, nil, - nil, 433, 433, nil, nil, 433, nil, nil, nil, nil, - nil, 433, nil, nil, nil, nil, nil, nil, nil, 433, - nil, nil, nil, nil, 433, 433, 433, 433, 433, 433, - nil, nil, nil, 433, 433, 447, 447, 447, nil, 447, - nil, nil, nil, 447, 447, nil, nil, nil, 447, nil, - 447, 447, 447, 447, 447, 447, 447, nil, nil, nil, - nil, 447, 447, 447, 447, 447, 447, 447, nil, nil, - 447, nil, nil, nil, nil, nil, nil, 447, nil, nil, - 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, - nil, 447, 447, 447, 447, 447, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 447, nil, nil, 447, nil, - nil, 447, 447, nil, nil, 447, nil, 447, nil, 447, - nil, 447, nil, nil, nil, nil, nil, nil, nil, 447, - nil, nil, nil, nil, 447, 447, 447, 447, 447, 447, - nil, nil, nil, 447, 447, 458, 458, 458, nil, 458, - nil, nil, nil, 458, 458, nil, nil, nil, 458, nil, - 458, 458, 458, 458, 458, 458, 458, nil, nil, nil, - nil, 458, 458, 458, 458, 458, 458, 458, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 458, nil, nil, - 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, - nil, 458, 458, 458, 458, 458, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 458, nil, nil, 458, nil, - nil, 458, 458, nil, nil, 458, nil, 458, nil, nil, - nil, 458, nil, nil, nil, nil, nil, nil, nil, 458, - nil, nil, nil, nil, 458, 458, 458, 458, 458, 458, - nil, nil, nil, 458, 458, 465, 465, 465, nil, 465, - nil, nil, nil, 465, 465, nil, nil, nil, 465, nil, - 465, 465, 465, 465, 465, 465, 465, nil, nil, nil, - nil, 465, 465, 465, 465, 465, 465, 465, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 465, nil, nil, - 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, - nil, 465, 465, 465, 465, 465, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 465, nil, nil, 465, nil, - nil, 465, 465, nil, nil, 465, nil, nil, nil, nil, - nil, 465, nil, nil, nil, nil, nil, nil, nil, 465, - nil, nil, nil, nil, 465, 465, 465, 465, 465, 465, - nil, nil, nil, 465, 465, 466, 466, 466, nil, 466, - nil, nil, nil, 466, 466, nil, nil, nil, 466, nil, - 466, 466, 466, 466, 466, 466, 466, nil, nil, nil, - nil, 466, 466, 466, 466, 466, 466, 466, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 466, nil, nil, - 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, - nil, 466, 466, 466, 466, 466, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 466, nil, nil, 466, nil, - nil, 466, 466, nil, nil, 466, nil, nil, nil, nil, - nil, 466, nil, nil, nil, nil, nil, nil, nil, 466, - nil, nil, nil, nil, 466, 466, 466, 466, 466, 466, - nil, nil, nil, 466, 466, 467, 467, 467, nil, 467, - nil, nil, nil, 467, 467, nil, nil, nil, 467, nil, - 467, 467, 467, 467, 467, 467, 467, nil, nil, nil, - nil, 467, 467, 467, 467, 467, 467, 467, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 467, nil, nil, - 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, - nil, 467, 467, 467, 467, 467, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 467, nil, nil, 467, nil, - nil, 467, 467, nil, nil, 467, nil, nil, nil, nil, - nil, 467, nil, nil, nil, nil, nil, nil, nil, 467, - nil, nil, nil, nil, 467, 467, 467, 467, 467, 467, - nil, nil, nil, 467, 467, 471, 471, 471, nil, 471, - nil, nil, nil, 471, 471, nil, nil, nil, 471, nil, - 471, 471, 471, 471, 471, 471, 471, nil, nil, nil, - nil, 471, 471, 471, 471, 471, 471, 471, nil, nil, - 471, nil, nil, nil, nil, nil, nil, 471, nil, nil, - 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, - nil, 471, 471, 471, 471, 471, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 471, nil, nil, 471, nil, - nil, 471, 471, nil, nil, 471, nil, nil, nil, nil, - nil, 471, nil, nil, nil, nil, nil, nil, nil, 471, - nil, nil, nil, nil, 471, 471, 471, 471, 471, 471, - nil, nil, nil, 471, 471, 473, 473, 473, nil, 473, - nil, nil, nil, 473, 473, nil, nil, nil, 473, nil, - 473, 473, 473, 473, 473, 473, 473, nil, nil, nil, - nil, 473, 473, 473, 473, 473, 473, 473, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 473, nil, nil, - 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, - nil, 473, 473, 473, 473, 473, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 473, nil, nil, 473, nil, - nil, 473, 473, nil, nil, 473, nil, 473, nil, nil, - nil, 473, nil, nil, nil, nil, nil, nil, nil, 473, - nil, nil, nil, nil, 473, 473, 473, 473, 473, 473, - nil, nil, nil, 473, 473, 478, 478, 478, nil, 478, - nil, nil, nil, 478, 478, nil, nil, nil, 478, nil, - 478, 478, 478, 478, 478, 478, 478, nil, nil, nil, - nil, 478, 478, 478, 478, 478, 478, 478, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 478, nil, nil, - 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, - nil, 478, 478, 478, 478, 478, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 478, nil, nil, 478, nil, - nil, 478, 478, nil, nil, 478, nil, 478, nil, nil, - nil, 478, nil, nil, nil, nil, nil, nil, nil, 478, - nil, nil, nil, nil, 478, 478, 478, 478, 478, 478, - nil, nil, nil, 478, 478, 481, 481, 481, nil, 481, - nil, nil, nil, 481, 481, nil, nil, nil, 481, nil, - 481, 481, 481, 481, 481, 481, 481, nil, nil, nil, - nil, 481, 481, 481, 481, 481, 481, 481, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 481, nil, nil, - 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, - nil, 481, 481, 481, 481, 481, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 481, nil, nil, 481, nil, - nil, 481, 481, nil, nil, 481, nil, nil, nil, nil, - nil, 481, nil, nil, nil, nil, nil, nil, nil, 481, - nil, nil, nil, nil, 481, 481, 481, 481, 481, 481, - nil, nil, nil, 481, 481, 484, 484, 484, nil, 484, - nil, nil, nil, 484, 484, nil, nil, nil, 484, nil, - 484, 484, 484, 484, 484, 484, 484, nil, nil, nil, - nil, 484, 484, 484, 484, 484, 484, 484, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 484, nil, nil, - 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, - nil, 484, 484, 484, 484, 484, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 484, nil, nil, 484, nil, - nil, 484, 484, nil, nil, 484, nil, nil, nil, nil, - nil, 484, nil, nil, nil, nil, nil, nil, nil, 484, - nil, nil, nil, nil, 484, 484, 484, 484, 484, 484, - nil, nil, nil, 484, 484, 498, 498, 498, nil, 498, - nil, nil, nil, 498, 498, nil, nil, nil, 498, nil, - 498, 498, 498, 498, 498, 498, 498, nil, nil, nil, - nil, 498, 498, 498, 498, 498, 498, 498, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 498, nil, nil, - 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, - nil, 498, 498, 498, 498, 498, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 498, nil, nil, 498, nil, - nil, 498, 498, nil, nil, 498, nil, 498, nil, nil, - nil, 498, nil, nil, nil, nil, nil, nil, nil, 498, - nil, nil, nil, nil, 498, 498, 498, 498, 498, 498, - nil, nil, nil, 498, 498, 499, 499, 499, nil, 499, - nil, nil, nil, 499, 499, nil, nil, nil, 499, nil, - 499, 499, 499, 499, 499, 499, 499, nil, nil, nil, - nil, 499, 499, 499, 499, 499, 499, 499, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 499, nil, nil, - 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, - nil, 499, 499, 499, 499, 499, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 499, nil, nil, 499, nil, - nil, 499, 499, nil, nil, 499, nil, 499, nil, nil, - nil, 499, nil, nil, nil, nil, nil, nil, nil, 499, - nil, nil, nil, nil, 499, 499, 499, 499, 499, 499, - nil, nil, nil, 499, 499, 508, 508, 508, nil, 508, - nil, nil, nil, 508, 508, nil, nil, nil, 508, nil, - 508, 508, 508, 508, 508, 508, 508, nil, nil, nil, - nil, 508, 508, 508, 508, 508, 508, 508, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 508, nil, nil, - 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, - nil, 508, 508, 508, 508, 508, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 508, nil, nil, 508, nil, - nil, 508, 508, nil, nil, 508, nil, 508, nil, nil, - nil, 508, nil, nil, nil, nil, nil, nil, nil, 508, - nil, nil, nil, nil, 508, 508, 508, 508, 508, 508, - nil, nil, nil, 508, 508, 512, 512, 512, nil, 512, - nil, nil, nil, 512, 512, nil, nil, nil, 512, nil, - 512, 512, 512, 512, 512, 512, 512, nil, nil, nil, - nil, 512, 512, 512, 512, 512, 512, 512, nil, nil, - 512, nil, nil, nil, nil, nil, nil, 512, nil, nil, - 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, - nil, 512, 512, 512, 512, 512, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 512, nil, nil, 512, nil, - nil, 512, 512, nil, nil, 512, nil, nil, nil, nil, - nil, 512, nil, nil, nil, nil, nil, nil, nil, 512, - nil, nil, nil, nil, 512, 512, 512, 512, 512, 512, - nil, nil, nil, 512, 512, 536, 536, 536, 536, 536, - 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, - 536, 536, 536, 536, 536, 536, 536, 536, 536, nil, - nil, 536, 536, 536, 536, 536, 536, 536, 536, 536, - 536, nil, nil, nil, nil, nil, 536, 536, 536, 536, - 536, 536, 536, 536, nil, nil, 536, nil, nil, nil, - nil, nil, nil, 536, 536, nil, 536, 536, 536, 536, - nil, 536, 536, nil, nil, 536, nil, nil, nil, nil, - 536, 536, 536, 536, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 536, 536, nil, - 536, 536, 536, 536, 536, 536, 536, 536, 536, nil, - 536, nil, nil, 536, 536, nil, nil, 539, 539, 539, - nil, 539, nil, nil, 536, 539, 539, nil, nil, nil, - 539, nil, 539, 539, 539, 539, 539, 539, 539, nil, - nil, nil, nil, 539, 539, 539, 539, 539, 539, 539, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 539, - nil, nil, 539, 539, 539, 539, 539, 539, 539, 539, - 539, 539, nil, 539, 539, 539, 539, 539, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 539, nil, nil, - 539, nil, nil, 539, 539, nil, nil, 539, nil, nil, - nil, nil, nil, 539, nil, nil, nil, nil, nil, nil, - nil, 539, nil, nil, nil, nil, 539, 539, 539, 539, - 539, 539, nil, nil, nil, 539, 539, 540, 540, 540, - nil, 540, nil, nil, nil, 540, 540, nil, nil, nil, - 540, nil, 540, 540, 540, 540, 540, 540, 540, nil, - nil, nil, nil, 540, 540, 540, 540, 540, 540, 540, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 540, - nil, nil, 540, 540, 540, 540, 540, 540, 540, 540, - 540, 540, nil, 540, 540, 540, 540, 540, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 540, nil, nil, - 540, nil, nil, 540, 540, nil, nil, 540, nil, 540, - nil, nil, nil, 540, nil, nil, nil, nil, nil, nil, - nil, 540, nil, nil, nil, nil, 540, 540, 540, 540, - 540, 540, nil, nil, nil, 540, 540, 543, 543, 543, - nil, 543, nil, nil, nil, 543, 543, nil, nil, nil, - 543, nil, 543, 543, 543, 543, 543, 543, 543, nil, - nil, nil, nil, 543, 543, 543, 543, 543, 543, 543, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 543, - nil, nil, 543, 543, 543, 543, 543, 543, 543, 543, - 543, 543, nil, 543, 543, 543, 543, 543, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 543, nil, nil, - 543, nil, nil, 543, 543, nil, nil, 543, nil, nil, - nil, nil, nil, 543, nil, nil, nil, nil, nil, nil, - nil, 543, nil, nil, nil, nil, 543, 543, 543, 543, - 543, 543, nil, nil, nil, 543, 543, 544, 544, 544, - nil, 544, nil, nil, nil, 544, 544, nil, nil, nil, - 544, nil, 544, 544, 544, 544, 544, 544, 544, nil, - nil, nil, nil, 544, 544, 544, 544, 544, 544, 544, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 544, - nil, nil, 544, 544, 544, 544, 544, 544, 544, 544, - 544, 544, nil, 544, 544, 544, 544, 544, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 544, nil, nil, - 544, nil, nil, 544, 544, nil, nil, 544, nil, nil, - nil, nil, nil, 544, nil, nil, nil, nil, nil, nil, - nil, 544, nil, nil, nil, nil, 544, 544, 544, 544, - 544, 544, nil, nil, nil, 544, 544, 548, 548, 548, - nil, 548, nil, nil, nil, 548, 548, nil, nil, nil, - 548, nil, 548, 548, 548, 548, 548, 548, 548, nil, - nil, nil, nil, 548, 548, 548, 548, 548, 548, 548, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 548, - nil, nil, 548, 548, 548, 548, 548, 548, 548, 548, - 548, 548, nil, 548, 548, 548, 548, 548, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 548, nil, nil, - 548, nil, nil, 548, 548, nil, nil, 548, nil, nil, - nil, nil, nil, 548, nil, nil, nil, nil, nil, nil, - nil, 548, nil, nil, nil, nil, 548, 548, 548, 548, - 548, 548, nil, nil, nil, 548, 548, 551, 551, 551, - nil, 551, nil, nil, nil, 551, 551, nil, nil, nil, - 551, nil, 551, 551, 551, 551, 551, 551, 551, nil, - nil, nil, nil, 551, 551, 551, 551, 551, 551, 551, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 551, - nil, nil, 551, 551, 551, 551, 551, 551, 551, 551, - 551, 551, nil, 551, 551, 551, 551, 551, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 551, nil, nil, - 551, nil, nil, 551, 551, nil, nil, 551, nil, nil, - nil, nil, nil, 551, nil, nil, nil, nil, nil, nil, - nil, 551, nil, nil, nil, nil, 551, 551, 551, 551, - 551, 551, nil, nil, nil, 551, 551, 558, 558, 558, - nil, 558, nil, nil, nil, 558, 558, nil, nil, nil, - 558, nil, 558, 558, 558, 558, 558, 558, 558, nil, - nil, nil, nil, 558, 558, 558, 558, 558, 558, 558, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 558, - nil, nil, 558, 558, 558, 558, 558, 558, 558, 558, - 558, 558, nil, 558, 558, 558, 558, 558, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 558, nil, nil, - 558, nil, nil, 558, 558, nil, nil, 558, nil, nil, - nil, nil, nil, 558, nil, nil, nil, nil, nil, nil, - nil, 558, nil, nil, nil, nil, 558, 558, 558, 558, - 558, 558, nil, nil, nil, 558, 558, 559, 559, 559, - nil, 559, nil, nil, nil, 559, 559, nil, nil, nil, - 559, nil, 559, 559, 559, 559, 559, 559, 559, nil, - nil, nil, nil, 559, 559, 559, 559, 559, 559, 559, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 559, - nil, nil, 559, 559, 559, 559, 559, 559, 559, 559, - 559, 559, nil, 559, 559, nil, nil, 559, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 559, nil, nil, - 559, nil, nil, 559, 559, nil, nil, 559, nil, 559, - nil, 559, nil, nil, nil, nil, nil, nil, nil, nil, - 559, nil, nil, nil, nil, nil, 559, 559, 559, 559, - 559, 559, nil, nil, nil, 559, 559, 562, 562, 562, - nil, 562, nil, nil, nil, 562, 562, nil, nil, nil, - 562, nil, 562, 562, 562, 562, 562, 562, 562, nil, - nil, nil, nil, 562, 562, 562, 562, 562, 562, 562, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 562, - nil, nil, 562, 562, 562, 562, 562, 562, 562, 562, - 562, 562, nil, 562, 562, 562, 562, 562, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 562, nil, nil, - 562, nil, nil, 562, 562, nil, nil, 562, nil, nil, - nil, nil, nil, 562, nil, nil, nil, nil, nil, nil, - nil, 562, nil, nil, nil, nil, 562, 562, 562, 562, - 562, 562, nil, nil, nil, 562, 562, 566, 566, 566, - nil, 566, nil, nil, nil, 566, 566, nil, nil, nil, - 566, nil, 566, 566, 566, 566, 566, 566, 566, nil, - nil, nil, nil, 566, 566, 566, 566, 566, 566, 566, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 566, - nil, nil, 566, 566, 566, 566, 566, 566, 566, 566, - 566, 566, nil, 566, 566, 566, 566, 566, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 566, nil, nil, - 566, nil, nil, 566, 566, nil, nil, 566, nil, nil, - nil, nil, nil, 566, nil, nil, nil, nil, nil, nil, - nil, 566, nil, nil, nil, nil, 566, 566, 566, 566, - 566, 566, nil, nil, nil, 566, 566, 582, 582, 582, - nil, 582, nil, nil, nil, 582, 582, nil, nil, nil, - 582, nil, 582, 582, 582, 582, 582, 582, 582, nil, - nil, nil, nil, 582, 582, 582, 582, 582, 582, 582, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 582, - nil, nil, 582, 582, 582, 582, 582, 582, 582, 582, - 582, 582, nil, 582, 582, 582, 582, 582, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 582, nil, nil, - 582, nil, nil, 582, 582, nil, nil, 582, nil, 582, - nil, 582, nil, 582, nil, nil, nil, nil, nil, nil, - nil, 582, nil, nil, nil, nil, 582, 582, 582, 582, - 582, 582, nil, nil, nil, 582, 582, 586, 586, 586, - nil, 586, nil, nil, nil, 586, 586, nil, nil, nil, - 586, nil, 586, 586, 586, 586, 586, 586, 586, nil, - nil, nil, nil, 586, 586, 586, 586, 586, 586, 586, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 586, - nil, nil, 586, 586, 586, 586, 586, 586, 586, 586, - 586, 586, nil, 586, 586, 586, 586, 586, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 586, nil, nil, - 586, nil, nil, 586, 586, nil, nil, 586, nil, nil, - nil, nil, nil, 586, nil, nil, nil, nil, nil, nil, - nil, 586, nil, nil, nil, nil, 586, 586, 586, 586, - 586, 586, nil, nil, nil, 586, 586, 614, 614, 614, - nil, 614, nil, nil, nil, 614, 614, nil, nil, nil, - 614, nil, 614, 614, 614, 614, 614, 614, 614, nil, - nil, nil, nil, 614, 614, 614, 614, 614, 614, 614, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 614, - nil, nil, 614, 614, 614, 614, 614, 614, 614, 614, - 614, 614, nil, 614, 614, 614, 614, 614, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 614, nil, nil, - 614, nil, nil, 614, 614, nil, nil, 614, nil, nil, - nil, nil, nil, 614, nil, nil, nil, nil, nil, nil, - nil, 614, nil, nil, nil, nil, 614, 614, 614, 614, - 614, 614, nil, nil, nil, 614, 614, 630, 630, 630, - nil, 630, nil, nil, nil, 630, 630, nil, nil, nil, - 630, nil, 630, 630, 630, 630, 630, 630, 630, nil, - nil, nil, nil, 630, 630, 630, 630, 630, 630, 630, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 630, - nil, nil, 630, 630, 630, 630, 630, 630, 630, 630, - 630, 630, nil, 630, 630, 630, 630, 630, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 630, nil, nil, - 630, nil, nil, 630, 630, nil, nil, 630, nil, nil, - nil, nil, nil, 630, nil, nil, nil, nil, nil, nil, - nil, 630, nil, nil, nil, nil, 630, 630, 630, 630, - 630, 630, nil, nil, nil, 630, 630, 636, 636, 636, - nil, 636, nil, nil, nil, 636, 636, nil, nil, nil, - 636, nil, 636, 636, 636, 636, 636, 636, 636, nil, - nil, nil, nil, 636, 636, 636, 636, 636, 636, 636, - nil, nil, 636, nil, nil, nil, nil, nil, nil, 636, - nil, nil, 636, 636, 636, 636, 636, 636, 636, 636, - 636, 636, nil, 636, 636, 636, 636, 636, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 636, nil, nil, - 636, nil, nil, 636, 636, nil, nil, 636, nil, nil, - nil, nil, nil, 636, nil, nil, nil, nil, nil, nil, - nil, 636, nil, nil, nil, nil, 636, 636, 636, 636, - 636, 636, nil, nil, nil, 636, 636, 681, 681, 681, - nil, 681, nil, nil, nil, 681, 681, nil, nil, nil, - 681, nil, 681, 681, 681, 681, 681, 681, 681, nil, - nil, nil, nil, 681, 681, 681, 681, 681, 681, 681, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 681, - nil, nil, 681, 681, 681, 681, 681, 681, 681, 681, - 681, 681, nil, 681, 681, 681, 681, 681, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 681, nil, nil, - 681, nil, nil, 681, 681, nil, nil, 681, nil, nil, - nil, nil, nil, 681, nil, nil, nil, nil, nil, nil, - nil, 681, nil, nil, nil, nil, 681, 681, 681, 681, - 681, 681, nil, nil, nil, 681, 681, 682, 682, 682, - nil, 682, nil, nil, nil, 682, 682, nil, nil, nil, - 682, nil, 682, 682, 682, 682, 682, 682, 682, nil, - nil, nil, nil, 682, 682, 682, 682, 682, 682, 682, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 682, - nil, nil, 682, 682, 682, 682, 682, 682, 682, 682, - 682, 682, nil, 682, 682, 682, 682, 682, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 682, nil, nil, - 682, nil, nil, 682, 682, nil, nil, 682, nil, nil, - nil, nil, nil, 682, nil, nil, nil, nil, nil, nil, - nil, 682, nil, nil, nil, nil, 682, 682, 682, 682, - 682, 682, nil, nil, nil, 682, 682, 692, 692, 692, - nil, 692, nil, nil, nil, 692, 692, nil, nil, nil, - 692, nil, 692, 692, 692, 692, 692, 692, 692, nil, - nil, nil, nil, 692, 692, 692, 692, 692, 692, 692, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 692, - nil, nil, 692, 692, 692, 692, 692, 692, 692, 692, - 692, 692, nil, 692, 692, 692, 692, 692, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 692, nil, nil, - 692, nil, nil, 692, 692, nil, nil, 692, nil, nil, - nil, nil, nil, 692, nil, nil, nil, nil, nil, nil, - nil, 692, nil, nil, nil, nil, 692, 692, 692, 692, - 692, 692, nil, nil, nil, 692, 692, 693, 693, 693, - nil, 693, nil, nil, nil, 693, 693, nil, nil, nil, - 693, nil, 693, 693, 693, 693, 693, 693, 693, nil, - nil, nil, nil, 693, 693, 693, 693, 693, 693, 693, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 693, - nil, nil, 693, 693, 693, 693, 693, 693, 693, 693, - 693, 693, nil, 693, 693, 693, 693, 693, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 693, nil, nil, - 693, nil, nil, 693, 693, nil, nil, 693, nil, nil, - nil, nil, nil, 693, nil, nil, nil, nil, nil, nil, - nil, 693, nil, nil, nil, nil, 693, 693, 693, 693, - 693, 693, nil, nil, nil, 693, 693, 694, 694, 694, - nil, 694, nil, nil, nil, 694, 694, nil, nil, nil, - 694, nil, 694, 694, 694, 694, 694, 694, 694, nil, - nil, nil, nil, 694, 694, 694, 694, 694, 694, 694, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 694, - nil, nil, 694, 694, 694, 694, 694, 694, 694, 694, - 694, 694, nil, 694, 694, 694, 694, 694, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 694, nil, nil, - 694, nil, nil, 694, 694, nil, nil, 694, nil, nil, - nil, nil, nil, 694, nil, nil, nil, nil, nil, nil, - nil, 694, nil, nil, nil, nil, 694, 694, 694, 694, - 694, 694, nil, nil, nil, 694, 694, 700, 700, 700, - nil, 700, nil, nil, nil, 700, 700, nil, nil, nil, - 700, nil, 700, 700, 700, 700, 700, 700, 700, nil, - nil, nil, nil, 700, 700, 700, 700, 700, 700, 700, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 700, - nil, nil, 700, 700, 700, 700, 700, 700, 700, 700, - 700, 700, nil, 700, 700, nil, nil, 700, nil, 602, - 602, 602, 602, 602, 602, 602, 602, 602, 602, 602, - nil, 602, 602, nil, nil, 602, 602, 700, nil, nil, - 700, nil, nil, 700, 700, nil, nil, 700, nil, nil, - nil, 602, nil, 602, nil, 602, 602, 602, 602, 602, - 602, 602, nil, 602, nil, nil, 700, 700, 700, 700, - 700, 700, nil, nil, nil, 700, 700, 706, 706, 706, - 602, 706, nil, nil, nil, 706, 706, nil, nil, nil, - 706, nil, 706, 706, 706, 706, 706, 706, 706, nil, - nil, nil, nil, 706, 706, 706, 706, 706, 706, 706, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 706, - nil, nil, 706, 706, 706, 706, 706, 706, 706, 706, - 706, 706, nil, 706, 706, 706, 706, 706, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 706, nil, nil, - 706, nil, nil, 706, 706, nil, nil, 706, nil, 706, - nil, 706, nil, 706, nil, nil, nil, nil, nil, nil, - nil, 706, nil, nil, nil, nil, 706, 706, 706, 706, - 706, 706, nil, nil, nil, 706, 706, 715, 715, 715, - nil, 715, nil, nil, nil, 715, 715, nil, nil, nil, - 715, nil, 715, 715, 715, 715, 715, 715, 715, nil, - nil, nil, nil, 715, 715, 715, 715, 715, 715, 715, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 715, - nil, nil, 715, 715, 715, 715, 715, 715, 715, 715, - 715, 715, nil, 715, 715, 715, 715, 715, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 715, nil, nil, - 715, nil, nil, 715, 715, nil, nil, 715, nil, 715, - nil, 715, nil, 715, nil, nil, nil, nil, nil, nil, - nil, 715, nil, nil, nil, nil, 715, 715, 715, 715, - 715, 715, nil, nil, nil, 715, 715, 717, 717, 717, - nil, 717, nil, nil, nil, 717, 717, nil, nil, nil, - 717, nil, 717, 717, 717, 717, 717, 717, 717, nil, - nil, nil, nil, 717, 717, 717, 717, 717, 717, 717, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 717, - nil, nil, 717, 717, 717, 717, 717, 717, 717, 717, - 717, 717, nil, 717, 717, 717, 717, 717, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 717, nil, nil, - 717, nil, nil, 717, 717, nil, nil, 717, nil, 717, - nil, 717, nil, 717, nil, nil, nil, nil, nil, nil, - nil, 717, nil, nil, nil, nil, 717, 717, 717, 717, - 717, 717, nil, nil, nil, 717, 717, 730, 730, 730, - nil, 730, nil, nil, nil, 730, 730, nil, nil, nil, - 730, nil, 730, 730, 730, 730, 730, 730, 730, nil, - nil, nil, nil, 730, 730, 730, 730, 730, 730, 730, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 730, - nil, nil, 730, 730, 730, 730, 730, 730, 730, 730, - 730, 730, nil, 730, 730, nil, nil, 730, nil, 679, - 679, 679, 679, 679, 679, 679, 679, 679, 679, 679, - nil, 679, 679, nil, nil, 679, 679, 730, nil, nil, - 730, nil, nil, 730, 730, nil, nil, 730, nil, nil, - nil, 679, nil, 679, nil, 679, 679, 679, 679, 679, - 679, 679, nil, 679, nil, nil, 730, 730, 730, 730, - 730, 730, nil, nil, nil, 730, 730, 736, 736, 736, - 679, 736, nil, nil, nil, 736, 736, nil, nil, nil, - 736, nil, 736, 736, 736, 736, 736, 736, 736, nil, - nil, nil, nil, 736, 736, 736, 736, 736, 736, 736, - nil, nil, 736, nil, nil, nil, nil, nil, nil, 736, - nil, nil, 736, 736, 736, 736, 736, 736, 736, 736, - 736, 736, nil, 736, 736, 736, 736, 736, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 736, nil, nil, - 736, nil, nil, 736, 736, nil, nil, 736, nil, nil, - nil, nil, nil, 736, nil, nil, nil, nil, nil, nil, - nil, 736, nil, nil, nil, nil, 736, 736, 736, 736, - 736, 736, nil, nil, nil, 736, 736, 742, 742, 742, - nil, 742, nil, nil, nil, 742, 742, nil, nil, nil, - 742, nil, 742, 742, 742, 742, 742, 742, 742, nil, - nil, nil, nil, 742, 742, 742, 742, 742, 742, 742, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 742, - nil, nil, 742, 742, 742, 742, 742, 742, 742, 742, - 742, 742, nil, 742, 742, 742, 742, 742, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 742, nil, nil, - 742, nil, nil, 742, 742, nil, nil, 742, nil, 742, - nil, nil, nil, 742, nil, nil, nil, nil, nil, nil, - nil, 742, nil, nil, nil, nil, 742, 742, 742, 742, - 742, 742, nil, nil, nil, 742, 742, 761, 761, 761, - nil, 761, nil, nil, nil, 761, 761, nil, nil, nil, - 761, nil, 761, 761, 761, 761, 761, 761, 761, nil, - nil, nil, nil, 761, 761, 761, 761, 761, 761, 761, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 761, - nil, nil, 761, 761, 761, 761, 761, 761, 761, 761, - 761, 761, nil, 761, 761, 761, 761, 761, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 761, nil, nil, - 761, nil, nil, 761, 761, nil, nil, 761, nil, nil, - nil, nil, nil, 761, nil, nil, nil, nil, nil, nil, - nil, 761, nil, nil, nil, nil, 761, 761, 761, 761, - 761, 761, nil, nil, nil, 761, 761, 770, 770, 770, - nil, 770, nil, nil, nil, 770, 770, nil, nil, nil, - 770, nil, 770, 770, 770, 770, 770, 770, 770, nil, - nil, nil, nil, 770, 770, 770, 770, 770, 770, 770, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 770, - nil, nil, 770, 770, 770, 770, 770, 770, 770, 770, - 770, 770, nil, 770, 770, 770, 770, 770, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 770, nil, nil, - 770, nil, nil, 770, 770, nil, nil, 770, nil, nil, - nil, nil, nil, 770, nil, nil, nil, nil, nil, nil, - nil, 770, nil, nil, nil, nil, 770, 770, 770, 770, - 770, 770, nil, nil, nil, 770, 770, 771, 771, 771, - nil, 771, nil, nil, nil, 771, 771, nil, nil, nil, - 771, nil, 771, 771, 771, 771, 771, 771, 771, nil, - nil, nil, nil, 771, 771, 771, 771, 771, 771, 771, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 771, - nil, nil, 771, 771, 771, 771, 771, 771, 771, 771, - 771, 771, nil, 771, 771, nil, nil, 771, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 771, nil, nil, - 771, nil, nil, 771, 771, nil, nil, 771, nil, 771, - nil, 771, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 771, 771, 771, 771, - 771, 771, nil, nil, nil, 771, 771, 782, 782, 782, - nil, 782, nil, nil, nil, 782, 782, nil, nil, nil, - 782, nil, 782, 782, 782, 782, 782, 782, 782, nil, - nil, nil, nil, 782, 782, 782, 782, 782, 782, 782, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 782, - nil, nil, 782, 782, 782, 782, 782, 782, 782, 782, - 782, 782, nil, 782, 782, 782, 782, 782, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 782, nil, nil, - 782, nil, nil, 782, 782, nil, nil, 782, nil, nil, - nil, nil, nil, 782, nil, nil, nil, nil, nil, nil, - nil, 782, nil, nil, nil, nil, 782, 782, 782, 782, - 782, 782, nil, nil, nil, 782, 782, 788, 788, 788, - nil, 788, nil, nil, nil, 788, 788, nil, nil, nil, - 788, nil, 788, 788, 788, 788, 788, 788, 788, nil, - nil, nil, nil, 788, 788, 788, 788, 788, 788, 788, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 788, - nil, nil, 788, 788, 788, 788, 788, 788, 788, 788, - 788, 788, nil, 788, 788, 788, 788, 788, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 788, nil, nil, - 788, nil, nil, 788, 788, nil, nil, 788, nil, nil, - nil, nil, nil, 788, nil, nil, nil, nil, nil, nil, - nil, 788, nil, nil, nil, nil, 788, 788, 788, 788, - 788, 788, nil, nil, nil, 788, 788, 790, 790, 790, - nil, 790, nil, nil, nil, 790, 790, nil, nil, nil, - 790, nil, 790, 790, 790, 790, 790, 790, 790, nil, - nil, nil, nil, 790, 790, 790, 790, 790, 790, 790, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 790, - nil, nil, 790, 790, 790, 790, 790, 790, 790, 790, - 790, 790, nil, 790, 790, 790, 790, 790, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 790, nil, nil, - 790, nil, nil, 790, 790, nil, nil, 790, nil, nil, - nil, nil, nil, 790, nil, nil, nil, nil, nil, nil, - nil, 790, nil, nil, nil, nil, 790, 790, 790, 790, - 790, 790, nil, nil, nil, 790, 790, 804, 804, 804, - nil, 804, nil, nil, nil, 804, 804, nil, nil, nil, - 804, nil, 804, 804, 804, 804, 804, 804, 804, nil, - nil, nil, nil, 804, 804, 804, 804, 804, 804, 804, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 804, - nil, nil, 804, 804, 804, 804, 804, 804, 804, 804, - 804, 804, nil, 804, 804, 804, 804, 804, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 804, nil, nil, - 804, nil, nil, 804, 804, nil, nil, 804, nil, nil, - nil, nil, nil, 804, nil, nil, nil, nil, nil, nil, - nil, 804, nil, nil, nil, nil, 804, 804, 804, 804, - 804, 804, nil, nil, nil, 804, 804, 822, 822, 822, - nil, 822, nil, nil, nil, 822, 822, nil, nil, nil, - 822, nil, 822, 822, 822, 822, 822, 822, 822, nil, - nil, nil, nil, 822, 822, 822, 822, 822, 822, 822, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 822, - nil, nil, 822, 822, 822, 822, 822, 822, 822, 822, - 822, 822, nil, 822, 822, nil, nil, 822, nil, 684, - 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, - nil, 684, 684, nil, nil, 684, 684, 822, nil, nil, - 822, nil, nil, 822, 822, nil, nil, 822, nil, nil, - nil, 684, nil, 684, nil, 684, 684, 684, 684, 684, - 684, 684, nil, 684, nil, nil, 822, 822, 822, 822, - 822, 822, nil, nil, nil, 822, 822, 824, 824, 824, - 684, 824, nil, nil, nil, 824, 824, nil, nil, nil, - 824, nil, 824, 824, 824, 824, 824, 824, 824, nil, - nil, nil, nil, 824, 824, 824, 824, 824, 824, 824, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 824, - nil, nil, 824, 824, 824, 824, 824, 824, 824, 824, - 824, 824, nil, 824, 824, 824, 824, 824, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 824, nil, nil, - 824, nil, nil, 824, 824, nil, nil, 824, nil, 824, - nil, nil, nil, 824, nil, nil, nil, nil, nil, nil, - nil, 824, nil, nil, nil, nil, 824, 824, 824, 824, - 824, 824, nil, nil, nil, 824, 824, 829, 829, 829, - nil, 829, nil, nil, nil, 829, 829, nil, nil, nil, - 829, nil, 829, 829, 829, 829, 829, 829, 829, nil, - nil, nil, nil, 829, 829, 829, 829, 829, 829, 829, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 829, - nil, nil, 829, 829, 829, 829, 829, 829, 829, 829, - 829, 829, nil, 829, 829, nil, nil, 829, nil, 686, - 686, 686, 686, 686, 686, 686, 686, 686, 686, 686, - nil, 686, 686, nil, nil, 686, 686, 829, nil, nil, - 829, nil, nil, 829, 829, nil, nil, 829, nil, nil, - nil, 686, nil, 686, nil, 686, 686, 686, 686, 686, - 686, 686, nil, 686, nil, nil, 829, 829, 829, 829, - 829, 829, nil, nil, nil, 829, 829, 834, 834, 834, - 686, 834, nil, nil, nil, 834, 834, nil, nil, nil, - 834, nil, 834, 834, 834, 834, 834, 834, 834, nil, - nil, nil, nil, 834, 834, 834, 834, 834, 834, 834, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 834, - nil, nil, 834, 834, 834, 834, 834, 834, 834, 834, - 834, 834, nil, 834, 834, 834, 834, 834, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 834, nil, nil, - 834, nil, nil, 834, 834, nil, nil, 834, nil, 834, - nil, 834, nil, 834, nil, nil, nil, nil, nil, nil, - nil, 834, nil, nil, nil, nil, 834, 834, 834, 834, - 834, 834, nil, nil, nil, 834, 834, 837, 837, 837, - nil, 837, nil, nil, nil, 837, 837, nil, nil, nil, - 837, nil, 837, 837, 837, 837, 837, 837, 837, nil, - nil, nil, nil, 837, 837, 837, 837, 837, 837, 837, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 837, - nil, nil, 837, 837, 837, 837, 837, 837, 837, 837, - 837, 837, nil, 837, 837, 837, 837, 837, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 837, nil, nil, - 837, nil, nil, 837, 837, nil, nil, 837, nil, 837, - nil, 837, nil, 837, nil, nil, nil, nil, nil, nil, - nil, 837, nil, nil, nil, nil, 837, 837, 837, 837, - 837, 837, nil, nil, nil, 837, 837, 863, 863, 863, - nil, 863, nil, nil, nil, 863, 863, nil, nil, nil, - 863, nil, 863, 863, 863, 863, 863, 863, 863, nil, - nil, nil, nil, 863, 863, 863, 863, 863, 863, 863, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 863, - nil, nil, 863, 863, 863, 863, 863, 863, 863, 863, - 863, 863, nil, 863, 863, nil, nil, 863, nil, 689, - 689, 689, 689, 689, 689, 689, 689, 689, 689, 689, - nil, 689, 689, nil, nil, 689, 689, 863, nil, nil, - 863, nil, nil, 863, 863, nil, nil, 863, nil, nil, - nil, 689, nil, 689, nil, 689, 689, 689, 689, 689, - 689, 689, nil, 689, nil, nil, 863, 863, 863, 863, - 863, 863, nil, nil, nil, 863, 863, 866, 866, 866, - 689, 866, nil, nil, nil, 866, 866, nil, nil, nil, - 866, nil, 866, 866, 866, 866, 866, 866, 866, nil, - nil, nil, nil, 866, 866, 866, 866, 866, 866, 866, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 866, - nil, nil, 866, 866, 866, 866, 866, 866, 866, 866, - 866, 866, nil, 866, 866, 866, 866, 866, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 866, nil, nil, - 866, nil, nil, 866, 866, nil, nil, 866, nil, nil, - nil, nil, nil, 866, nil, nil, nil, nil, nil, nil, - nil, 866, nil, nil, nil, nil, 866, 866, 866, 866, - 866, 866, nil, nil, nil, 866, 866, 869, 869, 869, - nil, 869, nil, nil, nil, 869, 869, nil, nil, nil, - 869, nil, 869, 869, 869, 869, 869, 869, 869, nil, - nil, nil, nil, 869, 869, 869, 869, 869, 869, 869, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 869, - nil, nil, 869, 869, 869, 869, 869, 869, 869, 869, - 869, 869, nil, 869, 869, 869, 869, 869, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 869, nil, nil, - 869, nil, nil, 869, 869, nil, nil, 869, nil, nil, - nil, nil, nil, 869, nil, nil, nil, nil, nil, nil, - nil, 869, nil, nil, nil, nil, 869, 869, 869, 869, - 869, 869, nil, nil, nil, 869, 869, 877, 877, 877, - nil, 877, nil, nil, nil, 877, 877, nil, nil, nil, - 877, nil, 877, 877, 877, 877, 877, 877, 877, nil, - nil, nil, nil, 877, 877, 877, 877, 877, 877, 877, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 877, - nil, nil, 877, 877, 877, 877, 877, 877, 877, 877, - 877, 877, nil, 877, 877, nil, nil, 877, nil, 691, - 691, 691, 691, 691, 691, 691, 691, 691, 691, 691, - nil, 691, 691, nil, nil, 691, 691, 877, nil, nil, - 877, nil, nil, 877, 877, nil, nil, 877, nil, nil, - nil, 691, nil, 691, nil, 691, 691, 691, 691, 691, - 691, 691, nil, 691, nil, nil, 877, 877, 877, 877, - 877, 877, nil, nil, nil, 877, 877, 882, 882, 882, - 691, 882, nil, nil, nil, 882, 882, nil, nil, nil, - 882, nil, 882, 882, 882, 882, 882, 882, 882, nil, - nil, nil, nil, 882, 882, 882, 882, 882, 882, 882, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 882, - nil, nil, 882, 882, 882, 882, 882, 882, 882, 882, - 882, 882, nil, 882, 882, 882, 882, 882, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 882, nil, nil, - 882, nil, nil, 882, 882, nil, nil, 882, nil, 882, - nil, 882, nil, 882, nil, nil, nil, nil, nil, nil, - nil, 882, nil, nil, nil, nil, 882, 882, 882, 882, - 882, 882, nil, nil, nil, 882, 882, 888, 888, 888, - nil, 888, nil, nil, nil, 888, 888, nil, nil, nil, - 888, nil, 888, 888, 888, 888, 888, 888, 888, nil, - nil, nil, nil, 888, 888, 888, 888, 888, 888, 888, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 888, - nil, nil, 888, 888, 888, 888, 888, 888, 888, 888, - 888, 888, nil, 888, 888, nil, nil, 888, nil, 696, - 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, - nil, 696, 696, nil, nil, 696, 696, 888, nil, nil, - 888, nil, nil, 888, 888, nil, nil, 888, nil, nil, - nil, 696, nil, 696, nil, 696, 696, 696, 696, 696, - 696, 696, nil, 696, nil, nil, 888, 888, 888, 888, - 888, 888, nil, nil, nil, 888, 888, 891, 891, 891, - 696, 891, nil, nil, nil, 891, 891, nil, nil, nil, - 891, nil, 891, 891, 891, 891, 891, 891, 891, nil, - nil, nil, nil, 891, 891, 891, 891, 891, 891, 891, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 891, - nil, nil, 891, 891, 891, 891, 891, 891, 891, 891, - 891, 891, nil, 891, 891, 891, 891, 891, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 891, nil, nil, - 891, nil, nil, 891, 891, nil, nil, 891, nil, nil, - nil, nil, nil, 891, nil, nil, nil, nil, nil, nil, - nil, 891, nil, nil, nil, nil, 891, 891, 891, 891, - 891, 891, nil, nil, nil, 891, 891, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 64, nil, nil, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, nil, nil, nil, nil, nil, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - nil, nil, nil, nil, nil, 64, 64, nil, 64, 64, - 64, 64, nil, 64, 64, nil, nil, 64, nil, nil, - nil, nil, 64, 64, 64, 64, nil, nil, nil, nil, - nil, 64, nil, nil, nil, nil, nil, nil, nil, 64, - 64, nil, 64, 64, 64, 64, 64, 64, 64, 64, - 64, nil, 64, nil, nil, 64, 666, 666, 666, 666, - 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, - 666, 666, 666, 666, 666, 666, 666, 666, 666, 666, - nil, nil, 666, 666, 666, 666, 666, 666, 666, 666, - 666, 666, nil, nil, nil, nil, nil, 666, 666, 666, - 666, 666, 666, 666, 666, nil, nil, 666, nil, nil, - nil, nil, nil, nil, 666, 666, nil, 666, 666, 666, - 666, nil, 666, 666, nil, nil, 666, nil, nil, nil, - nil, 666, 666, 666, 666, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 666, 666, - nil, 666, 666, 666, 666, 666, 666, 666, 666, 666, - nil, 666, nil, nil, 666, 583, 583, 583, 583, 583, - 583, 583, 583, 583, 583, 583, nil, 583, 583, nil, - nil, 583, 583, nil, nil, nil, 583, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 583, nil, 583, - nil, 583, 583, 583, 583, 583, 583, 583, nil, 583, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 583, nil, 583, 425, - 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, - nil, 425, 425, nil, nil, 425, 425, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 425, nil, 425, nil, 425, 425, 425, 425, 425, - 425, 425, nil, 425, nil, nil, nil, nil, nil, nil, - nil, 194, 194, nil, nil, 194, nil, nil, nil, nil, - 425, 425, 194, 194, nil, 194, 194, 194, 194, nil, - 194, 194, nil, nil, 194, nil, nil, nil, nil, 194, - 194, 194, 194, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 194, 194, nil, 194, - 194, 194, 194, 194, 194, 194, 194, 194, nil, 194, - 195, 195, 194, nil, 195, nil, nil, nil, nil, nil, - nil, 195, 195, nil, 195, 195, 195, 195, nil, 195, - 195, nil, nil, 195, nil, nil, nil, nil, 195, 195, - 195, 195, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 195, 195, nil, 195, 195, - 195, 195, 195, 195, 195, 195, 195, nil, 195, 253, - 253, 195, nil, 253, nil, nil, nil, nil, nil, nil, - 253, 253, nil, 253, 253, 253, 253, nil, 253, 253, - nil, nil, 253, nil, nil, nil, nil, 253, 253, 253, - 253, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 253, 253, nil, 253, 253, 253, - 253, 253, 253, 253, 253, 253, nil, 253, 254, 254, - 253, nil, 254, nil, nil, nil, nil, nil, nil, 254, - 254, nil, 254, 254, 254, 254, nil, 254, 254, nil, - nil, 254, nil, nil, nil, nil, 254, 254, 254, 254, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 254, 254, nil, 254, 254, 254, 254, - 254, 254, 254, 254, 254, nil, 254, 393, 393, 254, - nil, 393, nil, nil, nil, nil, nil, nil, 393, 393, - nil, 393, 393, 393, 393, nil, 393, 393, nil, nil, - 393, nil, nil, nil, nil, 393, 393, 393, 393, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 393, 393, nil, 393, 393, 393, 393, 393, - 393, 393, 393, 393, nil, 393, 394, 394, 393, nil, - 394, nil, nil, nil, nil, nil, nil, 394, 394, nil, - 394, 394, 394, 394, nil, 394, 394, nil, nil, 394, - nil, nil, nil, nil, 394, 394, 394, 394, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 394, 394, nil, 394, 394, 394, 394, 394, 394, - 394, 394, 394, nil, 394, 459, 459, 394, nil, 459, - nil, nil, nil, nil, nil, nil, 459, 459, nil, 459, - 459, 459, 459, nil, 459, 459, nil, nil, 459, nil, - nil, nil, nil, 459, 459, 459, 459, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 459, 459, nil, 459, 459, 459, 459, 459, 459, 459, - 459, 459, nil, 459, 460, 460, 459, nil, 460, nil, - nil, nil, nil, nil, nil, 460, 460, nil, 460, 460, - 460, 460, nil, 460, 460, nil, nil, 460, nil, nil, - nil, nil, 460, 460, 460, 460, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 460, - 460, nil, 460, 460, 460, 460, 460, 460, 460, 460, - 460, nil, 460, 468, 468, 460, nil, 468, nil, nil, - nil, nil, nil, nil, 468, 468, nil, 468, 468, 468, - 468, nil, 468, 468, nil, nil, 468, nil, nil, nil, - nil, 468, 468, 468, 468, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 468, 468, - nil, 468, 468, 468, 468, 468, 468, 468, 468, 468, - nil, 468, 469, 469, 468, nil, 469, nil, nil, nil, - nil, nil, nil, 469, 469, nil, 469, 469, 469, 469, - nil, 469, 469, nil, nil, 469, nil, nil, nil, nil, - 469, 469, 469, 469, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 469, 469, nil, - 469, 469, 469, 469, 469, 469, 469, 469, 469, nil, - 469, nil, nil, 469, 482, 482, 482, 482, 482, 482, - 482, 482, 482, 482, 482, nil, 482, 482, nil, nil, - 482, 482, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 482, nil, 482, nil, - 482, 482, 482, 482, 482, 482, 482, nil, 482, nil, - nil, nil, nil, nil, nil, 500, 500, nil, nil, 500, - nil, nil, nil, nil, 482, 482, 500, 500, nil, 500, - 500, 500, 500, nil, 500, 500, nil, nil, 500, nil, - nil, nil, nil, 500, 500, 500, 500, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 500, 500, nil, 500, 500, 500, 500, 500, 500, 500, - 500, 500, nil, 500, 501, 501, 500, nil, 501, nil, - nil, nil, nil, nil, nil, 501, 501, nil, 501, 501, - 501, 501, nil, 501, 501, nil, nil, 501, nil, nil, - nil, nil, 501, 501, 501, 501, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 501, - 501, nil, 501, 501, 501, 501, 501, 501, 501, 501, - 501, nil, 501, 507, 507, 501, nil, 507, nil, nil, - nil, nil, nil, nil, 507, 507, nil, 507, 507, 507, - 507, nil, 507, 507, nil, nil, 507, nil, nil, nil, - nil, 507, 507, 507, 507, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 507, 507, - nil, 507, 507, 507, 507, 507, 507, 507, 507, 507, - nil, 507, 509, 509, 507, nil, 509, nil, nil, nil, - nil, nil, nil, 509, 509, nil, 509, 509, 509, 509, - nil, 509, 509, nil, nil, 509, nil, nil, nil, nil, - 509, 509, 509, 509, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 509, 509, nil, - 509, 509, 509, 509, 509, 509, 509, 509, 509, nil, - 509, 580, 580, 509, nil, 580, nil, nil, nil, nil, - nil, nil, 580, 580, nil, 580, 580, 580, 580, nil, - 580, 580, nil, nil, 580, nil, nil, nil, nil, 580, - 580, 580, 580, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 580, 580, nil, 580, - 580, 580, 580, 580, 580, 580, 580, 580, nil, 580, - 581, 581, 580, nil, 581, nil, nil, nil, nil, nil, - nil, 581, 581, nil, 581, 581, 581, 581, nil, 581, - 581, nil, nil, 581, nil, nil, nil, nil, 581, 581, - 581, 581, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 581, 581, nil, 581, 581, - 581, 581, 581, 581, 581, 581, 581, nil, 581, nil, - nil, 581, 733, 733, 733, 733, 733, 733, 733, 733, - 733, 733, 733, nil, 733, 733, nil, nil, 733, 733, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 733, nil, 733, nil, 733, 733, - 733, 733, 733, 733, 733, nil, 733, nil, 769, 769, - 769, 769, 769, 769, 769, 769, 769, 769, 769, nil, - 769, 769, 733, 733, 769, 769, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 769, nil, 769, nil, 769, 769, 769, 769, 769, 769, - 769, nil, 769, nil, nil, nil, 825, 825, nil, nil, - 825, nil, nil, nil, nil, nil, nil, 825, 825, 769, - 825, 825, 825, 825, nil, 825, 825, nil, nil, 825, - nil, nil, nil, nil, 825, 825, 825, 825, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 825, 825, nil, 825, 825, 825, 825, 825, 825, - 825, 825, 825, nil, 825, 826, 826, 825, nil, 826, - nil, nil, nil, nil, nil, nil, 826, 826, nil, 826, - 826, 826, 826, nil, 826, 826, nil, nil, 826, nil, - nil, nil, nil, 826, 826, 826, 826, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 826, 826, nil, 826, 826, 826, 826, 826, 826, 826, - 826, 826, nil, 826, nil, nil, 826 ] - -racc_action_pointer = [ - 1221, 29, nil, 133, 854, 4729, 4849, 4969, -52, -46, - -41, -31, 27, 271, 117, 206, nil, 5081, 5201, 6042, - 100, nil, 5321, 5441, 5561, 268, 141, 5681, 5801, nil, - 1342, 5921, 6041, nil, 91, 221, 220, 200, 6161, 6281, - 6401, 166, 357, nil, nil, nil, nil, nil, nil, nil, - 212, 1463, 6521, 6641, 6761, 57, 6881, 7001, nil, nil, - 727, 7121, 7241, 7361, 22585, nil, nil, nil, nil, nil, - nil, nil, 82, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 7481, nil, nil, nil, 7601, nil, - nil, nil, nil, nil, nil, nil, nil, 298, nil, 854, - nil, nil, nil, 7721, 7841, 7961, 8081, 8201, 971, nil, - 340, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 182, nil, 1584, 1705, - 8321, 8441, 8561, 8681, 22872, 22931, 8801, 8921, 9041, nil, - 385, -52, 295, -51, 241, 298, 1826, nil, nil, 9161, - 9281, 9401, 9521, 9641, 9761, 9881, 10001, 10121, 10241, 10361, - 10481, 10601, 10721, 10841, 10961, 11081, 11201, 11321, 11441, 11561, - 11681, 11801, 11921, 12041, 12161, 12281, nil, nil, nil, 7122, - nil, 264, 289, 12401, nil, 12521, 344, nil, nil, nil, - nil, nil, nil, 22990, 23049, 361, 12641, 12761, nil, nil, - nil, nil, nil, nil, nil, 12881, 405, 1947, 416, 478, - 442, 13001, 2068, 476, 481, 521, 506, 496, 461, 158, - nil, 506, 213, nil, nil, 237, 531, 532, 596, nil, - 534, nil, 13121, nil, 597, 596, 429, nil, 483, 241, - 316, 13241, 523, 388, 506, 441, nil, 477, -7, 8, - 13361, 13481, 172, 31, 491, -9, 601, 567, -1, 597, - nil, nil, 220, 265, -23, nil, 626, nil, 9, 13601, - nil, nil, 288, 312, 351, 382, 407, 451, 452, 470, - nil, 482, nil, 13721, nil, 205, 284, 317, 343, -35, - 351, nil, 1092, nil, nil, nil, nil, nil, nil, 13841, - nil, nil, nil, nil, 534, 536, nil, nil, 727, nil, - 520, 13953, nil, 521, nil, nil, 7242, 559, 246, 293, - 14073, nil, nil, 0, 566, 106, nil, 14193, 14313, nil, - 7362, nil, nil, 23108, 23167, 14433, -37, 14553, 14673, 14793, - 974, 1221, 377, 549, 590, 601, 608, 609, 2794, 2915, - 3036, 1342, 1463, 1584, 1705, 1826, 1947, 2068, 2189, 2310, - 2431, 459, 579, 2552, 2673, 22806, -50, nil, 14913, nil, - 15033, 547, nil, 15153, 318, nil, nil, 371, nil, nil, - 589, 560, -63, 558, 658, nil, nil, 15273, -47, 92, - 600, nil, 601, 568, nil, nil, nil, 610, 15393, 23226, - 23285, 651, 612, nil, nil, 15513, 15633, 15753, 23344, 23403, - 13002, 15873, 688, 15993, nil, 581, nil, nil, 16113, nil, - nil, 16233, 23451, nil, 16353, nil, nil, nil, 2189, 700, - nil, nil, 2310, 67, 108, 698, 706, 2431, 16473, 16593, - 23516, 23575, 4, nil, nil, 727, nil, 23634, 16713, 23693, - nil, nil, 16833, 327, -34, 2552, 537, nil, nil, nil, - -32, nil, nil, nil, 711, nil, nil, nil, 595, nil, - 147, nil, nil, 597, nil, nil, 16953, nil, nil, 17065, - 17185, nil, 294, 17305, 17425, 633, nil, nil, 17545, 641, - nil, 17665, 70, 85, 487, 607, 644, 1095, 17785, 17905, - nil, 2673, 18025, 613, nil, 656, 18145, nil, 659, nil, - 672, nil, nil, nil, nil, nil, 113, nil, 683, 685, - 23752, 23811, 18265, 22742, -67, 647, 18385, nil, 697, nil, - 2794, 2915, nil, -30, nil, 714, 62, 111, 724, 308, - 780, 727, 19466, 751, 755, -2, 813, nil, 3036, 697, - 751, nil, nil, 749, 18505, nil, nil, 510, nil, 823, - nil, nil, nil, nil, nil, 835, nil, 836, 720, 15, - 18625, 758, 13, 24, 25, 137, 18745, 340, 837, nil, - 761, 3157, 350, nil, nil, 853, 3278, 433, 372, 737, - 741, 742, nil, nil, nil, nil, nil, 749, nil, nil, - nil, nil, 830, nil, nil, 831, 22694, 794, nil, nil, - nil, nil, nil, 3399, nil, nil, nil, nil, nil, 19946, - 763, 18865, 18985, nil, 21146, nil, 21386, nil, nil, 21746, - nil, 22106, 19105, 19225, 19345, 214, 22346, nil, 764, 974, - 19465, nil, 815, 921, 805, nil, 19585, 808, 3520, nil, - nil, 854, 858, -62, 918, 19705, nil, 19825, 823, nil, - 863, 842, 952, 730, nil, nil, 3641, nil, nil, 31, - 19945, nil, nil, 23859, 953, nil, 20065, 955, 3762, 3883, - nil, nil, 20185, 4004, nil, 26, 132, nil, 962, nil, - 4125, nil, 963, 850, nil, 657, nil, -43, nil, nil, - 456, 20305, nil, nil, nil, nil, 870, nil, nil, 23905, - 20425, 20545, 843, 845, 928, 847, 857, 890, nil, nil, - nil, nil, 20665, nil, 878, 901, 888, nil, 20785, 889, - 20905, nil, nil, nil, nil, nil, 4246, nil, nil, nil, - 32, nil, 1007, 1008, 21025, 148, nil, nil, 1010, nil, - 933, 905, 908, nil, nil, 909, 919, nil, nil, 904, - nil, nil, 21145, 1095, 21265, 23967, 24026, 848, 955, 21385, - 5922, nil, nil, nil, 21505, 926, nil, 21625, 929, 1050, - 4367, nil, nil, nil, nil, nil, nil, 4488, nil, nil, - 173, nil, nil, nil, 4609, nil, 932, 964, 970, 343, - 363, 393, 873, 21745, nil, nil, 21865, 938, nil, 21985, - nil, nil, 564, 1056, 941, 1059, 974, 22105, 851, nil, - 946, nil, 22225, 954, nil, nil, nil, nil, 22345, nil, - nil, 22465, nil, nil, 956, nil ] - -racc_action_default = [ - -4, -499, -1, -487, -5, -499, -499, -499, -499, -499, - -499, -499, -499, -499, -271, -32, -33, -499, -499, -38, - -40, -41, -282, -315, -316, -45, -249, -363, -285, -58, - -4, -62, -67, -68, -499, -430, -499, -499, -499, -499, - -499, -489, -214, -264, -265, -266, -267, -268, -269, -270, - -477, -4, -499, -498, -469, -288, -499, -499, -292, -295, - -487, -499, -499, -499, -499, -317, -318, -320, -321, -383, - -384, -385, -386, -387, -401, -390, -403, -403, -394, -399, - -413, -403, -415, -416, -419, -420, -421, -422, -423, -424, - -425, -426, -427, -428, -429, -432, -433, -499, -3, -488, - -494, -495, -496, -499, -499, -499, -499, -499, -6, -8, - -499, -93, -94, -95, -96, -97, -98, -99, -100, -101, - -105, -106, -107, -108, -109, -110, -111, -112, -113, -114, - -115, -116, -117, -118, -119, -120, -121, -122, -123, -124, - -125, -126, -127, -128, -129, -130, -131, -132, -133, -134, - -135, -136, -137, -138, -139, -140, -141, -142, -143, -144, - -145, -146, -147, -148, -149, -150, -151, -152, -153, -154, - -155, -156, -157, -158, -159, -160, -161, -162, -163, -164, - -165, -166, -167, -168, -169, -170, -13, -102, -4, -4, - -499, -499, -499, -498, -499, -499, -499, -499, -499, -36, - -499, -430, -499, -271, -499, -499, -4, -37, -206, -499, - -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, - -499, -499, -499, -499, -499, -499, -499, -499, -499, -499, - -499, -499, -499, -499, -499, -499, -353, -355, -42, -215, - -228, -258, -258, -499, -236, -499, -259, -282, -315, -316, - -472, -43, -44, -499, -499, -50, -498, -499, -287, -358, - -364, -366, -56, -362, -57, -499, -58, -4, -499, -499, - -63, -65, -4, -72, -499, -499, -79, -285, -489, -499, - -319, -363, -499, -66, -70, -278, -417, -418, -499, -191, - -192, -207, -499, -490, -375, -499, -274, -216, -489, -491, - -491, -499, -499, -491, -499, -491, -289, -39, -499, -499, - -499, -499, -487, -499, -488, -430, -499, -499, -271, -499, - -333, -334, -88, -89, -499, -91, -499, -271, -499, -499, - -430, -308, -93, -94, -131, -132, -148, -153, -160, -163, - -310, -499, -467, -499, -388, -499, -499, -499, -499, -499, - -499, 896, -7, -497, -14, -15, -16, -17, -18, -499, - -10, -11, -12, -103, -499, -499, -21, -29, -171, -259, - -499, -499, -22, -30, -31, -23, -173, -499, -478, -479, - -226, -480, -481, -478, -249, -479, -361, -483, -484, -28, - -180, -34, -35, -499, -499, -498, -278, -499, -499, -499, - -181, -182, -183, -184, -185, -186, -187, -188, -193, -194, - -195, -196, -197, -198, -199, -200, -201, -202, -203, -204, - -205, -208, -209, -210, -211, -499, -349, -229, -499, -231, - -499, -258, -256, -499, -249, -478, -479, -249, -48, -51, - -499, -489, -489, -258, -228, -250, -251, -252, -349, -349, - -499, -284, -499, -59, -276, -71, -64, -499, -498, -499, - -499, -78, -499, -417, -418, -499, -499, -499, -499, -499, - -212, -499, -498, -498, -273, -489, -217, -218, -493, -492, - -220, -493, -489, -280, -493, -471, -281, -470, -4, -322, - -323, -324, -4, -499, -499, -499, -499, -4, -499, -498, - -499, -499, -278, -301, -88, -89, -90, -499, -498, -499, - -304, -434, -499, -499, -499, -4, -447, -312, -485, -486, - -489, -389, -402, -405, -499, -407, -391, -404, -499, -393, - -499, -396, -398, -499, -414, -9, -499, -19, -20, -499, - -499, -263, -279, -499, -499, -52, -227, -359, -499, -54, - -360, -499, -478, -479, -482, -277, -499, -171, -499, -499, - -351, -4, -499, -258, -257, -260, -499, -473, -499, -235, - -499, -474, -46, -356, -47, -357, -349, -222, -499, -499, - -499, -499, -499, -38, -499, -258, -499, -248, -499, -254, - -4, -4, -283, -59, -69, -499, -478, -479, -226, -75, - -77, -499, -179, -189, -190, -499, -498, -331, -4, -376, - -498, -377, -378, -499, -499, -260, -221, -498, -325, -498, - -293, -326, -327, -328, -296, -499, -299, -499, -369, -499, - -499, -499, -478, -479, -482, -277, -499, -88, -89, -92, - -499, -4, -499, -436, -306, -499, -4, -447, -499, -466, - -466, -466, -446, -448, -449, -450, -451, -452, -453, -456, - -458, -459, -461, -462, -463, -499, -499, -499, -406, -409, - -410, -411, -412, -4, -392, -395, -397, -400, -104, -172, - -261, -499, -499, -25, -175, -26, -176, -53, -27, -177, - -55, -178, -499, -499, -499, -279, -213, -335, -337, -347, - -499, -350, -499, -499, -258, -233, -499, -258, -4, -223, - -224, -226, -226, -489, -499, -499, -241, -499, -258, -253, - -499, -499, -499, -73, -286, -2, -4, -382, -332, -499, - -499, -380, -275, -489, -499, -329, -499, -499, -4, -4, - -298, -300, -499, -4, -371, -279, -499, -279, -499, -435, - -4, -309, -499, -489, -438, -499, -442, -499, -444, -445, - -499, -499, -460, -464, -313, -468, -499, -262, -24, -174, - -499, -338, -80, -499, -499, -87, -346, -499, -348, -352, - -354, -230, -499, -232, -499, -499, -258, -238, -499, -258, - -499, -247, -255, -365, -367, -381, -4, -379, -219, -290, - -499, -291, -499, -499, -499, -498, -302, -305, -499, -311, - -499, -466, -466, -454, -465, -466, -499, -457, -455, -447, - -408, -336, -499, -343, -498, -499, -499, -86, -499, -499, - -258, -49, -225, -237, -499, -258, -243, -499, -258, -375, - -4, -294, -297, -370, -368, -372, -373, -4, -307, -437, - -499, -440, -441, -443, -4, -339, -342, -499, -499, -82, - -84, -83, -85, -499, -345, -234, -499, -258, -239, -499, - -242, -374, -498, -499, -466, -499, -499, -499, -81, -344, - -258, -244, -499, -258, -330, -303, -439, -314, -499, -341, - -240, -499, -245, -340, -258, -246 ] - -racc_goto_table = [ - 10, 472, 242, 242, 242, 10, 270, 280, 280, 340, - 295, 259, 263, 302, 240, 240, 240, 244, 244, 244, - 102, 496, 114, 114, 109, 187, 606, 117, 117, 98, - 10, 442, 2, 646, 305, 119, 119, 280, 280, 280, - 255, 262, 264, 292, 573, 298, 652, 575, 734, 439, - 207, 10, 266, 199, 567, 1, 506, 367, 374, 620, - 624, 320, 269, 328, 331, 268, 283, 817, 522, 380, - 384, 531, 488, 492, 241, 241, 241, 102, 725, 561, - 114, 108, 99, 812, 186, 815, 313, 321, 296, 238, - 251, 252, 307, 307, 359, 13, 307, 576, 536, 10, - 13, 590, 591, 346, 347, 567, 303, 10, 350, 589, - 477, 480, 200, 200, 485, 445, 487, 200, 200, 200, - 588, 720, 342, 304, 306, 13, 274, 274, 434, 437, - 319, 510, 341, 517, 475, 310, 738, 311, 739, 307, - 307, 307, 307, 636, 847, 641, 13, 200, 200, 750, - 515, 200, 200, 377, 516, 200, 316, 326, 326, 666, - 817, 819, 698, 702, 426, 448, 449, 629, 308, 309, - 844, 610, 312, 737, 729, 352, 344, 652, 874, 345, - 348, 530, 349, 358, 668, 298, 673, 753, 10, 10, - 811, 813, nil, nil, 13, 440, nil, nil, 200, 200, - 200, 200, 13, 625, nil, nil, 10, nil, 756, 758, - 759, 388, nil, nil, nil, 354, 355, 356, 357, nil, - 364, 365, 366, 372, 375, nil, nil, nil, 389, 708, - nil, nil, nil, 391, 392, nil, 242, 242, 269, 639, - nil, nil, 370, 370, nil, 242, nil, 280, 444, 240, - nil, 244, 244, 676, nil, nil, nil, 240, nil, nil, - 244, nil, nil, nil, 259, 14, 263, 10, 380, 384, - 14, nil, 10, nil, nil, nil, nil, nil, nil, nil, - 462, nil, nil, 13, 13, 200, 200, 200, 200, 266, - nil, 200, 200, 200, 266, 14, 276, 276, nil, 269, - 476, 13, 452, 884, 269, 456, nil, 457, 443, 241, - nil, nil, 806, nil, nil, nil, 14, 241, nil, nil, - nil, 573, 575, 441, 446, nil, 318, 327, 327, 102, - 567, nil, 450, nil, nil, 601, 854, nil, 495, 687, - 611, 567, nil, 690, 601, 511, 307, 307, nil, 652, - nil, 200, 200, nil, nil, 556, nil, 713, nil, 845, - 200, nil, 13, nil, 14, 514, 274, 13, nil, 550, - 851, 852, 14, nil, 853, 114, 601, 535, nil, 520, - 117, 429, 601, nil, nil, nil, nil, 298, 119, nil, - nil, nil, nil, 743, 545, nil, nil, nil, 549, nil, - nil, nil, nil, nil, nil, 200, 200, nil, 563, nil, - 388, 607, 612, nil, nil, nil, nil, nil, 595, nil, - nil, nil, 493, 494, 200, nil, nil, 585, nil, nil, - nil, nil, nil, 886, nil, nil, nil, nil, 200, nil, - nil, nil, 587, 578, 579, nil, nil, nil, 572, nil, - 298, 574, nil, 14, 14, 711, 712, nil, nil, 631, - nil, 567, nil, nil, nil, nil, nil, nil, 640, nil, - nil, 14, nil, nil, 645, nil, 388, 613, nil, nil, - nil, nil, nil, 296, 616, 388, nil, nil, 10, nil, - 200, 298, 10, 796, nil, nil, nil, 10, nil, nil, - 298, nil, nil, nil, nil, nil, 567, 605, nil, nil, - 621, 621, nil, 846, nil, 10, nil, 388, nil, nil, - 617, nil, 667, 388, 619, 370, nil, nil, nil, 627, - 643, 644, 14, nil, 697, 280, 276, 14, nil, nil, - nil, nil, 200, nil, nil, 727, 871, nil, 307, 731, - 628, nil, 114, 200, 678, nil, 607, 117, 607, nil, - nil, 10, 563, nil, 840, 119, 200, nil, nil, nil, - 569, nil, nil, nil, 714, 683, 685, nil, nil, nil, - 688, nil, nil, 13, nil, nil, 550, 13, nil, nil, - 10, 10, 13, 703, 200, nil, nil, nil, nil, nil, - 748, nil, nil, 200, nil, 752, nil, 200, 10, nil, - 13, 764, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 721, 722, 642, nil, nil, nil, nil, nil, - 35, nil, nil, nil, nil, 35, nil, nil, 200, 200, - 728, 10, nil, 200, nil, nil, 10, nil, nil, nil, - nil, nil, nil, nil, 274, nil, 13, nil, nil, 749, - 35, 273, 273, nil, nil, 754, nil, nil, nil, nil, - nil, nil, 307, 10, nil, 280, 280, 200, nil, nil, - nil, 35, 114, nil, nil, 13, 13, nil, nil, nil, - nil, 315, 330, 330, 330, 789, nil, nil, nil, 776, - 778, 601, 705, 13, nil, 766, 280, nil, 10, 808, - 787, nil, nil, nil, 768, 785, nil, nil, nil, nil, - nil, nil, nil, nil, 716, nil, 10, nil, nil, 35, - 797, 200, nil, nil, nil, 798, 13, 35, 10, 10, - 784, 13, nil, 10, 607, nil, 821, 280, 746, nil, - 10, nil, nil, 14, nil, 810, nil, 14, 795, nil, - nil, nil, 14, 621, nil, nil, nil, 786, 13, nil, - 802, 803, 307, nil, nil, 805, nil, 200, nil, nil, - 14, nil, nil, nil, 858, nil, nil, nil, nil, 672, - nil, nil, nil, nil, 773, 773, 10, nil, 280, 280, - nil, nil, nil, 13, nil, 280, nil, nil, nil, nil, - nil, 607, nil, 875, 867, nil, 298, nil, 35, 35, - nil, 13, 855, 856, 276, 773, 14, nil, 839, 864, - nil, 200, nil, 13, 13, nil, 35, nil, 13, 280, - 10, nil, 388, 781, nil, 13, 783, 10, 800, nil, - nil, nil, nil, 280, 10, 14, 14, 791, nil, nil, - nil, nil, nil, 879, 280, nil, 274, nil, nil, nil, - nil, nil, 872, 14, nil, nil, nil, 889, nil, 873, - nil, nil, nil, nil, nil, nil, nil, nil, 893, nil, - nil, 13, nil, nil, nil, nil, nil, 35, nil, nil, - nil, 273, 35, nil, nil, nil, 14, nil, nil, nil, - nil, 14, nil, nil, nil, nil, nil, 773, 773, 200, - nil, nil, nil, nil, 773, 833, nil, nil, 836, nil, - nil, nil, nil, nil, nil, 13, nil, nil, 14, nil, - nil, nil, 13, nil, nil, nil, nil, nil, nil, 13, - nil, nil, nil, nil, nil, nil, nil, nil, 773, nil, - nil, nil, nil, nil, 775, 775, nil, nil, nil, 865, - nil, nil, 773, 14, 868, nil, nil, 870, nil, nil, - nil, nil, nil, 773, nil, nil, nil, nil, nil, nil, - nil, 14, nil, nil, nil, 775, nil, nil, nil, nil, - nil, nil, nil, 14, 14, nil, 881, nil, 14, nil, - nil, nil, nil, nil, nil, 14, nil, nil, nil, 890, - nil, nil, 892, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 895, nil, nil, 276, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 208, nil, nil, nil, 239, 239, 239, nil, nil, nil, - nil, 14, nil, nil, nil, nil, nil, nil, nil, nil, - 289, 290, 291, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 239, 239, 775, 775, nil, - nil, nil, nil, nil, 775, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 12, 14, nil, nil, nil, 12, - nil, nil, 14, nil, nil, nil, nil, nil, 35, 14, - nil, nil, 35, nil, nil, nil, nil, 35, 775, nil, - nil, nil, nil, nil, 12, nil, nil, nil, nil, nil, - nil, nil, 775, nil, nil, 35, nil, nil, nil, nil, - nil, nil, nil, 775, nil, 12, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 273, - nil, 35, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 12, nil, nil, nil, nil, nil, nil, - nil, 12, nil, nil, nil, nil, nil, nil, nil, nil, - 35, 35, 368, 239, 376, 239, nil, nil, 390, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 35, nil, - nil, 208, 400, 401, 402, 403, 404, 405, 406, 407, - 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, - 418, 419, 420, 421, 422, 423, 424, 425, nil, nil, - nil, 35, nil, nil, nil, 239, 35, 239, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 239, 239, - nil, nil, 12, 12, nil, nil, nil, 239, nil, nil, - nil, nil, nil, 35, nil, nil, nil, nil, nil, nil, - 12, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 470, nil, nil, nil, nil, 772, - 772, nil, nil, 482, nil, nil, nil, nil, 35, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 35, nil, nil, nil, - 772, nil, nil, nil, nil, nil, nil, nil, 35, 35, - nil, 12, nil, 35, nil, nil, 12, nil, nil, nil, - 35, nil, nil, 369, 373, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 273, nil, 239, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 35, 239, nil, 390, - 557, 376, nil, nil, nil, nil, 431, nil, 432, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 772, 772, nil, nil, nil, nil, nil, 772, - 239, nil, 239, nil, nil, 239, nil, nil, nil, nil, - 35, nil, nil, nil, nil, nil, nil, 35, nil, 583, - nil, nil, nil, nil, 35, nil, nil, nil, nil, nil, - 239, nil, nil, 772, nil, nil, nil, 602, 603, 604, - nil, nil, nil, nil, nil, 239, nil, 772, nil, nil, - 239, nil, nil, 239, nil, nil, 239, nil, 772, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 239, 239, nil, nil, nil, nil, nil, nil, nil, nil, - 239, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 541, nil, nil, nil, nil, nil, - nil, 679, 239, nil, nil, 684, 686, nil, nil, nil, - 689, nil, nil, 691, nil, nil, nil, nil, nil, nil, - 696, nil, 12, nil, 239, nil, 12, nil, 239, nil, - nil, 12, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 239, nil, nil, nil, 239, 12, - nil, 565, nil, 568, nil, nil, 571, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 584, nil, nil, nil, nil, nil, 733, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 239, nil, nil, 12, 609, nil, nil, nil, - nil, 615, nil, nil, 568, nil, nil, 615, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 369, nil, nil, 12, 12, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 12, 239, 769, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 684, 686, 689, nil, nil, nil, - nil, nil, nil, 680, nil, nil, nil, nil, 239, nil, - nil, nil, nil, nil, nil, 12, nil, 239, nil, 239, - 12, nil, nil, nil, nil, 704, nil, nil, nil, 707, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 239, 565, nil, 12, nil, 718, - nil, 26, nil, nil, nil, nil, 26, nil, nil, nil, - nil, nil, nil, 239, nil, nil, nil, nil, 26, 26, - nil, nil, 769, 26, 26, 26, nil, nil, nil, nil, - nil, 26, 12, nil, 830, nil, nil, nil, nil, nil, - 239, nil, 239, 744, nil, nil, nil, nil, nil, nil, - 12, nil, 26, 26, 26, nil, 239, 26, 26, nil, - nil, 26, 12, 12, nil, nil, nil, 12, nil, nil, - nil, nil, nil, nil, 12, nil, 239, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 239, nil, nil, 239, - nil, nil, nil, nil, 767, nil, nil, nil, nil, nil, - 26, nil, nil, nil, 26, 26, 26, 26, 26, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 239, 568, - 12, 239, nil, nil, nil, nil, nil, nil, nil, nil, - 568, nil, nil, nil, 239, nil, nil, nil, nil, nil, - nil, nil, nil, 239, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 615, nil, nil, nil, nil, - nil, nil, nil, nil, 12, nil, nil, nil, nil, nil, - nil, 12, nil, nil, 818, nil, nil, nil, 12, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 26, - 26, 26, 26, 26, 26, nil, nil, 26, 26, 26, - nil, 835, nil, 838, nil, nil, nil, 26, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 843, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 565, nil, nil, - 568, nil, nil, nil, nil, nil, nil, 26, 26, nil, - nil, nil, nil, nil, nil, nil, 26, nil, 26, nil, - nil, nil, nil, 26, nil, nil, nil, nil, nil, 880, - nil, nil, 883, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 568, nil, nil, nil, nil, - nil, nil, nil, nil, 894, nil, nil, nil, nil, nil, - nil, 26, 26, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 26, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 26, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 26, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 26, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 26, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 26, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 26, - nil, nil, nil, 26, nil, nil, nil, nil, 26, nil, - 26, nil, nil, nil, nil, nil, nil, nil, nil, 26, - nil, nil, nil, 26, nil, nil, 26, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 26, 26, nil, nil, nil, 26, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 26, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 26, nil, nil, nil, nil, nil, nil, - nil, 26, 26, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 26, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 26, nil, nil, - nil, nil, 26, nil, nil, nil, nil, 26, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 26, nil, nil, nil, nil, nil, - nil, nil, nil, 26, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 26, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 26, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 26, nil, 26, - 26, nil, nil, nil, 26, nil, nil, nil, nil, nil, - nil, 26, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 26, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 26, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 26, nil, nil, nil, nil, nil, nil, 26, nil, - nil, nil, nil, nil, nil, 26 ] - -racc_goto_check = [ - 14, 4, 56, 56, 56, 14, 39, 52, 52, 44, - 3, 57, 57, 19, 26, 26, 26, 60, 60, 60, - 83, 79, 45, 45, 11, 11, 5, 48, 48, 8, - 14, 29, 2, 85, 56, 49, 49, 52, 52, 52, - 31, 31, 31, 51, 58, 26, 128, 58, 77, 32, - 15, 14, 36, 23, 133, 1, 42, 21, 21, 78, - 78, 14, 2, 43, 43, 37, 40, 130, 119, 30, - 30, 119, 76, 76, 54, 54, 54, 83, 6, 33, - 45, 9, 10, 126, 12, 126, 8, 16, 23, 28, - 28, 28, 23, 23, 24, 18, 23, 34, 50, 14, - 18, 33, 33, 116, 116, 133, 54, 14, 116, 61, - 55, 55, 18, 18, 55, 62, 55, 18, 18, 18, - 64, 65, 72, 73, 74, 18, 18, 18, 30, 30, - 80, 82, 86, 87, 88, 89, 90, 91, 92, 23, - 23, 23, 23, 93, 94, 95, 18, 18, 18, 96, - 97, 18, 18, 19, 98, 18, 18, 18, 18, 99, - 130, 100, 101, 102, 104, 106, 107, 108, 13, 13, - 109, 110, 13, 5, 111, 9, 114, 128, 126, 115, - 117, 118, 120, 9, 121, 26, 122, 123, 14, 14, - 125, 129, nil, nil, 18, 53, nil, nil, 18, 18, - 18, 18, 18, 79, nil, nil, 14, nil, 127, 127, - 127, 45, nil, nil, nil, 13, 13, 13, 13, nil, - 2, 2, 15, 15, 15, nil, nil, nil, 15, 33, - nil, nil, nil, 23, 23, nil, 56, 56, 2, 42, - nil, nil, 54, 54, nil, 56, nil, 52, 26, 26, - nil, 60, 60, 119, nil, nil, nil, 26, nil, nil, - 60, nil, nil, nil, 57, 20, 57, 14, 30, 30, - 20, nil, 14, nil, nil, nil, nil, nil, nil, nil, - 51, nil, nil, 18, 18, 18, 18, 18, 18, 36, - nil, 18, 18, 18, 36, 20, 20, 20, nil, 2, - 51, 18, 37, 77, 2, 40, nil, 37, 54, 54, - nil, nil, 78, nil, nil, nil, 20, 54, nil, nil, - nil, 58, 58, 28, 28, nil, 20, 20, 20, 83, - 133, nil, 28, nil, nil, 30, 85, nil, 8, 32, - 21, 133, nil, 32, 30, 83, 23, 23, nil, 128, - nil, 18, 18, nil, nil, 19, nil, 29, nil, 5, - 18, nil, 18, nil, 20, 23, 18, 18, nil, 57, - 127, 127, 20, nil, 127, 45, 30, 11, nil, 23, - 48, 59, 30, nil, nil, nil, nil, 26, 49, nil, - nil, nil, nil, 76, 31, nil, nil, nil, 31, nil, - nil, nil, nil, nil, nil, 18, 18, nil, 56, nil, - 45, 53, 53, nil, nil, nil, nil, nil, 19, nil, - nil, nil, 13, 13, 18, nil, nil, 56, nil, nil, - nil, nil, nil, 127, nil, nil, nil, nil, 18, nil, - nil, nil, 60, 51, 51, nil, nil, nil, 31, nil, - 26, 31, nil, 20, 20, 30, 30, nil, nil, 19, - nil, 133, nil, nil, nil, nil, nil, nil, 19, nil, - nil, 20, nil, nil, 3, nil, 45, 51, nil, nil, - nil, nil, nil, 23, 51, 45, nil, nil, 14, nil, - 18, 26, 14, 76, nil, nil, nil, 14, nil, nil, - 26, nil, nil, nil, nil, nil, 133, 23, nil, nil, - 83, 83, nil, 79, nil, 14, nil, 45, nil, nil, - 2, nil, 51, 45, 2, 54, nil, nil, nil, 2, - 83, 83, 20, nil, 39, 52, 20, 20, nil, nil, - nil, nil, 18, nil, nil, 53, 4, nil, 23, 53, - 54, nil, 45, 18, 11, nil, 53, 48, 53, nil, - nil, 14, 56, nil, 76, 49, 18, nil, nil, nil, - 59, nil, nil, nil, 26, 15, 15, nil, nil, nil, - 15, nil, nil, 18, nil, nil, 57, 18, nil, nil, - 14, 14, 18, 2, 18, nil, nil, nil, nil, nil, - 3, nil, nil, 18, nil, 3, nil, 18, 14, nil, - 18, 44, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 2, 2, 13, nil, nil, nil, nil, nil, - 41, nil, nil, nil, nil, 41, nil, nil, 18, 18, - 2, 14, nil, 18, nil, nil, 14, nil, nil, nil, - nil, nil, nil, nil, 18, nil, 18, nil, nil, 83, - 41, 41, 41, nil, nil, 83, nil, nil, nil, nil, - nil, nil, 23, 14, nil, 52, 52, 18, nil, nil, - nil, 41, 45, nil, nil, 18, 18, nil, nil, nil, - nil, 41, 41, 41, 41, 56, nil, nil, nil, 14, - 14, 30, 59, 18, nil, 2, 52, nil, 14, 3, - 60, nil, nil, nil, 15, 51, nil, nil, nil, nil, - nil, nil, nil, nil, 59, nil, 14, nil, nil, 41, - 14, 18, nil, nil, nil, 51, 18, 41, 14, 14, - 2, 18, nil, 14, 53, nil, 39, 52, 13, nil, - 14, nil, nil, 20, nil, 51, nil, 20, 2, nil, - nil, nil, 20, 83, nil, nil, nil, 54, 18, nil, - 2, 2, 23, nil, nil, 2, nil, 18, nil, nil, - 20, nil, nil, nil, 19, nil, nil, nil, nil, 20, - nil, nil, nil, nil, 18, 18, 14, nil, 52, 52, - nil, nil, nil, 18, nil, 52, nil, nil, nil, nil, - nil, 53, nil, 3, 56, nil, 26, nil, 41, 41, - nil, 18, 14, 14, 20, 18, 20, nil, 2, 14, - nil, 18, nil, 18, 18, nil, 41, nil, 18, 52, - 14, nil, 45, 59, nil, 18, 59, 14, 13, nil, - nil, nil, nil, 52, 14, 20, 20, 59, nil, nil, - nil, nil, nil, 14, 52, nil, 18, nil, nil, nil, - nil, nil, 2, 20, nil, nil, nil, 14, nil, 2, - nil, nil, nil, nil, nil, nil, nil, nil, 14, nil, - nil, 18, nil, nil, nil, nil, nil, 41, nil, nil, - nil, 41, 41, nil, nil, nil, 20, nil, nil, nil, - nil, 20, nil, nil, nil, nil, nil, 18, 18, 18, - nil, nil, nil, nil, 18, 59, nil, nil, 59, nil, - nil, nil, nil, nil, nil, 18, nil, nil, 20, nil, - nil, nil, 18, nil, nil, nil, nil, nil, nil, 18, - nil, nil, nil, nil, nil, nil, nil, nil, 18, nil, - nil, nil, nil, nil, 20, 20, nil, nil, nil, 59, - nil, nil, 18, 20, 59, nil, nil, 59, nil, nil, - nil, nil, nil, 18, nil, nil, nil, nil, nil, nil, - nil, 20, nil, nil, nil, 20, nil, nil, nil, nil, - nil, nil, nil, 20, 20, nil, 59, nil, 20, nil, - nil, nil, nil, nil, nil, 20, nil, nil, nil, 59, - nil, nil, 59, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 59, nil, nil, 20, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 25, nil, nil, nil, 25, 25, 25, nil, nil, nil, - nil, 20, nil, nil, nil, nil, nil, nil, nil, nil, - 25, 25, 25, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 25, 25, 20, 20, nil, - nil, nil, nil, nil, 20, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 17, 20, nil, nil, nil, 17, - nil, nil, 20, nil, nil, nil, nil, nil, 41, 20, - nil, nil, 41, nil, nil, nil, nil, 41, 20, nil, - nil, nil, nil, nil, 17, nil, nil, nil, nil, nil, - nil, nil, 20, nil, nil, 41, nil, nil, nil, nil, - nil, nil, nil, 20, nil, 17, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 41, - nil, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 17, nil, nil, nil, nil, nil, nil, - nil, 17, nil, nil, nil, nil, nil, nil, nil, nil, - 41, 41, 25, 25, 25, 25, nil, nil, 25, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 41, nil, - nil, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, nil, nil, - nil, 41, nil, nil, nil, 25, 41, 25, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 25, 25, - nil, nil, 17, 17, nil, nil, nil, 25, nil, nil, - nil, nil, nil, 41, nil, nil, nil, nil, nil, nil, - 17, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 25, nil, nil, nil, nil, 41, - 41, nil, nil, 25, nil, nil, nil, nil, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 41, nil, nil, nil, - 41, nil, nil, nil, nil, nil, nil, nil, 41, 41, - nil, 17, nil, 41, nil, nil, 17, nil, nil, nil, - 41, nil, nil, 22, 22, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 41, nil, 25, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 41, 25, nil, 25, - 25, 25, nil, nil, nil, nil, 22, nil, 22, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 41, 41, nil, nil, nil, nil, nil, 41, - 25, nil, 25, nil, nil, 25, nil, nil, nil, nil, - 41, nil, nil, nil, nil, nil, nil, 41, nil, 25, - nil, nil, nil, nil, 41, nil, nil, nil, nil, nil, - 25, nil, nil, 41, nil, nil, nil, 25, 25, 25, - nil, nil, nil, nil, nil, 25, nil, 41, nil, nil, - 25, nil, nil, 25, nil, nil, 25, nil, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 25, 25, nil, nil, nil, nil, nil, nil, nil, nil, - 25, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 22, nil, nil, nil, nil, nil, - nil, 25, 25, nil, nil, 25, 25, nil, nil, nil, - 25, nil, nil, 25, nil, nil, nil, nil, nil, nil, - 25, nil, 17, nil, 25, nil, 17, nil, 25, nil, - nil, 17, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 25, nil, nil, nil, 25, 17, - nil, 22, nil, 22, nil, nil, 22, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 22, nil, nil, nil, nil, nil, 25, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 25, nil, nil, 17, 22, nil, nil, nil, - nil, 22, nil, nil, 22, nil, nil, 22, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 22, nil, nil, 17, 17, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 17, 25, 25, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 25, 25, 25, nil, nil, nil, - nil, nil, nil, 22, nil, nil, nil, nil, 25, nil, - nil, nil, nil, nil, nil, 17, nil, 25, nil, 25, - 17, nil, nil, nil, nil, 22, nil, nil, nil, 22, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 25, 22, nil, 17, nil, 22, - nil, 35, nil, nil, nil, nil, 35, nil, nil, nil, - nil, nil, nil, 25, nil, nil, nil, nil, 35, 35, - nil, nil, 25, 35, 35, 35, nil, nil, nil, nil, - nil, 35, 17, nil, 25, nil, nil, nil, nil, nil, - 25, nil, 25, 22, nil, nil, nil, nil, nil, nil, - 17, nil, 35, 35, 35, nil, 25, 35, 35, nil, - nil, 35, 17, 17, nil, nil, nil, 17, nil, nil, - nil, nil, nil, nil, 17, nil, 25, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 25, nil, nil, 25, - nil, nil, nil, nil, 22, nil, nil, nil, nil, nil, - 35, nil, nil, nil, 35, 35, 35, 35, 35, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 25, 22, - 17, 25, nil, nil, nil, nil, nil, nil, nil, nil, - 22, nil, nil, nil, 25, nil, nil, nil, nil, nil, - nil, nil, nil, 25, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 22, nil, nil, nil, nil, - nil, nil, nil, nil, 17, nil, nil, nil, nil, nil, - nil, 17, nil, nil, 22, nil, nil, nil, 17, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 35, - 35, 35, 35, 35, 35, nil, nil, 35, 35, 35, - nil, 22, nil, 22, nil, nil, nil, 35, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 22, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 22, nil, nil, - 22, nil, nil, nil, nil, nil, nil, 35, 35, nil, - nil, nil, nil, nil, nil, nil, 35, nil, 35, nil, - nil, nil, nil, 35, nil, nil, nil, nil, nil, 22, - nil, nil, 22, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 22, nil, nil, nil, nil, - nil, nil, nil, nil, 22, nil, nil, nil, nil, nil, - nil, 35, 35, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 35, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 35, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 35, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 35, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 35, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 35, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 35, - nil, nil, nil, 35, nil, nil, nil, nil, 35, nil, - 35, nil, nil, nil, nil, nil, nil, nil, nil, 35, - nil, nil, nil, 35, nil, nil, 35, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 35, 35, nil, nil, nil, 35, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 35, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 35, nil, nil, nil, nil, nil, nil, - nil, 35, 35, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 35, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 35, nil, nil, - nil, nil, 35, nil, nil, nil, nil, 35, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 35, nil, nil, nil, nil, nil, - nil, nil, nil, 35, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 35, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 35, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 35, nil, 35, - 35, nil, nil, nil, 35, nil, nil, nil, nil, nil, - nil, 35, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 35, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 35, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 35, nil, nil, nil, nil, nil, nil, 35, nil, - nil, nil, nil, nil, nil, 35 ] - -racc_goto_pointer = [ - nil, 55, 32, -41, -293, -446, -528, nil, 26, 76, - 79, 18, 77, 112, 0, 32, 26, 1104, 95, -40, - 265, -133, 1193, 36, -15, 1032, -8, nil, 67, -225, - -125, 14, -206, -347, -341, 1781, 22, 35, nil, -25, - 34, 630, -268, 1, -55, 16, nil, nil, 21, 29, - -265, 2, -24, -61, 52, -189, -20, -15, -390, 139, - -5, -338, -142, nil, -327, -468, nil, nil, nil, nil, - nil, nil, 58, 69, 69, nil, -236, -569, -434, -292, - 69, nil, -197, 17, nil, -483, 68, -208, -162, 77, - -484, 78, -486, -360, -662, -365, -495, -181, -186, -358, - -603, -397, -396, nil, -72, nil, -95, -95, -331, -635, - -302, -436, nil, nil, 104, 105, 27, 102, -167, -277, - 103, -340, -339, -460, nil, -565, -672, -441, -470, -564, - -690, nil, nil, -376 ] - -racc_goto_default = [ - nil, nil, 294, nil, nil, 735, nil, 3, nil, 4, - 314, nil, nil, nil, 204, 16, 11, 205, 288, nil, - 203, nil, 246, 15, nil, 19, 20, 21, nil, 25, - 598, nil, nil, nil, nil, 279, 29, nil, 31, 34, - 33, 201, 325, nil, 116, 382, 115, 118, 70, 71, - nil, nil, 42, 297, 299, nil, 300, 546, 547, 427, - 564, nil, nil, 257, nil, nil, 43, 44, 45, 46, - 47, 48, 49, nil, 258, 55, nil, nil, nil, nil, - nil, 62, nil, 489, 63, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 237, nil, 386, nil, nil, nil, nil, - nil, nil, 69, 72, 73, nil, nil, nil, nil, 527, - nil, nil, nil, 648, 649, 650, 651, nil, 814, 658, - 659, 662, 665, 250 ] - -racc_reduce_table = [ - 0, 0, :racc_error, - 1, 132, :_reduce_1, - 4, 134, :_reduce_2, - 2, 133, :_reduce_3, - 0, 138, :_reduce_4, - 1, 138, :_reduce_5, - 2, 138, :_reduce_6, - 3, 138, :_reduce_7, - 0, 155, :_reduce_8, - 4, 140, :_reduce_9, - 3, 140, :_reduce_10, - 3, 140, :_reduce_11, - 3, 140, :_reduce_12, - 2, 140, :_reduce_13, - 3, 140, :_reduce_14, - 3, 140, :_reduce_15, - 3, 140, :_reduce_16, - 3, 140, :_reduce_17, - 3, 140, :_reduce_18, - 4, 140, :_reduce_19, - 4, 140, :_reduce_20, - 3, 140, :_reduce_21, - 3, 140, :_reduce_22, - 3, 140, :_reduce_23, - 6, 140, :_reduce_24, - 5, 140, :_reduce_25, - 5, 140, :_reduce_26, - 5, 140, :_reduce_27, - 3, 140, :_reduce_28, - 3, 140, :_reduce_29, - 3, 140, :_reduce_30, - 3, 140, :_reduce_31, - 1, 140, :_reduce_none, - 1, 154, :_reduce_none, - 3, 154, :_reduce_34, - 3, 154, :_reduce_35, - 2, 154, :_reduce_36, - 2, 154, :_reduce_37, - 1, 154, :_reduce_none, - 1, 144, :_reduce_none, - 1, 146, :_reduce_none, - 1, 146, :_reduce_none, - 2, 146, :_reduce_42, - 2, 146, :_reduce_43, - 2, 146, :_reduce_44, - 1, 158, :_reduce_none, - 4, 158, :_reduce_46, - 4, 158, :_reduce_47, - 0, 165, :_reduce_48, - 5, 163, :_reduce_49, - 2, 157, :_reduce_50, - 3, 157, :_reduce_51, - 4, 157, :_reduce_52, - 5, 157, :_reduce_53, - 4, 157, :_reduce_54, - 5, 157, :_reduce_55, - 2, 157, :_reduce_56, - 2, 157, :_reduce_57, - 1, 147, :_reduce_58, - 3, 147, :_reduce_59, - 1, 168, :_reduce_60, - 3, 168, :_reduce_61, - 1, 167, :_reduce_62, - 2, 167, :_reduce_63, - 3, 167, :_reduce_64, - 2, 167, :_reduce_65, - 2, 167, :_reduce_66, - 1, 167, :_reduce_67, - 1, 170, :_reduce_none, - 3, 170, :_reduce_69, - 2, 169, :_reduce_70, - 3, 169, :_reduce_71, - 1, 171, :_reduce_72, - 4, 171, :_reduce_73, - 3, 171, :_reduce_74, - 3, 171, :_reduce_75, - 3, 171, :_reduce_76, - 3, 171, :_reduce_77, - 2, 171, :_reduce_78, - 1, 171, :_reduce_79, - 1, 145, :_reduce_80, - 4, 145, :_reduce_81, - 3, 145, :_reduce_82, - 3, 145, :_reduce_83, - 3, 145, :_reduce_84, - 3, 145, :_reduce_85, - 2, 145, :_reduce_86, - 1, 145, :_reduce_87, - 1, 173, :_reduce_88, - 1, 173, :_reduce_none, - 2, 174, :_reduce_90, - 1, 174, :_reduce_91, - 3, 174, :_reduce_92, - 1, 175, :_reduce_none, - 1, 175, :_reduce_none, - 1, 175, :_reduce_none, - 1, 175, :_reduce_none, - 1, 175, :_reduce_none, - 1, 178, :_reduce_98, - 1, 178, :_reduce_none, - 1, 142, :_reduce_none, - 1, 142, :_reduce_none, - 1, 143, :_reduce_102, - 0, 181, :_reduce_103, - 4, 143, :_reduce_104, - 1, 176, :_reduce_none, - 1, 176, :_reduce_none, - 1, 176, :_reduce_none, - 1, 176, :_reduce_none, - 1, 176, :_reduce_none, - 1, 176, :_reduce_none, - 1, 176, :_reduce_none, - 1, 176, :_reduce_none, - 1, 176, :_reduce_none, - 1, 176, :_reduce_none, - 1, 176, :_reduce_none, - 1, 176, :_reduce_none, - 1, 176, :_reduce_none, - 1, 176, :_reduce_none, - 1, 176, :_reduce_none, - 1, 176, :_reduce_none, - 1, 176, :_reduce_none, - 1, 176, :_reduce_none, - 1, 176, :_reduce_none, - 1, 176, :_reduce_none, - 1, 176, :_reduce_none, - 1, 176, :_reduce_none, - 1, 176, :_reduce_none, - 1, 176, :_reduce_none, - 1, 176, :_reduce_none, - 1, 176, :_reduce_none, - 1, 177, :_reduce_none, - 1, 177, :_reduce_none, - 1, 177, :_reduce_none, - 1, 177, :_reduce_none, - 1, 177, :_reduce_none, - 1, 177, :_reduce_none, - 1, 177, :_reduce_none, - 1, 177, :_reduce_none, - 1, 177, :_reduce_none, - 1, 177, :_reduce_none, - 1, 177, :_reduce_none, - 1, 177, :_reduce_none, - 1, 177, :_reduce_none, - 1, 177, :_reduce_none, - 1, 177, :_reduce_none, - 1, 177, :_reduce_none, - 1, 177, :_reduce_none, - 1, 177, :_reduce_none, - 1, 177, :_reduce_none, - 1, 177, :_reduce_none, - 1, 177, :_reduce_none, - 1, 177, :_reduce_none, - 1, 177, :_reduce_none, - 1, 177, :_reduce_none, - 1, 177, :_reduce_none, - 1, 177, :_reduce_none, - 1, 177, :_reduce_none, - 1, 177, :_reduce_none, - 1, 177, :_reduce_none, - 1, 177, :_reduce_none, - 1, 177, :_reduce_none, - 1, 177, :_reduce_none, - 1, 177, :_reduce_none, - 1, 177, :_reduce_none, - 1, 177, :_reduce_none, - 1, 177, :_reduce_none, - 1, 177, :_reduce_none, - 1, 177, :_reduce_none, - 1, 177, :_reduce_none, - 1, 177, :_reduce_none, - 3, 156, :_reduce_171, - 5, 156, :_reduce_172, - 3, 156, :_reduce_173, - 6, 156, :_reduce_174, - 5, 156, :_reduce_175, - 5, 156, :_reduce_176, - 5, 156, :_reduce_177, - 5, 156, :_reduce_178, - 4, 156, :_reduce_179, - 3, 156, :_reduce_180, - 3, 156, :_reduce_181, - 3, 156, :_reduce_182, - 3, 156, :_reduce_183, - 3, 156, :_reduce_184, - 3, 156, :_reduce_185, - 3, 156, :_reduce_186, - 3, 156, :_reduce_187, - 3, 156, :_reduce_188, - 4, 156, :_reduce_189, - 4, 156, :_reduce_190, - 2, 156, :_reduce_191, - 2, 156, :_reduce_192, - 3, 156, :_reduce_193, - 3, 156, :_reduce_194, - 3, 156, :_reduce_195, - 3, 156, :_reduce_196, - 3, 156, :_reduce_197, - 3, 156, :_reduce_198, - 3, 156, :_reduce_199, - 3, 156, :_reduce_200, - 3, 156, :_reduce_201, - 3, 156, :_reduce_202, - 3, 156, :_reduce_203, - 3, 156, :_reduce_204, - 3, 156, :_reduce_205, - 2, 156, :_reduce_206, - 2, 156, :_reduce_207, - 3, 156, :_reduce_208, - 3, 156, :_reduce_209, - 3, 156, :_reduce_210, - 3, 156, :_reduce_211, - 3, 156, :_reduce_212, - 5, 156, :_reduce_213, - 1, 156, :_reduce_none, - 1, 153, :_reduce_none, - 1, 150, :_reduce_216, - 2, 150, :_reduce_217, - 2, 150, :_reduce_218, - 5, 150, :_reduce_219, - 2, 150, :_reduce_220, - 3, 150, :_reduce_221, - 3, 188, :_reduce_222, - 4, 188, :_reduce_223, - 4, 188, :_reduce_224, - 6, 188, :_reduce_225, - 0, 189, :_reduce_226, - 1, 189, :_reduce_none, - 1, 159, :_reduce_228, - 2, 159, :_reduce_229, - 5, 159, :_reduce_230, - 2, 159, :_reduce_231, - 5, 159, :_reduce_232, - 4, 159, :_reduce_233, - 7, 159, :_reduce_234, - 3, 159, :_reduce_235, - 1, 159, :_reduce_236, - 4, 192, :_reduce_237, - 3, 192, :_reduce_238, - 5, 192, :_reduce_239, - 7, 192, :_reduce_240, - 2, 192, :_reduce_241, - 5, 192, :_reduce_242, - 4, 192, :_reduce_243, - 6, 192, :_reduce_244, - 7, 192, :_reduce_245, - 9, 192, :_reduce_246, - 3, 192, :_reduce_247, - 1, 192, :_reduce_248, - 0, 194, :_reduce_249, - 2, 162, :_reduce_250, - 1, 193, :_reduce_251, - 0, 195, :_reduce_252, - 3, 193, :_reduce_253, - 0, 196, :_reduce_254, - 4, 193, :_reduce_255, - 2, 191, :_reduce_256, - 2, 190, :_reduce_257, - 0, 190, :_reduce_258, - 1, 185, :_reduce_259, - 3, 185, :_reduce_260, - 3, 152, :_reduce_261, - 4, 152, :_reduce_262, - 2, 152, :_reduce_263, - 1, 183, :_reduce_none, - 1, 183, :_reduce_none, - 1, 183, :_reduce_none, - 1, 183, :_reduce_none, - 1, 183, :_reduce_none, - 1, 183, :_reduce_none, - 1, 183, :_reduce_none, - 1, 183, :_reduce_none, - 1, 183, :_reduce_272, - 3, 183, :_reduce_273, - 0, 219, :_reduce_274, - 5, 183, :_reduce_275, - 3, 183, :_reduce_276, - 3, 183, :_reduce_277, - 2, 183, :_reduce_278, - 4, 183, :_reduce_279, - 3, 183, :_reduce_280, - 3, 183, :_reduce_281, - 1, 183, :_reduce_282, - 4, 183, :_reduce_283, - 3, 183, :_reduce_284, - 1, 183, :_reduce_285, - 5, 183, :_reduce_286, - 2, 183, :_reduce_287, - 1, 183, :_reduce_none, - 2, 183, :_reduce_289, - 6, 183, :_reduce_290, - 6, 183, :_reduce_291, - 0, 220, :_reduce_292, - 0, 221, :_reduce_293, - 7, 183, :_reduce_294, - 0, 222, :_reduce_295, - 0, 223, :_reduce_296, - 7, 183, :_reduce_297, - 5, 183, :_reduce_298, - 4, 183, :_reduce_299, - 5, 183, :_reduce_300, - 0, 224, :_reduce_301, - 0, 225, :_reduce_302, - 9, 183, :_reduce_303, - 0, 226, :_reduce_304, - 6, 183, :_reduce_305, - 0, 227, :_reduce_306, - 7, 183, :_reduce_307, - 0, 228, :_reduce_308, - 5, 183, :_reduce_309, - 0, 229, :_reduce_310, - 6, 183, :_reduce_311, - 0, 230, :_reduce_312, - 0, 231, :_reduce_313, - 9, 183, :_reduce_314, - 1, 183, :_reduce_315, - 1, 183, :_reduce_316, - 1, 183, :_reduce_317, - 1, 183, :_reduce_318, - 1, 149, :_reduce_none, - 1, 212, :_reduce_320, - 1, 215, :_reduce_321, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 2, 207, :_reduce_325, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 208, :_reduce_none, - 5, 208, :_reduce_330, - 1, 136, :_reduce_none, - 2, 136, :_reduce_332, - 1, 211, :_reduce_none, - 1, 211, :_reduce_none, - 1, 232, :_reduce_335, - 3, 232, :_reduce_336, - 1, 233, :_reduce_none, - 2, 233, :_reduce_none, - 4, 233, :_reduce_339, - 7, 233, :_reduce_340, - 6, 233, :_reduce_341, - 4, 233, :_reduce_342, - 3, 233, :_reduce_343, - 5, 233, :_reduce_344, - 4, 233, :_reduce_345, - 2, 233, :_reduce_346, - 1, 233, :_reduce_347, - 2, 233, :_reduce_348, - 0, 164, :_reduce_349, - 2, 164, :_reduce_350, - 1, 164, :_reduce_351, - 3, 164, :_reduce_352, - 0, 235, :_reduce_353, - 5, 234, :_reduce_354, - 2, 160, :_reduce_355, - 4, 160, :_reduce_356, - 4, 160, :_reduce_357, - 2, 206, :_reduce_358, - 4, 206, :_reduce_359, - 4, 206, :_reduce_360, - 3, 206, :_reduce_361, - 2, 206, :_reduce_362, - 1, 206, :_reduce_363, - 0, 237, :_reduce_364, - 5, 205, :_reduce_365, - 0, 238, :_reduce_366, - 5, 205, :_reduce_367, - 5, 210, :_reduce_368, - 1, 239, :_reduce_none, - 4, 239, :_reduce_370, - 2, 239, :_reduce_371, - 1, 240, :_reduce_372, - 1, 240, :_reduce_none, - 6, 135, :_reduce_374, - 0, 135, :_reduce_375, - 1, 241, :_reduce_376, - 1, 241, :_reduce_none, - 1, 241, :_reduce_none, - 2, 242, :_reduce_379, - 1, 242, :_reduce_none, - 2, 137, :_reduce_381, - 1, 137, :_reduce_none, - 1, 197, :_reduce_none, - 1, 197, :_reduce_none, - 1, 197, :_reduce_none, - 1, 198, :_reduce_386, - 1, 244, :_reduce_387, - 2, 244, :_reduce_388, - 3, 245, :_reduce_389, - 1, 245, :_reduce_390, - 3, 199, :_reduce_391, - 4, 200, :_reduce_392, - 3, 201, :_reduce_393, - 0, 248, :_reduce_394, - 3, 248, :_reduce_395, - 1, 249, :_reduce_396, - 2, 249, :_reduce_397, - 3, 202, :_reduce_398, - 0, 251, :_reduce_399, - 3, 251, :_reduce_400, - 0, 246, :_reduce_401, - 2, 246, :_reduce_402, - 0, 247, :_reduce_403, - 2, 247, :_reduce_404, - 1, 250, :_reduce_405, - 2, 250, :_reduce_406, - 0, 253, :_reduce_407, - 4, 250, :_reduce_408, - 1, 252, :_reduce_409, - 1, 252, :_reduce_410, - 1, 252, :_reduce_411, - 1, 252, :_reduce_none, - 1, 179, :_reduce_413, - 3, 180, :_reduce_414, - 1, 243, :_reduce_415, - 1, 243, :_reduce_416, - 2, 243, :_reduce_417, - 2, 243, :_reduce_418, - 1, 172, :_reduce_419, - 1, 172, :_reduce_420, - 1, 172, :_reduce_421, - 1, 172, :_reduce_422, - 1, 172, :_reduce_423, - 1, 172, :_reduce_424, - 1, 172, :_reduce_425, - 1, 172, :_reduce_426, - 1, 172, :_reduce_427, - 1, 172, :_reduce_428, - 1, 172, :_reduce_429, - 1, 203, :_reduce_430, - 1, 148, :_reduce_431, - 1, 151, :_reduce_432, - 1, 151, :_reduce_433, - 1, 213, :_reduce_434, - 3, 213, :_reduce_435, - 2, 213, :_reduce_436, - 4, 216, :_reduce_437, - 2, 216, :_reduce_438, - 6, 254, :_reduce_439, - 4, 254, :_reduce_440, - 4, 254, :_reduce_441, - 2, 254, :_reduce_442, - 4, 254, :_reduce_443, - 2, 254, :_reduce_444, - 2, 254, :_reduce_445, - 1, 254, :_reduce_446, - 0, 254, :_reduce_447, - 1, 260, :_reduce_448, - 1, 260, :_reduce_449, - 1, 260, :_reduce_450, - 1, 260, :_reduce_451, - 1, 260, :_reduce_452, - 1, 255, :_reduce_453, - 3, 255, :_reduce_454, - 3, 261, :_reduce_455, - 1, 256, :_reduce_456, - 3, 256, :_reduce_457, - 1, 262, :_reduce_none, - 1, 262, :_reduce_none, - 2, 257, :_reduce_460, - 1, 257, :_reduce_461, - 1, 263, :_reduce_none, - 1, 263, :_reduce_none, - 2, 259, :_reduce_464, - 2, 258, :_reduce_465, - 0, 258, :_reduce_466, - 1, 217, :_reduce_none, - 4, 217, :_reduce_468, - 0, 204, :_reduce_469, - 2, 204, :_reduce_470, - 2, 204, :_reduce_471, - 1, 187, :_reduce_472, - 3, 187, :_reduce_473, - 3, 264, :_reduce_474, - 1, 166, :_reduce_none, - 1, 166, :_reduce_none, - 1, 166, :_reduce_none, - 1, 161, :_reduce_none, - 1, 161, :_reduce_none, - 1, 161, :_reduce_none, - 1, 161, :_reduce_none, - 1, 236, :_reduce_none, - 1, 236, :_reduce_none, - 1, 236, :_reduce_none, - 1, 218, :_reduce_none, - 1, 218, :_reduce_none, - 0, 139, :_reduce_none, - 1, 139, :_reduce_none, - 0, 182, :_reduce_none, - 1, 182, :_reduce_none, - 0, 186, :_reduce_none, - 1, 186, :_reduce_none, - 1, 186, :_reduce_none, - 1, 214, :_reduce_494, - 1, 214, :_reduce_none, - 1, 141, :_reduce_none, - 2, 141, :_reduce_none, - 0, 184, :_reduce_498 ] - -racc_reduce_n = 499 - -racc_shift_n = 896 - -racc_token_table = { - false => 0, - :error => 1, - :kCLASS => 2, - :kMODULE => 3, - :kDEF => 4, - :kUNDEF => 5, - :kBEGIN => 6, - :kRESCUE => 7, - :kENSURE => 8, - :kEND => 9, - :kIF => 10, - :kUNLESS => 11, - :kTHEN => 12, - :kELSIF => 13, - :kELSE => 14, - :kCASE => 15, - :kWHEN => 16, - :kWHILE => 17, - :kUNTIL => 18, - :kFOR => 19, - :kBREAK => 20, - :kNEXT => 21, - :kREDO => 22, - :kRETRY => 23, - :kIN => 24, - :kDO => 25, - :kDO_COND => 26, - :kDO_BLOCK => 27, - :kRETURN => 28, - :kYIELD => 29, - :kSUPER => 30, - :kSELF => 31, - :kNIL => 32, - :kTRUE => 33, - :kFALSE => 34, - :kAND => 35, - :kOR => 36, - :kNOT => 37, - :kIF_MOD => 38, - :kUNLESS_MOD => 39, - :kWHILE_MOD => 40, - :kUNTIL_MOD => 41, - :kRESCUE_MOD => 42, - :kALIAS => 43, - :kDEFINED => 44, - :klBEGIN => 45, - :klEND => 46, - :k__LINE__ => 47, - :k__FILE__ => 48, - :tIDENTIFIER => 49, - :tFID => 50, - :tGVAR => 51, - :tIVAR => 52, - :tCONSTANT => 53, - :tCVAR => 54, - :tNTH_REF => 55, - :tBACK_REF => 56, - :tSTRING_CONTENT => 57, - :tINTEGER => 58, - :tFLOAT => 59, - :tUPLUS => 60, - :tUMINUS => 61, - :tUNARY_NUM => 62, - :tPOW => 63, - :tCMP => 64, - :tEQ => 65, - :tEQQ => 66, - :tNEQ => 67, - :tGEQ => 68, - :tLEQ => 69, - :tANDOP => 70, - :tOROP => 71, - :tMATCH => 72, - :tNMATCH => 73, - :tDOT => 74, - :tDOT2 => 75, - :tDOT3 => 76, - :tAREF => 77, - :tASET => 78, - :tLSHFT => 79, - :tRSHFT => 80, - :tCOLON2 => 81, - :tCOLON3 => 82, - :tOP_ASGN => 83, - :tASSOC => 84, - :tLPAREN => 85, - :tLPAREN2 => 86, - :tRPAREN => 87, - :tLPAREN_ARG => 88, - :tLBRACK => 89, - :tLBRACK2 => 90, - :tRBRACK => 91, - :tLBRACE => 92, - :tLBRACE_ARG => 93, - :tSTAR => 94, - :tSTAR2 => 95, - :tAMPER => 96, - :tAMPER2 => 97, - :tTILDE => 98, - :tPERCENT => 99, - :tDIVIDE => 100, - :tPLUS => 101, - :tMINUS => 102, - :tLT => 103, - :tGT => 104, - :tPIPE => 105, - :tBANG => 106, - :tCARET => 107, - :tLCURLY => 108, - :tRCURLY => 109, - :tBACK_REF2 => 110, - :tSYMBEG => 111, - :tSTRING_BEG => 112, - :tXSTRING_BEG => 113, - :tREGEXP_BEG => 114, - :tWORDS_BEG => 115, - :tQWORDS_BEG => 116, - :tSTRING_DBEG => 117, - :tSTRING_DVAR => 118, - :tSTRING_END => 119, - :tSTRING => 120, - :tSYMBOL => 121, - :tREGEXP_OPT => 122, - :tNL => 123, - :tEH => 124, - :tCOLON => 125, - :tCOMMA => 126, - :tSPACE => 127, - :tSEMI => 128, - :tEQL => 129, - :tLOWEST => 130 } - -racc_nt_base = 131 - -racc_use_result_var = true - -Racc_arg = [ - racc_action_table, - racc_action_check, - racc_action_default, - racc_action_pointer, - racc_goto_table, - racc_goto_check, - racc_goto_default, - racc_goto_pointer, - racc_nt_base, - racc_reduce_table, - racc_token_table, - racc_shift_n, - racc_reduce_n, - racc_use_result_var ] -Ractor.make_shareable(Racc_arg) if defined?(Ractor) - -Racc_token_to_s_table = [ - "$end", - "error", - "kCLASS", - "kMODULE", - "kDEF", - "kUNDEF", - "kBEGIN", - "kRESCUE", - "kENSURE", - "kEND", - "kIF", - "kUNLESS", - "kTHEN", - "kELSIF", - "kELSE", - "kCASE", - "kWHEN", - "kWHILE", - "kUNTIL", - "kFOR", - "kBREAK", - "kNEXT", - "kREDO", - "kRETRY", - "kIN", - "kDO", - "kDO_COND", - "kDO_BLOCK", - "kRETURN", - "kYIELD", - "kSUPER", - "kSELF", - "kNIL", - "kTRUE", - "kFALSE", - "kAND", - "kOR", - "kNOT", - "kIF_MOD", - "kUNLESS_MOD", - "kWHILE_MOD", - "kUNTIL_MOD", - "kRESCUE_MOD", - "kALIAS", - "kDEFINED", - "klBEGIN", - "klEND", - "k__LINE__", - "k__FILE__", - "tIDENTIFIER", - "tFID", - "tGVAR", - "tIVAR", - "tCONSTANT", - "tCVAR", - "tNTH_REF", - "tBACK_REF", - "tSTRING_CONTENT", - "tINTEGER", - "tFLOAT", - "tUPLUS", - "tUMINUS", - "tUNARY_NUM", - "tPOW", - "tCMP", - "tEQ", - "tEQQ", - "tNEQ", - "tGEQ", - "tLEQ", - "tANDOP", - "tOROP", - "tMATCH", - "tNMATCH", - "tDOT", - "tDOT2", - "tDOT3", - "tAREF", - "tASET", - "tLSHFT", - "tRSHFT", - "tCOLON2", - "tCOLON3", - "tOP_ASGN", - "tASSOC", - "tLPAREN", - "tLPAREN2", - "tRPAREN", - "tLPAREN_ARG", - "tLBRACK", - "tLBRACK2", - "tRBRACK", - "tLBRACE", - "tLBRACE_ARG", - "tSTAR", - "tSTAR2", - "tAMPER", - "tAMPER2", - "tTILDE", - "tPERCENT", - "tDIVIDE", - "tPLUS", - "tMINUS", - "tLT", - "tGT", - "tPIPE", - "tBANG", - "tCARET", - "tLCURLY", - "tRCURLY", - "tBACK_REF2", - "tSYMBEG", - "tSTRING_BEG", - "tXSTRING_BEG", - "tREGEXP_BEG", - "tWORDS_BEG", - "tQWORDS_BEG", - "tSTRING_DBEG", - "tSTRING_DVAR", - "tSTRING_END", - "tSTRING", - "tSYMBOL", - "tREGEXP_OPT", - "tNL", - "tEH", - "tCOLON", - "tCOMMA", - "tSPACE", - "tSEMI", - "tEQL", - "tLOWEST", - "$start", - "program", - "compstmt", - "bodystmt", - "opt_rescue", - "opt_else", - "opt_ensure", - "stmts", - "opt_terms", - "stmt", - "terms", - "fitem", - "undef_list", - "expr_value", - "lhs", - "command_call", - "mlhs", - "var_lhs", - "primary_value", - "aref_args", - "backref", - "mrhs", - "arg_value", - "expr", - "@1", - "arg", - "command", - "block_command", - "call_args", - "block_call", - "operation2", - "command_args", - "cmd_brace_block", - "opt_block_var", - "@2", - "operation", - "mlhs_basic", - "mlhs_entry", - "mlhs_head", - "mlhs_item", - "mlhs_node", - "variable", - "cname", - "cpath", - "fname", - "op", - "reswords", - "fsym", - "symbol", - "dsym", - "@3", - "opt_nl", - "primary", - "none", - "args", - "trailer", - "assocs", - "paren_args", - "opt_paren_args", - "opt_block_arg", - "block_arg", - "call_args2", - "open_args", - "@4", - "@5", - "@6", - "literal", - "strings", - "xstring", - "regexp", - "words", - "qwords", - "var_ref", - "assoc_list", - "brace_block", - "method_call", - "then", - "if_tail", - "do", - "case_body", - "for_var", - "k_class", - "superclass", - "term", - "k_module", - "f_arglist", - "singleton", - "dot_or_colon", - "@7", - "@8", - "@9", - "@10", - "@11", - "@12", - "@13", - "@14", - "@15", - "@16", - "@17", - "@18", - "@19", - "block_par", - "block_var", - "do_block", - "@20", - "operation3", - "@21", - "@22", - "when_args", - "cases", - "exc_list", - "exc_var", - "numeric", - "string", - "string1", - "string_contents", - "xstring_contents", - "word_list", - "word", - "string_content", - "qword_list", - "string_dvar", - "@23", - "f_args", - "f_arg", - "f_optarg", - "f_rest_arg", - "opt_f_block_arg", - "f_block_arg", - "f_norm_arg", - "f_opt", - "restarg_mark", - "blkarg_mark", - "assoc" ] -Ractor.make_shareable(Racc_token_to_s_table) if defined?(Ractor) - -Racc_debug_parser = false - -##### State transition tables end ##### - -# reduce 0 omitted - -def _reduce_1(val, _values, result) - result = val[0] - - result -end - -def _reduce_2(val, _values, result) - rescue_bodies = val[1] - else_t, else_ = val[2] - ensure_t, ensure_ = val[3] - - if rescue_bodies.empty? && !else_t.nil? - diagnostic :warning, :useless_else, nil, else_t - end - - result = @builder.begin_body(val[0], - rescue_bodies, - else_t, else_, - ensure_t, ensure_) - - result -end - -def _reduce_3(val, _values, result) - result = @builder.compstmt(val[0]) - - result -end - -def _reduce_4(val, _values, result) - result = [] - - result -end - -def _reduce_5(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_6(val, _values, result) - result = [ val[1] ] - - result -end - -def _reduce_7(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_8(val, _values, result) - @lexer.state = :expr_fname - - result -end - -def _reduce_9(val, _values, result) - result = @builder.alias(val[0], val[1], val[3]) - - result -end - -def _reduce_10(val, _values, result) - result = @builder.alias(val[0], - @builder.gvar(val[1]), - @builder.gvar(val[2])) - - result -end - -def _reduce_11(val, _values, result) - result = @builder.alias(val[0], - @builder.gvar(val[1]), - @builder.back_ref(val[2])) - - result -end - -def _reduce_12(val, _values, result) - diagnostic :error, :nth_ref_alias, nil, val[2] - - result -end - -def _reduce_13(val, _values, result) - result = @builder.undef_method(val[0], val[1]) - - result -end - -def _reduce_14(val, _values, result) - result = @builder.condition_mod(val[0], nil, - val[1], val[2]) - - result -end - -def _reduce_15(val, _values, result) - result = @builder.condition_mod(nil, val[0], - val[1], val[2]) - - result -end - -def _reduce_16(val, _values, result) - result = @builder.loop_mod(:while, val[0], val[1], val[2]) - - result -end - -def _reduce_17(val, _values, result) - result = @builder.loop_mod(:until, val[0], val[1], val[2]) - - result -end - -def _reduce_18(val, _values, result) - rescue_body = @builder.rescue_body(val[1], - nil, nil, nil, - nil, val[2]) - - result = @builder.begin_body(val[0], [ rescue_body ]) - - result -end - -def _reduce_19(val, _values, result) - if @context.in_def - diagnostic :error, :begin_in_method, nil, val[0] - end - - result = @builder.preexe(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_20(val, _values, result) - result = @builder.postexe(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_21(val, _values, result) - result = @builder.assign(val[0], val[1], val[2]) - - result -end - -def _reduce_22(val, _values, result) - result = @builder.multi_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_23(val, _values, result) - result = @builder.op_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_24(val, _values, result) - result = @builder.op_assign( - @builder.index( - val[0], val[1], val[2], val[3]), - val[4], val[5]) - - result -end - -def _reduce_25(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_26(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_27(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_28(val, _values, result) - @builder.op_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_29(val, _values, result) - result = @builder.assign(val[0], val[1], - @builder.array(nil, val[2], nil)) - - result -end - -def _reduce_30(val, _values, result) - result = @builder.multi_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_31(val, _values, result) - result = @builder.multi_assign(val[0], val[1], - @builder.array(nil, val[2], nil)) - - result -end - -# reduce 32 omitted - -# reduce 33 omitted - -def _reduce_34(val, _values, result) - result = @builder.logical_op(:and, val[0], val[1], val[2]) - - result -end - -def _reduce_35(val, _values, result) - result = @builder.logical_op(:or, val[0], val[1], val[2]) - - result -end - -def _reduce_36(val, _values, result) - result = @builder.not_op(val[0], nil, val[1], nil) - - result -end - -def _reduce_37(val, _values, result) - result = @builder.not_op(val[0], nil, val[1], nil) - - result -end - -# reduce 38 omitted - -# reduce 39 omitted - -# reduce 40 omitted - -# reduce 41 omitted - -def _reduce_42(val, _values, result) - result = @builder.keyword_cmd(:return, val[0], - nil, val[1], nil) - - result -end - -def _reduce_43(val, _values, result) - result = @builder.keyword_cmd(:break, val[0], - nil, val[1], nil) - - result -end - -def _reduce_44(val, _values, result) - result = @builder.keyword_cmd(:next, val[0], - nil, val[1], nil) - - result -end - -# reduce 45 omitted - -def _reduce_46(val, _values, result) - lparen_t, args, rparen_t = val[3] - result = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - result -end - -def _reduce_47(val, _values, result) - lparen_t, args, rparen_t = val[3] - result = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - result -end - -def _reduce_48(val, _values, result) - @static_env.extend_dynamic - result = @context.dup - @context.in_block = true - - result -end - -def _reduce_49(val, _values, result) - result = [ val[0], val[2], val[3], val[4] ] - - @static_env.unextend - @context.in_block = val[1].in_block - - result -end - -def _reduce_50(val, _values, result) - lparen_t, args, rparen_t = val[1] - result = @builder.call_method(nil, nil, val[0], - lparen_t, args, rparen_t) - - result -end - -def _reduce_51(val, _values, result) - lparen_t, args, rparen_t = val[1] - method_call = @builder.call_method(nil, nil, val[0], - lparen_t, args, rparen_t) - - begin_t, block_args, body, end_t = val[2] - result = @builder.block(method_call, - begin_t, block_args, body, end_t) - - result -end - -def _reduce_52(val, _values, result) - lparen_t, args, rparen_t = val[3] - result = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - - result -end - -def _reduce_53(val, _values, result) - lparen_t, args, rparen_t = val[3] - method_call = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - begin_t, block_args, body, end_t = val[4] - result = @builder.block(method_call, - begin_t, block_args, body, end_t) - - result -end - -def _reduce_54(val, _values, result) - lparen_t, args, rparen_t = val[3] - result = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - result -end - -def _reduce_55(val, _values, result) - lparen_t, args, rparen_t = val[3] - method_call = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - begin_t, block_args, body, end_t = val[4] - result = @builder.block(method_call, - begin_t, block_args, body, end_t) - - result -end - -def _reduce_56(val, _values, result) - lparen_t, args, rparen_t = val[1] - result = @builder.keyword_cmd(:super, val[0], - lparen_t, args, rparen_t) - - result -end - -def _reduce_57(val, _values, result) - lparen_t, args, rparen_t = val[1] - result = @builder.keyword_cmd(:yield, val[0], - lparen_t, args, rparen_t) - - result -end - -def _reduce_58(val, _values, result) - result = @builder.multi_lhs(nil, val[0], nil) - - result -end - -def _reduce_59(val, _values, result) - result = @builder.begin(val[0], val[1], val[2]) - - result -end - -def _reduce_60(val, _values, result) - result = @builder.multi_lhs(nil, val[0], nil) - - result -end - -def _reduce_61(val, _values, result) - result = @builder.multi_lhs(val[0], val[1], val[2]) - - result -end - -def _reduce_62(val, _values, result) - result = val[0] - - result -end - -def _reduce_63(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_64(val, _values, result) - result = val[0] << @builder.splat(val[1], val[2]) - - result -end - -def _reduce_65(val, _values, result) - result = val[0] << @builder.splat(val[1]) - - result -end - -def _reduce_66(val, _values, result) - result = [ @builder.splat(val[0], val[1]) ] - - result -end - -def _reduce_67(val, _values, result) - result = [ @builder.splat(val[0]) ] - - result -end - -# reduce 68 omitted - -def _reduce_69(val, _values, result) - result = @builder.begin(val[0], val[1], val[2]) - - result -end - -def _reduce_70(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_71(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_72(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_73(val, _values, result) - result = @builder.index_asgn(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_74(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_75(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_76(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_77(val, _values, result) - result = @builder.assignable( - @builder.const_fetch(val[0], val[1], val[2])) - - result -end - -def _reduce_78(val, _values, result) - result = @builder.assignable( - @builder.const_global(val[0], val[1])) - - result -end - -def _reduce_79(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_80(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_81(val, _values, result) - result = @builder.index_asgn(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_82(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_83(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_84(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_85(val, _values, result) - result = @builder.assignable( - @builder.const_fetch(val[0], val[1], val[2])) - - result -end - -def _reduce_86(val, _values, result) - result = @builder.assignable( - @builder.const_global(val[0], val[1])) - - result -end - -def _reduce_87(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_88(val, _values, result) - diagnostic :error, :module_name_const, nil, val[0] - - result -end - -# reduce 89 omitted - -def _reduce_90(val, _values, result) - result = @builder.const_global(val[0], val[1]) - - result -end - -def _reduce_91(val, _values, result) - result = @builder.const(val[0]) - - result -end - -def _reduce_92(val, _values, result) - result = @builder.const_fetch(val[0], val[1], val[2]) - - result -end - -# reduce 93 omitted - -# reduce 94 omitted - -# reduce 95 omitted - -# reduce 96 omitted - -# reduce 97 omitted - -def _reduce_98(val, _values, result) - result = @builder.symbol_internal(val[0]) - - result -end - -# reduce 99 omitted - -# reduce 100 omitted - -# reduce 101 omitted - -def _reduce_102(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_103(val, _values, result) - @lexer.state = :expr_fname - - result -end - -def _reduce_104(val, _values, result) - result = val[0] << val[3] - - result -end - -# reduce 105 omitted - -# reduce 106 omitted - -# reduce 107 omitted - -# reduce 108 omitted - -# reduce 109 omitted - -# reduce 110 omitted - -# reduce 111 omitted - -# reduce 112 omitted - -# reduce 113 omitted - -# reduce 114 omitted - -# reduce 115 omitted - -# reduce 116 omitted - -# reduce 117 omitted - -# reduce 118 omitted - -# reduce 119 omitted - -# reduce 120 omitted - -# reduce 121 omitted - -# reduce 122 omitted - -# reduce 123 omitted - -# reduce 124 omitted - -# reduce 125 omitted - -# reduce 126 omitted - -# reduce 127 omitted - -# reduce 128 omitted - -# reduce 129 omitted - -# reduce 130 omitted - -# reduce 131 omitted - -# reduce 132 omitted - -# reduce 133 omitted - -# reduce 134 omitted - -# reduce 135 omitted - -# reduce 136 omitted - -# reduce 137 omitted - -# reduce 138 omitted - -# reduce 139 omitted - -# reduce 140 omitted - -# reduce 141 omitted - -# reduce 142 omitted - -# reduce 143 omitted - -# reduce 144 omitted - -# reduce 145 omitted - -# reduce 146 omitted - -# reduce 147 omitted - -# reduce 148 omitted - -# reduce 149 omitted - -# reduce 150 omitted - -# reduce 151 omitted - -# reduce 152 omitted - -# reduce 153 omitted - -# reduce 154 omitted - -# reduce 155 omitted - -# reduce 156 omitted - -# reduce 157 omitted - -# reduce 158 omitted - -# reduce 159 omitted - -# reduce 160 omitted - -# reduce 161 omitted - -# reduce 162 omitted - -# reduce 163 omitted - -# reduce 164 omitted - -# reduce 165 omitted - -# reduce 166 omitted - -# reduce 167 omitted - -# reduce 168 omitted - -# reduce 169 omitted - -# reduce 170 omitted - -def _reduce_171(val, _values, result) - result = @builder.assign(val[0], val[1], val[2]) - - result -end - -def _reduce_172(val, _values, result) - rescue_body = @builder.rescue_body(val[3], - nil, nil, nil, - nil, val[4]) - - rescue_ = @builder.begin_body(val[2], [ rescue_body ]) - - result = @builder.assign(val[0], val[1], rescue_) - - result -end - -def _reduce_173(val, _values, result) - result = @builder.op_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_174(val, _values, result) - result = @builder.op_assign( - @builder.index( - val[0], val[1], val[2], val[3]), - val[4], val[5]) - - result -end - -def _reduce_175(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_176(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_177(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_178(val, _values, result) - diagnostic :error, :dynamic_const, nil, val[2], [ val[3] ] - - result -end - -def _reduce_179(val, _values, result) - diagnostic :error, :dynamic_const, nil, val[1], [ val[2] ] - - result -end - -def _reduce_180(val, _values, result) - result = @builder.op_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_181(val, _values, result) - result = @builder.range_inclusive(val[0], val[1], val[2]) - - result -end - -def _reduce_182(val, _values, result) - result = @builder.range_exclusive(val[0], val[1], val[2]) - - result -end - -def _reduce_183(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_184(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_185(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_186(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_187(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_188(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_189(val, _values, result) - result = @builder.unary_op(val[0], - @builder.binary_op( - @builder.integer(val[1]), - val[2], val[3])) - - result -end - -def _reduce_190(val, _values, result) - result = @builder.unary_op(val[0], - @builder.binary_op( - @builder.float(val[1]), - val[2], val[3])) - - result -end - -def _reduce_191(val, _values, result) - result = @builder.unary_op(val[0], val[1]) - - result -end - -def _reduce_192(val, _values, result) - result = @builder.unary_op(val[0], val[1]) - - result -end - -def _reduce_193(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_194(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_195(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_196(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_197(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_198(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_199(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_200(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_201(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_202(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_203(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_204(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_205(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_206(val, _values, result) - result = @builder.not_op(val[0], nil, val[1], nil) - - result -end - -def _reduce_207(val, _values, result) - result = @builder.unary_op(val[0], val[1]) - - result -end - -def _reduce_208(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_209(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_210(val, _values, result) - result = @builder.logical_op(:and, val[0], val[1], val[2]) - - result -end - -def _reduce_211(val, _values, result) - result = @builder.logical_op(:or, val[0], val[1], val[2]) - - result -end - -def _reduce_212(val, _values, result) - result = @builder.keyword_cmd(:defined?, val[0], nil, [ val[2] ], nil) - - result -end - -def _reduce_213(val, _values, result) - result = @builder.ternary(val[0], val[1], - val[2], val[3], val[4]) - - result -end - -# reduce 214 omitted - -# reduce 215 omitted - -def _reduce_216(val, _values, result) - result = [] - - result -end - -def _reduce_217(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_218(val, _values, result) - result = val[0] - - result -end - -def _reduce_219(val, _values, result) - result = val[0] << @builder.splat(val[2], val[3]) - - result -end - -def _reduce_220(val, _values, result) - result = [ @builder.associate(nil, val[0], nil) ] - - result -end - -def _reduce_221(val, _values, result) - result = [ @builder.splat(val[0], val[1]) ] - - result -end - -def _reduce_222(val, _values, result) - result = [ val[0], [], val[2] ] - - result -end - -def _reduce_223(val, _values, result) - result = [ val[0], val[1], val[3] ] - - result -end - -def _reduce_224(val, _values, result) - result = [ val[0], [ val[1] ], val[3] ] - - result -end - -def _reduce_225(val, _values, result) - result = [ val[0], val[1] << val[3], val[5] ] - - result -end - -def _reduce_226(val, _values, result) - result = [ nil, [], nil ] - - result -end - -# reduce 227 omitted - -def _reduce_228(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_229(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_230(val, _values, result) - result = val[0].concat( - [ @builder.splat(val[2], val[3]), - *val[4] ]) - - result -end - -def _reduce_231(val, _values, result) - result = [ @builder.associate(nil, val[0], nil), - *val[1] ] - - result -end - -def _reduce_232(val, _values, result) - result = [ @builder.associate(nil, val[0], nil), - @builder.splat(val[2], val[3]), - *val[4] ] - - result -end - -def _reduce_233(val, _values, result) - result = val[0].concat( - [ @builder.associate(nil, val[2], nil), - *val[3] ]) - - result -end - -def _reduce_234(val, _values, result) - result = val[0].concat( - [ @builder.associate(nil, val[2], nil), - @builder.splat(val[4], val[5]), - *val[6] ]) - - result -end - -def _reduce_235(val, _values, result) - result = [ @builder.splat(val[0], val[1]), - *val[2] ] - - result -end - -def _reduce_236(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_237(val, _values, result) - result = [ val[0], *val[2].concat(val[3]) ] - - result -end - -def _reduce_238(val, _values, result) - result = [ val[0], val[2] ] - - result -end - -def _reduce_239(val, _values, result) - result = [ val[0], - @builder.splat(val[2], val[3]), - *val[4] ] - - result -end - -def _reduce_240(val, _values, result) - result = [ val[0], - *val[2]. - push(@builder.splat(val[4], val[5])). - concat(val[6]) ] - - result -end - -def _reduce_241(val, _values, result) - result = [ @builder.associate(nil, val[0], nil), - *val[1] ] - - result -end - -def _reduce_242(val, _values, result) - result = [ @builder.associate(nil, val[0], nil), - @builder.splat(val[2], val[3]), - *val[4] ] - - result -end - -def _reduce_243(val, _values, result) - result = [ val[0], - @builder.associate(nil, val[2], nil), - *val[3] ] - - result -end - -def _reduce_244(val, _values, result) - result = [ val[0], - *val[2]. - push(@builder.associate(nil, val[4], nil)). - concat(val[5]) ] - - result -end - -def _reduce_245(val, _values, result) - result = [ val[0], - @builder.associate(nil, val[2], nil), - @builder.splat(val[4], val[5]), - *val[6] ] - - result -end - -def _reduce_246(val, _values, result) - result = [ val[0], - *val[2]. - push(@builder.associate(nil, val[4], nil)). - push(@builder.splat(val[6], val[7])). - concat(val[8]) ] - - result -end - -def _reduce_247(val, _values, result) - result = [ @builder.splat(val[0], val[1]), - *val[2] ] - - result -end - -def _reduce_248(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_249(val, _values, result) - result = @lexer.cmdarg.dup - @lexer.cmdarg.push(true) - - result -end - -def _reduce_250(val, _values, result) - @lexer.cmdarg = val[0] - - result = val[1] - - result -end - -def _reduce_251(val, _values, result) - result = [ nil, val[0], nil ] - - result -end - -def _reduce_252(val, _values, result) - @lexer.state = :expr_endarg - - result -end - -def _reduce_253(val, _values, result) - result = [ val[0], [], val[2] ] - - result -end - -def _reduce_254(val, _values, result) - @lexer.state = :expr_endarg - - result -end - -def _reduce_255(val, _values, result) - result = [ val[0], val[1], val[3] ] - - result -end - -def _reduce_256(val, _values, result) - result = @builder.block_pass(val[0], val[1]) - - result -end - -def _reduce_257(val, _values, result) - result = [ val[1] ] - - result -end - -def _reduce_258(val, _values, result) - result = [] - - result -end - -def _reduce_259(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_260(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_261(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_262(val, _values, result) - result = val[0] << @builder.splat(val[2], val[3]) - - result -end - -def _reduce_263(val, _values, result) - result = [ @builder.splat(val[0], val[1]) ] - - result -end - -# reduce 264 omitted - -# reduce 265 omitted - -# reduce 266 omitted - -# reduce 267 omitted - -# reduce 268 omitted - -# reduce 269 omitted - -# reduce 270 omitted - -# reduce 271 omitted - -def _reduce_272(val, _values, result) - result = @builder.call_method(nil, nil, val[0]) - - result -end - -def _reduce_273(val, _values, result) - result = @builder.begin_keyword(val[0], val[1], val[2]) - - result -end - -def _reduce_274(val, _values, result) - @lexer.state = :expr_endarg - - result -end - -def _reduce_275(val, _values, result) - result = @builder.begin(val[0], val[1], val[4]) - - result -end - -def _reduce_276(val, _values, result) - result = @builder.begin(val[0], val[1], val[2]) - - result -end - -def _reduce_277(val, _values, result) - result = @builder.const_fetch(val[0], val[1], val[2]) - - result -end - -def _reduce_278(val, _values, result) - result = @builder.const_global(val[0], val[1]) - - result -end - -def _reduce_279(val, _values, result) - result = @builder.index(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_280(val, _values, result) - result = @builder.array(val[0], val[1], val[2]) - - result -end - -def _reduce_281(val, _values, result) - result = @builder.associate(val[0], val[1], val[2]) - - result -end - -def _reduce_282(val, _values, result) - result = @builder.keyword_cmd(:return, val[0]) - - result -end - -def _reduce_283(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_284(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0], val[1], [], val[2]) - - result -end - -def _reduce_285(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0]) - - result -end - -def _reduce_286(val, _values, result) - result = @builder.keyword_cmd(:defined?, val[0], - val[2], [ val[3] ], val[4]) - - result -end - -def _reduce_287(val, _values, result) - method_call = @builder.call_method(nil, nil, val[0]) - - begin_t, args, body, end_t = val[1] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -# reduce 288 omitted - -def _reduce_289(val, _values, result) - begin_t, args, body, end_t = val[1] - result = @builder.block(val[0], - begin_t, args, body, end_t) - - result -end - -def _reduce_290(val, _values, result) - else_t, else_ = val[4] - result = @builder.condition(val[0], val[1], val[2], - val[3], else_t, - else_, val[5]) - - result -end - -def _reduce_291(val, _values, result) - else_t, else_ = val[4] - result = @builder.condition(val[0], val[1], val[2], - else_, else_t, - val[3], val[5]) - - result -end - -def _reduce_292(val, _values, result) - @lexer.cond.push(true) - - result -end - -def _reduce_293(val, _values, result) - @lexer.cond.pop - - result -end - -def _reduce_294(val, _values, result) - result = @builder.loop(:while, val[0], val[2], val[3], - val[5], val[6]) - - result -end - -def _reduce_295(val, _values, result) - @lexer.cond.push(true) - - result -end - -def _reduce_296(val, _values, result) - @lexer.cond.pop - - result -end - -def _reduce_297(val, _values, result) - result = @builder.loop(:until, val[0], val[2], val[3], - val[5], val[6]) - - result -end - -def _reduce_298(val, _values, result) - when_bodies = val[3][0..-2] - else_t, else_body = val[3][-1] - - result = @builder.case(val[0], val[1], - when_bodies, else_t, else_body, - val[4]) - - result -end - -def _reduce_299(val, _values, result) - when_bodies = val[2][0..-2] - else_t, else_body = val[2][-1] - - result = @builder.case(val[0], nil, - when_bodies, else_t, else_body, - val[3]) - - result -end - -def _reduce_300(val, _values, result) - result = @builder.case(val[0], nil, - [], val[2], val[3], - val[4]) - - result -end - -def _reduce_301(val, _values, result) - @lexer.cond.push(true) - - result -end - -def _reduce_302(val, _values, result) - @lexer.cond.pop - - result -end - -def _reduce_303(val, _values, result) - result = @builder.for(val[0], val[1], - val[2], val[4], - val[5], val[7], val[8]) - - result -end - -def _reduce_304(val, _values, result) - local_push - @context.in_class = true - - result -end - -def _reduce_305(val, _values, result) - k_class, ctx = val[0] - if @context.in_def - diagnostic :error, :class_in_def, nil, k_class - end - - lt_t, superclass = val[2] - result = @builder.def_class(k_class, val[1], - lt_t, superclass, - val[4], val[5]) - - local_pop - @context.in_class = ctx.in_class - - result -end - -def _reduce_306(val, _values, result) - @context.in_def = false - @context.in_class = false - local_push - - result -end - -def _reduce_307(val, _values, result) - k_class, ctx = val[0] - result = @builder.def_sclass(k_class, val[1], val[2], - val[5], val[6]) - - local_pop - @context.in_def = ctx.in_def - @context.in_class = ctx.in_class - - result -end - -def _reduce_308(val, _values, result) - @context.in_class = true - local_push - - result -end - -def _reduce_309(val, _values, result) - k_mod, ctx = val[0] - if @context.in_def - diagnostic :error, :module_in_def, nil, k_mod - end - - result = @builder.def_module(k_mod, val[1], - val[3], val[4]) - - local_pop - @context.in_class = ctx.in_class - - result -end - -def _reduce_310(val, _values, result) - local_push - result = context.dup - @context.in_def = true - - result -end - -def _reduce_311(val, _values, result) - result = @builder.def_method(val[0], val[1], - val[3], val[4], val[5]) - - local_pop - @context.in_def = val[2].in_def - - result -end - -def _reduce_312(val, _values, result) - @lexer.state = :expr_fname - - result -end - -def _reduce_313(val, _values, result) - local_push - result = context.dup - @context.in_def = true - - result -end - -def _reduce_314(val, _values, result) - result = @builder.def_singleton(val[0], val[1], val[2], - val[4], val[6], val[7], val[8]) - - local_pop - @context.in_def = val[5].in_def - - result -end - -def _reduce_315(val, _values, result) - result = @builder.keyword_cmd(:break, val[0]) - - result -end - -def _reduce_316(val, _values, result) - result = @builder.keyword_cmd(:next, val[0]) - - result -end - -def _reduce_317(val, _values, result) - result = @builder.keyword_cmd(:redo, val[0]) - - result -end - -def _reduce_318(val, _values, result) - result = @builder.keyword_cmd(:retry, val[0]) - - result -end - -# reduce 319 omitted - -def _reduce_320(val, _values, result) - result = [ val[0], @context.dup ] - - result -end - -def _reduce_321(val, _values, result) - result = [ val[0], @context.dup ] - - result -end - -# reduce 322 omitted - -# reduce 323 omitted - -# reduce 324 omitted - -def _reduce_325(val, _values, result) - result = val[1] - - result -end - -# reduce 326 omitted - -# reduce 327 omitted - -# reduce 328 omitted - -# reduce 329 omitted - -def _reduce_330(val, _values, result) - else_t, else_ = val[4] - result = [ val[0], - @builder.condition(val[0], val[1], val[2], - val[3], else_t, - else_, nil), - ] - - result -end - -# reduce 331 omitted - -def _reduce_332(val, _values, result) - result = val - - result -end - -# reduce 333 omitted - -# reduce 334 omitted - -def _reduce_335(val, _values, result) - result = [ @builder.arg_expr(val[0]) ] - - result -end - -def _reduce_336(val, _values, result) - result = val[0] << @builder.arg_expr(val[2]) - - result -end - -# reduce 337 omitted - -# reduce 338 omitted - -def _reduce_339(val, _values, result) - result = val[0]. - push(@builder.blockarg_expr(val[2], val[3])) - - result -end - -def _reduce_340(val, _values, result) - result = val[0]. - push(@builder.restarg_expr(val[2], val[3])). - push(@builder.blockarg_expr(val[5], val[6])) - - result -end - -def _reduce_341(val, _values, result) - result = val[0]. - push(@builder.restarg_expr(val[2])). - push(@builder.blockarg_expr(val[4], val[5])) - - result -end - -def _reduce_342(val, _values, result) - result = val[0]. - push(@builder.restarg_expr(val[2], val[3])) - - result -end - -def _reduce_343(val, _values, result) - result = val[0]. - push(@builder.restarg_expr(val[2])) - - result -end - -def _reduce_344(val, _values, result) - result = [ @builder.restarg_expr(val[0], val[1]), - @builder.blockarg_expr(val[3], val[4]) ] - - result -end - -def _reduce_345(val, _values, result) - result = [ @builder.restarg_expr(val[0]), - @builder.blockarg_expr(val[2], val[3]) ] - - result -end - -def _reduce_346(val, _values, result) - result = [ @builder.restarg_expr(val[0], val[1]) ] - - result -end - -def _reduce_347(val, _values, result) - result = [ @builder.restarg_expr(val[0]) ] - - result -end - -def _reduce_348(val, _values, result) - result = [ @builder.blockarg_expr(val[0], val[1]) ] - - result -end - -def _reduce_349(val, _values, result) - result = @builder.args(nil, [], nil) - - result -end - -def _reduce_350(val, _values, result) - result = @builder.args(val[0], [], val[1]) - - result -end - -def _reduce_351(val, _values, result) - result = @builder.args(val[0], [], val[0]) - - result -end - -def _reduce_352(val, _values, result) - result = @builder.args(val[0], val[1], val[2], false) - - result -end - -def _reduce_353(val, _values, result) - @static_env.extend_dynamic - result = @context.dup - @context.in_block = true - - result -end - -def _reduce_354(val, _values, result) - result = [ val[0], val[2], val[3], val[4] ] - - @static_env.unextend - @context.in_block = val[1].in_block - - result -end - -def _reduce_355(val, _values, result) - begin_t, block_args, body, end_t = val[1] - result = @builder.block(val[0], - begin_t, block_args, body, end_t) - - result -end - -def _reduce_356(val, _values, result) - lparen_t, args, rparen_t = val[3] - result = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - result -end - -def _reduce_357(val, _values, result) - lparen_t, args, rparen_t = val[3] - result = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - result -end - -def _reduce_358(val, _values, result) - lparen_t, args, rparen_t = val[1] - result = @builder.call_method(nil, nil, val[0], - lparen_t, args, rparen_t) - - result -end - -def _reduce_359(val, _values, result) - lparen_t, args, rparen_t = val[3] - result = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - result -end - -def _reduce_360(val, _values, result) - lparen_t, args, rparen_t = val[3] - result = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - result -end - -def _reduce_361(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2]) - - result -end - -def _reduce_362(val, _values, result) - lparen_t, args, rparen_t = val[1] - result = @builder.keyword_cmd(:super, val[0], - lparen_t, args, rparen_t) - - result -end - -def _reduce_363(val, _values, result) - result = @builder.keyword_cmd(:zsuper, val[0]) - - result -end - -def _reduce_364(val, _values, result) - @static_env.extend_dynamic - result = @context.dup - @context.in_block = true - - result -end - -def _reduce_365(val, _values, result) - result = [ val[0], val[2], val[3], val[4] ] - - @static_env.unextend - @context.in_block = val[1].in_block - - result -end - -def _reduce_366(val, _values, result) - @static_env.extend_dynamic - result = @context.dup - @context.in_block = true - - result -end - -def _reduce_367(val, _values, result) - result = [ val[0], val[2], val[3], val[4] ] - - @static_env.unextend - @context.in_block = val[1].in_block - - result -end - -def _reduce_368(val, _values, result) - result = [ @builder.when(val[0], val[1], val[2], val[3]), - *val[4] ] - - result -end - -# reduce 369 omitted - -def _reduce_370(val, _values, result) - result = val[0] << @builder.splat(val[2], val[3]) - - result -end - -def _reduce_371(val, _values, result) - result = [ @builder.splat(val[0], val[1]) ] - - result -end - -def _reduce_372(val, _values, result) - result = [ val[0] ] - - result -end - -# reduce 373 omitted - -def _reduce_374(val, _values, result) - assoc_t, exc_var = val[2] - - if val[1] - exc_list = @builder.array(nil, val[1], nil) - end - - result = [ @builder.rescue_body(val[0], - exc_list, assoc_t, exc_var, - val[3], val[4]), - *val[5] ] - - result -end - -def _reduce_375(val, _values, result) - result = [] - - result -end - -def _reduce_376(val, _values, result) - result = [ val[0] ] - - result -end - -# reduce 377 omitted - -# reduce 378 omitted - -def _reduce_379(val, _values, result) - result = [ val[0], val[1] ] - - result -end - -# reduce 380 omitted - -def _reduce_381(val, _values, result) - result = [ val[0], val[1] ] - - result -end - -# reduce 382 omitted - -# reduce 383 omitted - -# reduce 384 omitted - -# reduce 385 omitted - -def _reduce_386(val, _values, result) - result = @builder.string_compose(nil, val[0], nil) - - result -end - -def _reduce_387(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_388(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_389(val, _values, result) - result = @builder.string_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_390(val, _values, result) - result = @builder.string(val[0]) - - result -end - -def _reduce_391(val, _values, result) - result = @builder.xstring_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_392(val, _values, result) - opts = @builder.regexp_options(val[3]) - result = @builder.regexp_compose(val[0], val[1], val[2], opts) - - result -end - -def _reduce_393(val, _values, result) - result = @builder.words_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_394(val, _values, result) - result = [] - - result -end - -def _reduce_395(val, _values, result) - result = val[0] << @builder.word(val[1]) - - result -end - -def _reduce_396(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_397(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_398(val, _values, result) - result = @builder.words_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_399(val, _values, result) - result = [] - - result -end - -def _reduce_400(val, _values, result) - result = val[0] << @builder.string_internal(val[1]) - - result -end - -def _reduce_401(val, _values, result) - result = [] - - result -end - -def _reduce_402(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_403(val, _values, result) - result = [] - - result -end - -def _reduce_404(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_405(val, _values, result) - result = @builder.string_internal(val[0]) - - result -end - -def _reduce_406(val, _values, result) - result = val[1] - - result -end - -def _reduce_407(val, _values, result) - @lexer.cond.push(false) - @lexer.cmdarg.push(false) - - result -end - -def _reduce_408(val, _values, result) - @lexer.cond.lexpop - @lexer.cmdarg.lexpop - - result = @builder.begin(val[0], val[2], val[3]) - - result -end - -def _reduce_409(val, _values, result) - result = @builder.gvar(val[0]) - - result -end - -def _reduce_410(val, _values, result) - result = @builder.ivar(val[0]) - - result -end - -def _reduce_411(val, _values, result) - result = @builder.cvar(val[0]) - - result -end - -# reduce 412 omitted - -def _reduce_413(val, _values, result) - result = @builder.symbol(val[0]) - - result -end - -def _reduce_414(val, _values, result) - result = @builder.symbol_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_415(val, _values, result) - result = @builder.integer(val[0]) - - result -end - -def _reduce_416(val, _values, result) - result = @builder.float(val[0]) - - result -end - -def _reduce_417(val, _values, result) - num = @builder.integer(val[1]) - if @builder.respond_to? :negate - # AST builder interface compatibility - result = @builder.negate(val[0], num) - else - result = @builder.unary_num(val[0], num) - end - - result -end - -def _reduce_418(val, _values, result) - num = @builder.float(val[1]) - if @builder.respond_to? :negate - # AST builder interface compatibility - result = @builder.negate(val[0], num) - else - result = @builder.unary_num(val[0], num) - end - - result -end - -def _reduce_419(val, _values, result) - result = @builder.ident(val[0]) - - result -end - -def _reduce_420(val, _values, result) - result = @builder.ivar(val[0]) - - result -end - -def _reduce_421(val, _values, result) - result = @builder.gvar(val[0]) - - result -end - -def _reduce_422(val, _values, result) - result = @builder.cvar(val[0]) - - result -end - -def _reduce_423(val, _values, result) - result = @builder.const(val[0]) - - result -end - -def _reduce_424(val, _values, result) - result = @builder.nil(val[0]) - - result -end - -def _reduce_425(val, _values, result) - result = @builder.self(val[0]) - - result -end - -def _reduce_426(val, _values, result) - result = @builder.true(val[0]) - - result -end - -def _reduce_427(val, _values, result) - result = @builder.false(val[0]) - - result -end - -def _reduce_428(val, _values, result) - result = @builder.__FILE__(val[0]) - - result -end - -def _reduce_429(val, _values, result) - result = @builder.__LINE__(val[0]) - - result -end - -def _reduce_430(val, _values, result) - result = @builder.accessible(val[0]) - - result -end - -def _reduce_431(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_432(val, _values, result) - result = @builder.nth_ref(val[0]) - - result -end - -def _reduce_433(val, _values, result) - result = @builder.back_ref(val[0]) - - result -end - -def _reduce_434(val, _values, result) - result = nil - - result -end - -def _reduce_435(val, _values, result) - result = [ val[0], val[1] ] - - result -end - -def _reduce_436(val, _values, result) - yyerrok - result = nil - - result -end - -def _reduce_437(val, _values, result) - result = @builder.args(val[0], val[1], val[3]) - - @lexer.state = :expr_beg - - result -end - -def _reduce_438(val, _values, result) - result = @builder.args(nil, val[0], nil) - - result -end - -def _reduce_439(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_440(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_441(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_442(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_443(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_444(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_445(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_446(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_447(val, _values, result) - result = [] - - result -end - -def _reduce_448(val, _values, result) - diagnostic :error, :argument_const, nil, val[0] - - result -end - -def _reduce_449(val, _values, result) - diagnostic :error, :argument_ivar, nil, val[0] - - result -end - -def _reduce_450(val, _values, result) - diagnostic :error, :argument_gvar, nil, val[0] - - result -end - -def _reduce_451(val, _values, result) - diagnostic :error, :argument_cvar, nil, val[0] - - result -end - -def _reduce_452(val, _values, result) - @static_env.declare val[0][0] - - result = @builder.arg(val[0]) - - result -end - -def _reduce_453(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_454(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_455(val, _values, result) - @static_env.declare val[0][0] - - result = @builder.optarg(val[0], val[1], val[2]) - - result -end - -def _reduce_456(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_457(val, _values, result) - result = val[0] << val[2] - - result -end - -# reduce 458 omitted - -# reduce 459 omitted - -def _reduce_460(val, _values, result) - @static_env.declare val[1][0] - - result = [ @builder.restarg(val[0], val[1]) ] - - result -end - -def _reduce_461(val, _values, result) - result = [ @builder.restarg(val[0]) ] - - result -end - -# reduce 462 omitted - -# reduce 463 omitted - -def _reduce_464(val, _values, result) - @static_env.declare val[1][0] - - result = @builder.blockarg(val[0], val[1]) - - result -end - -def _reduce_465(val, _values, result) - result = [ val[1] ] - - result -end - -def _reduce_466(val, _values, result) - result = [] - - result -end - -# reduce 467 omitted - -def _reduce_468(val, _values, result) - result = val[1] - - result -end - -def _reduce_469(val, _values, result) - result = [] - - result -end - -def _reduce_470(val, _values, result) - result = val[0] - - result -end - -def _reduce_471(val, _values, result) - result = @builder.pair_list_18(val[0]) - - result -end - -def _reduce_472(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_473(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_474(val, _values, result) - result = @builder.pair(val[0], val[1], val[2]) - - result -end - -# reduce 475 omitted - -# reduce 476 omitted - -# reduce 477 omitted - -# reduce 478 omitted - -# reduce 479 omitted - -# reduce 480 omitted - -# reduce 481 omitted - -# reduce 482 omitted - -# reduce 483 omitted - -# reduce 484 omitted - -# reduce 485 omitted - -# reduce 486 omitted - -# reduce 487 omitted - -# reduce 488 omitted - -# reduce 489 omitted - -# reduce 490 omitted - -# reduce 491 omitted - -# reduce 492 omitted - -# reduce 493 omitted - -def _reduce_494(val, _values, result) - yyerrok - - result -end - -# reduce 495 omitted - -# reduce 496 omitted - -# reduce 497 omitted - -def _reduce_498(val, _values, result) - result = nil - - result -end - -def _reduce_none(val, _values, result) - val[0] -end - - end # class Ruby18 -end # module Parser diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ruby19.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ruby19.rb deleted file mode 100644 index 5f10d6d3..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ruby19.rb +++ /dev/null @@ -1,9558 +0,0 @@ -# -*- encoding:utf-8; warn-indent:false; frozen_string_literal: true -*- -# -# DO NOT MODIFY!!!! -# This file is automatically generated by Racc 1.7.3 -# from Racc grammar file "ruby19.y". -# - -require 'racc/parser.rb' - - -require 'parser' - -module Parser - class Ruby19 < Parser::Base - - - def version - 19 - end - - def default_encoding - Encoding::BINARY - end - - def local_push - @static_env.extend_static - @lexer.cmdarg.push(false) - @lexer.cond.push(false) - end - - def local_pop - @static_env.unextend - @lexer.cmdarg.pop - @lexer.cond.pop - end -##### State transition tables begin ### - -racc_action_table = [ - -455, 5, 71, 72, 68, 9, 54, -455, -455, -455, - 60, 61, -455, -455, -455, 64, -455, 62, 63, 65, - 29, 30, 69, 70, -455, 260, -455, -455, -455, 28, - 27, 26, 95, 94, 96, 97, -455, -455, 19, -455, - -455, -455, -455, -455, 8, 44, 7, 10, 99, 98, - 100, 89, 53, 91, 90, 92, 543, 93, 101, 102, - 522, 87, 88, 41, 42, 40, -455, -455, -455, -455, - -455, -455, -455, -455, -455, -455, -455, -455, -455, -455, - 103, 210, -455, -455, -455, 39, -455, -455, 32, -96, - -455, 55, 56, -455, -455, 57, -455, 34, -455, 564, - -455, 43, -455, -455, -455, -455, -455, -455, -455, 20, - -455, 259, -455, -97, 86, 78, 81, 82, 211, 83, - 84, 636, -104, 528, 79, 85, -455, -455, -455, -455, - -458, -455, 59, -455, 80, -455, -103, -458, -458, -458, - -469, 205, -458, -458, -458, 671, -458, 534, 522, -90, - 115, 535, 522, 252, -458, 231, -458, -458, -458, 760, - 253, 542, 563, 207, 208, -99, -458, -458, 671, -458, - -458, -458, -458, -458, 107, 522, 522, -99, -101, 106, - -101, 107, 207, 208, -95, -98, 106, 228, 107, -96, - -104, 230, 229, 106, -87, -98, -458, -458, -458, -458, - -458, -458, -458, -458, -458, -458, -458, -458, -458, -458, - 599, 199, -458, -458, -458, -90, -458, -458, -88, 200, - -458, -100, -92, -458, -458, -470, -458, -95, -458, 201, - -458, 671, -458, -458, -458, -458, -458, -458, -458, -281, - -458, -94, -458, 206, 598, 107, -281, -281, -281, 599, - 106, -90, -281, -281, -90, -281, -458, -458, -458, -458, - -90, -458, 107, -458, 759, -458, 107, 106, 107, 785, - -90, 106, 107, 106, -97, -281, -281, 106, -281, -281, - -281, -281, -281, 598, 250, -92, 260, -100, -92, 107, - 107, -99, -101, -102, 106, 106, -99, -101, -529, -98, - -89, 306, 307, 304, -98, -281, -281, -281, -281, -281, - -281, -281, -281, -281, -281, -281, -281, -281, -281, 207, - 208, -281, -281, -281, -92, 582, -469, -92, 305, -281, - 429, 107, -281, -92, 499, -100, 106, -281, 211, -281, - -100, -281, -281, -281, -281, -281, -281, -281, -533, -281, - 255, -281, -529, 207, 208, -533, -533, -533, -530, 207, - 208, -533, -533, 724, -533, -281, -281, 599, -93, -87, - -281, 260, 259, -533, -102, -96, 599, -399, 512, -104, - -82, 511, 372, -103, -533, -533, -68, -533, -533, -533, - -533, -533, -91, 774, 385, 652, 651, 650, -93, 653, - 774, 598, 652, 651, 650, 428, 653, 430, 107, 211, - 598, 431, -99, 106, -533, -533, -533, -533, -533, -533, - -533, -533, -533, -533, -533, -533, -533, -533, 210, -399, - -533, -533, -533, 553, 583, 255, -399, -455, -533, 725, - 463, -533, 803, 211, -455, -399, -533, -470, -533, 211, - -533, -533, -533, -533, -533, -533, -533, 259, -533, -533, - -533, 553, 499, -399, 472, -458, 474, -526, -527, -465, - 476, 846, -458, -533, -533, -533, -465, -91, 928, -533, - -533, -533, -533, -100, -67, -533, -533, -533, -101, -533, - -88, -98, 494, 495, 555, 554, -97, -464, -533, -533, - -533, -533, 382, 703, -464, -94, -533, 384, 383, -533, - -533, -103, -533, -533, -533, -533, -533, 211, 512, -455, - -458, 514, 555, 554, 551, 553, -455, -458, 553, 107, - -466, -526, -527, 553, 106, -455, -458, -466, 484, -533, - -533, -533, -533, -533, -533, -533, -533, -533, -533, -533, - -533, -533, -533, -526, -527, -533, -533, -533, -533, 726, - -533, 553, 485, -533, 577, -533, -533, -533, -533, -533, - -529, -533, 492, -533, -533, -533, -533, -533, -533, -533, - -533, -533, 264, -533, -533, -533, 555, 554, 556, 555, - 554, 558, -533, 211, 555, 554, 560, 255, 578, -533, - -533, -533, -533, -281, -533, 496, -533, -90, -100, 710, - -281, -281, -281, -99, 500, -281, -281, -281, 501, -281, - -533, 203, 555, 554, 565, 231, -463, -533, 204, -281, - -281, -281, -529, -463, 231, 512, -533, 202, 514, -281, - -281, -92, -281, -281, -281, -281, -281, -101, -460, -325, - 207, 208, -89, -461, -533, -460, -325, 228, -98, -462, - -461, 230, 229, 226, 227, -325, -462, 207, 208, -281, - -281, -281, -281, -281, -281, -281, -281, -281, -281, -281, - -281, -281, -281, 78, 425, -281, -281, -281, -467, 727, - -281, 426, 79, -281, 507, -467, -281, -281, 508, -281, - 427, -281, 80, -281, -467, -281, -281, -281, -281, -281, - -281, -281, 515, -281, 231, -281, 516, 655, 548, 652, - 651, 650, 107, 653, 476, 549, 528, 106, 107, -281, - -281, -281, -281, 106, -281, 374, -281, 532, -102, 280, - 71, 72, 68, 9, 54, 533, 228, 107, 60, 61, - 230, 229, 106, 64, 657, 62, 63, 65, 29, 30, - 69, 70, 566, 661, 660, 664, 663, 28, 27, 26, - 95, 94, 96, 97, 697, 698, 19, 569, 699, 101, - 102, 587, 8, 44, -260, 10, 99, 98, 100, 89, - 53, 91, 90, 92, 571, 93, 101, 102, 211, 87, - 88, 41, 42, 40, 231, 235, 240, 241, 242, 237, - 239, 247, 248, 243, 244, -468, 224, 225, 490, 575, - 245, 246, -468, 39, 512, 491, 282, 514, 576, 55, - 56, -468, 255, 57, 489, 34, 228, 586, 234, 43, - 230, 229, 226, 227, 238, 236, 232, 20, 233, 780, - 636, 589, 86, 78, 81, 82, 231, 83, 84, 231, - 231, -274, 79, 85, 231, 249, -275, -237, -274, 231, - 59, 211, 80, -275, -275, -275, 211, -274, -275, -275, - -275, 737, -275, 652, 651, 650, 211, 653, 780, 636, - -82, 228, -275, -275, -275, 230, 229, 226, 227, 618, - 211, 505, -275, -275, 629, -275, -275, -275, -275, -275, - 774, 636, 652, 651, 650, 502, 653, 774, 657, 652, - 651, 650, 503, 653, 667, 528, 674, 661, 660, 664, - 663, 427, -275, -275, -275, -275, -275, -275, -275, -275, - -275, -275, -275, -275, -275, -275, 702, 770, -275, -275, - -275, 530, 705, -275, 770, -261, -275, 711, 531, -275, - -275, 736, -275, 773, -275, 463, -275, 529, -275, -275, - -275, -275, -275, -275, -275, 538, -275, 463, -275, 211, - -282, 729, 537, 474, 476, 629, 211, -282, 255, 255, - 629, 539, -275, -275, -275, -275, -282, -275, 231, -275, - 280, 71, 72, 68, 9, 54, 231, 750, -282, 60, - 61, -260, 754, 211, 64, -282, 62, 63, 65, 29, - 30, 69, 70, 762, -282, 764, 767, 768, 28, 27, - 26, 95, 94, 96, 97, 776, 815, 19, 652, 651, - 650, 777, 653, 8, 44, 636, 10, 99, 98, 100, - 89, 53, 91, 90, 92, 784, 93, 101, 102, 211, - 87, 88, 41, 42, 40, 774, 211, 652, 651, 650, - 793, 653, -262, 774, 802, 652, 651, 650, 805, 653, - 807, 810, 811, 736, 39, 817, 818, 32, 820, 821, - 55, 56, 629, 830, 57, 774, 34, 652, 651, 650, - 43, 653, 770, 655, 736, 652, 651, 650, 20, 653, - 657, 773, 844, 86, 78, 81, 82, 211, 83, 84, - 848, 664, 663, 79, 85, 5, 71, 72, 68, 9, - 54, 59, 770, 80, 60, 61, 850, 856, 858, 64, - 657, 62, 63, 65, 29, 30, 69, 70, 211, 661, - 660, 664, 663, 28, 27, 26, 95, 94, 96, 97, - 861, 815, 19, 652, 651, 650, -263, 653, 8, 44, - 7, 10, 99, 98, 100, 89, 53, 91, 90, 92, - 868, 93, 101, 102, 869, 87, 88, 41, 42, 40, - 774, 872, 652, 651, 650, 877, 653, 211, 774, 881, - 652, 651, 650, 884, 653, 886, 888, 888, 211, 39, - 893, 896, 32, 897, 902, 55, 56, 904, 907, 57, - 774, 34, 652, 651, 650, 43, 653, 770, 655, 909, - 652, 651, 650, 20, 653, 657, 892, 888, 86, 78, - 81, 82, 888, 83, 84, 914, 664, 663, 79, 85, - 280, 71, 72, 68, 9, 54, 59, 770, 80, 60, - 61, 507, 921, 922, 64, 657, 62, 63, 65, 29, - 30, 69, 70, 930, 661, 660, 664, 663, 28, 27, - 26, 95, 94, 96, 97, 211, 942, 19, 110, 111, - 112, 113, 114, 8, 44, 888, 10, 99, 98, 100, - 89, 53, 91, 90, 92, 888, 93, 101, 102, 888, - 87, 88, 41, 42, 40, 774, 946, 652, 651, 650, - 930, 653, 949, 774, 950, 652, 651, 650, 952, 653, - 888, 888, 888, -530, 39, -529, 930, 32, 888, 930, - 55, 56, 888, nil, 57, 774, 34, 652, 651, 650, - 43, 653, 770, 655, -467, 652, 651, 650, 20, 653, - 657, -467, nil, 86, 78, 81, 82, nil, 83, 84, - -467, 664, 663, 79, 85, 280, 71, 72, 68, 9, - 54, 59, 770, 80, 60, 61, nil, nil, nil, 64, - 657, 62, 63, 65, 29, 30, 69, 70, nil, 661, - 660, 664, 663, 28, 27, 26, 95, 94, 96, 97, - nil, nil, 19, 110, 111, 112, 113, 114, 8, 44, - nil, 10, 99, 98, 100, 89, 53, 91, 90, 92, - nil, 93, 101, 102, nil, 87, 88, 41, 42, 40, - nil, nil, -468, 110, 111, 112, 113, 114, 774, -468, - 652, 651, 650, nil, 653, nil, -281, 875, -468, 39, - -274, nil, 32, -281, 876, 55, 56, -274, -530, 57, - 538, 34, -281, 874, nil, 43, -274, 913, 737, nil, - 652, 651, 650, 20, 653, 657, 539, nil, 86, 78, - 81, 82, nil, 83, 84, nil, 664, 663, 79, 85, - 280, 71, 72, 68, 9, 54, 59, nil, 80, 60, - 61, nil, nil, nil, 64, 657, 62, 63, 65, 29, - 30, 69, 70, nil, 661, 660, 664, 663, 28, 27, - 26, 95, 94, 96, 97, nil, nil, 19, 110, 111, - 112, 113, 114, 8, 44, nil, 10, 99, 98, 100, - 89, 53, 91, 90, 92, nil, 93, 101, 102, nil, - 87, 88, 41, 42, 40, nil, nil, -282, nil, nil, - nil, nil, nil, 774, -282, 652, 651, 650, nil, 653, - nil, -281, nil, -282, 39, nil, nil, 282, -281, nil, - 55, 56, nil, -530, 57, nil, 34, -281, nil, nil, - 43, nil, nil, 737, nil, 652, 651, 650, 20, 653, - 657, nil, nil, 86, 78, 81, 82, nil, 83, 84, - nil, 664, 663, 79, 85, 280, 71, 72, 68, 9, - 54, 59, nil, 80, 60, 61, nil, nil, nil, 64, - 657, 62, 63, 65, 29, 30, 69, 70, nil, 661, - 660, 664, 663, 28, 27, 26, 95, 94, 96, 97, - nil, nil, 19, nil, nil, nil, nil, 572, 8, 44, - nil, 10, 99, 98, 100, 89, 53, 91, 90, 92, - nil, 93, 101, 102, nil, 87, 88, 41, 42, 40, - 231, 235, 240, 241, 242, 237, 239, 247, 248, 243, - 244, -281, 224, 225, nil, nil, 245, 246, -281, 39, - nil, nil, 282, -530, nil, 55, 56, -281, nil, 57, - nil, 34, 228, nil, 234, 43, 230, 229, 226, 227, - 238, 236, 232, 20, 233, nil, nil, nil, 86, 78, - 81, 82, nil, 83, 84, nil, nil, nil, 79, 85, - nil, 249, -534, nil, nil, nil, 59, nil, 80, -534, - -534, -534, nil, nil, -534, -534, -534, 655, -534, 652, - 651, 650, nil, 653, nil, nil, nil, -534, -534, -534, - -534, nil, nil, nil, nil, nil, nil, nil, -534, -534, - nil, -534, -534, -534, -534, -534, nil, nil, nil, nil, - nil, nil, nil, nil, 657, 644, nil, nil, nil, nil, - nil, nil, nil, 661, 660, 664, 663, nil, -534, -534, - -534, -534, -534, -534, -534, -534, -534, -534, -534, -534, - -534, -534, nil, nil, -534, -534, -534, nil, nil, -534, - nil, nil, -534, nil, nil, -534, -534, nil, -534, nil, - -534, nil, -534, nil, -534, -534, -534, -534, -534, -534, - -534, -535, -534, -534, -534, nil, nil, nil, -535, -535, - -535, nil, nil, -535, -535, -535, 231, -535, -534, -534, - -534, -534, nil, -534, nil, -534, -535, -535, -535, -535, - nil, nil, 245, 246, nil, nil, nil, -535, -535, nil, - -535, -535, -535, -535, -535, nil, nil, nil, 228, nil, - 234, nil, 230, 229, 226, 227, nil, nil, 232, nil, - 233, nil, nil, nil, nil, nil, nil, -535, -535, -535, - -535, -535, -535, -535, -535, -535, -535, -535, -535, -535, - -535, nil, nil, -535, -535, -535, nil, nil, -535, nil, - nil, -535, nil, nil, -535, -535, nil, -535, nil, -535, - nil, -535, nil, -535, -535, -535, -535, -535, -535, -535, - nil, -535, -535, -535, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, -535, -535, -535, - -535, nil, -535, nil, -535, 280, 71, 72, 68, 9, - 54, nil, nil, nil, 60, 61, nil, nil, nil, 64, - nil, 62, 63, 65, 29, 30, 69, 70, nil, nil, - nil, nil, nil, 28, 27, 26, 95, 94, 96, 97, - nil, nil, 19, nil, nil, nil, nil, nil, 8, 44, - nil, 10, 99, 98, 100, 89, 53, 91, 90, 92, - nil, 93, 101, 102, nil, 87, 88, 41, 42, 40, - nil, nil, nil, nil, nil, nil, nil, nil, 774, nil, - 652, 651, 650, nil, 653, nil, nil, nil, nil, 39, - nil, nil, 32, nil, nil, 55, 56, nil, nil, 57, - nil, 34, nil, nil, nil, 43, nil, nil, 655, nil, - 652, 651, 650, 20, 653, 657, nil, nil, 86, 78, - 81, 82, nil, 83, 84, nil, 664, 663, 79, 85, - 280, 71, 72, 68, 9, 54, 59, nil, 80, 60, - 61, nil, nil, nil, 64, 657, 62, 63, 65, 29, - 30, 69, 70, nil, 661, 660, 664, 663, 28, 27, - 26, 95, 94, 96, 97, nil, nil, 19, nil, nil, - nil, nil, nil, 8, 44, nil, 10, 99, 98, 100, - 89, 53, 91, 90, 92, nil, 93, 101, 102, nil, - 87, 88, 41, 42, 40, nil, nil, nil, nil, nil, - nil, nil, nil, 774, nil, 652, 651, 650, nil, 653, - nil, nil, nil, nil, 39, nil, nil, 32, nil, nil, - 55, 56, nil, nil, 57, nil, 34, nil, nil, nil, - 43, nil, nil, 737, nil, 652, 651, 650, 20, 653, - 657, nil, nil, 86, 78, 81, 82, nil, 83, 84, - nil, 664, 663, 79, 85, 280, 71, 72, 68, 9, - 54, 59, nil, 80, 60, 61, nil, nil, nil, 64, - 657, 62, 63, 65, 29, 30, 69, 70, nil, 661, - 660, 664, 663, 28, 27, 26, 95, 94, 96, 97, - nil, nil, 19, nil, nil, nil, nil, nil, 8, 44, - nil, 10, 99, 98, 100, 89, 53, 91, 90, 92, - nil, 93, 101, 102, nil, 87, 88, 41, 42, 40, - nil, nil, nil, nil, nil, nil, nil, 774, nil, 652, - 651, 650, nil, 653, nil, nil, nil, nil, nil, 39, - nil, nil, 32, nil, nil, 55, 56, nil, nil, 57, - nil, 34, nil, nil, nil, 43, 774, nil, 652, 651, - 650, nil, 653, 20, 657, nil, nil, nil, 86, 78, - 81, 82, nil, 83, 84, 664, 663, nil, 79, 85, - 280, 71, 72, 68, 9, 54, 59, nil, 80, 60, - 61, nil, nil, 657, 64, nil, 62, 63, 65, 29, - 30, 69, 70, nil, 664, 663, nil, nil, 28, 27, - 26, 95, 94, 96, 97, nil, nil, 19, nil, nil, - nil, nil, nil, 8, 44, nil, 10, 99, 98, 100, - 89, 53, 91, 90, 92, nil, 93, 101, 102, nil, - 87, 88, 41, 42, 40, 231, 235, 240, 241, 242, - 237, 239, 247, 248, 243, 244, nil, -552, -552, nil, - nil, 245, 246, nil, 39, nil, nil, 32, nil, nil, - 55, 56, nil, nil, 57, nil, 34, 228, nil, 234, - 43, 230, 229, 226, 227, 238, 236, 232, 20, 233, - nil, nil, nil, 86, 78, 81, 82, nil, 83, 84, - nil, nil, nil, 79, 85, 280, 71, 72, 68, 9, - 54, 59, nil, 80, 60, 61, nil, nil, nil, 64, - nil, 62, 63, 65, 29, 30, 69, 70, nil, nil, - nil, nil, nil, 28, 27, 26, 95, 94, 96, 97, - nil, nil, 19, nil, nil, nil, nil, nil, 8, 44, - nil, 10, 99, 98, 100, 89, 53, 91, 90, 92, - nil, 93, 101, 102, nil, 87, 88, 41, 42, 40, - 231, 235, 240, 241, 242, 237, 239, 247, 248, 243, - 244, nil, -552, -552, nil, nil, 245, 246, nil, 39, - nil, nil, 32, nil, nil, 55, 56, nil, nil, 57, - nil, 34, 228, nil, 234, 43, 230, 229, 226, 227, - 238, 236, 232, 20, 233, nil, nil, nil, 86, 78, - 81, 82, nil, 83, 84, nil, nil, nil, 79, 85, - 280, 71, 72, 68, 9, 54, 59, nil, 80, 60, - 61, nil, nil, nil, 64, nil, 62, 63, 65, 29, - 30, 69, 70, nil, nil, nil, nil, nil, 28, 27, - 26, 95, 94, 96, 97, nil, nil, 19, nil, nil, - nil, nil, nil, 8, 44, nil, 10, 99, 98, 100, - 89, 53, 91, 90, 92, nil, 93, 101, 102, nil, - 87, 88, 41, 42, 40, 231, -552, -552, -552, -552, - 237, 239, nil, nil, -552, -552, nil, nil, nil, nil, - nil, 245, 246, nil, 39, nil, nil, 32, nil, nil, - 55, 56, nil, nil, 57, nil, 34, 228, nil, 234, - 43, 230, 229, 226, 227, 238, 236, 232, 20, 233, - nil, nil, nil, 86, 78, 81, 82, nil, 83, 84, - nil, nil, nil, 79, 85, 280, 71, 72, 68, 9, - 54, 59, nil, 80, 60, 61, nil, nil, nil, 64, - nil, 62, 63, 65, 29, 30, 69, 70, nil, nil, - nil, nil, nil, 28, 27, 26, 95, 94, 96, 97, - nil, nil, 19, nil, nil, nil, nil, nil, 8, 44, - nil, 10, 99, 98, 100, 89, 53, 91, 90, 92, - nil, 93, 101, 102, nil, 87, 88, 41, 42, 40, - 231, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 245, 246, nil, 39, - nil, nil, 32, nil, nil, 55, 56, nil, nil, 57, - nil, 34, 228, nil, 234, 43, 230, 229, 226, 227, - nil, nil, 232, 20, 233, nil, nil, nil, 86, 78, - 81, 82, nil, 83, 84, nil, nil, nil, 79, 85, - 280, 71, 72, 68, 9, 54, 59, nil, 80, 60, - 61, nil, nil, nil, 64, nil, 62, 63, 65, 29, - 30, 69, 70, nil, nil, nil, nil, nil, 28, 27, - 26, 95, 94, 96, 97, nil, nil, 19, nil, nil, - nil, nil, nil, 8, 44, nil, 10, 99, 98, 100, - 89, 53, 91, 90, 92, nil, 93, 101, 102, nil, - 87, 88, 41, 42, 40, 231, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 245, 246, nil, 39, nil, nil, 32, nil, nil, - 55, 56, nil, nil, 57, nil, 34, 228, nil, 234, - 43, 230, 229, 226, 227, nil, nil, 232, 20, 233, - nil, nil, nil, 86, 78, 81, 82, nil, 83, 84, - nil, nil, nil, 79, 85, 280, 71, 72, 68, 9, - 54, 59, nil, 80, 60, 61, nil, nil, nil, 64, - nil, 62, 63, 65, 29, 30, 69, 70, nil, nil, - nil, nil, nil, 28, 27, 26, 95, 94, 96, 97, - nil, nil, 19, nil, nil, nil, nil, nil, 8, 44, - nil, 10, 99, 98, 100, 89, 53, 91, 90, 92, - nil, 93, 101, 102, nil, 87, 88, 41, 42, 40, - 231, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 245, 246, nil, 39, - nil, nil, 32, nil, nil, 55, 56, nil, nil, 57, - nil, 34, 228, nil, 234, 43, 230, 229, 226, 227, - nil, nil, 232, 20, 233, nil, nil, nil, 86, 78, - 81, 82, nil, 83, 84, nil, nil, nil, 79, 85, - 280, 71, 72, 68, 9, 54, 59, nil, 80, 60, - 61, nil, nil, nil, 64, nil, 62, 63, 65, 29, - 30, 69, 70, nil, nil, nil, nil, nil, 28, 27, - 26, 95, 94, 96, 97, nil, nil, 19, nil, nil, - nil, nil, nil, 8, 44, nil, 10, 99, 98, 100, - 89, 53, 91, 90, 92, nil, 93, 101, 102, nil, - 87, 88, 41, 42, 40, 231, -552, -552, -552, -552, - 237, 239, nil, nil, -552, -552, nil, nil, nil, nil, - nil, 245, 246, nil, 39, nil, nil, 32, nil, nil, - 55, 56, nil, nil, 57, nil, 34, 228, nil, 234, - 43, 230, 229, 226, 227, 238, 236, 232, 20, 233, - nil, nil, nil, 86, 78, 81, 82, nil, 83, 84, - nil, nil, nil, 79, 85, 280, 71, 72, 68, 9, - 54, 59, nil, 80, 60, 61, nil, nil, nil, 64, - nil, 62, 63, 65, 29, 30, 69, 70, nil, nil, - nil, nil, nil, 28, 27, 26, 95, 94, 96, 97, - nil, nil, 19, nil, nil, nil, nil, nil, 8, 44, - nil, 10, 99, 98, 100, 89, 53, 91, 90, 92, - nil, 93, 101, 102, nil, 87, 88, 41, 42, 40, - 231, -552, -552, -552, -552, 237, 239, nil, nil, -552, - -552, nil, nil, nil, nil, nil, 245, 246, nil, 39, - nil, nil, 32, nil, nil, 55, 56, nil, nil, 57, - nil, 34, 228, nil, 234, 43, 230, 229, 226, 227, - 238, 236, 232, 20, 233, nil, nil, nil, 86, 78, - 81, 82, nil, 83, 84, nil, nil, nil, 79, 85, - 280, 71, 72, 68, 9, 54, 59, nil, 80, 60, - 61, nil, nil, nil, 64, nil, 62, 63, 65, 29, - 30, 69, 70, nil, nil, nil, nil, nil, 28, 27, - 26, 95, 94, 96, 97, nil, nil, 19, nil, nil, - nil, nil, nil, 8, 44, nil, 10, 99, 98, 100, - 89, 53, 91, 90, 92, nil, 93, 101, 102, nil, - 87, 88, 41, 42, 40, 231, -552, -552, -552, -552, - 237, 239, nil, nil, -552, -552, nil, nil, nil, nil, - nil, 245, 246, nil, 39, nil, nil, 32, nil, nil, - 55, 56, nil, nil, 57, nil, 34, 228, nil, 234, - 43, 230, 229, 226, 227, 238, 236, 232, 20, 233, - nil, nil, nil, 86, 78, 81, 82, nil, 83, 84, - nil, nil, nil, 79, 85, 280, 71, 72, 68, 9, - 54, 59, nil, 80, 60, 61, nil, nil, nil, 64, - nil, 62, 63, 65, 29, 30, 69, 70, nil, nil, - nil, nil, nil, 28, 27, 26, 95, 94, 96, 97, - nil, nil, 19, nil, nil, nil, nil, nil, 8, 44, - nil, 10, 99, 98, 100, 89, 53, 91, 90, 92, - nil, 93, 101, 102, nil, 87, 88, 41, 42, 40, - 231, -552, -552, -552, -552, 237, 239, nil, nil, -552, - -552, nil, nil, nil, nil, nil, 245, 246, nil, 39, - nil, nil, 32, nil, nil, 55, 56, nil, nil, 57, - nil, 34, 228, nil, 234, 43, 230, 229, 226, 227, - 238, 236, 232, 20, 233, nil, nil, nil, 86, 78, - 81, 82, nil, 83, 84, nil, nil, nil, 79, 85, - 280, 71, 72, 68, 9, 54, 59, nil, 80, 60, - 61, nil, nil, nil, 64, nil, 62, 63, 65, 29, - 30, 69, 70, nil, nil, nil, nil, nil, 28, 27, - 26, 95, 94, 96, 97, nil, nil, 19, nil, nil, - nil, nil, nil, 8, 44, nil, 10, 99, 98, 100, - 89, 53, 91, 90, 92, nil, 93, 101, 102, nil, - 87, 88, 41, 42, 40, 231, -552, -552, -552, -552, - 237, 239, nil, nil, -552, -552, nil, nil, nil, nil, - nil, 245, 246, nil, 39, nil, nil, 32, nil, nil, - 55, 56, nil, nil, 57, nil, 34, 228, nil, 234, - 43, 230, 229, 226, 227, 238, 236, 232, 20, 233, - nil, nil, nil, 86, 78, 81, 82, nil, 83, 84, - nil, nil, nil, 79, 85, 280, 71, 72, 68, 9, - 54, 59, nil, 80, 60, 61, nil, nil, nil, 64, - nil, 62, 63, 65, 29, 30, 69, 70, nil, nil, - nil, nil, nil, 28, 27, 26, 95, 94, 96, 97, - nil, nil, 19, nil, nil, nil, nil, nil, 8, 44, - nil, 10, 99, 98, 100, 89, 53, 91, 90, 92, - nil, 93, 101, 102, nil, 87, 88, 41, 42, 40, - 231, 235, 240, 241, 242, 237, 239, nil, nil, 243, - 244, nil, nil, nil, nil, nil, 245, 246, nil, 39, - nil, nil, 32, nil, nil, 55, 56, nil, nil, 57, - nil, 34, 228, nil, 234, 43, 230, 229, 226, 227, - 238, 236, 232, 20, 233, nil, nil, nil, 86, 78, - 81, 82, nil, 83, 84, nil, nil, nil, 79, 85, - 280, 71, 72, 68, 9, 54, 59, nil, 80, 60, - 61, nil, nil, nil, 64, nil, 62, 63, 65, 29, - 30, 69, 70, nil, nil, nil, nil, nil, 28, 27, - 26, 95, 94, 96, 97, nil, nil, 19, nil, nil, - nil, nil, nil, 8, 44, nil, 10, 99, 98, 100, - 89, 53, 91, 90, 92, nil, 93, 101, 102, nil, - 87, 88, 41, 42, 40, 231, 235, 240, 241, 242, - 237, 239, 247, nil, 243, 244, nil, nil, nil, nil, - nil, 245, 246, nil, 39, nil, nil, 32, nil, nil, - 55, 56, nil, nil, 57, nil, 34, 228, nil, 234, - 43, 230, 229, 226, 227, 238, 236, 232, 20, 233, - nil, nil, nil, 86, 78, 81, 82, nil, 83, 84, - nil, nil, nil, 79, 85, 280, 71, 72, 68, 9, - 54, 59, nil, 80, 60, 61, nil, nil, nil, 64, - nil, 62, 63, 65, 29, 30, 69, 70, nil, nil, - nil, nil, nil, 28, 27, 26, 95, 94, 96, 97, - nil, nil, 19, nil, nil, nil, nil, nil, 8, 44, - nil, 10, 99, 98, 100, 89, 53, 91, 90, 92, - nil, 93, 101, 102, nil, 87, 88, 41, 42, 40, - 231, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 245, 246, nil, 39, - nil, nil, 32, nil, nil, 55, 56, nil, nil, 57, - nil, 34, 228, nil, 234, 43, 230, 229, 226, 227, - nil, nil, nil, 20, nil, nil, nil, nil, 86, 78, - 81, 82, nil, 83, 84, nil, nil, nil, 79, 85, - 280, 71, 72, 68, 9, 54, 59, nil, 80, 60, - 61, nil, nil, nil, 64, nil, 62, 63, 65, 29, - 30, 69, 70, nil, nil, nil, nil, nil, 28, 27, - 26, 95, 94, 96, 97, nil, nil, 19, nil, nil, - nil, nil, nil, 8, 44, nil, 10, 99, 98, 100, - 89, 53, 91, 90, 92, nil, 93, 101, 102, nil, - 87, 88, 41, 42, 40, 231, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 245, 246, nil, 39, nil, nil, 32, nil, nil, - 55, 56, nil, nil, 57, nil, 34, 228, nil, 234, - 43, 230, 229, 226, 227, nil, nil, nil, 20, nil, - nil, nil, nil, 86, 78, 81, 82, nil, 83, 84, - nil, nil, nil, 79, 85, 280, 71, 72, 68, 9, - 54, 59, nil, 80, 60, 61, nil, nil, nil, 64, - nil, 62, 63, 65, 29, 30, 69, 70, nil, nil, - nil, nil, nil, 28, 27, 26, 95, 94, 96, 97, - nil, nil, 19, nil, nil, nil, nil, nil, 8, 44, - nil, 10, 99, 98, 100, 89, 53, 91, 90, 92, - nil, 93, 101, 102, nil, 87, 88, 41, 42, 40, - 231, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 245, 246, nil, 39, - nil, nil, 32, nil, nil, 55, 56, nil, nil, 57, - nil, 34, 228, nil, nil, 43, 230, 229, 226, 227, - nil, nil, nil, 20, nil, nil, nil, nil, 86, 78, - 81, 82, nil, 83, 84, nil, nil, nil, 79, 85, - 280, 71, 72, 68, 9, 54, 59, nil, 80, 60, - 61, nil, nil, nil, 64, nil, 62, 63, 65, 29, - 30, 69, 70, nil, nil, nil, nil, nil, 28, 27, - 26, 95, 94, 96, 97, nil, nil, 19, nil, nil, - nil, nil, nil, 8, 44, nil, 10, 99, 98, 100, - 89, 53, 91, 90, 92, nil, 93, 101, 102, nil, - 87, 88, 41, 42, 40, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 39, nil, nil, 32, nil, nil, - 55, 56, nil, nil, 57, nil, 34, nil, nil, nil, - 43, nil, nil, nil, nil, nil, nil, nil, 20, nil, - nil, nil, nil, 86, 78, 81, 82, nil, 83, 84, - nil, nil, nil, 79, 85, 280, 71, 72, 68, 9, - 54, 59, nil, 80, 60, 61, nil, nil, nil, 64, - nil, 62, 63, 65, 29, 30, 69, 70, nil, nil, - nil, nil, nil, 28, 27, 26, 95, 94, 96, 97, - nil, nil, 19, nil, nil, nil, nil, nil, 8, 44, - nil, 10, 99, 98, 100, 89, 53, 91, 90, 92, - nil, 93, 101, 102, nil, 87, 88, 41, 42, 40, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 39, - nil, nil, 32, nil, nil, 55, 56, nil, nil, 57, - nil, 34, nil, nil, nil, 43, nil, nil, nil, nil, - nil, nil, nil, 20, nil, nil, nil, nil, 86, 78, - 81, 82, nil, 83, 84, nil, nil, nil, 79, 85, - 280, 71, 72, 68, 9, 54, 59, nil, 80, 60, - 61, nil, nil, nil, 64, nil, 62, 63, 65, 29, - 30, 69, 70, nil, nil, nil, nil, nil, 28, 27, - 26, 95, 94, 96, 97, nil, nil, 19, nil, nil, - nil, nil, nil, 8, 44, nil, 10, 99, 98, 100, - 89, 53, 91, 90, 92, nil, 93, 101, 102, nil, - 87, 88, 41, 42, 40, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 39, nil, nil, 32, nil, nil, - 55, 56, nil, nil, 57, nil, 34, nil, nil, nil, - 43, nil, nil, nil, nil, nil, nil, nil, 20, nil, - nil, nil, nil, 86, 78, 81, 82, nil, 83, 84, - nil, nil, nil, 79, 85, nil, 71, 72, 68, 9, - 54, 59, nil, 80, 60, 61, nil, nil, nil, 64, - nil, 62, 63, 65, 29, 30, 69, 70, nil, nil, - nil, nil, nil, 28, 27, 26, 95, 94, 96, 97, - nil, nil, 19, nil, nil, nil, nil, nil, 8, 44, - 7, 10, 99, 98, 100, 89, 53, 91, 90, 92, - nil, 93, 101, 102, nil, 87, 88, 41, 42, 40, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 39, - nil, nil, 32, nil, nil, 55, 56, nil, nil, 57, - nil, 34, nil, nil, nil, 43, nil, nil, nil, nil, - nil, nil, nil, 20, nil, nil, nil, nil, 86, 78, - 81, 82, nil, 83, 84, nil, nil, nil, 79, 85, - nil, 71, 72, 68, nil, 54, 59, nil, 80, 60, - 61, nil, nil, nil, 64, nil, 62, 63, 65, 29, - 30, 69, 70, nil, nil, nil, nil, nil, 28, 27, - 26, 95, 94, 96, 97, nil, nil, 223, nil, nil, - nil, nil, nil, nil, 44, nil, nil, 99, 98, 100, - 89, 53, 91, 90, 92, nil, 93, 101, 102, nil, - 87, 88, 41, 42, 40, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 216, nil, nil, 222, nil, nil, - 55, 56, nil, nil, 57, nil, nil, nil, nil, nil, - 43, nil, nil, nil, nil, nil, nil, nil, 221, nil, - nil, nil, nil, 86, 78, 81, 82, nil, 83, 84, - nil, nil, nil, 79, 85, nil, 71, 72, 68, nil, - 54, 59, nil, 80, 60, 61, nil, nil, nil, 64, - nil, 62, 63, 65, 29, 30, 69, 70, nil, nil, - nil, nil, nil, 28, 27, 26, 95, 94, 96, 97, - nil, nil, 223, nil, nil, nil, nil, nil, nil, 44, - nil, nil, 99, 98, 100, 89, 53, 91, 90, 92, - 275, 93, 101, 102, nil, 87, 88, 41, 42, 40, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 216, - nil, nil, 222, nil, nil, 55, 56, nil, nil, 57, - nil, 273, nil, 271, nil, 43, nil, nil, nil, nil, - nil, nil, nil, 221, nil, nil, nil, nil, 86, 78, - 81, 82, nil, 83, 84, nil, nil, nil, 79, 85, - nil, 71, 72, 68, nil, 54, 59, nil, 80, 60, - 61, nil, nil, nil, 64, nil, 62, 63, 65, 29, - 30, 69, 70, nil, nil, nil, nil, nil, 28, 27, - 26, 95, 94, 96, 97, nil, nil, 223, nil, nil, - nil, nil, nil, nil, 44, nil, nil, 99, 98, 100, - 89, 53, 91, 90, 92, 275, 93, 101, 102, nil, - 87, 88, 41, 42, 40, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 216, nil, nil, 222, nil, nil, - 55, 56, nil, nil, 57, nil, 273, nil, 271, nil, - 43, nil, nil, nil, nil, nil, nil, nil, 221, nil, - nil, nil, nil, 86, 78, 81, 82, nil, 83, 84, - nil, nil, nil, 79, 85, nil, 71, 72, 68, nil, - 54, 59, nil, 80, 60, 61, nil, nil, nil, 64, - nil, 62, 63, 65, 29, 30, 69, 70, nil, nil, - nil, nil, nil, 28, 27, 26, 95, 94, 96, 97, - nil, nil, 223, nil, nil, nil, nil, nil, nil, 44, - nil, nil, 99, 98, 100, 89, 53, 91, 90, 92, - 275, 93, 101, 102, nil, 87, 88, 41, 42, 40, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 216, - nil, nil, 222, nil, nil, 55, 56, nil, nil, 57, - nil, 273, nil, 271, nil, 43, nil, nil, nil, nil, - nil, nil, nil, 221, nil, nil, nil, nil, 86, 78, - 81, 82, nil, 83, 84, nil, nil, nil, 79, 85, - nil, 71, 72, 68, nil, 54, 59, nil, 80, 60, - 61, nil, nil, nil, 64, nil, 62, 63, 65, 297, - 298, 69, 70, nil, nil, nil, nil, nil, 293, 294, - 300, 95, 94, 96, 97, nil, nil, 223, nil, nil, - nil, nil, nil, nil, 295, nil, nil, 99, 98, 100, - 89, 53, 91, 90, 92, nil, 93, 101, 102, nil, - 87, 88, nil, 655, 301, 652, 651, 650, nil, 653, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 291, nil, nil, 287, nil, nil, - 55, 56, nil, nil, 57, nil, 286, nil, nil, nil, - 657, 692, nil, nil, nil, nil, nil, nil, nil, 661, - 660, 664, 663, 86, 78, 81, 82, nil, 83, 84, - nil, nil, nil, 79, 85, nil, 71, 72, 68, nil, - 54, 59, nil, 80, 60, 61, nil, nil, nil, 64, - nil, 62, 63, 65, 297, 298, 69, 70, nil, nil, - nil, nil, nil, 293, 294, 300, 95, 94, 96, 97, - nil, nil, 223, nil, nil, nil, nil, 587, nil, 295, - nil, nil, 99, 98, 100, 89, 53, 91, 90, 92, - nil, 93, 101, 102, nil, 87, 88, nil, nil, 301, - 231, 235, 240, 241, 242, 237, 239, 247, 248, 243, - 244, nil, 224, 225, nil, nil, 245, 246, nil, 291, - nil, nil, 222, nil, nil, 55, 56, nil, nil, 57, - nil, nil, 228, nil, 234, nil, 230, 229, 226, 227, - 238, 236, 232, nil, 233, nil, nil, nil, 86, 78, - 81, 82, nil, 83, 84, nil, nil, nil, 79, 85, - nil, 249, nil, 303, nil, nil, 59, nil, 80, 71, - 72, 68, nil, 54, nil, nil, nil, 60, 61, nil, - nil, nil, 64, nil, 62, 63, 65, 297, 298, 69, - 70, nil, nil, nil, nil, nil, 293, 294, 300, 95, - 94, 96, 97, nil, nil, 223, nil, nil, nil, nil, - nil, nil, 44, nil, nil, 99, 98, 100, 89, 53, - 91, 90, 92, nil, 93, 101, 102, nil, 87, 88, - 41, 42, 40, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 216, nil, nil, 222, nil, nil, 55, 56, - nil, nil, 57, nil, nil, nil, nil, nil, 43, nil, - nil, nil, nil, nil, nil, nil, 221, nil, nil, nil, - nil, 86, 78, 81, 82, nil, 83, 84, nil, nil, - nil, 79, 85, nil, 71, 72, 68, nil, 54, 59, - nil, 80, 60, 61, nil, nil, nil, 64, nil, 62, - 63, 65, 297, 298, 69, 70, nil, nil, nil, nil, - nil, 293, 294, 300, 95, 94, 96, 97, nil, nil, - 223, nil, nil, nil, nil, nil, nil, 44, nil, nil, - 99, 98, 100, 89, 53, 91, 90, 92, nil, 93, - 101, 102, nil, 87, 88, 41, 42, 40, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 216, nil, nil, - 222, nil, nil, 55, 56, nil, nil, 57, nil, nil, - nil, nil, nil, 43, nil, nil, nil, nil, nil, nil, - nil, 221, nil, nil, nil, nil, 86, 78, 81, 82, - nil, 83, 84, nil, nil, nil, 79, 85, nil, 71, - 72, 68, nil, 54, 59, nil, 80, 60, 61, nil, - nil, nil, 64, nil, 62, 63, 65, 297, 298, 69, - 70, nil, nil, nil, nil, nil, 293, 294, 300, 95, - 94, 96, 97, nil, nil, 223, nil, nil, nil, nil, - nil, nil, 44, nil, nil, 99, 98, 100, 89, 53, - 91, 90, 92, nil, 93, 101, 102, nil, 87, 88, - 41, 42, 40, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 216, nil, nil, 222, nil, nil, 55, 56, - nil, nil, 57, nil, nil, nil, nil, nil, 43, nil, - nil, nil, nil, nil, nil, nil, 221, nil, nil, nil, - nil, 86, 78, 81, 82, nil, 83, 84, nil, nil, - nil, 79, 85, nil, 71, 72, 68, nil, 54, 59, - nil, 80, 60, 61, nil, nil, nil, 64, nil, 62, - 63, 65, 297, 298, 69, 70, nil, nil, nil, nil, - nil, 293, 294, 300, 95, 94, 96, 97, nil, nil, - 223, nil, nil, nil, nil, nil, nil, 44, nil, nil, - 99, 98, 100, 89, 53, 91, 90, 92, 275, 93, - 101, 102, nil, 87, 88, 41, 42, 40, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 216, nil, nil, - 222, nil, nil, 55, 56, nil, nil, 57, nil, 273, - nil, nil, nil, 43, nil, nil, nil, nil, nil, nil, - nil, 221, nil, nil, nil, nil, 86, 78, 81, 82, - nil, 83, 84, nil, nil, nil, 79, 85, nil, 71, - 72, 68, nil, 54, 59, nil, 80, 60, 61, nil, - nil, nil, 64, nil, 62, 63, 65, 297, 298, 69, - 70, nil, nil, nil, nil, nil, 293, 294, 300, 95, - 94, 96, 97, nil, nil, 223, nil, nil, nil, nil, - nil, nil, 44, nil, nil, 99, 98, 100, 89, 53, - 91, 90, 92, 275, 93, 101, 102, nil, 87, 88, - 41, 42, 40, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 216, nil, nil, 222, nil, nil, 55, 56, - nil, nil, 57, nil, nil, nil, nil, nil, 43, nil, - nil, nil, nil, nil, nil, nil, 221, nil, nil, nil, - nil, 86, 78, 81, 82, nil, 83, 84, nil, nil, - nil, 79, 85, nil, 71, 72, 68, nil, 54, 59, - nil, 80, 60, 61, nil, nil, nil, 64, nil, 62, - 63, 65, 29, 30, 69, 70, nil, nil, nil, nil, - nil, 28, 27, 26, 95, 94, 96, 97, nil, nil, - 19, nil, nil, nil, nil, nil, nil, 44, nil, nil, - 99, 98, 100, 89, 53, 91, 90, 92, nil, 93, - 101, 102, nil, 87, 88, 41, 42, 40, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 216, nil, nil, - 222, nil, nil, 55, 56, nil, nil, 57, nil, nil, - nil, nil, nil, 43, nil, nil, nil, nil, nil, nil, - nil, 20, nil, nil, nil, nil, 86, 78, 81, 82, - nil, 83, 84, nil, nil, nil, 79, 85, nil, 71, - 72, 68, nil, 54, 59, nil, 80, 60, 61, nil, - nil, nil, 64, nil, 62, 63, 65, 29, 30, 69, - 70, nil, nil, nil, nil, nil, 28, 27, 26, 95, - 94, 96, 97, nil, nil, 19, nil, nil, nil, nil, - nil, nil, 44, nil, nil, 99, 98, 100, 89, 53, - 91, 90, 92, nil, 93, 101, 102, nil, 87, 88, - 41, 42, 40, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 216, nil, nil, 222, nil, nil, 55, 56, - nil, nil, 57, nil, nil, nil, nil, nil, 43, nil, - nil, nil, nil, nil, nil, nil, 20, nil, nil, nil, - nil, 86, 78, 81, 82, nil, 83, 84, nil, nil, - nil, 79, 85, nil, 71, 72, 68, nil, 54, 59, - nil, 80, 60, 61, nil, nil, nil, 64, nil, 62, - 63, 65, 29, 30, 69, 70, nil, nil, nil, nil, - nil, 28, 27, 26, 95, 94, 96, 97, nil, nil, - 19, nil, nil, nil, nil, nil, nil, 44, nil, nil, - 99, 98, 100, 89, 53, 91, 90, 92, nil, 93, - 101, 102, nil, 87, 88, 41, 42, 40, 231, 235, - 240, 241, 242, 237, 239, 247, 248, 243, 244, nil, - 224, 225, nil, nil, 245, 246, nil, 216, nil, nil, - 222, nil, nil, 55, 56, nil, nil, 57, nil, nil, - 228, nil, 234, 43, 230, 229, 226, 227, 238, 236, - 232, 20, 233, nil, nil, nil, 86, 78, 81, 82, - nil, 83, 84, nil, nil, nil, 79, 85, 107, 249, - nil, nil, nil, 106, 59, nil, 80, 71, 72, 68, - nil, 54, nil, nil, nil, 60, 61, nil, nil, nil, - 64, nil, 62, 63, 65, 297, 298, 69, 70, nil, - nil, nil, nil, nil, 293, 294, 300, 95, 94, 96, - 97, nil, nil, 223, nil, nil, nil, nil, nil, nil, - 295, nil, nil, 99, 98, 100, 89, 53, 91, 90, - 92, nil, 93, 101, 102, nil, 87, 88, nil, 655, - 301, 652, 651, 650, nil, 653, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 336, nil, nil, 32, nil, nil, 55, 56, nil, nil, - 57, nil, 34, nil, nil, nil, 657, 692, nil, nil, - nil, nil, nil, nil, nil, 661, 660, 664, 663, 86, - 78, 81, 82, nil, 83, 84, nil, nil, nil, 79, - 85, nil, 71, 72, 68, nil, 54, 59, nil, 80, - 60, 61, nil, nil, nil, 64, nil, 62, 63, 65, - 297, 298, 69, 70, nil, nil, nil, nil, nil, 293, - 294, 300, 95, 94, 96, 97, nil, nil, 223, nil, - nil, nil, nil, nil, nil, 295, nil, nil, 99, 98, - 100, 341, 53, 91, 90, 342, nil, 93, 101, 102, - nil, 87, 88, nil, nil, 301, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 348, nil, nil, 343, nil, nil, 222, nil, - nil, 55, 56, nil, nil, 57, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 86, 78, 81, 82, nil, 83, - 84, nil, nil, nil, 79, 85, nil, 71, 72, 68, - nil, 54, 59, nil, 80, 60, 61, nil, nil, nil, - 64, nil, 62, 63, 65, 297, 298, 69, 70, nil, - nil, nil, nil, nil, 293, 294, 300, 95, 94, 96, - 97, nil, nil, 223, nil, nil, nil, nil, nil, nil, - 295, nil, nil, 99, 98, 100, 341, 53, 91, 90, - 342, nil, 93, 101, 102, nil, 87, 88, nil, nil, - 301, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 343, nil, nil, 222, nil, nil, 55, 56, nil, nil, - 57, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 86, - 78, 81, 82, nil, 83, 84, nil, nil, nil, 79, - 85, nil, 71, 72, 68, 9, 54, 59, nil, 80, - 60, 61, nil, nil, nil, 64, nil, 62, 63, 65, - 29, 30, 69, 70, nil, nil, nil, nil, nil, 28, - 27, 26, 95, 94, 96, 97, nil, nil, 19, nil, - nil, nil, nil, nil, 8, 44, 7, 10, 99, 98, - 100, 89, 53, 91, 90, 92, nil, 93, 101, 102, - nil, 87, 88, 41, 42, 40, 231, 235, 240, 241, - 242, 237, 239, 247, 248, 243, 244, nil, 224, 225, - nil, nil, 245, 246, nil, 39, nil, nil, 32, nil, - nil, 55, 56, nil, nil, 57, nil, 34, 228, nil, - 234, 43, 230, 229, 226, 227, 238, 236, 232, 20, - 233, nil, nil, nil, 86, 78, 81, 82, nil, 83, - 84, nil, nil, nil, 79, 85, nil, 249, nil, nil, - nil, 374, 59, nil, 80, 71, 72, 68, nil, 54, - nil, nil, nil, 60, 61, nil, nil, nil, 64, nil, - 62, 63, 65, 29, 30, 69, 70, nil, nil, nil, - nil, nil, 28, 27, 26, 95, 94, 96, 97, nil, - nil, 19, nil, nil, nil, nil, nil, nil, 44, nil, - nil, 99, 98, 100, 89, 53, 91, 90, 92, nil, - 93, 101, 102, nil, 87, 88, 41, 42, 40, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 216, nil, - nil, 222, nil, nil, 55, 56, nil, nil, 57, nil, - nil, nil, nil, nil, 43, nil, nil, nil, nil, nil, - nil, nil, 20, nil, nil, nil, nil, 86, 78, 81, - 82, nil, 83, 84, nil, nil, nil, 79, 85, nil, - 71, 72, 68, nil, 54, 59, nil, 80, 60, 61, - nil, nil, nil, 64, nil, 62, 63, 65, 29, 30, - 69, 70, nil, nil, nil, nil, nil, 28, 27, 26, - 95, 94, 96, 97, nil, nil, 19, nil, nil, nil, - nil, nil, nil, 44, nil, nil, 99, 98, 100, 89, - 53, 91, 90, 92, nil, 93, 101, 102, nil, 87, - 88, 41, 42, 40, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 216, nil, nil, 222, nil, nil, 55, - 56, nil, nil, 57, nil, nil, nil, nil, nil, 43, - nil, nil, nil, nil, nil, nil, nil, 20, nil, nil, - nil, nil, 86, 78, 81, 82, nil, 83, 84, nil, - nil, nil, 79, 85, nil, 71, 72, 68, nil, 54, - 59, nil, 80, 60, 61, nil, nil, nil, 64, nil, - 62, 63, 65, 29, 30, 69, 70, nil, nil, nil, - nil, nil, 28, 27, 26, 95, 94, 96, 97, nil, - nil, 19, nil, nil, nil, nil, nil, nil, 44, nil, - nil, 99, 98, 100, 89, 53, 91, 90, 92, nil, - 93, 101, 102, nil, 87, 88, 41, 42, 40, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 216, nil, - nil, 222, nil, nil, 55, 56, nil, nil, 57, nil, - nil, nil, nil, nil, 43, nil, nil, nil, nil, nil, - nil, nil, 20, nil, nil, nil, nil, 86, 78, 81, - 82, nil, 83, 84, nil, nil, nil, 79, 85, nil, - 71, 72, 68, nil, 54, 59, nil, 80, 60, 61, - nil, nil, nil, 64, nil, 62, 63, 65, 29, 30, - 69, 70, nil, nil, nil, nil, nil, 28, 27, 26, - 95, 94, 96, 97, nil, nil, 19, nil, nil, nil, - nil, nil, nil, 44, nil, nil, 99, 98, 100, 89, - 53, 91, 90, 92, nil, 93, 101, 102, nil, 87, - 88, 41, 42, 40, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 216, nil, nil, 222, nil, nil, 55, - 56, nil, nil, 57, nil, nil, nil, nil, nil, 43, - nil, nil, nil, nil, nil, nil, nil, 20, nil, nil, - nil, nil, 86, 78, 81, 82, nil, 83, 84, nil, - nil, nil, 79, 85, nil, 71, 72, 68, 9, 54, - 59, nil, 80, 60, 61, nil, nil, nil, 64, nil, - 62, 63, 65, 29, 30, 69, 70, nil, nil, nil, - nil, nil, 28, 27, 26, 95, 94, 96, 97, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 44, nil, - 10, 99, 98, 100, 89, 53, 91, 90, 92, nil, - 93, 101, 102, nil, 87, 88, 41, 42, 40, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 39, nil, - nil, 32, nil, nil, 55, 56, nil, nil, 57, nil, - 34, nil, nil, nil, 43, nil, nil, nil, nil, nil, - nil, nil, 20, nil, nil, nil, nil, 86, 78, 81, - 82, nil, 83, 84, nil, nil, nil, 79, 85, nil, - 71, 72, 68, nil, 54, 59, nil, 80, 60, 61, - nil, nil, nil, 64, nil, 62, 63, 65, 29, 30, - 69, 70, nil, nil, nil, nil, nil, 28, 27, 26, - 95, 94, 96, 97, nil, nil, 223, nil, nil, nil, - nil, nil, nil, 44, nil, nil, 99, 98, 100, 89, - 53, 91, 90, 92, nil, 93, 101, 102, nil, 87, - 88, 41, 42, 40, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 216, nil, nil, 222, nil, nil, 55, - 56, nil, nil, 57, nil, 390, nil, nil, nil, 43, - nil, nil, nil, nil, nil, nil, nil, 221, nil, nil, - nil, nil, 86, 78, 81, 82, nil, 83, 84, nil, - nil, nil, 79, 85, nil, 71, 72, 68, nil, 54, - 59, nil, 80, 60, 61, nil, nil, nil, 64, nil, - 62, 63, 65, 29, 30, 69, 70, nil, nil, nil, - nil, nil, 28, 27, 26, 95, 94, 96, 97, nil, - nil, 223, nil, nil, nil, nil, nil, nil, 44, nil, - nil, 99, 98, 100, 89, 53, 91, 90, 92, nil, - 93, 101, 102, nil, 87, 88, 41, 42, 40, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 216, nil, - nil, 222, nil, nil, 55, 56, nil, nil, 57, nil, - nil, nil, nil, nil, 43, nil, nil, nil, nil, nil, - nil, nil, 221, nil, nil, nil, nil, 86, 78, 81, - 82, nil, 83, 84, nil, nil, nil, 79, 85, nil, - 71, 72, 68, nil, 54, 59, nil, 80, 60, 61, - nil, nil, nil, 64, nil, 62, 63, 65, 29, 30, - 69, 70, nil, nil, nil, nil, nil, 28, 27, 26, - 95, 94, 96, 97, nil, nil, 223, nil, nil, nil, - nil, nil, nil, 44, nil, nil, 99, 98, 100, 89, - 53, 91, 90, 92, 275, 93, 101, 102, nil, 87, - 88, 41, 42, 40, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 216, nil, nil, 222, nil, nil, 55, - 56, nil, nil, 57, nil, 273, nil, 271, nil, 43, - nil, nil, nil, nil, nil, nil, nil, 221, nil, nil, - nil, nil, 86, 78, 81, 82, nil, 83, 84, nil, - nil, nil, 79, 85, nil, 71, 72, 68, nil, 54, - 59, nil, 80, 60, 61, nil, nil, nil, 64, nil, - 62, 63, 65, 29, 30, 69, 70, nil, nil, nil, - nil, nil, 28, 27, 26, 95, 94, 96, 97, nil, - nil, 223, nil, nil, nil, nil, nil, nil, 44, nil, - nil, 99, 98, 100, 89, 53, 91, 90, 92, nil, - 93, 101, 102, nil, 87, 88, 41, 42, 40, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 216, nil, - nil, 222, nil, nil, 55, 56, nil, nil, 57, nil, - nil, nil, nil, nil, 43, nil, nil, nil, nil, nil, - nil, nil, 221, nil, nil, nil, nil, 86, 78, 81, - 82, nil, 83, 84, nil, nil, nil, 79, 85, nil, - 71, 72, 68, nil, 54, 59, nil, 80, 60, 61, - nil, nil, nil, 64, nil, 62, 63, 65, 29, 30, - 69, 70, nil, nil, nil, nil, nil, 28, 27, 26, - 95, 94, 96, 97, nil, nil, 223, nil, nil, nil, - nil, nil, nil, 44, nil, nil, 99, 98, 100, 89, - 53, 91, 90, 92, nil, 93, 101, 102, nil, 87, - 88, 41, 42, 40, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 216, nil, nil, 222, nil, nil, 55, - 56, nil, nil, 57, nil, 390, nil, nil, nil, 43, - nil, nil, nil, nil, nil, nil, nil, 221, nil, nil, - nil, nil, 86, 78, 81, 82, nil, 83, 84, nil, - nil, nil, 79, 85, nil, 71, 72, 68, nil, 54, - 59, nil, 80, 60, 61, nil, nil, nil, 64, nil, - 62, 63, 65, 29, 30, 69, 70, nil, nil, nil, - nil, nil, 28, 27, 26, 95, 94, 96, 97, nil, - nil, 19, nil, nil, nil, nil, nil, nil, 44, nil, - nil, 99, 98, 100, 89, 53, 91, 90, 92, nil, - 93, 101, 102, nil, 87, 88, 41, 42, 40, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 216, nil, - nil, 222, nil, nil, 55, 56, nil, nil, 57, nil, - nil, nil, nil, nil, 43, nil, nil, nil, nil, nil, - nil, nil, 20, nil, nil, nil, nil, 86, 78, 81, - 82, nil, 83, 84, nil, nil, nil, 79, 85, nil, - 71, 72, 68, nil, 54, 59, nil, 80, 60, 61, - nil, nil, nil, 64, nil, 62, 63, 65, 29, 30, - 69, 70, nil, nil, nil, nil, nil, 28, 27, 26, - 95, 94, 96, 97, nil, nil, 19, nil, nil, nil, - nil, nil, nil, 44, nil, nil, 99, 98, 100, 89, - 53, 91, 90, 92, nil, 93, 101, 102, nil, 87, - 88, 41, 42, 40, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 216, nil, nil, 222, nil, nil, 55, - 56, nil, nil, 57, nil, nil, nil, nil, nil, 43, - nil, nil, nil, nil, nil, nil, nil, 20, nil, nil, - nil, nil, 86, 78, 81, 82, nil, 83, 84, nil, - nil, nil, 79, 85, nil, 71, 72, 68, nil, 54, - 59, nil, 80, 60, 61, nil, nil, nil, 64, nil, - 62, 63, 65, 29, 30, 69, 70, nil, nil, nil, - nil, nil, 28, 27, 26, 95, 94, 96, 97, nil, - nil, 19, nil, nil, nil, nil, nil, nil, 44, nil, - nil, 99, 98, 100, 89, 53, 91, 90, 92, nil, - 93, 101, 102, nil, 87, 88, 41, 42, 40, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 216, nil, - nil, 222, nil, nil, 55, 56, nil, nil, 57, nil, - nil, nil, nil, nil, 43, nil, nil, nil, nil, nil, - nil, nil, 20, nil, nil, nil, nil, 86, 78, 81, - 82, nil, 83, 84, nil, nil, nil, 79, 85, nil, - 71, 72, 68, nil, 54, 59, nil, 80, 60, 61, - nil, nil, nil, 64, nil, 62, 63, 65, 29, 30, - 69, 70, nil, nil, nil, nil, nil, 28, 27, 26, - 95, 94, 96, 97, nil, nil, 19, nil, nil, nil, - nil, nil, nil, 44, nil, nil, 99, 98, 100, 89, - 53, 91, 90, 92, nil, 93, 101, 102, nil, 87, - 88, 41, 42, 40, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 216, nil, nil, 222, nil, nil, 55, - 56, nil, nil, 57, nil, nil, nil, nil, nil, 43, - nil, nil, nil, nil, nil, nil, nil, 20, nil, nil, - nil, nil, 86, 78, 81, 82, nil, 83, 84, nil, - nil, nil, 79, 85, 211, 71, 72, 68, nil, 54, - 59, nil, 80, 60, 61, nil, nil, nil, 64, nil, - 62, 63, 65, 297, 298, 69, 70, nil, nil, nil, - nil, nil, 293, 294, 300, 95, 94, 96, 97, nil, - nil, 223, nil, nil, nil, nil, nil, nil, 44, nil, - nil, 99, 98, 100, 89, 53, 91, 90, 92, nil, - 93, 101, 102, nil, 87, 88, 41, 42, 40, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 216, nil, - nil, 222, nil, nil, 55, 56, nil, nil, 57, nil, - nil, nil, nil, nil, 43, nil, nil, nil, nil, nil, - nil, nil, 221, nil, nil, nil, nil, 86, 78, 81, - 82, nil, 83, 84, nil, nil, nil, 79, 85, nil, - 71, 72, 68, nil, 54, 59, nil, 80, 60, 61, - nil, nil, nil, 64, nil, 62, 63, 65, 297, 298, - 69, 70, nil, nil, nil, nil, nil, 293, 294, 300, - 95, 94, 96, 97, nil, nil, 223, nil, nil, nil, - nil, nil, nil, 44, nil, nil, 99, 98, 100, 89, - 53, 91, 90, 92, nil, 93, 101, 102, nil, 87, - 88, 41, 42, 40, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 216, nil, nil, 222, nil, nil, 55, - 56, nil, nil, 57, nil, nil, nil, nil, nil, 43, - nil, nil, nil, nil, nil, nil, nil, 221, nil, nil, - nil, nil, 86, 78, 81, 82, nil, 83, 84, nil, - nil, nil, 79, 85, nil, 71, 72, 68, nil, 54, - 59, nil, 80, 60, 61, nil, nil, nil, 64, nil, - 62, 63, 65, 297, 298, 69, 70, nil, nil, nil, - nil, nil, 293, 294, 300, 95, 94, 96, 97, nil, - nil, 223, nil, nil, nil, nil, nil, nil, 44, nil, - nil, 99, 98, 100, 89, 53, 91, 90, 92, nil, - 93, 101, 102, nil, 87, 88, 41, 42, 40, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 216, nil, - nil, 222, nil, nil, 55, 56, nil, nil, 57, nil, - nil, nil, nil, nil, 43, nil, nil, nil, nil, nil, - nil, nil, 221, nil, nil, nil, nil, 86, 78, 81, - 82, nil, 83, 84, nil, nil, nil, 79, 85, nil, - 71, 72, 68, nil, 54, 59, nil, 80, 60, 61, - nil, nil, nil, 64, nil, 62, 63, 65, 297, 298, - 69, 70, nil, nil, nil, nil, nil, 293, 294, 300, - 95, 94, 96, 97, nil, nil, 223, nil, nil, nil, - nil, nil, nil, 44, nil, nil, 99, 98, 100, 89, - 53, 91, 90, 92, nil, 93, 101, 102, nil, 87, - 88, 41, 42, 40, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 216, nil, nil, 222, nil, nil, 55, - 56, nil, nil, 57, nil, nil, nil, nil, nil, 43, - nil, nil, nil, nil, nil, nil, nil, 221, nil, nil, - nil, nil, 86, 78, 81, 82, nil, 83, 84, nil, - nil, nil, 79, 85, nil, 71, 72, 68, nil, 54, - 59, nil, 80, 60, 61, nil, nil, nil, 64, nil, - 62, 63, 65, 297, 298, 69, 70, nil, nil, nil, - nil, nil, 293, 294, 300, 95, 94, 96, 97, nil, - nil, 223, nil, nil, nil, nil, nil, nil, 44, nil, - nil, 99, 98, 100, 89, 53, 91, 90, 92, nil, - 93, 101, 102, nil, 87, 88, 41, 42, 40, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 216, nil, - nil, 222, nil, nil, 55, 56, nil, nil, 57, nil, - nil, nil, nil, nil, 43, nil, nil, nil, nil, nil, - nil, nil, 221, nil, nil, nil, nil, 86, 78, 81, - 82, nil, 83, 84, nil, nil, nil, 79, 85, nil, - 71, 72, 68, nil, 54, 59, nil, 80, 60, 61, - nil, nil, nil, 64, nil, 62, 63, 65, 297, 298, - 69, 70, nil, nil, nil, nil, nil, 293, 294, 300, - 95, 94, 96, 97, nil, nil, 223, nil, nil, nil, - nil, nil, nil, 44, nil, nil, 99, 98, 100, 89, - 53, 91, 90, 92, nil, 93, 101, 102, nil, 87, - 88, 41, 42, 40, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 216, nil, nil, 222, nil, nil, 55, - 56, nil, nil, 57, nil, nil, nil, nil, nil, 43, - nil, nil, nil, nil, nil, nil, nil, 221, nil, nil, - nil, nil, 86, 78, 81, 82, nil, 83, 84, nil, - nil, nil, 79, 85, nil, 71, 72, 68, nil, 54, - 59, nil, 80, 60, 61, nil, nil, nil, 64, nil, - 62, 63, 65, 297, 298, 69, 70, nil, nil, nil, - nil, nil, 293, 294, 300, 95, 94, 96, 97, nil, - nil, 223, nil, nil, nil, nil, nil, nil, 44, nil, - nil, 99, 98, 100, 89, 53, 91, 90, 92, nil, - 93, 101, 102, nil, 87, 88, 41, 42, 40, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 216, nil, - nil, 222, nil, nil, 55, 56, nil, nil, 57, nil, - nil, nil, nil, nil, 43, nil, nil, nil, nil, nil, - nil, nil, 221, nil, nil, nil, nil, 86, 78, 81, - 82, nil, 83, 84, nil, nil, nil, 79, 85, nil, - 71, 72, 68, nil, 54, 59, nil, 80, 60, 61, - nil, nil, nil, 64, nil, 62, 63, 65, 297, 298, - 69, 70, nil, nil, nil, nil, nil, 293, 294, 300, - 95, 94, 96, 97, nil, nil, 223, nil, nil, nil, - nil, nil, nil, 44, nil, nil, 99, 98, 100, 89, - 53, 91, 90, 92, nil, 93, 101, 102, nil, 87, - 88, 41, 42, 40, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 216, nil, nil, 222, nil, nil, 55, - 56, nil, nil, 57, nil, nil, nil, nil, nil, 43, - nil, nil, nil, nil, nil, nil, nil, 221, nil, nil, - nil, nil, 86, 78, 81, 82, nil, 83, 84, nil, - nil, nil, 79, 85, nil, 71, 72, 68, nil, 54, - 59, nil, 80, 60, 61, nil, nil, nil, 64, nil, - 62, 63, 65, 297, 298, 69, 70, nil, nil, nil, - nil, nil, 293, 294, 300, 95, 94, 96, 97, nil, - nil, 223, nil, nil, nil, nil, nil, nil, 44, nil, - nil, 99, 98, 100, 89, 53, 91, 90, 92, nil, - 93, 101, 102, nil, 87, 88, 41, 42, 40, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 216, nil, - nil, 222, nil, nil, 55, 56, nil, nil, 57, nil, - nil, nil, nil, nil, 43, nil, nil, nil, nil, nil, - nil, nil, 221, nil, nil, nil, nil, 86, 78, 81, - 82, nil, 83, 84, nil, nil, nil, 79, 85, nil, - 71, 72, 68, nil, 54, 59, nil, 80, 60, 61, - nil, nil, nil, 64, nil, 62, 63, 65, 297, 298, - 69, 70, nil, nil, nil, nil, nil, 293, 294, 300, - 95, 94, 96, 97, nil, nil, 223, nil, nil, nil, - nil, nil, nil, 44, nil, nil, 99, 98, 100, 89, - 53, 91, 90, 92, nil, 93, 101, 102, nil, 87, - 88, 41, 42, 40, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 216, nil, nil, 222, nil, nil, 55, - 56, nil, nil, 57, nil, nil, nil, nil, nil, 43, - nil, nil, nil, nil, nil, nil, nil, 221, nil, nil, - nil, nil, 86, 78, 81, 82, nil, 83, 84, nil, - nil, nil, 79, 85, nil, 71, 72, 68, nil, 54, - 59, nil, 80, 60, 61, nil, nil, nil, 64, nil, - 62, 63, 65, 297, 298, 69, 70, nil, nil, nil, - nil, nil, 293, 294, 300, 95, 94, 96, 97, nil, - nil, 223, nil, nil, nil, nil, nil, nil, 44, nil, - nil, 99, 98, 100, 89, 53, 91, 90, 92, nil, - 93, 101, 102, nil, 87, 88, 41, 42, 40, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 216, nil, - nil, 222, nil, nil, 55, 56, nil, nil, 57, nil, - nil, nil, nil, nil, 43, nil, nil, nil, nil, nil, - nil, nil, 221, nil, nil, nil, nil, 86, 78, 81, - 82, nil, 83, 84, nil, nil, nil, 79, 85, nil, - 71, 72, 68, nil, 54, 59, nil, 80, 60, 61, - nil, nil, nil, 64, nil, 62, 63, 65, 297, 298, - 69, 70, nil, nil, nil, nil, nil, 293, 294, 300, - 95, 94, 96, 97, nil, nil, 223, nil, nil, nil, - nil, nil, nil, 44, nil, nil, 99, 98, 100, 89, - 53, 91, 90, 92, nil, 93, 101, 102, nil, 87, - 88, 41, 42, 40, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 216, nil, nil, 222, nil, nil, 55, - 56, nil, nil, 57, nil, nil, nil, nil, nil, 43, - nil, nil, nil, nil, nil, nil, nil, 221, nil, nil, - nil, nil, 86, 78, 81, 82, nil, 83, 84, nil, - nil, nil, 79, 85, nil, 71, 72, 68, nil, 54, - 59, nil, 80, 60, 61, nil, nil, nil, 64, nil, - 62, 63, 65, 297, 298, 69, 70, nil, nil, nil, - nil, nil, 293, 294, 300, 95, 94, 96, 97, nil, - nil, 223, nil, nil, nil, nil, nil, nil, 44, nil, - nil, 99, 98, 100, 89, 53, 91, 90, 92, nil, - 93, 101, 102, nil, 87, 88, 41, 42, 40, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 216, nil, - nil, 222, nil, nil, 55, 56, nil, nil, 57, nil, - nil, nil, nil, nil, 43, nil, nil, nil, nil, nil, - nil, nil, 221, nil, nil, nil, nil, 86, 78, 81, - 82, nil, 83, 84, nil, nil, nil, 79, 85, nil, - 71, 72, 68, nil, 54, 59, nil, 80, 60, 61, - nil, nil, nil, 64, nil, 62, 63, 65, 297, 298, - 69, 70, nil, nil, nil, nil, nil, 293, 294, 300, - 95, 94, 96, 97, nil, nil, 223, nil, nil, nil, - nil, nil, nil, 44, nil, nil, 99, 98, 100, 89, - 53, 91, 90, 92, nil, 93, 101, 102, nil, 87, - 88, 41, 42, 40, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 216, nil, nil, 222, nil, nil, 55, - 56, nil, nil, 57, nil, nil, nil, nil, nil, 43, - nil, nil, nil, nil, nil, nil, nil, 221, nil, nil, - nil, nil, 86, 78, 81, 82, nil, 83, 84, nil, - nil, nil, 79, 85, nil, 71, 72, 68, nil, 54, - 59, nil, 80, 60, 61, nil, nil, nil, 64, nil, - 62, 63, 65, 297, 298, 69, 70, nil, nil, nil, - nil, nil, 293, 294, 300, 95, 94, 96, 97, nil, - nil, 223, nil, nil, nil, nil, nil, nil, 44, nil, - nil, 99, 98, 100, 89, 53, 91, 90, 92, nil, - 93, 101, 102, nil, 87, 88, 41, 42, 40, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 216, nil, - nil, 222, nil, nil, 55, 56, nil, nil, 57, nil, - nil, nil, nil, nil, 43, nil, nil, nil, nil, nil, - nil, nil, 221, nil, nil, nil, nil, 86, 78, 81, - 82, nil, 83, 84, nil, nil, nil, 79, 85, nil, - 71, 72, 68, nil, 54, 59, nil, 80, 60, 61, - nil, nil, nil, 64, nil, 62, 63, 65, 297, 298, - 69, 70, nil, nil, nil, nil, nil, 293, 294, 300, - 95, 94, 96, 97, nil, nil, 223, nil, nil, nil, - nil, nil, nil, 44, nil, nil, 99, 98, 100, 89, - 53, 91, 90, 92, nil, 93, 101, 102, nil, 87, - 88, 41, 42, 40, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 216, nil, nil, 222, nil, nil, 55, - 56, nil, nil, 57, nil, nil, nil, nil, nil, 43, - nil, nil, nil, nil, nil, nil, nil, 221, nil, nil, - nil, nil, 86, 78, 81, 82, nil, 83, 84, nil, - nil, nil, 79, 85, nil, 71, 72, 68, nil, 54, - 59, nil, 80, 60, 61, nil, nil, nil, 64, nil, - 62, 63, 65, 297, 298, 69, 70, nil, nil, nil, - nil, nil, 293, 294, 300, 95, 94, 96, 97, nil, - nil, 223, nil, nil, nil, nil, nil, nil, 44, nil, - nil, 99, 98, 100, 89, 53, 91, 90, 92, nil, - 93, 101, 102, nil, 87, 88, 41, 42, 40, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 216, nil, - nil, 222, nil, nil, 55, 56, nil, nil, 57, nil, - nil, nil, nil, nil, 43, nil, nil, nil, nil, nil, - nil, nil, 221, nil, nil, nil, nil, 86, 78, 81, - 82, nil, 83, 84, nil, nil, nil, 79, 85, nil, - 71, 72, 68, nil, 54, 59, nil, 80, 60, 61, - nil, nil, nil, 64, nil, 62, 63, 65, 297, 298, - 69, 70, nil, nil, nil, nil, nil, 293, 294, 300, - 95, 94, 96, 97, nil, nil, 223, nil, nil, nil, - nil, nil, nil, 44, nil, nil, 99, 98, 100, 89, - 53, 91, 90, 92, nil, 93, 101, 102, nil, 87, - 88, 41, 42, 40, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 216, nil, nil, 222, nil, nil, 55, - 56, nil, nil, 57, nil, nil, nil, nil, nil, 43, - nil, nil, nil, nil, nil, nil, nil, 221, nil, nil, - nil, nil, 86, 78, 81, 82, nil, 83, 84, nil, - nil, nil, 79, 85, nil, 71, 72, 68, nil, 54, - 59, nil, 80, 60, 61, nil, nil, nil, 64, nil, - 62, 63, 65, 297, 298, 69, 70, nil, nil, nil, - nil, nil, 293, 294, 300, 95, 94, 96, 97, nil, - nil, 223, nil, nil, nil, nil, nil, nil, 44, nil, - nil, 99, 98, 100, 89, 53, 91, 90, 92, nil, - 93, 101, 102, nil, 87, 88, 41, 42, 40, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 216, nil, - nil, 222, nil, nil, 55, 56, nil, nil, 57, nil, - nil, nil, nil, nil, 43, nil, nil, nil, nil, nil, - nil, nil, 221, nil, nil, nil, nil, 86, 78, 81, - 82, nil, 83, 84, nil, nil, nil, 79, 85, nil, - 71, 72, 68, nil, 54, 59, nil, 80, 60, 61, - nil, nil, nil, 64, nil, 62, 63, 65, 297, 298, - 69, 70, nil, nil, nil, nil, nil, 293, 294, 300, - 95, 94, 96, 97, nil, nil, 223, nil, nil, nil, - nil, nil, nil, 44, nil, nil, 99, 98, 100, 89, - 53, 91, 90, 92, nil, 93, 101, 102, nil, 87, - 88, 41, 42, 40, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 216, nil, nil, 222, nil, nil, 55, - 56, nil, nil, 57, nil, nil, nil, nil, nil, 43, - nil, nil, nil, nil, nil, nil, nil, 221, nil, nil, - nil, nil, 86, 78, 81, 82, nil, 83, 84, nil, - nil, nil, 79, 85, nil, 71, 72, 68, nil, 54, - 59, nil, 80, 60, 61, nil, nil, nil, 64, nil, - 62, 63, 65, 297, 298, 69, 70, nil, nil, nil, - nil, nil, 293, 294, 300, 95, 94, 96, 97, nil, - nil, 223, nil, nil, nil, nil, nil, nil, 44, nil, - nil, 99, 98, 100, 89, 53, 91, 90, 92, nil, - 93, 101, 102, nil, 87, 88, 41, 42, 40, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 216, nil, - nil, 222, nil, nil, 55, 56, nil, nil, 57, nil, - nil, nil, nil, nil, 43, nil, nil, nil, nil, nil, - nil, nil, 221, nil, nil, nil, nil, 86, 78, 81, - 82, nil, 83, 84, nil, nil, nil, 79, 85, nil, - 71, 72, 68, nil, 54, 59, nil, 80, 60, 61, - nil, nil, nil, 64, nil, 62, 63, 65, 297, 298, - 69, 70, nil, nil, nil, nil, nil, 293, 294, 300, - 95, 94, 96, 97, nil, nil, 223, nil, nil, nil, - nil, nil, nil, 44, nil, nil, 99, 98, 100, 89, - 53, 91, 90, 92, nil, 93, 101, 102, nil, 87, - 88, 41, 42, 40, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 216, nil, nil, 222, nil, nil, 55, - 56, nil, nil, 57, nil, nil, nil, nil, nil, 43, - nil, nil, nil, nil, nil, nil, nil, 221, nil, nil, - nil, nil, 86, 78, 81, 82, nil, 83, 84, nil, - nil, nil, 79, 85, nil, 71, 72, 68, nil, 54, - 59, nil, 80, 60, 61, nil, nil, nil, 64, nil, - 62, 63, 65, 297, 298, 69, 70, nil, nil, nil, - nil, nil, 293, 294, 300, 95, 94, 96, 97, nil, - nil, 223, nil, nil, nil, nil, nil, nil, 44, nil, - nil, 99, 98, 100, 89, 53, 91, 90, 92, nil, - 93, 101, 102, nil, 87, 88, 41, 42, 40, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 216, nil, - nil, 222, nil, nil, 55, 56, nil, nil, 57, nil, - nil, nil, nil, nil, 43, nil, nil, nil, nil, nil, - nil, nil, 221, nil, nil, nil, nil, 86, 78, 81, - 82, nil, 83, 84, nil, nil, nil, 79, 85, nil, - 71, 72, 68, nil, 54, 59, nil, 80, 60, 61, - nil, nil, nil, 64, nil, 62, 63, 65, 297, 298, - 69, 70, nil, nil, nil, nil, nil, 293, 294, 300, - 95, 94, 96, 97, nil, nil, 223, nil, nil, nil, - nil, nil, nil, 44, nil, nil, 99, 98, 100, 89, - 53, 91, 90, 92, nil, 93, 101, 102, nil, 87, - 88, 41, 42, 40, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 216, nil, nil, 222, nil, nil, 55, - 56, nil, nil, 57, nil, nil, nil, nil, nil, 43, - nil, nil, nil, nil, nil, nil, nil, 221, nil, nil, - nil, nil, 86, 78, 81, 82, nil, 83, 84, nil, - nil, nil, 79, 85, nil, 71, 72, 68, nil, 54, - 59, nil, 80, 60, 61, nil, nil, nil, 64, nil, - 62, 63, 65, 297, 298, 69, 70, nil, nil, nil, - nil, nil, 293, 294, 300, 95, 94, 96, 97, nil, - nil, 223, nil, nil, nil, nil, nil, nil, 44, nil, - nil, 99, 98, 100, 89, 53, 91, 90, 92, nil, - 93, 101, 102, nil, 87, 88, 41, 42, 40, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 216, nil, - nil, 222, nil, nil, 55, 56, nil, nil, 57, nil, - nil, nil, nil, nil, 43, nil, nil, nil, nil, nil, - nil, nil, 221, nil, nil, nil, nil, 86, 78, 81, - 82, nil, 83, 84, nil, nil, nil, 79, 85, nil, - 71, 72, 68, nil, 54, 59, nil, 80, 60, 61, - nil, nil, nil, 64, nil, 62, 63, 65, 297, 298, - 69, 70, nil, nil, nil, nil, nil, 293, 294, 300, - 95, 94, 96, 97, nil, nil, 223, nil, nil, nil, - nil, nil, nil, 44, nil, nil, 99, 98, 100, 89, - 53, 91, 90, 92, nil, 93, 101, 102, nil, 87, - 88, 41, 42, 40, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 216, nil, nil, 222, nil, nil, 55, - 56, nil, nil, 57, nil, nil, nil, nil, nil, 43, - nil, nil, nil, nil, nil, nil, nil, 221, nil, nil, - nil, nil, 86, 78, 81, 82, nil, 83, 84, nil, - nil, nil, 79, 85, nil, 71, 72, 68, nil, 54, - 59, nil, 80, 60, 61, nil, nil, nil, 64, nil, - 62, 63, 65, 297, 298, 69, 70, nil, nil, nil, - nil, nil, 293, 294, 300, 95, 94, 96, 97, nil, - nil, 223, nil, nil, nil, nil, nil, nil, 44, nil, - nil, 99, 98, 100, 89, 53, 91, 90, 92, nil, - 93, 101, 102, nil, 87, 88, 41, 42, 40, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 216, nil, - nil, 222, nil, nil, 55, 56, nil, nil, 57, nil, - nil, nil, nil, nil, 43, nil, nil, nil, nil, nil, - nil, nil, 221, nil, nil, nil, nil, 86, 78, 81, - 82, nil, 83, 84, nil, nil, nil, 79, 85, nil, - 71, 72, 68, nil, 54, 59, nil, 80, 60, 61, - nil, nil, nil, 64, nil, 62, 63, 65, 29, 30, - 69, 70, nil, nil, nil, nil, nil, 28, 27, 26, - 95, 94, 96, 97, nil, nil, 223, nil, nil, nil, - nil, nil, nil, 44, nil, nil, 99, 98, 100, 89, - 53, 91, 90, 92, 275, 93, 101, 102, nil, 87, - 88, 41, 42, 40, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 216, nil, nil, 222, nil, nil, 55, - 56, nil, nil, 57, nil, 273, nil, 271, nil, 43, - nil, nil, nil, nil, nil, nil, nil, 221, nil, nil, - nil, nil, 86, 78, 81, 82, nil, 83, 84, nil, - nil, nil, 79, 85, nil, 71, 72, 68, nil, 54, - 59, nil, 80, 60, 61, nil, nil, nil, 64, nil, - 62, 63, 65, 29, 30, 69, 70, nil, nil, nil, - nil, nil, 28, 27, 26, 95, 94, 96, 97, nil, - nil, 223, nil, nil, nil, nil, nil, nil, 44, nil, - nil, 99, 98, 100, 89, 53, 91, 90, 92, 275, - 93, 101, 102, nil, 87, 88, 41, 42, 40, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 216, nil, - nil, 222, nil, nil, 55, 56, nil, nil, 57, nil, - 273, nil, 271, nil, 43, nil, nil, nil, nil, nil, - nil, nil, 221, nil, nil, nil, nil, 86, 78, 81, - 82, nil, 83, 84, nil, nil, nil, 79, 85, nil, - 71, 72, 68, nil, 54, 59, nil, 80, 60, 61, - nil, nil, nil, 64, nil, 62, 63, 65, 29, 30, - 69, 70, nil, nil, nil, nil, nil, 28, 27, 26, - 95, 94, 96, 97, nil, nil, 223, nil, nil, nil, - nil, nil, nil, 44, nil, nil, 99, 98, 100, 89, - 53, 91, 90, 92, 275, 93, 101, 102, nil, 87, - 88, 41, 42, 40, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 216, nil, nil, 222, nil, nil, 55, - 56, nil, nil, 57, nil, 273, nil, 271, nil, 43, - nil, nil, nil, nil, nil, nil, nil, 221, nil, nil, - nil, nil, 86, 78, 81, 82, nil, 83, 84, nil, - nil, nil, 79, 85, 211, 71, 72, 68, nil, 54, - 59, nil, 80, 60, 61, nil, nil, nil, 64, nil, - 62, 63, 65, 297, 298, 69, 70, nil, nil, nil, - nil, nil, 293, 294, 300, 95, 94, 96, 97, nil, - nil, 223, nil, nil, nil, nil, nil, nil, 44, nil, - nil, 99, 98, 100, 89, 53, 91, 90, 92, nil, - 93, 101, 102, nil, 87, 88, 41, 42, 40, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 216, nil, - nil, 222, nil, nil, 55, 56, nil, nil, 57, nil, - nil, nil, nil, nil, 43, nil, nil, nil, nil, nil, - nil, nil, 221, nil, nil, nil, nil, 86, 78, 81, - 82, nil, 83, 84, nil, nil, nil, 79, 85, nil, - 71, 72, 68, nil, 54, 59, nil, 80, 60, 61, - nil, nil, nil, 64, nil, 62, 63, 65, 297, 298, - 69, 70, nil, nil, nil, nil, nil, 293, 294, 300, - 95, 94, 96, 97, nil, nil, 223, nil, nil, nil, - nil, nil, nil, 44, nil, nil, 99, 98, 100, 89, - 53, 91, 90, 92, nil, 93, 101, 102, nil, 87, - 88, 41, 42, 40, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 216, nil, nil, 222, nil, nil, 55, - 56, nil, nil, 57, nil, nil, nil, nil, nil, 43, - nil, nil, nil, nil, nil, nil, nil, 221, nil, nil, - nil, nil, 86, 78, 81, 82, nil, 83, 84, nil, - nil, nil, 79, 85, nil, 71, 72, 68, nil, 54, - 59, nil, 80, 60, 61, nil, nil, nil, 64, nil, - 62, 63, 65, 297, 298, 69, 70, nil, nil, nil, - nil, nil, 293, 294, 300, 95, 94, 96, 97, nil, - nil, 223, nil, nil, nil, nil, nil, nil, 44, nil, - nil, 99, 98, 100, 89, 53, 91, 90, 92, nil, - 93, 101, 102, nil, 87, 88, 41, 42, 40, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 216, nil, - nil, 222, nil, nil, 55, 56, nil, nil, 57, nil, - nil, nil, nil, nil, 43, nil, nil, nil, nil, nil, - nil, nil, 221, nil, nil, nil, nil, 86, 78, 81, - 82, nil, 83, 84, nil, nil, nil, 79, 85, nil, - 71, 72, 68, 9, 54, 59, nil, 80, 60, 61, - nil, nil, nil, 64, nil, 62, 63, 65, 29, 30, - 69, 70, nil, nil, nil, nil, nil, 28, 27, 26, - 95, 94, 96, 97, nil, nil, 19, nil, nil, nil, - nil, nil, 8, 44, nil, 10, 99, 98, 100, 89, - 53, 91, 90, 92, nil, 93, 101, 102, nil, 87, - 88, 41, 42, 40, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 39, nil, nil, 32, nil, nil, 55, - 56, nil, nil, 57, nil, 34, nil, nil, nil, 43, - nil, nil, nil, nil, nil, nil, nil, 20, nil, nil, - nil, nil, 86, 78, 81, 82, nil, 83, 84, nil, - nil, nil, 79, 85, nil, 71, 72, 68, nil, 54, - 59, nil, 80, 60, 61, nil, nil, nil, 64, nil, - 62, 63, 65, 297, 298, 69, 70, nil, nil, nil, - nil, nil, 293, 294, 300, 95, 94, 96, 97, nil, - nil, 223, nil, nil, nil, nil, nil, nil, 295, nil, - nil, 99, 98, 100, 89, 53, 91, 90, 92, nil, - 93, 101, 102, nil, 87, 88, nil, nil, 301, 231, - 235, 240, 241, 242, 237, 239, 247, 248, 243, 244, - nil, 224, 225, nil, nil, 245, 246, nil, 291, nil, - nil, 222, nil, nil, 55, 56, nil, nil, 57, nil, - nil, 228, nil, 234, nil, 230, 229, 226, 227, 238, - 236, 232, nil, 233, nil, nil, nil, 86, 78, 81, - 82, nil, 83, 84, nil, nil, nil, 79, 85, nil, - 249, nil, 487, nil, nil, 59, nil, 80, 71, 72, - 68, nil, 54, nil, nil, nil, 60, 61, nil, nil, - nil, 64, nil, 62, 63, 65, 297, 298, 69, 70, - nil, nil, nil, nil, nil, 293, 294, 300, 95, 94, - 96, 97, nil, nil, 223, nil, nil, nil, nil, nil, - nil, 295, nil, nil, 99, 98, 100, 89, 53, 91, - 90, 92, nil, 93, 101, 102, nil, 87, 88, nil, - nil, 301, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 291, nil, nil, 287, nil, nil, 55, 56, nil, - nil, 57, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 86, 78, 81, 82, nil, 83, 84, nil, nil, nil, - 79, 85, nil, 71, 72, 68, nil, 54, 59, nil, - 80, 60, 61, nil, nil, nil, 64, nil, 62, 63, - 65, 297, 298, 69, 70, nil, nil, nil, nil, nil, - 293, 294, 300, 95, 94, 96, 97, nil, nil, 223, - nil, nil, nil, nil, nil, nil, 44, nil, nil, 99, - 98, 100, 89, 53, 91, 90, 92, nil, 93, 101, - 102, nil, 87, 88, 41, 42, 40, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 216, nil, nil, 222, - 505, nil, 55, 56, nil, nil, 57, nil, nil, nil, - nil, nil, 43, nil, nil, nil, nil, nil, nil, nil, - 221, nil, nil, nil, nil, 86, 78, 81, 82, nil, - 83, 84, nil, nil, nil, 79, 85, nil, 71, 72, - 68, nil, 54, 59, nil, 80, 60, 61, nil, nil, - nil, 64, nil, 62, 63, 65, 29, 30, 69, 70, - nil, nil, nil, nil, nil, 28, 27, 26, 95, 94, - 96, 97, nil, nil, 19, nil, nil, nil, nil, nil, - nil, 44, nil, nil, 99, 98, 100, 89, 53, 91, - 90, 92, nil, 93, 101, 102, nil, 87, 88, 41, - 42, 40, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 216, nil, nil, 222, nil, nil, 55, 56, nil, - nil, 57, nil, nil, nil, nil, nil, 43, nil, nil, - nil, nil, nil, nil, nil, 20, nil, nil, nil, nil, - 86, 78, 81, 82, nil, 83, 84, nil, nil, nil, - 79, 85, nil, 71, 72, 68, nil, 54, 59, nil, - 80, 60, 61, nil, nil, nil, 64, nil, 62, 63, - 65, 29, 30, 69, 70, nil, nil, nil, nil, nil, - 28, 27, 26, 95, 94, 96, 97, nil, nil, 19, - nil, nil, nil, nil, nil, nil, 44, nil, nil, 99, - 98, 100, 89, 53, 91, 90, 92, nil, 93, 101, - 102, nil, 87, 88, 41, 42, 40, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 216, nil, nil, 222, - nil, nil, 55, 56, nil, nil, 57, nil, nil, nil, - nil, nil, 43, nil, nil, nil, nil, nil, nil, nil, - 20, nil, nil, nil, nil, 86, 78, 81, 82, nil, - 83, 84, nil, nil, nil, 79, 85, nil, 71, 72, - 68, nil, 54, 59, nil, 80, 60, 61, nil, nil, - nil, 64, nil, 62, 63, 65, 29, 30, 69, 70, - nil, nil, nil, nil, nil, 28, 27, 26, 95, 94, - 96, 97, nil, nil, 19, nil, nil, nil, nil, nil, - nil, 44, nil, nil, 99, 98, 100, 89, 53, 91, - 90, 92, nil, 93, 101, 102, nil, 87, 88, 41, - 42, 40, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 216, nil, nil, 222, nil, nil, 55, 56, nil, - nil, 57, nil, nil, nil, nil, nil, 43, nil, nil, - nil, nil, nil, nil, nil, 20, nil, nil, nil, nil, - 86, 78, 81, 82, nil, 83, 84, nil, nil, nil, - 79, 85, nil, 71, 72, 68, nil, 54, 59, nil, - 80, 60, 61, nil, nil, nil, 64, nil, 62, 63, - 65, 29, 30, 69, 70, nil, nil, nil, nil, nil, - 28, 27, 26, 95, 94, 96, 97, nil, nil, 19, - nil, nil, nil, nil, nil, nil, 44, nil, nil, 99, - 98, 100, 89, 53, 91, 90, 92, nil, 93, 101, - 102, nil, 87, 88, 41, 42, 40, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 216, nil, nil, 222, - nil, nil, 55, 56, nil, nil, 57, nil, nil, nil, - nil, nil, 43, nil, nil, nil, nil, nil, nil, nil, - 20, nil, nil, nil, nil, 86, 78, 81, 82, nil, - 83, 84, nil, nil, nil, 79, 85, nil, 71, 72, - 68, nil, 54, 59, nil, 80, 60, 61, nil, nil, - nil, 64, nil, 62, 63, 65, 29, 30, 69, 70, - nil, nil, nil, nil, nil, 28, 27, 26, 95, 94, - 96, 97, nil, nil, 19, nil, nil, nil, nil, nil, - nil, 44, nil, nil, 99, 98, 100, 89, 53, 91, - 90, 92, nil, 93, 101, 102, nil, 87, 88, 41, - 42, 40, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 216, nil, nil, 222, nil, nil, 55, 56, nil, - nil, 57, nil, nil, nil, nil, nil, 43, nil, nil, - nil, nil, nil, nil, nil, 20, nil, nil, nil, nil, - 86, 78, 81, 82, nil, 83, 84, nil, nil, nil, - 79, 85, nil, 71, 72, 68, nil, 54, 59, nil, - 80, 60, 61, nil, nil, nil, 64, nil, 62, 63, - 65, 297, 298, 69, 70, nil, nil, nil, nil, nil, - 293, 294, 300, 95, 94, 96, 97, nil, nil, 223, - nil, nil, nil, nil, nil, nil, 44, nil, nil, 99, - 98, 100, 89, 53, 91, 90, 92, nil, 93, 101, - 102, nil, 87, 88, 41, 42, 40, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 216, nil, nil, 222, - nil, nil, 55, 56, nil, nil, 57, nil, nil, nil, - nil, nil, 43, nil, nil, nil, nil, nil, nil, nil, - 221, nil, nil, nil, nil, 86, 78, 81, 82, nil, - 83, 84, nil, nil, nil, 79, 85, nil, 71, 72, - 68, nil, 54, 59, nil, 80, 60, 61, nil, nil, - nil, 64, nil, 62, 63, 65, 29, 30, 69, 70, - nil, nil, nil, nil, nil, 28, 27, 26, 95, 94, - 96, 97, nil, nil, 223, nil, nil, nil, nil, nil, - nil, 44, nil, nil, 99, 98, 100, 89, 53, 91, - 90, 92, 275, 93, 101, 102, nil, 87, 88, 41, - 42, 40, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 216, nil, nil, 222, nil, nil, 55, 56, nil, - nil, 57, nil, 273, nil, 271, nil, 43, nil, nil, - nil, nil, nil, nil, nil, 221, nil, nil, nil, nil, - 86, 78, 81, 82, nil, 83, 84, nil, nil, nil, - 79, 85, nil, 71, 72, 68, nil, 54, 59, nil, - 80, 60, 61, nil, nil, nil, 64, nil, 62, 63, - 65, 297, 298, 69, 70, nil, nil, nil, nil, nil, - 293, 294, 300, 95, 94, 96, 97, nil, nil, 223, - nil, nil, nil, nil, nil, nil, 44, nil, nil, 99, - 98, 100, 89, 53, 91, 90, 92, nil, 93, 101, - 102, nil, 87, 88, 41, 42, 40, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 216, nil, nil, 222, - nil, nil, 55, 56, nil, nil, 57, nil, nil, nil, - nil, nil, 43, nil, nil, nil, nil, nil, nil, nil, - 221, nil, nil, nil, nil, 86, 78, 81, 82, nil, - 83, 84, nil, nil, nil, 79, 85, nil, 71, 72, - 68, nil, 54, 59, nil, 80, 60, 61, nil, nil, - nil, 64, nil, 62, 63, 65, 297, 298, 69, 70, - nil, nil, nil, nil, nil, 293, 294, 300, 95, 94, - 96, 97, nil, nil, 223, nil, nil, nil, nil, nil, - nil, 44, nil, nil, 99, 98, 100, 89, 53, 91, - 90, 92, nil, 93, 101, 102, nil, 87, 88, 41, - 42, 40, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 216, nil, nil, 222, nil, nil, 55, 56, nil, - nil, 57, nil, nil, nil, nil, nil, 43, nil, nil, - nil, nil, nil, nil, nil, 221, nil, nil, nil, nil, - 86, 78, 81, 82, nil, 83, 84, nil, nil, nil, - 79, 85, nil, 71, 72, 68, nil, 54, 59, nil, - 80, 60, 61, nil, nil, nil, 64, nil, 62, 63, - 65, 297, 298, 69, 70, nil, nil, nil, nil, nil, - 293, 294, 300, 95, 94, 96, 97, nil, nil, 223, - nil, nil, nil, nil, nil, nil, 44, nil, nil, 99, - 98, 100, 89, 53, 91, 90, 92, nil, 93, 101, - 102, nil, 87, 88, 41, 42, 40, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 216, nil, nil, 222, - nil, nil, 55, 56, nil, nil, 57, nil, nil, nil, - nil, nil, 43, nil, nil, nil, nil, nil, nil, nil, - 221, nil, nil, nil, nil, 86, 78, 81, 82, nil, - 83, 84, nil, nil, nil, 79, 85, nil, 71, 72, - 68, nil, 54, 59, nil, 80, 60, 61, nil, nil, - nil, 64, nil, 62, 63, 65, 297, 298, 69, 70, - nil, nil, nil, nil, nil, 293, 294, 300, 95, 94, - 96, 97, nil, nil, 223, nil, nil, nil, nil, nil, - nil, 44, nil, nil, 99, 98, 100, 89, 53, 91, - 90, 92, 275, 93, 101, 102, nil, 87, 88, 41, - 42, 40, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 216, nil, nil, 222, nil, nil, 55, 56, nil, - nil, 57, nil, 613, nil, 271, nil, 43, nil, nil, - nil, nil, nil, nil, nil, 221, nil, nil, nil, nil, - 86, 78, 81, 82, nil, 83, 84, nil, nil, nil, - 79, 85, nil, 71, 72, 68, nil, 54, 59, nil, - 80, 60, 61, nil, nil, nil, 64, nil, 62, 63, - 65, 297, 298, 69, 70, nil, nil, nil, nil, nil, - 293, 294, 300, 95, 94, 96, 97, nil, nil, 223, - nil, nil, nil, nil, nil, nil, 44, nil, nil, 99, - 98, 100, 89, 53, 91, 90, 92, 275, 93, 101, - 102, nil, 87, 88, 41, 42, 40, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 216, nil, nil, 222, - nil, nil, 55, 56, nil, nil, 57, nil, nil, nil, - 271, nil, 43, nil, nil, nil, nil, nil, nil, nil, - 221, nil, nil, nil, nil, 86, 78, 81, 82, nil, - 83, 84, nil, nil, nil, 79, 85, nil, 71, 72, - 68, nil, 54, 59, nil, 80, 60, 61, nil, nil, - nil, 64, nil, 62, 63, 65, 297, 298, 69, 70, - nil, nil, nil, nil, nil, 293, 294, 300, 95, 94, - 96, 97, nil, nil, 223, nil, nil, nil, nil, nil, - nil, 44, nil, nil, 99, 98, 100, 89, 53, 91, - 90, 92, nil, 93, 101, 102, nil, 87, 88, 41, - 42, 40, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 216, nil, nil, 222, nil, nil, 55, 56, nil, - nil, 57, nil, nil, nil, nil, nil, 43, nil, nil, - nil, nil, nil, nil, nil, 221, nil, nil, nil, nil, - 86, 78, 81, 82, nil, 83, 84, nil, nil, nil, - 79, 85, nil, 71, 72, 68, 9, 54, 59, nil, - 80, 60, 61, nil, nil, nil, 64, nil, 62, 63, - 65, 29, 30, 69, 70, nil, nil, nil, nil, nil, - 28, 27, 26, 95, 94, 96, 97, nil, nil, 19, - nil, nil, nil, nil, nil, 8, 44, nil, 10, 99, - 98, 100, 89, 53, 91, 90, 92, nil, 93, 101, - 102, nil, 87, 88, 41, 42, 40, 231, 235, 240, - 241, 242, 237, 239, 247, 248, 243, 244, nil, 224, - 225, nil, nil, 245, 246, nil, 39, nil, nil, 32, - nil, nil, 55, 56, nil, nil, 57, nil, 34, 228, - nil, 234, 43, 230, 229, 226, 227, 238, 236, 232, - 20, 233, nil, nil, nil, 86, 78, 81, 82, nil, - 83, 84, nil, nil, nil, 79, 85, 211, 249, nil, - nil, nil, 374, 59, nil, 80, 71, 72, 68, nil, - 54, nil, nil, nil, 60, 61, nil, nil, nil, 64, - nil, 62, 63, 65, 297, 298, 69, 70, nil, nil, - nil, nil, nil, 293, 294, 300, 95, 94, 96, 97, - nil, nil, 223, nil, nil, nil, nil, nil, nil, 295, - nil, nil, 99, 98, 100, 89, 53, 91, 90, 92, - nil, 93, 101, 102, nil, 87, 88, nil, nil, 301, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 291, - nil, nil, 287, nil, nil, 55, 56, nil, nil, 57, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 86, 78, - 81, 82, nil, 83, 84, nil, nil, nil, 79, 85, - nil, 71, 72, 68, nil, 54, 59, nil, 80, 60, - 61, nil, nil, nil, 64, nil, 62, 63, 65, 29, - 30, 69, 70, nil, nil, nil, nil, nil, 28, 27, - 26, 95, 94, 96, 97, nil, nil, 223, nil, nil, - nil, nil, nil, nil, 44, nil, nil, 99, 98, 100, - 89, 53, 91, 90, 92, 275, 93, 101, 102, nil, - 87, 88, 41, 42, 40, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 216, nil, nil, 222, nil, nil, - 55, 56, nil, nil, 57, nil, 273, nil, 271, nil, - 43, nil, nil, nil, nil, nil, nil, nil, 221, nil, - nil, nil, nil, 86, 78, 81, 82, nil, 83, 84, - nil, nil, nil, 79, 85, nil, 71, 72, 68, nil, - 54, 59, nil, 80, 60, 61, nil, nil, nil, 64, - nil, 62, 63, 65, 297, 298, 69, 70, nil, nil, - nil, nil, nil, 293, 294, 300, 95, 94, 96, 97, - nil, nil, 223, nil, nil, nil, nil, nil, nil, 295, - nil, nil, 99, 98, 100, 89, 53, 91, 90, 92, - nil, 93, 101, 102, nil, 87, 88, nil, nil, 301, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 291, - nil, nil, 287, nil, nil, 55, 56, nil, nil, 57, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 86, 78, - 81, 82, nil, 83, 84, nil, nil, nil, 79, 85, - nil, 71, 72, 68, nil, 54, 59, nil, 80, 60, - 61, nil, nil, nil, 64, nil, 62, 63, 65, 297, - 298, 69, 70, nil, nil, nil, nil, nil, 293, 294, - 300, 95, 94, 96, 97, nil, nil, 223, nil, nil, - nil, nil, nil, nil, 44, nil, nil, 99, 98, 100, - 89, 53, 91, 90, 92, nil, 93, 101, 102, nil, - 87, 88, 41, 42, 40, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 216, nil, nil, 222, nil, nil, - 55, 56, nil, nil, 57, nil, nil, nil, nil, nil, - 43, nil, nil, nil, nil, nil, nil, nil, 221, nil, - nil, nil, nil, 86, 78, 81, 82, nil, 83, 84, - nil, nil, nil, 79, 85, nil, 71, 72, 68, nil, - 54, 59, nil, 80, 60, 61, nil, nil, nil, 64, - nil, 62, 63, 65, 297, 298, 69, 70, nil, nil, - nil, nil, nil, 293, 294, 300, 95, 94, 96, 97, - nil, nil, 223, nil, nil, nil, nil, nil, nil, 44, - nil, nil, 99, 98, 100, 89, 53, 91, 90, 92, - nil, 93, 101, 102, nil, 87, 88, 41, 42, 40, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 216, - nil, nil, 222, nil, nil, 55, 56, nil, nil, 57, - nil, nil, nil, nil, nil, 43, nil, nil, nil, nil, - nil, nil, nil, 221, nil, nil, nil, nil, 86, 78, - 81, 82, nil, 83, 84, nil, nil, nil, 79, 85, - nil, 71, 72, 68, nil, 54, 59, nil, 80, 60, - 61, nil, nil, nil, 64, nil, 62, 63, 65, 297, - 298, 69, 70, nil, nil, nil, nil, nil, 293, 294, - 300, 95, 94, 96, 97, nil, nil, 223, nil, nil, - nil, nil, nil, nil, 44, nil, nil, 99, 98, 100, - 89, 53, 91, 90, 92, nil, 93, 101, 102, nil, - 87, 88, 41, 42, 40, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 216, nil, nil, 222, nil, nil, - 55, 56, nil, nil, 57, nil, nil, nil, nil, nil, - 43, nil, nil, nil, nil, nil, nil, nil, 221, nil, - nil, nil, nil, 86, 78, 81, 82, nil, 83, 84, - nil, nil, nil, 79, 85, nil, 71, 72, 68, nil, - 54, 59, nil, 80, 60, 61, nil, nil, nil, 64, - nil, 62, 63, 65, 29, 30, 69, 70, nil, nil, - nil, nil, nil, 28, 27, 26, 95, 94, 96, 97, - nil, nil, 19, nil, nil, nil, nil, nil, nil, 44, - nil, nil, 99, 98, 100, 89, 53, 91, 90, 92, - nil, 93, 101, 102, nil, 87, 88, 41, 42, 40, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 216, - nil, nil, 222, nil, nil, 55, 56, nil, nil, 57, - nil, nil, nil, nil, nil, 43, nil, nil, nil, nil, - nil, nil, nil, 20, nil, nil, nil, nil, 86, 78, - 81, 82, nil, 83, 84, nil, nil, nil, 79, 85, - nil, 71, 72, 68, nil, 54, 59, nil, 80, 60, - 61, nil, nil, nil, 64, nil, 62, 63, 65, 297, - 298, 69, 70, nil, nil, nil, nil, nil, 293, 294, - 300, 95, 94, 96, 97, nil, nil, 223, nil, nil, - nil, nil, nil, nil, 44, nil, nil, 99, 98, 100, - 89, 53, 91, 90, 92, nil, 93, 101, 102, nil, - 87, 88, 41, 42, 40, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 216, nil, nil, 222, nil, nil, - 55, 56, nil, nil, 57, nil, 390, nil, nil, nil, - 43, nil, nil, nil, nil, nil, nil, nil, 221, nil, - nil, nil, nil, 86, 78, 81, 82, nil, 83, 84, - nil, nil, nil, 79, 85, nil, 71, 72, 68, nil, - 54, 59, nil, 80, 60, 61, nil, nil, nil, 64, - nil, 62, 63, 65, 297, 298, 69, 70, nil, nil, - nil, nil, nil, 293, 294, 300, 95, 94, 96, 97, - nil, nil, 223, nil, nil, nil, nil, nil, nil, 44, - nil, nil, 99, 98, 100, 89, 53, 91, 90, 92, - 275, 93, 101, 102, nil, 87, 88, 41, 42, 40, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 216, - nil, nil, 222, nil, nil, 55, 56, nil, nil, 57, - nil, 613, nil, nil, nil, 43, nil, nil, nil, nil, - nil, nil, nil, 221, nil, nil, nil, nil, 86, 78, - 81, 82, nil, 83, 84, nil, nil, nil, 79, 85, - nil, 71, 72, 68, nil, 54, 59, nil, 80, 60, - 61, nil, nil, nil, 64, nil, 62, 63, 65, 297, - 298, 69, 70, nil, nil, nil, nil, nil, 293, 294, - 300, 95, 94, 96, 97, nil, nil, 223, nil, nil, - nil, nil, nil, nil, 44, nil, nil, 99, 98, 100, - 89, 53, 91, 90, 92, 275, 93, 101, 102, nil, - 87, 88, 41, 42, 40, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 216, nil, nil, 222, nil, nil, - 55, 56, nil, nil, 57, nil, nil, nil, nil, nil, - 43, nil, nil, nil, nil, nil, nil, nil, 221, nil, - nil, nil, nil, 86, 78, 81, 82, nil, 83, 84, - nil, nil, nil, 79, 85, nil, 71, 72, 68, nil, - 54, 59, nil, 80, 60, 61, nil, nil, nil, 64, - nil, 62, 63, 65, 297, 298, 69, 70, nil, nil, - nil, nil, nil, 293, 294, 300, 95, 94, 96, 97, - nil, nil, 223, nil, nil, nil, nil, nil, nil, 44, - nil, nil, 99, 98, 100, 89, 53, 91, 90, 92, - nil, 93, 101, 102, nil, 87, 88, 41, 42, 40, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 216, - nil, nil, 222, nil, nil, 55, 56, nil, nil, 57, - nil, 273, nil, nil, nil, 43, nil, nil, nil, nil, - nil, nil, nil, 221, nil, nil, nil, nil, 86, 78, - 81, 82, nil, 83, 84, nil, nil, nil, 79, 85, - nil, 71, 72, 68, nil, 54, 59, nil, 80, 60, - 61, nil, nil, nil, 64, nil, 62, 63, 65, 29, - 30, 69, 70, nil, nil, nil, nil, nil, 28, 27, - 26, 95, 94, 96, 97, nil, nil, 223, nil, nil, - nil, nil, nil, nil, 44, nil, nil, 99, 98, 100, - 89, 53, 91, 90, 92, 275, 93, 101, 102, nil, - 87, 88, 41, 42, 40, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 216, nil, nil, 222, nil, nil, - 55, 56, nil, nil, 57, nil, 273, nil, 271, nil, - 43, nil, nil, nil, nil, nil, nil, nil, 221, nil, - nil, nil, nil, 86, 78, 81, 82, nil, 83, 84, - nil, nil, nil, 79, 85, nil, 71, 72, 68, nil, - 54, 59, nil, 80, 60, 61, nil, nil, nil, 64, - nil, 62, 63, 65, 29, 30, 69, 70, nil, nil, - nil, nil, nil, 28, 27, 26, 95, 94, 96, 97, - nil, nil, 223, nil, nil, nil, nil, nil, nil, 44, - nil, nil, 99, 98, 100, 89, 53, 91, 90, 92, - 275, 93, 101, 102, nil, 87, 88, 41, 42, 40, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 216, - nil, nil, 222, nil, nil, 55, 56, nil, nil, 57, - nil, 273, nil, 271, nil, 43, nil, nil, nil, nil, - nil, nil, nil, 221, nil, nil, nil, nil, 86, 78, - 81, 82, nil, 83, 84, nil, nil, nil, 79, 85, - nil, 71, 72, 68, nil, 54, 59, nil, 80, 60, - 61, nil, nil, nil, 64, nil, 62, 63, 65, 29, - 30, 69, 70, nil, nil, nil, nil, nil, 28, 27, - 26, 95, 94, 96, 97, nil, nil, 19, nil, nil, - nil, nil, nil, nil, 44, nil, nil, 99, 98, 100, - 89, 53, 91, 90, 92, nil, 93, 101, 102, nil, - 87, 88, 41, 42, 40, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 216, nil, nil, 222, nil, nil, - 55, 56, nil, nil, 57, nil, nil, nil, nil, nil, - 43, nil, nil, nil, nil, nil, nil, nil, 20, nil, - nil, nil, nil, 86, 78, 81, 82, nil, 83, 84, - nil, nil, nil, 79, 85, nil, 71, 72, 68, nil, - 54, 59, nil, 80, 60, 61, nil, nil, nil, 64, - nil, 62, 63, 65, 297, 298, 69, 70, nil, nil, - nil, nil, nil, 293, 294, 300, 95, 94, 96, 97, - nil, nil, 223, nil, nil, nil, nil, nil, nil, 44, - nil, nil, 99, 98, 100, 89, 53, 91, 90, 92, - nil, 93, 101, 102, nil, 87, 88, 41, 42, 40, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 216, - nil, nil, 222, nil, nil, 55, 56, nil, nil, 57, - nil, 708, nil, nil, nil, 43, nil, nil, nil, nil, - nil, nil, nil, 221, nil, nil, nil, nil, 86, 78, - 81, 82, nil, 83, 84, nil, nil, nil, 79, 85, - nil, 71, 72, 68, nil, 54, 59, nil, 80, 60, - 61, nil, nil, nil, 64, nil, 62, 63, 65, 297, - 298, 69, 70, nil, nil, nil, nil, nil, 293, 294, - 300, 95, 94, 96, 97, nil, nil, 223, nil, nil, - nil, nil, nil, nil, 44, nil, nil, 99, 98, 100, - 89, 53, 91, 90, 92, nil, 93, 101, 102, nil, - 87, 88, 41, 42, 40, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 216, nil, nil, 222, nil, nil, - 55, 56, nil, nil, 57, nil, nil, nil, nil, nil, - 43, nil, nil, nil, nil, nil, nil, nil, 221, nil, - nil, nil, nil, 86, 78, 81, 82, nil, 83, 84, - nil, nil, nil, 79, 85, nil, 71, 72, 68, nil, - 54, 59, nil, 80, 60, 61, nil, nil, nil, 64, - nil, 62, 63, 65, 297, 298, 69, 70, nil, nil, - nil, nil, nil, 293, 294, 300, 95, 94, 96, 97, - nil, nil, 223, nil, nil, nil, nil, nil, nil, 44, - nil, nil, 99, 98, 100, 89, 53, 91, 90, 92, - 275, 93, 101, 102, nil, 87, 88, 41, 42, 40, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 216, - nil, nil, 222, nil, nil, 55, 56, nil, nil, 57, - nil, 613, nil, 271, nil, 43, nil, nil, nil, nil, - nil, nil, nil, 221, nil, nil, nil, nil, 86, 78, - 81, 82, nil, 83, 84, nil, nil, nil, 79, 85, - nil, 71, 72, 68, nil, 54, 59, nil, 80, 60, - 61, nil, nil, nil, 64, nil, 62, 63, 65, 297, - 298, 69, 70, nil, nil, nil, nil, nil, 293, 294, - 300, 95, 94, 96, 97, nil, nil, 223, nil, nil, - nil, nil, nil, nil, 44, nil, nil, 99, 98, 100, - 89, 53, 91, 90, 92, 275, 93, 101, 102, nil, - 87, 88, 41, 42, 40, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 216, nil, nil, 222, nil, nil, - 55, 56, nil, nil, 57, nil, nil, nil, 271, nil, - 43, nil, nil, nil, nil, nil, nil, nil, 221, nil, - nil, nil, nil, 86, 78, 81, 82, nil, 83, 84, - nil, nil, nil, 79, 85, nil, 71, 72, 68, nil, - 54, 59, nil, 80, 60, 61, nil, nil, nil, 64, - nil, 62, 63, 65, 29, 30, 69, 70, nil, nil, - nil, nil, nil, 28, 27, 26, 95, 94, 96, 97, - nil, nil, 223, nil, nil, nil, nil, nil, nil, 44, - nil, nil, 99, 98, 100, 89, 53, 91, 90, 92, - nil, 93, 101, 102, nil, 87, 88, 41, 42, 40, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 216, - nil, nil, 222, nil, nil, 55, 56, nil, nil, 57, - nil, nil, nil, nil, nil, 43, nil, nil, nil, nil, - nil, nil, nil, 221, nil, nil, nil, nil, 86, 78, - 81, 82, nil, 83, 84, nil, nil, nil, 79, 85, - nil, 71, 72, 68, nil, 54, 59, nil, 80, 60, - 61, nil, nil, nil, 64, nil, 62, 63, 65, 29, - 30, 69, 70, nil, nil, nil, nil, nil, 28, 27, - 26, 95, 94, 96, 97, nil, nil, 223, nil, nil, - nil, nil, nil, nil, 44, nil, nil, 99, 98, 100, - 89, 53, 91, 90, 92, nil, 93, 101, 102, nil, - 87, 88, 41, 42, 40, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 216, nil, nil, 222, nil, nil, - 55, 56, nil, nil, 57, nil, nil, nil, nil, nil, - 43, nil, nil, nil, nil, nil, nil, nil, 221, nil, - nil, nil, nil, 86, 78, 81, 82, nil, 83, 84, - nil, nil, nil, 79, 85, nil, 71, 72, 68, nil, - 54, 59, nil, 80, 60, 61, nil, nil, nil, 64, - nil, 62, 63, 65, 29, 30, 69, 70, nil, nil, - nil, nil, nil, 28, 27, 26, 95, 94, 96, 97, - nil, nil, 223, nil, nil, nil, nil, nil, nil, 44, - nil, nil, 99, 98, 100, 89, 53, 91, 90, 92, - nil, 93, 101, 102, nil, 87, 88, 41, 42, 40, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 216, - nil, nil, 222, nil, nil, 55, 56, nil, nil, 57, - nil, nil, nil, nil, nil, 43, nil, nil, nil, nil, - nil, nil, nil, 221, nil, nil, nil, nil, 86, 78, - 81, 82, nil, 83, 84, nil, nil, nil, 79, 85, - nil, 71, 72, 68, nil, 54, 59, nil, 80, 60, - 61, nil, nil, nil, 64, nil, 62, 63, 65, 29, - 30, 69, 70, nil, nil, nil, nil, nil, 28, 27, - 26, 95, 94, 96, 97, nil, nil, 223, nil, nil, - nil, nil, nil, nil, 44, nil, nil, 99, 98, 100, - 89, 53, 91, 90, 92, nil, 93, 101, 102, nil, - 87, 88, 41, 42, 40, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 216, nil, nil, 222, nil, nil, - 55, 56, nil, nil, 57, nil, nil, nil, nil, nil, - 43, nil, nil, nil, nil, nil, nil, nil, 221, nil, - nil, nil, nil, 86, 78, 81, 82, nil, 83, 84, - nil, nil, nil, 79, 85, nil, 71, 72, 68, nil, - 54, 59, nil, 80, 60, 61, nil, nil, nil, 64, - nil, 62, 63, 65, 29, 30, 69, 70, nil, nil, - nil, nil, nil, 28, 27, 26, 95, 94, 96, 97, - nil, nil, 223, nil, nil, nil, nil, nil, nil, 44, - nil, nil, 99, 98, 100, 89, 53, 91, 90, 92, - nil, 93, 101, 102, nil, 87, 88, 41, 42, 40, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 216, - nil, nil, 222, nil, nil, 55, 56, nil, nil, 57, - nil, nil, nil, nil, nil, 43, nil, nil, nil, nil, - nil, nil, nil, 221, nil, nil, nil, nil, 86, 78, - 81, 82, nil, 83, 84, nil, nil, nil, 79, 85, - nil, 71, 72, 68, nil, 54, 59, nil, 80, 60, - 61, nil, nil, nil, 64, nil, 62, 63, 65, 297, - 298, 69, 70, nil, nil, nil, nil, nil, 293, 294, - 300, 95, 94, 96, 97, nil, nil, 223, nil, nil, - nil, nil, nil, nil, 44, nil, nil, 99, 98, 100, - 89, 53, 91, 90, 92, nil, 93, 101, 102, nil, - 87, 88, 41, 42, 40, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 216, nil, nil, 222, nil, nil, - 55, 56, nil, nil, 57, nil, nil, nil, nil, nil, - 43, nil, nil, nil, nil, nil, nil, nil, 221, nil, - nil, nil, nil, 86, 78, 81, 82, nil, 83, 84, - nil, nil, nil, 79, 85, nil, 71, 72, 68, nil, - 54, 59, nil, 80, 60, 61, nil, nil, nil, 64, - nil, 62, 63, 65, 297, 298, 69, 70, nil, nil, - nil, nil, nil, 293, 294, 300, 95, 94, 96, 97, - nil, nil, 223, nil, nil, nil, nil, nil, nil, 44, - nil, nil, 99, 98, 100, 89, 53, 91, 90, 92, - nil, 93, 101, 102, nil, 87, 88, 41, 42, 40, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 216, - nil, nil, 222, nil, nil, 55, 56, nil, nil, 57, - nil, nil, nil, nil, nil, 43, nil, nil, nil, nil, - nil, nil, nil, 221, nil, nil, nil, nil, 86, 78, - 81, 82, nil, 83, 84, nil, nil, nil, 79, 85, - nil, 71, 72, 68, nil, 54, 59, nil, 80, 60, - 61, nil, nil, nil, 64, nil, 62, 63, 65, 297, - 298, 69, 70, nil, nil, nil, nil, nil, 293, 294, - 300, 95, 94, 96, 97, nil, nil, 223, nil, nil, - nil, nil, nil, nil, 295, nil, nil, 99, 98, 100, - 89, 53, 91, 90, 92, nil, 93, 101, 102, nil, - 87, 88, nil, nil, 301, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 291, nil, nil, 287, nil, nil, - 55, 56, nil, nil, 57, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 86, 78, 81, 82, nil, 83, 84, - nil, nil, nil, 79, 85, nil, 71, 72, 68, nil, - 54, 59, nil, 80, 60, 61, nil, nil, nil, 64, - nil, 62, 63, 65, 297, 298, 69, 70, nil, nil, - nil, nil, nil, 293, 294, 300, 95, 94, 96, 97, - nil, nil, 223, nil, nil, nil, nil, nil, nil, 295, - nil, nil, 99, 98, 100, 89, 53, 91, 90, 92, - nil, 93, 101, 102, nil, 87, 88, nil, nil, 301, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 291, - nil, nil, 287, nil, nil, 55, 56, nil, nil, 57, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 86, 78, - 81, 82, nil, 83, 84, nil, nil, nil, 79, 85, - nil, 71, 72, 68, nil, 54, 59, nil, 80, 60, - 61, nil, nil, nil, 64, nil, 62, 63, 65, 29, - 30, 69, 70, nil, nil, nil, nil, nil, 28, 27, - 26, 95, 94, 96, 97, nil, nil, 19, nil, nil, - nil, nil, nil, nil, 44, nil, nil, 99, 98, 100, - 89, 53, 91, 90, 92, nil, 93, 101, 102, nil, - 87, 88, 41, 42, 40, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 216, nil, nil, 222, nil, nil, - 55, 56, nil, nil, 57, nil, nil, nil, nil, nil, - 43, nil, nil, nil, nil, nil, nil, nil, 20, nil, - nil, nil, nil, 86, 78, 81, 82, nil, 83, 84, - nil, nil, nil, 79, 85, nil, 71, 72, 68, nil, - 54, 59, nil, 80, 60, 61, nil, nil, nil, 64, - nil, 62, 63, 65, 297, 298, 69, 70, nil, nil, - nil, nil, nil, 293, 294, 300, 95, 94, 96, 97, - nil, nil, 223, nil, nil, nil, nil, nil, nil, 44, - nil, nil, 99, 98, 100, 89, 53, 91, 90, 92, - nil, 93, 101, 102, nil, 87, 88, 41, 42, 40, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 216, - nil, nil, 222, nil, nil, 55, 56, nil, nil, 57, - nil, nil, nil, nil, nil, 43, nil, nil, nil, nil, - nil, nil, nil, 221, nil, nil, nil, nil, 86, 78, - 81, 82, nil, 83, 84, nil, nil, nil, 79, 85, - nil, 71, 72, 68, nil, 54, 59, nil, 80, 60, - 61, nil, nil, nil, 64, nil, 62, 63, 65, 29, - 30, 69, 70, nil, nil, nil, nil, nil, 28, 27, - 26, 95, 94, 96, 97, nil, nil, 223, nil, nil, - nil, nil, nil, nil, 44, nil, nil, 99, 98, 100, - 89, 53, 91, 90, 92, nil, 93, 101, 102, nil, - 87, 88, 41, 42, 40, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 216, nil, nil, 222, nil, nil, - 55, 56, nil, nil, 57, nil, nil, nil, nil, nil, - 43, nil, nil, nil, nil, nil, nil, nil, 221, nil, - nil, nil, nil, 86, 78, 81, 82, nil, 83, 84, - nil, nil, nil, 79, 85, nil, 71, 72, 68, nil, - 54, 59, nil, 80, 60, 61, nil, nil, nil, 64, - nil, 62, 63, 65, 297, 298, 69, 70, nil, nil, - nil, nil, nil, 293, 294, 300, 95, 94, 96, 97, - nil, nil, 223, nil, nil, nil, nil, nil, nil, 44, - nil, nil, 99, 98, 100, 89, 53, 91, 90, 92, - nil, 93, 101, 102, nil, 87, 88, 41, 42, 40, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 216, - nil, nil, 222, nil, nil, 55, 56, nil, nil, 57, - nil, nil, nil, nil, nil, 43, nil, nil, nil, nil, - nil, nil, nil, 221, nil, nil, nil, nil, 86, 78, - 81, 82, nil, 83, 84, nil, nil, nil, 79, 85, - nil, 71, 72, 68, nil, 54, 59, nil, 80, 60, - 61, nil, nil, nil, 64, nil, 62, 63, 65, 297, - 298, 69, 70, nil, nil, nil, nil, nil, 293, 294, - 300, 95, 94, 96, 97, nil, nil, 223, nil, nil, - nil, nil, nil, nil, 44, nil, nil, 99, 98, 100, - 89, 53, 91, 90, 92, nil, 93, 101, 102, nil, - 87, 88, 41, 42, 40, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 216, nil, nil, 222, nil, nil, - 55, 56, nil, nil, 57, nil, nil, nil, nil, nil, - 43, nil, nil, nil, nil, nil, nil, nil, 221, nil, - nil, nil, nil, 86, 78, 81, 82, nil, 83, 84, - nil, nil, nil, 79, 85, nil, 71, 72, 68, nil, - 54, 59, nil, 80, 60, 61, nil, nil, nil, 64, - nil, 62, 63, 65, 297, 298, 69, 70, nil, nil, - nil, nil, nil, 293, 294, 300, 95, 94, 96, 97, - nil, nil, 223, nil, nil, nil, nil, nil, nil, 44, - nil, nil, 99, 98, 100, 89, 53, 91, 90, 92, - nil, 93, 101, 102, nil, 87, 88, 41, 42, 40, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 216, - nil, nil, 222, nil, nil, 55, 56, nil, nil, 57, - nil, nil, nil, nil, nil, 43, nil, nil, nil, nil, - nil, nil, nil, 221, nil, nil, nil, nil, 86, 78, - 81, 82, nil, 83, 84, nil, nil, nil, 79, 85, - nil, 71, 72, 68, nil, 54, 59, nil, 80, 60, - 61, nil, nil, nil, 64, nil, 62, 63, 65, 297, - 298, 69, 70, nil, nil, nil, nil, nil, 293, 294, - 300, 95, 94, 96, 97, nil, nil, 223, nil, nil, - nil, nil, nil, nil, 44, nil, nil, 99, 98, 100, - 89, 53, 91, 90, 92, nil, 93, 101, 102, nil, - 87, 88, 41, 42, 40, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 216, nil, nil, 222, nil, nil, - 55, 56, nil, nil, 57, nil, nil, nil, nil, nil, - 43, nil, nil, nil, nil, nil, nil, nil, 221, nil, - nil, nil, nil, 86, 78, 81, 82, nil, 83, 84, - nil, nil, nil, 79, 85, nil, 71, 72, 68, nil, - 54, 59, nil, 80, 60, 61, nil, nil, nil, 64, - nil, 62, 63, 65, 297, 298, 69, 70, nil, nil, - nil, nil, nil, 293, 294, 300, 95, 94, 96, 97, - nil, nil, 223, nil, nil, nil, nil, nil, nil, 44, - nil, nil, 99, 98, 100, 89, 53, 91, 90, 92, - nil, 93, 101, 102, nil, 87, 88, 41, 42, 40, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 216, - nil, nil, 222, nil, nil, 55, 56, nil, nil, 57, - nil, nil, nil, nil, nil, 43, nil, nil, nil, nil, - nil, nil, nil, 221, nil, nil, nil, nil, 86, 78, - 81, 82, nil, 83, 84, nil, nil, nil, 79, 85, - nil, 71, 72, 68, nil, 54, 59, nil, 80, 60, - 61, nil, nil, nil, 64, nil, 62, 63, 65, 297, - 298, 69, 70, nil, nil, nil, nil, nil, 293, 294, - 300, 95, 94, 96, 97, nil, nil, 223, nil, nil, - nil, nil, nil, nil, 295, nil, nil, 99, 98, 100, - 89, 53, 91, 90, 92, nil, 93, 101, 102, nil, - 87, 88, nil, nil, 301, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 827, nil, nil, 222, nil, nil, - 55, 56, nil, nil, 57, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 86, 78, 81, 82, nil, 83, 84, - nil, nil, nil, 79, 85, nil, 71, 72, 68, nil, - 54, 59, nil, 80, 60, 61, nil, nil, nil, 64, - nil, 62, 63, 65, 297, 298, 69, 70, nil, nil, - nil, nil, nil, 293, 294, 300, 95, 94, 96, 97, - nil, nil, 223, nil, nil, nil, nil, nil, nil, 44, - nil, nil, 99, 98, 100, 89, 53, 91, 90, 92, - nil, 93, 101, 102, nil, 87, 88, 41, 42, 40, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 216, - nil, nil, 222, nil, nil, 55, 56, nil, nil, 57, - nil, nil, nil, nil, nil, 43, nil, nil, nil, nil, - nil, nil, nil, 221, nil, nil, nil, nil, 86, 78, - 81, 82, nil, 83, 84, nil, nil, nil, 79, 85, - nil, 71, 72, 68, nil, 54, 59, nil, 80, 60, - 61, nil, nil, nil, 64, nil, 62, 63, 65, 29, - 30, 69, 70, nil, nil, nil, nil, nil, 28, 27, - 26, 95, 94, 96, 97, nil, nil, 19, nil, nil, - nil, nil, nil, nil, 44, nil, nil, 99, 98, 100, - 89, 53, 91, 90, 92, nil, 93, 101, 102, nil, - 87, 88, 41, 42, 40, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 216, nil, nil, 222, nil, nil, - 55, 56, nil, nil, 57, nil, nil, nil, nil, nil, - 43, nil, nil, nil, nil, nil, nil, nil, 20, nil, - nil, nil, nil, 86, 78, 81, 82, nil, 83, 84, - nil, nil, nil, 79, 85, nil, 71, 72, 68, nil, - 54, 59, nil, 80, 60, 61, nil, nil, nil, 64, - nil, 62, 63, 65, 297, 298, 69, 70, nil, nil, - nil, nil, nil, 293, 294, 300, 95, 94, 96, 97, - nil, nil, 223, nil, nil, nil, nil, nil, nil, 44, - nil, nil, 99, 98, 100, 89, 53, 91, 90, 92, - nil, 93, 101, 102, nil, 87, 88, 41, 42, 40, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 216, - nil, nil, 222, nil, nil, 55, 56, nil, nil, 57, - nil, 613, nil, nil, nil, 43, nil, nil, nil, nil, - nil, nil, nil, 221, nil, nil, nil, nil, 86, 78, - 81, 82, nil, 83, 84, nil, nil, nil, 79, 85, - nil, 71, 72, 68, nil, 54, 59, nil, 80, 60, - 61, nil, nil, nil, 64, nil, 62, 63, 65, 297, - 298, 69, 70, nil, nil, nil, nil, nil, 293, 294, - 300, 95, 94, 96, 97, nil, nil, 223, nil, nil, - nil, nil, nil, nil, 44, nil, nil, 99, 98, 100, - 89, 53, 91, 90, 92, 275, 93, 101, 102, nil, - 87, 88, 41, 42, 40, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 216, nil, nil, 222, nil, nil, - 55, 56, nil, nil, 57, nil, nil, nil, 271, nil, - 43, nil, nil, nil, nil, nil, nil, nil, 221, nil, - nil, nil, nil, 86, 78, 81, 82, nil, 83, 84, - nil, nil, nil, 79, 85, nil, 71, 72, 68, nil, - 54, 59, nil, 80, 60, 61, nil, nil, nil, 64, - nil, 62, 63, 65, 297, 298, 69, 70, nil, nil, - nil, nil, nil, 293, 294, 300, 95, 94, 96, 97, - nil, nil, 223, nil, nil, nil, nil, nil, nil, 44, - nil, nil, 99, 98, 100, 89, 53, 91, 90, 92, - nil, 93, 101, 102, nil, 87, 88, 41, 42, 40, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 216, - nil, nil, 222, nil, nil, 55, 56, nil, nil, 57, - nil, nil, nil, nil, nil, 43, nil, nil, nil, nil, - nil, nil, nil, 221, nil, nil, nil, nil, 86, 78, - 81, 82, nil, 83, 84, nil, nil, nil, 79, 85, - nil, 71, 72, 68, nil, 54, 59, nil, 80, 60, - 61, nil, nil, nil, 64, nil, 62, 63, 65, 297, - 298, 69, 70, nil, nil, nil, nil, nil, 293, 294, - 300, 95, 94, 96, 97, nil, nil, 223, nil, nil, - nil, nil, nil, nil, 295, nil, nil, 99, 98, 100, - 89, 53, 91, 90, 92, nil, 93, 101, 102, nil, - 87, 88, nil, nil, 301, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 871, nil, nil, 222, nil, nil, - 55, 56, nil, nil, 57, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 86, 78, 81, 82, nil, 83, 84, - nil, nil, nil, 79, 85, nil, 71, 72, 68, nil, - 54, 59, nil, 80, 60, 61, nil, nil, nil, 64, - nil, 62, 63, 65, 29, 30, 69, 70, nil, nil, - nil, nil, nil, 28, 27, 26, 95, 94, 96, 97, - nil, nil, 223, nil, nil, nil, nil, nil, nil, 44, - nil, nil, 99, 98, 100, 89, 53, 91, 90, 92, - 275, 93, 101, 102, nil, 87, 88, 41, 42, 40, - 231, 235, 240, 241, 242, 237, 239, 247, 248, 243, - 244, nil, 224, 225, nil, nil, 245, 246, nil, 216, - nil, nil, 222, nil, nil, 55, 56, nil, nil, 57, - nil, 273, 228, 271, 234, 43, 230, 229, 226, 227, - 238, 236, 232, 221, 233, nil, nil, nil, 86, 78, - 81, 82, nil, 83, 84, nil, nil, nil, 79, 85, - nil, 249, -398, nil, nil, nil, 59, nil, 80, -398, - -398, -398, nil, nil, -398, -398, -398, nil, -398, nil, - nil, nil, nil, nil, nil, nil, nil, -398, -398, -398, - nil, nil, nil, nil, nil, nil, nil, nil, -398, -398, - nil, -398, -398, -398, -398, -398, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, -398, -398, - -398, -398, -398, -398, -398, -398, -398, -398, -398, -398, - -398, -398, nil, nil, -398, -398, -398, nil, nil, -398, - nil, 255, -398, nil, nil, -398, -398, nil, -398, nil, - -398, nil, -398, nil, -398, -398, -398, -398, -398, -398, - -398, -288, -398, -398, -398, nil, nil, nil, -288, -288, - -288, nil, nil, -288, -288, -288, nil, -288, -398, -398, - nil, -398, nil, -398, nil, nil, nil, -288, -288, nil, - nil, nil, nil, nil, nil, nil, nil, -288, -288, nil, - -288, -288, -288, -288, -288, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, -288, -288, -288, - -288, -288, -288, -288, -288, -288, -288, -288, -288, -288, - -288, nil, nil, -288, -288, -288, nil, nil, -288, nil, - 264, -288, nil, nil, -288, -288, nil, -288, nil, -288, - nil, -288, nil, -288, -288, -288, -288, -288, -288, -288, - -243, -288, nil, -288, nil, nil, nil, -243, -243, -243, - nil, nil, -243, -243, -243, nil, -243, -288, -288, nil, - -288, nil, -288, nil, nil, -243, -243, -243, nil, nil, - nil, nil, nil, nil, nil, nil, -243, -243, nil, -243, - -243, -243, -243, -243, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, -243, -243, -243, -243, - -243, -243, -243, -243, -243, -243, -243, -243, -243, -243, - nil, nil, -243, -243, -243, nil, nil, -243, nil, 255, - -243, nil, nil, -243, -243, nil, -243, nil, -243, nil, - -243, nil, -243, -243, -243, -243, -243, -243, -243, -243, - -243, -243, -243, nil, nil, nil, -243, -243, -243, nil, - nil, -243, -243, -243, nil, -243, -243, -243, nil, -243, - nil, -243, nil, nil, nil, -243, nil, nil, nil, nil, - nil, nil, nil, nil, nil, -243, -243, nil, -243, -243, - -243, -243, -243, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, -243, nil, nil, nil, nil, nil, - nil, -243, -243, -243, nil, nil, -243, -243, -243, nil, - -243, nil, nil, nil, nil, nil, -243, nil, nil, nil, - -243, nil, nil, -243, nil, nil, nil, nil, 255, -243, - -243, -243, nil, -243, -243, -243, -243, -243, nil, nil, - nil, nil, nil, 398, 402, nil, nil, 399, nil, nil, - nil, -243, nil, nil, nil, 151, 152, nil, 148, 130, - 131, 132, 139, 136, 138, -243, nil, 133, 134, nil, - -243, -243, 153, 154, 140, 141, nil, nil, -243, nil, - nil, 255, nil, 255, -243, nil, nil, nil, nil, 145, - 144, nil, 129, 150, 147, 146, 142, 143, 137, 135, - 127, 149, 128, nil, nil, 155, -243, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - -243, nil, nil, nil, nil, -243, 166, 177, 167, 190, - 163, 183, 173, 172, 193, 194, 188, 171, 170, 165, - 191, 195, 196, 175, 164, 178, 182, 184, 176, 169, - nil, nil, nil, 185, 192, 187, 186, 179, 189, 174, - 162, 181, 180, nil, nil, nil, nil, nil, 161, 168, - 159, 160, 156, 157, 158, 118, 120, 117, nil, 119, - nil, nil, nil, nil, nil, nil, nil, 151, 152, nil, - 148, 130, 131, 132, 139, 136, 138, nil, nil, 133, - 134, nil, nil, nil, 153, 154, 140, 141, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 145, 144, nil, 129, 150, 147, 146, 142, 143, - 137, 135, 127, 149, 128, nil, nil, 155, 86, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 85, - 166, 177, 167, 190, 163, 183, 173, 172, 193, 194, - 188, 171, 170, 165, 191, 195, 196, 175, 164, 178, - 182, 184, 176, 169, nil, nil, nil, 185, 192, 187, - 186, 179, 189, 174, 162, 181, 180, nil, nil, nil, - nil, nil, 161, 168, 159, 160, 156, 157, 158, 118, - 120, nil, nil, 119, nil, nil, nil, nil, nil, nil, - nil, 151, 152, nil, 148, 130, 131, 132, 139, 136, - 138, nil, nil, 133, 134, nil, nil, nil, 153, 154, - 140, 141, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 145, 144, nil, 129, 150, - 147, 146, 142, 143, 137, 135, 127, 149, 128, nil, - nil, 155, 86, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 85, 166, 177, 167, 190, 163, 183, - 173, 172, 193, 194, 188, 171, 170, 165, 191, 195, - 196, 175, 164, 178, 182, 184, 176, 169, nil, nil, - nil, 185, 192, 187, 186, 179, 189, 174, 162, 181, - 180, nil, nil, nil, nil, nil, 161, 168, 159, 160, - 156, 157, 158, 118, 120, nil, nil, 119, nil, nil, - nil, nil, nil, nil, nil, 151, 152, nil, 148, 130, - 131, 132, 139, 136, 138, nil, nil, 133, 134, nil, - nil, nil, 153, 154, 140, 141, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 145, - 144, nil, 129, 150, 147, 146, 142, 143, 137, 135, - 127, 149, 128, nil, nil, 155, 86, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 85, 166, 177, - 167, 190, 163, 183, 173, 172, 193, 194, 188, 171, - 170, 165, 191, 195, 196, 175, 164, 178, 182, 184, - 176, 169, nil, nil, nil, 185, 192, 187, 186, 179, - 189, 174, 162, 181, 180, nil, nil, nil, nil, nil, - 161, 168, 159, 160, 156, 157, 158, 118, 120, nil, - nil, 119, nil, nil, nil, nil, nil, nil, nil, 151, - 152, nil, 148, 130, 131, 132, 139, 136, 138, nil, - nil, 133, 134, nil, nil, nil, 153, 154, 140, 141, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 145, 144, nil, 129, 150, 147, 146, - 142, 143, 137, 135, 127, 149, 128, nil, nil, 155, - 86, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 85, 166, 177, 167, 190, 163, 183, 173, 172, - 193, 194, 188, 171, 170, 165, 191, 195, 196, 175, - 164, 178, 182, 184, 176, 169, nil, nil, nil, 185, - 192, 187, 359, 358, 360, 357, 162, 181, 180, nil, - nil, nil, nil, nil, 161, 168, 159, 160, 354, 355, - 356, 352, 120, 91, 90, 353, nil, 93, nil, nil, - nil, nil, nil, 151, 152, nil, 148, 130, 131, 132, - 139, 136, 138, nil, nil, 133, 134, nil, nil, nil, - 153, 154, 140, 141, nil, nil, nil, nil, nil, 364, - nil, nil, nil, nil, nil, nil, nil, 145, 144, nil, - 129, 150, 147, 146, 142, 143, 137, 135, 127, 149, - 128, nil, nil, 155, 166, 177, 167, 190, 163, 183, - 173, 172, 193, 194, 188, 171, 170, 165, 191, 195, - 196, 175, 164, 178, 182, 184, 176, 169, nil, nil, - nil, 185, 192, 187, 186, 179, 189, 174, 162, 181, - 180, nil, nil, nil, nil, nil, 161, 168, 159, 160, - 156, 157, 158, 118, 120, nil, nil, 119, nil, nil, - nil, nil, nil, nil, nil, 151, 152, nil, 148, 130, - 131, 132, 139, 136, 138, nil, nil, 133, 134, nil, - nil, nil, 153, 154, 140, 141, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 145, - 144, nil, 129, 150, 147, 146, 142, 143, 137, 135, - 127, 149, 128, 405, 409, 155, nil, 404, nil, nil, - nil, nil, nil, nil, nil, 151, 152, nil, 148, 130, - 131, 132, 139, 136, 138, nil, nil, 133, 134, nil, - nil, nil, 153, 154, 140, 141, nil, nil, nil, nil, - nil, 255, nil, nil, nil, nil, nil, nil, nil, 145, - 144, nil, 129, 150, 147, 146, 142, 143, 137, 135, - 127, 149, 128, 460, 402, 155, nil, 461, nil, nil, - nil, nil, nil, nil, nil, 151, 152, nil, 148, 130, - 131, 132, 139, 136, 138, nil, nil, 133, 134, nil, - nil, nil, 153, 154, 140, 141, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 145, - 144, nil, 129, 150, 147, 146, 142, 143, 137, 135, - 127, 149, 128, 460, 402, 155, nil, 461, nil, nil, - nil, nil, nil, nil, nil, 151, 152, nil, 148, 130, - 131, 132, 139, 136, 138, nil, nil, 133, 134, nil, - nil, nil, 153, 154, 140, 141, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 145, - 144, nil, 129, 150, 147, 146, 142, 143, 137, 135, - 127, 149, 128, 590, 402, 155, nil, 591, nil, nil, - nil, nil, nil, nil, nil, 151, 152, nil, 148, 130, - 131, 132, 139, 136, 138, nil, nil, 133, 134, nil, - nil, nil, 153, 154, 140, 141, nil, nil, nil, nil, - nil, 255, nil, nil, nil, nil, nil, nil, nil, 145, - 144, nil, 129, 150, 147, 146, 142, 143, 137, 135, - 127, 149, 128, 592, 409, 155, nil, 593, nil, nil, - nil, nil, nil, nil, nil, 151, 152, nil, 148, 130, - 131, 132, 139, 136, 138, nil, nil, 133, 134, nil, - nil, nil, 153, 154, 140, 141, nil, nil, nil, nil, - nil, 255, nil, nil, nil, nil, nil, nil, nil, 145, - 144, nil, 129, 150, 147, 146, 142, 143, 137, 135, - 127, 149, 128, 622, 402, 155, nil, 623, nil, nil, - nil, nil, nil, nil, nil, 151, 152, nil, 148, 130, - 131, 132, 139, 136, 138, nil, nil, 133, 134, nil, - nil, nil, 153, 154, 140, 141, nil, nil, nil, nil, - nil, 255, nil, nil, nil, nil, nil, nil, nil, 145, - 144, nil, 129, 150, 147, 146, 142, 143, 137, 135, - 127, 149, 128, 625, 409, 155, nil, 626, nil, nil, - nil, nil, nil, nil, nil, 151, 152, nil, 148, 130, - 131, 132, 139, 136, 138, nil, nil, 133, 134, nil, - nil, nil, 153, 154, 140, 141, nil, nil, nil, nil, - nil, 255, nil, nil, nil, nil, nil, nil, nil, 145, - 144, nil, 129, 150, 147, 146, 142, 143, 137, 135, - 127, 149, 128, 590, 402, 155, nil, 591, nil, nil, - nil, nil, nil, nil, nil, 151, 152, nil, 148, 130, - 131, 132, 139, 136, 138, nil, nil, 133, 134, nil, - nil, nil, 153, 154, 140, 141, nil, nil, nil, nil, - nil, 255, nil, nil, nil, nil, nil, nil, nil, 145, - 144, nil, 129, 150, 147, 146, 142, 143, 137, 135, - 127, 149, 128, 592, 409, 155, nil, 593, nil, nil, - nil, nil, nil, nil, nil, 151, 152, nil, 148, 130, - 131, 132, 139, 136, 138, nil, nil, 133, 134, nil, - nil, nil, 153, 154, 140, 141, nil, nil, nil, nil, - nil, 255, nil, nil, nil, nil, nil, nil, nil, 145, - 144, nil, 129, 150, 147, 146, 142, 143, 137, 135, - 127, 149, 128, 677, 402, 155, nil, 678, nil, nil, - nil, nil, nil, nil, nil, 151, 152, nil, 148, 130, - 131, 132, 139, 136, 138, nil, nil, 133, 134, nil, - nil, nil, 153, 154, 140, 141, nil, nil, nil, nil, - nil, 255, nil, nil, nil, nil, nil, nil, nil, 145, - 144, nil, 129, 150, 147, 146, 142, 143, 137, 135, - 127, 149, 128, 679, 409, 155, nil, 680, nil, nil, - nil, nil, nil, nil, nil, 151, 152, nil, 148, 130, - 131, 132, 139, 136, 138, nil, nil, 133, 134, nil, - nil, nil, 153, 154, 140, 141, nil, nil, nil, nil, - nil, 255, nil, nil, nil, nil, nil, nil, nil, 145, - 144, nil, 129, 150, 147, 146, 142, 143, 137, 135, - 127, 149, 128, 682, 409, 155, nil, 683, nil, nil, - nil, nil, nil, nil, nil, 151, 152, nil, 148, 130, - 131, 132, 139, 136, 138, nil, nil, 133, 134, nil, - nil, nil, 153, 154, 140, 141, nil, nil, nil, nil, - nil, 255, nil, nil, nil, nil, nil, nil, nil, 145, - 144, nil, 129, 150, 147, 146, 142, 143, 137, 135, - 127, 149, 128, 460, 402, 155, nil, 461, nil, nil, - nil, nil, nil, nil, nil, 151, 152, nil, 148, 130, - 131, 132, 139, 136, 138, nil, nil, 133, 134, nil, - nil, nil, 153, 154, 140, 141, nil, nil, nil, nil, - nil, 255, nil, nil, nil, nil, nil, nil, nil, 145, - 144, nil, 129, 150, 147, 146, 142, 143, 137, 135, - 127, 149, 128, 917, 402, 155, nil, 918, nil, nil, - nil, nil, nil, nil, nil, 151, 152, nil, 148, 130, - 131, 132, 139, 136, 138, nil, nil, 133, 134, nil, - nil, nil, 153, 154, 140, 141, nil, nil, nil, nil, - nil, 255, nil, nil, nil, nil, nil, nil, nil, 145, - 144, nil, 129, 150, 147, 146, 142, 143, 137, 135, - 127, 149, 128, 919, 409, 155, nil, 920, nil, nil, - nil, nil, nil, nil, nil, 151, 152, nil, 148, 130, - 131, 132, 139, 136, 138, nil, nil, 133, 134, nil, - nil, nil, 153, 154, 140, 141, nil, nil, nil, nil, - nil, 255, nil, nil, nil, nil, nil, nil, nil, 145, - 144, nil, 129, 150, 147, 146, 142, 143, 137, 135, - 127, 149, 128, 939, 409, 155, nil, 938, nil, nil, - nil, nil, nil, nil, nil, 151, 152, nil, 148, 130, - 131, 132, 139, 136, 138, nil, nil, 133, 134, nil, - nil, nil, 153, 154, 140, 141, nil, nil, nil, nil, - nil, 255, nil, nil, nil, nil, nil, nil, nil, 145, - 144, nil, 129, 150, 147, 146, 142, 143, 137, 135, - 127, 149, 128, nil, nil, 155, 231, 235, 240, 241, - 242, 237, 239, 247, 248, 243, 244, nil, 224, 225, - nil, nil, 245, 246, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 228, nil, - 234, nil, 230, 229, 226, 227, 238, 236, 232, nil, - 233, nil, 231, 235, 240, 241, 242, 237, 239, 247, - 248, 243, 244, nil, 224, 225, nil, 249, 245, 246, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 228, nil, 234, nil, 230, 229, - 226, 227, 238, 236, 232, nil, 233, nil, 231, 235, - 240, 241, 242, 237, 239, 247, 248, 243, 244, nil, - 224, 225, nil, 249, 245, 246, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 228, nil, 234, nil, 230, 229, 226, 227, 238, 236, - 232, nil, 233, nil, 231, 235, 240, 241, 242, 237, - 239, 247, 248, 243, 244, nil, 224, 225, nil, 249, - 245, 246, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 228, nil, 234, nil, - 230, 229, 226, 227, 238, 236, 232, nil, 233, nil, - 231, 235, 240, 241, 242, 237, 239, 247, 248, 243, - 244, nil, 224, 225, nil, 249, 245, 246, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 228, nil, 234, nil, 230, 229, 226, 227, - 238, 236, 232, nil, 233, nil, 231, 235, 240, 241, - 242, 237, 239, 247, 248, 243, 244, nil, 224, 225, - nil, 249, 245, 246, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 228, nil, - 234, nil, 230, 229, 226, 227, 238, 236, 232, nil, - 233, nil, 231, 235, 240, 241, 242, 237, 239, 247, - 248, 243, 244, nil, 224, 225, nil, 249, 245, 246, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 228, nil, 234, nil, 230, 229, - 226, 227, 238, 236, 232, nil, 233, nil, 231, 235, - 240, 241, 242, 237, 239, 247, 248, 243, 244, nil, - 224, 225, nil, 249, 245, 246, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 228, nil, 234, nil, 230, 229, 226, 227, 238, 236, - 232, nil, 233, nil, 231, 235, 240, 241, 242, 237, - 239, 247, 248, 243, 244, nil, 224, 225, nil, 249, - 245, 246, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 228, nil, 234, nil, - 230, 229, 226, 227, 238, 236, 232, nil, 233, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 249 ] - -racc_action_check = [ - 89, 0, 0, 0, 0, 0, 0, 89, 89, 89, - 0, 0, 89, 89, 89, 0, 89, 0, 0, 0, - 0, 0, 0, 0, 89, 58, 89, 89, 89, 0, - 0, 0, 0, 0, 0, 0, 89, 89, 0, 89, - 89, 89, 89, 89, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 347, 0, 0, 0, - 326, 0, 0, 0, 0, 0, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 1, 19, 89, 89, 89, 0, 89, 89, 0, 333, - 89, 0, 0, 89, 89, 0, 89, 0, 89, 370, - 89, 0, 89, 89, 89, 89, 89, 89, 89, 0, - 89, 58, 89, 334, 0, 0, 0, 0, 19, 0, - 0, 854, 337, 854, 0, 0, 89, 89, 89, 89, - 92, 89, 0, 89, 0, 89, 532, 92, 92, 92, - 214, 15, 92, 92, 92, 524, 92, 343, 327, 622, - 7, 343, 675, 24, 92, 434, 92, 92, 92, 643, - 24, 347, 370, 17, 17, 677, 92, 92, 525, 92, - 92, 92, 92, 92, 326, 753, 849, 917, 918, 326, - 678, 347, 544, 544, 15, 940, 347, 434, 3, 214, - 15, 434, 434, 3, 333, 787, 92, 92, 92, 92, - 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, - 458, 10, 92, 92, 92, 622, 92, 92, 334, 12, - 92, 919, 623, 92, 92, 215, 92, 337, 92, 13, - 92, 788, 92, 92, 92, 92, 92, 92, 92, 404, - 92, 532, 92, 16, 458, 524, 404, 404, 404, 467, - 524, 622, 404, 404, 622, 404, 92, 92, 92, 92, - 622, 92, 327, 92, 643, 92, 675, 327, 525, 675, - 677, 675, 544, 525, 215, 404, 404, 544, 404, 404, - 404, 404, 404, 467, 22, 678, 25, 679, 623, 753, - 849, 917, 918, 680, 753, 849, 917, 918, 919, 940, - 787, 40, 40, 36, 940, 404, 404, 404, 404, 404, - 404, 404, 404, 404, 404, 404, 404, 404, 404, 422, - 422, 404, 404, 404, 623, 404, 37, 623, 39, 404, - 217, 788, 404, 623, 428, 919, 788, 404, 44, 404, - 919, 404, 404, 404, 404, 404, 404, 404, 405, 404, - 25, 404, 679, 550, 550, 405, 405, 405, 680, 633, - 633, 405, 405, 590, 405, 404, 404, 468, 404, 37, - 404, 296, 25, 405, 404, 37, 605, 746, 317, 217, - 617, 317, 103, 428, 405, 405, 617, 405, 405, 405, - 405, 405, 679, 773, 197, 773, 773, 773, 680, 773, - 892, 468, 892, 892, 892, 216, 892, 218, 278, 422, - 605, 219, 590, 278, 405, 405, 405, 405, 405, 405, - 405, 405, 405, 405, 405, 405, 405, 405, 223, 746, - 405, 405, 405, 561, 405, 296, 746, 352, 405, 591, - 254, 405, 728, 550, 352, 746, 405, 38, 405, 633, - 405, 405, 405, 405, 405, 405, 405, 296, 405, 405, - 405, 366, 305, 746, 268, 353, 269, 341, 342, 354, - 272, 773, 353, 592, 405, 405, 354, 405, 892, 405, - 592, 592, 592, 405, 281, 592, 592, 592, 591, 592, - 38, 728, 301, 301, 561, 561, 38, 355, 592, 592, - 592, 592, 117, 561, 355, 305, 625, 117, 117, 592, - 592, 305, 592, 592, 592, 592, 592, 283, 318, 341, - 342, 318, 366, 366, 366, 367, 341, 342, 368, 330, - 356, 341, 342, 369, 330, 341, 342, 356, 284, 592, - 592, 592, 592, 592, 592, 592, 592, 592, 592, 592, - 592, 592, 592, 341, 342, 592, 592, 592, 625, 592, - 592, 371, 285, 592, 398, 625, 592, 592, 682, 592, - 625, 592, 291, 592, 625, 592, 592, 592, 592, 592, - 592, 592, 294, 592, 592, 592, 367, 367, 367, 368, - 368, 368, 625, 295, 369, 369, 369, 300, 399, 592, - 592, 592, 592, 593, 592, 302, 592, 398, 592, 573, - 593, 593, 593, 398, 306, 593, 593, 593, 307, 593, - 682, 14, 371, 371, 371, 453, 357, 682, 14, 593, - 593, 593, 682, 357, 310, 321, 682, 14, 321, 593, - 593, 399, 593, 593, 593, 593, 593, 399, 358, 45, - 325, 325, 573, 359, 682, 358, 45, 453, 573, 360, - 359, 453, 453, 453, 453, 45, 360, 509, 509, 593, - 593, 593, 593, 593, 593, 593, 593, 593, 593, 593, - 593, 593, 593, 76, 213, 593, 593, 593, 288, 593, - 593, 213, 76, 593, 313, 288, 593, 593, 314, 593, - 213, 593, 76, 593, 288, 593, 593, 593, 593, 593, - 593, 593, 319, 593, 435, 593, 320, 644, 362, 644, - 644, 644, 543, 644, 322, 362, 331, 543, 687, 593, - 593, 593, 593, 687, 593, 332, 593, 336, 593, 32, - 32, 32, 32, 32, 32, 338, 435, 693, 32, 32, - 435, 435, 693, 32, 644, 32, 32, 32, 32, 32, - 32, 32, 380, 644, 644, 644, 644, 32, 32, 32, - 32, 32, 32, 32, 554, 554, 32, 386, 554, 554, - 554, 417, 32, 32, 388, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 391, 32, 32, 32, 394, 32, - 32, 32, 32, 32, 417, 417, 417, 417, 417, 417, - 417, 417, 417, 417, 417, 289, 417, 417, 290, 396, - 417, 417, 289, 32, 642, 290, 32, 642, 397, 32, - 32, 289, 406, 32, 290, 32, 417, 414, 417, 32, - 417, 417, 417, 417, 417, 417, 417, 32, 417, 666, - 666, 424, 32, 32, 32, 32, 436, 32, 32, 454, - 437, 292, 32, 32, 438, 417, 53, 417, 292, 439, - 32, 465, 32, 53, 53, 53, 469, 292, 53, 53, - 53, 598, 53, 598, 598, 598, 482, 598, 931, 931, - 483, 454, 53, 53, 53, 454, 454, 454, 454, 486, - 488, 493, 53, 53, 497, 53, 53, 53, 53, 53, - 846, 506, 846, 846, 846, 308, 846, 657, 598, 657, - 657, 657, 308, 657, 521, 526, 527, 598, 598, 598, - 598, 308, 53, 53, 53, 53, 53, 53, 53, 53, - 53, 53, 53, 53, 53, 53, 558, 846, 53, 53, - 53, 335, 564, 53, 657, 570, 53, 574, 335, 53, - 53, 598, 53, 657, 53, 579, 53, 335, 53, 53, - 53, 53, 53, 53, 53, 345, 53, 584, 53, 594, - 492, 596, 345, 610, 612, 619, 621, 492, 624, 627, - 628, 345, 53, 53, 53, 53, 492, 53, 631, 53, - 54, 54, 54, 54, 54, 54, 632, 634, 535, 54, - 54, 637, 638, 641, 54, 535, 54, 54, 54, 54, - 54, 54, 54, 646, 535, 647, 648, 655, 54, 54, - 54, 54, 54, 54, 54, 662, 736, 54, 736, 736, - 736, 665, 736, 54, 54, 668, 54, 54, 54, 54, - 54, 54, 54, 54, 54, 673, 54, 54, 54, 676, - 54, 54, 54, 54, 54, 770, 685, 770, 770, 770, - 690, 770, 707, 767, 712, 767, 767, 767, 730, 767, - 731, 732, 734, 735, 54, 737, 739, 54, 741, 742, - 54, 54, 745, 756, 54, 893, 54, 893, 893, 893, - 54, 893, 770, 692, 761, 692, 692, 692, 54, 692, - 767, 770, 772, 54, 54, 54, 54, 775, 54, 54, - 778, 767, 767, 54, 54, 115, 115, 115, 115, 115, - 115, 54, 893, 54, 115, 115, 781, 790, 794, 115, - 692, 115, 115, 115, 115, 115, 115, 115, 795, 692, - 692, 692, 692, 115, 115, 115, 115, 115, 115, 115, - 798, 869, 115, 869, 869, 869, 799, 869, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, - 812, 115, 115, 115, 813, 115, 115, 115, 115, 115, - 844, 819, 844, 844, 844, 827, 844, 833, 810, 834, - 810, 810, 810, 835, 810, 838, 839, 841, 843, 115, - 845, 851, 115, 852, 857, 115, 115, 862, 863, 115, - 928, 115, 928, 928, 928, 115, 928, 844, 762, 864, - 762, 762, 762, 115, 762, 810, 844, 865, 115, 115, - 115, 115, 867, 115, 115, 871, 810, 810, 115, 115, - 199, 199, 199, 199, 199, 199, 115, 928, 115, 199, - 199, 873, 878, 879, 199, 762, 199, 199, 199, 199, - 199, 199, 199, 894, 762, 762, 762, 762, 199, 199, - 199, 199, 199, 199, 199, 916, 923, 199, 6, 6, - 6, 6, 6, 199, 199, 924, 199, 199, 199, 199, - 199, 199, 199, 199, 199, 925, 199, 199, 199, 926, - 199, 199, 199, 199, 199, 930, 927, 930, 930, 930, - 929, 930, 932, 884, 933, 884, 884, 884, 934, 884, - 935, 936, 937, 938, 199, 939, 947, 199, 956, 957, - 199, 199, 958, nil, 199, 946, 199, 946, 946, 946, - 199, 946, 930, 764, 824, 764, 764, 764, 199, 764, - 884, 824, nil, 199, 199, 199, 199, nil, 199, 199, - 824, 884, 884, 199, 199, 222, 222, 222, 222, 222, - 222, 199, 946, 199, 222, 222, nil, nil, nil, 222, - 764, 222, 222, 222, 222, 222, 222, 222, nil, 764, - 764, 764, 764, 222, 222, 222, 222, 222, 222, 222, - nil, nil, 222, 279, 279, 279, 279, 279, 222, 222, - nil, 222, 222, 222, 222, 222, 222, 222, 222, 222, - nil, 222, 222, 222, nil, 222, 222, 222, 222, 222, - nil, nil, 825, 481, 481, 481, 481, 481, 886, 825, - 886, 886, 886, nil, 886, nil, 626, 826, 825, 222, - 828, nil, 222, 626, 826, 222, 222, 828, 626, 222, - 870, 222, 626, 826, nil, 222, 828, 870, 805, nil, - 805, 805, 805, 222, 805, 886, 870, nil, 222, 222, - 222, 222, nil, 222, 222, nil, 886, 886, 222, 222, - 282, 282, 282, 282, 282, 282, 222, nil, 222, 282, - 282, nil, nil, nil, 282, 805, 282, 282, 282, 282, - 282, 282, 282, nil, 805, 805, 805, 805, 282, 282, - 282, 282, 282, 282, 282, nil, nil, 282, 616, 616, - 616, 616, 616, 282, 282, nil, 282, 282, 282, 282, - 282, 282, 282, 282, 282, nil, 282, 282, 282, nil, - 282, 282, 282, 282, 282, nil, nil, 877, nil, nil, - nil, nil, nil, 888, 877, 888, 888, 888, nil, 888, - nil, 683, nil, 877, 282, nil, nil, 282, 683, nil, - 282, 282, nil, 683, 282, nil, 282, 683, nil, nil, - 282, nil, nil, 807, nil, 807, 807, 807, 282, 807, - 888, nil, nil, 282, 282, 282, 282, nil, 282, 282, - nil, 888, 888, 282, 282, 287, 287, 287, 287, 287, - 287, 282, nil, 282, 287, 287, nil, nil, nil, 287, - 807, 287, 287, 287, 287, 287, 287, 287, nil, 807, - 807, 807, 807, 287, 287, 287, 287, 287, 287, 287, - nil, nil, 287, nil, nil, nil, nil, 393, 287, 287, - nil, 287, 287, 287, 287, 287, 287, 287, 287, 287, - nil, 287, 287, 287, nil, 287, 287, 287, 287, 287, - 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, - 393, 920, 393, 393, nil, nil, 393, 393, 920, 287, - nil, nil, 287, 920, nil, 287, 287, 920, nil, 287, - nil, 287, 393, nil, 393, 287, 393, 393, 393, 393, - 393, 393, 393, 287, 393, nil, nil, nil, 287, 287, - 287, 287, nil, 287, 287, nil, nil, nil, 287, 287, - nil, 393, 409, nil, nil, nil, 287, nil, 287, 409, - 409, 409, nil, nil, 409, 409, 409, 519, 409, 519, - 519, 519, nil, 519, nil, nil, nil, 409, 409, 409, - 409, nil, nil, nil, nil, nil, nil, nil, 409, 409, - nil, 409, 409, 409, 409, 409, nil, nil, nil, nil, - nil, nil, nil, nil, 519, 519, nil, nil, nil, nil, - nil, nil, nil, 519, 519, 519, 519, nil, 409, 409, - 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, - 409, 409, nil, nil, 409, 409, 409, nil, nil, 409, - nil, nil, 409, nil, nil, 409, 409, nil, 409, nil, - 409, nil, 409, nil, 409, 409, 409, 409, 409, 409, - 409, 410, 409, 409, 409, nil, nil, nil, 410, 410, - 410, nil, nil, 410, 410, 410, 444, 410, 409, 409, - 409, 409, nil, 409, nil, 409, 410, 410, 410, 410, - nil, nil, 444, 444, nil, nil, nil, 410, 410, nil, - 410, 410, 410, 410, 410, nil, nil, nil, 444, nil, - 444, nil, 444, 444, 444, 444, nil, nil, 444, nil, - 444, nil, nil, nil, nil, nil, nil, 410, 410, 410, - 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, - 410, nil, nil, 410, 410, 410, nil, nil, 410, nil, - nil, 410, nil, nil, 410, 410, nil, 410, nil, 410, - nil, 410, nil, 410, 410, 410, 410, 410, 410, 410, - nil, 410, 410, 410, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 410, 410, 410, - 410, nil, 410, nil, 410, 520, 520, 520, 520, 520, - 520, nil, nil, nil, 520, 520, nil, nil, nil, 520, - nil, 520, 520, 520, 520, 520, 520, 520, nil, nil, - nil, nil, nil, 520, 520, 520, 520, 520, 520, 520, - nil, nil, 520, nil, nil, nil, nil, nil, 520, 520, - nil, 520, 520, 520, 520, 520, 520, 520, 520, 520, - nil, 520, 520, 520, nil, 520, 520, 520, 520, 520, - nil, nil, nil, nil, nil, nil, nil, nil, 907, nil, - 907, 907, 907, nil, 907, nil, nil, nil, nil, 520, - nil, nil, 520, nil, nil, 520, 520, nil, nil, 520, - nil, 520, nil, nil, nil, 520, nil, nil, 881, nil, - 881, 881, 881, 520, 881, 907, nil, nil, 520, 520, - 520, 520, nil, 520, 520, nil, 907, 907, 520, 520, - 523, 523, 523, 523, 523, 523, 520, nil, 520, 523, - 523, nil, nil, nil, 523, 881, 523, 523, 523, 523, - 523, 523, 523, nil, 881, 881, 881, 881, 523, 523, - 523, 523, 523, 523, 523, nil, nil, 523, nil, nil, - nil, nil, nil, 523, 523, nil, 523, 523, 523, 523, - 523, 523, 523, 523, 523, nil, 523, 523, 523, nil, - 523, 523, 523, 523, 523, nil, nil, nil, nil, nil, - nil, nil, nil, 909, nil, 909, 909, 909, nil, 909, - nil, nil, nil, nil, 523, nil, nil, 523, nil, nil, - 523, 523, nil, nil, 523, nil, 523, nil, nil, nil, - 523, nil, nil, 904, nil, 904, 904, 904, 523, 904, - 909, nil, nil, 523, 523, 523, 523, nil, 523, 523, - nil, 909, 909, 523, 523, 545, 545, 545, 545, 545, - 545, 523, nil, 523, 545, 545, nil, nil, nil, 545, - 904, 545, 545, 545, 545, 545, 545, 545, nil, 904, - 904, 904, 904, 545, 545, 545, 545, 545, 545, 545, - nil, nil, 545, nil, nil, nil, nil, nil, 545, 545, - nil, 545, 545, 545, 545, 545, 545, 545, 545, 545, - nil, 545, 545, 545, nil, 545, 545, 545, 545, 545, - nil, nil, nil, nil, nil, nil, nil, 942, nil, 942, - 942, 942, nil, 942, nil, nil, nil, nil, nil, 545, - nil, nil, 545, nil, nil, 545, 545, nil, nil, 545, - nil, 545, nil, nil, nil, 545, 952, nil, 952, 952, - 952, nil, 952, 545, 942, nil, nil, nil, 545, 545, - 545, 545, nil, 545, 545, 942, 942, nil, 545, 545, - 600, 600, 600, 600, 600, 600, 545, nil, 545, 600, - 600, nil, nil, 952, 600, nil, 600, 600, 600, 600, - 600, 600, 600, nil, 952, 952, nil, nil, 600, 600, - 600, 600, 600, 600, 600, nil, nil, 600, nil, nil, - nil, nil, nil, 600, 600, nil, 600, 600, 600, 600, - 600, 600, 600, 600, 600, nil, 600, 600, 600, nil, - 600, 600, 600, 600, 600, 432, 432, 432, 432, 432, - 432, 432, 432, 432, 432, 432, nil, 432, 432, nil, - nil, 432, 432, nil, 600, nil, nil, 600, nil, nil, - 600, 600, nil, nil, 600, nil, 600, 432, nil, 432, - 600, 432, 432, 432, 432, 432, 432, 432, 600, 432, - nil, nil, nil, 600, 600, 600, 600, nil, 600, 600, - nil, nil, nil, 600, 600, 607, 607, 607, 607, 607, - 607, 600, nil, 600, 607, 607, nil, nil, nil, 607, - nil, 607, 607, 607, 607, 607, 607, 607, nil, nil, - nil, nil, nil, 607, 607, 607, 607, 607, 607, 607, - nil, nil, 607, nil, nil, nil, nil, nil, 607, 607, - nil, 607, 607, 607, 607, 607, 607, 607, 607, 607, - nil, 607, 607, 607, nil, 607, 607, 607, 607, 607, - 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, - 433, nil, 433, 433, nil, nil, 433, 433, nil, 607, - nil, nil, 607, nil, nil, 607, 607, nil, nil, 607, - nil, 607, 433, nil, 433, 607, 433, 433, 433, 433, - 433, 433, 433, 607, 433, nil, nil, nil, 607, 607, - 607, 607, nil, 607, 607, nil, nil, nil, 607, 607, - 608, 608, 608, 608, 608, 608, 607, nil, 607, 608, - 608, nil, nil, nil, 608, nil, 608, 608, 608, 608, - 608, 608, 608, nil, nil, nil, nil, nil, 608, 608, - 608, 608, 608, 608, 608, nil, nil, 608, nil, nil, - nil, nil, nil, 608, 608, nil, 608, 608, 608, 608, - 608, 608, 608, 608, 608, nil, 608, 608, 608, nil, - 608, 608, 608, 608, 608, 443, 443, 443, 443, 443, - 443, 443, nil, nil, 443, 443, nil, nil, nil, nil, - nil, 443, 443, nil, 608, nil, nil, 608, nil, nil, - 608, 608, nil, nil, 608, nil, 608, 443, nil, 443, - 608, 443, 443, 443, 443, 443, 443, 443, 608, 443, - nil, nil, nil, 608, 608, 608, 608, nil, 608, 608, - nil, nil, nil, 608, 608, 636, 636, 636, 636, 636, - 636, 608, nil, 608, 636, 636, nil, nil, nil, 636, - nil, 636, 636, 636, 636, 636, 636, 636, nil, nil, - nil, nil, nil, 636, 636, 636, 636, 636, 636, 636, - nil, nil, 636, nil, nil, nil, nil, nil, 636, 636, - nil, 636, 636, 636, 636, 636, 636, 636, 636, 636, - nil, 636, 636, 636, nil, 636, 636, 636, 636, 636, - 445, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 445, 445, nil, 636, - nil, nil, 636, nil, nil, 636, 636, nil, nil, 636, - nil, 636, 445, nil, 445, 636, 445, 445, 445, 445, - nil, nil, 445, 636, 445, nil, nil, nil, 636, 636, - 636, 636, nil, 636, 636, nil, nil, nil, 636, 636, - 686, 686, 686, 686, 686, 686, 636, nil, 636, 686, - 686, nil, nil, nil, 686, nil, 686, 686, 686, 686, - 686, 686, 686, nil, nil, nil, nil, nil, 686, 686, - 686, 686, 686, 686, 686, nil, nil, 686, nil, nil, - nil, nil, nil, 686, 686, nil, 686, 686, 686, 686, - 686, 686, 686, 686, 686, nil, 686, 686, 686, nil, - 686, 686, 686, 686, 686, 446, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 446, 446, nil, 686, nil, nil, 686, nil, nil, - 686, 686, nil, nil, 686, nil, 686, 446, nil, 446, - 686, 446, 446, 446, 446, nil, nil, 446, 686, 446, - nil, nil, nil, 686, 686, 686, 686, nil, 686, 686, - nil, nil, nil, 686, 686, 691, 691, 691, 691, 691, - 691, 686, nil, 686, 691, 691, nil, nil, nil, 691, - nil, 691, 691, 691, 691, 691, 691, 691, nil, nil, - nil, nil, nil, 691, 691, 691, 691, 691, 691, 691, - nil, nil, 691, nil, nil, nil, nil, nil, 691, 691, - nil, 691, 691, 691, 691, 691, 691, 691, 691, 691, - nil, 691, 691, 691, nil, 691, 691, 691, 691, 691, - 447, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 447, 447, nil, 691, - nil, nil, 691, nil, nil, 691, 691, nil, nil, 691, - nil, 691, 447, nil, 447, 691, 447, 447, 447, 447, - nil, nil, 447, 691, 447, nil, nil, nil, 691, 691, - 691, 691, nil, 691, 691, nil, nil, nil, 691, 691, - 701, 701, 701, 701, 701, 701, 691, nil, 691, 701, - 701, nil, nil, nil, 701, nil, 701, 701, 701, 701, - 701, 701, 701, nil, nil, nil, nil, nil, 701, 701, - 701, 701, 701, 701, 701, nil, nil, 701, nil, nil, - nil, nil, nil, 701, 701, nil, 701, 701, 701, 701, - 701, 701, 701, 701, 701, nil, 701, 701, 701, nil, - 701, 701, 701, 701, 701, 448, 448, 448, 448, 448, - 448, 448, nil, nil, 448, 448, nil, nil, nil, nil, - nil, 448, 448, nil, 701, nil, nil, 701, nil, nil, - 701, 701, nil, nil, 701, nil, 701, 448, nil, 448, - 701, 448, 448, 448, 448, 448, 448, 448, 701, 448, - nil, nil, nil, 701, 701, 701, 701, nil, 701, 701, - nil, nil, nil, 701, 701, 740, 740, 740, 740, 740, - 740, 701, nil, 701, 740, 740, nil, nil, nil, 740, - nil, 740, 740, 740, 740, 740, 740, 740, nil, nil, - nil, nil, nil, 740, 740, 740, 740, 740, 740, 740, - nil, nil, 740, nil, nil, nil, nil, nil, 740, 740, - nil, 740, 740, 740, 740, 740, 740, 740, 740, 740, - nil, 740, 740, 740, nil, 740, 740, 740, 740, 740, - 449, 449, 449, 449, 449, 449, 449, nil, nil, 449, - 449, nil, nil, nil, nil, nil, 449, 449, nil, 740, - nil, nil, 740, nil, nil, 740, 740, nil, nil, 740, - nil, 740, 449, nil, 449, 740, 449, 449, 449, 449, - 449, 449, 449, 740, 449, nil, nil, nil, 740, 740, - 740, 740, nil, 740, 740, nil, nil, nil, 740, 740, - 750, 750, 750, 750, 750, 750, 740, nil, 740, 750, - 750, nil, nil, nil, 750, nil, 750, 750, 750, 750, - 750, 750, 750, nil, nil, nil, nil, nil, 750, 750, - 750, 750, 750, 750, 750, nil, nil, 750, nil, nil, - nil, nil, nil, 750, 750, nil, 750, 750, 750, 750, - 750, 750, 750, 750, 750, nil, 750, 750, 750, nil, - 750, 750, 750, 750, 750, 450, 450, 450, 450, 450, - 450, 450, nil, nil, 450, 450, nil, nil, nil, nil, - nil, 450, 450, nil, 750, nil, nil, 750, nil, nil, - 750, 750, nil, nil, 750, nil, 750, 450, nil, 450, - 750, 450, 450, 450, 450, 450, 450, 450, 750, 450, - nil, nil, nil, 750, 750, 750, 750, nil, 750, 750, - nil, nil, nil, 750, 750, 782, 782, 782, 782, 782, - 782, 750, nil, 750, 782, 782, nil, nil, nil, 782, - nil, 782, 782, 782, 782, 782, 782, 782, nil, nil, - nil, nil, nil, 782, 782, 782, 782, 782, 782, 782, - nil, nil, 782, nil, nil, nil, nil, nil, 782, 782, - nil, 782, 782, 782, 782, 782, 782, 782, 782, 782, - nil, 782, 782, 782, nil, 782, 782, 782, 782, 782, - 451, 451, 451, 451, 451, 451, 451, nil, nil, 451, - 451, nil, nil, nil, nil, nil, 451, 451, nil, 782, - nil, nil, 782, nil, nil, 782, 782, nil, nil, 782, - nil, 782, 451, nil, 451, 782, 451, 451, 451, 451, - 451, 451, 451, 782, 451, nil, nil, nil, 782, 782, - 782, 782, nil, 782, 782, nil, nil, nil, 782, 782, - 783, 783, 783, 783, 783, 783, 782, nil, 782, 783, - 783, nil, nil, nil, 783, nil, 783, 783, 783, 783, - 783, 783, 783, nil, nil, nil, nil, nil, 783, 783, - 783, 783, 783, 783, 783, nil, nil, 783, nil, nil, - nil, nil, nil, 783, 783, nil, 783, 783, 783, 783, - 783, 783, 783, 783, 783, nil, 783, 783, 783, nil, - 783, 783, 783, 783, 783, 452, 452, 452, 452, 452, - 452, 452, nil, nil, 452, 452, nil, nil, nil, nil, - nil, 452, 452, nil, 783, nil, nil, 783, nil, nil, - 783, 783, nil, nil, 783, nil, 783, 452, nil, 452, - 783, 452, 452, 452, 452, 452, 452, 452, 783, 452, - nil, nil, nil, 783, 783, 783, 783, nil, 783, 783, - nil, nil, nil, 783, 783, 786, 786, 786, 786, 786, - 786, 783, nil, 783, 786, 786, nil, nil, nil, 786, - nil, 786, 786, 786, 786, 786, 786, 786, nil, nil, - nil, nil, nil, 786, 786, 786, 786, 786, 786, 786, - nil, nil, 786, nil, nil, nil, nil, nil, 786, 786, - nil, 786, 786, 786, 786, 786, 786, 786, 786, 786, - nil, 786, 786, 786, nil, 786, 786, 786, 786, 786, - 455, 455, 455, 455, 455, 455, 455, nil, nil, 455, - 455, nil, nil, nil, nil, nil, 455, 455, nil, 786, - nil, nil, 786, nil, nil, 786, 786, nil, nil, 786, - nil, 786, 455, nil, 455, 786, 455, 455, 455, 455, - 455, 455, 455, 786, 455, nil, nil, nil, 786, 786, - 786, 786, nil, 786, 786, nil, nil, nil, 786, 786, - 792, 792, 792, 792, 792, 792, 786, nil, 786, 792, - 792, nil, nil, nil, 792, nil, 792, 792, 792, 792, - 792, 792, 792, nil, nil, nil, nil, nil, 792, 792, - 792, 792, 792, 792, 792, nil, nil, 792, nil, nil, - nil, nil, nil, 792, 792, nil, 792, 792, 792, 792, - 792, 792, 792, 792, 792, nil, 792, 792, 792, nil, - 792, 792, 792, 792, 792, 456, 456, 456, 456, 456, - 456, 456, 456, nil, 456, 456, nil, nil, nil, nil, - nil, 456, 456, nil, 792, nil, nil, 792, nil, nil, - 792, 792, nil, nil, 792, nil, 792, 456, nil, 456, - 792, 456, 456, 456, 456, 456, 456, 456, 792, 456, - nil, nil, nil, 792, 792, 792, 792, nil, 792, 792, - nil, nil, nil, 792, 792, 823, 823, 823, 823, 823, - 823, 792, nil, 792, 823, 823, nil, nil, nil, 823, - nil, 823, 823, 823, 823, 823, 823, 823, nil, nil, - nil, nil, nil, 823, 823, 823, 823, 823, 823, 823, - nil, nil, 823, nil, nil, nil, nil, nil, 823, 823, - nil, 823, 823, 823, 823, 823, 823, 823, 823, 823, - nil, 823, 823, 823, nil, 823, 823, 823, 823, 823, - 440, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 440, 440, nil, 823, - nil, nil, 823, nil, nil, 823, 823, nil, nil, 823, - nil, 823, 440, nil, 440, 823, 440, 440, 440, 440, - nil, nil, nil, 823, nil, nil, nil, nil, 823, 823, - 823, 823, nil, 823, 823, nil, nil, nil, 823, 823, - 831, 831, 831, 831, 831, 831, 823, nil, 823, 831, - 831, nil, nil, nil, 831, nil, 831, 831, 831, 831, - 831, 831, 831, nil, nil, nil, nil, nil, 831, 831, - 831, 831, 831, 831, 831, nil, nil, 831, nil, nil, - nil, nil, nil, 831, 831, nil, 831, 831, 831, 831, - 831, 831, 831, 831, 831, nil, 831, 831, 831, nil, - 831, 831, 831, 831, 831, 441, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 441, 441, nil, 831, nil, nil, 831, nil, nil, - 831, 831, nil, nil, 831, nil, 831, 441, nil, 441, - 831, 441, 441, 441, 441, nil, nil, nil, 831, nil, - nil, nil, nil, 831, 831, 831, 831, nil, 831, 831, - nil, nil, nil, 831, 831, 832, 832, 832, 832, 832, - 832, 831, nil, 831, 832, 832, nil, nil, nil, 832, - nil, 832, 832, 832, 832, 832, 832, 832, nil, nil, - nil, nil, nil, 832, 832, 832, 832, 832, 832, 832, - nil, nil, 832, nil, nil, nil, nil, nil, 832, 832, - nil, 832, 832, 832, 832, 832, 832, 832, 832, 832, - nil, 832, 832, 832, nil, 832, 832, 832, 832, 832, - 442, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 442, 442, nil, 832, - nil, nil, 832, nil, nil, 832, 832, nil, nil, 832, - nil, 832, 442, nil, nil, 832, 442, 442, 442, 442, - nil, nil, nil, 832, nil, nil, nil, nil, 832, 832, - 832, 832, nil, 832, 832, nil, nil, nil, 832, 832, - 895, 895, 895, 895, 895, 895, 832, nil, 832, 895, - 895, nil, nil, nil, 895, nil, 895, 895, 895, 895, - 895, 895, 895, nil, nil, nil, nil, nil, 895, 895, - 895, 895, 895, 895, 895, nil, nil, 895, nil, nil, - nil, nil, nil, 895, 895, nil, 895, 895, 895, 895, - 895, 895, 895, 895, 895, nil, 895, 895, 895, nil, - 895, 895, 895, 895, 895, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 895, nil, nil, 895, nil, nil, - 895, 895, nil, nil, 895, nil, 895, nil, nil, nil, - 895, nil, nil, nil, nil, nil, nil, nil, 895, nil, - nil, nil, nil, 895, 895, 895, 895, nil, 895, 895, - nil, nil, nil, 895, 895, 901, 901, 901, 901, 901, - 901, 895, nil, 895, 901, 901, nil, nil, nil, 901, - nil, 901, 901, 901, 901, 901, 901, 901, nil, nil, - nil, nil, nil, 901, 901, 901, 901, 901, 901, 901, - nil, nil, 901, nil, nil, nil, nil, nil, 901, 901, - nil, 901, 901, 901, 901, 901, 901, 901, 901, 901, - nil, 901, 901, 901, nil, 901, 901, 901, 901, 901, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 901, - nil, nil, 901, nil, nil, 901, 901, nil, nil, 901, - nil, 901, nil, nil, nil, 901, nil, nil, nil, nil, - nil, nil, nil, 901, nil, nil, nil, nil, 901, 901, - 901, 901, nil, 901, 901, nil, nil, nil, 901, 901, - 903, 903, 903, 903, 903, 903, 901, nil, 901, 903, - 903, nil, nil, nil, 903, nil, 903, 903, 903, 903, - 903, 903, 903, nil, nil, nil, nil, nil, 903, 903, - 903, 903, 903, 903, 903, nil, nil, 903, nil, nil, - nil, nil, nil, 903, 903, nil, 903, 903, 903, 903, - 903, 903, 903, 903, 903, nil, 903, 903, 903, nil, - 903, 903, 903, 903, 903, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 903, nil, nil, 903, nil, nil, - 903, 903, nil, nil, 903, nil, 903, nil, nil, nil, - 903, nil, nil, nil, nil, nil, nil, nil, 903, nil, - nil, nil, nil, 903, 903, 903, 903, nil, 903, 903, - nil, nil, nil, 903, 903, nil, 5, 5, 5, 5, - 5, 903, nil, 903, 5, 5, nil, nil, nil, 5, - nil, 5, 5, 5, 5, 5, 5, 5, nil, nil, - nil, nil, nil, 5, 5, 5, 5, 5, 5, 5, - nil, nil, 5, nil, nil, nil, nil, nil, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - nil, 5, 5, 5, nil, 5, 5, 5, 5, 5, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 5, - nil, nil, 5, nil, nil, 5, 5, nil, nil, 5, - nil, 5, nil, nil, nil, 5, nil, nil, nil, nil, - nil, nil, nil, 5, nil, nil, nil, nil, 5, 5, - 5, 5, nil, 5, 5, nil, nil, nil, 5, 5, - nil, 20, 20, 20, nil, 20, 5, nil, 5, 20, - 20, nil, nil, nil, 20, nil, 20, 20, 20, 20, - 20, 20, 20, nil, nil, nil, nil, nil, 20, 20, - 20, 20, 20, 20, 20, nil, nil, 20, nil, nil, - nil, nil, nil, nil, 20, nil, nil, 20, 20, 20, - 20, 20, 20, 20, 20, nil, 20, 20, 20, nil, - 20, 20, 20, 20, 20, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 20, nil, nil, 20, nil, nil, - 20, 20, nil, nil, 20, nil, nil, nil, nil, nil, - 20, nil, nil, nil, nil, nil, nil, nil, 20, nil, - nil, nil, nil, 20, 20, 20, 20, nil, 20, 20, - nil, nil, nil, 20, 20, nil, 28, 28, 28, nil, - 28, 20, nil, 20, 28, 28, nil, nil, nil, 28, - nil, 28, 28, 28, 28, 28, 28, 28, nil, nil, - nil, nil, nil, 28, 28, 28, 28, 28, 28, 28, - nil, nil, 28, nil, nil, nil, nil, nil, nil, 28, - nil, nil, 28, 28, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 28, nil, 28, 28, 28, 28, 28, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 28, - nil, nil, 28, nil, nil, 28, 28, nil, nil, 28, - nil, 28, nil, 28, nil, 28, nil, nil, nil, nil, - nil, nil, nil, 28, nil, nil, nil, nil, 28, 28, - 28, 28, nil, 28, 28, nil, nil, nil, 28, 28, - nil, 29, 29, 29, nil, 29, 28, nil, 28, 29, - 29, nil, nil, nil, 29, nil, 29, 29, 29, 29, - 29, 29, 29, nil, nil, nil, nil, nil, 29, 29, - 29, 29, 29, 29, 29, nil, nil, 29, nil, nil, - nil, nil, nil, nil, 29, nil, nil, 29, 29, 29, - 29, 29, 29, 29, 29, 29, 29, 29, 29, nil, - 29, 29, 29, 29, 29, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 29, nil, nil, 29, nil, nil, - 29, 29, nil, nil, 29, nil, 29, nil, 29, nil, - 29, nil, nil, nil, nil, nil, nil, nil, 29, nil, - nil, nil, nil, 29, 29, 29, 29, nil, 29, 29, - nil, nil, nil, 29, 29, nil, 30, 30, 30, nil, - 30, 29, nil, 29, 30, 30, nil, nil, nil, 30, - nil, 30, 30, 30, 30, 30, 30, 30, nil, nil, - nil, nil, nil, 30, 30, 30, 30, 30, 30, 30, - nil, nil, 30, nil, nil, nil, nil, nil, nil, 30, - nil, nil, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, nil, 30, 30, 30, 30, 30, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 30, - nil, nil, 30, nil, nil, 30, 30, nil, nil, 30, - nil, 30, nil, 30, nil, 30, nil, nil, nil, nil, - nil, nil, nil, 30, nil, nil, nil, nil, 30, 30, - 30, 30, nil, 30, 30, nil, nil, nil, 30, 30, - nil, 33, 33, 33, nil, 33, 30, nil, 30, 33, - 33, nil, nil, nil, 33, nil, 33, 33, 33, 33, - 33, 33, 33, nil, nil, nil, nil, nil, 33, 33, - 33, 33, 33, 33, 33, nil, nil, 33, nil, nil, - nil, nil, nil, nil, 33, nil, nil, 33, 33, 33, - 33, 33, 33, 33, 33, nil, 33, 33, 33, nil, - 33, 33, nil, 546, 33, 546, 546, 546, nil, 546, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 33, nil, nil, 33, nil, nil, - 33, 33, nil, nil, 33, nil, 33, nil, nil, nil, - 546, 546, nil, nil, nil, nil, nil, nil, nil, 546, - 546, 546, 546, 33, 33, 33, 33, nil, 33, 33, - nil, nil, nil, 33, 33, nil, 34, 34, 34, nil, - 34, 33, nil, 33, 34, 34, nil, nil, nil, 34, - nil, 34, 34, 34, 34, 34, 34, 34, nil, nil, - nil, nil, nil, 34, 34, 34, 34, 34, 34, 34, - nil, nil, 34, nil, nil, nil, nil, 595, nil, 34, - nil, nil, 34, 34, 34, 34, 34, 34, 34, 34, - nil, 34, 34, 34, nil, 34, 34, nil, nil, 34, - 595, 595, 595, 595, 595, 595, 595, 595, 595, 595, - 595, nil, 595, 595, nil, nil, 595, 595, nil, 34, - nil, nil, 34, nil, nil, 34, 34, nil, nil, 34, - nil, nil, 595, nil, 595, nil, 595, 595, 595, 595, - 595, 595, 595, nil, 595, nil, nil, nil, 34, 34, - 34, 34, nil, 34, 34, nil, nil, nil, 34, 34, - nil, 595, nil, 34, nil, nil, 34, nil, 34, 41, - 41, 41, nil, 41, nil, nil, nil, 41, 41, nil, - nil, nil, 41, nil, 41, 41, 41, 41, 41, 41, - 41, nil, nil, nil, nil, nil, 41, 41, 41, 41, - 41, 41, 41, nil, nil, 41, nil, nil, nil, nil, - nil, nil, 41, nil, nil, 41, 41, 41, 41, 41, - 41, 41, 41, nil, 41, 41, 41, nil, 41, 41, - 41, 41, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 41, nil, nil, 41, nil, nil, 41, 41, - nil, nil, 41, nil, nil, nil, nil, nil, 41, nil, - nil, nil, nil, nil, nil, nil, 41, nil, nil, nil, - nil, 41, 41, 41, 41, nil, 41, 41, nil, nil, - nil, 41, 41, nil, 42, 42, 42, nil, 42, 41, - nil, 41, 42, 42, nil, nil, nil, 42, nil, 42, - 42, 42, 42, 42, 42, 42, nil, nil, nil, nil, - nil, 42, 42, 42, 42, 42, 42, 42, nil, nil, - 42, nil, nil, nil, nil, nil, nil, 42, nil, nil, - 42, 42, 42, 42, 42, 42, 42, 42, nil, 42, - 42, 42, nil, 42, 42, 42, 42, 42, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 42, nil, nil, - 42, nil, nil, 42, 42, nil, nil, 42, nil, nil, - nil, nil, nil, 42, nil, nil, nil, nil, nil, nil, - nil, 42, nil, nil, nil, nil, 42, 42, 42, 42, - nil, 42, 42, nil, nil, nil, 42, 42, nil, 43, - 43, 43, nil, 43, 42, nil, 42, 43, 43, nil, - nil, nil, 43, nil, 43, 43, 43, 43, 43, 43, - 43, nil, nil, nil, nil, nil, 43, 43, 43, 43, - 43, 43, 43, nil, nil, 43, nil, nil, nil, nil, - nil, nil, 43, nil, nil, 43, 43, 43, 43, 43, - 43, 43, 43, nil, 43, 43, 43, nil, 43, 43, - 43, 43, 43, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 43, nil, nil, 43, nil, nil, 43, 43, - nil, nil, 43, nil, nil, nil, nil, nil, 43, nil, - nil, nil, nil, nil, nil, nil, 43, nil, nil, nil, - nil, 43, 43, 43, 43, nil, 43, 43, nil, nil, - nil, 43, 43, nil, 56, 56, 56, nil, 56, 43, - nil, 43, 56, 56, nil, nil, nil, 56, nil, 56, - 56, 56, 56, 56, 56, 56, nil, nil, nil, nil, - nil, 56, 56, 56, 56, 56, 56, 56, nil, nil, - 56, nil, nil, nil, nil, nil, nil, 56, nil, nil, - 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, nil, 56, 56, 56, 56, 56, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 56, nil, nil, - 56, nil, nil, 56, 56, nil, nil, 56, nil, 56, - nil, nil, nil, 56, nil, nil, nil, nil, nil, nil, - nil, 56, nil, nil, nil, nil, 56, 56, 56, 56, - nil, 56, 56, nil, nil, nil, 56, 56, nil, 57, - 57, 57, nil, 57, 56, nil, 56, 57, 57, nil, - nil, nil, 57, nil, 57, 57, 57, 57, 57, 57, - 57, nil, nil, nil, nil, nil, 57, 57, 57, 57, - 57, 57, 57, nil, nil, 57, nil, nil, nil, nil, - nil, nil, 57, nil, nil, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, nil, 57, 57, - 57, 57, 57, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 57, nil, nil, 57, nil, nil, 57, 57, - nil, nil, 57, nil, nil, nil, nil, nil, 57, nil, - nil, nil, nil, nil, nil, nil, 57, nil, nil, nil, - nil, 57, 57, 57, 57, nil, 57, 57, nil, nil, - nil, 57, 57, nil, 60, 60, 60, nil, 60, 57, - nil, 57, 60, 60, nil, nil, nil, 60, nil, 60, - 60, 60, 60, 60, 60, 60, nil, nil, nil, nil, - nil, 60, 60, 60, 60, 60, 60, 60, nil, nil, - 60, nil, nil, nil, nil, nil, nil, 60, nil, nil, - 60, 60, 60, 60, 60, 60, 60, 60, nil, 60, - 60, 60, nil, 60, 60, 60, 60, 60, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 60, nil, nil, - 60, nil, nil, 60, 60, nil, nil, 60, nil, nil, - nil, nil, nil, 60, nil, nil, nil, nil, nil, nil, - nil, 60, nil, nil, nil, nil, 60, 60, 60, 60, - nil, 60, 60, nil, nil, nil, 60, 60, nil, 61, - 61, 61, nil, 61, 60, nil, 60, 61, 61, nil, - nil, nil, 61, nil, 61, 61, 61, 61, 61, 61, - 61, nil, nil, nil, nil, nil, 61, 61, 61, 61, - 61, 61, 61, nil, nil, 61, nil, nil, nil, nil, - nil, nil, 61, nil, nil, 61, 61, 61, 61, 61, - 61, 61, 61, nil, 61, 61, 61, nil, 61, 61, - 61, 61, 61, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 61, nil, nil, 61, nil, nil, 61, 61, - nil, nil, 61, nil, nil, nil, nil, nil, 61, nil, - nil, nil, nil, nil, nil, nil, 61, nil, nil, nil, - nil, 61, 61, 61, 61, nil, 61, 61, nil, nil, - nil, 61, 61, nil, 64, 64, 64, nil, 64, 61, - nil, 61, 64, 64, nil, nil, nil, 64, nil, 64, - 64, 64, 64, 64, 64, 64, nil, nil, nil, nil, - nil, 64, 64, 64, 64, 64, 64, 64, nil, nil, - 64, nil, nil, nil, nil, nil, nil, 64, nil, nil, - 64, 64, 64, 64, 64, 64, 64, 64, nil, 64, - 64, 64, nil, 64, 64, 64, 64, 64, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, 21, nil, - 21, 21, nil, nil, 21, 21, nil, 64, nil, nil, - 64, nil, nil, 64, 64, nil, nil, 64, nil, nil, - 21, nil, 21, 64, 21, 21, 21, 21, 21, 21, - 21, 64, 21, nil, nil, nil, 64, 64, 64, 64, - nil, 64, 64, nil, nil, nil, 64, 64, 64, 21, - nil, nil, nil, 64, 64, nil, 64, 65, 65, 65, - nil, 65, nil, nil, nil, 65, 65, nil, nil, nil, - 65, nil, 65, 65, 65, 65, 65, 65, 65, nil, - nil, nil, nil, nil, 65, 65, 65, 65, 65, 65, - 65, nil, nil, 65, nil, nil, nil, nil, nil, nil, - 65, nil, nil, 65, 65, 65, 65, 65, 65, 65, - 65, nil, 65, 65, 65, nil, 65, 65, nil, 860, - 65, 860, 860, 860, nil, 860, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 65, nil, nil, 65, nil, nil, 65, 65, nil, nil, - 65, nil, 65, nil, nil, nil, 860, 860, nil, nil, - nil, nil, nil, nil, nil, 860, 860, 860, 860, 65, - 65, 65, 65, nil, 65, 65, nil, nil, nil, 65, - 65, nil, 66, 66, 66, nil, 66, 65, nil, 65, - 66, 66, nil, nil, nil, 66, nil, 66, 66, 66, - 66, 66, 66, 66, nil, nil, nil, nil, nil, 66, - 66, 66, 66, 66, 66, 66, nil, nil, 66, nil, - nil, nil, nil, nil, nil, 66, nil, nil, 66, 66, - 66, 66, 66, 66, 66, 66, nil, 66, 66, 66, - nil, 66, 66, nil, nil, 66, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 66, nil, nil, 66, nil, nil, 66, nil, - nil, 66, 66, nil, nil, 66, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 66, 66, 66, 66, nil, 66, - 66, nil, nil, nil, 66, 66, nil, 67, 67, 67, - nil, 67, 66, nil, 66, 67, 67, nil, nil, nil, - 67, nil, 67, 67, 67, 67, 67, 67, 67, nil, - nil, nil, nil, nil, 67, 67, 67, 67, 67, 67, - 67, nil, nil, 67, nil, nil, nil, nil, nil, nil, - 67, nil, nil, 67, 67, 67, 67, 67, 67, 67, - 67, nil, 67, 67, 67, nil, 67, 67, nil, nil, - 67, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 67, nil, nil, 67, nil, nil, 67, 67, nil, nil, - 67, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 67, - 67, 67, 67, nil, 67, 67, nil, nil, nil, 67, - 67, nil, 105, 105, 105, 105, 105, 67, nil, 67, - 105, 105, nil, nil, nil, 105, nil, 105, 105, 105, - 105, 105, 105, 105, nil, nil, nil, nil, nil, 105, - 105, 105, 105, 105, 105, 105, nil, nil, 105, nil, - nil, nil, nil, nil, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, nil, 105, 105, 105, - nil, 105, 105, 105, 105, 105, 266, 266, 266, 266, - 266, 266, 266, 266, 266, 266, 266, nil, 266, 266, - nil, nil, 266, 266, nil, 105, nil, nil, 105, nil, - nil, 105, 105, nil, nil, 105, nil, 105, 266, nil, - 266, 105, 266, 266, 266, 266, 266, 266, 266, 105, - 266, nil, nil, nil, 105, 105, 105, 105, nil, 105, - 105, nil, nil, nil, 105, 105, nil, 266, nil, nil, - nil, 105, 105, nil, 105, 110, 110, 110, nil, 110, - nil, nil, nil, 110, 110, nil, nil, nil, 110, nil, - 110, 110, 110, 110, 110, 110, 110, nil, nil, nil, - nil, nil, 110, 110, 110, 110, 110, 110, 110, nil, - nil, 110, nil, nil, nil, nil, nil, nil, 110, nil, - nil, 110, 110, 110, 110, 110, 110, 110, 110, nil, - 110, 110, 110, nil, 110, 110, 110, 110, 110, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 110, nil, - nil, 110, nil, nil, 110, 110, nil, nil, 110, nil, - nil, nil, nil, nil, 110, nil, nil, nil, nil, nil, - nil, nil, 110, nil, nil, nil, nil, 110, 110, 110, - 110, nil, 110, 110, nil, nil, nil, 110, 110, nil, - 111, 111, 111, nil, 111, 110, nil, 110, 111, 111, - nil, nil, nil, 111, nil, 111, 111, 111, 111, 111, - 111, 111, nil, nil, nil, nil, nil, 111, 111, 111, - 111, 111, 111, 111, nil, nil, 111, nil, nil, nil, - nil, nil, nil, 111, nil, nil, 111, 111, 111, 111, - 111, 111, 111, 111, nil, 111, 111, 111, nil, 111, - 111, 111, 111, 111, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 111, nil, nil, 111, nil, nil, 111, - 111, nil, nil, 111, nil, nil, nil, nil, nil, 111, - nil, nil, nil, nil, nil, nil, nil, 111, nil, nil, - nil, nil, 111, 111, 111, 111, nil, 111, 111, nil, - nil, nil, 111, 111, nil, 112, 112, 112, nil, 112, - 111, nil, 111, 112, 112, nil, nil, nil, 112, nil, - 112, 112, 112, 112, 112, 112, 112, nil, nil, nil, - nil, nil, 112, 112, 112, 112, 112, 112, 112, nil, - nil, 112, nil, nil, nil, nil, nil, nil, 112, nil, - nil, 112, 112, 112, 112, 112, 112, 112, 112, nil, - 112, 112, 112, nil, 112, 112, 112, 112, 112, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 112, nil, - nil, 112, nil, nil, 112, 112, nil, nil, 112, nil, - nil, nil, nil, nil, 112, nil, nil, nil, nil, nil, - nil, nil, 112, nil, nil, nil, nil, 112, 112, 112, - 112, nil, 112, 112, nil, nil, nil, 112, 112, nil, - 113, 113, 113, nil, 113, 112, nil, 112, 113, 113, - nil, nil, nil, 113, nil, 113, 113, 113, 113, 113, - 113, 113, nil, nil, nil, nil, nil, 113, 113, 113, - 113, 113, 113, 113, nil, nil, 113, nil, nil, nil, - nil, nil, nil, 113, nil, nil, 113, 113, 113, 113, - 113, 113, 113, 113, nil, 113, 113, 113, nil, 113, - 113, 113, 113, 113, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 113, nil, nil, 113, nil, nil, 113, - 113, nil, nil, 113, nil, nil, nil, nil, nil, 113, - nil, nil, nil, nil, nil, nil, nil, 113, nil, nil, - nil, nil, 113, 113, 113, 113, nil, 113, 113, nil, - nil, nil, 113, 113, nil, 114, 114, 114, 114, 114, - 113, nil, 113, 114, 114, nil, nil, nil, 114, nil, - 114, 114, 114, 114, 114, 114, 114, nil, nil, nil, - nil, nil, 114, 114, 114, 114, 114, 114, 114, nil, - nil, 114, nil, nil, nil, nil, nil, 114, 114, nil, - 114, 114, 114, 114, 114, 114, 114, 114, 114, nil, - 114, 114, 114, nil, 114, 114, 114, 114, 114, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 114, nil, - nil, 114, nil, nil, 114, 114, nil, nil, 114, nil, - 114, nil, nil, nil, 114, nil, nil, nil, nil, nil, - nil, nil, 114, nil, nil, nil, nil, 114, 114, 114, - 114, nil, 114, 114, nil, nil, nil, 114, 114, nil, - 200, 200, 200, nil, 200, 114, nil, 114, 200, 200, - nil, nil, nil, 200, nil, 200, 200, 200, 200, 200, - 200, 200, nil, nil, nil, nil, nil, 200, 200, 200, - 200, 200, 200, 200, nil, nil, 200, nil, nil, nil, - nil, nil, nil, 200, nil, nil, 200, 200, 200, 200, - 200, 200, 200, 200, nil, 200, 200, 200, nil, 200, - 200, 200, 200, 200, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 200, nil, nil, 200, nil, nil, 200, - 200, nil, nil, 200, nil, 200, nil, nil, nil, 200, - nil, nil, nil, nil, nil, nil, nil, 200, nil, nil, - nil, nil, 200, 200, 200, 200, nil, 200, 200, nil, - nil, nil, 200, 200, nil, 201, 201, 201, nil, 201, - 200, nil, 200, 201, 201, nil, nil, nil, 201, nil, - 201, 201, 201, 201, 201, 201, 201, nil, nil, nil, - nil, nil, 201, 201, 201, 201, 201, 201, 201, nil, - nil, 201, nil, nil, nil, nil, nil, nil, 201, nil, - nil, 201, 201, 201, 201, 201, 201, 201, 201, nil, - 201, 201, 201, nil, 201, 201, 201, 201, 201, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 201, nil, - nil, 201, nil, nil, 201, 201, nil, nil, 201, nil, - nil, nil, nil, nil, 201, nil, nil, nil, nil, nil, - nil, nil, 201, nil, nil, nil, nil, 201, 201, 201, - 201, nil, 201, 201, nil, nil, nil, 201, 201, nil, - 202, 202, 202, nil, 202, 201, nil, 201, 202, 202, - nil, nil, nil, 202, nil, 202, 202, 202, 202, 202, - 202, 202, nil, nil, nil, nil, nil, 202, 202, 202, - 202, 202, 202, 202, nil, nil, 202, nil, nil, nil, - nil, nil, nil, 202, nil, nil, 202, 202, 202, 202, - 202, 202, 202, 202, 202, 202, 202, 202, nil, 202, - 202, 202, 202, 202, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 202, nil, nil, 202, nil, nil, 202, - 202, nil, nil, 202, nil, 202, nil, 202, nil, 202, - nil, nil, nil, nil, nil, nil, nil, 202, nil, nil, - nil, nil, 202, 202, 202, 202, nil, 202, 202, nil, - nil, nil, 202, 202, nil, 205, 205, 205, nil, 205, - 202, nil, 202, 205, 205, nil, nil, nil, 205, nil, - 205, 205, 205, 205, 205, 205, 205, nil, nil, nil, - nil, nil, 205, 205, 205, 205, 205, 205, 205, nil, - nil, 205, nil, nil, nil, nil, nil, nil, 205, nil, - nil, 205, 205, 205, 205, 205, 205, 205, 205, nil, - 205, 205, 205, nil, 205, 205, 205, 205, 205, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 205, nil, - nil, 205, nil, nil, 205, 205, nil, nil, 205, nil, - nil, nil, nil, nil, 205, nil, nil, nil, nil, nil, - nil, nil, 205, nil, nil, nil, nil, 205, 205, 205, - 205, nil, 205, 205, nil, nil, nil, 205, 205, nil, - 206, 206, 206, nil, 206, 205, nil, 205, 206, 206, - nil, nil, nil, 206, nil, 206, 206, 206, 206, 206, - 206, 206, nil, nil, nil, nil, nil, 206, 206, 206, - 206, 206, 206, 206, nil, nil, 206, nil, nil, nil, - nil, nil, nil, 206, nil, nil, 206, 206, 206, 206, - 206, 206, 206, 206, nil, 206, 206, 206, nil, 206, - 206, 206, 206, 206, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 206, nil, nil, 206, nil, nil, 206, - 206, nil, nil, 206, nil, 206, nil, nil, nil, 206, - nil, nil, nil, nil, nil, nil, nil, 206, nil, nil, - nil, nil, 206, 206, 206, 206, nil, 206, 206, nil, - nil, nil, 206, 206, nil, 207, 207, 207, nil, 207, - 206, nil, 206, 207, 207, nil, nil, nil, 207, nil, - 207, 207, 207, 207, 207, 207, 207, nil, nil, nil, - nil, nil, 207, 207, 207, 207, 207, 207, 207, nil, - nil, 207, nil, nil, nil, nil, nil, nil, 207, nil, - nil, 207, 207, 207, 207, 207, 207, 207, 207, nil, - 207, 207, 207, nil, 207, 207, 207, 207, 207, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 207, nil, - nil, 207, nil, nil, 207, 207, nil, nil, 207, nil, - nil, nil, nil, nil, 207, nil, nil, nil, nil, nil, - nil, nil, 207, nil, nil, nil, nil, 207, 207, 207, - 207, nil, 207, 207, nil, nil, nil, 207, 207, nil, - 208, 208, 208, nil, 208, 207, nil, 207, 208, 208, - nil, nil, nil, 208, nil, 208, 208, 208, 208, 208, - 208, 208, nil, nil, nil, nil, nil, 208, 208, 208, - 208, 208, 208, 208, nil, nil, 208, nil, nil, nil, - nil, nil, nil, 208, nil, nil, 208, 208, 208, 208, - 208, 208, 208, 208, nil, 208, 208, 208, nil, 208, - 208, 208, 208, 208, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 208, nil, nil, 208, nil, nil, 208, - 208, nil, nil, 208, nil, nil, nil, nil, nil, 208, - nil, nil, nil, nil, nil, nil, nil, 208, nil, nil, - nil, nil, 208, 208, 208, 208, nil, 208, 208, nil, - nil, nil, 208, 208, nil, 209, 209, 209, nil, 209, - 208, nil, 208, 209, 209, nil, nil, nil, 209, nil, - 209, 209, 209, 209, 209, 209, 209, nil, nil, nil, - nil, nil, 209, 209, 209, 209, 209, 209, 209, nil, - nil, 209, nil, nil, nil, nil, nil, nil, 209, nil, - nil, 209, 209, 209, 209, 209, 209, 209, 209, nil, - 209, 209, 209, nil, 209, 209, 209, 209, 209, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 209, nil, - nil, 209, nil, nil, 209, 209, nil, nil, 209, nil, - nil, nil, nil, nil, 209, nil, nil, nil, nil, nil, - nil, nil, 209, nil, nil, nil, nil, 209, 209, 209, - 209, nil, 209, 209, nil, nil, nil, 209, 209, nil, - 210, 210, 210, nil, 210, 209, nil, 209, 210, 210, - nil, nil, nil, 210, nil, 210, 210, 210, 210, 210, - 210, 210, nil, nil, nil, nil, nil, 210, 210, 210, - 210, 210, 210, 210, nil, nil, 210, nil, nil, nil, - nil, nil, nil, 210, nil, nil, 210, 210, 210, 210, - 210, 210, 210, 210, nil, 210, 210, 210, nil, 210, - 210, 210, 210, 210, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 210, nil, nil, 210, nil, nil, 210, - 210, nil, nil, 210, nil, nil, nil, nil, nil, 210, - nil, nil, nil, nil, nil, nil, nil, 210, nil, nil, - nil, nil, 210, 210, 210, 210, nil, 210, 210, nil, - nil, nil, 210, 210, 210, 221, 221, 221, nil, 221, - 210, nil, 210, 221, 221, nil, nil, nil, 221, nil, - 221, 221, 221, 221, 221, 221, 221, nil, nil, nil, - nil, nil, 221, 221, 221, 221, 221, 221, 221, nil, - nil, 221, nil, nil, nil, nil, nil, nil, 221, nil, - nil, 221, 221, 221, 221, 221, 221, 221, 221, nil, - 221, 221, 221, nil, 221, 221, 221, 221, 221, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 221, nil, - nil, 221, nil, nil, 221, 221, nil, nil, 221, nil, - nil, nil, nil, nil, 221, nil, nil, nil, nil, nil, - nil, nil, 221, nil, nil, nil, nil, 221, 221, 221, - 221, nil, 221, 221, nil, nil, nil, 221, 221, nil, - 224, 224, 224, nil, 224, 221, nil, 221, 224, 224, - nil, nil, nil, 224, nil, 224, 224, 224, 224, 224, - 224, 224, nil, nil, nil, nil, nil, 224, 224, 224, - 224, 224, 224, 224, nil, nil, 224, nil, nil, nil, - nil, nil, nil, 224, nil, nil, 224, 224, 224, 224, - 224, 224, 224, 224, nil, 224, 224, 224, nil, 224, - 224, 224, 224, 224, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 224, nil, nil, 224, nil, nil, 224, - 224, nil, nil, 224, nil, nil, nil, nil, nil, 224, - nil, nil, nil, nil, nil, nil, nil, 224, nil, nil, - nil, nil, 224, 224, 224, 224, nil, 224, 224, nil, - nil, nil, 224, 224, nil, 225, 225, 225, nil, 225, - 224, nil, 224, 225, 225, nil, nil, nil, 225, nil, - 225, 225, 225, 225, 225, 225, 225, nil, nil, nil, - nil, nil, 225, 225, 225, 225, 225, 225, 225, nil, - nil, 225, nil, nil, nil, nil, nil, nil, 225, nil, - nil, 225, 225, 225, 225, 225, 225, 225, 225, nil, - 225, 225, 225, nil, 225, 225, 225, 225, 225, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 225, nil, - nil, 225, nil, nil, 225, 225, nil, nil, 225, nil, - nil, nil, nil, nil, 225, nil, nil, nil, nil, nil, - nil, nil, 225, nil, nil, nil, nil, 225, 225, 225, - 225, nil, 225, 225, nil, nil, nil, 225, 225, nil, - 226, 226, 226, nil, 226, 225, nil, 225, 226, 226, - nil, nil, nil, 226, nil, 226, 226, 226, 226, 226, - 226, 226, nil, nil, nil, nil, nil, 226, 226, 226, - 226, 226, 226, 226, nil, nil, 226, nil, nil, nil, - nil, nil, nil, 226, nil, nil, 226, 226, 226, 226, - 226, 226, 226, 226, nil, 226, 226, 226, nil, 226, - 226, 226, 226, 226, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 226, nil, nil, 226, nil, nil, 226, - 226, nil, nil, 226, nil, nil, nil, nil, nil, 226, - nil, nil, nil, nil, nil, nil, nil, 226, nil, nil, - nil, nil, 226, 226, 226, 226, nil, 226, 226, nil, - nil, nil, 226, 226, nil, 227, 227, 227, nil, 227, - 226, nil, 226, 227, 227, nil, nil, nil, 227, nil, - 227, 227, 227, 227, 227, 227, 227, nil, nil, nil, - nil, nil, 227, 227, 227, 227, 227, 227, 227, nil, - nil, 227, nil, nil, nil, nil, nil, nil, 227, nil, - nil, 227, 227, 227, 227, 227, 227, 227, 227, nil, - 227, 227, 227, nil, 227, 227, 227, 227, 227, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 227, nil, - nil, 227, nil, nil, 227, 227, nil, nil, 227, nil, - nil, nil, nil, nil, 227, nil, nil, nil, nil, nil, - nil, nil, 227, nil, nil, nil, nil, 227, 227, 227, - 227, nil, 227, 227, nil, nil, nil, 227, 227, nil, - 228, 228, 228, nil, 228, 227, nil, 227, 228, 228, - nil, nil, nil, 228, nil, 228, 228, 228, 228, 228, - 228, 228, nil, nil, nil, nil, nil, 228, 228, 228, - 228, 228, 228, 228, nil, nil, 228, nil, nil, nil, - nil, nil, nil, 228, nil, nil, 228, 228, 228, 228, - 228, 228, 228, 228, nil, 228, 228, 228, nil, 228, - 228, 228, 228, 228, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 228, nil, nil, 228, nil, nil, 228, - 228, nil, nil, 228, nil, nil, nil, nil, nil, 228, - nil, nil, nil, nil, nil, nil, nil, 228, nil, nil, - nil, nil, 228, 228, 228, 228, nil, 228, 228, nil, - nil, nil, 228, 228, nil, 229, 229, 229, nil, 229, - 228, nil, 228, 229, 229, nil, nil, nil, 229, nil, - 229, 229, 229, 229, 229, 229, 229, nil, nil, nil, - nil, nil, 229, 229, 229, 229, 229, 229, 229, nil, - nil, 229, nil, nil, nil, nil, nil, nil, 229, nil, - nil, 229, 229, 229, 229, 229, 229, 229, 229, nil, - 229, 229, 229, nil, 229, 229, 229, 229, 229, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 229, nil, - nil, 229, nil, nil, 229, 229, nil, nil, 229, nil, - nil, nil, nil, nil, 229, nil, nil, nil, nil, nil, - nil, nil, 229, nil, nil, nil, nil, 229, 229, 229, - 229, nil, 229, 229, nil, nil, nil, 229, 229, nil, - 230, 230, 230, nil, 230, 229, nil, 229, 230, 230, - nil, nil, nil, 230, nil, 230, 230, 230, 230, 230, - 230, 230, nil, nil, nil, nil, nil, 230, 230, 230, - 230, 230, 230, 230, nil, nil, 230, nil, nil, nil, - nil, nil, nil, 230, nil, nil, 230, 230, 230, 230, - 230, 230, 230, 230, nil, 230, 230, 230, nil, 230, - 230, 230, 230, 230, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 230, nil, nil, 230, nil, nil, 230, - 230, nil, nil, 230, nil, nil, nil, nil, nil, 230, - nil, nil, nil, nil, nil, nil, nil, 230, nil, nil, - nil, nil, 230, 230, 230, 230, nil, 230, 230, nil, - nil, nil, 230, 230, nil, 231, 231, 231, nil, 231, - 230, nil, 230, 231, 231, nil, nil, nil, 231, nil, - 231, 231, 231, 231, 231, 231, 231, nil, nil, nil, - nil, nil, 231, 231, 231, 231, 231, 231, 231, nil, - nil, 231, nil, nil, nil, nil, nil, nil, 231, nil, - nil, 231, 231, 231, 231, 231, 231, 231, 231, nil, - 231, 231, 231, nil, 231, 231, 231, 231, 231, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 231, nil, - nil, 231, nil, nil, 231, 231, nil, nil, 231, nil, - nil, nil, nil, nil, 231, nil, nil, nil, nil, nil, - nil, nil, 231, nil, nil, nil, nil, 231, 231, 231, - 231, nil, 231, 231, nil, nil, nil, 231, 231, nil, - 232, 232, 232, nil, 232, 231, nil, 231, 232, 232, - nil, nil, nil, 232, nil, 232, 232, 232, 232, 232, - 232, 232, nil, nil, nil, nil, nil, 232, 232, 232, - 232, 232, 232, 232, nil, nil, 232, nil, nil, nil, - nil, nil, nil, 232, nil, nil, 232, 232, 232, 232, - 232, 232, 232, 232, nil, 232, 232, 232, nil, 232, - 232, 232, 232, 232, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 232, nil, nil, 232, nil, nil, 232, - 232, nil, nil, 232, nil, nil, nil, nil, nil, 232, - nil, nil, nil, nil, nil, nil, nil, 232, nil, nil, - nil, nil, 232, 232, 232, 232, nil, 232, 232, nil, - nil, nil, 232, 232, nil, 233, 233, 233, nil, 233, - 232, nil, 232, 233, 233, nil, nil, nil, 233, nil, - 233, 233, 233, 233, 233, 233, 233, nil, nil, nil, - nil, nil, 233, 233, 233, 233, 233, 233, 233, nil, - nil, 233, nil, nil, nil, nil, nil, nil, 233, nil, - nil, 233, 233, 233, 233, 233, 233, 233, 233, nil, - 233, 233, 233, nil, 233, 233, 233, 233, 233, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 233, nil, - nil, 233, nil, nil, 233, 233, nil, nil, 233, nil, - nil, nil, nil, nil, 233, nil, nil, nil, nil, nil, - nil, nil, 233, nil, nil, nil, nil, 233, 233, 233, - 233, nil, 233, 233, nil, nil, nil, 233, 233, nil, - 234, 234, 234, nil, 234, 233, nil, 233, 234, 234, - nil, nil, nil, 234, nil, 234, 234, 234, 234, 234, - 234, 234, nil, nil, nil, nil, nil, 234, 234, 234, - 234, 234, 234, 234, nil, nil, 234, nil, nil, nil, - nil, nil, nil, 234, nil, nil, 234, 234, 234, 234, - 234, 234, 234, 234, nil, 234, 234, 234, nil, 234, - 234, 234, 234, 234, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 234, nil, nil, 234, nil, nil, 234, - 234, nil, nil, 234, nil, nil, nil, nil, nil, 234, - nil, nil, nil, nil, nil, nil, nil, 234, nil, nil, - nil, nil, 234, 234, 234, 234, nil, 234, 234, nil, - nil, nil, 234, 234, nil, 235, 235, 235, nil, 235, - 234, nil, 234, 235, 235, nil, nil, nil, 235, nil, - 235, 235, 235, 235, 235, 235, 235, nil, nil, nil, - nil, nil, 235, 235, 235, 235, 235, 235, 235, nil, - nil, 235, nil, nil, nil, nil, nil, nil, 235, nil, - nil, 235, 235, 235, 235, 235, 235, 235, 235, nil, - 235, 235, 235, nil, 235, 235, 235, 235, 235, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 235, nil, - nil, 235, nil, nil, 235, 235, nil, nil, 235, nil, - nil, nil, nil, nil, 235, nil, nil, nil, nil, nil, - nil, nil, 235, nil, nil, nil, nil, 235, 235, 235, - 235, nil, 235, 235, nil, nil, nil, 235, 235, nil, - 236, 236, 236, nil, 236, 235, nil, 235, 236, 236, - nil, nil, nil, 236, nil, 236, 236, 236, 236, 236, - 236, 236, nil, nil, nil, nil, nil, 236, 236, 236, - 236, 236, 236, 236, nil, nil, 236, nil, nil, nil, - nil, nil, nil, 236, nil, nil, 236, 236, 236, 236, - 236, 236, 236, 236, nil, 236, 236, 236, nil, 236, - 236, 236, 236, 236, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 236, nil, nil, 236, nil, nil, 236, - 236, nil, nil, 236, nil, nil, nil, nil, nil, 236, - nil, nil, nil, nil, nil, nil, nil, 236, nil, nil, - nil, nil, 236, 236, 236, 236, nil, 236, 236, nil, - nil, nil, 236, 236, nil, 237, 237, 237, nil, 237, - 236, nil, 236, 237, 237, nil, nil, nil, 237, nil, - 237, 237, 237, 237, 237, 237, 237, nil, nil, nil, - nil, nil, 237, 237, 237, 237, 237, 237, 237, nil, - nil, 237, nil, nil, nil, nil, nil, nil, 237, nil, - nil, 237, 237, 237, 237, 237, 237, 237, 237, nil, - 237, 237, 237, nil, 237, 237, 237, 237, 237, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 237, nil, - nil, 237, nil, nil, 237, 237, nil, nil, 237, nil, - nil, nil, nil, nil, 237, nil, nil, nil, nil, nil, - nil, nil, 237, nil, nil, nil, nil, 237, 237, 237, - 237, nil, 237, 237, nil, nil, nil, 237, 237, nil, - 238, 238, 238, nil, 238, 237, nil, 237, 238, 238, - nil, nil, nil, 238, nil, 238, 238, 238, 238, 238, - 238, 238, nil, nil, nil, nil, nil, 238, 238, 238, - 238, 238, 238, 238, nil, nil, 238, nil, nil, nil, - nil, nil, nil, 238, nil, nil, 238, 238, 238, 238, - 238, 238, 238, 238, nil, 238, 238, 238, nil, 238, - 238, 238, 238, 238, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 238, nil, nil, 238, nil, nil, 238, - 238, nil, nil, 238, nil, nil, nil, nil, nil, 238, - nil, nil, nil, nil, nil, nil, nil, 238, nil, nil, - nil, nil, 238, 238, 238, 238, nil, 238, 238, nil, - nil, nil, 238, 238, nil, 239, 239, 239, nil, 239, - 238, nil, 238, 239, 239, nil, nil, nil, 239, nil, - 239, 239, 239, 239, 239, 239, 239, nil, nil, nil, - nil, nil, 239, 239, 239, 239, 239, 239, 239, nil, - nil, 239, nil, nil, nil, nil, nil, nil, 239, nil, - nil, 239, 239, 239, 239, 239, 239, 239, 239, nil, - 239, 239, 239, nil, 239, 239, 239, 239, 239, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 239, nil, - nil, 239, nil, nil, 239, 239, nil, nil, 239, nil, - nil, nil, nil, nil, 239, nil, nil, nil, nil, nil, - nil, nil, 239, nil, nil, nil, nil, 239, 239, 239, - 239, nil, 239, 239, nil, nil, nil, 239, 239, nil, - 240, 240, 240, nil, 240, 239, nil, 239, 240, 240, - nil, nil, nil, 240, nil, 240, 240, 240, 240, 240, - 240, 240, nil, nil, nil, nil, nil, 240, 240, 240, - 240, 240, 240, 240, nil, nil, 240, nil, nil, nil, - nil, nil, nil, 240, nil, nil, 240, 240, 240, 240, - 240, 240, 240, 240, nil, 240, 240, 240, nil, 240, - 240, 240, 240, 240, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 240, nil, nil, 240, nil, nil, 240, - 240, nil, nil, 240, nil, nil, nil, nil, nil, 240, - nil, nil, nil, nil, nil, nil, nil, 240, nil, nil, - nil, nil, 240, 240, 240, 240, nil, 240, 240, nil, - nil, nil, 240, 240, nil, 241, 241, 241, nil, 241, - 240, nil, 240, 241, 241, nil, nil, nil, 241, nil, - 241, 241, 241, 241, 241, 241, 241, nil, nil, nil, - nil, nil, 241, 241, 241, 241, 241, 241, 241, nil, - nil, 241, nil, nil, nil, nil, nil, nil, 241, nil, - nil, 241, 241, 241, 241, 241, 241, 241, 241, nil, - 241, 241, 241, nil, 241, 241, 241, 241, 241, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 241, nil, - nil, 241, nil, nil, 241, 241, nil, nil, 241, nil, - nil, nil, nil, nil, 241, nil, nil, nil, nil, nil, - nil, nil, 241, nil, nil, nil, nil, 241, 241, 241, - 241, nil, 241, 241, nil, nil, nil, 241, 241, nil, - 242, 242, 242, nil, 242, 241, nil, 241, 242, 242, - nil, nil, nil, 242, nil, 242, 242, 242, 242, 242, - 242, 242, nil, nil, nil, nil, nil, 242, 242, 242, - 242, 242, 242, 242, nil, nil, 242, nil, nil, nil, - nil, nil, nil, 242, nil, nil, 242, 242, 242, 242, - 242, 242, 242, 242, nil, 242, 242, 242, nil, 242, - 242, 242, 242, 242, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 242, nil, nil, 242, nil, nil, 242, - 242, nil, nil, 242, nil, nil, nil, nil, nil, 242, - nil, nil, nil, nil, nil, nil, nil, 242, nil, nil, - nil, nil, 242, 242, 242, 242, nil, 242, 242, nil, - nil, nil, 242, 242, nil, 243, 243, 243, nil, 243, - 242, nil, 242, 243, 243, nil, nil, nil, 243, nil, - 243, 243, 243, 243, 243, 243, 243, nil, nil, nil, - nil, nil, 243, 243, 243, 243, 243, 243, 243, nil, - nil, 243, nil, nil, nil, nil, nil, nil, 243, nil, - nil, 243, 243, 243, 243, 243, 243, 243, 243, nil, - 243, 243, 243, nil, 243, 243, 243, 243, 243, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 243, nil, - nil, 243, nil, nil, 243, 243, nil, nil, 243, nil, - nil, nil, nil, nil, 243, nil, nil, nil, nil, nil, - nil, nil, 243, nil, nil, nil, nil, 243, 243, 243, - 243, nil, 243, 243, nil, nil, nil, 243, 243, nil, - 244, 244, 244, nil, 244, 243, nil, 243, 244, 244, - nil, nil, nil, 244, nil, 244, 244, 244, 244, 244, - 244, 244, nil, nil, nil, nil, nil, 244, 244, 244, - 244, 244, 244, 244, nil, nil, 244, nil, nil, nil, - nil, nil, nil, 244, nil, nil, 244, 244, 244, 244, - 244, 244, 244, 244, nil, 244, 244, 244, nil, 244, - 244, 244, 244, 244, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 244, nil, nil, 244, nil, nil, 244, - 244, nil, nil, 244, nil, nil, nil, nil, nil, 244, - nil, nil, nil, nil, nil, nil, nil, 244, nil, nil, - nil, nil, 244, 244, 244, 244, nil, 244, 244, nil, - nil, nil, 244, 244, nil, 245, 245, 245, nil, 245, - 244, nil, 244, 245, 245, nil, nil, nil, 245, nil, - 245, 245, 245, 245, 245, 245, 245, nil, nil, nil, - nil, nil, 245, 245, 245, 245, 245, 245, 245, nil, - nil, 245, nil, nil, nil, nil, nil, nil, 245, nil, - nil, 245, 245, 245, 245, 245, 245, 245, 245, nil, - 245, 245, 245, nil, 245, 245, 245, 245, 245, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 245, nil, - nil, 245, nil, nil, 245, 245, nil, nil, 245, nil, - nil, nil, nil, nil, 245, nil, nil, nil, nil, nil, - nil, nil, 245, nil, nil, nil, nil, 245, 245, 245, - 245, nil, 245, 245, nil, nil, nil, 245, 245, nil, - 246, 246, 246, nil, 246, 245, nil, 245, 246, 246, - nil, nil, nil, 246, nil, 246, 246, 246, 246, 246, - 246, 246, nil, nil, nil, nil, nil, 246, 246, 246, - 246, 246, 246, 246, nil, nil, 246, nil, nil, nil, - nil, nil, nil, 246, nil, nil, 246, 246, 246, 246, - 246, 246, 246, 246, nil, 246, 246, 246, nil, 246, - 246, 246, 246, 246, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 246, nil, nil, 246, nil, nil, 246, - 246, nil, nil, 246, nil, nil, nil, nil, nil, 246, - nil, nil, nil, nil, nil, nil, nil, 246, nil, nil, - nil, nil, 246, 246, 246, 246, nil, 246, 246, nil, - nil, nil, 246, 246, nil, 247, 247, 247, nil, 247, - 246, nil, 246, 247, 247, nil, nil, nil, 247, nil, - 247, 247, 247, 247, 247, 247, 247, nil, nil, nil, - nil, nil, 247, 247, 247, 247, 247, 247, 247, nil, - nil, 247, nil, nil, nil, nil, nil, nil, 247, nil, - nil, 247, 247, 247, 247, 247, 247, 247, 247, nil, - 247, 247, 247, nil, 247, 247, 247, 247, 247, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 247, nil, - nil, 247, nil, nil, 247, 247, nil, nil, 247, nil, - nil, nil, nil, nil, 247, nil, nil, nil, nil, nil, - nil, nil, 247, nil, nil, nil, nil, 247, 247, 247, - 247, nil, 247, 247, nil, nil, nil, 247, 247, nil, - 248, 248, 248, nil, 248, 247, nil, 247, 248, 248, - nil, nil, nil, 248, nil, 248, 248, 248, 248, 248, - 248, 248, nil, nil, nil, nil, nil, 248, 248, 248, - 248, 248, 248, 248, nil, nil, 248, nil, nil, nil, - nil, nil, nil, 248, nil, nil, 248, 248, 248, 248, - 248, 248, 248, 248, nil, 248, 248, 248, nil, 248, - 248, 248, 248, 248, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 248, nil, nil, 248, nil, nil, 248, - 248, nil, nil, 248, nil, nil, nil, nil, nil, 248, - nil, nil, nil, nil, nil, nil, nil, 248, nil, nil, - nil, nil, 248, 248, 248, 248, nil, 248, 248, nil, - nil, nil, 248, 248, nil, 249, 249, 249, nil, 249, - 248, nil, 248, 249, 249, nil, nil, nil, 249, nil, - 249, 249, 249, 249, 249, 249, 249, nil, nil, nil, - nil, nil, 249, 249, 249, 249, 249, 249, 249, nil, - nil, 249, nil, nil, nil, nil, nil, nil, 249, nil, - nil, 249, 249, 249, 249, 249, 249, 249, 249, nil, - 249, 249, 249, nil, 249, 249, 249, 249, 249, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 249, nil, - nil, 249, nil, nil, 249, 249, nil, nil, 249, nil, - nil, nil, nil, nil, 249, nil, nil, nil, nil, nil, - nil, nil, 249, nil, nil, nil, nil, 249, 249, 249, - 249, nil, 249, 249, nil, nil, nil, 249, 249, nil, - 255, 255, 255, nil, 255, 249, nil, 249, 255, 255, - nil, nil, nil, 255, nil, 255, 255, 255, 255, 255, - 255, 255, nil, nil, nil, nil, nil, 255, 255, 255, - 255, 255, 255, 255, nil, nil, 255, nil, nil, nil, - nil, nil, nil, 255, nil, nil, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, nil, 255, - 255, 255, 255, 255, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 255, nil, nil, 255, nil, nil, 255, - 255, nil, nil, 255, nil, 255, nil, 255, nil, 255, - nil, nil, nil, nil, nil, nil, nil, 255, nil, nil, - nil, nil, 255, 255, 255, 255, nil, 255, 255, nil, - nil, nil, 255, 255, nil, 256, 256, 256, nil, 256, - 255, nil, 255, 256, 256, nil, nil, nil, 256, nil, - 256, 256, 256, 256, 256, 256, 256, nil, nil, nil, - nil, nil, 256, 256, 256, 256, 256, 256, 256, nil, - nil, 256, nil, nil, nil, nil, nil, nil, 256, nil, - nil, 256, 256, 256, 256, 256, 256, 256, 256, 256, - 256, 256, 256, nil, 256, 256, 256, 256, 256, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 256, nil, - nil, 256, nil, nil, 256, 256, nil, nil, 256, nil, - 256, nil, 256, nil, 256, nil, nil, nil, nil, nil, - nil, nil, 256, nil, nil, nil, nil, 256, 256, 256, - 256, nil, 256, 256, nil, nil, nil, 256, 256, nil, - 264, 264, 264, nil, 264, 256, nil, 256, 264, 264, - nil, nil, nil, 264, nil, 264, 264, 264, 264, 264, - 264, 264, nil, nil, nil, nil, nil, 264, 264, 264, - 264, 264, 264, 264, nil, nil, 264, nil, nil, nil, - nil, nil, nil, 264, nil, nil, 264, 264, 264, 264, - 264, 264, 264, 264, 264, 264, 264, 264, nil, 264, - 264, 264, 264, 264, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 264, nil, nil, 264, nil, nil, 264, - 264, nil, nil, 264, nil, 264, nil, 264, nil, 264, - nil, nil, nil, nil, nil, nil, nil, 264, nil, nil, - nil, nil, 264, 264, 264, 264, nil, 264, 264, nil, - nil, nil, 264, 264, 264, 271, 271, 271, nil, 271, - 264, nil, 264, 271, 271, nil, nil, nil, 271, nil, - 271, 271, 271, 271, 271, 271, 271, nil, nil, nil, - nil, nil, 271, 271, 271, 271, 271, 271, 271, nil, - nil, 271, nil, nil, nil, nil, nil, nil, 271, nil, - nil, 271, 271, 271, 271, 271, 271, 271, 271, nil, - 271, 271, 271, nil, 271, 271, 271, 271, 271, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 271, nil, - nil, 271, nil, nil, 271, 271, nil, nil, 271, nil, - nil, nil, nil, nil, 271, nil, nil, nil, nil, nil, - nil, nil, 271, nil, nil, nil, nil, 271, 271, 271, - 271, nil, 271, 271, nil, nil, nil, 271, 271, nil, - 273, 273, 273, nil, 273, 271, nil, 271, 273, 273, - nil, nil, nil, 273, nil, 273, 273, 273, 273, 273, - 273, 273, nil, nil, nil, nil, nil, 273, 273, 273, - 273, 273, 273, 273, nil, nil, 273, nil, nil, nil, - nil, nil, nil, 273, nil, nil, 273, 273, 273, 273, - 273, 273, 273, 273, nil, 273, 273, 273, nil, 273, - 273, 273, 273, 273, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 273, nil, nil, 273, nil, nil, 273, - 273, nil, nil, 273, nil, nil, nil, nil, nil, 273, - nil, nil, nil, nil, nil, nil, nil, 273, nil, nil, - nil, nil, 273, 273, 273, 273, nil, 273, 273, nil, - nil, nil, 273, 273, nil, 275, 275, 275, nil, 275, - 273, nil, 273, 275, 275, nil, nil, nil, 275, nil, - 275, 275, 275, 275, 275, 275, 275, nil, nil, nil, - nil, nil, 275, 275, 275, 275, 275, 275, 275, nil, - nil, 275, nil, nil, nil, nil, nil, nil, 275, nil, - nil, 275, 275, 275, 275, 275, 275, 275, 275, nil, - 275, 275, 275, nil, 275, 275, 275, 275, 275, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 275, nil, - nil, 275, nil, nil, 275, 275, nil, nil, 275, nil, - nil, nil, nil, nil, 275, nil, nil, nil, nil, nil, - nil, nil, 275, nil, nil, nil, nil, 275, 275, 275, - 275, nil, 275, 275, nil, nil, nil, 275, 275, nil, - 280, 280, 280, 280, 280, 275, nil, 275, 280, 280, - nil, nil, nil, 280, nil, 280, 280, 280, 280, 280, - 280, 280, nil, nil, nil, nil, nil, 280, 280, 280, - 280, 280, 280, 280, nil, nil, 280, nil, nil, nil, - nil, nil, 280, 280, nil, 280, 280, 280, 280, 280, - 280, 280, 280, 280, nil, 280, 280, 280, nil, 280, - 280, 280, 280, 280, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 280, nil, nil, 280, nil, nil, 280, - 280, nil, nil, 280, nil, 280, nil, nil, nil, 280, - nil, nil, nil, nil, nil, nil, nil, 280, nil, nil, - nil, nil, 280, 280, 280, 280, nil, 280, 280, nil, - nil, nil, 280, 280, nil, 286, 286, 286, nil, 286, - 280, nil, 280, 286, 286, nil, nil, nil, 286, nil, - 286, 286, 286, 286, 286, 286, 286, nil, nil, nil, - nil, nil, 286, 286, 286, 286, 286, 286, 286, nil, - nil, 286, nil, nil, nil, nil, nil, nil, 286, nil, - nil, 286, 286, 286, 286, 286, 286, 286, 286, nil, - 286, 286, 286, nil, 286, 286, nil, nil, 286, 412, - 412, 412, 412, 412, 412, 412, 412, 412, 412, 412, - nil, 412, 412, nil, nil, 412, 412, nil, 286, nil, - nil, 286, nil, nil, 286, 286, nil, nil, 286, nil, - nil, 412, nil, 412, nil, 412, 412, 412, 412, 412, - 412, 412, nil, 412, nil, nil, nil, 286, 286, 286, - 286, nil, 286, 286, nil, nil, nil, 286, 286, nil, - 412, nil, 286, nil, nil, 286, nil, 286, 303, 303, - 303, nil, 303, nil, nil, nil, 303, 303, nil, nil, - nil, 303, nil, 303, 303, 303, 303, 303, 303, 303, - nil, nil, nil, nil, nil, 303, 303, 303, 303, 303, - 303, 303, nil, nil, 303, nil, nil, nil, nil, nil, - nil, 303, nil, nil, 303, 303, 303, 303, 303, 303, - 303, 303, nil, 303, 303, 303, nil, 303, 303, nil, - nil, 303, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 303, nil, nil, 303, nil, nil, 303, 303, nil, - nil, 303, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 303, 303, 303, 303, nil, 303, 303, nil, nil, nil, - 303, 303, nil, 312, 312, 312, nil, 312, 303, nil, - 303, 312, 312, nil, nil, nil, 312, nil, 312, 312, - 312, 312, 312, 312, 312, nil, nil, nil, nil, nil, - 312, 312, 312, 312, 312, 312, 312, nil, nil, 312, - nil, nil, nil, nil, nil, nil, 312, nil, nil, 312, - 312, 312, 312, 312, 312, 312, 312, nil, 312, 312, - 312, nil, 312, 312, 312, 312, 312, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 312, nil, nil, 312, - 312, nil, 312, 312, nil, nil, 312, nil, nil, nil, - nil, nil, 312, nil, nil, nil, nil, nil, nil, nil, - 312, nil, nil, nil, nil, 312, 312, 312, 312, nil, - 312, 312, nil, nil, nil, 312, 312, nil, 315, 315, - 315, nil, 315, 312, nil, 312, 315, 315, nil, nil, - nil, 315, nil, 315, 315, 315, 315, 315, 315, 315, - nil, nil, nil, nil, nil, 315, 315, 315, 315, 315, - 315, 315, nil, nil, 315, nil, nil, nil, nil, nil, - nil, 315, nil, nil, 315, 315, 315, 315, 315, 315, - 315, 315, nil, 315, 315, 315, nil, 315, 315, 315, - 315, 315, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 315, nil, nil, 315, nil, nil, 315, 315, nil, - nil, 315, nil, nil, nil, nil, nil, 315, nil, nil, - nil, nil, nil, nil, nil, 315, nil, nil, nil, nil, - 315, 315, 315, 315, nil, 315, 315, nil, nil, nil, - 315, 315, nil, 328, 328, 328, nil, 328, 315, nil, - 315, 328, 328, nil, nil, nil, 328, nil, 328, 328, - 328, 328, 328, 328, 328, nil, nil, nil, nil, nil, - 328, 328, 328, 328, 328, 328, 328, nil, nil, 328, - nil, nil, nil, nil, nil, nil, 328, nil, nil, 328, - 328, 328, 328, 328, 328, 328, 328, nil, 328, 328, - 328, nil, 328, 328, 328, 328, 328, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 328, nil, nil, 328, - nil, nil, 328, 328, nil, nil, 328, nil, nil, nil, - nil, nil, 328, nil, nil, nil, nil, nil, nil, nil, - 328, nil, nil, nil, nil, 328, 328, 328, 328, nil, - 328, 328, nil, nil, nil, 328, 328, nil, 329, 329, - 329, nil, 329, 328, nil, 328, 329, 329, nil, nil, - nil, 329, nil, 329, 329, 329, 329, 329, 329, 329, - nil, nil, nil, nil, nil, 329, 329, 329, 329, 329, - 329, 329, nil, nil, 329, nil, nil, nil, nil, nil, - nil, 329, nil, nil, 329, 329, 329, 329, 329, 329, - 329, 329, nil, 329, 329, 329, nil, 329, 329, 329, - 329, 329, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 329, nil, nil, 329, nil, nil, 329, 329, nil, - nil, 329, nil, nil, nil, nil, nil, 329, nil, nil, - nil, nil, nil, nil, nil, 329, nil, nil, nil, nil, - 329, 329, 329, 329, nil, 329, 329, nil, nil, nil, - 329, 329, nil, 348, 348, 348, nil, 348, 329, nil, - 329, 348, 348, nil, nil, nil, 348, nil, 348, 348, - 348, 348, 348, 348, 348, nil, nil, nil, nil, nil, - 348, 348, 348, 348, 348, 348, 348, nil, nil, 348, - nil, nil, nil, nil, nil, nil, 348, nil, nil, 348, - 348, 348, 348, 348, 348, 348, 348, nil, 348, 348, - 348, nil, 348, 348, 348, 348, 348, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 348, nil, nil, 348, - nil, nil, 348, 348, nil, nil, 348, nil, nil, nil, - nil, nil, 348, nil, nil, nil, nil, nil, nil, nil, - 348, nil, nil, nil, nil, 348, 348, 348, 348, nil, - 348, 348, nil, nil, nil, 348, 348, nil, 364, 364, - 364, nil, 364, 348, nil, 348, 364, 364, nil, nil, - nil, 364, nil, 364, 364, 364, 364, 364, 364, 364, - nil, nil, nil, nil, nil, 364, 364, 364, 364, 364, - 364, 364, nil, nil, 364, nil, nil, nil, nil, nil, - nil, 364, nil, nil, 364, 364, 364, 364, 364, 364, - 364, 364, nil, 364, 364, 364, nil, 364, 364, 364, - 364, 364, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 364, nil, nil, 364, nil, nil, 364, 364, nil, - nil, 364, nil, nil, nil, nil, nil, 364, nil, nil, - nil, nil, nil, nil, nil, 364, nil, nil, nil, nil, - 364, 364, 364, 364, nil, 364, 364, nil, nil, nil, - 364, 364, nil, 390, 390, 390, nil, 390, 364, nil, - 364, 390, 390, nil, nil, nil, 390, nil, 390, 390, - 390, 390, 390, 390, 390, nil, nil, nil, nil, nil, - 390, 390, 390, 390, 390, 390, 390, nil, nil, 390, - nil, nil, nil, nil, nil, nil, 390, nil, nil, 390, - 390, 390, 390, 390, 390, 390, 390, nil, 390, 390, - 390, nil, 390, 390, 390, 390, 390, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 390, nil, nil, 390, - nil, nil, 390, 390, nil, nil, 390, nil, nil, nil, - nil, nil, 390, nil, nil, nil, nil, nil, nil, nil, - 390, nil, nil, nil, nil, 390, 390, 390, 390, nil, - 390, 390, nil, nil, nil, 390, 390, nil, 427, 427, - 427, nil, 427, 390, nil, 390, 427, 427, nil, nil, - nil, 427, nil, 427, 427, 427, 427, 427, 427, 427, - nil, nil, nil, nil, nil, 427, 427, 427, 427, 427, - 427, 427, nil, nil, 427, nil, nil, nil, nil, nil, - nil, 427, nil, nil, 427, 427, 427, 427, 427, 427, - 427, 427, 427, 427, 427, 427, nil, 427, 427, 427, - 427, 427, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 427, nil, nil, 427, nil, nil, 427, 427, nil, - nil, 427, nil, 427, nil, 427, nil, 427, nil, nil, - nil, nil, nil, nil, nil, 427, nil, nil, nil, nil, - 427, 427, 427, 427, nil, 427, 427, nil, nil, nil, - 427, 427, nil, 429, 429, 429, nil, 429, 427, nil, - 427, 429, 429, nil, nil, nil, 429, nil, 429, 429, - 429, 429, 429, 429, 429, nil, nil, nil, nil, nil, - 429, 429, 429, 429, 429, 429, 429, nil, nil, 429, - nil, nil, nil, nil, nil, nil, 429, nil, nil, 429, - 429, 429, 429, 429, 429, 429, 429, nil, 429, 429, - 429, nil, 429, 429, 429, 429, 429, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 429, nil, nil, 429, - nil, nil, 429, 429, nil, nil, 429, nil, nil, nil, - nil, nil, 429, nil, nil, nil, nil, nil, nil, nil, - 429, nil, nil, nil, nil, 429, 429, 429, 429, nil, - 429, 429, nil, nil, nil, 429, 429, nil, 430, 430, - 430, nil, 430, 429, nil, 429, 430, 430, nil, nil, - nil, 430, nil, 430, 430, 430, 430, 430, 430, 430, - nil, nil, nil, nil, nil, 430, 430, 430, 430, 430, - 430, 430, nil, nil, 430, nil, nil, nil, nil, nil, - nil, 430, nil, nil, 430, 430, 430, 430, 430, 430, - 430, 430, nil, 430, 430, 430, nil, 430, 430, 430, - 430, 430, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 430, nil, nil, 430, nil, nil, 430, 430, nil, - nil, 430, nil, nil, nil, nil, nil, 430, nil, nil, - nil, nil, nil, nil, nil, 430, nil, nil, nil, nil, - 430, 430, 430, 430, nil, 430, 430, nil, nil, nil, - 430, 430, nil, 431, 431, 431, nil, 431, 430, nil, - 430, 431, 431, nil, nil, nil, 431, nil, 431, 431, - 431, 431, 431, 431, 431, nil, nil, nil, nil, nil, - 431, 431, 431, 431, 431, 431, 431, nil, nil, 431, - nil, nil, nil, nil, nil, nil, 431, nil, nil, 431, - 431, 431, 431, 431, 431, 431, 431, nil, 431, 431, - 431, nil, 431, 431, 431, 431, 431, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 431, nil, nil, 431, - nil, nil, 431, 431, nil, nil, 431, nil, nil, nil, - nil, nil, 431, nil, nil, nil, nil, nil, nil, nil, - 431, nil, nil, nil, nil, 431, 431, 431, 431, nil, - 431, 431, nil, nil, nil, 431, 431, nil, 472, 472, - 472, nil, 472, 431, nil, 431, 472, 472, nil, nil, - nil, 472, nil, 472, 472, 472, 472, 472, 472, 472, - nil, nil, nil, nil, nil, 472, 472, 472, 472, 472, - 472, 472, nil, nil, 472, nil, nil, nil, nil, nil, - nil, 472, nil, nil, 472, 472, 472, 472, 472, 472, - 472, 472, 472, 472, 472, 472, nil, 472, 472, 472, - 472, 472, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 472, nil, nil, 472, nil, nil, 472, 472, nil, - nil, 472, nil, 472, nil, 472, nil, 472, nil, nil, - nil, nil, nil, nil, nil, 472, nil, nil, nil, nil, - 472, 472, 472, 472, nil, 472, 472, nil, nil, nil, - 472, 472, nil, 474, 474, 474, nil, 474, 472, nil, - 472, 474, 474, nil, nil, nil, 474, nil, 474, 474, - 474, 474, 474, 474, 474, nil, nil, nil, nil, nil, - 474, 474, 474, 474, 474, 474, 474, nil, nil, 474, - nil, nil, nil, nil, nil, nil, 474, nil, nil, 474, - 474, 474, 474, 474, 474, 474, 474, 474, 474, 474, - 474, nil, 474, 474, 474, 474, 474, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 474, nil, nil, 474, - nil, nil, 474, 474, nil, nil, 474, nil, nil, nil, - 474, nil, 474, nil, nil, nil, nil, nil, nil, nil, - 474, nil, nil, nil, nil, 474, 474, 474, 474, nil, - 474, 474, nil, nil, nil, 474, 474, nil, 476, 476, - 476, nil, 476, 474, nil, 474, 476, 476, nil, nil, - nil, 476, nil, 476, 476, 476, 476, 476, 476, 476, - nil, nil, nil, nil, nil, 476, 476, 476, 476, 476, - 476, 476, nil, nil, 476, nil, nil, nil, nil, nil, - nil, 476, nil, nil, 476, 476, 476, 476, 476, 476, - 476, 476, nil, 476, 476, 476, nil, 476, 476, 476, - 476, 476, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 476, nil, nil, 476, nil, nil, 476, 476, nil, - nil, 476, nil, nil, nil, nil, nil, 476, nil, nil, - nil, nil, nil, nil, nil, 476, nil, nil, nil, nil, - 476, 476, 476, 476, nil, 476, 476, nil, nil, nil, - 476, 476, nil, 480, 480, 480, 480, 480, 476, nil, - 476, 480, 480, nil, nil, nil, 480, nil, 480, 480, - 480, 480, 480, 480, 480, nil, nil, nil, nil, nil, - 480, 480, 480, 480, 480, 480, 480, nil, nil, 480, - nil, nil, nil, nil, nil, 480, 480, nil, 480, 480, - 480, 480, 480, 480, 480, 480, 480, nil, 480, 480, - 480, nil, 480, 480, 480, 480, 480, 457, 457, 457, - 457, 457, 457, 457, 457, 457, 457, 457, nil, 457, - 457, nil, nil, 457, 457, nil, 480, nil, nil, 480, - nil, nil, 480, 480, nil, nil, 480, nil, 480, 457, - nil, 457, 480, 457, 457, 457, 457, 457, 457, 457, - 480, 457, nil, nil, nil, 480, 480, 480, 480, nil, - 480, 480, nil, nil, nil, 480, 480, 457, 457, nil, - nil, nil, 480, 480, nil, 480, 487, 487, 487, nil, - 487, nil, nil, nil, 487, 487, nil, nil, nil, 487, - nil, 487, 487, 487, 487, 487, 487, 487, nil, nil, - nil, nil, nil, 487, 487, 487, 487, 487, 487, 487, - nil, nil, 487, nil, nil, nil, nil, nil, nil, 487, - nil, nil, 487, 487, 487, 487, 487, 487, 487, 487, - nil, 487, 487, 487, nil, 487, 487, nil, nil, 487, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 487, - nil, nil, 487, nil, nil, 487, 487, nil, nil, 487, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 487, 487, - 487, 487, nil, 487, 487, nil, nil, nil, 487, 487, - nil, 489, 489, 489, nil, 489, 487, nil, 487, 489, - 489, nil, nil, nil, 489, nil, 489, 489, 489, 489, - 489, 489, 489, nil, nil, nil, nil, nil, 489, 489, - 489, 489, 489, 489, 489, nil, nil, 489, nil, nil, - nil, nil, nil, nil, 489, nil, nil, 489, 489, 489, - 489, 489, 489, 489, 489, 489, 489, 489, 489, nil, - 489, 489, 489, 489, 489, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 489, nil, nil, 489, nil, nil, - 489, 489, nil, nil, 489, nil, 489, nil, 489, nil, - 489, nil, nil, nil, nil, nil, nil, nil, 489, nil, - nil, nil, nil, 489, 489, 489, 489, nil, 489, 489, - nil, nil, nil, 489, 489, nil, 496, 496, 496, nil, - 496, 489, nil, 489, 496, 496, nil, nil, nil, 496, - nil, 496, 496, 496, 496, 496, 496, 496, nil, nil, - nil, nil, nil, 496, 496, 496, 496, 496, 496, 496, - nil, nil, 496, nil, nil, nil, nil, nil, nil, 496, - nil, nil, 496, 496, 496, 496, 496, 496, 496, 496, - nil, 496, 496, 496, nil, 496, 496, nil, nil, 496, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 496, - nil, nil, 496, nil, nil, 496, 496, nil, nil, 496, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 496, 496, - 496, 496, nil, 496, 496, nil, nil, nil, 496, 496, - nil, 499, 499, 499, nil, 499, 496, nil, 496, 499, - 499, nil, nil, nil, 499, nil, 499, 499, 499, 499, - 499, 499, 499, nil, nil, nil, nil, nil, 499, 499, - 499, 499, 499, 499, 499, nil, nil, 499, nil, nil, - nil, nil, nil, nil, 499, nil, nil, 499, 499, 499, - 499, 499, 499, 499, 499, nil, 499, 499, 499, nil, - 499, 499, 499, 499, 499, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 499, nil, nil, 499, nil, nil, - 499, 499, nil, nil, 499, nil, nil, nil, nil, nil, - 499, nil, nil, nil, nil, nil, nil, nil, 499, nil, - nil, nil, nil, 499, 499, 499, 499, nil, 499, 499, - nil, nil, nil, 499, 499, nil, 500, 500, 500, nil, - 500, 499, nil, 499, 500, 500, nil, nil, nil, 500, - nil, 500, 500, 500, 500, 500, 500, 500, nil, nil, - nil, nil, nil, 500, 500, 500, 500, 500, 500, 500, - nil, nil, 500, nil, nil, nil, nil, nil, nil, 500, - nil, nil, 500, 500, 500, 500, 500, 500, 500, 500, - nil, 500, 500, 500, nil, 500, 500, 500, 500, 500, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 500, - nil, nil, 500, nil, nil, 500, 500, nil, nil, 500, - nil, nil, nil, nil, nil, 500, nil, nil, nil, nil, - nil, nil, nil, 500, nil, nil, nil, nil, 500, 500, - 500, 500, nil, 500, 500, nil, nil, nil, 500, 500, - nil, 501, 501, 501, nil, 501, 500, nil, 500, 501, - 501, nil, nil, nil, 501, nil, 501, 501, 501, 501, - 501, 501, 501, nil, nil, nil, nil, nil, 501, 501, - 501, 501, 501, 501, 501, nil, nil, 501, nil, nil, - nil, nil, nil, nil, 501, nil, nil, 501, 501, 501, - 501, 501, 501, 501, 501, nil, 501, 501, 501, nil, - 501, 501, 501, 501, 501, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 501, nil, nil, 501, nil, nil, - 501, 501, nil, nil, 501, nil, nil, nil, nil, nil, - 501, nil, nil, nil, nil, nil, nil, nil, 501, nil, - nil, nil, nil, 501, 501, 501, 501, nil, 501, 501, - nil, nil, nil, 501, 501, nil, 505, 505, 505, nil, - 505, 501, nil, 501, 505, 505, nil, nil, nil, 505, - nil, 505, 505, 505, 505, 505, 505, 505, nil, nil, - nil, nil, nil, 505, 505, 505, 505, 505, 505, 505, - nil, nil, 505, nil, nil, nil, nil, nil, nil, 505, - nil, nil, 505, 505, 505, 505, 505, 505, 505, 505, - nil, 505, 505, 505, nil, 505, 505, 505, 505, 505, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 505, - nil, nil, 505, nil, nil, 505, 505, nil, nil, 505, - nil, nil, nil, nil, nil, 505, nil, nil, nil, nil, - nil, nil, nil, 505, nil, nil, nil, nil, 505, 505, - 505, 505, nil, 505, 505, nil, nil, nil, 505, 505, - nil, 507, 507, 507, nil, 507, 505, nil, 505, 507, - 507, nil, nil, nil, 507, nil, 507, 507, 507, 507, - 507, 507, 507, nil, nil, nil, nil, nil, 507, 507, - 507, 507, 507, 507, 507, nil, nil, 507, nil, nil, - nil, nil, nil, nil, 507, nil, nil, 507, 507, 507, - 507, 507, 507, 507, 507, nil, 507, 507, 507, nil, - 507, 507, 507, 507, 507, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 507, nil, nil, 507, nil, nil, - 507, 507, nil, nil, 507, nil, 507, nil, nil, nil, - 507, nil, nil, nil, nil, nil, nil, nil, 507, nil, - nil, nil, nil, 507, 507, 507, 507, nil, 507, 507, - nil, nil, nil, 507, 507, nil, 511, 511, 511, nil, - 511, 507, nil, 507, 511, 511, nil, nil, nil, 511, - nil, 511, 511, 511, 511, 511, 511, 511, nil, nil, - nil, nil, nil, 511, 511, 511, 511, 511, 511, 511, - nil, nil, 511, nil, nil, nil, nil, nil, nil, 511, - nil, nil, 511, 511, 511, 511, 511, 511, 511, 511, - 511, 511, 511, 511, nil, 511, 511, 511, 511, 511, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 511, - nil, nil, 511, nil, nil, 511, 511, nil, nil, 511, - nil, 511, nil, nil, nil, 511, nil, nil, nil, nil, - nil, nil, nil, 511, nil, nil, nil, nil, 511, 511, - 511, 511, nil, 511, 511, nil, nil, nil, 511, 511, - nil, 514, 514, 514, nil, 514, 511, nil, 511, 514, - 514, nil, nil, nil, 514, nil, 514, 514, 514, 514, - 514, 514, 514, nil, nil, nil, nil, nil, 514, 514, - 514, 514, 514, 514, 514, nil, nil, 514, nil, nil, - nil, nil, nil, nil, 514, nil, nil, 514, 514, 514, - 514, 514, 514, 514, 514, 514, 514, 514, 514, nil, - 514, 514, 514, 514, 514, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 514, nil, nil, 514, nil, nil, - 514, 514, nil, nil, 514, nil, nil, nil, nil, nil, - 514, nil, nil, nil, nil, nil, nil, nil, 514, nil, - nil, nil, nil, 514, 514, 514, 514, nil, 514, 514, - nil, nil, nil, 514, 514, nil, 528, 528, 528, nil, - 528, 514, nil, 514, 528, 528, nil, nil, nil, 528, - nil, 528, 528, 528, 528, 528, 528, 528, nil, nil, - nil, nil, nil, 528, 528, 528, 528, 528, 528, 528, - nil, nil, 528, nil, nil, nil, nil, nil, nil, 528, - nil, nil, 528, 528, 528, 528, 528, 528, 528, 528, - nil, 528, 528, 528, nil, 528, 528, 528, 528, 528, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 528, - nil, nil, 528, nil, nil, 528, 528, nil, nil, 528, - nil, 528, nil, nil, nil, 528, nil, nil, nil, nil, - nil, nil, nil, 528, nil, nil, nil, nil, 528, 528, - 528, 528, nil, 528, 528, nil, nil, nil, 528, 528, - nil, 529, 529, 529, nil, 529, 528, nil, 528, 529, - 529, nil, nil, nil, 529, nil, 529, 529, 529, 529, - 529, 529, 529, nil, nil, nil, nil, nil, 529, 529, - 529, 529, 529, 529, 529, nil, nil, 529, nil, nil, - nil, nil, nil, nil, 529, nil, nil, 529, 529, 529, - 529, 529, 529, 529, 529, 529, 529, 529, 529, nil, - 529, 529, 529, 529, 529, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 529, nil, nil, 529, nil, nil, - 529, 529, nil, nil, 529, nil, 529, nil, 529, nil, - 529, nil, nil, nil, nil, nil, nil, nil, 529, nil, - nil, nil, nil, 529, 529, 529, 529, nil, 529, 529, - nil, nil, nil, 529, 529, nil, 539, 539, 539, nil, - 539, 529, nil, 529, 539, 539, nil, nil, nil, 539, - nil, 539, 539, 539, 539, 539, 539, 539, nil, nil, - nil, nil, nil, 539, 539, 539, 539, 539, 539, 539, - nil, nil, 539, nil, nil, nil, nil, nil, nil, 539, - nil, nil, 539, 539, 539, 539, 539, 539, 539, 539, - 539, 539, 539, 539, nil, 539, 539, 539, 539, 539, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 539, - nil, nil, 539, nil, nil, 539, 539, nil, nil, 539, - nil, 539, nil, 539, nil, 539, nil, nil, nil, nil, - nil, nil, nil, 539, nil, nil, nil, nil, 539, 539, - 539, 539, nil, 539, 539, nil, nil, nil, 539, 539, - nil, 542, 542, 542, nil, 542, 539, nil, 539, 542, - 542, nil, nil, nil, 542, nil, 542, 542, 542, 542, - 542, 542, 542, nil, nil, nil, nil, nil, 542, 542, - 542, 542, 542, 542, 542, nil, nil, 542, nil, nil, - nil, nil, nil, nil, 542, nil, nil, 542, 542, 542, - 542, 542, 542, 542, 542, nil, 542, 542, 542, nil, - 542, 542, 542, 542, 542, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 542, nil, nil, 542, nil, nil, - 542, 542, nil, nil, 542, nil, nil, nil, nil, nil, - 542, nil, nil, nil, nil, nil, nil, nil, 542, nil, - nil, nil, nil, 542, 542, 542, 542, nil, 542, 542, - nil, nil, nil, 542, 542, nil, 571, 571, 571, nil, - 571, 542, nil, 542, 571, 571, nil, nil, nil, 571, - nil, 571, 571, 571, 571, 571, 571, 571, nil, nil, - nil, nil, nil, 571, 571, 571, 571, 571, 571, 571, - nil, nil, 571, nil, nil, nil, nil, nil, nil, 571, - nil, nil, 571, 571, 571, 571, 571, 571, 571, 571, - nil, 571, 571, 571, nil, 571, 571, 571, 571, 571, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 571, - nil, nil, 571, nil, nil, 571, 571, nil, nil, 571, - nil, 571, nil, nil, nil, 571, nil, nil, nil, nil, - nil, nil, nil, 571, nil, nil, nil, nil, 571, 571, - 571, 571, nil, 571, 571, nil, nil, nil, 571, 571, - nil, 572, 572, 572, nil, 572, 571, nil, 571, 572, - 572, nil, nil, nil, 572, nil, 572, 572, 572, 572, - 572, 572, 572, nil, nil, nil, nil, nil, 572, 572, - 572, 572, 572, 572, 572, nil, nil, 572, nil, nil, - nil, nil, nil, nil, 572, nil, nil, 572, 572, 572, - 572, 572, 572, 572, 572, nil, 572, 572, 572, nil, - 572, 572, 572, 572, 572, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 572, nil, nil, 572, nil, nil, - 572, 572, nil, nil, 572, nil, nil, nil, nil, nil, - 572, nil, nil, nil, nil, nil, nil, nil, 572, nil, - nil, nil, nil, 572, 572, 572, 572, nil, 572, 572, - nil, nil, nil, 572, 572, nil, 575, 575, 575, nil, - 575, 572, nil, 572, 575, 575, nil, nil, nil, 575, - nil, 575, 575, 575, 575, 575, 575, 575, nil, nil, - nil, nil, nil, 575, 575, 575, 575, 575, 575, 575, - nil, nil, 575, nil, nil, nil, nil, nil, nil, 575, - nil, nil, 575, 575, 575, 575, 575, 575, 575, 575, - 575, 575, 575, 575, nil, 575, 575, 575, 575, 575, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 575, - nil, nil, 575, nil, nil, 575, 575, nil, nil, 575, - nil, 575, nil, 575, nil, 575, nil, nil, nil, nil, - nil, nil, nil, 575, nil, nil, nil, nil, 575, 575, - 575, 575, nil, 575, 575, nil, nil, nil, 575, 575, - nil, 576, 576, 576, nil, 576, 575, nil, 575, 576, - 576, nil, nil, nil, 576, nil, 576, 576, 576, 576, - 576, 576, 576, nil, nil, nil, nil, nil, 576, 576, - 576, 576, 576, 576, 576, nil, nil, 576, nil, nil, - nil, nil, nil, nil, 576, nil, nil, 576, 576, 576, - 576, 576, 576, 576, 576, 576, 576, 576, 576, nil, - 576, 576, 576, 576, 576, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 576, nil, nil, 576, nil, nil, - 576, 576, nil, nil, 576, nil, nil, nil, 576, nil, - 576, nil, nil, nil, nil, nil, nil, nil, 576, nil, - nil, nil, nil, 576, 576, 576, 576, nil, 576, 576, - nil, nil, nil, 576, 576, nil, 577, 577, 577, nil, - 577, 576, nil, 576, 577, 577, nil, nil, nil, 577, - nil, 577, 577, 577, 577, 577, 577, 577, nil, nil, - nil, nil, nil, 577, 577, 577, 577, 577, 577, 577, - nil, nil, 577, nil, nil, nil, nil, nil, nil, 577, - nil, nil, 577, 577, 577, 577, 577, 577, 577, 577, - nil, 577, 577, 577, nil, 577, 577, 577, 577, 577, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 577, - nil, nil, 577, nil, nil, 577, 577, nil, nil, 577, - nil, nil, nil, nil, nil, 577, nil, nil, nil, nil, - nil, nil, nil, 577, nil, nil, nil, nil, 577, 577, - 577, 577, nil, 577, 577, nil, nil, nil, 577, 577, - nil, 578, 578, 578, nil, 578, 577, nil, 577, 578, - 578, nil, nil, nil, 578, nil, 578, 578, 578, 578, - 578, 578, 578, nil, nil, nil, nil, nil, 578, 578, - 578, 578, 578, 578, 578, nil, nil, 578, nil, nil, - nil, nil, nil, nil, 578, nil, nil, 578, 578, 578, - 578, 578, 578, 578, 578, nil, 578, 578, 578, nil, - 578, 578, 578, 578, 578, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 578, nil, nil, 578, nil, nil, - 578, 578, nil, nil, 578, nil, nil, nil, nil, nil, - 578, nil, nil, nil, nil, nil, nil, nil, 578, nil, - nil, nil, nil, 578, 578, 578, 578, nil, 578, 578, - nil, nil, nil, 578, 578, nil, 582, 582, 582, nil, - 582, 578, nil, 578, 582, 582, nil, nil, nil, 582, - nil, 582, 582, 582, 582, 582, 582, 582, nil, nil, - nil, nil, nil, 582, 582, 582, 582, 582, 582, 582, - nil, nil, 582, nil, nil, nil, nil, nil, nil, 582, - nil, nil, 582, 582, 582, 582, 582, 582, 582, 582, - nil, 582, 582, 582, nil, 582, 582, 582, 582, 582, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 582, - nil, nil, 582, nil, nil, 582, 582, nil, nil, 582, - nil, nil, nil, nil, nil, 582, nil, nil, nil, nil, - nil, nil, nil, 582, nil, nil, nil, nil, 582, 582, - 582, 582, nil, 582, 582, nil, nil, nil, 582, 582, - nil, 583, 583, 583, nil, 583, 582, nil, 582, 583, - 583, nil, nil, nil, 583, nil, 583, 583, 583, 583, - 583, 583, 583, nil, nil, nil, nil, nil, 583, 583, - 583, 583, 583, 583, 583, nil, nil, 583, nil, nil, - nil, nil, nil, nil, 583, nil, nil, 583, 583, 583, - 583, 583, 583, 583, 583, nil, 583, 583, 583, nil, - 583, 583, 583, 583, 583, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 583, nil, nil, 583, nil, nil, - 583, 583, nil, nil, 583, nil, nil, nil, nil, nil, - 583, nil, nil, nil, nil, nil, nil, nil, 583, nil, - nil, nil, nil, 583, 583, 583, 583, nil, 583, 583, - nil, nil, nil, 583, 583, nil, 586, 586, 586, nil, - 586, 583, nil, 583, 586, 586, nil, nil, nil, 586, - nil, 586, 586, 586, 586, 586, 586, 586, nil, nil, - nil, nil, nil, 586, 586, 586, 586, 586, 586, 586, - nil, nil, 586, nil, nil, nil, nil, nil, nil, 586, - nil, nil, 586, 586, 586, 586, 586, 586, 586, 586, - nil, 586, 586, 586, nil, 586, 586, 586, 586, 586, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 586, - nil, nil, 586, nil, nil, 586, 586, nil, nil, 586, - nil, nil, nil, nil, nil, 586, nil, nil, nil, nil, - nil, nil, nil, 586, nil, nil, nil, nil, 586, 586, - 586, 586, nil, 586, 586, nil, nil, nil, 586, 586, - nil, 587, 587, 587, nil, 587, 586, nil, 586, 587, - 587, nil, nil, nil, 587, nil, 587, 587, 587, 587, - 587, 587, 587, nil, nil, nil, nil, nil, 587, 587, - 587, 587, 587, 587, 587, nil, nil, 587, nil, nil, - nil, nil, nil, nil, 587, nil, nil, 587, 587, 587, - 587, 587, 587, 587, 587, nil, 587, 587, 587, nil, - 587, 587, 587, 587, 587, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 587, nil, nil, 587, nil, nil, - 587, 587, nil, nil, 587, nil, nil, nil, nil, nil, - 587, nil, nil, nil, nil, nil, nil, nil, 587, nil, - nil, nil, nil, 587, 587, 587, 587, nil, 587, 587, - nil, nil, nil, 587, 587, nil, 613, 613, 613, nil, - 613, 587, nil, 587, 613, 613, nil, nil, nil, 613, - nil, 613, 613, 613, 613, 613, 613, 613, nil, nil, - nil, nil, nil, 613, 613, 613, 613, 613, 613, 613, - nil, nil, 613, nil, nil, nil, nil, nil, nil, 613, - nil, nil, 613, 613, 613, 613, 613, 613, 613, 613, - nil, 613, 613, 613, nil, 613, 613, 613, 613, 613, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 613, - nil, nil, 613, nil, nil, 613, 613, nil, nil, 613, - nil, nil, nil, nil, nil, 613, nil, nil, nil, nil, - nil, nil, nil, 613, nil, nil, nil, nil, 613, 613, - 613, 613, nil, 613, 613, nil, nil, nil, 613, 613, - nil, 618, 618, 618, nil, 618, 613, nil, 613, 618, - 618, nil, nil, nil, 618, nil, 618, 618, 618, 618, - 618, 618, 618, nil, nil, nil, nil, nil, 618, 618, - 618, 618, 618, 618, 618, nil, nil, 618, nil, nil, - nil, nil, nil, nil, 618, nil, nil, 618, 618, 618, - 618, 618, 618, 618, 618, nil, 618, 618, 618, nil, - 618, 618, nil, nil, 618, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 618, nil, nil, 618, nil, nil, - 618, 618, nil, nil, 618, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 618, 618, 618, 618, nil, 618, 618, - nil, nil, nil, 618, 618, nil, 629, 629, 629, nil, - 629, 618, nil, 618, 629, 629, nil, nil, nil, 629, - nil, 629, 629, 629, 629, 629, 629, 629, nil, nil, - nil, nil, nil, 629, 629, 629, 629, 629, 629, 629, - nil, nil, 629, nil, nil, nil, nil, nil, nil, 629, - nil, nil, 629, 629, 629, 629, 629, 629, 629, 629, - nil, 629, 629, 629, nil, 629, 629, nil, nil, 629, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 629, - nil, nil, 629, nil, nil, 629, 629, nil, nil, 629, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 629, 629, - 629, 629, nil, 629, 629, nil, nil, nil, 629, 629, - nil, 681, 681, 681, nil, 681, 629, nil, 629, 681, - 681, nil, nil, nil, 681, nil, 681, 681, 681, 681, - 681, 681, 681, nil, nil, nil, nil, nil, 681, 681, - 681, 681, 681, 681, 681, nil, nil, 681, nil, nil, - nil, nil, nil, nil, 681, nil, nil, 681, 681, 681, - 681, 681, 681, 681, 681, nil, 681, 681, 681, nil, - 681, 681, 681, 681, 681, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 681, nil, nil, 681, nil, nil, - 681, 681, nil, nil, 681, nil, nil, nil, nil, nil, - 681, nil, nil, nil, nil, nil, nil, nil, 681, nil, - nil, nil, nil, 681, 681, 681, 681, nil, 681, 681, - nil, nil, nil, 681, 681, nil, 708, 708, 708, nil, - 708, 681, nil, 681, 708, 708, nil, nil, nil, 708, - nil, 708, 708, 708, 708, 708, 708, 708, nil, nil, - nil, nil, nil, 708, 708, 708, 708, 708, 708, 708, - nil, nil, 708, nil, nil, nil, nil, nil, nil, 708, - nil, nil, 708, 708, 708, 708, 708, 708, 708, 708, - nil, 708, 708, 708, nil, 708, 708, 708, 708, 708, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 708, - nil, nil, 708, nil, nil, 708, 708, nil, nil, 708, - nil, nil, nil, nil, nil, 708, nil, nil, nil, nil, - nil, nil, nil, 708, nil, nil, nil, nil, 708, 708, - 708, 708, nil, 708, 708, nil, nil, nil, 708, 708, - nil, 710, 710, 710, nil, 710, 708, nil, 708, 710, - 710, nil, nil, nil, 710, nil, 710, 710, 710, 710, - 710, 710, 710, nil, nil, nil, nil, nil, 710, 710, - 710, 710, 710, 710, 710, nil, nil, 710, nil, nil, - nil, nil, nil, nil, 710, nil, nil, 710, 710, 710, - 710, 710, 710, 710, 710, nil, 710, 710, 710, nil, - 710, 710, 710, 710, 710, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 710, nil, nil, 710, nil, nil, - 710, 710, nil, nil, 710, nil, nil, nil, nil, nil, - 710, nil, nil, nil, nil, nil, nil, nil, 710, nil, - nil, nil, nil, 710, 710, 710, 710, nil, 710, 710, - nil, nil, nil, 710, 710, nil, 724, 724, 724, nil, - 724, 710, nil, 710, 724, 724, nil, nil, nil, 724, - nil, 724, 724, 724, 724, 724, 724, 724, nil, nil, - nil, nil, nil, 724, 724, 724, 724, 724, 724, 724, - nil, nil, 724, nil, nil, nil, nil, nil, nil, 724, - nil, nil, 724, 724, 724, 724, 724, 724, 724, 724, - nil, 724, 724, 724, nil, 724, 724, 724, 724, 724, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 724, - nil, nil, 724, nil, nil, 724, 724, nil, nil, 724, - nil, nil, nil, nil, nil, 724, nil, nil, nil, nil, - nil, nil, nil, 724, nil, nil, nil, nil, 724, 724, - 724, 724, nil, 724, 724, nil, nil, nil, 724, 724, - nil, 725, 725, 725, nil, 725, 724, nil, 724, 725, - 725, nil, nil, nil, 725, nil, 725, 725, 725, 725, - 725, 725, 725, nil, nil, nil, nil, nil, 725, 725, - 725, 725, 725, 725, 725, nil, nil, 725, nil, nil, - nil, nil, nil, nil, 725, nil, nil, 725, 725, 725, - 725, 725, 725, 725, 725, nil, 725, 725, 725, nil, - 725, 725, 725, 725, 725, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 725, nil, nil, 725, nil, nil, - 725, 725, nil, nil, 725, nil, nil, nil, nil, nil, - 725, nil, nil, nil, nil, nil, nil, nil, 725, nil, - nil, nil, nil, 725, 725, 725, 725, nil, 725, 725, - nil, nil, nil, 725, 725, nil, 726, 726, 726, nil, - 726, 725, nil, 725, 726, 726, nil, nil, nil, 726, - nil, 726, 726, 726, 726, 726, 726, 726, nil, nil, - nil, nil, nil, 726, 726, 726, 726, 726, 726, 726, - nil, nil, 726, nil, nil, nil, nil, nil, nil, 726, - nil, nil, 726, 726, 726, 726, 726, 726, 726, 726, - nil, 726, 726, 726, nil, 726, 726, 726, 726, 726, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 726, - nil, nil, 726, nil, nil, 726, 726, nil, nil, 726, - nil, nil, nil, nil, nil, 726, nil, nil, nil, nil, - nil, nil, nil, 726, nil, nil, nil, nil, 726, 726, - 726, 726, nil, 726, 726, nil, nil, nil, 726, 726, - nil, 727, 727, 727, nil, 727, 726, nil, 726, 727, - 727, nil, nil, nil, 727, nil, 727, 727, 727, 727, - 727, 727, 727, nil, nil, nil, nil, nil, 727, 727, - 727, 727, 727, 727, 727, nil, nil, 727, nil, nil, - nil, nil, nil, nil, 727, nil, nil, 727, 727, 727, - 727, 727, 727, 727, 727, nil, 727, 727, 727, nil, - 727, 727, 727, 727, 727, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 727, nil, nil, 727, nil, nil, - 727, 727, nil, nil, 727, nil, nil, nil, nil, nil, - 727, nil, nil, nil, nil, nil, nil, nil, 727, nil, - nil, nil, nil, 727, 727, 727, 727, nil, 727, 727, - nil, nil, nil, 727, 727, nil, 729, 729, 729, nil, - 729, 727, nil, 727, 729, 729, nil, nil, nil, 729, - nil, 729, 729, 729, 729, 729, 729, 729, nil, nil, - nil, nil, nil, 729, 729, 729, 729, 729, 729, 729, - nil, nil, 729, nil, nil, nil, nil, nil, nil, 729, - nil, nil, 729, 729, 729, 729, 729, 729, 729, 729, - nil, 729, 729, 729, nil, 729, 729, 729, 729, 729, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 729, - nil, nil, 729, nil, nil, 729, 729, nil, nil, 729, - nil, nil, nil, nil, nil, 729, nil, nil, nil, nil, - nil, nil, nil, 729, nil, nil, nil, nil, 729, 729, - 729, 729, nil, 729, 729, nil, nil, nil, 729, 729, - nil, 754, 754, 754, nil, 754, 729, nil, 729, 754, - 754, nil, nil, nil, 754, nil, 754, 754, 754, 754, - 754, 754, 754, nil, nil, nil, nil, nil, 754, 754, - 754, 754, 754, 754, 754, nil, nil, 754, nil, nil, - nil, nil, nil, nil, 754, nil, nil, 754, 754, 754, - 754, 754, 754, 754, 754, nil, 754, 754, 754, nil, - 754, 754, nil, nil, 754, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 754, nil, nil, 754, nil, nil, - 754, 754, nil, nil, 754, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 754, 754, 754, 754, nil, 754, 754, - nil, nil, nil, 754, 754, nil, 768, 768, 768, nil, - 768, 754, nil, 754, 768, 768, nil, nil, nil, 768, - nil, 768, 768, 768, 768, 768, 768, 768, nil, nil, - nil, nil, nil, 768, 768, 768, 768, 768, 768, 768, - nil, nil, 768, nil, nil, nil, nil, nil, nil, 768, - nil, nil, 768, 768, 768, 768, 768, 768, 768, 768, - nil, 768, 768, 768, nil, 768, 768, 768, 768, 768, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 768, - nil, nil, 768, nil, nil, 768, 768, nil, nil, 768, - nil, nil, nil, nil, nil, 768, nil, nil, nil, nil, - nil, nil, nil, 768, nil, nil, nil, nil, 768, 768, - 768, 768, nil, 768, 768, nil, nil, nil, 768, 768, - nil, 780, 780, 780, nil, 780, 768, nil, 768, 780, - 780, nil, nil, nil, 780, nil, 780, 780, 780, 780, - 780, 780, 780, nil, nil, nil, nil, nil, 780, 780, - 780, 780, 780, 780, 780, nil, nil, 780, nil, nil, - nil, nil, nil, nil, 780, nil, nil, 780, 780, 780, - 780, 780, 780, 780, 780, nil, 780, 780, 780, nil, - 780, 780, 780, 780, 780, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 780, nil, nil, 780, nil, nil, - 780, 780, nil, nil, 780, nil, nil, nil, nil, nil, - 780, nil, nil, nil, nil, nil, nil, nil, 780, nil, - nil, nil, nil, 780, 780, 780, 780, nil, 780, 780, - nil, nil, nil, 780, 780, nil, 785, 785, 785, nil, - 785, 780, nil, 780, 785, 785, nil, nil, nil, 785, - nil, 785, 785, 785, 785, 785, 785, 785, nil, nil, - nil, nil, nil, 785, 785, 785, 785, 785, 785, 785, - nil, nil, 785, nil, nil, nil, nil, nil, nil, 785, - nil, nil, 785, 785, 785, 785, 785, 785, 785, 785, - nil, 785, 785, 785, nil, 785, 785, 785, 785, 785, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 785, - nil, nil, 785, nil, nil, 785, 785, nil, nil, 785, - nil, 785, nil, nil, nil, 785, nil, nil, nil, nil, - nil, nil, nil, 785, nil, nil, nil, nil, 785, 785, - 785, 785, nil, 785, 785, nil, nil, nil, 785, 785, - nil, 802, 802, 802, nil, 802, 785, nil, 785, 802, - 802, nil, nil, nil, 802, nil, 802, 802, 802, 802, - 802, 802, 802, nil, nil, nil, nil, nil, 802, 802, - 802, 802, 802, 802, 802, nil, nil, 802, nil, nil, - nil, nil, nil, nil, 802, nil, nil, 802, 802, 802, - 802, 802, 802, 802, 802, 802, 802, 802, 802, nil, - 802, 802, 802, 802, 802, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 802, nil, nil, 802, nil, nil, - 802, 802, nil, nil, 802, nil, nil, nil, 802, nil, - 802, nil, nil, nil, nil, nil, nil, nil, 802, nil, - nil, nil, nil, 802, 802, 802, 802, nil, 802, 802, - nil, nil, nil, 802, 802, nil, 803, 803, 803, nil, - 803, 802, nil, 802, 803, 803, nil, nil, nil, 803, - nil, 803, 803, 803, 803, 803, 803, 803, nil, nil, - nil, nil, nil, 803, 803, 803, 803, 803, 803, 803, - nil, nil, 803, nil, nil, nil, nil, nil, nil, 803, - nil, nil, 803, 803, 803, 803, 803, 803, 803, 803, - nil, 803, 803, 803, nil, 803, 803, 803, 803, 803, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 803, - nil, nil, 803, nil, nil, 803, 803, nil, nil, 803, - nil, nil, nil, nil, nil, 803, nil, nil, nil, nil, - nil, nil, nil, 803, nil, nil, nil, nil, 803, 803, - 803, 803, nil, 803, 803, nil, nil, nil, 803, 803, - nil, 817, 817, 817, nil, 817, 803, nil, 803, 817, - 817, nil, nil, nil, 817, nil, 817, 817, 817, 817, - 817, 817, 817, nil, nil, nil, nil, nil, 817, 817, - 817, 817, 817, 817, 817, nil, nil, 817, nil, nil, - nil, nil, nil, nil, 817, nil, nil, 817, 817, 817, - 817, 817, 817, 817, 817, nil, 817, 817, 817, nil, - 817, 817, nil, nil, 817, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 817, nil, nil, 817, nil, nil, - 817, 817, nil, nil, 817, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 817, 817, 817, 817, nil, 817, 817, - nil, nil, nil, 817, 817, nil, 874, 874, 874, nil, - 874, 817, nil, 817, 874, 874, nil, nil, nil, 874, - nil, 874, 874, 874, 874, 874, 874, 874, nil, nil, - nil, nil, nil, 874, 874, 874, 874, 874, 874, 874, - nil, nil, 874, nil, nil, nil, nil, nil, nil, 874, - nil, nil, 874, 874, 874, 874, 874, 874, 874, 874, - 874, 874, 874, 874, nil, 874, 874, 874, 874, 874, - 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, - 504, nil, 504, 504, nil, nil, 504, 504, nil, 874, - nil, nil, 874, nil, nil, 874, 874, nil, nil, 874, - nil, 874, 504, 874, 504, 874, 504, 504, 504, 504, - 504, 504, 504, 874, 504, nil, nil, nil, 874, 874, - 874, 874, nil, 874, 874, nil, nil, nil, 874, 874, - nil, 504, 26, nil, nil, nil, 874, nil, 874, 26, - 26, 26, nil, nil, 26, 26, 26, nil, 26, nil, - nil, nil, nil, nil, nil, nil, nil, 26, 26, 26, - nil, nil, nil, nil, nil, nil, nil, nil, 26, 26, - nil, 26, 26, 26, 26, 26, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, nil, nil, 26, 26, 26, nil, nil, 26, - nil, 26, 26, nil, nil, 26, 26, nil, 26, nil, - 26, nil, 26, nil, 26, 26, 26, 26, 26, 26, - 26, 27, 26, 26, 26, nil, nil, nil, 27, 27, - 27, nil, nil, 27, 27, 27, nil, 27, 26, 26, - nil, 26, nil, 26, nil, nil, nil, 27, 27, nil, - nil, nil, nil, nil, nil, nil, nil, 27, 27, nil, - 27, 27, 27, 27, 27, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, nil, nil, 27, 27, 27, nil, nil, 27, nil, - 27, 27, nil, nil, 27, 27, nil, 27, nil, 27, - nil, 27, nil, 27, 27, 27, 27, 27, 27, 27, - 400, 27, nil, 27, nil, nil, nil, 400, 400, 400, - nil, nil, 400, 400, 400, nil, 400, 27, 27, nil, - 27, nil, 27, nil, nil, 400, 400, 400, nil, nil, - nil, nil, nil, nil, nil, nil, 400, 400, nil, 400, - 400, 400, 400, 400, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 400, 400, 400, 400, - 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, - nil, nil, 400, 400, 400, nil, nil, 400, nil, 400, - 400, nil, nil, 400, 400, nil, 400, nil, 400, nil, - 400, nil, 400, 400, 400, 400, 400, 400, 400, 459, - 400, 400, 400, nil, nil, nil, 459, 459, 459, nil, - nil, 459, 459, 459, nil, 459, 400, 400, nil, 400, - nil, 400, nil, nil, nil, 459, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 459, 459, nil, 459, 459, - 459, 459, 459, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 462, nil, nil, nil, nil, nil, - nil, 462, 462, 462, nil, nil, 462, 462, 462, nil, - 462, nil, nil, nil, nil, nil, 459, nil, nil, nil, - 462, nil, nil, 459, nil, nil, nil, nil, 459, 459, - 462, 462, nil, 462, 462, 462, 462, 462, nil, nil, - nil, nil, nil, 203, 203, nil, nil, 203, nil, nil, - nil, 459, nil, nil, nil, 203, 203, nil, 203, 203, - 203, 203, 203, 203, 203, 459, nil, 203, 203, nil, - 459, 462, 203, 203, 203, 203, nil, nil, 462, nil, - nil, 203, nil, 462, 462, nil, nil, nil, nil, 203, - 203, nil, 203, 203, 203, 203, 203, 203, 203, 203, - 203, 203, 203, nil, nil, 203, 462, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 462, nil, nil, nil, nil, 462, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - nil, nil, nil, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, nil, nil, nil, nil, nil, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, nil, 8, - nil, nil, nil, nil, nil, nil, nil, 8, 8, nil, - 8, 8, 8, 8, 8, 8, 8, nil, nil, 8, - 8, nil, nil, nil, 8, 8, 8, 8, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 8, 8, nil, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, nil, nil, 8, 8, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 8, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, nil, nil, nil, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, nil, nil, nil, - nil, nil, 9, 9, 9, 9, 9, 9, 9, 9, - 9, nil, nil, 9, nil, nil, nil, nil, nil, nil, - nil, 9, 9, nil, 9, 9, 9, 9, 9, 9, - 9, nil, nil, 9, 9, nil, nil, nil, 9, 9, - 9, 9, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 9, 9, nil, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, nil, - nil, 9, 9, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 9, 381, 381, 381, 381, 381, 381, - 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, - 381, 381, 381, 381, 381, 381, 381, 381, nil, nil, - nil, 381, 381, 381, 381, 381, 381, 381, 381, 381, - 381, nil, nil, nil, nil, nil, 381, 381, 381, 381, - 381, 381, 381, 381, 381, nil, nil, 381, nil, nil, - nil, nil, nil, nil, nil, 381, 381, nil, 381, 381, - 381, 381, 381, 381, 381, nil, nil, 381, 381, nil, - nil, nil, 381, 381, 381, 381, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 381, - 381, nil, 381, 381, 381, 381, 381, 381, 381, 381, - 381, 381, 381, nil, nil, 381, 381, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 381, 568, 568, - 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, - 568, 568, 568, 568, 568, 568, 568, 568, 568, 568, - 568, 568, nil, nil, nil, 568, 568, 568, 568, 568, - 568, 568, 568, 568, 568, nil, nil, nil, nil, nil, - 568, 568, 568, 568, 568, 568, 568, 568, 568, nil, - nil, 568, nil, nil, nil, nil, nil, nil, nil, 568, - 568, nil, 568, 568, 568, 568, 568, 568, 568, nil, - nil, 568, 568, nil, nil, nil, 568, 568, 568, 568, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 568, 568, nil, 568, 568, 568, 568, - 568, 568, 568, 568, 568, 568, 568, nil, nil, 568, - 568, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 568, 68, 68, 68, 68, 68, 68, 68, 68, - 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, - 68, 68, 68, 68, 68, 68, nil, nil, nil, 68, - 68, 68, 68, 68, 68, 68, 68, 68, 68, nil, - nil, nil, nil, nil, 68, 68, 68, 68, 68, 68, - 68, 68, 68, 68, 68, 68, nil, 68, nil, nil, - nil, nil, nil, 68, 68, nil, 68, 68, 68, 68, - 68, 68, 68, nil, nil, 68, 68, nil, nil, nil, - 68, 68, 68, 68, nil, nil, nil, nil, nil, 68, - nil, nil, nil, nil, nil, nil, nil, 68, 68, nil, - 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, - 68, nil, nil, 68, 694, 694, 694, 694, 694, 694, - 694, 694, 694, 694, 694, 694, 694, 694, 694, 694, - 694, 694, 694, 694, 694, 694, 694, 694, nil, nil, - nil, 694, 694, 694, 694, 694, 694, 694, 694, 694, - 694, nil, nil, nil, nil, nil, 694, 694, 694, 694, - 694, 694, 694, 694, 694, nil, nil, 694, nil, nil, - nil, nil, nil, nil, nil, 694, 694, nil, 694, 694, - 694, 694, 694, 694, 694, nil, nil, 694, 694, nil, - nil, nil, 694, 694, 694, 694, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 694, - 694, nil, 694, 694, 694, 694, 694, 694, 694, 694, - 694, 694, 694, 204, 204, 694, nil, 204, nil, nil, - nil, nil, nil, nil, nil, 204, 204, nil, 204, 204, - 204, 204, 204, 204, 204, nil, nil, 204, 204, nil, - nil, nil, 204, 204, 204, 204, nil, nil, nil, nil, - nil, 204, nil, nil, nil, nil, nil, nil, nil, 204, - 204, nil, 204, 204, 204, 204, 204, 204, 204, 204, - 204, 204, 204, 252, 252, 204, nil, 252, nil, nil, - nil, nil, nil, nil, nil, 252, 252, nil, 252, 252, - 252, 252, 252, 252, 252, nil, nil, 252, 252, nil, - nil, nil, 252, 252, 252, 252, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 252, - 252, nil, 252, 252, 252, 252, 252, 252, 252, 252, - 252, 252, 252, 253, 253, 252, nil, 253, nil, nil, - nil, nil, nil, nil, nil, 253, 253, nil, 253, 253, - 253, 253, 253, 253, 253, nil, nil, 253, 253, nil, - nil, nil, 253, 253, 253, 253, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 253, - 253, nil, 253, 253, 253, 253, 253, 253, 253, 253, - 253, 253, 253, 425, 425, 253, nil, 425, nil, nil, - nil, nil, nil, nil, nil, 425, 425, nil, 425, 425, - 425, 425, 425, 425, 425, nil, nil, 425, 425, nil, - nil, nil, 425, 425, 425, 425, nil, nil, nil, nil, - nil, 425, nil, nil, nil, nil, nil, nil, nil, 425, - 425, nil, 425, 425, 425, 425, 425, 425, 425, 425, - 425, 425, 425, 426, 426, 425, nil, 426, nil, nil, - nil, nil, nil, nil, nil, 426, 426, nil, 426, 426, - 426, 426, 426, 426, 426, nil, nil, 426, 426, nil, - nil, nil, 426, 426, 426, 426, nil, nil, nil, nil, - nil, 426, nil, nil, nil, nil, nil, nil, nil, 426, - 426, nil, 426, 426, 426, 426, 426, 426, 426, 426, - 426, 426, 426, 490, 490, 426, nil, 490, nil, nil, - nil, nil, nil, nil, nil, 490, 490, nil, 490, 490, - 490, 490, 490, 490, 490, nil, nil, 490, 490, nil, - nil, nil, 490, 490, 490, 490, nil, nil, nil, nil, - nil, 490, nil, nil, nil, nil, nil, nil, nil, 490, - 490, nil, 490, 490, 490, 490, 490, 490, 490, 490, - 490, 490, 490, 491, 491, 490, nil, 491, nil, nil, - nil, nil, nil, nil, nil, 491, 491, nil, 491, 491, - 491, 491, 491, 491, 491, nil, nil, 491, 491, nil, - nil, nil, 491, 491, 491, 491, nil, nil, nil, nil, - nil, 491, nil, nil, nil, nil, nil, nil, nil, 491, - 491, nil, 491, 491, 491, 491, 491, 491, 491, 491, - 491, 491, 491, 502, 502, 491, nil, 502, nil, nil, - nil, nil, nil, nil, nil, 502, 502, nil, 502, 502, - 502, 502, 502, 502, 502, nil, nil, 502, 502, nil, - nil, nil, 502, 502, 502, 502, nil, nil, nil, nil, - nil, 502, nil, nil, nil, nil, nil, nil, nil, 502, - 502, nil, 502, 502, 502, 502, 502, 502, 502, 502, - 502, 502, 502, 503, 503, 502, nil, 503, nil, nil, - nil, nil, nil, nil, nil, 503, 503, nil, 503, 503, - 503, 503, 503, 503, 503, nil, nil, 503, 503, nil, - nil, nil, 503, 503, 503, 503, nil, nil, nil, nil, - nil, 503, nil, nil, nil, nil, nil, nil, nil, 503, - 503, nil, 503, 503, 503, 503, 503, 503, 503, 503, - 503, 503, 503, 530, 530, 503, nil, 530, nil, nil, - nil, nil, nil, nil, nil, 530, 530, nil, 530, 530, - 530, 530, 530, 530, 530, nil, nil, 530, 530, nil, - nil, nil, 530, 530, 530, 530, nil, nil, nil, nil, - nil, 530, nil, nil, nil, nil, nil, nil, nil, 530, - 530, nil, 530, 530, 530, 530, 530, 530, 530, 530, - 530, 530, 530, 531, 531, 530, nil, 531, nil, nil, - nil, nil, nil, nil, nil, 531, 531, nil, 531, 531, - 531, 531, 531, 531, 531, nil, nil, 531, 531, nil, - nil, nil, 531, 531, 531, 531, nil, nil, nil, nil, - nil, 531, nil, nil, nil, nil, nil, nil, nil, 531, - 531, nil, 531, 531, 531, 531, 531, 531, 531, 531, - 531, 531, 531, 537, 537, 531, nil, 537, nil, nil, - nil, nil, nil, nil, nil, 537, 537, nil, 537, 537, - 537, 537, 537, 537, 537, nil, nil, 537, 537, nil, - nil, nil, 537, 537, 537, 537, nil, nil, nil, nil, - nil, 537, nil, nil, nil, nil, nil, nil, nil, 537, - 537, nil, 537, 537, 537, 537, 537, 537, 537, 537, - 537, 537, 537, 538, 538, 537, nil, 538, nil, nil, - nil, nil, nil, nil, nil, 538, 538, nil, 538, 538, - 538, 538, 538, 538, 538, nil, nil, 538, 538, nil, - nil, nil, 538, 538, 538, 538, nil, nil, nil, nil, - nil, 538, nil, nil, nil, nil, nil, nil, nil, 538, - 538, nil, 538, 538, 538, 538, 538, 538, 538, 538, - 538, 538, 538, 875, 875, 538, nil, 875, nil, nil, - nil, nil, nil, nil, nil, 875, 875, nil, 875, 875, - 875, 875, 875, 875, 875, nil, nil, 875, 875, nil, - nil, nil, 875, 875, 875, 875, nil, nil, nil, nil, - nil, 875, nil, nil, nil, nil, nil, nil, nil, 875, - 875, nil, 875, 875, 875, 875, 875, 875, 875, 875, - 875, 875, 875, 876, 876, 875, nil, 876, nil, nil, - nil, nil, nil, nil, nil, 876, 876, nil, 876, 876, - 876, 876, 876, 876, 876, nil, nil, 876, 876, nil, - nil, nil, 876, 876, 876, 876, nil, nil, nil, nil, - nil, 876, nil, nil, nil, nil, nil, nil, nil, 876, - 876, nil, 876, 876, 876, 876, 876, 876, 876, 876, - 876, 876, 876, 913, 913, 876, nil, 913, nil, nil, - nil, nil, nil, nil, nil, 913, 913, nil, 913, 913, - 913, 913, 913, 913, 913, nil, nil, 913, 913, nil, - nil, nil, 913, 913, 913, 913, nil, nil, nil, nil, - nil, 913, nil, nil, nil, nil, nil, nil, nil, 913, - 913, nil, 913, 913, 913, 913, 913, 913, 913, 913, - 913, 913, 913, nil, nil, 913, 630, 630, 630, 630, - 630, 630, 630, 630, 630, 630, 630, nil, 630, 630, - nil, nil, 630, 630, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 630, nil, - 630, nil, 630, 630, 630, 630, 630, 630, 630, nil, - 630, nil, 709, 709, 709, 709, 709, 709, 709, 709, - 709, 709, 709, nil, 709, 709, nil, 630, 709, 709, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 709, nil, 709, nil, 709, 709, - 709, 709, 709, 709, 709, nil, 709, nil, 714, 714, - 714, 714, 714, 714, 714, 714, 714, 714, 714, nil, - 714, 714, nil, 709, 714, 714, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 714, nil, 714, nil, 714, 714, 714, 714, 714, 714, - 714, nil, 714, nil, 716, 716, 716, 716, 716, 716, - 716, 716, 716, 716, 716, nil, 716, 716, nil, 714, - 716, 716, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 716, nil, 716, nil, - 716, 716, 716, 716, 716, 716, 716, nil, 716, nil, - 719, 719, 719, 719, 719, 719, 719, 719, 719, 719, - 719, nil, 719, 719, nil, 716, 719, 719, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 719, nil, 719, nil, 719, 719, 719, 719, - 719, 719, 719, nil, 719, nil, 721, 721, 721, 721, - 721, 721, 721, 721, 721, 721, 721, nil, 721, 721, - nil, 719, 721, 721, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 721, nil, - 721, nil, 721, 721, 721, 721, 721, 721, 721, nil, - 721, nil, 723, 723, 723, 723, 723, 723, 723, 723, - 723, 723, 723, nil, 723, 723, nil, 721, 723, 723, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 723, nil, 723, nil, 723, 723, - 723, 723, 723, 723, 723, nil, 723, nil, 801, 801, - 801, 801, 801, 801, 801, 801, 801, 801, 801, nil, - 801, 801, nil, 723, 801, 801, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 801, nil, 801, nil, 801, 801, 801, 801, 801, 801, - 801, nil, 801, nil, 804, 804, 804, 804, 804, 804, - 804, 804, 804, 804, 804, nil, 804, 804, nil, 801, - 804, 804, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 804, nil, 804, nil, - 804, 804, 804, 804, 804, 804, 804, nil, 804, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 804 ] - -racc_action_pointer = [ - 0, 80, nil, 62, nil, 4744, 1249, 39, 21174, 21298, - 100, nil, 84, 143, 544, 55, 108, 127, nil, -8, - 4869, 6502, 257, nil, 76, 261, 20662, 20771, 4994, 5119, - 5244, nil, 738, 5369, 5494, nil, 174, 240, 361, 273, - 240, 5627, 5752, 5877, 212, 572, nil, nil, nil, nil, - nil, nil, nil, 866, 999, nil, 6002, 6127, 0, nil, - 6252, 6377, nil, nil, 6502, 6635, 6760, 6885, 21670, nil, - nil, nil, nil, nil, nil, nil, 568, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 0, - nil, nil, 130, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 382, nil, 7010, nil, nil, nil, nil, - 7143, 7268, 7393, 7518, 7643, 1124, nil, 449, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 265, nil, 1249, - 7768, 7893, 8018, 21042, 21842, 8143, 8268, 8393, 8518, 8643, - 8768, nil, nil, 607, 54, 139, 350, 244, 272, 325, - nil, 8893, 1374, 339, 9018, 9143, 9268, 9393, 9518, 9643, - 9768, 9893, 10018, 10143, 10268, 10393, 10518, 10643, 10768, 10893, - 11018, 11143, 11268, 11393, 11518, 11643, 11768, 11893, 12018, 12143, - nil, nil, 21902, 21962, 344, 12268, 12393, nil, nil, nil, - nil, nil, nil, nil, 12518, nil, 7010, nil, 335, 337, - nil, 12643, 383, 12768, nil, 12893, nil, nil, 282, 1374, - 13018, 349, 1499, 391, 448, 433, 13143, 1624, 611, 738, - 741, 517, 784, nil, 493, 467, 346, nil, nil, nil, - 508, 431, 476, 13276, nil, 376, 548, 552, 838, nil, - 568, nil, 13401, 687, 689, 13526, nil, 252, 392, 618, - 604, 509, 637, nil, nil, 614, 48, 136, 13651, 13776, - 403, 710, 604, 65, 89, 874, 682, 98, 721, nil, - nil, 442, 443, 96, nil, 898, nil, 55, 13901, nil, - nil, nil, 360, 388, 392, 420, 453, 549, 571, 576, - 582, nil, 641, nil, 14026, nil, 401, 465, 468, 473, - 39, 501, nil, nil, nil, nil, nil, nil, nil, nil, - 650, 21422, nil, nil, nil, nil, 665, nil, 655, nil, - 14151, 665, nil, 1624, 672, nil, 690, 699, 478, 512, - 20880, nil, nil, nil, 239, 348, 743, nil, nil, 1752, - 1861, nil, 13143, nil, 702, nil, nil, 738, nil, nil, - nil, nil, 283, nil, 761, 22022, 22082, 14276, 248, 14401, - 14526, 14651, 2369, 2494, 89, 648, 790, 794, 798, 803, - 3994, 4119, 4244, 2619, 1810, 2744, 2869, 2994, 3119, 3244, - 3369, 3494, 3619, 559, 793, 3744, 3869, 15151, 136, 20989, - nil, nil, 21044, nil, nil, 745, nil, 175, 293, 750, - nil, nil, 14776, nil, 14901, nil, 15026, nil, nil, nil, - 15151, 1404, 760, 761, nil, nil, 770, 15284, 774, 15409, - 22142, 22202, 903, 812, nil, nil, 15534, 775, nil, 15659, - 15784, 15909, 22262, 22322, 20534, 16034, 897, 16159, nil, 631, - nil, 16284, nil, nil, 16409, nil, nil, nil, nil, 1716, - 1994, 912, nil, 2119, 119, 142, 909, 917, 16534, 16659, - 22382, 22442, 112, nil, nil, 931, nil, 22502, 22562, 16784, - nil, nil, 16909, 596, 146, 2244, 5382, nil, nil, nil, - 317, nil, nil, nil, 721, nil, nil, nil, 828, nil, - nil, 373, nil, nil, 822, nil, nil, nil, 21546, nil, - 826, 17034, 17159, 523, 863, 17284, 17409, 17534, 17659, 869, - nil, nil, 17784, 17909, 881, nil, 18034, 18159, nil, nil, - 277, 353, 473, 603, 853, 5494, 853, nil, 830, nil, - 2369, nil, nil, nil, nil, 302, nil, 2494, 2619, nil, - 854, nil, 897, 18284, nil, nil, 1499, 251, 18409, 856, - nil, 860, 125, 198, 899, 481, 1379, 900, 861, 18534, - 22790, 932, 940, 323, 999, nil, 2744, 882, 925, nil, - nil, 887, 698, 131, 666, nil, 894, 896, 897, nil, - nil, nil, nil, nil, nil, 892, nil, 866, nil, nil, - nil, nil, 984, nil, nil, 990, 836, nil, 1031, nil, - nil, nil, nil, 1046, nil, 140, 933, 141, 156, 263, - 269, 18659, 543, 1504, nil, 940, 2869, 602, nil, nil, - 1061, 2994, 1052, 621, 21782, nil, nil, nil, nil, nil, - nil, 3119, nil, nil, nil, nil, nil, 943, 18784, 22836, - 18909, nil, 945, nil, 22882, nil, 22928, nil, nil, 22974, - nil, 23020, nil, 23066, 19034, 19159, 19284, 19409, 356, 19534, - 949, 951, 952, nil, 974, 952, 985, 950, nil, 1077, - 3244, 976, 1080, nil, nil, 963, 352, nil, nil, nil, - 3369, nil, nil, 163, 19659, nil, 1003, nil, nil, nil, - nil, 973, 1177, nil, 1302, nil, nil, 1022, 19784, nil, - 1014, nil, 983, 342, nil, 991, nil, nil, 1111, nil, - 19909, 1127, 3494, 3619, nil, 20034, 3744, 171, 205, nil, - 1128, nil, 3869, nil, 1129, 1022, nil, nil, 1048, 1037, - nil, 23112, 20159, 20284, 23158, 1427, nil, 1552, nil, nil, - 1147, nil, 1072, 1055, nil, nil, nil, 20409, nil, 1079, - nil, nil, nil, 3994, 1277, 1365, 1380, 1140, 1383, nil, - nil, 4119, 4244, 1071, 1070, 1074, nil, nil, 1076, 1077, - nil, 1078, nil, 1082, 1139, 1081, 859, nil, nil, 164, - nil, 1202, 1204, nil, 107, nil, nil, 1205, nil, nil, - 6648, nil, 1088, 1089, 1100, 1108, nil, 1113, nil, 1110, - 1393, 1190, nil, 1254, 20534, 22622, 22682, 1490, 1150, 1254, - nil, 2047, nil, nil, 1272, nil, 1397, nil, 1522, nil, - nil, nil, 349, 1044, 1144, 4369, nil, nil, nil, nil, - nil, 4494, nil, 4619, 2172, nil, nil, 2017, nil, 2142, - nil, nil, nil, 22742, nil, nil, 1159, 165, 166, 209, - 1624, nil, nil, 1157, 1166, 1176, 1180, 1187, 1169, 1191, - 1264, 875, 1313, 1315, 1199, 1201, 1202, 1203, 1244, 1246, - 173, nil, 2266, nil, nil, nil, 1294, 1207, nil, nil, - nil, nil, 2295, nil, nil, nil, 1209, 1210, 1213, nil, - nil ] - -racc_action_default = [ - -3, -552, -1, -538, -4, -552, -7, -552, -552, -552, - -552, -27, -552, -552, -552, -274, -552, -39, -42, -540, - -552, -47, -49, -50, -51, -255, -255, -255, -285, -321, - -322, -67, -11, -71, -79, -81, -552, -467, -468, -552, - -552, -552, -552, -552, -540, -236, -267, -268, -269, -270, - -271, -272, -273, -528, -11, -277, -551, -520, -293, -295, - -552, -552, -299, -302, -538, -552, -552, -552, -552, -323, - -324, -326, -327, -416, -417, -418, -419, -420, -435, -423, - -424, -437, -439, -428, -433, -449, -437, -451, -452, -526, - -456, -457, -527, -459, -460, -461, -462, -463, -464, -465, - -466, -471, -472, -552, -2, -539, -547, -548, -549, -6, - -552, -552, -552, -552, -552, -3, -15, -552, -110, -111, - -112, -113, -114, -115, -116, -117, -118, -122, -123, -124, - -125, -126, -127, -128, -129, -130, -131, -132, -133, -134, - -135, -136, -137, -138, -139, -140, -141, -142, -143, -144, - -145, -146, -147, -148, -149, -150, -151, -152, -153, -154, - -155, -156, -157, -158, -159, -160, -161, -162, -163, -164, - -165, -166, -167, -168, -169, -170, -171, -172, -173, -174, - -175, -176, -177, -178, -179, -180, -181, -182, -183, -184, - -185, -186, -187, -188, -189, -190, -191, -20, -119, -11, - -552, -552, -245, -552, -552, -552, -552, -552, -552, -552, - -540, -541, -46, -552, -467, -468, -552, -274, -552, -552, - -228, -552, -11, -552, -552, -552, -552, -552, -552, -552, - -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, - -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, - -386, -388, -552, -552, -56, -245, -552, -292, -391, -400, - -402, -62, -397, -63, -540, -64, -237, -250, -259, -259, - -254, -552, -260, -552, -522, -552, -65, -66, -538, -12, - -552, -69, -11, -540, -552, -72, -75, -11, -87, -88, - -552, -552, -95, -285, -288, -540, -552, -321, -322, -325, - -398, -552, -77, -552, -83, -282, -453, -454, -552, -213, - -214, -229, -552, -408, -552, -552, -238, -544, -544, -552, - -552, -544, -552, -294, -378, -48, -552, -552, -552, -552, - -538, -552, -539, -467, -468, -552, -552, -274, -552, -337, - -338, -105, -106, -552, -108, -552, -274, -552, -552, -467, - -468, -314, -110, -111, -151, -152, -153, -169, -174, -181, - -184, -316, -552, -518, -552, -421, -552, -552, -552, -552, - -552, -552, 961, -5, -550, -21, -22, -23, -24, -25, - -552, -552, -17, -18, -19, -120, -552, -28, -37, -38, - -552, -552, -29, -194, -540, -246, -259, -259, -529, -530, - -255, -395, -531, -532, -530, -529, -255, -394, -396, -531, - -532, -35, -202, -36, -552, -40, -41, -192, -260, -43, - -44, -45, -540, -291, -552, -552, -552, -245, -282, -552, - -552, -552, -203, -204, -205, -206, -207, -208, -209, -210, - -215, -216, -217, -218, -219, -220, -221, -222, -223, -224, - -225, -226, -227, -230, -231, -232, -233, -540, -367, -255, - -529, -530, -255, -54, -57, -540, -256, -367, -367, -540, - -287, -251, -552, -252, -552, -257, -552, -261, -525, -10, - -539, -14, -540, -68, -280, -84, -73, -552, -540, -245, - -552, -552, -94, -552, -453, -454, -552, -80, -85, -552, - -552, -552, -552, -552, -234, -552, -551, -551, -276, -278, - -239, -546, -545, -241, -546, -283, -284, -521, -296, -492, - -11, -328, -329, -11, -552, -552, -552, -552, -552, -245, - -552, -552, -282, -307, -105, -106, -107, -552, -552, -245, - -310, -473, -552, -552, -552, -11, -492, -318, -536, -537, - -540, -422, -436, -441, -552, -443, -425, -438, -552, -440, - -427, -552, -430, -432, -552, -450, -8, -16, -552, -26, - -266, -552, -552, -399, -552, -247, -249, -552, -552, -58, - -244, -392, -552, -552, -60, -393, -552, -552, -290, -542, - -529, -530, -529, -530, -540, -192, -552, -368, -372, -370, - -11, -52, -389, -53, -390, -367, -242, -11, -11, -286, - -259, -258, -262, -552, -523, -524, -13, -70, -552, -76, - -82, -540, -529, -530, -243, -91, -93, -552, -78, -552, - -201, -211, -212, -540, -551, -335, -11, -409, -551, -410, - -411, -540, -544, -552, -492, -381, -517, -517, -517, -491, - -493, -494, -495, -496, -497, -498, -499, -552, -501, -507, - -509, -510, -512, -513, -514, -552, -551, -330, -551, -300, - -331, -332, -303, -552, -306, -552, -540, -529, -530, -533, - -281, -552, -105, -106, -109, -540, -11, -552, -475, -312, - -552, -11, -492, -552, -552, -519, -442, -445, -446, -447, - -448, -11, -426, -429, -431, -434, -121, -264, -552, -195, - -552, -543, -259, -31, -197, -32, -198, -59, -33, -200, - -34, -199, -61, -193, -552, -552, -552, -552, -399, -552, - -517, -517, -517, -366, -552, -372, -552, -498, -505, -552, - -11, -552, -552, -253, -263, -74, -89, -86, -289, -9, - -11, -415, -336, -552, -552, -413, -552, -240, -379, -382, - -384, -372, -552, -484, -552, -487, -489, -552, -552, -339, - -552, -341, -343, -350, -498, -540, -511, -515, -552, -333, - -552, -552, -11, -11, -305, -552, -11, -399, -552, -399, - -552, -474, -11, -315, -552, -540, -477, -319, -552, -265, - -30, -196, -248, -552, -235, -357, -359, -552, -362, -364, - -552, -369, -552, -373, -374, -376, -377, -552, -387, -552, - -401, -403, -414, -11, -96, -97, -552, -552, -104, -412, - -279, -11, -11, -540, -517, -517, -502, -516, -517, -517, - -508, -517, -503, -540, -552, -348, -552, -500, -297, -552, - -298, -552, -552, -262, -551, -308, -311, -552, -317, -476, - -492, -444, -517, -517, -517, -517, -506, -517, -371, -552, - -504, -552, -55, -408, -245, -552, -552, -103, -552, -552, - -380, -552, -480, -482, -552, -485, -552, -488, -552, -490, - -340, -342, -346, -552, -351, -11, -301, -304, -404, -405, - -406, -11, -313, -11, -552, -354, -356, -552, -360, -552, - -363, -365, -375, -552, -282, -407, -540, -529, -530, -533, - -102, -383, -385, -517, -517, -517, -517, -344, -552, -349, - -552, -551, -552, -552, -517, -517, -517, -517, -281, -533, - -399, -478, -552, -481, -483, -486, -552, -347, -334, -309, - -320, -352, -552, -355, -358, -361, -517, -345, -517, -479, - -353 ] - -racc_goto_table = [ - 121, 121, 361, 506, 285, 13, 316, 209, 116, 198, - 13, 314, 394, 573, 124, 124, 14, 126, 126, 527, - 473, 14, 416, 299, 299, 108, 105, 634, 731, 281, - 302, 283, 312, 691, 520, 523, 213, 13, 734, 400, - 406, 389, 464, 814, 213, 213, 213, 413, 14, 290, - 290, 778, 536, 669, 672, 299, 299, 299, 614, 13, - 121, 497, 611, 284, 611, 465, 645, 254, 261, 263, - 14, 2, 816, 6, 109, 649, 213, 213, 6, 775, - 213, 335, 345, 345, 600, 840, 108, 866, 459, 462, - 104, 326, 327, 607, 608, 330, 510, 513, 614, 891, - 517, 1, 649, 836, 269, 269, 269, 367, 602, 749, - 13, 604, 371, 347, 351, 552, 197, 559, 562, 13, - 13, 14, 265, 276, 277, 340, 213, 213, 213, 213, - 14, 14, 318, 321, 381, 267, 267, 267, 605, 568, - 319, 375, 376, 377, 378, 363, 836, 320, 473, 258, - 262, 331, 894, 323, 733, 518, 212, 338, 325, 325, - 614, 540, 325, 362, 547, 611, 611, 315, 641, 324, - 328, 782, 329, 783, 373, 812, 912, 681, 6, 268, - 268, 268, 901, 686, 866, 891, 380, 379, 6, 781, - 792, 761, 843, 545, 546, 694, 410, 423, 860, 929, - 649, 833, 840, 735, 13, 816, 813, 317, 325, 325, - 325, 325, 643, 728, 673, 14, 213, 213, 213, 758, - 519, 213, 213, 213, 213, 213, 213, 13, 251, 836, - 386, 740, 732, 831, 947, 862, 832, 594, 14, 795, - 746, 458, 467, 468, 898, 619, 684, 638, 649, 753, - 365, 470, 957, 284, 628, 366, 368, 369, 561, 370, - 696, 400, 406, 701, 834, nil, nil, nil, nil, nil, - 483, 213, 213, nil, 498, nil, 299, nil, nil, 281, - 213, 482, 486, 493, 281, 13, 488, 13, nil, 15, - nil, nil, 13, 299, 15, 787, 14, nil, 14, 621, - 108, 480, 290, 14, 789, 419, 420, 421, 422, 267, - 704, nil, nil, 284, nil, nil, 948, 855, 284, 290, - nil, 15, 292, 292, nil, nil, 624, 401, nil, nil, - nil, 213, 269, nil, nil, nil, 387, 392, 624, 676, - 269, 411, 415, 15, 213, 213, nil, 903, 639, 685, - 466, 391, 108, 481, 337, 346, 346, 391, 469, 524, - 525, 743, 267, 267, 213, 479, 624, 717, nil, 541, - nil, 267, 722, 121, 624, 899, 745, nil, nil, 16, - 213, 567, 574, 786, 16, nil, 614, 124, nil, nil, - 126, nil, 611, nil, 15, nil, 835, nil, 838, nil, - nil, nil, 416, 15, 15, nil, nil, 268, nil, 588, - nil, 16, nil, 509, nil, 268, 649, 526, 410, nil, - 258, 757, nil, nil, 262, nil, 325, 325, nil, nil, - nil, nil, nil, 16, nil, nil, nil, nil, nil, 863, - nil, 864, 579, 213, 339, 596, 544, nil, 584, nil, - nil, nil, 606, nil, nil, nil, 609, 640, 498, nil, - nil, 823, 550, 743, nil, nil, nil, 498, nil, 617, - nil, nil, nil, nil, nil, 620, nil, 299, nil, nil, - nil, nil, nil, 410, 16, 13, 299, nil, 15, nil, - nil, nil, nil, 16, 16, 410, 14, nil, nil, nil, - nil, 601, 690, 290, 603, 213, nil, nil, nil, nil, - nil, 15, 290, nil, nil, 923, nil, nil, nil, nil, - nil, 213, nil, 410, 580, 13, nil, nil, 13, 410, - 585, nil, nil, nil, 267, 940, 14, 695, 934, 14, - nil, nil, 900, nil, nil, 213, 670, 670, 610, 401, - 13, 666, nil, 616, 668, 213, nil, 895, 213, nil, - 121, 14, nil, 915, nil, 688, 689, nil, 706, 15, - nil, 15, nil, 687, 124, 292, 15, 126, 16, nil, - nil, nil, 574, 580, 751, 414, 580, 642, 755, 498, - nil, nil, 292, 213, 213, nil, 267, nil, 213, 213, - 747, 16, 213, 633, nil, 13, nil, nil, 299, 574, - nil, nil, 13, 13, 401, nil, 14, nil, nil, 299, - 748, nil, nil, 14, 14, nil, 401, nil, 797, 756, - nil, 739, nil, nil, 290, nil, 267, nil, 741, 742, - 325, 13, nil, 790, nil, 290, 267, nil, 794, nil, - nil, 712, 14, nil, 401, nil, nil, nil, 391, 16, - nil, 16, 401, nil, 574, nil, 16, 752, nil, nil, - nil, nil, nil, 574, nil, nil, nil, 769, nil, 675, - nil, nil, nil, nil, 916, nil, 121, nil, nil, nil, - nil, 13, nil, nil, nil, nil, 13, 213, nil, nil, - nil, nil, 14, nil, nil, nil, 13, 14, nil, 791, - nil, 624, 788, 713, 715, 796, nil, 14, 718, 720, - nil, nil, 415, nil, nil, 730, 213, nil, nil, nil, - nil, nil, 798, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 299, 13, nil, nil, 580, 857, - nil, 585, nil, nil, nil, 13, 14, nil, nil, nil, - nil, nil, 847, nil, nil, nil, 14, nil, nil, 15, - 826, 819, nil, nil, nil, nil, 292, nil, nil, 325, - nil, 822, 859, nil, nil, 292, nil, 13, 13, nil, - 769, 13, nil, 845, nil, nil, 213, 13, 14, 14, - nil, nil, 14, nil, nil, nil, nil, 299, 14, 15, - 670, 849, 15, 851, 852, nil, nil, 854, nil, nil, - 880, nil, nil, nil, nil, nil, nil, nil, 13, nil, - 890, nil, nil, 870, 15, nil, 13, 13, nil, 14, - nil, nil, nil, 700, nil, nil, 800, 14, 14, nil, - nil, nil, nil, nil, 873, nil, nil, nil, nil, 16, - 933, nil, 878, 879, 769, nil, 769, nil, 410, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 325, nil, - nil, nil, nil, nil, 322, nil, nil, nil, nil, 15, - 213, 839, nil, nil, 841, nil, 15, 15, nil, 16, - 13, nil, 16, nil, 574, 410, 13, 292, 13, nil, - nil, 14, 927, 769, nil, nil, nil, 14, 292, 14, - nil, nil, nil, nil, 16, 15, 931, nil, nil, nil, - nil, nil, 932, nil, 865, nil, nil, 867, nil, nil, - nil, 25, nil, nil, nil, nil, 25, nil, 769, nil, - 769, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 25, nil, nil, nil, 414, 769, nil, nil, 25, - 25, 25, nil, 25, nil, 15, nil, nil, nil, 16, - 15, 267, nil, nil, nil, nil, 16, 16, nil, nil, - 15, nil, nil, nil, nil, 25, nil, nil, nil, 401, - nil, 25, 25, nil, nil, 25, nil, nil, 924, nil, - nil, 925, nil, 926, nil, 16, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 388, nil, 15, - nil, 935, nil, 418, 936, nil, 937, nil, nil, 15, - nil, nil, nil, 828, nil, nil, 25, nil, nil, nil, - nil, 25, 25, 25, 25, 25, 25, nil, nil, nil, - nil, nil, nil, nil, nil, 16, nil, nil, nil, 956, - 16, 15, 15, nil, nil, 15, nil, nil, nil, 958, - 16, 15, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 475, nil, - 477, nil, 478, nil, nil, nil, 346, nil, nil, nil, - nil, nil, 15, nil, nil, nil, nil, nil, nil, 16, - 15, 15, nil, nil, nil, nil, nil, nil, nil, 16, - nil, nil, nil, 829, nil, nil, nil, nil, nil, nil, - 25, 25, 25, 25, nil, nil, 25, 25, 25, 25, - 25, 25, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 16, 16, 25, nil, 16, nil, nil, nil, nil, - nil, 16, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 15, nil, nil, nil, nil, nil, - 15, nil, 15, nil, nil, nil, 25, 25, nil, nil, - nil, nil, 16, nil, nil, 25, nil, nil, nil, nil, - 16, 16, nil, nil, nil, nil, nil, 570, nil, nil, - nil, 25, nil, 25, nil, nil, nil, nil, 25, nil, - 37, nil, nil, nil, nil, 37, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 25, nil, nil, nil, - 38, nil, 37, 288, 288, 38, nil, nil, nil, 25, - 25, nil, nil, nil, 16, nil, nil, nil, nil, nil, - 16, nil, 16, nil, 37, nil, nil, nil, nil, 25, - nil, nil, 38, 289, 289, 333, 349, 349, 349, 612, - nil, 322, nil, 615, nil, 25, nil, nil, nil, nil, - nil, nil, nil, nil, 38, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 334, 350, 350, 350, nil, - nil, nil, nil, nil, 637, 37, nil, nil, 612, nil, - nil, 322, nil, nil, 37, 37, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 418, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 38, nil, nil, 25, nil, - nil, nil, nil, nil, 38, 38, nil, nil, nil, nil, - nil, nil, nil, 763, 765, 766, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 707, nil, - nil, nil, 612, 322, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 25, nil, nil, nil, nil, nil, nil, nil, 37, - 25, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 744, nil, nil, nil, nil, nil, 25, nil, nil, nil, - nil, nil, 37, nil, nil, nil, nil, nil, nil, 38, - nil, 25, nil, nil, 25, nil, nil, 806, 808, 809, - 25, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 25, nil, 38, 25, nil, nil, 25, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 37, nil, 37, nil, nil, nil, 288, 37, 25, 25, - nil, nil, nil, 25, 25, nil, nil, 25, nil, nil, - nil, nil, nil, 288, nil, 799, nil, nil, nil, nil, - 38, 25, 38, nil, nil, nil, 289, 38, 25, 25, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 289, nil, nil, nil, nil, nil, nil, - nil, 882, 883, nil, nil, 885, 887, 25, 889, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 842, nil, nil, nil, 905, - 906, 908, 910, nil, 911, nil, nil, nil, nil, nil, - nil, nil, 853, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 25, nil, nil, nil, nil, 25, nil, 322, - nil, nil, 25, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 25, nil, nil, nil, nil, nil, nil, nil, - nil, 25, nil, nil, nil, nil, nil, nil, nil, nil, - 941, 943, 944, 945, nil, nil, nil, nil, nil, nil, - nil, 951, 953, 954, 955, nil, nil, nil, nil, nil, - nil, 25, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 25, nil, 959, nil, 960, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 37, nil, nil, nil, nil, nil, nil, 288, nil, nil, - nil, 25, nil, 25, 25, nil, 288, 25, nil, nil, - nil, nil, nil, 25, nil, nil, nil, nil, nil, nil, - 38, nil, nil, nil, nil, nil, nil, 289, nil, nil, - 37, nil, nil, 37, nil, nil, 289, nil, nil, nil, - nil, nil, nil, nil, 25, nil, nil, nil, nil, nil, - nil, nil, 25, 25, nil, 37, nil, nil, nil, nil, - 38, nil, nil, 38, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 38, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 25, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 37, nil, nil, nil, nil, nil, 25, 37, 37, nil, - nil, nil, 25, nil, 25, nil, nil, nil, 288, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 288, - 38, nil, nil, nil, nil, nil, 37, 38, 38, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 289, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 289, - nil, nil, nil, nil, nil, nil, 38, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 37, nil, nil, nil, - nil, 37, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 37, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 38, nil, nil, nil, - nil, 38, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 38, nil, nil, nil, 220, nil, nil, nil, nil, - 37, nil, nil, 266, 266, 266, nil, nil, nil, nil, - 37, nil, nil, nil, 824, nil, 309, 310, 311, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 38, 266, 266, nil, nil, nil, nil, nil, nil, nil, - 38, nil, 37, 37, 825, nil, 37, nil, nil, nil, - nil, nil, 37, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 38, 38, nil, nil, 38, 349, nil, nil, - nil, nil, 38, 37, nil, nil, nil, nil, nil, nil, - nil, 37, 37, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 350, nil, nil, - nil, nil, nil, 38, nil, nil, nil, nil, nil, nil, - nil, 38, 38, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 37, nil, nil, nil, nil, - nil, 37, nil, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 266, 393, 266, nil, nil, - 412, 417, nil, nil, nil, 38, nil, nil, nil, nil, - nil, 38, nil, 38, nil, nil, 220, nil, nil, 432, - 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, - 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, - 453, 454, 455, 456, 457, nil, nil, nil, nil, nil, - 266, 266, nil, nil, nil, nil, nil, nil, nil, 266, - nil, nil, nil, nil, nil, nil, 266, nil, 266, nil, - 266, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 504, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 266, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 266, nil, 412, 595, 393, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 266, nil, 266, - nil, 266, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 266, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 630, 631, 632, nil, nil, nil, - nil, nil, 266, nil, nil, nil, 266, nil, nil, 266, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 266, 266, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 266, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 266, 709, nil, nil, - 266, 266, 714, 716, nil, nil, nil, 719, 721, nil, - nil, 595, 723, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 266, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 266, nil, 801, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 714, - 716, 721, 719, nil, 804, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 266, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 266, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 266, 801, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 266 ] - -racc_goto_check = [ - 54, 54, 53, 10, 46, 20, 62, 30, 14, 14, - 20, 8, 22, 23, 57, 57, 21, 58, 58, 85, - 68, 21, 17, 60, 60, 89, 6, 11, 115, 42, - 47, 43, 30, 91, 82, 82, 21, 20, 120, 35, - 35, 26, 37, 122, 21, 21, 21, 26, 21, 21, - 21, 83, 51, 84, 84, 60, 60, 60, 156, 20, - 54, 48, 69, 9, 69, 22, 127, 36, 36, 36, - 21, 2, 123, 7, 5, 118, 21, 21, 7, 111, - 21, 21, 21, 21, 38, 152, 89, 153, 35, 35, - 4, 16, 16, 38, 38, 16, 64, 64, 156, 109, - 64, 1, 118, 151, 65, 65, 65, 142, 67, 12, - 20, 67, 142, 52, 52, 146, 15, 146, 146, 20, - 20, 21, 41, 41, 41, 18, 21, 21, 21, 21, - 21, 21, 65, 65, 29, 32, 32, 32, 39, 59, - 61, 16, 16, 16, 16, 77, 151, 78, 68, 66, - 66, 4, 112, 79, 118, 81, 19, 86, 28, 28, - 156, 88, 28, 92, 93, 69, 69, 94, 95, 96, - 97, 98, 99, 100, 5, 120, 122, 101, 7, 63, - 63, 63, 102, 103, 153, 109, 2, 7, 7, 11, - 104, 127, 111, 105, 106, 107, 54, 44, 108, 112, - 118, 120, 152, 113, 20, 123, 121, 63, 28, 28, - 28, 28, 124, 23, 85, 21, 21, 21, 21, 125, - 126, 21, 21, 21, 21, 21, 21, 20, 128, 151, - 9, 38, 116, 129, 112, 115, 130, 22, 21, 127, - 23, 131, 133, 134, 135, 48, 51, 136, 118, 137, - 140, 44, 112, 9, 48, 141, 143, 144, 145, 147, - 148, 35, 35, 149, 150, nil, nil, nil, nil, nil, - 44, 21, 21, nil, 46, nil, 60, nil, nil, 42, - 21, 43, 47, 30, 42, 20, 43, 20, nil, 24, - nil, nil, 20, 60, 24, 23, 21, nil, 21, 22, - 89, 6, 21, 21, 23, 28, 28, 28, 28, 32, - 146, nil, nil, 9, nil, nil, 83, 84, 9, 21, - nil, 24, 24, 24, nil, nil, 35, 66, nil, nil, - nil, 21, 65, nil, nil, nil, 19, 19, 35, 22, - 65, 19, 19, 24, 21, 21, nil, 91, 26, 22, - 41, 63, 89, 7, 24, 24, 24, 63, 41, 16, - 16, 68, 32, 32, 21, 4, 35, 37, nil, 89, - nil, 32, 37, 54, 35, 11, 48, nil, nil, 25, - 21, 14, 30, 82, 25, nil, 156, 57, nil, nil, - 58, nil, 69, nil, 24, nil, 116, nil, 116, nil, - nil, nil, 17, 24, 24, nil, nil, 63, nil, 44, - nil, 25, nil, 28, nil, 63, 118, 4, 54, nil, - 66, 64, nil, nil, 66, nil, 28, 28, nil, nil, - nil, nil, nil, 25, nil, nil, nil, nil, nil, 116, - nil, 116, 36, 21, 25, 30, 28, nil, 36, nil, - nil, nil, 44, nil, nil, nil, 44, 62, 46, nil, - nil, 82, 28, 68, nil, nil, nil, 46, nil, 44, - nil, nil, nil, nil, nil, 44, nil, 60, nil, nil, - nil, nil, nil, 54, 25, 20, 60, nil, 24, nil, - nil, nil, nil, 25, 25, 54, 21, nil, nil, nil, - nil, 36, 8, 21, 36, 21, nil, nil, nil, nil, - nil, 24, 21, nil, nil, 116, nil, nil, nil, nil, - nil, 21, nil, 54, 66, 20, nil, nil, 20, 54, - 66, nil, nil, nil, 32, 23, 21, 44, 116, 21, - nil, nil, 85, nil, nil, 21, 89, 89, 65, 66, - 20, 9, nil, 7, 9, 21, nil, 82, 21, nil, - 54, 21, nil, 10, nil, 89, 89, nil, 14, 24, - nil, 24, nil, 16, 57, 24, 24, 58, 25, nil, - nil, nil, 30, 66, 62, 25, 66, 65, 62, 46, - nil, nil, 24, 21, 21, nil, 32, nil, 21, 21, - 46, 25, 21, 28, nil, 20, nil, nil, 60, 30, - nil, nil, 20, 20, 66, nil, 21, nil, nil, 60, - 44, nil, nil, 21, 21, nil, 66, nil, 53, 30, - nil, 9, nil, nil, 21, nil, 32, nil, 9, 9, - 28, 20, nil, 8, nil, 21, 32, nil, 8, nil, - nil, 65, 21, nil, 66, nil, nil, nil, 63, 25, - nil, 25, 66, nil, 30, nil, 25, 9, nil, nil, - nil, nil, nil, 30, nil, nil, nil, 110, nil, 63, - nil, nil, nil, nil, 22, nil, 54, nil, nil, nil, - nil, 20, nil, nil, nil, nil, 20, 21, nil, nil, - nil, nil, 21, nil, nil, nil, 20, 21, nil, 89, - nil, 35, 16, 19, 19, 89, nil, 21, 19, 19, - nil, nil, 19, nil, nil, 114, 21, nil, nil, nil, - nil, nil, 9, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 60, 20, nil, nil, 66, 8, - nil, 66, nil, nil, nil, 20, 21, nil, nil, nil, - nil, nil, 44, nil, nil, nil, 21, nil, nil, 24, - 21, 9, nil, nil, nil, nil, 24, nil, nil, 28, - nil, 9, 44, nil, nil, 24, nil, 20, 20, nil, - 110, 20, nil, 110, nil, nil, 21, 20, 21, 21, - nil, nil, 21, nil, nil, nil, nil, 60, 21, 24, - 89, 16, 24, 9, 9, nil, nil, 9, nil, nil, - 44, nil, nil, nil, nil, nil, nil, nil, 20, nil, - 44, nil, nil, 21, 24, nil, 20, 20, nil, 21, - nil, nil, nil, 24, nil, nil, 19, 21, 21, nil, - nil, nil, nil, nil, 9, nil, nil, nil, nil, 25, - 8, nil, 9, 9, 110, nil, 110, nil, 54, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 28, nil, - nil, nil, nil, nil, 27, nil, nil, nil, nil, 24, - 21, 114, nil, nil, 114, nil, 24, 24, nil, 25, - 20, nil, 25, nil, 30, 54, 20, 24, 20, nil, - nil, 21, 110, 110, nil, nil, nil, 21, 24, 21, - nil, nil, nil, nil, 25, 24, 9, nil, nil, nil, - nil, nil, 9, nil, 114, nil, nil, 114, nil, nil, - nil, 40, nil, nil, nil, nil, 40, nil, 110, nil, - 110, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 40, nil, nil, nil, 25, 110, nil, nil, 40, - 40, 40, nil, 40, nil, 24, nil, nil, nil, 25, - 24, 32, nil, nil, nil, nil, 25, 25, nil, nil, - 24, nil, nil, nil, nil, 40, nil, nil, nil, 66, - nil, 40, 40, nil, nil, 40, nil, nil, 114, nil, - nil, 114, nil, 114, nil, 25, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 27, nil, 24, - nil, 114, nil, 27, 114, nil, 114, nil, nil, 24, - nil, nil, nil, 24, nil, nil, 40, nil, nil, nil, - nil, 40, 40, 40, 40, 40, 40, nil, nil, nil, - nil, nil, nil, nil, nil, 25, nil, nil, nil, 114, - 25, 24, 24, nil, nil, 24, nil, nil, nil, 114, - 25, 24, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 27, nil, - 27, nil, 27, nil, nil, nil, 24, nil, nil, nil, - nil, nil, 24, nil, nil, nil, nil, nil, nil, 25, - 24, 24, nil, nil, nil, nil, nil, nil, nil, 25, - nil, nil, nil, 25, nil, nil, nil, nil, nil, nil, - 40, 40, 40, 40, nil, nil, 40, 40, 40, 40, - 40, 40, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 25, 25, 40, nil, 25, nil, nil, nil, nil, - nil, 25, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 24, nil, nil, nil, nil, nil, - 24, nil, 24, nil, nil, nil, 40, 40, nil, nil, - nil, nil, 25, nil, nil, 40, nil, nil, nil, nil, - 25, 25, nil, nil, nil, nil, nil, 27, nil, nil, - nil, 40, nil, 40, nil, nil, nil, nil, 40, nil, - 49, nil, nil, nil, nil, 49, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 40, nil, nil, nil, - 50, nil, 49, 49, 49, 50, nil, nil, nil, 40, - 40, nil, nil, nil, 25, nil, nil, nil, nil, nil, - 25, nil, 25, nil, 49, nil, nil, nil, nil, 40, - nil, nil, 50, 50, 50, 49, 49, 49, 49, 27, - nil, 27, nil, 27, nil, 40, nil, nil, nil, nil, - nil, nil, nil, nil, 50, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 50, 50, 50, 50, nil, - nil, nil, nil, nil, 27, 49, nil, nil, 27, nil, - nil, 27, nil, nil, 49, 49, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 27, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 50, nil, nil, 40, nil, - nil, nil, nil, nil, 50, 50, nil, nil, nil, nil, - nil, nil, nil, 117, 117, 117, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 27, nil, - nil, nil, 27, 27, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 40, nil, nil, nil, nil, nil, nil, nil, 49, - 40, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 27, nil, nil, nil, nil, nil, 40, nil, nil, nil, - nil, nil, 49, nil, nil, nil, nil, nil, nil, 50, - nil, 40, nil, nil, 40, nil, nil, 117, 117, 117, - 40, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 40, nil, 50, 40, nil, nil, 40, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 49, nil, 49, nil, nil, nil, 49, 49, 40, 40, - nil, nil, nil, 40, 40, nil, nil, 40, nil, nil, - nil, nil, nil, 49, nil, 27, nil, nil, nil, nil, - 50, 40, 50, nil, nil, nil, 50, 50, 40, 40, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 50, nil, nil, nil, nil, nil, nil, - nil, 117, 117, nil, nil, 117, 117, 40, 117, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 27, nil, nil, nil, 117, - 117, 117, 117, nil, 117, nil, nil, nil, nil, nil, - nil, nil, 27, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 40, nil, nil, nil, nil, 40, nil, 27, - nil, nil, 40, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 40, nil, nil, nil, nil, nil, nil, nil, - nil, 40, nil, nil, nil, nil, nil, nil, nil, nil, - 117, 117, 117, 117, nil, nil, nil, nil, nil, nil, - nil, 117, 117, 117, 117, nil, nil, nil, nil, nil, - nil, 40, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 40, nil, 117, nil, 117, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 49, nil, nil, nil, nil, nil, nil, 49, nil, nil, - nil, 40, nil, 40, 40, nil, 49, 40, nil, nil, - nil, nil, nil, 40, nil, nil, nil, nil, nil, nil, - 50, nil, nil, nil, nil, nil, nil, 50, nil, nil, - 49, nil, nil, 49, nil, nil, 50, nil, nil, nil, - nil, nil, nil, nil, 40, nil, nil, nil, nil, nil, - nil, nil, 40, 40, nil, 49, nil, nil, nil, nil, - 50, nil, nil, 50, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 50, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 40, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 49, nil, nil, nil, nil, nil, 40, 49, 49, nil, - nil, nil, 40, nil, 40, nil, nil, nil, 49, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 49, - 50, nil, nil, nil, nil, nil, 49, 50, 50, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 50, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 50, - nil, nil, nil, nil, nil, nil, 50, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 49, nil, nil, nil, - nil, 49, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 49, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 50, nil, nil, nil, - nil, 50, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 50, nil, nil, nil, 31, nil, nil, nil, nil, - 49, nil, nil, 31, 31, 31, nil, nil, nil, nil, - 49, nil, nil, nil, 49, nil, 31, 31, 31, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 50, 31, 31, nil, nil, nil, nil, nil, nil, nil, - 50, nil, 49, 49, 50, nil, 49, nil, nil, nil, - nil, nil, 49, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 50, 50, nil, nil, 50, 49, nil, nil, - nil, nil, 50, 49, nil, nil, nil, nil, nil, nil, - nil, 49, 49, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 50, nil, nil, - nil, nil, nil, 50, nil, nil, nil, nil, nil, nil, - nil, 50, 50, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 49, nil, nil, nil, nil, - nil, 49, nil, 49, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 31, 31, 31, nil, nil, - 31, 31, nil, nil, nil, 50, nil, nil, nil, nil, - nil, 50, nil, 50, nil, nil, 31, nil, nil, 31, - 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, - 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, - 31, 31, 31, 31, 31, nil, nil, nil, nil, nil, - 31, 31, nil, nil, nil, nil, nil, nil, nil, 31, - nil, nil, nil, nil, nil, nil, 31, nil, 31, nil, - 31, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 31, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 31, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 31, nil, 31, 31, 31, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 31, nil, 31, - nil, 31, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 31, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 31, 31, 31, nil, nil, nil, - nil, nil, 31, nil, nil, nil, 31, nil, nil, 31, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 31, 31, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 31, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 31, 31, nil, nil, - 31, 31, 31, 31, nil, nil, nil, 31, 31, nil, - nil, 31, 31, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 31, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 31, nil, 31, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 31, - 31, 31, 31, nil, 31, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 31, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 31, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 31, 31, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 31 ] - -racc_goto_pointer = [ - nil, 101, 71, nil, 87, 69, 23, 73, -43, 31, - -310, -479, -525, nil, 0, 107, 31, -184, 60, 136, - 5, 16, -190, -381, 289, 379, -159, 827, 98, 18, - -12, 1945, 107, nil, nil, -164, 42, -212, -374, -325, - 941, 94, -3, -1, -13, nil, -29, -4, -242, 1230, - 1260, -291, 47, -66, -8, nil, nil, 6, 9, -246, - -10, 84, -50, 151, -221, 76, 124, -351, -249, -410, - nil, nil, nil, nil, nil, nil, nil, 77, 90, 95, - nil, -169, -292, -615, -471, -312, 92, nil, -186, 22, - nil, -513, 95, -198, 112, -341, 110, 108, -498, 109, - -499, -356, -673, -357, -499, -158, -167, -352, -599, -745, - 20, -578, -694, -395, 127, -570, -366, 737, -444, nil, - -560, -530, -693, -664, -307, -424, -104, -453, 206, -526, - -524, -9, nil, -17, -17, -610, -260, -389, nil, nil, - 174, 177, 26, 174, 174, -111, -251, 175, -294, -292, - -498, -659, -679, -720, nil, nil, -416 ] - -racc_goto_default = [ - nil, nil, nil, 3, nil, 4, 332, 279, nil, 313, - nil, 779, nil, 278, nil, nil, nil, 11, 12, 18, - 219, 308, nil, nil, 217, 218, nil, 272, 17, nil, - 424, 21, 22, 23, 24, 627, nil, nil, nil, nil, - 296, 395, 31, nil, nil, 33, 36, 35, nil, 214, - 215, 344, nil, 123, 403, 122, 125, 74, 75, nil, - 45, nil, 635, 396, nil, 397, 408, 581, 471, 270, - 256, 46, 47, 48, 49, 50, 51, 52, nil, 257, - 58, nil, nil, nil, nil, nil, nil, 66, nil, 521, - 67, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 771, - 656, nil, 772, nil, 646, nil, 648, nil, 837, 597, - nil, nil, nil, 654, nil, nil, nil, 693, nil, nil, - nil, nil, 407, nil, nil, nil, nil, nil, 73, 76, - 77, nil, nil, nil, nil, nil, 557, nil, nil, nil, - 647, 658, 659, 738, 662, 665, 274 ] - -racc_reduce_table = [ - 0, 0, :racc_error, - 1, 138, :_reduce_none, - 2, 139, :_reduce_2, - 0, 140, :_reduce_3, - 1, 140, :_reduce_4, - 3, 140, :_reduce_5, - 2, 140, :_reduce_6, - 1, 142, :_reduce_none, - 4, 142, :_reduce_8, - 4, 145, :_reduce_9, - 2, 146, :_reduce_10, - 0, 150, :_reduce_11, - 1, 150, :_reduce_12, - 3, 150, :_reduce_13, - 2, 150, :_reduce_14, - 0, 166, :_reduce_15, - 4, 144, :_reduce_16, - 3, 144, :_reduce_17, - 3, 144, :_reduce_18, - 3, 144, :_reduce_19, - 2, 144, :_reduce_20, - 3, 144, :_reduce_21, - 3, 144, :_reduce_22, - 3, 144, :_reduce_23, - 3, 144, :_reduce_24, - 3, 144, :_reduce_25, - 4, 144, :_reduce_26, - 1, 144, :_reduce_none, - 3, 144, :_reduce_28, - 3, 144, :_reduce_29, - 6, 144, :_reduce_30, - 5, 144, :_reduce_31, - 5, 144, :_reduce_32, - 5, 144, :_reduce_33, - 5, 144, :_reduce_34, - 3, 144, :_reduce_35, - 3, 144, :_reduce_36, - 3, 144, :_reduce_37, - 3, 144, :_reduce_38, - 1, 144, :_reduce_none, - 3, 154, :_reduce_40, - 3, 154, :_reduce_41, - 1, 165, :_reduce_none, - 3, 165, :_reduce_43, - 3, 165, :_reduce_44, - 3, 165, :_reduce_45, - 2, 165, :_reduce_46, - 1, 165, :_reduce_none, - 1, 153, :_reduce_none, - 1, 156, :_reduce_none, - 1, 156, :_reduce_none, - 1, 170, :_reduce_none, - 4, 170, :_reduce_52, - 4, 170, :_reduce_53, - 0, 176, :_reduce_54, - 5, 174, :_reduce_55, - 2, 169, :_reduce_56, - 3, 169, :_reduce_57, - 4, 169, :_reduce_58, - 5, 169, :_reduce_59, - 4, 169, :_reduce_60, - 5, 169, :_reduce_61, - 2, 169, :_reduce_62, - 2, 169, :_reduce_63, - 2, 169, :_reduce_64, - 2, 169, :_reduce_65, - 2, 169, :_reduce_66, - 1, 155, :_reduce_67, - 3, 155, :_reduce_68, - 1, 180, :_reduce_69, - 3, 180, :_reduce_70, - 1, 179, :_reduce_none, - 2, 179, :_reduce_72, - 3, 179, :_reduce_73, - 5, 179, :_reduce_74, - 2, 179, :_reduce_75, - 4, 179, :_reduce_76, - 2, 179, :_reduce_77, - 4, 179, :_reduce_78, - 1, 179, :_reduce_79, - 3, 179, :_reduce_80, - 1, 183, :_reduce_none, - 3, 183, :_reduce_82, - 2, 182, :_reduce_83, - 3, 182, :_reduce_84, - 1, 185, :_reduce_85, - 3, 185, :_reduce_86, - 1, 184, :_reduce_87, - 1, 184, :_reduce_88, - 4, 184, :_reduce_89, - 3, 184, :_reduce_90, - 3, 184, :_reduce_91, - 3, 184, :_reduce_92, - 3, 184, :_reduce_93, - 2, 184, :_reduce_94, - 1, 184, :_reduce_95, - 1, 162, :_reduce_96, - 1, 162, :_reduce_97, - 4, 162, :_reduce_98, - 3, 162, :_reduce_99, - 3, 162, :_reduce_100, - 3, 162, :_reduce_101, - 3, 162, :_reduce_102, - 2, 162, :_reduce_103, - 1, 162, :_reduce_104, - 1, 188, :_reduce_105, - 1, 188, :_reduce_none, - 2, 189, :_reduce_107, - 1, 189, :_reduce_108, - 3, 189, :_reduce_109, - 1, 190, :_reduce_none, - 1, 190, :_reduce_none, - 1, 190, :_reduce_none, - 1, 190, :_reduce_none, - 1, 190, :_reduce_none, - 1, 193, :_reduce_115, - 1, 193, :_reduce_none, - 1, 151, :_reduce_none, - 1, 151, :_reduce_none, - 1, 152, :_reduce_119, - 0, 196, :_reduce_120, - 4, 152, :_reduce_121, - 1, 191, :_reduce_none, - 1, 191, :_reduce_none, - 1, 191, :_reduce_none, - 1, 191, :_reduce_none, - 1, 191, :_reduce_none, - 1, 191, :_reduce_none, - 1, 191, :_reduce_none, - 1, 191, :_reduce_none, - 1, 191, :_reduce_none, - 1, 191, :_reduce_none, - 1, 191, :_reduce_none, - 1, 191, :_reduce_none, - 1, 191, :_reduce_none, - 1, 191, :_reduce_none, - 1, 191, :_reduce_none, - 1, 191, :_reduce_none, - 1, 191, :_reduce_none, - 1, 191, :_reduce_none, - 1, 191, :_reduce_none, - 1, 191, :_reduce_none, - 1, 191, :_reduce_none, - 1, 191, :_reduce_none, - 1, 191, :_reduce_none, - 1, 191, :_reduce_none, - 1, 191, :_reduce_none, - 1, 191, :_reduce_none, - 1, 191, :_reduce_none, - 1, 191, :_reduce_none, - 1, 191, :_reduce_none, - 1, 192, :_reduce_none, - 1, 192, :_reduce_none, - 1, 192, :_reduce_none, - 1, 192, :_reduce_none, - 1, 192, :_reduce_none, - 1, 192, :_reduce_none, - 1, 192, :_reduce_none, - 1, 192, :_reduce_none, - 1, 192, :_reduce_none, - 1, 192, :_reduce_none, - 1, 192, :_reduce_none, - 1, 192, :_reduce_none, - 1, 192, :_reduce_none, - 1, 192, :_reduce_none, - 1, 192, :_reduce_none, - 1, 192, :_reduce_none, - 1, 192, :_reduce_none, - 1, 192, :_reduce_none, - 1, 192, :_reduce_none, - 1, 192, :_reduce_none, - 1, 192, :_reduce_none, - 1, 192, :_reduce_none, - 1, 192, :_reduce_none, - 1, 192, :_reduce_none, - 1, 192, :_reduce_none, - 1, 192, :_reduce_none, - 1, 192, :_reduce_none, - 1, 192, :_reduce_none, - 1, 192, :_reduce_none, - 1, 192, :_reduce_none, - 1, 192, :_reduce_none, - 1, 192, :_reduce_none, - 1, 192, :_reduce_none, - 1, 192, :_reduce_none, - 1, 192, :_reduce_none, - 1, 192, :_reduce_none, - 1, 192, :_reduce_none, - 1, 192, :_reduce_none, - 1, 192, :_reduce_none, - 1, 192, :_reduce_none, - 1, 192, :_reduce_none, - 3, 168, :_reduce_192, - 5, 168, :_reduce_193, - 3, 168, :_reduce_194, - 5, 168, :_reduce_195, - 6, 168, :_reduce_196, - 5, 168, :_reduce_197, - 5, 168, :_reduce_198, - 5, 168, :_reduce_199, - 5, 168, :_reduce_200, - 4, 168, :_reduce_201, - 3, 168, :_reduce_202, - 3, 168, :_reduce_203, - 3, 168, :_reduce_204, - 3, 168, :_reduce_205, - 3, 168, :_reduce_206, - 3, 168, :_reduce_207, - 3, 168, :_reduce_208, - 3, 168, :_reduce_209, - 3, 168, :_reduce_210, - 4, 168, :_reduce_211, - 4, 168, :_reduce_212, - 2, 168, :_reduce_213, - 2, 168, :_reduce_214, - 3, 168, :_reduce_215, - 3, 168, :_reduce_216, - 3, 168, :_reduce_217, - 3, 168, :_reduce_218, - 3, 168, :_reduce_219, - 3, 168, :_reduce_220, - 3, 168, :_reduce_221, - 3, 168, :_reduce_222, - 3, 168, :_reduce_223, - 3, 168, :_reduce_224, - 3, 168, :_reduce_225, - 3, 168, :_reduce_226, - 3, 168, :_reduce_227, - 2, 168, :_reduce_228, - 2, 168, :_reduce_229, - 3, 168, :_reduce_230, - 3, 168, :_reduce_231, - 3, 168, :_reduce_232, - 3, 168, :_reduce_233, - 3, 168, :_reduce_234, - 6, 168, :_reduce_235, - 1, 168, :_reduce_none, - 1, 164, :_reduce_none, - 1, 198, :_reduce_none, - 2, 198, :_reduce_none, - 4, 198, :_reduce_240, - 2, 198, :_reduce_241, - 3, 203, :_reduce_242, - 0, 204, :_reduce_243, - 1, 204, :_reduce_none, - 0, 159, :_reduce_245, - 1, 159, :_reduce_none, - 2, 159, :_reduce_none, - 4, 159, :_reduce_248, - 2, 159, :_reduce_249, - 1, 178, :_reduce_250, - 2, 178, :_reduce_251, - 2, 178, :_reduce_252, - 4, 178, :_reduce_253, - 1, 178, :_reduce_254, - 0, 207, :_reduce_255, - 2, 173, :_reduce_256, - 2, 206, :_reduce_257, - 2, 205, :_reduce_258, - 0, 205, :_reduce_259, - 1, 200, :_reduce_260, - 2, 200, :_reduce_261, - 3, 200, :_reduce_262, - 4, 200, :_reduce_263, - 3, 163, :_reduce_264, - 4, 163, :_reduce_265, - 2, 163, :_reduce_266, - 1, 197, :_reduce_none, - 1, 197, :_reduce_none, - 1, 197, :_reduce_none, - 1, 197, :_reduce_none, - 1, 197, :_reduce_none, - 1, 197, :_reduce_none, - 1, 197, :_reduce_none, - 1, 197, :_reduce_none, - 1, 197, :_reduce_275, - 3, 197, :_reduce_276, - 0, 231, :_reduce_277, - 0, 232, :_reduce_278, - 6, 197, :_reduce_279, - 3, 197, :_reduce_280, - 3, 197, :_reduce_281, - 2, 197, :_reduce_282, - 3, 197, :_reduce_283, - 3, 197, :_reduce_284, - 1, 197, :_reduce_285, - 4, 197, :_reduce_286, - 3, 197, :_reduce_287, - 1, 197, :_reduce_288, - 5, 197, :_reduce_289, - 4, 197, :_reduce_290, - 3, 197, :_reduce_291, - 2, 197, :_reduce_292, - 1, 197, :_reduce_none, - 2, 197, :_reduce_294, - 0, 233, :_reduce_295, - 3, 197, :_reduce_296, - 6, 197, :_reduce_297, - 6, 197, :_reduce_298, - 0, 234, :_reduce_299, - 0, 235, :_reduce_300, - 7, 197, :_reduce_301, - 0, 236, :_reduce_302, - 0, 237, :_reduce_303, - 7, 197, :_reduce_304, - 5, 197, :_reduce_305, - 4, 197, :_reduce_306, - 0, 238, :_reduce_307, - 0, 239, :_reduce_308, - 9, 197, :_reduce_309, - 0, 240, :_reduce_310, - 6, 197, :_reduce_311, - 0, 241, :_reduce_312, - 7, 197, :_reduce_313, - 0, 242, :_reduce_314, - 5, 197, :_reduce_315, - 0, 243, :_reduce_316, - 6, 197, :_reduce_317, - 0, 244, :_reduce_318, - 0, 245, :_reduce_319, - 9, 197, :_reduce_320, - 1, 197, :_reduce_321, - 1, 197, :_reduce_322, - 1, 197, :_reduce_323, - 1, 197, :_reduce_324, - 1, 158, :_reduce_none, - 1, 224, :_reduce_326, - 1, 227, :_reduce_327, - 1, 219, :_reduce_none, - 1, 219, :_reduce_none, - 2, 219, :_reduce_330, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 220, :_reduce_none, - 5, 220, :_reduce_334, - 1, 148, :_reduce_none, - 2, 148, :_reduce_336, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 246, :_reduce_339, - 3, 246, :_reduce_340, - 1, 249, :_reduce_341, - 3, 249, :_reduce_342, - 1, 248, :_reduce_none, - 4, 248, :_reduce_344, - 6, 248, :_reduce_345, - 3, 248, :_reduce_346, - 5, 248, :_reduce_347, - 2, 248, :_reduce_348, - 4, 248, :_reduce_349, - 1, 248, :_reduce_350, - 3, 248, :_reduce_351, - 6, 250, :_reduce_352, - 8, 250, :_reduce_353, - 4, 250, :_reduce_354, - 6, 250, :_reduce_355, - 4, 250, :_reduce_356, - 2, 250, :_reduce_none, - 6, 250, :_reduce_358, - 2, 250, :_reduce_359, - 4, 250, :_reduce_360, - 6, 250, :_reduce_361, - 2, 250, :_reduce_362, - 4, 250, :_reduce_363, - 2, 250, :_reduce_364, - 4, 250, :_reduce_365, - 1, 250, :_reduce_366, - 0, 175, :_reduce_367, - 1, 175, :_reduce_368, - 3, 256, :_reduce_369, - 1, 256, :_reduce_370, - 4, 256, :_reduce_371, - 0, 257, :_reduce_372, - 2, 257, :_reduce_373, - 1, 258, :_reduce_374, - 3, 258, :_reduce_375, - 1, 259, :_reduce_376, - 1, 259, :_reduce_none, - 0, 263, :_reduce_378, - 3, 218, :_reduce_379, - 4, 261, :_reduce_380, - 1, 261, :_reduce_381, - 0, 266, :_reduce_382, - 4, 262, :_reduce_383, - 0, 267, :_reduce_384, - 4, 262, :_reduce_385, - 0, 268, :_reduce_386, - 5, 265, :_reduce_387, - 2, 171, :_reduce_388, - 4, 171, :_reduce_389, - 4, 171, :_reduce_390, - 2, 217, :_reduce_391, - 4, 217, :_reduce_392, - 4, 217, :_reduce_393, - 3, 217, :_reduce_394, - 3, 217, :_reduce_395, - 3, 217, :_reduce_396, - 2, 217, :_reduce_397, - 1, 217, :_reduce_398, - 4, 217, :_reduce_399, - 0, 270, :_reduce_400, - 5, 216, :_reduce_401, - 0, 271, :_reduce_402, - 5, 216, :_reduce_403, - 5, 222, :_reduce_404, - 1, 272, :_reduce_405, - 1, 272, :_reduce_none, - 6, 147, :_reduce_407, - 0, 147, :_reduce_408, - 1, 273, :_reduce_409, - 1, 273, :_reduce_none, - 1, 273, :_reduce_none, - 2, 274, :_reduce_412, - 1, 274, :_reduce_none, - 2, 149, :_reduce_414, - 1, 149, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 209, :_reduce_419, - 1, 276, :_reduce_420, - 2, 276, :_reduce_421, - 3, 277, :_reduce_422, - 1, 277, :_reduce_423, - 1, 277, :_reduce_424, - 3, 210, :_reduce_425, - 4, 211, :_reduce_426, - 3, 212, :_reduce_427, - 0, 281, :_reduce_428, - 3, 281, :_reduce_429, - 1, 282, :_reduce_430, - 2, 282, :_reduce_431, - 3, 213, :_reduce_432, - 0, 284, :_reduce_433, - 3, 284, :_reduce_434, - 0, 278, :_reduce_435, - 2, 278, :_reduce_436, - 0, 279, :_reduce_437, - 2, 279, :_reduce_438, - 0, 280, :_reduce_439, - 2, 280, :_reduce_440, - 1, 283, :_reduce_441, - 2, 283, :_reduce_442, - 0, 286, :_reduce_443, - 4, 283, :_reduce_444, - 1, 285, :_reduce_445, - 1, 285, :_reduce_446, - 1, 285, :_reduce_447, - 1, 285, :_reduce_none, - 1, 194, :_reduce_449, - 3, 195, :_reduce_450, - 1, 275, :_reduce_451, - 1, 275, :_reduce_452, - 2, 275, :_reduce_453, - 2, 275, :_reduce_454, - 1, 186, :_reduce_455, - 1, 186, :_reduce_456, - 1, 186, :_reduce_457, - 1, 186, :_reduce_458, - 1, 186, :_reduce_459, - 1, 187, :_reduce_460, - 1, 187, :_reduce_461, - 1, 187, :_reduce_462, - 1, 187, :_reduce_463, - 1, 187, :_reduce_464, - 1, 187, :_reduce_465, - 1, 187, :_reduce_466, - 1, 214, :_reduce_467, - 1, 214, :_reduce_468, - 1, 157, :_reduce_469, - 1, 157, :_reduce_470, - 1, 161, :_reduce_471, - 1, 161, :_reduce_472, - 1, 225, :_reduce_473, - 3, 225, :_reduce_474, - 2, 225, :_reduce_475, - 3, 228, :_reduce_476, - 2, 228, :_reduce_477, - 6, 264, :_reduce_478, - 8, 264, :_reduce_479, - 4, 264, :_reduce_480, - 6, 264, :_reduce_481, - 4, 264, :_reduce_482, - 6, 264, :_reduce_483, - 2, 264, :_reduce_484, - 4, 264, :_reduce_485, - 6, 264, :_reduce_486, - 2, 264, :_reduce_487, - 4, 264, :_reduce_488, - 2, 264, :_reduce_489, - 4, 264, :_reduce_490, - 1, 264, :_reduce_491, - 0, 264, :_reduce_492, - 1, 260, :_reduce_493, - 1, 260, :_reduce_494, - 1, 260, :_reduce_495, - 1, 260, :_reduce_496, - 1, 247, :_reduce_none, - 1, 247, :_reduce_none, - 1, 288, :_reduce_499, - 3, 288, :_reduce_500, - 1, 251, :_reduce_501, - 3, 251, :_reduce_502, - 3, 289, :_reduce_503, - 3, 290, :_reduce_504, - 1, 252, :_reduce_505, - 3, 252, :_reduce_506, - 1, 287, :_reduce_507, - 3, 287, :_reduce_508, - 1, 291, :_reduce_none, - 1, 291, :_reduce_none, - 2, 253, :_reduce_511, - 1, 253, :_reduce_512, - 1, 292, :_reduce_none, - 1, 292, :_reduce_none, - 2, 255, :_reduce_515, - 2, 254, :_reduce_516, - 0, 254, :_reduce_517, - 1, 229, :_reduce_none, - 3, 229, :_reduce_519, - 0, 215, :_reduce_520, - 2, 215, :_reduce_none, - 1, 202, :_reduce_522, - 3, 202, :_reduce_523, - 3, 293, :_reduce_524, - 2, 293, :_reduce_525, - 1, 177, :_reduce_none, - 1, 177, :_reduce_none, - 1, 177, :_reduce_none, - 1, 172, :_reduce_none, - 1, 172, :_reduce_none, - 1, 172, :_reduce_none, - 1, 172, :_reduce_none, - 1, 269, :_reduce_none, - 1, 269, :_reduce_none, - 1, 269, :_reduce_none, - 1, 230, :_reduce_none, - 1, 230, :_reduce_none, - 0, 141, :_reduce_none, - 1, 141, :_reduce_none, - 0, 167, :_reduce_none, - 1, 167, :_reduce_none, - 2, 181, :_reduce_542, - 2, 160, :_reduce_543, - 0, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 226, :_reduce_547, - 1, 226, :_reduce_none, - 1, 143, :_reduce_none, - 2, 143, :_reduce_none, - 0, 199, :_reduce_551 ] - -racc_reduce_n = 552 - -racc_shift_n = 961 - -racc_token_table = { - false => 0, - :error => 1, - :kCLASS => 2, - :kMODULE => 3, - :kDEF => 4, - :kUNDEF => 5, - :kBEGIN => 6, - :kRESCUE => 7, - :kENSURE => 8, - :kEND => 9, - :kIF => 10, - :kUNLESS => 11, - :kTHEN => 12, - :kELSIF => 13, - :kELSE => 14, - :kCASE => 15, - :kWHEN => 16, - :kWHILE => 17, - :kUNTIL => 18, - :kFOR => 19, - :kBREAK => 20, - :kNEXT => 21, - :kREDO => 22, - :kRETRY => 23, - :kIN => 24, - :kDO => 25, - :kDO_COND => 26, - :kDO_BLOCK => 27, - :kDO_LAMBDA => 28, - :kRETURN => 29, - :kYIELD => 30, - :kSUPER => 31, - :kSELF => 32, - :kNIL => 33, - :kTRUE => 34, - :kFALSE => 35, - :kAND => 36, - :kOR => 37, - :kNOT => 38, - :kIF_MOD => 39, - :kUNLESS_MOD => 40, - :kWHILE_MOD => 41, - :kUNTIL_MOD => 42, - :kRESCUE_MOD => 43, - :kALIAS => 44, - :kDEFINED => 45, - :klBEGIN => 46, - :klEND => 47, - :k__LINE__ => 48, - :k__FILE__ => 49, - :k__ENCODING__ => 50, - :tIDENTIFIER => 51, - :tFID => 52, - :tGVAR => 53, - :tIVAR => 54, - :tCONSTANT => 55, - :tLABEL => 56, - :tCVAR => 57, - :tNTH_REF => 58, - :tBACK_REF => 59, - :tSTRING_CONTENT => 60, - :tINTEGER => 61, - :tFLOAT => 62, - :tUPLUS => 63, - :tUMINUS => 64, - :tUNARY_NUM => 65, - :tPOW => 66, - :tCMP => 67, - :tEQ => 68, - :tEQQ => 69, - :tNEQ => 70, - :tGEQ => 71, - :tLEQ => 72, - :tANDOP => 73, - :tOROP => 74, - :tMATCH => 75, - :tNMATCH => 76, - :tDOT => 77, - :tDOT2 => 78, - :tDOT3 => 79, - :tAREF => 80, - :tASET => 81, - :tLSHFT => 82, - :tRSHFT => 83, - :tCOLON2 => 84, - :tCOLON3 => 85, - :tOP_ASGN => 86, - :tASSOC => 87, - :tLPAREN => 88, - :tLPAREN2 => 89, - :tRPAREN => 90, - :tLPAREN_ARG => 91, - :tLBRACK => 92, - :tLBRACK2 => 93, - :tRBRACK => 94, - :tLBRACE => 95, - :tLBRACE_ARG => 96, - :tSTAR => 97, - :tSTAR2 => 98, - :tAMPER => 99, - :tAMPER2 => 100, - :tTILDE => 101, - :tPERCENT => 102, - :tDIVIDE => 103, - :tPLUS => 104, - :tMINUS => 105, - :tLT => 106, - :tGT => 107, - :tPIPE => 108, - :tBANG => 109, - :tCARET => 110, - :tLCURLY => 111, - :tRCURLY => 112, - :tBACK_REF2 => 113, - :tSYMBEG => 114, - :tSTRING_BEG => 115, - :tXSTRING_BEG => 116, - :tREGEXP_BEG => 117, - :tREGEXP_OPT => 118, - :tWORDS_BEG => 119, - :tQWORDS_BEG => 120, - :tSTRING_DBEG => 121, - :tSTRING_DVAR => 122, - :tSTRING_END => 123, - :tSTRING => 124, - :tSYMBOL => 125, - :tNL => 126, - :tEH => 127, - :tCOLON => 128, - :tCOMMA => 129, - :tSPACE => 130, - :tSEMI => 131, - :tLAMBDA => 132, - :tLAMBEG => 133, - :tCHARACTER => 134, - :tEQL => 135, - :tLOWEST => 136 } - -racc_nt_base = 137 - -racc_use_result_var = true - -Racc_arg = [ - racc_action_table, - racc_action_check, - racc_action_default, - racc_action_pointer, - racc_goto_table, - racc_goto_check, - racc_goto_default, - racc_goto_pointer, - racc_nt_base, - racc_reduce_table, - racc_token_table, - racc_shift_n, - racc_reduce_n, - racc_use_result_var ] -Ractor.make_shareable(Racc_arg) if defined?(Ractor) - -Racc_token_to_s_table = [ - "$end", - "error", - "kCLASS", - "kMODULE", - "kDEF", - "kUNDEF", - "kBEGIN", - "kRESCUE", - "kENSURE", - "kEND", - "kIF", - "kUNLESS", - "kTHEN", - "kELSIF", - "kELSE", - "kCASE", - "kWHEN", - "kWHILE", - "kUNTIL", - "kFOR", - "kBREAK", - "kNEXT", - "kREDO", - "kRETRY", - "kIN", - "kDO", - "kDO_COND", - "kDO_BLOCK", - "kDO_LAMBDA", - "kRETURN", - "kYIELD", - "kSUPER", - "kSELF", - "kNIL", - "kTRUE", - "kFALSE", - "kAND", - "kOR", - "kNOT", - "kIF_MOD", - "kUNLESS_MOD", - "kWHILE_MOD", - "kUNTIL_MOD", - "kRESCUE_MOD", - "kALIAS", - "kDEFINED", - "klBEGIN", - "klEND", - "k__LINE__", - "k__FILE__", - "k__ENCODING__", - "tIDENTIFIER", - "tFID", - "tGVAR", - "tIVAR", - "tCONSTANT", - "tLABEL", - "tCVAR", - "tNTH_REF", - "tBACK_REF", - "tSTRING_CONTENT", - "tINTEGER", - "tFLOAT", - "tUPLUS", - "tUMINUS", - "tUNARY_NUM", - "tPOW", - "tCMP", - "tEQ", - "tEQQ", - "tNEQ", - "tGEQ", - "tLEQ", - "tANDOP", - "tOROP", - "tMATCH", - "tNMATCH", - "tDOT", - "tDOT2", - "tDOT3", - "tAREF", - "tASET", - "tLSHFT", - "tRSHFT", - "tCOLON2", - "tCOLON3", - "tOP_ASGN", - "tASSOC", - "tLPAREN", - "tLPAREN2", - "tRPAREN", - "tLPAREN_ARG", - "tLBRACK", - "tLBRACK2", - "tRBRACK", - "tLBRACE", - "tLBRACE_ARG", - "tSTAR", - "tSTAR2", - "tAMPER", - "tAMPER2", - "tTILDE", - "tPERCENT", - "tDIVIDE", - "tPLUS", - "tMINUS", - "tLT", - "tGT", - "tPIPE", - "tBANG", - "tCARET", - "tLCURLY", - "tRCURLY", - "tBACK_REF2", - "tSYMBEG", - "tSTRING_BEG", - "tXSTRING_BEG", - "tREGEXP_BEG", - "tREGEXP_OPT", - "tWORDS_BEG", - "tQWORDS_BEG", - "tSTRING_DBEG", - "tSTRING_DVAR", - "tSTRING_END", - "tSTRING", - "tSYMBOL", - "tNL", - "tEH", - "tCOLON", - "tCOMMA", - "tSPACE", - "tSEMI", - "tLAMBDA", - "tLAMBEG", - "tCHARACTER", - "tEQL", - "tLOWEST", - "$start", - "program", - "top_compstmt", - "top_stmts", - "opt_terms", - "top_stmt", - "terms", - "stmt", - "bodystmt", - "compstmt", - "opt_rescue", - "opt_else", - "opt_ensure", - "stmts", - "fitem", - "undef_list", - "expr_value", - "command_asgn", - "mlhs", - "command_call", - "var_lhs", - "primary_value", - "opt_call_args", - "rbracket", - "backref", - "lhs", - "mrhs", - "arg_value", - "expr", - "@1", - "opt_nl", - "arg", - "command", - "block_command", - "block_call", - "operation2", - "command_args", - "cmd_brace_block", - "opt_block_param", - "@2", - "operation", - "call_args", - "mlhs_basic", - "mlhs_inner", - "rparen", - "mlhs_head", - "mlhs_item", - "mlhs_node", - "mlhs_post", - "user_variable", - "keyword_variable", - "cname", - "cpath", - "fname", - "op", - "reswords", - "fsym", - "symbol", - "dsym", - "@3", - "primary", - "aref_args", - "none", - "args", - "trailer", - "assocs", - "paren_args", - "opt_paren_args", - "opt_block_arg", - "block_arg", - "@4", - "literal", - "strings", - "xstring", - "regexp", - "words", - "qwords", - "var_ref", - "assoc_list", - "brace_block", - "method_call", - "lambda", - "then", - "if_tail", - "do", - "case_body", - "for_var", - "k_class", - "superclass", - "term", - "k_module", - "f_arglist", - "singleton", - "dot_or_colon", - "@5", - "@6", - "@7", - "@8", - "@9", - "@10", - "@11", - "@12", - "@13", - "@14", - "@15", - "@16", - "@17", - "@18", - "@19", - "f_marg", - "f_norm_arg", - "f_margs", - "f_marg_list", - "block_param", - "f_arg", - "f_block_optarg", - "f_rest_arg", - "opt_f_block_arg", - "f_block_arg", - "block_param_def", - "opt_bv_decl", - "bv_decls", - "bvar", - "f_bad_arg", - "f_larglist", - "lambda_body", - "@20", - "f_args", - "do_block", - "@21", - "@22", - "@23", - "operation3", - "@24", - "@25", - "cases", - "exc_list", - "exc_var", - "numeric", - "string", - "string1", - "string_contents", - "xstring_contents", - "regexp_contents", - "word_list", - "word", - "string_content", - "qword_list", - "string_dvar", - "@26", - "f_optarg", - "f_arg_item", - "f_opt", - "f_block_opt", - "restarg_mark", - "blkarg_mark", - "assoc" ] -Ractor.make_shareable(Racc_token_to_s_table) if defined?(Ractor) - -Racc_debug_parser = false - -##### State transition tables end ##### - -# reduce 0 omitted - -# reduce 1 omitted - -def _reduce_2(val, _values, result) - result = @builder.compstmt(val[0]) - - result -end - -def _reduce_3(val, _values, result) - result = [] - - result -end - -def _reduce_4(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_5(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_6(val, _values, result) - result = [ val[1] ] - - result -end - -# reduce 7 omitted - -def _reduce_8(val, _values, result) - result = @builder.preexe(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_9(val, _values, result) - rescue_bodies = val[1] - else_t, else_ = val[2] - ensure_t, ensure_ = val[3] - - if rescue_bodies.empty? && !else_t.nil? - diagnostic :warning, :useless_else, nil, else_t - end - - result = @builder.begin_body(val[0], - rescue_bodies, - else_t, else_, - ensure_t, ensure_) - - result -end - -def _reduce_10(val, _values, result) - result = @builder.compstmt(val[0]) - - result -end - -def _reduce_11(val, _values, result) - result = [] - - result -end - -def _reduce_12(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_13(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_14(val, _values, result) - result = [ val[1] ] - - result -end - -def _reduce_15(val, _values, result) - @lexer.state = :expr_fname - - result -end - -def _reduce_16(val, _values, result) - result = @builder.alias(val[0], val[1], val[3]) - - result -end - -def _reduce_17(val, _values, result) - result = @builder.alias(val[0], - @builder.gvar(val[1]), - @builder.gvar(val[2])) - - result -end - -def _reduce_18(val, _values, result) - result = @builder.alias(val[0], - @builder.gvar(val[1]), - @builder.back_ref(val[2])) - - result -end - -def _reduce_19(val, _values, result) - diagnostic :error, :nth_ref_alias, nil, val[2] - - result -end - -def _reduce_20(val, _values, result) - result = @builder.undef_method(val[0], val[1]) - - result -end - -def _reduce_21(val, _values, result) - result = @builder.condition_mod(val[0], nil, - val[1], val[2]) - - result -end - -def _reduce_22(val, _values, result) - result = @builder.condition_mod(nil, val[0], - val[1], val[2]) - - result -end - -def _reduce_23(val, _values, result) - result = @builder.loop_mod(:while, val[0], val[1], val[2]) - - result -end - -def _reduce_24(val, _values, result) - result = @builder.loop_mod(:until, val[0], val[1], val[2]) - - result -end - -def _reduce_25(val, _values, result) - rescue_body = @builder.rescue_body(val[1], - nil, nil, nil, - nil, val[2]) - - result = @builder.begin_body(val[0], [ rescue_body ]) - - result -end - -def _reduce_26(val, _values, result) - result = @builder.postexe(val[0], val[1], val[2], val[3]) - - result -end - -# reduce 27 omitted - -def _reduce_28(val, _values, result) - result = @builder.multi_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_29(val, _values, result) - result = @builder.op_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_30(val, _values, result) - result = @builder.op_assign( - @builder.index( - val[0], val[1], val[2], val[3]), - val[4], val[5]) - - result -end - -def _reduce_31(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_32(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_33(val, _values, result) - diagnostic :error, :const_reassignment, nil, val[3] - - result -end - -def _reduce_34(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_35(val, _values, result) - @builder.op_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_36(val, _values, result) - result = @builder.assign(val[0], val[1], - @builder.array(nil, val[2], nil)) - - result -end - -def _reduce_37(val, _values, result) - result = @builder.multi_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_38(val, _values, result) - result = @builder.multi_assign(val[0], val[1], - @builder.array(nil, val[2], nil)) - - result -end - -# reduce 39 omitted - -def _reduce_40(val, _values, result) - result = @builder.assign(val[0], val[1], val[2]) - - result -end - -def _reduce_41(val, _values, result) - result = @builder.assign(val[0], val[1], val[2]) - - result -end - -# reduce 42 omitted - -def _reduce_43(val, _values, result) - result = @builder.logical_op(:and, val[0], val[1], val[2]) - - result -end - -def _reduce_44(val, _values, result) - result = @builder.logical_op(:or, val[0], val[1], val[2]) - - result -end - -def _reduce_45(val, _values, result) - result = @builder.not_op(val[0], nil, val[2], nil) - - result -end - -def _reduce_46(val, _values, result) - result = @builder.not_op(val[0], nil, val[1], nil) - - result -end - -# reduce 47 omitted - -# reduce 48 omitted - -# reduce 49 omitted - -# reduce 50 omitted - -# reduce 51 omitted - -def _reduce_52(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - result -end - -def _reduce_53(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - result -end - -def _reduce_54(val, _values, result) - @static_env.extend_dynamic - result = @context.dup - @context.in_block = true - - result -end - -def _reduce_55(val, _values, result) - result = [ val[0], val[2], val[3], val[4] ] - - @static_env.unextend - @context.in_block = val[1].in_block - - result -end - -def _reduce_56(val, _values, result) - result = @builder.call_method(nil, nil, val[0], - nil, val[1], nil) - - result -end - -def _reduce_57(val, _values, result) - method_call = @builder.call_method(nil, nil, val[0], - nil, val[1], nil) - - begin_t, args, body, end_t = val[2] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_58(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - result -end - -def _reduce_59(val, _values, result) - method_call = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - begin_t, args, body, end_t = val[4] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_60(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - result -end - -def _reduce_61(val, _values, result) - method_call = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - begin_t, args, body, end_t = val[4] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_62(val, _values, result) - result = @builder.keyword_cmd(:super, val[0], - nil, val[1], nil) - - result -end - -def _reduce_63(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0], - nil, val[1], nil) - - result -end - -def _reduce_64(val, _values, result) - result = @builder.keyword_cmd(:return, val[0], - nil, val[1], nil) - - result -end - -def _reduce_65(val, _values, result) - result = @builder.keyword_cmd(:break, val[0], - nil, val[1], nil) - - result -end - -def _reduce_66(val, _values, result) - result = @builder.keyword_cmd(:next, val[0], - nil, val[1], nil) - - result -end - -def _reduce_67(val, _values, result) - result = @builder.multi_lhs(nil, val[0], nil) - - result -end - -def _reduce_68(val, _values, result) - result = @builder.begin(val[0], val[1], val[2]) - - result -end - -def _reduce_69(val, _values, result) - result = @builder.multi_lhs(nil, val[0], nil) - - result -end - -def _reduce_70(val, _values, result) - result = @builder.multi_lhs(val[0], val[1], val[2]) - - result -end - -# reduce 71 omitted - -def _reduce_72(val, _values, result) - result = val[0]. - push(val[1]) - - result -end - -def _reduce_73(val, _values, result) - result = val[0]. - push(@builder.splat(val[1], val[2])) - - result -end - -def _reduce_74(val, _values, result) - result = val[0]. - push(@builder.splat(val[1], val[2])). - concat(val[4]) - - result -end - -def _reduce_75(val, _values, result) - result = val[0]. - push(@builder.splat(val[1])) - - result -end - -def _reduce_76(val, _values, result) - result = val[0]. - push(@builder.splat(val[1])). - concat(val[3]) - - result -end - -def _reduce_77(val, _values, result) - result = [ @builder.splat(val[0], val[1]) ] - - result -end - -def _reduce_78(val, _values, result) - result = [ @builder.splat(val[0], val[1]), - *val[3] ] - - result -end - -def _reduce_79(val, _values, result) - result = [ @builder.splat(val[0]) ] - - result -end - -def _reduce_80(val, _values, result) - result = [ @builder.splat(val[0]), - *val[2] ] - - result -end - -# reduce 81 omitted - -def _reduce_82(val, _values, result) - result = @builder.begin(val[0], val[1], val[2]) - - result -end - -def _reduce_83(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_84(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_85(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_86(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_87(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_88(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_89(val, _values, result) - result = @builder.index_asgn(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_90(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_91(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_92(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_93(val, _values, result) - result = @builder.assignable( - @builder.const_fetch(val[0], val[1], val[2])) - - result -end - -def _reduce_94(val, _values, result) - result = @builder.assignable( - @builder.const_global(val[0], val[1])) - - result -end - -def _reduce_95(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_96(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_97(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_98(val, _values, result) - result = @builder.index_asgn(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_99(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_100(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_101(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_102(val, _values, result) - result = @builder.assignable( - @builder.const_fetch(val[0], val[1], val[2])) - - result -end - -def _reduce_103(val, _values, result) - result = @builder.assignable( - @builder.const_global(val[0], val[1])) - - result -end - -def _reduce_104(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_105(val, _values, result) - diagnostic :error, :module_name_const, nil, val[0] - - result -end - -# reduce 106 omitted - -def _reduce_107(val, _values, result) - result = @builder.const_global(val[0], val[1]) - - result -end - -def _reduce_108(val, _values, result) - result = @builder.const(val[0]) - - result -end - -def _reduce_109(val, _values, result) - result = @builder.const_fetch(val[0], val[1], val[2]) - - result -end - -# reduce 110 omitted - -# reduce 111 omitted - -# reduce 112 omitted - -# reduce 113 omitted - -# reduce 114 omitted - -def _reduce_115(val, _values, result) - result = @builder.symbol_internal(val[0]) - - result -end - -# reduce 116 omitted - -# reduce 117 omitted - -# reduce 118 omitted - -def _reduce_119(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_120(val, _values, result) - @lexer.state = :expr_fname - - result -end - -def _reduce_121(val, _values, result) - result = val[0] << val[3] - - result -end - -# reduce 122 omitted - -# reduce 123 omitted - -# reduce 124 omitted - -# reduce 125 omitted - -# reduce 126 omitted - -# reduce 127 omitted - -# reduce 128 omitted - -# reduce 129 omitted - -# reduce 130 omitted - -# reduce 131 omitted - -# reduce 132 omitted - -# reduce 133 omitted - -# reduce 134 omitted - -# reduce 135 omitted - -# reduce 136 omitted - -# reduce 137 omitted - -# reduce 138 omitted - -# reduce 139 omitted - -# reduce 140 omitted - -# reduce 141 omitted - -# reduce 142 omitted - -# reduce 143 omitted - -# reduce 144 omitted - -# reduce 145 omitted - -# reduce 146 omitted - -# reduce 147 omitted - -# reduce 148 omitted - -# reduce 149 omitted - -# reduce 150 omitted - -# reduce 151 omitted - -# reduce 152 omitted - -# reduce 153 omitted - -# reduce 154 omitted - -# reduce 155 omitted - -# reduce 156 omitted - -# reduce 157 omitted - -# reduce 158 omitted - -# reduce 159 omitted - -# reduce 160 omitted - -# reduce 161 omitted - -# reduce 162 omitted - -# reduce 163 omitted - -# reduce 164 omitted - -# reduce 165 omitted - -# reduce 166 omitted - -# reduce 167 omitted - -# reduce 168 omitted - -# reduce 169 omitted - -# reduce 170 omitted - -# reduce 171 omitted - -# reduce 172 omitted - -# reduce 173 omitted - -# reduce 174 omitted - -# reduce 175 omitted - -# reduce 176 omitted - -# reduce 177 omitted - -# reduce 178 omitted - -# reduce 179 omitted - -# reduce 180 omitted - -# reduce 181 omitted - -# reduce 182 omitted - -# reduce 183 omitted - -# reduce 184 omitted - -# reduce 185 omitted - -# reduce 186 omitted - -# reduce 187 omitted - -# reduce 188 omitted - -# reduce 189 omitted - -# reduce 190 omitted - -# reduce 191 omitted - -def _reduce_192(val, _values, result) - result = @builder.assign(val[0], val[1], val[2]) - - result -end - -def _reduce_193(val, _values, result) - rescue_body = @builder.rescue_body(val[3], - nil, nil, nil, - nil, val[4]) - - rescue_ = @builder.begin_body(val[2], [ rescue_body ]) - - result = @builder.assign(val[0], val[1], rescue_) - - result -end - -def _reduce_194(val, _values, result) - result = @builder.op_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_195(val, _values, result) - rescue_body = @builder.rescue_body(val[3], - nil, nil, nil, - nil, val[4]) - - rescue_ = @builder.begin_body(val[2], [ rescue_body ]) - - result = @builder.op_assign(val[0], val[1], rescue_) - - result -end - -def _reduce_196(val, _values, result) - result = @builder.op_assign( - @builder.index( - val[0], val[1], val[2], val[3]), - val[4], val[5]) - - result -end - -def _reduce_197(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_198(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_199(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_200(val, _values, result) - diagnostic :error, :dynamic_const, nil, val[2], [ val[3] ] - - result -end - -def _reduce_201(val, _values, result) - diagnostic :error, :dynamic_const, nil, val[1], [ val[2] ] - - result -end - -def _reduce_202(val, _values, result) - result = @builder.op_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_203(val, _values, result) - result = @builder.range_inclusive(val[0], val[1], val[2]) - - result -end - -def _reduce_204(val, _values, result) - result = @builder.range_exclusive(val[0], val[1], val[2]) - - result -end - -def _reduce_205(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_206(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_207(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_208(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_209(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_210(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_211(val, _values, result) - result = @builder.unary_op(val[0], - @builder.binary_op( - @builder.integer(val[1]), - val[2], val[3])) - - result -end - -def _reduce_212(val, _values, result) - result = @builder.unary_op(val[0], - @builder.binary_op( - @builder.float(val[1]), - val[2], val[3])) - - result -end - -def _reduce_213(val, _values, result) - result = @builder.unary_op(val[0], val[1]) - - result -end - -def _reduce_214(val, _values, result) - result = @builder.unary_op(val[0], val[1]) - - result -end - -def _reduce_215(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_216(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_217(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_218(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_219(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_220(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_221(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_222(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_223(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_224(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_225(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_226(val, _values, result) - result = @builder.match_op(val[0], val[1], val[2]) - - result -end - -def _reduce_227(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_228(val, _values, result) - result = @builder.not_op(val[0], nil, val[1], nil) - - result -end - -def _reduce_229(val, _values, result) - result = @builder.unary_op(val[0], val[1]) - - result -end - -def _reduce_230(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_231(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_232(val, _values, result) - result = @builder.logical_op(:and, val[0], val[1], val[2]) - - result -end - -def _reduce_233(val, _values, result) - result = @builder.logical_op(:or, val[0], val[1], val[2]) - - result -end - -def _reduce_234(val, _values, result) - result = @builder.keyword_cmd(:defined?, val[0], nil, [ val[2] ], nil) - - result -end - -def _reduce_235(val, _values, result) - result = @builder.ternary(val[0], val[1], - val[2], val[4], val[5]) - - result -end - -# reduce 236 omitted - -# reduce 237 omitted - -# reduce 238 omitted - -# reduce 239 omitted - -def _reduce_240(val, _values, result) - result = val[0] << @builder.associate(nil, val[2], nil) - - result -end - -def _reduce_241(val, _values, result) - result = [ @builder.associate(nil, val[0], nil) ] - - result -end - -def _reduce_242(val, _values, result) - result = val - - result -end - -def _reduce_243(val, _values, result) - result = [ nil, [], nil ] - - result -end - -# reduce 244 omitted - -def _reduce_245(val, _values, result) - result = [] - - result -end - -# reduce 246 omitted - -# reduce 247 omitted - -def _reduce_248(val, _values, result) - result = val[0] << @builder.associate(nil, val[2], nil) - - result -end - -def _reduce_249(val, _values, result) - result = [ @builder.associate(nil, val[0], nil) ] - - result -end - -def _reduce_250(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_251(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_252(val, _values, result) - result = [ @builder.associate(nil, val[0], nil) ] - result.concat(val[1]) - - result -end - -def _reduce_253(val, _values, result) - assocs = @builder.associate(nil, val[2], nil) - result = val[0] << assocs - result.concat(val[3]) - - result -end - -def _reduce_254(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_255(val, _values, result) - result = @lexer.cmdarg.dup - @lexer.cmdarg.push(true) - - result -end - -def _reduce_256(val, _values, result) - @lexer.cmdarg = val[0] - - result = val[1] - - result -end - -def _reduce_257(val, _values, result) - result = @builder.block_pass(val[0], val[1]) - - result -end - -def _reduce_258(val, _values, result) - result = [ val[1] ] - - result -end - -def _reduce_259(val, _values, result) - result = [] - - result -end - -def _reduce_260(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_261(val, _values, result) - result = [ @builder.splat(val[0], val[1]) ] - - result -end - -def _reduce_262(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_263(val, _values, result) - result = val[0] << @builder.splat(val[2], val[3]) - - result -end - -def _reduce_264(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_265(val, _values, result) - result = val[0] << @builder.splat(val[2], val[3]) - - result -end - -def _reduce_266(val, _values, result) - result = [ @builder.splat(val[0], val[1]) ] - - result -end - -# reduce 267 omitted - -# reduce 268 omitted - -# reduce 269 omitted - -# reduce 270 omitted - -# reduce 271 omitted - -# reduce 272 omitted - -# reduce 273 omitted - -# reduce 274 omitted - -def _reduce_275(val, _values, result) - result = @builder.call_method(nil, nil, val[0]) - - result -end - -def _reduce_276(val, _values, result) - result = @builder.begin_keyword(val[0], val[1], val[2]) - - result -end - -def _reduce_277(val, _values, result) - result = @lexer.cmdarg.dup - @lexer.cmdarg.clear - - result -end - -def _reduce_278(val, _values, result) - @lexer.state = :expr_endarg - - result -end - -def _reduce_279(val, _values, result) - @lexer.cmdarg = val[1] - - result = @builder.begin(val[0], val[2], val[5]) - - result -end - -def _reduce_280(val, _values, result) - result = @builder.begin(val[0], val[1], val[2]) - - result -end - -def _reduce_281(val, _values, result) - result = @builder.const_fetch(val[0], val[1], val[2]) - - result -end - -def _reduce_282(val, _values, result) - result = @builder.const_global(val[0], val[1]) - - result -end - -def _reduce_283(val, _values, result) - result = @builder.array(val[0], val[1], val[2]) - - result -end - -def _reduce_284(val, _values, result) - result = @builder.associate(val[0], val[1], val[2]) - - result -end - -def _reduce_285(val, _values, result) - result = @builder.keyword_cmd(:return, val[0]) - - result -end - -def _reduce_286(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_287(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0], val[1], [], val[2]) - - result -end - -def _reduce_288(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0]) - - result -end - -def _reduce_289(val, _values, result) - result = @builder.keyword_cmd(:defined?, val[0], - val[2], [ val[3] ], val[4]) - - result -end - -def _reduce_290(val, _values, result) - result = @builder.not_op(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_291(val, _values, result) - result = @builder.not_op(val[0], val[1], nil, val[2]) - - result -end - -def _reduce_292(val, _values, result) - method_call = @builder.call_method(nil, nil, val[0]) - - begin_t, args, body, end_t = val[1] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -# reduce 293 omitted - -def _reduce_294(val, _values, result) - begin_t, args, body, end_t = val[1] - result = @builder.block(val[0], - begin_t, args, body, end_t) - - result -end - -def _reduce_295(val, _values, result) - result = @context.dup - @context.in_lambda = true - - result -end - -def _reduce_296(val, _values, result) - lambda_call = @builder.call_lambda(val[0]) - - args, (begin_t, body, end_t) = val[2] - result = @builder.block(lambda_call, - begin_t, args, body, end_t) - - @context.in_lambda = val[1].in_lambda - - result -end - -def _reduce_297(val, _values, result) - else_t, else_ = val[4] - result = @builder.condition(val[0], val[1], val[2], - val[3], else_t, - else_, val[5]) - - result -end - -def _reduce_298(val, _values, result) - else_t, else_ = val[4] - result = @builder.condition(val[0], val[1], val[2], - else_, else_t, - val[3], val[5]) - - result -end - -def _reduce_299(val, _values, result) - @lexer.cond.push(true) - - result -end - -def _reduce_300(val, _values, result) - @lexer.cond.pop - - result -end - -def _reduce_301(val, _values, result) - result = @builder.loop(:while, val[0], val[2], val[3], - val[5], val[6]) - - result -end - -def _reduce_302(val, _values, result) - @lexer.cond.push(true) - - result -end - -def _reduce_303(val, _values, result) - @lexer.cond.pop - - result -end - -def _reduce_304(val, _values, result) - result = @builder.loop(:until, val[0], val[2], val[3], - val[5], val[6]) - - result -end - -def _reduce_305(val, _values, result) - *when_bodies, (else_t, else_body) = *val[3] - - result = @builder.case(val[0], val[1], - when_bodies, else_t, else_body, - val[4]) - - result -end - -def _reduce_306(val, _values, result) - *when_bodies, (else_t, else_body) = *val[2] - - result = @builder.case(val[0], nil, - when_bodies, else_t, else_body, - val[3]) - - result -end - -def _reduce_307(val, _values, result) - @lexer.cond.push(true) - - result -end - -def _reduce_308(val, _values, result) - @lexer.cond.pop - - result -end - -def _reduce_309(val, _values, result) - result = @builder.for(val[0], val[1], - val[2], val[4], - val[5], val[7], val[8]) - - result -end - -def _reduce_310(val, _values, result) - local_push - @context.in_class = true - - result -end - -def _reduce_311(val, _values, result) - k_class, ctx = val[0] - if @context.in_def - diagnostic :error, :class_in_def, nil, k_class - end - - lt_t, superclass = val[2] - result = @builder.def_class(k_class, val[1], - lt_t, superclass, - val[4], val[5]) - - local_pop - @context.in_class = ctx.in_class - - result -end - -def _reduce_312(val, _values, result) - @context.in_def = false - @context.in_class = false - local_push - - result -end - -def _reduce_313(val, _values, result) - k_class, ctx = val[0] - result = @builder.def_sclass(k_class, val[1], val[2], - val[5], val[6]) - - local_pop - @context.in_def = ctx.in_def - @context.in_class = ctx.in_class - - result -end - -def _reduce_314(val, _values, result) - @context.in_class = true - local_push - - result -end - -def _reduce_315(val, _values, result) - k_mod, ctx = val[0] - if @context.in_def - diagnostic :error, :module_in_def, nil, k_mod - end - - result = @builder.def_module(k_mod, val[1], - val[3], val[4]) - - local_pop - @context.in_class = ctx.in_class - - result -end - -def _reduce_316(val, _values, result) - local_push - result = context.dup - @context.in_def = true - - result -end - -def _reduce_317(val, _values, result) - result = @builder.def_method(val[0], val[1], - val[3], val[4], val[5]) - - local_pop - @context.in_def = val[2].in_def - - result -end - -def _reduce_318(val, _values, result) - @lexer.state = :expr_fname - - result -end - -def _reduce_319(val, _values, result) - local_push - result = context.dup - @context.in_def = true - - result -end - -def _reduce_320(val, _values, result) - result = @builder.def_singleton(val[0], val[1], val[2], - val[4], val[6], val[7], val[8]) - - local_pop - @context.in_def = val[5].in_def - - result -end - -def _reduce_321(val, _values, result) - result = @builder.keyword_cmd(:break, val[0]) - - result -end - -def _reduce_322(val, _values, result) - result = @builder.keyword_cmd(:next, val[0]) - - result -end - -def _reduce_323(val, _values, result) - result = @builder.keyword_cmd(:redo, val[0]) - - result -end - -def _reduce_324(val, _values, result) - result = @builder.keyword_cmd(:retry, val[0]) - - result -end - -# reduce 325 omitted - -def _reduce_326(val, _values, result) - result = [ val[0], @context.dup ] - - result -end - -def _reduce_327(val, _values, result) - result = [ val[0], @context.dup ] - - result -end - -# reduce 328 omitted - -# reduce 329 omitted - -def _reduce_330(val, _values, result) - result = val[1] - - result -end - -# reduce 331 omitted - -# reduce 332 omitted - -# reduce 333 omitted - -def _reduce_334(val, _values, result) - else_t, else_ = val[4] - result = [ val[0], - @builder.condition(val[0], val[1], val[2], - val[3], else_t, - else_, nil), - ] - - result -end - -# reduce 335 omitted - -def _reduce_336(val, _values, result) - result = val - - result -end - -# reduce 337 omitted - -# reduce 338 omitted - -def _reduce_339(val, _values, result) - @static_env.declare val[0][0] - - result = @builder.arg(val[0]) - - result -end - -def _reduce_340(val, _values, result) - result = @builder.multi_lhs(val[0], val[1], val[2]) - - result -end - -def _reduce_341(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_342(val, _values, result) - result = val[0] << val[2] - - result -end - -# reduce 343 omitted - -def _reduce_344(val, _values, result) - @static_env.declare val[3][0] - - result = val[0]. - push(@builder.restarg(val[2], val[3])) - - result -end - -def _reduce_345(val, _values, result) - @static_env.declare val[3][0] - - result = val[0]. - push(@builder.restarg(val[2], val[3])). - concat(val[5]) - - result -end - -def _reduce_346(val, _values, result) - result = val[0]. - push(@builder.restarg(val[2])) - - result -end - -def _reduce_347(val, _values, result) - result = val[0]. - push(@builder.restarg(val[2])). - concat(val[4]) - - result -end - -def _reduce_348(val, _values, result) - @static_env.declare val[1][0] - - result = [ @builder.restarg(val[0], val[1]) ] - - result -end - -def _reduce_349(val, _values, result) - @static_env.declare val[1][0] - - result = [ @builder.restarg(val[0], val[1]), - *val[3] ] - - result -end - -def _reduce_350(val, _values, result) - result = [ @builder.restarg(val[0]) ] - - result -end - -def _reduce_351(val, _values, result) - result = [ @builder.restarg(val[0]), - *val[2] ] - - result -end - -def _reduce_352(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_353(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[6]). - concat(val[7]) - - result -end - -def _reduce_354(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_355(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_356(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -# reduce 357 omitted - -def _reduce_358(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_359(val, _values, result) - if val[1].empty? && val[0].size == 1 - result = [@builder.procarg0(val[0][0])] - else - result = val[0].concat(val[1]) - end - - result -end - -def _reduce_360(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_361(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_362(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_363(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_364(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_365(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_366(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_367(val, _values, result) - result = @builder.args(nil, [], nil) - - result -end - -def _reduce_368(val, _values, result) - @lexer.state = :expr_value - - result -end - -def _reduce_369(val, _values, result) - result = @builder.args(val[0], val[1], val[2]) - - result -end - -def _reduce_370(val, _values, result) - result = @builder.args(val[0], [], val[0]) - - result -end - -def _reduce_371(val, _values, result) - result = @builder.args(val[0], val[1].concat(val[2]), val[3]) - - result -end - -def _reduce_372(val, _values, result) - result = [] - - result -end - -def _reduce_373(val, _values, result) - result = val[1] - - result -end - -def _reduce_374(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_375(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_376(val, _values, result) - @static_env.declare val[0][0] - result = @builder.shadowarg(val[0]) - - result -end - -# reduce 377 omitted - -def _reduce_378(val, _values, result) - @static_env.extend_dynamic - - result -end - -def _reduce_379(val, _values, result) - result = [ val[1], val[2] ] - - @static_env.unextend - - result -end - -def _reduce_380(val, _values, result) - result = @builder.args(val[0], val[1].concat(val[2]), val[3]) - - result -end - -def _reduce_381(val, _values, result) - result = @builder.args(nil, val[0], nil) - - result -end - -def _reduce_382(val, _values, result) - result = @context.dup - @context.in_lambda = true - - result -end - -def _reduce_383(val, _values, result) - result = [ val[0], val[2], val[3] ] - @context.in_lambda = val[1].in_lambda - - result -end - -def _reduce_384(val, _values, result) - result = @context.dup - @context.in_lambda = true - - result -end - -def _reduce_385(val, _values, result) - result = [ val[0], val[2], val[3] ] - @context.in_lambda = val[1].in_lambda - - result -end - -def _reduce_386(val, _values, result) - @static_env.extend_dynamic - result = @context.dup - @context.in_block = true - - result -end - -def _reduce_387(val, _values, result) - result = [ val[0], val[2], val[3], val[4] ] - - @static_env.unextend - @context.in_block = val[1].in_block - - result -end - -def _reduce_388(val, _values, result) - begin_t, block_args, body, end_t = val[1] - result = @builder.block(val[0], - begin_t, block_args, body, end_t) - - result -end - -def _reduce_389(val, _values, result) - lparen_t, args, rparen_t = val[3] - result = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - result -end - -def _reduce_390(val, _values, result) - lparen_t, args, rparen_t = val[3] - result = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - result -end - -def _reduce_391(val, _values, result) - lparen_t, args, rparen_t = val[1] - result = @builder.call_method(nil, nil, val[0], - lparen_t, args, rparen_t) - - result -end - -def _reduce_392(val, _values, result) - lparen_t, args, rparen_t = val[3] - result = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - result -end - -def _reduce_393(val, _values, result) - lparen_t, args, rparen_t = val[3] - result = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - result -end - -def _reduce_394(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2]) - - result -end - -def _reduce_395(val, _values, result) - lparen_t, args, rparen_t = val[2] - result = @builder.call_method(val[0], val[1], nil, - lparen_t, args, rparen_t) - - result -end - -def _reduce_396(val, _values, result) - lparen_t, args, rparen_t = val[2] - result = @builder.call_method(val[0], val[1], nil, - lparen_t, args, rparen_t) - - result -end - -def _reduce_397(val, _values, result) - lparen_t, args, rparen_t = val[1] - result = @builder.keyword_cmd(:super, val[0], - lparen_t, args, rparen_t) - - result -end - -def _reduce_398(val, _values, result) - result = @builder.keyword_cmd(:zsuper, val[0]) - - result -end - -def _reduce_399(val, _values, result) - result = @builder.index(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_400(val, _values, result) - @static_env.extend_dynamic - result = @context.dup - @context.in_block = true - - result -end - -def _reduce_401(val, _values, result) - result = [ val[0], val[2], val[3], val[4] ] - - @static_env.unextend - @context.in_block = val[1].in_block - - result -end - -def _reduce_402(val, _values, result) - @static_env.extend_dynamic - result = @context.dup - @context.in_block = true - - result -end - -def _reduce_403(val, _values, result) - result = [ val[0], val[2], val[3], val[4] ] - - @static_env.unextend - @context.in_block = val[1].in_block - - result -end - -def _reduce_404(val, _values, result) - result = [ @builder.when(val[0], val[1], val[2], val[3]), - *val[4] ] - - result -end - -def _reduce_405(val, _values, result) - result = [ val[0] ] - - result -end - -# reduce 406 omitted - -def _reduce_407(val, _values, result) - assoc_t, exc_var = val[2] - - if val[1] - exc_list = @builder.array(nil, val[1], nil) - end - - result = [ @builder.rescue_body(val[0], - exc_list, assoc_t, exc_var, - val[3], val[4]), - *val[5] ] - - result -end - -def _reduce_408(val, _values, result) - result = [] - - result -end - -def _reduce_409(val, _values, result) - result = [ val[0] ] - - result -end - -# reduce 410 omitted - -# reduce 411 omitted - -def _reduce_412(val, _values, result) - result = [ val[0], val[1] ] - - result -end - -# reduce 413 omitted - -def _reduce_414(val, _values, result) - result = [ val[0], val[1] ] - - result -end - -# reduce 415 omitted - -# reduce 416 omitted - -# reduce 417 omitted - -# reduce 418 omitted - -def _reduce_419(val, _values, result) - result = @builder.string_compose(nil, val[0], nil) - - result -end - -def _reduce_420(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_421(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_422(val, _values, result) - result = @builder.string_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_423(val, _values, result) - result = @builder.string(val[0]) - - result -end - -def _reduce_424(val, _values, result) - result = @builder.character(val[0]) - - result -end - -def _reduce_425(val, _values, result) - result = @builder.xstring_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_426(val, _values, result) - opts = @builder.regexp_options(val[3]) - result = @builder.regexp_compose(val[0], val[1], val[2], opts) - - result -end - -def _reduce_427(val, _values, result) - result = @builder.words_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_428(val, _values, result) - result = [] - - result -end - -def _reduce_429(val, _values, result) - result = val[0] << @builder.word(val[1]) - - result -end - -def _reduce_430(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_431(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_432(val, _values, result) - result = @builder.words_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_433(val, _values, result) - result = [] - - result -end - -def _reduce_434(val, _values, result) - result = val[0] << @builder.string_internal(val[1]) - - result -end - -def _reduce_435(val, _values, result) - result = [] - - result -end - -def _reduce_436(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_437(val, _values, result) - result = [] - - result -end - -def _reduce_438(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_439(val, _values, result) - result = [] - - result -end - -def _reduce_440(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_441(val, _values, result) - result = @builder.string_internal(val[0]) - - result -end - -def _reduce_442(val, _values, result) - result = val[1] - - result -end - -def _reduce_443(val, _values, result) - @lexer.cond.push(false) - @lexer.cmdarg.push(false) - - result -end - -def _reduce_444(val, _values, result) - @lexer.cond.lexpop - @lexer.cmdarg.lexpop - - result = @builder.begin(val[0], val[2], val[3]) - - result -end - -def _reduce_445(val, _values, result) - result = @builder.gvar(val[0]) - - result -end - -def _reduce_446(val, _values, result) - result = @builder.ivar(val[0]) - - result -end - -def _reduce_447(val, _values, result) - result = @builder.cvar(val[0]) - - result -end - -# reduce 448 omitted - -def _reduce_449(val, _values, result) - result = @builder.symbol(val[0]) - - result -end - -def _reduce_450(val, _values, result) - result = @builder.symbol_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_451(val, _values, result) - result = @builder.integer(val[0]) - - result -end - -def _reduce_452(val, _values, result) - result = @builder.float(val[0]) - - result -end - -def _reduce_453(val, _values, result) - num = @builder.integer(val[1]) - if @builder.respond_to? :negate - # AST builder interface compatibility - result = @builder.negate(val[0], num) - else - result = @builder.unary_num(val[0], num) - end - - result -end - -def _reduce_454(val, _values, result) - num = @builder.float(val[1]) - if @builder.respond_to? :negate - # AST builder interface compatibility - result = @builder.negate(val[0], num) - else - result = @builder.unary_num(val[0], num) - end - - result -end - -def _reduce_455(val, _values, result) - result = @builder.ident(val[0]) - - result -end - -def _reduce_456(val, _values, result) - result = @builder.ivar(val[0]) - - result -end - -def _reduce_457(val, _values, result) - result = @builder.gvar(val[0]) - - result -end - -def _reduce_458(val, _values, result) - result = @builder.const(val[0]) - - result -end - -def _reduce_459(val, _values, result) - result = @builder.cvar(val[0]) - - result -end - -def _reduce_460(val, _values, result) - result = @builder.nil(val[0]) - - result -end - -def _reduce_461(val, _values, result) - result = @builder.self(val[0]) - - result -end - -def _reduce_462(val, _values, result) - result = @builder.true(val[0]) - - result -end - -def _reduce_463(val, _values, result) - result = @builder.false(val[0]) - - result -end - -def _reduce_464(val, _values, result) - result = @builder.__FILE__(val[0]) - - result -end - -def _reduce_465(val, _values, result) - result = @builder.__LINE__(val[0]) - - result -end - -def _reduce_466(val, _values, result) - result = @builder.__ENCODING__(val[0]) - - result -end - -def _reduce_467(val, _values, result) - result = @builder.accessible(val[0]) - - result -end - -def _reduce_468(val, _values, result) - result = @builder.accessible(val[0]) - - result -end - -def _reduce_469(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_470(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_471(val, _values, result) - result = @builder.nth_ref(val[0]) - - result -end - -def _reduce_472(val, _values, result) - result = @builder.back_ref(val[0]) - - result -end - -def _reduce_473(val, _values, result) - result = nil - - result -end - -def _reduce_474(val, _values, result) - result = [ val[0], val[1] ] - - result -end - -def _reduce_475(val, _values, result) - yyerrok - result = nil - - result -end - -def _reduce_476(val, _values, result) - result = @builder.args(val[0], val[1], val[2]) - - @lexer.state = :expr_value - - result -end - -def _reduce_477(val, _values, result) - result = @builder.args(nil, val[0], nil) - - result -end - -def _reduce_478(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_479(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[6]). - concat(val[7]) - - result -end - -def _reduce_480(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_481(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_482(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_483(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_484(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_485(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_486(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_487(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_488(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_489(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_490(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_491(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_492(val, _values, result) - result = [] - - result -end - -def _reduce_493(val, _values, result) - diagnostic :error, :argument_const, nil, val[0] - - result -end - -def _reduce_494(val, _values, result) - diagnostic :error, :argument_ivar, nil, val[0] - - result -end - -def _reduce_495(val, _values, result) - diagnostic :error, :argument_gvar, nil, val[0] - - result -end - -def _reduce_496(val, _values, result) - diagnostic :error, :argument_cvar, nil, val[0] - - result -end - -# reduce 497 omitted - -# reduce 498 omitted - -def _reduce_499(val, _values, result) - @static_env.declare val[0][0] - - result = @builder.arg(val[0]) - - result -end - -def _reduce_500(val, _values, result) - result = @builder.multi_lhs(val[0], val[1], val[2]) - - result -end - -def _reduce_501(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_502(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_503(val, _values, result) - @static_env.declare val[0][0] - - result = @builder.optarg(val[0], val[1], val[2]) - - result -end - -def _reduce_504(val, _values, result) - @static_env.declare val[0][0] - - result = @builder.optarg(val[0], val[1], val[2]) - - result -end - -def _reduce_505(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_506(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_507(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_508(val, _values, result) - result = val[0] << val[2] - - result -end - -# reduce 509 omitted - -# reduce 510 omitted - -def _reduce_511(val, _values, result) - @static_env.declare val[1][0] - - result = [ @builder.restarg(val[0], val[1]) ] - - result -end - -def _reduce_512(val, _values, result) - result = [ @builder.restarg(val[0]) ] - - result -end - -# reduce 513 omitted - -# reduce 514 omitted - -def _reduce_515(val, _values, result) - @static_env.declare val[1][0] - - result = @builder.blockarg(val[0], val[1]) - - result -end - -def _reduce_516(val, _values, result) - result = [ val[1] ] - - result -end - -def _reduce_517(val, _values, result) - result = [] - - result -end - -# reduce 518 omitted - -def _reduce_519(val, _values, result) - result = val[1] - - result -end - -def _reduce_520(val, _values, result) - result = [] - - result -end - -# reduce 521 omitted - -def _reduce_522(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_523(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_524(val, _values, result) - result = @builder.pair(val[0], val[1], val[2]) - - result -end - -def _reduce_525(val, _values, result) - result = @builder.pair_keyword(val[0], val[1]) - - result -end - -# reduce 526 omitted - -# reduce 527 omitted - -# reduce 528 omitted - -# reduce 529 omitted - -# reduce 530 omitted - -# reduce 531 omitted - -# reduce 532 omitted - -# reduce 533 omitted - -# reduce 534 omitted - -# reduce 535 omitted - -# reduce 536 omitted - -# reduce 537 omitted - -# reduce 538 omitted - -# reduce 539 omitted - -# reduce 540 omitted - -# reduce 541 omitted - -def _reduce_542(val, _values, result) - result = val[1] - - result -end - -def _reduce_543(val, _values, result) - result = val[1] - - result -end - -# reduce 544 omitted - -# reduce 545 omitted - -# reduce 546 omitted - -def _reduce_547(val, _values, result) - yyerrok - - result -end - -# reduce 548 omitted - -# reduce 549 omitted - -# reduce 550 omitted - -def _reduce_551(val, _values, result) - result = nil - - result -end - -def _reduce_none(val, _values, result) - val[0] -end - - end # class Ruby19 -end # module Parser diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ruby20.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ruby20.rb deleted file mode 100644 index 3c5d8d10..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ruby20.rb +++ /dev/null @@ -1,10229 +0,0 @@ -# -*- encoding:utf-8; warn-indent:false; frozen_string_literal: true -*- -# -# DO NOT MODIFY!!!! -# This file is automatically generated by Racc 1.7.3 -# from Racc grammar file "ruby20.y". -# - -require 'racc/parser.rb' - - -require 'parser' - -module Parser - class Ruby20 < Parser::Base - - - def version - 20 - end - - def default_encoding - Encoding::UTF_8 - end - - def local_push - @static_env.extend_static - @lexer.cmdarg.push(false) - @lexer.cond.push(false) - end - - def local_pop - @static_env.unextend - @lexer.cmdarg.pop - @lexer.cond.pop - end -##### State transition tables begin ### - -racc_action_table = [ - -476, 5, 74, 75, 71, 9, 57, -476, -476, -476, - 63, 64, -476, -476, -476, 67, -476, 65, 66, 68, - 30, 31, 72, 73, -476, 267, -476, -476, -476, 29, - 28, 27, 100, 99, 101, 102, -476, -476, 19, -476, - -476, -476, -476, -476, 8, 45, 7, 10, 104, 103, - 105, 94, 56, 96, 95, 97, -98, 98, 106, 107, - 556, 92, 93, 42, 43, 41, -476, -476, -476, -476, - -476, -476, -476, -476, -476, -476, -476, -476, -476, -476, - 267, -99, -476, -476, -476, 40, -476, -476, 33, -106, - -476, 58, 59, -476, -476, 60, -476, 35, -476, 267, - -476, 44, -476, -476, 267, -476, -476, -476, -476, -476, - 20, -476, 266, -476, 216, 91, 81, 84, 85, 577, - 86, 88, 87, 89, -105, 108, 789, -476, 82, 90, - -476, -476, -476, -476, -479, -476, 62, -476, 83, -476, - -101, -479, -479, -479, 262, 535, -479, -479, -479, 579, - -479, 120, 535, -103, 112, 217, 535, -286, -479, 111, - -479, -479, -479, -100, 614, -89, 555, 266, 262, -490, - -479, -479, 535, -479, -479, -479, -479, -479, 535, -101, - -103, -100, -102, -102, 690, 576, 266, 112, 259, 112, - -90, 266, 111, -491, 111, 260, 205, -286, -97, 613, - -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, - -479, -479, -479, -479, 206, 578, -479, -479, -479, -476, - -479, -479, -98, -92, -479, 441, -476, -479, -479, 512, - -479, 690, -479, -96, -479, 788, -479, -479, 745, -479, - -479, -479, -479, -479, -289, -479, -99, -479, -568, -92, - 690, -289, -289, -289, 213, 214, 746, -289, -289, -568, - -289, -479, -94, 112, -479, -479, -479, -479, 111, -479, - 112, -479, -91, -479, 112, 111, -104, 820, -106, 111, - -289, -289, -105, -289, -289, -289, -289, -289, 112, -92, - 112, -101, -93, 111, -94, 111, 112, -101, -103, -100, - -102, 111, -101, -103, -100, -102, 207, 213, 214, -103, - -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, - -289, -289, -289, -289, 213, 214, -289, -289, -289, -92, - 597, 212, -92, 211, -289, 112, 838, -289, -92, -84, - 111, -569, -289, 614, -289, -70, -289, -289, 217, -289, - -289, -289, -289, -289, 112, -289, -572, -289, 256, 111, - -94, 213, 214, -572, -572, -572, -490, 614, -491, -572, - -572, -289, -572, 525, -289, -289, 524, -95, 613, -289, - -97, -572, 614, -104, -565, -95, -106, -479, 525, -100, - 314, 527, -572, -572, -479, -572, -572, -572, -572, -572, - -94, 112, 613, -94, 512, 780, 111, 541, 807, -94, - 666, 665, 664, -89, 667, -90, 564, 613, 217, -98, - -566, -99, -572, -572, -572, -572, -572, -572, -572, -572, - -572, -572, -572, -572, -572, -572, -476, 209, -572, -572, - -572, 564, 598, -476, 210, 315, -572, 217, -565, -572, - -572, -96, -476, 208, -572, 217, -572, -105, -572, -572, - 384, -572, -572, -572, -572, -572, 564, -572, -572, -572, - 592, -565, -479, 112, 525, 213, 214, 527, 111, -479, - 566, 565, 562, -572, -566, -572, -572, -572, -479, -93, - 885, -572, -572, -572, -572, -102, -486, -572, -572, -572, - 547, -572, -572, -486, 548, 566, 565, -566, 397, -572, - -572, -572, -572, -572, -568, 722, 525, -92, -572, 527, - 440, -572, -572, -101, -572, -572, -572, -572, -572, 442, - 566, 565, 807, 593, 666, 665, 664, -572, 667, 564, - 724, -485, -487, -572, 564, 112, 316, 317, -485, -487, - 111, -572, -572, -572, -572, -572, -572, -572, -572, -572, - -572, -572, -572, -572, -572, 507, 508, -572, -572, -572, - -484, 747, -572, 564, 443, -572, 731, -484, -572, -572, - -94, -572, -414, -572, 112, -572, -103, -572, -572, 111, - -572, -572, -572, -572, -572, -572, -572, -572, -572, 564, - 213, 214, -572, 566, 565, 567, 564, -568, 566, 565, - 569, -572, -572, 216, 981, -572, -572, -572, -572, -289, - -572, 474, -572, -91, -102, 483, -289, -289, -289, -100, - -572, -289, -289, -289, -414, -289, -333, 566, 565, 571, - 485, -414, -481, -333, -482, -289, -289, -289, 394, -481, - -414, -482, -333, 396, 395, -289, -289, 487, -289, -289, - -289, -289, -289, 566, 565, 575, 437, 494, -488, -414, - 566, 565, 580, 438, 807, -488, 666, 665, 664, -69, - 667, 217, 439, 497, -488, -289, -289, -289, -289, -289, - -289, -289, -289, -289, -289, -289, -289, -289, -289, 237, - 673, -289, -289, -289, 498, 748, -289, -483, 505, -289, - 675, 803, -289, -289, -483, -289, 271, -289, 217, -289, - 806, -289, -289, 762, -289, -289, -289, -289, -289, 262, - -289, 234, -289, 675, 259, 236, 235, 112, 232, 233, - 509, 260, 111, 683, 682, 513, -289, 514, 676, -289, - -289, -289, -289, 237, -289, 217, -289, 528, -104, 288, - 74, 75, 71, 9, 57, 529, 683, 682, 63, 64, - 487, 676, 81, 67, 541, 65, 66, 68, 30, 31, - 72, 73, 217, 386, 82, 966, 545, 29, 28, 27, - 100, 99, 101, 102, 83, 546, 19, 213, 214, 815, - 780, 602, 8, 45, 290, 10, 104, 103, 105, 94, - 56, 96, 95, 97, 581, 98, 106, 107, 584, 92, - 93, 42, 43, 41, 237, 241, 246, 247, 248, 243, - 245, 253, 254, 249, 250, -489, 230, 231, 503, -263, - 251, 252, -489, 40, 586, 504, 292, 683, 682, 58, - 59, -489, 217, 60, 502, 35, 234, 590, 240, 44, - 236, 235, 591, 232, 233, 244, 242, 238, 20, 239, - 815, 780, 262, 91, 81, 84, 85, -279, 86, 88, - 87, 89, 601, 237, -279, 515, 82, 90, 604, 255, - -280, -240, 516, -279, 62, 237, 83, -280, -280, -280, - 237, 439, -280, -280, -280, 807, -280, 666, 665, 664, - 237, 667, 237, 217, 217, 234, -280, -280, -280, 236, - 235, 543, 232, 233, 217, -84, -280, -280, 544, -280, - -280, -280, -280, -280, 632, 217, 518, 542, 643, 237, - 649, 807, 803, 666, 665, 664, 650, 667, 716, 717, - 652, 806, 718, 106, 107, 686, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - 237, 234, -280, -280, -280, 236, 235, -280, 803, 541, - -280, 693, 721, -280, -280, 725, -280, 943, -280, 726, - -280, -264, -280, -280, 732, -280, -280, -280, -280, -280, - 474, -280, 234, -280, 474, 217, 236, 235, 551, 750, - 914, 256, 666, 665, 664, 550, 667, -280, 485, -290, - -280, -280, -280, -280, 552, -280, -290, -280, 5, 74, - 75, 71, 9, 57, 487, -290, -290, 63, 64, 773, - 643, 217, 67, -290, 65, 66, 68, 30, 31, 72, - 73, 262, -290, 262, 643, 237, 29, 28, 27, 100, - 99, 101, 102, 237, 914, 19, 666, 665, 664, 780, - 667, 8, 45, 7, 10, 104, 103, 105, 94, 56, - 96, 95, 97, 217, 98, 106, 107, 791, 92, 93, - 42, 43, 41, 237, 241, 246, 247, 248, 243, 245, - 253, 254, 249, 250, -289, -591, -591, 551, 794, 251, - 252, -289, 40, 795, 917, 33, -569, 797, 58, 59, - -289, 799, 60, 552, 35, 234, 801, 240, 44, 236, - 235, 810, 232, 233, 244, 242, 238, 20, 239, 811, - 812, 780, 91, 81, 84, 85, 819, 86, 88, 87, - 89, 217, 217, 828, -265, 82, 90, 288, 74, 75, - 71, 9, 57, 62, 837, 83, 63, 64, 840, 794, - 843, 67, 845, 65, 66, 68, 30, 31, 72, 73, - 115, 116, 117, 118, 119, 29, 28, 27, 100, 99, - 101, 102, 847, 849, 19, 115, 116, 117, 118, 119, - 8, 45, 290, 10, 104, 103, 105, 94, 56, 96, - 95, 97, 217, 98, 106, 107, 851, 92, 93, 42, - 43, 41, 237, 241, 246, 247, 248, 243, 245, 253, - 254, 249, 250, -289, -591, -591, 551, 852, 251, 252, - -289, 40, 855, 917, 33, -569, 857, 58, 59, -289, - 858, 60, 552, 35, 234, 643, 240, 44, 236, 235, - 860, 232, 233, 244, 242, 238, 20, 239, -263, 864, - 866, 91, 81, 84, 85, 217, 86, 88, 87, 89, - 883, 217, 887, 889, 82, 90, 288, 74, 75, 71, - 9, 57, 62, 895, 83, 63, 64, 898, 217, 901, - 67, -266, 65, 66, 68, 30, 31, 72, 73, 115, - 116, 117, 118, 119, 29, 28, 27, 100, 99, 101, - 102, 911, 807, 19, 666, 665, 664, 918, 667, 8, - 45, 290, 10, 104, 103, 105, 94, 56, 96, 95, - 97, 919, 98, 106, 107, 930, 92, 93, 42, 43, - 41, 237, -591, -591, -591, -591, 243, 245, -488, 803, - -591, -591, -489, 794, 932, -488, 934, 251, 252, -489, - 40, 936, 938, 33, -488, 938, 58, 59, -489, 217, - 60, 944, 35, 234, 947, 240, 44, 236, 235, 948, - 232, 233, 244, 242, 238, 20, 239, 953, 794, 956, - 91, 81, 84, 85, 958, 86, 88, 87, 89, 960, - 962, 962, 973, 82, 90, 288, 74, 75, 71, 9, - 57, 62, 974, 83, 63, 64, 975, 983, -569, 67, - -568, 65, 66, 68, 30, 31, 72, 73, 649, 998, - 938, 938, 938, 29, 28, 27, 100, 99, 101, 102, - 1003, 807, 19, 666, 665, 664, 983, 667, 8, 45, - 290, 10, 104, 103, 105, 94, 56, 96, 95, 97, - 1006, 98, 106, 107, 1007, 92, 93, 42, 43, 41, - 237, 807, 1008, 666, 665, 664, 962, 667, 803, 807, - 962, 666, 665, 664, 971, 667, 251, 252, 962, 40, - 217, 972, 292, 983, 938, 58, 59, 983, 962, 60, - 970, 35, 234, nil, 240, 44, 236, 235, 803, 232, - 233, nil, nil, 238, 20, 239, 803, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, 288, 74, 75, 71, 9, 57, - 62, nil, 83, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 30, 31, 72, 73, nil, nil, nil, - nil, nil, 29, 28, 27, 100, 99, 101, 102, nil, - 807, 19, 666, 665, 664, nil, 667, 8, 45, 290, - 10, 104, 103, 105, 94, 56, 96, 95, 97, nil, - 98, 106, 107, -279, 92, 93, 42, 43, 41, 237, - -279, -290, nil, nil, nil, nil, nil, 803, -290, -279, - nil, nil, nil, nil, nil, 251, 252, -290, 40, nil, - nil, 292, nil, nil, 58, 59, nil, nil, 60, nil, - 35, 234, nil, 240, 44, 236, 235, nil, 232, 233, - nil, nil, 238, 20, 239, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, 288, 74, 75, 71, 9, 57, 62, - nil, 83, 63, 64, nil, nil, nil, 67, nil, 65, - 66, 68, 30, 31, 72, 73, nil, nil, nil, nil, - nil, 29, 28, 27, 100, 99, 101, 102, nil, nil, - 19, nil, nil, nil, nil, 587, 8, 45, 290, 10, - 104, 103, 105, 94, 56, 96, 95, 97, nil, 98, - 106, 107, nil, 92, 93, 42, 43, 41, 237, 241, - 246, 247, 248, 243, 245, 253, 254, 249, 250, -289, - 230, 231, nil, nil, 251, 252, -289, 40, nil, nil, - 33, -569, nil, 58, 59, -289, nil, 60, nil, 35, - 234, nil, 240, 44, 236, 235, nil, 232, 233, 244, - 242, 238, 20, 239, nil, nil, nil, 91, 81, 84, - 85, nil, 86, 88, 87, 89, nil, nil, nil, nil, - 82, 90, nil, 255, -573, nil, nil, nil, 62, nil, - 83, -573, -573, -573, nil, nil, -573, -573, -573, 237, - -573, nil, nil, nil, nil, nil, nil, nil, nil, -573, - -573, -573, -573, nil, nil, 251, 252, nil, nil, nil, - -573, -573, nil, -573, -573, -573, -573, -573, nil, nil, - nil, 234, nil, 240, nil, 236, 235, nil, 232, 233, - nil, nil, 238, nil, 239, nil, nil, nil, nil, nil, - -573, -573, -573, -573, -573, -573, -573, -573, -573, -573, - -573, -573, -573, -573, nil, nil, -573, -573, -573, nil, - nil, -573, nil, nil, -573, nil, nil, -573, -573, nil, - -573, nil, -573, nil, -573, nil, -573, -573, nil, -573, - -573, -573, -573, -573, nil, -573, -573, -573, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, -573, nil, nil, -573, -573, -573, -573, -574, -573, - nil, -573, nil, nil, nil, -574, -574, -574, nil, nil, - -574, -574, -574, 237, -574, nil, nil, nil, nil, nil, - nil, nil, nil, -574, -574, -574, -574, nil, nil, 251, - 252, nil, nil, nil, -574, -574, nil, -574, -574, -574, - -574, -574, nil, nil, nil, 234, nil, 240, nil, 236, - 235, nil, 232, 233, nil, nil, 238, nil, 239, nil, - nil, nil, nil, nil, -574, -574, -574, -574, -574, -574, - -574, -574, -574, -574, -574, -574, -574, -574, nil, nil, - -574, -574, -574, nil, nil, -574, nil, nil, -574, nil, - nil, -574, -574, nil, -574, nil, -574, nil, -574, nil, - -574, -574, nil, -574, -574, -574, -574, -574, nil, -574, - -574, -574, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, -574, nil, nil, -574, -574, - -574, -574, nil, -574, nil, -574, 5, 74, 75, 71, - 9, 57, nil, nil, nil, 63, 64, nil, nil, nil, - 67, nil, 65, 66, 68, 30, 31, 72, 73, nil, - nil, nil, nil, nil, 29, 28, 27, 100, 99, 101, - 102, nil, nil, 19, nil, nil, nil, nil, nil, 8, - 45, 7, 10, 104, 103, 105, 94, 56, 96, 95, - 97, nil, 98, 106, 107, nil, 92, 93, 42, 43, - 41, 237, -591, -591, -591, -591, 243, 245, nil, nil, - -591, -591, nil, nil, nil, nil, nil, 251, 252, nil, - 40, nil, nil, 33, nil, nil, 58, 59, nil, nil, - 60, nil, 35, 234, nil, 240, 44, 236, 235, nil, - 232, 233, 244, 242, 238, 20, 239, nil, nil, nil, - 91, 81, 84, 85, nil, 86, 88, 87, 89, nil, - nil, nil, nil, 82, 90, 288, 74, 75, 71, 9, - 57, 62, nil, 83, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 30, 31, 72, 73, nil, nil, - nil, nil, nil, 29, 28, 27, 100, 99, 101, 102, - nil, nil, 19, nil, nil, nil, nil, nil, 8, 45, - 290, 10, 104, 103, 105, 94, 56, 96, 95, 97, - nil, 98, 106, 107, nil, 92, 93, 42, 43, 41, - 237, -591, -591, -591, -591, 243, 245, nil, nil, -591, - -591, nil, nil, nil, nil, nil, 251, 252, nil, 40, - nil, nil, 33, nil, nil, 58, 59, nil, nil, 60, - nil, 35, 234, nil, 240, 44, 236, 235, nil, 232, - 233, 244, 242, 238, 20, 239, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, 288, 74, 75, 71, 9, 57, - 62, nil, 83, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 30, 31, 72, 73, nil, nil, nil, - nil, nil, 29, 28, 27, 100, 99, 101, 102, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 45, 290, - 10, 104, 103, 105, 94, 56, 96, 95, 97, nil, - 98, 106, 107, nil, 92, 93, 42, 43, 41, 237, - -591, -591, -591, -591, 243, 245, nil, nil, -591, -591, - nil, nil, nil, nil, nil, 251, 252, nil, 40, nil, - nil, 33, nil, nil, 58, 59, nil, nil, 60, nil, - 35, 234, nil, 240, 44, 236, 235, nil, 232, 233, - 244, 242, 238, 20, 239, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, 288, 74, 75, 71, 9, 57, 62, - nil, 83, 63, 64, nil, nil, nil, 67, nil, 65, - 66, 68, 30, 31, 72, 73, nil, nil, nil, nil, - nil, 29, 28, 27, 100, 99, 101, 102, nil, nil, - 19, nil, nil, nil, nil, nil, 8, 45, 290, 10, - 104, 103, 105, 94, 56, 96, 95, 97, nil, 98, - 106, 107, nil, 92, 93, 42, 43, 41, 237, -591, - -591, -591, -591, 243, 245, nil, nil, -591, -591, nil, - nil, nil, nil, nil, 251, 252, nil, 40, nil, nil, - 33, nil, nil, 58, 59, nil, nil, 60, nil, 35, - 234, nil, 240, 44, 236, 235, nil, 232, 233, 244, - 242, 238, 20, 239, nil, nil, nil, 91, 81, 84, - 85, nil, 86, 88, 87, 89, nil, nil, nil, nil, - 82, 90, 288, 74, 75, 71, 9, 57, 62, nil, - 83, 63, 64, nil, nil, nil, 67, nil, 65, 66, - 68, 30, 31, 72, 73, nil, nil, nil, nil, nil, - 29, 28, 27, 100, 99, 101, 102, nil, nil, 19, - nil, nil, nil, nil, nil, 8, 45, 290, 10, 104, - 103, 105, 94, 56, 96, 95, 97, nil, 98, 106, - 107, nil, 92, 93, 42, 43, 41, 237, -591, -591, - -591, -591, 243, 245, nil, nil, -591, -591, nil, nil, - nil, nil, nil, 251, 252, nil, 40, nil, nil, 33, - nil, nil, 58, 59, nil, nil, 60, nil, 35, 234, - nil, 240, 44, 236, 235, nil, 232, 233, 244, 242, - 238, 20, 239, nil, nil, nil, 91, 81, 84, 85, - nil, 86, 88, 87, 89, nil, nil, nil, nil, 82, - 90, 288, 74, 75, 71, 9, 57, 62, nil, 83, - 63, 64, nil, nil, nil, 67, nil, 65, 66, 68, - 30, 31, 72, 73, nil, nil, nil, nil, nil, 29, - 28, 27, 100, 99, 101, 102, nil, nil, 19, nil, - nil, nil, nil, nil, 8, 45, 290, 10, 104, 103, - 105, 94, 56, 96, 95, 97, nil, 98, 106, 107, - nil, 92, 93, 42, 43, 41, 237, 241, 246, 247, - 248, 243, 245, nil, nil, 249, 250, nil, nil, nil, - nil, nil, 251, 252, nil, 40, nil, nil, 33, nil, - nil, 58, 59, nil, nil, 60, nil, 35, 234, nil, - 240, 44, 236, 235, nil, 232, 233, 244, 242, 238, - 20, 239, nil, nil, nil, 91, 81, 84, 85, nil, - 86, 88, 87, 89, nil, nil, nil, nil, 82, 90, - 288, 74, 75, 71, 9, 57, 62, nil, 83, 63, - 64, nil, nil, nil, 67, nil, 65, 66, 68, 30, - 31, 72, 73, nil, nil, nil, nil, nil, 29, 28, - 27, 100, 99, 101, 102, nil, nil, 19, nil, nil, - nil, nil, nil, 8, 45, 290, 10, 104, 103, 105, - 94, 56, 96, 95, 97, nil, 98, 106, 107, nil, - 92, 93, 42, 43, 41, 237, 241, 246, 247, 248, - 243, 245, 253, nil, 249, 250, nil, nil, nil, nil, - nil, 251, 252, nil, 40, nil, nil, 33, nil, nil, - 58, 59, nil, nil, 60, nil, 35, 234, nil, 240, - 44, 236, 235, nil, 232, 233, 244, 242, 238, 20, - 239, nil, nil, nil, 91, 81, 84, 85, nil, 86, - 88, 87, 89, nil, nil, nil, nil, 82, 90, 288, - 74, 75, 71, 9, 57, 62, nil, 83, 63, 64, - nil, nil, nil, 67, nil, 65, 66, 68, 30, 31, - 72, 73, nil, nil, nil, nil, nil, 29, 28, 27, - 100, 99, 101, 102, nil, nil, 19, nil, nil, nil, - nil, nil, 8, 45, 290, 10, 104, 103, 105, 94, - 56, 96, 95, 97, nil, 98, 106, 107, nil, 92, - 93, 42, 43, 41, 237, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 251, 252, nil, 40, nil, nil, 33, nil, nil, 58, - 59, nil, nil, 60, nil, 35, 234, nil, 240, 44, - 236, 235, nil, 232, 233, nil, nil, nil, 20, nil, - nil, nil, nil, 91, 81, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, 288, 74, - 75, 71, 9, 57, 62, nil, 83, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 100, - 99, 101, 102, nil, nil, 19, nil, nil, nil, nil, - nil, 8, 45, 290, 10, 104, 103, 105, 94, 56, - 96, 95, 97, nil, 98, 106, 107, nil, 92, 93, - 42, 43, 41, 237, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 251, - 252, nil, 40, nil, nil, 33, nil, nil, 58, 59, - nil, nil, 60, nil, 35, 234, nil, 240, 44, 236, - 235, nil, 232, 233, nil, nil, nil, 20, nil, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, 288, 74, 75, - 71, 9, 57, 62, nil, 83, 63, 64, nil, nil, - nil, 67, nil, 65, 66, 68, 30, 31, 72, 73, - nil, nil, nil, nil, nil, 29, 28, 27, 100, 99, - 101, 102, nil, nil, 19, nil, nil, nil, nil, nil, - 8, 45, 290, 10, 104, 103, 105, 94, 56, 96, - 95, 97, nil, 98, 106, 107, nil, 92, 93, 42, - 43, 41, 237, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 251, 252, - nil, 40, nil, nil, 33, nil, nil, 58, 59, nil, - nil, 60, nil, 35, 234, nil, nil, 44, 236, 235, - nil, 232, 233, nil, nil, nil, 20, nil, nil, nil, - nil, 91, 81, 84, 85, nil, 86, 88, 87, 89, - nil, nil, nil, nil, 82, 90, 288, 74, 75, 71, - 9, 57, 62, nil, 83, 63, 64, nil, nil, nil, - 67, nil, 65, 66, 68, 30, 31, 72, 73, nil, - nil, nil, nil, nil, 29, 28, 27, 100, 99, 101, - 102, nil, nil, 19, nil, nil, nil, nil, nil, 8, - 45, 290, 10, 104, 103, 105, 94, 56, 96, 95, - 97, nil, 98, 106, 107, nil, 92, 93, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 40, nil, nil, 33, nil, nil, 58, 59, nil, nil, - 60, nil, 35, nil, nil, nil, 44, nil, nil, nil, - nil, nil, nil, nil, nil, 20, nil, nil, nil, nil, - 91, 81, 84, 85, nil, 86, 88, 87, 89, nil, - nil, nil, nil, 82, 90, 288, 74, 75, 71, 9, - 57, 62, nil, 83, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 30, 31, 72, 73, nil, nil, - nil, nil, nil, 29, 28, 27, 100, 99, 101, 102, - nil, nil, 19, nil, nil, nil, nil, nil, 8, 45, - 290, 10, 104, 103, 105, 94, 56, 96, 95, 97, - nil, 98, 106, 107, nil, 92, 93, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 40, - nil, nil, 33, nil, nil, 58, 59, nil, nil, 60, - nil, 35, nil, nil, nil, 44, nil, nil, nil, nil, - nil, nil, nil, nil, 20, nil, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, 288, 74, 75, 71, 9, 57, - 62, nil, 83, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 30, 31, 72, 73, nil, nil, nil, - nil, nil, 29, 28, 27, 100, 99, 101, 102, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 45, 290, - 10, 104, 103, 105, 94, 56, 96, 95, 97, nil, - 98, 106, 107, nil, 92, 93, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 40, nil, - nil, 33, nil, nil, 58, 59, nil, nil, 60, nil, - 35, nil, nil, nil, 44, nil, nil, nil, nil, nil, - nil, nil, nil, 20, nil, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, 288, 74, 75, 71, 9, 57, 62, - nil, 83, 63, 64, nil, nil, nil, 67, nil, 65, - 66, 68, 30, 31, 72, 73, nil, nil, nil, nil, - nil, 29, 28, 27, 100, 99, 101, 102, nil, nil, - 19, nil, nil, nil, nil, nil, 8, 45, 290, 10, - 104, 103, 105, 94, 56, 96, 95, 97, nil, 98, - 106, 107, nil, 92, 93, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 40, nil, nil, - 33, nil, nil, 58, 59, nil, nil, 60, nil, 35, - nil, nil, nil, 44, nil, nil, nil, nil, nil, nil, - nil, nil, 20, nil, nil, nil, nil, 91, 81, 84, - 85, nil, 86, 88, 87, 89, nil, nil, nil, nil, - 82, 90, 288, 74, 75, 71, 9, 57, 62, nil, - 83, 63, 64, nil, nil, nil, 67, nil, 65, 66, - 68, 30, 31, 72, 73, nil, nil, nil, nil, nil, - 29, 28, 27, 100, 99, 101, 102, nil, nil, 19, - nil, nil, nil, nil, nil, 8, 45, 290, 10, 104, - 103, 105, 94, 56, 96, 95, 97, nil, 98, 106, - 107, nil, 92, 93, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 40, nil, nil, 33, - nil, nil, 58, 59, nil, nil, 60, nil, 35, nil, - nil, nil, 44, nil, nil, nil, nil, nil, nil, nil, - nil, 20, nil, nil, nil, nil, 91, 81, 84, 85, - nil, 86, 88, 87, 89, nil, nil, nil, nil, 82, - 90, 288, 74, 75, 71, 9, 57, 62, nil, 83, - 63, 64, nil, nil, nil, 67, nil, 65, 66, 68, - 30, 31, 72, 73, nil, nil, nil, nil, nil, 29, - 28, 27, 100, 99, 101, 102, nil, nil, 19, nil, - nil, nil, nil, nil, 8, 45, 290, 10, 104, 103, - 105, 94, 56, 96, 95, 97, nil, 98, 106, 107, - nil, 92, 93, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 40, nil, nil, 33, nil, - nil, 58, 59, nil, nil, 60, nil, 35, nil, nil, - nil, 44, nil, nil, nil, nil, nil, nil, nil, nil, - 20, nil, nil, nil, nil, 91, 81, 84, 85, nil, - 86, 88, 87, 89, nil, nil, nil, nil, 82, 90, - 288, 74, 75, 71, 9, 57, 62, nil, 83, 63, - 64, nil, nil, nil, 67, nil, 65, 66, 68, 30, - 31, 72, 73, nil, nil, nil, nil, nil, 29, 28, - 27, 100, 99, 101, 102, nil, nil, 19, nil, nil, - nil, nil, nil, 8, 45, 290, 10, 104, 103, 105, - 94, 56, 96, 95, 97, nil, 98, 106, 107, nil, - 92, 93, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 40, nil, nil, 33, nil, nil, - 58, 59, nil, nil, 60, nil, 35, nil, nil, nil, - 44, nil, nil, nil, nil, nil, nil, nil, nil, 20, - nil, nil, nil, nil, 91, 81, 84, 85, nil, 86, - 88, 87, 89, nil, nil, nil, nil, 82, 90, 288, - 74, 75, 71, 9, 57, 62, nil, 83, 63, 64, - nil, nil, nil, 67, nil, 65, 66, 68, 30, 31, - 72, 73, nil, nil, nil, nil, nil, 29, 28, 27, - 100, 99, 101, 102, nil, nil, 19, nil, nil, nil, - nil, nil, 8, 45, 290, 10, 104, 103, 105, 94, - 56, 96, 95, 97, nil, 98, 106, 107, nil, 92, - 93, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 40, nil, nil, 33, nil, nil, 58, - 59, nil, nil, 60, nil, 35, nil, nil, nil, 44, - nil, nil, nil, nil, nil, nil, nil, nil, 20, nil, - nil, nil, nil, 91, 81, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, 288, 74, - 75, 71, 9, 57, 62, nil, 83, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 100, - 99, 101, 102, nil, nil, 19, nil, nil, nil, nil, - nil, 8, 45, 290, 10, 104, 103, 105, 94, 56, - 96, 95, 97, nil, 98, 106, 107, nil, 92, 93, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 40, nil, nil, 33, nil, nil, 58, 59, - nil, nil, 60, nil, 35, nil, nil, nil, 44, nil, - nil, nil, nil, nil, nil, nil, nil, 20, nil, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, 288, 74, 75, - 71, 9, 57, 62, nil, 83, 63, 64, nil, nil, - nil, 67, nil, 65, 66, 68, 30, 31, 72, 73, - nil, nil, nil, nil, nil, 29, 28, 27, 100, 99, - 101, 102, nil, nil, 19, nil, nil, nil, nil, nil, - 8, 45, 290, 10, 104, 103, 105, 94, 56, 96, - 95, 97, nil, 98, 106, 107, nil, 92, 93, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 40, nil, nil, 33, nil, nil, 58, 59, nil, - nil, 60, nil, 35, nil, nil, nil, 44, nil, nil, - nil, nil, nil, nil, nil, nil, 20, nil, nil, nil, - nil, 91, 81, 84, 85, nil, 86, 88, 87, 89, - nil, nil, nil, nil, 82, 90, 288, 74, 75, 71, - 9, 57, 62, nil, 83, 63, 64, nil, nil, nil, - 67, nil, 65, 66, 68, 30, 31, 72, 73, nil, - nil, nil, nil, nil, 29, 28, 27, 100, 99, 101, - 102, nil, nil, 19, nil, nil, nil, nil, nil, 8, - 45, 290, 10, 104, 103, 105, 94, 56, 96, 95, - 97, nil, 98, 106, 107, nil, 92, 93, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 40, nil, nil, 33, nil, nil, 58, 59, nil, nil, - 60, nil, 35, nil, nil, nil, 44, nil, nil, nil, - nil, nil, nil, nil, nil, 20, nil, nil, nil, nil, - 91, 81, 84, 85, nil, 86, 88, 87, 89, nil, - nil, nil, nil, 82, 90, 288, 74, 75, 71, 9, - 57, 62, nil, 83, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 30, 31, 72, 73, nil, nil, - nil, nil, nil, 29, 28, 27, 100, 99, 101, 102, - nil, nil, 19, nil, nil, nil, nil, nil, 8, 45, - 290, 10, 104, 103, 105, 94, 56, 96, 95, 97, - nil, 98, 106, 107, nil, 92, 93, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 40, - nil, nil, 33, nil, nil, 58, 59, nil, nil, 60, - nil, 35, nil, nil, nil, 44, nil, nil, nil, nil, - nil, nil, nil, nil, 20, nil, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, 288, 74, 75, 71, 9, 57, - 62, nil, 83, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 30, 31, 72, 73, nil, nil, nil, - nil, nil, 29, 28, 27, 100, 99, 101, 102, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 45, 290, - 10, 104, 103, 105, 94, 56, 96, 95, 97, nil, - 98, 106, 107, nil, 92, 93, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 40, nil, - nil, 33, nil, nil, 58, 59, nil, nil, 60, nil, - 35, nil, nil, nil, 44, nil, nil, nil, nil, nil, - nil, nil, nil, 20, nil, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, 74, 75, 71, 9, 57, 62, - nil, 83, 63, 64, nil, nil, nil, 67, nil, 65, - 66, 68, 30, 31, 72, 73, nil, nil, nil, nil, - nil, 29, 28, 27, 100, 99, 101, 102, nil, nil, - 19, nil, nil, nil, nil, nil, 8, 45, 7, 10, - 104, 103, 105, 94, 56, 96, 95, 97, nil, 98, - 106, 107, nil, 92, 93, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 40, nil, nil, - 33, nil, nil, 58, 59, nil, nil, 60, nil, 35, - nil, nil, nil, 44, nil, nil, nil, nil, nil, nil, - nil, nil, 20, nil, nil, nil, nil, 91, 81, 84, - 85, nil, 86, 88, 87, 89, nil, nil, nil, nil, - 82, 90, nil, 74, 75, 71, nil, 57, 62, nil, - 83, 63, 64, nil, nil, nil, 67, nil, 65, 66, - 68, 30, 31, 72, 73, nil, nil, nil, nil, nil, - 29, 28, 27, 100, 99, 101, 102, nil, nil, 229, - nil, nil, nil, nil, nil, nil, 45, nil, nil, 104, - 103, 105, 94, 56, 96, 95, 97, nil, 98, 106, - 107, nil, 92, 93, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 222, nil, nil, 228, - nil, nil, 58, 59, nil, nil, 60, nil, nil, nil, - nil, nil, 44, nil, nil, nil, nil, nil, nil, nil, - nil, 227, nil, nil, nil, nil, 91, 81, 84, 85, - nil, 86, 88, 87, 89, nil, nil, nil, nil, 82, - 90, nil, 74, 75, 71, nil, 57, 62, nil, 83, - 63, 64, nil, nil, nil, 67, nil, 65, 66, 68, - 30, 31, 72, 73, nil, nil, nil, nil, nil, 29, - 28, 27, 100, 99, 101, 102, nil, nil, 229, nil, - nil, nil, nil, nil, nil, 45, nil, nil, 104, 103, - 105, 94, 56, 96, 95, 97, 282, 98, 106, 107, - nil, 92, 93, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 222, nil, nil, 228, nil, - nil, 58, 59, nil, nil, 60, nil, 280, nil, 278, - nil, 44, nil, nil, 283, nil, nil, nil, nil, nil, - 227, nil, nil, nil, nil, 91, 81, 84, 85, nil, - 86, 88, 87, 89, nil, nil, nil, nil, 82, 90, - nil, 74, 75, 71, nil, 57, 62, nil, 83, 63, - 64, nil, nil, nil, 67, nil, 65, 66, 68, 30, - 31, 72, 73, nil, nil, nil, nil, nil, 29, 28, - 27, 100, 99, 101, 102, nil, nil, 229, nil, nil, - nil, nil, nil, nil, 45, nil, nil, 104, 103, 105, - 94, 56, 96, 95, 97, 282, 98, 106, 107, nil, - 92, 93, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 222, nil, nil, 228, nil, nil, - 58, 59, nil, nil, 60, nil, 280, nil, 278, nil, - 44, nil, nil, 283, nil, nil, nil, nil, nil, 227, - nil, nil, nil, nil, 91, 81, 84, 85, nil, 86, - 88, 87, 89, nil, nil, nil, nil, 82, 90, nil, - 74, 75, 71, nil, 57, 62, nil, 83, 63, 64, - nil, nil, nil, 67, nil, 65, 66, 68, 30, 31, - 72, 73, nil, nil, nil, nil, nil, 29, 28, 27, - 100, 99, 101, 102, nil, nil, 229, nil, nil, nil, - nil, nil, nil, 45, nil, nil, 104, 103, 105, 94, - 56, 96, 95, 97, 282, 98, 106, 107, nil, 92, - 93, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 222, nil, nil, 228, nil, nil, 58, - 59, nil, nil, 60, nil, 280, nil, 278, nil, 44, - nil, nil, 283, nil, nil, nil, nil, nil, 227, nil, - nil, nil, nil, 91, 81, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, nil, 74, - 75, 71, nil, 57, 62, nil, 83, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 307, 308, 72, - 73, nil, nil, nil, nil, nil, 303, 304, 310, 100, - 99, 101, 102, nil, nil, 229, nil, nil, nil, nil, - nil, nil, 305, nil, nil, 104, 103, 105, 94, 56, - 96, 95, 97, nil, 98, 106, 107, nil, 92, 93, - nil, nil, 311, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 301, nil, nil, 297, nil, nil, 58, 59, - nil, nil, 60, nil, 296, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, 74, 75, - 71, nil, 57, 62, nil, 83, 63, 64, nil, nil, - nil, 67, nil, 65, 66, 68, 307, 308, 72, 73, - nil, nil, nil, nil, nil, 303, 304, 310, 100, 99, - 101, 102, nil, nil, 229, nil, nil, nil, nil, 602, - nil, 305, nil, nil, 104, 103, 105, 94, 56, 96, - 95, 97, nil, 98, 106, 107, nil, 92, 93, nil, - nil, 311, 237, 241, 246, 247, 248, 243, 245, 253, - 254, 249, 250, nil, 230, 231, nil, nil, 251, 252, - nil, 301, nil, nil, 228, nil, nil, 58, 59, nil, - nil, 60, nil, nil, 234, nil, 240, nil, 236, 235, - nil, 232, 233, 244, 242, 238, nil, 239, nil, nil, - nil, 91, 81, 84, 85, nil, 86, 88, 87, 89, - nil, nil, nil, nil, 82, 90, nil, 255, nil, 313, - nil, nil, 62, nil, 83, 74, 75, 71, nil, 57, - nil, nil, nil, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 307, 308, 72, 73, nil, nil, nil, - nil, nil, 303, 304, 310, 100, 99, 101, 102, nil, - nil, 229, nil, nil, nil, nil, nil, nil, 45, nil, - nil, 104, 103, 105, 94, 56, 96, 95, 97, nil, - 98, 106, 107, nil, 92, 93, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 222, nil, - nil, 228, nil, nil, 58, 59, nil, nil, 60, nil, - nil, nil, nil, nil, 44, nil, nil, nil, nil, nil, - nil, nil, nil, 227, nil, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, 74, 75, 71, nil, 57, 62, - nil, 83, 63, 64, nil, nil, nil, 67, nil, 65, - 66, 68, 307, 308, 72, 73, nil, nil, nil, nil, - nil, 303, 304, 310, 100, 99, 101, 102, nil, nil, - 229, nil, nil, nil, nil, nil, nil, 45, nil, nil, - 104, 103, 105, 94, 56, 96, 95, 97, nil, 98, - 106, 107, nil, 92, 93, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 222, nil, nil, - 228, nil, nil, 58, 59, nil, nil, 60, nil, nil, - nil, nil, nil, 44, nil, nil, nil, nil, nil, nil, - nil, nil, 227, nil, nil, nil, nil, 91, 81, 84, - 85, nil, 86, 88, 87, 89, nil, nil, nil, nil, - 82, 90, nil, 74, 75, 71, nil, 57, 62, nil, - 83, 63, 64, nil, nil, nil, 67, nil, 65, 66, - 68, 307, 308, 72, 73, nil, nil, nil, nil, nil, - 303, 304, 310, 100, 99, 101, 102, nil, nil, 229, - nil, nil, nil, nil, nil, nil, 45, nil, nil, 104, - 103, 105, 94, 56, 96, 95, 97, nil, 98, 106, - 107, nil, 92, 93, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 222, nil, nil, 228, - nil, nil, 58, 59, nil, nil, 60, nil, nil, nil, - nil, nil, 44, nil, nil, nil, nil, nil, nil, nil, - nil, 227, nil, nil, nil, nil, 91, 81, 84, 85, - nil, 86, 88, 87, 89, nil, nil, nil, nil, 82, - 90, nil, 74, 75, 71, nil, 57, 62, nil, 83, - 63, 64, nil, nil, nil, 67, nil, 65, 66, 68, - 307, 308, 72, 73, nil, nil, nil, nil, nil, 303, - 304, 310, 100, 99, 101, 102, nil, nil, 229, nil, - nil, nil, nil, nil, nil, 45, nil, nil, 104, 103, - 105, 94, 56, 96, 95, 97, 282, 98, 106, 107, - nil, 92, 93, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 222, nil, nil, 228, nil, - nil, 58, 59, nil, nil, 60, nil, 280, nil, nil, - nil, 44, nil, nil, 283, nil, nil, nil, nil, nil, - 227, nil, nil, nil, nil, 91, 81, 84, 85, nil, - 86, 88, 87, 89, nil, nil, nil, nil, 82, 90, - nil, 74, 75, 71, nil, 57, 62, nil, 83, 63, - 64, nil, nil, nil, 67, nil, 65, 66, 68, 307, - 308, 72, 73, nil, nil, nil, nil, nil, 303, 304, - 310, 100, 99, 101, 102, nil, nil, 229, nil, nil, - nil, nil, nil, nil, 45, nil, nil, 104, 103, 105, - 94, 56, 96, 95, 97, 282, 98, 106, 107, nil, - 92, 93, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 222, nil, nil, 228, nil, nil, - 58, 59, nil, nil, 60, nil, nil, nil, nil, nil, - 44, nil, nil, 283, nil, nil, nil, nil, nil, 227, - nil, nil, nil, nil, 91, 81, 84, 85, nil, 86, - 88, 87, 89, nil, nil, nil, nil, 82, 90, nil, - 74, 75, 71, nil, 57, 62, nil, 83, 63, 64, - nil, nil, nil, 67, nil, 65, 66, 68, 30, 31, - 72, 73, nil, nil, nil, nil, nil, 29, 28, 27, - 100, 99, 101, 102, nil, nil, 19, nil, nil, nil, - nil, nil, nil, 45, nil, nil, 104, 103, 105, 94, - 56, 96, 95, 97, nil, 98, 106, 107, nil, 92, - 93, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 222, nil, nil, 228, nil, nil, 58, - 59, nil, nil, 60, nil, nil, nil, nil, nil, 44, - nil, nil, nil, nil, nil, nil, nil, nil, 20, nil, - nil, nil, nil, 91, 81, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, nil, 74, - 75, 71, nil, 57, 62, nil, 83, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 100, - 99, 101, 102, nil, nil, 19, nil, nil, nil, nil, - nil, nil, 45, nil, nil, 104, 103, 105, 94, 56, - 96, 95, 97, nil, 98, 106, 107, nil, 92, 93, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 222, nil, nil, 228, nil, nil, 58, 59, - nil, nil, 60, nil, nil, nil, nil, nil, 44, nil, - nil, nil, nil, nil, nil, nil, nil, 20, nil, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, 74, 75, - 71, nil, 57, 62, nil, 83, 63, 64, nil, nil, - nil, 67, nil, 65, 66, 68, 30, 31, 72, 73, - nil, nil, nil, nil, nil, 29, 28, 27, 100, 99, - 101, 102, nil, nil, 19, nil, nil, nil, nil, nil, - nil, 45, nil, nil, 104, 103, 105, 94, 56, 96, - 95, 97, nil, 98, 106, 107, nil, 92, 93, 42, - 43, 41, 237, 241, 246, 247, 248, 243, 245, 253, - 254, 249, 250, nil, 230, 231, nil, nil, 251, 252, - nil, 222, nil, nil, 228, nil, nil, 58, 59, nil, - nil, 60, nil, nil, 234, nil, 240, 44, 236, 235, - nil, 232, 233, 244, 242, 238, 20, 239, nil, nil, - nil, 91, 81, 84, 85, nil, 86, 88, 87, 89, - nil, nil, nil, nil, 82, 90, 112, 255, nil, nil, - nil, 111, 62, nil, 83, 74, 75, 71, nil, 57, - nil, nil, nil, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 307, 308, 72, 73, nil, nil, nil, - nil, nil, 303, 304, 310, 100, 99, 101, 102, nil, - nil, 229, nil, nil, nil, nil, nil, nil, 305, nil, - nil, 104, 103, 105, 94, 56, 96, 95, 97, nil, - 98, 106, 107, nil, 92, 93, nil, nil, 311, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 346, nil, - nil, 33, nil, nil, 58, 59, nil, nil, 60, nil, - 35, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, 74, 75, 71, nil, 57, 62, - nil, 83, 63, 64, nil, nil, nil, 67, nil, 65, - 66, 68, 307, 308, 72, 73, nil, nil, nil, nil, - nil, 303, 304, 310, 100, 99, 101, 102, nil, nil, - 229, nil, nil, nil, nil, nil, nil, 305, nil, nil, - 104, 103, 105, 351, 56, 96, 95, 352, nil, 98, - 106, 107, nil, 92, 93, nil, nil, 311, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 358, nil, nil, 353, nil, nil, - 228, nil, nil, 58, 59, nil, nil, 60, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 91, 81, 84, - 85, nil, 86, 88, 87, 89, nil, nil, nil, nil, - 82, 90, nil, 74, 75, 71, nil, 57, 62, nil, - 83, 63, 64, nil, nil, nil, 67, nil, 65, 66, - 68, 307, 308, 72, 73, nil, nil, nil, nil, nil, - 303, 304, 310, 100, 99, 101, 102, nil, nil, 229, - nil, nil, nil, nil, nil, nil, 305, nil, nil, 104, - 103, 105, 351, 56, 96, 95, 352, nil, 98, 106, - 107, nil, 92, 93, nil, nil, 311, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 353, nil, nil, 228, - nil, nil, 58, 59, nil, nil, 60, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 91, 81, 84, 85, - nil, 86, 88, 87, 89, nil, nil, nil, nil, 82, - 90, nil, 74, 75, 71, 9, 57, 62, nil, 83, - 63, 64, nil, nil, nil, 67, nil, 65, 66, 68, - 30, 31, 72, 73, nil, nil, nil, nil, nil, 29, - 28, 27, 100, 99, 101, 102, nil, nil, 19, nil, - nil, nil, nil, nil, 8, 45, 7, 10, 104, 103, - 105, 94, 56, 96, 95, 97, nil, 98, 106, 107, - nil, 92, 93, 42, 43, 41, 237, 241, 246, 247, - 248, 243, 245, 253, 254, 249, 250, nil, 230, 231, - nil, nil, 251, 252, nil, 40, nil, nil, 33, nil, - nil, 58, 59, nil, nil, 60, nil, 35, 234, nil, - 240, 44, 236, 235, nil, 232, 233, 244, 242, 238, - 20, 239, nil, nil, nil, 91, 81, 84, 85, nil, - 86, 88, 87, 89, nil, nil, nil, nil, 82, 90, - nil, 255, nil, nil, nil, 386, 62, nil, 83, 74, - 75, 71, nil, 57, nil, nil, nil, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 100, - 99, 101, 102, nil, nil, 19, nil, nil, nil, nil, - nil, nil, 45, nil, nil, 104, 103, 105, 94, 56, - 96, 95, 97, nil, 98, 106, 107, nil, 92, 93, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 222, nil, nil, 228, nil, nil, 58, 59, - nil, nil, 60, nil, nil, nil, nil, nil, 44, nil, - nil, nil, nil, nil, nil, nil, nil, 20, nil, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, 74, 75, - 71, nil, 57, 62, nil, 83, 63, 64, nil, nil, - nil, 67, nil, 65, 66, 68, 30, 31, 72, 73, - nil, nil, nil, nil, nil, 29, 28, 27, 100, 99, - 101, 102, nil, nil, 19, nil, nil, nil, nil, nil, - nil, 45, nil, nil, 104, 103, 105, 94, 56, 96, - 95, 97, nil, 98, 106, 107, nil, 92, 93, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 222, nil, nil, 228, nil, nil, 58, 59, nil, - nil, 60, nil, nil, nil, nil, nil, 44, nil, nil, - nil, nil, nil, nil, nil, nil, 20, nil, nil, nil, - nil, 91, 81, 84, 85, nil, 86, 88, 87, 89, - nil, nil, nil, nil, 82, 90, nil, 74, 75, 71, - nil, 57, 62, nil, 83, 63, 64, nil, nil, nil, - 67, nil, 65, 66, 68, 30, 31, 72, 73, nil, - nil, nil, nil, nil, 29, 28, 27, 100, 99, 101, - 102, nil, nil, 19, nil, nil, nil, nil, nil, nil, - 45, nil, nil, 104, 103, 105, 94, 56, 96, 95, - 97, nil, 98, 106, 107, nil, 92, 93, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 222, nil, nil, 228, nil, nil, 58, 59, nil, nil, - 60, nil, nil, nil, nil, nil, 44, nil, nil, nil, - nil, nil, nil, nil, nil, 20, nil, nil, nil, nil, - 91, 81, 84, 85, nil, 86, 88, 87, 89, nil, - nil, nil, nil, 82, 90, nil, 74, 75, 71, nil, - 57, 62, nil, 83, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 30, 31, 72, 73, nil, nil, - nil, nil, nil, 29, 28, 27, 100, 99, 101, 102, - nil, nil, 19, nil, nil, nil, nil, nil, nil, 45, - nil, nil, 104, 103, 105, 94, 56, 96, 95, 97, - nil, 98, 106, 107, nil, 92, 93, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 222, - nil, nil, 228, nil, nil, 58, 59, nil, nil, 60, - nil, nil, nil, nil, nil, 44, nil, nil, nil, nil, - nil, nil, nil, nil, 20, nil, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, 74, 75, 71, 9, 57, - 62, nil, 83, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 30, 31, 72, 73, nil, nil, nil, - nil, nil, 29, 28, 27, 100, 99, 101, 102, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 45, nil, - 10, 104, 103, 105, 94, 56, 96, 95, 97, nil, - 98, 106, 107, nil, 92, 93, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 40, nil, - nil, 33, nil, nil, 58, 59, nil, nil, 60, nil, - 35, nil, nil, nil, 44, nil, nil, nil, nil, nil, - nil, nil, nil, 20, nil, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, 74, 75, 71, nil, 57, 62, - nil, 83, 63, 64, nil, nil, nil, 67, nil, 65, - 66, 68, 30, 31, 72, 73, nil, nil, nil, nil, - nil, 29, 28, 27, 100, 99, 101, 102, nil, nil, - 229, nil, nil, nil, nil, nil, nil, 45, nil, nil, - 104, 103, 105, 94, 56, 96, 95, 97, nil, 98, - 106, 107, nil, 92, 93, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 222, nil, nil, - 228, nil, nil, 58, 59, nil, nil, 60, nil, 402, - nil, nil, nil, 44, nil, nil, nil, nil, nil, nil, - nil, nil, 227, nil, nil, nil, nil, 91, 81, 84, - 85, nil, 86, 88, 87, 89, nil, nil, nil, nil, - 82, 90, nil, 74, 75, 71, nil, 57, 62, nil, - 83, 63, 64, nil, nil, nil, 67, nil, 65, 66, - 68, 30, 31, 72, 73, nil, nil, nil, nil, nil, - 29, 28, 27, 100, 99, 101, 102, nil, nil, 229, - nil, nil, nil, nil, nil, nil, 45, nil, nil, 104, - 103, 105, 94, 56, 96, 95, 97, nil, 98, 106, - 107, nil, 92, 93, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 222, nil, nil, 228, - nil, nil, 58, 59, nil, nil, 60, nil, nil, nil, - nil, nil, 44, nil, nil, nil, nil, nil, nil, nil, - nil, 227, nil, nil, nil, nil, 91, 81, 84, 85, - nil, 86, 88, 87, 89, nil, nil, nil, nil, 82, - 90, nil, 74, 75, 71, nil, 57, 62, nil, 83, - 63, 64, nil, nil, nil, 67, nil, 65, 66, 68, - 30, 31, 72, 73, nil, nil, nil, nil, nil, 29, - 28, 27, 100, 99, 101, 102, nil, nil, 229, nil, - nil, nil, nil, nil, nil, 45, nil, nil, 104, 103, - 105, 94, 56, 96, 95, 97, 282, 98, 106, 107, - nil, 92, 93, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 222, nil, nil, 228, nil, - nil, 58, 59, nil, nil, 60, nil, 280, nil, 278, - nil, 44, nil, nil, 283, nil, nil, nil, nil, nil, - 227, nil, nil, nil, nil, 91, 81, 84, 85, nil, - 86, 88, 87, 89, nil, nil, nil, nil, 82, 90, - nil, 74, 75, 71, nil, 57, 62, nil, 83, 63, - 64, nil, nil, nil, 67, nil, 65, 66, 68, 30, - 31, 72, 73, nil, nil, nil, nil, nil, 29, 28, - 27, 100, 99, 101, 102, nil, nil, 229, nil, nil, - nil, nil, nil, nil, 45, nil, nil, 104, 103, 105, - 94, 56, 96, 95, 97, nil, 98, 106, 107, nil, - 92, 93, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 222, nil, nil, 228, nil, nil, - 58, 59, nil, nil, 60, nil, nil, nil, nil, nil, - 44, nil, nil, nil, nil, nil, nil, nil, nil, 227, - nil, nil, nil, nil, 91, 81, 84, 85, nil, 86, - 88, 87, 89, nil, nil, nil, nil, 82, 90, nil, - 74, 75, 71, nil, 57, 62, nil, 83, 63, 64, - nil, nil, nil, 67, nil, 65, 66, 68, 30, 31, - 72, 73, nil, nil, nil, nil, nil, 29, 28, 27, - 100, 99, 101, 102, nil, nil, 229, nil, nil, nil, - nil, nil, nil, 45, nil, nil, 104, 103, 105, 94, - 56, 96, 95, 97, nil, 98, 106, 107, nil, 92, - 93, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 222, nil, nil, 228, nil, nil, 58, - 59, nil, nil, 60, nil, 402, nil, nil, nil, 44, - nil, nil, nil, nil, nil, nil, nil, nil, 227, nil, - nil, nil, nil, 91, 81, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, nil, 74, - 75, 71, nil, 57, 62, nil, 83, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 100, - 99, 101, 102, nil, nil, 19, nil, nil, nil, nil, - nil, nil, 45, nil, nil, 104, 103, 105, 94, 56, - 96, 95, 97, nil, 98, 106, 107, nil, 92, 93, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 222, nil, nil, 228, nil, nil, 58, 59, - nil, nil, 60, nil, nil, nil, nil, nil, 44, nil, - nil, nil, nil, nil, nil, nil, nil, 20, nil, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, 74, 75, - 71, nil, 57, 62, nil, 83, 63, 64, nil, nil, - nil, 67, nil, 65, 66, 68, 30, 31, 72, 73, - nil, nil, nil, nil, nil, 29, 28, 27, 100, 99, - 101, 102, nil, nil, 19, nil, nil, nil, nil, nil, - nil, 45, nil, nil, 104, 103, 105, 94, 56, 96, - 95, 97, nil, 98, 106, 107, nil, 92, 93, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 222, nil, nil, 228, nil, nil, 58, 59, nil, - nil, 60, nil, nil, nil, nil, nil, 44, nil, nil, - nil, nil, nil, nil, nil, nil, 20, nil, nil, nil, - nil, 91, 81, 84, 85, nil, 86, 88, 87, 89, - nil, nil, nil, nil, 82, 90, nil, 74, 75, 71, - nil, 57, 62, nil, 83, 63, 64, nil, nil, nil, - 67, nil, 65, 66, 68, 30, 31, 72, 73, nil, - nil, nil, nil, nil, 29, 28, 27, 100, 99, 101, - 102, nil, nil, 19, nil, nil, nil, nil, nil, nil, - 45, nil, nil, 104, 103, 105, 94, 56, 96, 95, - 97, nil, 98, 106, 107, nil, 92, 93, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 222, nil, nil, 228, nil, nil, 58, 59, nil, nil, - 60, nil, nil, nil, nil, nil, 44, nil, nil, nil, - nil, nil, nil, nil, nil, 20, nil, nil, nil, nil, - 91, 81, 84, 85, nil, 86, 88, 87, 89, nil, - nil, nil, nil, 82, 90, nil, 74, 75, 71, nil, - 57, 62, nil, 83, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 30, 31, 72, 73, nil, nil, - nil, nil, nil, 29, 28, 27, 100, 99, 101, 102, - nil, nil, 19, nil, nil, nil, nil, nil, nil, 45, - nil, nil, 104, 103, 105, 94, 56, 96, 95, 97, - nil, 98, 106, 107, nil, 92, 93, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 222, - nil, nil, 228, nil, nil, 58, 59, nil, nil, 60, - nil, nil, nil, nil, nil, 44, nil, nil, nil, nil, - nil, nil, nil, nil, 20, nil, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, 217, 74, 75, 71, nil, 57, - 62, nil, 83, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 307, 308, 72, 73, nil, nil, nil, - nil, nil, 303, 304, 310, 100, 99, 101, 102, nil, - nil, 229, nil, nil, nil, nil, nil, nil, 45, nil, - nil, 104, 103, 105, 94, 56, 96, 95, 97, nil, - 98, 106, 107, nil, 92, 93, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 222, nil, - nil, 228, nil, nil, 58, 59, nil, nil, 60, nil, - nil, nil, nil, nil, 44, nil, nil, nil, nil, nil, - nil, nil, nil, 227, nil, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, 74, 75, 71, nil, 57, 62, - nil, 83, 63, 64, nil, nil, nil, 67, nil, 65, - 66, 68, 307, 308, 72, 73, nil, nil, nil, nil, - nil, 303, 304, 310, 100, 99, 101, 102, nil, nil, - 229, nil, nil, nil, nil, nil, nil, 45, nil, nil, - 104, 103, 105, 94, 56, 96, 95, 97, nil, 98, - 106, 107, nil, 92, 93, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 222, nil, nil, - 228, nil, nil, 58, 59, nil, nil, 60, nil, nil, - nil, nil, nil, 44, nil, nil, nil, nil, nil, nil, - nil, nil, 227, nil, nil, nil, nil, 91, 81, 84, - 85, nil, 86, 88, 87, 89, nil, nil, nil, nil, - 82, 90, nil, 74, 75, 71, nil, 57, 62, nil, - 83, 63, 64, nil, nil, nil, 67, nil, 65, 66, - 68, 307, 308, 72, 73, nil, nil, nil, nil, nil, - 303, 304, 310, 100, 99, 101, 102, nil, nil, 229, - nil, nil, nil, nil, nil, nil, 45, nil, nil, 104, - 103, 105, 94, 56, 96, 95, 97, nil, 98, 106, - 107, nil, 92, 93, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 222, nil, nil, 228, - nil, nil, 58, 59, nil, nil, 60, nil, nil, nil, - nil, nil, 44, nil, nil, nil, nil, nil, nil, nil, - nil, 227, nil, nil, nil, nil, 91, 81, 84, 85, - nil, 86, 88, 87, 89, nil, nil, nil, nil, 82, - 90, nil, 74, 75, 71, nil, 57, 62, nil, 83, - 63, 64, nil, nil, nil, 67, nil, 65, 66, 68, - 307, 308, 72, 73, nil, nil, nil, nil, nil, 303, - 304, 310, 100, 99, 101, 102, nil, nil, 229, nil, - nil, nil, nil, nil, nil, 45, nil, nil, 104, 103, - 105, 94, 56, 96, 95, 97, nil, 98, 106, 107, - nil, 92, 93, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 222, nil, nil, 228, nil, - nil, 58, 59, nil, nil, 60, nil, nil, nil, nil, - nil, 44, nil, nil, nil, nil, nil, nil, nil, nil, - 227, nil, nil, nil, nil, 91, 81, 84, 85, nil, - 86, 88, 87, 89, nil, nil, nil, nil, 82, 90, - nil, 74, 75, 71, nil, 57, 62, nil, 83, 63, - 64, nil, nil, nil, 67, nil, 65, 66, 68, 307, - 308, 72, 73, nil, nil, nil, nil, nil, 303, 304, - 310, 100, 99, 101, 102, nil, nil, 229, nil, nil, - nil, nil, nil, nil, 45, nil, nil, 104, 103, 105, - 94, 56, 96, 95, 97, nil, 98, 106, 107, nil, - 92, 93, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 222, nil, nil, 228, nil, nil, - 58, 59, nil, nil, 60, nil, nil, nil, nil, nil, - 44, nil, nil, nil, nil, nil, nil, nil, nil, 227, - nil, nil, nil, nil, 91, 81, 84, 85, nil, 86, - 88, 87, 89, nil, nil, nil, nil, 82, 90, nil, - 74, 75, 71, nil, 57, 62, nil, 83, 63, 64, - nil, nil, nil, 67, nil, 65, 66, 68, 307, 308, - 72, 73, nil, nil, nil, nil, nil, 303, 304, 310, - 100, 99, 101, 102, nil, nil, 229, nil, nil, nil, - nil, nil, nil, 45, nil, nil, 104, 103, 105, 94, - 56, 96, 95, 97, nil, 98, 106, 107, nil, 92, - 93, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 222, nil, nil, 228, nil, nil, 58, - 59, nil, nil, 60, nil, nil, nil, nil, nil, 44, - nil, nil, nil, nil, nil, nil, nil, nil, 227, nil, - nil, nil, nil, 91, 81, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, nil, 74, - 75, 71, nil, 57, 62, nil, 83, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 307, 308, 72, - 73, nil, nil, nil, nil, nil, 303, 304, 310, 100, - 99, 101, 102, nil, nil, 229, nil, nil, nil, nil, - nil, nil, 45, nil, nil, 104, 103, 105, 94, 56, - 96, 95, 97, nil, 98, 106, 107, nil, 92, 93, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 222, nil, nil, 228, nil, nil, 58, 59, - nil, nil, 60, nil, nil, nil, nil, nil, 44, nil, - nil, nil, nil, nil, nil, nil, nil, 227, nil, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, 74, 75, - 71, nil, 57, 62, nil, 83, 63, 64, nil, nil, - nil, 67, nil, 65, 66, 68, 307, 308, 72, 73, - nil, nil, nil, nil, nil, 303, 304, 310, 100, 99, - 101, 102, nil, nil, 229, nil, nil, nil, nil, nil, - nil, 45, nil, nil, 104, 103, 105, 94, 56, 96, - 95, 97, nil, 98, 106, 107, nil, 92, 93, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 222, nil, nil, 228, nil, nil, 58, 59, nil, - nil, 60, nil, nil, nil, nil, nil, 44, nil, nil, - nil, nil, nil, nil, nil, nil, 227, nil, nil, nil, - nil, 91, 81, 84, 85, nil, 86, 88, 87, 89, - nil, nil, nil, nil, 82, 90, nil, 74, 75, 71, - nil, 57, 62, nil, 83, 63, 64, nil, nil, nil, - 67, nil, 65, 66, 68, 307, 308, 72, 73, nil, - nil, nil, nil, nil, 303, 304, 310, 100, 99, 101, - 102, nil, nil, 229, nil, nil, nil, nil, nil, nil, - 45, nil, nil, 104, 103, 105, 94, 56, 96, 95, - 97, nil, 98, 106, 107, nil, 92, 93, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 222, nil, nil, 228, nil, nil, 58, 59, nil, nil, - 60, nil, nil, nil, nil, nil, 44, nil, nil, nil, - nil, nil, nil, nil, nil, 227, nil, nil, nil, nil, - 91, 81, 84, 85, nil, 86, 88, 87, 89, nil, - nil, nil, nil, 82, 90, nil, 74, 75, 71, nil, - 57, 62, nil, 83, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 307, 308, 72, 73, nil, nil, - nil, nil, nil, 303, 304, 310, 100, 99, 101, 102, - nil, nil, 229, nil, nil, nil, nil, nil, nil, 45, - nil, nil, 104, 103, 105, 94, 56, 96, 95, 97, - nil, 98, 106, 107, nil, 92, 93, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 222, - nil, nil, 228, nil, nil, 58, 59, nil, nil, 60, - nil, nil, nil, nil, nil, 44, nil, nil, nil, nil, - nil, nil, nil, nil, 227, nil, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, 74, 75, 71, nil, 57, - 62, nil, 83, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 307, 308, 72, 73, nil, nil, nil, - nil, nil, 303, 304, 310, 100, 99, 101, 102, nil, - nil, 229, nil, nil, nil, nil, nil, nil, 45, nil, - nil, 104, 103, 105, 94, 56, 96, 95, 97, nil, - 98, 106, 107, nil, 92, 93, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 222, nil, - nil, 228, nil, nil, 58, 59, nil, nil, 60, nil, - nil, nil, nil, nil, 44, nil, nil, nil, nil, nil, - nil, nil, nil, 227, nil, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, 74, 75, 71, nil, 57, 62, - nil, 83, 63, 64, nil, nil, nil, 67, nil, 65, - 66, 68, 307, 308, 72, 73, nil, nil, nil, nil, - nil, 303, 304, 310, 100, 99, 101, 102, nil, nil, - 229, nil, nil, nil, nil, nil, nil, 45, nil, nil, - 104, 103, 105, 94, 56, 96, 95, 97, nil, 98, - 106, 107, nil, 92, 93, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 222, nil, nil, - 228, nil, nil, 58, 59, nil, nil, 60, nil, nil, - nil, nil, nil, 44, nil, nil, nil, nil, nil, nil, - nil, nil, 227, nil, nil, nil, nil, 91, 81, 84, - 85, nil, 86, 88, 87, 89, nil, nil, nil, nil, - 82, 90, nil, 74, 75, 71, nil, 57, 62, nil, - 83, 63, 64, nil, nil, nil, 67, nil, 65, 66, - 68, 307, 308, 72, 73, nil, nil, nil, nil, nil, - 303, 304, 310, 100, 99, 101, 102, nil, nil, 229, - nil, nil, nil, nil, nil, nil, 45, nil, nil, 104, - 103, 105, 94, 56, 96, 95, 97, nil, 98, 106, - 107, nil, 92, 93, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 222, nil, nil, 228, - nil, nil, 58, 59, nil, nil, 60, nil, nil, nil, - nil, nil, 44, nil, nil, nil, nil, nil, nil, nil, - nil, 227, nil, nil, nil, nil, 91, 81, 84, 85, - nil, 86, 88, 87, 89, nil, nil, nil, nil, 82, - 90, nil, 74, 75, 71, nil, 57, 62, nil, 83, - 63, 64, nil, nil, nil, 67, nil, 65, 66, 68, - 307, 308, 72, 73, nil, nil, nil, nil, nil, 303, - 304, 310, 100, 99, 101, 102, nil, nil, 229, nil, - nil, nil, nil, nil, nil, 45, nil, nil, 104, 103, - 105, 94, 56, 96, 95, 97, nil, 98, 106, 107, - nil, 92, 93, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 222, nil, nil, 228, nil, - nil, 58, 59, nil, nil, 60, nil, nil, nil, nil, - nil, 44, nil, nil, nil, nil, nil, nil, nil, nil, - 227, nil, nil, nil, nil, 91, 81, 84, 85, nil, - 86, 88, 87, 89, nil, nil, nil, nil, 82, 90, - nil, 74, 75, 71, nil, 57, 62, nil, 83, 63, - 64, nil, nil, nil, 67, nil, 65, 66, 68, 307, - 308, 72, 73, nil, nil, nil, nil, nil, 303, 304, - 310, 100, 99, 101, 102, nil, nil, 229, nil, nil, - nil, nil, nil, nil, 45, nil, nil, 104, 103, 105, - 94, 56, 96, 95, 97, nil, 98, 106, 107, nil, - 92, 93, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 222, nil, nil, 228, nil, nil, - 58, 59, nil, nil, 60, nil, nil, nil, nil, nil, - 44, nil, nil, nil, nil, nil, nil, nil, nil, 227, - nil, nil, nil, nil, 91, 81, 84, 85, nil, 86, - 88, 87, 89, nil, nil, nil, nil, 82, 90, nil, - 74, 75, 71, nil, 57, 62, nil, 83, 63, 64, - nil, nil, nil, 67, nil, 65, 66, 68, 307, 308, - 72, 73, nil, nil, nil, nil, nil, 303, 304, 310, - 100, 99, 101, 102, nil, nil, 229, nil, nil, nil, - nil, nil, nil, 45, nil, nil, 104, 103, 105, 94, - 56, 96, 95, 97, nil, 98, 106, 107, nil, 92, - 93, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 222, nil, nil, 228, nil, nil, 58, - 59, nil, nil, 60, nil, nil, nil, nil, nil, 44, - nil, nil, nil, nil, nil, nil, nil, nil, 227, nil, - nil, nil, nil, 91, 81, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, nil, 74, - 75, 71, nil, 57, 62, nil, 83, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 307, 308, 72, - 73, nil, nil, nil, nil, nil, 303, 304, 310, 100, - 99, 101, 102, nil, nil, 229, nil, nil, nil, nil, - nil, nil, 45, nil, nil, 104, 103, 105, 94, 56, - 96, 95, 97, nil, 98, 106, 107, nil, 92, 93, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 222, nil, nil, 228, nil, nil, 58, 59, - nil, nil, 60, nil, nil, nil, nil, nil, 44, nil, - nil, nil, nil, nil, nil, nil, nil, 227, nil, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, 74, 75, - 71, nil, 57, 62, nil, 83, 63, 64, nil, nil, - nil, 67, nil, 65, 66, 68, 307, 308, 72, 73, - nil, nil, nil, nil, nil, 303, 304, 310, 100, 99, - 101, 102, nil, nil, 229, nil, nil, nil, nil, nil, - nil, 45, nil, nil, 104, 103, 105, 94, 56, 96, - 95, 97, nil, 98, 106, 107, nil, 92, 93, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 222, nil, nil, 228, nil, nil, 58, 59, nil, - nil, 60, nil, nil, nil, nil, nil, 44, nil, nil, - nil, nil, nil, nil, nil, nil, 227, nil, nil, nil, - nil, 91, 81, 84, 85, nil, 86, 88, 87, 89, - nil, nil, nil, nil, 82, 90, nil, 74, 75, 71, - nil, 57, 62, nil, 83, 63, 64, nil, nil, nil, - 67, nil, 65, 66, 68, 307, 308, 72, 73, nil, - nil, nil, nil, nil, 303, 304, 310, 100, 99, 101, - 102, nil, nil, 229, nil, nil, nil, nil, nil, nil, - 45, nil, nil, 104, 103, 105, 94, 56, 96, 95, - 97, nil, 98, 106, 107, nil, 92, 93, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 222, nil, nil, 228, nil, nil, 58, 59, nil, nil, - 60, nil, nil, nil, nil, nil, 44, nil, nil, nil, - nil, nil, nil, nil, nil, 227, nil, nil, nil, nil, - 91, 81, 84, 85, nil, 86, 88, 87, 89, nil, - nil, nil, nil, 82, 90, nil, 74, 75, 71, nil, - 57, 62, nil, 83, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 307, 308, 72, 73, nil, nil, - nil, nil, nil, 303, 304, 310, 100, 99, 101, 102, - nil, nil, 229, nil, nil, nil, nil, nil, nil, 45, - nil, nil, 104, 103, 105, 94, 56, 96, 95, 97, - nil, 98, 106, 107, nil, 92, 93, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 222, - nil, nil, 228, nil, nil, 58, 59, nil, nil, 60, - nil, nil, nil, nil, nil, 44, nil, nil, nil, nil, - nil, nil, nil, nil, 227, nil, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, 74, 75, 71, nil, 57, - 62, nil, 83, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 307, 308, 72, 73, nil, nil, nil, - nil, nil, 303, 304, 310, 100, 99, 101, 102, nil, - nil, 229, nil, nil, nil, nil, nil, nil, 45, nil, - nil, 104, 103, 105, 94, 56, 96, 95, 97, nil, - 98, 106, 107, nil, 92, 93, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 222, nil, - nil, 228, nil, nil, 58, 59, nil, nil, 60, nil, - nil, nil, nil, nil, 44, nil, nil, nil, nil, nil, - nil, nil, nil, 227, nil, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, 74, 75, 71, nil, 57, 62, - nil, 83, 63, 64, nil, nil, nil, 67, nil, 65, - 66, 68, 307, 308, 72, 73, nil, nil, nil, nil, - nil, 303, 304, 310, 100, 99, 101, 102, nil, nil, - 229, nil, nil, nil, nil, nil, nil, 45, nil, nil, - 104, 103, 105, 94, 56, 96, 95, 97, nil, 98, - 106, 107, nil, 92, 93, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 222, nil, nil, - 228, nil, nil, 58, 59, nil, nil, 60, nil, nil, - nil, nil, nil, 44, nil, nil, nil, nil, nil, nil, - nil, nil, 227, nil, nil, nil, nil, 91, 81, 84, - 85, nil, 86, 88, 87, 89, nil, nil, nil, nil, - 82, 90, nil, 74, 75, 71, nil, 57, 62, nil, - 83, 63, 64, nil, nil, nil, 67, nil, 65, 66, - 68, 307, 308, 72, 73, nil, nil, nil, nil, nil, - 303, 304, 310, 100, 99, 101, 102, nil, nil, 229, - nil, nil, nil, nil, nil, nil, 45, nil, nil, 104, - 103, 105, 94, 56, 96, 95, 97, nil, 98, 106, - 107, nil, 92, 93, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 222, nil, nil, 228, - nil, nil, 58, 59, nil, nil, 60, nil, nil, nil, - nil, nil, 44, nil, nil, nil, nil, nil, nil, nil, - nil, 227, nil, nil, nil, nil, 91, 81, 84, 85, - nil, 86, 88, 87, 89, nil, nil, nil, nil, 82, - 90, nil, 74, 75, 71, nil, 57, 62, nil, 83, - 63, 64, nil, nil, nil, 67, nil, 65, 66, 68, - 307, 308, 72, 73, nil, nil, nil, nil, nil, 303, - 304, 310, 100, 99, 101, 102, nil, nil, 229, nil, - nil, nil, nil, nil, nil, 45, nil, nil, 104, 103, - 105, 94, 56, 96, 95, 97, nil, 98, 106, 107, - nil, 92, 93, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 222, nil, nil, 228, nil, - nil, 58, 59, nil, nil, 60, nil, nil, nil, nil, - nil, 44, nil, nil, nil, nil, nil, nil, nil, nil, - 227, nil, nil, nil, nil, 91, 81, 84, 85, nil, - 86, 88, 87, 89, nil, nil, nil, nil, 82, 90, - nil, 74, 75, 71, nil, 57, 62, nil, 83, 63, - 64, nil, nil, nil, 67, nil, 65, 66, 68, 307, - 308, 72, 73, nil, nil, nil, nil, nil, 303, 304, - 310, 100, 99, 101, 102, nil, nil, 229, nil, nil, - nil, nil, nil, nil, 45, nil, nil, 104, 103, 105, - 94, 56, 96, 95, 97, nil, 98, 106, 107, nil, - 92, 93, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 222, nil, nil, 228, nil, nil, - 58, 59, nil, nil, 60, nil, nil, nil, nil, nil, - 44, nil, nil, nil, nil, nil, nil, nil, nil, 227, - nil, nil, nil, nil, 91, 81, 84, 85, nil, 86, - 88, 87, 89, nil, nil, nil, nil, 82, 90, nil, - 74, 75, 71, nil, 57, 62, nil, 83, 63, 64, - nil, nil, nil, 67, nil, 65, 66, 68, 307, 308, - 72, 73, nil, nil, nil, nil, nil, 303, 304, 310, - 100, 99, 101, 102, nil, nil, 229, nil, nil, nil, - nil, nil, nil, 45, nil, nil, 104, 103, 105, 94, - 56, 96, 95, 97, nil, 98, 106, 107, nil, 92, - 93, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 222, nil, nil, 228, nil, nil, 58, - 59, nil, nil, 60, nil, nil, nil, nil, nil, 44, - nil, nil, nil, nil, nil, nil, nil, nil, 227, nil, - nil, nil, nil, 91, 81, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, nil, 74, - 75, 71, nil, 57, 62, nil, 83, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 307, 308, 72, - 73, nil, nil, nil, nil, nil, 303, 304, 310, 100, - 99, 101, 102, nil, nil, 229, nil, nil, nil, nil, - nil, nil, 45, nil, nil, 104, 103, 105, 94, 56, - 96, 95, 97, nil, 98, 106, 107, nil, 92, 93, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 222, nil, nil, 228, nil, nil, 58, 59, - nil, nil, 60, nil, nil, nil, nil, nil, 44, nil, - nil, nil, nil, nil, nil, nil, nil, 227, nil, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, 74, 75, - 71, nil, 57, 62, nil, 83, 63, 64, nil, nil, - nil, 67, nil, 65, 66, 68, 30, 31, 72, 73, - nil, nil, nil, nil, nil, 29, 28, 27, 100, 99, - 101, 102, nil, nil, 229, nil, nil, nil, nil, nil, - nil, 45, nil, nil, 104, 103, 105, 94, 56, 96, - 95, 97, 282, 98, 106, 107, nil, 92, 93, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 222, nil, nil, 228, nil, nil, 58, 59, nil, - nil, 60, nil, 280, nil, 278, nil, 44, nil, nil, - 283, nil, nil, nil, nil, nil, 227, nil, nil, nil, - nil, 91, 81, 84, 85, nil, 86, 88, 87, 89, - nil, nil, nil, nil, 82, 90, nil, 74, 75, 71, - nil, 57, 62, nil, 83, 63, 64, nil, nil, nil, - 67, nil, 65, 66, 68, 30, 31, 72, 73, nil, - nil, nil, nil, nil, 29, 28, 27, 100, 99, 101, - 102, nil, nil, 229, nil, nil, nil, nil, nil, nil, - 45, nil, nil, 104, 103, 105, 94, 56, 96, 95, - 97, 282, 98, 106, 107, nil, 92, 93, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 222, nil, nil, 228, nil, nil, 58, 59, nil, nil, - 60, nil, 280, nil, 278, nil, 44, nil, nil, 283, - nil, nil, nil, nil, nil, 227, nil, nil, nil, nil, - 91, 81, 84, 85, nil, 86, 88, 87, 89, nil, - nil, nil, nil, 82, 90, nil, 74, 75, 71, nil, - 57, 62, nil, 83, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 30, 31, 72, 73, nil, nil, - nil, nil, nil, 29, 28, 27, 100, 99, 101, 102, - nil, nil, 229, nil, nil, nil, nil, nil, nil, 45, - nil, nil, 104, 103, 105, 94, 56, 96, 95, 97, - 282, 98, 106, 107, nil, 92, 93, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 222, - nil, nil, 228, nil, nil, 58, 59, nil, nil, 60, - nil, 280, nil, 278, nil, 44, nil, nil, 283, nil, - nil, nil, nil, nil, 227, nil, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, 217, 74, 75, 71, nil, 57, - 62, nil, 83, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 307, 308, 72, 73, nil, nil, nil, - nil, nil, 303, 304, 310, 100, 99, 101, 102, nil, - nil, 229, nil, nil, nil, nil, nil, nil, 45, nil, - nil, 104, 103, 105, 94, 56, 96, 95, 97, nil, - 98, 106, 107, nil, 92, 93, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 222, nil, - nil, 228, nil, nil, 58, 59, nil, nil, 60, nil, - nil, nil, nil, nil, 44, nil, nil, nil, nil, nil, - nil, nil, nil, 227, nil, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, 74, 75, 71, nil, 57, 62, - nil, 83, 63, 64, nil, nil, nil, 67, nil, 65, - 66, 68, 307, 308, 72, 73, nil, nil, nil, nil, - nil, 303, 304, 310, 100, 99, 101, 102, nil, nil, - 229, nil, nil, nil, nil, nil, nil, 45, nil, nil, - 104, 103, 105, 94, 56, 96, 95, 97, nil, 98, - 106, 107, nil, 92, 93, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 222, nil, nil, - 228, nil, nil, 58, 59, nil, nil, 60, nil, nil, - nil, nil, nil, 44, nil, nil, nil, nil, nil, nil, - nil, nil, 227, nil, nil, nil, nil, 91, 81, 84, - 85, nil, 86, 88, 87, 89, nil, nil, nil, nil, - 82, 90, nil, 74, 75, 71, nil, 57, 62, nil, - 83, 63, 64, nil, nil, nil, 67, nil, 65, 66, - 68, 307, 308, 72, 73, nil, nil, nil, nil, nil, - 303, 304, 310, 100, 99, 101, 102, nil, nil, 229, - nil, nil, nil, nil, nil, nil, 45, nil, nil, 104, - 103, 105, 94, 56, 96, 95, 97, nil, 98, 106, - 107, nil, 92, 93, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 222, nil, nil, 228, - nil, nil, 58, 59, nil, nil, 60, nil, nil, nil, - nil, nil, 44, nil, nil, nil, nil, nil, nil, nil, - nil, 227, nil, nil, nil, nil, 91, 81, 84, 85, - nil, 86, 88, 87, 89, nil, nil, nil, nil, 82, - 90, nil, 74, 75, 71, nil, 57, 62, nil, 83, - 63, 64, nil, nil, nil, 67, nil, 65, 66, 68, - 307, 308, 72, 73, nil, nil, nil, nil, nil, 303, - 304, 310, 100, 99, 101, 102, nil, nil, 229, nil, - nil, nil, nil, nil, nil, 45, nil, nil, 104, 103, - 105, 94, 56, 96, 95, 97, nil, 98, 106, 107, - nil, 92, 93, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 222, nil, nil, 228, nil, - nil, 58, 59, nil, nil, 60, nil, nil, nil, nil, - nil, 44, nil, nil, nil, nil, nil, nil, nil, nil, - 227, nil, nil, nil, nil, 91, 81, 84, 85, nil, - 86, 88, 87, 89, nil, nil, nil, nil, 82, 90, - nil, 74, 75, 71, 9, 57, 62, nil, 83, 63, - 64, nil, nil, nil, 67, nil, 65, 66, 68, 30, - 31, 72, 73, nil, nil, nil, nil, nil, 29, 28, - 27, 100, 99, 101, 102, nil, nil, 19, nil, nil, - nil, nil, nil, 8, 45, nil, 10, 104, 103, 105, - 94, 56, 96, 95, 97, nil, 98, 106, 107, nil, - 92, 93, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 40, nil, nil, 33, nil, nil, - 58, 59, nil, nil, 60, nil, 35, nil, nil, nil, - 44, nil, nil, nil, nil, nil, nil, nil, nil, 20, - nil, nil, nil, nil, 91, 81, 84, 85, nil, 86, - 88, 87, 89, nil, nil, nil, nil, 82, 90, nil, - 74, 75, 71, nil, 57, 62, nil, 83, 63, 64, - nil, nil, nil, 67, nil, 65, 66, 68, 307, 308, - 72, 73, nil, nil, nil, nil, nil, 303, 304, 310, - 100, 99, 101, 102, nil, nil, 229, nil, nil, nil, - nil, nil, nil, 305, nil, nil, 104, 103, 105, 94, - 56, 96, 95, 97, nil, 98, 106, 107, nil, 92, - 93, nil, nil, 311, 237, 241, 246, 247, 248, 243, - 245, 253, 254, 249, 250, nil, 230, 231, nil, nil, - 251, 252, nil, 301, nil, nil, 228, nil, nil, 58, - 59, nil, nil, 60, nil, nil, 234, nil, 240, nil, - 236, 235, nil, 232, 233, 244, 242, 238, nil, 239, - nil, nil, nil, 91, 81, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, nil, 255, - nil, 500, nil, nil, 62, nil, 83, 74, 75, 71, - nil, 57, nil, nil, nil, 63, 64, nil, nil, nil, - 67, nil, 65, 66, 68, 307, 308, 72, 73, nil, - nil, nil, nil, nil, 303, 304, 310, 100, 99, 101, - 102, nil, nil, 229, nil, nil, nil, nil, nil, nil, - 305, nil, nil, 104, 103, 105, 94, 56, 96, 95, - 97, nil, 98, 106, 107, nil, 92, 93, nil, nil, - 311, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 301, nil, nil, 297, nil, nil, 58, 59, nil, nil, - 60, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 91, 81, 84, 85, nil, 86, 88, 87, 89, nil, - nil, nil, nil, 82, 90, nil, 74, 75, 71, nil, - 57, 62, nil, 83, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 307, 308, 72, 73, nil, nil, - nil, nil, nil, 303, 304, 310, 100, 99, 101, 102, - nil, nil, 229, nil, nil, nil, nil, nil, nil, 45, - nil, nil, 104, 103, 105, 94, 56, 96, 95, 97, - nil, 98, 106, 107, nil, 92, 93, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 222, - nil, nil, 228, 518, nil, 58, 59, nil, nil, 60, - nil, nil, nil, nil, nil, 44, nil, nil, nil, nil, - nil, nil, nil, nil, 227, nil, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, 74, 75, 71, nil, 57, - 62, nil, 83, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 30, 31, 72, 73, nil, nil, nil, - nil, nil, 29, 28, 27, 100, 99, 101, 102, nil, - nil, 19, nil, nil, nil, nil, nil, nil, 45, nil, - nil, 104, 103, 105, 94, 56, 96, 95, 97, nil, - 98, 106, 107, nil, 92, 93, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 222, nil, - nil, 228, nil, nil, 58, 59, nil, nil, 60, nil, - nil, nil, nil, nil, 44, nil, nil, nil, nil, nil, - nil, nil, nil, 20, nil, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, 74, 75, 71, nil, 57, 62, - nil, 83, 63, 64, nil, nil, nil, 67, nil, 65, - 66, 68, 30, 31, 72, 73, nil, nil, nil, nil, - nil, 29, 28, 27, 100, 99, 101, 102, nil, nil, - 19, nil, nil, nil, nil, nil, nil, 45, nil, nil, - 104, 103, 105, 94, 56, 96, 95, 97, nil, 98, - 106, 107, nil, 92, 93, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 222, nil, nil, - 228, nil, nil, 58, 59, nil, nil, 60, nil, nil, - nil, nil, nil, 44, nil, nil, nil, nil, nil, nil, - nil, nil, 20, nil, nil, nil, nil, 91, 81, 84, - 85, nil, 86, 88, 87, 89, nil, nil, nil, nil, - 82, 90, nil, 74, 75, 71, nil, 57, 62, nil, - 83, 63, 64, nil, nil, nil, 67, nil, 65, 66, - 68, 30, 31, 72, 73, nil, nil, nil, nil, nil, - 29, 28, 27, 100, 99, 101, 102, nil, nil, 19, - nil, nil, nil, nil, nil, nil, 45, nil, nil, 104, - 103, 105, 94, 56, 96, 95, 97, nil, 98, 106, - 107, nil, 92, 93, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 222, nil, nil, 228, - nil, nil, 58, 59, nil, nil, 60, nil, nil, nil, - nil, nil, 44, nil, nil, nil, nil, nil, nil, nil, - nil, 20, nil, nil, nil, nil, 91, 81, 84, 85, - nil, 86, 88, 87, 89, nil, nil, nil, nil, 82, - 90, nil, 74, 75, 71, nil, 57, 62, nil, 83, - 63, 64, nil, nil, nil, 67, nil, 65, 66, 68, - 30, 31, 72, 73, nil, nil, nil, nil, nil, 29, - 28, 27, 100, 99, 101, 102, nil, nil, 19, nil, - nil, nil, nil, nil, nil, 45, nil, nil, 104, 103, - 105, 94, 56, 96, 95, 97, nil, 98, 106, 107, - nil, 92, 93, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 222, nil, nil, 228, nil, - nil, 58, 59, nil, nil, 60, nil, nil, nil, nil, - nil, 44, nil, nil, nil, nil, nil, nil, nil, nil, - 20, nil, nil, nil, nil, 91, 81, 84, 85, nil, - 86, 88, 87, 89, nil, nil, nil, nil, 82, 90, - nil, 74, 75, 71, nil, 57, 62, nil, 83, 63, - 64, nil, nil, nil, 67, nil, 65, 66, 68, 30, - 31, 72, 73, nil, nil, nil, nil, nil, 29, 28, - 27, 100, 99, 101, 102, nil, nil, 19, nil, nil, - nil, nil, nil, nil, 45, nil, nil, 104, 103, 105, - 94, 56, 96, 95, 97, nil, 98, 106, 107, nil, - 92, 93, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 222, nil, nil, 228, nil, nil, - 58, 59, nil, nil, 60, nil, nil, nil, nil, nil, - 44, nil, nil, nil, nil, nil, nil, nil, nil, 20, - nil, nil, nil, nil, 91, 81, 84, 85, nil, 86, - 88, 87, 89, nil, nil, nil, nil, 82, 90, nil, - 74, 75, 71, nil, 57, 62, nil, 83, 63, 64, - nil, nil, nil, 67, nil, 65, 66, 68, 307, 308, - 72, 73, nil, nil, nil, nil, nil, 303, 304, 310, - 100, 99, 101, 102, nil, nil, 229, nil, nil, nil, - nil, nil, nil, 45, nil, nil, 104, 103, 105, 94, - 56, 96, 95, 97, nil, 98, 106, 107, nil, 92, - 93, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 222, nil, nil, 228, nil, nil, 58, - 59, nil, nil, 60, nil, nil, nil, nil, nil, 44, - nil, nil, nil, nil, nil, nil, nil, nil, 227, nil, - nil, nil, nil, 91, 81, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, nil, 74, - 75, 71, nil, 57, 62, nil, 83, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 100, - 99, 101, 102, nil, nil, 229, nil, nil, nil, nil, - nil, nil, 45, nil, nil, 104, 103, 105, 94, 56, - 96, 95, 97, 282, 98, 106, 107, nil, 92, 93, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 222, nil, nil, 228, nil, nil, 58, 59, - nil, nil, 60, nil, 280, nil, 278, nil, 44, nil, - nil, 283, nil, nil, nil, nil, nil, 227, nil, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, 74, 75, - 71, nil, 57, 62, nil, 83, 63, 64, nil, nil, - nil, 67, nil, 65, 66, 68, 307, 308, 72, 73, - nil, nil, nil, nil, nil, 303, 304, 310, 100, 99, - 101, 102, nil, nil, 229, nil, nil, nil, nil, nil, - nil, 45, nil, nil, 104, 103, 105, 94, 56, 96, - 95, 97, nil, 98, 106, 107, nil, 92, 93, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 222, nil, nil, 228, nil, nil, 58, 59, nil, - nil, 60, nil, nil, nil, nil, nil, 44, nil, nil, - nil, nil, nil, nil, nil, nil, 227, nil, nil, nil, - nil, 91, 81, 84, 85, nil, 86, 88, 87, 89, - nil, nil, nil, nil, 82, 90, nil, 74, 75, 71, - nil, 57, 62, nil, 83, 63, 64, nil, nil, nil, - 67, nil, 65, 66, 68, 307, 308, 72, 73, nil, - nil, nil, nil, nil, 303, 304, 310, 100, 99, 101, - 102, nil, nil, 229, nil, nil, nil, nil, nil, nil, - 45, nil, nil, 104, 103, 105, 94, 56, 96, 95, - 97, nil, 98, 106, 107, nil, 92, 93, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 222, nil, nil, 228, nil, nil, 58, 59, nil, nil, - 60, nil, nil, nil, nil, nil, 44, nil, nil, nil, - nil, nil, nil, nil, nil, 227, nil, nil, nil, nil, - 91, 81, 84, 85, nil, 86, 88, 87, 89, nil, - nil, nil, nil, 82, 90, nil, 74, 75, 71, nil, - 57, 62, nil, 83, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 307, 308, 72, 73, nil, nil, - nil, nil, nil, 303, 304, 310, 100, 99, 101, 102, - nil, nil, 229, nil, nil, nil, nil, nil, nil, 45, - nil, nil, 104, 103, 105, 94, 56, 96, 95, 97, - nil, 98, 106, 107, nil, 92, 93, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 222, - nil, nil, 228, nil, nil, 58, 59, nil, nil, 60, - nil, nil, nil, nil, nil, 44, nil, nil, nil, nil, - nil, nil, nil, nil, 227, nil, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, 74, 75, 71, nil, 57, - 62, nil, 83, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 307, 308, 72, 73, nil, nil, nil, - nil, nil, 303, 304, 310, 100, 99, 101, 102, nil, - nil, 229, nil, nil, nil, nil, nil, nil, 45, nil, - nil, 104, 103, 105, 94, 56, 96, 95, 97, 282, - 98, 106, 107, nil, 92, 93, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 222, nil, - nil, 228, nil, nil, 58, 59, nil, nil, 60, nil, - 626, nil, 278, nil, 44, nil, nil, 283, nil, nil, - nil, nil, nil, 227, nil, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, 74, 75, 71, nil, 57, 62, - nil, 83, 63, 64, nil, nil, nil, 67, nil, 65, - 66, 68, 307, 308, 72, 73, nil, nil, nil, nil, - nil, 303, 304, 310, 100, 99, 101, 102, nil, nil, - 229, nil, nil, nil, nil, nil, nil, 45, nil, nil, - 104, 103, 105, 94, 56, 96, 95, 97, 282, 98, - 106, 107, nil, 92, 93, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 222, nil, nil, - 228, nil, nil, 58, 59, nil, nil, 60, nil, nil, - nil, 278, nil, 44, nil, nil, 283, nil, nil, nil, - nil, nil, 227, nil, nil, nil, nil, 91, 81, 84, - 85, nil, 86, 88, 87, 89, nil, nil, nil, nil, - 82, 90, nil, 74, 75, 71, nil, 57, 62, nil, - 83, 63, 64, nil, nil, nil, 67, nil, 65, 66, - 68, 307, 308, 72, 73, nil, nil, nil, nil, nil, - 303, 304, 310, 100, 99, 101, 102, nil, nil, 229, - nil, nil, nil, nil, nil, nil, 45, nil, nil, 104, - 103, 105, 94, 56, 96, 95, 97, nil, 98, 106, - 107, nil, 92, 93, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 222, nil, nil, 228, - nil, nil, 58, 59, nil, nil, 60, nil, nil, nil, - nil, nil, 44, nil, nil, nil, nil, nil, nil, nil, - nil, 227, nil, nil, nil, nil, 91, 81, 84, 85, - nil, 86, 88, 87, 89, nil, nil, nil, nil, 82, - 90, nil, 74, 75, 71, 9, 57, 62, nil, 83, - 63, 64, nil, nil, nil, 67, nil, 65, 66, 68, - 30, 31, 72, 73, nil, nil, nil, nil, nil, 29, - 28, 27, 100, 99, 101, 102, nil, nil, 19, nil, - nil, nil, nil, nil, 8, 45, 290, 10, 104, 103, - 105, 94, 56, 96, 95, 97, nil, 98, 106, 107, - nil, 92, 93, 42, 43, 41, 237, 241, 246, 247, - 248, 243, 245, 253, 254, 249, 250, nil, 230, 231, - nil, nil, 251, 252, nil, 40, nil, nil, 33, nil, - nil, 58, 59, nil, nil, 60, nil, 35, 234, nil, - 240, 44, 236, 235, nil, 232, 233, 244, 242, 238, - 20, 239, nil, nil, nil, 91, 81, 84, 85, nil, - 86, 88, 87, 89, nil, nil, nil, nil, 82, 90, - 217, 255, nil, nil, nil, 386, 62, nil, 83, 74, - 75, 71, nil, 57, nil, nil, nil, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 307, 308, 72, - 73, nil, nil, nil, nil, nil, 303, 304, 310, 100, - 99, 101, 102, nil, nil, 229, nil, nil, nil, nil, - nil, nil, 305, nil, nil, 104, 103, 105, 94, 56, - 96, 95, 97, nil, 98, 106, 107, nil, 92, 93, - nil, nil, 311, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 301, nil, nil, 297, nil, nil, 58, 59, - nil, nil, 60, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, 74, 75, - 71, nil, 57, 62, nil, 83, 63, 64, nil, nil, - nil, 67, nil, 65, 66, 68, 30, 31, 72, 73, - nil, nil, nil, nil, nil, 29, 28, 27, 100, 99, - 101, 102, nil, nil, 229, nil, nil, nil, nil, nil, - nil, 45, nil, nil, 104, 103, 105, 94, 56, 96, - 95, 97, 282, 98, 106, 107, nil, 92, 93, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 222, nil, nil, 228, nil, nil, 58, 59, nil, - nil, 60, nil, 280, nil, 278, nil, 44, nil, nil, - 283, nil, nil, nil, nil, nil, 227, nil, nil, nil, - nil, 91, 81, 84, 85, nil, 86, 88, 87, 89, - nil, nil, nil, nil, 82, 90, nil, 74, 75, 71, - nil, 57, 62, nil, 83, 63, 64, nil, nil, nil, - 67, nil, 65, 66, 68, 307, 308, 72, 73, nil, - nil, nil, nil, nil, 303, 304, 310, 100, 99, 101, - 102, nil, nil, 229, nil, nil, nil, nil, nil, nil, - 305, nil, nil, 104, 103, 105, 94, 56, 96, 95, - 97, nil, 98, 106, 107, nil, 92, 93, nil, nil, - 311, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 301, nil, nil, 297, nil, nil, 58, 59, nil, nil, - 60, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 91, 81, 84, 85, nil, 86, 88, 87, 89, nil, - nil, nil, nil, 82, 90, nil, 74, 75, 71, nil, - 57, 62, nil, 83, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 307, 308, 72, 73, nil, nil, - nil, nil, nil, 303, 304, 310, 100, 99, 101, 102, - nil, nil, 229, nil, nil, nil, nil, nil, nil, 45, - nil, nil, 104, 103, 105, 94, 56, 96, 95, 97, - nil, 98, 106, 107, nil, 92, 93, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 222, - nil, nil, 228, nil, nil, 58, 59, nil, nil, 60, - nil, nil, nil, nil, nil, 44, nil, nil, nil, nil, - nil, nil, nil, nil, 227, nil, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, 74, 75, 71, nil, 57, - 62, nil, 83, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 307, 308, 72, 73, nil, nil, nil, - nil, nil, 303, 304, 310, 100, 99, 101, 102, nil, - nil, 229, nil, nil, nil, nil, nil, nil, 45, nil, - nil, 104, 103, 105, 94, 56, 96, 95, 97, nil, - 98, 106, 107, nil, 92, 93, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 222, nil, - nil, 228, nil, nil, 58, 59, nil, nil, 60, nil, - nil, nil, nil, nil, 44, nil, nil, nil, nil, nil, - nil, nil, nil, 227, nil, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, 74, 75, 71, nil, 57, 62, - nil, 83, 63, 64, nil, nil, nil, 67, nil, 65, - 66, 68, 307, 308, 72, 73, nil, nil, nil, nil, - nil, 303, 304, 310, 100, 99, 101, 102, nil, nil, - 229, nil, nil, nil, nil, nil, nil, 45, nil, nil, - 104, 103, 105, 94, 56, 96, 95, 97, nil, 98, - 106, 107, nil, 92, 93, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 222, nil, nil, - 228, nil, nil, 58, 59, nil, nil, 60, nil, nil, - nil, nil, nil, 44, nil, nil, nil, nil, nil, nil, - nil, nil, 227, nil, nil, nil, nil, 91, 81, 84, - 85, nil, 86, 88, 87, 89, nil, nil, nil, nil, - 82, 90, nil, 74, 75, 71, nil, 57, 62, nil, - 83, 63, 64, nil, nil, nil, 67, nil, 65, 66, - 68, 30, 31, 72, 73, nil, nil, nil, nil, nil, - 29, 28, 27, 100, 99, 101, 102, nil, nil, 19, - nil, nil, nil, nil, nil, nil, 45, nil, nil, 104, - 103, 105, 94, 56, 96, 95, 97, nil, 98, 106, - 107, nil, 92, 93, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 222, nil, nil, 228, - nil, nil, 58, 59, nil, nil, 60, nil, nil, nil, - nil, nil, 44, nil, nil, nil, nil, nil, nil, nil, - nil, 20, nil, nil, nil, nil, 91, 81, 84, 85, - nil, 86, 88, 87, 89, nil, nil, nil, nil, 82, - 90, nil, 74, 75, 71, nil, 57, 62, nil, 83, - 63, 64, nil, nil, nil, 67, nil, 65, 66, 68, - 307, 308, 72, 73, nil, nil, nil, nil, nil, 303, - 304, 310, 100, 99, 101, 102, nil, nil, 229, nil, - nil, nil, nil, nil, nil, 45, nil, nil, 104, 103, - 105, 94, 56, 96, 95, 97, 282, 98, 106, 107, - nil, 92, 93, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 222, nil, nil, 228, nil, - nil, 58, 59, nil, nil, 60, nil, 626, nil, nil, - nil, 44, nil, nil, 283, nil, nil, nil, nil, nil, - 227, nil, nil, nil, nil, 91, 81, 84, 85, nil, - 86, 88, 87, 89, nil, nil, nil, nil, 82, 90, - nil, 74, 75, 71, nil, 57, 62, nil, 83, 63, - 64, nil, nil, nil, 67, nil, 65, 66, 68, 307, - 308, 72, 73, nil, nil, nil, nil, nil, 303, 304, - 310, 100, 99, 101, 102, nil, nil, 229, nil, nil, - nil, nil, nil, nil, 45, nil, nil, 104, 103, 105, - 94, 56, 96, 95, 97, 282, 98, 106, 107, nil, - 92, 93, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 222, nil, nil, 228, nil, nil, - 58, 59, nil, nil, 60, nil, nil, nil, nil, nil, - 44, nil, nil, 283, nil, nil, nil, nil, nil, 227, - nil, nil, nil, nil, 91, 81, 84, 85, nil, 86, - 88, 87, 89, nil, nil, nil, nil, 82, 90, nil, - 74, 75, 71, nil, 57, 62, nil, 83, 63, 64, - nil, nil, nil, 67, nil, 65, 66, 68, 307, 308, - 72, 73, nil, nil, nil, nil, nil, 303, 304, 310, - 100, 99, 101, 102, nil, nil, 229, nil, nil, nil, - nil, nil, nil, 45, nil, nil, 104, 103, 105, 94, - 56, 96, 95, 97, nil, 98, 106, 107, nil, 92, - 93, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 222, nil, nil, 228, nil, nil, 58, - 59, nil, nil, 60, nil, 280, nil, nil, nil, 44, - nil, nil, nil, nil, nil, nil, nil, nil, 227, nil, - nil, nil, nil, 91, 81, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, nil, 74, - 75, 71, nil, 57, 62, nil, 83, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 100, - 99, 101, 102, nil, nil, 229, nil, nil, nil, nil, - nil, nil, 45, nil, nil, 104, 103, 105, 94, 56, - 96, 95, 97, 282, 98, 106, 107, nil, 92, 93, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 222, nil, nil, 228, nil, nil, 58, 59, - nil, nil, 60, nil, 280, nil, 278, nil, 44, nil, - nil, 283, nil, nil, nil, nil, nil, 227, nil, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, 74, 75, - 71, nil, 57, 62, nil, 83, 63, 64, nil, nil, - nil, 67, nil, 65, 66, 68, 30, 31, 72, 73, - nil, nil, nil, nil, nil, 29, 28, 27, 100, 99, - 101, 102, nil, nil, 229, nil, nil, nil, nil, nil, - nil, 45, nil, nil, 104, 103, 105, 94, 56, 96, - 95, 97, 282, 98, 106, 107, nil, 92, 93, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 222, nil, nil, 228, nil, nil, 58, 59, nil, - nil, 60, nil, 280, nil, 278, nil, 44, nil, nil, - 283, nil, nil, nil, nil, nil, 227, nil, nil, nil, - nil, 91, 81, 84, 85, nil, 86, 88, 87, 89, - nil, nil, nil, nil, 82, 90, nil, 74, 75, 71, - nil, 57, 62, nil, 83, 63, 64, nil, nil, nil, - 67, nil, 65, 66, 68, 307, 308, 72, 73, nil, - nil, nil, nil, nil, 303, 304, 310, 100, 99, 101, - 102, nil, nil, 229, nil, nil, nil, nil, nil, nil, - 45, nil, nil, 104, 103, 105, 94, 56, 96, 95, - 97, nil, 98, 106, 107, nil, 92, 93, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 222, nil, nil, 228, nil, nil, 58, 59, nil, nil, - 60, nil, 729, nil, nil, nil, 44, nil, nil, nil, - nil, nil, nil, nil, nil, 227, nil, nil, nil, nil, - 91, 81, 84, 85, nil, 86, 88, 87, 89, nil, - nil, nil, nil, 82, 90, nil, 74, 75, 71, nil, - 57, 62, nil, 83, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 307, 308, 72, 73, nil, nil, - nil, nil, nil, 303, 304, 310, 100, 99, 101, 102, - nil, nil, 229, nil, nil, nil, nil, nil, nil, 45, - nil, nil, 104, 103, 105, 94, 56, 96, 95, 97, - nil, 98, 106, 107, nil, 92, 93, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 222, - nil, nil, 228, nil, nil, 58, 59, nil, nil, 60, - nil, nil, nil, nil, nil, 44, nil, nil, nil, nil, - nil, nil, nil, nil, 227, nil, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, 74, 75, 71, nil, 57, - 62, nil, 83, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 307, 308, 72, 73, nil, nil, nil, - nil, nil, 303, 304, 310, 100, 99, 101, 102, nil, - nil, 229, nil, nil, nil, nil, nil, nil, 45, nil, - nil, 104, 103, 105, 94, 56, 96, 95, 97, 282, - 98, 106, 107, nil, 92, 93, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 222, nil, - nil, 228, nil, nil, 58, 59, nil, nil, 60, nil, - 626, nil, 278, nil, 44, nil, nil, 283, nil, nil, - nil, nil, nil, 227, nil, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, 74, 75, 71, nil, 57, 62, - nil, 83, 63, 64, nil, nil, nil, 67, nil, 65, - 66, 68, 307, 308, 72, 73, nil, nil, nil, nil, - nil, 303, 304, 310, 100, 99, 101, 102, nil, nil, - 229, nil, nil, nil, nil, nil, nil, 45, nil, nil, - 104, 103, 105, 94, 56, 96, 95, 97, 282, 98, - 106, 107, nil, 92, 93, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 222, nil, nil, - 228, nil, nil, 58, 59, nil, nil, 60, nil, nil, - nil, 278, nil, 44, nil, nil, 283, nil, nil, nil, - nil, nil, 227, nil, nil, nil, nil, 91, 81, 84, - 85, nil, 86, 88, 87, 89, nil, nil, nil, nil, - 82, 90, nil, 74, 75, 71, nil, 57, 62, nil, - 83, 63, 64, nil, nil, nil, 67, nil, 65, 66, - 68, 30, 31, 72, 73, nil, nil, nil, nil, nil, - 29, 28, 27, 100, 99, 101, 102, nil, nil, 229, - nil, nil, nil, nil, nil, nil, 45, nil, nil, 104, - 103, 105, 94, 56, 96, 95, 97, nil, 98, 106, - 107, nil, 92, 93, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 222, nil, nil, 228, - nil, nil, 58, 59, nil, nil, 60, nil, nil, nil, - nil, nil, 44, nil, nil, nil, nil, nil, nil, nil, - nil, 227, nil, nil, nil, nil, 91, 81, 84, 85, - nil, 86, 88, 87, 89, nil, nil, nil, nil, 82, - 90, nil, 74, 75, 71, nil, 57, 62, nil, 83, - 63, 64, nil, nil, nil, 67, nil, 65, 66, 68, - 30, 31, 72, 73, nil, nil, nil, nil, nil, 29, - 28, 27, 100, 99, 101, 102, nil, nil, 229, nil, - nil, nil, nil, nil, nil, 45, nil, nil, 104, 103, - 105, 94, 56, 96, 95, 97, nil, 98, 106, 107, - nil, 92, 93, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 222, nil, nil, 228, nil, - nil, 58, 59, nil, nil, 60, nil, nil, nil, nil, - nil, 44, nil, nil, nil, nil, nil, nil, nil, nil, - 227, nil, nil, nil, nil, 91, 81, 84, 85, nil, - 86, 88, 87, 89, nil, nil, nil, nil, 82, 90, - nil, 74, 75, 71, nil, 57, 62, nil, 83, 63, - 64, nil, nil, nil, 67, nil, 65, 66, 68, 30, - 31, 72, 73, nil, nil, nil, nil, nil, 29, 28, - 27, 100, 99, 101, 102, nil, nil, 229, nil, nil, - nil, nil, nil, nil, 45, nil, nil, 104, 103, 105, - 94, 56, 96, 95, 97, nil, 98, 106, 107, nil, - 92, 93, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 222, nil, nil, 228, nil, nil, - 58, 59, nil, nil, 60, nil, nil, nil, nil, nil, - 44, nil, nil, nil, nil, nil, nil, nil, nil, 227, - nil, nil, nil, nil, 91, 81, 84, 85, nil, 86, - 88, 87, 89, nil, nil, nil, nil, 82, 90, nil, - 74, 75, 71, nil, 57, 62, nil, 83, 63, 64, - nil, nil, nil, 67, nil, 65, 66, 68, 30, 31, - 72, 73, nil, nil, nil, nil, nil, 29, 28, 27, - 100, 99, 101, 102, nil, nil, 229, nil, nil, nil, - nil, nil, nil, 45, nil, nil, 104, 103, 105, 94, - 56, 96, 95, 97, nil, 98, 106, 107, nil, 92, - 93, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 222, nil, nil, 228, nil, nil, 58, - 59, nil, nil, 60, nil, nil, nil, nil, nil, 44, - nil, nil, nil, nil, nil, nil, nil, nil, 227, nil, - nil, nil, nil, 91, 81, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, nil, 74, - 75, 71, nil, 57, 62, nil, 83, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 100, - 99, 101, 102, nil, nil, 229, nil, nil, nil, nil, - nil, nil, 45, nil, nil, 104, 103, 105, 94, 56, - 96, 95, 97, nil, 98, 106, 107, nil, 92, 93, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 222, nil, nil, 228, nil, nil, 58, 59, - nil, nil, 60, nil, nil, nil, nil, nil, 44, nil, - nil, nil, nil, nil, nil, nil, nil, 227, nil, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, 74, 75, - 71, nil, 57, 62, nil, 83, 63, 64, nil, nil, - nil, 67, nil, 65, 66, 68, 307, 308, 72, 73, - nil, nil, nil, nil, nil, 303, 304, 310, 100, 99, - 101, 102, nil, nil, 229, nil, nil, nil, nil, nil, - nil, 45, nil, nil, 104, 103, 105, 94, 56, 96, - 95, 97, nil, 98, 106, 107, nil, 92, 93, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 222, nil, nil, 228, nil, nil, 58, 59, nil, - nil, 60, nil, nil, nil, nil, nil, 44, nil, nil, - nil, nil, nil, nil, nil, nil, 227, nil, nil, nil, - nil, 91, 81, 84, 85, nil, 86, 88, 87, 89, - nil, nil, nil, nil, 82, 90, nil, 74, 75, 71, - nil, 57, 62, nil, 83, 63, 64, nil, nil, nil, - 67, nil, 65, 66, 68, 307, 308, 72, 73, nil, - nil, nil, nil, nil, 303, 304, 310, 100, 99, 101, - 102, nil, nil, 229, nil, nil, nil, nil, nil, nil, - 45, nil, nil, 104, 103, 105, 94, 56, 96, 95, - 97, nil, 98, 106, 107, nil, 92, 93, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 222, nil, nil, 228, nil, nil, 58, 59, nil, nil, - 60, nil, nil, nil, nil, nil, 44, nil, nil, nil, - nil, nil, nil, nil, nil, 227, nil, nil, nil, nil, - 91, 81, 84, 85, nil, 86, 88, 87, 89, nil, - nil, nil, nil, 82, 90, nil, 74, 75, 71, nil, - 57, 62, nil, 83, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 307, 308, 72, 73, nil, nil, - nil, nil, nil, 303, 304, 310, 100, 99, 101, 102, - nil, nil, 229, nil, nil, nil, nil, nil, nil, 305, - nil, nil, 104, 103, 105, 94, 56, 96, 95, 97, - nil, 98, 106, 107, nil, 92, 93, nil, nil, 311, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 301, - nil, nil, 297, nil, nil, 58, 59, nil, nil, 60, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, 74, 75, 71, nil, 57, - 62, nil, 83, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 307, 308, 72, 73, nil, nil, nil, - nil, nil, 303, 304, 310, 100, 99, 101, 102, nil, - nil, 229, nil, nil, nil, nil, nil, nil, 305, nil, - nil, 104, 103, 105, 94, 56, 96, 95, 97, nil, - 98, 106, 107, nil, 92, 93, nil, nil, 311, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 301, nil, - nil, 297, nil, nil, 58, 59, nil, nil, 60, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, 74, 75, 71, nil, 57, 62, - nil, 83, 63, 64, nil, nil, nil, 67, nil, 65, - 66, 68, 307, 308, 72, 73, nil, nil, nil, nil, - nil, 303, 304, 310, 100, 99, 101, 102, nil, nil, - 229, nil, nil, nil, nil, nil, nil, 45, nil, nil, - 104, 103, 105, 94, 56, 96, 95, 97, nil, 98, - 106, 107, nil, 92, 93, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 222, nil, nil, - 228, nil, nil, 58, 59, nil, nil, 60, nil, 402, - nil, nil, nil, 44, nil, nil, nil, nil, nil, nil, - nil, nil, 227, nil, nil, nil, nil, 91, 81, 84, - 85, nil, 86, 88, 87, 89, nil, nil, nil, nil, - 82, 90, nil, 74, 75, 71, nil, 57, 62, nil, - 83, 63, 64, nil, nil, nil, 67, nil, 65, 66, - 68, 307, 308, 72, 73, nil, nil, nil, nil, nil, - 303, 304, 310, 100, 99, 101, 102, nil, nil, 229, - nil, nil, nil, nil, nil, nil, 45, nil, nil, 104, - 103, 105, 94, 56, 96, 95, 97, nil, 98, 106, - 107, nil, 92, 93, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 222, nil, nil, 228, - nil, nil, 58, 59, nil, nil, 60, nil, nil, nil, - nil, nil, 44, nil, nil, nil, nil, nil, nil, nil, - nil, 227, nil, nil, nil, nil, 91, 81, 84, 85, - nil, 86, 88, 87, 89, nil, nil, nil, nil, 82, - 90, nil, 74, 75, 71, nil, 57, 62, nil, 83, - 63, 64, nil, nil, nil, 67, nil, 65, 66, 68, - 30, 31, 72, 73, nil, nil, nil, nil, nil, 29, - 28, 27, 100, 99, 101, 102, nil, nil, 19, nil, - nil, nil, nil, nil, nil, 45, nil, nil, 104, 103, - 105, 94, 56, 96, 95, 97, nil, 98, 106, 107, - nil, 92, 93, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 222, nil, nil, 228, nil, - nil, 58, 59, nil, nil, 60, nil, nil, nil, nil, - nil, 44, nil, nil, nil, nil, nil, nil, nil, nil, - 20, nil, nil, nil, nil, 91, 81, 84, 85, nil, - 86, 88, 87, 89, nil, nil, nil, nil, 82, 90, - nil, 74, 75, 71, nil, 57, 62, nil, 83, 63, - 64, nil, nil, nil, 67, nil, 65, 66, 68, 30, - 31, 72, 73, nil, nil, nil, nil, nil, 29, 28, - 27, 100, 99, 101, 102, nil, nil, 19, nil, nil, - nil, nil, nil, nil, 45, nil, nil, 104, 103, 105, - 94, 56, 96, 95, 97, nil, 98, 106, 107, nil, - 92, 93, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 222, nil, nil, 228, nil, nil, - 58, 59, nil, nil, 60, nil, nil, nil, nil, nil, - 44, nil, nil, nil, nil, nil, nil, nil, nil, 20, - nil, nil, nil, nil, 91, 81, 84, 85, nil, 86, - 88, 87, 89, nil, nil, nil, nil, 82, 90, nil, - 74, 75, 71, nil, 57, 62, nil, 83, 63, 64, - nil, nil, nil, 67, nil, 65, 66, 68, 307, 308, - 72, 73, nil, nil, nil, nil, nil, 303, 304, 310, - 100, 99, 101, 102, nil, nil, 229, nil, nil, nil, - nil, nil, nil, 45, nil, nil, 104, 103, 105, 94, - 56, 96, 95, 97, nil, 98, 106, 107, nil, 92, - 93, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 222, nil, nil, 228, nil, nil, 58, - 59, nil, nil, 60, nil, nil, nil, nil, nil, 44, - nil, nil, nil, nil, nil, nil, nil, nil, 227, nil, - nil, nil, nil, 91, 81, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, nil, 74, - 75, 71, nil, 57, 62, nil, 83, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 100, - 99, 101, 102, nil, nil, 229, nil, nil, nil, nil, - nil, nil, 45, nil, nil, 104, 103, 105, 94, 56, - 96, 95, 97, nil, 98, 106, 107, nil, 92, 93, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 222, nil, nil, 228, nil, nil, 58, 59, - nil, nil, 60, nil, nil, nil, nil, nil, 44, nil, - nil, nil, nil, nil, nil, nil, nil, 227, nil, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, 74, 75, - 71, nil, 57, 62, nil, 83, 63, 64, nil, nil, - nil, 67, nil, 65, 66, 68, 307, 308, 72, 73, - nil, nil, nil, nil, nil, 303, 304, 310, 100, 99, - 101, 102, nil, nil, 229, nil, nil, nil, nil, nil, - nil, 45, nil, nil, 104, 103, 105, 94, 56, 96, - 95, 97, nil, 98, 106, 107, nil, 92, 93, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 222, nil, nil, 228, nil, nil, 58, 59, nil, - nil, 60, nil, nil, nil, nil, nil, 44, nil, nil, - nil, nil, nil, nil, nil, nil, 227, nil, nil, nil, - nil, 91, 81, 84, 85, nil, 86, 88, 87, 89, - nil, nil, nil, nil, 82, 90, nil, 74, 75, 71, - nil, 57, 62, nil, 83, 63, 64, nil, nil, nil, - 67, nil, 65, 66, 68, 307, 308, 72, 73, nil, - nil, nil, nil, nil, 303, 304, 310, 100, 99, 101, - 102, nil, nil, 229, nil, nil, nil, nil, nil, nil, - 45, nil, nil, 104, 103, 105, 94, 56, 96, 95, - 97, nil, 98, 106, 107, nil, 92, 93, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 222, nil, nil, 228, nil, nil, 58, 59, nil, nil, - 60, nil, nil, nil, nil, nil, 44, nil, nil, nil, - nil, nil, nil, nil, nil, 227, nil, nil, nil, nil, - 91, 81, 84, 85, nil, 86, 88, 87, 89, nil, - nil, nil, nil, 82, 90, nil, 74, 75, 71, nil, - 57, 62, nil, 83, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 307, 308, 72, 73, nil, nil, - nil, nil, nil, 303, 304, 310, 100, 99, 101, 102, - nil, nil, 229, nil, nil, nil, nil, nil, nil, 45, - nil, nil, 104, 103, 105, 94, 56, 96, 95, 97, - nil, 98, 106, 107, nil, 92, 93, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 222, - nil, nil, 228, nil, nil, 58, 59, nil, nil, 60, - nil, nil, nil, nil, nil, 44, nil, nil, nil, nil, - nil, nil, nil, nil, 227, nil, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, 74, 75, 71, nil, 57, - 62, nil, 83, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 307, 308, 72, 73, nil, nil, nil, - nil, nil, 303, 304, 310, 100, 99, 101, 102, nil, - nil, 229, nil, nil, nil, nil, nil, nil, 45, nil, - nil, 104, 103, 105, 94, 56, 96, 95, 97, nil, - 98, 106, 107, nil, 92, 93, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 222, nil, - nil, 228, nil, nil, 58, 59, nil, nil, 60, nil, - nil, nil, nil, nil, 44, nil, nil, nil, nil, nil, - nil, nil, nil, 227, nil, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, 74, 75, 71, nil, 57, 62, - nil, 83, 63, 64, nil, nil, nil, 67, nil, 65, - 66, 68, 307, 308, 72, 73, nil, nil, nil, nil, - nil, 303, 304, 310, 100, 99, 101, 102, nil, nil, - 229, nil, nil, nil, nil, nil, nil, 45, nil, nil, - 104, 103, 105, 94, 56, 96, 95, 97, nil, 98, - 106, 107, nil, 92, 93, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 222, nil, nil, - 228, nil, nil, 58, 59, nil, nil, 60, nil, nil, - nil, nil, nil, 44, nil, nil, nil, nil, nil, nil, - nil, nil, 227, nil, nil, nil, nil, 91, 81, 84, - 85, nil, 86, 88, 87, 89, nil, nil, nil, nil, - 82, 90, nil, 74, 75, 71, nil, 57, 62, nil, - 83, 63, 64, nil, nil, nil, 67, nil, 65, 66, - 68, 307, 308, 72, 73, nil, nil, nil, nil, nil, - 303, 304, 310, 100, 99, 101, 102, nil, nil, 229, - nil, nil, nil, nil, nil, nil, 305, nil, nil, 104, - 103, 105, 94, 56, 96, 95, 97, nil, 98, 106, - 107, nil, 92, 93, nil, nil, 311, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 854, nil, nil, 228, - nil, nil, 58, 59, nil, nil, 60, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 91, 81, 84, 85, - nil, 86, 88, 87, 89, nil, nil, nil, nil, 82, - 90, nil, 74, 75, 71, nil, 57, 62, nil, 83, - 63, 64, nil, nil, nil, 67, nil, 65, 66, 68, - 307, 308, 72, 73, nil, nil, nil, nil, nil, 303, - 304, 310, 100, 99, 101, 102, nil, nil, 229, nil, - nil, nil, nil, nil, nil, 45, nil, nil, 104, 103, - 105, 94, 56, 96, 95, 97, nil, 98, 106, 107, - nil, 92, 93, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 222, nil, nil, 228, nil, - nil, 58, 59, nil, nil, 60, nil, nil, nil, nil, - nil, 44, nil, nil, nil, nil, nil, nil, nil, nil, - 227, nil, nil, nil, nil, 91, 81, 84, 85, nil, - 86, 88, 87, 89, nil, nil, nil, nil, 82, 90, - nil, 74, 75, 71, nil, 57, 62, nil, 83, 63, - 64, nil, nil, nil, 67, nil, 65, 66, 68, 30, - 31, 72, 73, nil, nil, nil, nil, nil, 29, 28, - 27, 100, 99, 101, 102, nil, nil, 19, nil, nil, - nil, nil, nil, nil, 45, nil, nil, 104, 103, 105, - 94, 56, 96, 95, 97, nil, 98, 106, 107, nil, - 92, 93, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 222, nil, nil, 228, nil, nil, - 58, 59, nil, nil, 60, nil, nil, nil, nil, nil, - 44, nil, nil, nil, nil, nil, nil, nil, nil, 20, - nil, nil, nil, nil, 91, 81, 84, 85, nil, 86, - 88, 87, 89, nil, nil, nil, nil, 82, 90, nil, - 74, 75, 71, nil, 57, 62, nil, 83, 63, 64, - nil, nil, nil, 67, nil, 65, 66, 68, 307, 308, - 72, 73, nil, nil, nil, nil, nil, 303, 304, 310, - 100, 99, 101, 102, nil, nil, 229, nil, nil, nil, - nil, nil, nil, 45, nil, nil, 104, 103, 105, 94, - 56, 96, 95, 97, nil, 98, 106, 107, nil, 92, - 93, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 222, nil, nil, 228, nil, nil, 58, - 59, nil, nil, 60, nil, 626, nil, nil, nil, 44, - nil, nil, nil, nil, nil, nil, nil, nil, 227, nil, - nil, nil, nil, 91, 81, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, nil, 74, - 75, 71, nil, 57, 62, nil, 83, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 307, 308, 72, - 73, nil, nil, nil, nil, nil, 303, 304, 310, 100, - 99, 101, 102, nil, nil, 229, nil, nil, nil, nil, - nil, nil, 45, nil, nil, 104, 103, 105, 94, 56, - 96, 95, 97, 282, 98, 106, 107, nil, 92, 93, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 222, nil, nil, 228, nil, nil, 58, 59, - nil, nil, 60, nil, nil, nil, 278, nil, 44, nil, - nil, 283, nil, nil, nil, nil, nil, 227, nil, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, 74, 75, - 71, nil, 57, 62, nil, 83, 63, 64, nil, nil, - nil, 67, nil, 65, 66, 68, 307, 308, 72, 73, - nil, nil, nil, nil, nil, 303, 304, 310, 100, 99, - 101, 102, nil, nil, 229, nil, nil, nil, nil, nil, - nil, 45, nil, nil, 104, 103, 105, 94, 56, 96, - 95, 97, nil, 98, 106, 107, nil, 92, 93, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 222, nil, nil, 228, nil, nil, 58, 59, nil, - nil, 60, nil, nil, nil, nil, nil, 44, nil, nil, - nil, nil, nil, nil, nil, nil, 227, nil, nil, nil, - nil, 91, 81, 84, 85, nil, 86, 88, 87, 89, - nil, nil, nil, nil, 82, 90, nil, 74, 75, 71, - nil, 57, 62, nil, 83, 63, 64, nil, nil, nil, - 67, nil, 65, 66, 68, 307, 308, 72, 73, nil, - nil, nil, nil, nil, 303, 304, 310, 100, 99, 101, - 102, nil, nil, 229, nil, nil, nil, nil, nil, nil, - 305, nil, nil, 104, 103, 105, 94, 56, 96, 95, - 97, nil, 98, 106, 107, nil, 92, 93, nil, nil, - 311, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 854, nil, nil, 228, nil, nil, 58, 59, nil, nil, - 60, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 91, 81, 84, 85, nil, 86, 88, 87, 89, nil, - nil, nil, nil, 82, 90, nil, 74, 75, 71, nil, - 57, 62, nil, 83, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 307, 308, 72, 73, nil, nil, - nil, nil, nil, 303, 304, 310, 100, 99, 101, 102, - nil, nil, 229, nil, nil, nil, nil, nil, nil, 305, - nil, nil, 104, 103, 105, 94, 56, 96, 95, 97, - nil, 98, 106, 107, nil, 92, 93, nil, nil, 311, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 925, - nil, nil, 228, nil, nil, 58, 59, nil, nil, 60, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, 74, 75, 71, nil, 57, - 62, nil, 83, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 30, 31, 72, 73, nil, nil, nil, - nil, nil, 29, 28, 27, 100, 99, 101, 102, nil, - nil, 229, nil, nil, nil, nil, nil, nil, 45, nil, - nil, 104, 103, 105, 94, 56, 96, 95, 97, 282, - 98, 106, 107, nil, 92, 93, 42, 43, 41, 237, - 241, 246, 247, 248, 243, 245, 253, 254, 249, 250, - nil, 230, 231, nil, nil, 251, 252, nil, 222, nil, - nil, 228, nil, nil, 58, 59, nil, nil, 60, nil, - 280, 234, 278, 240, 44, 236, 235, 283, 232, 233, - 244, 242, 238, 227, 239, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, 255, -413, nil, nil, nil, 62, - nil, 83, -413, -413, -413, nil, nil, -413, -413, -413, - nil, -413, nil, nil, nil, nil, nil, nil, nil, nil, - -413, -413, -413, nil, nil, nil, nil, nil, nil, nil, - nil, -413, -413, nil, -413, -413, -413, -413, -413, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, -413, -413, -413, -413, -413, -413, -413, -413, -413, - -413, -413, -413, -413, -413, nil, nil, -413, -413, -413, - nil, nil, -413, nil, 262, -413, nil, nil, -413, -413, - nil, -413, nil, -413, nil, -413, nil, -413, -413, nil, - -413, -413, -413, -413, -413, -296, -413, -413, -413, nil, - nil, nil, -296, -296, -296, nil, nil, -296, -296, -296, - nil, -296, -413, nil, nil, -413, -413, nil, -413, nil, - -413, -296, -296, nil, nil, nil, nil, nil, nil, nil, - nil, -296, -296, nil, -296, -296, -296, -296, -296, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, nil, nil, -296, -296, -296, - nil, nil, -296, nil, 271, -296, nil, nil, -296, -296, - nil, -296, nil, -296, nil, -296, nil, -296, -296, nil, - -296, -296, -296, -296, -296, nil, -296, -246, -296, nil, - nil, nil, nil, nil, -246, -246, -246, nil, nil, -246, - -246, -246, -296, -246, nil, -296, -296, nil, -296, nil, - -296, nil, -246, -246, -246, nil, nil, nil, nil, nil, - nil, nil, nil, -246, -246, nil, -246, -246, -246, -246, - -246, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, -246, -246, -246, -246, -246, -246, -246, - -246, -246, -246, -246, -246, -246, -246, nil, nil, -246, - -246, -246, nil, nil, -246, nil, 262, -246, nil, nil, - -246, -246, nil, -246, nil, -246, nil, -246, nil, -246, - -246, nil, -246, -246, -246, -246, -246, nil, -246, -246, - -246, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, -246, nil, -246, -246, -246, nil, - -246, nil, -246, -246, -246, -246, nil, nil, -246, -246, - -246, 761, -246, 666, 665, 664, 762, 667, nil, nil, - nil, -246, -246, nil, nil, nil, 675, nil, nil, nil, - nil, nil, -246, -246, nil, -246, -246, -246, -246, -246, - nil, nil, nil, nil, nil, nil, nil, nil, 671, nil, - 669, nil, 666, 665, 664, 673, 667, 680, 679, 683, - 682, nil, nil, nil, 676, 675, nil, nil, nil, nil, - nil, nil, nil, -246, nil, nil, nil, nil, nil, nil, - -246, nil, nil, nil, nil, 262, -246, 671, 655, nil, - 217, nil, nil, nil, nil, nil, 680, 679, 683, 682, - nil, nil, nil, 676, nil, nil, nil, nil, -246, -246, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, -246, nil, nil, -246, nil, nil, nil, - nil, -246, 172, 183, 173, 196, 169, 189, 179, 178, - 199, 200, 194, 177, 176, 171, 197, 201, 202, 181, - 170, 184, 188, 190, 182, 175, nil, nil, nil, 191, - 198, 193, 192, 185, 195, 180, 168, 187, 186, nil, - nil, nil, nil, nil, 167, 174, 165, 166, 162, 163, - 164, 123, 125, 122, nil, 124, nil, nil, nil, nil, - nil, nil, nil, 156, 157, nil, 153, 135, 136, 137, - 144, 141, 143, nil, nil, 138, 139, nil, nil, nil, - 158, 159, 145, 146, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 150, 149, nil, - 134, 155, 152, 151, 160, 147, 148, 142, 140, 132, - 154, 133, nil, nil, 161, 91, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 90, - 172, 183, 173, 196, 169, 189, 179, 178, 199, 200, - 194, 177, 176, 171, 197, 201, 202, 181, 170, 184, - 188, 190, 182, 175, nil, nil, nil, 191, 198, 193, - 192, 185, 195, 180, 168, 187, 186, nil, nil, nil, - nil, nil, 167, 174, 165, 166, 162, 163, 164, 123, - 125, nil, nil, 124, nil, nil, nil, nil, nil, nil, - nil, 156, 157, nil, 153, 135, 136, 137, 144, 141, - 143, nil, nil, 138, 139, nil, nil, nil, 158, 159, - 145, 146, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 150, 149, nil, 134, 155, - 152, 151, 160, 147, 148, 142, 140, 132, 154, 133, - nil, nil, 161, 91, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 90, 172, 183, - 173, 196, 169, 189, 179, 178, 199, 200, 194, 177, - 176, 171, 197, 201, 202, 181, 170, 184, 188, 190, - 182, 175, nil, nil, nil, 191, 198, 193, 192, 185, - 195, 180, 168, 187, 186, nil, nil, nil, nil, nil, - 167, 174, 165, 166, 162, 163, 164, 123, 125, nil, - nil, 124, nil, nil, nil, nil, nil, nil, nil, 156, - 157, nil, 153, 135, 136, 137, 144, 141, 143, nil, - nil, 138, 139, nil, nil, nil, 158, 159, 145, 146, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 150, 149, nil, 134, 155, 152, 151, - 160, 147, 148, 142, 140, 132, 154, 133, nil, nil, - 161, 91, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 90, 172, 183, 173, 196, - 169, 189, 179, 178, 199, 200, 194, 177, 176, 171, - 197, 201, 202, 181, 170, 184, 188, 190, 182, 175, - nil, nil, nil, 191, 198, 193, 192, 185, 195, 180, - 168, 187, 186, nil, nil, nil, nil, nil, 167, 174, - 165, 166, 162, 163, 164, 123, 125, nil, nil, 124, - nil, nil, nil, nil, nil, nil, nil, 156, 157, nil, - 153, 135, 136, 137, 144, 141, 143, nil, nil, 138, - 139, nil, nil, nil, 158, 159, 145, 146, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 150, 149, nil, 134, 155, 152, 151, 160, 147, - 148, 142, 140, 132, 154, 133, nil, nil, 161, 91, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 90, 172, 183, 173, 196, 169, 189, - 179, 178, 199, 200, 194, 177, 176, 171, 197, 201, - 202, 181, 170, 184, 188, 190, 182, 175, nil, nil, - nil, 191, 198, 193, 369, 368, 370, 367, 168, 187, - 186, nil, nil, nil, nil, nil, 167, 174, 165, 166, - 364, 365, 366, 362, 125, 96, 95, 363, nil, 98, - nil, nil, nil, nil, nil, 156, 157, nil, 153, 135, - 136, 137, 144, 141, 143, nil, nil, 138, 139, nil, - nil, nil, 158, 159, 145, 146, nil, nil, nil, nil, - nil, 374, nil, nil, nil, nil, nil, nil, nil, 150, - 149, nil, 134, 155, 152, 151, 160, 147, 148, 142, - 140, 132, 154, 133, nil, nil, 161, 172, 183, 173, - 196, 169, 189, 179, 178, 199, 200, 194, 177, 176, - 171, 197, 201, 202, 181, 170, 184, 188, 190, 182, - 175, nil, nil, nil, 191, 198, 193, 192, 185, 195, - 180, 168, 187, 186, nil, nil, nil, nil, nil, 167, - 174, 165, 166, 162, 163, 164, 123, 125, nil, nil, - 124, nil, nil, nil, nil, nil, nil, nil, 156, 157, - nil, 153, 135, 136, 137, 144, 141, 143, nil, nil, - 138, 139, nil, nil, nil, 158, 159, 145, 146, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 150, 149, nil, 134, 155, 152, 151, 160, - 147, 148, 142, 140, 132, 154, 133, nil, nil, 161, - 237, 241, 246, 247, 248, 243, 245, 253, 254, 249, - 250, nil, 230, 231, nil, nil, 251, 252, nil, nil, - nil, nil, nil, 669, nil, 666, 665, 664, 673, 667, - nil, nil, 234, nil, 240, nil, 236, 235, 675, 232, - 233, 244, 242, 238, nil, 239, 237, 241, 246, 247, - 248, 243, 245, 253, 254, 249, 250, nil, 230, 231, - 671, 711, 251, 252, nil, 255, nil, nil, nil, 680, - 679, 683, 682, nil, nil, nil, 676, nil, 234, nil, - 240, nil, 236, 235, nil, 232, 233, 244, 242, 238, - nil, 239, 237, 241, 246, 247, 248, 243, 245, 253, - 254, 249, 250, nil, 230, 231, nil, nil, 251, 252, - nil, 255, 669, nil, 666, 665, 664, 673, 667, nil, - nil, nil, nil, nil, 234, nil, 240, 675, 236, 235, - nil, 232, 233, 244, 242, 238, nil, 239, 237, 241, - 246, 247, 248, 243, 245, 253, 254, 249, 250, 671, - 230, 231, nil, nil, 251, 252, nil, 255, 680, 679, - 683, 682, nil, nil, nil, 676, nil, nil, nil, nil, - 234, nil, 240, nil, 236, 235, nil, 232, 233, 244, - 242, 238, nil, 239, 237, 241, 246, 247, 248, 243, - 245, 253, 254, 249, 250, nil, 230, 231, nil, nil, - 251, 252, nil, 255, 669, nil, 666, 665, 664, 673, - 667, nil, nil, nil, nil, nil, 234, nil, 240, 675, - 236, 235, nil, 232, 233, 244, 242, 238, nil, 239, - 237, 241, 246, 247, 248, 243, 245, 253, 254, 249, - 250, 671, 230, 231, nil, nil, 251, 252, nil, 255, - 680, 679, 683, 682, nil, nil, nil, 676, nil, nil, - nil, nil, 234, nil, 240, nil, 236, 235, nil, 232, - 233, 244, 242, 238, nil, 239, 237, 241, 246, 247, - 248, 243, 245, 253, 254, 249, 250, nil, 230, 231, - nil, nil, 251, 252, nil, 255, 669, nil, 666, 665, - 664, 673, 667, nil, nil, nil, nil, nil, 234, nil, - 240, 675, 236, 235, nil, 232, 233, 244, 242, 238, - nil, 239, 237, 241, 246, 247, 248, 243, 245, 253, - 254, 249, 250, 671, 230, 231, nil, nil, 251, 252, - nil, 255, 680, 679, 683, 682, nil, nil, nil, 676, - nil, nil, nil, nil, 234, nil, 240, nil, 236, 235, - nil, 232, 233, 244, 242, 238, nil, 239, 237, 241, - 246, 247, 248, 243, 245, 253, 254, 249, 250, nil, - 230, 231, nil, nil, 251, 252, nil, 255, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 234, nil, 240, nil, 236, 235, nil, 232, 233, 244, - 242, 238, nil, 239, nil, nil, nil, nil, nil, 410, - 414, nil, nil, 411, nil, nil, nil, nil, nil, nil, - nil, 156, 157, 255, 153, 135, 136, 137, 144, 141, - 143, nil, nil, 138, 139, nil, nil, nil, 158, 159, - 145, 146, nil, nil, nil, nil, nil, 262, nil, nil, - nil, nil, nil, nil, nil, 150, 149, nil, 134, 155, - 152, 151, 160, 147, 148, 142, 140, 132, 154, 133, - 417, 421, 161, nil, 416, nil, nil, nil, nil, nil, - nil, nil, 156, 157, nil, 153, 135, 136, 137, 144, - 141, 143, nil, nil, 138, 139, nil, nil, nil, 158, - 159, 145, 146, nil, nil, nil, nil, nil, 262, nil, - nil, nil, nil, nil, nil, nil, 150, 149, nil, 134, - 155, 152, 151, 160, 147, 148, 142, 140, 132, 154, - 133, 472, 414, 161, nil, 473, nil, nil, nil, nil, - nil, nil, nil, 156, 157, nil, 153, 135, 136, 137, - 144, 141, 143, nil, nil, 138, 139, nil, nil, nil, - 158, 159, 145, 146, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 150, 149, nil, - 134, 155, 152, 151, 160, 147, 148, 142, 140, 132, - 154, 133, 605, 414, 161, nil, 606, nil, nil, nil, - nil, nil, nil, nil, 156, 157, nil, 153, 135, 136, - 137, 144, 141, 143, nil, nil, 138, 139, nil, nil, - nil, 158, 159, 145, 146, nil, nil, nil, nil, nil, - 262, nil, nil, nil, nil, nil, nil, nil, 150, 149, - nil, 134, 155, 152, 151, 160, 147, 148, 142, 140, - 132, 154, 133, 607, 421, 161, nil, 608, nil, nil, - nil, nil, nil, nil, nil, 156, 157, nil, 153, 135, - 136, 137, 144, 141, 143, nil, nil, 138, 139, nil, - nil, nil, 158, 159, 145, 146, nil, nil, nil, nil, - nil, 262, nil, nil, nil, nil, nil, nil, nil, 150, - 149, nil, 134, 155, 152, 151, 160, 147, 148, 142, - 140, 132, 154, 133, 636, 414, 161, nil, 637, nil, - nil, nil, nil, nil, nil, nil, 156, 157, nil, 153, - 135, 136, 137, 144, 141, 143, nil, nil, 138, 139, - nil, nil, nil, 158, 159, 145, 146, nil, nil, nil, - nil, nil, 262, nil, nil, nil, nil, nil, nil, nil, - 150, 149, nil, 134, 155, 152, 151, 160, 147, 148, - 142, 140, 132, 154, 133, 639, 421, 161, nil, 640, - nil, nil, nil, nil, nil, nil, nil, 156, 157, nil, - 153, 135, 136, 137, 144, 141, 143, nil, nil, 138, - 139, nil, nil, nil, 158, 159, 145, 146, nil, nil, - nil, nil, nil, 262, nil, nil, nil, nil, nil, nil, - nil, 150, 149, nil, 134, 155, 152, 151, 160, 147, - 148, 142, 140, 132, 154, 133, 605, 414, 161, nil, - 606, nil, nil, nil, nil, nil, nil, nil, 156, 157, - nil, 153, 135, 136, 137, 144, 141, 143, nil, nil, - 138, 139, nil, nil, nil, 158, 159, 145, 146, nil, - nil, nil, nil, nil, 262, nil, nil, nil, nil, nil, - nil, nil, 150, 149, nil, 134, 155, 152, 151, 160, - 147, 148, 142, 140, 132, 154, 133, 607, 421, 161, - nil, 608, nil, nil, nil, nil, nil, nil, nil, 156, - 157, nil, 153, 135, 136, 137, 144, 141, 143, nil, - nil, 138, 139, nil, nil, nil, 158, 159, 145, 146, - nil, nil, nil, nil, nil, 262, nil, nil, nil, nil, - nil, nil, nil, 150, 149, nil, 134, 155, 152, 151, - 160, 147, 148, 142, 140, 132, 154, 133, 696, 414, - 161, nil, 697, nil, nil, nil, nil, nil, nil, nil, - 156, 157, nil, 153, 135, 136, 137, 144, 141, 143, - nil, nil, 138, 139, nil, nil, nil, 158, 159, 145, - 146, nil, nil, nil, nil, nil, 262, nil, nil, nil, - nil, nil, nil, nil, 150, 149, nil, 134, 155, 152, - 151, 160, 147, 148, 142, 140, 132, 154, 133, 698, - 421, 161, nil, 699, nil, nil, nil, nil, nil, nil, - nil, 156, 157, nil, 153, 135, 136, 137, 144, 141, - 143, nil, nil, 138, 139, nil, nil, nil, 158, 159, - 145, 146, nil, nil, nil, nil, nil, 262, nil, nil, - nil, nil, nil, nil, nil, 150, 149, nil, 134, 155, - 152, 151, 160, 147, 148, 142, 140, 132, 154, 133, - 701, 421, 161, nil, 702, nil, nil, nil, nil, nil, - nil, nil, 156, 157, nil, 153, 135, 136, 137, 144, - 141, 143, nil, nil, 138, 139, nil, nil, nil, 158, - 159, 145, 146, nil, nil, nil, nil, nil, 262, nil, - nil, nil, nil, nil, nil, nil, 150, 149, nil, 134, - 155, 152, 151, 160, 147, 148, 142, 140, 132, 154, - 133, 472, 414, 161, nil, 473, nil, nil, nil, nil, - nil, nil, nil, 156, 157, nil, 153, 135, 136, 137, - 144, 141, 143, nil, nil, 138, 139, nil, nil, nil, - 158, 159, 145, 146, nil, nil, nil, nil, nil, 262, - nil, nil, nil, nil, nil, nil, nil, 150, 149, nil, - 134, 155, 152, 151, 160, 147, 148, 142, 140, 132, - 154, 133, 968, 421, 161, nil, 967, nil, nil, nil, - nil, nil, nil, nil, 156, 157, nil, 153, 135, 136, - 137, 144, 141, 143, nil, nil, 138, 139, nil, nil, - nil, 158, 159, 145, 146, nil, nil, nil, nil, nil, - 262, nil, nil, nil, nil, nil, nil, nil, 150, 149, - nil, 134, 155, 152, 151, 160, 147, 148, 142, 140, - 132, 154, 133, 994, 414, 161, nil, 995, nil, nil, - nil, nil, nil, nil, nil, 156, 157, nil, 153, 135, - 136, 137, 144, 141, 143, nil, nil, 138, 139, nil, - nil, nil, 158, 159, 145, 146, nil, nil, nil, nil, - nil, 262, nil, nil, nil, nil, nil, nil, nil, 150, - 149, nil, 134, 155, 152, 151, 160, 147, 148, 142, - 140, 132, 154, 133, 996, 421, 161, nil, 997, nil, - nil, nil, nil, nil, nil, nil, 156, 157, nil, 153, - 135, 136, 137, 144, 141, 143, nil, nil, 138, 139, - nil, nil, nil, 158, 159, 145, 146, nil, nil, nil, - nil, nil, 262, nil, nil, nil, nil, nil, nil, nil, - 150, 149, nil, 134, 155, 152, 151, 160, 147, 148, - 142, 140, 132, 154, 133, nil, 669, 161, 666, 665, - 664, 673, 667, 807, nil, 666, 665, 664, 673, 667, - nil, 675, nil, nil, nil, nil, nil, 761, 675, 666, - 665, 664, 762, 667, nil, nil, nil, nil, nil, nil, - nil, nil, 675, 671, nil, nil, nil, nil, nil, nil, - 671, nil, 680, 679, 683, 682, nil, nil, nil, 676, - nil, 683, 682, nil, 671, nil, 676, nil, nil, nil, - nil, nil, nil, 680, 679, 683, 682, nil, nil, 761, - 676, 666, 665, 664, 762, 667, 807, nil, 666, 665, - 664, 762, 667, nil, 675, nil, nil, nil, nil, nil, - 669, 675, 666, 665, 664, 673, 667, nil, nil, nil, - nil, nil, nil, nil, nil, 675, 671, nil, nil, nil, - nil, nil, nil, 671, nil, 680, 679, 683, 682, nil, - nil, nil, 676, nil, 683, 682, nil, 671, 711, 676, - nil, nil, nil, nil, nil, nil, 680, 679, 683, 682, - nil, nil, 669, 676, 666, 665, 664, 673, 667, 807, - nil, 666, 665, 664, 673, 667, 807, 675, 666, 665, - 664, 673, 667, 807, 675, 666, 665, 664, 673, 667, - nil, 675, nil, nil, nil, nil, nil, nil, 675, 671, - nil, nil, nil, nil, nil, nil, 671, nil, 680, 679, - 683, 682, nil, 671, nil, 676, nil, 683, 682, nil, - 671, nil, 676, nil, 683, 682, nil, nil, nil, 676, - nil, 683, 682, nil, nil, 761, 676, 666, 665, 664, - 762, 667, 807, nil, 666, 665, 664, 762, 667, 807, - 675, 666, 665, 664, 762, 667, 807, 675, 666, 665, - 664, 762, 667, 807, 675, 666, 665, 664, 673, 667, - nil, 675, 671, nil, nil, nil, nil, nil, 675, 671, - nil, 680, 679, 683, 682, nil, 671, nil, 676, nil, - 683, 682, nil, 671, nil, 676, nil, 683, 682, nil, - 671, nil, 676, nil, 683, 682, nil, nil, nil, 676, - nil, 683, 682, nil, nil, 807, 676, 666, 665, 664, - 762, 667, nil, nil, nil, nil, nil, nil, nil, nil, - 675, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 671, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 683, 682, nil, nil, nil, 676 ] - -racc_action_check = [ - 94, 0, 0, 0, 0, 0, 0, 94, 94, 94, - 0, 0, 94, 94, 94, 0, 94, 0, 0, 0, - 0, 0, 0, 0, 94, 61, 94, 94, 94, 0, - 0, 0, 0, 0, 0, 0, 94, 94, 0, 94, - 94, 94, 94, 94, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 343, 0, 0, 0, - 357, 0, 0, 0, 0, 0, 94, 94, 94, 94, - 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, - 26, 344, 94, 94, 94, 0, 94, 94, 0, 347, - 94, 0, 0, 94, 94, 0, 94, 0, 94, 617, - 94, 0, 94, 94, 306, 94, 94, 94, 94, 94, - 0, 94, 61, 94, 19, 0, 0, 0, 0, 381, - 0, 0, 0, 0, 545, 1, 654, 94, 0, 0, - 94, 94, 94, 94, 97, 94, 0, 94, 0, 94, - 696, 97, 97, 97, 26, 336, 97, 97, 97, 382, - 97, 7, 337, 697, 3, 19, 694, 58, 97, 3, - 97, 97, 97, 822, 470, 343, 357, 26, 306, 220, - 97, 97, 863, 97, 97, 97, 97, 97, 888, 994, - 995, 1013, 996, 698, 537, 381, 617, 286, 24, 357, - 344, 306, 286, 221, 357, 24, 10, 58, 347, 470, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 97, 97, 97, 97, 12, 382, 97, 97, 97, 362, - 97, 97, 220, 636, 97, 223, 362, 97, 97, 440, - 97, 538, 97, 545, 97, 654, 97, 97, 605, 97, - 97, 97, 97, 97, 416, 97, 221, 97, 698, 696, - 823, 416, 416, 416, 434, 434, 606, 416, 416, 996, - 416, 97, 697, 336, 97, 97, 97, 97, 336, 97, - 337, 97, 822, 97, 694, 337, 699, 694, 223, 694, - 416, 416, 440, 416, 416, 416, 416, 416, 537, 636, - 863, 605, 698, 537, 637, 863, 888, 994, 995, 1013, - 996, 888, 994, 995, 1013, 996, 13, 557, 557, 606, - 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, 416, 416, 561, 561, 416, 416, 416, 636, - 416, 16, 636, 15, 416, 538, 749, 416, 636, 631, - 538, 699, 416, 478, 416, 631, 416, 416, 434, 416, - 416, 416, 416, 416, 823, 416, 417, 416, 22, 823, - 637, 647, 647, 417, 417, 417, 38, 479, 39, 417, - 417, 416, 417, 327, 416, 416, 327, 416, 478, 416, - 15, 417, 618, 416, 351, 699, 15, 363, 328, 749, - 37, 328, 417, 417, 363, 417, 417, 417, 417, 417, - 637, 557, 479, 637, 315, 893, 557, 893, 806, 637, - 806, 806, 806, 38, 806, 39, 376, 618, 561, 38, - 352, 39, 417, 417, 417, 417, 417, 417, 417, 417, - 417, 417, 417, 417, 417, 417, 351, 14, 417, 417, - 417, 572, 417, 351, 14, 40, 417, 45, 351, 417, - 639, 315, 351, 14, 417, 647, 417, 315, 417, 417, - 108, 417, 417, 417, 417, 417, 574, 417, 417, 417, - 410, 351, 352, 340, 331, 17, 17, 331, 340, 352, - 376, 376, 376, 417, 352, 607, 417, 417, 352, 417, - 806, 417, 607, 607, 607, 417, 364, 607, 607, 607, - 353, 607, 639, 364, 353, 572, 572, 352, 203, 639, - 607, 607, 607, 607, 639, 572, 653, 410, 639, 653, - 222, 607, 607, 410, 607, 607, 607, 607, 607, 224, - 574, 574, 943, 411, 943, 943, 943, 639, 943, 377, - 574, 365, 366, 701, 378, 556, 41, 41, 365, 366, - 556, 607, 607, 607, 607, 607, 607, 607, 607, 607, - 607, 607, 607, 607, 607, 311, 311, 607, 607, 607, - 367, 607, 607, 379, 225, 607, 588, 367, 607, 607, - 411, 607, 775, 607, 712, 607, 411, 607, 607, 712, - 607, 607, 607, 607, 607, 701, 607, 607, 607, 380, - 335, 335, 701, 377, 377, 377, 383, 701, 378, 378, - 378, 701, 607, 229, 943, 607, 607, 607, 607, 608, - 607, 261, 607, 588, 607, 275, 608, 608, 608, 588, - 701, 608, 608, 608, 775, 608, 46, 379, 379, 379, - 276, 775, 368, 46, 369, 608, 608, 608, 122, 368, - 775, 369, 46, 122, 122, 608, 608, 279, 608, 608, - 608, 608, 608, 380, 380, 380, 219, 290, 298, 775, - 383, 383, 383, 219, 671, 298, 671, 671, 671, 291, - 671, 293, 219, 294, 298, 608, 608, 608, 608, 608, - 608, 608, 608, 608, 608, 608, 608, 608, 608, 465, - 791, 608, 608, 608, 295, 608, 608, 370, 301, 608, - 791, 671, 608, 608, 370, 608, 304, 608, 305, 608, - 671, 608, 608, 840, 608, 608, 608, 608, 608, 310, - 608, 465, 608, 840, 372, 465, 465, 826, 465, 465, - 312, 372, 826, 791, 791, 316, 608, 317, 791, 608, - 608, 608, 608, 320, 608, 325, 608, 329, 608, 33, - 33, 33, 33, 33, 33, 330, 840, 840, 33, 33, - 332, 840, 79, 33, 341, 33, 33, 33, 33, 33, - 33, 33, 912, 342, 79, 912, 346, 33, 33, 33, - 33, 33, 33, 33, 79, 348, 33, 521, 521, 685, - 685, 429, 33, 33, 33, 33, 33, 33, 33, 33, - 33, 33, 33, 33, 392, 33, 33, 33, 398, 33, - 33, 33, 33, 33, 429, 429, 429, 429, 429, 429, - 429, 429, 429, 429, 429, 299, 429, 429, 300, 400, - 429, 429, 299, 33, 403, 300, 33, 794, 794, 33, - 33, 299, 406, 33, 300, 33, 429, 408, 429, 33, - 429, 429, 409, 429, 429, 429, 429, 429, 33, 429, - 984, 984, 418, 33, 33, 33, 33, 302, 33, 33, - 33, 33, 426, 466, 302, 318, 33, 33, 436, 429, - 56, 429, 318, 302, 33, 448, 33, 56, 56, 56, - 449, 318, 56, 56, 56, 803, 56, 803, 803, 803, - 450, 803, 451, 476, 480, 466, 56, 56, 56, 466, - 466, 345, 466, 466, 495, 496, 56, 56, 345, 56, - 56, 56, 56, 56, 499, 501, 506, 345, 510, 446, - 519, 883, 803, 883, 883, 883, 520, 883, 565, 565, - 522, 803, 565, 565, 565, 534, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, - 447, 446, 56, 56, 56, 446, 446, 56, 883, 539, - 56, 540, 569, 56, 56, 577, 56, 883, 56, 579, - 56, 585, 56, 56, 589, 56, 56, 56, 56, 56, - 594, 56, 447, 56, 599, 609, 447, 447, 355, 611, - 851, 616, 851, 851, 851, 355, 851, 56, 623, 505, - 56, 56, 56, 56, 355, 56, 505, 56, 120, 120, - 120, 120, 120, 120, 625, 505, 548, 120, 120, 630, - 633, 635, 120, 548, 120, 120, 120, 120, 120, 120, - 120, 638, 548, 641, 642, 645, 120, 120, 120, 120, - 120, 120, 120, 646, 966, 120, 966, 966, 966, 648, - 966, 120, 120, 120, 120, 120, 120, 120, 120, 120, - 120, 120, 120, 651, 120, 120, 120, 657, 120, 120, - 120, 120, 120, 444, 444, 444, 444, 444, 444, 444, - 444, 444, 444, 444, 640, 444, 444, 853, 658, 444, - 444, 640, 120, 660, 853, 120, 640, 661, 120, 120, - 640, 662, 120, 853, 120, 444, 669, 444, 120, 444, - 444, 677, 444, 444, 444, 444, 444, 120, 444, 681, - 684, 687, 120, 120, 120, 120, 692, 120, 120, 120, - 120, 695, 704, 709, 728, 120, 120, 205, 205, 205, - 205, 205, 205, 120, 733, 120, 205, 205, 751, 752, - 754, 205, 755, 205, 205, 205, 205, 205, 205, 205, - 6, 6, 6, 6, 6, 205, 205, 205, 205, 205, - 205, 205, 756, 758, 205, 289, 289, 289, 289, 289, - 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, - 205, 205, 759, 205, 205, 205, 760, 205, 205, 205, - 205, 205, 445, 445, 445, 445, 445, 445, 445, 445, - 445, 445, 445, 702, 445, 445, 916, 761, 445, 445, - 702, 205, 765, 916, 205, 702, 769, 205, 205, 702, - 770, 205, 916, 205, 445, 774, 445, 205, 445, 445, - 778, 445, 445, 445, 445, 445, 205, 445, 781, 782, - 785, 205, 205, 205, 205, 790, 205, 205, 205, 205, - 805, 808, 813, 816, 205, 205, 228, 228, 228, 228, - 228, 228, 205, 825, 205, 228, 228, 829, 830, 833, - 228, 834, 228, 228, 228, 228, 228, 228, 228, 493, - 493, 493, 493, 493, 228, 228, 228, 228, 228, 228, - 228, 850, 885, 228, 885, 885, 885, 854, 885, 228, - 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, - 228, 856, 228, 228, 228, 869, 228, 228, 228, 228, - 228, 455, 455, 455, 455, 455, 455, 455, 922, 885, - 455, 455, 923, 870, 874, 922, 875, 455, 455, 923, - 228, 877, 878, 228, 922, 880, 228, 228, 923, 882, - 228, 884, 228, 455, 890, 455, 228, 455, 455, 891, - 455, 455, 455, 455, 455, 228, 455, 897, 902, 905, - 228, 228, 228, 228, 906, 228, 228, 228, 228, 907, - 908, 910, 925, 228, 228, 292, 292, 292, 292, 292, - 292, 228, 928, 228, 292, 292, 929, 945, 967, 292, - 968, 292, 292, 292, 292, 292, 292, 292, 969, 976, - 977, 978, 979, 292, 292, 292, 292, 292, 292, 292, - 980, 944, 292, 944, 944, 944, 982, 944, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, - 985, 292, 292, 292, 986, 292, 292, 292, 292, 292, - 456, 981, 987, 981, 981, 981, 988, 981, 944, 983, - 989, 983, 983, 983, 924, 983, 456, 456, 990, 292, - 993, 924, 292, 1004, 1014, 292, 292, 1015, 1016, 292, - 924, 292, 456, nil, 456, 292, 456, 456, 981, 456, - 456, nil, nil, 456, 292, 456, 983, nil, nil, 292, - 292, 292, 292, nil, 292, 292, 292, 292, nil, nil, - nil, nil, 292, 292, 297, 297, 297, 297, 297, 297, - 292, nil, 292, 297, 297, nil, nil, nil, 297, nil, - 297, 297, 297, 297, 297, 297, 297, nil, nil, nil, - nil, nil, 297, 297, 297, 297, 297, 297, 297, nil, - 1003, 297, 1003, 1003, 1003, nil, 1003, 297, 297, 297, - 297, 297, 297, 297, 297, 297, 297, 297, 297, nil, - 297, 297, 297, 926, 297, 297, 297, 297, 297, 457, - 926, 973, nil, nil, nil, nil, nil, 1003, 973, 926, - nil, nil, nil, nil, nil, 457, 457, 973, 297, nil, - nil, 297, nil, nil, 297, 297, nil, nil, 297, nil, - 297, 457, nil, 457, 297, 457, 457, nil, 457, 457, - nil, nil, 457, 297, 457, nil, nil, nil, 297, 297, - 297, 297, nil, 297, 297, 297, 297, nil, nil, nil, - nil, 297, 297, 323, 323, 323, 323, 323, 323, 297, - nil, 297, 323, 323, nil, nil, nil, 323, nil, 323, - 323, 323, 323, 323, 323, 323, nil, nil, nil, nil, - nil, 323, 323, 323, 323, 323, 323, 323, nil, nil, - 323, nil, nil, nil, nil, 405, 323, 323, 323, 323, - 323, 323, 323, 323, 323, 323, 323, 323, nil, 323, - 323, 323, nil, 323, 323, 323, 323, 323, 405, 405, - 405, 405, 405, 405, 405, 405, 405, 405, 405, 997, - 405, 405, nil, nil, 405, 405, 997, 323, nil, nil, - 323, 997, nil, 323, 323, 997, nil, 323, nil, 323, - 405, nil, 405, 323, 405, 405, nil, 405, 405, 405, - 405, 405, 323, 405, nil, nil, nil, 323, 323, 323, - 323, nil, 323, 323, 323, 323, nil, nil, nil, nil, - 323, 323, nil, 405, 421, nil, nil, nil, 323, nil, - 323, 421, 421, 421, nil, nil, 421, 421, 421, 458, - 421, nil, nil, nil, nil, nil, nil, nil, nil, 421, - 421, 421, 421, nil, nil, 458, 458, nil, nil, nil, - 421, 421, nil, 421, 421, 421, 421, 421, nil, nil, - nil, 458, nil, 458, nil, 458, 458, nil, 458, 458, - nil, nil, 458, nil, 458, nil, nil, nil, nil, nil, - 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, - 421, 421, 421, 421, nil, nil, 421, 421, 421, nil, - nil, 421, nil, nil, 421, nil, nil, 421, 421, nil, - 421, nil, 421, nil, 421, nil, 421, 421, nil, 421, - 421, 421, 421, 421, nil, 421, 421, 421, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 421, nil, nil, 421, 421, 421, 421, 422, 421, - nil, 421, nil, nil, nil, 422, 422, 422, nil, nil, - 422, 422, 422, 459, 422, nil, nil, nil, nil, nil, - nil, nil, nil, 422, 422, 422, 422, nil, nil, 459, - 459, nil, nil, nil, 422, 422, nil, 422, 422, 422, - 422, 422, nil, nil, nil, 459, nil, 459, nil, 459, - 459, nil, 459, 459, nil, nil, 459, nil, 459, nil, - nil, nil, nil, nil, 422, 422, 422, 422, 422, 422, - 422, 422, 422, 422, 422, 422, 422, 422, nil, nil, - 422, 422, 422, nil, nil, 422, nil, nil, 422, nil, - nil, 422, 422, nil, 422, nil, 422, nil, 422, nil, - 422, 422, nil, 422, 422, 422, 422, 422, nil, 422, - 422, 422, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 422, nil, nil, 422, 422, - 422, 422, nil, 422, nil, 422, 494, 494, 494, 494, - 494, 494, nil, nil, nil, 494, 494, nil, nil, nil, - 494, nil, 494, 494, 494, 494, 494, 494, 494, nil, - nil, nil, nil, nil, 494, 494, 494, 494, 494, 494, - 494, nil, nil, 494, nil, nil, nil, nil, nil, 494, - 494, 494, 494, 494, 494, 494, 494, 494, 494, 494, - 494, nil, 494, 494, 494, nil, 494, 494, 494, 494, - 494, 460, 460, 460, 460, 460, 460, 460, nil, nil, - 460, 460, nil, nil, nil, nil, nil, 460, 460, nil, - 494, nil, nil, 494, nil, nil, 494, 494, nil, nil, - 494, nil, 494, 460, nil, 460, 494, 460, 460, nil, - 460, 460, 460, 460, 460, 494, 460, nil, nil, nil, - 494, 494, 494, 494, nil, 494, 494, 494, 494, nil, - nil, nil, nil, 494, 494, 533, 533, 533, 533, 533, - 533, 494, nil, 494, 533, 533, nil, nil, nil, 533, - nil, 533, 533, 533, 533, 533, 533, 533, nil, nil, - nil, nil, nil, 533, 533, 533, 533, 533, 533, 533, - nil, nil, 533, nil, nil, nil, nil, nil, 533, 533, - 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, - nil, 533, 533, 533, nil, 533, 533, 533, 533, 533, - 461, 461, 461, 461, 461, 461, 461, nil, nil, 461, - 461, nil, nil, nil, nil, nil, 461, 461, nil, 533, - nil, nil, 533, nil, nil, 533, 533, nil, nil, 533, - nil, 533, 461, nil, 461, 533, 461, 461, nil, 461, - 461, 461, 461, 461, 533, 461, nil, nil, nil, 533, - 533, 533, 533, nil, 533, 533, 533, 533, nil, nil, - nil, nil, 533, 533, 536, 536, 536, 536, 536, 536, - 533, nil, 533, 536, 536, nil, nil, nil, 536, nil, - 536, 536, 536, 536, 536, 536, 536, nil, nil, nil, - nil, nil, 536, 536, 536, 536, 536, 536, 536, nil, - nil, 536, nil, nil, nil, nil, nil, 536, 536, 536, - 536, 536, 536, 536, 536, 536, 536, 536, 536, nil, - 536, 536, 536, nil, 536, 536, 536, 536, 536, 462, - 462, 462, 462, 462, 462, 462, nil, nil, 462, 462, - nil, nil, nil, nil, nil, 462, 462, nil, 536, nil, - nil, 536, nil, nil, 536, 536, nil, nil, 536, nil, - 536, 462, nil, 462, 536, 462, 462, nil, 462, 462, - 462, 462, 462, 536, 462, nil, nil, nil, 536, 536, - 536, 536, nil, 536, 536, 536, 536, nil, nil, nil, - nil, 536, 536, 558, 558, 558, 558, 558, 558, 536, - nil, 536, 558, 558, nil, nil, nil, 558, nil, 558, - 558, 558, 558, 558, 558, 558, nil, nil, nil, nil, - nil, 558, 558, 558, 558, 558, 558, 558, nil, nil, - 558, nil, nil, nil, nil, nil, 558, 558, 558, 558, - 558, 558, 558, 558, 558, 558, 558, 558, nil, 558, - 558, 558, nil, 558, 558, 558, 558, 558, 463, 463, - 463, 463, 463, 463, 463, nil, nil, 463, 463, nil, - nil, nil, nil, nil, 463, 463, nil, 558, nil, nil, - 558, nil, nil, 558, 558, nil, nil, 558, nil, 558, - 463, nil, 463, 558, 463, 463, nil, 463, 463, 463, - 463, 463, 558, 463, nil, nil, nil, 558, 558, 558, - 558, nil, 558, 558, 558, 558, nil, nil, nil, nil, - 558, 558, 615, 615, 615, 615, 615, 615, 558, nil, - 558, 615, 615, nil, nil, nil, 615, nil, 615, 615, - 615, 615, 615, 615, 615, nil, nil, nil, nil, nil, - 615, 615, 615, 615, 615, 615, 615, nil, nil, 615, - nil, nil, nil, nil, nil, 615, 615, 615, 615, 615, - 615, 615, 615, 615, 615, 615, 615, nil, 615, 615, - 615, nil, 615, 615, 615, 615, 615, 464, 464, 464, - 464, 464, 464, 464, nil, nil, 464, 464, nil, nil, - nil, nil, nil, 464, 464, nil, 615, nil, nil, 615, - nil, nil, 615, 615, nil, nil, 615, nil, 615, 464, - nil, 464, 615, 464, 464, nil, 464, 464, 464, 464, - 464, 615, 464, nil, nil, nil, 615, 615, 615, 615, - nil, 615, 615, 615, 615, nil, nil, nil, nil, 615, - 615, 620, 620, 620, 620, 620, 620, 615, nil, 615, - 620, 620, nil, nil, nil, 620, nil, 620, 620, 620, - 620, 620, 620, 620, nil, nil, nil, nil, nil, 620, - 620, 620, 620, 620, 620, 620, nil, nil, 620, nil, - nil, nil, nil, nil, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, 620, 620, nil, 620, 620, 620, - nil, 620, 620, 620, 620, 620, 467, 467, 467, 467, - 467, 467, 467, nil, nil, 467, 467, nil, nil, nil, - nil, nil, 467, 467, nil, 620, nil, nil, 620, nil, - nil, 620, 620, nil, nil, 620, nil, 620, 467, nil, - 467, 620, 467, 467, nil, 467, 467, 467, 467, 467, - 620, 467, nil, nil, nil, 620, 620, 620, 620, nil, - 620, 620, 620, 620, nil, nil, nil, nil, 620, 620, - 621, 621, 621, 621, 621, 621, 620, nil, 620, 621, - 621, nil, nil, nil, 621, nil, 621, 621, 621, 621, - 621, 621, 621, nil, nil, nil, nil, nil, 621, 621, - 621, 621, 621, 621, 621, nil, nil, 621, nil, nil, - nil, nil, nil, 621, 621, 621, 621, 621, 621, 621, - 621, 621, 621, 621, 621, nil, 621, 621, 621, nil, - 621, 621, 621, 621, 621, 468, 468, 468, 468, 468, - 468, 468, 468, nil, 468, 468, nil, nil, nil, nil, - nil, 468, 468, nil, 621, nil, nil, 621, nil, nil, - 621, 621, nil, nil, 621, nil, 621, 468, nil, 468, - 621, 468, 468, nil, 468, 468, 468, 468, 468, 621, - 468, nil, nil, nil, 621, 621, 621, 621, nil, 621, - 621, 621, 621, nil, nil, nil, nil, 621, 621, 705, - 705, 705, 705, 705, 705, 621, nil, 621, 705, 705, - nil, nil, nil, 705, nil, 705, 705, 705, 705, 705, - 705, 705, nil, nil, nil, nil, nil, 705, 705, 705, - 705, 705, 705, 705, nil, nil, 705, nil, nil, nil, - nil, nil, 705, 705, 705, 705, 705, 705, 705, 705, - 705, 705, 705, 705, nil, 705, 705, 705, nil, 705, - 705, 705, 705, 705, 452, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 452, 452, nil, 705, nil, nil, 705, nil, nil, 705, - 705, nil, nil, 705, nil, 705, 452, nil, 452, 705, - 452, 452, nil, 452, 452, nil, nil, nil, 705, nil, - nil, nil, nil, 705, 705, 705, 705, nil, 705, 705, - 705, 705, nil, nil, nil, nil, 705, 705, 710, 710, - 710, 710, 710, 710, 705, nil, 705, 710, 710, nil, - nil, nil, 710, nil, 710, 710, 710, 710, 710, 710, - 710, nil, nil, nil, nil, nil, 710, 710, 710, 710, - 710, 710, 710, nil, nil, 710, nil, nil, nil, nil, - nil, 710, 710, 710, 710, 710, 710, 710, 710, 710, - 710, 710, 710, nil, 710, 710, 710, nil, 710, 710, - 710, 710, 710, 453, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 453, - 453, nil, 710, nil, nil, 710, nil, nil, 710, 710, - nil, nil, 710, nil, 710, 453, nil, 453, 710, 453, - 453, nil, 453, 453, nil, nil, nil, 710, nil, nil, - nil, nil, 710, 710, 710, 710, nil, 710, 710, 710, - 710, nil, nil, nil, nil, 710, 710, 720, 720, 720, - 720, 720, 720, 710, nil, 710, 720, 720, nil, nil, - nil, 720, nil, 720, 720, 720, 720, 720, 720, 720, - nil, nil, nil, nil, nil, 720, 720, 720, 720, 720, - 720, 720, nil, nil, 720, nil, nil, nil, nil, nil, - 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, - 720, 720, nil, 720, 720, 720, nil, 720, 720, 720, - 720, 720, 454, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 454, 454, - nil, 720, nil, nil, 720, nil, nil, 720, 720, nil, - nil, 720, nil, 720, 454, nil, nil, 720, 454, 454, - nil, 454, 454, nil, nil, nil, 720, nil, nil, nil, - nil, 720, 720, 720, 720, nil, 720, 720, 720, 720, - nil, nil, nil, nil, 720, 720, 768, 768, 768, 768, - 768, 768, 720, nil, 720, 768, 768, nil, nil, nil, - 768, nil, 768, 768, 768, 768, 768, 768, 768, nil, - nil, nil, nil, nil, 768, 768, 768, 768, 768, 768, - 768, nil, nil, 768, nil, nil, nil, nil, nil, 768, - 768, 768, 768, 768, 768, 768, 768, 768, 768, 768, - 768, nil, 768, 768, 768, nil, 768, 768, 768, 768, - 768, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 768, nil, nil, 768, nil, nil, 768, 768, nil, nil, - 768, nil, 768, nil, nil, nil, 768, nil, nil, nil, - nil, nil, nil, nil, nil, 768, nil, nil, nil, nil, - 768, 768, 768, 768, nil, 768, 768, 768, 768, nil, - nil, nil, nil, 768, 768, 780, 780, 780, 780, 780, - 780, 768, nil, 768, 780, 780, nil, nil, nil, 780, - nil, 780, 780, 780, 780, 780, 780, 780, nil, nil, - nil, nil, nil, 780, 780, 780, 780, 780, 780, 780, - nil, nil, 780, nil, nil, nil, nil, nil, 780, 780, - 780, 780, 780, 780, 780, 780, 780, 780, 780, 780, - nil, 780, 780, 780, nil, 780, 780, 780, 780, 780, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 780, - nil, nil, 780, nil, nil, 780, 780, nil, nil, 780, - nil, 780, nil, nil, nil, 780, nil, nil, nil, nil, - nil, nil, nil, nil, 780, nil, nil, nil, nil, 780, - 780, 780, 780, nil, 780, 780, 780, 780, nil, nil, - nil, nil, 780, 780, 817, 817, 817, 817, 817, 817, - 780, nil, 780, 817, 817, nil, nil, nil, 817, nil, - 817, 817, 817, 817, 817, 817, 817, nil, nil, nil, - nil, nil, 817, 817, 817, 817, 817, 817, 817, nil, - nil, 817, nil, nil, nil, nil, nil, 817, 817, 817, - 817, 817, 817, 817, 817, 817, 817, 817, 817, nil, - 817, 817, 817, nil, 817, 817, 817, 817, 817, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 817, nil, - nil, 817, nil, nil, 817, 817, nil, nil, 817, nil, - 817, nil, nil, nil, 817, nil, nil, nil, nil, nil, - nil, nil, nil, 817, nil, nil, nil, nil, 817, 817, - 817, 817, nil, 817, 817, 817, 817, nil, nil, nil, - nil, 817, 817, 818, 818, 818, 818, 818, 818, 817, - nil, 817, 818, 818, nil, nil, nil, 818, nil, 818, - 818, 818, 818, 818, 818, 818, nil, nil, nil, nil, - nil, 818, 818, 818, 818, 818, 818, 818, nil, nil, - 818, nil, nil, nil, nil, nil, 818, 818, 818, 818, - 818, 818, 818, 818, 818, 818, 818, 818, nil, 818, - 818, 818, nil, 818, 818, 818, 818, 818, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 818, nil, nil, - 818, nil, nil, 818, 818, nil, nil, 818, nil, 818, - nil, nil, nil, 818, nil, nil, nil, nil, nil, nil, - nil, nil, 818, nil, nil, nil, nil, 818, 818, 818, - 818, nil, 818, 818, 818, 818, nil, nil, nil, nil, - 818, 818, 821, 821, 821, 821, 821, 821, 818, nil, - 818, 821, 821, nil, nil, nil, 821, nil, 821, 821, - 821, 821, 821, 821, 821, nil, nil, nil, nil, nil, - 821, 821, 821, 821, 821, 821, 821, nil, nil, 821, - nil, nil, nil, nil, nil, 821, 821, 821, 821, 821, - 821, 821, 821, 821, 821, 821, 821, nil, 821, 821, - 821, nil, 821, 821, 821, 821, 821, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 821, nil, nil, 821, - nil, nil, 821, 821, nil, nil, 821, nil, 821, nil, - nil, nil, 821, nil, nil, nil, nil, nil, nil, nil, - nil, 821, nil, nil, nil, nil, 821, 821, 821, 821, - nil, 821, 821, 821, 821, nil, nil, nil, nil, 821, - 821, 827, 827, 827, 827, 827, 827, 821, nil, 821, - 827, 827, nil, nil, nil, 827, nil, 827, 827, 827, - 827, 827, 827, 827, nil, nil, nil, nil, nil, 827, - 827, 827, 827, 827, 827, 827, nil, nil, 827, nil, - nil, nil, nil, nil, 827, 827, 827, 827, 827, 827, - 827, 827, 827, 827, 827, 827, nil, 827, 827, 827, - nil, 827, 827, 827, 827, 827, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 827, nil, nil, 827, nil, - nil, 827, 827, nil, nil, 827, nil, 827, nil, nil, - nil, 827, nil, nil, nil, nil, nil, nil, nil, nil, - 827, nil, nil, nil, nil, 827, 827, 827, 827, nil, - 827, 827, 827, 827, nil, nil, nil, nil, 827, 827, - 860, 860, 860, 860, 860, 860, 827, nil, 827, 860, - 860, nil, nil, nil, 860, nil, 860, 860, 860, 860, - 860, 860, 860, nil, nil, nil, nil, nil, 860, 860, - 860, 860, 860, 860, 860, nil, nil, 860, nil, nil, - nil, nil, nil, 860, 860, 860, 860, 860, 860, 860, - 860, 860, 860, 860, 860, nil, 860, 860, 860, nil, - 860, 860, 860, 860, 860, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 860, nil, nil, 860, nil, nil, - 860, 860, nil, nil, 860, nil, 860, nil, nil, nil, - 860, nil, nil, nil, nil, nil, nil, nil, nil, 860, - nil, nil, nil, nil, 860, 860, 860, 860, nil, 860, - 860, 860, 860, nil, nil, nil, nil, 860, 860, 867, - 867, 867, 867, 867, 867, 860, nil, 860, 867, 867, - nil, nil, nil, 867, nil, 867, 867, 867, 867, 867, - 867, 867, nil, nil, nil, nil, nil, 867, 867, 867, - 867, 867, 867, 867, nil, nil, 867, nil, nil, nil, - nil, nil, 867, 867, 867, 867, 867, 867, 867, 867, - 867, 867, 867, 867, nil, 867, 867, 867, nil, 867, - 867, 867, 867, 867, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 867, nil, nil, 867, nil, nil, 867, - 867, nil, nil, 867, nil, 867, nil, nil, nil, 867, - nil, nil, nil, nil, nil, nil, nil, nil, 867, nil, - nil, nil, nil, 867, 867, 867, 867, nil, 867, 867, - 867, 867, nil, nil, nil, nil, 867, 867, 868, 868, - 868, 868, 868, 868, 867, nil, 867, 868, 868, nil, - nil, nil, 868, nil, 868, 868, 868, 868, 868, 868, - 868, nil, nil, nil, nil, nil, 868, 868, 868, 868, - 868, 868, 868, nil, nil, 868, nil, nil, nil, nil, - nil, 868, 868, 868, 868, 868, 868, 868, 868, 868, - 868, 868, 868, nil, 868, 868, 868, nil, 868, 868, - 868, 868, 868, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 868, nil, nil, 868, nil, nil, 868, 868, - nil, nil, 868, nil, 868, nil, nil, nil, 868, nil, - nil, nil, nil, nil, nil, nil, nil, 868, nil, nil, - nil, nil, 868, 868, 868, 868, nil, 868, 868, 868, - 868, nil, nil, nil, nil, 868, 868, 921, 921, 921, - 921, 921, 921, 868, nil, 868, 921, 921, nil, nil, - nil, 921, nil, 921, 921, 921, 921, 921, 921, 921, - nil, nil, nil, nil, nil, 921, 921, 921, 921, 921, - 921, 921, nil, nil, 921, nil, nil, nil, nil, nil, - 921, 921, 921, 921, 921, 921, 921, 921, 921, 921, - 921, 921, nil, 921, 921, 921, nil, 921, 921, 921, - 921, 921, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 921, nil, nil, 921, nil, nil, 921, 921, nil, - nil, 921, nil, 921, nil, nil, nil, 921, nil, nil, - nil, nil, nil, nil, nil, nil, 921, nil, nil, nil, - nil, 921, 921, 921, 921, nil, 921, 921, 921, 921, - nil, nil, nil, nil, 921, 921, 946, 946, 946, 946, - 946, 946, 921, nil, 921, 946, 946, nil, nil, nil, - 946, nil, 946, 946, 946, 946, 946, 946, 946, nil, - nil, nil, nil, nil, 946, 946, 946, 946, 946, 946, - 946, nil, nil, 946, nil, nil, nil, nil, nil, 946, - 946, 946, 946, 946, 946, 946, 946, 946, 946, 946, - 946, nil, 946, 946, 946, nil, 946, 946, 946, 946, - 946, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 946, nil, nil, 946, nil, nil, 946, 946, nil, nil, - 946, nil, 946, nil, nil, nil, 946, nil, nil, nil, - nil, nil, nil, nil, nil, 946, nil, nil, nil, nil, - 946, 946, 946, 946, nil, 946, 946, 946, 946, nil, - nil, nil, nil, 946, 946, 952, 952, 952, 952, 952, - 952, 946, nil, 946, 952, 952, nil, nil, nil, 952, - nil, 952, 952, 952, 952, 952, 952, 952, nil, nil, - nil, nil, nil, 952, 952, 952, 952, 952, 952, 952, - nil, nil, 952, nil, nil, nil, nil, nil, 952, 952, - 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, - nil, 952, 952, 952, nil, 952, 952, 952, 952, 952, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 952, - nil, nil, 952, nil, nil, 952, 952, nil, nil, 952, - nil, 952, nil, nil, nil, 952, nil, nil, nil, nil, - nil, nil, nil, nil, 952, nil, nil, nil, nil, 952, - 952, 952, 952, nil, 952, 952, 952, 952, nil, nil, - nil, nil, 952, 952, 954, 954, 954, 954, 954, 954, - 952, nil, 952, 954, 954, nil, nil, nil, 954, nil, - 954, 954, 954, 954, 954, 954, 954, nil, nil, nil, - nil, nil, 954, 954, 954, 954, 954, 954, 954, nil, - nil, 954, nil, nil, nil, nil, nil, 954, 954, 954, - 954, 954, 954, 954, 954, 954, 954, 954, 954, nil, - 954, 954, 954, nil, 954, 954, 954, 954, 954, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 954, nil, - nil, 954, nil, nil, 954, 954, nil, nil, 954, nil, - 954, nil, nil, nil, 954, nil, nil, nil, nil, nil, - nil, nil, nil, 954, nil, nil, nil, nil, 954, 954, - 954, 954, nil, 954, 954, 954, 954, nil, nil, nil, - nil, 954, 954, nil, 5, 5, 5, 5, 5, 954, - nil, 954, 5, 5, nil, nil, nil, 5, nil, 5, - 5, 5, 5, 5, 5, 5, nil, nil, nil, nil, - nil, 5, 5, 5, 5, 5, 5, 5, nil, nil, - 5, nil, nil, nil, nil, nil, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, nil, 5, - 5, 5, nil, 5, 5, 5, 5, 5, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 5, nil, nil, - 5, nil, nil, 5, 5, nil, nil, 5, nil, 5, - nil, nil, nil, 5, nil, nil, nil, nil, nil, nil, - nil, nil, 5, nil, nil, nil, nil, 5, 5, 5, - 5, nil, 5, 5, 5, 5, nil, nil, nil, nil, - 5, 5, nil, 20, 20, 20, nil, 20, 5, nil, - 5, 20, 20, nil, nil, nil, 20, nil, 20, 20, - 20, 20, 20, 20, 20, nil, nil, nil, nil, nil, - 20, 20, 20, 20, 20, 20, 20, nil, nil, 20, - nil, nil, nil, nil, nil, nil, 20, nil, nil, 20, - 20, 20, 20, 20, 20, 20, 20, nil, 20, 20, - 20, nil, 20, 20, 20, 20, 20, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 20, nil, nil, 20, - nil, nil, 20, 20, nil, nil, 20, nil, nil, nil, - nil, nil, 20, nil, nil, nil, nil, nil, nil, nil, - nil, 20, nil, nil, nil, nil, 20, 20, 20, 20, - nil, 20, 20, 20, 20, nil, nil, nil, nil, 20, - 20, nil, 29, 29, 29, nil, 29, 20, nil, 20, - 29, 29, nil, nil, nil, 29, nil, 29, 29, 29, - 29, 29, 29, 29, nil, nil, nil, nil, nil, 29, - 29, 29, 29, 29, 29, 29, nil, nil, 29, nil, - nil, nil, nil, nil, nil, 29, nil, nil, 29, 29, - 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, - nil, 29, 29, 29, 29, 29, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 29, nil, nil, 29, nil, - nil, 29, 29, nil, nil, 29, nil, 29, nil, 29, - nil, 29, nil, nil, 29, nil, nil, nil, nil, nil, - 29, nil, nil, nil, nil, 29, 29, 29, 29, nil, - 29, 29, 29, 29, nil, nil, nil, nil, 29, 29, - nil, 30, 30, 30, nil, 30, 29, nil, 29, 30, - 30, nil, nil, nil, 30, nil, 30, 30, 30, 30, - 30, 30, 30, nil, nil, nil, nil, nil, 30, 30, - 30, 30, 30, 30, 30, nil, nil, 30, nil, nil, - nil, nil, nil, nil, 30, nil, nil, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, nil, - 30, 30, 30, 30, 30, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 30, nil, nil, 30, nil, nil, - 30, 30, nil, nil, 30, nil, 30, nil, 30, nil, - 30, nil, nil, 30, nil, nil, nil, nil, nil, 30, - nil, nil, nil, nil, 30, 30, 30, 30, nil, 30, - 30, 30, 30, nil, nil, nil, nil, 30, 30, nil, - 31, 31, 31, nil, 31, 30, nil, 30, 31, 31, - nil, nil, nil, 31, nil, 31, 31, 31, 31, 31, - 31, 31, nil, nil, nil, nil, nil, 31, 31, 31, - 31, 31, 31, 31, nil, nil, 31, nil, nil, nil, - nil, nil, nil, 31, nil, nil, 31, 31, 31, 31, - 31, 31, 31, 31, 31, 31, 31, 31, nil, 31, - 31, 31, 31, 31, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 31, nil, nil, 31, nil, nil, 31, - 31, nil, nil, 31, nil, 31, nil, 31, nil, 31, - nil, nil, 31, nil, nil, nil, nil, nil, 31, nil, - nil, nil, nil, 31, 31, 31, 31, nil, 31, 31, - 31, 31, nil, nil, nil, nil, 31, 31, nil, 34, - 34, 34, nil, 34, 31, nil, 31, 34, 34, nil, - nil, nil, 34, nil, 34, 34, 34, 34, 34, 34, - 34, nil, nil, nil, nil, nil, 34, 34, 34, 34, - 34, 34, 34, nil, nil, 34, nil, nil, nil, nil, - nil, nil, 34, nil, nil, 34, 34, 34, 34, 34, - 34, 34, 34, nil, 34, 34, 34, nil, 34, 34, - nil, nil, 34, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 34, nil, nil, 34, nil, nil, 34, 34, - nil, nil, 34, nil, 34, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 34, 34, 34, 34, nil, 34, 34, 34, - 34, nil, nil, nil, nil, 34, 34, nil, 35, 35, - 35, nil, 35, 34, nil, 34, 35, 35, nil, nil, - nil, 35, nil, 35, 35, 35, 35, 35, 35, 35, - nil, nil, nil, nil, nil, 35, 35, 35, 35, 35, - 35, 35, nil, nil, 35, nil, nil, nil, nil, 610, - nil, 35, nil, nil, 35, 35, 35, 35, 35, 35, - 35, 35, nil, 35, 35, 35, nil, 35, 35, nil, - nil, 35, 610, 610, 610, 610, 610, 610, 610, 610, - 610, 610, 610, nil, 610, 610, nil, nil, 610, 610, - nil, 35, nil, nil, 35, nil, nil, 35, 35, nil, - nil, 35, nil, nil, 610, nil, 610, nil, 610, 610, - nil, 610, 610, 610, 610, 610, nil, 610, nil, nil, - nil, 35, 35, 35, 35, nil, 35, 35, 35, 35, - nil, nil, nil, nil, 35, 35, nil, 610, nil, 35, - nil, nil, 35, nil, 35, 42, 42, 42, nil, 42, - nil, nil, nil, 42, 42, nil, nil, nil, 42, nil, - 42, 42, 42, 42, 42, 42, 42, nil, nil, nil, - nil, nil, 42, 42, 42, 42, 42, 42, 42, nil, - nil, 42, nil, nil, nil, nil, nil, nil, 42, nil, - nil, 42, 42, 42, 42, 42, 42, 42, 42, nil, - 42, 42, 42, nil, 42, 42, 42, 42, 42, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 42, nil, - nil, 42, nil, nil, 42, 42, nil, nil, 42, nil, - nil, nil, nil, nil, 42, nil, nil, nil, nil, nil, - nil, nil, nil, 42, nil, nil, nil, nil, 42, 42, - 42, 42, nil, 42, 42, 42, 42, nil, nil, nil, - nil, 42, 42, nil, 43, 43, 43, nil, 43, 42, - nil, 42, 43, 43, nil, nil, nil, 43, nil, 43, - 43, 43, 43, 43, 43, 43, nil, nil, nil, nil, - nil, 43, 43, 43, 43, 43, 43, 43, nil, nil, - 43, nil, nil, nil, nil, nil, nil, 43, nil, nil, - 43, 43, 43, 43, 43, 43, 43, 43, nil, 43, - 43, 43, nil, 43, 43, 43, 43, 43, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 43, nil, nil, - 43, nil, nil, 43, 43, nil, nil, 43, nil, nil, - nil, nil, nil, 43, nil, nil, nil, nil, nil, nil, - nil, nil, 43, nil, nil, nil, nil, 43, 43, 43, - 43, nil, 43, 43, 43, 43, nil, nil, nil, nil, - 43, 43, nil, 44, 44, 44, nil, 44, 43, nil, - 43, 44, 44, nil, nil, nil, 44, nil, 44, 44, - 44, 44, 44, 44, 44, nil, nil, nil, nil, nil, - 44, 44, 44, 44, 44, 44, 44, nil, nil, 44, - nil, nil, nil, nil, nil, nil, 44, nil, nil, 44, - 44, 44, 44, 44, 44, 44, 44, nil, 44, 44, - 44, nil, 44, 44, 44, 44, 44, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 44, nil, nil, 44, - nil, nil, 44, 44, nil, nil, 44, nil, nil, nil, - nil, nil, 44, nil, nil, nil, nil, nil, nil, nil, - nil, 44, nil, nil, nil, nil, 44, 44, 44, 44, - nil, 44, 44, 44, 44, nil, nil, nil, nil, 44, - 44, nil, 59, 59, 59, nil, 59, 44, nil, 44, - 59, 59, nil, nil, nil, 59, nil, 59, 59, 59, - 59, 59, 59, 59, nil, nil, nil, nil, nil, 59, - 59, 59, 59, 59, 59, 59, nil, nil, 59, nil, - nil, nil, nil, nil, nil, 59, nil, nil, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - nil, 59, 59, 59, 59, 59, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 59, nil, nil, 59, nil, - nil, 59, 59, nil, nil, 59, nil, 59, nil, nil, - nil, 59, nil, nil, 59, nil, nil, nil, nil, nil, - 59, nil, nil, nil, nil, 59, 59, 59, 59, nil, - 59, 59, 59, 59, nil, nil, nil, nil, 59, 59, - nil, 60, 60, 60, nil, 60, 59, nil, 59, 60, - 60, nil, nil, nil, 60, nil, 60, 60, 60, 60, - 60, 60, 60, nil, nil, nil, nil, nil, 60, 60, - 60, 60, 60, 60, 60, nil, nil, 60, nil, nil, - nil, nil, nil, nil, 60, nil, nil, 60, 60, 60, - 60, 60, 60, 60, 60, 60, 60, 60, 60, nil, - 60, 60, 60, 60, 60, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 60, nil, nil, 60, nil, nil, - 60, 60, nil, nil, 60, nil, nil, nil, nil, nil, - 60, nil, nil, 60, nil, nil, nil, nil, nil, 60, - nil, nil, nil, nil, 60, 60, 60, 60, nil, 60, - 60, 60, 60, nil, nil, nil, nil, 60, 60, nil, - 63, 63, 63, nil, 63, 60, nil, 60, 63, 63, - nil, nil, nil, 63, nil, 63, 63, 63, 63, 63, - 63, 63, nil, nil, nil, nil, nil, 63, 63, 63, - 63, 63, 63, 63, nil, nil, 63, nil, nil, nil, - nil, nil, nil, 63, nil, nil, 63, 63, 63, 63, - 63, 63, 63, 63, nil, 63, 63, 63, nil, 63, - 63, 63, 63, 63, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 63, nil, nil, 63, nil, nil, 63, - 63, nil, nil, 63, nil, nil, nil, nil, nil, 63, - nil, nil, nil, nil, nil, nil, nil, nil, 63, nil, - nil, nil, nil, 63, 63, 63, 63, nil, 63, 63, - 63, 63, nil, nil, nil, nil, 63, 63, nil, 64, - 64, 64, nil, 64, 63, nil, 63, 64, 64, nil, - nil, nil, 64, nil, 64, 64, 64, 64, 64, 64, - 64, nil, nil, nil, nil, nil, 64, 64, 64, 64, - 64, 64, 64, nil, nil, 64, nil, nil, nil, nil, - nil, nil, 64, nil, nil, 64, 64, 64, 64, 64, - 64, 64, 64, nil, 64, 64, 64, nil, 64, 64, - 64, 64, 64, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 64, nil, nil, 64, nil, nil, 64, 64, - nil, nil, 64, nil, nil, nil, nil, nil, 64, nil, - nil, nil, nil, nil, nil, nil, nil, 64, nil, nil, - nil, nil, 64, 64, 64, 64, nil, 64, 64, 64, - 64, nil, nil, nil, nil, 64, 64, nil, 67, 67, - 67, nil, 67, 64, nil, 64, 67, 67, nil, nil, - nil, 67, nil, 67, 67, 67, 67, 67, 67, 67, - nil, nil, nil, nil, nil, 67, 67, 67, 67, 67, - 67, 67, nil, nil, 67, nil, nil, nil, nil, nil, - nil, 67, nil, nil, 67, 67, 67, 67, 67, 67, - 67, 67, nil, 67, 67, 67, nil, 67, 67, 67, - 67, 67, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, nil, 21, 21, nil, nil, 21, 21, - nil, 67, nil, nil, 67, nil, nil, 67, 67, nil, - nil, 67, nil, nil, 21, nil, 21, 67, 21, 21, - nil, 21, 21, 21, 21, 21, 67, 21, nil, nil, - nil, 67, 67, 67, 67, nil, 67, 67, 67, 67, - nil, nil, nil, nil, 67, 67, 67, 21, nil, nil, - nil, 67, 67, nil, 67, 68, 68, 68, nil, 68, - nil, nil, nil, 68, 68, nil, nil, nil, 68, nil, - 68, 68, 68, 68, 68, 68, 68, nil, nil, nil, - nil, nil, 68, 68, 68, 68, 68, 68, 68, nil, - nil, 68, nil, nil, nil, nil, nil, nil, 68, nil, - nil, 68, 68, 68, 68, 68, 68, 68, 68, nil, - 68, 68, 68, nil, 68, 68, nil, nil, 68, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 68, nil, - nil, 68, nil, nil, 68, 68, nil, nil, 68, nil, - 68, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 68, 68, - 68, 68, nil, 68, 68, 68, 68, nil, nil, nil, - nil, 68, 68, nil, 69, 69, 69, nil, 69, 68, - nil, 68, 69, 69, nil, nil, nil, 69, nil, 69, - 69, 69, 69, 69, 69, 69, nil, nil, nil, nil, - nil, 69, 69, 69, 69, 69, 69, 69, nil, nil, - 69, nil, nil, nil, nil, nil, nil, 69, nil, nil, - 69, 69, 69, 69, 69, 69, 69, 69, nil, 69, - 69, 69, nil, 69, 69, nil, nil, 69, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 69, nil, nil, 69, nil, nil, - 69, nil, nil, 69, 69, nil, nil, 69, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 69, 69, 69, - 69, nil, 69, 69, 69, 69, nil, nil, nil, nil, - 69, 69, nil, 70, 70, 70, nil, 70, 69, nil, - 69, 70, 70, nil, nil, nil, 70, nil, 70, 70, - 70, 70, 70, 70, 70, nil, nil, nil, nil, nil, - 70, 70, 70, 70, 70, 70, 70, nil, nil, 70, - nil, nil, nil, nil, nil, nil, 70, nil, nil, 70, - 70, 70, 70, 70, 70, 70, 70, nil, 70, 70, - 70, nil, 70, 70, nil, nil, 70, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 70, nil, nil, 70, - nil, nil, 70, 70, nil, nil, 70, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 70, 70, 70, 70, - nil, 70, 70, 70, 70, nil, nil, nil, nil, 70, - 70, nil, 110, 110, 110, 110, 110, 70, nil, 70, - 110, 110, nil, nil, nil, 110, nil, 110, 110, 110, - 110, 110, 110, 110, nil, nil, nil, nil, nil, 110, - 110, 110, 110, 110, 110, 110, nil, nil, 110, nil, - nil, nil, nil, nil, 110, 110, 110, 110, 110, 110, - 110, 110, 110, 110, 110, 110, nil, 110, 110, 110, - nil, 110, 110, 110, 110, 110, 273, 273, 273, 273, - 273, 273, 273, 273, 273, 273, 273, nil, 273, 273, - nil, nil, 273, 273, nil, 110, nil, nil, 110, nil, - nil, 110, 110, nil, nil, 110, nil, 110, 273, nil, - 273, 110, 273, 273, nil, 273, 273, 273, 273, 273, - 110, 273, nil, nil, nil, 110, 110, 110, 110, nil, - 110, 110, 110, 110, nil, nil, nil, nil, 110, 110, - nil, 273, nil, nil, nil, 110, 110, nil, 110, 115, - 115, 115, nil, 115, nil, nil, nil, 115, 115, nil, - nil, nil, 115, nil, 115, 115, 115, 115, 115, 115, - 115, nil, nil, nil, nil, nil, 115, 115, 115, 115, - 115, 115, 115, nil, nil, 115, nil, nil, nil, nil, - nil, nil, 115, nil, nil, 115, 115, 115, 115, 115, - 115, 115, 115, nil, 115, 115, 115, nil, 115, 115, - 115, 115, 115, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 115, nil, nil, 115, nil, nil, 115, 115, - nil, nil, 115, nil, nil, nil, nil, nil, 115, nil, - nil, nil, nil, nil, nil, nil, nil, 115, nil, nil, - nil, nil, 115, 115, 115, 115, nil, 115, 115, 115, - 115, nil, nil, nil, nil, 115, 115, nil, 116, 116, - 116, nil, 116, 115, nil, 115, 116, 116, nil, nil, - nil, 116, nil, 116, 116, 116, 116, 116, 116, 116, - nil, nil, nil, nil, nil, 116, 116, 116, 116, 116, - 116, 116, nil, nil, 116, nil, nil, nil, nil, nil, - nil, 116, nil, nil, 116, 116, 116, 116, 116, 116, - 116, 116, nil, 116, 116, 116, nil, 116, 116, 116, - 116, 116, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 116, nil, nil, 116, nil, nil, 116, 116, nil, - nil, 116, nil, nil, nil, nil, nil, 116, nil, nil, - nil, nil, nil, nil, nil, nil, 116, nil, nil, nil, - nil, 116, 116, 116, 116, nil, 116, 116, 116, 116, - nil, nil, nil, nil, 116, 116, nil, 117, 117, 117, - nil, 117, 116, nil, 116, 117, 117, nil, nil, nil, - 117, nil, 117, 117, 117, 117, 117, 117, 117, nil, - nil, nil, nil, nil, 117, 117, 117, 117, 117, 117, - 117, nil, nil, 117, nil, nil, nil, nil, nil, nil, - 117, nil, nil, 117, 117, 117, 117, 117, 117, 117, - 117, nil, 117, 117, 117, nil, 117, 117, 117, 117, - 117, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 117, nil, nil, 117, nil, nil, 117, 117, nil, nil, - 117, nil, nil, nil, nil, nil, 117, nil, nil, nil, - nil, nil, nil, nil, nil, 117, nil, nil, nil, nil, - 117, 117, 117, 117, nil, 117, 117, 117, 117, nil, - nil, nil, nil, 117, 117, nil, 118, 118, 118, nil, - 118, 117, nil, 117, 118, 118, nil, nil, nil, 118, - nil, 118, 118, 118, 118, 118, 118, 118, nil, nil, - nil, nil, nil, 118, 118, 118, 118, 118, 118, 118, - nil, nil, 118, nil, nil, nil, nil, nil, nil, 118, - nil, nil, 118, 118, 118, 118, 118, 118, 118, 118, - nil, 118, 118, 118, nil, 118, 118, 118, 118, 118, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 118, - nil, nil, 118, nil, nil, 118, 118, nil, nil, 118, - nil, nil, nil, nil, nil, 118, nil, nil, nil, nil, - nil, nil, nil, nil, 118, nil, nil, nil, nil, 118, - 118, 118, 118, nil, 118, 118, 118, 118, nil, nil, - nil, nil, 118, 118, nil, 119, 119, 119, 119, 119, - 118, nil, 118, 119, 119, nil, nil, nil, 119, nil, - 119, 119, 119, 119, 119, 119, 119, nil, nil, nil, - nil, nil, 119, 119, 119, 119, 119, 119, 119, nil, - nil, 119, nil, nil, nil, nil, nil, 119, 119, nil, - 119, 119, 119, 119, 119, 119, 119, 119, 119, nil, - 119, 119, 119, nil, 119, 119, 119, 119, 119, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 119, nil, - nil, 119, nil, nil, 119, 119, nil, nil, 119, nil, - 119, nil, nil, nil, 119, nil, nil, nil, nil, nil, - nil, nil, nil, 119, nil, nil, nil, nil, 119, 119, - 119, 119, nil, 119, 119, 119, 119, nil, nil, nil, - nil, 119, 119, nil, 206, 206, 206, nil, 206, 119, - nil, 119, 206, 206, nil, nil, nil, 206, nil, 206, - 206, 206, 206, 206, 206, 206, nil, nil, nil, nil, - nil, 206, 206, 206, 206, 206, 206, 206, nil, nil, - 206, nil, nil, nil, nil, nil, nil, 206, nil, nil, - 206, 206, 206, 206, 206, 206, 206, 206, nil, 206, - 206, 206, nil, 206, 206, 206, 206, 206, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 206, nil, nil, - 206, nil, nil, 206, 206, nil, nil, 206, nil, 206, - nil, nil, nil, 206, nil, nil, nil, nil, nil, nil, - nil, nil, 206, nil, nil, nil, nil, 206, 206, 206, - 206, nil, 206, 206, 206, 206, nil, nil, nil, nil, - 206, 206, nil, 207, 207, 207, nil, 207, 206, nil, - 206, 207, 207, nil, nil, nil, 207, nil, 207, 207, - 207, 207, 207, 207, 207, nil, nil, nil, nil, nil, - 207, 207, 207, 207, 207, 207, 207, nil, nil, 207, - nil, nil, nil, nil, nil, nil, 207, nil, nil, 207, - 207, 207, 207, 207, 207, 207, 207, nil, 207, 207, - 207, nil, 207, 207, 207, 207, 207, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 207, nil, nil, 207, - nil, nil, 207, 207, nil, nil, 207, nil, nil, nil, - nil, nil, 207, nil, nil, nil, nil, nil, nil, nil, - nil, 207, nil, nil, nil, nil, 207, 207, 207, 207, - nil, 207, 207, 207, 207, nil, nil, nil, nil, 207, - 207, nil, 208, 208, 208, nil, 208, 207, nil, 207, - 208, 208, nil, nil, nil, 208, nil, 208, 208, 208, - 208, 208, 208, 208, nil, nil, nil, nil, nil, 208, - 208, 208, 208, 208, 208, 208, nil, nil, 208, nil, - nil, nil, nil, nil, nil, 208, nil, nil, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, - nil, 208, 208, 208, 208, 208, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 208, nil, nil, 208, nil, - nil, 208, 208, nil, nil, 208, nil, 208, nil, 208, - nil, 208, nil, nil, 208, nil, nil, nil, nil, nil, - 208, nil, nil, nil, nil, 208, 208, 208, 208, nil, - 208, 208, 208, 208, nil, nil, nil, nil, 208, 208, - nil, 211, 211, 211, nil, 211, 208, nil, 208, 211, - 211, nil, nil, nil, 211, nil, 211, 211, 211, 211, - 211, 211, 211, nil, nil, nil, nil, nil, 211, 211, - 211, 211, 211, 211, 211, nil, nil, 211, nil, nil, - nil, nil, nil, nil, 211, nil, nil, 211, 211, 211, - 211, 211, 211, 211, 211, nil, 211, 211, 211, nil, - 211, 211, 211, 211, 211, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 211, nil, nil, 211, nil, nil, - 211, 211, nil, nil, 211, nil, nil, nil, nil, nil, - 211, nil, nil, nil, nil, nil, nil, nil, nil, 211, - nil, nil, nil, nil, 211, 211, 211, 211, nil, 211, - 211, 211, 211, nil, nil, nil, nil, 211, 211, nil, - 212, 212, 212, nil, 212, 211, nil, 211, 212, 212, - nil, nil, nil, 212, nil, 212, 212, 212, 212, 212, - 212, 212, nil, nil, nil, nil, nil, 212, 212, 212, - 212, 212, 212, 212, nil, nil, 212, nil, nil, nil, - nil, nil, nil, 212, nil, nil, 212, 212, 212, 212, - 212, 212, 212, 212, nil, 212, 212, 212, nil, 212, - 212, 212, 212, 212, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 212, nil, nil, 212, nil, nil, 212, - 212, nil, nil, 212, nil, 212, nil, nil, nil, 212, - nil, nil, nil, nil, nil, nil, nil, nil, 212, nil, - nil, nil, nil, 212, 212, 212, 212, nil, 212, 212, - 212, 212, nil, nil, nil, nil, 212, 212, nil, 213, - 213, 213, nil, 213, 212, nil, 212, 213, 213, nil, - nil, nil, 213, nil, 213, 213, 213, 213, 213, 213, - 213, nil, nil, nil, nil, nil, 213, 213, 213, 213, - 213, 213, 213, nil, nil, 213, nil, nil, nil, nil, - nil, nil, 213, nil, nil, 213, 213, 213, 213, 213, - 213, 213, 213, nil, 213, 213, 213, nil, 213, 213, - 213, 213, 213, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 213, nil, nil, 213, nil, nil, 213, 213, - nil, nil, 213, nil, nil, nil, nil, nil, 213, nil, - nil, nil, nil, nil, nil, nil, nil, 213, nil, nil, - nil, nil, 213, 213, 213, 213, nil, 213, 213, 213, - 213, nil, nil, nil, nil, 213, 213, nil, 214, 214, - 214, nil, 214, 213, nil, 213, 214, 214, nil, nil, - nil, 214, nil, 214, 214, 214, 214, 214, 214, 214, - nil, nil, nil, nil, nil, 214, 214, 214, 214, 214, - 214, 214, nil, nil, 214, nil, nil, nil, nil, nil, - nil, 214, nil, nil, 214, 214, 214, 214, 214, 214, - 214, 214, nil, 214, 214, 214, nil, 214, 214, 214, - 214, 214, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 214, nil, nil, 214, nil, nil, 214, 214, nil, - nil, 214, nil, nil, nil, nil, nil, 214, nil, nil, - nil, nil, nil, nil, nil, nil, 214, nil, nil, nil, - nil, 214, 214, 214, 214, nil, 214, 214, 214, 214, - nil, nil, nil, nil, 214, 214, nil, 215, 215, 215, - nil, 215, 214, nil, 214, 215, 215, nil, nil, nil, - 215, nil, 215, 215, 215, 215, 215, 215, 215, nil, - nil, nil, nil, nil, 215, 215, 215, 215, 215, 215, - 215, nil, nil, 215, nil, nil, nil, nil, nil, nil, - 215, nil, nil, 215, 215, 215, 215, 215, 215, 215, - 215, nil, 215, 215, 215, nil, 215, 215, 215, 215, - 215, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 215, nil, nil, 215, nil, nil, 215, 215, nil, nil, - 215, nil, nil, nil, nil, nil, 215, nil, nil, nil, - nil, nil, nil, nil, nil, 215, nil, nil, nil, nil, - 215, 215, 215, 215, nil, 215, 215, 215, 215, nil, - nil, nil, nil, 215, 215, nil, 216, 216, 216, nil, - 216, 215, nil, 215, 216, 216, nil, nil, nil, 216, - nil, 216, 216, 216, 216, 216, 216, 216, nil, nil, - nil, nil, nil, 216, 216, 216, 216, 216, 216, 216, - nil, nil, 216, nil, nil, nil, nil, nil, nil, 216, - nil, nil, 216, 216, 216, 216, 216, 216, 216, 216, - nil, 216, 216, 216, nil, 216, 216, 216, 216, 216, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 216, - nil, nil, 216, nil, nil, 216, 216, nil, nil, 216, - nil, nil, nil, nil, nil, 216, nil, nil, nil, nil, - nil, nil, nil, nil, 216, nil, nil, nil, nil, 216, - 216, 216, 216, nil, 216, 216, 216, 216, nil, nil, - nil, nil, 216, 216, 216, 227, 227, 227, nil, 227, - 216, nil, 216, 227, 227, nil, nil, nil, 227, nil, - 227, 227, 227, 227, 227, 227, 227, nil, nil, nil, - nil, nil, 227, 227, 227, 227, 227, 227, 227, nil, - nil, 227, nil, nil, nil, nil, nil, nil, 227, nil, - nil, 227, 227, 227, 227, 227, 227, 227, 227, nil, - 227, 227, 227, nil, 227, 227, 227, 227, 227, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 227, nil, - nil, 227, nil, nil, 227, 227, nil, nil, 227, nil, - nil, nil, nil, nil, 227, nil, nil, nil, nil, nil, - nil, nil, nil, 227, nil, nil, nil, nil, 227, 227, - 227, 227, nil, 227, 227, 227, 227, nil, nil, nil, - nil, 227, 227, nil, 230, 230, 230, nil, 230, 227, - nil, 227, 230, 230, nil, nil, nil, 230, nil, 230, - 230, 230, 230, 230, 230, 230, nil, nil, nil, nil, - nil, 230, 230, 230, 230, 230, 230, 230, nil, nil, - 230, nil, nil, nil, nil, nil, nil, 230, nil, nil, - 230, 230, 230, 230, 230, 230, 230, 230, nil, 230, - 230, 230, nil, 230, 230, 230, 230, 230, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 230, nil, nil, - 230, nil, nil, 230, 230, nil, nil, 230, nil, nil, - nil, nil, nil, 230, nil, nil, nil, nil, nil, nil, - nil, nil, 230, nil, nil, nil, nil, 230, 230, 230, - 230, nil, 230, 230, 230, 230, nil, nil, nil, nil, - 230, 230, nil, 231, 231, 231, nil, 231, 230, nil, - 230, 231, 231, nil, nil, nil, 231, nil, 231, 231, - 231, 231, 231, 231, 231, nil, nil, nil, nil, nil, - 231, 231, 231, 231, 231, 231, 231, nil, nil, 231, - nil, nil, nil, nil, nil, nil, 231, nil, nil, 231, - 231, 231, 231, 231, 231, 231, 231, nil, 231, 231, - 231, nil, 231, 231, 231, 231, 231, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 231, nil, nil, 231, - nil, nil, 231, 231, nil, nil, 231, nil, nil, nil, - nil, nil, 231, nil, nil, nil, nil, nil, nil, nil, - nil, 231, nil, nil, nil, nil, 231, 231, 231, 231, - nil, 231, 231, 231, 231, nil, nil, nil, nil, 231, - 231, nil, 232, 232, 232, nil, 232, 231, nil, 231, - 232, 232, nil, nil, nil, 232, nil, 232, 232, 232, - 232, 232, 232, 232, nil, nil, nil, nil, nil, 232, - 232, 232, 232, 232, 232, 232, nil, nil, 232, nil, - nil, nil, nil, nil, nil, 232, nil, nil, 232, 232, - 232, 232, 232, 232, 232, 232, nil, 232, 232, 232, - nil, 232, 232, 232, 232, 232, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 232, nil, nil, 232, nil, - nil, 232, 232, nil, nil, 232, nil, nil, nil, nil, - nil, 232, nil, nil, nil, nil, nil, nil, nil, nil, - 232, nil, nil, nil, nil, 232, 232, 232, 232, nil, - 232, 232, 232, 232, nil, nil, nil, nil, 232, 232, - nil, 233, 233, 233, nil, 233, 232, nil, 232, 233, - 233, nil, nil, nil, 233, nil, 233, 233, 233, 233, - 233, 233, 233, nil, nil, nil, nil, nil, 233, 233, - 233, 233, 233, 233, 233, nil, nil, 233, nil, nil, - nil, nil, nil, nil, 233, nil, nil, 233, 233, 233, - 233, 233, 233, 233, 233, nil, 233, 233, 233, nil, - 233, 233, 233, 233, 233, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 233, nil, nil, 233, nil, nil, - 233, 233, nil, nil, 233, nil, nil, nil, nil, nil, - 233, nil, nil, nil, nil, nil, nil, nil, nil, 233, - nil, nil, nil, nil, 233, 233, 233, 233, nil, 233, - 233, 233, 233, nil, nil, nil, nil, 233, 233, nil, - 234, 234, 234, nil, 234, 233, nil, 233, 234, 234, - nil, nil, nil, 234, nil, 234, 234, 234, 234, 234, - 234, 234, nil, nil, nil, nil, nil, 234, 234, 234, - 234, 234, 234, 234, nil, nil, 234, nil, nil, nil, - nil, nil, nil, 234, nil, nil, 234, 234, 234, 234, - 234, 234, 234, 234, nil, 234, 234, 234, nil, 234, - 234, 234, 234, 234, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 234, nil, nil, 234, nil, nil, 234, - 234, nil, nil, 234, nil, nil, nil, nil, nil, 234, - nil, nil, nil, nil, nil, nil, nil, nil, 234, nil, - nil, nil, nil, 234, 234, 234, 234, nil, 234, 234, - 234, 234, nil, nil, nil, nil, 234, 234, nil, 235, - 235, 235, nil, 235, 234, nil, 234, 235, 235, nil, - nil, nil, 235, nil, 235, 235, 235, 235, 235, 235, - 235, nil, nil, nil, nil, nil, 235, 235, 235, 235, - 235, 235, 235, nil, nil, 235, nil, nil, nil, nil, - nil, nil, 235, nil, nil, 235, 235, 235, 235, 235, - 235, 235, 235, nil, 235, 235, 235, nil, 235, 235, - 235, 235, 235, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 235, nil, nil, 235, nil, nil, 235, 235, - nil, nil, 235, nil, nil, nil, nil, nil, 235, nil, - nil, nil, nil, nil, nil, nil, nil, 235, nil, nil, - nil, nil, 235, 235, 235, 235, nil, 235, 235, 235, - 235, nil, nil, nil, nil, 235, 235, nil, 236, 236, - 236, nil, 236, 235, nil, 235, 236, 236, nil, nil, - nil, 236, nil, 236, 236, 236, 236, 236, 236, 236, - nil, nil, nil, nil, nil, 236, 236, 236, 236, 236, - 236, 236, nil, nil, 236, nil, nil, nil, nil, nil, - nil, 236, nil, nil, 236, 236, 236, 236, 236, 236, - 236, 236, nil, 236, 236, 236, nil, 236, 236, 236, - 236, 236, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 236, nil, nil, 236, nil, nil, 236, 236, nil, - nil, 236, nil, nil, nil, nil, nil, 236, nil, nil, - nil, nil, nil, nil, nil, nil, 236, nil, nil, nil, - nil, 236, 236, 236, 236, nil, 236, 236, 236, 236, - nil, nil, nil, nil, 236, 236, nil, 237, 237, 237, - nil, 237, 236, nil, 236, 237, 237, nil, nil, nil, - 237, nil, 237, 237, 237, 237, 237, 237, 237, nil, - nil, nil, nil, nil, 237, 237, 237, 237, 237, 237, - 237, nil, nil, 237, nil, nil, nil, nil, nil, nil, - 237, nil, nil, 237, 237, 237, 237, 237, 237, 237, - 237, nil, 237, 237, 237, nil, 237, 237, 237, 237, - 237, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 237, nil, nil, 237, nil, nil, 237, 237, nil, nil, - 237, nil, nil, nil, nil, nil, 237, nil, nil, nil, - nil, nil, nil, nil, nil, 237, nil, nil, nil, nil, - 237, 237, 237, 237, nil, 237, 237, 237, 237, nil, - nil, nil, nil, 237, 237, nil, 238, 238, 238, nil, - 238, 237, nil, 237, 238, 238, nil, nil, nil, 238, - nil, 238, 238, 238, 238, 238, 238, 238, nil, nil, - nil, nil, nil, 238, 238, 238, 238, 238, 238, 238, - nil, nil, 238, nil, nil, nil, nil, nil, nil, 238, - nil, nil, 238, 238, 238, 238, 238, 238, 238, 238, - nil, 238, 238, 238, nil, 238, 238, 238, 238, 238, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 238, - nil, nil, 238, nil, nil, 238, 238, nil, nil, 238, - nil, nil, nil, nil, nil, 238, nil, nil, nil, nil, - nil, nil, nil, nil, 238, nil, nil, nil, nil, 238, - 238, 238, 238, nil, 238, 238, 238, 238, nil, nil, - nil, nil, 238, 238, nil, 239, 239, 239, nil, 239, - 238, nil, 238, 239, 239, nil, nil, nil, 239, nil, - 239, 239, 239, 239, 239, 239, 239, nil, nil, nil, - nil, nil, 239, 239, 239, 239, 239, 239, 239, nil, - nil, 239, nil, nil, nil, nil, nil, nil, 239, nil, - nil, 239, 239, 239, 239, 239, 239, 239, 239, nil, - 239, 239, 239, nil, 239, 239, 239, 239, 239, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 239, nil, - nil, 239, nil, nil, 239, 239, nil, nil, 239, nil, - nil, nil, nil, nil, 239, nil, nil, nil, nil, nil, - nil, nil, nil, 239, nil, nil, nil, nil, 239, 239, - 239, 239, nil, 239, 239, 239, 239, nil, nil, nil, - nil, 239, 239, nil, 240, 240, 240, nil, 240, 239, - nil, 239, 240, 240, nil, nil, nil, 240, nil, 240, - 240, 240, 240, 240, 240, 240, nil, nil, nil, nil, - nil, 240, 240, 240, 240, 240, 240, 240, nil, nil, - 240, nil, nil, nil, nil, nil, nil, 240, nil, nil, - 240, 240, 240, 240, 240, 240, 240, 240, nil, 240, - 240, 240, nil, 240, 240, 240, 240, 240, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 240, nil, nil, - 240, nil, nil, 240, 240, nil, nil, 240, nil, nil, - nil, nil, nil, 240, nil, nil, nil, nil, nil, nil, - nil, nil, 240, nil, nil, nil, nil, 240, 240, 240, - 240, nil, 240, 240, 240, 240, nil, nil, nil, nil, - 240, 240, nil, 241, 241, 241, nil, 241, 240, nil, - 240, 241, 241, nil, nil, nil, 241, nil, 241, 241, - 241, 241, 241, 241, 241, nil, nil, nil, nil, nil, - 241, 241, 241, 241, 241, 241, 241, nil, nil, 241, - nil, nil, nil, nil, nil, nil, 241, nil, nil, 241, - 241, 241, 241, 241, 241, 241, 241, nil, 241, 241, - 241, nil, 241, 241, 241, 241, 241, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 241, nil, nil, 241, - nil, nil, 241, 241, nil, nil, 241, nil, nil, nil, - nil, nil, 241, nil, nil, nil, nil, nil, nil, nil, - nil, 241, nil, nil, nil, nil, 241, 241, 241, 241, - nil, 241, 241, 241, 241, nil, nil, nil, nil, 241, - 241, nil, 242, 242, 242, nil, 242, 241, nil, 241, - 242, 242, nil, nil, nil, 242, nil, 242, 242, 242, - 242, 242, 242, 242, nil, nil, nil, nil, nil, 242, - 242, 242, 242, 242, 242, 242, nil, nil, 242, nil, - nil, nil, nil, nil, nil, 242, nil, nil, 242, 242, - 242, 242, 242, 242, 242, 242, nil, 242, 242, 242, - nil, 242, 242, 242, 242, 242, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 242, nil, nil, 242, nil, - nil, 242, 242, nil, nil, 242, nil, nil, nil, nil, - nil, 242, nil, nil, nil, nil, nil, nil, nil, nil, - 242, nil, nil, nil, nil, 242, 242, 242, 242, nil, - 242, 242, 242, 242, nil, nil, nil, nil, 242, 242, - nil, 243, 243, 243, nil, 243, 242, nil, 242, 243, - 243, nil, nil, nil, 243, nil, 243, 243, 243, 243, - 243, 243, 243, nil, nil, nil, nil, nil, 243, 243, - 243, 243, 243, 243, 243, nil, nil, 243, nil, nil, - nil, nil, nil, nil, 243, nil, nil, 243, 243, 243, - 243, 243, 243, 243, 243, nil, 243, 243, 243, nil, - 243, 243, 243, 243, 243, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 243, nil, nil, 243, nil, nil, - 243, 243, nil, nil, 243, nil, nil, nil, nil, nil, - 243, nil, nil, nil, nil, nil, nil, nil, nil, 243, - nil, nil, nil, nil, 243, 243, 243, 243, nil, 243, - 243, 243, 243, nil, nil, nil, nil, 243, 243, nil, - 244, 244, 244, nil, 244, 243, nil, 243, 244, 244, - nil, nil, nil, 244, nil, 244, 244, 244, 244, 244, - 244, 244, nil, nil, nil, nil, nil, 244, 244, 244, - 244, 244, 244, 244, nil, nil, 244, nil, nil, nil, - nil, nil, nil, 244, nil, nil, 244, 244, 244, 244, - 244, 244, 244, 244, nil, 244, 244, 244, nil, 244, - 244, 244, 244, 244, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 244, nil, nil, 244, nil, nil, 244, - 244, nil, nil, 244, nil, nil, nil, nil, nil, 244, - nil, nil, nil, nil, nil, nil, nil, nil, 244, nil, - nil, nil, nil, 244, 244, 244, 244, nil, 244, 244, - 244, 244, nil, nil, nil, nil, 244, 244, nil, 245, - 245, 245, nil, 245, 244, nil, 244, 245, 245, nil, - nil, nil, 245, nil, 245, 245, 245, 245, 245, 245, - 245, nil, nil, nil, nil, nil, 245, 245, 245, 245, - 245, 245, 245, nil, nil, 245, nil, nil, nil, nil, - nil, nil, 245, nil, nil, 245, 245, 245, 245, 245, - 245, 245, 245, nil, 245, 245, 245, nil, 245, 245, - 245, 245, 245, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 245, nil, nil, 245, nil, nil, 245, 245, - nil, nil, 245, nil, nil, nil, nil, nil, 245, nil, - nil, nil, nil, nil, nil, nil, nil, 245, nil, nil, - nil, nil, 245, 245, 245, 245, nil, 245, 245, 245, - 245, nil, nil, nil, nil, 245, 245, nil, 246, 246, - 246, nil, 246, 245, nil, 245, 246, 246, nil, nil, - nil, 246, nil, 246, 246, 246, 246, 246, 246, 246, - nil, nil, nil, nil, nil, 246, 246, 246, 246, 246, - 246, 246, nil, nil, 246, nil, nil, nil, nil, nil, - nil, 246, nil, nil, 246, 246, 246, 246, 246, 246, - 246, 246, nil, 246, 246, 246, nil, 246, 246, 246, - 246, 246, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 246, nil, nil, 246, nil, nil, 246, 246, nil, - nil, 246, nil, nil, nil, nil, nil, 246, nil, nil, - nil, nil, nil, nil, nil, nil, 246, nil, nil, nil, - nil, 246, 246, 246, 246, nil, 246, 246, 246, 246, - nil, nil, nil, nil, 246, 246, nil, 247, 247, 247, - nil, 247, 246, nil, 246, 247, 247, nil, nil, nil, - 247, nil, 247, 247, 247, 247, 247, 247, 247, nil, - nil, nil, nil, nil, 247, 247, 247, 247, 247, 247, - 247, nil, nil, 247, nil, nil, nil, nil, nil, nil, - 247, nil, nil, 247, 247, 247, 247, 247, 247, 247, - 247, nil, 247, 247, 247, nil, 247, 247, 247, 247, - 247, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 247, nil, nil, 247, nil, nil, 247, 247, nil, nil, - 247, nil, nil, nil, nil, nil, 247, nil, nil, nil, - nil, nil, nil, nil, nil, 247, nil, nil, nil, nil, - 247, 247, 247, 247, nil, 247, 247, 247, 247, nil, - nil, nil, nil, 247, 247, nil, 248, 248, 248, nil, - 248, 247, nil, 247, 248, 248, nil, nil, nil, 248, - nil, 248, 248, 248, 248, 248, 248, 248, nil, nil, - nil, nil, nil, 248, 248, 248, 248, 248, 248, 248, - nil, nil, 248, nil, nil, nil, nil, nil, nil, 248, - nil, nil, 248, 248, 248, 248, 248, 248, 248, 248, - nil, 248, 248, 248, nil, 248, 248, 248, 248, 248, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 248, - nil, nil, 248, nil, nil, 248, 248, nil, nil, 248, - nil, nil, nil, nil, nil, 248, nil, nil, nil, nil, - nil, nil, nil, nil, 248, nil, nil, nil, nil, 248, - 248, 248, 248, nil, 248, 248, 248, 248, nil, nil, - nil, nil, 248, 248, nil, 249, 249, 249, nil, 249, - 248, nil, 248, 249, 249, nil, nil, nil, 249, nil, - 249, 249, 249, 249, 249, 249, 249, nil, nil, nil, - nil, nil, 249, 249, 249, 249, 249, 249, 249, nil, - nil, 249, nil, nil, nil, nil, nil, nil, 249, nil, - nil, 249, 249, 249, 249, 249, 249, 249, 249, nil, - 249, 249, 249, nil, 249, 249, 249, 249, 249, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 249, nil, - nil, 249, nil, nil, 249, 249, nil, nil, 249, nil, - nil, nil, nil, nil, 249, nil, nil, nil, nil, nil, - nil, nil, nil, 249, nil, nil, nil, nil, 249, 249, - 249, 249, nil, 249, 249, 249, 249, nil, nil, nil, - nil, 249, 249, nil, 250, 250, 250, nil, 250, 249, - nil, 249, 250, 250, nil, nil, nil, 250, nil, 250, - 250, 250, 250, 250, 250, 250, nil, nil, nil, nil, - nil, 250, 250, 250, 250, 250, 250, 250, nil, nil, - 250, nil, nil, nil, nil, nil, nil, 250, nil, nil, - 250, 250, 250, 250, 250, 250, 250, 250, nil, 250, - 250, 250, nil, 250, 250, 250, 250, 250, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 250, nil, nil, - 250, nil, nil, 250, 250, nil, nil, 250, nil, nil, - nil, nil, nil, 250, nil, nil, nil, nil, nil, nil, - nil, nil, 250, nil, nil, nil, nil, 250, 250, 250, - 250, nil, 250, 250, 250, 250, nil, nil, nil, nil, - 250, 250, nil, 251, 251, 251, nil, 251, 250, nil, - 250, 251, 251, nil, nil, nil, 251, nil, 251, 251, - 251, 251, 251, 251, 251, nil, nil, nil, nil, nil, - 251, 251, 251, 251, 251, 251, 251, nil, nil, 251, - nil, nil, nil, nil, nil, nil, 251, nil, nil, 251, - 251, 251, 251, 251, 251, 251, 251, nil, 251, 251, - 251, nil, 251, 251, 251, 251, 251, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 251, nil, nil, 251, - nil, nil, 251, 251, nil, nil, 251, nil, nil, nil, - nil, nil, 251, nil, nil, nil, nil, nil, nil, nil, - nil, 251, nil, nil, nil, nil, 251, 251, 251, 251, - nil, 251, 251, 251, 251, nil, nil, nil, nil, 251, - 251, nil, 252, 252, 252, nil, 252, 251, nil, 251, - 252, 252, nil, nil, nil, 252, nil, 252, 252, 252, - 252, 252, 252, 252, nil, nil, nil, nil, nil, 252, - 252, 252, 252, 252, 252, 252, nil, nil, 252, nil, - nil, nil, nil, nil, nil, 252, nil, nil, 252, 252, - 252, 252, 252, 252, 252, 252, nil, 252, 252, 252, - nil, 252, 252, 252, 252, 252, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 252, nil, nil, 252, nil, - nil, 252, 252, nil, nil, 252, nil, nil, nil, nil, - nil, 252, nil, nil, nil, nil, nil, nil, nil, nil, - 252, nil, nil, nil, nil, 252, 252, 252, 252, nil, - 252, 252, 252, 252, nil, nil, nil, nil, 252, 252, - nil, 253, 253, 253, nil, 253, 252, nil, 252, 253, - 253, nil, nil, nil, 253, nil, 253, 253, 253, 253, - 253, 253, 253, nil, nil, nil, nil, nil, 253, 253, - 253, 253, 253, 253, 253, nil, nil, 253, nil, nil, - nil, nil, nil, nil, 253, nil, nil, 253, 253, 253, - 253, 253, 253, 253, 253, nil, 253, 253, 253, nil, - 253, 253, 253, 253, 253, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 253, nil, nil, 253, nil, nil, - 253, 253, nil, nil, 253, nil, nil, nil, nil, nil, - 253, nil, nil, nil, nil, nil, nil, nil, nil, 253, - nil, nil, nil, nil, 253, 253, 253, 253, nil, 253, - 253, 253, 253, nil, nil, nil, nil, 253, 253, nil, - 254, 254, 254, nil, 254, 253, nil, 253, 254, 254, - nil, nil, nil, 254, nil, 254, 254, 254, 254, 254, - 254, 254, nil, nil, nil, nil, nil, 254, 254, 254, - 254, 254, 254, 254, nil, nil, 254, nil, nil, nil, - nil, nil, nil, 254, nil, nil, 254, 254, 254, 254, - 254, 254, 254, 254, nil, 254, 254, 254, nil, 254, - 254, 254, 254, 254, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 254, nil, nil, 254, nil, nil, 254, - 254, nil, nil, 254, nil, nil, nil, nil, nil, 254, - nil, nil, nil, nil, nil, nil, nil, nil, 254, nil, - nil, nil, nil, 254, 254, 254, 254, nil, 254, 254, - 254, 254, nil, nil, nil, nil, 254, 254, nil, 255, - 255, 255, nil, 255, 254, nil, 254, 255, 255, nil, - nil, nil, 255, nil, 255, 255, 255, 255, 255, 255, - 255, nil, nil, nil, nil, nil, 255, 255, 255, 255, - 255, 255, 255, nil, nil, 255, nil, nil, nil, nil, - nil, nil, 255, nil, nil, 255, 255, 255, 255, 255, - 255, 255, 255, nil, 255, 255, 255, nil, 255, 255, - 255, 255, 255, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 255, nil, nil, 255, nil, nil, 255, 255, - nil, nil, 255, nil, nil, nil, nil, nil, 255, nil, - nil, nil, nil, nil, nil, nil, nil, 255, nil, nil, - nil, nil, 255, 255, 255, 255, nil, 255, 255, 255, - 255, nil, nil, nil, nil, 255, 255, nil, 262, 262, - 262, nil, 262, 255, nil, 255, 262, 262, nil, nil, - nil, 262, nil, 262, 262, 262, 262, 262, 262, 262, - nil, nil, nil, nil, nil, 262, 262, 262, 262, 262, - 262, 262, nil, nil, 262, nil, nil, nil, nil, nil, - nil, 262, nil, nil, 262, 262, 262, 262, 262, 262, - 262, 262, 262, 262, 262, 262, nil, 262, 262, 262, - 262, 262, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 262, nil, nil, 262, nil, nil, 262, 262, nil, - nil, 262, nil, 262, nil, 262, nil, 262, nil, nil, - 262, nil, nil, nil, nil, nil, 262, nil, nil, nil, - nil, 262, 262, 262, 262, nil, 262, 262, 262, 262, - nil, nil, nil, nil, 262, 262, nil, 263, 263, 263, - nil, 263, 262, nil, 262, 263, 263, nil, nil, nil, - 263, nil, 263, 263, 263, 263, 263, 263, 263, nil, - nil, nil, nil, nil, 263, 263, 263, 263, 263, 263, - 263, nil, nil, 263, nil, nil, nil, nil, nil, nil, - 263, nil, nil, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, nil, 263, 263, 263, 263, - 263, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 263, nil, nil, 263, nil, nil, 263, 263, nil, nil, - 263, nil, 263, nil, 263, nil, 263, nil, nil, 263, - nil, nil, nil, nil, nil, 263, nil, nil, nil, nil, - 263, 263, 263, 263, nil, 263, 263, 263, 263, nil, - nil, nil, nil, 263, 263, nil, 271, 271, 271, nil, - 271, 263, nil, 263, 271, 271, nil, nil, nil, 271, - nil, 271, 271, 271, 271, 271, 271, 271, nil, nil, - nil, nil, nil, 271, 271, 271, 271, 271, 271, 271, - nil, nil, 271, nil, nil, nil, nil, nil, nil, 271, - nil, nil, 271, 271, 271, 271, 271, 271, 271, 271, - 271, 271, 271, 271, nil, 271, 271, 271, 271, 271, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 271, - nil, nil, 271, nil, nil, 271, 271, nil, nil, 271, - nil, 271, nil, 271, nil, 271, nil, nil, 271, nil, - nil, nil, nil, nil, 271, nil, nil, nil, nil, 271, - 271, 271, 271, nil, 271, 271, 271, 271, nil, nil, - nil, nil, 271, 271, 271, 278, 278, 278, nil, 278, - 271, nil, 271, 278, 278, nil, nil, nil, 278, nil, - 278, 278, 278, 278, 278, 278, 278, nil, nil, nil, - nil, nil, 278, 278, 278, 278, 278, 278, 278, nil, - nil, 278, nil, nil, nil, nil, nil, nil, 278, nil, - nil, 278, 278, 278, 278, 278, 278, 278, 278, nil, - 278, 278, 278, nil, 278, 278, 278, 278, 278, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 278, nil, - nil, 278, nil, nil, 278, 278, nil, nil, 278, nil, - nil, nil, nil, nil, 278, nil, nil, nil, nil, nil, - nil, nil, nil, 278, nil, nil, nil, nil, 278, 278, - 278, 278, nil, 278, 278, 278, 278, nil, nil, nil, - nil, 278, 278, nil, 280, 280, 280, nil, 280, 278, - nil, 278, 280, 280, nil, nil, nil, 280, nil, 280, - 280, 280, 280, 280, 280, 280, nil, nil, nil, nil, - nil, 280, 280, 280, 280, 280, 280, 280, nil, nil, - 280, nil, nil, nil, nil, nil, nil, 280, nil, nil, - 280, 280, 280, 280, 280, 280, 280, 280, nil, 280, - 280, 280, nil, 280, 280, 280, 280, 280, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 280, nil, nil, - 280, nil, nil, 280, 280, nil, nil, 280, nil, nil, - nil, nil, nil, 280, nil, nil, nil, nil, nil, nil, - nil, nil, 280, nil, nil, nil, nil, 280, 280, 280, - 280, nil, 280, 280, 280, 280, nil, nil, nil, nil, - 280, 280, nil, 282, 282, 282, nil, 282, 280, nil, - 280, 282, 282, nil, nil, nil, 282, nil, 282, 282, - 282, 282, 282, 282, 282, nil, nil, nil, nil, nil, - 282, 282, 282, 282, 282, 282, 282, nil, nil, 282, - nil, nil, nil, nil, nil, nil, 282, nil, nil, 282, - 282, 282, 282, 282, 282, 282, 282, nil, 282, 282, - 282, nil, 282, 282, 282, 282, 282, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 282, nil, nil, 282, - nil, nil, 282, 282, nil, nil, 282, nil, nil, nil, - nil, nil, 282, nil, nil, nil, nil, nil, nil, nil, - nil, 282, nil, nil, nil, nil, 282, 282, 282, 282, - nil, 282, 282, 282, 282, nil, nil, nil, nil, 282, - 282, nil, 283, 283, 283, nil, 283, 282, nil, 282, - 283, 283, nil, nil, nil, 283, nil, 283, 283, 283, - 283, 283, 283, 283, nil, nil, nil, nil, nil, 283, - 283, 283, 283, 283, 283, 283, nil, nil, 283, nil, - nil, nil, nil, nil, nil, 283, nil, nil, 283, 283, - 283, 283, 283, 283, 283, 283, nil, 283, 283, 283, - nil, 283, 283, 283, 283, 283, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 283, nil, nil, 283, nil, - nil, 283, 283, nil, nil, 283, nil, nil, nil, nil, - nil, 283, nil, nil, nil, nil, nil, nil, nil, nil, - 283, nil, nil, nil, nil, 283, 283, 283, 283, nil, - 283, 283, 283, 283, nil, nil, nil, nil, 283, 283, - nil, 288, 288, 288, 288, 288, 283, nil, 283, 288, - 288, nil, nil, nil, 288, nil, 288, 288, 288, 288, - 288, 288, 288, nil, nil, nil, nil, nil, 288, 288, - 288, 288, 288, 288, 288, nil, nil, 288, nil, nil, - nil, nil, nil, 288, 288, nil, 288, 288, 288, 288, - 288, 288, 288, 288, 288, nil, 288, 288, 288, nil, - 288, 288, 288, 288, 288, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 288, nil, nil, 288, nil, nil, - 288, 288, nil, nil, 288, nil, 288, nil, nil, nil, - 288, nil, nil, nil, nil, nil, nil, nil, nil, 288, - nil, nil, nil, nil, 288, 288, 288, 288, nil, 288, - 288, 288, 288, nil, nil, nil, nil, 288, 288, nil, - 296, 296, 296, nil, 296, 288, nil, 288, 296, 296, - nil, nil, nil, 296, nil, 296, 296, 296, 296, 296, - 296, 296, nil, nil, nil, nil, nil, 296, 296, 296, - 296, 296, 296, 296, nil, nil, 296, nil, nil, nil, - nil, nil, nil, 296, nil, nil, 296, 296, 296, 296, - 296, 296, 296, 296, nil, 296, 296, 296, nil, 296, - 296, nil, nil, 296, 424, 424, 424, 424, 424, 424, - 424, 424, 424, 424, 424, nil, 424, 424, nil, nil, - 424, 424, nil, 296, nil, nil, 296, nil, nil, 296, - 296, nil, nil, 296, nil, nil, 424, nil, 424, nil, - 424, 424, nil, 424, 424, 424, 424, 424, nil, 424, - nil, nil, nil, 296, 296, 296, 296, nil, 296, 296, - 296, 296, nil, nil, nil, nil, 296, 296, nil, 424, - nil, 296, nil, nil, 296, nil, 296, 313, 313, 313, - nil, 313, nil, nil, nil, 313, 313, nil, nil, nil, - 313, nil, 313, 313, 313, 313, 313, 313, 313, nil, - nil, nil, nil, nil, 313, 313, 313, 313, 313, 313, - 313, nil, nil, 313, nil, nil, nil, nil, nil, nil, - 313, nil, nil, 313, 313, 313, 313, 313, 313, 313, - 313, nil, 313, 313, 313, nil, 313, 313, nil, nil, - 313, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 313, nil, nil, 313, nil, nil, 313, 313, nil, nil, - 313, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 313, 313, 313, 313, nil, 313, 313, 313, 313, nil, - nil, nil, nil, 313, 313, nil, 322, 322, 322, nil, - 322, 313, nil, 313, 322, 322, nil, nil, nil, 322, - nil, 322, 322, 322, 322, 322, 322, 322, nil, nil, - nil, nil, nil, 322, 322, 322, 322, 322, 322, 322, - nil, nil, 322, nil, nil, nil, nil, nil, nil, 322, - nil, nil, 322, 322, 322, 322, 322, 322, 322, 322, - nil, 322, 322, 322, nil, 322, 322, 322, 322, 322, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 322, - nil, nil, 322, 322, nil, 322, 322, nil, nil, 322, - nil, nil, nil, nil, nil, 322, nil, nil, nil, nil, - nil, nil, nil, nil, 322, nil, nil, nil, nil, 322, - 322, 322, 322, nil, 322, 322, 322, 322, nil, nil, - nil, nil, 322, 322, nil, 324, 324, 324, nil, 324, - 322, nil, 322, 324, 324, nil, nil, nil, 324, nil, - 324, 324, 324, 324, 324, 324, 324, nil, nil, nil, - nil, nil, 324, 324, 324, 324, 324, 324, 324, nil, - nil, 324, nil, nil, nil, nil, nil, nil, 324, nil, - nil, 324, 324, 324, 324, 324, 324, 324, 324, nil, - 324, 324, 324, nil, 324, 324, 324, 324, 324, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 324, nil, - nil, 324, nil, nil, 324, 324, nil, nil, 324, nil, - nil, nil, nil, nil, 324, nil, nil, nil, nil, nil, - nil, nil, nil, 324, nil, nil, nil, nil, 324, 324, - 324, 324, nil, 324, 324, 324, 324, nil, nil, nil, - nil, 324, 324, nil, 338, 338, 338, nil, 338, 324, - nil, 324, 338, 338, nil, nil, nil, 338, nil, 338, - 338, 338, 338, 338, 338, 338, nil, nil, nil, nil, - nil, 338, 338, 338, 338, 338, 338, 338, nil, nil, - 338, nil, nil, nil, nil, nil, nil, 338, nil, nil, - 338, 338, 338, 338, 338, 338, 338, 338, nil, 338, - 338, 338, nil, 338, 338, 338, 338, 338, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 338, nil, nil, - 338, nil, nil, 338, 338, nil, nil, 338, nil, nil, - nil, nil, nil, 338, nil, nil, nil, nil, nil, nil, - nil, nil, 338, nil, nil, nil, nil, 338, 338, 338, - 338, nil, 338, 338, 338, 338, nil, nil, nil, nil, - 338, 338, nil, 339, 339, 339, nil, 339, 338, nil, - 338, 339, 339, nil, nil, nil, 339, nil, 339, 339, - 339, 339, 339, 339, 339, nil, nil, nil, nil, nil, - 339, 339, 339, 339, 339, 339, 339, nil, nil, 339, - nil, nil, nil, nil, nil, nil, 339, nil, nil, 339, - 339, 339, 339, 339, 339, 339, 339, nil, 339, 339, - 339, nil, 339, 339, 339, 339, 339, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 339, nil, nil, 339, - nil, nil, 339, 339, nil, nil, 339, nil, nil, nil, - nil, nil, 339, nil, nil, nil, nil, nil, nil, nil, - nil, 339, nil, nil, nil, nil, 339, 339, 339, 339, - nil, 339, 339, 339, 339, nil, nil, nil, nil, 339, - 339, nil, 358, 358, 358, nil, 358, 339, nil, 339, - 358, 358, nil, nil, nil, 358, nil, 358, 358, 358, - 358, 358, 358, 358, nil, nil, nil, nil, nil, 358, - 358, 358, 358, 358, 358, 358, nil, nil, 358, nil, - nil, nil, nil, nil, nil, 358, nil, nil, 358, 358, - 358, 358, 358, 358, 358, 358, nil, 358, 358, 358, - nil, 358, 358, 358, 358, 358, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 358, nil, nil, 358, nil, - nil, 358, 358, nil, nil, 358, nil, nil, nil, nil, - nil, 358, nil, nil, nil, nil, nil, nil, nil, nil, - 358, nil, nil, nil, nil, 358, 358, 358, 358, nil, - 358, 358, 358, 358, nil, nil, nil, nil, 358, 358, - nil, 374, 374, 374, nil, 374, 358, nil, 358, 374, - 374, nil, nil, nil, 374, nil, 374, 374, 374, 374, - 374, 374, 374, nil, nil, nil, nil, nil, 374, 374, - 374, 374, 374, 374, 374, nil, nil, 374, nil, nil, - nil, nil, nil, nil, 374, nil, nil, 374, 374, 374, - 374, 374, 374, 374, 374, nil, 374, 374, 374, nil, - 374, 374, 374, 374, 374, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 374, nil, nil, 374, nil, nil, - 374, 374, nil, nil, 374, nil, nil, nil, nil, nil, - 374, nil, nil, nil, nil, nil, nil, nil, nil, 374, - nil, nil, nil, nil, 374, 374, 374, 374, nil, 374, - 374, 374, 374, nil, nil, nil, nil, 374, 374, nil, - 402, 402, 402, nil, 402, 374, nil, 374, 402, 402, - nil, nil, nil, 402, nil, 402, 402, 402, 402, 402, - 402, 402, nil, nil, nil, nil, nil, 402, 402, 402, - 402, 402, 402, 402, nil, nil, 402, nil, nil, nil, - nil, nil, nil, 402, nil, nil, 402, 402, 402, 402, - 402, 402, 402, 402, nil, 402, 402, 402, nil, 402, - 402, 402, 402, 402, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 402, nil, nil, 402, nil, nil, 402, - 402, nil, nil, 402, nil, nil, nil, nil, nil, 402, - nil, nil, nil, nil, nil, nil, nil, nil, 402, nil, - nil, nil, nil, 402, 402, 402, 402, nil, 402, 402, - 402, 402, nil, nil, nil, nil, 402, 402, nil, 439, - 439, 439, nil, 439, 402, nil, 402, 439, 439, nil, - nil, nil, 439, nil, 439, 439, 439, 439, 439, 439, - 439, nil, nil, nil, nil, nil, 439, 439, 439, 439, - 439, 439, 439, nil, nil, 439, nil, nil, nil, nil, - nil, nil, 439, nil, nil, 439, 439, 439, 439, 439, - 439, 439, 439, 439, 439, 439, 439, nil, 439, 439, - 439, 439, 439, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 439, nil, nil, 439, nil, nil, 439, 439, - nil, nil, 439, nil, 439, nil, 439, nil, 439, nil, - nil, 439, nil, nil, nil, nil, nil, 439, nil, nil, - nil, nil, 439, 439, 439, 439, nil, 439, 439, 439, - 439, nil, nil, nil, nil, 439, 439, nil, 441, 441, - 441, nil, 441, 439, nil, 439, 441, 441, nil, nil, - nil, 441, nil, 441, 441, 441, 441, 441, 441, 441, - nil, nil, nil, nil, nil, 441, 441, 441, 441, 441, - 441, 441, nil, nil, 441, nil, nil, nil, nil, nil, - nil, 441, nil, nil, 441, 441, 441, 441, 441, 441, - 441, 441, nil, 441, 441, 441, nil, 441, 441, 441, - 441, 441, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 441, nil, nil, 441, nil, nil, 441, 441, nil, - nil, 441, nil, nil, nil, nil, nil, 441, nil, nil, - nil, nil, nil, nil, nil, nil, 441, nil, nil, nil, - nil, 441, 441, 441, 441, nil, 441, 441, 441, 441, - nil, nil, nil, nil, 441, 441, nil, 442, 442, 442, - nil, 442, 441, nil, 441, 442, 442, nil, nil, nil, - 442, nil, 442, 442, 442, 442, 442, 442, 442, nil, - nil, nil, nil, nil, 442, 442, 442, 442, 442, 442, - 442, nil, nil, 442, nil, nil, nil, nil, nil, nil, - 442, nil, nil, 442, 442, 442, 442, 442, 442, 442, - 442, nil, 442, 442, 442, nil, 442, 442, 442, 442, - 442, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 442, nil, nil, 442, nil, nil, 442, 442, nil, nil, - 442, nil, nil, nil, nil, nil, 442, nil, nil, nil, - nil, nil, nil, nil, nil, 442, nil, nil, nil, nil, - 442, 442, 442, 442, nil, 442, 442, 442, 442, nil, - nil, nil, nil, 442, 442, nil, 443, 443, 443, nil, - 443, 442, nil, 442, 443, 443, nil, nil, nil, 443, - nil, 443, 443, 443, 443, 443, 443, 443, nil, nil, - nil, nil, nil, 443, 443, 443, 443, 443, 443, 443, - nil, nil, 443, nil, nil, nil, nil, nil, nil, 443, - nil, nil, 443, 443, 443, 443, 443, 443, 443, 443, - nil, 443, 443, 443, nil, 443, 443, 443, 443, 443, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 443, - nil, nil, 443, nil, nil, 443, 443, nil, nil, 443, - nil, nil, nil, nil, nil, 443, nil, nil, nil, nil, - nil, nil, nil, nil, 443, nil, nil, nil, nil, 443, - 443, 443, 443, nil, 443, 443, 443, 443, nil, nil, - nil, nil, 443, 443, nil, 483, 483, 483, nil, 483, - 443, nil, 443, 483, 483, nil, nil, nil, 483, nil, - 483, 483, 483, 483, 483, 483, 483, nil, nil, nil, - nil, nil, 483, 483, 483, 483, 483, 483, 483, nil, - nil, 483, nil, nil, nil, nil, nil, nil, 483, nil, - nil, 483, 483, 483, 483, 483, 483, 483, 483, 483, - 483, 483, 483, nil, 483, 483, 483, 483, 483, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 483, nil, - nil, 483, nil, nil, 483, 483, nil, nil, 483, nil, - 483, nil, 483, nil, 483, nil, nil, 483, nil, nil, - nil, nil, nil, 483, nil, nil, nil, nil, 483, 483, - 483, 483, nil, 483, 483, 483, 483, nil, nil, nil, - nil, 483, 483, nil, 485, 485, 485, nil, 485, 483, - nil, 483, 485, 485, nil, nil, nil, 485, nil, 485, - 485, 485, 485, 485, 485, 485, nil, nil, nil, nil, - nil, 485, 485, 485, 485, 485, 485, 485, nil, nil, - 485, nil, nil, nil, nil, nil, nil, 485, nil, nil, - 485, 485, 485, 485, 485, 485, 485, 485, 485, 485, - 485, 485, nil, 485, 485, 485, 485, 485, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 485, nil, nil, - 485, nil, nil, 485, 485, nil, nil, 485, nil, nil, - nil, 485, nil, 485, nil, nil, 485, nil, nil, nil, - nil, nil, 485, nil, nil, nil, nil, 485, 485, 485, - 485, nil, 485, 485, 485, 485, nil, nil, nil, nil, - 485, 485, nil, 487, 487, 487, nil, 487, 485, nil, - 485, 487, 487, nil, nil, nil, 487, nil, 487, 487, - 487, 487, 487, 487, 487, nil, nil, nil, nil, nil, - 487, 487, 487, 487, 487, 487, 487, nil, nil, 487, - nil, nil, nil, nil, nil, nil, 487, nil, nil, 487, - 487, 487, 487, 487, 487, 487, 487, nil, 487, 487, - 487, nil, 487, 487, 487, 487, 487, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 487, nil, nil, 487, - nil, nil, 487, 487, nil, nil, 487, nil, nil, nil, - nil, nil, 487, nil, nil, nil, nil, nil, nil, nil, - nil, 487, nil, nil, nil, nil, 487, 487, 487, 487, - nil, 487, 487, 487, 487, nil, nil, nil, nil, 487, - 487, nil, 492, 492, 492, 492, 492, 487, nil, 487, - 492, 492, nil, nil, nil, 492, nil, 492, 492, 492, - 492, 492, 492, 492, nil, nil, nil, nil, nil, 492, - 492, 492, 492, 492, 492, 492, nil, nil, 492, nil, - nil, nil, nil, nil, 492, 492, 492, 492, 492, 492, - 492, 492, 492, 492, 492, 492, nil, 492, 492, 492, - nil, 492, 492, 492, 492, 492, 469, 469, 469, 469, - 469, 469, 469, 469, 469, 469, 469, nil, 469, 469, - nil, nil, 469, 469, nil, 492, nil, nil, 492, nil, - nil, 492, 492, nil, nil, 492, nil, 492, 469, nil, - 469, 492, 469, 469, nil, 469, 469, 469, 469, 469, - 492, 469, nil, nil, nil, 492, 492, 492, 492, nil, - 492, 492, 492, 492, nil, nil, nil, nil, 492, 492, - 469, 469, nil, nil, nil, 492, 492, nil, 492, 500, - 500, 500, nil, 500, nil, nil, nil, 500, 500, nil, - nil, nil, 500, nil, 500, 500, 500, 500, 500, 500, - 500, nil, nil, nil, nil, nil, 500, 500, 500, 500, - 500, 500, 500, nil, nil, 500, nil, nil, nil, nil, - nil, nil, 500, nil, nil, 500, 500, 500, 500, 500, - 500, 500, 500, nil, 500, 500, 500, nil, 500, 500, - nil, nil, 500, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 500, nil, nil, 500, nil, nil, 500, 500, - nil, nil, 500, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 500, 500, 500, 500, nil, 500, 500, 500, - 500, nil, nil, nil, nil, 500, 500, nil, 502, 502, - 502, nil, 502, 500, nil, 500, 502, 502, nil, nil, - nil, 502, nil, 502, 502, 502, 502, 502, 502, 502, - nil, nil, nil, nil, nil, 502, 502, 502, 502, 502, - 502, 502, nil, nil, 502, nil, nil, nil, nil, nil, - nil, 502, nil, nil, 502, 502, 502, 502, 502, 502, - 502, 502, 502, 502, 502, 502, nil, 502, 502, 502, - 502, 502, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 502, nil, nil, 502, nil, nil, 502, 502, nil, - nil, 502, nil, 502, nil, 502, nil, 502, nil, nil, - 502, nil, nil, nil, nil, nil, 502, nil, nil, nil, - nil, 502, 502, 502, 502, nil, 502, 502, 502, 502, - nil, nil, nil, nil, 502, 502, nil, 509, 509, 509, - nil, 509, 502, nil, 502, 509, 509, nil, nil, nil, - 509, nil, 509, 509, 509, 509, 509, 509, 509, nil, - nil, nil, nil, nil, 509, 509, 509, 509, 509, 509, - 509, nil, nil, 509, nil, nil, nil, nil, nil, nil, - 509, nil, nil, 509, 509, 509, 509, 509, 509, 509, - 509, nil, 509, 509, 509, nil, 509, 509, nil, nil, - 509, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 509, nil, nil, 509, nil, nil, 509, 509, nil, nil, - 509, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 509, 509, 509, 509, nil, 509, 509, 509, 509, nil, - nil, nil, nil, 509, 509, nil, 512, 512, 512, nil, - 512, 509, nil, 509, 512, 512, nil, nil, nil, 512, - nil, 512, 512, 512, 512, 512, 512, 512, nil, nil, - nil, nil, nil, 512, 512, 512, 512, 512, 512, 512, - nil, nil, 512, nil, nil, nil, nil, nil, nil, 512, - nil, nil, 512, 512, 512, 512, 512, 512, 512, 512, - nil, 512, 512, 512, nil, 512, 512, 512, 512, 512, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 512, - nil, nil, 512, nil, nil, 512, 512, nil, nil, 512, - nil, nil, nil, nil, nil, 512, nil, nil, nil, nil, - nil, nil, nil, nil, 512, nil, nil, nil, nil, 512, - 512, 512, 512, nil, 512, 512, 512, 512, nil, nil, - nil, nil, 512, 512, nil, 513, 513, 513, nil, 513, - 512, nil, 512, 513, 513, nil, nil, nil, 513, nil, - 513, 513, 513, 513, 513, 513, 513, nil, nil, nil, - nil, nil, 513, 513, 513, 513, 513, 513, 513, nil, - nil, 513, nil, nil, nil, nil, nil, nil, 513, nil, - nil, 513, 513, 513, 513, 513, 513, 513, 513, nil, - 513, 513, 513, nil, 513, 513, 513, 513, 513, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 513, nil, - nil, 513, nil, nil, 513, 513, nil, nil, 513, nil, - nil, nil, nil, nil, 513, nil, nil, nil, nil, nil, - nil, nil, nil, 513, nil, nil, nil, nil, 513, 513, - 513, 513, nil, 513, 513, 513, 513, nil, nil, nil, - nil, 513, 513, nil, 514, 514, 514, nil, 514, 513, - nil, 513, 514, 514, nil, nil, nil, 514, nil, 514, - 514, 514, 514, 514, 514, 514, nil, nil, nil, nil, - nil, 514, 514, 514, 514, 514, 514, 514, nil, nil, - 514, nil, nil, nil, nil, nil, nil, 514, nil, nil, - 514, 514, 514, 514, 514, 514, 514, 514, nil, 514, - 514, 514, nil, 514, 514, 514, 514, 514, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 514, nil, nil, - 514, nil, nil, 514, 514, nil, nil, 514, nil, nil, - nil, nil, nil, 514, nil, nil, nil, nil, nil, nil, - nil, nil, 514, nil, nil, nil, nil, 514, 514, 514, - 514, nil, 514, 514, 514, 514, nil, nil, nil, nil, - 514, 514, nil, 518, 518, 518, nil, 518, 514, nil, - 514, 518, 518, nil, nil, nil, 518, nil, 518, 518, - 518, 518, 518, 518, 518, nil, nil, nil, nil, nil, - 518, 518, 518, 518, 518, 518, 518, nil, nil, 518, - nil, nil, nil, nil, nil, nil, 518, nil, nil, 518, - 518, 518, 518, 518, 518, 518, 518, nil, 518, 518, - 518, nil, 518, 518, 518, 518, 518, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 518, nil, nil, 518, - nil, nil, 518, 518, nil, nil, 518, nil, nil, nil, - nil, nil, 518, nil, nil, nil, nil, nil, nil, nil, - nil, 518, nil, nil, nil, nil, 518, 518, 518, 518, - nil, 518, 518, 518, 518, nil, nil, nil, nil, 518, - 518, nil, 524, 524, 524, nil, 524, 518, nil, 518, - 524, 524, nil, nil, nil, 524, nil, 524, 524, 524, - 524, 524, 524, 524, nil, nil, nil, nil, nil, 524, - 524, 524, 524, 524, 524, 524, nil, nil, 524, nil, - nil, nil, nil, nil, nil, 524, nil, nil, 524, 524, - 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, - nil, 524, 524, 524, 524, 524, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 524, nil, nil, 524, nil, - nil, 524, 524, nil, nil, 524, nil, 524, nil, nil, - nil, 524, nil, nil, 524, nil, nil, nil, nil, nil, - 524, nil, nil, nil, nil, 524, 524, 524, 524, nil, - 524, 524, 524, 524, nil, nil, nil, nil, 524, 524, - nil, 527, 527, 527, nil, 527, 524, nil, 524, 527, - 527, nil, nil, nil, 527, nil, 527, 527, 527, 527, - 527, 527, 527, nil, nil, nil, nil, nil, 527, 527, - 527, 527, 527, 527, 527, nil, nil, 527, nil, nil, - nil, nil, nil, nil, 527, nil, nil, 527, 527, 527, - 527, 527, 527, 527, 527, 527, 527, 527, 527, nil, - 527, 527, 527, 527, 527, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 527, nil, nil, 527, nil, nil, - 527, 527, nil, nil, 527, nil, nil, nil, nil, nil, - 527, nil, nil, 527, nil, nil, nil, nil, nil, 527, - nil, nil, nil, nil, 527, 527, 527, 527, nil, 527, - 527, 527, 527, nil, nil, nil, nil, 527, 527, nil, - 541, 541, 541, nil, 541, 527, nil, 527, 541, 541, - nil, nil, nil, 541, nil, 541, 541, 541, 541, 541, - 541, 541, nil, nil, nil, nil, nil, 541, 541, 541, - 541, 541, 541, 541, nil, nil, 541, nil, nil, nil, - nil, nil, nil, 541, nil, nil, 541, 541, 541, 541, - 541, 541, 541, 541, nil, 541, 541, 541, nil, 541, - 541, 541, 541, 541, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 541, nil, nil, 541, nil, nil, 541, - 541, nil, nil, 541, nil, 541, nil, nil, nil, 541, - nil, nil, nil, nil, nil, nil, nil, nil, 541, nil, - nil, nil, nil, 541, 541, 541, 541, nil, 541, 541, - 541, 541, nil, nil, nil, nil, 541, 541, nil, 542, - 542, 542, nil, 542, 541, nil, 541, 542, 542, nil, - nil, nil, 542, nil, 542, 542, 542, 542, 542, 542, - 542, nil, nil, nil, nil, nil, 542, 542, 542, 542, - 542, 542, 542, nil, nil, 542, nil, nil, nil, nil, - nil, nil, 542, nil, nil, 542, 542, 542, 542, 542, - 542, 542, 542, 542, 542, 542, 542, nil, 542, 542, - 542, 542, 542, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 542, nil, nil, 542, nil, nil, 542, 542, - nil, nil, 542, nil, 542, nil, 542, nil, 542, nil, - nil, 542, nil, nil, nil, nil, nil, 542, nil, nil, - nil, nil, 542, 542, 542, 542, nil, 542, 542, 542, - 542, nil, nil, nil, nil, 542, 542, nil, 552, 552, - 552, nil, 552, 542, nil, 542, 552, 552, nil, nil, - nil, 552, nil, 552, 552, 552, 552, 552, 552, 552, - nil, nil, nil, nil, nil, 552, 552, 552, 552, 552, - 552, 552, nil, nil, 552, nil, nil, nil, nil, nil, - nil, 552, nil, nil, 552, 552, 552, 552, 552, 552, - 552, 552, 552, 552, 552, 552, nil, 552, 552, 552, - 552, 552, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 552, nil, nil, 552, nil, nil, 552, 552, nil, - nil, 552, nil, 552, nil, 552, nil, 552, nil, nil, - 552, nil, nil, nil, nil, nil, 552, nil, nil, nil, - nil, 552, 552, 552, 552, nil, 552, 552, 552, 552, - nil, nil, nil, nil, 552, 552, nil, 586, 586, 586, - nil, 586, 552, nil, 552, 586, 586, nil, nil, nil, - 586, nil, 586, 586, 586, 586, 586, 586, 586, nil, - nil, nil, nil, nil, 586, 586, 586, 586, 586, 586, - 586, nil, nil, 586, nil, nil, nil, nil, nil, nil, - 586, nil, nil, 586, 586, 586, 586, 586, 586, 586, - 586, nil, 586, 586, 586, nil, 586, 586, 586, 586, - 586, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 586, nil, nil, 586, nil, nil, 586, 586, nil, nil, - 586, nil, 586, nil, nil, nil, 586, nil, nil, nil, - nil, nil, nil, nil, nil, 586, nil, nil, nil, nil, - 586, 586, 586, 586, nil, 586, 586, 586, 586, nil, - nil, nil, nil, 586, 586, nil, 587, 587, 587, nil, - 587, 586, nil, 586, 587, 587, nil, nil, nil, 587, - nil, 587, 587, 587, 587, 587, 587, 587, nil, nil, - nil, nil, nil, 587, 587, 587, 587, 587, 587, 587, - nil, nil, 587, nil, nil, nil, nil, nil, nil, 587, - nil, nil, 587, 587, 587, 587, 587, 587, 587, 587, - nil, 587, 587, 587, nil, 587, 587, 587, 587, 587, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 587, - nil, nil, 587, nil, nil, 587, 587, nil, nil, 587, - nil, nil, nil, nil, nil, 587, nil, nil, nil, nil, - nil, nil, nil, nil, 587, nil, nil, nil, nil, 587, - 587, 587, 587, nil, 587, 587, 587, 587, nil, nil, - nil, nil, 587, 587, nil, 590, 590, 590, nil, 590, - 587, nil, 587, 590, 590, nil, nil, nil, 590, nil, - 590, 590, 590, 590, 590, 590, 590, nil, nil, nil, - nil, nil, 590, 590, 590, 590, 590, 590, 590, nil, - nil, 590, nil, nil, nil, nil, nil, nil, 590, nil, - nil, 590, 590, 590, 590, 590, 590, 590, 590, 590, - 590, 590, 590, nil, 590, 590, 590, 590, 590, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 590, nil, - nil, 590, nil, nil, 590, 590, nil, nil, 590, nil, - 590, nil, 590, nil, 590, nil, nil, 590, nil, nil, - nil, nil, nil, 590, nil, nil, nil, nil, 590, 590, - 590, 590, nil, 590, 590, 590, 590, nil, nil, nil, - nil, 590, 590, nil, 591, 591, 591, nil, 591, 590, - nil, 590, 591, 591, nil, nil, nil, 591, nil, 591, - 591, 591, 591, 591, 591, 591, nil, nil, nil, nil, - nil, 591, 591, 591, 591, 591, 591, 591, nil, nil, - 591, nil, nil, nil, nil, nil, nil, 591, nil, nil, - 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, - 591, 591, nil, 591, 591, 591, 591, 591, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 591, nil, nil, - 591, nil, nil, 591, 591, nil, nil, 591, nil, nil, - nil, 591, nil, 591, nil, nil, 591, nil, nil, nil, - nil, nil, 591, nil, nil, nil, nil, 591, 591, 591, - 591, nil, 591, 591, 591, 591, nil, nil, nil, nil, - 591, 591, nil, 592, 592, 592, nil, 592, 591, nil, - 591, 592, 592, nil, nil, nil, 592, nil, 592, 592, - 592, 592, 592, 592, 592, nil, nil, nil, nil, nil, - 592, 592, 592, 592, 592, 592, 592, nil, nil, 592, - nil, nil, nil, nil, nil, nil, 592, nil, nil, 592, - 592, 592, 592, 592, 592, 592, 592, nil, 592, 592, - 592, nil, 592, 592, 592, 592, 592, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 592, nil, nil, 592, - nil, nil, 592, 592, nil, nil, 592, nil, nil, nil, - nil, nil, 592, nil, nil, nil, nil, nil, nil, nil, - nil, 592, nil, nil, nil, nil, 592, 592, 592, 592, - nil, 592, 592, 592, 592, nil, nil, nil, nil, 592, - 592, nil, 593, 593, 593, nil, 593, 592, nil, 592, - 593, 593, nil, nil, nil, 593, nil, 593, 593, 593, - 593, 593, 593, 593, nil, nil, nil, nil, nil, 593, - 593, 593, 593, 593, 593, 593, nil, nil, 593, nil, - nil, nil, nil, nil, nil, 593, nil, nil, 593, 593, - 593, 593, 593, 593, 593, 593, nil, 593, 593, 593, - nil, 593, 593, 593, 593, 593, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 593, nil, nil, 593, nil, - nil, 593, 593, nil, nil, 593, nil, nil, nil, nil, - nil, 593, nil, nil, nil, nil, nil, nil, nil, nil, - 593, nil, nil, nil, nil, 593, 593, 593, 593, nil, - 593, 593, 593, 593, nil, nil, nil, nil, 593, 593, - nil, 597, 597, 597, nil, 597, 593, nil, 593, 597, - 597, nil, nil, nil, 597, nil, 597, 597, 597, 597, - 597, 597, 597, nil, nil, nil, nil, nil, 597, 597, - 597, 597, 597, 597, 597, nil, nil, 597, nil, nil, - nil, nil, nil, nil, 597, nil, nil, 597, 597, 597, - 597, 597, 597, 597, 597, nil, 597, 597, 597, nil, - 597, 597, 597, 597, 597, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 597, nil, nil, 597, nil, nil, - 597, 597, nil, nil, 597, nil, nil, nil, nil, nil, - 597, nil, nil, nil, nil, nil, nil, nil, nil, 597, - nil, nil, nil, nil, 597, 597, 597, 597, nil, 597, - 597, 597, 597, nil, nil, nil, nil, 597, 597, nil, - 598, 598, 598, nil, 598, 597, nil, 597, 598, 598, - nil, nil, nil, 598, nil, 598, 598, 598, 598, 598, - 598, 598, nil, nil, nil, nil, nil, 598, 598, 598, - 598, 598, 598, 598, nil, nil, 598, nil, nil, nil, - nil, nil, nil, 598, nil, nil, 598, 598, 598, 598, - 598, 598, 598, 598, nil, 598, 598, 598, nil, 598, - 598, 598, 598, 598, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 598, nil, nil, 598, nil, nil, 598, - 598, nil, nil, 598, nil, nil, nil, nil, nil, 598, - nil, nil, nil, nil, nil, nil, nil, nil, 598, nil, - nil, nil, nil, 598, 598, 598, 598, nil, 598, 598, - 598, 598, nil, nil, nil, nil, 598, 598, nil, 601, - 601, 601, nil, 601, 598, nil, 598, 601, 601, nil, - nil, nil, 601, nil, 601, 601, 601, 601, 601, 601, - 601, nil, nil, nil, nil, nil, 601, 601, 601, 601, - 601, 601, 601, nil, nil, 601, nil, nil, nil, nil, - nil, nil, 601, nil, nil, 601, 601, 601, 601, 601, - 601, 601, 601, nil, 601, 601, 601, nil, 601, 601, - 601, 601, 601, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 601, nil, nil, 601, nil, nil, 601, 601, - nil, nil, 601, nil, nil, nil, nil, nil, 601, nil, - nil, nil, nil, nil, nil, nil, nil, 601, nil, nil, - nil, nil, 601, 601, 601, 601, nil, 601, 601, 601, - 601, nil, nil, nil, nil, 601, 601, nil, 602, 602, - 602, nil, 602, 601, nil, 601, 602, 602, nil, nil, - nil, 602, nil, 602, 602, 602, 602, 602, 602, 602, - nil, nil, nil, nil, nil, 602, 602, 602, 602, 602, - 602, 602, nil, nil, 602, nil, nil, nil, nil, nil, - nil, 602, nil, nil, 602, 602, 602, 602, 602, 602, - 602, 602, nil, 602, 602, 602, nil, 602, 602, 602, - 602, 602, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 602, nil, nil, 602, nil, nil, 602, 602, nil, - nil, 602, nil, nil, nil, nil, nil, 602, nil, nil, - nil, nil, nil, nil, nil, nil, 602, nil, nil, nil, - nil, 602, 602, 602, 602, nil, 602, 602, 602, 602, - nil, nil, nil, nil, 602, 602, nil, 626, 626, 626, - nil, 626, 602, nil, 602, 626, 626, nil, nil, nil, - 626, nil, 626, 626, 626, 626, 626, 626, 626, nil, - nil, nil, nil, nil, 626, 626, 626, 626, 626, 626, - 626, nil, nil, 626, nil, nil, nil, nil, nil, nil, - 626, nil, nil, 626, 626, 626, 626, 626, 626, 626, - 626, nil, 626, 626, 626, nil, 626, 626, 626, 626, - 626, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 626, nil, nil, 626, nil, nil, 626, 626, nil, nil, - 626, nil, nil, nil, nil, nil, 626, nil, nil, nil, - nil, nil, nil, nil, nil, 626, nil, nil, nil, nil, - 626, 626, 626, 626, nil, 626, 626, 626, 626, nil, - nil, nil, nil, 626, 626, nil, 632, 632, 632, nil, - 632, 626, nil, 626, 632, 632, nil, nil, nil, 632, - nil, 632, 632, 632, 632, 632, 632, 632, nil, nil, - nil, nil, nil, 632, 632, 632, 632, 632, 632, 632, - nil, nil, 632, nil, nil, nil, nil, nil, nil, 632, - nil, nil, 632, 632, 632, 632, 632, 632, 632, 632, - nil, 632, 632, 632, nil, 632, 632, nil, nil, 632, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 632, - nil, nil, 632, nil, nil, 632, 632, nil, nil, 632, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 632, - 632, 632, 632, nil, 632, 632, 632, 632, nil, nil, - nil, nil, 632, 632, nil, 643, 643, 643, nil, 643, - 632, nil, 632, 643, 643, nil, nil, nil, 643, nil, - 643, 643, 643, 643, 643, 643, 643, nil, nil, nil, - nil, nil, 643, 643, 643, 643, 643, 643, 643, nil, - nil, 643, nil, nil, nil, nil, nil, nil, 643, nil, - nil, 643, 643, 643, 643, 643, 643, 643, 643, nil, - 643, 643, 643, nil, 643, 643, nil, nil, 643, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 643, nil, - nil, 643, nil, nil, 643, 643, nil, nil, 643, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 643, 643, - 643, 643, nil, 643, 643, 643, 643, nil, nil, nil, - nil, 643, 643, nil, 649, 649, 649, nil, 649, 643, - nil, 643, 649, 649, nil, nil, nil, 649, nil, 649, - 649, 649, 649, 649, 649, 649, nil, nil, nil, nil, - nil, 649, 649, 649, 649, 649, 649, 649, nil, nil, - 649, nil, nil, nil, nil, nil, nil, 649, nil, nil, - 649, 649, 649, 649, 649, 649, 649, 649, nil, 649, - 649, 649, nil, 649, 649, 649, 649, 649, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 649, nil, nil, - 649, nil, nil, 649, 649, nil, nil, 649, nil, 649, - nil, nil, nil, 649, nil, nil, nil, nil, nil, nil, - nil, nil, 649, nil, nil, nil, nil, 649, 649, 649, - 649, nil, 649, 649, 649, 649, nil, nil, nil, nil, - 649, 649, nil, 673, 673, 673, nil, 673, 649, nil, - 649, 673, 673, nil, nil, nil, 673, nil, 673, 673, - 673, 673, 673, 673, 673, nil, nil, nil, nil, nil, - 673, 673, 673, 673, 673, 673, 673, nil, nil, 673, - nil, nil, nil, nil, nil, nil, 673, nil, nil, 673, - 673, 673, 673, 673, 673, 673, 673, nil, 673, 673, - 673, nil, 673, 673, 673, 673, 673, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 673, nil, nil, 673, - nil, nil, 673, 673, nil, nil, 673, nil, nil, nil, - nil, nil, 673, nil, nil, nil, nil, nil, nil, nil, - nil, 673, nil, nil, nil, nil, 673, 673, 673, 673, - nil, 673, 673, 673, 673, nil, nil, nil, nil, 673, - 673, nil, 700, 700, 700, nil, 700, 673, nil, 673, - 700, 700, nil, nil, nil, 700, nil, 700, 700, 700, - 700, 700, 700, 700, nil, nil, nil, nil, nil, 700, - 700, 700, 700, 700, 700, 700, nil, nil, 700, nil, - nil, nil, nil, nil, nil, 700, nil, nil, 700, 700, - 700, 700, 700, 700, 700, 700, nil, 700, 700, 700, - nil, 700, 700, 700, 700, 700, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 700, nil, nil, 700, nil, - nil, 700, 700, nil, nil, 700, nil, nil, nil, nil, - nil, 700, nil, nil, nil, nil, nil, nil, nil, nil, - 700, nil, nil, nil, nil, 700, 700, 700, 700, nil, - 700, 700, 700, 700, nil, nil, nil, nil, 700, 700, - nil, 706, 706, 706, nil, 706, 700, nil, 700, 706, - 706, nil, nil, nil, 706, nil, 706, 706, 706, 706, - 706, 706, 706, nil, nil, nil, nil, nil, 706, 706, - 706, 706, 706, 706, 706, nil, nil, 706, nil, nil, - nil, nil, nil, nil, 706, nil, nil, 706, 706, 706, - 706, 706, 706, 706, 706, nil, 706, 706, 706, nil, - 706, 706, 706, 706, 706, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 706, nil, nil, 706, nil, nil, - 706, 706, nil, nil, 706, nil, nil, nil, nil, nil, - 706, nil, nil, nil, nil, nil, nil, nil, nil, 706, - nil, nil, nil, nil, 706, 706, 706, 706, nil, 706, - 706, 706, 706, nil, nil, nil, nil, 706, 706, nil, - 729, 729, 729, nil, 729, 706, nil, 706, 729, 729, - nil, nil, nil, 729, nil, 729, 729, 729, 729, 729, - 729, 729, nil, nil, nil, nil, nil, 729, 729, 729, - 729, 729, 729, 729, nil, nil, 729, nil, nil, nil, - nil, nil, nil, 729, nil, nil, 729, 729, 729, 729, - 729, 729, 729, 729, nil, 729, 729, 729, nil, 729, - 729, 729, 729, 729, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 729, nil, nil, 729, nil, nil, 729, - 729, nil, nil, 729, nil, nil, nil, nil, nil, 729, - nil, nil, nil, nil, nil, nil, nil, nil, 729, nil, - nil, nil, nil, 729, 729, 729, 729, nil, 729, 729, - 729, 729, nil, nil, nil, nil, 729, 729, nil, 731, - 731, 731, nil, 731, 729, nil, 729, 731, 731, nil, - nil, nil, 731, nil, 731, 731, 731, 731, 731, 731, - 731, nil, nil, nil, nil, nil, 731, 731, 731, 731, - 731, 731, 731, nil, nil, 731, nil, nil, nil, nil, - nil, nil, 731, nil, nil, 731, 731, 731, 731, 731, - 731, 731, 731, nil, 731, 731, 731, nil, 731, 731, - 731, 731, 731, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 731, nil, nil, 731, nil, nil, 731, 731, - nil, nil, 731, nil, nil, nil, nil, nil, 731, nil, - nil, nil, nil, nil, nil, nil, nil, 731, nil, nil, - nil, nil, 731, 731, 731, 731, nil, 731, 731, 731, - 731, nil, nil, nil, nil, 731, 731, nil, 745, 745, - 745, nil, 745, 731, nil, 731, 745, 745, nil, nil, - nil, 745, nil, 745, 745, 745, 745, 745, 745, 745, - nil, nil, nil, nil, nil, 745, 745, 745, 745, 745, - 745, 745, nil, nil, 745, nil, nil, nil, nil, nil, - nil, 745, nil, nil, 745, 745, 745, 745, 745, 745, - 745, 745, nil, 745, 745, 745, nil, 745, 745, 745, - 745, 745, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 745, nil, nil, 745, nil, nil, 745, 745, nil, - nil, 745, nil, nil, nil, nil, nil, 745, nil, nil, - nil, nil, nil, nil, nil, nil, 745, nil, nil, nil, - nil, 745, 745, 745, 745, nil, 745, 745, 745, 745, - nil, nil, nil, nil, 745, 745, nil, 746, 746, 746, - nil, 746, 745, nil, 745, 746, 746, nil, nil, nil, - 746, nil, 746, 746, 746, 746, 746, 746, 746, nil, - nil, nil, nil, nil, 746, 746, 746, 746, 746, 746, - 746, nil, nil, 746, nil, nil, nil, nil, nil, nil, - 746, nil, nil, 746, 746, 746, 746, 746, 746, 746, - 746, nil, 746, 746, 746, nil, 746, 746, 746, 746, - 746, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 746, nil, nil, 746, nil, nil, 746, 746, nil, nil, - 746, nil, nil, nil, nil, nil, 746, nil, nil, nil, - nil, nil, nil, nil, nil, 746, nil, nil, nil, nil, - 746, 746, 746, 746, nil, 746, 746, 746, 746, nil, - nil, nil, nil, 746, 746, nil, 747, 747, 747, nil, - 747, 746, nil, 746, 747, 747, nil, nil, nil, 747, - nil, 747, 747, 747, 747, 747, 747, 747, nil, nil, - nil, nil, nil, 747, 747, 747, 747, 747, 747, 747, - nil, nil, 747, nil, nil, nil, nil, nil, nil, 747, - nil, nil, 747, 747, 747, 747, 747, 747, 747, 747, - nil, 747, 747, 747, nil, 747, 747, 747, 747, 747, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 747, - nil, nil, 747, nil, nil, 747, 747, nil, nil, 747, - nil, nil, nil, nil, nil, 747, nil, nil, nil, nil, - nil, nil, nil, nil, 747, nil, nil, nil, nil, 747, - 747, 747, 747, nil, 747, 747, 747, 747, nil, nil, - nil, nil, 747, 747, nil, 748, 748, 748, nil, 748, - 747, nil, 747, 748, 748, nil, nil, nil, 748, nil, - 748, 748, 748, 748, 748, 748, 748, nil, nil, nil, - nil, nil, 748, 748, 748, 748, 748, 748, 748, nil, - nil, 748, nil, nil, nil, nil, nil, nil, 748, nil, - nil, 748, 748, 748, 748, 748, 748, 748, 748, nil, - 748, 748, 748, nil, 748, 748, 748, 748, 748, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 748, nil, - nil, 748, nil, nil, 748, 748, nil, nil, 748, nil, - nil, nil, nil, nil, 748, nil, nil, nil, nil, nil, - nil, nil, nil, 748, nil, nil, nil, nil, 748, 748, - 748, 748, nil, 748, 748, 748, 748, nil, nil, nil, - nil, 748, 748, nil, 750, 750, 750, nil, 750, 748, - nil, 748, 750, 750, nil, nil, nil, 750, nil, 750, - 750, 750, 750, 750, 750, 750, nil, nil, nil, nil, - nil, 750, 750, 750, 750, 750, 750, 750, nil, nil, - 750, nil, nil, nil, nil, nil, nil, 750, nil, nil, - 750, 750, 750, 750, 750, 750, 750, 750, nil, 750, - 750, 750, nil, 750, 750, 750, 750, 750, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 750, nil, nil, - 750, nil, nil, 750, 750, nil, nil, 750, nil, nil, - nil, nil, nil, 750, nil, nil, nil, nil, nil, nil, - nil, nil, 750, nil, nil, nil, nil, 750, 750, 750, - 750, nil, 750, 750, 750, 750, nil, nil, nil, nil, - 750, 750, nil, 762, 762, 762, nil, 762, 750, nil, - 750, 762, 762, nil, nil, nil, 762, nil, 762, 762, - 762, 762, 762, 762, 762, nil, nil, nil, nil, nil, - 762, 762, 762, 762, 762, 762, 762, nil, nil, 762, - nil, nil, nil, nil, nil, nil, 762, nil, nil, 762, - 762, 762, 762, 762, 762, 762, 762, nil, 762, 762, - 762, nil, 762, 762, nil, nil, 762, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 762, nil, nil, 762, - nil, nil, 762, 762, nil, nil, 762, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 762, 762, 762, 762, - nil, 762, 762, 762, 762, nil, nil, nil, nil, 762, - 762, nil, 801, 801, 801, nil, 801, 762, nil, 762, - 801, 801, nil, nil, nil, 801, nil, 801, 801, 801, - 801, 801, 801, 801, nil, nil, nil, nil, nil, 801, - 801, 801, 801, 801, 801, 801, nil, nil, 801, nil, - nil, nil, nil, nil, nil, 801, nil, nil, 801, 801, - 801, 801, 801, 801, 801, 801, nil, 801, 801, 801, - nil, 801, 801, 801, 801, 801, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 801, nil, nil, 801, nil, - nil, 801, 801, nil, nil, 801, nil, nil, nil, nil, - nil, 801, nil, nil, nil, nil, nil, nil, nil, nil, - 801, nil, nil, nil, nil, 801, 801, 801, 801, nil, - 801, 801, 801, 801, nil, nil, nil, nil, 801, 801, - nil, 815, 815, 815, nil, 815, 801, nil, 801, 815, - 815, nil, nil, nil, 815, nil, 815, 815, 815, 815, - 815, 815, 815, nil, nil, nil, nil, nil, 815, 815, - 815, 815, 815, 815, 815, nil, nil, 815, nil, nil, - nil, nil, nil, nil, 815, nil, nil, 815, 815, 815, - 815, 815, 815, 815, 815, nil, 815, 815, 815, nil, - 815, 815, 815, 815, 815, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 815, nil, nil, 815, nil, nil, - 815, 815, nil, nil, 815, nil, nil, nil, nil, nil, - 815, nil, nil, nil, nil, nil, nil, nil, nil, 815, - nil, nil, nil, nil, 815, 815, 815, 815, nil, 815, - 815, 815, 815, nil, nil, nil, nil, 815, 815, nil, - 820, 820, 820, nil, 820, 815, nil, 815, 820, 820, - nil, nil, nil, 820, nil, 820, 820, 820, 820, 820, - 820, 820, nil, nil, nil, nil, nil, 820, 820, 820, - 820, 820, 820, 820, nil, nil, 820, nil, nil, nil, - nil, nil, nil, 820, nil, nil, 820, 820, 820, 820, - 820, 820, 820, 820, nil, 820, 820, 820, nil, 820, - 820, 820, 820, 820, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 820, nil, nil, 820, nil, nil, 820, - 820, nil, nil, 820, nil, 820, nil, nil, nil, 820, - nil, nil, nil, nil, nil, nil, nil, nil, 820, nil, - nil, nil, nil, 820, 820, 820, 820, nil, 820, 820, - 820, 820, nil, nil, nil, nil, 820, 820, nil, 837, - 837, 837, nil, 837, 820, nil, 820, 837, 837, nil, - nil, nil, 837, nil, 837, 837, 837, 837, 837, 837, - 837, nil, nil, nil, nil, nil, 837, 837, 837, 837, - 837, 837, 837, nil, nil, 837, nil, nil, nil, nil, - nil, nil, 837, nil, nil, 837, 837, 837, 837, 837, - 837, 837, 837, 837, 837, 837, 837, nil, 837, 837, - 837, 837, 837, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 837, nil, nil, 837, nil, nil, 837, 837, - nil, nil, 837, nil, nil, nil, 837, nil, 837, nil, - nil, 837, nil, nil, nil, nil, nil, 837, nil, nil, - nil, nil, 837, 837, 837, 837, nil, 837, 837, 837, - 837, nil, nil, nil, nil, 837, 837, nil, 838, 838, - 838, nil, 838, 837, nil, 837, 838, 838, nil, nil, - nil, 838, nil, 838, 838, 838, 838, 838, 838, 838, - nil, nil, nil, nil, nil, 838, 838, 838, 838, 838, - 838, 838, nil, nil, 838, nil, nil, nil, nil, nil, - nil, 838, nil, nil, 838, 838, 838, 838, 838, 838, - 838, 838, nil, 838, 838, 838, nil, 838, 838, 838, - 838, 838, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 838, nil, nil, 838, nil, nil, 838, 838, nil, - nil, 838, nil, nil, nil, nil, nil, 838, nil, nil, - nil, nil, nil, nil, nil, nil, 838, nil, nil, nil, - nil, 838, 838, 838, 838, nil, 838, 838, 838, 838, - nil, nil, nil, nil, 838, 838, nil, 852, 852, 852, - nil, 852, 838, nil, 838, 852, 852, nil, nil, nil, - 852, nil, 852, 852, 852, 852, 852, 852, 852, nil, - nil, nil, nil, nil, 852, 852, 852, 852, 852, 852, - 852, nil, nil, 852, nil, nil, nil, nil, nil, nil, - 852, nil, nil, 852, 852, 852, 852, 852, 852, 852, - 852, nil, 852, 852, 852, nil, 852, 852, nil, nil, - 852, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 852, nil, nil, 852, nil, nil, 852, 852, nil, nil, - 852, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 852, 852, 852, 852, nil, 852, 852, 852, 852, nil, - nil, nil, nil, 852, 852, nil, 864, 864, 864, nil, - 864, 852, nil, 852, 864, 864, nil, nil, nil, 864, - nil, 864, 864, 864, 864, 864, 864, 864, nil, nil, - nil, nil, nil, 864, 864, 864, 864, 864, 864, 864, - nil, nil, 864, nil, nil, nil, nil, nil, nil, 864, - nil, nil, 864, 864, 864, 864, 864, 864, 864, 864, - nil, 864, 864, 864, nil, 864, 864, nil, nil, 864, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 864, - nil, nil, 864, nil, nil, 864, 864, nil, nil, 864, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 864, - 864, 864, 864, nil, 864, 864, 864, 864, nil, nil, - nil, nil, 864, 864, nil, 970, 970, 970, nil, 970, - 864, nil, 864, 970, 970, nil, nil, nil, 970, nil, - 970, 970, 970, 970, 970, 970, 970, nil, nil, nil, - nil, nil, 970, 970, 970, 970, 970, 970, 970, nil, - nil, 970, nil, nil, nil, nil, nil, nil, 970, nil, - nil, 970, 970, 970, 970, 970, 970, 970, 970, 970, - 970, 970, 970, nil, 970, 970, 970, 970, 970, 517, - 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, - nil, 517, 517, nil, nil, 517, 517, nil, 970, nil, - nil, 970, nil, nil, 970, 970, nil, nil, 970, nil, - 970, 517, 970, 517, 970, 517, 517, 970, 517, 517, - 517, 517, 517, 970, 517, nil, nil, nil, 970, 970, - 970, 970, nil, 970, 970, 970, 970, nil, nil, nil, - nil, 970, 970, nil, 517, 27, nil, nil, nil, 970, - nil, 970, 27, 27, 27, nil, nil, 27, 27, 27, - nil, 27, nil, nil, nil, nil, nil, nil, nil, nil, - 27, 27, 27, nil, nil, nil, nil, nil, nil, nil, - nil, 27, 27, nil, 27, 27, 27, 27, 27, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, nil, nil, 27, 27, 27, - nil, nil, 27, nil, 27, 27, nil, nil, 27, 27, - nil, 27, nil, 27, nil, 27, nil, 27, 27, nil, - 27, 27, 27, 27, 27, 28, 27, 27, 27, nil, - nil, nil, 28, 28, 28, nil, nil, 28, 28, 28, - nil, 28, 27, nil, nil, 27, 27, nil, 27, nil, - 27, 28, 28, nil, nil, nil, nil, nil, nil, nil, - nil, 28, 28, nil, 28, 28, 28, 28, 28, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 28, 28, 28, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, nil, nil, 28, 28, 28, - nil, nil, 28, nil, 28, 28, nil, nil, 28, 28, - nil, 28, nil, 28, nil, 28, nil, 28, 28, nil, - 28, 28, 28, 28, 28, nil, 28, 412, 28, nil, - nil, nil, nil, nil, 412, 412, 412, nil, nil, 412, - 412, 412, 28, 412, nil, 28, 28, nil, 28, nil, - 28, nil, 412, 412, 412, nil, nil, nil, nil, nil, - nil, nil, nil, 412, 412, nil, 412, 412, 412, 412, - 412, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 412, 412, 412, 412, 412, 412, 412, - 412, 412, 412, 412, 412, 412, 412, nil, nil, 412, - 412, 412, nil, nil, 412, nil, 412, 412, nil, nil, - 412, 412, nil, 412, nil, 412, nil, 412, nil, 412, - 412, nil, 412, 412, 412, 412, 412, nil, 412, 412, - 412, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 412, nil, 471, 412, 412, nil, - 412, nil, 412, 471, 471, 471, nil, nil, 471, 471, - 471, 613, 471, 613, 613, 613, 613, 613, nil, nil, - nil, 471, 471, nil, nil, nil, 613, nil, nil, nil, - nil, nil, 471, 471, nil, 471, 471, 471, 471, 471, - nil, nil, nil, nil, nil, nil, nil, nil, 613, nil, - 532, nil, 532, 532, 532, 532, 532, 613, 613, 613, - 613, nil, nil, nil, 613, 532, nil, nil, nil, nil, - nil, nil, nil, 471, nil, nil, nil, nil, nil, nil, - 471, nil, nil, nil, nil, 471, 471, 532, 532, nil, - 613, nil, nil, nil, nil, nil, 532, 532, 532, 532, - nil, nil, nil, 532, nil, nil, nil, nil, 471, 471, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 471, nil, nil, 471, nil, nil, nil, - nil, 471, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, nil, nil, nil, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, nil, - nil, nil, nil, nil, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, nil, 8, nil, nil, nil, nil, - nil, nil, nil, 8, 8, nil, 8, 8, 8, 8, - 8, 8, 8, nil, nil, 8, 8, nil, nil, nil, - 8, 8, 8, 8, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 8, 8, nil, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, nil, nil, 8, 8, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 8, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, nil, nil, nil, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, nil, nil, nil, - nil, nil, 9, 9, 9, 9, 9, 9, 9, 9, - 9, nil, nil, 9, nil, nil, nil, nil, nil, nil, - nil, 9, 9, nil, 9, 9, 9, 9, 9, 9, - 9, nil, nil, 9, 9, nil, nil, nil, 9, 9, - 9, 9, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 9, 9, nil, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - nil, nil, 9, 9, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 9, 393, 393, - 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, - 393, 393, 393, 393, 393, 393, 393, 393, 393, 393, - 393, 393, nil, nil, nil, 393, 393, 393, 393, 393, - 393, 393, 393, 393, 393, nil, nil, nil, nil, nil, - 393, 393, 393, 393, 393, 393, 393, 393, 393, nil, - nil, 393, nil, nil, nil, nil, nil, nil, nil, 393, - 393, nil, 393, 393, 393, 393, 393, 393, 393, nil, - nil, 393, 393, nil, nil, nil, 393, 393, 393, 393, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 393, 393, nil, 393, 393, 393, 393, - 393, 393, 393, 393, 393, 393, 393, 393, nil, nil, - 393, 393, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 393, 583, 583, 583, 583, - 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, - 583, 583, 583, 583, 583, 583, 583, 583, 583, 583, - nil, nil, nil, 583, 583, 583, 583, 583, 583, 583, - 583, 583, 583, nil, nil, nil, nil, nil, 583, 583, - 583, 583, 583, 583, 583, 583, 583, nil, nil, 583, - nil, nil, nil, nil, nil, nil, nil, 583, 583, nil, - 583, 583, 583, 583, 583, 583, 583, nil, nil, 583, - 583, nil, nil, nil, 583, 583, 583, 583, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 583, 583, nil, 583, 583, 583, 583, 583, 583, - 583, 583, 583, 583, 583, 583, nil, nil, 583, 583, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 583, 71, 71, 71, 71, 71, 71, - 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, - 71, 71, 71, 71, 71, 71, 71, 71, nil, nil, - nil, 71, 71, 71, 71, 71, 71, 71, 71, 71, - 71, nil, nil, nil, nil, nil, 71, 71, 71, 71, - 71, 71, 71, 71, 71, 71, 71, 71, nil, 71, - nil, nil, nil, nil, nil, 71, 71, nil, 71, 71, - 71, 71, 71, 71, 71, nil, nil, 71, 71, nil, - nil, nil, 71, 71, 71, 71, nil, nil, nil, nil, - nil, 71, nil, nil, nil, nil, nil, nil, nil, 71, - 71, nil, 71, 71, 71, 71, 71, 71, 71, 71, - 71, 71, 71, 71, nil, nil, 71, 713, 713, 713, - 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, - 713, 713, 713, 713, 713, 713, 713, 713, 713, 713, - 713, nil, nil, nil, 713, 713, 713, 713, 713, 713, - 713, 713, 713, 713, nil, nil, nil, nil, nil, 713, - 713, 713, 713, 713, 713, 713, 713, 713, nil, nil, - 713, nil, nil, nil, nil, nil, nil, nil, 713, 713, - nil, 713, 713, 713, 713, 713, 713, 713, nil, nil, - 713, 713, nil, nil, nil, 713, 713, 713, 713, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 713, 713, nil, 713, 713, 713, 713, 713, - 713, 713, 713, 713, 713, 713, 713, nil, nil, 713, - 644, 644, 644, 644, 644, 644, 644, 644, 644, 644, - 644, nil, 644, 644, nil, nil, 644, 644, nil, nil, - nil, nil, nil, 559, nil, 559, 559, 559, 559, 559, - nil, nil, 644, nil, 644, nil, 644, 644, 559, 644, - 644, 644, 644, 644, nil, 644, 730, 730, 730, 730, - 730, 730, 730, 730, 730, 730, 730, nil, 730, 730, - 559, 559, 730, 730, nil, 644, nil, nil, nil, 559, - 559, 559, 559, nil, nil, nil, 559, nil, 730, nil, - 730, nil, 730, 730, nil, 730, 730, 730, 730, 730, - nil, 730, 735, 735, 735, 735, 735, 735, 735, 735, - 735, 735, 735, nil, 735, 735, nil, nil, 735, 735, - nil, 730, 655, nil, 655, 655, 655, 655, 655, nil, - nil, nil, nil, nil, 735, nil, 735, 655, 735, 735, - nil, 735, 735, 735, 735, 735, nil, 735, 737, 737, - 737, 737, 737, 737, 737, 737, 737, 737, 737, 655, - 737, 737, nil, nil, 737, 737, nil, 735, 655, 655, - 655, 655, nil, nil, nil, 655, nil, nil, nil, nil, - 737, nil, 737, nil, 737, 737, nil, 737, 737, 737, - 737, 737, nil, 737, 740, 740, 740, 740, 740, 740, - 740, 740, 740, 740, 740, nil, 740, 740, nil, nil, - 740, 740, nil, 737, 711, nil, 711, 711, 711, 711, - 711, nil, nil, nil, nil, nil, 740, nil, 740, 711, - 740, 740, nil, 740, 740, 740, 740, 740, nil, 740, - 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, - 742, 711, 742, 742, nil, nil, 742, 742, nil, 740, - 711, 711, 711, 711, nil, nil, nil, 711, nil, nil, - nil, nil, 742, nil, 742, nil, 742, 742, nil, 742, - 742, 742, 742, 742, nil, 742, 744, 744, 744, 744, - 744, 744, 744, 744, 744, 744, 744, nil, 744, 744, - nil, nil, 744, 744, nil, 742, 795, nil, 795, 795, - 795, 795, 795, nil, nil, nil, nil, nil, 744, nil, - 744, 795, 744, 744, nil, 744, 744, 744, 744, 744, - nil, 744, 836, 836, 836, 836, 836, 836, 836, 836, - 836, 836, 836, 795, 836, 836, nil, nil, 836, 836, - nil, 744, 795, 795, 795, 795, nil, nil, nil, 795, - nil, nil, nil, nil, 836, nil, 836, nil, 836, 836, - nil, 836, 836, 836, 836, 836, nil, 836, 839, 839, - 839, 839, 839, 839, 839, 839, 839, 839, 839, nil, - 839, 839, nil, nil, 839, 839, nil, 836, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 839, nil, 839, nil, 839, 839, nil, 839, 839, 839, - 839, 839, nil, 839, nil, nil, nil, nil, nil, 209, - 209, nil, nil, 209, nil, nil, nil, nil, nil, nil, - nil, 209, 209, 839, 209, 209, 209, 209, 209, 209, - 209, nil, nil, 209, 209, nil, nil, nil, 209, 209, - 209, 209, nil, nil, nil, nil, nil, 209, nil, nil, - nil, nil, nil, nil, nil, 209, 209, nil, 209, 209, - 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, - 210, 210, 209, nil, 210, nil, nil, nil, nil, nil, - nil, nil, 210, 210, nil, 210, 210, 210, 210, 210, - 210, 210, nil, nil, 210, 210, nil, nil, nil, 210, - 210, 210, 210, nil, nil, nil, nil, nil, 210, nil, - nil, nil, nil, nil, nil, nil, 210, 210, nil, 210, - 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, - 210, 258, 258, 210, nil, 258, nil, nil, nil, nil, - nil, nil, nil, 258, 258, nil, 258, 258, 258, 258, - 258, 258, 258, nil, nil, 258, 258, nil, nil, nil, - 258, 258, 258, 258, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 258, 258, nil, - 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, - 258, 258, 437, 437, 258, nil, 437, nil, nil, nil, - nil, nil, nil, nil, 437, 437, nil, 437, 437, 437, - 437, 437, 437, 437, nil, nil, 437, 437, nil, nil, - nil, 437, 437, 437, 437, nil, nil, nil, nil, nil, - 437, nil, nil, nil, nil, nil, nil, nil, 437, 437, - nil, 437, 437, 437, 437, 437, 437, 437, 437, 437, - 437, 437, 437, 438, 438, 437, nil, 438, nil, nil, - nil, nil, nil, nil, nil, 438, 438, nil, 438, 438, - 438, 438, 438, 438, 438, nil, nil, 438, 438, nil, - nil, nil, 438, 438, 438, 438, nil, nil, nil, nil, - nil, 438, nil, nil, nil, nil, nil, nil, nil, 438, - 438, nil, 438, 438, 438, 438, 438, 438, 438, 438, - 438, 438, 438, 438, 503, 503, 438, nil, 503, nil, - nil, nil, nil, nil, nil, nil, 503, 503, nil, 503, - 503, 503, 503, 503, 503, 503, nil, nil, 503, 503, - nil, nil, nil, 503, 503, 503, 503, nil, nil, nil, - nil, nil, 503, nil, nil, nil, nil, nil, nil, nil, - 503, 503, nil, 503, 503, 503, 503, 503, 503, 503, - 503, 503, 503, 503, 503, 504, 504, 503, nil, 504, - nil, nil, nil, nil, nil, nil, nil, 504, 504, nil, - 504, 504, 504, 504, 504, 504, 504, nil, nil, 504, - 504, nil, nil, nil, 504, 504, 504, 504, nil, nil, - nil, nil, nil, 504, nil, nil, nil, nil, nil, nil, - nil, 504, 504, nil, 504, 504, 504, 504, 504, 504, - 504, 504, 504, 504, 504, 504, 515, 515, 504, nil, - 515, nil, nil, nil, nil, nil, nil, nil, 515, 515, - nil, 515, 515, 515, 515, 515, 515, 515, nil, nil, - 515, 515, nil, nil, nil, 515, 515, 515, 515, nil, - nil, nil, nil, nil, 515, nil, nil, nil, nil, nil, - nil, nil, 515, 515, nil, 515, 515, 515, 515, 515, - 515, 515, 515, 515, 515, 515, 515, 516, 516, 515, - nil, 516, nil, nil, nil, nil, nil, nil, nil, 516, - 516, nil, 516, 516, 516, 516, 516, 516, 516, nil, - nil, 516, 516, nil, nil, nil, 516, 516, 516, 516, - nil, nil, nil, nil, nil, 516, nil, nil, nil, nil, - nil, nil, nil, 516, 516, nil, 516, 516, 516, 516, - 516, 516, 516, 516, 516, 516, 516, 516, 543, 543, - 516, nil, 543, nil, nil, nil, nil, nil, nil, nil, - 543, 543, nil, 543, 543, 543, 543, 543, 543, 543, - nil, nil, 543, 543, nil, nil, nil, 543, 543, 543, - 543, nil, nil, nil, nil, nil, 543, nil, nil, nil, - nil, nil, nil, nil, 543, 543, nil, 543, 543, 543, - 543, 543, 543, 543, 543, 543, 543, 543, 543, 544, - 544, 543, nil, 544, nil, nil, nil, nil, nil, nil, - nil, 544, 544, nil, 544, 544, 544, 544, 544, 544, - 544, nil, nil, 544, 544, nil, nil, nil, 544, 544, - 544, 544, nil, nil, nil, nil, nil, 544, nil, nil, - nil, nil, nil, nil, nil, 544, 544, nil, 544, 544, - 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, - 550, 550, 544, nil, 550, nil, nil, nil, nil, nil, - nil, nil, 550, 550, nil, 550, 550, 550, 550, 550, - 550, 550, nil, nil, 550, 550, nil, nil, nil, 550, - 550, 550, 550, nil, nil, nil, nil, nil, 550, nil, - nil, nil, nil, nil, nil, nil, 550, 550, nil, 550, - 550, 550, 550, 550, 550, 550, 550, 550, 550, 550, - 550, 551, 551, 550, nil, 551, nil, nil, nil, nil, - nil, nil, nil, 551, 551, nil, 551, 551, 551, 551, - 551, 551, 551, nil, nil, 551, 551, nil, nil, nil, - 551, 551, 551, 551, nil, nil, nil, nil, nil, 551, - nil, nil, nil, nil, nil, nil, nil, 551, 551, nil, - 551, 551, 551, 551, 551, 551, 551, 551, 551, 551, - 551, 551, 917, 917, 551, nil, 917, nil, nil, nil, - nil, nil, nil, nil, 917, 917, nil, 917, 917, 917, - 917, 917, 917, 917, nil, nil, 917, 917, nil, nil, - nil, 917, 917, 917, 917, nil, nil, nil, nil, nil, - 917, nil, nil, nil, nil, nil, nil, nil, 917, 917, - nil, 917, 917, 917, 917, 917, 917, 917, 917, 917, - 917, 917, 917, 971, 971, 917, nil, 971, nil, nil, - nil, nil, nil, nil, nil, 971, 971, nil, 971, 971, - 971, 971, 971, 971, 971, nil, nil, 971, 971, nil, - nil, nil, 971, 971, 971, 971, nil, nil, nil, nil, - nil, 971, nil, nil, nil, nil, nil, nil, nil, 971, - 971, nil, 971, 971, 971, 971, 971, 971, 971, 971, - 971, 971, 971, 971, 972, 972, 971, nil, 972, nil, - nil, nil, nil, nil, nil, nil, 972, 972, nil, 972, - 972, 972, 972, 972, 972, 972, nil, nil, 972, 972, - nil, nil, nil, 972, 972, 972, 972, nil, nil, nil, - nil, nil, 972, nil, nil, nil, nil, nil, nil, nil, - 972, 972, nil, 972, 972, 972, 972, 972, 972, 972, - 972, 972, 972, 972, 972, nil, 797, 972, 797, 797, - 797, 797, 797, 799, nil, 799, 799, 799, 799, 799, - nil, 797, nil, nil, nil, nil, nil, 843, 799, 843, - 843, 843, 843, 843, nil, nil, nil, nil, nil, nil, - nil, nil, 843, 797, nil, nil, nil, nil, nil, nil, - 799, nil, 797, 797, 797, 797, nil, nil, nil, 797, - nil, 799, 799, nil, 843, nil, 799, nil, nil, nil, - nil, nil, nil, 843, 843, 843, 843, nil, nil, 845, - 843, 845, 845, 845, 845, 845, 847, nil, 847, 847, - 847, 847, 847, nil, 845, nil, nil, nil, nil, nil, - 900, 847, 900, 900, 900, 900, 900, nil, nil, nil, - nil, nil, nil, nil, nil, 900, 845, nil, nil, nil, - nil, nil, nil, 847, nil, 845, 845, 845, 845, nil, - nil, nil, 845, nil, 847, 847, nil, 900, 900, 847, - nil, nil, nil, nil, nil, nil, 900, 900, 900, 900, - nil, nil, 932, 900, 932, 932, 932, 932, 932, 934, - nil, 934, 934, 934, 934, 934, 936, 932, 936, 936, - 936, 936, 936, 938, 934, 938, 938, 938, 938, 938, - nil, 936, nil, nil, nil, nil, nil, nil, 938, 932, - nil, nil, nil, nil, nil, nil, 934, nil, 932, 932, - 932, 932, nil, 936, nil, 932, nil, 934, 934, nil, - 938, nil, 934, nil, 936, 936, nil, nil, nil, 936, - nil, 938, 938, nil, nil, 956, 938, 956, 956, 956, - 956, 956, 958, nil, 958, 958, 958, 958, 958, 960, - 956, 960, 960, 960, 960, 960, 962, 958, 962, 962, - 962, 962, 962, 998, 960, 998, 998, 998, 998, 998, - nil, 962, 956, nil, nil, nil, nil, nil, 998, 958, - nil, 956, 956, 956, 956, nil, 960, nil, 956, nil, - 958, 958, nil, 962, nil, 958, nil, 960, 960, nil, - 998, nil, 960, nil, 962, 962, nil, nil, nil, 962, - nil, 998, 998, nil, nil, 1008, 998, 1008, 1008, 1008, - 1008, 1008, nil, nil, nil, nil, nil, nil, nil, nil, - 1008, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 1008, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 1008, 1008, nil, nil, nil, 1008 ] - -racc_action_pointer = [ - 0, 125, nil, 24, nil, 5042, 1141, 39, 22340, 22468, - 84, nil, 75, 220, 360, 247, 192, 439, nil, 25, - 5171, 6856, 331, nil, 111, nil, 55, 21855, 21965, 5300, - 5429, 5558, nil, 758, 5687, 5816, nil, 257, 280, 282, - 390, 485, 5953, 6082, 6211, 317, 559, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 890, nil, 67, 6340, - 6469, 0, nil, 6598, 6727, nil, nil, 6856, 6993, 7122, - 7251, 22852, nil, nil, nil, nil, nil, nil, nil, 656, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 0, nil, nil, 134, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 460, nil, - 7380, nil, nil, nil, nil, 7517, 7646, 7775, 7904, 8033, - 1027, nil, 595, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 375, nil, 1156, 8162, 8291, 8420, 23448, - 23509, 8549, 8678, 8807, 8936, 9065, 9194, nil, nil, 589, - 83, 107, 465, 139, 390, 488, nil, 9323, 1285, 524, - 9452, 9581, 9710, 9839, 9968, 10097, 10226, 10355, 10484, 10613, - 10742, 10871, 11000, 11129, 11258, 11387, 11516, 11645, 11774, 11903, - 12032, 12161, 12290, 12419, 12548, 12677, nil, nil, 23570, nil, - nil, 525, 12806, 12935, nil, nil, nil, nil, nil, nil, - nil, 13064, nil, 7380, nil, 492, 507, nil, 13193, 570, - 13322, nil, 13451, 13580, nil, nil, 57, nil, 13709, 1156, - 555, 540, 1414, 551, 593, 571, 13838, 1543, 591, 758, - 761, 653, 800, nil, 627, 588, 79, nil, nil, nil, - 640, 504, 607, 13975, nil, 318, 679, 681, 808, nil, - 687, nil, 14104, 1672, 14233, 625, nil, 243, 258, 663, - 652, 344, 683, nil, nil, 564, 133, 140, 14362, 14491, - 343, 758, 648, 32, 57, 844, 731, 65, 771, nil, - nil, 359, 395, 449, nil, 931, nil, 59, 14620, nil, - nil, nil, 142, 310, 419, 464, 465, 493, 565, 567, - 630, nil, 657, nil, 14749, nil, 356, 479, 484, 513, - 539, 59, 89, 546, nil, nil, nil, nil, nil, nil, - nil, nil, 701, 22596, nil, nil, nil, nil, 705, nil, - 706, nil, 14878, 711, nil, 1672, 722, nil, 724, 729, - 384, 447, 22077, nil, nil, nil, 244, 356, 783, nil, - nil, 1804, 1938, nil, 13838, nil, 743, nil, nil, 758, - nil, nil, nil, nil, 218, nil, 798, 23631, 23692, 15007, - 143, 15136, 15265, 15394, 1027, 1156, 873, 904, 829, 834, - 844, 846, 2978, 3107, 3236, 1285, 1414, 1543, 1753, 1887, - 2075, 2204, 2333, 2462, 2591, 633, 817, 2720, 2849, 15910, - 90, 22206, nil, nil, nil, nil, 783, nil, 269, 293, - 784, nil, nil, 15523, nil, 15652, nil, 15781, nil, nil, - nil, nil, 15910, 1270, 2075, 794, 792, nil, nil, 801, - 16047, 805, 16176, 23753, 23814, 942, 847, nil, nil, 16305, - 805, nil, 16434, 16563, 16692, 23875, 23936, 21723, 16821, 933, - 937, 761, 860, nil, 16950, nil, nil, 17079, nil, nil, - nil, nil, 22209, 2204, 943, nil, 2333, 158, 205, 963, - 972, 17208, 17337, 23997, 24058, 100, nil, nil, 959, nil, - 24119, 24180, 17466, nil, nil, nil, 415, 271, 2462, 23052, - nil, 288, nil, nil, nil, 895, nil, nil, nil, 863, - nil, nil, 381, nil, 406, nil, nil, 851, nil, 855, - nil, nil, nil, 22724, nil, 858, 17595, 17724, 490, 900, - 17853, 17982, 18111, 18240, 904, nil, nil, 18369, 18498, 908, - nil, 18627, 18756, nil, nil, 152, 170, 485, 619, 875, - 5816, 877, nil, 22170, nil, 2591, 984, 74, 308, nil, - 2720, 2849, nil, 885, nil, 947, 18885, nil, nil, nil, - 926, 206, 19014, 907, nil, 911, 199, 270, 962, 425, - 1027, 964, 921, 19143, 23014, 989, 997, 325, 1055, 19272, - nil, 953, nil, 386, 98, 23141, nil, 954, 975, nil, - 980, 984, 988, nil, nil, nil, nil, nil, nil, 987, - nil, 623, nil, 19401, nil, nil, nil, 1080, nil, nil, - nil, 1088, nil, nil, 1089, 786, nil, 1127, nil, nil, - nil, nil, 1137, nil, 144, 1021, 116, 129, 159, 252, - 19530, 518, 1156, nil, 1022, 2978, 19659, nil, nil, 1144, - 3107, 23233, 454, 22965, nil, nil, nil, nil, nil, nil, - 3236, nil, nil, nil, nil, nil, nil, nil, 1021, 19788, - 23060, 19917, nil, 1031, nil, 23106, nil, 23152, nil, nil, - 23198, nil, 23244, nil, 23290, 20046, 20175, 20304, 20433, 250, - 20562, 1035, 1036, nil, 1037, 1039, 1059, nil, 1084, 1082, - 1081, 1098, 20691, nil, nil, 1233, nil, nil, 3365, 1133, - 1241, nil, nil, nil, 1122, 557, nil, nil, 1252, nil, - 3494, 1135, 1182, nil, nil, 1180, nil, nil, nil, nil, - 1145, 644, nil, nil, 748, 23325, nil, 24425, nil, 24432, - nil, 20820, nil, 854, nil, 1147, 357, nil, 1151, nil, - nil, nil, nil, 1273, nil, 20949, 1274, 3623, 3752, nil, - 21078, 3881, 139, 224, nil, 1284, 607, 4010, nil, 1288, - 1168, nil, nil, 1172, 1168, nil, 23336, 21207, 21336, 23382, - 667, nil, nil, 24446, nil, 24498, nil, 24505, nil, nil, - 1212, 959, 21465, 1030, 1272, nil, 1228, nil, nil, nil, - 4139, nil, nil, 160, 21594, nil, nil, 4268, 4397, 1255, - 1230, nil, nil, nil, 1231, 1233, nil, 1238, 1239, nil, - 1242, nil, 1249, 890, 1248, 1271, nil, nil, 166, nil, - 1375, 1380, nil, 391, nil, nil, nil, 1388, nil, nil, - 24519, nil, 1265, nil, nil, 1266, 1271, 1276, 1277, nil, - 1278, nil, 652, nil, nil, nil, 1159, 24241, nil, nil, - nil, 4526, 1281, 1285, 1417, 1357, 1526, nil, 1309, 1417, - nil, nil, 24571, nil, 24578, nil, 24585, nil, 24592, nil, - nil, nil, nil, 481, 1400, 1294, 4655, nil, nil, nil, - nil, nil, 4784, nil, 4913, nil, 24644, nil, 24651, nil, - 24658, nil, 24665, nil, nil, nil, 1013, 1339, 1341, 1431, - 21723, 24302, 24363, 1534, nil, nil, 1306, 1307, 1308, 1309, - 1317, 1430, 1323, 1438, 857, 1461, 1465, 1349, 1353, 1357, - 1365, nil, nil, 1370, 167, 168, 170, 1672, 24672, nil, - nil, nil, nil, 1529, 1370, nil, nil, nil, 24724, nil, - nil, nil, nil, 169, 1371, 1374, 1375, nil, nil ] - -racc_action_default = [ - -3, -591, -1, -577, -4, -591, -7, -591, -591, -591, - -591, -29, -591, -591, -591, -279, -591, -41, -44, -579, - -591, -49, -51, -52, -53, -57, -258, -258, -258, -293, - -329, -330, -69, -11, -73, -81, -83, -591, -488, -489, - -591, -591, -591, -591, -591, -579, -239, -270, -271, -272, - -273, -274, -275, -276, -277, -278, -567, -281, -283, -590, - -558, -301, -303, -591, -591, -307, -310, -577, -591, -591, - -591, -591, -331, -332, -334, -335, -431, -432, -433, -434, - -435, -456, -438, -439, -458, -460, -443, -448, -452, -454, - -470, -458, -472, -473, -565, -477, -478, -566, -480, -481, - -482, -483, -484, -485, -486, -487, -492, -493, -591, -2, - -578, -586, -587, -588, -6, -591, -591, -591, -591, -591, - -3, -17, -591, -112, -113, -114, -115, -116, -117, -118, - -119, -120, -124, -125, -126, -127, -128, -129, -130, -131, - -132, -133, -134, -135, -136, -137, -138, -139, -140, -141, - -142, -143, -144, -145, -146, -147, -148, -149, -150, -151, - -152, -153, -154, -155, -156, -157, -158, -159, -160, -161, - -162, -163, -164, -165, -166, -167, -168, -169, -170, -171, - -172, -173, -174, -175, -176, -177, -178, -179, -180, -181, - -182, -183, -184, -185, -186, -187, -188, -189, -190, -191, - -192, -193, -194, -22, -121, -11, -591, -591, -248, -591, - -591, -591, -591, -591, -591, -591, -579, -580, -48, -591, - -488, -489, -591, -279, -591, -591, -231, -591, -11, -591, - -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, - -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, - -591, -591, -591, -591, -591, -591, -400, -402, -591, -575, - -576, -58, -248, -591, -300, -406, -415, -417, -64, -412, - -65, -579, -66, -240, -253, -262, -262, -257, -591, -263, - -591, -560, -591, -591, -67, -68, -577, -12, -591, -15, - -591, -71, -11, -579, -591, -74, -77, -11, -89, -90, - -591, -591, -97, -293, -296, -579, -591, -329, -330, -333, - -413, -591, -79, -591, -85, -290, -474, -475, -591, -216, - -217, -232, -591, -11, -591, -579, -241, -583, -583, -591, - -591, -583, -591, -302, -392, -50, -591, -591, -591, -591, - -577, -591, -578, -488, -489, -591, -591, -279, -591, -345, - -346, -107, -108, -591, -110, -591, -279, -591, -591, -488, - -489, -322, -112, -113, -154, -155, -156, -172, -177, -184, - -187, -324, -591, -556, -591, -436, -591, -591, -591, -591, - -591, -591, -591, -591, 1019, -5, -589, -23, -24, -25, - -26, -27, -591, -591, -19, -20, -21, -122, -591, -30, - -39, -40, -591, -591, -31, -197, -579, -249, -262, -262, - -568, -569, -258, -410, -570, -571, -569, -568, -258, -409, - -411, -570, -571, -37, -205, -38, -591, -42, -43, -195, - -263, -45, -46, -47, -579, -299, -591, -591, -591, -248, - -290, -591, -591, -591, -206, -207, -208, -209, -210, -211, - -212, -213, -218, -219, -220, -221, -222, -223, -224, -225, - -226, -227, -228, -229, -230, -233, -234, -235, -236, -579, - -381, -258, -568, -569, -55, -59, -579, -259, -381, -381, - -579, -295, -254, -591, -255, -591, -260, -591, -264, -563, - -564, -10, -578, -14, -3, -579, -70, -288, -86, -75, - -591, -579, -248, -591, -591, -96, -591, -474, -475, -591, - -82, -87, -591, -591, -591, -591, -591, -237, -591, -423, - -591, -284, -591, -242, -585, -584, -244, -585, -291, -292, - -559, -304, -520, -11, -336, -337, -11, -591, -591, -591, - -591, -591, -248, -591, -591, -290, -315, -107, -108, -109, - -591, -591, -248, -318, -494, -495, -591, -591, -11, -520, - -326, -579, -437, -457, -462, -591, -464, -440, -459, -591, - -461, -442, -591, -445, -591, -447, -450, -591, -451, -591, - -471, -8, -18, -591, -28, -269, -591, -591, -414, -591, - -250, -252, -591, -591, -60, -247, -407, -591, -591, -62, - -408, -591, -591, -298, -581, -568, -569, -568, -569, -579, - -195, -591, -382, -579, -384, -11, -54, -403, -381, -245, - -11, -11, -294, -262, -261, -265, -591, -561, -562, -13, - -591, -72, -591, -78, -84, -579, -568, -569, -246, -93, - -95, -591, -80, -591, -204, -214, -215, -579, -590, -590, - -282, -579, -287, -583, -591, -520, -395, -555, -555, -503, - -505, -505, -505, -519, -521, -522, -523, -524, -525, -526, - -527, -591, -529, -591, -535, -537, -538, -540, -545, -547, - -548, -550, -551, -552, -591, -590, -338, -590, -308, -339, - -340, -311, -591, -314, -591, -579, -568, -569, -572, -289, - -591, -107, -108, -111, -579, -11, -591, -497, -320, -591, - -11, -520, -591, -591, -557, -463, -466, -467, -468, -469, - -11, -441, -444, -446, -449, -453, -455, -123, -267, -591, - -198, -591, -582, -262, -33, -200, -34, -201, -61, -35, - -203, -36, -202, -63, -196, -591, -591, -591, -591, -414, - -591, -555, -555, -363, -365, -365, -365, -380, -591, -579, - -386, -526, -591, -533, -543, -591, -405, -404, -11, -591, - -591, -256, -266, -16, -76, -91, -88, -297, -590, -343, - -11, -424, -590, -425, -426, -591, -243, -393, -396, -398, - -579, -591, -501, -502, -591, -591, -512, -591, -515, -591, - -517, -591, -347, -591, -349, -351, -358, -526, -579, -531, - -539, -549, -553, -591, -341, -591, -591, -11, -11, -313, - -591, -11, -414, -591, -414, -591, -591, -11, -323, -591, - -579, -499, -327, -591, -268, -32, -199, -251, -591, -238, - -591, -361, -362, -371, -373, -591, -376, -591, -378, -383, - -591, -591, -591, -532, -591, -401, -591, -416, -418, -9, - -11, -430, -344, -591, -591, -428, -285, -11, -11, -591, - -555, -536, -554, -504, -505, -505, -530, -505, -505, -546, - -505, -541, -579, -591, -356, -591, -528, -305, -591, -306, - -591, -591, -265, -590, -316, -319, -496, -591, -325, -498, - -520, -465, -555, -534, -364, -365, -365, -365, -365, -544, - -365, -385, -579, -388, -390, -391, -542, -591, -290, -56, - -429, -11, -98, -99, -591, -591, -106, -427, -591, -591, - -394, -500, -591, -508, -591, -510, -591, -513, -591, -516, - -518, -348, -350, -354, -591, -359, -11, -309, -312, -419, - -420, -421, -11, -321, -11, -360, -591, -368, -591, -370, - -591, -374, -591, -377, -379, -387, -591, -289, -572, -423, - -248, -591, -591, -105, -397, -399, -505, -505, -505, -505, - -352, -591, -357, -591, -590, -591, -591, -365, -365, -365, - -365, -389, -422, -579, -568, -569, -572, -104, -591, -506, - -509, -511, -514, -591, -355, -342, -317, -328, -591, -366, - -369, -372, -375, -414, -505, -353, -365, -507, -367 ] - -racc_goto_table = [ - 215, 406, 295, 265, 269, 14, 333, 126, 126, 326, - 14, 218, 274, 274, 274, 371, 257, 540, 520, 2, - 113, 121, 204, 533, 536, 219, 322, 401, 648, 428, - 484, 412, 418, 425, 219, 219, 219, 258, 14, 300, - 300, 710, 129, 129, 336, 337, 131, 131, 340, 627, - 110, 435, 309, 309, 778, 476, 663, 261, 268, 270, - 475, 624, 6, 624, 752, 813, 312, 6, 219, 219, - 126, 588, 219, 345, 355, 355, 549, 335, 335, 755, - 471, 335, 808, 663, 113, 656, 309, 309, 309, 879, - 909, 627, 913, 816, 758, 109, 387, 388, 389, 390, - 523, 526, 1, 291, 530, 876, 481, 275, 275, 275, - 792, 793, 276, 276, 276, 14, 915, 510, 688, 691, - 219, 219, 219, 219, 14, 14, 756, 293, 496, 335, - 335, 335, 335, 114, 942, 357, 361, 327, 377, 392, - 945, 859, 328, 331, 563, 383, 570, 573, 573, 572, - 574, 629, 203, 876, 350, 627, 393, 615, 618, 341, - 272, 284, 285, 484, 583, 620, 621, 329, 624, 624, - 617, 373, 6, 330, 531, 348, 553, 372, 323, 663, - 324, 391, 6, 651, 325, 334, 413, 338, 817, 339, - 818, 274, 700, 952, 705, 827, 558, 399, 404, 982, - 559, 909, 423, 427, 841, 842, 713, 991, 790, 422, - 14, 219, 219, 219, 882, 692, 219, 219, 219, 219, - 219, 219, 900, 757, 879, 759, 912, 431, 432, 433, - 434, 915, 609, 14, 942, 663, 1004, 654, 385, 787, - 850, 532, 870, 867, 868, 274, 274, 470, 876, 478, - 479, 949, 782, 709, 274, 863, 13, 375, 1015, 412, - 418, 13, 376, 378, 830, 379, 380, 219, 219, 603, - 381, 869, 876, 703, 749, 382, 219, 715, 720, 706, - 874, 511, 871, 265, 403, 903, 506, 269, nil, 13, - 403, 902, nil, 14, 752, 635, 752, 14, 752, 950, - 775, 300, 14, 113, 633, 768, 522, nil, 875, 905, - 877, 619, nil, 642, 309, 622, nil, nil, 300, 537, - 538, nil, nil, 931, nil, 638, nil, 499, 14, 219, - 631, 309, nil, 492, nil, 695, 634, 638, 521, nil, - 723, 275, 723, 219, 219, 704, 276, nil, nil, 275, - 493, nil, 335, 335, 276, 955, 906, 113, 907, nil, - 822, nil, 291, 219, 1005, 638, 13, 291, nil, 824, - nil, nil, 557, 638, 554, 13, 13, 771, 491, 219, - nil, 821, 954, nil, nil, 560, 495, 589, 561, 595, - nil, 501, 126, 738, 477, 600, 714, nil, 743, nil, - 825, 627, 480, nil, 894, 829, 582, 752, nil, 752, - nil, 752, nil, 752, 413, 624, nil, nil, 428, nil, - nil, nil, 274, nil, 663, nil, 786, 129, nil, nil, - nil, 131, 539, nil, nil, nil, 774, 422, nil, nil, - nil, nil, nil, 594, 219, 976, nil, nil, 595, 599, - 611, nil, nil, nil, nil, nil, nil, nil, nil, 752, - nil, 13, nil, nil, nil, nil, nil, nil, 511, 987, - 783, nil, nil, nil, nil, nil, nil, 511, 992, nil, - 413, nil, 777, nil, 13, 274, nil, 771, nil, nil, - nil, nil, 413, nil, nil, nil, nil, 14, nil, 14, - nil, nil, 616, 422, nil, 300, nil, 219, nil, nil, - nil, nil, nil, 630, 300, 422, nil, nil, 309, nil, - 413, nil, 897, 219, nil, 274, nil, 309, 413, nil, - nil, nil, 647, nil, nil, 274, nil, nil, 14, nil, - nil, 14, nil, 422, 13, nil, nil, 219, 13, 422, - 921, nil, 294, 13, 689, 689, 6, 219, nil, nil, - nil, nil, 767, 14, nil, nil, 623, nil, nil, 951, - nil, nil, nil, 707, 708, 946, nil, nil, nil, 13, - nil, nil, 126, 734, 736, nil, nil, nil, 739, 741, - 589, nil, 427, nil, 760, nil, 727, 219, 219, 784, - 511, nil, 219, 219, nil, nil, 219, 653, nil, nil, - 766, 776, nil, nil, nil, 595, 589, 129, 600, 694, - 14, 131, nil, nil, nil, 14, 14, nil, nil, nil, - nil, nil, 785, nil, nil, nil, nil, 300, nil, 26, - nil, nil, nil, 886, 26, nil, nil, nil, 300, 986, - 309, nil, nil, 753, nil, nil, nil, 832, 1013, 26, - nil, 309, nil, nil, nil, 899, nil, nil, 26, 26, - 26, nil, 26, 733, nil, nil, 589, nil, nil, nil, - 754, 823, nil, nil, nil, 589, nil, 826, nil, 796, - 798, 800, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 26, 26, nil, 219, 26, 802, nil, nil, - 14, 219, 126, nil, 335, 14, nil, 941, nil, nil, - 335, nil, 835, nil, 398, 14, nil, 403, 861, 831, - nil, nil, 865, nil, nil, nil, 219, nil, nil, nil, - 760, nil, nil, nil, nil, nil, nil, 294, 13, 26, - 13, nil, nil, nil, 26, 26, 26, 26, 26, 26, - nil, nil, nil, 993, nil, nil, nil, 853, nil, nil, - nil, 760, nil, 14, nil, nil, nil, nil, nil, nil, - 309, nil, nil, nil, nil, 14, nil, nil, nil, 13, - nil, nil, 13, 638, nil, nil, 888, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 294, nil, nil, 13, nil, 294, nil, nil, nil, - 219, nil, 14, 14, nil, nil, 14, nil, nil, 335, - 16, 872, 14, nil, 872, 16, 844, 846, 848, 802, - 689, nil, 884, 896, 26, 26, 26, 26, nil, nil, - 26, 26, 26, 26, 26, 26, nil, 916, nil, nil, - nil, nil, nil, 16, 878, 14, 880, 26, nil, 924, - 309, 13, 14, 14, nil, nil, 13, 13, nil, nil, - 872, nil, 309, 753, nil, 753, nil, 753, nil, nil, - nil, nil, nil, 965, nil, nil, nil, nil, 349, nil, - nil, 26, 26, 933, 935, nil, 937, 939, nil, 940, - 26, nil, 908, nil, 910, nil, 422, nil, nil, 802, - nil, 802, nil, nil, nil, nil, 14, 26, nil, nil, - nil, 26, nil, nil, nil, nil, 26, nil, nil, nil, - 16, nil, nil, nil, nil, nil, nil, nil, 413, 16, - 16, 14, nil, 274, nil, nil, nil, 14, nil, 14, - nil, 13, 26, 26, nil, nil, 13, nil, nil, nil, - nil, 422, nil, nil, 589, 219, 13, 26, 26, 980, - 802, 15, nil, nil, nil, nil, 15, 957, 959, 961, - 963, nil, 964, nil, nil, nil, 753, 26, 753, 977, - 753, 978, 753, 979, nil, 999, 1000, 1001, 1002, nil, - nil, nil, nil, 26, 15, 302, 302, 802, nil, 802, - nil, nil, nil, 988, 13, 989, nil, 990, nil, nil, - nil, nil, nil, nil, nil, 16, 13, nil, nil, 802, - nil, nil, 426, 1017, nil, nil, nil, nil, 753, 347, - 356, 356, 685, nil, nil, 687, nil, nil, 16, nil, - nil, nil, nil, nil, nil, 1014, nil, nil, nil, 1009, - 1010, 1011, 1012, 13, 13, 1016, nil, 13, 26, nil, - nil, nil, nil, 13, nil, nil, nil, nil, nil, nil, - nil, 15, nil, nil, nil, nil, nil, nil, 1018, nil, - 15, 15, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 13, nil, 16, nil, - nil, nil, 16, 13, 13, nil, nil, 16, nil, nil, - nil, 26, nil, 26, 765, nil, nil, nil, nil, 769, - 770, 26, nil, nil, nil, 38, nil, nil, nil, nil, - 38, nil, nil, 16, nil, nil, nil, 26, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 26, nil, nil, 26, nil, 13, 38, 298, - 298, 26, nil, nil, nil, nil, 15, nil, nil, nil, - nil, 26, nil, nil, nil, nil, nil, 26, nil, nil, - nil, nil, 13, nil, nil, nil, nil, nil, 13, 15, - 13, nil, nil, 343, 359, 359, 359, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 26, 26, nil, nil, nil, 26, 26, nil, 833, - 26, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 26, 38, nil, nil, nil, 26, - 26, nil, nil, nil, 38, 38, nil, nil, nil, 15, - nil, nil, nil, 15, nil, nil, nil, 302, 15, nil, - nil, nil, nil, nil, nil, nil, nil, 856, nil, nil, - nil, nil, nil, nil, 302, nil, nil, nil, nil, 862, - nil, nil, nil, nil, 15, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 16, nil, 16, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 890, 891, nil, 26, - 893, nil, nil, nil, 26, 26, nil, nil, nil, 26, - 38, nil, nil, nil, nil, nil, nil, nil, nil, 26, - nil, nil, nil, 16, nil, nil, 16, nil, nil, nil, - 26, nil, nil, 38, nil, nil, nil, nil, nil, 920, - nil, nil, nil, nil, nil, nil, 928, 929, 16, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 26, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 26, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 426, nil, 38, nil, nil, nil, 38, nil, nil, - 969, 298, 38, nil, nil, 16, nil, nil, nil, nil, - 16, 16, nil, nil, 26, nil, 26, 26, 298, nil, - 26, nil, nil, nil, nil, 984, 26, nil, 38, nil, - nil, 985, nil, 15, nil, 15, nil, nil, nil, nil, - nil, 302, nil, nil, nil, nil, nil, nil, nil, nil, - 302, nil, nil, nil, nil, nil, nil, nil, nil, 26, - nil, nil, nil, nil, nil, nil, 26, 26, nil, nil, - nil, nil, nil, nil, 15, nil, nil, 15, nil, 332, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 16, nil, nil, nil, 15, - 16, nil, nil, nil, nil, nil, 719, nil, nil, nil, - 16, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 26, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 26, nil, nil, nil, nil, - nil, 26, 39, 26, nil, nil, 15, 39, 16, nil, - nil, 15, 15, nil, nil, nil, nil, nil, nil, 26, - 16, nil, nil, 302, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 302, 39, 299, 299, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 38, nil, 38, - nil, nil, nil, nil, nil, 298, nil, 16, 16, nil, - nil, 16, nil, nil, 298, nil, nil, 16, nil, nil, - 344, 360, 360, 360, nil, 400, nil, nil, nil, nil, - nil, 430, nil, nil, nil, nil, nil, nil, 38, nil, - nil, 38, nil, nil, nil, nil, 15, nil, nil, nil, - 16, 15, nil, nil, 927, nil, nil, 16, 16, nil, - nil, 15, 39, 38, nil, nil, nil, nil, nil, nil, - nil, 39, 39, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 486, nil, 488, - nil, 489, 490, 356, nil, nil, nil, nil, nil, 15, - nil, 16, nil, nil, nil, nil, nil, nil, nil, nil, - 38, 15, nil, nil, nil, 38, 38, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 16, 298, nil, nil, - nil, nil, 16, nil, 16, nil, nil, nil, 298, nil, - nil, nil, nil, nil, nil, nil, nil, 39, 15, 15, - nil, nil, 15, nil, nil, nil, nil, nil, 15, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 39, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 356, nil, nil, nil, nil, nil, nil, - nil, 15, nil, nil, nil, 926, nil, nil, 15, 15, - 38, nil, nil, nil, nil, 38, nil, nil, nil, nil, - nil, 585, nil, nil, nil, 38, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 39, nil, nil, nil, 39, nil, nil, nil, 299, 39, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 15, nil, nil, 299, nil, 359, nil, nil, - nil, nil, nil, 38, nil, 39, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 38, nil, 15, nil, nil, - nil, nil, nil, 15, nil, 15, nil, nil, nil, nil, - nil, nil, 625, nil, 332, nil, 628, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 38, 38, nil, nil, 38, nil, nil, nil, - nil, nil, 38, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 625, nil, nil, 332, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 359, nil, nil, - 430, nil, nil, nil, nil, 38, nil, nil, nil, 922, - nil, nil, 38, 38, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 728, nil, nil, nil, 625, - 332, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 38, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 39, 772, 39, nil, nil, nil, - nil, 38, 299, nil, nil, nil, nil, 38, nil, 38, - nil, 299, nil, nil, nil, nil, nil, nil, 781, nil, - nil, nil, nil, 226, nil, nil, nil, nil, nil, nil, - nil, nil, 273, 273, 273, 39, nil, nil, 39, nil, - nil, nil, 809, nil, nil, 319, 320, 321, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 39, nil, 273, 273, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 834, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 39, nil, nil, - nil, nil, 39, 39, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 299, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 299, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 881, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 892, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 332, 39, nil, 273, - 405, 273, 39, nil, 424, 429, nil, nil, nil, nil, - nil, nil, 39, nil, nil, nil, nil, nil, nil, nil, - 226, nil, nil, 444, 445, 446, 447, 448, 449, 450, - 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, - 461, 462, 463, 464, 465, 466, 467, 468, 469, nil, - nil, nil, nil, nil, 360, 273, 273, nil, nil, nil, - 39, nil, nil, nil, 273, nil, nil, nil, nil, nil, - nil, 273, 39, 273, nil, 273, 273, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 39, - 39, nil, nil, 39, nil, 517, nil, nil, nil, 39, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 360, nil, nil, nil, nil, nil, - nil, nil, 39, nil, nil, nil, 923, nil, nil, 39, - 39, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 273, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 39, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 273, nil, 424, 610, 405, nil, 39, nil, - nil, nil, nil, nil, 39, nil, 39, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 273, nil, 273, nil, - 273, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 273, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 644, 645, 646, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 273, nil, nil, - 273, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 273, 273, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 273, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 273, - 730, nil, nil, 273, 273, 735, 737, nil, nil, nil, - 740, 742, nil, nil, 610, 744, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 273, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 273, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 273, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 273, nil, 836, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 735, 737, - 742, 740, nil, 839, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 273, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 273, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 273, 836, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 273 ] - -racc_goto_check = [ - 31, 23, 49, 69, 69, 22, 84, 57, 57, 65, - 22, 20, 33, 33, 33, 56, 138, 90, 8, 2, - 94, 15, 15, 87, 87, 22, 31, 27, 10, 18, - 71, 37, 37, 27, 22, 22, 22, 36, 22, 22, - 22, 96, 60, 60, 17, 17, 61, 61, 17, 175, - 6, 47, 63, 63, 11, 23, 163, 38, 38, 38, - 39, 72, 7, 72, 121, 88, 50, 7, 22, 22, - 57, 24, 22, 22, 22, 22, 54, 29, 29, 127, - 37, 29, 117, 163, 94, 137, 63, 63, 63, 171, - 172, 175, 132, 11, 130, 4, 17, 17, 17, 17, - 67, 67, 1, 45, 67, 167, 47, 66, 66, 66, - 122, 122, 68, 68, 68, 22, 133, 51, 89, 89, - 22, 22, 22, 22, 22, 22, 128, 46, 47, 29, - 29, 29, 29, 5, 115, 55, 55, 66, 152, 2, - 118, 12, 68, 68, 156, 152, 156, 156, 156, 155, - 155, 14, 16, 167, 19, 175, 30, 40, 42, 4, - 44, 44, 44, 71, 62, 40, 40, 64, 72, 72, - 70, 82, 7, 83, 86, 91, 93, 97, 98, 163, - 99, 7, 7, 100, 101, 102, 69, 103, 104, 105, - 106, 33, 107, 108, 109, 110, 111, 20, 20, 118, - 112, 172, 20, 20, 122, 122, 113, 132, 137, 57, - 22, 22, 22, 22, 117, 90, 22, 22, 22, 22, - 22, 22, 114, 119, 171, 125, 131, 29, 29, 29, - 29, 133, 23, 22, 115, 163, 118, 134, 5, 135, - 130, 136, 121, 139, 140, 33, 33, 141, 167, 143, - 144, 145, 146, 8, 33, 147, 21, 150, 118, 37, - 37, 21, 151, 153, 137, 154, 157, 22, 22, 47, - 158, 130, 167, 54, 24, 159, 22, 160, 161, 162, - 166, 49, 168, 69, 66, 169, 31, 69, nil, 21, - 66, 121, nil, 22, 121, 23, 121, 22, 121, 11, - 24, 22, 22, 94, 51, 40, 31, nil, 128, 127, - 128, 47, nil, 51, 63, 47, nil, nil, 22, 17, - 17, nil, nil, 122, nil, 37, nil, 50, 22, 22, - 47, 63, nil, 6, nil, 23, 47, 37, 29, nil, - 156, 66, 156, 22, 22, 23, 68, nil, nil, 66, - 7, nil, 29, 29, 68, 122, 128, 94, 128, nil, - 24, nil, 45, 22, 88, 37, 21, 45, nil, 24, - nil, nil, 29, 37, 94, 21, 21, 71, 4, 22, - nil, 87, 96, nil, nil, 36, 46, 31, 29, 69, - nil, 46, 57, 39, 44, 69, 47, nil, 39, nil, - 8, 175, 44, nil, 89, 8, 15, 121, nil, 121, - nil, 121, nil, 121, 69, 72, nil, nil, 18, nil, - nil, nil, 33, nil, 163, nil, 67, 60, nil, nil, - nil, 61, 4, nil, nil, nil, 51, 57, nil, nil, - nil, nil, nil, 38, 22, 128, nil, nil, 69, 38, - 31, nil, nil, nil, nil, nil, nil, nil, nil, 121, - nil, 21, nil, nil, nil, nil, nil, nil, 49, 128, - 27, nil, nil, nil, nil, nil, nil, 49, 10, nil, - 69, nil, 47, nil, 21, 33, nil, 71, nil, nil, - nil, nil, 69, nil, nil, nil, nil, 22, nil, 22, - nil, nil, 38, 57, nil, 22, nil, 22, nil, nil, - nil, nil, nil, 2, 22, 57, nil, nil, 63, nil, - 69, nil, 8, 22, nil, 33, nil, 63, 69, nil, - nil, nil, 29, nil, nil, 33, nil, nil, 22, nil, - nil, 22, nil, 57, 21, nil, nil, 22, 21, 57, - 87, nil, 9, 21, 94, 94, 7, 22, nil, nil, - nil, nil, 84, 22, nil, nil, 68, nil, nil, 90, - nil, nil, nil, 94, 94, 87, nil, nil, nil, 21, - nil, nil, 57, 20, 20, nil, nil, nil, 20, 20, - 31, nil, 20, nil, 31, nil, 15, 22, 22, 65, - 49, nil, 22, 22, nil, nil, 22, 68, nil, nil, - 138, 49, nil, nil, nil, 69, 31, 60, 69, 66, - 22, 61, nil, nil, nil, 22, 22, nil, nil, nil, - nil, nil, 31, nil, nil, nil, nil, 22, nil, 41, - nil, nil, nil, 47, 41, nil, nil, nil, 22, 8, - 63, nil, nil, 123, nil, nil, nil, 56, 24, 41, - nil, 63, nil, nil, nil, 47, nil, nil, 41, 41, - 41, nil, 41, 68, nil, nil, 31, nil, nil, nil, - 126, 17, nil, nil, nil, 31, nil, 17, nil, 165, - 165, 165, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 41, 41, nil, 22, 41, 116, nil, nil, - 22, 22, 57, nil, 29, 22, nil, 47, nil, nil, - 29, nil, 20, nil, 9, 22, nil, 66, 65, 94, - nil, nil, 65, nil, nil, nil, 22, nil, nil, nil, - 31, nil, nil, nil, nil, nil, nil, 9, 21, 41, - 21, nil, nil, nil, 41, 41, 41, 41, 41, 41, - nil, nil, nil, 23, nil, nil, nil, 22, nil, nil, - nil, 31, nil, 22, nil, nil, nil, nil, nil, nil, - 63, nil, nil, nil, nil, 22, nil, nil, nil, 21, - nil, nil, 21, 37, nil, nil, 17, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 9, nil, nil, 21, nil, 9, nil, nil, nil, - 22, nil, 22, 22, nil, nil, 22, nil, nil, 29, - 26, 123, 22, nil, 123, 26, 124, 124, 124, 116, - 94, nil, 116, 94, 41, 41, 41, 41, nil, nil, - 41, 41, 41, 41, 41, 41, nil, 22, nil, nil, - nil, nil, nil, 26, 126, 22, 126, 41, nil, 22, - 63, 21, 22, 22, nil, nil, 21, 21, nil, nil, - 123, nil, 63, 123, nil, 123, nil, 123, nil, nil, - nil, nil, nil, 31, nil, nil, nil, nil, 26, nil, - nil, 41, 41, 165, 165, nil, 165, 165, nil, 165, - 41, nil, 126, nil, 126, nil, 57, nil, nil, 116, - nil, 116, nil, nil, nil, nil, 22, 41, nil, nil, - nil, 41, nil, nil, nil, nil, 41, nil, nil, nil, - 26, nil, nil, nil, nil, nil, nil, nil, 69, 26, - 26, 22, nil, 33, nil, nil, nil, 22, nil, 22, - nil, 21, 41, 41, nil, nil, 21, nil, nil, nil, - nil, 57, nil, nil, 31, 22, 21, 41, 41, 116, - 116, 25, nil, nil, nil, nil, 25, 124, 124, 124, - 124, nil, 124, nil, nil, nil, 123, 41, 123, 126, - 123, 126, 123, 126, nil, 165, 165, 165, 165, nil, - nil, nil, nil, 41, 25, 25, 25, 116, nil, 116, - nil, nil, nil, 126, 21, 126, nil, 126, nil, nil, - nil, nil, nil, nil, nil, 26, 21, nil, nil, 116, - nil, nil, 26, 165, nil, nil, nil, nil, 123, 25, - 25, 25, 9, nil, nil, 9, nil, nil, 26, nil, - nil, nil, nil, nil, nil, 126, nil, nil, nil, 124, - 124, 124, 124, 21, 21, 126, nil, 21, 41, nil, - nil, nil, nil, 21, nil, nil, nil, nil, nil, nil, - nil, 25, nil, nil, nil, nil, nil, nil, 124, nil, - 25, 25, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 21, nil, 26, nil, - nil, nil, 26, 21, 21, nil, nil, 26, nil, nil, - nil, 41, nil, 41, 9, nil, nil, nil, nil, 9, - 9, 41, nil, nil, nil, 52, nil, nil, nil, nil, - 52, nil, nil, 26, nil, nil, nil, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 41, nil, nil, 41, nil, 21, 52, 52, - 52, 41, nil, nil, nil, nil, 25, nil, nil, nil, - nil, 41, nil, nil, nil, nil, nil, 41, nil, nil, - nil, nil, 21, nil, nil, nil, nil, nil, 21, 25, - 21, nil, nil, 52, 52, 52, 52, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 41, 41, nil, nil, nil, 41, 41, nil, 9, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 41, 52, nil, nil, nil, 41, - 41, nil, nil, nil, 52, 52, nil, nil, nil, 25, - nil, nil, nil, 25, nil, nil, nil, 25, 25, nil, - nil, nil, nil, nil, nil, nil, nil, 9, nil, nil, - nil, nil, nil, nil, 25, nil, nil, nil, nil, 9, - nil, nil, nil, nil, 25, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 26, nil, 26, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 9, 9, nil, 41, - 9, nil, nil, nil, 41, 41, nil, nil, nil, 41, - 52, nil, nil, nil, nil, nil, nil, nil, nil, 41, - nil, nil, nil, 26, nil, nil, 26, nil, nil, nil, - 41, nil, nil, 52, nil, nil, nil, nil, nil, 9, - nil, nil, nil, nil, nil, nil, 9, 9, 26, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 26, nil, 52, nil, nil, nil, 52, nil, nil, - 9, 52, 52, nil, nil, 26, nil, nil, nil, nil, - 26, 26, nil, nil, 41, nil, 41, 41, 52, nil, - 41, nil, nil, nil, nil, 9, 41, nil, 52, nil, - nil, 9, nil, 25, nil, 25, nil, nil, nil, nil, - nil, 25, nil, nil, nil, nil, nil, nil, nil, nil, - 25, nil, nil, nil, nil, nil, nil, nil, nil, 41, - nil, nil, nil, nil, nil, nil, 41, 41, nil, nil, - nil, nil, nil, nil, 25, nil, nil, 25, nil, 28, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 26, nil, nil, nil, 25, - 26, nil, nil, nil, nil, nil, 25, nil, nil, nil, - 26, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 41, nil, nil, nil, nil, - nil, 41, 53, 41, nil, nil, 25, 53, 26, nil, - nil, 25, 25, nil, nil, nil, nil, nil, nil, 41, - 26, nil, nil, 25, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 25, 53, 53, 53, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 52, nil, 52, - nil, nil, nil, nil, nil, 52, nil, 26, 26, nil, - nil, 26, nil, nil, 52, nil, nil, 26, nil, nil, - 53, 53, 53, 53, nil, 28, nil, nil, nil, nil, - nil, 28, nil, nil, nil, nil, nil, nil, 52, nil, - nil, 52, nil, nil, nil, nil, 25, nil, nil, nil, - 26, 25, nil, nil, 26, nil, nil, 26, 26, nil, - nil, 25, 53, 52, nil, nil, nil, nil, nil, nil, - nil, 53, 53, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 28, nil, 28, - nil, 28, 28, 25, nil, nil, nil, nil, nil, 25, - nil, 26, nil, nil, nil, nil, nil, nil, nil, nil, - 52, 25, nil, nil, nil, 52, 52, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 26, 52, nil, nil, - nil, nil, 26, nil, 26, nil, nil, nil, 52, nil, - nil, nil, nil, nil, nil, nil, nil, 53, 25, 25, - nil, nil, 25, nil, nil, nil, nil, nil, 25, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 53, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 25, nil, nil, nil, nil, nil, nil, - nil, 25, nil, nil, nil, 25, nil, nil, 25, 25, - 52, nil, nil, nil, nil, 52, nil, nil, nil, nil, - nil, 28, nil, nil, nil, 52, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 53, nil, nil, nil, 53, nil, nil, nil, 53, 53, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 25, nil, nil, 53, nil, 52, nil, nil, - nil, nil, nil, 52, nil, 53, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 52, nil, 25, nil, nil, - nil, nil, nil, 25, nil, 25, nil, nil, nil, nil, - nil, nil, 28, nil, 28, nil, 28, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 52, 52, nil, nil, 52, nil, nil, nil, - nil, nil, 52, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 28, nil, nil, 28, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 52, nil, nil, - 28, nil, nil, nil, nil, 52, nil, nil, nil, 52, - nil, nil, 52, 52, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 28, nil, nil, nil, 28, - 28, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 52, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 53, 28, 53, nil, nil, nil, - nil, 52, 53, nil, nil, nil, nil, 52, nil, 52, - nil, 53, nil, nil, nil, nil, nil, nil, 28, nil, - nil, nil, nil, 32, nil, nil, nil, nil, nil, nil, - nil, nil, 32, 32, 32, 53, nil, nil, 53, nil, - nil, nil, 28, nil, nil, 32, 32, 32, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 53, nil, 32, 32, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 28, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 53, nil, nil, - nil, nil, 53, 53, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 53, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 53, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 28, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 28, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 28, 53, nil, 32, - 32, 32, 53, nil, 32, 32, nil, nil, nil, nil, - nil, nil, 53, nil, nil, nil, nil, nil, nil, nil, - 32, nil, nil, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, nil, - nil, nil, nil, nil, 53, 32, 32, nil, nil, nil, - 53, nil, nil, nil, 32, nil, nil, nil, nil, nil, - nil, 32, 53, 32, nil, 32, 32, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 53, - 53, nil, nil, 53, nil, 32, nil, nil, nil, 53, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 53, nil, nil, nil, nil, nil, - nil, nil, 53, nil, nil, nil, 53, nil, nil, 53, - 53, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 32, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 53, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 32, nil, 32, 32, 32, nil, 53, nil, - nil, nil, nil, nil, 53, nil, 53, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 32, nil, 32, nil, - 32, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 32, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 32, 32, 32, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 32, nil, nil, - 32, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 32, 32, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 32, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 32, - 32, nil, nil, 32, 32, 32, 32, nil, nil, nil, - 32, 32, nil, nil, 32, 32, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 32, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 32, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 32, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 32, nil, 32, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 32, 32, - 32, 32, nil, 32, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 32, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 32, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 32, 32, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 32 ] - -racc_goto_pointer = [ - nil, 102, 19, nil, 92, 128, 47, 62, -305, 519, - -491, -594, -637, nil, -341, 13, 143, -19, -183, 86, - -9, 256, 5, -207, -335, 981, 830, -179, 1459, 14, - 35, -19, 2093, -17, nil, nil, 13, -178, 31, -201, - -313, 639, -316, nil, 131, 70, 94, -165, nil, -32, - 31, -196, 1145, 1592, -277, 66, -56, -1, nil, nil, - 34, 38, -233, 18, 108, -50, 78, -227, 83, -23, - -301, -246, -422, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 100, 113, -55, nil, -160, -313, -620, -419, - -324, 107, nil, -181, 17, nil, -518, 106, 121, 122, - -338, 126, 123, 122, -500, 123, -501, -354, -701, -359, - -513, -165, -171, -354, -610, -749, 36, -589, -745, -390, - nil, -549, -547, 40, 82, -388, 67, -534, -487, nil, - -519, -625, -759, -735, -295, -415, -93, -447, -6, -545, - -545, -9, nil, -17, -17, -642, -397, -527, nil, nil, - 178, 181, 54, 178, 179, -230, -232, 179, 182, 186, - -288, -288, -276, -476, nil, 29, -515, -690, -509, -555, - nil, -708, -755, nil, nil, -436 ] - -racc_goto_default = [ - nil, nil, nil, 3, nil, 4, 342, 289, nil, 519, - nil, 814, nil, 286, 287, nil, nil, nil, 11, 12, - 18, 225, 318, nil, nil, 223, 224, nil, 279, 17, - nil, 436, 21, 22, 23, 24, nil, 641, nil, nil, - nil, 306, nil, 25, 407, 32, nil, nil, 34, 37, - 36, nil, 220, 221, 354, nil, 128, 415, 127, 130, - 77, 78, nil, 46, nil, 779, 408, nil, 409, 420, - 596, 482, 277, 263, 47, 48, 49, 50, 51, 52, - 53, 54, 55, nil, 264, 61, nil, nil, nil, nil, - nil, nil, 69, nil, 534, 70, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 804, 670, nil, 805, 904, - 751, 658, nil, 659, nil, nil, 660, nil, 662, 612, - nil, nil, nil, 668, nil, nil, nil, 712, nil, nil, - nil, nil, 419, nil, nil, nil, nil, nil, 76, 79, - 80, nil, nil, nil, nil, nil, 568, nil, nil, nil, - nil, nil, nil, 873, 657, nil, 661, 672, 674, 763, - 677, 678, 764, 681, 684, 281 ] - -racc_reduce_table = [ - 0, 0, :racc_error, - 1, 142, :_reduce_none, - 2, 143, :_reduce_2, - 0, 144, :_reduce_3, - 1, 144, :_reduce_4, - 3, 144, :_reduce_5, - 2, 144, :_reduce_6, - 1, 146, :_reduce_none, - 4, 146, :_reduce_8, - 4, 149, :_reduce_9, - 2, 150, :_reduce_10, - 0, 154, :_reduce_11, - 1, 154, :_reduce_12, - 3, 154, :_reduce_13, - 2, 154, :_reduce_14, - 1, 155, :_reduce_none, - 4, 155, :_reduce_16, - 0, 171, :_reduce_17, - 4, 148, :_reduce_18, - 3, 148, :_reduce_19, - 3, 148, :_reduce_20, - 3, 148, :_reduce_21, - 2, 148, :_reduce_22, - 3, 148, :_reduce_23, - 3, 148, :_reduce_24, - 3, 148, :_reduce_25, - 3, 148, :_reduce_26, - 3, 148, :_reduce_27, - 4, 148, :_reduce_28, - 1, 148, :_reduce_none, - 3, 148, :_reduce_30, - 3, 148, :_reduce_31, - 6, 148, :_reduce_32, - 5, 148, :_reduce_33, - 5, 148, :_reduce_34, - 5, 148, :_reduce_35, - 5, 148, :_reduce_36, - 3, 148, :_reduce_37, - 3, 148, :_reduce_38, - 3, 148, :_reduce_39, - 3, 148, :_reduce_40, - 1, 148, :_reduce_none, - 3, 159, :_reduce_42, - 3, 159, :_reduce_43, - 1, 170, :_reduce_none, - 3, 170, :_reduce_45, - 3, 170, :_reduce_46, - 3, 170, :_reduce_47, - 2, 170, :_reduce_48, - 1, 170, :_reduce_none, - 1, 158, :_reduce_none, - 1, 161, :_reduce_none, - 1, 161, :_reduce_none, - 1, 175, :_reduce_none, - 4, 175, :_reduce_54, - 0, 183, :_reduce_55, - 5, 180, :_reduce_56, - 1, 182, :_reduce_none, - 2, 174, :_reduce_58, - 3, 174, :_reduce_59, - 4, 174, :_reduce_60, - 5, 174, :_reduce_61, - 4, 174, :_reduce_62, - 5, 174, :_reduce_63, - 2, 174, :_reduce_64, - 2, 174, :_reduce_65, - 2, 174, :_reduce_66, - 2, 174, :_reduce_67, - 2, 174, :_reduce_68, - 1, 160, :_reduce_69, - 3, 160, :_reduce_70, - 1, 187, :_reduce_71, - 3, 187, :_reduce_72, - 1, 186, :_reduce_none, - 2, 186, :_reduce_74, - 3, 186, :_reduce_75, - 5, 186, :_reduce_76, - 2, 186, :_reduce_77, - 4, 186, :_reduce_78, - 2, 186, :_reduce_79, - 4, 186, :_reduce_80, - 1, 186, :_reduce_81, - 3, 186, :_reduce_82, - 1, 190, :_reduce_none, - 3, 190, :_reduce_84, - 2, 189, :_reduce_85, - 3, 189, :_reduce_86, - 1, 192, :_reduce_87, - 3, 192, :_reduce_88, - 1, 191, :_reduce_89, - 1, 191, :_reduce_90, - 4, 191, :_reduce_91, - 3, 191, :_reduce_92, - 3, 191, :_reduce_93, - 3, 191, :_reduce_94, - 3, 191, :_reduce_95, - 2, 191, :_reduce_96, - 1, 191, :_reduce_97, - 1, 167, :_reduce_98, - 1, 167, :_reduce_99, - 4, 167, :_reduce_100, - 3, 167, :_reduce_101, - 3, 167, :_reduce_102, - 3, 167, :_reduce_103, - 3, 167, :_reduce_104, - 2, 167, :_reduce_105, - 1, 167, :_reduce_106, - 1, 195, :_reduce_107, - 1, 195, :_reduce_none, - 2, 196, :_reduce_109, - 1, 196, :_reduce_110, - 3, 196, :_reduce_111, - 1, 197, :_reduce_none, - 1, 197, :_reduce_none, - 1, 197, :_reduce_none, - 1, 197, :_reduce_none, - 1, 197, :_reduce_none, - 1, 200, :_reduce_117, - 1, 200, :_reduce_none, - 1, 156, :_reduce_none, - 1, 156, :_reduce_none, - 1, 157, :_reduce_121, - 0, 203, :_reduce_122, - 4, 157, :_reduce_123, - 1, 198, :_reduce_none, - 1, 198, :_reduce_none, - 1, 198, :_reduce_none, - 1, 198, :_reduce_none, - 1, 198, :_reduce_none, - 1, 198, :_reduce_none, - 1, 198, :_reduce_none, - 1, 198, :_reduce_none, - 1, 198, :_reduce_none, - 1, 198, :_reduce_none, - 1, 198, :_reduce_none, - 1, 198, :_reduce_none, - 1, 198, :_reduce_none, - 1, 198, :_reduce_none, - 1, 198, :_reduce_none, - 1, 198, :_reduce_none, - 1, 198, :_reduce_none, - 1, 198, :_reduce_none, - 1, 198, :_reduce_none, - 1, 198, :_reduce_none, - 1, 198, :_reduce_none, - 1, 198, :_reduce_none, - 1, 198, :_reduce_none, - 1, 198, :_reduce_none, - 1, 198, :_reduce_none, - 1, 198, :_reduce_none, - 1, 198, :_reduce_none, - 1, 198, :_reduce_none, - 1, 198, :_reduce_none, - 1, 198, :_reduce_none, - 1, 199, :_reduce_none, - 1, 199, :_reduce_none, - 1, 199, :_reduce_none, - 1, 199, :_reduce_none, - 1, 199, :_reduce_none, - 1, 199, :_reduce_none, - 1, 199, :_reduce_none, - 1, 199, :_reduce_none, - 1, 199, :_reduce_none, - 1, 199, :_reduce_none, - 1, 199, :_reduce_none, - 1, 199, :_reduce_none, - 1, 199, :_reduce_none, - 1, 199, :_reduce_none, - 1, 199, :_reduce_none, - 1, 199, :_reduce_none, - 1, 199, :_reduce_none, - 1, 199, :_reduce_none, - 1, 199, :_reduce_none, - 1, 199, :_reduce_none, - 1, 199, :_reduce_none, - 1, 199, :_reduce_none, - 1, 199, :_reduce_none, - 1, 199, :_reduce_none, - 1, 199, :_reduce_none, - 1, 199, :_reduce_none, - 1, 199, :_reduce_none, - 1, 199, :_reduce_none, - 1, 199, :_reduce_none, - 1, 199, :_reduce_none, - 1, 199, :_reduce_none, - 1, 199, :_reduce_none, - 1, 199, :_reduce_none, - 1, 199, :_reduce_none, - 1, 199, :_reduce_none, - 1, 199, :_reduce_none, - 1, 199, :_reduce_none, - 1, 199, :_reduce_none, - 1, 199, :_reduce_none, - 1, 199, :_reduce_none, - 1, 199, :_reduce_none, - 3, 173, :_reduce_195, - 5, 173, :_reduce_196, - 3, 173, :_reduce_197, - 5, 173, :_reduce_198, - 6, 173, :_reduce_199, - 5, 173, :_reduce_200, - 5, 173, :_reduce_201, - 5, 173, :_reduce_202, - 5, 173, :_reduce_203, - 4, 173, :_reduce_204, - 3, 173, :_reduce_205, - 3, 173, :_reduce_206, - 3, 173, :_reduce_207, - 3, 173, :_reduce_208, - 3, 173, :_reduce_209, - 3, 173, :_reduce_210, - 3, 173, :_reduce_211, - 3, 173, :_reduce_212, - 3, 173, :_reduce_213, - 4, 173, :_reduce_214, - 4, 173, :_reduce_215, - 2, 173, :_reduce_216, - 2, 173, :_reduce_217, - 3, 173, :_reduce_218, - 3, 173, :_reduce_219, - 3, 173, :_reduce_220, - 3, 173, :_reduce_221, - 3, 173, :_reduce_222, - 3, 173, :_reduce_223, - 3, 173, :_reduce_224, - 3, 173, :_reduce_225, - 3, 173, :_reduce_226, - 3, 173, :_reduce_227, - 3, 173, :_reduce_228, - 3, 173, :_reduce_229, - 3, 173, :_reduce_230, - 2, 173, :_reduce_231, - 2, 173, :_reduce_232, - 3, 173, :_reduce_233, - 3, 173, :_reduce_234, - 3, 173, :_reduce_235, - 3, 173, :_reduce_236, - 3, 173, :_reduce_237, - 6, 173, :_reduce_238, - 1, 173, :_reduce_none, - 1, 169, :_reduce_none, - 1, 205, :_reduce_none, - 2, 205, :_reduce_none, - 4, 205, :_reduce_243, - 2, 205, :_reduce_244, - 3, 210, :_reduce_245, - 0, 211, :_reduce_246, - 1, 211, :_reduce_none, - 0, 164, :_reduce_248, - 1, 164, :_reduce_none, - 2, 164, :_reduce_none, - 4, 164, :_reduce_251, - 2, 164, :_reduce_252, - 1, 185, :_reduce_253, - 2, 185, :_reduce_254, - 2, 185, :_reduce_255, - 4, 185, :_reduce_256, - 1, 185, :_reduce_257, - 0, 214, :_reduce_258, - 2, 179, :_reduce_259, - 2, 213, :_reduce_260, - 2, 212, :_reduce_261, - 0, 212, :_reduce_262, - 1, 207, :_reduce_263, - 2, 207, :_reduce_264, - 3, 207, :_reduce_265, - 4, 207, :_reduce_266, - 3, 168, :_reduce_267, - 4, 168, :_reduce_268, - 2, 168, :_reduce_269, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_280, - 0, 239, :_reduce_281, - 4, 204, :_reduce_282, - 0, 240, :_reduce_283, - 0, 241, :_reduce_284, - 6, 204, :_reduce_285, - 0, 242, :_reduce_286, - 4, 204, :_reduce_287, - 3, 204, :_reduce_288, - 3, 204, :_reduce_289, - 2, 204, :_reduce_290, - 3, 204, :_reduce_291, - 3, 204, :_reduce_292, - 1, 204, :_reduce_293, - 4, 204, :_reduce_294, - 3, 204, :_reduce_295, - 1, 204, :_reduce_296, - 5, 204, :_reduce_297, - 4, 204, :_reduce_298, - 3, 204, :_reduce_299, - 2, 204, :_reduce_300, - 1, 204, :_reduce_none, - 2, 204, :_reduce_302, - 0, 243, :_reduce_303, - 3, 204, :_reduce_304, - 6, 204, :_reduce_305, - 6, 204, :_reduce_306, - 0, 244, :_reduce_307, - 0, 245, :_reduce_308, - 7, 204, :_reduce_309, - 0, 246, :_reduce_310, - 0, 247, :_reduce_311, - 7, 204, :_reduce_312, - 5, 204, :_reduce_313, - 4, 204, :_reduce_314, - 0, 248, :_reduce_315, - 0, 249, :_reduce_316, - 9, 204, :_reduce_317, - 0, 250, :_reduce_318, - 6, 204, :_reduce_319, - 0, 251, :_reduce_320, - 7, 204, :_reduce_321, - 0, 252, :_reduce_322, - 5, 204, :_reduce_323, - 0, 253, :_reduce_324, - 6, 204, :_reduce_325, - 0, 254, :_reduce_326, - 0, 255, :_reduce_327, - 9, 204, :_reduce_328, - 1, 204, :_reduce_329, - 1, 204, :_reduce_330, - 1, 204, :_reduce_331, - 1, 204, :_reduce_332, - 1, 163, :_reduce_none, - 1, 233, :_reduce_334, - 1, 236, :_reduce_335, - 1, 228, :_reduce_none, - 1, 228, :_reduce_none, - 2, 228, :_reduce_338, - 1, 230, :_reduce_none, - 1, 230, :_reduce_none, - 1, 229, :_reduce_none, - 5, 229, :_reduce_342, - 1, 152, :_reduce_none, - 2, 152, :_reduce_344, - 1, 232, :_reduce_none, - 1, 232, :_reduce_none, - 1, 256, :_reduce_347, - 3, 256, :_reduce_348, - 1, 259, :_reduce_349, - 3, 259, :_reduce_350, - 1, 258, :_reduce_none, - 4, 258, :_reduce_352, - 6, 258, :_reduce_353, - 3, 258, :_reduce_354, - 5, 258, :_reduce_355, - 2, 258, :_reduce_356, - 4, 258, :_reduce_357, - 1, 258, :_reduce_358, - 3, 258, :_reduce_359, - 4, 260, :_reduce_360, - 2, 260, :_reduce_361, - 2, 260, :_reduce_362, - 1, 260, :_reduce_363, - 2, 265, :_reduce_364, - 0, 265, :_reduce_365, - 6, 266, :_reduce_366, - 8, 266, :_reduce_367, - 4, 266, :_reduce_368, - 6, 266, :_reduce_369, - 4, 266, :_reduce_370, - 2, 266, :_reduce_none, - 6, 266, :_reduce_372, - 2, 266, :_reduce_373, - 4, 266, :_reduce_374, - 6, 266, :_reduce_375, - 2, 266, :_reduce_376, - 4, 266, :_reduce_377, - 2, 266, :_reduce_378, - 4, 266, :_reduce_379, - 1, 266, :_reduce_none, - 0, 181, :_reduce_381, - 1, 181, :_reduce_382, - 3, 270, :_reduce_383, - 1, 270, :_reduce_384, - 4, 270, :_reduce_385, - 1, 271, :_reduce_386, - 4, 271, :_reduce_387, - 1, 272, :_reduce_388, - 3, 272, :_reduce_389, - 1, 273, :_reduce_390, - 1, 273, :_reduce_none, - 0, 277, :_reduce_392, - 3, 227, :_reduce_393, - 4, 275, :_reduce_394, - 1, 275, :_reduce_395, - 0, 280, :_reduce_396, - 4, 276, :_reduce_397, - 0, 281, :_reduce_398, - 4, 276, :_reduce_399, - 0, 282, :_reduce_400, - 5, 279, :_reduce_401, - 2, 176, :_reduce_402, - 4, 176, :_reduce_403, - 5, 176, :_reduce_404, - 5, 176, :_reduce_405, - 2, 226, :_reduce_406, - 4, 226, :_reduce_407, - 4, 226, :_reduce_408, - 3, 226, :_reduce_409, - 3, 226, :_reduce_410, - 3, 226, :_reduce_411, - 2, 226, :_reduce_412, - 1, 226, :_reduce_413, - 4, 226, :_reduce_414, - 0, 284, :_reduce_415, - 5, 225, :_reduce_416, - 0, 285, :_reduce_417, - 5, 225, :_reduce_418, - 5, 231, :_reduce_419, - 1, 286, :_reduce_420, - 1, 286, :_reduce_none, - 6, 151, :_reduce_422, - 0, 151, :_reduce_423, - 1, 287, :_reduce_424, - 1, 287, :_reduce_none, - 1, 287, :_reduce_none, - 2, 288, :_reduce_427, - 1, 288, :_reduce_none, - 2, 153, :_reduce_429, - 1, 153, :_reduce_none, - 1, 215, :_reduce_none, - 1, 215, :_reduce_none, - 1, 215, :_reduce_none, - 1, 216, :_reduce_434, - 1, 290, :_reduce_435, - 2, 290, :_reduce_436, - 3, 291, :_reduce_437, - 1, 291, :_reduce_438, - 1, 291, :_reduce_439, - 3, 217, :_reduce_440, - 4, 218, :_reduce_441, - 3, 219, :_reduce_442, - 0, 295, :_reduce_443, - 3, 295, :_reduce_444, - 1, 296, :_reduce_445, - 2, 296, :_reduce_446, - 3, 221, :_reduce_447, - 0, 298, :_reduce_448, - 3, 298, :_reduce_449, - 3, 220, :_reduce_450, - 3, 222, :_reduce_451, - 0, 299, :_reduce_452, - 3, 299, :_reduce_453, - 0, 300, :_reduce_454, - 3, 300, :_reduce_455, - 0, 292, :_reduce_456, - 2, 292, :_reduce_457, - 0, 293, :_reduce_458, - 2, 293, :_reduce_459, - 0, 294, :_reduce_460, - 2, 294, :_reduce_461, - 1, 297, :_reduce_462, - 2, 297, :_reduce_463, - 0, 302, :_reduce_464, - 4, 297, :_reduce_465, - 1, 301, :_reduce_466, - 1, 301, :_reduce_467, - 1, 301, :_reduce_468, - 1, 301, :_reduce_none, - 1, 201, :_reduce_470, - 3, 202, :_reduce_471, - 1, 289, :_reduce_472, - 1, 289, :_reduce_473, - 2, 289, :_reduce_474, - 2, 289, :_reduce_475, - 1, 193, :_reduce_476, - 1, 193, :_reduce_477, - 1, 193, :_reduce_478, - 1, 193, :_reduce_479, - 1, 193, :_reduce_480, - 1, 194, :_reduce_481, - 1, 194, :_reduce_482, - 1, 194, :_reduce_483, - 1, 194, :_reduce_484, - 1, 194, :_reduce_485, - 1, 194, :_reduce_486, - 1, 194, :_reduce_487, - 1, 223, :_reduce_488, - 1, 223, :_reduce_489, - 1, 162, :_reduce_490, - 1, 162, :_reduce_491, - 1, 166, :_reduce_492, - 1, 166, :_reduce_493, - 1, 234, :_reduce_494, - 0, 303, :_reduce_495, - 4, 234, :_reduce_496, - 2, 234, :_reduce_497, - 3, 237, :_reduce_498, - 2, 237, :_reduce_499, - 4, 304, :_reduce_500, - 2, 304, :_reduce_501, - 2, 304, :_reduce_502, - 1, 304, :_reduce_503, - 2, 306, :_reduce_504, - 0, 306, :_reduce_505, - 6, 278, :_reduce_506, - 8, 278, :_reduce_507, - 4, 278, :_reduce_508, - 6, 278, :_reduce_509, - 4, 278, :_reduce_510, - 6, 278, :_reduce_511, - 2, 278, :_reduce_512, - 4, 278, :_reduce_513, - 6, 278, :_reduce_514, - 2, 278, :_reduce_515, - 4, 278, :_reduce_516, - 2, 278, :_reduce_517, - 4, 278, :_reduce_518, - 1, 278, :_reduce_519, - 0, 278, :_reduce_520, - 1, 274, :_reduce_521, - 1, 274, :_reduce_522, - 1, 274, :_reduce_523, - 1, 274, :_reduce_524, - 1, 257, :_reduce_none, - 1, 257, :_reduce_none, - 1, 308, :_reduce_527, - 3, 308, :_reduce_528, - 1, 267, :_reduce_529, - 3, 267, :_reduce_530, - 2, 309, :_reduce_531, - 2, 310, :_reduce_532, - 1, 261, :_reduce_533, - 3, 261, :_reduce_534, - 1, 305, :_reduce_535, - 3, 305, :_reduce_536, - 1, 311, :_reduce_none, - 1, 311, :_reduce_none, - 2, 262, :_reduce_539, - 1, 262, :_reduce_540, - 3, 312, :_reduce_541, - 3, 313, :_reduce_542, - 1, 268, :_reduce_543, - 3, 268, :_reduce_544, - 1, 307, :_reduce_545, - 3, 307, :_reduce_546, - 1, 314, :_reduce_none, - 1, 314, :_reduce_none, - 2, 269, :_reduce_549, - 1, 269, :_reduce_550, - 1, 315, :_reduce_none, - 1, 315, :_reduce_none, - 2, 264, :_reduce_553, - 2, 263, :_reduce_554, - 0, 263, :_reduce_555, - 1, 238, :_reduce_none, - 3, 238, :_reduce_557, - 0, 224, :_reduce_558, - 2, 224, :_reduce_none, - 1, 209, :_reduce_560, - 3, 209, :_reduce_561, - 3, 316, :_reduce_562, - 2, 316, :_reduce_563, - 2, 316, :_reduce_564, - 1, 184, :_reduce_none, - 1, 184, :_reduce_none, - 1, 184, :_reduce_none, - 1, 178, :_reduce_none, - 1, 178, :_reduce_none, - 1, 178, :_reduce_none, - 1, 178, :_reduce_none, - 1, 283, :_reduce_none, - 1, 283, :_reduce_none, - 1, 283, :_reduce_none, - 1, 177, :_reduce_none, - 1, 177, :_reduce_none, - 0, 145, :_reduce_none, - 1, 145, :_reduce_none, - 0, 172, :_reduce_none, - 1, 172, :_reduce_none, - 2, 188, :_reduce_581, - 2, 165, :_reduce_582, - 0, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 235, :_reduce_586, - 1, 235, :_reduce_none, - 1, 147, :_reduce_none, - 2, 147, :_reduce_none, - 0, 206, :_reduce_590 ] - -racc_reduce_n = 591 - -racc_shift_n = 1019 - -racc_token_table = { - false => 0, - :error => 1, - :kCLASS => 2, - :kMODULE => 3, - :kDEF => 4, - :kUNDEF => 5, - :kBEGIN => 6, - :kRESCUE => 7, - :kENSURE => 8, - :kEND => 9, - :kIF => 10, - :kUNLESS => 11, - :kTHEN => 12, - :kELSIF => 13, - :kELSE => 14, - :kCASE => 15, - :kWHEN => 16, - :kWHILE => 17, - :kUNTIL => 18, - :kFOR => 19, - :kBREAK => 20, - :kNEXT => 21, - :kREDO => 22, - :kRETRY => 23, - :kIN => 24, - :kDO => 25, - :kDO_COND => 26, - :kDO_BLOCK => 27, - :kDO_LAMBDA => 28, - :kRETURN => 29, - :kYIELD => 30, - :kSUPER => 31, - :kSELF => 32, - :kNIL => 33, - :kTRUE => 34, - :kFALSE => 35, - :kAND => 36, - :kOR => 37, - :kNOT => 38, - :kIF_MOD => 39, - :kUNLESS_MOD => 40, - :kWHILE_MOD => 41, - :kUNTIL_MOD => 42, - :kRESCUE_MOD => 43, - :kALIAS => 44, - :kDEFINED => 45, - :klBEGIN => 46, - :klEND => 47, - :k__LINE__ => 48, - :k__FILE__ => 49, - :k__ENCODING__ => 50, - :tIDENTIFIER => 51, - :tFID => 52, - :tGVAR => 53, - :tIVAR => 54, - :tCONSTANT => 55, - :tLABEL => 56, - :tCVAR => 57, - :tNTH_REF => 58, - :tBACK_REF => 59, - :tSTRING_CONTENT => 60, - :tINTEGER => 61, - :tFLOAT => 62, - :tUPLUS => 63, - :tUMINUS => 64, - :tUNARY_NUM => 65, - :tPOW => 66, - :tCMP => 67, - :tEQ => 68, - :tEQQ => 69, - :tNEQ => 70, - :tGEQ => 71, - :tLEQ => 72, - :tANDOP => 73, - :tOROP => 74, - :tMATCH => 75, - :tNMATCH => 76, - :tDOT => 77, - :tDOT2 => 78, - :tDOT3 => 79, - :tAREF => 80, - :tASET => 81, - :tLSHFT => 82, - :tRSHFT => 83, - :tCOLON2 => 84, - :tCOLON3 => 85, - :tOP_ASGN => 86, - :tASSOC => 87, - :tLPAREN => 88, - :tLPAREN2 => 89, - :tRPAREN => 90, - :tLPAREN_ARG => 91, - :tLBRACK => 92, - :tLBRACK2 => 93, - :tRBRACK => 94, - :tLBRACE => 95, - :tLBRACE_ARG => 96, - :tSTAR => 97, - :tSTAR2 => 98, - :tAMPER => 99, - :tAMPER2 => 100, - :tTILDE => 101, - :tPERCENT => 102, - :tDIVIDE => 103, - :tDSTAR => 104, - :tPLUS => 105, - :tMINUS => 106, - :tLT => 107, - :tGT => 108, - :tPIPE => 109, - :tBANG => 110, - :tCARET => 111, - :tLCURLY => 112, - :tRCURLY => 113, - :tBACK_REF2 => 114, - :tSYMBEG => 115, - :tSTRING_BEG => 116, - :tXSTRING_BEG => 117, - :tREGEXP_BEG => 118, - :tREGEXP_OPT => 119, - :tWORDS_BEG => 120, - :tQWORDS_BEG => 121, - :tSYMBOLS_BEG => 122, - :tQSYMBOLS_BEG => 123, - :tSTRING_DBEG => 124, - :tSTRING_DVAR => 125, - :tSTRING_END => 126, - :tSTRING_DEND => 127, - :tSTRING => 128, - :tSYMBOL => 129, - :tNL => 130, - :tEH => 131, - :tCOLON => 132, - :tCOMMA => 133, - :tSPACE => 134, - :tSEMI => 135, - :tLAMBDA => 136, - :tLAMBEG => 137, - :tCHARACTER => 138, - :tEQL => 139, - :tLOWEST => 140 } - -racc_nt_base = 141 - -racc_use_result_var = true - -Racc_arg = [ - racc_action_table, - racc_action_check, - racc_action_default, - racc_action_pointer, - racc_goto_table, - racc_goto_check, - racc_goto_default, - racc_goto_pointer, - racc_nt_base, - racc_reduce_table, - racc_token_table, - racc_shift_n, - racc_reduce_n, - racc_use_result_var ] -Ractor.make_shareable(Racc_arg) if defined?(Ractor) - -Racc_token_to_s_table = [ - "$end", - "error", - "kCLASS", - "kMODULE", - "kDEF", - "kUNDEF", - "kBEGIN", - "kRESCUE", - "kENSURE", - "kEND", - "kIF", - "kUNLESS", - "kTHEN", - "kELSIF", - "kELSE", - "kCASE", - "kWHEN", - "kWHILE", - "kUNTIL", - "kFOR", - "kBREAK", - "kNEXT", - "kREDO", - "kRETRY", - "kIN", - "kDO", - "kDO_COND", - "kDO_BLOCK", - "kDO_LAMBDA", - "kRETURN", - "kYIELD", - "kSUPER", - "kSELF", - "kNIL", - "kTRUE", - "kFALSE", - "kAND", - "kOR", - "kNOT", - "kIF_MOD", - "kUNLESS_MOD", - "kWHILE_MOD", - "kUNTIL_MOD", - "kRESCUE_MOD", - "kALIAS", - "kDEFINED", - "klBEGIN", - "klEND", - "k__LINE__", - "k__FILE__", - "k__ENCODING__", - "tIDENTIFIER", - "tFID", - "tGVAR", - "tIVAR", - "tCONSTANT", - "tLABEL", - "tCVAR", - "tNTH_REF", - "tBACK_REF", - "tSTRING_CONTENT", - "tINTEGER", - "tFLOAT", - "tUPLUS", - "tUMINUS", - "tUNARY_NUM", - "tPOW", - "tCMP", - "tEQ", - "tEQQ", - "tNEQ", - "tGEQ", - "tLEQ", - "tANDOP", - "tOROP", - "tMATCH", - "tNMATCH", - "tDOT", - "tDOT2", - "tDOT3", - "tAREF", - "tASET", - "tLSHFT", - "tRSHFT", - "tCOLON2", - "tCOLON3", - "tOP_ASGN", - "tASSOC", - "tLPAREN", - "tLPAREN2", - "tRPAREN", - "tLPAREN_ARG", - "tLBRACK", - "tLBRACK2", - "tRBRACK", - "tLBRACE", - "tLBRACE_ARG", - "tSTAR", - "tSTAR2", - "tAMPER", - "tAMPER2", - "tTILDE", - "tPERCENT", - "tDIVIDE", - "tDSTAR", - "tPLUS", - "tMINUS", - "tLT", - "tGT", - "tPIPE", - "tBANG", - "tCARET", - "tLCURLY", - "tRCURLY", - "tBACK_REF2", - "tSYMBEG", - "tSTRING_BEG", - "tXSTRING_BEG", - "tREGEXP_BEG", - "tREGEXP_OPT", - "tWORDS_BEG", - "tQWORDS_BEG", - "tSYMBOLS_BEG", - "tQSYMBOLS_BEG", - "tSTRING_DBEG", - "tSTRING_DVAR", - "tSTRING_END", - "tSTRING_DEND", - "tSTRING", - "tSYMBOL", - "tNL", - "tEH", - "tCOLON", - "tCOMMA", - "tSPACE", - "tSEMI", - "tLAMBDA", - "tLAMBEG", - "tCHARACTER", - "tEQL", - "tLOWEST", - "$start", - "program", - "top_compstmt", - "top_stmts", - "opt_terms", - "top_stmt", - "terms", - "stmt", - "bodystmt", - "compstmt", - "opt_rescue", - "opt_else", - "opt_ensure", - "stmts", - "stmt_or_begin", - "fitem", - "undef_list", - "expr_value", - "command_asgn", - "mlhs", - "command_call", - "var_lhs", - "primary_value", - "opt_call_args", - "rbracket", - "backref", - "lhs", - "mrhs", - "arg_value", - "expr", - "@1", - "opt_nl", - "arg", - "command", - "block_command", - "block_call", - "dot_or_colon", - "operation2", - "command_args", - "cmd_brace_block", - "opt_block_param", - "fcall", - "@2", - "operation", - "call_args", - "mlhs_basic", - "mlhs_inner", - "rparen", - "mlhs_head", - "mlhs_item", - "mlhs_node", - "mlhs_post", - "user_variable", - "keyword_variable", - "cname", - "cpath", - "fname", - "op", - "reswords", - "fsym", - "symbol", - "dsym", - "@3", - "primary", - "aref_args", - "none", - "args", - "trailer", - "assocs", - "paren_args", - "opt_paren_args", - "opt_block_arg", - "block_arg", - "@4", - "literal", - "strings", - "xstring", - "regexp", - "words", - "qwords", - "symbols", - "qsymbols", - "var_ref", - "assoc_list", - "brace_block", - "method_call", - "lambda", - "then", - "if_tail", - "do", - "case_body", - "for_var", - "k_class", - "superclass", - "term", - "k_module", - "f_arglist", - "singleton", - "@5", - "@6", - "@7", - "@8", - "@9", - "@10", - "@11", - "@12", - "@13", - "@14", - "@15", - "@16", - "@17", - "@18", - "@19", - "@20", - "@21", - "f_marg", - "f_norm_arg", - "f_margs", - "f_marg_list", - "block_args_tail", - "f_block_kwarg", - "f_kwrest", - "opt_f_block_arg", - "f_block_arg", - "opt_block_args_tail", - "block_param", - "f_arg", - "f_block_optarg", - "f_rest_arg", - "block_param_def", - "opt_bv_decl", - "bv_decls", - "bvar", - "f_bad_arg", - "f_larglist", - "lambda_body", - "@22", - "f_args", - "do_block", - "@23", - "@24", - "@25", - "operation3", - "@26", - "@27", - "cases", - "exc_list", - "exc_var", - "numeric", - "string", - "string1", - "string_contents", - "xstring_contents", - "regexp_contents", - "word_list", - "word", - "string_content", - "symbol_list", - "qword_list", - "qsym_list", - "string_dvar", - "@28", - "@29", - "args_tail", - "f_kwarg", - "opt_args_tail", - "f_optarg", - "f_arg_item", - "f_kw", - "f_block_kw", - "kwrest_mark", - "f_opt", - "f_block_opt", - "restarg_mark", - "blkarg_mark", - "assoc" ] -Ractor.make_shareable(Racc_token_to_s_table) if defined?(Ractor) - -Racc_debug_parser = false - -##### State transition tables end ##### - -# reduce 0 omitted - -# reduce 1 omitted - -def _reduce_2(val, _values, result) - result = @builder.compstmt(val[0]) - - result -end - -def _reduce_3(val, _values, result) - result = [] - - result -end - -def _reduce_4(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_5(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_6(val, _values, result) - result = [ val[1] ] - - result -end - -# reduce 7 omitted - -def _reduce_8(val, _values, result) - result = @builder.preexe(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_9(val, _values, result) - rescue_bodies = val[1] - else_t, else_ = val[2] - ensure_t, ensure_ = val[3] - - if rescue_bodies.empty? && !else_t.nil? - diagnostic :warning, :useless_else, nil, else_t - end - - result = @builder.begin_body(val[0], - rescue_bodies, - else_t, else_, - ensure_t, ensure_) - - result -end - -def _reduce_10(val, _values, result) - result = @builder.compstmt(val[0]) - - result -end - -def _reduce_11(val, _values, result) - result = [] - - result -end - -def _reduce_12(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_13(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_14(val, _values, result) - result = [ val[1] ] - - result -end - -# reduce 15 omitted - -def _reduce_16(val, _values, result) - if @context.in_def - diagnostic :error, :begin_in_method, nil, val[0] - end - - result = @builder.preexe(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_17(val, _values, result) - @lexer.state = :expr_fname - - result -end - -def _reduce_18(val, _values, result) - result = @builder.alias(val[0], val[1], val[3]) - - result -end - -def _reduce_19(val, _values, result) - result = @builder.alias(val[0], - @builder.gvar(val[1]), - @builder.gvar(val[2])) - - result -end - -def _reduce_20(val, _values, result) - result = @builder.alias(val[0], - @builder.gvar(val[1]), - @builder.back_ref(val[2])) - - result -end - -def _reduce_21(val, _values, result) - diagnostic :error, :nth_ref_alias, nil, val[2] - - result -end - -def _reduce_22(val, _values, result) - result = @builder.undef_method(val[0], val[1]) - - result -end - -def _reduce_23(val, _values, result) - result = @builder.condition_mod(val[0], nil, - val[1], val[2]) - - result -end - -def _reduce_24(val, _values, result) - result = @builder.condition_mod(nil, val[0], - val[1], val[2]) - - result -end - -def _reduce_25(val, _values, result) - result = @builder.loop_mod(:while, val[0], val[1], val[2]) - - result -end - -def _reduce_26(val, _values, result) - result = @builder.loop_mod(:until, val[0], val[1], val[2]) - - result -end - -def _reduce_27(val, _values, result) - rescue_body = @builder.rescue_body(val[1], - nil, nil, nil, - nil, val[2]) - - result = @builder.begin_body(val[0], [ rescue_body ]) - - result -end - -def _reduce_28(val, _values, result) - result = @builder.postexe(val[0], val[1], val[2], val[3]) - - result -end - -# reduce 29 omitted - -def _reduce_30(val, _values, result) - result = @builder.multi_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_31(val, _values, result) - result = @builder.op_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_32(val, _values, result) - result = @builder.op_assign( - @builder.index( - val[0], val[1], val[2], val[3]), - val[4], val[5]) - - result -end - -def _reduce_33(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_34(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_35(val, _values, result) - const = @builder.const_op_assignable( - @builder.const_fetch(val[0], val[1], val[2])) - result = @builder.op_assign(const, val[3], val[4]) - - result -end - -def _reduce_36(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_37(val, _values, result) - @builder.op_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_38(val, _values, result) - result = @builder.assign(val[0], val[1], - @builder.array(nil, val[2], nil)) - - result -end - -def _reduce_39(val, _values, result) - result = @builder.multi_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_40(val, _values, result) - result = @builder.multi_assign(val[0], val[1], - @builder.array(nil, val[2], nil)) - - result -end - -# reduce 41 omitted - -def _reduce_42(val, _values, result) - result = @builder.assign(val[0], val[1], val[2]) - - result -end - -def _reduce_43(val, _values, result) - result = @builder.assign(val[0], val[1], val[2]) - - result -end - -# reduce 44 omitted - -def _reduce_45(val, _values, result) - result = @builder.logical_op(:and, val[0], val[1], val[2]) - - result -end - -def _reduce_46(val, _values, result) - result = @builder.logical_op(:or, val[0], val[1], val[2]) - - result -end - -def _reduce_47(val, _values, result) - result = @builder.not_op(val[0], nil, val[2], nil) - - result -end - -def _reduce_48(val, _values, result) - result = @builder.not_op(val[0], nil, val[1], nil) - - result -end - -# reduce 49 omitted - -# reduce 50 omitted - -# reduce 51 omitted - -# reduce 52 omitted - -# reduce 53 omitted - -def _reduce_54(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - result -end - -def _reduce_55(val, _values, result) - @static_env.extend_dynamic - result = @context.dup - @context.in_block = true - - result -end - -def _reduce_56(val, _values, result) - result = [ val[0], val[2], val[3], val[4] ] - - @static_env.unextend - @context.in_block = val[1].in_block - - result -end - -# reduce 57 omitted - -def _reduce_58(val, _values, result) - result = @builder.call_method(nil, nil, val[0], - nil, val[1], nil) - - result -end - -def _reduce_59(val, _values, result) - method_call = @builder.call_method(nil, nil, val[0], - nil, val[1], nil) - - begin_t, args, body, end_t = val[2] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_60(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - result -end - -def _reduce_61(val, _values, result) - method_call = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - begin_t, args, body, end_t = val[4] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_62(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - result -end - -def _reduce_63(val, _values, result) - method_call = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - begin_t, args, body, end_t = val[4] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_64(val, _values, result) - result = @builder.keyword_cmd(:super, val[0], - nil, val[1], nil) - - result -end - -def _reduce_65(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0], - nil, val[1], nil) - - result -end - -def _reduce_66(val, _values, result) - result = @builder.keyword_cmd(:return, val[0], - nil, val[1], nil) - - result -end - -def _reduce_67(val, _values, result) - result = @builder.keyword_cmd(:break, val[0], - nil, val[1], nil) - - result -end - -def _reduce_68(val, _values, result) - result = @builder.keyword_cmd(:next, val[0], - nil, val[1], nil) - - result -end - -def _reduce_69(val, _values, result) - result = @builder.multi_lhs(nil, val[0], nil) - - result -end - -def _reduce_70(val, _values, result) - result = @builder.begin(val[0], val[1], val[2]) - - result -end - -def _reduce_71(val, _values, result) - result = @builder.multi_lhs(nil, val[0], nil) - - result -end - -def _reduce_72(val, _values, result) - result = @builder.multi_lhs(val[0], val[1], val[2]) - - result -end - -# reduce 73 omitted - -def _reduce_74(val, _values, result) - result = val[0]. - push(val[1]) - - result -end - -def _reduce_75(val, _values, result) - result = val[0]. - push(@builder.splat(val[1], val[2])) - - result -end - -def _reduce_76(val, _values, result) - result = val[0]. - push(@builder.splat(val[1], val[2])). - concat(val[4]) - - result -end - -def _reduce_77(val, _values, result) - result = val[0]. - push(@builder.splat(val[1])) - - result -end - -def _reduce_78(val, _values, result) - result = val[0]. - push(@builder.splat(val[1])). - concat(val[3]) - - result -end - -def _reduce_79(val, _values, result) - result = [ @builder.splat(val[0], val[1]) ] - - result -end - -def _reduce_80(val, _values, result) - result = [ @builder.splat(val[0], val[1]), - *val[3] ] - - result -end - -def _reduce_81(val, _values, result) - result = [ @builder.splat(val[0]) ] - - result -end - -def _reduce_82(val, _values, result) - result = [ @builder.splat(val[0]), - *val[2] ] - - result -end - -# reduce 83 omitted - -def _reduce_84(val, _values, result) - result = @builder.begin(val[0], val[1], val[2]) - - result -end - -def _reduce_85(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_86(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_87(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_88(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_89(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_90(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_91(val, _values, result) - result = @builder.index_asgn(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_92(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_93(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_94(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_95(val, _values, result) - result = @builder.assignable( - @builder.const_fetch(val[0], val[1], val[2])) - - result -end - -def _reduce_96(val, _values, result) - result = @builder.assignable( - @builder.const_global(val[0], val[1])) - - result -end - -def _reduce_97(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_98(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_99(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_100(val, _values, result) - result = @builder.index_asgn(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_101(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_102(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_103(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_104(val, _values, result) - result = @builder.assignable( - @builder.const_fetch(val[0], val[1], val[2])) - - result -end - -def _reduce_105(val, _values, result) - result = @builder.assignable( - @builder.const_global(val[0], val[1])) - - result -end - -def _reduce_106(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_107(val, _values, result) - diagnostic :error, :module_name_const, nil, val[0] - - result -end - -# reduce 108 omitted - -def _reduce_109(val, _values, result) - result = @builder.const_global(val[0], val[1]) - - result -end - -def _reduce_110(val, _values, result) - result = @builder.const(val[0]) - - result -end - -def _reduce_111(val, _values, result) - result = @builder.const_fetch(val[0], val[1], val[2]) - - result -end - -# reduce 112 omitted - -# reduce 113 omitted - -# reduce 114 omitted - -# reduce 115 omitted - -# reduce 116 omitted - -def _reduce_117(val, _values, result) - result = @builder.symbol_internal(val[0]) - - result -end - -# reduce 118 omitted - -# reduce 119 omitted - -# reduce 120 omitted - -def _reduce_121(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_122(val, _values, result) - @lexer.state = :expr_fname - - result -end - -def _reduce_123(val, _values, result) - result = val[0] << val[3] - - result -end - -# reduce 124 omitted - -# reduce 125 omitted - -# reduce 126 omitted - -# reduce 127 omitted - -# reduce 128 omitted - -# reduce 129 omitted - -# reduce 130 omitted - -# reduce 131 omitted - -# reduce 132 omitted - -# reduce 133 omitted - -# reduce 134 omitted - -# reduce 135 omitted - -# reduce 136 omitted - -# reduce 137 omitted - -# reduce 138 omitted - -# reduce 139 omitted - -# reduce 140 omitted - -# reduce 141 omitted - -# reduce 142 omitted - -# reduce 143 omitted - -# reduce 144 omitted - -# reduce 145 omitted - -# reduce 146 omitted - -# reduce 147 omitted - -# reduce 148 omitted - -# reduce 149 omitted - -# reduce 150 omitted - -# reduce 151 omitted - -# reduce 152 omitted - -# reduce 153 omitted - -# reduce 154 omitted - -# reduce 155 omitted - -# reduce 156 omitted - -# reduce 157 omitted - -# reduce 158 omitted - -# reduce 159 omitted - -# reduce 160 omitted - -# reduce 161 omitted - -# reduce 162 omitted - -# reduce 163 omitted - -# reduce 164 omitted - -# reduce 165 omitted - -# reduce 166 omitted - -# reduce 167 omitted - -# reduce 168 omitted - -# reduce 169 omitted - -# reduce 170 omitted - -# reduce 171 omitted - -# reduce 172 omitted - -# reduce 173 omitted - -# reduce 174 omitted - -# reduce 175 omitted - -# reduce 176 omitted - -# reduce 177 omitted - -# reduce 178 omitted - -# reduce 179 omitted - -# reduce 180 omitted - -# reduce 181 omitted - -# reduce 182 omitted - -# reduce 183 omitted - -# reduce 184 omitted - -# reduce 185 omitted - -# reduce 186 omitted - -# reduce 187 omitted - -# reduce 188 omitted - -# reduce 189 omitted - -# reduce 190 omitted - -# reduce 191 omitted - -# reduce 192 omitted - -# reduce 193 omitted - -# reduce 194 omitted - -def _reduce_195(val, _values, result) - result = @builder.assign(val[0], val[1], val[2]) - - result -end - -def _reduce_196(val, _values, result) - rescue_body = @builder.rescue_body(val[3], - nil, nil, nil, - nil, val[4]) - - rescue_ = @builder.begin_body(val[2], [ rescue_body ]) - - result = @builder.assign(val[0], val[1], rescue_) - - result -end - -def _reduce_197(val, _values, result) - result = @builder.op_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_198(val, _values, result) - rescue_body = @builder.rescue_body(val[3], - nil, nil, nil, - nil, val[4]) - - rescue_ = @builder.begin_body(val[2], [ rescue_body ]) - - result = @builder.op_assign(val[0], val[1], rescue_) - - result -end - -def _reduce_199(val, _values, result) - result = @builder.op_assign( - @builder.index( - val[0], val[1], val[2], val[3]), - val[4], val[5]) - - result -end - -def _reduce_200(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_201(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_202(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_203(val, _values, result) - const = @builder.const_op_assignable( - @builder.const_fetch(val[0], val[1], val[2])) - result = @builder.op_assign(const, val[3], val[4]) - - result -end - -def _reduce_204(val, _values, result) - const = @builder.const_op_assignable( - @builder.const_global(val[0], val[1])) - result = @builder.op_assign(const, val[2], val[3]) - - result -end - -def _reduce_205(val, _values, result) - result = @builder.op_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_206(val, _values, result) - result = @builder.range_inclusive(val[0], val[1], val[2]) - - result -end - -def _reduce_207(val, _values, result) - result = @builder.range_exclusive(val[0], val[1], val[2]) - - result -end - -def _reduce_208(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_209(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_210(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_211(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_212(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_213(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_214(val, _values, result) - result = @builder.unary_op(val[0], - @builder.binary_op( - @builder.integer(val[1]), - val[2], val[3])) - - result -end - -def _reduce_215(val, _values, result) - result = @builder.unary_op(val[0], - @builder.binary_op( - @builder.float(val[1]), - val[2], val[3])) - - result -end - -def _reduce_216(val, _values, result) - result = @builder.unary_op(val[0], val[1]) - - result -end - -def _reduce_217(val, _values, result) - result = @builder.unary_op(val[0], val[1]) - - result -end - -def _reduce_218(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_219(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_220(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_221(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_222(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_223(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_224(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_225(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_226(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_227(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_228(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_229(val, _values, result) - result = @builder.match_op(val[0], val[1], val[2]) - - result -end - -def _reduce_230(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_231(val, _values, result) - result = @builder.not_op(val[0], nil, val[1], nil) - - result -end - -def _reduce_232(val, _values, result) - result = @builder.unary_op(val[0], val[1]) - - result -end - -def _reduce_233(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_234(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_235(val, _values, result) - result = @builder.logical_op(:and, val[0], val[1], val[2]) - - result -end - -def _reduce_236(val, _values, result) - result = @builder.logical_op(:or, val[0], val[1], val[2]) - - result -end - -def _reduce_237(val, _values, result) - result = @builder.keyword_cmd(:defined?, val[0], nil, [ val[2] ], nil) - - result -end - -def _reduce_238(val, _values, result) - result = @builder.ternary(val[0], val[1], - val[2], val[4], val[5]) - - result -end - -# reduce 239 omitted - -# reduce 240 omitted - -# reduce 241 omitted - -# reduce 242 omitted - -def _reduce_243(val, _values, result) - result = val[0] << @builder.associate(nil, val[2], nil) - - result -end - -def _reduce_244(val, _values, result) - result = [ @builder.associate(nil, val[0], nil) ] - - result -end - -def _reduce_245(val, _values, result) - result = val - - result -end - -def _reduce_246(val, _values, result) - result = [ nil, [], nil ] - - result -end - -# reduce 247 omitted - -def _reduce_248(val, _values, result) - result = [] - - result -end - -# reduce 249 omitted - -# reduce 250 omitted - -def _reduce_251(val, _values, result) - result = val[0] << @builder.associate(nil, val[2], nil) - - result -end - -def _reduce_252(val, _values, result) - result = [ @builder.associate(nil, val[0], nil) ] - - result -end - -def _reduce_253(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_254(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_255(val, _values, result) - result = [ @builder.associate(nil, val[0], nil) ] - result.concat(val[1]) - - result -end - -def _reduce_256(val, _values, result) - assocs = @builder.associate(nil, val[2], nil) - result = val[0] << assocs - result.concat(val[3]) - - result -end - -def _reduce_257(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_258(val, _values, result) - result = @lexer.cmdarg.dup - @lexer.cmdarg.push(true) - - result -end - -def _reduce_259(val, _values, result) - @lexer.cmdarg = val[0] - - result = val[1] - - result -end - -def _reduce_260(val, _values, result) - result = @builder.block_pass(val[0], val[1]) - - result -end - -def _reduce_261(val, _values, result) - result = [ val[1] ] - - result -end - -def _reduce_262(val, _values, result) - result = [] - - result -end - -def _reduce_263(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_264(val, _values, result) - result = [ @builder.splat(val[0], val[1]) ] - - result -end - -def _reduce_265(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_266(val, _values, result) - result = val[0] << @builder.splat(val[2], val[3]) - - result -end - -def _reduce_267(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_268(val, _values, result) - result = val[0] << @builder.splat(val[2], val[3]) - - result -end - -def _reduce_269(val, _values, result) - result = [ @builder.splat(val[0], val[1]) ] - - result -end - -# reduce 270 omitted - -# reduce 271 omitted - -# reduce 272 omitted - -# reduce 273 omitted - -# reduce 274 omitted - -# reduce 275 omitted - -# reduce 276 omitted - -# reduce 277 omitted - -# reduce 278 omitted - -# reduce 279 omitted - -def _reduce_280(val, _values, result) - result = @builder.call_method(nil, nil, val[0]) - - result -end - -def _reduce_281(val, _values, result) - result = @lexer.cmdarg.dup - @lexer.cmdarg.clear - - result -end - -def _reduce_282(val, _values, result) - @lexer.cmdarg = val[1] - - result = @builder.begin_keyword(val[0], val[2], val[3]) - - result -end - -def _reduce_283(val, _values, result) - result = @lexer.cmdarg.dup - @lexer.cmdarg.clear - - result -end - -def _reduce_284(val, _values, result) - @lexer.state = :expr_endarg - - result -end - -def _reduce_285(val, _values, result) - @lexer.cmdarg = val[1] - - result = @builder.begin(val[0], val[2], val[5]) - - result -end - -def _reduce_286(val, _values, result) - @lexer.state = :expr_endarg - - result -end - -def _reduce_287(val, _values, result) - result = @builder.begin(val[0], nil, val[3]) - - result -end - -def _reduce_288(val, _values, result) - result = @builder.begin(val[0], val[1], val[2]) - - result -end - -def _reduce_289(val, _values, result) - result = @builder.const_fetch(val[0], val[1], val[2]) - - result -end - -def _reduce_290(val, _values, result) - result = @builder.const_global(val[0], val[1]) - - result -end - -def _reduce_291(val, _values, result) - result = @builder.array(val[0], val[1], val[2]) - - result -end - -def _reduce_292(val, _values, result) - result = @builder.associate(val[0], val[1], val[2]) - - result -end - -def _reduce_293(val, _values, result) - result = @builder.keyword_cmd(:return, val[0]) - - result -end - -def _reduce_294(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_295(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0], val[1], [], val[2]) - - result -end - -def _reduce_296(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0]) - - result -end - -def _reduce_297(val, _values, result) - result = @builder.keyword_cmd(:defined?, val[0], - val[2], [ val[3] ], val[4]) - - result -end - -def _reduce_298(val, _values, result) - result = @builder.not_op(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_299(val, _values, result) - result = @builder.not_op(val[0], val[1], nil, val[2]) - - result -end - -def _reduce_300(val, _values, result) - method_call = @builder.call_method(nil, nil, val[0]) - - begin_t, args, body, end_t = val[1] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -# reduce 301 omitted - -def _reduce_302(val, _values, result) - begin_t, args, body, end_t = val[1] - result = @builder.block(val[0], - begin_t, args, body, end_t) - - result -end - -def _reduce_303(val, _values, result) - result = @context.dup - @context.in_lambda = true - - result -end - -def _reduce_304(val, _values, result) - lambda_call = @builder.call_lambda(val[0]) - - args, (begin_t, body, end_t) = val[2] - result = @builder.block(lambda_call, - begin_t, args, body, end_t) - - @context.in_lambda = val[1].in_lambda - - result -end - -def _reduce_305(val, _values, result) - else_t, else_ = val[4] - result = @builder.condition(val[0], val[1], val[2], - val[3], else_t, - else_, val[5]) - - result -end - -def _reduce_306(val, _values, result) - else_t, else_ = val[4] - result = @builder.condition(val[0], val[1], val[2], - else_, else_t, - val[3], val[5]) - - result -end - -def _reduce_307(val, _values, result) - @lexer.cond.push(true) - - result -end - -def _reduce_308(val, _values, result) - @lexer.cond.pop - - result -end - -def _reduce_309(val, _values, result) - result = @builder.loop(:while, val[0], val[2], val[3], - val[5], val[6]) - - result -end - -def _reduce_310(val, _values, result) - @lexer.cond.push(true) - - result -end - -def _reduce_311(val, _values, result) - @lexer.cond.pop - - result -end - -def _reduce_312(val, _values, result) - result = @builder.loop(:until, val[0], val[2], val[3], - val[5], val[6]) - - result -end - -def _reduce_313(val, _values, result) - *when_bodies, (else_t, else_body) = *val[3] - - result = @builder.case(val[0], val[1], - when_bodies, else_t, else_body, - val[4]) - - result -end - -def _reduce_314(val, _values, result) - *when_bodies, (else_t, else_body) = *val[2] - - result = @builder.case(val[0], nil, - when_bodies, else_t, else_body, - val[3]) - - result -end - -def _reduce_315(val, _values, result) - @lexer.cond.push(true) - - result -end - -def _reduce_316(val, _values, result) - @lexer.cond.pop - - result -end - -def _reduce_317(val, _values, result) - result = @builder.for(val[0], val[1], - val[2], val[4], - val[5], val[7], val[8]) - - result -end - -def _reduce_318(val, _values, result) - local_push - @context.in_class = true - - result -end - -def _reduce_319(val, _values, result) - k_class, ctx = val[0] - if @context.in_def - diagnostic :error, :class_in_def, nil, k_class - end - - lt_t, superclass = val[2] - result = @builder.def_class(k_class, val[1], - lt_t, superclass, - val[4], val[5]) - - local_pop - @context.in_class = ctx.in_class - - result -end - -def _reduce_320(val, _values, result) - @context.in_def = false - @context.in_class = false - local_push - - result -end - -def _reduce_321(val, _values, result) - k_class, ctx = val[0] - result = @builder.def_sclass(k_class, val[1], val[2], - val[5], val[6]) - - local_pop - @context.in_def = ctx.in_def - @context.in_class = ctx.in_class - - result -end - -def _reduce_322(val, _values, result) - @context.in_class = true - local_push - - result -end - -def _reduce_323(val, _values, result) - k_mod, ctx = val[0] - if @context.in_def - diagnostic :error, :module_in_def, nil, k_mod - end - - result = @builder.def_module(k_mod, val[1], - val[3], val[4]) - - local_pop - @context.in_class = ctx.in_class - - result -end - -def _reduce_324(val, _values, result) - local_push - result = context.dup - @context.in_def = true - - result -end - -def _reduce_325(val, _values, result) - result = @builder.def_method(val[0], val[1], - val[3], val[4], val[5]) - - local_pop - @context.in_def = val[2].in_def - - result -end - -def _reduce_326(val, _values, result) - @lexer.state = :expr_fname - - result -end - -def _reduce_327(val, _values, result) - local_push - result = context.dup - @context.in_def = true - - result -end - -def _reduce_328(val, _values, result) - result = @builder.def_singleton(val[0], val[1], val[2], - val[4], val[6], val[7], val[8]) - - local_pop - @context.in_def = val[5].in_def - - result -end - -def _reduce_329(val, _values, result) - result = @builder.keyword_cmd(:break, val[0]) - - result -end - -def _reduce_330(val, _values, result) - result = @builder.keyword_cmd(:next, val[0]) - - result -end - -def _reduce_331(val, _values, result) - result = @builder.keyword_cmd(:redo, val[0]) - - result -end - -def _reduce_332(val, _values, result) - result = @builder.keyword_cmd(:retry, val[0]) - - result -end - -# reduce 333 omitted - -def _reduce_334(val, _values, result) - result = [ val[0], @context.dup ] - - result -end - -def _reduce_335(val, _values, result) - result = [ val[0], @context.dup ] - - result -end - -# reduce 336 omitted - -# reduce 337 omitted - -def _reduce_338(val, _values, result) - result = val[1] - - result -end - -# reduce 339 omitted - -# reduce 340 omitted - -# reduce 341 omitted - -def _reduce_342(val, _values, result) - else_t, else_ = val[4] - result = [ val[0], - @builder.condition(val[0], val[1], val[2], - val[3], else_t, - else_, nil), - ] - - result -end - -# reduce 343 omitted - -def _reduce_344(val, _values, result) - result = val - - result -end - -# reduce 345 omitted - -# reduce 346 omitted - -def _reduce_347(val, _values, result) - @static_env.declare val[0][0] - - result = @builder.arg(val[0]) - - result -end - -def _reduce_348(val, _values, result) - result = @builder.multi_lhs(val[0], val[1], val[2]) - - result -end - -def _reduce_349(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_350(val, _values, result) - result = val[0] << val[2] - - result -end - -# reduce 351 omitted - -def _reduce_352(val, _values, result) - @static_env.declare val[3][0] - - result = val[0]. - push(@builder.restarg(val[2], val[3])) - - result -end - -def _reduce_353(val, _values, result) - @static_env.declare val[3][0] - - result = val[0]. - push(@builder.restarg(val[2], val[3])). - concat(val[5]) - - result -end - -def _reduce_354(val, _values, result) - result = val[0]. - push(@builder.restarg(val[2])) - - result -end - -def _reduce_355(val, _values, result) - result = val[0]. - push(@builder.restarg(val[2])). - concat(val[4]) - - result -end - -def _reduce_356(val, _values, result) - @static_env.declare val[1][0] - - result = [ @builder.restarg(val[0], val[1]) ] - - result -end - -def _reduce_357(val, _values, result) - @static_env.declare val[1][0] - - result = [ @builder.restarg(val[0], val[1]), - *val[3] ] - - result -end - -def _reduce_358(val, _values, result) - result = [ @builder.restarg(val[0]) ] - - result -end - -def _reduce_359(val, _values, result) - result = [ @builder.restarg(val[0]), - *val[2] ] - - result -end - -def _reduce_360(val, _values, result) - result = val[0].concat(val[2]).concat(val[3]) - - result -end - -def _reduce_361(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_362(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_363(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_364(val, _values, result) - result = val[1] - - result -end - -def _reduce_365(val, _values, result) - result = [] - - result -end - -def _reduce_366(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_367(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[6]). - concat(val[7]) - - result -end - -def _reduce_368(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_369(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_370(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -# reduce 371 omitted - -def _reduce_372(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_373(val, _values, result) - if val[1].empty? && val[0].size == 1 - result = [@builder.procarg0(val[0][0])] - else - result = val[0].concat(val[1]) - end - - result -end - -def _reduce_374(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_375(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_376(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_377(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_378(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_379(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -# reduce 380 omitted - -def _reduce_381(val, _values, result) - result = @builder.args(nil, [], nil) - - result -end - -def _reduce_382(val, _values, result) - @lexer.state = :expr_value - - result -end - -def _reduce_383(val, _values, result) - result = @builder.args(val[0], val[1], val[2]) - - result -end - -def _reduce_384(val, _values, result) - result = @builder.args(val[0], [], val[0]) - - result -end - -def _reduce_385(val, _values, result) - result = @builder.args(val[0], val[1].concat(val[2]), val[3]) - - result -end - -def _reduce_386(val, _values, result) - result = [] - - result -end - -def _reduce_387(val, _values, result) - result = val[2] - - result -end - -def _reduce_388(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_389(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_390(val, _values, result) - @static_env.declare val[0][0] - result = @builder.shadowarg(val[0]) - - result -end - -# reduce 391 omitted - -def _reduce_392(val, _values, result) - @static_env.extend_dynamic - - result -end - -def _reduce_393(val, _values, result) - result = [ val[1], val[2] ] - - @static_env.unextend - - result -end - -def _reduce_394(val, _values, result) - result = @builder.args(val[0], val[1].concat(val[2]), val[3]) - - result -end - -def _reduce_395(val, _values, result) - result = @builder.args(nil, val[0], nil) - - result -end - -def _reduce_396(val, _values, result) - result = @context.dup - @context.in_lambda = true - - result -end - -def _reduce_397(val, _values, result) - result = [ val[0], val[2], val[3] ] - @context.in_lambda = val[1].in_lambda - - result -end - -def _reduce_398(val, _values, result) - result = @context.dup - @context.in_lambda = true - - result -end - -def _reduce_399(val, _values, result) - result = [ val[0], val[2], val[3] ] - @context.in_lambda = val[1].in_lambda - - result -end - -def _reduce_400(val, _values, result) - @static_env.extend_dynamic - result = @context.dup - @context.in_block = true - - result -end - -def _reduce_401(val, _values, result) - result = [ val[0], val[2], val[3], val[4] ] - - @static_env.unextend - @context.in_block = val[1].in_block - - result -end - -def _reduce_402(val, _values, result) - begin_t, block_args, body, end_t = val[1] - result = @builder.block(val[0], - begin_t, block_args, body, end_t) - - result -end - -def _reduce_403(val, _values, result) - lparen_t, args, rparen_t = val[3] - result = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - result -end - -def _reduce_404(val, _values, result) - lparen_t, args, rparen_t = val[3] - method_call = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - begin_t, args, body, end_t = val[4] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_405(val, _values, result) - method_call = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - begin_t, args, body, end_t = val[4] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_406(val, _values, result) - lparen_t, args, rparen_t = val[1] - result = @builder.call_method(nil, nil, val[0], - lparen_t, args, rparen_t) - - result -end - -def _reduce_407(val, _values, result) - lparen_t, args, rparen_t = val[3] - result = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - result -end - -def _reduce_408(val, _values, result) - lparen_t, args, rparen_t = val[3] - result = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - result -end - -def _reduce_409(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2]) - - result -end - -def _reduce_410(val, _values, result) - lparen_t, args, rparen_t = val[2] - result = @builder.call_method(val[0], val[1], nil, - lparen_t, args, rparen_t) - - result -end - -def _reduce_411(val, _values, result) - lparen_t, args, rparen_t = val[2] - result = @builder.call_method(val[0], val[1], nil, - lparen_t, args, rparen_t) - - result -end - -def _reduce_412(val, _values, result) - lparen_t, args, rparen_t = val[1] - result = @builder.keyword_cmd(:super, val[0], - lparen_t, args, rparen_t) - - result -end - -def _reduce_413(val, _values, result) - result = @builder.keyword_cmd(:zsuper, val[0]) - - result -end - -def _reduce_414(val, _values, result) - result = @builder.index(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_415(val, _values, result) - @static_env.extend_dynamic - result = @context.dup - @context.in_block = true - - result -end - -def _reduce_416(val, _values, result) - result = [ val[0], val[2], val[3], val[4] ] - - @static_env.unextend - @context.in_block = val[1].in_block - - result -end - -def _reduce_417(val, _values, result) - @static_env.extend_dynamic - result = @context.dup - @context.in_block = true - - result -end - -def _reduce_418(val, _values, result) - result = [ val[0], val[2], val[3], val[4] ] - - @static_env.unextend - @context.in_block = val[1].in_block - - result -end - -def _reduce_419(val, _values, result) - result = [ @builder.when(val[0], val[1], val[2], val[3]), - *val[4] ] - - result -end - -def _reduce_420(val, _values, result) - result = [ val[0] ] - - result -end - -# reduce 421 omitted - -def _reduce_422(val, _values, result) - assoc_t, exc_var = val[2] - - if val[1] - exc_list = @builder.array(nil, val[1], nil) - end - - result = [ @builder.rescue_body(val[0], - exc_list, assoc_t, exc_var, - val[3], val[4]), - *val[5] ] - - result -end - -def _reduce_423(val, _values, result) - result = [] - - result -end - -def _reduce_424(val, _values, result) - result = [ val[0] ] - - result -end - -# reduce 425 omitted - -# reduce 426 omitted - -def _reduce_427(val, _values, result) - result = [ val[0], val[1] ] - - result -end - -# reduce 428 omitted - -def _reduce_429(val, _values, result) - result = [ val[0], val[1] ] - - result -end - -# reduce 430 omitted - -# reduce 431 omitted - -# reduce 432 omitted - -# reduce 433 omitted - -def _reduce_434(val, _values, result) - result = @builder.string_compose(nil, val[0], nil) - - result -end - -def _reduce_435(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_436(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_437(val, _values, result) - result = @builder.string_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_438(val, _values, result) - result = @builder.string(val[0]) - - result -end - -def _reduce_439(val, _values, result) - result = @builder.character(val[0]) - - result -end - -def _reduce_440(val, _values, result) - result = @builder.xstring_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_441(val, _values, result) - opts = @builder.regexp_options(val[3]) - result = @builder.regexp_compose(val[0], val[1], val[2], opts) - - result -end - -def _reduce_442(val, _values, result) - result = @builder.words_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_443(val, _values, result) - result = [] - - result -end - -def _reduce_444(val, _values, result) - result = val[0] << @builder.word(val[1]) - - result -end - -def _reduce_445(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_446(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_447(val, _values, result) - result = @builder.symbols_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_448(val, _values, result) - result = [] - - result -end - -def _reduce_449(val, _values, result) - result = val[0] << @builder.word(val[1]) - - result -end - -def _reduce_450(val, _values, result) - result = @builder.words_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_451(val, _values, result) - result = @builder.symbols_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_452(val, _values, result) - result = [] - - result -end - -def _reduce_453(val, _values, result) - result = val[0] << @builder.string_internal(val[1]) - - result -end - -def _reduce_454(val, _values, result) - result = [] - - result -end - -def _reduce_455(val, _values, result) - result = val[0] << @builder.symbol_internal(val[1]) - - result -end - -def _reduce_456(val, _values, result) - result = [] - - result -end - -def _reduce_457(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_458(val, _values, result) - result = [] - - result -end - -def _reduce_459(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_460(val, _values, result) - result = [] - - result -end - -def _reduce_461(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_462(val, _values, result) - result = @builder.string_internal(val[0]) - - result -end - -def _reduce_463(val, _values, result) - result = val[1] - - result -end - -def _reduce_464(val, _values, result) - @lexer.cond.push(false) - @lexer.cmdarg.push(false) - - result -end - -def _reduce_465(val, _values, result) - @lexer.cond.lexpop - @lexer.cmdarg.lexpop - - result = @builder.begin(val[0], val[2], val[3]) - - result -end - -def _reduce_466(val, _values, result) - result = @builder.gvar(val[0]) - - result -end - -def _reduce_467(val, _values, result) - result = @builder.ivar(val[0]) - - result -end - -def _reduce_468(val, _values, result) - result = @builder.cvar(val[0]) - - result -end - -# reduce 469 omitted - -def _reduce_470(val, _values, result) - result = @builder.symbol(val[0]) - - result -end - -def _reduce_471(val, _values, result) - result = @builder.symbol_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_472(val, _values, result) - result = @builder.integer(val[0]) - - result -end - -def _reduce_473(val, _values, result) - result = @builder.float(val[0]) - - result -end - -def _reduce_474(val, _values, result) - num = @builder.integer(val[1]) - if @builder.respond_to? :negate - # AST builder interface compatibility - result = @builder.negate(val[0], num) - else - result = @builder.unary_num(val[0], num) - end - - result -end - -def _reduce_475(val, _values, result) - num = @builder.float(val[1]) - if @builder.respond_to? :negate - # AST builder interface compatibility - result = @builder.negate(val[0], num) - else - result = @builder.unary_num(val[0], num) - end - - result -end - -def _reduce_476(val, _values, result) - result = @builder.ident(val[0]) - - result -end - -def _reduce_477(val, _values, result) - result = @builder.ivar(val[0]) - - result -end - -def _reduce_478(val, _values, result) - result = @builder.gvar(val[0]) - - result -end - -def _reduce_479(val, _values, result) - result = @builder.const(val[0]) - - result -end - -def _reduce_480(val, _values, result) - result = @builder.cvar(val[0]) - - result -end - -def _reduce_481(val, _values, result) - result = @builder.nil(val[0]) - - result -end - -def _reduce_482(val, _values, result) - result = @builder.self(val[0]) - - result -end - -def _reduce_483(val, _values, result) - result = @builder.true(val[0]) - - result -end - -def _reduce_484(val, _values, result) - result = @builder.false(val[0]) - - result -end - -def _reduce_485(val, _values, result) - result = @builder.__FILE__(val[0]) - - result -end - -def _reduce_486(val, _values, result) - result = @builder.__LINE__(val[0]) - - result -end - -def _reduce_487(val, _values, result) - result = @builder.__ENCODING__(val[0]) - - result -end - -def _reduce_488(val, _values, result) - result = @builder.accessible(val[0]) - - result -end - -def _reduce_489(val, _values, result) - result = @builder.accessible(val[0]) - - result -end - -def _reduce_490(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_491(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_492(val, _values, result) - result = @builder.nth_ref(val[0]) - - result -end - -def _reduce_493(val, _values, result) - result = @builder.back_ref(val[0]) - - result -end - -def _reduce_494(val, _values, result) - result = nil - - result -end - -def _reduce_495(val, _values, result) - @lexer.state = :expr_value - - result -end - -def _reduce_496(val, _values, result) - result = [ val[0], val[2] ] - - result -end - -def _reduce_497(val, _values, result) - yyerrok - result = nil - - result -end - -def _reduce_498(val, _values, result) - result = @builder.args(val[0], val[1], val[2]) - - @lexer.state = :expr_value - - result -end - -def _reduce_499(val, _values, result) - result = @builder.args(nil, val[0], nil) - - result -end - -def _reduce_500(val, _values, result) - result = val[0].concat(val[2]).concat(val[3]) - - result -end - -def _reduce_501(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_502(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_503(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_504(val, _values, result) - result = val[1] - - result -end - -def _reduce_505(val, _values, result) - result = [] - - result -end - -def _reduce_506(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_507(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[6]). - concat(val[7]) - - result -end - -def _reduce_508(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_509(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_510(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_511(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_512(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_513(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_514(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_515(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_516(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_517(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_518(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_519(val, _values, result) - result = val[0] - - result -end - -def _reduce_520(val, _values, result) - result = [] - - result -end - -def _reduce_521(val, _values, result) - diagnostic :error, :argument_const, nil, val[0] - - result -end - -def _reduce_522(val, _values, result) - diagnostic :error, :argument_ivar, nil, val[0] - - result -end - -def _reduce_523(val, _values, result) - diagnostic :error, :argument_gvar, nil, val[0] - - result -end - -def _reduce_524(val, _values, result) - diagnostic :error, :argument_cvar, nil, val[0] - - result -end - -# reduce 525 omitted - -# reduce 526 omitted - -def _reduce_527(val, _values, result) - @static_env.declare val[0][0] - - result = @builder.arg(val[0]) - - result -end - -def _reduce_528(val, _values, result) - result = @builder.multi_lhs(val[0], val[1], val[2]) - - result -end - -def _reduce_529(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_530(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_531(val, _values, result) - check_kwarg_name(val[0]) - - @static_env.declare val[0][0] - - result = @builder.kwoptarg(val[0], val[1]) - - result -end - -def _reduce_532(val, _values, result) - check_kwarg_name(val[0]) - - @static_env.declare val[0][0] - - result = @builder.kwoptarg(val[0], val[1]) - - result -end - -def _reduce_533(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_534(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_535(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_536(val, _values, result) - result = val[0] << val[2] - - result -end - -# reduce 537 omitted - -# reduce 538 omitted - -def _reduce_539(val, _values, result) - @static_env.declare val[1][0] - - result = [ @builder.kwrestarg(val[0], val[1]) ] - - result -end - -def _reduce_540(val, _values, result) - result = [ @builder.kwrestarg(val[0]) ] - - result -end - -def _reduce_541(val, _values, result) - @static_env.declare val[0][0] - - result = @builder.optarg(val[0], val[1], val[2]) - - result -end - -def _reduce_542(val, _values, result) - @static_env.declare val[0][0] - - result = @builder.optarg(val[0], val[1], val[2]) - - result -end - -def _reduce_543(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_544(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_545(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_546(val, _values, result) - result = val[0] << val[2] - - result -end - -# reduce 547 omitted - -# reduce 548 omitted - -def _reduce_549(val, _values, result) - @static_env.declare val[1][0] - - result = [ @builder.restarg(val[0], val[1]) ] - - result -end - -def _reduce_550(val, _values, result) - result = [ @builder.restarg(val[0]) ] - - result -end - -# reduce 551 omitted - -# reduce 552 omitted - -def _reduce_553(val, _values, result) - @static_env.declare val[1][0] - - result = @builder.blockarg(val[0], val[1]) - - result -end - -def _reduce_554(val, _values, result) - result = [ val[1] ] - - result -end - -def _reduce_555(val, _values, result) - result = [] - - result -end - -# reduce 556 omitted - -def _reduce_557(val, _values, result) - result = val[1] - - result -end - -def _reduce_558(val, _values, result) - result = [] - - result -end - -# reduce 559 omitted - -def _reduce_560(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_561(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_562(val, _values, result) - result = @builder.pair(val[0], val[1], val[2]) - - result -end - -def _reduce_563(val, _values, result) - result = @builder.pair_keyword(val[0], val[1]) - - result -end - -def _reduce_564(val, _values, result) - result = @builder.kwsplat(val[0], val[1]) - - result -end - -# reduce 565 omitted - -# reduce 566 omitted - -# reduce 567 omitted - -# reduce 568 omitted - -# reduce 569 omitted - -# reduce 570 omitted - -# reduce 571 omitted - -# reduce 572 omitted - -# reduce 573 omitted - -# reduce 574 omitted - -# reduce 575 omitted - -# reduce 576 omitted - -# reduce 577 omitted - -# reduce 578 omitted - -# reduce 579 omitted - -# reduce 580 omitted - -def _reduce_581(val, _values, result) - result = val[1] - - result -end - -def _reduce_582(val, _values, result) - result = val[1] - - result -end - -# reduce 583 omitted - -# reduce 584 omitted - -# reduce 585 omitted - -def _reduce_586(val, _values, result) - yyerrok - - result -end - -# reduce 587 omitted - -# reduce 588 omitted - -# reduce 589 omitted - -def _reduce_590(val, _values, result) - result = nil - - result -end - -def _reduce_none(val, _values, result) - val[0] -end - - end # class Ruby20 -end # module Parser diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ruby21.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ruby21.rb deleted file mode 100644 index c2a934c0..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ruby21.rb +++ /dev/null @@ -1,10203 +0,0 @@ -# -*- encoding:utf-8; warn-indent:false; frozen_string_literal: true -*- -# -# DO NOT MODIFY!!!! -# This file is automatically generated by Racc 1.7.3 -# from Racc grammar file "ruby21.y". -# - -require 'racc/parser.rb' - - -require 'parser' - -module Parser - class Ruby21 < Parser::Base - - - def version - 21 - end - - def default_encoding - Encoding::UTF_8 - end - - def local_push - @static_env.extend_static - @lexer.cmdarg.push(false) - @lexer.cond.push(false) - end - - def local_pop - @static_env.unextend - @lexer.cmdarg.pop - @lexer.cond.pop - end -##### State transition tables begin ### - -racc_action_table = [ - -479, 216, 217, 216, 217, 270, -97, -479, -479, -479, - 219, 536, -479, -479, -479, 615, -479, 270, -286, 578, - 111, 615, 216, 217, -479, 580, -479, -479, -479, 526, - 270, 123, 525, -98, -105, 270, -479, -479, 557, -479, - -479, -479, -479, -479, 208, 536, -493, 536, 536, -104, - 614, 220, -100, 691, 615, 691, 614, 115, -286, 781, - 209, 542, 114, -494, -102, 867, -479, -479, -479, -479, - -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, - 210, 265, -479, -479, -479, 577, -479, -479, -99, 614, - -479, 579, 269, -479, -479, 220, -479, 220, -479, 265, - -479, -97, -479, -479, 269, -479, -479, -479, -479, -479, - 536, -479, -482, -479, -100, -88, 220, 269, -98, -482, - -482, -482, 269, -102, -482, -482, -482, -479, -482, 115, - -479, -479, -479, -479, 114, -479, -482, -479, -482, -482, - -482, -479, -89, -96, 556, 214, -101, 691, -482, -482, - -101, -482, -482, -482, -482, -482, -99, 115, -95, 115, - -91, -91, 114, 115, 114, 115, 115, 115, 114, 818, - 114, 114, 114, -93, 866, -103, 216, 217, -482, -482, - -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, - -482, -482, -96, 444, -482, -482, -482, -90, -482, -482, - -105, -93, -482, 93, 94, -482, -482, 215, -482, 548, - -482, -575, -482, 549, -482, -482, 514, -482, -482, -482, - -482, -482, -289, -482, 259, -482, -91, -575, 115, -289, - -289, -289, -100, 114, 317, -289, -289, -100, -289, -482, - -576, -102, -482, -482, -482, -482, -102, -482, -105, -482, - 262, 115, 565, -482, 746, -92, 114, 263, -289, -289, - 318, -289, -289, -289, -289, -289, -91, -93, -101, -91, - 115, -104, 565, -101, -99, 114, 615, -91, 115, -99, - 220, 95, 96, 114, -94, -493, 93, 94, -289, -289, - -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, - -289, -289, 565, 747, -289, -289, -289, -93, 598, -100, - -93, 614, -289, -83, -494, -289, 567, 566, -93, 386, - -289, -69, -289, 399, -289, -289, 723, -289, -289, -289, - -289, -289, -88, -289, -579, -289, 567, 566, 514, 836, - -97, -579, -579, -579, 593, 443, 725, -579, -579, -289, - -579, 115, -289, -289, 445, -94, 114, -289, -102, -579, - 446, -89, -572, -103, 95, 96, 567, 566, 563, -98, - -579, -579, -479, -579, -579, -579, -579, -579, 669, -479, - 666, 665, 664, 219, 667, -95, 669, 565, 666, 665, - 664, -91, 667, -104, -99, 216, 217, 477, -573, -100, - -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, - -579, -579, -579, -579, -479, 212, -579, -579, -579, 486, - 599, -479, 213, 488, -579, 565, -572, -579, 673, 490, - -479, 211, -579, 594, -579, -579, -579, -579, 676, -579, - -579, -579, -579, -579, 497, -579, -579, -579, -482, -572, - -482, 567, 566, 568, 565, -482, -68, -482, 220, 565, - 885, -579, -573, 565, -579, -579, -482, -92, 982, -579, - -579, 684, 683, 500, -489, -101, 677, -579, -579, -579, - -93, -489, -579, -579, -579, -573, -579, -579, -102, 567, - 566, 570, 501, 81, -579, -579, -579, -579, -579, -575, - 508, -333, 274, -579, 732, 82, -579, -579, -333, -579, - -579, -579, -579, -579, 440, 83, 220, -333, 567, 566, - 572, 441, -579, 567, 566, 576, -488, 567, 566, 581, - 442, 526, 526, -488, 528, 528, -579, -579, -579, -579, - -579, -579, -579, -579, -579, -579, -579, -579, -579, -579, - 265, -90, -579, -579, -579, 240, 748, -579, -491, -99, - -579, 511, -490, -579, -579, -491, -579, 515, -579, -490, - -579, 240, -579, -579, -491, -579, -579, -579, -579, -579, - 115, -579, -579, -579, 220, 114, -487, 237, 529, -484, - 530, 239, 238, -487, 235, 236, -484, -579, 490, 115, - -579, -579, -579, -579, 114, -579, -289, -579, 74, 75, - 71, -101, 57, -289, -289, -289, 63, 64, -289, -289, - -289, 67, -289, 65, 66, 68, 30, 31, 72, 73, - 216, 217, -289, -289, -289, 29, 28, 27, 103, 102, - 104, 105, -289, -289, 232, -289, -289, -289, -289, -289, - 526, 45, 542, 528, 107, 106, 108, 97, 56, 99, - 98, 100, 388, 101, 109, 110, 546, 93, 94, 42, - 43, 41, -289, -289, -289, -289, -289, -289, -289, -289, - -289, -289, -289, -289, -289, -289, 216, 217, -289, -289, - -289, 225, 749, -289, 231, 547, -289, 58, 59, -289, - -289, 60, -289, -485, -289, 582, -289, 44, -289, -289, - -485, -289, -289, -289, -289, -289, 230, -289, -486, -289, - 585, 91, 81, 84, 85, -486, 86, 88, 87, 89, - 813, 781, -261, -289, 82, 90, -289, -289, -289, -289, - 587, -289, 62, -289, 83, 95, 96, -103, 5, 74, - 75, 71, 9, 57, 262, 115, 220, 63, 64, 967, - 114, 263, 67, 220, 65, 66, 68, 30, 31, 72, - 73, 591, -579, 684, 683, 592, 29, 28, 27, 103, - 102, 104, 105, 396, 265, 19, 813, 781, 398, 397, - 603, 8, 45, 7, 10, 107, 106, 108, 97, 56, - 99, 98, 100, 602, 101, 109, 110, 605, 93, 94, - 42, 43, 41, 240, 244, 249, 250, 251, 246, 248, - 256, 257, 252, 253, -579, 233, 234, -492, 240, 254, - 255, -579, 40, 240, -492, 33, -575, 240, 58, 59, - -579, 240, 60, -492, 35, 237, 220, 243, 44, 239, - 238, 673, 235, 236, 247, 245, 241, 20, 242, -579, - 220, 676, 91, 81, 84, 85, 506, 86, 88, 87, - 89, 220, -83, 507, 633, 82, 90, 220, 258, 519, - -238, 644, 505, 62, 649, 83, 95, 96, 291, 74, - 75, 71, 9, 57, 684, 683, 650, 63, 64, 677, - 652, 687, 67, 542, 65, 66, 68, 30, 31, 72, - 73, 694, -415, 712, 722, 726, 29, 28, 27, 103, - 102, 104, 105, 717, 718, 19, 727, 719, 109, 110, - 588, 8, 45, 293, 10, 107, 106, 108, 97, 56, - 99, 98, 100, -262, 101, 109, 110, 733, 93, 94, - 42, 43, 41, 240, 244, 249, 250, 251, 246, 248, - 256, 257, 252, 253, -415, 233, 234, -279, 477, 254, - 255, -415, 40, 477, -279, 295, 220, 751, 58, 59, - -415, 259, 60, -279, 35, 237, 488, 243, 44, 239, - 238, 490, 235, 236, 247, 245, 241, 20, 242, -415, - 774, 644, 91, 81, 84, 85, 516, 86, 88, 87, - 89, 220, 265, 517, 265, 82, 90, 644, 258, 240, - 781, 220, 442, 62, 790, 83, 95, 96, 5, 74, - 75, 71, 9, 57, 793, 794, 544, 63, 64, 796, - 798, 800, 67, 545, 65, 66, 68, 30, 31, 72, - 73, 808, 543, 809, 810, 781, 29, 28, 27, 103, - 102, 104, 105, 817, 220, 19, 220, 826, -263, 835, - 603, 8, 45, 7, 10, 107, 106, 108, 97, 56, - 99, 98, 100, 838, 101, 109, 110, 793, 93, 94, - 42, 43, 41, 240, 244, 249, 250, 251, 246, 248, - 256, 257, 252, 253, 552, 233, 234, -290, 841, 254, - 255, 551, 40, 843, -290, 33, 845, 847, 58, 59, - 553, 220, 60, -290, 35, 237, 849, 243, 44, 239, - 238, 850, 235, 236, 247, 245, 241, 20, 242, 853, - 855, 856, 91, 81, 84, 85, -290, 86, 88, 87, - 89, 644, 858, -290, -261, 82, 90, 862, 258, 864, - 220, 883, -290, 62, 220, 83, 95, 96, 291, 74, - 75, 71, 9, 57, 887, 889, 552, 63, 64, 895, - 898, 220, 67, 918, 65, 66, 68, 30, 31, 72, - 73, 902, 553, -264, 912, 919, 29, 28, 27, 103, - 102, 104, 105, 920, 915, 19, 666, 665, 664, 931, - 667, 8, 45, 293, 10, 107, 106, 108, 97, 56, - 99, 98, 100, 793, 101, 109, 110, 933, 93, 94, - 42, 43, 41, 240, 244, 249, 250, 251, 246, 248, - 256, 257, 252, 253, -289, 233, 234, 552, 935, 254, - 255, -289, 40, 937, 918, 33, -576, 939, 58, 59, - -289, 939, 60, 553, 35, 237, 220, 243, 44, 239, - 238, 945, 235, 236, 247, 245, 241, 20, 242, 948, - 949, 954, 91, 81, 84, 85, -491, 86, 88, 87, - 89, 712, 793, -491, 957, 82, 90, 959, 258, 961, - 963, 963, -491, 62, 974, 83, 95, 96, 291, 74, - 75, 71, 9, 57, 984, -576, -492, 63, 64, -575, - 649, 999, 67, -492, 65, 66, 68, 30, 31, 72, - 73, 1000, -492, 1001, 939, 939, 29, 28, 27, 103, - 102, 104, 105, 939, 915, 19, 666, 665, 664, 1006, - 667, 8, 45, 293, 10, 107, 106, 108, 97, 56, - 99, 98, 100, 984, 101, 109, 110, 1009, 93, 94, - 42, 43, 41, 240, 244, 249, 250, 251, 246, 248, - 256, 257, 252, 253, -289, 233, 234, 972, 1010, 254, - 255, -289, 40, 1011, 973, 33, -576, 963, 58, 59, - -289, 963, 60, 971, 35, 237, 963, 243, 44, 239, - 238, 220, 235, 236, 247, 245, 241, 20, 242, 984, - 939, 984, 91, 81, 84, 85, -279, 86, 88, 87, - 89, 963, nil, -279, nil, 82, 90, nil, 258, nil, - nil, nil, -279, 62, nil, 83, 95, 96, 291, 74, - 75, 71, 9, 57, nil, nil, -290, 63, 64, nil, - nil, nil, 67, -290, 65, 66, 68, 30, 31, 72, - 73, nil, -290, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 19, 118, 119, 120, 121, - 122, 8, 45, 293, 10, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, 240, 244, 249, 250, 251, 246, 248, - 256, 257, 252, 253, -289, 233, 234, nil, nil, 254, - 255, -289, 40, nil, nil, 295, -576, nil, 58, 59, - -289, nil, 60, nil, 35, 237, nil, 243, 44, 239, - 238, nil, 235, 236, 247, 245, 241, 20, 242, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, 258, nil, - nil, nil, nil, 62, nil, 83, 95, 96, 291, 74, - 75, 71, 9, 57, nil, nil, nil, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, 118, 119, 120, 121, 122, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 19, 118, 119, 120, 121, - 122, 8, 45, 293, 10, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, 240, 244, 249, 250, 251, 246, 248, - 256, 257, 252, 253, nil, 233, 234, nil, nil, 254, - 255, nil, 40, nil, nil, 295, nil, nil, 58, 59, - nil, nil, 60, nil, 35, 237, nil, 243, 44, 239, - 238, nil, 235, 236, 247, 245, 241, 20, 242, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, 220, 258, nil, - nil, nil, nil, 62, nil, 83, 95, 96, 291, 74, - 75, 71, 9, 57, nil, nil, nil, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 19, nil, nil, nil, nil, - nil, 8, 45, 293, 10, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, 240, 244, 249, 250, 251, 246, 248, - 256, 257, 252, 253, nil, 233, 234, nil, nil, 254, - 255, nil, 40, nil, nil, 33, nil, nil, 58, 59, - nil, nil, 60, nil, 35, 237, nil, 243, 44, 239, - 238, nil, 235, 236, 247, 245, 241, 20, 242, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, 258, nil, - nil, nil, nil, 62, nil, 83, 95, 96, 5, 74, - 75, 71, 9, 57, nil, nil, nil, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 19, nil, nil, nil, nil, - nil, 8, 45, 7, 10, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, 240, 244, 249, 250, 251, 246, 248, - 256, 257, 252, 253, nil, 233, 234, nil, nil, 254, - 255, nil, 40, nil, nil, 33, nil, nil, 58, 59, - nil, nil, 60, nil, 35, 237, nil, 243, 44, 239, - 238, nil, 235, 236, 247, 245, 241, 20, 242, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, 258, nil, - nil, nil, nil, 62, nil, 83, 95, 96, 291, 74, - 75, 71, 9, 57, nil, nil, nil, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 19, nil, nil, nil, nil, - nil, 8, 45, 293, 10, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, 240, 244, 249, 250, 251, 246, 248, - 256, 257, 252, 253, nil, 233, 234, nil, nil, 254, - 255, nil, 40, nil, nil, 33, nil, nil, 58, 59, - nil, nil, 60, nil, 35, 237, nil, 243, 44, 239, - 238, nil, 235, 236, 247, 245, 241, 20, 242, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, 258, nil, - nil, nil, nil, 62, nil, 83, 95, 96, 291, 74, - 75, 71, 9, 57, nil, nil, nil, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 19, nil, nil, nil, nil, - nil, 8, 45, 293, 10, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, 240, 244, 249, 250, 251, 246, 248, - 256, 257, 252, 253, nil, 233, 234, nil, nil, 254, - 255, nil, 40, nil, nil, 33, nil, nil, 58, 59, - nil, nil, 60, nil, 35, 237, nil, 243, 44, 239, - 238, nil, 235, 236, 247, 245, 241, 20, 242, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, 258, nil, - nil, nil, nil, 62, nil, 83, 95, 96, 291, 74, - 75, 71, 9, 57, nil, nil, nil, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 19, nil, nil, nil, nil, - nil, 8, 45, 293, 10, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, 240, 244, 249, 250, 251, 246, 248, - 256, 257, 252, 253, nil, 233, 234, nil, nil, 254, - 255, nil, 40, nil, nil, 33, nil, nil, 58, 59, - nil, nil, 60, nil, 35, 237, nil, 243, 44, 239, - 238, nil, 235, 236, 247, 245, 241, 20, 242, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, 258, nil, - nil, nil, nil, 62, nil, 83, 95, 96, 291, 74, - 75, 71, 9, 57, nil, nil, nil, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 19, nil, nil, nil, nil, - nil, 8, 45, 293, 10, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, 240, 244, 249, 250, 251, 246, 248, - 256, 257, 252, 253, nil, 233, 234, nil, nil, 254, - 255, nil, 40, nil, nil, 33, nil, nil, 58, 59, - nil, nil, 60, nil, 35, 237, nil, 243, 44, 239, - 238, nil, 235, 236, 247, 245, 241, 20, 242, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, 258, nil, - nil, nil, nil, 62, nil, 83, 95, 96, 291, 74, - 75, 71, 9, 57, nil, nil, nil, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 19, nil, nil, nil, nil, - nil, 8, 45, 293, 10, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, 240, 244, 249, 250, 251, 246, 248, - 256, 257, 252, 253, nil, 233, 234, nil, nil, 254, - 255, nil, 40, nil, nil, 33, nil, nil, 58, 59, - nil, nil, 60, nil, 35, 237, nil, 243, 44, 239, - 238, nil, 235, 236, 247, 245, 241, 20, 242, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, 258, nil, - nil, nil, nil, 62, nil, 83, 95, 96, 291, 74, - 75, 71, 9, 57, nil, nil, nil, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 19, nil, nil, nil, nil, - nil, 8, 45, 293, 10, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, 240, 244, 249, 250, 251, 246, 248, - 256, 257, 252, 253, nil, 233, 234, nil, nil, 254, - 255, nil, 40, nil, nil, 33, nil, nil, 58, 59, - nil, nil, 60, nil, 35, 237, nil, 243, 44, 239, - 238, nil, 235, 236, 247, 245, 241, 20, 242, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, 258, nil, - nil, nil, nil, 62, nil, 83, 95, 96, 291, 74, - 75, 71, 9, 57, nil, nil, nil, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 19, nil, nil, nil, nil, - nil, 8, 45, 293, 10, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, 240, 244, 249, 250, 251, 246, 248, - 256, 257, 252, 253, nil, 233, 234, nil, nil, 254, - 255, nil, 40, nil, nil, 33, nil, nil, 58, 59, - nil, nil, 60, nil, 35, 237, nil, 243, 44, 239, - 238, nil, 235, 236, 247, 245, 241, 20, 242, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, 258, nil, - nil, nil, nil, 62, nil, 83, 95, 96, 291, 74, - 75, 71, 9, 57, nil, nil, nil, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 19, nil, nil, nil, nil, - nil, 8, 45, 293, 10, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, 240, 244, 249, 250, 251, 246, 248, - 256, 257, 252, 253, nil, 233, 234, nil, nil, 254, - 255, nil, 40, nil, nil, 33, nil, nil, 58, 59, - nil, nil, 60, nil, 35, 237, nil, 243, 44, 239, - 238, nil, 235, 236, 247, 245, 241, 20, 242, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, 258, nil, - nil, nil, nil, 62, nil, 83, 95, 96, 291, 74, - 75, 71, 9, 57, nil, nil, nil, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, 669, 19, 666, 665, 664, nil, - 667, 8, 45, 293, 10, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, 669, nil, 666, 665, 664, nil, 667, - nil, 802, nil, nil, 240, nil, nil, nil, nil, nil, - 805, nil, 40, nil, nil, 33, nil, nil, 58, 59, - nil, nil, 60, nil, 35, nil, nil, nil, 44, nil, - 802, nil, nil, nil, nil, nil, 237, 20, nil, 805, - 239, 238, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, 669, nil, - 666, 665, 664, 62, 667, 83, 95, 96, 291, 74, - 75, 71, 9, 57, nil, nil, nil, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, 802, 29, 28, 27, 103, - 102, 104, 105, nil, 944, 19, nil, nil, nil, nil, - nil, 8, 45, 293, 10, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, 240, 244, 249, 250, 251, 246, 248, - 256, 257, 252, 253, nil, -598, -598, nil, nil, 254, - 255, nil, 40, nil, nil, 33, nil, nil, 58, 59, - nil, 240, 60, nil, 35, 237, nil, 243, 44, 239, - 238, nil, 235, 236, 247, 245, 241, 20, 242, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, 237, nil, 82, 90, 239, 238, nil, - 235, 236, nil, 62, nil, 83, 95, 96, 291, 74, - 75, 71, 9, 57, nil, nil, nil, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 19, nil, nil, nil, nil, - nil, 8, 45, 293, 10, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, 240, 244, 249, 250, 251, 246, 248, - 256, 257, 252, 253, nil, -598, -598, nil, nil, 254, - 255, nil, 40, nil, nil, 33, nil, nil, 58, 59, - nil, 240, 60, nil, 35, 237, nil, 243, 44, 239, - 238, nil, 235, 236, 247, 245, 241, 20, 242, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, 237, nil, 82, 90, 239, 238, nil, - nil, nil, nil, 62, nil, 83, 95, 96, 291, 74, - 75, 71, 9, 57, nil, nil, nil, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, 669, 19, 666, 665, 664, nil, - 667, 8, 45, 293, 10, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, 240, -598, -598, -598, -598, 246, 248, - nil, 802, -598, -598, nil, nil, nil, nil, nil, 254, - 255, nil, 40, nil, nil, 33, nil, nil, 58, 59, - nil, nil, 60, nil, 35, 237, nil, 243, 44, 239, - 238, nil, 235, 236, 247, 245, 241, 20, 242, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, 669, nil, - 666, 665, 664, 62, 667, 83, 95, 96, 291, 74, - 75, 71, 9, 57, nil, nil, nil, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, 802, 29, 28, 27, 103, - 102, 104, 105, nil, 669, 19, 666, 665, 664, nil, - 667, 8, 45, 293, 10, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, 240, 669, nil, 666, 665, 664, nil, - 667, 802, 669, nil, 666, 665, 664, nil, 667, 254, - 255, nil, 40, nil, nil, 33, nil, nil, 58, 59, - nil, nil, 60, nil, 35, 237, nil, 243, 44, 239, - 238, 802, 235, 236, nil, nil, 241, 20, 242, 802, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - nil, nil, nil, 62, nil, 83, 95, 96, 291, 74, - 75, 71, 9, 57, nil, nil, nil, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 19, nil, nil, nil, nil, - nil, 8, 45, 293, 10, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, 240, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 254, - 255, nil, 40, nil, nil, 33, nil, nil, 58, 59, - nil, nil, 60, nil, 35, 237, nil, 243, 44, 239, - 238, nil, 235, 236, nil, nil, 241, 20, 242, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - nil, nil, nil, 62, nil, 83, 95, 96, 291, 74, - 75, 71, 9, 57, nil, nil, nil, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 19, nil, nil, nil, nil, - nil, 8, 45, 293, 10, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, 240, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 254, - 255, nil, 40, nil, nil, 33, nil, nil, 58, 59, - nil, nil, 60, nil, 35, 237, nil, 243, 44, 239, - 238, nil, 235, 236, nil, nil, 241, 20, 242, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - nil, nil, nil, 62, nil, 83, 95, 96, 291, 74, - 75, 71, 9, 57, nil, nil, nil, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 19, nil, nil, nil, nil, - nil, 8, 45, 293, 10, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, 240, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 254, - 255, nil, 40, nil, nil, 33, nil, nil, 58, 59, - nil, nil, 60, nil, 35, 237, nil, 243, 44, 239, - 238, nil, 235, 236, nil, nil, 241, 20, 242, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - nil, nil, nil, 62, nil, 83, 95, 96, 291, 74, - 75, 71, 9, 57, nil, nil, nil, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 19, nil, nil, nil, nil, - nil, 8, 45, 293, 10, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, 240, -598, -598, -598, -598, 246, 248, - nil, nil, -598, -598, nil, nil, nil, nil, nil, 254, - 255, nil, 40, nil, nil, 33, nil, nil, 58, 59, - nil, nil, 60, nil, 35, 237, nil, 243, 44, 239, - 238, nil, 235, 236, 247, 245, 241, 20, 242, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - nil, nil, nil, 62, nil, 83, 95, 96, 291, 74, - 75, 71, 9, 57, nil, nil, nil, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 19, nil, nil, nil, nil, - nil, 8, 45, 293, 10, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, 240, -598, -598, -598, -598, 246, 248, - nil, nil, -598, -598, nil, nil, nil, nil, nil, 254, - 255, nil, 40, nil, nil, 33, nil, nil, 58, 59, - nil, nil, 60, nil, 35, 237, nil, 243, 44, 239, - 238, nil, 235, 236, 247, 245, 241, 20, 242, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - nil, nil, nil, 62, nil, 83, 95, 96, 291, 74, - 75, 71, 9, 57, nil, nil, nil, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 19, nil, nil, nil, nil, - nil, 8, 45, 293, 10, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, 240, -598, -598, -598, -598, 246, 248, - nil, nil, -598, -598, nil, nil, nil, nil, nil, 254, - 255, nil, 40, nil, nil, 33, nil, nil, 58, 59, - nil, nil, 60, nil, 35, 237, nil, 243, 44, 239, - 238, nil, 235, 236, 247, 245, 241, 20, 242, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - nil, nil, nil, 62, nil, 83, 95, 96, 291, 74, - 75, 71, 9, 57, nil, nil, nil, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 19, nil, nil, nil, nil, - nil, 8, 45, 293, 10, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, 240, -598, -598, -598, -598, 246, 248, - nil, nil, -598, -598, nil, nil, nil, nil, nil, 254, - 255, nil, 40, nil, nil, 33, nil, nil, 58, 59, - nil, nil, 60, nil, 35, 237, nil, 243, 44, 239, - 238, nil, 235, 236, 247, 245, 241, 20, 242, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - nil, nil, nil, 62, nil, 83, 95, 96, 291, 74, - 75, 71, 9, 57, nil, nil, nil, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 19, nil, nil, nil, nil, - nil, 8, 45, 293, 10, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, 240, -598, -598, -598, -598, 246, 248, - nil, nil, -598, -598, nil, nil, nil, nil, nil, 254, - 255, nil, 40, nil, nil, 33, nil, nil, 58, 59, - nil, nil, 60, nil, 35, 237, nil, 243, 44, 239, - 238, nil, 235, 236, 247, 245, 241, 20, 242, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - nil, nil, nil, 62, nil, 83, 95, 96, 291, 74, - 75, 71, 9, 57, nil, nil, nil, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 19, nil, nil, nil, nil, - nil, 8, 45, 293, 10, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, 240, 244, 249, 250, 251, 246, 248, - nil, nil, 252, 253, nil, nil, nil, nil, nil, 254, - 255, nil, 40, nil, nil, 33, nil, nil, 58, 59, - nil, nil, 60, nil, 35, 237, nil, 243, 44, 239, - 238, nil, 235, 236, 247, 245, 241, 20, 242, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - nil, nil, nil, 62, nil, 83, 95, 96, 74, 75, - 71, 9, 57, nil, nil, nil, 63, 64, nil, nil, - nil, 67, nil, 65, 66, 68, 30, 31, 72, 73, - nil, nil, nil, nil, nil, 29, 28, 27, 103, 102, - 104, 105, nil, nil, 19, nil, nil, nil, nil, nil, - 8, 45, 7, 10, 107, 106, 108, 97, 56, 99, - 98, 100, nil, 101, 109, 110, nil, 93, 94, 42, - 43, 41, 240, 244, 249, 250, 251, 246, 248, 256, - nil, 252, 253, nil, nil, nil, nil, nil, 254, 255, - nil, 40, nil, nil, 33, nil, nil, 58, 59, nil, - nil, 60, nil, 35, 237, nil, 243, 44, 239, 238, - nil, 235, 236, 247, 245, 241, 20, 242, nil, nil, - nil, 91, 81, 84, 85, nil, 86, 88, 87, 89, - nil, nil, nil, nil, 82, 90, nil, nil, nil, 74, - 75, 71, 62, 57, 83, 95, 96, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 232, nil, nil, nil, nil, - nil, nil, 45, nil, nil, 107, 106, 108, 97, 56, - 99, 98, 100, 285, 101, 109, 110, nil, 93, 94, - 42, 43, 41, 240, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 254, - 255, nil, 225, nil, nil, 231, nil, nil, 58, 59, - nil, nil, 60, nil, 283, 237, 281, 243, 44, 239, - 238, 286, 235, 236, nil, nil, nil, 230, nil, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - 74, 75, 71, 62, 57, 83, 95, 96, 63, 64, - nil, nil, nil, 67, nil, 65, 66, 68, 30, 31, - 72, 73, nil, nil, nil, nil, nil, 29, 28, 27, - 103, 102, 104, 105, nil, nil, 232, nil, nil, nil, - nil, nil, nil, 45, nil, nil, 107, 106, 108, 97, - 56, 99, 98, 100, 285, 101, 109, 110, nil, 93, - 94, 42, 43, 41, 240, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 254, 255, nil, 225, nil, nil, 231, nil, nil, 58, - 59, nil, nil, 60, nil, 283, 237, 281, 243, 44, - 239, 238, 286, 235, 236, nil, nil, nil, 230, nil, - nil, nil, nil, 91, 81, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, nil, nil, - nil, 74, 75, 71, 62, 57, 83, 95, 96, 63, - 64, nil, nil, nil, 67, nil, 65, 66, 68, 30, - 31, 72, 73, nil, nil, nil, nil, nil, 29, 28, - 27, 103, 102, 104, 105, nil, nil, 232, nil, nil, - nil, nil, nil, nil, 45, nil, nil, 107, 106, 108, - 97, 56, 99, 98, 100, 285, 101, 109, 110, nil, - 93, 94, 42, 43, 41, 240, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 254, 255, nil, 225, nil, nil, 231, nil, nil, - 58, 59, nil, nil, 60, nil, 283, 237, 281, nil, - 44, 239, 238, 286, 235, 236, nil, nil, nil, 230, - nil, nil, nil, nil, 91, 81, 84, 85, nil, 86, - 88, 87, 89, nil, nil, nil, nil, 82, 90, nil, - nil, nil, 74, 75, 71, 62, 57, 83, 95, 96, - 63, 64, nil, nil, nil, 67, nil, 65, 66, 68, - 310, 311, 72, 73, nil, nil, nil, nil, nil, 306, - 307, 313, 103, 102, 104, 105, nil, nil, 232, nil, - nil, nil, nil, nil, nil, 308, nil, nil, 107, 106, - 108, 97, 56, 99, 98, 100, nil, 101, 109, 110, - nil, 93, 94, nil, nil, 314, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 304, nil, nil, 300, nil, - nil, 58, 59, nil, nil, 60, nil, 299, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 91, 81, 84, 85, nil, - 86, 88, 87, 89, nil, nil, nil, nil, 82, 90, - nil, nil, nil, 74, 75, 71, 62, 57, 83, 95, - 96, 63, 64, nil, nil, nil, 67, nil, 65, 66, - 68, 310, 311, 72, 73, nil, nil, nil, nil, nil, - 306, 307, 313, 103, 102, 104, 105, nil, nil, 232, - nil, nil, nil, nil, nil, nil, 308, nil, nil, 107, - 106, 108, 97, 56, 99, 98, 100, nil, 101, 109, - 110, nil, 93, 94, nil, nil, 314, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 304, nil, nil, 231, - nil, nil, 58, 59, nil, nil, 60, nil, nil, 669, - nil, 666, 665, 664, 673, 667, nil, nil, nil, nil, - nil, nil, nil, nil, 676, nil, 91, 81, 84, 85, - nil, 86, 88, 87, 89, nil, nil, nil, nil, 82, - 90, nil, nil, nil, 316, nil, 671, 62, nil, 83, - 95, 96, 74, 75, 71, nil, 57, 684, 683, nil, - 63, 64, 677, nil, nil, 67, nil, 65, 66, 68, - 310, 311, 72, 73, nil, nil, nil, nil, nil, 306, - 307, 313, 103, 102, 104, 105, nil, nil, 232, nil, - nil, nil, nil, nil, nil, 45, nil, nil, 107, 106, - 108, 97, 56, 99, 98, 100, nil, 101, 109, 110, - nil, 93, 94, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 225, nil, nil, 231, nil, - nil, 58, 59, nil, nil, 60, nil, nil, nil, nil, - nil, 44, nil, nil, nil, nil, nil, nil, nil, nil, - 230, nil, nil, nil, nil, 91, 81, 84, 85, nil, - 86, 88, 87, 89, nil, nil, nil, nil, 82, 90, - nil, nil, nil, 74, 75, 71, 62, 57, 83, 95, - 96, 63, 64, nil, nil, nil, 67, nil, 65, 66, - 68, 310, 311, 72, 73, nil, nil, nil, nil, nil, - 306, 307, 313, 103, 102, 104, 105, nil, nil, 232, - nil, nil, nil, nil, nil, nil, 45, nil, nil, 107, - 106, 108, 97, 56, 99, 98, 100, nil, 101, 109, - 110, nil, 93, 94, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 225, nil, nil, 231, - nil, nil, 58, 59, nil, nil, 60, nil, nil, nil, - nil, nil, 44, nil, nil, nil, nil, nil, nil, nil, - nil, 230, nil, nil, nil, nil, 91, 81, 84, 85, - nil, 86, 88, 87, 89, nil, nil, nil, nil, 82, - 90, nil, nil, nil, 74, 75, 71, 62, 57, 83, - 95, 96, 63, 64, nil, nil, nil, 67, nil, 65, - 66, 68, 310, 311, 72, 73, nil, nil, nil, nil, - nil, 306, 307, 313, 103, 102, 104, 105, nil, nil, - 232, nil, nil, nil, nil, nil, nil, 45, nil, nil, - 107, 106, 108, 97, 56, 99, 98, 100, nil, 101, - 109, 110, nil, 93, 94, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 225, nil, nil, - 231, nil, nil, 58, 59, nil, nil, 60, nil, nil, - nil, nil, nil, 44, nil, nil, nil, nil, nil, nil, - nil, nil, 230, nil, nil, nil, nil, 91, 81, 84, - 85, nil, 86, 88, 87, 89, nil, nil, nil, nil, - 82, 90, nil, nil, nil, 74, 75, 71, 62, 57, - 83, 95, 96, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 310, 311, 72, 73, nil, nil, nil, - nil, nil, 306, 307, 313, 103, 102, 104, 105, nil, - nil, 232, nil, nil, nil, nil, nil, nil, 45, nil, - nil, 107, 106, 108, 97, 56, 99, 98, 100, 285, - 101, 109, 110, nil, 93, 94, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 225, nil, - nil, 231, nil, nil, 58, 59, nil, nil, 60, nil, - 283, nil, nil, nil, 44, nil, nil, 286, nil, nil, - nil, nil, nil, 230, nil, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, 74, 75, 71, 62, - 57, 83, 95, 96, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 310, 311, 72, 73, nil, nil, - nil, nil, nil, 306, 307, 313, 103, 102, 104, 105, - nil, nil, 232, nil, nil, nil, nil, nil, nil, 45, - nil, nil, 107, 106, 108, 97, 56, 99, 98, 100, - 285, 101, 109, 110, nil, 93, 94, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 225, - nil, nil, 231, nil, nil, 58, 59, nil, nil, 60, - nil, nil, nil, nil, nil, 44, nil, nil, 286, nil, - nil, nil, nil, nil, 230, nil, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, nil, nil, 74, 75, 71, - 62, 57, 83, 95, 96, 63, 64, nil, nil, nil, - 67, nil, 65, 66, 68, 30, 31, 72, 73, nil, - nil, nil, nil, nil, 29, 28, 27, 103, 102, 104, - 105, nil, nil, 19, nil, nil, nil, nil, nil, nil, - 45, nil, nil, 107, 106, 108, 97, 56, 99, 98, - 100, nil, 101, 109, 110, nil, 93, 94, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 225, nil, nil, 231, nil, nil, 58, 59, nil, nil, - 60, nil, nil, nil, nil, nil, 44, nil, nil, nil, - nil, nil, nil, nil, nil, 20, nil, nil, nil, nil, - 91, 81, 84, 85, nil, 86, 88, 87, 89, nil, - nil, nil, nil, 82, 90, nil, nil, nil, 74, 75, - 71, 62, 57, 83, 95, 96, 63, 64, nil, nil, - nil, 67, nil, 65, 66, 68, 30, 31, 72, 73, - nil, nil, nil, nil, nil, 29, 28, 27, 103, 102, - 104, 105, nil, nil, 19, nil, nil, nil, nil, nil, - nil, 45, nil, nil, 107, 106, 108, 97, 56, 99, - 98, 100, nil, 101, 109, 110, nil, 93, 94, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 225, nil, nil, 231, nil, nil, 58, 59, nil, - nil, 60, nil, nil, nil, nil, nil, 44, nil, nil, - nil, nil, nil, nil, nil, nil, 20, nil, nil, nil, - nil, 91, 81, 84, 85, nil, 86, 88, 87, 89, - nil, nil, nil, nil, 82, 90, nil, nil, nil, 74, - 75, 71, 62, 57, 83, 95, 96, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 19, nil, nil, nil, nil, - nil, nil, 45, nil, nil, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 225, nil, nil, 231, nil, nil, 58, 59, - nil, nil, 60, nil, nil, nil, nil, nil, 44, nil, - nil, nil, nil, nil, nil, nil, nil, 20, nil, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, 115, nil, nil, - nil, nil, 114, 62, nil, 83, 95, 96, 74, 75, - 71, nil, 57, nil, nil, nil, 63, 64, nil, nil, - nil, 67, nil, 65, 66, 68, 310, 311, 72, 73, - nil, nil, nil, nil, nil, 306, 307, 313, 103, 102, - 104, 105, nil, nil, 232, nil, nil, nil, nil, nil, - nil, 308, nil, nil, 107, 106, 108, 97, 56, 99, - 98, 100, nil, 101, 109, 110, nil, 93, 94, nil, - nil, 314, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 348, nil, nil, 33, nil, nil, 58, 59, nil, - nil, 60, nil, 35, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 91, 81, 84, 85, nil, 86, 88, 87, 89, - nil, nil, nil, nil, 82, 90, nil, nil, nil, 74, - 75, 71, 62, 57, 83, 95, 96, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 310, 311, 72, - 73, nil, nil, nil, nil, nil, 306, 307, 313, 103, - 102, 104, 105, nil, nil, 232, nil, nil, nil, nil, - nil, nil, 308, nil, nil, 107, 106, 108, 353, 56, - 99, 98, 354, nil, 101, 109, 110, nil, 93, 94, - nil, nil, 314, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 360, - nil, nil, 355, nil, nil, 231, nil, nil, 58, 59, - nil, nil, 60, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - 74, 75, 71, 62, 57, 83, 95, 96, 63, 64, - nil, nil, nil, 67, nil, 65, 66, 68, 310, 311, - 72, 73, nil, nil, nil, nil, nil, 306, 307, 313, - 103, 102, 104, 105, nil, nil, 232, nil, nil, nil, - nil, nil, nil, 308, nil, nil, 107, 106, 108, 353, - 56, 99, 98, 354, nil, 101, 109, 110, nil, 93, - 94, nil, nil, 314, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 355, nil, nil, 231, nil, nil, 58, - 59, nil, nil, 60, nil, nil, 669, nil, 666, 665, - 664, 673, 667, nil, nil, nil, nil, nil, nil, nil, - nil, 676, nil, 91, 81, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, nil, nil, - nil, nil, nil, 671, 62, nil, 83, 95, 96, 74, - 75, 71, 9, 57, 684, 683, nil, 63, 64, 677, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 19, nil, nil, nil, nil, - nil, 8, 45, 7, 10, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 40, nil, nil, 33, nil, nil, 58, 59, - nil, nil, 60, nil, 35, nil, nil, nil, 44, nil, - nil, nil, nil, nil, nil, nil, nil, 20, nil, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - nil, nil, 388, 62, nil, 83, 95, 96, 74, 75, - 71, nil, 57, nil, nil, nil, 63, 64, nil, nil, - nil, 67, nil, 65, 66, 68, 30, 31, 72, 73, - nil, nil, nil, nil, nil, 29, 28, 27, 103, 102, - 104, 105, nil, nil, 19, nil, nil, nil, nil, nil, - nil, 45, nil, nil, 107, 106, 108, 97, 56, 99, - 98, 100, nil, 101, 109, 110, nil, 93, 94, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 225, nil, nil, 231, nil, nil, 58, 59, nil, - nil, 60, nil, nil, nil, nil, nil, 44, nil, nil, - nil, nil, nil, nil, nil, nil, 20, nil, nil, nil, - nil, 91, 81, 84, 85, nil, 86, 88, 87, 89, - nil, nil, nil, nil, 82, 90, nil, nil, nil, 74, - 75, 71, 62, 57, 83, 95, 96, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 19, nil, nil, nil, nil, - nil, nil, 45, nil, nil, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 225, nil, nil, 231, nil, nil, 58, 59, - nil, nil, 60, nil, nil, nil, nil, nil, 44, nil, - nil, nil, nil, nil, nil, nil, nil, 20, nil, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - 74, 75, 71, 62, 57, 83, 95, 96, 63, 64, - nil, nil, nil, 67, nil, 65, 66, 68, 30, 31, - 72, 73, nil, nil, nil, nil, nil, 29, 28, 27, - 103, 102, 104, 105, nil, nil, 19, nil, nil, nil, - nil, nil, nil, 45, nil, nil, 107, 106, 108, 97, - 56, 99, 98, 100, nil, 101, 109, 110, nil, 93, - 94, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 225, nil, nil, 231, nil, nil, 58, - 59, nil, nil, 60, nil, nil, nil, nil, nil, 44, - nil, nil, nil, nil, nil, nil, nil, nil, 20, nil, - nil, nil, nil, 91, 81, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, nil, nil, - nil, 74, 75, 71, 62, 57, 83, 95, 96, 63, - 64, nil, nil, nil, 67, nil, 65, 66, 68, 30, - 31, 72, 73, nil, nil, nil, nil, nil, 29, 28, - 27, 103, 102, 104, 105, nil, nil, 19, nil, nil, - nil, nil, nil, nil, 45, nil, nil, 107, 106, 108, - 97, 56, 99, 98, 100, nil, 101, 109, 110, nil, - 93, 94, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 225, nil, nil, 231, nil, nil, - 58, 59, nil, nil, 60, nil, nil, nil, nil, nil, - 44, nil, nil, nil, nil, nil, nil, nil, nil, 20, - nil, nil, nil, nil, 91, 81, 84, 85, nil, 86, - 88, 87, 89, nil, nil, nil, nil, 82, 90, nil, - nil, nil, nil, nil, nil, 62, nil, 83, 95, 96, - 74, 75, 71, 9, 57, nil, nil, nil, 63, 64, - nil, nil, nil, 67, nil, 65, 66, 68, 30, 31, - 72, 73, nil, nil, nil, nil, nil, 29, 28, 27, - 103, 102, 104, 105, nil, nil, 19, nil, nil, nil, - nil, nil, 8, 45, nil, 10, 107, 106, 108, 97, - 56, 99, 98, 100, nil, 101, 109, 110, nil, 93, - 94, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 40, nil, nil, 33, nil, nil, 58, - 59, nil, nil, 60, nil, 35, nil, nil, nil, 44, - nil, nil, nil, nil, nil, nil, nil, nil, 20, nil, - nil, nil, nil, 91, 81, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, nil, nil, - nil, 74, 75, 71, 62, 57, 83, 95, 96, 63, - 64, nil, nil, nil, 67, nil, 65, 66, 68, 30, - 31, 72, 73, nil, nil, nil, nil, nil, 29, 28, - 27, 103, 102, 104, 105, nil, nil, 232, nil, nil, - nil, nil, nil, nil, 45, nil, nil, 107, 106, 108, - 97, 56, 99, 98, 100, nil, 101, 109, 110, nil, - 93, 94, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 225, nil, nil, 231, nil, nil, - 58, 59, nil, nil, 60, nil, 404, nil, nil, nil, - 44, nil, nil, nil, nil, nil, nil, nil, nil, 230, - nil, nil, nil, nil, 91, 81, 84, 85, nil, 86, - 88, 87, 89, nil, nil, nil, nil, 82, 90, nil, - nil, nil, 74, 75, 71, 62, 57, 83, 95, 96, - 63, 64, nil, nil, nil, 67, nil, 65, 66, 68, - 30, 31, 72, 73, nil, nil, nil, nil, nil, 29, - 28, 27, 103, 102, 104, 105, nil, nil, 232, nil, - nil, nil, nil, nil, nil, 45, nil, nil, 107, 106, - 108, 97, 56, 99, 98, 100, nil, 101, 109, 110, - nil, 93, 94, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 225, nil, nil, 231, nil, - nil, 58, 59, nil, nil, 60, nil, nil, nil, nil, - nil, 44, nil, nil, nil, nil, nil, nil, nil, nil, - 230, nil, nil, nil, nil, 91, 81, 84, 85, nil, - 86, 88, 87, 89, nil, nil, nil, nil, 82, 90, - nil, nil, nil, 74, 75, 71, 62, 57, 83, 95, - 96, 63, 64, nil, nil, nil, 67, nil, 65, 66, - 68, 30, 31, 72, 73, nil, nil, nil, nil, nil, - 29, 28, 27, 103, 102, 104, 105, nil, nil, 232, - nil, nil, nil, nil, nil, nil, 45, nil, nil, 107, - 106, 108, 97, 56, 99, 98, 100, 285, 101, 109, - 110, nil, 93, 94, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 225, nil, nil, 231, - nil, nil, 58, 59, nil, nil, 60, nil, 283, nil, - 281, nil, 44, nil, nil, 286, nil, nil, nil, nil, - nil, 230, nil, nil, nil, nil, 91, 81, 84, 85, - nil, 86, 88, 87, 89, nil, nil, nil, nil, 82, - 90, nil, nil, nil, 74, 75, 71, 62, 57, 83, - 95, 96, 63, 64, nil, nil, nil, 67, nil, 65, - 66, 68, 30, 31, 72, 73, nil, nil, nil, nil, - nil, 29, 28, 27, 103, 102, 104, 105, nil, nil, - 232, nil, nil, nil, nil, nil, nil, 45, nil, nil, - 107, 106, 108, 97, 56, 99, 98, 100, nil, 101, - 109, 110, nil, 93, 94, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 225, nil, nil, - 231, nil, nil, 58, 59, nil, nil, 60, nil, nil, - nil, nil, nil, 44, nil, nil, nil, nil, nil, nil, - nil, nil, 230, nil, nil, nil, nil, 91, 81, 84, - 85, nil, 86, 88, 87, 89, nil, nil, nil, nil, - 82, 90, nil, nil, nil, 74, 75, 71, 62, 57, - 83, 95, 96, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 30, 31, 72, 73, nil, nil, nil, - nil, nil, 29, 28, 27, 103, 102, 104, 105, nil, - nil, 232, nil, nil, nil, nil, nil, nil, 45, nil, - nil, 107, 106, 108, 97, 56, 99, 98, 100, nil, - 101, 109, 110, nil, 93, 94, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 225, nil, - nil, 231, nil, nil, 58, 59, nil, nil, 60, nil, - 404, nil, nil, nil, 44, nil, nil, nil, nil, nil, - nil, nil, nil, 230, nil, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, 74, 75, 71, 62, - 57, 83, 95, 96, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 30, 31, 72, 73, nil, nil, - nil, nil, nil, 29, 28, 27, 103, 102, 104, 105, - nil, nil, 19, nil, nil, nil, nil, nil, nil, 45, - nil, nil, 107, 106, 108, 97, 56, 99, 98, 100, - nil, 101, 109, 110, nil, 93, 94, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 225, - nil, nil, 231, nil, nil, 58, 59, nil, nil, 60, - nil, nil, nil, nil, nil, 44, nil, nil, nil, nil, - nil, nil, nil, nil, 20, nil, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, nil, nil, 74, 75, 71, - 62, 57, 83, 95, 96, 63, 64, nil, nil, nil, - 67, nil, 65, 66, 68, 30, 31, 72, 73, nil, - nil, nil, nil, nil, 29, 28, 27, 103, 102, 104, - 105, nil, nil, 19, nil, nil, nil, nil, nil, nil, - 45, nil, nil, 107, 106, 108, 97, 56, 99, 98, - 100, nil, 101, 109, 110, nil, 93, 94, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 225, nil, nil, 231, nil, nil, 58, 59, nil, nil, - 60, nil, nil, nil, nil, nil, 44, nil, nil, nil, - nil, nil, nil, nil, nil, 20, nil, nil, nil, nil, - 91, 81, 84, 85, nil, 86, 88, 87, 89, nil, - nil, nil, nil, 82, 90, nil, nil, nil, 74, 75, - 71, 62, 57, 83, 95, 96, 63, 64, nil, nil, - nil, 67, nil, 65, 66, 68, 30, 31, 72, 73, - nil, nil, nil, nil, nil, 29, 28, 27, 103, 102, - 104, 105, nil, nil, 19, nil, nil, nil, nil, nil, - nil, 45, nil, nil, 107, 106, 108, 97, 56, 99, - 98, 100, nil, 101, 109, 110, nil, 93, 94, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 225, nil, nil, 231, nil, nil, 58, 59, nil, - nil, 60, nil, nil, nil, nil, nil, 44, nil, nil, - nil, nil, nil, nil, nil, nil, 20, nil, nil, nil, - nil, 91, 81, 84, 85, nil, 86, 88, 87, 89, - nil, nil, nil, nil, 82, 90, nil, nil, nil, 74, - 75, 71, 62, 57, 83, 95, 96, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 19, nil, nil, nil, nil, - nil, nil, 45, nil, nil, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 225, nil, nil, 231, nil, nil, 58, 59, - nil, nil, 60, nil, nil, nil, nil, nil, 44, nil, - nil, nil, nil, nil, nil, nil, nil, 20, nil, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, 220, nil, nil, - 74, 75, 71, 62, 57, 83, 95, 96, 63, 64, - nil, nil, nil, 67, nil, 65, 66, 68, 310, 311, - 72, 73, nil, nil, nil, nil, nil, 306, 307, 313, - 103, 102, 104, 105, nil, nil, 232, nil, nil, nil, - nil, nil, nil, 45, nil, nil, 107, 106, 108, 97, - 56, 99, 98, 100, nil, 101, 109, 110, nil, 93, - 94, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 225, nil, nil, 231, nil, nil, 58, - 59, nil, nil, 60, nil, nil, nil, nil, nil, 44, - nil, nil, nil, nil, nil, nil, nil, nil, 230, nil, - nil, nil, nil, 91, 81, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, nil, nil, - nil, 74, 75, 71, 62, 57, 83, 95, 96, 63, - 64, nil, nil, nil, 67, nil, 65, 66, 68, 310, - 311, 72, 73, nil, nil, nil, nil, nil, 306, 307, - 313, 103, 102, 104, 105, nil, nil, 232, nil, nil, - nil, nil, nil, nil, 45, nil, nil, 107, 106, 108, - 97, 56, 99, 98, 100, nil, 101, 109, 110, nil, - 93, 94, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 225, nil, nil, 231, nil, nil, - 58, 59, nil, nil, 60, nil, nil, nil, nil, nil, - 44, nil, nil, nil, nil, nil, nil, nil, nil, 230, - nil, nil, nil, nil, 91, 81, 84, 85, nil, 86, - 88, 87, 89, nil, nil, nil, nil, 82, 90, nil, - nil, nil, 74, 75, 71, 62, 57, 83, 95, 96, - 63, 64, nil, nil, nil, 67, nil, 65, 66, 68, - 310, 311, 72, 73, nil, nil, nil, nil, nil, 306, - 307, 313, 103, 102, 104, 105, nil, nil, 232, nil, - nil, nil, nil, nil, nil, 45, nil, nil, 107, 106, - 108, 97, 56, 99, 98, 100, nil, 101, 109, 110, - nil, 93, 94, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 225, nil, nil, 231, nil, - nil, 58, 59, nil, nil, 60, nil, nil, nil, nil, - nil, 44, nil, nil, nil, nil, nil, nil, nil, nil, - 230, nil, nil, nil, nil, 91, 81, 84, 85, nil, - 86, 88, 87, 89, nil, nil, nil, nil, 82, 90, - nil, nil, nil, 74, 75, 71, 62, 57, 83, 95, - 96, 63, 64, nil, nil, nil, 67, nil, 65, 66, - 68, 310, 311, 72, 73, nil, nil, nil, nil, nil, - 306, 307, 313, 103, 102, 104, 105, nil, nil, 232, - nil, nil, nil, nil, nil, nil, 45, nil, nil, 107, - 106, 108, 97, 56, 99, 98, 100, nil, 101, 109, - 110, nil, 93, 94, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 225, nil, nil, 231, - nil, nil, 58, 59, nil, nil, 60, nil, nil, nil, - nil, nil, 44, nil, nil, nil, nil, nil, nil, nil, - nil, 230, nil, nil, nil, nil, 91, 81, 84, 85, - nil, 86, 88, 87, 89, nil, nil, nil, nil, 82, - 90, nil, nil, nil, 74, 75, 71, 62, 57, 83, - 95, 96, 63, 64, nil, nil, nil, 67, nil, 65, - 66, 68, 310, 311, 72, 73, nil, nil, nil, nil, - nil, 306, 307, 313, 103, 102, 104, 105, nil, nil, - 232, nil, nil, nil, nil, nil, nil, 45, nil, nil, - 107, 106, 108, 97, 56, 99, 98, 100, nil, 101, - 109, 110, nil, 93, 94, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 225, nil, nil, - 231, nil, nil, 58, 59, nil, nil, 60, nil, nil, - nil, nil, nil, 44, nil, nil, nil, nil, nil, nil, - nil, nil, 230, nil, nil, nil, nil, 91, 81, 84, - 85, nil, 86, 88, 87, 89, nil, nil, nil, nil, - 82, 90, nil, nil, nil, 74, 75, 71, 62, 57, - 83, 95, 96, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 310, 311, 72, 73, nil, nil, nil, - nil, nil, 306, 307, 313, 103, 102, 104, 105, nil, - nil, 232, nil, nil, nil, nil, nil, nil, 45, nil, - nil, 107, 106, 108, 97, 56, 99, 98, 100, nil, - 101, 109, 110, nil, 93, 94, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 225, nil, - nil, 231, nil, nil, 58, 59, nil, nil, 60, nil, - nil, nil, nil, nil, 44, nil, nil, nil, nil, nil, - nil, nil, nil, 230, nil, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, 74, 75, 71, 62, - 57, 83, 95, 96, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 310, 311, 72, 73, nil, nil, - nil, nil, nil, 306, 307, 313, 103, 102, 104, 105, - nil, nil, 232, nil, nil, nil, nil, nil, nil, 45, - nil, nil, 107, 106, 108, 97, 56, 99, 98, 100, - nil, 101, 109, 110, nil, 93, 94, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 225, - nil, nil, 231, nil, nil, 58, 59, nil, nil, 60, - nil, nil, nil, nil, nil, 44, nil, nil, nil, nil, - nil, nil, nil, nil, 230, nil, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, nil, nil, 74, 75, 71, - 62, 57, 83, 95, 96, 63, 64, nil, nil, nil, - 67, nil, 65, 66, 68, 310, 311, 72, 73, nil, - nil, nil, nil, nil, 306, 307, 313, 103, 102, 104, - 105, nil, nil, 232, nil, nil, nil, nil, nil, nil, - 45, nil, nil, 107, 106, 108, 97, 56, 99, 98, - 100, nil, 101, 109, 110, nil, 93, 94, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 225, nil, nil, 231, nil, nil, 58, 59, nil, nil, - 60, nil, nil, nil, nil, nil, 44, nil, nil, nil, - nil, nil, nil, nil, nil, 230, nil, nil, nil, nil, - 91, 81, 84, 85, nil, 86, 88, 87, 89, nil, - nil, nil, nil, 82, 90, nil, nil, nil, 74, 75, - 71, 62, 57, 83, 95, 96, 63, 64, nil, nil, - nil, 67, nil, 65, 66, 68, 310, 311, 72, 73, - nil, nil, nil, nil, nil, 306, 307, 313, 103, 102, - 104, 105, nil, nil, 232, nil, nil, nil, nil, nil, - nil, 45, nil, nil, 107, 106, 108, 97, 56, 99, - 98, 100, nil, 101, 109, 110, nil, 93, 94, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 225, nil, nil, 231, nil, nil, 58, 59, nil, - nil, 60, nil, nil, nil, nil, nil, 44, nil, nil, - nil, nil, nil, nil, nil, nil, 230, nil, nil, nil, - nil, 91, 81, 84, 85, nil, 86, 88, 87, 89, - nil, nil, nil, nil, 82, 90, nil, nil, nil, 74, - 75, 71, 62, 57, 83, 95, 96, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 310, 311, 72, - 73, nil, nil, nil, nil, nil, 306, 307, 313, 103, - 102, 104, 105, nil, nil, 232, nil, nil, nil, nil, - nil, nil, 45, nil, nil, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 225, nil, nil, 231, nil, nil, 58, 59, - nil, nil, 60, nil, nil, nil, nil, nil, 44, nil, - nil, nil, nil, nil, nil, nil, nil, 230, nil, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - 74, 75, 71, 62, 57, 83, 95, 96, 63, 64, - nil, nil, nil, 67, nil, 65, 66, 68, 310, 311, - 72, 73, nil, nil, nil, nil, nil, 306, 307, 313, - 103, 102, 104, 105, nil, nil, 232, nil, nil, nil, - nil, nil, nil, 45, nil, nil, 107, 106, 108, 97, - 56, 99, 98, 100, nil, 101, 109, 110, nil, 93, - 94, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 225, nil, nil, 231, nil, nil, 58, - 59, nil, nil, 60, nil, nil, nil, nil, nil, 44, - nil, nil, nil, nil, nil, nil, nil, nil, 230, nil, - nil, nil, nil, 91, 81, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, nil, nil, - nil, 74, 75, 71, 62, 57, 83, 95, 96, 63, - 64, nil, nil, nil, 67, nil, 65, 66, 68, 310, - 311, 72, 73, nil, nil, nil, nil, nil, 306, 307, - 313, 103, 102, 104, 105, nil, nil, 232, nil, nil, - nil, nil, nil, nil, 45, nil, nil, 107, 106, 108, - 97, 56, 99, 98, 100, nil, 101, 109, 110, nil, - 93, 94, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 225, nil, nil, 231, nil, nil, - 58, 59, nil, nil, 60, nil, nil, nil, nil, nil, - 44, nil, nil, nil, nil, nil, nil, nil, nil, 230, - nil, nil, nil, nil, 91, 81, 84, 85, nil, 86, - 88, 87, 89, nil, nil, nil, nil, 82, 90, nil, - nil, nil, 74, 75, 71, 62, 57, 83, 95, 96, - 63, 64, nil, nil, nil, 67, nil, 65, 66, 68, - 310, 311, 72, 73, nil, nil, nil, nil, nil, 306, - 307, 313, 103, 102, 104, 105, nil, nil, 232, nil, - nil, nil, nil, nil, nil, 45, nil, nil, 107, 106, - 108, 97, 56, 99, 98, 100, nil, 101, 109, 110, - nil, 93, 94, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 225, nil, nil, 231, nil, - nil, 58, 59, nil, nil, 60, nil, nil, nil, nil, - nil, 44, nil, nil, nil, nil, nil, nil, nil, nil, - 230, nil, nil, nil, nil, 91, 81, 84, 85, nil, - 86, 88, 87, 89, nil, nil, nil, nil, 82, 90, - nil, nil, nil, 74, 75, 71, 62, 57, 83, 95, - 96, 63, 64, nil, nil, nil, 67, nil, 65, 66, - 68, 310, 311, 72, 73, nil, nil, nil, nil, nil, - 306, 307, 313, 103, 102, 104, 105, nil, nil, 232, - nil, nil, nil, nil, nil, nil, 45, nil, nil, 107, - 106, 108, 97, 56, 99, 98, 100, nil, 101, 109, - 110, nil, 93, 94, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 225, nil, nil, 231, - nil, nil, 58, 59, nil, nil, 60, nil, nil, nil, - nil, nil, 44, nil, nil, nil, nil, nil, nil, nil, - nil, 230, nil, nil, nil, nil, 91, 81, 84, 85, - nil, 86, 88, 87, 89, nil, nil, nil, nil, 82, - 90, nil, nil, nil, 74, 75, 71, 62, 57, 83, - 95, 96, 63, 64, nil, nil, nil, 67, nil, 65, - 66, 68, 310, 311, 72, 73, nil, nil, nil, nil, - nil, 306, 307, 313, 103, 102, 104, 105, nil, nil, - 232, nil, nil, nil, nil, nil, nil, 45, nil, nil, - 107, 106, 108, 97, 56, 99, 98, 100, nil, 101, - 109, 110, nil, 93, 94, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 225, nil, nil, - 231, nil, nil, 58, 59, nil, nil, 60, nil, nil, - nil, nil, nil, 44, nil, nil, nil, nil, nil, nil, - nil, nil, 230, nil, nil, nil, nil, 91, 81, 84, - 85, nil, 86, 88, 87, 89, nil, nil, nil, nil, - 82, 90, nil, nil, nil, 74, 75, 71, 62, 57, - 83, 95, 96, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 310, 311, 72, 73, nil, nil, nil, - nil, nil, 306, 307, 313, 103, 102, 104, 105, nil, - nil, 232, nil, nil, nil, nil, nil, nil, 45, nil, - nil, 107, 106, 108, 97, 56, 99, 98, 100, nil, - 101, 109, 110, nil, 93, 94, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 225, nil, - nil, 231, nil, nil, 58, 59, nil, nil, 60, nil, - nil, nil, nil, nil, 44, nil, nil, nil, nil, nil, - nil, nil, nil, 230, nil, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, 74, 75, 71, 62, - 57, 83, 95, 96, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 310, 311, 72, 73, nil, nil, - nil, nil, nil, 306, 307, 313, 103, 102, 104, 105, - nil, nil, 232, nil, nil, nil, nil, nil, nil, 45, - nil, nil, 107, 106, 108, 97, 56, 99, 98, 100, - nil, 101, 109, 110, nil, 93, 94, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 225, - nil, nil, 231, nil, nil, 58, 59, nil, nil, 60, - nil, nil, nil, nil, nil, 44, nil, nil, nil, nil, - nil, nil, nil, nil, 230, nil, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, nil, nil, 74, 75, 71, - 62, 57, 83, 95, 96, 63, 64, nil, nil, nil, - 67, nil, 65, 66, 68, 310, 311, 72, 73, nil, - nil, nil, nil, nil, 306, 307, 313, 103, 102, 104, - 105, nil, nil, 232, nil, nil, nil, nil, nil, nil, - 45, nil, nil, 107, 106, 108, 97, 56, 99, 98, - 100, nil, 101, 109, 110, nil, 93, 94, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 225, nil, nil, 231, nil, nil, 58, 59, nil, nil, - 60, nil, nil, nil, nil, nil, 44, nil, nil, nil, - nil, nil, nil, nil, nil, 230, nil, nil, nil, nil, - 91, 81, 84, 85, nil, 86, 88, 87, 89, nil, - nil, nil, nil, 82, 90, nil, nil, nil, 74, 75, - 71, 62, 57, 83, 95, 96, 63, 64, nil, nil, - nil, 67, nil, 65, 66, 68, 310, 311, 72, 73, - nil, nil, nil, nil, nil, 306, 307, 313, 103, 102, - 104, 105, nil, nil, 232, nil, nil, nil, nil, nil, - nil, 45, nil, nil, 107, 106, 108, 97, 56, 99, - 98, 100, nil, 101, 109, 110, nil, 93, 94, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 225, nil, nil, 231, nil, nil, 58, 59, nil, - nil, 60, nil, nil, nil, nil, nil, 44, nil, nil, - nil, nil, nil, nil, nil, nil, 230, nil, nil, nil, - nil, 91, 81, 84, 85, nil, 86, 88, 87, 89, - nil, nil, nil, nil, 82, 90, nil, nil, nil, 74, - 75, 71, 62, 57, 83, 95, 96, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 310, 311, 72, - 73, nil, nil, nil, nil, nil, 306, 307, 313, 103, - 102, 104, 105, nil, nil, 232, nil, nil, nil, nil, - nil, nil, 45, nil, nil, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 225, nil, nil, 231, nil, nil, 58, 59, - nil, nil, 60, nil, nil, nil, nil, nil, 44, nil, - nil, nil, nil, nil, nil, nil, nil, 230, nil, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - 74, 75, 71, 62, 57, 83, 95, 96, 63, 64, - nil, nil, nil, 67, nil, 65, 66, 68, 310, 311, - 72, 73, nil, nil, nil, nil, nil, 306, 307, 313, - 103, 102, 104, 105, nil, nil, 232, nil, nil, nil, - nil, nil, nil, 45, nil, nil, 107, 106, 108, 97, - 56, 99, 98, 100, nil, 101, 109, 110, nil, 93, - 94, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 225, nil, nil, 231, nil, nil, 58, - 59, nil, nil, 60, nil, nil, nil, nil, nil, 44, - nil, nil, nil, nil, nil, nil, nil, nil, 230, nil, - nil, nil, nil, 91, 81, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, nil, nil, - nil, 74, 75, 71, 62, 57, 83, 95, 96, 63, - 64, nil, nil, nil, 67, nil, 65, 66, 68, 310, - 311, 72, 73, nil, nil, nil, nil, nil, 306, 307, - 313, 103, 102, 104, 105, nil, nil, 232, nil, nil, - nil, nil, nil, nil, 45, nil, nil, 107, 106, 108, - 97, 56, 99, 98, 100, nil, 101, 109, 110, nil, - 93, 94, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 225, nil, nil, 231, nil, nil, - 58, 59, nil, nil, 60, nil, nil, nil, nil, nil, - 44, nil, nil, nil, nil, nil, nil, nil, nil, 230, - nil, nil, nil, nil, 91, 81, 84, 85, nil, 86, - 88, 87, 89, nil, nil, nil, nil, 82, 90, nil, - nil, nil, 74, 75, 71, 62, 57, 83, 95, 96, - 63, 64, nil, nil, nil, 67, nil, 65, 66, 68, - 310, 311, 72, 73, nil, nil, nil, nil, nil, 306, - 307, 313, 103, 102, 104, 105, nil, nil, 232, nil, - nil, nil, nil, nil, nil, 45, nil, nil, 107, 106, - 108, 97, 56, 99, 98, 100, nil, 101, 109, 110, - nil, 93, 94, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 225, nil, nil, 231, nil, - nil, 58, 59, nil, nil, 60, nil, nil, nil, nil, - nil, 44, nil, nil, nil, nil, nil, nil, nil, nil, - 230, nil, nil, nil, nil, 91, 81, 84, 85, nil, - 86, 88, 87, 89, nil, nil, nil, nil, 82, 90, - nil, nil, nil, 74, 75, 71, 62, 57, 83, 95, - 96, 63, 64, nil, nil, nil, 67, nil, 65, 66, - 68, 310, 311, 72, 73, nil, nil, nil, nil, nil, - 306, 307, 313, 103, 102, 104, 105, nil, nil, 232, - nil, nil, nil, nil, nil, nil, 45, nil, nil, 107, - 106, 108, 97, 56, 99, 98, 100, nil, 101, 109, - 110, nil, 93, 94, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 225, nil, nil, 231, - nil, nil, 58, 59, nil, nil, 60, nil, nil, nil, - nil, nil, 44, nil, nil, nil, nil, nil, nil, nil, - nil, 230, nil, nil, nil, nil, 91, 81, 84, 85, - nil, 86, 88, 87, 89, nil, nil, nil, nil, 82, - 90, nil, nil, nil, 74, 75, 71, 62, 57, 83, - 95, 96, 63, 64, nil, nil, nil, 67, nil, 65, - 66, 68, 310, 311, 72, 73, nil, nil, nil, nil, - nil, 306, 307, 313, 103, 102, 104, 105, nil, nil, - 232, nil, nil, nil, nil, nil, nil, 45, nil, nil, - 107, 106, 108, 97, 56, 99, 98, 100, nil, 101, - 109, 110, nil, 93, 94, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 225, nil, nil, - 231, nil, nil, 58, 59, nil, nil, 60, nil, nil, - nil, nil, nil, 44, nil, nil, nil, nil, nil, nil, - nil, nil, 230, nil, nil, nil, nil, 91, 81, 84, - 85, nil, 86, 88, 87, 89, nil, nil, nil, nil, - 82, 90, nil, nil, nil, 74, 75, 71, 62, 57, - 83, 95, 96, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 310, 311, 72, 73, nil, nil, nil, - nil, nil, 306, 307, 313, 103, 102, 104, 105, nil, - nil, 232, nil, nil, nil, nil, nil, nil, 45, nil, - nil, 107, 106, 108, 97, 56, 99, 98, 100, nil, - 101, 109, 110, nil, 93, 94, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 225, nil, - nil, 231, nil, nil, 58, 59, nil, nil, 60, nil, - nil, nil, nil, nil, 44, nil, nil, nil, nil, nil, - nil, nil, nil, 230, nil, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, 74, 75, 71, 62, - 57, 83, 95, 96, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 310, 311, 72, 73, nil, nil, - nil, nil, nil, 306, 307, 313, 103, 102, 104, 105, - nil, nil, 232, nil, nil, nil, nil, nil, nil, 45, - nil, nil, 107, 106, 108, 97, 56, 99, 98, 100, - nil, 101, 109, 110, nil, 93, 94, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 225, - nil, nil, 231, nil, nil, 58, 59, nil, nil, 60, - nil, nil, nil, nil, nil, 44, nil, nil, nil, nil, - nil, nil, nil, nil, 230, nil, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, nil, nil, 74, 75, 71, - 62, 57, 83, 95, 96, 63, 64, nil, nil, nil, - 67, nil, 65, 66, 68, 30, 31, 72, 73, nil, - nil, nil, nil, nil, 29, 28, 27, 103, 102, 104, - 105, nil, nil, 232, nil, nil, nil, nil, nil, nil, - 45, nil, nil, 107, 106, 108, 97, 56, 99, 98, - 100, 285, 101, 109, 110, nil, 93, 94, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 225, nil, nil, 231, nil, nil, 58, 59, nil, nil, - 60, nil, 283, nil, 281, nil, 44, nil, nil, 286, - nil, nil, nil, nil, nil, 230, nil, nil, nil, nil, - 91, 81, 84, 85, nil, 86, 88, 87, 89, nil, - nil, nil, nil, 82, 90, nil, nil, nil, 74, 75, - 71, 62, 57, 83, 95, 96, 63, 64, nil, nil, - nil, 67, nil, 65, 66, 68, 30, 31, 72, 73, - nil, nil, nil, nil, nil, 29, 28, 27, 103, 102, - 104, 105, nil, nil, 232, nil, nil, nil, nil, nil, - nil, 45, nil, nil, 107, 106, 108, 97, 56, 99, - 98, 100, 285, 101, 109, 110, nil, 93, 94, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 225, nil, nil, 231, nil, nil, 58, 59, nil, - nil, 60, nil, 283, nil, 281, nil, 44, nil, nil, - 286, nil, nil, nil, nil, nil, 230, nil, nil, nil, - nil, 91, 81, 84, 85, nil, 86, 88, 87, 89, - nil, nil, nil, nil, 82, 90, nil, nil, nil, 74, - 75, 71, 62, 57, 83, 95, 96, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 232, nil, nil, nil, nil, - nil, nil, 45, nil, nil, 107, 106, 108, 97, 56, - 99, 98, 100, 285, 101, 109, 110, nil, 93, 94, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 225, nil, nil, 231, nil, nil, 58, 59, - nil, nil, 60, nil, 283, nil, 281, nil, 44, nil, - nil, 286, nil, nil, nil, nil, nil, 230, nil, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, 220, nil, nil, - 74, 75, 71, 62, 57, 83, 95, 96, 63, 64, - nil, nil, nil, 67, nil, 65, 66, 68, 310, 311, - 72, 73, nil, nil, nil, nil, nil, 306, 307, 313, - 103, 102, 104, 105, nil, nil, 232, nil, nil, nil, - nil, nil, nil, 45, nil, nil, 107, 106, 108, 97, - 56, 99, 98, 100, nil, 101, 109, 110, nil, 93, - 94, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 225, nil, nil, 231, nil, nil, 58, - 59, nil, nil, 60, nil, nil, nil, nil, nil, 44, - nil, nil, nil, nil, nil, nil, nil, nil, 230, nil, - nil, nil, nil, 91, 81, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, nil, nil, - nil, 74, 75, 71, 62, 57, 83, 95, 96, 63, - 64, nil, nil, nil, 67, nil, 65, 66, 68, 310, - 311, 72, 73, nil, nil, nil, nil, nil, 306, 307, - 313, 103, 102, 104, 105, nil, nil, 232, nil, nil, - nil, nil, nil, nil, 45, nil, nil, 107, 106, 108, - 97, 56, 99, 98, 100, nil, 101, 109, 110, nil, - 93, 94, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 225, nil, nil, 231, nil, nil, - 58, 59, nil, nil, 60, nil, nil, nil, nil, nil, - 44, nil, nil, nil, nil, nil, nil, nil, nil, 230, - nil, nil, nil, nil, 91, 81, 84, 85, nil, 86, - 88, 87, 89, nil, nil, nil, nil, 82, 90, nil, - nil, nil, 74, 75, 71, 62, 57, 83, 95, 96, - 63, 64, nil, nil, nil, 67, nil, 65, 66, 68, - 310, 311, 72, 73, nil, nil, nil, nil, nil, 306, - 307, 313, 103, 102, 104, 105, nil, nil, 232, nil, - nil, nil, nil, nil, nil, 45, nil, nil, 107, 106, - 108, 97, 56, 99, 98, 100, nil, 101, 109, 110, - nil, 93, 94, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 225, nil, nil, 231, nil, - nil, 58, 59, nil, nil, 60, nil, nil, nil, nil, - nil, 44, nil, nil, nil, nil, nil, nil, nil, nil, - 230, nil, nil, nil, nil, 91, 81, 84, 85, nil, - 86, 88, 87, 89, nil, nil, nil, nil, 82, 90, - nil, nil, nil, 74, 75, 71, 62, 57, 83, 95, - 96, 63, 64, nil, nil, nil, 67, nil, 65, 66, - 68, 310, 311, 72, 73, nil, nil, nil, nil, nil, - 306, 307, 313, 103, 102, 104, 105, nil, nil, 232, - nil, nil, nil, nil, nil, nil, 45, nil, nil, 107, - 106, 108, 97, 56, 99, 98, 100, nil, 101, 109, - 110, nil, 93, 94, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 225, nil, nil, 231, - nil, nil, 58, 59, nil, nil, 60, nil, nil, nil, - nil, nil, 44, nil, nil, nil, nil, nil, nil, nil, - nil, 230, nil, nil, nil, nil, 91, 81, 84, 85, - nil, 86, 88, 87, 89, nil, nil, nil, nil, 82, - 90, nil, nil, nil, nil, nil, nil, 62, nil, 83, - 95, 96, 74, 75, 71, 9, 57, nil, nil, nil, - 63, 64, nil, nil, nil, 67, nil, 65, 66, 68, - 30, 31, 72, 73, nil, nil, nil, nil, nil, 29, - 28, 27, 103, 102, 104, 105, nil, nil, 19, nil, - nil, nil, nil, nil, 8, 45, nil, 10, 107, 106, - 108, 97, 56, 99, 98, 100, nil, 101, 109, 110, - nil, 93, 94, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 40, nil, nil, 33, nil, - nil, 58, 59, nil, nil, 60, nil, 35, nil, nil, - nil, 44, nil, nil, nil, nil, nil, nil, nil, nil, - 20, nil, nil, nil, nil, 91, 81, 84, 85, nil, - 86, 88, 87, 89, nil, nil, nil, nil, 82, 90, - nil, nil, nil, 74, 75, 71, 62, 57, 83, 95, - 96, 63, 64, nil, nil, nil, 67, nil, 65, 66, - 68, 310, 311, 72, 73, nil, nil, nil, nil, nil, - 306, 307, 313, 103, 102, 104, 105, nil, nil, 232, - nil, nil, nil, nil, nil, nil, 308, nil, nil, 107, - 106, 108, 97, 56, 99, 98, 100, nil, 101, 109, - 110, nil, 93, 94, nil, nil, 314, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 304, nil, nil, 231, - nil, nil, 58, 59, nil, nil, 60, nil, nil, 669, - nil, 666, 665, 664, 673, 667, nil, nil, nil, nil, - nil, nil, nil, nil, 676, nil, 91, 81, 84, 85, - nil, 86, 88, 87, 89, nil, nil, nil, nil, 82, - 90, nil, nil, nil, 503, nil, 671, 62, nil, 83, - 95, 96, 74, 75, 71, nil, 57, 684, 683, nil, - 63, 64, 677, nil, nil, 67, nil, 65, 66, 68, - 310, 311, 72, 73, nil, nil, nil, nil, nil, 306, - 307, 313, 103, 102, 104, 105, nil, nil, 232, nil, - nil, nil, nil, nil, nil, 308, nil, nil, 107, 106, - 108, 97, 56, 99, 98, 100, nil, 101, 109, 110, - nil, 93, 94, nil, nil, 314, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 304, nil, nil, 300, nil, - nil, 58, 59, nil, nil, 60, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 91, 81, 84, 85, nil, - 86, 88, 87, 89, nil, nil, nil, nil, 82, 90, - nil, nil, nil, 74, 75, 71, 62, 57, 83, 95, - 96, 63, 64, nil, nil, nil, 67, nil, 65, 66, - 68, 310, 311, 72, 73, nil, nil, nil, nil, nil, - 306, 307, 313, 103, 102, 104, 105, nil, nil, 232, - nil, nil, nil, nil, nil, nil, 45, nil, nil, 107, - 106, 108, 97, 56, 99, 98, 100, nil, 101, 109, - 110, nil, 93, 94, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 225, nil, nil, 231, - 519, nil, 58, 59, nil, nil, 60, nil, nil, nil, - nil, nil, 44, nil, nil, nil, nil, nil, nil, nil, - nil, 230, nil, nil, nil, nil, 91, 81, 84, 85, - nil, 86, 88, 87, 89, nil, nil, nil, nil, 82, - 90, nil, nil, nil, 74, 75, 71, 62, 57, 83, - 95, 96, 63, 64, nil, nil, nil, 67, nil, 65, - 66, 68, 30, 31, 72, 73, nil, nil, nil, nil, - nil, 29, 28, 27, 103, 102, 104, 105, nil, nil, - 19, nil, nil, nil, nil, nil, nil, 45, nil, nil, - 107, 106, 108, 97, 56, 99, 98, 100, nil, 101, - 109, 110, nil, 93, 94, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 225, nil, nil, - 231, nil, nil, 58, 59, nil, nil, 60, nil, nil, - nil, nil, nil, 44, nil, nil, nil, nil, nil, nil, - nil, nil, 20, nil, nil, nil, nil, 91, 81, 84, - 85, nil, 86, 88, 87, 89, nil, nil, nil, nil, - 82, 90, nil, nil, nil, 74, 75, 71, 62, 57, - 83, 95, 96, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 30, 31, 72, 73, nil, nil, nil, - nil, nil, 29, 28, 27, 103, 102, 104, 105, nil, - nil, 19, nil, nil, nil, nil, nil, nil, 45, nil, - nil, 107, 106, 108, 97, 56, 99, 98, 100, nil, - 101, 109, 110, nil, 93, 94, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 225, nil, - nil, 231, nil, nil, 58, 59, nil, nil, 60, nil, - nil, nil, nil, nil, 44, nil, nil, nil, nil, nil, - nil, nil, nil, 20, nil, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, 74, 75, 71, 62, - 57, 83, 95, 96, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 30, 31, 72, 73, nil, nil, - nil, nil, nil, 29, 28, 27, 103, 102, 104, 105, - nil, nil, 19, nil, nil, nil, nil, nil, nil, 45, - nil, nil, 107, 106, 108, 97, 56, 99, 98, 100, - nil, 101, 109, 110, nil, 93, 94, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 225, - nil, nil, 231, nil, nil, 58, 59, nil, nil, 60, - nil, nil, nil, nil, nil, 44, nil, nil, nil, nil, - nil, nil, nil, nil, 20, nil, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, nil, nil, 74, 75, 71, - 62, 57, 83, 95, 96, 63, 64, nil, nil, nil, - 67, nil, 65, 66, 68, 30, 31, 72, 73, nil, - nil, nil, nil, nil, 29, 28, 27, 103, 102, 104, - 105, nil, nil, 19, nil, nil, nil, nil, nil, nil, - 45, nil, nil, 107, 106, 108, 97, 56, 99, 98, - 100, nil, 101, 109, 110, nil, 93, 94, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 225, nil, nil, 231, nil, nil, 58, 59, nil, nil, - 60, nil, nil, nil, nil, nil, 44, nil, nil, nil, - nil, nil, nil, nil, nil, 20, nil, nil, nil, nil, - 91, 81, 84, 85, nil, 86, 88, 87, 89, nil, - nil, nil, nil, 82, 90, nil, nil, nil, 74, 75, - 71, 62, 57, 83, 95, 96, 63, 64, nil, nil, - nil, 67, nil, 65, 66, 68, 30, 31, 72, 73, - nil, nil, nil, nil, nil, 29, 28, 27, 103, 102, - 104, 105, nil, nil, 19, nil, nil, nil, nil, nil, - nil, 45, nil, nil, 107, 106, 108, 97, 56, 99, - 98, 100, nil, 101, 109, 110, nil, 93, 94, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 225, nil, nil, 231, nil, nil, 58, 59, nil, - nil, 60, nil, nil, nil, nil, nil, 44, nil, nil, - nil, nil, nil, nil, nil, nil, 20, nil, nil, nil, - nil, 91, 81, 84, 85, nil, 86, 88, 87, 89, - nil, nil, nil, nil, 82, 90, nil, nil, nil, 74, - 75, 71, 62, 57, 83, 95, 96, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 310, 311, 72, - 73, nil, nil, nil, nil, nil, 306, 307, 313, 103, - 102, 104, 105, nil, nil, 232, nil, nil, nil, nil, - nil, nil, 45, nil, nil, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 225, nil, nil, 231, nil, nil, 58, 59, - nil, nil, 60, nil, nil, nil, nil, nil, 44, nil, - nil, nil, nil, nil, nil, nil, nil, 230, nil, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - 74, 75, 71, 62, 57, 83, 95, 96, 63, 64, - nil, nil, nil, 67, nil, 65, 66, 68, 30, 31, - 72, 73, nil, nil, nil, nil, nil, 29, 28, 27, - 103, 102, 104, 105, nil, nil, 232, nil, nil, nil, - nil, nil, nil, 45, nil, nil, 107, 106, 108, 97, - 56, 99, 98, 100, 285, 101, 109, 110, nil, 93, - 94, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 225, nil, nil, 231, nil, nil, 58, - 59, nil, nil, 60, nil, 283, nil, 281, nil, 44, - nil, nil, 286, nil, nil, nil, nil, nil, 230, nil, - nil, nil, nil, 91, 81, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, nil, nil, - nil, 74, 75, 71, 62, 57, 83, 95, 96, 63, - 64, nil, nil, nil, 67, nil, 65, 66, 68, 310, - 311, 72, 73, nil, nil, nil, nil, nil, 306, 307, - 313, 103, 102, 104, 105, nil, nil, 232, nil, nil, - nil, nil, nil, nil, 45, nil, nil, 107, 106, 108, - 97, 56, 99, 98, 100, nil, 101, 109, 110, nil, - 93, 94, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 225, nil, nil, 231, nil, nil, - 58, 59, nil, nil, 60, nil, nil, nil, nil, nil, - 44, nil, nil, nil, nil, nil, nil, nil, nil, 230, - nil, nil, nil, nil, 91, 81, 84, 85, nil, 86, - 88, 87, 89, nil, nil, nil, nil, 82, 90, nil, - nil, nil, 74, 75, 71, 62, 57, 83, 95, 96, - 63, 64, nil, nil, nil, 67, nil, 65, 66, 68, - 310, 311, 72, 73, nil, nil, nil, nil, nil, 306, - 307, 313, 103, 102, 104, 105, nil, nil, 232, nil, - nil, nil, nil, nil, nil, 45, nil, nil, 107, 106, - 108, 97, 56, 99, 98, 100, nil, 101, 109, 110, - nil, 93, 94, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 225, nil, nil, 231, nil, - nil, 58, 59, nil, nil, 60, nil, nil, nil, nil, - nil, 44, nil, nil, nil, nil, nil, nil, nil, nil, - 230, nil, nil, nil, nil, 91, 81, 84, 85, nil, - 86, 88, 87, 89, nil, nil, nil, nil, 82, 90, - nil, nil, nil, 74, 75, 71, 62, 57, 83, 95, - 96, 63, 64, nil, nil, nil, 67, nil, 65, 66, - 68, 310, 311, 72, 73, nil, nil, nil, nil, nil, - 306, 307, 313, 103, 102, 104, 105, nil, nil, 232, - nil, nil, nil, nil, nil, nil, 45, nil, nil, 107, - 106, 108, 97, 56, 99, 98, 100, nil, 101, 109, - 110, nil, 93, 94, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 225, nil, nil, 231, - nil, nil, 58, 59, nil, nil, 60, nil, nil, nil, - nil, nil, 44, nil, nil, nil, nil, nil, nil, nil, - nil, 230, nil, nil, nil, nil, 91, 81, 84, 85, - nil, 86, 88, 87, 89, nil, nil, nil, nil, 82, - 90, nil, nil, nil, 74, 75, 71, 62, 57, 83, - 95, 96, 63, 64, nil, nil, nil, 67, nil, 65, - 66, 68, 310, 311, 72, 73, nil, nil, nil, nil, - nil, 306, 307, 313, 103, 102, 104, 105, nil, nil, - 232, nil, nil, nil, nil, nil, nil, 45, nil, nil, - 107, 106, 108, 97, 56, 99, 98, 100, 285, 101, - 109, 110, nil, 93, 94, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 225, nil, nil, - 231, nil, nil, 58, 59, nil, nil, 60, nil, 627, - nil, 281, nil, 44, nil, nil, 286, nil, nil, nil, - nil, nil, 230, nil, nil, nil, nil, 91, 81, 84, - 85, nil, 86, 88, 87, 89, nil, nil, nil, nil, - 82, 90, nil, nil, nil, 74, 75, 71, 62, 57, - 83, 95, 96, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 310, 311, 72, 73, nil, nil, nil, - nil, nil, 306, 307, 313, 103, 102, 104, 105, nil, - nil, 232, nil, nil, nil, nil, nil, nil, 45, nil, - nil, 107, 106, 108, 97, 56, 99, 98, 100, 285, - 101, 109, 110, nil, 93, 94, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 225, nil, - nil, 231, nil, nil, 58, 59, nil, nil, 60, nil, - nil, nil, 281, nil, 44, nil, nil, 286, nil, nil, - nil, nil, nil, 230, nil, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, 74, 75, 71, 62, - 57, 83, 95, 96, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 310, 311, 72, 73, nil, nil, - nil, nil, nil, 306, 307, 313, 103, 102, 104, 105, - nil, nil, 232, nil, nil, nil, nil, nil, nil, 45, - nil, nil, 107, 106, 108, 97, 56, 99, 98, 100, - nil, 101, 109, 110, nil, 93, 94, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 225, - nil, nil, 231, nil, nil, 58, 59, nil, nil, 60, - nil, nil, nil, nil, nil, 44, nil, nil, nil, nil, - nil, nil, nil, nil, 230, nil, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, nil, nil, nil, nil, nil, - 62, nil, 83, 95, 96, 74, 75, 71, 9, 57, - nil, nil, nil, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 30, 31, 72, 73, nil, nil, nil, - nil, nil, 29, 28, 27, 103, 102, 104, 105, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 45, 293, - 10, 107, 106, 108, 97, 56, 99, 98, 100, nil, - 101, 109, 110, nil, 93, 94, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 40, nil, - nil, 33, nil, nil, 58, 59, nil, nil, 60, nil, - 35, nil, nil, nil, 44, nil, nil, nil, nil, nil, - nil, nil, nil, 20, nil, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, nil, nil, 388, 62, - nil, 83, 95, 96, 74, 75, 71, nil, 57, nil, - nil, nil, 63, 64, nil, nil, nil, 67, nil, 65, - 66, 68, 310, 311, 72, 73, nil, nil, nil, nil, - nil, 306, 307, 313, 103, 102, 104, 105, nil, nil, - 232, nil, nil, nil, nil, nil, nil, 308, nil, nil, - 107, 106, 108, 97, 56, 99, 98, 100, nil, 101, - 109, 110, nil, 93, 94, nil, nil, 314, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 304, nil, nil, - 300, nil, nil, 58, 59, nil, nil, 60, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 91, 81, 84, - 85, nil, 86, 88, 87, 89, nil, nil, nil, nil, - 82, 90, nil, nil, nil, 74, 75, 71, 62, 57, - 83, 95, 96, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 30, 31, 72, 73, nil, nil, nil, - nil, nil, 29, 28, 27, 103, 102, 104, 105, nil, - nil, 232, nil, nil, nil, nil, nil, nil, 45, nil, - nil, 107, 106, 108, 97, 56, 99, 98, 100, 285, - 101, 109, 110, nil, 93, 94, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 225, nil, - nil, 231, nil, nil, 58, 59, nil, nil, 60, nil, - 283, nil, 281, nil, 44, nil, nil, 286, nil, nil, - nil, nil, nil, 230, nil, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, 74, 75, 71, 62, - 57, 83, 95, 96, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 310, 311, 72, 73, nil, nil, - nil, nil, nil, 306, 307, 313, 103, 102, 104, 105, - nil, nil, 232, nil, nil, nil, nil, nil, nil, 308, - nil, nil, 107, 106, 108, 97, 56, 99, 98, 100, - nil, 101, 109, 110, nil, 93, 94, nil, nil, 314, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 304, - nil, nil, 300, nil, nil, 58, 59, nil, nil, 60, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, nil, nil, 74, 75, 71, - 62, 57, 83, 95, 96, 63, 64, nil, nil, nil, - 67, nil, 65, 66, 68, 310, 311, 72, 73, nil, - nil, nil, nil, nil, 306, 307, 313, 103, 102, 104, - 105, nil, nil, 232, nil, nil, nil, nil, nil, nil, - 45, nil, nil, 107, 106, 108, 97, 56, 99, 98, - 100, nil, 101, 109, 110, nil, 93, 94, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 225, nil, nil, 231, nil, nil, 58, 59, nil, nil, - 60, nil, nil, nil, nil, nil, 44, nil, nil, nil, - nil, nil, nil, nil, nil, 230, nil, nil, nil, nil, - 91, 81, 84, 85, nil, 86, 88, 87, 89, nil, - nil, nil, nil, 82, 90, nil, nil, nil, 74, 75, - 71, 62, 57, 83, 95, 96, 63, 64, nil, nil, - nil, 67, nil, 65, 66, 68, 310, 311, 72, 73, - nil, nil, nil, nil, nil, 306, 307, 313, 103, 102, - 104, 105, nil, nil, 232, nil, nil, nil, nil, nil, - nil, 45, nil, nil, 107, 106, 108, 97, 56, 99, - 98, 100, nil, 101, 109, 110, nil, 93, 94, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 225, nil, nil, 231, nil, nil, 58, 59, nil, - nil, 60, nil, nil, nil, nil, nil, 44, nil, nil, - nil, nil, nil, nil, nil, nil, 230, nil, nil, nil, - nil, 91, 81, 84, 85, nil, 86, 88, 87, 89, - nil, nil, nil, nil, 82, 90, nil, nil, nil, 74, - 75, 71, 62, 57, 83, 95, 96, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 19, nil, nil, nil, nil, - nil, nil, 45, nil, nil, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 225, nil, nil, 231, nil, nil, 58, 59, - nil, nil, 60, nil, nil, nil, nil, nil, 44, nil, - nil, nil, nil, nil, nil, nil, nil, 20, nil, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - 74, 75, 71, 62, 57, 83, 95, 96, 63, 64, - nil, nil, nil, 67, nil, 65, 66, 68, 310, 311, - 72, 73, nil, nil, nil, nil, nil, 306, 307, 313, - 103, 102, 104, 105, nil, nil, 232, nil, nil, nil, - nil, nil, nil, 45, nil, nil, 107, 106, 108, 97, - 56, 99, 98, 100, 285, 101, 109, 110, nil, 93, - 94, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 225, nil, nil, 231, nil, nil, 58, - 59, nil, nil, 60, nil, 627, nil, nil, nil, 44, - nil, nil, 286, nil, nil, nil, nil, nil, 230, nil, - nil, nil, nil, 91, 81, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, nil, nil, - nil, 74, 75, 71, 62, 57, 83, 95, 96, 63, - 64, nil, nil, nil, 67, nil, 65, 66, 68, 310, - 311, 72, 73, nil, nil, nil, nil, nil, 306, 307, - 313, 103, 102, 104, 105, nil, nil, 232, nil, nil, - nil, nil, nil, nil, 45, nil, nil, 107, 106, 108, - 97, 56, 99, 98, 100, 285, 101, 109, 110, nil, - 93, 94, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 225, nil, nil, 231, nil, nil, - 58, 59, nil, nil, 60, nil, nil, nil, nil, nil, - 44, nil, nil, 286, nil, nil, nil, nil, nil, 230, - nil, nil, nil, nil, 91, 81, 84, 85, nil, 86, - 88, 87, 89, nil, nil, nil, nil, 82, 90, nil, - nil, nil, 74, 75, 71, 62, 57, 83, 95, 96, - 63, 64, nil, nil, nil, 67, nil, 65, 66, 68, - 310, 311, 72, 73, nil, nil, nil, nil, nil, 306, - 307, 313, 103, 102, 104, 105, nil, nil, 232, nil, - nil, nil, nil, nil, nil, 45, nil, nil, 107, 106, - 108, 97, 56, 99, 98, 100, nil, 101, 109, 110, - nil, 93, 94, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 225, nil, nil, 231, nil, - nil, 58, 59, nil, nil, 60, nil, 283, nil, nil, - nil, 44, nil, nil, nil, nil, nil, nil, nil, nil, - 230, nil, nil, nil, nil, 91, 81, 84, 85, nil, - 86, 88, 87, 89, nil, nil, nil, nil, 82, 90, - nil, nil, nil, 74, 75, 71, 62, 57, 83, 95, - 96, 63, 64, nil, nil, nil, 67, nil, 65, 66, - 68, 30, 31, 72, 73, nil, nil, nil, nil, nil, - 29, 28, 27, 103, 102, 104, 105, nil, nil, 232, - nil, nil, nil, nil, nil, nil, 45, nil, nil, 107, - 106, 108, 97, 56, 99, 98, 100, 285, 101, 109, - 110, nil, 93, 94, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 225, nil, nil, 231, - nil, nil, 58, 59, nil, nil, 60, nil, 283, nil, - 281, nil, 44, nil, nil, 286, nil, nil, nil, nil, - nil, 230, nil, nil, nil, nil, 91, 81, 84, 85, - nil, 86, 88, 87, 89, nil, nil, nil, nil, 82, - 90, nil, nil, nil, 74, 75, 71, 62, 57, 83, - 95, 96, 63, 64, nil, nil, nil, 67, nil, 65, - 66, 68, 30, 31, 72, 73, nil, nil, nil, nil, - nil, 29, 28, 27, 103, 102, 104, 105, nil, nil, - 232, nil, nil, nil, nil, nil, nil, 45, nil, nil, - 107, 106, 108, 97, 56, 99, 98, 100, 285, 101, - 109, 110, nil, 93, 94, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 225, nil, nil, - 231, nil, nil, 58, 59, nil, nil, 60, nil, 283, - nil, 281, nil, 44, nil, nil, 286, nil, nil, nil, - nil, nil, 230, nil, nil, nil, nil, 91, 81, 84, - 85, nil, 86, 88, 87, 89, nil, nil, nil, nil, - 82, 90, nil, nil, nil, 74, 75, 71, 62, 57, - 83, 95, 96, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 310, 311, 72, 73, nil, nil, nil, - nil, nil, 306, 307, 313, 103, 102, 104, 105, nil, - nil, 232, nil, nil, nil, nil, nil, nil, 45, nil, - nil, 107, 106, 108, 97, 56, 99, 98, 100, nil, - 101, 109, 110, nil, 93, 94, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 225, nil, - nil, 231, nil, nil, 58, 59, nil, nil, 60, nil, - 730, nil, nil, nil, 44, nil, nil, nil, nil, nil, - nil, nil, nil, 230, nil, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, 74, 75, 71, 62, - 57, 83, 95, 96, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 310, 311, 72, 73, nil, nil, - nil, nil, nil, 306, 307, 313, 103, 102, 104, 105, - nil, nil, 232, nil, nil, nil, nil, nil, nil, 45, - nil, nil, 107, 106, 108, 97, 56, 99, 98, 100, - nil, 101, 109, 110, nil, 93, 94, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 225, - nil, nil, 231, nil, nil, 58, 59, nil, nil, 60, - nil, nil, nil, nil, nil, 44, nil, nil, nil, nil, - nil, nil, nil, nil, 230, nil, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, nil, nil, 74, 75, 71, - 62, 57, 83, 95, 96, 63, 64, nil, nil, nil, - 67, nil, 65, 66, 68, 310, 311, 72, 73, nil, - nil, nil, nil, nil, 306, 307, 313, 103, 102, 104, - 105, nil, nil, 232, nil, nil, nil, nil, nil, nil, - 45, nil, nil, 107, 106, 108, 97, 56, 99, 98, - 100, 285, 101, 109, 110, nil, 93, 94, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 225, nil, nil, 231, nil, nil, 58, 59, nil, nil, - 60, nil, 627, nil, 281, nil, 44, nil, nil, 286, - nil, nil, nil, nil, nil, 230, nil, nil, nil, nil, - 91, 81, 84, 85, nil, 86, 88, 87, 89, nil, - nil, nil, nil, 82, 90, nil, nil, nil, 74, 75, - 71, 62, 57, 83, 95, 96, 63, 64, nil, nil, - nil, 67, nil, 65, 66, 68, 310, 311, 72, 73, - nil, nil, nil, nil, nil, 306, 307, 313, 103, 102, - 104, 105, nil, nil, 232, nil, nil, nil, nil, nil, - nil, 45, nil, nil, 107, 106, 108, 97, 56, 99, - 98, 100, 285, 101, 109, 110, nil, 93, 94, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 225, nil, nil, 231, nil, nil, 58, 59, nil, - nil, 60, nil, nil, nil, 281, nil, 44, nil, nil, - 286, nil, nil, nil, nil, nil, 230, nil, nil, nil, - nil, 91, 81, 84, 85, nil, 86, 88, 87, 89, - nil, nil, nil, nil, 82, 90, nil, nil, nil, 74, - 75, 71, 62, 57, 83, 95, 96, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 232, nil, nil, nil, nil, - nil, nil, 45, nil, nil, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 225, nil, nil, 231, nil, nil, 58, 59, - nil, nil, 60, nil, nil, nil, nil, nil, 44, nil, - nil, nil, nil, nil, nil, nil, nil, 230, nil, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - 74, 75, 71, 62, 57, 83, 95, 96, 63, 64, - nil, nil, nil, 67, nil, 65, 66, 68, 30, 31, - 72, 73, nil, nil, nil, nil, nil, 29, 28, 27, - 103, 102, 104, 105, nil, nil, 232, nil, nil, nil, - nil, nil, nil, 45, nil, nil, 107, 106, 108, 97, - 56, 99, 98, 100, nil, 101, 109, 110, nil, 93, - 94, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 225, nil, nil, 231, nil, nil, 58, - 59, nil, nil, 60, nil, nil, nil, nil, nil, 44, - nil, nil, nil, nil, nil, nil, nil, nil, 230, nil, - nil, nil, nil, 91, 81, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, nil, nil, - nil, 74, 75, 71, 62, 57, 83, 95, 96, 63, - 64, nil, nil, nil, 67, nil, 65, 66, 68, 30, - 31, 72, 73, nil, nil, nil, nil, nil, 29, 28, - 27, 103, 102, 104, 105, nil, nil, 232, nil, nil, - nil, nil, nil, nil, 45, nil, nil, 107, 106, 108, - 97, 56, 99, 98, 100, nil, 101, 109, 110, nil, - 93, 94, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 225, nil, nil, 231, nil, nil, - 58, 59, nil, nil, 60, nil, nil, nil, nil, nil, - 44, nil, nil, nil, nil, nil, nil, nil, nil, 230, - nil, nil, nil, nil, 91, 81, 84, 85, nil, 86, - 88, 87, 89, nil, nil, nil, nil, 82, 90, nil, - nil, nil, 74, 75, 71, 62, 57, 83, 95, 96, - 63, 64, nil, nil, nil, 67, nil, 65, 66, 68, - 30, 31, 72, 73, nil, nil, nil, nil, nil, 29, - 28, 27, 103, 102, 104, 105, nil, nil, 232, nil, - nil, nil, nil, nil, nil, 45, nil, nil, 107, 106, - 108, 97, 56, 99, 98, 100, nil, 101, 109, 110, - nil, 93, 94, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 225, nil, nil, 231, nil, - nil, 58, 59, nil, nil, 60, nil, nil, nil, nil, - nil, 44, nil, nil, nil, nil, nil, nil, nil, nil, - 230, nil, nil, nil, nil, 91, 81, 84, 85, nil, - 86, 88, 87, 89, nil, nil, nil, nil, 82, 90, - nil, nil, nil, 74, 75, 71, 62, 57, 83, 95, - 96, 63, 64, nil, nil, nil, 67, nil, 65, 66, - 68, 30, 31, 72, 73, nil, nil, nil, nil, nil, - 29, 28, 27, 103, 102, 104, 105, nil, nil, 232, - nil, nil, nil, nil, nil, nil, 45, nil, nil, 107, - 106, 108, 97, 56, 99, 98, 100, nil, 101, 109, - 110, nil, 93, 94, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 225, nil, nil, 231, - nil, nil, 58, 59, nil, nil, 60, nil, nil, nil, - nil, nil, 44, nil, nil, nil, nil, nil, nil, nil, - nil, 230, nil, nil, nil, nil, 91, 81, 84, 85, - nil, 86, 88, 87, 89, nil, nil, nil, nil, 82, - 90, nil, nil, nil, 74, 75, 71, 62, 57, 83, - 95, 96, 63, 64, nil, nil, nil, 67, nil, 65, - 66, 68, 310, 311, 72, 73, nil, nil, nil, nil, - nil, 306, 307, 313, 103, 102, 104, 105, nil, nil, - 232, nil, nil, nil, nil, nil, nil, 45, nil, nil, - 107, 106, 108, 97, 56, 99, 98, 100, nil, 101, - 109, 110, nil, 93, 94, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 225, nil, nil, - 231, nil, nil, 58, 59, nil, nil, 60, nil, nil, - nil, nil, nil, 44, nil, nil, nil, nil, nil, nil, - nil, nil, 230, nil, nil, nil, nil, 91, 81, 84, - 85, nil, 86, 88, 87, 89, nil, nil, nil, nil, - 82, 90, nil, nil, nil, 74, 75, 71, 62, 57, - 83, 95, 96, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 310, 311, 72, 73, nil, nil, nil, - nil, nil, 306, 307, 313, 103, 102, 104, 105, nil, - nil, 232, nil, nil, nil, nil, nil, nil, 45, nil, - nil, 107, 106, 108, 97, 56, 99, 98, 100, nil, - 101, 109, 110, nil, 93, 94, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 225, nil, - nil, 231, nil, nil, 58, 59, nil, nil, 60, nil, - nil, nil, nil, nil, 44, nil, nil, nil, nil, nil, - nil, nil, nil, 230, nil, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, 74, 75, 71, 62, - 57, 83, 95, 96, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 310, 311, 72, 73, nil, nil, - nil, nil, nil, 306, 307, 313, 103, 102, 104, 105, - nil, nil, 232, nil, nil, nil, nil, nil, nil, 308, - nil, nil, 107, 106, 108, 97, 56, 99, 98, 100, - nil, 101, 109, 110, nil, 93, 94, nil, nil, 314, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 304, - nil, nil, 300, nil, nil, 58, 59, nil, nil, 60, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, nil, nil, 74, 75, 71, - 62, 57, 83, 95, 96, 63, 64, nil, nil, nil, - 67, nil, 65, 66, 68, 310, 311, 72, 73, nil, - nil, nil, nil, nil, 306, 307, 313, 103, 102, 104, - 105, nil, nil, 232, nil, nil, nil, nil, nil, nil, - 308, nil, nil, 107, 106, 108, 97, 56, 99, 98, - 100, nil, 101, 109, 110, nil, 93, 94, nil, nil, - 314, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 304, nil, nil, 300, nil, nil, 58, 59, nil, nil, - 60, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 91, 81, 84, 85, nil, 86, 88, 87, 89, nil, - nil, nil, nil, 82, 90, nil, nil, nil, 74, 75, - 71, 62, 57, 83, 95, 96, 63, 64, nil, nil, - nil, 67, nil, 65, 66, 68, 310, 311, 72, 73, - nil, nil, nil, nil, nil, 306, 307, 313, 103, 102, - 104, 105, nil, nil, 232, nil, nil, nil, nil, nil, - nil, 45, nil, nil, 107, 106, 108, 97, 56, 99, - 98, 100, nil, 101, 109, 110, nil, 93, 94, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 225, nil, nil, 231, nil, nil, 58, 59, nil, - nil, 60, nil, 404, nil, nil, nil, 44, nil, nil, - nil, nil, nil, nil, nil, nil, 230, nil, nil, nil, - nil, 91, 81, 84, 85, nil, 86, 88, 87, 89, - nil, nil, nil, nil, 82, 90, nil, nil, nil, 74, - 75, 71, 62, 57, 83, 95, 96, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 310, 311, 72, - 73, nil, nil, nil, nil, nil, 306, 307, 313, 103, - 102, 104, 105, nil, nil, 232, nil, nil, nil, nil, - nil, nil, 45, nil, nil, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 225, nil, nil, 231, nil, nil, 58, 59, - nil, nil, 60, nil, nil, nil, nil, nil, 44, nil, - nil, nil, nil, nil, nil, nil, nil, 230, nil, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - 74, 75, 71, 62, 57, 83, 95, 96, 63, 64, - nil, nil, nil, 67, nil, 65, 66, 68, 30, 31, - 72, 73, nil, nil, nil, nil, nil, 29, 28, 27, - 103, 102, 104, 105, nil, nil, 19, nil, nil, nil, - nil, nil, nil, 45, nil, nil, 107, 106, 108, 97, - 56, 99, 98, 100, nil, 101, 109, 110, nil, 93, - 94, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 225, nil, nil, 231, nil, nil, 58, - 59, nil, nil, 60, nil, nil, nil, nil, nil, 44, - nil, nil, nil, nil, nil, nil, nil, nil, 20, nil, - nil, nil, nil, 91, 81, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, nil, nil, - nil, 74, 75, 71, 62, 57, 83, 95, 96, 63, - 64, nil, nil, nil, 67, nil, 65, 66, 68, 30, - 31, 72, 73, nil, nil, nil, nil, nil, 29, 28, - 27, 103, 102, 104, 105, nil, nil, 19, nil, nil, - nil, nil, nil, nil, 45, nil, nil, 107, 106, 108, - 97, 56, 99, 98, 100, nil, 101, 109, 110, nil, - 93, 94, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 225, nil, nil, 231, nil, nil, - 58, 59, nil, nil, 60, nil, nil, nil, nil, nil, - 44, nil, nil, nil, nil, nil, nil, nil, nil, 20, - nil, nil, nil, nil, 91, 81, 84, 85, nil, 86, - 88, 87, 89, nil, nil, nil, nil, 82, 90, nil, - nil, nil, 74, 75, 71, 62, 57, 83, 95, 96, - 63, 64, nil, nil, nil, 67, nil, 65, 66, 68, - 310, 311, 72, 73, nil, nil, nil, nil, nil, 306, - 307, 313, 103, 102, 104, 105, nil, nil, 232, nil, - nil, nil, nil, nil, nil, 45, nil, nil, 107, 106, - 108, 97, 56, 99, 98, 100, nil, 101, 109, 110, - nil, 93, 94, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 225, nil, nil, 231, nil, - nil, 58, 59, nil, nil, 60, nil, nil, nil, nil, - nil, 44, nil, nil, nil, nil, nil, nil, nil, nil, - 230, nil, nil, nil, nil, 91, 81, 84, 85, nil, - 86, 88, 87, 89, nil, nil, nil, nil, 82, 90, - nil, nil, nil, 74, 75, 71, 62, 57, 83, 95, - 96, 63, 64, nil, nil, nil, 67, nil, 65, 66, - 68, 30, 31, 72, 73, nil, nil, nil, nil, nil, - 29, 28, 27, 103, 102, 104, 105, nil, nil, 232, - nil, nil, nil, nil, nil, nil, 45, nil, nil, 107, - 106, 108, 97, 56, 99, 98, 100, nil, 101, 109, - 110, nil, 93, 94, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 225, nil, nil, 231, - nil, nil, 58, 59, nil, nil, 60, nil, nil, nil, - nil, nil, 44, nil, nil, nil, nil, nil, nil, nil, - nil, 230, nil, nil, nil, nil, 91, 81, 84, 85, - nil, 86, 88, 87, 89, nil, nil, nil, nil, 82, - 90, nil, nil, nil, 74, 75, 71, 62, 57, 83, - 95, 96, 63, 64, nil, nil, nil, 67, nil, 65, - 66, 68, 310, 311, 72, 73, nil, nil, nil, nil, - nil, 306, 307, 313, 103, 102, 104, 105, nil, nil, - 232, nil, nil, nil, nil, nil, nil, 45, nil, nil, - 107, 106, 108, 97, 56, 99, 98, 100, nil, 101, - 109, 110, nil, 93, 94, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 225, nil, nil, - 231, nil, nil, 58, 59, nil, nil, 60, nil, nil, - nil, nil, nil, 44, nil, nil, nil, nil, nil, nil, - nil, nil, 230, nil, nil, nil, nil, 91, 81, 84, - 85, nil, 86, 88, 87, 89, nil, nil, nil, nil, - 82, 90, nil, nil, nil, 74, 75, 71, 62, 57, - 83, 95, 96, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 310, 311, 72, 73, nil, nil, nil, - nil, nil, 306, 307, 313, 103, 102, 104, 105, nil, - nil, 232, nil, nil, nil, nil, nil, nil, 45, nil, - nil, 107, 106, 108, 97, 56, 99, 98, 100, nil, - 101, 109, 110, nil, 93, 94, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 225, nil, - nil, 231, nil, nil, 58, 59, nil, nil, 60, nil, - nil, nil, nil, nil, 44, nil, nil, nil, nil, nil, - nil, nil, nil, 230, nil, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, 74, 75, 71, 62, - 57, 83, 95, 96, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 310, 311, 72, 73, nil, nil, - nil, nil, nil, 306, 307, 313, 103, 102, 104, 105, - nil, nil, 232, nil, nil, nil, nil, nil, nil, 45, - nil, nil, 107, 106, 108, 97, 56, 99, 98, 100, - nil, 101, 109, 110, nil, 93, 94, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 225, - nil, nil, 231, nil, nil, 58, 59, nil, nil, 60, - nil, nil, nil, nil, nil, 44, nil, nil, nil, nil, - nil, nil, nil, nil, 230, nil, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, nil, nil, 74, 75, 71, - 62, 57, 83, 95, 96, 63, 64, nil, nil, nil, - 67, nil, 65, 66, 68, 310, 311, 72, 73, nil, - nil, nil, nil, nil, 306, 307, 313, 103, 102, 104, - 105, nil, nil, 232, nil, nil, nil, nil, nil, nil, - 45, nil, nil, 107, 106, 108, 97, 56, 99, 98, - 100, nil, 101, 109, 110, nil, 93, 94, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 225, nil, nil, 231, nil, nil, 58, 59, nil, nil, - 60, nil, nil, nil, nil, nil, 44, nil, nil, nil, - nil, nil, nil, nil, nil, 230, nil, nil, nil, nil, - 91, 81, 84, 85, nil, 86, 88, 87, 89, nil, - nil, nil, nil, 82, 90, nil, nil, nil, 74, 75, - 71, 62, 57, 83, 95, 96, 63, 64, nil, nil, - nil, 67, nil, 65, 66, 68, 310, 311, 72, 73, - nil, nil, nil, nil, nil, 306, 307, 313, 103, 102, - 104, 105, nil, nil, 232, nil, nil, nil, nil, nil, - nil, 45, nil, nil, 107, 106, 108, 97, 56, 99, - 98, 100, nil, 101, 109, 110, nil, 93, 94, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 225, nil, nil, 231, nil, nil, 58, 59, nil, - nil, 60, nil, nil, nil, nil, nil, 44, nil, nil, - nil, nil, nil, nil, nil, nil, 230, nil, nil, nil, - nil, 91, 81, 84, 85, nil, 86, 88, 87, 89, - nil, nil, nil, nil, 82, 90, nil, nil, nil, 74, - 75, 71, 62, 57, 83, 95, 96, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 310, 311, 72, - 73, nil, nil, nil, nil, nil, 306, 307, 313, 103, - 102, 104, 105, nil, nil, 232, nil, nil, nil, nil, - nil, nil, 308, nil, nil, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - nil, nil, 314, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 852, nil, nil, 231, nil, nil, 58, 59, - nil, nil, 60, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - 74, 75, 71, 62, 57, 83, 95, 96, 63, 64, - nil, nil, nil, 67, nil, 65, 66, 68, 310, 311, - 72, 73, nil, nil, nil, nil, nil, 306, 307, 313, - 103, 102, 104, 105, nil, nil, 232, nil, nil, nil, - nil, nil, nil, 45, nil, nil, 107, 106, 108, 97, - 56, 99, 98, 100, nil, 101, 109, 110, nil, 93, - 94, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 225, nil, nil, 231, nil, nil, 58, - 59, nil, nil, 60, nil, nil, nil, nil, nil, 44, - nil, nil, nil, nil, nil, nil, nil, nil, 230, nil, - nil, nil, nil, 91, 81, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, nil, nil, - nil, 74, 75, 71, 62, 57, 83, 95, 96, 63, - 64, nil, nil, nil, 67, nil, 65, 66, 68, 30, - 31, 72, 73, nil, nil, nil, nil, nil, 29, 28, - 27, 103, 102, 104, 105, nil, nil, 19, nil, nil, - nil, nil, nil, nil, 45, nil, nil, 107, 106, 108, - 97, 56, 99, 98, 100, nil, 101, 109, 110, nil, - 93, 94, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 225, nil, nil, 231, nil, nil, - 58, 59, nil, nil, 60, nil, nil, nil, nil, nil, - 44, nil, nil, nil, nil, nil, nil, nil, nil, 20, - nil, nil, nil, nil, 91, 81, 84, 85, nil, 86, - 88, 87, 89, nil, nil, nil, nil, 82, 90, nil, - nil, nil, 74, 75, 71, 62, 57, 83, 95, 96, - 63, 64, nil, nil, nil, 67, nil, 65, 66, 68, - 310, 311, 72, 73, nil, nil, nil, nil, nil, 306, - 307, 313, 103, 102, 104, 105, nil, nil, 232, nil, - nil, nil, nil, nil, nil, 45, nil, nil, 107, 106, - 108, 97, 56, 99, 98, 100, nil, 101, 109, 110, - nil, 93, 94, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 225, nil, nil, 231, nil, - nil, 58, 59, nil, nil, 60, nil, 627, nil, nil, - nil, 44, nil, nil, nil, nil, nil, nil, nil, nil, - 230, nil, nil, nil, nil, 91, 81, 84, 85, nil, - 86, 88, 87, 89, nil, nil, nil, nil, 82, 90, - nil, nil, nil, 74, 75, 71, 62, 57, 83, 95, - 96, 63, 64, nil, nil, nil, 67, nil, 65, 66, - 68, 310, 311, 72, 73, nil, nil, nil, nil, nil, - 306, 307, 313, 103, 102, 104, 105, nil, nil, 232, - nil, nil, nil, nil, nil, nil, 45, nil, nil, 107, - 106, 108, 97, 56, 99, 98, 100, 285, 101, 109, - 110, nil, 93, 94, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 225, nil, nil, 231, - nil, nil, 58, 59, nil, nil, 60, nil, nil, nil, - 281, nil, 44, nil, nil, 286, nil, nil, nil, nil, - nil, 230, nil, nil, nil, nil, 91, 81, 84, 85, - nil, 86, 88, 87, 89, nil, nil, nil, nil, 82, - 90, nil, nil, nil, 74, 75, 71, 62, 57, 83, - 95, 96, 63, 64, nil, nil, nil, 67, nil, 65, - 66, 68, 310, 311, 72, 73, nil, nil, nil, nil, - nil, 306, 307, 313, 103, 102, 104, 105, nil, nil, - 232, nil, nil, nil, nil, nil, nil, 45, nil, nil, - 107, 106, 108, 97, 56, 99, 98, 100, nil, 101, - 109, 110, nil, 93, 94, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 225, nil, nil, - 231, nil, nil, 58, 59, nil, nil, 60, nil, nil, - nil, nil, nil, 44, nil, nil, nil, nil, nil, nil, - nil, nil, 230, nil, nil, nil, nil, 91, 81, 84, - 85, nil, 86, 88, 87, 89, nil, nil, nil, nil, - 82, 90, nil, nil, nil, 74, 75, 71, 62, 57, - 83, 95, 96, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 310, 311, 72, 73, nil, nil, nil, - nil, nil, 306, 307, 313, 103, 102, 104, 105, nil, - nil, 232, nil, nil, nil, nil, nil, nil, 308, nil, - nil, 107, 106, 108, 97, 56, 99, 98, 100, nil, - 101, 109, 110, nil, 93, 94, nil, nil, 314, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 852, nil, - nil, 231, nil, nil, 58, 59, nil, nil, 60, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, 74, 75, 71, 62, - 57, 83, 95, 96, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 310, 311, 72, 73, nil, nil, - nil, nil, nil, 306, 307, 313, 103, 102, 104, 105, - nil, nil, 232, nil, nil, nil, nil, nil, nil, 308, - nil, nil, 107, 106, 108, 97, 56, 99, 98, 100, - nil, 101, 109, 110, nil, 93, 94, nil, nil, 314, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 926, - nil, nil, 231, nil, nil, 58, 59, nil, nil, 60, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, nil, nil, 74, 75, 71, - 62, 57, 83, 95, 96, 63, 64, nil, nil, nil, - 67, nil, 65, 66, 68, 30, 31, 72, 73, nil, - nil, nil, nil, nil, 29, 28, 27, 103, 102, 104, - 105, nil, nil, 232, nil, nil, nil, nil, nil, nil, - 45, nil, nil, 107, 106, 108, 97, 56, 99, 98, - 100, 285, 101, 109, 110, nil, 93, 94, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 225, nil, nil, 231, nil, nil, 58, 59, nil, nil, - 60, nil, 283, nil, 281, nil, 44, nil, nil, 286, - nil, nil, nil, nil, nil, 230, nil, nil, nil, nil, - 91, 81, 84, 85, nil, 86, 88, 87, 89, nil, - nil, nil, nil, 82, 90, nil, nil, nil, nil, -280, - nil, 62, nil, 83, 95, 96, -280, -280, -280, nil, - nil, -280, -280, -280, nil, -280, nil, nil, nil, nil, - nil, nil, nil, nil, nil, -280, -280, -280, nil, nil, - nil, nil, nil, nil, nil, -280, -280, nil, -280, -280, - -280, -280, -280, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, nil, - nil, -280, -280, -280, nil, nil, -280, nil, nil, -280, - nil, nil, -280, -280, nil, -280, nil, -280, nil, -280, - nil, -280, -280, nil, -280, -280, -280, -280, -280, nil, - -280, nil, -280, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, -280, nil, nil, -280, - -280, -280, -280, -580, -280, nil, -280, nil, nil, nil, - -580, -580, -580, nil, nil, -580, -580, -580, nil, -580, - nil, nil, nil, nil, nil, nil, nil, nil, -580, -580, - -580, -580, nil, nil, nil, nil, nil, nil, nil, -580, - -580, nil, -580, -580, -580, -580, -580, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, -580, - -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, - -580, -580, -580, nil, nil, -580, -580, -580, nil, nil, - -580, nil, nil, -580, nil, nil, -580, -580, nil, -580, - nil, -580, nil, -580, nil, -580, -580, nil, -580, -580, - -580, -580, -580, nil, -580, -580, -580, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - -580, nil, nil, -580, -580, -580, -580, -581, -580, nil, - -580, nil, nil, nil, -581, -581, -581, nil, nil, -581, - -581, -581, nil, -581, nil, nil, nil, nil, nil, nil, - nil, nil, -581, -581, -581, -581, nil, nil, nil, nil, - nil, nil, nil, -581, -581, nil, -581, -581, -581, -581, - -581, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, -581, -581, -581, -581, -581, -581, -581, - -581, -581, -581, -581, -581, -581, -581, nil, nil, -581, - -581, -581, nil, nil, -581, nil, nil, -581, nil, nil, - -581, -581, nil, -581, nil, -581, nil, -581, nil, -581, - -581, nil, -581, -581, -581, -581, -581, nil, -581, -581, - -581, 669, nil, 666, 665, 664, 673, 667, nil, nil, - nil, nil, nil, nil, -581, nil, 676, -581, -581, -581, - -581, -414, -581, nil, -581, nil, nil, nil, -414, -414, - -414, nil, nil, -414, -414, -414, nil, -414, 671, nil, - nil, nil, nil, nil, nil, nil, -414, -414, -414, 684, - 683, nil, nil, nil, 677, nil, nil, -414, -414, nil, - -414, -414, -414, -414, -414, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, -414, -414, -414, - -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, - -414, nil, nil, -414, -414, -414, nil, nil, -414, nil, - 265, -414, nil, nil, -414, -414, nil, -414, nil, -414, - nil, -414, nil, -414, -414, nil, -414, -414, -414, -414, - -414, -296, -414, -414, -414, nil, nil, nil, -296, -296, - -296, nil, nil, -296, -296, -296, nil, -296, -414, nil, - nil, -414, -414, nil, -414, nil, -414, -296, -296, nil, - nil, nil, nil, nil, nil, nil, nil, -296, -296, nil, - -296, -296, -296, -296, -296, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, nil, nil, -296, -296, -296, nil, nil, -296, nil, - 274, -296, nil, nil, -296, -296, nil, -296, nil, -296, - nil, -296, nil, -296, -296, nil, -296, -296, -296, -296, - -296, nil, -296, -244, -296, nil, nil, nil, nil, nil, - -244, -244, -244, nil, nil, -244, -244, -244, -296, -244, - nil, -296, -296, nil, -296, nil, -296, nil, -244, -244, - -244, nil, nil, nil, nil, nil, nil, nil, nil, -244, - -244, nil, -244, -244, -244, -244, -244, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, -244, - -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, - -244, -244, -244, nil, nil, -244, -244, -244, nil, nil, - -244, nil, 265, -244, nil, nil, -244, -244, nil, -244, - nil, -244, nil, -244, nil, -244, -244, nil, -244, -244, - -244, -244, -244, nil, -244, -244, -244, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - -244, nil, -244, -244, -244, nil, -244, nil, -244, -244, - -244, -244, nil, nil, -244, -244, -244, 669, -244, 666, - 665, 664, 673, 667, nil, nil, nil, -244, -244, nil, - nil, nil, 676, nil, nil, nil, nil, nil, -244, -244, - nil, -244, -244, -244, -244, -244, nil, nil, nil, nil, - nil, nil, nil, nil, 671, nil, 669, nil, 666, 665, - 664, 673, 667, 681, 680, 684, 683, nil, nil, nil, - 677, 676, nil, nil, nil, nil, nil, nil, nil, -244, - nil, nil, nil, nil, nil, nil, -244, nil, nil, nil, - nil, 265, -244, 671, 655, nil, 220, nil, nil, nil, - nil, nil, 681, 680, 684, 683, nil, nil, nil, 677, - nil, nil, nil, nil, -244, -244, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, -244, - nil, nil, -244, nil, nil, nil, nil, -244, 175, 186, - 176, 199, 172, 192, 182, 181, 202, 203, 197, 180, - 179, 174, 200, 204, 205, 184, 173, 187, 191, 193, - 185, 178, nil, nil, nil, 194, 201, 196, 195, 188, - 198, 183, 171, 190, 189, nil, nil, nil, nil, nil, - 170, 177, 168, 169, 165, 166, 167, 126, 128, 125, - nil, 127, nil, nil, nil, nil, nil, nil, nil, 159, - 160, nil, 156, 138, 139, 140, 147, 144, 146, nil, - nil, 141, 142, nil, nil, nil, 161, 162, 148, 149, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 153, 152, nil, 137, 158, 155, 154, - 163, 150, 151, 145, 143, 135, 157, 136, nil, nil, - 164, 91, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 90, 175, 186, 176, 199, - 172, 192, 182, 181, 202, 203, 197, 180, 179, 174, - 200, 204, 205, 184, 173, 187, 191, 193, 185, 178, - nil, nil, nil, 194, 201, 196, 195, 188, 198, 183, - 171, 190, 189, nil, nil, nil, nil, nil, 170, 177, - 168, 169, 165, 166, 167, 126, 128, nil, nil, 127, - nil, nil, nil, nil, nil, nil, nil, 159, 160, nil, - 156, 138, 139, 140, 147, 144, 146, nil, nil, 141, - 142, nil, nil, nil, 161, 162, 148, 149, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 153, 152, nil, 137, 158, 155, 154, 163, 150, - 151, 145, 143, 135, 157, 136, nil, nil, 164, 91, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 90, 175, 186, 176, 199, 172, 192, - 182, 181, 202, 203, 197, 180, 179, 174, 200, 204, - 205, 184, 173, 187, 191, 193, 185, 178, nil, nil, - nil, 194, 201, 196, 195, 188, 198, 183, 171, 190, - 189, nil, nil, nil, nil, nil, 170, 177, 168, 169, - 165, 166, 167, 126, 128, nil, nil, 127, nil, nil, - nil, nil, nil, nil, nil, 159, 160, nil, 156, 138, - 139, 140, 147, 144, 146, nil, nil, 141, 142, nil, - nil, nil, 161, 162, 148, 149, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 153, - 152, nil, 137, 158, 155, 154, 163, 150, 151, 145, - 143, 135, 157, 136, nil, nil, 164, 91, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 90, 175, 186, 176, 199, 172, 192, 182, 181, - 202, 203, 197, 180, 179, 174, 200, 204, 205, 184, - 173, 187, 191, 193, 185, 178, nil, nil, nil, 194, - 201, 196, 195, 188, 198, 183, 171, 190, 189, nil, - nil, nil, nil, nil, 170, 177, 168, 169, 165, 166, - 167, 126, 128, nil, nil, 127, nil, nil, nil, nil, - nil, nil, nil, 159, 160, nil, 156, 138, 139, 140, - 147, 144, 146, nil, nil, 141, 142, nil, nil, nil, - 161, 162, 148, 149, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 153, 152, nil, - 137, 158, 155, 154, 163, 150, 151, 145, 143, 135, - 157, 136, nil, nil, 164, 91, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 90, - 175, 186, 176, 199, 172, 192, 182, 181, 202, 203, - 197, 180, 179, 174, 200, 204, 205, 184, 173, 187, - 191, 193, 185, 178, nil, nil, nil, 194, 201, 196, - 371, 370, 372, 369, 171, 190, 189, nil, nil, nil, - nil, nil, 170, 177, 168, 169, 366, 367, 368, 364, - 128, 99, 98, 365, nil, 101, nil, nil, nil, nil, - nil, 159, 160, nil, 156, 138, 139, 140, 147, 144, - 146, nil, nil, 141, 142, nil, nil, nil, 161, 162, - 148, 149, nil, nil, nil, nil, nil, 376, nil, nil, - nil, nil, nil, nil, nil, 153, 152, nil, 137, 158, - 155, 154, 163, 150, 151, 145, 143, 135, 157, 136, - nil, nil, 164, 175, 186, 176, 199, 172, 192, 182, - 181, 202, 203, 197, 180, 179, 174, 200, 204, 205, - 184, 173, 187, 191, 193, 185, 178, nil, nil, nil, - 194, 201, 196, 195, 188, 198, 183, 171, 190, 189, - nil, nil, nil, nil, nil, 170, 177, 168, 169, 165, - 166, 167, 126, 128, nil, nil, 127, nil, nil, nil, - nil, nil, nil, nil, 159, 160, nil, 156, 138, 139, - 140, 147, 144, 146, nil, nil, 141, 142, nil, nil, - nil, 161, 162, 148, 149, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 153, 152, - nil, 137, 158, 155, 154, 163, 150, 151, 145, 143, - 135, 157, 136, 413, 417, 164, nil, 414, nil, nil, - nil, nil, nil, nil, nil, 159, 160, nil, 156, 138, - 139, 140, 147, 144, 146, nil, nil, 141, 142, nil, - nil, nil, 161, 162, 148, 149, nil, nil, nil, nil, - nil, 265, nil, nil, nil, nil, nil, nil, nil, 153, - 152, nil, 137, 158, 155, 154, 163, 150, 151, 145, - 143, 135, 157, 136, 420, 424, 164, nil, 419, nil, - nil, nil, nil, nil, nil, nil, 159, 160, nil, 156, - 138, 139, 140, 147, 144, 146, nil, nil, 141, 142, - nil, nil, nil, 161, 162, 148, 149, nil, nil, nil, - nil, nil, 265, nil, nil, nil, nil, nil, nil, nil, - 153, 152, nil, 137, 158, 155, 154, 163, 150, 151, - 145, 143, 135, 157, 136, 475, 417, 164, nil, 476, - nil, nil, nil, nil, nil, nil, nil, 159, 160, nil, - 156, 138, 139, 140, 147, 144, 146, nil, nil, 141, - 142, nil, nil, nil, 161, 162, 148, 149, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 153, 152, nil, 137, 158, 155, 154, 163, 150, - 151, 145, 143, 135, 157, 136, 606, 417, 164, nil, - 607, nil, nil, nil, nil, nil, nil, nil, 159, 160, - nil, 156, 138, 139, 140, 147, 144, 146, nil, nil, - 141, 142, nil, nil, nil, 161, 162, 148, 149, nil, - nil, nil, nil, nil, 265, nil, nil, nil, nil, nil, - nil, nil, 153, 152, nil, 137, 158, 155, 154, 163, - 150, 151, 145, 143, 135, 157, 136, 608, 424, 164, - nil, 609, nil, nil, nil, nil, nil, nil, nil, 159, - 160, nil, 156, 138, 139, 140, 147, 144, 146, nil, - nil, 141, 142, nil, nil, nil, 161, 162, 148, 149, - nil, nil, nil, nil, nil, 265, nil, nil, nil, nil, - nil, nil, nil, 153, 152, nil, 137, 158, 155, 154, - 163, 150, 151, 145, 143, 135, 157, 136, 637, 417, - 164, nil, 638, nil, nil, nil, nil, nil, nil, nil, - 159, 160, nil, 156, 138, 139, 140, 147, 144, 146, - nil, nil, 141, 142, nil, nil, nil, 161, 162, 148, - 149, nil, nil, nil, nil, nil, 265, nil, nil, nil, - nil, nil, nil, nil, 153, 152, nil, 137, 158, 155, - 154, 163, 150, 151, 145, 143, 135, 157, 136, 640, - 424, 164, nil, 641, nil, nil, nil, nil, nil, nil, - nil, 159, 160, nil, 156, 138, 139, 140, 147, 144, - 146, nil, nil, 141, 142, nil, nil, nil, 161, 162, - 148, 149, nil, nil, nil, nil, nil, 265, nil, nil, - nil, nil, nil, nil, nil, 153, 152, nil, 137, 158, - 155, 154, 163, 150, 151, 145, 143, 135, 157, 136, - 606, 417, 164, nil, 607, nil, nil, nil, nil, nil, - nil, nil, 159, 160, nil, 156, 138, 139, 140, 147, - 144, 146, nil, nil, 141, 142, nil, nil, nil, 161, - 162, 148, 149, nil, nil, nil, nil, nil, 265, nil, - nil, nil, nil, nil, nil, nil, 153, 152, nil, 137, - 158, 155, 154, 163, 150, 151, 145, 143, 135, 157, - 136, 608, 424, 164, nil, 609, nil, nil, nil, nil, - nil, nil, nil, 159, 160, nil, 156, 138, 139, 140, - 147, 144, 146, nil, nil, 141, 142, nil, nil, nil, - 161, 162, 148, 149, nil, nil, nil, nil, nil, 265, - nil, nil, nil, nil, nil, nil, nil, 153, 152, nil, - 137, 158, 155, 154, 163, 150, 151, 145, 143, 135, - 157, 136, 697, 417, 164, nil, 698, nil, nil, nil, - nil, nil, nil, nil, 159, 160, nil, 156, 138, 139, - 140, 147, 144, 146, nil, nil, 141, 142, nil, nil, - nil, 161, 162, 148, 149, nil, nil, nil, nil, nil, - 265, nil, nil, nil, nil, nil, nil, nil, 153, 152, - nil, 137, 158, 155, 154, 163, 150, 151, 145, 143, - 135, 157, 136, 699, 424, 164, nil, 700, nil, nil, - nil, nil, nil, nil, nil, 159, 160, nil, 156, 138, - 139, 140, 147, 144, 146, nil, nil, 141, 142, nil, - nil, nil, 161, 162, 148, 149, nil, nil, nil, nil, - nil, 265, nil, nil, nil, nil, nil, nil, nil, 153, - 152, nil, 137, 158, 155, 154, 163, 150, 151, 145, - 143, 135, 157, 136, 702, 424, 164, nil, 703, nil, - nil, nil, nil, nil, nil, nil, 159, 160, nil, 156, - 138, 139, 140, 147, 144, 146, nil, nil, 141, 142, - nil, nil, nil, 161, 162, 148, 149, nil, nil, nil, - nil, nil, 265, nil, nil, nil, nil, nil, nil, nil, - 153, 152, nil, 137, 158, 155, 154, 163, 150, 151, - 145, 143, 135, 157, 136, 475, 417, 164, nil, 476, - nil, nil, nil, nil, nil, nil, nil, 159, 160, nil, - 156, 138, 139, 140, 147, 144, 146, nil, nil, 141, - 142, nil, nil, nil, 161, 162, 148, 149, nil, nil, - nil, nil, nil, 265, nil, nil, nil, nil, nil, nil, - nil, 153, 152, nil, 137, 158, 155, 154, 163, 150, - 151, 145, 143, 135, 157, 136, 969, 424, 164, nil, - 968, nil, nil, nil, nil, nil, nil, nil, 159, 160, - nil, 156, 138, 139, 140, 147, 144, 146, nil, nil, - 141, 142, nil, nil, nil, 161, 162, 148, 149, nil, - nil, nil, nil, nil, 265, nil, nil, nil, nil, nil, - nil, nil, 153, 152, nil, 137, 158, 155, 154, 163, - 150, 151, 145, 143, 135, 157, 136, 995, 417, 164, - nil, 996, nil, nil, nil, nil, nil, nil, nil, 159, - 160, nil, 156, 138, 139, 140, 147, 144, 146, nil, - nil, 141, 142, nil, nil, nil, 161, 162, 148, 149, - nil, nil, nil, nil, nil, 265, nil, nil, nil, nil, - nil, nil, nil, 153, 152, nil, 137, 158, 155, 154, - 163, 150, 151, 145, 143, 135, 157, 136, 997, 424, - 164, nil, 998, nil, nil, nil, nil, nil, nil, nil, - 159, 160, nil, 156, 138, 139, 140, 147, 144, 146, - nil, nil, 141, 142, nil, nil, nil, 161, 162, 148, - 149, nil, nil, nil, nil, nil, 265, nil, nil, nil, - nil, nil, nil, nil, 153, 152, nil, 137, 158, 155, - 154, 163, 150, 151, 145, 143, 135, 157, 136, nil, - 669, 164, 666, 665, 664, 673, 667, nil, 669, nil, - 666, 665, 664, 673, 667, 676, nil, nil, nil, nil, - nil, nil, nil, 676, nil, 669, nil, 666, 665, 664, - 673, 667, nil, nil, nil, nil, nil, 671, nil, nil, - 676, nil, nil, nil, nil, 671, 681, 680, 684, 683, - nil, nil, nil, 677, 681, 680, 684, 683, nil, nil, - nil, 677, 671, nil, 669, nil, 666, 665, 664, 673, - 667, 681, 680, 684, 683, nil, nil, nil, 677, 676, - nil, 669, nil, 666, 665, 664, 673, 667, nil, 669, - nil, 666, 665, 664, 673, 667, 676, nil, nil, nil, - nil, 671, nil, nil, 676, nil, nil, nil, nil, nil, - 681, 680, 684, 683, nil, nil, nil, 677, 671, nil, - nil, nil, nil, nil, nil, nil, 671, 681, 680, 684, - 683, nil, nil, nil, 677, 681, 680, 684, 683, nil, - nil, 669, 677, 666, 665, 664, 673, 667, nil, 669, - nil, 666, 665, 664, 673, 667, 676, nil, nil, nil, - nil, nil, nil, nil, 676, nil, 669, nil, 666, 665, - 664, 673, 667, nil, nil, nil, nil, nil, 671, nil, - nil, 676, nil, nil, nil, nil, 671, 681, 680, 684, - 683, nil, nil, nil, 677, 681, 680, 684, 683, nil, - nil, nil, 677, 671, nil, 669, nil, 666, 665, 664, - 673, 667, nil, nil, 684, 683, nil, nil, nil, 677, - 676, nil, 669, nil, 666, 665, 664, 673, 667, 669, - nil, 666, 665, 664, 673, 667, nil, 676, nil, nil, - nil, nil, 671, nil, 676, nil, nil, nil, nil, nil, - nil, 681, 680, 684, 683, nil, nil, nil, 677, 671, - nil, nil, nil, nil, nil, nil, 671, nil, nil, nil, - 684, 683, nil, nil, nil, 677, nil, 684, 683, nil, - nil, 669, 677, 666, 665, 664, 673, 667, 669, nil, - 666, 665, 664, 673, 667, 669, 676, 666, 665, 664, - 673, 667, nil, 676, nil, nil, nil, nil, nil, nil, - 676, nil, nil, nil, nil, nil, nil, nil, 671, nil, - nil, nil, nil, nil, nil, 671, nil, nil, nil, 684, - 683, nil, 671, nil, 677, nil, 684, 683, nil, nil, - nil, 677, nil, 684, 683, nil, nil, nil, 677 ] - -racc_action_check = [ - 97, 437, 437, 562, 562, 61, 345, 97, 97, 97, - 19, 338, 97, 97, 97, 473, 97, 26, 58, 383, - 1, 481, 647, 647, 97, 384, 97, 97, 97, 329, - 618, 7, 329, 346, 349, 309, 97, 97, 359, 97, - 97, 97, 97, 97, 10, 339, 223, 861, 695, 546, - 473, 19, 697, 538, 482, 539, 481, 3, 58, 893, - 12, 893, 3, 224, 698, 788, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 13, 26, 97, 97, 97, 383, 97, 97, 820, 482, - 97, 384, 61, 97, 97, 437, 97, 562, 97, 309, - 97, 223, 97, 97, 26, 97, 97, 97, 97, 97, - 888, 97, 100, 97, 995, 345, 647, 618, 224, 100, - 100, 100, 309, 996, 100, 100, 100, 97, 100, 338, - 97, 97, 97, 97, 338, 97, 100, 97, 100, 100, - 100, 97, 346, 349, 359, 15, 699, 821, 100, 100, - 997, 100, 100, 100, 100, 100, 1016, 538, 546, 539, - 637, 697, 538, 339, 539, 861, 695, 359, 339, 695, - 861, 695, 359, 698, 788, 700, 558, 558, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 15, 226, 100, 100, 100, 820, 100, 100, - 15, 638, 100, 41, 41, 100, 100, 16, 100, 355, - 100, 699, 100, 355, 100, 100, 443, 100, 100, 100, - 100, 100, 419, 100, 22, 100, 637, 997, 888, 419, - 419, 419, 995, 888, 37, 419, 419, 995, 419, 100, - 700, 996, 100, 100, 100, 100, 996, 100, 226, 100, - 24, 821, 573, 100, 606, 699, 821, 24, 419, 419, - 40, 419, 419, 419, 419, 419, 637, 638, 997, 637, - 558, 443, 575, 997, 1016, 558, 619, 637, 289, 1016, - 45, 41, 41, 289, 700, 38, 314, 314, 419, 419, - 419, 419, 419, 419, 419, 419, 419, 419, 419, 419, - 419, 419, 378, 607, 419, 419, 419, 638, 419, 606, - 638, 619, 419, 632, 39, 419, 573, 573, 638, 111, - 419, 632, 419, 206, 419, 419, 573, 419, 419, 419, - 419, 419, 38, 419, 420, 419, 575, 575, 318, 750, - 38, 420, 420, 420, 413, 225, 575, 420, 420, 419, - 420, 342, 419, 419, 227, 419, 342, 419, 607, 420, - 228, 39, 353, 419, 314, 314, 378, 378, 378, 39, - 420, 420, 364, 420, 420, 420, 420, 420, 805, 364, - 805, 805, 805, 232, 805, 318, 944, 379, 944, 944, - 944, 413, 944, 318, 750, 17, 17, 264, 354, 413, - 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, - 420, 420, 420, 420, 353, 14, 420, 420, 420, 278, - 420, 353, 14, 279, 420, 380, 353, 420, 790, 282, - 353, 14, 420, 414, 420, 640, 420, 420, 790, 420, - 420, 420, 420, 420, 293, 420, 420, 420, 365, 353, - 354, 379, 379, 379, 381, 365, 294, 354, 296, 382, - 805, 420, 354, 385, 420, 420, 354, 420, 944, 420, - 608, 790, 790, 297, 366, 420, 790, 608, 608, 608, - 414, 366, 608, 608, 608, 354, 608, 640, 414, 380, - 380, 380, 298, 79, 640, 608, 608, 608, 608, 640, - 304, 46, 307, 640, 589, 79, 608, 608, 46, 608, - 608, 608, 608, 608, 222, 79, 308, 46, 381, 381, - 381, 222, 640, 382, 382, 382, 367, 385, 385, 385, - 222, 330, 333, 367, 330, 333, 608, 608, 608, 608, - 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, - 313, 589, 608, 608, 608, 468, 608, 608, 301, 589, - 608, 315, 368, 608, 608, 301, 608, 319, 608, 368, - 608, 322, 608, 608, 301, 608, 608, 608, 608, 608, - 557, 608, 608, 608, 327, 557, 369, 468, 331, 370, - 332, 468, 468, 369, 468, 468, 370, 608, 334, 824, - 608, 608, 608, 608, 824, 608, 609, 608, 20, 20, - 20, 608, 20, 609, 609, 609, 20, 20, 609, 609, - 609, 20, 609, 20, 20, 20, 20, 20, 20, 20, - 337, 337, 609, 609, 609, 20, 20, 20, 20, 20, - 20, 20, 609, 609, 20, 609, 609, 609, 609, 609, - 653, 20, 343, 653, 20, 20, 20, 20, 20, 20, - 20, 20, 344, 20, 20, 20, 348, 20, 20, 20, - 20, 20, 609, 609, 609, 609, 609, 609, 609, 609, - 609, 609, 609, 609, 609, 609, 522, 522, 609, 609, - 609, 20, 609, 609, 20, 350, 609, 20, 20, 609, - 609, 20, 609, 371, 609, 394, 609, 20, 609, 609, - 371, 609, 609, 609, 609, 609, 20, 609, 372, 609, - 400, 20, 20, 20, 20, 372, 20, 20, 20, 20, - 686, 686, 403, 609, 20, 20, 609, 609, 609, 609, - 405, 609, 20, 609, 20, 20, 20, 609, 0, 0, - 0, 0, 0, 0, 374, 829, 913, 0, 0, 913, - 829, 374, 0, 409, 0, 0, 0, 0, 0, 0, - 0, 411, 702, 793, 793, 412, 0, 0, 0, 0, - 0, 0, 0, 125, 421, 0, 985, 985, 125, 125, - 432, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 429, 0, 0, 0, 439, 0, 0, - 0, 0, 0, 432, 432, 432, 432, 432, 432, 432, - 432, 432, 432, 432, 702, 432, 432, 302, 451, 432, - 432, 702, 0, 452, 302, 0, 702, 453, 0, 0, - 702, 454, 0, 302, 0, 432, 479, 432, 0, 432, - 432, 838, 432, 432, 432, 432, 432, 0, 432, 702, - 483, 838, 0, 0, 0, 0, 303, 0, 0, 0, - 0, 498, 499, 303, 502, 0, 0, 504, 432, 509, - 432, 512, 303, 0, 520, 0, 0, 0, 33, 33, - 33, 33, 33, 33, 838, 838, 521, 33, 33, 838, - 523, 535, 33, 540, 33, 33, 33, 33, 33, 33, - 33, 541, 776, 560, 570, 578, 33, 33, 33, 33, - 33, 33, 33, 566, 566, 33, 580, 566, 566, 566, - 408, 33, 33, 33, 33, 33, 33, 33, 33, 33, - 33, 33, 33, 586, 33, 33, 33, 590, 33, 33, - 33, 33, 33, 408, 408, 408, 408, 408, 408, 408, - 408, 408, 408, 408, 776, 408, 408, 305, 595, 408, - 408, 776, 33, 600, 305, 33, 610, 612, 33, 33, - 776, 617, 33, 305, 33, 408, 624, 408, 33, 408, - 408, 626, 408, 408, 408, 408, 408, 33, 408, 776, - 631, 634, 33, 33, 33, 33, 320, 33, 33, 33, - 33, 636, 639, 320, 642, 33, 33, 643, 408, 646, - 648, 651, 320, 33, 657, 33, 33, 33, 123, 123, - 123, 123, 123, 123, 658, 660, 347, 123, 123, 661, - 662, 670, 123, 347, 123, 123, 123, 123, 123, 123, - 123, 678, 347, 682, 685, 688, 123, 123, 123, 123, - 123, 123, 123, 693, 696, 123, 705, 710, 729, 734, - 611, 123, 123, 123, 123, 123, 123, 123, 123, 123, - 123, 123, 123, 752, 123, 123, 123, 753, 123, 123, - 123, 123, 123, 611, 611, 611, 611, 611, 611, 611, - 611, 611, 611, 611, 357, 611, 611, 508, 755, 611, - 611, 357, 123, 756, 508, 123, 757, 759, 123, 123, - 357, 760, 123, 508, 123, 611, 761, 611, 123, 611, - 611, 762, 611, 611, 611, 611, 611, 123, 611, 766, - 770, 771, 123, 123, 123, 123, 549, 123, 123, 123, - 123, 775, 779, 549, 782, 123, 123, 783, 611, 786, - 789, 804, 549, 123, 806, 123, 123, 123, 208, 208, - 208, 208, 208, 208, 811, 814, 851, 208, 208, 823, - 827, 828, 208, 851, 208, 208, 208, 208, 208, 208, - 208, 831, 851, 832, 848, 852, 208, 208, 208, 208, - 208, 208, 208, 854, 849, 208, 849, 849, 849, 868, - 849, 208, 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, 869, 208, 208, 208, 873, 208, 208, - 208, 208, 208, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, 641, 21, 21, 917, 874, 21, - 21, 641, 208, 876, 917, 208, 641, 877, 208, 208, - 641, 879, 208, 917, 208, 21, 882, 21, 208, 21, - 21, 884, 21, 21, 21, 21, 21, 208, 21, 890, - 891, 897, 208, 208, 208, 208, 923, 208, 208, 208, - 208, 901, 903, 923, 906, 208, 208, 907, 21, 908, - 909, 911, 923, 208, 926, 208, 208, 208, 231, 231, - 231, 231, 231, 231, 946, 968, 924, 231, 231, 969, - 970, 975, 231, 924, 231, 231, 231, 231, 231, 231, - 231, 976, 924, 977, 978, 979, 231, 231, 231, 231, - 231, 231, 231, 980, 967, 231, 967, 967, 967, 981, - 967, 231, 231, 231, 231, 231, 231, 231, 231, 231, - 231, 231, 231, 983, 231, 231, 231, 986, 231, 231, - 231, 231, 231, 276, 276, 276, 276, 276, 276, 276, - 276, 276, 276, 276, 703, 276, 276, 925, 987, 276, - 276, 703, 231, 988, 925, 231, 703, 989, 231, 231, - 703, 990, 231, 925, 231, 276, 991, 276, 231, 276, - 276, 994, 276, 276, 276, 276, 276, 231, 276, 1007, - 1017, 1018, 231, 231, 231, 231, 927, 231, 231, 231, - 231, 1019, nil, 927, nil, 231, 231, nil, 276, nil, - nil, nil, 927, 231, nil, 231, 231, 231, 295, 295, - 295, 295, 295, 295, nil, nil, 974, 295, 295, nil, - nil, nil, 295, 974, 295, 295, 295, 295, 295, 295, - 295, nil, 974, nil, nil, nil, 295, 295, 295, 295, - 295, 295, 295, nil, nil, 295, 6, 6, 6, 6, - 6, 295, 295, 295, 295, 295, 295, 295, 295, 295, - 295, 295, 295, nil, 295, 295, 295, nil, 295, 295, - 295, 295, 295, 427, 427, 427, 427, 427, 427, 427, - 427, 427, 427, 427, 998, 427, 427, nil, nil, 427, - 427, 998, 295, nil, nil, 295, 998, nil, 295, 295, - 998, nil, 295, nil, 295, 427, nil, 427, 295, 427, - 427, nil, 427, 427, 427, 427, 427, 295, 427, nil, - nil, nil, 295, 295, 295, 295, nil, 295, 295, 295, - 295, nil, nil, nil, nil, 295, 295, nil, 427, nil, - nil, nil, nil, 295, nil, 295, 295, 295, 300, 300, - 300, 300, 300, 300, nil, nil, nil, 300, 300, nil, - nil, nil, 300, nil, 300, 300, 300, 300, 300, 300, - 300, 292, 292, 292, 292, 292, 300, 300, 300, 300, - 300, 300, 300, nil, nil, 300, 496, 496, 496, 496, - 496, 300, 300, 300, 300, 300, 300, 300, 300, 300, - 300, 300, 300, nil, 300, 300, 300, nil, 300, 300, - 300, 300, 300, 472, 472, 472, 472, 472, 472, 472, - 472, 472, 472, 472, nil, 472, 472, nil, nil, 472, - 472, nil, 300, nil, nil, 300, nil, nil, 300, 300, - nil, nil, 300, nil, 300, 472, nil, 472, 300, 472, - 472, nil, 472, 472, 472, 472, 472, 300, 472, nil, - nil, nil, 300, 300, 300, 300, nil, 300, 300, 300, - 300, nil, nil, nil, nil, 300, 300, 472, 472, nil, - nil, nil, nil, 300, nil, 300, 300, 300, 325, 325, - 325, 325, 325, 325, nil, nil, nil, 325, 325, nil, - nil, nil, 325, nil, 325, 325, 325, 325, 325, 325, - 325, nil, nil, nil, nil, nil, 325, 325, 325, 325, - 325, 325, 325, nil, nil, 325, nil, nil, nil, nil, - nil, 325, 325, 325, 325, 325, 325, 325, 325, 325, - 325, 325, 325, nil, 325, 325, 325, nil, 325, 325, - 325, 325, 325, 518, 518, 518, 518, 518, 518, 518, - 518, 518, 518, 518, nil, 518, 518, nil, nil, 518, - 518, nil, 325, nil, nil, 325, nil, nil, 325, 325, - nil, nil, 325, nil, 325, 518, nil, 518, 325, 518, - 518, nil, 518, 518, 518, 518, 518, 325, 518, nil, - nil, nil, 325, 325, 325, 325, nil, 325, 325, 325, - 325, nil, nil, nil, nil, 325, 325, nil, 518, nil, - nil, nil, nil, 325, nil, 325, 325, 325, 497, 497, - 497, 497, 497, 497, nil, nil, nil, 497, 497, nil, - nil, nil, 497, nil, 497, 497, 497, 497, 497, 497, - 497, nil, nil, nil, nil, nil, 497, 497, 497, 497, - 497, 497, 497, nil, nil, 497, nil, nil, nil, nil, - nil, 497, 497, 497, 497, 497, 497, 497, 497, 497, - 497, 497, 497, nil, 497, 497, 497, nil, 497, 497, - 497, 497, 497, 645, 645, 645, 645, 645, 645, 645, - 645, 645, 645, 645, nil, 645, 645, nil, nil, 645, - 645, nil, 497, nil, nil, 497, nil, nil, 497, 497, - nil, nil, 497, nil, 497, 645, nil, 645, 497, 645, - 645, nil, 645, 645, 645, 645, 645, 497, 645, nil, - nil, nil, 497, 497, 497, 497, nil, 497, 497, 497, - 497, nil, nil, nil, nil, 497, 497, nil, 645, nil, - nil, nil, nil, 497, nil, 497, 497, 497, 534, 534, - 534, 534, 534, 534, nil, nil, nil, 534, 534, nil, - nil, nil, 534, nil, 534, 534, 534, 534, 534, 534, - 534, nil, nil, nil, nil, nil, 534, 534, 534, 534, - 534, 534, 534, nil, nil, 534, nil, nil, nil, nil, - nil, 534, 534, 534, 534, 534, 534, 534, 534, 534, - 534, 534, 534, nil, 534, 534, 534, nil, 534, 534, - 534, 534, 534, 731, 731, 731, 731, 731, 731, 731, - 731, 731, 731, 731, nil, 731, 731, nil, nil, 731, - 731, nil, 534, nil, nil, 534, nil, nil, 534, 534, - nil, nil, 534, nil, 534, 731, nil, 731, 534, 731, - 731, nil, 731, 731, 731, 731, 731, 534, 731, nil, - nil, nil, 534, 534, 534, 534, nil, 534, 534, 534, - 534, nil, nil, nil, nil, 534, 534, nil, 731, nil, - nil, nil, nil, 534, nil, 534, 534, 534, 537, 537, - 537, 537, 537, 537, nil, nil, nil, 537, 537, nil, - nil, nil, 537, nil, 537, 537, 537, 537, 537, 537, - 537, nil, nil, nil, nil, nil, 537, 537, 537, 537, - 537, 537, 537, nil, nil, 537, nil, nil, nil, nil, - nil, 537, 537, 537, 537, 537, 537, 537, 537, 537, - 537, 537, 537, nil, 537, 537, 537, nil, 537, 537, - 537, 537, 537, 736, 736, 736, 736, 736, 736, 736, - 736, 736, 736, 736, nil, 736, 736, nil, nil, 736, - 736, nil, 537, nil, nil, 537, nil, nil, 537, 537, - nil, nil, 537, nil, 537, 736, nil, 736, 537, 736, - 736, nil, 736, 736, 736, 736, 736, 537, 736, nil, - nil, nil, 537, 537, 537, 537, nil, 537, 537, 537, - 537, nil, nil, nil, nil, 537, 537, nil, 736, nil, - nil, nil, nil, 537, nil, 537, 537, 537, 559, 559, - 559, 559, 559, 559, nil, nil, nil, 559, 559, nil, - nil, nil, 559, nil, 559, 559, 559, 559, 559, 559, - 559, nil, nil, nil, nil, nil, 559, 559, 559, 559, - 559, 559, 559, nil, nil, 559, nil, nil, nil, nil, - nil, 559, 559, 559, 559, 559, 559, 559, 559, 559, - 559, 559, 559, nil, 559, 559, 559, nil, 559, 559, - 559, 559, 559, 738, 738, 738, 738, 738, 738, 738, - 738, 738, 738, 738, nil, 738, 738, nil, nil, 738, - 738, nil, 559, nil, nil, 559, nil, nil, 559, 559, - nil, nil, 559, nil, 559, 738, nil, 738, 559, 738, - 738, nil, 738, 738, 738, 738, 738, 559, 738, nil, - nil, nil, 559, 559, 559, 559, nil, 559, 559, 559, - 559, nil, nil, nil, nil, 559, 559, nil, 738, nil, - nil, nil, nil, 559, nil, 559, 559, 559, 616, 616, - 616, 616, 616, 616, nil, nil, nil, 616, 616, nil, - nil, nil, 616, nil, 616, 616, 616, 616, 616, 616, - 616, nil, nil, nil, nil, nil, 616, 616, 616, 616, - 616, 616, 616, nil, nil, 616, nil, nil, nil, nil, - nil, 616, 616, 616, 616, 616, 616, 616, 616, 616, - 616, 616, 616, nil, 616, 616, 616, nil, 616, 616, - 616, 616, 616, 741, 741, 741, 741, 741, 741, 741, - 741, 741, 741, 741, nil, 741, 741, nil, nil, 741, - 741, nil, 616, nil, nil, 616, nil, nil, 616, 616, - nil, nil, 616, nil, 616, 741, nil, 741, 616, 741, - 741, nil, 741, 741, 741, 741, 741, 616, 741, nil, - nil, nil, 616, 616, 616, 616, nil, 616, 616, 616, - 616, nil, nil, nil, nil, 616, 616, nil, 741, nil, - nil, nil, nil, 616, nil, 616, 616, 616, 621, 621, - 621, 621, 621, 621, nil, nil, nil, 621, 621, nil, - nil, nil, 621, nil, 621, 621, 621, 621, 621, 621, - 621, nil, nil, nil, nil, nil, 621, 621, 621, 621, - 621, 621, 621, nil, nil, 621, nil, nil, nil, nil, - nil, 621, 621, 621, 621, 621, 621, 621, 621, 621, - 621, 621, 621, nil, 621, 621, 621, nil, 621, 621, - 621, 621, 621, 743, 743, 743, 743, 743, 743, 743, - 743, 743, 743, 743, nil, 743, 743, nil, nil, 743, - 743, nil, 621, nil, nil, 621, nil, nil, 621, 621, - nil, nil, 621, nil, 621, 743, nil, 743, 621, 743, - 743, nil, 743, 743, 743, 743, 743, 621, 743, nil, - nil, nil, 621, 621, 621, 621, nil, 621, 621, 621, - 621, nil, nil, nil, nil, 621, 621, nil, 743, nil, - nil, nil, nil, 621, nil, 621, 621, 621, 622, 622, - 622, 622, 622, 622, nil, nil, nil, 622, 622, nil, - nil, nil, 622, nil, 622, 622, 622, 622, 622, 622, - 622, nil, nil, nil, nil, nil, 622, 622, 622, 622, - 622, 622, 622, nil, nil, 622, nil, nil, nil, nil, - nil, 622, 622, 622, 622, 622, 622, 622, 622, 622, - 622, 622, 622, nil, 622, 622, 622, nil, 622, 622, - 622, 622, 622, 745, 745, 745, 745, 745, 745, 745, - 745, 745, 745, 745, nil, 745, 745, nil, nil, 745, - 745, nil, 622, nil, nil, 622, nil, nil, 622, 622, - nil, nil, 622, nil, 622, 745, nil, 745, 622, 745, - 745, nil, 745, 745, 745, 745, 745, 622, 745, nil, - nil, nil, 622, 622, 622, 622, nil, 622, 622, 622, - 622, nil, nil, nil, nil, 622, 622, nil, 745, nil, - nil, nil, nil, 622, nil, 622, 622, 622, 706, 706, - 706, 706, 706, 706, nil, nil, nil, 706, 706, nil, - nil, nil, 706, nil, 706, 706, 706, 706, 706, 706, - 706, nil, nil, nil, nil, nil, 706, 706, 706, 706, - 706, 706, 706, nil, nil, 706, nil, nil, nil, nil, - nil, 706, 706, 706, 706, 706, 706, 706, 706, 706, - 706, 706, 706, nil, 706, 706, 706, nil, 706, 706, - 706, 706, 706, 834, 834, 834, 834, 834, 834, 834, - 834, 834, 834, 834, nil, 834, 834, nil, nil, 834, - 834, nil, 706, nil, nil, 706, nil, nil, 706, 706, - nil, nil, 706, nil, 706, 834, nil, 834, 706, 834, - 834, nil, 834, 834, 834, 834, 834, 706, 834, nil, - nil, nil, 706, 706, 706, 706, nil, 706, 706, 706, - 706, nil, nil, nil, nil, 706, 706, nil, 834, nil, - nil, nil, nil, 706, nil, 706, 706, 706, 711, 711, - 711, 711, 711, 711, nil, nil, nil, 711, 711, nil, - nil, nil, 711, nil, 711, 711, 711, 711, 711, 711, - 711, nil, nil, nil, nil, nil, 711, 711, 711, 711, - 711, 711, 711, nil, nil, 711, nil, nil, nil, nil, - nil, 711, 711, 711, 711, 711, 711, 711, 711, 711, - 711, 711, 711, nil, 711, 711, 711, nil, 711, 711, - 711, 711, 711, 837, 837, 837, 837, 837, 837, 837, - 837, 837, 837, 837, nil, 837, 837, nil, nil, 837, - 837, nil, 711, nil, nil, 711, nil, nil, 711, 711, - nil, nil, 711, nil, 711, 837, nil, 837, 711, 837, - 837, nil, 837, 837, 837, 837, 837, 711, 837, nil, - nil, nil, 711, 711, 711, 711, nil, 711, 711, 711, - 711, nil, nil, nil, nil, 711, 711, nil, 837, nil, - nil, nil, nil, 711, nil, 711, 711, 711, 721, 721, - 721, 721, 721, 721, nil, nil, nil, 721, 721, nil, - nil, nil, 721, nil, 721, 721, 721, 721, 721, 721, - 721, nil, nil, nil, nil, nil, 721, 721, 721, 721, - 721, 721, 721, nil, 671, 721, 671, 671, 671, nil, - 671, 721, 721, 721, 721, 721, 721, 721, 721, 721, - 721, 721, 721, nil, 721, 721, 721, nil, 721, 721, - 721, 721, 721, 802, nil, 802, 802, 802, nil, 802, - nil, 671, nil, nil, 449, nil, nil, nil, nil, nil, - 671, nil, 721, nil, nil, 721, nil, nil, 721, 721, - nil, nil, 721, nil, 721, nil, nil, nil, 721, nil, - 802, nil, nil, nil, nil, nil, 449, 721, nil, 802, - 449, 449, 721, 721, 721, 721, nil, 721, 721, 721, - 721, nil, nil, nil, nil, 721, 721, nil, 883, nil, - 883, 883, 883, 721, 883, 721, 721, 721, 769, 769, - 769, 769, 769, 769, nil, nil, nil, 769, 769, nil, - nil, nil, 769, nil, 769, 769, 769, 769, 769, 769, - 769, nil, nil, nil, nil, 883, 769, 769, 769, 769, - 769, 769, 769, nil, 883, 769, nil, nil, nil, nil, - nil, 769, 769, 769, 769, 769, 769, 769, 769, 769, - 769, 769, 769, nil, 769, 769, 769, nil, 769, 769, - 769, 769, 769, 447, 447, 447, 447, 447, 447, 447, - 447, 447, 447, 447, nil, 447, 447, nil, nil, 447, - 447, nil, 769, nil, nil, 769, nil, nil, 769, 769, - nil, 469, 769, nil, 769, 447, nil, 447, 769, 447, - 447, nil, 447, 447, 447, 447, 447, 769, 447, nil, - nil, nil, 769, 769, 769, 769, nil, 769, 769, 769, - 769, nil, nil, 469, nil, 769, 769, 469, 469, nil, - 469, 469, nil, 769, nil, 769, 769, 769, 781, 781, - 781, 781, 781, 781, nil, nil, nil, 781, 781, nil, - nil, nil, 781, nil, 781, 781, 781, 781, 781, 781, - 781, nil, nil, nil, nil, nil, 781, 781, 781, 781, - 781, 781, 781, nil, nil, 781, nil, nil, nil, nil, - nil, 781, 781, 781, 781, 781, 781, 781, 781, 781, - 781, 781, 781, nil, 781, 781, 781, nil, 781, 781, - 781, 781, 781, 448, 448, 448, 448, 448, 448, 448, - 448, 448, 448, 448, nil, 448, 448, nil, nil, 448, - 448, nil, 781, nil, nil, 781, nil, nil, 781, 781, - nil, 450, 781, nil, 781, 448, nil, 448, 781, 448, - 448, nil, 448, 448, 448, 448, 448, 781, 448, nil, - nil, nil, 781, 781, 781, 781, nil, 781, 781, 781, - 781, nil, nil, 450, nil, 781, 781, 450, 450, nil, - nil, nil, nil, 781, nil, 781, 781, 781, 815, 815, - 815, 815, 815, 815, nil, nil, nil, 815, 815, nil, - nil, nil, 815, nil, 815, 815, 815, 815, 815, 815, - 815, nil, nil, nil, nil, nil, 815, 815, 815, 815, - 815, 815, 815, nil, 885, 815, 885, 885, 885, nil, - 885, 815, 815, 815, 815, 815, 815, 815, 815, 815, - 815, 815, 815, nil, 815, 815, 815, nil, 815, 815, - 815, 815, 815, 458, 458, 458, 458, 458, 458, 458, - nil, 885, 458, 458, nil, nil, nil, nil, nil, 458, - 458, nil, 815, nil, nil, 815, nil, nil, 815, 815, - nil, nil, 815, nil, 815, 458, nil, 458, 815, 458, - 458, nil, 458, 458, 458, 458, 458, 815, 458, nil, - nil, nil, 815, 815, 815, 815, nil, 815, 815, 815, - 815, nil, nil, nil, nil, 815, 815, nil, 945, nil, - 945, 945, 945, 815, 945, 815, 815, 815, 816, 816, - 816, 816, 816, 816, nil, nil, nil, 816, 816, nil, - nil, nil, 816, nil, 816, 816, 816, 816, 816, 816, - 816, nil, nil, nil, nil, 945, 816, 816, 816, 816, - 816, 816, 816, nil, 982, 816, 982, 982, 982, nil, - 982, 816, 816, 816, 816, 816, 816, 816, 816, 816, - 816, 816, 816, nil, 816, 816, 816, nil, 816, 816, - 816, 816, 816, 459, 984, nil, 984, 984, 984, nil, - 984, 982, 1006, nil, 1006, 1006, 1006, nil, 1006, 459, - 459, nil, 816, nil, nil, 816, nil, nil, 816, 816, - nil, nil, 816, nil, 816, 459, nil, 459, 816, 459, - 459, 984, 459, 459, nil, nil, 459, 816, 459, 1006, - nil, nil, 816, 816, 816, 816, nil, 816, 816, 816, - 816, nil, nil, nil, nil, 816, 816, nil, nil, nil, - nil, nil, nil, 816, nil, 816, 816, 816, 819, 819, - 819, 819, 819, 819, nil, nil, nil, 819, 819, nil, - nil, nil, 819, nil, 819, 819, 819, 819, 819, 819, - 819, nil, nil, nil, nil, nil, 819, 819, 819, 819, - 819, 819, 819, nil, nil, 819, nil, nil, nil, nil, - nil, 819, 819, 819, 819, 819, 819, 819, 819, 819, - 819, 819, 819, nil, 819, 819, 819, nil, 819, 819, - 819, 819, 819, 460, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 460, - 460, nil, 819, nil, nil, 819, nil, nil, 819, 819, - nil, nil, 819, nil, 819, 460, nil, 460, 819, 460, - 460, nil, 460, 460, nil, nil, 460, 819, 460, nil, - nil, nil, 819, 819, 819, 819, nil, 819, 819, 819, - 819, nil, nil, nil, nil, 819, 819, nil, nil, nil, - nil, nil, nil, 819, nil, 819, 819, 819, 825, 825, - 825, 825, 825, 825, nil, nil, nil, 825, 825, nil, - nil, nil, 825, nil, 825, 825, 825, 825, 825, 825, - 825, nil, nil, nil, nil, nil, 825, 825, 825, 825, - 825, 825, 825, nil, nil, 825, nil, nil, nil, nil, - nil, 825, 825, 825, 825, 825, 825, 825, 825, 825, - 825, 825, 825, nil, 825, 825, 825, nil, 825, 825, - 825, 825, 825, 461, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 461, - 461, nil, 825, nil, nil, 825, nil, nil, 825, 825, - nil, nil, 825, nil, 825, 461, nil, 461, 825, 461, - 461, nil, 461, 461, nil, nil, 461, 825, 461, nil, - nil, nil, 825, 825, 825, 825, nil, 825, 825, 825, - 825, nil, nil, nil, nil, 825, 825, nil, nil, nil, - nil, nil, nil, 825, nil, 825, 825, 825, 858, 858, - 858, 858, 858, 858, nil, nil, nil, 858, 858, nil, - nil, nil, 858, nil, 858, 858, 858, 858, 858, 858, - 858, nil, nil, nil, nil, nil, 858, 858, 858, 858, - 858, 858, 858, nil, nil, 858, nil, nil, nil, nil, - nil, 858, 858, 858, 858, 858, 858, 858, 858, 858, - 858, 858, 858, nil, 858, 858, 858, nil, 858, 858, - 858, 858, 858, 462, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 462, - 462, nil, 858, nil, nil, 858, nil, nil, 858, 858, - nil, nil, 858, nil, 858, 462, nil, 462, 858, 462, - 462, nil, 462, 462, nil, nil, 462, 858, 462, nil, - nil, nil, 858, 858, 858, 858, nil, 858, 858, 858, - 858, nil, nil, nil, nil, 858, 858, nil, nil, nil, - nil, nil, nil, 858, nil, 858, 858, 858, 922, 922, - 922, 922, 922, 922, nil, nil, nil, 922, 922, nil, - nil, nil, 922, nil, 922, 922, 922, 922, 922, 922, - 922, nil, nil, nil, nil, nil, 922, 922, 922, 922, - 922, 922, 922, nil, nil, 922, nil, nil, nil, nil, - nil, 922, 922, 922, 922, 922, 922, 922, 922, 922, - 922, 922, 922, nil, 922, 922, 922, nil, 922, 922, - 922, 922, 922, 463, 463, 463, 463, 463, 463, 463, - nil, nil, 463, 463, nil, nil, nil, nil, nil, 463, - 463, nil, 922, nil, nil, 922, nil, nil, 922, 922, - nil, nil, 922, nil, 922, 463, nil, 463, 922, 463, - 463, nil, 463, 463, 463, 463, 463, 922, 463, nil, - nil, nil, 922, 922, 922, 922, nil, 922, 922, 922, - 922, nil, nil, nil, nil, 922, 922, nil, nil, nil, - nil, nil, nil, 922, nil, 922, 922, 922, 929, 929, - 929, 929, 929, 929, nil, nil, nil, 929, 929, nil, - nil, nil, 929, nil, 929, 929, 929, 929, 929, 929, - 929, nil, nil, nil, nil, nil, 929, 929, 929, 929, - 929, 929, 929, nil, nil, 929, nil, nil, nil, nil, - nil, 929, 929, 929, 929, 929, 929, 929, 929, 929, - 929, 929, 929, nil, 929, 929, 929, nil, 929, 929, - 929, 929, 929, 464, 464, 464, 464, 464, 464, 464, - nil, nil, 464, 464, nil, nil, nil, nil, nil, 464, - 464, nil, 929, nil, nil, 929, nil, nil, 929, 929, - nil, nil, 929, nil, 929, 464, nil, 464, 929, 464, - 464, nil, 464, 464, 464, 464, 464, 929, 464, nil, - nil, nil, 929, 929, 929, 929, nil, 929, 929, 929, - 929, nil, nil, nil, nil, 929, 929, nil, nil, nil, - nil, nil, nil, 929, nil, 929, 929, 929, 930, 930, - 930, 930, 930, 930, nil, nil, nil, 930, 930, nil, - nil, nil, 930, nil, 930, 930, 930, 930, 930, 930, - 930, nil, nil, nil, nil, nil, 930, 930, 930, 930, - 930, 930, 930, nil, nil, 930, nil, nil, nil, nil, - nil, 930, 930, 930, 930, 930, 930, 930, 930, 930, - 930, 930, 930, nil, 930, 930, 930, nil, 930, 930, - 930, 930, 930, 465, 465, 465, 465, 465, 465, 465, - nil, nil, 465, 465, nil, nil, nil, nil, nil, 465, - 465, nil, 930, nil, nil, 930, nil, nil, 930, 930, - nil, nil, 930, nil, 930, 465, nil, 465, 930, 465, - 465, nil, 465, 465, 465, 465, 465, 930, 465, nil, - nil, nil, 930, 930, 930, 930, nil, 930, 930, 930, - 930, nil, nil, nil, nil, 930, 930, nil, nil, nil, - nil, nil, nil, 930, nil, 930, 930, 930, 947, 947, - 947, 947, 947, 947, nil, nil, nil, 947, 947, nil, - nil, nil, 947, nil, 947, 947, 947, 947, 947, 947, - 947, nil, nil, nil, nil, nil, 947, 947, 947, 947, - 947, 947, 947, nil, nil, 947, nil, nil, nil, nil, - nil, 947, 947, 947, 947, 947, 947, 947, 947, 947, - 947, 947, 947, nil, 947, 947, 947, nil, 947, 947, - 947, 947, 947, 466, 466, 466, 466, 466, 466, 466, - nil, nil, 466, 466, nil, nil, nil, nil, nil, 466, - 466, nil, 947, nil, nil, 947, nil, nil, 947, 947, - nil, nil, 947, nil, 947, 466, nil, 466, 947, 466, - 466, nil, 466, 466, 466, 466, 466, 947, 466, nil, - nil, nil, 947, 947, 947, 947, nil, 947, 947, 947, - 947, nil, nil, nil, nil, 947, 947, nil, nil, nil, - nil, nil, nil, 947, nil, 947, 947, 947, 953, 953, - 953, 953, 953, 953, nil, nil, nil, 953, 953, nil, - nil, nil, 953, nil, 953, 953, 953, 953, 953, 953, - 953, nil, nil, nil, nil, nil, 953, 953, 953, 953, - 953, 953, 953, nil, nil, 953, nil, nil, nil, nil, - nil, 953, 953, 953, 953, 953, 953, 953, 953, 953, - 953, 953, 953, nil, 953, 953, 953, nil, 953, 953, - 953, 953, 953, 467, 467, 467, 467, 467, 467, 467, - nil, nil, 467, 467, nil, nil, nil, nil, nil, 467, - 467, nil, 953, nil, nil, 953, nil, nil, 953, 953, - nil, nil, 953, nil, 953, 467, nil, 467, 953, 467, - 467, nil, 467, 467, 467, 467, 467, 953, 467, nil, - nil, nil, 953, 953, 953, 953, nil, 953, 953, 953, - 953, nil, nil, nil, nil, 953, 953, nil, nil, nil, - nil, nil, nil, 953, nil, 953, 953, 953, 955, 955, - 955, 955, 955, 955, nil, nil, nil, 955, 955, nil, - nil, nil, 955, nil, 955, 955, 955, 955, 955, 955, - 955, nil, nil, nil, nil, nil, 955, 955, 955, 955, - 955, 955, 955, nil, nil, 955, nil, nil, nil, nil, - nil, 955, 955, 955, 955, 955, 955, 955, 955, 955, - 955, 955, 955, nil, 955, 955, 955, nil, 955, 955, - 955, 955, 955, 470, 470, 470, 470, 470, 470, 470, - nil, nil, 470, 470, nil, nil, nil, nil, nil, 470, - 470, nil, 955, nil, nil, 955, nil, nil, 955, 955, - nil, nil, 955, nil, 955, 470, nil, 470, 955, 470, - 470, nil, 470, 470, 470, 470, 470, 955, 470, nil, - nil, nil, 955, 955, 955, 955, nil, 955, 955, 955, - 955, nil, nil, nil, nil, 955, 955, nil, nil, nil, - nil, nil, nil, 955, nil, 955, 955, 955, 5, 5, - 5, 5, 5, nil, nil, nil, 5, 5, nil, nil, - nil, 5, nil, 5, 5, 5, 5, 5, 5, 5, - nil, nil, nil, nil, nil, 5, 5, 5, 5, 5, - 5, 5, nil, nil, 5, nil, nil, nil, nil, nil, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, nil, 5, 5, 5, nil, 5, 5, 5, - 5, 5, 471, 471, 471, 471, 471, 471, 471, 471, - nil, 471, 471, nil, nil, nil, nil, nil, 471, 471, - nil, 5, nil, nil, 5, nil, nil, 5, 5, nil, - nil, 5, nil, 5, 471, nil, 471, 5, 471, 471, - nil, 471, 471, 471, 471, 471, 5, 471, nil, nil, - nil, 5, 5, 5, 5, nil, 5, 5, 5, 5, - nil, nil, nil, nil, 5, 5, nil, nil, nil, 29, - 29, 29, 5, 29, 5, 5, 5, 29, 29, nil, - nil, nil, 29, nil, 29, 29, 29, 29, 29, 29, - 29, nil, nil, nil, nil, nil, 29, 29, 29, 29, - 29, 29, 29, nil, nil, 29, nil, nil, nil, nil, - nil, nil, 29, nil, nil, 29, 29, 29, 29, 29, - 29, 29, 29, 29, 29, 29, 29, nil, 29, 29, - 29, 29, 29, 455, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 455, - 455, nil, 29, nil, nil, 29, nil, nil, 29, 29, - nil, nil, 29, nil, 29, 455, 29, 455, 29, 455, - 455, 29, 455, 455, nil, nil, nil, 29, nil, nil, - nil, nil, 29, 29, 29, 29, nil, 29, 29, 29, - 29, nil, nil, nil, nil, 29, 29, nil, nil, nil, - 30, 30, 30, 29, 30, 29, 29, 29, 30, 30, - nil, nil, nil, 30, nil, 30, 30, 30, 30, 30, - 30, 30, nil, nil, nil, nil, nil, 30, 30, 30, - 30, 30, 30, 30, nil, nil, 30, nil, nil, nil, - nil, nil, nil, 30, nil, nil, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, nil, 30, - 30, 30, 30, 30, 456, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 456, 456, nil, 30, nil, nil, 30, nil, nil, 30, - 30, nil, nil, 30, nil, 30, 456, 30, 456, 30, - 456, 456, 30, 456, 456, nil, nil, nil, 30, nil, - nil, nil, nil, 30, 30, 30, 30, nil, 30, 30, - 30, 30, nil, nil, nil, nil, 30, 30, nil, nil, - nil, 31, 31, 31, 30, 31, 30, 30, 30, 31, - 31, nil, nil, nil, 31, nil, 31, 31, 31, 31, - 31, 31, 31, nil, nil, nil, nil, nil, 31, 31, - 31, 31, 31, 31, 31, nil, nil, 31, nil, nil, - nil, nil, nil, nil, 31, nil, nil, 31, 31, 31, - 31, 31, 31, 31, 31, 31, 31, 31, 31, nil, - 31, 31, 31, 31, 31, 457, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 457, 457, nil, 31, nil, nil, 31, nil, nil, - 31, 31, nil, nil, 31, nil, 31, 457, 31, nil, - 31, 457, 457, 31, 457, 457, nil, nil, nil, 31, - nil, nil, nil, nil, 31, 31, 31, 31, nil, 31, - 31, 31, 31, nil, nil, nil, nil, 31, 31, nil, - nil, nil, 34, 34, 34, 31, 34, 31, 31, 31, - 34, 34, nil, nil, nil, 34, nil, 34, 34, 34, - 34, 34, 34, 34, nil, nil, nil, nil, nil, 34, - 34, 34, 34, 34, 34, 34, nil, nil, 34, nil, - nil, nil, nil, nil, nil, 34, nil, nil, 34, 34, - 34, 34, 34, 34, 34, 34, nil, 34, 34, 34, - nil, 34, 34, nil, nil, 34, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 34, nil, nil, 34, nil, - nil, 34, 34, nil, nil, 34, nil, 34, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 34, 34, 34, 34, nil, - 34, 34, 34, 34, nil, nil, nil, nil, 34, 34, - nil, nil, nil, 35, 35, 35, 34, 35, 34, 34, - 34, 35, 35, nil, nil, nil, 35, nil, 35, 35, - 35, 35, 35, 35, 35, nil, nil, nil, nil, nil, - 35, 35, 35, 35, 35, 35, 35, nil, nil, 35, - nil, nil, nil, nil, nil, nil, 35, nil, nil, 35, - 35, 35, 35, 35, 35, 35, 35, nil, 35, 35, - 35, nil, 35, 35, nil, nil, 35, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 35, nil, nil, 35, - nil, nil, 35, 35, nil, nil, 35, nil, nil, 798, - nil, 798, 798, 798, 798, 798, nil, nil, nil, nil, - nil, nil, nil, nil, 798, nil, 35, 35, 35, 35, - nil, 35, 35, 35, 35, nil, nil, nil, nil, 35, - 35, nil, nil, nil, 35, nil, 798, 35, nil, 35, - 35, 35, 42, 42, 42, nil, 42, 798, 798, nil, - 42, 42, 798, nil, nil, 42, nil, 42, 42, 42, - 42, 42, 42, 42, nil, nil, nil, nil, nil, 42, - 42, 42, 42, 42, 42, 42, nil, nil, 42, nil, - nil, nil, nil, nil, nil, 42, nil, nil, 42, 42, - 42, 42, 42, 42, 42, 42, nil, 42, 42, 42, - nil, 42, 42, 42, 42, 42, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 42, nil, nil, 42, nil, - nil, 42, 42, nil, nil, 42, nil, nil, nil, nil, - nil, 42, nil, nil, nil, nil, nil, nil, nil, nil, - 42, nil, nil, nil, nil, 42, 42, 42, 42, nil, - 42, 42, 42, 42, nil, nil, nil, nil, 42, 42, - nil, nil, nil, 43, 43, 43, 42, 43, 42, 42, - 42, 43, 43, nil, nil, nil, 43, nil, 43, 43, - 43, 43, 43, 43, 43, nil, nil, nil, nil, nil, - 43, 43, 43, 43, 43, 43, 43, nil, nil, 43, - nil, nil, nil, nil, nil, nil, 43, nil, nil, 43, - 43, 43, 43, 43, 43, 43, 43, nil, 43, 43, - 43, nil, 43, 43, 43, 43, 43, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 43, nil, nil, 43, - nil, nil, 43, 43, nil, nil, 43, nil, nil, nil, - nil, nil, 43, nil, nil, nil, nil, nil, nil, nil, - nil, 43, nil, nil, nil, nil, 43, 43, 43, 43, - nil, 43, 43, 43, 43, nil, nil, nil, nil, 43, - 43, nil, nil, nil, 44, 44, 44, 43, 44, 43, - 43, 43, 44, 44, nil, nil, nil, 44, nil, 44, - 44, 44, 44, 44, 44, 44, nil, nil, nil, nil, - nil, 44, 44, 44, 44, 44, 44, 44, nil, nil, - 44, nil, nil, nil, nil, nil, nil, 44, nil, nil, - 44, 44, 44, 44, 44, 44, 44, 44, nil, 44, - 44, 44, nil, 44, 44, 44, 44, 44, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 44, nil, nil, - 44, nil, nil, 44, 44, nil, nil, 44, nil, nil, - nil, nil, nil, 44, nil, nil, nil, nil, nil, nil, - nil, nil, 44, nil, nil, nil, nil, 44, 44, 44, - 44, nil, 44, 44, 44, 44, nil, nil, nil, nil, - 44, 44, nil, nil, nil, 59, 59, 59, 44, 59, - 44, 44, 44, 59, 59, nil, nil, nil, 59, nil, - 59, 59, 59, 59, 59, 59, 59, nil, nil, nil, - nil, nil, 59, 59, 59, 59, 59, 59, 59, nil, - nil, 59, nil, nil, nil, nil, nil, nil, 59, nil, - nil, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, nil, 59, 59, 59, 59, 59, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 59, nil, - nil, 59, nil, nil, 59, 59, nil, nil, 59, nil, - 59, nil, nil, nil, 59, nil, nil, 59, nil, nil, - nil, nil, nil, 59, nil, nil, nil, nil, 59, 59, - 59, 59, nil, 59, 59, 59, 59, nil, nil, nil, - nil, 59, 59, nil, nil, nil, 60, 60, 60, 59, - 60, 59, 59, 59, 60, 60, nil, nil, nil, 60, - nil, 60, 60, 60, 60, 60, 60, 60, nil, nil, - nil, nil, nil, 60, 60, 60, 60, 60, 60, 60, - nil, nil, 60, nil, nil, nil, nil, nil, nil, 60, - nil, nil, 60, 60, 60, 60, 60, 60, 60, 60, - 60, 60, 60, 60, nil, 60, 60, 60, 60, 60, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 60, - nil, nil, 60, nil, nil, 60, 60, nil, nil, 60, - nil, nil, nil, nil, nil, 60, nil, nil, 60, nil, - nil, nil, nil, nil, 60, nil, nil, nil, nil, 60, - 60, 60, 60, nil, 60, 60, 60, 60, nil, nil, - nil, nil, 60, 60, nil, nil, nil, 63, 63, 63, - 60, 63, 60, 60, 60, 63, 63, nil, nil, nil, - 63, nil, 63, 63, 63, 63, 63, 63, 63, nil, - nil, nil, nil, nil, 63, 63, 63, 63, 63, 63, - 63, nil, nil, 63, nil, nil, nil, nil, nil, nil, - 63, nil, nil, 63, 63, 63, 63, 63, 63, 63, - 63, nil, 63, 63, 63, nil, 63, 63, 63, 63, - 63, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 63, nil, nil, 63, nil, nil, 63, 63, nil, nil, - 63, nil, nil, nil, nil, nil, 63, nil, nil, nil, - nil, nil, nil, nil, nil, 63, nil, nil, nil, nil, - 63, 63, 63, 63, nil, 63, 63, 63, 63, nil, - nil, nil, nil, 63, 63, nil, nil, nil, 64, 64, - 64, 63, 64, 63, 63, 63, 64, 64, nil, nil, - nil, 64, nil, 64, 64, 64, 64, 64, 64, 64, - nil, nil, nil, nil, nil, 64, 64, 64, 64, 64, - 64, 64, nil, nil, 64, nil, nil, nil, nil, nil, - nil, 64, nil, nil, 64, 64, 64, 64, 64, 64, - 64, 64, nil, 64, 64, 64, nil, 64, 64, 64, - 64, 64, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 64, nil, nil, 64, nil, nil, 64, 64, nil, - nil, 64, nil, nil, nil, nil, nil, 64, nil, nil, - nil, nil, nil, nil, nil, nil, 64, nil, nil, nil, - nil, 64, 64, 64, 64, nil, 64, 64, 64, 64, - nil, nil, nil, nil, 64, 64, nil, nil, nil, 67, - 67, 67, 64, 67, 64, 64, 64, 67, 67, nil, - nil, nil, 67, nil, 67, 67, 67, 67, 67, 67, - 67, nil, nil, nil, nil, nil, 67, 67, 67, 67, - 67, 67, 67, nil, nil, 67, nil, nil, nil, nil, - nil, nil, 67, nil, nil, 67, 67, 67, 67, 67, - 67, 67, 67, nil, 67, 67, 67, nil, 67, 67, - 67, 67, 67, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 67, nil, nil, 67, nil, nil, 67, 67, - nil, nil, 67, nil, nil, nil, nil, nil, 67, nil, - nil, nil, nil, nil, nil, nil, nil, 67, nil, nil, - nil, nil, 67, 67, 67, 67, nil, 67, 67, 67, - 67, nil, nil, nil, nil, 67, 67, 67, nil, nil, - nil, nil, 67, 67, nil, 67, 67, 67, 68, 68, - 68, nil, 68, nil, nil, nil, 68, 68, nil, nil, - nil, 68, nil, 68, 68, 68, 68, 68, 68, 68, - nil, nil, nil, nil, nil, 68, 68, 68, 68, 68, - 68, 68, nil, nil, 68, nil, nil, nil, nil, nil, - nil, 68, nil, nil, 68, 68, 68, 68, 68, 68, - 68, 68, nil, 68, 68, 68, nil, 68, 68, nil, - nil, 68, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 68, nil, nil, 68, nil, nil, 68, 68, nil, - nil, 68, nil, 68, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 68, 68, 68, 68, nil, 68, 68, 68, 68, - nil, nil, nil, nil, 68, 68, nil, nil, nil, 69, - 69, 69, 68, 69, 68, 68, 68, 69, 69, nil, - nil, nil, 69, nil, 69, 69, 69, 69, 69, 69, - 69, nil, nil, nil, nil, nil, 69, 69, 69, 69, - 69, 69, 69, nil, nil, 69, nil, nil, nil, nil, - nil, nil, 69, nil, nil, 69, 69, 69, 69, 69, - 69, 69, 69, nil, 69, 69, 69, nil, 69, 69, - nil, nil, 69, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 69, - nil, nil, 69, nil, nil, 69, nil, nil, 69, 69, - nil, nil, 69, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 69, 69, 69, 69, nil, 69, 69, 69, - 69, nil, nil, nil, nil, 69, 69, nil, nil, nil, - 70, 70, 70, 69, 70, 69, 69, 69, 70, 70, - nil, nil, nil, 70, nil, 70, 70, 70, 70, 70, - 70, 70, nil, nil, nil, nil, nil, 70, 70, 70, - 70, 70, 70, 70, nil, nil, 70, nil, nil, nil, - nil, nil, nil, 70, nil, nil, 70, 70, 70, 70, - 70, 70, 70, 70, nil, 70, 70, 70, nil, 70, - 70, nil, nil, 70, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 70, nil, nil, 70, nil, nil, 70, - 70, nil, nil, 70, nil, nil, 845, nil, 845, 845, - 845, 845, 845, nil, nil, nil, nil, nil, nil, nil, - nil, 845, nil, 70, 70, 70, 70, nil, 70, 70, - 70, 70, nil, nil, nil, nil, 70, 70, nil, nil, - nil, nil, nil, 845, 70, nil, 70, 70, 70, 113, - 113, 113, 113, 113, 845, 845, nil, 113, 113, 845, - nil, nil, 113, nil, 113, 113, 113, 113, 113, 113, - 113, nil, nil, nil, nil, nil, 113, 113, 113, 113, - 113, 113, 113, nil, nil, 113, nil, nil, nil, nil, - nil, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, nil, 113, 113, 113, nil, 113, 113, - 113, 113, 113, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 113, nil, nil, 113, nil, nil, 113, 113, - nil, nil, 113, nil, 113, nil, nil, nil, 113, nil, - nil, nil, nil, nil, nil, nil, nil, 113, nil, nil, - nil, nil, 113, 113, 113, 113, nil, 113, 113, 113, - 113, nil, nil, nil, nil, 113, 113, nil, nil, nil, - nil, nil, 113, 113, nil, 113, 113, 113, 118, 118, - 118, nil, 118, nil, nil, nil, 118, 118, nil, nil, - nil, 118, nil, 118, 118, 118, 118, 118, 118, 118, - nil, nil, nil, nil, nil, 118, 118, 118, 118, 118, - 118, 118, nil, nil, 118, nil, nil, nil, nil, nil, - nil, 118, nil, nil, 118, 118, 118, 118, 118, 118, - 118, 118, nil, 118, 118, 118, nil, 118, 118, 118, - 118, 118, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 118, nil, nil, 118, nil, nil, 118, 118, nil, - nil, 118, nil, nil, nil, nil, nil, 118, nil, nil, - nil, nil, nil, nil, nil, nil, 118, nil, nil, nil, - nil, 118, 118, 118, 118, nil, 118, 118, 118, 118, - nil, nil, nil, nil, 118, 118, nil, nil, nil, 119, - 119, 119, 118, 119, 118, 118, 118, 119, 119, nil, - nil, nil, 119, nil, 119, 119, 119, 119, 119, 119, - 119, nil, nil, nil, nil, nil, 119, 119, 119, 119, - 119, 119, 119, nil, nil, 119, nil, nil, nil, nil, - nil, nil, 119, nil, nil, 119, 119, 119, 119, 119, - 119, 119, 119, nil, 119, 119, 119, nil, 119, 119, - 119, 119, 119, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 119, nil, nil, 119, nil, nil, 119, 119, - nil, nil, 119, nil, nil, nil, nil, nil, 119, nil, - nil, nil, nil, nil, nil, nil, nil, 119, nil, nil, - nil, nil, 119, 119, 119, 119, nil, 119, 119, 119, - 119, nil, nil, nil, nil, 119, 119, nil, nil, nil, - 120, 120, 120, 119, 120, 119, 119, 119, 120, 120, - nil, nil, nil, 120, nil, 120, 120, 120, 120, 120, - 120, 120, nil, nil, nil, nil, nil, 120, 120, 120, - 120, 120, 120, 120, nil, nil, 120, nil, nil, nil, - nil, nil, nil, 120, nil, nil, 120, 120, 120, 120, - 120, 120, 120, 120, nil, 120, 120, 120, nil, 120, - 120, 120, 120, 120, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 120, nil, nil, 120, nil, nil, 120, - 120, nil, nil, 120, nil, nil, nil, nil, nil, 120, - nil, nil, nil, nil, nil, nil, nil, nil, 120, nil, - nil, nil, nil, 120, 120, 120, 120, nil, 120, 120, - 120, 120, nil, nil, nil, nil, 120, 120, nil, nil, - nil, 121, 121, 121, 120, 121, 120, 120, 120, 121, - 121, nil, nil, nil, 121, nil, 121, 121, 121, 121, - 121, 121, 121, nil, nil, nil, nil, nil, 121, 121, - 121, 121, 121, 121, 121, nil, nil, 121, nil, nil, - nil, nil, nil, nil, 121, nil, nil, 121, 121, 121, - 121, 121, 121, 121, 121, nil, 121, 121, 121, nil, - 121, 121, 121, 121, 121, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 121, nil, nil, 121, nil, nil, - 121, 121, nil, nil, 121, nil, nil, nil, nil, nil, - 121, nil, nil, nil, nil, nil, nil, nil, nil, 121, - nil, nil, nil, nil, 121, 121, 121, 121, nil, 121, - 121, 121, 121, nil, nil, nil, nil, 121, 121, nil, - nil, nil, nil, nil, nil, 121, nil, 121, 121, 121, - 122, 122, 122, 122, 122, nil, nil, nil, 122, 122, - nil, nil, nil, 122, nil, 122, 122, 122, 122, 122, - 122, 122, nil, nil, nil, nil, nil, 122, 122, 122, - 122, 122, 122, 122, nil, nil, 122, nil, nil, nil, - nil, nil, 122, 122, nil, 122, 122, 122, 122, 122, - 122, 122, 122, 122, nil, 122, 122, 122, nil, 122, - 122, 122, 122, 122, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 122, nil, nil, 122, nil, nil, 122, - 122, nil, nil, 122, nil, 122, nil, nil, nil, 122, - nil, nil, nil, nil, nil, nil, nil, nil, 122, nil, - nil, nil, nil, 122, 122, 122, 122, nil, 122, 122, - 122, 122, nil, nil, nil, nil, 122, 122, nil, nil, - nil, 209, 209, 209, 122, 209, 122, 122, 122, 209, - 209, nil, nil, nil, 209, nil, 209, 209, 209, 209, - 209, 209, 209, nil, nil, nil, nil, nil, 209, 209, - 209, 209, 209, 209, 209, nil, nil, 209, nil, nil, - nil, nil, nil, nil, 209, nil, nil, 209, 209, 209, - 209, 209, 209, 209, 209, nil, 209, 209, 209, nil, - 209, 209, 209, 209, 209, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 209, nil, nil, 209, nil, nil, - 209, 209, nil, nil, 209, nil, 209, nil, nil, nil, - 209, nil, nil, nil, nil, nil, nil, nil, nil, 209, - nil, nil, nil, nil, 209, 209, 209, 209, nil, 209, - 209, 209, 209, nil, nil, nil, nil, 209, 209, nil, - nil, nil, 210, 210, 210, 209, 210, 209, 209, 209, - 210, 210, nil, nil, nil, 210, nil, 210, 210, 210, - 210, 210, 210, 210, nil, nil, nil, nil, nil, 210, - 210, 210, 210, 210, 210, 210, nil, nil, 210, nil, - nil, nil, nil, nil, nil, 210, nil, nil, 210, 210, - 210, 210, 210, 210, 210, 210, nil, 210, 210, 210, - nil, 210, 210, 210, 210, 210, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 210, nil, nil, 210, nil, - nil, 210, 210, nil, nil, 210, nil, nil, nil, nil, - nil, 210, nil, nil, nil, nil, nil, nil, nil, nil, - 210, nil, nil, nil, nil, 210, 210, 210, 210, nil, - 210, 210, 210, 210, nil, nil, nil, nil, 210, 210, - nil, nil, nil, 211, 211, 211, 210, 211, 210, 210, - 210, 211, 211, nil, nil, nil, 211, nil, 211, 211, - 211, 211, 211, 211, 211, nil, nil, nil, nil, nil, - 211, 211, 211, 211, 211, 211, 211, nil, nil, 211, - nil, nil, nil, nil, nil, nil, 211, nil, nil, 211, - 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, - 211, nil, 211, 211, 211, 211, 211, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 211, nil, nil, 211, - nil, nil, 211, 211, nil, nil, 211, nil, 211, nil, - 211, nil, 211, nil, nil, 211, nil, nil, nil, nil, - nil, 211, nil, nil, nil, nil, 211, 211, 211, 211, - nil, 211, 211, 211, 211, nil, nil, nil, nil, 211, - 211, nil, nil, nil, 214, 214, 214, 211, 214, 211, - 211, 211, 214, 214, nil, nil, nil, 214, nil, 214, - 214, 214, 214, 214, 214, 214, nil, nil, nil, nil, - nil, 214, 214, 214, 214, 214, 214, 214, nil, nil, - 214, nil, nil, nil, nil, nil, nil, 214, nil, nil, - 214, 214, 214, 214, 214, 214, 214, 214, nil, 214, - 214, 214, nil, 214, 214, 214, 214, 214, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 214, nil, nil, - 214, nil, nil, 214, 214, nil, nil, 214, nil, nil, - nil, nil, nil, 214, nil, nil, nil, nil, nil, nil, - nil, nil, 214, nil, nil, nil, nil, 214, 214, 214, - 214, nil, 214, 214, 214, 214, nil, nil, nil, nil, - 214, 214, nil, nil, nil, 215, 215, 215, 214, 215, - 214, 214, 214, 215, 215, nil, nil, nil, 215, nil, - 215, 215, 215, 215, 215, 215, 215, nil, nil, nil, - nil, nil, 215, 215, 215, 215, 215, 215, 215, nil, - nil, 215, nil, nil, nil, nil, nil, nil, 215, nil, - nil, 215, 215, 215, 215, 215, 215, 215, 215, nil, - 215, 215, 215, nil, 215, 215, 215, 215, 215, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 215, nil, - nil, 215, nil, nil, 215, 215, nil, nil, 215, nil, - 215, nil, nil, nil, 215, nil, nil, nil, nil, nil, - nil, nil, nil, 215, nil, nil, nil, nil, 215, 215, - 215, 215, nil, 215, 215, 215, 215, nil, nil, nil, - nil, 215, 215, nil, nil, nil, 216, 216, 216, 215, - 216, 215, 215, 215, 216, 216, nil, nil, nil, 216, - nil, 216, 216, 216, 216, 216, 216, 216, nil, nil, - nil, nil, nil, 216, 216, 216, 216, 216, 216, 216, - nil, nil, 216, nil, nil, nil, nil, nil, nil, 216, - nil, nil, 216, 216, 216, 216, 216, 216, 216, 216, - nil, 216, 216, 216, nil, 216, 216, 216, 216, 216, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 216, - nil, nil, 216, nil, nil, 216, 216, nil, nil, 216, - nil, nil, nil, nil, nil, 216, nil, nil, nil, nil, - nil, nil, nil, nil, 216, nil, nil, nil, nil, 216, - 216, 216, 216, nil, 216, 216, 216, 216, nil, nil, - nil, nil, 216, 216, nil, nil, nil, 217, 217, 217, - 216, 217, 216, 216, 216, 217, 217, nil, nil, nil, - 217, nil, 217, 217, 217, 217, 217, 217, 217, nil, - nil, nil, nil, nil, 217, 217, 217, 217, 217, 217, - 217, nil, nil, 217, nil, nil, nil, nil, nil, nil, - 217, nil, nil, 217, 217, 217, 217, 217, 217, 217, - 217, nil, 217, 217, 217, nil, 217, 217, 217, 217, - 217, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 217, nil, nil, 217, nil, nil, 217, 217, nil, nil, - 217, nil, nil, nil, nil, nil, 217, nil, nil, nil, - nil, nil, nil, nil, nil, 217, nil, nil, nil, nil, - 217, 217, 217, 217, nil, 217, 217, 217, 217, nil, - nil, nil, nil, 217, 217, nil, nil, nil, 218, 218, - 218, 217, 218, 217, 217, 217, 218, 218, nil, nil, - nil, 218, nil, 218, 218, 218, 218, 218, 218, 218, - nil, nil, nil, nil, nil, 218, 218, 218, 218, 218, - 218, 218, nil, nil, 218, nil, nil, nil, nil, nil, - nil, 218, nil, nil, 218, 218, 218, 218, 218, 218, - 218, 218, nil, 218, 218, 218, nil, 218, 218, 218, - 218, 218, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 218, nil, nil, 218, nil, nil, 218, 218, nil, - nil, 218, nil, nil, nil, nil, nil, 218, nil, nil, - nil, nil, nil, nil, nil, nil, 218, nil, nil, nil, - nil, 218, 218, 218, 218, nil, 218, 218, 218, 218, - nil, nil, nil, nil, 218, 218, nil, nil, nil, 219, - 219, 219, 218, 219, 218, 218, 218, 219, 219, nil, - nil, nil, 219, nil, 219, 219, 219, 219, 219, 219, - 219, nil, nil, nil, nil, nil, 219, 219, 219, 219, - 219, 219, 219, nil, nil, 219, nil, nil, nil, nil, - nil, nil, 219, nil, nil, 219, 219, 219, 219, 219, - 219, 219, 219, nil, 219, 219, 219, nil, 219, 219, - 219, 219, 219, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 219, nil, nil, 219, nil, nil, 219, 219, - nil, nil, 219, nil, nil, nil, nil, nil, 219, nil, - nil, nil, nil, nil, nil, nil, nil, 219, nil, nil, - nil, nil, 219, 219, 219, 219, nil, 219, 219, 219, - 219, nil, nil, nil, nil, 219, 219, 219, nil, nil, - 230, 230, 230, 219, 230, 219, 219, 219, 230, 230, - nil, nil, nil, 230, nil, 230, 230, 230, 230, 230, - 230, 230, nil, nil, nil, nil, nil, 230, 230, 230, - 230, 230, 230, 230, nil, nil, 230, nil, nil, nil, - nil, nil, nil, 230, nil, nil, 230, 230, 230, 230, - 230, 230, 230, 230, nil, 230, 230, 230, nil, 230, - 230, 230, 230, 230, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 230, nil, nil, 230, nil, nil, 230, - 230, nil, nil, 230, nil, nil, nil, nil, nil, 230, - nil, nil, nil, nil, nil, nil, nil, nil, 230, nil, - nil, nil, nil, 230, 230, 230, 230, nil, 230, 230, - 230, 230, nil, nil, nil, nil, 230, 230, nil, nil, - nil, 233, 233, 233, 230, 233, 230, 230, 230, 233, - 233, nil, nil, nil, 233, nil, 233, 233, 233, 233, - 233, 233, 233, nil, nil, nil, nil, nil, 233, 233, - 233, 233, 233, 233, 233, nil, nil, 233, nil, nil, - nil, nil, nil, nil, 233, nil, nil, 233, 233, 233, - 233, 233, 233, 233, 233, nil, 233, 233, 233, nil, - 233, 233, 233, 233, 233, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 233, nil, nil, 233, nil, nil, - 233, 233, nil, nil, 233, nil, nil, nil, nil, nil, - 233, nil, nil, nil, nil, nil, nil, nil, nil, 233, - nil, nil, nil, nil, 233, 233, 233, 233, nil, 233, - 233, 233, 233, nil, nil, nil, nil, 233, 233, nil, - nil, nil, 234, 234, 234, 233, 234, 233, 233, 233, - 234, 234, nil, nil, nil, 234, nil, 234, 234, 234, - 234, 234, 234, 234, nil, nil, nil, nil, nil, 234, - 234, 234, 234, 234, 234, 234, nil, nil, 234, nil, - nil, nil, nil, nil, nil, 234, nil, nil, 234, 234, - 234, 234, 234, 234, 234, 234, nil, 234, 234, 234, - nil, 234, 234, 234, 234, 234, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 234, nil, nil, 234, nil, - nil, 234, 234, nil, nil, 234, nil, nil, nil, nil, - nil, 234, nil, nil, nil, nil, nil, nil, nil, nil, - 234, nil, nil, nil, nil, 234, 234, 234, 234, nil, - 234, 234, 234, 234, nil, nil, nil, nil, 234, 234, - nil, nil, nil, 235, 235, 235, 234, 235, 234, 234, - 234, 235, 235, nil, nil, nil, 235, nil, 235, 235, - 235, 235, 235, 235, 235, nil, nil, nil, nil, nil, - 235, 235, 235, 235, 235, 235, 235, nil, nil, 235, - nil, nil, nil, nil, nil, nil, 235, nil, nil, 235, - 235, 235, 235, 235, 235, 235, 235, nil, 235, 235, - 235, nil, 235, 235, 235, 235, 235, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 235, nil, nil, 235, - nil, nil, 235, 235, nil, nil, 235, nil, nil, nil, - nil, nil, 235, nil, nil, nil, nil, nil, nil, nil, - nil, 235, nil, nil, nil, nil, 235, 235, 235, 235, - nil, 235, 235, 235, 235, nil, nil, nil, nil, 235, - 235, nil, nil, nil, 236, 236, 236, 235, 236, 235, - 235, 235, 236, 236, nil, nil, nil, 236, nil, 236, - 236, 236, 236, 236, 236, 236, nil, nil, nil, nil, - nil, 236, 236, 236, 236, 236, 236, 236, nil, nil, - 236, nil, nil, nil, nil, nil, nil, 236, nil, nil, - 236, 236, 236, 236, 236, 236, 236, 236, nil, 236, - 236, 236, nil, 236, 236, 236, 236, 236, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 236, nil, nil, - 236, nil, nil, 236, 236, nil, nil, 236, nil, nil, - nil, nil, nil, 236, nil, nil, nil, nil, nil, nil, - nil, nil, 236, nil, nil, nil, nil, 236, 236, 236, - 236, nil, 236, 236, 236, 236, nil, nil, nil, nil, - 236, 236, nil, nil, nil, 237, 237, 237, 236, 237, - 236, 236, 236, 237, 237, nil, nil, nil, 237, nil, - 237, 237, 237, 237, 237, 237, 237, nil, nil, nil, - nil, nil, 237, 237, 237, 237, 237, 237, 237, nil, - nil, 237, nil, nil, nil, nil, nil, nil, 237, nil, - nil, 237, 237, 237, 237, 237, 237, 237, 237, nil, - 237, 237, 237, nil, 237, 237, 237, 237, 237, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 237, nil, - nil, 237, nil, nil, 237, 237, nil, nil, 237, nil, - nil, nil, nil, nil, 237, nil, nil, nil, nil, nil, - nil, nil, nil, 237, nil, nil, nil, nil, 237, 237, - 237, 237, nil, 237, 237, 237, 237, nil, nil, nil, - nil, 237, 237, nil, nil, nil, 238, 238, 238, 237, - 238, 237, 237, 237, 238, 238, nil, nil, nil, 238, - nil, 238, 238, 238, 238, 238, 238, 238, nil, nil, - nil, nil, nil, 238, 238, 238, 238, 238, 238, 238, - nil, nil, 238, nil, nil, nil, nil, nil, nil, 238, - nil, nil, 238, 238, 238, 238, 238, 238, 238, 238, - nil, 238, 238, 238, nil, 238, 238, 238, 238, 238, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 238, - nil, nil, 238, nil, nil, 238, 238, nil, nil, 238, - nil, nil, nil, nil, nil, 238, nil, nil, nil, nil, - nil, nil, nil, nil, 238, nil, nil, nil, nil, 238, - 238, 238, 238, nil, 238, 238, 238, 238, nil, nil, - nil, nil, 238, 238, nil, nil, nil, 239, 239, 239, - 238, 239, 238, 238, 238, 239, 239, nil, nil, nil, - 239, nil, 239, 239, 239, 239, 239, 239, 239, nil, - nil, nil, nil, nil, 239, 239, 239, 239, 239, 239, - 239, nil, nil, 239, nil, nil, nil, nil, nil, nil, - 239, nil, nil, 239, 239, 239, 239, 239, 239, 239, - 239, nil, 239, 239, 239, nil, 239, 239, 239, 239, - 239, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 239, nil, nil, 239, nil, nil, 239, 239, nil, nil, - 239, nil, nil, nil, nil, nil, 239, nil, nil, nil, - nil, nil, nil, nil, nil, 239, nil, nil, nil, nil, - 239, 239, 239, 239, nil, 239, 239, 239, 239, nil, - nil, nil, nil, 239, 239, nil, nil, nil, 240, 240, - 240, 239, 240, 239, 239, 239, 240, 240, nil, nil, - nil, 240, nil, 240, 240, 240, 240, 240, 240, 240, - nil, nil, nil, nil, nil, 240, 240, 240, 240, 240, - 240, 240, nil, nil, 240, nil, nil, nil, nil, nil, - nil, 240, nil, nil, 240, 240, 240, 240, 240, 240, - 240, 240, nil, 240, 240, 240, nil, 240, 240, 240, - 240, 240, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 240, nil, nil, 240, nil, nil, 240, 240, nil, - nil, 240, nil, nil, nil, nil, nil, 240, nil, nil, - nil, nil, nil, nil, nil, nil, 240, nil, nil, nil, - nil, 240, 240, 240, 240, nil, 240, 240, 240, 240, - nil, nil, nil, nil, 240, 240, nil, nil, nil, 241, - 241, 241, 240, 241, 240, 240, 240, 241, 241, nil, - nil, nil, 241, nil, 241, 241, 241, 241, 241, 241, - 241, nil, nil, nil, nil, nil, 241, 241, 241, 241, - 241, 241, 241, nil, nil, 241, nil, nil, nil, nil, - nil, nil, 241, nil, nil, 241, 241, 241, 241, 241, - 241, 241, 241, nil, 241, 241, 241, nil, 241, 241, - 241, 241, 241, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 241, nil, nil, 241, nil, nil, 241, 241, - nil, nil, 241, nil, nil, nil, nil, nil, 241, nil, - nil, nil, nil, nil, nil, nil, nil, 241, nil, nil, - nil, nil, 241, 241, 241, 241, nil, 241, 241, 241, - 241, nil, nil, nil, nil, 241, 241, nil, nil, nil, - 242, 242, 242, 241, 242, 241, 241, 241, 242, 242, - nil, nil, nil, 242, nil, 242, 242, 242, 242, 242, - 242, 242, nil, nil, nil, nil, nil, 242, 242, 242, - 242, 242, 242, 242, nil, nil, 242, nil, nil, nil, - nil, nil, nil, 242, nil, nil, 242, 242, 242, 242, - 242, 242, 242, 242, nil, 242, 242, 242, nil, 242, - 242, 242, 242, 242, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 242, nil, nil, 242, nil, nil, 242, - 242, nil, nil, 242, nil, nil, nil, nil, nil, 242, - nil, nil, nil, nil, nil, nil, nil, nil, 242, nil, - nil, nil, nil, 242, 242, 242, 242, nil, 242, 242, - 242, 242, nil, nil, nil, nil, 242, 242, nil, nil, - nil, 243, 243, 243, 242, 243, 242, 242, 242, 243, - 243, nil, nil, nil, 243, nil, 243, 243, 243, 243, - 243, 243, 243, nil, nil, nil, nil, nil, 243, 243, - 243, 243, 243, 243, 243, nil, nil, 243, nil, nil, - nil, nil, nil, nil, 243, nil, nil, 243, 243, 243, - 243, 243, 243, 243, 243, nil, 243, 243, 243, nil, - 243, 243, 243, 243, 243, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 243, nil, nil, 243, nil, nil, - 243, 243, nil, nil, 243, nil, nil, nil, nil, nil, - 243, nil, nil, nil, nil, nil, nil, nil, nil, 243, - nil, nil, nil, nil, 243, 243, 243, 243, nil, 243, - 243, 243, 243, nil, nil, nil, nil, 243, 243, nil, - nil, nil, 244, 244, 244, 243, 244, 243, 243, 243, - 244, 244, nil, nil, nil, 244, nil, 244, 244, 244, - 244, 244, 244, 244, nil, nil, nil, nil, nil, 244, - 244, 244, 244, 244, 244, 244, nil, nil, 244, nil, - nil, nil, nil, nil, nil, 244, nil, nil, 244, 244, - 244, 244, 244, 244, 244, 244, nil, 244, 244, 244, - nil, 244, 244, 244, 244, 244, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 244, nil, nil, 244, nil, - nil, 244, 244, nil, nil, 244, nil, nil, nil, nil, - nil, 244, nil, nil, nil, nil, nil, nil, nil, nil, - 244, nil, nil, nil, nil, 244, 244, 244, 244, nil, - 244, 244, 244, 244, nil, nil, nil, nil, 244, 244, - nil, nil, nil, 245, 245, 245, 244, 245, 244, 244, - 244, 245, 245, nil, nil, nil, 245, nil, 245, 245, - 245, 245, 245, 245, 245, nil, nil, nil, nil, nil, - 245, 245, 245, 245, 245, 245, 245, nil, nil, 245, - nil, nil, nil, nil, nil, nil, 245, nil, nil, 245, - 245, 245, 245, 245, 245, 245, 245, nil, 245, 245, - 245, nil, 245, 245, 245, 245, 245, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 245, nil, nil, 245, - nil, nil, 245, 245, nil, nil, 245, nil, nil, nil, - nil, nil, 245, nil, nil, nil, nil, nil, nil, nil, - nil, 245, nil, nil, nil, nil, 245, 245, 245, 245, - nil, 245, 245, 245, 245, nil, nil, nil, nil, 245, - 245, nil, nil, nil, 246, 246, 246, 245, 246, 245, - 245, 245, 246, 246, nil, nil, nil, 246, nil, 246, - 246, 246, 246, 246, 246, 246, nil, nil, nil, nil, - nil, 246, 246, 246, 246, 246, 246, 246, nil, nil, - 246, nil, nil, nil, nil, nil, nil, 246, nil, nil, - 246, 246, 246, 246, 246, 246, 246, 246, nil, 246, - 246, 246, nil, 246, 246, 246, 246, 246, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 246, nil, nil, - 246, nil, nil, 246, 246, nil, nil, 246, nil, nil, - nil, nil, nil, 246, nil, nil, nil, nil, nil, nil, - nil, nil, 246, nil, nil, nil, nil, 246, 246, 246, - 246, nil, 246, 246, 246, 246, nil, nil, nil, nil, - 246, 246, nil, nil, nil, 247, 247, 247, 246, 247, - 246, 246, 246, 247, 247, nil, nil, nil, 247, nil, - 247, 247, 247, 247, 247, 247, 247, nil, nil, nil, - nil, nil, 247, 247, 247, 247, 247, 247, 247, nil, - nil, 247, nil, nil, nil, nil, nil, nil, 247, nil, - nil, 247, 247, 247, 247, 247, 247, 247, 247, nil, - 247, 247, 247, nil, 247, 247, 247, 247, 247, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 247, nil, - nil, 247, nil, nil, 247, 247, nil, nil, 247, nil, - nil, nil, nil, nil, 247, nil, nil, nil, nil, nil, - nil, nil, nil, 247, nil, nil, nil, nil, 247, 247, - 247, 247, nil, 247, 247, 247, 247, nil, nil, nil, - nil, 247, 247, nil, nil, nil, 248, 248, 248, 247, - 248, 247, 247, 247, 248, 248, nil, nil, nil, 248, - nil, 248, 248, 248, 248, 248, 248, 248, nil, nil, - nil, nil, nil, 248, 248, 248, 248, 248, 248, 248, - nil, nil, 248, nil, nil, nil, nil, nil, nil, 248, - nil, nil, 248, 248, 248, 248, 248, 248, 248, 248, - nil, 248, 248, 248, nil, 248, 248, 248, 248, 248, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 248, - nil, nil, 248, nil, nil, 248, 248, nil, nil, 248, - nil, nil, nil, nil, nil, 248, nil, nil, nil, nil, - nil, nil, nil, nil, 248, nil, nil, nil, nil, 248, - 248, 248, 248, nil, 248, 248, 248, 248, nil, nil, - nil, nil, 248, 248, nil, nil, nil, 249, 249, 249, - 248, 249, 248, 248, 248, 249, 249, nil, nil, nil, - 249, nil, 249, 249, 249, 249, 249, 249, 249, nil, - nil, nil, nil, nil, 249, 249, 249, 249, 249, 249, - 249, nil, nil, 249, nil, nil, nil, nil, nil, nil, - 249, nil, nil, 249, 249, 249, 249, 249, 249, 249, - 249, nil, 249, 249, 249, nil, 249, 249, 249, 249, - 249, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 249, nil, nil, 249, nil, nil, 249, 249, nil, nil, - 249, nil, nil, nil, nil, nil, 249, nil, nil, nil, - nil, nil, nil, nil, nil, 249, nil, nil, nil, nil, - 249, 249, 249, 249, nil, 249, 249, 249, 249, nil, - nil, nil, nil, 249, 249, nil, nil, nil, 250, 250, - 250, 249, 250, 249, 249, 249, 250, 250, nil, nil, - nil, 250, nil, 250, 250, 250, 250, 250, 250, 250, - nil, nil, nil, nil, nil, 250, 250, 250, 250, 250, - 250, 250, nil, nil, 250, nil, nil, nil, nil, nil, - nil, 250, nil, nil, 250, 250, 250, 250, 250, 250, - 250, 250, nil, 250, 250, 250, nil, 250, 250, 250, - 250, 250, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 250, nil, nil, 250, nil, nil, 250, 250, nil, - nil, 250, nil, nil, nil, nil, nil, 250, nil, nil, - nil, nil, nil, nil, nil, nil, 250, nil, nil, nil, - nil, 250, 250, 250, 250, nil, 250, 250, 250, 250, - nil, nil, nil, nil, 250, 250, nil, nil, nil, 251, - 251, 251, 250, 251, 250, 250, 250, 251, 251, nil, - nil, nil, 251, nil, 251, 251, 251, 251, 251, 251, - 251, nil, nil, nil, nil, nil, 251, 251, 251, 251, - 251, 251, 251, nil, nil, 251, nil, nil, nil, nil, - nil, nil, 251, nil, nil, 251, 251, 251, 251, 251, - 251, 251, 251, nil, 251, 251, 251, nil, 251, 251, - 251, 251, 251, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 251, nil, nil, 251, nil, nil, 251, 251, - nil, nil, 251, nil, nil, nil, nil, nil, 251, nil, - nil, nil, nil, nil, nil, nil, nil, 251, nil, nil, - nil, nil, 251, 251, 251, 251, nil, 251, 251, 251, - 251, nil, nil, nil, nil, 251, 251, nil, nil, nil, - 252, 252, 252, 251, 252, 251, 251, 251, 252, 252, - nil, nil, nil, 252, nil, 252, 252, 252, 252, 252, - 252, 252, nil, nil, nil, nil, nil, 252, 252, 252, - 252, 252, 252, 252, nil, nil, 252, nil, nil, nil, - nil, nil, nil, 252, nil, nil, 252, 252, 252, 252, - 252, 252, 252, 252, nil, 252, 252, 252, nil, 252, - 252, 252, 252, 252, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 252, nil, nil, 252, nil, nil, 252, - 252, nil, nil, 252, nil, nil, nil, nil, nil, 252, - nil, nil, nil, nil, nil, nil, nil, nil, 252, nil, - nil, nil, nil, 252, 252, 252, 252, nil, 252, 252, - 252, 252, nil, nil, nil, nil, 252, 252, nil, nil, - nil, 253, 253, 253, 252, 253, 252, 252, 252, 253, - 253, nil, nil, nil, 253, nil, 253, 253, 253, 253, - 253, 253, 253, nil, nil, nil, nil, nil, 253, 253, - 253, 253, 253, 253, 253, nil, nil, 253, nil, nil, - nil, nil, nil, nil, 253, nil, nil, 253, 253, 253, - 253, 253, 253, 253, 253, nil, 253, 253, 253, nil, - 253, 253, 253, 253, 253, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 253, nil, nil, 253, nil, nil, - 253, 253, nil, nil, 253, nil, nil, nil, nil, nil, - 253, nil, nil, nil, nil, nil, nil, nil, nil, 253, - nil, nil, nil, nil, 253, 253, 253, 253, nil, 253, - 253, 253, 253, nil, nil, nil, nil, 253, 253, nil, - nil, nil, 254, 254, 254, 253, 254, 253, 253, 253, - 254, 254, nil, nil, nil, 254, nil, 254, 254, 254, - 254, 254, 254, 254, nil, nil, nil, nil, nil, 254, - 254, 254, 254, 254, 254, 254, nil, nil, 254, nil, - nil, nil, nil, nil, nil, 254, nil, nil, 254, 254, - 254, 254, 254, 254, 254, 254, nil, 254, 254, 254, - nil, 254, 254, 254, 254, 254, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 254, nil, nil, 254, nil, - nil, 254, 254, nil, nil, 254, nil, nil, nil, nil, - nil, 254, nil, nil, nil, nil, nil, nil, nil, nil, - 254, nil, nil, nil, nil, 254, 254, 254, 254, nil, - 254, 254, 254, 254, nil, nil, nil, nil, 254, 254, - nil, nil, nil, 255, 255, 255, 254, 255, 254, 254, - 254, 255, 255, nil, nil, nil, 255, nil, 255, 255, - 255, 255, 255, 255, 255, nil, nil, nil, nil, nil, - 255, 255, 255, 255, 255, 255, 255, nil, nil, 255, - nil, nil, nil, nil, nil, nil, 255, nil, nil, 255, - 255, 255, 255, 255, 255, 255, 255, nil, 255, 255, - 255, nil, 255, 255, 255, 255, 255, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 255, nil, nil, 255, - nil, nil, 255, 255, nil, nil, 255, nil, nil, nil, - nil, nil, 255, nil, nil, nil, nil, nil, nil, nil, - nil, 255, nil, nil, nil, nil, 255, 255, 255, 255, - nil, 255, 255, 255, 255, nil, nil, nil, nil, 255, - 255, nil, nil, nil, 256, 256, 256, 255, 256, 255, - 255, 255, 256, 256, nil, nil, nil, 256, nil, 256, - 256, 256, 256, 256, 256, 256, nil, nil, nil, nil, - nil, 256, 256, 256, 256, 256, 256, 256, nil, nil, - 256, nil, nil, nil, nil, nil, nil, 256, nil, nil, - 256, 256, 256, 256, 256, 256, 256, 256, nil, 256, - 256, 256, nil, 256, 256, 256, 256, 256, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 256, nil, nil, - 256, nil, nil, 256, 256, nil, nil, 256, nil, nil, - nil, nil, nil, 256, nil, nil, nil, nil, nil, nil, - nil, nil, 256, nil, nil, nil, nil, 256, 256, 256, - 256, nil, 256, 256, 256, 256, nil, nil, nil, nil, - 256, 256, nil, nil, nil, 257, 257, 257, 256, 257, - 256, 256, 256, 257, 257, nil, nil, nil, 257, nil, - 257, 257, 257, 257, 257, 257, 257, nil, nil, nil, - nil, nil, 257, 257, 257, 257, 257, 257, 257, nil, - nil, 257, nil, nil, nil, nil, nil, nil, 257, nil, - nil, 257, 257, 257, 257, 257, 257, 257, 257, nil, - 257, 257, 257, nil, 257, 257, 257, 257, 257, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 257, nil, - nil, 257, nil, nil, 257, 257, nil, nil, 257, nil, - nil, nil, nil, nil, 257, nil, nil, nil, nil, nil, - nil, nil, nil, 257, nil, nil, nil, nil, 257, 257, - 257, 257, nil, 257, 257, 257, 257, nil, nil, nil, - nil, 257, 257, nil, nil, nil, 258, 258, 258, 257, - 258, 257, 257, 257, 258, 258, nil, nil, nil, 258, - nil, 258, 258, 258, 258, 258, 258, 258, nil, nil, - nil, nil, nil, 258, 258, 258, 258, 258, 258, 258, - nil, nil, 258, nil, nil, nil, nil, nil, nil, 258, - nil, nil, 258, 258, 258, 258, 258, 258, 258, 258, - nil, 258, 258, 258, nil, 258, 258, 258, 258, 258, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 258, - nil, nil, 258, nil, nil, 258, 258, nil, nil, 258, - nil, nil, nil, nil, nil, 258, nil, nil, nil, nil, - nil, nil, nil, nil, 258, nil, nil, nil, nil, 258, - 258, 258, 258, nil, 258, 258, 258, 258, nil, nil, - nil, nil, 258, 258, nil, nil, nil, 265, 265, 265, - 258, 265, 258, 258, 258, 265, 265, nil, nil, nil, - 265, nil, 265, 265, 265, 265, 265, 265, 265, nil, - nil, nil, nil, nil, 265, 265, 265, 265, 265, 265, - 265, nil, nil, 265, nil, nil, nil, nil, nil, nil, - 265, nil, nil, 265, 265, 265, 265, 265, 265, 265, - 265, 265, 265, 265, 265, nil, 265, 265, 265, 265, - 265, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 265, nil, nil, 265, nil, nil, 265, 265, nil, nil, - 265, nil, 265, nil, 265, nil, 265, nil, nil, 265, - nil, nil, nil, nil, nil, 265, nil, nil, nil, nil, - 265, 265, 265, 265, nil, 265, 265, 265, 265, nil, - nil, nil, nil, 265, 265, nil, nil, nil, 266, 266, - 266, 265, 266, 265, 265, 265, 266, 266, nil, nil, - nil, 266, nil, 266, 266, 266, 266, 266, 266, 266, - nil, nil, nil, nil, nil, 266, 266, 266, 266, 266, - 266, 266, nil, nil, 266, nil, nil, nil, nil, nil, - nil, 266, nil, nil, 266, 266, 266, 266, 266, 266, - 266, 266, 266, 266, 266, 266, nil, 266, 266, 266, - 266, 266, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 266, nil, nil, 266, nil, nil, 266, 266, nil, - nil, 266, nil, 266, nil, 266, nil, 266, nil, nil, - 266, nil, nil, nil, nil, nil, 266, nil, nil, nil, - nil, 266, 266, 266, 266, nil, 266, 266, 266, 266, - nil, nil, nil, nil, 266, 266, nil, nil, nil, 274, - 274, 274, 266, 274, 266, 266, 266, 274, 274, nil, - nil, nil, 274, nil, 274, 274, 274, 274, 274, 274, - 274, nil, nil, nil, nil, nil, 274, 274, 274, 274, - 274, 274, 274, nil, nil, 274, nil, nil, nil, nil, - nil, nil, 274, nil, nil, 274, 274, 274, 274, 274, - 274, 274, 274, 274, 274, 274, 274, nil, 274, 274, - 274, 274, 274, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 274, nil, nil, 274, nil, nil, 274, 274, - nil, nil, 274, nil, 274, nil, 274, nil, 274, nil, - nil, 274, nil, nil, nil, nil, nil, 274, nil, nil, - nil, nil, 274, 274, 274, 274, nil, 274, 274, 274, - 274, nil, nil, nil, nil, 274, 274, 274, nil, nil, - 281, 281, 281, 274, 281, 274, 274, 274, 281, 281, - nil, nil, nil, 281, nil, 281, 281, 281, 281, 281, - 281, 281, nil, nil, nil, nil, nil, 281, 281, 281, - 281, 281, 281, 281, nil, nil, 281, nil, nil, nil, - nil, nil, nil, 281, nil, nil, 281, 281, 281, 281, - 281, 281, 281, 281, nil, 281, 281, 281, nil, 281, - 281, 281, 281, 281, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 281, nil, nil, 281, nil, nil, 281, - 281, nil, nil, 281, nil, nil, nil, nil, nil, 281, - nil, nil, nil, nil, nil, nil, nil, nil, 281, nil, - nil, nil, nil, 281, 281, 281, 281, nil, 281, 281, - 281, 281, nil, nil, nil, nil, 281, 281, nil, nil, - nil, 283, 283, 283, 281, 283, 281, 281, 281, 283, - 283, nil, nil, nil, 283, nil, 283, 283, 283, 283, - 283, 283, 283, nil, nil, nil, nil, nil, 283, 283, - 283, 283, 283, 283, 283, nil, nil, 283, nil, nil, - nil, nil, nil, nil, 283, nil, nil, 283, 283, 283, - 283, 283, 283, 283, 283, nil, 283, 283, 283, nil, - 283, 283, 283, 283, 283, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 283, nil, nil, 283, nil, nil, - 283, 283, nil, nil, 283, nil, nil, nil, nil, nil, - 283, nil, nil, nil, nil, nil, nil, nil, nil, 283, - nil, nil, nil, nil, 283, 283, 283, 283, nil, 283, - 283, 283, 283, nil, nil, nil, nil, 283, 283, nil, - nil, nil, 285, 285, 285, 283, 285, 283, 283, 283, - 285, 285, nil, nil, nil, 285, nil, 285, 285, 285, - 285, 285, 285, 285, nil, nil, nil, nil, nil, 285, - 285, 285, 285, 285, 285, 285, nil, nil, 285, nil, - nil, nil, nil, nil, nil, 285, nil, nil, 285, 285, - 285, 285, 285, 285, 285, 285, nil, 285, 285, 285, - nil, 285, 285, 285, 285, 285, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 285, nil, nil, 285, nil, - nil, 285, 285, nil, nil, 285, nil, nil, nil, nil, - nil, 285, nil, nil, nil, nil, nil, nil, nil, nil, - 285, nil, nil, nil, nil, 285, 285, 285, 285, nil, - 285, 285, 285, 285, nil, nil, nil, nil, 285, 285, - nil, nil, nil, 286, 286, 286, 285, 286, 285, 285, - 285, 286, 286, nil, nil, nil, 286, nil, 286, 286, - 286, 286, 286, 286, 286, nil, nil, nil, nil, nil, - 286, 286, 286, 286, 286, 286, 286, nil, nil, 286, - nil, nil, nil, nil, nil, nil, 286, nil, nil, 286, - 286, 286, 286, 286, 286, 286, 286, nil, 286, 286, - 286, nil, 286, 286, 286, 286, 286, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 286, nil, nil, 286, - nil, nil, 286, 286, nil, nil, 286, nil, nil, nil, - nil, nil, 286, nil, nil, nil, nil, nil, nil, nil, - nil, 286, nil, nil, nil, nil, 286, 286, 286, 286, - nil, 286, 286, 286, 286, nil, nil, nil, nil, 286, - 286, nil, nil, nil, nil, nil, nil, 286, nil, 286, - 286, 286, 291, 291, 291, 291, 291, nil, nil, nil, - 291, 291, nil, nil, nil, 291, nil, 291, 291, 291, - 291, 291, 291, 291, nil, nil, nil, nil, nil, 291, - 291, 291, 291, 291, 291, 291, nil, nil, 291, nil, - nil, nil, nil, nil, 291, 291, nil, 291, 291, 291, - 291, 291, 291, 291, 291, 291, nil, 291, 291, 291, - nil, 291, 291, 291, 291, 291, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 291, nil, nil, 291, nil, - nil, 291, 291, nil, nil, 291, nil, 291, nil, nil, - nil, 291, nil, nil, nil, nil, nil, nil, nil, nil, - 291, nil, nil, nil, nil, 291, 291, 291, 291, nil, - 291, 291, 291, 291, nil, nil, nil, nil, 291, 291, - nil, nil, nil, 299, 299, 299, 291, 299, 291, 291, - 291, 299, 299, nil, nil, nil, 299, nil, 299, 299, - 299, 299, 299, 299, 299, nil, nil, nil, nil, nil, - 299, 299, 299, 299, 299, 299, 299, nil, nil, 299, - nil, nil, nil, nil, nil, nil, 299, nil, nil, 299, - 299, 299, 299, 299, 299, 299, 299, nil, 299, 299, - 299, nil, 299, 299, nil, nil, 299, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 299, nil, nil, 299, - nil, nil, 299, 299, nil, nil, 299, nil, nil, 935, - nil, 935, 935, 935, 935, 935, nil, nil, nil, nil, - nil, nil, nil, nil, 935, nil, 299, 299, 299, 299, - nil, 299, 299, 299, 299, nil, nil, nil, nil, 299, - 299, nil, nil, nil, 299, nil, 935, 299, nil, 299, - 299, 299, 316, 316, 316, nil, 316, 935, 935, nil, - 316, 316, 935, nil, nil, 316, nil, 316, 316, 316, - 316, 316, 316, 316, nil, nil, nil, nil, nil, 316, - 316, 316, 316, 316, 316, 316, nil, nil, 316, nil, - nil, nil, nil, nil, nil, 316, nil, nil, 316, 316, - 316, 316, 316, 316, 316, 316, nil, 316, 316, 316, - nil, 316, 316, nil, nil, 316, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 316, nil, nil, 316, nil, - nil, 316, 316, nil, nil, 316, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 316, 316, 316, 316, nil, - 316, 316, 316, 316, nil, nil, nil, nil, 316, 316, - nil, nil, nil, 324, 324, 324, 316, 324, 316, 316, - 316, 324, 324, nil, nil, nil, 324, nil, 324, 324, - 324, 324, 324, 324, 324, nil, nil, nil, nil, nil, - 324, 324, 324, 324, 324, 324, 324, nil, nil, 324, - nil, nil, nil, nil, nil, nil, 324, nil, nil, 324, - 324, 324, 324, 324, 324, 324, 324, nil, 324, 324, - 324, nil, 324, 324, 324, 324, 324, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 324, nil, nil, 324, - 324, nil, 324, 324, nil, nil, 324, nil, nil, nil, - nil, nil, 324, nil, nil, nil, nil, nil, nil, nil, - nil, 324, nil, nil, nil, nil, 324, 324, 324, 324, - nil, 324, 324, 324, 324, nil, nil, nil, nil, 324, - 324, nil, nil, nil, 326, 326, 326, 324, 326, 324, - 324, 324, 326, 326, nil, nil, nil, 326, nil, 326, - 326, 326, 326, 326, 326, 326, nil, nil, nil, nil, - nil, 326, 326, 326, 326, 326, 326, 326, nil, nil, - 326, nil, nil, nil, nil, nil, nil, 326, nil, nil, - 326, 326, 326, 326, 326, 326, 326, 326, nil, 326, - 326, 326, nil, 326, 326, 326, 326, 326, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 326, nil, nil, - 326, nil, nil, 326, 326, nil, nil, 326, nil, nil, - nil, nil, nil, 326, nil, nil, nil, nil, nil, nil, - nil, nil, 326, nil, nil, nil, nil, 326, 326, 326, - 326, nil, 326, 326, 326, 326, nil, nil, nil, nil, - 326, 326, nil, nil, nil, 340, 340, 340, 326, 340, - 326, 326, 326, 340, 340, nil, nil, nil, 340, nil, - 340, 340, 340, 340, 340, 340, 340, nil, nil, nil, - nil, nil, 340, 340, 340, 340, 340, 340, 340, nil, - nil, 340, nil, nil, nil, nil, nil, nil, 340, nil, - nil, 340, 340, 340, 340, 340, 340, 340, 340, nil, - 340, 340, 340, nil, 340, 340, 340, 340, 340, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 340, nil, - nil, 340, nil, nil, 340, 340, nil, nil, 340, nil, - nil, nil, nil, nil, 340, nil, nil, nil, nil, nil, - nil, nil, nil, 340, nil, nil, nil, nil, 340, 340, - 340, 340, nil, 340, 340, 340, 340, nil, nil, nil, - nil, 340, 340, nil, nil, nil, 341, 341, 341, 340, - 341, 340, 340, 340, 341, 341, nil, nil, nil, 341, - nil, 341, 341, 341, 341, 341, 341, 341, nil, nil, - nil, nil, nil, 341, 341, 341, 341, 341, 341, 341, - nil, nil, 341, nil, nil, nil, nil, nil, nil, 341, - nil, nil, 341, 341, 341, 341, 341, 341, 341, 341, - nil, 341, 341, 341, nil, 341, 341, 341, 341, 341, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 341, - nil, nil, 341, nil, nil, 341, 341, nil, nil, 341, - nil, nil, nil, nil, nil, 341, nil, nil, nil, nil, - nil, nil, nil, nil, 341, nil, nil, nil, nil, 341, - 341, 341, 341, nil, 341, 341, 341, 341, nil, nil, - nil, nil, 341, 341, nil, nil, nil, 360, 360, 360, - 341, 360, 341, 341, 341, 360, 360, nil, nil, nil, - 360, nil, 360, 360, 360, 360, 360, 360, 360, nil, - nil, nil, nil, nil, 360, 360, 360, 360, 360, 360, - 360, nil, nil, 360, nil, nil, nil, nil, nil, nil, - 360, nil, nil, 360, 360, 360, 360, 360, 360, 360, - 360, nil, 360, 360, 360, nil, 360, 360, 360, 360, - 360, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 360, nil, nil, 360, nil, nil, 360, 360, nil, nil, - 360, nil, nil, nil, nil, nil, 360, nil, nil, nil, - nil, nil, nil, nil, nil, 360, nil, nil, nil, nil, - 360, 360, 360, 360, nil, 360, 360, 360, 360, nil, - nil, nil, nil, 360, 360, nil, nil, nil, 376, 376, - 376, 360, 376, 360, 360, 360, 376, 376, nil, nil, - nil, 376, nil, 376, 376, 376, 376, 376, 376, 376, - nil, nil, nil, nil, nil, 376, 376, 376, 376, 376, - 376, 376, nil, nil, 376, nil, nil, nil, nil, nil, - nil, 376, nil, nil, 376, 376, 376, 376, 376, 376, - 376, 376, nil, 376, 376, 376, nil, 376, 376, 376, - 376, 376, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 376, nil, nil, 376, nil, nil, 376, 376, nil, - nil, 376, nil, nil, nil, nil, nil, 376, nil, nil, - nil, nil, nil, nil, nil, nil, 376, nil, nil, nil, - nil, 376, 376, 376, 376, nil, 376, 376, 376, 376, - nil, nil, nil, nil, 376, 376, nil, nil, nil, 404, - 404, 404, 376, 404, 376, 376, 376, 404, 404, nil, - nil, nil, 404, nil, 404, 404, 404, 404, 404, 404, - 404, nil, nil, nil, nil, nil, 404, 404, 404, 404, - 404, 404, 404, nil, nil, 404, nil, nil, nil, nil, - nil, nil, 404, nil, nil, 404, 404, 404, 404, 404, - 404, 404, 404, nil, 404, 404, 404, nil, 404, 404, - 404, 404, 404, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 404, nil, nil, 404, nil, nil, 404, 404, - nil, nil, 404, nil, nil, nil, nil, nil, 404, nil, - nil, nil, nil, nil, nil, nil, nil, 404, nil, nil, - nil, nil, 404, 404, 404, 404, nil, 404, 404, 404, - 404, nil, nil, nil, nil, 404, 404, nil, nil, nil, - 442, 442, 442, 404, 442, 404, 404, 404, 442, 442, - nil, nil, nil, 442, nil, 442, 442, 442, 442, 442, - 442, 442, nil, nil, nil, nil, nil, 442, 442, 442, - 442, 442, 442, 442, nil, nil, 442, nil, nil, nil, - nil, nil, nil, 442, nil, nil, 442, 442, 442, 442, - 442, 442, 442, 442, 442, 442, 442, 442, nil, 442, - 442, 442, 442, 442, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 442, nil, nil, 442, nil, nil, 442, - 442, nil, nil, 442, nil, 442, nil, 442, nil, 442, - nil, nil, 442, nil, nil, nil, nil, nil, 442, nil, - nil, nil, nil, 442, 442, 442, 442, nil, 442, 442, - 442, 442, nil, nil, nil, nil, 442, 442, nil, nil, - nil, 444, 444, 444, 442, 444, 442, 442, 442, 444, - 444, nil, nil, nil, 444, nil, 444, 444, 444, 444, - 444, 444, 444, nil, nil, nil, nil, nil, 444, 444, - 444, 444, 444, 444, 444, nil, nil, 444, nil, nil, - nil, nil, nil, nil, 444, nil, nil, 444, 444, 444, - 444, 444, 444, 444, 444, nil, 444, 444, 444, nil, - 444, 444, 444, 444, 444, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 444, nil, nil, 444, nil, nil, - 444, 444, nil, nil, 444, nil, nil, nil, nil, nil, - 444, nil, nil, nil, nil, nil, nil, nil, nil, 444, - nil, nil, nil, nil, 444, 444, 444, 444, nil, 444, - 444, 444, 444, nil, nil, nil, nil, 444, 444, nil, - nil, nil, 445, 445, 445, 444, 445, 444, 444, 444, - 445, 445, nil, nil, nil, 445, nil, 445, 445, 445, - 445, 445, 445, 445, nil, nil, nil, nil, nil, 445, - 445, 445, 445, 445, 445, 445, nil, nil, 445, nil, - nil, nil, nil, nil, nil, 445, nil, nil, 445, 445, - 445, 445, 445, 445, 445, 445, nil, 445, 445, 445, - nil, 445, 445, 445, 445, 445, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 445, nil, nil, 445, nil, - nil, 445, 445, nil, nil, 445, nil, nil, nil, nil, - nil, 445, nil, nil, nil, nil, nil, nil, nil, nil, - 445, nil, nil, nil, nil, 445, 445, 445, 445, nil, - 445, 445, 445, 445, nil, nil, nil, nil, 445, 445, - nil, nil, nil, 446, 446, 446, 445, 446, 445, 445, - 445, 446, 446, nil, nil, nil, 446, nil, 446, 446, - 446, 446, 446, 446, 446, nil, nil, nil, nil, nil, - 446, 446, 446, 446, 446, 446, 446, nil, nil, 446, - nil, nil, nil, nil, nil, nil, 446, nil, nil, 446, - 446, 446, 446, 446, 446, 446, 446, nil, 446, 446, - 446, nil, 446, 446, 446, 446, 446, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 446, nil, nil, 446, - nil, nil, 446, 446, nil, nil, 446, nil, nil, nil, - nil, nil, 446, nil, nil, nil, nil, nil, nil, nil, - nil, 446, nil, nil, nil, nil, 446, 446, 446, 446, - nil, 446, 446, 446, 446, nil, nil, nil, nil, 446, - 446, nil, nil, nil, 486, 486, 486, 446, 486, 446, - 446, 446, 486, 486, nil, nil, nil, 486, nil, 486, - 486, 486, 486, 486, 486, 486, nil, nil, nil, nil, - nil, 486, 486, 486, 486, 486, 486, 486, nil, nil, - 486, nil, nil, nil, nil, nil, nil, 486, nil, nil, - 486, 486, 486, 486, 486, 486, 486, 486, 486, 486, - 486, 486, nil, 486, 486, 486, 486, 486, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 486, nil, nil, - 486, nil, nil, 486, 486, nil, nil, 486, nil, 486, - nil, 486, nil, 486, nil, nil, 486, nil, nil, nil, - nil, nil, 486, nil, nil, nil, nil, 486, 486, 486, - 486, nil, 486, 486, 486, 486, nil, nil, nil, nil, - 486, 486, nil, nil, nil, 488, 488, 488, 486, 488, - 486, 486, 486, 488, 488, nil, nil, nil, 488, nil, - 488, 488, 488, 488, 488, 488, 488, nil, nil, nil, - nil, nil, 488, 488, 488, 488, 488, 488, 488, nil, - nil, 488, nil, nil, nil, nil, nil, nil, 488, nil, - nil, 488, 488, 488, 488, 488, 488, 488, 488, 488, - 488, 488, 488, nil, 488, 488, 488, 488, 488, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 488, nil, - nil, 488, nil, nil, 488, 488, nil, nil, 488, nil, - nil, nil, 488, nil, 488, nil, nil, 488, nil, nil, - nil, nil, nil, 488, nil, nil, nil, nil, 488, 488, - 488, 488, nil, 488, 488, 488, 488, nil, nil, nil, - nil, 488, 488, nil, nil, nil, 490, 490, 490, 488, - 490, 488, 488, 488, 490, 490, nil, nil, nil, 490, - nil, 490, 490, 490, 490, 490, 490, 490, nil, nil, - nil, nil, nil, 490, 490, 490, 490, 490, 490, 490, - nil, nil, 490, nil, nil, nil, nil, nil, nil, 490, - nil, nil, 490, 490, 490, 490, 490, 490, 490, 490, - nil, 490, 490, 490, nil, 490, 490, 490, 490, 490, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 490, - nil, nil, 490, nil, nil, 490, 490, nil, nil, 490, - nil, nil, nil, nil, nil, 490, nil, nil, nil, nil, - nil, nil, nil, nil, 490, nil, nil, nil, nil, 490, - 490, 490, 490, nil, 490, 490, 490, 490, nil, nil, - nil, nil, 490, 490, nil, nil, nil, nil, nil, nil, - 490, nil, 490, 490, 490, 495, 495, 495, 495, 495, - nil, nil, nil, 495, 495, nil, nil, nil, 495, nil, - 495, 495, 495, 495, 495, 495, 495, nil, nil, nil, - nil, nil, 495, 495, 495, 495, 495, 495, 495, nil, - nil, 495, nil, nil, nil, nil, nil, 495, 495, 495, - 495, 495, 495, 495, 495, 495, 495, 495, 495, nil, - 495, 495, 495, nil, 495, 495, 495, 495, 495, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 495, nil, - nil, 495, nil, nil, 495, 495, nil, nil, 495, nil, - 495, nil, nil, nil, 495, nil, nil, nil, nil, nil, - nil, nil, nil, 495, nil, nil, nil, nil, 495, 495, - 495, 495, nil, 495, 495, 495, 495, nil, nil, nil, - nil, 495, 495, nil, nil, nil, nil, nil, 495, 495, - nil, 495, 495, 495, 503, 503, 503, nil, 503, nil, - nil, nil, 503, 503, nil, nil, nil, 503, nil, 503, - 503, 503, 503, 503, 503, 503, nil, nil, nil, nil, - nil, 503, 503, 503, 503, 503, 503, 503, nil, nil, - 503, nil, nil, nil, nil, nil, nil, 503, nil, nil, - 503, 503, 503, 503, 503, 503, 503, 503, nil, 503, - 503, 503, nil, 503, 503, nil, nil, 503, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 503, nil, nil, - 503, nil, nil, 503, 503, nil, nil, 503, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 503, 503, 503, - 503, nil, 503, 503, 503, 503, nil, nil, nil, nil, - 503, 503, nil, nil, nil, 505, 505, 505, 503, 505, - 503, 503, 503, 505, 505, nil, nil, nil, 505, nil, - 505, 505, 505, 505, 505, 505, 505, nil, nil, nil, - nil, nil, 505, 505, 505, 505, 505, 505, 505, nil, - nil, 505, nil, nil, nil, nil, nil, nil, 505, nil, - nil, 505, 505, 505, 505, 505, 505, 505, 505, 505, - 505, 505, 505, nil, 505, 505, 505, 505, 505, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 505, nil, - nil, 505, nil, nil, 505, 505, nil, nil, 505, nil, - 505, nil, 505, nil, 505, nil, nil, 505, nil, nil, - nil, nil, nil, 505, nil, nil, nil, nil, 505, 505, - 505, 505, nil, 505, 505, 505, 505, nil, nil, nil, - nil, 505, 505, nil, nil, nil, 511, 511, 511, 505, - 511, 505, 505, 505, 511, 511, nil, nil, nil, 511, - nil, 511, 511, 511, 511, 511, 511, 511, nil, nil, - nil, nil, nil, 511, 511, 511, 511, 511, 511, 511, - nil, nil, 511, nil, nil, nil, nil, nil, nil, 511, - nil, nil, 511, 511, 511, 511, 511, 511, 511, 511, - nil, 511, 511, 511, nil, 511, 511, nil, nil, 511, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 511, - nil, nil, 511, nil, nil, 511, 511, nil, nil, 511, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 511, - 511, 511, 511, nil, 511, 511, 511, 511, nil, nil, - nil, nil, 511, 511, nil, nil, nil, 514, 514, 514, - 511, 514, 511, 511, 511, 514, 514, nil, nil, nil, - 514, nil, 514, 514, 514, 514, 514, 514, 514, nil, - nil, nil, nil, nil, 514, 514, 514, 514, 514, 514, - 514, nil, nil, 514, nil, nil, nil, nil, nil, nil, - 514, nil, nil, 514, 514, 514, 514, 514, 514, 514, - 514, nil, 514, 514, 514, nil, 514, 514, 514, 514, - 514, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 514, nil, nil, 514, nil, nil, 514, 514, nil, nil, - 514, nil, nil, nil, nil, nil, 514, nil, nil, nil, - nil, nil, nil, nil, nil, 514, nil, nil, nil, nil, - 514, 514, 514, 514, nil, 514, 514, 514, 514, nil, - nil, nil, nil, 514, 514, nil, nil, nil, 515, 515, - 515, 514, 515, 514, 514, 514, 515, 515, nil, nil, - nil, 515, nil, 515, 515, 515, 515, 515, 515, 515, - nil, nil, nil, nil, nil, 515, 515, 515, 515, 515, - 515, 515, nil, nil, 515, nil, nil, nil, nil, nil, - nil, 515, nil, nil, 515, 515, 515, 515, 515, 515, - 515, 515, nil, 515, 515, 515, nil, 515, 515, 515, - 515, 515, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 515, nil, nil, 515, nil, nil, 515, 515, nil, - nil, 515, nil, nil, nil, nil, nil, 515, nil, nil, - nil, nil, nil, nil, nil, nil, 515, nil, nil, nil, - nil, 515, 515, 515, 515, nil, 515, 515, 515, 515, - nil, nil, nil, nil, 515, 515, nil, nil, nil, 519, - 519, 519, 515, 519, 515, 515, 515, 519, 519, nil, - nil, nil, 519, nil, 519, 519, 519, 519, 519, 519, - 519, nil, nil, nil, nil, nil, 519, 519, 519, 519, - 519, 519, 519, nil, nil, 519, nil, nil, nil, nil, - nil, nil, 519, nil, nil, 519, 519, 519, 519, 519, - 519, 519, 519, nil, 519, 519, 519, nil, 519, 519, - 519, 519, 519, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 519, nil, nil, 519, nil, nil, 519, 519, - nil, nil, 519, nil, nil, nil, nil, nil, 519, nil, - nil, nil, nil, nil, nil, nil, nil, 519, nil, nil, - nil, nil, 519, 519, 519, 519, nil, 519, 519, 519, - 519, nil, nil, nil, nil, 519, 519, nil, nil, nil, - 525, 525, 525, 519, 525, 519, 519, 519, 525, 525, - nil, nil, nil, 525, nil, 525, 525, 525, 525, 525, - 525, 525, nil, nil, nil, nil, nil, 525, 525, 525, - 525, 525, 525, 525, nil, nil, 525, nil, nil, nil, - nil, nil, nil, 525, nil, nil, 525, 525, 525, 525, - 525, 525, 525, 525, 525, 525, 525, 525, nil, 525, - 525, 525, 525, 525, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 525, nil, nil, 525, nil, nil, 525, - 525, nil, nil, 525, nil, 525, nil, nil, nil, 525, - nil, nil, 525, nil, nil, nil, nil, nil, 525, nil, - nil, nil, nil, 525, 525, 525, 525, nil, 525, 525, - 525, 525, nil, nil, nil, nil, 525, 525, nil, nil, - nil, 528, 528, 528, 525, 528, 525, 525, 525, 528, - 528, nil, nil, nil, 528, nil, 528, 528, 528, 528, - 528, 528, 528, nil, nil, nil, nil, nil, 528, 528, - 528, 528, 528, 528, 528, nil, nil, 528, nil, nil, - nil, nil, nil, nil, 528, nil, nil, 528, 528, 528, - 528, 528, 528, 528, 528, 528, 528, 528, 528, nil, - 528, 528, 528, 528, 528, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 528, nil, nil, 528, nil, nil, - 528, 528, nil, nil, 528, nil, nil, nil, nil, nil, - 528, nil, nil, 528, nil, nil, nil, nil, nil, 528, - nil, nil, nil, nil, 528, 528, 528, 528, nil, 528, - 528, 528, 528, nil, nil, nil, nil, 528, 528, nil, - nil, nil, 542, 542, 542, 528, 542, 528, 528, 528, - 542, 542, nil, nil, nil, 542, nil, 542, 542, 542, - 542, 542, 542, 542, nil, nil, nil, nil, nil, 542, - 542, 542, 542, 542, 542, 542, nil, nil, 542, nil, - nil, nil, nil, nil, nil, 542, nil, nil, 542, 542, - 542, 542, 542, 542, 542, 542, nil, 542, 542, 542, - nil, 542, 542, 542, 542, 542, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 542, nil, nil, 542, nil, - nil, 542, 542, nil, nil, 542, nil, 542, nil, nil, - nil, 542, nil, nil, nil, nil, nil, nil, nil, nil, - 542, nil, nil, nil, nil, 542, 542, 542, 542, nil, - 542, 542, 542, 542, nil, nil, nil, nil, 542, 542, - nil, nil, nil, 543, 543, 543, 542, 543, 542, 542, - 542, 543, 543, nil, nil, nil, 543, nil, 543, 543, - 543, 543, 543, 543, 543, nil, nil, nil, nil, nil, - 543, 543, 543, 543, 543, 543, 543, nil, nil, 543, - nil, nil, nil, nil, nil, nil, 543, nil, nil, 543, - 543, 543, 543, 543, 543, 543, 543, 543, 543, 543, - 543, nil, 543, 543, 543, 543, 543, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 543, nil, nil, 543, - nil, nil, 543, 543, nil, nil, 543, nil, 543, nil, - 543, nil, 543, nil, nil, 543, nil, nil, nil, nil, - nil, 543, nil, nil, nil, nil, 543, 543, 543, 543, - nil, 543, 543, 543, 543, nil, nil, nil, nil, 543, - 543, nil, nil, nil, 553, 553, 553, 543, 553, 543, - 543, 543, 553, 553, nil, nil, nil, 553, nil, 553, - 553, 553, 553, 553, 553, 553, nil, nil, nil, nil, - nil, 553, 553, 553, 553, 553, 553, 553, nil, nil, - 553, nil, nil, nil, nil, nil, nil, 553, nil, nil, - 553, 553, 553, 553, 553, 553, 553, 553, 553, 553, - 553, 553, nil, 553, 553, 553, 553, 553, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 553, nil, nil, - 553, nil, nil, 553, 553, nil, nil, 553, nil, 553, - nil, 553, nil, 553, nil, nil, 553, nil, nil, nil, - nil, nil, 553, nil, nil, nil, nil, 553, 553, 553, - 553, nil, 553, 553, 553, 553, nil, nil, nil, nil, - 553, 553, nil, nil, nil, 587, 587, 587, 553, 587, - 553, 553, 553, 587, 587, nil, nil, nil, 587, nil, - 587, 587, 587, 587, 587, 587, 587, nil, nil, nil, - nil, nil, 587, 587, 587, 587, 587, 587, 587, nil, - nil, 587, nil, nil, nil, nil, nil, nil, 587, nil, - nil, 587, 587, 587, 587, 587, 587, 587, 587, nil, - 587, 587, 587, nil, 587, 587, 587, 587, 587, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 587, nil, - nil, 587, nil, nil, 587, 587, nil, nil, 587, nil, - 587, nil, nil, nil, 587, nil, nil, nil, nil, nil, - nil, nil, nil, 587, nil, nil, nil, nil, 587, 587, - 587, 587, nil, 587, 587, 587, 587, nil, nil, nil, - nil, 587, 587, nil, nil, nil, 588, 588, 588, 587, - 588, 587, 587, 587, 588, 588, nil, nil, nil, 588, - nil, 588, 588, 588, 588, 588, 588, 588, nil, nil, - nil, nil, nil, 588, 588, 588, 588, 588, 588, 588, - nil, nil, 588, nil, nil, nil, nil, nil, nil, 588, - nil, nil, 588, 588, 588, 588, 588, 588, 588, 588, - nil, 588, 588, 588, nil, 588, 588, 588, 588, 588, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 588, - nil, nil, 588, nil, nil, 588, 588, nil, nil, 588, - nil, nil, nil, nil, nil, 588, nil, nil, nil, nil, - nil, nil, nil, nil, 588, nil, nil, nil, nil, 588, - 588, 588, 588, nil, 588, 588, 588, 588, nil, nil, - nil, nil, 588, 588, nil, nil, nil, 591, 591, 591, - 588, 591, 588, 588, 588, 591, 591, nil, nil, nil, - 591, nil, 591, 591, 591, 591, 591, 591, 591, nil, - nil, nil, nil, nil, 591, 591, 591, 591, 591, 591, - 591, nil, nil, 591, nil, nil, nil, nil, nil, nil, - 591, nil, nil, 591, 591, 591, 591, 591, 591, 591, - 591, 591, 591, 591, 591, nil, 591, 591, 591, 591, - 591, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 591, nil, nil, 591, nil, nil, 591, 591, nil, nil, - 591, nil, 591, nil, 591, nil, 591, nil, nil, 591, - nil, nil, nil, nil, nil, 591, nil, nil, nil, nil, - 591, 591, 591, 591, nil, 591, 591, 591, 591, nil, - nil, nil, nil, 591, 591, nil, nil, nil, 592, 592, - 592, 591, 592, 591, 591, 591, 592, 592, nil, nil, - nil, 592, nil, 592, 592, 592, 592, 592, 592, 592, - nil, nil, nil, nil, nil, 592, 592, 592, 592, 592, - 592, 592, nil, nil, 592, nil, nil, nil, nil, nil, - nil, 592, nil, nil, 592, 592, 592, 592, 592, 592, - 592, 592, 592, 592, 592, 592, nil, 592, 592, 592, - 592, 592, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 592, nil, nil, 592, nil, nil, 592, 592, nil, - nil, 592, nil, nil, nil, 592, nil, 592, nil, nil, - 592, nil, nil, nil, nil, nil, 592, nil, nil, nil, - nil, 592, 592, 592, 592, nil, 592, 592, 592, 592, - nil, nil, nil, nil, 592, 592, nil, nil, nil, 593, - 593, 593, 592, 593, 592, 592, 592, 593, 593, nil, - nil, nil, 593, nil, 593, 593, 593, 593, 593, 593, - 593, nil, nil, nil, nil, nil, 593, 593, 593, 593, - 593, 593, 593, nil, nil, 593, nil, nil, nil, nil, - nil, nil, 593, nil, nil, 593, 593, 593, 593, 593, - 593, 593, 593, nil, 593, 593, 593, nil, 593, 593, - 593, 593, 593, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 593, nil, nil, 593, nil, nil, 593, 593, - nil, nil, 593, nil, nil, nil, nil, nil, 593, nil, - nil, nil, nil, nil, nil, nil, nil, 593, nil, nil, - nil, nil, 593, 593, 593, 593, nil, 593, 593, 593, - 593, nil, nil, nil, nil, 593, 593, nil, nil, nil, - 594, 594, 594, 593, 594, 593, 593, 593, 594, 594, - nil, nil, nil, 594, nil, 594, 594, 594, 594, 594, - 594, 594, nil, nil, nil, nil, nil, 594, 594, 594, - 594, 594, 594, 594, nil, nil, 594, nil, nil, nil, - nil, nil, nil, 594, nil, nil, 594, 594, 594, 594, - 594, 594, 594, 594, nil, 594, 594, 594, nil, 594, - 594, 594, 594, 594, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 594, nil, nil, 594, nil, nil, 594, - 594, nil, nil, 594, nil, nil, nil, nil, nil, 594, - nil, nil, nil, nil, nil, nil, nil, nil, 594, nil, - nil, nil, nil, 594, 594, 594, 594, nil, 594, 594, - 594, 594, nil, nil, nil, nil, 594, 594, nil, nil, - nil, 598, 598, 598, 594, 598, 594, 594, 594, 598, - 598, nil, nil, nil, 598, nil, 598, 598, 598, 598, - 598, 598, 598, nil, nil, nil, nil, nil, 598, 598, - 598, 598, 598, 598, 598, nil, nil, 598, nil, nil, - nil, nil, nil, nil, 598, nil, nil, 598, 598, 598, - 598, 598, 598, 598, 598, nil, 598, 598, 598, nil, - 598, 598, 598, 598, 598, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 598, nil, nil, 598, nil, nil, - 598, 598, nil, nil, 598, nil, nil, nil, nil, nil, - 598, nil, nil, nil, nil, nil, nil, nil, nil, 598, - nil, nil, nil, nil, 598, 598, 598, 598, nil, 598, - 598, 598, 598, nil, nil, nil, nil, 598, 598, nil, - nil, nil, 599, 599, 599, 598, 599, 598, 598, 598, - 599, 599, nil, nil, nil, 599, nil, 599, 599, 599, - 599, 599, 599, 599, nil, nil, nil, nil, nil, 599, - 599, 599, 599, 599, 599, 599, nil, nil, 599, nil, - nil, nil, nil, nil, nil, 599, nil, nil, 599, 599, - 599, 599, 599, 599, 599, 599, nil, 599, 599, 599, - nil, 599, 599, 599, 599, 599, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 599, nil, nil, 599, nil, - nil, 599, 599, nil, nil, 599, nil, nil, nil, nil, - nil, 599, nil, nil, nil, nil, nil, nil, nil, nil, - 599, nil, nil, nil, nil, 599, 599, 599, 599, nil, - 599, 599, 599, 599, nil, nil, nil, nil, 599, 599, - nil, nil, nil, 602, 602, 602, 599, 602, 599, 599, - 599, 602, 602, nil, nil, nil, 602, nil, 602, 602, - 602, 602, 602, 602, 602, nil, nil, nil, nil, nil, - 602, 602, 602, 602, 602, 602, 602, nil, nil, 602, - nil, nil, nil, nil, nil, nil, 602, nil, nil, 602, - 602, 602, 602, 602, 602, 602, 602, nil, 602, 602, - 602, nil, 602, 602, 602, 602, 602, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 602, nil, nil, 602, - nil, nil, 602, 602, nil, nil, 602, nil, nil, nil, - nil, nil, 602, nil, nil, nil, nil, nil, nil, nil, - nil, 602, nil, nil, nil, nil, 602, 602, 602, 602, - nil, 602, 602, 602, 602, nil, nil, nil, nil, 602, - 602, nil, nil, nil, 603, 603, 603, 602, 603, 602, - 602, 602, 603, 603, nil, nil, nil, 603, nil, 603, - 603, 603, 603, 603, 603, 603, nil, nil, nil, nil, - nil, 603, 603, 603, 603, 603, 603, 603, nil, nil, - 603, nil, nil, nil, nil, nil, nil, 603, nil, nil, - 603, 603, 603, 603, 603, 603, 603, 603, nil, 603, - 603, 603, nil, 603, 603, 603, 603, 603, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 603, nil, nil, - 603, nil, nil, 603, 603, nil, nil, 603, nil, nil, - nil, nil, nil, 603, nil, nil, nil, nil, nil, nil, - nil, nil, 603, nil, nil, nil, nil, 603, 603, 603, - 603, nil, 603, 603, 603, 603, nil, nil, nil, nil, - 603, 603, nil, nil, nil, 627, 627, 627, 603, 627, - 603, 603, 603, 627, 627, nil, nil, nil, 627, nil, - 627, 627, 627, 627, 627, 627, 627, nil, nil, nil, - nil, nil, 627, 627, 627, 627, 627, 627, 627, nil, - nil, 627, nil, nil, nil, nil, nil, nil, 627, nil, - nil, 627, 627, 627, 627, 627, 627, 627, 627, nil, - 627, 627, 627, nil, 627, 627, 627, 627, 627, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 627, nil, - nil, 627, nil, nil, 627, 627, nil, nil, 627, nil, - nil, nil, nil, nil, 627, nil, nil, nil, nil, nil, - nil, nil, nil, 627, nil, nil, nil, nil, 627, 627, - 627, 627, nil, 627, 627, 627, 627, nil, nil, nil, - nil, 627, 627, nil, nil, nil, 633, 633, 633, 627, - 633, 627, 627, 627, 633, 633, nil, nil, nil, 633, - nil, 633, 633, 633, 633, 633, 633, 633, nil, nil, - nil, nil, nil, 633, 633, 633, 633, 633, 633, 633, - nil, nil, 633, nil, nil, nil, nil, nil, nil, 633, - nil, nil, 633, 633, 633, 633, 633, 633, 633, 633, - nil, 633, 633, 633, nil, 633, 633, nil, nil, 633, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 633, - nil, nil, 633, nil, nil, 633, 633, nil, nil, 633, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 633, - 633, 633, 633, nil, 633, 633, 633, 633, nil, nil, - nil, nil, 633, 633, nil, nil, nil, 644, 644, 644, - 633, 644, 633, 633, 633, 644, 644, nil, nil, nil, - 644, nil, 644, 644, 644, 644, 644, 644, 644, nil, - nil, nil, nil, nil, 644, 644, 644, 644, 644, 644, - 644, nil, nil, 644, nil, nil, nil, nil, nil, nil, - 644, nil, nil, 644, 644, 644, 644, 644, 644, 644, - 644, nil, 644, 644, 644, nil, 644, 644, nil, nil, - 644, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 644, nil, nil, 644, nil, nil, 644, 644, nil, nil, - 644, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 644, 644, 644, 644, nil, 644, 644, 644, 644, nil, - nil, nil, nil, 644, 644, nil, nil, nil, 649, 649, - 649, 644, 649, 644, 644, 644, 649, 649, nil, nil, - nil, 649, nil, 649, 649, 649, 649, 649, 649, 649, - nil, nil, nil, nil, nil, 649, 649, 649, 649, 649, - 649, 649, nil, nil, 649, nil, nil, nil, nil, nil, - nil, 649, nil, nil, 649, 649, 649, 649, 649, 649, - 649, 649, nil, 649, 649, 649, nil, 649, 649, 649, - 649, 649, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 649, nil, nil, 649, nil, nil, 649, 649, nil, - nil, 649, nil, 649, nil, nil, nil, 649, nil, nil, - nil, nil, nil, nil, nil, nil, 649, nil, nil, nil, - nil, 649, 649, 649, 649, nil, 649, 649, 649, 649, - nil, nil, nil, nil, 649, 649, nil, nil, nil, 674, - 674, 674, 649, 674, 649, 649, 649, 674, 674, nil, - nil, nil, 674, nil, 674, 674, 674, 674, 674, 674, - 674, nil, nil, nil, nil, nil, 674, 674, 674, 674, - 674, 674, 674, nil, nil, 674, nil, nil, nil, nil, - nil, nil, 674, nil, nil, 674, 674, 674, 674, 674, - 674, 674, 674, nil, 674, 674, 674, nil, 674, 674, - 674, 674, 674, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 674, nil, nil, 674, nil, nil, 674, 674, - nil, nil, 674, nil, nil, nil, nil, nil, 674, nil, - nil, nil, nil, nil, nil, nil, nil, 674, nil, nil, - nil, nil, 674, 674, 674, 674, nil, 674, 674, 674, - 674, nil, nil, nil, nil, 674, 674, nil, nil, nil, - 701, 701, 701, 674, 701, 674, 674, 674, 701, 701, - nil, nil, nil, 701, nil, 701, 701, 701, 701, 701, - 701, 701, nil, nil, nil, nil, nil, 701, 701, 701, - 701, 701, 701, 701, nil, nil, 701, nil, nil, nil, - nil, nil, nil, 701, nil, nil, 701, 701, 701, 701, - 701, 701, 701, 701, nil, 701, 701, 701, nil, 701, - 701, 701, 701, 701, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 701, nil, nil, 701, nil, nil, 701, - 701, nil, nil, 701, nil, nil, nil, nil, nil, 701, - nil, nil, nil, nil, nil, nil, nil, nil, 701, nil, - nil, nil, nil, 701, 701, 701, 701, nil, 701, 701, - 701, 701, nil, nil, nil, nil, 701, 701, nil, nil, - nil, 707, 707, 707, 701, 707, 701, 701, 701, 707, - 707, nil, nil, nil, 707, nil, 707, 707, 707, 707, - 707, 707, 707, nil, nil, nil, nil, nil, 707, 707, - 707, 707, 707, 707, 707, nil, nil, 707, nil, nil, - nil, nil, nil, nil, 707, nil, nil, 707, 707, 707, - 707, 707, 707, 707, 707, nil, 707, 707, 707, nil, - 707, 707, 707, 707, 707, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 707, nil, nil, 707, nil, nil, - 707, 707, nil, nil, 707, nil, nil, nil, nil, nil, - 707, nil, nil, nil, nil, nil, nil, nil, nil, 707, - nil, nil, nil, nil, 707, 707, 707, 707, nil, 707, - 707, 707, 707, nil, nil, nil, nil, 707, 707, nil, - nil, nil, 730, 730, 730, 707, 730, 707, 707, 707, - 730, 730, nil, nil, nil, 730, nil, 730, 730, 730, - 730, 730, 730, 730, nil, nil, nil, nil, nil, 730, - 730, 730, 730, 730, 730, 730, nil, nil, 730, nil, - nil, nil, nil, nil, nil, 730, nil, nil, 730, 730, - 730, 730, 730, 730, 730, 730, nil, 730, 730, 730, - nil, 730, 730, 730, 730, 730, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 730, nil, nil, 730, nil, - nil, 730, 730, nil, nil, 730, nil, nil, nil, nil, - nil, 730, nil, nil, nil, nil, nil, nil, nil, nil, - 730, nil, nil, nil, nil, 730, 730, 730, 730, nil, - 730, 730, 730, 730, nil, nil, nil, nil, 730, 730, - nil, nil, nil, 732, 732, 732, 730, 732, 730, 730, - 730, 732, 732, nil, nil, nil, 732, nil, 732, 732, - 732, 732, 732, 732, 732, nil, nil, nil, nil, nil, - 732, 732, 732, 732, 732, 732, 732, nil, nil, 732, - nil, nil, nil, nil, nil, nil, 732, nil, nil, 732, - 732, 732, 732, 732, 732, 732, 732, nil, 732, 732, - 732, nil, 732, 732, 732, 732, 732, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 732, nil, nil, 732, - nil, nil, 732, 732, nil, nil, 732, nil, nil, nil, - nil, nil, 732, nil, nil, nil, nil, nil, nil, nil, - nil, 732, nil, nil, nil, nil, 732, 732, 732, 732, - nil, 732, 732, 732, 732, nil, nil, nil, nil, 732, - 732, nil, nil, nil, 746, 746, 746, 732, 746, 732, - 732, 732, 746, 746, nil, nil, nil, 746, nil, 746, - 746, 746, 746, 746, 746, 746, nil, nil, nil, nil, - nil, 746, 746, 746, 746, 746, 746, 746, nil, nil, - 746, nil, nil, nil, nil, nil, nil, 746, nil, nil, - 746, 746, 746, 746, 746, 746, 746, 746, nil, 746, - 746, 746, nil, 746, 746, 746, 746, 746, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 746, nil, nil, - 746, nil, nil, 746, 746, nil, nil, 746, nil, nil, - nil, nil, nil, 746, nil, nil, nil, nil, nil, nil, - nil, nil, 746, nil, nil, nil, nil, 746, 746, 746, - 746, nil, 746, 746, 746, 746, nil, nil, nil, nil, - 746, 746, nil, nil, nil, 747, 747, 747, 746, 747, - 746, 746, 746, 747, 747, nil, nil, nil, 747, nil, - 747, 747, 747, 747, 747, 747, 747, nil, nil, nil, - nil, nil, 747, 747, 747, 747, 747, 747, 747, nil, - nil, 747, nil, nil, nil, nil, nil, nil, 747, nil, - nil, 747, 747, 747, 747, 747, 747, 747, 747, nil, - 747, 747, 747, nil, 747, 747, 747, 747, 747, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 747, nil, - nil, 747, nil, nil, 747, 747, nil, nil, 747, nil, - nil, nil, nil, nil, 747, nil, nil, nil, nil, nil, - nil, nil, nil, 747, nil, nil, nil, nil, 747, 747, - 747, 747, nil, 747, 747, 747, 747, nil, nil, nil, - nil, 747, 747, nil, nil, nil, 748, 748, 748, 747, - 748, 747, 747, 747, 748, 748, nil, nil, nil, 748, - nil, 748, 748, 748, 748, 748, 748, 748, nil, nil, - nil, nil, nil, 748, 748, 748, 748, 748, 748, 748, - nil, nil, 748, nil, nil, nil, nil, nil, nil, 748, - nil, nil, 748, 748, 748, 748, 748, 748, 748, 748, - nil, 748, 748, 748, nil, 748, 748, 748, 748, 748, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 748, - nil, nil, 748, nil, nil, 748, 748, nil, nil, 748, - nil, nil, nil, nil, nil, 748, nil, nil, nil, nil, - nil, nil, nil, nil, 748, nil, nil, nil, nil, 748, - 748, 748, 748, nil, 748, 748, 748, 748, nil, nil, - nil, nil, 748, 748, nil, nil, nil, 749, 749, 749, - 748, 749, 748, 748, 748, 749, 749, nil, nil, nil, - 749, nil, 749, 749, 749, 749, 749, 749, 749, nil, - nil, nil, nil, nil, 749, 749, 749, 749, 749, 749, - 749, nil, nil, 749, nil, nil, nil, nil, nil, nil, - 749, nil, nil, 749, 749, 749, 749, 749, 749, 749, - 749, nil, 749, 749, 749, nil, 749, 749, 749, 749, - 749, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 749, nil, nil, 749, nil, nil, 749, 749, nil, nil, - 749, nil, nil, nil, nil, nil, 749, nil, nil, nil, - nil, nil, nil, nil, nil, 749, nil, nil, nil, nil, - 749, 749, 749, 749, nil, 749, 749, 749, 749, nil, - nil, nil, nil, 749, 749, nil, nil, nil, 751, 751, - 751, 749, 751, 749, 749, 749, 751, 751, nil, nil, - nil, 751, nil, 751, 751, 751, 751, 751, 751, 751, - nil, nil, nil, nil, nil, 751, 751, 751, 751, 751, - 751, 751, nil, nil, 751, nil, nil, nil, nil, nil, - nil, 751, nil, nil, 751, 751, 751, 751, 751, 751, - 751, 751, nil, 751, 751, 751, nil, 751, 751, 751, - 751, 751, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 751, nil, nil, 751, nil, nil, 751, 751, nil, - nil, 751, nil, nil, nil, nil, nil, 751, nil, nil, - nil, nil, nil, nil, nil, nil, 751, nil, nil, nil, - nil, 751, 751, 751, 751, nil, 751, 751, 751, 751, - nil, nil, nil, nil, 751, 751, nil, nil, nil, 763, - 763, 763, 751, 763, 751, 751, 751, 763, 763, nil, - nil, nil, 763, nil, 763, 763, 763, 763, 763, 763, - 763, nil, nil, nil, nil, nil, 763, 763, 763, 763, - 763, 763, 763, nil, nil, 763, nil, nil, nil, nil, - nil, nil, 763, nil, nil, 763, 763, 763, 763, 763, - 763, 763, 763, nil, 763, 763, 763, nil, 763, 763, - nil, nil, 763, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 763, nil, nil, 763, nil, nil, 763, 763, - nil, nil, 763, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 763, 763, 763, 763, nil, 763, 763, 763, - 763, nil, nil, nil, nil, 763, 763, nil, nil, nil, - 800, 800, 800, 763, 800, 763, 763, 763, 800, 800, - nil, nil, nil, 800, nil, 800, 800, 800, 800, 800, - 800, 800, nil, nil, nil, nil, nil, 800, 800, 800, - 800, 800, 800, 800, nil, nil, 800, nil, nil, nil, - nil, nil, nil, 800, nil, nil, 800, 800, 800, 800, - 800, 800, 800, 800, nil, 800, 800, 800, nil, 800, - 800, 800, 800, 800, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 800, nil, nil, 800, nil, nil, 800, - 800, nil, nil, 800, nil, nil, nil, nil, nil, 800, - nil, nil, nil, nil, nil, nil, nil, nil, 800, nil, - nil, nil, nil, 800, 800, 800, 800, nil, 800, 800, - 800, 800, nil, nil, nil, nil, 800, 800, nil, nil, - nil, 813, 813, 813, 800, 813, 800, 800, 800, 813, - 813, nil, nil, nil, 813, nil, 813, 813, 813, 813, - 813, 813, 813, nil, nil, nil, nil, nil, 813, 813, - 813, 813, 813, 813, 813, nil, nil, 813, nil, nil, - nil, nil, nil, nil, 813, nil, nil, 813, 813, 813, - 813, 813, 813, 813, 813, nil, 813, 813, 813, nil, - 813, 813, 813, 813, 813, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 813, nil, nil, 813, nil, nil, - 813, 813, nil, nil, 813, nil, nil, nil, nil, nil, - 813, nil, nil, nil, nil, nil, nil, nil, nil, 813, - nil, nil, nil, nil, 813, 813, 813, 813, nil, 813, - 813, 813, 813, nil, nil, nil, nil, 813, 813, nil, - nil, nil, 818, 818, 818, 813, 818, 813, 813, 813, - 818, 818, nil, nil, nil, 818, nil, 818, 818, 818, - 818, 818, 818, 818, nil, nil, nil, nil, nil, 818, - 818, 818, 818, 818, 818, 818, nil, nil, 818, nil, - nil, nil, nil, nil, nil, 818, nil, nil, 818, 818, - 818, 818, 818, 818, 818, 818, nil, 818, 818, 818, - nil, 818, 818, 818, 818, 818, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 818, nil, nil, 818, nil, - nil, 818, 818, nil, nil, 818, nil, 818, nil, nil, - nil, 818, nil, nil, nil, nil, nil, nil, nil, nil, - 818, nil, nil, nil, nil, 818, 818, 818, 818, nil, - 818, 818, 818, 818, nil, nil, nil, nil, 818, 818, - nil, nil, nil, 835, 835, 835, 818, 835, 818, 818, - 818, 835, 835, nil, nil, nil, 835, nil, 835, 835, - 835, 835, 835, 835, 835, nil, nil, nil, nil, nil, - 835, 835, 835, 835, 835, 835, 835, nil, nil, 835, - nil, nil, nil, nil, nil, nil, 835, nil, nil, 835, - 835, 835, 835, 835, 835, 835, 835, 835, 835, 835, - 835, nil, 835, 835, 835, 835, 835, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 835, nil, nil, 835, - nil, nil, 835, 835, nil, nil, 835, nil, nil, nil, - 835, nil, 835, nil, nil, 835, nil, nil, nil, nil, - nil, 835, nil, nil, nil, nil, 835, 835, 835, 835, - nil, 835, 835, 835, 835, nil, nil, nil, nil, 835, - 835, nil, nil, nil, 836, 836, 836, 835, 836, 835, - 835, 835, 836, 836, nil, nil, nil, 836, nil, 836, - 836, 836, 836, 836, 836, 836, nil, nil, nil, nil, - nil, 836, 836, 836, 836, 836, 836, 836, nil, nil, - 836, nil, nil, nil, nil, nil, nil, 836, nil, nil, - 836, 836, 836, 836, 836, 836, 836, 836, nil, 836, - 836, 836, nil, 836, 836, 836, 836, 836, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 836, nil, nil, - 836, nil, nil, 836, 836, nil, nil, 836, nil, nil, - nil, nil, nil, 836, nil, nil, nil, nil, nil, nil, - nil, nil, 836, nil, nil, nil, nil, 836, 836, 836, - 836, nil, 836, 836, 836, 836, nil, nil, nil, nil, - 836, 836, nil, nil, nil, 850, 850, 850, 836, 850, - 836, 836, 836, 850, 850, nil, nil, nil, 850, nil, - 850, 850, 850, 850, 850, 850, 850, nil, nil, nil, - nil, nil, 850, 850, 850, 850, 850, 850, 850, nil, - nil, 850, nil, nil, nil, nil, nil, nil, 850, nil, - nil, 850, 850, 850, 850, 850, 850, 850, 850, nil, - 850, 850, 850, nil, 850, 850, nil, nil, 850, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 850, nil, - nil, 850, nil, nil, 850, 850, nil, nil, 850, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 850, 850, - 850, 850, nil, 850, 850, 850, 850, nil, nil, nil, - nil, 850, 850, nil, nil, nil, 862, 862, 862, 850, - 862, 850, 850, 850, 862, 862, nil, nil, nil, 862, - nil, 862, 862, 862, 862, 862, 862, 862, nil, nil, - nil, nil, nil, 862, 862, 862, 862, 862, 862, 862, - nil, nil, 862, nil, nil, nil, nil, nil, nil, 862, - nil, nil, 862, 862, 862, 862, 862, 862, 862, 862, - nil, 862, 862, 862, nil, 862, 862, nil, nil, 862, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 862, - nil, nil, 862, nil, nil, 862, 862, nil, nil, 862, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 862, - 862, 862, 862, nil, 862, 862, 862, 862, nil, nil, - nil, nil, 862, 862, nil, nil, nil, 971, 971, 971, - 862, 971, 862, 862, 862, 971, 971, nil, nil, nil, - 971, nil, 971, 971, 971, 971, 971, 971, 971, nil, - nil, nil, nil, nil, 971, 971, 971, 971, 971, 971, - 971, nil, nil, 971, nil, nil, nil, nil, nil, nil, - 971, nil, nil, 971, 971, 971, 971, 971, 971, 971, - 971, 971, 971, 971, 971, nil, 971, 971, 971, 971, - 971, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 971, nil, nil, 971, nil, nil, 971, 971, nil, nil, - 971, nil, 971, nil, 971, nil, 971, nil, nil, 971, - nil, nil, nil, nil, nil, 971, nil, nil, nil, nil, - 971, 971, 971, 971, nil, 971, 971, 971, 971, nil, - nil, nil, nil, 971, 971, nil, nil, nil, nil, 56, - nil, 971, nil, 971, 971, 971, 56, 56, 56, nil, - nil, 56, 56, 56, nil, 56, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 56, 56, 56, nil, nil, - nil, nil, nil, nil, nil, 56, 56, nil, 56, 56, - 56, 56, 56, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, 56, nil, - nil, 56, 56, 56, nil, nil, 56, nil, nil, 56, - nil, nil, 56, 56, nil, 56, nil, 56, nil, 56, - nil, 56, 56, nil, 56, 56, 56, 56, 56, nil, - 56, nil, 56, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 56, nil, nil, 56, - 56, 56, 56, 424, 56, nil, 56, nil, nil, nil, - 424, 424, 424, nil, nil, 424, 424, 424, nil, 424, - nil, nil, nil, nil, nil, nil, nil, nil, 424, 424, - 424, 424, nil, nil, nil, nil, nil, nil, nil, 424, - 424, nil, 424, 424, 424, 424, 424, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 424, - 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, - 424, 424, 424, nil, nil, 424, 424, 424, nil, nil, - 424, nil, nil, 424, nil, nil, 424, 424, nil, 424, - nil, 424, nil, 424, nil, 424, 424, nil, 424, 424, - 424, 424, 424, nil, 424, 424, 424, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 424, nil, nil, 424, 424, 424, 424, 425, 424, nil, - 424, nil, nil, nil, 425, 425, 425, nil, nil, 425, - 425, 425, nil, 425, nil, nil, nil, nil, nil, nil, - nil, nil, 425, 425, 425, 425, nil, nil, nil, nil, - nil, nil, nil, 425, 425, nil, 425, 425, 425, 425, - 425, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 425, 425, 425, 425, 425, 425, 425, - 425, 425, 425, 425, 425, 425, 425, nil, nil, 425, - 425, 425, nil, nil, 425, nil, nil, 425, nil, nil, - 425, 425, nil, 425, nil, 425, nil, 425, nil, 425, - 425, nil, 425, 425, 425, 425, 425, nil, 425, 425, - 425, 937, nil, 937, 937, 937, 937, 937, nil, nil, - nil, nil, nil, nil, 425, nil, 937, 425, 425, 425, - 425, 27, 425, nil, 425, nil, nil, nil, 27, 27, - 27, nil, nil, 27, 27, 27, nil, 27, 937, nil, - nil, nil, nil, nil, nil, nil, 27, 27, 27, 937, - 937, nil, nil, nil, 937, nil, nil, 27, 27, nil, - 27, 27, 27, 27, 27, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, nil, nil, 27, 27, 27, nil, nil, 27, nil, - 27, 27, nil, nil, 27, 27, nil, 27, nil, 27, - nil, 27, nil, 27, 27, nil, 27, 27, 27, 27, - 27, 28, 27, 27, 27, nil, nil, nil, 28, 28, - 28, nil, nil, 28, 28, 28, nil, 28, 27, nil, - nil, 27, 27, nil, 27, nil, 27, 28, 28, nil, - nil, nil, nil, nil, nil, nil, nil, 28, 28, nil, - 28, 28, 28, 28, 28, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, - 28, nil, nil, 28, 28, 28, nil, nil, 28, nil, - 28, 28, nil, nil, 28, 28, nil, 28, nil, 28, - nil, 28, nil, 28, 28, nil, 28, 28, 28, 28, - 28, nil, 28, 415, 28, nil, nil, nil, nil, nil, - 415, 415, 415, nil, nil, 415, 415, 415, 28, 415, - nil, 28, 28, nil, 28, nil, 28, nil, 415, 415, - 415, nil, nil, nil, nil, nil, nil, nil, nil, 415, - 415, nil, 415, 415, 415, 415, 415, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 415, - 415, 415, 415, 415, 415, 415, 415, 415, 415, 415, - 415, 415, 415, nil, nil, 415, 415, 415, nil, nil, - 415, nil, 415, 415, nil, nil, 415, 415, nil, 415, - nil, 415, nil, 415, nil, 415, 415, nil, 415, 415, - 415, 415, 415, nil, 415, 415, 415, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 415, nil, 474, 415, 415, nil, 415, nil, 415, 474, - 474, 474, nil, nil, 474, 474, 474, 614, 474, 614, - 614, 614, 614, 614, nil, nil, nil, 474, 474, nil, - nil, nil, 614, nil, nil, nil, nil, nil, 474, 474, - nil, 474, 474, 474, 474, 474, nil, nil, nil, nil, - nil, nil, nil, nil, 614, nil, 533, nil, 533, 533, - 533, 533, 533, 614, 614, 614, 614, nil, nil, nil, - 614, 533, nil, nil, nil, nil, nil, nil, nil, 474, - nil, nil, nil, nil, nil, nil, 474, nil, nil, nil, - nil, 474, 474, 533, 533, nil, 614, nil, nil, nil, - nil, nil, 533, 533, 533, 533, nil, nil, nil, 533, - nil, nil, nil, nil, 474, 474, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 474, - nil, nil, 474, nil, nil, nil, nil, 474, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, nil, nil, nil, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, nil, nil, nil, nil, nil, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - nil, 8, nil, nil, nil, nil, nil, nil, nil, 8, - 8, nil, 8, 8, 8, 8, 8, 8, 8, nil, - nil, 8, 8, nil, nil, nil, 8, 8, 8, 8, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 8, 8, nil, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, nil, nil, - 8, 8, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 8, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - nil, nil, nil, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, nil, nil, nil, nil, nil, 9, 9, - 9, 9, 9, 9, 9, 9, 9, nil, nil, 9, - nil, nil, nil, nil, nil, nil, nil, 9, 9, nil, - 9, 9, 9, 9, 9, 9, 9, nil, nil, 9, - 9, nil, nil, nil, 9, 9, 9, 9, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 9, 9, nil, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, nil, nil, 9, 9, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 9, 395, 395, 395, 395, 395, 395, - 395, 395, 395, 395, 395, 395, 395, 395, 395, 395, - 395, 395, 395, 395, 395, 395, 395, 395, nil, nil, - nil, 395, 395, 395, 395, 395, 395, 395, 395, 395, - 395, nil, nil, nil, nil, nil, 395, 395, 395, 395, - 395, 395, 395, 395, 395, nil, nil, 395, nil, nil, - nil, nil, nil, nil, nil, 395, 395, nil, 395, 395, - 395, 395, 395, 395, 395, nil, nil, 395, 395, nil, - nil, nil, 395, 395, 395, 395, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 395, - 395, nil, 395, 395, 395, 395, 395, 395, 395, 395, - 395, 395, 395, 395, nil, nil, 395, 395, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 395, 584, 584, 584, 584, 584, 584, 584, 584, - 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, - 584, 584, 584, 584, 584, 584, nil, nil, nil, 584, - 584, 584, 584, 584, 584, 584, 584, 584, 584, nil, - nil, nil, nil, nil, 584, 584, 584, 584, 584, 584, - 584, 584, 584, nil, nil, 584, nil, nil, nil, nil, - nil, nil, nil, 584, 584, nil, 584, 584, 584, 584, - 584, 584, 584, nil, nil, 584, 584, nil, nil, nil, - 584, 584, 584, 584, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 584, 584, nil, - 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, - 584, 584, nil, nil, 584, 584, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 584, - 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, - 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, - 71, 71, 71, 71, nil, nil, nil, 71, 71, 71, - 71, 71, 71, 71, 71, 71, 71, nil, nil, nil, - nil, nil, 71, 71, 71, 71, 71, 71, 71, 71, - 71, 71, 71, 71, nil, 71, nil, nil, nil, nil, - nil, 71, 71, nil, 71, 71, 71, 71, 71, 71, - 71, nil, nil, 71, 71, nil, nil, nil, 71, 71, - 71, 71, nil, nil, nil, nil, nil, 71, nil, nil, - nil, nil, nil, nil, nil, 71, 71, nil, 71, 71, - 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, - nil, nil, 71, 714, 714, 714, 714, 714, 714, 714, - 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, - 714, 714, 714, 714, 714, 714, 714, nil, nil, nil, - 714, 714, 714, 714, 714, 714, 714, 714, 714, 714, - nil, nil, nil, nil, nil, 714, 714, 714, 714, 714, - 714, 714, 714, 714, nil, nil, 714, nil, nil, nil, - nil, nil, nil, nil, 714, 714, nil, 714, 714, 714, - 714, 714, 714, 714, nil, nil, 714, 714, nil, nil, - nil, 714, 714, 714, 714, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 714, 714, - nil, 714, 714, 714, 714, 714, 714, 714, 714, 714, - 714, 714, 714, 212, 212, 714, nil, 212, nil, nil, - nil, nil, nil, nil, nil, 212, 212, nil, 212, 212, - 212, 212, 212, 212, 212, nil, nil, 212, 212, nil, - nil, nil, 212, 212, 212, 212, nil, nil, nil, nil, - nil, 212, nil, nil, nil, nil, nil, nil, nil, 212, - 212, nil, 212, 212, 212, 212, 212, 212, 212, 212, - 212, 212, 212, 212, 213, 213, 212, nil, 213, nil, - nil, nil, nil, nil, nil, nil, 213, 213, nil, 213, - 213, 213, 213, 213, 213, 213, nil, nil, 213, 213, - nil, nil, nil, 213, 213, 213, 213, nil, nil, nil, - nil, nil, 213, nil, nil, nil, nil, nil, nil, nil, - 213, 213, nil, 213, 213, 213, 213, 213, 213, 213, - 213, 213, 213, 213, 213, 261, 261, 213, nil, 261, - nil, nil, nil, nil, nil, nil, nil, 261, 261, nil, - 261, 261, 261, 261, 261, 261, 261, nil, nil, 261, - 261, nil, nil, nil, 261, 261, 261, 261, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 261, 261, nil, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 261, 440, 440, 261, nil, - 440, nil, nil, nil, nil, nil, nil, nil, 440, 440, - nil, 440, 440, 440, 440, 440, 440, 440, nil, nil, - 440, 440, nil, nil, nil, 440, 440, 440, 440, nil, - nil, nil, nil, nil, 440, nil, nil, nil, nil, nil, - nil, nil, 440, 440, nil, 440, 440, 440, 440, 440, - 440, 440, 440, 440, 440, 440, 440, 441, 441, 440, - nil, 441, nil, nil, nil, nil, nil, nil, nil, 441, - 441, nil, 441, 441, 441, 441, 441, 441, 441, nil, - nil, 441, 441, nil, nil, nil, 441, 441, 441, 441, - nil, nil, nil, nil, nil, 441, nil, nil, nil, nil, - nil, nil, nil, 441, 441, nil, 441, 441, 441, 441, - 441, 441, 441, 441, 441, 441, 441, 441, 506, 506, - 441, nil, 506, nil, nil, nil, nil, nil, nil, nil, - 506, 506, nil, 506, 506, 506, 506, 506, 506, 506, - nil, nil, 506, 506, nil, nil, nil, 506, 506, 506, - 506, nil, nil, nil, nil, nil, 506, nil, nil, nil, - nil, nil, nil, nil, 506, 506, nil, 506, 506, 506, - 506, 506, 506, 506, 506, 506, 506, 506, 506, 507, - 507, 506, nil, 507, nil, nil, nil, nil, nil, nil, - nil, 507, 507, nil, 507, 507, 507, 507, 507, 507, - 507, nil, nil, 507, 507, nil, nil, nil, 507, 507, - 507, 507, nil, nil, nil, nil, nil, 507, nil, nil, - nil, nil, nil, nil, nil, 507, 507, nil, 507, 507, - 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, - 516, 516, 507, nil, 516, nil, nil, nil, nil, nil, - nil, nil, 516, 516, nil, 516, 516, 516, 516, 516, - 516, 516, nil, nil, 516, 516, nil, nil, nil, 516, - 516, 516, 516, nil, nil, nil, nil, nil, 516, nil, - nil, nil, nil, nil, nil, nil, 516, 516, nil, 516, - 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 517, 517, 516, nil, 517, nil, nil, nil, nil, - nil, nil, nil, 517, 517, nil, 517, 517, 517, 517, - 517, 517, 517, nil, nil, 517, 517, nil, nil, nil, - 517, 517, 517, 517, nil, nil, nil, nil, nil, 517, - nil, nil, nil, nil, nil, nil, nil, 517, 517, nil, - 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, - 517, 517, 544, 544, 517, nil, 544, nil, nil, nil, - nil, nil, nil, nil, 544, 544, nil, 544, 544, 544, - 544, 544, 544, 544, nil, nil, 544, 544, nil, nil, - nil, 544, 544, 544, 544, nil, nil, nil, nil, nil, - 544, nil, nil, nil, nil, nil, nil, nil, 544, 544, - nil, 544, 544, 544, 544, 544, 544, 544, 544, 544, - 544, 544, 544, 545, 545, 544, nil, 545, nil, nil, - nil, nil, nil, nil, nil, 545, 545, nil, 545, 545, - 545, 545, 545, 545, 545, nil, nil, 545, 545, nil, - nil, nil, 545, 545, 545, 545, nil, nil, nil, nil, - nil, 545, nil, nil, nil, nil, nil, nil, nil, 545, - 545, nil, 545, 545, 545, 545, 545, 545, 545, 545, - 545, 545, 545, 545, 551, 551, 545, nil, 551, nil, - nil, nil, nil, nil, nil, nil, 551, 551, nil, 551, - 551, 551, 551, 551, 551, 551, nil, nil, 551, 551, - nil, nil, nil, 551, 551, 551, 551, nil, nil, nil, - nil, nil, 551, nil, nil, nil, nil, nil, nil, nil, - 551, 551, nil, 551, 551, 551, 551, 551, 551, 551, - 551, 551, 551, 551, 551, 552, 552, 551, nil, 552, - nil, nil, nil, nil, nil, nil, nil, 552, 552, nil, - 552, 552, 552, 552, 552, 552, 552, nil, nil, 552, - 552, nil, nil, nil, 552, 552, 552, 552, nil, nil, - nil, nil, nil, 552, nil, nil, nil, nil, nil, nil, - nil, 552, 552, nil, 552, 552, 552, 552, 552, 552, - 552, 552, 552, 552, 552, 552, 918, 918, 552, nil, - 918, nil, nil, nil, nil, nil, nil, nil, 918, 918, - nil, 918, 918, 918, 918, 918, 918, 918, nil, nil, - 918, 918, nil, nil, nil, 918, 918, 918, 918, nil, - nil, nil, nil, nil, 918, nil, nil, nil, nil, nil, - nil, nil, 918, 918, nil, 918, 918, 918, 918, 918, - 918, 918, 918, 918, 918, 918, 918, 972, 972, 918, - nil, 972, nil, nil, nil, nil, nil, nil, nil, 972, - 972, nil, 972, 972, 972, 972, 972, 972, 972, nil, - nil, 972, 972, nil, nil, nil, 972, 972, 972, 972, - nil, nil, nil, nil, nil, 972, nil, nil, nil, nil, - nil, nil, nil, 972, 972, nil, 972, 972, 972, 972, - 972, 972, 972, 972, 972, 972, 972, 972, 973, 973, - 972, nil, 973, nil, nil, nil, nil, nil, nil, nil, - 973, 973, nil, 973, 973, 973, 973, 973, 973, 973, - nil, nil, 973, 973, nil, nil, nil, 973, 973, 973, - 973, nil, nil, nil, nil, nil, 973, nil, nil, nil, - nil, nil, nil, nil, 973, 973, nil, 973, 973, 973, - 973, 973, 973, 973, 973, 973, 973, 973, 973, nil, - 655, 973, 655, 655, 655, 655, 655, nil, 712, nil, - 712, 712, 712, 712, 712, 655, nil, nil, nil, nil, - nil, nil, nil, 712, nil, 713, nil, 713, 713, 713, - 713, 713, nil, nil, nil, nil, nil, 655, nil, nil, - 713, nil, nil, nil, nil, 712, 655, 655, 655, 655, - nil, nil, nil, 655, 712, 712, 712, 712, nil, nil, - nil, 712, 713, nil, 794, nil, 794, 794, 794, 794, - 794, 713, 713, 713, 713, nil, nil, nil, 713, 794, - nil, 796, nil, 796, 796, 796, 796, 796, nil, 841, - nil, 841, 841, 841, 841, 841, 796, nil, nil, nil, - nil, 794, nil, nil, 841, nil, nil, nil, nil, nil, - 794, 794, 794, 794, nil, nil, nil, 794, 796, nil, - nil, nil, nil, nil, nil, nil, 841, 796, 796, 796, - 796, nil, nil, nil, 796, 841, 841, 841, 841, nil, - nil, 843, 841, 843, 843, 843, 843, 843, nil, 933, - nil, 933, 933, 933, 933, 933, 843, nil, nil, nil, - nil, nil, nil, nil, 933, nil, 939, nil, 939, 939, - 939, 939, 939, nil, nil, nil, nil, nil, 843, nil, - nil, 939, nil, nil, nil, nil, 933, 843, 843, 843, - 843, nil, nil, nil, 843, 933, 933, 933, 933, nil, - nil, nil, 933, 939, nil, 957, nil, 957, 957, 957, - 957, 957, nil, nil, 939, 939, nil, nil, nil, 939, - 957, nil, 959, nil, 959, 959, 959, 959, 959, 961, - nil, 961, 961, 961, 961, 961, nil, 959, nil, nil, - nil, nil, 957, nil, 961, nil, nil, nil, nil, nil, - nil, 957, 957, 957, 957, nil, nil, nil, 957, 959, - nil, nil, nil, nil, nil, nil, 961, nil, nil, nil, - 959, 959, nil, nil, nil, 959, nil, 961, 961, nil, - nil, 963, 961, 963, 963, 963, 963, 963, 1001, nil, - 1001, 1001, 1001, 1001, 1001, 1011, 963, 1011, 1011, 1011, - 1011, 1011, nil, 1001, nil, nil, nil, nil, nil, nil, - 1011, nil, nil, nil, nil, nil, nil, nil, 963, nil, - nil, nil, nil, nil, nil, 1001, nil, nil, nil, 963, - 963, nil, 1011, nil, 963, nil, 1001, 1001, nil, nil, - nil, 1001, nil, 1011, 1011, nil, nil, nil, 1011 ] - -racc_action_pointer = [ - 747, 20, nil, -73, nil, 5086, 1447, -81, 22816, 22944, - -68, nil, -81, -6, 338, 59, 66, 359, nil, -79, - 606, 1167, 197, nil, 173, nil, -8, 22331, 22441, 5217, - 5348, 5479, nil, 887, 5610, 5741, nil, 101, 199, 228, - 205, 142, 5880, 6011, 6142, 150, 424, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 21929, nil, -72, 6273, - 6404, -20, nil, 6535, 6666, nil, nil, 6797, 6936, 7067, - 7198, 23328, nil, nil, nil, nil, nil, nil, nil, 377, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 0, nil, nil, - 112, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 319, nil, 7337, nil, nil, nil, nil, 7476, 7607, - 7738, 7869, 8008, 1027, nil, 730, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 190, nil, 1167, 8139, - 8270, 8401, 23502, 23563, 8532, 8663, 8794, 8925, 9056, 9187, - nil, nil, 437, -40, -23, 290, 107, 213, 274, nil, - 9318, 1307, 294, 9449, 9580, 9711, 9842, 9973, 10104, 10235, - 10366, 10497, 10628, 10759, 10890, 11021, 11152, 11283, 11414, 11545, - 11676, 11807, 11938, 12069, 12200, 12331, 12462, 12593, 12724, nil, - nil, 23624, nil, nil, 301, 12855, 12986, nil, nil, nil, - nil, nil, nil, nil, 13117, nil, 1307, nil, 286, 290, - nil, 13248, 342, 13379, nil, 13510, 13641, nil, nil, 148, - nil, 13780, 1572, 332, 315, 1447, 328, 383, 359, 13911, - 1587, 481, 750, 789, 445, 890, nil, 413, 386, 10, - nil, nil, nil, 461, 225, 428, 14050, nil, 252, 501, - 929, nil, 505, nil, 14181, 1727, 14312, 454, nil, -101, - 401, 494, 477, 402, 511, nil, nil, 594, -1, 33, - 14443, 14574, 221, 636, 527, -18, 9, 959, 611, 10, - 671, nil, nil, 337, 373, 158, nil, 1027, nil, 37, - 14705, nil, nil, nil, 295, 371, 397, 449, 485, 509, - 512, 626, 641, nil, 677, nil, 14836, nil, 242, 327, - 365, 394, 399, -41, -35, 403, nil, nil, nil, nil, - nil, nil, nil, nil, 592, 23072, nil, nil, nil, nil, - 607, nil, nil, 599, 14967, 607, nil, nil, 887, 633, - nil, 638, 642, 258, 347, 22553, nil, nil, nil, 222, - 334, 695, nil, nil, 22063, 22197, nil, 1447, nil, 662, - nil, nil, 747, nil, nil, nil, nil, -35, nil, 717, - 23685, 23746, 15098, 130, 15229, 15360, 15491, 3267, 3407, 3138, - 3435, 762, 767, 771, 775, 5217, 5348, 5479, 3547, 3687, - 3827, 3967, 4107, 4247, 4387, 4527, 4667, 4807, 489, 3295, - 4947, 5086, 1587, -59, 22682, nil, nil, nil, nil, 716, - nil, -53, -20, 730, nil, nil, 15622, nil, 15753, nil, - 15884, nil, nil, nil, nil, 16023, 1587, 1867, 741, 739, - nil, nil, 741, 16162, 747, 16293, 23807, 23868, 1030, 790, - nil, 16424, 748, nil, 16555, 16686, 23929, 23990, 1727, 16817, - 877, 887, 650, 810, nil, 16948, nil, nil, 17079, nil, - nil, nil, nil, 22685, 2007, 889, nil, 2147, 27, 29, - 887, 902, 17210, 17341, 24051, 24112, 25, nil, nil, 1069, - nil, 24173, 24234, 17472, nil, nil, nil, 450, 140, 2287, - 824, nil, -33, nil, nil, nil, 870, nil, nil, nil, - 795, nil, nil, 192, nil, 212, nil, nil, 781, nil, - 792, nil, nil, nil, 23200, nil, 810, 17603, 17734, 418, - 853, 17865, 17996, 18127, 18258, 872, nil, nil, 18389, 18520, - 877, nil, 18651, 18782, nil, nil, 168, 217, 470, 606, - 846, 1027, 845, nil, 22646, nil, 2427, 954, 5, 202, - nil, 2567, 2707, nil, 853, nil, 904, 18913, nil, nil, - nil, 887, 180, 19044, 868, nil, 881, 136, 177, 923, - 410, 1167, 925, 884, 19175, 1867, 953, -14, 1006, 19306, - nil, 891, nil, 520, nil, 24479, nil, 891, 901, nil, - 902, 906, 907, nil, nil, nil, nil, nil, nil, nil, - 900, 3113, nil, nil, 19437, nil, nil, nil, 1000, nil, - nil, nil, 1002, nil, nil, 1003, 717, nil, 1041, nil, - nil, nil, nil, 1054, nil, 36, 934, 28, 40, 122, - 151, 19568, 747, 1307, nil, 936, 2847, 19699, nil, nil, - 1058, 2987, 24487, 24504, 23441, nil, nil, nil, nil, nil, - nil, 3127, nil, nil, nil, nil, nil, nil, nil, 935, - 19830, 2007, 19961, nil, 936, nil, 2147, nil, 2287, nil, - nil, 2427, nil, 2567, nil, 2707, 20092, 20223, 20354, 20485, - 253, 20616, 950, 954, nil, 975, 980, 983, nil, 1008, - 991, 991, 990, 20747, nil, nil, 1130, nil, nil, 3267, - 1027, 1132, nil, nil, nil, 1018, 887, nil, nil, 1144, - nil, 3407, 1021, 1070, nil, nil, 1069, nil, 37, 1030, - 372, nil, nil, 674, 24543, nil, 24560, nil, 5788, nil, - 20878, nil, 3142, nil, 1028, 327, 1034, nil, nil, nil, - nil, 1165, nil, 21009, 1166, 3547, 3687, nil, 21140, 3827, - 64, 121, nil, 1170, 469, 3967, nil, 1171, 1051, 625, - nil, 1064, 1060, nil, 2847, 21271, 21402, 2987, 795, nil, - nil, 24568, nil, 24620, nil, 7245, nil, nil, 1085, 1153, - 21533, 1099, 1140, nil, 1090, nil, nil, nil, 4107, nil, - nil, 35, 21664, nil, nil, nil, nil, nil, 1119, 1090, - nil, nil, nil, 1094, 1115, nil, 1120, 1124, nil, 1128, - nil, nil, 1136, 3207, 1138, 3533, nil, nil, 98, nil, - 1270, 1271, nil, 45, nil, nil, nil, 1272, nil, nil, - nil, 1202, nil, 1159, nil, nil, 1161, 1164, 1166, 1167, - nil, 1168, nil, 626, nil, nil, nil, 1170, 24295, nil, - nil, nil, 4247, 1209, 1239, 1310, 1249, 1349, nil, 4387, - 4527, nil, nil, 24628, nil, 13958, nil, 22260, nil, 24645, - nil, nil, nil, nil, 335, 3627, 1181, 4667, nil, nil, - nil, nil, nil, 4807, nil, 4947, nil, 24684, nil, 24701, - nil, 24708, nil, 24760, nil, nil, nil, 1293, 1226, 1230, - 1313, 21795, 24356, 24417, 1379, 1208, 1322, 1200, 1201, 1202, - 1210, 1216, 3673, 1230, 3703, 773, 1358, 1379, 1260, 1264, - 1268, 1273, nil, nil, 1281, 102, 111, 138, 1447, nil, - nil, 24767, nil, nil, nil, nil, 3711, 1286, nil, nil, - nil, 24774, nil, nil, nil, nil, 144, 1287, 1288, 1298, - nil, nil ] - -racc_action_default = [ - -3, -598, -1, -584, -4, -598, -7, -598, -598, -598, - -598, -29, -598, -598, -598, -279, -598, -40, -43, -586, - -598, -48, -50, -51, -52, -56, -256, -256, -256, -293, - -329, -330, -68, -11, -72, -80, -82, -598, -491, -492, - -598, -598, -598, -598, -598, -586, -237, -270, -271, -272, - -273, -274, -275, -276, -277, -278, -574, -281, -283, -597, - -565, -301, -303, -598, -598, -307, -310, -584, -598, -598, - -598, -598, -331, -332, -334, -335, -432, -433, -434, -435, - -436, -457, -439, -440, -459, -461, -444, -449, -453, -455, - -471, -459, -473, -475, -476, -477, -478, -572, -480, -481, - -573, -483, -484, -485, -486, -487, -488, -489, -490, -495, - -496, -598, -2, -585, -593, -594, -595, -6, -598, -598, - -598, -598, -598, -3, -17, -598, -111, -112, -113, -114, - -115, -116, -117, -118, -119, -123, -124, -125, -126, -127, - -128, -129, -130, -131, -132, -133, -134, -135, -136, -137, - -138, -139, -140, -141, -142, -143, -144, -145, -146, -147, - -148, -149, -150, -151, -152, -153, -154, -155, -156, -157, - -158, -159, -160, -161, -162, -163, -164, -165, -166, -167, - -168, -169, -170, -171, -172, -173, -174, -175, -176, -177, - -178, -179, -180, -181, -182, -183, -184, -185, -186, -187, - -188, -189, -190, -191, -192, -193, -22, -120, -11, -598, - -598, -246, -598, -598, -598, -598, -598, -598, -598, -586, - -587, -47, -598, -491, -492, -598, -279, -598, -598, -229, - -598, -11, -598, -598, -598, -598, -598, -598, -598, -598, - -598, -598, -598, -598, -598, -598, -598, -598, -598, -598, - -598, -598, -598, -598, -598, -598, -598, -598, -598, -401, - -403, -598, -582, -583, -57, -246, -598, -300, -407, -416, - -418, -63, -413, -64, -586, -65, -238, -251, -260, -260, - -255, -598, -261, -598, -567, -598, -598, -66, -67, -584, - -12, -598, -15, -598, -70, -11, -586, -598, -73, -76, - -11, -88, -89, -598, -598, -96, -293, -296, -586, -598, - -329, -330, -333, -414, -598, -78, -598, -84, -290, -474, - -598, -214, -215, -230, -598, -11, -598, -586, -239, -590, - -590, -598, -598, -590, -598, -302, -392, -49, -598, -598, - -598, -598, -584, -598, -585, -491, -492, -598, -598, -279, - -598, -345, -346, -106, -107, -598, -109, -598, -279, -598, - -598, -491, -492, -322, -111, -112, -153, -154, -155, -171, - -176, -183, -186, -324, -598, -563, -598, -437, -598, -598, - -598, -598, -598, -598, -598, -598, 1022, -5, -596, -23, - -24, -25, -26, -27, -598, -598, -19, -20, -21, -121, - -598, -30, -39, -266, -598, -598, -265, -31, -196, -586, - -247, -260, -260, -575, -576, -256, -411, -577, -578, -576, - -575, -256, -410, -412, -577, -578, -37, -204, -38, -598, - -41, -42, -194, -261, -44, -45, -46, -586, -299, -598, - -598, -598, -246, -290, -598, -598, -598, -205, -206, -207, - -208, -209, -210, -211, -212, -216, -217, -218, -219, -220, - -221, -222, -223, -224, -225, -226, -227, -228, -231, -232, - -233, -234, -586, -381, -256, -575, -576, -54, -58, -586, - -257, -381, -381, -586, -295, -252, -598, -253, -598, -258, - -598, -262, -570, -571, -10, -585, -14, -3, -586, -69, - -288, -85, -74, -598, -586, -246, -598, -598, -95, -598, - -474, -598, -81, -86, -598, -598, -598, -598, -235, -598, - -424, -598, -284, -598, -240, -592, -591, -242, -592, -291, - -292, -566, -304, -524, -11, -336, -337, -11, -598, -598, - -598, -598, -598, -246, -598, -598, -290, -315, -106, -107, - -108, -598, -598, -246, -318, -497, -498, -598, -598, -11, - -502, -326, -586, -438, -458, -463, -598, -465, -441, -460, - -598, -462, -443, -598, -446, -598, -448, -451, -598, -452, - -598, -472, -8, -18, -598, -28, -269, -598, -598, -415, - -598, -248, -250, -598, -598, -59, -245, -408, -598, -598, - -61, -409, -598, -598, -298, -588, -575, -576, -575, -576, - -586, -194, -598, -382, -586, -384, -11, -53, -404, -381, - -243, -11, -11, -294, -260, -259, -263, -598, -568, -569, - -13, -598, -71, -598, -77, -83, -586, -575, -576, -244, - -92, -94, -598, -79, -598, -203, -213, -586, -597, -597, - -282, -586, -287, -590, -393, -524, -396, -562, -562, -507, - -509, -509, -509, -523, -525, -526, -527, -528, -529, -530, - -531, -598, -533, -535, -537, -542, -544, -545, -547, -552, - -554, -555, -557, -558, -559, -598, -597, -338, -597, -308, - -339, -340, -311, -598, -314, -598, -586, -575, -576, -579, - -289, -598, -106, -107, -110, -586, -11, -598, -500, -320, - -598, -11, -524, -524, -598, -564, -464, -467, -468, -469, - -470, -11, -442, -445, -447, -450, -454, -456, -122, -267, - -598, -197, -598, -589, -260, -33, -199, -34, -200, -60, - -35, -202, -36, -201, -62, -195, -598, -598, -598, -598, - -415, -598, -562, -562, -363, -365, -365, -365, -380, -598, - -586, -386, -531, -539, -540, -550, -598, -406, -405, -11, - -598, -598, -254, -264, -16, -75, -90, -87, -297, -597, - -343, -11, -425, -597, -426, -427, -598, -241, -598, -586, - -598, -505, -506, -598, -598, -516, -598, -519, -598, -521, - -598, -347, -598, -349, -351, -358, -586, -536, -546, -556, - -560, -598, -341, -598, -598, -11, -11, -313, -598, -11, - -415, -598, -415, -598, -598, -11, -323, -598, -586, -598, - -327, -598, -268, -32, -198, -249, -598, -236, -598, -361, - -362, -371, -373, -598, -376, -598, -378, -383, -598, -598, - -598, -538, -598, -402, -598, -417, -419, -9, -11, -431, - -344, -598, -598, -429, -285, -394, -397, -399, -598, -562, - -543, -561, -508, -509, -509, -534, -509, -509, -553, -509, - -531, -548, -586, -598, -356, -598, -532, -305, -598, -306, - -598, -598, -263, -597, -316, -319, -499, -598, -325, -501, - -503, -502, -466, -562, -541, -364, -365, -365, -365, -365, - -551, -365, -385, -586, -388, -390, -391, -549, -598, -290, - -55, -430, -11, -97, -98, -598, -598, -105, -428, -11, - -11, -395, -504, -598, -512, -598, -514, -598, -517, -598, - -520, -522, -348, -350, -354, -598, -359, -11, -309, -312, - -420, -421, -422, -11, -321, -11, -360, -598, -368, -598, - -370, -598, -374, -598, -377, -379, -387, -598, -289, -579, - -424, -246, -598, -598, -104, -598, -598, -509, -509, -509, - -509, -352, -598, -357, -598, -597, -598, -598, -365, -365, - -365, -365, -389, -423, -586, -575, -576, -579, -103, -398, - -400, -598, -510, -513, -515, -518, -598, -355, -342, -317, - -328, -598, -366, -369, -372, -375, -415, -509, -353, -365, - -511, -367 ] - -racc_goto_table = [ - 218, 541, 328, 14, 260, 409, 221, 487, 14, 373, - 277, 277, 277, 124, 207, 2, 415, 421, 521, 335, - 648, 438, 431, 222, 129, 129, 324, 312, 312, 589, - 261, 112, 222, 222, 222, 478, 14, 303, 303, 811, - 132, 132, 134, 134, 113, 338, 339, 315, 628, 342, - 298, 406, 711, 264, 271, 273, 512, 428, 319, 479, - 759, 312, 312, 312, 756, 474, 222, 222, 689, 692, - 222, 347, 357, 357, 550, 625, 484, 625, 878, 294, - 875, 278, 278, 278, 534, 537, 656, 129, 628, 524, - 527, 296, 806, 531, 779, 343, 910, 117, 499, 1, - 389, 390, 391, 392, 337, 337, 946, 857, 337, 630, - 914, 329, 206, 757, 916, 943, 14, 275, 287, 288, - 352, 222, 222, 222, 222, 14, 14, 875, 616, 359, - 363, 402, 379, 395, 814, 619, 621, 622, 394, 385, - 487, 573, 575, 584, 331, 753, 279, 279, 279, 618, - 375, 332, 628, 532, 663, 350, 554, 374, 325, 337, - 337, 337, 337, 326, 268, 272, 983, 651, 327, 336, - 340, 815, 341, 816, 6, 701, 330, 333, 953, 6, - 625, 625, 706, 825, 791, 792, 559, 560, 714, 901, - 758, 760, 277, 913, 654, 401, 407, 865, 693, 533, - 426, 430, 788, 1007, 929, 387, 848, 930, 789, 473, - 910, 14, 222, 222, 222, 878, 943, 222, 222, 222, - 222, 222, 222, 882, 481, 875, 482, 1018, 992, 425, - 750, 950, 916, 783, 14, 868, 610, 861, 564, 604, - 571, 574, 574, 634, 415, 421, 277, 277, 377, 875, - 378, 643, 710, 380, 381, 277, 776, 434, 435, 436, - 437, 405, 382, 383, 384, 828, 829, 405, 222, 222, - 704, 716, 116, 721, 769, 707, 663, 222, 873, 839, - 840, 620, 870, 904, nil, 623, nil, 6, nil, 509, - nil, 906, 312, 874, 14, 876, 393, 6, 14, 636, - 632, nil, 303, 14, nil, nil, 635, nil, 523, 312, - 639, 502, nil, nil, 763, nil, 820, 494, 278, 303, - 639, 869, 538, 539, nil, 822, 278, nil, 14, 222, - 495, 510, 513, 663, 663, nil, 116, 696, 1008, 951, - 907, 294, 908, 222, 222, nil, 294, 705, 639, nil, - 416, 894, 772, 498, 480, 26, 639, nil, 504, nil, - 26, nil, 483, 222, 715, nil, 739, 522, nil, 903, - 540, 744, 753, 775, 753, 26, 753, nil, nil, 222, - 561, 337, 337, 279, 26, 26, 26, nil, 26, nil, - 590, 279, nil, 955, nil, 628, 932, nil, nil, 823, - 583, 558, nil, nil, 827, nil, nil, 13, 297, 431, - nil, 129, 13, 787, nil, nil, nil, 562, 26, 26, - nil, nil, 26, 277, 625, nil, nil, 132, nil, 134, - 956, nil, 977, 724, nil, 724, nil, nil, nil, nil, - 13, 819, 595, nil, nil, 222, nil, 268, 600, 778, - nil, 272, nil, 612, nil, nil, 988, 425, nil, nil, - nil, nil, 772, nil, nil, 496, nil, nil, 26, nil, - 993, nil, nil, 26, 26, 26, 26, 26, 26, nil, - nil, nil, nil, nil, nil, nil, 277, nil, 753, nil, - 753, 784, 753, nil, 753, nil, 312, nil, 14, nil, - 14, 617, nil, nil, 312, nil, 303, nil, 222, nil, - nil, nil, 631, nil, 303, nil, nil, nil, 897, 513, - 13, nil, 222, 425, 277, nil, nil, 513, nil, 13, - 13, nil, nil, 425, 277, nil, nil, 14, 763, nil, - 14, 763, 753, 763, nil, 763, 222, nil, nil, nil, - nil, 952, nil, 596, nil, nil, 222, nil, 116, 601, - 647, 425, 14, 26, 26, 26, 26, 425, nil, 26, - 26, 26, 26, 26, 26, nil, 768, nil, 416, 735, - 737, nil, nil, 400, 740, 742, 26, nil, 430, 728, - nil, 590, 785, nil, 695, 761, 222, 222, nil, 767, - 129, 222, 222, 624, nil, 222, 297, 922, 886, nil, - nil, 116, 596, nil, 1016, 13, 132, 590, 134, 14, - 26, 26, nil, nil, 14, 14, 312, nil, 555, 26, - 899, nil, 786, nil, 947, nil, 303, 312, 13, nil, - nil, nil, 653, nil, 416, nil, 26, 303, 987, 513, - 26, nil, 830, nil, 416, 26, 754, 763, nil, 763, - 777, 763, nil, 763, nil, nil, nil, nil, nil, nil, - 297, 6, nil, nil, nil, 297, nil, 590, nil, nil, - 26, 26, 416, 821, 942, nil, 590, 755, nil, 824, - 416, nil, nil, nil, nil, 26, 26, nil, 13, nil, - nil, 405, 13, nil, 222, nil, nil, 13, 734, 14, - 222, 763, nil, nil, 14, 26, nil, nil, 833, nil, - nil, nil, 859, nil, 14, nil, 863, nil, nil, nil, - 129, 26, 13, nil, nil, 222, nil, nil, nil, nil, - nil, 761, 337, nil, nil, nil, nil, nil, 337, nil, - nil, nil, nil, nil, nil, 15, 312, nil, nil, nil, - 15, nil, nil, nil, nil, 994, 851, nil, nil, nil, - 761, nil, 14, nil, nil, nil, 639, 596, nil, nil, - 601, nil, nil, nil, 14, nil, nil, nil, 15, 305, - 305, nil, nil, nil, nil, 888, nil, 26, nil, nil, - nil, nil, nil, nil, 16, nil, nil, 690, 690, 16, - nil, nil, nil, nil, nil, nil, 222, nil, 14, 14, - nil, nil, 14, 349, 358, 358, 708, 709, 14, nil, - nil, nil, 871, nil, nil, 871, nil, 16, nil, nil, - nil, nil, nil, 312, nil, nil, nil, nil, nil, nil, - 26, nil, 26, 917, 337, 312, nil, nil, nil, nil, - 26, 14, nil, nil, nil, 925, nil, nil, 15, 877, - nil, 879, 351, nil, 26, nil, nil, 15, 15, nil, - 871, nil, nil, 754, nil, 754, nil, 754, nil, 26, - nil, nil, 26, nil, 966, nil, nil, nil, 26, nil, - nil, nil, 13, nil, 13, nil, nil, nil, 26, 686, - nil, nil, 688, nil, 26, nil, 909, 16, 911, nil, - nil, nil, nil, nil, nil, 14, 16, 16, nil, nil, - nil, nil, 14, 14, 425, nil, 795, 797, 799, nil, - nil, 13, nil, nil, 13, nil, 38, nil, 26, 26, - 14, 38, 277, 26, 26, nil, 14, 26, 14, nil, - nil, nil, nil, 15, nil, nil, 13, nil, nil, nil, - nil, 26, nil, nil, 222, 590, 26, 26, nil, 38, - 301, 301, nil, nil, nil, nil, 15, nil, nil, 425, - nil, 766, nil, nil, nil, nil, 770, 771, nil, 754, - nil, 754, nil, 754, nil, 754, 978, nil, 979, nil, - 980, nil, 16, nil, 345, 361, 361, 361, nil, 429, - nil, nil, nil, 13, nil, nil, nil, nil, 13, 13, - 989, nil, 990, nil, 991, 16, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 15, 842, 844, 846, - 15, nil, nil, 754, 305, 15, 26, nil, nil, 38, - nil, 26, 26, nil, nil, nil, 26, nil, 38, 38, - nil, 305, nil, nil, 1017, nil, 26, nil, nil, nil, - 15, nil, nil, nil, 1019, nil, nil, 26, nil, nil, - 690, nil, nil, 896, nil, 16, 831, nil, 900, 16, - nil, nil, nil, nil, 16, nil, nil, nil, nil, nil, - 416, nil, nil, 13, nil, nil, nil, nil, 13, nil, - nil, nil, nil, nil, 26, nil, nil, nil, 13, 16, - nil, nil, nil, nil, nil, nil, 26, nil, nil, nil, - nil, nil, nil, nil, 854, nil, nil, nil, nil, 934, - 936, nil, 938, 940, 38, 941, 860, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 26, 334, - 26, 26, nil, nil, 26, nil, 13, 38, nil, nil, - 26, nil, nil, nil, nil, nil, nil, nil, 13, nil, - 890, 891, nil, nil, 893, nil, nil, nil, 958, 960, - 962, 964, nil, 965, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 26, nil, nil, nil, nil, nil, nil, - nil, nil, 13, 13, nil, nil, 13, nil, nil, nil, - nil, nil, 13, 921, nil, nil, nil, 38, nil, nil, - nil, 38, nil, nil, nil, 301, 38, nil, nil, nil, - 15, nil, 15, 1002, 1003, 1004, 1005, nil, 305, nil, - nil, nil, 301, nil, nil, 13, 305, nil, nil, nil, - nil, 38, nil, nil, nil, nil, nil, 26, nil, nil, - 1012, 1013, 1014, 1015, 26, 26, nil, nil, nil, 15, - nil, nil, 15, 1020, 670, nil, nil, 970, nil, 16, - nil, 16, 26, nil, 975, 976, nil, nil, 26, nil, - 26, 1021, nil, nil, 15, 39, nil, nil, 403, nil, - 39, 720, 985, nil, 433, nil, 26, nil, 986, 13, - nil, nil, nil, nil, nil, nil, 13, 13, 16, nil, - nil, 16, nil, nil, nil, nil, nil, nil, 39, 302, - 302, nil, nil, nil, 13, nil, nil, nil, nil, nil, - 13, nil, 13, 16, nil, nil, nil, nil, nil, nil, - nil, 15, nil, nil, nil, 762, 15, 15, nil, nil, - nil, nil, nil, 346, 362, 362, 362, nil, 305, nil, - 489, nil, 491, nil, 492, 493, nil, nil, nil, 305, - nil, nil, nil, nil, nil, nil, 429, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 670, nil, nil, nil, - 16, nil, nil, nil, nil, 16, 16, nil, 39, nil, - nil, nil, 801, nil, nil, nil, nil, 39, 39, nil, - nil, 38, nil, 38, nil, nil, nil, nil, nil, 301, - nil, nil, nil, nil, nil, nil, nil, 301, nil, nil, - nil, 15, nil, nil, nil, nil, 15, nil, nil, nil, - nil, nil, nil, 670, 670, nil, 15, nil, nil, nil, - 38, nil, nil, 38, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 38, nil, nil, nil, nil, - 16, nil, nil, 586, nil, 16, nil, nil, 358, nil, - nil, nil, nil, 39, 15, 16, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 15, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 39, nil, nil, nil, - nil, nil, nil, nil, nil, 670, nil, 670, nil, nil, - nil, nil, 38, 801, nil, nil, 884, 38, 38, nil, - 15, 15, nil, 16, 15, nil, nil, nil, nil, 301, - 15, nil, nil, nil, nil, 16, nil, nil, nil, nil, - 301, nil, nil, nil, nil, 626, nil, 334, nil, 629, - nil, nil, 762, nil, 762, 358, 39, nil, nil, nil, - 39, nil, nil, 15, 302, 39, nil, 927, nil, 16, - 16, nil, nil, 16, nil, nil, nil, nil, nil, 16, - nil, 302, nil, nil, 626, nil, nil, 334, nil, nil, - 39, nil, nil, nil, 801, nil, 801, nil, nil, nil, - nil, 433, 38, nil, nil, nil, nil, 38, nil, nil, - nil, nil, 16, nil, nil, nil, 928, 38, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 15, nil, nil, - nil, nil, nil, nil, 15, 15, nil, nil, nil, nil, - nil, nil, nil, nil, 670, nil, 729, nil, nil, nil, - 626, 334, 15, nil, nil, 981, 801, nil, 15, 361, - 15, nil, nil, nil, nil, 38, nil, nil, 762, nil, - nil, nil, nil, nil, nil, nil, 16, 38, nil, nil, - nil, nil, nil, 16, 16, nil, 773, nil, nil, nil, - nil, nil, nil, 801, nil, 801, nil, nil, nil, nil, - nil, 16, nil, nil, nil, nil, nil, 16, 782, 16, - nil, 38, 38, nil, nil, 38, 229, 801, nil, nil, - nil, 38, nil, nil, nil, 276, 276, 276, nil, nil, - nil, nil, nil, 807, nil, nil, nil, nil, 321, 322, - 323, nil, nil, nil, nil, nil, 361, nil, nil, nil, - nil, nil, nil, nil, 38, 276, 276, nil, 923, nil, - 39, nil, 39, nil, nil, nil, nil, nil, 302, nil, - nil, nil, nil, nil, nil, nil, 302, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 832, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 39, - nil, nil, 39, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 38, nil, - nil, nil, nil, nil, 39, 38, 38, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 38, nil, nil, nil, nil, nil, 38, - nil, 38, nil, nil, nil, nil, nil, nil, nil, 881, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 892, nil, nil, - nil, 39, nil, nil, nil, nil, 39, 39, nil, nil, - nil, nil, nil, nil, 334, nil, nil, nil, 302, nil, - nil, nil, nil, nil, nil, 276, 408, 276, nil, 302, - 427, 432, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 229, nil, nil, 447, - 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, - 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, - 468, 469, 470, 471, 472, nil, nil, nil, nil, nil, - nil, 276, 276, nil, nil, nil, nil, nil, nil, nil, - 276, 39, nil, nil, nil, nil, 39, 276, nil, 276, - nil, 276, 276, nil, nil, nil, 39, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 518, nil, nil, nil, nil, nil, nil, nil, 362, nil, - nil, nil, nil, nil, 39, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 39, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 39, 39, nil, nil, 39, nil, nil, nil, nil, nil, - 39, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 276, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 362, nil, nil, nil, nil, - nil, nil, nil, 39, nil, nil, nil, 924, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 276, nil, - 427, 611, 408, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 276, nil, 276, nil, 276, 39, nil, nil, - nil, nil, nil, nil, 39, 39, nil, nil, nil, nil, - nil, 276, nil, nil, nil, nil, nil, nil, nil, nil, - 645, 646, 39, nil, nil, nil, nil, nil, 39, nil, - 39, 276, nil, nil, 276, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 276, 276, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 276, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 276, 731, nil, nil, 276, 276, 736, - 738, nil, nil, nil, 741, 743, nil, nil, 611, 745, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 276, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 276, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 276, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 276, nil, 834, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 736, 738, 743, 741, nil, 837, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 276, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 276, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 276, 834, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 276 ] - -racc_goto_check = [ - 31, 92, 67, 22, 141, 23, 20, 73, 22, 56, - 33, 33, 33, 15, 15, 2, 37, 37, 8, 86, - 10, 47, 18, 22, 57, 57, 31, 64, 64, 24, - 36, 4, 22, 22, 22, 39, 22, 22, 22, 90, - 60, 60, 61, 61, 6, 17, 17, 50, 180, 17, - 49, 27, 98, 38, 38, 38, 51, 27, 63, 23, - 132, 64, 64, 64, 129, 37, 22, 22, 91, 91, - 22, 22, 22, 22, 54, 74, 47, 74, 176, 45, - 171, 68, 68, 68, 89, 89, 140, 57, 180, 69, - 69, 46, 119, 69, 11, 4, 177, 5, 47, 1, - 17, 17, 17, 17, 29, 29, 120, 12, 29, 14, - 134, 68, 16, 130, 135, 117, 22, 44, 44, 44, - 19, 22, 22, 22, 22, 22, 22, 171, 40, 55, - 55, 28, 155, 30, 11, 42, 40, 40, 2, 155, - 73, 158, 158, 62, 66, 123, 70, 70, 70, 72, - 84, 85, 180, 88, 166, 93, 95, 99, 100, 29, - 29, 29, 29, 101, 71, 71, 120, 102, 103, 104, - 105, 106, 107, 108, 7, 109, 70, 70, 110, 7, - 74, 74, 111, 112, 124, 124, 113, 114, 115, 116, - 121, 127, 33, 133, 136, 20, 20, 137, 92, 138, - 20, 20, 139, 120, 142, 5, 132, 143, 140, 144, - 177, 22, 22, 22, 22, 176, 117, 22, 22, 22, - 22, 22, 22, 119, 146, 171, 147, 120, 134, 57, - 24, 148, 135, 149, 22, 132, 23, 150, 159, 47, - 159, 159, 159, 51, 37, 37, 33, 33, 153, 171, - 154, 51, 8, 156, 157, 33, 24, 29, 29, 29, - 29, 68, 160, 161, 162, 140, 140, 68, 22, 22, - 54, 163, 96, 164, 40, 165, 166, 22, 170, 124, - 124, 47, 173, 174, nil, 47, nil, 7, nil, 31, - nil, 129, 64, 130, 22, 130, 7, 7, 22, 23, - 47, nil, 22, 22, nil, nil, 47, nil, 31, 64, - 37, 50, nil, nil, 172, nil, 24, 4, 68, 22, - 37, 123, 17, 17, nil, 24, 68, nil, 22, 22, - 6, 63, 49, 166, 166, nil, 96, 23, 90, 11, - 130, 45, 130, 22, 22, nil, 45, 23, 37, nil, - 71, 91, 73, 46, 44, 41, 37, nil, 46, nil, - 41, nil, 44, 22, 47, nil, 39, 29, nil, 123, - 4, 39, 123, 51, 123, 41, 123, nil, nil, 22, - 36, 29, 29, 70, 41, 41, 41, nil, 41, nil, - 31, 70, nil, 98, nil, 180, 124, nil, nil, 8, - 15, 29, nil, nil, 8, nil, nil, 21, 9, 18, - nil, 57, 21, 69, nil, nil, nil, 29, 41, 41, - nil, nil, 41, 33, 74, nil, nil, 60, nil, 61, - 124, nil, 130, 159, nil, 159, nil, nil, nil, nil, - 21, 89, 38, nil, nil, 22, nil, 71, 38, 47, - nil, 71, nil, 31, nil, nil, 130, 57, nil, nil, - nil, nil, 73, nil, nil, 7, nil, nil, 41, nil, - 10, nil, nil, 41, 41, 41, 41, 41, 41, nil, - nil, nil, nil, nil, nil, nil, 33, nil, 123, nil, - 123, 27, 123, nil, 123, nil, 64, nil, 22, nil, - 22, 38, nil, nil, 64, nil, 22, nil, 22, nil, - nil, nil, 2, nil, 22, nil, nil, nil, 8, 49, - 21, nil, 22, 57, 33, nil, nil, 49, nil, 21, - 21, nil, nil, 57, 33, nil, nil, 22, 172, nil, - 22, 172, 123, 172, nil, 172, 22, nil, nil, nil, - nil, 92, nil, 71, nil, nil, 22, nil, 96, 71, - 29, 57, 22, 41, 41, 41, 41, 57, nil, 41, - 41, 41, 41, 41, 41, nil, 86, nil, 71, 20, - 20, nil, nil, 9, 20, 20, 41, nil, 20, 15, - nil, 31, 67, nil, 68, 31, 22, 22, nil, 141, - 57, 22, 22, 70, nil, 22, 9, 89, 47, nil, - nil, 96, 71, nil, 24, 21, 60, 31, 61, 22, - 41, 41, nil, nil, 22, 22, 64, nil, 96, 41, - 47, nil, 31, nil, 89, nil, 22, 64, 21, nil, - nil, nil, 70, nil, 71, nil, 41, 22, 8, 49, - 41, nil, 56, nil, 71, 41, 125, 172, nil, 172, - 49, 172, nil, 172, nil, nil, nil, nil, nil, nil, - 9, 7, nil, nil, nil, 9, nil, 31, nil, nil, - 41, 41, 71, 17, 47, nil, 31, 128, nil, 17, - 71, nil, nil, nil, nil, 41, 41, nil, 21, nil, - nil, 68, 21, nil, 22, nil, nil, 21, 70, 22, - 22, 172, nil, nil, 22, 41, nil, nil, 20, nil, - nil, nil, 67, nil, 22, nil, 67, nil, nil, nil, - 57, 41, 21, nil, nil, 22, nil, nil, nil, nil, - nil, 31, 29, nil, nil, nil, nil, nil, 29, nil, - nil, nil, nil, nil, nil, 25, 64, nil, nil, nil, - 25, nil, nil, nil, nil, 23, 22, nil, nil, nil, - 31, nil, 22, nil, nil, nil, 37, 71, nil, nil, - 71, nil, nil, nil, 22, nil, nil, nil, 25, 25, - 25, nil, nil, nil, nil, 17, nil, 41, nil, nil, - nil, nil, nil, nil, 26, nil, nil, 96, 96, 26, - nil, nil, nil, nil, nil, nil, 22, nil, 22, 22, - nil, nil, 22, 25, 25, 25, 96, 96, 22, nil, - nil, nil, 125, nil, nil, 125, nil, 26, nil, nil, - nil, nil, nil, 64, nil, nil, nil, nil, nil, nil, - 41, nil, 41, 22, 29, 64, nil, nil, nil, nil, - 41, 22, nil, nil, nil, 22, nil, nil, 25, 128, - nil, 128, 26, nil, 41, nil, nil, 25, 25, nil, - 125, nil, nil, 125, nil, 125, nil, 125, nil, 41, - nil, nil, 41, nil, 31, nil, nil, nil, 41, nil, - nil, nil, 21, nil, 21, nil, nil, nil, 41, 9, - nil, nil, 9, nil, 41, nil, 128, 26, 128, nil, - nil, nil, nil, nil, nil, 22, 26, 26, nil, nil, - nil, nil, 22, 22, 57, nil, 169, 169, 169, nil, - nil, 21, nil, nil, 21, nil, 52, nil, 41, 41, - 22, 52, 33, 41, 41, nil, 22, 41, 22, nil, - nil, nil, nil, 25, nil, nil, 21, nil, nil, nil, - nil, 41, nil, nil, 22, 31, 41, 41, nil, 52, - 52, 52, nil, nil, nil, nil, 25, nil, nil, 57, - nil, 9, nil, nil, nil, nil, 9, 9, nil, 125, - nil, 125, nil, 125, nil, 125, 128, nil, 128, nil, - 128, nil, 26, nil, 52, 52, 52, 52, nil, 26, - nil, nil, nil, 21, nil, nil, nil, nil, 21, 21, - 128, nil, 128, nil, 128, 26, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 25, 126, 126, 126, - 25, nil, nil, 125, 25, 25, 41, nil, nil, 52, - nil, 41, 41, nil, nil, nil, 41, nil, 52, 52, - nil, 25, nil, nil, 128, nil, 41, nil, nil, nil, - 25, nil, nil, nil, 128, nil, nil, 41, nil, nil, - 96, nil, nil, 96, nil, 26, 9, nil, 96, 26, - nil, nil, nil, nil, 26, nil, nil, nil, nil, nil, - 71, nil, nil, 21, nil, nil, nil, nil, 21, nil, - nil, nil, nil, nil, 41, nil, nil, nil, 21, 26, - nil, nil, nil, nil, nil, nil, 41, nil, nil, nil, - nil, nil, nil, nil, 9, nil, nil, nil, nil, 169, - 169, nil, 169, 169, 52, 169, 9, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 41, 65, - 41, 41, nil, nil, 41, nil, 21, 52, nil, nil, - 41, nil, nil, nil, nil, nil, nil, nil, 21, nil, - 9, 9, nil, nil, 9, nil, nil, nil, 126, 126, - 126, 126, nil, 126, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 41, nil, nil, nil, nil, nil, nil, - nil, nil, 21, 21, nil, nil, 21, nil, nil, nil, - nil, nil, 21, 9, nil, nil, nil, 52, nil, nil, - nil, 52, nil, nil, nil, 52, 52, nil, nil, nil, - 25, nil, 25, 169, 169, 169, 169, nil, 25, nil, - nil, nil, 52, nil, nil, 21, 25, nil, nil, nil, - nil, 52, nil, nil, nil, nil, nil, 41, nil, nil, - 126, 126, 126, 126, 41, 41, nil, nil, nil, 25, - nil, nil, 25, 169, 118, nil, nil, 9, nil, 26, - nil, 26, 41, nil, 9, 9, nil, nil, 41, nil, - 41, 126, nil, nil, 25, 53, nil, nil, 65, nil, - 53, 25, 9, nil, 65, nil, 41, nil, 9, 21, - nil, nil, nil, nil, nil, nil, 21, 21, 26, nil, - nil, 26, nil, nil, nil, nil, nil, nil, 53, 53, - 53, nil, nil, nil, 21, nil, nil, nil, nil, nil, - 21, nil, 21, 26, nil, nil, nil, nil, nil, nil, - nil, 25, nil, nil, nil, 118, 25, 25, nil, nil, - nil, nil, nil, 53, 53, 53, 53, nil, 25, nil, - 65, nil, 65, nil, 65, 65, nil, nil, nil, 25, - nil, nil, nil, nil, nil, nil, 26, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 118, nil, nil, nil, - 26, nil, nil, nil, nil, 26, 26, nil, 53, nil, - nil, nil, 118, nil, nil, nil, nil, 53, 53, nil, - nil, 52, nil, 52, nil, nil, nil, nil, nil, 52, - nil, nil, nil, nil, nil, nil, nil, 52, nil, nil, - nil, 25, nil, nil, nil, nil, 25, nil, nil, nil, - nil, nil, nil, 118, 118, nil, 25, nil, nil, nil, - 52, nil, nil, 52, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 52, nil, nil, nil, nil, - 26, nil, nil, 65, nil, 26, nil, nil, 25, nil, - nil, nil, nil, 53, 25, 26, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 25, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 53, nil, nil, nil, - nil, nil, nil, nil, nil, 118, nil, 118, nil, nil, - nil, nil, 52, 118, nil, nil, 118, 52, 52, nil, - 25, 25, nil, 26, 25, nil, nil, nil, nil, 52, - 25, nil, nil, nil, nil, 26, nil, nil, nil, nil, - 52, nil, nil, nil, nil, 65, nil, 65, nil, 65, - nil, nil, 118, nil, 118, 25, 53, nil, nil, nil, - 53, nil, nil, 25, 53, 53, nil, 25, nil, 26, - 26, nil, nil, 26, nil, nil, nil, nil, nil, 26, - nil, 53, nil, nil, 65, nil, nil, 65, nil, nil, - 53, nil, nil, nil, 118, nil, 118, nil, nil, nil, - nil, 65, 52, nil, nil, nil, nil, 52, nil, nil, - nil, nil, 26, nil, nil, nil, 26, 52, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 25, nil, nil, - nil, nil, nil, nil, 25, 25, nil, nil, nil, nil, - nil, nil, nil, nil, 118, nil, 65, nil, nil, nil, - 65, 65, 25, nil, nil, 118, 118, nil, 25, 52, - 25, nil, nil, nil, nil, 52, nil, nil, 118, nil, - nil, nil, nil, nil, nil, nil, 26, 52, nil, nil, - nil, nil, nil, 26, 26, nil, 65, nil, nil, nil, - nil, nil, nil, 118, nil, 118, nil, nil, nil, nil, - nil, 26, nil, nil, nil, nil, nil, 26, 65, 26, - nil, 52, 52, nil, nil, 52, 32, 118, nil, nil, - nil, 52, nil, nil, nil, 32, 32, 32, nil, nil, - nil, nil, nil, 65, nil, nil, nil, nil, 32, 32, - 32, nil, nil, nil, nil, nil, 52, nil, nil, nil, - nil, nil, nil, nil, 52, 32, 32, nil, 52, nil, - 53, nil, 53, nil, nil, nil, nil, nil, 53, nil, - nil, nil, nil, nil, nil, nil, 53, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 65, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 53, - nil, nil, 53, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 52, nil, - nil, nil, nil, nil, 53, 52, 52, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 52, nil, nil, nil, nil, nil, 52, - nil, 52, nil, nil, nil, nil, nil, nil, nil, 65, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 65, nil, nil, - nil, 53, nil, nil, nil, nil, 53, 53, nil, nil, - nil, nil, nil, nil, 65, nil, nil, nil, 53, nil, - nil, nil, nil, nil, nil, 32, 32, 32, nil, 53, - 32, 32, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 32, nil, nil, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, nil, nil, nil, nil, nil, - nil, 32, 32, nil, nil, nil, nil, nil, nil, nil, - 32, 53, nil, nil, nil, nil, 53, 32, nil, 32, - nil, 32, 32, nil, nil, nil, 53, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 32, nil, nil, nil, nil, nil, nil, nil, 53, nil, - nil, nil, nil, nil, 53, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 53, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 53, 53, nil, nil, 53, nil, nil, nil, nil, nil, - 53, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 32, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 53, nil, nil, nil, nil, - nil, nil, nil, 53, nil, nil, nil, 53, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 32, nil, - 32, 32, 32, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 32, nil, 32, nil, 32, 53, nil, nil, - nil, nil, nil, nil, 53, 53, nil, nil, nil, nil, - nil, 32, nil, nil, nil, nil, nil, nil, nil, nil, - 32, 32, 53, nil, nil, nil, nil, nil, 53, nil, - 53, 32, nil, nil, 32, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 32, 32, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 32, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 32, 32, nil, nil, 32, 32, 32, - 32, nil, nil, nil, 32, 32, nil, nil, 32, 32, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 32, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 32, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 32, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 32, nil, 32, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 32, 32, 32, 32, nil, 32, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 32, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 32, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 32, 32, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 32 ] - -racc_goto_pointer = [ - nil, 99, 15, nil, 28, 92, 41, 174, -307, 375, - -500, -554, -672, nil, -386, 5, 103, -18, -193, 52, - -14, 407, 3, -206, -380, 755, 804, -158, -78, 41, - 9, -19, 1746, -19, nil, nil, 6, -196, 27, -229, - -345, 355, -342, nil, 88, 46, 58, -198, nil, 16, - 12, -260, 946, 1315, -281, 60, -62, 16, nil, nil, - 32, 34, -256, 17, -7, 1109, 85, -57, 52, -240, - 117, 138, -325, -272, -411, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 79, 91, -42, nil, -183, -254, - -647, -470, -342, 87, nil, -203, 269, nil, -508, 86, - 101, 105, -355, 110, 107, 105, -518, 106, -519, -372, - -716, -372, -526, -177, -186, -373, -641, -768, 761, -579, - -779, -424, nil, -469, -473, 42, 292, -423, 73, -550, - -501, nil, -554, -656, -739, -735, -339, -591, -137, -452, - -447, -18, -662, -660, -50, nil, -45, -44, -662, -416, - -546, nil, nil, 169, 169, 48, 168, 168, -240, -140, - 175, 175, 175, -295, -294, -281, -379, nil, nil, 276, - -516, -714, -300, -508, -555, nil, -718, -747, nil, nil, - -440 ] - -racc_goto_default = [ - nil, nil, nil, 3, nil, 4, 344, 292, nil, 520, - nil, 812, nil, 289, 290, nil, nil, nil, 11, 12, - 18, 228, 320, nil, nil, 226, 227, nil, nil, 17, - nil, 439, 21, 22, 23, 24, nil, 642, nil, nil, - nil, 309, nil, 25, 410, 32, nil, nil, 34, 37, - 36, nil, 223, 224, 356, nil, 131, 418, 130, 133, - 77, 78, nil, 92, 46, 282, nil, 780, 411, nil, - 412, 423, 597, 485, 280, 266, 47, 48, 49, 50, - 51, 52, 53, 54, 55, nil, 267, 61, nil, nil, - nil, nil, nil, nil, 69, nil, 535, 70, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 803, 880, nil, - 804, 905, 752, 658, nil, 659, nil, nil, 660, nil, - 662, 613, nil, nil, nil, 668, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 422, nil, nil, nil, nil, - nil, 76, 79, 80, nil, nil, nil, nil, nil, 569, - nil, nil, nil, nil, nil, nil, 872, 713, 657, nil, - 661, 672, 674, 675, 764, 678, 679, 765, 682, 685, - 284 ] - -racc_reduce_table = [ - 0, 0, :racc_error, - 1, 144, :_reduce_none, - 2, 145, :_reduce_2, - 0, 146, :_reduce_3, - 1, 146, :_reduce_4, - 3, 146, :_reduce_5, - 2, 146, :_reduce_6, - 1, 148, :_reduce_none, - 4, 148, :_reduce_8, - 4, 151, :_reduce_9, - 2, 152, :_reduce_10, - 0, 156, :_reduce_11, - 1, 156, :_reduce_12, - 3, 156, :_reduce_13, - 2, 156, :_reduce_14, - 1, 157, :_reduce_none, - 4, 157, :_reduce_16, - 0, 173, :_reduce_17, - 4, 150, :_reduce_18, - 3, 150, :_reduce_19, - 3, 150, :_reduce_20, - 3, 150, :_reduce_21, - 2, 150, :_reduce_22, - 3, 150, :_reduce_23, - 3, 150, :_reduce_24, - 3, 150, :_reduce_25, - 3, 150, :_reduce_26, - 3, 150, :_reduce_27, - 4, 150, :_reduce_28, - 1, 150, :_reduce_none, - 3, 150, :_reduce_30, - 3, 150, :_reduce_31, - 6, 150, :_reduce_32, - 5, 150, :_reduce_33, - 5, 150, :_reduce_34, - 5, 150, :_reduce_35, - 5, 150, :_reduce_36, - 3, 150, :_reduce_37, - 3, 150, :_reduce_38, - 3, 150, :_reduce_39, - 1, 150, :_reduce_none, - 3, 161, :_reduce_41, - 3, 161, :_reduce_42, - 1, 172, :_reduce_none, - 3, 172, :_reduce_44, - 3, 172, :_reduce_45, - 3, 172, :_reduce_46, - 2, 172, :_reduce_47, - 1, 172, :_reduce_none, - 1, 160, :_reduce_none, - 1, 163, :_reduce_none, - 1, 163, :_reduce_none, - 1, 177, :_reduce_none, - 4, 177, :_reduce_53, - 0, 185, :_reduce_54, - 5, 182, :_reduce_55, - 1, 184, :_reduce_none, - 2, 176, :_reduce_57, - 3, 176, :_reduce_58, - 4, 176, :_reduce_59, - 5, 176, :_reduce_60, - 4, 176, :_reduce_61, - 5, 176, :_reduce_62, - 2, 176, :_reduce_63, - 2, 176, :_reduce_64, - 2, 176, :_reduce_65, - 2, 176, :_reduce_66, - 2, 176, :_reduce_67, - 1, 162, :_reduce_68, - 3, 162, :_reduce_69, - 1, 189, :_reduce_70, - 3, 189, :_reduce_71, - 1, 188, :_reduce_none, - 2, 188, :_reduce_73, - 3, 188, :_reduce_74, - 5, 188, :_reduce_75, - 2, 188, :_reduce_76, - 4, 188, :_reduce_77, - 2, 188, :_reduce_78, - 4, 188, :_reduce_79, - 1, 188, :_reduce_80, - 3, 188, :_reduce_81, - 1, 192, :_reduce_none, - 3, 192, :_reduce_83, - 2, 191, :_reduce_84, - 3, 191, :_reduce_85, - 1, 194, :_reduce_86, - 3, 194, :_reduce_87, - 1, 193, :_reduce_88, - 1, 193, :_reduce_89, - 4, 193, :_reduce_90, - 3, 193, :_reduce_91, - 3, 193, :_reduce_92, - 3, 193, :_reduce_93, - 3, 193, :_reduce_94, - 2, 193, :_reduce_95, - 1, 193, :_reduce_96, - 1, 169, :_reduce_97, - 1, 169, :_reduce_98, - 4, 169, :_reduce_99, - 3, 169, :_reduce_100, - 3, 169, :_reduce_101, - 3, 169, :_reduce_102, - 3, 169, :_reduce_103, - 2, 169, :_reduce_104, - 1, 169, :_reduce_105, - 1, 197, :_reduce_106, - 1, 197, :_reduce_none, - 2, 198, :_reduce_108, - 1, 198, :_reduce_109, - 3, 198, :_reduce_110, - 1, 199, :_reduce_none, - 1, 199, :_reduce_none, - 1, 199, :_reduce_none, - 1, 199, :_reduce_none, - 1, 199, :_reduce_none, - 1, 202, :_reduce_116, - 1, 202, :_reduce_none, - 1, 158, :_reduce_none, - 1, 158, :_reduce_none, - 1, 159, :_reduce_120, - 0, 205, :_reduce_121, - 4, 159, :_reduce_122, - 1, 200, :_reduce_none, - 1, 200, :_reduce_none, - 1, 200, :_reduce_none, - 1, 200, :_reduce_none, - 1, 200, :_reduce_none, - 1, 200, :_reduce_none, - 1, 200, :_reduce_none, - 1, 200, :_reduce_none, - 1, 200, :_reduce_none, - 1, 200, :_reduce_none, - 1, 200, :_reduce_none, - 1, 200, :_reduce_none, - 1, 200, :_reduce_none, - 1, 200, :_reduce_none, - 1, 200, :_reduce_none, - 1, 200, :_reduce_none, - 1, 200, :_reduce_none, - 1, 200, :_reduce_none, - 1, 200, :_reduce_none, - 1, 200, :_reduce_none, - 1, 200, :_reduce_none, - 1, 200, :_reduce_none, - 1, 200, :_reduce_none, - 1, 200, :_reduce_none, - 1, 200, :_reduce_none, - 1, 200, :_reduce_none, - 1, 200, :_reduce_none, - 1, 200, :_reduce_none, - 1, 200, :_reduce_none, - 1, 200, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 3, 175, :_reduce_194, - 5, 175, :_reduce_195, - 3, 175, :_reduce_196, - 5, 175, :_reduce_197, - 6, 175, :_reduce_198, - 5, 175, :_reduce_199, - 5, 175, :_reduce_200, - 5, 175, :_reduce_201, - 5, 175, :_reduce_202, - 4, 175, :_reduce_203, - 3, 175, :_reduce_204, - 3, 175, :_reduce_205, - 3, 175, :_reduce_206, - 3, 175, :_reduce_207, - 3, 175, :_reduce_208, - 3, 175, :_reduce_209, - 3, 175, :_reduce_210, - 3, 175, :_reduce_211, - 3, 175, :_reduce_212, - 4, 175, :_reduce_213, - 2, 175, :_reduce_214, - 2, 175, :_reduce_215, - 3, 175, :_reduce_216, - 3, 175, :_reduce_217, - 3, 175, :_reduce_218, - 3, 175, :_reduce_219, - 3, 175, :_reduce_220, - 3, 175, :_reduce_221, - 3, 175, :_reduce_222, - 3, 175, :_reduce_223, - 3, 175, :_reduce_224, - 3, 175, :_reduce_225, - 3, 175, :_reduce_226, - 3, 175, :_reduce_227, - 3, 175, :_reduce_228, - 2, 175, :_reduce_229, - 2, 175, :_reduce_230, - 3, 175, :_reduce_231, - 3, 175, :_reduce_232, - 3, 175, :_reduce_233, - 3, 175, :_reduce_234, - 3, 175, :_reduce_235, - 6, 175, :_reduce_236, - 1, 175, :_reduce_none, - 1, 208, :_reduce_none, - 1, 209, :_reduce_none, - 2, 209, :_reduce_none, - 4, 209, :_reduce_241, - 2, 209, :_reduce_242, - 3, 214, :_reduce_243, - 0, 215, :_reduce_244, - 1, 215, :_reduce_none, - 0, 166, :_reduce_246, - 1, 166, :_reduce_none, - 2, 166, :_reduce_none, - 4, 166, :_reduce_249, - 2, 166, :_reduce_250, - 1, 187, :_reduce_251, - 2, 187, :_reduce_252, - 2, 187, :_reduce_253, - 4, 187, :_reduce_254, - 1, 187, :_reduce_255, - 0, 218, :_reduce_256, - 2, 181, :_reduce_257, - 2, 217, :_reduce_258, - 2, 216, :_reduce_259, - 0, 216, :_reduce_260, - 1, 211, :_reduce_261, - 2, 211, :_reduce_262, - 3, 211, :_reduce_263, - 4, 211, :_reduce_264, - 1, 171, :_reduce_265, - 1, 171, :_reduce_none, - 3, 170, :_reduce_267, - 4, 170, :_reduce_268, - 2, 170, :_reduce_269, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_280, - 0, 243, :_reduce_281, - 4, 207, :_reduce_282, - 0, 244, :_reduce_283, - 0, 245, :_reduce_284, - 6, 207, :_reduce_285, - 0, 246, :_reduce_286, - 4, 207, :_reduce_287, - 3, 207, :_reduce_288, - 3, 207, :_reduce_289, - 2, 207, :_reduce_290, - 3, 207, :_reduce_291, - 3, 207, :_reduce_292, - 1, 207, :_reduce_293, - 4, 207, :_reduce_294, - 3, 207, :_reduce_295, - 1, 207, :_reduce_296, - 5, 207, :_reduce_297, - 4, 207, :_reduce_298, - 3, 207, :_reduce_299, - 2, 207, :_reduce_300, - 1, 207, :_reduce_none, - 2, 207, :_reduce_302, - 0, 247, :_reduce_303, - 3, 207, :_reduce_304, - 6, 207, :_reduce_305, - 6, 207, :_reduce_306, - 0, 248, :_reduce_307, - 0, 249, :_reduce_308, - 7, 207, :_reduce_309, - 0, 250, :_reduce_310, - 0, 251, :_reduce_311, - 7, 207, :_reduce_312, - 5, 207, :_reduce_313, - 4, 207, :_reduce_314, - 0, 252, :_reduce_315, - 0, 253, :_reduce_316, - 9, 207, :_reduce_317, - 0, 254, :_reduce_318, - 6, 207, :_reduce_319, - 0, 255, :_reduce_320, - 7, 207, :_reduce_321, - 0, 256, :_reduce_322, - 5, 207, :_reduce_323, - 0, 257, :_reduce_324, - 6, 207, :_reduce_325, - 0, 258, :_reduce_326, - 0, 259, :_reduce_327, - 9, 207, :_reduce_328, - 1, 207, :_reduce_329, - 1, 207, :_reduce_330, - 1, 207, :_reduce_331, - 1, 207, :_reduce_332, - 1, 165, :_reduce_none, - 1, 237, :_reduce_334, - 1, 240, :_reduce_335, - 1, 232, :_reduce_none, - 1, 232, :_reduce_none, - 2, 232, :_reduce_338, - 1, 234, :_reduce_none, - 1, 234, :_reduce_none, - 1, 233, :_reduce_none, - 5, 233, :_reduce_342, - 1, 154, :_reduce_none, - 2, 154, :_reduce_344, - 1, 236, :_reduce_none, - 1, 236, :_reduce_none, - 1, 260, :_reduce_347, - 3, 260, :_reduce_348, - 1, 263, :_reduce_349, - 3, 263, :_reduce_350, - 1, 262, :_reduce_none, - 4, 262, :_reduce_352, - 6, 262, :_reduce_353, - 3, 262, :_reduce_354, - 5, 262, :_reduce_355, - 2, 262, :_reduce_356, - 4, 262, :_reduce_357, - 1, 262, :_reduce_358, - 3, 262, :_reduce_359, - 4, 264, :_reduce_360, - 2, 264, :_reduce_361, - 2, 264, :_reduce_362, - 1, 264, :_reduce_363, - 2, 269, :_reduce_364, - 0, 269, :_reduce_365, - 6, 270, :_reduce_366, - 8, 270, :_reduce_367, - 4, 270, :_reduce_368, - 6, 270, :_reduce_369, - 4, 270, :_reduce_370, - 2, 270, :_reduce_none, - 6, 270, :_reduce_372, - 2, 270, :_reduce_373, - 4, 270, :_reduce_374, - 6, 270, :_reduce_375, - 2, 270, :_reduce_376, - 4, 270, :_reduce_377, - 2, 270, :_reduce_378, - 4, 270, :_reduce_379, - 1, 270, :_reduce_none, - 0, 183, :_reduce_381, - 1, 183, :_reduce_382, - 3, 274, :_reduce_383, - 1, 274, :_reduce_384, - 4, 274, :_reduce_385, - 1, 275, :_reduce_386, - 4, 275, :_reduce_387, - 1, 276, :_reduce_388, - 3, 276, :_reduce_389, - 1, 277, :_reduce_390, - 1, 277, :_reduce_none, - 0, 281, :_reduce_392, - 0, 282, :_reduce_393, - 4, 231, :_reduce_394, - 4, 279, :_reduce_395, - 1, 279, :_reduce_396, - 0, 285, :_reduce_397, - 4, 280, :_reduce_398, - 0, 286, :_reduce_399, - 4, 280, :_reduce_400, - 0, 287, :_reduce_401, - 5, 284, :_reduce_402, - 2, 178, :_reduce_403, - 4, 178, :_reduce_404, - 5, 178, :_reduce_405, - 5, 178, :_reduce_406, - 2, 230, :_reduce_407, - 4, 230, :_reduce_408, - 4, 230, :_reduce_409, - 3, 230, :_reduce_410, - 3, 230, :_reduce_411, - 3, 230, :_reduce_412, - 2, 230, :_reduce_413, - 1, 230, :_reduce_414, - 4, 230, :_reduce_415, - 0, 289, :_reduce_416, - 5, 229, :_reduce_417, - 0, 290, :_reduce_418, - 5, 229, :_reduce_419, - 5, 235, :_reduce_420, - 1, 291, :_reduce_421, - 1, 291, :_reduce_none, - 6, 153, :_reduce_423, - 0, 153, :_reduce_424, - 1, 292, :_reduce_425, - 1, 292, :_reduce_none, - 1, 292, :_reduce_none, - 2, 293, :_reduce_428, - 1, 293, :_reduce_none, - 2, 155, :_reduce_430, - 1, 155, :_reduce_none, - 1, 219, :_reduce_none, - 1, 219, :_reduce_none, - 1, 219, :_reduce_none, - 1, 220, :_reduce_435, - 1, 295, :_reduce_436, - 2, 295, :_reduce_437, - 3, 296, :_reduce_438, - 1, 296, :_reduce_439, - 1, 296, :_reduce_440, - 3, 221, :_reduce_441, - 4, 222, :_reduce_442, - 3, 223, :_reduce_443, - 0, 300, :_reduce_444, - 3, 300, :_reduce_445, - 1, 301, :_reduce_446, - 2, 301, :_reduce_447, - 3, 225, :_reduce_448, - 0, 303, :_reduce_449, - 3, 303, :_reduce_450, - 3, 224, :_reduce_451, - 3, 226, :_reduce_452, - 0, 304, :_reduce_453, - 3, 304, :_reduce_454, - 0, 305, :_reduce_455, - 3, 305, :_reduce_456, - 0, 297, :_reduce_457, - 2, 297, :_reduce_458, - 0, 298, :_reduce_459, - 2, 298, :_reduce_460, - 0, 299, :_reduce_461, - 2, 299, :_reduce_462, - 1, 302, :_reduce_463, - 2, 302, :_reduce_464, - 0, 307, :_reduce_465, - 4, 302, :_reduce_466, - 1, 306, :_reduce_467, - 1, 306, :_reduce_468, - 1, 306, :_reduce_469, - 1, 306, :_reduce_none, - 1, 203, :_reduce_471, - 3, 204, :_reduce_472, - 1, 294, :_reduce_473, - 2, 294, :_reduce_474, - 1, 206, :_reduce_475, - 1, 206, :_reduce_476, - 1, 206, :_reduce_477, - 1, 206, :_reduce_478, - 1, 195, :_reduce_479, - 1, 195, :_reduce_480, - 1, 195, :_reduce_481, - 1, 195, :_reduce_482, - 1, 195, :_reduce_483, - 1, 196, :_reduce_484, - 1, 196, :_reduce_485, - 1, 196, :_reduce_486, - 1, 196, :_reduce_487, - 1, 196, :_reduce_488, - 1, 196, :_reduce_489, - 1, 196, :_reduce_490, - 1, 227, :_reduce_491, - 1, 227, :_reduce_492, - 1, 164, :_reduce_493, - 1, 164, :_reduce_494, - 1, 168, :_reduce_495, - 1, 168, :_reduce_496, - 1, 238, :_reduce_497, - 0, 308, :_reduce_498, - 4, 238, :_reduce_499, - 2, 238, :_reduce_500, - 3, 241, :_reduce_501, - 0, 310, :_reduce_502, - 3, 241, :_reduce_503, - 4, 309, :_reduce_504, - 2, 309, :_reduce_505, - 2, 309, :_reduce_506, - 1, 309, :_reduce_507, - 2, 312, :_reduce_508, - 0, 312, :_reduce_509, - 6, 283, :_reduce_510, - 8, 283, :_reduce_511, - 4, 283, :_reduce_512, - 6, 283, :_reduce_513, - 4, 283, :_reduce_514, - 6, 283, :_reduce_515, - 2, 283, :_reduce_516, - 4, 283, :_reduce_517, - 6, 283, :_reduce_518, - 2, 283, :_reduce_519, - 4, 283, :_reduce_520, - 2, 283, :_reduce_521, - 4, 283, :_reduce_522, - 1, 283, :_reduce_523, - 0, 283, :_reduce_524, - 1, 278, :_reduce_525, - 1, 278, :_reduce_526, - 1, 278, :_reduce_527, - 1, 278, :_reduce_528, - 1, 261, :_reduce_none, - 1, 261, :_reduce_530, - 1, 314, :_reduce_531, - 3, 314, :_reduce_532, - 1, 271, :_reduce_533, - 3, 271, :_reduce_534, - 1, 315, :_reduce_535, - 2, 316, :_reduce_536, - 1, 316, :_reduce_537, - 2, 317, :_reduce_538, - 1, 317, :_reduce_539, - 1, 265, :_reduce_540, - 3, 265, :_reduce_541, - 1, 311, :_reduce_542, - 3, 311, :_reduce_543, - 1, 318, :_reduce_none, - 1, 318, :_reduce_none, - 2, 266, :_reduce_546, - 1, 266, :_reduce_547, - 3, 319, :_reduce_548, - 3, 320, :_reduce_549, - 1, 272, :_reduce_550, - 3, 272, :_reduce_551, - 1, 313, :_reduce_552, - 3, 313, :_reduce_553, - 1, 321, :_reduce_none, - 1, 321, :_reduce_none, - 2, 273, :_reduce_556, - 1, 273, :_reduce_557, - 1, 322, :_reduce_none, - 1, 322, :_reduce_none, - 2, 268, :_reduce_560, - 2, 267, :_reduce_561, - 0, 267, :_reduce_562, - 1, 242, :_reduce_none, - 3, 242, :_reduce_564, - 0, 228, :_reduce_565, - 2, 228, :_reduce_none, - 1, 213, :_reduce_567, - 3, 213, :_reduce_568, - 3, 323, :_reduce_569, - 2, 323, :_reduce_570, - 2, 323, :_reduce_571, - 1, 186, :_reduce_none, - 1, 186, :_reduce_none, - 1, 186, :_reduce_none, - 1, 180, :_reduce_none, - 1, 180, :_reduce_none, - 1, 180, :_reduce_none, - 1, 180, :_reduce_none, - 1, 288, :_reduce_none, - 1, 288, :_reduce_none, - 1, 288, :_reduce_none, - 1, 179, :_reduce_none, - 1, 179, :_reduce_none, - 0, 147, :_reduce_none, - 1, 147, :_reduce_none, - 0, 174, :_reduce_none, - 1, 174, :_reduce_none, - 2, 190, :_reduce_588, - 2, 167, :_reduce_589, - 0, 212, :_reduce_none, - 1, 212, :_reduce_none, - 1, 212, :_reduce_none, - 1, 239, :_reduce_593, - 1, 239, :_reduce_none, - 1, 149, :_reduce_none, - 2, 149, :_reduce_none, - 0, 210, :_reduce_597 ] - -racc_reduce_n = 598 - -racc_shift_n = 1022 - -racc_token_table = { - false => 0, - :error => 1, - :kCLASS => 2, - :kMODULE => 3, - :kDEF => 4, - :kUNDEF => 5, - :kBEGIN => 6, - :kRESCUE => 7, - :kENSURE => 8, - :kEND => 9, - :kIF => 10, - :kUNLESS => 11, - :kTHEN => 12, - :kELSIF => 13, - :kELSE => 14, - :kCASE => 15, - :kWHEN => 16, - :kWHILE => 17, - :kUNTIL => 18, - :kFOR => 19, - :kBREAK => 20, - :kNEXT => 21, - :kREDO => 22, - :kRETRY => 23, - :kIN => 24, - :kDO => 25, - :kDO_COND => 26, - :kDO_BLOCK => 27, - :kDO_LAMBDA => 28, - :kRETURN => 29, - :kYIELD => 30, - :kSUPER => 31, - :kSELF => 32, - :kNIL => 33, - :kTRUE => 34, - :kFALSE => 35, - :kAND => 36, - :kOR => 37, - :kNOT => 38, - :kIF_MOD => 39, - :kUNLESS_MOD => 40, - :kWHILE_MOD => 41, - :kUNTIL_MOD => 42, - :kRESCUE_MOD => 43, - :kALIAS => 44, - :kDEFINED => 45, - :klBEGIN => 46, - :klEND => 47, - :k__LINE__ => 48, - :k__FILE__ => 49, - :k__ENCODING__ => 50, - :tIDENTIFIER => 51, - :tFID => 52, - :tGVAR => 53, - :tIVAR => 54, - :tCONSTANT => 55, - :tLABEL => 56, - :tCVAR => 57, - :tNTH_REF => 58, - :tBACK_REF => 59, - :tSTRING_CONTENT => 60, - :tINTEGER => 61, - :tFLOAT => 62, - :tUPLUS => 63, - :tUMINUS => 64, - :tUNARY_NUM => 65, - :tPOW => 66, - :tCMP => 67, - :tEQ => 68, - :tEQQ => 69, - :tNEQ => 70, - :tGEQ => 71, - :tLEQ => 72, - :tANDOP => 73, - :tOROP => 74, - :tMATCH => 75, - :tNMATCH => 76, - :tDOT => 77, - :tDOT2 => 78, - :tDOT3 => 79, - :tAREF => 80, - :tASET => 81, - :tLSHFT => 82, - :tRSHFT => 83, - :tCOLON2 => 84, - :tCOLON3 => 85, - :tOP_ASGN => 86, - :tASSOC => 87, - :tLPAREN => 88, - :tLPAREN2 => 89, - :tRPAREN => 90, - :tLPAREN_ARG => 91, - :tLBRACK => 92, - :tLBRACK2 => 93, - :tRBRACK => 94, - :tLBRACE => 95, - :tLBRACE_ARG => 96, - :tSTAR => 97, - :tSTAR2 => 98, - :tAMPER => 99, - :tAMPER2 => 100, - :tTILDE => 101, - :tPERCENT => 102, - :tDIVIDE => 103, - :tDSTAR => 104, - :tPLUS => 105, - :tMINUS => 106, - :tLT => 107, - :tGT => 108, - :tPIPE => 109, - :tBANG => 110, - :tCARET => 111, - :tLCURLY => 112, - :tRCURLY => 113, - :tBACK_REF2 => 114, - :tSYMBEG => 115, - :tSTRING_BEG => 116, - :tXSTRING_BEG => 117, - :tREGEXP_BEG => 118, - :tREGEXP_OPT => 119, - :tWORDS_BEG => 120, - :tQWORDS_BEG => 121, - :tSYMBOLS_BEG => 122, - :tQSYMBOLS_BEG => 123, - :tSTRING_DBEG => 124, - :tSTRING_DVAR => 125, - :tSTRING_END => 126, - :tSTRING_DEND => 127, - :tSTRING => 128, - :tSYMBOL => 129, - :tNL => 130, - :tEH => 131, - :tCOLON => 132, - :tCOMMA => 133, - :tSPACE => 134, - :tSEMI => 135, - :tLAMBDA => 136, - :tLAMBEG => 137, - :tCHARACTER => 138, - :tRATIONAL => 139, - :tIMAGINARY => 140, - :tEQL => 141, - :tLOWEST => 142 } - -racc_nt_base = 143 - -racc_use_result_var = true - -Racc_arg = [ - racc_action_table, - racc_action_check, - racc_action_default, - racc_action_pointer, - racc_goto_table, - racc_goto_check, - racc_goto_default, - racc_goto_pointer, - racc_nt_base, - racc_reduce_table, - racc_token_table, - racc_shift_n, - racc_reduce_n, - racc_use_result_var ] -Ractor.make_shareable(Racc_arg) if defined?(Ractor) - -Racc_token_to_s_table = [ - "$end", - "error", - "kCLASS", - "kMODULE", - "kDEF", - "kUNDEF", - "kBEGIN", - "kRESCUE", - "kENSURE", - "kEND", - "kIF", - "kUNLESS", - "kTHEN", - "kELSIF", - "kELSE", - "kCASE", - "kWHEN", - "kWHILE", - "kUNTIL", - "kFOR", - "kBREAK", - "kNEXT", - "kREDO", - "kRETRY", - "kIN", - "kDO", - "kDO_COND", - "kDO_BLOCK", - "kDO_LAMBDA", - "kRETURN", - "kYIELD", - "kSUPER", - "kSELF", - "kNIL", - "kTRUE", - "kFALSE", - "kAND", - "kOR", - "kNOT", - "kIF_MOD", - "kUNLESS_MOD", - "kWHILE_MOD", - "kUNTIL_MOD", - "kRESCUE_MOD", - "kALIAS", - "kDEFINED", - "klBEGIN", - "klEND", - "k__LINE__", - "k__FILE__", - "k__ENCODING__", - "tIDENTIFIER", - "tFID", - "tGVAR", - "tIVAR", - "tCONSTANT", - "tLABEL", - "tCVAR", - "tNTH_REF", - "tBACK_REF", - "tSTRING_CONTENT", - "tINTEGER", - "tFLOAT", - "tUPLUS", - "tUMINUS", - "tUNARY_NUM", - "tPOW", - "tCMP", - "tEQ", - "tEQQ", - "tNEQ", - "tGEQ", - "tLEQ", - "tANDOP", - "tOROP", - "tMATCH", - "tNMATCH", - "tDOT", - "tDOT2", - "tDOT3", - "tAREF", - "tASET", - "tLSHFT", - "tRSHFT", - "tCOLON2", - "tCOLON3", - "tOP_ASGN", - "tASSOC", - "tLPAREN", - "tLPAREN2", - "tRPAREN", - "tLPAREN_ARG", - "tLBRACK", - "tLBRACK2", - "tRBRACK", - "tLBRACE", - "tLBRACE_ARG", - "tSTAR", - "tSTAR2", - "tAMPER", - "tAMPER2", - "tTILDE", - "tPERCENT", - "tDIVIDE", - "tDSTAR", - "tPLUS", - "tMINUS", - "tLT", - "tGT", - "tPIPE", - "tBANG", - "tCARET", - "tLCURLY", - "tRCURLY", - "tBACK_REF2", - "tSYMBEG", - "tSTRING_BEG", - "tXSTRING_BEG", - "tREGEXP_BEG", - "tREGEXP_OPT", - "tWORDS_BEG", - "tQWORDS_BEG", - "tSYMBOLS_BEG", - "tQSYMBOLS_BEG", - "tSTRING_DBEG", - "tSTRING_DVAR", - "tSTRING_END", - "tSTRING_DEND", - "tSTRING", - "tSYMBOL", - "tNL", - "tEH", - "tCOLON", - "tCOMMA", - "tSPACE", - "tSEMI", - "tLAMBDA", - "tLAMBEG", - "tCHARACTER", - "tRATIONAL", - "tIMAGINARY", - "tEQL", - "tLOWEST", - "$start", - "program", - "top_compstmt", - "top_stmts", - "opt_terms", - "top_stmt", - "terms", - "stmt", - "bodystmt", - "compstmt", - "opt_rescue", - "opt_else", - "opt_ensure", - "stmts", - "stmt_or_begin", - "fitem", - "undef_list", - "expr_value", - "command_asgn", - "mlhs", - "command_call", - "var_lhs", - "primary_value", - "opt_call_args", - "rbracket", - "backref", - "lhs", - "mrhs", - "mrhs_arg", - "expr", - "@1", - "opt_nl", - "arg", - "command", - "block_command", - "block_call", - "dot_or_colon", - "operation2", - "command_args", - "cmd_brace_block", - "opt_block_param", - "fcall", - "@2", - "operation", - "call_args", - "mlhs_basic", - "mlhs_inner", - "rparen", - "mlhs_head", - "mlhs_item", - "mlhs_node", - "mlhs_post", - "user_variable", - "keyword_variable", - "cname", - "cpath", - "fname", - "op", - "reswords", - "fsym", - "symbol", - "dsym", - "@3", - "simple_numeric", - "primary", - "arg_value", - "aref_args", - "none", - "args", - "trailer", - "assocs", - "paren_args", - "opt_paren_args", - "opt_block_arg", - "block_arg", - "@4", - "literal", - "strings", - "xstring", - "regexp", - "words", - "qwords", - "symbols", - "qsymbols", - "var_ref", - "assoc_list", - "brace_block", - "method_call", - "lambda", - "then", - "if_tail", - "do", - "case_body", - "for_var", - "k_class", - "superclass", - "term", - "k_module", - "f_arglist", - "singleton", - "@5", - "@6", - "@7", - "@8", - "@9", - "@10", - "@11", - "@12", - "@13", - "@14", - "@15", - "@16", - "@17", - "@18", - "@19", - "@20", - "@21", - "f_marg", - "f_norm_arg", - "f_margs", - "f_marg_list", - "block_args_tail", - "f_block_kwarg", - "f_kwrest", - "opt_f_block_arg", - "f_block_arg", - "opt_block_args_tail", - "block_param", - "f_arg", - "f_block_optarg", - "f_rest_arg", - "block_param_def", - "opt_bv_decl", - "bv_decls", - "bvar", - "f_bad_arg", - "f_larglist", - "lambda_body", - "@22", - "@23", - "f_args", - "do_block", - "@24", - "@25", - "@26", - "operation3", - "@27", - "@28", - "cases", - "exc_list", - "exc_var", - "numeric", - "string", - "string1", - "string_contents", - "xstring_contents", - "regexp_contents", - "word_list", - "word", - "string_content", - "symbol_list", - "qword_list", - "qsym_list", - "string_dvar", - "@29", - "@30", - "args_tail", - "@31", - "f_kwarg", - "opt_args_tail", - "f_optarg", - "f_arg_item", - "f_label", - "f_kw", - "f_block_kw", - "kwrest_mark", - "f_opt", - "f_block_opt", - "restarg_mark", - "blkarg_mark", - "assoc" ] -Ractor.make_shareable(Racc_token_to_s_table) if defined?(Ractor) - -Racc_debug_parser = false - -##### State transition tables end ##### - -# reduce 0 omitted - -# reduce 1 omitted - -def _reduce_2(val, _values, result) - result = @builder.compstmt(val[0]) - - result -end - -def _reduce_3(val, _values, result) - result = [] - - result -end - -def _reduce_4(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_5(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_6(val, _values, result) - result = [ val[1] ] - - result -end - -# reduce 7 omitted - -def _reduce_8(val, _values, result) - result = @builder.preexe(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_9(val, _values, result) - rescue_bodies = val[1] - else_t, else_ = val[2] - ensure_t, ensure_ = val[3] - - if rescue_bodies.empty? && !else_t.nil? - diagnostic :warning, :useless_else, nil, else_t - end - - result = @builder.begin_body(val[0], - rescue_bodies, - else_t, else_, - ensure_t, ensure_) - - result -end - -def _reduce_10(val, _values, result) - result = @builder.compstmt(val[0]) - - result -end - -def _reduce_11(val, _values, result) - result = [] - - result -end - -def _reduce_12(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_13(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_14(val, _values, result) - result = [ val[1] ] - - result -end - -# reduce 15 omitted - -def _reduce_16(val, _values, result) - diagnostic :error, :begin_in_method, nil, val[0] - - result -end - -def _reduce_17(val, _values, result) - @lexer.state = :expr_fname - - result -end - -def _reduce_18(val, _values, result) - result = @builder.alias(val[0], val[1], val[3]) - - result -end - -def _reduce_19(val, _values, result) - result = @builder.alias(val[0], - @builder.gvar(val[1]), - @builder.gvar(val[2])) - - result -end - -def _reduce_20(val, _values, result) - result = @builder.alias(val[0], - @builder.gvar(val[1]), - @builder.back_ref(val[2])) - - result -end - -def _reduce_21(val, _values, result) - diagnostic :error, :nth_ref_alias, nil, val[2] - - result -end - -def _reduce_22(val, _values, result) - result = @builder.undef_method(val[0], val[1]) - - result -end - -def _reduce_23(val, _values, result) - result = @builder.condition_mod(val[0], nil, - val[1], val[2]) - - result -end - -def _reduce_24(val, _values, result) - result = @builder.condition_mod(nil, val[0], - val[1], val[2]) - - result -end - -def _reduce_25(val, _values, result) - result = @builder.loop_mod(:while, val[0], val[1], val[2]) - - result -end - -def _reduce_26(val, _values, result) - result = @builder.loop_mod(:until, val[0], val[1], val[2]) - - result -end - -def _reduce_27(val, _values, result) - rescue_body = @builder.rescue_body(val[1], - nil, nil, nil, - nil, val[2]) - - result = @builder.begin_body(val[0], [ rescue_body ]) - - result -end - -def _reduce_28(val, _values, result) - result = @builder.postexe(val[0], val[1], val[2], val[3]) - - result -end - -# reduce 29 omitted - -def _reduce_30(val, _values, result) - result = @builder.multi_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_31(val, _values, result) - result = @builder.op_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_32(val, _values, result) - result = @builder.op_assign( - @builder.index( - val[0], val[1], val[2], val[3]), - val[4], val[5]) - - result -end - -def _reduce_33(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_34(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_35(val, _values, result) - const = @builder.const_op_assignable( - @builder.const_fetch(val[0], val[1], val[2])) - result = @builder.op_assign(const, val[3], val[4]) - - result -end - -def _reduce_36(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_37(val, _values, result) - @builder.op_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_38(val, _values, result) - result = @builder.assign(val[0], val[1], - @builder.array(nil, val[2], nil)) - - result -end - -def _reduce_39(val, _values, result) - result = @builder.multi_assign(val[0], val[1], val[2]) - - result -end - -# reduce 40 omitted - -def _reduce_41(val, _values, result) - result = @builder.assign(val[0], val[1], val[2]) - - result -end - -def _reduce_42(val, _values, result) - result = @builder.assign(val[0], val[1], val[2]) - - result -end - -# reduce 43 omitted - -def _reduce_44(val, _values, result) - result = @builder.logical_op(:and, val[0], val[1], val[2]) - - result -end - -def _reduce_45(val, _values, result) - result = @builder.logical_op(:or, val[0], val[1], val[2]) - - result -end - -def _reduce_46(val, _values, result) - result = @builder.not_op(val[0], nil, val[2], nil) - - result -end - -def _reduce_47(val, _values, result) - result = @builder.not_op(val[0], nil, val[1], nil) - - result -end - -# reduce 48 omitted - -# reduce 49 omitted - -# reduce 50 omitted - -# reduce 51 omitted - -# reduce 52 omitted - -def _reduce_53(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - result -end - -def _reduce_54(val, _values, result) - @static_env.extend_dynamic - result = @context.dup - @context.in_block = true - - result -end - -def _reduce_55(val, _values, result) - result = [ val[0], val[2], val[3], val[4] ] - - @static_env.unextend - @context.in_block = val[1].in_block - - result -end - -# reduce 56 omitted - -def _reduce_57(val, _values, result) - result = @builder.call_method(nil, nil, val[0], - nil, val[1], nil) - - result -end - -def _reduce_58(val, _values, result) - method_call = @builder.call_method(nil, nil, val[0], - nil, val[1], nil) - - begin_t, args, body, end_t = val[2] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_59(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - result -end - -def _reduce_60(val, _values, result) - method_call = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - begin_t, args, body, end_t = val[4] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_61(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - result -end - -def _reduce_62(val, _values, result) - method_call = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - begin_t, args, body, end_t = val[4] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_63(val, _values, result) - result = @builder.keyword_cmd(:super, val[0], - nil, val[1], nil) - - result -end - -def _reduce_64(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0], - nil, val[1], nil) - - result -end - -def _reduce_65(val, _values, result) - result = @builder.keyword_cmd(:return, val[0], - nil, val[1], nil) - - result -end - -def _reduce_66(val, _values, result) - result = @builder.keyword_cmd(:break, val[0], - nil, val[1], nil) - - result -end - -def _reduce_67(val, _values, result) - result = @builder.keyword_cmd(:next, val[0], - nil, val[1], nil) - - result -end - -def _reduce_68(val, _values, result) - result = @builder.multi_lhs(nil, val[0], nil) - - result -end - -def _reduce_69(val, _values, result) - result = @builder.begin(val[0], val[1], val[2]) - - result -end - -def _reduce_70(val, _values, result) - result = @builder.multi_lhs(nil, val[0], nil) - - result -end - -def _reduce_71(val, _values, result) - result = @builder.multi_lhs(val[0], val[1], val[2]) - - result -end - -# reduce 72 omitted - -def _reduce_73(val, _values, result) - result = val[0]. - push(val[1]) - - result -end - -def _reduce_74(val, _values, result) - result = val[0]. - push(@builder.splat(val[1], val[2])) - - result -end - -def _reduce_75(val, _values, result) - result = val[0]. - push(@builder.splat(val[1], val[2])). - concat(val[4]) - - result -end - -def _reduce_76(val, _values, result) - result = val[0]. - push(@builder.splat(val[1])) - - result -end - -def _reduce_77(val, _values, result) - result = val[0]. - push(@builder.splat(val[1])). - concat(val[3]) - - result -end - -def _reduce_78(val, _values, result) - result = [ @builder.splat(val[0], val[1]) ] - - result -end - -def _reduce_79(val, _values, result) - result = [ @builder.splat(val[0], val[1]), - *val[3] ] - - result -end - -def _reduce_80(val, _values, result) - result = [ @builder.splat(val[0]) ] - - result -end - -def _reduce_81(val, _values, result) - result = [ @builder.splat(val[0]), - *val[2] ] - - result -end - -# reduce 82 omitted - -def _reduce_83(val, _values, result) - result = @builder.begin(val[0], val[1], val[2]) - - result -end - -def _reduce_84(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_85(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_86(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_87(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_88(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_89(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_90(val, _values, result) - result = @builder.index_asgn(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_91(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_92(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_93(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_94(val, _values, result) - result = @builder.assignable( - @builder.const_fetch(val[0], val[1], val[2])) - - result -end - -def _reduce_95(val, _values, result) - result = @builder.assignable( - @builder.const_global(val[0], val[1])) - - result -end - -def _reduce_96(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_97(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_98(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_99(val, _values, result) - result = @builder.index_asgn(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_100(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_101(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_102(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_103(val, _values, result) - result = @builder.assignable( - @builder.const_fetch(val[0], val[1], val[2])) - - result -end - -def _reduce_104(val, _values, result) - result = @builder.assignable( - @builder.const_global(val[0], val[1])) - - result -end - -def _reduce_105(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_106(val, _values, result) - diagnostic :error, :module_name_const, nil, val[0] - - result -end - -# reduce 107 omitted - -def _reduce_108(val, _values, result) - result = @builder.const_global(val[0], val[1]) - - result -end - -def _reduce_109(val, _values, result) - result = @builder.const(val[0]) - - result -end - -def _reduce_110(val, _values, result) - result = @builder.const_fetch(val[0], val[1], val[2]) - - result -end - -# reduce 111 omitted - -# reduce 112 omitted - -# reduce 113 omitted - -# reduce 114 omitted - -# reduce 115 omitted - -def _reduce_116(val, _values, result) - result = @builder.symbol_internal(val[0]) - - result -end - -# reduce 117 omitted - -# reduce 118 omitted - -# reduce 119 omitted - -def _reduce_120(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_121(val, _values, result) - @lexer.state = :expr_fname - - result -end - -def _reduce_122(val, _values, result) - result = val[0] << val[3] - - result -end - -# reduce 123 omitted - -# reduce 124 omitted - -# reduce 125 omitted - -# reduce 126 omitted - -# reduce 127 omitted - -# reduce 128 omitted - -# reduce 129 omitted - -# reduce 130 omitted - -# reduce 131 omitted - -# reduce 132 omitted - -# reduce 133 omitted - -# reduce 134 omitted - -# reduce 135 omitted - -# reduce 136 omitted - -# reduce 137 omitted - -# reduce 138 omitted - -# reduce 139 omitted - -# reduce 140 omitted - -# reduce 141 omitted - -# reduce 142 omitted - -# reduce 143 omitted - -# reduce 144 omitted - -# reduce 145 omitted - -# reduce 146 omitted - -# reduce 147 omitted - -# reduce 148 omitted - -# reduce 149 omitted - -# reduce 150 omitted - -# reduce 151 omitted - -# reduce 152 omitted - -# reduce 153 omitted - -# reduce 154 omitted - -# reduce 155 omitted - -# reduce 156 omitted - -# reduce 157 omitted - -# reduce 158 omitted - -# reduce 159 omitted - -# reduce 160 omitted - -# reduce 161 omitted - -# reduce 162 omitted - -# reduce 163 omitted - -# reduce 164 omitted - -# reduce 165 omitted - -# reduce 166 omitted - -# reduce 167 omitted - -# reduce 168 omitted - -# reduce 169 omitted - -# reduce 170 omitted - -# reduce 171 omitted - -# reduce 172 omitted - -# reduce 173 omitted - -# reduce 174 omitted - -# reduce 175 omitted - -# reduce 176 omitted - -# reduce 177 omitted - -# reduce 178 omitted - -# reduce 179 omitted - -# reduce 180 omitted - -# reduce 181 omitted - -# reduce 182 omitted - -# reduce 183 omitted - -# reduce 184 omitted - -# reduce 185 omitted - -# reduce 186 omitted - -# reduce 187 omitted - -# reduce 188 omitted - -# reduce 189 omitted - -# reduce 190 omitted - -# reduce 191 omitted - -# reduce 192 omitted - -# reduce 193 omitted - -def _reduce_194(val, _values, result) - result = @builder.assign(val[0], val[1], val[2]) - - result -end - -def _reduce_195(val, _values, result) - rescue_body = @builder.rescue_body(val[3], - nil, nil, nil, - nil, val[4]) - - rescue_ = @builder.begin_body(val[2], [ rescue_body ]) - - result = @builder.assign(val[0], val[1], rescue_) - - result -end - -def _reduce_196(val, _values, result) - result = @builder.op_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_197(val, _values, result) - rescue_body = @builder.rescue_body(val[3], - nil, nil, nil, - nil, val[4]) - - rescue_ = @builder.begin_body(val[2], [ rescue_body ]) - - result = @builder.op_assign(val[0], val[1], rescue_) - - result -end - -def _reduce_198(val, _values, result) - result = @builder.op_assign( - @builder.index( - val[0], val[1], val[2], val[3]), - val[4], val[5]) - - result -end - -def _reduce_199(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_200(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_201(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_202(val, _values, result) - const = @builder.const_op_assignable( - @builder.const_fetch(val[0], val[1], val[2])) - result = @builder.op_assign(const, val[3], val[4]) - - result -end - -def _reduce_203(val, _values, result) - const = @builder.const_op_assignable( - @builder.const_global(val[0], val[1])) - result = @builder.op_assign(const, val[2], val[3]) - - result -end - -def _reduce_204(val, _values, result) - result = @builder.op_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_205(val, _values, result) - result = @builder.range_inclusive(val[0], val[1], val[2]) - - result -end - -def _reduce_206(val, _values, result) - result = @builder.range_exclusive(val[0], val[1], val[2]) - - result -end - -def _reduce_207(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_208(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_209(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_210(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_211(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_212(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_213(val, _values, result) - result = @builder.unary_op(val[0], - @builder.binary_op( - val[1], val[2], val[3])) - - result -end - -def _reduce_214(val, _values, result) - result = @builder.unary_op(val[0], val[1]) - - result -end - -def _reduce_215(val, _values, result) - result = @builder.unary_op(val[0], val[1]) - - result -end - -def _reduce_216(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_217(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_218(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_219(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_220(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_221(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_222(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_223(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_224(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_225(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_226(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_227(val, _values, result) - result = @builder.match_op(val[0], val[1], val[2]) - - result -end - -def _reduce_228(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_229(val, _values, result) - result = @builder.not_op(val[0], nil, val[1], nil) - - result -end - -def _reduce_230(val, _values, result) - result = @builder.unary_op(val[0], val[1]) - - result -end - -def _reduce_231(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_232(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_233(val, _values, result) - result = @builder.logical_op(:and, val[0], val[1], val[2]) - - result -end - -def _reduce_234(val, _values, result) - result = @builder.logical_op(:or, val[0], val[1], val[2]) - - result -end - -def _reduce_235(val, _values, result) - result = @builder.keyword_cmd(:defined?, val[0], nil, [ val[2] ], nil) - - result -end - -def _reduce_236(val, _values, result) - result = @builder.ternary(val[0], val[1], - val[2], val[4], val[5]) - - result -end - -# reduce 237 omitted - -# reduce 238 omitted - -# reduce 239 omitted - -# reduce 240 omitted - -def _reduce_241(val, _values, result) - result = val[0] << @builder.associate(nil, val[2], nil) - - result -end - -def _reduce_242(val, _values, result) - result = [ @builder.associate(nil, val[0], nil) ] - - result -end - -def _reduce_243(val, _values, result) - result = val - - result -end - -def _reduce_244(val, _values, result) - result = [ nil, [], nil ] - - result -end - -# reduce 245 omitted - -def _reduce_246(val, _values, result) - result = [] - - result -end - -# reduce 247 omitted - -# reduce 248 omitted - -def _reduce_249(val, _values, result) - result = val[0] << @builder.associate(nil, val[2], nil) - - result -end - -def _reduce_250(val, _values, result) - result = [ @builder.associate(nil, val[0], nil) ] - - result -end - -def _reduce_251(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_252(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_253(val, _values, result) - result = [ @builder.associate(nil, val[0], nil) ] - result.concat(val[1]) - - result -end - -def _reduce_254(val, _values, result) - assocs = @builder.associate(nil, val[2], nil) - result = val[0] << assocs - result.concat(val[3]) - - result -end - -def _reduce_255(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_256(val, _values, result) - result = @lexer.cmdarg.dup - @lexer.cmdarg.push(true) - - result -end - -def _reduce_257(val, _values, result) - @lexer.cmdarg = val[0] - - result = val[1] - - result -end - -def _reduce_258(val, _values, result) - result = @builder.block_pass(val[0], val[1]) - - result -end - -def _reduce_259(val, _values, result) - result = [ val[1] ] - - result -end - -def _reduce_260(val, _values, result) - result = [] - - result -end - -def _reduce_261(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_262(val, _values, result) - result = [ @builder.splat(val[0], val[1]) ] - - result -end - -def _reduce_263(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_264(val, _values, result) - result = val[0] << @builder.splat(val[2], val[3]) - - result -end - -def _reduce_265(val, _values, result) - result = @builder.array(nil, val[0], nil) - - result -end - -# reduce 266 omitted - -def _reduce_267(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_268(val, _values, result) - result = val[0] << @builder.splat(val[2], val[3]) - - result -end - -def _reduce_269(val, _values, result) - result = [ @builder.splat(val[0], val[1]) ] - - result -end - -# reduce 270 omitted - -# reduce 271 omitted - -# reduce 272 omitted - -# reduce 273 omitted - -# reduce 274 omitted - -# reduce 275 omitted - -# reduce 276 omitted - -# reduce 277 omitted - -# reduce 278 omitted - -# reduce 279 omitted - -def _reduce_280(val, _values, result) - result = @builder.call_method(nil, nil, val[0]) - - result -end - -def _reduce_281(val, _values, result) - result = @lexer.cmdarg.dup - @lexer.cmdarg.clear - - result -end - -def _reduce_282(val, _values, result) - @lexer.cmdarg = val[1] - - result = @builder.begin_keyword(val[0], val[2], val[3]) - - result -end - -def _reduce_283(val, _values, result) - result = @lexer.cmdarg.dup - @lexer.cmdarg.clear - - result -end - -def _reduce_284(val, _values, result) - @lexer.state = :expr_endarg - - result -end - -def _reduce_285(val, _values, result) - @lexer.cmdarg = val[1] - - result = @builder.begin(val[0], val[2], val[5]) - - result -end - -def _reduce_286(val, _values, result) - @lexer.state = :expr_endarg - - result -end - -def _reduce_287(val, _values, result) - result = @builder.begin(val[0], nil, val[3]) - - result -end - -def _reduce_288(val, _values, result) - result = @builder.begin(val[0], val[1], val[2]) - - result -end - -def _reduce_289(val, _values, result) - result = @builder.const_fetch(val[0], val[1], val[2]) - - result -end - -def _reduce_290(val, _values, result) - result = @builder.const_global(val[0], val[1]) - - result -end - -def _reduce_291(val, _values, result) - result = @builder.array(val[0], val[1], val[2]) - - result -end - -def _reduce_292(val, _values, result) - result = @builder.associate(val[0], val[1], val[2]) - - result -end - -def _reduce_293(val, _values, result) - result = @builder.keyword_cmd(:return, val[0]) - - result -end - -def _reduce_294(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_295(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0], val[1], [], val[2]) - - result -end - -def _reduce_296(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0]) - - result -end - -def _reduce_297(val, _values, result) - result = @builder.keyword_cmd(:defined?, val[0], - val[2], [ val[3] ], val[4]) - - result -end - -def _reduce_298(val, _values, result) - result = @builder.not_op(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_299(val, _values, result) - result = @builder.not_op(val[0], val[1], nil, val[2]) - - result -end - -def _reduce_300(val, _values, result) - method_call = @builder.call_method(nil, nil, val[0]) - - begin_t, args, body, end_t = val[1] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -# reduce 301 omitted - -def _reduce_302(val, _values, result) - begin_t, args, body, end_t = val[1] - result = @builder.block(val[0], - begin_t, args, body, end_t) - - result -end - -def _reduce_303(val, _values, result) - result = @context.dup - @context.in_lambda = true - - result -end - -def _reduce_304(val, _values, result) - lambda_call = @builder.call_lambda(val[0]) - - args, (begin_t, body, end_t) = val[2] - result = @builder.block(lambda_call, - begin_t, args, body, end_t) - - @context.in_lambda = val[1].in_lambda - - result -end - -def _reduce_305(val, _values, result) - else_t, else_ = val[4] - result = @builder.condition(val[0], val[1], val[2], - val[3], else_t, - else_, val[5]) - - result -end - -def _reduce_306(val, _values, result) - else_t, else_ = val[4] - result = @builder.condition(val[0], val[1], val[2], - else_, else_t, - val[3], val[5]) - - result -end - -def _reduce_307(val, _values, result) - @lexer.cond.push(true) - - result -end - -def _reduce_308(val, _values, result) - @lexer.cond.pop - - result -end - -def _reduce_309(val, _values, result) - result = @builder.loop(:while, val[0], val[2], val[3], - val[5], val[6]) - - result -end - -def _reduce_310(val, _values, result) - @lexer.cond.push(true) - - result -end - -def _reduce_311(val, _values, result) - @lexer.cond.pop - - result -end - -def _reduce_312(val, _values, result) - result = @builder.loop(:until, val[0], val[2], val[3], - val[5], val[6]) - - result -end - -def _reduce_313(val, _values, result) - *when_bodies, (else_t, else_body) = *val[3] - - result = @builder.case(val[0], val[1], - when_bodies, else_t, else_body, - val[4]) - - result -end - -def _reduce_314(val, _values, result) - *when_bodies, (else_t, else_body) = *val[2] - - result = @builder.case(val[0], nil, - when_bodies, else_t, else_body, - val[3]) - - result -end - -def _reduce_315(val, _values, result) - @lexer.cond.push(true) - - result -end - -def _reduce_316(val, _values, result) - @lexer.cond.pop - - result -end - -def _reduce_317(val, _values, result) - result = @builder.for(val[0], val[1], - val[2], val[4], - val[5], val[7], val[8]) - - result -end - -def _reduce_318(val, _values, result) - local_push - @context.in_class = true - - result -end - -def _reduce_319(val, _values, result) - k_class, ctx = val[0] - if @context.in_def - diagnostic :error, :class_in_def, nil, k_class - end - - lt_t, superclass = val[2] - result = @builder.def_class(k_class, val[1], - lt_t, superclass, - val[4], val[5]) - - local_pop - @context.in_class = ctx.in_class - - result -end - -def _reduce_320(val, _values, result) - @context.in_def = false - @context.in_class = false - local_push - - result -end - -def _reduce_321(val, _values, result) - k_class, ctx = val[0] - result = @builder.def_sclass(k_class, val[1], val[2], - val[5], val[6]) - - local_pop - @context.in_def = ctx.in_def - @context.in_class = ctx.in_class - - result -end - -def _reduce_322(val, _values, result) - @context.in_class = true - local_push - - result -end - -def _reduce_323(val, _values, result) - k_mod, ctx = val[0] - if @context.in_def - diagnostic :error, :module_in_def, nil, k_mod - end - - result = @builder.def_module(k_mod, val[1], - val[3], val[4]) - - local_pop - @context.in_class = ctx.in_class - - result -end - -def _reduce_324(val, _values, result) - local_push - result = context.dup - @context.in_def = true - - result -end - -def _reduce_325(val, _values, result) - result = @builder.def_method(val[0], val[1], - val[3], val[4], val[5]) - - local_pop - @context.in_def = val[2].in_def - - result -end - -def _reduce_326(val, _values, result) - @lexer.state = :expr_fname - - result -end - -def _reduce_327(val, _values, result) - local_push - result = context.dup - @context.in_def = true - - result -end - -def _reduce_328(val, _values, result) - result = @builder.def_singleton(val[0], val[1], val[2], - val[4], val[6], val[7], val[8]) - - local_pop - @context.in_def = val[5].in_def - - result -end - -def _reduce_329(val, _values, result) - result = @builder.keyword_cmd(:break, val[0]) - - result -end - -def _reduce_330(val, _values, result) - result = @builder.keyword_cmd(:next, val[0]) - - result -end - -def _reduce_331(val, _values, result) - result = @builder.keyword_cmd(:redo, val[0]) - - result -end - -def _reduce_332(val, _values, result) - result = @builder.keyword_cmd(:retry, val[0]) - - result -end - -# reduce 333 omitted - -def _reduce_334(val, _values, result) - result = [ val[0], @context.dup ] - - result -end - -def _reduce_335(val, _values, result) - result = [ val[0], @context.dup ] - - result -end - -# reduce 336 omitted - -# reduce 337 omitted - -def _reduce_338(val, _values, result) - result = val[1] - - result -end - -# reduce 339 omitted - -# reduce 340 omitted - -# reduce 341 omitted - -def _reduce_342(val, _values, result) - else_t, else_ = val[4] - result = [ val[0], - @builder.condition(val[0], val[1], val[2], - val[3], else_t, - else_, nil), - ] - - result -end - -# reduce 343 omitted - -def _reduce_344(val, _values, result) - result = val - - result -end - -# reduce 345 omitted - -# reduce 346 omitted - -def _reduce_347(val, _values, result) - result = @builder.arg(val[0]) - - result -end - -def _reduce_348(val, _values, result) - result = @builder.multi_lhs(val[0], val[1], val[2]) - - result -end - -def _reduce_349(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_350(val, _values, result) - result = val[0] << val[2] - - result -end - -# reduce 351 omitted - -def _reduce_352(val, _values, result) - result = val[0]. - push(@builder.restarg(val[2], val[3])) - - result -end - -def _reduce_353(val, _values, result) - result = val[0]. - push(@builder.restarg(val[2], val[3])). - concat(val[5]) - - result -end - -def _reduce_354(val, _values, result) - result = val[0]. - push(@builder.restarg(val[2])) - - result -end - -def _reduce_355(val, _values, result) - result = val[0]. - push(@builder.restarg(val[2])). - concat(val[4]) - - result -end - -def _reduce_356(val, _values, result) - result = [ @builder.restarg(val[0], val[1]) ] - - result -end - -def _reduce_357(val, _values, result) - result = [ @builder.restarg(val[0], val[1]), - *val[3] ] - - result -end - -def _reduce_358(val, _values, result) - result = [ @builder.restarg(val[0]) ] - - result -end - -def _reduce_359(val, _values, result) - result = [ @builder.restarg(val[0]), - *val[2] ] - - result -end - -def _reduce_360(val, _values, result) - result = val[0].concat(val[2]).concat(val[3]) - - result -end - -def _reduce_361(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_362(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_363(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_364(val, _values, result) - result = val[1] - - result -end - -def _reduce_365(val, _values, result) - result = [] - - result -end - -def _reduce_366(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_367(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[6]). - concat(val[7]) - - result -end - -def _reduce_368(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_369(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_370(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -# reduce 371 omitted - -def _reduce_372(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_373(val, _values, result) - if val[1].empty? && val[0].size == 1 - result = [@builder.procarg0(val[0][0])] - else - result = val[0].concat(val[1]) - end - - result -end - -def _reduce_374(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_375(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_376(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_377(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_378(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_379(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -# reduce 380 omitted - -def _reduce_381(val, _values, result) - result = @builder.args(nil, [], nil) - - result -end - -def _reduce_382(val, _values, result) - @lexer.state = :expr_value - - result -end - -def _reduce_383(val, _values, result) - result = @builder.args(val[0], val[1], val[2]) - - result -end - -def _reduce_384(val, _values, result) - result = @builder.args(val[0], [], val[0]) - - result -end - -def _reduce_385(val, _values, result) - result = @builder.args(val[0], val[1].concat(val[2]), val[3]) - - result -end - -def _reduce_386(val, _values, result) - result = [] - - result -end - -def _reduce_387(val, _values, result) - result = val[2] - - result -end - -def _reduce_388(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_389(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_390(val, _values, result) - @static_env.declare val[0][0] - result = @builder.shadowarg(val[0]) - - result -end - -# reduce 391 omitted - -def _reduce_392(val, _values, result) - @static_env.extend_dynamic - - result -end - -def _reduce_393(val, _values, result) - result = @lexer.cmdarg.dup - @lexer.cmdarg.clear - - result -end - -def _reduce_394(val, _values, result) - @lexer.cmdarg = val[2] - @lexer.cmdarg.lexpop - - result = [ val[1], val[3] ] - - @static_env.unextend - - result -end - -def _reduce_395(val, _values, result) - result = @builder.args(val[0], val[1].concat(val[2]), val[3]) - - result -end - -def _reduce_396(val, _values, result) - result = @builder.args(nil, val[0], nil) - - result -end - -def _reduce_397(val, _values, result) - result = @context.dup - @context.in_lambda = true - - result -end - -def _reduce_398(val, _values, result) - result = [ val[0], val[2], val[3] ] - @context.in_lambda = val[1].in_lambda - - result -end - -def _reduce_399(val, _values, result) - result = @context.dup - @context.in_lambda = true - - result -end - -def _reduce_400(val, _values, result) - result = [ val[0], val[2], val[3] ] - @context.in_lambda = val[1].in_lambda - - result -end - -def _reduce_401(val, _values, result) - @static_env.extend_dynamic - result = @context.dup - @context.in_block = true - - result -end - -def _reduce_402(val, _values, result) - result = [ val[0], val[2], val[3], val[4] ] - - @static_env.unextend - @context.in_block = val[1].in_block - - result -end - -def _reduce_403(val, _values, result) - begin_t, block_args, body, end_t = val[1] - result = @builder.block(val[0], - begin_t, block_args, body, end_t) - - result -end - -def _reduce_404(val, _values, result) - lparen_t, args, rparen_t = val[3] - result = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - result -end - -def _reduce_405(val, _values, result) - lparen_t, args, rparen_t = val[3] - method_call = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - begin_t, args, body, end_t = val[4] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_406(val, _values, result) - method_call = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - begin_t, args, body, end_t = val[4] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_407(val, _values, result) - lparen_t, args, rparen_t = val[1] - result = @builder.call_method(nil, nil, val[0], - lparen_t, args, rparen_t) - - result -end - -def _reduce_408(val, _values, result) - lparen_t, args, rparen_t = val[3] - result = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - result -end - -def _reduce_409(val, _values, result) - lparen_t, args, rparen_t = val[3] - result = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - result -end - -def _reduce_410(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2]) - - result -end - -def _reduce_411(val, _values, result) - lparen_t, args, rparen_t = val[2] - result = @builder.call_method(val[0], val[1], nil, - lparen_t, args, rparen_t) - - result -end - -def _reduce_412(val, _values, result) - lparen_t, args, rparen_t = val[2] - result = @builder.call_method(val[0], val[1], nil, - lparen_t, args, rparen_t) - - result -end - -def _reduce_413(val, _values, result) - lparen_t, args, rparen_t = val[1] - result = @builder.keyword_cmd(:super, val[0], - lparen_t, args, rparen_t) - - result -end - -def _reduce_414(val, _values, result) - result = @builder.keyword_cmd(:zsuper, val[0]) - - result -end - -def _reduce_415(val, _values, result) - result = @builder.index(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_416(val, _values, result) - @static_env.extend_dynamic - result = @context.dup - @context.in_block = true - - result -end - -def _reduce_417(val, _values, result) - result = [ val[0], val[2], val[3], val[4] ] - - @static_env.unextend - @context.in_block = val[1].in_block - - result -end - -def _reduce_418(val, _values, result) - @static_env.extend_dynamic - result = @context.dup - @context.in_block = true - - result -end - -def _reduce_419(val, _values, result) - result = [ val[0], val[2], val[3], val[4] ] - - @static_env.unextend - @context.in_block = val[1].in_block - - result -end - -def _reduce_420(val, _values, result) - result = [ @builder.when(val[0], val[1], val[2], val[3]), - *val[4] ] - - result -end - -def _reduce_421(val, _values, result) - result = [ val[0] ] - - result -end - -# reduce 422 omitted - -def _reduce_423(val, _values, result) - assoc_t, exc_var = val[2] - - if val[1] - exc_list = @builder.array(nil, val[1], nil) - end - - result = [ @builder.rescue_body(val[0], - exc_list, assoc_t, exc_var, - val[3], val[4]), - *val[5] ] - - result -end - -def _reduce_424(val, _values, result) - result = [] - - result -end - -def _reduce_425(val, _values, result) - result = [ val[0] ] - - result -end - -# reduce 426 omitted - -# reduce 427 omitted - -def _reduce_428(val, _values, result) - result = [ val[0], val[1] ] - - result -end - -# reduce 429 omitted - -def _reduce_430(val, _values, result) - result = [ val[0], val[1] ] - - result -end - -# reduce 431 omitted - -# reduce 432 omitted - -# reduce 433 omitted - -# reduce 434 omitted - -def _reduce_435(val, _values, result) - result = @builder.string_compose(nil, val[0], nil) - - result -end - -def _reduce_436(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_437(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_438(val, _values, result) - result = @builder.string_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_439(val, _values, result) - result = @builder.string(val[0]) - - result -end - -def _reduce_440(val, _values, result) - result = @builder.character(val[0]) - - result -end - -def _reduce_441(val, _values, result) - result = @builder.xstring_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_442(val, _values, result) - opts = @builder.regexp_options(val[3]) - result = @builder.regexp_compose(val[0], val[1], val[2], opts) - - result -end - -def _reduce_443(val, _values, result) - result = @builder.words_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_444(val, _values, result) - result = [] - - result -end - -def _reduce_445(val, _values, result) - result = val[0] << @builder.word(val[1]) - - result -end - -def _reduce_446(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_447(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_448(val, _values, result) - result = @builder.symbols_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_449(val, _values, result) - result = [] - - result -end - -def _reduce_450(val, _values, result) - result = val[0] << @builder.word(val[1]) - - result -end - -def _reduce_451(val, _values, result) - result = @builder.words_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_452(val, _values, result) - result = @builder.symbols_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_453(val, _values, result) - result = [] - - result -end - -def _reduce_454(val, _values, result) - result = val[0] << @builder.string_internal(val[1]) - - result -end - -def _reduce_455(val, _values, result) - result = [] - - result -end - -def _reduce_456(val, _values, result) - result = val[0] << @builder.symbol_internal(val[1]) - - result -end - -def _reduce_457(val, _values, result) - result = [] - - result -end - -def _reduce_458(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_459(val, _values, result) - result = [] - - result -end - -def _reduce_460(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_461(val, _values, result) - result = [] - - result -end - -def _reduce_462(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_463(val, _values, result) - result = @builder.string_internal(val[0]) - - result -end - -def _reduce_464(val, _values, result) - result = val[1] - - result -end - -def _reduce_465(val, _values, result) - @lexer.cond.push(false) - @lexer.cmdarg.push(false) - - result -end - -def _reduce_466(val, _values, result) - @lexer.cond.lexpop - @lexer.cmdarg.lexpop - - result = @builder.begin(val[0], val[2], val[3]) - - result -end - -def _reduce_467(val, _values, result) - result = @builder.gvar(val[0]) - - result -end - -def _reduce_468(val, _values, result) - result = @builder.ivar(val[0]) - - result -end - -def _reduce_469(val, _values, result) - result = @builder.cvar(val[0]) - - result -end - -# reduce 470 omitted - -def _reduce_471(val, _values, result) - result = @builder.symbol(val[0]) - - result -end - -def _reduce_472(val, _values, result) - result = @builder.symbol_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_473(val, _values, result) - result = val[0] - - result -end - -def _reduce_474(val, _values, result) - if @builder.respond_to? :negate - # AST builder interface compatibility - result = @builder.negate(val[0], val[1]) - else - result = @builder.unary_num(val[0], val[1]) - end - - result -end - -def _reduce_475(val, _values, result) - result = @builder.integer(val[0]) - - result -end - -def _reduce_476(val, _values, result) - result = @builder.float(val[0]) - - result -end - -def _reduce_477(val, _values, result) - result = @builder.rational(val[0]) - - result -end - -def _reduce_478(val, _values, result) - result = @builder.complex(val[0]) - - result -end - -def _reduce_479(val, _values, result) - result = @builder.ident(val[0]) - - result -end - -def _reduce_480(val, _values, result) - result = @builder.ivar(val[0]) - - result -end - -def _reduce_481(val, _values, result) - result = @builder.gvar(val[0]) - - result -end - -def _reduce_482(val, _values, result) - result = @builder.const(val[0]) - - result -end - -def _reduce_483(val, _values, result) - result = @builder.cvar(val[0]) - - result -end - -def _reduce_484(val, _values, result) - result = @builder.nil(val[0]) - - result -end - -def _reduce_485(val, _values, result) - result = @builder.self(val[0]) - - result -end - -def _reduce_486(val, _values, result) - result = @builder.true(val[0]) - - result -end - -def _reduce_487(val, _values, result) - result = @builder.false(val[0]) - - result -end - -def _reduce_488(val, _values, result) - result = @builder.__FILE__(val[0]) - - result -end - -def _reduce_489(val, _values, result) - result = @builder.__LINE__(val[0]) - - result -end - -def _reduce_490(val, _values, result) - result = @builder.__ENCODING__(val[0]) - - result -end - -def _reduce_491(val, _values, result) - result = @builder.accessible(val[0]) - - result -end - -def _reduce_492(val, _values, result) - result = @builder.accessible(val[0]) - - result -end - -def _reduce_493(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_494(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_495(val, _values, result) - result = @builder.nth_ref(val[0]) - - result -end - -def _reduce_496(val, _values, result) - result = @builder.back_ref(val[0]) - - result -end - -def _reduce_497(val, _values, result) - result = nil - - result -end - -def _reduce_498(val, _values, result) - @lexer.state = :expr_value - - result -end - -def _reduce_499(val, _values, result) - result = [ val[0], val[2] ] - - result -end - -def _reduce_500(val, _values, result) - yyerrok - result = nil - - result -end - -def _reduce_501(val, _values, result) - result = @builder.args(val[0], val[1], val[2]) - - @lexer.state = :expr_value - - result -end - -def _reduce_502(val, _values, result) - result = @context.in_kwarg - @context.in_kwarg = true - - result -end - -def _reduce_503(val, _values, result) - @context.in_kwarg = val[0] - result = @builder.args(nil, val[1], nil) - - result -end - -def _reduce_504(val, _values, result) - result = val[0].concat(val[2]).concat(val[3]) - - result -end - -def _reduce_505(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_506(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_507(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_508(val, _values, result) - result = val[1] - - result -end - -def _reduce_509(val, _values, result) - result = [] - - result -end - -def _reduce_510(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_511(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[6]). - concat(val[7]) - - result -end - -def _reduce_512(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_513(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_514(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_515(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_516(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_517(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_518(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_519(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_520(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_521(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_522(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_523(val, _values, result) - result = val[0] - - result -end - -def _reduce_524(val, _values, result) - result = [] - - result -end - -def _reduce_525(val, _values, result) - diagnostic :error, :argument_const, nil, val[0] - - result -end - -def _reduce_526(val, _values, result) - diagnostic :error, :argument_ivar, nil, val[0] - - result -end - -def _reduce_527(val, _values, result) - diagnostic :error, :argument_gvar, nil, val[0] - - result -end - -def _reduce_528(val, _values, result) - diagnostic :error, :argument_cvar, nil, val[0] - - result -end - -# reduce 529 omitted - -def _reduce_530(val, _values, result) - @static_env.declare val[0][0] - - result = val[0] - - result -end - -def _reduce_531(val, _values, result) - result = @builder.arg(val[0]) - - result -end - -def _reduce_532(val, _values, result) - result = @builder.multi_lhs(val[0], val[1], val[2]) - - result -end - -def _reduce_533(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_534(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_535(val, _values, result) - check_kwarg_name(val[0]) - - @static_env.declare val[0][0] - - result = val[0] - - result -end - -def _reduce_536(val, _values, result) - result = @builder.kwoptarg(val[0], val[1]) - - result -end - -def _reduce_537(val, _values, result) - result = @builder.kwarg(val[0]) - - result -end - -def _reduce_538(val, _values, result) - result = @builder.kwoptarg(val[0], val[1]) - - result -end - -def _reduce_539(val, _values, result) - result = @builder.kwarg(val[0]) - - result -end - -def _reduce_540(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_541(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_542(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_543(val, _values, result) - result = val[0] << val[2] - - result -end - -# reduce 544 omitted - -# reduce 545 omitted - -def _reduce_546(val, _values, result) - @static_env.declare val[1][0] - - result = [ @builder.kwrestarg(val[0], val[1]) ] - - result -end - -def _reduce_547(val, _values, result) - result = [ @builder.kwrestarg(val[0]) ] - - result -end - -def _reduce_548(val, _values, result) - result = @builder.optarg(val[0], val[1], val[2]) - - result -end - -def _reduce_549(val, _values, result) - result = @builder.optarg(val[0], val[1], val[2]) - - result -end - -def _reduce_550(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_551(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_552(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_553(val, _values, result) - result = val[0] << val[2] - - result -end - -# reduce 554 omitted - -# reduce 555 omitted - -def _reduce_556(val, _values, result) - @static_env.declare val[1][0] - - result = [ @builder.restarg(val[0], val[1]) ] - - result -end - -def _reduce_557(val, _values, result) - result = [ @builder.restarg(val[0]) ] - - result -end - -# reduce 558 omitted - -# reduce 559 omitted - -def _reduce_560(val, _values, result) - @static_env.declare val[1][0] - - result = @builder.blockarg(val[0], val[1]) - - result -end - -def _reduce_561(val, _values, result) - result = [ val[1] ] - - result -end - -def _reduce_562(val, _values, result) - result = [] - - result -end - -# reduce 563 omitted - -def _reduce_564(val, _values, result) - result = val[1] - - result -end - -def _reduce_565(val, _values, result) - result = [] - - result -end - -# reduce 566 omitted - -def _reduce_567(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_568(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_569(val, _values, result) - result = @builder.pair(val[0], val[1], val[2]) - - result -end - -def _reduce_570(val, _values, result) - result = @builder.pair_keyword(val[0], val[1]) - - result -end - -def _reduce_571(val, _values, result) - result = @builder.kwsplat(val[0], val[1]) - - result -end - -# reduce 572 omitted - -# reduce 573 omitted - -# reduce 574 omitted - -# reduce 575 omitted - -# reduce 576 omitted - -# reduce 577 omitted - -# reduce 578 omitted - -# reduce 579 omitted - -# reduce 580 omitted - -# reduce 581 omitted - -# reduce 582 omitted - -# reduce 583 omitted - -# reduce 584 omitted - -# reduce 585 omitted - -# reduce 586 omitted - -# reduce 587 omitted - -def _reduce_588(val, _values, result) - result = val[1] - - result -end - -def _reduce_589(val, _values, result) - result = val[1] - - result -end - -# reduce 590 omitted - -# reduce 591 omitted - -# reduce 592 omitted - -def _reduce_593(val, _values, result) - yyerrok - - result -end - -# reduce 594 omitted - -# reduce 595 omitted - -# reduce 596 omitted - -def _reduce_597(val, _values, result) - result = nil - - result -end - -def _reduce_none(val, _values, result) - val[0] -end - - end # class Ruby21 -end # module Parser diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ruby22.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ruby22.rb deleted file mode 100644 index 58e02a42..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ruby22.rb +++ /dev/null @@ -1,10302 +0,0 @@ -# -*- encoding:utf-8; warn-indent:false; frozen_string_literal: true -*- -# -# DO NOT MODIFY!!!! -# This file is automatically generated by Racc 1.7.3 -# from Racc grammar file "ruby22.y". -# - -require 'racc/parser.rb' - - -require 'parser' - -module Parser - class Ruby22 < Parser::Base - - - def version - 22 - end - - def default_encoding - Encoding::UTF_8 - end - - def local_push - @static_env.extend_static - @lexer.cmdarg.push(false) - @lexer.cond.push(false) - end - - def local_pop - @static_env.unextend - @lexer.cmdarg.pop - @lexer.cond.pop - end -##### State transition tables begin ### - -racc_action_table = [ - -479, 111, 270, 216, 217, -97, -98, -479, -479, -479, - 219, 538, -479, -479, -479, -286, -479, 270, 617, 580, - -83, 123, 216, 217, -479, 582, -479, -479, -479, -69, - 270, 786, 208, 544, -105, 559, -479, -479, 538, -479, - -479, -479, -479, -479, 538, 538, 216, 217, 538, -104, - -100, 220, -100, 616, -102, -286, 216, 217, 270, 550, - 216, 217, -493, 551, -102, 872, -479, -479, -479, -479, - -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, - 209, 265, -479, -479, -479, 579, -479, -479, 695, 269, - -479, 581, 262, -479, -479, -99, -479, 220, -479, 263, - -479, -494, -479, -479, 269, -479, -479, -479, -479, -479, - -99, -479, -482, -479, -88, -89, 220, 269, -97, -482, - -482, -482, 265, -101, -482, -482, -482, -479, -482, 115, - -479, -479, -479, -479, 114, -479, -482, -479, -482, -482, - -482, 558, -479, -96, 695, 269, -101, 695, -482, -482, - 220, -482, -482, -482, -482, -482, 115, -98, -95, -91, - -91, 114, 115, 115, 115, 823, 115, 114, 114, 114, - -100, 114, -102, -93, 871, -100, 445, -102, -482, -482, - -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, - -482, -482, 115, 210, -482, -482, -482, 114, -482, -482, - -577, -93, -482, 215, -90, -482, -482, -103, -482, 259, - -482, -577, -482, 318, -482, -482, -574, -482, -482, -482, - -482, -482, -289, -482, 319, -482, -91, -479, -99, -289, - -289, -289, -105, -99, -479, -289, -289, 528, -289, -482, - 527, -101, -482, -482, -482, -482, -101, -482, 115, -482, - -575, 115, 617, 114, -482, -92, 114, 528, -289, -289, - 530, -289, -289, -289, -289, -289, -91, -93, -479, -91, - 214, 220, -578, 216, 217, -479, -493, 387, -91, 672, - -574, 669, 668, 667, -479, 670, 400, 616, -289, -289, - -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, - -289, -289, -482, -574, -289, -289, -289, -93, 600, -482, - -93, 617, -289, -494, -575, -289, -94, -96, -482, -93, - -289, 567, -289, -88, -289, -289, -105, -289, -289, -289, - -289, -289, -97, -289, -581, -289, 528, -575, 516, 530, - 750, -581, -581, -581, 93, 94, 616, -581, -581, -289, - -581, -482, -289, -289, 617, -94, 444, -289, -482, -581, - -89, 890, -581, 751, -103, 528, 446, 115, 530, -98, - -581, -581, 114, -581, -581, -581, -581, -581, 672, 447, - 669, 668, 667, 219, 670, 569, 568, 567, 516, 616, - 567, 478, 93, 94, -104, 727, -100, 487, 567, 489, - -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, - -581, -581, -581, -581, -581, 491, -581, -581, -581, -102, - 601, -581, 95, 96, -581, 499, -577, -581, 841, -415, - -581, -581, -581, 115, -581, -95, -581, -581, 114, -581, - -581, -581, -581, -581, -104, -581, -581, -581, 567, -581, - -68, 569, 568, 565, 569, 568, 565, 567, 216, 217, - 987, -581, 569, 568, -581, -581, -581, -92, 632, -581, - 95, 96, 729, -581, -581, -581, -101, 220, -581, -581, - -581, -415, -581, -581, -99, 818, 786, 502, -415, -489, - -581, -581, -581, -581, -581, -577, -489, -415, 220, -581, - 503, 972, -581, -581, 510, -581, -581, -581, -581, -581, - 115, 595, 569, 568, 570, 114, -415, 567, -581, -488, - 567, 569, 568, 572, 567, 397, -488, 688, 687, 274, - 399, 398, -581, -581, -581, -581, -581, -581, -581, -581, - -581, -581, -581, -581, -581, -581, 115, 212, -581, -581, - -581, 114, 752, -581, 213, 240, -581, 596, -91, -581, - -581, 220, -581, 211, -581, 736, -581, -100, -581, -581, - 265, -581, -581, -581, -581, -581, 513, -581, -581, -581, - 517, 569, 568, 574, 569, 568, 578, 237, 569, 568, - 583, 239, 238, -581, 235, 236, -581, -581, -581, -581, - 240, -581, -289, -581, -93, 818, 786, 677, -101, -289, - -289, -289, -90, -102, -289, -289, -289, 680, -289, 240, - 672, -99, 669, 668, 667, 220, 670, 240, -289, -289, - -289, 531, 237, -333, 81, 532, 239, 238, -289, -289, - -333, -289, -289, -289, -289, -289, 82, -490, 491, -333, - 688, 687, 544, -487, -490, 681, 83, 807, -484, 237, - -487, 389, 115, 239, 238, -484, 810, 114, -289, -289, - -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, - -289, -289, 548, 677, -289, -289, -289, 441, 753, -289, - -491, 549, -289, 680, 442, -289, -289, -491, -289, 584, - -289, 587, -289, 443, -289, -289, -491, -289, -289, -289, - -289, -289, -261, -289, 672, -289, 669, 668, 667, 672, - 670, 669, 668, 667, 589, 670, 688, 687, 220, -289, - 593, 681, -289, -289, -289, -289, -492, -289, 594, -289, - 265, 604, 607, -492, -103, 5, 74, 75, 71, 9, - 57, 807, -492, 115, 63, 64, 807, 240, 114, 67, - 810, 65, 66, 68, 30, 31, 72, 73, 118, 119, - 120, 121, 122, 29, 28, 27, 103, 102, 104, 105, - 721, 722, 19, 240, 723, 109, 110, 605, 8, 45, - 7, 10, 107, 106, 108, 97, 56, 99, 98, 100, - 240, 101, 109, 110, 240, 93, 94, 42, 43, 41, - 240, 244, 249, 250, 251, 246, 248, 256, 257, 252, - 253, 508, 233, 234, -279, 115, 254, 255, 509, 40, - 114, -279, 33, 220, 220, 58, 59, 507, 220, 60, - -279, 35, 237, -83, 243, 44, 239, 238, 636, 235, - 236, 247, 245, 241, 20, 242, 220, 521, 647, 91, - 81, 84, 85, 518, 86, 88, 87, 89, 652, -485, - 519, -486, 82, 90, 262, 258, -485, -238, -486, 443, - 62, 263, 83, 95, 96, 292, 74, 75, 71, 9, - 57, 653, 655, 546, 63, 64, 691, 544, 698, 67, - 547, 65, 66, 68, 30, 31, 72, 73, 716, 545, - 726, 730, 731, 29, 28, 27, 103, 102, 104, 105, - -262, 737, 19, 478, 478, 220, 755, 590, 8, 45, - 294, 10, 107, 106, 108, 97, 56, 99, 98, 100, - 259, 101, 109, 110, 489, 93, 94, 42, 43, 41, - 240, 244, 249, 250, 251, 246, 248, 256, 257, 252, - 253, 554, 233, 234, -290, 491, 254, 255, 553, 40, - 779, -290, 296, 647, 220, 58, 59, 555, 265, 60, - -290, 35, 237, 265, 243, 44, 239, 238, 647, 235, - 236, 247, 245, 241, 20, 242, 240, 786, 220, 91, - 81, 84, 85, -290, 86, 88, 87, 89, 795, 798, - -290, 799, 82, 90, 801, 258, 803, 805, 813, -290, - 62, 814, 83, 95, 96, 5, 74, 75, 71, 9, - 57, 815, 786, 554, 63, 64, 822, 220, 220, 67, - 923, 65, 66, 68, 30, 31, 72, 73, 831, 555, - -263, 840, 843, 29, 28, 27, 103, 102, 104, 105, - 798, 846, 19, 848, 850, 852, 220, 605, 8, 45, - 7, 10, 107, 106, 108, 97, 56, 99, 98, 100, - 854, 101, 109, 110, 855, 93, 94, 42, 43, 41, - 240, 244, 249, 250, 251, 246, 248, 256, 257, 252, - 253, -289, 233, 234, 554, 858, 254, 255, -289, 40, - 860, 923, 33, -578, 861, 58, 59, -289, 647, 60, - 555, 35, 237, 863, 243, 44, 239, 238, -261, 235, - 236, 247, 245, 241, 20, 242, 867, 869, 220, 91, - 81, 84, 85, -491, 86, 88, 87, 89, 888, 220, - -491, 892, 82, 90, 894, 258, 900, 903, 220, -491, - 62, 907, 83, 95, 96, 292, 74, 75, 71, 9, - 57, -264, 917, -492, 63, 64, 924, 925, 936, 67, - -492, 65, 66, 68, 30, 31, 72, 73, 798, -492, - 938, 940, 942, 29, 28, 27, 103, 102, 104, 105, - 944, 920, 19, 669, 668, 667, 944, 670, 8, 45, - 294, 10, 107, 106, 108, 97, 56, 99, 98, 100, - 220, 101, 109, 110, 950, 93, 94, 42, 43, 41, - 240, 244, 249, 250, 251, 246, 248, 256, 257, 252, - 253, -289, 233, 234, 977, 953, 254, 255, -289, 40, - 954, 978, 33, -578, 959, 58, 59, -289, 716, 60, - 976, 35, 237, 798, 243, 44, 239, 238, 962, 235, - 236, 247, 245, 241, 20, 242, 964, 966, 968, 91, - 81, 84, 85, -279, 86, 88, 87, 89, 968, 979, - -279, 989, 82, 90, -578, 258, -577, 652, 1004, -279, - 62, 1005, 83, 95, 96, 292, 74, 75, 71, 9, - 57, 1006, 944, -290, 63, 64, 944, 944, 1011, 67, - -290, 65, 66, 68, 30, 31, 72, 73, 989, -290, - 1014, 1015, 1016, 29, 28, 27, 103, 102, 104, 105, - 968, 920, 19, 669, 668, 667, 968, 670, 8, 45, - 294, 10, 107, 106, 108, 97, 56, 99, 98, 100, - 968, 101, 109, 110, 220, 93, 94, 42, 43, 41, - 240, 244, 249, 250, 251, 246, 248, 256, 257, 252, - 253, -289, 233, 234, 989, 944, 254, 255, -289, 40, - 989, 968, 33, -578, nil, 58, 59, -289, nil, 60, - nil, 35, 237, nil, 243, 44, 239, 238, nil, 235, - 236, 247, 245, 241, 20, 242, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, 258, nil, nil, nil, nil, - 62, nil, 83, 95, 96, 292, 74, 75, 71, 9, - 57, nil, nil, nil, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 30, 31, 72, 73, 118, 119, - 120, 121, 122, 29, 28, 27, 103, 102, 104, 105, - nil, nil, 19, 118, 119, 120, 121, 122, 8, 45, - 294, 10, 107, 106, 108, 97, 56, 99, 98, 100, - nil, 101, 109, 110, nil, 93, 94, 42, 43, 41, - 240, 244, 249, 250, 251, 246, 248, 256, 257, 252, - 253, nil, 233, 234, nil, nil, 254, 255, nil, 40, - nil, nil, 296, nil, nil, 58, 59, nil, nil, 60, - nil, 35, 237, nil, 243, 44, 239, 238, nil, 235, - 236, 247, 245, 241, 20, 242, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, 258, nil, nil, nil, nil, - 62, nil, 83, 95, 96, 292, 74, 75, 71, 9, - 57, nil, nil, nil, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 30, 31, 72, 73, nil, nil, - nil, nil, nil, 29, 28, 27, 103, 102, 104, 105, - nil, nil, 19, nil, nil, nil, nil, nil, 8, 45, - 294, 10, 107, 106, 108, 97, 56, 99, 98, 100, - nil, 101, 109, 110, nil, 93, 94, 42, 43, 41, - 240, 244, 249, 250, 251, 246, 248, 256, 257, 252, - 253, nil, 233, 234, nil, nil, 254, 255, nil, 40, - nil, nil, 296, nil, nil, 58, 59, nil, nil, 60, - nil, 35, 237, nil, 243, 44, 239, 238, nil, 235, - 236, 247, 245, 241, 20, 242, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, 220, 258, nil, nil, nil, nil, - 62, nil, 83, 95, 96, 292, 74, 75, 71, 9, - 57, nil, nil, nil, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 30, 31, 72, 73, nil, nil, - nil, nil, nil, 29, 28, 27, 103, 102, 104, 105, - nil, nil, 19, nil, nil, nil, nil, nil, 8, 45, - 294, 10, 107, 106, 108, 97, 56, 99, 98, 100, - nil, 101, 109, 110, nil, 93, 94, 42, 43, 41, - 240, 244, 249, 250, 251, 246, 248, 256, 257, 252, - 253, nil, 233, 234, nil, nil, 254, 255, nil, 40, - nil, nil, 33, nil, nil, 58, 59, nil, nil, 60, - nil, 35, 237, nil, 243, 44, 239, 238, nil, 235, - 236, 247, 245, 241, 20, 242, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, 258, nil, nil, nil, nil, - 62, nil, 83, 95, 96, 5, 74, 75, 71, 9, - 57, nil, nil, nil, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 30, 31, 72, 73, nil, nil, - nil, nil, nil, 29, 28, 27, 103, 102, 104, 105, - nil, nil, 19, nil, nil, nil, nil, nil, 8, 45, - 7, 10, 107, 106, 108, 97, 56, 99, 98, 100, - nil, 101, 109, 110, nil, 93, 94, 42, 43, 41, - 240, 244, 249, 250, 251, 246, 248, 256, 257, 252, - 253, nil, 233, 234, nil, nil, 254, 255, nil, 40, - nil, nil, 33, nil, nil, 58, 59, nil, nil, 60, - nil, 35, 237, nil, 243, 44, 239, 238, nil, 235, - 236, 247, 245, 241, 20, 242, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, 258, nil, nil, nil, nil, - 62, nil, 83, 95, 96, 292, 74, 75, 71, 9, - 57, nil, nil, nil, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 30, 31, 72, 73, nil, nil, - nil, nil, nil, 29, 28, 27, 103, 102, 104, 105, - nil, nil, 19, nil, nil, nil, nil, nil, 8, 45, - 294, 10, 107, 106, 108, 97, 56, 99, 98, 100, - nil, 101, 109, 110, nil, 93, 94, 42, 43, 41, - 240, 244, 249, 250, 251, 246, 248, 256, 257, 252, - 253, nil, 233, 234, nil, nil, 254, 255, nil, 40, - nil, nil, 33, nil, nil, 58, 59, nil, nil, 60, - nil, 35, 237, nil, 243, 44, 239, 238, nil, 235, - 236, 247, 245, 241, 20, 242, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, 258, nil, nil, nil, nil, - 62, nil, 83, 95, 96, 292, 74, 75, 71, 9, - 57, nil, nil, nil, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 30, 31, 72, 73, nil, nil, - nil, nil, nil, 29, 28, 27, 103, 102, 104, 105, - nil, nil, 19, nil, nil, nil, nil, nil, 8, 45, - 294, 10, 107, 106, 108, 97, 56, 99, 98, 100, - nil, 101, 109, 110, nil, 93, 94, 42, 43, 41, - 240, 244, 249, 250, 251, 246, 248, 256, 257, 252, - 253, nil, 233, 234, nil, nil, 254, 255, nil, 40, - nil, nil, 33, nil, nil, 58, 59, nil, nil, 60, - nil, 35, 237, nil, 243, 44, 239, 238, nil, 235, - 236, 247, 245, 241, 20, 242, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, 258, nil, nil, nil, nil, - 62, nil, 83, 95, 96, 292, 74, 75, 71, 9, - 57, nil, nil, nil, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 30, 31, 72, 73, nil, nil, - nil, nil, nil, 29, 28, 27, 103, 102, 104, 105, - nil, nil, 19, nil, nil, nil, nil, nil, 8, 45, - 294, 10, 107, 106, 108, 97, 56, 99, 98, 100, - nil, 101, 109, 110, nil, 93, 94, 42, 43, 41, - 240, 244, 249, 250, 251, 246, 248, 256, 257, 252, - 253, nil, 233, 234, nil, nil, 254, 255, nil, 40, - nil, nil, 33, nil, nil, 58, 59, nil, nil, 60, - nil, 35, 237, nil, 243, 44, 239, 238, nil, 235, - 236, 247, 245, 241, 20, 242, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, 258, nil, nil, nil, nil, - 62, nil, 83, 95, 96, 292, 74, 75, 71, 9, - 57, nil, nil, nil, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 30, 31, 72, 73, nil, nil, - nil, nil, nil, 29, 28, 27, 103, 102, 104, 105, - nil, nil, 19, nil, nil, nil, nil, nil, 8, 45, - 294, 10, 107, 106, 108, 97, 56, 99, 98, 100, - nil, 101, 109, 110, nil, 93, 94, 42, 43, 41, - 240, 244, 249, 250, 251, 246, 248, 256, 257, 252, - 253, nil, 233, 234, nil, nil, 254, 255, nil, 40, - nil, nil, 33, nil, nil, 58, 59, nil, nil, 60, - nil, 35, 237, nil, 243, 44, 239, 238, nil, 235, - 236, 247, 245, 241, 20, 242, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, 258, nil, nil, nil, nil, - 62, nil, 83, 95, 96, 292, 74, 75, 71, 9, - 57, nil, nil, nil, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 30, 31, 72, 73, nil, nil, - nil, nil, nil, 29, 28, 27, 103, 102, 104, 105, - nil, nil, 19, nil, nil, nil, nil, nil, 8, 45, - 294, 10, 107, 106, 108, 97, 56, 99, 98, 100, - nil, 101, 109, 110, nil, 93, 94, 42, 43, 41, - 240, 244, 249, 250, 251, 246, 248, 256, 257, 252, - 253, nil, 233, 234, nil, nil, 254, 255, nil, 40, - nil, nil, 33, nil, nil, 58, 59, nil, nil, 60, - nil, 35, 237, nil, 243, 44, 239, 238, nil, 235, - 236, 247, 245, 241, 20, 242, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, 258, nil, nil, nil, nil, - 62, nil, 83, 95, 96, 292, 74, 75, 71, 9, - 57, nil, nil, nil, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 30, 31, 72, 73, nil, nil, - nil, nil, nil, 29, 28, 27, 103, 102, 104, 105, - nil, nil, 19, nil, nil, nil, nil, nil, 8, 45, - 294, 10, 107, 106, 108, 97, 56, 99, 98, 100, - nil, 101, 109, 110, nil, 93, 94, 42, 43, 41, - 240, 244, 249, 250, 251, 246, 248, 256, 257, 252, - 253, nil, 233, 234, nil, nil, 254, 255, nil, 40, - nil, nil, 33, nil, nil, 58, 59, nil, nil, 60, - nil, 35, 237, nil, 243, 44, 239, 238, nil, 235, - 236, 247, 245, 241, 20, 242, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, 258, nil, nil, nil, nil, - 62, nil, 83, 95, 96, 292, 74, 75, 71, 9, - 57, nil, nil, nil, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 30, 31, 72, 73, nil, nil, - nil, nil, nil, 29, 28, 27, 103, 102, 104, 105, - nil, nil, 19, nil, nil, nil, nil, nil, 8, 45, - 294, 10, 107, 106, 108, 97, 56, 99, 98, 100, - nil, 101, 109, 110, nil, 93, 94, 42, 43, 41, - 240, 244, 249, 250, 251, 246, 248, 256, 257, 252, - 253, nil, 233, 234, nil, nil, 254, 255, nil, 40, - nil, nil, 33, nil, nil, 58, 59, nil, nil, 60, - nil, 35, 237, nil, 243, 44, 239, 238, nil, 235, - 236, 247, 245, 241, 20, 242, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, 258, nil, nil, nil, nil, - 62, nil, 83, 95, 96, 292, 74, 75, 71, 9, - 57, nil, nil, nil, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 30, 31, 72, 73, nil, nil, - nil, nil, nil, 29, 28, 27, 103, 102, 104, 105, - nil, nil, 19, nil, nil, nil, nil, nil, 8, 45, - 294, 10, 107, 106, 108, 97, 56, 99, 98, 100, - nil, 101, 109, 110, nil, 93, 94, 42, 43, 41, - 240, 244, 249, 250, 251, 246, 248, 256, 257, 252, - 253, nil, 233, 234, nil, nil, 254, 255, nil, 40, - nil, nil, 33, nil, nil, 58, 59, nil, nil, 60, - nil, 35, 237, nil, 243, 44, 239, 238, nil, 235, - 236, 247, 245, 241, 20, 242, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, 258, nil, nil, nil, nil, - 62, nil, 83, 95, 96, 292, 74, 75, 71, 9, - 57, nil, nil, nil, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 30, 31, 72, 73, nil, nil, - nil, nil, nil, 29, 28, 27, 103, 102, 104, 105, - 240, 672, 19, 669, 668, 667, nil, 670, 8, 45, - 294, 10, 107, 106, 108, 97, 56, 99, 98, 100, - nil, 101, 109, 110, nil, 93, 94, 42, 43, 41, - nil, nil, 237, nil, nil, nil, 239, 238, 807, 235, - 236, nil, nil, nil, nil, nil, nil, 949, nil, 40, - nil, nil, 33, nil, nil, 58, 59, nil, nil, 60, - 672, 35, 669, 668, 667, 44, 670, nil, nil, nil, - nil, nil, nil, nil, 20, nil, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, nil, nil, 807, nil, nil, - 62, nil, 83, 95, 96, 292, 74, 75, 71, 9, - 57, nil, nil, nil, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 30, 31, 72, 73, nil, nil, - nil, nil, nil, 29, 28, 27, 103, 102, 104, 105, - nil, nil, 19, nil, nil, nil, nil, nil, 8, 45, - 294, 10, 107, 106, 108, 97, 56, 99, 98, 100, - nil, 101, 109, 110, nil, 93, 94, 42, 43, 41, - 240, 244, 249, 250, 251, 246, 248, 256, 257, 252, - 253, nil, -600, -600, nil, nil, 254, 255, nil, 40, - nil, nil, 33, nil, nil, 58, 59, nil, nil, 60, - nil, 35, 237, nil, 243, 44, 239, 238, nil, 235, - 236, 247, 245, 241, 20, 242, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, 672, nil, 669, 668, 667, - 62, 670, 83, 95, 96, 292, 74, 75, 71, 9, - 57, nil, nil, nil, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 30, 31, 72, 73, nil, nil, - nil, nil, 807, 29, 28, 27, 103, 102, 104, 105, - nil, nil, 19, nil, nil, nil, nil, nil, 8, 45, - 294, 10, 107, 106, 108, 97, 56, 99, 98, 100, - nil, 101, 109, 110, nil, 93, 94, 42, 43, 41, - 240, 244, 249, 250, 251, 246, 248, 256, 257, 252, - 253, nil, -600, -600, nil, nil, 254, 255, nil, 40, - nil, nil, 33, nil, nil, 58, 59, nil, nil, 60, - nil, 35, 237, nil, 243, 44, 239, 238, nil, 235, - 236, 247, 245, 241, 20, 242, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, 672, nil, 669, 668, 667, - 62, 670, 83, 95, 96, 292, 74, 75, 71, 9, - 57, nil, nil, nil, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 30, 31, 72, 73, nil, nil, - nil, nil, 807, 29, 28, 27, 103, 102, 104, 105, - nil, 672, 19, 669, 668, 667, nil, 670, 8, 45, - 294, 10, 107, 106, 108, 97, 56, 99, 98, 100, - nil, 101, 109, 110, nil, 93, 94, 42, 43, 41, - 240, -600, -600, -600, -600, 246, 248, nil, 807, -600, - -600, nil, nil, nil, nil, nil, 254, 255, nil, 40, - nil, nil, 33, nil, nil, 58, 59, nil, nil, 60, - nil, 35, 237, nil, 243, 44, 239, 238, nil, 235, - 236, 247, 245, 241, 20, 242, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, nil, nil, nil, nil, nil, - 62, nil, 83, 95, 96, 292, 74, 75, 71, 9, - 57, nil, nil, nil, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 30, 31, 72, 73, nil, nil, - nil, nil, nil, 29, 28, 27, 103, 102, 104, 105, - nil, nil, 19, nil, nil, nil, nil, nil, 8, 45, - 294, 10, 107, 106, 108, 97, 56, 99, 98, 100, - nil, 101, 109, 110, nil, 93, 94, 42, 43, 41, - 240, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 254, 255, nil, 40, - nil, nil, 33, nil, nil, 58, 59, nil, nil, 60, - nil, 35, 237, nil, 243, 44, 239, 238, nil, 235, - 236, nil, nil, 241, 20, 242, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, nil, nil, nil, nil, nil, - 62, nil, 83, 95, 96, 292, 74, 75, 71, 9, - 57, nil, nil, nil, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 30, 31, 72, 73, nil, nil, - nil, nil, nil, 29, 28, 27, 103, 102, 104, 105, - nil, nil, 19, nil, nil, nil, nil, nil, 8, 45, - 294, 10, 107, 106, 108, 97, 56, 99, 98, 100, - nil, 101, 109, 110, nil, 93, 94, 42, 43, 41, - 240, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 254, 255, nil, 40, - nil, nil, 33, nil, nil, 58, 59, nil, nil, 60, - nil, 35, 237, nil, 243, 44, 239, 238, nil, 235, - 236, nil, nil, 241, 20, 242, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, nil, nil, nil, nil, nil, - 62, nil, 83, 95, 96, 292, 74, 75, 71, 9, - 57, nil, nil, nil, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 30, 31, 72, 73, nil, nil, - nil, nil, nil, 29, 28, 27, 103, 102, 104, 105, - nil, nil, 19, nil, nil, nil, nil, nil, 8, 45, - 294, 10, 107, 106, 108, 97, 56, 99, 98, 100, - nil, 101, 109, 110, nil, 93, 94, 42, 43, 41, - 240, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 254, 255, nil, 40, - nil, nil, 33, nil, nil, 58, 59, nil, nil, 60, - nil, 35, 237, nil, 243, 44, 239, 238, nil, 235, - 236, nil, nil, 241, 20, 242, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, nil, nil, nil, nil, nil, - 62, nil, 83, 95, 96, 292, 74, 75, 71, 9, - 57, nil, nil, nil, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 30, 31, 72, 73, nil, nil, - nil, nil, nil, 29, 28, 27, 103, 102, 104, 105, - nil, nil, 19, nil, nil, nil, nil, nil, 8, 45, - 294, 10, 107, 106, 108, 97, 56, 99, 98, 100, - nil, 101, 109, 110, nil, 93, 94, 42, 43, 41, - 240, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 254, 255, nil, 40, - nil, nil, 33, nil, nil, 58, 59, nil, nil, 60, - nil, 35, 237, nil, 243, 44, 239, 238, nil, 235, - 236, nil, nil, 241, 20, 242, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, nil, nil, nil, nil, nil, - 62, nil, 83, 95, 96, 292, 74, 75, 71, 9, - 57, nil, nil, nil, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 30, 31, 72, 73, nil, nil, - nil, nil, nil, 29, 28, 27, 103, 102, 104, 105, - nil, nil, 19, nil, nil, nil, nil, nil, 8, 45, - 294, 10, 107, 106, 108, 97, 56, 99, 98, 100, - nil, 101, 109, 110, nil, 93, 94, 42, 43, 41, - 240, -600, -600, -600, -600, 246, 248, nil, nil, -600, - -600, nil, nil, nil, nil, nil, 254, 255, nil, 40, - nil, nil, 33, nil, nil, 58, 59, nil, nil, 60, - nil, 35, 237, nil, 243, 44, 239, 238, nil, 235, - 236, 247, 245, 241, 20, 242, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, nil, nil, nil, nil, nil, - 62, nil, 83, 95, 96, 292, 74, 75, 71, 9, - 57, nil, nil, nil, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 30, 31, 72, 73, nil, nil, - nil, nil, nil, 29, 28, 27, 103, 102, 104, 105, - nil, nil, 19, nil, nil, nil, nil, nil, 8, 45, - 294, 10, 107, 106, 108, 97, 56, 99, 98, 100, - nil, 101, 109, 110, nil, 93, 94, 42, 43, 41, - 240, -600, -600, -600, -600, 246, 248, nil, nil, -600, - -600, nil, nil, nil, nil, nil, 254, 255, nil, 40, - nil, nil, 33, nil, nil, 58, 59, nil, nil, 60, - nil, 35, 237, nil, 243, 44, 239, 238, nil, 235, - 236, 247, 245, 241, 20, 242, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, nil, nil, nil, nil, nil, - 62, nil, 83, 95, 96, 292, 74, 75, 71, 9, - 57, nil, nil, nil, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 30, 31, 72, 73, nil, nil, - nil, nil, nil, 29, 28, 27, 103, 102, 104, 105, - nil, nil, 19, nil, nil, nil, nil, nil, 8, 45, - 294, 10, 107, 106, 108, 97, 56, 99, 98, 100, - nil, 101, 109, 110, nil, 93, 94, 42, 43, 41, - 240, -600, -600, -600, -600, 246, 248, nil, nil, -600, - -600, nil, nil, nil, nil, nil, 254, 255, nil, 40, - nil, nil, 33, nil, nil, 58, 59, nil, nil, 60, - nil, 35, 237, nil, 243, 44, 239, 238, nil, 235, - 236, 247, 245, 241, 20, 242, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, nil, nil, nil, nil, nil, - 62, nil, 83, 95, 96, 292, 74, 75, 71, 9, - 57, nil, nil, nil, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 30, 31, 72, 73, nil, nil, - nil, nil, nil, 29, 28, 27, 103, 102, 104, 105, - nil, nil, 19, nil, nil, nil, nil, nil, 8, 45, - 294, 10, 107, 106, 108, 97, 56, 99, 98, 100, - nil, 101, 109, 110, nil, 93, 94, 42, 43, 41, - 240, -600, -600, -600, -600, 246, 248, nil, nil, -600, - -600, nil, nil, nil, nil, nil, 254, 255, nil, 40, - nil, nil, 33, nil, nil, 58, 59, nil, nil, 60, - nil, 35, 237, nil, 243, 44, 239, 238, nil, 235, - 236, 247, 245, 241, 20, 242, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, nil, nil, nil, nil, nil, - 62, nil, 83, 95, 96, 292, 74, 75, 71, 9, - 57, nil, nil, nil, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 30, 31, 72, 73, nil, nil, - nil, nil, nil, 29, 28, 27, 103, 102, 104, 105, - nil, nil, 19, nil, nil, nil, nil, nil, 8, 45, - 294, 10, 107, 106, 108, 97, 56, 99, 98, 100, - nil, 101, 109, 110, nil, 93, 94, 42, 43, 41, - 240, -600, -600, -600, -600, 246, 248, nil, nil, -600, - -600, nil, nil, nil, nil, nil, 254, 255, nil, 40, - nil, nil, 33, nil, nil, 58, 59, nil, nil, 60, - nil, 35, 237, nil, 243, 44, 239, 238, nil, 235, - 236, 247, 245, 241, 20, 242, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, nil, nil, nil, nil, nil, - 62, nil, 83, 95, 96, 292, 74, 75, 71, 9, - 57, nil, nil, nil, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 30, 31, 72, 73, nil, nil, - nil, nil, nil, 29, 28, 27, 103, 102, 104, 105, - nil, nil, 19, nil, nil, nil, nil, nil, 8, 45, - 294, 10, 107, 106, 108, 97, 56, 99, 98, 100, - nil, 101, 109, 110, nil, 93, 94, 42, 43, 41, - 240, 244, 249, 250, 251, 246, 248, nil, nil, 252, - 253, nil, nil, nil, nil, nil, 254, 255, nil, 40, - nil, nil, 33, nil, nil, 58, 59, nil, nil, 60, - nil, 35, 237, nil, 243, 44, 239, 238, nil, 235, - 236, 247, 245, 241, 20, 242, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, nil, nil, nil, nil, nil, - 62, nil, 83, 95, 96, 74, 75, 71, 9, 57, - nil, nil, nil, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 30, 31, 72, 73, nil, nil, nil, - nil, nil, 29, 28, 27, 103, 102, 104, 105, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 45, 7, - 10, 107, 106, 108, 97, 56, 99, 98, 100, nil, - 101, 109, 110, nil, 93, 94, 42, 43, 41, 240, - 244, 249, 250, 251, 246, 248, 256, nil, 252, 253, - nil, nil, nil, nil, nil, 254, 255, nil, 40, nil, - nil, 33, nil, nil, 58, 59, nil, nil, 60, nil, - 35, 237, nil, 243, 44, 239, 238, nil, 235, 236, - 247, 245, 241, 20, 242, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, 74, 75, 71, 62, - 57, 83, 95, 96, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 30, 31, 72, 73, nil, nil, - nil, nil, nil, 29, 28, 27, 103, 102, 104, 105, - nil, nil, 232, nil, nil, nil, nil, nil, nil, 45, - nil, nil, 107, 106, 108, 97, 56, 99, 98, 100, - nil, 101, 109, 110, nil, 93, 94, 42, 43, 41, - 240, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 254, 255, nil, 225, - nil, nil, 231, nil, nil, 58, 59, nil, nil, 60, - nil, nil, 237, nil, 243, 44, 239, 238, nil, 235, - 236, nil, nil, nil, 230, nil, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, nil, nil, 74, 75, 71, - 62, 57, 83, 95, 96, 63, 64, nil, nil, nil, - 67, nil, 65, 66, 68, 30, 31, 72, 73, nil, - nil, nil, nil, nil, 29, 28, 27, 103, 102, 104, - 105, nil, nil, 232, nil, nil, nil, nil, nil, nil, - 45, nil, nil, 107, 106, 108, 97, 56, 99, 98, - 100, 286, 101, 109, 110, nil, 93, 94, 42, 43, - 41, 240, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 254, 255, nil, - 225, nil, nil, 231, nil, nil, 58, 59, nil, nil, - 60, nil, 283, 237, 281, 243, 44, 239, 238, 287, - 235, 236, nil, nil, nil, 230, nil, nil, nil, nil, - 91, 284, 84, 85, nil, 86, 88, 87, 89, nil, - nil, nil, nil, 82, 90, nil, nil, nil, 74, 75, - 71, 62, 57, 83, 95, 96, 63, 64, nil, nil, - nil, 67, nil, 65, 66, 68, 30, 31, 72, 73, - nil, nil, nil, nil, nil, 29, 28, 27, 103, 102, - 104, 105, nil, nil, 232, nil, nil, nil, nil, nil, - nil, 45, nil, nil, 107, 106, 108, 97, 56, 99, - 98, 100, 286, 101, 109, 110, nil, 93, 94, 42, - 43, 41, 240, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 254, 255, - nil, 225, nil, nil, 231, nil, nil, 58, 59, nil, - nil, 60, nil, 283, 237, 281, nil, 44, 239, 238, - 287, 235, 236, nil, nil, nil, 230, nil, nil, nil, - nil, 91, 284, 84, 85, nil, 86, 88, 87, 89, - nil, nil, nil, nil, 82, 90, nil, nil, nil, 74, - 75, 71, 62, 57, 83, 95, 96, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 232, nil, nil, nil, nil, - nil, nil, 45, nil, nil, 107, 106, 108, 97, 56, - 99, 98, 100, 286, 101, 109, 110, nil, 93, 94, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 225, nil, nil, 231, nil, nil, 58, 59, - nil, nil, 60, nil, 283, nil, 281, nil, 44, nil, - nil, 287, nil, nil, nil, nil, nil, 230, nil, nil, - nil, nil, 91, 284, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - 74, 75, 71, 62, 57, 83, 95, 96, 63, 64, - nil, nil, nil, 67, nil, 65, 66, 68, 311, 312, - 72, 73, nil, nil, nil, nil, nil, 307, 308, 314, - 103, 102, 104, 105, nil, nil, 232, nil, nil, nil, - nil, nil, nil, 309, nil, nil, 107, 106, 108, 97, - 56, 99, 98, 100, nil, 101, 109, 110, nil, 93, - 94, nil, nil, 315, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 305, nil, nil, 301, nil, nil, 58, - 59, nil, nil, 60, nil, 300, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 91, 81, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, nil, nil, - nil, 74, 75, 71, 62, 57, 83, 95, 96, 63, - 64, nil, nil, nil, 67, nil, 65, 66, 68, 311, - 312, 72, 73, nil, nil, nil, nil, nil, 307, 308, - 314, 103, 102, 104, 105, nil, nil, 232, nil, nil, - nil, nil, nil, nil, 309, nil, nil, 107, 106, 108, - 97, 56, 99, 98, 100, nil, 101, 109, 110, nil, - 93, 94, nil, nil, 315, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 305, nil, nil, 231, nil, nil, - 58, 59, nil, nil, 60, nil, nil, 672, nil, 669, - 668, 667, 677, 670, nil, nil, nil, nil, nil, nil, - nil, nil, 680, nil, 91, 81, 84, 85, nil, 86, - 88, 87, 89, nil, nil, nil, nil, 82, 90, nil, - nil, nil, 317, nil, 675, 62, nil, 83, 95, 96, - 74, 75, 71, nil, 57, 688, 687, nil, 63, 64, - 681, nil, nil, 67, nil, 65, 66, 68, 311, 312, - 72, 73, nil, nil, nil, nil, nil, 307, 308, 314, - 103, 102, 104, 105, nil, nil, 232, nil, nil, nil, - nil, nil, nil, 45, nil, nil, 107, 106, 108, 97, - 56, 99, 98, 100, nil, 101, 109, 110, nil, 93, - 94, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 225, nil, nil, 231, nil, nil, 58, - 59, nil, nil, 60, nil, nil, nil, nil, nil, 44, - nil, nil, nil, nil, nil, nil, nil, nil, 230, nil, - nil, nil, nil, 91, 81, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, nil, nil, - nil, 74, 75, 71, 62, 57, 83, 95, 96, 63, - 64, nil, nil, nil, 67, nil, 65, 66, 68, 311, - 312, 72, 73, nil, nil, nil, nil, nil, 307, 308, - 314, 103, 102, 104, 105, nil, nil, 232, nil, nil, - nil, nil, nil, nil, 45, nil, nil, 107, 106, 108, - 97, 56, 99, 98, 100, nil, 101, 109, 110, nil, - 93, 94, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 225, nil, nil, 231, nil, nil, - 58, 59, nil, nil, 60, nil, nil, nil, nil, nil, - 44, nil, nil, nil, nil, nil, nil, nil, nil, 230, - nil, nil, nil, nil, 91, 81, 84, 85, nil, 86, - 88, 87, 89, nil, nil, nil, nil, 82, 90, nil, - nil, nil, 74, 75, 71, 62, 57, 83, 95, 96, - 63, 64, nil, nil, nil, 67, nil, 65, 66, 68, - 311, 312, 72, 73, nil, nil, nil, nil, nil, 307, - 308, 314, 103, 102, 104, 105, nil, nil, 232, nil, - nil, nil, nil, nil, nil, 45, nil, nil, 107, 106, - 108, 97, 56, 99, 98, 100, nil, 101, 109, 110, - nil, 93, 94, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 225, nil, nil, 231, nil, - nil, 58, 59, nil, nil, 60, nil, nil, nil, nil, - nil, 44, nil, nil, nil, nil, nil, nil, nil, nil, - 230, nil, nil, nil, nil, 91, 81, 84, 85, nil, - 86, 88, 87, 89, nil, nil, nil, nil, 82, 90, - nil, nil, nil, 74, 75, 71, 62, 57, 83, 95, - 96, 63, 64, nil, nil, nil, 67, nil, 65, 66, - 68, 311, 312, 72, 73, nil, nil, nil, nil, nil, - 307, 308, 314, 103, 102, 104, 105, nil, nil, 232, - nil, nil, nil, nil, nil, nil, 45, nil, nil, 107, - 106, 108, 97, 56, 99, 98, 100, 286, 101, 109, - 110, nil, 93, 94, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 225, nil, nil, 231, - nil, nil, 58, 59, nil, nil, 60, nil, 283, nil, - nil, nil, 44, nil, nil, 287, nil, nil, nil, nil, - nil, 230, nil, nil, nil, nil, 91, 284, 84, 85, - nil, 86, 88, 87, 89, nil, nil, nil, nil, 82, - 90, nil, nil, nil, 74, 75, 71, 62, 57, 83, - 95, 96, 63, 64, nil, nil, nil, 67, nil, 65, - 66, 68, 311, 312, 72, 73, nil, nil, nil, nil, - nil, 307, 308, 314, 103, 102, 104, 105, nil, nil, - 232, nil, nil, nil, nil, nil, nil, 45, nil, nil, - 107, 106, 108, 97, 56, 99, 98, 100, 286, 101, - 109, 110, nil, 93, 94, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 225, nil, nil, - 231, nil, nil, 58, 59, nil, nil, 60, nil, nil, - nil, nil, nil, 44, nil, nil, 287, nil, nil, nil, - nil, nil, 230, nil, nil, nil, nil, 91, 284, 84, - 85, nil, 86, 88, 87, 89, nil, nil, nil, nil, - 82, 90, nil, nil, nil, 74, 75, 71, 62, 57, - 83, 95, 96, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 30, 31, 72, 73, nil, nil, nil, - nil, nil, 29, 28, 27, 103, 102, 104, 105, nil, - nil, 19, nil, nil, nil, nil, nil, nil, 45, nil, - nil, 107, 106, 108, 97, 56, 99, 98, 100, nil, - 101, 109, 110, nil, 93, 94, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 225, nil, - nil, 231, nil, nil, 58, 59, nil, nil, 60, nil, - nil, nil, nil, nil, 44, nil, nil, nil, nil, nil, - nil, nil, nil, 20, nil, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, 74, 75, 71, 62, - 57, 83, 95, 96, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 30, 31, 72, 73, nil, nil, - nil, nil, nil, 29, 28, 27, 103, 102, 104, 105, - nil, nil, 19, nil, nil, nil, nil, nil, nil, 45, - nil, nil, 107, 106, 108, 97, 56, 99, 98, 100, - nil, 101, 109, 110, nil, 93, 94, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 225, - nil, nil, 231, nil, nil, 58, 59, nil, nil, 60, - nil, nil, nil, nil, nil, 44, nil, nil, nil, nil, - nil, nil, nil, nil, 20, nil, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, nil, nil, 74, 75, 71, - 62, 57, 83, 95, 96, 63, 64, nil, nil, nil, - 67, nil, 65, 66, 68, 30, 31, 72, 73, nil, - nil, nil, nil, nil, 29, 28, 27, 103, 102, 104, - 105, nil, nil, 19, nil, nil, nil, nil, nil, nil, - 45, nil, nil, 107, 106, 108, 97, 56, 99, 98, - 100, nil, 101, 109, 110, nil, 93, 94, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 225, nil, nil, 231, nil, nil, 58, 59, nil, nil, - 60, nil, nil, nil, nil, nil, 44, nil, nil, nil, - nil, nil, nil, nil, nil, 20, nil, nil, nil, nil, - 91, 81, 84, 85, nil, 86, 88, 87, 89, nil, - nil, nil, nil, 82, 90, 115, nil, nil, nil, nil, - 114, 62, nil, 83, 95, 96, 74, 75, 71, nil, - 57, nil, nil, nil, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 311, 312, 72, 73, nil, nil, - nil, nil, nil, 307, 308, 314, 103, 102, 104, 105, - nil, nil, 232, nil, nil, nil, nil, nil, nil, 309, - nil, nil, 107, 106, 108, 97, 56, 99, 98, 100, - nil, 101, 109, 110, nil, 93, 94, nil, nil, 315, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 349, - nil, nil, 33, nil, nil, 58, 59, nil, nil, 60, - nil, 35, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, nil, nil, 74, 75, 71, - 62, 57, 83, 95, 96, 63, 64, nil, nil, nil, - 67, nil, 65, 66, 68, 311, 312, 72, 73, nil, - nil, nil, nil, nil, 307, 308, 314, 103, 102, 104, - 105, nil, nil, 232, nil, nil, nil, nil, nil, nil, - 309, nil, nil, 107, 106, 108, 354, 56, 99, 98, - 355, nil, 101, 109, 110, nil, 93, 94, nil, nil, - 315, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 361, nil, nil, - 356, nil, nil, 231, nil, nil, 58, 59, nil, nil, - 60, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 91, 81, 84, 85, nil, 86, 88, 87, 89, nil, - nil, nil, nil, 82, 90, nil, nil, nil, 74, 75, - 71, 62, 57, 83, 95, 96, 63, 64, nil, nil, - nil, 67, nil, 65, 66, 68, 311, 312, 72, 73, - nil, nil, nil, nil, nil, 307, 308, 314, 103, 102, - 104, 105, nil, nil, 232, nil, nil, nil, nil, nil, - nil, 309, nil, nil, 107, 106, 108, 354, 56, 99, - 98, 355, nil, 101, 109, 110, nil, 93, 94, nil, - nil, 315, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 356, nil, nil, 231, nil, nil, 58, 59, nil, - nil, 60, nil, nil, 672, nil, 669, 668, 667, 677, - 670, nil, nil, nil, nil, nil, nil, nil, nil, 680, - nil, 91, 81, 84, 85, nil, 86, 88, 87, 89, - nil, nil, nil, nil, 82, 90, nil, nil, nil, nil, - nil, 675, 62, nil, 83, 95, 96, 74, 75, 71, - 9, 57, 688, 687, nil, 63, 64, 681, nil, nil, - 67, nil, 65, 66, 68, 30, 31, 72, 73, nil, - nil, nil, nil, nil, 29, 28, 27, 103, 102, 104, - 105, nil, nil, 19, nil, nil, nil, nil, nil, 8, - 45, 7, 10, 107, 106, 108, 97, 56, 99, 98, - 100, nil, 101, 109, 110, nil, 93, 94, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 40, nil, nil, 33, nil, nil, 58, 59, nil, nil, - 60, nil, 35, nil, nil, nil, 44, nil, nil, nil, - nil, nil, nil, nil, nil, 20, nil, nil, nil, nil, - 91, 81, 84, 85, nil, 86, 88, 87, 89, nil, - nil, nil, nil, 82, 90, nil, nil, nil, nil, nil, - 389, 62, nil, 83, 95, 96, 74, 75, 71, nil, - 57, nil, nil, nil, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 30, 31, 72, 73, nil, nil, - nil, nil, nil, 29, 28, 27, 103, 102, 104, 105, - nil, nil, 19, nil, nil, nil, nil, nil, nil, 45, - nil, nil, 107, 106, 108, 97, 56, 99, 98, 100, - nil, 101, 109, 110, nil, 93, 94, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 225, - nil, nil, 231, nil, nil, 58, 59, nil, nil, 60, - nil, nil, nil, nil, nil, 44, nil, nil, nil, nil, - nil, nil, nil, nil, 20, nil, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, nil, nil, 74, 75, 71, - 62, 57, 83, 95, 96, 63, 64, nil, nil, nil, - 67, nil, 65, 66, 68, 30, 31, 72, 73, nil, - nil, nil, nil, nil, 29, 28, 27, 103, 102, 104, - 105, nil, nil, 19, nil, nil, nil, nil, nil, nil, - 45, nil, nil, 107, 106, 108, 97, 56, 99, 98, - 100, nil, 101, 109, 110, nil, 93, 94, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 225, nil, nil, 231, nil, nil, 58, 59, nil, nil, - 60, nil, nil, nil, nil, nil, 44, nil, nil, nil, - nil, nil, nil, nil, nil, 20, nil, nil, nil, nil, - 91, 81, 84, 85, nil, 86, 88, 87, 89, nil, - nil, nil, nil, 82, 90, nil, nil, nil, 74, 75, - 71, 62, 57, 83, 95, 96, 63, 64, nil, nil, - nil, 67, nil, 65, 66, 68, 30, 31, 72, 73, - nil, nil, nil, nil, nil, 29, 28, 27, 103, 102, - 104, 105, nil, nil, 19, nil, nil, nil, nil, nil, - nil, 45, nil, nil, 107, 106, 108, 97, 56, 99, - 98, 100, nil, 101, 109, 110, nil, 93, 94, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 225, nil, nil, 231, nil, nil, 58, 59, nil, - nil, 60, nil, nil, nil, nil, nil, 44, nil, nil, - nil, nil, nil, nil, nil, nil, 20, nil, nil, nil, - nil, 91, 81, 84, 85, nil, 86, 88, 87, 89, - nil, nil, nil, nil, 82, 90, nil, nil, nil, 74, - 75, 71, 62, 57, 83, 95, 96, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 19, nil, nil, nil, nil, - nil, nil, 45, nil, nil, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 225, nil, nil, 231, nil, nil, 58, 59, - nil, nil, 60, nil, nil, nil, nil, nil, 44, nil, - nil, nil, nil, nil, nil, nil, nil, 20, nil, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - nil, nil, nil, 62, nil, 83, 95, 96, 74, 75, - 71, 9, 57, nil, nil, nil, 63, 64, nil, nil, - nil, 67, nil, 65, 66, 68, 30, 31, 72, 73, - nil, nil, nil, nil, nil, 29, 28, 27, 103, 102, - 104, 105, nil, nil, 19, nil, nil, nil, nil, nil, - 8, 45, nil, 10, 107, 106, 108, 97, 56, 99, - 98, 100, nil, 101, 109, 110, nil, 93, 94, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 40, nil, nil, 33, nil, nil, 58, 59, nil, - nil, 60, nil, 35, nil, nil, nil, 44, nil, nil, - nil, nil, nil, nil, nil, nil, 20, nil, nil, nil, - nil, 91, 81, 84, 85, nil, 86, 88, 87, 89, - nil, nil, nil, nil, 82, 90, nil, nil, nil, 74, - 75, 71, 62, 57, 83, 95, 96, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 232, nil, nil, nil, nil, - nil, nil, 45, nil, nil, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 225, nil, nil, 231, nil, nil, 58, 59, - nil, nil, 60, nil, 405, nil, nil, nil, 44, nil, - nil, nil, nil, nil, nil, nil, nil, 230, nil, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - 74, 75, 71, 62, 57, 83, 95, 96, 63, 64, - nil, nil, nil, 67, nil, 65, 66, 68, 30, 31, - 72, 73, nil, nil, nil, nil, nil, 29, 28, 27, - 103, 102, 104, 105, nil, nil, 232, nil, nil, nil, - nil, nil, nil, 45, nil, nil, 107, 106, 108, 97, - 56, 99, 98, 100, nil, 101, 109, 110, nil, 93, - 94, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 225, nil, nil, 231, nil, nil, 58, - 59, nil, nil, 60, nil, nil, nil, nil, nil, 44, - nil, nil, nil, nil, nil, nil, nil, nil, 230, nil, - nil, nil, nil, 91, 81, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, nil, nil, - nil, 74, 75, 71, 62, 57, 83, 95, 96, 63, - 64, nil, nil, nil, 67, nil, 65, 66, 68, 30, - 31, 72, 73, nil, nil, nil, nil, nil, 29, 28, - 27, 103, 102, 104, 105, nil, nil, 232, nil, nil, - nil, nil, nil, nil, 45, nil, nil, 107, 106, 108, - 97, 56, 99, 98, 100, 286, 101, 109, 110, nil, - 93, 94, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 225, nil, nil, 231, nil, nil, - 58, 59, nil, nil, 60, nil, 283, nil, 281, nil, - 44, nil, nil, 287, nil, nil, nil, nil, nil, 230, - nil, nil, nil, nil, 91, 284, 84, 85, nil, 86, - 88, 87, 89, nil, nil, nil, nil, 82, 90, nil, - nil, nil, 74, 75, 71, 62, 57, 83, 95, 96, - 63, 64, nil, nil, nil, 67, nil, 65, 66, 68, - 30, 31, 72, 73, nil, nil, nil, nil, nil, 29, - 28, 27, 103, 102, 104, 105, nil, nil, 232, nil, - nil, nil, nil, nil, nil, 45, nil, nil, 107, 106, - 108, 97, 56, 99, 98, 100, nil, 101, 109, 110, - nil, 93, 94, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 225, nil, nil, 231, nil, - nil, 58, 59, nil, nil, 60, nil, nil, nil, nil, - nil, 44, nil, nil, nil, nil, nil, nil, nil, nil, - 230, nil, nil, nil, nil, 91, 81, 84, 85, nil, - 86, 88, 87, 89, nil, nil, nil, nil, 82, 90, - nil, nil, nil, 74, 75, 71, 62, 57, 83, 95, - 96, 63, 64, nil, nil, nil, 67, nil, 65, 66, - 68, 30, 31, 72, 73, nil, nil, nil, nil, nil, - 29, 28, 27, 103, 102, 104, 105, nil, nil, 232, - nil, nil, nil, nil, nil, nil, 45, nil, nil, 107, - 106, 108, 97, 56, 99, 98, 100, nil, 101, 109, - 110, nil, 93, 94, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 225, nil, nil, 231, - nil, nil, 58, 59, nil, nil, 60, nil, 405, nil, - nil, nil, 44, nil, nil, nil, nil, nil, nil, nil, - nil, 230, nil, nil, nil, nil, 91, 81, 84, 85, - nil, 86, 88, 87, 89, nil, nil, nil, nil, 82, - 90, nil, nil, nil, 74, 75, 71, 62, 57, 83, - 95, 96, 63, 64, nil, nil, nil, 67, nil, 65, - 66, 68, 30, 31, 72, 73, nil, nil, nil, nil, - nil, 29, 28, 27, 103, 102, 104, 105, nil, nil, - 19, nil, nil, nil, nil, nil, nil, 45, nil, nil, - 107, 106, 108, 97, 56, 99, 98, 100, nil, 101, - 109, 110, nil, 93, 94, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 225, nil, nil, - 231, nil, nil, 58, 59, nil, nil, 60, nil, nil, - nil, nil, nil, 44, nil, nil, nil, nil, nil, nil, - nil, nil, 20, nil, nil, nil, nil, 91, 81, 84, - 85, nil, 86, 88, 87, 89, nil, nil, nil, nil, - 82, 90, nil, nil, nil, 74, 75, 71, 62, 57, - 83, 95, 96, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 30, 31, 72, 73, nil, nil, nil, - nil, nil, 29, 28, 27, 103, 102, 104, 105, nil, - nil, 19, nil, nil, nil, nil, nil, nil, 45, nil, - nil, 107, 106, 108, 97, 56, 99, 98, 100, nil, - 101, 109, 110, nil, 93, 94, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 225, nil, - nil, 231, nil, nil, 58, 59, nil, nil, 60, nil, - nil, nil, nil, nil, 44, nil, nil, nil, nil, nil, - nil, nil, nil, 20, nil, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, 74, 75, 71, 62, - 57, 83, 95, 96, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 30, 31, 72, 73, nil, nil, - nil, nil, nil, 29, 28, 27, 103, 102, 104, 105, - nil, nil, 19, nil, nil, nil, nil, nil, nil, 45, - nil, nil, 107, 106, 108, 97, 56, 99, 98, 100, - nil, 101, 109, 110, nil, 93, 94, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 225, - nil, nil, 231, nil, nil, 58, 59, nil, nil, 60, - nil, nil, nil, nil, nil, 44, nil, nil, nil, nil, - nil, nil, nil, nil, 20, nil, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, nil, nil, 74, 75, 71, - 62, 57, 83, 95, 96, 63, 64, nil, nil, nil, - 67, nil, 65, 66, 68, 30, 31, 72, 73, nil, - nil, nil, nil, nil, 29, 28, 27, 103, 102, 104, - 105, nil, nil, 19, nil, nil, nil, nil, nil, nil, - 45, nil, nil, 107, 106, 108, 97, 56, 99, 98, - 100, nil, 101, 109, 110, nil, 93, 94, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 225, nil, nil, 231, nil, nil, 58, 59, nil, nil, - 60, nil, nil, nil, nil, nil, 44, nil, nil, nil, - nil, nil, nil, nil, nil, 20, nil, nil, nil, nil, - 91, 81, 84, 85, nil, 86, 88, 87, 89, nil, - nil, nil, nil, 82, 90, 220, nil, nil, 74, 75, - 71, 62, 57, 83, 95, 96, 63, 64, nil, nil, - nil, 67, nil, 65, 66, 68, 311, 312, 72, 73, - nil, nil, nil, nil, nil, 307, 308, 314, 103, 102, - 104, 105, nil, nil, 232, nil, nil, nil, nil, nil, - nil, 45, nil, nil, 107, 106, 108, 97, 56, 99, - 98, 100, nil, 101, 109, 110, nil, 93, 94, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 225, nil, nil, 231, nil, nil, 58, 59, nil, - nil, 60, nil, nil, nil, nil, nil, 44, nil, nil, - nil, nil, nil, nil, nil, nil, 230, nil, nil, nil, - nil, 91, 81, 84, 85, nil, 86, 88, 87, 89, - nil, nil, nil, nil, 82, 90, nil, nil, nil, 74, - 75, 71, 62, 57, 83, 95, 96, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 311, 312, 72, - 73, nil, nil, nil, nil, nil, 307, 308, 314, 103, - 102, 104, 105, nil, nil, 232, nil, nil, nil, nil, - nil, nil, 45, nil, nil, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 225, nil, nil, 231, nil, nil, 58, 59, - nil, nil, 60, nil, nil, nil, nil, nil, 44, nil, - nil, nil, nil, nil, nil, nil, nil, 230, nil, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - 74, 75, 71, 62, 57, 83, 95, 96, 63, 64, - nil, nil, nil, 67, nil, 65, 66, 68, 311, 312, - 72, 73, nil, nil, nil, nil, nil, 307, 308, 314, - 103, 102, 104, 105, nil, nil, 232, nil, nil, nil, - nil, nil, nil, 45, nil, nil, 107, 106, 108, 97, - 56, 99, 98, 100, nil, 101, 109, 110, nil, 93, - 94, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 225, nil, nil, 231, nil, nil, 58, - 59, nil, nil, 60, nil, nil, nil, nil, nil, 44, - nil, nil, nil, nil, nil, nil, nil, nil, 230, nil, - nil, nil, nil, 91, 81, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, nil, nil, - nil, 74, 75, 71, 62, 57, 83, 95, 96, 63, - 64, nil, nil, nil, 67, nil, 65, 66, 68, 311, - 312, 72, 73, nil, nil, nil, nil, nil, 307, 308, - 314, 103, 102, 104, 105, nil, nil, 232, nil, nil, - nil, nil, nil, nil, 45, nil, nil, 107, 106, 108, - 97, 56, 99, 98, 100, nil, 101, 109, 110, nil, - 93, 94, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 225, nil, nil, 231, nil, nil, - 58, 59, nil, nil, 60, nil, nil, nil, nil, nil, - 44, nil, nil, nil, nil, nil, nil, nil, nil, 230, - nil, nil, nil, nil, 91, 81, 84, 85, nil, 86, - 88, 87, 89, nil, nil, nil, nil, 82, 90, nil, - nil, nil, 74, 75, 71, 62, 57, 83, 95, 96, - 63, 64, nil, nil, nil, 67, nil, 65, 66, 68, - 311, 312, 72, 73, nil, nil, nil, nil, nil, 307, - 308, 314, 103, 102, 104, 105, nil, nil, 232, nil, - nil, nil, nil, nil, nil, 45, nil, nil, 107, 106, - 108, 97, 56, 99, 98, 100, nil, 101, 109, 110, - nil, 93, 94, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 225, nil, nil, 231, nil, - nil, 58, 59, nil, nil, 60, nil, nil, nil, nil, - nil, 44, nil, nil, nil, nil, nil, nil, nil, nil, - 230, nil, nil, nil, nil, 91, 81, 84, 85, nil, - 86, 88, 87, 89, nil, nil, nil, nil, 82, 90, - nil, nil, nil, 74, 75, 71, 62, 57, 83, 95, - 96, 63, 64, nil, nil, nil, 67, nil, 65, 66, - 68, 311, 312, 72, 73, nil, nil, nil, nil, nil, - 307, 308, 314, 103, 102, 104, 105, nil, nil, 232, - nil, nil, nil, nil, nil, nil, 45, nil, nil, 107, - 106, 108, 97, 56, 99, 98, 100, nil, 101, 109, - 110, nil, 93, 94, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 225, nil, nil, 231, - nil, nil, 58, 59, nil, nil, 60, nil, nil, nil, - nil, nil, 44, nil, nil, nil, nil, nil, nil, nil, - nil, 230, nil, nil, nil, nil, 91, 81, 84, 85, - nil, 86, 88, 87, 89, nil, nil, nil, nil, 82, - 90, nil, nil, nil, 74, 75, 71, 62, 57, 83, - 95, 96, 63, 64, nil, nil, nil, 67, nil, 65, - 66, 68, 311, 312, 72, 73, nil, nil, nil, nil, - nil, 307, 308, 314, 103, 102, 104, 105, nil, nil, - 232, nil, nil, nil, nil, nil, nil, 45, nil, nil, - 107, 106, 108, 97, 56, 99, 98, 100, nil, 101, - 109, 110, nil, 93, 94, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 225, nil, nil, - 231, nil, nil, 58, 59, nil, nil, 60, nil, nil, - nil, nil, nil, 44, nil, nil, nil, nil, nil, nil, - nil, nil, 230, nil, nil, nil, nil, 91, 81, 84, - 85, nil, 86, 88, 87, 89, nil, nil, nil, nil, - 82, 90, nil, nil, nil, 74, 75, 71, 62, 57, - 83, 95, 96, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 311, 312, 72, 73, nil, nil, nil, - nil, nil, 307, 308, 314, 103, 102, 104, 105, nil, - nil, 232, nil, nil, nil, nil, nil, nil, 45, nil, - nil, 107, 106, 108, 97, 56, 99, 98, 100, nil, - 101, 109, 110, nil, 93, 94, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 225, nil, - nil, 231, nil, nil, 58, 59, nil, nil, 60, nil, - nil, nil, nil, nil, 44, nil, nil, nil, nil, nil, - nil, nil, nil, 230, nil, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, 74, 75, 71, 62, - 57, 83, 95, 96, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 311, 312, 72, 73, nil, nil, - nil, nil, nil, 307, 308, 314, 103, 102, 104, 105, - nil, nil, 232, nil, nil, nil, nil, nil, nil, 45, - nil, nil, 107, 106, 108, 97, 56, 99, 98, 100, - nil, 101, 109, 110, nil, 93, 94, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 225, - nil, nil, 231, nil, nil, 58, 59, nil, nil, 60, - nil, nil, nil, nil, nil, 44, nil, nil, nil, nil, - nil, nil, nil, nil, 230, nil, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, nil, nil, 74, 75, 71, - 62, 57, 83, 95, 96, 63, 64, nil, nil, nil, - 67, nil, 65, 66, 68, 311, 312, 72, 73, nil, - nil, nil, nil, nil, 307, 308, 314, 103, 102, 104, - 105, nil, nil, 232, nil, nil, nil, nil, nil, nil, - 45, nil, nil, 107, 106, 108, 97, 56, 99, 98, - 100, nil, 101, 109, 110, nil, 93, 94, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 225, nil, nil, 231, nil, nil, 58, 59, nil, nil, - 60, nil, nil, nil, nil, nil, 44, nil, nil, nil, - nil, nil, nil, nil, nil, 230, nil, nil, nil, nil, - 91, 81, 84, 85, nil, 86, 88, 87, 89, nil, - nil, nil, nil, 82, 90, nil, nil, nil, 74, 75, - 71, 62, 57, 83, 95, 96, 63, 64, nil, nil, - nil, 67, nil, 65, 66, 68, 311, 312, 72, 73, - nil, nil, nil, nil, nil, 307, 308, 314, 103, 102, - 104, 105, nil, nil, 232, nil, nil, nil, nil, nil, - nil, 45, nil, nil, 107, 106, 108, 97, 56, 99, - 98, 100, nil, 101, 109, 110, nil, 93, 94, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 225, nil, nil, 231, nil, nil, 58, 59, nil, - nil, 60, nil, nil, nil, nil, nil, 44, nil, nil, - nil, nil, nil, nil, nil, nil, 230, nil, nil, nil, - nil, 91, 81, 84, 85, nil, 86, 88, 87, 89, - nil, nil, nil, nil, 82, 90, nil, nil, nil, 74, - 75, 71, 62, 57, 83, 95, 96, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 311, 312, 72, - 73, nil, nil, nil, nil, nil, 307, 308, 314, 103, - 102, 104, 105, nil, nil, 232, nil, nil, nil, nil, - nil, nil, 45, nil, nil, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 225, nil, nil, 231, nil, nil, 58, 59, - nil, nil, 60, nil, nil, nil, nil, nil, 44, nil, - nil, nil, nil, nil, nil, nil, nil, 230, nil, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - 74, 75, 71, 62, 57, 83, 95, 96, 63, 64, - nil, nil, nil, 67, nil, 65, 66, 68, 311, 312, - 72, 73, nil, nil, nil, nil, nil, 307, 308, 314, - 103, 102, 104, 105, nil, nil, 232, nil, nil, nil, - nil, nil, nil, 45, nil, nil, 107, 106, 108, 97, - 56, 99, 98, 100, nil, 101, 109, 110, nil, 93, - 94, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 225, nil, nil, 231, nil, nil, 58, - 59, nil, nil, 60, nil, nil, nil, nil, nil, 44, - nil, nil, nil, nil, nil, nil, nil, nil, 230, nil, - nil, nil, nil, 91, 81, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, nil, nil, - nil, 74, 75, 71, 62, 57, 83, 95, 96, 63, - 64, nil, nil, nil, 67, nil, 65, 66, 68, 311, - 312, 72, 73, nil, nil, nil, nil, nil, 307, 308, - 314, 103, 102, 104, 105, nil, nil, 232, nil, nil, - nil, nil, nil, nil, 45, nil, nil, 107, 106, 108, - 97, 56, 99, 98, 100, nil, 101, 109, 110, nil, - 93, 94, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 225, nil, nil, 231, nil, nil, - 58, 59, nil, nil, 60, nil, nil, nil, nil, nil, - 44, nil, nil, nil, nil, nil, nil, nil, nil, 230, - nil, nil, nil, nil, 91, 81, 84, 85, nil, 86, - 88, 87, 89, nil, nil, nil, nil, 82, 90, nil, - nil, nil, 74, 75, 71, 62, 57, 83, 95, 96, - 63, 64, nil, nil, nil, 67, nil, 65, 66, 68, - 311, 312, 72, 73, nil, nil, nil, nil, nil, 307, - 308, 314, 103, 102, 104, 105, nil, nil, 232, nil, - nil, nil, nil, nil, nil, 45, nil, nil, 107, 106, - 108, 97, 56, 99, 98, 100, nil, 101, 109, 110, - nil, 93, 94, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 225, nil, nil, 231, nil, - nil, 58, 59, nil, nil, 60, nil, nil, nil, nil, - nil, 44, nil, nil, nil, nil, nil, nil, nil, nil, - 230, nil, nil, nil, nil, 91, 81, 84, 85, nil, - 86, 88, 87, 89, nil, nil, nil, nil, 82, 90, - nil, nil, nil, 74, 75, 71, 62, 57, 83, 95, - 96, 63, 64, nil, nil, nil, 67, nil, 65, 66, - 68, 311, 312, 72, 73, nil, nil, nil, nil, nil, - 307, 308, 314, 103, 102, 104, 105, nil, nil, 232, - nil, nil, nil, nil, nil, nil, 45, nil, nil, 107, - 106, 108, 97, 56, 99, 98, 100, nil, 101, 109, - 110, nil, 93, 94, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 225, nil, nil, 231, - nil, nil, 58, 59, nil, nil, 60, nil, nil, nil, - nil, nil, 44, nil, nil, nil, nil, nil, nil, nil, - nil, 230, nil, nil, nil, nil, 91, 81, 84, 85, - nil, 86, 88, 87, 89, nil, nil, nil, nil, 82, - 90, nil, nil, nil, 74, 75, 71, 62, 57, 83, - 95, 96, 63, 64, nil, nil, nil, 67, nil, 65, - 66, 68, 311, 312, 72, 73, nil, nil, nil, nil, - nil, 307, 308, 314, 103, 102, 104, 105, nil, nil, - 232, nil, nil, nil, nil, nil, nil, 45, nil, nil, - 107, 106, 108, 97, 56, 99, 98, 100, nil, 101, - 109, 110, nil, 93, 94, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 225, nil, nil, - 231, nil, nil, 58, 59, nil, nil, 60, nil, nil, - nil, nil, nil, 44, nil, nil, nil, nil, nil, nil, - nil, nil, 230, nil, nil, nil, nil, 91, 81, 84, - 85, nil, 86, 88, 87, 89, nil, nil, nil, nil, - 82, 90, nil, nil, nil, 74, 75, 71, 62, 57, - 83, 95, 96, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 311, 312, 72, 73, nil, nil, nil, - nil, nil, 307, 308, 314, 103, 102, 104, 105, nil, - nil, 232, nil, nil, nil, nil, nil, nil, 45, nil, - nil, 107, 106, 108, 97, 56, 99, 98, 100, nil, - 101, 109, 110, nil, 93, 94, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 225, nil, - nil, 231, nil, nil, 58, 59, nil, nil, 60, nil, - nil, nil, nil, nil, 44, nil, nil, nil, nil, nil, - nil, nil, nil, 230, nil, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, 74, 75, 71, 62, - 57, 83, 95, 96, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 311, 312, 72, 73, nil, nil, - nil, nil, nil, 307, 308, 314, 103, 102, 104, 105, - nil, nil, 232, nil, nil, nil, nil, nil, nil, 45, - nil, nil, 107, 106, 108, 97, 56, 99, 98, 100, - nil, 101, 109, 110, nil, 93, 94, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 225, - nil, nil, 231, nil, nil, 58, 59, nil, nil, 60, - nil, nil, nil, nil, nil, 44, nil, nil, nil, nil, - nil, nil, nil, nil, 230, nil, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, nil, nil, 74, 75, 71, - 62, 57, 83, 95, 96, 63, 64, nil, nil, nil, - 67, nil, 65, 66, 68, 311, 312, 72, 73, nil, - nil, nil, nil, nil, 307, 308, 314, 103, 102, 104, - 105, nil, nil, 232, nil, nil, nil, nil, nil, nil, - 45, nil, nil, 107, 106, 108, 97, 56, 99, 98, - 100, nil, 101, 109, 110, nil, 93, 94, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 225, nil, nil, 231, nil, nil, 58, 59, nil, nil, - 60, nil, nil, nil, nil, nil, 44, nil, nil, nil, - nil, nil, nil, nil, nil, 230, nil, nil, nil, nil, - 91, 81, 84, 85, nil, 86, 88, 87, 89, nil, - nil, nil, nil, 82, 90, nil, nil, nil, 74, 75, - 71, 62, 57, 83, 95, 96, 63, 64, nil, nil, - nil, 67, nil, 65, 66, 68, 311, 312, 72, 73, - nil, nil, nil, nil, nil, 307, 308, 314, 103, 102, - 104, 105, nil, nil, 232, nil, nil, nil, nil, nil, - nil, 45, nil, nil, 107, 106, 108, 97, 56, 99, - 98, 100, nil, 101, 109, 110, nil, 93, 94, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 225, nil, nil, 231, nil, nil, 58, 59, nil, - nil, 60, nil, nil, nil, nil, nil, 44, nil, nil, - nil, nil, nil, nil, nil, nil, 230, nil, nil, nil, - nil, 91, 81, 84, 85, nil, 86, 88, 87, 89, - nil, nil, nil, nil, 82, 90, nil, nil, nil, 74, - 75, 71, 62, 57, 83, 95, 96, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 311, 312, 72, - 73, nil, nil, nil, nil, nil, 307, 308, 314, 103, - 102, 104, 105, nil, nil, 232, nil, nil, nil, nil, - nil, nil, 45, nil, nil, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 225, nil, nil, 231, nil, nil, 58, 59, - nil, nil, 60, nil, nil, nil, nil, nil, 44, nil, - nil, nil, nil, nil, nil, nil, nil, 230, nil, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - 74, 75, 71, 62, 57, 83, 95, 96, 63, 64, - nil, nil, nil, 67, nil, 65, 66, 68, 311, 312, - 72, 73, nil, nil, nil, nil, nil, 307, 308, 314, - 103, 102, 104, 105, nil, nil, 232, nil, nil, nil, - nil, nil, nil, 45, nil, nil, 107, 106, 108, 97, - 56, 99, 98, 100, nil, 101, 109, 110, nil, 93, - 94, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 225, nil, nil, 231, nil, nil, 58, - 59, nil, nil, 60, nil, nil, nil, nil, nil, 44, - nil, nil, nil, nil, nil, nil, nil, nil, 230, nil, - nil, nil, nil, 91, 81, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, nil, nil, - nil, 74, 75, 71, 62, 57, 83, 95, 96, 63, - 64, nil, nil, nil, 67, nil, 65, 66, 68, 311, - 312, 72, 73, nil, nil, nil, nil, nil, 307, 308, - 314, 103, 102, 104, 105, nil, nil, 232, nil, nil, - nil, nil, nil, nil, 45, nil, nil, 107, 106, 108, - 97, 56, 99, 98, 100, nil, 101, 109, 110, nil, - 93, 94, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 225, nil, nil, 231, nil, nil, - 58, 59, nil, nil, 60, nil, nil, nil, nil, nil, - 44, nil, nil, nil, nil, nil, nil, nil, nil, 230, - nil, nil, nil, nil, 91, 81, 84, 85, nil, 86, - 88, 87, 89, nil, nil, nil, nil, 82, 90, nil, - nil, nil, 74, 75, 71, 62, 57, 83, 95, 96, - 63, 64, nil, nil, nil, 67, nil, 65, 66, 68, - 311, 312, 72, 73, nil, nil, nil, nil, nil, 307, - 308, 314, 103, 102, 104, 105, nil, nil, 232, nil, - nil, nil, nil, nil, nil, 45, nil, nil, 107, 106, - 108, 97, 56, 99, 98, 100, nil, 101, 109, 110, - nil, 93, 94, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 225, nil, nil, 231, nil, - nil, 58, 59, nil, nil, 60, nil, nil, nil, nil, - nil, 44, nil, nil, nil, nil, nil, nil, nil, nil, - 230, nil, nil, nil, nil, 91, 81, 84, 85, nil, - 86, 88, 87, 89, nil, nil, nil, nil, 82, 90, - nil, nil, nil, 74, 75, 71, 62, 57, 83, 95, - 96, 63, 64, nil, nil, nil, 67, nil, 65, 66, - 68, 311, 312, 72, 73, nil, nil, nil, nil, nil, - 307, 308, 314, 103, 102, 104, 105, nil, nil, 232, - nil, nil, nil, nil, nil, nil, 45, nil, nil, 107, - 106, 108, 97, 56, 99, 98, 100, nil, 101, 109, - 110, nil, 93, 94, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 225, nil, nil, 231, - nil, nil, 58, 59, nil, nil, 60, nil, nil, nil, - nil, nil, 44, nil, nil, nil, nil, nil, nil, nil, - nil, 230, nil, nil, nil, nil, 91, 81, 84, 85, - nil, 86, 88, 87, 89, nil, nil, nil, nil, 82, - 90, nil, nil, nil, 74, 75, 71, 62, 57, 83, - 95, 96, 63, 64, nil, nil, nil, 67, nil, 65, - 66, 68, 311, 312, 72, 73, nil, nil, nil, nil, - nil, 307, 308, 314, 103, 102, 104, 105, nil, nil, - 232, nil, nil, nil, nil, nil, nil, 45, nil, nil, - 107, 106, 108, 97, 56, 99, 98, 100, nil, 101, - 109, 110, nil, 93, 94, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 225, nil, nil, - 231, nil, nil, 58, 59, nil, nil, 60, nil, nil, - nil, nil, nil, 44, nil, nil, nil, nil, nil, nil, - nil, nil, 230, nil, nil, nil, nil, 91, 81, 84, - 85, nil, 86, 88, 87, 89, nil, nil, nil, nil, - 82, 90, nil, nil, nil, 74, 75, 71, 62, 57, - 83, 95, 96, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 30, 31, 72, 73, nil, nil, nil, - nil, nil, 29, 28, 27, 103, 102, 104, 105, nil, - nil, 232, nil, nil, nil, nil, nil, nil, 45, nil, - nil, 107, 106, 108, 97, 56, 99, 98, 100, 286, - 101, 109, 110, nil, 93, 94, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 225, nil, - nil, 231, nil, nil, 58, 59, nil, nil, 60, nil, - 283, nil, 281, nil, 44, nil, nil, 287, nil, nil, - nil, nil, nil, 230, nil, nil, nil, nil, 91, 284, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, 74, 75, 71, 62, - 57, 83, 95, 96, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 30, 31, 72, 73, nil, nil, - nil, nil, nil, 29, 28, 27, 103, 102, 104, 105, - nil, nil, 232, nil, nil, nil, nil, nil, nil, 45, - nil, nil, 107, 106, 108, 97, 56, 99, 98, 100, - 286, 101, 109, 110, nil, 93, 94, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 225, - nil, nil, 231, nil, nil, 58, 59, nil, nil, 60, - nil, 283, nil, 281, nil, 44, nil, nil, 287, nil, - nil, nil, nil, nil, 230, nil, nil, nil, nil, 91, - 284, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, nil, nil, 74, 75, 71, - 62, 57, 83, 95, 96, 63, 64, nil, nil, nil, - 67, nil, 65, 66, 68, 30, 31, 72, 73, nil, - nil, nil, nil, nil, 29, 28, 27, 103, 102, 104, - 105, nil, nil, 232, nil, nil, nil, nil, nil, nil, - 45, nil, nil, 107, 106, 108, 97, 56, 99, 98, - 100, 286, 101, 109, 110, nil, 93, 94, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 225, nil, nil, 231, nil, nil, 58, 59, nil, nil, - 60, nil, 283, nil, 281, nil, 44, nil, nil, 287, - nil, nil, nil, nil, nil, 230, nil, nil, nil, nil, - 91, 284, 84, 85, nil, 86, 88, 87, 89, nil, - nil, nil, nil, 82, 90, 220, nil, nil, 74, 75, - 71, 62, 57, 83, 95, 96, 63, 64, nil, nil, - nil, 67, nil, 65, 66, 68, 311, 312, 72, 73, - nil, nil, nil, nil, nil, 307, 308, 314, 103, 102, - 104, 105, nil, nil, 232, nil, nil, nil, nil, nil, - nil, 45, nil, nil, 107, 106, 108, 97, 56, 99, - 98, 100, nil, 101, 109, 110, nil, 93, 94, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 225, nil, nil, 231, nil, nil, 58, 59, nil, - nil, 60, nil, nil, nil, nil, nil, 44, nil, nil, - nil, nil, nil, nil, nil, nil, 230, nil, nil, nil, - nil, 91, 81, 84, 85, nil, 86, 88, 87, 89, - nil, nil, nil, nil, 82, 90, nil, nil, nil, 74, - 75, 71, 62, 57, 83, 95, 96, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 311, 312, 72, - 73, nil, nil, nil, nil, nil, 307, 308, 314, 103, - 102, 104, 105, nil, nil, 232, nil, nil, nil, nil, - nil, nil, 45, nil, nil, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 225, nil, nil, 231, nil, nil, 58, 59, - nil, nil, 60, nil, nil, nil, nil, nil, 44, nil, - nil, nil, nil, nil, nil, nil, nil, 230, nil, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - 74, 75, 71, 62, 57, 83, 95, 96, 63, 64, - nil, nil, nil, 67, nil, 65, 66, 68, 311, 312, - 72, 73, nil, nil, nil, nil, nil, 307, 308, 314, - 103, 102, 104, 105, nil, nil, 232, nil, nil, nil, - nil, nil, nil, 45, nil, nil, 107, 106, 108, 97, - 56, 99, 98, 100, nil, 101, 109, 110, nil, 93, - 94, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 225, nil, nil, 231, nil, nil, 58, - 59, nil, nil, 60, nil, nil, nil, nil, nil, 44, - nil, nil, nil, nil, nil, nil, nil, nil, 230, nil, - nil, nil, nil, 91, 81, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, nil, nil, - nil, 74, 75, 71, 62, 57, 83, 95, 96, 63, - 64, nil, nil, nil, 67, nil, 65, 66, 68, 311, - 312, 72, 73, nil, nil, nil, nil, nil, 307, 308, - 314, 103, 102, 104, 105, nil, nil, 232, nil, nil, - nil, nil, nil, nil, 45, nil, nil, 107, 106, 108, - 97, 56, 99, 98, 100, nil, 101, 109, 110, nil, - 93, 94, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 225, nil, nil, 231, nil, nil, - 58, 59, nil, nil, 60, nil, nil, nil, nil, nil, - 44, nil, nil, nil, nil, nil, nil, nil, nil, 230, - nil, nil, nil, nil, 91, 81, 84, 85, nil, 86, - 88, 87, 89, nil, nil, nil, nil, 82, 90, nil, - nil, nil, nil, nil, nil, 62, nil, 83, 95, 96, - 74, 75, 71, 9, 57, nil, nil, nil, 63, 64, - nil, nil, nil, 67, nil, 65, 66, 68, 30, 31, - 72, 73, nil, nil, nil, nil, nil, 29, 28, 27, - 103, 102, 104, 105, nil, nil, 19, nil, nil, nil, - nil, nil, 8, 45, nil, 10, 107, 106, 108, 97, - 56, 99, 98, 100, nil, 101, 109, 110, nil, 93, - 94, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 40, nil, nil, 33, nil, nil, 58, - 59, nil, nil, 60, nil, 35, nil, nil, nil, 44, - nil, nil, nil, nil, nil, nil, nil, nil, 20, nil, - nil, nil, nil, 91, 81, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, nil, nil, - nil, 74, 75, 71, 62, 57, 83, 95, 96, 63, - 64, nil, nil, nil, 67, nil, 65, 66, 68, 311, - 312, 72, 73, nil, nil, nil, nil, nil, 307, 308, - 314, 103, 102, 104, 105, nil, nil, 232, nil, nil, - nil, nil, nil, nil, 309, nil, nil, 107, 106, 108, - 97, 56, 99, 98, 100, nil, 101, 109, 110, nil, - 93, 94, nil, nil, 315, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 305, nil, nil, 231, nil, nil, - 58, 59, nil, nil, 60, nil, nil, 672, nil, 669, - 668, 667, 677, 670, nil, nil, nil, nil, nil, nil, - nil, nil, 680, nil, 91, 81, 84, 85, nil, 86, - 88, 87, 89, nil, nil, nil, nil, 82, 90, nil, - nil, nil, 505, nil, 675, 62, nil, 83, 95, 96, - 74, 75, 71, nil, 57, 688, 687, nil, 63, 64, - 681, nil, nil, 67, nil, 65, 66, 68, 311, 312, - 72, 73, nil, nil, nil, nil, nil, 307, 308, 314, - 103, 102, 104, 105, nil, nil, 232, nil, nil, nil, - nil, nil, nil, 309, nil, nil, 107, 106, 108, 97, - 56, 99, 98, 100, nil, 101, 109, 110, nil, 93, - 94, nil, nil, 315, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 305, nil, nil, 301, nil, nil, 58, - 59, nil, nil, 60, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 91, 81, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, nil, nil, - nil, 74, 75, 71, 62, 57, 83, 95, 96, 63, - 64, nil, nil, nil, 67, nil, 65, 66, 68, 311, - 312, 72, 73, nil, nil, nil, nil, nil, 307, 308, - 314, 103, 102, 104, 105, nil, nil, 232, nil, nil, - nil, nil, nil, nil, 45, nil, nil, 107, 106, 108, - 97, 56, 99, 98, 100, nil, 101, 109, 110, nil, - 93, 94, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 225, nil, nil, 231, 521, nil, - 58, 59, nil, nil, 60, nil, nil, nil, nil, nil, - 44, nil, nil, nil, nil, nil, nil, nil, nil, 230, - nil, nil, nil, nil, 91, 81, 84, 85, nil, 86, - 88, 87, 89, nil, nil, nil, nil, 82, 90, nil, - nil, nil, 74, 75, 71, 62, 57, 83, 95, 96, - 63, 64, nil, nil, nil, 67, nil, 65, 66, 68, - 30, 31, 72, 73, nil, nil, nil, nil, nil, 29, - 28, 27, 103, 102, 104, 105, nil, nil, 19, nil, - nil, nil, nil, nil, nil, 45, nil, nil, 107, 106, - 108, 97, 56, 99, 98, 100, nil, 101, 109, 110, - nil, 93, 94, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 225, nil, nil, 231, nil, - nil, 58, 59, nil, nil, 60, nil, nil, nil, nil, - nil, 44, nil, nil, nil, nil, nil, nil, nil, nil, - 20, nil, nil, nil, nil, 91, 81, 84, 85, nil, - 86, 88, 87, 89, nil, nil, nil, nil, 82, 90, - nil, nil, nil, 74, 75, 71, 62, 57, 83, 95, - 96, 63, 64, nil, nil, nil, 67, nil, 65, 66, - 68, 30, 31, 72, 73, nil, nil, nil, nil, nil, - 29, 28, 27, 103, 102, 104, 105, nil, nil, 19, - nil, nil, nil, nil, nil, nil, 45, nil, nil, 107, - 106, 108, 97, 56, 99, 98, 100, nil, 101, 109, - 110, nil, 93, 94, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 225, nil, nil, 231, - nil, nil, 58, 59, nil, nil, 60, nil, nil, nil, - nil, nil, 44, nil, nil, nil, nil, nil, nil, nil, - nil, 20, nil, nil, nil, nil, 91, 81, 84, 85, - nil, 86, 88, 87, 89, nil, nil, nil, nil, 82, - 90, nil, nil, nil, 74, 75, 71, 62, 57, 83, - 95, 96, 63, 64, nil, nil, nil, 67, nil, 65, - 66, 68, 30, 31, 72, 73, nil, nil, nil, nil, - nil, 29, 28, 27, 103, 102, 104, 105, nil, nil, - 19, nil, nil, nil, nil, nil, nil, 45, nil, nil, - 107, 106, 108, 97, 56, 99, 98, 100, nil, 101, - 109, 110, nil, 93, 94, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 225, nil, nil, - 231, nil, nil, 58, 59, nil, nil, 60, nil, nil, - nil, nil, nil, 44, nil, nil, nil, nil, nil, nil, - nil, nil, 20, nil, nil, nil, nil, 91, 81, 84, - 85, nil, 86, 88, 87, 89, nil, nil, nil, nil, - 82, 90, nil, nil, nil, 74, 75, 71, 62, 57, - 83, 95, 96, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 30, 31, 72, 73, nil, nil, nil, - nil, nil, 29, 28, 27, 103, 102, 104, 105, nil, - nil, 19, nil, nil, nil, nil, nil, nil, 45, nil, - nil, 107, 106, 108, 97, 56, 99, 98, 100, nil, - 101, 109, 110, nil, 93, 94, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 225, nil, - nil, 231, nil, nil, 58, 59, nil, nil, 60, nil, - nil, nil, nil, nil, 44, nil, nil, nil, nil, nil, - nil, nil, nil, 20, nil, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, 74, 75, 71, 62, - 57, 83, 95, 96, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 30, 31, 72, 73, nil, nil, - nil, nil, nil, 29, 28, 27, 103, 102, 104, 105, - nil, nil, 19, nil, nil, nil, nil, nil, nil, 45, - nil, nil, 107, 106, 108, 97, 56, 99, 98, 100, - nil, 101, 109, 110, nil, 93, 94, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 225, - nil, nil, 231, nil, nil, 58, 59, nil, nil, 60, - nil, nil, nil, nil, nil, 44, nil, nil, nil, nil, - nil, nil, nil, nil, 20, nil, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, nil, nil, 74, 75, 71, - 62, 57, 83, 95, 96, 63, 64, nil, nil, nil, - 67, nil, 65, 66, 68, 311, 312, 72, 73, nil, - nil, nil, nil, nil, 307, 308, 314, 103, 102, 104, - 105, nil, nil, 232, nil, nil, nil, nil, nil, nil, - 45, nil, nil, 107, 106, 108, 97, 56, 99, 98, - 100, nil, 101, 109, 110, nil, 93, 94, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 225, nil, nil, 231, nil, nil, 58, 59, nil, nil, - 60, nil, nil, nil, nil, nil, 44, nil, nil, nil, - nil, nil, nil, nil, nil, 230, nil, nil, nil, nil, - 91, 81, 84, 85, nil, 86, 88, 87, 89, nil, - nil, nil, nil, 82, 90, nil, nil, nil, 74, 75, - 71, 62, 57, 83, 95, 96, 63, 64, nil, nil, - nil, 67, nil, 65, 66, 68, 30, 31, 72, 73, - nil, nil, nil, nil, nil, 29, 28, 27, 103, 102, - 104, 105, nil, nil, 232, nil, nil, nil, nil, nil, - nil, 45, nil, nil, 107, 106, 108, 97, 56, 99, - 98, 100, 286, 101, 109, 110, nil, 93, 94, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 225, nil, nil, 231, nil, nil, 58, 59, nil, - nil, 60, nil, 283, nil, 281, nil, 44, nil, nil, - 287, nil, nil, nil, nil, nil, 230, nil, nil, nil, - nil, 91, 284, 84, 85, nil, 86, 88, 87, 89, - nil, nil, nil, nil, 82, 90, nil, nil, nil, 74, - 75, 71, 62, 57, 83, 95, 96, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 311, 312, 72, - 73, nil, nil, nil, nil, nil, 307, 308, 314, 103, - 102, 104, 105, nil, nil, 232, nil, nil, nil, nil, - nil, nil, 45, nil, nil, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 225, nil, nil, 231, nil, nil, 58, 59, - nil, nil, 60, nil, nil, nil, nil, nil, 44, nil, - nil, nil, nil, nil, nil, nil, nil, 230, nil, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - 74, 75, 71, 62, 57, 83, 95, 96, 63, 64, - nil, nil, nil, 67, nil, 65, 66, 68, 311, 312, - 72, 73, nil, nil, nil, nil, nil, 307, 308, 314, - 103, 102, 104, 105, nil, nil, 232, nil, nil, nil, - nil, nil, nil, 45, nil, nil, 107, 106, 108, 97, - 56, 99, 98, 100, nil, 101, 109, 110, nil, 93, - 94, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 225, nil, nil, 231, nil, nil, 58, - 59, nil, nil, 60, nil, nil, nil, nil, nil, 44, - nil, nil, nil, nil, nil, nil, nil, nil, 230, nil, - nil, nil, nil, 91, 81, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, nil, nil, - nil, 74, 75, 71, 62, 57, 83, 95, 96, 63, - 64, nil, nil, nil, 67, nil, 65, 66, 68, 311, - 312, 72, 73, nil, nil, nil, nil, nil, 307, 308, - 314, 103, 102, 104, 105, nil, nil, 232, nil, nil, - nil, nil, nil, nil, 45, nil, nil, 107, 106, 108, - 97, 56, 99, 98, 100, nil, 101, 109, 110, nil, - 93, 94, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 225, nil, nil, 231, nil, nil, - 58, 59, nil, nil, 60, nil, nil, nil, nil, nil, - 44, nil, nil, nil, nil, nil, nil, nil, nil, 230, - nil, nil, nil, nil, 91, 81, 84, 85, nil, 86, - 88, 87, 89, nil, nil, nil, nil, 82, 90, nil, - nil, nil, 74, 75, 71, 62, 57, 83, 95, 96, - 63, 64, nil, nil, nil, 67, nil, 65, 66, 68, - 311, 312, 72, 73, nil, nil, nil, nil, nil, 307, - 308, 314, 103, 102, 104, 105, nil, nil, 232, nil, - nil, nil, nil, nil, nil, 45, nil, nil, 107, 106, - 108, 97, 56, 99, 98, 100, 286, 101, 109, 110, - nil, 93, 94, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 225, nil, nil, 231, nil, - nil, 58, 59, nil, nil, 60, nil, 629, nil, 281, - nil, 44, nil, nil, 287, nil, nil, nil, nil, nil, - 230, nil, nil, nil, nil, 91, 284, 84, 85, nil, - 86, 88, 87, 89, nil, nil, nil, nil, 82, 90, - nil, nil, nil, 74, 75, 71, 62, 57, 83, 95, - 96, 63, 64, nil, nil, nil, 67, nil, 65, 66, - 68, 311, 312, 72, 73, nil, nil, nil, nil, nil, - 307, 308, 314, 103, 102, 104, 105, nil, nil, 232, - nil, nil, nil, nil, nil, nil, 45, nil, nil, 107, - 106, 108, 97, 56, 99, 98, 100, 286, 101, 109, - 110, nil, 93, 94, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 225, nil, nil, 231, - nil, nil, 58, 59, nil, nil, 60, nil, nil, nil, - 281, nil, 44, nil, nil, 287, nil, nil, nil, nil, - nil, 230, nil, nil, nil, nil, 91, 284, 84, 85, - nil, 86, 88, 87, 89, nil, nil, nil, nil, 82, - 90, nil, nil, nil, 74, 75, 71, 62, 57, 83, - 95, 96, 63, 64, nil, nil, nil, 67, nil, 65, - 66, 68, 311, 312, 72, 73, nil, nil, nil, nil, - nil, 307, 308, 314, 103, 102, 104, 105, nil, nil, - 232, nil, nil, nil, nil, nil, nil, 45, nil, nil, - 107, 106, 108, 97, 56, 99, 98, 100, nil, 101, - 109, 110, nil, 93, 94, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 225, nil, nil, - 231, nil, nil, 58, 59, nil, nil, 60, nil, nil, - nil, nil, nil, 44, nil, nil, nil, nil, nil, nil, - nil, nil, 230, nil, nil, nil, nil, 91, 81, 84, - 85, nil, 86, 88, 87, 89, nil, nil, nil, nil, - 82, 90, nil, nil, nil, nil, nil, nil, 62, nil, - 83, 95, 96, 74, 75, 71, 9, 57, nil, nil, - nil, 63, 64, nil, nil, nil, 67, nil, 65, 66, - 68, 30, 31, 72, 73, nil, nil, nil, nil, nil, - 29, 28, 27, 103, 102, 104, 105, nil, nil, 19, - nil, nil, nil, nil, nil, 8, 45, 294, 10, 107, - 106, 108, 97, 56, 99, 98, 100, nil, 101, 109, - 110, nil, 93, 94, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 40, nil, nil, 33, - nil, nil, 58, 59, nil, nil, 60, nil, 35, nil, - nil, nil, 44, nil, nil, nil, nil, nil, nil, nil, - nil, 20, nil, nil, nil, nil, 91, 81, 84, 85, - nil, 86, 88, 87, 89, nil, nil, nil, nil, 82, - 90, nil, nil, nil, nil, nil, 389, 62, nil, 83, - 95, 96, 74, 75, 71, nil, 57, nil, nil, nil, - 63, 64, nil, nil, nil, 67, nil, 65, 66, 68, - 311, 312, 72, 73, nil, nil, nil, nil, nil, 307, - 308, 314, 103, 102, 104, 105, nil, nil, 232, nil, - nil, nil, nil, nil, nil, 309, nil, nil, 107, 106, - 108, 97, 56, 99, 98, 100, nil, 101, 109, 110, - nil, 93, 94, nil, nil, 315, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 305, nil, nil, 301, nil, - nil, 58, 59, nil, nil, 60, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 91, 81, 84, 85, nil, - 86, 88, 87, 89, nil, nil, nil, nil, 82, 90, - nil, nil, nil, 74, 75, 71, 62, 57, 83, 95, - 96, 63, 64, nil, nil, nil, 67, nil, 65, 66, - 68, 30, 31, 72, 73, nil, nil, nil, nil, nil, - 29, 28, 27, 103, 102, 104, 105, nil, nil, 232, - nil, nil, nil, nil, nil, nil, 45, nil, nil, 107, - 106, 108, 97, 56, 99, 98, 100, 286, 101, 109, - 110, nil, 93, 94, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 225, nil, nil, 231, - nil, nil, 58, 59, nil, nil, 60, nil, 283, nil, - 281, nil, 44, nil, nil, 287, nil, nil, nil, nil, - nil, 230, nil, nil, nil, nil, 91, 284, 84, 85, - nil, 86, 88, 87, 89, nil, nil, nil, nil, 82, - 90, nil, nil, nil, 74, 75, 71, 62, 57, 83, - 95, 96, 63, 64, nil, nil, nil, 67, nil, 65, - 66, 68, 311, 312, 72, 73, nil, nil, nil, nil, - nil, 307, 308, 314, 103, 102, 104, 105, nil, nil, - 232, nil, nil, nil, nil, nil, nil, 309, nil, nil, - 107, 106, 108, 97, 56, 99, 98, 100, nil, 101, - 109, 110, nil, 93, 94, nil, nil, 315, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 305, nil, nil, - 301, nil, nil, 58, 59, nil, nil, 60, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 91, 81, 84, - 85, nil, 86, 88, 87, 89, nil, nil, nil, nil, - 82, 90, nil, nil, nil, 74, 75, 71, 62, 57, - 83, 95, 96, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 311, 312, 72, 73, nil, nil, nil, - nil, nil, 307, 308, 314, 103, 102, 104, 105, nil, - nil, 232, nil, nil, nil, nil, nil, nil, 45, nil, - nil, 107, 106, 108, 97, 56, 99, 98, 100, nil, - 101, 109, 110, nil, 93, 94, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 225, nil, - nil, 231, nil, nil, 58, 59, nil, nil, 60, nil, - nil, nil, nil, nil, 44, nil, nil, nil, nil, nil, - nil, nil, nil, 230, nil, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, 74, 75, 71, 62, - 57, 83, 95, 96, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 311, 312, 72, 73, nil, nil, - nil, nil, nil, 307, 308, 314, 103, 102, 104, 105, - nil, nil, 232, nil, nil, nil, nil, nil, nil, 45, - nil, nil, 107, 106, 108, 97, 56, 99, 98, 100, - nil, 101, 109, 110, nil, 93, 94, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 225, - nil, nil, 231, nil, nil, 58, 59, nil, nil, 60, - nil, nil, nil, nil, nil, 44, nil, nil, nil, nil, - nil, nil, nil, nil, 230, nil, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, nil, nil, 74, 75, 71, - 62, 57, 83, 95, 96, 63, 64, nil, nil, nil, - 67, nil, 65, 66, 68, 30, 31, 72, 73, nil, - nil, nil, nil, nil, 29, 28, 27, 103, 102, 104, - 105, nil, nil, 19, nil, nil, nil, nil, nil, nil, - 45, nil, nil, 107, 106, 108, 97, 56, 99, 98, - 100, nil, 101, 109, 110, nil, 93, 94, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 225, nil, nil, 231, nil, nil, 58, 59, nil, nil, - 60, nil, nil, nil, nil, nil, 44, nil, nil, nil, - nil, nil, nil, nil, nil, 20, nil, nil, nil, nil, - 91, 81, 84, 85, nil, 86, 88, 87, 89, nil, - nil, nil, nil, 82, 90, nil, nil, nil, 74, 75, - 71, 62, 57, 83, 95, 96, 63, 64, nil, nil, - nil, 67, nil, 65, 66, 68, 311, 312, 72, 73, - nil, nil, nil, nil, nil, 307, 308, 314, 103, 102, - 104, 105, nil, nil, 232, nil, nil, nil, nil, nil, - nil, 45, nil, nil, 107, 106, 108, 97, 56, 99, - 98, 100, 286, 101, 109, 110, nil, 93, 94, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 225, nil, nil, 231, nil, nil, 58, 59, nil, - nil, 60, nil, 629, nil, nil, nil, 44, nil, nil, - 287, nil, nil, nil, nil, nil, 230, nil, nil, nil, - nil, 91, 284, 84, 85, nil, 86, 88, 87, 89, - nil, nil, nil, nil, 82, 90, nil, nil, nil, 74, - 75, 71, 62, 57, 83, 95, 96, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 311, 312, 72, - 73, nil, nil, nil, nil, nil, 307, 308, 314, 103, - 102, 104, 105, nil, nil, 232, nil, nil, nil, nil, - nil, nil, 45, nil, nil, 107, 106, 108, 97, 56, - 99, 98, 100, 286, 101, 109, 110, nil, 93, 94, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 225, nil, nil, 231, nil, nil, 58, 59, - nil, nil, 60, nil, nil, nil, nil, nil, 44, nil, - nil, 287, nil, nil, nil, nil, nil, 230, nil, nil, - nil, nil, 91, 284, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - 74, 75, 71, 62, 57, 83, 95, 96, 63, 64, - nil, nil, nil, 67, nil, 65, 66, 68, 311, 312, - 72, 73, nil, nil, nil, nil, nil, 307, 308, 314, - 103, 102, 104, 105, nil, nil, 232, nil, nil, nil, - nil, nil, nil, 45, nil, nil, 107, 106, 108, 97, - 56, 99, 98, 100, nil, 101, 109, 110, nil, 93, - 94, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 225, nil, nil, 231, nil, nil, 58, - 59, nil, nil, 60, nil, 283, nil, nil, nil, 44, - nil, nil, nil, nil, nil, nil, nil, nil, 230, nil, - nil, nil, nil, 91, 81, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, nil, nil, - nil, 74, 75, 71, 62, 57, 83, 95, 96, 63, - 64, nil, nil, nil, 67, nil, 65, 66, 68, 30, - 31, 72, 73, nil, nil, nil, nil, nil, 29, 28, - 27, 103, 102, 104, 105, nil, nil, 232, nil, nil, - nil, nil, nil, nil, 45, nil, nil, 107, 106, 108, - 97, 56, 99, 98, 100, 286, 101, 109, 110, nil, - 93, 94, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 225, nil, nil, 231, nil, nil, - 58, 59, nil, nil, 60, nil, 283, nil, 281, nil, - 44, nil, nil, 287, nil, nil, nil, nil, nil, 230, - nil, nil, nil, nil, 91, 284, 84, 85, nil, 86, - 88, 87, 89, nil, nil, nil, nil, 82, 90, nil, - nil, nil, 74, 75, 71, 62, 57, 83, 95, 96, - 63, 64, nil, nil, nil, 67, nil, 65, 66, 68, - 30, 31, 72, 73, nil, nil, nil, nil, nil, 29, - 28, 27, 103, 102, 104, 105, nil, nil, 232, nil, - nil, nil, nil, nil, nil, 45, nil, nil, 107, 106, - 108, 97, 56, 99, 98, 100, 286, 101, 109, 110, - nil, 93, 94, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 225, nil, nil, 231, nil, - nil, 58, 59, nil, nil, 60, nil, 283, nil, 281, - nil, 44, nil, nil, 287, nil, nil, nil, nil, nil, - 230, nil, nil, nil, nil, 91, 284, 84, 85, nil, - 86, 88, 87, 89, nil, nil, nil, nil, 82, 90, - nil, nil, nil, 74, 75, 71, 62, 57, 83, 95, - 96, 63, 64, nil, nil, nil, 67, nil, 65, 66, - 68, 311, 312, 72, 73, nil, nil, nil, nil, nil, - 307, 308, 314, 103, 102, 104, 105, nil, nil, 232, - nil, nil, nil, nil, nil, nil, 45, nil, nil, 107, - 106, 108, 97, 56, 99, 98, 100, nil, 101, 109, - 110, nil, 93, 94, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 225, nil, nil, 231, - nil, nil, 58, 59, nil, nil, 60, nil, 734, nil, - nil, nil, 44, nil, nil, nil, nil, nil, nil, nil, - nil, 230, nil, nil, nil, nil, 91, 81, 84, 85, - nil, 86, 88, 87, 89, nil, nil, nil, nil, 82, - 90, nil, nil, nil, 74, 75, 71, 62, 57, 83, - 95, 96, 63, 64, nil, nil, nil, 67, nil, 65, - 66, 68, 311, 312, 72, 73, nil, nil, nil, nil, - nil, 307, 308, 314, 103, 102, 104, 105, nil, nil, - 232, nil, nil, nil, nil, nil, nil, 45, nil, nil, - 107, 106, 108, 97, 56, 99, 98, 100, nil, 101, - 109, 110, nil, 93, 94, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 225, nil, nil, - 231, nil, nil, 58, 59, nil, nil, 60, nil, nil, - nil, nil, nil, 44, nil, nil, nil, nil, nil, nil, - nil, nil, 230, nil, nil, nil, nil, 91, 81, 84, - 85, nil, 86, 88, 87, 89, nil, nil, nil, nil, - 82, 90, nil, nil, nil, 74, 75, 71, 62, 57, - 83, 95, 96, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 311, 312, 72, 73, nil, nil, nil, - nil, nil, 307, 308, 314, 103, 102, 104, 105, nil, - nil, 232, nil, nil, nil, nil, nil, nil, 45, nil, - nil, 107, 106, 108, 97, 56, 99, 98, 100, 286, - 101, 109, 110, nil, 93, 94, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 225, nil, - nil, 231, nil, nil, 58, 59, nil, nil, 60, nil, - 629, nil, 281, nil, 44, nil, nil, 287, nil, nil, - nil, nil, nil, 230, nil, nil, nil, nil, 91, 284, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, 74, 75, 71, 62, - 57, 83, 95, 96, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 311, 312, 72, 73, nil, nil, - nil, nil, nil, 307, 308, 314, 103, 102, 104, 105, - nil, nil, 232, nil, nil, nil, nil, nil, nil, 45, - nil, nil, 107, 106, 108, 97, 56, 99, 98, 100, - 286, 101, 109, 110, nil, 93, 94, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 225, - nil, nil, 231, nil, nil, 58, 59, nil, nil, 60, - nil, nil, nil, 281, nil, 44, nil, nil, 287, nil, - nil, nil, nil, nil, 230, nil, nil, nil, nil, 91, - 284, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, nil, nil, 74, 75, 71, - 62, 57, 83, 95, 96, 63, 64, nil, nil, nil, - 67, nil, 65, 66, 68, 30, 31, 72, 73, nil, - nil, nil, nil, nil, 29, 28, 27, 103, 102, 104, - 105, nil, nil, 232, nil, nil, nil, nil, nil, nil, - 45, nil, nil, 107, 106, 108, 97, 56, 99, 98, - 100, nil, 101, 109, 110, nil, 93, 94, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 225, nil, nil, 231, nil, nil, 58, 59, nil, nil, - 60, nil, nil, nil, nil, nil, 44, nil, nil, nil, - nil, nil, nil, nil, nil, 230, nil, nil, nil, nil, - 91, 81, 84, 85, nil, 86, 88, 87, 89, nil, - nil, nil, nil, 82, 90, nil, nil, nil, 74, 75, - 71, 62, 57, 83, 95, 96, 63, 64, nil, nil, - nil, 67, nil, 65, 66, 68, 30, 31, 72, 73, - nil, nil, nil, nil, nil, 29, 28, 27, 103, 102, - 104, 105, nil, nil, 232, nil, nil, nil, nil, nil, - nil, 45, nil, nil, 107, 106, 108, 97, 56, 99, - 98, 100, nil, 101, 109, 110, nil, 93, 94, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 225, nil, nil, 231, nil, nil, 58, 59, nil, - nil, 60, nil, nil, nil, nil, nil, 44, nil, nil, - nil, nil, nil, nil, nil, nil, 230, nil, nil, nil, - nil, 91, 81, 84, 85, nil, 86, 88, 87, 89, - nil, nil, nil, nil, 82, 90, nil, nil, nil, 74, - 75, 71, 62, 57, 83, 95, 96, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 232, nil, nil, nil, nil, - nil, nil, 45, nil, nil, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 225, nil, nil, 231, nil, nil, 58, 59, - nil, nil, 60, nil, nil, nil, nil, nil, 44, nil, - nil, nil, nil, nil, nil, nil, nil, 230, nil, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - 74, 75, 71, 62, 57, 83, 95, 96, 63, 64, - nil, nil, nil, 67, nil, 65, 66, 68, 30, 31, - 72, 73, nil, nil, nil, nil, nil, 29, 28, 27, - 103, 102, 104, 105, nil, nil, 232, nil, nil, nil, - nil, nil, nil, 45, nil, nil, 107, 106, 108, 97, - 56, 99, 98, 100, nil, 101, 109, 110, nil, 93, - 94, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 225, nil, nil, 231, nil, nil, 58, - 59, nil, nil, 60, nil, nil, nil, nil, nil, 44, - nil, nil, nil, nil, nil, nil, nil, nil, 230, nil, - nil, nil, nil, 91, 81, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, nil, nil, - nil, 74, 75, 71, 62, 57, 83, 95, 96, 63, - 64, nil, nil, nil, 67, nil, 65, 66, 68, 30, - 31, 72, 73, nil, nil, nil, nil, nil, 29, 28, - 27, 103, 102, 104, 105, nil, nil, 232, nil, nil, - nil, nil, nil, nil, 45, nil, nil, 107, 106, 108, - 97, 56, 99, 98, 100, nil, 101, 109, 110, nil, - 93, 94, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 225, nil, nil, 231, nil, nil, - 58, 59, nil, nil, 60, nil, nil, nil, nil, nil, - 44, nil, nil, nil, nil, nil, nil, nil, nil, 230, - nil, nil, nil, nil, 91, 81, 84, 85, nil, 86, - 88, 87, 89, nil, nil, nil, nil, 82, 90, nil, - nil, nil, 74, 75, 71, 62, 57, 83, 95, 96, - 63, 64, nil, nil, nil, 67, nil, 65, 66, 68, - 311, 312, 72, 73, nil, nil, nil, nil, nil, 307, - 308, 314, 103, 102, 104, 105, nil, nil, 232, nil, - nil, nil, nil, nil, nil, 45, nil, nil, 107, 106, - 108, 97, 56, 99, 98, 100, nil, 101, 109, 110, - nil, 93, 94, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 225, nil, nil, 231, nil, - nil, 58, 59, nil, nil, 60, nil, nil, nil, nil, - nil, 44, nil, nil, nil, nil, nil, nil, nil, nil, - 230, nil, nil, nil, nil, 91, 81, 84, 85, nil, - 86, 88, 87, 89, nil, nil, nil, nil, 82, 90, - nil, nil, nil, 74, 75, 71, 62, 57, 83, 95, - 96, 63, 64, nil, nil, nil, 67, nil, 65, 66, - 68, 311, 312, 72, 73, nil, nil, nil, nil, nil, - 307, 308, 314, 103, 102, 104, 105, nil, nil, 232, - nil, nil, nil, nil, nil, nil, 45, nil, nil, 107, - 106, 108, 97, 56, 99, 98, 100, nil, 101, 109, - 110, nil, 93, 94, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 225, nil, nil, 231, - nil, nil, 58, 59, nil, nil, 60, nil, nil, nil, - nil, nil, 44, nil, nil, nil, nil, nil, nil, nil, - nil, 230, nil, nil, nil, nil, 91, 81, 84, 85, - nil, 86, 88, 87, 89, nil, nil, nil, nil, 82, - 90, nil, nil, nil, 74, 75, 71, 62, 57, 83, - 95, 96, 63, 64, nil, nil, nil, 67, nil, 65, - 66, 68, 311, 312, 72, 73, nil, nil, nil, nil, - nil, 307, 308, 314, 103, 102, 104, 105, nil, nil, - 232, nil, nil, nil, nil, nil, nil, 45, nil, nil, - 107, 106, 108, 97, 56, 99, 98, 100, nil, 101, - 109, 110, nil, 93, 94, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 225, nil, nil, - 231, nil, nil, 58, 59, nil, nil, 60, nil, nil, - nil, nil, nil, 44, nil, nil, nil, nil, nil, nil, - nil, nil, 230, nil, nil, nil, nil, 91, 81, 84, - 85, nil, 86, 88, 87, 89, nil, nil, nil, nil, - 82, 90, nil, nil, nil, 74, 75, 71, 62, 57, - 83, 95, 96, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 311, 312, 72, 73, nil, nil, nil, - nil, nil, 307, 308, 314, 103, 102, 104, 105, nil, - nil, 232, nil, nil, nil, nil, nil, nil, 309, nil, - nil, 107, 106, 108, 97, 56, 99, 98, 100, nil, - 101, 109, 110, nil, 93, 94, nil, nil, 315, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 305, nil, - nil, 301, nil, nil, 58, 59, nil, nil, 60, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, 74, 75, 71, 62, - 57, 83, 95, 96, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 311, 312, 72, 73, nil, nil, - nil, nil, nil, 307, 308, 314, 103, 102, 104, 105, - nil, nil, 232, nil, nil, nil, nil, nil, nil, 309, - nil, nil, 107, 106, 108, 97, 56, 99, 98, 100, - nil, 101, 109, 110, nil, 93, 94, nil, nil, 315, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 305, - nil, nil, 301, nil, nil, 58, 59, nil, nil, 60, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, nil, nil, 74, 75, 71, - 62, 57, 83, 95, 96, 63, 64, nil, nil, nil, - 67, nil, 65, 66, 68, 311, 312, 72, 73, nil, - nil, nil, nil, nil, 307, 308, 314, 103, 102, 104, - 105, nil, nil, 232, nil, nil, nil, nil, nil, nil, - 45, nil, nil, 107, 106, 108, 97, 56, 99, 98, - 100, nil, 101, 109, 110, nil, 93, 94, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 225, nil, nil, 231, nil, nil, 58, 59, nil, nil, - 60, nil, 405, nil, nil, nil, 44, nil, nil, nil, - nil, nil, nil, nil, nil, 230, nil, nil, nil, nil, - 91, 81, 84, 85, nil, 86, 88, 87, 89, nil, - nil, nil, nil, 82, 90, nil, nil, nil, 74, 75, - 71, 62, 57, 83, 95, 96, 63, 64, nil, nil, - nil, 67, nil, 65, 66, 68, 311, 312, 72, 73, - nil, nil, nil, nil, nil, 307, 308, 314, 103, 102, - 104, 105, nil, nil, 232, nil, nil, nil, nil, nil, - nil, 45, nil, nil, 107, 106, 108, 97, 56, 99, - 98, 100, nil, 101, 109, 110, nil, 93, 94, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 225, nil, nil, 231, nil, nil, 58, 59, nil, - nil, 60, nil, nil, nil, nil, nil, 44, nil, nil, - nil, nil, nil, nil, nil, nil, 230, nil, nil, nil, - nil, 91, 81, 84, 85, nil, 86, 88, 87, 89, - nil, nil, nil, nil, 82, 90, nil, nil, nil, 74, - 75, 71, 62, 57, 83, 95, 96, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 19, nil, nil, nil, nil, - nil, nil, 45, nil, nil, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 225, nil, nil, 231, nil, nil, 58, 59, - nil, nil, 60, nil, nil, nil, nil, nil, 44, nil, - nil, nil, nil, nil, nil, nil, nil, 20, nil, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - 74, 75, 71, 62, 57, 83, 95, 96, 63, 64, - nil, nil, nil, 67, nil, 65, 66, 68, 30, 31, - 72, 73, nil, nil, nil, nil, nil, 29, 28, 27, - 103, 102, 104, 105, nil, nil, 19, nil, nil, nil, - nil, nil, nil, 45, nil, nil, 107, 106, 108, 97, - 56, 99, 98, 100, nil, 101, 109, 110, nil, 93, - 94, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 225, nil, nil, 231, nil, nil, 58, - 59, nil, nil, 60, nil, nil, nil, nil, nil, 44, - nil, nil, nil, nil, nil, nil, nil, nil, 20, nil, - nil, nil, nil, 91, 81, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, nil, nil, - nil, 74, 75, 71, 62, 57, 83, 95, 96, 63, - 64, nil, nil, nil, 67, nil, 65, 66, 68, 311, - 312, 72, 73, nil, nil, nil, nil, nil, 307, 308, - 314, 103, 102, 104, 105, nil, nil, 232, nil, nil, - nil, nil, nil, nil, 45, nil, nil, 107, 106, 108, - 97, 56, 99, 98, 100, nil, 101, 109, 110, nil, - 93, 94, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 225, nil, nil, 231, nil, nil, - 58, 59, nil, nil, 60, nil, nil, nil, nil, nil, - 44, nil, nil, nil, nil, nil, nil, nil, nil, 230, - nil, nil, nil, nil, 91, 81, 84, 85, nil, 86, - 88, 87, 89, nil, nil, nil, nil, 82, 90, nil, - nil, nil, 74, 75, 71, 62, 57, 83, 95, 96, - 63, 64, nil, nil, nil, 67, nil, 65, 66, 68, - 30, 31, 72, 73, nil, nil, nil, nil, nil, 29, - 28, 27, 103, 102, 104, 105, nil, nil, 232, nil, - nil, nil, nil, nil, nil, 45, nil, nil, 107, 106, - 108, 97, 56, 99, 98, 100, nil, 101, 109, 110, - nil, 93, 94, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 225, nil, nil, 231, nil, - nil, 58, 59, nil, nil, 60, nil, nil, nil, nil, - nil, 44, nil, nil, nil, nil, nil, nil, nil, nil, - 230, nil, nil, nil, nil, 91, 81, 84, 85, nil, - 86, 88, 87, 89, nil, nil, nil, nil, 82, 90, - nil, nil, nil, 74, 75, 71, 62, 57, 83, 95, - 96, 63, 64, nil, nil, nil, 67, nil, 65, 66, - 68, 311, 312, 72, 73, nil, nil, nil, nil, nil, - 307, 308, 314, 103, 102, 104, 105, nil, nil, 232, - nil, nil, nil, nil, nil, nil, 45, nil, nil, 107, - 106, 108, 97, 56, 99, 98, 100, nil, 101, 109, - 110, nil, 93, 94, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 225, nil, nil, 231, - nil, nil, 58, 59, nil, nil, 60, nil, nil, nil, - nil, nil, 44, nil, nil, nil, nil, nil, nil, nil, - nil, 230, nil, nil, nil, nil, 91, 81, 84, 85, - nil, 86, 88, 87, 89, nil, nil, nil, nil, 82, - 90, nil, nil, nil, 74, 75, 71, 62, 57, 83, - 95, 96, 63, 64, nil, nil, nil, 67, nil, 65, - 66, 68, 311, 312, 72, 73, nil, nil, nil, nil, - nil, 307, 308, 314, 103, 102, 104, 105, nil, nil, - 232, nil, nil, nil, nil, nil, nil, 45, nil, nil, - 107, 106, 108, 97, 56, 99, 98, 100, nil, 101, - 109, 110, nil, 93, 94, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 225, nil, nil, - 231, nil, nil, 58, 59, nil, nil, 60, nil, nil, - nil, nil, nil, 44, nil, nil, nil, nil, nil, nil, - nil, nil, 230, nil, nil, nil, nil, 91, 81, 84, - 85, nil, 86, 88, 87, 89, nil, nil, nil, nil, - 82, 90, nil, nil, nil, 74, 75, 71, 62, 57, - 83, 95, 96, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 311, 312, 72, 73, nil, nil, nil, - nil, nil, 307, 308, 314, 103, 102, 104, 105, nil, - nil, 232, nil, nil, nil, nil, nil, nil, 45, nil, - nil, 107, 106, 108, 97, 56, 99, 98, 100, nil, - 101, 109, 110, nil, 93, 94, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 225, nil, - nil, 231, nil, nil, 58, 59, nil, nil, 60, nil, - nil, nil, nil, nil, 44, nil, nil, nil, nil, nil, - nil, nil, nil, 230, nil, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, 74, 75, 71, 62, - 57, 83, 95, 96, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 311, 312, 72, 73, nil, nil, - nil, nil, nil, 307, 308, 314, 103, 102, 104, 105, - nil, nil, 232, nil, nil, nil, nil, nil, nil, 45, - nil, nil, 107, 106, 108, 97, 56, 99, 98, 100, - nil, 101, 109, 110, nil, 93, 94, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 225, - nil, nil, 231, nil, nil, 58, 59, nil, nil, 60, - nil, nil, nil, nil, nil, 44, nil, nil, nil, nil, - nil, nil, nil, nil, 230, nil, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, nil, nil, 74, 75, 71, - 62, 57, 83, 95, 96, 63, 64, nil, nil, nil, - 67, nil, 65, 66, 68, 311, 312, 72, 73, nil, - nil, nil, nil, nil, 307, 308, 314, 103, 102, 104, - 105, nil, nil, 232, nil, nil, nil, nil, nil, nil, - 45, nil, nil, 107, 106, 108, 97, 56, 99, 98, - 100, nil, 101, 109, 110, nil, 93, 94, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 225, nil, nil, 231, nil, nil, 58, 59, nil, nil, - 60, nil, nil, nil, nil, nil, 44, nil, nil, nil, - nil, nil, nil, nil, nil, 230, nil, nil, nil, nil, - 91, 81, 84, 85, nil, 86, 88, 87, 89, nil, - nil, nil, nil, 82, 90, nil, nil, nil, 74, 75, - 71, 62, 57, 83, 95, 96, 63, 64, nil, nil, - nil, 67, nil, 65, 66, 68, 311, 312, 72, 73, - nil, nil, nil, nil, nil, 307, 308, 314, 103, 102, - 104, 105, nil, nil, 232, nil, nil, nil, nil, nil, - nil, 309, nil, nil, 107, 106, 108, 97, 56, 99, - 98, 100, nil, 101, 109, 110, nil, 93, 94, nil, - nil, 315, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 857, nil, nil, 231, nil, nil, 58, 59, nil, - nil, 60, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 91, 81, 84, 85, nil, 86, 88, 87, 89, - nil, nil, nil, nil, 82, 90, nil, nil, nil, 74, - 75, 71, 62, 57, 83, 95, 96, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 311, 312, 72, - 73, nil, nil, nil, nil, nil, 307, 308, 314, 103, - 102, 104, 105, nil, nil, 232, nil, nil, nil, nil, - nil, nil, 45, nil, nil, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 225, nil, nil, 231, nil, nil, 58, 59, - nil, nil, 60, nil, nil, nil, nil, nil, 44, nil, - nil, nil, nil, nil, nil, nil, nil, 230, nil, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - 74, 75, 71, 62, 57, 83, 95, 96, 63, 64, - nil, nil, nil, 67, nil, 65, 66, 68, 30, 31, - 72, 73, nil, nil, nil, nil, nil, 29, 28, 27, - 103, 102, 104, 105, nil, nil, 19, nil, nil, nil, - nil, nil, nil, 45, nil, nil, 107, 106, 108, 97, - 56, 99, 98, 100, nil, 101, 109, 110, nil, 93, - 94, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 225, nil, nil, 231, nil, nil, 58, - 59, nil, nil, 60, nil, nil, nil, nil, nil, 44, - nil, nil, nil, nil, nil, nil, nil, nil, 20, nil, - nil, nil, nil, 91, 81, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, nil, nil, - nil, 74, 75, 71, 62, 57, 83, 95, 96, 63, - 64, nil, nil, nil, 67, nil, 65, 66, 68, 311, - 312, 72, 73, nil, nil, nil, nil, nil, 307, 308, - 314, 103, 102, 104, 105, nil, nil, 232, nil, nil, - nil, nil, nil, nil, 45, nil, nil, 107, 106, 108, - 97, 56, 99, 98, 100, nil, 101, 109, 110, nil, - 93, 94, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 225, nil, nil, 231, nil, nil, - 58, 59, nil, nil, 60, nil, 629, nil, nil, nil, - 44, nil, nil, nil, nil, nil, nil, nil, nil, 230, - nil, nil, nil, nil, 91, 81, 84, 85, nil, 86, - 88, 87, 89, nil, nil, nil, nil, 82, 90, nil, - nil, nil, 74, 75, 71, 62, 57, 83, 95, 96, - 63, 64, nil, nil, nil, 67, nil, 65, 66, 68, - 311, 312, 72, 73, nil, nil, nil, nil, nil, 307, - 308, 314, 103, 102, 104, 105, nil, nil, 232, nil, - nil, nil, nil, nil, nil, 45, nil, nil, 107, 106, - 108, 97, 56, 99, 98, 100, 286, 101, 109, 110, - nil, 93, 94, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 225, nil, nil, 231, nil, - nil, 58, 59, nil, nil, 60, nil, nil, nil, 281, - nil, 44, nil, nil, 287, nil, nil, nil, nil, nil, - 230, nil, nil, nil, nil, 91, 284, 84, 85, nil, - 86, 88, 87, 89, nil, nil, nil, nil, 82, 90, - nil, nil, nil, 74, 75, 71, 62, 57, 83, 95, - 96, 63, 64, nil, nil, nil, 67, nil, 65, 66, - 68, 311, 312, 72, 73, nil, nil, nil, nil, nil, - 307, 308, 314, 103, 102, 104, 105, nil, nil, 232, - nil, nil, nil, nil, nil, nil, 45, nil, nil, 107, - 106, 108, 97, 56, 99, 98, 100, nil, 101, 109, - 110, nil, 93, 94, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 225, nil, nil, 231, - nil, nil, 58, 59, nil, nil, 60, nil, nil, nil, - nil, nil, 44, nil, nil, nil, nil, nil, nil, nil, - nil, 230, nil, nil, nil, nil, 91, 81, 84, 85, - nil, 86, 88, 87, 89, nil, nil, nil, nil, 82, - 90, nil, nil, nil, 74, 75, 71, 62, 57, 83, - 95, 96, 63, 64, nil, nil, nil, 67, nil, 65, - 66, 68, 311, 312, 72, 73, nil, nil, nil, nil, - nil, 307, 308, 314, 103, 102, 104, 105, nil, nil, - 232, nil, nil, nil, nil, nil, nil, 309, nil, nil, - 107, 106, 108, 97, 56, 99, 98, 100, nil, 101, - 109, 110, nil, 93, 94, nil, nil, 315, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 857, nil, nil, - 231, nil, nil, 58, 59, nil, nil, 60, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 91, 81, 84, - 85, nil, 86, 88, 87, 89, nil, nil, nil, nil, - 82, 90, nil, nil, nil, 74, 75, 71, 62, 57, - 83, 95, 96, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 311, 312, 72, 73, nil, nil, nil, - nil, nil, 307, 308, 314, 103, 102, 104, 105, nil, - nil, 232, nil, nil, nil, nil, nil, nil, 309, nil, - nil, 107, 106, 108, 97, 56, 99, 98, 100, nil, - 101, 109, 110, nil, 93, 94, nil, nil, 315, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 931, nil, - nil, 231, nil, nil, 58, 59, nil, nil, 60, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, 74, 75, 71, 62, - 57, 83, 95, 96, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 30, 31, 72, 73, nil, nil, - nil, nil, nil, 29, 28, 27, 103, 102, 104, 105, - nil, nil, 232, nil, nil, nil, nil, nil, nil, 45, - nil, nil, 107, 106, 108, 97, 56, 99, 98, 100, - 286, 101, 109, 110, nil, 93, 94, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 225, - nil, nil, 231, nil, nil, 58, 59, nil, nil, 60, - nil, 283, nil, 281, nil, 44, nil, nil, 287, nil, - nil, nil, nil, nil, 230, nil, nil, nil, nil, 91, - 284, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, nil, nil, nil, -280, nil, - 62, nil, 83, 95, 96, -280, -280, -280, nil, nil, - -280, -280, -280, nil, -280, nil, nil, nil, nil, nil, - nil, nil, nil, nil, -280, -280, -280, nil, nil, nil, - nil, nil, nil, nil, -280, -280, nil, -280, -280, -280, - -280, -280, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, -280, -280, -280, -280, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, nil, nil, - -280, -280, -280, nil, nil, -280, nil, nil, -280, nil, - nil, -280, -280, nil, -280, nil, -280, nil, -280, nil, - -280, -280, nil, -280, -280, -280, -280, -280, nil, -280, - nil, -280, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, -280, nil, nil, -280, -280, - -280, -280, -582, -280, nil, -280, nil, nil, nil, -582, - -582, -582, nil, nil, -582, -582, -582, nil, -582, nil, - nil, nil, nil, nil, nil, nil, nil, -582, -582, -582, - -582, nil, nil, nil, nil, nil, nil, nil, -582, -582, - nil, -582, -582, -582, -582, -582, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, -582, -582, - -582, -582, -582, -582, -582, -582, -582, -582, -582, -582, - -582, -582, nil, nil, -582, -582, -582, nil, nil, -582, - nil, nil, -582, nil, nil, -582, -582, nil, -582, nil, - -582, nil, -582, nil, -582, -582, nil, -582, -582, -582, - -582, -582, nil, -582, -582, -582, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, -582, - nil, nil, -582, -582, -582, -582, -583, -582, nil, -582, - nil, nil, nil, -583, -583, -583, nil, nil, -583, -583, - -583, nil, -583, nil, nil, nil, nil, nil, nil, nil, - nil, -583, -583, -583, -583, nil, nil, nil, nil, nil, - nil, nil, -583, -583, nil, -583, -583, -583, -583, -583, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, -583, -583, -583, -583, -583, -583, -583, -583, - -583, -583, -583, -583, -583, -583, nil, nil, -583, -583, - -583, nil, nil, -583, nil, nil, -583, nil, nil, -583, - -583, nil, -583, nil, -583, nil, -583, nil, -583, -583, - nil, -583, -583, -583, -583, -583, nil, -583, -583, -583, - 672, nil, 669, 668, 667, 677, 670, nil, nil, nil, - nil, nil, nil, -583, nil, 680, -583, -583, -583, -583, - -414, -583, nil, -583, nil, nil, nil, -414, -414, -414, - nil, nil, -414, -414, -414, nil, -414, 675, nil, nil, - nil, nil, nil, nil, nil, -414, -414, -414, 688, 687, - nil, nil, nil, 681, nil, nil, -414, -414, nil, -414, - -414, -414, -414, -414, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, -414, -414, -414, -414, - -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, - nil, nil, -414, -414, -414, nil, nil, -414, nil, 265, - -414, nil, nil, -414, -414, nil, -414, nil, -414, nil, - -414, nil, -414, -414, nil, -414, -414, -414, -414, -414, - -296, -414, -414, -414, nil, nil, nil, -296, -296, -296, - nil, nil, -296, -296, -296, nil, -296, -414, nil, nil, - -414, -414, nil, -414, nil, -414, -296, -296, nil, nil, - nil, nil, nil, nil, nil, nil, -296, -296, nil, -296, - -296, -296, -296, -296, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - nil, nil, -296, -296, -296, nil, nil, -296, nil, 274, - -296, nil, nil, -296, -296, nil, -296, nil, -296, nil, - -296, nil, -296, -296, nil, -296, -296, -296, -296, -296, - nil, -296, -244, -296, nil, nil, nil, nil, nil, -244, - -244, -244, nil, nil, -244, -244, -244, -296, -244, nil, - -296, -296, nil, -296, nil, -296, nil, -244, -244, -244, - nil, nil, nil, nil, nil, nil, nil, nil, -244, -244, - nil, -244, -244, -244, -244, -244, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, -244, -244, - -244, -244, -244, -244, -244, -244, -244, -244, -244, -244, - -244, -244, nil, nil, -244, -244, -244, nil, nil, -244, - nil, 265, -244, nil, nil, -244, -244, nil, -244, nil, - -244, nil, -244, nil, -244, -244, nil, -244, -244, -244, - -244, -244, nil, -244, -244, -244, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, -244, - nil, -244, -244, -244, nil, -244, nil, -244, -244, -244, - -244, nil, nil, -244, -244, -244, 672, -244, 669, 668, - 667, 677, 670, nil, nil, nil, -244, -244, nil, nil, - nil, 680, nil, nil, nil, nil, nil, -244, -244, nil, - -244, -244, -244, -244, -244, nil, nil, nil, nil, nil, - nil, nil, nil, 675, nil, 672, nil, 669, 668, 667, - 677, 670, 685, 684, 688, 687, nil, nil, nil, 681, - 680, nil, nil, nil, nil, nil, nil, nil, -244, nil, - nil, nil, nil, nil, nil, -244, nil, nil, nil, nil, - 265, -244, 675, 658, nil, 220, nil, nil, nil, nil, - nil, 685, 684, 688, 687, nil, nil, nil, 681, nil, - nil, nil, nil, -244, -244, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, -244, nil, - nil, -244, nil, nil, nil, nil, -244, 175, 186, 176, - 199, 172, 192, 182, 181, 202, 203, 197, 180, 179, - 174, 200, 204, 205, 184, 173, 187, 191, 193, 185, - 178, nil, nil, nil, 194, 201, 196, 195, 188, 198, - 183, 171, 190, 189, nil, nil, nil, nil, nil, 170, - 177, 168, 169, 165, 166, 167, 126, 128, 125, nil, - 127, nil, nil, nil, nil, nil, nil, nil, 159, 160, - nil, 156, 138, 139, 140, 147, 144, 146, nil, nil, - 141, 142, nil, nil, nil, 161, 162, 148, 149, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 153, 152, nil, 137, 158, 155, 154, 163, - 150, 151, 145, 143, 135, 157, 136, nil, nil, 164, - 91, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 90, 175, 186, 176, 199, 172, - 192, 182, 181, 202, 203, 197, 180, 179, 174, 200, - 204, 205, 184, 173, 187, 191, 193, 185, 178, nil, - nil, nil, 194, 201, 196, 195, 188, 198, 183, 171, - 190, 189, nil, nil, nil, nil, nil, 170, 177, 168, - 169, 165, 166, 167, 126, 128, nil, nil, 127, nil, - nil, nil, nil, nil, nil, nil, 159, 160, nil, 156, - 138, 139, 140, 147, 144, 146, nil, nil, 141, 142, - nil, nil, nil, 161, 162, 148, 149, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 153, 152, nil, 137, 158, 155, 154, 163, 150, 151, - 145, 143, 135, 157, 136, nil, nil, 164, 91, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 90, 175, 186, 176, 199, 172, 192, 182, - 181, 202, 203, 197, 180, 179, 174, 200, 204, 205, - 184, 173, 187, 191, 193, 185, 178, nil, nil, nil, - 194, 201, 196, 195, 188, 198, 183, 171, 190, 189, - nil, nil, nil, nil, nil, 170, 177, 168, 169, 165, - 166, 167, 126, 128, nil, nil, 127, nil, nil, nil, - nil, nil, nil, nil, 159, 160, nil, 156, 138, 139, - 140, 147, 144, 146, nil, nil, 141, 142, nil, nil, - nil, 161, 162, 148, 149, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 153, 152, - nil, 137, 158, 155, 154, 163, 150, 151, 145, 143, - 135, 157, 136, nil, nil, 164, 91, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 90, 175, 186, 176, 199, 172, 192, 182, 181, 202, - 203, 197, 180, 179, 174, 200, 204, 205, 184, 173, - 187, 191, 193, 185, 178, nil, nil, nil, 194, 201, - 196, 195, 188, 198, 183, 171, 190, 189, nil, nil, - nil, nil, nil, 170, 177, 168, 169, 165, 166, 167, - 126, 128, nil, nil, 127, nil, nil, nil, nil, nil, - nil, nil, 159, 160, nil, 156, 138, 139, 140, 147, - 144, 146, nil, nil, 141, 142, nil, nil, nil, 161, - 162, 148, 149, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 153, 152, nil, 137, - 158, 155, 154, 163, 150, 151, 145, 143, 135, 157, - 136, nil, nil, 164, 91, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 90, 175, - 186, 176, 199, 172, 192, 182, 181, 202, 203, 197, - 180, 179, 174, 200, 204, 205, 184, 173, 187, 191, - 193, 185, 178, nil, nil, nil, 194, 201, 196, 372, - 371, 373, 370, 171, 190, 189, nil, nil, nil, nil, - nil, 170, 177, 168, 169, 367, 368, 369, 365, 128, - 99, 98, 366, nil, 101, nil, nil, nil, nil, nil, - 159, 160, nil, 156, 138, 139, 140, 147, 144, 146, - nil, nil, 141, 142, nil, nil, nil, 161, 162, 148, - 149, nil, nil, nil, nil, nil, 377, nil, nil, nil, - nil, nil, nil, nil, 153, 152, nil, 137, 158, 155, - 154, 163, 150, 151, 145, 143, 135, 157, 136, nil, - nil, 164, 175, 186, 176, 199, 172, 192, 182, 181, - 202, 203, 197, 180, 179, 174, 200, 204, 205, 184, - 173, 187, 191, 193, 185, 178, nil, nil, nil, 194, - 201, 196, 195, 188, 198, 183, 171, 190, 189, nil, - nil, nil, nil, nil, 170, 177, 168, 169, 165, 166, - 167, 126, 128, nil, nil, 127, nil, nil, nil, nil, - nil, nil, nil, 159, 160, nil, 156, 138, 139, 140, - 147, 144, 146, nil, nil, 141, 142, nil, nil, nil, - 161, 162, 148, 149, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 153, 152, nil, - 137, 158, 155, 154, 163, 150, 151, 145, 143, 135, - 157, 136, 414, 418, 164, nil, 415, nil, nil, nil, - nil, nil, nil, nil, 159, 160, nil, 156, 138, 139, - 140, 147, 144, 146, nil, nil, 141, 142, nil, nil, - nil, 161, 162, 148, 149, nil, nil, nil, nil, nil, - 265, nil, nil, nil, nil, nil, nil, nil, 153, 152, - nil, 137, 158, 155, 154, 163, 150, 151, 145, 143, - 135, 157, 136, 421, 425, 164, nil, 420, nil, nil, - nil, nil, nil, nil, nil, 159, 160, nil, 156, 138, - 139, 140, 147, 144, 146, nil, nil, 141, 142, nil, - nil, nil, 161, 162, 148, 149, nil, nil, nil, nil, - nil, 265, nil, nil, nil, nil, nil, nil, nil, 153, - 152, nil, 137, 158, 155, 154, 163, 150, 151, 145, - 143, 135, 157, 136, 476, 418, 164, nil, 477, nil, - nil, nil, nil, nil, nil, nil, 159, 160, nil, 156, - 138, 139, 140, 147, 144, 146, nil, nil, 141, 142, - nil, nil, nil, 161, 162, 148, 149, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 153, 152, nil, 137, 158, 155, 154, 163, 150, 151, - 145, 143, 135, 157, 136, 608, 418, 164, nil, 609, - nil, nil, nil, nil, nil, nil, nil, 159, 160, nil, - 156, 138, 139, 140, 147, 144, 146, nil, nil, 141, - 142, nil, nil, nil, 161, 162, 148, 149, nil, nil, - nil, nil, nil, 265, nil, nil, nil, nil, nil, nil, - nil, 153, 152, nil, 137, 158, 155, 154, 163, 150, - 151, 145, 143, 135, 157, 136, 610, 425, 164, nil, - 611, nil, nil, nil, nil, nil, nil, nil, 159, 160, - nil, 156, 138, 139, 140, 147, 144, 146, nil, nil, - 141, 142, nil, nil, nil, 161, 162, 148, 149, nil, - nil, nil, nil, nil, 265, nil, nil, nil, nil, nil, - nil, nil, 153, 152, nil, 137, 158, 155, 154, 163, - 150, 151, 145, 143, 135, 157, 136, 640, 418, 164, - nil, 641, nil, nil, nil, nil, nil, nil, nil, 159, - 160, nil, 156, 138, 139, 140, 147, 144, 146, nil, - nil, 141, 142, nil, nil, nil, 161, 162, 148, 149, - nil, nil, nil, nil, nil, 265, nil, nil, nil, nil, - nil, nil, nil, 153, 152, nil, 137, 158, 155, 154, - 163, 150, 151, 145, 143, 135, 157, 136, 643, 425, - 164, nil, 644, nil, nil, nil, nil, nil, nil, nil, - 159, 160, nil, 156, 138, 139, 140, 147, 144, 146, - nil, nil, 141, 142, nil, nil, nil, 161, 162, 148, - 149, nil, nil, nil, nil, nil, 265, nil, nil, nil, - nil, nil, nil, nil, 153, 152, nil, 137, 158, 155, - 154, 163, 150, 151, 145, 143, 135, 157, 136, 608, - 418, 164, nil, 609, nil, nil, nil, nil, nil, nil, - nil, 159, 160, nil, 156, 138, 139, 140, 147, 144, - 146, nil, nil, 141, 142, nil, nil, nil, 161, 162, - 148, 149, nil, nil, nil, nil, nil, 265, nil, nil, - nil, nil, nil, nil, nil, 153, 152, nil, 137, 158, - 155, 154, 163, 150, 151, 145, 143, 135, 157, 136, - 610, 425, 164, nil, 611, nil, nil, nil, nil, nil, - nil, nil, 159, 160, nil, 156, 138, 139, 140, 147, - 144, 146, nil, nil, 141, 142, nil, nil, nil, 161, - 162, 148, 149, nil, nil, nil, nil, nil, 265, nil, - nil, nil, nil, nil, nil, nil, 153, 152, nil, 137, - 158, 155, 154, 163, 150, 151, 145, 143, 135, 157, - 136, 701, 418, 164, nil, 702, nil, nil, nil, nil, - nil, nil, nil, 159, 160, nil, 156, 138, 139, 140, - 147, 144, 146, nil, nil, 141, 142, nil, nil, nil, - 161, 162, 148, 149, nil, nil, nil, nil, nil, 265, - nil, nil, nil, nil, nil, nil, nil, 153, 152, nil, - 137, 158, 155, 154, 163, 150, 151, 145, 143, 135, - 157, 136, 703, 425, 164, nil, 704, nil, nil, nil, - nil, nil, nil, nil, 159, 160, nil, 156, 138, 139, - 140, 147, 144, 146, nil, nil, 141, 142, nil, nil, - nil, 161, 162, 148, 149, nil, nil, nil, nil, nil, - 265, nil, nil, nil, nil, nil, nil, nil, 153, 152, - nil, 137, 158, 155, 154, 163, 150, 151, 145, 143, - 135, 157, 136, 706, 425, 164, nil, 707, nil, nil, - nil, nil, nil, nil, nil, 159, 160, nil, 156, 138, - 139, 140, 147, 144, 146, nil, nil, 141, 142, nil, - nil, nil, 161, 162, 148, 149, nil, nil, nil, nil, - nil, 265, nil, nil, nil, nil, nil, nil, nil, 153, - 152, nil, 137, 158, 155, 154, 163, 150, 151, 145, - 143, 135, 157, 136, 476, 418, 164, nil, 477, nil, - nil, nil, nil, nil, nil, nil, 159, 160, nil, 156, - 138, 139, 140, 147, 144, 146, nil, nil, 141, 142, - nil, nil, nil, 161, 162, 148, 149, nil, nil, nil, - nil, nil, 265, nil, nil, nil, nil, nil, nil, nil, - 153, 152, nil, 137, 158, 155, 154, 163, 150, 151, - 145, 143, 135, 157, 136, 974, 425, 164, nil, 973, - nil, nil, nil, nil, nil, nil, nil, 159, 160, nil, - 156, 138, 139, 140, 147, 144, 146, nil, nil, 141, - 142, nil, nil, nil, 161, 162, 148, 149, nil, nil, - nil, nil, nil, 265, nil, nil, nil, nil, nil, nil, - nil, 153, 152, nil, 137, 158, 155, 154, 163, 150, - 151, 145, 143, 135, 157, 136, 1000, 418, 164, nil, - 1001, nil, nil, nil, nil, nil, nil, nil, 159, 160, - nil, 156, 138, 139, 140, 147, 144, 146, nil, nil, - 141, 142, nil, nil, nil, 161, 162, 148, 149, nil, - nil, nil, nil, nil, 265, nil, nil, nil, nil, nil, - nil, nil, 153, 152, nil, 137, 158, 155, 154, 163, - 150, 151, 145, 143, 135, 157, 136, 1002, 425, 164, - nil, 1003, nil, nil, nil, nil, nil, nil, nil, 159, - 160, nil, 156, 138, 139, 140, 147, 144, 146, nil, - nil, 141, 142, nil, nil, nil, 161, 162, 148, 149, - nil, nil, nil, nil, nil, 265, nil, nil, nil, nil, - nil, nil, nil, 153, 152, nil, 137, 158, 155, 154, - 163, 150, 151, 145, 143, 135, 157, 136, nil, 672, - 164, 669, 668, 667, 677, 670, nil, 672, nil, 669, - 668, 667, 677, 670, 680, nil, nil, nil, nil, nil, - nil, nil, 680, nil, 672, nil, 669, 668, 667, 677, - 670, nil, nil, nil, nil, nil, 675, nil, nil, 680, - nil, nil, nil, nil, 675, 685, 684, 688, 687, nil, - nil, nil, 681, 685, 684, 688, 687, nil, nil, nil, - 681, 675, nil, 672, nil, 669, 668, 667, 677, 670, - 685, 684, 688, 687, nil, nil, nil, 681, 680, nil, - 672, nil, 669, 668, 667, 677, 670, nil, 672, nil, - 669, 668, 667, 677, 670, 680, nil, nil, nil, nil, - 675, nil, nil, 680, nil, nil, nil, nil, nil, 685, - 684, 688, 687, nil, nil, nil, 681, 675, nil, nil, - nil, nil, nil, nil, nil, 675, 685, 684, 688, 687, - nil, nil, nil, 681, 685, 684, 688, 687, nil, nil, - 672, 681, 669, 668, 667, 677, 670, nil, 672, nil, - 669, 668, 667, 677, 670, 680, nil, nil, nil, nil, - nil, nil, nil, 680, nil, 672, nil, 669, 668, 667, - 677, 670, nil, nil, nil, nil, nil, 675, nil, nil, - 680, nil, nil, nil, nil, 675, 685, 684, 688, 687, - nil, nil, nil, 681, 685, 684, 688, 687, nil, nil, - nil, 681, 675, nil, 672, nil, 669, 668, 667, 677, - 670, nil, nil, 688, 687, nil, nil, nil, 681, 680, - nil, 672, nil, 669, 668, 667, 677, 670, 672, nil, - 669, 668, 667, 677, 670, nil, 680, nil, nil, nil, - nil, 675, nil, 680, nil, nil, nil, nil, nil, nil, - 685, 684, 688, 687, nil, nil, nil, 681, 675, nil, - nil, nil, nil, nil, nil, 675, nil, nil, nil, 688, - 687, nil, nil, nil, 681, nil, 688, 687, nil, nil, - 672, 681, 669, 668, 667, 677, 670, 672, nil, 669, - 668, 667, 677, 670, 672, 680, 669, 668, 667, 677, - 670, nil, 680, nil, nil, nil, nil, nil, nil, 680, - nil, nil, nil, nil, nil, nil, nil, 675, nil, nil, - nil, nil, nil, nil, 675, nil, nil, nil, 688, 687, - nil, 675, nil, 681, nil, 688, 687, nil, nil, nil, - 681, nil, 688, 687, nil, nil, nil, 681 ] - -racc_action_check = [ - 97, 1, 61, 438, 438, 346, 347, 97, 97, 97, - 19, 339, 97, 97, 97, 58, 97, 26, 474, 384, - 635, 7, 564, 564, 97, 385, 97, 97, 97, 635, - 620, 898, 10, 898, 350, 360, 97, 97, 340, 97, - 97, 97, 97, 97, 699, 866, 17, 17, 893, 548, - 701, 19, 1000, 474, 1001, 58, 650, 650, 310, 356, - 338, 338, 223, 356, 702, 793, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 12, 26, 97, 97, 97, 384, 97, 97, 540, 61, - 97, 385, 24, 97, 97, 825, 97, 438, 97, 24, - 97, 224, 97, 97, 26, 97, 97, 97, 97, 97, - 1021, 97, 100, 97, 346, 347, 564, 620, 223, 100, - 100, 100, 310, 1002, 100, 100, 100, 97, 100, 339, - 97, 97, 97, 97, 339, 97, 100, 97, 100, 100, - 100, 360, 97, 350, 541, 310, 703, 826, 100, 100, - 650, 100, 100, 100, 100, 100, 340, 224, 548, 701, - 640, 340, 699, 866, 360, 699, 893, 699, 866, 360, - 1000, 893, 1001, 702, 793, 1000, 226, 1001, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 540, 13, 100, 100, 100, 540, 100, 100, - 1002, 641, 100, 16, 825, 100, 100, 704, 100, 22, - 100, 703, 100, 37, 100, 100, 354, 100, 100, 100, - 100, 100, 420, 100, 40, 100, 640, 365, 1021, 420, - 420, 420, 226, 1021, 365, 420, 420, 330, 420, 100, - 330, 1002, 100, 100, 100, 100, 1002, 100, 541, 100, - 355, 826, 482, 541, 100, 703, 826, 331, 420, 420, - 331, 420, 420, 420, 420, 420, 640, 641, 354, 640, - 15, 45, 704, 560, 560, 354, 38, 111, 640, 810, - 354, 810, 810, 810, 354, 810, 206, 482, 420, 420, - 420, 420, 420, 420, 420, 420, 420, 420, 420, 420, - 420, 420, 355, 354, 420, 420, 420, 641, 420, 355, - 641, 483, 420, 39, 355, 420, 704, 15, 355, 641, - 420, 575, 420, 38, 420, 420, 15, 420, 420, 420, - 420, 420, 38, 420, 421, 420, 334, 355, 444, 334, - 608, 421, 421, 421, 41, 41, 483, 421, 421, 420, - 421, 366, 420, 420, 621, 420, 225, 420, 366, 421, - 39, 810, 643, 609, 420, 656, 227, 560, 656, 39, - 421, 421, 560, 421, 421, 421, 421, 421, 949, 228, - 949, 949, 949, 232, 949, 575, 575, 493, 319, 621, - 379, 264, 315, 315, 444, 575, 608, 278, 577, 279, - 421, 421, 421, 421, 421, 421, 421, 421, 421, 421, - 421, 421, 421, 421, 643, 282, 421, 421, 421, 609, - 421, 643, 41, 41, 421, 294, 643, 421, 754, 781, - 643, 706, 421, 3, 421, 319, 421, 421, 3, 421, - 421, 421, 421, 421, 319, 421, 421, 421, 380, 643, - 295, 493, 493, 493, 379, 379, 379, 381, 524, 524, - 949, 421, 577, 577, 421, 421, 610, 421, 493, 421, - 315, 315, 577, 610, 610, 610, 421, 297, 610, 610, - 610, 781, 610, 706, 754, 690, 690, 298, 781, 367, - 706, 610, 610, 610, 610, 706, 367, 781, 918, 706, - 299, 918, 610, 610, 305, 610, 610, 610, 610, 610, - 290, 414, 380, 380, 380, 290, 781, 382, 706, 368, - 383, 381, 381, 381, 386, 125, 368, 798, 798, 308, - 125, 125, 610, 610, 610, 610, 610, 610, 610, 610, - 610, 610, 610, 610, 610, 610, 343, 14, 610, 610, - 610, 343, 610, 610, 14, 469, 610, 415, 414, 610, - 610, 309, 610, 14, 610, 591, 610, 414, 610, 610, - 314, 610, 610, 610, 610, 610, 316, 610, 610, 610, - 320, 382, 382, 382, 383, 383, 383, 469, 386, 386, - 386, 469, 469, 610, 469, 469, 610, 610, 610, 610, - 450, 610, 611, 610, 415, 990, 990, 795, 610, 611, - 611, 611, 591, 415, 611, 611, 611, 795, 611, 323, - 675, 591, 675, 675, 675, 328, 675, 451, 611, 611, - 611, 332, 450, 46, 79, 333, 450, 450, 611, 611, - 46, 611, 611, 611, 611, 611, 79, 369, 335, 46, - 795, 795, 344, 370, 369, 795, 79, 675, 371, 451, - 370, 345, 559, 451, 451, 371, 675, 559, 611, 611, - 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, - 611, 611, 349, 843, 611, 611, 611, 222, 611, 611, - 302, 351, 611, 843, 222, 611, 611, 302, 611, 395, - 611, 401, 611, 222, 611, 611, 302, 611, 611, 611, - 611, 611, 404, 611, 807, 611, 807, 807, 807, 890, - 807, 890, 890, 890, 406, 890, 843, 843, 410, 611, - 412, 843, 611, 611, 611, 611, 303, 611, 413, 611, - 422, 430, 440, 303, 611, 0, 0, 0, 0, 0, - 0, 807, 303, 829, 0, 0, 890, 452, 829, 0, - 807, 0, 0, 0, 0, 0, 0, 0, 6, 6, - 6, 6, 6, 0, 0, 0, 0, 0, 0, 0, - 568, 568, 0, 453, 568, 568, 568, 433, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 454, 0, 0, 0, 455, 0, 0, 0, 0, 0, - 433, 433, 433, 433, 433, 433, 433, 433, 433, 433, - 433, 304, 433, 433, 306, 834, 433, 433, 304, 0, - 834, 306, 0, 480, 484, 0, 0, 304, 500, 0, - 306, 0, 433, 501, 433, 0, 433, 433, 504, 433, - 433, 433, 433, 433, 0, 433, 506, 511, 514, 0, - 0, 0, 0, 321, 0, 0, 0, 0, 522, 372, - 321, 373, 0, 0, 375, 433, 372, 433, 373, 321, - 0, 375, 0, 0, 0, 33, 33, 33, 33, 33, - 33, 523, 525, 348, 33, 33, 537, 542, 543, 33, - 348, 33, 33, 33, 33, 33, 33, 33, 562, 348, - 572, 580, 582, 33, 33, 33, 33, 33, 33, 33, - 588, 592, 33, 597, 602, 612, 614, 409, 33, 33, - 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, - 619, 33, 33, 33, 626, 33, 33, 33, 33, 33, - 409, 409, 409, 409, 409, 409, 409, 409, 409, 409, - 409, 358, 409, 409, 510, 628, 409, 409, 358, 33, - 634, 510, 33, 637, 639, 33, 33, 358, 642, 33, - 510, 33, 409, 645, 409, 33, 409, 409, 646, 409, - 409, 409, 409, 409, 33, 409, 649, 651, 654, 33, - 33, 33, 33, 551, 33, 33, 33, 33, 660, 661, - 551, 663, 33, 33, 664, 409, 665, 674, 682, 551, - 33, 686, 33, 33, 33, 123, 123, 123, 123, 123, - 123, 689, 692, 856, 123, 123, 697, 700, 709, 123, - 856, 123, 123, 123, 123, 123, 123, 123, 714, 856, - 733, 738, 756, 123, 123, 123, 123, 123, 123, 123, - 757, 759, 123, 760, 761, 763, 764, 613, 123, 123, - 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, - 765, 123, 123, 123, 766, 123, 123, 123, 123, 123, - 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, - 613, 644, 613, 613, 922, 770, 613, 613, 644, 123, - 774, 922, 123, 644, 775, 123, 123, 644, 780, 123, - 922, 123, 613, 784, 613, 123, 613, 613, 787, 613, - 613, 613, 613, 613, 123, 613, 788, 791, 794, 123, - 123, 123, 123, 928, 123, 123, 123, 123, 809, 811, - 928, 816, 123, 123, 819, 613, 828, 832, 833, 928, - 123, 836, 123, 123, 123, 208, 208, 208, 208, 208, - 208, 837, 853, 929, 208, 208, 857, 859, 873, 208, - 929, 208, 208, 208, 208, 208, 208, 208, 874, 929, - 878, 879, 881, 208, 208, 208, 208, 208, 208, 208, - 882, 854, 208, 854, 854, 854, 884, 854, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, - 887, 208, 208, 208, 889, 208, 208, 208, 208, 208, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 707, 21, 21, 930, 895, 21, 21, 707, 208, - 896, 930, 208, 707, 902, 208, 208, 707, 906, 208, - 930, 208, 21, 908, 21, 208, 21, 21, 911, 21, - 21, 21, 21, 21, 208, 21, 912, 913, 914, 208, - 208, 208, 208, 932, 208, 208, 208, 208, 916, 931, - 932, 951, 208, 208, 973, 21, 974, 975, 980, 932, - 208, 981, 208, 208, 208, 231, 231, 231, 231, 231, - 231, 982, 983, 979, 231, 231, 984, 985, 986, 231, - 979, 231, 231, 231, 231, 231, 231, 231, 988, 979, - 991, 992, 993, 231, 231, 231, 231, 231, 231, 231, - 994, 972, 231, 972, 972, 972, 995, 972, 231, 231, - 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, - 996, 231, 231, 231, 999, 231, 231, 231, 231, 231, - 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, - 276, 1003, 276, 276, 1012, 1022, 276, 276, 1003, 231, - 1023, 1024, 231, 1003, nil, 231, 231, 1003, nil, 231, - nil, 231, 276, nil, 276, 231, 276, 276, nil, 276, - 276, 276, 276, 276, 231, 276, nil, nil, nil, 231, - 231, 231, 231, nil, 231, 231, 231, 231, nil, nil, - nil, nil, 231, 231, nil, 276, nil, nil, nil, nil, - 231, nil, 231, 231, 231, 296, 296, 296, 296, 296, - 296, nil, nil, nil, 296, 296, nil, nil, nil, 296, - nil, 296, 296, 296, 296, 296, 296, 296, 293, 293, - 293, 293, 293, 296, 296, 296, 296, 296, 296, 296, - nil, nil, 296, 498, 498, 498, 498, 498, 296, 296, - 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, - nil, 296, 296, 296, nil, 296, 296, 296, 296, 296, - 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, - 428, nil, 428, 428, nil, nil, 428, 428, nil, 296, - nil, nil, 296, nil, nil, 296, 296, nil, nil, 296, - nil, 296, 428, nil, 428, 296, 428, 428, nil, 428, - 428, 428, 428, 428, 296, 428, nil, nil, nil, 296, - 296, 296, 296, nil, 296, 296, 296, 296, nil, nil, - nil, nil, 296, 296, nil, 428, nil, nil, nil, nil, - 296, nil, 296, 296, 296, 301, 301, 301, 301, 301, - 301, nil, nil, nil, 301, 301, nil, nil, nil, 301, - nil, 301, 301, 301, 301, 301, 301, 301, nil, nil, - nil, nil, nil, 301, 301, 301, 301, 301, 301, 301, - nil, nil, 301, nil, nil, nil, nil, nil, 301, 301, - 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, - nil, 301, 301, 301, nil, 301, 301, 301, 301, 301, - 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, - 473, nil, 473, 473, nil, nil, 473, 473, nil, 301, - nil, nil, 301, nil, nil, 301, 301, nil, nil, 301, - nil, 301, 473, nil, 473, 301, 473, 473, nil, 473, - 473, 473, 473, 473, 301, 473, nil, nil, nil, 301, - 301, 301, 301, nil, 301, 301, 301, 301, nil, nil, - nil, nil, 301, 301, 473, 473, nil, nil, nil, nil, - 301, nil, 301, 301, 301, 326, 326, 326, 326, 326, - 326, nil, nil, nil, 326, 326, nil, nil, nil, 326, - nil, 326, 326, 326, 326, 326, 326, 326, nil, nil, - nil, nil, nil, 326, 326, 326, 326, 326, 326, 326, - nil, nil, 326, nil, nil, nil, nil, nil, 326, 326, - 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, - nil, 326, 326, 326, nil, 326, 326, 326, 326, 326, - 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, - 520, nil, 520, 520, nil, nil, 520, 520, nil, 326, - nil, nil, 326, nil, nil, 326, 326, nil, nil, 326, - nil, 326, 520, nil, 520, 326, 520, 520, nil, 520, - 520, 520, 520, 520, 326, 520, nil, nil, nil, 326, - 326, 326, 326, nil, 326, 326, 326, 326, nil, nil, - nil, nil, 326, 326, nil, 520, nil, nil, nil, nil, - 326, nil, 326, 326, 326, 499, 499, 499, 499, 499, - 499, nil, nil, nil, 499, 499, nil, nil, nil, 499, - nil, 499, 499, 499, 499, 499, 499, 499, nil, nil, - nil, nil, nil, 499, 499, 499, 499, 499, 499, 499, - nil, nil, 499, nil, nil, nil, nil, nil, 499, 499, - 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, - nil, 499, 499, 499, nil, 499, 499, 499, 499, 499, - 648, 648, 648, 648, 648, 648, 648, 648, 648, 648, - 648, nil, 648, 648, nil, nil, 648, 648, nil, 499, - nil, nil, 499, nil, nil, 499, 499, nil, nil, 499, - nil, 499, 648, nil, 648, 499, 648, 648, nil, 648, - 648, 648, 648, 648, 499, 648, nil, nil, nil, 499, - 499, 499, 499, nil, 499, 499, 499, 499, nil, nil, - nil, nil, 499, 499, nil, 648, nil, nil, nil, nil, - 499, nil, 499, 499, 499, 536, 536, 536, 536, 536, - 536, nil, nil, nil, 536, 536, nil, nil, nil, 536, - nil, 536, 536, 536, 536, 536, 536, 536, nil, nil, - nil, nil, nil, 536, 536, 536, 536, 536, 536, 536, - nil, nil, 536, nil, nil, nil, nil, nil, 536, 536, - 536, 536, 536, 536, 536, 536, 536, 536, 536, 536, - nil, 536, 536, 536, nil, 536, 536, 536, 536, 536, - 735, 735, 735, 735, 735, 735, 735, 735, 735, 735, - 735, nil, 735, 735, nil, nil, 735, 735, nil, 536, - nil, nil, 536, nil, nil, 536, 536, nil, nil, 536, - nil, 536, 735, nil, 735, 536, 735, 735, nil, 735, - 735, 735, 735, 735, 536, 735, nil, nil, nil, 536, - 536, 536, 536, nil, 536, 536, 536, 536, nil, nil, - nil, nil, 536, 536, nil, 735, nil, nil, nil, nil, - 536, nil, 536, 536, 536, 539, 539, 539, 539, 539, - 539, nil, nil, nil, 539, 539, nil, nil, nil, 539, - nil, 539, 539, 539, 539, 539, 539, 539, nil, nil, - nil, nil, nil, 539, 539, 539, 539, 539, 539, 539, - nil, nil, 539, nil, nil, nil, nil, nil, 539, 539, - 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, - nil, 539, 539, 539, nil, 539, 539, 539, 539, 539, - 740, 740, 740, 740, 740, 740, 740, 740, 740, 740, - 740, nil, 740, 740, nil, nil, 740, 740, nil, 539, - nil, nil, 539, nil, nil, 539, 539, nil, nil, 539, - nil, 539, 740, nil, 740, 539, 740, 740, nil, 740, - 740, 740, 740, 740, 539, 740, nil, nil, nil, 539, - 539, 539, 539, nil, 539, 539, 539, 539, nil, nil, - nil, nil, 539, 539, nil, 740, nil, nil, nil, nil, - 539, nil, 539, 539, 539, 561, 561, 561, 561, 561, - 561, nil, nil, nil, 561, 561, nil, nil, nil, 561, - nil, 561, 561, 561, 561, 561, 561, 561, nil, nil, - nil, nil, nil, 561, 561, 561, 561, 561, 561, 561, - nil, nil, 561, nil, nil, nil, nil, nil, 561, 561, - 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, - nil, 561, 561, 561, nil, 561, 561, 561, 561, 561, - 742, 742, 742, 742, 742, 742, 742, 742, 742, 742, - 742, nil, 742, 742, nil, nil, 742, 742, nil, 561, - nil, nil, 561, nil, nil, 561, 561, nil, nil, 561, - nil, 561, 742, nil, 742, 561, 742, 742, nil, 742, - 742, 742, 742, 742, 561, 742, nil, nil, nil, 561, - 561, 561, 561, nil, 561, 561, 561, 561, nil, nil, - nil, nil, 561, 561, nil, 742, nil, nil, nil, nil, - 561, nil, 561, 561, 561, 618, 618, 618, 618, 618, - 618, nil, nil, nil, 618, 618, nil, nil, nil, 618, - nil, 618, 618, 618, 618, 618, 618, 618, nil, nil, - nil, nil, nil, 618, 618, 618, 618, 618, 618, 618, - nil, nil, 618, nil, nil, nil, nil, nil, 618, 618, - 618, 618, 618, 618, 618, 618, 618, 618, 618, 618, - nil, 618, 618, 618, nil, 618, 618, 618, 618, 618, - 745, 745, 745, 745, 745, 745, 745, 745, 745, 745, - 745, nil, 745, 745, nil, nil, 745, 745, nil, 618, - nil, nil, 618, nil, nil, 618, 618, nil, nil, 618, - nil, 618, 745, nil, 745, 618, 745, 745, nil, 745, - 745, 745, 745, 745, 618, 745, nil, nil, nil, 618, - 618, 618, 618, nil, 618, 618, 618, 618, nil, nil, - nil, nil, 618, 618, nil, 745, nil, nil, nil, nil, - 618, nil, 618, 618, 618, 623, 623, 623, 623, 623, - 623, nil, nil, nil, 623, 623, nil, nil, nil, 623, - nil, 623, 623, 623, 623, 623, 623, 623, nil, nil, - nil, nil, nil, 623, 623, 623, 623, 623, 623, 623, - nil, nil, 623, nil, nil, nil, nil, nil, 623, 623, - 623, 623, 623, 623, 623, 623, 623, 623, 623, 623, - nil, 623, 623, 623, nil, 623, 623, 623, 623, 623, - 747, 747, 747, 747, 747, 747, 747, 747, 747, 747, - 747, nil, 747, 747, nil, nil, 747, 747, nil, 623, - nil, nil, 623, nil, nil, 623, 623, nil, nil, 623, - nil, 623, 747, nil, 747, 623, 747, 747, nil, 747, - 747, 747, 747, 747, 623, 747, nil, nil, nil, 623, - 623, 623, 623, nil, 623, 623, 623, 623, nil, nil, - nil, nil, 623, 623, nil, 747, nil, nil, nil, nil, - 623, nil, 623, 623, 623, 624, 624, 624, 624, 624, - 624, nil, nil, nil, 624, 624, nil, nil, nil, 624, - nil, 624, 624, 624, 624, 624, 624, 624, nil, nil, - nil, nil, nil, 624, 624, 624, 624, 624, 624, 624, - nil, nil, 624, nil, nil, nil, nil, nil, 624, 624, - 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, - nil, 624, 624, 624, nil, 624, 624, 624, 624, 624, - 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, - 749, nil, 749, 749, nil, nil, 749, 749, nil, 624, - nil, nil, 624, nil, nil, 624, 624, nil, nil, 624, - nil, 624, 749, nil, 749, 624, 749, 749, nil, 749, - 749, 749, 749, 749, 624, 749, nil, nil, nil, 624, - 624, 624, 624, nil, 624, 624, 624, 624, nil, nil, - nil, nil, 624, 624, nil, 749, nil, nil, nil, nil, - 624, nil, 624, 624, 624, 710, 710, 710, 710, 710, - 710, nil, nil, nil, 710, 710, nil, nil, nil, 710, - nil, 710, 710, 710, 710, 710, 710, 710, nil, nil, - nil, nil, nil, 710, 710, 710, 710, 710, 710, 710, - nil, nil, 710, nil, nil, nil, nil, nil, 710, 710, - 710, 710, 710, 710, 710, 710, 710, 710, 710, 710, - nil, 710, 710, 710, nil, 710, 710, 710, 710, 710, - 839, 839, 839, 839, 839, 839, 839, 839, 839, 839, - 839, nil, 839, 839, nil, nil, 839, 839, nil, 710, - nil, nil, 710, nil, nil, 710, 710, nil, nil, 710, - nil, 710, 839, nil, 839, 710, 839, 839, nil, 839, - 839, 839, 839, 839, 710, 839, nil, nil, nil, 710, - 710, 710, 710, nil, 710, 710, 710, 710, nil, nil, - nil, nil, 710, 710, nil, 839, nil, nil, nil, nil, - 710, nil, 710, 710, 710, 715, 715, 715, 715, 715, - 715, nil, nil, nil, 715, 715, nil, nil, nil, 715, - nil, 715, 715, 715, 715, 715, 715, 715, nil, nil, - nil, nil, nil, 715, 715, 715, 715, 715, 715, 715, - nil, nil, 715, nil, nil, nil, nil, nil, 715, 715, - 715, 715, 715, 715, 715, 715, 715, 715, 715, 715, - nil, 715, 715, 715, nil, 715, 715, 715, 715, 715, - 842, 842, 842, 842, 842, 842, 842, 842, 842, 842, - 842, nil, 842, 842, nil, nil, 842, 842, nil, 715, - nil, nil, 715, nil, nil, 715, 715, nil, nil, 715, - nil, 715, 842, nil, 842, 715, 842, 842, nil, 842, - 842, 842, 842, 842, 715, 842, nil, nil, nil, 715, - 715, 715, 715, nil, 715, 715, 715, 715, nil, nil, - nil, nil, 715, 715, nil, 842, nil, nil, nil, nil, - 715, nil, 715, 715, 715, 725, 725, 725, 725, 725, - 725, nil, nil, nil, 725, 725, nil, nil, nil, 725, - nil, 725, 725, 725, 725, 725, 725, 725, nil, nil, - nil, nil, nil, 725, 725, 725, 725, 725, 725, 725, - 470, 888, 725, 888, 888, 888, nil, 888, 725, 725, - 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, - nil, 725, 725, 725, nil, 725, 725, 725, 725, 725, - nil, nil, 470, nil, nil, nil, 470, 470, 888, 470, - 470, nil, nil, nil, nil, nil, nil, 888, nil, 725, - nil, nil, 725, nil, nil, 725, 725, nil, nil, 725, - 950, 725, 950, 950, 950, 725, 950, nil, nil, nil, - nil, nil, nil, nil, 725, nil, nil, nil, nil, 725, - 725, 725, 725, nil, 725, 725, 725, 725, nil, nil, - nil, nil, 725, 725, nil, nil, nil, 950, nil, nil, - 725, nil, 725, 725, 725, 773, 773, 773, 773, 773, - 773, nil, nil, nil, 773, 773, nil, nil, nil, 773, - nil, 773, 773, 773, 773, 773, 773, 773, nil, nil, - nil, nil, nil, 773, 773, 773, 773, 773, 773, 773, - nil, nil, 773, nil, nil, nil, nil, nil, 773, 773, - 773, 773, 773, 773, 773, 773, 773, 773, 773, 773, - nil, 773, 773, 773, nil, 773, 773, 773, 773, 773, - 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, - 448, nil, 448, 448, nil, nil, 448, 448, nil, 773, - nil, nil, 773, nil, nil, 773, 773, nil, nil, 773, - nil, 773, 448, nil, 448, 773, 448, 448, nil, 448, - 448, 448, 448, 448, 773, 448, nil, nil, nil, 773, - 773, 773, 773, nil, 773, 773, 773, 773, nil, nil, - nil, nil, 773, 773, nil, 987, nil, 987, 987, 987, - 773, 987, 773, 773, 773, 786, 786, 786, 786, 786, - 786, nil, nil, nil, 786, 786, nil, nil, nil, 786, - nil, 786, 786, 786, 786, 786, 786, 786, nil, nil, - nil, nil, 987, 786, 786, 786, 786, 786, 786, 786, - nil, nil, 786, nil, nil, nil, nil, nil, 786, 786, - 786, 786, 786, 786, 786, 786, 786, 786, 786, 786, - nil, 786, 786, 786, nil, 786, 786, 786, 786, 786, - 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, - 449, nil, 449, 449, nil, nil, 449, 449, nil, 786, - nil, nil, 786, nil, nil, 786, 786, nil, nil, 786, - nil, 786, 449, nil, 449, 786, 449, 449, nil, 449, - 449, 449, 449, 449, 786, 449, nil, nil, nil, 786, - 786, 786, 786, nil, 786, 786, 786, 786, nil, nil, - nil, nil, 786, 786, nil, 989, nil, 989, 989, 989, - 786, 989, 786, 786, 786, 820, 820, 820, 820, 820, - 820, nil, nil, nil, 820, 820, nil, nil, nil, 820, - nil, 820, 820, 820, 820, 820, 820, 820, nil, nil, - nil, nil, 989, 820, 820, 820, 820, 820, 820, 820, - nil, 1011, 820, 1011, 1011, 1011, nil, 1011, 820, 820, - 820, 820, 820, 820, 820, 820, 820, 820, 820, 820, - nil, 820, 820, 820, nil, 820, 820, 820, 820, 820, - 459, 459, 459, 459, 459, 459, 459, nil, 1011, 459, - 459, nil, nil, nil, nil, nil, 459, 459, nil, 820, - nil, nil, 820, nil, nil, 820, 820, nil, nil, 820, - nil, 820, 459, nil, 459, 820, 459, 459, nil, 459, - 459, 459, 459, 459, 820, 459, nil, nil, nil, 820, - 820, 820, 820, nil, 820, 820, 820, 820, nil, nil, - nil, nil, 820, 820, nil, nil, nil, nil, nil, nil, - 820, nil, 820, 820, 820, 821, 821, 821, 821, 821, - 821, nil, nil, nil, 821, 821, nil, nil, nil, 821, - nil, 821, 821, 821, 821, 821, 821, 821, nil, nil, - nil, nil, nil, 821, 821, 821, 821, 821, 821, 821, - nil, nil, 821, nil, nil, nil, nil, nil, 821, 821, - 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, - nil, 821, 821, 821, nil, 821, 821, 821, 821, 821, - 460, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 460, 460, nil, 821, - nil, nil, 821, nil, nil, 821, 821, nil, nil, 821, - nil, 821, 460, nil, 460, 821, 460, 460, nil, 460, - 460, nil, nil, 460, 821, 460, nil, nil, nil, 821, - 821, 821, 821, nil, 821, 821, 821, 821, nil, nil, - nil, nil, 821, 821, nil, nil, nil, nil, nil, nil, - 821, nil, 821, 821, 821, 824, 824, 824, 824, 824, - 824, nil, nil, nil, 824, 824, nil, nil, nil, 824, - nil, 824, 824, 824, 824, 824, 824, 824, nil, nil, - nil, nil, nil, 824, 824, 824, 824, 824, 824, 824, - nil, nil, 824, nil, nil, nil, nil, nil, 824, 824, - 824, 824, 824, 824, 824, 824, 824, 824, 824, 824, - nil, 824, 824, 824, nil, 824, 824, 824, 824, 824, - 461, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 461, 461, nil, 824, - nil, nil, 824, nil, nil, 824, 824, nil, nil, 824, - nil, 824, 461, nil, 461, 824, 461, 461, nil, 461, - 461, nil, nil, 461, 824, 461, nil, nil, nil, 824, - 824, 824, 824, nil, 824, 824, 824, 824, nil, nil, - nil, nil, 824, 824, nil, nil, nil, nil, nil, nil, - 824, nil, 824, 824, 824, 830, 830, 830, 830, 830, - 830, nil, nil, nil, 830, 830, nil, nil, nil, 830, - nil, 830, 830, 830, 830, 830, 830, 830, nil, nil, - nil, nil, nil, 830, 830, 830, 830, 830, 830, 830, - nil, nil, 830, nil, nil, nil, nil, nil, 830, 830, - 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, - nil, 830, 830, 830, nil, 830, 830, 830, 830, 830, - 462, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 462, 462, nil, 830, - nil, nil, 830, nil, nil, 830, 830, nil, nil, 830, - nil, 830, 462, nil, 462, 830, 462, 462, nil, 462, - 462, nil, nil, 462, 830, 462, nil, nil, nil, 830, - 830, 830, 830, nil, 830, 830, 830, 830, nil, nil, - nil, nil, 830, 830, nil, nil, nil, nil, nil, nil, - 830, nil, 830, 830, 830, 863, 863, 863, 863, 863, - 863, nil, nil, nil, 863, 863, nil, nil, nil, 863, - nil, 863, 863, 863, 863, 863, 863, 863, nil, nil, - nil, nil, nil, 863, 863, 863, 863, 863, 863, 863, - nil, nil, 863, nil, nil, nil, nil, nil, 863, 863, - 863, 863, 863, 863, 863, 863, 863, 863, 863, 863, - nil, 863, 863, 863, nil, 863, 863, 863, 863, 863, - 463, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 463, 463, nil, 863, - nil, nil, 863, nil, nil, 863, 863, nil, nil, 863, - nil, 863, 463, nil, 463, 863, 463, 463, nil, 463, - 463, nil, nil, 463, 863, 463, nil, nil, nil, 863, - 863, 863, 863, nil, 863, 863, 863, 863, nil, nil, - nil, nil, 863, 863, nil, nil, nil, nil, nil, nil, - 863, nil, 863, 863, 863, 927, 927, 927, 927, 927, - 927, nil, nil, nil, 927, 927, nil, nil, nil, 927, - nil, 927, 927, 927, 927, 927, 927, 927, nil, nil, - nil, nil, nil, 927, 927, 927, 927, 927, 927, 927, - nil, nil, 927, nil, nil, nil, nil, nil, 927, 927, - 927, 927, 927, 927, 927, 927, 927, 927, 927, 927, - nil, 927, 927, 927, nil, 927, 927, 927, 927, 927, - 464, 464, 464, 464, 464, 464, 464, nil, nil, 464, - 464, nil, nil, nil, nil, nil, 464, 464, nil, 927, - nil, nil, 927, nil, nil, 927, 927, nil, nil, 927, - nil, 927, 464, nil, 464, 927, 464, 464, nil, 464, - 464, 464, 464, 464, 927, 464, nil, nil, nil, 927, - 927, 927, 927, nil, 927, 927, 927, 927, nil, nil, - nil, nil, 927, 927, nil, nil, nil, nil, nil, nil, - 927, nil, 927, 927, 927, 934, 934, 934, 934, 934, - 934, nil, nil, nil, 934, 934, nil, nil, nil, 934, - nil, 934, 934, 934, 934, 934, 934, 934, nil, nil, - nil, nil, nil, 934, 934, 934, 934, 934, 934, 934, - nil, nil, 934, nil, nil, nil, nil, nil, 934, 934, - 934, 934, 934, 934, 934, 934, 934, 934, 934, 934, - nil, 934, 934, 934, nil, 934, 934, 934, 934, 934, - 465, 465, 465, 465, 465, 465, 465, nil, nil, 465, - 465, nil, nil, nil, nil, nil, 465, 465, nil, 934, - nil, nil, 934, nil, nil, 934, 934, nil, nil, 934, - nil, 934, 465, nil, 465, 934, 465, 465, nil, 465, - 465, 465, 465, 465, 934, 465, nil, nil, nil, 934, - 934, 934, 934, nil, 934, 934, 934, 934, nil, nil, - nil, nil, 934, 934, nil, nil, nil, nil, nil, nil, - 934, nil, 934, 934, 934, 935, 935, 935, 935, 935, - 935, nil, nil, nil, 935, 935, nil, nil, nil, 935, - nil, 935, 935, 935, 935, 935, 935, 935, nil, nil, - nil, nil, nil, 935, 935, 935, 935, 935, 935, 935, - nil, nil, 935, nil, nil, nil, nil, nil, 935, 935, - 935, 935, 935, 935, 935, 935, 935, 935, 935, 935, - nil, 935, 935, 935, nil, 935, 935, 935, 935, 935, - 466, 466, 466, 466, 466, 466, 466, nil, nil, 466, - 466, nil, nil, nil, nil, nil, 466, 466, nil, 935, - nil, nil, 935, nil, nil, 935, 935, nil, nil, 935, - nil, 935, 466, nil, 466, 935, 466, 466, nil, 466, - 466, 466, 466, 466, 935, 466, nil, nil, nil, 935, - 935, 935, 935, nil, 935, 935, 935, 935, nil, nil, - nil, nil, 935, 935, nil, nil, nil, nil, nil, nil, - 935, nil, 935, 935, 935, 952, 952, 952, 952, 952, - 952, nil, nil, nil, 952, 952, nil, nil, nil, 952, - nil, 952, 952, 952, 952, 952, 952, 952, nil, nil, - nil, nil, nil, 952, 952, 952, 952, 952, 952, 952, - nil, nil, 952, nil, nil, nil, nil, nil, 952, 952, - 952, 952, 952, 952, 952, 952, 952, 952, 952, 952, - nil, 952, 952, 952, nil, 952, 952, 952, 952, 952, - 467, 467, 467, 467, 467, 467, 467, nil, nil, 467, - 467, nil, nil, nil, nil, nil, 467, 467, nil, 952, - nil, nil, 952, nil, nil, 952, 952, nil, nil, 952, - nil, 952, 467, nil, 467, 952, 467, 467, nil, 467, - 467, 467, 467, 467, 952, 467, nil, nil, nil, 952, - 952, 952, 952, nil, 952, 952, 952, 952, nil, nil, - nil, nil, 952, 952, nil, nil, nil, nil, nil, nil, - 952, nil, 952, 952, 952, 958, 958, 958, 958, 958, - 958, nil, nil, nil, 958, 958, nil, nil, nil, 958, - nil, 958, 958, 958, 958, 958, 958, 958, nil, nil, - nil, nil, nil, 958, 958, 958, 958, 958, 958, 958, - nil, nil, 958, nil, nil, nil, nil, nil, 958, 958, - 958, 958, 958, 958, 958, 958, 958, 958, 958, 958, - nil, 958, 958, 958, nil, 958, 958, 958, 958, 958, - 468, 468, 468, 468, 468, 468, 468, nil, nil, 468, - 468, nil, nil, nil, nil, nil, 468, 468, nil, 958, - nil, nil, 958, nil, nil, 958, 958, nil, nil, 958, - nil, 958, 468, nil, 468, 958, 468, 468, nil, 468, - 468, 468, 468, 468, 958, 468, nil, nil, nil, 958, - 958, 958, 958, nil, 958, 958, 958, 958, nil, nil, - nil, nil, 958, 958, nil, nil, nil, nil, nil, nil, - 958, nil, 958, 958, 958, 960, 960, 960, 960, 960, - 960, nil, nil, nil, 960, 960, nil, nil, nil, 960, - nil, 960, 960, 960, 960, 960, 960, 960, nil, nil, - nil, nil, nil, 960, 960, 960, 960, 960, 960, 960, - nil, nil, 960, nil, nil, nil, nil, nil, 960, 960, - 960, 960, 960, 960, 960, 960, 960, 960, 960, 960, - nil, 960, 960, 960, nil, 960, 960, 960, 960, 960, - 471, 471, 471, 471, 471, 471, 471, nil, nil, 471, - 471, nil, nil, nil, nil, nil, 471, 471, nil, 960, - nil, nil, 960, nil, nil, 960, 960, nil, nil, 960, - nil, 960, 471, nil, 471, 960, 471, 471, nil, 471, - 471, 471, 471, 471, 960, 471, nil, nil, nil, 960, - 960, 960, 960, nil, 960, 960, 960, 960, nil, nil, - nil, nil, 960, 960, nil, nil, nil, nil, nil, nil, - 960, nil, 960, 960, 960, 5, 5, 5, 5, 5, - nil, nil, nil, 5, 5, nil, nil, nil, 5, nil, - 5, 5, 5, 5, 5, 5, 5, nil, nil, nil, - nil, nil, 5, 5, 5, 5, 5, 5, 5, nil, - nil, 5, nil, nil, nil, nil, nil, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, nil, - 5, 5, 5, nil, 5, 5, 5, 5, 5, 472, - 472, 472, 472, 472, 472, 472, 472, nil, 472, 472, - nil, nil, nil, nil, nil, 472, 472, nil, 5, nil, - nil, 5, nil, nil, 5, 5, nil, nil, 5, nil, - 5, 472, nil, 472, 5, 472, 472, nil, 472, 472, - 472, 472, 472, 5, 472, nil, nil, nil, 5, 5, - 5, 5, nil, 5, 5, 5, 5, nil, nil, nil, - nil, 5, 5, nil, nil, nil, 20, 20, 20, 5, - 20, 5, 5, 5, 20, 20, nil, nil, nil, 20, - nil, 20, 20, 20, 20, 20, 20, 20, nil, nil, - nil, nil, nil, 20, 20, 20, 20, 20, 20, 20, - nil, nil, 20, nil, nil, nil, nil, nil, nil, 20, - nil, nil, 20, 20, 20, 20, 20, 20, 20, 20, - nil, 20, 20, 20, nil, 20, 20, 20, 20, 20, - 456, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 456, 456, nil, 20, - nil, nil, 20, nil, nil, 20, 20, nil, nil, 20, - nil, nil, 456, nil, 456, 20, 456, 456, nil, 456, - 456, nil, nil, nil, 20, nil, nil, nil, nil, 20, - 20, 20, 20, nil, 20, 20, 20, 20, nil, nil, - nil, nil, 20, 20, nil, nil, nil, 29, 29, 29, - 20, 29, 20, 20, 20, 29, 29, nil, nil, nil, - 29, nil, 29, 29, 29, 29, 29, 29, 29, nil, - nil, nil, nil, nil, 29, 29, 29, 29, 29, 29, - 29, nil, nil, 29, nil, nil, nil, nil, nil, nil, - 29, nil, nil, 29, 29, 29, 29, 29, 29, 29, - 29, 29, 29, 29, 29, nil, 29, 29, 29, 29, - 29, 457, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 457, 457, nil, - 29, nil, nil, 29, nil, nil, 29, 29, nil, nil, - 29, nil, 29, 457, 29, 457, 29, 457, 457, 29, - 457, 457, nil, nil, nil, 29, nil, nil, nil, nil, - 29, 29, 29, 29, nil, 29, 29, 29, 29, nil, - nil, nil, nil, 29, 29, nil, nil, nil, 30, 30, - 30, 29, 30, 29, 29, 29, 30, 30, nil, nil, - nil, 30, nil, 30, 30, 30, 30, 30, 30, 30, - nil, nil, nil, nil, nil, 30, 30, 30, 30, 30, - 30, 30, nil, nil, 30, nil, nil, nil, nil, nil, - nil, 30, nil, nil, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, nil, 30, 30, 30, - 30, 30, 458, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 458, 458, - nil, 30, nil, nil, 30, nil, nil, 30, 30, nil, - nil, 30, nil, 30, 458, 30, nil, 30, 458, 458, - 30, 458, 458, nil, nil, nil, 30, nil, nil, nil, - nil, 30, 30, 30, 30, nil, 30, 30, 30, 30, - nil, nil, nil, nil, 30, 30, nil, nil, nil, 31, - 31, 31, 30, 31, 30, 30, 30, 31, 31, nil, - nil, nil, 31, nil, 31, 31, 31, 31, 31, 31, - 31, nil, nil, nil, nil, nil, 31, 31, 31, 31, - 31, 31, 31, nil, nil, 31, nil, nil, nil, nil, - nil, nil, 31, nil, nil, 31, 31, 31, 31, 31, - 31, 31, 31, 31, 31, 31, 31, nil, 31, 31, - 31, 31, 31, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 31, nil, nil, 31, nil, nil, 31, 31, - nil, nil, 31, nil, 31, nil, 31, nil, 31, nil, - nil, 31, nil, nil, nil, nil, nil, 31, nil, nil, - nil, nil, 31, 31, 31, 31, nil, 31, 31, 31, - 31, nil, nil, nil, nil, 31, 31, nil, nil, nil, - 34, 34, 34, 31, 34, 31, 31, 31, 34, 34, - nil, nil, nil, 34, nil, 34, 34, 34, 34, 34, - 34, 34, nil, nil, nil, nil, nil, 34, 34, 34, - 34, 34, 34, 34, nil, nil, 34, nil, nil, nil, - nil, nil, nil, 34, nil, nil, 34, 34, 34, 34, - 34, 34, 34, 34, nil, 34, 34, 34, nil, 34, - 34, nil, nil, 34, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 34, nil, nil, 34, nil, nil, 34, - 34, nil, nil, 34, nil, 34, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 34, 34, 34, 34, nil, 34, 34, - 34, 34, nil, nil, nil, nil, 34, 34, nil, nil, - nil, 35, 35, 35, 34, 35, 34, 34, 34, 35, - 35, nil, nil, nil, 35, nil, 35, 35, 35, 35, - 35, 35, 35, nil, nil, nil, nil, nil, 35, 35, - 35, 35, 35, 35, 35, nil, nil, 35, nil, nil, - nil, nil, nil, nil, 35, nil, nil, 35, 35, 35, - 35, 35, 35, 35, 35, nil, 35, 35, 35, nil, - 35, 35, nil, nil, 35, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 35, nil, nil, 35, nil, nil, - 35, 35, nil, nil, 35, nil, nil, 803, nil, 803, - 803, 803, 803, 803, nil, nil, nil, nil, nil, nil, - nil, nil, 803, nil, 35, 35, 35, 35, nil, 35, - 35, 35, 35, nil, nil, nil, nil, 35, 35, nil, - nil, nil, 35, nil, 803, 35, nil, 35, 35, 35, - 42, 42, 42, nil, 42, 803, 803, nil, 42, 42, - 803, nil, nil, 42, nil, 42, 42, 42, 42, 42, - 42, 42, nil, nil, nil, nil, nil, 42, 42, 42, - 42, 42, 42, 42, nil, nil, 42, nil, nil, nil, - nil, nil, nil, 42, nil, nil, 42, 42, 42, 42, - 42, 42, 42, 42, nil, 42, 42, 42, nil, 42, - 42, 42, 42, 42, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 42, nil, nil, 42, nil, nil, 42, - 42, nil, nil, 42, nil, nil, nil, nil, nil, 42, - nil, nil, nil, nil, nil, nil, nil, nil, 42, nil, - nil, nil, nil, 42, 42, 42, 42, nil, 42, 42, - 42, 42, nil, nil, nil, nil, 42, 42, nil, nil, - nil, 43, 43, 43, 42, 43, 42, 42, 42, 43, - 43, nil, nil, nil, 43, nil, 43, 43, 43, 43, - 43, 43, 43, nil, nil, nil, nil, nil, 43, 43, - 43, 43, 43, 43, 43, nil, nil, 43, nil, nil, - nil, nil, nil, nil, 43, nil, nil, 43, 43, 43, - 43, 43, 43, 43, 43, nil, 43, 43, 43, nil, - 43, 43, 43, 43, 43, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 43, nil, nil, 43, nil, nil, - 43, 43, nil, nil, 43, nil, nil, nil, nil, nil, - 43, nil, nil, nil, nil, nil, nil, nil, nil, 43, - nil, nil, nil, nil, 43, 43, 43, 43, nil, 43, - 43, 43, 43, nil, nil, nil, nil, 43, 43, nil, - nil, nil, 44, 44, 44, 43, 44, 43, 43, 43, - 44, 44, nil, nil, nil, 44, nil, 44, 44, 44, - 44, 44, 44, 44, nil, nil, nil, nil, nil, 44, - 44, 44, 44, 44, 44, 44, nil, nil, 44, nil, - nil, nil, nil, nil, nil, 44, nil, nil, 44, 44, - 44, 44, 44, 44, 44, 44, nil, 44, 44, 44, - nil, 44, 44, 44, 44, 44, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 44, nil, nil, 44, nil, - nil, 44, 44, nil, nil, 44, nil, nil, nil, nil, - nil, 44, nil, nil, nil, nil, nil, nil, nil, nil, - 44, nil, nil, nil, nil, 44, 44, 44, 44, nil, - 44, 44, 44, 44, nil, nil, nil, nil, 44, 44, - nil, nil, nil, 59, 59, 59, 44, 59, 44, 44, - 44, 59, 59, nil, nil, nil, 59, nil, 59, 59, - 59, 59, 59, 59, 59, nil, nil, nil, nil, nil, - 59, 59, 59, 59, 59, 59, 59, nil, nil, 59, - nil, nil, nil, nil, nil, nil, 59, nil, nil, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, nil, 59, 59, 59, 59, 59, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 59, nil, nil, 59, - nil, nil, 59, 59, nil, nil, 59, nil, 59, nil, - nil, nil, 59, nil, nil, 59, nil, nil, nil, nil, - nil, 59, nil, nil, nil, nil, 59, 59, 59, 59, - nil, 59, 59, 59, 59, nil, nil, nil, nil, 59, - 59, nil, nil, nil, 60, 60, 60, 59, 60, 59, - 59, 59, 60, 60, nil, nil, nil, 60, nil, 60, - 60, 60, 60, 60, 60, 60, nil, nil, nil, nil, - nil, 60, 60, 60, 60, 60, 60, 60, nil, nil, - 60, nil, nil, nil, nil, nil, nil, 60, nil, nil, - 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, - 60, 60, nil, 60, 60, 60, 60, 60, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 60, nil, nil, - 60, nil, nil, 60, 60, nil, nil, 60, nil, nil, - nil, nil, nil, 60, nil, nil, 60, nil, nil, nil, - nil, nil, 60, nil, nil, nil, nil, 60, 60, 60, - 60, nil, 60, 60, 60, 60, nil, nil, nil, nil, - 60, 60, nil, nil, nil, 63, 63, 63, 60, 63, - 60, 60, 60, 63, 63, nil, nil, nil, 63, nil, - 63, 63, 63, 63, 63, 63, 63, nil, nil, nil, - nil, nil, 63, 63, 63, 63, 63, 63, 63, nil, - nil, 63, nil, nil, nil, nil, nil, nil, 63, nil, - nil, 63, 63, 63, 63, 63, 63, 63, 63, nil, - 63, 63, 63, nil, 63, 63, 63, 63, 63, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 63, nil, - nil, 63, nil, nil, 63, 63, nil, nil, 63, nil, - nil, nil, nil, nil, 63, nil, nil, nil, nil, nil, - nil, nil, nil, 63, nil, nil, nil, nil, 63, 63, - 63, 63, nil, 63, 63, 63, 63, nil, nil, nil, - nil, 63, 63, nil, nil, nil, 64, 64, 64, 63, - 64, 63, 63, 63, 64, 64, nil, nil, nil, 64, - nil, 64, 64, 64, 64, 64, 64, 64, nil, nil, - nil, nil, nil, 64, 64, 64, 64, 64, 64, 64, - nil, nil, 64, nil, nil, nil, nil, nil, nil, 64, - nil, nil, 64, 64, 64, 64, 64, 64, 64, 64, - nil, 64, 64, 64, nil, 64, 64, 64, 64, 64, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 64, - nil, nil, 64, nil, nil, 64, 64, nil, nil, 64, - nil, nil, nil, nil, nil, 64, nil, nil, nil, nil, - nil, nil, nil, nil, 64, nil, nil, nil, nil, 64, - 64, 64, 64, nil, 64, 64, 64, 64, nil, nil, - nil, nil, 64, 64, nil, nil, nil, 67, 67, 67, - 64, 67, 64, 64, 64, 67, 67, nil, nil, nil, - 67, nil, 67, 67, 67, 67, 67, 67, 67, nil, - nil, nil, nil, nil, 67, 67, 67, 67, 67, 67, - 67, nil, nil, 67, nil, nil, nil, nil, nil, nil, - 67, nil, nil, 67, 67, 67, 67, 67, 67, 67, - 67, nil, 67, 67, 67, nil, 67, 67, 67, 67, - 67, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 67, nil, nil, 67, nil, nil, 67, 67, nil, nil, - 67, nil, nil, nil, nil, nil, 67, nil, nil, nil, - nil, nil, nil, nil, nil, 67, nil, nil, nil, nil, - 67, 67, 67, 67, nil, 67, 67, 67, 67, nil, - nil, nil, nil, 67, 67, 67, nil, nil, nil, nil, - 67, 67, nil, 67, 67, 67, 68, 68, 68, nil, - 68, nil, nil, nil, 68, 68, nil, nil, nil, 68, - nil, 68, 68, 68, 68, 68, 68, 68, nil, nil, - nil, nil, nil, 68, 68, 68, 68, 68, 68, 68, - nil, nil, 68, nil, nil, nil, nil, nil, nil, 68, - nil, nil, 68, 68, 68, 68, 68, 68, 68, 68, - nil, 68, 68, 68, nil, 68, 68, nil, nil, 68, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 68, - nil, nil, 68, nil, nil, 68, 68, nil, nil, 68, - nil, 68, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 68, - 68, 68, 68, nil, 68, 68, 68, 68, nil, nil, - nil, nil, 68, 68, nil, nil, nil, 69, 69, 69, - 68, 69, 68, 68, 68, 69, 69, nil, nil, nil, - 69, nil, 69, 69, 69, 69, 69, 69, 69, nil, - nil, nil, nil, nil, 69, 69, 69, 69, 69, 69, - 69, nil, nil, 69, nil, nil, nil, nil, nil, nil, - 69, nil, nil, 69, 69, 69, 69, 69, 69, 69, - 69, nil, 69, 69, 69, nil, 69, 69, nil, nil, - 69, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 69, nil, nil, - 69, nil, nil, 69, nil, nil, 69, 69, nil, nil, - 69, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 69, 69, 69, 69, nil, 69, 69, 69, 69, nil, - nil, nil, nil, 69, 69, nil, nil, nil, 70, 70, - 70, 69, 70, 69, 69, 69, 70, 70, nil, nil, - nil, 70, nil, 70, 70, 70, 70, 70, 70, 70, - nil, nil, nil, nil, nil, 70, 70, 70, 70, 70, - 70, 70, nil, nil, 70, nil, nil, nil, nil, nil, - nil, 70, nil, nil, 70, 70, 70, 70, 70, 70, - 70, 70, nil, 70, 70, 70, nil, 70, 70, nil, - nil, 70, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 70, nil, nil, 70, nil, nil, 70, 70, nil, - nil, 70, nil, nil, 850, nil, 850, 850, 850, 850, - 850, nil, nil, nil, nil, nil, nil, nil, nil, 850, - nil, 70, 70, 70, 70, nil, 70, 70, 70, 70, - nil, nil, nil, nil, 70, 70, nil, nil, nil, nil, - nil, 850, 70, nil, 70, 70, 70, 113, 113, 113, - 113, 113, 850, 850, nil, 113, 113, 850, nil, nil, - 113, nil, 113, 113, 113, 113, 113, 113, 113, nil, - nil, nil, nil, nil, 113, 113, 113, 113, 113, 113, - 113, nil, nil, 113, nil, nil, nil, nil, nil, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, 113, - 113, nil, 113, 113, 113, nil, 113, 113, 113, 113, - 113, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 113, nil, nil, 113, nil, nil, 113, 113, nil, nil, - 113, nil, 113, nil, nil, nil, 113, nil, nil, nil, - nil, nil, nil, nil, nil, 113, nil, nil, nil, nil, - 113, 113, 113, 113, nil, 113, 113, 113, 113, nil, - nil, nil, nil, 113, 113, nil, nil, nil, nil, nil, - 113, 113, nil, 113, 113, 113, 118, 118, 118, nil, - 118, nil, nil, nil, 118, 118, nil, nil, nil, 118, - nil, 118, 118, 118, 118, 118, 118, 118, nil, nil, - nil, nil, nil, 118, 118, 118, 118, 118, 118, 118, - nil, nil, 118, nil, nil, nil, nil, nil, nil, 118, - nil, nil, 118, 118, 118, 118, 118, 118, 118, 118, - nil, 118, 118, 118, nil, 118, 118, 118, 118, 118, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 118, - nil, nil, 118, nil, nil, 118, 118, nil, nil, 118, - nil, nil, nil, nil, nil, 118, nil, nil, nil, nil, - nil, nil, nil, nil, 118, nil, nil, nil, nil, 118, - 118, 118, 118, nil, 118, 118, 118, 118, nil, nil, - nil, nil, 118, 118, nil, nil, nil, 119, 119, 119, - 118, 119, 118, 118, 118, 119, 119, nil, nil, nil, - 119, nil, 119, 119, 119, 119, 119, 119, 119, nil, - nil, nil, nil, nil, 119, 119, 119, 119, 119, 119, - 119, nil, nil, 119, nil, nil, nil, nil, nil, nil, - 119, nil, nil, 119, 119, 119, 119, 119, 119, 119, - 119, nil, 119, 119, 119, nil, 119, 119, 119, 119, - 119, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 119, nil, nil, 119, nil, nil, 119, 119, nil, nil, - 119, nil, nil, nil, nil, nil, 119, nil, nil, nil, - nil, nil, nil, nil, nil, 119, nil, nil, nil, nil, - 119, 119, 119, 119, nil, 119, 119, 119, 119, nil, - nil, nil, nil, 119, 119, nil, nil, nil, 120, 120, - 120, 119, 120, 119, 119, 119, 120, 120, nil, nil, - nil, 120, nil, 120, 120, 120, 120, 120, 120, 120, - nil, nil, nil, nil, nil, 120, 120, 120, 120, 120, - 120, 120, nil, nil, 120, nil, nil, nil, nil, nil, - nil, 120, nil, nil, 120, 120, 120, 120, 120, 120, - 120, 120, nil, 120, 120, 120, nil, 120, 120, 120, - 120, 120, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 120, nil, nil, 120, nil, nil, 120, 120, nil, - nil, 120, nil, nil, nil, nil, nil, 120, nil, nil, - nil, nil, nil, nil, nil, nil, 120, nil, nil, nil, - nil, 120, 120, 120, 120, nil, 120, 120, 120, 120, - nil, nil, nil, nil, 120, 120, nil, nil, nil, 121, - 121, 121, 120, 121, 120, 120, 120, 121, 121, nil, - nil, nil, 121, nil, 121, 121, 121, 121, 121, 121, - 121, nil, nil, nil, nil, nil, 121, 121, 121, 121, - 121, 121, 121, nil, nil, 121, nil, nil, nil, nil, - nil, nil, 121, nil, nil, 121, 121, 121, 121, 121, - 121, 121, 121, nil, 121, 121, 121, nil, 121, 121, - 121, 121, 121, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 121, nil, nil, 121, nil, nil, 121, 121, - nil, nil, 121, nil, nil, nil, nil, nil, 121, nil, - nil, nil, nil, nil, nil, nil, nil, 121, nil, nil, - nil, nil, 121, 121, 121, 121, nil, 121, 121, 121, - 121, nil, nil, nil, nil, 121, 121, nil, nil, nil, - nil, nil, nil, 121, nil, 121, 121, 121, 122, 122, - 122, 122, 122, nil, nil, nil, 122, 122, nil, nil, - nil, 122, nil, 122, 122, 122, 122, 122, 122, 122, - nil, nil, nil, nil, nil, 122, 122, 122, 122, 122, - 122, 122, nil, nil, 122, nil, nil, nil, nil, nil, - 122, 122, nil, 122, 122, 122, 122, 122, 122, 122, - 122, 122, nil, 122, 122, 122, nil, 122, 122, 122, - 122, 122, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 122, nil, nil, 122, nil, nil, 122, 122, nil, - nil, 122, nil, 122, nil, nil, nil, 122, nil, nil, - nil, nil, nil, nil, nil, nil, 122, nil, nil, nil, - nil, 122, 122, 122, 122, nil, 122, 122, 122, 122, - nil, nil, nil, nil, 122, 122, nil, nil, nil, 209, - 209, 209, 122, 209, 122, 122, 122, 209, 209, nil, - nil, nil, 209, nil, 209, 209, 209, 209, 209, 209, - 209, nil, nil, nil, nil, nil, 209, 209, 209, 209, - 209, 209, 209, nil, nil, 209, nil, nil, nil, nil, - nil, nil, 209, nil, nil, 209, 209, 209, 209, 209, - 209, 209, 209, nil, 209, 209, 209, nil, 209, 209, - 209, 209, 209, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 209, nil, nil, 209, nil, nil, 209, 209, - nil, nil, 209, nil, 209, nil, nil, nil, 209, nil, - nil, nil, nil, nil, nil, nil, nil, 209, nil, nil, - nil, nil, 209, 209, 209, 209, nil, 209, 209, 209, - 209, nil, nil, nil, nil, 209, 209, nil, nil, nil, - 210, 210, 210, 209, 210, 209, 209, 209, 210, 210, - nil, nil, nil, 210, nil, 210, 210, 210, 210, 210, - 210, 210, nil, nil, nil, nil, nil, 210, 210, 210, - 210, 210, 210, 210, nil, nil, 210, nil, nil, nil, - nil, nil, nil, 210, nil, nil, 210, 210, 210, 210, - 210, 210, 210, 210, nil, 210, 210, 210, nil, 210, - 210, 210, 210, 210, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 210, nil, nil, 210, nil, nil, 210, - 210, nil, nil, 210, nil, nil, nil, nil, nil, 210, - nil, nil, nil, nil, nil, nil, nil, nil, 210, nil, - nil, nil, nil, 210, 210, 210, 210, nil, 210, 210, - 210, 210, nil, nil, nil, nil, 210, 210, nil, nil, - nil, 211, 211, 211, 210, 211, 210, 210, 210, 211, - 211, nil, nil, nil, 211, nil, 211, 211, 211, 211, - 211, 211, 211, nil, nil, nil, nil, nil, 211, 211, - 211, 211, 211, 211, 211, nil, nil, 211, nil, nil, - nil, nil, nil, nil, 211, nil, nil, 211, 211, 211, - 211, 211, 211, 211, 211, 211, 211, 211, 211, nil, - 211, 211, 211, 211, 211, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 211, nil, nil, 211, nil, nil, - 211, 211, nil, nil, 211, nil, 211, nil, 211, nil, - 211, nil, nil, 211, nil, nil, nil, nil, nil, 211, - nil, nil, nil, nil, 211, 211, 211, 211, nil, 211, - 211, 211, 211, nil, nil, nil, nil, 211, 211, nil, - nil, nil, 214, 214, 214, 211, 214, 211, 211, 211, - 214, 214, nil, nil, nil, 214, nil, 214, 214, 214, - 214, 214, 214, 214, nil, nil, nil, nil, nil, 214, - 214, 214, 214, 214, 214, 214, nil, nil, 214, nil, - nil, nil, nil, nil, nil, 214, nil, nil, 214, 214, - 214, 214, 214, 214, 214, 214, nil, 214, 214, 214, - nil, 214, 214, 214, 214, 214, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 214, nil, nil, 214, nil, - nil, 214, 214, nil, nil, 214, nil, nil, nil, nil, - nil, 214, nil, nil, nil, nil, nil, nil, nil, nil, - 214, nil, nil, nil, nil, 214, 214, 214, 214, nil, - 214, 214, 214, 214, nil, nil, nil, nil, 214, 214, - nil, nil, nil, 215, 215, 215, 214, 215, 214, 214, - 214, 215, 215, nil, nil, nil, 215, nil, 215, 215, - 215, 215, 215, 215, 215, nil, nil, nil, nil, nil, - 215, 215, 215, 215, 215, 215, 215, nil, nil, 215, - nil, nil, nil, nil, nil, nil, 215, nil, nil, 215, - 215, 215, 215, 215, 215, 215, 215, nil, 215, 215, - 215, nil, 215, 215, 215, 215, 215, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 215, nil, nil, 215, - nil, nil, 215, 215, nil, nil, 215, nil, 215, nil, - nil, nil, 215, nil, nil, nil, nil, nil, nil, nil, - nil, 215, nil, nil, nil, nil, 215, 215, 215, 215, - nil, 215, 215, 215, 215, nil, nil, nil, nil, 215, - 215, nil, nil, nil, 216, 216, 216, 215, 216, 215, - 215, 215, 216, 216, nil, nil, nil, 216, nil, 216, - 216, 216, 216, 216, 216, 216, nil, nil, nil, nil, - nil, 216, 216, 216, 216, 216, 216, 216, nil, nil, - 216, nil, nil, nil, nil, nil, nil, 216, nil, nil, - 216, 216, 216, 216, 216, 216, 216, 216, nil, 216, - 216, 216, nil, 216, 216, 216, 216, 216, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 216, nil, nil, - 216, nil, nil, 216, 216, nil, nil, 216, nil, nil, - nil, nil, nil, 216, nil, nil, nil, nil, nil, nil, - nil, nil, 216, nil, nil, nil, nil, 216, 216, 216, - 216, nil, 216, 216, 216, 216, nil, nil, nil, nil, - 216, 216, nil, nil, nil, 217, 217, 217, 216, 217, - 216, 216, 216, 217, 217, nil, nil, nil, 217, nil, - 217, 217, 217, 217, 217, 217, 217, nil, nil, nil, - nil, nil, 217, 217, 217, 217, 217, 217, 217, nil, - nil, 217, nil, nil, nil, nil, nil, nil, 217, nil, - nil, 217, 217, 217, 217, 217, 217, 217, 217, nil, - 217, 217, 217, nil, 217, 217, 217, 217, 217, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 217, nil, - nil, 217, nil, nil, 217, 217, nil, nil, 217, nil, - nil, nil, nil, nil, 217, nil, nil, nil, nil, nil, - nil, nil, nil, 217, nil, nil, nil, nil, 217, 217, - 217, 217, nil, 217, 217, 217, 217, nil, nil, nil, - nil, 217, 217, nil, nil, nil, 218, 218, 218, 217, - 218, 217, 217, 217, 218, 218, nil, nil, nil, 218, - nil, 218, 218, 218, 218, 218, 218, 218, nil, nil, - nil, nil, nil, 218, 218, 218, 218, 218, 218, 218, - nil, nil, 218, nil, nil, nil, nil, nil, nil, 218, - nil, nil, 218, 218, 218, 218, 218, 218, 218, 218, - nil, 218, 218, 218, nil, 218, 218, 218, 218, 218, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 218, - nil, nil, 218, nil, nil, 218, 218, nil, nil, 218, - nil, nil, nil, nil, nil, 218, nil, nil, nil, nil, - nil, nil, nil, nil, 218, nil, nil, nil, nil, 218, - 218, 218, 218, nil, 218, 218, 218, 218, nil, nil, - nil, nil, 218, 218, nil, nil, nil, 219, 219, 219, - 218, 219, 218, 218, 218, 219, 219, nil, nil, nil, - 219, nil, 219, 219, 219, 219, 219, 219, 219, nil, - nil, nil, nil, nil, 219, 219, 219, 219, 219, 219, - 219, nil, nil, 219, nil, nil, nil, nil, nil, nil, - 219, nil, nil, 219, 219, 219, 219, 219, 219, 219, - 219, nil, 219, 219, 219, nil, 219, 219, 219, 219, - 219, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 219, nil, nil, 219, nil, nil, 219, 219, nil, nil, - 219, nil, nil, nil, nil, nil, 219, nil, nil, nil, - nil, nil, nil, nil, nil, 219, nil, nil, nil, nil, - 219, 219, 219, 219, nil, 219, 219, 219, 219, nil, - nil, nil, nil, 219, 219, 219, nil, nil, 230, 230, - 230, 219, 230, 219, 219, 219, 230, 230, nil, nil, - nil, 230, nil, 230, 230, 230, 230, 230, 230, 230, - nil, nil, nil, nil, nil, 230, 230, 230, 230, 230, - 230, 230, nil, nil, 230, nil, nil, nil, nil, nil, - nil, 230, nil, nil, 230, 230, 230, 230, 230, 230, - 230, 230, nil, 230, 230, 230, nil, 230, 230, 230, - 230, 230, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 230, nil, nil, 230, nil, nil, 230, 230, nil, - nil, 230, nil, nil, nil, nil, nil, 230, nil, nil, - nil, nil, nil, nil, nil, nil, 230, nil, nil, nil, - nil, 230, 230, 230, 230, nil, 230, 230, 230, 230, - nil, nil, nil, nil, 230, 230, nil, nil, nil, 233, - 233, 233, 230, 233, 230, 230, 230, 233, 233, nil, - nil, nil, 233, nil, 233, 233, 233, 233, 233, 233, - 233, nil, nil, nil, nil, nil, 233, 233, 233, 233, - 233, 233, 233, nil, nil, 233, nil, nil, nil, nil, - nil, nil, 233, nil, nil, 233, 233, 233, 233, 233, - 233, 233, 233, nil, 233, 233, 233, nil, 233, 233, - 233, 233, 233, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 233, nil, nil, 233, nil, nil, 233, 233, - nil, nil, 233, nil, nil, nil, nil, nil, 233, nil, - nil, nil, nil, nil, nil, nil, nil, 233, nil, nil, - nil, nil, 233, 233, 233, 233, nil, 233, 233, 233, - 233, nil, nil, nil, nil, 233, 233, nil, nil, nil, - 234, 234, 234, 233, 234, 233, 233, 233, 234, 234, - nil, nil, nil, 234, nil, 234, 234, 234, 234, 234, - 234, 234, nil, nil, nil, nil, nil, 234, 234, 234, - 234, 234, 234, 234, nil, nil, 234, nil, nil, nil, - nil, nil, nil, 234, nil, nil, 234, 234, 234, 234, - 234, 234, 234, 234, nil, 234, 234, 234, nil, 234, - 234, 234, 234, 234, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 234, nil, nil, 234, nil, nil, 234, - 234, nil, nil, 234, nil, nil, nil, nil, nil, 234, - nil, nil, nil, nil, nil, nil, nil, nil, 234, nil, - nil, nil, nil, 234, 234, 234, 234, nil, 234, 234, - 234, 234, nil, nil, nil, nil, 234, 234, nil, nil, - nil, 235, 235, 235, 234, 235, 234, 234, 234, 235, - 235, nil, nil, nil, 235, nil, 235, 235, 235, 235, - 235, 235, 235, nil, nil, nil, nil, nil, 235, 235, - 235, 235, 235, 235, 235, nil, nil, 235, nil, nil, - nil, nil, nil, nil, 235, nil, nil, 235, 235, 235, - 235, 235, 235, 235, 235, nil, 235, 235, 235, nil, - 235, 235, 235, 235, 235, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 235, nil, nil, 235, nil, nil, - 235, 235, nil, nil, 235, nil, nil, nil, nil, nil, - 235, nil, nil, nil, nil, nil, nil, nil, nil, 235, - nil, nil, nil, nil, 235, 235, 235, 235, nil, 235, - 235, 235, 235, nil, nil, nil, nil, 235, 235, nil, - nil, nil, 236, 236, 236, 235, 236, 235, 235, 235, - 236, 236, nil, nil, nil, 236, nil, 236, 236, 236, - 236, 236, 236, 236, nil, nil, nil, nil, nil, 236, - 236, 236, 236, 236, 236, 236, nil, nil, 236, nil, - nil, nil, nil, nil, nil, 236, nil, nil, 236, 236, - 236, 236, 236, 236, 236, 236, nil, 236, 236, 236, - nil, 236, 236, 236, 236, 236, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 236, nil, nil, 236, nil, - nil, 236, 236, nil, nil, 236, nil, nil, nil, nil, - nil, 236, nil, nil, nil, nil, nil, nil, nil, nil, - 236, nil, nil, nil, nil, 236, 236, 236, 236, nil, - 236, 236, 236, 236, nil, nil, nil, nil, 236, 236, - nil, nil, nil, 237, 237, 237, 236, 237, 236, 236, - 236, 237, 237, nil, nil, nil, 237, nil, 237, 237, - 237, 237, 237, 237, 237, nil, nil, nil, nil, nil, - 237, 237, 237, 237, 237, 237, 237, nil, nil, 237, - nil, nil, nil, nil, nil, nil, 237, nil, nil, 237, - 237, 237, 237, 237, 237, 237, 237, nil, 237, 237, - 237, nil, 237, 237, 237, 237, 237, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 237, nil, nil, 237, - nil, nil, 237, 237, nil, nil, 237, nil, nil, nil, - nil, nil, 237, nil, nil, nil, nil, nil, nil, nil, - nil, 237, nil, nil, nil, nil, 237, 237, 237, 237, - nil, 237, 237, 237, 237, nil, nil, nil, nil, 237, - 237, nil, nil, nil, 238, 238, 238, 237, 238, 237, - 237, 237, 238, 238, nil, nil, nil, 238, nil, 238, - 238, 238, 238, 238, 238, 238, nil, nil, nil, nil, - nil, 238, 238, 238, 238, 238, 238, 238, nil, nil, - 238, nil, nil, nil, nil, nil, nil, 238, nil, nil, - 238, 238, 238, 238, 238, 238, 238, 238, nil, 238, - 238, 238, nil, 238, 238, 238, 238, 238, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 238, nil, nil, - 238, nil, nil, 238, 238, nil, nil, 238, nil, nil, - nil, nil, nil, 238, nil, nil, nil, nil, nil, nil, - nil, nil, 238, nil, nil, nil, nil, 238, 238, 238, - 238, nil, 238, 238, 238, 238, nil, nil, nil, nil, - 238, 238, nil, nil, nil, 239, 239, 239, 238, 239, - 238, 238, 238, 239, 239, nil, nil, nil, 239, nil, - 239, 239, 239, 239, 239, 239, 239, nil, nil, nil, - nil, nil, 239, 239, 239, 239, 239, 239, 239, nil, - nil, 239, nil, nil, nil, nil, nil, nil, 239, nil, - nil, 239, 239, 239, 239, 239, 239, 239, 239, nil, - 239, 239, 239, nil, 239, 239, 239, 239, 239, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 239, nil, - nil, 239, nil, nil, 239, 239, nil, nil, 239, nil, - nil, nil, nil, nil, 239, nil, nil, nil, nil, nil, - nil, nil, nil, 239, nil, nil, nil, nil, 239, 239, - 239, 239, nil, 239, 239, 239, 239, nil, nil, nil, - nil, 239, 239, nil, nil, nil, 240, 240, 240, 239, - 240, 239, 239, 239, 240, 240, nil, nil, nil, 240, - nil, 240, 240, 240, 240, 240, 240, 240, nil, nil, - nil, nil, nil, 240, 240, 240, 240, 240, 240, 240, - nil, nil, 240, nil, nil, nil, nil, nil, nil, 240, - nil, nil, 240, 240, 240, 240, 240, 240, 240, 240, - nil, 240, 240, 240, nil, 240, 240, 240, 240, 240, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 240, - nil, nil, 240, nil, nil, 240, 240, nil, nil, 240, - nil, nil, nil, nil, nil, 240, nil, nil, nil, nil, - nil, nil, nil, nil, 240, nil, nil, nil, nil, 240, - 240, 240, 240, nil, 240, 240, 240, 240, nil, nil, - nil, nil, 240, 240, nil, nil, nil, 241, 241, 241, - 240, 241, 240, 240, 240, 241, 241, nil, nil, nil, - 241, nil, 241, 241, 241, 241, 241, 241, 241, nil, - nil, nil, nil, nil, 241, 241, 241, 241, 241, 241, - 241, nil, nil, 241, nil, nil, nil, nil, nil, nil, - 241, nil, nil, 241, 241, 241, 241, 241, 241, 241, - 241, nil, 241, 241, 241, nil, 241, 241, 241, 241, - 241, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 241, nil, nil, 241, nil, nil, 241, 241, nil, nil, - 241, nil, nil, nil, nil, nil, 241, nil, nil, nil, - nil, nil, nil, nil, nil, 241, nil, nil, nil, nil, - 241, 241, 241, 241, nil, 241, 241, 241, 241, nil, - nil, nil, nil, 241, 241, nil, nil, nil, 242, 242, - 242, 241, 242, 241, 241, 241, 242, 242, nil, nil, - nil, 242, nil, 242, 242, 242, 242, 242, 242, 242, - nil, nil, nil, nil, nil, 242, 242, 242, 242, 242, - 242, 242, nil, nil, 242, nil, nil, nil, nil, nil, - nil, 242, nil, nil, 242, 242, 242, 242, 242, 242, - 242, 242, nil, 242, 242, 242, nil, 242, 242, 242, - 242, 242, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 242, nil, nil, 242, nil, nil, 242, 242, nil, - nil, 242, nil, nil, nil, nil, nil, 242, nil, nil, - nil, nil, nil, nil, nil, nil, 242, nil, nil, nil, - nil, 242, 242, 242, 242, nil, 242, 242, 242, 242, - nil, nil, nil, nil, 242, 242, nil, nil, nil, 243, - 243, 243, 242, 243, 242, 242, 242, 243, 243, nil, - nil, nil, 243, nil, 243, 243, 243, 243, 243, 243, - 243, nil, nil, nil, nil, nil, 243, 243, 243, 243, - 243, 243, 243, nil, nil, 243, nil, nil, nil, nil, - nil, nil, 243, nil, nil, 243, 243, 243, 243, 243, - 243, 243, 243, nil, 243, 243, 243, nil, 243, 243, - 243, 243, 243, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 243, nil, nil, 243, nil, nil, 243, 243, - nil, nil, 243, nil, nil, nil, nil, nil, 243, nil, - nil, nil, nil, nil, nil, nil, nil, 243, nil, nil, - nil, nil, 243, 243, 243, 243, nil, 243, 243, 243, - 243, nil, nil, nil, nil, 243, 243, nil, nil, nil, - 244, 244, 244, 243, 244, 243, 243, 243, 244, 244, - nil, nil, nil, 244, nil, 244, 244, 244, 244, 244, - 244, 244, nil, nil, nil, nil, nil, 244, 244, 244, - 244, 244, 244, 244, nil, nil, 244, nil, nil, nil, - nil, nil, nil, 244, nil, nil, 244, 244, 244, 244, - 244, 244, 244, 244, nil, 244, 244, 244, nil, 244, - 244, 244, 244, 244, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 244, nil, nil, 244, nil, nil, 244, - 244, nil, nil, 244, nil, nil, nil, nil, nil, 244, - nil, nil, nil, nil, nil, nil, nil, nil, 244, nil, - nil, nil, nil, 244, 244, 244, 244, nil, 244, 244, - 244, 244, nil, nil, nil, nil, 244, 244, nil, nil, - nil, 245, 245, 245, 244, 245, 244, 244, 244, 245, - 245, nil, nil, nil, 245, nil, 245, 245, 245, 245, - 245, 245, 245, nil, nil, nil, nil, nil, 245, 245, - 245, 245, 245, 245, 245, nil, nil, 245, nil, nil, - nil, nil, nil, nil, 245, nil, nil, 245, 245, 245, - 245, 245, 245, 245, 245, nil, 245, 245, 245, nil, - 245, 245, 245, 245, 245, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 245, nil, nil, 245, nil, nil, - 245, 245, nil, nil, 245, nil, nil, nil, nil, nil, - 245, nil, nil, nil, nil, nil, nil, nil, nil, 245, - nil, nil, nil, nil, 245, 245, 245, 245, nil, 245, - 245, 245, 245, nil, nil, nil, nil, 245, 245, nil, - nil, nil, 246, 246, 246, 245, 246, 245, 245, 245, - 246, 246, nil, nil, nil, 246, nil, 246, 246, 246, - 246, 246, 246, 246, nil, nil, nil, nil, nil, 246, - 246, 246, 246, 246, 246, 246, nil, nil, 246, nil, - nil, nil, nil, nil, nil, 246, nil, nil, 246, 246, - 246, 246, 246, 246, 246, 246, nil, 246, 246, 246, - nil, 246, 246, 246, 246, 246, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 246, nil, nil, 246, nil, - nil, 246, 246, nil, nil, 246, nil, nil, nil, nil, - nil, 246, nil, nil, nil, nil, nil, nil, nil, nil, - 246, nil, nil, nil, nil, 246, 246, 246, 246, nil, - 246, 246, 246, 246, nil, nil, nil, nil, 246, 246, - nil, nil, nil, 247, 247, 247, 246, 247, 246, 246, - 246, 247, 247, nil, nil, nil, 247, nil, 247, 247, - 247, 247, 247, 247, 247, nil, nil, nil, nil, nil, - 247, 247, 247, 247, 247, 247, 247, nil, nil, 247, - nil, nil, nil, nil, nil, nil, 247, nil, nil, 247, - 247, 247, 247, 247, 247, 247, 247, nil, 247, 247, - 247, nil, 247, 247, 247, 247, 247, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 247, nil, nil, 247, - nil, nil, 247, 247, nil, nil, 247, nil, nil, nil, - nil, nil, 247, nil, nil, nil, nil, nil, nil, nil, - nil, 247, nil, nil, nil, nil, 247, 247, 247, 247, - nil, 247, 247, 247, 247, nil, nil, nil, nil, 247, - 247, nil, nil, nil, 248, 248, 248, 247, 248, 247, - 247, 247, 248, 248, nil, nil, nil, 248, nil, 248, - 248, 248, 248, 248, 248, 248, nil, nil, nil, nil, - nil, 248, 248, 248, 248, 248, 248, 248, nil, nil, - 248, nil, nil, nil, nil, nil, nil, 248, nil, nil, - 248, 248, 248, 248, 248, 248, 248, 248, nil, 248, - 248, 248, nil, 248, 248, 248, 248, 248, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 248, nil, nil, - 248, nil, nil, 248, 248, nil, nil, 248, nil, nil, - nil, nil, nil, 248, nil, nil, nil, nil, nil, nil, - nil, nil, 248, nil, nil, nil, nil, 248, 248, 248, - 248, nil, 248, 248, 248, 248, nil, nil, nil, nil, - 248, 248, nil, nil, nil, 249, 249, 249, 248, 249, - 248, 248, 248, 249, 249, nil, nil, nil, 249, nil, - 249, 249, 249, 249, 249, 249, 249, nil, nil, nil, - nil, nil, 249, 249, 249, 249, 249, 249, 249, nil, - nil, 249, nil, nil, nil, nil, nil, nil, 249, nil, - nil, 249, 249, 249, 249, 249, 249, 249, 249, nil, - 249, 249, 249, nil, 249, 249, 249, 249, 249, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 249, nil, - nil, 249, nil, nil, 249, 249, nil, nil, 249, nil, - nil, nil, nil, nil, 249, nil, nil, nil, nil, nil, - nil, nil, nil, 249, nil, nil, nil, nil, 249, 249, - 249, 249, nil, 249, 249, 249, 249, nil, nil, nil, - nil, 249, 249, nil, nil, nil, 250, 250, 250, 249, - 250, 249, 249, 249, 250, 250, nil, nil, nil, 250, - nil, 250, 250, 250, 250, 250, 250, 250, nil, nil, - nil, nil, nil, 250, 250, 250, 250, 250, 250, 250, - nil, nil, 250, nil, nil, nil, nil, nil, nil, 250, - nil, nil, 250, 250, 250, 250, 250, 250, 250, 250, - nil, 250, 250, 250, nil, 250, 250, 250, 250, 250, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 250, - nil, nil, 250, nil, nil, 250, 250, nil, nil, 250, - nil, nil, nil, nil, nil, 250, nil, nil, nil, nil, - nil, nil, nil, nil, 250, nil, nil, nil, nil, 250, - 250, 250, 250, nil, 250, 250, 250, 250, nil, nil, - nil, nil, 250, 250, nil, nil, nil, 251, 251, 251, - 250, 251, 250, 250, 250, 251, 251, nil, nil, nil, - 251, nil, 251, 251, 251, 251, 251, 251, 251, nil, - nil, nil, nil, nil, 251, 251, 251, 251, 251, 251, - 251, nil, nil, 251, nil, nil, nil, nil, nil, nil, - 251, nil, nil, 251, 251, 251, 251, 251, 251, 251, - 251, nil, 251, 251, 251, nil, 251, 251, 251, 251, - 251, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 251, nil, nil, 251, nil, nil, 251, 251, nil, nil, - 251, nil, nil, nil, nil, nil, 251, nil, nil, nil, - nil, nil, nil, nil, nil, 251, nil, nil, nil, nil, - 251, 251, 251, 251, nil, 251, 251, 251, 251, nil, - nil, nil, nil, 251, 251, nil, nil, nil, 252, 252, - 252, 251, 252, 251, 251, 251, 252, 252, nil, nil, - nil, 252, nil, 252, 252, 252, 252, 252, 252, 252, - nil, nil, nil, nil, nil, 252, 252, 252, 252, 252, - 252, 252, nil, nil, 252, nil, nil, nil, nil, nil, - nil, 252, nil, nil, 252, 252, 252, 252, 252, 252, - 252, 252, nil, 252, 252, 252, nil, 252, 252, 252, - 252, 252, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 252, nil, nil, 252, nil, nil, 252, 252, nil, - nil, 252, nil, nil, nil, nil, nil, 252, nil, nil, - nil, nil, nil, nil, nil, nil, 252, nil, nil, nil, - nil, 252, 252, 252, 252, nil, 252, 252, 252, 252, - nil, nil, nil, nil, 252, 252, nil, nil, nil, 253, - 253, 253, 252, 253, 252, 252, 252, 253, 253, nil, - nil, nil, 253, nil, 253, 253, 253, 253, 253, 253, - 253, nil, nil, nil, nil, nil, 253, 253, 253, 253, - 253, 253, 253, nil, nil, 253, nil, nil, nil, nil, - nil, nil, 253, nil, nil, 253, 253, 253, 253, 253, - 253, 253, 253, nil, 253, 253, 253, nil, 253, 253, - 253, 253, 253, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 253, nil, nil, 253, nil, nil, 253, 253, - nil, nil, 253, nil, nil, nil, nil, nil, 253, nil, - nil, nil, nil, nil, nil, nil, nil, 253, nil, nil, - nil, nil, 253, 253, 253, 253, nil, 253, 253, 253, - 253, nil, nil, nil, nil, 253, 253, nil, nil, nil, - 254, 254, 254, 253, 254, 253, 253, 253, 254, 254, - nil, nil, nil, 254, nil, 254, 254, 254, 254, 254, - 254, 254, nil, nil, nil, nil, nil, 254, 254, 254, - 254, 254, 254, 254, nil, nil, 254, nil, nil, nil, - nil, nil, nil, 254, nil, nil, 254, 254, 254, 254, - 254, 254, 254, 254, nil, 254, 254, 254, nil, 254, - 254, 254, 254, 254, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 254, nil, nil, 254, nil, nil, 254, - 254, nil, nil, 254, nil, nil, nil, nil, nil, 254, - nil, nil, nil, nil, nil, nil, nil, nil, 254, nil, - nil, nil, nil, 254, 254, 254, 254, nil, 254, 254, - 254, 254, nil, nil, nil, nil, 254, 254, nil, nil, - nil, 255, 255, 255, 254, 255, 254, 254, 254, 255, - 255, nil, nil, nil, 255, nil, 255, 255, 255, 255, - 255, 255, 255, nil, nil, nil, nil, nil, 255, 255, - 255, 255, 255, 255, 255, nil, nil, 255, nil, nil, - nil, nil, nil, nil, 255, nil, nil, 255, 255, 255, - 255, 255, 255, 255, 255, nil, 255, 255, 255, nil, - 255, 255, 255, 255, 255, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 255, nil, nil, 255, nil, nil, - 255, 255, nil, nil, 255, nil, nil, nil, nil, nil, - 255, nil, nil, nil, nil, nil, nil, nil, nil, 255, - nil, nil, nil, nil, 255, 255, 255, 255, nil, 255, - 255, 255, 255, nil, nil, nil, nil, 255, 255, nil, - nil, nil, 256, 256, 256, 255, 256, 255, 255, 255, - 256, 256, nil, nil, nil, 256, nil, 256, 256, 256, - 256, 256, 256, 256, nil, nil, nil, nil, nil, 256, - 256, 256, 256, 256, 256, 256, nil, nil, 256, nil, - nil, nil, nil, nil, nil, 256, nil, nil, 256, 256, - 256, 256, 256, 256, 256, 256, nil, 256, 256, 256, - nil, 256, 256, 256, 256, 256, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 256, nil, nil, 256, nil, - nil, 256, 256, nil, nil, 256, nil, nil, nil, nil, - nil, 256, nil, nil, nil, nil, nil, nil, nil, nil, - 256, nil, nil, nil, nil, 256, 256, 256, 256, nil, - 256, 256, 256, 256, nil, nil, nil, nil, 256, 256, - nil, nil, nil, 257, 257, 257, 256, 257, 256, 256, - 256, 257, 257, nil, nil, nil, 257, nil, 257, 257, - 257, 257, 257, 257, 257, nil, nil, nil, nil, nil, - 257, 257, 257, 257, 257, 257, 257, nil, nil, 257, - nil, nil, nil, nil, nil, nil, 257, nil, nil, 257, - 257, 257, 257, 257, 257, 257, 257, nil, 257, 257, - 257, nil, 257, 257, 257, 257, 257, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 257, nil, nil, 257, - nil, nil, 257, 257, nil, nil, 257, nil, nil, nil, - nil, nil, 257, nil, nil, nil, nil, nil, nil, nil, - nil, 257, nil, nil, nil, nil, 257, 257, 257, 257, - nil, 257, 257, 257, 257, nil, nil, nil, nil, 257, - 257, nil, nil, nil, 258, 258, 258, 257, 258, 257, - 257, 257, 258, 258, nil, nil, nil, 258, nil, 258, - 258, 258, 258, 258, 258, 258, nil, nil, nil, nil, - nil, 258, 258, 258, 258, 258, 258, 258, nil, nil, - 258, nil, nil, nil, nil, nil, nil, 258, nil, nil, - 258, 258, 258, 258, 258, 258, 258, 258, nil, 258, - 258, 258, nil, 258, 258, 258, 258, 258, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 258, nil, nil, - 258, nil, nil, 258, 258, nil, nil, 258, nil, nil, - nil, nil, nil, 258, nil, nil, nil, nil, nil, nil, - nil, nil, 258, nil, nil, nil, nil, 258, 258, 258, - 258, nil, 258, 258, 258, 258, nil, nil, nil, nil, - 258, 258, nil, nil, nil, 265, 265, 265, 258, 265, - 258, 258, 258, 265, 265, nil, nil, nil, 265, nil, - 265, 265, 265, 265, 265, 265, 265, nil, nil, nil, - nil, nil, 265, 265, 265, 265, 265, 265, 265, nil, - nil, 265, nil, nil, nil, nil, nil, nil, 265, nil, - nil, 265, 265, 265, 265, 265, 265, 265, 265, 265, - 265, 265, 265, nil, 265, 265, 265, 265, 265, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 265, nil, - nil, 265, nil, nil, 265, 265, nil, nil, 265, nil, - 265, nil, 265, nil, 265, nil, nil, 265, nil, nil, - nil, nil, nil, 265, nil, nil, nil, nil, 265, 265, - 265, 265, nil, 265, 265, 265, 265, nil, nil, nil, - nil, 265, 265, nil, nil, nil, 266, 266, 266, 265, - 266, 265, 265, 265, 266, 266, nil, nil, nil, 266, - nil, 266, 266, 266, 266, 266, 266, 266, nil, nil, - nil, nil, nil, 266, 266, 266, 266, 266, 266, 266, - nil, nil, 266, nil, nil, nil, nil, nil, nil, 266, - nil, nil, 266, 266, 266, 266, 266, 266, 266, 266, - 266, 266, 266, 266, nil, 266, 266, 266, 266, 266, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 266, - nil, nil, 266, nil, nil, 266, 266, nil, nil, 266, - nil, 266, nil, 266, nil, 266, nil, nil, 266, nil, - nil, nil, nil, nil, 266, nil, nil, nil, nil, 266, - 266, 266, 266, nil, 266, 266, 266, 266, nil, nil, - nil, nil, 266, 266, nil, nil, nil, 274, 274, 274, - 266, 274, 266, 266, 266, 274, 274, nil, nil, nil, - 274, nil, 274, 274, 274, 274, 274, 274, 274, nil, - nil, nil, nil, nil, 274, 274, 274, 274, 274, 274, - 274, nil, nil, 274, nil, nil, nil, nil, nil, nil, - 274, nil, nil, 274, 274, 274, 274, 274, 274, 274, - 274, 274, 274, 274, 274, nil, 274, 274, 274, 274, - 274, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 274, nil, nil, 274, nil, nil, 274, 274, nil, nil, - 274, nil, 274, nil, 274, nil, 274, nil, nil, 274, - nil, nil, nil, nil, nil, 274, nil, nil, nil, nil, - 274, 274, 274, 274, nil, 274, 274, 274, 274, nil, - nil, nil, nil, 274, 274, 274, nil, nil, 281, 281, - 281, 274, 281, 274, 274, 274, 281, 281, nil, nil, - nil, 281, nil, 281, 281, 281, 281, 281, 281, 281, - nil, nil, nil, nil, nil, 281, 281, 281, 281, 281, - 281, 281, nil, nil, 281, nil, nil, nil, nil, nil, - nil, 281, nil, nil, 281, 281, 281, 281, 281, 281, - 281, 281, nil, 281, 281, 281, nil, 281, 281, 281, - 281, 281, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 281, nil, nil, 281, nil, nil, 281, 281, nil, - nil, 281, nil, nil, nil, nil, nil, 281, nil, nil, - nil, nil, nil, nil, nil, nil, 281, nil, nil, nil, - nil, 281, 281, 281, 281, nil, 281, 281, 281, 281, - nil, nil, nil, nil, 281, 281, nil, nil, nil, 283, - 283, 283, 281, 283, 281, 281, 281, 283, 283, nil, - nil, nil, 283, nil, 283, 283, 283, 283, 283, 283, - 283, nil, nil, nil, nil, nil, 283, 283, 283, 283, - 283, 283, 283, nil, nil, 283, nil, nil, nil, nil, - nil, nil, 283, nil, nil, 283, 283, 283, 283, 283, - 283, 283, 283, nil, 283, 283, 283, nil, 283, 283, - 283, 283, 283, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 283, nil, nil, 283, nil, nil, 283, 283, - nil, nil, 283, nil, nil, nil, nil, nil, 283, nil, - nil, nil, nil, nil, nil, nil, nil, 283, nil, nil, - nil, nil, 283, 283, 283, 283, nil, 283, 283, 283, - 283, nil, nil, nil, nil, 283, 283, nil, nil, nil, - 286, 286, 286, 283, 286, 283, 283, 283, 286, 286, - nil, nil, nil, 286, nil, 286, 286, 286, 286, 286, - 286, 286, nil, nil, nil, nil, nil, 286, 286, 286, - 286, 286, 286, 286, nil, nil, 286, nil, nil, nil, - nil, nil, nil, 286, nil, nil, 286, 286, 286, 286, - 286, 286, 286, 286, nil, 286, 286, 286, nil, 286, - 286, 286, 286, 286, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 286, nil, nil, 286, nil, nil, 286, - 286, nil, nil, 286, nil, nil, nil, nil, nil, 286, - nil, nil, nil, nil, nil, nil, nil, nil, 286, nil, - nil, nil, nil, 286, 286, 286, 286, nil, 286, 286, - 286, 286, nil, nil, nil, nil, 286, 286, nil, nil, - nil, 287, 287, 287, 286, 287, 286, 286, 286, 287, - 287, nil, nil, nil, 287, nil, 287, 287, 287, 287, - 287, 287, 287, nil, nil, nil, nil, nil, 287, 287, - 287, 287, 287, 287, 287, nil, nil, 287, nil, nil, - nil, nil, nil, nil, 287, nil, nil, 287, 287, 287, - 287, 287, 287, 287, 287, nil, 287, 287, 287, nil, - 287, 287, 287, 287, 287, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 287, nil, nil, 287, nil, nil, - 287, 287, nil, nil, 287, nil, nil, nil, nil, nil, - 287, nil, nil, nil, nil, nil, nil, nil, nil, 287, - nil, nil, nil, nil, 287, 287, 287, 287, nil, 287, - 287, 287, 287, nil, nil, nil, nil, 287, 287, nil, - nil, nil, nil, nil, nil, 287, nil, 287, 287, 287, - 292, 292, 292, 292, 292, nil, nil, nil, 292, 292, - nil, nil, nil, 292, nil, 292, 292, 292, 292, 292, - 292, 292, nil, nil, nil, nil, nil, 292, 292, 292, - 292, 292, 292, 292, nil, nil, 292, nil, nil, nil, - nil, nil, 292, 292, nil, 292, 292, 292, 292, 292, - 292, 292, 292, 292, nil, 292, 292, 292, nil, 292, - 292, 292, 292, 292, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 292, nil, nil, 292, nil, nil, 292, - 292, nil, nil, 292, nil, 292, nil, nil, nil, 292, - nil, nil, nil, nil, nil, nil, nil, nil, 292, nil, - nil, nil, nil, 292, 292, 292, 292, nil, 292, 292, - 292, 292, nil, nil, nil, nil, 292, 292, nil, nil, - nil, 300, 300, 300, 292, 300, 292, 292, 292, 300, - 300, nil, nil, nil, 300, nil, 300, 300, 300, 300, - 300, 300, 300, nil, nil, nil, nil, nil, 300, 300, - 300, 300, 300, 300, 300, nil, nil, 300, nil, nil, - nil, nil, nil, nil, 300, nil, nil, 300, 300, 300, - 300, 300, 300, 300, 300, nil, 300, 300, 300, nil, - 300, 300, nil, nil, 300, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 300, nil, nil, 300, nil, nil, - 300, 300, nil, nil, 300, nil, nil, 940, nil, 940, - 940, 940, 940, 940, nil, nil, nil, nil, nil, nil, - nil, nil, 940, nil, 300, 300, 300, 300, nil, 300, - 300, 300, 300, nil, nil, nil, nil, 300, 300, nil, - nil, nil, 300, nil, 940, 300, nil, 300, 300, 300, - 317, 317, 317, nil, 317, 940, 940, nil, 317, 317, - 940, nil, nil, 317, nil, 317, 317, 317, 317, 317, - 317, 317, nil, nil, nil, nil, nil, 317, 317, 317, - 317, 317, 317, 317, nil, nil, 317, nil, nil, nil, - nil, nil, nil, 317, nil, nil, 317, 317, 317, 317, - 317, 317, 317, 317, nil, 317, 317, 317, nil, 317, - 317, nil, nil, 317, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 317, nil, nil, 317, nil, nil, 317, - 317, nil, nil, 317, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 317, 317, 317, 317, nil, 317, 317, - 317, 317, nil, nil, nil, nil, 317, 317, nil, nil, - nil, 325, 325, 325, 317, 325, 317, 317, 317, 325, - 325, nil, nil, nil, 325, nil, 325, 325, 325, 325, - 325, 325, 325, nil, nil, nil, nil, nil, 325, 325, - 325, 325, 325, 325, 325, nil, nil, 325, nil, nil, - nil, nil, nil, nil, 325, nil, nil, 325, 325, 325, - 325, 325, 325, 325, 325, nil, 325, 325, 325, nil, - 325, 325, 325, 325, 325, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 325, nil, nil, 325, 325, nil, - 325, 325, nil, nil, 325, nil, nil, nil, nil, nil, - 325, nil, nil, nil, nil, nil, nil, nil, nil, 325, - nil, nil, nil, nil, 325, 325, 325, 325, nil, 325, - 325, 325, 325, nil, nil, nil, nil, 325, 325, nil, - nil, nil, 327, 327, 327, 325, 327, 325, 325, 325, - 327, 327, nil, nil, nil, 327, nil, 327, 327, 327, - 327, 327, 327, 327, nil, nil, nil, nil, nil, 327, - 327, 327, 327, 327, 327, 327, nil, nil, 327, nil, - nil, nil, nil, nil, nil, 327, nil, nil, 327, 327, - 327, 327, 327, 327, 327, 327, nil, 327, 327, 327, - nil, 327, 327, 327, 327, 327, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 327, nil, nil, 327, nil, - nil, 327, 327, nil, nil, 327, nil, nil, nil, nil, - nil, 327, nil, nil, nil, nil, nil, nil, nil, nil, - 327, nil, nil, nil, nil, 327, 327, 327, 327, nil, - 327, 327, 327, 327, nil, nil, nil, nil, 327, 327, - nil, nil, nil, 341, 341, 341, 327, 341, 327, 327, - 327, 341, 341, nil, nil, nil, 341, nil, 341, 341, - 341, 341, 341, 341, 341, nil, nil, nil, nil, nil, - 341, 341, 341, 341, 341, 341, 341, nil, nil, 341, - nil, nil, nil, nil, nil, nil, 341, nil, nil, 341, - 341, 341, 341, 341, 341, 341, 341, nil, 341, 341, - 341, nil, 341, 341, 341, 341, 341, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 341, nil, nil, 341, - nil, nil, 341, 341, nil, nil, 341, nil, nil, nil, - nil, nil, 341, nil, nil, nil, nil, nil, nil, nil, - nil, 341, nil, nil, nil, nil, 341, 341, 341, 341, - nil, 341, 341, 341, 341, nil, nil, nil, nil, 341, - 341, nil, nil, nil, 342, 342, 342, 341, 342, 341, - 341, 341, 342, 342, nil, nil, nil, 342, nil, 342, - 342, 342, 342, 342, 342, 342, nil, nil, nil, nil, - nil, 342, 342, 342, 342, 342, 342, 342, nil, nil, - 342, nil, nil, nil, nil, nil, nil, 342, nil, nil, - 342, 342, 342, 342, 342, 342, 342, 342, nil, 342, - 342, 342, nil, 342, 342, 342, 342, 342, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 342, nil, nil, - 342, nil, nil, 342, 342, nil, nil, 342, nil, nil, - nil, nil, nil, 342, nil, nil, nil, nil, nil, nil, - nil, nil, 342, nil, nil, nil, nil, 342, 342, 342, - 342, nil, 342, 342, 342, 342, nil, nil, nil, nil, - 342, 342, nil, nil, nil, 361, 361, 361, 342, 361, - 342, 342, 342, 361, 361, nil, nil, nil, 361, nil, - 361, 361, 361, 361, 361, 361, 361, nil, nil, nil, - nil, nil, 361, 361, 361, 361, 361, 361, 361, nil, - nil, 361, nil, nil, nil, nil, nil, nil, 361, nil, - nil, 361, 361, 361, 361, 361, 361, 361, 361, nil, - 361, 361, 361, nil, 361, 361, 361, 361, 361, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 361, nil, - nil, 361, nil, nil, 361, 361, nil, nil, 361, nil, - nil, nil, nil, nil, 361, nil, nil, nil, nil, nil, - nil, nil, nil, 361, nil, nil, nil, nil, 361, 361, - 361, 361, nil, 361, 361, 361, 361, nil, nil, nil, - nil, 361, 361, nil, nil, nil, 377, 377, 377, 361, - 377, 361, 361, 361, 377, 377, nil, nil, nil, 377, - nil, 377, 377, 377, 377, 377, 377, 377, nil, nil, - nil, nil, nil, 377, 377, 377, 377, 377, 377, 377, - nil, nil, 377, nil, nil, nil, nil, nil, nil, 377, - nil, nil, 377, 377, 377, 377, 377, 377, 377, 377, - nil, 377, 377, 377, nil, 377, 377, 377, 377, 377, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 377, - nil, nil, 377, nil, nil, 377, 377, nil, nil, 377, - nil, nil, nil, nil, nil, 377, nil, nil, nil, nil, - nil, nil, nil, nil, 377, nil, nil, nil, nil, 377, - 377, 377, 377, nil, 377, 377, 377, 377, nil, nil, - nil, nil, 377, 377, nil, nil, nil, 405, 405, 405, - 377, 405, 377, 377, 377, 405, 405, nil, nil, nil, - 405, nil, 405, 405, 405, 405, 405, 405, 405, nil, - nil, nil, nil, nil, 405, 405, 405, 405, 405, 405, - 405, nil, nil, 405, nil, nil, nil, nil, nil, nil, - 405, nil, nil, 405, 405, 405, 405, 405, 405, 405, - 405, nil, 405, 405, 405, nil, 405, 405, 405, 405, - 405, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 405, nil, nil, 405, nil, nil, 405, 405, nil, nil, - 405, nil, nil, nil, nil, nil, 405, nil, nil, nil, - nil, nil, nil, nil, nil, 405, nil, nil, nil, nil, - 405, 405, 405, 405, nil, 405, 405, 405, 405, nil, - nil, nil, nil, 405, 405, nil, nil, nil, 443, 443, - 443, 405, 443, 405, 405, 405, 443, 443, nil, nil, - nil, 443, nil, 443, 443, 443, 443, 443, 443, 443, - nil, nil, nil, nil, nil, 443, 443, 443, 443, 443, - 443, 443, nil, nil, 443, nil, nil, nil, nil, nil, - nil, 443, nil, nil, 443, 443, 443, 443, 443, 443, - 443, 443, 443, 443, 443, 443, nil, 443, 443, 443, - 443, 443, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 443, nil, nil, 443, nil, nil, 443, 443, nil, - nil, 443, nil, 443, nil, 443, nil, 443, nil, nil, - 443, nil, nil, nil, nil, nil, 443, nil, nil, nil, - nil, 443, 443, 443, 443, nil, 443, 443, 443, 443, - nil, nil, nil, nil, 443, 443, nil, nil, nil, 445, - 445, 445, 443, 445, 443, 443, 443, 445, 445, nil, - nil, nil, 445, nil, 445, 445, 445, 445, 445, 445, - 445, nil, nil, nil, nil, nil, 445, 445, 445, 445, - 445, 445, 445, nil, nil, 445, nil, nil, nil, nil, - nil, nil, 445, nil, nil, 445, 445, 445, 445, 445, - 445, 445, 445, nil, 445, 445, 445, nil, 445, 445, - 445, 445, 445, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 445, nil, nil, 445, nil, nil, 445, 445, - nil, nil, 445, nil, nil, nil, nil, nil, 445, nil, - nil, nil, nil, nil, nil, nil, nil, 445, nil, nil, - nil, nil, 445, 445, 445, 445, nil, 445, 445, 445, - 445, nil, nil, nil, nil, 445, 445, nil, nil, nil, - 446, 446, 446, 445, 446, 445, 445, 445, 446, 446, - nil, nil, nil, 446, nil, 446, 446, 446, 446, 446, - 446, 446, nil, nil, nil, nil, nil, 446, 446, 446, - 446, 446, 446, 446, nil, nil, 446, nil, nil, nil, - nil, nil, nil, 446, nil, nil, 446, 446, 446, 446, - 446, 446, 446, 446, nil, 446, 446, 446, nil, 446, - 446, 446, 446, 446, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 446, nil, nil, 446, nil, nil, 446, - 446, nil, nil, 446, nil, nil, nil, nil, nil, 446, - nil, nil, nil, nil, nil, nil, nil, nil, 446, nil, - nil, nil, nil, 446, 446, 446, 446, nil, 446, 446, - 446, 446, nil, nil, nil, nil, 446, 446, nil, nil, - nil, 447, 447, 447, 446, 447, 446, 446, 446, 447, - 447, nil, nil, nil, 447, nil, 447, 447, 447, 447, - 447, 447, 447, nil, nil, nil, nil, nil, 447, 447, - 447, 447, 447, 447, 447, nil, nil, 447, nil, nil, - nil, nil, nil, nil, 447, nil, nil, 447, 447, 447, - 447, 447, 447, 447, 447, nil, 447, 447, 447, nil, - 447, 447, 447, 447, 447, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 447, nil, nil, 447, nil, nil, - 447, 447, nil, nil, 447, nil, nil, nil, nil, nil, - 447, nil, nil, nil, nil, nil, nil, nil, nil, 447, - nil, nil, nil, nil, 447, 447, 447, 447, nil, 447, - 447, 447, 447, nil, nil, nil, nil, 447, 447, nil, - nil, nil, 487, 487, 487, 447, 487, 447, 447, 447, - 487, 487, nil, nil, nil, 487, nil, 487, 487, 487, - 487, 487, 487, 487, nil, nil, nil, nil, nil, 487, - 487, 487, 487, 487, 487, 487, nil, nil, 487, nil, - nil, nil, nil, nil, nil, 487, nil, nil, 487, 487, - 487, 487, 487, 487, 487, 487, 487, 487, 487, 487, - nil, 487, 487, 487, 487, 487, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 487, nil, nil, 487, nil, - nil, 487, 487, nil, nil, 487, nil, 487, nil, 487, - nil, 487, nil, nil, 487, nil, nil, nil, nil, nil, - 487, nil, nil, nil, nil, 487, 487, 487, 487, nil, - 487, 487, 487, 487, nil, nil, nil, nil, 487, 487, - nil, nil, nil, 489, 489, 489, 487, 489, 487, 487, - 487, 489, 489, nil, nil, nil, 489, nil, 489, 489, - 489, 489, 489, 489, 489, nil, nil, nil, nil, nil, - 489, 489, 489, 489, 489, 489, 489, nil, nil, 489, - nil, nil, nil, nil, nil, nil, 489, nil, nil, 489, - 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, - 489, nil, 489, 489, 489, 489, 489, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 489, nil, nil, 489, - nil, nil, 489, 489, nil, nil, 489, nil, nil, nil, - 489, nil, 489, nil, nil, 489, nil, nil, nil, nil, - nil, 489, nil, nil, nil, nil, 489, 489, 489, 489, - nil, 489, 489, 489, 489, nil, nil, nil, nil, 489, - 489, nil, nil, nil, 491, 491, 491, 489, 491, 489, - 489, 489, 491, 491, nil, nil, nil, 491, nil, 491, - 491, 491, 491, 491, 491, 491, nil, nil, nil, nil, - nil, 491, 491, 491, 491, 491, 491, 491, nil, nil, - 491, nil, nil, nil, nil, nil, nil, 491, nil, nil, - 491, 491, 491, 491, 491, 491, 491, 491, nil, 491, - 491, 491, nil, 491, 491, 491, 491, 491, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 491, nil, nil, - 491, nil, nil, 491, 491, nil, nil, 491, nil, nil, - nil, nil, nil, 491, nil, nil, nil, nil, nil, nil, - nil, nil, 491, nil, nil, nil, nil, 491, 491, 491, - 491, nil, 491, 491, 491, 491, nil, nil, nil, nil, - 491, 491, nil, nil, nil, nil, nil, nil, 491, nil, - 491, 491, 491, 497, 497, 497, 497, 497, nil, nil, - nil, 497, 497, nil, nil, nil, 497, nil, 497, 497, - 497, 497, 497, 497, 497, nil, nil, nil, nil, nil, - 497, 497, 497, 497, 497, 497, 497, nil, nil, 497, - nil, nil, nil, nil, nil, 497, 497, 497, 497, 497, - 497, 497, 497, 497, 497, 497, 497, nil, 497, 497, - 497, nil, 497, 497, 497, 497, 497, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 497, nil, nil, 497, - nil, nil, 497, 497, nil, nil, 497, nil, 497, nil, - nil, nil, 497, nil, nil, nil, nil, nil, nil, nil, - nil, 497, nil, nil, nil, nil, 497, 497, 497, 497, - nil, 497, 497, 497, 497, nil, nil, nil, nil, 497, - 497, nil, nil, nil, nil, nil, 497, 497, nil, 497, - 497, 497, 505, 505, 505, nil, 505, nil, nil, nil, - 505, 505, nil, nil, nil, 505, nil, 505, 505, 505, - 505, 505, 505, 505, nil, nil, nil, nil, nil, 505, - 505, 505, 505, 505, 505, 505, nil, nil, 505, nil, - nil, nil, nil, nil, nil, 505, nil, nil, 505, 505, - 505, 505, 505, 505, 505, 505, nil, 505, 505, 505, - nil, 505, 505, nil, nil, 505, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 505, nil, nil, 505, nil, - nil, 505, 505, nil, nil, 505, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 505, 505, 505, 505, nil, - 505, 505, 505, 505, nil, nil, nil, nil, 505, 505, - nil, nil, nil, 507, 507, 507, 505, 507, 505, 505, - 505, 507, 507, nil, nil, nil, 507, nil, 507, 507, - 507, 507, 507, 507, 507, nil, nil, nil, nil, nil, - 507, 507, 507, 507, 507, 507, 507, nil, nil, 507, - nil, nil, nil, nil, nil, nil, 507, nil, nil, 507, - 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, - 507, nil, 507, 507, 507, 507, 507, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 507, nil, nil, 507, - nil, nil, 507, 507, nil, nil, 507, nil, 507, nil, - 507, nil, 507, nil, nil, 507, nil, nil, nil, nil, - nil, 507, nil, nil, nil, nil, 507, 507, 507, 507, - nil, 507, 507, 507, 507, nil, nil, nil, nil, 507, - 507, nil, nil, nil, 513, 513, 513, 507, 513, 507, - 507, 507, 513, 513, nil, nil, nil, 513, nil, 513, - 513, 513, 513, 513, 513, 513, nil, nil, nil, nil, - nil, 513, 513, 513, 513, 513, 513, 513, nil, nil, - 513, nil, nil, nil, nil, nil, nil, 513, nil, nil, - 513, 513, 513, 513, 513, 513, 513, 513, nil, 513, - 513, 513, nil, 513, 513, nil, nil, 513, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 513, nil, nil, - 513, nil, nil, 513, 513, nil, nil, 513, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 513, 513, 513, - 513, nil, 513, 513, 513, 513, nil, nil, nil, nil, - 513, 513, nil, nil, nil, 516, 516, 516, 513, 516, - 513, 513, 513, 516, 516, nil, nil, nil, 516, nil, - 516, 516, 516, 516, 516, 516, 516, nil, nil, nil, - nil, nil, 516, 516, 516, 516, 516, 516, 516, nil, - nil, 516, nil, nil, nil, nil, nil, nil, 516, nil, - nil, 516, 516, 516, 516, 516, 516, 516, 516, nil, - 516, 516, 516, nil, 516, 516, 516, 516, 516, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 516, nil, - nil, 516, nil, nil, 516, 516, nil, nil, 516, nil, - nil, nil, nil, nil, 516, nil, nil, nil, nil, nil, - nil, nil, nil, 516, nil, nil, nil, nil, 516, 516, - 516, 516, nil, 516, 516, 516, 516, nil, nil, nil, - nil, 516, 516, nil, nil, nil, 517, 517, 517, 516, - 517, 516, 516, 516, 517, 517, nil, nil, nil, 517, - nil, 517, 517, 517, 517, 517, 517, 517, nil, nil, - nil, nil, nil, 517, 517, 517, 517, 517, 517, 517, - nil, nil, 517, nil, nil, nil, nil, nil, nil, 517, - nil, nil, 517, 517, 517, 517, 517, 517, 517, 517, - nil, 517, 517, 517, nil, 517, 517, 517, 517, 517, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 517, - nil, nil, 517, nil, nil, 517, 517, nil, nil, 517, - nil, nil, nil, nil, nil, 517, nil, nil, nil, nil, - nil, nil, nil, nil, 517, nil, nil, nil, nil, 517, - 517, 517, 517, nil, 517, 517, 517, 517, nil, nil, - nil, nil, 517, 517, nil, nil, nil, 521, 521, 521, - 517, 521, 517, 517, 517, 521, 521, nil, nil, nil, - 521, nil, 521, 521, 521, 521, 521, 521, 521, nil, - nil, nil, nil, nil, 521, 521, 521, 521, 521, 521, - 521, nil, nil, 521, nil, nil, nil, nil, nil, nil, - 521, nil, nil, 521, 521, 521, 521, 521, 521, 521, - 521, nil, 521, 521, 521, nil, 521, 521, 521, 521, - 521, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 521, nil, nil, 521, nil, nil, 521, 521, nil, nil, - 521, nil, nil, nil, nil, nil, 521, nil, nil, nil, - nil, nil, nil, nil, nil, 521, nil, nil, nil, nil, - 521, 521, 521, 521, nil, 521, 521, 521, 521, nil, - nil, nil, nil, 521, 521, nil, nil, nil, 527, 527, - 527, 521, 527, 521, 521, 521, 527, 527, nil, nil, - nil, 527, nil, 527, 527, 527, 527, 527, 527, 527, - nil, nil, nil, nil, nil, 527, 527, 527, 527, 527, - 527, 527, nil, nil, 527, nil, nil, nil, nil, nil, - nil, 527, nil, nil, 527, 527, 527, 527, 527, 527, - 527, 527, 527, 527, 527, 527, nil, 527, 527, 527, - 527, 527, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 527, nil, nil, 527, nil, nil, 527, 527, nil, - nil, 527, nil, 527, nil, nil, nil, 527, nil, nil, - 527, nil, nil, nil, nil, nil, 527, nil, nil, nil, - nil, 527, 527, 527, 527, nil, 527, 527, 527, 527, - nil, nil, nil, nil, 527, 527, nil, nil, nil, 530, - 530, 530, 527, 530, 527, 527, 527, 530, 530, nil, - nil, nil, 530, nil, 530, 530, 530, 530, 530, 530, - 530, nil, nil, nil, nil, nil, 530, 530, 530, 530, - 530, 530, 530, nil, nil, 530, nil, nil, nil, nil, - nil, nil, 530, nil, nil, 530, 530, 530, 530, 530, - 530, 530, 530, 530, 530, 530, 530, nil, 530, 530, - 530, 530, 530, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 530, nil, nil, 530, nil, nil, 530, 530, - nil, nil, 530, nil, nil, nil, nil, nil, 530, nil, - nil, 530, nil, nil, nil, nil, nil, 530, nil, nil, - nil, nil, 530, 530, 530, 530, nil, 530, 530, 530, - 530, nil, nil, nil, nil, 530, 530, nil, nil, nil, - 544, 544, 544, 530, 544, 530, 530, 530, 544, 544, - nil, nil, nil, 544, nil, 544, 544, 544, 544, 544, - 544, 544, nil, nil, nil, nil, nil, 544, 544, 544, - 544, 544, 544, 544, nil, nil, 544, nil, nil, nil, - nil, nil, nil, 544, nil, nil, 544, 544, 544, 544, - 544, 544, 544, 544, nil, 544, 544, 544, nil, 544, - 544, 544, 544, 544, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 544, nil, nil, 544, nil, nil, 544, - 544, nil, nil, 544, nil, 544, nil, nil, nil, 544, - nil, nil, nil, nil, nil, nil, nil, nil, 544, nil, - nil, nil, nil, 544, 544, 544, 544, nil, 544, 544, - 544, 544, nil, nil, nil, nil, 544, 544, nil, nil, - nil, 545, 545, 545, 544, 545, 544, 544, 544, 545, - 545, nil, nil, nil, 545, nil, 545, 545, 545, 545, - 545, 545, 545, nil, nil, nil, nil, nil, 545, 545, - 545, 545, 545, 545, 545, nil, nil, 545, nil, nil, - nil, nil, nil, nil, 545, nil, nil, 545, 545, 545, - 545, 545, 545, 545, 545, 545, 545, 545, 545, nil, - 545, 545, 545, 545, 545, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 545, nil, nil, 545, nil, nil, - 545, 545, nil, nil, 545, nil, 545, nil, 545, nil, - 545, nil, nil, 545, nil, nil, nil, nil, nil, 545, - nil, nil, nil, nil, 545, 545, 545, 545, nil, 545, - 545, 545, 545, nil, nil, nil, nil, 545, 545, nil, - nil, nil, 555, 555, 555, 545, 555, 545, 545, 545, - 555, 555, nil, nil, nil, 555, nil, 555, 555, 555, - 555, 555, 555, 555, nil, nil, nil, nil, nil, 555, - 555, 555, 555, 555, 555, 555, nil, nil, 555, nil, - nil, nil, nil, nil, nil, 555, nil, nil, 555, 555, - 555, 555, 555, 555, 555, 555, 555, 555, 555, 555, - nil, 555, 555, 555, 555, 555, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 555, nil, nil, 555, nil, - nil, 555, 555, nil, nil, 555, nil, 555, nil, 555, - nil, 555, nil, nil, 555, nil, nil, nil, nil, nil, - 555, nil, nil, nil, nil, 555, 555, 555, 555, nil, - 555, 555, 555, 555, nil, nil, nil, nil, 555, 555, - nil, nil, nil, 589, 589, 589, 555, 589, 555, 555, - 555, 589, 589, nil, nil, nil, 589, nil, 589, 589, - 589, 589, 589, 589, 589, nil, nil, nil, nil, nil, - 589, 589, 589, 589, 589, 589, 589, nil, nil, 589, - nil, nil, nil, nil, nil, nil, 589, nil, nil, 589, - 589, 589, 589, 589, 589, 589, 589, nil, 589, 589, - 589, nil, 589, 589, 589, 589, 589, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 589, nil, nil, 589, - nil, nil, 589, 589, nil, nil, 589, nil, 589, nil, - nil, nil, 589, nil, nil, nil, nil, nil, nil, nil, - nil, 589, nil, nil, nil, nil, 589, 589, 589, 589, - nil, 589, 589, 589, 589, nil, nil, nil, nil, 589, - 589, nil, nil, nil, 590, 590, 590, 589, 590, 589, - 589, 589, 590, 590, nil, nil, nil, 590, nil, 590, - 590, 590, 590, 590, 590, 590, nil, nil, nil, nil, - nil, 590, 590, 590, 590, 590, 590, 590, nil, nil, - 590, nil, nil, nil, nil, nil, nil, 590, nil, nil, - 590, 590, 590, 590, 590, 590, 590, 590, nil, 590, - 590, 590, nil, 590, 590, 590, 590, 590, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 590, nil, nil, - 590, nil, nil, 590, 590, nil, nil, 590, nil, nil, - nil, nil, nil, 590, nil, nil, nil, nil, nil, nil, - nil, nil, 590, nil, nil, nil, nil, 590, 590, 590, - 590, nil, 590, 590, 590, 590, nil, nil, nil, nil, - 590, 590, nil, nil, nil, 593, 593, 593, 590, 593, - 590, 590, 590, 593, 593, nil, nil, nil, 593, nil, - 593, 593, 593, 593, 593, 593, 593, nil, nil, nil, - nil, nil, 593, 593, 593, 593, 593, 593, 593, nil, - nil, 593, nil, nil, nil, nil, nil, nil, 593, nil, - nil, 593, 593, 593, 593, 593, 593, 593, 593, 593, - 593, 593, 593, nil, 593, 593, 593, 593, 593, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 593, nil, - nil, 593, nil, nil, 593, 593, nil, nil, 593, nil, - 593, nil, 593, nil, 593, nil, nil, 593, nil, nil, - nil, nil, nil, 593, nil, nil, nil, nil, 593, 593, - 593, 593, nil, 593, 593, 593, 593, nil, nil, nil, - nil, 593, 593, nil, nil, nil, 594, 594, 594, 593, - 594, 593, 593, 593, 594, 594, nil, nil, nil, 594, - nil, 594, 594, 594, 594, 594, 594, 594, nil, nil, - nil, nil, nil, 594, 594, 594, 594, 594, 594, 594, - nil, nil, 594, nil, nil, nil, nil, nil, nil, 594, - nil, nil, 594, 594, 594, 594, 594, 594, 594, 594, - 594, 594, 594, 594, nil, 594, 594, 594, 594, 594, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 594, - nil, nil, 594, nil, nil, 594, 594, nil, nil, 594, - nil, nil, nil, 594, nil, 594, nil, nil, 594, nil, - nil, nil, nil, nil, 594, nil, nil, nil, nil, 594, - 594, 594, 594, nil, 594, 594, 594, 594, nil, nil, - nil, nil, 594, 594, nil, nil, nil, 595, 595, 595, - 594, 595, 594, 594, 594, 595, 595, nil, nil, nil, - 595, nil, 595, 595, 595, 595, 595, 595, 595, nil, - nil, nil, nil, nil, 595, 595, 595, 595, 595, 595, - 595, nil, nil, 595, nil, nil, nil, nil, nil, nil, - 595, nil, nil, 595, 595, 595, 595, 595, 595, 595, - 595, nil, 595, 595, 595, nil, 595, 595, 595, 595, - 595, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 595, nil, nil, 595, nil, nil, 595, 595, nil, nil, - 595, nil, nil, nil, nil, nil, 595, nil, nil, nil, - nil, nil, nil, nil, nil, 595, nil, nil, nil, nil, - 595, 595, 595, 595, nil, 595, 595, 595, 595, nil, - nil, nil, nil, 595, 595, nil, nil, nil, 596, 596, - 596, 595, 596, 595, 595, 595, 596, 596, nil, nil, - nil, 596, nil, 596, 596, 596, 596, 596, 596, 596, - nil, nil, nil, nil, nil, 596, 596, 596, 596, 596, - 596, 596, nil, nil, 596, nil, nil, nil, nil, nil, - nil, 596, nil, nil, 596, 596, 596, 596, 596, 596, - 596, 596, nil, 596, 596, 596, nil, 596, 596, 596, - 596, 596, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 596, nil, nil, 596, nil, nil, 596, 596, nil, - nil, 596, nil, nil, nil, nil, nil, 596, nil, nil, - nil, nil, nil, nil, nil, nil, 596, nil, nil, nil, - nil, 596, 596, 596, 596, nil, 596, 596, 596, 596, - nil, nil, nil, nil, 596, 596, nil, nil, nil, 600, - 600, 600, 596, 600, 596, 596, 596, 600, 600, nil, - nil, nil, 600, nil, 600, 600, 600, 600, 600, 600, - 600, nil, nil, nil, nil, nil, 600, 600, 600, 600, - 600, 600, 600, nil, nil, 600, nil, nil, nil, nil, - nil, nil, 600, nil, nil, 600, 600, 600, 600, 600, - 600, 600, 600, nil, 600, 600, 600, nil, 600, 600, - 600, 600, 600, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 600, nil, nil, 600, nil, nil, 600, 600, - nil, nil, 600, nil, nil, nil, nil, nil, 600, nil, - nil, nil, nil, nil, nil, nil, nil, 600, nil, nil, - nil, nil, 600, 600, 600, 600, nil, 600, 600, 600, - 600, nil, nil, nil, nil, 600, 600, nil, nil, nil, - 601, 601, 601, 600, 601, 600, 600, 600, 601, 601, - nil, nil, nil, 601, nil, 601, 601, 601, 601, 601, - 601, 601, nil, nil, nil, nil, nil, 601, 601, 601, - 601, 601, 601, 601, nil, nil, 601, nil, nil, nil, - nil, nil, nil, 601, nil, nil, 601, 601, 601, 601, - 601, 601, 601, 601, nil, 601, 601, 601, nil, 601, - 601, 601, 601, 601, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 601, nil, nil, 601, nil, nil, 601, - 601, nil, nil, 601, nil, nil, nil, nil, nil, 601, - nil, nil, nil, nil, nil, nil, nil, nil, 601, nil, - nil, nil, nil, 601, 601, 601, 601, nil, 601, 601, - 601, 601, nil, nil, nil, nil, 601, 601, nil, nil, - nil, 604, 604, 604, 601, 604, 601, 601, 601, 604, - 604, nil, nil, nil, 604, nil, 604, 604, 604, 604, - 604, 604, 604, nil, nil, nil, nil, nil, 604, 604, - 604, 604, 604, 604, 604, nil, nil, 604, nil, nil, - nil, nil, nil, nil, 604, nil, nil, 604, 604, 604, - 604, 604, 604, 604, 604, nil, 604, 604, 604, nil, - 604, 604, 604, 604, 604, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 604, nil, nil, 604, nil, nil, - 604, 604, nil, nil, 604, nil, nil, nil, nil, nil, - 604, nil, nil, nil, nil, nil, nil, nil, nil, 604, - nil, nil, nil, nil, 604, 604, 604, 604, nil, 604, - 604, 604, 604, nil, nil, nil, nil, 604, 604, nil, - nil, nil, 605, 605, 605, 604, 605, 604, 604, 604, - 605, 605, nil, nil, nil, 605, nil, 605, 605, 605, - 605, 605, 605, 605, nil, nil, nil, nil, nil, 605, - 605, 605, 605, 605, 605, 605, nil, nil, 605, nil, - nil, nil, nil, nil, nil, 605, nil, nil, 605, 605, - 605, 605, 605, 605, 605, 605, nil, 605, 605, 605, - nil, 605, 605, 605, 605, 605, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 605, nil, nil, 605, nil, - nil, 605, 605, nil, nil, 605, nil, nil, nil, nil, - nil, 605, nil, nil, nil, nil, nil, nil, nil, nil, - 605, nil, nil, nil, nil, 605, 605, 605, 605, nil, - 605, 605, 605, 605, nil, nil, nil, nil, 605, 605, - nil, nil, nil, 629, 629, 629, 605, 629, 605, 605, - 605, 629, 629, nil, nil, nil, 629, nil, 629, 629, - 629, 629, 629, 629, 629, nil, nil, nil, nil, nil, - 629, 629, 629, 629, 629, 629, 629, nil, nil, 629, - nil, nil, nil, nil, nil, nil, 629, nil, nil, 629, - 629, 629, 629, 629, 629, 629, 629, nil, 629, 629, - 629, nil, 629, 629, 629, 629, 629, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 629, nil, nil, 629, - nil, nil, 629, 629, nil, nil, 629, nil, nil, nil, - nil, nil, 629, nil, nil, nil, nil, nil, nil, nil, - nil, 629, nil, nil, nil, nil, 629, 629, 629, 629, - nil, 629, 629, 629, 629, nil, nil, nil, nil, 629, - 629, nil, nil, nil, 632, 632, 632, 629, 632, 629, - 629, 629, 632, 632, nil, nil, nil, 632, nil, 632, - 632, 632, 632, 632, 632, 632, nil, nil, nil, nil, - nil, 632, 632, 632, 632, 632, 632, 632, nil, nil, - 632, nil, nil, nil, nil, nil, nil, 632, nil, nil, - 632, 632, 632, 632, 632, 632, 632, 632, nil, 632, - 632, 632, nil, 632, 632, 632, 632, 632, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 632, nil, nil, - 632, nil, nil, 632, 632, nil, nil, 632, nil, nil, - nil, nil, nil, 632, nil, nil, nil, nil, nil, nil, - nil, nil, 632, nil, nil, nil, nil, 632, 632, 632, - 632, nil, 632, 632, 632, 632, nil, nil, nil, nil, - 632, 632, nil, nil, nil, 636, 636, 636, 632, 636, - 632, 632, 632, 636, 636, nil, nil, nil, 636, nil, - 636, 636, 636, 636, 636, 636, 636, nil, nil, nil, - nil, nil, 636, 636, 636, 636, 636, 636, 636, nil, - nil, 636, nil, nil, nil, nil, nil, nil, 636, nil, - nil, 636, 636, 636, 636, 636, 636, 636, 636, nil, - 636, 636, 636, nil, 636, 636, nil, nil, 636, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 636, nil, - nil, 636, nil, nil, 636, 636, nil, nil, 636, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 636, 636, - 636, 636, nil, 636, 636, 636, 636, nil, nil, nil, - nil, 636, 636, nil, nil, nil, 647, 647, 647, 636, - 647, 636, 636, 636, 647, 647, nil, nil, nil, 647, - nil, 647, 647, 647, 647, 647, 647, 647, nil, nil, - nil, nil, nil, 647, 647, 647, 647, 647, 647, 647, - nil, nil, 647, nil, nil, nil, nil, nil, nil, 647, - nil, nil, 647, 647, 647, 647, 647, 647, 647, 647, - nil, 647, 647, 647, nil, 647, 647, nil, nil, 647, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 647, - nil, nil, 647, nil, nil, 647, 647, nil, nil, 647, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 647, - 647, 647, 647, nil, 647, 647, 647, 647, nil, nil, - nil, nil, 647, 647, nil, nil, nil, 652, 652, 652, - 647, 652, 647, 647, 647, 652, 652, nil, nil, nil, - 652, nil, 652, 652, 652, 652, 652, 652, 652, nil, - nil, nil, nil, nil, 652, 652, 652, 652, 652, 652, - 652, nil, nil, 652, nil, nil, nil, nil, nil, nil, - 652, nil, nil, 652, 652, 652, 652, 652, 652, 652, - 652, nil, 652, 652, 652, nil, 652, 652, 652, 652, - 652, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 652, nil, nil, 652, nil, nil, 652, 652, nil, nil, - 652, nil, 652, nil, nil, nil, 652, nil, nil, nil, - nil, nil, nil, nil, nil, 652, nil, nil, nil, nil, - 652, 652, 652, 652, nil, 652, 652, 652, 652, nil, - nil, nil, nil, 652, 652, nil, nil, nil, 678, 678, - 678, 652, 678, 652, 652, 652, 678, 678, nil, nil, - nil, 678, nil, 678, 678, 678, 678, 678, 678, 678, - nil, nil, nil, nil, nil, 678, 678, 678, 678, 678, - 678, 678, nil, nil, 678, nil, nil, nil, nil, nil, - nil, 678, nil, nil, 678, 678, 678, 678, 678, 678, - 678, 678, nil, 678, 678, 678, nil, 678, 678, 678, - 678, 678, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 678, nil, nil, 678, nil, nil, 678, 678, nil, - nil, 678, nil, nil, nil, nil, nil, 678, nil, nil, - nil, nil, nil, nil, nil, nil, 678, nil, nil, nil, - nil, 678, 678, 678, 678, nil, 678, 678, 678, 678, - nil, nil, nil, nil, 678, 678, nil, nil, nil, 705, - 705, 705, 678, 705, 678, 678, 678, 705, 705, nil, - nil, nil, 705, nil, 705, 705, 705, 705, 705, 705, - 705, nil, nil, nil, nil, nil, 705, 705, 705, 705, - 705, 705, 705, nil, nil, 705, nil, nil, nil, nil, - nil, nil, 705, nil, nil, 705, 705, 705, 705, 705, - 705, 705, 705, nil, 705, 705, 705, nil, 705, 705, - 705, 705, 705, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 705, nil, nil, 705, nil, nil, 705, 705, - nil, nil, 705, nil, nil, nil, nil, nil, 705, nil, - nil, nil, nil, nil, nil, nil, nil, 705, nil, nil, - nil, nil, 705, 705, 705, 705, nil, 705, 705, 705, - 705, nil, nil, nil, nil, 705, 705, nil, nil, nil, - 711, 711, 711, 705, 711, 705, 705, 705, 711, 711, - nil, nil, nil, 711, nil, 711, 711, 711, 711, 711, - 711, 711, nil, nil, nil, nil, nil, 711, 711, 711, - 711, 711, 711, 711, nil, nil, 711, nil, nil, nil, - nil, nil, nil, 711, nil, nil, 711, 711, 711, 711, - 711, 711, 711, 711, nil, 711, 711, 711, nil, 711, - 711, 711, 711, 711, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 711, nil, nil, 711, nil, nil, 711, - 711, nil, nil, 711, nil, nil, nil, nil, nil, 711, - nil, nil, nil, nil, nil, nil, nil, nil, 711, nil, - nil, nil, nil, 711, 711, 711, 711, nil, 711, 711, - 711, 711, nil, nil, nil, nil, 711, 711, nil, nil, - nil, 734, 734, 734, 711, 734, 711, 711, 711, 734, - 734, nil, nil, nil, 734, nil, 734, 734, 734, 734, - 734, 734, 734, nil, nil, nil, nil, nil, 734, 734, - 734, 734, 734, 734, 734, nil, nil, 734, nil, nil, - nil, nil, nil, nil, 734, nil, nil, 734, 734, 734, - 734, 734, 734, 734, 734, nil, 734, 734, 734, nil, - 734, 734, 734, 734, 734, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 734, nil, nil, 734, nil, nil, - 734, 734, nil, nil, 734, nil, nil, nil, nil, nil, - 734, nil, nil, nil, nil, nil, nil, nil, nil, 734, - nil, nil, nil, nil, 734, 734, 734, 734, nil, 734, - 734, 734, 734, nil, nil, nil, nil, 734, 734, nil, - nil, nil, 736, 736, 736, 734, 736, 734, 734, 734, - 736, 736, nil, nil, nil, 736, nil, 736, 736, 736, - 736, 736, 736, 736, nil, nil, nil, nil, nil, 736, - 736, 736, 736, 736, 736, 736, nil, nil, 736, nil, - nil, nil, nil, nil, nil, 736, nil, nil, 736, 736, - 736, 736, 736, 736, 736, 736, nil, 736, 736, 736, - nil, 736, 736, 736, 736, 736, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 736, nil, nil, 736, nil, - nil, 736, 736, nil, nil, 736, nil, nil, nil, nil, - nil, 736, nil, nil, nil, nil, nil, nil, nil, nil, - 736, nil, nil, nil, nil, 736, 736, 736, 736, nil, - 736, 736, 736, 736, nil, nil, nil, nil, 736, 736, - nil, nil, nil, 750, 750, 750, 736, 750, 736, 736, - 736, 750, 750, nil, nil, nil, 750, nil, 750, 750, - 750, 750, 750, 750, 750, nil, nil, nil, nil, nil, - 750, 750, 750, 750, 750, 750, 750, nil, nil, 750, - nil, nil, nil, nil, nil, nil, 750, nil, nil, 750, - 750, 750, 750, 750, 750, 750, 750, nil, 750, 750, - 750, nil, 750, 750, 750, 750, 750, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 750, nil, nil, 750, - nil, nil, 750, 750, nil, nil, 750, nil, nil, nil, - nil, nil, 750, nil, nil, nil, nil, nil, nil, nil, - nil, 750, nil, nil, nil, nil, 750, 750, 750, 750, - nil, 750, 750, 750, 750, nil, nil, nil, nil, 750, - 750, nil, nil, nil, 751, 751, 751, 750, 751, 750, - 750, 750, 751, 751, nil, nil, nil, 751, nil, 751, - 751, 751, 751, 751, 751, 751, nil, nil, nil, nil, - nil, 751, 751, 751, 751, 751, 751, 751, nil, nil, - 751, nil, nil, nil, nil, nil, nil, 751, nil, nil, - 751, 751, 751, 751, 751, 751, 751, 751, nil, 751, - 751, 751, nil, 751, 751, 751, 751, 751, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 751, nil, nil, - 751, nil, nil, 751, 751, nil, nil, 751, nil, nil, - nil, nil, nil, 751, nil, nil, nil, nil, nil, nil, - nil, nil, 751, nil, nil, nil, nil, 751, 751, 751, - 751, nil, 751, 751, 751, 751, nil, nil, nil, nil, - 751, 751, nil, nil, nil, 752, 752, 752, 751, 752, - 751, 751, 751, 752, 752, nil, nil, nil, 752, nil, - 752, 752, 752, 752, 752, 752, 752, nil, nil, nil, - nil, nil, 752, 752, 752, 752, 752, 752, 752, nil, - nil, 752, nil, nil, nil, nil, nil, nil, 752, nil, - nil, 752, 752, 752, 752, 752, 752, 752, 752, nil, - 752, 752, 752, nil, 752, 752, 752, 752, 752, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 752, nil, - nil, 752, nil, nil, 752, 752, nil, nil, 752, nil, - nil, nil, nil, nil, 752, nil, nil, nil, nil, nil, - nil, nil, nil, 752, nil, nil, nil, nil, 752, 752, - 752, 752, nil, 752, 752, 752, 752, nil, nil, nil, - nil, 752, 752, nil, nil, nil, 753, 753, 753, 752, - 753, 752, 752, 752, 753, 753, nil, nil, nil, 753, - nil, 753, 753, 753, 753, 753, 753, 753, nil, nil, - nil, nil, nil, 753, 753, 753, 753, 753, 753, 753, - nil, nil, 753, nil, nil, nil, nil, nil, nil, 753, - nil, nil, 753, 753, 753, 753, 753, 753, 753, 753, - nil, 753, 753, 753, nil, 753, 753, 753, 753, 753, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 753, - nil, nil, 753, nil, nil, 753, 753, nil, nil, 753, - nil, nil, nil, nil, nil, 753, nil, nil, nil, nil, - nil, nil, nil, nil, 753, nil, nil, nil, nil, 753, - 753, 753, 753, nil, 753, 753, 753, 753, nil, nil, - nil, nil, 753, 753, nil, nil, nil, 755, 755, 755, - 753, 755, 753, 753, 753, 755, 755, nil, nil, nil, - 755, nil, 755, 755, 755, 755, 755, 755, 755, nil, - nil, nil, nil, nil, 755, 755, 755, 755, 755, 755, - 755, nil, nil, 755, nil, nil, nil, nil, nil, nil, - 755, nil, nil, 755, 755, 755, 755, 755, 755, 755, - 755, nil, 755, 755, 755, nil, 755, 755, 755, 755, - 755, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 755, nil, nil, 755, nil, nil, 755, 755, nil, nil, - 755, nil, nil, nil, nil, nil, 755, nil, nil, nil, - nil, nil, nil, nil, nil, 755, nil, nil, nil, nil, - 755, 755, 755, 755, nil, 755, 755, 755, 755, nil, - nil, nil, nil, 755, 755, nil, nil, nil, 767, 767, - 767, 755, 767, 755, 755, 755, 767, 767, nil, nil, - nil, 767, nil, 767, 767, 767, 767, 767, 767, 767, - nil, nil, nil, nil, nil, 767, 767, 767, 767, 767, - 767, 767, nil, nil, 767, nil, nil, nil, nil, nil, - nil, 767, nil, nil, 767, 767, 767, 767, 767, 767, - 767, 767, nil, 767, 767, 767, nil, 767, 767, nil, - nil, 767, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 767, nil, nil, 767, nil, nil, 767, 767, nil, - nil, 767, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 767, 767, 767, 767, nil, 767, 767, 767, 767, - nil, nil, nil, nil, 767, 767, nil, nil, nil, 805, - 805, 805, 767, 805, 767, 767, 767, 805, 805, nil, - nil, nil, 805, nil, 805, 805, 805, 805, 805, 805, - 805, nil, nil, nil, nil, nil, 805, 805, 805, 805, - 805, 805, 805, nil, nil, 805, nil, nil, nil, nil, - nil, nil, 805, nil, nil, 805, 805, 805, 805, 805, - 805, 805, 805, nil, 805, 805, 805, nil, 805, 805, - 805, 805, 805, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 805, nil, nil, 805, nil, nil, 805, 805, - nil, nil, 805, nil, nil, nil, nil, nil, 805, nil, - nil, nil, nil, nil, nil, nil, nil, 805, nil, nil, - nil, nil, 805, 805, 805, 805, nil, 805, 805, 805, - 805, nil, nil, nil, nil, 805, 805, nil, nil, nil, - 818, 818, 818, 805, 818, 805, 805, 805, 818, 818, - nil, nil, nil, 818, nil, 818, 818, 818, 818, 818, - 818, 818, nil, nil, nil, nil, nil, 818, 818, 818, - 818, 818, 818, 818, nil, nil, 818, nil, nil, nil, - nil, nil, nil, 818, nil, nil, 818, 818, 818, 818, - 818, 818, 818, 818, nil, 818, 818, 818, nil, 818, - 818, 818, 818, 818, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 818, nil, nil, 818, nil, nil, 818, - 818, nil, nil, 818, nil, nil, nil, nil, nil, 818, - nil, nil, nil, nil, nil, nil, nil, nil, 818, nil, - nil, nil, nil, 818, 818, 818, 818, nil, 818, 818, - 818, 818, nil, nil, nil, nil, 818, 818, nil, nil, - nil, 823, 823, 823, 818, 823, 818, 818, 818, 823, - 823, nil, nil, nil, 823, nil, 823, 823, 823, 823, - 823, 823, 823, nil, nil, nil, nil, nil, 823, 823, - 823, 823, 823, 823, 823, nil, nil, 823, nil, nil, - nil, nil, nil, nil, 823, nil, nil, 823, 823, 823, - 823, 823, 823, 823, 823, nil, 823, 823, 823, nil, - 823, 823, 823, 823, 823, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 823, nil, nil, 823, nil, nil, - 823, 823, nil, nil, 823, nil, 823, nil, nil, nil, - 823, nil, nil, nil, nil, nil, nil, nil, nil, 823, - nil, nil, nil, nil, 823, 823, 823, 823, nil, 823, - 823, 823, 823, nil, nil, nil, nil, 823, 823, nil, - nil, nil, 840, 840, 840, 823, 840, 823, 823, 823, - 840, 840, nil, nil, nil, 840, nil, 840, 840, 840, - 840, 840, 840, 840, nil, nil, nil, nil, nil, 840, - 840, 840, 840, 840, 840, 840, nil, nil, 840, nil, - nil, nil, nil, nil, nil, 840, nil, nil, 840, 840, - 840, 840, 840, 840, 840, 840, 840, 840, 840, 840, - nil, 840, 840, 840, 840, 840, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 840, nil, nil, 840, nil, - nil, 840, 840, nil, nil, 840, nil, nil, nil, 840, - nil, 840, nil, nil, 840, nil, nil, nil, nil, nil, - 840, nil, nil, nil, nil, 840, 840, 840, 840, nil, - 840, 840, 840, 840, nil, nil, nil, nil, 840, 840, - nil, nil, nil, 841, 841, 841, 840, 841, 840, 840, - 840, 841, 841, nil, nil, nil, 841, nil, 841, 841, - 841, 841, 841, 841, 841, nil, nil, nil, nil, nil, - 841, 841, 841, 841, 841, 841, 841, nil, nil, 841, - nil, nil, nil, nil, nil, nil, 841, nil, nil, 841, - 841, 841, 841, 841, 841, 841, 841, nil, 841, 841, - 841, nil, 841, 841, 841, 841, 841, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 841, nil, nil, 841, - nil, nil, 841, 841, nil, nil, 841, nil, nil, nil, - nil, nil, 841, nil, nil, nil, nil, nil, nil, nil, - nil, 841, nil, nil, nil, nil, 841, 841, 841, 841, - nil, 841, 841, 841, 841, nil, nil, nil, nil, 841, - 841, nil, nil, nil, 855, 855, 855, 841, 855, 841, - 841, 841, 855, 855, nil, nil, nil, 855, nil, 855, - 855, 855, 855, 855, 855, 855, nil, nil, nil, nil, - nil, 855, 855, 855, 855, 855, 855, 855, nil, nil, - 855, nil, nil, nil, nil, nil, nil, 855, nil, nil, - 855, 855, 855, 855, 855, 855, 855, 855, nil, 855, - 855, 855, nil, 855, 855, nil, nil, 855, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 855, nil, nil, - 855, nil, nil, 855, 855, nil, nil, 855, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 855, 855, 855, - 855, nil, 855, 855, 855, 855, nil, nil, nil, nil, - 855, 855, nil, nil, nil, 867, 867, 867, 855, 867, - 855, 855, 855, 867, 867, nil, nil, nil, 867, nil, - 867, 867, 867, 867, 867, 867, 867, nil, nil, nil, - nil, nil, 867, 867, 867, 867, 867, 867, 867, nil, - nil, 867, nil, nil, nil, nil, nil, nil, 867, nil, - nil, 867, 867, 867, 867, 867, 867, 867, 867, nil, - 867, 867, 867, nil, 867, 867, nil, nil, 867, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 867, nil, - nil, 867, nil, nil, 867, 867, nil, nil, 867, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 867, 867, - 867, 867, nil, 867, 867, 867, 867, nil, nil, nil, - nil, 867, 867, nil, nil, nil, 976, 976, 976, 867, - 976, 867, 867, 867, 976, 976, nil, nil, nil, 976, - nil, 976, 976, 976, 976, 976, 976, 976, nil, nil, - nil, nil, nil, 976, 976, 976, 976, 976, 976, 976, - nil, nil, 976, nil, nil, nil, nil, nil, nil, 976, - nil, nil, 976, 976, 976, 976, 976, 976, 976, 976, - 976, 976, 976, 976, nil, 976, 976, 976, 976, 976, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 976, - nil, nil, 976, nil, nil, 976, 976, nil, nil, 976, - nil, 976, nil, 976, nil, 976, nil, nil, 976, nil, - nil, nil, nil, nil, 976, nil, nil, nil, nil, 976, - 976, 976, 976, nil, 976, 976, 976, 976, nil, nil, - nil, nil, 976, 976, nil, nil, nil, nil, 56, nil, - 976, nil, 976, 976, 976, 56, 56, 56, nil, nil, - 56, 56, 56, nil, 56, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 56, 56, 56, nil, nil, nil, - nil, nil, nil, nil, 56, 56, nil, 56, 56, 56, - 56, 56, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, nil, nil, - 56, 56, 56, nil, nil, 56, nil, nil, 56, nil, - nil, 56, 56, nil, 56, nil, 56, nil, 56, nil, - 56, 56, nil, 56, 56, 56, 56, 56, nil, 56, - nil, 56, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 56, nil, nil, 56, 56, - 56, 56, 425, 56, nil, 56, nil, nil, nil, 425, - 425, 425, nil, nil, 425, 425, 425, nil, 425, nil, - nil, nil, nil, nil, nil, nil, nil, 425, 425, 425, - 425, nil, nil, nil, nil, nil, nil, nil, 425, 425, - nil, 425, 425, 425, 425, 425, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 425, 425, - 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, - 425, 425, nil, nil, 425, 425, 425, nil, nil, 425, - nil, nil, 425, nil, nil, 425, 425, nil, 425, nil, - 425, nil, 425, nil, 425, 425, nil, 425, 425, 425, - 425, 425, nil, 425, 425, 425, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 425, - nil, nil, 425, 425, 425, 425, 426, 425, nil, 425, - nil, nil, nil, 426, 426, 426, nil, nil, 426, 426, - 426, nil, 426, nil, nil, nil, nil, nil, nil, nil, - nil, 426, 426, 426, 426, nil, nil, nil, nil, nil, - nil, nil, 426, 426, nil, 426, 426, 426, 426, 426, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 426, 426, 426, 426, 426, 426, 426, 426, - 426, 426, 426, 426, 426, 426, nil, nil, 426, 426, - 426, nil, nil, 426, nil, nil, 426, nil, nil, 426, - 426, nil, 426, nil, 426, nil, 426, nil, 426, 426, - nil, 426, 426, 426, 426, 426, nil, 426, 426, 426, - 942, nil, 942, 942, 942, 942, 942, nil, nil, nil, - nil, nil, nil, 426, nil, 942, 426, 426, 426, 426, - 27, 426, nil, 426, nil, nil, nil, 27, 27, 27, - nil, nil, 27, 27, 27, nil, 27, 942, nil, nil, - nil, nil, nil, nil, nil, 27, 27, 27, 942, 942, - nil, nil, nil, 942, nil, nil, 27, 27, nil, 27, - 27, 27, 27, 27, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - nil, nil, 27, 27, 27, nil, nil, 27, nil, 27, - 27, nil, nil, 27, 27, nil, 27, nil, 27, nil, - 27, nil, 27, 27, nil, 27, 27, 27, 27, 27, - 28, 27, 27, 27, nil, nil, nil, 28, 28, 28, - nil, nil, 28, 28, 28, nil, 28, 27, nil, nil, - 27, 27, nil, 27, nil, 27, 28, 28, nil, nil, - nil, nil, nil, nil, nil, nil, 28, 28, nil, 28, - 28, 28, 28, 28, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, - nil, nil, 28, 28, 28, nil, nil, 28, nil, 28, - 28, nil, nil, 28, 28, nil, 28, nil, 28, nil, - 28, nil, 28, 28, nil, 28, 28, 28, 28, 28, - nil, 28, 416, 28, nil, nil, nil, nil, nil, 416, - 416, 416, nil, nil, 416, 416, 416, 28, 416, nil, - 28, 28, nil, 28, nil, 28, nil, 416, 416, 416, - nil, nil, nil, nil, nil, nil, nil, nil, 416, 416, - nil, 416, 416, 416, 416, 416, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 416, 416, - 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, - 416, 416, nil, nil, 416, 416, 416, nil, nil, 416, - nil, 416, 416, nil, nil, 416, 416, nil, 416, nil, - 416, nil, 416, nil, 416, 416, nil, 416, 416, 416, - 416, 416, nil, 416, 416, 416, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 416, - nil, 475, 416, 416, nil, 416, nil, 416, 475, 475, - 475, nil, nil, 475, 475, 475, 616, 475, 616, 616, - 616, 616, 616, nil, nil, nil, 475, 475, nil, nil, - nil, 616, nil, nil, nil, nil, nil, 475, 475, nil, - 475, 475, 475, 475, 475, nil, nil, nil, nil, nil, - nil, nil, nil, 616, nil, 535, nil, 535, 535, 535, - 535, 535, 616, 616, 616, 616, nil, nil, nil, 616, - 535, nil, nil, nil, nil, nil, nil, nil, 475, nil, - nil, nil, nil, nil, nil, 475, nil, nil, nil, nil, - 475, 475, 535, 535, nil, 616, nil, nil, nil, nil, - nil, 535, 535, 535, 535, nil, nil, nil, 535, nil, - nil, nil, nil, 475, 475, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 475, nil, - nil, 475, nil, nil, nil, nil, 475, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, nil, nil, nil, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, nil, nil, nil, nil, nil, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, nil, - 8, nil, nil, nil, nil, nil, nil, nil, 8, 8, - nil, 8, 8, 8, 8, 8, 8, 8, nil, nil, - 8, 8, nil, nil, nil, 8, 8, 8, 8, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 8, 8, nil, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, nil, nil, 8, - 8, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 8, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, nil, - nil, nil, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, nil, nil, nil, nil, nil, 9, 9, 9, - 9, 9, 9, 9, 9, 9, nil, nil, 9, nil, - nil, nil, nil, nil, nil, nil, 9, 9, nil, 9, - 9, 9, 9, 9, 9, 9, nil, nil, 9, 9, - nil, nil, nil, 9, 9, 9, 9, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 9, 9, nil, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, nil, nil, 9, 9, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 9, 396, 396, 396, 396, 396, 396, 396, - 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, - 396, 396, 396, 396, 396, 396, 396, nil, nil, nil, - 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, - nil, nil, nil, nil, nil, 396, 396, 396, 396, 396, - 396, 396, 396, 396, nil, nil, 396, nil, nil, nil, - nil, nil, nil, nil, 396, 396, nil, 396, 396, 396, - 396, 396, 396, 396, nil, nil, 396, 396, nil, nil, - nil, 396, 396, 396, 396, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 396, 396, - nil, 396, 396, 396, 396, 396, 396, 396, 396, 396, - 396, 396, 396, nil, nil, 396, 396, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 396, 586, 586, 586, 586, 586, 586, 586, 586, 586, - 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, - 586, 586, 586, 586, 586, nil, nil, nil, 586, 586, - 586, 586, 586, 586, 586, 586, 586, 586, nil, nil, - nil, nil, nil, 586, 586, 586, 586, 586, 586, 586, - 586, 586, nil, nil, 586, nil, nil, nil, nil, nil, - nil, nil, 586, 586, nil, 586, 586, 586, 586, 586, - 586, 586, nil, nil, 586, 586, nil, nil, nil, 586, - 586, 586, 586, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 586, 586, nil, 586, - 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, - 586, nil, nil, 586, 586, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 586, 71, - 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, - 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, - 71, 71, 71, nil, nil, nil, 71, 71, 71, 71, - 71, 71, 71, 71, 71, 71, nil, nil, nil, nil, - nil, 71, 71, 71, 71, 71, 71, 71, 71, 71, - 71, 71, 71, nil, 71, nil, nil, nil, nil, nil, - 71, 71, nil, 71, 71, 71, 71, 71, 71, 71, - nil, nil, 71, 71, nil, nil, nil, 71, 71, 71, - 71, nil, nil, nil, nil, nil, 71, nil, nil, nil, - nil, nil, nil, nil, 71, 71, nil, 71, 71, 71, - 71, 71, 71, 71, 71, 71, 71, 71, 71, nil, - nil, 71, 718, 718, 718, 718, 718, 718, 718, 718, - 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, - 718, 718, 718, 718, 718, 718, nil, nil, nil, 718, - 718, 718, 718, 718, 718, 718, 718, 718, 718, nil, - nil, nil, nil, nil, 718, 718, 718, 718, 718, 718, - 718, 718, 718, nil, nil, 718, nil, nil, nil, nil, - nil, nil, nil, 718, 718, nil, 718, 718, 718, 718, - 718, 718, 718, nil, nil, 718, 718, nil, nil, nil, - 718, 718, 718, 718, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 718, 718, nil, - 718, 718, 718, 718, 718, 718, 718, 718, 718, 718, - 718, 718, 212, 212, 718, nil, 212, nil, nil, nil, - nil, nil, nil, nil, 212, 212, nil, 212, 212, 212, - 212, 212, 212, 212, nil, nil, 212, 212, nil, nil, - nil, 212, 212, 212, 212, nil, nil, nil, nil, nil, - 212, nil, nil, nil, nil, nil, nil, nil, 212, 212, - nil, 212, 212, 212, 212, 212, 212, 212, 212, 212, - 212, 212, 212, 213, 213, 212, nil, 213, nil, nil, - nil, nil, nil, nil, nil, 213, 213, nil, 213, 213, - 213, 213, 213, 213, 213, nil, nil, 213, 213, nil, - nil, nil, 213, 213, 213, 213, nil, nil, nil, nil, - nil, 213, nil, nil, nil, nil, nil, nil, nil, 213, - 213, nil, 213, 213, 213, 213, 213, 213, 213, 213, - 213, 213, 213, 213, 261, 261, 213, nil, 261, nil, - nil, nil, nil, nil, nil, nil, 261, 261, nil, 261, - 261, 261, 261, 261, 261, 261, nil, nil, 261, 261, - nil, nil, nil, 261, 261, 261, 261, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 261, 261, nil, 261, 261, 261, 261, 261, 261, 261, - 261, 261, 261, 261, 261, 441, 441, 261, nil, 441, - nil, nil, nil, nil, nil, nil, nil, 441, 441, nil, - 441, 441, 441, 441, 441, 441, 441, nil, nil, 441, - 441, nil, nil, nil, 441, 441, 441, 441, nil, nil, - nil, nil, nil, 441, nil, nil, nil, nil, nil, nil, - nil, 441, 441, nil, 441, 441, 441, 441, 441, 441, - 441, 441, 441, 441, 441, 441, 442, 442, 441, nil, - 442, nil, nil, nil, nil, nil, nil, nil, 442, 442, - nil, 442, 442, 442, 442, 442, 442, 442, nil, nil, - 442, 442, nil, nil, nil, 442, 442, 442, 442, nil, - nil, nil, nil, nil, 442, nil, nil, nil, nil, nil, - nil, nil, 442, 442, nil, 442, 442, 442, 442, 442, - 442, 442, 442, 442, 442, 442, 442, 508, 508, 442, - nil, 508, nil, nil, nil, nil, nil, nil, nil, 508, - 508, nil, 508, 508, 508, 508, 508, 508, 508, nil, - nil, 508, 508, nil, nil, nil, 508, 508, 508, 508, - nil, nil, nil, nil, nil, 508, nil, nil, nil, nil, - nil, nil, nil, 508, 508, nil, 508, 508, 508, 508, - 508, 508, 508, 508, 508, 508, 508, 508, 509, 509, - 508, nil, 509, nil, nil, nil, nil, nil, nil, nil, - 509, 509, nil, 509, 509, 509, 509, 509, 509, 509, - nil, nil, 509, 509, nil, nil, nil, 509, 509, 509, - 509, nil, nil, nil, nil, nil, 509, nil, nil, nil, - nil, nil, nil, nil, 509, 509, nil, 509, 509, 509, - 509, 509, 509, 509, 509, 509, 509, 509, 509, 518, - 518, 509, nil, 518, nil, nil, nil, nil, nil, nil, - nil, 518, 518, nil, 518, 518, 518, 518, 518, 518, - 518, nil, nil, 518, 518, nil, nil, nil, 518, 518, - 518, 518, nil, nil, nil, nil, nil, 518, nil, nil, - nil, nil, nil, nil, nil, 518, 518, nil, 518, 518, - 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, - 519, 519, 518, nil, 519, nil, nil, nil, nil, nil, - nil, nil, 519, 519, nil, 519, 519, 519, 519, 519, - 519, 519, nil, nil, 519, 519, nil, nil, nil, 519, - 519, 519, 519, nil, nil, nil, nil, nil, 519, nil, - nil, nil, nil, nil, nil, nil, 519, 519, nil, 519, - 519, 519, 519, 519, 519, 519, 519, 519, 519, 519, - 519, 546, 546, 519, nil, 546, nil, nil, nil, nil, - nil, nil, nil, 546, 546, nil, 546, 546, 546, 546, - 546, 546, 546, nil, nil, 546, 546, nil, nil, nil, - 546, 546, 546, 546, nil, nil, nil, nil, nil, 546, - nil, nil, nil, nil, nil, nil, nil, 546, 546, nil, - 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, - 546, 546, 547, 547, 546, nil, 547, nil, nil, nil, - nil, nil, nil, nil, 547, 547, nil, 547, 547, 547, - 547, 547, 547, 547, nil, nil, 547, 547, nil, nil, - nil, 547, 547, 547, 547, nil, nil, nil, nil, nil, - 547, nil, nil, nil, nil, nil, nil, nil, 547, 547, - nil, 547, 547, 547, 547, 547, 547, 547, 547, 547, - 547, 547, 547, 553, 553, 547, nil, 553, nil, nil, - nil, nil, nil, nil, nil, 553, 553, nil, 553, 553, - 553, 553, 553, 553, 553, nil, nil, 553, 553, nil, - nil, nil, 553, 553, 553, 553, nil, nil, nil, nil, - nil, 553, nil, nil, nil, nil, nil, nil, nil, 553, - 553, nil, 553, 553, 553, 553, 553, 553, 553, 553, - 553, 553, 553, 553, 554, 554, 553, nil, 554, nil, - nil, nil, nil, nil, nil, nil, 554, 554, nil, 554, - 554, 554, 554, 554, 554, 554, nil, nil, 554, 554, - nil, nil, nil, 554, 554, 554, 554, nil, nil, nil, - nil, nil, 554, nil, nil, nil, nil, nil, nil, nil, - 554, 554, nil, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 923, 923, 554, nil, 923, - nil, nil, nil, nil, nil, nil, nil, 923, 923, nil, - 923, 923, 923, 923, 923, 923, 923, nil, nil, 923, - 923, nil, nil, nil, 923, 923, 923, 923, nil, nil, - nil, nil, nil, 923, nil, nil, nil, nil, nil, nil, - nil, 923, 923, nil, 923, 923, 923, 923, 923, 923, - 923, 923, 923, 923, 923, 923, 977, 977, 923, nil, - 977, nil, nil, nil, nil, nil, nil, nil, 977, 977, - nil, 977, 977, 977, 977, 977, 977, 977, nil, nil, - 977, 977, nil, nil, nil, 977, 977, 977, 977, nil, - nil, nil, nil, nil, 977, nil, nil, nil, nil, nil, - nil, nil, 977, 977, nil, 977, 977, 977, 977, 977, - 977, 977, 977, 977, 977, 977, 977, 978, 978, 977, - nil, 978, nil, nil, nil, nil, nil, nil, nil, 978, - 978, nil, 978, 978, 978, 978, 978, 978, 978, nil, - nil, 978, 978, nil, nil, nil, 978, 978, 978, 978, - nil, nil, nil, nil, nil, 978, nil, nil, nil, nil, - nil, nil, nil, 978, 978, nil, 978, 978, 978, 978, - 978, 978, 978, 978, 978, 978, 978, 978, nil, 658, - 978, 658, 658, 658, 658, 658, nil, 716, nil, 716, - 716, 716, 716, 716, 658, nil, nil, nil, nil, nil, - nil, nil, 716, nil, 717, nil, 717, 717, 717, 717, - 717, nil, nil, nil, nil, nil, 658, nil, nil, 717, - nil, nil, nil, nil, 716, 658, 658, 658, 658, nil, - nil, nil, 658, 716, 716, 716, 716, nil, nil, nil, - 716, 717, nil, 799, nil, 799, 799, 799, 799, 799, - 717, 717, 717, 717, nil, nil, nil, 717, 799, nil, - 801, nil, 801, 801, 801, 801, 801, nil, 846, nil, - 846, 846, 846, 846, 846, 801, nil, nil, nil, nil, - 799, nil, nil, 846, nil, nil, nil, nil, nil, 799, - 799, 799, 799, nil, nil, nil, 799, 801, nil, nil, - nil, nil, nil, nil, nil, 846, 801, 801, 801, 801, - nil, nil, nil, 801, 846, 846, 846, 846, nil, nil, - 848, 846, 848, 848, 848, 848, 848, nil, 938, nil, - 938, 938, 938, 938, 938, 848, nil, nil, nil, nil, - nil, nil, nil, 938, nil, 944, nil, 944, 944, 944, - 944, 944, nil, nil, nil, nil, nil, 848, nil, nil, - 944, nil, nil, nil, nil, 938, 848, 848, 848, 848, - nil, nil, nil, 848, 938, 938, 938, 938, nil, nil, - nil, 938, 944, nil, 962, nil, 962, 962, 962, 962, - 962, nil, nil, 944, 944, nil, nil, nil, 944, 962, - nil, 964, nil, 964, 964, 964, 964, 964, 966, nil, - 966, 966, 966, 966, 966, nil, 964, nil, nil, nil, - nil, 962, nil, 966, nil, nil, nil, nil, nil, nil, - 962, 962, 962, 962, nil, nil, nil, 962, 964, nil, - nil, nil, nil, nil, nil, 966, nil, nil, nil, 964, - 964, nil, nil, nil, 964, nil, 966, 966, nil, nil, - 968, 966, 968, 968, 968, 968, 968, 1006, nil, 1006, - 1006, 1006, 1006, 1006, 1016, 968, 1016, 1016, 1016, 1016, - 1016, nil, 1006, nil, nil, nil, nil, nil, nil, 1016, - nil, nil, nil, nil, nil, nil, nil, 968, nil, nil, - nil, nil, nil, nil, 1006, nil, nil, nil, 968, 968, - nil, 1016, nil, 968, nil, 1006, 1006, nil, nil, nil, - 1006, nil, 1016, 1016, nil, nil, nil, 1016 ] - -racc_action_pointer = [ - 744, 1, nil, 303, nil, 5083, 729, -91, 23075, 23203, - -80, nil, -62, 107, 470, 184, 61, 10, nil, -79, - 5214, 1164, 182, nil, 15, nil, -8, 22590, 22700, 5345, - 5476, 5607, nil, 884, 5738, 5869, nil, 80, 190, 227, - 169, 283, 6008, 6139, 6270, 141, 556, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 22188, nil, -75, 6401, - 6532, -23, nil, 6663, 6794, nil, nil, 6925, 7064, 7195, - 7326, 23587, nil, nil, nil, nil, nil, nil, nil, 518, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 0, nil, nil, - 112, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 277, nil, 7465, nil, nil, nil, nil, 7604, 7735, - 7866, 7997, 8136, 1024, nil, 472, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 153, nil, 1164, 8267, - 8398, 8529, 23761, 23822, 8660, 8791, 8922, 9053, 9184, 9315, - nil, nil, 610, -24, 15, 301, 90, 224, 293, nil, - 9446, 1304, 294, 9577, 9708, 9839, 9970, 10101, 10232, 10363, - 10494, 10625, 10756, 10887, 11018, 11149, 11280, 11411, 11542, 11673, - 11804, 11935, 12066, 12197, 12328, 12459, 12590, 12721, 12852, nil, - nil, 23883, nil, nil, 295, 12983, 13114, nil, nil, nil, - nil, nil, nil, nil, 13245, nil, 1304, nil, 264, 266, - nil, 13376, 328, 13507, nil, nil, 13638, 13769, nil, nil, - 380, nil, 13908, 1429, 313, 308, 1444, 347, 397, 367, - 14039, 1584, 613, 659, 744, 449, 747, nil, 440, 431, - 33, nil, nil, nil, 481, 331, 443, 14178, nil, 302, - 514, 786, nil, 553, nil, 14309, 1724, 14440, 495, nil, - 107, 127, 537, 522, 206, 561, nil, nil, 24, -1, - 26, 14571, 14702, 416, 636, 526, -19, -18, 816, 627, - 10, 667, nil, nil, 191, 225, 8, nil, 884, nil, - 34, 14833, nil, nil, nil, 150, 274, 412, 442, 570, - 576, 581, 792, 794, nil, 797, nil, 14964, nil, 330, - 388, 397, 457, 460, -41, -35, 464, nil, nil, nil, - nil, nil, nil, nil, nil, 586, 23331, nil, nil, nil, - nil, 588, nil, nil, 579, 15095, 591, nil, nil, 884, - 598, nil, 597, 605, 425, 471, 22812, nil, nil, nil, - 222, 334, 651, nil, nil, 22322, 22456, nil, 1444, nil, - 599, nil, nil, 744, nil, nil, nil, nil, -33, nil, - 652, 23944, 24005, 15226, 252, 15357, 15488, 15619, 3264, 3404, - 534, 561, 691, 717, 734, 738, 5214, 5345, 5476, 3544, - 3684, 3824, 3964, 4104, 4244, 4384, 4524, 4664, 4804, 489, - 3094, 4944, 5083, 1584, -56, 22941, nil, nil, nil, nil, - 703, nil, 178, 237, 704, nil, nil, 15750, nil, 15881, - nil, 16012, nil, 327, nil, nil, nil, 16151, 1444, 1864, - 708, 710, nil, nil, 715, 16290, 726, 16421, 24066, 24127, - 887, 768, nil, 16552, 725, nil, 16683, 16814, 24188, 24249, - 1724, 16945, 861, 882, 422, 802, nil, 17076, nil, nil, - 17207, nil, nil, nil, nil, 22944, 2004, 884, nil, 2144, - 62, 118, 881, 889, 17338, 17469, 24310, 24371, 25, nil, - nil, 926, nil, 24432, 24493, 17600, nil, nil, nil, 532, - 237, 2284, 819, nil, -14, nil, nil, nil, 727, nil, - nil, nil, 791, nil, nil, 261, nil, 338, nil, nil, - 777, nil, 778, nil, nil, nil, 23459, nil, 787, 17731, - 17862, 479, 827, 17993, 18124, 18255, 18386, 827, nil, nil, - 18517, 18648, 828, nil, 18779, 18910, nil, nil, 254, 277, - 466, 602, 795, 1024, 794, nil, 22905, nil, 2424, 913, - 5, 280, nil, 2564, 2704, nil, 811, nil, 878, 19041, - nil, nil, 19172, nil, 857, -113, 19303, 840, nil, 844, - 136, 177, 889, 337, 1024, 894, 855, 19434, 1864, 930, - 20, 983, 19565, nil, 868, nil, 235, nil, 24738, nil, - 875, 876, nil, 878, 881, 883, nil, nil, nil, nil, - nil, nil, nil, nil, 875, 569, nil, nil, 19696, nil, - nil, nil, 967, nil, nil, nil, 970, nil, nil, 980, - 472, nil, 1018, nil, nil, nil, nil, 1027, nil, 32, - 907, 26, 40, 122, 183, 19827, 406, 1164, nil, 908, - 2844, 19958, nil, nil, 1039, 2984, 24746, 24763, 23700, nil, - nil, nil, nil, nil, nil, 3124, nil, nil, nil, nil, - nil, nil, nil, 917, 20089, 2004, 20220, nil, 918, nil, - 2144, nil, 2284, nil, nil, 2424, nil, 2564, nil, 2704, - 20351, 20482, 20613, 20744, 342, 20875, 919, 927, nil, 928, - 930, 931, nil, 956, 936, 945, 942, 21006, nil, nil, - 1096, nil, nil, 3264, 997, 1105, nil, nil, nil, nil, - 985, 404, nil, nil, 1115, nil, 3404, 995, 1049, nil, - nil, 1047, nil, 37, 1008, 551, nil, nil, 428, 24802, - nil, 24819, nil, 5916, nil, 21137, nil, 663, nil, 1015, - 228, 1019, nil, nil, nil, nil, 1142, nil, 21268, 1145, - 3544, 3684, nil, 21399, 3824, 71, 121, nil, 1147, 623, - 3964, nil, 1148, 1028, 695, nil, 1034, 1038, nil, 2844, - 21530, 21661, 2984, 627, nil, nil, 24827, nil, 24879, nil, - 7373, nil, nil, 1063, 1150, 21792, 956, 1121, nil, 1064, - nil, nil, nil, 4104, nil, nil, 33, 21923, nil, nil, - nil, nil, nil, 1088, 1055, nil, nil, nil, 1057, 1058, - nil, 1059, 1067, nil, 1073, nil, nil, 1090, 3110, 1091, - 668, nil, nil, 36, nil, 1236, 1241, nil, 17, nil, - nil, nil, 1245, nil, nil, nil, 1169, nil, 1130, nil, - nil, 1135, 1143, 1144, 1145, nil, 1155, nil, 368, nil, - nil, nil, 1027, 24554, nil, nil, nil, 4244, 1066, 1096, - 1167, 1234, 1206, nil, 4384, 4524, nil, nil, 24887, nil, - 14086, nil, 22519, nil, 24904, nil, nil, nil, nil, 327, - 3169, 1158, 4664, nil, nil, nil, nil, nil, 4804, nil, - 4944, nil, 24943, nil, 24960, nil, 24967, nil, 25019, nil, - nil, nil, 1290, 1205, 1207, 1290, 22054, 24615, 24676, 1236, - 1185, 1292, 1178, 1179, 1183, 1184, 1185, 3344, 1195, 3484, - 592, 1321, 1322, 1199, 1207, 1213, 1227, nil, nil, 1234, - 40, 42, 111, 1304, nil, nil, 25026, nil, nil, nil, - nil, 3530, 1251, nil, nil, nil, 25033, nil, nil, nil, - nil, 98, 1252, 1257, 1258, nil, nil ] - -racc_action_default = [ - -3, -600, -1, -586, -4, -600, -7, -600, -600, -600, - -600, -29, -600, -600, -600, -279, -600, -40, -43, -588, - -600, -48, -50, -51, -52, -56, -256, -256, -256, -293, - -329, -330, -68, -11, -72, -80, -82, -600, -491, -492, - -600, -600, -600, -600, -600, -588, -237, -270, -271, -272, - -273, -274, -275, -276, -277, -278, -576, -281, -283, -599, - -566, -301, -303, -600, -600, -307, -310, -586, -600, -600, - -600, -600, -331, -332, -334, -335, -432, -433, -434, -435, - -436, -457, -439, -440, -459, -461, -444, -449, -453, -455, - -471, -459, -473, -475, -476, -477, -478, -574, -480, -481, - -575, -483, -484, -485, -486, -487, -488, -489, -490, -495, - -496, -600, -2, -587, -595, -596, -597, -6, -600, -600, - -600, -600, -600, -3, -17, -600, -111, -112, -113, -114, - -115, -116, -117, -118, -119, -123, -124, -125, -126, -127, - -128, -129, -130, -131, -132, -133, -134, -135, -136, -137, - -138, -139, -140, -141, -142, -143, -144, -145, -146, -147, - -148, -149, -150, -151, -152, -153, -154, -155, -156, -157, - -158, -159, -160, -161, -162, -163, -164, -165, -166, -167, - -168, -169, -170, -171, -172, -173, -174, -175, -176, -177, - -178, -179, -180, -181, -182, -183, -184, -185, -186, -187, - -188, -189, -190, -191, -192, -193, -22, -120, -11, -600, - -600, -246, -600, -600, -600, -600, -600, -600, -600, -588, - -589, -47, -600, -491, -492, -600, -279, -600, -600, -229, - -600, -11, -600, -600, -600, -600, -600, -600, -600, -600, - -600, -600, -600, -600, -600, -600, -600, -600, -600, -600, - -600, -600, -600, -600, -600, -600, -600, -600, -600, -401, - -403, -600, -584, -585, -57, -246, -600, -300, -407, -416, - -418, -63, -413, -64, -588, -65, -238, -251, -260, -260, - -255, -600, -261, -600, -457, -568, -600, -600, -66, -67, - -586, -12, -600, -15, -600, -70, -11, -588, -600, -73, - -76, -11, -88, -89, -600, -600, -96, -293, -296, -588, - -600, -329, -330, -333, -414, -600, -78, -600, -84, -290, - -474, -600, -214, -215, -230, -600, -11, -600, -588, -239, - -592, -592, -600, -600, -592, -600, -302, -392, -49, -600, - -600, -600, -600, -586, -600, -587, -491, -492, -600, -600, - -279, -600, -345, -346, -106, -107, -600, -109, -600, -279, - -600, -600, -491, -492, -322, -111, -112, -153, -154, -155, - -171, -176, -183, -186, -324, -600, -564, -600, -437, -600, - -600, -600, -600, -600, -600, -600, -600, 1027, -5, -598, - -23, -24, -25, -26, -27, -600, -600, -19, -20, -21, - -121, -600, -30, -39, -266, -600, -600, -265, -31, -196, - -588, -247, -260, -260, -577, -578, -256, -411, -579, -580, - -578, -577, -256, -410, -412, -579, -580, -37, -204, -38, - -600, -41, -42, -194, -261, -44, -45, -46, -588, -299, - -600, -600, -600, -246, -290, -600, -600, -600, -205, -206, - -207, -208, -209, -210, -211, -212, -216, -217, -218, -219, - -220, -221, -222, -223, -224, -225, -226, -227, -228, -231, - -232, -233, -234, -588, -381, -256, -577, -578, -54, -58, - -588, -257, -381, -381, -588, -295, -252, -600, -253, -600, - -258, -600, -262, -600, -571, -573, -10, -587, -14, -3, - -588, -69, -288, -85, -74, -600, -588, -246, -600, -600, - -95, -600, -474, -600, -81, -86, -600, -600, -600, -600, - -235, -600, -424, -600, -284, -600, -240, -594, -593, -242, - -594, -291, -292, -567, -304, -524, -11, -336, -337, -11, - -600, -600, -600, -600, -600, -246, -600, -600, -290, -315, - -106, -107, -108, -600, -600, -246, -318, -497, -498, -600, - -600, -11, -502, -326, -588, -438, -458, -463, -600, -465, - -441, -460, -600, -462, -443, -600, -446, -600, -448, -451, - -600, -452, -600, -472, -8, -18, -600, -28, -269, -600, - -600, -415, -600, -248, -250, -600, -600, -59, -245, -408, - -600, -600, -61, -409, -600, -600, -298, -590, -577, -578, - -577, -578, -588, -194, -600, -382, -588, -384, -11, -53, - -404, -381, -243, -11, -11, -294, -260, -259, -263, -600, - -569, -570, -600, -13, -600, -71, -600, -77, -83, -588, - -577, -578, -244, -92, -94, -600, -79, -600, -203, -213, - -588, -599, -599, -282, -588, -287, -592, -393, -524, -396, - -563, -563, -507, -509, -509, -509, -523, -525, -526, -527, - -528, -529, -530, -531, -532, -600, -534, -536, -538, -543, - -545, -546, -548, -553, -555, -556, -558, -559, -560, -600, - -599, -338, -599, -308, -339, -340, -311, -600, -314, -600, - -588, -577, -578, -581, -289, -600, -106, -107, -110, -588, - -11, -600, -500, -320, -600, -11, -524, -524, -600, -565, - -464, -467, -468, -469, -470, -11, -442, -445, -447, -450, - -454, -456, -122, -267, -600, -197, -600, -591, -260, -33, - -199, -34, -200, -60, -35, -202, -36, -201, -62, -195, - -600, -600, -600, -600, -415, -600, -563, -563, -363, -365, - -365, -365, -380, -600, -588, -386, -532, -540, -541, -551, - -600, -406, -405, -11, -600, -600, -254, -264, -572, -16, - -75, -90, -87, -297, -599, -343, -11, -425, -599, -426, - -427, -600, -241, -600, -588, -600, -505, -506, -600, -600, - -516, -600, -519, -600, -521, -600, -347, -600, -349, -351, - -358, -588, -537, -547, -557, -561, -600, -341, -600, -600, - -11, -11, -313, -600, -11, -415, -600, -415, -600, -600, - -11, -323, -600, -588, -600, -327, -600, -268, -32, -198, - -249, -600, -236, -600, -361, -362, -371, -373, -600, -376, - -600, -378, -383, -600, -600, -600, -539, -600, -402, -600, - -417, -419, -9, -11, -431, -344, -600, -600, -429, -285, - -394, -397, -399, -600, -563, -544, -562, -508, -509, -509, - -535, -509, -509, -554, -509, -532, -549, -588, -600, -356, - -600, -533, -305, -600, -306, -600, -600, -263, -599, -316, - -319, -499, -600, -325, -501, -503, -502, -466, -563, -542, - -364, -365, -365, -365, -365, -552, -365, -385, -588, -388, - -390, -391, -550, -600, -290, -55, -430, -11, -97, -98, - -600, -600, -105, -428, -11, -11, -395, -504, -600, -512, - -600, -514, -600, -517, -600, -520, -522, -348, -350, -354, - -600, -359, -11, -309, -312, -420, -421, -422, -11, -321, - -11, -360, -600, -368, -600, -370, -600, -374, -600, -377, - -379, -387, -600, -289, -581, -424, -246, -600, -600, -104, - -600, -600, -509, -509, -509, -509, -352, -600, -357, -600, - -599, -600, -600, -365, -365, -365, -365, -389, -423, -588, - -577, -578, -581, -103, -398, -400, -600, -510, -513, -515, - -518, -600, -355, -342, -317, -328, -600, -366, -369, -372, - -375, -415, -509, -353, -365, -511, -367 ] - -racc_goto_table = [ - 218, 329, 374, 14, 277, 277, 277, 543, 14, 313, - 313, 260, 336, 523, 2, 410, 416, 422, 488, 536, - 539, 261, 715, 222, 407, 651, 325, 339, 340, 379, - 429, 343, 222, 222, 222, 479, 14, 304, 304, 129, - 129, 124, 207, 313, 313, 313, 132, 132, 432, 268, - 272, 278, 278, 278, 627, 816, 627, 806, 295, 113, - 297, 221, 134, 134, 299, 475, 222, 222, 630, 480, - 222, 348, 358, 358, 320, 439, 264, 271, 273, 552, - 760, 330, 390, 391, 392, 393, 6, 948, 316, 117, - 112, 6, 784, 883, 1, 116, 591, 279, 279, 279, - 659, 811, 129, 862, 693, 696, 275, 288, 289, 630, - 338, 338, 380, 763, 338, 915, 14, 360, 364, 386, - 919, 222, 222, 222, 222, 14, 14, 331, 334, 633, - 485, 526, 529, 819, 921, 533, 206, 395, 880, 514, - 618, 575, 577, 353, 403, 396, 796, 797, 623, 624, - 621, 586, 488, 501, 344, 332, 620, 376, 333, 116, - 627, 627, 534, 351, 556, 338, 338, 338, 338, 375, - 326, 327, 654, 630, 328, 337, 951, 341, 820, 342, - 821, 705, 958, 710, 830, 880, 277, 561, 948, 806, - 562, 718, 889, 906, 762, 26, 764, 388, 918, 6, - 26, 571, 573, 576, 576, 697, 657, 571, 394, 6, - 870, 14, 222, 222, 222, 26, 535, 222, 222, 222, - 222, 222, 222, 794, 26, 26, 26, 793, 26, 915, - 883, 406, 493, 887, 14, 417, 988, 406, 997, 934, - 277, 277, 844, 845, 426, 416, 422, 612, 714, 277, - 402, 408, 921, 935, 474, 427, 431, 482, 26, 26, - 666, 853, 26, 435, 436, 437, 438, 483, 222, 222, - 806, 955, 806, 1012, 788, 313, 708, 222, 866, 378, - 381, 833, 834, 880, 382, 383, 384, 773, 278, 385, - 511, 873, 313, 720, 606, 14, 278, 1023, 754, 14, - 725, 711, 878, 304, 14, 540, 541, 880, 26, 525, - 911, 639, 642, 26, 26, 26, 26, 26, 26, 875, - 304, 295, 642, 500, 909, 781, 295, 637, 506, 14, - 222, 986, 806, 268, 279, 646, 622, 272, nil, 956, - 625, nil, 279, 481, 222, 222, 497, 515, 512, 700, - 642, 484, 13, 504, nil, 1013, 635, 13, 642, 709, - 937, nil, 638, nil, 222, 776, 960, nil, 743, 806, - nil, 806, 563, 748, 524, nil, nil, 496, 498, 824, - 222, nil, 116, 666, nil, 13, 825, nil, 338, 338, - 899, 592, nil, 806, 961, 827, 728, 828, 728, nil, - nil, nil, 832, 26, 26, 26, 26, 627, 560, 26, - 26, 26, 26, 26, 26, nil, nil, nil, 277, 630, - 719, nil, nil, nil, 564, nil, 26, 129, nil, 585, - 542, nil, nil, nil, 132, 116, nil, 432, nil, 598, - nil, 666, 666, nil, nil, 603, 222, nil, nil, nil, - 134, nil, 557, nil, 614, nil, nil, 792, 780, 298, - 26, 26, nil, nil, 417, 13, 597, 789, nil, 26, - nil, 761, 602, 426, 13, 13, nil, 776, 998, nil, - 313, nil, 277, nil, nil, nil, nil, 26, 313, nil, - nil, 26, nil, nil, nil, nil, 26, nil, 598, nil, - 14, nil, 14, nil, nil, nil, 783, nil, 304, nil, - 222, nil, nil, 634, nil, nil, 304, 902, nil, nil, - 277, 26, 26, nil, 222, 619, nil, nil, nil, nil, - 277, 417, 757, nil, nil, 515, 26, 26, nil, 14, - 426, 417, 14, 515, nil, nil, 927, nil, 222, nil, - 426, nil, nil, nil, nil, 626, 26, nil, 222, nil, - 13, 957, nil, nil, 14, nil, 699, nil, 650, 417, - nil, 772, 26, 952, nil, nil, nil, 417, 426, nil, - nil, nil, nil, 13, 426, 6, nil, nil, nil, nil, - nil, nil, nil, 592, 790, 656, nil, 765, 222, 222, - nil, nil, nil, 222, 222, nil, nil, 222, 771, nil, - nil, 313, nil, nil, nil, nil, nil, 129, nil, 732, - 592, 14, 313, nil, 132, nil, 14, 14, nil, nil, - nil, nil, 694, 694, 401, 791, 739, 741, 26, 304, - 134, 744, 746, nil, 13, 431, nil, 992, 13, 835, - 304, 712, 713, 13, 879, nil, 881, 298, nil, nil, - nil, 738, nil, nil, nil, 598, 515, 891, 603, 826, - nil, nil, nil, nil, 406, 829, nil, 782, 13, nil, - nil, 592, 674, nil, nil, 1021, nil, nil, nil, 904, - 592, nil, 26, nil, 26, nil, nil, nil, nil, nil, - nil, 912, 26, 913, nil, nil, nil, nil, 222, nil, - nil, 874, nil, 14, 222, nil, 26, nil, 14, nil, - nil, nil, 298, nil, nil, nil, 864, 298, 14, nil, - 868, 26, nil, nil, 26, nil, nil, nil, nil, 222, - 26, nil, 313, 947, nil, 765, nil, nil, nil, 129, - 26, nil, 338, nil, nil, nil, 26, nil, 338, 908, - nil, nil, 757, 766, 757, nil, 757, nil, nil, 767, - 856, nil, nil, nil, nil, 765, 14, 838, nil, 16, - 999, 642, 893, nil, 16, nil, nil, nil, nil, 14, - 26, 26, nil, 982, nil, 26, 26, nil, nil, 26, - nil, nil, nil, nil, 758, 674, 15, nil, nil, nil, - nil, 15, 16, 26, nil, nil, nil, 993, 26, 26, - 759, 222, nil, 14, 14, nil, nil, 14, nil, nil, - 313, nil, nil, 14, nil, nil, nil, nil, nil, 15, - 306, 306, 313, nil, nil, nil, nil, 352, nil, 13, - nil, 13, nil, nil, nil, nil, nil, nil, 922, nil, - nil, nil, nil, 674, 674, 338, 14, nil, nil, nil, - 930, nil, nil, nil, 350, 359, 359, nil, 757, nil, - 757, nil, 757, nil, 757, nil, nil, nil, 13, nil, - nil, 13, 16, nil, nil, nil, nil, nil, nil, 971, - 26, 16, 16, nil, nil, 26, 26, nil, nil, nil, - 26, nil, nil, 13, nil, nil, nil, nil, 694, 15, - 26, 901, nil, nil, nil, nil, 905, nil, 15, 15, - 14, 26, 757, nil, nil, nil, nil, 14, 14, nil, - nil, nil, nil, nil, nil, nil, 674, nil, 674, nil, - nil, 277, nil, nil, 426, 14, nil, nil, nil, nil, - nil, 14, 690, 14, nil, 692, nil, nil, 26, nil, - 13, nil, nil, nil, nil, 13, 13, nil, nil, 222, - 592, 26, nil, 876, nil, nil, 876, 16, nil, nil, - 335, nil, nil, 766, 430, 766, 767, nil, nil, 767, - 417, 767, nil, 767, nil, 882, nil, 884, nil, 426, - 16, nil, nil, 26, 15, 26, 26, nil, nil, 26, - nil, nil, nil, nil, nil, 26, 847, 849, 851, nil, - nil, 876, nil, nil, 758, nil, 758, 15, 758, nil, - nil, nil, nil, nil, 770, nil, nil, nil, nil, 774, - 775, nil, 914, nil, 916, nil, nil, nil, 26, nil, - nil, nil, 13, nil, nil, nil, nil, 13, nil, nil, - nil, 16, nil, nil, nil, 16, nil, 13, nil, nil, - 16, nil, nil, nil, nil, 674, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 15, nil, - nil, nil, 15, nil, nil, 16, 306, 15, nil, 766, - nil, nil, 800, 802, 804, 767, nil, 767, nil, 767, - nil, 767, 26, 306, nil, 13, 38, nil, nil, 26, - 26, 38, 15, nil, nil, nil, nil, nil, 13, 404, - nil, nil, 983, nil, 984, 434, 985, 26, nil, nil, - 758, 836, 758, 26, 758, 26, 758, nil, 39, 38, - 302, 302, nil, 39, nil, nil, 994, nil, 995, 767, - 996, 26, 13, 13, nil, nil, 13, nil, 963, 965, - 967, 969, 13, 970, nil, nil, nil, nil, nil, nil, - nil, 39, 303, 303, 346, 362, 362, 362, nil, 859, - nil, nil, nil, nil, 758, nil, nil, nil, nil, nil, - 1022, 490, 865, 492, nil, 13, 494, 495, nil, nil, - 1024, nil, nil, nil, nil, nil, 347, 363, 363, 363, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 38, - nil, nil, nil, nil, nil, nil, 895, 896, 38, 38, - 898, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 1017, 1018, 1019, 1020, nil, nil, nil, nil, nil, nil, - nil, 39, nil, nil, nil, nil, 16, nil, 16, 13, - 39, 39, nil, nil, nil, nil, 13, 13, nil, 926, - nil, 1026, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 15, 13, 15, nil, nil, nil, nil, - 13, 306, 13, nil, nil, 16, nil, nil, 16, 306, - nil, nil, nil, nil, nil, nil, nil, 939, 941, nil, - 943, 945, nil, 946, 38, 588, nil, nil, nil, nil, - 16, nil, 15, nil, nil, 15, nil, nil, nil, nil, - nil, nil, nil, 975, nil, nil, nil, 38, nil, nil, - 980, 981, nil, nil, nil, nil, 39, 15, nil, nil, - nil, nil, nil, nil, 724, nil, nil, nil, 990, nil, - nil, nil, nil, 430, 991, nil, nil, nil, nil, 39, - nil, nil, nil, nil, nil, nil, nil, 16, nil, nil, - nil, nil, 16, 16, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 628, 38, 335, - nil, 631, 38, nil, 15, nil, 302, 38, nil, 15, - 15, 1007, 1008, 1009, 1010, nil, nil, nil, nil, nil, - nil, nil, 306, 302, nil, nil, nil, nil, nil, nil, - 39, nil, 38, 306, 39, nil, nil, 628, 303, 39, - 335, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 1025, nil, nil, 434, 303, nil, nil, nil, nil, - nil, nil, nil, nil, 39, nil, nil, nil, nil, 16, - nil, nil, nil, nil, 16, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 16, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 15, nil, nil, 733, - nil, 15, nil, 628, 335, nil, nil, nil, nil, nil, - nil, 15, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 16, nil, nil, nil, nil, nil, nil, 777, - nil, nil, 778, nil, nil, 16, nil, nil, nil, nil, - nil, nil, nil, 359, nil, nil, nil, nil, nil, 15, - nil, nil, 787, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 15, nil, nil, nil, nil, nil, nil, 16, - 16, nil, nil, 16, nil, nil, nil, nil, 812, 16, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 38, nil, 38, 15, 15, nil, nil, - 15, 302, nil, nil, nil, nil, 15, nil, nil, 302, - nil, nil, 16, nil, nil, nil, 933, nil, nil, nil, - nil, nil, nil, nil, nil, 39, nil, 39, nil, nil, - nil, 359, 38, 303, 837, 38, nil, nil, nil, 15, - nil, 303, nil, 932, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 38, nil, nil, - nil, nil, nil, nil, 39, nil, nil, 39, nil, nil, - nil, nil, nil, nil, nil, nil, 16, nil, nil, nil, - nil, nil, nil, 16, 16, nil, nil, nil, nil, 39, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 16, nil, 15, nil, 886, nil, 16, nil, 16, - 15, 15, nil, nil, 38, nil, nil, nil, nil, 38, - 38, nil, nil, 897, nil, nil, nil, nil, 15, nil, - nil, nil, 302, nil, 15, nil, 15, nil, nil, nil, - 335, nil, nil, 302, nil, nil, 39, nil, nil, nil, - nil, 39, 39, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 303, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 303, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 38, nil, nil, nil, - nil, 38, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 38, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 39, nil, - nil, nil, nil, 39, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 39, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 362, nil, nil, nil, nil, nil, 38, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 38, 229, nil, nil, nil, nil, nil, nil, - nil, nil, 276, 276, 276, 363, nil, nil, nil, nil, - nil, 39, nil, nil, nil, 322, 323, 324, nil, nil, - nil, nil, nil, nil, 39, nil, 38, 38, nil, nil, - 38, nil, 276, 276, nil, nil, 38, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 39, 39, - nil, 362, 39, nil, nil, nil, nil, nil, 39, 38, - nil, nil, nil, 928, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 363, nil, nil, nil, nil, nil, nil, - nil, 39, nil, nil, nil, 929, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 38, nil, nil, nil, nil, nil, nil, - 38, 38, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 38, nil, - nil, nil, nil, nil, 38, 39, 38, nil, nil, nil, - nil, nil, 39, 39, nil, nil, nil, nil, nil, nil, - nil, nil, 276, 409, 276, nil, nil, 428, 433, nil, - 39, nil, nil, nil, nil, nil, 39, nil, 39, nil, - nil, nil, nil, 229, nil, nil, 448, 449, 450, 451, - 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, - 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, - 472, 473, nil, nil, nil, nil, nil, nil, 276, 276, - nil, nil, nil, nil, nil, nil, nil, 276, nil, nil, - nil, nil, nil, nil, 276, nil, 276, nil, nil, 276, - 276, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 520, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 276, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 276, nil, 428, 613, - 409, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 276, nil, 276, nil, 276, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 276, nil, nil, nil, nil, nil, nil, nil, nil, 648, - 649, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 276, nil, nil, 276, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 276, 276, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 276, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 276, 735, nil, nil, 276, 276, 740, 742, - nil, nil, nil, 745, 747, nil, nil, 613, 749, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 276, nil, nil, 276, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 276, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 276, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 276, nil, 839, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 740, 742, 747, 745, nil, 842, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 276, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 276, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 276, 839, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 276 ] - -racc_goto_check = [ - 31, 67, 56, 22, 33, 33, 33, 92, 22, 64, - 64, 141, 86, 8, 2, 23, 37, 37, 73, 89, - 89, 36, 98, 22, 27, 10, 31, 17, 17, 154, - 27, 17, 22, 22, 22, 39, 22, 22, 22, 57, - 57, 15, 15, 64, 64, 64, 60, 60, 18, 71, - 71, 68, 68, 68, 74, 90, 74, 118, 45, 6, - 46, 20, 61, 61, 49, 37, 22, 22, 181, 23, - 22, 22, 22, 22, 63, 47, 38, 38, 38, 54, - 129, 68, 17, 17, 17, 17, 7, 117, 50, 5, - 4, 7, 11, 177, 1, 96, 24, 70, 70, 70, - 140, 119, 57, 12, 91, 91, 44, 44, 44, 181, - 29, 29, 155, 132, 29, 178, 22, 55, 55, 155, - 134, 22, 22, 22, 22, 22, 22, 70, 70, 14, - 47, 69, 69, 11, 135, 69, 16, 2, 172, 51, - 40, 158, 158, 19, 28, 30, 124, 124, 40, 40, - 42, 62, 73, 47, 4, 66, 72, 84, 85, 96, - 74, 74, 88, 93, 95, 29, 29, 29, 29, 99, - 100, 101, 102, 181, 103, 104, 120, 105, 106, 107, - 108, 109, 110, 111, 112, 172, 33, 113, 117, 118, - 114, 115, 118, 116, 121, 41, 127, 5, 133, 7, - 41, 159, 159, 159, 159, 92, 136, 159, 7, 7, - 137, 22, 22, 22, 22, 41, 138, 22, 22, 22, - 22, 22, 22, 140, 41, 41, 41, 139, 41, 178, - 177, 68, 154, 119, 22, 71, 120, 68, 134, 142, - 33, 33, 124, 124, 57, 37, 37, 23, 8, 33, - 20, 20, 135, 143, 144, 20, 20, 146, 41, 41, - 166, 132, 41, 29, 29, 29, 29, 147, 22, 22, - 118, 148, 118, 120, 149, 64, 54, 22, 150, 153, - 156, 140, 140, 172, 157, 160, 161, 40, 68, 162, - 31, 132, 64, 163, 47, 22, 68, 120, 24, 22, - 164, 165, 170, 22, 22, 17, 17, 172, 41, 31, - 129, 23, 37, 41, 41, 41, 41, 41, 41, 174, - 22, 45, 37, 46, 175, 24, 45, 51, 46, 22, - 22, 118, 118, 71, 70, 51, 47, 71, nil, 11, - 47, nil, 70, 44, 22, 22, 6, 49, 63, 23, - 37, 44, 21, 50, nil, 90, 47, 21, 37, 23, - 124, nil, 47, nil, 22, 73, 98, nil, 39, 118, - nil, 118, 36, 39, 29, nil, nil, 4, 7, 89, - 22, nil, 96, 166, nil, 21, 24, nil, 29, 29, - 91, 31, nil, 118, 124, 24, 159, 8, 159, nil, - nil, nil, 8, 41, 41, 41, 41, 74, 29, 41, - 41, 41, 41, 41, 41, nil, nil, nil, 33, 181, - 47, nil, nil, nil, 29, nil, 41, 57, nil, 15, - 4, nil, nil, nil, 60, 96, nil, 18, nil, 71, - nil, 166, 166, nil, nil, 71, 22, nil, nil, nil, - 61, nil, 96, nil, 31, nil, nil, 69, 51, 9, - 41, 41, nil, nil, 71, 21, 38, 27, nil, 41, - nil, 130, 38, 57, 21, 21, nil, 73, 10, nil, - 64, nil, 33, nil, nil, nil, nil, 41, 64, nil, - nil, 41, nil, nil, nil, nil, 41, nil, 71, nil, - 22, nil, 22, nil, nil, nil, 47, nil, 22, nil, - 22, nil, nil, 2, nil, nil, 22, 8, nil, nil, - 33, 41, 41, nil, 22, 38, nil, nil, nil, nil, - 33, 71, 123, nil, nil, 49, 41, 41, nil, 22, - 57, 71, 22, 49, nil, nil, 89, nil, 22, nil, - 57, nil, nil, nil, nil, 70, 41, nil, 22, nil, - 21, 92, nil, nil, 22, nil, 68, nil, 29, 71, - nil, 86, 41, 89, nil, nil, nil, 71, 57, nil, - nil, nil, nil, 21, 57, 7, nil, nil, nil, nil, - nil, nil, nil, 31, 67, 70, nil, 31, 22, 22, - nil, nil, nil, 22, 22, nil, nil, 22, 141, nil, - nil, 64, nil, nil, nil, nil, nil, 57, nil, 15, - 31, 22, 64, nil, 60, nil, 22, 22, nil, nil, - nil, nil, 96, 96, 9, 31, 20, 20, 41, 22, - 61, 20, 20, nil, 21, 20, nil, 8, 21, 56, - 22, 96, 96, 21, 130, nil, 130, 9, nil, nil, - nil, 70, nil, nil, nil, 71, 49, 47, 71, 17, - nil, nil, nil, nil, 68, 17, nil, 49, 21, nil, - nil, 31, 171, nil, nil, 24, nil, nil, nil, 47, - 31, nil, 41, nil, 41, nil, nil, nil, nil, nil, - nil, 130, 41, 130, nil, nil, nil, nil, 22, nil, - nil, 123, nil, 22, 22, nil, 41, nil, 22, nil, - nil, nil, 9, nil, nil, nil, 67, 9, 22, nil, - 67, 41, nil, nil, 41, nil, nil, nil, nil, 22, - 41, nil, 64, 47, nil, 31, nil, nil, nil, 57, - 41, nil, 29, nil, nil, nil, 41, nil, 29, 123, - nil, nil, 123, 171, 123, nil, 123, nil, nil, 173, - 22, nil, nil, nil, nil, 31, 22, 20, nil, 26, - 23, 37, 17, nil, 26, nil, nil, nil, nil, 22, - 41, 41, nil, 130, nil, 41, 41, nil, nil, 41, - nil, nil, nil, nil, 125, 171, 25, nil, nil, nil, - nil, 25, 26, 41, nil, nil, nil, 130, 41, 41, - 128, 22, nil, 22, 22, nil, nil, 22, nil, nil, - 64, nil, nil, 22, nil, nil, nil, nil, nil, 25, - 25, 25, 64, nil, nil, nil, nil, 26, nil, 21, - nil, 21, nil, nil, nil, nil, nil, nil, 22, nil, - nil, nil, nil, 171, 171, 29, 22, nil, nil, nil, - 22, nil, nil, nil, 25, 25, 25, nil, 123, nil, - 123, nil, 123, nil, 123, nil, nil, nil, 21, nil, - nil, 21, 26, nil, nil, nil, nil, nil, nil, 31, - 41, 26, 26, nil, nil, 41, 41, nil, nil, nil, - 41, nil, nil, 21, nil, nil, nil, nil, 96, 25, - 41, 96, nil, nil, nil, nil, 96, nil, 25, 25, - 22, 41, 123, nil, nil, nil, nil, 22, 22, nil, - nil, nil, nil, nil, nil, nil, 171, nil, 171, nil, - nil, 33, nil, nil, 57, 22, nil, nil, nil, nil, - nil, 22, 9, 22, nil, 9, nil, nil, 41, nil, - 21, nil, nil, nil, nil, 21, 21, nil, nil, 22, - 31, 41, nil, 125, nil, nil, 125, 26, nil, nil, - 65, nil, nil, 171, 26, 171, 173, nil, nil, 173, - 71, 173, nil, 173, nil, 128, nil, 128, nil, 57, - 26, nil, nil, 41, 25, 41, 41, nil, nil, 41, - nil, nil, nil, nil, nil, 41, 126, 126, 126, nil, - nil, 125, nil, nil, 125, nil, 125, 25, 125, nil, - nil, nil, nil, nil, 9, nil, nil, nil, nil, 9, - 9, nil, 128, nil, 128, nil, nil, nil, 41, nil, - nil, nil, 21, nil, nil, nil, nil, 21, nil, nil, - nil, 26, nil, nil, nil, 26, nil, 21, nil, nil, - 26, nil, nil, nil, nil, 171, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 25, nil, - nil, nil, 25, nil, nil, 26, 25, 25, nil, 171, - nil, nil, 169, 169, 169, 173, nil, 173, nil, 173, - nil, 173, 41, 25, nil, 21, 52, nil, nil, 41, - 41, 52, 25, nil, nil, nil, nil, nil, 21, 65, - nil, nil, 128, nil, 128, 65, 128, 41, nil, nil, - 125, 9, 125, 41, 125, 41, 125, nil, 53, 52, - 52, 52, nil, 53, nil, nil, 128, nil, 128, 173, - 128, 41, 21, 21, nil, nil, 21, nil, 126, 126, - 126, 126, 21, 126, nil, nil, nil, nil, nil, nil, - nil, 53, 53, 53, 52, 52, 52, 52, nil, 9, - nil, nil, nil, nil, 125, nil, nil, nil, nil, nil, - 128, 65, 9, 65, nil, 21, 65, 65, nil, nil, - 128, nil, nil, nil, nil, nil, 53, 53, 53, 53, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 52, - nil, nil, nil, nil, nil, nil, 9, 9, 52, 52, - 9, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 126, 126, 126, 126, nil, nil, nil, nil, nil, nil, - nil, 53, nil, nil, nil, nil, 26, nil, 26, 21, - 53, 53, nil, nil, nil, nil, 21, 21, nil, 9, - nil, 126, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 25, 21, 25, nil, nil, nil, nil, - 21, 25, 21, nil, nil, 26, nil, nil, 26, 25, - nil, nil, nil, nil, nil, nil, nil, 169, 169, nil, - 169, 169, nil, 169, 52, 65, nil, nil, nil, nil, - 26, nil, 25, nil, nil, 25, nil, nil, nil, nil, - nil, nil, nil, 9, nil, nil, nil, 52, nil, nil, - 9, 9, nil, nil, nil, nil, 53, 25, nil, nil, - nil, nil, nil, nil, 25, nil, nil, nil, 9, nil, - nil, nil, nil, 26, 9, nil, nil, nil, nil, 53, - nil, nil, nil, nil, nil, nil, nil, 26, nil, nil, - nil, nil, 26, 26, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 65, 52, 65, - nil, 65, 52, nil, 25, nil, 52, 52, nil, 25, - 25, 169, 169, 169, 169, nil, nil, nil, nil, nil, - nil, nil, 25, 52, nil, nil, nil, nil, nil, nil, - 53, nil, 52, 25, 53, nil, nil, 65, 53, 53, - 65, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 169, nil, nil, 65, 53, nil, nil, nil, nil, - nil, nil, nil, nil, 53, nil, nil, nil, nil, 26, - nil, nil, nil, nil, 26, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 26, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 25, nil, nil, 65, - nil, 25, nil, 65, 65, nil, nil, nil, nil, nil, - nil, 25, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 26, nil, nil, nil, nil, nil, nil, 65, - nil, nil, 65, nil, nil, 26, nil, nil, nil, nil, - nil, nil, nil, 25, nil, nil, nil, nil, nil, 25, - nil, nil, 65, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 25, nil, nil, nil, nil, nil, nil, 26, - 26, nil, nil, 26, nil, nil, nil, nil, 65, 26, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 52, nil, 52, 25, 25, nil, nil, - 25, 52, nil, nil, nil, nil, 25, nil, nil, 52, - nil, nil, 26, nil, nil, nil, 26, nil, nil, nil, - nil, nil, nil, nil, nil, 53, nil, 53, nil, nil, - nil, 25, 52, 53, 65, 52, nil, nil, nil, 25, - nil, 53, nil, 25, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 52, nil, nil, - nil, nil, nil, nil, 53, nil, nil, 53, nil, nil, - nil, nil, nil, nil, nil, nil, 26, nil, nil, nil, - nil, nil, nil, 26, 26, nil, nil, nil, nil, 53, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 26, nil, 25, nil, 65, nil, 26, nil, 26, - 25, 25, nil, nil, 52, nil, nil, nil, nil, 52, - 52, nil, nil, 65, nil, nil, nil, nil, 25, nil, - nil, nil, 52, nil, 25, nil, 25, nil, nil, nil, - 65, nil, nil, 52, nil, nil, 53, nil, nil, nil, - nil, 53, 53, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 53, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 53, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 52, nil, nil, nil, - nil, 52, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 52, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 53, nil, - nil, nil, nil, 53, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 53, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 52, nil, nil, nil, nil, nil, 52, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 52, 32, nil, nil, nil, nil, nil, nil, - nil, nil, 32, 32, 32, 53, nil, nil, nil, nil, - nil, 53, nil, nil, nil, 32, 32, 32, nil, nil, - nil, nil, nil, nil, 53, nil, 52, 52, nil, nil, - 52, nil, 32, 32, nil, nil, 52, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 53, 53, - nil, 52, 53, nil, nil, nil, nil, nil, 53, 52, - nil, nil, nil, 52, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 53, nil, nil, nil, nil, nil, nil, - nil, 53, nil, nil, nil, 53, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 52, nil, nil, nil, nil, nil, nil, - 52, 52, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 52, nil, - nil, nil, nil, nil, 52, 53, 52, nil, nil, nil, - nil, nil, 53, 53, nil, nil, nil, nil, nil, nil, - nil, nil, 32, 32, 32, nil, nil, 32, 32, nil, - 53, nil, nil, nil, nil, nil, 53, nil, 53, nil, - nil, nil, nil, 32, nil, nil, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, nil, nil, nil, nil, nil, nil, 32, 32, - nil, nil, nil, nil, nil, nil, nil, 32, nil, nil, - nil, nil, nil, nil, 32, nil, 32, nil, nil, 32, - 32, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 32, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 32, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 32, nil, 32, 32, - 32, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 32, nil, 32, nil, 32, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 32, nil, nil, nil, nil, nil, nil, nil, nil, 32, - 32, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 32, nil, nil, 32, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 32, 32, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 32, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 32, 32, nil, nil, 32, 32, 32, 32, - nil, nil, nil, 32, 32, nil, nil, 32, 32, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 32, nil, nil, 32, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 32, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 32, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 32, nil, 32, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 32, 32, 32, 32, nil, 32, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 32, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 32, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 32, 32, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 32 ] - -racc_goto_pointer = [ - nil, 94, 14, nil, 87, 84, 56, 86, -313, 426, - -497, -559, -681, nil, -368, 33, 127, -36, -167, 75, - 41, 352, 3, -196, -314, 806, 779, -185, -65, 47, - 21, -19, 1893, -25, nil, nil, -3, -196, 50, -229, - -334, 195, -328, nil, 77, 25, 27, -144, nil, 30, - 53, -178, 1126, 1158, -277, 48, -69, 31, nil, nil, - 38, 54, -249, 33, -25, 930, 96, -58, 22, -199, - 68, 23, -319, -261, -433, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 86, 98, -49, nil, -175, -320, - -635, -436, -337, 95, nil, -196, 92, nil, -540, 98, - 113, 113, -352, 116, 113, 112, -515, 113, -516, -368, - -717, -373, -529, -177, -184, -372, -642, -801, -618, -574, - -714, -422, nil, -84, -514, 188, 267, -420, 204, -536, - -145, nil, -503, -656, -734, -720, -329, -583, -121, -430, - -435, -11, -632, -619, -5, nil, -12, -3, -627, -378, - -510, nil, nil, 200, -52, 28, 195, 198, -241, -179, - 198, 198, 200, -275, -269, -257, -275, nil, nil, 449, - -497, 147, -661, 153, -476, -519, nil, -708, -733, nil, - nil, -421 ] - -racc_goto_default = [ - nil, nil, nil, 3, nil, 4, 345, 293, nil, 522, - nil, 817, nil, 290, 291, nil, nil, nil, 11, 12, - 18, 228, 321, nil, nil, 226, 227, nil, nil, 17, - nil, 440, 21, 22, 23, 24, nil, 645, nil, nil, - nil, 310, nil, 25, 411, 32, nil, nil, 34, 37, - 36, nil, 223, 224, 357, nil, 131, 419, 130, 133, - 77, 78, nil, 92, 46, 282, nil, 785, 412, nil, - 413, 424, 599, 486, 280, 266, 47, 48, 49, 50, - 51, 52, 53, 54, 55, nil, 267, 61, nil, nil, - nil, nil, nil, nil, 69, nil, 537, 70, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 808, 673, nil, - 809, 910, 756, 661, nil, 662, nil, nil, 663, nil, - 665, 615, nil, nil, nil, 671, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 423, nil, nil, nil, nil, - nil, 76, 79, 80, nil, nil, nil, nil, nil, 566, - nil, nil, nil, nil, nil, nil, 877, 717, 660, nil, - 664, 885, 676, 678, 679, 768, 682, 683, 769, 686, - 689, 285 ] - -racc_reduce_table = [ - 0, 0, :racc_error, - 1, 145, :_reduce_none, - 2, 146, :_reduce_2, - 0, 147, :_reduce_3, - 1, 147, :_reduce_4, - 3, 147, :_reduce_5, - 2, 147, :_reduce_6, - 1, 149, :_reduce_none, - 4, 149, :_reduce_8, - 4, 152, :_reduce_9, - 2, 153, :_reduce_10, - 0, 157, :_reduce_11, - 1, 157, :_reduce_12, - 3, 157, :_reduce_13, - 2, 157, :_reduce_14, - 1, 158, :_reduce_none, - 4, 158, :_reduce_16, - 0, 174, :_reduce_17, - 4, 151, :_reduce_18, - 3, 151, :_reduce_19, - 3, 151, :_reduce_20, - 3, 151, :_reduce_21, - 2, 151, :_reduce_22, - 3, 151, :_reduce_23, - 3, 151, :_reduce_24, - 3, 151, :_reduce_25, - 3, 151, :_reduce_26, - 3, 151, :_reduce_27, - 4, 151, :_reduce_28, - 1, 151, :_reduce_none, - 3, 151, :_reduce_30, - 3, 151, :_reduce_31, - 6, 151, :_reduce_32, - 5, 151, :_reduce_33, - 5, 151, :_reduce_34, - 5, 151, :_reduce_35, - 5, 151, :_reduce_36, - 3, 151, :_reduce_37, - 3, 151, :_reduce_38, - 3, 151, :_reduce_39, - 1, 151, :_reduce_none, - 3, 162, :_reduce_41, - 3, 162, :_reduce_42, - 1, 173, :_reduce_none, - 3, 173, :_reduce_44, - 3, 173, :_reduce_45, - 3, 173, :_reduce_46, - 2, 173, :_reduce_47, - 1, 173, :_reduce_none, - 1, 161, :_reduce_none, - 1, 164, :_reduce_none, - 1, 164, :_reduce_none, - 1, 178, :_reduce_none, - 4, 178, :_reduce_53, - 0, 186, :_reduce_54, - 5, 183, :_reduce_55, - 1, 185, :_reduce_none, - 2, 177, :_reduce_57, - 3, 177, :_reduce_58, - 4, 177, :_reduce_59, - 5, 177, :_reduce_60, - 4, 177, :_reduce_61, - 5, 177, :_reduce_62, - 2, 177, :_reduce_63, - 2, 177, :_reduce_64, - 2, 177, :_reduce_65, - 2, 177, :_reduce_66, - 2, 177, :_reduce_67, - 1, 163, :_reduce_68, - 3, 163, :_reduce_69, - 1, 190, :_reduce_70, - 3, 190, :_reduce_71, - 1, 189, :_reduce_none, - 2, 189, :_reduce_73, - 3, 189, :_reduce_74, - 5, 189, :_reduce_75, - 2, 189, :_reduce_76, - 4, 189, :_reduce_77, - 2, 189, :_reduce_78, - 4, 189, :_reduce_79, - 1, 189, :_reduce_80, - 3, 189, :_reduce_81, - 1, 193, :_reduce_none, - 3, 193, :_reduce_83, - 2, 192, :_reduce_84, - 3, 192, :_reduce_85, - 1, 195, :_reduce_86, - 3, 195, :_reduce_87, - 1, 194, :_reduce_88, - 1, 194, :_reduce_89, - 4, 194, :_reduce_90, - 3, 194, :_reduce_91, - 3, 194, :_reduce_92, - 3, 194, :_reduce_93, - 3, 194, :_reduce_94, - 2, 194, :_reduce_95, - 1, 194, :_reduce_96, - 1, 170, :_reduce_97, - 1, 170, :_reduce_98, - 4, 170, :_reduce_99, - 3, 170, :_reduce_100, - 3, 170, :_reduce_101, - 3, 170, :_reduce_102, - 3, 170, :_reduce_103, - 2, 170, :_reduce_104, - 1, 170, :_reduce_105, - 1, 198, :_reduce_106, - 1, 198, :_reduce_none, - 2, 199, :_reduce_108, - 1, 199, :_reduce_109, - 3, 199, :_reduce_110, - 1, 200, :_reduce_none, - 1, 200, :_reduce_none, - 1, 200, :_reduce_none, - 1, 200, :_reduce_none, - 1, 200, :_reduce_none, - 1, 203, :_reduce_116, - 1, 203, :_reduce_none, - 1, 159, :_reduce_none, - 1, 159, :_reduce_none, - 1, 160, :_reduce_120, - 0, 206, :_reduce_121, - 4, 160, :_reduce_122, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 202, :_reduce_none, - 1, 202, :_reduce_none, - 1, 202, :_reduce_none, - 1, 202, :_reduce_none, - 1, 202, :_reduce_none, - 1, 202, :_reduce_none, - 1, 202, :_reduce_none, - 1, 202, :_reduce_none, - 1, 202, :_reduce_none, - 1, 202, :_reduce_none, - 1, 202, :_reduce_none, - 1, 202, :_reduce_none, - 1, 202, :_reduce_none, - 1, 202, :_reduce_none, - 1, 202, :_reduce_none, - 1, 202, :_reduce_none, - 1, 202, :_reduce_none, - 1, 202, :_reduce_none, - 1, 202, :_reduce_none, - 1, 202, :_reduce_none, - 1, 202, :_reduce_none, - 1, 202, :_reduce_none, - 1, 202, :_reduce_none, - 1, 202, :_reduce_none, - 1, 202, :_reduce_none, - 1, 202, :_reduce_none, - 1, 202, :_reduce_none, - 1, 202, :_reduce_none, - 1, 202, :_reduce_none, - 1, 202, :_reduce_none, - 1, 202, :_reduce_none, - 1, 202, :_reduce_none, - 1, 202, :_reduce_none, - 1, 202, :_reduce_none, - 1, 202, :_reduce_none, - 1, 202, :_reduce_none, - 1, 202, :_reduce_none, - 1, 202, :_reduce_none, - 1, 202, :_reduce_none, - 1, 202, :_reduce_none, - 1, 202, :_reduce_none, - 3, 176, :_reduce_194, - 5, 176, :_reduce_195, - 3, 176, :_reduce_196, - 5, 176, :_reduce_197, - 6, 176, :_reduce_198, - 5, 176, :_reduce_199, - 5, 176, :_reduce_200, - 5, 176, :_reduce_201, - 5, 176, :_reduce_202, - 4, 176, :_reduce_203, - 3, 176, :_reduce_204, - 3, 176, :_reduce_205, - 3, 176, :_reduce_206, - 3, 176, :_reduce_207, - 3, 176, :_reduce_208, - 3, 176, :_reduce_209, - 3, 176, :_reduce_210, - 3, 176, :_reduce_211, - 3, 176, :_reduce_212, - 4, 176, :_reduce_213, - 2, 176, :_reduce_214, - 2, 176, :_reduce_215, - 3, 176, :_reduce_216, - 3, 176, :_reduce_217, - 3, 176, :_reduce_218, - 3, 176, :_reduce_219, - 3, 176, :_reduce_220, - 3, 176, :_reduce_221, - 3, 176, :_reduce_222, - 3, 176, :_reduce_223, - 3, 176, :_reduce_224, - 3, 176, :_reduce_225, - 3, 176, :_reduce_226, - 3, 176, :_reduce_227, - 3, 176, :_reduce_228, - 2, 176, :_reduce_229, - 2, 176, :_reduce_230, - 3, 176, :_reduce_231, - 3, 176, :_reduce_232, - 3, 176, :_reduce_233, - 3, 176, :_reduce_234, - 3, 176, :_reduce_235, - 6, 176, :_reduce_236, - 1, 176, :_reduce_none, - 1, 209, :_reduce_none, - 1, 210, :_reduce_none, - 2, 210, :_reduce_none, - 4, 210, :_reduce_241, - 2, 210, :_reduce_242, - 3, 215, :_reduce_243, - 0, 216, :_reduce_244, - 1, 216, :_reduce_none, - 0, 167, :_reduce_246, - 1, 167, :_reduce_none, - 2, 167, :_reduce_none, - 4, 167, :_reduce_249, - 2, 167, :_reduce_250, - 1, 188, :_reduce_251, - 2, 188, :_reduce_252, - 2, 188, :_reduce_253, - 4, 188, :_reduce_254, - 1, 188, :_reduce_255, - 0, 219, :_reduce_256, - 2, 182, :_reduce_257, - 2, 218, :_reduce_258, - 2, 217, :_reduce_259, - 0, 217, :_reduce_260, - 1, 212, :_reduce_261, - 2, 212, :_reduce_262, - 3, 212, :_reduce_263, - 4, 212, :_reduce_264, - 1, 172, :_reduce_265, - 1, 172, :_reduce_none, - 3, 171, :_reduce_267, - 4, 171, :_reduce_268, - 2, 171, :_reduce_269, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_280, - 0, 244, :_reduce_281, - 4, 208, :_reduce_282, - 0, 245, :_reduce_283, - 0, 246, :_reduce_284, - 6, 208, :_reduce_285, - 0, 247, :_reduce_286, - 4, 208, :_reduce_287, - 3, 208, :_reduce_288, - 3, 208, :_reduce_289, - 2, 208, :_reduce_290, - 3, 208, :_reduce_291, - 3, 208, :_reduce_292, - 1, 208, :_reduce_293, - 4, 208, :_reduce_294, - 3, 208, :_reduce_295, - 1, 208, :_reduce_296, - 5, 208, :_reduce_297, - 4, 208, :_reduce_298, - 3, 208, :_reduce_299, - 2, 208, :_reduce_300, - 1, 208, :_reduce_none, - 2, 208, :_reduce_302, - 0, 248, :_reduce_303, - 3, 208, :_reduce_304, - 6, 208, :_reduce_305, - 6, 208, :_reduce_306, - 0, 249, :_reduce_307, - 0, 250, :_reduce_308, - 7, 208, :_reduce_309, - 0, 251, :_reduce_310, - 0, 252, :_reduce_311, - 7, 208, :_reduce_312, - 5, 208, :_reduce_313, - 4, 208, :_reduce_314, - 0, 253, :_reduce_315, - 0, 254, :_reduce_316, - 9, 208, :_reduce_317, - 0, 255, :_reduce_318, - 6, 208, :_reduce_319, - 0, 256, :_reduce_320, - 7, 208, :_reduce_321, - 0, 257, :_reduce_322, - 5, 208, :_reduce_323, - 0, 258, :_reduce_324, - 6, 208, :_reduce_325, - 0, 259, :_reduce_326, - 0, 260, :_reduce_327, - 9, 208, :_reduce_328, - 1, 208, :_reduce_329, - 1, 208, :_reduce_330, - 1, 208, :_reduce_331, - 1, 208, :_reduce_332, - 1, 166, :_reduce_none, - 1, 238, :_reduce_334, - 1, 241, :_reduce_335, - 1, 233, :_reduce_none, - 1, 233, :_reduce_none, - 2, 233, :_reduce_338, - 1, 235, :_reduce_none, - 1, 235, :_reduce_none, - 1, 234, :_reduce_none, - 5, 234, :_reduce_342, - 1, 155, :_reduce_none, - 2, 155, :_reduce_344, - 1, 237, :_reduce_none, - 1, 237, :_reduce_none, - 1, 261, :_reduce_347, - 3, 261, :_reduce_348, - 1, 264, :_reduce_349, - 3, 264, :_reduce_350, - 1, 263, :_reduce_none, - 4, 263, :_reduce_352, - 6, 263, :_reduce_353, - 3, 263, :_reduce_354, - 5, 263, :_reduce_355, - 2, 263, :_reduce_356, - 4, 263, :_reduce_357, - 1, 263, :_reduce_358, - 3, 263, :_reduce_359, - 4, 265, :_reduce_360, - 2, 265, :_reduce_361, - 2, 265, :_reduce_362, - 1, 265, :_reduce_363, - 2, 270, :_reduce_364, - 0, 270, :_reduce_365, - 6, 271, :_reduce_366, - 8, 271, :_reduce_367, - 4, 271, :_reduce_368, - 6, 271, :_reduce_369, - 4, 271, :_reduce_370, - 2, 271, :_reduce_none, - 6, 271, :_reduce_372, - 2, 271, :_reduce_373, - 4, 271, :_reduce_374, - 6, 271, :_reduce_375, - 2, 271, :_reduce_376, - 4, 271, :_reduce_377, - 2, 271, :_reduce_378, - 4, 271, :_reduce_379, - 1, 271, :_reduce_none, - 0, 184, :_reduce_381, - 1, 184, :_reduce_382, - 3, 275, :_reduce_383, - 1, 275, :_reduce_384, - 4, 275, :_reduce_385, - 1, 276, :_reduce_386, - 4, 276, :_reduce_387, - 1, 277, :_reduce_388, - 3, 277, :_reduce_389, - 1, 278, :_reduce_390, - 1, 278, :_reduce_none, - 0, 282, :_reduce_392, - 0, 283, :_reduce_393, - 4, 232, :_reduce_394, - 4, 280, :_reduce_395, - 1, 280, :_reduce_396, - 0, 286, :_reduce_397, - 4, 281, :_reduce_398, - 0, 287, :_reduce_399, - 4, 281, :_reduce_400, - 0, 288, :_reduce_401, - 5, 285, :_reduce_402, - 2, 179, :_reduce_403, - 4, 179, :_reduce_404, - 5, 179, :_reduce_405, - 5, 179, :_reduce_406, - 2, 231, :_reduce_407, - 4, 231, :_reduce_408, - 4, 231, :_reduce_409, - 3, 231, :_reduce_410, - 3, 231, :_reduce_411, - 3, 231, :_reduce_412, - 2, 231, :_reduce_413, - 1, 231, :_reduce_414, - 4, 231, :_reduce_415, - 0, 290, :_reduce_416, - 5, 230, :_reduce_417, - 0, 291, :_reduce_418, - 5, 230, :_reduce_419, - 5, 236, :_reduce_420, - 1, 292, :_reduce_421, - 1, 292, :_reduce_none, - 6, 154, :_reduce_423, - 0, 154, :_reduce_424, - 1, 293, :_reduce_425, - 1, 293, :_reduce_none, - 1, 293, :_reduce_none, - 2, 294, :_reduce_428, - 1, 294, :_reduce_none, - 2, 156, :_reduce_430, - 1, 156, :_reduce_none, - 1, 220, :_reduce_none, - 1, 220, :_reduce_none, - 1, 220, :_reduce_none, - 1, 221, :_reduce_435, - 1, 296, :_reduce_436, - 2, 296, :_reduce_437, - 3, 297, :_reduce_438, - 1, 297, :_reduce_439, - 1, 297, :_reduce_440, - 3, 222, :_reduce_441, - 4, 223, :_reduce_442, - 3, 224, :_reduce_443, - 0, 301, :_reduce_444, - 3, 301, :_reduce_445, - 1, 302, :_reduce_446, - 2, 302, :_reduce_447, - 3, 226, :_reduce_448, - 0, 304, :_reduce_449, - 3, 304, :_reduce_450, - 3, 225, :_reduce_451, - 3, 227, :_reduce_452, - 0, 305, :_reduce_453, - 3, 305, :_reduce_454, - 0, 306, :_reduce_455, - 3, 306, :_reduce_456, - 0, 298, :_reduce_457, - 2, 298, :_reduce_458, - 0, 299, :_reduce_459, - 2, 299, :_reduce_460, - 0, 300, :_reduce_461, - 2, 300, :_reduce_462, - 1, 303, :_reduce_463, - 2, 303, :_reduce_464, - 0, 308, :_reduce_465, - 4, 303, :_reduce_466, - 1, 307, :_reduce_467, - 1, 307, :_reduce_468, - 1, 307, :_reduce_469, - 1, 307, :_reduce_none, - 1, 204, :_reduce_471, - 3, 205, :_reduce_472, - 1, 295, :_reduce_473, - 2, 295, :_reduce_474, - 1, 207, :_reduce_475, - 1, 207, :_reduce_476, - 1, 207, :_reduce_477, - 1, 207, :_reduce_478, - 1, 196, :_reduce_479, - 1, 196, :_reduce_480, - 1, 196, :_reduce_481, - 1, 196, :_reduce_482, - 1, 196, :_reduce_483, - 1, 197, :_reduce_484, - 1, 197, :_reduce_485, - 1, 197, :_reduce_486, - 1, 197, :_reduce_487, - 1, 197, :_reduce_488, - 1, 197, :_reduce_489, - 1, 197, :_reduce_490, - 1, 228, :_reduce_491, - 1, 228, :_reduce_492, - 1, 165, :_reduce_493, - 1, 165, :_reduce_494, - 1, 169, :_reduce_495, - 1, 169, :_reduce_496, - 1, 239, :_reduce_497, - 0, 309, :_reduce_498, - 4, 239, :_reduce_499, - 2, 239, :_reduce_500, - 3, 242, :_reduce_501, - 0, 311, :_reduce_502, - 3, 242, :_reduce_503, - 4, 310, :_reduce_504, - 2, 310, :_reduce_505, - 2, 310, :_reduce_506, - 1, 310, :_reduce_507, - 2, 313, :_reduce_508, - 0, 313, :_reduce_509, - 6, 284, :_reduce_510, - 8, 284, :_reduce_511, - 4, 284, :_reduce_512, - 6, 284, :_reduce_513, - 4, 284, :_reduce_514, - 6, 284, :_reduce_515, - 2, 284, :_reduce_516, - 4, 284, :_reduce_517, - 6, 284, :_reduce_518, - 2, 284, :_reduce_519, - 4, 284, :_reduce_520, - 2, 284, :_reduce_521, - 4, 284, :_reduce_522, - 1, 284, :_reduce_523, - 0, 284, :_reduce_524, - 1, 279, :_reduce_525, - 1, 279, :_reduce_526, - 1, 279, :_reduce_527, - 1, 279, :_reduce_528, - 1, 262, :_reduce_none, - 1, 262, :_reduce_530, - 1, 315, :_reduce_531, - 1, 316, :_reduce_532, - 3, 316, :_reduce_533, - 1, 272, :_reduce_534, - 3, 272, :_reduce_535, - 1, 317, :_reduce_536, - 2, 318, :_reduce_537, - 1, 318, :_reduce_538, - 2, 319, :_reduce_539, - 1, 319, :_reduce_540, - 1, 266, :_reduce_541, - 3, 266, :_reduce_542, - 1, 312, :_reduce_543, - 3, 312, :_reduce_544, - 1, 320, :_reduce_none, - 1, 320, :_reduce_none, - 2, 267, :_reduce_547, - 1, 267, :_reduce_548, - 3, 321, :_reduce_549, - 3, 322, :_reduce_550, - 1, 273, :_reduce_551, - 3, 273, :_reduce_552, - 1, 314, :_reduce_553, - 3, 314, :_reduce_554, - 1, 323, :_reduce_none, - 1, 323, :_reduce_none, - 2, 274, :_reduce_557, - 1, 274, :_reduce_558, - 1, 324, :_reduce_none, - 1, 324, :_reduce_none, - 2, 269, :_reduce_561, - 2, 268, :_reduce_562, - 0, 268, :_reduce_563, - 1, 243, :_reduce_none, - 3, 243, :_reduce_565, - 0, 229, :_reduce_566, - 2, 229, :_reduce_none, - 1, 214, :_reduce_568, - 3, 214, :_reduce_569, - 3, 325, :_reduce_570, - 2, 325, :_reduce_571, - 4, 325, :_reduce_572, - 2, 325, :_reduce_573, - 1, 187, :_reduce_none, - 1, 187, :_reduce_none, - 1, 187, :_reduce_none, - 1, 181, :_reduce_none, - 1, 181, :_reduce_none, - 1, 181, :_reduce_none, - 1, 181, :_reduce_none, - 1, 289, :_reduce_none, - 1, 289, :_reduce_none, - 1, 289, :_reduce_none, - 1, 180, :_reduce_none, - 1, 180, :_reduce_none, - 0, 148, :_reduce_none, - 1, 148, :_reduce_none, - 0, 175, :_reduce_none, - 1, 175, :_reduce_none, - 2, 191, :_reduce_590, - 2, 168, :_reduce_591, - 0, 213, :_reduce_none, - 1, 213, :_reduce_none, - 1, 213, :_reduce_none, - 1, 240, :_reduce_595, - 1, 240, :_reduce_none, - 1, 150, :_reduce_none, - 2, 150, :_reduce_none, - 0, 211, :_reduce_599 ] - -racc_reduce_n = 600 - -racc_shift_n = 1027 - -racc_token_table = { - false => 0, - :error => 1, - :kCLASS => 2, - :kMODULE => 3, - :kDEF => 4, - :kUNDEF => 5, - :kBEGIN => 6, - :kRESCUE => 7, - :kENSURE => 8, - :kEND => 9, - :kIF => 10, - :kUNLESS => 11, - :kTHEN => 12, - :kELSIF => 13, - :kELSE => 14, - :kCASE => 15, - :kWHEN => 16, - :kWHILE => 17, - :kUNTIL => 18, - :kFOR => 19, - :kBREAK => 20, - :kNEXT => 21, - :kREDO => 22, - :kRETRY => 23, - :kIN => 24, - :kDO => 25, - :kDO_COND => 26, - :kDO_BLOCK => 27, - :kDO_LAMBDA => 28, - :kRETURN => 29, - :kYIELD => 30, - :kSUPER => 31, - :kSELF => 32, - :kNIL => 33, - :kTRUE => 34, - :kFALSE => 35, - :kAND => 36, - :kOR => 37, - :kNOT => 38, - :kIF_MOD => 39, - :kUNLESS_MOD => 40, - :kWHILE_MOD => 41, - :kUNTIL_MOD => 42, - :kRESCUE_MOD => 43, - :kALIAS => 44, - :kDEFINED => 45, - :klBEGIN => 46, - :klEND => 47, - :k__LINE__ => 48, - :k__FILE__ => 49, - :k__ENCODING__ => 50, - :tIDENTIFIER => 51, - :tFID => 52, - :tGVAR => 53, - :tIVAR => 54, - :tCONSTANT => 55, - :tLABEL => 56, - :tCVAR => 57, - :tNTH_REF => 58, - :tBACK_REF => 59, - :tSTRING_CONTENT => 60, - :tINTEGER => 61, - :tFLOAT => 62, - :tUPLUS => 63, - :tUMINUS => 64, - :tUNARY_NUM => 65, - :tPOW => 66, - :tCMP => 67, - :tEQ => 68, - :tEQQ => 69, - :tNEQ => 70, - :tGEQ => 71, - :tLEQ => 72, - :tANDOP => 73, - :tOROP => 74, - :tMATCH => 75, - :tNMATCH => 76, - :tDOT => 77, - :tDOT2 => 78, - :tDOT3 => 79, - :tAREF => 80, - :tASET => 81, - :tLSHFT => 82, - :tRSHFT => 83, - :tCOLON2 => 84, - :tCOLON3 => 85, - :tOP_ASGN => 86, - :tASSOC => 87, - :tLPAREN => 88, - :tLPAREN2 => 89, - :tRPAREN => 90, - :tLPAREN_ARG => 91, - :tLBRACK => 92, - :tLBRACK2 => 93, - :tRBRACK => 94, - :tLBRACE => 95, - :tLBRACE_ARG => 96, - :tSTAR => 97, - :tSTAR2 => 98, - :tAMPER => 99, - :tAMPER2 => 100, - :tTILDE => 101, - :tPERCENT => 102, - :tDIVIDE => 103, - :tDSTAR => 104, - :tPLUS => 105, - :tMINUS => 106, - :tLT => 107, - :tGT => 108, - :tPIPE => 109, - :tBANG => 110, - :tCARET => 111, - :tLCURLY => 112, - :tRCURLY => 113, - :tBACK_REF2 => 114, - :tSYMBEG => 115, - :tSTRING_BEG => 116, - :tXSTRING_BEG => 117, - :tREGEXP_BEG => 118, - :tREGEXP_OPT => 119, - :tWORDS_BEG => 120, - :tQWORDS_BEG => 121, - :tSYMBOLS_BEG => 122, - :tQSYMBOLS_BEG => 123, - :tSTRING_DBEG => 124, - :tSTRING_DVAR => 125, - :tSTRING_END => 126, - :tSTRING_DEND => 127, - :tSTRING => 128, - :tSYMBOL => 129, - :tNL => 130, - :tEH => 131, - :tCOLON => 132, - :tCOMMA => 133, - :tSPACE => 134, - :tSEMI => 135, - :tLAMBDA => 136, - :tLAMBEG => 137, - :tCHARACTER => 138, - :tRATIONAL => 139, - :tIMAGINARY => 140, - :tLABEL_END => 141, - :tEQL => 142, - :tLOWEST => 143 } - -racc_nt_base = 144 - -racc_use_result_var = true - -Racc_arg = [ - racc_action_table, - racc_action_check, - racc_action_default, - racc_action_pointer, - racc_goto_table, - racc_goto_check, - racc_goto_default, - racc_goto_pointer, - racc_nt_base, - racc_reduce_table, - racc_token_table, - racc_shift_n, - racc_reduce_n, - racc_use_result_var ] -Ractor.make_shareable(Racc_arg) if defined?(Ractor) - -Racc_token_to_s_table = [ - "$end", - "error", - "kCLASS", - "kMODULE", - "kDEF", - "kUNDEF", - "kBEGIN", - "kRESCUE", - "kENSURE", - "kEND", - "kIF", - "kUNLESS", - "kTHEN", - "kELSIF", - "kELSE", - "kCASE", - "kWHEN", - "kWHILE", - "kUNTIL", - "kFOR", - "kBREAK", - "kNEXT", - "kREDO", - "kRETRY", - "kIN", - "kDO", - "kDO_COND", - "kDO_BLOCK", - "kDO_LAMBDA", - "kRETURN", - "kYIELD", - "kSUPER", - "kSELF", - "kNIL", - "kTRUE", - "kFALSE", - "kAND", - "kOR", - "kNOT", - "kIF_MOD", - "kUNLESS_MOD", - "kWHILE_MOD", - "kUNTIL_MOD", - "kRESCUE_MOD", - "kALIAS", - "kDEFINED", - "klBEGIN", - "klEND", - "k__LINE__", - "k__FILE__", - "k__ENCODING__", - "tIDENTIFIER", - "tFID", - "tGVAR", - "tIVAR", - "tCONSTANT", - "tLABEL", - "tCVAR", - "tNTH_REF", - "tBACK_REF", - "tSTRING_CONTENT", - "tINTEGER", - "tFLOAT", - "tUPLUS", - "tUMINUS", - "tUNARY_NUM", - "tPOW", - "tCMP", - "tEQ", - "tEQQ", - "tNEQ", - "tGEQ", - "tLEQ", - "tANDOP", - "tOROP", - "tMATCH", - "tNMATCH", - "tDOT", - "tDOT2", - "tDOT3", - "tAREF", - "tASET", - "tLSHFT", - "tRSHFT", - "tCOLON2", - "tCOLON3", - "tOP_ASGN", - "tASSOC", - "tLPAREN", - "tLPAREN2", - "tRPAREN", - "tLPAREN_ARG", - "tLBRACK", - "tLBRACK2", - "tRBRACK", - "tLBRACE", - "tLBRACE_ARG", - "tSTAR", - "tSTAR2", - "tAMPER", - "tAMPER2", - "tTILDE", - "tPERCENT", - "tDIVIDE", - "tDSTAR", - "tPLUS", - "tMINUS", - "tLT", - "tGT", - "tPIPE", - "tBANG", - "tCARET", - "tLCURLY", - "tRCURLY", - "tBACK_REF2", - "tSYMBEG", - "tSTRING_BEG", - "tXSTRING_BEG", - "tREGEXP_BEG", - "tREGEXP_OPT", - "tWORDS_BEG", - "tQWORDS_BEG", - "tSYMBOLS_BEG", - "tQSYMBOLS_BEG", - "tSTRING_DBEG", - "tSTRING_DVAR", - "tSTRING_END", - "tSTRING_DEND", - "tSTRING", - "tSYMBOL", - "tNL", - "tEH", - "tCOLON", - "tCOMMA", - "tSPACE", - "tSEMI", - "tLAMBDA", - "tLAMBEG", - "tCHARACTER", - "tRATIONAL", - "tIMAGINARY", - "tLABEL_END", - "tEQL", - "tLOWEST", - "$start", - "program", - "top_compstmt", - "top_stmts", - "opt_terms", - "top_stmt", - "terms", - "stmt", - "bodystmt", - "compstmt", - "opt_rescue", - "opt_else", - "opt_ensure", - "stmts", - "stmt_or_begin", - "fitem", - "undef_list", - "expr_value", - "command_asgn", - "mlhs", - "command_call", - "var_lhs", - "primary_value", - "opt_call_args", - "rbracket", - "backref", - "lhs", - "mrhs", - "mrhs_arg", - "expr", - "@1", - "opt_nl", - "arg", - "command", - "block_command", - "block_call", - "dot_or_colon", - "operation2", - "command_args", - "cmd_brace_block", - "opt_block_param", - "fcall", - "@2", - "operation", - "call_args", - "mlhs_basic", - "mlhs_inner", - "rparen", - "mlhs_head", - "mlhs_item", - "mlhs_node", - "mlhs_post", - "user_variable", - "keyword_variable", - "cname", - "cpath", - "fname", - "op", - "reswords", - "fsym", - "symbol", - "dsym", - "@3", - "simple_numeric", - "primary", - "arg_value", - "aref_args", - "none", - "args", - "trailer", - "assocs", - "paren_args", - "opt_paren_args", - "opt_block_arg", - "block_arg", - "@4", - "literal", - "strings", - "xstring", - "regexp", - "words", - "qwords", - "symbols", - "qsymbols", - "var_ref", - "assoc_list", - "brace_block", - "method_call", - "lambda", - "then", - "if_tail", - "do", - "case_body", - "for_var", - "k_class", - "superclass", - "term", - "k_module", - "f_arglist", - "singleton", - "@5", - "@6", - "@7", - "@8", - "@9", - "@10", - "@11", - "@12", - "@13", - "@14", - "@15", - "@16", - "@17", - "@18", - "@19", - "@20", - "@21", - "f_marg", - "f_norm_arg", - "f_margs", - "f_marg_list", - "block_args_tail", - "f_block_kwarg", - "f_kwrest", - "opt_f_block_arg", - "f_block_arg", - "opt_block_args_tail", - "block_param", - "f_arg", - "f_block_optarg", - "f_rest_arg", - "block_param_def", - "opt_bv_decl", - "bv_decls", - "bvar", - "f_bad_arg", - "f_larglist", - "lambda_body", - "@22", - "@23", - "f_args", - "do_block", - "@24", - "@25", - "@26", - "operation3", - "@27", - "@28", - "cases", - "exc_list", - "exc_var", - "numeric", - "string", - "string1", - "string_contents", - "xstring_contents", - "regexp_contents", - "word_list", - "word", - "string_content", - "symbol_list", - "qword_list", - "qsym_list", - "string_dvar", - "@29", - "@30", - "args_tail", - "@31", - "f_kwarg", - "opt_args_tail", - "f_optarg", - "f_arg_asgn", - "f_arg_item", - "f_label", - "f_kw", - "f_block_kw", - "kwrest_mark", - "f_opt", - "f_block_opt", - "restarg_mark", - "blkarg_mark", - "assoc" ] -Ractor.make_shareable(Racc_token_to_s_table) if defined?(Ractor) - -Racc_debug_parser = false - -##### State transition tables end ##### - -# reduce 0 omitted - -# reduce 1 omitted - -def _reduce_2(val, _values, result) - result = @builder.compstmt(val[0]) - - result -end - -def _reduce_3(val, _values, result) - result = [] - - result -end - -def _reduce_4(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_5(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_6(val, _values, result) - result = [ val[1] ] - - result -end - -# reduce 7 omitted - -def _reduce_8(val, _values, result) - result = @builder.preexe(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_9(val, _values, result) - rescue_bodies = val[1] - else_t, else_ = val[2] - ensure_t, ensure_ = val[3] - - if rescue_bodies.empty? && !else_t.nil? - diagnostic :warning, :useless_else, nil, else_t - end - - result = @builder.begin_body(val[0], - rescue_bodies, - else_t, else_, - ensure_t, ensure_) - - result -end - -def _reduce_10(val, _values, result) - result = @builder.compstmt(val[0]) - - result -end - -def _reduce_11(val, _values, result) - result = [] - - result -end - -def _reduce_12(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_13(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_14(val, _values, result) - result = [ val[1] ] - - result -end - -# reduce 15 omitted - -def _reduce_16(val, _values, result) - diagnostic :error, :begin_in_method, nil, val[0] - - result -end - -def _reduce_17(val, _values, result) - @lexer.state = :expr_fname - - result -end - -def _reduce_18(val, _values, result) - result = @builder.alias(val[0], val[1], val[3]) - - result -end - -def _reduce_19(val, _values, result) - result = @builder.alias(val[0], - @builder.gvar(val[1]), - @builder.gvar(val[2])) - - result -end - -def _reduce_20(val, _values, result) - result = @builder.alias(val[0], - @builder.gvar(val[1]), - @builder.back_ref(val[2])) - - result -end - -def _reduce_21(val, _values, result) - diagnostic :error, :nth_ref_alias, nil, val[2] - - result -end - -def _reduce_22(val, _values, result) - result = @builder.undef_method(val[0], val[1]) - - result -end - -def _reduce_23(val, _values, result) - result = @builder.condition_mod(val[0], nil, - val[1], val[2]) - - result -end - -def _reduce_24(val, _values, result) - result = @builder.condition_mod(nil, val[0], - val[1], val[2]) - - result -end - -def _reduce_25(val, _values, result) - result = @builder.loop_mod(:while, val[0], val[1], val[2]) - - result -end - -def _reduce_26(val, _values, result) - result = @builder.loop_mod(:until, val[0], val[1], val[2]) - - result -end - -def _reduce_27(val, _values, result) - rescue_body = @builder.rescue_body(val[1], - nil, nil, nil, - nil, val[2]) - - result = @builder.begin_body(val[0], [ rescue_body ]) - - result -end - -def _reduce_28(val, _values, result) - result = @builder.postexe(val[0], val[1], val[2], val[3]) - - result -end - -# reduce 29 omitted - -def _reduce_30(val, _values, result) - result = @builder.multi_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_31(val, _values, result) - result = @builder.op_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_32(val, _values, result) - result = @builder.op_assign( - @builder.index( - val[0], val[1], val[2], val[3]), - val[4], val[5]) - - result -end - -def _reduce_33(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_34(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_35(val, _values, result) - const = @builder.const_op_assignable( - @builder.const_fetch(val[0], val[1], val[2])) - result = @builder.op_assign(const, val[3], val[4]) - - result -end - -def _reduce_36(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_37(val, _values, result) - @builder.op_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_38(val, _values, result) - result = @builder.assign(val[0], val[1], - @builder.array(nil, val[2], nil)) - - result -end - -def _reduce_39(val, _values, result) - result = @builder.multi_assign(val[0], val[1], val[2]) - - result -end - -# reduce 40 omitted - -def _reduce_41(val, _values, result) - result = @builder.assign(val[0], val[1], val[2]) - - result -end - -def _reduce_42(val, _values, result) - result = @builder.assign(val[0], val[1], val[2]) - - result -end - -# reduce 43 omitted - -def _reduce_44(val, _values, result) - result = @builder.logical_op(:and, val[0], val[1], val[2]) - - result -end - -def _reduce_45(val, _values, result) - result = @builder.logical_op(:or, val[0], val[1], val[2]) - - result -end - -def _reduce_46(val, _values, result) - result = @builder.not_op(val[0], nil, val[2], nil) - - result -end - -def _reduce_47(val, _values, result) - result = @builder.not_op(val[0], nil, val[1], nil) - - result -end - -# reduce 48 omitted - -# reduce 49 omitted - -# reduce 50 omitted - -# reduce 51 omitted - -# reduce 52 omitted - -def _reduce_53(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - result -end - -def _reduce_54(val, _values, result) - @static_env.extend_dynamic - result = @context.dup - @context.in_block = true - - result -end - -def _reduce_55(val, _values, result) - result = [ val[0], val[2], val[3], val[4] ] - - @static_env.unextend - @context.in_block = val[1].in_block - - result -end - -# reduce 56 omitted - -def _reduce_57(val, _values, result) - result = @builder.call_method(nil, nil, val[0], - nil, val[1], nil) - - result -end - -def _reduce_58(val, _values, result) - method_call = @builder.call_method(nil, nil, val[0], - nil, val[1], nil) - - begin_t, args, body, end_t = val[2] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_59(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - result -end - -def _reduce_60(val, _values, result) - method_call = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - begin_t, args, body, end_t = val[4] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_61(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - result -end - -def _reduce_62(val, _values, result) - method_call = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - begin_t, args, body, end_t = val[4] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_63(val, _values, result) - result = @builder.keyword_cmd(:super, val[0], - nil, val[1], nil) - - result -end - -def _reduce_64(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0], - nil, val[1], nil) - - result -end - -def _reduce_65(val, _values, result) - result = @builder.keyword_cmd(:return, val[0], - nil, val[1], nil) - - result -end - -def _reduce_66(val, _values, result) - result = @builder.keyword_cmd(:break, val[0], - nil, val[1], nil) - - result -end - -def _reduce_67(val, _values, result) - result = @builder.keyword_cmd(:next, val[0], - nil, val[1], nil) - - result -end - -def _reduce_68(val, _values, result) - result = @builder.multi_lhs(nil, val[0], nil) - - result -end - -def _reduce_69(val, _values, result) - result = @builder.begin(val[0], val[1], val[2]) - - result -end - -def _reduce_70(val, _values, result) - result = @builder.multi_lhs(nil, val[0], nil) - - result -end - -def _reduce_71(val, _values, result) - result = @builder.multi_lhs(val[0], val[1], val[2]) - - result -end - -# reduce 72 omitted - -def _reduce_73(val, _values, result) - result = val[0]. - push(val[1]) - - result -end - -def _reduce_74(val, _values, result) - result = val[0]. - push(@builder.splat(val[1], val[2])) - - result -end - -def _reduce_75(val, _values, result) - result = val[0]. - push(@builder.splat(val[1], val[2])). - concat(val[4]) - - result -end - -def _reduce_76(val, _values, result) - result = val[0]. - push(@builder.splat(val[1])) - - result -end - -def _reduce_77(val, _values, result) - result = val[0]. - push(@builder.splat(val[1])). - concat(val[3]) - - result -end - -def _reduce_78(val, _values, result) - result = [ @builder.splat(val[0], val[1]) ] - - result -end - -def _reduce_79(val, _values, result) - result = [ @builder.splat(val[0], val[1]), - *val[3] ] - - result -end - -def _reduce_80(val, _values, result) - result = [ @builder.splat(val[0]) ] - - result -end - -def _reduce_81(val, _values, result) - result = [ @builder.splat(val[0]), - *val[2] ] - - result -end - -# reduce 82 omitted - -def _reduce_83(val, _values, result) - result = @builder.begin(val[0], val[1], val[2]) - - result -end - -def _reduce_84(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_85(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_86(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_87(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_88(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_89(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_90(val, _values, result) - result = @builder.index_asgn(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_91(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_92(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_93(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_94(val, _values, result) - result = @builder.assignable( - @builder.const_fetch(val[0], val[1], val[2])) - - result -end - -def _reduce_95(val, _values, result) - result = @builder.assignable( - @builder.const_global(val[0], val[1])) - - result -end - -def _reduce_96(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_97(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_98(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_99(val, _values, result) - result = @builder.index_asgn(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_100(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_101(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_102(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_103(val, _values, result) - result = @builder.assignable( - @builder.const_fetch(val[0], val[1], val[2])) - - result -end - -def _reduce_104(val, _values, result) - result = @builder.assignable( - @builder.const_global(val[0], val[1])) - - result -end - -def _reduce_105(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_106(val, _values, result) - diagnostic :error, :module_name_const, nil, val[0] - - result -end - -# reduce 107 omitted - -def _reduce_108(val, _values, result) - result = @builder.const_global(val[0], val[1]) - - result -end - -def _reduce_109(val, _values, result) - result = @builder.const(val[0]) - - result -end - -def _reduce_110(val, _values, result) - result = @builder.const_fetch(val[0], val[1], val[2]) - - result -end - -# reduce 111 omitted - -# reduce 112 omitted - -# reduce 113 omitted - -# reduce 114 omitted - -# reduce 115 omitted - -def _reduce_116(val, _values, result) - result = @builder.symbol_internal(val[0]) - - result -end - -# reduce 117 omitted - -# reduce 118 omitted - -# reduce 119 omitted - -def _reduce_120(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_121(val, _values, result) - @lexer.state = :expr_fname - - result -end - -def _reduce_122(val, _values, result) - result = val[0] << val[3] - - result -end - -# reduce 123 omitted - -# reduce 124 omitted - -# reduce 125 omitted - -# reduce 126 omitted - -# reduce 127 omitted - -# reduce 128 omitted - -# reduce 129 omitted - -# reduce 130 omitted - -# reduce 131 omitted - -# reduce 132 omitted - -# reduce 133 omitted - -# reduce 134 omitted - -# reduce 135 omitted - -# reduce 136 omitted - -# reduce 137 omitted - -# reduce 138 omitted - -# reduce 139 omitted - -# reduce 140 omitted - -# reduce 141 omitted - -# reduce 142 omitted - -# reduce 143 omitted - -# reduce 144 omitted - -# reduce 145 omitted - -# reduce 146 omitted - -# reduce 147 omitted - -# reduce 148 omitted - -# reduce 149 omitted - -# reduce 150 omitted - -# reduce 151 omitted - -# reduce 152 omitted - -# reduce 153 omitted - -# reduce 154 omitted - -# reduce 155 omitted - -# reduce 156 omitted - -# reduce 157 omitted - -# reduce 158 omitted - -# reduce 159 omitted - -# reduce 160 omitted - -# reduce 161 omitted - -# reduce 162 omitted - -# reduce 163 omitted - -# reduce 164 omitted - -# reduce 165 omitted - -# reduce 166 omitted - -# reduce 167 omitted - -# reduce 168 omitted - -# reduce 169 omitted - -# reduce 170 omitted - -# reduce 171 omitted - -# reduce 172 omitted - -# reduce 173 omitted - -# reduce 174 omitted - -# reduce 175 omitted - -# reduce 176 omitted - -# reduce 177 omitted - -# reduce 178 omitted - -# reduce 179 omitted - -# reduce 180 omitted - -# reduce 181 omitted - -# reduce 182 omitted - -# reduce 183 omitted - -# reduce 184 omitted - -# reduce 185 omitted - -# reduce 186 omitted - -# reduce 187 omitted - -# reduce 188 omitted - -# reduce 189 omitted - -# reduce 190 omitted - -# reduce 191 omitted - -# reduce 192 omitted - -# reduce 193 omitted - -def _reduce_194(val, _values, result) - result = @builder.assign(val[0], val[1], val[2]) - - result -end - -def _reduce_195(val, _values, result) - rescue_body = @builder.rescue_body(val[3], - nil, nil, nil, - nil, val[4]) - - rescue_ = @builder.begin_body(val[2], [ rescue_body ]) - - result = @builder.assign(val[0], val[1], rescue_) - - result -end - -def _reduce_196(val, _values, result) - result = @builder.op_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_197(val, _values, result) - rescue_body = @builder.rescue_body(val[3], - nil, nil, nil, - nil, val[4]) - - rescue_ = @builder.begin_body(val[2], [ rescue_body ]) - - result = @builder.op_assign(val[0], val[1], rescue_) - - result -end - -def _reduce_198(val, _values, result) - result = @builder.op_assign( - @builder.index( - val[0], val[1], val[2], val[3]), - val[4], val[5]) - - result -end - -def _reduce_199(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_200(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_201(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_202(val, _values, result) - const = @builder.const_op_assignable( - @builder.const_fetch(val[0], val[1], val[2])) - result = @builder.op_assign(const, val[3], val[4]) - - result -end - -def _reduce_203(val, _values, result) - const = @builder.const_op_assignable( - @builder.const_global(val[0], val[1])) - result = @builder.op_assign(const, val[2], val[3]) - - result -end - -def _reduce_204(val, _values, result) - result = @builder.op_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_205(val, _values, result) - result = @builder.range_inclusive(val[0], val[1], val[2]) - - result -end - -def _reduce_206(val, _values, result) - result = @builder.range_exclusive(val[0], val[1], val[2]) - - result -end - -def _reduce_207(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_208(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_209(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_210(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_211(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_212(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_213(val, _values, result) - result = @builder.unary_op(val[0], - @builder.binary_op( - val[1], val[2], val[3])) - - result -end - -def _reduce_214(val, _values, result) - result = @builder.unary_op(val[0], val[1]) - - result -end - -def _reduce_215(val, _values, result) - result = @builder.unary_op(val[0], val[1]) - - result -end - -def _reduce_216(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_217(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_218(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_219(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_220(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_221(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_222(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_223(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_224(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_225(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_226(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_227(val, _values, result) - result = @builder.match_op(val[0], val[1], val[2]) - - result -end - -def _reduce_228(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_229(val, _values, result) - result = @builder.not_op(val[0], nil, val[1], nil) - - result -end - -def _reduce_230(val, _values, result) - result = @builder.unary_op(val[0], val[1]) - - result -end - -def _reduce_231(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_232(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_233(val, _values, result) - result = @builder.logical_op(:and, val[0], val[1], val[2]) - - result -end - -def _reduce_234(val, _values, result) - result = @builder.logical_op(:or, val[0], val[1], val[2]) - - result -end - -def _reduce_235(val, _values, result) - result = @builder.keyword_cmd(:defined?, val[0], nil, [ val[2] ], nil) - - result -end - -def _reduce_236(val, _values, result) - result = @builder.ternary(val[0], val[1], - val[2], val[4], val[5]) - - result -end - -# reduce 237 omitted - -# reduce 238 omitted - -# reduce 239 omitted - -# reduce 240 omitted - -def _reduce_241(val, _values, result) - result = val[0] << @builder.associate(nil, val[2], nil) - - result -end - -def _reduce_242(val, _values, result) - result = [ @builder.associate(nil, val[0], nil) ] - - result -end - -def _reduce_243(val, _values, result) - result = val - - result -end - -def _reduce_244(val, _values, result) - result = [ nil, [], nil ] - - result -end - -# reduce 245 omitted - -def _reduce_246(val, _values, result) - result = [] - - result -end - -# reduce 247 omitted - -# reduce 248 omitted - -def _reduce_249(val, _values, result) - result = val[0] << @builder.associate(nil, val[2], nil) - - result -end - -def _reduce_250(val, _values, result) - result = [ @builder.associate(nil, val[0], nil) ] - - result -end - -def _reduce_251(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_252(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_253(val, _values, result) - result = [ @builder.associate(nil, val[0], nil) ] - result.concat(val[1]) - - result -end - -def _reduce_254(val, _values, result) - assocs = @builder.associate(nil, val[2], nil) - result = val[0] << assocs - result.concat(val[3]) - - result -end - -def _reduce_255(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_256(val, _values, result) - result = @lexer.cmdarg.dup - @lexer.cmdarg.push(true) - - result -end - -def _reduce_257(val, _values, result) - @lexer.cmdarg = val[0] - - result = val[1] - - result -end - -def _reduce_258(val, _values, result) - result = @builder.block_pass(val[0], val[1]) - - result -end - -def _reduce_259(val, _values, result) - result = [ val[1] ] - - result -end - -def _reduce_260(val, _values, result) - result = [] - - result -end - -def _reduce_261(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_262(val, _values, result) - result = [ @builder.splat(val[0], val[1]) ] - - result -end - -def _reduce_263(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_264(val, _values, result) - result = val[0] << @builder.splat(val[2], val[3]) - - result -end - -def _reduce_265(val, _values, result) - result = @builder.array(nil, val[0], nil) - - result -end - -# reduce 266 omitted - -def _reduce_267(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_268(val, _values, result) - result = val[0] << @builder.splat(val[2], val[3]) - - result -end - -def _reduce_269(val, _values, result) - result = [ @builder.splat(val[0], val[1]) ] - - result -end - -# reduce 270 omitted - -# reduce 271 omitted - -# reduce 272 omitted - -# reduce 273 omitted - -# reduce 274 omitted - -# reduce 275 omitted - -# reduce 276 omitted - -# reduce 277 omitted - -# reduce 278 omitted - -# reduce 279 omitted - -def _reduce_280(val, _values, result) - result = @builder.call_method(nil, nil, val[0]) - - result -end - -def _reduce_281(val, _values, result) - result = @lexer.cmdarg.dup - @lexer.cmdarg.clear - - result -end - -def _reduce_282(val, _values, result) - @lexer.cmdarg = val[1] - - result = @builder.begin_keyword(val[0], val[2], val[3]) - - result -end - -def _reduce_283(val, _values, result) - result = @lexer.cmdarg.dup - @lexer.cmdarg.clear - - result -end - -def _reduce_284(val, _values, result) - @lexer.state = :expr_endarg - - result -end - -def _reduce_285(val, _values, result) - @lexer.cmdarg = val[1] - - result = @builder.begin(val[0], val[2], val[5]) - - result -end - -def _reduce_286(val, _values, result) - @lexer.state = :expr_endarg - - result -end - -def _reduce_287(val, _values, result) - result = @builder.begin(val[0], nil, val[3]) - - result -end - -def _reduce_288(val, _values, result) - result = @builder.begin(val[0], val[1], val[2]) - - result -end - -def _reduce_289(val, _values, result) - result = @builder.const_fetch(val[0], val[1], val[2]) - - result -end - -def _reduce_290(val, _values, result) - result = @builder.const_global(val[0], val[1]) - - result -end - -def _reduce_291(val, _values, result) - result = @builder.array(val[0], val[1], val[2]) - - result -end - -def _reduce_292(val, _values, result) - result = @builder.associate(val[0], val[1], val[2]) - - result -end - -def _reduce_293(val, _values, result) - result = @builder.keyword_cmd(:return, val[0]) - - result -end - -def _reduce_294(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_295(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0], val[1], [], val[2]) - - result -end - -def _reduce_296(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0]) - - result -end - -def _reduce_297(val, _values, result) - result = @builder.keyword_cmd(:defined?, val[0], - val[2], [ val[3] ], val[4]) - - result -end - -def _reduce_298(val, _values, result) - result = @builder.not_op(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_299(val, _values, result) - result = @builder.not_op(val[0], val[1], nil, val[2]) - - result -end - -def _reduce_300(val, _values, result) - method_call = @builder.call_method(nil, nil, val[0]) - - begin_t, args, body, end_t = val[1] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -# reduce 301 omitted - -def _reduce_302(val, _values, result) - begin_t, args, body, end_t = val[1] - result = @builder.block(val[0], - begin_t, args, body, end_t) - - result -end - -def _reduce_303(val, _values, result) - result = @context.dup - @context.in_lambda = true - - result -end - -def _reduce_304(val, _values, result) - lambda_call = @builder.call_lambda(val[0]) - - args, (begin_t, body, end_t) = val[2] - result = @builder.block(lambda_call, - begin_t, args, body, end_t) - - @context.in_lambda = val[1].in_lambda - - result -end - -def _reduce_305(val, _values, result) - else_t, else_ = val[4] - result = @builder.condition(val[0], val[1], val[2], - val[3], else_t, - else_, val[5]) - - result -end - -def _reduce_306(val, _values, result) - else_t, else_ = val[4] - result = @builder.condition(val[0], val[1], val[2], - else_, else_t, - val[3], val[5]) - - result -end - -def _reduce_307(val, _values, result) - @lexer.cond.push(true) - - result -end - -def _reduce_308(val, _values, result) - @lexer.cond.pop - - result -end - -def _reduce_309(val, _values, result) - result = @builder.loop(:while, val[0], val[2], val[3], - val[5], val[6]) - - result -end - -def _reduce_310(val, _values, result) - @lexer.cond.push(true) - - result -end - -def _reduce_311(val, _values, result) - @lexer.cond.pop - - result -end - -def _reduce_312(val, _values, result) - result = @builder.loop(:until, val[0], val[2], val[3], - val[5], val[6]) - - result -end - -def _reduce_313(val, _values, result) - *when_bodies, (else_t, else_body) = *val[3] - - result = @builder.case(val[0], val[1], - when_bodies, else_t, else_body, - val[4]) - - result -end - -def _reduce_314(val, _values, result) - *when_bodies, (else_t, else_body) = *val[2] - - result = @builder.case(val[0], nil, - when_bodies, else_t, else_body, - val[3]) - - result -end - -def _reduce_315(val, _values, result) - @lexer.cond.push(true) - - result -end - -def _reduce_316(val, _values, result) - @lexer.cond.pop - - result -end - -def _reduce_317(val, _values, result) - result = @builder.for(val[0], val[1], - val[2], val[4], - val[5], val[7], val[8]) - - result -end - -def _reduce_318(val, _values, result) - local_push - @context.in_class = true - - result -end - -def _reduce_319(val, _values, result) - k_class, ctx = val[0] - if @context.in_def - diagnostic :error, :class_in_def, nil, k_class - end - - lt_t, superclass = val[2] - result = @builder.def_class(k_class, val[1], - lt_t, superclass, - val[4], val[5]) - - local_pop - @context.in_class = ctx.in_class - - result -end - -def _reduce_320(val, _values, result) - @context.in_def = false - @context.in_class = false - local_push - - result -end - -def _reduce_321(val, _values, result) - k_class, ctx = val[0] - result = @builder.def_sclass(k_class, val[1], val[2], - val[5], val[6]) - - local_pop - @context.in_def = ctx.in_def - @context.in_class = ctx.in_class - - result -end - -def _reduce_322(val, _values, result) - @context.in_class = true - local_push - - result -end - -def _reduce_323(val, _values, result) - k_mod, ctx = val[0] - if @context.in_def - diagnostic :error, :module_in_def, nil, k_mod - end - - result = @builder.def_module(k_mod, val[1], - val[3], val[4]) - - local_pop - @context.in_class = ctx.in_class - - result -end - -def _reduce_324(val, _values, result) - local_push - result = context.dup - @context.in_def = true - - result -end - -def _reduce_325(val, _values, result) - result = @builder.def_method(val[0], val[1], - val[3], val[4], val[5]) - - local_pop - @context.in_def = val[2].in_def - - result -end - -def _reduce_326(val, _values, result) - @lexer.state = :expr_fname - - result -end - -def _reduce_327(val, _values, result) - local_push - result = context.dup - @context.in_def = true - - result -end - -def _reduce_328(val, _values, result) - result = @builder.def_singleton(val[0], val[1], val[2], - val[4], val[6], val[7], val[8]) - - local_pop - @context.in_def = val[5].in_def - - result -end - -def _reduce_329(val, _values, result) - result = @builder.keyword_cmd(:break, val[0]) - - result -end - -def _reduce_330(val, _values, result) - result = @builder.keyword_cmd(:next, val[0]) - - result -end - -def _reduce_331(val, _values, result) - result = @builder.keyword_cmd(:redo, val[0]) - - result -end - -def _reduce_332(val, _values, result) - result = @builder.keyword_cmd(:retry, val[0]) - - result -end - -# reduce 333 omitted - -def _reduce_334(val, _values, result) - result = [ val[0], @context.dup ] - - result -end - -def _reduce_335(val, _values, result) - result = [ val[0], @context.dup ] - - result -end - -# reduce 336 omitted - -# reduce 337 omitted - -def _reduce_338(val, _values, result) - result = val[1] - - result -end - -# reduce 339 omitted - -# reduce 340 omitted - -# reduce 341 omitted - -def _reduce_342(val, _values, result) - else_t, else_ = val[4] - result = [ val[0], - @builder.condition(val[0], val[1], val[2], - val[3], else_t, - else_, nil), - ] - - result -end - -# reduce 343 omitted - -def _reduce_344(val, _values, result) - result = val - - result -end - -# reduce 345 omitted - -# reduce 346 omitted - -def _reduce_347(val, _values, result) - result = @builder.arg(val[0]) - - result -end - -def _reduce_348(val, _values, result) - result = @builder.multi_lhs(val[0], val[1], val[2]) - - result -end - -def _reduce_349(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_350(val, _values, result) - result = val[0] << val[2] - - result -end - -# reduce 351 omitted - -def _reduce_352(val, _values, result) - result = val[0]. - push(@builder.restarg(val[2], val[3])) - - result -end - -def _reduce_353(val, _values, result) - result = val[0]. - push(@builder.restarg(val[2], val[3])). - concat(val[5]) - - result -end - -def _reduce_354(val, _values, result) - result = val[0]. - push(@builder.restarg(val[2])) - - result -end - -def _reduce_355(val, _values, result) - result = val[0]. - push(@builder.restarg(val[2])). - concat(val[4]) - - result -end - -def _reduce_356(val, _values, result) - result = [ @builder.restarg(val[0], val[1]) ] - - result -end - -def _reduce_357(val, _values, result) - result = [ @builder.restarg(val[0], val[1]), - *val[3] ] - - result -end - -def _reduce_358(val, _values, result) - result = [ @builder.restarg(val[0]) ] - - result -end - -def _reduce_359(val, _values, result) - result = [ @builder.restarg(val[0]), - *val[2] ] - - result -end - -def _reduce_360(val, _values, result) - result = val[0].concat(val[2]).concat(val[3]) - - result -end - -def _reduce_361(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_362(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_363(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_364(val, _values, result) - result = val[1] - - result -end - -def _reduce_365(val, _values, result) - result = [] - - result -end - -def _reduce_366(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_367(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[6]). - concat(val[7]) - - result -end - -def _reduce_368(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_369(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_370(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -# reduce 371 omitted - -def _reduce_372(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_373(val, _values, result) - if val[1].empty? && val[0].size == 1 - result = [@builder.procarg0(val[0][0])] - else - result = val[0].concat(val[1]) - end - - result -end - -def _reduce_374(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_375(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_376(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_377(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_378(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_379(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -# reduce 380 omitted - -def _reduce_381(val, _values, result) - result = @builder.args(nil, [], nil) - - result -end - -def _reduce_382(val, _values, result) - @lexer.state = :expr_value - - result -end - -def _reduce_383(val, _values, result) - result = @builder.args(val[0], val[1], val[2]) - - result -end - -def _reduce_384(val, _values, result) - result = @builder.args(val[0], [], val[0]) - - result -end - -def _reduce_385(val, _values, result) - result = @builder.args(val[0], val[1].concat(val[2]), val[3]) - - result -end - -def _reduce_386(val, _values, result) - result = [] - - result -end - -def _reduce_387(val, _values, result) - result = val[2] - - result -end - -def _reduce_388(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_389(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_390(val, _values, result) - @static_env.declare val[0][0] - result = @builder.shadowarg(val[0]) - - result -end - -# reduce 391 omitted - -def _reduce_392(val, _values, result) - @static_env.extend_dynamic - - result -end - -def _reduce_393(val, _values, result) - result = @lexer.cmdarg.dup - @lexer.cmdarg.clear - - result -end - -def _reduce_394(val, _values, result) - @lexer.cmdarg = val[2] - @lexer.cmdarg.lexpop - - result = [ val[1], val[3] ] - - @static_env.unextend - - result -end - -def _reduce_395(val, _values, result) - result = @builder.args(val[0], val[1].concat(val[2]), val[3]) - - result -end - -def _reduce_396(val, _values, result) - result = @builder.args(nil, val[0], nil) - - result -end - -def _reduce_397(val, _values, result) - result = @context.dup - @context.in_lambda = true - - result -end - -def _reduce_398(val, _values, result) - result = [ val[0], val[2], val[3] ] - @context.in_lambda = val[1].in_lambda - - result -end - -def _reduce_399(val, _values, result) - result = @context.dup - @context.in_lambda = true - - result -end - -def _reduce_400(val, _values, result) - result = [ val[0], val[2], val[3] ] - @context.in_lambda = val[1].in_lambda - - result -end - -def _reduce_401(val, _values, result) - @static_env.extend_dynamic - result = @context.dup - @context.in_block = true - - result -end - -def _reduce_402(val, _values, result) - result = [ val[0], val[2], val[3], val[4] ] - - @static_env.unextend - @context.in_block = val[1].in_block - - result -end - -def _reduce_403(val, _values, result) - begin_t, block_args, body, end_t = val[1] - result = @builder.block(val[0], - begin_t, block_args, body, end_t) - - result -end - -def _reduce_404(val, _values, result) - lparen_t, args, rparen_t = val[3] - result = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - result -end - -def _reduce_405(val, _values, result) - lparen_t, args, rparen_t = val[3] - method_call = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - begin_t, args, body, end_t = val[4] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_406(val, _values, result) - method_call = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - begin_t, args, body, end_t = val[4] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_407(val, _values, result) - lparen_t, args, rparen_t = val[1] - result = @builder.call_method(nil, nil, val[0], - lparen_t, args, rparen_t) - - result -end - -def _reduce_408(val, _values, result) - lparen_t, args, rparen_t = val[3] - result = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - result -end - -def _reduce_409(val, _values, result) - lparen_t, args, rparen_t = val[3] - result = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - result -end - -def _reduce_410(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2]) - - result -end - -def _reduce_411(val, _values, result) - lparen_t, args, rparen_t = val[2] - result = @builder.call_method(val[0], val[1], nil, - lparen_t, args, rparen_t) - - result -end - -def _reduce_412(val, _values, result) - lparen_t, args, rparen_t = val[2] - result = @builder.call_method(val[0], val[1], nil, - lparen_t, args, rparen_t) - - result -end - -def _reduce_413(val, _values, result) - lparen_t, args, rparen_t = val[1] - result = @builder.keyword_cmd(:super, val[0], - lparen_t, args, rparen_t) - - result -end - -def _reduce_414(val, _values, result) - result = @builder.keyword_cmd(:zsuper, val[0]) - - result -end - -def _reduce_415(val, _values, result) - result = @builder.index(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_416(val, _values, result) - @static_env.extend_dynamic - result = @context.dup - @context.in_block = true - - result -end - -def _reduce_417(val, _values, result) - result = [ val[0], val[2], val[3], val[4] ] - - @static_env.unextend - @context.in_block = val[1].in_block - - result -end - -def _reduce_418(val, _values, result) - @static_env.extend_dynamic - result = @context.dup - @context.in_block = true - - result -end - -def _reduce_419(val, _values, result) - result = [ val[0], val[2], val[3], val[4] ] - - @static_env.unextend - @context.in_block = val[1].in_block - - result -end - -def _reduce_420(val, _values, result) - result = [ @builder.when(val[0], val[1], val[2], val[3]), - *val[4] ] - - result -end - -def _reduce_421(val, _values, result) - result = [ val[0] ] - - result -end - -# reduce 422 omitted - -def _reduce_423(val, _values, result) - assoc_t, exc_var = val[2] - - if val[1] - exc_list = @builder.array(nil, val[1], nil) - end - - result = [ @builder.rescue_body(val[0], - exc_list, assoc_t, exc_var, - val[3], val[4]), - *val[5] ] - - result -end - -def _reduce_424(val, _values, result) - result = [] - - result -end - -def _reduce_425(val, _values, result) - result = [ val[0] ] - - result -end - -# reduce 426 omitted - -# reduce 427 omitted - -def _reduce_428(val, _values, result) - result = [ val[0], val[1] ] - - result -end - -# reduce 429 omitted - -def _reduce_430(val, _values, result) - result = [ val[0], val[1] ] - - result -end - -# reduce 431 omitted - -# reduce 432 omitted - -# reduce 433 omitted - -# reduce 434 omitted - -def _reduce_435(val, _values, result) - result = @builder.string_compose(nil, val[0], nil) - - result -end - -def _reduce_436(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_437(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_438(val, _values, result) - result = @builder.string_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_439(val, _values, result) - result = @builder.string(val[0]) - - result -end - -def _reduce_440(val, _values, result) - result = @builder.character(val[0]) - - result -end - -def _reduce_441(val, _values, result) - result = @builder.xstring_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_442(val, _values, result) - opts = @builder.regexp_options(val[3]) - result = @builder.regexp_compose(val[0], val[1], val[2], opts) - - result -end - -def _reduce_443(val, _values, result) - result = @builder.words_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_444(val, _values, result) - result = [] - - result -end - -def _reduce_445(val, _values, result) - result = val[0] << @builder.word(val[1]) - - result -end - -def _reduce_446(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_447(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_448(val, _values, result) - result = @builder.symbols_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_449(val, _values, result) - result = [] - - result -end - -def _reduce_450(val, _values, result) - result = val[0] << @builder.word(val[1]) - - result -end - -def _reduce_451(val, _values, result) - result = @builder.words_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_452(val, _values, result) - result = @builder.symbols_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_453(val, _values, result) - result = [] - - result -end - -def _reduce_454(val, _values, result) - result = val[0] << @builder.string_internal(val[1]) - - result -end - -def _reduce_455(val, _values, result) - result = [] - - result -end - -def _reduce_456(val, _values, result) - result = val[0] << @builder.symbol_internal(val[1]) - - result -end - -def _reduce_457(val, _values, result) - result = [] - - result -end - -def _reduce_458(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_459(val, _values, result) - result = [] - - result -end - -def _reduce_460(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_461(val, _values, result) - result = [] - - result -end - -def _reduce_462(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_463(val, _values, result) - result = @builder.string_internal(val[0]) - - result -end - -def _reduce_464(val, _values, result) - result = val[1] - - result -end - -def _reduce_465(val, _values, result) - @lexer.cond.push(false) - @lexer.cmdarg.push(false) - - result -end - -def _reduce_466(val, _values, result) - @lexer.cond.lexpop - @lexer.cmdarg.lexpop - - result = @builder.begin(val[0], val[2], val[3]) - - result -end - -def _reduce_467(val, _values, result) - result = @builder.gvar(val[0]) - - result -end - -def _reduce_468(val, _values, result) - result = @builder.ivar(val[0]) - - result -end - -def _reduce_469(val, _values, result) - result = @builder.cvar(val[0]) - - result -end - -# reduce 470 omitted - -def _reduce_471(val, _values, result) - result = @builder.symbol(val[0]) - - result -end - -def _reduce_472(val, _values, result) - result = @builder.symbol_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_473(val, _values, result) - result = val[0] - - result -end - -def _reduce_474(val, _values, result) - if @builder.respond_to? :negate - # AST builder interface compatibility - result = @builder.negate(val[0], val[1]) - else - result = @builder.unary_num(val[0], val[1]) - end - - result -end - -def _reduce_475(val, _values, result) - result = @builder.integer(val[0]) - - result -end - -def _reduce_476(val, _values, result) - result = @builder.float(val[0]) - - result -end - -def _reduce_477(val, _values, result) - result = @builder.rational(val[0]) - - result -end - -def _reduce_478(val, _values, result) - result = @builder.complex(val[0]) - - result -end - -def _reduce_479(val, _values, result) - result = @builder.ident(val[0]) - - result -end - -def _reduce_480(val, _values, result) - result = @builder.ivar(val[0]) - - result -end - -def _reduce_481(val, _values, result) - result = @builder.gvar(val[0]) - - result -end - -def _reduce_482(val, _values, result) - result = @builder.const(val[0]) - - result -end - -def _reduce_483(val, _values, result) - result = @builder.cvar(val[0]) - - result -end - -def _reduce_484(val, _values, result) - result = @builder.nil(val[0]) - - result -end - -def _reduce_485(val, _values, result) - result = @builder.self(val[0]) - - result -end - -def _reduce_486(val, _values, result) - result = @builder.true(val[0]) - - result -end - -def _reduce_487(val, _values, result) - result = @builder.false(val[0]) - - result -end - -def _reduce_488(val, _values, result) - result = @builder.__FILE__(val[0]) - - result -end - -def _reduce_489(val, _values, result) - result = @builder.__LINE__(val[0]) - - result -end - -def _reduce_490(val, _values, result) - result = @builder.__ENCODING__(val[0]) - - result -end - -def _reduce_491(val, _values, result) - result = @builder.accessible(val[0]) - - result -end - -def _reduce_492(val, _values, result) - result = @builder.accessible(val[0]) - - result -end - -def _reduce_493(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_494(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_495(val, _values, result) - result = @builder.nth_ref(val[0]) - - result -end - -def _reduce_496(val, _values, result) - result = @builder.back_ref(val[0]) - - result -end - -def _reduce_497(val, _values, result) - result = nil - - result -end - -def _reduce_498(val, _values, result) - @lexer.state = :expr_value - - result -end - -def _reduce_499(val, _values, result) - result = [ val[0], val[2] ] - - result -end - -def _reduce_500(val, _values, result) - yyerrok - result = nil - - result -end - -def _reduce_501(val, _values, result) - result = @builder.args(val[0], val[1], val[2]) - - @lexer.state = :expr_value - - result -end - -def _reduce_502(val, _values, result) - result = @context.in_kwarg - @context.in_kwarg = true - - result -end - -def _reduce_503(val, _values, result) - @context.in_kwarg = val[0] - result = @builder.args(nil, val[1], nil) - - result -end - -def _reduce_504(val, _values, result) - result = val[0].concat(val[2]).concat(val[3]) - - result -end - -def _reduce_505(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_506(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_507(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_508(val, _values, result) - result = val[1] - - result -end - -def _reduce_509(val, _values, result) - result = [] - - result -end - -def _reduce_510(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_511(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[6]). - concat(val[7]) - - result -end - -def _reduce_512(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_513(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_514(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_515(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_516(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_517(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_518(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_519(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_520(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_521(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_522(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_523(val, _values, result) - result = val[0] - - result -end - -def _reduce_524(val, _values, result) - result = [] - - result -end - -def _reduce_525(val, _values, result) - diagnostic :error, :argument_const, nil, val[0] - - result -end - -def _reduce_526(val, _values, result) - diagnostic :error, :argument_ivar, nil, val[0] - - result -end - -def _reduce_527(val, _values, result) - diagnostic :error, :argument_gvar, nil, val[0] - - result -end - -def _reduce_528(val, _values, result) - diagnostic :error, :argument_cvar, nil, val[0] - - result -end - -# reduce 529 omitted - -def _reduce_530(val, _values, result) - @static_env.declare val[0][0] - - result = val[0] - - result -end - -def _reduce_531(val, _values, result) - result = val[0] - - result -end - -def _reduce_532(val, _values, result) - result = @builder.arg(val[0]) - - result -end - -def _reduce_533(val, _values, result) - result = @builder.multi_lhs(val[0], val[1], val[2]) - - result -end - -def _reduce_534(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_535(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_536(val, _values, result) - check_kwarg_name(val[0]) - - @static_env.declare val[0][0] - - result = val[0] - - result -end - -def _reduce_537(val, _values, result) - result = @builder.kwoptarg(val[0], val[1]) - - result -end - -def _reduce_538(val, _values, result) - result = @builder.kwarg(val[0]) - - result -end - -def _reduce_539(val, _values, result) - result = @builder.kwoptarg(val[0], val[1]) - - result -end - -def _reduce_540(val, _values, result) - result = @builder.kwarg(val[0]) - - result -end - -def _reduce_541(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_542(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_543(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_544(val, _values, result) - result = val[0] << val[2] - - result -end - -# reduce 545 omitted - -# reduce 546 omitted - -def _reduce_547(val, _values, result) - @static_env.declare val[1][0] - - result = [ @builder.kwrestarg(val[0], val[1]) ] - - result -end - -def _reduce_548(val, _values, result) - result = [ @builder.kwrestarg(val[0]) ] - - result -end - -def _reduce_549(val, _values, result) - result = @builder.optarg(val[0], val[1], val[2]) - - result -end - -def _reduce_550(val, _values, result) - result = @builder.optarg(val[0], val[1], val[2]) - - result -end - -def _reduce_551(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_552(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_553(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_554(val, _values, result) - result = val[0] << val[2] - - result -end - -# reduce 555 omitted - -# reduce 556 omitted - -def _reduce_557(val, _values, result) - @static_env.declare val[1][0] - - result = [ @builder.restarg(val[0], val[1]) ] - - result -end - -def _reduce_558(val, _values, result) - result = [ @builder.restarg(val[0]) ] - - result -end - -# reduce 559 omitted - -# reduce 560 omitted - -def _reduce_561(val, _values, result) - @static_env.declare val[1][0] - - result = @builder.blockarg(val[0], val[1]) - - result -end - -def _reduce_562(val, _values, result) - result = [ val[1] ] - - result -end - -def _reduce_563(val, _values, result) - result = [] - - result -end - -# reduce 564 omitted - -def _reduce_565(val, _values, result) - result = val[1] - - result -end - -def _reduce_566(val, _values, result) - result = [] - - result -end - -# reduce 567 omitted - -def _reduce_568(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_569(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_570(val, _values, result) - result = @builder.pair(val[0], val[1], val[2]) - - result -end - -def _reduce_571(val, _values, result) - result = @builder.pair_keyword(val[0], val[1]) - - result -end - -def _reduce_572(val, _values, result) - result = @builder.pair_quoted(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_573(val, _values, result) - result = @builder.kwsplat(val[0], val[1]) - - result -end - -# reduce 574 omitted - -# reduce 575 omitted - -# reduce 576 omitted - -# reduce 577 omitted - -# reduce 578 omitted - -# reduce 579 omitted - -# reduce 580 omitted - -# reduce 581 omitted - -# reduce 582 omitted - -# reduce 583 omitted - -# reduce 584 omitted - -# reduce 585 omitted - -# reduce 586 omitted - -# reduce 587 omitted - -# reduce 588 omitted - -# reduce 589 omitted - -def _reduce_590(val, _values, result) - result = val[1] - - result -end - -def _reduce_591(val, _values, result) - result = val[1] - - result -end - -# reduce 592 omitted - -# reduce 593 omitted - -# reduce 594 omitted - -def _reduce_595(val, _values, result) - yyerrok - - result -end - -# reduce 596 omitted - -# reduce 597 omitted - -# reduce 598 omitted - -def _reduce_599(val, _values, result) - result = nil - - result -end - -def _reduce_none(val, _values, result) - val[0] -end - - end # class Ruby22 -end # module Parser diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ruby23.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ruby23.rb deleted file mode 100644 index 6c07e1b6..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ruby23.rb +++ /dev/null @@ -1,10322 +0,0 @@ -# -*- encoding:utf-8; warn-indent:false; frozen_string_literal: true -*- -# -# DO NOT MODIFY!!!! -# This file is automatically generated by Racc 1.7.3 -# from Racc grammar file "ruby23.y". -# - -require 'racc/parser.rb' - - -require 'parser' - -module Parser - class Ruby23 < Parser::Base - - - def version - 23 - end - - def default_encoding - Encoding::UTF_8 - end - - def local_push - @static_env.extend_static - @lexer.cmdarg.push(false) - @lexer.cond.push(false) - end - - def local_pop - @static_env.unextend - @lexer.cmdarg.pop - @lexer.cond.pop - end -##### State transition tables begin ### - -racc_action_table = [ - -479, 218, 219, 218, 219, 216, -97, -479, -479, -479, - -286, 540, -479, -479, -479, 214, -479, 272, 221, 580, - 617, 617, 265, 540, -479, 582, -479, -479, -479, 272, - 552, 272, -493, 111, 553, -98, -479, -479, 540, -479, - -479, -479, -479, -479, 540, 540, -97, -98, -105, -105, - -286, -104, -96, -83, -104, 616, 616, 530, 272, 222, - 529, 123, -105, -69, 617, -100, -479, -479, -479, -479, - -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, - 215, 267, -479, -479, -479, 579, -479, -479, 695, -97, - -479, 581, -102, -479, -479, 222, -479, 222, -479, 616, - -479, 208, -479, -479, 271, -479, -479, -479, -479, -479, - -100, -479, -482, -479, -102, -88, 271, 871, 271, -482, - -482, -482, 267, -101, -482, -482, -482, -479, -482, 115, - -479, -479, -479, -479, 114, -479, -482, -479, -482, -482, - -482, 115, -479, -479, -89, 271, 114, -91, -482, -482, - -103, -482, -482, -482, -482, -482, 115, -99, -96, 822, - -95, 114, 115, 115, -97, -98, -105, 114, 114, -97, - -98, -105, -104, 695, -91, -101, -99, -104, -482, -482, - -482, -482, -482, -482, -482, -482, -482, -482, -482, -482, - -482, -482, 115, 209, -482, -482, -482, 114, -482, -482, - -576, -93, -482, 210, -93, -482, -482, 695, -482, -103, - -482, 115, -482, -91, -482, -482, 114, -482, -482, -482, - -482, -482, -289, -482, -494, -482, 870, -577, -100, -289, - -289, -289, -102, -100, 617, -289, -289, -102, -289, -482, - -576, -101, -482, -482, -482, -482, -101, -482, 217, -482, - 218, 219, 447, -91, -482, -482, -91, 261, -289, -289, - -90, -289, -289, -289, -289, -289, -91, 320, -103, 616, - -93, -479, -92, -103, -577, -99, 530, 115, -479, 532, - -99, -98, 114, 518, -92, -90, 218, 219, -289, -289, - -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, - -289, -289, 321, 749, -289, -289, -289, -482, 600, -105, - -93, 115, -289, -93, -482, -289, 114, 785, -94, 546, - -289, 222, -289, -93, -289, -289, -90, -289, -289, -289, - -289, -289, 567, -289, -580, -289, -479, -576, -92, 81, - -104, -580, -580, -580, 222, 218, 219, -580, -580, -289, - -580, 82, -289, -289, 389, -94, 402, -289, 115, -580, - -100, 83, 446, 114, -289, -103, -90, -573, -493, -90, - -580, -580, -482, -580, -580, -580, -580, -580, -92, -90, - 115, -92, 218, 219, 448, 114, 672, 750, 669, 668, - 667, -92, 670, 93, 94, 449, 569, 568, 565, 221, - -580, -580, -580, -580, -580, -580, -580, -580, -580, -580, - -580, -580, -580, -580, 480, -88, -580, -580, -580, -479, - 601, 93, 94, 567, -580, -97, -479, -580, 115, 840, - 489, -573, -580, 114, -580, -479, -580, -580, -494, -580, - -580, -580, -580, -580, -102, -580, -580, -580, 567, 672, - 567, 669, 668, 667, -573, 670, -489, 115, 491, -574, - 493, -580, 114, -489, -580, -580, -580, -92, 889, -580, - 501, 95, 96, -580, -580, -580, -580, -101, -580, -580, - -580, -68, -580, 222, -479, -89, -99, 569, 568, 565, - -488, -580, -580, -580, -580, -98, 115, -488, 504, 95, - 96, 114, -580, -580, 632, -580, -580, -580, -580, -580, - 505, -482, 569, 568, 569, 568, 567, 530, -482, 567, - 532, -489, 726, -574, 728, 567, 530, -482, 512, 532, - 276, 986, -580, -580, -580, -580, -580, -580, -580, -580, - -580, -580, -580, -580, -580, -580, -574, 222, -580, -580, - -580, 222, 751, -580, 971, -488, -580, 567, 518, -580, - -580, 567, -580, -490, -580, 267, -580, 595, -580, -580, - -490, -580, -580, -580, -580, -580, -482, -580, -580, -580, - 569, 568, 570, 569, 568, 572, 515, -487, 519, 569, - 568, 574, 242, -580, -487, 222, -580, -580, -580, -580, - 533, -580, 534, -580, -289, -95, 218, 219, -580, -101, - 493, -289, -289, -289, -91, -104, -289, -289, -289, 546, - -289, 569, 568, 578, -100, 569, 568, 583, -490, 399, - -289, -289, -289, 391, 401, 400, 817, 785, 596, 550, - -289, -289, 551, -289, -289, -289, -289, -289, 559, 214, - 584, -333, -487, 214, -484, -485, 213, 587, -333, -486, - 444, -484, -485, 688, 687, 211, -486, -333, -261, 445, - -289, -289, -289, -289, -289, -289, -289, -289, -289, -289, - -289, -289, -289, -289, 589, -93, -289, -289, -289, 242, - 752, -289, -491, 222, -289, -102, 214, -289, -289, -491, - -289, 593, -289, 265, -289, 735, -289, -289, -491, -289, - -289, -289, -289, -289, 215, -289, -333, -289, 215, -484, - -485, 239, -492, 594, -486, 241, 240, 267, 242, -492, - 604, -289, 817, 785, -289, -289, -289, -289, -492, -289, - 607, -289, -414, 242, 242, 242, -289, -103, 242, -414, - -414, -414, -90, 677, -414, -414, -414, -491, -414, 222, - 239, 215, -99, 680, 241, 240, 222, -414, -414, -414, - 720, 721, 222, -83, 722, 109, 110, 636, -414, -414, - 222, -414, -414, -414, -414, -414, 672, -492, 669, 668, - 667, 214, 670, 523, 647, 652, 688, 687, 511, 653, - 672, 681, 669, 668, 667, 655, 670, 509, -414, -414, - -414, -414, -414, -414, -414, -414, -414, -414, -414, -414, - -414, -414, 691, 806, -414, -414, -414, 546, 698, -414, - 715, 267, -414, 725, 729, -414, -414, 806, -414, 730, - -414, -262, -414, 736, -414, -414, 809, -414, -414, -414, - -414, -414, -296, -414, -414, -414, 215, 480, 480, -296, - -296, -296, 222, 754, -296, -296, -296, -279, -296, -414, - 261, 491, -414, -414, -279, -414, 493, -414, -296, -296, - 778, 647, 222, -279, -414, 267, 267, 647, -296, -296, - 242, -296, -296, -296, -296, -296, 785, 222, 794, 214, - 797, 214, 798, 800, 802, 804, 521, 672, 549, 669, - 668, 667, 812, 670, 813, 445, 814, 547, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -279, 785, -296, -296, -296, 821, 222, -296, - 222, 276, -296, 830, 806, -296, -296, -263, -296, 839, - -296, 842, -296, 809, -296, -296, 797, -296, -296, -296, - -296, -296, -280, -296, 215, -296, 215, 845, 847, -280, - -280, -280, 849, 851, -280, -280, -280, 214, -280, -296, - 222, 853, -296, -296, 555, -296, 854, -296, -280, -280, - -280, 857, 859, 557, -296, 860, 647, 862, -280, -280, - -261, -280, -280, -280, -280, -280, 866, -290, 868, -290, - 222, 214, 887, 222, -290, 891, -290, 893, 922, 899, - 902, 222, 906, -290, -264, -290, 916, 557, -280, -280, - -280, -280, -280, -280, -280, -280, -280, -280, -280, -280, - -280, -280, 215, 214, -280, -280, -280, 923, 924, -280, - 922, 935, -280, 797, 937, -280, -280, 939, -280, 557, - -280, 941, -280, 943, -280, -280, 943, -280, -280, -280, - -280, -280, -290, -280, -290, -280, 215, 222, 677, 672, - 214, 669, 668, 667, 949, 670, 952, 977, 680, -280, - 953, -580, -280, -280, -280, -280, 975, -280, -244, -280, - 958, 715, 797, 961, -280, -244, -244, -244, 215, 963, - -244, -244, -244, 965, -244, 967, 806, 242, 967, 978, - 988, 688, 687, -244, -244, -244, 681, 919, -577, 669, - 668, 667, -576, 670, -244, -244, 652, -244, -244, -244, - -244, -244, 1003, -580, 1004, 215, 1005, 943, 943, 239, - -580, 943, 1010, 241, 240, -576, 237, 238, 988, -580, - 1013, 1014, 1015, 967, -244, -244, -244, -244, -244, -244, - -244, -244, -244, -244, -244, -244, -244, -244, -580, 967, - -244, -244, -244, -289, 967, -244, 222, 267, -244, 988, - -289, -244, -244, 943, -244, -577, -244, 988, -244, -289, - -244, -244, 967, -244, -244, -244, -244, -244, -580, -244, - -244, -244, nil, 672, nil, 669, 668, 667, nil, 670, - -289, nil, nil, nil, nil, -244, nil, -289, -244, -244, - -581, -244, -577, -244, nil, nil, -289, -581, -581, -581, - -244, nil, -581, -581, -581, nil, -581, 242, -289, nil, - 806, nil, nil, nil, nil, -581, -581, -581, -581, 948, - nil, nil, nil, 256, 257, nil, -581, -581, nil, -581, - -581, -581, -581, -581, 672, nil, 669, 668, 667, 239, - 670, 245, nil, 241, 240, -289, 237, 238, nil, nil, - 243, nil, 244, nil, nil, nil, -581, -581, -581, -581, - -581, -581, -581, -581, -581, -581, -581, -581, -581, -581, - nil, 806, -581, -581, -581, 242, nil, -581, nil, nil, - -581, nil, nil, -581, -581, nil, -581, nil, -581, nil, - -581, nil, -581, -581, nil, -581, -581, -581, -581, -581, - nil, -581, -581, -581, nil, nil, nil, 239, nil, nil, - nil, 241, 240, nil, 237, 238, nil, -581, nil, nil, - -581, -581, -581, -581, nil, -581, -582, -581, nil, nil, - nil, nil, -581, -582, -582, -582, nil, nil, -582, -582, - -582, 242, -582, 919, nil, 669, 668, 667, nil, 670, - nil, -582, -582, -582, -582, nil, nil, 256, 257, nil, - nil, nil, -582, -582, nil, -582, -582, -582, -582, -582, - nil, nil, nil, 239, nil, 245, nil, 241, 240, nil, - 237, 238, nil, nil, 243, nil, 244, 118, 119, 120, - 121, 122, -582, -582, -582, -582, -582, -582, -582, -582, - -582, -582, -582, -582, -582, -582, nil, nil, -582, -582, - -582, nil, nil, -582, nil, nil, -582, nil, nil, -582, - -582, nil, -582, nil, -582, nil, -582, nil, -582, -582, - nil, -582, -582, -582, -582, -582, nil, -582, -582, -582, - 118, 119, 120, 121, 122, nil, nil, nil, 672, nil, - 669, 668, 667, -582, 670, nil, -582, -582, -582, -582, - nil, -582, -244, -582, nil, nil, nil, nil, -582, -244, - -244, -244, nil, nil, -244, -244, -244, 672, -244, 669, - 668, 667, 677, 670, nil, 806, nil, -244, -244, nil, - nil, nil, 680, nil, nil, nil, 242, nil, -244, -244, - nil, -244, -244, -244, -244, -244, 118, 119, 120, 121, - 122, nil, 256, 257, 675, nil, 672, nil, 669, 668, - 667, 677, 670, 685, 684, 688, 687, nil, 239, nil, - 681, 680, 241, 240, nil, 237, 238, nil, nil, -244, - nil, nil, nil, nil, 242, nil, -244, nil, nil, nil, - nil, 267, -244, 675, 658, nil, 222, nil, nil, nil, - 256, 257, 685, 684, 688, 687, nil, nil, nil, 681, - nil, nil, nil, nil, -244, -244, 239, nil, 245, nil, - 241, 240, nil, 237, 238, nil, nil, nil, nil, -244, - nil, nil, -244, nil, nil, nil, nil, -244, 5, 74, - 75, 71, 9, 57, -244, nil, nil, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 19, nil, nil, nil, nil, - 605, 8, 45, 7, 10, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, 242, 246, 251, 252, 253, 248, 250, - 258, 259, 254, 255, nil, 235, 236, nil, nil, 256, - 257, nil, 40, nil, nil, 33, nil, nil, 58, 59, - nil, nil, 60, nil, 35, 239, nil, 245, 44, 241, - 240, nil, 237, 238, 249, 247, 243, 20, 244, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, 260, nil, - -238, nil, nil, 62, nil, 83, 95, 96, 294, 74, - 75, 71, 9, 57, nil, nil, nil, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 19, nil, nil, nil, nil, - 590, 8, 45, 296, 10, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, 242, 246, 251, 252, 253, 248, 250, - 258, 259, 254, 255, nil, 235, 236, nil, nil, 256, - 257, nil, 40, nil, nil, 298, nil, nil, 58, 59, - nil, nil, 60, nil, 35, 239, nil, 245, 44, 241, - 240, nil, 237, 238, 249, 247, 243, 20, 244, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, 260, nil, - nil, nil, nil, 62, nil, 83, 95, 96, 5, 74, - 75, 71, 9, 57, nil, nil, nil, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 19, nil, nil, nil, nil, - 605, 8, 45, 7, 10, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, 242, 246, 251, 252, 253, 248, 250, - 258, 259, 254, 255, nil, 235, 236, nil, nil, 256, - 257, nil, 40, nil, nil, 33, nil, nil, 58, 59, - nil, nil, 60, nil, 35, 239, nil, 245, 44, 241, - 240, nil, 237, 238, 249, 247, 243, 20, 244, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, 260, nil, - nil, nil, nil, 62, nil, 83, 95, 96, 294, 74, - 75, 71, 9, 57, nil, nil, nil, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 19, nil, nil, nil, nil, - nil, 8, 45, 296, 10, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, 242, 246, 251, 252, 253, 248, 250, - 258, 259, 254, 255, nil, 235, 236, nil, nil, 256, - 257, nil, 40, nil, nil, 33, nil, nil, 58, 59, - nil, nil, 60, nil, 35, 239, nil, 245, 44, 241, - 240, nil, 237, 238, 249, 247, 243, 20, 244, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, 260, nil, - nil, nil, nil, 62, nil, 83, 95, 96, 294, 74, - 75, 71, 9, 57, nil, nil, nil, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 19, nil, nil, nil, nil, - nil, 8, 45, 296, 10, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, 242, 246, 251, 252, 253, 248, 250, - 258, 259, 254, 255, nil, 235, 236, nil, nil, 256, - 257, nil, 40, nil, nil, 33, nil, nil, 58, 59, - nil, nil, 60, nil, 35, 239, nil, 245, 44, 241, - 240, nil, 237, 238, 249, 247, 243, 20, 244, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, 260, nil, - nil, nil, nil, 62, nil, 83, 95, 96, 294, 74, - 75, 71, 9, 57, nil, nil, nil, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 19, nil, nil, nil, nil, - nil, 8, 45, 296, 10, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, 242, 246, 251, 252, 253, 248, 250, - 258, 259, 254, 255, nil, 235, 236, nil, nil, 256, - 257, nil, 40, nil, nil, 298, nil, nil, 58, 59, - nil, nil, 60, nil, 35, 239, nil, 245, 44, 241, - 240, nil, 237, 238, 249, 247, 243, 20, 244, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, 260, nil, - nil, nil, nil, 62, nil, 83, 95, 96, 294, 74, - 75, 71, 9, 57, nil, nil, nil, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 19, nil, nil, nil, nil, - nil, 8, 45, 296, 10, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, 242, 246, 251, 252, 253, 248, 250, - 258, 259, 254, 255, nil, 235, 236, nil, nil, 256, - 257, nil, 40, nil, nil, 298, nil, nil, 58, 59, - nil, nil, 60, nil, 35, 239, nil, 245, 44, 241, - 240, nil, 237, 238, 249, 247, 243, 20, 244, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, 222, 260, nil, - nil, nil, nil, 62, nil, 83, 95, 96, 294, 74, - 75, 71, 9, 57, nil, nil, nil, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 19, nil, nil, nil, nil, - nil, 8, 45, 296, 10, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, 242, 246, 251, 252, 253, 248, 250, - 258, 259, 254, 255, nil, 235, 236, nil, nil, 256, - 257, nil, 40, nil, nil, 33, nil, nil, 58, 59, - nil, nil, 60, nil, 35, 239, nil, 245, 44, 241, - 240, nil, 237, 238, 249, 247, 243, 20, 244, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, 260, nil, - nil, nil, nil, 62, nil, 83, 95, 96, 5, 74, - 75, 71, 9, 57, nil, nil, nil, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 19, nil, nil, nil, nil, - nil, 8, 45, 7, 10, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, 242, 246, 251, 252, 253, 248, 250, - 258, 259, 254, 255, nil, 235, 236, nil, nil, 256, - 257, nil, 40, nil, nil, 33, nil, nil, 58, 59, - nil, nil, 60, nil, 35, 239, nil, 245, 44, 241, - 240, nil, 237, 238, 249, 247, 243, 20, 244, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, 260, nil, - nil, nil, nil, 62, nil, 83, 95, 96, 294, 74, - 75, 71, 9, 57, nil, nil, nil, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 19, nil, nil, nil, nil, - nil, 8, 45, 296, 10, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, 242, 246, 251, 252, 253, 248, 250, - 258, 259, 254, 255, nil, 235, 236, nil, nil, 256, - 257, nil, 40, nil, nil, 33, nil, nil, 58, 59, - nil, nil, 60, nil, 35, 239, nil, 245, 44, 241, - 240, nil, 237, 238, 249, 247, 243, 20, 244, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, 260, nil, - nil, nil, nil, 62, nil, 83, 95, 96, 294, 74, - 75, 71, 9, 57, nil, nil, nil, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 19, nil, nil, nil, nil, - nil, 8, 45, 296, 10, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, 242, 246, 251, 252, 253, 248, 250, - 258, 259, 254, 255, nil, 235, 236, nil, nil, 256, - 257, nil, 40, nil, nil, 33, nil, nil, 58, 59, - nil, nil, 60, nil, 35, 239, nil, 245, 44, 241, - 240, nil, 237, 238, 249, 247, 243, 20, 244, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, 260, nil, - nil, nil, nil, 62, nil, 83, 95, 96, 294, 74, - 75, 71, 9, 57, nil, nil, nil, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 19, nil, nil, nil, nil, - nil, 8, 45, 296, 10, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, 242, 246, 251, 252, 253, 248, 250, - 258, 259, 254, 255, nil, 235, 236, nil, nil, 256, - 257, nil, 40, nil, nil, 33, nil, nil, 58, 59, - nil, nil, 60, nil, 35, 239, nil, 245, 44, 241, - 240, nil, 237, 238, 249, 247, 243, 20, 244, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, 260, nil, - nil, nil, nil, 62, nil, 83, 95, 96, 294, 74, - 75, 71, 9, 57, nil, nil, nil, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 19, nil, nil, nil, nil, - nil, 8, 45, 296, 10, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, 242, 246, 251, 252, 253, 248, 250, - 258, 259, 254, 255, nil, 235, 236, nil, nil, 256, - 257, nil, 40, nil, nil, 33, nil, nil, 58, 59, - nil, nil, 60, nil, 35, 239, nil, 245, 44, 241, - 240, nil, 237, 238, 249, 247, 243, 20, 244, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, 260, nil, - nil, nil, nil, 62, nil, 83, 95, 96, 294, 74, - 75, 71, 9, 57, nil, nil, nil, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 19, nil, nil, nil, nil, - nil, 8, 45, 296, 10, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, 242, 246, 251, 252, 253, 248, 250, - 258, 259, 254, 255, nil, 235, 236, nil, nil, 256, - 257, nil, 40, nil, nil, 33, nil, nil, 58, 59, - nil, nil, 60, nil, 35, 239, nil, 245, 44, 241, - 240, nil, 237, 238, 249, 247, 243, 20, 244, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, 260, nil, - nil, nil, nil, 62, nil, 83, 95, 96, 294, 74, - 75, 71, 9, 57, nil, nil, nil, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 19, nil, nil, nil, nil, - nil, 8, 45, 296, 10, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, 242, 246, 251, 252, 253, 248, 250, - 258, 259, 254, 255, nil, 235, 236, nil, nil, 256, - 257, nil, 40, nil, nil, 33, nil, nil, 58, 59, - nil, nil, 60, nil, 35, 239, nil, 245, 44, 241, - 240, nil, 237, 238, 249, 247, 243, 20, 244, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, 260, nil, - nil, nil, nil, 62, nil, 83, 95, 96, 294, 74, - 75, 71, 9, 57, nil, nil, nil, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 19, nil, nil, nil, nil, - nil, 8, 45, 296, 10, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, 242, 246, 251, 252, 253, 248, 250, - 258, 259, 254, 255, nil, 235, 236, nil, nil, 256, - 257, nil, 40, nil, nil, 33, nil, nil, 58, 59, - nil, nil, 60, nil, 35, 239, nil, 245, 44, 241, - 240, nil, 237, 238, 249, 247, 243, 20, 244, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, 260, nil, - nil, nil, nil, 62, nil, 83, 95, 96, 294, 74, - 75, 71, 9, 57, nil, nil, nil, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 19, nil, nil, nil, nil, - nil, 8, 45, 296, 10, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, 242, 246, 251, 252, 253, 248, 250, - 258, 259, 254, 255, nil, 235, 236, nil, nil, 256, - 257, nil, 40, nil, nil, 33, nil, nil, 58, 59, - nil, nil, 60, nil, 35, 239, nil, 245, 44, 241, - 240, nil, 237, 238, 249, 247, 243, 20, 244, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, 260, nil, - nil, nil, nil, 62, nil, 83, 95, 96, 294, 74, - 75, 71, 9, 57, nil, nil, nil, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 19, nil, nil, nil, nil, - nil, 8, 45, 296, 10, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, 242, 246, 251, 252, 253, 248, 250, - 258, 259, 254, 255, nil, -601, -601, nil, nil, 256, - 257, nil, 40, nil, nil, 33, nil, nil, 58, 59, - nil, nil, 60, nil, 35, 239, nil, 245, 44, 241, - 240, nil, 237, 238, 249, 247, 243, 20, 244, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, 672, nil, - 669, 668, 667, 62, 670, 83, 95, 96, 294, 74, - 75, 71, 9, 57, nil, nil, nil, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, 806, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 19, nil, nil, nil, nil, - nil, 8, 45, 296, 10, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, 242, 246, 251, 252, 253, 248, 250, - 258, 259, 254, 255, nil, -601, -601, nil, nil, 256, - 257, nil, 40, nil, nil, 33, nil, nil, 58, 59, - nil, nil, 60, nil, 35, 239, nil, 245, 44, 241, - 240, nil, 237, 238, 249, 247, 243, 20, 244, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - nil, nil, nil, 62, nil, 83, 95, 96, 294, 74, - 75, 71, 9, 57, nil, nil, nil, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 19, nil, nil, nil, nil, - nil, 8, 45, 296, 10, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, 242, -601, -601, -601, -601, 248, 250, - nil, nil, -601, -601, nil, nil, nil, nil, nil, 256, - 257, nil, 40, nil, nil, 33, nil, nil, 58, 59, - nil, nil, 60, nil, 35, 239, nil, 245, 44, 241, - 240, nil, 237, 238, 249, 247, 243, 20, 244, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - nil, nil, nil, 62, nil, 83, 95, 96, 294, 74, - 75, 71, 9, 57, nil, nil, nil, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 19, nil, nil, nil, nil, - nil, 8, 45, 296, 10, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, 242, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 256, - 257, nil, 40, nil, nil, 33, nil, nil, 58, 59, - nil, nil, 60, nil, 35, 239, nil, 245, 44, 241, - 240, nil, 237, 238, nil, nil, 243, 20, 244, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - nil, nil, nil, 62, nil, 83, 95, 96, 294, 74, - 75, 71, 9, 57, nil, nil, nil, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 19, nil, nil, nil, nil, - nil, 8, 45, 296, 10, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, 242, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 256, - 257, nil, 40, nil, nil, 33, nil, nil, 58, 59, - nil, nil, 60, nil, 35, 239, nil, 245, 44, 241, - 240, nil, 237, 238, nil, nil, 243, 20, 244, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - nil, nil, nil, 62, nil, 83, 95, 96, 294, 74, - 75, 71, 9, 57, nil, nil, nil, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 19, nil, nil, nil, nil, - nil, 8, 45, 296, 10, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, 242, -601, -601, -601, -601, 248, 250, - nil, nil, -601, -601, nil, nil, nil, nil, nil, 256, - 257, nil, 40, nil, nil, 33, nil, nil, 58, 59, - nil, nil, 60, nil, 35, 239, nil, 245, 44, 241, - 240, nil, 237, 238, 249, 247, 243, 20, 244, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - nil, nil, nil, 62, nil, 83, 95, 96, 294, 74, - 75, 71, 9, 57, nil, nil, nil, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 19, nil, nil, nil, nil, - nil, 8, 45, 296, 10, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, 242, -601, -601, -601, -601, 248, 250, - nil, nil, -601, -601, nil, nil, nil, nil, nil, 256, - 257, nil, 40, nil, nil, 33, nil, nil, 58, 59, - nil, nil, 60, nil, 35, 239, nil, 245, 44, 241, - 240, nil, 237, 238, 249, 247, 243, 20, 244, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - nil, nil, nil, 62, nil, 83, 95, 96, 294, 74, - 75, 71, 9, 57, nil, nil, nil, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 19, nil, nil, nil, nil, - nil, 8, 45, 296, 10, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, 242, -601, -601, -601, -601, 248, 250, - nil, nil, -601, -601, nil, nil, nil, nil, nil, 256, - 257, nil, 40, nil, nil, 33, nil, nil, 58, 59, - nil, nil, 60, nil, 35, 239, nil, 245, 44, 241, - 240, nil, 237, 238, 249, 247, 243, 20, 244, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - nil, nil, nil, 62, nil, 83, 95, 96, 294, 74, - 75, 71, 9, 57, nil, nil, nil, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 19, nil, nil, nil, nil, - nil, 8, 45, 296, 10, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, 242, -601, -601, -601, -601, 248, 250, - nil, nil, -601, -601, nil, nil, nil, nil, nil, 256, - 257, nil, 40, nil, nil, 33, nil, nil, 58, 59, - nil, nil, 60, nil, 35, 239, nil, 245, 44, 241, - 240, nil, 237, 238, 249, 247, 243, 20, 244, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - nil, nil, nil, 62, nil, 83, 95, 96, 294, 74, - 75, 71, 9, 57, nil, nil, nil, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 19, nil, nil, nil, nil, - nil, 8, 45, 296, 10, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, 242, -601, -601, -601, -601, 248, 250, - nil, nil, -601, -601, nil, nil, nil, nil, nil, 256, - 257, nil, 40, nil, nil, 33, nil, nil, 58, 59, - nil, nil, 60, nil, 35, 239, nil, 245, 44, 241, - 240, nil, 237, 238, 249, 247, 243, 20, 244, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - nil, nil, nil, 62, nil, 83, 95, 96, 294, 74, - 75, 71, 9, 57, nil, nil, nil, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 19, nil, nil, nil, nil, - nil, 8, 45, 296, 10, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, 242, 246, 251, 252, 253, 248, 250, - nil, nil, 254, 255, nil, nil, nil, nil, nil, 256, - 257, nil, 40, nil, nil, 33, nil, nil, 58, 59, - nil, nil, 60, nil, 35, 239, nil, 245, 44, 241, - 240, nil, 237, 238, 249, 247, 243, 20, 244, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - nil, nil, nil, 62, nil, 83, 95, 96, 294, 74, - 75, 71, 9, 57, nil, nil, nil, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 19, nil, nil, nil, nil, - nil, 8, 45, 296, 10, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, 242, 246, 251, 252, 253, 248, 250, - 258, nil, 254, 255, nil, nil, nil, nil, nil, 256, - 257, nil, 40, nil, nil, 33, nil, nil, 58, 59, - nil, nil, 60, nil, 35, 239, nil, 245, 44, 241, - 240, nil, 237, 238, 249, 247, 243, 20, 244, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - nil, nil, nil, 62, nil, 83, 95, 96, 294, 74, - 75, 71, 9, 57, nil, nil, nil, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 19, nil, nil, nil, nil, - nil, 8, 45, 296, 10, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, 242, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 256, - 257, nil, 40, nil, nil, 33, nil, nil, 58, 59, - nil, nil, 60, nil, 35, 239, nil, 245, 44, 241, - 240, nil, 237, 238, nil, nil, nil, 20, nil, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - nil, nil, nil, 62, nil, 83, 95, 96, 294, 74, - 75, 71, 9, 57, nil, nil, nil, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 19, nil, nil, nil, nil, - nil, 8, 45, 296, 10, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 40, nil, nil, 33, nil, nil, 58, 59, - nil, nil, 60, nil, 35, nil, nil, nil, 44, nil, - nil, nil, nil, nil, nil, nil, nil, 20, nil, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - nil, nil, nil, 62, nil, 83, 95, 96, 74, 75, - 71, 9, 57, nil, nil, nil, 63, 64, nil, nil, - nil, 67, nil, 65, 66, 68, 30, 31, 72, 73, - nil, nil, nil, nil, nil, 29, 28, 27, 103, 102, - 104, 105, nil, nil, 19, nil, nil, nil, nil, nil, - 8, 45, 7, 10, 107, 106, 108, 97, 56, 99, - 98, 100, nil, 101, 109, 110, nil, 93, 94, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 40, nil, nil, 33, nil, nil, 58, 59, nil, - nil, 60, nil, 35, nil, nil, nil, 44, nil, nil, - nil, nil, nil, nil, nil, nil, 20, nil, nil, nil, - nil, 91, 81, 84, 85, nil, 86, 88, 87, 89, - nil, nil, nil, nil, 82, 90, nil, nil, nil, 74, - 75, 71, 62, 57, 83, 95, 96, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 234, nil, nil, nil, nil, - nil, nil, 45, nil, nil, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 227, nil, nil, 233, nil, nil, 58, 59, - nil, nil, 60, nil, nil, nil, nil, nil, 44, nil, - nil, nil, nil, nil, nil, nil, nil, 232, nil, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - 74, 75, 71, 62, 57, 83, 95, 96, 63, 64, - nil, nil, nil, 67, nil, 65, 66, 68, 30, 31, - 72, 73, nil, nil, nil, nil, nil, 29, 28, 27, - 103, 102, 104, 105, nil, nil, 234, nil, nil, nil, - nil, nil, nil, 45, nil, nil, 107, 106, 108, 97, - 56, 99, 98, 100, 288, 101, 109, 110, nil, 93, - 94, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 227, nil, nil, 233, nil, nil, 58, - 59, nil, nil, 60, nil, 285, nil, 283, nil, 44, - nil, nil, 289, nil, nil, nil, nil, nil, 232, nil, - nil, nil, nil, 91, 286, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, nil, nil, - nil, 74, 75, 71, 62, 57, 83, 95, 96, 63, - 64, nil, nil, nil, 67, nil, 65, 66, 68, 30, - 31, 72, 73, nil, nil, nil, nil, nil, 29, 28, - 27, 103, 102, 104, 105, nil, nil, 234, nil, nil, - nil, nil, nil, nil, 45, nil, nil, 107, 106, 108, - 97, 56, 99, 98, 100, 288, 101, 109, 110, nil, - 93, 94, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 227, nil, nil, 233, nil, nil, - 58, 59, nil, nil, 60, nil, 285, nil, 283, nil, - 44, nil, nil, 289, nil, nil, nil, nil, nil, 232, - nil, nil, nil, nil, 91, 286, 84, 85, nil, 86, - 88, 87, 89, nil, nil, nil, nil, 82, 90, nil, - nil, nil, 74, 75, 71, 62, 57, 83, 95, 96, - 63, 64, nil, nil, nil, 67, nil, 65, 66, 68, - 30, 31, 72, 73, nil, nil, nil, nil, nil, 29, - 28, 27, 103, 102, 104, 105, nil, nil, 234, nil, - nil, nil, nil, nil, nil, 45, nil, nil, 107, 106, - 108, 97, 56, 99, 98, 100, 288, 101, 109, 110, - nil, 93, 94, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 227, nil, nil, 233, nil, - nil, 58, 59, nil, nil, 60, nil, 285, nil, 283, - nil, 44, nil, nil, 289, nil, nil, nil, nil, nil, - 232, nil, nil, nil, nil, 91, 286, 84, 85, nil, - 86, 88, 87, 89, nil, nil, nil, nil, 82, 90, - nil, nil, nil, 74, 75, 71, 62, 57, 83, 95, - 96, 63, 64, nil, nil, nil, 67, nil, 65, 66, - 68, 313, 314, 72, 73, nil, nil, nil, nil, nil, - 309, 310, 316, 103, 102, 104, 105, nil, nil, 234, - nil, nil, nil, nil, nil, nil, 311, nil, nil, 107, - 106, 108, 97, 56, 99, 98, 100, nil, 101, 109, - 110, nil, 93, 94, nil, nil, 317, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 307, nil, nil, 303, - nil, nil, 58, 59, nil, nil, 60, nil, 302, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 91, 81, 84, 85, - nil, 86, 88, 87, 89, nil, nil, nil, nil, 82, - 90, nil, nil, nil, 74, 75, 71, 62, 57, 83, - 95, 96, 63, 64, nil, nil, nil, 67, nil, 65, - 66, 68, 313, 314, 72, 73, nil, nil, nil, nil, - nil, 309, 310, 316, 103, 102, 104, 105, nil, nil, - 234, nil, nil, nil, nil, nil, nil, 311, nil, nil, - 107, 106, 108, 97, 56, 99, 98, 100, nil, 101, - 109, 110, nil, 93, 94, nil, nil, 317, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 307, nil, nil, - 233, nil, nil, 58, 59, nil, nil, 60, nil, nil, - 672, nil, 669, 668, 667, 677, 670, nil, nil, nil, - nil, nil, nil, nil, nil, 680, nil, 91, 81, 84, - 85, nil, 86, 88, 87, 89, nil, nil, nil, nil, - 82, 90, nil, nil, nil, 319, nil, 675, 62, nil, - 83, 95, 96, 74, 75, 71, nil, 57, 688, 687, - nil, 63, 64, 681, nil, nil, 67, nil, 65, 66, - 68, 313, 314, 72, 73, nil, nil, nil, nil, nil, - 309, 310, 316, 103, 102, 104, 105, nil, nil, 234, - nil, nil, nil, nil, nil, nil, 45, nil, nil, 107, - 106, 108, 97, 56, 99, 98, 100, nil, 101, 109, - 110, nil, 93, 94, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 227, nil, nil, 233, - nil, nil, 58, 59, nil, nil, 60, nil, nil, nil, - nil, nil, 44, nil, nil, nil, nil, nil, nil, nil, - nil, 232, nil, nil, nil, nil, 91, 81, 84, 85, - nil, 86, 88, 87, 89, nil, nil, nil, nil, 82, - 90, nil, nil, nil, 74, 75, 71, 62, 57, 83, - 95, 96, 63, 64, nil, nil, nil, 67, nil, 65, - 66, 68, 313, 314, 72, 73, nil, nil, nil, nil, - nil, 309, 310, 316, 103, 102, 104, 105, nil, nil, - 234, nil, nil, nil, nil, nil, nil, 45, nil, nil, - 107, 106, 108, 97, 56, 99, 98, 100, nil, 101, - 109, 110, nil, 93, 94, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 227, nil, nil, - 233, nil, nil, 58, 59, nil, nil, 60, nil, nil, - nil, nil, nil, 44, nil, nil, nil, nil, nil, nil, - nil, nil, 232, nil, nil, nil, nil, 91, 81, 84, - 85, nil, 86, 88, 87, 89, nil, nil, nil, nil, - 82, 90, nil, nil, nil, 74, 75, 71, 62, 57, - 83, 95, 96, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 313, 314, 72, 73, nil, nil, nil, - nil, nil, 309, 310, 316, 103, 102, 104, 105, nil, - nil, 234, nil, nil, nil, nil, nil, nil, 45, nil, - nil, 107, 106, 108, 97, 56, 99, 98, 100, nil, - 101, 109, 110, nil, 93, 94, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 227, nil, - nil, 233, nil, nil, 58, 59, nil, nil, 60, nil, - nil, nil, nil, nil, 44, nil, nil, nil, nil, nil, - nil, nil, nil, 232, nil, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, 74, 75, 71, 62, - 57, 83, 95, 96, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 313, 314, 72, 73, nil, nil, - nil, nil, nil, 309, 310, 316, 103, 102, 104, 105, - nil, nil, 234, nil, nil, nil, nil, nil, nil, 45, - nil, nil, 107, 106, 108, 97, 56, 99, 98, 100, - 288, 101, 109, 110, nil, 93, 94, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 227, - nil, nil, 233, nil, nil, 58, 59, nil, nil, 60, - nil, 285, nil, nil, nil, 44, nil, nil, 289, nil, - nil, nil, nil, nil, 232, nil, nil, nil, nil, 91, - 286, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, nil, nil, 74, 75, 71, - 62, 57, 83, 95, 96, 63, 64, nil, nil, nil, - 67, nil, 65, 66, 68, 313, 314, 72, 73, nil, - nil, nil, nil, nil, 309, 310, 316, 103, 102, 104, - 105, nil, nil, 234, nil, nil, nil, nil, nil, nil, - 45, nil, nil, 107, 106, 108, 97, 56, 99, 98, - 100, 288, 101, 109, 110, nil, 93, 94, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 227, nil, nil, 233, nil, nil, 58, 59, nil, nil, - 60, nil, nil, nil, nil, nil, 44, nil, nil, 289, - nil, nil, nil, nil, nil, 232, nil, nil, nil, nil, - 91, 286, 84, 85, nil, 86, 88, 87, 89, nil, - nil, nil, nil, 82, 90, nil, nil, nil, 74, 75, - 71, 62, 57, 83, 95, 96, 63, 64, nil, nil, - nil, 67, nil, 65, 66, 68, 30, 31, 72, 73, - nil, nil, nil, nil, nil, 29, 28, 27, 103, 102, - 104, 105, nil, nil, 19, nil, nil, nil, nil, nil, - nil, 45, nil, nil, 107, 106, 108, 97, 56, 99, - 98, 100, nil, 101, 109, 110, nil, 93, 94, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 227, nil, nil, 233, nil, nil, 58, 59, nil, - nil, 60, nil, nil, nil, nil, nil, 44, nil, nil, - nil, nil, nil, nil, nil, nil, 20, nil, nil, nil, - nil, 91, 81, 84, 85, nil, 86, 88, 87, 89, - nil, nil, nil, nil, 82, 90, nil, nil, nil, 74, - 75, 71, 62, 57, 83, 95, 96, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 19, nil, nil, nil, nil, - nil, nil, 45, nil, nil, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 227, nil, nil, 233, nil, nil, 58, 59, - nil, nil, 60, nil, nil, nil, nil, nil, 44, nil, - nil, nil, nil, nil, nil, nil, nil, 20, nil, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - 74, 75, 71, 62, 57, 83, 95, 96, 63, 64, - nil, nil, nil, 67, nil, 65, 66, 68, 30, 31, - 72, 73, nil, nil, nil, nil, nil, 29, 28, 27, - 103, 102, 104, 105, nil, nil, 19, nil, nil, nil, - nil, nil, nil, 45, nil, nil, 107, 106, 108, 97, - 56, 99, 98, 100, nil, 101, 109, 110, nil, 93, - 94, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 227, nil, nil, 233, nil, nil, 58, - 59, nil, nil, 60, nil, nil, nil, nil, nil, 44, - nil, nil, nil, nil, nil, nil, nil, nil, 20, nil, - nil, nil, nil, 91, 81, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, 115, nil, - nil, nil, nil, 114, 62, nil, 83, 95, 96, 74, - 75, 71, nil, 57, nil, nil, nil, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 313, 314, 72, - 73, nil, nil, nil, nil, nil, 309, 310, 316, 103, - 102, 104, 105, nil, nil, 234, nil, nil, nil, nil, - nil, nil, 311, nil, nil, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - nil, nil, 317, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 351, nil, nil, 33, nil, nil, 58, 59, - nil, nil, 60, nil, 35, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - 74, 75, 71, 62, 57, 83, 95, 96, 63, 64, - nil, nil, nil, 67, nil, 65, 66, 68, 313, 314, - 72, 73, nil, nil, nil, nil, nil, 309, 310, 316, - 103, 102, 104, 105, nil, nil, 234, nil, nil, nil, - nil, nil, nil, 311, nil, nil, 107, 106, 108, 356, - 56, 99, 98, 357, nil, 101, 109, 110, nil, 93, - 94, nil, nil, 317, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 363, nil, nil, 358, nil, nil, 233, nil, nil, 58, - 59, nil, nil, 60, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 91, 81, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, nil, nil, - nil, 74, 75, 71, 62, 57, 83, 95, 96, 63, - 64, nil, nil, nil, 67, nil, 65, 66, 68, 313, - 314, 72, 73, nil, nil, nil, nil, nil, 309, 310, - 316, 103, 102, 104, 105, nil, nil, 234, nil, nil, - nil, nil, nil, nil, 311, nil, nil, 107, 106, 108, - 356, 56, 99, 98, 357, nil, 101, 109, 110, nil, - 93, 94, nil, nil, 317, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 358, nil, nil, 233, nil, nil, - 58, 59, nil, nil, 60, nil, nil, 672, nil, 669, - 668, 667, 677, 670, nil, nil, nil, nil, nil, nil, - nil, nil, 680, nil, 91, 81, 84, 85, nil, 86, - 88, 87, 89, nil, nil, nil, nil, 82, 90, nil, - nil, nil, nil, nil, 675, 62, nil, 83, 95, 96, - 74, 75, 71, 9, 57, 688, 687, nil, 63, 64, - 681, nil, nil, 67, nil, 65, 66, 68, 30, 31, - 72, 73, nil, nil, nil, nil, nil, 29, 28, 27, - 103, 102, 104, 105, nil, nil, 19, nil, nil, nil, - nil, nil, 8, 45, 7, 10, 107, 106, 108, 97, - 56, 99, 98, 100, nil, 101, 109, 110, nil, 93, - 94, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 40, nil, nil, 33, nil, nil, 58, - 59, nil, nil, 60, nil, 35, nil, nil, nil, 44, - nil, nil, nil, nil, nil, nil, nil, nil, 20, nil, - nil, nil, nil, 91, 81, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, nil, nil, - nil, nil, nil, 391, 62, nil, 83, 95, 96, 74, - 75, 71, nil, 57, nil, nil, nil, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 19, nil, nil, nil, nil, - nil, nil, 45, nil, nil, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 227, nil, nil, 233, nil, nil, 58, 59, - nil, nil, 60, nil, nil, nil, nil, nil, 44, nil, - nil, nil, nil, nil, nil, nil, nil, 20, nil, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - 74, 75, 71, 62, 57, 83, 95, 96, 63, 64, - nil, nil, nil, 67, nil, 65, 66, 68, 30, 31, - 72, 73, nil, nil, nil, nil, nil, 29, 28, 27, - 103, 102, 104, 105, nil, nil, 19, nil, nil, nil, - nil, nil, nil, 45, nil, nil, 107, 106, 108, 97, - 56, 99, 98, 100, nil, 101, 109, 110, nil, 93, - 94, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 227, nil, nil, 233, nil, nil, 58, - 59, nil, nil, 60, nil, nil, nil, nil, nil, 44, - nil, nil, nil, nil, nil, nil, nil, nil, 20, nil, - nil, nil, nil, 91, 81, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, nil, nil, - nil, 74, 75, 71, 62, 57, 83, 95, 96, 63, - 64, nil, nil, nil, 67, nil, 65, 66, 68, 30, - 31, 72, 73, nil, nil, nil, nil, nil, 29, 28, - 27, 103, 102, 104, 105, nil, nil, 19, nil, nil, - nil, nil, nil, nil, 45, nil, nil, 107, 106, 108, - 97, 56, 99, 98, 100, nil, 101, 109, 110, nil, - 93, 94, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 227, nil, nil, 233, nil, nil, - 58, 59, nil, nil, 60, nil, nil, nil, nil, nil, - 44, nil, nil, nil, nil, nil, nil, nil, nil, 20, - nil, nil, nil, nil, 91, 81, 84, 85, nil, 86, - 88, 87, 89, nil, nil, nil, nil, 82, 90, nil, - nil, nil, 74, 75, 71, 62, 57, 83, 95, 96, - 63, 64, nil, nil, nil, 67, nil, 65, 66, 68, - 30, 31, 72, 73, nil, nil, nil, nil, nil, 29, - 28, 27, 103, 102, 104, 105, nil, nil, 19, nil, - nil, nil, nil, nil, nil, 45, nil, nil, 107, 106, - 108, 97, 56, 99, 98, 100, nil, 101, 109, 110, - nil, 93, 94, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 227, nil, nil, 233, nil, - nil, 58, 59, nil, nil, 60, nil, nil, nil, nil, - nil, 44, nil, nil, nil, nil, nil, nil, nil, nil, - 20, nil, nil, nil, nil, 91, 81, 84, 85, nil, - 86, 88, 87, 89, nil, nil, nil, nil, 82, 90, - nil, nil, nil, nil, nil, nil, 62, nil, 83, 95, - 96, 74, 75, 71, 9, 57, nil, nil, nil, 63, - 64, nil, nil, nil, 67, nil, 65, 66, 68, 30, - 31, 72, 73, nil, nil, nil, nil, nil, 29, 28, - 27, 103, 102, 104, 105, nil, nil, 19, nil, nil, - nil, nil, nil, 8, 45, nil, 10, 107, 106, 108, - 97, 56, 99, 98, 100, nil, 101, 109, 110, nil, - 93, 94, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 40, nil, nil, 33, nil, nil, - 58, 59, nil, nil, 60, nil, 35, nil, nil, nil, - 44, nil, nil, nil, nil, nil, nil, nil, nil, 20, - nil, nil, nil, nil, 91, 81, 84, 85, nil, 86, - 88, 87, 89, nil, nil, nil, nil, 82, 90, nil, - nil, nil, 74, 75, 71, 62, 57, 83, 95, 96, - 63, 64, nil, nil, nil, 67, nil, 65, 66, 68, - 30, 31, 72, 73, nil, nil, nil, nil, nil, 29, - 28, 27, 103, 102, 104, 105, nil, nil, 234, nil, - nil, nil, nil, nil, nil, 45, nil, nil, 107, 106, - 108, 97, 56, 99, 98, 100, nil, 101, 109, 110, - nil, 93, 94, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 227, nil, nil, 233, nil, - nil, 58, 59, nil, nil, 60, nil, 407, nil, nil, - nil, 44, nil, nil, nil, nil, nil, nil, nil, nil, - 232, nil, nil, nil, nil, 91, 81, 84, 85, nil, - 86, 88, 87, 89, nil, nil, nil, nil, 82, 90, - nil, nil, nil, 74, 75, 71, 62, 57, 83, 95, - 96, 63, 64, nil, nil, nil, 67, nil, 65, 66, - 68, 30, 31, 72, 73, nil, nil, nil, nil, nil, - 29, 28, 27, 103, 102, 104, 105, nil, nil, 234, - nil, nil, nil, nil, nil, nil, 45, nil, nil, 107, - 106, 108, 97, 56, 99, 98, 100, nil, 101, 109, - 110, nil, 93, 94, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 227, nil, nil, 233, - nil, nil, 58, 59, nil, nil, 60, nil, nil, nil, - nil, nil, 44, nil, nil, nil, nil, nil, nil, nil, - nil, 232, nil, nil, nil, nil, 91, 81, 84, 85, - nil, 86, 88, 87, 89, nil, nil, nil, nil, 82, - 90, nil, nil, nil, 74, 75, 71, 62, 57, 83, - 95, 96, 63, 64, nil, nil, nil, 67, nil, 65, - 66, 68, 30, 31, 72, 73, nil, nil, nil, nil, - nil, 29, 28, 27, 103, 102, 104, 105, nil, nil, - 234, nil, nil, nil, nil, nil, nil, 45, nil, nil, - 107, 106, 108, 97, 56, 99, 98, 100, 288, 101, - 109, 110, nil, 93, 94, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 227, nil, nil, - 233, nil, nil, 58, 59, nil, nil, 60, nil, 285, - nil, 283, nil, 44, nil, nil, 289, nil, nil, nil, - nil, nil, 232, nil, nil, nil, nil, 91, 286, 84, - 85, nil, 86, 88, 87, 89, nil, nil, nil, nil, - 82, 90, nil, nil, nil, 74, 75, 71, 62, 57, - 83, 95, 96, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 30, 31, 72, 73, nil, nil, nil, - nil, nil, 29, 28, 27, 103, 102, 104, 105, nil, - nil, 234, nil, nil, nil, nil, nil, nil, 45, nil, - nil, 107, 106, 108, 97, 56, 99, 98, 100, nil, - 101, 109, 110, nil, 93, 94, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 227, nil, - nil, 233, nil, nil, 58, 59, nil, nil, 60, nil, - nil, nil, nil, nil, 44, nil, nil, nil, nil, nil, - nil, nil, nil, 232, nil, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, 74, 75, 71, 62, - 57, 83, 95, 96, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 30, 31, 72, 73, nil, nil, - nil, nil, nil, 29, 28, 27, 103, 102, 104, 105, - nil, nil, 234, nil, nil, nil, nil, nil, nil, 45, - nil, nil, 107, 106, 108, 97, 56, 99, 98, 100, - nil, 101, 109, 110, nil, 93, 94, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 227, - nil, nil, 233, nil, nil, 58, 59, nil, nil, 60, - nil, 407, nil, nil, nil, 44, nil, nil, nil, nil, - nil, nil, nil, nil, 232, nil, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, nil, nil, 74, 75, 71, - 62, 57, 83, 95, 96, 63, 64, nil, nil, nil, - 67, nil, 65, 66, 68, 30, 31, 72, 73, nil, - nil, nil, nil, nil, 29, 28, 27, 103, 102, 104, - 105, nil, nil, 19, nil, nil, nil, nil, nil, nil, - 45, nil, nil, 107, 106, 108, 97, 56, 99, 98, - 100, nil, 101, 109, 110, nil, 93, 94, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 227, nil, nil, 233, nil, nil, 58, 59, nil, nil, - 60, nil, nil, nil, nil, nil, 44, nil, nil, nil, - nil, nil, nil, nil, nil, 20, nil, nil, nil, nil, - 91, 81, 84, 85, nil, 86, 88, 87, 89, nil, - nil, nil, nil, 82, 90, nil, nil, nil, 74, 75, - 71, 62, 57, 83, 95, 96, 63, 64, nil, nil, - nil, 67, nil, 65, 66, 68, 30, 31, 72, 73, - nil, nil, nil, nil, nil, 29, 28, 27, 103, 102, - 104, 105, nil, nil, 19, nil, nil, nil, nil, nil, - nil, 45, nil, nil, 107, 106, 108, 97, 56, 99, - 98, 100, nil, 101, 109, 110, nil, 93, 94, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 227, nil, nil, 233, nil, nil, 58, 59, nil, - nil, 60, nil, nil, nil, nil, nil, 44, nil, nil, - nil, nil, nil, nil, nil, nil, 20, nil, nil, nil, - nil, 91, 81, 84, 85, nil, 86, 88, 87, 89, - nil, nil, nil, nil, 82, 90, nil, nil, nil, 74, - 75, 71, 62, 57, 83, 95, 96, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 19, nil, nil, nil, nil, - nil, nil, 45, nil, nil, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 227, nil, nil, 233, nil, nil, 58, 59, - nil, nil, 60, nil, nil, nil, nil, nil, 44, nil, - nil, nil, nil, nil, nil, nil, nil, 20, nil, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - 74, 75, 71, 62, 57, 83, 95, 96, 63, 64, - nil, nil, nil, 67, nil, 65, 66, 68, 30, 31, - 72, 73, nil, nil, nil, nil, nil, 29, 28, 27, - 103, 102, 104, 105, nil, nil, 19, nil, nil, nil, - nil, nil, nil, 45, nil, nil, 107, 106, 108, 97, - 56, 99, 98, 100, nil, 101, 109, 110, nil, 93, - 94, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 227, nil, nil, 233, nil, nil, 58, - 59, nil, nil, 60, nil, nil, nil, nil, nil, 44, - nil, nil, nil, nil, nil, nil, nil, nil, 20, nil, - nil, nil, nil, 91, 81, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, 222, nil, - nil, 74, 75, 71, 62, 57, 83, 95, 96, 63, - 64, nil, nil, nil, 67, nil, 65, 66, 68, 313, - 314, 72, 73, nil, nil, nil, nil, nil, 309, 310, - 316, 103, 102, 104, 105, nil, nil, 234, nil, nil, - nil, nil, nil, nil, 45, nil, nil, 107, 106, 108, - 97, 56, 99, 98, 100, nil, 101, 109, 110, nil, - 93, 94, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 227, nil, nil, 233, nil, nil, - 58, 59, nil, nil, 60, nil, nil, nil, nil, nil, - 44, nil, nil, nil, nil, nil, nil, nil, nil, 232, - nil, nil, nil, nil, 91, 81, 84, 85, nil, 86, - 88, 87, 89, nil, nil, nil, nil, 82, 90, nil, - nil, nil, 74, 75, 71, 62, 57, 83, 95, 96, - 63, 64, nil, nil, nil, 67, nil, 65, 66, 68, - 313, 314, 72, 73, nil, nil, nil, nil, nil, 309, - 310, 316, 103, 102, 104, 105, nil, nil, 234, nil, - nil, nil, nil, nil, nil, 45, nil, nil, 107, 106, - 108, 97, 56, 99, 98, 100, nil, 101, 109, 110, - nil, 93, 94, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 227, nil, nil, 233, nil, - nil, 58, 59, nil, nil, 60, nil, nil, nil, nil, - nil, 44, nil, nil, nil, nil, nil, nil, nil, nil, - 232, nil, nil, nil, nil, 91, 81, 84, 85, nil, - 86, 88, 87, 89, nil, nil, nil, nil, 82, 90, - nil, nil, nil, 74, 75, 71, 62, 57, 83, 95, - 96, 63, 64, nil, nil, nil, 67, nil, 65, 66, - 68, 313, 314, 72, 73, nil, nil, nil, nil, nil, - 309, 310, 316, 103, 102, 104, 105, nil, nil, 234, - nil, nil, nil, nil, nil, nil, 45, nil, nil, 107, - 106, 108, 97, 56, 99, 98, 100, nil, 101, 109, - 110, nil, 93, 94, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 227, nil, nil, 233, - nil, nil, 58, 59, nil, nil, 60, nil, nil, nil, - nil, nil, 44, nil, nil, nil, nil, nil, nil, nil, - nil, 232, nil, nil, nil, nil, 91, 81, 84, 85, - nil, 86, 88, 87, 89, nil, nil, nil, nil, 82, - 90, nil, nil, nil, 74, 75, 71, 62, 57, 83, - 95, 96, 63, 64, nil, nil, nil, 67, nil, 65, - 66, 68, 313, 314, 72, 73, nil, nil, nil, nil, - nil, 309, 310, 316, 103, 102, 104, 105, nil, nil, - 234, nil, nil, nil, nil, nil, nil, 45, nil, nil, - 107, 106, 108, 97, 56, 99, 98, 100, nil, 101, - 109, 110, nil, 93, 94, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 227, nil, nil, - 233, nil, nil, 58, 59, nil, nil, 60, nil, nil, - nil, nil, nil, 44, nil, nil, nil, nil, nil, nil, - nil, nil, 232, nil, nil, nil, nil, 91, 81, 84, - 85, nil, 86, 88, 87, 89, nil, nil, nil, nil, - 82, 90, nil, nil, nil, 74, 75, 71, 62, 57, - 83, 95, 96, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 313, 314, 72, 73, nil, nil, nil, - nil, nil, 309, 310, 316, 103, 102, 104, 105, nil, - nil, 234, nil, nil, nil, nil, nil, nil, 45, nil, - nil, 107, 106, 108, 97, 56, 99, 98, 100, nil, - 101, 109, 110, nil, 93, 94, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 227, nil, - nil, 233, nil, nil, 58, 59, nil, nil, 60, nil, - nil, nil, nil, nil, 44, nil, nil, nil, nil, nil, - nil, nil, nil, 232, nil, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, 74, 75, 71, 62, - 57, 83, 95, 96, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 313, 314, 72, 73, nil, nil, - nil, nil, nil, 309, 310, 316, 103, 102, 104, 105, - nil, nil, 234, nil, nil, nil, nil, nil, nil, 45, - nil, nil, 107, 106, 108, 97, 56, 99, 98, 100, - nil, 101, 109, 110, nil, 93, 94, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 227, - nil, nil, 233, nil, nil, 58, 59, nil, nil, 60, - nil, nil, nil, nil, nil, 44, nil, nil, nil, nil, - nil, nil, nil, nil, 232, nil, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, nil, nil, 74, 75, 71, - 62, 57, 83, 95, 96, 63, 64, nil, nil, nil, - 67, nil, 65, 66, 68, 313, 314, 72, 73, nil, - nil, nil, nil, nil, 309, 310, 316, 103, 102, 104, - 105, nil, nil, 234, nil, nil, nil, nil, nil, nil, - 45, nil, nil, 107, 106, 108, 97, 56, 99, 98, - 100, nil, 101, 109, 110, nil, 93, 94, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 227, nil, nil, 233, nil, nil, 58, 59, nil, nil, - 60, nil, nil, nil, nil, nil, 44, nil, nil, nil, - nil, nil, nil, nil, nil, 232, nil, nil, nil, nil, - 91, 81, 84, 85, nil, 86, 88, 87, 89, nil, - nil, nil, nil, 82, 90, nil, nil, nil, 74, 75, - 71, 62, 57, 83, 95, 96, 63, 64, nil, nil, - nil, 67, nil, 65, 66, 68, 313, 314, 72, 73, - nil, nil, nil, nil, nil, 309, 310, 316, 103, 102, - 104, 105, nil, nil, 234, nil, nil, nil, nil, nil, - nil, 45, nil, nil, 107, 106, 108, 97, 56, 99, - 98, 100, nil, 101, 109, 110, nil, 93, 94, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 227, nil, nil, 233, nil, nil, 58, 59, nil, - nil, 60, nil, nil, nil, nil, nil, 44, nil, nil, - nil, nil, nil, nil, nil, nil, 232, nil, nil, nil, - nil, 91, 81, 84, 85, nil, 86, 88, 87, 89, - nil, nil, nil, nil, 82, 90, nil, nil, nil, 74, - 75, 71, 62, 57, 83, 95, 96, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 313, 314, 72, - 73, nil, nil, nil, nil, nil, 309, 310, 316, 103, - 102, 104, 105, nil, nil, 234, nil, nil, nil, nil, - nil, nil, 45, nil, nil, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 227, nil, nil, 233, nil, nil, 58, 59, - nil, nil, 60, nil, nil, nil, nil, nil, 44, nil, - nil, nil, nil, nil, nil, nil, nil, 232, nil, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - 74, 75, 71, 62, 57, 83, 95, 96, 63, 64, - nil, nil, nil, 67, nil, 65, 66, 68, 313, 314, - 72, 73, nil, nil, nil, nil, nil, 309, 310, 316, - 103, 102, 104, 105, nil, nil, 234, nil, nil, nil, - nil, nil, nil, 45, nil, nil, 107, 106, 108, 97, - 56, 99, 98, 100, nil, 101, 109, 110, nil, 93, - 94, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 227, nil, nil, 233, nil, nil, 58, - 59, nil, nil, 60, nil, nil, nil, nil, nil, 44, - nil, nil, nil, nil, nil, nil, nil, nil, 232, nil, - nil, nil, nil, 91, 81, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, nil, nil, - nil, 74, 75, 71, 62, 57, 83, 95, 96, 63, - 64, nil, nil, nil, 67, nil, 65, 66, 68, 313, - 314, 72, 73, nil, nil, nil, nil, nil, 309, 310, - 316, 103, 102, 104, 105, nil, nil, 234, nil, nil, - nil, nil, nil, nil, 45, nil, nil, 107, 106, 108, - 97, 56, 99, 98, 100, nil, 101, 109, 110, nil, - 93, 94, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 227, nil, nil, 233, nil, nil, - 58, 59, nil, nil, 60, nil, nil, nil, nil, nil, - 44, nil, nil, nil, nil, nil, nil, nil, nil, 232, - nil, nil, nil, nil, 91, 81, 84, 85, nil, 86, - 88, 87, 89, nil, nil, nil, nil, 82, 90, nil, - nil, nil, 74, 75, 71, 62, 57, 83, 95, 96, - 63, 64, nil, nil, nil, 67, nil, 65, 66, 68, - 313, 314, 72, 73, nil, nil, nil, nil, nil, 309, - 310, 316, 103, 102, 104, 105, nil, nil, 234, nil, - nil, nil, nil, nil, nil, 45, nil, nil, 107, 106, - 108, 97, 56, 99, 98, 100, nil, 101, 109, 110, - nil, 93, 94, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 227, nil, nil, 233, nil, - nil, 58, 59, nil, nil, 60, nil, nil, nil, nil, - nil, 44, nil, nil, nil, nil, nil, nil, nil, nil, - 232, nil, nil, nil, nil, 91, 81, 84, 85, nil, - 86, 88, 87, 89, nil, nil, nil, nil, 82, 90, - nil, nil, nil, 74, 75, 71, 62, 57, 83, 95, - 96, 63, 64, nil, nil, nil, 67, nil, 65, 66, - 68, 313, 314, 72, 73, nil, nil, nil, nil, nil, - 309, 310, 316, 103, 102, 104, 105, nil, nil, 234, - nil, nil, nil, nil, nil, nil, 45, nil, nil, 107, - 106, 108, 97, 56, 99, 98, 100, nil, 101, 109, - 110, nil, 93, 94, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 227, nil, nil, 233, - nil, nil, 58, 59, nil, nil, 60, nil, nil, nil, - nil, nil, 44, nil, nil, nil, nil, nil, nil, nil, - nil, 232, nil, nil, nil, nil, 91, 81, 84, 85, - nil, 86, 88, 87, 89, nil, nil, nil, nil, 82, - 90, nil, nil, nil, 74, 75, 71, 62, 57, 83, - 95, 96, 63, 64, nil, nil, nil, 67, nil, 65, - 66, 68, 313, 314, 72, 73, nil, nil, nil, nil, - nil, 309, 310, 316, 103, 102, 104, 105, nil, nil, - 234, nil, nil, nil, nil, nil, nil, 45, nil, nil, - 107, 106, 108, 97, 56, 99, 98, 100, nil, 101, - 109, 110, nil, 93, 94, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 227, nil, nil, - 233, nil, nil, 58, 59, nil, nil, 60, nil, nil, - nil, nil, nil, 44, nil, nil, nil, nil, nil, nil, - nil, nil, 232, nil, nil, nil, nil, 91, 81, 84, - 85, nil, 86, 88, 87, 89, nil, nil, nil, nil, - 82, 90, nil, nil, nil, 74, 75, 71, 62, 57, - 83, 95, 96, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 313, 314, 72, 73, nil, nil, nil, - nil, nil, 309, 310, 316, 103, 102, 104, 105, nil, - nil, 234, nil, nil, nil, nil, nil, nil, 45, nil, - nil, 107, 106, 108, 97, 56, 99, 98, 100, nil, - 101, 109, 110, nil, 93, 94, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 227, nil, - nil, 233, nil, nil, 58, 59, nil, nil, 60, nil, - nil, nil, nil, nil, 44, nil, nil, nil, nil, nil, - nil, nil, nil, 232, nil, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, 74, 75, 71, 62, - 57, 83, 95, 96, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 313, 314, 72, 73, nil, nil, - nil, nil, nil, 309, 310, 316, 103, 102, 104, 105, - nil, nil, 234, nil, nil, nil, nil, nil, nil, 45, - nil, nil, 107, 106, 108, 97, 56, 99, 98, 100, - nil, 101, 109, 110, nil, 93, 94, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 227, - nil, nil, 233, nil, nil, 58, 59, nil, nil, 60, - nil, nil, nil, nil, nil, 44, nil, nil, nil, nil, - nil, nil, nil, nil, 232, nil, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, nil, nil, 74, 75, 71, - 62, 57, 83, 95, 96, 63, 64, nil, nil, nil, - 67, nil, 65, 66, 68, 313, 314, 72, 73, nil, - nil, nil, nil, nil, 309, 310, 316, 103, 102, 104, - 105, nil, nil, 234, nil, nil, nil, nil, nil, nil, - 45, nil, nil, 107, 106, 108, 97, 56, 99, 98, - 100, nil, 101, 109, 110, nil, 93, 94, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 227, nil, nil, 233, nil, nil, 58, 59, nil, nil, - 60, nil, nil, nil, nil, nil, 44, nil, nil, nil, - nil, nil, nil, nil, nil, 232, nil, nil, nil, nil, - 91, 81, 84, 85, nil, 86, 88, 87, 89, nil, - nil, nil, nil, 82, 90, nil, nil, nil, 74, 75, - 71, 62, 57, 83, 95, 96, 63, 64, nil, nil, - nil, 67, nil, 65, 66, 68, 313, 314, 72, 73, - nil, nil, nil, nil, nil, 309, 310, 316, 103, 102, - 104, 105, nil, nil, 234, nil, nil, nil, nil, nil, - nil, 45, nil, nil, 107, 106, 108, 97, 56, 99, - 98, 100, nil, 101, 109, 110, nil, 93, 94, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 227, nil, nil, 233, nil, nil, 58, 59, nil, - nil, 60, nil, nil, nil, nil, nil, 44, nil, nil, - nil, nil, nil, nil, nil, nil, 232, nil, nil, nil, - nil, 91, 81, 84, 85, nil, 86, 88, 87, 89, - nil, nil, nil, nil, 82, 90, nil, nil, nil, 74, - 75, 71, 62, 57, 83, 95, 96, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 313, 314, 72, - 73, nil, nil, nil, nil, nil, 309, 310, 316, 103, - 102, 104, 105, nil, nil, 234, nil, nil, nil, nil, - nil, nil, 45, nil, nil, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 227, nil, nil, 233, nil, nil, 58, 59, - nil, nil, 60, nil, nil, nil, nil, nil, 44, nil, - nil, nil, nil, nil, nil, nil, nil, 232, nil, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - 74, 75, 71, 62, 57, 83, 95, 96, 63, 64, - nil, nil, nil, 67, nil, 65, 66, 68, 313, 314, - 72, 73, nil, nil, nil, nil, nil, 309, 310, 316, - 103, 102, 104, 105, nil, nil, 234, nil, nil, nil, - nil, nil, nil, 45, nil, nil, 107, 106, 108, 97, - 56, 99, 98, 100, nil, 101, 109, 110, nil, 93, - 94, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 227, nil, nil, 233, nil, nil, 58, - 59, nil, nil, 60, nil, nil, nil, nil, nil, 44, - nil, nil, nil, nil, nil, nil, nil, nil, 232, nil, - nil, nil, nil, 91, 81, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, nil, nil, - nil, 74, 75, 71, 62, 57, 83, 95, 96, 63, - 64, nil, nil, nil, 67, nil, 65, 66, 68, 313, - 314, 72, 73, nil, nil, nil, nil, nil, 309, 310, - 316, 103, 102, 104, 105, nil, nil, 234, nil, nil, - nil, nil, nil, nil, 45, nil, nil, 107, 106, 108, - 97, 56, 99, 98, 100, nil, 101, 109, 110, nil, - 93, 94, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 227, nil, nil, 233, nil, nil, - 58, 59, nil, nil, 60, nil, nil, nil, nil, nil, - 44, nil, nil, nil, nil, nil, nil, nil, nil, 232, - nil, nil, nil, nil, 91, 81, 84, 85, nil, 86, - 88, 87, 89, nil, nil, nil, nil, 82, 90, nil, - nil, nil, 74, 75, 71, 62, 57, 83, 95, 96, - 63, 64, nil, nil, nil, 67, nil, 65, 66, 68, - 313, 314, 72, 73, nil, nil, nil, nil, nil, 309, - 310, 316, 103, 102, 104, 105, nil, nil, 234, nil, - nil, nil, nil, nil, nil, 45, nil, nil, 107, 106, - 108, 97, 56, 99, 98, 100, nil, 101, 109, 110, - nil, 93, 94, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 227, nil, nil, 233, nil, - nil, 58, 59, nil, nil, 60, nil, nil, nil, nil, - nil, 44, nil, nil, nil, nil, nil, nil, nil, nil, - 232, nil, nil, nil, nil, 91, 81, 84, 85, nil, - 86, 88, 87, 89, nil, nil, nil, nil, 82, 90, - nil, nil, nil, 74, 75, 71, 62, 57, 83, 95, - 96, 63, 64, nil, nil, nil, 67, nil, 65, 66, - 68, 313, 314, 72, 73, nil, nil, nil, nil, nil, - 309, 310, 316, 103, 102, 104, 105, nil, nil, 234, - nil, nil, nil, nil, nil, nil, 45, nil, nil, 107, - 106, 108, 97, 56, 99, 98, 100, nil, 101, 109, - 110, nil, 93, 94, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 227, nil, nil, 233, - nil, nil, 58, 59, nil, nil, 60, nil, nil, nil, - nil, nil, 44, nil, nil, nil, nil, nil, nil, nil, - nil, 232, nil, nil, nil, nil, 91, 81, 84, 85, - nil, 86, 88, 87, 89, nil, nil, nil, nil, 82, - 90, nil, nil, nil, 74, 75, 71, 62, 57, 83, - 95, 96, 63, 64, nil, nil, nil, 67, nil, 65, - 66, 68, 313, 314, 72, 73, nil, nil, nil, nil, - nil, 309, 310, 316, 103, 102, 104, 105, nil, nil, - 234, nil, nil, nil, nil, nil, nil, 45, nil, nil, - 107, 106, 108, 97, 56, 99, 98, 100, nil, 101, - 109, 110, nil, 93, 94, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 227, nil, nil, - 233, nil, nil, 58, 59, nil, nil, 60, nil, nil, - nil, nil, nil, 44, nil, nil, nil, nil, nil, nil, - nil, nil, 232, nil, nil, nil, nil, 91, 81, 84, - 85, nil, 86, 88, 87, 89, nil, nil, nil, nil, - 82, 90, nil, nil, nil, 74, 75, 71, 62, 57, - 83, 95, 96, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 313, 314, 72, 73, nil, nil, nil, - nil, nil, 309, 310, 316, 103, 102, 104, 105, nil, - nil, 234, nil, nil, nil, nil, nil, nil, 45, nil, - nil, 107, 106, 108, 97, 56, 99, 98, 100, nil, - 101, 109, 110, nil, 93, 94, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 227, nil, - nil, 233, nil, nil, 58, 59, nil, nil, 60, nil, - nil, nil, nil, nil, 44, nil, nil, nil, nil, nil, - nil, nil, nil, 232, nil, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, 74, 75, 71, 62, - 57, 83, 95, 96, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 313, 314, 72, 73, nil, nil, - nil, nil, nil, 309, 310, 316, 103, 102, 104, 105, - nil, nil, 234, nil, nil, nil, nil, nil, nil, 45, - nil, nil, 107, 106, 108, 97, 56, 99, 98, 100, - nil, 101, 109, 110, nil, 93, 94, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 227, - nil, nil, 233, nil, nil, 58, 59, nil, nil, 60, - nil, nil, nil, nil, nil, 44, nil, nil, nil, nil, - nil, nil, nil, nil, 232, nil, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, nil, nil, 74, 75, 71, - 62, 57, 83, 95, 96, 63, 64, nil, nil, nil, - 67, nil, 65, 66, 68, 313, 314, 72, 73, nil, - nil, nil, nil, nil, 309, 310, 316, 103, 102, 104, - 105, nil, nil, 234, nil, nil, nil, nil, nil, nil, - 45, nil, nil, 107, 106, 108, 97, 56, 99, 98, - 100, nil, 101, 109, 110, nil, 93, 94, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 227, nil, nil, 233, nil, nil, 58, 59, nil, nil, - 60, nil, nil, nil, nil, nil, 44, nil, nil, nil, - nil, nil, nil, nil, nil, 232, nil, nil, nil, nil, - 91, 81, 84, 85, nil, 86, 88, 87, 89, nil, - nil, nil, nil, 82, 90, nil, nil, nil, 74, 75, - 71, 62, 57, 83, 95, 96, 63, 64, nil, nil, - nil, 67, nil, 65, 66, 68, 30, 31, 72, 73, - nil, nil, nil, nil, nil, 29, 28, 27, 103, 102, - 104, 105, nil, nil, 234, nil, nil, nil, nil, nil, - nil, 45, nil, nil, 107, 106, 108, 97, 56, 99, - 98, 100, 288, 101, 109, 110, nil, 93, 94, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 227, nil, nil, 233, nil, nil, 58, 59, nil, - nil, 60, nil, 285, nil, 283, nil, 44, nil, nil, - 289, nil, nil, nil, nil, nil, 232, nil, nil, nil, - nil, 91, 286, 84, 85, nil, 86, 88, 87, 89, - nil, nil, nil, nil, 82, 90, nil, nil, nil, 74, - 75, 71, 62, 57, 83, 95, 96, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 234, nil, nil, nil, nil, - nil, nil, 45, nil, nil, 107, 106, 108, 97, 56, - 99, 98, 100, 288, 101, 109, 110, nil, 93, 94, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 227, nil, nil, 233, nil, nil, 58, 59, - nil, nil, 60, nil, 285, nil, 283, nil, 44, nil, - nil, 289, nil, nil, nil, nil, nil, 232, nil, nil, - nil, nil, 91, 286, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - 74, 75, 71, 62, 57, 83, 95, 96, 63, 64, - nil, nil, nil, 67, nil, 65, 66, 68, 30, 31, - 72, 73, nil, nil, nil, nil, nil, 29, 28, 27, - 103, 102, 104, 105, nil, nil, 234, nil, nil, nil, - nil, nil, nil, 45, nil, nil, 107, 106, 108, 97, - 56, 99, 98, 100, 288, 101, 109, 110, nil, 93, - 94, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 227, nil, nil, 233, nil, nil, 58, - 59, nil, nil, 60, nil, 285, nil, 283, nil, 44, - nil, nil, 289, nil, nil, nil, nil, nil, 232, nil, - nil, nil, nil, 91, 286, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, 222, nil, - nil, 74, 75, 71, 62, 57, 83, 95, 96, 63, - 64, nil, nil, nil, 67, nil, 65, 66, 68, 313, - 314, 72, 73, nil, nil, nil, nil, nil, 309, 310, - 316, 103, 102, 104, 105, nil, nil, 234, nil, nil, - nil, nil, nil, nil, 45, nil, nil, 107, 106, 108, - 97, 56, 99, 98, 100, nil, 101, 109, 110, nil, - 93, 94, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 227, nil, nil, 233, nil, nil, - 58, 59, nil, nil, 60, nil, nil, nil, nil, nil, - 44, nil, nil, nil, nil, nil, nil, nil, nil, 232, - nil, nil, nil, nil, 91, 81, 84, 85, nil, 86, - 88, 87, 89, nil, nil, nil, nil, 82, 90, nil, - nil, nil, 74, 75, 71, 62, 57, 83, 95, 96, - 63, 64, nil, nil, nil, 67, nil, 65, 66, 68, - 313, 314, 72, 73, nil, nil, nil, nil, nil, 309, - 310, 316, 103, 102, 104, 105, nil, nil, 234, nil, - nil, nil, nil, nil, nil, 45, nil, nil, 107, 106, - 108, 97, 56, 99, 98, 100, nil, 101, 109, 110, - nil, 93, 94, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 227, nil, nil, 233, nil, - nil, 58, 59, nil, nil, 60, nil, nil, nil, nil, - nil, 44, nil, nil, nil, nil, nil, nil, nil, nil, - 232, nil, nil, nil, nil, 91, 81, 84, 85, nil, - 86, 88, 87, 89, nil, nil, nil, nil, 82, 90, - nil, nil, nil, 74, 75, 71, 62, 57, 83, 95, - 96, 63, 64, nil, nil, nil, 67, nil, 65, 66, - 68, 313, 314, 72, 73, nil, nil, nil, nil, nil, - 309, 310, 316, 103, 102, 104, 105, nil, nil, 234, - nil, nil, nil, nil, nil, nil, 45, nil, nil, 107, - 106, 108, 97, 56, 99, 98, 100, nil, 101, 109, - 110, nil, 93, 94, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 227, nil, nil, 233, - nil, nil, 58, 59, nil, nil, 60, nil, nil, nil, - nil, nil, 44, nil, nil, nil, nil, nil, nil, nil, - nil, 232, nil, nil, nil, nil, 91, 81, 84, 85, - nil, 86, 88, 87, 89, nil, nil, nil, nil, 82, - 90, nil, nil, nil, 74, 75, 71, 62, 57, 83, - 95, 96, 63, 64, nil, nil, nil, 67, nil, 65, - 66, 68, 313, 314, 72, 73, nil, nil, nil, nil, - nil, 309, 310, 316, 103, 102, 104, 105, nil, nil, - 234, nil, nil, nil, nil, nil, nil, 45, nil, nil, - 107, 106, 108, 97, 56, 99, 98, 100, nil, 101, - 109, 110, nil, 93, 94, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 227, nil, nil, - 233, nil, nil, 58, 59, nil, nil, 60, nil, nil, - nil, nil, nil, 44, nil, nil, nil, nil, nil, nil, - nil, nil, 232, nil, nil, nil, nil, 91, 81, 84, - 85, nil, 86, 88, 87, 89, nil, nil, nil, nil, - 82, 90, nil, nil, nil, nil, nil, nil, 62, nil, - 83, 95, 96, 74, 75, 71, 9, 57, nil, nil, - nil, 63, 64, nil, nil, nil, 67, nil, 65, 66, - 68, 30, 31, 72, 73, nil, nil, nil, nil, nil, - 29, 28, 27, 103, 102, 104, 105, nil, nil, 19, - nil, nil, nil, nil, nil, 8, 45, nil, 10, 107, - 106, 108, 97, 56, 99, 98, 100, nil, 101, 109, - 110, nil, 93, 94, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 40, nil, nil, 33, - nil, nil, 58, 59, nil, nil, 60, nil, 35, nil, - nil, nil, 44, nil, nil, nil, nil, nil, nil, nil, - nil, 20, nil, nil, nil, nil, 91, 81, 84, 85, - nil, 86, 88, 87, 89, nil, nil, nil, nil, 82, - 90, nil, nil, nil, 74, 75, 71, 62, 57, 83, - 95, 96, 63, 64, nil, nil, nil, 67, nil, 65, - 66, 68, 313, 314, 72, 73, nil, nil, nil, nil, - nil, 309, 310, 316, 103, 102, 104, 105, nil, nil, - 234, nil, nil, nil, nil, nil, nil, 311, nil, nil, - 107, 106, 108, 97, 56, 99, 98, 100, nil, 101, - 109, 110, nil, 93, 94, nil, nil, 317, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 307, nil, nil, - 233, nil, nil, 58, 59, nil, nil, 60, nil, nil, - 672, nil, 669, 668, 667, 677, 670, nil, nil, nil, - nil, nil, nil, nil, nil, 680, nil, 91, 81, 84, - 85, nil, 86, 88, 87, 89, nil, nil, nil, nil, - 82, 90, nil, nil, nil, 507, nil, 675, 62, nil, - 83, 95, 96, 74, 75, 71, nil, 57, 688, 687, - nil, 63, 64, 681, nil, nil, 67, nil, 65, 66, - 68, 313, 314, 72, 73, nil, nil, nil, nil, nil, - 309, 310, 316, 103, 102, 104, 105, nil, nil, 234, - nil, nil, nil, nil, nil, nil, 311, nil, nil, 107, - 106, 108, 97, 56, 99, 98, 100, nil, 101, 109, - 110, nil, 93, 94, nil, nil, 317, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 307, nil, nil, 303, - nil, nil, 58, 59, nil, nil, 60, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 91, 81, 84, 85, - nil, 86, 88, 87, 89, nil, nil, nil, nil, 82, - 90, nil, nil, nil, 74, 75, 71, 62, 57, 83, - 95, 96, 63, 64, nil, nil, nil, 67, nil, 65, - 66, 68, 313, 314, 72, 73, nil, nil, nil, nil, - nil, 309, 310, 316, 103, 102, 104, 105, nil, nil, - 234, nil, nil, nil, nil, nil, nil, 45, nil, nil, - 107, 106, 108, 97, 56, 99, 98, 100, nil, 101, - 109, 110, nil, 93, 94, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 227, nil, nil, - 233, 523, nil, 58, 59, nil, nil, 60, nil, nil, - nil, nil, nil, 44, nil, nil, nil, nil, nil, nil, - nil, nil, 232, nil, nil, nil, nil, 91, 81, 84, - 85, nil, 86, 88, 87, 89, nil, nil, nil, nil, - 82, 90, nil, nil, nil, 74, 75, 71, 62, 57, - 83, 95, 96, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 30, 31, 72, 73, nil, nil, nil, - nil, nil, 29, 28, 27, 103, 102, 104, 105, nil, - nil, 19, nil, nil, nil, nil, nil, nil, 45, nil, - nil, 107, 106, 108, 97, 56, 99, 98, 100, nil, - 101, 109, 110, nil, 93, 94, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 227, nil, - nil, 233, nil, nil, 58, 59, nil, nil, 60, nil, - nil, nil, nil, nil, 44, nil, nil, nil, nil, nil, - nil, nil, nil, 20, nil, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, 74, 75, 71, 62, - 57, 83, 95, 96, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 30, 31, 72, 73, nil, nil, - nil, nil, nil, 29, 28, 27, 103, 102, 104, 105, - nil, nil, 19, nil, nil, nil, nil, nil, nil, 45, - nil, nil, 107, 106, 108, 97, 56, 99, 98, 100, - nil, 101, 109, 110, nil, 93, 94, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 227, - nil, nil, 233, nil, nil, 58, 59, nil, nil, 60, - nil, nil, nil, nil, nil, 44, nil, nil, nil, nil, - nil, nil, nil, nil, 20, nil, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, nil, nil, 74, 75, 71, - 62, 57, 83, 95, 96, 63, 64, nil, nil, nil, - 67, nil, 65, 66, 68, 30, 31, 72, 73, nil, - nil, nil, nil, nil, 29, 28, 27, 103, 102, 104, - 105, nil, nil, 19, nil, nil, nil, nil, nil, nil, - 45, nil, nil, 107, 106, 108, 97, 56, 99, 98, - 100, nil, 101, 109, 110, nil, 93, 94, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 227, nil, nil, 233, nil, nil, 58, 59, nil, nil, - 60, nil, nil, nil, nil, nil, 44, nil, nil, nil, - nil, nil, nil, nil, nil, 20, nil, nil, nil, nil, - 91, 81, 84, 85, nil, 86, 88, 87, 89, nil, - nil, nil, nil, 82, 90, nil, nil, nil, 74, 75, - 71, 62, 57, 83, 95, 96, 63, 64, nil, nil, - nil, 67, nil, 65, 66, 68, 30, 31, 72, 73, - nil, nil, nil, nil, nil, 29, 28, 27, 103, 102, - 104, 105, nil, nil, 19, nil, nil, nil, nil, nil, - nil, 45, nil, nil, 107, 106, 108, 97, 56, 99, - 98, 100, nil, 101, 109, 110, nil, 93, 94, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 227, nil, nil, 233, nil, nil, 58, 59, nil, - nil, 60, nil, nil, nil, nil, nil, 44, nil, nil, - nil, nil, nil, nil, nil, nil, 20, nil, nil, nil, - nil, 91, 81, 84, 85, nil, 86, 88, 87, 89, - nil, nil, nil, nil, 82, 90, nil, nil, nil, 74, - 75, 71, 62, 57, 83, 95, 96, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 19, nil, nil, nil, nil, - nil, nil, 45, nil, nil, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 227, nil, nil, 233, nil, nil, 58, 59, - nil, nil, 60, nil, nil, nil, nil, nil, 44, nil, - nil, nil, nil, nil, nil, nil, nil, 20, nil, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - 74, 75, 71, 62, 57, 83, 95, 96, 63, 64, - nil, nil, nil, 67, nil, 65, 66, 68, 313, 314, - 72, 73, nil, nil, nil, nil, nil, 309, 310, 316, - 103, 102, 104, 105, nil, nil, 234, nil, nil, nil, - nil, nil, nil, 45, nil, nil, 107, 106, 108, 97, - 56, 99, 98, 100, nil, 101, 109, 110, nil, 93, - 94, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 227, nil, nil, 233, nil, nil, 58, - 59, nil, nil, 60, nil, nil, nil, nil, nil, 44, - nil, nil, nil, nil, nil, nil, nil, nil, 232, nil, - nil, nil, nil, 91, 81, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, nil, nil, - nil, 74, 75, 71, 62, 57, 83, 95, 96, 63, - 64, nil, nil, nil, 67, nil, 65, 66, 68, 30, - 31, 72, 73, nil, nil, nil, nil, nil, 29, 28, - 27, 103, 102, 104, 105, nil, nil, 234, nil, nil, - nil, nil, nil, nil, 45, nil, nil, 107, 106, 108, - 97, 56, 99, 98, 100, 288, 101, 109, 110, nil, - 93, 94, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 227, nil, nil, 233, nil, nil, - 58, 59, nil, nil, 60, nil, 285, nil, 283, nil, - 44, nil, nil, 289, nil, nil, nil, nil, nil, 232, - nil, nil, nil, nil, 91, 286, 84, 85, nil, 86, - 88, 87, 89, nil, nil, nil, nil, 82, 90, nil, - nil, nil, 74, 75, 71, 62, 57, 83, 95, 96, - 63, 64, nil, nil, nil, 67, nil, 65, 66, 68, - 313, 314, 72, 73, nil, nil, nil, nil, nil, 309, - 310, 316, 103, 102, 104, 105, nil, nil, 234, nil, - nil, nil, nil, nil, nil, 45, nil, nil, 107, 106, - 108, 97, 56, 99, 98, 100, nil, 101, 109, 110, - nil, 93, 94, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 227, nil, nil, 233, nil, - nil, 58, 59, nil, nil, 60, nil, nil, nil, nil, - nil, 44, nil, nil, nil, nil, nil, nil, nil, nil, - 232, nil, nil, nil, nil, 91, 81, 84, 85, nil, - 86, 88, 87, 89, nil, nil, nil, nil, 82, 90, - nil, nil, nil, 74, 75, 71, 62, 57, 83, 95, - 96, 63, 64, nil, nil, nil, 67, nil, 65, 66, - 68, 313, 314, 72, 73, nil, nil, nil, nil, nil, - 309, 310, 316, 103, 102, 104, 105, nil, nil, 234, - nil, nil, nil, nil, nil, nil, 45, nil, nil, 107, - 106, 108, 97, 56, 99, 98, 100, nil, 101, 109, - 110, nil, 93, 94, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 227, nil, nil, 233, - nil, nil, 58, 59, nil, nil, 60, nil, nil, nil, - nil, nil, 44, nil, nil, nil, nil, nil, nil, nil, - nil, 232, nil, nil, nil, nil, 91, 81, 84, 85, - nil, 86, 88, 87, 89, nil, nil, nil, nil, 82, - 90, nil, nil, nil, 74, 75, 71, 62, 57, 83, - 95, 96, 63, 64, nil, nil, nil, 67, nil, 65, - 66, 68, 313, 314, 72, 73, nil, nil, nil, nil, - nil, 309, 310, 316, 103, 102, 104, 105, nil, nil, - 234, nil, nil, nil, nil, nil, nil, 45, nil, nil, - 107, 106, 108, 97, 56, 99, 98, 100, nil, 101, - 109, 110, nil, 93, 94, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 227, nil, nil, - 233, nil, nil, 58, 59, nil, nil, 60, nil, nil, - nil, nil, nil, 44, nil, nil, nil, nil, nil, nil, - nil, nil, 232, nil, nil, nil, nil, 91, 81, 84, - 85, nil, 86, 88, 87, 89, nil, nil, nil, nil, - 82, 90, nil, nil, nil, 74, 75, 71, 62, 57, - 83, 95, 96, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 313, 314, 72, 73, nil, nil, nil, - nil, nil, 309, 310, 316, 103, 102, 104, 105, nil, - nil, 234, nil, nil, nil, nil, nil, nil, 45, nil, - nil, 107, 106, 108, 97, 56, 99, 98, 100, 288, - 101, 109, 110, nil, 93, 94, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 227, nil, - nil, 233, nil, nil, 58, 59, nil, nil, 60, nil, - 629, nil, 283, nil, 44, nil, nil, 289, nil, nil, - nil, nil, nil, 232, nil, nil, nil, nil, 91, 286, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, 74, 75, 71, 62, - 57, 83, 95, 96, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 313, 314, 72, 73, nil, nil, - nil, nil, nil, 309, 310, 316, 103, 102, 104, 105, - nil, nil, 234, nil, nil, nil, nil, nil, nil, 45, - nil, nil, 107, 106, 108, 97, 56, 99, 98, 100, - 288, 101, 109, 110, nil, 93, 94, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 227, - nil, nil, 233, nil, nil, 58, 59, nil, nil, 60, - nil, nil, nil, 283, nil, 44, nil, nil, 289, nil, - nil, nil, nil, nil, 232, nil, nil, nil, nil, 91, - 286, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, nil, nil, 74, 75, 71, - 62, 57, 83, 95, 96, 63, 64, nil, nil, nil, - 67, nil, 65, 66, 68, 313, 314, 72, 73, nil, - nil, nil, nil, nil, 309, 310, 316, 103, 102, 104, - 105, nil, nil, 234, nil, nil, nil, nil, nil, nil, - 45, nil, nil, 107, 106, 108, 97, 56, 99, 98, - 100, nil, 101, 109, 110, nil, 93, 94, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 227, nil, nil, 233, nil, nil, 58, 59, nil, nil, - 60, nil, nil, nil, nil, nil, 44, nil, nil, nil, - nil, nil, nil, nil, nil, 232, nil, nil, nil, nil, - 91, 81, 84, 85, nil, 86, 88, 87, 89, nil, - nil, nil, nil, 82, 90, nil, nil, nil, nil, nil, - nil, 62, nil, 83, 95, 96, 74, 75, 71, 9, - 57, nil, nil, nil, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 30, 31, 72, 73, nil, nil, - nil, nil, nil, 29, 28, 27, 103, 102, 104, 105, - nil, nil, 19, nil, nil, nil, nil, nil, 8, 45, - 296, 10, 107, 106, 108, 97, 56, 99, 98, 100, - nil, 101, 109, 110, nil, 93, 94, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 40, - nil, nil, 33, nil, nil, 58, 59, nil, nil, 60, - nil, 35, nil, nil, nil, 44, nil, nil, nil, nil, - nil, nil, nil, nil, 20, nil, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, nil, nil, nil, nil, 391, - 62, nil, 83, 95, 96, 74, 75, 71, nil, 57, - nil, nil, nil, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 313, 314, 72, 73, nil, nil, nil, - nil, nil, 309, 310, 316, 103, 102, 104, 105, nil, - nil, 234, nil, nil, nil, nil, nil, nil, 311, nil, - nil, 107, 106, 108, 97, 56, 99, 98, 100, nil, - 101, 109, 110, nil, 93, 94, nil, nil, 317, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 307, nil, - nil, 303, nil, nil, 58, 59, nil, nil, 60, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, 74, 75, 71, 62, - 57, 83, 95, 96, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 30, 31, 72, 73, nil, nil, - nil, nil, nil, 29, 28, 27, 103, 102, 104, 105, - nil, nil, 234, nil, nil, nil, nil, nil, nil, 45, - nil, nil, 107, 106, 108, 97, 56, 99, 98, 100, - 288, 101, 109, 110, nil, 93, 94, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 227, - nil, nil, 233, nil, nil, 58, 59, nil, nil, 60, - nil, 285, nil, 283, nil, 44, nil, nil, 289, nil, - nil, nil, nil, nil, 232, nil, nil, nil, nil, 91, - 286, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, nil, nil, 74, 75, 71, - 62, 57, 83, 95, 96, 63, 64, nil, nil, nil, - 67, nil, 65, 66, 68, 313, 314, 72, 73, nil, - nil, nil, nil, nil, 309, 310, 316, 103, 102, 104, - 105, nil, nil, 234, nil, nil, nil, nil, nil, nil, - 311, nil, nil, 107, 106, 108, 97, 56, 99, 98, - 100, nil, 101, 109, 110, nil, 93, 94, nil, nil, - 317, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 307, nil, nil, 303, nil, nil, 58, 59, nil, nil, - 60, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 91, 81, 84, 85, nil, 86, 88, 87, 89, nil, - nil, nil, nil, 82, 90, nil, nil, nil, 74, 75, - 71, 62, 57, 83, 95, 96, 63, 64, nil, nil, - nil, 67, nil, 65, 66, 68, 313, 314, 72, 73, - nil, nil, nil, nil, nil, 309, 310, 316, 103, 102, - 104, 105, nil, nil, 234, nil, nil, nil, nil, nil, - nil, 45, nil, nil, 107, 106, 108, 97, 56, 99, - 98, 100, nil, 101, 109, 110, nil, 93, 94, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 227, nil, nil, 233, nil, nil, 58, 59, nil, - nil, 60, nil, nil, nil, nil, nil, 44, nil, nil, - nil, nil, nil, nil, nil, nil, 232, nil, nil, nil, - nil, 91, 81, 84, 85, nil, 86, 88, 87, 89, - nil, nil, nil, nil, 82, 90, nil, nil, nil, 74, - 75, 71, 62, 57, 83, 95, 96, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 313, 314, 72, - 73, nil, nil, nil, nil, nil, 309, 310, 316, 103, - 102, 104, 105, nil, nil, 234, nil, nil, nil, nil, - nil, nil, 45, nil, nil, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 227, nil, nil, 233, nil, nil, 58, 59, - nil, nil, 60, nil, nil, nil, nil, nil, 44, nil, - nil, nil, nil, nil, nil, nil, nil, 232, nil, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - 74, 75, 71, 62, 57, 83, 95, 96, 63, 64, - nil, nil, nil, 67, nil, 65, 66, 68, 30, 31, - 72, 73, nil, nil, nil, nil, nil, 29, 28, 27, - 103, 102, 104, 105, nil, nil, 19, nil, nil, nil, - nil, nil, nil, 45, nil, nil, 107, 106, 108, 97, - 56, 99, 98, 100, nil, 101, 109, 110, nil, 93, - 94, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 227, nil, nil, 233, nil, nil, 58, - 59, nil, nil, 60, nil, nil, nil, nil, nil, 44, - nil, nil, nil, nil, nil, nil, nil, nil, 20, nil, - nil, nil, nil, 91, 81, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, nil, nil, - nil, 74, 75, 71, 62, 57, 83, 95, 96, 63, - 64, nil, nil, nil, 67, nil, 65, 66, 68, 313, - 314, 72, 73, nil, nil, nil, nil, nil, 309, 310, - 316, 103, 102, 104, 105, nil, nil, 234, nil, nil, - nil, nil, nil, nil, 45, nil, nil, 107, 106, 108, - 97, 56, 99, 98, 100, 288, 101, 109, 110, nil, - 93, 94, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 227, nil, nil, 233, nil, nil, - 58, 59, nil, nil, 60, nil, 629, nil, nil, nil, - 44, nil, nil, 289, nil, nil, nil, nil, nil, 232, - nil, nil, nil, nil, 91, 286, 84, 85, nil, 86, - 88, 87, 89, nil, nil, nil, nil, 82, 90, nil, - nil, nil, 74, 75, 71, 62, 57, 83, 95, 96, - 63, 64, nil, nil, nil, 67, nil, 65, 66, 68, - 313, 314, 72, 73, nil, nil, nil, nil, nil, 309, - 310, 316, 103, 102, 104, 105, nil, nil, 234, nil, - nil, nil, nil, nil, nil, 45, nil, nil, 107, 106, - 108, 97, 56, 99, 98, 100, 288, 101, 109, 110, - nil, 93, 94, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 227, nil, nil, 233, nil, - nil, 58, 59, nil, nil, 60, nil, nil, nil, nil, - nil, 44, nil, nil, 289, nil, nil, nil, nil, nil, - 232, nil, nil, nil, nil, 91, 286, 84, 85, nil, - 86, 88, 87, 89, nil, nil, nil, nil, 82, 90, - nil, nil, nil, 74, 75, 71, 62, 57, 83, 95, - 96, 63, 64, nil, nil, nil, 67, nil, 65, 66, - 68, 313, 314, 72, 73, nil, nil, nil, nil, nil, - 309, 310, 316, 103, 102, 104, 105, nil, nil, 234, - nil, nil, nil, nil, nil, nil, 45, nil, nil, 107, - 106, 108, 97, 56, 99, 98, 100, nil, 101, 109, - 110, nil, 93, 94, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 227, nil, nil, 233, - nil, nil, 58, 59, nil, nil, 60, nil, 285, nil, - nil, nil, 44, nil, nil, nil, nil, nil, nil, nil, - nil, 232, nil, nil, nil, nil, 91, 81, 84, 85, - nil, 86, 88, 87, 89, nil, nil, nil, nil, 82, - 90, nil, nil, nil, 74, 75, 71, 62, 57, 83, - 95, 96, 63, 64, nil, nil, nil, 67, nil, 65, - 66, 68, 30, 31, 72, 73, nil, nil, nil, nil, - nil, 29, 28, 27, 103, 102, 104, 105, nil, nil, - 234, nil, nil, nil, nil, nil, nil, 45, nil, nil, - 107, 106, 108, 97, 56, 99, 98, 100, 288, 101, - 109, 110, nil, 93, 94, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 227, nil, nil, - 233, nil, nil, 58, 59, nil, nil, 60, nil, 285, - nil, 283, nil, 44, nil, nil, 289, nil, nil, nil, - nil, nil, 232, nil, nil, nil, nil, 91, 286, 84, - 85, nil, 86, 88, 87, 89, nil, nil, nil, nil, - 82, 90, nil, nil, nil, 74, 75, 71, 62, 57, - 83, 95, 96, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 30, 31, 72, 73, nil, nil, nil, - nil, nil, 29, 28, 27, 103, 102, 104, 105, nil, - nil, 234, nil, nil, nil, nil, nil, nil, 45, nil, - nil, 107, 106, 108, 97, 56, 99, 98, 100, 288, - 101, 109, 110, nil, 93, 94, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 227, nil, - nil, 233, nil, nil, 58, 59, nil, nil, 60, nil, - 285, nil, 283, nil, 44, nil, nil, 289, nil, nil, - nil, nil, nil, 232, nil, nil, nil, nil, 91, 286, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, 74, 75, 71, 62, - 57, 83, 95, 96, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 313, 314, 72, 73, nil, nil, - nil, nil, nil, 309, 310, 316, 103, 102, 104, 105, - nil, nil, 234, nil, nil, nil, nil, nil, nil, 45, - nil, nil, 107, 106, 108, 97, 56, 99, 98, 100, - nil, 101, 109, 110, nil, 93, 94, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 227, - nil, nil, 233, nil, nil, 58, 59, nil, nil, 60, - nil, 733, nil, nil, nil, 44, nil, nil, nil, nil, - nil, nil, nil, nil, 232, nil, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, nil, nil, 74, 75, 71, - 62, 57, 83, 95, 96, 63, 64, nil, nil, nil, - 67, nil, 65, 66, 68, 313, 314, 72, 73, nil, - nil, nil, nil, nil, 309, 310, 316, 103, 102, 104, - 105, nil, nil, 234, nil, nil, nil, nil, nil, nil, - 45, nil, nil, 107, 106, 108, 97, 56, 99, 98, - 100, nil, 101, 109, 110, nil, 93, 94, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 227, nil, nil, 233, nil, nil, 58, 59, nil, nil, - 60, nil, nil, nil, nil, nil, 44, nil, nil, nil, - nil, nil, nil, nil, nil, 232, nil, nil, nil, nil, - 91, 81, 84, 85, nil, 86, 88, 87, 89, nil, - nil, nil, nil, 82, 90, nil, nil, nil, 74, 75, - 71, 62, 57, 83, 95, 96, 63, 64, nil, nil, - nil, 67, nil, 65, 66, 68, 313, 314, 72, 73, - nil, nil, nil, nil, nil, 309, 310, 316, 103, 102, - 104, 105, nil, nil, 234, nil, nil, nil, nil, nil, - nil, 45, nil, nil, 107, 106, 108, 97, 56, 99, - 98, 100, 288, 101, 109, 110, nil, 93, 94, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 227, nil, nil, 233, nil, nil, 58, 59, nil, - nil, 60, nil, 629, nil, 283, nil, 44, nil, nil, - 289, nil, nil, nil, nil, nil, 232, nil, nil, nil, - nil, 91, 286, 84, 85, nil, 86, 88, 87, 89, - nil, nil, nil, nil, 82, 90, nil, nil, nil, 74, - 75, 71, 62, 57, 83, 95, 96, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 313, 314, 72, - 73, nil, nil, nil, nil, nil, 309, 310, 316, 103, - 102, 104, 105, nil, nil, 234, nil, nil, nil, nil, - nil, nil, 45, nil, nil, 107, 106, 108, 97, 56, - 99, 98, 100, 288, 101, 109, 110, nil, 93, 94, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 227, nil, nil, 233, nil, nil, 58, 59, - nil, nil, 60, nil, nil, nil, 283, nil, 44, nil, - nil, 289, nil, nil, nil, nil, nil, 232, nil, nil, - nil, nil, 91, 286, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - 74, 75, 71, 62, 57, 83, 95, 96, 63, 64, - nil, nil, nil, 67, nil, 65, 66, 68, 30, 31, - 72, 73, nil, nil, nil, nil, nil, 29, 28, 27, - 103, 102, 104, 105, nil, nil, 234, nil, nil, nil, - nil, nil, nil, 45, nil, nil, 107, 106, 108, 97, - 56, 99, 98, 100, nil, 101, 109, 110, nil, 93, - 94, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 227, nil, nil, 233, nil, nil, 58, - 59, nil, nil, 60, nil, nil, nil, nil, nil, 44, - nil, nil, nil, nil, nil, nil, nil, nil, 232, nil, - nil, nil, nil, 91, 81, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, nil, nil, - nil, 74, 75, 71, 62, 57, 83, 95, 96, 63, - 64, nil, nil, nil, 67, nil, 65, 66, 68, 30, - 31, 72, 73, nil, nil, nil, nil, nil, 29, 28, - 27, 103, 102, 104, 105, nil, nil, 234, nil, nil, - nil, nil, nil, nil, 45, nil, nil, 107, 106, 108, - 97, 56, 99, 98, 100, nil, 101, 109, 110, nil, - 93, 94, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 227, nil, nil, 233, nil, nil, - 58, 59, nil, nil, 60, nil, nil, nil, nil, nil, - 44, nil, nil, nil, nil, nil, nil, nil, nil, 232, - nil, nil, nil, nil, 91, 81, 84, 85, nil, 86, - 88, 87, 89, nil, nil, nil, nil, 82, 90, nil, - nil, nil, 74, 75, 71, 62, 57, 83, 95, 96, - 63, 64, nil, nil, nil, 67, nil, 65, 66, 68, - 30, 31, 72, 73, nil, nil, nil, nil, nil, 29, - 28, 27, 103, 102, 104, 105, nil, nil, 234, nil, - nil, nil, nil, nil, nil, 45, nil, nil, 107, 106, - 108, 97, 56, 99, 98, 100, nil, 101, 109, 110, - nil, 93, 94, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 227, nil, nil, 233, nil, - nil, 58, 59, nil, nil, 60, nil, nil, nil, nil, - nil, 44, nil, nil, nil, nil, nil, nil, nil, nil, - 232, nil, nil, nil, nil, 91, 81, 84, 85, nil, - 86, 88, 87, 89, nil, nil, nil, nil, 82, 90, - nil, nil, nil, 74, 75, 71, 62, 57, 83, 95, - 96, 63, 64, nil, nil, nil, 67, nil, 65, 66, - 68, 30, 31, 72, 73, nil, nil, nil, nil, nil, - 29, 28, 27, 103, 102, 104, 105, nil, nil, 234, - nil, nil, nil, nil, nil, nil, 45, nil, nil, 107, - 106, 108, 97, 56, 99, 98, 100, nil, 101, 109, - 110, nil, 93, 94, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 227, nil, nil, 233, - nil, nil, 58, 59, nil, nil, 60, nil, nil, nil, - nil, nil, 44, nil, nil, nil, nil, nil, nil, nil, - nil, 232, nil, nil, nil, nil, 91, 81, 84, 85, - nil, 86, 88, 87, 89, nil, nil, nil, nil, 82, - 90, nil, nil, nil, 74, 75, 71, 62, 57, 83, - 95, 96, 63, 64, nil, nil, nil, 67, nil, 65, - 66, 68, 30, 31, 72, 73, nil, nil, nil, nil, - nil, 29, 28, 27, 103, 102, 104, 105, nil, nil, - 234, nil, nil, nil, nil, nil, nil, 45, nil, nil, - 107, 106, 108, 97, 56, 99, 98, 100, nil, 101, - 109, 110, nil, 93, 94, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 227, nil, nil, - 233, nil, nil, 58, 59, nil, nil, 60, nil, nil, - nil, nil, nil, 44, nil, nil, nil, nil, nil, nil, - nil, nil, 232, nil, nil, nil, nil, 91, 81, 84, - 85, nil, 86, 88, 87, 89, nil, nil, nil, nil, - 82, 90, nil, nil, nil, 74, 75, 71, 62, 57, - 83, 95, 96, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 313, 314, 72, 73, nil, nil, nil, - nil, nil, 309, 310, 316, 103, 102, 104, 105, nil, - nil, 234, nil, nil, nil, nil, nil, nil, 45, nil, - nil, 107, 106, 108, 97, 56, 99, 98, 100, nil, - 101, 109, 110, nil, 93, 94, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 227, nil, - nil, 233, nil, nil, 58, 59, nil, nil, 60, nil, - nil, nil, nil, nil, 44, nil, nil, nil, nil, nil, - nil, nil, nil, 232, nil, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, 74, 75, 71, 62, - 57, 83, 95, 96, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 313, 314, 72, 73, nil, nil, - nil, nil, nil, 309, 310, 316, 103, 102, 104, 105, - nil, nil, 234, nil, nil, nil, nil, nil, nil, 45, - nil, nil, 107, 106, 108, 97, 56, 99, 98, 100, - nil, 101, 109, 110, nil, 93, 94, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 227, - nil, nil, 233, nil, nil, 58, 59, nil, nil, 60, - nil, nil, nil, nil, nil, 44, nil, nil, nil, nil, - nil, nil, nil, nil, 232, nil, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, nil, nil, 74, 75, 71, - 62, 57, 83, 95, 96, 63, 64, nil, nil, nil, - 67, nil, 65, 66, 68, 313, 314, 72, 73, nil, - nil, nil, nil, nil, 309, 310, 316, 103, 102, 104, - 105, nil, nil, 234, nil, nil, nil, nil, nil, nil, - 45, nil, nil, 107, 106, 108, 97, 56, 99, 98, - 100, nil, 101, 109, 110, nil, 93, 94, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 227, nil, nil, 233, nil, nil, 58, 59, nil, nil, - 60, nil, nil, nil, nil, nil, 44, nil, nil, nil, - nil, nil, nil, nil, nil, 232, nil, nil, nil, nil, - 91, 81, 84, 85, nil, 86, 88, 87, 89, nil, - nil, nil, nil, 82, 90, nil, nil, nil, 74, 75, - 71, 62, 57, 83, 95, 96, 63, 64, nil, nil, - nil, 67, nil, 65, 66, 68, 313, 314, 72, 73, - nil, nil, nil, nil, nil, 309, 310, 316, 103, 102, - 104, 105, nil, nil, 234, nil, nil, nil, nil, nil, - nil, 311, nil, nil, 107, 106, 108, 97, 56, 99, - 98, 100, nil, 101, 109, 110, nil, 93, 94, nil, - nil, 317, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 307, nil, nil, 303, nil, nil, 58, 59, nil, - nil, 60, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 91, 81, 84, 85, nil, 86, 88, 87, 89, - nil, nil, nil, nil, 82, 90, nil, nil, nil, 74, - 75, 71, 62, 57, 83, 95, 96, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 313, 314, 72, - 73, nil, nil, nil, nil, nil, 309, 310, 316, 103, - 102, 104, 105, nil, nil, 234, nil, nil, nil, nil, - nil, nil, 311, nil, nil, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - nil, nil, 317, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 307, nil, nil, 303, nil, nil, 58, 59, - nil, nil, 60, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - 74, 75, 71, 62, 57, 83, 95, 96, 63, 64, - nil, nil, nil, 67, nil, 65, 66, 68, 313, 314, - 72, 73, nil, nil, nil, nil, nil, 309, 310, 316, - 103, 102, 104, 105, nil, nil, 234, nil, nil, nil, - nil, nil, nil, 45, nil, nil, 107, 106, 108, 97, - 56, 99, 98, 100, nil, 101, 109, 110, nil, 93, - 94, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 227, nil, nil, 233, nil, nil, 58, - 59, nil, nil, 60, nil, 407, nil, nil, nil, 44, - nil, nil, nil, nil, nil, nil, nil, nil, 232, nil, - nil, nil, nil, 91, 81, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, nil, nil, - nil, 74, 75, 71, 62, 57, 83, 95, 96, 63, - 64, nil, nil, nil, 67, nil, 65, 66, 68, 313, - 314, 72, 73, nil, nil, nil, nil, nil, 309, 310, - 316, 103, 102, 104, 105, nil, nil, 234, nil, nil, - nil, nil, nil, nil, 45, nil, nil, 107, 106, 108, - 97, 56, 99, 98, 100, nil, 101, 109, 110, nil, - 93, 94, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 227, nil, nil, 233, nil, nil, - 58, 59, nil, nil, 60, nil, nil, nil, nil, nil, - 44, nil, nil, nil, nil, nil, nil, nil, nil, 232, - nil, nil, nil, nil, 91, 81, 84, 85, nil, 86, - 88, 87, 89, nil, nil, nil, nil, 82, 90, nil, - nil, nil, 74, 75, 71, 62, 57, 83, 95, 96, - 63, 64, nil, nil, nil, 67, nil, 65, 66, 68, - 30, 31, 72, 73, nil, nil, nil, nil, nil, 29, - 28, 27, 103, 102, 104, 105, nil, nil, 19, nil, - nil, nil, nil, nil, nil, 45, nil, nil, 107, 106, - 108, 97, 56, 99, 98, 100, nil, 101, 109, 110, - nil, 93, 94, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 227, nil, nil, 233, nil, - nil, 58, 59, nil, nil, 60, nil, nil, nil, nil, - nil, 44, nil, nil, nil, nil, nil, nil, nil, nil, - 20, nil, nil, nil, nil, 91, 81, 84, 85, nil, - 86, 88, 87, 89, nil, nil, nil, nil, 82, 90, - nil, nil, nil, 74, 75, 71, 62, 57, 83, 95, - 96, 63, 64, nil, nil, nil, 67, nil, 65, 66, - 68, 30, 31, 72, 73, nil, nil, nil, nil, nil, - 29, 28, 27, 103, 102, 104, 105, nil, nil, 19, - nil, nil, nil, nil, nil, nil, 45, nil, nil, 107, - 106, 108, 97, 56, 99, 98, 100, nil, 101, 109, - 110, nil, 93, 94, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 227, nil, nil, 233, - nil, nil, 58, 59, nil, nil, 60, nil, nil, nil, - nil, nil, 44, nil, nil, nil, nil, nil, nil, nil, - nil, 20, nil, nil, nil, nil, 91, 81, 84, 85, - nil, 86, 88, 87, 89, nil, nil, nil, nil, 82, - 90, nil, nil, nil, 74, 75, 71, 62, 57, 83, - 95, 96, 63, 64, nil, nil, nil, 67, nil, 65, - 66, 68, 313, 314, 72, 73, nil, nil, nil, nil, - nil, 309, 310, 316, 103, 102, 104, 105, nil, nil, - 234, nil, nil, nil, nil, nil, nil, 45, nil, nil, - 107, 106, 108, 97, 56, 99, 98, 100, nil, 101, - 109, 110, nil, 93, 94, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 227, nil, nil, - 233, nil, nil, 58, 59, nil, nil, 60, nil, nil, - nil, nil, nil, 44, nil, nil, nil, nil, nil, nil, - nil, nil, 232, nil, nil, nil, nil, 91, 81, 84, - 85, nil, 86, 88, 87, 89, nil, nil, nil, nil, - 82, 90, nil, nil, nil, 74, 75, 71, 62, 57, - 83, 95, 96, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 30, 31, 72, 73, nil, nil, nil, - nil, nil, 29, 28, 27, 103, 102, 104, 105, nil, - nil, 234, nil, nil, nil, nil, nil, nil, 45, nil, - nil, 107, 106, 108, 97, 56, 99, 98, 100, nil, - 101, 109, 110, nil, 93, 94, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 227, nil, - nil, 233, nil, nil, 58, 59, nil, nil, 60, nil, - nil, nil, nil, nil, 44, nil, nil, nil, nil, nil, - nil, nil, nil, 232, nil, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, 74, 75, 71, 62, - 57, 83, 95, 96, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 313, 314, 72, 73, nil, nil, - nil, nil, nil, 309, 310, 316, 103, 102, 104, 105, - nil, nil, 234, nil, nil, nil, nil, nil, nil, 45, - nil, nil, 107, 106, 108, 97, 56, 99, 98, 100, - nil, 101, 109, 110, nil, 93, 94, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 227, - nil, nil, 233, nil, nil, 58, 59, nil, nil, 60, - nil, nil, nil, nil, nil, 44, nil, nil, nil, nil, - nil, nil, nil, nil, 232, nil, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, nil, nil, 74, 75, 71, - 62, 57, 83, 95, 96, 63, 64, nil, nil, nil, - 67, nil, 65, 66, 68, 313, 314, 72, 73, nil, - nil, nil, nil, nil, 309, 310, 316, 103, 102, 104, - 105, nil, nil, 234, nil, nil, nil, nil, nil, nil, - 45, nil, nil, 107, 106, 108, 97, 56, 99, 98, - 100, nil, 101, 109, 110, nil, 93, 94, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 227, nil, nil, 233, nil, nil, 58, 59, nil, nil, - 60, nil, nil, nil, nil, nil, 44, nil, nil, nil, - nil, nil, nil, nil, nil, 232, nil, nil, nil, nil, - 91, 81, 84, 85, nil, 86, 88, 87, 89, nil, - nil, nil, nil, 82, 90, nil, nil, nil, 74, 75, - 71, 62, 57, 83, 95, 96, 63, 64, nil, nil, - nil, 67, nil, 65, 66, 68, 313, 314, 72, 73, - nil, nil, nil, nil, nil, 309, 310, 316, 103, 102, - 104, 105, nil, nil, 234, nil, nil, nil, nil, nil, - nil, 45, nil, nil, 107, 106, 108, 97, 56, 99, - 98, 100, nil, 101, 109, 110, nil, 93, 94, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 227, nil, nil, 233, nil, nil, 58, 59, nil, - nil, 60, nil, nil, nil, nil, nil, 44, nil, nil, - nil, nil, nil, nil, nil, nil, 232, nil, nil, nil, - nil, 91, 81, 84, 85, nil, 86, 88, 87, 89, - nil, nil, nil, nil, 82, 90, nil, nil, nil, 74, - 75, 71, 62, 57, 83, 95, 96, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 313, 314, 72, - 73, nil, nil, nil, nil, nil, 309, 310, 316, 103, - 102, 104, 105, nil, nil, 234, nil, nil, nil, nil, - nil, nil, 45, nil, nil, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 227, nil, nil, 233, nil, nil, 58, 59, - nil, nil, 60, nil, nil, nil, nil, nil, 44, nil, - nil, nil, nil, nil, nil, nil, nil, 232, nil, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - 74, 75, 71, 62, 57, 83, 95, 96, 63, 64, - nil, nil, nil, 67, nil, 65, 66, 68, 313, 314, - 72, 73, nil, nil, nil, nil, nil, 309, 310, 316, - 103, 102, 104, 105, nil, nil, 234, nil, nil, nil, - nil, nil, nil, 45, nil, nil, 107, 106, 108, 97, - 56, 99, 98, 100, nil, 101, 109, 110, nil, 93, - 94, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 227, nil, nil, 233, nil, nil, 58, - 59, nil, nil, 60, nil, nil, nil, nil, nil, 44, - nil, nil, nil, nil, nil, nil, nil, nil, 232, nil, - nil, nil, nil, 91, 81, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, nil, nil, - nil, 74, 75, 71, 62, 57, 83, 95, 96, 63, - 64, nil, nil, nil, 67, nil, 65, 66, 68, 313, - 314, 72, 73, nil, nil, nil, nil, nil, 309, 310, - 316, 103, 102, 104, 105, nil, nil, 234, nil, nil, - nil, nil, nil, nil, 311, nil, nil, 107, 106, 108, - 97, 56, 99, 98, 100, nil, 101, 109, 110, nil, - 93, 94, nil, nil, 317, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 856, nil, nil, 233, nil, nil, - 58, 59, nil, nil, 60, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 91, 81, 84, 85, nil, 86, - 88, 87, 89, nil, nil, nil, nil, 82, 90, nil, - nil, nil, 74, 75, 71, 62, 57, 83, 95, 96, - 63, 64, nil, nil, nil, 67, nil, 65, 66, 68, - 313, 314, 72, 73, nil, nil, nil, nil, nil, 309, - 310, 316, 103, 102, 104, 105, nil, nil, 234, nil, - nil, nil, nil, nil, nil, 45, nil, nil, 107, 106, - 108, 97, 56, 99, 98, 100, nil, 101, 109, 110, - nil, 93, 94, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 227, nil, nil, 233, nil, - nil, 58, 59, nil, nil, 60, nil, nil, nil, nil, - nil, 44, nil, nil, nil, nil, nil, nil, nil, nil, - 232, nil, nil, nil, nil, 91, 81, 84, 85, nil, - 86, 88, 87, 89, nil, nil, nil, nil, 82, 90, - nil, nil, nil, 74, 75, 71, 62, 57, 83, 95, - 96, 63, 64, nil, nil, nil, 67, nil, 65, 66, - 68, 30, 31, 72, 73, nil, nil, nil, nil, nil, - 29, 28, 27, 103, 102, 104, 105, nil, nil, 19, - nil, nil, nil, nil, nil, nil, 45, nil, nil, 107, - 106, 108, 97, 56, 99, 98, 100, nil, 101, 109, - 110, nil, 93, 94, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 227, nil, nil, 233, - nil, nil, 58, 59, nil, nil, 60, nil, nil, nil, - nil, nil, 44, nil, nil, nil, nil, nil, nil, nil, - nil, 20, nil, nil, nil, nil, 91, 81, 84, 85, - nil, 86, 88, 87, 89, nil, nil, nil, nil, 82, - 90, nil, nil, nil, 74, 75, 71, 62, 57, 83, - 95, 96, 63, 64, nil, nil, nil, 67, nil, 65, - 66, 68, 313, 314, 72, 73, nil, nil, nil, nil, - nil, 309, 310, 316, 103, 102, 104, 105, nil, nil, - 234, nil, nil, nil, nil, nil, nil, 45, nil, nil, - 107, 106, 108, 97, 56, 99, 98, 100, nil, 101, - 109, 110, nil, 93, 94, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 227, nil, nil, - 233, nil, nil, 58, 59, nil, nil, 60, nil, 629, - nil, nil, nil, 44, nil, nil, nil, nil, nil, nil, - nil, nil, 232, nil, nil, nil, nil, 91, 81, 84, - 85, nil, 86, 88, 87, 89, nil, nil, nil, nil, - 82, 90, nil, nil, nil, 74, 75, 71, 62, 57, - 83, 95, 96, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 313, 314, 72, 73, nil, nil, nil, - nil, nil, 309, 310, 316, 103, 102, 104, 105, nil, - nil, 234, nil, nil, nil, nil, nil, nil, 45, nil, - nil, 107, 106, 108, 97, 56, 99, 98, 100, 288, - 101, 109, 110, nil, 93, 94, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 227, nil, - nil, 233, nil, nil, 58, 59, nil, nil, 60, nil, - nil, nil, 283, nil, 44, nil, nil, 289, nil, nil, - nil, nil, nil, 232, nil, nil, nil, nil, 91, 286, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, 74, 75, 71, 62, - 57, 83, 95, 96, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 313, 314, 72, 73, nil, nil, - nil, nil, nil, 309, 310, 316, 103, 102, 104, 105, - nil, nil, 234, nil, nil, nil, nil, nil, nil, 45, - nil, nil, 107, 106, 108, 97, 56, 99, 98, 100, - nil, 101, 109, 110, nil, 93, 94, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 227, - nil, nil, 233, nil, nil, 58, 59, nil, nil, 60, - nil, nil, nil, nil, nil, 44, nil, nil, nil, nil, - nil, nil, nil, nil, 232, nil, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, nil, nil, 74, 75, 71, - 62, 57, 83, 95, 96, 63, 64, nil, nil, nil, - 67, nil, 65, 66, 68, 313, 314, 72, 73, nil, - nil, nil, nil, nil, 309, 310, 316, 103, 102, 104, - 105, nil, nil, 234, nil, nil, nil, nil, nil, nil, - 311, nil, nil, 107, 106, 108, 97, 56, 99, 98, - 100, nil, 101, 109, 110, nil, 93, 94, nil, nil, - 317, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 856, nil, nil, 233, nil, nil, 58, 59, nil, nil, - 60, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 91, 81, 84, 85, nil, 86, 88, 87, 89, nil, - nil, nil, nil, 82, 90, nil, nil, nil, 74, 75, - 71, 62, 57, 83, 95, 96, 63, 64, nil, nil, - nil, 67, nil, 65, 66, 68, 313, 314, 72, 73, - nil, nil, nil, nil, nil, 309, 310, 316, 103, 102, - 104, 105, nil, nil, 234, nil, nil, nil, nil, nil, - nil, 311, nil, nil, 107, 106, 108, 97, 56, 99, - 98, 100, nil, 101, 109, 110, nil, 93, 94, nil, - nil, 317, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 930, nil, nil, 233, nil, nil, 58, 59, nil, - nil, 60, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 91, 81, 84, 85, nil, 86, 88, 87, 89, - nil, nil, nil, nil, 82, 90, nil, nil, nil, 74, - 75, 71, 62, 57, 83, 95, 96, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 234, nil, nil, nil, nil, - nil, nil, 45, nil, nil, 107, 106, 108, 97, 56, - 99, 98, 100, 288, 101, 109, 110, nil, 93, 94, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 227, nil, nil, 233, nil, nil, 58, 59, - nil, nil, 60, nil, 285, nil, 283, nil, 44, nil, - nil, 289, nil, nil, nil, nil, nil, 232, nil, nil, - nil, nil, 91, 286, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - nil, nil, nil, 62, nil, 83, 95, 96, 175, 186, - 176, 199, 172, 192, 182, 181, 202, 203, 197, 180, - 179, 174, 200, 204, 205, 184, 173, 187, 191, 193, - 185, 178, nil, nil, nil, 194, 201, 196, 195, 188, - 198, 183, 171, 190, 189, nil, nil, nil, nil, nil, - 170, 177, 168, 169, 165, 166, 167, 126, 128, 125, - nil, 127, nil, nil, nil, nil, nil, nil, nil, 159, - 160, nil, 156, 138, 139, 140, 147, 144, 146, nil, - nil, 141, 142, nil, nil, nil, 161, 162, 148, 149, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 153, 152, nil, 137, 158, 155, 154, - 163, 150, 151, 145, 143, 135, 157, 136, nil, nil, - 164, 91, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 90, 175, 186, 176, 199, - 172, 192, 182, 181, 202, 203, 197, 180, 179, 174, - 200, 204, 205, 184, 173, 187, 191, 193, 185, 178, - nil, nil, nil, 194, 201, 196, 195, 188, 198, 183, - 171, 190, 189, nil, nil, nil, nil, nil, 170, 177, - 168, 169, 165, 166, 167, 126, 128, nil, nil, 127, - nil, nil, nil, nil, nil, nil, nil, 159, 160, nil, - 156, 138, 139, 140, 147, 144, 146, nil, nil, 141, - 142, nil, nil, nil, 161, 162, 148, 149, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 153, 152, nil, 137, 158, 155, 154, 163, 150, - 151, 145, 143, 135, 157, 136, nil, nil, 164, 91, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 90, 175, 186, 176, 199, 172, 192, - 182, 181, 202, 203, 197, 180, 179, 174, 200, 204, - 205, 184, 173, 187, 191, 193, 185, 178, nil, nil, - nil, 194, 201, 196, 195, 188, 198, 183, 171, 190, - 189, nil, nil, nil, nil, nil, 170, 177, 168, 169, - 165, 166, 167, 126, 128, nil, nil, 127, nil, nil, - nil, nil, nil, nil, nil, 159, 160, nil, 156, 138, - 139, 140, 147, 144, 146, nil, nil, 141, 142, nil, - nil, nil, 161, 162, 148, 149, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 153, - 152, nil, 137, 158, 155, 154, 163, 150, 151, 145, - 143, 135, 157, 136, nil, nil, 164, 91, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 90, 175, 186, 176, 199, 172, 192, 182, 181, - 202, 203, 197, 180, 179, 174, 200, 204, 205, 184, - 173, 187, 191, 193, 185, 178, nil, nil, nil, 194, - 201, 196, 195, 188, 198, 183, 171, 190, 189, nil, - nil, nil, nil, nil, 170, 177, 168, 169, 165, 166, - 167, 126, 128, nil, nil, 127, nil, nil, nil, nil, - nil, nil, nil, 159, 160, nil, 156, 138, 139, 140, - 147, 144, 146, nil, nil, 141, 142, nil, nil, nil, - 161, 162, 148, 149, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 153, 152, nil, - 137, 158, 155, 154, 163, 150, 151, 145, 143, 135, - 157, 136, nil, nil, 164, 91, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 90, - 175, 186, 176, 199, 172, 192, 182, 181, 202, 203, - 197, 180, 179, 174, 200, 204, 205, 184, 173, 187, - 191, 193, 185, 178, nil, nil, nil, 194, 201, 196, - 374, 373, 375, 372, 171, 190, 189, nil, nil, nil, - nil, nil, 170, 177, 168, 169, 369, 370, 371, 367, - 128, 99, 98, 368, nil, 101, nil, nil, nil, nil, - nil, 159, 160, nil, 156, 138, 139, 140, 147, 144, - 146, nil, nil, 141, 142, nil, nil, nil, 161, 162, - 148, 149, nil, nil, nil, nil, nil, 379, nil, nil, - nil, nil, nil, nil, nil, 153, 152, nil, 137, 158, - 155, 154, 163, 150, 151, 145, 143, 135, 157, 136, - nil, nil, 164, 175, 186, 176, 199, 172, 192, 182, - 181, 202, 203, 197, 180, 179, 174, 200, 204, 205, - 184, 173, 187, 191, 193, 185, 178, nil, nil, nil, - 194, 201, 196, 195, 188, 198, 183, 171, 190, 189, - nil, nil, nil, nil, nil, 170, 177, 168, 169, 165, - 166, 167, 126, 128, nil, nil, 127, nil, nil, nil, - nil, nil, nil, nil, 159, 160, nil, 156, 138, 139, - 140, 147, 144, 146, nil, nil, 141, 142, nil, nil, - nil, 161, 162, 148, 149, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 153, 152, - nil, 137, 158, 155, 154, 163, 150, 151, 145, 143, - 135, 157, 136, 416, 420, 164, nil, 417, nil, nil, - nil, nil, nil, nil, nil, 159, 160, nil, 156, 138, - 139, 140, 147, 144, 146, nil, nil, 141, 142, nil, - nil, nil, 161, 162, 148, 149, nil, nil, nil, nil, - nil, 267, nil, nil, nil, nil, nil, nil, nil, 153, - 152, nil, 137, 158, 155, 154, 163, 150, 151, 145, - 143, 135, 157, 136, 423, 427, 164, nil, 422, nil, - nil, nil, nil, nil, nil, nil, 159, 160, nil, 156, - 138, 139, 140, 147, 144, 146, nil, nil, 141, 142, - nil, nil, nil, 161, 162, 148, 149, nil, nil, nil, - nil, nil, 267, nil, nil, nil, nil, nil, nil, nil, - 153, 152, nil, 137, 158, 155, 154, 163, 150, 151, - 145, 143, 135, 157, 136, 478, 420, 164, nil, 479, - nil, nil, nil, nil, nil, nil, nil, 159, 160, nil, - 156, 138, 139, 140, 147, 144, 146, nil, nil, 141, - 142, nil, nil, nil, 161, 162, 148, 149, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 153, 152, nil, 137, 158, 155, 154, 163, 150, - 151, 145, 143, 135, 157, 136, 608, 420, 164, nil, - 609, nil, nil, nil, nil, nil, nil, nil, 159, 160, - nil, 156, 138, 139, 140, 147, 144, 146, nil, nil, - 141, 142, nil, nil, nil, 161, 162, 148, 149, nil, - nil, nil, nil, nil, 267, nil, nil, nil, nil, nil, - nil, nil, 153, 152, nil, 137, 158, 155, 154, 163, - 150, 151, 145, 143, 135, 157, 136, 610, 427, 164, - nil, 611, nil, nil, nil, nil, nil, nil, nil, 159, - 160, nil, 156, 138, 139, 140, 147, 144, 146, nil, - nil, 141, 142, nil, nil, nil, 161, 162, 148, 149, - nil, nil, nil, nil, nil, 267, nil, nil, nil, nil, - nil, nil, nil, 153, 152, nil, 137, 158, 155, 154, - 163, 150, 151, 145, 143, 135, 157, 136, 640, 420, - 164, nil, 641, nil, nil, nil, nil, nil, nil, nil, - 159, 160, nil, 156, 138, 139, 140, 147, 144, 146, - nil, nil, 141, 142, nil, nil, nil, 161, 162, 148, - 149, nil, nil, nil, nil, nil, 267, nil, nil, nil, - nil, nil, nil, nil, 153, 152, nil, 137, 158, 155, - 154, 163, 150, 151, 145, 143, 135, 157, 136, 643, - 427, 164, nil, 644, nil, nil, nil, nil, nil, nil, - nil, 159, 160, nil, 156, 138, 139, 140, 147, 144, - 146, nil, nil, 141, 142, nil, nil, nil, 161, 162, - 148, 149, nil, nil, nil, nil, nil, 267, nil, nil, - nil, nil, nil, nil, nil, 153, 152, nil, 137, 158, - 155, 154, 163, 150, 151, 145, 143, 135, 157, 136, - 608, 420, 164, nil, 609, nil, nil, nil, nil, nil, - nil, nil, 159, 160, nil, 156, 138, 139, 140, 147, - 144, 146, nil, nil, 141, 142, nil, nil, nil, 161, - 162, 148, 149, nil, nil, nil, nil, nil, 267, nil, - nil, nil, nil, nil, nil, nil, 153, 152, nil, 137, - 158, 155, 154, 163, 150, 151, 145, 143, 135, 157, - 136, 610, 427, 164, nil, 611, nil, nil, nil, nil, - nil, nil, nil, 159, 160, nil, 156, 138, 139, 140, - 147, 144, 146, nil, nil, 141, 142, nil, nil, nil, - 161, 162, 148, 149, nil, nil, nil, nil, nil, 267, - nil, nil, nil, nil, nil, nil, nil, 153, 152, nil, - 137, 158, 155, 154, 163, 150, 151, 145, 143, 135, - 157, 136, 701, 420, 164, nil, 702, nil, nil, nil, - nil, nil, nil, nil, 159, 160, nil, 156, 138, 139, - 140, 147, 144, 146, nil, nil, 141, 142, nil, nil, - nil, 161, 162, 148, 149, nil, nil, nil, nil, nil, - 267, nil, nil, nil, nil, nil, nil, nil, 153, 152, - nil, 137, 158, 155, 154, 163, 150, 151, 145, 143, - 135, 157, 136, 703, 427, 164, nil, 704, nil, nil, - nil, nil, nil, nil, nil, 159, 160, nil, 156, 138, - 139, 140, 147, 144, 146, nil, nil, 141, 142, nil, - nil, nil, 161, 162, 148, 149, nil, nil, nil, nil, - nil, 267, nil, nil, nil, nil, nil, nil, nil, 153, - 152, nil, 137, 158, 155, 154, 163, 150, 151, 145, - 143, 135, 157, 136, 706, 427, 164, nil, 707, nil, - nil, nil, nil, nil, nil, nil, 159, 160, nil, 156, - 138, 139, 140, 147, 144, 146, nil, nil, 141, 142, - nil, nil, nil, 161, 162, 148, 149, nil, nil, nil, - nil, nil, 267, nil, nil, nil, nil, nil, nil, nil, - 153, 152, nil, 137, 158, 155, 154, 163, 150, 151, - 145, 143, 135, 157, 136, 478, 420, 164, nil, 479, - nil, nil, nil, nil, nil, nil, nil, 159, 160, nil, - 156, 138, 139, 140, 147, 144, 146, nil, nil, 141, - 142, nil, nil, nil, 161, 162, 148, 149, nil, nil, - nil, nil, nil, 267, nil, nil, nil, nil, nil, nil, - nil, 153, 152, nil, 137, 158, 155, 154, 163, 150, - 151, 145, 143, 135, 157, 136, 973, 427, 164, nil, - 972, nil, nil, nil, nil, nil, nil, nil, 159, 160, - nil, 156, 138, 139, 140, 147, 144, 146, nil, nil, - 141, 142, nil, nil, nil, 161, 162, 148, 149, nil, - nil, nil, nil, nil, 267, nil, nil, nil, nil, nil, - nil, nil, 153, 152, nil, 137, 158, 155, 154, 163, - 150, 151, 145, 143, 135, 157, 136, 999, 420, 164, - nil, 1000, nil, nil, nil, nil, nil, nil, nil, 159, - 160, nil, 156, 138, 139, 140, 147, 144, 146, nil, - nil, 141, 142, nil, nil, nil, 161, 162, 148, 149, - nil, nil, nil, nil, nil, 267, nil, nil, nil, nil, - nil, nil, nil, 153, 152, nil, 137, 158, 155, 154, - 163, 150, 151, 145, 143, 135, 157, 136, 1001, 427, - 164, nil, 1002, nil, nil, nil, nil, nil, nil, nil, - 159, 160, nil, 156, 138, 139, 140, 147, 144, 146, - nil, nil, 141, 142, nil, nil, nil, 161, 162, 148, - 149, nil, nil, nil, nil, nil, 267, nil, nil, nil, - nil, nil, nil, nil, 153, 152, nil, 137, 158, 155, - 154, 163, 150, 151, 145, 143, 135, 157, 136, nil, - 672, 164, 669, 668, 667, 677, 670, nil, 672, nil, - 669, 668, 667, 677, 670, 680, nil, nil, nil, nil, - nil, nil, nil, 680, nil, 672, nil, 669, 668, 667, - 677, 670, nil, nil, nil, nil, nil, 675, nil, nil, - 680, nil, nil, nil, nil, 675, 685, 684, 688, 687, - nil, nil, nil, 681, 685, 684, 688, 687, nil, nil, - nil, 681, 675, nil, 672, nil, 669, 668, 667, 677, - 670, 685, 684, 688, 687, nil, nil, nil, 681, 680, - nil, 672, nil, 669, 668, 667, 677, 670, nil, 672, - nil, 669, 668, 667, 677, 670, 680, nil, nil, nil, - nil, 675, nil, nil, 680, nil, nil, nil, nil, nil, - 685, 684, 688, 687, nil, nil, nil, 681, 675, nil, - nil, nil, nil, nil, nil, nil, 675, 685, 684, 688, - 687, nil, nil, nil, 681, 685, 684, 688, 687, nil, - nil, 672, 681, 669, 668, 667, 677, 670, nil, 672, - nil, 669, 668, 667, 677, 670, 680, nil, nil, nil, - nil, nil, nil, nil, 680, nil, 672, nil, 669, 668, - 667, 677, 670, nil, nil, nil, nil, nil, 675, nil, - nil, 680, nil, nil, nil, nil, 675, 685, 684, 688, - 687, nil, nil, nil, 681, 685, 684, 688, 687, nil, - nil, nil, 681, 675, nil, 672, nil, 669, 668, 667, - 677, 670, nil, nil, 688, 687, nil, nil, nil, 681, - 680, nil, 672, nil, 669, 668, 667, 677, 670, 672, - nil, 669, 668, 667, 677, 670, nil, 680, nil, nil, - nil, nil, 675, nil, 680, nil, 672, nil, 669, 668, - 667, 677, 670, 688, 687, nil, nil, nil, 681, 675, - nil, 680, nil, nil, nil, nil, 675, nil, 685, 684, - 688, 687, nil, nil, nil, 681, nil, 688, 687, nil, - nil, nil, 681, 675, nil, 672, nil, 669, 668, 667, - 677, 670, nil, nil, 688, 687, nil, nil, nil, 681, - 680, nil, 672, nil, 669, 668, 667, 677, 670, 672, - nil, 669, 668, 667, 677, 670, nil, 680, nil, nil, - nil, nil, 675, nil, 680, nil, nil, nil, nil, nil, - nil, nil, nil, 688, 687, nil, nil, nil, 681, 675, - nil, nil, nil, nil, nil, nil, 675, nil, nil, nil, - 688, 687, nil, nil, nil, 681, nil, 688, 687, nil, - nil, nil, 681 ] - -racc_action_check = [ - 97, 440, 440, 564, 564, 15, 348, 97, 97, 97, - 58, 341, 97, 97, 97, 24, 97, 26, 19, 386, - 476, 484, 24, 342, 97, 387, 97, 97, 97, 61, - 358, 620, 225, 1, 358, 349, 97, 97, 699, 97, - 97, 97, 97, 97, 865, 892, 927, 928, 931, 352, - 58, 550, 15, 635, 978, 476, 484, 332, 312, 19, - 332, 7, 15, 635, 485, 701, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 24, 26, 97, 97, 97, 386, 97, 97, 542, 225, - 97, 387, 702, 97, 97, 440, 97, 564, 97, 485, - 97, 10, 97, 97, 26, 97, 97, 97, 97, 97, - 999, 97, 100, 97, 1000, 348, 61, 792, 620, 100, - 100, 100, 312, 1001, 100, 100, 100, 97, 100, 341, - 97, 97, 97, 97, 341, 97, 100, 97, 100, 100, - 100, 342, 97, 97, 349, 312, 342, 640, 100, 100, - 1002, 100, 100, 100, 100, 100, 699, 1020, 352, 699, - 550, 699, 865, 892, 927, 928, 931, 865, 892, 927, - 928, 931, 978, 543, 701, 703, 824, 978, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 542, 12, 100, 100, 100, 542, 100, 100, - 1001, 702, 100, 13, 641, 100, 100, 825, 100, 704, - 100, 3, 100, 640, 100, 100, 3, 100, 100, 100, - 100, 100, 422, 100, 226, 100, 792, 1002, 999, 422, - 422, 422, 1000, 999, 621, 422, 422, 1000, 422, 100, - 703, 1001, 100, 100, 100, 100, 1001, 100, 16, 100, - 650, 650, 228, 640, 100, 100, 640, 22, 422, 422, - 780, 422, 422, 422, 422, 422, 640, 37, 1002, 621, - 641, 367, 643, 1002, 704, 1020, 333, 543, 367, 333, - 1020, 226, 543, 446, 703, 824, 560, 560, 422, 422, - 422, 422, 422, 422, 422, 422, 422, 422, 422, 422, - 422, 422, 40, 608, 422, 422, 422, 368, 422, 228, - 641, 825, 422, 641, 368, 422, 825, 897, 704, 897, - 422, 45, 422, 641, 422, 422, 780, 422, 422, 422, - 422, 422, 381, 422, 423, 422, 367, 643, 643, 79, - 446, 423, 423, 423, 650, 17, 17, 423, 423, 422, - 423, 79, 422, 422, 111, 422, 206, 422, 292, 423, - 608, 79, 227, 292, 422, 422, 780, 356, 38, 780, - 423, 423, 368, 423, 423, 423, 423, 423, 643, 780, - 560, 643, 340, 340, 229, 560, 809, 609, 809, 809, - 809, 643, 809, 41, 41, 230, 381, 381, 381, 234, - 423, 423, 423, 423, 423, 423, 423, 423, 423, 423, - 423, 423, 423, 423, 266, 38, 423, 423, 423, 356, - 423, 317, 317, 495, 423, 38, 356, 423, 345, 753, - 280, 356, 423, 345, 423, 356, 423, 423, 39, 423, - 423, 423, 423, 423, 609, 423, 423, 423, 575, 948, - 577, 948, 948, 948, 356, 948, 369, 828, 281, 357, - 284, 423, 828, 369, 423, 423, 610, 423, 809, 423, - 296, 41, 41, 610, 610, 610, 423, 423, 610, 610, - 610, 297, 610, 299, 356, 39, 753, 495, 495, 495, - 370, 610, 610, 610, 610, 39, 833, 370, 300, 317, - 317, 833, 610, 610, 495, 610, 610, 610, 610, 610, - 301, 357, 575, 575, 577, 577, 382, 336, 357, 383, - 336, 369, 575, 357, 577, 384, 656, 357, 307, 656, - 310, 948, 610, 610, 610, 610, 610, 610, 610, 610, - 610, 610, 610, 610, 610, 610, 357, 311, 610, 610, - 610, 917, 610, 610, 917, 370, 610, 385, 321, 610, - 610, 388, 610, 371, 610, 316, 610, 416, 610, 610, - 371, 610, 610, 610, 610, 610, 357, 610, 610, 610, - 382, 382, 382, 383, 383, 383, 318, 372, 322, 384, - 384, 384, 325, 610, 372, 330, 610, 610, 610, 610, - 334, 610, 335, 610, 611, 321, 526, 526, 610, 610, - 337, 611, 611, 611, 416, 321, 611, 611, 611, 346, - 611, 385, 385, 385, 416, 388, 388, 388, 371, 125, - 611, 611, 611, 347, 125, 125, 690, 690, 417, 351, - 611, 611, 353, 611, 611, 611, 611, 611, 362, 14, - 397, 46, 372, 224, 373, 374, 14, 403, 46, 375, - 224, 373, 374, 797, 797, 14, 375, 46, 406, 224, - 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, - 611, 611, 611, 611, 408, 417, 611, 611, 611, 452, - 611, 611, 304, 412, 611, 417, 377, 611, 611, 304, - 611, 414, 611, 377, 611, 591, 611, 611, 304, 611, - 611, 611, 611, 611, 14, 611, 46, 611, 224, 373, - 374, 452, 305, 415, 375, 452, 452, 424, 453, 305, - 432, 611, 989, 989, 611, 611, 611, 611, 305, 611, - 442, 611, 27, 454, 455, 456, 611, 611, 457, 27, - 27, 27, 591, 794, 27, 27, 27, 304, 27, 482, - 453, 377, 591, 794, 453, 453, 486, 27, 27, 27, - 568, 568, 502, 503, 568, 568, 568, 506, 27, 27, - 508, 27, 27, 27, 27, 27, 889, 305, 889, 889, - 889, 306, 889, 513, 516, 524, 794, 794, 306, 525, - 675, 794, 675, 675, 675, 527, 675, 306, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 539, 889, 27, 27, 27, 544, 545, 27, - 562, 27, 27, 572, 580, 27, 27, 675, 27, 582, - 27, 588, 27, 592, 27, 27, 675, 27, 27, 27, - 27, 27, 28, 27, 27, 27, 306, 597, 602, 28, - 28, 28, 612, 614, 28, 28, 28, 308, 28, 27, - 619, 626, 27, 27, 308, 27, 628, 27, 28, 28, - 634, 637, 639, 308, 27, 642, 645, 646, 28, 28, - 649, 28, 28, 28, 28, 28, 651, 654, 660, 323, - 661, 350, 663, 664, 665, 674, 323, 806, 350, 806, - 806, 806, 682, 806, 686, 323, 689, 350, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, - 28, 28, 308, 692, 28, 28, 28, 697, 700, 28, - 709, 28, 28, 713, 806, 28, 28, 732, 28, 737, - 28, 755, 28, 806, 28, 28, 756, 28, 28, 28, - 28, 28, 56, 28, 323, 28, 350, 758, 759, 56, - 56, 56, 760, 762, 56, 56, 56, 360, 56, 28, - 763, 764, 28, 28, 360, 28, 765, 28, 56, 56, - 56, 769, 773, 360, 28, 774, 779, 783, 56, 56, - 786, 56, 56, 56, 56, 56, 787, 512, 790, 553, - 793, 855, 808, 810, 512, 815, 553, 818, 855, 827, - 831, 832, 835, 512, 836, 553, 852, 855, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, - 56, 56, 360, 921, 56, 56, 56, 856, 858, 56, - 921, 872, 56, 873, 877, 56, 56, 878, 56, 921, - 56, 880, 56, 881, 56, 56, 883, 56, 56, 56, - 56, 56, 512, 56, 553, 56, 855, 886, 842, 949, - 929, 949, 949, 949, 888, 949, 894, 929, 842, 56, - 895, 706, 56, 56, 56, 56, 929, 56, 418, 56, - 901, 905, 907, 910, 56, 418, 418, 418, 921, 911, - 418, 418, 418, 912, 418, 913, 949, 471, 915, 930, - 950, 842, 842, 418, 418, 418, 842, 853, 972, 853, - 853, 853, 973, 853, 418, 418, 974, 418, 418, 418, - 418, 418, 979, 706, 980, 929, 981, 982, 983, 471, - 706, 984, 985, 471, 471, 706, 471, 471, 987, 706, - 990, 991, 992, 993, 418, 418, 418, 418, 418, 418, - 418, 418, 418, 418, 418, 418, 418, 418, 706, 994, - 418, 418, 418, 644, 995, 418, 998, 418, 418, 1011, - 644, 418, 418, 1021, 418, 644, 418, 1022, 418, 644, - 418, 418, 1023, 418, 418, 418, 418, 418, 706, 418, - 418, 418, nil, 887, nil, 887, 887, 887, nil, 887, - 707, nil, nil, nil, nil, 418, nil, 707, 418, 418, - 427, 418, 707, 418, nil, nil, 707, 427, 427, 427, - 418, nil, 427, 427, 427, nil, 427, 462, 644, nil, - 887, nil, nil, nil, nil, 427, 427, 427, 427, 887, - nil, nil, nil, 462, 462, nil, 427, 427, nil, 427, - 427, 427, 427, 427, 986, nil, 986, 986, 986, 462, - 986, 462, nil, 462, 462, 707, 462, 462, nil, nil, - 462, nil, 462, nil, nil, nil, 427, 427, 427, 427, - 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, - nil, 986, 427, 427, 427, 472, nil, 427, nil, nil, - 427, nil, nil, 427, 427, nil, 427, nil, 427, nil, - 427, nil, 427, 427, nil, 427, 427, 427, 427, 427, - nil, 427, 427, 427, nil, nil, nil, 472, nil, nil, - nil, 472, 472, nil, 472, 472, nil, 427, nil, nil, - 427, 427, 427, 427, nil, 427, 428, 427, nil, nil, - nil, nil, 427, 428, 428, 428, nil, nil, 428, 428, - 428, 463, 428, 971, nil, 971, 971, 971, nil, 971, - nil, 428, 428, 428, 428, nil, nil, 463, 463, nil, - nil, nil, 428, 428, nil, 428, 428, 428, 428, 428, - nil, nil, nil, 463, nil, 463, nil, 463, 463, nil, - 463, 463, nil, nil, 463, nil, 463, 6, 6, 6, - 6, 6, 428, 428, 428, 428, 428, 428, 428, 428, - 428, 428, 428, 428, 428, 428, nil, nil, 428, 428, - 428, nil, nil, 428, nil, nil, 428, nil, nil, 428, - 428, nil, 428, nil, 428, nil, 428, nil, 428, 428, - nil, 428, 428, 428, 428, 428, nil, 428, 428, 428, - 295, 295, 295, 295, 295, nil, nil, nil, 988, nil, - 988, 988, 988, 428, 988, nil, 428, 428, 428, 428, - nil, 428, 477, 428, nil, nil, nil, nil, 428, 477, - 477, 477, nil, nil, 477, 477, 477, 616, 477, 616, - 616, 616, 616, 616, nil, 988, nil, 477, 477, nil, - nil, nil, 616, nil, nil, nil, 460, nil, 477, 477, - nil, 477, 477, 477, 477, 477, 500, 500, 500, 500, - 500, nil, 460, 460, 616, nil, 537, nil, 537, 537, - 537, 537, 537, 616, 616, 616, 616, nil, 460, nil, - 616, 537, 460, 460, nil, 460, 460, nil, nil, 477, - nil, nil, nil, nil, 458, nil, 477, nil, nil, nil, - nil, 477, 477, 537, 537, nil, 616, nil, nil, nil, - 458, 458, 537, 537, 537, 537, nil, nil, nil, 537, - nil, nil, nil, nil, 477, 477, 458, nil, 458, nil, - 458, 458, nil, 458, 458, nil, nil, nil, nil, 477, - nil, nil, 477, nil, nil, nil, nil, 477, 0, 0, - 0, 0, 0, 0, 477, nil, nil, 0, 0, nil, - nil, nil, 0, nil, 0, 0, 0, 0, 0, 0, - 0, nil, nil, nil, nil, nil, 0, 0, 0, 0, - 0, 0, 0, nil, nil, 0, nil, nil, nil, nil, - 435, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, nil, 0, 0, 0, nil, 0, 0, - 0, 0, 0, 435, 435, 435, 435, 435, 435, 435, - 435, 435, 435, 435, nil, 435, 435, nil, nil, 435, - 435, nil, 0, nil, nil, 0, nil, nil, 0, 0, - nil, nil, 0, nil, 0, 435, nil, 435, 0, 435, - 435, nil, 435, 435, 435, 435, 435, 0, 435, nil, - nil, nil, 0, 0, 0, 0, nil, 0, 0, 0, - 0, nil, nil, nil, nil, 0, 0, nil, 435, nil, - 435, nil, nil, 0, nil, 0, 0, 0, 33, 33, - 33, 33, 33, 33, nil, nil, nil, 33, 33, nil, - nil, nil, 33, nil, 33, 33, 33, 33, 33, 33, - 33, nil, nil, nil, nil, nil, 33, 33, 33, 33, - 33, 33, 33, nil, nil, 33, nil, nil, nil, nil, - 411, 33, 33, 33, 33, 33, 33, 33, 33, 33, - 33, 33, 33, nil, 33, 33, 33, nil, 33, 33, - 33, 33, 33, 411, 411, 411, 411, 411, 411, 411, - 411, 411, 411, 411, nil, 411, 411, nil, nil, 411, - 411, nil, 33, nil, nil, 33, nil, nil, 33, 33, - nil, nil, 33, nil, 33, 411, nil, 411, 33, 411, - 411, nil, 411, 411, 411, 411, 411, 33, 411, nil, - nil, nil, 33, 33, 33, 33, nil, 33, 33, 33, - 33, nil, nil, nil, nil, 33, 33, nil, 411, nil, - nil, nil, nil, 33, nil, 33, 33, 33, 123, 123, - 123, 123, 123, 123, nil, nil, nil, 123, 123, nil, - nil, nil, 123, nil, 123, 123, 123, 123, 123, 123, - 123, nil, nil, nil, nil, nil, 123, 123, 123, 123, - 123, 123, 123, nil, nil, 123, nil, nil, nil, nil, - 613, 123, 123, 123, 123, 123, 123, 123, 123, 123, - 123, 123, 123, nil, 123, 123, 123, nil, 123, 123, - 123, 123, 123, 613, 613, 613, 613, 613, 613, 613, - 613, 613, 613, 613, nil, 613, 613, nil, nil, 613, - 613, nil, 123, nil, nil, 123, nil, nil, 123, 123, - nil, nil, 123, nil, 123, 613, nil, 613, 123, 613, - 613, nil, 613, 613, 613, 613, 613, 123, 613, nil, - nil, nil, 123, 123, 123, 123, nil, 123, 123, 123, - 123, nil, nil, nil, nil, 123, 123, nil, 613, nil, - nil, nil, nil, 123, nil, 123, 123, 123, 208, 208, - 208, 208, 208, 208, nil, nil, nil, 208, 208, nil, - nil, nil, 208, nil, 208, 208, 208, 208, 208, 208, - 208, nil, nil, nil, nil, nil, 208, 208, 208, 208, - 208, 208, 208, nil, nil, 208, nil, nil, nil, nil, - nil, 208, 208, 208, 208, 208, 208, 208, 208, 208, - 208, 208, 208, nil, 208, 208, 208, nil, 208, 208, - 208, 208, 208, 21, 21, 21, 21, 21, 21, 21, - 21, 21, 21, 21, nil, 21, 21, nil, nil, 21, - 21, nil, 208, nil, nil, 208, nil, nil, 208, 208, - nil, nil, 208, nil, 208, 21, nil, 21, 208, 21, - 21, nil, 21, 21, 21, 21, 21, 208, 21, nil, - nil, nil, 208, 208, 208, 208, nil, 208, 208, 208, - 208, nil, nil, nil, nil, 208, 208, nil, 21, nil, - nil, nil, nil, 208, nil, 208, 208, 208, 233, 233, - 233, 233, 233, 233, nil, nil, nil, 233, 233, nil, - nil, nil, 233, nil, 233, 233, 233, 233, 233, 233, - 233, nil, nil, nil, nil, nil, 233, 233, 233, 233, - 233, 233, 233, nil, nil, 233, nil, nil, nil, nil, - nil, 233, 233, 233, 233, 233, 233, 233, 233, 233, - 233, 233, 233, nil, 233, 233, 233, nil, 233, 233, - 233, 233, 233, 278, 278, 278, 278, 278, 278, 278, - 278, 278, 278, 278, nil, 278, 278, nil, nil, 278, - 278, nil, 233, nil, nil, 233, nil, nil, 233, 233, - nil, nil, 233, nil, 233, 278, nil, 278, 233, 278, - 278, nil, 278, 278, 278, 278, 278, 233, 278, nil, - nil, nil, 233, 233, 233, 233, nil, 233, 233, 233, - 233, nil, nil, nil, nil, 233, 233, nil, 278, nil, - nil, nil, nil, 233, nil, 233, 233, 233, 298, 298, - 298, 298, 298, 298, nil, nil, nil, 298, 298, nil, - nil, nil, 298, nil, 298, 298, 298, 298, 298, 298, - 298, nil, nil, nil, nil, nil, 298, 298, 298, 298, - 298, 298, 298, nil, nil, 298, nil, nil, nil, nil, - nil, 298, 298, 298, 298, 298, 298, 298, 298, 298, - 298, 298, 298, nil, 298, 298, 298, nil, 298, 298, - 298, 298, 298, 430, 430, 430, 430, 430, 430, 430, - 430, 430, 430, 430, nil, 430, 430, nil, nil, 430, - 430, nil, 298, nil, nil, 298, nil, nil, 298, 298, - nil, nil, 298, nil, 298, 430, nil, 430, 298, 430, - 430, nil, 430, 430, 430, 430, 430, 298, 430, nil, - nil, nil, 298, 298, 298, 298, nil, 298, 298, 298, - 298, nil, nil, nil, nil, 298, 298, nil, 430, nil, - nil, nil, nil, 298, nil, 298, 298, 298, 303, 303, - 303, 303, 303, 303, nil, nil, nil, 303, 303, nil, - nil, nil, 303, nil, 303, 303, 303, 303, 303, 303, - 303, nil, nil, nil, nil, nil, 303, 303, 303, 303, - 303, 303, 303, nil, nil, 303, nil, nil, nil, nil, - nil, 303, 303, 303, 303, 303, 303, 303, 303, 303, - 303, 303, 303, nil, 303, 303, 303, nil, 303, 303, - 303, 303, 303, 475, 475, 475, 475, 475, 475, 475, - 475, 475, 475, 475, nil, 475, 475, nil, nil, 475, - 475, nil, 303, nil, nil, 303, nil, nil, 303, 303, - nil, nil, 303, nil, 303, 475, nil, 475, 303, 475, - 475, nil, 475, 475, 475, 475, 475, 303, 475, nil, - nil, nil, 303, 303, 303, 303, nil, 303, 303, 303, - 303, nil, nil, nil, nil, 303, 303, 475, 475, nil, - nil, nil, nil, 303, nil, 303, 303, 303, 328, 328, - 328, 328, 328, 328, nil, nil, nil, 328, 328, nil, - nil, nil, 328, nil, 328, 328, 328, 328, 328, 328, - 328, nil, nil, nil, nil, nil, 328, 328, 328, 328, - 328, 328, 328, nil, nil, 328, nil, nil, nil, nil, - nil, 328, 328, 328, 328, 328, 328, 328, 328, 328, - 328, 328, 328, nil, 328, 328, 328, nil, 328, 328, - 328, 328, 328, 522, 522, 522, 522, 522, 522, 522, - 522, 522, 522, 522, nil, 522, 522, nil, nil, 522, - 522, nil, 328, nil, nil, 328, nil, nil, 328, 328, - nil, nil, 328, nil, 328, 522, nil, 522, 328, 522, - 522, nil, 522, 522, 522, 522, 522, 328, 522, nil, - nil, nil, 328, 328, 328, 328, nil, 328, 328, 328, - 328, nil, nil, nil, nil, 328, 328, nil, 522, nil, - nil, nil, nil, 328, nil, 328, 328, 328, 501, 501, - 501, 501, 501, 501, nil, nil, nil, 501, 501, nil, - nil, nil, 501, nil, 501, 501, 501, 501, 501, 501, - 501, nil, nil, nil, nil, nil, 501, 501, 501, 501, - 501, 501, 501, nil, nil, 501, nil, nil, nil, nil, - nil, 501, 501, 501, 501, 501, 501, 501, 501, 501, - 501, 501, 501, nil, 501, 501, 501, nil, 501, 501, - 501, 501, 501, 648, 648, 648, 648, 648, 648, 648, - 648, 648, 648, 648, nil, 648, 648, nil, nil, 648, - 648, nil, 501, nil, nil, 501, nil, nil, 501, 501, - nil, nil, 501, nil, 501, 648, nil, 648, 501, 648, - 648, nil, 648, 648, 648, 648, 648, 501, 648, nil, - nil, nil, 501, 501, 501, 501, nil, 501, 501, 501, - 501, nil, nil, nil, nil, 501, 501, nil, 648, nil, - nil, nil, nil, 501, nil, 501, 501, 501, 538, 538, - 538, 538, 538, 538, nil, nil, nil, 538, 538, nil, - nil, nil, 538, nil, 538, 538, 538, 538, 538, 538, - 538, nil, nil, nil, nil, nil, 538, 538, 538, 538, - 538, 538, 538, nil, nil, 538, nil, nil, nil, nil, - nil, 538, 538, 538, 538, 538, 538, 538, 538, 538, - 538, 538, 538, nil, 538, 538, 538, nil, 538, 538, - 538, 538, 538, 734, 734, 734, 734, 734, 734, 734, - 734, 734, 734, 734, nil, 734, 734, nil, nil, 734, - 734, nil, 538, nil, nil, 538, nil, nil, 538, 538, - nil, nil, 538, nil, 538, 734, nil, 734, 538, 734, - 734, nil, 734, 734, 734, 734, 734, 538, 734, nil, - nil, nil, 538, 538, 538, 538, nil, 538, 538, 538, - 538, nil, nil, nil, nil, 538, 538, nil, 734, nil, - nil, nil, nil, 538, nil, 538, 538, 538, 541, 541, - 541, 541, 541, 541, nil, nil, nil, 541, 541, nil, - nil, nil, 541, nil, 541, 541, 541, 541, 541, 541, - 541, nil, nil, nil, nil, nil, 541, 541, 541, 541, - 541, 541, 541, nil, nil, 541, nil, nil, nil, nil, - nil, 541, 541, 541, 541, 541, 541, 541, 541, 541, - 541, 541, 541, nil, 541, 541, 541, nil, 541, 541, - 541, 541, 541, 739, 739, 739, 739, 739, 739, 739, - 739, 739, 739, 739, nil, 739, 739, nil, nil, 739, - 739, nil, 541, nil, nil, 541, nil, nil, 541, 541, - nil, nil, 541, nil, 541, 739, nil, 739, 541, 739, - 739, nil, 739, 739, 739, 739, 739, 541, 739, nil, - nil, nil, 541, 541, 541, 541, nil, 541, 541, 541, - 541, nil, nil, nil, nil, 541, 541, nil, 739, nil, - nil, nil, nil, 541, nil, 541, 541, 541, 561, 561, - 561, 561, 561, 561, nil, nil, nil, 561, 561, nil, - nil, nil, 561, nil, 561, 561, 561, 561, 561, 561, - 561, nil, nil, nil, nil, nil, 561, 561, 561, 561, - 561, 561, 561, nil, nil, 561, nil, nil, nil, nil, - nil, 561, 561, 561, 561, 561, 561, 561, 561, 561, - 561, 561, 561, nil, 561, 561, 561, nil, 561, 561, - 561, 561, 561, 741, 741, 741, 741, 741, 741, 741, - 741, 741, 741, 741, nil, 741, 741, nil, nil, 741, - 741, nil, 561, nil, nil, 561, nil, nil, 561, 561, - nil, nil, 561, nil, 561, 741, nil, 741, 561, 741, - 741, nil, 741, 741, 741, 741, 741, 561, 741, nil, - nil, nil, 561, 561, 561, 561, nil, 561, 561, 561, - 561, nil, nil, nil, nil, 561, 561, nil, 741, nil, - nil, nil, nil, 561, nil, 561, 561, 561, 618, 618, - 618, 618, 618, 618, nil, nil, nil, 618, 618, nil, - nil, nil, 618, nil, 618, 618, 618, 618, 618, 618, - 618, nil, nil, nil, nil, nil, 618, 618, 618, 618, - 618, 618, 618, nil, nil, 618, nil, nil, nil, nil, - nil, 618, 618, 618, 618, 618, 618, 618, 618, 618, - 618, 618, 618, nil, 618, 618, 618, nil, 618, 618, - 618, 618, 618, 744, 744, 744, 744, 744, 744, 744, - 744, 744, 744, 744, nil, 744, 744, nil, nil, 744, - 744, nil, 618, nil, nil, 618, nil, nil, 618, 618, - nil, nil, 618, nil, 618, 744, nil, 744, 618, 744, - 744, nil, 744, 744, 744, 744, 744, 618, 744, nil, - nil, nil, 618, 618, 618, 618, nil, 618, 618, 618, - 618, nil, nil, nil, nil, 618, 618, nil, 744, nil, - nil, nil, nil, 618, nil, 618, 618, 618, 623, 623, - 623, 623, 623, 623, nil, nil, nil, 623, 623, nil, - nil, nil, 623, nil, 623, 623, 623, 623, 623, 623, - 623, nil, nil, nil, nil, nil, 623, 623, 623, 623, - 623, 623, 623, nil, nil, 623, nil, nil, nil, nil, - nil, 623, 623, 623, 623, 623, 623, 623, 623, 623, - 623, 623, 623, nil, 623, 623, 623, nil, 623, 623, - 623, 623, 623, 746, 746, 746, 746, 746, 746, 746, - 746, 746, 746, 746, nil, 746, 746, nil, nil, 746, - 746, nil, 623, nil, nil, 623, nil, nil, 623, 623, - nil, nil, 623, nil, 623, 746, nil, 746, 623, 746, - 746, nil, 746, 746, 746, 746, 746, 623, 746, nil, - nil, nil, 623, 623, 623, 623, nil, 623, 623, 623, - 623, nil, nil, nil, nil, 623, 623, nil, 746, nil, - nil, nil, nil, 623, nil, 623, 623, 623, 624, 624, - 624, 624, 624, 624, nil, nil, nil, 624, 624, nil, - nil, nil, 624, nil, 624, 624, 624, 624, 624, 624, - 624, nil, nil, nil, nil, nil, 624, 624, 624, 624, - 624, 624, 624, nil, nil, 624, nil, nil, nil, nil, - nil, 624, 624, 624, 624, 624, 624, 624, 624, 624, - 624, 624, 624, nil, 624, 624, 624, nil, 624, 624, - 624, 624, 624, 748, 748, 748, 748, 748, 748, 748, - 748, 748, 748, 748, nil, 748, 748, nil, nil, 748, - 748, nil, 624, nil, nil, 624, nil, nil, 624, 624, - nil, nil, 624, nil, 624, 748, nil, 748, 624, 748, - 748, nil, 748, 748, 748, 748, 748, 624, 748, nil, - nil, nil, 624, 624, 624, 624, nil, 624, 624, 624, - 624, nil, nil, nil, nil, 624, 624, nil, 748, nil, - nil, nil, nil, 624, nil, 624, 624, 624, 710, 710, - 710, 710, 710, 710, nil, nil, nil, 710, 710, nil, - nil, nil, 710, nil, 710, 710, 710, 710, 710, 710, - 710, nil, nil, nil, nil, nil, 710, 710, 710, 710, - 710, 710, 710, nil, nil, 710, nil, nil, nil, nil, - nil, 710, 710, 710, 710, 710, 710, 710, 710, 710, - 710, 710, 710, nil, 710, 710, 710, nil, 710, 710, - 710, 710, 710, 838, 838, 838, 838, 838, 838, 838, - 838, 838, 838, 838, nil, 838, 838, nil, nil, 838, - 838, nil, 710, nil, nil, 710, nil, nil, 710, 710, - nil, nil, 710, nil, 710, 838, nil, 838, 710, 838, - 838, nil, 838, 838, 838, 838, 838, 710, 838, nil, - nil, nil, 710, 710, 710, 710, nil, 710, 710, 710, - 710, nil, nil, nil, nil, 710, 710, nil, 838, nil, - nil, nil, nil, 710, nil, 710, 710, 710, 714, 714, - 714, 714, 714, 714, nil, nil, nil, 714, 714, nil, - nil, nil, 714, nil, 714, 714, 714, 714, 714, 714, - 714, nil, nil, nil, nil, nil, 714, 714, 714, 714, - 714, 714, 714, nil, nil, 714, nil, nil, nil, nil, - nil, 714, 714, 714, 714, 714, 714, 714, 714, 714, - 714, 714, 714, nil, 714, 714, 714, nil, 714, 714, - 714, 714, 714, 841, 841, 841, 841, 841, 841, 841, - 841, 841, 841, 841, nil, 841, 841, nil, nil, 841, - 841, nil, 714, nil, nil, 714, nil, nil, 714, 714, - nil, nil, 714, nil, 714, 841, nil, 841, 714, 841, - 841, nil, 841, 841, 841, 841, 841, 714, 841, nil, - nil, nil, 714, 714, 714, 714, nil, 714, 714, 714, - 714, nil, nil, nil, nil, 714, 714, nil, 841, nil, - nil, nil, nil, 714, nil, 714, 714, 714, 724, 724, - 724, 724, 724, 724, nil, nil, nil, 724, 724, nil, - nil, nil, 724, nil, 724, 724, 724, 724, 724, 724, - 724, nil, nil, nil, nil, nil, 724, 724, 724, 724, - 724, 724, 724, nil, nil, 724, nil, nil, nil, nil, - nil, 724, 724, 724, 724, 724, 724, 724, 724, 724, - 724, 724, 724, nil, 724, 724, 724, nil, 724, 724, - 724, 724, 724, 450, 450, 450, 450, 450, 450, 450, - 450, 450, 450, 450, nil, 450, 450, nil, nil, 450, - 450, nil, 724, nil, nil, 724, nil, nil, 724, 724, - nil, nil, 724, nil, 724, 450, nil, 450, 724, 450, - 450, nil, 450, 450, 450, 450, 450, 724, 450, nil, - nil, nil, 724, 724, 724, 724, nil, 724, 724, 724, - 724, nil, nil, nil, nil, 724, 724, nil, 1010, nil, - 1010, 1010, 1010, 724, 1010, 724, 724, 724, 772, 772, - 772, 772, 772, 772, nil, nil, nil, 772, 772, nil, - nil, nil, 772, nil, 772, 772, 772, 772, 772, 772, - 772, nil, nil, nil, nil, 1010, 772, 772, 772, 772, - 772, 772, 772, nil, nil, 772, nil, nil, nil, nil, - nil, 772, 772, 772, 772, 772, 772, 772, 772, 772, - 772, 772, 772, nil, 772, 772, 772, nil, 772, 772, - 772, 772, 772, 451, 451, 451, 451, 451, 451, 451, - 451, 451, 451, 451, nil, 451, 451, nil, nil, 451, - 451, nil, 772, nil, nil, 772, nil, nil, 772, 772, - nil, nil, 772, nil, 772, 451, nil, 451, 772, 451, - 451, nil, 451, 451, 451, 451, 451, 772, 451, nil, - nil, nil, 772, 772, 772, 772, nil, 772, 772, 772, - 772, nil, nil, nil, nil, 772, 772, nil, nil, nil, - nil, nil, nil, 772, nil, 772, 772, 772, 785, 785, - 785, 785, 785, 785, nil, nil, nil, 785, 785, nil, - nil, nil, 785, nil, 785, 785, 785, 785, 785, 785, - 785, nil, nil, nil, nil, nil, 785, 785, 785, 785, - 785, 785, 785, nil, nil, 785, nil, nil, nil, nil, - nil, 785, 785, 785, 785, 785, 785, 785, 785, 785, - 785, 785, 785, nil, 785, 785, 785, nil, 785, 785, - 785, 785, 785, 461, 461, 461, 461, 461, 461, 461, - nil, nil, 461, 461, nil, nil, nil, nil, nil, 461, - 461, nil, 785, nil, nil, 785, nil, nil, 785, 785, - nil, nil, 785, nil, 785, 461, nil, 461, 785, 461, - 461, nil, 461, 461, 461, 461, 461, 785, 461, nil, - nil, nil, 785, 785, 785, 785, nil, 785, 785, 785, - 785, nil, nil, nil, nil, 785, 785, nil, nil, nil, - nil, nil, nil, 785, nil, 785, 785, 785, 819, 819, - 819, 819, 819, 819, nil, nil, nil, 819, 819, nil, - nil, nil, 819, nil, 819, 819, 819, 819, 819, 819, - 819, nil, nil, nil, nil, nil, 819, 819, 819, 819, - 819, 819, 819, nil, nil, 819, nil, nil, nil, nil, - nil, 819, 819, 819, 819, 819, 819, 819, 819, 819, - 819, 819, 819, nil, 819, 819, 819, nil, 819, 819, - 819, 819, 819, 464, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 464, - 464, nil, 819, nil, nil, 819, nil, nil, 819, 819, - nil, nil, 819, nil, 819, 464, nil, 464, 819, 464, - 464, nil, 464, 464, nil, nil, 464, 819, 464, nil, - nil, nil, 819, 819, 819, 819, nil, 819, 819, 819, - 819, nil, nil, nil, nil, 819, 819, nil, nil, nil, - nil, nil, nil, 819, nil, 819, 819, 819, 820, 820, - 820, 820, 820, 820, nil, nil, nil, 820, 820, nil, - nil, nil, 820, nil, 820, 820, 820, 820, 820, 820, - 820, nil, nil, nil, nil, nil, 820, 820, 820, 820, - 820, 820, 820, nil, nil, 820, nil, nil, nil, nil, - nil, 820, 820, 820, 820, 820, 820, 820, 820, 820, - 820, 820, 820, nil, 820, 820, 820, nil, 820, 820, - 820, 820, 820, 465, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 465, - 465, nil, 820, nil, nil, 820, nil, nil, 820, 820, - nil, nil, 820, nil, 820, 465, nil, 465, 820, 465, - 465, nil, 465, 465, nil, nil, 465, 820, 465, nil, - nil, nil, 820, 820, 820, 820, nil, 820, 820, 820, - 820, nil, nil, nil, nil, 820, 820, nil, nil, nil, - nil, nil, nil, 820, nil, 820, 820, 820, 823, 823, - 823, 823, 823, 823, nil, nil, nil, 823, 823, nil, - nil, nil, 823, nil, 823, 823, 823, 823, 823, 823, - 823, nil, nil, nil, nil, nil, 823, 823, 823, 823, - 823, 823, 823, nil, nil, 823, nil, nil, nil, nil, - nil, 823, 823, 823, 823, 823, 823, 823, 823, 823, - 823, 823, 823, nil, 823, 823, 823, nil, 823, 823, - 823, 823, 823, 466, 466, 466, 466, 466, 466, 466, - nil, nil, 466, 466, nil, nil, nil, nil, nil, 466, - 466, nil, 823, nil, nil, 823, nil, nil, 823, 823, - nil, nil, 823, nil, 823, 466, nil, 466, 823, 466, - 466, nil, 466, 466, 466, 466, 466, 823, 466, nil, - nil, nil, 823, 823, 823, 823, nil, 823, 823, 823, - 823, nil, nil, nil, nil, 823, 823, nil, nil, nil, - nil, nil, nil, 823, nil, 823, 823, 823, 829, 829, - 829, 829, 829, 829, nil, nil, nil, 829, 829, nil, - nil, nil, 829, nil, 829, 829, 829, 829, 829, 829, - 829, nil, nil, nil, nil, nil, 829, 829, 829, 829, - 829, 829, 829, nil, nil, 829, nil, nil, nil, nil, - nil, 829, 829, 829, 829, 829, 829, 829, 829, 829, - 829, 829, 829, nil, 829, 829, 829, nil, 829, 829, - 829, 829, 829, 467, 467, 467, 467, 467, 467, 467, - nil, nil, 467, 467, nil, nil, nil, nil, nil, 467, - 467, nil, 829, nil, nil, 829, nil, nil, 829, 829, - nil, nil, 829, nil, 829, 467, nil, 467, 829, 467, - 467, nil, 467, 467, 467, 467, 467, 829, 467, nil, - nil, nil, 829, 829, 829, 829, nil, 829, 829, 829, - 829, nil, nil, nil, nil, 829, 829, nil, nil, nil, - nil, nil, nil, 829, nil, 829, 829, 829, 862, 862, - 862, 862, 862, 862, nil, nil, nil, 862, 862, nil, - nil, nil, 862, nil, 862, 862, 862, 862, 862, 862, - 862, nil, nil, nil, nil, nil, 862, 862, 862, 862, - 862, 862, 862, nil, nil, 862, nil, nil, nil, nil, - nil, 862, 862, 862, 862, 862, 862, 862, 862, 862, - 862, 862, 862, nil, 862, 862, 862, nil, 862, 862, - 862, 862, 862, 468, 468, 468, 468, 468, 468, 468, - nil, nil, 468, 468, nil, nil, nil, nil, nil, 468, - 468, nil, 862, nil, nil, 862, nil, nil, 862, 862, - nil, nil, 862, nil, 862, 468, nil, 468, 862, 468, - 468, nil, 468, 468, 468, 468, 468, 862, 468, nil, - nil, nil, 862, 862, 862, 862, nil, 862, 862, 862, - 862, nil, nil, nil, nil, 862, 862, nil, nil, nil, - nil, nil, nil, 862, nil, 862, 862, 862, 926, 926, - 926, 926, 926, 926, nil, nil, nil, 926, 926, nil, - nil, nil, 926, nil, 926, 926, 926, 926, 926, 926, - 926, nil, nil, nil, nil, nil, 926, 926, 926, 926, - 926, 926, 926, nil, nil, 926, nil, nil, nil, nil, - nil, 926, 926, 926, 926, 926, 926, 926, 926, 926, - 926, 926, 926, nil, 926, 926, 926, nil, 926, 926, - 926, 926, 926, 469, 469, 469, 469, 469, 469, 469, - nil, nil, 469, 469, nil, nil, nil, nil, nil, 469, - 469, nil, 926, nil, nil, 926, nil, nil, 926, 926, - nil, nil, 926, nil, 926, 469, nil, 469, 926, 469, - 469, nil, 469, 469, 469, 469, 469, 926, 469, nil, - nil, nil, 926, 926, 926, 926, nil, 926, 926, 926, - 926, nil, nil, nil, nil, 926, 926, nil, nil, nil, - nil, nil, nil, 926, nil, 926, 926, 926, 933, 933, - 933, 933, 933, 933, nil, nil, nil, 933, 933, nil, - nil, nil, 933, nil, 933, 933, 933, 933, 933, 933, - 933, nil, nil, nil, nil, nil, 933, 933, 933, 933, - 933, 933, 933, nil, nil, 933, nil, nil, nil, nil, - nil, 933, 933, 933, 933, 933, 933, 933, 933, 933, - 933, 933, 933, nil, 933, 933, 933, nil, 933, 933, - 933, 933, 933, 470, 470, 470, 470, 470, 470, 470, - nil, nil, 470, 470, nil, nil, nil, nil, nil, 470, - 470, nil, 933, nil, nil, 933, nil, nil, 933, 933, - nil, nil, 933, nil, 933, 470, nil, 470, 933, 470, - 470, nil, 470, 470, 470, 470, 470, 933, 470, nil, - nil, nil, 933, 933, 933, 933, nil, 933, 933, 933, - 933, nil, nil, nil, nil, 933, 933, nil, nil, nil, - nil, nil, nil, 933, nil, 933, 933, 933, 934, 934, - 934, 934, 934, 934, nil, nil, nil, 934, 934, nil, - nil, nil, 934, nil, 934, 934, 934, 934, 934, 934, - 934, nil, nil, nil, nil, nil, 934, 934, 934, 934, - 934, 934, 934, nil, nil, 934, nil, nil, nil, nil, - nil, 934, 934, 934, 934, 934, 934, 934, 934, 934, - 934, 934, 934, nil, 934, 934, 934, nil, 934, 934, - 934, 934, 934, 473, 473, 473, 473, 473, 473, 473, - nil, nil, 473, 473, nil, nil, nil, nil, nil, 473, - 473, nil, 934, nil, nil, 934, nil, nil, 934, 934, - nil, nil, 934, nil, 934, 473, nil, 473, 934, 473, - 473, nil, 473, 473, 473, 473, 473, 934, 473, nil, - nil, nil, 934, 934, 934, 934, nil, 934, 934, 934, - 934, nil, nil, nil, nil, 934, 934, nil, nil, nil, - nil, nil, nil, 934, nil, 934, 934, 934, 951, 951, - 951, 951, 951, 951, nil, nil, nil, 951, 951, nil, - nil, nil, 951, nil, 951, 951, 951, 951, 951, 951, - 951, nil, nil, nil, nil, nil, 951, 951, 951, 951, - 951, 951, 951, nil, nil, 951, nil, nil, nil, nil, - nil, 951, 951, 951, 951, 951, 951, 951, 951, 951, - 951, 951, 951, nil, 951, 951, 951, nil, 951, 951, - 951, 951, 951, 474, 474, 474, 474, 474, 474, 474, - 474, nil, 474, 474, nil, nil, nil, nil, nil, 474, - 474, nil, 951, nil, nil, 951, nil, nil, 951, 951, - nil, nil, 951, nil, 951, 474, nil, 474, 951, 474, - 474, nil, 474, 474, 474, 474, 474, 951, 474, nil, - nil, nil, 951, 951, 951, 951, nil, 951, 951, 951, - 951, nil, nil, nil, nil, 951, 951, nil, nil, nil, - nil, nil, nil, 951, nil, 951, 951, 951, 957, 957, - 957, 957, 957, 957, nil, nil, nil, 957, 957, nil, - nil, nil, 957, nil, 957, 957, 957, 957, 957, 957, - 957, nil, nil, nil, nil, nil, 957, 957, 957, 957, - 957, 957, 957, nil, nil, 957, nil, nil, nil, nil, - nil, 957, 957, 957, 957, 957, 957, 957, 957, 957, - 957, 957, 957, nil, 957, 957, 957, nil, 957, 957, - 957, 957, 957, 459, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 459, - 459, nil, 957, nil, nil, 957, nil, nil, 957, 957, - nil, nil, 957, nil, 957, 459, nil, 459, 957, 459, - 459, nil, 459, 459, nil, nil, nil, 957, nil, nil, - nil, nil, 957, 957, 957, 957, nil, 957, 957, 957, - 957, nil, nil, nil, nil, 957, 957, nil, nil, nil, - nil, nil, nil, 957, nil, 957, 957, 957, 959, 959, - 959, 959, 959, 959, nil, nil, nil, 959, 959, nil, - nil, nil, 959, nil, 959, 959, 959, 959, 959, 959, - 959, nil, nil, nil, nil, nil, 959, 959, 959, 959, - 959, 959, 959, nil, nil, 959, nil, nil, nil, nil, - nil, 959, 959, 959, 959, 959, 959, 959, 959, 959, - 959, 959, 959, nil, 959, 959, 959, nil, 959, 959, - 959, 959, 959, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 959, nil, nil, 959, nil, nil, 959, 959, - nil, nil, 959, nil, 959, nil, nil, nil, 959, nil, - nil, nil, nil, nil, nil, nil, nil, 959, nil, nil, - nil, nil, 959, 959, 959, 959, nil, 959, 959, 959, - 959, nil, nil, nil, nil, 959, 959, nil, nil, nil, - nil, nil, nil, 959, nil, 959, 959, 959, 5, 5, - 5, 5, 5, nil, nil, nil, 5, 5, nil, nil, - nil, 5, nil, 5, 5, 5, 5, 5, 5, 5, - nil, nil, nil, nil, nil, 5, 5, 5, 5, 5, - 5, 5, nil, nil, 5, nil, nil, nil, nil, nil, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, nil, 5, 5, 5, nil, 5, 5, 5, - 5, 5, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 5, nil, nil, 5, nil, nil, 5, 5, nil, - nil, 5, nil, 5, nil, nil, nil, 5, nil, nil, - nil, nil, nil, nil, nil, nil, 5, nil, nil, nil, - nil, 5, 5, 5, 5, nil, 5, 5, 5, 5, - nil, nil, nil, nil, 5, 5, nil, nil, nil, 20, - 20, 20, 5, 20, 5, 5, 5, 20, 20, nil, - nil, nil, 20, nil, 20, 20, 20, 20, 20, 20, - 20, nil, nil, nil, nil, nil, 20, 20, 20, 20, - 20, 20, 20, nil, nil, 20, nil, nil, nil, nil, - nil, nil, 20, nil, nil, 20, 20, 20, 20, 20, - 20, 20, 20, nil, 20, 20, 20, nil, 20, 20, - 20, 20, 20, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 20, nil, nil, 20, nil, nil, 20, 20, - nil, nil, 20, nil, nil, nil, nil, nil, 20, nil, - nil, nil, nil, nil, nil, nil, nil, 20, nil, nil, - nil, nil, 20, 20, 20, 20, nil, 20, 20, 20, - 20, nil, nil, nil, nil, 20, 20, nil, nil, nil, - 29, 29, 29, 20, 29, 20, 20, 20, 29, 29, - nil, nil, nil, 29, nil, 29, 29, 29, 29, 29, - 29, 29, nil, nil, nil, nil, nil, 29, 29, 29, - 29, 29, 29, 29, nil, nil, 29, nil, nil, nil, - nil, nil, nil, 29, nil, nil, 29, 29, 29, 29, - 29, 29, 29, 29, 29, 29, 29, 29, nil, 29, - 29, 29, 29, 29, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 29, nil, nil, 29, nil, nil, 29, - 29, nil, nil, 29, nil, 29, nil, 29, nil, 29, - nil, nil, 29, nil, nil, nil, nil, nil, 29, nil, - nil, nil, nil, 29, 29, 29, 29, nil, 29, 29, - 29, 29, nil, nil, nil, nil, 29, 29, nil, nil, - nil, 30, 30, 30, 29, 30, 29, 29, 29, 30, - 30, nil, nil, nil, 30, nil, 30, 30, 30, 30, - 30, 30, 30, nil, nil, nil, nil, nil, 30, 30, - 30, 30, 30, 30, 30, nil, nil, 30, nil, nil, - nil, nil, nil, nil, 30, nil, nil, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, nil, - 30, 30, 30, 30, 30, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 30, nil, nil, 30, nil, nil, - 30, 30, nil, nil, 30, nil, 30, nil, 30, nil, - 30, nil, nil, 30, nil, nil, nil, nil, nil, 30, - nil, nil, nil, nil, 30, 30, 30, 30, nil, 30, - 30, 30, 30, nil, nil, nil, nil, 30, 30, nil, - nil, nil, 31, 31, 31, 30, 31, 30, 30, 30, - 31, 31, nil, nil, nil, 31, nil, 31, 31, 31, - 31, 31, 31, 31, nil, nil, nil, nil, nil, 31, - 31, 31, 31, 31, 31, 31, nil, nil, 31, nil, - nil, nil, nil, nil, nil, 31, nil, nil, 31, 31, - 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, - nil, 31, 31, 31, 31, 31, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 31, nil, nil, 31, nil, - nil, 31, 31, nil, nil, 31, nil, 31, nil, 31, - nil, 31, nil, nil, 31, nil, nil, nil, nil, nil, - 31, nil, nil, nil, nil, 31, 31, 31, 31, nil, - 31, 31, 31, 31, nil, nil, nil, nil, 31, 31, - nil, nil, nil, 34, 34, 34, 31, 34, 31, 31, - 31, 34, 34, nil, nil, nil, 34, nil, 34, 34, - 34, 34, 34, 34, 34, nil, nil, nil, nil, nil, - 34, 34, 34, 34, 34, 34, 34, nil, nil, 34, - nil, nil, nil, nil, nil, nil, 34, nil, nil, 34, - 34, 34, 34, 34, 34, 34, 34, nil, 34, 34, - 34, nil, 34, 34, nil, nil, 34, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 34, nil, nil, 34, - nil, nil, 34, 34, nil, nil, 34, nil, 34, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 34, 34, 34, 34, - nil, 34, 34, 34, 34, nil, nil, nil, nil, 34, - 34, nil, nil, nil, 35, 35, 35, 34, 35, 34, - 34, 34, 35, 35, nil, nil, nil, 35, nil, 35, - 35, 35, 35, 35, 35, 35, nil, nil, nil, nil, - nil, 35, 35, 35, 35, 35, 35, 35, nil, nil, - 35, nil, nil, nil, nil, nil, nil, 35, nil, nil, - 35, 35, 35, 35, 35, 35, 35, 35, nil, 35, - 35, 35, nil, 35, 35, nil, nil, 35, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 35, nil, nil, - 35, nil, nil, 35, 35, nil, nil, 35, nil, nil, - 802, nil, 802, 802, 802, 802, 802, nil, nil, nil, - nil, nil, nil, nil, nil, 802, nil, 35, 35, 35, - 35, nil, 35, 35, 35, 35, nil, nil, nil, nil, - 35, 35, nil, nil, nil, 35, nil, 802, 35, nil, - 35, 35, 35, 42, 42, 42, nil, 42, 802, 802, - nil, 42, 42, 802, nil, nil, 42, nil, 42, 42, - 42, 42, 42, 42, 42, nil, nil, nil, nil, nil, - 42, 42, 42, 42, 42, 42, 42, nil, nil, 42, - nil, nil, nil, nil, nil, nil, 42, nil, nil, 42, - 42, 42, 42, 42, 42, 42, 42, nil, 42, 42, - 42, nil, 42, 42, 42, 42, 42, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 42, nil, nil, 42, - nil, nil, 42, 42, nil, nil, 42, nil, nil, nil, - nil, nil, 42, nil, nil, nil, nil, nil, nil, nil, - nil, 42, nil, nil, nil, nil, 42, 42, 42, 42, - nil, 42, 42, 42, 42, nil, nil, nil, nil, 42, - 42, nil, nil, nil, 43, 43, 43, 42, 43, 42, - 42, 42, 43, 43, nil, nil, nil, 43, nil, 43, - 43, 43, 43, 43, 43, 43, nil, nil, nil, nil, - nil, 43, 43, 43, 43, 43, 43, 43, nil, nil, - 43, nil, nil, nil, nil, nil, nil, 43, nil, nil, - 43, 43, 43, 43, 43, 43, 43, 43, nil, 43, - 43, 43, nil, 43, 43, 43, 43, 43, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 43, nil, nil, - 43, nil, nil, 43, 43, nil, nil, 43, nil, nil, - nil, nil, nil, 43, nil, nil, nil, nil, nil, nil, - nil, nil, 43, nil, nil, nil, nil, 43, 43, 43, - 43, nil, 43, 43, 43, 43, nil, nil, nil, nil, - 43, 43, nil, nil, nil, 44, 44, 44, 43, 44, - 43, 43, 43, 44, 44, nil, nil, nil, 44, nil, - 44, 44, 44, 44, 44, 44, 44, nil, nil, nil, - nil, nil, 44, 44, 44, 44, 44, 44, 44, nil, - nil, 44, nil, nil, nil, nil, nil, nil, 44, nil, - nil, 44, 44, 44, 44, 44, 44, 44, 44, nil, - 44, 44, 44, nil, 44, 44, 44, 44, 44, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 44, nil, - nil, 44, nil, nil, 44, 44, nil, nil, 44, nil, - nil, nil, nil, nil, 44, nil, nil, nil, nil, nil, - nil, nil, nil, 44, nil, nil, nil, nil, 44, 44, - 44, 44, nil, 44, 44, 44, 44, nil, nil, nil, - nil, 44, 44, nil, nil, nil, 59, 59, 59, 44, - 59, 44, 44, 44, 59, 59, nil, nil, nil, 59, - nil, 59, 59, 59, 59, 59, 59, 59, nil, nil, - nil, nil, nil, 59, 59, 59, 59, 59, 59, 59, - nil, nil, 59, nil, nil, nil, nil, nil, nil, 59, - nil, nil, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 59, nil, 59, 59, 59, 59, 59, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 59, - nil, nil, 59, nil, nil, 59, 59, nil, nil, 59, - nil, 59, nil, nil, nil, 59, nil, nil, 59, nil, - nil, nil, nil, nil, 59, nil, nil, nil, nil, 59, - 59, 59, 59, nil, 59, 59, 59, 59, nil, nil, - nil, nil, 59, 59, nil, nil, nil, 60, 60, 60, - 59, 60, 59, 59, 59, 60, 60, nil, nil, nil, - 60, nil, 60, 60, 60, 60, 60, 60, 60, nil, - nil, nil, nil, nil, 60, 60, 60, 60, 60, 60, - 60, nil, nil, 60, nil, nil, nil, nil, nil, nil, - 60, nil, nil, 60, 60, 60, 60, 60, 60, 60, - 60, 60, 60, 60, 60, nil, 60, 60, 60, 60, - 60, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 60, nil, nil, 60, nil, nil, 60, 60, nil, nil, - 60, nil, nil, nil, nil, nil, 60, nil, nil, 60, - nil, nil, nil, nil, nil, 60, nil, nil, nil, nil, - 60, 60, 60, 60, nil, 60, 60, 60, 60, nil, - nil, nil, nil, 60, 60, nil, nil, nil, 63, 63, - 63, 60, 63, 60, 60, 60, 63, 63, nil, nil, - nil, 63, nil, 63, 63, 63, 63, 63, 63, 63, - nil, nil, nil, nil, nil, 63, 63, 63, 63, 63, - 63, 63, nil, nil, 63, nil, nil, nil, nil, nil, - nil, 63, nil, nil, 63, 63, 63, 63, 63, 63, - 63, 63, nil, 63, 63, 63, nil, 63, 63, 63, - 63, 63, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 63, nil, nil, 63, nil, nil, 63, 63, nil, - nil, 63, nil, nil, nil, nil, nil, 63, nil, nil, - nil, nil, nil, nil, nil, nil, 63, nil, nil, nil, - nil, 63, 63, 63, 63, nil, 63, 63, 63, 63, - nil, nil, nil, nil, 63, 63, nil, nil, nil, 64, - 64, 64, 63, 64, 63, 63, 63, 64, 64, nil, - nil, nil, 64, nil, 64, 64, 64, 64, 64, 64, - 64, nil, nil, nil, nil, nil, 64, 64, 64, 64, - 64, 64, 64, nil, nil, 64, nil, nil, nil, nil, - nil, nil, 64, nil, nil, 64, 64, 64, 64, 64, - 64, 64, 64, nil, 64, 64, 64, nil, 64, 64, - 64, 64, 64, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 64, nil, nil, 64, nil, nil, 64, 64, - nil, nil, 64, nil, nil, nil, nil, nil, 64, nil, - nil, nil, nil, nil, nil, nil, nil, 64, nil, nil, - nil, nil, 64, 64, 64, 64, nil, 64, 64, 64, - 64, nil, nil, nil, nil, 64, 64, nil, nil, nil, - 67, 67, 67, 64, 67, 64, 64, 64, 67, 67, - nil, nil, nil, 67, nil, 67, 67, 67, 67, 67, - 67, 67, nil, nil, nil, nil, nil, 67, 67, 67, - 67, 67, 67, 67, nil, nil, 67, nil, nil, nil, - nil, nil, nil, 67, nil, nil, 67, 67, 67, 67, - 67, 67, 67, 67, nil, 67, 67, 67, nil, 67, - 67, 67, 67, 67, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 67, nil, nil, 67, nil, nil, 67, - 67, nil, nil, 67, nil, nil, nil, nil, nil, 67, - nil, nil, nil, nil, nil, nil, nil, nil, 67, nil, - nil, nil, nil, 67, 67, 67, 67, nil, 67, 67, - 67, 67, nil, nil, nil, nil, 67, 67, 67, nil, - nil, nil, nil, 67, 67, nil, 67, 67, 67, 68, - 68, 68, nil, 68, nil, nil, nil, 68, 68, nil, - nil, nil, 68, nil, 68, 68, 68, 68, 68, 68, - 68, nil, nil, nil, nil, nil, 68, 68, 68, 68, - 68, 68, 68, nil, nil, 68, nil, nil, nil, nil, - nil, nil, 68, nil, nil, 68, 68, 68, 68, 68, - 68, 68, 68, nil, 68, 68, 68, nil, 68, 68, - nil, nil, 68, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 68, nil, nil, 68, nil, nil, 68, 68, - nil, nil, 68, nil, 68, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 68, 68, 68, 68, nil, 68, 68, 68, - 68, nil, nil, nil, nil, 68, 68, nil, nil, nil, - 69, 69, 69, 68, 69, 68, 68, 68, 69, 69, - nil, nil, nil, 69, nil, 69, 69, 69, 69, 69, - 69, 69, nil, nil, nil, nil, nil, 69, 69, 69, - 69, 69, 69, 69, nil, nil, 69, nil, nil, nil, - nil, nil, nil, 69, nil, nil, 69, 69, 69, 69, - 69, 69, 69, 69, nil, 69, 69, 69, nil, 69, - 69, nil, nil, 69, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 69, nil, nil, 69, nil, nil, 69, nil, nil, 69, - 69, nil, nil, 69, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 69, 69, 69, 69, nil, 69, 69, - 69, 69, nil, nil, nil, nil, 69, 69, nil, nil, - nil, 70, 70, 70, 69, 70, 69, 69, 69, 70, - 70, nil, nil, nil, 70, nil, 70, 70, 70, 70, - 70, 70, 70, nil, nil, nil, nil, nil, 70, 70, - 70, 70, 70, 70, 70, nil, nil, 70, nil, nil, - nil, nil, nil, nil, 70, nil, nil, 70, 70, 70, - 70, 70, 70, 70, 70, nil, 70, 70, 70, nil, - 70, 70, nil, nil, 70, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 70, nil, nil, 70, nil, nil, - 70, 70, nil, nil, 70, nil, nil, 849, nil, 849, - 849, 849, 849, 849, nil, nil, nil, nil, nil, nil, - nil, nil, 849, nil, 70, 70, 70, 70, nil, 70, - 70, 70, 70, nil, nil, nil, nil, 70, 70, nil, - nil, nil, nil, nil, 849, 70, nil, 70, 70, 70, - 113, 113, 113, 113, 113, 849, 849, nil, 113, 113, - 849, nil, nil, 113, nil, 113, 113, 113, 113, 113, - 113, 113, nil, nil, nil, nil, nil, 113, 113, 113, - 113, 113, 113, 113, nil, nil, 113, nil, nil, nil, - nil, nil, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 113, 113, nil, 113, 113, 113, nil, 113, - 113, 113, 113, 113, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 113, nil, nil, 113, nil, nil, 113, - 113, nil, nil, 113, nil, 113, nil, nil, nil, 113, - nil, nil, nil, nil, nil, nil, nil, nil, 113, nil, - nil, nil, nil, 113, 113, 113, 113, nil, 113, 113, - 113, 113, nil, nil, nil, nil, 113, 113, nil, nil, - nil, nil, nil, 113, 113, nil, 113, 113, 113, 118, - 118, 118, nil, 118, nil, nil, nil, 118, 118, nil, - nil, nil, 118, nil, 118, 118, 118, 118, 118, 118, - 118, nil, nil, nil, nil, nil, 118, 118, 118, 118, - 118, 118, 118, nil, nil, 118, nil, nil, nil, nil, - nil, nil, 118, nil, nil, 118, 118, 118, 118, 118, - 118, 118, 118, nil, 118, 118, 118, nil, 118, 118, - 118, 118, 118, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 118, nil, nil, 118, nil, nil, 118, 118, - nil, nil, 118, nil, nil, nil, nil, nil, 118, nil, - nil, nil, nil, nil, nil, nil, nil, 118, nil, nil, - nil, nil, 118, 118, 118, 118, nil, 118, 118, 118, - 118, nil, nil, nil, nil, 118, 118, nil, nil, nil, - 119, 119, 119, 118, 119, 118, 118, 118, 119, 119, - nil, nil, nil, 119, nil, 119, 119, 119, 119, 119, - 119, 119, nil, nil, nil, nil, nil, 119, 119, 119, - 119, 119, 119, 119, nil, nil, 119, nil, nil, nil, - nil, nil, nil, 119, nil, nil, 119, 119, 119, 119, - 119, 119, 119, 119, nil, 119, 119, 119, nil, 119, - 119, 119, 119, 119, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 119, nil, nil, 119, nil, nil, 119, - 119, nil, nil, 119, nil, nil, nil, nil, nil, 119, - nil, nil, nil, nil, nil, nil, nil, nil, 119, nil, - nil, nil, nil, 119, 119, 119, 119, nil, 119, 119, - 119, 119, nil, nil, nil, nil, 119, 119, nil, nil, - nil, 120, 120, 120, 119, 120, 119, 119, 119, 120, - 120, nil, nil, nil, 120, nil, 120, 120, 120, 120, - 120, 120, 120, nil, nil, nil, nil, nil, 120, 120, - 120, 120, 120, 120, 120, nil, nil, 120, nil, nil, - nil, nil, nil, nil, 120, nil, nil, 120, 120, 120, - 120, 120, 120, 120, 120, nil, 120, 120, 120, nil, - 120, 120, 120, 120, 120, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 120, nil, nil, 120, nil, nil, - 120, 120, nil, nil, 120, nil, nil, nil, nil, nil, - 120, nil, nil, nil, nil, nil, nil, nil, nil, 120, - nil, nil, nil, nil, 120, 120, 120, 120, nil, 120, - 120, 120, 120, nil, nil, nil, nil, 120, 120, nil, - nil, nil, 121, 121, 121, 120, 121, 120, 120, 120, - 121, 121, nil, nil, nil, 121, nil, 121, 121, 121, - 121, 121, 121, 121, nil, nil, nil, nil, nil, 121, - 121, 121, 121, 121, 121, 121, nil, nil, 121, nil, - nil, nil, nil, nil, nil, 121, nil, nil, 121, 121, - 121, 121, 121, 121, 121, 121, nil, 121, 121, 121, - nil, 121, 121, 121, 121, 121, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 121, nil, nil, 121, nil, - nil, 121, 121, nil, nil, 121, nil, nil, nil, nil, - nil, 121, nil, nil, nil, nil, nil, nil, nil, nil, - 121, nil, nil, nil, nil, 121, 121, 121, 121, nil, - 121, 121, 121, 121, nil, nil, nil, nil, 121, 121, - nil, nil, nil, nil, nil, nil, 121, nil, 121, 121, - 121, 122, 122, 122, 122, 122, nil, nil, nil, 122, - 122, nil, nil, nil, 122, nil, 122, 122, 122, 122, - 122, 122, 122, nil, nil, nil, nil, nil, 122, 122, - 122, 122, 122, 122, 122, nil, nil, 122, nil, nil, - nil, nil, nil, 122, 122, nil, 122, 122, 122, 122, - 122, 122, 122, 122, 122, nil, 122, 122, 122, nil, - 122, 122, 122, 122, 122, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 122, nil, nil, 122, nil, nil, - 122, 122, nil, nil, 122, nil, 122, nil, nil, nil, - 122, nil, nil, nil, nil, nil, nil, nil, nil, 122, - nil, nil, nil, nil, 122, 122, 122, 122, nil, 122, - 122, 122, 122, nil, nil, nil, nil, 122, 122, nil, - nil, nil, 209, 209, 209, 122, 209, 122, 122, 122, - 209, 209, nil, nil, nil, 209, nil, 209, 209, 209, - 209, 209, 209, 209, nil, nil, nil, nil, nil, 209, - 209, 209, 209, 209, 209, 209, nil, nil, 209, nil, - nil, nil, nil, nil, nil, 209, nil, nil, 209, 209, - 209, 209, 209, 209, 209, 209, nil, 209, 209, 209, - nil, 209, 209, 209, 209, 209, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 209, nil, nil, 209, nil, - nil, 209, 209, nil, nil, 209, nil, 209, nil, nil, - nil, 209, nil, nil, nil, nil, nil, nil, nil, nil, - 209, nil, nil, nil, nil, 209, 209, 209, 209, nil, - 209, 209, 209, 209, nil, nil, nil, nil, 209, 209, - nil, nil, nil, 210, 210, 210, 209, 210, 209, 209, - 209, 210, 210, nil, nil, nil, 210, nil, 210, 210, - 210, 210, 210, 210, 210, nil, nil, nil, nil, nil, - 210, 210, 210, 210, 210, 210, 210, nil, nil, 210, - nil, nil, nil, nil, nil, nil, 210, nil, nil, 210, - 210, 210, 210, 210, 210, 210, 210, nil, 210, 210, - 210, nil, 210, 210, 210, 210, 210, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 210, nil, nil, 210, - nil, nil, 210, 210, nil, nil, 210, nil, nil, nil, - nil, nil, 210, nil, nil, nil, nil, nil, nil, nil, - nil, 210, nil, nil, nil, nil, 210, 210, 210, 210, - nil, 210, 210, 210, 210, nil, nil, nil, nil, 210, - 210, nil, nil, nil, 211, 211, 211, 210, 211, 210, - 210, 210, 211, 211, nil, nil, nil, 211, nil, 211, - 211, 211, 211, 211, 211, 211, nil, nil, nil, nil, - nil, 211, 211, 211, 211, 211, 211, 211, nil, nil, - 211, nil, nil, nil, nil, nil, nil, 211, nil, nil, - 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, - 211, 211, nil, 211, 211, 211, 211, 211, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 211, nil, nil, - 211, nil, nil, 211, 211, nil, nil, 211, nil, 211, - nil, 211, nil, 211, nil, nil, 211, nil, nil, nil, - nil, nil, 211, nil, nil, nil, nil, 211, 211, 211, - 211, nil, 211, 211, 211, 211, nil, nil, nil, nil, - 211, 211, nil, nil, nil, 216, 216, 216, 211, 216, - 211, 211, 211, 216, 216, nil, nil, nil, 216, nil, - 216, 216, 216, 216, 216, 216, 216, nil, nil, nil, - nil, nil, 216, 216, 216, 216, 216, 216, 216, nil, - nil, 216, nil, nil, nil, nil, nil, nil, 216, nil, - nil, 216, 216, 216, 216, 216, 216, 216, 216, nil, - 216, 216, 216, nil, 216, 216, 216, 216, 216, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 216, nil, - nil, 216, nil, nil, 216, 216, nil, nil, 216, nil, - nil, nil, nil, nil, 216, nil, nil, nil, nil, nil, - nil, nil, nil, 216, nil, nil, nil, nil, 216, 216, - 216, 216, nil, 216, 216, 216, 216, nil, nil, nil, - nil, 216, 216, nil, nil, nil, 217, 217, 217, 216, - 217, 216, 216, 216, 217, 217, nil, nil, nil, 217, - nil, 217, 217, 217, 217, 217, 217, 217, nil, nil, - nil, nil, nil, 217, 217, 217, 217, 217, 217, 217, - nil, nil, 217, nil, nil, nil, nil, nil, nil, 217, - nil, nil, 217, 217, 217, 217, 217, 217, 217, 217, - nil, 217, 217, 217, nil, 217, 217, 217, 217, 217, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 217, - nil, nil, 217, nil, nil, 217, 217, nil, nil, 217, - nil, 217, nil, nil, nil, 217, nil, nil, nil, nil, - nil, nil, nil, nil, 217, nil, nil, nil, nil, 217, - 217, 217, 217, nil, 217, 217, 217, 217, nil, nil, - nil, nil, 217, 217, nil, nil, nil, 218, 218, 218, - 217, 218, 217, 217, 217, 218, 218, nil, nil, nil, - 218, nil, 218, 218, 218, 218, 218, 218, 218, nil, - nil, nil, nil, nil, 218, 218, 218, 218, 218, 218, - 218, nil, nil, 218, nil, nil, nil, nil, nil, nil, - 218, nil, nil, 218, 218, 218, 218, 218, 218, 218, - 218, nil, 218, 218, 218, nil, 218, 218, 218, 218, - 218, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 218, nil, nil, 218, nil, nil, 218, 218, nil, nil, - 218, nil, nil, nil, nil, nil, 218, nil, nil, nil, - nil, nil, nil, nil, nil, 218, nil, nil, nil, nil, - 218, 218, 218, 218, nil, 218, 218, 218, 218, nil, - nil, nil, nil, 218, 218, nil, nil, nil, 219, 219, - 219, 218, 219, 218, 218, 218, 219, 219, nil, nil, - nil, 219, nil, 219, 219, 219, 219, 219, 219, 219, - nil, nil, nil, nil, nil, 219, 219, 219, 219, 219, - 219, 219, nil, nil, 219, nil, nil, nil, nil, nil, - nil, 219, nil, nil, 219, 219, 219, 219, 219, 219, - 219, 219, nil, 219, 219, 219, nil, 219, 219, 219, - 219, 219, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 219, nil, nil, 219, nil, nil, 219, 219, nil, - nil, 219, nil, nil, nil, nil, nil, 219, nil, nil, - nil, nil, nil, nil, nil, nil, 219, nil, nil, nil, - nil, 219, 219, 219, 219, nil, 219, 219, 219, 219, - nil, nil, nil, nil, 219, 219, nil, nil, nil, 220, - 220, 220, 219, 220, 219, 219, 219, 220, 220, nil, - nil, nil, 220, nil, 220, 220, 220, 220, 220, 220, - 220, nil, nil, nil, nil, nil, 220, 220, 220, 220, - 220, 220, 220, nil, nil, 220, nil, nil, nil, nil, - nil, nil, 220, nil, nil, 220, 220, 220, 220, 220, - 220, 220, 220, nil, 220, 220, 220, nil, 220, 220, - 220, 220, 220, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 220, nil, nil, 220, nil, nil, 220, 220, - nil, nil, 220, nil, nil, nil, nil, nil, 220, nil, - nil, nil, nil, nil, nil, nil, nil, 220, nil, nil, - nil, nil, 220, 220, 220, 220, nil, 220, 220, 220, - 220, nil, nil, nil, nil, 220, 220, nil, nil, nil, - 221, 221, 221, 220, 221, 220, 220, 220, 221, 221, - nil, nil, nil, 221, nil, 221, 221, 221, 221, 221, - 221, 221, nil, nil, nil, nil, nil, 221, 221, 221, - 221, 221, 221, 221, nil, nil, 221, nil, nil, nil, - nil, nil, nil, 221, nil, nil, 221, 221, 221, 221, - 221, 221, 221, 221, nil, 221, 221, 221, nil, 221, - 221, 221, 221, 221, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 221, nil, nil, 221, nil, nil, 221, - 221, nil, nil, 221, nil, nil, nil, nil, nil, 221, - nil, nil, nil, nil, nil, nil, nil, nil, 221, nil, - nil, nil, nil, 221, 221, 221, 221, nil, 221, 221, - 221, 221, nil, nil, nil, nil, 221, 221, 221, nil, - nil, 232, 232, 232, 221, 232, 221, 221, 221, 232, - 232, nil, nil, nil, 232, nil, 232, 232, 232, 232, - 232, 232, 232, nil, nil, nil, nil, nil, 232, 232, - 232, 232, 232, 232, 232, nil, nil, 232, nil, nil, - nil, nil, nil, nil, 232, nil, nil, 232, 232, 232, - 232, 232, 232, 232, 232, nil, 232, 232, 232, nil, - 232, 232, 232, 232, 232, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 232, nil, nil, 232, nil, nil, - 232, 232, nil, nil, 232, nil, nil, nil, nil, nil, - 232, nil, nil, nil, nil, nil, nil, nil, nil, 232, - nil, nil, nil, nil, 232, 232, 232, 232, nil, 232, - 232, 232, 232, nil, nil, nil, nil, 232, 232, nil, - nil, nil, 235, 235, 235, 232, 235, 232, 232, 232, - 235, 235, nil, nil, nil, 235, nil, 235, 235, 235, - 235, 235, 235, 235, nil, nil, nil, nil, nil, 235, - 235, 235, 235, 235, 235, 235, nil, nil, 235, nil, - nil, nil, nil, nil, nil, 235, nil, nil, 235, 235, - 235, 235, 235, 235, 235, 235, nil, 235, 235, 235, - nil, 235, 235, 235, 235, 235, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 235, nil, nil, 235, nil, - nil, 235, 235, nil, nil, 235, nil, nil, nil, nil, - nil, 235, nil, nil, nil, nil, nil, nil, nil, nil, - 235, nil, nil, nil, nil, 235, 235, 235, 235, nil, - 235, 235, 235, 235, nil, nil, nil, nil, 235, 235, - nil, nil, nil, 236, 236, 236, 235, 236, 235, 235, - 235, 236, 236, nil, nil, nil, 236, nil, 236, 236, - 236, 236, 236, 236, 236, nil, nil, nil, nil, nil, - 236, 236, 236, 236, 236, 236, 236, nil, nil, 236, - nil, nil, nil, nil, nil, nil, 236, nil, nil, 236, - 236, 236, 236, 236, 236, 236, 236, nil, 236, 236, - 236, nil, 236, 236, 236, 236, 236, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 236, nil, nil, 236, - nil, nil, 236, 236, nil, nil, 236, nil, nil, nil, - nil, nil, 236, nil, nil, nil, nil, nil, nil, nil, - nil, 236, nil, nil, nil, nil, 236, 236, 236, 236, - nil, 236, 236, 236, 236, nil, nil, nil, nil, 236, - 236, nil, nil, nil, 237, 237, 237, 236, 237, 236, - 236, 236, 237, 237, nil, nil, nil, 237, nil, 237, - 237, 237, 237, 237, 237, 237, nil, nil, nil, nil, - nil, 237, 237, 237, 237, 237, 237, 237, nil, nil, - 237, nil, nil, nil, nil, nil, nil, 237, nil, nil, - 237, 237, 237, 237, 237, 237, 237, 237, nil, 237, - 237, 237, nil, 237, 237, 237, 237, 237, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 237, nil, nil, - 237, nil, nil, 237, 237, nil, nil, 237, nil, nil, - nil, nil, nil, 237, nil, nil, nil, nil, nil, nil, - nil, nil, 237, nil, nil, nil, nil, 237, 237, 237, - 237, nil, 237, 237, 237, 237, nil, nil, nil, nil, - 237, 237, nil, nil, nil, 238, 238, 238, 237, 238, - 237, 237, 237, 238, 238, nil, nil, nil, 238, nil, - 238, 238, 238, 238, 238, 238, 238, nil, nil, nil, - nil, nil, 238, 238, 238, 238, 238, 238, 238, nil, - nil, 238, nil, nil, nil, nil, nil, nil, 238, nil, - nil, 238, 238, 238, 238, 238, 238, 238, 238, nil, - 238, 238, 238, nil, 238, 238, 238, 238, 238, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 238, nil, - nil, 238, nil, nil, 238, 238, nil, nil, 238, nil, - nil, nil, nil, nil, 238, nil, nil, nil, nil, nil, - nil, nil, nil, 238, nil, nil, nil, nil, 238, 238, - 238, 238, nil, 238, 238, 238, 238, nil, nil, nil, - nil, 238, 238, nil, nil, nil, 239, 239, 239, 238, - 239, 238, 238, 238, 239, 239, nil, nil, nil, 239, - nil, 239, 239, 239, 239, 239, 239, 239, nil, nil, - nil, nil, nil, 239, 239, 239, 239, 239, 239, 239, - nil, nil, 239, nil, nil, nil, nil, nil, nil, 239, - nil, nil, 239, 239, 239, 239, 239, 239, 239, 239, - nil, 239, 239, 239, nil, 239, 239, 239, 239, 239, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 239, - nil, nil, 239, nil, nil, 239, 239, nil, nil, 239, - nil, nil, nil, nil, nil, 239, nil, nil, nil, nil, - nil, nil, nil, nil, 239, nil, nil, nil, nil, 239, - 239, 239, 239, nil, 239, 239, 239, 239, nil, nil, - nil, nil, 239, 239, nil, nil, nil, 240, 240, 240, - 239, 240, 239, 239, 239, 240, 240, nil, nil, nil, - 240, nil, 240, 240, 240, 240, 240, 240, 240, nil, - nil, nil, nil, nil, 240, 240, 240, 240, 240, 240, - 240, nil, nil, 240, nil, nil, nil, nil, nil, nil, - 240, nil, nil, 240, 240, 240, 240, 240, 240, 240, - 240, nil, 240, 240, 240, nil, 240, 240, 240, 240, - 240, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 240, nil, nil, 240, nil, nil, 240, 240, nil, nil, - 240, nil, nil, nil, nil, nil, 240, nil, nil, nil, - nil, nil, nil, nil, nil, 240, nil, nil, nil, nil, - 240, 240, 240, 240, nil, 240, 240, 240, 240, nil, - nil, nil, nil, 240, 240, nil, nil, nil, 241, 241, - 241, 240, 241, 240, 240, 240, 241, 241, nil, nil, - nil, 241, nil, 241, 241, 241, 241, 241, 241, 241, - nil, nil, nil, nil, nil, 241, 241, 241, 241, 241, - 241, 241, nil, nil, 241, nil, nil, nil, nil, nil, - nil, 241, nil, nil, 241, 241, 241, 241, 241, 241, - 241, 241, nil, 241, 241, 241, nil, 241, 241, 241, - 241, 241, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 241, nil, nil, 241, nil, nil, 241, 241, nil, - nil, 241, nil, nil, nil, nil, nil, 241, nil, nil, - nil, nil, nil, nil, nil, nil, 241, nil, nil, nil, - nil, 241, 241, 241, 241, nil, 241, 241, 241, 241, - nil, nil, nil, nil, 241, 241, nil, nil, nil, 242, - 242, 242, 241, 242, 241, 241, 241, 242, 242, nil, - nil, nil, 242, nil, 242, 242, 242, 242, 242, 242, - 242, nil, nil, nil, nil, nil, 242, 242, 242, 242, - 242, 242, 242, nil, nil, 242, nil, nil, nil, nil, - nil, nil, 242, nil, nil, 242, 242, 242, 242, 242, - 242, 242, 242, nil, 242, 242, 242, nil, 242, 242, - 242, 242, 242, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 242, nil, nil, 242, nil, nil, 242, 242, - nil, nil, 242, nil, nil, nil, nil, nil, 242, nil, - nil, nil, nil, nil, nil, nil, nil, 242, nil, nil, - nil, nil, 242, 242, 242, 242, nil, 242, 242, 242, - 242, nil, nil, nil, nil, 242, 242, nil, nil, nil, - 243, 243, 243, 242, 243, 242, 242, 242, 243, 243, - nil, nil, nil, 243, nil, 243, 243, 243, 243, 243, - 243, 243, nil, nil, nil, nil, nil, 243, 243, 243, - 243, 243, 243, 243, nil, nil, 243, nil, nil, nil, - nil, nil, nil, 243, nil, nil, 243, 243, 243, 243, - 243, 243, 243, 243, nil, 243, 243, 243, nil, 243, - 243, 243, 243, 243, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 243, nil, nil, 243, nil, nil, 243, - 243, nil, nil, 243, nil, nil, nil, nil, nil, 243, - nil, nil, nil, nil, nil, nil, nil, nil, 243, nil, - nil, nil, nil, 243, 243, 243, 243, nil, 243, 243, - 243, 243, nil, nil, nil, nil, 243, 243, nil, nil, - nil, 244, 244, 244, 243, 244, 243, 243, 243, 244, - 244, nil, nil, nil, 244, nil, 244, 244, 244, 244, - 244, 244, 244, nil, nil, nil, nil, nil, 244, 244, - 244, 244, 244, 244, 244, nil, nil, 244, nil, nil, - nil, nil, nil, nil, 244, nil, nil, 244, 244, 244, - 244, 244, 244, 244, 244, nil, 244, 244, 244, nil, - 244, 244, 244, 244, 244, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 244, nil, nil, 244, nil, nil, - 244, 244, nil, nil, 244, nil, nil, nil, nil, nil, - 244, nil, nil, nil, nil, nil, nil, nil, nil, 244, - nil, nil, nil, nil, 244, 244, 244, 244, nil, 244, - 244, 244, 244, nil, nil, nil, nil, 244, 244, nil, - nil, nil, 245, 245, 245, 244, 245, 244, 244, 244, - 245, 245, nil, nil, nil, 245, nil, 245, 245, 245, - 245, 245, 245, 245, nil, nil, nil, nil, nil, 245, - 245, 245, 245, 245, 245, 245, nil, nil, 245, nil, - nil, nil, nil, nil, nil, 245, nil, nil, 245, 245, - 245, 245, 245, 245, 245, 245, nil, 245, 245, 245, - nil, 245, 245, 245, 245, 245, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 245, nil, nil, 245, nil, - nil, 245, 245, nil, nil, 245, nil, nil, nil, nil, - nil, 245, nil, nil, nil, nil, nil, nil, nil, nil, - 245, nil, nil, nil, nil, 245, 245, 245, 245, nil, - 245, 245, 245, 245, nil, nil, nil, nil, 245, 245, - nil, nil, nil, 246, 246, 246, 245, 246, 245, 245, - 245, 246, 246, nil, nil, nil, 246, nil, 246, 246, - 246, 246, 246, 246, 246, nil, nil, nil, nil, nil, - 246, 246, 246, 246, 246, 246, 246, nil, nil, 246, - nil, nil, nil, nil, nil, nil, 246, nil, nil, 246, - 246, 246, 246, 246, 246, 246, 246, nil, 246, 246, - 246, nil, 246, 246, 246, 246, 246, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 246, nil, nil, 246, - nil, nil, 246, 246, nil, nil, 246, nil, nil, nil, - nil, nil, 246, nil, nil, nil, nil, nil, nil, nil, - nil, 246, nil, nil, nil, nil, 246, 246, 246, 246, - nil, 246, 246, 246, 246, nil, nil, nil, nil, 246, - 246, nil, nil, nil, 247, 247, 247, 246, 247, 246, - 246, 246, 247, 247, nil, nil, nil, 247, nil, 247, - 247, 247, 247, 247, 247, 247, nil, nil, nil, nil, - nil, 247, 247, 247, 247, 247, 247, 247, nil, nil, - 247, nil, nil, nil, nil, nil, nil, 247, nil, nil, - 247, 247, 247, 247, 247, 247, 247, 247, nil, 247, - 247, 247, nil, 247, 247, 247, 247, 247, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 247, nil, nil, - 247, nil, nil, 247, 247, nil, nil, 247, nil, nil, - nil, nil, nil, 247, nil, nil, nil, nil, nil, nil, - nil, nil, 247, nil, nil, nil, nil, 247, 247, 247, - 247, nil, 247, 247, 247, 247, nil, nil, nil, nil, - 247, 247, nil, nil, nil, 248, 248, 248, 247, 248, - 247, 247, 247, 248, 248, nil, nil, nil, 248, nil, - 248, 248, 248, 248, 248, 248, 248, nil, nil, nil, - nil, nil, 248, 248, 248, 248, 248, 248, 248, nil, - nil, 248, nil, nil, nil, nil, nil, nil, 248, nil, - nil, 248, 248, 248, 248, 248, 248, 248, 248, nil, - 248, 248, 248, nil, 248, 248, 248, 248, 248, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 248, nil, - nil, 248, nil, nil, 248, 248, nil, nil, 248, nil, - nil, nil, nil, nil, 248, nil, nil, nil, nil, nil, - nil, nil, nil, 248, nil, nil, nil, nil, 248, 248, - 248, 248, nil, 248, 248, 248, 248, nil, nil, nil, - nil, 248, 248, nil, nil, nil, 249, 249, 249, 248, - 249, 248, 248, 248, 249, 249, nil, nil, nil, 249, - nil, 249, 249, 249, 249, 249, 249, 249, nil, nil, - nil, nil, nil, 249, 249, 249, 249, 249, 249, 249, - nil, nil, 249, nil, nil, nil, nil, nil, nil, 249, - nil, nil, 249, 249, 249, 249, 249, 249, 249, 249, - nil, 249, 249, 249, nil, 249, 249, 249, 249, 249, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 249, - nil, nil, 249, nil, nil, 249, 249, nil, nil, 249, - nil, nil, nil, nil, nil, 249, nil, nil, nil, nil, - nil, nil, nil, nil, 249, nil, nil, nil, nil, 249, - 249, 249, 249, nil, 249, 249, 249, 249, nil, nil, - nil, nil, 249, 249, nil, nil, nil, 250, 250, 250, - 249, 250, 249, 249, 249, 250, 250, nil, nil, nil, - 250, nil, 250, 250, 250, 250, 250, 250, 250, nil, - nil, nil, nil, nil, 250, 250, 250, 250, 250, 250, - 250, nil, nil, 250, nil, nil, nil, nil, nil, nil, - 250, nil, nil, 250, 250, 250, 250, 250, 250, 250, - 250, nil, 250, 250, 250, nil, 250, 250, 250, 250, - 250, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 250, nil, nil, 250, nil, nil, 250, 250, nil, nil, - 250, nil, nil, nil, nil, nil, 250, nil, nil, nil, - nil, nil, nil, nil, nil, 250, nil, nil, nil, nil, - 250, 250, 250, 250, nil, 250, 250, 250, 250, nil, - nil, nil, nil, 250, 250, nil, nil, nil, 251, 251, - 251, 250, 251, 250, 250, 250, 251, 251, nil, nil, - nil, 251, nil, 251, 251, 251, 251, 251, 251, 251, - nil, nil, nil, nil, nil, 251, 251, 251, 251, 251, - 251, 251, nil, nil, 251, nil, nil, nil, nil, nil, - nil, 251, nil, nil, 251, 251, 251, 251, 251, 251, - 251, 251, nil, 251, 251, 251, nil, 251, 251, 251, - 251, 251, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 251, nil, nil, 251, nil, nil, 251, 251, nil, - nil, 251, nil, nil, nil, nil, nil, 251, nil, nil, - nil, nil, nil, nil, nil, nil, 251, nil, nil, nil, - nil, 251, 251, 251, 251, nil, 251, 251, 251, 251, - nil, nil, nil, nil, 251, 251, nil, nil, nil, 252, - 252, 252, 251, 252, 251, 251, 251, 252, 252, nil, - nil, nil, 252, nil, 252, 252, 252, 252, 252, 252, - 252, nil, nil, nil, nil, nil, 252, 252, 252, 252, - 252, 252, 252, nil, nil, 252, nil, nil, nil, nil, - nil, nil, 252, nil, nil, 252, 252, 252, 252, 252, - 252, 252, 252, nil, 252, 252, 252, nil, 252, 252, - 252, 252, 252, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 252, nil, nil, 252, nil, nil, 252, 252, - nil, nil, 252, nil, nil, nil, nil, nil, 252, nil, - nil, nil, nil, nil, nil, nil, nil, 252, nil, nil, - nil, nil, 252, 252, 252, 252, nil, 252, 252, 252, - 252, nil, nil, nil, nil, 252, 252, nil, nil, nil, - 253, 253, 253, 252, 253, 252, 252, 252, 253, 253, - nil, nil, nil, 253, nil, 253, 253, 253, 253, 253, - 253, 253, nil, nil, nil, nil, nil, 253, 253, 253, - 253, 253, 253, 253, nil, nil, 253, nil, nil, nil, - nil, nil, nil, 253, nil, nil, 253, 253, 253, 253, - 253, 253, 253, 253, nil, 253, 253, 253, nil, 253, - 253, 253, 253, 253, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 253, nil, nil, 253, nil, nil, 253, - 253, nil, nil, 253, nil, nil, nil, nil, nil, 253, - nil, nil, nil, nil, nil, nil, nil, nil, 253, nil, - nil, nil, nil, 253, 253, 253, 253, nil, 253, 253, - 253, 253, nil, nil, nil, nil, 253, 253, nil, nil, - nil, 254, 254, 254, 253, 254, 253, 253, 253, 254, - 254, nil, nil, nil, 254, nil, 254, 254, 254, 254, - 254, 254, 254, nil, nil, nil, nil, nil, 254, 254, - 254, 254, 254, 254, 254, nil, nil, 254, nil, nil, - nil, nil, nil, nil, 254, nil, nil, 254, 254, 254, - 254, 254, 254, 254, 254, nil, 254, 254, 254, nil, - 254, 254, 254, 254, 254, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 254, nil, nil, 254, nil, nil, - 254, 254, nil, nil, 254, nil, nil, nil, nil, nil, - 254, nil, nil, nil, nil, nil, nil, nil, nil, 254, - nil, nil, nil, nil, 254, 254, 254, 254, nil, 254, - 254, 254, 254, nil, nil, nil, nil, 254, 254, nil, - nil, nil, 255, 255, 255, 254, 255, 254, 254, 254, - 255, 255, nil, nil, nil, 255, nil, 255, 255, 255, - 255, 255, 255, 255, nil, nil, nil, nil, nil, 255, - 255, 255, 255, 255, 255, 255, nil, nil, 255, nil, - nil, nil, nil, nil, nil, 255, nil, nil, 255, 255, - 255, 255, 255, 255, 255, 255, nil, 255, 255, 255, - nil, 255, 255, 255, 255, 255, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 255, nil, nil, 255, nil, - nil, 255, 255, nil, nil, 255, nil, nil, nil, nil, - nil, 255, nil, nil, nil, nil, nil, nil, nil, nil, - 255, nil, nil, nil, nil, 255, 255, 255, 255, nil, - 255, 255, 255, 255, nil, nil, nil, nil, 255, 255, - nil, nil, nil, 256, 256, 256, 255, 256, 255, 255, - 255, 256, 256, nil, nil, nil, 256, nil, 256, 256, - 256, 256, 256, 256, 256, nil, nil, nil, nil, nil, - 256, 256, 256, 256, 256, 256, 256, nil, nil, 256, - nil, nil, nil, nil, nil, nil, 256, nil, nil, 256, - 256, 256, 256, 256, 256, 256, 256, nil, 256, 256, - 256, nil, 256, 256, 256, 256, 256, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 256, nil, nil, 256, - nil, nil, 256, 256, nil, nil, 256, nil, nil, nil, - nil, nil, 256, nil, nil, nil, nil, nil, nil, nil, - nil, 256, nil, nil, nil, nil, 256, 256, 256, 256, - nil, 256, 256, 256, 256, nil, nil, nil, nil, 256, - 256, nil, nil, nil, 257, 257, 257, 256, 257, 256, - 256, 256, 257, 257, nil, nil, nil, 257, nil, 257, - 257, 257, 257, 257, 257, 257, nil, nil, nil, nil, - nil, 257, 257, 257, 257, 257, 257, 257, nil, nil, - 257, nil, nil, nil, nil, nil, nil, 257, nil, nil, - 257, 257, 257, 257, 257, 257, 257, 257, nil, 257, - 257, 257, nil, 257, 257, 257, 257, 257, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 257, nil, nil, - 257, nil, nil, 257, 257, nil, nil, 257, nil, nil, - nil, nil, nil, 257, nil, nil, nil, nil, nil, nil, - nil, nil, 257, nil, nil, nil, nil, 257, 257, 257, - 257, nil, 257, 257, 257, 257, nil, nil, nil, nil, - 257, 257, nil, nil, nil, 258, 258, 258, 257, 258, - 257, 257, 257, 258, 258, nil, nil, nil, 258, nil, - 258, 258, 258, 258, 258, 258, 258, nil, nil, nil, - nil, nil, 258, 258, 258, 258, 258, 258, 258, nil, - nil, 258, nil, nil, nil, nil, nil, nil, 258, nil, - nil, 258, 258, 258, 258, 258, 258, 258, 258, nil, - 258, 258, 258, nil, 258, 258, 258, 258, 258, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 258, nil, - nil, 258, nil, nil, 258, 258, nil, nil, 258, nil, - nil, nil, nil, nil, 258, nil, nil, nil, nil, nil, - nil, nil, nil, 258, nil, nil, nil, nil, 258, 258, - 258, 258, nil, 258, 258, 258, 258, nil, nil, nil, - nil, 258, 258, nil, nil, nil, 259, 259, 259, 258, - 259, 258, 258, 258, 259, 259, nil, nil, nil, 259, - nil, 259, 259, 259, 259, 259, 259, 259, nil, nil, - nil, nil, nil, 259, 259, 259, 259, 259, 259, 259, - nil, nil, 259, nil, nil, nil, nil, nil, nil, 259, - nil, nil, 259, 259, 259, 259, 259, 259, 259, 259, - nil, 259, 259, 259, nil, 259, 259, 259, 259, 259, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 259, - nil, nil, 259, nil, nil, 259, 259, nil, nil, 259, - nil, nil, nil, nil, nil, 259, nil, nil, nil, nil, - nil, nil, nil, nil, 259, nil, nil, nil, nil, 259, - 259, 259, 259, nil, 259, 259, 259, 259, nil, nil, - nil, nil, 259, 259, nil, nil, nil, 260, 260, 260, - 259, 260, 259, 259, 259, 260, 260, nil, nil, nil, - 260, nil, 260, 260, 260, 260, 260, 260, 260, nil, - nil, nil, nil, nil, 260, 260, 260, 260, 260, 260, - 260, nil, nil, 260, nil, nil, nil, nil, nil, nil, - 260, nil, nil, 260, 260, 260, 260, 260, 260, 260, - 260, nil, 260, 260, 260, nil, 260, 260, 260, 260, - 260, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 260, nil, nil, 260, nil, nil, 260, 260, nil, nil, - 260, nil, nil, nil, nil, nil, 260, nil, nil, nil, - nil, nil, nil, nil, nil, 260, nil, nil, nil, nil, - 260, 260, 260, 260, nil, 260, 260, 260, 260, nil, - nil, nil, nil, 260, 260, nil, nil, nil, 267, 267, - 267, 260, 267, 260, 260, 260, 267, 267, nil, nil, - nil, 267, nil, 267, 267, 267, 267, 267, 267, 267, - nil, nil, nil, nil, nil, 267, 267, 267, 267, 267, - 267, 267, nil, nil, 267, nil, nil, nil, nil, nil, - nil, 267, nil, nil, 267, 267, 267, 267, 267, 267, - 267, 267, 267, 267, 267, 267, nil, 267, 267, 267, - 267, 267, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 267, nil, nil, 267, nil, nil, 267, 267, nil, - nil, 267, nil, 267, nil, 267, nil, 267, nil, nil, - 267, nil, nil, nil, nil, nil, 267, nil, nil, nil, - nil, 267, 267, 267, 267, nil, 267, 267, 267, 267, - nil, nil, nil, nil, 267, 267, nil, nil, nil, 268, - 268, 268, 267, 268, 267, 267, 267, 268, 268, nil, - nil, nil, 268, nil, 268, 268, 268, 268, 268, 268, - 268, nil, nil, nil, nil, nil, 268, 268, 268, 268, - 268, 268, 268, nil, nil, 268, nil, nil, nil, nil, - nil, nil, 268, nil, nil, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 268, 268, nil, 268, 268, - 268, 268, 268, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 268, nil, nil, 268, nil, nil, 268, 268, - nil, nil, 268, nil, 268, nil, 268, nil, 268, nil, - nil, 268, nil, nil, nil, nil, nil, 268, nil, nil, - nil, nil, 268, 268, 268, 268, nil, 268, 268, 268, - 268, nil, nil, nil, nil, 268, 268, nil, nil, nil, - 276, 276, 276, 268, 276, 268, 268, 268, 276, 276, - nil, nil, nil, 276, nil, 276, 276, 276, 276, 276, - 276, 276, nil, nil, nil, nil, nil, 276, 276, 276, - 276, 276, 276, 276, nil, nil, 276, nil, nil, nil, - nil, nil, nil, 276, nil, nil, 276, 276, 276, 276, - 276, 276, 276, 276, 276, 276, 276, 276, nil, 276, - 276, 276, 276, 276, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 276, nil, nil, 276, nil, nil, 276, - 276, nil, nil, 276, nil, 276, nil, 276, nil, 276, - nil, nil, 276, nil, nil, nil, nil, nil, 276, nil, - nil, nil, nil, 276, 276, 276, 276, nil, 276, 276, - 276, 276, nil, nil, nil, nil, 276, 276, 276, nil, - nil, 283, 283, 283, 276, 283, 276, 276, 276, 283, - 283, nil, nil, nil, 283, nil, 283, 283, 283, 283, - 283, 283, 283, nil, nil, nil, nil, nil, 283, 283, - 283, 283, 283, 283, 283, nil, nil, 283, nil, nil, - nil, nil, nil, nil, 283, nil, nil, 283, 283, 283, - 283, 283, 283, 283, 283, nil, 283, 283, 283, nil, - 283, 283, 283, 283, 283, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 283, nil, nil, 283, nil, nil, - 283, 283, nil, nil, 283, nil, nil, nil, nil, nil, - 283, nil, nil, nil, nil, nil, nil, nil, nil, 283, - nil, nil, nil, nil, 283, 283, 283, 283, nil, 283, - 283, 283, 283, nil, nil, nil, nil, 283, 283, nil, - nil, nil, 285, 285, 285, 283, 285, 283, 283, 283, - 285, 285, nil, nil, nil, 285, nil, 285, 285, 285, - 285, 285, 285, 285, nil, nil, nil, nil, nil, 285, - 285, 285, 285, 285, 285, 285, nil, nil, 285, nil, - nil, nil, nil, nil, nil, 285, nil, nil, 285, 285, - 285, 285, 285, 285, 285, 285, nil, 285, 285, 285, - nil, 285, 285, 285, 285, 285, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 285, nil, nil, 285, nil, - nil, 285, 285, nil, nil, 285, nil, nil, nil, nil, - nil, 285, nil, nil, nil, nil, nil, nil, nil, nil, - 285, nil, nil, nil, nil, 285, 285, 285, 285, nil, - 285, 285, 285, 285, nil, nil, nil, nil, 285, 285, - nil, nil, nil, 288, 288, 288, 285, 288, 285, 285, - 285, 288, 288, nil, nil, nil, 288, nil, 288, 288, - 288, 288, 288, 288, 288, nil, nil, nil, nil, nil, - 288, 288, 288, 288, 288, 288, 288, nil, nil, 288, - nil, nil, nil, nil, nil, nil, 288, nil, nil, 288, - 288, 288, 288, 288, 288, 288, 288, nil, 288, 288, - 288, nil, 288, 288, 288, 288, 288, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 288, nil, nil, 288, - nil, nil, 288, 288, nil, nil, 288, nil, nil, nil, - nil, nil, 288, nil, nil, nil, nil, nil, nil, nil, - nil, 288, nil, nil, nil, nil, 288, 288, 288, 288, - nil, 288, 288, 288, 288, nil, nil, nil, nil, 288, - 288, nil, nil, nil, 289, 289, 289, 288, 289, 288, - 288, 288, 289, 289, nil, nil, nil, 289, nil, 289, - 289, 289, 289, 289, 289, 289, nil, nil, nil, nil, - nil, 289, 289, 289, 289, 289, 289, 289, nil, nil, - 289, nil, nil, nil, nil, nil, nil, 289, nil, nil, - 289, 289, 289, 289, 289, 289, 289, 289, nil, 289, - 289, 289, nil, 289, 289, 289, 289, 289, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 289, nil, nil, - 289, nil, nil, 289, 289, nil, nil, 289, nil, nil, - nil, nil, nil, 289, nil, nil, nil, nil, nil, nil, - nil, nil, 289, nil, nil, nil, nil, 289, 289, 289, - 289, nil, 289, 289, 289, 289, nil, nil, nil, nil, - 289, 289, nil, nil, nil, nil, nil, nil, 289, nil, - 289, 289, 289, 294, 294, 294, 294, 294, nil, nil, - nil, 294, 294, nil, nil, nil, 294, nil, 294, 294, - 294, 294, 294, 294, 294, nil, nil, nil, nil, nil, - 294, 294, 294, 294, 294, 294, 294, nil, nil, 294, - nil, nil, nil, nil, nil, 294, 294, nil, 294, 294, - 294, 294, 294, 294, 294, 294, 294, nil, 294, 294, - 294, nil, 294, 294, 294, 294, 294, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 294, nil, nil, 294, - nil, nil, 294, 294, nil, nil, 294, nil, 294, nil, - nil, nil, 294, nil, nil, nil, nil, nil, nil, nil, - nil, 294, nil, nil, nil, nil, 294, 294, 294, 294, - nil, 294, 294, 294, 294, nil, nil, nil, nil, 294, - 294, nil, nil, nil, 302, 302, 302, 294, 302, 294, - 294, 294, 302, 302, nil, nil, nil, 302, nil, 302, - 302, 302, 302, 302, 302, 302, nil, nil, nil, nil, - nil, 302, 302, 302, 302, 302, 302, 302, nil, nil, - 302, nil, nil, nil, nil, nil, nil, 302, nil, nil, - 302, 302, 302, 302, 302, 302, 302, 302, nil, 302, - 302, 302, nil, 302, 302, nil, nil, 302, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 302, nil, nil, - 302, nil, nil, 302, 302, nil, nil, 302, nil, nil, - 939, nil, 939, 939, 939, 939, 939, nil, nil, nil, - nil, nil, nil, nil, nil, 939, nil, 302, 302, 302, - 302, nil, 302, 302, 302, 302, nil, nil, nil, nil, - 302, 302, nil, nil, nil, 302, nil, 939, 302, nil, - 302, 302, 302, 319, 319, 319, nil, 319, 939, 939, - nil, 319, 319, 939, nil, nil, 319, nil, 319, 319, - 319, 319, 319, 319, 319, nil, nil, nil, nil, nil, - 319, 319, 319, 319, 319, 319, 319, nil, nil, 319, - nil, nil, nil, nil, nil, nil, 319, nil, nil, 319, - 319, 319, 319, 319, 319, 319, 319, nil, 319, 319, - 319, nil, 319, 319, nil, nil, 319, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 319, nil, nil, 319, - nil, nil, 319, 319, nil, nil, 319, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 319, 319, 319, 319, - nil, 319, 319, 319, 319, nil, nil, nil, nil, 319, - 319, nil, nil, nil, 327, 327, 327, 319, 327, 319, - 319, 319, 327, 327, nil, nil, nil, 327, nil, 327, - 327, 327, 327, 327, 327, 327, nil, nil, nil, nil, - nil, 327, 327, 327, 327, 327, 327, 327, nil, nil, - 327, nil, nil, nil, nil, nil, nil, 327, nil, nil, - 327, 327, 327, 327, 327, 327, 327, 327, nil, 327, - 327, 327, nil, 327, 327, 327, 327, 327, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 327, nil, nil, - 327, 327, nil, 327, 327, nil, nil, 327, nil, nil, - nil, nil, nil, 327, nil, nil, nil, nil, nil, nil, - nil, nil, 327, nil, nil, nil, nil, 327, 327, 327, - 327, nil, 327, 327, 327, 327, nil, nil, nil, nil, - 327, 327, nil, nil, nil, 329, 329, 329, 327, 329, - 327, 327, 327, 329, 329, nil, nil, nil, 329, nil, - 329, 329, 329, 329, 329, 329, 329, nil, nil, nil, - nil, nil, 329, 329, 329, 329, 329, 329, 329, nil, - nil, 329, nil, nil, nil, nil, nil, nil, 329, nil, - nil, 329, 329, 329, 329, 329, 329, 329, 329, nil, - 329, 329, 329, nil, 329, 329, 329, 329, 329, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 329, nil, - nil, 329, nil, nil, 329, 329, nil, nil, 329, nil, - nil, nil, nil, nil, 329, nil, nil, nil, nil, nil, - nil, nil, nil, 329, nil, nil, nil, nil, 329, 329, - 329, 329, nil, 329, 329, 329, 329, nil, nil, nil, - nil, 329, 329, nil, nil, nil, 343, 343, 343, 329, - 343, 329, 329, 329, 343, 343, nil, nil, nil, 343, - nil, 343, 343, 343, 343, 343, 343, 343, nil, nil, - nil, nil, nil, 343, 343, 343, 343, 343, 343, 343, - nil, nil, 343, nil, nil, nil, nil, nil, nil, 343, - nil, nil, 343, 343, 343, 343, 343, 343, 343, 343, - nil, 343, 343, 343, nil, 343, 343, 343, 343, 343, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 343, - nil, nil, 343, nil, nil, 343, 343, nil, nil, 343, - nil, nil, nil, nil, nil, 343, nil, nil, nil, nil, - nil, nil, nil, nil, 343, nil, nil, nil, nil, 343, - 343, 343, 343, nil, 343, 343, 343, 343, nil, nil, - nil, nil, 343, 343, nil, nil, nil, 344, 344, 344, - 343, 344, 343, 343, 343, 344, 344, nil, nil, nil, - 344, nil, 344, 344, 344, 344, 344, 344, 344, nil, - nil, nil, nil, nil, 344, 344, 344, 344, 344, 344, - 344, nil, nil, 344, nil, nil, nil, nil, nil, nil, - 344, nil, nil, 344, 344, 344, 344, 344, 344, 344, - 344, nil, 344, 344, 344, nil, 344, 344, 344, 344, - 344, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 344, nil, nil, 344, nil, nil, 344, 344, nil, nil, - 344, nil, nil, nil, nil, nil, 344, nil, nil, nil, - nil, nil, nil, nil, nil, 344, nil, nil, nil, nil, - 344, 344, 344, 344, nil, 344, 344, 344, 344, nil, - nil, nil, nil, 344, 344, nil, nil, nil, 363, 363, - 363, 344, 363, 344, 344, 344, 363, 363, nil, nil, - nil, 363, nil, 363, 363, 363, 363, 363, 363, 363, - nil, nil, nil, nil, nil, 363, 363, 363, 363, 363, - 363, 363, nil, nil, 363, nil, nil, nil, nil, nil, - nil, 363, nil, nil, 363, 363, 363, 363, 363, 363, - 363, 363, nil, 363, 363, 363, nil, 363, 363, 363, - 363, 363, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 363, nil, nil, 363, nil, nil, 363, 363, nil, - nil, 363, nil, nil, nil, nil, nil, 363, nil, nil, - nil, nil, nil, nil, nil, nil, 363, nil, nil, nil, - nil, 363, 363, 363, 363, nil, 363, 363, 363, 363, - nil, nil, nil, nil, 363, 363, nil, nil, nil, 379, - 379, 379, 363, 379, 363, 363, 363, 379, 379, nil, - nil, nil, 379, nil, 379, 379, 379, 379, 379, 379, - 379, nil, nil, nil, nil, nil, 379, 379, 379, 379, - 379, 379, 379, nil, nil, 379, nil, nil, nil, nil, - nil, nil, 379, nil, nil, 379, 379, 379, 379, 379, - 379, 379, 379, nil, 379, 379, 379, nil, 379, 379, - 379, 379, 379, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 379, nil, nil, 379, nil, nil, 379, 379, - nil, nil, 379, nil, nil, nil, nil, nil, 379, nil, - nil, nil, nil, nil, nil, nil, nil, 379, nil, nil, - nil, nil, 379, 379, 379, 379, nil, 379, 379, 379, - 379, nil, nil, nil, nil, 379, 379, nil, nil, nil, - 407, 407, 407, 379, 407, 379, 379, 379, 407, 407, - nil, nil, nil, 407, nil, 407, 407, 407, 407, 407, - 407, 407, nil, nil, nil, nil, nil, 407, 407, 407, - 407, 407, 407, 407, nil, nil, 407, nil, nil, nil, - nil, nil, nil, 407, nil, nil, 407, 407, 407, 407, - 407, 407, 407, 407, nil, 407, 407, 407, nil, 407, - 407, 407, 407, 407, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 407, nil, nil, 407, nil, nil, 407, - 407, nil, nil, 407, nil, nil, nil, nil, nil, 407, - nil, nil, nil, nil, nil, nil, nil, nil, 407, nil, - nil, nil, nil, 407, 407, 407, 407, nil, 407, 407, - 407, 407, nil, nil, nil, nil, 407, 407, nil, nil, - nil, 445, 445, 445, 407, 445, 407, 407, 407, 445, - 445, nil, nil, nil, 445, nil, 445, 445, 445, 445, - 445, 445, 445, nil, nil, nil, nil, nil, 445, 445, - 445, 445, 445, 445, 445, nil, nil, 445, nil, nil, - nil, nil, nil, nil, 445, nil, nil, 445, 445, 445, - 445, 445, 445, 445, 445, 445, 445, 445, 445, nil, - 445, 445, 445, 445, 445, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 445, nil, nil, 445, nil, nil, - 445, 445, nil, nil, 445, nil, 445, nil, 445, nil, - 445, nil, nil, 445, nil, nil, nil, nil, nil, 445, - nil, nil, nil, nil, 445, 445, 445, 445, nil, 445, - 445, 445, 445, nil, nil, nil, nil, 445, 445, nil, - nil, nil, 447, 447, 447, 445, 447, 445, 445, 445, - 447, 447, nil, nil, nil, 447, nil, 447, 447, 447, - 447, 447, 447, 447, nil, nil, nil, nil, nil, 447, - 447, 447, 447, 447, 447, 447, nil, nil, 447, nil, - nil, nil, nil, nil, nil, 447, nil, nil, 447, 447, - 447, 447, 447, 447, 447, 447, nil, 447, 447, 447, - nil, 447, 447, 447, 447, 447, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 447, nil, nil, 447, nil, - nil, 447, 447, nil, nil, 447, nil, nil, nil, nil, - nil, 447, nil, nil, nil, nil, nil, nil, nil, nil, - 447, nil, nil, nil, nil, 447, 447, 447, 447, nil, - 447, 447, 447, 447, nil, nil, nil, nil, 447, 447, - nil, nil, nil, 448, 448, 448, 447, 448, 447, 447, - 447, 448, 448, nil, nil, nil, 448, nil, 448, 448, - 448, 448, 448, 448, 448, nil, nil, nil, nil, nil, - 448, 448, 448, 448, 448, 448, 448, nil, nil, 448, - nil, nil, nil, nil, nil, nil, 448, nil, nil, 448, - 448, 448, 448, 448, 448, 448, 448, nil, 448, 448, - 448, nil, 448, 448, 448, 448, 448, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 448, nil, nil, 448, - nil, nil, 448, 448, nil, nil, 448, nil, nil, nil, - nil, nil, 448, nil, nil, nil, nil, nil, nil, nil, - nil, 448, nil, nil, nil, nil, 448, 448, 448, 448, - nil, 448, 448, 448, 448, nil, nil, nil, nil, 448, - 448, nil, nil, nil, 449, 449, 449, 448, 449, 448, - 448, 448, 449, 449, nil, nil, nil, 449, nil, 449, - 449, 449, 449, 449, 449, 449, nil, nil, nil, nil, - nil, 449, 449, 449, 449, 449, 449, 449, nil, nil, - 449, nil, nil, nil, nil, nil, nil, 449, nil, nil, - 449, 449, 449, 449, 449, 449, 449, 449, nil, 449, - 449, 449, nil, 449, 449, 449, 449, 449, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 449, nil, nil, - 449, nil, nil, 449, 449, nil, nil, 449, nil, nil, - nil, nil, nil, 449, nil, nil, nil, nil, nil, nil, - nil, nil, 449, nil, nil, nil, nil, 449, 449, 449, - 449, nil, 449, 449, 449, 449, nil, nil, nil, nil, - 449, 449, nil, nil, nil, 489, 489, 489, 449, 489, - 449, 449, 449, 489, 489, nil, nil, nil, 489, nil, - 489, 489, 489, 489, 489, 489, 489, nil, nil, nil, - nil, nil, 489, 489, 489, 489, 489, 489, 489, nil, - nil, 489, nil, nil, nil, nil, nil, nil, 489, nil, - nil, 489, 489, 489, 489, 489, 489, 489, 489, 489, - 489, 489, 489, nil, 489, 489, 489, 489, 489, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 489, nil, - nil, 489, nil, nil, 489, 489, nil, nil, 489, nil, - 489, nil, 489, nil, 489, nil, nil, 489, nil, nil, - nil, nil, nil, 489, nil, nil, nil, nil, 489, 489, - 489, 489, nil, 489, 489, 489, 489, nil, nil, nil, - nil, 489, 489, nil, nil, nil, 491, 491, 491, 489, - 491, 489, 489, 489, 491, 491, nil, nil, nil, 491, - nil, 491, 491, 491, 491, 491, 491, 491, nil, nil, - nil, nil, nil, 491, 491, 491, 491, 491, 491, 491, - nil, nil, 491, nil, nil, nil, nil, nil, nil, 491, - nil, nil, 491, 491, 491, 491, 491, 491, 491, 491, - 491, 491, 491, 491, nil, 491, 491, 491, 491, 491, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 491, - nil, nil, 491, nil, nil, 491, 491, nil, nil, 491, - nil, nil, nil, 491, nil, 491, nil, nil, 491, nil, - nil, nil, nil, nil, 491, nil, nil, nil, nil, 491, - 491, 491, 491, nil, 491, 491, 491, 491, nil, nil, - nil, nil, 491, 491, nil, nil, nil, 493, 493, 493, - 491, 493, 491, 491, 491, 493, 493, nil, nil, nil, - 493, nil, 493, 493, 493, 493, 493, 493, 493, nil, - nil, nil, nil, nil, 493, 493, 493, 493, 493, 493, - 493, nil, nil, 493, nil, nil, nil, nil, nil, nil, - 493, nil, nil, 493, 493, 493, 493, 493, 493, 493, - 493, nil, 493, 493, 493, nil, 493, 493, 493, 493, - 493, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 493, nil, nil, 493, nil, nil, 493, 493, nil, nil, - 493, nil, nil, nil, nil, nil, 493, nil, nil, nil, - nil, nil, nil, nil, nil, 493, nil, nil, nil, nil, - 493, 493, 493, 493, nil, 493, 493, 493, 493, nil, - nil, nil, nil, 493, 493, nil, nil, nil, nil, nil, - nil, 493, nil, 493, 493, 493, 499, 499, 499, 499, - 499, nil, nil, nil, 499, 499, nil, nil, nil, 499, - nil, 499, 499, 499, 499, 499, 499, 499, nil, nil, - nil, nil, nil, 499, 499, 499, 499, 499, 499, 499, - nil, nil, 499, nil, nil, nil, nil, nil, 499, 499, - 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, - nil, 499, 499, 499, nil, 499, 499, 499, 499, 499, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 499, - nil, nil, 499, nil, nil, 499, 499, nil, nil, 499, - nil, 499, nil, nil, nil, 499, nil, nil, nil, nil, - nil, nil, nil, nil, 499, nil, nil, nil, nil, 499, - 499, 499, 499, nil, 499, 499, 499, 499, nil, nil, - nil, nil, 499, 499, nil, nil, nil, nil, nil, 499, - 499, nil, 499, 499, 499, 507, 507, 507, nil, 507, - nil, nil, nil, 507, 507, nil, nil, nil, 507, nil, - 507, 507, 507, 507, 507, 507, 507, nil, nil, nil, - nil, nil, 507, 507, 507, 507, 507, 507, 507, nil, - nil, 507, nil, nil, nil, nil, nil, nil, 507, nil, - nil, 507, 507, 507, 507, 507, 507, 507, 507, nil, - 507, 507, 507, nil, 507, 507, nil, nil, 507, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 507, nil, - nil, 507, nil, nil, 507, 507, nil, nil, 507, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 507, 507, - 507, 507, nil, 507, 507, 507, 507, nil, nil, nil, - nil, 507, 507, nil, nil, nil, 509, 509, 509, 507, - 509, 507, 507, 507, 509, 509, nil, nil, nil, 509, - nil, 509, 509, 509, 509, 509, 509, 509, nil, nil, - nil, nil, nil, 509, 509, 509, 509, 509, 509, 509, - nil, nil, 509, nil, nil, nil, nil, nil, nil, 509, - nil, nil, 509, 509, 509, 509, 509, 509, 509, 509, - 509, 509, 509, 509, nil, 509, 509, 509, 509, 509, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 509, - nil, nil, 509, nil, nil, 509, 509, nil, nil, 509, - nil, 509, nil, 509, nil, 509, nil, nil, 509, nil, - nil, nil, nil, nil, 509, nil, nil, nil, nil, 509, - 509, 509, 509, nil, 509, 509, 509, 509, nil, nil, - nil, nil, 509, 509, nil, nil, nil, 515, 515, 515, - 509, 515, 509, 509, 509, 515, 515, nil, nil, nil, - 515, nil, 515, 515, 515, 515, 515, 515, 515, nil, - nil, nil, nil, nil, 515, 515, 515, 515, 515, 515, - 515, nil, nil, 515, nil, nil, nil, nil, nil, nil, - 515, nil, nil, 515, 515, 515, 515, 515, 515, 515, - 515, nil, 515, 515, 515, nil, 515, 515, nil, nil, - 515, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 515, nil, nil, 515, nil, nil, 515, 515, nil, nil, - 515, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 515, 515, 515, 515, nil, 515, 515, 515, 515, nil, - nil, nil, nil, 515, 515, nil, nil, nil, 518, 518, - 518, 515, 518, 515, 515, 515, 518, 518, nil, nil, - nil, 518, nil, 518, 518, 518, 518, 518, 518, 518, - nil, nil, nil, nil, nil, 518, 518, 518, 518, 518, - 518, 518, nil, nil, 518, nil, nil, nil, nil, nil, - nil, 518, nil, nil, 518, 518, 518, 518, 518, 518, - 518, 518, nil, 518, 518, 518, nil, 518, 518, 518, - 518, 518, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 518, nil, nil, 518, nil, nil, 518, 518, nil, - nil, 518, nil, nil, nil, nil, nil, 518, nil, nil, - nil, nil, nil, nil, nil, nil, 518, nil, nil, nil, - nil, 518, 518, 518, 518, nil, 518, 518, 518, 518, - nil, nil, nil, nil, 518, 518, nil, nil, nil, 519, - 519, 519, 518, 519, 518, 518, 518, 519, 519, nil, - nil, nil, 519, nil, 519, 519, 519, 519, 519, 519, - 519, nil, nil, nil, nil, nil, 519, 519, 519, 519, - 519, 519, 519, nil, nil, 519, nil, nil, nil, nil, - nil, nil, 519, nil, nil, 519, 519, 519, 519, 519, - 519, 519, 519, nil, 519, 519, 519, nil, 519, 519, - 519, 519, 519, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 519, nil, nil, 519, nil, nil, 519, 519, - nil, nil, 519, nil, nil, nil, nil, nil, 519, nil, - nil, nil, nil, nil, nil, nil, nil, 519, nil, nil, - nil, nil, 519, 519, 519, 519, nil, 519, 519, 519, - 519, nil, nil, nil, nil, 519, 519, nil, nil, nil, - 523, 523, 523, 519, 523, 519, 519, 519, 523, 523, - nil, nil, nil, 523, nil, 523, 523, 523, 523, 523, - 523, 523, nil, nil, nil, nil, nil, 523, 523, 523, - 523, 523, 523, 523, nil, nil, 523, nil, nil, nil, - nil, nil, nil, 523, nil, nil, 523, 523, 523, 523, - 523, 523, 523, 523, nil, 523, 523, 523, nil, 523, - 523, 523, 523, 523, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 523, nil, nil, 523, nil, nil, 523, - 523, nil, nil, 523, nil, nil, nil, nil, nil, 523, - nil, nil, nil, nil, nil, nil, nil, nil, 523, nil, - nil, nil, nil, 523, 523, 523, 523, nil, 523, 523, - 523, 523, nil, nil, nil, nil, 523, 523, nil, nil, - nil, 529, 529, 529, 523, 529, 523, 523, 523, 529, - 529, nil, nil, nil, 529, nil, 529, 529, 529, 529, - 529, 529, 529, nil, nil, nil, nil, nil, 529, 529, - 529, 529, 529, 529, 529, nil, nil, 529, nil, nil, - nil, nil, nil, nil, 529, nil, nil, 529, 529, 529, - 529, 529, 529, 529, 529, 529, 529, 529, 529, nil, - 529, 529, 529, 529, 529, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 529, nil, nil, 529, nil, nil, - 529, 529, nil, nil, 529, nil, 529, nil, nil, nil, - 529, nil, nil, 529, nil, nil, nil, nil, nil, 529, - nil, nil, nil, nil, 529, 529, 529, 529, nil, 529, - 529, 529, 529, nil, nil, nil, nil, 529, 529, nil, - nil, nil, 532, 532, 532, 529, 532, 529, 529, 529, - 532, 532, nil, nil, nil, 532, nil, 532, 532, 532, - 532, 532, 532, 532, nil, nil, nil, nil, nil, 532, - 532, 532, 532, 532, 532, 532, nil, nil, 532, nil, - nil, nil, nil, nil, nil, 532, nil, nil, 532, 532, - 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, - nil, 532, 532, 532, 532, 532, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 532, nil, nil, 532, nil, - nil, 532, 532, nil, nil, 532, nil, nil, nil, nil, - nil, 532, nil, nil, 532, nil, nil, nil, nil, nil, - 532, nil, nil, nil, nil, 532, 532, 532, 532, nil, - 532, 532, 532, 532, nil, nil, nil, nil, 532, 532, - nil, nil, nil, 546, 546, 546, 532, 546, 532, 532, - 532, 546, 546, nil, nil, nil, 546, nil, 546, 546, - 546, 546, 546, 546, 546, nil, nil, nil, nil, nil, - 546, 546, 546, 546, 546, 546, 546, nil, nil, 546, - nil, nil, nil, nil, nil, nil, 546, nil, nil, 546, - 546, 546, 546, 546, 546, 546, 546, nil, 546, 546, - 546, nil, 546, 546, 546, 546, 546, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 546, nil, nil, 546, - nil, nil, 546, 546, nil, nil, 546, nil, 546, nil, - nil, nil, 546, nil, nil, nil, nil, nil, nil, nil, - nil, 546, nil, nil, nil, nil, 546, 546, 546, 546, - nil, 546, 546, 546, 546, nil, nil, nil, nil, 546, - 546, nil, nil, nil, 547, 547, 547, 546, 547, 546, - 546, 546, 547, 547, nil, nil, nil, 547, nil, 547, - 547, 547, 547, 547, 547, 547, nil, nil, nil, nil, - nil, 547, 547, 547, 547, 547, 547, 547, nil, nil, - 547, nil, nil, nil, nil, nil, nil, 547, nil, nil, - 547, 547, 547, 547, 547, 547, 547, 547, 547, 547, - 547, 547, nil, 547, 547, 547, 547, 547, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 547, nil, nil, - 547, nil, nil, 547, 547, nil, nil, 547, nil, 547, - nil, 547, nil, 547, nil, nil, 547, nil, nil, nil, - nil, nil, 547, nil, nil, nil, nil, 547, 547, 547, - 547, nil, 547, 547, 547, 547, nil, nil, nil, nil, - 547, 547, nil, nil, nil, 557, 557, 557, 547, 557, - 547, 547, 547, 557, 557, nil, nil, nil, 557, nil, - 557, 557, 557, 557, 557, 557, 557, nil, nil, nil, - nil, nil, 557, 557, 557, 557, 557, 557, 557, nil, - nil, 557, nil, nil, nil, nil, nil, nil, 557, nil, - nil, 557, 557, 557, 557, 557, 557, 557, 557, 557, - 557, 557, 557, nil, 557, 557, 557, 557, 557, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 557, nil, - nil, 557, nil, nil, 557, 557, nil, nil, 557, nil, - 557, nil, 557, nil, 557, nil, nil, 557, nil, nil, - nil, nil, nil, 557, nil, nil, nil, nil, 557, 557, - 557, 557, nil, 557, 557, 557, 557, nil, nil, nil, - nil, 557, 557, nil, nil, nil, 589, 589, 589, 557, - 589, 557, 557, 557, 589, 589, nil, nil, nil, 589, - nil, 589, 589, 589, 589, 589, 589, 589, nil, nil, - nil, nil, nil, 589, 589, 589, 589, 589, 589, 589, - nil, nil, 589, nil, nil, nil, nil, nil, nil, 589, - nil, nil, 589, 589, 589, 589, 589, 589, 589, 589, - nil, 589, 589, 589, nil, 589, 589, 589, 589, 589, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 589, - nil, nil, 589, nil, nil, 589, 589, nil, nil, 589, - nil, 589, nil, nil, nil, 589, nil, nil, nil, nil, - nil, nil, nil, nil, 589, nil, nil, nil, nil, 589, - 589, 589, 589, nil, 589, 589, 589, 589, nil, nil, - nil, nil, 589, 589, nil, nil, nil, 590, 590, 590, - 589, 590, 589, 589, 589, 590, 590, nil, nil, nil, - 590, nil, 590, 590, 590, 590, 590, 590, 590, nil, - nil, nil, nil, nil, 590, 590, 590, 590, 590, 590, - 590, nil, nil, 590, nil, nil, nil, nil, nil, nil, - 590, nil, nil, 590, 590, 590, 590, 590, 590, 590, - 590, nil, 590, 590, 590, nil, 590, 590, 590, 590, - 590, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 590, nil, nil, 590, nil, nil, 590, 590, nil, nil, - 590, nil, nil, nil, nil, nil, 590, nil, nil, nil, - nil, nil, nil, nil, nil, 590, nil, nil, nil, nil, - 590, 590, 590, 590, nil, 590, 590, 590, 590, nil, - nil, nil, nil, 590, 590, nil, nil, nil, 593, 593, - 593, 590, 593, 590, 590, 590, 593, 593, nil, nil, - nil, 593, nil, 593, 593, 593, 593, 593, 593, 593, - nil, nil, nil, nil, nil, 593, 593, 593, 593, 593, - 593, 593, nil, nil, 593, nil, nil, nil, nil, nil, - nil, 593, nil, nil, 593, 593, 593, 593, 593, 593, - 593, 593, 593, 593, 593, 593, nil, 593, 593, 593, - 593, 593, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 593, nil, nil, 593, nil, nil, 593, 593, nil, - nil, 593, nil, 593, nil, 593, nil, 593, nil, nil, - 593, nil, nil, nil, nil, nil, 593, nil, nil, nil, - nil, 593, 593, 593, 593, nil, 593, 593, 593, 593, - nil, nil, nil, nil, 593, 593, nil, nil, nil, 594, - 594, 594, 593, 594, 593, 593, 593, 594, 594, nil, - nil, nil, 594, nil, 594, 594, 594, 594, 594, 594, - 594, nil, nil, nil, nil, nil, 594, 594, 594, 594, - 594, 594, 594, nil, nil, 594, nil, nil, nil, nil, - nil, nil, 594, nil, nil, 594, 594, 594, 594, 594, - 594, 594, 594, 594, 594, 594, 594, nil, 594, 594, - 594, 594, 594, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 594, nil, nil, 594, nil, nil, 594, 594, - nil, nil, 594, nil, nil, nil, 594, nil, 594, nil, - nil, 594, nil, nil, nil, nil, nil, 594, nil, nil, - nil, nil, 594, 594, 594, 594, nil, 594, 594, 594, - 594, nil, nil, nil, nil, 594, 594, nil, nil, nil, - 595, 595, 595, 594, 595, 594, 594, 594, 595, 595, - nil, nil, nil, 595, nil, 595, 595, 595, 595, 595, - 595, 595, nil, nil, nil, nil, nil, 595, 595, 595, - 595, 595, 595, 595, nil, nil, 595, nil, nil, nil, - nil, nil, nil, 595, nil, nil, 595, 595, 595, 595, - 595, 595, 595, 595, nil, 595, 595, 595, nil, 595, - 595, 595, 595, 595, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 595, nil, nil, 595, nil, nil, 595, - 595, nil, nil, 595, nil, nil, nil, nil, nil, 595, - nil, nil, nil, nil, nil, nil, nil, nil, 595, nil, - nil, nil, nil, 595, 595, 595, 595, nil, 595, 595, - 595, 595, nil, nil, nil, nil, 595, 595, nil, nil, - nil, 596, 596, 596, 595, 596, 595, 595, 595, 596, - 596, nil, nil, nil, 596, nil, 596, 596, 596, 596, - 596, 596, 596, nil, nil, nil, nil, nil, 596, 596, - 596, 596, 596, 596, 596, nil, nil, 596, nil, nil, - nil, nil, nil, nil, 596, nil, nil, 596, 596, 596, - 596, 596, 596, 596, 596, nil, 596, 596, 596, nil, - 596, 596, 596, 596, 596, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 596, nil, nil, 596, nil, nil, - 596, 596, nil, nil, 596, nil, nil, nil, nil, nil, - 596, nil, nil, nil, nil, nil, nil, nil, nil, 596, - nil, nil, nil, nil, 596, 596, 596, 596, nil, 596, - 596, 596, 596, nil, nil, nil, nil, 596, 596, nil, - nil, nil, 600, 600, 600, 596, 600, 596, 596, 596, - 600, 600, nil, nil, nil, 600, nil, 600, 600, 600, - 600, 600, 600, 600, nil, nil, nil, nil, nil, 600, - 600, 600, 600, 600, 600, 600, nil, nil, 600, nil, - nil, nil, nil, nil, nil, 600, nil, nil, 600, 600, - 600, 600, 600, 600, 600, 600, nil, 600, 600, 600, - nil, 600, 600, 600, 600, 600, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 600, nil, nil, 600, nil, - nil, 600, 600, nil, nil, 600, nil, nil, nil, nil, - nil, 600, nil, nil, nil, nil, nil, nil, nil, nil, - 600, nil, nil, nil, nil, 600, 600, 600, 600, nil, - 600, 600, 600, 600, nil, nil, nil, nil, 600, 600, - nil, nil, nil, 601, 601, 601, 600, 601, 600, 600, - 600, 601, 601, nil, nil, nil, 601, nil, 601, 601, - 601, 601, 601, 601, 601, nil, nil, nil, nil, nil, - 601, 601, 601, 601, 601, 601, 601, nil, nil, 601, - nil, nil, nil, nil, nil, nil, 601, nil, nil, 601, - 601, 601, 601, 601, 601, 601, 601, nil, 601, 601, - 601, nil, 601, 601, 601, 601, 601, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 601, nil, nil, 601, - nil, nil, 601, 601, nil, nil, 601, nil, nil, nil, - nil, nil, 601, nil, nil, nil, nil, nil, nil, nil, - nil, 601, nil, nil, nil, nil, 601, 601, 601, 601, - nil, 601, 601, 601, 601, nil, nil, nil, nil, 601, - 601, nil, nil, nil, 604, 604, 604, 601, 604, 601, - 601, 601, 604, 604, nil, nil, nil, 604, nil, 604, - 604, 604, 604, 604, 604, 604, nil, nil, nil, nil, - nil, 604, 604, 604, 604, 604, 604, 604, nil, nil, - 604, nil, nil, nil, nil, nil, nil, 604, nil, nil, - 604, 604, 604, 604, 604, 604, 604, 604, nil, 604, - 604, 604, nil, 604, 604, 604, 604, 604, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 604, nil, nil, - 604, nil, nil, 604, 604, nil, nil, 604, nil, nil, - nil, nil, nil, 604, nil, nil, nil, nil, nil, nil, - nil, nil, 604, nil, nil, nil, nil, 604, 604, 604, - 604, nil, 604, 604, 604, 604, nil, nil, nil, nil, - 604, 604, nil, nil, nil, 605, 605, 605, 604, 605, - 604, 604, 604, 605, 605, nil, nil, nil, 605, nil, - 605, 605, 605, 605, 605, 605, 605, nil, nil, nil, - nil, nil, 605, 605, 605, 605, 605, 605, 605, nil, - nil, 605, nil, nil, nil, nil, nil, nil, 605, nil, - nil, 605, 605, 605, 605, 605, 605, 605, 605, nil, - 605, 605, 605, nil, 605, 605, 605, 605, 605, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 605, nil, - nil, 605, nil, nil, 605, 605, nil, nil, 605, nil, - nil, nil, nil, nil, 605, nil, nil, nil, nil, nil, - nil, nil, nil, 605, nil, nil, nil, nil, 605, 605, - 605, 605, nil, 605, 605, 605, 605, nil, nil, nil, - nil, 605, 605, nil, nil, nil, 629, 629, 629, 605, - 629, 605, 605, 605, 629, 629, nil, nil, nil, 629, - nil, 629, 629, 629, 629, 629, 629, 629, nil, nil, - nil, nil, nil, 629, 629, 629, 629, 629, 629, 629, - nil, nil, 629, nil, nil, nil, nil, nil, nil, 629, - nil, nil, 629, 629, 629, 629, 629, 629, 629, 629, - nil, 629, 629, 629, nil, 629, 629, 629, 629, 629, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 629, - nil, nil, 629, nil, nil, 629, 629, nil, nil, 629, - nil, nil, nil, nil, nil, 629, nil, nil, nil, nil, - nil, nil, nil, nil, 629, nil, nil, nil, nil, 629, - 629, 629, 629, nil, 629, 629, 629, 629, nil, nil, - nil, nil, 629, 629, nil, nil, nil, 632, 632, 632, - 629, 632, 629, 629, 629, 632, 632, nil, nil, nil, - 632, nil, 632, 632, 632, 632, 632, 632, 632, nil, - nil, nil, nil, nil, 632, 632, 632, 632, 632, 632, - 632, nil, nil, 632, nil, nil, nil, nil, nil, nil, - 632, nil, nil, 632, 632, 632, 632, 632, 632, 632, - 632, nil, 632, 632, 632, nil, 632, 632, 632, 632, - 632, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 632, nil, nil, 632, nil, nil, 632, 632, nil, nil, - 632, nil, nil, nil, nil, nil, 632, nil, nil, nil, - nil, nil, nil, nil, nil, 632, nil, nil, nil, nil, - 632, 632, 632, 632, nil, 632, 632, 632, 632, nil, - nil, nil, nil, 632, 632, nil, nil, nil, 636, 636, - 636, 632, 636, 632, 632, 632, 636, 636, nil, nil, - nil, 636, nil, 636, 636, 636, 636, 636, 636, 636, - nil, nil, nil, nil, nil, 636, 636, 636, 636, 636, - 636, 636, nil, nil, 636, nil, nil, nil, nil, nil, - nil, 636, nil, nil, 636, 636, 636, 636, 636, 636, - 636, 636, nil, 636, 636, 636, nil, 636, 636, nil, - nil, 636, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 636, nil, nil, 636, nil, nil, 636, 636, nil, - nil, 636, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 636, 636, 636, 636, nil, 636, 636, 636, 636, - nil, nil, nil, nil, 636, 636, nil, nil, nil, 647, - 647, 647, 636, 647, 636, 636, 636, 647, 647, nil, - nil, nil, 647, nil, 647, 647, 647, 647, 647, 647, - 647, nil, nil, nil, nil, nil, 647, 647, 647, 647, - 647, 647, 647, nil, nil, 647, nil, nil, nil, nil, - nil, nil, 647, nil, nil, 647, 647, 647, 647, 647, - 647, 647, 647, nil, 647, 647, 647, nil, 647, 647, - nil, nil, 647, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 647, nil, nil, 647, nil, nil, 647, 647, - nil, nil, 647, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 647, 647, 647, 647, nil, 647, 647, 647, - 647, nil, nil, nil, nil, 647, 647, nil, nil, nil, - 652, 652, 652, 647, 652, 647, 647, 647, 652, 652, - nil, nil, nil, 652, nil, 652, 652, 652, 652, 652, - 652, 652, nil, nil, nil, nil, nil, 652, 652, 652, - 652, 652, 652, 652, nil, nil, 652, nil, nil, nil, - nil, nil, nil, 652, nil, nil, 652, 652, 652, 652, - 652, 652, 652, 652, nil, 652, 652, 652, nil, 652, - 652, 652, 652, 652, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 652, nil, nil, 652, nil, nil, 652, - 652, nil, nil, 652, nil, 652, nil, nil, nil, 652, - nil, nil, nil, nil, nil, nil, nil, nil, 652, nil, - nil, nil, nil, 652, 652, 652, 652, nil, 652, 652, - 652, 652, nil, nil, nil, nil, 652, 652, nil, nil, - nil, 678, 678, 678, 652, 678, 652, 652, 652, 678, - 678, nil, nil, nil, 678, nil, 678, 678, 678, 678, - 678, 678, 678, nil, nil, nil, nil, nil, 678, 678, - 678, 678, 678, 678, 678, nil, nil, 678, nil, nil, - nil, nil, nil, nil, 678, nil, nil, 678, 678, 678, - 678, 678, 678, 678, 678, nil, 678, 678, 678, nil, - 678, 678, 678, 678, 678, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 678, nil, nil, 678, nil, nil, - 678, 678, nil, nil, 678, nil, nil, nil, nil, nil, - 678, nil, nil, nil, nil, nil, nil, nil, nil, 678, - nil, nil, nil, nil, 678, 678, 678, 678, nil, 678, - 678, 678, 678, nil, nil, nil, nil, 678, 678, nil, - nil, nil, 705, 705, 705, 678, 705, 678, 678, 678, - 705, 705, nil, nil, nil, 705, nil, 705, 705, 705, - 705, 705, 705, 705, nil, nil, nil, nil, nil, 705, - 705, 705, 705, 705, 705, 705, nil, nil, 705, nil, - nil, nil, nil, nil, nil, 705, nil, nil, 705, 705, - 705, 705, 705, 705, 705, 705, nil, 705, 705, 705, - nil, 705, 705, 705, 705, 705, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 705, nil, nil, 705, nil, - nil, 705, 705, nil, nil, 705, nil, nil, nil, nil, - nil, 705, nil, nil, nil, nil, nil, nil, nil, nil, - 705, nil, nil, nil, nil, 705, 705, 705, 705, nil, - 705, 705, 705, 705, nil, nil, nil, nil, 705, 705, - nil, nil, nil, 711, 711, 711, 705, 711, 705, 705, - 705, 711, 711, nil, nil, nil, 711, nil, 711, 711, - 711, 711, 711, 711, 711, nil, nil, nil, nil, nil, - 711, 711, 711, 711, 711, 711, 711, nil, nil, 711, - nil, nil, nil, nil, nil, nil, 711, nil, nil, 711, - 711, 711, 711, 711, 711, 711, 711, nil, 711, 711, - 711, nil, 711, 711, 711, 711, 711, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 711, nil, nil, 711, - nil, nil, 711, 711, nil, nil, 711, nil, nil, nil, - nil, nil, 711, nil, nil, nil, nil, nil, nil, nil, - nil, 711, nil, nil, nil, nil, 711, 711, 711, 711, - nil, 711, 711, 711, 711, nil, nil, nil, nil, 711, - 711, nil, nil, nil, 733, 733, 733, 711, 733, 711, - 711, 711, 733, 733, nil, nil, nil, 733, nil, 733, - 733, 733, 733, 733, 733, 733, nil, nil, nil, nil, - nil, 733, 733, 733, 733, 733, 733, 733, nil, nil, - 733, nil, nil, nil, nil, nil, nil, 733, nil, nil, - 733, 733, 733, 733, 733, 733, 733, 733, nil, 733, - 733, 733, nil, 733, 733, 733, 733, 733, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 733, nil, nil, - 733, nil, nil, 733, 733, nil, nil, 733, nil, nil, - nil, nil, nil, 733, nil, nil, nil, nil, nil, nil, - nil, nil, 733, nil, nil, nil, nil, 733, 733, 733, - 733, nil, 733, 733, 733, 733, nil, nil, nil, nil, - 733, 733, nil, nil, nil, 735, 735, 735, 733, 735, - 733, 733, 733, 735, 735, nil, nil, nil, 735, nil, - 735, 735, 735, 735, 735, 735, 735, nil, nil, nil, - nil, nil, 735, 735, 735, 735, 735, 735, 735, nil, - nil, 735, nil, nil, nil, nil, nil, nil, 735, nil, - nil, 735, 735, 735, 735, 735, 735, 735, 735, nil, - 735, 735, 735, nil, 735, 735, 735, 735, 735, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 735, nil, - nil, 735, nil, nil, 735, 735, nil, nil, 735, nil, - nil, nil, nil, nil, 735, nil, nil, nil, nil, nil, - nil, nil, nil, 735, nil, nil, nil, nil, 735, 735, - 735, 735, nil, 735, 735, 735, 735, nil, nil, nil, - nil, 735, 735, nil, nil, nil, 749, 749, 749, 735, - 749, 735, 735, 735, 749, 749, nil, nil, nil, 749, - nil, 749, 749, 749, 749, 749, 749, 749, nil, nil, - nil, nil, nil, 749, 749, 749, 749, 749, 749, 749, - nil, nil, 749, nil, nil, nil, nil, nil, nil, 749, - nil, nil, 749, 749, 749, 749, 749, 749, 749, 749, - nil, 749, 749, 749, nil, 749, 749, 749, 749, 749, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 749, - nil, nil, 749, nil, nil, 749, 749, nil, nil, 749, - nil, nil, nil, nil, nil, 749, nil, nil, nil, nil, - nil, nil, nil, nil, 749, nil, nil, nil, nil, 749, - 749, 749, 749, nil, 749, 749, 749, 749, nil, nil, - nil, nil, 749, 749, nil, nil, nil, 750, 750, 750, - 749, 750, 749, 749, 749, 750, 750, nil, nil, nil, - 750, nil, 750, 750, 750, 750, 750, 750, 750, nil, - nil, nil, nil, nil, 750, 750, 750, 750, 750, 750, - 750, nil, nil, 750, nil, nil, nil, nil, nil, nil, - 750, nil, nil, 750, 750, 750, 750, 750, 750, 750, - 750, nil, 750, 750, 750, nil, 750, 750, 750, 750, - 750, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 750, nil, nil, 750, nil, nil, 750, 750, nil, nil, - 750, nil, nil, nil, nil, nil, 750, nil, nil, nil, - nil, nil, nil, nil, nil, 750, nil, nil, nil, nil, - 750, 750, 750, 750, nil, 750, 750, 750, 750, nil, - nil, nil, nil, 750, 750, nil, nil, nil, 751, 751, - 751, 750, 751, 750, 750, 750, 751, 751, nil, nil, - nil, 751, nil, 751, 751, 751, 751, 751, 751, 751, - nil, nil, nil, nil, nil, 751, 751, 751, 751, 751, - 751, 751, nil, nil, 751, nil, nil, nil, nil, nil, - nil, 751, nil, nil, 751, 751, 751, 751, 751, 751, - 751, 751, nil, 751, 751, 751, nil, 751, 751, 751, - 751, 751, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 751, nil, nil, 751, nil, nil, 751, 751, nil, - nil, 751, nil, nil, nil, nil, nil, 751, nil, nil, - nil, nil, nil, nil, nil, nil, 751, nil, nil, nil, - nil, 751, 751, 751, 751, nil, 751, 751, 751, 751, - nil, nil, nil, nil, 751, 751, nil, nil, nil, 752, - 752, 752, 751, 752, 751, 751, 751, 752, 752, nil, - nil, nil, 752, nil, 752, 752, 752, 752, 752, 752, - 752, nil, nil, nil, nil, nil, 752, 752, 752, 752, - 752, 752, 752, nil, nil, 752, nil, nil, nil, nil, - nil, nil, 752, nil, nil, 752, 752, 752, 752, 752, - 752, 752, 752, nil, 752, 752, 752, nil, 752, 752, - 752, 752, 752, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 752, nil, nil, 752, nil, nil, 752, 752, - nil, nil, 752, nil, nil, nil, nil, nil, 752, nil, - nil, nil, nil, nil, nil, nil, nil, 752, nil, nil, - nil, nil, 752, 752, 752, 752, nil, 752, 752, 752, - 752, nil, nil, nil, nil, 752, 752, nil, nil, nil, - 754, 754, 754, 752, 754, 752, 752, 752, 754, 754, - nil, nil, nil, 754, nil, 754, 754, 754, 754, 754, - 754, 754, nil, nil, nil, nil, nil, 754, 754, 754, - 754, 754, 754, 754, nil, nil, 754, nil, nil, nil, - nil, nil, nil, 754, nil, nil, 754, 754, 754, 754, - 754, 754, 754, 754, nil, 754, 754, 754, nil, 754, - 754, 754, 754, 754, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 754, nil, nil, 754, nil, nil, 754, - 754, nil, nil, 754, nil, nil, nil, nil, nil, 754, - nil, nil, nil, nil, nil, nil, nil, nil, 754, nil, - nil, nil, nil, 754, 754, 754, 754, nil, 754, 754, - 754, 754, nil, nil, nil, nil, 754, 754, nil, nil, - nil, 766, 766, 766, 754, 766, 754, 754, 754, 766, - 766, nil, nil, nil, 766, nil, 766, 766, 766, 766, - 766, 766, 766, nil, nil, nil, nil, nil, 766, 766, - 766, 766, 766, 766, 766, nil, nil, 766, nil, nil, - nil, nil, nil, nil, 766, nil, nil, 766, 766, 766, - 766, 766, 766, 766, 766, nil, 766, 766, 766, nil, - 766, 766, nil, nil, 766, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 766, nil, nil, 766, nil, nil, - 766, 766, nil, nil, 766, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 766, 766, 766, 766, nil, 766, - 766, 766, 766, nil, nil, nil, nil, 766, 766, nil, - nil, nil, 804, 804, 804, 766, 804, 766, 766, 766, - 804, 804, nil, nil, nil, 804, nil, 804, 804, 804, - 804, 804, 804, 804, nil, nil, nil, nil, nil, 804, - 804, 804, 804, 804, 804, 804, nil, nil, 804, nil, - nil, nil, nil, nil, nil, 804, nil, nil, 804, 804, - 804, 804, 804, 804, 804, 804, nil, 804, 804, 804, - nil, 804, 804, 804, 804, 804, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 804, nil, nil, 804, nil, - nil, 804, 804, nil, nil, 804, nil, nil, nil, nil, - nil, 804, nil, nil, nil, nil, nil, nil, nil, nil, - 804, nil, nil, nil, nil, 804, 804, 804, 804, nil, - 804, 804, 804, 804, nil, nil, nil, nil, 804, 804, - nil, nil, nil, 817, 817, 817, 804, 817, 804, 804, - 804, 817, 817, nil, nil, nil, 817, nil, 817, 817, - 817, 817, 817, 817, 817, nil, nil, nil, nil, nil, - 817, 817, 817, 817, 817, 817, 817, nil, nil, 817, - nil, nil, nil, nil, nil, nil, 817, nil, nil, 817, - 817, 817, 817, 817, 817, 817, 817, nil, 817, 817, - 817, nil, 817, 817, 817, 817, 817, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 817, nil, nil, 817, - nil, nil, 817, 817, nil, nil, 817, nil, nil, nil, - nil, nil, 817, nil, nil, nil, nil, nil, nil, nil, - nil, 817, nil, nil, nil, nil, 817, 817, 817, 817, - nil, 817, 817, 817, 817, nil, nil, nil, nil, 817, - 817, nil, nil, nil, 822, 822, 822, 817, 822, 817, - 817, 817, 822, 822, nil, nil, nil, 822, nil, 822, - 822, 822, 822, 822, 822, 822, nil, nil, nil, nil, - nil, 822, 822, 822, 822, 822, 822, 822, nil, nil, - 822, nil, nil, nil, nil, nil, nil, 822, nil, nil, - 822, 822, 822, 822, 822, 822, 822, 822, nil, 822, - 822, 822, nil, 822, 822, 822, 822, 822, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 822, nil, nil, - 822, nil, nil, 822, 822, nil, nil, 822, nil, 822, - nil, nil, nil, 822, nil, nil, nil, nil, nil, nil, - nil, nil, 822, nil, nil, nil, nil, 822, 822, 822, - 822, nil, 822, 822, 822, 822, nil, nil, nil, nil, - 822, 822, nil, nil, nil, 839, 839, 839, 822, 839, - 822, 822, 822, 839, 839, nil, nil, nil, 839, nil, - 839, 839, 839, 839, 839, 839, 839, nil, nil, nil, - nil, nil, 839, 839, 839, 839, 839, 839, 839, nil, - nil, 839, nil, nil, nil, nil, nil, nil, 839, nil, - nil, 839, 839, 839, 839, 839, 839, 839, 839, 839, - 839, 839, 839, nil, 839, 839, 839, 839, 839, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 839, nil, - nil, 839, nil, nil, 839, 839, nil, nil, 839, nil, - nil, nil, 839, nil, 839, nil, nil, 839, nil, nil, - nil, nil, nil, 839, nil, nil, nil, nil, 839, 839, - 839, 839, nil, 839, 839, 839, 839, nil, nil, nil, - nil, 839, 839, nil, nil, nil, 840, 840, 840, 839, - 840, 839, 839, 839, 840, 840, nil, nil, nil, 840, - nil, 840, 840, 840, 840, 840, 840, 840, nil, nil, - nil, nil, nil, 840, 840, 840, 840, 840, 840, 840, - nil, nil, 840, nil, nil, nil, nil, nil, nil, 840, - nil, nil, 840, 840, 840, 840, 840, 840, 840, 840, - nil, 840, 840, 840, nil, 840, 840, 840, 840, 840, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 840, - nil, nil, 840, nil, nil, 840, 840, nil, nil, 840, - nil, nil, nil, nil, nil, 840, nil, nil, nil, nil, - nil, nil, nil, nil, 840, nil, nil, nil, nil, 840, - 840, 840, 840, nil, 840, 840, 840, 840, nil, nil, - nil, nil, 840, 840, nil, nil, nil, 854, 854, 854, - 840, 854, 840, 840, 840, 854, 854, nil, nil, nil, - 854, nil, 854, 854, 854, 854, 854, 854, 854, nil, - nil, nil, nil, nil, 854, 854, 854, 854, 854, 854, - 854, nil, nil, 854, nil, nil, nil, nil, nil, nil, - 854, nil, nil, 854, 854, 854, 854, 854, 854, 854, - 854, nil, 854, 854, 854, nil, 854, 854, nil, nil, - 854, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 854, nil, nil, 854, nil, nil, 854, 854, nil, nil, - 854, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 854, 854, 854, 854, nil, 854, 854, 854, 854, nil, - nil, nil, nil, 854, 854, nil, nil, nil, 866, 866, - 866, 854, 866, 854, 854, 854, 866, 866, nil, nil, - nil, 866, nil, 866, 866, 866, 866, 866, 866, 866, - nil, nil, nil, nil, nil, 866, 866, 866, 866, 866, - 866, 866, nil, nil, 866, nil, nil, nil, nil, nil, - nil, 866, nil, nil, 866, 866, 866, 866, 866, 866, - 866, 866, nil, 866, 866, 866, nil, 866, 866, nil, - nil, 866, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 866, nil, nil, 866, nil, nil, 866, 866, nil, - nil, 866, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 866, 866, 866, 866, nil, 866, 866, 866, 866, - nil, nil, nil, nil, 866, 866, nil, nil, nil, 975, - 975, 975, 866, 975, 866, 866, 866, 975, 975, nil, - nil, nil, 975, nil, 975, 975, 975, 975, 975, 975, - 975, nil, nil, nil, nil, nil, 975, 975, 975, 975, - 975, 975, 975, nil, nil, 975, nil, nil, nil, nil, - nil, nil, 975, nil, nil, 975, 975, 975, 975, 975, - 975, 975, 975, 975, 975, 975, 975, nil, 975, 975, - 975, 975, 975, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 975, nil, nil, 975, nil, nil, 975, 975, - nil, nil, 975, nil, 975, nil, 975, nil, 975, nil, - nil, 975, nil, nil, nil, nil, nil, 975, nil, nil, - nil, nil, 975, 975, 975, 975, nil, 975, 975, 975, - 975, nil, nil, nil, nil, 975, 975, nil, nil, nil, - nil, nil, nil, 975, nil, 975, 975, 975, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, nil, nil, nil, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, nil, nil, nil, nil, nil, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - nil, 8, nil, nil, nil, nil, nil, nil, nil, 8, - 8, nil, 8, 8, 8, 8, 8, 8, 8, nil, - nil, 8, 8, nil, nil, nil, 8, 8, 8, 8, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 8, 8, nil, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, nil, nil, - 8, 8, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 8, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - nil, nil, nil, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, nil, nil, nil, nil, nil, 9, 9, - 9, 9, 9, 9, 9, 9, 9, nil, nil, 9, - nil, nil, nil, nil, nil, nil, nil, 9, 9, nil, - 9, 9, 9, 9, 9, 9, 9, nil, nil, 9, - 9, nil, nil, nil, 9, 9, 9, 9, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 9, 9, nil, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, nil, nil, 9, 9, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 9, 398, 398, 398, 398, 398, 398, - 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, - 398, 398, 398, 398, 398, 398, 398, 398, nil, nil, - nil, 398, 398, 398, 398, 398, 398, 398, 398, 398, - 398, nil, nil, nil, nil, nil, 398, 398, 398, 398, - 398, 398, 398, 398, 398, nil, nil, 398, nil, nil, - nil, nil, nil, nil, nil, 398, 398, nil, 398, 398, - 398, 398, 398, 398, 398, nil, nil, 398, 398, nil, - nil, nil, 398, 398, 398, 398, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 398, - 398, nil, 398, 398, 398, 398, 398, 398, 398, 398, - 398, 398, 398, 398, nil, nil, 398, 398, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 398, 586, 586, 586, 586, 586, 586, 586, 586, - 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, - 586, 586, 586, 586, 586, 586, nil, nil, nil, 586, - 586, 586, 586, 586, 586, 586, 586, 586, 586, nil, - nil, nil, nil, nil, 586, 586, 586, 586, 586, 586, - 586, 586, 586, nil, nil, 586, nil, nil, nil, nil, - nil, nil, nil, 586, 586, nil, 586, 586, 586, 586, - 586, 586, 586, nil, nil, 586, 586, nil, nil, nil, - 586, 586, 586, 586, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 586, 586, nil, - 586, 586, 586, 586, 586, 586, 586, 586, 586, 586, - 586, 586, nil, nil, 586, 586, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 586, - 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, - 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, - 71, 71, 71, 71, nil, nil, nil, 71, 71, 71, - 71, 71, 71, 71, 71, 71, 71, nil, nil, nil, - nil, nil, 71, 71, 71, 71, 71, 71, 71, 71, - 71, 71, 71, 71, nil, 71, nil, nil, nil, nil, - nil, 71, 71, nil, 71, 71, 71, 71, 71, 71, - 71, nil, nil, 71, 71, nil, nil, nil, 71, 71, - 71, 71, nil, nil, nil, nil, nil, 71, nil, nil, - nil, nil, nil, nil, nil, 71, 71, nil, 71, 71, - 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, - nil, nil, 71, 717, 717, 717, 717, 717, 717, 717, - 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, - 717, 717, 717, 717, 717, 717, 717, nil, nil, nil, - 717, 717, 717, 717, 717, 717, 717, 717, 717, 717, - nil, nil, nil, nil, nil, 717, 717, 717, 717, 717, - 717, 717, 717, 717, nil, nil, 717, nil, nil, nil, - nil, nil, nil, nil, 717, 717, nil, 717, 717, 717, - 717, 717, 717, 717, nil, nil, 717, 717, nil, nil, - nil, 717, 717, 717, 717, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 717, 717, - nil, 717, 717, 717, 717, 717, 717, 717, 717, 717, - 717, 717, 717, 212, 212, 717, nil, 212, nil, nil, - nil, nil, nil, nil, nil, 212, 212, nil, 212, 212, - 212, 212, 212, 212, 212, nil, nil, 212, 212, nil, - nil, nil, 212, 212, 212, 212, nil, nil, nil, nil, - nil, 212, nil, nil, nil, nil, nil, nil, nil, 212, - 212, nil, 212, 212, 212, 212, 212, 212, 212, 212, - 212, 212, 212, 212, 213, 213, 212, nil, 213, nil, - nil, nil, nil, nil, nil, nil, 213, 213, nil, 213, - 213, 213, 213, 213, 213, 213, nil, nil, 213, 213, - nil, nil, nil, 213, 213, 213, 213, nil, nil, nil, - nil, nil, 213, nil, nil, nil, nil, nil, nil, nil, - 213, 213, nil, 213, 213, 213, 213, 213, 213, 213, - 213, 213, 213, 213, 213, 263, 263, 213, nil, 263, - nil, nil, nil, nil, nil, nil, nil, 263, 263, nil, - 263, 263, 263, 263, 263, 263, 263, nil, nil, 263, - 263, nil, nil, nil, 263, 263, 263, 263, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 263, 263, nil, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 443, 443, 263, nil, - 443, nil, nil, nil, nil, nil, nil, nil, 443, 443, - nil, 443, 443, 443, 443, 443, 443, 443, nil, nil, - 443, 443, nil, nil, nil, 443, 443, 443, 443, nil, - nil, nil, nil, nil, 443, nil, nil, nil, nil, nil, - nil, nil, 443, 443, nil, 443, 443, 443, 443, 443, - 443, 443, 443, 443, 443, 443, 443, 444, 444, 443, - nil, 444, nil, nil, nil, nil, nil, nil, nil, 444, - 444, nil, 444, 444, 444, 444, 444, 444, 444, nil, - nil, 444, 444, nil, nil, nil, 444, 444, 444, 444, - nil, nil, nil, nil, nil, 444, nil, nil, nil, nil, - nil, nil, nil, 444, 444, nil, 444, 444, 444, 444, - 444, 444, 444, 444, 444, 444, 444, 444, 510, 510, - 444, nil, 510, nil, nil, nil, nil, nil, nil, nil, - 510, 510, nil, 510, 510, 510, 510, 510, 510, 510, - nil, nil, 510, 510, nil, nil, nil, 510, 510, 510, - 510, nil, nil, nil, nil, nil, 510, nil, nil, nil, - nil, nil, nil, nil, 510, 510, nil, 510, 510, 510, - 510, 510, 510, 510, 510, 510, 510, 510, 510, 511, - 511, 510, nil, 511, nil, nil, nil, nil, nil, nil, - nil, 511, 511, nil, 511, 511, 511, 511, 511, 511, - 511, nil, nil, 511, 511, nil, nil, nil, 511, 511, - 511, 511, nil, nil, nil, nil, nil, 511, nil, nil, - nil, nil, nil, nil, nil, 511, 511, nil, 511, 511, - 511, 511, 511, 511, 511, 511, 511, 511, 511, 511, - 520, 520, 511, nil, 520, nil, nil, nil, nil, nil, - nil, nil, 520, 520, nil, 520, 520, 520, 520, 520, - 520, 520, nil, nil, 520, 520, nil, nil, nil, 520, - 520, 520, 520, nil, nil, nil, nil, nil, 520, nil, - nil, nil, nil, nil, nil, nil, 520, 520, nil, 520, - 520, 520, 520, 520, 520, 520, 520, 520, 520, 520, - 520, 521, 521, 520, nil, 521, nil, nil, nil, nil, - nil, nil, nil, 521, 521, nil, 521, 521, 521, 521, - 521, 521, 521, nil, nil, 521, 521, nil, nil, nil, - 521, 521, 521, 521, nil, nil, nil, nil, nil, 521, - nil, nil, nil, nil, nil, nil, nil, 521, 521, nil, - 521, 521, 521, 521, 521, 521, 521, 521, 521, 521, - 521, 521, 548, 548, 521, nil, 548, nil, nil, nil, - nil, nil, nil, nil, 548, 548, nil, 548, 548, 548, - 548, 548, 548, 548, nil, nil, 548, 548, nil, nil, - nil, 548, 548, 548, 548, nil, nil, nil, nil, nil, - 548, nil, nil, nil, nil, nil, nil, nil, 548, 548, - nil, 548, 548, 548, 548, 548, 548, 548, 548, 548, - 548, 548, 548, 549, 549, 548, nil, 549, nil, nil, - nil, nil, nil, nil, nil, 549, 549, nil, 549, 549, - 549, 549, 549, 549, 549, nil, nil, 549, 549, nil, - nil, nil, 549, 549, 549, 549, nil, nil, nil, nil, - nil, 549, nil, nil, nil, nil, nil, nil, nil, 549, - 549, nil, 549, 549, 549, 549, 549, 549, 549, 549, - 549, 549, 549, 549, 555, 555, 549, nil, 555, nil, - nil, nil, nil, nil, nil, nil, 555, 555, nil, 555, - 555, 555, 555, 555, 555, 555, nil, nil, 555, 555, - nil, nil, nil, 555, 555, 555, 555, nil, nil, nil, - nil, nil, 555, nil, nil, nil, nil, nil, nil, nil, - 555, 555, nil, 555, 555, 555, 555, 555, 555, 555, - 555, 555, 555, 555, 555, 556, 556, 555, nil, 556, - nil, nil, nil, nil, nil, nil, nil, 556, 556, nil, - 556, 556, 556, 556, 556, 556, 556, nil, nil, 556, - 556, nil, nil, nil, 556, 556, 556, 556, nil, nil, - nil, nil, nil, 556, nil, nil, nil, nil, nil, nil, - nil, 556, 556, nil, 556, 556, 556, 556, 556, 556, - 556, 556, 556, 556, 556, 556, 922, 922, 556, nil, - 922, nil, nil, nil, nil, nil, nil, nil, 922, 922, - nil, 922, 922, 922, 922, 922, 922, 922, nil, nil, - 922, 922, nil, nil, nil, 922, 922, 922, 922, nil, - nil, nil, nil, nil, 922, nil, nil, nil, nil, nil, - nil, nil, 922, 922, nil, 922, 922, 922, 922, 922, - 922, 922, 922, 922, 922, 922, 922, 976, 976, 922, - nil, 976, nil, nil, nil, nil, nil, nil, nil, 976, - 976, nil, 976, 976, 976, 976, 976, 976, 976, nil, - nil, 976, 976, nil, nil, nil, 976, 976, 976, 976, - nil, nil, nil, nil, nil, 976, nil, nil, nil, nil, - nil, nil, nil, 976, 976, nil, 976, 976, 976, 976, - 976, 976, 976, 976, 976, 976, 976, 976, 977, 977, - 976, nil, 977, nil, nil, nil, nil, nil, nil, nil, - 977, 977, nil, 977, 977, 977, 977, 977, 977, 977, - nil, nil, 977, 977, nil, nil, nil, 977, 977, 977, - 977, nil, nil, nil, nil, nil, 977, nil, nil, nil, - nil, nil, nil, nil, 977, 977, nil, 977, 977, 977, - 977, 977, 977, 977, 977, 977, 977, 977, 977, nil, - 658, 977, 658, 658, 658, 658, 658, nil, 715, nil, - 715, 715, 715, 715, 715, 658, nil, nil, nil, nil, - nil, nil, nil, 715, nil, 716, nil, 716, 716, 716, - 716, 716, nil, nil, nil, nil, nil, 658, nil, nil, - 716, nil, nil, nil, nil, 715, 658, 658, 658, 658, - nil, nil, nil, 658, 715, 715, 715, 715, nil, nil, - nil, 715, 716, nil, 798, nil, 798, 798, 798, 798, - 798, 716, 716, 716, 716, nil, nil, nil, 716, 798, - nil, 800, nil, 800, 800, 800, 800, 800, nil, 845, - nil, 845, 845, 845, 845, 845, 800, nil, nil, nil, - nil, 798, nil, nil, 845, nil, nil, nil, nil, nil, - 798, 798, 798, 798, nil, nil, nil, 798, 800, nil, - nil, nil, nil, nil, nil, nil, 845, 800, 800, 800, - 800, nil, nil, nil, 800, 845, 845, 845, 845, nil, - nil, 847, 845, 847, 847, 847, 847, 847, nil, 937, - nil, 937, 937, 937, 937, 937, 847, nil, nil, nil, - nil, nil, nil, nil, 937, nil, 941, nil, 941, 941, - 941, 941, 941, nil, nil, nil, nil, nil, 847, nil, - nil, 941, nil, nil, nil, nil, 937, 847, 847, 847, - 847, nil, nil, nil, 847, 937, 937, 937, 937, nil, - nil, nil, 937, 941, nil, 943, nil, 943, 943, 943, - 943, 943, nil, nil, 941, 941, nil, nil, nil, 941, - 943, nil, 961, nil, 961, 961, 961, 961, 961, 963, - nil, 963, 963, 963, 963, 963, nil, 961, nil, nil, - nil, nil, 943, nil, 963, nil, 965, nil, 965, 965, - 965, 965, 965, 943, 943, nil, nil, nil, 943, 961, - nil, 965, nil, nil, nil, nil, 963, nil, 961, 961, - 961, 961, nil, nil, nil, 961, nil, 963, 963, nil, - nil, nil, 963, 965, nil, 967, nil, 967, 967, 967, - 967, 967, nil, nil, 965, 965, nil, nil, nil, 965, - 967, nil, 1005, nil, 1005, 1005, 1005, 1005, 1005, 1015, - nil, 1015, 1015, 1015, 1015, 1015, nil, 1005, nil, nil, - nil, nil, 967, nil, 1015, nil, nil, nil, nil, nil, - nil, nil, nil, 967, 967, nil, nil, nil, 967, 1005, - nil, nil, nil, nil, nil, nil, 1015, nil, nil, nil, - 1005, 1005, nil, nil, nil, 1005, nil, 1015, 1015, nil, - nil, nil, 1015 ] - -racc_action_pointer = [ - 1637, 33, nil, 81, nil, 5976, 1388, -51, 23086, 23214, - -11, nil, 50, 117, 572, -81, 105, 309, nil, -71, - 6107, 2057, 230, nil, -62, nil, -8, 742, 852, 6238, - 6369, 6500, nil, 1777, 6631, 6762, nil, 134, 282, 352, - 247, 332, 6901, 7032, 7163, 191, 574, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 962, nil, -80, 7294, - 7425, 4, nil, 7556, 7687, nil, nil, 7818, 7957, 8088, - 8219, 23598, nil, nil, nil, nil, nil, nil, nil, 223, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 0, nil, nil, - 112, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 354, nil, 8358, nil, nil, nil, nil, 8497, 8628, - 8759, 8890, 9029, 1917, nil, 576, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 223, nil, 2057, 9160, - 9291, 9422, 23772, 23833, nil, nil, 9553, 9684, 9815, 9946, - 10077, 10208, nil, nil, 576, -54, 138, 307, 166, 241, - 309, nil, 10339, 2197, 310, 10470, 10601, 10732, 10863, 10994, - 11125, 11256, 11387, 11518, 11649, 11780, 11911, 12042, 12173, 12304, - 12435, 12566, 12697, 12828, 12959, 13090, 13221, 13352, 13483, 13614, - 13745, nil, nil, 23894, nil, nil, 318, 13876, 14007, nil, - nil, nil, nil, nil, nil, nil, 14138, nil, 2197, nil, - 297, 325, nil, 14269, 373, 14400, nil, nil, 14531, 14662, - nil, nil, 228, nil, 14801, 1441, 358, 338, 2337, 353, - 408, 377, 14932, 2477, 615, 645, 714, 473, 790, nil, - 441, 417, 33, nil, nil, nil, 476, 360, 453, 15071, - nil, 472, 522, 822, nil, 526, nil, 15202, 2617, 15333, - 465, nil, -73, 146, 506, 489, 387, 523, nil, nil, - 346, -1, 11, 15464, 15595, 298, 603, 498, -18, 11, - 824, 584, 25, 618, nil, nil, 342, 434, -21, nil, - 900, nil, 541, 15726, nil, nil, nil, 194, 230, 379, - 413, 486, 510, 577, 578, 582, nil, 619, nil, 15857, - nil, 272, 456, 459, 465, 497, -41, -35, 501, nil, - nil, nil, nil, nil, nil, nil, nil, 537, 23342, nil, - nil, nil, nil, 544, nil, nil, 535, 15988, 551, nil, - nil, 1777, 563, nil, 568, 590, 481, 552, 1098, nil, - nil, nil, 222, 334, 638, nil, nil, 1230, 1366, nil, - 2337, nil, 587, nil, nil, 1637, nil, nil, nil, nil, - -35, nil, 650, 23955, 24016, 16119, 197, 16250, 16381, 16512, - 4017, 4157, 623, 662, 677, 678, 679, 682, 1518, 5697, - 1470, 4297, 1181, 1315, 4437, 4577, 4717, 4857, 4997, 5137, - 5277, 1051, 1249, 5417, 5557, 2477, -54, 1502, nil, nil, - nil, nil, 629, nil, -53, -10, 636, nil, nil, 16643, - nil, 16774, nil, 16905, nil, 363, nil, nil, nil, 17044, - 1507, 2757, 642, 640, nil, nil, 644, 17183, 650, 17314, - 24077, 24138, 930, 704, nil, 17445, 661, nil, 17576, 17707, - 24199, 24260, 2617, 17838, 788, 790, 570, 715, nil, 17969, - nil, nil, 18100, nil, nil, nil, nil, 1505, 2897, 810, - nil, 3037, 62, 147, 811, 819, 18231, 18362, 24321, 24382, - 27, nil, nil, 932, nil, 24443, 24504, 18493, nil, nil, - 250, 3177, 741, nil, -33, nil, nil, nil, 717, nil, - nil, nil, 714, nil, nil, 388, nil, 390, nil, nil, - 700, nil, 705, nil, nil, nil, 23470, nil, 708, 18624, - 18755, 619, 749, 18886, 19017, 19148, 19279, 761, nil, nil, - 19410, 19541, 762, nil, 19672, 19803, nil, nil, 217, 301, - 466, 604, 732, 1917, 731, nil, 1466, nil, 3317, 843, - 6, 160, nil, 3457, 3597, nil, 738, nil, 789, 19934, - nil, nil, 20065, nil, 767, -80, 20196, 748, nil, 752, - 123, 180, 796, 248, 1106, 797, 754, 20327, 2757, 824, - 214, 882, 20458, nil, 767, nil, 396, nil, 24749, nil, - 765, 767, nil, 769, 770, 771, nil, nil, nil, nil, - nil, nil, nil, nil, 762, 749, nil, nil, 20589, nil, - nil, nil, 861, nil, nil, nil, 863, nil, nil, 865, - 623, nil, 919, nil, nil, nil, nil, 928, nil, 26, - 808, 41, 68, 151, 185, 20720, 1066, 1143, nil, 810, - 3737, 20851, nil, 934, 3877, 24757, 24774, 23711, nil, nil, - nil, nil, nil, nil, 4017, nil, nil, nil, nil, nil, - nil, nil, 814, 20982, 2897, 21113, nil, 816, nil, 3037, - nil, 3177, nil, nil, 3317, nil, 3457, nil, 3597, 21244, - 21375, 21506, 21637, 343, 21768, 818, 823, nil, 834, 835, - 839, nil, 864, 850, 846, 843, 21899, nil, nil, 982, - nil, nil, 4157, 879, 986, nil, nil, nil, nil, 863, - 236, nil, nil, 989, nil, 4297, 867, 919, nil, nil, - 918, nil, 89, 880, 697, nil, nil, 564, 24813, nil, - 24830, nil, 6809, nil, 22030, nil, 856, nil, 879, 335, - 883, nil, nil, nil, nil, 1006, nil, 22161, 1008, 4437, - 4577, nil, 22292, 4717, 152, 181, nil, 1010, 327, 4857, - nil, 1011, 891, 366, nil, 895, 891, nil, 3737, 22423, - 22554, 3877, 1022, nil, nil, 24838, nil, 24890, nil, 8266, - nil, nil, 917, 1076, 22685, 934, 992, nil, 935, nil, - nil, nil, 4997, nil, nil, 32, 22816, nil, nil, nil, - nil, nil, 961, 920, nil, nil, nil, 921, 924, nil, - 928, 930, nil, 933, nil, nil, 947, 1162, 951, 735, - nil, nil, 33, nil, 1077, 1081, nil, 303, nil, nil, - nil, 1091, nil, nil, nil, 1012, nil, 969, nil, nil, - 970, 976, 980, 982, nil, 985, nil, 421, nil, nil, - nil, 966, 24565, nil, nil, nil, 5137, 34, 35, 1003, - 1064, 36, nil, 5277, 5417, nil, nil, 24898, nil, 14979, - nil, 24915, nil, 24954, nil, nil, nil, nil, 398, 1028, - 987, 5557, nil, nil, nil, nil, nil, 5697, nil, 5837, - nil, 24971, nil, 24978, nil, 24995, nil, 25034, nil, nil, - nil, 1332, 1039, 1043, 1129, 22947, 24626, 24687, 42, 1029, - 1135, 1013, 1014, 1015, 1018, 1019, 1223, 1025, 1437, 719, - 1151, 1152, 1029, 1030, 1046, 1051, nil, nil, 1056, 98, - 102, 111, 138, nil, nil, 25051, nil, nil, nil, nil, - 4097, 1056, nil, nil, nil, 25058, nil, nil, nil, nil, - 145, 1060, 1064, 1069, nil, nil ] - -racc_action_default = [ - -3, -601, -1, -587, -4, -601, -7, -601, -601, -601, - -601, -29, -601, -601, -601, -279, -601, -40, -43, -589, - -601, -48, -50, -51, -52, -56, -256, -256, -256, -293, - -329, -330, -68, -11, -72, -80, -82, -601, -491, -492, - -601, -601, -601, -601, -601, -589, -237, -270, -271, -272, - -273, -274, -275, -276, -277, -278, -575, -281, -283, -600, - -565, -301, -303, -601, -601, -307, -310, -587, -601, -601, - -601, -601, -331, -332, -334, -335, -432, -433, -434, -435, - -436, -457, -439, -440, -459, -461, -444, -449, -453, -455, - -471, -459, -473, -475, -476, -477, -478, -573, -480, -481, - -574, -483, -484, -485, -486, -487, -488, -489, -490, -495, - -496, -601, -2, -588, -596, -597, -598, -6, -601, -601, - -601, -601, -601, -3, -17, -601, -111, -112, -113, -114, - -115, -116, -117, -118, -119, -123, -124, -125, -126, -127, - -128, -129, -130, -131, -132, -133, -134, -135, -136, -137, - -138, -139, -140, -141, -142, -143, -144, -145, -146, -147, - -148, -149, -150, -151, -152, -153, -154, -155, -156, -157, - -158, -159, -160, -161, -162, -163, -164, -165, -166, -167, - -168, -169, -170, -171, -172, -173, -174, -175, -176, -177, - -178, -179, -180, -181, -182, -183, -184, -185, -186, -187, - -188, -189, -190, -191, -192, -193, -22, -120, -11, -601, - -601, -246, -601, -601, -585, -586, -601, -601, -601, -601, - -601, -589, -590, -47, -601, -491, -492, -601, -279, -601, - -601, -229, -601, -11, -601, -601, -601, -601, -601, -601, - -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, - -601, -601, -601, -601, -601, -601, -601, -601, -601, -601, - -601, -401, -403, -601, -583, -584, -57, -246, -601, -300, - -407, -416, -418, -63, -413, -64, -589, -65, -238, -251, - -260, -260, -255, -601, -261, -601, -457, -567, -601, -601, - -66, -67, -587, -12, -601, -15, -601, -70, -11, -589, - -601, -73, -76, -11, -88, -89, -601, -601, -96, -293, - -296, -589, -601, -329, -330, -333, -414, -601, -78, -601, - -84, -290, -474, -601, -214, -215, -230, -601, -11, -601, - -589, -239, -593, -593, -601, -601, -593, -601, -302, -392, - -49, -601, -601, -601, -601, -587, -601, -588, -491, -492, - -601, -601, -279, -601, -345, -346, -106, -107, -601, -109, - -601, -279, -499, -601, -491, -492, -322, -111, -112, -153, - -154, -155, -171, -176, -183, -186, -324, -601, -563, -601, - -437, -601, -601, -601, -601, -601, -601, -601, -601, 1026, - -5, -599, -23, -24, -25, -26, -27, -601, -601, -19, - -20, -21, -121, -601, -30, -39, -266, -601, -601, -265, - -31, -196, -589, -247, -260, -260, -576, -577, -256, -411, - -578, -579, -577, -576, -256, -410, -412, -578, -579, -37, - -204, -38, -601, -41, -42, -194, -261, -44, -45, -46, - -589, -299, -601, -601, -601, -246, -290, -601, -601, -601, - -205, -206, -207, -208, -209, -210, -211, -212, -216, -217, - -218, -219, -220, -221, -222, -223, -224, -225, -226, -227, - -228, -231, -232, -233, -234, -589, -381, -256, -576, -577, - -54, -58, -589, -257, -381, -381, -589, -295, -252, -601, - -253, -601, -258, -601, -262, -601, -570, -572, -10, -588, - -14, -3, -589, -69, -288, -85, -74, -601, -589, -246, - -601, -601, -95, -601, -474, -601, -81, -86, -601, -601, - -601, -601, -235, -601, -424, -601, -284, -601, -240, -595, - -594, -242, -595, -291, -292, -566, -304, -523, -11, -336, - -337, -11, -601, -601, -601, -601, -601, -246, -601, -601, - -290, -315, -106, -107, -108, -601, -601, -246, -318, -497, - -601, -11, -501, -326, -589, -438, -458, -463, -601, -465, - -441, -460, -601, -462, -443, -601, -446, -601, -448, -451, - -601, -452, -601, -472, -8, -18, -601, -28, -269, -601, - -601, -415, -601, -248, -250, -601, -601, -59, -245, -408, - -601, -601, -61, -409, -601, -601, -298, -591, -576, -577, - -576, -577, -589, -194, -601, -382, -589, -384, -11, -53, - -404, -381, -243, -11, -11, -294, -260, -259, -263, -601, - -568, -569, -601, -13, -601, -71, -601, -77, -83, -589, - -576, -577, -244, -580, -94, -601, -79, -601, -203, -213, - -589, -600, -600, -282, -589, -287, -593, -393, -523, -396, - -562, -562, -506, -508, -508, -508, -522, -524, -525, -526, - -527, -528, -529, -530, -531, -601, -533, -535, -537, -542, - -544, -545, -547, -552, -554, -555, -557, -558, -559, -601, - -600, -338, -600, -308, -339, -340, -311, -601, -314, -601, - -589, -576, -577, -580, -289, -601, -106, -107, -110, -589, - -11, -601, -320, -601, -11, -523, -523, -601, -564, -464, - -467, -468, -469, -470, -11, -442, -445, -447, -450, -454, - -456, -122, -267, -601, -197, -601, -592, -260, -33, -199, - -34, -200, -60, -35, -202, -36, -201, -62, -195, -601, - -601, -601, -601, -415, -601, -562, -562, -363, -365, -365, - -365, -380, -601, -589, -386, -531, -539, -540, -550, -601, - -406, -405, -11, -601, -601, -254, -264, -571, -16, -75, - -415, -87, -297, -600, -343, -11, -425, -600, -426, -427, - -601, -241, -601, -589, -601, -504, -505, -601, -601, -515, - -601, -518, -601, -520, -601, -347, -601, -349, -351, -358, - -589, -536, -546, -556, -560, -601, -341, -601, -601, -11, - -11, -313, -601, -11, -415, -601, -415, -601, -601, -11, - -323, -601, -589, -601, -327, -601, -268, -32, -198, -249, - -601, -236, -601, -361, -362, -371, -373, -601, -376, -601, - -378, -383, -601, -601, -601, -538, -601, -402, -601, -417, - -419, -9, -11, -431, -344, -601, -601, -429, -285, -394, - -397, -399, -601, -562, -543, -561, -507, -508, -508, -534, - -508, -508, -553, -508, -531, -548, -589, -601, -356, -601, - -532, -305, -601, -306, -601, -601, -263, -600, -316, -319, - -498, -601, -325, -500, -502, -501, -466, -562, -541, -364, - -365, -365, -365, -365, -551, -365, -385, -589, -388, -390, - -391, -549, -601, -290, -55, -430, -11, -491, -492, -601, - -601, -279, -428, -11, -11, -395, -503, -601, -511, -601, - -513, -601, -516, -601, -519, -521, -348, -350, -354, -601, - -359, -11, -309, -312, -420, -421, -422, -11, -321, -11, - -360, -601, -368, -601, -370, -601, -374, -601, -377, -379, - -387, -601, -289, -580, -424, -246, -601, -601, -290, -601, - -601, -508, -508, -508, -508, -352, -601, -357, -601, -600, - -601, -601, -365, -365, -365, -365, -389, -423, -589, -576, - -577, -580, -289, -398, -400, -601, -509, -512, -514, -517, - -601, -355, -342, -317, -328, -601, -366, -369, -372, -375, - -415, -508, -353, -365, -510, -367 ] - -racc_goto_table = [ - 220, 376, 525, 14, 279, 279, 279, 212, 14, 338, - 591, 262, 124, 207, 490, 315, 315, 264, 538, 541, - 481, 412, 263, 224, 2, 331, 327, 301, 545, 418, - 424, 409, 224, 224, 224, 434, 14, 306, 306, 431, - 341, 342, 651, 714, 345, 116, 132, 132, 322, 315, - 315, 315, 134, 134, 129, 129, 815, 516, 6, 113, - 766, 759, 627, 6, 627, 630, 224, 224, 223, 381, - 224, 350, 360, 360, 297, 693, 696, 482, 318, 112, - 477, 554, 117, 340, 340, 762, 918, 340, 882, 280, - 280, 280, 914, 947, 783, 392, 393, 394, 395, 810, - 920, 362, 366, 266, 273, 275, 630, 528, 531, 116, - 1, 535, 950, 575, 577, 861, 14, 129, 879, 332, - 299, 224, 224, 224, 224, 14, 14, 633, 618, 270, - 274, 659, 277, 290, 291, 818, 623, 624, 340, 340, - 340, 340, 382, 346, 206, 355, 405, 397, 490, 388, - 398, 666, 621, 586, 334, 620, 378, 335, 536, 353, - 558, 377, 328, 329, 654, 879, 627, 627, 630, 330, - 339, 6, 987, 343, 819, 344, 820, 281, 281, 281, - 396, 6, 705, 957, 710, 829, 279, 561, 562, 717, - 390, 905, 761, 763, 947, 13, 571, 573, 576, 576, - 13, 917, 571, 657, 996, 869, 914, 333, 336, 1011, - 753, 14, 224, 224, 224, 537, 760, 443, 920, 224, - 224, 224, 224, 224, 224, 882, 697, 792, 13, 933, - 886, 934, 852, 1022, 476, 713, 14, 780, 437, 438, - 439, 440, 279, 279, 484, 637, 485, 954, 787, 865, - 380, 279, 793, 646, 383, 612, 384, 404, 410, 428, - 418, 424, 872, 879, 429, 433, 795, 796, 300, 408, - 224, 224, 666, 772, 495, 385, 386, 408, 708, 224, - 387, 719, 724, 315, 711, 877, 766, 879, 874, 766, - 910, 766, 513, 766, 908, nil, nil, 14, 824, 510, - 315, 14, nil, nil, nil, 306, 14, 826, 13, 832, - 833, 527, 517, nil, nil, 419, 520, 13, 13, 639, - 542, 543, 306, nil, 514, nil, nil, 642, 280, 666, - 666, 14, 224, nil, 116, nil, 280, 642, nil, 297, - 955, nil, nil, 548, 297, 506, 224, 224, 499, 526, - nil, 742, 500, nil, nil, 1012, 747, 700, 898, 775, - nil, 843, 844, 340, 340, 642, 224, 709, 498, nil, - 264, 483, nil, 642, 779, 563, 823, nil, nil, 486, - 805, nil, 224, 560, 827, 502, 959, 116, 831, 727, - 508, 727, nil, 592, nil, nil, nil, nil, 878, 564, - 880, nil, 585, 13, nil, 766, nil, 766, nil, 766, - nil, 766, 627, 630, nil, 270, 281, nil, nil, 274, - 279, 544, 434, nil, 281, nil, nil, nil, 13, nil, - nil, 791, nil, nil, nil, nil, 132, nil, nil, nil, - nil, nil, 134, 403, 129, 911, nil, 912, 224, nil, - nil, nil, 26, nil, nil, nil, 614, 26, nil, 766, - nil, nil, nil, nil, nil, nil, nil, nil, 300, nil, - 775, nil, 26, nil, 788, nil, nil, nil, nil, 936, - nil, 26, 26, 26, 279, 26, nil, nil, 315, 13, - 428, nil, 997, 13, nil, 597, 315, nil, 13, nil, - 517, 602, 14, 901, 14, nil, nil, nil, 517, nil, - 306, 805, 224, 960, 888, 26, 26, nil, 306, 26, - nil, 598, 279, 13, nil, 634, 224, 603, nil, nil, - nil, 756, 279, 300, nil, nil, nil, 981, 300, nil, - nil, 14, 926, 650, 14, nil, 419, nil, nil, nil, - 224, nil, nil, nil, 619, nil, nil, 428, nil, 6, - 224, 992, nil, nil, 14, 26, nil, 428, 771, 951, - 26, 26, 26, 26, 26, 26, nil, nil, nil, 956, - 598, nil, nil, nil, 694, 694, nil, nil, nil, nil, - 731, nil, 805, 592, 805, 428, 1020, 764, 224, 224, - nil, 428, 712, 224, 224, nil, 699, 224, 770, nil, - nil, nil, nil, 419, nil, nil, nil, 315, 789, nil, - 592, 14, nil, 419, 132, nil, 14, 14, 315, 517, - 134, nil, 129, 991, nil, 790, nil, 626, nil, 306, - 781, nil, nil, 738, 740, nil, nil, 834, 743, 745, - 306, 419, 433, 985, 805, 846, 848, 850, nil, 419, - 26, 26, 26, 26, nil, nil, nil, nil, 26, 26, - 26, 26, 26, 26, nil, nil, nil, 656, nil, nil, - nil, 592, 825, nil, nil, 26, nil, nil, 828, nil, - 592, 805, nil, 805, 13, nil, 13, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 224, 873, - nil, nil, 408, 14, 224, 805, nil, 14, nil, 26, - 26, nil, nil, nil, nil, 340, nil, 14, 26, nil, - nil, 340, 15, 13, nil, 674, 13, 15, 224, nil, - nil, 737, nil, nil, 764, 598, 26, 315, 603, 863, - 26, 441, nil, 867, nil, 26, 13, 907, nil, nil, - 756, nil, 756, 129, 756, 15, 308, 308, nil, 855, - nil, 757, nil, 690, 764, 14, 692, nil, nil, nil, - 26, 26, nil, 837, nil, 998, nil, nil, 14, nil, - nil, nil, nil, 642, 892, 26, 26, nil, nil, nil, - 352, 361, 361, nil, nil, nil, 487, 962, 964, 966, - 968, 16, 969, 13, 765, 26, 16, nil, 13, 13, - 224, nil, 14, 14, nil, nil, 14, nil, nil, 503, - nil, 26, 14, nil, nil, 315, nil, 340, nil, nil, - nil, nil, nil, nil, 16, 15, nil, 315, nil, nil, - nil, nil, nil, 769, 15, 15, 674, 921, 773, 774, - nil, nil, nil, nil, nil, 14, nil, 694, nil, 929, - 900, nil, nil, nil, nil, 904, 756, nil, 756, 354, - 756, nil, 756, nil, 799, 801, 803, nil, nil, 1016, - 1017, 1018, 1019, nil, nil, nil, nil, 26, 970, nil, - nil, nil, nil, nil, nil, 13, nil, nil, nil, 13, - nil, nil, nil, 674, 674, nil, nil, nil, nil, 13, - 1025, nil, 976, nil, 16, nil, nil, nil, nil, 14, - 756, nil, nil, 16, 16, nil, 14, 14, nil, nil, - 15, nil, nil, nil, nil, nil, nil, nil, nil, 875, - 279, 26, 875, 26, 14, nil, nil, nil, nil, 835, - 14, 26, 14, nil, nil, 15, nil, 13, 428, nil, - 606, nil, nil, nil, nil, 26, nil, nil, 224, 592, - 13, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 26, nil, nil, 26, nil, nil, 674, 875, 674, 26, - 757, nil, 757, nil, 757, nil, nil, 858, nil, 26, - nil, nil, 622, 26, 13, 13, 625, nil, 13, 16, - 864, nil, nil, 428, 13, nil, 15, nil, 432, nil, - 15, nil, 635, nil, 308, 15, nil, nil, 638, nil, - nil, nil, nil, 765, 16, 765, nil, 26, 26, nil, - nil, 308, 26, 26, 894, 895, 26, 13, 897, nil, - 15, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 26, nil, nil, nil, nil, 26, 26, nil, nil, 419, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 718, nil, 758, 925, 938, 940, - nil, 942, 944, 38, 945, 16, nil, nil, 38, 16, - nil, nil, nil, nil, 16, nil, 757, nil, 757, nil, - 757, 13, 757, nil, nil, nil, nil, nil, 13, 13, - nil, nil, nil, nil, nil, 674, 38, 304, 304, 16, - nil, nil, 337, nil, nil, nil, 13, nil, nil, nil, - nil, nil, 13, nil, 13, nil, nil, 26, nil, 765, - nil, 974, 26, 26, nil, nil, 26, nil, 979, 980, - 757, 348, 364, 364, 364, nil, 26, nil, nil, nil, - 782, nil, nil, nil, nil, nil, 989, 26, nil, nil, - nil, nil, 990, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 1006, 1007, 1008, 1009, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 38, nil, nil, nil, - nil, nil, nil, nil, 26, 38, 38, nil, nil, nil, - nil, 15, nil, 15, nil, nil, nil, 26, nil, 308, - nil, nil, 1024, nil, nil, nil, nil, 308, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 26, - 15, 26, 26, 15, nil, 26, nil, nil, nil, nil, - 881, 26, 883, nil, nil, nil, nil, nil, nil, nil, - nil, 406, nil, 15, nil, nil, nil, nil, nil, 436, - 723, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 16, 38, 16, nil, 26, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 913, nil, 915, - nil, nil, nil, nil, nil, nil, 38, nil, nil, nil, - 890, nil, nil, nil, nil, nil, nil, nil, nil, 16, - 15, nil, 16, nil, nil, 15, 15, nil, nil, nil, - nil, nil, 903, nil, nil, 492, nil, 494, 308, nil, - 496, 497, 16, nil, nil, nil, nil, nil, 26, 308, - nil, nil, nil, nil, nil, 26, 26, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 38, nil, nil, - nil, 38, nil, 26, nil, 304, 38, nil, nil, 26, - nil, 26, nil, nil, nil, 432, 946, 982, nil, 983, - nil, 984, 304, nil, nil, nil, nil, 26, nil, 16, - nil, 38, nil, nil, 16, 16, nil, nil, nil, nil, - nil, 993, 15, 994, nil, 995, 15, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 15, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 39, nil, nil, - nil, nil, 39, nil, nil, 1021, nil, nil, nil, 588, - nil, nil, nil, nil, nil, 1023, nil, nil, 361, nil, - nil, nil, nil, nil, 15, nil, nil, nil, nil, nil, - 39, 305, 305, nil, nil, nil, nil, 15, nil, nil, - nil, 16, nil, nil, nil, 16, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 16, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 349, 365, 365, 365, nil, - nil, 15, 15, nil, nil, 15, nil, nil, nil, nil, - nil, 15, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 628, nil, 337, nil, 631, nil, nil, nil, nil, - nil, nil, nil, 16, nil, nil, 361, nil, nil, nil, - 39, nil, nil, nil, 15, nil, 16, nil, 931, 39, - 39, nil, 38, nil, 38, nil, nil, nil, nil, nil, - 304, 628, nil, nil, 337, nil, nil, nil, 304, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 436, nil, - 16, 16, nil, nil, 16, nil, nil, nil, nil, nil, - 16, 38, nil, nil, 38, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 15, nil, - nil, nil, nil, nil, 38, 15, 15, nil, nil, nil, - nil, 732, nil, 16, nil, 628, 337, 932, nil, nil, - nil, nil, nil, 15, nil, 39, nil, nil, nil, 15, - nil, 15, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 39, 776, nil, nil, 777, nil, nil, nil, nil, nil, - nil, 38, nil, nil, nil, nil, 38, 38, nil, nil, - nil, nil, nil, nil, 786, nil, nil, 16, nil, 304, - nil, nil, nil, nil, 16, 16, nil, nil, nil, nil, - 304, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 811, nil, 16, nil, nil, nil, nil, nil, 16, nil, - 16, 39, nil, nil, nil, 39, nil, nil, nil, 305, - 39, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 305, nil, nil, nil, - nil, nil, nil, nil, nil, 39, nil, nil, nil, nil, - nil, nil, nil, 38, nil, 836, nil, 38, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 38, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 364, - nil, nil, nil, nil, nil, 38, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 885, nil, 38, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 896, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 231, 337, 38, 38, nil, nil, 38, nil, nil, 278, - 278, 278, 38, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 324, 325, 326, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 364, nil, 278, - 278, nil, nil, nil, nil, 38, nil, nil, nil, 927, - nil, nil, nil, nil, nil, nil, 39, nil, 39, nil, - nil, nil, nil, nil, 305, nil, nil, nil, nil, nil, - nil, nil, 305, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 39, nil, nil, 39, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 38, - nil, nil, nil, nil, nil, nil, 38, 38, 39, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 38, nil, nil, nil, nil, nil, - 38, nil, 38, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 39, nil, nil, nil, nil, - 39, 39, nil, nil, nil, nil, nil, nil, nil, 278, - 411, 278, nil, 305, nil, nil, 430, 435, nil, nil, - nil, nil, nil, nil, 305, nil, nil, nil, nil, nil, - nil, nil, 231, nil, nil, 450, 451, 452, 453, 454, - 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, - 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, - 475, nil, nil, nil, nil, nil, nil, 278, 278, nil, - nil, nil, nil, nil, nil, nil, 278, nil, nil, nil, - nil, nil, nil, 278, nil, 278, nil, 39, 278, 278, - nil, 39, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 39, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 522, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 365, nil, nil, nil, nil, nil, 39, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 39, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 39, 39, nil, nil, - 39, nil, nil, nil, nil, nil, 39, 278, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 365, nil, nil, nil, nil, nil, nil, nil, 39, - nil, nil, nil, 928, nil, 278, nil, 430, 613, 411, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 278, - nil, 278, nil, 278, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 39, nil, nil, nil, nil, nil, 278, - 39, 39, nil, nil, nil, nil, nil, nil, 648, 649, - nil, nil, nil, nil, nil, nil, nil, nil, 39, 278, - nil, nil, 278, nil, 39, nil, 39, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 278, 278, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 278, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 278, - 734, nil, nil, 278, 278, 739, 741, nil, nil, nil, - 744, 746, nil, nil, 613, 748, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 278, - nil, nil, 278, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 278, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 278, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 278, nil, 838, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 739, - 741, 746, 744, nil, 841, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 278, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 278, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 278, - 838, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 278 ] - -racc_goto_check = [ - 32, 57, 8, 22, 34, 34, 34, 25, 22, 87, - 24, 142, 15, 15, 74, 65, 65, 25, 90, 90, - 40, 23, 37, 22, 2, 68, 32, 50, 93, 38, - 38, 28, 22, 22, 22, 18, 22, 22, 22, 28, - 17, 17, 10, 99, 17, 97, 61, 61, 64, 65, - 65, 65, 62, 62, 58, 58, 91, 52, 7, 6, - 174, 130, 75, 7, 75, 182, 22, 22, 20, 155, - 22, 22, 22, 22, 46, 92, 92, 23, 51, 4, - 38, 55, 5, 30, 30, 133, 135, 30, 178, 69, - 69, 69, 179, 118, 11, 17, 17, 17, 17, 120, - 136, 56, 56, 39, 39, 39, 182, 70, 70, 97, - 1, 70, 121, 159, 159, 12, 22, 58, 173, 69, - 47, 22, 22, 22, 22, 22, 22, 14, 41, 72, - 72, 141, 45, 45, 45, 11, 41, 41, 30, 30, - 30, 30, 156, 4, 16, 19, 29, 2, 74, 156, - 31, 167, 43, 63, 67, 73, 85, 86, 89, 94, - 96, 100, 101, 102, 103, 173, 75, 75, 182, 104, - 105, 7, 121, 106, 107, 108, 109, 71, 71, 71, - 7, 7, 110, 111, 112, 113, 34, 114, 115, 116, - 5, 117, 122, 128, 118, 21, 160, 160, 160, 160, - 21, 134, 160, 137, 135, 138, 179, 71, 71, 121, - 24, 22, 22, 22, 22, 139, 131, 25, 136, 22, - 22, 22, 22, 22, 22, 178, 93, 140, 21, 143, - 120, 144, 133, 121, 145, 8, 22, 24, 30, 30, - 30, 30, 34, 34, 147, 52, 148, 149, 150, 151, - 154, 34, 141, 52, 157, 23, 158, 20, 20, 58, - 38, 38, 133, 173, 20, 20, 125, 125, 9, 69, - 22, 22, 167, 41, 155, 161, 162, 69, 55, 22, - 163, 164, 165, 65, 166, 171, 174, 173, 175, 174, - 130, 174, 32, 174, 176, nil, nil, 22, 24, 25, - 65, 22, nil, nil, nil, 22, 22, 24, 21, 141, - 141, 32, 50, nil, nil, 72, 25, 21, 21, 23, - 17, 17, 22, nil, 64, nil, nil, 38, 69, 167, - 167, 22, 22, nil, 97, nil, 69, 38, nil, 46, - 11, nil, nil, 25, 46, 51, 22, 22, 6, 30, - nil, 40, 7, nil, nil, 91, 40, 23, 92, 74, - nil, 125, 125, 30, 30, 38, 22, 23, 4, nil, - 25, 45, nil, 38, 52, 37, 90, nil, nil, 45, - 119, nil, 22, 30, 8, 47, 99, 97, 8, 160, - 47, 160, nil, 32, nil, nil, nil, nil, 131, 30, - 131, nil, 15, 21, nil, 174, nil, 174, nil, 174, - nil, 174, 75, 182, nil, 72, 71, nil, nil, 72, - 34, 4, 18, nil, 71, nil, nil, nil, 21, nil, - nil, 70, nil, nil, nil, nil, 61, nil, nil, nil, - nil, nil, 62, 9, 58, 131, nil, 131, 22, nil, - nil, nil, 42, nil, nil, nil, 32, 42, nil, 174, - nil, nil, nil, nil, nil, nil, nil, nil, 9, nil, - 74, nil, 42, nil, 28, nil, nil, nil, nil, 125, - nil, 42, 42, 42, 34, 42, nil, nil, 65, 21, - 58, nil, 10, 21, nil, 39, 65, nil, 21, nil, - 50, 39, 22, 8, 22, nil, nil, nil, 50, nil, - 22, 119, 22, 125, 119, 42, 42, nil, 22, 42, - nil, 72, 34, 21, nil, 2, 22, 72, nil, nil, - nil, 124, 34, 9, nil, nil, nil, 131, 9, nil, - nil, 22, 90, 30, 22, nil, 72, nil, nil, nil, - 22, nil, nil, nil, 39, nil, nil, 58, nil, 7, - 22, 131, nil, nil, 22, 42, nil, 58, 87, 90, - 42, 42, 42, 42, 42, 42, nil, nil, nil, 93, - 72, nil, nil, nil, 97, 97, nil, nil, nil, nil, - 15, nil, 119, 32, 119, 58, 24, 32, 22, 22, - nil, 58, 97, 22, 22, nil, 69, 22, 142, nil, - nil, nil, nil, 72, nil, nil, nil, 65, 68, nil, - 32, 22, nil, 72, 61, nil, 22, 22, 65, 50, - 62, nil, 58, 8, nil, 32, nil, 71, nil, 22, - 50, nil, nil, 20, 20, nil, nil, 57, 20, 20, - 22, 72, 20, 119, 119, 127, 127, 127, nil, 72, - 42, 42, 42, 42, nil, nil, nil, nil, 42, 42, - 42, 42, 42, 42, nil, nil, nil, 71, nil, nil, - nil, 32, 17, nil, nil, 42, nil, nil, 17, nil, - 32, 119, nil, 119, 21, nil, 21, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 22, 124, - nil, nil, 69, 22, 22, 119, nil, 22, nil, 42, - 42, nil, nil, nil, nil, 30, nil, 22, 42, nil, - nil, 30, 26, 21, nil, 172, 21, 26, 22, nil, - nil, 71, nil, nil, 32, 72, 42, 65, 72, 68, - 42, 48, nil, 68, nil, 42, 21, 124, nil, nil, - 124, nil, 124, 58, 124, 26, 26, 26, nil, 22, - nil, 126, nil, 9, 32, 22, 9, nil, nil, nil, - 42, 42, nil, 20, nil, 23, nil, nil, 22, nil, - nil, nil, nil, 38, 17, 42, 42, nil, nil, nil, - 26, 26, 26, nil, nil, nil, 48, 127, 127, 127, - 127, 27, 127, 21, 172, 42, 27, nil, 21, 21, - 22, nil, 22, 22, nil, nil, 22, nil, nil, 48, - nil, 42, 22, nil, nil, 65, nil, 30, nil, nil, - nil, nil, nil, nil, 27, 26, nil, 65, nil, nil, - nil, nil, nil, 9, 26, 26, 172, 22, 9, 9, - nil, nil, nil, nil, nil, 22, nil, 97, nil, 22, - 97, nil, nil, nil, nil, 97, 124, nil, 124, 27, - 124, nil, 124, nil, 170, 170, 170, nil, nil, 127, - 127, 127, 127, nil, nil, nil, nil, 42, 32, nil, - nil, nil, nil, nil, nil, 21, nil, nil, nil, 21, - nil, nil, nil, 172, 172, nil, nil, nil, nil, 21, - 127, nil, 25, nil, 27, nil, nil, nil, nil, 22, - 124, nil, nil, 27, 27, nil, 22, 22, nil, nil, - 26, nil, nil, nil, nil, nil, nil, nil, nil, 126, - 34, 42, 126, 42, 22, nil, nil, nil, nil, 9, - 22, 42, 22, nil, nil, 26, nil, 21, 58, nil, - 48, nil, nil, nil, nil, 42, nil, nil, 22, 32, - 21, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 42, nil, nil, 42, nil, nil, 172, 126, 172, 42, - 126, nil, 126, nil, 126, nil, nil, 9, nil, 42, - nil, nil, 48, 42, 21, 21, 48, nil, 21, 27, - 9, nil, nil, 58, 21, nil, 26, nil, 27, nil, - 26, nil, 48, nil, 26, 26, nil, nil, 48, nil, - nil, nil, nil, 172, 27, 172, nil, 42, 42, nil, - nil, 26, 42, 42, 9, 9, 42, 21, 9, nil, - 26, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 42, nil, nil, nil, nil, 42, 42, nil, nil, 72, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 48, nil, 129, 9, 170, 170, - nil, 170, 170, 53, 170, 27, nil, nil, 53, 27, - nil, nil, nil, nil, 27, nil, 126, nil, 126, nil, - 126, 21, 126, nil, nil, nil, nil, nil, 21, 21, - nil, nil, nil, nil, nil, 172, 53, 53, 53, 27, - nil, nil, 66, nil, nil, nil, 21, nil, nil, nil, - nil, nil, 21, nil, 21, nil, nil, 42, nil, 172, - nil, 9, 42, 42, nil, nil, 42, nil, 9, 9, - 126, 53, 53, 53, 53, nil, 42, nil, nil, nil, - 48, nil, nil, nil, nil, nil, 9, 42, nil, nil, - nil, nil, 9, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 170, 170, 170, 170, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 53, nil, nil, nil, - nil, nil, nil, nil, 42, 53, 53, nil, nil, nil, - nil, 26, nil, 26, nil, nil, nil, 42, nil, 26, - nil, nil, 170, nil, nil, nil, nil, 26, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 42, - 26, 42, 42, 26, nil, 42, nil, nil, nil, nil, - 129, 42, 129, nil, nil, nil, nil, nil, nil, nil, - nil, 66, nil, 26, nil, nil, nil, nil, nil, 66, - 26, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 27, 53, 27, nil, 42, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 129, nil, 129, - nil, nil, nil, nil, nil, nil, 53, nil, nil, nil, - 48, nil, nil, nil, nil, nil, nil, nil, nil, 27, - 26, nil, 27, nil, nil, 26, 26, nil, nil, nil, - nil, nil, 48, nil, nil, 66, nil, 66, 26, nil, - 66, 66, 27, nil, nil, nil, nil, nil, 42, 26, - nil, nil, nil, nil, nil, 42, 42, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 53, nil, nil, - nil, 53, nil, 42, nil, 53, 53, nil, nil, 42, - nil, 42, nil, nil, nil, 27, 48, 129, nil, 129, - nil, 129, 53, nil, nil, nil, nil, 42, nil, 27, - nil, 53, nil, nil, 27, 27, nil, nil, nil, nil, - nil, 129, 26, 129, nil, 129, 26, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 26, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 54, nil, nil, - nil, nil, 54, nil, nil, 129, nil, nil, nil, 66, - nil, nil, nil, nil, nil, 129, nil, nil, 26, nil, - nil, nil, nil, nil, 26, nil, nil, nil, nil, nil, - 54, 54, 54, nil, nil, nil, nil, 26, nil, nil, - nil, 27, nil, nil, nil, 27, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 27, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 54, 54, 54, 54, nil, - nil, 26, 26, nil, nil, 26, nil, nil, nil, nil, - nil, 26, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 66, nil, 66, nil, 66, nil, nil, nil, nil, - nil, nil, nil, 27, nil, nil, 26, nil, nil, nil, - 54, nil, nil, nil, 26, nil, 27, nil, 26, 54, - 54, nil, 53, nil, 53, nil, nil, nil, nil, nil, - 53, 66, nil, nil, 66, nil, nil, nil, 53, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 66, nil, - 27, 27, nil, nil, 27, nil, nil, nil, nil, nil, - 27, 53, nil, nil, 53, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 26, nil, - nil, nil, nil, nil, 53, 26, 26, nil, nil, nil, - nil, 66, nil, 27, nil, 66, 66, 27, nil, nil, - nil, nil, nil, 26, nil, 54, nil, nil, nil, 26, - nil, 26, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 54, 66, nil, nil, 66, nil, nil, nil, nil, nil, - nil, 53, nil, nil, nil, nil, 53, 53, nil, nil, - nil, nil, nil, nil, 66, nil, nil, 27, nil, 53, - nil, nil, nil, nil, 27, 27, nil, nil, nil, nil, - 53, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 66, nil, 27, nil, nil, nil, nil, nil, 27, nil, - 27, 54, nil, nil, nil, 54, nil, nil, nil, 54, - 54, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 54, nil, nil, nil, - nil, nil, nil, nil, nil, 54, nil, nil, nil, nil, - nil, nil, nil, 53, nil, 66, nil, 53, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 53, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 53, - nil, nil, nil, nil, nil, 53, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 66, nil, 53, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 66, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 33, 66, 53, 53, nil, nil, 53, nil, nil, 33, - 33, 33, 53, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 33, 33, 33, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 53, nil, 33, - 33, nil, nil, nil, nil, 53, nil, nil, nil, 53, - nil, nil, nil, nil, nil, nil, 54, nil, 54, nil, - nil, nil, nil, nil, 54, nil, nil, nil, nil, nil, - nil, nil, 54, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 54, nil, nil, 54, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 53, - nil, nil, nil, nil, nil, nil, 53, 53, 54, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 53, nil, nil, nil, nil, nil, - 53, nil, 53, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 54, nil, nil, nil, nil, - 54, 54, nil, nil, nil, nil, nil, nil, nil, 33, - 33, 33, nil, 54, nil, nil, 33, 33, nil, nil, - nil, nil, nil, nil, 54, nil, nil, nil, nil, nil, - nil, nil, 33, nil, nil, 33, 33, 33, 33, 33, - 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, - 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, - 33, nil, nil, nil, nil, nil, nil, 33, 33, nil, - nil, nil, nil, nil, nil, nil, 33, nil, nil, nil, - nil, nil, nil, 33, nil, 33, nil, 54, 33, 33, - nil, 54, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 54, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 33, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 54, nil, nil, nil, nil, nil, 54, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 54, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 54, 54, nil, nil, - 54, nil, nil, nil, nil, nil, 54, 33, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 54, nil, nil, nil, nil, nil, nil, nil, 54, - nil, nil, nil, 54, nil, 33, nil, 33, 33, 33, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 33, - nil, 33, nil, 33, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 54, nil, nil, nil, nil, nil, 33, - 54, 54, nil, nil, nil, nil, nil, nil, 33, 33, - nil, nil, nil, nil, nil, nil, nil, nil, 54, 33, - nil, nil, 33, nil, 54, nil, 54, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 33, 33, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 33, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 33, - 33, nil, nil, 33, 33, 33, 33, nil, nil, nil, - 33, 33, nil, nil, 33, 33, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 33, - nil, nil, 33, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 33, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 33, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 33, nil, 33, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 33, - 33, 33, 33, nil, 33, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 33, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 33, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 33, - 33, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 33 ] - -racc_goto_pointer = [ - nil, 110, 24, nil, 76, 77, 56, 58, -326, 235, - -482, -557, -668, nil, -372, 4, 135, -23, -182, 77, - 48, 195, 3, -190, -402, -7, 732, 811, -178, -63, - 20, 26, -19, 1900, -25, nil, nil, -2, -183, 77, - -246, -348, 452, -328, nil, 103, 41, 87, 530, nil, - -7, 43, -262, 1103, 1477, -277, 32, -70, 46, nil, - nil, 38, 44, -249, 7, -19, 1082, 95, -34, 60, - -225, 148, 103, -322, -267, -427, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 85, 97, -52, nil, -181, - -323, -634, -467, -318, 91, nil, -202, 42, nil, -519, - 90, 105, 105, -362, 111, 108, 108, -519, 109, -520, - -369, -715, -374, -527, -179, -188, -374, -643, -794, -295, - -576, -777, -424, nil, -85, -394, 155, -103, -423, 480, - -555, -400, nil, -531, -652, -767, -753, -334, -587, -124, - -430, -406, -11, -641, -640, -27, nil, -27, -26, -650, - -404, -538, nil, nil, 171, -12, 58, 169, 170, -271, - -186, 188, 188, 191, -287, -287, -275, -386, nil, nil, - 221, -513, 198, -680, -556, -506, -548, nil, -712, -755, - nil, nil, -426 ] - -racc_goto_default = [ - nil, nil, nil, 3, nil, 4, 347, 295, nil, 524, - nil, 816, nil, 292, 293, nil, nil, nil, 11, 12, - 18, 230, 323, nil, nil, 556, 228, 229, nil, nil, - 17, nil, 442, 21, 22, 23, 24, nil, 645, nil, - nil, nil, 312, nil, 25, 413, 32, nil, nil, 34, - 37, 36, nil, 225, 226, 359, nil, 131, 421, 130, - 133, 77, 78, nil, 92, 46, 284, nil, 784, 414, - nil, 415, 426, 599, 488, 282, 268, 47, 48, 49, - 50, 51, 52, 53, 54, 55, nil, 269, 61, nil, - nil, nil, nil, nil, nil, 69, nil, 539, 70, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 807, 673, - nil, 808, 909, 755, 661, nil, 662, nil, nil, 663, - nil, 665, 615, nil, nil, nil, 671, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 425, nil, nil, nil, - nil, nil, 76, 79, 80, nil, nil, nil, nil, nil, - 566, nil, nil, nil, nil, nil, nil, 876, 716, 660, - nil, 664, 884, 676, 678, 679, 767, 682, 683, 768, - 686, 689, 287 ] - -racc_reduce_table = [ - 0, 0, :racc_error, - 1, 146, :_reduce_none, - 2, 147, :_reduce_2, - 0, 148, :_reduce_3, - 1, 148, :_reduce_4, - 3, 148, :_reduce_5, - 2, 148, :_reduce_6, - 1, 150, :_reduce_none, - 4, 150, :_reduce_8, - 4, 153, :_reduce_9, - 2, 154, :_reduce_10, - 0, 158, :_reduce_11, - 1, 158, :_reduce_12, - 3, 158, :_reduce_13, - 2, 158, :_reduce_14, - 1, 159, :_reduce_none, - 4, 159, :_reduce_16, - 0, 176, :_reduce_17, - 4, 152, :_reduce_18, - 3, 152, :_reduce_19, - 3, 152, :_reduce_20, - 3, 152, :_reduce_21, - 2, 152, :_reduce_22, - 3, 152, :_reduce_23, - 3, 152, :_reduce_24, - 3, 152, :_reduce_25, - 3, 152, :_reduce_26, - 3, 152, :_reduce_27, - 4, 152, :_reduce_28, - 1, 152, :_reduce_none, - 3, 152, :_reduce_30, - 3, 152, :_reduce_31, - 6, 152, :_reduce_32, - 5, 152, :_reduce_33, - 5, 152, :_reduce_34, - 5, 152, :_reduce_35, - 5, 152, :_reduce_36, - 3, 152, :_reduce_37, - 3, 152, :_reduce_38, - 3, 152, :_reduce_39, - 1, 152, :_reduce_none, - 3, 163, :_reduce_41, - 3, 163, :_reduce_42, - 1, 175, :_reduce_none, - 3, 175, :_reduce_44, - 3, 175, :_reduce_45, - 3, 175, :_reduce_46, - 2, 175, :_reduce_47, - 1, 175, :_reduce_none, - 1, 162, :_reduce_none, - 1, 165, :_reduce_none, - 1, 165, :_reduce_none, - 1, 180, :_reduce_none, - 4, 180, :_reduce_53, - 0, 188, :_reduce_54, - 5, 185, :_reduce_55, - 1, 187, :_reduce_none, - 2, 179, :_reduce_57, - 3, 179, :_reduce_58, - 4, 179, :_reduce_59, - 5, 179, :_reduce_60, - 4, 179, :_reduce_61, - 5, 179, :_reduce_62, - 2, 179, :_reduce_63, - 2, 179, :_reduce_64, - 2, 179, :_reduce_65, - 2, 179, :_reduce_66, - 2, 179, :_reduce_67, - 1, 164, :_reduce_68, - 3, 164, :_reduce_69, - 1, 192, :_reduce_70, - 3, 192, :_reduce_71, - 1, 191, :_reduce_none, - 2, 191, :_reduce_73, - 3, 191, :_reduce_74, - 5, 191, :_reduce_75, - 2, 191, :_reduce_76, - 4, 191, :_reduce_77, - 2, 191, :_reduce_78, - 4, 191, :_reduce_79, - 1, 191, :_reduce_80, - 3, 191, :_reduce_81, - 1, 195, :_reduce_none, - 3, 195, :_reduce_83, - 2, 194, :_reduce_84, - 3, 194, :_reduce_85, - 1, 197, :_reduce_86, - 3, 197, :_reduce_87, - 1, 196, :_reduce_88, - 1, 196, :_reduce_89, - 4, 196, :_reduce_90, - 3, 196, :_reduce_91, - 3, 196, :_reduce_92, - 3, 196, :_reduce_93, - 3, 196, :_reduce_94, - 2, 196, :_reduce_95, - 1, 196, :_reduce_96, - 1, 172, :_reduce_97, - 1, 172, :_reduce_98, - 4, 172, :_reduce_99, - 3, 172, :_reduce_100, - 3, 172, :_reduce_101, - 3, 172, :_reduce_102, - 3, 172, :_reduce_103, - 2, 172, :_reduce_104, - 1, 172, :_reduce_105, - 1, 200, :_reduce_106, - 1, 200, :_reduce_none, - 2, 201, :_reduce_108, - 1, 201, :_reduce_109, - 3, 201, :_reduce_110, - 1, 202, :_reduce_none, - 1, 202, :_reduce_none, - 1, 202, :_reduce_none, - 1, 202, :_reduce_none, - 1, 202, :_reduce_none, - 1, 205, :_reduce_116, - 1, 205, :_reduce_none, - 1, 160, :_reduce_none, - 1, 160, :_reduce_none, - 1, 161, :_reduce_120, - 0, 208, :_reduce_121, - 4, 161, :_reduce_122, - 1, 203, :_reduce_none, - 1, 203, :_reduce_none, - 1, 203, :_reduce_none, - 1, 203, :_reduce_none, - 1, 203, :_reduce_none, - 1, 203, :_reduce_none, - 1, 203, :_reduce_none, - 1, 203, :_reduce_none, - 1, 203, :_reduce_none, - 1, 203, :_reduce_none, - 1, 203, :_reduce_none, - 1, 203, :_reduce_none, - 1, 203, :_reduce_none, - 1, 203, :_reduce_none, - 1, 203, :_reduce_none, - 1, 203, :_reduce_none, - 1, 203, :_reduce_none, - 1, 203, :_reduce_none, - 1, 203, :_reduce_none, - 1, 203, :_reduce_none, - 1, 203, :_reduce_none, - 1, 203, :_reduce_none, - 1, 203, :_reduce_none, - 1, 203, :_reduce_none, - 1, 203, :_reduce_none, - 1, 203, :_reduce_none, - 1, 203, :_reduce_none, - 1, 203, :_reduce_none, - 1, 203, :_reduce_none, - 1, 203, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 3, 178, :_reduce_194, - 5, 178, :_reduce_195, - 3, 178, :_reduce_196, - 5, 178, :_reduce_197, - 6, 178, :_reduce_198, - 5, 178, :_reduce_199, - 5, 178, :_reduce_200, - 5, 178, :_reduce_201, - 5, 178, :_reduce_202, - 4, 178, :_reduce_203, - 3, 178, :_reduce_204, - 3, 178, :_reduce_205, - 3, 178, :_reduce_206, - 3, 178, :_reduce_207, - 3, 178, :_reduce_208, - 3, 178, :_reduce_209, - 3, 178, :_reduce_210, - 3, 178, :_reduce_211, - 3, 178, :_reduce_212, - 4, 178, :_reduce_213, - 2, 178, :_reduce_214, - 2, 178, :_reduce_215, - 3, 178, :_reduce_216, - 3, 178, :_reduce_217, - 3, 178, :_reduce_218, - 3, 178, :_reduce_219, - 3, 178, :_reduce_220, - 3, 178, :_reduce_221, - 3, 178, :_reduce_222, - 3, 178, :_reduce_223, - 3, 178, :_reduce_224, - 3, 178, :_reduce_225, - 3, 178, :_reduce_226, - 3, 178, :_reduce_227, - 3, 178, :_reduce_228, - 2, 178, :_reduce_229, - 2, 178, :_reduce_230, - 3, 178, :_reduce_231, - 3, 178, :_reduce_232, - 3, 178, :_reduce_233, - 3, 178, :_reduce_234, - 3, 178, :_reduce_235, - 6, 178, :_reduce_236, - 1, 178, :_reduce_none, - 1, 211, :_reduce_none, - 1, 212, :_reduce_none, - 2, 212, :_reduce_none, - 4, 212, :_reduce_241, - 2, 212, :_reduce_242, - 3, 217, :_reduce_243, - 0, 218, :_reduce_244, - 1, 218, :_reduce_none, - 0, 168, :_reduce_246, - 1, 168, :_reduce_none, - 2, 168, :_reduce_none, - 4, 168, :_reduce_249, - 2, 168, :_reduce_250, - 1, 190, :_reduce_251, - 2, 190, :_reduce_252, - 2, 190, :_reduce_253, - 4, 190, :_reduce_254, - 1, 190, :_reduce_255, - 0, 221, :_reduce_256, - 2, 184, :_reduce_257, - 2, 220, :_reduce_258, - 2, 219, :_reduce_259, - 0, 219, :_reduce_260, - 1, 214, :_reduce_261, - 2, 214, :_reduce_262, - 3, 214, :_reduce_263, - 4, 214, :_reduce_264, - 1, 174, :_reduce_265, - 1, 174, :_reduce_none, - 3, 173, :_reduce_267, - 4, 173, :_reduce_268, - 2, 173, :_reduce_269, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_280, - 0, 246, :_reduce_281, - 4, 210, :_reduce_282, - 0, 247, :_reduce_283, - 0, 248, :_reduce_284, - 6, 210, :_reduce_285, - 0, 249, :_reduce_286, - 4, 210, :_reduce_287, - 3, 210, :_reduce_288, - 3, 210, :_reduce_289, - 2, 210, :_reduce_290, - 3, 210, :_reduce_291, - 3, 210, :_reduce_292, - 1, 210, :_reduce_293, - 4, 210, :_reduce_294, - 3, 210, :_reduce_295, - 1, 210, :_reduce_296, - 5, 210, :_reduce_297, - 4, 210, :_reduce_298, - 3, 210, :_reduce_299, - 2, 210, :_reduce_300, - 1, 210, :_reduce_none, - 2, 210, :_reduce_302, - 0, 250, :_reduce_303, - 3, 210, :_reduce_304, - 6, 210, :_reduce_305, - 6, 210, :_reduce_306, - 0, 251, :_reduce_307, - 0, 252, :_reduce_308, - 7, 210, :_reduce_309, - 0, 253, :_reduce_310, - 0, 254, :_reduce_311, - 7, 210, :_reduce_312, - 5, 210, :_reduce_313, - 4, 210, :_reduce_314, - 0, 255, :_reduce_315, - 0, 256, :_reduce_316, - 9, 210, :_reduce_317, - 0, 257, :_reduce_318, - 6, 210, :_reduce_319, - 0, 258, :_reduce_320, - 7, 210, :_reduce_321, - 0, 259, :_reduce_322, - 5, 210, :_reduce_323, - 0, 260, :_reduce_324, - 6, 210, :_reduce_325, - 0, 261, :_reduce_326, - 0, 262, :_reduce_327, - 9, 210, :_reduce_328, - 1, 210, :_reduce_329, - 1, 210, :_reduce_330, - 1, 210, :_reduce_331, - 1, 210, :_reduce_332, - 1, 167, :_reduce_none, - 1, 240, :_reduce_334, - 1, 243, :_reduce_335, - 1, 235, :_reduce_none, - 1, 235, :_reduce_none, - 2, 235, :_reduce_338, - 1, 237, :_reduce_none, - 1, 237, :_reduce_none, - 1, 236, :_reduce_none, - 5, 236, :_reduce_342, - 1, 156, :_reduce_none, - 2, 156, :_reduce_344, - 1, 239, :_reduce_none, - 1, 239, :_reduce_none, - 1, 263, :_reduce_347, - 3, 263, :_reduce_348, - 1, 266, :_reduce_349, - 3, 266, :_reduce_350, - 1, 265, :_reduce_none, - 4, 265, :_reduce_352, - 6, 265, :_reduce_353, - 3, 265, :_reduce_354, - 5, 265, :_reduce_355, - 2, 265, :_reduce_356, - 4, 265, :_reduce_357, - 1, 265, :_reduce_358, - 3, 265, :_reduce_359, - 4, 267, :_reduce_360, - 2, 267, :_reduce_361, - 2, 267, :_reduce_362, - 1, 267, :_reduce_363, - 2, 272, :_reduce_364, - 0, 272, :_reduce_365, - 6, 273, :_reduce_366, - 8, 273, :_reduce_367, - 4, 273, :_reduce_368, - 6, 273, :_reduce_369, - 4, 273, :_reduce_370, - 2, 273, :_reduce_none, - 6, 273, :_reduce_372, - 2, 273, :_reduce_373, - 4, 273, :_reduce_374, - 6, 273, :_reduce_375, - 2, 273, :_reduce_376, - 4, 273, :_reduce_377, - 2, 273, :_reduce_378, - 4, 273, :_reduce_379, - 1, 273, :_reduce_none, - 0, 186, :_reduce_381, - 1, 186, :_reduce_382, - 3, 277, :_reduce_383, - 1, 277, :_reduce_384, - 4, 277, :_reduce_385, - 1, 278, :_reduce_386, - 4, 278, :_reduce_387, - 1, 279, :_reduce_388, - 3, 279, :_reduce_389, - 1, 280, :_reduce_390, - 1, 280, :_reduce_none, - 0, 284, :_reduce_392, - 0, 285, :_reduce_393, - 4, 234, :_reduce_394, - 4, 282, :_reduce_395, - 1, 282, :_reduce_396, - 0, 288, :_reduce_397, - 4, 283, :_reduce_398, - 0, 289, :_reduce_399, - 4, 283, :_reduce_400, - 0, 290, :_reduce_401, - 5, 287, :_reduce_402, - 2, 181, :_reduce_403, - 4, 181, :_reduce_404, - 5, 181, :_reduce_405, - 5, 181, :_reduce_406, - 2, 233, :_reduce_407, - 4, 233, :_reduce_408, - 4, 233, :_reduce_409, - 3, 233, :_reduce_410, - 3, 233, :_reduce_411, - 3, 233, :_reduce_412, - 2, 233, :_reduce_413, - 1, 233, :_reduce_414, - 4, 233, :_reduce_415, - 0, 292, :_reduce_416, - 5, 232, :_reduce_417, - 0, 293, :_reduce_418, - 5, 232, :_reduce_419, - 5, 238, :_reduce_420, - 1, 294, :_reduce_421, - 1, 294, :_reduce_none, - 6, 155, :_reduce_423, - 0, 155, :_reduce_424, - 1, 295, :_reduce_425, - 1, 295, :_reduce_none, - 1, 295, :_reduce_none, - 2, 296, :_reduce_428, - 1, 296, :_reduce_none, - 2, 157, :_reduce_430, - 1, 157, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 223, :_reduce_435, - 1, 298, :_reduce_436, - 2, 298, :_reduce_437, - 3, 299, :_reduce_438, - 1, 299, :_reduce_439, - 1, 299, :_reduce_440, - 3, 224, :_reduce_441, - 4, 225, :_reduce_442, - 3, 226, :_reduce_443, - 0, 303, :_reduce_444, - 3, 303, :_reduce_445, - 1, 304, :_reduce_446, - 2, 304, :_reduce_447, - 3, 228, :_reduce_448, - 0, 306, :_reduce_449, - 3, 306, :_reduce_450, - 3, 227, :_reduce_451, - 3, 229, :_reduce_452, - 0, 307, :_reduce_453, - 3, 307, :_reduce_454, - 0, 308, :_reduce_455, - 3, 308, :_reduce_456, - 0, 300, :_reduce_457, - 2, 300, :_reduce_458, - 0, 301, :_reduce_459, - 2, 301, :_reduce_460, - 0, 302, :_reduce_461, - 2, 302, :_reduce_462, - 1, 305, :_reduce_463, - 2, 305, :_reduce_464, - 0, 310, :_reduce_465, - 4, 305, :_reduce_466, - 1, 309, :_reduce_467, - 1, 309, :_reduce_468, - 1, 309, :_reduce_469, - 1, 309, :_reduce_none, - 1, 206, :_reduce_471, - 3, 207, :_reduce_472, - 1, 297, :_reduce_473, - 2, 297, :_reduce_474, - 1, 209, :_reduce_475, - 1, 209, :_reduce_476, - 1, 209, :_reduce_477, - 1, 209, :_reduce_478, - 1, 198, :_reduce_479, - 1, 198, :_reduce_480, - 1, 198, :_reduce_481, - 1, 198, :_reduce_482, - 1, 198, :_reduce_483, - 1, 199, :_reduce_484, - 1, 199, :_reduce_485, - 1, 199, :_reduce_486, - 1, 199, :_reduce_487, - 1, 199, :_reduce_488, - 1, 199, :_reduce_489, - 1, 199, :_reduce_490, - 1, 230, :_reduce_491, - 1, 230, :_reduce_492, - 1, 166, :_reduce_493, - 1, 166, :_reduce_494, - 1, 171, :_reduce_495, - 1, 171, :_reduce_496, - 0, 311, :_reduce_497, - 4, 241, :_reduce_498, - 0, 241, :_reduce_499, - 3, 244, :_reduce_500, - 0, 313, :_reduce_501, - 3, 244, :_reduce_502, - 4, 312, :_reduce_503, - 2, 312, :_reduce_504, - 2, 312, :_reduce_505, - 1, 312, :_reduce_506, - 2, 315, :_reduce_507, - 0, 315, :_reduce_508, - 6, 286, :_reduce_509, - 8, 286, :_reduce_510, - 4, 286, :_reduce_511, - 6, 286, :_reduce_512, - 4, 286, :_reduce_513, - 6, 286, :_reduce_514, - 2, 286, :_reduce_515, - 4, 286, :_reduce_516, - 6, 286, :_reduce_517, - 2, 286, :_reduce_518, - 4, 286, :_reduce_519, - 2, 286, :_reduce_520, - 4, 286, :_reduce_521, - 1, 286, :_reduce_522, - 0, 286, :_reduce_523, - 1, 281, :_reduce_524, - 1, 281, :_reduce_525, - 1, 281, :_reduce_526, - 1, 281, :_reduce_527, - 1, 264, :_reduce_none, - 1, 264, :_reduce_529, - 1, 317, :_reduce_530, - 1, 318, :_reduce_531, - 3, 318, :_reduce_532, - 1, 274, :_reduce_533, - 3, 274, :_reduce_534, - 1, 319, :_reduce_535, - 2, 320, :_reduce_536, - 1, 320, :_reduce_537, - 2, 321, :_reduce_538, - 1, 321, :_reduce_539, - 1, 268, :_reduce_540, - 3, 268, :_reduce_541, - 1, 314, :_reduce_542, - 3, 314, :_reduce_543, - 1, 322, :_reduce_none, - 1, 322, :_reduce_none, - 2, 269, :_reduce_546, - 1, 269, :_reduce_547, - 3, 323, :_reduce_548, - 3, 324, :_reduce_549, - 1, 275, :_reduce_550, - 3, 275, :_reduce_551, - 1, 316, :_reduce_552, - 3, 316, :_reduce_553, - 1, 325, :_reduce_none, - 1, 325, :_reduce_none, - 2, 276, :_reduce_556, - 1, 276, :_reduce_557, - 1, 326, :_reduce_none, - 1, 326, :_reduce_none, - 2, 271, :_reduce_560, - 2, 270, :_reduce_561, - 0, 270, :_reduce_562, - 1, 245, :_reduce_none, - 3, 245, :_reduce_564, - 0, 231, :_reduce_565, - 2, 231, :_reduce_none, - 1, 216, :_reduce_567, - 3, 216, :_reduce_568, - 3, 327, :_reduce_569, - 2, 327, :_reduce_570, - 4, 327, :_reduce_571, - 2, 327, :_reduce_572, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 183, :_reduce_none, - 1, 183, :_reduce_none, - 1, 183, :_reduce_none, - 1, 183, :_reduce_none, - 1, 291, :_reduce_none, - 1, 291, :_reduce_none, - 1, 291, :_reduce_none, - 1, 182, :_reduce_none, - 1, 182, :_reduce_none, - 1, 170, :_reduce_585, - 1, 170, :_reduce_586, - 0, 149, :_reduce_none, - 1, 149, :_reduce_none, - 0, 177, :_reduce_none, - 1, 177, :_reduce_none, - 2, 193, :_reduce_591, - 2, 169, :_reduce_592, - 0, 215, :_reduce_none, - 1, 215, :_reduce_none, - 1, 215, :_reduce_none, - 1, 242, :_reduce_596, - 1, 242, :_reduce_none, - 1, 151, :_reduce_none, - 2, 151, :_reduce_none, - 0, 213, :_reduce_600 ] - -racc_reduce_n = 601 - -racc_shift_n = 1026 - -racc_token_table = { - false => 0, - :error => 1, - :kCLASS => 2, - :kMODULE => 3, - :kDEF => 4, - :kUNDEF => 5, - :kBEGIN => 6, - :kRESCUE => 7, - :kENSURE => 8, - :kEND => 9, - :kIF => 10, - :kUNLESS => 11, - :kTHEN => 12, - :kELSIF => 13, - :kELSE => 14, - :kCASE => 15, - :kWHEN => 16, - :kWHILE => 17, - :kUNTIL => 18, - :kFOR => 19, - :kBREAK => 20, - :kNEXT => 21, - :kREDO => 22, - :kRETRY => 23, - :kIN => 24, - :kDO => 25, - :kDO_COND => 26, - :kDO_BLOCK => 27, - :kDO_LAMBDA => 28, - :kRETURN => 29, - :kYIELD => 30, - :kSUPER => 31, - :kSELF => 32, - :kNIL => 33, - :kTRUE => 34, - :kFALSE => 35, - :kAND => 36, - :kOR => 37, - :kNOT => 38, - :kIF_MOD => 39, - :kUNLESS_MOD => 40, - :kWHILE_MOD => 41, - :kUNTIL_MOD => 42, - :kRESCUE_MOD => 43, - :kALIAS => 44, - :kDEFINED => 45, - :klBEGIN => 46, - :klEND => 47, - :k__LINE__ => 48, - :k__FILE__ => 49, - :k__ENCODING__ => 50, - :tIDENTIFIER => 51, - :tFID => 52, - :tGVAR => 53, - :tIVAR => 54, - :tCONSTANT => 55, - :tLABEL => 56, - :tCVAR => 57, - :tNTH_REF => 58, - :tBACK_REF => 59, - :tSTRING_CONTENT => 60, - :tINTEGER => 61, - :tFLOAT => 62, - :tUPLUS => 63, - :tUMINUS => 64, - :tUNARY_NUM => 65, - :tPOW => 66, - :tCMP => 67, - :tEQ => 68, - :tEQQ => 69, - :tNEQ => 70, - :tGEQ => 71, - :tLEQ => 72, - :tANDOP => 73, - :tOROP => 74, - :tMATCH => 75, - :tNMATCH => 76, - :tDOT => 77, - :tDOT2 => 78, - :tDOT3 => 79, - :tAREF => 80, - :tASET => 81, - :tLSHFT => 82, - :tRSHFT => 83, - :tCOLON2 => 84, - :tCOLON3 => 85, - :tOP_ASGN => 86, - :tASSOC => 87, - :tLPAREN => 88, - :tLPAREN2 => 89, - :tRPAREN => 90, - :tLPAREN_ARG => 91, - :tLBRACK => 92, - :tLBRACK2 => 93, - :tRBRACK => 94, - :tLBRACE => 95, - :tLBRACE_ARG => 96, - :tSTAR => 97, - :tSTAR2 => 98, - :tAMPER => 99, - :tAMPER2 => 100, - :tTILDE => 101, - :tPERCENT => 102, - :tDIVIDE => 103, - :tDSTAR => 104, - :tPLUS => 105, - :tMINUS => 106, - :tLT => 107, - :tGT => 108, - :tPIPE => 109, - :tBANG => 110, - :tCARET => 111, - :tLCURLY => 112, - :tRCURLY => 113, - :tBACK_REF2 => 114, - :tSYMBEG => 115, - :tSTRING_BEG => 116, - :tXSTRING_BEG => 117, - :tREGEXP_BEG => 118, - :tREGEXP_OPT => 119, - :tWORDS_BEG => 120, - :tQWORDS_BEG => 121, - :tSYMBOLS_BEG => 122, - :tQSYMBOLS_BEG => 123, - :tSTRING_DBEG => 124, - :tSTRING_DVAR => 125, - :tSTRING_END => 126, - :tSTRING_DEND => 127, - :tSTRING => 128, - :tSYMBOL => 129, - :tNL => 130, - :tEH => 131, - :tCOLON => 132, - :tCOMMA => 133, - :tSPACE => 134, - :tSEMI => 135, - :tLAMBDA => 136, - :tLAMBEG => 137, - :tCHARACTER => 138, - :tRATIONAL => 139, - :tIMAGINARY => 140, - :tLABEL_END => 141, - :tANDDOT => 142, - :tEQL => 143, - :tLOWEST => 144 } - -racc_nt_base = 145 - -racc_use_result_var = true - -Racc_arg = [ - racc_action_table, - racc_action_check, - racc_action_default, - racc_action_pointer, - racc_goto_table, - racc_goto_check, - racc_goto_default, - racc_goto_pointer, - racc_nt_base, - racc_reduce_table, - racc_token_table, - racc_shift_n, - racc_reduce_n, - racc_use_result_var ] -Ractor.make_shareable(Racc_arg) if defined?(Ractor) - -Racc_token_to_s_table = [ - "$end", - "error", - "kCLASS", - "kMODULE", - "kDEF", - "kUNDEF", - "kBEGIN", - "kRESCUE", - "kENSURE", - "kEND", - "kIF", - "kUNLESS", - "kTHEN", - "kELSIF", - "kELSE", - "kCASE", - "kWHEN", - "kWHILE", - "kUNTIL", - "kFOR", - "kBREAK", - "kNEXT", - "kREDO", - "kRETRY", - "kIN", - "kDO", - "kDO_COND", - "kDO_BLOCK", - "kDO_LAMBDA", - "kRETURN", - "kYIELD", - "kSUPER", - "kSELF", - "kNIL", - "kTRUE", - "kFALSE", - "kAND", - "kOR", - "kNOT", - "kIF_MOD", - "kUNLESS_MOD", - "kWHILE_MOD", - "kUNTIL_MOD", - "kRESCUE_MOD", - "kALIAS", - "kDEFINED", - "klBEGIN", - "klEND", - "k__LINE__", - "k__FILE__", - "k__ENCODING__", - "tIDENTIFIER", - "tFID", - "tGVAR", - "tIVAR", - "tCONSTANT", - "tLABEL", - "tCVAR", - "tNTH_REF", - "tBACK_REF", - "tSTRING_CONTENT", - "tINTEGER", - "tFLOAT", - "tUPLUS", - "tUMINUS", - "tUNARY_NUM", - "tPOW", - "tCMP", - "tEQ", - "tEQQ", - "tNEQ", - "tGEQ", - "tLEQ", - "tANDOP", - "tOROP", - "tMATCH", - "tNMATCH", - "tDOT", - "tDOT2", - "tDOT3", - "tAREF", - "tASET", - "tLSHFT", - "tRSHFT", - "tCOLON2", - "tCOLON3", - "tOP_ASGN", - "tASSOC", - "tLPAREN", - "tLPAREN2", - "tRPAREN", - "tLPAREN_ARG", - "tLBRACK", - "tLBRACK2", - "tRBRACK", - "tLBRACE", - "tLBRACE_ARG", - "tSTAR", - "tSTAR2", - "tAMPER", - "tAMPER2", - "tTILDE", - "tPERCENT", - "tDIVIDE", - "tDSTAR", - "tPLUS", - "tMINUS", - "tLT", - "tGT", - "tPIPE", - "tBANG", - "tCARET", - "tLCURLY", - "tRCURLY", - "tBACK_REF2", - "tSYMBEG", - "tSTRING_BEG", - "tXSTRING_BEG", - "tREGEXP_BEG", - "tREGEXP_OPT", - "tWORDS_BEG", - "tQWORDS_BEG", - "tSYMBOLS_BEG", - "tQSYMBOLS_BEG", - "tSTRING_DBEG", - "tSTRING_DVAR", - "tSTRING_END", - "tSTRING_DEND", - "tSTRING", - "tSYMBOL", - "tNL", - "tEH", - "tCOLON", - "tCOMMA", - "tSPACE", - "tSEMI", - "tLAMBDA", - "tLAMBEG", - "tCHARACTER", - "tRATIONAL", - "tIMAGINARY", - "tLABEL_END", - "tANDDOT", - "tEQL", - "tLOWEST", - "$start", - "program", - "top_compstmt", - "top_stmts", - "opt_terms", - "top_stmt", - "terms", - "stmt", - "bodystmt", - "compstmt", - "opt_rescue", - "opt_else", - "opt_ensure", - "stmts", - "stmt_or_begin", - "fitem", - "undef_list", - "expr_value", - "command_asgn", - "mlhs", - "command_call", - "var_lhs", - "primary_value", - "opt_call_args", - "rbracket", - "call_op", - "backref", - "lhs", - "mrhs", - "mrhs_arg", - "expr", - "@1", - "opt_nl", - "arg", - "command", - "block_command", - "block_call", - "dot_or_colon", - "operation2", - "command_args", - "cmd_brace_block", - "opt_block_param", - "fcall", - "@2", - "operation", - "call_args", - "mlhs_basic", - "mlhs_inner", - "rparen", - "mlhs_head", - "mlhs_item", - "mlhs_node", - "mlhs_post", - "user_variable", - "keyword_variable", - "cname", - "cpath", - "fname", - "op", - "reswords", - "fsym", - "symbol", - "dsym", - "@3", - "simple_numeric", - "primary", - "arg_value", - "aref_args", - "none", - "args", - "trailer", - "assocs", - "paren_args", - "opt_paren_args", - "opt_block_arg", - "block_arg", - "@4", - "literal", - "strings", - "xstring", - "regexp", - "words", - "qwords", - "symbols", - "qsymbols", - "var_ref", - "assoc_list", - "brace_block", - "method_call", - "lambda", - "then", - "if_tail", - "do", - "case_body", - "for_var", - "k_class", - "superclass", - "term", - "k_module", - "f_arglist", - "singleton", - "@5", - "@6", - "@7", - "@8", - "@9", - "@10", - "@11", - "@12", - "@13", - "@14", - "@15", - "@16", - "@17", - "@18", - "@19", - "@20", - "@21", - "f_marg", - "f_norm_arg", - "f_margs", - "f_marg_list", - "block_args_tail", - "f_block_kwarg", - "f_kwrest", - "opt_f_block_arg", - "f_block_arg", - "opt_block_args_tail", - "block_param", - "f_arg", - "f_block_optarg", - "f_rest_arg", - "block_param_def", - "opt_bv_decl", - "bv_decls", - "bvar", - "f_bad_arg", - "f_larglist", - "lambda_body", - "@22", - "@23", - "f_args", - "do_block", - "@24", - "@25", - "@26", - "operation3", - "@27", - "@28", - "cases", - "exc_list", - "exc_var", - "numeric", - "string", - "string1", - "string_contents", - "xstring_contents", - "regexp_contents", - "word_list", - "word", - "string_content", - "symbol_list", - "qword_list", - "qsym_list", - "string_dvar", - "@29", - "@30", - "args_tail", - "@31", - "f_kwarg", - "opt_args_tail", - "f_optarg", - "f_arg_asgn", - "f_arg_item", - "f_label", - "f_kw", - "f_block_kw", - "kwrest_mark", - "f_opt", - "f_block_opt", - "restarg_mark", - "blkarg_mark", - "assoc" ] -Ractor.make_shareable(Racc_token_to_s_table) if defined?(Ractor) - -Racc_debug_parser = false - -##### State transition tables end ##### - -# reduce 0 omitted - -# reduce 1 omitted - -def _reduce_2(val, _values, result) - result = @builder.compstmt(val[0]) - - result -end - -def _reduce_3(val, _values, result) - result = [] - - result -end - -def _reduce_4(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_5(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_6(val, _values, result) - result = [ val[1] ] - - result -end - -# reduce 7 omitted - -def _reduce_8(val, _values, result) - result = @builder.preexe(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_9(val, _values, result) - rescue_bodies = val[1] - else_t, else_ = val[2] - ensure_t, ensure_ = val[3] - - if rescue_bodies.empty? && !else_t.nil? - diagnostic :warning, :useless_else, nil, else_t - end - - result = @builder.begin_body(val[0], - rescue_bodies, - else_t, else_, - ensure_t, ensure_) - - result -end - -def _reduce_10(val, _values, result) - result = @builder.compstmt(val[0]) - - result -end - -def _reduce_11(val, _values, result) - result = [] - - result -end - -def _reduce_12(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_13(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_14(val, _values, result) - result = [ val[1] ] - - result -end - -# reduce 15 omitted - -def _reduce_16(val, _values, result) - diagnostic :error, :begin_in_method, nil, val[0] - - result -end - -def _reduce_17(val, _values, result) - @lexer.state = :expr_fname - - result -end - -def _reduce_18(val, _values, result) - result = @builder.alias(val[0], val[1], val[3]) - - result -end - -def _reduce_19(val, _values, result) - result = @builder.alias(val[0], - @builder.gvar(val[1]), - @builder.gvar(val[2])) - - result -end - -def _reduce_20(val, _values, result) - result = @builder.alias(val[0], - @builder.gvar(val[1]), - @builder.back_ref(val[2])) - - result -end - -def _reduce_21(val, _values, result) - diagnostic :error, :nth_ref_alias, nil, val[2] - - result -end - -def _reduce_22(val, _values, result) - result = @builder.undef_method(val[0], val[1]) - - result -end - -def _reduce_23(val, _values, result) - result = @builder.condition_mod(val[0], nil, - val[1], val[2]) - - result -end - -def _reduce_24(val, _values, result) - result = @builder.condition_mod(nil, val[0], - val[1], val[2]) - - result -end - -def _reduce_25(val, _values, result) - result = @builder.loop_mod(:while, val[0], val[1], val[2]) - - result -end - -def _reduce_26(val, _values, result) - result = @builder.loop_mod(:until, val[0], val[1], val[2]) - - result -end - -def _reduce_27(val, _values, result) - rescue_body = @builder.rescue_body(val[1], - nil, nil, nil, - nil, val[2]) - - result = @builder.begin_body(val[0], [ rescue_body ]) - - result -end - -def _reduce_28(val, _values, result) - result = @builder.postexe(val[0], val[1], val[2], val[3]) - - result -end - -# reduce 29 omitted - -def _reduce_30(val, _values, result) - result = @builder.multi_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_31(val, _values, result) - result = @builder.op_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_32(val, _values, result) - result = @builder.op_assign( - @builder.index( - val[0], val[1], val[2], val[3]), - val[4], val[5]) - - result -end - -def _reduce_33(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_34(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_35(val, _values, result) - const = @builder.const_op_assignable( - @builder.const_fetch(val[0], val[1], val[2])) - result = @builder.op_assign(const, val[3], val[4]) - - result -end - -def _reduce_36(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_37(val, _values, result) - @builder.op_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_38(val, _values, result) - result = @builder.assign(val[0], val[1], - @builder.array(nil, val[2], nil)) - - result -end - -def _reduce_39(val, _values, result) - result = @builder.multi_assign(val[0], val[1], val[2]) - - result -end - -# reduce 40 omitted - -def _reduce_41(val, _values, result) - result = @builder.assign(val[0], val[1], val[2]) - - result -end - -def _reduce_42(val, _values, result) - result = @builder.assign(val[0], val[1], val[2]) - - result -end - -# reduce 43 omitted - -def _reduce_44(val, _values, result) - result = @builder.logical_op(:and, val[0], val[1], val[2]) - - result -end - -def _reduce_45(val, _values, result) - result = @builder.logical_op(:or, val[0], val[1], val[2]) - - result -end - -def _reduce_46(val, _values, result) - result = @builder.not_op(val[0], nil, val[2], nil) - - result -end - -def _reduce_47(val, _values, result) - result = @builder.not_op(val[0], nil, val[1], nil) - - result -end - -# reduce 48 omitted - -# reduce 49 omitted - -# reduce 50 omitted - -# reduce 51 omitted - -# reduce 52 omitted - -def _reduce_53(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - result -end - -def _reduce_54(val, _values, result) - @static_env.extend_dynamic - result = @context.dup - @context.in_block = true - - result -end - -def _reduce_55(val, _values, result) - result = [ val[0], val[2], val[3], val[4] ] - - @static_env.unextend - @context.in_block = val[1].in_block - - result -end - -# reduce 56 omitted - -def _reduce_57(val, _values, result) - result = @builder.call_method(nil, nil, val[0], - nil, val[1], nil) - - result -end - -def _reduce_58(val, _values, result) - method_call = @builder.call_method(nil, nil, val[0], - nil, val[1], nil) - - begin_t, args, body, end_t = val[2] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_59(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - result -end - -def _reduce_60(val, _values, result) - method_call = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - begin_t, args, body, end_t = val[4] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_61(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - result -end - -def _reduce_62(val, _values, result) - method_call = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - begin_t, args, body, end_t = val[4] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_63(val, _values, result) - result = @builder.keyword_cmd(:super, val[0], - nil, val[1], nil) - - result -end - -def _reduce_64(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0], - nil, val[1], nil) - - result -end - -def _reduce_65(val, _values, result) - result = @builder.keyword_cmd(:return, val[0], - nil, val[1], nil) - - result -end - -def _reduce_66(val, _values, result) - result = @builder.keyword_cmd(:break, val[0], - nil, val[1], nil) - - result -end - -def _reduce_67(val, _values, result) - result = @builder.keyword_cmd(:next, val[0], - nil, val[1], nil) - - result -end - -def _reduce_68(val, _values, result) - result = @builder.multi_lhs(nil, val[0], nil) - - result -end - -def _reduce_69(val, _values, result) - result = @builder.begin(val[0], val[1], val[2]) - - result -end - -def _reduce_70(val, _values, result) - result = @builder.multi_lhs(nil, val[0], nil) - - result -end - -def _reduce_71(val, _values, result) - result = @builder.multi_lhs(val[0], val[1], val[2]) - - result -end - -# reduce 72 omitted - -def _reduce_73(val, _values, result) - result = val[0]. - push(val[1]) - - result -end - -def _reduce_74(val, _values, result) - result = val[0]. - push(@builder.splat(val[1], val[2])) - - result -end - -def _reduce_75(val, _values, result) - result = val[0]. - push(@builder.splat(val[1], val[2])). - concat(val[4]) - - result -end - -def _reduce_76(val, _values, result) - result = val[0]. - push(@builder.splat(val[1])) - - result -end - -def _reduce_77(val, _values, result) - result = val[0]. - push(@builder.splat(val[1])). - concat(val[3]) - - result -end - -def _reduce_78(val, _values, result) - result = [ @builder.splat(val[0], val[1]) ] - - result -end - -def _reduce_79(val, _values, result) - result = [ @builder.splat(val[0], val[1]), - *val[3] ] - - result -end - -def _reduce_80(val, _values, result) - result = [ @builder.splat(val[0]) ] - - result -end - -def _reduce_81(val, _values, result) - result = [ @builder.splat(val[0]), - *val[2] ] - - result -end - -# reduce 82 omitted - -def _reduce_83(val, _values, result) - result = @builder.begin(val[0], val[1], val[2]) - - result -end - -def _reduce_84(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_85(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_86(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_87(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_88(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_89(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_90(val, _values, result) - result = @builder.index_asgn(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_91(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_92(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_93(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_94(val, _values, result) - result = @builder.assignable( - @builder.const_fetch(val[0], val[1], val[2])) - - result -end - -def _reduce_95(val, _values, result) - result = @builder.assignable( - @builder.const_global(val[0], val[1])) - - result -end - -def _reduce_96(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_97(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_98(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_99(val, _values, result) - result = @builder.index_asgn(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_100(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_101(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_102(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_103(val, _values, result) - result = @builder.assignable( - @builder.const_fetch(val[0], val[1], val[2])) - - result -end - -def _reduce_104(val, _values, result) - result = @builder.assignable( - @builder.const_global(val[0], val[1])) - - result -end - -def _reduce_105(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_106(val, _values, result) - diagnostic :error, :module_name_const, nil, val[0] - - result -end - -# reduce 107 omitted - -def _reduce_108(val, _values, result) - result = @builder.const_global(val[0], val[1]) - - result -end - -def _reduce_109(val, _values, result) - result = @builder.const(val[0]) - - result -end - -def _reduce_110(val, _values, result) - result = @builder.const_fetch(val[0], val[1], val[2]) - - result -end - -# reduce 111 omitted - -# reduce 112 omitted - -# reduce 113 omitted - -# reduce 114 omitted - -# reduce 115 omitted - -def _reduce_116(val, _values, result) - result = @builder.symbol_internal(val[0]) - - result -end - -# reduce 117 omitted - -# reduce 118 omitted - -# reduce 119 omitted - -def _reduce_120(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_121(val, _values, result) - @lexer.state = :expr_fname - - result -end - -def _reduce_122(val, _values, result) - result = val[0] << val[3] - - result -end - -# reduce 123 omitted - -# reduce 124 omitted - -# reduce 125 omitted - -# reduce 126 omitted - -# reduce 127 omitted - -# reduce 128 omitted - -# reduce 129 omitted - -# reduce 130 omitted - -# reduce 131 omitted - -# reduce 132 omitted - -# reduce 133 omitted - -# reduce 134 omitted - -# reduce 135 omitted - -# reduce 136 omitted - -# reduce 137 omitted - -# reduce 138 omitted - -# reduce 139 omitted - -# reduce 140 omitted - -# reduce 141 omitted - -# reduce 142 omitted - -# reduce 143 omitted - -# reduce 144 omitted - -# reduce 145 omitted - -# reduce 146 omitted - -# reduce 147 omitted - -# reduce 148 omitted - -# reduce 149 omitted - -# reduce 150 omitted - -# reduce 151 omitted - -# reduce 152 omitted - -# reduce 153 omitted - -# reduce 154 omitted - -# reduce 155 omitted - -# reduce 156 omitted - -# reduce 157 omitted - -# reduce 158 omitted - -# reduce 159 omitted - -# reduce 160 omitted - -# reduce 161 omitted - -# reduce 162 omitted - -# reduce 163 omitted - -# reduce 164 omitted - -# reduce 165 omitted - -# reduce 166 omitted - -# reduce 167 omitted - -# reduce 168 omitted - -# reduce 169 omitted - -# reduce 170 omitted - -# reduce 171 omitted - -# reduce 172 omitted - -# reduce 173 omitted - -# reduce 174 omitted - -# reduce 175 omitted - -# reduce 176 omitted - -# reduce 177 omitted - -# reduce 178 omitted - -# reduce 179 omitted - -# reduce 180 omitted - -# reduce 181 omitted - -# reduce 182 omitted - -# reduce 183 omitted - -# reduce 184 omitted - -# reduce 185 omitted - -# reduce 186 omitted - -# reduce 187 omitted - -# reduce 188 omitted - -# reduce 189 omitted - -# reduce 190 omitted - -# reduce 191 omitted - -# reduce 192 omitted - -# reduce 193 omitted - -def _reduce_194(val, _values, result) - result = @builder.assign(val[0], val[1], val[2]) - - result -end - -def _reduce_195(val, _values, result) - rescue_body = @builder.rescue_body(val[3], - nil, nil, nil, - nil, val[4]) - - rescue_ = @builder.begin_body(val[2], [ rescue_body ]) - - result = @builder.assign(val[0], val[1], rescue_) - - result -end - -def _reduce_196(val, _values, result) - result = @builder.op_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_197(val, _values, result) - rescue_body = @builder.rescue_body(val[3], - nil, nil, nil, - nil, val[4]) - - rescue_ = @builder.begin_body(val[2], [ rescue_body ]) - - result = @builder.op_assign(val[0], val[1], rescue_) - - result -end - -def _reduce_198(val, _values, result) - result = @builder.op_assign( - @builder.index( - val[0], val[1], val[2], val[3]), - val[4], val[5]) - - result -end - -def _reduce_199(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_200(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_201(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_202(val, _values, result) - const = @builder.const_op_assignable( - @builder.const_fetch(val[0], val[1], val[2])) - result = @builder.op_assign(const, val[3], val[4]) - - result -end - -def _reduce_203(val, _values, result) - const = @builder.const_op_assignable( - @builder.const_global(val[0], val[1])) - result = @builder.op_assign(const, val[2], val[3]) - - result -end - -def _reduce_204(val, _values, result) - result = @builder.op_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_205(val, _values, result) - result = @builder.range_inclusive(val[0], val[1], val[2]) - - result -end - -def _reduce_206(val, _values, result) - result = @builder.range_exclusive(val[0], val[1], val[2]) - - result -end - -def _reduce_207(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_208(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_209(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_210(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_211(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_212(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_213(val, _values, result) - result = @builder.unary_op(val[0], - @builder.binary_op( - val[1], val[2], val[3])) - - result -end - -def _reduce_214(val, _values, result) - result = @builder.unary_op(val[0], val[1]) - - result -end - -def _reduce_215(val, _values, result) - result = @builder.unary_op(val[0], val[1]) - - result -end - -def _reduce_216(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_217(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_218(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_219(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_220(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_221(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_222(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_223(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_224(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_225(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_226(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_227(val, _values, result) - result = @builder.match_op(val[0], val[1], val[2]) - - result -end - -def _reduce_228(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_229(val, _values, result) - result = @builder.not_op(val[0], nil, val[1], nil) - - result -end - -def _reduce_230(val, _values, result) - result = @builder.unary_op(val[0], val[1]) - - result -end - -def _reduce_231(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_232(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_233(val, _values, result) - result = @builder.logical_op(:and, val[0], val[1], val[2]) - - result -end - -def _reduce_234(val, _values, result) - result = @builder.logical_op(:or, val[0], val[1], val[2]) - - result -end - -def _reduce_235(val, _values, result) - result = @builder.keyword_cmd(:defined?, val[0], nil, [ val[2] ], nil) - - result -end - -def _reduce_236(val, _values, result) - result = @builder.ternary(val[0], val[1], - val[2], val[4], val[5]) - - result -end - -# reduce 237 omitted - -# reduce 238 omitted - -# reduce 239 omitted - -# reduce 240 omitted - -def _reduce_241(val, _values, result) - result = val[0] << @builder.associate(nil, val[2], nil) - - result -end - -def _reduce_242(val, _values, result) - result = [ @builder.associate(nil, val[0], nil) ] - - result -end - -def _reduce_243(val, _values, result) - result = val - - result -end - -def _reduce_244(val, _values, result) - result = [ nil, [], nil ] - - result -end - -# reduce 245 omitted - -def _reduce_246(val, _values, result) - result = [] - - result -end - -# reduce 247 omitted - -# reduce 248 omitted - -def _reduce_249(val, _values, result) - result = val[0] << @builder.associate(nil, val[2], nil) - - result -end - -def _reduce_250(val, _values, result) - result = [ @builder.associate(nil, val[0], nil) ] - - result -end - -def _reduce_251(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_252(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_253(val, _values, result) - result = [ @builder.associate(nil, val[0], nil) ] - result.concat(val[1]) - - result -end - -def _reduce_254(val, _values, result) - assocs = @builder.associate(nil, val[2], nil) - result = val[0] << assocs - result.concat(val[3]) - - result -end - -def _reduce_255(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_256(val, _values, result) - result = @lexer.cmdarg.dup - @lexer.cmdarg.push(true) - - result -end - -def _reduce_257(val, _values, result) - @lexer.cmdarg = val[0] - - result = val[1] - - result -end - -def _reduce_258(val, _values, result) - result = @builder.block_pass(val[0], val[1]) - - result -end - -def _reduce_259(val, _values, result) - result = [ val[1] ] - - result -end - -def _reduce_260(val, _values, result) - result = [] - - result -end - -def _reduce_261(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_262(val, _values, result) - result = [ @builder.splat(val[0], val[1]) ] - - result -end - -def _reduce_263(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_264(val, _values, result) - result = val[0] << @builder.splat(val[2], val[3]) - - result -end - -def _reduce_265(val, _values, result) - result = @builder.array(nil, val[0], nil) - - result -end - -# reduce 266 omitted - -def _reduce_267(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_268(val, _values, result) - result = val[0] << @builder.splat(val[2], val[3]) - - result -end - -def _reduce_269(val, _values, result) - result = [ @builder.splat(val[0], val[1]) ] - - result -end - -# reduce 270 omitted - -# reduce 271 omitted - -# reduce 272 omitted - -# reduce 273 omitted - -# reduce 274 omitted - -# reduce 275 omitted - -# reduce 276 omitted - -# reduce 277 omitted - -# reduce 278 omitted - -# reduce 279 omitted - -def _reduce_280(val, _values, result) - result = @builder.call_method(nil, nil, val[0]) - - result -end - -def _reduce_281(val, _values, result) - result = @lexer.cmdarg.dup - @lexer.cmdarg.clear - - result -end - -def _reduce_282(val, _values, result) - @lexer.cmdarg = val[1] - - result = @builder.begin_keyword(val[0], val[2], val[3]) - - result -end - -def _reduce_283(val, _values, result) - result = @lexer.cmdarg.dup - @lexer.cmdarg.clear - - result -end - -def _reduce_284(val, _values, result) - @lexer.state = :expr_endarg - - result -end - -def _reduce_285(val, _values, result) - @lexer.cmdarg = val[1] - - result = @builder.begin(val[0], val[2], val[5]) - - result -end - -def _reduce_286(val, _values, result) - @lexer.state = :expr_endarg - - result -end - -def _reduce_287(val, _values, result) - result = @builder.begin(val[0], nil, val[3]) - - result -end - -def _reduce_288(val, _values, result) - result = @builder.begin(val[0], val[1], val[2]) - - result -end - -def _reduce_289(val, _values, result) - result = @builder.const_fetch(val[0], val[1], val[2]) - - result -end - -def _reduce_290(val, _values, result) - result = @builder.const_global(val[0], val[1]) - - result -end - -def _reduce_291(val, _values, result) - result = @builder.array(val[0], val[1], val[2]) - - result -end - -def _reduce_292(val, _values, result) - result = @builder.associate(val[0], val[1], val[2]) - - result -end - -def _reduce_293(val, _values, result) - result = @builder.keyword_cmd(:return, val[0]) - - result -end - -def _reduce_294(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_295(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0], val[1], [], val[2]) - - result -end - -def _reduce_296(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0]) - - result -end - -def _reduce_297(val, _values, result) - result = @builder.keyword_cmd(:defined?, val[0], - val[2], [ val[3] ], val[4]) - - result -end - -def _reduce_298(val, _values, result) - result = @builder.not_op(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_299(val, _values, result) - result = @builder.not_op(val[0], val[1], nil, val[2]) - - result -end - -def _reduce_300(val, _values, result) - method_call = @builder.call_method(nil, nil, val[0]) - - begin_t, args, body, end_t = val[1] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -# reduce 301 omitted - -def _reduce_302(val, _values, result) - begin_t, args, body, end_t = val[1] - result = @builder.block(val[0], - begin_t, args, body, end_t) - - result -end - -def _reduce_303(val, _values, result) - result = @context.dup - @context.in_lambda = true - - result -end - -def _reduce_304(val, _values, result) - lambda_call = @builder.call_lambda(val[0]) - - args, (begin_t, body, end_t) = val[2] - result = @builder.block(lambda_call, - begin_t, args, body, end_t) - - @context.in_lambda = val[1].in_lambda - - result -end - -def _reduce_305(val, _values, result) - else_t, else_ = val[4] - result = @builder.condition(val[0], val[1], val[2], - val[3], else_t, - else_, val[5]) - - result -end - -def _reduce_306(val, _values, result) - else_t, else_ = val[4] - result = @builder.condition(val[0], val[1], val[2], - else_, else_t, - val[3], val[5]) - - result -end - -def _reduce_307(val, _values, result) - @lexer.cond.push(true) - - result -end - -def _reduce_308(val, _values, result) - @lexer.cond.pop - - result -end - -def _reduce_309(val, _values, result) - result = @builder.loop(:while, val[0], val[2], val[3], - val[5], val[6]) - - result -end - -def _reduce_310(val, _values, result) - @lexer.cond.push(true) - - result -end - -def _reduce_311(val, _values, result) - @lexer.cond.pop - - result -end - -def _reduce_312(val, _values, result) - result = @builder.loop(:until, val[0], val[2], val[3], - val[5], val[6]) - - result -end - -def _reduce_313(val, _values, result) - *when_bodies, (else_t, else_body) = *val[3] - - result = @builder.case(val[0], val[1], - when_bodies, else_t, else_body, - val[4]) - - result -end - -def _reduce_314(val, _values, result) - *when_bodies, (else_t, else_body) = *val[2] - - result = @builder.case(val[0], nil, - when_bodies, else_t, else_body, - val[3]) - - result -end - -def _reduce_315(val, _values, result) - @lexer.cond.push(true) - - result -end - -def _reduce_316(val, _values, result) - @lexer.cond.pop - - result -end - -def _reduce_317(val, _values, result) - result = @builder.for(val[0], val[1], - val[2], val[4], - val[5], val[7], val[8]) - - result -end - -def _reduce_318(val, _values, result) - local_push - @context.in_class = true - - result -end - -def _reduce_319(val, _values, result) - k_class, ctx = val[0] - if @context.in_def - diagnostic :error, :class_in_def, nil, k_class - end - - lt_t, superclass = val[2] - result = @builder.def_class(k_class, val[1], - lt_t, superclass, - val[4], val[5]) - - local_pop - @context.in_class = ctx.in_class - - result -end - -def _reduce_320(val, _values, result) - @context.in_def = false - @context.in_class = false - local_push - - result -end - -def _reduce_321(val, _values, result) - k_class, ctx = val[0] - result = @builder.def_sclass(k_class, val[1], val[2], - val[5], val[6]) - - local_pop - @context.in_def = ctx.in_def - @context.in_class = ctx.in_class - - result -end - -def _reduce_322(val, _values, result) - @context.in_class = true - local_push - - result -end - -def _reduce_323(val, _values, result) - k_mod, ctx = val[0] - if @context.in_def - diagnostic :error, :module_in_def, nil, k_mod - end - - result = @builder.def_module(k_mod, val[1], - val[3], val[4]) - - local_pop - @context.in_class = ctx.in_class - - result -end - -def _reduce_324(val, _values, result) - local_push - result = context.dup - @context.in_def = true - - result -end - -def _reduce_325(val, _values, result) - result = @builder.def_method(val[0], val[1], - val[3], val[4], val[5]) - - local_pop - @context.in_def = val[2].in_def - - result -end - -def _reduce_326(val, _values, result) - @lexer.state = :expr_fname - - result -end - -def _reduce_327(val, _values, result) - local_push - result = context.dup - @context.in_def = true - - result -end - -def _reduce_328(val, _values, result) - result = @builder.def_singleton(val[0], val[1], val[2], - val[4], val[6], val[7], val[8]) - - local_pop - @context.in_def = val[5].in_def - - result -end - -def _reduce_329(val, _values, result) - result = @builder.keyword_cmd(:break, val[0]) - - result -end - -def _reduce_330(val, _values, result) - result = @builder.keyword_cmd(:next, val[0]) - - result -end - -def _reduce_331(val, _values, result) - result = @builder.keyword_cmd(:redo, val[0]) - - result -end - -def _reduce_332(val, _values, result) - result = @builder.keyword_cmd(:retry, val[0]) - - result -end - -# reduce 333 omitted - -def _reduce_334(val, _values, result) - result = [ val[0], @context.dup ] - - result -end - -def _reduce_335(val, _values, result) - result = [ val[0], @context.dup ] - - result -end - -# reduce 336 omitted - -# reduce 337 omitted - -def _reduce_338(val, _values, result) - result = val[1] - - result -end - -# reduce 339 omitted - -# reduce 340 omitted - -# reduce 341 omitted - -def _reduce_342(val, _values, result) - else_t, else_ = val[4] - result = [ val[0], - @builder.condition(val[0], val[1], val[2], - val[3], else_t, - else_, nil), - ] - - result -end - -# reduce 343 omitted - -def _reduce_344(val, _values, result) - result = val - - result -end - -# reduce 345 omitted - -# reduce 346 omitted - -def _reduce_347(val, _values, result) - result = @builder.arg(val[0]) - - result -end - -def _reduce_348(val, _values, result) - result = @builder.multi_lhs(val[0], val[1], val[2]) - - result -end - -def _reduce_349(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_350(val, _values, result) - result = val[0] << val[2] - - result -end - -# reduce 351 omitted - -def _reduce_352(val, _values, result) - result = val[0]. - push(@builder.restarg(val[2], val[3])) - - result -end - -def _reduce_353(val, _values, result) - result = val[0]. - push(@builder.restarg(val[2], val[3])). - concat(val[5]) - - result -end - -def _reduce_354(val, _values, result) - result = val[0]. - push(@builder.restarg(val[2])) - - result -end - -def _reduce_355(val, _values, result) - result = val[0]. - push(@builder.restarg(val[2])). - concat(val[4]) - - result -end - -def _reduce_356(val, _values, result) - result = [ @builder.restarg(val[0], val[1]) ] - - result -end - -def _reduce_357(val, _values, result) - result = [ @builder.restarg(val[0], val[1]), - *val[3] ] - - result -end - -def _reduce_358(val, _values, result) - result = [ @builder.restarg(val[0]) ] - - result -end - -def _reduce_359(val, _values, result) - result = [ @builder.restarg(val[0]), - *val[2] ] - - result -end - -def _reduce_360(val, _values, result) - result = val[0].concat(val[2]).concat(val[3]) - - result -end - -def _reduce_361(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_362(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_363(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_364(val, _values, result) - result = val[1] - - result -end - -def _reduce_365(val, _values, result) - result = [] - - result -end - -def _reduce_366(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_367(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[6]). - concat(val[7]) - - result -end - -def _reduce_368(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_369(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_370(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -# reduce 371 omitted - -def _reduce_372(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_373(val, _values, result) - if val[1].empty? && val[0].size == 1 - result = [@builder.procarg0(val[0][0])] - else - result = val[0].concat(val[1]) - end - - result -end - -def _reduce_374(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_375(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_376(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_377(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_378(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_379(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -# reduce 380 omitted - -def _reduce_381(val, _values, result) - result = @builder.args(nil, [], nil) - - result -end - -def _reduce_382(val, _values, result) - @lexer.state = :expr_value - - result -end - -def _reduce_383(val, _values, result) - result = @builder.args(val[0], val[1], val[2]) - - result -end - -def _reduce_384(val, _values, result) - result = @builder.args(val[0], [], val[0]) - - result -end - -def _reduce_385(val, _values, result) - result = @builder.args(val[0], val[1].concat(val[2]), val[3]) - - result -end - -def _reduce_386(val, _values, result) - result = [] - - result -end - -def _reduce_387(val, _values, result) - result = val[2] - - result -end - -def _reduce_388(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_389(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_390(val, _values, result) - @static_env.declare val[0][0] - result = @builder.shadowarg(val[0]) - - result -end - -# reduce 391 omitted - -def _reduce_392(val, _values, result) - @static_env.extend_dynamic - - result -end - -def _reduce_393(val, _values, result) - result = @lexer.cmdarg.dup - @lexer.cmdarg.clear - - result -end - -def _reduce_394(val, _values, result) - @lexer.cmdarg = val[2] - @lexer.cmdarg.lexpop - - result = [ val[1], val[3] ] - - @static_env.unextend - - result -end - -def _reduce_395(val, _values, result) - result = @builder.args(val[0], val[1].concat(val[2]), val[3]) - - result -end - -def _reduce_396(val, _values, result) - result = @builder.args(nil, val[0], nil) - - result -end - -def _reduce_397(val, _values, result) - result = @context.dup - @context.in_lambda = true - - result -end - -def _reduce_398(val, _values, result) - result = [ val[0], val[2], val[3] ] - @context.in_lambda = val[1].in_lambda - - result -end - -def _reduce_399(val, _values, result) - result = @context.dup - @context.in_lambda = true - - result -end - -def _reduce_400(val, _values, result) - result = [ val[0], val[2], val[3] ] - @context.in_lambda = val[1].in_lambda - - result -end - -def _reduce_401(val, _values, result) - @static_env.extend_dynamic - result = @context.dup - @context.in_block = true - - result -end - -def _reduce_402(val, _values, result) - result = [ val[0], val[2], val[3], val[4] ] - - @static_env.unextend - @context.in_block = val[1].in_block - - result -end - -def _reduce_403(val, _values, result) - begin_t, block_args, body, end_t = val[1] - result = @builder.block(val[0], - begin_t, block_args, body, end_t) - - result -end - -def _reduce_404(val, _values, result) - lparen_t, args, rparen_t = val[3] - result = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - result -end - -def _reduce_405(val, _values, result) - lparen_t, args, rparen_t = val[3] - method_call = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - begin_t, args, body, end_t = val[4] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_406(val, _values, result) - method_call = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - begin_t, args, body, end_t = val[4] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_407(val, _values, result) - lparen_t, args, rparen_t = val[1] - result = @builder.call_method(nil, nil, val[0], - lparen_t, args, rparen_t) - - result -end - -def _reduce_408(val, _values, result) - lparen_t, args, rparen_t = val[3] - result = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - result -end - -def _reduce_409(val, _values, result) - lparen_t, args, rparen_t = val[3] - result = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - result -end - -def _reduce_410(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2]) - - result -end - -def _reduce_411(val, _values, result) - lparen_t, args, rparen_t = val[2] - result = @builder.call_method(val[0], val[1], nil, - lparen_t, args, rparen_t) - - result -end - -def _reduce_412(val, _values, result) - lparen_t, args, rparen_t = val[2] - result = @builder.call_method(val[0], val[1], nil, - lparen_t, args, rparen_t) - - result -end - -def _reduce_413(val, _values, result) - lparen_t, args, rparen_t = val[1] - result = @builder.keyword_cmd(:super, val[0], - lparen_t, args, rparen_t) - - result -end - -def _reduce_414(val, _values, result) - result = @builder.keyword_cmd(:zsuper, val[0]) - - result -end - -def _reduce_415(val, _values, result) - result = @builder.index(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_416(val, _values, result) - @static_env.extend_dynamic - result = @context.dup - @context.in_block = true - - result -end - -def _reduce_417(val, _values, result) - result = [ val[0], val[2], val[3], val[4] ] - - @static_env.unextend - @context.in_block = val[1].in_block - - result -end - -def _reduce_418(val, _values, result) - @static_env.extend_dynamic - result = @context.dup - @context.in_block = true - - result -end - -def _reduce_419(val, _values, result) - result = [ val[0], val[2], val[3], val[4] ] - - @static_env.unextend - @context.in_block = val[1].in_block - - result -end - -def _reduce_420(val, _values, result) - result = [ @builder.when(val[0], val[1], val[2], val[3]), - *val[4] ] - - result -end - -def _reduce_421(val, _values, result) - result = [ val[0] ] - - result -end - -# reduce 422 omitted - -def _reduce_423(val, _values, result) - assoc_t, exc_var = val[2] - - if val[1] - exc_list = @builder.array(nil, val[1], nil) - end - - result = [ @builder.rescue_body(val[0], - exc_list, assoc_t, exc_var, - val[3], val[4]), - *val[5] ] - - result -end - -def _reduce_424(val, _values, result) - result = [] - - result -end - -def _reduce_425(val, _values, result) - result = [ val[0] ] - - result -end - -# reduce 426 omitted - -# reduce 427 omitted - -def _reduce_428(val, _values, result) - result = [ val[0], val[1] ] - - result -end - -# reduce 429 omitted - -def _reduce_430(val, _values, result) - result = [ val[0], val[1] ] - - result -end - -# reduce 431 omitted - -# reduce 432 omitted - -# reduce 433 omitted - -# reduce 434 omitted - -def _reduce_435(val, _values, result) - result = @builder.string_compose(nil, val[0], nil) - - result -end - -def _reduce_436(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_437(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_438(val, _values, result) - string = @builder.string_compose(val[0], val[1], val[2]) - result = @builder.dedent_string(string, @lexer.dedent_level) - - result -end - -def _reduce_439(val, _values, result) - string = @builder.string(val[0]) - result = @builder.dedent_string(string, @lexer.dedent_level) - - result -end - -def _reduce_440(val, _values, result) - result = @builder.character(val[0]) - - result -end - -def _reduce_441(val, _values, result) - string = @builder.xstring_compose(val[0], val[1], val[2]) - result = @builder.dedent_string(string, @lexer.dedent_level) - - result -end - -def _reduce_442(val, _values, result) - opts = @builder.regexp_options(val[3]) - result = @builder.regexp_compose(val[0], val[1], val[2], opts) - - result -end - -def _reduce_443(val, _values, result) - result = @builder.words_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_444(val, _values, result) - result = [] - - result -end - -def _reduce_445(val, _values, result) - result = val[0] << @builder.word(val[1]) - - result -end - -def _reduce_446(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_447(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_448(val, _values, result) - result = @builder.symbols_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_449(val, _values, result) - result = [] - - result -end - -def _reduce_450(val, _values, result) - result = val[0] << @builder.word(val[1]) - - result -end - -def _reduce_451(val, _values, result) - result = @builder.words_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_452(val, _values, result) - result = @builder.symbols_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_453(val, _values, result) - result = [] - - result -end - -def _reduce_454(val, _values, result) - result = val[0] << @builder.string_internal(val[1]) - - result -end - -def _reduce_455(val, _values, result) - result = [] - - result -end - -def _reduce_456(val, _values, result) - result = val[0] << @builder.symbol_internal(val[1]) - - result -end - -def _reduce_457(val, _values, result) - result = [] - - result -end - -def _reduce_458(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_459(val, _values, result) - result = [] - - result -end - -def _reduce_460(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_461(val, _values, result) - result = [] - - result -end - -def _reduce_462(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_463(val, _values, result) - result = @builder.string_internal(val[0]) - - result -end - -def _reduce_464(val, _values, result) - result = val[1] - - result -end - -def _reduce_465(val, _values, result) - @lexer.cond.push(false) - @lexer.cmdarg.push(false) - - result -end - -def _reduce_466(val, _values, result) - @lexer.cond.lexpop - @lexer.cmdarg.lexpop - - result = @builder.begin(val[0], val[2], val[3]) - - result -end - -def _reduce_467(val, _values, result) - result = @builder.gvar(val[0]) - - result -end - -def _reduce_468(val, _values, result) - result = @builder.ivar(val[0]) - - result -end - -def _reduce_469(val, _values, result) - result = @builder.cvar(val[0]) - - result -end - -# reduce 470 omitted - -def _reduce_471(val, _values, result) - result = @builder.symbol(val[0]) - - result -end - -def _reduce_472(val, _values, result) - result = @builder.symbol_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_473(val, _values, result) - result = val[0] - - result -end - -def _reduce_474(val, _values, result) - if @builder.respond_to? :negate - # AST builder interface compatibility - result = @builder.negate(val[0], val[1]) - else - result = @builder.unary_num(val[0], val[1]) - end - - result -end - -def _reduce_475(val, _values, result) - result = @builder.integer(val[0]) - - result -end - -def _reduce_476(val, _values, result) - result = @builder.float(val[0]) - - result -end - -def _reduce_477(val, _values, result) - result = @builder.rational(val[0]) - - result -end - -def _reduce_478(val, _values, result) - result = @builder.complex(val[0]) - - result -end - -def _reduce_479(val, _values, result) - result = @builder.ident(val[0]) - - result -end - -def _reduce_480(val, _values, result) - result = @builder.ivar(val[0]) - - result -end - -def _reduce_481(val, _values, result) - result = @builder.gvar(val[0]) - - result -end - -def _reduce_482(val, _values, result) - result = @builder.const(val[0]) - - result -end - -def _reduce_483(val, _values, result) - result = @builder.cvar(val[0]) - - result -end - -def _reduce_484(val, _values, result) - result = @builder.nil(val[0]) - - result -end - -def _reduce_485(val, _values, result) - result = @builder.self(val[0]) - - result -end - -def _reduce_486(val, _values, result) - result = @builder.true(val[0]) - - result -end - -def _reduce_487(val, _values, result) - result = @builder.false(val[0]) - - result -end - -def _reduce_488(val, _values, result) - result = @builder.__FILE__(val[0]) - - result -end - -def _reduce_489(val, _values, result) - result = @builder.__LINE__(val[0]) - - result -end - -def _reduce_490(val, _values, result) - result = @builder.__ENCODING__(val[0]) - - result -end - -def _reduce_491(val, _values, result) - result = @builder.accessible(val[0]) - - result -end - -def _reduce_492(val, _values, result) - result = @builder.accessible(val[0]) - - result -end - -def _reduce_493(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_494(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_495(val, _values, result) - result = @builder.nth_ref(val[0]) - - result -end - -def _reduce_496(val, _values, result) - result = @builder.back_ref(val[0]) - - result -end - -def _reduce_497(val, _values, result) - @lexer.state = :expr_value - - result -end - -def _reduce_498(val, _values, result) - result = [ val[0], val[2] ] - - result -end - -def _reduce_499(val, _values, result) - result = nil - - result -end - -def _reduce_500(val, _values, result) - result = @builder.args(val[0], val[1], val[2]) - - @lexer.state = :expr_value - - result -end - -def _reduce_501(val, _values, result) - result = @context.in_kwarg - @context.in_kwarg = true - - result -end - -def _reduce_502(val, _values, result) - @context.in_kwarg = val[0] - result = @builder.args(nil, val[1], nil) - - result -end - -def _reduce_503(val, _values, result) - result = val[0].concat(val[2]).concat(val[3]) - - result -end - -def _reduce_504(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_505(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_506(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_507(val, _values, result) - result = val[1] - - result -end - -def _reduce_508(val, _values, result) - result = [] - - result -end - -def _reduce_509(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_510(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[6]). - concat(val[7]) - - result -end - -def _reduce_511(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_512(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_513(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_514(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_515(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_516(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_517(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_518(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_519(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_520(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_521(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_522(val, _values, result) - result = val[0] - - result -end - -def _reduce_523(val, _values, result) - result = [] - - result -end - -def _reduce_524(val, _values, result) - diagnostic :error, :argument_const, nil, val[0] - - result -end - -def _reduce_525(val, _values, result) - diagnostic :error, :argument_ivar, nil, val[0] - - result -end - -def _reduce_526(val, _values, result) - diagnostic :error, :argument_gvar, nil, val[0] - - result -end - -def _reduce_527(val, _values, result) - diagnostic :error, :argument_cvar, nil, val[0] - - result -end - -# reduce 528 omitted - -def _reduce_529(val, _values, result) - @static_env.declare val[0][0] - - result = val[0] - - result -end - -def _reduce_530(val, _values, result) - result = val[0] - - result -end - -def _reduce_531(val, _values, result) - result = @builder.arg(val[0]) - - result -end - -def _reduce_532(val, _values, result) - result = @builder.multi_lhs(val[0], val[1], val[2]) - - result -end - -def _reduce_533(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_534(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_535(val, _values, result) - check_kwarg_name(val[0]) - - @static_env.declare val[0][0] - - result = val[0] - - result -end - -def _reduce_536(val, _values, result) - result = @builder.kwoptarg(val[0], val[1]) - - result -end - -def _reduce_537(val, _values, result) - result = @builder.kwarg(val[0]) - - result -end - -def _reduce_538(val, _values, result) - result = @builder.kwoptarg(val[0], val[1]) - - result -end - -def _reduce_539(val, _values, result) - result = @builder.kwarg(val[0]) - - result -end - -def _reduce_540(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_541(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_542(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_543(val, _values, result) - result = val[0] << val[2] - - result -end - -# reduce 544 omitted - -# reduce 545 omitted - -def _reduce_546(val, _values, result) - @static_env.declare val[1][0] - - result = [ @builder.kwrestarg(val[0], val[1]) ] - - result -end - -def _reduce_547(val, _values, result) - result = [ @builder.kwrestarg(val[0]) ] - - result -end - -def _reduce_548(val, _values, result) - result = @builder.optarg(val[0], val[1], val[2]) - - result -end - -def _reduce_549(val, _values, result) - result = @builder.optarg(val[0], val[1], val[2]) - - result -end - -def _reduce_550(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_551(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_552(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_553(val, _values, result) - result = val[0] << val[2] - - result -end - -# reduce 554 omitted - -# reduce 555 omitted - -def _reduce_556(val, _values, result) - @static_env.declare val[1][0] - - result = [ @builder.restarg(val[0], val[1]) ] - - result -end - -def _reduce_557(val, _values, result) - result = [ @builder.restarg(val[0]) ] - - result -end - -# reduce 558 omitted - -# reduce 559 omitted - -def _reduce_560(val, _values, result) - @static_env.declare val[1][0] - - result = @builder.blockarg(val[0], val[1]) - - result -end - -def _reduce_561(val, _values, result) - result = [ val[1] ] - - result -end - -def _reduce_562(val, _values, result) - result = [] - - result -end - -# reduce 563 omitted - -def _reduce_564(val, _values, result) - result = val[1] - - result -end - -def _reduce_565(val, _values, result) - result = [] - - result -end - -# reduce 566 omitted - -def _reduce_567(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_568(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_569(val, _values, result) - result = @builder.pair(val[0], val[1], val[2]) - - result -end - -def _reduce_570(val, _values, result) - result = @builder.pair_keyword(val[0], val[1]) - - result -end - -def _reduce_571(val, _values, result) - result = @builder.pair_quoted(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_572(val, _values, result) - result = @builder.kwsplat(val[0], val[1]) - - result -end - -# reduce 573 omitted - -# reduce 574 omitted - -# reduce 575 omitted - -# reduce 576 omitted - -# reduce 577 omitted - -# reduce 578 omitted - -# reduce 579 omitted - -# reduce 580 omitted - -# reduce 581 omitted - -# reduce 582 omitted - -# reduce 583 omitted - -# reduce 584 omitted - -def _reduce_585(val, _values, result) - result = [:dot, val[0][1]] - - result -end - -def _reduce_586(val, _values, result) - result = [:anddot, val[0][1]] - - result -end - -# reduce 587 omitted - -# reduce 588 omitted - -# reduce 589 omitted - -# reduce 590 omitted - -def _reduce_591(val, _values, result) - result = val[1] - - result -end - -def _reduce_592(val, _values, result) - result = val[1] - - result -end - -# reduce 593 omitted - -# reduce 594 omitted - -# reduce 595 omitted - -def _reduce_596(val, _values, result) - yyerrok - - result -end - -# reduce 597 omitted - -# reduce 598 omitted - -# reduce 599 omitted - -def _reduce_600(val, _values, result) - result = nil - - result -end - -def _reduce_none(val, _values, result) - val[0] -end - - end # class Ruby23 -end # module Parser diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ruby24.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ruby24.rb deleted file mode 100644 index 0d9379da..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ruby24.rb +++ /dev/null @@ -1,10454 +0,0 @@ -# -*- encoding:utf-8; warn-indent:false; frozen_string_literal: true -*- -# -# DO NOT MODIFY!!!! -# This file is automatically generated by Racc 1.7.3 -# from Racc grammar file "ruby24.y". -# - -require 'racc/parser.rb' - - -require 'parser' - -module Parser - class Ruby24 < Parser::Base - - - def version - 24 - end - - def default_encoding - Encoding::UTF_8 - end - - def local_push - @static_env.extend_static - @lexer.cmdarg.push(false) - @lexer.cond.push(false) - end - - def local_pop - @static_env.unextend - @lexer.cmdarg.pop - @lexer.cond.pop - end -##### State transition tables begin ### - -racc_action_table = [ - -485, 211, 212, 211, 212, 219, -99, -485, -485, -485, - 111, 545, -485, -485, -485, 217, -485, 272, 221, 585, - 774, 774, 265, 545, -485, 587, -485, -485, -485, 272, - 557, 272, -499, 123, 558, -100, -485, -485, 545, -485, - -485, -485, -485, -485, 545, 545, -99, -100, -107, -107, - -85, -106, -98, 208, -106, 773, 773, 209, 272, 222, - -71, 535, -107, 210, 534, -102, -485, -485, -485, -485, - -485, -485, -485, -485, -485, -485, -485, -485, -485, -485, - 218, 267, -485, -485, -485, 584, -485, -485, 701, -99, - -485, 586, -104, -485, -485, 222, -485, 222, -485, 787, - -485, 551, -485, -485, 271, -485, -485, -485, -485, -485, - -102, -485, -488, -485, -104, -90, 271, 870, 271, -488, - -488, -488, 267, -103, -488, -488, -488, -485, -488, 115, - -485, -485, -485, -485, 114, -485, -488, -485, -488, -488, - -488, 115, -485, -485, -91, 271, 114, -93, -488, -488, - -105, -488, -488, -488, -488, -488, 115, -101, -98, 823, - -97, 114, 115, 115, -99, -100, -107, 114, 114, -99, - -100, -107, -106, 701, -93, -103, -101, -106, -488, -488, - -488, -488, -488, -488, -488, -488, -488, -488, -488, -488, - -488, -488, 115, 213, -488, -488, -488, 114, -488, -488, - -582, -95, -488, 261, -95, -488, -488, 701, -488, -105, - -488, 115, -488, -93, -488, -488, 114, -488, -488, -488, - -488, -488, -290, -488, -500, -488, 869, -583, -102, -290, - -290, -290, -104, -102, 320, -290, -290, -104, -290, -488, - -582, -103, -488, -488, -488, -488, -103, -488, 321, -488, - 211, 212, 452, -93, -488, -488, -93, 81, -290, -290, - -92, -290, -290, -290, -290, -290, -93, 222, -105, 82, - -95, -485, -94, -105, -583, -101, 389, 115, -485, 83, - -101, -100, 114, 219, -94, -92, 211, 212, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, 402, 523, -290, -290, -290, -488, 610, -107, - -95, 115, -290, -95, -488, -290, 114, 451, -96, 453, - -290, 454, -290, -95, -290, -290, -92, -290, -290, -290, - -290, -290, 572, -290, -586, -290, -485, -582, -94, 221, - -107, -586, -586, -586, 222, 485, 115, -586, -586, -290, - -586, 114, -290, -290, 494, -96, 399, -290, 115, -586, - -106, 401, 400, 114, -290, -105, -92, -579, -499, -92, - -586, -586, -488, -586, -586, -586, -586, -586, -94, -92, - 115, -94, 211, 212, 496, 114, 678, 760, 675, 674, - 673, -94, 676, 93, 94, 498, 574, 573, 570, 506, - -586, -586, -586, -586, -586, -586, -586, -586, -586, -586, - -586, -586, -586, -586, -70, -90, -586, -586, -586, -485, - 611, 93, 94, 572, -586, -99, -485, -586, 115, 761, - 222, -579, -586, 114, -586, -485, -586, -586, -500, -586, - -586, -586, -586, -586, -102, -586, -586, -586, 572, 678, - 572, 675, 674, 673, -579, 676, -495, 115, 509, -580, - 605, -586, 114, -495, -586, -586, -586, -94, 888, -586, - 510, 95, 96, -586, -586, -586, -586, -103, -586, -586, - -586, 517, -586, 276, -485, -91, -104, 574, 573, 570, - -494, -586, -586, -586, -586, -100, 222, -494, 535, 95, - 96, 537, -586, -586, 638, -586, -586, -586, -586, -586, - 267, -488, 574, 573, 574, 573, 572, -102, -488, 572, - 520, -495, 732, -580, 734, 572, 524, -488, 242, 606, - 222, 986, -586, -586, -586, -586, -586, -586, -586, -586, - -586, -586, -586, -586, -586, -586, -580, 538, -586, -586, - -586, 535, 762, -586, 537, -494, -586, 572, 523, -586, - -586, 572, -586, -496, -586, 539, -586, 605, -586, -586, - -496, -586, -586, -586, -586, -586, -488, -586, -586, -586, - 574, 573, 575, 574, 573, 577, -104, -493, 498, 574, - 573, 579, 606, -586, -493, 551, -586, -586, -586, -586, - -490, -586, 391, -586, -290, -97, 842, -490, -586, -103, - 555, -290, -290, -290, -93, -106, -290, -290, -290, 556, - -290, 574, 573, 583, -102, 574, 573, 588, -496, 564, - -290, -290, -290, 535, 222, 747, 537, 1003, 747, -95, - -290, -290, 589, -290, -290, -290, -290, -290, 592, -104, - -263, 217, -493, -334, -491, -492, 211, 212, 216, 217, - -334, -491, -492, -101, 594, -490, 265, 214, 595, -334, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, 599, -92, -290, -290, -290, 222, - 763, -290, -101, 603, -290, -101, 604, -290, -290, 267, - -290, 615, -290, 242, -290, 242, -290, -290, 242, -290, - -290, -290, -290, -290, -290, -290, 218, -290, -334, -491, - -492, -290, -290, -290, 218, 818, 787, -290, -290, 242, - -290, -290, 242, 242, -290, -290, -290, -290, 222, -290, - 239, -290, -586, 222, 241, 240, -290, -105, 256, 257, - -290, -290, 222, -290, -290, -290, -290, -290, -85, 217, - 694, 693, 642, -497, 239, 222, 449, 528, 241, 240, - -497, 237, 238, 818, 787, 450, 653, 658, 659, -497, - -290, -290, -290, -290, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -586, -498, -290, -290, -290, 222, - 610, -586, -498, 661, -290, 697, -582, -290, 551, 704, - -586, -498, -290, 721, -290, 731, -290, -290, 735, -290, - -290, -290, -290, -290, 218, -290, -586, -290, -497, -586, - 736, -264, 748, -586, -586, -586, 683, 485, 242, -586, - -586, -290, -586, 485, -290, -290, 686, -290, 217, -290, - 222, -586, 765, 766, 261, 516, -290, -105, 771, -586, - -498, 776, -586, -586, 514, -586, -586, -586, -586, -586, - 239, -281, 496, 498, 241, 240, 780, 653, -281, 694, - 693, 222, 267, 267, 687, 726, 727, -281, 653, 728, - 109, 110, -586, -586, -586, -586, -586, -586, -586, -586, - -586, -586, -586, -586, -586, -586, 242, 787, -586, -586, - -586, 217, 611, 218, 217, 795, -586, 798, 526, -586, - 799, 554, 801, 803, -586, 805, -586, 450, -586, -586, - 552, -586, -586, -586, -586, -586, -281, -586, -586, -586, - 678, 813, 675, 674, 673, 683, 676, 217, 118, 119, - 120, 121, 122, -586, 560, 686, -586, -586, -415, -586, - 814, -586, 815, 562, 787, -415, -415, -415, -586, -103, - -415, -415, -415, 822, -415, 222, 218, 681, 222, 218, - 831, 242, -265, -415, -415, -415, 691, 690, 694, 693, - 222, 841, 845, 687, -415, -415, 653, -415, -415, -415, - -415, -415, 678, 862, 675, 674, 673, 217, 676, -263, - 866, 222, 218, 239, 598, 886, 222, 241, 240, 222, - 237, 238, 890, 596, -415, -415, -415, -415, -415, -415, - -415, -415, -415, -415, -415, -415, -415, -415, 892, 807, - -415, -415, -415, 898, 901, -415, 222, 267, -415, 905, - -266, -415, -415, 907, -415, 798, -415, 910, -415, 912, - -415, -415, 914, -415, -415, -415, -415, -415, -297, -415, - -415, -415, 218, 916, 222, -297, -297, -297, 918, 919, - -297, -297, -297, -291, -297, -415, 932, 798, -415, -415, - -291, -415, 934, -415, -297, -297, 936, 938, 940, -291, - -415, 940, 222, 946, -297, -297, 949, -297, -297, -297, - -297, -297, 950, 955, 721, -291, 966, -290, 973, 978, - 988, 798, -291, 993, -290, 995, 997, 999, 999, -583, - 658, -291, 1012, -290, -297, -297, -297, -297, -297, -297, - -297, -297, -297, -297, -297, -297, -297, -297, -291, 1013, - -297, -297, -297, 1014, 940, -297, 940, 276, -297, 940, - 1019, -297, -297, 988, -297, 1022, -297, 1023, -297, -583, - -297, -297, -582, -297, -297, -297, -297, -297, -282, -297, - -291, -297, -290, 222, 988, -282, -282, -282, 1032, 999, - -282, -282, -282, 217, -282, -297, 999, 999, -297, -297, - 972, -297, 940, -297, -282, -282, -282, 988, 999, 562, - -297, nil, nil, nil, -282, -282, nil, -282, -282, -282, - -282, -282, nil, -290, nil, 217, nil, 217, nil, nil, - -290, nil, 977, nil, 972, -583, nil, nil, nil, -290, - nil, 975, nil, 562, -282, -282, -282, -282, -282, -282, - -282, -282, -282, -282, -282, -282, -282, -282, 218, 683, - -282, -282, -282, nil, nil, -282, nil, nil, -282, 686, - nil, -282, -282, nil, -282, nil, -282, nil, -282, nil, - -282, -282, nil, -282, -282, -282, -282, -282, -290, -282, - 218, -282, 218, 969, nil, 675, 674, 673, nil, 676, - nil, nil, 694, 693, nil, -282, 242, 687, -282, -282, - -282, -282, nil, -282, -246, -282, nil, nil, nil, nil, - -282, -246, -246, -246, nil, nil, -246, -246, -246, 678, - -246, 675, 674, 673, nil, 676, nil, nil, 239, -246, - -246, -246, 241, 240, nil, 237, 238, nil, nil, nil, - -246, -246, nil, -246, -246, -246, -246, -246, 678, nil, - 675, 674, 673, nil, 676, 678, 807, 675, 674, 673, - 969, 676, 675, 674, 673, 810, 676, nil, nil, nil, - -246, -246, -246, -246, -246, -246, -246, -246, -246, -246, - -246, -246, -246, -246, nil, 807, -246, -246, -246, nil, - nil, -246, 807, 267, -246, nil, nil, -246, -246, nil, - -246, 810, -246, nil, -246, nil, -246, -246, nil, -246, - -246, -246, -246, -246, nil, -246, -246, -246, 678, nil, - 675, 674, 673, 683, 676, 118, 119, 120, 121, 122, - nil, -246, nil, 686, -246, -246, -587, -246, nil, -246, - nil, nil, nil, -587, -587, -587, -246, nil, -587, -587, - -587, nil, -587, 242, 678, 681, 675, 674, 673, nil, - 676, -587, -587, -587, -587, nil, 694, 693, nil, 256, - 257, 687, -587, -587, nil, -587, -587, -587, -587, -587, - 678, nil, 675, 674, 673, 239, 676, 245, nil, 241, - 240, 807, 237, 238, nil, nil, 243, nil, 244, nil, - 945, nil, -587, -587, -587, -587, -587, -587, -587, -587, - -587, -587, -587, -587, -587, -587, nil, 807, -587, -587, - -587, nil, nil, -587, nil, nil, -587, nil, nil, -587, - -587, nil, -587, nil, -587, nil, -587, nil, -587, -587, - nil, -587, -587, -587, -587, -587, nil, -587, -587, -587, - nil, nil, 678, nil, 675, 674, 673, nil, 676, nil, - nil, nil, nil, -587, nil, nil, -587, -587, -587, -587, - nil, -587, -588, -587, nil, nil, nil, nil, -587, -588, - -588, -588, nil, nil, -588, -588, -588, 242, -588, 807, - 118, 119, 120, 121, 122, nil, nil, -588, -588, -588, - -588, nil, nil, 256, 257, nil, nil, nil, -588, -588, - nil, -588, -588, -588, -588, -588, nil, nil, nil, 239, - nil, 245, nil, 241, 240, nil, 237, 238, nil, nil, - 243, nil, 244, 118, 119, 120, 121, 122, -588, -588, - -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, - -588, -588, nil, nil, -588, -588, -588, nil, nil, -588, - nil, nil, -588, nil, nil, -588, -588, nil, -588, nil, - -588, nil, -588, nil, -588, -588, nil, -588, -588, -588, - -588, -588, nil, -588, -588, -588, nil, nil, 678, nil, - 675, 674, 673, nil, 676, nil, nil, nil, nil, -588, - nil, nil, -588, -588, -588, -588, nil, -588, -246, -588, - nil, nil, nil, nil, -588, -246, -246, -246, nil, nil, - -246, -246, -246, 242, -246, 807, nil, nil, nil, nil, - nil, nil, nil, -246, -246, nil, nil, nil, nil, 256, - 257, nil, nil, nil, -246, -246, nil, -246, -246, -246, - -246, -246, nil, nil, nil, 239, nil, 245, nil, 241, - 240, nil, 237, 238, nil, nil, nil, 242, 246, 251, - 252, 253, 248, 250, 258, 259, 254, 255, nil, 235, - 236, nil, nil, 256, 257, -246, nil, nil, nil, nil, - nil, nil, -246, nil, nil, nil, nil, 267, -246, 239, - nil, 245, nil, 241, 240, nil, 237, 238, 249, 247, - 243, nil, 244, nil, nil, nil, nil, nil, nil, nil, - -246, -246, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 260, nil, nil, -246, nil, nil, -246, nil, - nil, nil, nil, -246, 5, 74, 75, 71, 9, 57, - -246, nil, nil, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 30, 31, 72, 73, nil, nil, nil, - nil, nil, 29, 28, 27, 103, 102, 104, 105, nil, - nil, 19, nil, nil, nil, nil, 600, 8, 45, 7, - 10, 107, 106, 108, 97, 56, 99, 98, 100, nil, - 101, 109, 110, nil, 93, 94, 42, 43, 41, 242, - 246, 251, 252, 253, 248, 250, 258, 259, 254, 255, - nil, 235, 236, nil, nil, 256, 257, nil, 40, nil, - nil, 33, nil, nil, 58, 59, nil, nil, 60, nil, - 35, 239, nil, 245, 44, 241, 240, nil, 237, 238, - 249, 247, 243, 20, 244, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, 260, nil, -238, nil, nil, 62, - nil, 83, 95, 96, 294, 74, 75, 71, 9, 57, - nil, nil, nil, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 30, 31, 72, 73, nil, nil, nil, - nil, nil, 29, 28, 27, 103, 102, 104, 105, nil, - nil, 19, nil, nil, nil, nil, 600, 8, 45, 296, - 10, 107, 106, 108, 97, 56, 99, 98, 100, nil, - 101, 109, 110, nil, 93, 94, 42, 43, 41, 242, - 246, 251, 252, 253, 248, 250, 258, 259, 254, 255, - nil, 235, 236, nil, nil, 256, 257, nil, 40, nil, - nil, 298, nil, nil, 58, 59, nil, nil, 60, nil, - 35, 239, nil, 245, 44, 241, 240, nil, 237, 238, - 249, 247, 243, 20, 244, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, 260, nil, nil, nil, nil, 62, - nil, 83, 95, 96, 5, 74, 75, 71, 9, 57, - nil, nil, nil, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 30, 31, 72, 73, nil, nil, nil, - nil, nil, 29, 28, 27, 103, 102, 104, 105, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 45, 7, - 10, 107, 106, 108, 97, 56, 99, 98, 100, nil, - 101, 109, 110, nil, 93, 94, 42, 43, 41, 242, - 246, 251, 252, 253, 248, 250, 258, 259, 254, 255, - nil, 235, 236, nil, nil, 256, 257, nil, 40, nil, - nil, 33, nil, nil, 58, 59, nil, nil, 60, nil, - 35, 239, nil, 245, 44, 241, 240, nil, 237, 238, - 249, 247, 243, 20, 244, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, 260, nil, nil, nil, nil, 62, - nil, 83, 95, 96, 294, 74, 75, 71, 9, 57, - nil, nil, nil, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 30, 31, 72, 73, nil, nil, nil, - nil, nil, 29, 28, 27, 103, 102, 104, 105, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 45, 296, - 10, 107, 106, 108, 97, 56, 99, 98, 100, nil, - 101, 109, 110, nil, 93, 94, 42, 43, 41, 242, - 246, 251, 252, 253, 248, 250, 258, 259, 254, 255, - nil, 235, 236, nil, nil, 256, 257, nil, 40, nil, - nil, 33, nil, nil, 58, 59, nil, nil, 60, nil, - 35, 239, nil, 245, 44, 241, 240, nil, 237, 238, - 249, 247, 243, 20, 244, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, 222, 260, nil, nil, nil, nil, 62, - nil, 83, 95, 96, 294, 74, 75, 71, 9, 57, - nil, nil, nil, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 30, 31, 72, 73, nil, nil, nil, - nil, nil, 29, 28, 27, 103, 102, 104, 105, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 45, 296, - 10, 107, 106, 108, 97, 56, 99, 98, 100, nil, - 101, 109, 110, nil, 93, 94, 42, 43, 41, 242, - 246, 251, 252, 253, 248, 250, 258, 259, 254, 255, - nil, 235, 236, nil, nil, 256, 257, nil, 40, nil, - nil, 33, nil, nil, 58, 59, nil, nil, 60, nil, - 35, 239, nil, 245, 44, 241, 240, nil, 237, 238, - 249, 247, 243, 20, 244, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, 260, nil, nil, nil, nil, 62, - nil, 83, 95, 96, 294, 74, 75, 71, 9, 57, - nil, nil, nil, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 30, 31, 72, 73, nil, nil, nil, - nil, nil, 29, 28, 27, 103, 102, 104, 105, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 45, 296, - 10, 107, 106, 108, 97, 56, 99, 98, 100, nil, - 101, 109, 110, nil, 93, 94, 42, 43, 41, 242, - 246, 251, 252, 253, 248, 250, 258, 259, 254, 255, - nil, 235, 236, nil, nil, 256, 257, nil, 40, nil, - nil, 298, nil, nil, 58, 59, nil, nil, 60, nil, - 35, 239, nil, 245, 44, 241, 240, nil, 237, 238, - 249, 247, 243, 20, 244, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, 260, nil, nil, nil, nil, 62, - nil, 83, 95, 96, 294, 74, 75, 71, 9, 57, - nil, nil, nil, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 30, 31, 72, 73, nil, nil, nil, - nil, nil, 29, 28, 27, 103, 102, 104, 105, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 45, 296, - 10, 107, 106, 108, 97, 56, 99, 98, 100, nil, - 101, 109, 110, nil, 93, 94, 42, 43, 41, 242, - 246, 251, 252, 253, 248, 250, 258, 259, 254, 255, - nil, 235, 236, nil, nil, 256, 257, nil, 40, nil, - nil, 298, nil, nil, 58, 59, nil, nil, 60, nil, - 35, 239, nil, 245, 44, 241, 240, nil, 237, 238, - 249, 247, 243, 20, 244, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, 260, nil, nil, nil, nil, 62, - nil, 83, 95, 96, 294, 74, 75, 71, 9, 57, - nil, nil, nil, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 30, 31, 72, 73, nil, nil, nil, - nil, nil, 29, 28, 27, 103, 102, 104, 105, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 45, 296, - 10, 107, 106, 108, 97, 56, 99, 98, 100, nil, - 101, 109, 110, nil, 93, 94, 42, 43, 41, 242, - 246, 251, 252, 253, 248, 250, 258, 259, 254, 255, - nil, -607, -607, nil, nil, 256, 257, nil, 40, nil, - nil, 33, nil, nil, 58, 59, nil, nil, 60, nil, - 35, 239, nil, 245, 44, 241, 240, nil, 237, 238, - 249, 247, 243, 20, 244, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, nil, nil, nil, 62, - nil, 83, 95, 96, 5, 74, 75, 71, 9, 57, - nil, nil, nil, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 30, 31, 72, 73, nil, nil, nil, - nil, nil, 29, 28, 27, 103, 102, 104, 105, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 45, 7, - 10, 107, 106, 108, 97, 56, 99, 98, 100, nil, - 101, 109, 110, nil, 93, 94, 42, 43, 41, 242, - 246, 251, 252, 253, 248, 250, 258, 259, 254, 255, - nil, -607, -607, nil, nil, 256, 257, nil, 40, nil, - nil, 33, nil, nil, 58, 59, nil, nil, 60, nil, - 35, 239, nil, 245, 44, 241, 240, nil, 237, 238, - 249, 247, 243, 20, 244, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, nil, nil, nil, 62, - nil, 83, 95, 96, 294, 74, 75, 71, 9, 57, - nil, nil, nil, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 30, 31, 72, 73, nil, nil, nil, - nil, nil, 29, 28, 27, 103, 102, 104, 105, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 45, 296, - 10, 107, 106, 108, 97, 56, 99, 98, 100, nil, - 101, 109, 110, nil, 93, 94, 42, 43, 41, 242, - -607, -607, -607, -607, 248, 250, nil, nil, -607, -607, - nil, nil, nil, nil, nil, 256, 257, nil, 40, nil, - nil, 33, nil, nil, 58, 59, nil, nil, 60, nil, - 35, 239, nil, 245, 44, 241, 240, nil, 237, 238, - 249, 247, 243, 20, 244, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, nil, nil, nil, 62, - nil, 83, 95, 96, 294, 74, 75, 71, 9, 57, - nil, nil, nil, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 30, 31, 72, 73, nil, nil, nil, - nil, nil, 29, 28, 27, 103, 102, 104, 105, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 45, 296, - 10, 107, 106, 108, 97, 56, 99, 98, 100, nil, - 101, 109, 110, nil, 93, 94, 42, 43, 41, 242, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 256, 257, nil, 40, nil, - nil, 33, nil, nil, 58, 59, nil, nil, 60, nil, - 35, 239, nil, 245, 44, 241, 240, nil, 237, 238, - nil, nil, 243, 20, 244, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, nil, nil, nil, 62, - nil, 83, 95, 96, 294, 74, 75, 71, 9, 57, - nil, nil, nil, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 30, 31, 72, 73, nil, nil, nil, - nil, nil, 29, 28, 27, 103, 102, 104, 105, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 45, 296, - 10, 107, 106, 108, 97, 56, 99, 98, 100, nil, - 101, 109, 110, nil, 93, 94, 42, 43, 41, 242, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 256, 257, nil, 40, nil, - nil, 33, nil, nil, 58, 59, nil, nil, 60, nil, - 35, 239, nil, 245, 44, 241, 240, nil, 237, 238, - nil, nil, 243, 20, 244, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, nil, nil, nil, 62, - nil, 83, 95, 96, 294, 74, 75, 71, 9, 57, - nil, nil, nil, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 30, 31, 72, 73, nil, nil, nil, - nil, nil, 29, 28, 27, 103, 102, 104, 105, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 45, 296, - 10, 107, 106, 108, 97, 56, 99, 98, 100, nil, - 101, 109, 110, nil, 93, 94, 42, 43, 41, 242, - -607, -607, -607, -607, 248, 250, nil, nil, -607, -607, - nil, nil, nil, nil, nil, 256, 257, nil, 40, nil, - nil, 33, nil, nil, 58, 59, nil, nil, 60, nil, - 35, 239, nil, 245, 44, 241, 240, nil, 237, 238, - 249, 247, 243, 20, 244, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, nil, nil, nil, 62, - nil, 83, 95, 96, 294, 74, 75, 71, 9, 57, - nil, nil, nil, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 30, 31, 72, 73, nil, nil, nil, - nil, nil, 29, 28, 27, 103, 102, 104, 105, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 45, 296, - 10, 107, 106, 108, 97, 56, 99, 98, 100, nil, - 101, 109, 110, nil, 93, 94, 42, 43, 41, 242, - -607, -607, -607, -607, 248, 250, nil, nil, -607, -607, - nil, nil, nil, nil, nil, 256, 257, nil, 40, nil, - nil, 33, nil, nil, 58, 59, nil, nil, 60, nil, - 35, 239, nil, 245, 44, 241, 240, nil, 237, 238, - 249, 247, 243, 20, 244, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, nil, nil, nil, 62, - nil, 83, 95, 96, 294, 74, 75, 71, 9, 57, - nil, nil, nil, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 30, 31, 72, 73, nil, nil, nil, - nil, nil, 29, 28, 27, 103, 102, 104, 105, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 45, 296, - 10, 107, 106, 108, 97, 56, 99, 98, 100, nil, - 101, 109, 110, nil, 93, 94, 42, 43, 41, 242, - -607, -607, -607, -607, 248, 250, nil, nil, -607, -607, - nil, nil, nil, nil, nil, 256, 257, nil, 40, nil, - nil, 33, nil, nil, 58, 59, nil, nil, 60, nil, - 35, 239, nil, 245, 44, 241, 240, nil, 237, 238, - 249, 247, 243, 20, 244, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, nil, nil, nil, 62, - nil, 83, 95, 96, 294, 74, 75, 71, 9, 57, - nil, nil, nil, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 30, 31, 72, 73, nil, nil, nil, - nil, nil, 29, 28, 27, 103, 102, 104, 105, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 45, 296, - 10, 107, 106, 108, 97, 56, 99, 98, 100, nil, - 101, 109, 110, nil, 93, 94, 42, 43, 41, 242, - -607, -607, -607, -607, 248, 250, nil, nil, -607, -607, - nil, nil, nil, nil, nil, 256, 257, nil, 40, nil, - nil, 33, nil, nil, 58, 59, nil, nil, 60, nil, - 35, 239, nil, 245, 44, 241, 240, nil, 237, 238, - 249, 247, 243, 20, 244, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, nil, nil, nil, 62, - nil, 83, 95, 96, 294, 74, 75, 71, 9, 57, - nil, nil, nil, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 30, 31, 72, 73, nil, nil, nil, - nil, nil, 29, 28, 27, 103, 102, 104, 105, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 45, 296, - 10, 107, 106, 108, 97, 56, 99, 98, 100, nil, - 101, 109, 110, nil, 93, 94, 42, 43, 41, 242, - -607, -607, -607, -607, 248, 250, nil, nil, -607, -607, - nil, nil, nil, nil, nil, 256, 257, nil, 40, nil, - nil, 33, nil, nil, 58, 59, nil, nil, 60, nil, - 35, 239, nil, 245, 44, 241, 240, nil, 237, 238, - 249, 247, 243, 20, 244, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, nil, nil, nil, 62, - nil, 83, 95, 96, 294, 74, 75, 71, 9, 57, - nil, nil, nil, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 30, 31, 72, 73, nil, nil, nil, - nil, nil, 29, 28, 27, 103, 102, 104, 105, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 45, 296, - 10, 107, 106, 108, 97, 56, 99, 98, 100, nil, - 101, 109, 110, nil, 93, 94, 42, 43, 41, 242, - 246, 251, 252, 253, 248, 250, nil, nil, 254, 255, - nil, nil, nil, nil, nil, 256, 257, nil, 40, nil, - nil, 33, nil, nil, 58, 59, nil, nil, 60, nil, - 35, 239, nil, 245, 44, 241, 240, nil, 237, 238, - 249, 247, 243, 20, 244, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, nil, nil, nil, 62, - nil, 83, 95, 96, 294, 74, 75, 71, 9, 57, - nil, nil, nil, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 30, 31, 72, 73, nil, nil, nil, - nil, nil, 29, 28, 27, 103, 102, 104, 105, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 45, 296, - 10, 107, 106, 108, 97, 56, 99, 98, 100, nil, - 101, 109, 110, nil, 93, 94, 42, 43, 41, 242, - 246, 251, 252, 253, 248, 250, 258, nil, 254, 255, - nil, nil, nil, nil, nil, 256, 257, nil, 40, nil, - nil, 33, nil, nil, 58, 59, nil, nil, 60, nil, - 35, 239, nil, 245, 44, 241, 240, nil, 237, 238, - 249, 247, 243, 20, 244, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, nil, nil, nil, 62, - nil, 83, 95, 96, 294, 74, 75, 71, 9, 57, - nil, nil, nil, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 30, 31, 72, 73, nil, nil, nil, - nil, nil, 29, 28, 27, 103, 102, 104, 105, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 45, 296, - 10, 107, 106, 108, 97, 56, 99, 98, 100, nil, - 101, 109, 110, nil, 93, 94, 42, 43, 41, 242, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 256, 257, nil, 40, nil, - nil, 33, nil, nil, 58, 59, nil, nil, 60, nil, - 35, 239, nil, 245, 44, 241, 240, nil, 237, 238, - nil, nil, nil, 20, nil, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, nil, nil, nil, 62, - nil, 83, 95, 96, 294, 74, 75, 71, 9, 57, - nil, nil, nil, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 30, 31, 72, 73, nil, nil, nil, - nil, nil, 29, 28, 27, 103, 102, 104, 105, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 45, 296, - 10, 107, 106, 108, 97, 56, 99, 98, 100, nil, - 101, 109, 110, nil, 93, 94, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 40, nil, - nil, 33, nil, nil, 58, 59, nil, nil, 60, nil, - 35, nil, nil, nil, 44, nil, nil, nil, nil, nil, - nil, nil, nil, 20, nil, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, nil, nil, nil, 62, - nil, 83, 95, 96, 294, 74, 75, 71, 9, 57, - nil, nil, nil, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 30, 31, 72, 73, nil, nil, nil, - nil, nil, 29, 28, 27, 103, 102, 104, 105, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 45, 296, - 10, 107, 106, 108, 97, 56, 99, 98, 100, nil, - 101, 109, 110, nil, 93, 94, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 40, nil, - nil, 33, nil, nil, 58, 59, nil, nil, 60, nil, - 35, nil, nil, nil, 44, nil, nil, nil, nil, nil, - nil, nil, nil, 20, nil, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, nil, nil, nil, 62, - nil, 83, 95, 96, 294, 74, 75, 71, 9, 57, - nil, nil, nil, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 30, 31, 72, 73, nil, nil, nil, - nil, nil, 29, 28, 27, 103, 102, 104, 105, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 45, 296, - 10, 107, 106, 108, 97, 56, 99, 98, 100, nil, - 101, 109, 110, nil, 93, 94, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 40, nil, - nil, 33, nil, nil, 58, 59, nil, nil, 60, nil, - 35, nil, nil, nil, 44, nil, nil, nil, nil, nil, - nil, nil, nil, 20, nil, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, nil, nil, nil, 62, - nil, 83, 95, 96, 294, 74, 75, 71, 9, 57, - nil, nil, nil, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 30, 31, 72, 73, nil, nil, nil, - nil, nil, 29, 28, 27, 103, 102, 104, 105, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 45, 296, - 10, 107, 106, 108, 97, 56, 99, 98, 100, nil, - 101, 109, 110, nil, 93, 94, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 40, nil, - nil, 33, nil, nil, 58, 59, nil, nil, 60, nil, - 35, nil, nil, nil, 44, nil, nil, nil, nil, nil, - nil, nil, nil, 20, nil, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, nil, nil, nil, 62, - nil, 83, 95, 96, 294, 74, 75, 71, 9, 57, - nil, nil, nil, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 30, 31, 72, 73, nil, nil, nil, - nil, nil, 29, 28, 27, 103, 102, 104, 105, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 45, 296, - 10, 107, 106, 108, 97, 56, 99, 98, 100, nil, - 101, 109, 110, nil, 93, 94, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 40, nil, - nil, 33, nil, nil, 58, 59, nil, nil, 60, nil, - 35, nil, nil, nil, 44, nil, nil, nil, nil, nil, - nil, nil, nil, 20, nil, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, nil, nil, nil, 62, - nil, 83, 95, 96, 294, 74, 75, 71, 9, 57, - nil, nil, nil, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 30, 31, 72, 73, nil, nil, nil, - nil, nil, 29, 28, 27, 103, 102, 104, 105, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 45, 296, - 10, 107, 106, 108, 97, 56, 99, 98, 100, nil, - 101, 109, 110, nil, 93, 94, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 40, nil, - nil, 33, nil, nil, 58, 59, nil, nil, 60, nil, - 35, nil, nil, nil, 44, nil, nil, nil, nil, nil, - nil, nil, nil, 20, nil, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, nil, nil, nil, 62, - nil, 83, 95, 96, 294, 74, 75, 71, 9, 57, - nil, nil, nil, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 30, 31, 72, 73, nil, nil, nil, - nil, nil, 29, 28, 27, 103, 102, 104, 105, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 45, 296, - 10, 107, 106, 108, 97, 56, 99, 98, 100, nil, - 101, 109, 110, nil, 93, 94, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 40, nil, - nil, 33, nil, nil, 58, 59, nil, nil, 60, nil, - 35, nil, nil, nil, 44, nil, nil, nil, nil, nil, - nil, nil, nil, 20, nil, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, nil, nil, nil, 62, - nil, 83, 95, 96, 294, 74, 75, 71, 9, 57, - nil, nil, nil, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 30, 31, 72, 73, nil, nil, nil, - nil, nil, 29, 28, 27, 103, 102, 104, 105, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 45, 296, - 10, 107, 106, 108, 97, 56, 99, 98, 100, nil, - 101, 109, 110, nil, 93, 94, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 40, nil, - nil, 33, nil, nil, 58, 59, nil, nil, 60, nil, - 35, nil, nil, nil, 44, nil, nil, nil, nil, nil, - nil, nil, nil, 20, nil, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, nil, nil, nil, 62, - nil, 83, 95, 96, 294, 74, 75, 71, 9, 57, - nil, nil, nil, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 30, 31, 72, 73, nil, nil, nil, - nil, nil, 29, 28, 27, 103, 102, 104, 105, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 45, 296, - 10, 107, 106, 108, 97, 56, 99, 98, 100, nil, - 101, 109, 110, nil, 93, 94, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 40, nil, - nil, 33, nil, nil, 58, 59, nil, nil, 60, nil, - 35, nil, nil, nil, 44, nil, nil, nil, nil, nil, - nil, nil, nil, 20, nil, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, nil, nil, nil, 62, - nil, 83, 95, 96, 74, 75, 71, 9, 57, nil, - nil, nil, 63, 64, nil, nil, nil, 67, nil, 65, - 66, 68, 30, 31, 72, 73, nil, nil, nil, nil, - nil, 29, 28, 27, 103, 102, 104, 105, nil, nil, - 19, nil, nil, nil, nil, nil, 8, 45, 7, 10, - 107, 106, 108, 97, 56, 99, 98, 100, nil, 101, - 109, 110, nil, 93, 94, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 40, nil, nil, - 33, nil, nil, 58, 59, nil, nil, 60, nil, 35, - nil, nil, nil, 44, nil, nil, nil, nil, nil, nil, - nil, nil, 20, nil, nil, nil, nil, 91, 81, 84, - 85, nil, 86, 88, 87, 89, nil, nil, nil, nil, - 82, 90, nil, nil, nil, 74, 75, 71, 62, 57, - 83, 95, 96, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 30, 31, 72, 73, nil, nil, nil, - nil, nil, 29, 28, 27, 103, 102, 104, 105, nil, - nil, 234, nil, nil, nil, nil, nil, nil, 45, nil, - nil, 107, 106, 108, 97, 56, 99, 98, 100, nil, - 101, 109, 110, nil, 93, 94, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 227, nil, - nil, 233, nil, nil, 58, 59, nil, nil, 60, nil, - nil, nil, nil, nil, 44, nil, nil, nil, nil, nil, - nil, nil, nil, 232, nil, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, 74, 75, 71, 62, - 57, 83, 95, 96, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 30, 31, 72, 73, nil, nil, - nil, nil, nil, 29, 28, 27, 103, 102, 104, 105, - nil, nil, 234, nil, nil, nil, nil, nil, nil, 45, - nil, nil, 107, 106, 108, 97, 56, 99, 98, 100, - 288, 101, 109, 110, nil, 93, 94, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 227, - nil, nil, 233, nil, nil, 58, 59, nil, nil, 60, - nil, 285, nil, 283, nil, 44, nil, nil, 289, nil, - nil, nil, nil, nil, 232, nil, nil, nil, nil, 91, - 286, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, nil, nil, 74, 75, 71, - 62, 57, 83, 95, 96, 63, 64, nil, nil, nil, - 67, nil, 65, 66, 68, 30, 31, 72, 73, nil, - nil, nil, nil, nil, 29, 28, 27, 103, 102, 104, - 105, nil, nil, 234, nil, nil, nil, nil, nil, nil, - 45, nil, nil, 107, 106, 108, 97, 56, 99, 98, - 100, 288, 101, 109, 110, nil, 93, 94, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 227, nil, nil, 233, nil, nil, 58, 59, nil, nil, - 60, nil, 285, nil, 283, nil, 44, nil, nil, 289, - nil, nil, nil, nil, nil, 232, nil, nil, nil, nil, - 91, 286, 84, 85, nil, 86, 88, 87, 89, nil, - nil, nil, nil, 82, 90, nil, nil, nil, 74, 75, - 71, 62, 57, 83, 95, 96, 63, 64, nil, nil, - nil, 67, nil, 65, 66, 68, 30, 31, 72, 73, - nil, nil, nil, nil, nil, 29, 28, 27, 103, 102, - 104, 105, nil, nil, 234, nil, nil, nil, nil, nil, - nil, 45, nil, nil, 107, 106, 108, 97, 56, 99, - 98, 100, 288, 101, 109, 110, nil, 93, 94, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 227, nil, nil, 233, nil, nil, 58, 59, nil, - nil, 60, nil, 285, nil, 283, nil, 44, nil, nil, - 289, nil, nil, nil, nil, nil, 232, nil, nil, nil, - nil, 91, 286, 84, 85, nil, 86, 88, 87, 89, - nil, nil, nil, nil, 82, 90, nil, nil, nil, 74, - 75, 71, 62, 57, 83, 95, 96, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 313, 314, 72, - 73, nil, nil, nil, nil, nil, 309, 310, 316, 103, - 102, 104, 105, nil, nil, 234, nil, nil, nil, nil, - nil, nil, 311, nil, nil, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - nil, nil, 317, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 307, nil, nil, 303, nil, nil, 58, 59, - nil, nil, 60, nil, 302, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - 74, 75, 71, 62, 57, 83, 95, 96, 63, 64, - nil, nil, nil, 67, nil, 65, 66, 68, 313, 314, - 72, 73, nil, nil, nil, nil, nil, 309, 310, 316, - 103, 102, 104, 105, nil, nil, 234, nil, nil, nil, - nil, nil, nil, 311, nil, nil, 107, 106, 108, 97, - 56, 99, 98, 100, nil, 101, 109, 110, nil, 93, - 94, nil, nil, 317, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 307, nil, nil, 233, nil, nil, 58, - 59, nil, nil, 60, nil, nil, 678, nil, 675, 674, - 673, 683, 676, nil, nil, nil, nil, nil, nil, nil, - nil, 686, nil, 91, 81, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, nil, nil, - nil, 319, nil, 681, 62, nil, 83, 95, 96, 74, - 75, 71, nil, 57, 694, 693, nil, 63, 64, 687, - nil, nil, 67, nil, 65, 66, 68, 313, 314, 72, - 73, nil, nil, nil, nil, nil, 309, 310, 316, 103, - 102, 104, 105, nil, nil, 234, nil, nil, nil, nil, - nil, nil, 45, nil, nil, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 227, nil, nil, 233, nil, nil, 58, 59, - nil, nil, 60, nil, nil, nil, nil, nil, 44, nil, - nil, nil, nil, nil, nil, nil, nil, 232, nil, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - 74, 75, 71, 62, 57, 83, 95, 96, 63, 64, - nil, nil, nil, 67, nil, 65, 66, 68, 313, 314, - 72, 73, nil, nil, nil, nil, nil, 309, 310, 316, - 103, 102, 104, 105, nil, nil, 234, nil, nil, nil, - nil, nil, nil, 45, nil, nil, 107, 106, 108, 97, - 56, 99, 98, 100, nil, 101, 109, 110, nil, 93, - 94, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 227, nil, nil, 233, nil, nil, 58, - 59, nil, nil, 60, nil, nil, nil, nil, nil, 44, - nil, nil, nil, nil, nil, nil, nil, nil, 232, nil, - nil, nil, nil, 91, 81, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, nil, nil, - nil, 74, 75, 71, 62, 57, 83, 95, 96, 63, - 64, nil, nil, nil, 67, nil, 65, 66, 68, 313, - 314, 72, 73, nil, nil, nil, nil, nil, 309, 310, - 316, 103, 102, 104, 105, nil, nil, 234, nil, nil, - nil, nil, nil, nil, 45, nil, nil, 107, 106, 108, - 97, 56, 99, 98, 100, nil, 101, 109, 110, nil, - 93, 94, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 227, nil, nil, 233, nil, nil, - 58, 59, nil, nil, 60, nil, nil, nil, nil, nil, - 44, nil, nil, nil, nil, nil, nil, nil, nil, 232, - nil, nil, nil, nil, 91, 81, 84, 85, nil, 86, - 88, 87, 89, nil, nil, nil, nil, 82, 90, nil, - nil, nil, nil, nil, nil, 62, nil, 83, 95, 96, - 74, 75, 71, 9, 57, nil, nil, nil, 63, 64, - nil, nil, nil, 67, nil, 65, 66, 68, 30, 31, - 72, 73, nil, nil, nil, nil, nil, 29, 28, 27, - 103, 102, 104, 105, nil, nil, 19, nil, nil, nil, - nil, nil, 8, 45, nil, 10, 107, 106, 108, 97, - 56, 99, 98, 100, nil, 101, 109, 110, nil, 93, - 94, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 40, nil, nil, 33, nil, nil, 58, - 59, nil, nil, 60, nil, 35, nil, nil, nil, 44, - nil, nil, nil, nil, nil, nil, nil, nil, 20, nil, - nil, nil, nil, 91, 81, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, nil, nil, - nil, 74, 75, 71, 62, 57, 83, 95, 96, 63, - 64, nil, nil, nil, 67, nil, 65, 66, 68, 313, - 314, 72, 73, nil, nil, nil, nil, nil, 309, 310, - 316, 103, 102, 104, 105, nil, nil, 234, nil, nil, - nil, nil, nil, nil, 45, nil, nil, 107, 106, 108, - 97, 56, 99, 98, 100, 288, 101, 109, 110, nil, - 93, 94, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 227, nil, nil, 233, nil, nil, - 58, 59, nil, nil, 60, nil, 285, nil, nil, nil, - 44, nil, nil, 289, nil, nil, nil, nil, nil, 232, - nil, nil, nil, nil, 91, 286, 84, 85, nil, 86, - 88, 87, 89, nil, nil, nil, nil, 82, 90, nil, - nil, nil, 74, 75, 71, 62, 57, 83, 95, 96, - 63, 64, nil, nil, nil, 67, nil, 65, 66, 68, - 313, 314, 72, 73, nil, nil, nil, nil, nil, 309, - 310, 316, 103, 102, 104, 105, nil, nil, 234, nil, - nil, nil, nil, nil, nil, 45, nil, nil, 107, 106, - 108, 97, 56, 99, 98, 100, 288, 101, 109, 110, - nil, 93, 94, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 227, nil, nil, 233, nil, - nil, 58, 59, nil, nil, 60, nil, nil, nil, nil, - nil, 44, nil, nil, 289, nil, nil, nil, nil, nil, - 232, nil, nil, nil, nil, 91, 286, 84, 85, nil, - 86, 88, 87, 89, nil, nil, nil, nil, 82, 90, - nil, nil, nil, 74, 75, 71, 62, 57, 83, 95, - 96, 63, 64, nil, nil, nil, 67, nil, 65, 66, - 68, 30, 31, 72, 73, nil, nil, nil, nil, nil, - 29, 28, 27, 103, 102, 104, 105, nil, nil, 19, - nil, nil, nil, nil, nil, nil, 45, nil, nil, 107, - 106, 108, 97, 56, 99, 98, 100, nil, 101, 109, - 110, nil, 93, 94, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 227, nil, nil, 233, - nil, nil, 58, 59, nil, nil, 60, nil, nil, nil, - nil, nil, 44, nil, nil, nil, nil, nil, nil, nil, - nil, 20, nil, nil, nil, nil, 91, 81, 84, 85, - nil, 86, 88, 87, 89, nil, nil, nil, nil, 82, - 90, nil, nil, nil, 74, 75, 71, 62, 57, 83, - 95, 96, 63, 64, nil, nil, nil, 67, nil, 65, - 66, 68, 30, 31, 72, 73, nil, nil, nil, nil, - nil, 29, 28, 27, 103, 102, 104, 105, nil, nil, - 19, nil, nil, nil, nil, nil, nil, 45, nil, nil, - 107, 106, 108, 97, 56, 99, 98, 100, nil, 101, - 109, 110, nil, 93, 94, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 227, nil, nil, - 233, nil, nil, 58, 59, nil, nil, 60, nil, nil, - nil, nil, nil, 44, nil, nil, nil, nil, nil, nil, - nil, nil, 20, nil, nil, nil, nil, 91, 81, 84, - 85, nil, 86, 88, 87, 89, nil, nil, nil, nil, - 82, 90, nil, nil, nil, 74, 75, 71, 62, 57, - 83, 95, 96, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 30, 31, 72, 73, nil, nil, nil, - nil, nil, 29, 28, 27, 103, 102, 104, 105, nil, - nil, 19, nil, nil, nil, nil, nil, nil, 45, nil, - nil, 107, 106, 108, 97, 56, 99, 98, 100, nil, - 101, 109, 110, nil, 93, 94, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 227, nil, - nil, 233, nil, nil, 58, 59, nil, nil, 60, nil, - nil, nil, nil, nil, 44, nil, nil, nil, nil, nil, - nil, nil, nil, 20, nil, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, 115, nil, nil, nil, nil, 114, 62, - nil, 83, 95, 96, 74, 75, 71, nil, 57, nil, - nil, nil, 63, 64, nil, nil, nil, 67, nil, 65, - 66, 68, 313, 314, 72, 73, nil, nil, nil, nil, - nil, 309, 310, 316, 103, 102, 104, 105, nil, nil, - 234, nil, nil, nil, nil, nil, nil, 311, nil, nil, - 107, 106, 108, 97, 56, 99, 98, 100, nil, 101, - 109, 110, nil, 93, 94, nil, nil, 317, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 351, nil, nil, - 33, nil, nil, 58, 59, nil, nil, 60, nil, 35, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 91, 81, 84, - 85, nil, 86, 88, 87, 89, nil, nil, nil, nil, - 82, 90, nil, nil, nil, 74, 75, 71, 62, 57, - 83, 95, 96, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 313, 314, 72, 73, nil, nil, nil, - nil, nil, 309, 310, 316, 103, 102, 104, 105, nil, - nil, 234, nil, nil, nil, nil, nil, nil, 311, nil, - nil, 107, 106, 108, 356, 56, 99, 98, 357, nil, - 101, 109, 110, nil, 93, 94, nil, nil, 317, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 363, nil, nil, 358, nil, - nil, 233, nil, nil, 58, 59, nil, nil, 60, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, 74, 75, 71, 62, - 57, 83, 95, 96, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 313, 314, 72, 73, nil, nil, - nil, nil, nil, 309, 310, 316, 103, 102, 104, 105, - nil, nil, 234, nil, nil, nil, nil, nil, nil, 311, - nil, nil, 107, 106, 108, 356, 56, 99, 98, 357, - nil, 101, 109, 110, nil, 93, 94, nil, nil, 317, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 358, - nil, nil, 233, nil, nil, 58, 59, nil, nil, 60, - nil, nil, 678, nil, 675, 674, 673, 683, 676, nil, - nil, nil, nil, nil, nil, nil, nil, 686, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, nil, nil, nil, nil, 681, - 62, nil, 83, 95, 96, 74, 75, 71, 9, 57, - 694, 693, nil, 63, 64, 687, nil, nil, 67, nil, - 65, 66, 68, 30, 31, 72, 73, nil, nil, nil, - nil, nil, 29, 28, 27, 103, 102, 104, 105, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 45, 7, - 10, 107, 106, 108, 97, 56, 99, 98, 100, nil, - 101, 109, 110, nil, 93, 94, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 40, nil, - nil, 33, nil, nil, 58, 59, nil, nil, 60, nil, - 35, nil, nil, nil, 44, nil, nil, nil, nil, nil, - nil, nil, nil, 20, nil, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, nil, nil, 391, 62, - nil, 83, 95, 96, 74, 75, 71, nil, 57, nil, - nil, nil, 63, 64, nil, nil, nil, 67, nil, 65, - 66, 68, 30, 31, 72, 73, nil, nil, nil, nil, - nil, 29, 28, 27, 103, 102, 104, 105, nil, nil, - 19, nil, nil, nil, nil, nil, nil, 45, nil, nil, - 107, 106, 108, 97, 56, 99, 98, 100, nil, 101, - 109, 110, nil, 93, 94, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 227, nil, nil, - 233, nil, nil, 58, 59, nil, nil, 60, nil, nil, - nil, nil, nil, 44, nil, nil, nil, nil, nil, nil, - nil, nil, 20, nil, nil, nil, nil, 91, 81, 84, - 85, nil, 86, 88, 87, 89, nil, nil, nil, nil, - 82, 90, nil, nil, nil, 74, 75, 71, 62, 57, - 83, 95, 96, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 30, 31, 72, 73, nil, nil, nil, - nil, nil, 29, 28, 27, 103, 102, 104, 105, nil, - nil, 19, nil, nil, nil, nil, nil, nil, 45, nil, - nil, 107, 106, 108, 97, 56, 99, 98, 100, nil, - 101, 109, 110, nil, 93, 94, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 227, nil, - nil, 233, nil, nil, 58, 59, nil, nil, 60, nil, - nil, nil, nil, nil, 44, nil, nil, nil, nil, nil, - nil, nil, nil, 20, nil, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, 74, 75, 71, 62, - 57, 83, 95, 96, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 30, 31, 72, 73, nil, nil, - nil, nil, nil, 29, 28, 27, 103, 102, 104, 105, - nil, nil, 19, nil, nil, nil, nil, nil, nil, 45, - nil, nil, 107, 106, 108, 97, 56, 99, 98, 100, - nil, 101, 109, 110, nil, 93, 94, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 227, - nil, nil, 233, nil, nil, 58, 59, nil, nil, 60, - nil, nil, nil, nil, nil, 44, nil, nil, nil, nil, - nil, nil, nil, nil, 20, nil, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, nil, nil, 74, 75, 71, - 62, 57, 83, 95, 96, 63, 64, nil, nil, nil, - 67, nil, 65, 66, 68, 30, 31, 72, 73, nil, - nil, nil, nil, nil, 29, 28, 27, 103, 102, 104, - 105, nil, nil, 19, nil, nil, nil, nil, nil, nil, - 45, nil, nil, 107, 106, 108, 97, 56, 99, 98, - 100, nil, 101, 109, 110, nil, 93, 94, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 227, nil, nil, 233, nil, nil, 58, 59, nil, nil, - 60, nil, nil, nil, nil, nil, 44, nil, nil, nil, - nil, nil, nil, nil, nil, 20, nil, nil, nil, nil, - 91, 81, 84, 85, nil, 86, 88, 87, 89, nil, - nil, nil, nil, 82, 90, nil, nil, nil, nil, nil, - nil, 62, nil, 83, 95, 96, 74, 75, 71, 9, - 57, nil, nil, nil, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 30, 31, 72, 73, nil, nil, - nil, nil, nil, 29, 28, 27, 103, 102, 104, 105, - nil, nil, 19, nil, nil, nil, nil, nil, 8, 45, - nil, 10, 107, 106, 108, 97, 56, 99, 98, 100, - nil, 101, 109, 110, nil, 93, 94, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 40, - nil, nil, 33, nil, nil, 58, 59, nil, nil, 60, - nil, 35, nil, nil, nil, 44, nil, nil, nil, nil, - nil, nil, nil, nil, 20, nil, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, nil, nil, 74, 75, 71, - 62, 57, 83, 95, 96, 63, 64, nil, nil, nil, - 67, nil, 65, 66, 68, 30, 31, 72, 73, nil, - nil, nil, nil, nil, 29, 28, 27, 103, 102, 104, - 105, nil, nil, 234, nil, nil, nil, nil, nil, nil, - 45, nil, nil, 107, 106, 108, 97, 56, 99, 98, - 100, nil, 101, 109, 110, nil, 93, 94, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 227, nil, nil, 233, nil, nil, 58, 59, nil, nil, - 60, nil, 407, nil, nil, nil, 44, nil, nil, nil, - nil, nil, nil, nil, nil, 232, nil, nil, nil, nil, - 91, 81, 84, 85, nil, 86, 88, 87, 89, nil, - nil, nil, nil, 82, 90, nil, nil, nil, 74, 75, - 71, 62, 57, 83, 95, 96, 63, 64, nil, nil, - nil, 67, nil, 65, 66, 68, 30, 31, 72, 73, - nil, nil, nil, nil, nil, 29, 28, 27, 103, 102, - 104, 105, nil, nil, 234, nil, nil, nil, nil, nil, - nil, 45, nil, nil, 107, 106, 108, 97, 56, 99, - 98, 100, nil, 101, 109, 110, nil, 93, 94, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 227, nil, nil, 233, nil, nil, 58, 59, nil, - nil, 60, nil, 407, nil, nil, nil, 44, nil, nil, - nil, nil, nil, nil, nil, nil, 232, nil, nil, nil, - nil, 91, 81, 84, 85, nil, 86, 88, 87, 89, - nil, nil, nil, nil, 82, 90, nil, nil, nil, 74, - 75, 71, 62, 57, 83, 95, 96, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 19, nil, nil, nil, nil, - nil, nil, 45, nil, nil, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 227, nil, nil, 233, nil, nil, 58, 59, - nil, nil, 60, nil, nil, nil, nil, nil, 44, nil, - nil, nil, nil, nil, nil, nil, nil, 20, nil, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - 74, 75, 71, 62, 57, 83, 95, 96, 63, 64, - nil, nil, nil, 67, nil, 65, 66, 68, 30, 31, - 72, 73, nil, nil, nil, nil, nil, 29, 28, 27, - 103, 102, 104, 105, nil, nil, 19, nil, nil, nil, - nil, nil, nil, 45, nil, nil, 107, 106, 108, 97, - 56, 99, 98, 100, nil, 101, 109, 110, nil, 93, - 94, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 227, nil, nil, 233, nil, nil, 58, - 59, nil, nil, 60, nil, nil, nil, nil, nil, 44, - nil, nil, nil, nil, nil, nil, nil, nil, 20, nil, - nil, nil, nil, 91, 81, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, nil, nil, - nil, 74, 75, 71, 62, 57, 83, 95, 96, 63, - 64, nil, nil, nil, 67, nil, 65, 66, 68, 30, - 31, 72, 73, nil, nil, nil, nil, nil, 29, 28, - 27, 103, 102, 104, 105, nil, nil, 234, nil, nil, - nil, nil, nil, nil, 45, nil, nil, 107, 106, 108, - 97, 56, 99, 98, 100, nil, 101, 109, 110, nil, - 93, 94, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 227, nil, nil, 233, nil, nil, - 58, 59, nil, nil, 60, nil, nil, nil, nil, nil, - 44, nil, nil, nil, nil, nil, nil, nil, nil, 232, - nil, nil, nil, nil, 91, 81, 84, 85, nil, 86, - 88, 87, 89, nil, nil, nil, nil, 82, 90, nil, - nil, nil, 74, 75, 71, 62, 57, 83, 95, 96, - 63, 64, nil, nil, nil, 67, nil, 65, 66, 68, - 30, 31, 72, 73, nil, nil, nil, nil, nil, 29, - 28, 27, 103, 102, 104, 105, nil, nil, 234, nil, - nil, nil, nil, nil, nil, 45, nil, nil, 107, 106, - 108, 97, 56, 99, 98, 100, 288, 101, 109, 110, - nil, 93, 94, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 227, nil, nil, 233, nil, - nil, 58, 59, nil, nil, 60, nil, 285, nil, 283, - nil, 44, nil, nil, 289, nil, nil, nil, nil, nil, - 232, nil, nil, nil, nil, 91, 286, 84, 85, nil, - 86, 88, 87, 89, nil, nil, nil, nil, 82, 90, - nil, nil, nil, 74, 75, 71, 62, 57, 83, 95, - 96, 63, 64, nil, nil, nil, 67, nil, 65, 66, - 68, 30, 31, 72, 73, nil, nil, nil, nil, nil, - 29, 28, 27, 103, 102, 104, 105, nil, nil, 234, - nil, nil, nil, nil, nil, nil, 45, nil, nil, 107, - 106, 108, 97, 56, 99, 98, 100, nil, 101, 109, - 110, nil, 93, 94, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 227, nil, nil, 233, - nil, nil, 58, 59, nil, nil, 60, nil, nil, nil, - nil, nil, 44, nil, nil, nil, nil, nil, nil, nil, - nil, 232, nil, nil, nil, nil, 91, 81, 84, 85, - nil, 86, 88, 87, 89, nil, nil, nil, nil, 82, - 90, nil, nil, nil, 74, 75, 71, 62, 57, 83, - 95, 96, 63, 64, nil, nil, nil, 67, nil, 65, - 66, 68, 30, 31, 72, 73, nil, nil, nil, nil, - nil, 29, 28, 27, 103, 102, 104, 105, nil, nil, - 19, nil, nil, nil, nil, nil, nil, 45, nil, nil, - 107, 106, 108, 97, 56, 99, 98, 100, nil, 101, - 109, 110, nil, 93, 94, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 227, nil, nil, - 233, nil, nil, 58, 59, nil, nil, 60, nil, nil, - nil, nil, nil, 44, nil, nil, nil, nil, nil, nil, - nil, nil, 20, nil, nil, nil, nil, 91, 81, 84, - 85, nil, 86, 88, 87, 89, nil, nil, nil, nil, - 82, 90, nil, nil, nil, 74, 75, 71, 62, 57, - 83, 95, 96, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 30, 31, 72, 73, nil, nil, nil, - nil, nil, 29, 28, 27, 103, 102, 104, 105, nil, - nil, 19, nil, nil, nil, nil, nil, nil, 45, nil, - nil, 107, 106, 108, 97, 56, 99, 98, 100, nil, - 101, 109, 110, nil, 93, 94, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 227, nil, - nil, 233, nil, nil, 58, 59, nil, nil, 60, nil, - nil, nil, nil, nil, 44, nil, nil, nil, nil, nil, - nil, nil, nil, 20, nil, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, 222, nil, nil, 74, 75, 71, 62, - 57, 83, 95, 96, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 313, 314, 72, 73, nil, nil, - nil, nil, nil, 309, 310, 316, 103, 102, 104, 105, - nil, nil, 234, nil, nil, nil, nil, nil, nil, 45, - nil, nil, 107, 106, 108, 97, 56, 99, 98, 100, - nil, 101, 109, 110, nil, 93, 94, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 227, - nil, nil, 233, nil, nil, 58, 59, nil, nil, 60, - nil, nil, nil, nil, nil, 44, nil, nil, nil, nil, - nil, nil, nil, nil, 232, nil, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, nil, nil, 74, 75, 71, - 62, 57, 83, 95, 96, 63, 64, nil, nil, nil, - 67, nil, 65, 66, 68, 313, 314, 72, 73, nil, - nil, nil, nil, nil, 309, 310, 316, 103, 102, 104, - 105, nil, nil, 234, nil, nil, nil, nil, nil, nil, - 45, nil, nil, 107, 106, 108, 97, 56, 99, 98, - 100, nil, 101, 109, 110, nil, 93, 94, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 227, nil, nil, 233, nil, nil, 58, 59, nil, nil, - 60, nil, nil, nil, nil, nil, 44, nil, nil, nil, - nil, nil, nil, nil, nil, 232, nil, nil, nil, nil, - 91, 81, 84, 85, nil, 86, 88, 87, 89, nil, - nil, nil, nil, 82, 90, nil, nil, nil, 74, 75, - 71, 62, 57, 83, 95, 96, 63, 64, nil, nil, - nil, 67, nil, 65, 66, 68, 313, 314, 72, 73, - nil, nil, nil, nil, nil, 309, 310, 316, 103, 102, - 104, 105, nil, nil, 234, nil, nil, nil, nil, nil, - nil, 45, nil, nil, 107, 106, 108, 97, 56, 99, - 98, 100, nil, 101, 109, 110, nil, 93, 94, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 227, nil, nil, 233, nil, nil, 58, 59, nil, - nil, 60, nil, nil, nil, nil, nil, 44, nil, nil, - nil, nil, nil, nil, nil, nil, 232, nil, nil, nil, - nil, 91, 81, 84, 85, nil, 86, 88, 87, 89, - nil, nil, nil, nil, 82, 90, nil, nil, nil, 74, - 75, 71, 62, 57, 83, 95, 96, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 313, 314, 72, - 73, nil, nil, nil, nil, nil, 309, 310, 316, 103, - 102, 104, 105, nil, nil, 234, nil, nil, nil, nil, - nil, nil, 45, nil, nil, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 227, nil, nil, 233, nil, nil, 58, 59, - nil, nil, 60, nil, nil, nil, nil, nil, 44, nil, - nil, nil, nil, nil, nil, nil, nil, 232, nil, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - 74, 75, 71, 62, 57, 83, 95, 96, 63, 64, - nil, nil, nil, 67, nil, 65, 66, 68, 313, 314, - 72, 73, nil, nil, nil, nil, nil, 309, 310, 316, - 103, 102, 104, 105, nil, nil, 234, nil, nil, nil, - nil, nil, nil, 45, nil, nil, 107, 106, 108, 97, - 56, 99, 98, 100, nil, 101, 109, 110, nil, 93, - 94, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 227, nil, nil, 233, nil, nil, 58, - 59, nil, nil, 60, nil, nil, nil, nil, nil, 44, - nil, nil, nil, nil, nil, nil, nil, nil, 232, nil, - nil, nil, nil, 91, 81, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, nil, nil, - nil, 74, 75, 71, 62, 57, 83, 95, 96, 63, - 64, nil, nil, nil, 67, nil, 65, 66, 68, 313, - 314, 72, 73, nil, nil, nil, nil, nil, 309, 310, - 316, 103, 102, 104, 105, nil, nil, 234, nil, nil, - nil, nil, nil, nil, 45, nil, nil, 107, 106, 108, - 97, 56, 99, 98, 100, nil, 101, 109, 110, nil, - 93, 94, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 227, nil, nil, 233, nil, nil, - 58, 59, nil, nil, 60, nil, nil, nil, nil, nil, - 44, nil, nil, nil, nil, nil, nil, nil, nil, 232, - nil, nil, nil, nil, 91, 81, 84, 85, nil, 86, - 88, 87, 89, nil, nil, nil, nil, 82, 90, nil, - nil, nil, 74, 75, 71, 62, 57, 83, 95, 96, - 63, 64, nil, nil, nil, 67, nil, 65, 66, 68, - 313, 314, 72, 73, nil, nil, nil, nil, nil, 309, - 310, 316, 103, 102, 104, 105, nil, nil, 234, nil, - nil, nil, nil, nil, nil, 45, nil, nil, 107, 106, - 108, 97, 56, 99, 98, 100, nil, 101, 109, 110, - nil, 93, 94, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 227, nil, nil, 233, nil, - nil, 58, 59, nil, nil, 60, nil, nil, nil, nil, - nil, 44, nil, nil, nil, nil, nil, nil, nil, nil, - 232, nil, nil, nil, nil, 91, 81, 84, 85, nil, - 86, 88, 87, 89, nil, nil, nil, nil, 82, 90, - nil, nil, nil, 74, 75, 71, 62, 57, 83, 95, - 96, 63, 64, nil, nil, nil, 67, nil, 65, 66, - 68, 313, 314, 72, 73, nil, nil, nil, nil, nil, - 309, 310, 316, 103, 102, 104, 105, nil, nil, 234, - nil, nil, nil, nil, nil, nil, 45, nil, nil, 107, - 106, 108, 97, 56, 99, 98, 100, nil, 101, 109, - 110, nil, 93, 94, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 227, nil, nil, 233, - nil, nil, 58, 59, nil, nil, 60, nil, nil, nil, - nil, nil, 44, nil, nil, nil, nil, nil, nil, nil, - nil, 232, nil, nil, nil, nil, 91, 81, 84, 85, - nil, 86, 88, 87, 89, nil, nil, nil, nil, 82, - 90, nil, nil, nil, 74, 75, 71, 62, 57, 83, - 95, 96, 63, 64, nil, nil, nil, 67, nil, 65, - 66, 68, 313, 314, 72, 73, nil, nil, nil, nil, - nil, 309, 310, 316, 103, 102, 104, 105, nil, nil, - 234, nil, nil, nil, nil, nil, nil, 45, nil, nil, - 107, 106, 108, 97, 56, 99, 98, 100, nil, 101, - 109, 110, nil, 93, 94, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 227, nil, nil, - 233, nil, nil, 58, 59, nil, nil, 60, nil, nil, - nil, nil, nil, 44, nil, nil, nil, nil, nil, nil, - nil, nil, 232, nil, nil, nil, nil, 91, 81, 84, - 85, nil, 86, 88, 87, 89, nil, nil, nil, nil, - 82, 90, nil, nil, nil, 74, 75, 71, 62, 57, - 83, 95, 96, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 313, 314, 72, 73, nil, nil, nil, - nil, nil, 309, 310, 316, 103, 102, 104, 105, nil, - nil, 234, nil, nil, nil, nil, nil, nil, 45, nil, - nil, 107, 106, 108, 97, 56, 99, 98, 100, nil, - 101, 109, 110, nil, 93, 94, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 227, nil, - nil, 233, nil, nil, 58, 59, nil, nil, 60, nil, - nil, nil, nil, nil, 44, nil, nil, nil, nil, nil, - nil, nil, nil, 232, nil, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, 74, 75, 71, 62, - 57, 83, 95, 96, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 313, 314, 72, 73, nil, nil, - nil, nil, nil, 309, 310, 316, 103, 102, 104, 105, - nil, nil, 234, nil, nil, nil, nil, nil, nil, 45, - nil, nil, 107, 106, 108, 97, 56, 99, 98, 100, - nil, 101, 109, 110, nil, 93, 94, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 227, - nil, nil, 233, nil, nil, 58, 59, nil, nil, 60, - nil, nil, nil, nil, nil, 44, nil, nil, nil, nil, - nil, nil, nil, nil, 232, nil, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, nil, nil, 74, 75, 71, - 62, 57, 83, 95, 96, 63, 64, nil, nil, nil, - 67, nil, 65, 66, 68, 313, 314, 72, 73, nil, - nil, nil, nil, nil, 309, 310, 316, 103, 102, 104, - 105, nil, nil, 234, nil, nil, nil, nil, nil, nil, - 45, nil, nil, 107, 106, 108, 97, 56, 99, 98, - 100, nil, 101, 109, 110, nil, 93, 94, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 227, nil, nil, 233, nil, nil, 58, 59, nil, nil, - 60, nil, nil, nil, nil, nil, 44, nil, nil, nil, - nil, nil, nil, nil, nil, 232, nil, nil, nil, nil, - 91, 81, 84, 85, nil, 86, 88, 87, 89, nil, - nil, nil, nil, 82, 90, nil, nil, nil, 74, 75, - 71, 62, 57, 83, 95, 96, 63, 64, nil, nil, - nil, 67, nil, 65, 66, 68, 313, 314, 72, 73, - nil, nil, nil, nil, nil, 309, 310, 316, 103, 102, - 104, 105, nil, nil, 234, nil, nil, nil, nil, nil, - nil, 45, nil, nil, 107, 106, 108, 97, 56, 99, - 98, 100, nil, 101, 109, 110, nil, 93, 94, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 227, nil, nil, 233, nil, nil, 58, 59, nil, - nil, 60, nil, nil, nil, nil, nil, 44, nil, nil, - nil, nil, nil, nil, nil, nil, 232, nil, nil, nil, - nil, 91, 81, 84, 85, nil, 86, 88, 87, 89, - nil, nil, nil, nil, 82, 90, nil, nil, nil, 74, - 75, 71, 62, 57, 83, 95, 96, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 313, 314, 72, - 73, nil, nil, nil, nil, nil, 309, 310, 316, 103, - 102, 104, 105, nil, nil, 234, nil, nil, nil, nil, - nil, nil, 45, nil, nil, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 227, nil, nil, 233, nil, nil, 58, 59, - nil, nil, 60, nil, nil, nil, nil, nil, 44, nil, - nil, nil, nil, nil, nil, nil, nil, 232, nil, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - 74, 75, 71, 62, 57, 83, 95, 96, 63, 64, - nil, nil, nil, 67, nil, 65, 66, 68, 313, 314, - 72, 73, nil, nil, nil, nil, nil, 309, 310, 316, - 103, 102, 104, 105, nil, nil, 234, nil, nil, nil, - nil, nil, nil, 45, nil, nil, 107, 106, 108, 97, - 56, 99, 98, 100, nil, 101, 109, 110, nil, 93, - 94, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 227, nil, nil, 233, nil, nil, 58, - 59, nil, nil, 60, nil, nil, nil, nil, nil, 44, - nil, nil, nil, nil, nil, nil, nil, nil, 232, nil, - nil, nil, nil, 91, 81, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, nil, nil, - nil, 74, 75, 71, 62, 57, 83, 95, 96, 63, - 64, nil, nil, nil, 67, nil, 65, 66, 68, 313, - 314, 72, 73, nil, nil, nil, nil, nil, 309, 310, - 316, 103, 102, 104, 105, nil, nil, 234, nil, nil, - nil, nil, nil, nil, 45, nil, nil, 107, 106, 108, - 97, 56, 99, 98, 100, nil, 101, 109, 110, nil, - 93, 94, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 227, nil, nil, 233, nil, nil, - 58, 59, nil, nil, 60, nil, nil, nil, nil, nil, - 44, nil, nil, nil, nil, nil, nil, nil, nil, 232, - nil, nil, nil, nil, 91, 81, 84, 85, nil, 86, - 88, 87, 89, nil, nil, nil, nil, 82, 90, nil, - nil, nil, 74, 75, 71, 62, 57, 83, 95, 96, - 63, 64, nil, nil, nil, 67, nil, 65, 66, 68, - 313, 314, 72, 73, nil, nil, nil, nil, nil, 309, - 310, 316, 103, 102, 104, 105, nil, nil, 234, nil, - nil, nil, nil, nil, nil, 45, nil, nil, 107, 106, - 108, 97, 56, 99, 98, 100, nil, 101, 109, 110, - nil, 93, 94, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 227, nil, nil, 233, nil, - nil, 58, 59, nil, nil, 60, nil, nil, nil, nil, - nil, 44, nil, nil, nil, nil, nil, nil, nil, nil, - 232, nil, nil, nil, nil, 91, 81, 84, 85, nil, - 86, 88, 87, 89, nil, nil, nil, nil, 82, 90, - nil, nil, nil, 74, 75, 71, 62, 57, 83, 95, - 96, 63, 64, nil, nil, nil, 67, nil, 65, 66, - 68, 313, 314, 72, 73, nil, nil, nil, nil, nil, - 309, 310, 316, 103, 102, 104, 105, nil, nil, 234, - nil, nil, nil, nil, nil, nil, 45, nil, nil, 107, - 106, 108, 97, 56, 99, 98, 100, nil, 101, 109, - 110, nil, 93, 94, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 227, nil, nil, 233, - nil, nil, 58, 59, nil, nil, 60, nil, nil, nil, - nil, nil, 44, nil, nil, nil, nil, nil, nil, nil, - nil, 232, nil, nil, nil, nil, 91, 81, 84, 85, - nil, 86, 88, 87, 89, nil, nil, nil, nil, 82, - 90, nil, nil, nil, 74, 75, 71, 62, 57, 83, - 95, 96, 63, 64, nil, nil, nil, 67, nil, 65, - 66, 68, 313, 314, 72, 73, nil, nil, nil, nil, - nil, 309, 310, 316, 103, 102, 104, 105, nil, nil, - 234, nil, nil, nil, nil, nil, nil, 45, nil, nil, - 107, 106, 108, 97, 56, 99, 98, 100, nil, 101, - 109, 110, nil, 93, 94, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 227, nil, nil, - 233, nil, nil, 58, 59, nil, nil, 60, nil, nil, - nil, nil, nil, 44, nil, nil, nil, nil, nil, nil, - nil, nil, 232, nil, nil, nil, nil, 91, 81, 84, - 85, nil, 86, 88, 87, 89, nil, nil, nil, nil, - 82, 90, nil, nil, nil, 74, 75, 71, 62, 57, - 83, 95, 96, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 313, 314, 72, 73, nil, nil, nil, - nil, nil, 309, 310, 316, 103, 102, 104, 105, nil, - nil, 234, nil, nil, nil, nil, nil, nil, 45, nil, - nil, 107, 106, 108, 97, 56, 99, 98, 100, nil, - 101, 109, 110, nil, 93, 94, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 227, nil, - nil, 233, nil, nil, 58, 59, nil, nil, 60, nil, - nil, nil, nil, nil, 44, nil, nil, nil, nil, nil, - nil, nil, nil, 232, nil, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, 74, 75, 71, 62, - 57, 83, 95, 96, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 313, 314, 72, 73, nil, nil, - nil, nil, nil, 309, 310, 316, 103, 102, 104, 105, - nil, nil, 234, nil, nil, nil, nil, nil, nil, 45, - nil, nil, 107, 106, 108, 97, 56, 99, 98, 100, - nil, 101, 109, 110, nil, 93, 94, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 227, - nil, nil, 233, nil, nil, 58, 59, nil, nil, 60, - nil, nil, nil, nil, nil, 44, nil, nil, nil, nil, - nil, nil, nil, nil, 232, nil, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, nil, nil, 74, 75, 71, - 62, 57, 83, 95, 96, 63, 64, nil, nil, nil, - 67, nil, 65, 66, 68, 313, 314, 72, 73, nil, - nil, nil, nil, nil, 309, 310, 316, 103, 102, 104, - 105, nil, nil, 234, nil, nil, nil, nil, nil, nil, - 45, nil, nil, 107, 106, 108, 97, 56, 99, 98, - 100, nil, 101, 109, 110, nil, 93, 94, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 227, nil, nil, 233, nil, nil, 58, 59, nil, nil, - 60, nil, nil, nil, nil, nil, 44, nil, nil, nil, - nil, nil, nil, nil, nil, 232, nil, nil, nil, nil, - 91, 81, 84, 85, nil, 86, 88, 87, 89, nil, - nil, nil, nil, 82, 90, nil, nil, nil, 74, 75, - 71, 62, 57, 83, 95, 96, 63, 64, nil, nil, - nil, 67, nil, 65, 66, 68, 313, 314, 72, 73, - nil, nil, nil, nil, nil, 309, 310, 316, 103, 102, - 104, 105, nil, nil, 234, nil, nil, nil, nil, nil, - nil, 45, nil, nil, 107, 106, 108, 97, 56, 99, - 98, 100, nil, 101, 109, 110, nil, 93, 94, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 227, nil, nil, 233, nil, nil, 58, 59, nil, - nil, 60, nil, nil, nil, nil, nil, 44, nil, nil, - nil, nil, nil, nil, nil, nil, 232, nil, nil, nil, - nil, 91, 81, 84, 85, nil, 86, 88, 87, 89, - nil, nil, nil, nil, 82, 90, nil, nil, nil, 74, - 75, 71, 62, 57, 83, 95, 96, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 313, 314, 72, - 73, nil, nil, nil, nil, nil, 309, 310, 316, 103, - 102, 104, 105, nil, nil, 234, nil, nil, nil, nil, - nil, nil, 45, nil, nil, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 227, nil, nil, 233, nil, nil, 58, 59, - nil, nil, 60, nil, nil, nil, nil, nil, 44, nil, - nil, nil, nil, nil, nil, nil, nil, 232, nil, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - 74, 75, 71, 62, 57, 83, 95, 96, 63, 64, - nil, nil, nil, 67, nil, 65, 66, 68, 313, 314, - 72, 73, nil, nil, nil, nil, nil, 309, 310, 316, - 103, 102, 104, 105, nil, nil, 234, nil, nil, nil, - nil, nil, nil, 45, nil, nil, 107, 106, 108, 97, - 56, 99, 98, 100, nil, 101, 109, 110, nil, 93, - 94, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 227, nil, nil, 233, nil, nil, 58, - 59, nil, nil, 60, nil, nil, nil, nil, nil, 44, - nil, nil, nil, nil, nil, nil, nil, nil, 232, nil, - nil, nil, nil, 91, 81, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, nil, nil, - nil, 74, 75, 71, 62, 57, 83, 95, 96, 63, - 64, nil, nil, nil, 67, nil, 65, 66, 68, 313, - 314, 72, 73, nil, nil, nil, nil, nil, 309, 310, - 316, 103, 102, 104, 105, nil, nil, 234, nil, nil, - nil, nil, nil, nil, 45, nil, nil, 107, 106, 108, - 97, 56, 99, 98, 100, nil, 101, 109, 110, nil, - 93, 94, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 227, nil, nil, 233, nil, nil, - 58, 59, nil, nil, 60, nil, nil, nil, nil, nil, - 44, nil, nil, nil, nil, nil, nil, nil, nil, 232, - nil, nil, nil, nil, 91, 81, 84, 85, nil, 86, - 88, 87, 89, nil, nil, nil, nil, 82, 90, nil, - nil, nil, 74, 75, 71, 62, 57, 83, 95, 96, - 63, 64, nil, nil, nil, 67, nil, 65, 66, 68, - 313, 314, 72, 73, nil, nil, nil, nil, nil, 309, - 310, 316, 103, 102, 104, 105, nil, nil, 234, nil, - nil, nil, nil, nil, nil, 45, nil, nil, 107, 106, - 108, 97, 56, 99, 98, 100, nil, 101, 109, 110, - nil, 93, 94, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 227, nil, nil, 233, nil, - nil, 58, 59, nil, nil, 60, nil, nil, nil, nil, - nil, 44, nil, nil, nil, nil, nil, nil, nil, nil, - 232, nil, nil, nil, nil, 91, 81, 84, 85, nil, - 86, 88, 87, 89, nil, nil, nil, nil, 82, 90, - nil, nil, nil, 74, 75, 71, 62, 57, 83, 95, - 96, 63, 64, nil, nil, nil, 67, nil, 65, 66, - 68, 30, 31, 72, 73, nil, nil, nil, nil, nil, - 29, 28, 27, 103, 102, 104, 105, nil, nil, 234, - nil, nil, nil, nil, nil, nil, 45, nil, nil, 107, - 106, 108, 97, 56, 99, 98, 100, 288, 101, 109, - 110, nil, 93, 94, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 227, nil, nil, 233, - nil, nil, 58, 59, nil, nil, 60, nil, 285, nil, - 283, nil, 44, nil, nil, 289, nil, nil, nil, nil, - nil, 232, nil, nil, nil, nil, 91, 286, 84, 85, - nil, 86, 88, 87, 89, nil, nil, nil, nil, 82, - 90, nil, nil, nil, 74, 75, 71, 62, 57, 83, - 95, 96, 63, 64, nil, nil, nil, 67, nil, 65, - 66, 68, 30, 31, 72, 73, nil, nil, nil, nil, - nil, 29, 28, 27, 103, 102, 104, 105, nil, nil, - 234, nil, nil, nil, nil, nil, nil, 45, nil, nil, - 107, 106, 108, 97, 56, 99, 98, 100, 288, 101, - 109, 110, nil, 93, 94, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 227, nil, nil, - 233, nil, nil, 58, 59, nil, nil, 60, nil, 285, - nil, 283, nil, 44, nil, nil, 289, nil, nil, nil, - nil, nil, 232, nil, nil, nil, nil, 91, 286, 84, - 85, nil, 86, 88, 87, 89, nil, nil, nil, nil, - 82, 90, nil, nil, nil, 74, 75, 71, 62, 57, - 83, 95, 96, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 30, 31, 72, 73, nil, nil, nil, - nil, nil, 29, 28, 27, 103, 102, 104, 105, nil, - nil, 234, nil, nil, nil, nil, nil, nil, 45, nil, - nil, 107, 106, 108, 97, 56, 99, 98, 100, 288, - 101, 109, 110, nil, 93, 94, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 227, nil, - nil, 233, nil, nil, 58, 59, nil, nil, 60, nil, - 285, nil, 283, nil, 44, nil, nil, 289, nil, nil, - nil, nil, nil, 232, nil, nil, nil, nil, 91, 286, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, 222, nil, nil, 74, 75, 71, 62, - 57, 83, 95, 96, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 313, 314, 72, 73, nil, nil, - nil, nil, nil, 309, 310, 316, 103, 102, 104, 105, - nil, nil, 234, nil, nil, nil, nil, nil, nil, 45, - nil, nil, 107, 106, 108, 97, 56, 99, 98, 100, - nil, 101, 109, 110, nil, 93, 94, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 227, - nil, nil, 233, nil, nil, 58, 59, nil, nil, 60, - nil, nil, nil, nil, nil, 44, nil, nil, nil, nil, - nil, nil, nil, nil, 232, nil, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, nil, nil, 74, 75, 71, - 62, 57, 83, 95, 96, 63, 64, nil, nil, nil, - 67, nil, 65, 66, 68, 313, 314, 72, 73, nil, - nil, nil, nil, nil, 309, 310, 316, 103, 102, 104, - 105, nil, nil, 234, nil, nil, nil, nil, nil, nil, - 45, nil, nil, 107, 106, 108, 97, 56, 99, 98, - 100, nil, 101, 109, 110, nil, 93, 94, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 227, nil, nil, 233, nil, nil, 58, 59, nil, nil, - 60, nil, nil, nil, nil, nil, 44, nil, nil, nil, - nil, nil, nil, nil, nil, 232, nil, nil, nil, nil, - 91, 81, 84, 85, nil, 86, 88, 87, 89, nil, - nil, nil, nil, 82, 90, nil, nil, nil, 74, 75, - 71, 62, 57, 83, 95, 96, 63, 64, nil, nil, - nil, 67, nil, 65, 66, 68, 313, 314, 72, 73, - nil, nil, nil, nil, nil, 309, 310, 316, 103, 102, - 104, 105, nil, nil, 234, nil, nil, nil, nil, nil, - nil, 45, nil, nil, 107, 106, 108, 97, 56, 99, - 98, 100, nil, 101, 109, 110, nil, 93, 94, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 227, nil, nil, 233, nil, nil, 58, 59, nil, - nil, 60, nil, nil, nil, nil, nil, 44, nil, nil, - nil, nil, nil, nil, nil, nil, 232, nil, nil, nil, - nil, 91, 81, 84, 85, nil, 86, 88, 87, 89, - nil, nil, nil, nil, 82, 90, nil, nil, nil, 74, - 75, 71, 62, 57, 83, 95, 96, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 313, 314, 72, - 73, nil, nil, nil, nil, nil, 309, 310, 316, 103, - 102, 104, 105, nil, nil, 234, nil, nil, nil, nil, - nil, nil, 45, nil, nil, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 227, nil, nil, 233, nil, nil, 58, 59, - nil, nil, 60, nil, nil, nil, nil, nil, 44, nil, - nil, nil, nil, nil, nil, nil, nil, 232, nil, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - nil, nil, nil, 62, nil, 83, 95, 96, 74, 75, - 71, 9, 57, nil, nil, nil, 63, 64, nil, nil, - nil, 67, nil, 65, 66, 68, 30, 31, 72, 73, - nil, nil, nil, nil, nil, 29, 28, 27, 103, 102, - 104, 105, nil, nil, 19, nil, nil, nil, nil, nil, - 8, 45, nil, 10, 107, 106, 108, 97, 56, 99, - 98, 100, nil, 101, 109, 110, nil, 93, 94, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 40, nil, nil, 33, nil, nil, 58, 59, nil, - nil, 60, nil, 35, nil, nil, nil, 44, nil, nil, - nil, nil, nil, nil, nil, nil, 20, nil, nil, nil, - nil, 91, 81, 84, 85, nil, 86, 88, 87, 89, - nil, nil, nil, nil, 82, 90, nil, nil, nil, 74, - 75, 71, 62, 57, 83, 95, 96, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 313, 314, 72, - 73, nil, nil, nil, nil, nil, 309, 310, 316, 103, - 102, 104, 105, nil, nil, 234, nil, nil, nil, nil, - nil, nil, 311, nil, nil, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - nil, nil, 317, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 307, nil, nil, 233, nil, nil, 58, 59, - nil, nil, 60, nil, nil, 678, nil, 675, 674, 673, - 683, 676, nil, nil, nil, nil, nil, nil, nil, nil, - 686, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - 512, nil, 681, 62, nil, 83, 95, 96, 74, 75, - 71, nil, 57, 694, 693, nil, 63, 64, 687, nil, - nil, 67, nil, 65, 66, 68, 313, 314, 72, 73, - nil, nil, nil, nil, nil, 309, 310, 316, 103, 102, - 104, 105, nil, nil, 234, nil, nil, nil, nil, nil, - nil, 311, nil, nil, 107, 106, 108, 97, 56, 99, - 98, 100, nil, 101, 109, 110, nil, 93, 94, nil, - nil, 317, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 307, nil, nil, 303, nil, nil, 58, 59, nil, - nil, 60, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 91, 81, 84, 85, nil, 86, 88, 87, 89, - nil, nil, nil, nil, 82, 90, nil, nil, nil, 74, - 75, 71, 62, 57, 83, 95, 96, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 313, 314, 72, - 73, nil, nil, nil, nil, nil, 309, 310, 316, 103, - 102, 104, 105, nil, nil, 234, nil, nil, nil, nil, - nil, nil, 45, nil, nil, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 227, nil, nil, 233, 528, nil, 58, 59, - nil, nil, 60, nil, nil, nil, nil, nil, 44, nil, - nil, nil, nil, nil, nil, nil, nil, 232, nil, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - 74, 75, 71, 62, 57, 83, 95, 96, 63, 64, - nil, nil, nil, 67, nil, 65, 66, 68, 30, 31, - 72, 73, nil, nil, nil, nil, nil, 29, 28, 27, - 103, 102, 104, 105, nil, nil, 19, nil, nil, nil, - nil, nil, nil, 45, nil, nil, 107, 106, 108, 97, - 56, 99, 98, 100, nil, 101, 109, 110, nil, 93, - 94, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 227, nil, nil, 233, nil, nil, 58, - 59, nil, nil, 60, nil, nil, nil, nil, nil, 44, - nil, nil, nil, nil, nil, nil, nil, nil, 20, nil, - nil, nil, nil, 91, 81, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, nil, nil, - nil, 74, 75, 71, 62, 57, 83, 95, 96, 63, - 64, nil, nil, nil, 67, nil, 65, 66, 68, 30, - 31, 72, 73, nil, nil, nil, nil, nil, 29, 28, - 27, 103, 102, 104, 105, nil, nil, 19, nil, nil, - nil, nil, nil, nil, 45, nil, nil, 107, 106, 108, - 97, 56, 99, 98, 100, nil, 101, 109, 110, nil, - 93, 94, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 227, nil, nil, 233, nil, nil, - 58, 59, nil, nil, 60, nil, nil, nil, nil, nil, - 44, nil, nil, nil, nil, nil, nil, nil, nil, 20, - nil, nil, nil, nil, 91, 81, 84, 85, nil, 86, - 88, 87, 89, nil, nil, nil, nil, 82, 90, nil, - nil, nil, 74, 75, 71, 62, 57, 83, 95, 96, - 63, 64, nil, nil, nil, 67, nil, 65, 66, 68, - 30, 31, 72, 73, nil, nil, nil, nil, nil, 29, - 28, 27, 103, 102, 104, 105, nil, nil, 19, nil, - nil, nil, nil, nil, nil, 45, nil, nil, 107, 106, - 108, 97, 56, 99, 98, 100, nil, 101, 109, 110, - nil, 93, 94, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 227, nil, nil, 233, nil, - nil, 58, 59, nil, nil, 60, nil, nil, nil, nil, - nil, 44, nil, nil, nil, nil, nil, nil, nil, nil, - 20, nil, nil, nil, nil, 91, 81, 84, 85, nil, - 86, 88, 87, 89, nil, nil, nil, nil, 82, 90, - nil, nil, nil, 74, 75, 71, 62, 57, 83, 95, - 96, 63, 64, nil, nil, nil, 67, nil, 65, 66, - 68, 30, 31, 72, 73, nil, nil, nil, nil, nil, - 29, 28, 27, 103, 102, 104, 105, nil, nil, 19, - nil, nil, nil, nil, nil, nil, 45, nil, nil, 107, - 106, 108, 97, 56, 99, 98, 100, nil, 101, 109, - 110, nil, 93, 94, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 227, nil, nil, 233, - nil, nil, 58, 59, nil, nil, 60, nil, nil, nil, - nil, nil, 44, nil, nil, nil, nil, nil, nil, nil, - nil, 20, nil, nil, nil, nil, 91, 81, 84, 85, - nil, 86, 88, 87, 89, nil, nil, nil, nil, 82, - 90, nil, nil, nil, 74, 75, 71, 62, 57, 83, - 95, 96, 63, 64, nil, nil, nil, 67, nil, 65, - 66, 68, 313, 314, 72, 73, nil, nil, nil, nil, - nil, 309, 310, 316, 103, 102, 104, 105, nil, nil, - 234, nil, nil, nil, nil, nil, nil, 45, nil, nil, - 107, 106, 108, 97, 56, 99, 98, 100, nil, 101, - 109, 110, nil, 93, 94, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 227, nil, nil, - 233, nil, nil, 58, 59, nil, nil, 60, nil, nil, - nil, nil, nil, 44, nil, nil, nil, nil, nil, nil, - nil, nil, 232, nil, nil, nil, nil, 91, 81, 84, - 85, nil, 86, 88, 87, 89, nil, nil, nil, nil, - 82, 90, nil, nil, nil, 74, 75, 71, 62, 57, - 83, 95, 96, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 30, 31, 72, 73, nil, nil, nil, - nil, nil, 29, 28, 27, 103, 102, 104, 105, nil, - nil, 234, nil, nil, nil, nil, nil, nil, 45, nil, - nil, 107, 106, 108, 97, 56, 99, 98, 100, 288, - 101, 109, 110, nil, 93, 94, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 227, nil, - nil, 233, nil, nil, 58, 59, nil, nil, 60, nil, - 285, nil, 283, nil, 44, nil, nil, 289, nil, nil, - nil, nil, nil, 232, nil, nil, nil, nil, 91, 286, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, 74, 75, 71, 62, - 57, 83, 95, 96, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 313, 314, 72, 73, nil, nil, - nil, nil, nil, 309, 310, 316, 103, 102, 104, 105, - nil, nil, 234, nil, nil, nil, nil, nil, nil, 45, - nil, nil, 107, 106, 108, 97, 56, 99, 98, 100, - nil, 101, 109, 110, nil, 93, 94, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 227, - nil, nil, 233, nil, nil, 58, 59, nil, nil, 60, - nil, nil, nil, nil, nil, 44, nil, nil, nil, nil, - nil, nil, nil, nil, 232, nil, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, nil, nil, 74, 75, 71, - 62, 57, 83, 95, 96, 63, 64, nil, nil, nil, - 67, nil, 65, 66, 68, 313, 314, 72, 73, nil, - nil, nil, nil, nil, 309, 310, 316, 103, 102, 104, - 105, nil, nil, 234, nil, nil, nil, nil, nil, nil, - 45, nil, nil, 107, 106, 108, 97, 56, 99, 98, - 100, nil, 101, 109, 110, nil, 93, 94, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 227, nil, nil, 233, nil, nil, 58, 59, nil, nil, - 60, nil, nil, nil, nil, nil, 44, nil, nil, nil, - nil, nil, nil, nil, nil, 232, nil, nil, nil, nil, - 91, 81, 84, 85, nil, 86, 88, 87, 89, nil, - nil, nil, nil, 82, 90, nil, nil, nil, 74, 75, - 71, 62, 57, 83, 95, 96, 63, 64, nil, nil, - nil, 67, nil, 65, 66, 68, 313, 314, 72, 73, - nil, nil, nil, nil, nil, 309, 310, 316, 103, 102, - 104, 105, nil, nil, 234, nil, nil, nil, nil, nil, - nil, 45, nil, nil, 107, 106, 108, 97, 56, 99, - 98, 100, nil, 101, 109, 110, nil, 93, 94, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 227, nil, nil, 233, nil, nil, 58, 59, nil, - nil, 60, nil, nil, nil, nil, nil, 44, nil, nil, - nil, nil, nil, nil, nil, nil, 232, nil, nil, nil, - nil, 91, 81, 84, 85, nil, 86, 88, 87, 89, - nil, nil, nil, nil, 82, 90, nil, nil, nil, 74, - 75, 71, 62, 57, 83, 95, 96, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 313, 314, 72, - 73, nil, nil, nil, nil, nil, 309, 310, 316, 103, - 102, 104, 105, nil, nil, 234, nil, nil, nil, nil, - nil, nil, 45, nil, nil, 107, 106, 108, 97, 56, - 99, 98, 100, 288, 101, 109, 110, nil, 93, 94, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 227, nil, nil, 233, nil, nil, 58, 59, - nil, nil, 60, nil, 635, nil, 283, nil, 44, nil, - nil, 289, nil, nil, nil, nil, nil, 232, nil, nil, - nil, nil, 91, 286, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - 74, 75, 71, 62, 57, 83, 95, 96, 63, 64, - nil, nil, nil, 67, nil, 65, 66, 68, 313, 314, - 72, 73, nil, nil, nil, nil, nil, 309, 310, 316, - 103, 102, 104, 105, nil, nil, 234, nil, nil, nil, - nil, nil, nil, 45, nil, nil, 107, 106, 108, 97, - 56, 99, 98, 100, 288, 101, 109, 110, nil, 93, - 94, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 227, nil, nil, 233, nil, nil, 58, - 59, nil, nil, 60, nil, nil, nil, 283, nil, 44, - nil, nil, 289, nil, nil, nil, nil, nil, 232, nil, - nil, nil, nil, 91, 286, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, nil, nil, - nil, 74, 75, 71, 62, 57, 83, 95, 96, 63, - 64, nil, nil, nil, 67, nil, 65, 66, 68, 313, - 314, 72, 73, nil, nil, nil, nil, nil, 309, 310, - 316, 103, 102, 104, 105, nil, nil, 234, nil, nil, - nil, nil, nil, nil, 45, nil, nil, 107, 106, 108, - 97, 56, 99, 98, 100, nil, 101, 109, 110, nil, - 93, 94, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 227, nil, nil, 233, nil, nil, - 58, 59, nil, nil, 60, nil, nil, nil, nil, nil, - 44, nil, nil, nil, nil, nil, nil, nil, nil, 232, - nil, nil, nil, nil, 91, 81, 84, 85, nil, 86, - 88, 87, 89, nil, nil, nil, nil, 82, 90, nil, - nil, nil, nil, nil, nil, 62, nil, 83, 95, 96, - 74, 75, 71, 9, 57, nil, nil, nil, 63, 64, - nil, nil, nil, 67, nil, 65, 66, 68, 30, 31, - 72, 73, nil, nil, nil, nil, nil, 29, 28, 27, - 103, 102, 104, 105, nil, nil, 19, nil, nil, nil, - nil, nil, 8, 45, 296, 10, 107, 106, 108, 97, - 56, 99, 98, 100, nil, 101, 109, 110, nil, 93, - 94, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 40, nil, nil, 33, nil, nil, 58, - 59, nil, nil, 60, nil, 35, nil, nil, nil, 44, - nil, nil, nil, nil, nil, nil, nil, nil, 20, nil, - nil, nil, nil, 91, 81, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, nil, nil, - nil, nil, nil, 391, 62, nil, 83, 95, 96, 74, - 75, 71, nil, 57, nil, nil, nil, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 313, 314, 72, - 73, nil, nil, nil, nil, nil, 309, 310, 316, 103, - 102, 104, 105, nil, nil, 234, nil, nil, nil, nil, - nil, nil, 311, nil, nil, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - nil, nil, 317, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 307, nil, nil, 303, nil, nil, 58, 59, - nil, nil, 60, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - 74, 75, 71, 62, 57, 83, 95, 96, 63, 64, - nil, nil, nil, 67, nil, 65, 66, 68, 30, 31, - 72, 73, nil, nil, nil, nil, nil, 29, 28, 27, - 103, 102, 104, 105, nil, nil, 234, nil, nil, nil, - nil, nil, nil, 45, nil, nil, 107, 106, 108, 97, - 56, 99, 98, 100, 288, 101, 109, 110, nil, 93, - 94, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 227, nil, nil, 233, nil, nil, 58, - 59, nil, nil, 60, nil, 285, nil, 283, nil, 44, - nil, nil, 289, nil, nil, nil, nil, nil, 232, nil, - nil, nil, nil, 91, 286, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, nil, nil, - nil, 74, 75, 71, 62, 57, 83, 95, 96, 63, - 64, nil, nil, nil, 67, nil, 65, 66, 68, 313, - 314, 72, 73, nil, nil, nil, nil, nil, 309, 310, - 316, 103, 102, 104, 105, nil, nil, 234, nil, nil, - nil, nil, nil, nil, 311, nil, nil, 107, 106, 108, - 97, 56, 99, 98, 100, nil, 101, 109, 110, nil, - 93, 94, nil, nil, 317, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 307, nil, nil, 303, nil, nil, - 58, 59, nil, nil, 60, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 91, 81, 84, 85, nil, 86, - 88, 87, 89, nil, nil, nil, nil, 82, 90, nil, - nil, nil, 74, 75, 71, 62, 57, 83, 95, 96, - 63, 64, nil, nil, nil, 67, nil, 65, 66, 68, - 313, 314, 72, 73, nil, nil, nil, nil, nil, 309, - 310, 316, 103, 102, 104, 105, nil, nil, 234, nil, - nil, nil, nil, nil, nil, 45, nil, nil, 107, 106, - 108, 97, 56, 99, 98, 100, nil, 101, 109, 110, - nil, 93, 94, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 227, nil, nil, 233, nil, - nil, 58, 59, nil, nil, 60, nil, nil, nil, nil, - nil, 44, nil, nil, nil, nil, nil, nil, nil, nil, - 232, nil, nil, nil, nil, 91, 81, 84, 85, nil, - 86, 88, 87, 89, nil, nil, nil, nil, 82, 90, - nil, nil, nil, 74, 75, 71, 62, 57, 83, 95, - 96, 63, 64, nil, nil, nil, 67, nil, 65, 66, - 68, 313, 314, 72, 73, nil, nil, nil, nil, nil, - 309, 310, 316, 103, 102, 104, 105, nil, nil, 234, - nil, nil, nil, nil, nil, nil, 45, nil, nil, 107, - 106, 108, 97, 56, 99, 98, 100, nil, 101, 109, - 110, nil, 93, 94, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 227, nil, nil, 233, - nil, nil, 58, 59, nil, nil, 60, nil, nil, nil, - nil, nil, 44, nil, nil, nil, nil, nil, nil, nil, - nil, 232, nil, nil, nil, nil, 91, 81, 84, 85, - nil, 86, 88, 87, 89, nil, nil, nil, nil, 82, - 90, nil, nil, nil, 74, 75, 71, 62, 57, 83, - 95, 96, 63, 64, nil, nil, nil, 67, nil, 65, - 66, 68, 30, 31, 72, 73, nil, nil, nil, nil, - nil, 29, 28, 27, 103, 102, 104, 105, nil, nil, - 19, nil, nil, nil, nil, nil, nil, 45, nil, nil, - 107, 106, 108, 97, 56, 99, 98, 100, nil, 101, - 109, 110, nil, 93, 94, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 227, nil, nil, - 233, nil, nil, 58, 59, nil, nil, 60, nil, nil, - nil, nil, nil, 44, nil, nil, nil, nil, nil, nil, - nil, nil, 20, nil, nil, nil, nil, 91, 81, 84, - 85, nil, 86, 88, 87, 89, nil, nil, nil, nil, - 82, 90, nil, nil, nil, 74, 75, 71, 62, 57, - 83, 95, 96, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 313, 314, 72, 73, nil, nil, nil, - nil, nil, 309, 310, 316, 103, 102, 104, 105, nil, - nil, 234, nil, nil, nil, nil, nil, nil, 45, nil, - nil, 107, 106, 108, 97, 56, 99, 98, 100, 288, - 101, 109, 110, nil, 93, 94, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 227, nil, - nil, 233, nil, nil, 58, 59, nil, nil, 60, nil, - 635, nil, nil, nil, 44, nil, nil, 289, nil, nil, - nil, nil, nil, 232, nil, nil, nil, nil, 91, 286, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, 74, 75, 71, 62, - 57, 83, 95, 96, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 313, 314, 72, 73, nil, nil, - nil, nil, nil, 309, 310, 316, 103, 102, 104, 105, - nil, nil, 234, nil, nil, nil, nil, nil, nil, 45, - nil, nil, 107, 106, 108, 97, 56, 99, 98, 100, - 288, 101, 109, 110, nil, 93, 94, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 227, - nil, nil, 233, nil, nil, 58, 59, nil, nil, 60, - nil, nil, nil, nil, nil, 44, nil, nil, 289, nil, - nil, nil, nil, nil, 232, nil, nil, nil, nil, 91, - 286, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, nil, nil, 74, 75, 71, - 62, 57, 83, 95, 96, 63, 64, nil, nil, nil, - 67, nil, 65, 66, 68, 313, 314, 72, 73, nil, - nil, nil, nil, nil, 309, 310, 316, 103, 102, 104, - 105, nil, nil, 234, nil, nil, nil, nil, nil, nil, - 45, nil, nil, 107, 106, 108, 97, 56, 99, 98, - 100, nil, 101, 109, 110, nil, 93, 94, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 227, nil, nil, 233, nil, nil, 58, 59, nil, nil, - 60, nil, 285, nil, nil, nil, 44, nil, nil, nil, - nil, nil, nil, nil, nil, 232, nil, nil, nil, nil, - 91, 81, 84, 85, nil, 86, 88, 87, 89, nil, - nil, nil, nil, 82, 90, nil, nil, nil, 74, 75, - 71, 62, 57, 83, 95, 96, 63, 64, nil, nil, - nil, 67, nil, 65, 66, 68, 30, 31, 72, 73, - nil, nil, nil, nil, nil, 29, 28, 27, 103, 102, - 104, 105, nil, nil, 234, nil, nil, nil, nil, nil, - nil, 45, nil, nil, 107, 106, 108, 97, 56, 99, - 98, 100, 288, 101, 109, 110, nil, 93, 94, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 227, nil, nil, 233, nil, nil, 58, 59, nil, - nil, 60, nil, 285, nil, 283, nil, 44, nil, nil, - 289, nil, nil, nil, nil, nil, 232, nil, nil, nil, - nil, 91, 286, 84, 85, nil, 86, 88, 87, 89, - nil, nil, nil, nil, 82, 90, nil, nil, nil, 74, - 75, 71, 62, 57, 83, 95, 96, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 30, 31, 72, - 73, nil, nil, nil, nil, nil, 29, 28, 27, 103, - 102, 104, 105, nil, nil, 234, nil, nil, nil, nil, - nil, nil, 45, nil, nil, 107, 106, 108, 97, 56, - 99, 98, 100, 288, 101, 109, 110, nil, 93, 94, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 227, nil, nil, 233, nil, nil, 58, 59, - nil, nil, 60, nil, 285, nil, 283, nil, 44, nil, - nil, 289, nil, nil, nil, nil, nil, 232, nil, nil, - nil, nil, 91, 286, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - 74, 75, 71, 62, 57, 83, 95, 96, 63, 64, - nil, nil, nil, 67, nil, 65, 66, 68, 313, 314, - 72, 73, nil, nil, nil, nil, nil, 309, 310, 316, - 103, 102, 104, 105, nil, nil, 234, nil, nil, nil, - nil, nil, nil, 45, nil, nil, 107, 106, 108, 97, - 56, 99, 98, 100, nil, 101, 109, 110, nil, 93, - 94, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 227, nil, nil, 233, nil, nil, 58, - 59, nil, nil, 60, nil, 739, nil, nil, nil, 44, - nil, nil, nil, nil, nil, nil, nil, nil, 232, nil, - nil, nil, nil, 91, 81, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, nil, nil, - nil, 74, 75, 71, 62, 57, 83, 95, 96, 63, - 64, nil, nil, nil, 67, nil, 65, 66, 68, 30, - 31, 72, 73, nil, nil, nil, nil, nil, 29, 28, - 27, 103, 102, 104, 105, nil, nil, 234, nil, nil, - nil, nil, nil, nil, 45, nil, nil, 107, 106, 108, - 97, 56, 99, 98, 100, nil, 101, 109, 110, nil, - 93, 94, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 227, nil, nil, 233, nil, nil, - 58, 59, nil, nil, 60, nil, nil, nil, nil, nil, - 44, nil, nil, nil, nil, nil, nil, nil, nil, 232, - nil, nil, nil, nil, 91, 81, 84, 85, nil, 86, - 88, 87, 89, nil, nil, nil, nil, 82, 90, nil, - nil, nil, 74, 75, 71, 62, 57, 83, 95, 96, - 63, 64, nil, nil, nil, 67, nil, 65, 66, 68, - 30, 31, 72, 73, nil, nil, nil, nil, nil, 29, - 28, 27, 103, 102, 104, 105, nil, nil, 234, nil, - nil, nil, nil, nil, nil, 45, nil, nil, 107, 106, - 108, 97, 56, 99, 98, 100, 288, 101, 109, 110, - nil, 93, 94, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 227, nil, nil, 233, nil, - nil, 58, 59, nil, nil, 60, nil, 285, nil, 283, - nil, 44, nil, nil, 289, nil, nil, nil, nil, nil, - 232, nil, nil, nil, nil, 91, 286, 84, 85, nil, - 86, 88, 87, 89, nil, nil, nil, nil, 82, 90, - nil, nil, nil, nil, nil, nil, 62, nil, 83, 95, - 96, 74, 75, 71, 9, 57, nil, nil, nil, 63, - 64, nil, nil, nil, 67, nil, 65, 66, 68, 30, - 31, 72, 73, nil, nil, nil, nil, nil, 29, 28, - 27, 103, 102, 104, 105, nil, nil, 19, nil, nil, - nil, nil, nil, 8, 45, nil, 10, 107, 106, 108, - 97, 56, 99, 98, 100, nil, 101, 109, 110, nil, - 93, 94, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 40, nil, nil, 33, nil, nil, - 58, 59, nil, nil, 60, nil, 35, nil, nil, nil, - 44, nil, nil, nil, nil, nil, nil, nil, nil, 20, - nil, nil, nil, nil, 91, 81, 84, 85, nil, 86, - 88, 87, 89, nil, nil, nil, nil, 82, 90, nil, - nil, nil, 74, 75, 71, 62, 57, 83, 95, 96, - 63, 64, nil, nil, nil, 67, nil, 65, 66, 68, - 313, 314, 72, 73, nil, nil, nil, nil, nil, 309, - 310, 316, 103, 102, 104, 105, nil, nil, 234, nil, - nil, nil, nil, nil, nil, 45, nil, nil, 107, 106, - 108, 97, 56, 99, 98, 100, nil, 101, 109, 110, - nil, 93, 94, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 227, nil, nil, 233, nil, - nil, 58, 59, nil, nil, 60, nil, nil, nil, nil, - nil, 44, nil, nil, nil, nil, nil, nil, nil, nil, - 232, nil, nil, nil, nil, 91, 81, 84, 85, nil, - 86, 88, 87, 89, nil, nil, nil, nil, 82, 90, - nil, nil, nil, 74, 75, 71, 62, 57, 83, 95, - 96, 63, 64, nil, nil, nil, 67, nil, 65, 66, - 68, 313, 314, 72, 73, nil, nil, nil, nil, nil, - 309, 310, 316, 103, 102, 104, 105, nil, nil, 234, - nil, nil, nil, nil, nil, nil, 45, nil, nil, 107, - 106, 108, 97, 56, 99, 98, 100, 288, 101, 109, - 110, nil, 93, 94, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 227, nil, nil, 233, - nil, nil, 58, 59, nil, nil, 60, nil, 635, nil, - 283, nil, 44, nil, nil, 289, nil, nil, nil, nil, - nil, 232, nil, nil, nil, nil, 91, 286, 84, 85, - nil, 86, 88, 87, 89, nil, nil, nil, nil, 82, - 90, nil, nil, nil, 74, 75, 71, 62, 57, 83, - 95, 96, 63, 64, nil, nil, nil, 67, nil, 65, - 66, 68, 313, 314, 72, 73, nil, nil, nil, nil, - nil, 309, 310, 316, 103, 102, 104, 105, nil, nil, - 234, nil, nil, nil, nil, nil, nil, 45, nil, nil, - 107, 106, 108, 97, 56, 99, 98, 100, 288, 101, - 109, 110, nil, 93, 94, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 227, nil, nil, - 233, nil, nil, 58, 59, nil, nil, 60, nil, nil, - nil, 283, nil, 44, nil, nil, 289, nil, nil, nil, - nil, nil, 232, nil, nil, nil, nil, 91, 286, 84, - 85, nil, 86, 88, 87, 89, nil, nil, nil, nil, - 82, 90, nil, nil, nil, 74, 75, 71, 62, 57, - 83, 95, 96, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 30, 31, 72, 73, nil, nil, nil, - nil, nil, 29, 28, 27, 103, 102, 104, 105, nil, - nil, 234, nil, nil, nil, nil, nil, nil, 45, nil, - nil, 107, 106, 108, 97, 56, 99, 98, 100, nil, - 101, 109, 110, nil, 93, 94, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 227, nil, - nil, 233, nil, nil, 58, 59, nil, nil, 60, nil, - nil, nil, nil, nil, 44, nil, nil, nil, nil, nil, - nil, nil, nil, 232, nil, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, 74, 75, 71, 62, - 57, 83, 95, 96, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 30, 31, 72, 73, nil, nil, - nil, nil, nil, 29, 28, 27, 103, 102, 104, 105, - nil, nil, 234, nil, nil, nil, nil, nil, nil, 45, - nil, nil, 107, 106, 108, 97, 56, 99, 98, 100, - nil, 101, 109, 110, nil, 93, 94, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 227, - nil, nil, 233, nil, nil, 58, 59, nil, nil, 60, - nil, nil, nil, nil, nil, 44, nil, nil, nil, nil, - nil, nil, nil, nil, 232, nil, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, nil, nil, 74, 75, 71, - 62, 57, 83, 95, 96, 63, 64, nil, nil, nil, - 67, nil, 65, 66, 68, 30, 31, 72, 73, nil, - nil, nil, nil, nil, 29, 28, 27, 103, 102, 104, - 105, nil, nil, 234, nil, nil, nil, nil, nil, nil, - 45, nil, nil, 107, 106, 108, 97, 56, 99, 98, - 100, nil, 101, 109, 110, nil, 93, 94, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 227, nil, nil, 233, nil, nil, 58, 59, nil, nil, - 60, nil, nil, nil, nil, nil, 44, nil, nil, nil, - nil, nil, nil, nil, nil, 232, nil, nil, nil, nil, - 91, 81, 84, 85, nil, 86, 88, 87, 89, nil, - nil, nil, nil, 82, 90, nil, nil, nil, 74, 75, - 71, 62, 57, 83, 95, 96, 63, 64, nil, nil, - nil, 67, nil, 65, 66, 68, 30, 31, 72, 73, - nil, nil, nil, nil, nil, 29, 28, 27, 103, 102, - 104, 105, nil, nil, 234, nil, nil, nil, nil, nil, - nil, 45, nil, nil, 107, 106, 108, 97, 56, 99, - 98, 100, nil, 101, 109, 110, nil, 93, 94, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 227, nil, nil, 233, nil, nil, 58, 59, nil, - nil, 60, nil, nil, nil, nil, nil, 44, nil, nil, - nil, nil, nil, nil, nil, nil, 232, nil, nil, nil, - nil, 91, 81, 84, 85, nil, 86, 88, 87, 89, - nil, nil, nil, nil, 82, 90, nil, nil, nil, 74, - 75, 71, 62, 57, 83, 95, 96, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 313, 314, 72, - 73, nil, nil, nil, nil, nil, 309, 310, 316, 103, - 102, 104, 105, nil, nil, 234, nil, nil, nil, nil, - nil, nil, 45, nil, nil, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 227, nil, nil, 233, nil, nil, 58, 59, - nil, nil, 60, nil, nil, nil, nil, nil, 44, nil, - nil, nil, nil, nil, nil, nil, nil, 232, nil, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - 74, 75, 71, 62, 57, 83, 95, 96, 63, 64, - nil, nil, nil, 67, nil, 65, 66, 68, 313, 314, - 72, 73, nil, nil, nil, nil, nil, 309, 310, 316, - 103, 102, 104, 105, nil, nil, 234, nil, nil, nil, - nil, nil, nil, 45, nil, nil, 107, 106, 108, 97, - 56, 99, 98, 100, nil, 101, 109, 110, nil, 93, - 94, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 227, nil, nil, 233, nil, nil, 58, - 59, nil, nil, 60, nil, nil, nil, nil, nil, 44, - nil, nil, nil, nil, nil, nil, nil, nil, 232, nil, - nil, nil, nil, 91, 81, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, nil, nil, - nil, 74, 75, 71, 62, 57, 83, 95, 96, 63, - 64, nil, nil, nil, 67, nil, 65, 66, 68, 313, - 314, 72, 73, nil, nil, nil, nil, nil, 309, 310, - 316, 103, 102, 104, 105, nil, nil, 234, nil, nil, - nil, nil, nil, nil, 311, nil, nil, 107, 106, 108, - 97, 56, 99, 98, 100, nil, 101, 109, 110, nil, - 93, 94, nil, nil, 317, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 307, nil, nil, 303, nil, nil, - 58, 59, nil, nil, 60, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 91, 81, 84, 85, nil, 86, - 88, 87, 89, nil, nil, nil, nil, 82, 90, nil, - nil, nil, 74, 75, 71, 62, 57, 83, 95, 96, - 63, 64, nil, nil, nil, 67, nil, 65, 66, 68, - 313, 314, 72, 73, nil, nil, nil, nil, nil, 309, - 310, 316, 103, 102, 104, 105, nil, nil, 234, nil, - nil, nil, nil, nil, nil, 311, nil, nil, 107, 106, - 108, 97, 56, 99, 98, 100, nil, 101, 109, 110, - nil, 93, 94, nil, nil, 317, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 307, nil, nil, 303, nil, - nil, 58, 59, nil, nil, 60, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 91, 81, 84, 85, nil, - 86, 88, 87, 89, nil, nil, nil, nil, 82, 90, - nil, nil, nil, 74, 75, 71, 62, 57, 83, 95, - 96, 63, 64, nil, nil, nil, 67, nil, 65, 66, - 68, 313, 314, 72, 73, nil, nil, nil, nil, nil, - 309, 310, 316, 103, 102, 104, 105, nil, nil, 234, - nil, nil, nil, nil, nil, nil, 45, nil, nil, 107, - 106, 108, 97, 56, 99, 98, 100, nil, 101, 109, - 110, nil, 93, 94, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 227, nil, nil, 233, - nil, nil, 58, 59, nil, nil, 60, nil, 407, nil, - nil, nil, 44, nil, nil, nil, nil, nil, nil, nil, - nil, 232, nil, nil, nil, nil, 91, 81, 84, 85, - nil, 86, 88, 87, 89, nil, nil, nil, nil, 82, - 90, nil, nil, nil, 74, 75, 71, 62, 57, 83, - 95, 96, 63, 64, nil, nil, nil, 67, nil, 65, - 66, 68, 313, 314, 72, 73, nil, nil, nil, nil, - nil, 309, 310, 316, 103, 102, 104, 105, nil, nil, - 234, nil, nil, nil, nil, nil, nil, 45, nil, nil, - 107, 106, 108, 97, 56, 99, 98, 100, nil, 101, - 109, 110, nil, 93, 94, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 227, nil, nil, - 233, nil, nil, 58, 59, nil, nil, 60, nil, nil, - nil, nil, nil, 44, nil, nil, nil, nil, nil, nil, - nil, nil, 232, nil, nil, nil, nil, 91, 81, 84, - 85, nil, 86, 88, 87, 89, nil, nil, nil, nil, - 82, 90, nil, nil, nil, 74, 75, 71, 62, 57, - 83, 95, 96, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 30, 31, 72, 73, nil, nil, nil, - nil, nil, 29, 28, 27, 103, 102, 104, 105, nil, - nil, 19, nil, nil, nil, nil, nil, nil, 45, nil, - nil, 107, 106, 108, 97, 56, 99, 98, 100, nil, - 101, 109, 110, nil, 93, 94, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 227, nil, - nil, 233, nil, nil, 58, 59, nil, nil, 60, nil, - nil, nil, nil, nil, 44, nil, nil, nil, nil, nil, - nil, nil, nil, 20, nil, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, 74, 75, 71, 62, - 57, 83, 95, 96, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 30, 31, 72, 73, nil, nil, - nil, nil, nil, 29, 28, 27, 103, 102, 104, 105, - nil, nil, 19, nil, nil, nil, nil, nil, nil, 45, - nil, nil, 107, 106, 108, 97, 56, 99, 98, 100, - nil, 101, 109, 110, nil, 93, 94, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 227, - nil, nil, 233, nil, nil, 58, 59, nil, nil, 60, - nil, nil, nil, nil, nil, 44, nil, nil, nil, nil, - nil, nil, nil, nil, 20, nil, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, nil, nil, 74, 75, 71, - 62, 57, 83, 95, 96, 63, 64, nil, nil, nil, - 67, nil, 65, 66, 68, 313, 314, 72, 73, nil, - nil, nil, nil, nil, 309, 310, 316, 103, 102, 104, - 105, nil, nil, 234, nil, nil, nil, nil, nil, nil, - 45, nil, nil, 107, 106, 108, 97, 56, 99, 98, - 100, nil, 101, 109, 110, nil, 93, 94, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 227, nil, nil, 233, nil, nil, 58, 59, nil, nil, - 60, nil, nil, nil, nil, nil, 44, nil, nil, nil, - nil, nil, nil, nil, nil, 232, nil, nil, nil, nil, - 91, 81, 84, 85, nil, 86, 88, 87, 89, nil, - nil, nil, nil, 82, 90, nil, nil, nil, 74, 75, - 71, 62, 57, 83, 95, 96, 63, 64, nil, nil, - nil, 67, nil, 65, 66, 68, 30, 31, 72, 73, - nil, nil, nil, nil, nil, 29, 28, 27, 103, 102, - 104, 105, nil, nil, 234, nil, nil, nil, nil, nil, - nil, 45, nil, nil, 107, 106, 108, 97, 56, 99, - 98, 100, nil, 101, 109, 110, nil, 93, 94, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 227, nil, nil, 233, nil, nil, 58, 59, nil, - nil, 60, nil, nil, nil, nil, nil, 44, nil, nil, - nil, nil, nil, nil, nil, nil, 232, nil, nil, nil, - nil, 91, 81, 84, 85, nil, 86, 88, 87, 89, - nil, nil, nil, nil, 82, 90, nil, nil, nil, 74, - 75, 71, 62, 57, 83, 95, 96, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 313, 314, 72, - 73, nil, nil, nil, nil, nil, 309, 310, 316, 103, - 102, 104, 105, nil, nil, 234, nil, nil, nil, nil, - nil, nil, 45, nil, nil, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 227, nil, nil, 233, nil, nil, 58, 59, - nil, nil, 60, nil, nil, nil, nil, nil, 44, nil, - nil, nil, nil, nil, nil, nil, nil, 232, nil, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - 74, 75, 71, 62, 57, 83, 95, 96, 63, 64, - nil, nil, nil, 67, nil, 65, 66, 68, 313, 314, - 72, 73, nil, nil, nil, nil, nil, 309, 310, 316, - 103, 102, 104, 105, nil, nil, 234, nil, nil, nil, - nil, nil, nil, 45, nil, nil, 107, 106, 108, 97, - 56, 99, 98, 100, nil, 101, 109, 110, nil, 93, - 94, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 227, nil, nil, 233, nil, nil, 58, - 59, nil, nil, 60, nil, nil, nil, nil, nil, 44, - nil, nil, nil, nil, nil, nil, nil, nil, 232, nil, - nil, nil, nil, 91, 81, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, nil, nil, - nil, 74, 75, 71, 62, 57, 83, 95, 96, 63, - 64, nil, nil, nil, 67, nil, 65, 66, 68, 313, - 314, 72, 73, nil, nil, nil, nil, nil, 309, 310, - 316, 103, 102, 104, 105, nil, nil, 234, nil, nil, - nil, nil, nil, nil, 45, nil, nil, 107, 106, 108, - 97, 56, 99, 98, 100, nil, 101, 109, 110, nil, - 93, 94, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 227, nil, nil, 233, nil, nil, - 58, 59, nil, nil, 60, nil, nil, nil, nil, nil, - 44, nil, nil, nil, nil, nil, nil, nil, nil, 232, - nil, nil, nil, nil, 91, 81, 84, 85, nil, 86, - 88, 87, 89, nil, nil, nil, nil, 82, 90, nil, - nil, nil, 74, 75, 71, 62, 57, 83, 95, 96, - 63, 64, nil, nil, nil, 67, nil, 65, 66, 68, - 313, 314, 72, 73, nil, nil, nil, nil, nil, 309, - 310, 316, 103, 102, 104, 105, nil, nil, 234, nil, - nil, nil, nil, nil, nil, 45, nil, nil, 107, 106, - 108, 97, 56, 99, 98, 100, nil, 101, 109, 110, - nil, 93, 94, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 227, nil, nil, 233, nil, - nil, 58, 59, nil, nil, 60, nil, nil, nil, nil, - nil, 44, nil, nil, nil, nil, nil, nil, nil, nil, - 232, nil, nil, nil, nil, 91, 81, 84, 85, nil, - 86, 88, 87, 89, nil, nil, nil, nil, 82, 90, - nil, nil, nil, 74, 75, 71, 62, 57, 83, 95, - 96, 63, 64, nil, nil, nil, 67, nil, 65, 66, - 68, 313, 314, 72, 73, nil, nil, nil, nil, nil, - 309, 310, 316, 103, 102, 104, 105, nil, nil, 234, - nil, nil, nil, nil, nil, nil, 45, nil, nil, 107, - 106, 108, 97, 56, 99, 98, 100, nil, 101, 109, - 110, nil, 93, 94, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 227, nil, nil, 233, - nil, nil, 58, 59, nil, nil, 60, nil, nil, nil, - nil, nil, 44, nil, nil, nil, nil, nil, nil, nil, - nil, 232, nil, nil, nil, nil, 91, 81, 84, 85, - nil, 86, 88, 87, 89, nil, nil, nil, nil, 82, - 90, nil, nil, nil, 74, 75, 71, 62, 57, 83, - 95, 96, 63, 64, nil, nil, nil, 67, nil, 65, - 66, 68, 313, 314, 72, 73, nil, nil, nil, nil, - nil, 309, 310, 316, 103, 102, 104, 105, nil, nil, - 234, nil, nil, nil, nil, nil, nil, 45, nil, nil, - 107, 106, 108, 97, 56, 99, 98, 100, nil, 101, - 109, 110, nil, 93, 94, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 227, nil, nil, - 233, nil, nil, 58, 59, nil, nil, 60, nil, nil, - nil, nil, nil, 44, nil, nil, nil, nil, nil, nil, - nil, nil, 232, nil, nil, nil, nil, 91, 81, 84, - 85, nil, 86, 88, 87, 89, nil, nil, nil, nil, - 82, 90, nil, nil, nil, 74, 75, 71, 62, 57, - 83, 95, 96, 63, 64, nil, nil, nil, 67, nil, - 65, 66, 68, 30, 31, 72, 73, nil, nil, nil, - nil, nil, 29, 28, 27, 103, 102, 104, 105, nil, - nil, 19, nil, nil, nil, nil, nil, nil, 45, nil, - nil, 107, 106, 108, 97, 56, 99, 98, 100, nil, - 101, 109, 110, nil, 93, 94, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 227, nil, - nil, 233, nil, nil, 58, 59, nil, nil, 60, nil, - nil, nil, nil, nil, 44, nil, nil, nil, nil, nil, - nil, nil, nil, 20, nil, nil, nil, nil, 91, 81, - 84, 85, nil, 86, 88, 87, 89, nil, nil, nil, - nil, 82, 90, nil, nil, nil, 74, 75, 71, 62, - 57, 83, 95, 96, 63, 64, nil, nil, nil, 67, - nil, 65, 66, 68, 313, 314, 72, 73, nil, nil, - nil, nil, nil, 309, 310, 316, 103, 102, 104, 105, - nil, nil, 234, nil, nil, nil, nil, nil, nil, 45, - nil, nil, 107, 106, 108, 97, 56, 99, 98, 100, - nil, 101, 109, 110, nil, 93, 94, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 227, - nil, nil, 233, nil, nil, 58, 59, nil, nil, 60, - nil, 635, nil, nil, nil, 44, nil, nil, nil, nil, - nil, nil, nil, nil, 232, nil, nil, nil, nil, 91, - 81, 84, 85, nil, 86, 88, 87, 89, nil, nil, - nil, nil, 82, 90, nil, nil, nil, 74, 75, 71, - 62, 57, 83, 95, 96, 63, 64, nil, nil, nil, - 67, nil, 65, 66, 68, 313, 314, 72, 73, nil, - nil, nil, nil, nil, 309, 310, 316, 103, 102, 104, - 105, nil, nil, 234, nil, nil, nil, nil, nil, nil, - 45, nil, nil, 107, 106, 108, 97, 56, 99, 98, - 100, 288, 101, 109, 110, nil, 93, 94, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 227, nil, nil, 233, nil, nil, 58, 59, nil, nil, - 60, nil, nil, nil, 283, nil, 44, nil, nil, 289, - nil, nil, nil, nil, nil, 232, nil, nil, nil, nil, - 91, 286, 84, 85, nil, 86, 88, 87, 89, nil, - nil, nil, nil, 82, 90, nil, nil, nil, 74, 75, - 71, 62, 57, 83, 95, 96, 63, 64, nil, nil, - nil, 67, nil, 65, 66, 68, 313, 314, 72, 73, - nil, nil, nil, nil, nil, 309, 310, 316, 103, 102, - 104, 105, nil, nil, 234, nil, nil, nil, nil, nil, - nil, 45, nil, nil, 107, 106, 108, 97, 56, 99, - 98, 100, nil, 101, 109, 110, nil, 93, 94, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 227, nil, nil, 233, nil, nil, 58, 59, nil, - nil, 60, nil, nil, nil, nil, nil, 44, nil, nil, - nil, nil, nil, nil, nil, nil, 232, nil, nil, nil, - nil, 91, 81, 84, 85, nil, 86, 88, 87, 89, - nil, nil, nil, nil, 82, 90, nil, nil, nil, 74, - 75, 71, 62, 57, 83, 95, 96, 63, 64, nil, - nil, nil, 67, nil, 65, 66, 68, 313, 314, 72, - 73, nil, nil, nil, nil, nil, 309, 310, 316, 103, - 102, 104, 105, nil, nil, 234, nil, nil, nil, nil, - nil, nil, 311, nil, nil, 107, 106, 108, 97, 56, - 99, 98, 100, nil, 101, 109, 110, nil, 93, 94, - nil, nil, 317, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 921, nil, nil, 233, nil, nil, 58, 59, - nil, nil, 60, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 91, 81, 84, 85, nil, 86, 88, 87, - 89, nil, nil, nil, nil, 82, 90, nil, nil, nil, - 74, 75, 71, 62, 57, 83, 95, 96, 63, 64, - nil, nil, nil, 67, nil, 65, 66, 68, 313, 314, - 72, 73, nil, nil, nil, nil, nil, 309, 310, 316, - 103, 102, 104, 105, nil, nil, 234, nil, nil, nil, - nil, nil, nil, 311, nil, nil, 107, 106, 108, 97, - 56, 99, 98, 100, nil, 101, 109, 110, nil, 93, - 94, nil, nil, 317, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 927, nil, nil, 233, nil, nil, 58, - 59, nil, nil, 60, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 91, 81, 84, 85, nil, 86, 88, - 87, 89, nil, nil, nil, nil, 82, 90, nil, nil, - nil, 74, 75, 71, 62, 57, 83, 95, 96, 63, - 64, nil, nil, nil, 67, nil, 65, 66, 68, 313, - 314, 72, 73, nil, nil, nil, nil, nil, 309, 310, - 316, 103, 102, 104, 105, nil, nil, 234, nil, nil, - nil, nil, nil, nil, 311, nil, nil, 107, 106, 108, - 97, 56, 99, 98, 100, nil, 101, 109, 110, nil, - 93, 94, nil, nil, 317, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 921, nil, nil, 233, nil, nil, - 58, 59, nil, nil, 60, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 91, 81, 84, 85, nil, 86, - 88, 87, 89, nil, nil, nil, nil, 82, 90, nil, - nil, nil, 74, 75, 71, 62, 57, 83, 95, 96, - 63, 64, nil, nil, nil, 67, nil, 65, 66, 68, - 30, 31, 72, 73, nil, nil, nil, nil, nil, 29, - 28, 27, 103, 102, 104, 105, nil, nil, 234, nil, - nil, nil, nil, nil, nil, 45, nil, nil, 107, 106, - 108, 97, 56, 99, 98, 100, 288, 101, 109, 110, - nil, 93, 94, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 227, nil, nil, 233, nil, - nil, 58, 59, nil, nil, 60, nil, 285, nil, 283, - nil, 44, nil, nil, 289, nil, nil, nil, nil, nil, - 232, nil, nil, nil, nil, 91, 286, 84, 85, nil, - 86, 88, 87, 89, nil, nil, nil, nil, 82, 90, - nil, nil, nil, nil, nil, nil, 62, nil, 83, 95, - 96, 175, 186, 176, 199, 172, 192, 182, 181, 202, - 203, 197, 180, 179, 174, 200, 204, 205, 184, 173, - 187, 191, 193, 185, 178, nil, nil, nil, 194, 201, - 196, 195, 188, 198, 183, 171, 190, 189, nil, nil, - nil, nil, nil, 170, 177, 168, 169, 165, 166, 167, - 126, 128, 125, nil, 127, nil, nil, nil, nil, nil, - nil, nil, 159, 160, nil, 156, 138, 139, 140, 147, - 144, 146, nil, nil, 141, 142, nil, nil, nil, 161, - 162, 148, 149, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 153, 152, nil, 137, - 158, 155, 154, 163, 150, 151, 145, 143, 135, 157, - 136, nil, nil, 164, 91, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 90, 175, - 186, 176, 199, 172, 192, 182, 181, 202, 203, 197, - 180, 179, 174, 200, 204, 205, 184, 173, 187, 191, - 193, 185, 178, nil, nil, nil, 194, 201, 196, 195, - 188, 198, 183, 171, 190, 189, nil, nil, nil, nil, - nil, 170, 177, 168, 169, 165, 166, 167, 126, 128, - nil, nil, 127, nil, nil, nil, nil, nil, nil, nil, - 159, 160, nil, 156, 138, 139, 140, 147, 144, 146, - nil, nil, 141, 142, nil, nil, nil, 161, 162, 148, - 149, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 153, 152, nil, 137, 158, 155, - 154, 163, 150, 151, 145, 143, 135, 157, 136, nil, - nil, 164, 91, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 90, 175, 186, 176, - 199, 172, 192, 182, 181, 202, 203, 197, 180, 179, - 174, 200, 204, 205, 184, 173, 187, 191, 193, 185, - 178, nil, nil, nil, 194, 201, 196, 195, 188, 198, - 183, 171, 190, 189, nil, nil, nil, nil, nil, 170, - 177, 168, 169, 165, 166, 167, 126, 128, nil, nil, - 127, nil, nil, nil, nil, nil, nil, nil, 159, 160, - nil, 156, 138, 139, 140, 147, 144, 146, nil, nil, - 141, 142, nil, nil, nil, 161, 162, 148, 149, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 153, 152, nil, 137, 158, 155, 154, 163, - 150, 151, 145, 143, 135, 157, 136, nil, nil, 164, - 91, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 90, 175, 186, 176, 199, 172, - 192, 182, 181, 202, 203, 197, 180, 179, 174, 200, - 204, 205, 184, 173, 187, 191, 193, 185, 178, nil, - nil, nil, 194, 201, 196, 195, 188, 198, 183, 171, - 190, 189, nil, nil, nil, nil, nil, 170, 177, 168, - 169, 165, 166, 167, 126, 128, nil, nil, 127, nil, - nil, nil, nil, nil, nil, nil, 159, 160, nil, 156, - 138, 139, 140, 147, 144, 146, nil, nil, 141, 142, - nil, nil, nil, 161, 162, 148, 149, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 153, 152, nil, 137, 158, 155, 154, 163, 150, 151, - 145, 143, 135, 157, 136, nil, nil, 164, 91, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 90, 175, 186, 176, 199, 172, 192, 182, - 181, 202, 203, 197, 180, 179, 174, 200, 204, 205, - 184, 173, 187, 191, 193, 185, 178, nil, nil, nil, - 194, 201, 196, 374, 373, 375, 372, 171, 190, 189, - nil, nil, nil, nil, nil, 170, 177, 168, 169, 369, - 370, 371, 367, 128, 99, 98, 368, nil, 101, nil, - nil, nil, nil, nil, 159, 160, nil, 156, 138, 139, - 140, 147, 144, 146, nil, nil, 141, 142, nil, nil, - nil, 161, 162, 148, 149, nil, nil, nil, nil, nil, - 379, nil, nil, nil, nil, nil, nil, nil, 153, 152, - nil, 137, 158, 155, 154, 163, 150, 151, 145, 143, - 135, 157, 136, nil, nil, 164, 175, 186, 176, 199, - 172, 192, 182, 181, 202, 203, 197, 180, 179, 174, - 200, 204, 205, 184, 173, 187, 191, 193, 185, 178, - nil, nil, nil, 194, 201, 196, 195, 188, 198, 183, - 171, 190, 189, nil, nil, nil, nil, nil, 170, 177, - 168, 169, 165, 166, 167, 126, 128, nil, nil, 127, - nil, nil, nil, nil, nil, nil, nil, 159, 160, nil, - 156, 138, 139, 140, 147, 144, 146, nil, nil, 141, - 142, nil, nil, nil, 161, 162, 148, 149, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 153, 152, nil, 137, 158, 155, 154, 163, 150, - 151, 145, 143, 135, 157, 136, 429, 433, 164, nil, - 430, nil, nil, nil, nil, nil, nil, nil, 159, 160, - nil, 156, 138, 139, 140, 147, 144, 146, nil, nil, - 141, 142, nil, nil, nil, 161, 162, 148, 149, nil, - nil, nil, nil, nil, 267, nil, nil, nil, nil, nil, - nil, nil, 153, 152, nil, 137, 158, 155, 154, 163, - 150, 151, 145, 143, 135, 157, 136, 436, 440, 164, - nil, 435, nil, nil, nil, nil, nil, nil, nil, 159, - 160, nil, 156, 138, 139, 140, 147, 144, 146, nil, - nil, 141, 142, nil, nil, nil, 161, 162, 148, 149, - nil, nil, nil, nil, nil, 267, nil, nil, nil, nil, - nil, nil, nil, 153, 152, nil, 137, 158, 155, 154, - 163, 150, 151, 145, 143, 135, 157, 136, 483, 433, - 164, nil, 484, nil, nil, nil, nil, nil, nil, nil, - 159, 160, nil, 156, 138, 139, 140, 147, 144, 146, - nil, nil, 141, 142, nil, nil, nil, 161, 162, 148, - 149, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 153, 152, nil, 137, 158, 155, - 154, 163, 150, 151, 145, 143, 135, 157, 136, 616, - 433, 164, nil, 617, nil, nil, nil, nil, nil, nil, - nil, 159, 160, nil, 156, 138, 139, 140, 147, 144, - 146, nil, nil, 141, 142, nil, nil, nil, 161, 162, - 148, 149, nil, nil, nil, nil, nil, 267, nil, nil, - nil, nil, nil, nil, nil, 153, 152, nil, 137, 158, - 155, 154, 163, 150, 151, 145, 143, 135, 157, 136, - 618, 440, 164, nil, 619, nil, nil, nil, nil, nil, - nil, nil, 159, 160, nil, 156, 138, 139, 140, 147, - 144, 146, nil, nil, 141, 142, nil, nil, nil, 161, - 162, 148, 149, nil, nil, nil, nil, nil, 267, nil, - nil, nil, nil, nil, nil, nil, 153, 152, nil, 137, - 158, 155, 154, 163, 150, 151, 145, 143, 135, 157, - 136, 646, 433, 164, nil, 647, nil, nil, nil, nil, - nil, nil, nil, 159, 160, nil, 156, 138, 139, 140, - 147, 144, 146, nil, nil, 141, 142, nil, nil, nil, - 161, 162, 148, 149, nil, nil, nil, nil, nil, 267, - nil, nil, nil, nil, nil, nil, nil, 153, 152, nil, - 137, 158, 155, 154, 163, 150, 151, 145, 143, 135, - 157, 136, 649, 440, 164, nil, 650, nil, nil, nil, - nil, nil, nil, nil, 159, 160, nil, 156, 138, 139, - 140, 147, 144, 146, nil, nil, 141, 142, nil, nil, - nil, 161, 162, 148, 149, nil, nil, nil, nil, nil, - 267, nil, nil, nil, nil, nil, nil, nil, 153, 152, - nil, 137, 158, 155, 154, 163, 150, 151, 145, 143, - 135, 157, 136, 616, 433, 164, nil, 617, nil, nil, - nil, nil, nil, nil, nil, 159, 160, nil, 156, 138, - 139, 140, 147, 144, 146, nil, nil, 141, 142, nil, - nil, nil, 161, 162, 148, 149, nil, nil, nil, nil, - nil, 267, nil, nil, nil, nil, nil, nil, nil, 153, - 152, nil, 137, 158, 155, 154, 163, 150, 151, 145, - 143, 135, 157, 136, 618, 440, 164, nil, 619, nil, - nil, nil, nil, nil, nil, nil, 159, 160, nil, 156, - 138, 139, 140, 147, 144, 146, nil, nil, 141, 142, - nil, nil, nil, 161, 162, 148, 149, nil, nil, nil, - nil, nil, 267, nil, nil, nil, nil, nil, nil, nil, - 153, 152, nil, 137, 158, 155, 154, 163, 150, 151, - 145, 143, 135, 157, 136, 707, 433, 164, nil, 708, - nil, nil, nil, nil, nil, nil, nil, 159, 160, nil, - 156, 138, 139, 140, 147, 144, 146, nil, nil, 141, - 142, nil, nil, nil, 161, 162, 148, 149, nil, nil, - nil, nil, nil, 267, nil, nil, nil, nil, nil, nil, - nil, 153, 152, nil, 137, 158, 155, 154, 163, 150, - 151, 145, 143, 135, 157, 136, 709, 440, 164, nil, - 710, nil, nil, nil, nil, nil, nil, nil, 159, 160, - nil, 156, 138, 139, 140, 147, 144, 146, nil, nil, - 141, 142, nil, nil, nil, 161, 162, 148, 149, nil, - nil, nil, nil, nil, 267, nil, nil, nil, nil, nil, - nil, nil, 153, 152, nil, 137, 158, 155, 154, 163, - 150, 151, 145, 143, 135, 157, 136, 712, 440, 164, - nil, 713, nil, nil, nil, nil, nil, nil, nil, 159, - 160, nil, 156, 138, 139, 140, 147, 144, 146, nil, - nil, 141, 142, nil, nil, nil, 161, 162, 148, 149, - nil, nil, nil, nil, nil, 267, nil, nil, nil, nil, - nil, nil, nil, 153, 152, nil, 137, 158, 155, 154, - 163, 150, 151, 145, 143, 135, 157, 136, 483, 433, - 164, nil, 484, nil, nil, nil, nil, nil, nil, nil, - 159, 160, nil, 156, 138, 139, 140, 147, 144, 146, - nil, nil, 141, 142, nil, nil, nil, 161, 162, 148, - 149, nil, nil, nil, nil, nil, 267, nil, nil, nil, - nil, nil, nil, nil, 153, 152, nil, 137, 158, 155, - 154, 163, 150, 151, 145, 143, 135, 157, 136, 741, - 433, 164, nil, 742, nil, nil, nil, nil, nil, nil, - nil, 159, 160, nil, 156, 138, 139, 140, 147, 144, - 146, nil, nil, 141, 142, nil, nil, nil, 161, 162, - 148, 149, nil, nil, nil, nil, nil, 267, nil, nil, - nil, nil, nil, nil, nil, 153, 152, nil, 137, 158, - 155, 154, 163, 150, 151, 145, 143, 135, 157, 136, - 744, 440, 164, nil, 743, nil, nil, nil, nil, nil, - nil, nil, 159, 160, nil, 156, 138, 139, 140, 147, - 144, 146, nil, nil, 141, 142, nil, nil, nil, 161, - 162, 148, 149, nil, nil, nil, nil, nil, 267, nil, - nil, nil, nil, nil, nil, nil, 153, 152, nil, 137, - 158, 155, 154, 163, 150, 151, 145, 143, 135, 157, - 136, 1005, 440, 164, nil, 1004, nil, nil, nil, nil, - nil, nil, nil, 159, 160, nil, 156, 138, 139, 140, - 147, 144, 146, nil, nil, 141, 142, nil, nil, nil, - 161, 162, 148, 149, nil, nil, nil, nil, nil, 267, - nil, nil, nil, nil, nil, nil, nil, 153, 152, nil, - 137, 158, 155, 154, 163, 150, 151, 145, 143, 135, - 157, 136, 1008, 433, 164, nil, 1009, nil, nil, nil, - nil, nil, nil, nil, 159, 160, nil, 156, 138, 139, - 140, 147, 144, 146, nil, nil, 141, 142, nil, nil, - nil, 161, 162, 148, 149, nil, nil, nil, nil, nil, - 267, nil, nil, nil, nil, nil, nil, nil, 153, 152, - nil, 137, 158, 155, 154, 163, 150, 151, 145, 143, - 135, 157, 136, 1010, 440, 164, nil, 1011, nil, nil, - nil, nil, nil, nil, nil, 159, 160, nil, 156, 138, - 139, 140, 147, 144, 146, nil, nil, 141, 142, nil, - nil, nil, 161, 162, 148, 149, nil, nil, nil, nil, - nil, 267, nil, nil, nil, nil, nil, nil, nil, 153, - 152, nil, 137, 158, 155, 154, 163, 150, 151, 145, - 143, 135, 157, 136, nil, 678, 164, 675, 674, 673, - 683, 676, nil, 678, nil, 675, 674, 673, 683, 676, - 686, nil, nil, nil, nil, nil, nil, nil, 686, nil, - 678, nil, 675, 674, 673, 683, 676, nil, nil, nil, - nil, nil, 681, 664, nil, 686, nil, nil, nil, nil, - 681, 691, 690, 694, 693, nil, nil, nil, 687, 691, - 690, 694, 693, nil, nil, nil, 687, 681, nil, 678, - nil, 675, 674, 673, 683, 676, 691, 690, 694, 693, - nil, nil, nil, 687, 686, nil, 678, nil, 675, 674, - 673, 683, 676, nil, 678, nil, 675, 674, 673, 683, - 676, 686, nil, nil, nil, nil, 681, nil, nil, 686, - nil, nil, nil, nil, nil, 691, 690, 694, 693, nil, - nil, nil, 687, 681, nil, nil, nil, nil, nil, nil, - nil, 681, 691, 690, 694, 693, nil, nil, nil, 687, - 691, 690, 694, 693, nil, nil, 678, 687, 675, 674, - 673, 683, 676, nil, 678, nil, 675, 674, 673, 683, - 676, 686, nil, nil, nil, nil, nil, nil, nil, 686, - nil, 678, nil, 675, 674, 673, 683, 676, nil, nil, - nil, nil, nil, 681, nil, nil, 686, nil, nil, nil, - nil, 681, 691, 690, 694, 693, nil, nil, nil, 687, - 691, 690, 694, 693, nil, nil, nil, 687, 681, nil, - 678, nil, 675, 674, 673, 683, 676, 691, 690, 694, - 693, nil, nil, nil, 687, 686, nil, 678, nil, 675, - 674, 673, 683, 676, 678, nil, 675, 674, 673, 683, - 676, nil, 686, nil, nil, nil, nil, 681, nil, 686, - nil, 678, nil, 675, 674, 673, 683, 676, 694, 693, - nil, nil, nil, 687, 681, nil, 686, nil, nil, nil, - nil, 681, nil, 691, 690, 694, 693, nil, nil, nil, - 687, nil, 694, 693, nil, nil, nil, 687, 681, nil, - 678, nil, 675, 674, 673, 683, 676, nil, nil, 694, - 693, nil, nil, nil, 687, 686, nil, 678, nil, 675, - 674, 673, 683, 676, 678, nil, 675, 674, 673, 683, - 676, nil, 686, nil, nil, nil, nil, 681, nil, 686, - nil, nil, nil, nil, nil, nil, nil, nil, 694, 693, - nil, nil, nil, 687, 681, nil, nil, nil, nil, nil, - nil, 681, nil, nil, nil, 694, 693, nil, nil, nil, - 687, nil, 694, 693, nil, nil, nil, 687 ] - -racc_action_check = [ - 97, 445, 445, 569, 569, 17, 348, 97, 97, 97, - 1, 341, 97, 97, 97, 24, 97, 26, 19, 386, - 629, 767, 24, 342, 97, 387, 97, 97, 97, 61, - 358, 625, 225, 7, 358, 349, 97, 97, 705, 97, - 97, 97, 97, 97, 865, 891, 924, 925, 928, 352, - 641, 555, 17, 10, 978, 629, 767, 12, 312, 19, - 641, 332, 17, 13, 332, 707, 97, 97, 97, 97, - 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, - 24, 26, 97, 97, 97, 386, 97, 97, 547, 225, - 97, 387, 708, 97, 97, 445, 97, 569, 97, 896, - 97, 896, 97, 97, 26, 97, 97, 97, 97, 97, - 1008, 97, 100, 97, 1009, 348, 61, 793, 625, 100, - 100, 100, 312, 1010, 100, 100, 100, 97, 100, 341, - 97, 97, 97, 97, 341, 97, 100, 97, 100, 100, - 100, 342, 97, 97, 349, 312, 342, 646, 100, 100, - 1011, 100, 100, 100, 100, 100, 705, 1029, 352, 705, - 555, 705, 865, 891, 924, 925, 928, 865, 891, 924, - 925, 928, 978, 548, 707, 709, 825, 978, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, - 100, 100, 547, 15, 100, 100, 100, 547, 100, 100, - 1010, 708, 100, 22, 647, 100, 100, 826, 100, 710, - 100, 3, 100, 646, 100, 100, 3, 100, 100, 100, - 100, 100, 435, 100, 226, 100, 793, 1011, 1008, 435, - 435, 435, 1009, 1008, 37, 435, 435, 1009, 435, 100, - 709, 1010, 100, 100, 100, 100, 1010, 100, 40, 100, - 656, 656, 228, 646, 100, 100, 646, 79, 435, 435, - 782, 435, 435, 435, 435, 435, 646, 45, 1011, 79, - 647, 367, 649, 1011, 710, 1029, 111, 548, 367, 79, - 1029, 226, 548, 414, 709, 825, 565, 565, 435, 435, - 435, 435, 435, 435, 435, 435, 435, 435, 435, 435, - 435, 435, 206, 451, 435, 435, 435, 368, 435, 228, - 647, 826, 435, 647, 368, 435, 826, 227, 710, 229, - 435, 230, 435, 647, 435, 435, 782, 435, 435, 435, - 435, 435, 381, 435, 436, 435, 367, 649, 649, 234, - 414, 436, 436, 436, 656, 266, 292, 436, 436, 435, - 436, 292, 435, 435, 280, 435, 125, 435, 345, 436, - 451, 125, 125, 345, 435, 435, 782, 356, 38, 782, - 436, 436, 368, 436, 436, 436, 436, 436, 649, 782, - 565, 649, 14, 14, 281, 565, 810, 616, 810, 810, - 810, 649, 810, 41, 41, 284, 381, 381, 381, 296, - 436, 436, 436, 436, 436, 436, 436, 436, 436, 436, - 436, 436, 436, 436, 297, 38, 436, 436, 436, 356, - 436, 317, 317, 500, 436, 38, 356, 436, 829, 617, - 299, 356, 436, 829, 436, 356, 436, 436, 39, 436, - 436, 436, 436, 436, 616, 436, 436, 436, 580, 945, - 582, 945, 945, 945, 356, 945, 369, 834, 300, 357, - 741, 436, 834, 369, 436, 436, 618, 436, 810, 436, - 301, 41, 41, 618, 618, 618, 436, 436, 618, 618, - 618, 307, 618, 310, 356, 39, 617, 500, 500, 500, - 370, 618, 618, 618, 618, 39, 311, 370, 333, 317, - 317, 333, 618, 618, 500, 618, 618, 618, 618, 618, - 316, 357, 580, 580, 582, 582, 382, 741, 357, 383, - 318, 369, 580, 357, 582, 384, 322, 357, 325, 742, - 330, 945, 618, 618, 618, 618, 618, 618, 618, 618, - 618, 618, 618, 618, 618, 618, 357, 334, 618, 618, - 618, 336, 618, 618, 336, 370, 618, 385, 321, 618, - 618, 388, 618, 371, 618, 335, 618, 429, 618, 618, - 371, 618, 618, 618, 618, 618, 357, 618, 618, 618, - 382, 382, 382, 383, 383, 383, 742, 372, 337, 384, - 384, 384, 430, 618, 372, 346, 618, 618, 618, 618, - 373, 618, 347, 618, 619, 321, 764, 373, 618, 618, - 351, 619, 619, 619, 429, 321, 619, 619, 619, 353, - 619, 385, 385, 385, 429, 388, 388, 388, 371, 362, - 619, 619, 619, 662, 967, 838, 662, 967, 601, 430, - 619, 619, 397, 619, 619, 619, 619, 619, 403, 430, - 406, 16, 372, 46, 374, 375, 340, 340, 16, 377, - 46, 374, 375, 764, 408, 373, 377, 16, 411, 46, - 619, 619, 619, 619, 619, 619, 619, 619, 619, 619, - 619, 619, 619, 619, 415, 601, 619, 619, 619, 425, - 619, 619, 838, 427, 619, 601, 428, 619, 619, 437, - 619, 447, 619, 459, 619, 460, 619, 619, 457, 619, - 619, 619, 619, 619, 743, 619, 16, 619, 46, 374, - 375, 743, 743, 743, 377, 696, 696, 743, 743, 461, - 743, 619, 465, 462, 619, 619, 619, 619, 487, 619, - 457, 619, 712, 491, 457, 457, 619, 619, 465, 465, - 743, 743, 507, 743, 743, 743, 743, 743, 508, 224, - 798, 798, 511, 304, 465, 513, 224, 518, 465, 465, - 304, 465, 465, 989, 989, 224, 521, 529, 530, 304, - 743, 743, 743, 743, 743, 743, 743, 743, 743, 743, - 743, 743, 743, 743, 712, 305, 743, 743, 743, 531, - 743, 712, 305, 532, 743, 544, 712, 743, 549, 550, - 712, 305, 743, 567, 743, 577, 743, 743, 585, 743, - 743, 743, 743, 743, 224, 743, 744, 743, 304, 712, - 587, 593, 602, 744, 744, 744, 795, 607, 458, 744, - 744, 743, 744, 612, 743, 743, 795, 743, 306, 743, - 620, 744, 621, 622, 624, 306, 743, 743, 628, 712, - 305, 630, 744, 744, 306, 744, 744, 744, 744, 744, - 458, 308, 632, 634, 458, 458, 640, 643, 308, 795, - 795, 645, 648, 651, 795, 573, 573, 308, 652, 573, - 573, 573, 744, 744, 744, 744, 744, 744, 744, 744, - 744, 744, 744, 744, 744, 744, 655, 657, 744, 744, - 744, 323, 744, 306, 350, 666, 744, 667, 323, 744, - 669, 350, 670, 671, 744, 680, 744, 323, 744, 744, - 350, 744, 744, 744, 744, 744, 308, 744, 744, 744, - 773, 688, 773, 773, 773, 773, 773, 360, 6, 6, - 6, 6, 6, 744, 360, 773, 744, 744, 27, 744, - 692, 744, 695, 360, 698, 27, 27, 27, 744, 744, - 27, 27, 27, 703, 27, 706, 323, 773, 715, 350, - 719, 476, 738, 27, 27, 27, 773, 773, 773, 773, - 740, 749, 770, 773, 27, 27, 781, 27, 27, 27, - 27, 27, 888, 785, 888, 888, 888, 413, 888, 788, - 789, 794, 360, 476, 413, 809, 811, 476, 476, 773, - 476, 476, 816, 413, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 819, 888, - 27, 27, 27, 828, 832, 27, 833, 27, 27, 836, - 837, 27, 27, 846, 27, 847, 27, 849, 27, 850, - 27, 27, 851, 27, 27, 27, 27, 27, 28, 27, - 27, 27, 413, 853, 854, 28, 28, 28, 855, 856, - 28, 28, 28, 517, 28, 27, 871, 872, 27, 27, - 517, 27, 876, 27, 28, 28, 877, 879, 880, 517, - 27, 882, 885, 887, 28, 28, 893, 28, 28, 28, - 28, 28, 894, 900, 904, 558, 917, 650, 921, 927, - 947, 957, 558, 960, 650, 961, 962, 963, 965, 650, - 974, 558, 979, 650, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, 517, 980, - 28, 28, 28, 981, 982, 28, 983, 28, 28, 984, - 985, 28, 28, 987, 28, 990, 28, 991, 28, 1004, - 28, 28, 1005, 28, 28, 28, 28, 28, 56, 28, - 558, 28, 650, 1007, 1020, 56, 56, 56, 1024, 1025, - 56, 56, 56, 920, 56, 28, 1026, 1027, 28, 28, - 920, 28, 1030, 28, 56, 56, 56, 1031, 1038, 920, - 28, nil, nil, nil, 56, 56, nil, 56, 56, 56, - 56, 56, nil, 713, nil, 926, nil, 971, nil, nil, - 713, nil, 926, nil, 971, 713, nil, nil, nil, 713, - nil, 926, nil, 971, 56, 56, 56, 56, 56, 56, - 56, 56, 56, 56, 56, 56, 56, 56, 920, 907, - 56, 56, 56, nil, nil, 56, nil, nil, 56, 907, - nil, 56, 56, nil, 56, nil, 56, nil, 56, nil, - 56, 56, nil, 56, 56, 56, 56, 56, 713, 56, - 926, 56, 971, 918, nil, 918, 918, 918, nil, 918, - nil, nil, 907, 907, nil, 56, 477, 907, 56, 56, - 56, 56, nil, 56, 431, 56, nil, nil, nil, nil, - 56, 431, 431, 431, nil, nil, 431, 431, 431, 681, - 431, 681, 681, 681, nil, 681, nil, nil, 477, 431, - 431, 431, 477, 477, nil, 477, 477, nil, nil, nil, - 431, 431, nil, 431, 431, 431, 431, 431, 946, nil, - 946, 946, 946, nil, 946, 807, 681, 807, 807, 807, - 1003, 807, 1003, 1003, 1003, 681, 1003, nil, nil, nil, - 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, - 431, 431, 431, 431, nil, 946, 431, 431, 431, nil, - nil, 431, 807, 431, 431, nil, nil, 431, 431, nil, - 431, 807, 431, nil, 431, nil, 431, 431, nil, 431, - 431, 431, 431, 431, nil, 431, 431, 431, 803, nil, - 803, 803, 803, 803, 803, 295, 295, 295, 295, 295, - nil, 431, nil, 803, 431, 431, 440, 431, nil, 431, - nil, nil, nil, 440, 440, 440, 431, nil, 440, 440, - 440, nil, 440, 467, 886, 803, 886, 886, 886, nil, - 886, 440, 440, 440, 440, nil, 803, 803, nil, 467, - 467, 803, 440, 440, nil, 440, 440, 440, 440, 440, - 986, nil, 986, 986, 986, 467, 986, 467, nil, 467, - 467, 886, 467, 467, nil, nil, 467, nil, 467, nil, - 886, nil, 440, 440, 440, 440, 440, 440, 440, 440, - 440, 440, 440, 440, 440, 440, nil, 986, 440, 440, - 440, nil, nil, 440, nil, nil, 440, nil, nil, 440, - 440, nil, 440, nil, 440, nil, 440, nil, 440, 440, - nil, 440, 440, 440, 440, 440, nil, 440, 440, 440, - nil, nil, 988, nil, 988, 988, 988, nil, 988, nil, - nil, nil, nil, 440, nil, nil, 440, 440, 440, 440, - nil, 440, 441, 440, nil, nil, nil, nil, 440, 441, - 441, 441, nil, nil, 441, 441, 441, 468, 441, 988, - 329, 329, 329, 329, 329, nil, nil, 441, 441, 441, - 441, nil, nil, 468, 468, nil, nil, nil, 441, 441, - nil, 441, 441, 441, 441, 441, nil, nil, nil, 468, - nil, 468, nil, 468, 468, nil, 468, 468, nil, nil, - 468, nil, 468, 505, 505, 505, 505, 505, 441, 441, - 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, - 441, 441, nil, nil, 441, 441, 441, nil, nil, 441, - nil, nil, 441, nil, nil, 441, 441, nil, 441, nil, - 441, nil, 441, nil, 441, 441, nil, 441, 441, 441, - 441, 441, nil, 441, 441, 441, nil, nil, 1019, nil, - 1019, 1019, 1019, nil, 1019, nil, nil, nil, nil, 441, - nil, nil, 441, 441, 441, 441, nil, 441, 482, 441, - nil, nil, nil, nil, 441, 482, 482, 482, nil, nil, - 482, 482, 482, 463, 482, 1019, nil, nil, nil, nil, - nil, nil, nil, 482, 482, nil, nil, nil, nil, 463, - 463, nil, nil, nil, 482, 482, nil, 482, 482, 482, - 482, 482, nil, nil, nil, 463, nil, 463, nil, 463, - 463, nil, 463, 463, nil, nil, nil, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, nil, 21, - 21, nil, nil, 21, 21, 482, nil, nil, nil, nil, - nil, nil, 482, nil, nil, nil, nil, 482, 482, 21, - nil, 21, nil, 21, 21, nil, 21, 21, 21, 21, - 21, nil, 21, nil, nil, nil, nil, nil, nil, nil, - 482, 482, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 21, nil, nil, 482, nil, nil, 482, nil, - nil, nil, nil, 482, 0, 0, 0, 0, 0, 0, - 482, nil, nil, 0, 0, nil, nil, nil, 0, nil, - 0, 0, 0, 0, 0, 0, 0, nil, nil, nil, - nil, nil, 0, 0, 0, 0, 0, 0, 0, nil, - nil, 0, nil, nil, nil, nil, 418, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, nil, - 0, 0, 0, nil, 0, 0, 0, 0, 0, 418, - 418, 418, 418, 418, 418, 418, 418, 418, 418, 418, - nil, 418, 418, nil, nil, 418, 418, nil, 0, nil, - nil, 0, nil, nil, 0, 0, nil, nil, 0, nil, - 0, 418, nil, 418, 0, 418, 418, nil, 418, 418, - 418, 418, 418, 0, 418, nil, nil, nil, 0, 0, - 0, 0, nil, 0, 0, 0, 0, nil, nil, nil, - nil, 0, 0, nil, 418, nil, 418, nil, nil, 0, - nil, 0, 0, 0, 33, 33, 33, 33, 33, 33, - nil, nil, nil, 33, 33, nil, nil, nil, 33, nil, - 33, 33, 33, 33, 33, 33, 33, nil, nil, nil, - nil, nil, 33, 33, 33, 33, 33, 33, 33, nil, - nil, 33, nil, nil, nil, nil, 424, 33, 33, 33, - 33, 33, 33, 33, 33, 33, 33, 33, 33, nil, - 33, 33, 33, nil, 33, 33, 33, 33, 33, 424, - 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, - nil, 424, 424, nil, nil, 424, 424, nil, 33, nil, - nil, 33, nil, nil, 33, 33, nil, nil, 33, nil, - 33, 424, nil, 424, 33, 424, 424, nil, 424, 424, - 424, 424, 424, 33, 424, nil, nil, nil, 33, 33, - 33, 33, nil, 33, 33, 33, 33, nil, nil, nil, - nil, 33, 33, nil, 424, nil, nil, nil, nil, 33, - nil, 33, 33, 33, 123, 123, 123, 123, 123, 123, - nil, nil, nil, 123, 123, nil, nil, nil, 123, nil, - 123, 123, 123, 123, 123, 123, 123, nil, nil, nil, - nil, nil, 123, 123, 123, 123, 123, 123, 123, nil, - nil, 123, nil, nil, nil, nil, nil, 123, 123, 123, - 123, 123, 123, 123, 123, 123, 123, 123, 123, nil, - 123, 123, 123, nil, 123, 123, 123, 123, 123, 278, - 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, - nil, 278, 278, nil, nil, 278, 278, nil, 123, nil, - nil, 123, nil, nil, 123, 123, nil, nil, 123, nil, - 123, 278, nil, 278, 123, 278, 278, nil, 278, 278, - 278, 278, 278, 123, 278, nil, nil, nil, 123, 123, - 123, 123, nil, 123, 123, 123, 123, nil, nil, nil, - nil, 123, 123, nil, 278, nil, nil, nil, nil, 123, - nil, 123, 123, 123, 208, 208, 208, 208, 208, 208, - nil, nil, nil, 208, 208, nil, nil, nil, 208, nil, - 208, 208, 208, 208, 208, 208, 208, nil, nil, nil, - nil, nil, 208, 208, 208, 208, 208, 208, 208, nil, - nil, 208, nil, nil, nil, nil, nil, 208, 208, 208, - 208, 208, 208, 208, 208, 208, 208, 208, 208, nil, - 208, 208, 208, nil, 208, 208, 208, 208, 208, 480, - 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, - nil, 480, 480, nil, nil, 480, 480, nil, 208, nil, - nil, 208, nil, nil, 208, 208, nil, nil, 208, nil, - 208, 480, nil, 480, 208, 480, 480, nil, 480, 480, - 480, 480, 480, 208, 480, nil, nil, nil, 208, 208, - 208, 208, nil, 208, 208, 208, 208, nil, nil, nil, - nil, 208, 208, 480, 480, nil, nil, nil, nil, 208, - nil, 208, 208, 208, 233, 233, 233, 233, 233, 233, - nil, nil, nil, 233, 233, nil, nil, nil, 233, nil, - 233, 233, 233, 233, 233, 233, 233, nil, nil, nil, - nil, nil, 233, 233, 233, 233, 233, 233, 233, nil, - nil, 233, nil, nil, nil, nil, nil, 233, 233, 233, - 233, 233, 233, 233, 233, 233, 233, 233, 233, nil, - 233, 233, 233, nil, 233, 233, 233, 233, 233, 527, - 527, 527, 527, 527, 527, 527, 527, 527, 527, 527, - nil, 527, 527, nil, nil, 527, 527, nil, 233, nil, - nil, 233, nil, nil, 233, 233, nil, nil, 233, nil, - 233, 527, nil, 527, 233, 527, 527, nil, 527, 527, - 527, 527, 527, 233, 527, nil, nil, nil, 233, 233, - 233, 233, nil, 233, 233, 233, 233, nil, nil, nil, - nil, 233, 233, nil, 527, nil, nil, nil, nil, 233, - nil, 233, 233, 233, 298, 298, 298, 298, 298, 298, - nil, nil, nil, 298, 298, nil, nil, nil, 298, nil, - 298, 298, 298, 298, 298, 298, 298, nil, nil, nil, - nil, nil, 298, 298, 298, 298, 298, 298, 298, nil, - nil, 298, nil, nil, nil, nil, nil, 298, 298, 298, - 298, 298, 298, 298, 298, 298, 298, 298, 298, nil, - 298, 298, 298, nil, 298, 298, 298, 298, 298, 746, - 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, - nil, 746, 746, nil, nil, 746, 746, nil, 298, nil, - nil, 298, nil, nil, 298, 298, nil, nil, 298, nil, - 298, 746, nil, 746, 298, 746, 746, nil, 746, 746, - 746, 746, 746, 298, 746, nil, nil, nil, 298, 298, - 298, 298, nil, 298, 298, 298, 298, nil, nil, nil, - nil, 298, 298, nil, 746, nil, nil, nil, nil, 298, - nil, 298, 298, 298, 303, 303, 303, 303, 303, 303, - nil, nil, nil, 303, 303, nil, nil, nil, 303, nil, - 303, 303, 303, 303, 303, 303, 303, nil, nil, nil, - nil, nil, 303, 303, 303, 303, 303, 303, 303, nil, - nil, 303, nil, nil, nil, nil, nil, 303, 303, 303, - 303, 303, 303, 303, 303, 303, 303, 303, 303, nil, - 303, 303, 303, nil, 303, 303, 303, 303, 303, 843, - 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, - nil, 843, 843, nil, nil, 843, 843, nil, 303, nil, - nil, 303, nil, nil, 303, 303, nil, nil, 303, nil, - 303, 843, nil, 843, 303, 843, 843, nil, 843, 843, - 843, 843, 843, 303, 843, nil, nil, nil, 303, 303, - 303, 303, nil, 303, 303, 303, 303, nil, nil, nil, - nil, 303, 303, nil, 843, nil, nil, nil, nil, 303, - nil, 303, 303, 303, 328, 328, 328, 328, 328, 328, - nil, nil, nil, 328, 328, nil, nil, nil, 328, nil, - 328, 328, 328, 328, 328, 328, 328, nil, nil, nil, - nil, nil, 328, 328, 328, 328, 328, 328, 328, nil, - nil, 328, nil, nil, nil, nil, nil, 328, 328, 328, - 328, 328, 328, 328, 328, 328, 328, 328, 328, nil, - 328, 328, 328, nil, 328, 328, 328, 328, 328, 455, - 455, 455, 455, 455, 455, 455, 455, 455, 455, 455, - nil, 455, 455, nil, nil, 455, 455, nil, 328, nil, - nil, 328, nil, nil, 328, 328, nil, nil, 328, nil, - 328, 455, nil, 455, 328, 455, 455, nil, 455, 455, - 455, 455, 455, 328, 455, nil, nil, nil, 328, 328, - 328, 328, nil, 328, 328, 328, 328, nil, nil, nil, - nil, 328, 328, nil, nil, nil, nil, nil, nil, 328, - nil, 328, 328, 328, 506, 506, 506, 506, 506, 506, - nil, nil, nil, 506, 506, nil, nil, nil, 506, nil, - 506, 506, 506, 506, 506, 506, 506, nil, nil, nil, - nil, nil, 506, 506, 506, 506, 506, 506, 506, nil, - nil, 506, nil, nil, nil, nil, nil, 506, 506, 506, - 506, 506, 506, 506, 506, 506, 506, 506, 506, nil, - 506, 506, 506, nil, 506, 506, 506, 506, 506, 456, - 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, - nil, 456, 456, nil, nil, 456, 456, nil, 506, nil, - nil, 506, nil, nil, 506, 506, nil, nil, 506, nil, - 506, 456, nil, 456, 506, 456, 456, nil, 456, 456, - 456, 456, 456, 506, 456, nil, nil, nil, 506, 506, - 506, 506, nil, 506, 506, 506, 506, nil, nil, nil, - nil, 506, 506, nil, nil, nil, nil, nil, nil, 506, - nil, 506, 506, 506, 543, 543, 543, 543, 543, 543, - nil, nil, nil, 543, 543, nil, nil, nil, 543, nil, - 543, 543, 543, 543, 543, 543, 543, nil, nil, nil, - nil, nil, 543, 543, 543, 543, 543, 543, 543, nil, - nil, 543, nil, nil, nil, nil, nil, 543, 543, 543, - 543, 543, 543, 543, 543, 543, 543, 543, 543, nil, - 543, 543, 543, nil, 543, 543, 543, 543, 543, 466, - 466, 466, 466, 466, 466, 466, nil, nil, 466, 466, - nil, nil, nil, nil, nil, 466, 466, nil, 543, nil, - nil, 543, nil, nil, 543, 543, nil, nil, 543, nil, - 543, 466, nil, 466, 543, 466, 466, nil, 466, 466, - 466, 466, 466, 543, 466, nil, nil, nil, 543, 543, - 543, 543, nil, 543, 543, 543, 543, nil, nil, nil, - nil, 543, 543, nil, nil, nil, nil, nil, nil, 543, - nil, 543, 543, 543, 546, 546, 546, 546, 546, 546, - nil, nil, nil, 546, 546, nil, nil, nil, 546, nil, - 546, 546, 546, 546, 546, 546, 546, nil, nil, nil, - nil, nil, 546, 546, 546, 546, 546, 546, 546, nil, - nil, 546, nil, nil, nil, nil, nil, 546, 546, 546, - 546, 546, 546, 546, 546, 546, 546, 546, 546, nil, - 546, 546, 546, nil, 546, 546, 546, 546, 546, 469, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 469, 469, nil, 546, nil, - nil, 546, nil, nil, 546, 546, nil, nil, 546, nil, - 546, 469, nil, 469, 546, 469, 469, nil, 469, 469, - nil, nil, 469, 546, 469, nil, nil, nil, 546, 546, - 546, 546, nil, 546, 546, 546, 546, nil, nil, nil, - nil, 546, 546, nil, nil, nil, nil, nil, nil, 546, - nil, 546, 546, 546, 566, 566, 566, 566, 566, 566, - nil, nil, nil, 566, 566, nil, nil, nil, 566, nil, - 566, 566, 566, 566, 566, 566, 566, nil, nil, nil, - nil, nil, 566, 566, 566, 566, 566, 566, 566, nil, - nil, 566, nil, nil, nil, nil, nil, 566, 566, 566, - 566, 566, 566, 566, 566, 566, 566, 566, 566, nil, - 566, 566, 566, nil, 566, 566, 566, 566, 566, 470, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 470, 470, nil, 566, nil, - nil, 566, nil, nil, 566, 566, nil, nil, 566, nil, - 566, 470, nil, 470, 566, 470, 470, nil, 470, 470, - nil, nil, 470, 566, 470, nil, nil, nil, 566, 566, - 566, 566, nil, 566, 566, 566, 566, nil, nil, nil, - nil, 566, 566, nil, nil, nil, nil, nil, nil, 566, - nil, 566, 566, 566, 716, 716, 716, 716, 716, 716, - nil, nil, nil, 716, 716, nil, nil, nil, 716, nil, - 716, 716, 716, 716, 716, 716, 716, nil, nil, nil, - nil, nil, 716, 716, 716, 716, 716, 716, 716, nil, - nil, 716, nil, nil, nil, nil, nil, 716, 716, 716, - 716, 716, 716, 716, 716, 716, 716, 716, 716, nil, - 716, 716, 716, nil, 716, 716, 716, 716, 716, 471, - 471, 471, 471, 471, 471, 471, nil, nil, 471, 471, - nil, nil, nil, nil, nil, 471, 471, nil, 716, nil, - nil, 716, nil, nil, 716, 716, nil, nil, 716, nil, - 716, 471, nil, 471, 716, 471, 471, nil, 471, 471, - 471, 471, 471, 716, 471, nil, nil, nil, 716, 716, - 716, 716, nil, 716, 716, 716, 716, nil, nil, nil, - nil, 716, 716, nil, nil, nil, nil, nil, nil, 716, - nil, 716, 716, 716, 720, 720, 720, 720, 720, 720, - nil, nil, nil, 720, 720, nil, nil, nil, 720, nil, - 720, 720, 720, 720, 720, 720, 720, nil, nil, nil, - nil, nil, 720, 720, 720, 720, 720, 720, 720, nil, - nil, 720, nil, nil, nil, nil, nil, 720, 720, 720, - 720, 720, 720, 720, 720, 720, 720, 720, 720, nil, - 720, 720, 720, nil, 720, 720, 720, 720, 720, 472, - 472, 472, 472, 472, 472, 472, nil, nil, 472, 472, - nil, nil, nil, nil, nil, 472, 472, nil, 720, nil, - nil, 720, nil, nil, 720, 720, nil, nil, 720, nil, - 720, 472, nil, 472, 720, 472, 472, nil, 472, 472, - 472, 472, 472, 720, 472, nil, nil, nil, 720, 720, - 720, 720, nil, 720, 720, 720, 720, nil, nil, nil, - nil, 720, 720, nil, nil, nil, nil, nil, nil, 720, - nil, 720, 720, 720, 730, 730, 730, 730, 730, 730, - nil, nil, nil, 730, 730, nil, nil, nil, 730, nil, - 730, 730, 730, 730, 730, 730, 730, nil, nil, nil, - nil, nil, 730, 730, 730, 730, 730, 730, 730, nil, - nil, 730, nil, nil, nil, nil, nil, 730, 730, 730, - 730, 730, 730, 730, 730, 730, 730, 730, 730, nil, - 730, 730, 730, nil, 730, 730, 730, 730, 730, 473, - 473, 473, 473, 473, 473, 473, nil, nil, 473, 473, - nil, nil, nil, nil, nil, 473, 473, nil, 730, nil, - nil, 730, nil, nil, 730, 730, nil, nil, 730, nil, - 730, 473, nil, 473, 730, 473, 473, nil, 473, 473, - 473, 473, 473, 730, 473, nil, nil, nil, 730, 730, - 730, 730, nil, 730, 730, 730, 730, nil, nil, nil, - nil, 730, 730, nil, nil, nil, nil, nil, nil, 730, - nil, 730, 730, 730, 775, 775, 775, 775, 775, 775, - nil, nil, nil, 775, 775, nil, nil, nil, 775, nil, - 775, 775, 775, 775, 775, 775, 775, nil, nil, nil, - nil, nil, 775, 775, 775, 775, 775, 775, 775, nil, - nil, 775, nil, nil, nil, nil, nil, 775, 775, 775, - 775, 775, 775, 775, 775, 775, 775, 775, 775, nil, - 775, 775, 775, nil, 775, 775, 775, 775, 775, 474, - 474, 474, 474, 474, 474, 474, nil, nil, 474, 474, - nil, nil, nil, nil, nil, 474, 474, nil, 775, nil, - nil, 775, nil, nil, 775, 775, nil, nil, 775, nil, - 775, 474, nil, 474, 775, 474, 474, nil, 474, 474, - 474, 474, 474, 775, 474, nil, nil, nil, 775, 775, - 775, 775, nil, 775, 775, 775, 775, nil, nil, nil, - nil, 775, 775, nil, nil, nil, nil, nil, nil, 775, - nil, 775, 775, 775, 787, 787, 787, 787, 787, 787, - nil, nil, nil, 787, 787, nil, nil, nil, 787, nil, - 787, 787, 787, 787, 787, 787, 787, nil, nil, nil, - nil, nil, 787, 787, 787, 787, 787, 787, 787, nil, - nil, 787, nil, nil, nil, nil, nil, 787, 787, 787, - 787, 787, 787, 787, 787, 787, 787, 787, 787, nil, - 787, 787, 787, nil, 787, 787, 787, 787, 787, 475, - 475, 475, 475, 475, 475, 475, nil, nil, 475, 475, - nil, nil, nil, nil, nil, 475, 475, nil, 787, nil, - nil, 787, nil, nil, 787, 787, nil, nil, 787, nil, - 787, 475, nil, 475, 787, 475, 475, nil, 475, 475, - 475, 475, 475, 787, 475, nil, nil, nil, 787, 787, - 787, 787, nil, 787, 787, 787, 787, nil, nil, nil, - nil, 787, 787, nil, nil, nil, nil, nil, nil, 787, - nil, 787, 787, 787, 820, 820, 820, 820, 820, 820, - nil, nil, nil, 820, 820, nil, nil, nil, 820, nil, - 820, 820, 820, 820, 820, 820, 820, nil, nil, nil, - nil, nil, 820, 820, 820, 820, 820, 820, 820, nil, - nil, 820, nil, nil, nil, nil, nil, 820, 820, 820, - 820, 820, 820, 820, 820, 820, 820, 820, 820, nil, - 820, 820, 820, nil, 820, 820, 820, 820, 820, 478, - 478, 478, 478, 478, 478, 478, nil, nil, 478, 478, - nil, nil, nil, nil, nil, 478, 478, nil, 820, nil, - nil, 820, nil, nil, 820, 820, nil, nil, 820, nil, - 820, 478, nil, 478, 820, 478, 478, nil, 478, 478, - 478, 478, 478, 820, 478, nil, nil, nil, 820, 820, - 820, 820, nil, 820, 820, 820, 820, nil, nil, nil, - nil, 820, 820, nil, nil, nil, nil, nil, nil, 820, - nil, 820, 820, 820, 821, 821, 821, 821, 821, 821, - nil, nil, nil, 821, 821, nil, nil, nil, 821, nil, - 821, 821, 821, 821, 821, 821, 821, nil, nil, nil, - nil, nil, 821, 821, 821, 821, 821, 821, 821, nil, - nil, 821, nil, nil, nil, nil, nil, 821, 821, 821, - 821, 821, 821, 821, 821, 821, 821, 821, 821, nil, - 821, 821, 821, nil, 821, 821, 821, 821, 821, 479, - 479, 479, 479, 479, 479, 479, 479, nil, 479, 479, - nil, nil, nil, nil, nil, 479, 479, nil, 821, nil, - nil, 821, nil, nil, 821, 821, nil, nil, 821, nil, - 821, 479, nil, 479, 821, 479, 479, nil, 479, 479, - 479, 479, 479, 821, 479, nil, nil, nil, 821, 821, - 821, 821, nil, 821, 821, 821, 821, nil, nil, nil, - nil, 821, 821, nil, nil, nil, nil, nil, nil, 821, - nil, 821, 821, 821, 824, 824, 824, 824, 824, 824, - nil, nil, nil, 824, 824, nil, nil, nil, 824, nil, - 824, 824, 824, 824, 824, 824, 824, nil, nil, nil, - nil, nil, 824, 824, 824, 824, 824, 824, 824, nil, - nil, 824, nil, nil, nil, nil, nil, 824, 824, 824, - 824, 824, 824, 824, 824, 824, 824, 824, 824, nil, - 824, 824, 824, nil, 824, 824, 824, 824, 824, 464, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 464, 464, nil, 824, nil, - nil, 824, nil, nil, 824, 824, nil, nil, 824, nil, - 824, 464, nil, 464, 824, 464, 464, nil, 464, 464, - nil, nil, nil, 824, nil, nil, nil, nil, 824, 824, - 824, 824, nil, 824, 824, 824, 824, nil, nil, nil, - nil, 824, 824, nil, nil, nil, nil, nil, nil, 824, - nil, 824, 824, 824, 830, 830, 830, 830, 830, 830, - nil, nil, nil, 830, 830, nil, nil, nil, 830, nil, - 830, 830, 830, 830, 830, 830, 830, nil, nil, nil, - nil, nil, 830, 830, 830, 830, 830, 830, 830, nil, - nil, 830, nil, nil, nil, nil, nil, 830, 830, 830, - 830, 830, 830, 830, 830, 830, 830, 830, 830, nil, - 830, 830, 830, nil, 830, 830, 830, 830, 830, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 830, nil, - nil, 830, nil, nil, 830, 830, nil, nil, 830, nil, - 830, nil, nil, nil, 830, nil, nil, nil, nil, nil, - nil, nil, nil, 830, nil, nil, nil, nil, 830, 830, - 830, 830, nil, 830, 830, 830, 830, nil, nil, nil, - nil, 830, 830, nil, nil, nil, nil, nil, nil, 830, - nil, 830, 830, 830, 844, 844, 844, 844, 844, 844, - nil, nil, nil, 844, 844, nil, nil, nil, 844, nil, - 844, 844, 844, 844, 844, 844, 844, nil, nil, nil, - nil, nil, 844, 844, 844, 844, 844, 844, 844, nil, - nil, 844, nil, nil, nil, nil, nil, 844, 844, 844, - 844, 844, 844, 844, 844, 844, 844, 844, 844, nil, - 844, 844, 844, nil, 844, 844, 844, 844, 844, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 844, nil, - nil, 844, nil, nil, 844, 844, nil, nil, 844, nil, - 844, nil, nil, nil, 844, nil, nil, nil, nil, nil, - nil, nil, nil, 844, nil, nil, nil, nil, 844, 844, - 844, 844, nil, 844, 844, 844, 844, nil, nil, nil, - nil, 844, 844, nil, nil, nil, nil, nil, nil, 844, - nil, 844, 844, 844, 862, 862, 862, 862, 862, 862, - nil, nil, nil, 862, 862, nil, nil, nil, 862, nil, - 862, 862, 862, 862, 862, 862, 862, nil, nil, nil, - nil, nil, 862, 862, 862, 862, 862, 862, 862, nil, - nil, 862, nil, nil, nil, nil, nil, 862, 862, 862, - 862, 862, 862, 862, 862, 862, 862, 862, 862, nil, - 862, 862, 862, nil, 862, 862, 862, 862, 862, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 862, nil, - nil, 862, nil, nil, 862, 862, nil, nil, 862, nil, - 862, nil, nil, nil, 862, nil, nil, nil, nil, nil, - nil, nil, nil, 862, nil, nil, nil, nil, 862, 862, - 862, 862, nil, 862, 862, 862, 862, nil, nil, nil, - nil, 862, 862, nil, nil, nil, nil, nil, nil, 862, - nil, 862, 862, 862, 923, 923, 923, 923, 923, 923, - nil, nil, nil, 923, 923, nil, nil, nil, 923, nil, - 923, 923, 923, 923, 923, 923, 923, nil, nil, nil, - nil, nil, 923, 923, 923, 923, 923, 923, 923, nil, - nil, 923, nil, nil, nil, nil, nil, 923, 923, 923, - 923, 923, 923, 923, 923, 923, 923, 923, 923, nil, - 923, 923, 923, nil, 923, 923, 923, 923, 923, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 923, nil, - nil, 923, nil, nil, 923, 923, nil, nil, 923, nil, - 923, nil, nil, nil, 923, nil, nil, nil, nil, nil, - nil, nil, nil, 923, nil, nil, nil, nil, 923, 923, - 923, 923, nil, 923, 923, 923, 923, nil, nil, nil, - nil, 923, 923, nil, nil, nil, nil, nil, nil, 923, - nil, 923, 923, 923, 930, 930, 930, 930, 930, 930, - nil, nil, nil, 930, 930, nil, nil, nil, 930, nil, - 930, 930, 930, 930, 930, 930, 930, nil, nil, nil, - nil, nil, 930, 930, 930, 930, 930, 930, 930, nil, - nil, 930, nil, nil, nil, nil, nil, 930, 930, 930, - 930, 930, 930, 930, 930, 930, 930, 930, 930, nil, - 930, 930, 930, nil, 930, 930, 930, 930, 930, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 930, nil, - nil, 930, nil, nil, 930, 930, nil, nil, 930, nil, - 930, nil, nil, nil, 930, nil, nil, nil, nil, nil, - nil, nil, nil, 930, nil, nil, nil, nil, 930, 930, - 930, 930, nil, 930, 930, 930, 930, nil, nil, nil, - nil, 930, 930, nil, nil, nil, nil, nil, nil, 930, - nil, 930, 930, 930, 931, 931, 931, 931, 931, 931, - nil, nil, nil, 931, 931, nil, nil, nil, 931, nil, - 931, 931, 931, 931, 931, 931, 931, nil, nil, nil, - nil, nil, 931, 931, 931, 931, 931, 931, 931, nil, - nil, 931, nil, nil, nil, nil, nil, 931, 931, 931, - 931, 931, 931, 931, 931, 931, 931, 931, 931, nil, - 931, 931, 931, nil, 931, 931, 931, 931, 931, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 931, nil, - nil, 931, nil, nil, 931, 931, nil, nil, 931, nil, - 931, nil, nil, nil, 931, nil, nil, nil, nil, nil, - nil, nil, nil, 931, nil, nil, nil, nil, 931, 931, - 931, 931, nil, 931, 931, 931, 931, nil, nil, nil, - nil, 931, 931, nil, nil, nil, nil, nil, nil, 931, - nil, 931, 931, 931, 948, 948, 948, 948, 948, 948, - nil, nil, nil, 948, 948, nil, nil, nil, 948, nil, - 948, 948, 948, 948, 948, 948, 948, nil, nil, nil, - nil, nil, 948, 948, 948, 948, 948, 948, 948, nil, - nil, 948, nil, nil, nil, nil, nil, 948, 948, 948, - 948, 948, 948, 948, 948, 948, 948, 948, 948, nil, - 948, 948, 948, nil, 948, 948, 948, 948, 948, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 948, nil, - nil, 948, nil, nil, 948, 948, nil, nil, 948, nil, - 948, nil, nil, nil, 948, nil, nil, nil, nil, nil, - nil, nil, nil, 948, nil, nil, nil, nil, 948, 948, - 948, 948, nil, 948, 948, 948, 948, nil, nil, nil, - nil, 948, 948, nil, nil, nil, nil, nil, nil, 948, - nil, 948, 948, 948, 954, 954, 954, 954, 954, 954, - nil, nil, nil, 954, 954, nil, nil, nil, 954, nil, - 954, 954, 954, 954, 954, 954, 954, nil, nil, nil, - nil, nil, 954, 954, 954, 954, 954, 954, 954, nil, - nil, 954, nil, nil, nil, nil, nil, 954, 954, 954, - 954, 954, 954, 954, 954, 954, 954, 954, 954, nil, - 954, 954, 954, nil, 954, 954, 954, 954, 954, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 954, nil, - nil, 954, nil, nil, 954, 954, nil, nil, 954, nil, - 954, nil, nil, nil, 954, nil, nil, nil, nil, nil, - nil, nil, nil, 954, nil, nil, nil, nil, 954, 954, - 954, 954, nil, 954, 954, 954, 954, nil, nil, nil, - nil, 954, 954, nil, nil, nil, nil, nil, nil, 954, - nil, 954, 954, 954, 956, 956, 956, 956, 956, 956, - nil, nil, nil, 956, 956, nil, nil, nil, 956, nil, - 956, 956, 956, 956, 956, 956, 956, nil, nil, nil, - nil, nil, 956, 956, 956, 956, 956, 956, 956, nil, - nil, 956, nil, nil, nil, nil, nil, 956, 956, 956, - 956, 956, 956, 956, 956, 956, 956, 956, 956, nil, - 956, 956, 956, nil, 956, 956, 956, 956, 956, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 956, nil, - nil, 956, nil, nil, 956, 956, nil, nil, 956, nil, - 956, nil, nil, nil, 956, nil, nil, nil, nil, nil, - nil, nil, nil, 956, nil, nil, nil, nil, 956, 956, - 956, 956, nil, 956, 956, 956, 956, nil, nil, nil, - nil, 956, 956, nil, nil, nil, nil, nil, nil, 956, - nil, 956, 956, 956, 5, 5, 5, 5, 5, nil, - nil, nil, 5, 5, nil, nil, nil, 5, nil, 5, - 5, 5, 5, 5, 5, 5, nil, nil, nil, nil, - nil, 5, 5, 5, 5, 5, 5, 5, nil, nil, - 5, nil, nil, nil, nil, nil, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, nil, 5, - 5, 5, nil, 5, 5, 5, 5, 5, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 5, nil, nil, - 5, nil, nil, 5, 5, nil, nil, 5, nil, 5, - nil, nil, nil, 5, nil, nil, nil, nil, nil, nil, - nil, nil, 5, nil, nil, nil, nil, 5, 5, 5, - 5, nil, 5, 5, 5, 5, nil, nil, nil, nil, - 5, 5, nil, nil, nil, 20, 20, 20, 5, 20, - 5, 5, 5, 20, 20, nil, nil, nil, 20, nil, - 20, 20, 20, 20, 20, 20, 20, nil, nil, nil, - nil, nil, 20, 20, 20, 20, 20, 20, 20, nil, - nil, 20, nil, nil, nil, nil, nil, nil, 20, nil, - nil, 20, 20, 20, 20, 20, 20, 20, 20, nil, - 20, 20, 20, nil, 20, 20, 20, 20, 20, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 20, nil, - nil, 20, nil, nil, 20, 20, nil, nil, 20, nil, - nil, nil, nil, nil, 20, nil, nil, nil, nil, nil, - nil, nil, nil, 20, nil, nil, nil, nil, 20, 20, - 20, 20, nil, 20, 20, 20, 20, nil, nil, nil, - nil, 20, 20, nil, nil, nil, 29, 29, 29, 20, - 29, 20, 20, 20, 29, 29, nil, nil, nil, 29, - nil, 29, 29, 29, 29, 29, 29, 29, nil, nil, - nil, nil, nil, 29, 29, 29, 29, 29, 29, 29, - nil, nil, 29, nil, nil, nil, nil, nil, nil, 29, - nil, nil, 29, 29, 29, 29, 29, 29, 29, 29, - 29, 29, 29, 29, nil, 29, 29, 29, 29, 29, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 29, - nil, nil, 29, nil, nil, 29, 29, nil, nil, 29, - nil, 29, nil, 29, nil, 29, nil, nil, 29, nil, - nil, nil, nil, nil, 29, nil, nil, nil, nil, 29, - 29, 29, 29, nil, 29, 29, 29, 29, nil, nil, - nil, nil, 29, 29, nil, nil, nil, 30, 30, 30, - 29, 30, 29, 29, 29, 30, 30, nil, nil, nil, - 30, nil, 30, 30, 30, 30, 30, 30, 30, nil, - nil, nil, nil, nil, 30, 30, 30, 30, 30, 30, - 30, nil, nil, 30, nil, nil, nil, nil, nil, nil, - 30, nil, nil, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, nil, 30, 30, 30, 30, - 30, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 30, nil, nil, 30, nil, nil, 30, 30, nil, nil, - 30, nil, 30, nil, 30, nil, 30, nil, nil, 30, - nil, nil, nil, nil, nil, 30, nil, nil, nil, nil, - 30, 30, 30, 30, nil, 30, 30, 30, 30, nil, - nil, nil, nil, 30, 30, nil, nil, nil, 31, 31, - 31, 30, 31, 30, 30, 30, 31, 31, nil, nil, - nil, 31, nil, 31, 31, 31, 31, 31, 31, 31, - nil, nil, nil, nil, nil, 31, 31, 31, 31, 31, - 31, 31, nil, nil, 31, nil, nil, nil, nil, nil, - nil, 31, nil, nil, 31, 31, 31, 31, 31, 31, - 31, 31, 31, 31, 31, 31, nil, 31, 31, 31, - 31, 31, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 31, nil, nil, 31, nil, nil, 31, 31, nil, - nil, 31, nil, 31, nil, 31, nil, 31, nil, nil, - 31, nil, nil, nil, nil, nil, 31, nil, nil, nil, - nil, 31, 31, 31, 31, nil, 31, 31, 31, 31, - nil, nil, nil, nil, 31, 31, nil, nil, nil, 34, - 34, 34, 31, 34, 31, 31, 31, 34, 34, nil, - nil, nil, 34, nil, 34, 34, 34, 34, 34, 34, - 34, nil, nil, nil, nil, nil, 34, 34, 34, 34, - 34, 34, 34, nil, nil, 34, nil, nil, nil, nil, - nil, nil, 34, nil, nil, 34, 34, 34, 34, 34, - 34, 34, 34, nil, 34, 34, 34, nil, 34, 34, - nil, nil, 34, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 34, nil, nil, 34, nil, nil, 34, 34, - nil, nil, 34, nil, 34, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 34, 34, 34, 34, nil, 34, 34, 34, - 34, nil, nil, nil, nil, 34, 34, nil, nil, nil, - 35, 35, 35, 34, 35, 34, 34, 34, 35, 35, - nil, nil, nil, 35, nil, 35, 35, 35, 35, 35, - 35, 35, nil, nil, nil, nil, nil, 35, 35, 35, - 35, 35, 35, 35, nil, nil, 35, nil, nil, nil, - nil, nil, nil, 35, nil, nil, 35, 35, 35, 35, - 35, 35, 35, 35, nil, 35, 35, 35, nil, 35, - 35, nil, nil, 35, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 35, nil, nil, 35, nil, nil, 35, - 35, nil, nil, 35, nil, nil, 914, nil, 914, 914, - 914, 914, 914, nil, nil, nil, nil, nil, nil, nil, - nil, 914, nil, 35, 35, 35, 35, nil, 35, 35, - 35, 35, nil, nil, nil, nil, 35, 35, nil, nil, - nil, 35, nil, 914, 35, nil, 35, 35, 35, 42, - 42, 42, nil, 42, 914, 914, nil, 42, 42, 914, - nil, nil, 42, nil, 42, 42, 42, 42, 42, 42, - 42, nil, nil, nil, nil, nil, 42, 42, 42, 42, - 42, 42, 42, nil, nil, 42, nil, nil, nil, nil, - nil, nil, 42, nil, nil, 42, 42, 42, 42, 42, - 42, 42, 42, nil, 42, 42, 42, nil, 42, 42, - 42, 42, 42, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 42, nil, nil, 42, nil, nil, 42, 42, - nil, nil, 42, nil, nil, nil, nil, nil, 42, nil, - nil, nil, nil, nil, nil, nil, nil, 42, nil, nil, - nil, nil, 42, 42, 42, 42, nil, 42, 42, 42, - 42, nil, nil, nil, nil, 42, 42, nil, nil, nil, - 43, 43, 43, 42, 43, 42, 42, 42, 43, 43, - nil, nil, nil, 43, nil, 43, 43, 43, 43, 43, - 43, 43, nil, nil, nil, nil, nil, 43, 43, 43, - 43, 43, 43, 43, nil, nil, 43, nil, nil, nil, - nil, nil, nil, 43, nil, nil, 43, 43, 43, 43, - 43, 43, 43, 43, nil, 43, 43, 43, nil, 43, - 43, 43, 43, 43, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 43, nil, nil, 43, nil, nil, 43, - 43, nil, nil, 43, nil, nil, nil, nil, nil, 43, - nil, nil, nil, nil, nil, nil, nil, nil, 43, nil, - nil, nil, nil, 43, 43, 43, 43, nil, 43, 43, - 43, 43, nil, nil, nil, nil, 43, 43, nil, nil, - nil, 44, 44, 44, 43, 44, 43, 43, 43, 44, - 44, nil, nil, nil, 44, nil, 44, 44, 44, 44, - 44, 44, 44, nil, nil, nil, nil, nil, 44, 44, - 44, 44, 44, 44, 44, nil, nil, 44, nil, nil, - nil, nil, nil, nil, 44, nil, nil, 44, 44, 44, - 44, 44, 44, 44, 44, nil, 44, 44, 44, nil, - 44, 44, 44, 44, 44, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 44, nil, nil, 44, nil, nil, - 44, 44, nil, nil, 44, nil, nil, nil, nil, nil, - 44, nil, nil, nil, nil, nil, nil, nil, nil, 44, - nil, nil, nil, nil, 44, 44, 44, 44, nil, 44, - 44, 44, 44, nil, nil, nil, nil, 44, 44, nil, - nil, nil, nil, nil, nil, 44, nil, 44, 44, 44, - 58, 58, 58, 58, 58, nil, nil, nil, 58, 58, - nil, nil, nil, 58, nil, 58, 58, 58, 58, 58, - 58, 58, nil, nil, nil, nil, nil, 58, 58, 58, - 58, 58, 58, 58, nil, nil, 58, nil, nil, nil, - nil, nil, 58, 58, nil, 58, 58, 58, 58, 58, - 58, 58, 58, 58, nil, 58, 58, 58, nil, 58, - 58, 58, 58, 58, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 58, nil, nil, 58, nil, nil, 58, - 58, nil, nil, 58, nil, 58, nil, nil, nil, 58, - nil, nil, nil, nil, nil, nil, nil, nil, 58, nil, - nil, nil, nil, 58, 58, 58, 58, nil, 58, 58, - 58, 58, nil, nil, nil, nil, 58, 58, nil, nil, - nil, 59, 59, 59, 58, 59, 58, 58, 58, 59, - 59, nil, nil, nil, 59, nil, 59, 59, 59, 59, - 59, 59, 59, nil, nil, nil, nil, nil, 59, 59, - 59, 59, 59, 59, 59, nil, nil, 59, nil, nil, - nil, nil, nil, nil, 59, nil, nil, 59, 59, 59, - 59, 59, 59, 59, 59, 59, 59, 59, 59, nil, - 59, 59, 59, 59, 59, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 59, nil, nil, 59, nil, nil, - 59, 59, nil, nil, 59, nil, 59, nil, nil, nil, - 59, nil, nil, 59, nil, nil, nil, nil, nil, 59, - nil, nil, nil, nil, 59, 59, 59, 59, nil, 59, - 59, 59, 59, nil, nil, nil, nil, 59, 59, nil, - nil, nil, 60, 60, 60, 59, 60, 59, 59, 59, - 60, 60, nil, nil, nil, 60, nil, 60, 60, 60, - 60, 60, 60, 60, nil, nil, nil, nil, nil, 60, - 60, 60, 60, 60, 60, 60, nil, nil, 60, nil, - nil, nil, nil, nil, nil, 60, nil, nil, 60, 60, - 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, - nil, 60, 60, 60, 60, 60, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 60, nil, nil, 60, nil, - nil, 60, 60, nil, nil, 60, nil, nil, nil, nil, - nil, 60, nil, nil, 60, nil, nil, nil, nil, nil, - 60, nil, nil, nil, nil, 60, 60, 60, 60, nil, - 60, 60, 60, 60, nil, nil, nil, nil, 60, 60, - nil, nil, nil, 63, 63, 63, 60, 63, 60, 60, - 60, 63, 63, nil, nil, nil, 63, nil, 63, 63, - 63, 63, 63, 63, 63, nil, nil, nil, nil, nil, - 63, 63, 63, 63, 63, 63, 63, nil, nil, 63, - nil, nil, nil, nil, nil, nil, 63, nil, nil, 63, - 63, 63, 63, 63, 63, 63, 63, nil, 63, 63, - 63, nil, 63, 63, 63, 63, 63, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 63, nil, nil, 63, - nil, nil, 63, 63, nil, nil, 63, nil, nil, nil, - nil, nil, 63, nil, nil, nil, nil, nil, nil, nil, - nil, 63, nil, nil, nil, nil, 63, 63, 63, 63, - nil, 63, 63, 63, 63, nil, nil, nil, nil, 63, - 63, nil, nil, nil, 64, 64, 64, 63, 64, 63, - 63, 63, 64, 64, nil, nil, nil, 64, nil, 64, - 64, 64, 64, 64, 64, 64, nil, nil, nil, nil, - nil, 64, 64, 64, 64, 64, 64, 64, nil, nil, - 64, nil, nil, nil, nil, nil, nil, 64, nil, nil, - 64, 64, 64, 64, 64, 64, 64, 64, nil, 64, - 64, 64, nil, 64, 64, 64, 64, 64, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 64, nil, nil, - 64, nil, nil, 64, 64, nil, nil, 64, nil, nil, - nil, nil, nil, 64, nil, nil, nil, nil, nil, nil, - nil, nil, 64, nil, nil, nil, nil, 64, 64, 64, - 64, nil, 64, 64, 64, 64, nil, nil, nil, nil, - 64, 64, nil, nil, nil, 67, 67, 67, 64, 67, - 64, 64, 64, 67, 67, nil, nil, nil, 67, nil, - 67, 67, 67, 67, 67, 67, 67, nil, nil, nil, - nil, nil, 67, 67, 67, 67, 67, 67, 67, nil, - nil, 67, nil, nil, nil, nil, nil, nil, 67, nil, - nil, 67, 67, 67, 67, 67, 67, 67, 67, nil, - 67, 67, 67, nil, 67, 67, 67, 67, 67, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 67, nil, - nil, 67, nil, nil, 67, 67, nil, nil, 67, nil, - nil, nil, nil, nil, 67, nil, nil, nil, nil, nil, - nil, nil, nil, 67, nil, nil, nil, nil, 67, 67, - 67, 67, nil, 67, 67, 67, 67, nil, nil, nil, - nil, 67, 67, 67, nil, nil, nil, nil, 67, 67, - nil, 67, 67, 67, 68, 68, 68, nil, 68, nil, - nil, nil, 68, 68, nil, nil, nil, 68, nil, 68, - 68, 68, 68, 68, 68, 68, nil, nil, nil, nil, - nil, 68, 68, 68, 68, 68, 68, 68, nil, nil, - 68, nil, nil, nil, nil, nil, nil, 68, nil, nil, - 68, 68, 68, 68, 68, 68, 68, 68, nil, 68, - 68, 68, nil, 68, 68, nil, nil, 68, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 68, nil, nil, - 68, nil, nil, 68, 68, nil, nil, 68, nil, 68, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 68, 68, 68, - 68, nil, 68, 68, 68, 68, nil, nil, nil, nil, - 68, 68, nil, nil, nil, 69, 69, 69, 68, 69, - 68, 68, 68, 69, 69, nil, nil, nil, 69, nil, - 69, 69, 69, 69, 69, 69, 69, nil, nil, nil, - nil, nil, 69, 69, 69, 69, 69, 69, 69, nil, - nil, 69, nil, nil, nil, nil, nil, nil, 69, nil, - nil, 69, 69, 69, 69, 69, 69, 69, 69, nil, - 69, 69, 69, nil, 69, 69, nil, nil, 69, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 69, nil, nil, 69, nil, - nil, 69, nil, nil, 69, 69, nil, nil, 69, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 69, 69, - 69, 69, nil, 69, 69, 69, 69, nil, nil, nil, - nil, 69, 69, nil, nil, nil, 70, 70, 70, 69, - 70, 69, 69, 69, 70, 70, nil, nil, nil, 70, - nil, 70, 70, 70, 70, 70, 70, 70, nil, nil, - nil, nil, nil, 70, 70, 70, 70, 70, 70, 70, - nil, nil, 70, nil, nil, nil, nil, nil, nil, 70, - nil, nil, 70, 70, 70, 70, 70, 70, 70, 70, - nil, 70, 70, 70, nil, 70, 70, nil, nil, 70, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 70, - nil, nil, 70, nil, nil, 70, 70, nil, nil, 70, - nil, nil, 936, nil, 936, 936, 936, 936, 936, nil, - nil, nil, nil, nil, nil, nil, nil, 936, nil, 70, - 70, 70, 70, nil, 70, 70, 70, 70, nil, nil, - nil, nil, 70, 70, nil, nil, nil, nil, nil, 936, - 70, nil, 70, 70, 70, 113, 113, 113, 113, 113, - 936, 936, nil, 113, 113, 936, nil, nil, 113, nil, - 113, 113, 113, 113, 113, 113, 113, nil, nil, nil, - nil, nil, 113, 113, 113, 113, 113, 113, 113, nil, - nil, 113, nil, nil, nil, nil, nil, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 113, 113, nil, - 113, 113, 113, nil, 113, 113, 113, 113, 113, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 113, nil, - nil, 113, nil, nil, 113, 113, nil, nil, 113, nil, - 113, nil, nil, nil, 113, nil, nil, nil, nil, nil, - nil, nil, nil, 113, nil, nil, nil, nil, 113, 113, - 113, 113, nil, 113, 113, 113, 113, nil, nil, nil, - nil, 113, 113, nil, nil, nil, nil, nil, 113, 113, - nil, 113, 113, 113, 118, 118, 118, nil, 118, nil, - nil, nil, 118, 118, nil, nil, nil, 118, nil, 118, - 118, 118, 118, 118, 118, 118, nil, nil, nil, nil, - nil, 118, 118, 118, 118, 118, 118, 118, nil, nil, - 118, nil, nil, nil, nil, nil, nil, 118, nil, nil, - 118, 118, 118, 118, 118, 118, 118, 118, nil, 118, - 118, 118, nil, 118, 118, 118, 118, 118, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 118, nil, nil, - 118, nil, nil, 118, 118, nil, nil, 118, nil, nil, - nil, nil, nil, 118, nil, nil, nil, nil, nil, nil, - nil, nil, 118, nil, nil, nil, nil, 118, 118, 118, - 118, nil, 118, 118, 118, 118, nil, nil, nil, nil, - 118, 118, nil, nil, nil, 119, 119, 119, 118, 119, - 118, 118, 118, 119, 119, nil, nil, nil, 119, nil, - 119, 119, 119, 119, 119, 119, 119, nil, nil, nil, - nil, nil, 119, 119, 119, 119, 119, 119, 119, nil, - nil, 119, nil, nil, nil, nil, nil, nil, 119, nil, - nil, 119, 119, 119, 119, 119, 119, 119, 119, nil, - 119, 119, 119, nil, 119, 119, 119, 119, 119, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 119, nil, - nil, 119, nil, nil, 119, 119, nil, nil, 119, nil, - nil, nil, nil, nil, 119, nil, nil, nil, nil, nil, - nil, nil, nil, 119, nil, nil, nil, nil, 119, 119, - 119, 119, nil, 119, 119, 119, 119, nil, nil, nil, - nil, 119, 119, nil, nil, nil, 120, 120, 120, 119, - 120, 119, 119, 119, 120, 120, nil, nil, nil, 120, - nil, 120, 120, 120, 120, 120, 120, 120, nil, nil, - nil, nil, nil, 120, 120, 120, 120, 120, 120, 120, - nil, nil, 120, nil, nil, nil, nil, nil, nil, 120, - nil, nil, 120, 120, 120, 120, 120, 120, 120, 120, - nil, 120, 120, 120, nil, 120, 120, 120, 120, 120, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 120, - nil, nil, 120, nil, nil, 120, 120, nil, nil, 120, - nil, nil, nil, nil, nil, 120, nil, nil, nil, nil, - nil, nil, nil, nil, 120, nil, nil, nil, nil, 120, - 120, 120, 120, nil, 120, 120, 120, 120, nil, nil, - nil, nil, 120, 120, nil, nil, nil, 121, 121, 121, - 120, 121, 120, 120, 120, 121, 121, nil, nil, nil, - 121, nil, 121, 121, 121, 121, 121, 121, 121, nil, - nil, nil, nil, nil, 121, 121, 121, 121, 121, 121, - 121, nil, nil, 121, nil, nil, nil, nil, nil, nil, - 121, nil, nil, 121, 121, 121, 121, 121, 121, 121, - 121, nil, 121, 121, 121, nil, 121, 121, 121, 121, - 121, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 121, nil, nil, 121, nil, nil, 121, 121, nil, nil, - 121, nil, nil, nil, nil, nil, 121, nil, nil, nil, - nil, nil, nil, nil, nil, 121, nil, nil, nil, nil, - 121, 121, 121, 121, nil, 121, 121, 121, 121, nil, - nil, nil, nil, 121, 121, nil, nil, nil, nil, nil, - nil, 121, nil, 121, 121, 121, 122, 122, 122, 122, - 122, nil, nil, nil, 122, 122, nil, nil, nil, 122, - nil, 122, 122, 122, 122, 122, 122, 122, nil, nil, - nil, nil, nil, 122, 122, 122, 122, 122, 122, 122, - nil, nil, 122, nil, nil, nil, nil, nil, 122, 122, - nil, 122, 122, 122, 122, 122, 122, 122, 122, 122, - nil, 122, 122, 122, nil, 122, 122, 122, 122, 122, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 122, - nil, nil, 122, nil, nil, 122, 122, nil, nil, 122, - nil, 122, nil, nil, nil, 122, nil, nil, nil, nil, - nil, nil, nil, nil, 122, nil, nil, nil, nil, 122, - 122, 122, 122, nil, 122, 122, 122, 122, nil, nil, - nil, nil, 122, 122, nil, nil, nil, 209, 209, 209, - 122, 209, 122, 122, 122, 209, 209, nil, nil, nil, - 209, nil, 209, 209, 209, 209, 209, 209, 209, nil, - nil, nil, nil, nil, 209, 209, 209, 209, 209, 209, - 209, nil, nil, 209, nil, nil, nil, nil, nil, nil, - 209, nil, nil, 209, 209, 209, 209, 209, 209, 209, - 209, nil, 209, 209, 209, nil, 209, 209, 209, 209, - 209, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 209, nil, nil, 209, nil, nil, 209, 209, nil, nil, - 209, nil, 209, nil, nil, nil, 209, nil, nil, nil, - nil, nil, nil, nil, nil, 209, nil, nil, nil, nil, - 209, 209, 209, 209, nil, 209, 209, 209, 209, nil, - nil, nil, nil, 209, 209, nil, nil, nil, 210, 210, - 210, 209, 210, 209, 209, 209, 210, 210, nil, nil, - nil, 210, nil, 210, 210, 210, 210, 210, 210, 210, - nil, nil, nil, nil, nil, 210, 210, 210, 210, 210, - 210, 210, nil, nil, 210, nil, nil, nil, nil, nil, - nil, 210, nil, nil, 210, 210, 210, 210, 210, 210, - 210, 210, nil, 210, 210, 210, nil, 210, 210, 210, - 210, 210, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 210, nil, nil, 210, nil, nil, 210, 210, nil, - nil, 210, nil, 210, nil, nil, nil, 210, nil, nil, - nil, nil, nil, nil, nil, nil, 210, nil, nil, nil, - nil, 210, 210, 210, 210, nil, 210, 210, 210, 210, - nil, nil, nil, nil, 210, 210, nil, nil, nil, 211, - 211, 211, 210, 211, 210, 210, 210, 211, 211, nil, - nil, nil, 211, nil, 211, 211, 211, 211, 211, 211, - 211, nil, nil, nil, nil, nil, 211, 211, 211, 211, - 211, 211, 211, nil, nil, 211, nil, nil, nil, nil, - nil, nil, 211, nil, nil, 211, 211, 211, 211, 211, - 211, 211, 211, nil, 211, 211, 211, nil, 211, 211, - 211, 211, 211, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 211, nil, nil, 211, nil, nil, 211, 211, - nil, nil, 211, nil, nil, nil, nil, nil, 211, nil, - nil, nil, nil, nil, nil, nil, nil, 211, nil, nil, - nil, nil, 211, 211, 211, 211, nil, 211, 211, 211, - 211, nil, nil, nil, nil, 211, 211, nil, nil, nil, - 212, 212, 212, 211, 212, 211, 211, 211, 212, 212, - nil, nil, nil, 212, nil, 212, 212, 212, 212, 212, - 212, 212, nil, nil, nil, nil, nil, 212, 212, 212, - 212, 212, 212, 212, nil, nil, 212, nil, nil, nil, - nil, nil, nil, 212, nil, nil, 212, 212, 212, 212, - 212, 212, 212, 212, nil, 212, 212, 212, nil, 212, - 212, 212, 212, 212, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 212, nil, nil, 212, nil, nil, 212, - 212, nil, nil, 212, nil, nil, nil, nil, nil, 212, - nil, nil, nil, nil, nil, nil, nil, nil, 212, nil, - nil, nil, nil, 212, 212, 212, 212, nil, 212, 212, - 212, 212, nil, nil, nil, nil, 212, 212, nil, nil, - nil, 213, 213, 213, 212, 213, 212, 212, 212, 213, - 213, nil, nil, nil, 213, nil, 213, 213, 213, 213, - 213, 213, 213, nil, nil, nil, nil, nil, 213, 213, - 213, 213, 213, 213, 213, nil, nil, 213, nil, nil, - nil, nil, nil, nil, 213, nil, nil, 213, 213, 213, - 213, 213, 213, 213, 213, nil, 213, 213, 213, nil, - 213, 213, 213, 213, 213, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 213, nil, nil, 213, nil, nil, - 213, 213, nil, nil, 213, nil, nil, nil, nil, nil, - 213, nil, nil, nil, nil, nil, nil, nil, nil, 213, - nil, nil, nil, nil, 213, 213, 213, 213, nil, 213, - 213, 213, 213, nil, nil, nil, nil, 213, 213, nil, - nil, nil, 214, 214, 214, 213, 214, 213, 213, 213, - 214, 214, nil, nil, nil, 214, nil, 214, 214, 214, - 214, 214, 214, 214, nil, nil, nil, nil, nil, 214, - 214, 214, 214, 214, 214, 214, nil, nil, 214, nil, - nil, nil, nil, nil, nil, 214, nil, nil, 214, 214, - 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, - nil, 214, 214, 214, 214, 214, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 214, nil, nil, 214, nil, - nil, 214, 214, nil, nil, 214, nil, 214, nil, 214, - nil, 214, nil, nil, 214, nil, nil, nil, nil, nil, - 214, nil, nil, nil, nil, 214, 214, 214, 214, nil, - 214, 214, 214, 214, nil, nil, nil, nil, 214, 214, - nil, nil, nil, 219, 219, 219, 214, 219, 214, 214, - 214, 219, 219, nil, nil, nil, 219, nil, 219, 219, - 219, 219, 219, 219, 219, nil, nil, nil, nil, nil, - 219, 219, 219, 219, 219, 219, 219, nil, nil, 219, - nil, nil, nil, nil, nil, nil, 219, nil, nil, 219, - 219, 219, 219, 219, 219, 219, 219, nil, 219, 219, - 219, nil, 219, 219, 219, 219, 219, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 219, nil, nil, 219, - nil, nil, 219, 219, nil, nil, 219, nil, nil, nil, - nil, nil, 219, nil, nil, nil, nil, nil, nil, nil, - nil, 219, nil, nil, nil, nil, 219, 219, 219, 219, - nil, 219, 219, 219, 219, nil, nil, nil, nil, 219, - 219, nil, nil, nil, 220, 220, 220, 219, 220, 219, - 219, 219, 220, 220, nil, nil, nil, 220, nil, 220, - 220, 220, 220, 220, 220, 220, nil, nil, nil, nil, - nil, 220, 220, 220, 220, 220, 220, 220, nil, nil, - 220, nil, nil, nil, nil, nil, nil, 220, nil, nil, - 220, 220, 220, 220, 220, 220, 220, 220, nil, 220, - 220, 220, nil, 220, 220, 220, 220, 220, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 220, nil, nil, - 220, nil, nil, 220, 220, nil, nil, 220, nil, nil, - nil, nil, nil, 220, nil, nil, nil, nil, nil, nil, - nil, nil, 220, nil, nil, nil, nil, 220, 220, 220, - 220, nil, 220, 220, 220, 220, nil, nil, nil, nil, - 220, 220, nil, nil, nil, 221, 221, 221, 220, 221, - 220, 220, 220, 221, 221, nil, nil, nil, 221, nil, - 221, 221, 221, 221, 221, 221, 221, nil, nil, nil, - nil, nil, 221, 221, 221, 221, 221, 221, 221, nil, - nil, 221, nil, nil, nil, nil, nil, nil, 221, nil, - nil, 221, 221, 221, 221, 221, 221, 221, 221, nil, - 221, 221, 221, nil, 221, 221, 221, 221, 221, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 221, nil, - nil, 221, nil, nil, 221, 221, nil, nil, 221, nil, - nil, nil, nil, nil, 221, nil, nil, nil, nil, nil, - nil, nil, nil, 221, nil, nil, nil, nil, 221, 221, - 221, 221, nil, 221, 221, 221, 221, nil, nil, nil, - nil, 221, 221, 221, nil, nil, 232, 232, 232, 221, - 232, 221, 221, 221, 232, 232, nil, nil, nil, 232, - nil, 232, 232, 232, 232, 232, 232, 232, nil, nil, - nil, nil, nil, 232, 232, 232, 232, 232, 232, 232, - nil, nil, 232, nil, nil, nil, nil, nil, nil, 232, - nil, nil, 232, 232, 232, 232, 232, 232, 232, 232, - nil, 232, 232, 232, nil, 232, 232, 232, 232, 232, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 232, - nil, nil, 232, nil, nil, 232, 232, nil, nil, 232, - nil, nil, nil, nil, nil, 232, nil, nil, nil, nil, - nil, nil, nil, nil, 232, nil, nil, nil, nil, 232, - 232, 232, 232, nil, 232, 232, 232, 232, nil, nil, - nil, nil, 232, 232, nil, nil, nil, 235, 235, 235, - 232, 235, 232, 232, 232, 235, 235, nil, nil, nil, - 235, nil, 235, 235, 235, 235, 235, 235, 235, nil, - nil, nil, nil, nil, 235, 235, 235, 235, 235, 235, - 235, nil, nil, 235, nil, nil, nil, nil, nil, nil, - 235, nil, nil, 235, 235, 235, 235, 235, 235, 235, - 235, nil, 235, 235, 235, nil, 235, 235, 235, 235, - 235, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 235, nil, nil, 235, nil, nil, 235, 235, nil, nil, - 235, nil, nil, nil, nil, nil, 235, nil, nil, nil, - nil, nil, nil, nil, nil, 235, nil, nil, nil, nil, - 235, 235, 235, 235, nil, 235, 235, 235, 235, nil, - nil, nil, nil, 235, 235, nil, nil, nil, 236, 236, - 236, 235, 236, 235, 235, 235, 236, 236, nil, nil, - nil, 236, nil, 236, 236, 236, 236, 236, 236, 236, - nil, nil, nil, nil, nil, 236, 236, 236, 236, 236, - 236, 236, nil, nil, 236, nil, nil, nil, nil, nil, - nil, 236, nil, nil, 236, 236, 236, 236, 236, 236, - 236, 236, nil, 236, 236, 236, nil, 236, 236, 236, - 236, 236, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 236, nil, nil, 236, nil, nil, 236, 236, nil, - nil, 236, nil, nil, nil, nil, nil, 236, nil, nil, - nil, nil, nil, nil, nil, nil, 236, nil, nil, nil, - nil, 236, 236, 236, 236, nil, 236, 236, 236, 236, - nil, nil, nil, nil, 236, 236, nil, nil, nil, 237, - 237, 237, 236, 237, 236, 236, 236, 237, 237, nil, - nil, nil, 237, nil, 237, 237, 237, 237, 237, 237, - 237, nil, nil, nil, nil, nil, 237, 237, 237, 237, - 237, 237, 237, nil, nil, 237, nil, nil, nil, nil, - nil, nil, 237, nil, nil, 237, 237, 237, 237, 237, - 237, 237, 237, nil, 237, 237, 237, nil, 237, 237, - 237, 237, 237, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 237, nil, nil, 237, nil, nil, 237, 237, - nil, nil, 237, nil, nil, nil, nil, nil, 237, nil, - nil, nil, nil, nil, nil, nil, nil, 237, nil, nil, - nil, nil, 237, 237, 237, 237, nil, 237, 237, 237, - 237, nil, nil, nil, nil, 237, 237, nil, nil, nil, - 238, 238, 238, 237, 238, 237, 237, 237, 238, 238, - nil, nil, nil, 238, nil, 238, 238, 238, 238, 238, - 238, 238, nil, nil, nil, nil, nil, 238, 238, 238, - 238, 238, 238, 238, nil, nil, 238, nil, nil, nil, - nil, nil, nil, 238, nil, nil, 238, 238, 238, 238, - 238, 238, 238, 238, nil, 238, 238, 238, nil, 238, - 238, 238, 238, 238, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 238, nil, nil, 238, nil, nil, 238, - 238, nil, nil, 238, nil, nil, nil, nil, nil, 238, - nil, nil, nil, nil, nil, nil, nil, nil, 238, nil, - nil, nil, nil, 238, 238, 238, 238, nil, 238, 238, - 238, 238, nil, nil, nil, nil, 238, 238, nil, nil, - nil, 239, 239, 239, 238, 239, 238, 238, 238, 239, - 239, nil, nil, nil, 239, nil, 239, 239, 239, 239, - 239, 239, 239, nil, nil, nil, nil, nil, 239, 239, - 239, 239, 239, 239, 239, nil, nil, 239, nil, nil, - nil, nil, nil, nil, 239, nil, nil, 239, 239, 239, - 239, 239, 239, 239, 239, nil, 239, 239, 239, nil, - 239, 239, 239, 239, 239, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 239, nil, nil, 239, nil, nil, - 239, 239, nil, nil, 239, nil, nil, nil, nil, nil, - 239, nil, nil, nil, nil, nil, nil, nil, nil, 239, - nil, nil, nil, nil, 239, 239, 239, 239, nil, 239, - 239, 239, 239, nil, nil, nil, nil, 239, 239, nil, - nil, nil, 240, 240, 240, 239, 240, 239, 239, 239, - 240, 240, nil, nil, nil, 240, nil, 240, 240, 240, - 240, 240, 240, 240, nil, nil, nil, nil, nil, 240, - 240, 240, 240, 240, 240, 240, nil, nil, 240, nil, - nil, nil, nil, nil, nil, 240, nil, nil, 240, 240, - 240, 240, 240, 240, 240, 240, nil, 240, 240, 240, - nil, 240, 240, 240, 240, 240, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 240, nil, nil, 240, nil, - nil, 240, 240, nil, nil, 240, nil, nil, nil, nil, - nil, 240, nil, nil, nil, nil, nil, nil, nil, nil, - 240, nil, nil, nil, nil, 240, 240, 240, 240, nil, - 240, 240, 240, 240, nil, nil, nil, nil, 240, 240, - nil, nil, nil, 241, 241, 241, 240, 241, 240, 240, - 240, 241, 241, nil, nil, nil, 241, nil, 241, 241, - 241, 241, 241, 241, 241, nil, nil, nil, nil, nil, - 241, 241, 241, 241, 241, 241, 241, nil, nil, 241, - nil, nil, nil, nil, nil, nil, 241, nil, nil, 241, - 241, 241, 241, 241, 241, 241, 241, nil, 241, 241, - 241, nil, 241, 241, 241, 241, 241, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 241, nil, nil, 241, - nil, nil, 241, 241, nil, nil, 241, nil, nil, nil, - nil, nil, 241, nil, nil, nil, nil, nil, nil, nil, - nil, 241, nil, nil, nil, nil, 241, 241, 241, 241, - nil, 241, 241, 241, 241, nil, nil, nil, nil, 241, - 241, nil, nil, nil, 242, 242, 242, 241, 242, 241, - 241, 241, 242, 242, nil, nil, nil, 242, nil, 242, - 242, 242, 242, 242, 242, 242, nil, nil, nil, nil, - nil, 242, 242, 242, 242, 242, 242, 242, nil, nil, - 242, nil, nil, nil, nil, nil, nil, 242, nil, nil, - 242, 242, 242, 242, 242, 242, 242, 242, nil, 242, - 242, 242, nil, 242, 242, 242, 242, 242, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 242, nil, nil, - 242, nil, nil, 242, 242, nil, nil, 242, nil, nil, - nil, nil, nil, 242, nil, nil, nil, nil, nil, nil, - nil, nil, 242, nil, nil, nil, nil, 242, 242, 242, - 242, nil, 242, 242, 242, 242, nil, nil, nil, nil, - 242, 242, nil, nil, nil, 243, 243, 243, 242, 243, - 242, 242, 242, 243, 243, nil, nil, nil, 243, nil, - 243, 243, 243, 243, 243, 243, 243, nil, nil, nil, - nil, nil, 243, 243, 243, 243, 243, 243, 243, nil, - nil, 243, nil, nil, nil, nil, nil, nil, 243, nil, - nil, 243, 243, 243, 243, 243, 243, 243, 243, nil, - 243, 243, 243, nil, 243, 243, 243, 243, 243, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 243, nil, - nil, 243, nil, nil, 243, 243, nil, nil, 243, nil, - nil, nil, nil, nil, 243, nil, nil, nil, nil, nil, - nil, nil, nil, 243, nil, nil, nil, nil, 243, 243, - 243, 243, nil, 243, 243, 243, 243, nil, nil, nil, - nil, 243, 243, nil, nil, nil, 244, 244, 244, 243, - 244, 243, 243, 243, 244, 244, nil, nil, nil, 244, - nil, 244, 244, 244, 244, 244, 244, 244, nil, nil, - nil, nil, nil, 244, 244, 244, 244, 244, 244, 244, - nil, nil, 244, nil, nil, nil, nil, nil, nil, 244, - nil, nil, 244, 244, 244, 244, 244, 244, 244, 244, - nil, 244, 244, 244, nil, 244, 244, 244, 244, 244, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 244, - nil, nil, 244, nil, nil, 244, 244, nil, nil, 244, - nil, nil, nil, nil, nil, 244, nil, nil, nil, nil, - nil, nil, nil, nil, 244, nil, nil, nil, nil, 244, - 244, 244, 244, nil, 244, 244, 244, 244, nil, nil, - nil, nil, 244, 244, nil, nil, nil, 245, 245, 245, - 244, 245, 244, 244, 244, 245, 245, nil, nil, nil, - 245, nil, 245, 245, 245, 245, 245, 245, 245, nil, - nil, nil, nil, nil, 245, 245, 245, 245, 245, 245, - 245, nil, nil, 245, nil, nil, nil, nil, nil, nil, - 245, nil, nil, 245, 245, 245, 245, 245, 245, 245, - 245, nil, 245, 245, 245, nil, 245, 245, 245, 245, - 245, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 245, nil, nil, 245, nil, nil, 245, 245, nil, nil, - 245, nil, nil, nil, nil, nil, 245, nil, nil, nil, - nil, nil, nil, nil, nil, 245, nil, nil, nil, nil, - 245, 245, 245, 245, nil, 245, 245, 245, 245, nil, - nil, nil, nil, 245, 245, nil, nil, nil, 246, 246, - 246, 245, 246, 245, 245, 245, 246, 246, nil, nil, - nil, 246, nil, 246, 246, 246, 246, 246, 246, 246, - nil, nil, nil, nil, nil, 246, 246, 246, 246, 246, - 246, 246, nil, nil, 246, nil, nil, nil, nil, nil, - nil, 246, nil, nil, 246, 246, 246, 246, 246, 246, - 246, 246, nil, 246, 246, 246, nil, 246, 246, 246, - 246, 246, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 246, nil, nil, 246, nil, nil, 246, 246, nil, - nil, 246, nil, nil, nil, nil, nil, 246, nil, nil, - nil, nil, nil, nil, nil, nil, 246, nil, nil, nil, - nil, 246, 246, 246, 246, nil, 246, 246, 246, 246, - nil, nil, nil, nil, 246, 246, nil, nil, nil, 247, - 247, 247, 246, 247, 246, 246, 246, 247, 247, nil, - nil, nil, 247, nil, 247, 247, 247, 247, 247, 247, - 247, nil, nil, nil, nil, nil, 247, 247, 247, 247, - 247, 247, 247, nil, nil, 247, nil, nil, nil, nil, - nil, nil, 247, nil, nil, 247, 247, 247, 247, 247, - 247, 247, 247, nil, 247, 247, 247, nil, 247, 247, - 247, 247, 247, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 247, nil, nil, 247, nil, nil, 247, 247, - nil, nil, 247, nil, nil, nil, nil, nil, 247, nil, - nil, nil, nil, nil, nil, nil, nil, 247, nil, nil, - nil, nil, 247, 247, 247, 247, nil, 247, 247, 247, - 247, nil, nil, nil, nil, 247, 247, nil, nil, nil, - 248, 248, 248, 247, 248, 247, 247, 247, 248, 248, - nil, nil, nil, 248, nil, 248, 248, 248, 248, 248, - 248, 248, nil, nil, nil, nil, nil, 248, 248, 248, - 248, 248, 248, 248, nil, nil, 248, nil, nil, nil, - nil, nil, nil, 248, nil, nil, 248, 248, 248, 248, - 248, 248, 248, 248, nil, 248, 248, 248, nil, 248, - 248, 248, 248, 248, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 248, nil, nil, 248, nil, nil, 248, - 248, nil, nil, 248, nil, nil, nil, nil, nil, 248, - nil, nil, nil, nil, nil, nil, nil, nil, 248, nil, - nil, nil, nil, 248, 248, 248, 248, nil, 248, 248, - 248, 248, nil, nil, nil, nil, 248, 248, nil, nil, - nil, 249, 249, 249, 248, 249, 248, 248, 248, 249, - 249, nil, nil, nil, 249, nil, 249, 249, 249, 249, - 249, 249, 249, nil, nil, nil, nil, nil, 249, 249, - 249, 249, 249, 249, 249, nil, nil, 249, nil, nil, - nil, nil, nil, nil, 249, nil, nil, 249, 249, 249, - 249, 249, 249, 249, 249, nil, 249, 249, 249, nil, - 249, 249, 249, 249, 249, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 249, nil, nil, 249, nil, nil, - 249, 249, nil, nil, 249, nil, nil, nil, nil, nil, - 249, nil, nil, nil, nil, nil, nil, nil, nil, 249, - nil, nil, nil, nil, 249, 249, 249, 249, nil, 249, - 249, 249, 249, nil, nil, nil, nil, 249, 249, nil, - nil, nil, 250, 250, 250, 249, 250, 249, 249, 249, - 250, 250, nil, nil, nil, 250, nil, 250, 250, 250, - 250, 250, 250, 250, nil, nil, nil, nil, nil, 250, - 250, 250, 250, 250, 250, 250, nil, nil, 250, nil, - nil, nil, nil, nil, nil, 250, nil, nil, 250, 250, - 250, 250, 250, 250, 250, 250, nil, 250, 250, 250, - nil, 250, 250, 250, 250, 250, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 250, nil, nil, 250, nil, - nil, 250, 250, nil, nil, 250, nil, nil, nil, nil, - nil, 250, nil, nil, nil, nil, nil, nil, nil, nil, - 250, nil, nil, nil, nil, 250, 250, 250, 250, nil, - 250, 250, 250, 250, nil, nil, nil, nil, 250, 250, - nil, nil, nil, 251, 251, 251, 250, 251, 250, 250, - 250, 251, 251, nil, nil, nil, 251, nil, 251, 251, - 251, 251, 251, 251, 251, nil, nil, nil, nil, nil, - 251, 251, 251, 251, 251, 251, 251, nil, nil, 251, - nil, nil, nil, nil, nil, nil, 251, nil, nil, 251, - 251, 251, 251, 251, 251, 251, 251, nil, 251, 251, - 251, nil, 251, 251, 251, 251, 251, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 251, nil, nil, 251, - nil, nil, 251, 251, nil, nil, 251, nil, nil, nil, - nil, nil, 251, nil, nil, nil, nil, nil, nil, nil, - nil, 251, nil, nil, nil, nil, 251, 251, 251, 251, - nil, 251, 251, 251, 251, nil, nil, nil, nil, 251, - 251, nil, nil, nil, 252, 252, 252, 251, 252, 251, - 251, 251, 252, 252, nil, nil, nil, 252, nil, 252, - 252, 252, 252, 252, 252, 252, nil, nil, nil, nil, - nil, 252, 252, 252, 252, 252, 252, 252, nil, nil, - 252, nil, nil, nil, nil, nil, nil, 252, nil, nil, - 252, 252, 252, 252, 252, 252, 252, 252, nil, 252, - 252, 252, nil, 252, 252, 252, 252, 252, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 252, nil, nil, - 252, nil, nil, 252, 252, nil, nil, 252, nil, nil, - nil, nil, nil, 252, nil, nil, nil, nil, nil, nil, - nil, nil, 252, nil, nil, nil, nil, 252, 252, 252, - 252, nil, 252, 252, 252, 252, nil, nil, nil, nil, - 252, 252, nil, nil, nil, 253, 253, 253, 252, 253, - 252, 252, 252, 253, 253, nil, nil, nil, 253, nil, - 253, 253, 253, 253, 253, 253, 253, nil, nil, nil, - nil, nil, 253, 253, 253, 253, 253, 253, 253, nil, - nil, 253, nil, nil, nil, nil, nil, nil, 253, nil, - nil, 253, 253, 253, 253, 253, 253, 253, 253, nil, - 253, 253, 253, nil, 253, 253, 253, 253, 253, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 253, nil, - nil, 253, nil, nil, 253, 253, nil, nil, 253, nil, - nil, nil, nil, nil, 253, nil, nil, nil, nil, nil, - nil, nil, nil, 253, nil, nil, nil, nil, 253, 253, - 253, 253, nil, 253, 253, 253, 253, nil, nil, nil, - nil, 253, 253, nil, nil, nil, 254, 254, 254, 253, - 254, 253, 253, 253, 254, 254, nil, nil, nil, 254, - nil, 254, 254, 254, 254, 254, 254, 254, nil, nil, - nil, nil, nil, 254, 254, 254, 254, 254, 254, 254, - nil, nil, 254, nil, nil, nil, nil, nil, nil, 254, - nil, nil, 254, 254, 254, 254, 254, 254, 254, 254, - nil, 254, 254, 254, nil, 254, 254, 254, 254, 254, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 254, - nil, nil, 254, nil, nil, 254, 254, nil, nil, 254, - nil, nil, nil, nil, nil, 254, nil, nil, nil, nil, - nil, nil, nil, nil, 254, nil, nil, nil, nil, 254, - 254, 254, 254, nil, 254, 254, 254, 254, nil, nil, - nil, nil, 254, 254, nil, nil, nil, 255, 255, 255, - 254, 255, 254, 254, 254, 255, 255, nil, nil, nil, - 255, nil, 255, 255, 255, 255, 255, 255, 255, nil, - nil, nil, nil, nil, 255, 255, 255, 255, 255, 255, - 255, nil, nil, 255, nil, nil, nil, nil, nil, nil, - 255, nil, nil, 255, 255, 255, 255, 255, 255, 255, - 255, nil, 255, 255, 255, nil, 255, 255, 255, 255, - 255, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 255, nil, nil, 255, nil, nil, 255, 255, nil, nil, - 255, nil, nil, nil, nil, nil, 255, nil, nil, nil, - nil, nil, nil, nil, nil, 255, nil, nil, nil, nil, - 255, 255, 255, 255, nil, 255, 255, 255, 255, nil, - nil, nil, nil, 255, 255, nil, nil, nil, 256, 256, - 256, 255, 256, 255, 255, 255, 256, 256, nil, nil, - nil, 256, nil, 256, 256, 256, 256, 256, 256, 256, - nil, nil, nil, nil, nil, 256, 256, 256, 256, 256, - 256, 256, nil, nil, 256, nil, nil, nil, nil, nil, - nil, 256, nil, nil, 256, 256, 256, 256, 256, 256, - 256, 256, nil, 256, 256, 256, nil, 256, 256, 256, - 256, 256, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 256, nil, nil, 256, nil, nil, 256, 256, nil, - nil, 256, nil, nil, nil, nil, nil, 256, nil, nil, - nil, nil, nil, nil, nil, nil, 256, nil, nil, nil, - nil, 256, 256, 256, 256, nil, 256, 256, 256, 256, - nil, nil, nil, nil, 256, 256, nil, nil, nil, 257, - 257, 257, 256, 257, 256, 256, 256, 257, 257, nil, - nil, nil, 257, nil, 257, 257, 257, 257, 257, 257, - 257, nil, nil, nil, nil, nil, 257, 257, 257, 257, - 257, 257, 257, nil, nil, 257, nil, nil, nil, nil, - nil, nil, 257, nil, nil, 257, 257, 257, 257, 257, - 257, 257, 257, nil, 257, 257, 257, nil, 257, 257, - 257, 257, 257, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 257, nil, nil, 257, nil, nil, 257, 257, - nil, nil, 257, nil, nil, nil, nil, nil, 257, nil, - nil, nil, nil, nil, nil, nil, nil, 257, nil, nil, - nil, nil, 257, 257, 257, 257, nil, 257, 257, 257, - 257, nil, nil, nil, nil, 257, 257, nil, nil, nil, - 258, 258, 258, 257, 258, 257, 257, 257, 258, 258, - nil, nil, nil, 258, nil, 258, 258, 258, 258, 258, - 258, 258, nil, nil, nil, nil, nil, 258, 258, 258, - 258, 258, 258, 258, nil, nil, 258, nil, nil, nil, - nil, nil, nil, 258, nil, nil, 258, 258, 258, 258, - 258, 258, 258, 258, nil, 258, 258, 258, nil, 258, - 258, 258, 258, 258, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 258, nil, nil, 258, nil, nil, 258, - 258, nil, nil, 258, nil, nil, nil, nil, nil, 258, - nil, nil, nil, nil, nil, nil, nil, nil, 258, nil, - nil, nil, nil, 258, 258, 258, 258, nil, 258, 258, - 258, 258, nil, nil, nil, nil, 258, 258, nil, nil, - nil, 259, 259, 259, 258, 259, 258, 258, 258, 259, - 259, nil, nil, nil, 259, nil, 259, 259, 259, 259, - 259, 259, 259, nil, nil, nil, nil, nil, 259, 259, - 259, 259, 259, 259, 259, nil, nil, 259, nil, nil, - nil, nil, nil, nil, 259, nil, nil, 259, 259, 259, - 259, 259, 259, 259, 259, nil, 259, 259, 259, nil, - 259, 259, 259, 259, 259, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 259, nil, nil, 259, nil, nil, - 259, 259, nil, nil, 259, nil, nil, nil, nil, nil, - 259, nil, nil, nil, nil, nil, nil, nil, nil, 259, - nil, nil, nil, nil, 259, 259, 259, 259, nil, 259, - 259, 259, 259, nil, nil, nil, nil, 259, 259, nil, - nil, nil, 260, 260, 260, 259, 260, 259, 259, 259, - 260, 260, nil, nil, nil, 260, nil, 260, 260, 260, - 260, 260, 260, 260, nil, nil, nil, nil, nil, 260, - 260, 260, 260, 260, 260, 260, nil, nil, 260, nil, - nil, nil, nil, nil, nil, 260, nil, nil, 260, 260, - 260, 260, 260, 260, 260, 260, nil, 260, 260, 260, - nil, 260, 260, 260, 260, 260, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 260, nil, nil, 260, nil, - nil, 260, 260, nil, nil, 260, nil, nil, nil, nil, - nil, 260, nil, nil, nil, nil, nil, nil, nil, nil, - 260, nil, nil, nil, nil, 260, 260, 260, 260, nil, - 260, 260, 260, 260, nil, nil, nil, nil, 260, 260, - nil, nil, nil, 267, 267, 267, 260, 267, 260, 260, - 260, 267, 267, nil, nil, nil, 267, nil, 267, 267, - 267, 267, 267, 267, 267, nil, nil, nil, nil, nil, - 267, 267, 267, 267, 267, 267, 267, nil, nil, 267, - nil, nil, nil, nil, nil, nil, 267, nil, nil, 267, - 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, - 267, nil, 267, 267, 267, 267, 267, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 267, nil, nil, 267, - nil, nil, 267, 267, nil, nil, 267, nil, 267, nil, - 267, nil, 267, nil, nil, 267, nil, nil, nil, nil, - nil, 267, nil, nil, nil, nil, 267, 267, 267, 267, - nil, 267, 267, 267, 267, nil, nil, nil, nil, 267, - 267, nil, nil, nil, 268, 268, 268, 267, 268, 267, - 267, 267, 268, 268, nil, nil, nil, 268, nil, 268, - 268, 268, 268, 268, 268, 268, nil, nil, nil, nil, - nil, 268, 268, 268, 268, 268, 268, 268, nil, nil, - 268, nil, nil, nil, nil, nil, nil, 268, nil, nil, - 268, 268, 268, 268, 268, 268, 268, 268, 268, 268, - 268, 268, nil, 268, 268, 268, 268, 268, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 268, nil, nil, - 268, nil, nil, 268, 268, nil, nil, 268, nil, 268, - nil, 268, nil, 268, nil, nil, 268, nil, nil, nil, - nil, nil, 268, nil, nil, nil, nil, 268, 268, 268, - 268, nil, 268, 268, 268, 268, nil, nil, nil, nil, - 268, 268, nil, nil, nil, 276, 276, 276, 268, 276, - 268, 268, 268, 276, 276, nil, nil, nil, 276, nil, - 276, 276, 276, 276, 276, 276, 276, nil, nil, nil, - nil, nil, 276, 276, 276, 276, 276, 276, 276, nil, - nil, 276, nil, nil, nil, nil, nil, nil, 276, nil, - nil, 276, 276, 276, 276, 276, 276, 276, 276, 276, - 276, 276, 276, nil, 276, 276, 276, 276, 276, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 276, nil, - nil, 276, nil, nil, 276, 276, nil, nil, 276, nil, - 276, nil, 276, nil, 276, nil, nil, 276, nil, nil, - nil, nil, nil, 276, nil, nil, nil, nil, 276, 276, - 276, 276, nil, 276, 276, 276, 276, nil, nil, nil, - nil, 276, 276, 276, nil, nil, 283, 283, 283, 276, - 283, 276, 276, 276, 283, 283, nil, nil, nil, 283, - nil, 283, 283, 283, 283, 283, 283, 283, nil, nil, - nil, nil, nil, 283, 283, 283, 283, 283, 283, 283, - nil, nil, 283, nil, nil, nil, nil, nil, nil, 283, - nil, nil, 283, 283, 283, 283, 283, 283, 283, 283, - nil, 283, 283, 283, nil, 283, 283, 283, 283, 283, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 283, - nil, nil, 283, nil, nil, 283, 283, nil, nil, 283, - nil, nil, nil, nil, nil, 283, nil, nil, nil, nil, - nil, nil, nil, nil, 283, nil, nil, nil, nil, 283, - 283, 283, 283, nil, 283, 283, 283, 283, nil, nil, - nil, nil, 283, 283, nil, nil, nil, 285, 285, 285, - 283, 285, 283, 283, 283, 285, 285, nil, nil, nil, - 285, nil, 285, 285, 285, 285, 285, 285, 285, nil, - nil, nil, nil, nil, 285, 285, 285, 285, 285, 285, - 285, nil, nil, 285, nil, nil, nil, nil, nil, nil, - 285, nil, nil, 285, 285, 285, 285, 285, 285, 285, - 285, nil, 285, 285, 285, nil, 285, 285, 285, 285, - 285, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 285, nil, nil, 285, nil, nil, 285, 285, nil, nil, - 285, nil, nil, nil, nil, nil, 285, nil, nil, nil, - nil, nil, nil, nil, nil, 285, nil, nil, nil, nil, - 285, 285, 285, 285, nil, 285, 285, 285, 285, nil, - nil, nil, nil, 285, 285, nil, nil, nil, 288, 288, - 288, 285, 288, 285, 285, 285, 288, 288, nil, nil, - nil, 288, nil, 288, 288, 288, 288, 288, 288, 288, - nil, nil, nil, nil, nil, 288, 288, 288, 288, 288, - 288, 288, nil, nil, 288, nil, nil, nil, nil, nil, - nil, 288, nil, nil, 288, 288, 288, 288, 288, 288, - 288, 288, nil, 288, 288, 288, nil, 288, 288, 288, - 288, 288, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 288, nil, nil, 288, nil, nil, 288, 288, nil, - nil, 288, nil, nil, nil, nil, nil, 288, nil, nil, - nil, nil, nil, nil, nil, nil, 288, nil, nil, nil, - nil, 288, 288, 288, 288, nil, 288, 288, 288, 288, - nil, nil, nil, nil, 288, 288, nil, nil, nil, 289, - 289, 289, 288, 289, 288, 288, 288, 289, 289, nil, - nil, nil, 289, nil, 289, 289, 289, 289, 289, 289, - 289, nil, nil, nil, nil, nil, 289, 289, 289, 289, - 289, 289, 289, nil, nil, 289, nil, nil, nil, nil, - nil, nil, 289, nil, nil, 289, 289, 289, 289, 289, - 289, 289, 289, nil, 289, 289, 289, nil, 289, 289, - 289, 289, 289, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 289, nil, nil, 289, nil, nil, 289, 289, - nil, nil, 289, nil, nil, nil, nil, nil, 289, nil, - nil, nil, nil, nil, nil, nil, nil, 289, nil, nil, - nil, nil, 289, 289, 289, 289, nil, 289, 289, 289, - 289, nil, nil, nil, nil, 289, 289, nil, nil, nil, - nil, nil, nil, 289, nil, 289, 289, 289, 294, 294, - 294, 294, 294, nil, nil, nil, 294, 294, nil, nil, - nil, 294, nil, 294, 294, 294, 294, 294, 294, 294, - nil, nil, nil, nil, nil, 294, 294, 294, 294, 294, - 294, 294, nil, nil, 294, nil, nil, nil, nil, nil, - 294, 294, nil, 294, 294, 294, 294, 294, 294, 294, - 294, 294, nil, 294, 294, 294, nil, 294, 294, 294, - 294, 294, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 294, nil, nil, 294, nil, nil, 294, 294, nil, - nil, 294, nil, 294, nil, nil, nil, 294, nil, nil, - nil, nil, nil, nil, nil, nil, 294, nil, nil, nil, - nil, 294, 294, 294, 294, nil, 294, 294, 294, 294, - nil, nil, nil, nil, 294, 294, nil, nil, nil, 302, - 302, 302, 294, 302, 294, 294, 294, 302, 302, nil, - nil, nil, 302, nil, 302, 302, 302, 302, 302, 302, - 302, nil, nil, nil, nil, nil, 302, 302, 302, 302, - 302, 302, 302, nil, nil, 302, nil, nil, nil, nil, - nil, nil, 302, nil, nil, 302, 302, 302, 302, 302, - 302, 302, 302, nil, 302, 302, 302, nil, 302, 302, - nil, nil, 302, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 302, nil, nil, 302, nil, nil, 302, 302, - nil, nil, 302, nil, nil, 938, nil, 938, 938, 938, - 938, 938, nil, nil, nil, nil, nil, nil, nil, nil, - 938, nil, 302, 302, 302, 302, nil, 302, 302, 302, - 302, nil, nil, nil, nil, 302, 302, nil, nil, nil, - 302, nil, 938, 302, nil, 302, 302, 302, 319, 319, - 319, nil, 319, 938, 938, nil, 319, 319, 938, nil, - nil, 319, nil, 319, 319, 319, 319, 319, 319, 319, - nil, nil, nil, nil, nil, 319, 319, 319, 319, 319, - 319, 319, nil, nil, 319, nil, nil, nil, nil, nil, - nil, 319, nil, nil, 319, 319, 319, 319, 319, 319, - 319, 319, nil, 319, 319, 319, nil, 319, 319, nil, - nil, 319, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 319, nil, nil, 319, nil, nil, 319, 319, nil, - nil, 319, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 319, 319, 319, 319, nil, 319, 319, 319, 319, - nil, nil, nil, nil, 319, 319, nil, nil, nil, 327, - 327, 327, 319, 327, 319, 319, 319, 327, 327, nil, - nil, nil, 327, nil, 327, 327, 327, 327, 327, 327, - 327, nil, nil, nil, nil, nil, 327, 327, 327, 327, - 327, 327, 327, nil, nil, 327, nil, nil, nil, nil, - nil, nil, 327, nil, nil, 327, 327, 327, 327, 327, - 327, 327, 327, nil, 327, 327, 327, nil, 327, 327, - 327, 327, 327, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 327, nil, nil, 327, 327, nil, 327, 327, - nil, nil, 327, nil, nil, nil, nil, nil, 327, nil, - nil, nil, nil, nil, nil, nil, nil, 327, nil, nil, - nil, nil, 327, 327, 327, 327, nil, 327, 327, 327, - 327, nil, nil, nil, nil, 327, 327, nil, nil, nil, - 343, 343, 343, 327, 343, 327, 327, 327, 343, 343, - nil, nil, nil, 343, nil, 343, 343, 343, 343, 343, - 343, 343, nil, nil, nil, nil, nil, 343, 343, 343, - 343, 343, 343, 343, nil, nil, 343, nil, nil, nil, - nil, nil, nil, 343, nil, nil, 343, 343, 343, 343, - 343, 343, 343, 343, nil, 343, 343, 343, nil, 343, - 343, 343, 343, 343, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 343, nil, nil, 343, nil, nil, 343, - 343, nil, nil, 343, nil, nil, nil, nil, nil, 343, - nil, nil, nil, nil, nil, nil, nil, nil, 343, nil, - nil, nil, nil, 343, 343, 343, 343, nil, 343, 343, - 343, 343, nil, nil, nil, nil, 343, 343, nil, nil, - nil, 344, 344, 344, 343, 344, 343, 343, 343, 344, - 344, nil, nil, nil, 344, nil, 344, 344, 344, 344, - 344, 344, 344, nil, nil, nil, nil, nil, 344, 344, - 344, 344, 344, 344, 344, nil, nil, 344, nil, nil, - nil, nil, nil, nil, 344, nil, nil, 344, 344, 344, - 344, 344, 344, 344, 344, nil, 344, 344, 344, nil, - 344, 344, 344, 344, 344, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 344, nil, nil, 344, nil, nil, - 344, 344, nil, nil, 344, nil, nil, nil, nil, nil, - 344, nil, nil, nil, nil, nil, nil, nil, nil, 344, - nil, nil, nil, nil, 344, 344, 344, 344, nil, 344, - 344, 344, 344, nil, nil, nil, nil, 344, 344, nil, - nil, nil, 363, 363, 363, 344, 363, 344, 344, 344, - 363, 363, nil, nil, nil, 363, nil, 363, 363, 363, - 363, 363, 363, 363, nil, nil, nil, nil, nil, 363, - 363, 363, 363, 363, 363, 363, nil, nil, 363, nil, - nil, nil, nil, nil, nil, 363, nil, nil, 363, 363, - 363, 363, 363, 363, 363, 363, nil, 363, 363, 363, - nil, 363, 363, 363, 363, 363, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 363, nil, nil, 363, nil, - nil, 363, 363, nil, nil, 363, nil, nil, nil, nil, - nil, 363, nil, nil, nil, nil, nil, nil, nil, nil, - 363, nil, nil, nil, nil, 363, 363, 363, 363, nil, - 363, 363, 363, 363, nil, nil, nil, nil, 363, 363, - nil, nil, nil, 379, 379, 379, 363, 379, 363, 363, - 363, 379, 379, nil, nil, nil, 379, nil, 379, 379, - 379, 379, 379, 379, 379, nil, nil, nil, nil, nil, - 379, 379, 379, 379, 379, 379, 379, nil, nil, 379, - nil, nil, nil, nil, nil, nil, 379, nil, nil, 379, - 379, 379, 379, 379, 379, 379, 379, nil, 379, 379, - 379, nil, 379, 379, 379, 379, 379, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 379, nil, nil, 379, - nil, nil, 379, 379, nil, nil, 379, nil, nil, nil, - nil, nil, 379, nil, nil, nil, nil, nil, nil, nil, - nil, 379, nil, nil, nil, nil, 379, 379, 379, 379, - nil, 379, 379, 379, 379, nil, nil, nil, nil, 379, - 379, nil, nil, nil, 407, 407, 407, 379, 407, 379, - 379, 379, 407, 407, nil, nil, nil, 407, nil, 407, - 407, 407, 407, 407, 407, 407, nil, nil, nil, nil, - nil, 407, 407, 407, 407, 407, 407, 407, nil, nil, - 407, nil, nil, nil, nil, nil, nil, 407, nil, nil, - 407, 407, 407, 407, 407, 407, 407, 407, nil, 407, - 407, 407, nil, 407, 407, 407, 407, 407, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 407, nil, nil, - 407, nil, nil, 407, 407, nil, nil, 407, nil, nil, - nil, nil, nil, 407, nil, nil, nil, nil, nil, nil, - nil, nil, 407, nil, nil, nil, nil, 407, 407, 407, - 407, nil, 407, 407, 407, 407, nil, nil, nil, nil, - 407, 407, nil, nil, nil, 450, 450, 450, 407, 450, - 407, 407, 407, 450, 450, nil, nil, nil, 450, nil, - 450, 450, 450, 450, 450, 450, 450, nil, nil, nil, - nil, nil, 450, 450, 450, 450, 450, 450, 450, nil, - nil, 450, nil, nil, nil, nil, nil, nil, 450, nil, - nil, 450, 450, 450, 450, 450, 450, 450, 450, 450, - 450, 450, 450, nil, 450, 450, 450, 450, 450, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 450, nil, - nil, 450, nil, nil, 450, 450, nil, nil, 450, nil, - 450, nil, 450, nil, 450, nil, nil, 450, nil, nil, - nil, nil, nil, 450, nil, nil, nil, nil, 450, 450, - 450, 450, nil, 450, 450, 450, 450, nil, nil, nil, - nil, 450, 450, nil, nil, nil, 452, 452, 452, 450, - 452, 450, 450, 450, 452, 452, nil, nil, nil, 452, - nil, 452, 452, 452, 452, 452, 452, 452, nil, nil, - nil, nil, nil, 452, 452, 452, 452, 452, 452, 452, - nil, nil, 452, nil, nil, nil, nil, nil, nil, 452, - nil, nil, 452, 452, 452, 452, 452, 452, 452, 452, - nil, 452, 452, 452, nil, 452, 452, 452, 452, 452, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 452, - nil, nil, 452, nil, nil, 452, 452, nil, nil, 452, - nil, nil, nil, nil, nil, 452, nil, nil, nil, nil, - nil, nil, nil, nil, 452, nil, nil, nil, nil, 452, - 452, 452, 452, nil, 452, 452, 452, 452, nil, nil, - nil, nil, 452, 452, nil, nil, nil, 453, 453, 453, - 452, 453, 452, 452, 452, 453, 453, nil, nil, nil, - 453, nil, 453, 453, 453, 453, 453, 453, 453, nil, - nil, nil, nil, nil, 453, 453, 453, 453, 453, 453, - 453, nil, nil, 453, nil, nil, nil, nil, nil, nil, - 453, nil, nil, 453, 453, 453, 453, 453, 453, 453, - 453, nil, 453, 453, 453, nil, 453, 453, 453, 453, - 453, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 453, nil, nil, 453, nil, nil, 453, 453, nil, nil, - 453, nil, nil, nil, nil, nil, 453, nil, nil, nil, - nil, nil, nil, nil, nil, 453, nil, nil, nil, nil, - 453, 453, 453, 453, nil, 453, 453, 453, 453, nil, - nil, nil, nil, 453, 453, nil, nil, nil, 454, 454, - 454, 453, 454, 453, 453, 453, 454, 454, nil, nil, - nil, 454, nil, 454, 454, 454, 454, 454, 454, 454, - nil, nil, nil, nil, nil, 454, 454, 454, 454, 454, - 454, 454, nil, nil, 454, nil, nil, nil, nil, nil, - nil, 454, nil, nil, 454, 454, 454, 454, 454, 454, - 454, 454, nil, 454, 454, 454, nil, 454, 454, 454, - 454, 454, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 454, nil, nil, 454, nil, nil, 454, 454, nil, - nil, 454, nil, nil, nil, nil, nil, 454, nil, nil, - nil, nil, nil, nil, nil, nil, 454, nil, nil, nil, - nil, 454, 454, 454, 454, nil, 454, 454, 454, 454, - nil, nil, nil, nil, 454, 454, nil, nil, nil, 494, - 494, 494, 454, 494, 454, 454, 454, 494, 494, nil, - nil, nil, 494, nil, 494, 494, 494, 494, 494, 494, - 494, nil, nil, nil, nil, nil, 494, 494, 494, 494, - 494, 494, 494, nil, nil, 494, nil, nil, nil, nil, - nil, nil, 494, nil, nil, 494, 494, 494, 494, 494, - 494, 494, 494, 494, 494, 494, 494, nil, 494, 494, - 494, 494, 494, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 494, nil, nil, 494, nil, nil, 494, 494, - nil, nil, 494, nil, 494, nil, 494, nil, 494, nil, - nil, 494, nil, nil, nil, nil, nil, 494, nil, nil, - nil, nil, 494, 494, 494, 494, nil, 494, 494, 494, - 494, nil, nil, nil, nil, 494, 494, nil, nil, nil, - 496, 496, 496, 494, 496, 494, 494, 494, 496, 496, - nil, nil, nil, 496, nil, 496, 496, 496, 496, 496, - 496, 496, nil, nil, nil, nil, nil, 496, 496, 496, - 496, 496, 496, 496, nil, nil, 496, nil, nil, nil, - nil, nil, nil, 496, nil, nil, 496, 496, 496, 496, - 496, 496, 496, 496, 496, 496, 496, 496, nil, 496, - 496, 496, 496, 496, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 496, nil, nil, 496, nil, nil, 496, - 496, nil, nil, 496, nil, nil, nil, 496, nil, 496, - nil, nil, 496, nil, nil, nil, nil, nil, 496, nil, - nil, nil, nil, 496, 496, 496, 496, nil, 496, 496, - 496, 496, nil, nil, nil, nil, 496, 496, nil, nil, - nil, 498, 498, 498, 496, 498, 496, 496, 496, 498, - 498, nil, nil, nil, 498, nil, 498, 498, 498, 498, - 498, 498, 498, nil, nil, nil, nil, nil, 498, 498, - 498, 498, 498, 498, 498, nil, nil, 498, nil, nil, - nil, nil, nil, nil, 498, nil, nil, 498, 498, 498, - 498, 498, 498, 498, 498, nil, 498, 498, 498, nil, - 498, 498, 498, 498, 498, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 498, nil, nil, 498, nil, nil, - 498, 498, nil, nil, 498, nil, nil, nil, nil, nil, - 498, nil, nil, nil, nil, nil, nil, nil, nil, 498, - nil, nil, nil, nil, 498, 498, 498, 498, nil, 498, - 498, 498, 498, nil, nil, nil, nil, 498, 498, nil, - nil, nil, nil, nil, nil, 498, nil, 498, 498, 498, - 504, 504, 504, 504, 504, nil, nil, nil, 504, 504, - nil, nil, nil, 504, nil, 504, 504, 504, 504, 504, - 504, 504, nil, nil, nil, nil, nil, 504, 504, 504, - 504, 504, 504, 504, nil, nil, 504, nil, nil, nil, - nil, nil, 504, 504, 504, 504, 504, 504, 504, 504, - 504, 504, 504, 504, nil, 504, 504, 504, nil, 504, - 504, 504, 504, 504, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 504, nil, nil, 504, nil, nil, 504, - 504, nil, nil, 504, nil, 504, nil, nil, nil, 504, - nil, nil, nil, nil, nil, nil, nil, nil, 504, nil, - nil, nil, nil, 504, 504, 504, 504, nil, 504, 504, - 504, 504, nil, nil, nil, nil, 504, 504, nil, nil, - nil, nil, nil, 504, 504, nil, 504, 504, 504, 512, - 512, 512, nil, 512, nil, nil, nil, 512, 512, nil, - nil, nil, 512, nil, 512, 512, 512, 512, 512, 512, - 512, nil, nil, nil, nil, nil, 512, 512, 512, 512, - 512, 512, 512, nil, nil, 512, nil, nil, nil, nil, - nil, nil, 512, nil, nil, 512, 512, 512, 512, 512, - 512, 512, 512, nil, 512, 512, 512, nil, 512, 512, - nil, nil, 512, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 512, nil, nil, 512, nil, nil, 512, 512, - nil, nil, 512, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 512, 512, 512, 512, nil, 512, 512, 512, - 512, nil, nil, nil, nil, 512, 512, nil, nil, nil, - 514, 514, 514, 512, 514, 512, 512, 512, 514, 514, - nil, nil, nil, 514, nil, 514, 514, 514, 514, 514, - 514, 514, nil, nil, nil, nil, nil, 514, 514, 514, - 514, 514, 514, 514, nil, nil, 514, nil, nil, nil, - nil, nil, nil, 514, nil, nil, 514, 514, 514, 514, - 514, 514, 514, 514, 514, 514, 514, 514, nil, 514, - 514, 514, 514, 514, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 514, nil, nil, 514, nil, nil, 514, - 514, nil, nil, 514, nil, 514, nil, 514, nil, 514, - nil, nil, 514, nil, nil, nil, nil, nil, 514, nil, - nil, nil, nil, 514, 514, 514, 514, nil, 514, 514, - 514, 514, nil, nil, nil, nil, 514, 514, nil, nil, - nil, 520, 520, 520, 514, 520, 514, 514, 514, 520, - 520, nil, nil, nil, 520, nil, 520, 520, 520, 520, - 520, 520, 520, nil, nil, nil, nil, nil, 520, 520, - 520, 520, 520, 520, 520, nil, nil, 520, nil, nil, - nil, nil, nil, nil, 520, nil, nil, 520, 520, 520, - 520, 520, 520, 520, 520, nil, 520, 520, 520, nil, - 520, 520, nil, nil, 520, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 520, nil, nil, 520, nil, nil, - 520, 520, nil, nil, 520, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 520, 520, 520, 520, nil, 520, - 520, 520, 520, nil, nil, nil, nil, 520, 520, nil, - nil, nil, 523, 523, 523, 520, 523, 520, 520, 520, - 523, 523, nil, nil, nil, 523, nil, 523, 523, 523, - 523, 523, 523, 523, nil, nil, nil, nil, nil, 523, - 523, 523, 523, 523, 523, 523, nil, nil, 523, nil, - nil, nil, nil, nil, nil, 523, nil, nil, 523, 523, - 523, 523, 523, 523, 523, 523, nil, 523, 523, 523, - nil, 523, 523, 523, 523, 523, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 523, nil, nil, 523, nil, - nil, 523, 523, nil, nil, 523, nil, nil, nil, nil, - nil, 523, nil, nil, nil, nil, nil, nil, nil, nil, - 523, nil, nil, nil, nil, 523, 523, 523, 523, nil, - 523, 523, 523, 523, nil, nil, nil, nil, 523, 523, - nil, nil, nil, 524, 524, 524, 523, 524, 523, 523, - 523, 524, 524, nil, nil, nil, 524, nil, 524, 524, - 524, 524, 524, 524, 524, nil, nil, nil, nil, nil, - 524, 524, 524, 524, 524, 524, 524, nil, nil, 524, - nil, nil, nil, nil, nil, nil, 524, nil, nil, 524, - 524, 524, 524, 524, 524, 524, 524, nil, 524, 524, - 524, nil, 524, 524, 524, 524, 524, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 524, nil, nil, 524, - nil, nil, 524, 524, nil, nil, 524, nil, nil, nil, - nil, nil, 524, nil, nil, nil, nil, nil, nil, nil, - nil, 524, nil, nil, nil, nil, 524, 524, 524, 524, - nil, 524, 524, 524, 524, nil, nil, nil, nil, 524, - 524, nil, nil, nil, 528, 528, 528, 524, 528, 524, - 524, 524, 528, 528, nil, nil, nil, 528, nil, 528, - 528, 528, 528, 528, 528, 528, nil, nil, nil, nil, - nil, 528, 528, 528, 528, 528, 528, 528, nil, nil, - 528, nil, nil, nil, nil, nil, nil, 528, nil, nil, - 528, 528, 528, 528, 528, 528, 528, 528, nil, 528, - 528, 528, nil, 528, 528, 528, 528, 528, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 528, nil, nil, - 528, nil, nil, 528, 528, nil, nil, 528, nil, nil, - nil, nil, nil, 528, nil, nil, nil, nil, nil, nil, - nil, nil, 528, nil, nil, nil, nil, 528, 528, 528, - 528, nil, 528, 528, 528, 528, nil, nil, nil, nil, - 528, 528, nil, nil, nil, 534, 534, 534, 528, 534, - 528, 528, 528, 534, 534, nil, nil, nil, 534, nil, - 534, 534, 534, 534, 534, 534, 534, nil, nil, nil, - nil, nil, 534, 534, 534, 534, 534, 534, 534, nil, - nil, 534, nil, nil, nil, nil, nil, nil, 534, nil, - nil, 534, 534, 534, 534, 534, 534, 534, 534, 534, - 534, 534, 534, nil, 534, 534, 534, 534, 534, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 534, nil, - nil, 534, nil, nil, 534, 534, nil, nil, 534, nil, - 534, nil, nil, nil, 534, nil, nil, 534, nil, nil, - nil, nil, nil, 534, nil, nil, nil, nil, 534, 534, - 534, 534, nil, 534, 534, 534, 534, nil, nil, nil, - nil, 534, 534, nil, nil, nil, 537, 537, 537, 534, - 537, 534, 534, 534, 537, 537, nil, nil, nil, 537, - nil, 537, 537, 537, 537, 537, 537, 537, nil, nil, - nil, nil, nil, 537, 537, 537, 537, 537, 537, 537, - nil, nil, 537, nil, nil, nil, nil, nil, nil, 537, - nil, nil, 537, 537, 537, 537, 537, 537, 537, 537, - 537, 537, 537, 537, nil, 537, 537, 537, 537, 537, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 537, - nil, nil, 537, nil, nil, 537, 537, nil, nil, 537, - nil, nil, nil, nil, nil, 537, nil, nil, 537, nil, - nil, nil, nil, nil, 537, nil, nil, nil, nil, 537, - 537, 537, 537, nil, 537, 537, 537, 537, nil, nil, - nil, nil, 537, 537, nil, nil, nil, 551, 551, 551, - 537, 551, 537, 537, 537, 551, 551, nil, nil, nil, - 551, nil, 551, 551, 551, 551, 551, 551, 551, nil, - nil, nil, nil, nil, 551, 551, 551, 551, 551, 551, - 551, nil, nil, 551, nil, nil, nil, nil, nil, nil, - 551, nil, nil, 551, 551, 551, 551, 551, 551, 551, - 551, nil, 551, 551, 551, nil, 551, 551, 551, 551, - 551, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 551, nil, nil, 551, nil, nil, 551, 551, nil, nil, - 551, nil, 551, nil, nil, nil, 551, nil, nil, nil, - nil, nil, nil, nil, nil, 551, nil, nil, nil, nil, - 551, 551, 551, 551, nil, 551, 551, 551, 551, nil, - nil, nil, nil, 551, 551, nil, nil, nil, 552, 552, - 552, 551, 552, 551, 551, 551, 552, 552, nil, nil, - nil, 552, nil, 552, 552, 552, 552, 552, 552, 552, - nil, nil, nil, nil, nil, 552, 552, 552, 552, 552, - 552, 552, nil, nil, 552, nil, nil, nil, nil, nil, - nil, 552, nil, nil, 552, 552, 552, 552, 552, 552, - 552, 552, 552, 552, 552, 552, nil, 552, 552, 552, - 552, 552, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 552, nil, nil, 552, nil, nil, 552, 552, nil, - nil, 552, nil, 552, nil, 552, nil, 552, nil, nil, - 552, nil, nil, nil, nil, nil, 552, nil, nil, nil, - nil, 552, 552, 552, 552, nil, 552, 552, 552, 552, - nil, nil, nil, nil, 552, 552, nil, nil, nil, 562, - 562, 562, 552, 562, 552, 552, 552, 562, 562, nil, - nil, nil, 562, nil, 562, 562, 562, 562, 562, 562, - 562, nil, nil, nil, nil, nil, 562, 562, 562, 562, - 562, 562, 562, nil, nil, 562, nil, nil, nil, nil, - nil, nil, 562, nil, nil, 562, 562, 562, 562, 562, - 562, 562, 562, 562, 562, 562, 562, nil, 562, 562, - 562, 562, 562, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 562, nil, nil, 562, nil, nil, 562, 562, - nil, nil, 562, nil, 562, nil, 562, nil, 562, nil, - nil, 562, nil, nil, nil, nil, nil, 562, nil, nil, - nil, nil, 562, 562, 562, 562, nil, 562, 562, 562, - 562, nil, nil, nil, nil, 562, 562, nil, nil, nil, - 594, 594, 594, 562, 594, 562, 562, 562, 594, 594, - nil, nil, nil, 594, nil, 594, 594, 594, 594, 594, - 594, 594, nil, nil, nil, nil, nil, 594, 594, 594, - 594, 594, 594, 594, nil, nil, 594, nil, nil, nil, - nil, nil, nil, 594, nil, nil, 594, 594, 594, 594, - 594, 594, 594, 594, nil, 594, 594, 594, nil, 594, - 594, 594, 594, 594, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 594, nil, nil, 594, nil, nil, 594, - 594, nil, nil, 594, nil, 594, nil, nil, nil, 594, - nil, nil, nil, nil, nil, nil, nil, nil, 594, nil, - nil, nil, nil, 594, 594, 594, 594, nil, 594, 594, - 594, 594, nil, nil, nil, nil, 594, 594, nil, nil, - nil, 595, 595, 595, 594, 595, 594, 594, 594, 595, - 595, nil, nil, nil, 595, nil, 595, 595, 595, 595, - 595, 595, 595, nil, nil, nil, nil, nil, 595, 595, - 595, 595, 595, 595, 595, nil, nil, 595, nil, nil, - nil, nil, nil, nil, 595, nil, nil, 595, 595, 595, - 595, 595, 595, 595, 595, nil, 595, 595, 595, nil, - 595, 595, 595, 595, 595, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 595, nil, nil, 595, nil, nil, - 595, 595, nil, nil, 595, nil, nil, nil, nil, nil, - 595, nil, nil, nil, nil, nil, nil, nil, nil, 595, - nil, nil, nil, nil, 595, 595, 595, 595, nil, 595, - 595, 595, 595, nil, nil, nil, nil, 595, 595, nil, - nil, nil, 596, 596, 596, 595, 596, 595, 595, 595, - 596, 596, nil, nil, nil, 596, nil, 596, 596, 596, - 596, 596, 596, 596, nil, nil, nil, nil, nil, 596, - 596, 596, 596, 596, 596, 596, nil, nil, 596, nil, - nil, nil, nil, nil, nil, 596, nil, nil, 596, 596, - 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, - nil, 596, 596, 596, 596, 596, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 596, nil, nil, 596, nil, - nil, 596, 596, nil, nil, 596, nil, 596, nil, 596, - nil, 596, nil, nil, 596, nil, nil, nil, nil, nil, - 596, nil, nil, nil, nil, 596, 596, 596, 596, nil, - 596, 596, 596, 596, nil, nil, nil, nil, 596, 596, - nil, nil, nil, nil, nil, nil, 596, nil, 596, 596, - 596, 599, 599, 599, 599, 599, nil, nil, nil, 599, - 599, nil, nil, nil, 599, nil, 599, 599, 599, 599, - 599, 599, 599, nil, nil, nil, nil, nil, 599, 599, - 599, 599, 599, 599, 599, nil, nil, 599, nil, nil, - nil, nil, nil, 599, 599, nil, 599, 599, 599, 599, - 599, 599, 599, 599, 599, nil, 599, 599, 599, nil, - 599, 599, 599, 599, 599, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 599, nil, nil, 599, nil, nil, - 599, 599, nil, nil, 599, nil, 599, nil, nil, nil, - 599, nil, nil, nil, nil, nil, nil, nil, nil, 599, - nil, nil, nil, nil, 599, 599, 599, 599, nil, 599, - 599, 599, 599, nil, nil, nil, nil, 599, 599, nil, - nil, nil, 600, 600, 600, 599, 600, 599, 599, 599, - 600, 600, nil, nil, nil, 600, nil, 600, 600, 600, - 600, 600, 600, 600, nil, nil, nil, nil, nil, 600, - 600, 600, 600, 600, 600, 600, nil, nil, 600, nil, - nil, nil, nil, nil, nil, 600, nil, nil, 600, 600, - 600, 600, 600, 600, 600, 600, nil, 600, 600, 600, - nil, 600, 600, 600, 600, 600, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 600, nil, nil, 600, nil, - nil, 600, 600, nil, nil, 600, nil, nil, nil, nil, - nil, 600, nil, nil, nil, nil, nil, nil, nil, nil, - 600, nil, nil, nil, nil, 600, 600, 600, 600, nil, - 600, 600, 600, 600, nil, nil, nil, nil, 600, 600, - nil, nil, nil, 603, 603, 603, 600, 603, 600, 600, - 600, 603, 603, nil, nil, nil, 603, nil, 603, 603, - 603, 603, 603, 603, 603, nil, nil, nil, nil, nil, - 603, 603, 603, 603, 603, 603, 603, nil, nil, 603, - nil, nil, nil, nil, nil, nil, 603, nil, nil, 603, - 603, 603, 603, 603, 603, 603, 603, 603, 603, 603, - 603, nil, 603, 603, 603, 603, 603, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 603, nil, nil, 603, - nil, nil, 603, 603, nil, nil, 603, nil, 603, nil, - 603, nil, 603, nil, nil, 603, nil, nil, nil, nil, - nil, 603, nil, nil, nil, nil, 603, 603, 603, 603, - nil, 603, 603, 603, 603, nil, nil, nil, nil, 603, - 603, nil, nil, nil, 604, 604, 604, 603, 604, 603, - 603, 603, 604, 604, nil, nil, nil, 604, nil, 604, - 604, 604, 604, 604, 604, 604, nil, nil, nil, nil, - nil, 604, 604, 604, 604, 604, 604, 604, nil, nil, - 604, nil, nil, nil, nil, nil, nil, 604, nil, nil, - 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, - 604, 604, nil, 604, 604, 604, 604, 604, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 604, nil, nil, - 604, nil, nil, 604, 604, nil, nil, 604, nil, nil, - nil, 604, nil, 604, nil, nil, 604, nil, nil, nil, - nil, nil, 604, nil, nil, nil, nil, 604, 604, 604, - 604, nil, 604, 604, 604, 604, nil, nil, nil, nil, - 604, 604, nil, nil, nil, 605, 605, 605, 604, 605, - 604, 604, 604, 605, 605, nil, nil, nil, 605, nil, - 605, 605, 605, 605, 605, 605, 605, nil, nil, nil, - nil, nil, 605, 605, 605, 605, 605, 605, 605, nil, - nil, 605, nil, nil, nil, nil, nil, nil, 605, nil, - nil, 605, 605, 605, 605, 605, 605, 605, 605, nil, - 605, 605, 605, nil, 605, 605, 605, 605, 605, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 605, nil, - nil, 605, nil, nil, 605, 605, nil, nil, 605, nil, - nil, nil, nil, nil, 605, nil, nil, nil, nil, nil, - nil, nil, nil, 605, nil, nil, nil, nil, 605, 605, - 605, 605, nil, 605, 605, 605, 605, nil, nil, nil, - nil, 605, 605, nil, nil, nil, 606, 606, 606, 605, - 606, 605, 605, 605, 606, 606, nil, nil, nil, 606, - nil, 606, 606, 606, 606, 606, 606, 606, nil, nil, - nil, nil, nil, 606, 606, 606, 606, 606, 606, 606, - nil, nil, 606, nil, nil, nil, nil, nil, nil, 606, - nil, nil, 606, 606, 606, 606, 606, 606, 606, 606, - nil, 606, 606, 606, nil, 606, 606, 606, 606, 606, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 606, - nil, nil, 606, nil, nil, 606, 606, nil, nil, 606, - nil, nil, nil, nil, nil, 606, nil, nil, nil, nil, - nil, nil, nil, nil, 606, nil, nil, nil, nil, 606, - 606, 606, 606, nil, 606, 606, 606, 606, nil, nil, - nil, nil, 606, 606, nil, nil, nil, 610, 610, 610, - 606, 610, 606, 606, 606, 610, 610, nil, nil, nil, - 610, nil, 610, 610, 610, 610, 610, 610, 610, nil, - nil, nil, nil, nil, 610, 610, 610, 610, 610, 610, - 610, nil, nil, 610, nil, nil, nil, nil, nil, nil, - 610, nil, nil, 610, 610, 610, 610, 610, 610, 610, - 610, nil, 610, 610, 610, nil, 610, 610, 610, 610, - 610, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 610, nil, nil, 610, nil, nil, 610, 610, nil, nil, - 610, nil, nil, nil, nil, nil, 610, nil, nil, nil, - nil, nil, nil, nil, nil, 610, nil, nil, nil, nil, - 610, 610, 610, 610, nil, 610, 610, 610, 610, nil, - nil, nil, nil, 610, 610, nil, nil, nil, 611, 611, - 611, 610, 611, 610, 610, 610, 611, 611, nil, nil, - nil, 611, nil, 611, 611, 611, 611, 611, 611, 611, - nil, nil, nil, nil, nil, 611, 611, 611, 611, 611, - 611, 611, nil, nil, 611, nil, nil, nil, nil, nil, - nil, 611, nil, nil, 611, 611, 611, 611, 611, 611, - 611, 611, nil, 611, 611, 611, nil, 611, 611, 611, - 611, 611, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 611, nil, nil, 611, nil, nil, 611, 611, nil, - nil, 611, nil, nil, nil, nil, nil, 611, nil, nil, - nil, nil, nil, nil, nil, nil, 611, nil, nil, nil, - nil, 611, 611, 611, 611, nil, 611, 611, 611, 611, - nil, nil, nil, nil, 611, 611, nil, nil, nil, 635, - 635, 635, 611, 635, 611, 611, 611, 635, 635, nil, - nil, nil, 635, nil, 635, 635, 635, 635, 635, 635, - 635, nil, nil, nil, nil, nil, 635, 635, 635, 635, - 635, 635, 635, nil, nil, 635, nil, nil, nil, nil, - nil, nil, 635, nil, nil, 635, 635, 635, 635, 635, - 635, 635, 635, nil, 635, 635, 635, nil, 635, 635, - 635, 635, 635, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 635, nil, nil, 635, nil, nil, 635, 635, - nil, nil, 635, nil, nil, nil, nil, nil, 635, nil, - nil, nil, nil, nil, nil, nil, nil, 635, nil, nil, - nil, nil, 635, 635, 635, 635, nil, 635, 635, 635, - 635, nil, nil, nil, nil, 635, 635, nil, nil, nil, - 638, 638, 638, 635, 638, 635, 635, 635, 638, 638, - nil, nil, nil, 638, nil, 638, 638, 638, 638, 638, - 638, 638, nil, nil, nil, nil, nil, 638, 638, 638, - 638, 638, 638, 638, nil, nil, 638, nil, nil, nil, - nil, nil, nil, 638, nil, nil, 638, 638, 638, 638, - 638, 638, 638, 638, nil, 638, 638, 638, nil, 638, - 638, 638, 638, 638, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 638, nil, nil, 638, nil, nil, 638, - 638, nil, nil, 638, nil, nil, nil, nil, nil, 638, - nil, nil, nil, nil, nil, nil, nil, nil, 638, nil, - nil, nil, nil, 638, 638, 638, 638, nil, 638, 638, - 638, 638, nil, nil, nil, nil, 638, 638, nil, nil, - nil, 642, 642, 642, 638, 642, 638, 638, 638, 642, - 642, nil, nil, nil, 642, nil, 642, 642, 642, 642, - 642, 642, 642, nil, nil, nil, nil, nil, 642, 642, - 642, 642, 642, 642, 642, nil, nil, 642, nil, nil, - nil, nil, nil, nil, 642, nil, nil, 642, 642, 642, - 642, 642, 642, 642, 642, nil, 642, 642, 642, nil, - 642, 642, nil, nil, 642, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 642, nil, nil, 642, nil, nil, - 642, 642, nil, nil, 642, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 642, 642, 642, 642, nil, 642, - 642, 642, 642, nil, nil, nil, nil, 642, 642, nil, - nil, nil, 653, 653, 653, 642, 653, 642, 642, 642, - 653, 653, nil, nil, nil, 653, nil, 653, 653, 653, - 653, 653, 653, 653, nil, nil, nil, nil, nil, 653, - 653, 653, 653, 653, 653, 653, nil, nil, 653, nil, - nil, nil, nil, nil, nil, 653, nil, nil, 653, 653, - 653, 653, 653, 653, 653, 653, nil, 653, 653, 653, - nil, 653, 653, nil, nil, 653, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 653, nil, nil, 653, nil, - nil, 653, 653, nil, nil, 653, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 653, 653, 653, 653, nil, - 653, 653, 653, 653, nil, nil, nil, nil, 653, 653, - nil, nil, nil, 658, 658, 658, 653, 658, 653, 653, - 653, 658, 658, nil, nil, nil, 658, nil, 658, 658, - 658, 658, 658, 658, 658, nil, nil, nil, nil, nil, - 658, 658, 658, 658, 658, 658, 658, nil, nil, 658, - nil, nil, nil, nil, nil, nil, 658, nil, nil, 658, - 658, 658, 658, 658, 658, 658, 658, nil, 658, 658, - 658, nil, 658, 658, 658, 658, 658, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 658, nil, nil, 658, - nil, nil, 658, 658, nil, nil, 658, nil, 658, nil, - nil, nil, 658, nil, nil, nil, nil, nil, nil, nil, - nil, 658, nil, nil, nil, nil, 658, 658, 658, 658, - nil, 658, 658, 658, 658, nil, nil, nil, nil, 658, - 658, nil, nil, nil, 684, 684, 684, 658, 684, 658, - 658, 658, 684, 684, nil, nil, nil, 684, nil, 684, - 684, 684, 684, 684, 684, 684, nil, nil, nil, nil, - nil, 684, 684, 684, 684, 684, 684, 684, nil, nil, - 684, nil, nil, nil, nil, nil, nil, 684, nil, nil, - 684, 684, 684, 684, 684, 684, 684, 684, nil, 684, - 684, 684, nil, 684, 684, 684, 684, 684, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 684, nil, nil, - 684, nil, nil, 684, 684, nil, nil, 684, nil, nil, - nil, nil, nil, 684, nil, nil, nil, nil, nil, nil, - nil, nil, 684, nil, nil, nil, nil, 684, 684, 684, - 684, nil, 684, 684, 684, 684, nil, nil, nil, nil, - 684, 684, nil, nil, nil, 711, 711, 711, 684, 711, - 684, 684, 684, 711, 711, nil, nil, nil, 711, nil, - 711, 711, 711, 711, 711, 711, 711, nil, nil, nil, - nil, nil, 711, 711, 711, 711, 711, 711, 711, nil, - nil, 711, nil, nil, nil, nil, nil, nil, 711, nil, - nil, 711, 711, 711, 711, 711, 711, 711, 711, nil, - 711, 711, 711, nil, 711, 711, 711, 711, 711, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 711, nil, - nil, 711, nil, nil, 711, 711, nil, nil, 711, nil, - nil, nil, nil, nil, 711, nil, nil, nil, nil, nil, - nil, nil, nil, 711, nil, nil, nil, nil, 711, 711, - 711, 711, nil, 711, 711, 711, 711, nil, nil, nil, - nil, 711, 711, nil, nil, nil, 717, 717, 717, 711, - 717, 711, 711, 711, 717, 717, nil, nil, nil, 717, - nil, 717, 717, 717, 717, 717, 717, 717, nil, nil, - nil, nil, nil, 717, 717, 717, 717, 717, 717, 717, - nil, nil, 717, nil, nil, nil, nil, nil, nil, 717, - nil, nil, 717, 717, 717, 717, 717, 717, 717, 717, - nil, 717, 717, 717, nil, 717, 717, 717, 717, 717, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 717, - nil, nil, 717, nil, nil, 717, 717, nil, nil, 717, - nil, nil, nil, nil, nil, 717, nil, nil, nil, nil, - nil, nil, nil, nil, 717, nil, nil, nil, nil, 717, - 717, 717, 717, nil, 717, 717, 717, 717, nil, nil, - nil, nil, 717, 717, nil, nil, nil, 739, 739, 739, - 717, 739, 717, 717, 717, 739, 739, nil, nil, nil, - 739, nil, 739, 739, 739, 739, 739, 739, 739, nil, - nil, nil, nil, nil, 739, 739, 739, 739, 739, 739, - 739, nil, nil, 739, nil, nil, nil, nil, nil, nil, - 739, nil, nil, 739, 739, 739, 739, 739, 739, 739, - 739, nil, 739, 739, 739, nil, 739, 739, 739, 739, - 739, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 739, nil, nil, 739, nil, nil, 739, 739, nil, nil, - 739, nil, nil, nil, nil, nil, 739, nil, nil, nil, - nil, nil, nil, nil, nil, 739, nil, nil, nil, nil, - 739, 739, 739, 739, nil, 739, 739, 739, 739, nil, - nil, nil, nil, 739, 739, nil, nil, nil, 747, 747, - 747, 739, 747, 739, 739, 739, 747, 747, nil, nil, - nil, 747, nil, 747, 747, 747, 747, 747, 747, 747, - nil, nil, nil, nil, nil, 747, 747, 747, 747, 747, - 747, 747, nil, nil, 747, nil, nil, nil, nil, nil, - nil, 747, nil, nil, 747, 747, 747, 747, 747, 747, - 747, 747, nil, 747, 747, 747, nil, 747, 747, 747, - 747, 747, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 747, nil, nil, 747, nil, nil, 747, 747, nil, - nil, 747, nil, nil, nil, nil, nil, 747, nil, nil, - nil, nil, nil, nil, nil, nil, 747, nil, nil, nil, - nil, 747, 747, 747, 747, nil, 747, 747, 747, 747, - nil, nil, nil, nil, 747, 747, nil, nil, nil, 760, - 760, 760, 747, 760, 747, 747, 747, 760, 760, nil, - nil, nil, 760, nil, 760, 760, 760, 760, 760, 760, - 760, nil, nil, nil, nil, nil, 760, 760, 760, 760, - 760, 760, 760, nil, nil, 760, nil, nil, nil, nil, - nil, nil, 760, nil, nil, 760, 760, 760, 760, 760, - 760, 760, 760, nil, 760, 760, 760, nil, 760, 760, - 760, 760, 760, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 760, nil, nil, 760, nil, nil, 760, 760, - nil, nil, 760, nil, nil, nil, nil, nil, 760, nil, - nil, nil, nil, nil, nil, nil, nil, 760, nil, nil, - nil, nil, 760, 760, 760, 760, nil, 760, 760, 760, - 760, nil, nil, nil, nil, 760, 760, nil, nil, nil, - 761, 761, 761, 760, 761, 760, 760, 760, 761, 761, - nil, nil, nil, 761, nil, 761, 761, 761, 761, 761, - 761, 761, nil, nil, nil, nil, nil, 761, 761, 761, - 761, 761, 761, 761, nil, nil, 761, nil, nil, nil, - nil, nil, nil, 761, nil, nil, 761, 761, 761, 761, - 761, 761, 761, 761, nil, 761, 761, 761, nil, 761, - 761, 761, 761, 761, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 761, nil, nil, 761, nil, nil, 761, - 761, nil, nil, 761, nil, nil, nil, nil, nil, 761, - nil, nil, nil, nil, nil, nil, nil, nil, 761, nil, - nil, nil, nil, 761, 761, 761, 761, nil, 761, 761, - 761, 761, nil, nil, nil, nil, 761, 761, nil, nil, - nil, 762, 762, 762, 761, 762, 761, 761, 761, 762, - 762, nil, nil, nil, 762, nil, 762, 762, 762, 762, - 762, 762, 762, nil, nil, nil, nil, nil, 762, 762, - 762, 762, 762, 762, 762, nil, nil, 762, nil, nil, - nil, nil, nil, nil, 762, nil, nil, 762, 762, 762, - 762, 762, 762, 762, 762, nil, 762, 762, 762, nil, - 762, 762, 762, 762, 762, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 762, nil, nil, 762, nil, nil, - 762, 762, nil, nil, 762, nil, nil, nil, nil, nil, - 762, nil, nil, nil, nil, nil, nil, nil, nil, 762, - nil, nil, nil, nil, 762, 762, 762, 762, nil, 762, - 762, 762, 762, nil, nil, nil, nil, 762, 762, nil, - nil, nil, 763, 763, 763, 762, 763, 762, 762, 762, - 763, 763, nil, nil, nil, 763, nil, 763, 763, 763, - 763, 763, 763, 763, nil, nil, nil, nil, nil, 763, - 763, 763, 763, 763, 763, 763, nil, nil, 763, nil, - nil, nil, nil, nil, nil, 763, nil, nil, 763, 763, - 763, 763, 763, 763, 763, 763, nil, 763, 763, 763, - nil, 763, 763, 763, 763, 763, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 763, nil, nil, 763, nil, - nil, 763, 763, nil, nil, 763, nil, nil, nil, nil, - nil, 763, nil, nil, nil, nil, nil, nil, nil, nil, - 763, nil, nil, nil, nil, 763, 763, 763, 763, nil, - 763, 763, 763, 763, nil, nil, nil, nil, 763, 763, - nil, nil, nil, 765, 765, 765, 763, 765, 763, 763, - 763, 765, 765, nil, nil, nil, 765, nil, 765, 765, - 765, 765, 765, 765, 765, nil, nil, nil, nil, nil, - 765, 765, 765, 765, 765, 765, 765, nil, nil, 765, - nil, nil, nil, nil, nil, nil, 765, nil, nil, 765, - 765, 765, 765, 765, 765, 765, 765, nil, 765, 765, - 765, nil, 765, 765, 765, 765, 765, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 765, nil, nil, 765, - nil, nil, 765, 765, nil, nil, 765, nil, nil, nil, - nil, nil, 765, nil, nil, nil, nil, nil, nil, nil, - nil, 765, nil, nil, nil, nil, 765, 765, 765, 765, - nil, 765, 765, 765, 765, nil, nil, nil, nil, 765, - 765, nil, nil, nil, 805, 805, 805, 765, 805, 765, - 765, 765, 805, 805, nil, nil, nil, 805, nil, 805, - 805, 805, 805, 805, 805, 805, nil, nil, nil, nil, - nil, 805, 805, 805, 805, 805, 805, 805, nil, nil, - 805, nil, nil, nil, nil, nil, nil, 805, nil, nil, - 805, 805, 805, 805, 805, 805, 805, 805, nil, 805, - 805, 805, nil, 805, 805, 805, 805, 805, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 805, nil, nil, - 805, nil, nil, 805, 805, nil, nil, 805, nil, nil, - nil, nil, nil, 805, nil, nil, nil, nil, nil, nil, - nil, nil, 805, nil, nil, nil, nil, 805, 805, 805, - 805, nil, 805, 805, 805, 805, nil, nil, nil, nil, - 805, 805, nil, nil, nil, 818, 818, 818, 805, 818, - 805, 805, 805, 818, 818, nil, nil, nil, 818, nil, - 818, 818, 818, 818, 818, 818, 818, nil, nil, nil, - nil, nil, 818, 818, 818, 818, 818, 818, 818, nil, - nil, 818, nil, nil, nil, nil, nil, nil, 818, nil, - nil, 818, 818, 818, 818, 818, 818, 818, 818, nil, - 818, 818, 818, nil, 818, 818, 818, 818, 818, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 818, nil, - nil, 818, nil, nil, 818, 818, nil, nil, 818, nil, - nil, nil, nil, nil, 818, nil, nil, nil, nil, nil, - nil, nil, nil, 818, nil, nil, nil, nil, 818, 818, - 818, 818, nil, 818, 818, 818, 818, nil, nil, nil, - nil, 818, 818, nil, nil, nil, 823, 823, 823, 818, - 823, 818, 818, 818, 823, 823, nil, nil, nil, 823, - nil, 823, 823, 823, 823, 823, 823, 823, nil, nil, - nil, nil, nil, 823, 823, 823, 823, 823, 823, 823, - nil, nil, 823, nil, nil, nil, nil, nil, nil, 823, - nil, nil, 823, 823, 823, 823, 823, 823, 823, 823, - nil, 823, 823, 823, nil, 823, 823, 823, 823, 823, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 823, - nil, nil, 823, nil, nil, 823, 823, nil, nil, 823, - nil, 823, nil, nil, nil, 823, nil, nil, nil, nil, - nil, nil, nil, nil, 823, nil, nil, nil, nil, 823, - 823, 823, 823, nil, 823, 823, 823, 823, nil, nil, - nil, nil, 823, 823, nil, nil, nil, 841, 841, 841, - 823, 841, 823, 823, 823, 841, 841, nil, nil, nil, - 841, nil, 841, 841, 841, 841, 841, 841, 841, nil, - nil, nil, nil, nil, 841, 841, 841, 841, 841, 841, - 841, nil, nil, 841, nil, nil, nil, nil, nil, nil, - 841, nil, nil, 841, 841, 841, 841, 841, 841, 841, - 841, 841, 841, 841, 841, nil, 841, 841, 841, 841, - 841, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 841, nil, nil, 841, nil, nil, 841, 841, nil, nil, - 841, nil, nil, nil, 841, nil, 841, nil, nil, 841, - nil, nil, nil, nil, nil, 841, nil, nil, nil, nil, - 841, 841, 841, 841, nil, 841, 841, 841, 841, nil, - nil, nil, nil, 841, 841, nil, nil, nil, 842, 842, - 842, 841, 842, 841, 841, 841, 842, 842, nil, nil, - nil, 842, nil, 842, 842, 842, 842, 842, 842, 842, - nil, nil, nil, nil, nil, 842, 842, 842, 842, 842, - 842, 842, nil, nil, 842, nil, nil, nil, nil, nil, - nil, 842, nil, nil, 842, 842, 842, 842, 842, 842, - 842, 842, nil, 842, 842, 842, nil, 842, 842, 842, - 842, 842, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 842, nil, nil, 842, nil, nil, 842, 842, nil, - nil, 842, nil, nil, nil, nil, nil, 842, nil, nil, - nil, nil, nil, nil, nil, nil, 842, nil, nil, nil, - nil, 842, 842, 842, 842, nil, 842, 842, 842, 842, - nil, nil, nil, nil, 842, 842, nil, nil, nil, 857, - 857, 857, 842, 857, 842, 842, 842, 857, 857, nil, - nil, nil, 857, nil, 857, 857, 857, 857, 857, 857, - 857, nil, nil, nil, nil, nil, 857, 857, 857, 857, - 857, 857, 857, nil, nil, 857, nil, nil, nil, nil, - nil, nil, 857, nil, nil, 857, 857, 857, 857, 857, - 857, 857, 857, nil, 857, 857, 857, nil, 857, 857, - nil, nil, 857, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 857, nil, nil, 857, nil, nil, 857, 857, - nil, nil, 857, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 857, 857, 857, 857, nil, 857, 857, 857, - 857, nil, nil, nil, nil, 857, 857, nil, nil, nil, - 866, 866, 866, 857, 866, 857, 857, 857, 866, 866, - nil, nil, nil, 866, nil, 866, 866, 866, 866, 866, - 866, 866, nil, nil, nil, nil, nil, 866, 866, 866, - 866, 866, 866, 866, nil, nil, 866, nil, nil, nil, - nil, nil, nil, 866, nil, nil, 866, 866, 866, 866, - 866, 866, 866, 866, nil, 866, 866, 866, nil, 866, - 866, nil, nil, 866, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 866, nil, nil, 866, nil, nil, 866, - 866, nil, nil, 866, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 866, 866, 866, 866, nil, 866, 866, - 866, 866, nil, nil, nil, nil, 866, 866, nil, nil, - nil, 919, 919, 919, 866, 919, 866, 866, 866, 919, - 919, nil, nil, nil, 919, nil, 919, 919, 919, 919, - 919, 919, 919, nil, nil, nil, nil, nil, 919, 919, - 919, 919, 919, 919, 919, nil, nil, 919, nil, nil, - nil, nil, nil, nil, 919, nil, nil, 919, 919, 919, - 919, 919, 919, 919, 919, nil, 919, 919, 919, nil, - 919, 919, nil, nil, 919, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 919, nil, nil, 919, nil, nil, - 919, 919, nil, nil, 919, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 919, 919, 919, 919, nil, 919, - 919, 919, 919, nil, nil, nil, nil, 919, 919, nil, - nil, nil, 975, 975, 975, 919, 975, 919, 919, 919, - 975, 975, nil, nil, nil, 975, nil, 975, 975, 975, - 975, 975, 975, 975, nil, nil, nil, nil, nil, 975, - 975, 975, 975, 975, 975, 975, nil, nil, 975, nil, - nil, nil, nil, nil, nil, 975, nil, nil, 975, 975, - 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, - nil, 975, 975, 975, 975, 975, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 975, nil, nil, 975, nil, - nil, 975, 975, nil, nil, 975, nil, 975, nil, 975, - nil, 975, nil, nil, 975, nil, nil, nil, nil, nil, - 975, nil, nil, nil, nil, 975, 975, 975, 975, nil, - 975, 975, 975, 975, nil, nil, nil, nil, 975, 975, - nil, nil, nil, nil, nil, nil, 975, nil, 975, 975, - 975, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, nil, nil, nil, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, nil, nil, - nil, nil, nil, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, nil, 8, nil, nil, nil, nil, nil, - nil, nil, 8, 8, nil, 8, 8, 8, 8, 8, - 8, 8, nil, nil, 8, 8, nil, nil, nil, 8, - 8, 8, 8, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 8, 8, nil, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, nil, nil, 8, 8, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 8, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, nil, nil, nil, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, nil, nil, nil, nil, - nil, 9, 9, 9, 9, 9, 9, 9, 9, 9, - nil, nil, 9, nil, nil, nil, nil, nil, nil, nil, - 9, 9, nil, 9, 9, 9, 9, 9, 9, 9, - nil, nil, 9, 9, nil, nil, nil, 9, 9, 9, - 9, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 9, 9, nil, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, nil, - nil, 9, 9, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 9, 398, 398, 398, - 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, - 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, - 398, nil, nil, nil, 398, 398, 398, 398, 398, 398, - 398, 398, 398, 398, nil, nil, nil, nil, nil, 398, - 398, 398, 398, 398, 398, 398, 398, 398, nil, nil, - 398, nil, nil, nil, nil, nil, nil, nil, 398, 398, - nil, 398, 398, 398, 398, 398, 398, 398, nil, nil, - 398, 398, nil, nil, nil, 398, 398, 398, 398, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 398, 398, nil, 398, 398, 398, 398, 398, - 398, 398, 398, 398, 398, 398, 398, nil, nil, 398, - 398, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 398, 591, 591, 591, 591, 591, - 591, 591, 591, 591, 591, 591, 591, 591, 591, 591, - 591, 591, 591, 591, 591, 591, 591, 591, 591, nil, - nil, nil, 591, 591, 591, 591, 591, 591, 591, 591, - 591, 591, nil, nil, nil, nil, nil, 591, 591, 591, - 591, 591, 591, 591, 591, 591, nil, nil, 591, nil, - nil, nil, nil, nil, nil, nil, 591, 591, nil, 591, - 591, 591, 591, 591, 591, 591, nil, nil, 591, 591, - nil, nil, nil, 591, 591, 591, 591, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 591, 591, nil, 591, 591, 591, 591, 591, 591, 591, - 591, 591, 591, 591, 591, nil, nil, 591, 591, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 591, 71, 71, 71, 71, 71, 71, 71, - 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, - 71, 71, 71, 71, 71, 71, 71, nil, nil, nil, - 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, - nil, nil, nil, nil, nil, 71, 71, 71, 71, 71, - 71, 71, 71, 71, 71, 71, 71, nil, 71, nil, - nil, nil, nil, nil, 71, 71, nil, 71, 71, 71, - 71, 71, 71, 71, nil, nil, 71, 71, nil, nil, - nil, 71, 71, 71, 71, nil, nil, nil, nil, nil, - 71, nil, nil, nil, nil, nil, nil, nil, 71, 71, - nil, 71, 71, 71, 71, 71, 71, 71, 71, 71, - 71, 71, 71, nil, nil, 71, 723, 723, 723, 723, - 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, - 723, 723, 723, 723, 723, 723, 723, 723, 723, 723, - nil, nil, nil, 723, 723, 723, 723, 723, 723, 723, - 723, 723, 723, nil, nil, nil, nil, nil, 723, 723, - 723, 723, 723, 723, 723, 723, 723, nil, nil, 723, - nil, nil, nil, nil, nil, nil, nil, 723, 723, nil, - 723, 723, 723, 723, 723, 723, 723, nil, nil, 723, - 723, nil, nil, nil, 723, 723, 723, 723, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 723, 723, nil, 723, 723, 723, 723, 723, 723, - 723, 723, 723, 723, 723, 723, 215, 215, 723, nil, - 215, nil, nil, nil, nil, nil, nil, nil, 215, 215, - nil, 215, 215, 215, 215, 215, 215, 215, nil, nil, - 215, 215, nil, nil, nil, 215, 215, 215, 215, nil, - nil, nil, nil, nil, 215, nil, nil, nil, nil, nil, - nil, nil, 215, 215, nil, 215, 215, 215, 215, 215, - 215, 215, 215, 215, 215, 215, 215, 216, 216, 215, - nil, 216, nil, nil, nil, nil, nil, nil, nil, 216, - 216, nil, 216, 216, 216, 216, 216, 216, 216, nil, - nil, 216, 216, nil, nil, nil, 216, 216, 216, 216, - nil, nil, nil, nil, nil, 216, nil, nil, nil, nil, - nil, nil, nil, 216, 216, nil, 216, 216, 216, 216, - 216, 216, 216, 216, 216, 216, 216, 216, 263, 263, - 216, nil, 263, nil, nil, nil, nil, nil, nil, nil, - 263, 263, nil, 263, 263, 263, 263, 263, 263, 263, - nil, nil, 263, 263, nil, nil, nil, 263, 263, 263, - 263, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 263, 263, nil, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, 263, 448, - 448, 263, nil, 448, nil, nil, nil, nil, nil, nil, - nil, 448, 448, nil, 448, 448, 448, 448, 448, 448, - 448, nil, nil, 448, 448, nil, nil, nil, 448, 448, - 448, 448, nil, nil, nil, nil, nil, 448, nil, nil, - nil, nil, nil, nil, nil, 448, 448, nil, 448, 448, - 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, - 449, 449, 448, nil, 449, nil, nil, nil, nil, nil, - nil, nil, 449, 449, nil, 449, 449, 449, 449, 449, - 449, 449, nil, nil, 449, 449, nil, nil, nil, 449, - 449, 449, 449, nil, nil, nil, nil, nil, 449, nil, - nil, nil, nil, nil, nil, nil, 449, 449, nil, 449, - 449, 449, 449, 449, 449, 449, 449, 449, 449, 449, - 449, 515, 515, 449, nil, 515, nil, nil, nil, nil, - nil, nil, nil, 515, 515, nil, 515, 515, 515, 515, - 515, 515, 515, nil, nil, 515, 515, nil, nil, nil, - 515, 515, 515, 515, nil, nil, nil, nil, nil, 515, - nil, nil, nil, nil, nil, nil, nil, 515, 515, nil, - 515, 515, 515, 515, 515, 515, 515, 515, 515, 515, - 515, 515, 516, 516, 515, nil, 516, nil, nil, nil, - nil, nil, nil, nil, 516, 516, nil, 516, 516, 516, - 516, 516, 516, 516, nil, nil, 516, 516, nil, nil, - nil, 516, 516, 516, 516, nil, nil, nil, nil, nil, - 516, nil, nil, nil, nil, nil, nil, nil, 516, 516, - nil, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 516, 525, 525, 516, nil, 525, nil, nil, - nil, nil, nil, nil, nil, 525, 525, nil, 525, 525, - 525, 525, 525, 525, 525, nil, nil, 525, 525, nil, - nil, nil, 525, 525, 525, 525, nil, nil, nil, nil, - nil, 525, nil, nil, nil, nil, nil, nil, nil, 525, - 525, nil, 525, 525, 525, 525, 525, 525, 525, 525, - 525, 525, 525, 525, 526, 526, 525, nil, 526, nil, - nil, nil, nil, nil, nil, nil, 526, 526, nil, 526, - 526, 526, 526, 526, 526, 526, nil, nil, 526, 526, - nil, nil, nil, 526, 526, 526, 526, nil, nil, nil, - nil, nil, 526, nil, nil, nil, nil, nil, nil, nil, - 526, 526, nil, 526, 526, 526, 526, 526, 526, 526, - 526, 526, 526, 526, 526, 553, 553, 526, nil, 553, - nil, nil, nil, nil, nil, nil, nil, 553, 553, nil, - 553, 553, 553, 553, 553, 553, 553, nil, nil, 553, - 553, nil, nil, nil, 553, 553, 553, 553, nil, nil, - nil, nil, nil, 553, nil, nil, nil, nil, nil, nil, - nil, 553, 553, nil, 553, 553, 553, 553, 553, 553, - 553, 553, 553, 553, 553, 553, 554, 554, 553, nil, - 554, nil, nil, nil, nil, nil, nil, nil, 554, 554, - nil, 554, 554, 554, 554, 554, 554, 554, nil, nil, - 554, 554, nil, nil, nil, 554, 554, 554, 554, nil, - nil, nil, nil, nil, 554, nil, nil, nil, nil, nil, - nil, nil, 554, 554, nil, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 560, 560, 554, - nil, 560, nil, nil, nil, nil, nil, nil, nil, 560, - 560, nil, 560, 560, 560, 560, 560, 560, 560, nil, - nil, 560, 560, nil, nil, nil, 560, 560, 560, 560, - nil, nil, nil, nil, nil, 560, nil, nil, nil, nil, - nil, nil, nil, 560, 560, nil, 560, 560, 560, 560, - 560, 560, 560, 560, 560, 560, 560, 560, 561, 561, - 560, nil, 561, nil, nil, nil, nil, nil, nil, nil, - 561, 561, nil, 561, 561, 561, 561, 561, 561, 561, - nil, nil, 561, 561, nil, nil, nil, 561, 561, 561, - 561, nil, nil, nil, nil, nil, 561, nil, nil, nil, - nil, nil, nil, nil, 561, 561, nil, 561, 561, 561, - 561, 561, 561, 561, 561, 561, 561, 561, 561, 597, - 597, 561, nil, 597, nil, nil, nil, nil, nil, nil, - nil, 597, 597, nil, 597, 597, 597, 597, 597, 597, - 597, nil, nil, 597, 597, nil, nil, nil, 597, 597, - 597, 597, nil, nil, nil, nil, nil, 597, nil, nil, - nil, nil, nil, nil, nil, 597, 597, nil, 597, 597, - 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, - 598, 598, 597, nil, 598, nil, nil, nil, nil, nil, - nil, nil, 598, 598, nil, 598, 598, 598, 598, 598, - 598, 598, nil, nil, 598, 598, nil, nil, nil, 598, - 598, 598, 598, nil, nil, nil, nil, nil, 598, nil, - nil, nil, nil, nil, nil, nil, 598, 598, nil, 598, - 598, 598, 598, 598, 598, 598, 598, 598, 598, 598, - 598, 972, 972, 598, nil, 972, nil, nil, nil, nil, - nil, nil, nil, 972, 972, nil, 972, 972, 972, 972, - 972, 972, 972, nil, nil, 972, 972, nil, nil, nil, - 972, 972, 972, 972, nil, nil, nil, nil, nil, 972, - nil, nil, nil, nil, nil, nil, nil, 972, 972, nil, - 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, - 972, 972, 976, 976, 972, nil, 976, nil, nil, nil, - nil, nil, nil, nil, 976, 976, nil, 976, 976, 976, - 976, 976, 976, 976, nil, nil, 976, 976, nil, nil, - nil, 976, 976, 976, 976, nil, nil, nil, nil, nil, - 976, nil, nil, nil, nil, nil, nil, nil, 976, 976, - nil, 976, 976, 976, 976, 976, 976, 976, 976, 976, - 976, 976, 976, 977, 977, 976, nil, 977, nil, nil, - nil, nil, nil, nil, nil, 977, 977, nil, 977, 977, - 977, 977, 977, 977, 977, nil, nil, 977, 977, nil, - nil, nil, 977, 977, 977, 977, nil, nil, nil, nil, - nil, 977, nil, nil, nil, nil, nil, nil, nil, 977, - 977, nil, 977, 977, 977, 977, 977, 977, 977, 977, - 977, 977, 977, 977, nil, 542, 977, 542, 542, 542, - 542, 542, nil, 664, nil, 664, 664, 664, 664, 664, - 542, nil, nil, nil, nil, nil, nil, nil, 664, nil, - 721, nil, 721, 721, 721, 721, 721, nil, nil, nil, - nil, nil, 542, 542, nil, 721, nil, nil, nil, nil, - 664, 542, 542, 542, 542, nil, nil, nil, 542, 664, - 664, 664, 664, nil, nil, nil, 664, 721, nil, 722, - nil, 722, 722, 722, 722, 722, 721, 721, 721, 721, - nil, nil, nil, 721, 722, nil, 799, nil, 799, 799, - 799, 799, 799, nil, 801, nil, 801, 801, 801, 801, - 801, 799, nil, nil, nil, nil, 722, nil, nil, 801, - nil, nil, nil, nil, nil, 722, 722, 722, 722, nil, - nil, nil, 722, 799, nil, nil, nil, nil, nil, nil, - nil, 801, 799, 799, 799, 799, nil, nil, nil, 799, - 801, 801, 801, 801, nil, nil, 910, 801, 910, 910, - 910, 910, 910, nil, 912, nil, 912, 912, 912, 912, - 912, 910, nil, nil, nil, nil, nil, nil, nil, 912, - nil, 934, nil, 934, 934, 934, 934, 934, nil, nil, - nil, nil, nil, 910, nil, nil, 934, nil, nil, nil, - nil, 912, 910, 910, 910, 910, nil, nil, nil, 910, - 912, 912, 912, 912, nil, nil, nil, 912, 934, nil, - 940, nil, 940, 940, 940, 940, 940, 934, 934, 934, - 934, nil, nil, nil, 934, 940, nil, 993, nil, 993, - 993, 993, 993, 993, 995, nil, 995, 995, 995, 995, - 995, nil, 993, nil, nil, nil, nil, 940, nil, 995, - nil, 997, nil, 997, 997, 997, 997, 997, 940, 940, - nil, nil, nil, 940, 993, nil, 997, nil, nil, nil, - nil, 995, nil, 993, 993, 993, 993, nil, nil, nil, - 993, nil, 995, 995, nil, nil, nil, 995, 997, nil, - 999, nil, 999, 999, 999, 999, 999, nil, nil, 997, - 997, nil, nil, nil, 997, 999, nil, 1014, nil, 1014, - 1014, 1014, 1014, 1014, 1032, nil, 1032, 1032, 1032, 1032, - 1032, nil, 1014, nil, nil, nil, nil, 999, nil, 1032, - nil, nil, nil, nil, nil, nil, nil, nil, 999, 999, - nil, nil, nil, 999, 1014, nil, nil, nil, nil, nil, - nil, 1032, nil, nil, nil, 1014, 1014, nil, nil, nil, - 1014, nil, 1032, 1032, nil, nil, nil, 1032 ] - -racc_action_pointer = [ - 1853, 10, nil, 81, nil, 5912, 909, -79, 23169, 23297, - -59, nil, -86, -80, 346, 107, 574, -81, nil, -71, - 6043, 1711, 176, nil, -62, nil, -8, 958, 1068, 6174, - 6305, 6436, nil, 1993, 6567, 6698, nil, 101, 282, 352, - 193, 332, 6837, 6968, 7099, 137, 576, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 1178, nil, 7238, 7369, - 7500, 4, nil, 7631, 7762, nil, nil, 7893, 8032, 8163, - 8294, 23681, nil, nil, nil, nil, nil, nil, nil, 141, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 0, nil, nil, - 112, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 276, nil, 8433, nil, nil, nil, nil, 8572, 8703, - 8834, 8965, 9104, 2133, nil, 303, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 169, nil, 2273, 9235, - 9366, 9497, 9628, 9759, 9890, 23855, 23916, nil, nil, 10021, - 10152, 10283, nil, nil, 682, -54, 138, 262, 166, 176, - 235, nil, 10414, 2413, 250, 10545, 10676, 10807, 10938, 11069, - 11200, 11331, 11462, 11593, 11724, 11855, 11986, 12117, 12248, 12379, - 12510, 12641, 12772, 12903, 13034, 13165, 13296, 13427, 13558, 13689, - 13820, nil, nil, 23977, nil, nil, 249, 13951, 14082, nil, - nil, nil, nil, nil, nil, nil, 14213, nil, 2133, nil, - 221, 251, nil, 14344, 308, 14475, nil, nil, 14606, 14737, - nil, nil, 216, nil, 14876, 1396, 287, 271, 2553, 300, - 368, 337, 15007, 2693, 686, 718, 771, 426, 794, nil, - 394, 366, 33, nil, nil, nil, 421, 360, 387, 15146, - nil, 472, 460, 834, nil, 462, nil, 15277, 2833, 1561, - 400, nil, -69, 368, 453, 452, 421, 501, nil, nil, - 620, -1, 11, 15408, 15539, 228, 579, 467, -18, 11, - 837, 555, 25, 595, nil, nil, 342, 434, -21, nil, - 870, nil, 522, 15670, nil, nil, nil, 194, 230, 379, - 413, 486, 510, 523, 577, 578, nil, 582, nil, 15801, - nil, 272, 456, 459, 465, 497, -41, -35, 501, nil, - nil, nil, nil, nil, nil, nil, nil, 529, 23425, nil, - nil, nil, nil, 535, nil, nil, 517, 15932, 531, nil, - nil, 525, nil, 930, 197, 641, nil, nil, 1853, nil, - nil, nil, nil, nil, 1993, 559, nil, 560, 563, 481, - 506, 1314, nil, nil, nil, 222, 334, 610, nil, nil, - 1446, 1582, nil, nil, nil, -35, nil, 611, 24038, 24099, - 16063, 217, 16194, 16325, 16456, 2833, 2973, 642, 772, 637, - 639, 663, 667, 1667, 4513, 666, 3113, 1397, 1531, 3253, - 3393, 3533, 3673, 3813, 3953, 4093, 915, 1240, 4233, 4373, - 2273, nil, 1718, nil, nil, nil, nil, 608, nil, nil, - nil, 613, nil, nil, 16587, nil, 16718, nil, 16849, nil, - 363, nil, nil, nil, 16988, 1604, 2973, 622, 625, nil, - nil, 629, 17127, 635, 17258, 24160, 24221, 1006, 678, nil, - 17389, 643, nil, 17520, 17651, 24282, 24343, 2413, 17782, 770, - 769, 669, 713, nil, 17913, nil, nil, 18044, nil, nil, - nil, nil, 24954, 3113, 793, nil, 3253, 62, 147, 792, - 800, 18175, 18306, 24404, 24465, 27, nil, nil, 1038, nil, - 24526, 24587, 18437, nil, nil, 250, 3393, 724, nil, -33, - nil, nil, nil, 832, nil, nil, nil, 696, nil, nil, - 388, nil, 390, nil, nil, 684, nil, 696, nil, nil, - nil, 23553, nil, 698, 18568, 18699, 18830, 24648, 24709, 18969, - 19100, 552, 738, 19231, 19362, 19493, 19624, 741, nil, nil, - 19755, 19886, 747, nil, nil, nil, 301, 343, 466, 604, - 720, 720, 844, nil, 827, 6, nil, nil, 745, -54, - 852, nil, 739, nil, 786, 20017, nil, nil, 20148, nil, - 763, -83, 20279, 744, nil, 751, 123, 180, 793, 248, - 1040, 794, 755, 20410, nil, 840, 214, 893, 20541, nil, - nil, nil, 503, nil, 24962, nil, 782, 784, nil, 787, - 789, 790, nil, nil, nil, nil, nil, nil, nil, nil, - 782, 1278, nil, nil, 20672, nil, nil, nil, 890, nil, - nil, nil, 909, nil, nil, 911, 712, nil, 950, nil, - nil, nil, nil, 964, nil, 26, 845, 41, 68, 151, - 185, 20803, 717, 1146, nil, 848, 3533, 20934, nil, 971, - 3673, 24979, 25018, 23794, nil, nil, nil, nil, nil, nil, - 3813, nil, nil, nil, nil, nil, nil, nil, 849, 21065, - 860, 374, 443, 714, 826, nil, 2553, 21196, nil, 858, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 21327, 21458, 21589, 21720, 520, 21851, nil, -53, nil, nil, - 879, nil, nil, 889, nil, 3953, nil, nil, nil, nil, - nil, 863, 236, nil, nil, 995, nil, 4093, 876, 923, - nil, nil, nil, 89, 881, 780, nil, nil, 661, 25035, - nil, 25043, nil, 1377, nil, 21982, nil, 1314, nil, 882, - 335, 886, nil, nil, nil, nil, 1013, nil, 22113, 1029, - 4233, 4373, nil, 22244, 4513, 152, 181, nil, 1034, 298, - 4653, nil, 1035, 916, 327, nil, 922, 917, 549, nil, - nil, 22375, 22506, 2693, 4793, nil, 920, 922, nil, 924, - 926, 929, nil, 964, 944, 943, 936, 22637, nil, nil, - nil, nil, 4933, nil, nil, 32, 22768, nil, nil, nil, - nil, 996, 954, nil, nil, nil, 959, 963, nil, 964, - 965, nil, 968, nil, nil, 972, 1413, 970, 951, nil, - nil, 33, nil, 1097, 1103, nil, 85, nil, nil, nil, - 1104, nil, nil, nil, 1025, nil, nil, 1203, nil, nil, - 25095, nil, 25103, nil, 6745, nil, nil, 1007, 1242, 22899, - 1116, 1063, nil, 5073, 34, 35, 1148, 1064, 36, nil, - 5213, 5353, nil, nil, 25120, nil, 8341, nil, 15054, nil, - 25159, nil, nil, nil, nil, 398, 1307, 987, 5493, nil, - nil, nil, nil, nil, 5633, nil, 5773, 988, nil, nil, - 990, 992, 993, 994, nil, 995, nil, 504, nil, nil, - nil, 1150, 24770, nil, 1123, 23030, 24831, 24892, 42, 1019, - 1140, 1020, 1021, 1023, 1026, 1027, 1439, 1030, 1511, 760, - 1156, 1158, nil, 25176, nil, 25183, nil, 25200, nil, 25239, - nil, nil, nil, 1319, 1080, 1083, nil, 1053, 98, 102, - 111, 138, nil, nil, 25256, nil, nil, nil, nil, 1647, - 1051, nil, nil, nil, 1055, 1056, 1063, 1064, nil, 145, - 1069, 1074, 25263, nil, nil, nil, nil, nil, 1075, nil ] - -racc_action_default = [ - -3, -607, -1, -593, -4, -607, -7, -607, -607, -607, - -607, -29, -607, -607, -33, -607, -607, -281, -45, -595, - -607, -50, -52, -53, -54, -58, -258, -258, -258, -294, - -330, -331, -70, -11, -74, -82, -84, -607, -497, -498, - -607, -607, -607, -607, -607, -595, -237, -272, -273, -274, - -275, -276, -277, -278, -279, -280, -581, -283, -287, -606, - -571, -302, -304, -607, -607, -308, -311, -593, -607, -607, - -607, -607, -332, -333, -335, -336, -438, -439, -440, -441, - -442, -463, -445, -446, -465, -467, -450, -455, -459, -461, - -477, -465, -479, -481, -482, -483, -484, -579, -486, -487, - -580, -489, -490, -491, -492, -493, -494, -495, -496, -501, - -502, -607, -2, -594, -602, -603, -604, -6, -607, -607, - -607, -607, -607, -3, -17, -607, -113, -114, -115, -116, - -117, -118, -119, -120, -121, -125, -126, -127, -128, -129, - -130, -131, -132, -133, -134, -135, -136, -137, -138, -139, - -140, -141, -142, -143, -144, -145, -146, -147, -148, -149, - -150, -151, -152, -153, -154, -155, -156, -157, -158, -159, - -160, -161, -162, -163, -164, -165, -166, -167, -168, -169, - -170, -171, -172, -173, -174, -175, -176, -177, -178, -179, - -180, -181, -182, -183, -184, -185, -186, -187, -188, -189, - -190, -191, -192, -193, -194, -195, -22, -122, -11, -607, - -607, -607, -607, -607, -248, -607, -607, -591, -592, -607, - -607, -595, -596, -49, -607, -497, -498, -607, -281, -607, - -607, -229, -607, -11, -607, -607, -607, -607, -607, -607, - -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, - -607, -607, -607, -607, -607, -607, -607, -607, -607, -607, - -607, -402, -404, -607, -589, -590, -59, -248, -607, -301, - -408, -417, -419, -65, -414, -66, -595, -67, -238, -253, - -262, -262, -257, -607, -263, -607, -463, -573, -607, -607, - -68, -69, -593, -12, -607, -15, -607, -72, -11, -595, - -607, -75, -78, -11, -90, -91, -607, -607, -98, -294, - -297, -595, -607, -330, -331, -334, -415, -607, -80, -607, - -86, -291, -480, -607, -214, -215, -230, -607, -11, -285, - -595, -239, -599, -599, -607, -607, -599, -607, -303, -393, - -51, -607, -607, -607, -607, -593, -607, -594, -497, -498, - -607, -607, -281, -607, -346, -347, -108, -109, -607, -111, - -607, -281, -505, -607, -497, -498, -323, -113, -114, -155, - -156, -157, -173, -178, -185, -188, -325, -607, -569, -607, - -443, -607, -607, -607, -607, -607, -607, -607, -607, 1040, - -5, -605, -23, -24, -25, -26, -27, -607, -607, -19, - -20, -21, -123, -607, -30, -32, -268, -607, -607, -267, - -31, -607, -34, -607, -281, -42, -44, -196, -243, -263, - -46, -47, -35, -197, -243, -595, -249, -262, -262, -582, - -583, -258, -412, -584, -585, -583, -582, -258, -411, -413, - -584, -585, -41, -204, -48, -595, -300, -607, -607, -607, - -248, -291, -607, -607, -607, -205, -206, -207, -208, -209, - -210, -211, -212, -216, -217, -218, -219, -220, -221, -222, - -223, -224, -225, -226, -227, -228, -231, -232, -233, -234, - -595, -423, -258, -582, -583, -56, -60, -595, -259, -421, - -423, -595, -296, -254, -607, -255, -607, -260, -607, -264, - -607, -576, -578, -10, -594, -14, -3, -595, -71, -289, - -87, -76, -607, -595, -248, -607, -607, -97, -607, -480, - -607, -83, -88, -607, -607, -607, -607, -235, -607, -430, - -607, -595, -607, -240, -601, -600, -242, -601, -292, -293, - -572, -305, -529, -11, -337, -338, -11, -607, -607, -607, - -607, -607, -248, -607, -607, -291, -316, -108, -109, -110, - -607, -607, -248, -319, -503, -607, -11, -507, -327, -595, - -444, -464, -469, -607, -471, -447, -466, -607, -468, -449, - -607, -452, -607, -454, -457, -607, -458, -607, -478, -8, - -18, -607, -28, -271, -607, -607, -248, -607, -607, -607, - -607, -416, -607, -250, -252, -607, -607, -61, -247, -409, - -607, -607, -63, -410, -299, -597, -582, -583, -582, -583, - -595, -607, -607, -424, -55, -405, -421, -245, -607, -382, - -607, -295, -262, -261, -265, -607, -574, -575, -607, -13, - -607, -73, -607, -79, -85, -595, -582, -583, -246, -586, - -96, -607, -81, -607, -203, -213, -595, -606, -606, -284, - -286, -288, -599, -394, -529, -397, -568, -568, -512, -514, - -514, -514, -528, -530, -531, -532, -533, -534, -535, -536, - -537, -607, -539, -541, -543, -548, -550, -551, -553, -558, - -560, -561, -563, -564, -565, -607, -606, -339, -606, -309, - -340, -341, -312, -607, -315, -607, -595, -582, -583, -586, - -290, -607, -108, -109, -112, -595, -11, -607, -321, -607, - -11, -529, -529, -607, -570, -470, -473, -474, -475, -476, - -11, -448, -451, -453, -456, -460, -462, -124, -269, -607, - -595, -582, -583, -583, -582, -43, -244, -607, -598, -262, - -37, -199, -38, -200, -62, -39, -202, -40, -201, -64, - -607, -607, -607, -607, -416, -607, -403, -382, -407, -406, - -607, -418, -383, -595, -385, -11, -420, -256, -266, -577, - -16, -77, -416, -89, -298, -606, -344, -11, -431, -606, - -432, -433, -241, -607, -595, -607, -510, -511, -607, -607, - -521, -607, -524, -607, -526, -607, -348, -607, -350, -352, - -359, -595, -542, -552, -562, -566, -607, -342, -607, -607, - -11, -11, -314, -607, -11, -416, -607, -416, -607, -607, - -11, -324, -607, -595, -607, -328, -607, -270, -416, -36, - -198, -251, -607, -236, -11, -57, -568, -568, -364, -366, - -366, -366, -381, -607, -595, -387, -537, -545, -546, -556, - -422, -9, -11, -437, -345, -607, -607, -435, -395, -398, - -400, -607, -568, -549, -567, -513, -514, -514, -540, -514, - -514, -559, -514, -537, -554, -595, -607, -357, -607, -538, - -306, -607, -307, -607, -607, -265, -606, -317, -320, -504, - -607, -326, -506, -508, -507, -472, -425, -607, -362, -363, - -372, -374, -607, -377, -607, -379, -384, -607, -607, -607, - -544, -607, -436, -11, -497, -498, -607, -607, -281, -434, - -11, -11, -396, -509, -607, -517, -607, -519, -607, -522, - -607, -525, -527, -349, -351, -355, -607, -360, -11, -310, - -313, -426, -427, -428, -11, -322, -11, -568, -547, -365, - -366, -366, -366, -366, -557, -366, -386, -595, -389, -391, - -392, -555, -607, -291, -430, -248, -607, -607, -291, -607, - -607, -514, -514, -514, -514, -353, -607, -358, -607, -606, - -607, -607, -361, -607, -369, -607, -371, -607, -375, -607, - -378, -380, -388, -607, -290, -586, -429, -595, -582, -583, - -586, -290, -399, -401, -607, -515, -518, -520, -523, -607, - -356, -343, -318, -329, -366, -366, -366, -366, -390, -416, - -514, -354, -607, -367, -370, -373, -376, -516, -366, -368 ] - -racc_goto_table = [ - 220, 341, 342, 16, 262, 345, 376, 338, 16, 495, - 425, 263, 530, 331, 657, 116, 550, 270, 274, 215, - 2, 129, 129, 224, 6, 112, 327, 264, 720, 6, - 543, 546, 224, 224, 224, 301, 16, 306, 306, 124, - 207, 132, 132, 486, 409, 410, 636, 601, 521, 113, - 134, 134, 266, 273, 275, 381, 392, 393, 394, 395, - 633, 16, 633, 487, 322, 297, 224, 224, 816, 299, - 224, 350, 360, 360, 318, 26, 223, 699, 702, 116, - 26, 628, 329, 665, 129, 944, 964, 636, 559, 346, - 775, 878, 881, 785, 422, 26, 850, 280, 280, 280, - 442, 117, 1, 947, 26, 26, 26, 968, 26, 811, - 382, 533, 536, 861, 970, 540, 16, 388, 796, 797, - 639, 224, 224, 224, 224, 16, 16, 332, 206, 281, - 281, 281, 622, 26, 819, 355, 672, 6, 26, 26, - 405, 630, 26, 397, 398, 853, 396, 6, 277, 290, - 291, 362, 366, 626, 636, 591, 495, 580, 582, 333, - 336, 987, 416, 334, 625, 416, 871, 964, 378, 633, - 633, 416, 335, 541, 279, 279, 279, 576, 578, 581, - 581, 353, 563, 576, 377, 328, 531, 944, 26, 330, - 446, 339, 1028, 26, 26, 26, 26, 26, 26, 970, - 343, 1020, 878, 820, 344, 794, 432, 821, 711, 390, - 954, 16, 224, 413, 224, 224, 413, 224, 770, 703, - 315, 315, 413, 224, 224, 881, 917, 448, 844, 441, - 716, 830, 878, 960, 1031, 885, 16, 566, 567, 723, - 904, 643, 764, 852, 854, 492, 620, 967, 663, 652, - 719, 868, 542, 793, 315, 315, 315, 930, 672, 931, - 500, 481, 833, 834, 489, 404, 415, 782, 508, 415, - 224, 224, 300, 490, 767, 415, 951, 408, 408, 224, - 789, 547, 548, 26, 26, 26, 26, 26, 26, 26, - 714, 878, 518, 865, 26, 26, 26, 16, 908, 909, - 380, 16, 383, 270, 116, 306, 16, 274, 26, 515, - 645, 532, 384, 385, 503, 672, 672, 386, 505, 387, - 522, 725, 306, 730, 933, 717, 525, 876, 825, 873, - 297, 16, 952, 958, 507, 297, 280, 827, 504, 513, - 519, 511, 26, 26, 280, nil, 224, 224, 706, nil, - nil, 26, nil, 553, nil, nil, 897, 116, 715, 279, - 777, 1021, 838, nil, 568, 956, 224, 549, 281, 26, - nil, 781, nil, 26, nil, 733, 281, 733, 26, nil, - 264, nil, 224, nil, 754, nil, nil, 488, nil, 759, - nil, 636, 740, nil, 824, 491, nil, 13, nil, nil, - 828, nil, 13, 26, 832, nil, 602, 633, nil, 992, - nil, 129, 279, 279, 614, nil, 597, nil, 26, 26, - nil, 279, 608, nil, nil, nil, nil, nil, 613, 590, - 13, 132, nil, nil, nil, 431, 437, nil, 26, 432, - 134, 792, nil, nil, nil, nil, nil, 403, nil, nil, - nil, nil, nil, 224, 26, 13, 627, 607, nil, 1006, - 631, 621, 441, 612, nil, 354, nil, nil, nil, 15, - nil, nil, 300, 608, 15, nil, 641, 777, nil, nil, - nil, nil, 644, 482, nil, nil, 750, 752, 315, nil, - nil, 755, 757, 790, nil, nil, nil, nil, nil, nil, - 660, nil, 15, nil, nil, 315, 432, 16, 624, 16, - 13, nil, nil, 522, 900, 306, 432, 224, nil, 13, - 13, 522, nil, 306, nil, 26, 640, 15, nil, 441, - 6, 224, nil, nil, nil, nil, nil, 300, 724, 441, - nil, nil, 300, nil, 432, nil, 16, 416, nil, 16, - nil, nil, 432, nil, 923, 224, nil, 416, 416, 700, - 700, nil, 416, 416, nil, 224, 953, 441, nil, 16, - nil, 769, nil, 441, nil, nil, nil, 718, nil, 26, - 948, 26, 15, nil, nil, nil, nil, nil, 432, 26, - 857, 15, 15, nil, 632, 279, nil, nil, 413, 224, - nil, 602, 16, 26, 129, 13, 768, 411, 413, 413, - 411, 441, 791, 413, 413, nil, 411, nil, 26, 705, - nil, 26, 737, 745, 132, 784, 602, 26, 839, 1029, - 13, nil, nil, 134, 662, 849, nil, 26, nil, 608, - 991, 26, 613, 522, nil, 306, nil, nil, nil, 826, - 851, 415, nil, nil, 783, 829, 306, nil, 835, 279, - nil, 415, 415, 880, nil, 882, 415, 415, 431, 437, - 26, 26, nil, nil, 26, nil, 877, 15, 879, 15, - 26, 26, 15, nil, nil, 26, 26, 602, 15, nil, - nil, 13, nil, nil, nil, 13, 602, 279, 315, 416, - 13, nil, 15, 749, nil, nil, 315, 279, nil, nil, - nil, nil, nil, nil, 224, nil, nil, nil, nil, 16, - 224, 602, nil, 16, 857, 13, 408, 857, nil, 857, - nil, 857, nil, 16, nil, 648, 129, nil, 423, 863, - nil, 279, nil, 867, 443, 648, nil, nil, nil, nil, - 413, nil, nil, nil, 855, nil, 891, nil, nil, nil, - nil, nil, nil, 15, nil, nil, nil, 15, nil, nil, - nil, 1007, 15, 648, 963, 855, 965, nil, 16, nil, - 889, 648, 696, nil, nil, 698, 26, 961, nil, 962, - 16, 26, 26, nil, nil, 26, 982, 15, 983, nil, - 984, nil, 902, 415, nil, 26, nil, nil, nil, nil, - 857, 981, 857, nil, 857, nil, 857, 431, 437, nil, - nil, 224, 26, 16, 16, nil, nil, 16, 315, nil, - nil, nil, nil, 16, nil, 855, nil, nil, 700, 315, - nil, 899, nil, nil, nil, nil, 903, 16, 17, 857, - 26, nil, nil, 17, 943, 1025, nil, 1026, nil, 1027, - 920, nil, 26, nil, nil, 16, nil, nil, nil, 926, - 1024, nil, nil, nil, nil, 680, 1030, nil, nil, nil, - nil, 17, 308, 308, nil, nil, nil, nil, nil, 800, - 802, 804, nil, 26, 1038, 26, 26, nil, nil, 26, - nil, 13, nil, 13, nil, 26, 17, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 352, 361, 361, 26, - nil, nil, 971, nil, nil, nil, 16, nil, nil, 976, - nil, nil, 847, 16, 16, nil, nil, 26, nil, nil, - 13, nil, nil, 13, nil, nil, nil, nil, 1002, nil, - nil, 16, nil, nil, 872, nil, nil, 16, nil, 16, - nil, 17, nil, 13, nil, nil, 806, 432, nil, 836, - 17, 17, nil, 15, nil, 15, nil, 443, 224, 423, - nil, nil, nil, nil, nil, 441, nil, nil, 602, nil, - 441, nil, 411, nil, nil, nil, 13, 680, 26, nil, - nil, nil, 411, 411, nil, 26, 26, 411, 411, nil, - nil, nil, 15, nil, 860, 15, nil, nil, nil, nil, - nil, nil, nil, 26, nil, nil, 864, nil, nil, 26, - nil, 26, nil, nil, nil, 15, nil, nil, nil, nil, - nil, nil, nil, 315, nil, nil, nil, nil, 654, nil, - 26, nil, 315, nil, 680, 680, 17, nil, 414, 893, - 894, 414, nil, 896, 15, nil, 957, 414, 15, 847, - nil, 847, nil, 847, 15, 15, nil, nil, nil, 15, - 15, 17, nil, 906, nil, nil, nil, nil, nil, nil, - nil, nil, 806, nil, nil, 887, 935, 937, nil, 939, - 941, 922, 942, nil, nil, 315, 856, nil, nil, nil, - nil, nil, nil, 13, nil, nil, nil, 13, nil, 337, - 279, nil, nil, nil, nil, nil, nil, 13, nil, nil, - 751, 753, 680, nil, 680, 756, 758, nil, nil, nil, - nil, nil, 17, nil, 411, nil, 17, nil, nil, nil, - 308, 17, 847, nil, 847, nil, 847, nil, 847, nil, - nil, nil, 974, nil, nil, nil, nil, 308, nil, 979, - 980, 806, 13, 806, nil, nil, 17, nil, 38, nil, - nil, nil, nil, 38, 13, 15, nil, 989, nil, 15, - nil, 847, nil, 990, nil, nil, 648, nil, 848, 15, - nil, 1015, 1016, 1017, 1018, nil, nil, nil, nil, nil, - nil, 38, 304, 304, nil, nil, 15, 13, 13, nil, - 874, 13, nil, 874, nil, nil, nil, 13, nil, nil, - 985, 806, nil, nil, nil, nil, 38, nil, nil, nil, - nil, 13, nil, 856, 15, 856, 348, 364, 364, 364, - 1037, nil, nil, nil, nil, nil, 15, nil, nil, 13, - nil, nil, nil, 929, nil, nil, nil, 680, 406, 419, - nil, 806, 840, 806, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 751, 753, 758, 756, 15, - 15, 38, nil, 15, nil, nil, nil, nil, nil, 15, - 38, 38, nil, nil, 806, nil, nil, nil, nil, nil, - nil, nil, nil, 15, nil, nil, 911, 913, 915, nil, - 13, 340, 340, nil, nil, 340, 856, 13, 13, nil, - nil, 15, 874, nil, nil, 848, nil, 848, 39, 848, - nil, nil, 497, 39, 499, 13, nil, 501, 502, nil, - nil, 13, 17, 13, 17, nil, nil, nil, nil, nil, - 308, nil, nil, nil, nil, nil, nil, 840, 308, nil, - nil, 39, 305, 305, nil, nil, 340, 340, 340, 340, - nil, nil, nil, nil, nil, nil, 38, nil, nil, nil, - nil, 17, 15, nil, 17, nil, 39, nil, nil, 15, - 15, nil, nil, nil, nil, nil, 349, 365, 365, 365, - nil, 38, nil, nil, 17, nil, nil, 15, 848, nil, - 848, 729, 848, 15, 848, 15, nil, 994, 996, 998, - 1000, nil, 1001, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 414, nil, nil, nil, 17, nil, nil, - nil, 39, nil, 414, 414, nil, nil, 848, 414, 414, - 39, 39, nil, nil, nil, nil, 593, nil, nil, 420, - 421, nil, 38, nil, nil, nil, 38, nil, 444, 445, - 304, 38, nil, nil, nil, nil, nil, nil, nil, nil, - 308, 1033, 1034, 1035, 1036, nil, nil, 304, nil, nil, - nil, 308, nil, nil, nil, 1039, 38, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 39, nil, nil, nil, - nil, nil, nil, 634, nil, 337, nil, 637, nil, nil, - nil, nil, nil, nil, 17, nil, nil, nil, 17, nil, - nil, 39, nil, nil, nil, nil, nil, nil, 17, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 634, nil, 414, 337, nil, nil, nil, - nil, 340, 340, nil, nil, nil, nil, nil, nil, nil, - 419, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 565, nil, 17, nil, nil, nil, nil, nil, nil, - nil, nil, 39, nil, nil, 17, 39, 569, nil, nil, - 305, 39, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 738, nil, nil, nil, 305, nil, nil, - nil, nil, 634, 337, nil, nil, 39, nil, 17, 17, - nil, nil, 17, nil, nil, nil, nil, nil, 17, nil, - nil, nil, 38, nil, 38, nil, nil, nil, nil, nil, - 304, nil, 17, nil, 778, nil, nil, 779, 304, nil, - nil, nil, nil, nil, nil, 361, nil, nil, nil, nil, - 17, nil, nil, nil, 928, nil, nil, 788, nil, nil, - nil, 38, nil, nil, 38, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 812, 38, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 361, nil, nil, - nil, 17, nil, nil, nil, nil, nil, 38, 17, 17, - nil, nil, nil, nil, nil, nil, 656, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 17, nil, 837, nil, - nil, nil, 17, nil, 17, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 304, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 304, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 39, nil, 39, nil, nil, nil, nil, nil, - 305, nil, nil, nil, nil, nil, nil, nil, 305, nil, - nil, nil, nil, nil, 884, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 39, 895, nil, 39, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 38, nil, nil, nil, 38, nil, - 337, nil, nil, nil, 39, nil, nil, nil, 38, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 39, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 38, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 38, nil, nil, nil, 340, - nil, nil, nil, nil, nil, 340, nil, nil, nil, nil, - 305, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 305, nil, nil, nil, nil, nil, nil, 38, 38, - nil, nil, 38, nil, nil, nil, nil, nil, 38, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 38, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 364, nil, nil, nil, nil, - 38, nil, nil, nil, 924, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 39, nil, nil, nil, 39, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 39, nil, - nil, nil, nil, nil, nil, nil, 340, nil, nil, nil, - nil, 231, nil, nil, nil, nil, nil, nil, nil, nil, - 278, 278, 278, nil, nil, nil, nil, 364, nil, nil, - nil, 38, nil, 324, 325, 326, nil, nil, 38, 38, - nil, nil, nil, 39, nil, nil, nil, nil, nil, nil, - 278, 278, nil, nil, nil, 39, 38, nil, nil, nil, - nil, nil, 38, nil, 38, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 39, 39, - nil, nil, 39, nil, nil, nil, nil, nil, 39, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 39, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 365, nil, nil, nil, nil, - 39, nil, nil, nil, 925, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 365, nil, nil, - nil, 39, nil, nil, nil, nil, nil, nil, 39, 39, - 278, 418, nil, nil, 424, 278, nil, nil, nil, nil, - 424, nil, nil, nil, nil, nil, 39, nil, nil, nil, - nil, nil, 39, 231, 39, nil, 455, 456, 457, 458, - 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, - 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, - 479, 480, nil, nil, nil, nil, nil, nil, 278, 278, - nil, nil, nil, nil, nil, nil, nil, 278, nil, nil, - nil, nil, nil, nil, 278, nil, 278, nil, nil, 278, - 278, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 527, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 278, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 278, nil, 424, 424, 424, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 278, nil, 278, nil, 278, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 278, nil, nil, nil, nil, - nil, nil, nil, nil, 424, 655, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 278, nil, nil, 278, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 278, 278, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 278, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 278, 424, 278, nil, nil, - nil, 746, nil, nil, 278, 278, 424, 424, nil, nil, - nil, 424, 424, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 278, nil, nil, 278, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 278, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 278, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 278, nil, nil, nil, nil, nil, nil, nil, 424, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 424, 424, 424, 424, nil, 843, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 278, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 278, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 278, 424, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 278 ] - -racc_goto_check = [ - 33, 17, 17, 28, 144, 17, 58, 89, 28, 76, - 29, 38, 8, 70, 10, 99, 95, 74, 74, 31, - 2, 59, 59, 28, 7, 4, 33, 31, 101, 7, - 92, 92, 28, 28, 28, 51, 28, 28, 28, 15, - 15, 62, 62, 41, 22, 22, 188, 30, 53, 6, - 63, 63, 40, 40, 40, 161, 17, 17, 17, 17, - 77, 28, 77, 29, 66, 47, 28, 28, 93, 48, - 28, 28, 28, 28, 52, 43, 20, 94, 94, 99, - 43, 42, 7, 143, 59, 119, 185, 188, 56, 4, - 133, 179, 184, 11, 26, 43, 131, 71, 71, 71, - 26, 5, 1, 122, 43, 43, 43, 137, 43, 121, - 162, 72, 72, 12, 138, 72, 28, 162, 126, 126, - 14, 28, 28, 28, 28, 28, 28, 71, 16, 73, - 73, 73, 147, 43, 11, 19, 173, 7, 43, 43, - 23, 147, 43, 2, 25, 135, 7, 7, 46, 46, - 46, 57, 57, 44, 188, 64, 76, 165, 165, 73, - 73, 122, 18, 69, 75, 18, 135, 185, 87, 77, - 77, 18, 88, 91, 35, 35, 35, 166, 166, 166, - 166, 96, 98, 166, 102, 103, 104, 119, 43, 105, - 49, 106, 137, 43, 43, 43, 43, 43, 43, 138, - 107, 122, 179, 108, 109, 143, 74, 110, 111, 5, - 112, 28, 28, 28, 28, 28, 28, 28, 42, 95, - 67, 67, 28, 28, 28, 184, 135, 31, 133, 59, - 113, 114, 179, 131, 122, 121, 28, 115, 116, 117, - 118, 53, 30, 123, 129, 49, 29, 136, 139, 53, - 8, 140, 141, 142, 67, 67, 67, 145, 173, 146, - 161, 148, 143, 143, 150, 20, 20, 30, 49, 20, - 28, 28, 9, 151, 154, 20, 155, 71, 71, 28, - 156, 17, 17, 43, 43, 43, 43, 43, 43, 43, - 56, 179, 33, 157, 43, 43, 43, 28, 126, 126, - 160, 28, 163, 74, 99, 28, 28, 74, 43, 31, - 29, 33, 164, 167, 4, 173, 173, 168, 7, 169, - 51, 170, 28, 171, 126, 172, 31, 177, 30, 181, - 47, 28, 11, 182, 48, 47, 71, 30, 6, 48, - 66, 52, 43, 43, 71, nil, 28, 28, 29, nil, - nil, 43, nil, 31, nil, nil, 94, 99, 29, 35, - 76, 93, 30, nil, 38, 101, 28, 4, 73, 43, - nil, 53, nil, 43, nil, 166, 73, 166, 43, nil, - 31, nil, 28, nil, 41, nil, nil, 46, nil, 41, - nil, 188, 29, nil, 92, 46, nil, 21, nil, nil, - 8, nil, 21, 43, 8, nil, 33, 77, nil, 126, - nil, 59, 35, 35, 49, nil, 31, nil, 43, 43, - nil, 35, 74, nil, nil, nil, nil, nil, 74, 15, - 21, 62, nil, nil, nil, 39, 39, nil, 43, 74, - 63, 72, nil, nil, nil, nil, nil, 9, nil, nil, - nil, nil, nil, 28, 43, 21, 49, 40, nil, 10, - 49, 33, 59, 40, nil, 21, nil, nil, nil, 27, - nil, nil, 9, 74, 27, nil, 49, 76, nil, nil, - nil, nil, 49, 39, nil, nil, 26, 26, 67, nil, - nil, 26, 26, 22, nil, nil, nil, nil, nil, nil, - 49, nil, 27, nil, nil, 67, 74, 28, 40, 28, - 21, nil, nil, 51, 8, 28, 74, 28, nil, 21, - 21, 51, nil, 28, nil, 43, 2, 27, nil, 59, - 7, 28, nil, nil, nil, nil, nil, 9, 49, 59, - nil, nil, 9, nil, 74, nil, 28, 18, nil, 28, - nil, nil, 74, nil, 92, 28, nil, 18, 18, 99, - 99, nil, 18, 18, nil, 28, 95, 59, nil, 28, - nil, 89, nil, 59, nil, nil, nil, 99, nil, 43, - 92, 43, 27, nil, nil, nil, nil, nil, 74, 43, - 180, 27, 27, nil, 73, 35, nil, nil, 28, 28, - nil, 33, 28, 43, 59, 21, 144, 21, 28, 28, - 21, 59, 70, 28, 28, nil, 21, nil, 43, 71, - nil, 43, 15, 7, 62, 49, 33, 43, 26, 30, - 21, nil, nil, 63, 73, 130, nil, 43, nil, 74, - 8, 43, 74, 51, nil, 28, nil, nil, nil, 17, - 132, 20, nil, nil, 51, 17, 28, nil, 58, 35, - nil, 20, 20, 130, nil, 130, 20, 20, 39, 39, - 43, 43, nil, nil, 43, nil, 132, 27, 132, 27, - 43, 43, 27, nil, nil, 43, 43, 33, 27, nil, - nil, 21, nil, nil, nil, 21, 33, 35, 67, 18, - 21, nil, 27, 73, nil, nil, 67, 35, nil, nil, - nil, nil, nil, nil, 28, nil, nil, nil, nil, 28, - 28, 33, nil, 28, 180, 21, 71, 180, nil, 180, - nil, 180, nil, 28, nil, 39, 59, nil, 65, 70, - nil, 35, nil, 70, 65, 39, nil, nil, nil, nil, - 28, nil, nil, nil, 33, nil, 17, nil, nil, nil, - nil, nil, nil, 27, nil, nil, nil, 27, nil, nil, - nil, 29, 27, 39, 130, 33, 130, nil, 28, nil, - 49, 39, 9, nil, nil, 9, 43, 132, nil, 132, - 28, 43, 43, nil, nil, 43, 130, 27, 130, nil, - 130, nil, 49, 20, nil, 43, nil, nil, nil, nil, - 180, 132, 180, nil, 180, nil, 180, 39, 39, nil, - nil, 28, 43, 28, 28, nil, nil, 28, 67, nil, - nil, nil, nil, 28, nil, 33, nil, nil, 99, 67, - nil, 99, nil, nil, nil, nil, 99, 28, 32, 180, - 43, nil, nil, 32, 49, 130, nil, 130, nil, 130, - 28, nil, 43, nil, nil, 28, nil, nil, nil, 28, - 132, nil, nil, nil, nil, 178, 130, nil, nil, nil, - nil, 32, 32, 32, nil, nil, nil, nil, nil, 176, - 176, 176, nil, 43, 130, 43, 43, nil, nil, 43, - nil, 21, nil, 21, nil, 43, 32, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 32, 32, 32, 43, - nil, nil, 28, nil, nil, nil, 28, nil, nil, 31, - nil, nil, 125, 28, 28, nil, nil, 43, nil, nil, - 21, nil, nil, 21, nil, nil, nil, nil, 33, nil, - nil, 28, nil, nil, 125, nil, nil, 28, nil, 28, - nil, 32, nil, 21, nil, nil, 120, 74, nil, 9, - 32, 32, nil, 27, nil, 27, nil, 65, 28, 65, - nil, nil, nil, nil, nil, 59, nil, nil, 33, nil, - 59, nil, 21, nil, nil, nil, 21, 178, 43, nil, - nil, nil, 21, 21, nil, 43, 43, 21, 21, nil, - nil, nil, 27, nil, 9, 27, nil, nil, nil, nil, - nil, nil, nil, 43, nil, nil, 9, nil, nil, 43, - nil, 43, nil, nil, nil, 27, nil, nil, nil, nil, - nil, nil, nil, 67, nil, nil, nil, nil, 65, nil, - 43, nil, 67, nil, 178, 178, 32, nil, 32, 9, - 9, 32, nil, 9, 27, nil, 125, 32, 27, 125, - nil, 125, nil, 125, 27, 27, nil, nil, nil, 27, - 27, 32, nil, 9, nil, nil, nil, nil, nil, nil, - nil, nil, 120, nil, nil, 120, 176, 176, nil, 176, - 176, 9, 176, nil, nil, 67, 178, nil, nil, nil, - nil, nil, nil, 21, nil, nil, nil, 21, nil, 68, - 35, nil, nil, nil, nil, nil, nil, 21, nil, nil, - 65, 65, 178, nil, 178, 65, 65, nil, nil, nil, - nil, nil, 32, nil, 21, nil, 32, nil, nil, nil, - 32, 32, 125, nil, 125, nil, 125, nil, 125, nil, - nil, nil, 9, nil, nil, nil, nil, 32, nil, 9, - 9, 120, 21, 120, nil, nil, 32, nil, 54, nil, - nil, nil, nil, 54, 21, 27, nil, 9, nil, 27, - nil, 125, nil, 9, nil, nil, 39, nil, 127, 27, - nil, 176, 176, 176, 176, nil, nil, nil, nil, nil, - nil, 54, 54, 54, nil, nil, 27, 21, 21, nil, - 127, 21, nil, 127, nil, nil, nil, 21, nil, nil, - 120, 120, nil, nil, nil, nil, 54, nil, nil, nil, - nil, 21, nil, 178, 27, 178, 54, 54, 54, 54, - 176, nil, nil, nil, nil, nil, 27, nil, nil, 21, - nil, nil, nil, 21, nil, nil, nil, 178, 68, 68, - nil, 120, 65, 120, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 65, 65, 65, 65, 27, - 27, 54, nil, 27, nil, nil, nil, nil, nil, 27, - 54, 54, nil, nil, 120, nil, nil, nil, nil, nil, - nil, nil, nil, 27, nil, nil, 128, 128, 128, nil, - 21, 24, 24, nil, nil, 24, 178, 21, 21, nil, - nil, 27, 127, nil, nil, 127, nil, 127, 55, 127, - nil, nil, 68, 55, 68, 21, nil, 68, 68, nil, - nil, 21, 32, 21, 32, nil, nil, nil, nil, nil, - 32, nil, nil, nil, nil, nil, nil, 65, 32, nil, - nil, 55, 55, 55, nil, nil, 24, 24, 24, 24, - nil, nil, nil, nil, nil, nil, 54, nil, nil, nil, - nil, 32, 27, nil, 32, nil, 55, nil, nil, 27, - 27, nil, nil, nil, nil, nil, 55, 55, 55, 55, - nil, 54, nil, nil, 32, nil, nil, 27, 127, nil, - 127, 32, 127, 27, 127, 27, nil, 128, 128, 128, - 128, nil, 128, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 32, nil, nil, nil, 32, nil, nil, - nil, 55, nil, 32, 32, nil, nil, 127, 32, 32, - 55, 55, nil, nil, nil, nil, 68, nil, nil, 24, - 24, nil, 54, nil, nil, nil, 54, nil, 24, 24, - 54, 54, nil, nil, nil, nil, nil, nil, nil, nil, - 32, 128, 128, 128, 128, nil, nil, 54, nil, nil, - nil, 32, nil, nil, nil, 128, 54, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 55, nil, nil, nil, - nil, nil, nil, 68, nil, 68, nil, 68, nil, nil, - nil, nil, nil, nil, 32, nil, nil, nil, 32, nil, - nil, 55, nil, nil, nil, nil, nil, nil, 32, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 68, nil, 32, 68, nil, nil, nil, - nil, 24, 24, nil, nil, nil, nil, nil, nil, nil, - 68, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 24, nil, 32, nil, nil, nil, nil, nil, nil, - nil, nil, 55, nil, nil, 32, 55, 24, nil, nil, - 55, 55, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 68, nil, nil, nil, 55, nil, nil, - nil, nil, 68, 68, nil, nil, 55, nil, 32, 32, - nil, nil, 32, nil, nil, nil, nil, nil, 32, nil, - nil, nil, 54, nil, 54, nil, nil, nil, nil, nil, - 54, nil, 32, nil, 68, nil, nil, 68, 54, nil, - nil, nil, nil, nil, nil, 32, nil, nil, nil, nil, - 32, nil, nil, nil, 32, nil, nil, 68, nil, nil, - nil, 54, nil, nil, 54, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 68, 54, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 32, nil, nil, - nil, 32, nil, nil, nil, nil, nil, 54, 32, 32, - nil, nil, nil, nil, nil, nil, 24, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 32, nil, 68, nil, - nil, nil, 32, nil, 32, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 54, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 54, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 55, nil, 55, nil, nil, nil, nil, nil, - 55, nil, nil, nil, nil, nil, nil, nil, 55, nil, - nil, nil, nil, nil, 68, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 55, 68, nil, 55, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 54, nil, nil, nil, 54, nil, - 68, nil, nil, nil, 55, nil, nil, nil, 54, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 55, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 54, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 54, nil, nil, nil, 24, - nil, nil, nil, nil, nil, 24, nil, nil, nil, nil, - 55, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 55, nil, nil, nil, nil, nil, nil, 54, 54, - nil, nil, 54, nil, nil, nil, nil, nil, 54, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 54, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 54, nil, nil, nil, nil, - 54, nil, nil, nil, 54, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 55, nil, nil, nil, 55, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 55, nil, - nil, nil, nil, nil, nil, nil, 24, nil, nil, nil, - nil, 34, nil, nil, nil, nil, nil, nil, nil, nil, - 34, 34, 34, nil, nil, nil, nil, 54, nil, nil, - nil, 54, nil, 34, 34, 34, nil, nil, 54, 54, - nil, nil, nil, 55, nil, nil, nil, nil, nil, nil, - 34, 34, nil, nil, nil, 55, 54, nil, nil, nil, - nil, nil, 54, nil, 54, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 55, 55, - nil, nil, 55, nil, nil, nil, nil, nil, 55, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 55, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 55, nil, nil, nil, nil, - 55, nil, nil, nil, 55, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 55, nil, nil, - nil, 55, nil, nil, nil, nil, nil, nil, 55, 55, - 34, 34, nil, nil, 34, 34, nil, nil, nil, nil, - 34, nil, nil, nil, nil, nil, 55, nil, nil, nil, - nil, nil, 55, 34, 55, nil, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, nil, nil, nil, nil, nil, nil, 34, 34, - nil, nil, nil, nil, nil, nil, nil, 34, nil, nil, - nil, nil, nil, nil, 34, nil, 34, nil, nil, 34, - 34, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 34, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 34, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 34, nil, 34, 34, 34, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 34, nil, 34, nil, 34, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 34, nil, nil, nil, nil, - nil, nil, nil, nil, 34, 34, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 34, nil, nil, 34, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 34, 34, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 34, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 34, 34, 34, nil, nil, - nil, 34, nil, nil, 34, 34, 34, 34, nil, nil, - nil, 34, 34, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 34, nil, nil, 34, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 34, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 34, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 34, nil, nil, nil, nil, nil, nil, nil, 34, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 34, 34, 34, 34, nil, 34, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 34, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 34, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 34, 34, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 34 ] - -racc_goto_pointer = [ - nil, 102, 20, nil, 22, 96, 46, 24, -316, 239, - -515, -564, -672, nil, -384, 31, 119, -62, -48, 67, - 56, 397, -165, -69, 1258, 20, -119, 469, 3, -204, - -378, 3, 848, -19, 2061, 145, nil, nil, -13, 220, - 26, -223, -408, 75, -332, nil, 119, 32, 36, -31, - nil, 1, 39, -271, 1178, 1338, -270, 82, -65, 13, - nil, nil, 33, 42, -247, 525, 23, 186, 1059, 104, - -46, 68, -221, 100, -9, -318, -272, -434, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 97, 112, -54, - nil, -166, -311, -628, -470, -330, 113, nil, -180, 12, - nil, -539, 113, 128, -143, 131, 129, 135, -496, 138, - -495, -348, -687, -333, -487, -129, -138, -329, -595, -801, - 285, -572, -785, -530, nil, 159, -548, 425, 467, -529, - -138, -677, -123, -539, nil, -628, -671, -811, -804, -294, - -542, -87, -410, -459, -18, -612, -611, -349, 0, nil, - -7, 1, nil, nil, -349, -620, -378, -496, nil, nil, - 221, -26, 26, 217, 226, -227, -205, 226, 229, 230, - -252, -251, -239, -406, nil, nil, 220, -472, 333, -708, - -183, -466, -574, nil, -709, -826, nil, nil, -450 ] - -racc_goto_default = [ - nil, nil, nil, 3, nil, 4, 347, 295, nil, 529, - nil, 817, nil, 292, 293, nil, nil, nil, 11, 12, - 18, 229, nil, nil, 14, nil, 412, 230, 323, nil, - nil, 561, 228, 447, 21, 22, 23, 24, nil, 651, - nil, nil, nil, 312, nil, 25, 426, 32, nil, nil, - 34, 37, 36, nil, 225, 226, 359, nil, 131, 434, - 130, 133, 77, 78, nil, 417, 92, 46, 284, nil, - 786, 427, nil, 428, 439, 609, 493, 282, 268, 47, - 48, 49, 50, 51, 52, 53, 54, 55, nil, 269, - 61, nil, nil, nil, nil, nil, nil, 69, nil, 544, - 70, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 808, - 679, nil, 809, 959, 846, 667, nil, 668, nil, nil, - 669, nil, 671, nil, 772, nil, nil, nil, 677, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 438, - nil, nil, 629, 623, nil, nil, nil, nil, 76, 79, - 80, nil, nil, nil, nil, nil, 571, nil, nil, nil, - nil, nil, nil, 875, 722, 666, nil, 670, 883, 682, - 684, 685, 858, 688, 689, 859, 692, 695, 287 ] - -racc_reduce_table = [ - 0, 0, :racc_error, - 1, 146, :_reduce_none, - 2, 147, :_reduce_2, - 0, 148, :_reduce_3, - 1, 148, :_reduce_4, - 3, 148, :_reduce_5, - 2, 148, :_reduce_6, - 1, 150, :_reduce_none, - 4, 150, :_reduce_8, - 4, 153, :_reduce_9, - 2, 154, :_reduce_10, - 0, 158, :_reduce_11, - 1, 158, :_reduce_12, - 3, 158, :_reduce_13, - 2, 158, :_reduce_14, - 1, 159, :_reduce_none, - 4, 159, :_reduce_16, - 0, 170, :_reduce_17, - 4, 152, :_reduce_18, - 3, 152, :_reduce_19, - 3, 152, :_reduce_20, - 3, 152, :_reduce_21, - 2, 152, :_reduce_22, - 3, 152, :_reduce_23, - 3, 152, :_reduce_24, - 3, 152, :_reduce_25, - 3, 152, :_reduce_26, - 3, 152, :_reduce_27, - 4, 152, :_reduce_28, - 1, 152, :_reduce_none, - 3, 152, :_reduce_30, - 3, 152, :_reduce_31, - 3, 152, :_reduce_32, - 1, 152, :_reduce_none, - 3, 163, :_reduce_34, - 3, 163, :_reduce_35, - 6, 163, :_reduce_36, - 5, 163, :_reduce_37, - 5, 163, :_reduce_38, - 5, 163, :_reduce_39, - 5, 163, :_reduce_40, - 3, 163, :_reduce_41, - 1, 171, :_reduce_none, - 3, 171, :_reduce_43, - 1, 171, :_reduce_none, - 1, 169, :_reduce_none, - 3, 169, :_reduce_46, - 3, 169, :_reduce_47, - 3, 169, :_reduce_48, - 2, 169, :_reduce_49, - 1, 169, :_reduce_none, - 1, 162, :_reduce_none, - 1, 165, :_reduce_none, - 1, 165, :_reduce_none, - 1, 181, :_reduce_none, - 4, 181, :_reduce_55, - 0, 189, :_reduce_56, - 4, 186, :_reduce_57, - 1, 188, :_reduce_none, - 2, 180, :_reduce_59, - 3, 180, :_reduce_60, - 4, 180, :_reduce_61, - 5, 180, :_reduce_62, - 4, 180, :_reduce_63, - 5, 180, :_reduce_64, - 2, 180, :_reduce_65, - 2, 180, :_reduce_66, - 2, 180, :_reduce_67, - 2, 180, :_reduce_68, - 2, 180, :_reduce_69, - 1, 164, :_reduce_70, - 3, 164, :_reduce_71, - 1, 193, :_reduce_72, - 3, 193, :_reduce_73, - 1, 192, :_reduce_none, - 2, 192, :_reduce_75, - 3, 192, :_reduce_76, - 5, 192, :_reduce_77, - 2, 192, :_reduce_78, - 4, 192, :_reduce_79, - 2, 192, :_reduce_80, - 4, 192, :_reduce_81, - 1, 192, :_reduce_82, - 3, 192, :_reduce_83, - 1, 196, :_reduce_none, - 3, 196, :_reduce_85, - 2, 195, :_reduce_86, - 3, 195, :_reduce_87, - 1, 198, :_reduce_88, - 3, 198, :_reduce_89, - 1, 197, :_reduce_90, - 1, 197, :_reduce_91, - 4, 197, :_reduce_92, - 3, 197, :_reduce_93, - 3, 197, :_reduce_94, - 3, 197, :_reduce_95, - 3, 197, :_reduce_96, - 2, 197, :_reduce_97, - 1, 197, :_reduce_98, - 1, 166, :_reduce_99, - 1, 166, :_reduce_100, - 4, 166, :_reduce_101, - 3, 166, :_reduce_102, - 3, 166, :_reduce_103, - 3, 166, :_reduce_104, - 3, 166, :_reduce_105, - 2, 166, :_reduce_106, - 1, 166, :_reduce_107, - 1, 201, :_reduce_108, - 1, 201, :_reduce_none, - 2, 202, :_reduce_110, - 1, 202, :_reduce_111, - 3, 202, :_reduce_112, - 1, 203, :_reduce_none, - 1, 203, :_reduce_none, - 1, 203, :_reduce_none, - 1, 203, :_reduce_none, - 1, 203, :_reduce_none, - 1, 206, :_reduce_118, - 1, 206, :_reduce_none, - 1, 160, :_reduce_none, - 1, 160, :_reduce_none, - 1, 161, :_reduce_122, - 0, 209, :_reduce_123, - 4, 161, :_reduce_124, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 1, 205, :_reduce_none, - 3, 179, :_reduce_196, - 3, 179, :_reduce_197, - 6, 179, :_reduce_198, - 5, 179, :_reduce_199, - 5, 179, :_reduce_200, - 5, 179, :_reduce_201, - 5, 179, :_reduce_202, - 4, 179, :_reduce_203, - 3, 179, :_reduce_204, - 3, 179, :_reduce_205, - 3, 179, :_reduce_206, - 3, 179, :_reduce_207, - 3, 179, :_reduce_208, - 3, 179, :_reduce_209, - 3, 179, :_reduce_210, - 3, 179, :_reduce_211, - 3, 179, :_reduce_212, - 4, 179, :_reduce_213, - 2, 179, :_reduce_214, - 2, 179, :_reduce_215, - 3, 179, :_reduce_216, - 3, 179, :_reduce_217, - 3, 179, :_reduce_218, - 3, 179, :_reduce_219, - 3, 179, :_reduce_220, - 3, 179, :_reduce_221, - 3, 179, :_reduce_222, - 3, 179, :_reduce_223, - 3, 179, :_reduce_224, - 3, 179, :_reduce_225, - 3, 179, :_reduce_226, - 3, 179, :_reduce_227, - 3, 179, :_reduce_228, - 2, 179, :_reduce_229, - 2, 179, :_reduce_230, - 3, 179, :_reduce_231, - 3, 179, :_reduce_232, - 3, 179, :_reduce_233, - 3, 179, :_reduce_234, - 3, 179, :_reduce_235, - 6, 179, :_reduce_236, - 1, 179, :_reduce_none, - 1, 213, :_reduce_none, - 1, 214, :_reduce_none, - 2, 214, :_reduce_none, - 4, 214, :_reduce_241, - 2, 214, :_reduce_242, - 1, 210, :_reduce_none, - 3, 210, :_reduce_244, - 3, 219, :_reduce_245, - 0, 220, :_reduce_246, - 1, 220, :_reduce_none, - 0, 174, :_reduce_248, - 1, 174, :_reduce_none, - 2, 174, :_reduce_none, - 4, 174, :_reduce_251, - 2, 174, :_reduce_252, - 1, 191, :_reduce_253, - 2, 191, :_reduce_254, - 2, 191, :_reduce_255, - 4, 191, :_reduce_256, - 1, 191, :_reduce_257, - 0, 223, :_reduce_258, - 2, 185, :_reduce_259, - 2, 222, :_reduce_260, - 2, 221, :_reduce_261, - 0, 221, :_reduce_262, - 1, 216, :_reduce_263, - 2, 216, :_reduce_264, - 3, 216, :_reduce_265, - 4, 216, :_reduce_266, - 1, 168, :_reduce_267, - 1, 168, :_reduce_none, - 3, 167, :_reduce_269, - 4, 167, :_reduce_270, - 2, 167, :_reduce_271, - 1, 212, :_reduce_none, - 1, 212, :_reduce_none, - 1, 212, :_reduce_none, - 1, 212, :_reduce_none, - 1, 212, :_reduce_none, - 1, 212, :_reduce_none, - 1, 212, :_reduce_none, - 1, 212, :_reduce_none, - 1, 212, :_reduce_none, - 1, 212, :_reduce_none, - 1, 212, :_reduce_282, - 0, 248, :_reduce_283, - 4, 212, :_reduce_284, - 0, 249, :_reduce_285, - 4, 212, :_reduce_286, - 0, 250, :_reduce_287, - 4, 212, :_reduce_288, - 3, 212, :_reduce_289, - 3, 212, :_reduce_290, - 2, 212, :_reduce_291, - 3, 212, :_reduce_292, - 3, 212, :_reduce_293, - 1, 212, :_reduce_294, - 4, 212, :_reduce_295, - 3, 212, :_reduce_296, - 1, 212, :_reduce_297, - 5, 212, :_reduce_298, - 4, 212, :_reduce_299, - 3, 212, :_reduce_300, - 2, 212, :_reduce_301, - 1, 212, :_reduce_none, - 2, 212, :_reduce_303, - 0, 251, :_reduce_304, - 3, 212, :_reduce_305, - 6, 212, :_reduce_306, - 6, 212, :_reduce_307, - 0, 252, :_reduce_308, - 0, 253, :_reduce_309, - 7, 212, :_reduce_310, - 0, 254, :_reduce_311, - 0, 255, :_reduce_312, - 7, 212, :_reduce_313, - 5, 212, :_reduce_314, - 4, 212, :_reduce_315, - 0, 256, :_reduce_316, - 0, 257, :_reduce_317, - 9, 212, :_reduce_318, - 0, 258, :_reduce_319, - 6, 212, :_reduce_320, - 0, 259, :_reduce_321, - 7, 212, :_reduce_322, - 0, 260, :_reduce_323, - 5, 212, :_reduce_324, - 0, 261, :_reduce_325, - 6, 212, :_reduce_326, - 0, 262, :_reduce_327, - 0, 263, :_reduce_328, - 9, 212, :_reduce_329, - 1, 212, :_reduce_330, - 1, 212, :_reduce_331, - 1, 212, :_reduce_332, - 1, 212, :_reduce_333, - 1, 173, :_reduce_none, - 1, 242, :_reduce_335, - 1, 245, :_reduce_336, - 1, 237, :_reduce_none, - 1, 237, :_reduce_none, - 2, 237, :_reduce_339, - 1, 239, :_reduce_none, - 1, 239, :_reduce_none, - 1, 238, :_reduce_none, - 5, 238, :_reduce_343, - 1, 156, :_reduce_none, - 2, 156, :_reduce_345, - 1, 241, :_reduce_none, - 1, 241, :_reduce_none, - 1, 264, :_reduce_348, - 3, 264, :_reduce_349, - 1, 267, :_reduce_350, - 3, 267, :_reduce_351, - 1, 266, :_reduce_none, - 4, 266, :_reduce_353, - 6, 266, :_reduce_354, - 3, 266, :_reduce_355, - 5, 266, :_reduce_356, - 2, 266, :_reduce_357, - 4, 266, :_reduce_358, - 1, 266, :_reduce_359, - 3, 266, :_reduce_360, - 4, 268, :_reduce_361, - 2, 268, :_reduce_362, - 2, 268, :_reduce_363, - 1, 268, :_reduce_364, - 2, 273, :_reduce_365, - 0, 273, :_reduce_366, - 6, 274, :_reduce_367, - 8, 274, :_reduce_368, - 4, 274, :_reduce_369, - 6, 274, :_reduce_370, - 4, 274, :_reduce_371, - 2, 274, :_reduce_none, - 6, 274, :_reduce_373, - 2, 274, :_reduce_374, - 4, 274, :_reduce_375, - 6, 274, :_reduce_376, - 2, 274, :_reduce_377, - 4, 274, :_reduce_378, - 2, 274, :_reduce_379, - 4, 274, :_reduce_380, - 1, 274, :_reduce_none, - 0, 278, :_reduce_382, - 1, 278, :_reduce_383, - 3, 279, :_reduce_384, - 1, 279, :_reduce_385, - 4, 279, :_reduce_386, - 1, 280, :_reduce_387, - 4, 280, :_reduce_388, - 1, 281, :_reduce_389, - 3, 281, :_reduce_390, - 1, 282, :_reduce_391, - 1, 282, :_reduce_none, - 0, 286, :_reduce_393, - 0, 287, :_reduce_394, - 4, 236, :_reduce_395, - 4, 284, :_reduce_396, - 1, 284, :_reduce_397, - 0, 290, :_reduce_398, - 4, 285, :_reduce_399, - 0, 291, :_reduce_400, - 4, 285, :_reduce_401, - 0, 293, :_reduce_402, - 4, 289, :_reduce_403, - 2, 182, :_reduce_404, - 4, 182, :_reduce_405, - 5, 182, :_reduce_406, - 5, 182, :_reduce_407, - 2, 235, :_reduce_408, - 4, 235, :_reduce_409, - 4, 235, :_reduce_410, - 3, 235, :_reduce_411, - 3, 235, :_reduce_412, - 3, 235, :_reduce_413, - 2, 235, :_reduce_414, - 1, 235, :_reduce_415, - 4, 235, :_reduce_416, - 0, 295, :_reduce_417, - 4, 234, :_reduce_418, - 0, 296, :_reduce_419, - 4, 234, :_reduce_420, - 0, 297, :_reduce_421, - 3, 187, :_reduce_422, - 0, 298, :_reduce_423, - 0, 299, :_reduce_424, - 4, 292, :_reduce_425, - 5, 240, :_reduce_426, - 1, 300, :_reduce_427, - 1, 300, :_reduce_none, - 6, 155, :_reduce_429, - 0, 155, :_reduce_430, - 1, 301, :_reduce_431, - 1, 301, :_reduce_none, - 1, 301, :_reduce_none, - 2, 302, :_reduce_434, - 1, 302, :_reduce_none, - 2, 157, :_reduce_436, - 1, 157, :_reduce_none, - 1, 224, :_reduce_none, - 1, 224, :_reduce_none, - 1, 224, :_reduce_none, - 1, 225, :_reduce_441, - 1, 304, :_reduce_442, - 2, 304, :_reduce_443, - 3, 305, :_reduce_444, - 1, 305, :_reduce_445, - 1, 305, :_reduce_446, - 3, 226, :_reduce_447, - 4, 227, :_reduce_448, - 3, 228, :_reduce_449, - 0, 309, :_reduce_450, - 3, 309, :_reduce_451, - 1, 310, :_reduce_452, - 2, 310, :_reduce_453, - 3, 230, :_reduce_454, - 0, 312, :_reduce_455, - 3, 312, :_reduce_456, - 3, 229, :_reduce_457, - 3, 231, :_reduce_458, - 0, 313, :_reduce_459, - 3, 313, :_reduce_460, - 0, 314, :_reduce_461, - 3, 314, :_reduce_462, - 0, 306, :_reduce_463, - 2, 306, :_reduce_464, - 0, 307, :_reduce_465, - 2, 307, :_reduce_466, - 0, 308, :_reduce_467, - 2, 308, :_reduce_468, - 1, 311, :_reduce_469, - 2, 311, :_reduce_470, - 0, 316, :_reduce_471, - 4, 311, :_reduce_472, - 1, 315, :_reduce_473, - 1, 315, :_reduce_474, - 1, 315, :_reduce_475, - 1, 315, :_reduce_none, - 1, 207, :_reduce_477, - 3, 208, :_reduce_478, - 1, 303, :_reduce_479, - 2, 303, :_reduce_480, - 1, 211, :_reduce_481, - 1, 211, :_reduce_482, - 1, 211, :_reduce_483, - 1, 211, :_reduce_484, - 1, 199, :_reduce_485, - 1, 199, :_reduce_486, - 1, 199, :_reduce_487, - 1, 199, :_reduce_488, - 1, 199, :_reduce_489, - 1, 200, :_reduce_490, - 1, 200, :_reduce_491, - 1, 200, :_reduce_492, - 1, 200, :_reduce_493, - 1, 200, :_reduce_494, - 1, 200, :_reduce_495, - 1, 200, :_reduce_496, - 1, 232, :_reduce_497, - 1, 232, :_reduce_498, - 1, 172, :_reduce_499, - 1, 172, :_reduce_500, - 1, 177, :_reduce_501, - 1, 177, :_reduce_502, - 0, 317, :_reduce_503, - 4, 243, :_reduce_504, - 0, 243, :_reduce_505, - 3, 246, :_reduce_506, - 0, 319, :_reduce_507, - 3, 246, :_reduce_508, - 4, 318, :_reduce_509, - 2, 318, :_reduce_510, - 2, 318, :_reduce_511, - 1, 318, :_reduce_512, - 2, 321, :_reduce_513, - 0, 321, :_reduce_514, - 6, 288, :_reduce_515, - 8, 288, :_reduce_516, - 4, 288, :_reduce_517, - 6, 288, :_reduce_518, - 4, 288, :_reduce_519, - 6, 288, :_reduce_520, - 2, 288, :_reduce_521, - 4, 288, :_reduce_522, - 6, 288, :_reduce_523, - 2, 288, :_reduce_524, - 4, 288, :_reduce_525, - 2, 288, :_reduce_526, - 4, 288, :_reduce_527, - 1, 288, :_reduce_528, - 0, 288, :_reduce_529, - 1, 283, :_reduce_530, - 1, 283, :_reduce_531, - 1, 283, :_reduce_532, - 1, 283, :_reduce_533, - 1, 265, :_reduce_none, - 1, 265, :_reduce_535, - 1, 323, :_reduce_536, - 1, 324, :_reduce_537, - 3, 324, :_reduce_538, - 1, 275, :_reduce_539, - 3, 275, :_reduce_540, - 1, 325, :_reduce_541, - 2, 326, :_reduce_542, - 1, 326, :_reduce_543, - 2, 327, :_reduce_544, - 1, 327, :_reduce_545, - 1, 269, :_reduce_546, - 3, 269, :_reduce_547, - 1, 320, :_reduce_548, - 3, 320, :_reduce_549, - 1, 328, :_reduce_none, - 1, 328, :_reduce_none, - 2, 270, :_reduce_552, - 1, 270, :_reduce_553, - 3, 329, :_reduce_554, - 3, 330, :_reduce_555, - 1, 276, :_reduce_556, - 3, 276, :_reduce_557, - 1, 322, :_reduce_558, - 3, 322, :_reduce_559, - 1, 331, :_reduce_none, - 1, 331, :_reduce_none, - 2, 277, :_reduce_562, - 1, 277, :_reduce_563, - 1, 332, :_reduce_none, - 1, 332, :_reduce_none, - 2, 272, :_reduce_566, - 2, 271, :_reduce_567, - 0, 271, :_reduce_568, - 1, 247, :_reduce_none, - 3, 247, :_reduce_570, - 0, 233, :_reduce_571, - 2, 233, :_reduce_none, - 1, 218, :_reduce_573, - 3, 218, :_reduce_574, - 3, 333, :_reduce_575, - 2, 333, :_reduce_576, - 4, 333, :_reduce_577, - 2, 333, :_reduce_578, - 1, 190, :_reduce_none, - 1, 190, :_reduce_none, - 1, 190, :_reduce_none, - 1, 184, :_reduce_none, - 1, 184, :_reduce_none, - 1, 184, :_reduce_none, - 1, 184, :_reduce_none, - 1, 294, :_reduce_none, - 1, 294, :_reduce_none, - 1, 294, :_reduce_none, - 1, 183, :_reduce_none, - 1, 183, :_reduce_none, - 1, 176, :_reduce_591, - 1, 176, :_reduce_592, - 0, 149, :_reduce_none, - 1, 149, :_reduce_none, - 0, 178, :_reduce_none, - 1, 178, :_reduce_none, - 2, 194, :_reduce_597, - 2, 175, :_reduce_598, - 0, 217, :_reduce_none, - 1, 217, :_reduce_none, - 1, 217, :_reduce_none, - 1, 244, :_reduce_602, - 1, 244, :_reduce_none, - 1, 151, :_reduce_none, - 2, 151, :_reduce_none, - 0, 215, :_reduce_606 ] - -racc_reduce_n = 607 - -racc_shift_n = 1040 - -racc_token_table = { - false => 0, - :error => 1, - :kCLASS => 2, - :kMODULE => 3, - :kDEF => 4, - :kUNDEF => 5, - :kBEGIN => 6, - :kRESCUE => 7, - :kENSURE => 8, - :kEND => 9, - :kIF => 10, - :kUNLESS => 11, - :kTHEN => 12, - :kELSIF => 13, - :kELSE => 14, - :kCASE => 15, - :kWHEN => 16, - :kWHILE => 17, - :kUNTIL => 18, - :kFOR => 19, - :kBREAK => 20, - :kNEXT => 21, - :kREDO => 22, - :kRETRY => 23, - :kIN => 24, - :kDO => 25, - :kDO_COND => 26, - :kDO_BLOCK => 27, - :kDO_LAMBDA => 28, - :kRETURN => 29, - :kYIELD => 30, - :kSUPER => 31, - :kSELF => 32, - :kNIL => 33, - :kTRUE => 34, - :kFALSE => 35, - :kAND => 36, - :kOR => 37, - :kNOT => 38, - :kIF_MOD => 39, - :kUNLESS_MOD => 40, - :kWHILE_MOD => 41, - :kUNTIL_MOD => 42, - :kRESCUE_MOD => 43, - :kALIAS => 44, - :kDEFINED => 45, - :klBEGIN => 46, - :klEND => 47, - :k__LINE__ => 48, - :k__FILE__ => 49, - :k__ENCODING__ => 50, - :tIDENTIFIER => 51, - :tFID => 52, - :tGVAR => 53, - :tIVAR => 54, - :tCONSTANT => 55, - :tLABEL => 56, - :tCVAR => 57, - :tNTH_REF => 58, - :tBACK_REF => 59, - :tSTRING_CONTENT => 60, - :tINTEGER => 61, - :tFLOAT => 62, - :tUPLUS => 63, - :tUMINUS => 64, - :tUNARY_NUM => 65, - :tPOW => 66, - :tCMP => 67, - :tEQ => 68, - :tEQQ => 69, - :tNEQ => 70, - :tGEQ => 71, - :tLEQ => 72, - :tANDOP => 73, - :tOROP => 74, - :tMATCH => 75, - :tNMATCH => 76, - :tDOT => 77, - :tDOT2 => 78, - :tDOT3 => 79, - :tAREF => 80, - :tASET => 81, - :tLSHFT => 82, - :tRSHFT => 83, - :tCOLON2 => 84, - :tCOLON3 => 85, - :tOP_ASGN => 86, - :tASSOC => 87, - :tLPAREN => 88, - :tLPAREN2 => 89, - :tRPAREN => 90, - :tLPAREN_ARG => 91, - :tLBRACK => 92, - :tLBRACK2 => 93, - :tRBRACK => 94, - :tLBRACE => 95, - :tLBRACE_ARG => 96, - :tSTAR => 97, - :tSTAR2 => 98, - :tAMPER => 99, - :tAMPER2 => 100, - :tTILDE => 101, - :tPERCENT => 102, - :tDIVIDE => 103, - :tDSTAR => 104, - :tPLUS => 105, - :tMINUS => 106, - :tLT => 107, - :tGT => 108, - :tPIPE => 109, - :tBANG => 110, - :tCARET => 111, - :tLCURLY => 112, - :tRCURLY => 113, - :tBACK_REF2 => 114, - :tSYMBEG => 115, - :tSTRING_BEG => 116, - :tXSTRING_BEG => 117, - :tREGEXP_BEG => 118, - :tREGEXP_OPT => 119, - :tWORDS_BEG => 120, - :tQWORDS_BEG => 121, - :tSYMBOLS_BEG => 122, - :tQSYMBOLS_BEG => 123, - :tSTRING_DBEG => 124, - :tSTRING_DVAR => 125, - :tSTRING_END => 126, - :tSTRING_DEND => 127, - :tSTRING => 128, - :tSYMBOL => 129, - :tNL => 130, - :tEH => 131, - :tCOLON => 132, - :tCOMMA => 133, - :tSPACE => 134, - :tSEMI => 135, - :tLAMBDA => 136, - :tLAMBEG => 137, - :tCHARACTER => 138, - :tRATIONAL => 139, - :tIMAGINARY => 140, - :tLABEL_END => 141, - :tANDDOT => 142, - :tEQL => 143, - :tLOWEST => 144 } - -racc_nt_base = 145 - -racc_use_result_var = true - -Racc_arg = [ - racc_action_table, - racc_action_check, - racc_action_default, - racc_action_pointer, - racc_goto_table, - racc_goto_check, - racc_goto_default, - racc_goto_pointer, - racc_nt_base, - racc_reduce_table, - racc_token_table, - racc_shift_n, - racc_reduce_n, - racc_use_result_var ] -Ractor.make_shareable(Racc_arg) if defined?(Ractor) - -Racc_token_to_s_table = [ - "$end", - "error", - "kCLASS", - "kMODULE", - "kDEF", - "kUNDEF", - "kBEGIN", - "kRESCUE", - "kENSURE", - "kEND", - "kIF", - "kUNLESS", - "kTHEN", - "kELSIF", - "kELSE", - "kCASE", - "kWHEN", - "kWHILE", - "kUNTIL", - "kFOR", - "kBREAK", - "kNEXT", - "kREDO", - "kRETRY", - "kIN", - "kDO", - "kDO_COND", - "kDO_BLOCK", - "kDO_LAMBDA", - "kRETURN", - "kYIELD", - "kSUPER", - "kSELF", - "kNIL", - "kTRUE", - "kFALSE", - "kAND", - "kOR", - "kNOT", - "kIF_MOD", - "kUNLESS_MOD", - "kWHILE_MOD", - "kUNTIL_MOD", - "kRESCUE_MOD", - "kALIAS", - "kDEFINED", - "klBEGIN", - "klEND", - "k__LINE__", - "k__FILE__", - "k__ENCODING__", - "tIDENTIFIER", - "tFID", - "tGVAR", - "tIVAR", - "tCONSTANT", - "tLABEL", - "tCVAR", - "tNTH_REF", - "tBACK_REF", - "tSTRING_CONTENT", - "tINTEGER", - "tFLOAT", - "tUPLUS", - "tUMINUS", - "tUNARY_NUM", - "tPOW", - "tCMP", - "tEQ", - "tEQQ", - "tNEQ", - "tGEQ", - "tLEQ", - "tANDOP", - "tOROP", - "tMATCH", - "tNMATCH", - "tDOT", - "tDOT2", - "tDOT3", - "tAREF", - "tASET", - "tLSHFT", - "tRSHFT", - "tCOLON2", - "tCOLON3", - "tOP_ASGN", - "tASSOC", - "tLPAREN", - "tLPAREN2", - "tRPAREN", - "tLPAREN_ARG", - "tLBRACK", - "tLBRACK2", - "tRBRACK", - "tLBRACE", - "tLBRACE_ARG", - "tSTAR", - "tSTAR2", - "tAMPER", - "tAMPER2", - "tTILDE", - "tPERCENT", - "tDIVIDE", - "tDSTAR", - "tPLUS", - "tMINUS", - "tLT", - "tGT", - "tPIPE", - "tBANG", - "tCARET", - "tLCURLY", - "tRCURLY", - "tBACK_REF2", - "tSYMBEG", - "tSTRING_BEG", - "tXSTRING_BEG", - "tREGEXP_BEG", - "tREGEXP_OPT", - "tWORDS_BEG", - "tQWORDS_BEG", - "tSYMBOLS_BEG", - "tQSYMBOLS_BEG", - "tSTRING_DBEG", - "tSTRING_DVAR", - "tSTRING_END", - "tSTRING_DEND", - "tSTRING", - "tSYMBOL", - "tNL", - "tEH", - "tCOLON", - "tCOMMA", - "tSPACE", - "tSEMI", - "tLAMBDA", - "tLAMBEG", - "tCHARACTER", - "tRATIONAL", - "tIMAGINARY", - "tLABEL_END", - "tANDDOT", - "tEQL", - "tLOWEST", - "$start", - "program", - "top_compstmt", - "top_stmts", - "opt_terms", - "top_stmt", - "terms", - "stmt", - "bodystmt", - "compstmt", - "opt_rescue", - "opt_else", - "opt_ensure", - "stmts", - "stmt_or_begin", - "fitem", - "undef_list", - "expr_value", - "command_asgn", - "mlhs", - "command_call", - "lhs", - "mrhs", - "mrhs_arg", - "expr", - "@1", - "command_rhs", - "var_lhs", - "primary_value", - "opt_call_args", - "rbracket", - "call_op", - "backref", - "opt_nl", - "arg", - "command", - "block_command", - "block_call", - "dot_or_colon", - "operation2", - "command_args", - "cmd_brace_block", - "brace_body", - "fcall", - "@2", - "operation", - "call_args", - "mlhs_basic", - "mlhs_inner", - "rparen", - "mlhs_head", - "mlhs_item", - "mlhs_node", - "mlhs_post", - "user_variable", - "keyword_variable", - "cname", - "cpath", - "fname", - "op", - "reswords", - "fsym", - "symbol", - "dsym", - "@3", - "arg_rhs", - "simple_numeric", - "primary", - "arg_value", - "aref_args", - "none", - "args", - "trailer", - "assocs", - "paren_args", - "opt_paren_args", - "opt_block_arg", - "block_arg", - "@4", - "literal", - "strings", - "xstring", - "regexp", - "words", - "qwords", - "symbols", - "qsymbols", - "var_ref", - "assoc_list", - "brace_block", - "method_call", - "lambda", - "then", - "if_tail", - "do", - "case_body", - "for_var", - "k_class", - "superclass", - "term", - "k_module", - "f_arglist", - "singleton", - "@5", - "@6", - "@7", - "@8", - "@9", - "@10", - "@11", - "@12", - "@13", - "@14", - "@15", - "@16", - "@17", - "@18", - "@19", - "@20", - "f_marg", - "f_norm_arg", - "f_margs", - "f_marg_list", - "block_args_tail", - "f_block_kwarg", - "f_kwrest", - "opt_f_block_arg", - "f_block_arg", - "opt_block_args_tail", - "block_param", - "f_arg", - "f_block_optarg", - "f_rest_arg", - "opt_block_param", - "block_param_def", - "opt_bv_decl", - "bv_decls", - "bvar", - "f_bad_arg", - "f_larglist", - "lambda_body", - "@21", - "@22", - "f_args", - "do_block", - "@23", - "@24", - "do_body", - "@25", - "operation3", - "@26", - "@27", - "@28", - "@29", - "@30", - "cases", - "exc_list", - "exc_var", - "numeric", - "string", - "string1", - "string_contents", - "xstring_contents", - "regexp_contents", - "word_list", - "word", - "string_content", - "symbol_list", - "qword_list", - "qsym_list", - "string_dvar", - "@31", - "@32", - "args_tail", - "@33", - "f_kwarg", - "opt_args_tail", - "f_optarg", - "f_arg_asgn", - "f_arg_item", - "f_label", - "f_kw", - "f_block_kw", - "kwrest_mark", - "f_opt", - "f_block_opt", - "restarg_mark", - "blkarg_mark", - "assoc" ] -Ractor.make_shareable(Racc_token_to_s_table) if defined?(Ractor) - -Racc_debug_parser = false - -##### State transition tables end ##### - -# reduce 0 omitted - -# reduce 1 omitted - -def _reduce_2(val, _values, result) - result = @builder.compstmt(val[0]) - - result -end - -def _reduce_3(val, _values, result) - result = [] - - result -end - -def _reduce_4(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_5(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_6(val, _values, result) - result = [ val[1] ] - - result -end - -# reduce 7 omitted - -def _reduce_8(val, _values, result) - result = @builder.preexe(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_9(val, _values, result) - rescue_bodies = val[1] - else_t, else_ = val[2] - ensure_t, ensure_ = val[3] - - if rescue_bodies.empty? && !else_t.nil? - diagnostic :warning, :useless_else, nil, else_t - end - - result = @builder.begin_body(val[0], - rescue_bodies, - else_t, else_, - ensure_t, ensure_) - - result -end - -def _reduce_10(val, _values, result) - result = @builder.compstmt(val[0]) - - result -end - -def _reduce_11(val, _values, result) - result = [] - - result -end - -def _reduce_12(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_13(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_14(val, _values, result) - result = [ val[1] ] - - result -end - -# reduce 15 omitted - -def _reduce_16(val, _values, result) - diagnostic :error, :begin_in_method, nil, val[0] - - result -end - -def _reduce_17(val, _values, result) - @lexer.state = :expr_fname - - result -end - -def _reduce_18(val, _values, result) - result = @builder.alias(val[0], val[1], val[3]) - - result -end - -def _reduce_19(val, _values, result) - result = @builder.alias(val[0], - @builder.gvar(val[1]), - @builder.gvar(val[2])) - - result -end - -def _reduce_20(val, _values, result) - result = @builder.alias(val[0], - @builder.gvar(val[1]), - @builder.back_ref(val[2])) - - result -end - -def _reduce_21(val, _values, result) - diagnostic :error, :nth_ref_alias, nil, val[2] - - result -end - -def _reduce_22(val, _values, result) - result = @builder.undef_method(val[0], val[1]) - - result -end - -def _reduce_23(val, _values, result) - result = @builder.condition_mod(val[0], nil, - val[1], val[2]) - - result -end - -def _reduce_24(val, _values, result) - result = @builder.condition_mod(nil, val[0], - val[1], val[2]) - - result -end - -def _reduce_25(val, _values, result) - result = @builder.loop_mod(:while, val[0], val[1], val[2]) - - result -end - -def _reduce_26(val, _values, result) - result = @builder.loop_mod(:until, val[0], val[1], val[2]) - - result -end - -def _reduce_27(val, _values, result) - rescue_body = @builder.rescue_body(val[1], - nil, nil, nil, - nil, val[2]) - - result = @builder.begin_body(val[0], [ rescue_body ]) - - result -end - -def _reduce_28(val, _values, result) - result = @builder.postexe(val[0], val[1], val[2], val[3]) - - result -end - -# reduce 29 omitted - -def _reduce_30(val, _values, result) - result = @builder.multi_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_31(val, _values, result) - result = @builder.assign(val[0], val[1], - @builder.array(nil, val[2], nil)) - - result -end - -def _reduce_32(val, _values, result) - result = @builder.multi_assign(val[0], val[1], val[2]) - - result -end - -# reduce 33 omitted - -def _reduce_34(val, _values, result) - result = @builder.assign(val[0], val[1], val[2]) - - result -end - -def _reduce_35(val, _values, result) - result = @builder.op_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_36(val, _values, result) - result = @builder.op_assign( - @builder.index( - val[0], val[1], val[2], val[3]), - val[4], val[5]) - - result -end - -def _reduce_37(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_38(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_39(val, _values, result) - const = @builder.const_op_assignable( - @builder.const_fetch(val[0], val[1], val[2])) - result = @builder.op_assign(const, val[3], val[4]) - - result -end - -def _reduce_40(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_41(val, _values, result) - @builder.op_assign(val[0], val[1], val[2]) - - result -end - -# reduce 42 omitted - -def _reduce_43(val, _values, result) - rescue_body = @builder.rescue_body(val[1], - nil, nil, nil, - nil, val[2]) - - result = @builder.begin_body(val[0], [ rescue_body ]) - - result -end - -# reduce 44 omitted - -# reduce 45 omitted - -def _reduce_46(val, _values, result) - result = @builder.logical_op(:and, val[0], val[1], val[2]) - - result -end - -def _reduce_47(val, _values, result) - result = @builder.logical_op(:or, val[0], val[1], val[2]) - - result -end - -def _reduce_48(val, _values, result) - result = @builder.not_op(val[0], nil, val[2], nil) - - result -end - -def _reduce_49(val, _values, result) - result = @builder.not_op(val[0], nil, val[1], nil) - - result -end - -# reduce 50 omitted - -# reduce 51 omitted - -# reduce 52 omitted - -# reduce 53 omitted - -# reduce 54 omitted - -def _reduce_55(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - result -end - -def _reduce_56(val, _values, result) - result = @context.dup - @context.in_block = true - - result -end - -def _reduce_57(val, _values, result) - result = [ val[0], *val[2], val[3] ] - @context.in_block = val[1].in_block - - result -end - -# reduce 58 omitted - -def _reduce_59(val, _values, result) - result = @builder.call_method(nil, nil, val[0], - nil, val[1], nil) - - result -end - -def _reduce_60(val, _values, result) - method_call = @builder.call_method(nil, nil, val[0], - nil, val[1], nil) - - begin_t, args, body, end_t = val[2] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_61(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - result -end - -def _reduce_62(val, _values, result) - method_call = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - begin_t, args, body, end_t = val[4] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_63(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - result -end - -def _reduce_64(val, _values, result) - method_call = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - begin_t, args, body, end_t = val[4] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_65(val, _values, result) - result = @builder.keyword_cmd(:super, val[0], - nil, val[1], nil) - - result -end - -def _reduce_66(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0], - nil, val[1], nil) - - result -end - -def _reduce_67(val, _values, result) - result = @builder.keyword_cmd(:return, val[0], - nil, val[1], nil) - - result -end - -def _reduce_68(val, _values, result) - result = @builder.keyword_cmd(:break, val[0], - nil, val[1], nil) - - result -end - -def _reduce_69(val, _values, result) - result = @builder.keyword_cmd(:next, val[0], - nil, val[1], nil) - - result -end - -def _reduce_70(val, _values, result) - result = @builder.multi_lhs(nil, val[0], nil) - - result -end - -def _reduce_71(val, _values, result) - result = @builder.begin(val[0], val[1], val[2]) - - result -end - -def _reduce_72(val, _values, result) - result = @builder.multi_lhs(nil, val[0], nil) - - result -end - -def _reduce_73(val, _values, result) - result = @builder.multi_lhs(val[0], val[1], val[2]) - - result -end - -# reduce 74 omitted - -def _reduce_75(val, _values, result) - result = val[0]. - push(val[1]) - - result -end - -def _reduce_76(val, _values, result) - result = val[0]. - push(@builder.splat(val[1], val[2])) - - result -end - -def _reduce_77(val, _values, result) - result = val[0]. - push(@builder.splat(val[1], val[2])). - concat(val[4]) - - result -end - -def _reduce_78(val, _values, result) - result = val[0]. - push(@builder.splat(val[1])) - - result -end - -def _reduce_79(val, _values, result) - result = val[0]. - push(@builder.splat(val[1])). - concat(val[3]) - - result -end - -def _reduce_80(val, _values, result) - result = [ @builder.splat(val[0], val[1]) ] - - result -end - -def _reduce_81(val, _values, result) - result = [ @builder.splat(val[0], val[1]), - *val[3] ] - - result -end - -def _reduce_82(val, _values, result) - result = [ @builder.splat(val[0]) ] - - result -end - -def _reduce_83(val, _values, result) - result = [ @builder.splat(val[0]), - *val[2] ] - - result -end - -# reduce 84 omitted - -def _reduce_85(val, _values, result) - result = @builder.begin(val[0], val[1], val[2]) - - result -end - -def _reduce_86(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_87(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_88(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_89(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_90(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_91(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_92(val, _values, result) - result = @builder.index_asgn(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_93(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_94(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_95(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_96(val, _values, result) - result = @builder.assignable( - @builder.const_fetch(val[0], val[1], val[2])) - - result -end - -def _reduce_97(val, _values, result) - result = @builder.assignable( - @builder.const_global(val[0], val[1])) - - result -end - -def _reduce_98(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_99(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_100(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_101(val, _values, result) - result = @builder.index_asgn(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_102(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_103(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_104(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_105(val, _values, result) - result = @builder.assignable( - @builder.const_fetch(val[0], val[1], val[2])) - - result -end - -def _reduce_106(val, _values, result) - result = @builder.assignable( - @builder.const_global(val[0], val[1])) - - result -end - -def _reduce_107(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_108(val, _values, result) - diagnostic :error, :module_name_const, nil, val[0] - - result -end - -# reduce 109 omitted - -def _reduce_110(val, _values, result) - result = @builder.const_global(val[0], val[1]) - - result -end - -def _reduce_111(val, _values, result) - result = @builder.const(val[0]) - - result -end - -def _reduce_112(val, _values, result) - result = @builder.const_fetch(val[0], val[1], val[2]) - - result -end - -# reduce 113 omitted - -# reduce 114 omitted - -# reduce 115 omitted - -# reduce 116 omitted - -# reduce 117 omitted - -def _reduce_118(val, _values, result) - result = @builder.symbol_internal(val[0]) - - result -end - -# reduce 119 omitted - -# reduce 120 omitted - -# reduce 121 omitted - -def _reduce_122(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_123(val, _values, result) - @lexer.state = :expr_fname - - result -end - -def _reduce_124(val, _values, result) - result = val[0] << val[3] - - result -end - -# reduce 125 omitted - -# reduce 126 omitted - -# reduce 127 omitted - -# reduce 128 omitted - -# reduce 129 omitted - -# reduce 130 omitted - -# reduce 131 omitted - -# reduce 132 omitted - -# reduce 133 omitted - -# reduce 134 omitted - -# reduce 135 omitted - -# reduce 136 omitted - -# reduce 137 omitted - -# reduce 138 omitted - -# reduce 139 omitted - -# reduce 140 omitted - -# reduce 141 omitted - -# reduce 142 omitted - -# reduce 143 omitted - -# reduce 144 omitted - -# reduce 145 omitted - -# reduce 146 omitted - -# reduce 147 omitted - -# reduce 148 omitted - -# reduce 149 omitted - -# reduce 150 omitted - -# reduce 151 omitted - -# reduce 152 omitted - -# reduce 153 omitted - -# reduce 154 omitted - -# reduce 155 omitted - -# reduce 156 omitted - -# reduce 157 omitted - -# reduce 158 omitted - -# reduce 159 omitted - -# reduce 160 omitted - -# reduce 161 omitted - -# reduce 162 omitted - -# reduce 163 omitted - -# reduce 164 omitted - -# reduce 165 omitted - -# reduce 166 omitted - -# reduce 167 omitted - -# reduce 168 omitted - -# reduce 169 omitted - -# reduce 170 omitted - -# reduce 171 omitted - -# reduce 172 omitted - -# reduce 173 omitted - -# reduce 174 omitted - -# reduce 175 omitted - -# reduce 176 omitted - -# reduce 177 omitted - -# reduce 178 omitted - -# reduce 179 omitted - -# reduce 180 omitted - -# reduce 181 omitted - -# reduce 182 omitted - -# reduce 183 omitted - -# reduce 184 omitted - -# reduce 185 omitted - -# reduce 186 omitted - -# reduce 187 omitted - -# reduce 188 omitted - -# reduce 189 omitted - -# reduce 190 omitted - -# reduce 191 omitted - -# reduce 192 omitted - -# reduce 193 omitted - -# reduce 194 omitted - -# reduce 195 omitted - -def _reduce_196(val, _values, result) - result = @builder.assign(val[0], val[1], val[2]) - - result -end - -def _reduce_197(val, _values, result) - result = @builder.op_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_198(val, _values, result) - result = @builder.op_assign( - @builder.index( - val[0], val[1], val[2], val[3]), - val[4], val[5]) - - result -end - -def _reduce_199(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_200(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_201(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_202(val, _values, result) - const = @builder.const_op_assignable( - @builder.const_fetch(val[0], val[1], val[2])) - result = @builder.op_assign(const, val[3], val[4]) - - result -end - -def _reduce_203(val, _values, result) - const = @builder.const_op_assignable( - @builder.const_global(val[0], val[1])) - result = @builder.op_assign(const, val[2], val[3]) - - result -end - -def _reduce_204(val, _values, result) - result = @builder.op_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_205(val, _values, result) - result = @builder.range_inclusive(val[0], val[1], val[2]) - - result -end - -def _reduce_206(val, _values, result) - result = @builder.range_exclusive(val[0], val[1], val[2]) - - result -end - -def _reduce_207(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_208(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_209(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_210(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_211(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_212(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_213(val, _values, result) - result = @builder.unary_op(val[0], - @builder.binary_op( - val[1], val[2], val[3])) - - result -end - -def _reduce_214(val, _values, result) - result = @builder.unary_op(val[0], val[1]) - - result -end - -def _reduce_215(val, _values, result) - result = @builder.unary_op(val[0], val[1]) - - result -end - -def _reduce_216(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_217(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_218(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_219(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_220(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_221(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_222(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_223(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_224(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_225(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_226(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_227(val, _values, result) - result = @builder.match_op(val[0], val[1], val[2]) - - result -end - -def _reduce_228(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_229(val, _values, result) - result = @builder.not_op(val[0], nil, val[1], nil) - - result -end - -def _reduce_230(val, _values, result) - result = @builder.unary_op(val[0], val[1]) - - result -end - -def _reduce_231(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_232(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_233(val, _values, result) - result = @builder.logical_op(:and, val[0], val[1], val[2]) - - result -end - -def _reduce_234(val, _values, result) - result = @builder.logical_op(:or, val[0], val[1], val[2]) - - result -end - -def _reduce_235(val, _values, result) - result = @builder.keyword_cmd(:defined?, val[0], nil, [ val[2] ], nil) - - result -end - -def _reduce_236(val, _values, result) - result = @builder.ternary(val[0], val[1], - val[2], val[4], val[5]) - - result -end - -# reduce 237 omitted - -# reduce 238 omitted - -# reduce 239 omitted - -# reduce 240 omitted - -def _reduce_241(val, _values, result) - result = val[0] << @builder.associate(nil, val[2], nil) - - result -end - -def _reduce_242(val, _values, result) - result = [ @builder.associate(nil, val[0], nil) ] - - result -end - -# reduce 243 omitted - -def _reduce_244(val, _values, result) - rescue_body = @builder.rescue_body(val[1], - nil, nil, nil, - nil, val[2]) - - result = @builder.begin_body(val[0], [ rescue_body ]) - - result -end - -def _reduce_245(val, _values, result) - result = val - - result -end - -def _reduce_246(val, _values, result) - result = [ nil, [], nil ] - - result -end - -# reduce 247 omitted - -def _reduce_248(val, _values, result) - result = [] - - result -end - -# reduce 249 omitted - -# reduce 250 omitted - -def _reduce_251(val, _values, result) - result = val[0] << @builder.associate(nil, val[2], nil) - - result -end - -def _reduce_252(val, _values, result) - result = [ @builder.associate(nil, val[0], nil) ] - - result -end - -def _reduce_253(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_254(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_255(val, _values, result) - result = [ @builder.associate(nil, val[0], nil) ] - result.concat(val[1]) - - result -end - -def _reduce_256(val, _values, result) - assocs = @builder.associate(nil, val[2], nil) - result = val[0] << assocs - result.concat(val[3]) - - result -end - -def _reduce_257(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_258(val, _values, result) - # When branch gets invoked by RACC's lookahead - # and command args start with '[' or '(' - # we need to put `true` to the cmdarg stack - # **before** `false` pushed by lexer - # m [], n - # ^ - # Right here we have cmdarg [...0] because - # lexer pushed it on '[' - # We need to modify cmdarg stack to [...10] - # - # For all other cases (like `m n` or `m n, []`) we simply put 1 to the stack - # and later lexer pushes corresponding bits on top of it. - last_token = @last_token[0] - lookahead = last_token == :tLBRACK || last_token == :tLPAREN_ARG - - if lookahead - top = @lexer.cmdarg.pop - @lexer.cmdarg.push(true) - @lexer.cmdarg.push(top) - else - @lexer.cmdarg.push(true) - end - - result -end - -def _reduce_259(val, _values, result) - # call_args can be followed by tLBRACE_ARG (that does cmdarg.push(0) in the lexer) - # but the push must be done after cmdarg.pop() in the parser. - # So this code does cmdarg.pop() to pop 0 pushed by tLBRACE_ARG, - # cmdarg.pop() to pop 1 pushed by command_args, - # and cmdarg.push(0) to restore back the flag set by tLBRACE_ARG. - last_token = @last_token[0] - lookahead = last_token == :tLBRACE_ARG - if lookahead - top = @lexer.cmdarg.pop - @lexer.cmdarg.pop - @lexer.cmdarg.push(top) - else - @lexer.cmdarg.pop - end - - result = val[1] - - result -end - -def _reduce_260(val, _values, result) - result = @builder.block_pass(val[0], val[1]) - - result -end - -def _reduce_261(val, _values, result) - result = [ val[1] ] - - result -end - -def _reduce_262(val, _values, result) - result = [] - - result -end - -def _reduce_263(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_264(val, _values, result) - result = [ @builder.splat(val[0], val[1]) ] - - result -end - -def _reduce_265(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_266(val, _values, result) - result = val[0] << @builder.splat(val[2], val[3]) - - result -end - -def _reduce_267(val, _values, result) - result = @builder.array(nil, val[0], nil) - - result -end - -# reduce 268 omitted - -def _reduce_269(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_270(val, _values, result) - result = val[0] << @builder.splat(val[2], val[3]) - - result -end - -def _reduce_271(val, _values, result) - result = [ @builder.splat(val[0], val[1]) ] - - result -end - -# reduce 272 omitted - -# reduce 273 omitted - -# reduce 274 omitted - -# reduce 275 omitted - -# reduce 276 omitted - -# reduce 277 omitted - -# reduce 278 omitted - -# reduce 279 omitted - -# reduce 280 omitted - -# reduce 281 omitted - -def _reduce_282(val, _values, result) - result = @builder.call_method(nil, nil, val[0]) - - result -end - -def _reduce_283(val, _values, result) - @lexer.cmdarg.push(false) - - result -end - -def _reduce_284(val, _values, result) - @lexer.cmdarg.pop - - result = @builder.begin_keyword(val[0], val[2], val[3]) - - result -end - -def _reduce_285(val, _values, result) - @lexer.state = :expr_endarg - - result -end - -def _reduce_286(val, _values, result) - result = @builder.begin(val[0], val[1], val[3]) - - result -end - -def _reduce_287(val, _values, result) - @lexer.state = :expr_endarg - - result -end - -def _reduce_288(val, _values, result) - result = @builder.begin(val[0], nil, val[3]) - - result -end - -def _reduce_289(val, _values, result) - result = @builder.begin(val[0], val[1], val[2]) - - result -end - -def _reduce_290(val, _values, result) - result = @builder.const_fetch(val[0], val[1], val[2]) - - result -end - -def _reduce_291(val, _values, result) - result = @builder.const_global(val[0], val[1]) - - result -end - -def _reduce_292(val, _values, result) - result = @builder.array(val[0], val[1], val[2]) - - result -end - -def _reduce_293(val, _values, result) - result = @builder.associate(val[0], val[1], val[2]) - - result -end - -def _reduce_294(val, _values, result) - result = @builder.keyword_cmd(:return, val[0]) - - result -end - -def _reduce_295(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_296(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0], val[1], [], val[2]) - - result -end - -def _reduce_297(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0]) - - result -end - -def _reduce_298(val, _values, result) - result = @builder.keyword_cmd(:defined?, val[0], - val[2], [ val[3] ], val[4]) - - result -end - -def _reduce_299(val, _values, result) - result = @builder.not_op(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_300(val, _values, result) - result = @builder.not_op(val[0], val[1], nil, val[2]) - - result -end - -def _reduce_301(val, _values, result) - method_call = @builder.call_method(nil, nil, val[0]) - - begin_t, args, body, end_t = val[1] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -# reduce 302 omitted - -def _reduce_303(val, _values, result) - begin_t, args, body, end_t = val[1] - result = @builder.block(val[0], - begin_t, args, body, end_t) - - result -end - -def _reduce_304(val, _values, result) - result = @context.dup - @context.in_lambda = true - - result -end - -def _reduce_305(val, _values, result) - lambda_call = @builder.call_lambda(val[0]) - - args, (begin_t, body, end_t) = val[2] - result = @builder.block(lambda_call, - begin_t, args, body, end_t) - - @context.in_lambda = val[1].in_lambda - - result -end - -def _reduce_306(val, _values, result) - else_t, else_ = val[4] - result = @builder.condition(val[0], val[1], val[2], - val[3], else_t, - else_, val[5]) - - result -end - -def _reduce_307(val, _values, result) - else_t, else_ = val[4] - result = @builder.condition(val[0], val[1], val[2], - else_, else_t, - val[3], val[5]) - - result -end - -def _reduce_308(val, _values, result) - @lexer.cond.push(true) - - result -end - -def _reduce_309(val, _values, result) - @lexer.cond.pop - - result -end - -def _reduce_310(val, _values, result) - result = @builder.loop(:while, val[0], val[2], val[3], - val[5], val[6]) - - result -end - -def _reduce_311(val, _values, result) - @lexer.cond.push(true) - - result -end - -def _reduce_312(val, _values, result) - @lexer.cond.pop - - result -end - -def _reduce_313(val, _values, result) - result = @builder.loop(:until, val[0], val[2], val[3], - val[5], val[6]) - - result -end - -def _reduce_314(val, _values, result) - *when_bodies, (else_t, else_body) = *val[3] - - result = @builder.case(val[0], val[1], - when_bodies, else_t, else_body, - val[4]) - - result -end - -def _reduce_315(val, _values, result) - *when_bodies, (else_t, else_body) = *val[2] - - result = @builder.case(val[0], nil, - when_bodies, else_t, else_body, - val[3]) - - result -end - -def _reduce_316(val, _values, result) - @lexer.cond.push(true) - - result -end - -def _reduce_317(val, _values, result) - @lexer.cond.pop - - result -end - -def _reduce_318(val, _values, result) - result = @builder.for(val[0], val[1], - val[2], val[4], - val[5], val[7], val[8]) - - result -end - -def _reduce_319(val, _values, result) - local_push - @context.in_class = true - - result -end - -def _reduce_320(val, _values, result) - k_class, ctx = val[0] - if @context.in_def - diagnostic :error, :class_in_def, nil, k_class - end - - lt_t, superclass = val[2] - result = @builder.def_class(k_class, val[1], - lt_t, superclass, - val[4], val[5]) - - local_pop - @context.in_class = ctx.in_class - - result -end - -def _reduce_321(val, _values, result) - @context.in_def = false - @context.in_class = false - local_push - - result -end - -def _reduce_322(val, _values, result) - k_class, ctx = val[0] - result = @builder.def_sclass(k_class, val[1], val[2], - val[5], val[6]) - - local_pop - @context.in_def = ctx.in_def - @context.in_class = ctx.in_class - - result -end - -def _reduce_323(val, _values, result) - @context.in_class = true - local_push - - result -end - -def _reduce_324(val, _values, result) - k_mod, ctx = val[0] - if @context.in_def - diagnostic :error, :module_in_def, nil, k_mod - end - - result = @builder.def_module(k_mod, val[1], - val[3], val[4]) - - local_pop - @context.in_class = ctx.in_class - - result -end - -def _reduce_325(val, _values, result) - local_push - result = context.dup - @context.in_def = true - - result -end - -def _reduce_326(val, _values, result) - result = @builder.def_method(val[0], val[1], - val[3], val[4], val[5]) - - local_pop - @context.in_def = val[2].in_def - - result -end - -def _reduce_327(val, _values, result) - @lexer.state = :expr_fname - - result -end - -def _reduce_328(val, _values, result) - local_push - result = context.dup - @context.in_def = true - - result -end - -def _reduce_329(val, _values, result) - result = @builder.def_singleton(val[0], val[1], val[2], - val[4], val[6], val[7], val[8]) - - local_pop - @context.in_def = val[5].in_def - - result -end - -def _reduce_330(val, _values, result) - result = @builder.keyword_cmd(:break, val[0]) - - result -end - -def _reduce_331(val, _values, result) - result = @builder.keyword_cmd(:next, val[0]) - - result -end - -def _reduce_332(val, _values, result) - result = @builder.keyword_cmd(:redo, val[0]) - - result -end - -def _reduce_333(val, _values, result) - result = @builder.keyword_cmd(:retry, val[0]) - - result -end - -# reduce 334 omitted - -def _reduce_335(val, _values, result) - result = [ val[0], @context.dup ] - - result -end - -def _reduce_336(val, _values, result) - result = [ val[0], @context.dup ] - - result -end - -# reduce 337 omitted - -# reduce 338 omitted - -def _reduce_339(val, _values, result) - result = val[1] - - result -end - -# reduce 340 omitted - -# reduce 341 omitted - -# reduce 342 omitted - -def _reduce_343(val, _values, result) - else_t, else_ = val[4] - result = [ val[0], - @builder.condition(val[0], val[1], val[2], - val[3], else_t, - else_, nil), - ] - - result -end - -# reduce 344 omitted - -def _reduce_345(val, _values, result) - result = val - - result -end - -# reduce 346 omitted - -# reduce 347 omitted - -def _reduce_348(val, _values, result) - result = @builder.arg(val[0]) - - result -end - -def _reduce_349(val, _values, result) - result = @builder.multi_lhs(val[0], val[1], val[2]) - - result -end - -def _reduce_350(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_351(val, _values, result) - result = val[0] << val[2] - - result -end - -# reduce 352 omitted - -def _reduce_353(val, _values, result) - result = val[0]. - push(@builder.restarg(val[2], val[3])) - - result -end - -def _reduce_354(val, _values, result) - result = val[0]. - push(@builder.restarg(val[2], val[3])). - concat(val[5]) - - result -end - -def _reduce_355(val, _values, result) - result = val[0]. - push(@builder.restarg(val[2])) - - result -end - -def _reduce_356(val, _values, result) - result = val[0]. - push(@builder.restarg(val[2])). - concat(val[4]) - - result -end - -def _reduce_357(val, _values, result) - result = [ @builder.restarg(val[0], val[1]) ] - - result -end - -def _reduce_358(val, _values, result) - result = [ @builder.restarg(val[0], val[1]), - *val[3] ] - - result -end - -def _reduce_359(val, _values, result) - result = [ @builder.restarg(val[0]) ] - - result -end - -def _reduce_360(val, _values, result) - result = [ @builder.restarg(val[0]), - *val[2] ] - - result -end - -def _reduce_361(val, _values, result) - result = val[0].concat(val[2]).concat(val[3]) - - result -end - -def _reduce_362(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_363(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_364(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_365(val, _values, result) - result = val[1] - - result -end - -def _reduce_366(val, _values, result) - result = [] - - result -end - -def _reduce_367(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_368(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[6]). - concat(val[7]) - - result -end - -def _reduce_369(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_370(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_371(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -# reduce 372 omitted - -def _reduce_373(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_374(val, _values, result) - if val[1].empty? && val[0].size == 1 - result = [@builder.procarg0(val[0][0])] - else - result = val[0].concat(val[1]) - end - - result -end - -def _reduce_375(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_376(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_377(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_378(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_379(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_380(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -# reduce 381 omitted - -def _reduce_382(val, _values, result) - result = @builder.args(nil, [], nil) - - result -end - -def _reduce_383(val, _values, result) - @lexer.state = :expr_value - - result -end - -def _reduce_384(val, _values, result) - result = @builder.args(val[0], val[1], val[2]) - - result -end - -def _reduce_385(val, _values, result) - result = @builder.args(val[0], [], val[0]) - - result -end - -def _reduce_386(val, _values, result) - result = @builder.args(val[0], val[1].concat(val[2]), val[3]) - - result -end - -def _reduce_387(val, _values, result) - result = [] - - result -end - -def _reduce_388(val, _values, result) - result = val[2] - - result -end - -def _reduce_389(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_390(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_391(val, _values, result) - @static_env.declare val[0][0] - result = @builder.shadowarg(val[0]) - - result -end - -# reduce 392 omitted - -def _reduce_393(val, _values, result) - @static_env.extend_dynamic - - result -end - -def _reduce_394(val, _values, result) - @lexer.cmdarg.push(false) - - result -end - -def _reduce_395(val, _values, result) - @lexer.cmdarg.pop - - result = [ val[1], val[3] ] - - @static_env.unextend - - result -end - -def _reduce_396(val, _values, result) - result = @builder.args(val[0], val[1].concat(val[2]), val[3]) - - result -end - -def _reduce_397(val, _values, result) - result = @builder.args(nil, val[0], nil) - - result -end - -def _reduce_398(val, _values, result) - result = @context.dup - @context.in_lambda = true - - result -end - -def _reduce_399(val, _values, result) - result = [ val[0], val[2], val[3] ] - @context.in_lambda = val[1].in_lambda - - result -end - -def _reduce_400(val, _values, result) - result = @context.dup - @context.in_lambda = true - - result -end - -def _reduce_401(val, _values, result) - result = [ val[0], val[2], val[3] ] - @context.in_lambda = val[1].in_lambda - - result -end - -def _reduce_402(val, _values, result) - result = @context.dup - @context.in_block = true - - result -end - -def _reduce_403(val, _values, result) - result = [ val[0], *val[2], val[3] ] - @context.in_block = val[1].in_block - - result -end - -def _reduce_404(val, _values, result) - begin_t, block_args, body, end_t = val[1] - result = @builder.block(val[0], - begin_t, block_args, body, end_t) - - result -end - -def _reduce_405(val, _values, result) - lparen_t, args, rparen_t = val[3] - result = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - result -end - -def _reduce_406(val, _values, result) - lparen_t, args, rparen_t = val[3] - method_call = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - begin_t, args, body, end_t = val[4] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_407(val, _values, result) - method_call = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - begin_t, args, body, end_t = val[4] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_408(val, _values, result) - lparen_t, args, rparen_t = val[1] - result = @builder.call_method(nil, nil, val[0], - lparen_t, args, rparen_t) - - result -end - -def _reduce_409(val, _values, result) - lparen_t, args, rparen_t = val[3] - result = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - result -end - -def _reduce_410(val, _values, result) - lparen_t, args, rparen_t = val[3] - result = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - result -end - -def _reduce_411(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2]) - - result -end - -def _reduce_412(val, _values, result) - lparen_t, args, rparen_t = val[2] - result = @builder.call_method(val[0], val[1], nil, - lparen_t, args, rparen_t) - - result -end - -def _reduce_413(val, _values, result) - lparen_t, args, rparen_t = val[2] - result = @builder.call_method(val[0], val[1], nil, - lparen_t, args, rparen_t) - - result -end - -def _reduce_414(val, _values, result) - lparen_t, args, rparen_t = val[1] - result = @builder.keyword_cmd(:super, val[0], - lparen_t, args, rparen_t) - - result -end - -def _reduce_415(val, _values, result) - result = @builder.keyword_cmd(:zsuper, val[0]) - - result -end - -def _reduce_416(val, _values, result) - result = @builder.index(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_417(val, _values, result) - result = @context.dup - @context.in_block = true - - result -end - -def _reduce_418(val, _values, result) - result = [ val[0], *val[2], val[3] ] - @context.in_block = val[1].in_block - - result -end - -def _reduce_419(val, _values, result) - result = @context.dup - @context.in_block = true - - result -end - -def _reduce_420(val, _values, result) - result = [ val[0], *val[2], val[3] ] - @context.in_block = val[1].in_block - - result -end - -def _reduce_421(val, _values, result) - @static_env.extend_dynamic - - result -end - -def _reduce_422(val, _values, result) - result = [ val[1], val[2] ] - - @static_env.unextend - - result -end - -def _reduce_423(val, _values, result) - @static_env.extend_dynamic - - result -end - -def _reduce_424(val, _values, result) - @lexer.cmdarg.push(false) - - result -end - -def _reduce_425(val, _values, result) - result = [ val[2], val[3] ] - - @static_env.unextend - @lexer.cmdarg.pop - - result -end - -def _reduce_426(val, _values, result) - result = [ @builder.when(val[0], val[1], val[2], val[3]), - *val[4] ] - - result -end - -def _reduce_427(val, _values, result) - result = [ val[0] ] - - result -end - -# reduce 428 omitted - -def _reduce_429(val, _values, result) - assoc_t, exc_var = val[2] - - if val[1] - exc_list = @builder.array(nil, val[1], nil) - end - - result = [ @builder.rescue_body(val[0], - exc_list, assoc_t, exc_var, - val[3], val[4]), - *val[5] ] - - result -end - -def _reduce_430(val, _values, result) - result = [] - - result -end - -def _reduce_431(val, _values, result) - result = [ val[0] ] - - result -end - -# reduce 432 omitted - -# reduce 433 omitted - -def _reduce_434(val, _values, result) - result = [ val[0], val[1] ] - - result -end - -# reduce 435 omitted - -def _reduce_436(val, _values, result) - result = [ val[0], val[1] ] - - result -end - -# reduce 437 omitted - -# reduce 438 omitted - -# reduce 439 omitted - -# reduce 440 omitted - -def _reduce_441(val, _values, result) - result = @builder.string_compose(nil, val[0], nil) - - result -end - -def _reduce_442(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_443(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_444(val, _values, result) - string = @builder.string_compose(val[0], val[1], val[2]) - result = @builder.dedent_string(string, @lexer.dedent_level) - - result -end - -def _reduce_445(val, _values, result) - string = @builder.string(val[0]) - result = @builder.dedent_string(string, @lexer.dedent_level) - - result -end - -def _reduce_446(val, _values, result) - result = @builder.character(val[0]) - - result -end - -def _reduce_447(val, _values, result) - string = @builder.xstring_compose(val[0], val[1], val[2]) - result = @builder.dedent_string(string, @lexer.dedent_level) - - result -end - -def _reduce_448(val, _values, result) - opts = @builder.regexp_options(val[3]) - result = @builder.regexp_compose(val[0], val[1], val[2], opts) - - result -end - -def _reduce_449(val, _values, result) - result = @builder.words_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_450(val, _values, result) - result = [] - - result -end - -def _reduce_451(val, _values, result) - result = val[0] << @builder.word(val[1]) - - result -end - -def _reduce_452(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_453(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_454(val, _values, result) - result = @builder.symbols_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_455(val, _values, result) - result = [] - - result -end - -def _reduce_456(val, _values, result) - result = val[0] << @builder.word(val[1]) - - result -end - -def _reduce_457(val, _values, result) - result = @builder.words_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_458(val, _values, result) - result = @builder.symbols_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_459(val, _values, result) - result = [] - - result -end - -def _reduce_460(val, _values, result) - result = val[0] << @builder.string_internal(val[1]) - - result -end - -def _reduce_461(val, _values, result) - result = [] - - result -end - -def _reduce_462(val, _values, result) - result = val[0] << @builder.symbol_internal(val[1]) - - result -end - -def _reduce_463(val, _values, result) - result = [] - - result -end - -def _reduce_464(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_465(val, _values, result) - result = [] - - result -end - -def _reduce_466(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_467(val, _values, result) - result = [] - - result -end - -def _reduce_468(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_469(val, _values, result) - result = @builder.string_internal(val[0]) - - result -end - -def _reduce_470(val, _values, result) - result = val[1] - - result -end - -def _reduce_471(val, _values, result) - @lexer.cmdarg.push(false) - @lexer.cond.push(false) - - result -end - -def _reduce_472(val, _values, result) - @lexer.cmdarg.pop - @lexer.cond.pop - - result = @builder.begin(val[0], val[2], val[3]) - - result -end - -def _reduce_473(val, _values, result) - result = @builder.gvar(val[0]) - - result -end - -def _reduce_474(val, _values, result) - result = @builder.ivar(val[0]) - - result -end - -def _reduce_475(val, _values, result) - result = @builder.cvar(val[0]) - - result -end - -# reduce 476 omitted - -def _reduce_477(val, _values, result) - @lexer.state = :expr_end - result = @builder.symbol(val[0]) - - result -end - -def _reduce_478(val, _values, result) - @lexer.state = :expr_end - result = @builder.symbol_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_479(val, _values, result) - result = val[0] - - result -end - -def _reduce_480(val, _values, result) - if @builder.respond_to? :negate - # AST builder interface compatibility - result = @builder.negate(val[0], val[1]) - else - result = @builder.unary_num(val[0], val[1]) - end - - result -end - -def _reduce_481(val, _values, result) - @lexer.state = :expr_end - result = @builder.integer(val[0]) - - result -end - -def _reduce_482(val, _values, result) - @lexer.state = :expr_end - result = @builder.float(val[0]) - - result -end - -def _reduce_483(val, _values, result) - @lexer.state = :expr_end - result = @builder.rational(val[0]) - - result -end - -def _reduce_484(val, _values, result) - @lexer.state = :expr_end - result = @builder.complex(val[0]) - - result -end - -def _reduce_485(val, _values, result) - result = @builder.ident(val[0]) - - result -end - -def _reduce_486(val, _values, result) - result = @builder.ivar(val[0]) - - result -end - -def _reduce_487(val, _values, result) - result = @builder.gvar(val[0]) - - result -end - -def _reduce_488(val, _values, result) - result = @builder.const(val[0]) - - result -end - -def _reduce_489(val, _values, result) - result = @builder.cvar(val[0]) - - result -end - -def _reduce_490(val, _values, result) - result = @builder.nil(val[0]) - - result -end - -def _reduce_491(val, _values, result) - result = @builder.self(val[0]) - - result -end - -def _reduce_492(val, _values, result) - result = @builder.true(val[0]) - - result -end - -def _reduce_493(val, _values, result) - result = @builder.false(val[0]) - - result -end - -def _reduce_494(val, _values, result) - result = @builder.__FILE__(val[0]) - - result -end - -def _reduce_495(val, _values, result) - result = @builder.__LINE__(val[0]) - - result -end - -def _reduce_496(val, _values, result) - result = @builder.__ENCODING__(val[0]) - - result -end - -def _reduce_497(val, _values, result) - result = @builder.accessible(val[0]) - - result -end - -def _reduce_498(val, _values, result) - result = @builder.accessible(val[0]) - - result -end - -def _reduce_499(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_500(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_501(val, _values, result) - result = @builder.nth_ref(val[0]) - - result -end - -def _reduce_502(val, _values, result) - result = @builder.back_ref(val[0]) - - result -end - -def _reduce_503(val, _values, result) - @lexer.state = :expr_value - - result -end - -def _reduce_504(val, _values, result) - result = [ val[0], val[2] ] - - result -end - -def _reduce_505(val, _values, result) - result = nil - - result -end - -def _reduce_506(val, _values, result) - result = @builder.args(val[0], val[1], val[2]) - - @lexer.state = :expr_value - - result -end - -def _reduce_507(val, _values, result) - result = @context.in_kwarg - @context.in_kwarg = true - - result -end - -def _reduce_508(val, _values, result) - @context.in_kwarg = val[0] - result = @builder.args(nil, val[1], nil) - - result -end - -def _reduce_509(val, _values, result) - result = val[0].concat(val[2]).concat(val[3]) - - result -end - -def _reduce_510(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_511(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_512(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_513(val, _values, result) - result = val[1] - - result -end - -def _reduce_514(val, _values, result) - result = [] - - result -end - -def _reduce_515(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_516(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[6]). - concat(val[7]) - - result -end - -def _reduce_517(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_518(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_519(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_520(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_521(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_522(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_523(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_524(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_525(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_526(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_527(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_528(val, _values, result) - result = val[0] - - result -end - -def _reduce_529(val, _values, result) - result = [] - - result -end - -def _reduce_530(val, _values, result) - diagnostic :error, :argument_const, nil, val[0] - - result -end - -def _reduce_531(val, _values, result) - diagnostic :error, :argument_ivar, nil, val[0] - - result -end - -def _reduce_532(val, _values, result) - diagnostic :error, :argument_gvar, nil, val[0] - - result -end - -def _reduce_533(val, _values, result) - diagnostic :error, :argument_cvar, nil, val[0] - - result -end - -# reduce 534 omitted - -def _reduce_535(val, _values, result) - @static_env.declare val[0][0] - - result = val[0] - - result -end - -def _reduce_536(val, _values, result) - result = val[0] - - result -end - -def _reduce_537(val, _values, result) - result = @builder.arg(val[0]) - - result -end - -def _reduce_538(val, _values, result) - result = @builder.multi_lhs(val[0], val[1], val[2]) - - result -end - -def _reduce_539(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_540(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_541(val, _values, result) - check_kwarg_name(val[0]) - - @static_env.declare val[0][0] - - result = val[0] - - result -end - -def _reduce_542(val, _values, result) - result = @builder.kwoptarg(val[0], val[1]) - - result -end - -def _reduce_543(val, _values, result) - result = @builder.kwarg(val[0]) - - result -end - -def _reduce_544(val, _values, result) - result = @builder.kwoptarg(val[0], val[1]) - - result -end - -def _reduce_545(val, _values, result) - result = @builder.kwarg(val[0]) - - result -end - -def _reduce_546(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_547(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_548(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_549(val, _values, result) - result = val[0] << val[2] - - result -end - -# reduce 550 omitted - -# reduce 551 omitted - -def _reduce_552(val, _values, result) - @static_env.declare val[1][0] - - result = [ @builder.kwrestarg(val[0], val[1]) ] - - result -end - -def _reduce_553(val, _values, result) - result = [ @builder.kwrestarg(val[0]) ] - - result -end - -def _reduce_554(val, _values, result) - result = @builder.optarg(val[0], val[1], val[2]) - - result -end - -def _reduce_555(val, _values, result) - result = @builder.optarg(val[0], val[1], val[2]) - - result -end - -def _reduce_556(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_557(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_558(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_559(val, _values, result) - result = val[0] << val[2] - - result -end - -# reduce 560 omitted - -# reduce 561 omitted - -def _reduce_562(val, _values, result) - @static_env.declare val[1][0] - - result = [ @builder.restarg(val[0], val[1]) ] - - result -end - -def _reduce_563(val, _values, result) - result = [ @builder.restarg(val[0]) ] - - result -end - -# reduce 564 omitted - -# reduce 565 omitted - -def _reduce_566(val, _values, result) - @static_env.declare val[1][0] - - result = @builder.blockarg(val[0], val[1]) - - result -end - -def _reduce_567(val, _values, result) - result = [ val[1] ] - - result -end - -def _reduce_568(val, _values, result) - result = [] - - result -end - -# reduce 569 omitted - -def _reduce_570(val, _values, result) - result = val[1] - - result -end - -def _reduce_571(val, _values, result) - result = [] - - result -end - -# reduce 572 omitted - -def _reduce_573(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_574(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_575(val, _values, result) - result = @builder.pair(val[0], val[1], val[2]) - - result -end - -def _reduce_576(val, _values, result) - result = @builder.pair_keyword(val[0], val[1]) - - result -end - -def _reduce_577(val, _values, result) - result = @builder.pair_quoted(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_578(val, _values, result) - result = @builder.kwsplat(val[0], val[1]) - - result -end - -# reduce 579 omitted - -# reduce 580 omitted - -# reduce 581 omitted - -# reduce 582 omitted - -# reduce 583 omitted - -# reduce 584 omitted - -# reduce 585 omitted - -# reduce 586 omitted - -# reduce 587 omitted - -# reduce 588 omitted - -# reduce 589 omitted - -# reduce 590 omitted - -def _reduce_591(val, _values, result) - result = [:dot, val[0][1]] - - result -end - -def _reduce_592(val, _values, result) - result = [:anddot, val[0][1]] - - result -end - -# reduce 593 omitted - -# reduce 594 omitted - -# reduce 595 omitted - -# reduce 596 omitted - -def _reduce_597(val, _values, result) - result = val[1] - - result -end - -def _reduce_598(val, _values, result) - result = val[1] - - result -end - -# reduce 599 omitted - -# reduce 600 omitted - -# reduce 601 omitted - -def _reduce_602(val, _values, result) - yyerrok - - result -end - -# reduce 603 omitted - -# reduce 604 omitted - -# reduce 605 omitted - -def _reduce_606(val, _values, result) - result = nil - - result -end - -def _reduce_none(val, _values, result) - val[0] -end - - end # class Ruby24 -end # module Parser diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ruby25.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ruby25.rb deleted file mode 100644 index 53f49cd3..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ruby25.rb +++ /dev/null @@ -1,10374 +0,0 @@ -# -*- encoding:utf-8; warn-indent:false; frozen_string_literal: true -*- -# -# DO NOT MODIFY!!!! -# This file is automatically generated by Racc 1.7.3 -# from Racc grammar file "ruby25.y". -# - -require 'racc/parser.rb' - - -require 'parser' - -module Parser - class Ruby25 < Parser::Base - - - def version - 25 - end - - def default_encoding - Encoding::UTF_8 - end - - def local_push - @static_env.extend_static - @lexer.cmdarg.push(false) - @lexer.cond.push(false) - end - - def local_pop - @static_env.unextend - @lexer.cmdarg.pop - @lexer.cond.pop - end -##### State transition tables begin ### - -racc_action_table = [ - -486, 214, 215, 214, 215, 222, -102, -486, -486, -486, - 113, 549, -486, -486, -486, 220, -486, 276, 224, 590, - 262, 263, 269, 549, -486, 592, -486, -486, -486, 276, - 562, 276, -500, 126, 563, -103, -486, -486, 549, -486, - -486, -486, -486, -486, 549, 549, -102, -103, -110, -110, - -88, -109, -101, 791, -109, 556, 261, 260, 276, 225, - -74, 211, -110, 212, -105, -107, -486, -486, -486, -486, - -486, -486, -486, -486, -486, -486, -486, -486, -486, -486, - 221, 271, -486, -486, -486, 589, -486, -486, 705, -102, - -486, 591, 872, -486, -486, 225, -486, 225, -486, 213, - -486, 216, -486, -486, 275, -486, -486, -486, -486, -486, - -105, -486, -489, -486, -107, -93, 275, -104, 275, -489, - -489, -489, 271, -106, -489, -489, -489, -486, -489, 117, - -486, -486, -486, -486, 116, -486, -489, -486, -489, -489, - -489, 117, -486, -486, -94, 275, 116, -96, -489, -489, - -108, -489, -489, -489, -489, -489, 117, -104, -101, 825, - -100, 116, 117, 117, -102, -103, -110, 116, 116, -102, - -103, -110, -109, -96, -98, -106, 779, -109, -489, -489, - -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, - -489, -489, 117, 265, -489, -489, -489, 116, -489, -489, - -583, 871, -489, 324, -98, -489, -489, 325, -489, -108, - -489, 778, -489, -96, -489, -489, 225, -489, -489, -489, - -489, -489, -296, -489, 395, -489, -95, -584, -105, -296, - -296, -296, -107, -105, 779, -296, -296, -107, -296, -489, - -583, -106, -489, -489, -489, -489, -106, -489, 408, -489, - 214, 215, -501, -96, -489, -489, -96, 457, -296, -296, - -95, -296, -296, -296, -296, -296, -96, 459, -108, 778, - -98, -486, -97, -108, -584, -104, 214, 215, -486, 682, - -104, 679, 678, 677, -97, 680, 214, 215, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, 460, 458, -296, -296, -296, -489, 615, -103, - -98, -500, -296, -98, -489, -296, 95, 96, -99, 577, - -296, 224, -296, -98, -296, -296, -95, -296, -296, -296, - -296, -296, -496, -296, -587, -296, -486, -583, -97, -496, - 405, -587, -587, -587, 225, 407, 406, -587, -587, -296, - -587, 117, -296, -296, 488, -99, 116, -296, -93, -587, - -110, 890, 214, 215, -296, -108, -95, -580, -102, -95, - -587, -587, -489, -587, -587, -587, -587, -587, -97, -95, - 117, -97, 497, 579, 578, 116, 682, 577, 679, 678, - 677, -97, 680, 737, 97, 98, 499, -496, 577, 222, - -587, -587, -587, -587, -587, -587, -587, -587, -587, -587, - -587, -587, -587, -587, 526, 501, -587, -587, -587, -486, - 616, 95, 96, 577, -587, 117, -486, -587, 117, 765, - 116, -580, -587, 116, -587, -486, -587, -587, -501, -587, - -587, -587, -587, -587, 766, -587, -587, -587, 577, 126, - -495, 579, 578, 575, -580, 577, -110, -495, -73, -581, - 577, -587, 579, 578, -587, -587, -587, -97, 983, -587, - 225, -109, 739, -587, -587, -587, -587, -106, -587, -587, - -587, 512, -587, 513, -486, -94, -105, 579, 578, 575, - -497, -587, -587, -587, -587, -103, 520, -497, 280, 97, - 98, -107, -587, -587, 643, -587, -587, -587, -587, -587, - 526, -489, 579, 578, 580, -495, 577, 225, -489, 579, - 578, 582, 577, -581, 579, 578, 584, -489, 539, 822, - 791, 538, -587, -587, -587, -587, -587, -587, -587, -587, - -587, -587, -587, -587, -587, -587, -581, 271, -587, -587, - -587, 523, 767, -587, 220, -497, -587, -100, -494, -587, - -587, 219, -587, 527, -587, -494, -587, -109, -587, -587, - 217, -587, -587, -587, -587, -587, -489, -587, -587, -587, - 579, 578, 588, -491, -334, -492, 579, 578, 593, 245, - -491, -334, -492, -587, 245, 610, -587, -587, -587, -587, - -334, -587, 610, -587, -296, 611, 844, 611, -587, -106, - 117, -296, -296, -296, 225, 116, -296, -296, -296, 221, - -296, 242, 542, -494, 543, 244, 243, -493, 220, 245, - -296, -296, -296, 539, -493, 269, 541, 501, 752, 752, - -296, -296, -96, -296, -296, -296, -296, -296, -491, -334, - -492, 220, -105, -498, -98, 698, 697, 556, 455, -105, - -498, 242, -107, -104, -107, 244, 243, 456, 397, -498, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, 117, -95, -296, -296, -296, 116, - 768, -296, -493, 221, -296, -104, -104, -296, -296, 560, - -296, 561, -296, 569, -296, 539, -296, -296, 541, -296, - -296, -296, -296, -296, -296, -296, 221, -296, -498, 822, - 791, -296, -296, -296, 594, 597, 539, -296, -296, 541, - -296, -296, 245, -269, -296, -296, -296, -296, 599, -296, - 83, -296, -587, 600, 604, 225, -296, -108, 255, 256, - -296, -296, 84, -296, -296, -296, -296, -296, 225, -499, - 608, 999, 85, 220, 242, 609, -499, 271, 244, 243, - 519, 240, 241, 620, 245, -499, 245, 245, 245, 517, - -296, -296, -296, -296, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -587, -287, -296, -296, -296, 225, - 615, -587, -287, 225, -296, 225, -583, -296, -88, 646, - -587, -287, -296, 225, -296, 532, -296, -296, 657, -296, - -296, -296, -296, -296, -499, -296, -587, -296, 221, -587, - 662, 663, 225, -587, -587, -587, 687, 665, 701, -587, - -587, -296, -587, 706, -296, -296, 690, -296, 220, -296, - 707, -587, 556, 709, 726, 529, -296, -108, 736, -587, - -287, 740, -587, -587, 456, -587, -587, -587, -587, -587, - 682, 220, 679, 678, 677, 741, 680, -270, 559, 698, - 697, 753, 488, 488, 691, 731, 732, 557, 225, 733, - 111, 112, -587, -587, -587, -587, -587, -587, -587, -587, - -587, -587, -587, -587, -587, -587, 770, 811, -587, -587, - -587, 220, 616, 221, 220, 771, -587, 265, 565, -587, - 776, 603, 781, 499, -587, 501, -587, 567, -587, -587, - 601, -587, -587, -587, -587, -587, 221, -587, -587, -587, - 682, 657, 679, 678, 677, 687, 680, -297, 120, 121, - 122, 123, 124, -587, -297, 690, -587, -587, -416, -587, - 225, -587, 271, -297, 271, -416, -416, -416, -587, -106, - -416, -416, -416, 657, -416, 245, 221, 685, 791, 221, - 799, 245, 802, -416, -416, -416, 695, 694, 698, 697, - 803, 805, 807, 691, -416, -416, 809, -416, -416, -416, - -416, -416, 682, 817, 679, 678, 677, -297, 680, 818, - 819, 791, -297, 242, -297, 824, 225, 244, 243, 225, - 240, 241, 225, -297, -416, -416, -416, -416, -416, -416, - -416, -416, -416, -416, -416, -416, -416, -416, 833, 811, - -416, -416, -416, -271, 225, -416, 843, 271, -416, 847, - 657, -416, -416, 864, -416, -269, -416, 868, -416, 225, - -416, -416, 888, -416, -416, -416, -416, -416, -303, -416, - -416, -416, -297, 225, 892, -303, -303, -303, 894, 897, - -303, -303, -303, 220, -303, -416, 898, 901, -416, -416, - 969, -416, 225, -416, -303, -303, 905, -272, 907, 567, - -416, 802, 910, 912, -303, -303, 914, -303, -303, -303, - -303, -303, 916, 225, 918, -296, 919, -296, 932, 802, - 934, 936, -296, 938, -296, 940, 940, -584, 225, -584, - 946, -296, 952, -296, -303, -303, -303, -303, -303, -303, - -303, -303, -303, -303, -303, -303, -303, -303, 221, 726, - -303, -303, -303, 963, 970, -303, 975, 280, -303, 985, - 802, -303, -303, 989, -303, 991, -303, 993, -303, 995, - -303, -303, 995, -303, -303, -303, -303, -303, -288, -303, - -296, -303, -296, 662, 1008, -288, -288, -288, 1009, 1010, - -288, -288, -288, 220, -288, -303, 940, 940, -303, -303, - 974, -303, 940, -303, -288, -288, -288, 1015, 985, 972, - -303, 1018, -584, -583, -288, -288, 225, -288, -288, -288, - -288, -288, 966, 220, 679, 678, 677, 985, 680, 682, - 969, 679, 678, 677, 966, 680, 679, 678, 677, 567, - 680, 1027, 995, 995, -288, -288, -288, -288, -288, -288, - -288, -288, -288, -288, -288, -288, -288, -288, 221, 687, - -288, -288, -288, 995, 940, -288, 811, 985, -288, 690, - 995, -288, -288, nil, -288, 814, -288, nil, -288, nil, - -288, -288, nil, -288, -288, -288, -288, -288, 221, -288, - nil, -288, 682, nil, 679, 678, 677, nil, 680, nil, - nil, nil, 698, 697, nil, -288, nil, 691, -288, -288, - -288, -288, nil, -288, -252, -288, nil, nil, nil, nil, - -288, -252, -252, -252, nil, nil, -252, -252, -252, 811, - -252, 682, nil, 679, 678, 677, nil, 680, 814, -252, - -252, -252, 682, nil, 679, 678, 677, nil, 680, nil, - -252, -252, nil, -252, -252, -252, -252, -252, 682, nil, - 679, 678, 677, 682, 680, 679, 678, 677, 811, 680, - 120, 121, 122, 123, 124, nil, nil, 945, nil, 811, - -252, -252, -252, -252, -252, -252, -252, -252, -252, -252, - -252, -252, -252, -252, nil, 811, -252, -252, -252, nil, - 811, -252, nil, 271, -252, nil, nil, -252, -252, nil, - -252, nil, -252, nil, -252, nil, -252, -252, nil, -252, - -252, -252, -252, -252, nil, -252, -252, -252, 682, nil, - 679, 678, 677, 687, 680, 120, 121, 122, 123, 124, - nil, -252, nil, 690, -252, -252, -588, -252, nil, -252, - nil, nil, nil, -588, -588, -588, -252, nil, -588, -588, - -588, nil, -588, 245, nil, 685, 120, 121, 122, 123, - 124, -588, -588, -588, -588, nil, 698, 697, nil, 255, - 256, 691, -588, -588, nil, -588, -588, -588, -588, -588, - nil, nil, nil, nil, nil, 242, nil, 248, nil, 244, - 243, nil, 240, 241, nil, nil, 246, nil, 247, nil, - nil, nil, -588, -588, -588, -588, -588, -588, -588, -588, - -588, -588, -588, -588, -588, -588, nil, nil, -588, -588, - -588, 245, nil, -588, nil, nil, -588, nil, nil, -588, - -588, nil, -588, nil, -588, nil, -588, nil, -588, -588, - nil, -588, -588, -588, -588, -588, nil, -588, -588, -588, - nil, nil, nil, 242, nil, nil, nil, 244, 243, nil, - 240, 241, nil, -588, nil, nil, -588, -588, -588, -588, - nil, -588, -589, -588, nil, nil, nil, nil, -588, -589, - -589, -589, nil, nil, -589, -589, -589, 245, -589, nil, - nil, nil, nil, nil, nil, nil, nil, -589, -589, -589, - -589, nil, nil, 255, 256, nil, nil, nil, -589, -589, - nil, -589, -589, -589, -589, -589, nil, nil, nil, 242, - nil, 248, nil, 244, 243, nil, 240, 241, nil, nil, - 246, nil, 247, nil, nil, nil, nil, nil, -589, -589, - -589, -589, -589, -589, -589, -589, -589, -589, -589, -589, - -589, -589, nil, nil, -589, -589, -589, nil, nil, -589, - nil, nil, -589, nil, nil, -589, -589, nil, -589, nil, - -589, nil, -589, nil, -589, -589, nil, -589, -589, -589, - -589, -589, nil, -589, -589, -589, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, -589, - nil, nil, -589, -589, -589, -589, nil, -589, -252, -589, - nil, nil, nil, nil, -589, -252, -252, -252, nil, nil, - -252, -252, -252, 245, -252, nil, nil, nil, nil, nil, - nil, nil, nil, -252, -252, nil, nil, nil, nil, 255, - 256, nil, nil, nil, -252, -252, nil, -252, -252, -252, - -252, -252, nil, nil, nil, 242, nil, 248, nil, 244, - 243, nil, 240, 241, nil, nil, nil, 245, 249, 250, - 251, 252, 262, 263, 257, 258, 253, 254, nil, 238, - 239, nil, nil, 255, 256, -252, nil, nil, nil, nil, - nil, nil, -252, nil, nil, nil, nil, 271, -252, 242, - nil, 248, nil, 244, 243, nil, 240, 241, 261, 260, - 246, nil, 247, nil, nil, nil, nil, nil, nil, nil, - -252, -252, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 259, nil, nil, -252, nil, nil, -252, nil, - nil, nil, nil, -252, 5, 75, 76, 72, 9, 58, - -252, nil, nil, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 77, 28, 27, 105, 104, 106, 107, nil, - nil, 19, nil, nil, nil, nil, 605, 8, 46, 7, - 10, 109, 108, 110, 99, 57, 101, 100, 102, nil, - 103, 111, 112, nil, 95, 96, 42, 43, 41, 245, - 249, 250, 251, 252, 262, 263, 257, 258, 253, 254, - nil, 238, 239, nil, nil, 255, 256, nil, 40, nil, - nil, 33, nil, nil, 59, 60, nil, nil, 61, nil, - 35, 242, nil, 248, 45, 244, 243, nil, 240, 241, - 261, 260, 246, 20, 247, nil, nil, nil, 93, 83, - 86, 87, nil, 88, 90, 89, 91, nil, nil, nil, - nil, 84, 92, nil, 259, nil, -244, nil, nil, 63, - nil, 85, 97, 98, 298, 75, 76, 72, 9, 58, - nil, nil, nil, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 77, 28, 27, 105, 104, 106, 107, nil, - nil, 19, nil, nil, nil, nil, 605, 8, 46, 300, - 10, 109, 108, 110, 99, 57, 101, 100, 102, nil, - 103, 111, 112, nil, 95, 96, 42, 43, 41, 245, - 249, 250, 251, 252, 262, 263, 257, 258, 253, 254, - nil, 238, 239, nil, nil, 255, 256, nil, 40, nil, - nil, 302, nil, nil, 59, 60, nil, nil, 61, nil, - 35, 242, nil, 248, 45, 244, 243, nil, 240, 241, - 261, 260, 246, 20, 247, nil, nil, nil, 93, 83, - 86, 87, nil, 88, 90, 89, 91, nil, nil, nil, - nil, 84, 92, nil, 259, nil, nil, nil, nil, 63, - nil, 85, 97, 98, 5, 75, 76, 72, 9, 58, - nil, nil, nil, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 77, 28, 27, 105, 104, 106, 107, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 46, 7, - 10, 109, 108, 110, 99, 57, 101, 100, 102, nil, - 103, 111, 112, nil, 95, 96, 42, 43, 41, 245, - 249, 250, 251, 252, 262, 263, 257, 258, 253, 254, - nil, 238, 239, nil, nil, 255, 256, nil, 40, nil, - nil, 33, nil, nil, 59, 60, nil, nil, 61, nil, - 35, 242, nil, 248, 45, 244, 243, nil, 240, 241, - 261, 260, 246, 20, 247, nil, nil, nil, 93, 83, - 86, 87, nil, 88, 90, 89, 91, nil, nil, nil, - nil, 84, 92, nil, 259, nil, nil, nil, nil, 63, - nil, 85, 97, 98, 298, 75, 76, 72, 9, 58, - nil, nil, nil, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 77, 28, 27, 105, 104, 106, 107, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 46, 300, - 10, 109, 108, 110, 99, 57, 101, 100, 102, nil, - 103, 111, 112, nil, 95, 96, 42, 43, 41, 245, - 249, 250, 251, 252, 262, 263, 257, 258, 253, 254, - nil, 238, 239, nil, nil, 255, 256, nil, 40, nil, - nil, 33, nil, nil, 59, 60, nil, nil, 61, nil, - 35, 242, nil, 248, 45, 244, 243, nil, 240, 241, - 261, 260, 246, 20, 247, nil, nil, nil, 93, 83, - 86, 87, nil, 88, 90, 89, 91, nil, nil, nil, - nil, 84, 92, 225, 259, nil, nil, nil, nil, 63, - nil, 85, 97, 98, 298, 75, 76, 72, 9, 58, - nil, nil, nil, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 77, 28, 27, 105, 104, 106, 107, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 46, 300, - 10, 109, 108, 110, 99, 57, 101, 100, 102, nil, - 103, 111, 112, nil, 95, 96, 42, 43, 41, 245, - 249, 250, 251, 252, 262, 263, 257, 258, 253, 254, - nil, 238, 239, nil, nil, 255, 256, nil, 40, nil, - nil, 33, nil, nil, 59, 60, nil, nil, 61, nil, - 35, 242, nil, 248, 45, 244, 243, nil, 240, 241, - 261, 260, 246, 20, 247, nil, nil, nil, 93, 83, - 86, 87, nil, 88, 90, 89, 91, nil, nil, nil, - nil, 84, 92, nil, 259, nil, nil, nil, nil, 63, - nil, 85, 97, 98, 298, 75, 76, 72, 9, 58, - nil, nil, nil, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 77, 28, 27, 105, 104, 106, 107, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 46, 300, - 10, 109, 108, 110, 99, 57, 101, 100, 102, nil, - 103, 111, 112, nil, 95, 96, 42, 43, 41, 245, - 249, 250, 251, 252, 262, 263, 257, 258, 253, 254, - nil, 238, 239, nil, nil, 255, 256, nil, 40, nil, - nil, 302, nil, nil, 59, 60, nil, nil, 61, nil, - 35, 242, nil, 248, 45, 244, 243, nil, 240, 241, - 261, 260, 246, 20, 247, nil, nil, nil, 93, 83, - 86, 87, nil, 88, 90, 89, 91, nil, nil, nil, - nil, 84, 92, nil, 259, nil, nil, nil, nil, 63, - nil, 85, 97, 98, 298, 75, 76, 72, 9, 58, - nil, nil, nil, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 77, 28, 27, 105, 104, 106, 107, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 46, 300, - 10, 109, 108, 110, 99, 57, 101, 100, 102, nil, - 103, 111, 112, nil, 95, 96, 42, 43, 41, 245, - 249, 250, 251, 252, 262, 263, 257, 258, 253, 254, - nil, 238, 239, nil, nil, 255, 256, nil, 40, nil, - nil, 302, nil, nil, 59, 60, nil, nil, 61, nil, - 35, 242, nil, 248, 45, 244, 243, nil, 240, 241, - 261, 260, 246, 20, 247, nil, nil, nil, 93, 83, - 86, 87, nil, 88, 90, 89, 91, nil, nil, nil, - nil, 84, 92, nil, 259, nil, nil, nil, nil, 63, - nil, 85, 97, 98, 298, 75, 76, 72, 9, 58, - nil, nil, nil, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 77, 28, 27, 105, 104, 106, 107, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 46, 300, - 10, 109, 108, 110, 99, 57, 101, 100, 102, nil, - 103, 111, 112, nil, 95, 96, 42, 43, 41, 245, - 249, 250, 251, 252, 262, 263, 257, 258, 253, 254, - nil, -608, -608, nil, nil, 255, 256, nil, 40, nil, - nil, 33, nil, nil, 59, 60, nil, nil, 61, nil, - 35, 242, nil, 248, 45, 244, 243, nil, 240, 241, - 261, 260, 246, 20, 247, nil, nil, nil, 93, 83, - 86, 87, nil, 88, 90, 89, 91, nil, nil, nil, - nil, 84, 92, nil, nil, nil, nil, nil, nil, 63, - nil, 85, 97, 98, 298, 75, 76, 72, 9, 58, - nil, nil, nil, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 77, 28, 27, 105, 104, 106, 107, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 46, 300, - 10, 109, 108, 110, 99, 57, 101, 100, 102, nil, - 103, 111, 112, nil, 95, 96, 42, 43, 41, 245, - 249, 250, 251, 252, 262, 263, 257, 258, 253, 254, - nil, -608, -608, nil, nil, 255, 256, nil, 40, nil, - nil, 33, nil, nil, 59, 60, nil, nil, 61, nil, - 35, 242, nil, 248, 45, 244, 243, nil, 240, 241, - 261, 260, 246, 20, 247, nil, nil, nil, 93, 83, - 86, 87, nil, 88, 90, 89, 91, nil, nil, nil, - nil, 84, 92, nil, nil, nil, nil, nil, nil, 63, - nil, 85, 97, 98, 298, 75, 76, 72, 9, 58, - nil, nil, nil, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 77, 28, 27, 105, 104, 106, 107, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 46, 300, - 10, 109, 108, 110, 99, 57, 101, 100, 102, nil, - 103, 111, 112, nil, 95, 96, 42, 43, 41, 245, - -608, -608, -608, -608, 262, 263, nil, nil, -608, -608, - nil, nil, nil, nil, nil, 255, 256, nil, 40, nil, - nil, 33, nil, nil, 59, 60, nil, nil, 61, nil, - 35, 242, nil, 248, 45, 244, 243, nil, 240, 241, - 261, 260, 246, 20, 247, nil, nil, nil, 93, 83, - 86, 87, nil, 88, 90, 89, 91, nil, nil, nil, - nil, 84, 92, nil, nil, nil, nil, nil, nil, 63, - nil, 85, 97, 98, 298, 75, 76, 72, 9, 58, - nil, nil, nil, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 77, 28, 27, 105, 104, 106, 107, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 46, 300, - 10, 109, 108, 110, 99, 57, 101, 100, 102, nil, - 103, 111, 112, nil, 95, 96, 42, 43, 41, 245, - -608, -608, -608, -608, 262, 263, nil, nil, -608, -608, - nil, nil, nil, nil, nil, 255, 256, nil, 40, nil, - nil, 33, nil, nil, 59, 60, nil, nil, 61, nil, - 35, 242, nil, 248, 45, 244, 243, nil, 240, 241, - 261, 260, 246, 20, 247, nil, nil, nil, 93, 83, - 86, 87, nil, 88, 90, 89, 91, nil, nil, nil, - nil, 84, 92, nil, nil, nil, nil, nil, nil, 63, - nil, 85, 97, 98, 298, 75, 76, 72, 9, 58, - nil, nil, nil, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 77, 28, 27, 105, 104, 106, 107, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 46, 300, - 10, 109, 108, 110, 99, 57, 101, 100, 102, nil, - 103, 111, 112, nil, 95, 96, 42, 43, 41, 245, - -608, -608, -608, -608, 262, 263, nil, nil, -608, -608, - nil, nil, nil, nil, nil, 255, 256, nil, 40, nil, - nil, 33, nil, nil, 59, 60, nil, nil, 61, nil, - 35, 242, nil, 248, 45, 244, 243, nil, 240, 241, - 261, 260, 246, 20, 247, nil, nil, nil, 93, 83, - 86, 87, nil, 88, 90, 89, 91, nil, nil, nil, - nil, 84, 92, nil, nil, nil, nil, nil, nil, 63, - nil, 85, 97, 98, 298, 75, 76, 72, 9, 58, - nil, nil, nil, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 77, 28, 27, 105, 104, 106, 107, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 46, 300, - 10, 109, 108, 110, 99, 57, 101, 100, 102, nil, - 103, 111, 112, nil, 95, 96, 42, 43, 41, 245, - -608, -608, -608, -608, 262, 263, nil, nil, -608, -608, - nil, nil, nil, nil, nil, 255, 256, nil, 40, nil, - nil, 33, nil, nil, 59, 60, nil, nil, 61, nil, - 35, 242, nil, 248, 45, 244, 243, nil, 240, 241, - 261, 260, 246, 20, 247, nil, nil, nil, 93, 83, - 86, 87, nil, 88, 90, 89, 91, nil, nil, nil, - nil, 84, 92, nil, nil, nil, nil, nil, nil, 63, - nil, 85, 97, 98, 298, 75, 76, 72, 9, 58, - nil, nil, nil, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 77, 28, 27, 105, 104, 106, 107, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 46, 300, - 10, 109, 108, 110, 99, 57, 101, 100, 102, nil, - 103, 111, 112, nil, 95, 96, 42, 43, 41, 245, - -608, -608, -608, -608, 262, 263, nil, nil, -608, -608, - nil, nil, nil, nil, nil, 255, 256, nil, 40, nil, - nil, 33, nil, nil, 59, 60, nil, nil, 61, nil, - 35, 242, nil, 248, 45, 244, 243, nil, 240, 241, - 261, 260, 246, 20, 247, nil, nil, nil, 93, 83, - 86, 87, nil, 88, 90, 89, 91, nil, nil, nil, - nil, 84, 92, nil, nil, nil, nil, nil, nil, 63, - nil, 85, 97, 98, 298, 75, 76, 72, 9, 58, - nil, nil, nil, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 77, 28, 27, 105, 104, 106, 107, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 46, 300, - 10, 109, 108, 110, 99, 57, 101, 100, 102, nil, - 103, 111, 112, nil, 95, 96, 42, 43, 41, 245, - -608, -608, -608, -608, 262, 263, nil, nil, -608, -608, - nil, nil, nil, nil, nil, 255, 256, nil, 40, nil, - nil, 33, nil, nil, 59, 60, nil, nil, 61, nil, - 35, 242, nil, 248, 45, 244, 243, nil, 240, 241, - 261, 260, 246, 20, 247, nil, nil, nil, 93, 83, - 86, 87, nil, 88, 90, 89, 91, nil, nil, nil, - nil, 84, 92, nil, nil, nil, nil, nil, nil, 63, - nil, 85, 97, 98, 298, 75, 76, 72, 9, 58, - nil, nil, nil, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 77, 28, 27, 105, 104, 106, 107, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 46, 300, - 10, 109, 108, 110, 99, 57, 101, 100, 102, nil, - 103, 111, 112, nil, 95, 96, 42, 43, 41, 245, - 249, 250, 251, 252, 262, 263, nil, nil, 253, 254, - nil, nil, nil, nil, nil, 255, 256, nil, 40, nil, - nil, 33, nil, nil, 59, 60, nil, nil, 61, nil, - 35, 242, nil, 248, 45, 244, 243, nil, 240, 241, - 261, 260, 246, 20, 247, nil, nil, nil, 93, 83, - 86, 87, nil, 88, 90, 89, 91, nil, nil, nil, - nil, 84, 92, nil, nil, nil, nil, nil, nil, 63, - nil, 85, 97, 98, 298, 75, 76, 72, 9, 58, - nil, nil, nil, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 77, 28, 27, 105, 104, 106, 107, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 46, 300, - 10, 109, 108, 110, 99, 57, 101, 100, 102, nil, - 103, 111, 112, nil, 95, 96, 42, 43, 41, 245, - 249, 250, 251, 252, 262, 263, 257, nil, 253, 254, - nil, nil, nil, nil, nil, 255, 256, nil, 40, nil, - nil, 33, nil, nil, 59, 60, nil, nil, 61, nil, - 35, 242, nil, 248, 45, 244, 243, nil, 240, 241, - 261, 260, 246, 20, 247, nil, nil, nil, 93, 83, - 86, 87, nil, 88, 90, 89, 91, nil, nil, nil, - nil, 84, 92, nil, nil, nil, nil, nil, nil, 63, - nil, 85, 97, 98, 298, 75, 76, 72, 9, 58, - nil, nil, nil, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 77, 28, 27, 105, 104, 106, 107, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 46, 300, - 10, 109, 108, 110, 99, 57, 101, 100, 102, nil, - 103, 111, 112, nil, 95, 96, 42, 43, 41, 245, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 255, 256, nil, 40, nil, - nil, 33, nil, nil, 59, 60, nil, nil, 61, nil, - 35, 242, nil, 248, 45, 244, 243, nil, 240, 241, - nil, nil, nil, 20, nil, nil, nil, nil, 93, 83, - 86, 87, nil, 88, 90, 89, 91, nil, nil, nil, - nil, 84, 92, nil, nil, nil, nil, nil, nil, 63, - nil, 85, 97, 98, 298, 75, 76, 72, 9, 58, - nil, nil, nil, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 77, 28, 27, 105, 104, 106, 107, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 46, 300, - 10, 109, 108, 110, 99, 57, 101, 100, 102, nil, - 103, 111, 112, nil, 95, 96, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 40, nil, - nil, 33, nil, nil, 59, 60, nil, nil, 61, nil, - 35, nil, nil, nil, 45, nil, nil, nil, nil, nil, - nil, nil, nil, 20, nil, nil, nil, nil, 93, 83, - 86, 87, nil, 88, 90, 89, 91, nil, nil, nil, - nil, 84, 92, nil, nil, nil, nil, nil, nil, 63, - nil, 85, 97, 98, 298, 75, 76, 72, 9, 58, - nil, nil, nil, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 77, 28, 27, 105, 104, 106, 107, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 46, 300, - 10, 109, 108, 110, 99, 57, 101, 100, 102, nil, - 103, 111, 112, nil, 95, 96, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 40, nil, - nil, 33, nil, nil, 59, 60, nil, nil, 61, nil, - 35, nil, nil, nil, 45, nil, nil, nil, nil, nil, - nil, nil, nil, 20, nil, nil, nil, nil, 93, 83, - 86, 87, nil, 88, 90, 89, 91, nil, nil, nil, - nil, 84, 92, nil, nil, nil, nil, nil, nil, 63, - nil, 85, 97, 98, 298, 75, 76, 72, 9, 58, - nil, nil, nil, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 77, 28, 27, 105, 104, 106, 107, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 46, 300, - 10, 109, 108, 110, 99, 57, 101, 100, 102, nil, - 103, 111, 112, nil, 95, 96, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 40, nil, - nil, 33, nil, nil, 59, 60, nil, nil, 61, nil, - 35, nil, nil, nil, 45, nil, nil, nil, nil, nil, - nil, nil, nil, 20, nil, nil, nil, nil, 93, 83, - 86, 87, nil, 88, 90, 89, 91, nil, nil, nil, - nil, 84, 92, nil, nil, nil, nil, nil, nil, 63, - nil, 85, 97, 98, 298, 75, 76, 72, 9, 58, - nil, nil, nil, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 77, 28, 27, 105, 104, 106, 107, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 46, 300, - 10, 109, 108, 110, 99, 57, 101, 100, 102, nil, - 103, 111, 112, nil, 95, 96, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 40, nil, - nil, 33, nil, nil, 59, 60, nil, nil, 61, nil, - 35, nil, nil, nil, 45, nil, nil, nil, nil, nil, - nil, nil, nil, 20, nil, nil, nil, nil, 93, 83, - 86, 87, nil, 88, 90, 89, 91, nil, nil, nil, - nil, 84, 92, nil, nil, nil, nil, nil, nil, 63, - nil, 85, 97, 98, 298, 75, 76, 72, 9, 58, - nil, nil, nil, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 77, 28, 27, 105, 104, 106, 107, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 46, 300, - 10, 109, 108, 110, 99, 57, 101, 100, 102, nil, - 103, 111, 112, nil, 95, 96, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 40, nil, - nil, 33, nil, nil, 59, 60, nil, nil, 61, nil, - 35, nil, nil, nil, 45, nil, nil, nil, nil, nil, - nil, nil, nil, 20, nil, nil, nil, nil, 93, 83, - 86, 87, nil, 88, 90, 89, 91, nil, nil, nil, - nil, 84, 92, nil, nil, nil, nil, nil, nil, 63, - nil, 85, 97, 98, 298, 75, 76, 72, 9, 58, - nil, nil, nil, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 77, 28, 27, 105, 104, 106, 107, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 46, 300, - 10, 109, 108, 110, 99, 57, 101, 100, 102, nil, - 103, 111, 112, nil, 95, 96, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 40, nil, - nil, 33, nil, nil, 59, 60, nil, nil, 61, nil, - 35, nil, nil, nil, 45, nil, nil, nil, nil, nil, - nil, nil, nil, 20, nil, nil, nil, nil, 93, 83, - 86, 87, nil, 88, 90, 89, 91, nil, nil, nil, - nil, 84, 92, nil, nil, nil, nil, nil, nil, 63, - nil, 85, 97, 98, 298, 75, 76, 72, 9, 58, - nil, nil, nil, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 77, 28, 27, 105, 104, 106, 107, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 46, 300, - 10, 109, 108, 110, 99, 57, 101, 100, 102, nil, - 103, 111, 112, nil, 95, 96, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 40, nil, - nil, 33, nil, nil, 59, 60, nil, nil, 61, nil, - 35, nil, nil, nil, 45, nil, nil, nil, nil, nil, - nil, nil, nil, 20, nil, nil, nil, nil, 93, 83, - 86, 87, nil, 88, 90, 89, 91, nil, nil, nil, - nil, 84, 92, nil, nil, nil, nil, nil, nil, 63, - nil, 85, 97, 98, 298, 75, 76, 72, 9, 58, - nil, nil, nil, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 77, 28, 27, 105, 104, 106, 107, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 46, 300, - 10, 109, 108, 110, 99, 57, 101, 100, 102, nil, - 103, 111, 112, nil, 95, 96, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 40, nil, - nil, 33, nil, nil, 59, 60, nil, nil, 61, nil, - 35, nil, nil, nil, 45, nil, nil, nil, nil, nil, - nil, nil, nil, 20, nil, nil, nil, nil, 93, 83, - 86, 87, nil, 88, 90, 89, 91, nil, nil, nil, - nil, 84, 92, nil, nil, nil, nil, nil, nil, 63, - nil, 85, 97, 98, 298, 75, 76, 72, 9, 58, - nil, nil, nil, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 77, 28, 27, 105, 104, 106, 107, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 46, 300, - 10, 109, 108, 110, 99, 57, 101, 100, 102, nil, - 103, 111, 112, nil, 95, 96, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 40, nil, - nil, 33, nil, nil, 59, 60, nil, nil, 61, nil, - 35, nil, nil, nil, 45, nil, nil, nil, nil, nil, - nil, nil, nil, 20, nil, nil, nil, nil, 93, 83, - 86, 87, nil, 88, 90, 89, 91, nil, nil, nil, - nil, 84, 92, nil, nil, nil, nil, nil, nil, 63, - nil, 85, 97, 98, 298, 75, 76, 72, 9, 58, - nil, nil, nil, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 77, 28, 27, 105, 104, 106, 107, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 46, 300, - 10, 109, 108, 110, 99, 57, 101, 100, 102, nil, - 103, 111, 112, nil, 95, 96, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 40, nil, - nil, 33, nil, nil, 59, 60, nil, nil, 61, nil, - 35, nil, nil, nil, 45, nil, nil, nil, nil, nil, - nil, nil, nil, 20, nil, nil, nil, nil, 93, 83, - 86, 87, nil, 88, 90, 89, 91, nil, nil, nil, - nil, 84, 92, nil, nil, nil, nil, nil, nil, 63, - nil, 85, 97, 98, 75, 76, 72, 9, 58, nil, - nil, nil, 64, 65, nil, nil, nil, 68, nil, 66, - 67, 69, 30, 31, 73, 74, nil, nil, nil, nil, - nil, 77, 28, 27, 105, 104, 106, 107, nil, nil, - 19, nil, nil, nil, nil, nil, 8, 46, 7, 10, - 109, 108, 110, 99, 57, 101, 100, 102, nil, 103, - 111, 112, nil, 95, 96, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 40, nil, nil, - 33, nil, nil, 59, 60, nil, nil, 61, nil, 35, - nil, nil, nil, 45, nil, nil, nil, nil, nil, nil, - nil, nil, 20, nil, nil, nil, nil, 93, 83, 86, - 87, nil, 88, 90, 89, 91, nil, nil, nil, nil, - 84, 92, nil, nil, nil, 75, 76, 72, 63, 58, - 85, 97, 98, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 77, 28, 27, 105, 104, 106, 107, nil, - nil, 237, nil, nil, nil, nil, nil, nil, 46, nil, - nil, 109, 108, 110, 99, 57, 101, 100, 102, nil, - 103, 111, 112, nil, 95, 96, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 230, nil, - nil, 236, nil, nil, 59, 60, nil, nil, 61, nil, - nil, nil, nil, nil, 45, nil, nil, nil, nil, nil, - nil, nil, nil, 235, nil, nil, nil, nil, 93, 83, - 86, 87, nil, 88, 90, 89, 91, nil, nil, nil, - nil, 84, 92, nil, nil, nil, 75, 76, 72, 63, - 58, 85, 97, 98, 64, 65, nil, nil, nil, 68, - nil, 66, 67, 69, 30, 31, 73, 74, nil, nil, - nil, nil, nil, 77, 28, 27, 105, 104, 106, 107, - nil, nil, 237, nil, nil, nil, nil, nil, nil, 46, - nil, nil, 109, 108, 110, 99, 57, 101, 100, 102, - 292, 103, 111, 112, nil, 95, 96, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 230, - nil, nil, 236, nil, nil, 59, 60, nil, nil, 61, - nil, 289, nil, 287, nil, 45, nil, nil, 293, nil, - nil, nil, nil, nil, 235, nil, nil, nil, nil, 93, - 290, 86, 87, nil, 88, 90, 89, 91, nil, nil, - nil, nil, 84, 92, nil, nil, nil, 75, 76, 72, - 63, 58, 85, 97, 98, 64, 65, nil, nil, nil, - 68, nil, 66, 67, 69, 30, 31, 73, 74, nil, - nil, nil, nil, nil, 77, 28, 27, 105, 104, 106, - 107, nil, nil, 237, nil, nil, nil, nil, nil, nil, - 46, nil, nil, 109, 108, 110, 99, 57, 101, 100, - 102, 292, 103, 111, 112, nil, 95, 96, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 230, nil, nil, 236, nil, nil, 59, 60, nil, nil, - 61, nil, 289, nil, 287, nil, 45, nil, nil, 293, - nil, nil, nil, nil, nil, 235, nil, nil, nil, nil, - 93, 290, 86, 87, nil, 88, 90, 89, 91, nil, - nil, nil, nil, 84, 92, nil, nil, nil, 75, 76, - 72, 63, 58, 85, 97, 98, 64, 65, nil, nil, - nil, 68, nil, 66, 67, 69, 30, 31, 73, 74, - nil, nil, nil, nil, nil, 77, 28, 27, 105, 104, - 106, 107, nil, nil, 237, nil, nil, nil, nil, nil, - nil, 46, nil, nil, 109, 108, 110, 99, 57, 101, - 100, 102, 292, 103, 111, 112, nil, 95, 96, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 230, nil, nil, 236, nil, nil, 59, 60, nil, - nil, 61, nil, 289, nil, 287, nil, 45, nil, nil, - 293, nil, nil, nil, nil, nil, 235, nil, nil, nil, - nil, 93, 290, 86, 87, nil, 88, 90, 89, 91, - nil, nil, nil, nil, 84, 92, nil, nil, nil, 75, - 76, 72, 63, 58, 85, 97, 98, 64, 65, nil, - nil, nil, 68, nil, 66, 67, 69, 317, 318, 73, - 74, nil, nil, nil, nil, nil, 77, 314, 320, 105, - 104, 106, 107, nil, nil, 237, nil, nil, nil, nil, - nil, nil, 315, nil, nil, 109, 108, 110, 99, 57, - 101, 100, 102, nil, 103, 111, 112, nil, 95, 96, - nil, nil, 321, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 311, nil, nil, 307, nil, nil, 59, 60, - nil, nil, 61, nil, 306, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 93, 83, 86, 87, nil, 88, 90, 89, - 91, nil, nil, nil, nil, 84, 92, nil, nil, nil, - 75, 76, 72, 63, 58, 85, 97, 98, 64, 65, - nil, nil, nil, 68, nil, 66, 67, 69, 317, 318, - 73, 74, nil, nil, nil, nil, nil, 77, 314, 320, - 105, 104, 106, 107, nil, nil, 237, nil, nil, nil, - nil, nil, nil, 315, nil, nil, 109, 108, 110, 99, - 57, 101, 100, 102, nil, 103, 111, 112, nil, 95, - 96, nil, nil, 321, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 311, nil, nil, 236, nil, nil, 59, - 60, nil, nil, 61, nil, nil, 682, nil, 679, 678, - 677, 687, 680, nil, nil, nil, nil, nil, nil, nil, - nil, 690, nil, 93, 83, 86, 87, nil, 88, 90, - 89, 91, nil, nil, nil, nil, 84, 92, nil, nil, - nil, 323, nil, 685, 63, nil, 85, 97, 98, 75, - 76, 72, nil, 58, 698, 697, nil, 64, 65, 691, - nil, nil, 68, nil, 66, 67, 69, 317, 318, 73, - 74, nil, nil, nil, nil, nil, 77, 314, 320, 105, - 104, 106, 107, nil, nil, 237, nil, nil, nil, nil, - nil, nil, 46, nil, nil, 109, 108, 110, 99, 57, - 101, 100, 102, nil, 103, 111, 112, nil, 95, 96, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 230, nil, nil, 236, nil, nil, 59, 60, - nil, nil, 61, nil, nil, nil, nil, nil, 45, nil, - nil, nil, nil, nil, nil, nil, nil, 235, nil, nil, - nil, nil, 93, 83, 86, 87, nil, 88, 90, 89, - 91, nil, nil, nil, nil, 84, 92, nil, nil, nil, - 75, 76, 72, 63, 58, 85, 97, 98, 64, 65, - nil, nil, nil, 68, nil, 66, 67, 69, 317, 318, - 73, 74, nil, nil, nil, nil, nil, 77, 314, 320, - 105, 104, 106, 107, nil, nil, 237, nil, nil, nil, - nil, nil, nil, 46, nil, nil, 109, 108, 110, 99, - 57, 101, 100, 102, nil, 103, 111, 112, nil, 95, - 96, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 230, nil, nil, 236, nil, nil, 59, - 60, nil, nil, 61, nil, nil, nil, nil, nil, 45, - nil, nil, nil, nil, nil, nil, nil, nil, 235, nil, - nil, nil, nil, 93, 83, 86, 87, nil, 88, 90, - 89, 91, nil, nil, nil, nil, 84, 92, nil, nil, - nil, 75, 76, 72, 63, 58, 85, 97, 98, 64, - 65, nil, nil, nil, 68, nil, 66, 67, 69, 317, - 318, 73, 74, nil, nil, nil, nil, nil, 77, 314, - 320, 105, 104, 106, 107, nil, nil, 237, nil, nil, - nil, nil, nil, nil, 46, nil, nil, 109, 108, 110, - 99, 57, 101, 100, 102, nil, 103, 111, 112, nil, - 95, 96, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 230, nil, nil, 236, nil, nil, - 59, 60, nil, nil, 61, nil, nil, nil, nil, nil, - 45, nil, nil, nil, nil, nil, nil, nil, nil, 235, - nil, nil, nil, nil, 93, 83, 86, 87, nil, 88, - 90, 89, 91, nil, nil, nil, nil, 84, 92, nil, - nil, nil, nil, nil, nil, 63, nil, 85, 97, 98, - 75, 76, 72, 9, 58, nil, nil, nil, 64, 65, - nil, nil, nil, 68, nil, 66, 67, 69, 30, 31, - 73, 74, nil, nil, nil, nil, nil, 77, 28, 27, - 105, 104, 106, 107, nil, nil, 19, nil, nil, nil, - nil, nil, 8, 46, nil, 10, 109, 108, 110, 99, - 57, 101, 100, 102, nil, 103, 111, 112, nil, 95, - 96, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 40, nil, nil, 33, nil, nil, 59, - 60, nil, nil, 61, nil, 35, nil, nil, nil, 45, - nil, nil, nil, nil, nil, nil, nil, nil, 20, nil, - nil, nil, nil, 93, 83, 86, 87, nil, 88, 90, - 89, 91, nil, nil, nil, nil, 84, 92, nil, nil, - nil, 75, 76, 72, 63, 58, 85, 97, 98, 64, - 65, nil, nil, nil, 68, nil, 66, 67, 69, 317, - 318, 73, 74, nil, nil, nil, nil, nil, 77, 314, - 320, 105, 104, 106, 107, nil, nil, 237, nil, nil, - nil, nil, nil, nil, 46, nil, nil, 109, 108, 110, - 99, 57, 101, 100, 102, 292, 103, 111, 112, nil, - 95, 96, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 230, nil, nil, 236, nil, nil, - 59, 60, nil, nil, 61, nil, 289, nil, nil, nil, - 45, nil, nil, 293, nil, nil, nil, nil, nil, 235, - nil, nil, nil, nil, 93, 290, 86, 87, nil, 88, - 90, 89, 91, nil, nil, nil, nil, 84, 92, nil, - nil, nil, 75, 76, 72, 63, 58, 85, 97, 98, - 64, 65, nil, nil, nil, 68, nil, 66, 67, 69, - 317, 318, 73, 74, nil, nil, nil, nil, nil, 77, - 314, 320, 105, 104, 106, 107, nil, nil, 237, nil, - nil, nil, nil, nil, nil, 46, nil, nil, 109, 108, - 110, 99, 57, 101, 100, 102, 292, 103, 111, 112, - nil, 95, 96, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 230, nil, nil, 236, nil, - nil, 59, 60, nil, nil, 61, nil, nil, nil, nil, - nil, 45, nil, nil, 293, nil, nil, nil, nil, nil, - 235, nil, nil, nil, nil, 93, 290, 86, 87, nil, - 88, 90, 89, 91, nil, nil, nil, nil, 84, 92, - nil, nil, nil, 75, 76, 72, 63, 58, 85, 97, - 98, 64, 65, nil, nil, nil, 68, nil, 66, 67, - 69, 30, 31, 73, 74, nil, nil, nil, nil, nil, - 77, 28, 27, 105, 104, 106, 107, nil, nil, 19, - nil, nil, nil, nil, nil, nil, 46, nil, nil, 109, - 108, 110, 99, 57, 101, 100, 102, nil, 103, 111, - 112, nil, 95, 96, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 230, nil, nil, 236, - nil, nil, 59, 60, nil, nil, 61, nil, nil, nil, - nil, nil, 45, nil, nil, nil, nil, nil, nil, nil, - nil, 20, nil, nil, nil, nil, 93, 83, 86, 87, - nil, 88, 90, 89, 91, nil, nil, nil, nil, 84, - 92, nil, nil, nil, 75, 76, 72, 63, 58, 85, - 97, 98, 64, 65, nil, nil, nil, 68, nil, 66, - 67, 69, 30, 31, 73, 74, nil, nil, nil, nil, - nil, 77, 28, 27, 105, 104, 106, 107, nil, nil, - 19, nil, nil, nil, nil, nil, nil, 46, nil, nil, - 109, 108, 110, 99, 57, 101, 100, 102, nil, 103, - 111, 112, nil, 95, 96, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 230, nil, nil, - 236, nil, nil, 59, 60, nil, nil, 61, nil, nil, - nil, nil, nil, 45, nil, nil, nil, nil, nil, nil, - nil, nil, 20, nil, nil, nil, nil, 93, 83, 86, - 87, nil, 88, 90, 89, 91, nil, nil, nil, nil, - 84, 92, nil, nil, nil, 75, 76, 72, 63, 58, - 85, 97, 98, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 77, 28, 27, 105, 104, 106, 107, nil, - nil, 19, nil, nil, nil, nil, nil, nil, 46, nil, - nil, 109, 108, 110, 99, 57, 101, 100, 102, nil, - 103, 111, 112, nil, 95, 96, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 230, nil, - nil, 236, nil, nil, 59, 60, nil, nil, 61, nil, - nil, nil, nil, nil, 45, nil, nil, nil, nil, nil, - nil, nil, nil, 20, nil, nil, nil, nil, 93, 83, - 86, 87, nil, 88, 90, 89, 91, nil, nil, nil, - nil, 84, 92, 117, nil, nil, nil, nil, 116, 63, - nil, 85, 97, 98, 75, 76, 72, nil, 58, nil, - nil, nil, 64, 65, nil, nil, nil, 68, nil, 66, - 67, 69, 317, 318, 73, 74, nil, nil, nil, nil, - nil, 77, 314, 320, 105, 104, 106, 107, nil, nil, - 237, nil, nil, nil, nil, nil, nil, 315, nil, nil, - 109, 108, 110, 99, 57, 101, 100, 102, nil, 103, - 111, 112, nil, 95, 96, nil, nil, 321, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 357, nil, nil, - 33, nil, nil, 59, 60, nil, nil, 61, nil, 35, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 93, 83, 86, - 87, nil, 88, 90, 89, 91, nil, nil, nil, nil, - 84, 92, nil, nil, nil, 75, 76, 72, 63, 58, - 85, 97, 98, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 317, 318, 73, 74, nil, nil, nil, - nil, nil, 77, 314, 320, 105, 104, 106, 107, nil, - nil, 237, nil, nil, nil, nil, nil, nil, 315, nil, - nil, 109, 108, 110, 362, 57, 101, 100, 363, nil, - 103, 111, 112, nil, 95, 96, nil, nil, 321, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 369, nil, nil, 364, nil, - nil, 236, nil, nil, 59, 60, nil, nil, 61, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 93, 83, - 86, 87, nil, 88, 90, 89, 91, nil, nil, nil, - nil, 84, 92, nil, nil, nil, 75, 76, 72, 63, - 58, 85, 97, 98, 64, 65, nil, nil, nil, 68, - nil, 66, 67, 69, 317, 318, 73, 74, nil, nil, - nil, nil, nil, 77, 314, 320, 105, 104, 106, 107, - nil, nil, 237, nil, nil, nil, nil, nil, nil, 315, - nil, nil, 109, 108, 110, 362, 57, 101, 100, 363, - nil, 103, 111, 112, nil, 95, 96, nil, nil, 321, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 364, - nil, nil, 236, nil, nil, 59, 60, nil, nil, 61, - nil, nil, 682, nil, 679, 678, 677, 687, 680, nil, - nil, nil, nil, nil, nil, nil, nil, 690, nil, 93, - 83, 86, 87, nil, 88, 90, 89, 91, nil, nil, - nil, nil, 84, 92, nil, nil, nil, nil, nil, 685, - 63, nil, 85, 97, 98, 75, 76, 72, 9, 58, - 698, 697, nil, 64, 65, 691, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 77, 28, 27, 105, 104, 106, 107, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 46, 7, - 10, 109, 108, 110, 99, 57, 101, 100, 102, nil, - 103, 111, 112, nil, 95, 96, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 40, nil, - nil, 33, nil, nil, 59, 60, nil, nil, 61, nil, - 35, nil, nil, nil, 45, nil, nil, nil, nil, nil, - nil, nil, nil, 20, nil, nil, nil, nil, 93, 83, - 86, 87, nil, 88, 90, 89, 91, nil, nil, nil, - nil, 84, 92, nil, nil, nil, nil, nil, 397, 63, - nil, 85, 97, 98, 75, 76, 72, nil, 58, nil, - nil, nil, 64, 65, nil, nil, nil, 68, nil, 66, - 67, 69, 30, 31, 73, 74, nil, nil, nil, nil, - nil, 77, 28, 27, 105, 104, 106, 107, nil, nil, - 19, nil, nil, nil, nil, nil, nil, 46, nil, nil, - 109, 108, 110, 99, 57, 101, 100, 102, nil, 103, - 111, 112, nil, 95, 96, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 230, nil, nil, - 236, nil, nil, 59, 60, nil, nil, 61, nil, nil, - nil, nil, nil, 45, nil, nil, nil, nil, nil, nil, - nil, nil, 20, nil, nil, nil, nil, 93, 83, 86, - 87, nil, 88, 90, 89, 91, nil, nil, nil, nil, - 84, 92, nil, nil, nil, 75, 76, 72, 63, 58, - 85, 97, 98, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 77, 28, 27, 105, 104, 106, 107, nil, - nil, 19, nil, nil, nil, nil, nil, nil, 46, nil, - nil, 109, 108, 110, 99, 57, 101, 100, 102, nil, - 103, 111, 112, nil, 95, 96, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 230, nil, - nil, 236, nil, nil, 59, 60, nil, nil, 61, nil, - nil, nil, nil, nil, 45, nil, nil, nil, nil, nil, - nil, nil, nil, 20, nil, nil, nil, nil, 93, 83, - 86, 87, nil, 88, 90, 89, 91, nil, nil, nil, - nil, 84, 92, nil, nil, nil, 75, 76, 72, 63, - 58, 85, 97, 98, 64, 65, nil, nil, nil, 68, - nil, 66, 67, 69, 30, 31, 73, 74, nil, nil, - nil, nil, nil, 77, 28, 27, 105, 104, 106, 107, - nil, nil, 19, nil, nil, nil, nil, nil, nil, 46, - nil, nil, 109, 108, 110, 99, 57, 101, 100, 102, - nil, 103, 111, 112, nil, 95, 96, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 230, - nil, nil, 236, nil, nil, 59, 60, nil, nil, 61, - nil, nil, nil, nil, nil, 45, nil, nil, nil, nil, - nil, nil, nil, nil, 20, nil, nil, nil, nil, 93, - 83, 86, 87, nil, 88, 90, 89, 91, nil, nil, - nil, nil, 84, 92, nil, nil, nil, 75, 76, 72, - 63, 58, 85, 97, 98, 64, 65, nil, nil, nil, - 68, nil, 66, 67, 69, 30, 31, 73, 74, nil, - nil, nil, nil, nil, 77, 28, 27, 105, 104, 106, - 107, nil, nil, 19, nil, nil, nil, nil, nil, nil, - 46, nil, nil, 109, 108, 110, 99, 57, 101, 100, - 102, nil, 103, 111, 112, nil, 95, 96, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 230, nil, nil, 236, nil, nil, 59, 60, nil, nil, - 61, nil, nil, nil, nil, nil, 45, nil, nil, nil, - nil, nil, nil, nil, nil, 20, nil, nil, nil, nil, - 93, 83, 86, 87, nil, 88, 90, 89, 91, nil, - nil, nil, nil, 84, 92, nil, nil, nil, nil, nil, - nil, 63, nil, 85, 97, 98, 75, 76, 72, 9, - 58, nil, nil, nil, 64, 65, nil, nil, nil, 68, - nil, 66, 67, 69, 30, 31, 73, 74, nil, nil, - nil, nil, nil, 77, 28, 27, 105, 104, 106, 107, - nil, nil, 19, nil, nil, nil, nil, nil, 8, 46, - nil, 10, 109, 108, 110, 99, 57, 101, 100, 102, - nil, 103, 111, 112, nil, 95, 96, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 40, - nil, nil, 33, nil, nil, 59, 60, nil, nil, 61, - nil, 35, nil, nil, nil, 45, nil, nil, nil, nil, - nil, nil, nil, nil, 20, nil, nil, nil, nil, 93, - 83, 86, 87, nil, 88, 90, 89, 91, nil, nil, - nil, nil, 84, 92, nil, nil, nil, 75, 76, 72, - 63, 58, 85, 97, 98, 64, 65, nil, nil, nil, - 68, nil, 66, 67, 69, 30, 31, 73, 74, nil, - nil, nil, nil, nil, 77, 28, 27, 105, 104, 106, - 107, nil, nil, 237, nil, nil, nil, nil, nil, nil, - 46, nil, nil, 109, 108, 110, 99, 57, 101, 100, - 102, nil, 103, 111, 112, nil, 95, 96, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 230, nil, nil, 236, nil, nil, 59, 60, nil, nil, - 61, nil, 413, nil, nil, nil, 45, nil, nil, nil, - nil, nil, nil, nil, nil, 235, nil, nil, nil, nil, - 93, 83, 86, 87, nil, 88, 90, 89, 91, nil, - nil, nil, nil, 84, 92, nil, nil, nil, 75, 76, - 72, 63, 58, 85, 97, 98, 64, 65, nil, nil, - nil, 68, nil, 66, 67, 69, 30, 31, 73, 74, - nil, nil, nil, nil, nil, 77, 28, 27, 105, 104, - 106, 107, nil, nil, 237, nil, nil, nil, nil, nil, - nil, 46, nil, nil, 109, 108, 110, 99, 57, 101, - 100, 102, nil, 103, 111, 112, nil, 95, 96, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 230, nil, nil, 236, nil, nil, 59, 60, nil, - nil, 61, nil, 413, nil, nil, nil, 45, nil, nil, - nil, nil, nil, nil, nil, nil, 235, nil, nil, nil, - nil, 93, 83, 86, 87, nil, 88, 90, 89, 91, - nil, nil, nil, nil, 84, 92, nil, nil, nil, 75, - 76, 72, 63, 58, 85, 97, 98, 64, 65, nil, - nil, nil, 68, nil, 66, 67, 69, 30, 31, 73, - 74, nil, nil, nil, nil, nil, 77, 28, 27, 105, - 104, 106, 107, nil, nil, 19, nil, nil, nil, nil, - nil, nil, 46, nil, nil, 109, 108, 110, 99, 57, - 101, 100, 102, nil, 103, 111, 112, nil, 95, 96, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 230, nil, nil, 236, nil, nil, 59, 60, - nil, nil, 61, nil, nil, nil, nil, nil, 45, nil, - nil, nil, nil, nil, nil, nil, nil, 20, nil, nil, - nil, nil, 93, 83, 86, 87, nil, 88, 90, 89, - 91, nil, nil, nil, nil, 84, 92, nil, nil, nil, - 75, 76, 72, 63, 58, 85, 97, 98, 64, 65, - nil, nil, nil, 68, nil, 66, 67, 69, 30, 31, - 73, 74, nil, nil, nil, nil, nil, 77, 28, 27, - 105, 104, 106, 107, nil, nil, 19, nil, nil, nil, - nil, nil, nil, 46, nil, nil, 109, 108, 110, 99, - 57, 101, 100, 102, nil, 103, 111, 112, nil, 95, - 96, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 230, nil, nil, 236, nil, nil, 59, - 60, nil, nil, 61, nil, nil, nil, nil, nil, 45, - nil, nil, nil, nil, nil, nil, nil, nil, 20, nil, - nil, nil, nil, 93, 83, 86, 87, nil, 88, 90, - 89, 91, nil, nil, nil, nil, 84, 92, nil, nil, - nil, 75, 76, 72, 63, 58, 85, 97, 98, 64, - 65, nil, nil, nil, 68, nil, 66, 67, 69, 30, - 31, 73, 74, nil, nil, nil, nil, nil, 77, 28, - 27, 105, 104, 106, 107, nil, nil, 237, nil, nil, - nil, nil, nil, nil, 46, nil, nil, 109, 108, 110, - 99, 57, 101, 100, 102, nil, 103, 111, 112, nil, - 95, 96, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 230, nil, nil, 236, nil, nil, - 59, 60, nil, nil, 61, nil, nil, nil, nil, nil, - 45, nil, nil, nil, nil, nil, nil, nil, nil, 235, - nil, nil, nil, nil, 93, 83, 86, 87, nil, 88, - 90, 89, 91, nil, nil, nil, nil, 84, 92, nil, - nil, nil, 75, 76, 72, 63, 58, 85, 97, 98, - 64, 65, nil, nil, nil, 68, nil, 66, 67, 69, - 30, 31, 73, 74, nil, nil, nil, nil, nil, 77, - 28, 27, 105, 104, 106, 107, nil, nil, 237, nil, - nil, nil, nil, nil, nil, 46, nil, nil, 109, 108, - 110, 99, 57, 101, 100, 102, 292, 103, 111, 112, - nil, 95, 96, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 230, nil, nil, 236, nil, - nil, 59, 60, nil, nil, 61, nil, 289, nil, 287, - nil, 45, nil, nil, 293, nil, nil, nil, nil, nil, - 235, nil, nil, nil, nil, 93, 290, 86, 87, nil, - 88, 90, 89, 91, nil, nil, nil, nil, 84, 92, - nil, nil, nil, 75, 76, 72, 63, 58, 85, 97, - 98, 64, 65, nil, nil, nil, 68, nil, 66, 67, - 69, 30, 31, 73, 74, nil, nil, nil, nil, nil, - 77, 28, 27, 105, 104, 106, 107, nil, nil, 237, - nil, nil, nil, nil, nil, nil, 46, nil, nil, 109, - 108, 110, 99, 57, 101, 100, 102, nil, 103, 111, - 112, nil, 95, 96, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 230, nil, nil, 236, - nil, nil, 59, 60, nil, nil, 61, nil, nil, nil, - nil, nil, 45, nil, nil, nil, nil, nil, nil, nil, - nil, 235, nil, nil, nil, nil, 93, 83, 86, 87, - nil, 88, 90, 89, 91, nil, nil, nil, nil, 84, - 92, nil, nil, nil, 75, 76, 72, 63, 58, 85, - 97, 98, 64, 65, nil, nil, nil, 68, nil, 66, - 67, 69, 30, 31, 73, 74, nil, nil, nil, nil, - nil, 77, 28, 27, 105, 104, 106, 107, nil, nil, - 19, nil, nil, nil, nil, nil, nil, 46, nil, nil, - 109, 108, 110, 99, 57, 101, 100, 102, nil, 103, - 111, 112, nil, 95, 96, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 230, nil, nil, - 236, nil, nil, 59, 60, nil, nil, 61, nil, nil, - nil, nil, nil, 45, nil, nil, nil, nil, nil, nil, - nil, nil, 20, nil, nil, nil, nil, 93, 83, 86, - 87, nil, 88, 90, 89, 91, nil, nil, nil, nil, - 84, 92, nil, nil, nil, 75, 76, 72, 63, 58, - 85, 97, 98, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 77, 28, 27, 105, 104, 106, 107, nil, - nil, 19, nil, nil, nil, nil, nil, nil, 46, nil, - nil, 109, 108, 110, 99, 57, 101, 100, 102, nil, - 103, 111, 112, nil, 95, 96, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 230, nil, - nil, 236, nil, nil, 59, 60, nil, nil, 61, nil, - nil, nil, nil, nil, 45, nil, nil, nil, nil, nil, - nil, nil, nil, 20, nil, nil, nil, nil, 93, 83, - 86, 87, nil, 88, 90, 89, 91, nil, nil, nil, - nil, 84, 92, 225, nil, nil, 75, 76, 72, 63, - 58, 85, 97, 98, 64, 65, nil, nil, nil, 68, - nil, 66, 67, 69, 317, 318, 73, 74, nil, nil, - nil, nil, nil, 77, 314, 320, 105, 104, 106, 107, - nil, nil, 237, nil, nil, nil, nil, nil, nil, 46, - nil, nil, 109, 108, 110, 99, 57, 101, 100, 102, - nil, 103, 111, 112, nil, 95, 96, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 230, - nil, nil, 236, nil, nil, 59, 60, nil, nil, 61, - nil, nil, nil, nil, nil, 45, nil, nil, nil, nil, - nil, nil, nil, nil, 235, nil, nil, nil, nil, 93, - 83, 86, 87, nil, 88, 90, 89, 91, nil, nil, - nil, nil, 84, 92, nil, nil, nil, 75, 76, 72, - 63, 58, 85, 97, 98, 64, 65, nil, nil, nil, - 68, nil, 66, 67, 69, 317, 318, 73, 74, nil, - nil, nil, nil, nil, 77, 314, 320, 105, 104, 106, - 107, nil, nil, 237, nil, nil, nil, nil, nil, nil, - 46, nil, nil, 109, 108, 110, 99, 57, 101, 100, - 102, nil, 103, 111, 112, nil, 95, 96, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 230, nil, nil, 236, nil, nil, 59, 60, nil, nil, - 61, nil, nil, nil, nil, nil, 45, nil, nil, nil, - nil, nil, nil, nil, nil, 235, nil, nil, nil, nil, - 93, 83, 86, 87, nil, 88, 90, 89, 91, nil, - nil, nil, nil, 84, 92, nil, nil, nil, 75, 76, - 72, 63, 58, 85, 97, 98, 64, 65, nil, nil, - nil, 68, nil, 66, 67, 69, 317, 318, 73, 74, - nil, nil, nil, nil, nil, 77, 314, 320, 105, 104, - 106, 107, nil, nil, 237, nil, nil, nil, nil, nil, - nil, 46, nil, nil, 109, 108, 110, 99, 57, 101, - 100, 102, nil, 103, 111, 112, nil, 95, 96, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 230, nil, nil, 236, nil, nil, 59, 60, nil, - nil, 61, nil, nil, nil, nil, nil, 45, nil, nil, - nil, nil, nil, nil, nil, nil, 235, nil, nil, nil, - nil, 93, 83, 86, 87, nil, 88, 90, 89, 91, - nil, nil, nil, nil, 84, 92, nil, nil, nil, 75, - 76, 72, 63, 58, 85, 97, 98, 64, 65, nil, - nil, nil, 68, nil, 66, 67, 69, 317, 318, 73, - 74, nil, nil, nil, nil, nil, 77, 314, 320, 105, - 104, 106, 107, nil, nil, 237, nil, nil, nil, nil, - nil, nil, 46, nil, nil, 109, 108, 110, 99, 57, - 101, 100, 102, nil, 103, 111, 112, nil, 95, 96, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 230, nil, nil, 236, nil, nil, 59, 60, - nil, nil, 61, nil, nil, nil, nil, nil, 45, nil, - nil, nil, nil, nil, nil, nil, nil, 235, nil, nil, - nil, nil, 93, 83, 86, 87, nil, 88, 90, 89, - 91, nil, nil, nil, nil, 84, 92, nil, nil, nil, - 75, 76, 72, 63, 58, 85, 97, 98, 64, 65, - nil, nil, nil, 68, nil, 66, 67, 69, 317, 318, - 73, 74, nil, nil, nil, nil, nil, 77, 314, 320, - 105, 104, 106, 107, nil, nil, 237, nil, nil, nil, - nil, nil, nil, 46, nil, nil, 109, 108, 110, 99, - 57, 101, 100, 102, nil, 103, 111, 112, nil, 95, - 96, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 230, nil, nil, 236, nil, nil, 59, - 60, nil, nil, 61, nil, nil, nil, nil, nil, 45, - nil, nil, nil, nil, nil, nil, nil, nil, 235, nil, - nil, nil, nil, 93, 83, 86, 87, nil, 88, 90, - 89, 91, nil, nil, nil, nil, 84, 92, nil, nil, - nil, 75, 76, 72, 63, 58, 85, 97, 98, 64, - 65, nil, nil, nil, 68, nil, 66, 67, 69, 317, - 318, 73, 74, nil, nil, nil, nil, nil, 77, 314, - 320, 105, 104, 106, 107, nil, nil, 237, nil, nil, - nil, nil, nil, nil, 46, nil, nil, 109, 108, 110, - 99, 57, 101, 100, 102, nil, 103, 111, 112, nil, - 95, 96, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 230, nil, nil, 236, nil, nil, - 59, 60, nil, nil, 61, nil, nil, nil, nil, nil, - 45, nil, nil, nil, nil, nil, nil, nil, nil, 235, - nil, nil, nil, nil, 93, 83, 86, 87, nil, 88, - 90, 89, 91, nil, nil, nil, nil, 84, 92, nil, - nil, nil, 75, 76, 72, 63, 58, 85, 97, 98, - 64, 65, nil, nil, nil, 68, nil, 66, 67, 69, - 317, 318, 73, 74, nil, nil, nil, nil, nil, 77, - 314, 320, 105, 104, 106, 107, nil, nil, 237, nil, - nil, nil, nil, nil, nil, 46, nil, nil, 109, 108, - 110, 99, 57, 101, 100, 102, nil, 103, 111, 112, - nil, 95, 96, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 230, nil, nil, 236, nil, - nil, 59, 60, nil, nil, 61, nil, nil, nil, nil, - nil, 45, nil, nil, nil, nil, nil, nil, nil, nil, - 235, nil, nil, nil, nil, 93, 83, 86, 87, nil, - 88, 90, 89, 91, nil, nil, nil, nil, 84, 92, - nil, nil, nil, 75, 76, 72, 63, 58, 85, 97, - 98, 64, 65, nil, nil, nil, 68, nil, 66, 67, - 69, 317, 318, 73, 74, nil, nil, nil, nil, nil, - 77, 314, 320, 105, 104, 106, 107, nil, nil, 237, - nil, nil, nil, nil, nil, nil, 46, nil, nil, 109, - 108, 110, 99, 57, 101, 100, 102, nil, 103, 111, - 112, nil, 95, 96, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 230, nil, nil, 236, - nil, nil, 59, 60, nil, nil, 61, nil, nil, nil, - nil, nil, 45, nil, nil, nil, nil, nil, nil, nil, - nil, 235, nil, nil, nil, nil, 93, 83, 86, 87, - nil, 88, 90, 89, 91, nil, nil, nil, nil, 84, - 92, nil, nil, nil, 75, 76, 72, 63, 58, 85, - 97, 98, 64, 65, nil, nil, nil, 68, nil, 66, - 67, 69, 317, 318, 73, 74, nil, nil, nil, nil, - nil, 77, 314, 320, 105, 104, 106, 107, nil, nil, - 237, nil, nil, nil, nil, nil, nil, 46, nil, nil, - 109, 108, 110, 99, 57, 101, 100, 102, nil, 103, - 111, 112, nil, 95, 96, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 230, nil, nil, - 236, nil, nil, 59, 60, nil, nil, 61, nil, nil, - nil, nil, nil, 45, nil, nil, nil, nil, nil, nil, - nil, nil, 235, nil, nil, nil, nil, 93, 83, 86, - 87, nil, 88, 90, 89, 91, nil, nil, nil, nil, - 84, 92, nil, nil, nil, 75, 76, 72, 63, 58, - 85, 97, 98, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 317, 318, 73, 74, nil, nil, nil, - nil, nil, 77, 314, 320, 105, 104, 106, 107, nil, - nil, 237, nil, nil, nil, nil, nil, nil, 46, nil, - nil, 109, 108, 110, 99, 57, 101, 100, 102, nil, - 103, 111, 112, nil, 95, 96, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 230, nil, - nil, 236, nil, nil, 59, 60, nil, nil, 61, nil, - nil, nil, nil, nil, 45, nil, nil, nil, nil, nil, - nil, nil, nil, 235, nil, nil, nil, nil, 93, 83, - 86, 87, nil, 88, 90, 89, 91, nil, nil, nil, - nil, 84, 92, nil, nil, nil, 75, 76, 72, 63, - 58, 85, 97, 98, 64, 65, nil, nil, nil, 68, - nil, 66, 67, 69, 317, 318, 73, 74, nil, nil, - nil, nil, nil, 77, 314, 320, 105, 104, 106, 107, - nil, nil, 237, nil, nil, nil, nil, nil, nil, 46, - nil, nil, 109, 108, 110, 99, 57, 101, 100, 102, - nil, 103, 111, 112, nil, 95, 96, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 230, - nil, nil, 236, nil, nil, 59, 60, nil, nil, 61, - nil, nil, nil, nil, nil, 45, nil, nil, nil, nil, - nil, nil, nil, nil, 235, nil, nil, nil, nil, 93, - 83, 86, 87, nil, 88, 90, 89, 91, nil, nil, - nil, nil, 84, 92, nil, nil, nil, 75, 76, 72, - 63, 58, 85, 97, 98, 64, 65, nil, nil, nil, - 68, nil, 66, 67, 69, 317, 318, 73, 74, nil, - nil, nil, nil, nil, 77, 314, 320, 105, 104, 106, - 107, nil, nil, 237, nil, nil, nil, nil, nil, nil, - 46, nil, nil, 109, 108, 110, 99, 57, 101, 100, - 102, nil, 103, 111, 112, nil, 95, 96, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 230, nil, nil, 236, nil, nil, 59, 60, nil, nil, - 61, nil, nil, nil, nil, nil, 45, nil, nil, nil, - nil, nil, nil, nil, nil, 235, nil, nil, nil, nil, - 93, 83, 86, 87, nil, 88, 90, 89, 91, nil, - nil, nil, nil, 84, 92, nil, nil, nil, 75, 76, - 72, 63, 58, 85, 97, 98, 64, 65, nil, nil, - nil, 68, nil, 66, 67, 69, 317, 318, 73, 74, - nil, nil, nil, nil, nil, 77, 314, 320, 105, 104, - 106, 107, nil, nil, 237, nil, nil, nil, nil, nil, - nil, 46, nil, nil, 109, 108, 110, 99, 57, 101, - 100, 102, nil, 103, 111, 112, nil, 95, 96, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 230, nil, nil, 236, nil, nil, 59, 60, nil, - nil, 61, nil, nil, nil, nil, nil, 45, nil, nil, - nil, nil, nil, nil, nil, nil, 235, nil, nil, nil, - nil, 93, 83, 86, 87, nil, 88, 90, 89, 91, - nil, nil, nil, nil, 84, 92, nil, nil, nil, 75, - 76, 72, 63, 58, 85, 97, 98, 64, 65, nil, - nil, nil, 68, nil, 66, 67, 69, 317, 318, 73, - 74, nil, nil, nil, nil, nil, 77, 314, 320, 105, - 104, 106, 107, nil, nil, 237, nil, nil, nil, nil, - nil, nil, 46, nil, nil, 109, 108, 110, 99, 57, - 101, 100, 102, nil, 103, 111, 112, nil, 95, 96, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 230, nil, nil, 236, nil, nil, 59, 60, - nil, nil, 61, nil, nil, nil, nil, nil, 45, nil, - nil, nil, nil, nil, nil, nil, nil, 235, nil, nil, - nil, nil, 93, 83, 86, 87, nil, 88, 90, 89, - 91, nil, nil, nil, nil, 84, 92, nil, nil, nil, - 75, 76, 72, 63, 58, 85, 97, 98, 64, 65, - nil, nil, nil, 68, nil, 66, 67, 69, 317, 318, - 73, 74, nil, nil, nil, nil, nil, 77, 314, 320, - 105, 104, 106, 107, nil, nil, 237, nil, nil, nil, - nil, nil, nil, 46, nil, nil, 109, 108, 110, 99, - 57, 101, 100, 102, nil, 103, 111, 112, nil, 95, - 96, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 230, nil, nil, 236, nil, nil, 59, - 60, nil, nil, 61, nil, nil, nil, nil, nil, 45, - nil, nil, nil, nil, nil, nil, nil, nil, 235, nil, - nil, nil, nil, 93, 83, 86, 87, nil, 88, 90, - 89, 91, nil, nil, nil, nil, 84, 92, nil, nil, - nil, 75, 76, 72, 63, 58, 85, 97, 98, 64, - 65, nil, nil, nil, 68, nil, 66, 67, 69, 317, - 318, 73, 74, nil, nil, nil, nil, nil, 77, 314, - 320, 105, 104, 106, 107, nil, nil, 237, nil, nil, - nil, nil, nil, nil, 46, nil, nil, 109, 108, 110, - 99, 57, 101, 100, 102, nil, 103, 111, 112, nil, - 95, 96, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 230, nil, nil, 236, nil, nil, - 59, 60, nil, nil, 61, nil, nil, nil, nil, nil, - 45, nil, nil, nil, nil, nil, nil, nil, nil, 235, - nil, nil, nil, nil, 93, 83, 86, 87, nil, 88, - 90, 89, 91, nil, nil, nil, nil, 84, 92, nil, - nil, nil, 75, 76, 72, 63, 58, 85, 97, 98, - 64, 65, nil, nil, nil, 68, nil, 66, 67, 69, - 317, 318, 73, 74, nil, nil, nil, nil, nil, 77, - 314, 320, 105, 104, 106, 107, nil, nil, 237, nil, - nil, nil, nil, nil, nil, 46, nil, nil, 109, 108, - 110, 99, 57, 101, 100, 102, nil, 103, 111, 112, - nil, 95, 96, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 230, nil, nil, 236, nil, - nil, 59, 60, nil, nil, 61, nil, nil, nil, nil, - nil, 45, nil, nil, nil, nil, nil, nil, nil, nil, - 235, nil, nil, nil, nil, 93, 83, 86, 87, nil, - 88, 90, 89, 91, nil, nil, nil, nil, 84, 92, - nil, nil, nil, 75, 76, 72, 63, 58, 85, 97, - 98, 64, 65, nil, nil, nil, 68, nil, 66, 67, - 69, 317, 318, 73, 74, nil, nil, nil, nil, nil, - 77, 314, 320, 105, 104, 106, 107, nil, nil, 237, - nil, nil, nil, nil, nil, nil, 46, nil, nil, 109, - 108, 110, 99, 57, 101, 100, 102, nil, 103, 111, - 112, nil, 95, 96, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 230, nil, nil, 236, - nil, nil, 59, 60, nil, nil, 61, nil, nil, nil, - nil, nil, 45, nil, nil, nil, nil, nil, nil, nil, - nil, 235, nil, nil, nil, nil, 93, 83, 86, 87, - nil, 88, 90, 89, 91, nil, nil, nil, nil, 84, - 92, nil, nil, nil, 75, 76, 72, 63, 58, 85, - 97, 98, 64, 65, nil, nil, nil, 68, nil, 66, - 67, 69, 317, 318, 73, 74, nil, nil, nil, nil, - nil, 77, 314, 320, 105, 104, 106, 107, nil, nil, - 237, nil, nil, nil, nil, nil, nil, 46, nil, nil, - 109, 108, 110, 99, 57, 101, 100, 102, nil, 103, - 111, 112, nil, 95, 96, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 230, nil, nil, - 236, nil, nil, 59, 60, nil, nil, 61, nil, nil, - nil, nil, nil, 45, nil, nil, nil, nil, nil, nil, - nil, nil, 235, nil, nil, nil, nil, 93, 83, 86, - 87, nil, 88, 90, 89, 91, nil, nil, nil, nil, - 84, 92, nil, nil, nil, 75, 76, 72, 63, 58, - 85, 97, 98, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 317, 318, 73, 74, nil, nil, nil, - nil, nil, 77, 314, 320, 105, 104, 106, 107, nil, - nil, 237, nil, nil, nil, nil, nil, nil, 46, nil, - nil, 109, 108, 110, 99, 57, 101, 100, 102, nil, - 103, 111, 112, nil, 95, 96, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 230, nil, - nil, 236, nil, nil, 59, 60, nil, nil, 61, nil, - nil, nil, nil, nil, 45, nil, nil, nil, nil, nil, - nil, nil, nil, 235, nil, nil, nil, nil, 93, 83, - 86, 87, nil, 88, 90, 89, 91, nil, nil, nil, - nil, 84, 92, nil, nil, nil, 75, 76, 72, 63, - 58, 85, 97, 98, 64, 65, nil, nil, nil, 68, - nil, 66, 67, 69, 317, 318, 73, 74, nil, nil, - nil, nil, nil, 77, 314, 320, 105, 104, 106, 107, - nil, nil, 237, nil, nil, nil, nil, nil, nil, 46, - nil, nil, 109, 108, 110, 99, 57, 101, 100, 102, - nil, 103, 111, 112, nil, 95, 96, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 230, - nil, nil, 236, nil, nil, 59, 60, nil, nil, 61, - nil, nil, nil, nil, nil, 45, nil, nil, nil, nil, - nil, nil, nil, nil, 235, nil, nil, nil, nil, 93, - 83, 86, 87, nil, 88, 90, 89, 91, nil, nil, - nil, nil, 84, 92, nil, nil, nil, 75, 76, 72, - 63, 58, 85, 97, 98, 64, 65, nil, nil, nil, - 68, nil, 66, 67, 69, 317, 318, 73, 74, nil, - nil, nil, nil, nil, 77, 314, 320, 105, 104, 106, - 107, nil, nil, 237, nil, nil, nil, nil, nil, nil, - 46, nil, nil, 109, 108, 110, 99, 57, 101, 100, - 102, nil, 103, 111, 112, nil, 95, 96, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 230, nil, nil, 236, nil, nil, 59, 60, nil, nil, - 61, nil, nil, nil, nil, nil, 45, nil, nil, nil, - nil, nil, nil, nil, nil, 235, nil, nil, nil, nil, - 93, 83, 86, 87, nil, 88, 90, 89, 91, nil, - nil, nil, nil, 84, 92, nil, nil, nil, 75, 76, - 72, 63, 58, 85, 97, 98, 64, 65, nil, nil, - nil, 68, nil, 66, 67, 69, 317, 318, 73, 74, - nil, nil, nil, nil, nil, 77, 314, 320, 105, 104, - 106, 107, nil, nil, 237, nil, nil, nil, nil, nil, - nil, 46, nil, nil, 109, 108, 110, 99, 57, 101, - 100, 102, nil, 103, 111, 112, nil, 95, 96, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 230, nil, nil, 236, nil, nil, 59, 60, nil, - nil, 61, nil, nil, nil, nil, nil, 45, nil, nil, - nil, nil, nil, nil, nil, nil, 235, nil, nil, nil, - nil, 93, 83, 86, 87, nil, 88, 90, 89, 91, - nil, nil, nil, nil, 84, 92, nil, nil, nil, 75, - 76, 72, 63, 58, 85, 97, 98, 64, 65, nil, - nil, nil, 68, nil, 66, 67, 69, 317, 318, 73, - 74, nil, nil, nil, nil, nil, 77, 314, 320, 105, - 104, 106, 107, nil, nil, 237, nil, nil, nil, nil, - nil, nil, 46, nil, nil, 109, 108, 110, 99, 57, - 101, 100, 102, nil, 103, 111, 112, nil, 95, 96, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 230, nil, nil, 236, nil, nil, 59, 60, - nil, nil, 61, nil, nil, nil, nil, nil, 45, nil, - nil, nil, nil, nil, nil, nil, nil, 235, nil, nil, - nil, nil, 93, 83, 86, 87, nil, 88, 90, 89, - 91, nil, nil, nil, nil, 84, 92, nil, nil, nil, - 75, 76, 72, 63, 58, 85, 97, 98, 64, 65, - nil, nil, nil, 68, nil, 66, 67, 69, 30, 31, - 73, 74, nil, nil, nil, nil, nil, 77, 28, 27, - 105, 104, 106, 107, nil, nil, 237, nil, nil, nil, - nil, nil, nil, 46, nil, nil, 109, 108, 110, 99, - 57, 101, 100, 102, 292, 103, 111, 112, nil, 95, - 96, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 230, nil, nil, 236, nil, nil, 59, - 60, nil, nil, 61, nil, 289, nil, 287, nil, 45, - nil, nil, 293, nil, nil, nil, nil, nil, 235, nil, - nil, nil, nil, 93, 290, 86, 87, nil, 88, 90, - 89, 91, nil, nil, nil, nil, 84, 92, nil, nil, - nil, 75, 76, 72, 63, 58, 85, 97, 98, 64, - 65, nil, nil, nil, 68, nil, 66, 67, 69, 30, - 31, 73, 74, nil, nil, nil, nil, nil, 77, 28, - 27, 105, 104, 106, 107, nil, nil, 237, nil, nil, - nil, nil, nil, nil, 46, nil, nil, 109, 108, 110, - 99, 57, 101, 100, 102, 292, 103, 111, 112, nil, - 95, 96, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 230, nil, nil, 236, nil, nil, - 59, 60, nil, nil, 61, nil, 289, nil, 287, nil, - 45, nil, nil, 293, nil, nil, nil, nil, nil, 235, - nil, nil, nil, nil, 93, 290, 86, 87, nil, 88, - 90, 89, 91, nil, nil, nil, nil, 84, 92, nil, - nil, nil, 75, 76, 72, 63, 58, 85, 97, 98, - 64, 65, nil, nil, nil, 68, nil, 66, 67, 69, - 30, 31, 73, 74, nil, nil, nil, nil, nil, 77, - 28, 27, 105, 104, 106, 107, nil, nil, 237, nil, - nil, nil, nil, nil, nil, 46, nil, nil, 109, 108, - 110, 99, 57, 101, 100, 102, 292, 103, 111, 112, - nil, 95, 96, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 230, nil, nil, 236, nil, - nil, 59, 60, nil, nil, 61, nil, 289, nil, 287, - nil, 45, nil, nil, 293, nil, nil, nil, nil, nil, - 235, nil, nil, nil, nil, 93, 290, 86, 87, nil, - 88, 90, 89, 91, nil, nil, nil, nil, 84, 92, - 225, nil, nil, 75, 76, 72, 63, 58, 85, 97, - 98, 64, 65, nil, nil, nil, 68, nil, 66, 67, - 69, 317, 318, 73, 74, nil, nil, nil, nil, nil, - 77, 314, 320, 105, 104, 106, 107, nil, nil, 237, - nil, nil, nil, nil, nil, nil, 46, nil, nil, 109, - 108, 110, 99, 57, 101, 100, 102, nil, 103, 111, - 112, nil, 95, 96, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 230, nil, nil, 236, - nil, nil, 59, 60, nil, nil, 61, nil, nil, nil, - nil, nil, 45, nil, nil, nil, nil, nil, nil, nil, - nil, 235, nil, nil, nil, nil, 93, 83, 86, 87, - nil, 88, 90, 89, 91, nil, nil, nil, nil, 84, - 92, nil, nil, nil, 75, 76, 72, 63, 58, 85, - 97, 98, 64, 65, nil, nil, nil, 68, nil, 66, - 67, 69, 317, 318, 73, 74, nil, nil, nil, nil, - nil, 77, 314, 320, 105, 104, 106, 107, nil, nil, - 237, nil, nil, nil, nil, nil, nil, 46, nil, nil, - 109, 108, 110, 99, 57, 101, 100, 102, nil, 103, - 111, 112, nil, 95, 96, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 230, nil, nil, - 236, nil, nil, 59, 60, nil, nil, 61, nil, nil, - nil, nil, nil, 45, nil, nil, nil, nil, nil, nil, - nil, nil, 235, nil, nil, nil, nil, 93, 83, 86, - 87, nil, 88, 90, 89, 91, nil, nil, nil, nil, - 84, 92, nil, nil, nil, 75, 76, 72, 63, 58, - 85, 97, 98, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 317, 318, 73, 74, nil, nil, nil, - nil, nil, 77, 314, 320, 105, 104, 106, 107, nil, - nil, 237, nil, nil, nil, nil, nil, nil, 46, nil, - nil, 109, 108, 110, 99, 57, 101, 100, 102, nil, - 103, 111, 112, nil, 95, 96, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 230, nil, - nil, 236, nil, nil, 59, 60, nil, nil, 61, nil, - nil, nil, nil, nil, 45, nil, nil, nil, nil, nil, - nil, nil, nil, 235, nil, nil, nil, nil, 93, 83, - 86, 87, nil, 88, 90, 89, 91, nil, nil, nil, - nil, 84, 92, nil, nil, nil, 75, 76, 72, 63, - 58, 85, 97, 98, 64, 65, nil, nil, nil, 68, - nil, 66, 67, 69, 317, 318, 73, 74, nil, nil, - nil, nil, nil, 77, 314, 320, 105, 104, 106, 107, - nil, nil, 237, nil, nil, nil, nil, nil, nil, 46, - nil, nil, 109, 108, 110, 99, 57, 101, 100, 102, - nil, 103, 111, 112, nil, 95, 96, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 230, - nil, nil, 236, nil, nil, 59, 60, nil, nil, 61, - nil, nil, nil, nil, nil, 45, nil, nil, nil, nil, - nil, nil, nil, nil, 235, nil, nil, nil, nil, 93, - 83, 86, 87, nil, 88, 90, 89, 91, nil, nil, - nil, nil, 84, 92, nil, nil, nil, nil, nil, nil, - 63, nil, 85, 97, 98, 75, 76, 72, 9, 58, - nil, nil, nil, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 77, 28, 27, 105, 104, 106, 107, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 46, nil, - 10, 109, 108, 110, 99, 57, 101, 100, 102, nil, - 103, 111, 112, nil, 95, 96, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 40, nil, - nil, 33, nil, nil, 59, 60, nil, nil, 61, nil, - 35, nil, nil, nil, 45, nil, nil, nil, nil, nil, - nil, nil, nil, 20, nil, nil, nil, nil, 93, 83, - 86, 87, nil, 88, 90, 89, 91, nil, nil, nil, - nil, 84, 92, nil, nil, nil, 75, 76, 72, 63, - 58, 85, 97, 98, 64, 65, nil, nil, nil, 68, - nil, 66, 67, 69, 317, 318, 73, 74, nil, nil, - nil, nil, nil, 77, 314, 320, 105, 104, 106, 107, - nil, nil, 237, nil, nil, nil, nil, nil, nil, 315, - nil, nil, 109, 108, 110, 99, 57, 101, 100, 102, - nil, 103, 111, 112, nil, 95, 96, nil, nil, 321, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 311, - nil, nil, 236, nil, nil, 59, 60, nil, nil, 61, - nil, nil, 682, nil, 679, 678, 677, 687, 680, nil, - nil, nil, nil, nil, nil, nil, nil, 690, nil, 93, - 83, 86, 87, nil, 88, 90, 89, 91, nil, nil, - nil, nil, 84, 92, nil, nil, nil, 515, nil, 685, - 63, nil, 85, 97, 98, 75, 76, 72, nil, 58, - 698, 697, nil, 64, 65, 691, nil, nil, 68, nil, - 66, 67, 69, 317, 318, 73, 74, nil, nil, nil, - nil, nil, 77, 314, 320, 105, 104, 106, 107, nil, - nil, 237, nil, nil, nil, nil, nil, nil, 315, nil, - nil, 109, 108, 110, 99, 57, 101, 100, 102, nil, - 103, 111, 112, nil, 95, 96, nil, nil, 321, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 311, nil, - nil, 307, nil, nil, 59, 60, nil, nil, 61, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 93, 83, - 86, 87, nil, 88, 90, 89, 91, nil, nil, nil, - nil, 84, 92, nil, nil, nil, 75, 76, 72, 63, - 58, 85, 97, 98, 64, 65, nil, nil, nil, 68, - nil, 66, 67, 69, 317, 318, 73, 74, nil, nil, - nil, nil, nil, 77, 314, 320, 105, 104, 106, 107, - nil, nil, 237, nil, nil, nil, nil, nil, nil, 46, - nil, nil, 109, 108, 110, 99, 57, 101, 100, 102, - nil, 103, 111, 112, nil, 95, 96, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 230, - nil, nil, 236, nil, nil, 59, 60, nil, nil, 61, - nil, nil, nil, nil, nil, 45, nil, nil, nil, nil, - nil, nil, nil, nil, 235, nil, nil, nil, nil, 93, - 83, 86, 87, nil, 88, 90, 89, 91, nil, nil, - nil, nil, 84, 92, nil, nil, nil, 75, 76, 72, - 63, 58, 85, 97, 98, 64, 65, nil, nil, nil, - 68, nil, 66, 67, 69, 317, 318, 73, 74, nil, - nil, nil, nil, nil, 77, 314, 320, 105, 104, 106, - 107, nil, nil, 237, nil, nil, nil, nil, nil, nil, - 46, nil, nil, 109, 108, 110, 99, 57, 101, 100, - 102, nil, 103, 111, 112, nil, 95, 96, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 230, nil, nil, 236, 532, nil, 59, 60, nil, nil, - 61, nil, nil, nil, nil, nil, 45, nil, nil, nil, - nil, nil, nil, nil, nil, 235, nil, nil, nil, nil, - 93, 83, 86, 87, nil, 88, 90, 89, 91, nil, - nil, nil, nil, 84, 92, nil, nil, nil, 75, 76, - 72, 63, 58, 85, 97, 98, 64, 65, nil, nil, - nil, 68, nil, 66, 67, 69, 30, 31, 73, 74, - nil, nil, nil, nil, nil, 77, 28, 27, 105, 104, - 106, 107, nil, nil, 19, nil, nil, nil, nil, nil, - nil, 46, nil, nil, 109, 108, 110, 99, 57, 101, - 100, 102, nil, 103, 111, 112, nil, 95, 96, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 230, nil, nil, 236, nil, nil, 59, 60, nil, - nil, 61, nil, nil, nil, nil, nil, 45, nil, nil, - nil, nil, nil, nil, nil, nil, 20, nil, nil, nil, - nil, 93, 83, 86, 87, nil, 88, 90, 89, 91, - nil, nil, nil, nil, 84, 92, nil, nil, nil, 75, - 76, 72, 63, 58, 85, 97, 98, 64, 65, nil, - nil, nil, 68, nil, 66, 67, 69, 30, 31, 73, - 74, nil, nil, nil, nil, nil, 77, 28, 27, 105, - 104, 106, 107, nil, nil, 19, nil, nil, nil, nil, - nil, nil, 46, nil, nil, 109, 108, 110, 99, 57, - 101, 100, 102, nil, 103, 111, 112, nil, 95, 96, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 230, nil, nil, 236, nil, nil, 59, 60, - nil, nil, 61, nil, nil, nil, nil, nil, 45, nil, - nil, nil, nil, nil, nil, nil, nil, 20, nil, nil, - nil, nil, 93, 83, 86, 87, nil, 88, 90, 89, - 91, nil, nil, nil, nil, 84, 92, nil, nil, nil, - 75, 76, 72, 63, 58, 85, 97, 98, 64, 65, - nil, nil, nil, 68, nil, 66, 67, 69, 30, 31, - 73, 74, nil, nil, nil, nil, nil, 77, 28, 27, - 105, 104, 106, 107, nil, nil, 19, nil, nil, nil, - nil, nil, nil, 46, nil, nil, 109, 108, 110, 99, - 57, 101, 100, 102, nil, 103, 111, 112, nil, 95, - 96, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 230, nil, nil, 236, nil, nil, 59, - 60, nil, nil, 61, nil, nil, nil, nil, nil, 45, - nil, nil, nil, nil, nil, nil, nil, nil, 20, nil, - nil, nil, nil, 93, 83, 86, 87, nil, 88, 90, - 89, 91, nil, nil, nil, nil, 84, 92, nil, nil, - nil, 75, 76, 72, 63, 58, 85, 97, 98, 64, - 65, nil, nil, nil, 68, nil, 66, 67, 69, 317, - 318, 73, 74, nil, nil, nil, nil, nil, 77, 314, - 320, 105, 104, 106, 107, nil, nil, 237, nil, nil, - nil, nil, nil, nil, 46, nil, nil, 109, 108, 110, - 99, 57, 101, 100, 102, nil, 103, 111, 112, nil, - 95, 96, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 230, nil, nil, 236, nil, nil, - 59, 60, nil, nil, 61, nil, nil, nil, nil, nil, - 45, nil, nil, nil, nil, nil, nil, nil, nil, 235, - nil, nil, nil, nil, 93, 83, 86, 87, nil, 88, - 90, 89, 91, nil, nil, nil, nil, 84, 92, nil, - nil, nil, 75, 76, 72, 63, 58, 85, 97, 98, - 64, 65, nil, nil, nil, 68, nil, 66, 67, 69, - 30, 31, 73, 74, nil, nil, nil, nil, nil, 77, - 28, 27, 105, 104, 106, 107, nil, nil, 237, nil, - nil, nil, nil, nil, nil, 46, nil, nil, 109, 108, - 110, 99, 57, 101, 100, 102, 292, 103, 111, 112, - nil, 95, 96, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 230, nil, nil, 236, nil, - nil, 59, 60, nil, nil, 61, nil, 289, nil, 287, - nil, 45, nil, nil, 293, nil, nil, nil, nil, nil, - 235, nil, nil, nil, nil, 93, 290, 86, 87, nil, - 88, 90, 89, 91, nil, nil, nil, nil, 84, 92, - nil, nil, nil, 75, 76, 72, 63, 58, 85, 97, - 98, 64, 65, nil, nil, nil, 68, nil, 66, 67, - 69, 317, 318, 73, 74, nil, nil, nil, nil, nil, - 77, 314, 320, 105, 104, 106, 107, nil, nil, 237, - nil, nil, nil, nil, nil, nil, 46, nil, nil, 109, - 108, 110, 99, 57, 101, 100, 102, nil, 103, 111, - 112, nil, 95, 96, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 230, nil, nil, 236, - nil, nil, 59, 60, nil, nil, 61, nil, nil, nil, - nil, nil, 45, nil, nil, nil, nil, nil, nil, nil, - nil, 235, nil, nil, nil, nil, 93, 83, 86, 87, - nil, 88, 90, 89, 91, nil, nil, nil, nil, 84, - 92, nil, nil, nil, 75, 76, 72, 63, 58, 85, - 97, 98, 64, 65, nil, nil, nil, 68, nil, 66, - 67, 69, 317, 318, 73, 74, nil, nil, nil, nil, - nil, 77, 314, 320, 105, 104, 106, 107, nil, nil, - 237, nil, nil, nil, nil, nil, nil, 46, nil, nil, - 109, 108, 110, 99, 57, 101, 100, 102, nil, 103, - 111, 112, nil, 95, 96, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 230, nil, nil, - 236, nil, nil, 59, 60, nil, nil, 61, nil, nil, - nil, nil, nil, 45, nil, nil, nil, nil, nil, nil, - nil, nil, 235, nil, nil, nil, nil, 93, 83, 86, - 87, nil, 88, 90, 89, 91, nil, nil, nil, nil, - 84, 92, nil, nil, nil, 75, 76, 72, 63, 58, - 85, 97, 98, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 317, 318, 73, 74, nil, nil, nil, - nil, nil, 77, 314, 320, 105, 104, 106, 107, nil, - nil, 237, nil, nil, nil, nil, nil, nil, 46, nil, - nil, 109, 108, 110, 99, 57, 101, 100, 102, nil, - 103, 111, 112, nil, 95, 96, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 230, nil, - nil, 236, nil, nil, 59, 60, nil, nil, 61, nil, - nil, nil, nil, nil, 45, nil, nil, nil, nil, nil, - nil, nil, nil, 235, nil, nil, nil, nil, 93, 83, - 86, 87, nil, 88, 90, 89, 91, nil, nil, nil, - nil, 84, 92, nil, nil, nil, 75, 76, 72, 63, - 58, 85, 97, 98, 64, 65, nil, nil, nil, 68, - nil, 66, 67, 69, 317, 318, 73, 74, nil, nil, - nil, nil, nil, 77, 314, 320, 105, 104, 106, 107, - nil, nil, 237, nil, nil, nil, nil, nil, nil, 46, - nil, nil, 109, 108, 110, 99, 57, 101, 100, 102, - 292, 103, 111, 112, nil, 95, 96, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 230, - nil, nil, 236, nil, nil, 59, 60, nil, nil, 61, - nil, 640, nil, 287, nil, 45, nil, nil, 293, nil, - nil, nil, nil, nil, 235, nil, nil, nil, nil, 93, - 290, 86, 87, nil, 88, 90, 89, 91, nil, nil, - nil, nil, 84, 92, nil, nil, nil, 75, 76, 72, - 63, 58, 85, 97, 98, 64, 65, nil, nil, nil, - 68, nil, 66, 67, 69, 317, 318, 73, 74, nil, - nil, nil, nil, nil, 77, 314, 320, 105, 104, 106, - 107, nil, nil, 237, nil, nil, nil, nil, nil, nil, - 46, nil, nil, 109, 108, 110, 99, 57, 101, 100, - 102, 292, 103, 111, 112, nil, 95, 96, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 230, nil, nil, 236, nil, nil, 59, 60, nil, nil, - 61, nil, nil, nil, 287, nil, 45, nil, nil, 293, - nil, nil, nil, nil, nil, 235, nil, nil, nil, nil, - 93, 290, 86, 87, nil, 88, 90, 89, 91, nil, - nil, nil, nil, 84, 92, nil, nil, nil, 75, 76, - 72, 63, 58, 85, 97, 98, 64, 65, nil, nil, - nil, 68, nil, 66, 67, 69, 317, 318, 73, 74, - nil, nil, nil, nil, nil, 77, 314, 320, 105, 104, - 106, 107, nil, nil, 237, nil, nil, nil, nil, nil, - nil, 46, nil, nil, 109, 108, 110, 99, 57, 101, - 100, 102, nil, 103, 111, 112, nil, 95, 96, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 230, nil, nil, 236, nil, nil, 59, 60, nil, - nil, 61, nil, nil, nil, nil, nil, 45, nil, nil, - nil, nil, nil, nil, nil, nil, 235, nil, nil, nil, - nil, 93, 83, 86, 87, nil, 88, 90, 89, 91, - nil, nil, nil, nil, 84, 92, nil, nil, nil, nil, - nil, nil, 63, nil, 85, 97, 98, 75, 76, 72, - 9, 58, nil, nil, nil, 64, 65, nil, nil, nil, - 68, nil, 66, 67, 69, 30, 31, 73, 74, nil, - nil, nil, nil, nil, 77, 28, 27, 105, 104, 106, - 107, nil, nil, 19, nil, nil, nil, nil, nil, 8, - 46, 300, 10, 109, 108, 110, 99, 57, 101, 100, - 102, nil, 103, 111, 112, nil, 95, 96, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 40, nil, nil, 33, nil, nil, 59, 60, nil, nil, - 61, nil, 35, nil, nil, nil, 45, nil, nil, nil, - nil, nil, nil, nil, nil, 20, nil, nil, nil, nil, - 93, 83, 86, 87, nil, 88, 90, 89, 91, nil, - nil, nil, nil, 84, 92, nil, nil, nil, nil, nil, - 397, 63, nil, 85, 97, 98, 75, 76, 72, nil, - 58, nil, nil, nil, 64, 65, nil, nil, nil, 68, - nil, 66, 67, 69, 317, 318, 73, 74, nil, nil, - nil, nil, nil, 77, 314, 320, 105, 104, 106, 107, - nil, nil, 237, nil, nil, nil, nil, nil, nil, 315, - nil, nil, 109, 108, 110, 99, 57, 101, 100, 102, - nil, 103, 111, 112, nil, 95, 96, nil, nil, 321, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 311, - nil, nil, 307, nil, nil, 59, 60, nil, nil, 61, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 93, - 83, 86, 87, nil, 88, 90, 89, 91, nil, nil, - nil, nil, 84, 92, nil, nil, nil, 75, 76, 72, - 63, 58, 85, 97, 98, 64, 65, nil, nil, nil, - 68, nil, 66, 67, 69, 30, 31, 73, 74, nil, - nil, nil, nil, nil, 77, 28, 27, 105, 104, 106, - 107, nil, nil, 237, nil, nil, nil, nil, nil, nil, - 46, nil, nil, 109, 108, 110, 99, 57, 101, 100, - 102, 292, 103, 111, 112, nil, 95, 96, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 230, nil, nil, 236, nil, nil, 59, 60, nil, nil, - 61, nil, 289, nil, 287, nil, 45, nil, nil, 293, - nil, nil, nil, nil, nil, 235, nil, nil, nil, nil, - 93, 290, 86, 87, nil, 88, 90, 89, 91, nil, - nil, nil, nil, 84, 92, nil, nil, nil, 75, 76, - 72, 63, 58, 85, 97, 98, 64, 65, nil, nil, - nil, 68, nil, 66, 67, 69, 317, 318, 73, 74, - nil, nil, nil, nil, nil, 77, 314, 320, 105, 104, - 106, 107, nil, nil, 237, nil, nil, nil, nil, nil, - nil, 315, nil, nil, 109, 108, 110, 99, 57, 101, - 100, 102, nil, 103, 111, 112, nil, 95, 96, nil, - nil, 321, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 311, nil, nil, 307, nil, nil, 59, 60, nil, - nil, 61, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 93, 83, 86, 87, nil, 88, 90, 89, 91, - nil, nil, nil, nil, 84, 92, nil, nil, nil, 75, - 76, 72, 63, 58, 85, 97, 98, 64, 65, nil, - nil, nil, 68, nil, 66, 67, 69, 317, 318, 73, - 74, nil, nil, nil, nil, nil, 77, 314, 320, 105, - 104, 106, 107, nil, nil, 237, nil, nil, nil, nil, - nil, nil, 46, nil, nil, 109, 108, 110, 99, 57, - 101, 100, 102, nil, 103, 111, 112, nil, 95, 96, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 230, nil, nil, 236, nil, nil, 59, 60, - nil, nil, 61, nil, nil, nil, nil, nil, 45, nil, - nil, nil, nil, nil, nil, nil, nil, 235, nil, nil, - nil, nil, 93, 83, 86, 87, nil, 88, 90, 89, - 91, nil, nil, nil, nil, 84, 92, nil, nil, nil, - 75, 76, 72, 63, 58, 85, 97, 98, 64, 65, - nil, nil, nil, 68, nil, 66, 67, 69, 317, 318, - 73, 74, nil, nil, nil, nil, nil, 77, 314, 320, - 105, 104, 106, 107, nil, nil, 237, nil, nil, nil, - nil, nil, nil, 46, nil, nil, 109, 108, 110, 99, - 57, 101, 100, 102, nil, 103, 111, 112, nil, 95, - 96, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 230, nil, nil, 236, nil, nil, 59, - 60, nil, nil, 61, nil, nil, nil, nil, nil, 45, - nil, nil, nil, nil, nil, nil, nil, nil, 235, nil, - nil, nil, nil, 93, 83, 86, 87, nil, 88, 90, - 89, 91, nil, nil, nil, nil, 84, 92, nil, nil, - nil, 75, 76, 72, 63, 58, 85, 97, 98, 64, - 65, nil, nil, nil, 68, nil, 66, 67, 69, 30, - 31, 73, 74, nil, nil, nil, nil, nil, 77, 28, - 27, 105, 104, 106, 107, nil, nil, 19, nil, nil, - nil, nil, nil, nil, 46, nil, nil, 109, 108, 110, - 99, 57, 101, 100, 102, nil, 103, 111, 112, nil, - 95, 96, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 230, nil, nil, 236, nil, nil, - 59, 60, nil, nil, 61, nil, nil, nil, nil, nil, - 45, nil, nil, nil, nil, nil, nil, nil, nil, 20, - nil, nil, nil, nil, 93, 83, 86, 87, nil, 88, - 90, 89, 91, nil, nil, nil, nil, 84, 92, nil, - nil, nil, 75, 76, 72, 63, 58, 85, 97, 98, - 64, 65, nil, nil, nil, 68, nil, 66, 67, 69, - 317, 318, 73, 74, nil, nil, nil, nil, nil, 77, - 314, 320, 105, 104, 106, 107, nil, nil, 237, nil, - nil, nil, nil, nil, nil, 46, nil, nil, 109, 108, - 110, 99, 57, 101, 100, 102, 292, 103, 111, 112, - nil, 95, 96, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 230, nil, nil, 236, nil, - nil, 59, 60, nil, nil, 61, nil, 640, nil, nil, - nil, 45, nil, nil, 293, nil, nil, nil, nil, nil, - 235, nil, nil, nil, nil, 93, 290, 86, 87, nil, - 88, 90, 89, 91, nil, nil, nil, nil, 84, 92, - nil, nil, nil, 75, 76, 72, 63, 58, 85, 97, - 98, 64, 65, nil, nil, nil, 68, nil, 66, 67, - 69, 317, 318, 73, 74, nil, nil, nil, nil, nil, - 77, 314, 320, 105, 104, 106, 107, nil, nil, 237, - nil, nil, nil, nil, nil, nil, 46, nil, nil, 109, - 108, 110, 99, 57, 101, 100, 102, 292, 103, 111, - 112, nil, 95, 96, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 230, nil, nil, 236, - nil, nil, 59, 60, nil, nil, 61, nil, nil, nil, - nil, nil, 45, nil, nil, 293, nil, nil, nil, nil, - nil, 235, nil, nil, nil, nil, 93, 290, 86, 87, - nil, 88, 90, 89, 91, nil, nil, nil, nil, 84, - 92, nil, nil, nil, 75, 76, 72, 63, 58, 85, - 97, 98, 64, 65, nil, nil, nil, 68, nil, 66, - 67, 69, 317, 318, 73, 74, nil, nil, nil, nil, - nil, 77, 314, 320, 105, 104, 106, 107, nil, nil, - 237, nil, nil, nil, nil, nil, nil, 46, nil, nil, - 109, 108, 110, 99, 57, 101, 100, 102, nil, 103, - 111, 112, nil, 95, 96, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 230, nil, nil, - 236, nil, nil, 59, 60, nil, nil, 61, nil, 289, - nil, nil, nil, 45, nil, nil, nil, nil, nil, nil, - nil, nil, 235, nil, nil, nil, nil, 93, 83, 86, - 87, nil, 88, 90, 89, 91, nil, nil, nil, nil, - 84, 92, nil, nil, nil, 75, 76, 72, 63, 58, - 85, 97, 98, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 77, 28, 27, 105, 104, 106, 107, nil, - nil, 237, nil, nil, nil, nil, nil, nil, 46, nil, - nil, 109, 108, 110, 99, 57, 101, 100, 102, 292, - 103, 111, 112, nil, 95, 96, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 230, nil, - nil, 236, nil, nil, 59, 60, nil, nil, 61, nil, - 289, nil, 287, nil, 45, nil, nil, 293, nil, nil, - nil, nil, nil, 235, nil, nil, nil, nil, 93, 290, - 86, 87, nil, 88, 90, 89, 91, nil, nil, nil, - nil, 84, 92, nil, nil, nil, 75, 76, 72, 63, - 58, 85, 97, 98, 64, 65, nil, nil, nil, 68, - nil, 66, 67, 69, 30, 31, 73, 74, nil, nil, - nil, nil, nil, 77, 28, 27, 105, 104, 106, 107, - nil, nil, 237, nil, nil, nil, nil, nil, nil, 46, - nil, nil, 109, 108, 110, 99, 57, 101, 100, 102, - 292, 103, 111, 112, nil, 95, 96, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 230, - nil, nil, 236, nil, nil, 59, 60, nil, nil, 61, - nil, 289, nil, 287, nil, 45, nil, nil, 293, nil, - nil, nil, nil, nil, 235, nil, nil, nil, nil, 93, - 290, 86, 87, nil, 88, 90, 89, 91, nil, nil, - nil, nil, 84, 92, nil, nil, nil, 75, 76, 72, - 63, 58, 85, 97, 98, 64, 65, nil, nil, nil, - 68, nil, 66, 67, 69, 317, 318, 73, 74, nil, - nil, nil, nil, nil, 77, 314, 320, 105, 104, 106, - 107, nil, nil, 237, nil, nil, nil, nil, nil, nil, - 46, nil, nil, 109, 108, 110, 99, 57, 101, 100, - 102, nil, 103, 111, 112, nil, 95, 96, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 230, nil, nil, 236, nil, nil, 59, 60, nil, nil, - 61, nil, 744, nil, nil, nil, 45, nil, nil, nil, - nil, nil, nil, nil, nil, 235, nil, nil, nil, nil, - 93, 83, 86, 87, nil, 88, 90, 89, 91, nil, - nil, nil, nil, 84, 92, nil, nil, nil, 75, 76, - 72, 63, 58, 85, 97, 98, 64, 65, nil, nil, - nil, 68, nil, 66, 67, 69, 30, 31, 73, 74, - nil, nil, nil, nil, nil, 77, 28, 27, 105, 104, - 106, 107, nil, nil, 237, nil, nil, nil, nil, nil, - nil, 46, nil, nil, 109, 108, 110, 99, 57, 101, - 100, 102, nil, 103, 111, 112, nil, 95, 96, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 230, nil, nil, 236, nil, nil, 59, 60, nil, - nil, 61, nil, nil, nil, nil, nil, 45, nil, nil, - nil, nil, nil, nil, nil, nil, 235, nil, nil, nil, - nil, 93, 83, 86, 87, nil, 88, 90, 89, 91, - nil, nil, nil, nil, 84, 92, nil, nil, nil, 75, - 76, 72, 63, 58, 85, 97, 98, 64, 65, nil, - nil, nil, 68, nil, 66, 67, 69, 30, 31, 73, - 74, nil, nil, nil, nil, nil, 77, 28, 27, 105, - 104, 106, 107, nil, nil, 237, nil, nil, nil, nil, - nil, nil, 46, nil, nil, 109, 108, 110, 99, 57, - 101, 100, 102, 292, 103, 111, 112, nil, 95, 96, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 230, nil, nil, 236, nil, nil, 59, 60, - nil, nil, 61, nil, 289, nil, 287, nil, 45, nil, - nil, 293, nil, nil, nil, nil, nil, 235, nil, nil, - nil, nil, 93, 290, 86, 87, nil, 88, 90, 89, - 91, nil, nil, nil, nil, 84, 92, nil, nil, nil, - nil, nil, nil, 63, nil, 85, 97, 98, 75, 76, - 72, 9, 58, nil, nil, nil, 64, 65, nil, nil, - nil, 68, nil, 66, 67, 69, 30, 31, 73, 74, - nil, nil, nil, nil, nil, 77, 28, 27, 105, 104, - 106, 107, nil, nil, 19, nil, nil, nil, nil, nil, - 8, 46, nil, 10, 109, 108, 110, 99, 57, 101, - 100, 102, nil, 103, 111, 112, nil, 95, 96, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 40, nil, nil, 33, nil, nil, 59, 60, nil, - nil, 61, nil, 35, nil, nil, nil, 45, nil, nil, - nil, nil, nil, nil, nil, nil, 20, nil, nil, nil, - nil, 93, 83, 86, 87, nil, 88, 90, 89, 91, - nil, nil, nil, nil, 84, 92, nil, nil, nil, 75, - 76, 72, 63, 58, 85, 97, 98, 64, 65, nil, - nil, nil, 68, nil, 66, 67, 69, 317, 318, 73, - 74, nil, nil, nil, nil, nil, 77, 314, 320, 105, - 104, 106, 107, nil, nil, 237, nil, nil, nil, nil, - nil, nil, 46, nil, nil, 109, 108, 110, 99, 57, - 101, 100, 102, nil, 103, 111, 112, nil, 95, 96, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 230, nil, nil, 236, nil, nil, 59, 60, - nil, nil, 61, nil, nil, nil, nil, nil, 45, nil, - nil, nil, nil, nil, nil, nil, nil, 235, nil, nil, - nil, nil, 93, 83, 86, 87, nil, 88, 90, 89, - 91, nil, nil, nil, nil, 84, 92, nil, nil, nil, - 75, 76, 72, 63, 58, 85, 97, 98, 64, 65, - nil, nil, nil, 68, nil, 66, 67, 69, 317, 318, - 73, 74, nil, nil, nil, nil, nil, 77, 314, 320, - 105, 104, 106, 107, nil, nil, 237, nil, nil, nil, - nil, nil, nil, 46, nil, nil, 109, 108, 110, 99, - 57, 101, 100, 102, 292, 103, 111, 112, nil, 95, - 96, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 230, nil, nil, 236, nil, nil, 59, - 60, nil, nil, 61, nil, 640, nil, 287, nil, 45, - nil, nil, 293, nil, nil, nil, nil, nil, 235, nil, - nil, nil, nil, 93, 290, 86, 87, nil, 88, 90, - 89, 91, nil, nil, nil, nil, 84, 92, nil, nil, - nil, 75, 76, 72, 63, 58, 85, 97, 98, 64, - 65, nil, nil, nil, 68, nil, 66, 67, 69, 317, - 318, 73, 74, nil, nil, nil, nil, nil, 77, 314, - 320, 105, 104, 106, 107, nil, nil, 237, nil, nil, - nil, nil, nil, nil, 46, nil, nil, 109, 108, 110, - 99, 57, 101, 100, 102, 292, 103, 111, 112, nil, - 95, 96, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 230, nil, nil, 236, nil, nil, - 59, 60, nil, nil, 61, nil, nil, nil, 287, nil, - 45, nil, nil, 293, nil, nil, nil, nil, nil, 235, - nil, nil, nil, nil, 93, 290, 86, 87, nil, 88, - 90, 89, 91, nil, nil, nil, nil, 84, 92, nil, - nil, nil, 75, 76, 72, 63, 58, 85, 97, 98, - 64, 65, nil, nil, nil, 68, nil, 66, 67, 69, - 30, 31, 73, 74, nil, nil, nil, nil, nil, 77, - 28, 27, 105, 104, 106, 107, nil, nil, 237, nil, - nil, nil, nil, nil, nil, 46, nil, nil, 109, 108, - 110, 99, 57, 101, 100, 102, nil, 103, 111, 112, - nil, 95, 96, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 230, nil, nil, 236, nil, - nil, 59, 60, nil, nil, 61, nil, nil, nil, nil, - nil, 45, nil, nil, nil, nil, nil, nil, nil, nil, - 235, nil, nil, nil, nil, 93, 83, 86, 87, nil, - 88, 90, 89, 91, nil, nil, nil, nil, 84, 92, - nil, nil, nil, 75, 76, 72, 63, 58, 85, 97, - 98, 64, 65, nil, nil, nil, 68, nil, 66, 67, - 69, 30, 31, 73, 74, nil, nil, nil, nil, nil, - 77, 28, 27, 105, 104, 106, 107, nil, nil, 237, - nil, nil, nil, nil, nil, nil, 46, nil, nil, 109, - 108, 110, 99, 57, 101, 100, 102, nil, 103, 111, - 112, nil, 95, 96, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 230, nil, nil, 236, - nil, nil, 59, 60, nil, nil, 61, nil, nil, nil, - nil, nil, 45, nil, nil, nil, nil, nil, nil, nil, - nil, 235, nil, nil, nil, nil, 93, 83, 86, 87, - nil, 88, 90, 89, 91, nil, nil, nil, nil, 84, - 92, nil, nil, nil, 75, 76, 72, 63, 58, 85, - 97, 98, 64, 65, nil, nil, nil, 68, nil, 66, - 67, 69, 30, 31, 73, 74, nil, nil, nil, nil, - nil, 77, 28, 27, 105, 104, 106, 107, nil, nil, - 237, nil, nil, nil, nil, nil, nil, 46, nil, nil, - 109, 108, 110, 99, 57, 101, 100, 102, nil, 103, - 111, 112, nil, 95, 96, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 230, nil, nil, - 236, nil, nil, 59, 60, nil, nil, 61, nil, nil, - nil, nil, nil, 45, nil, nil, nil, nil, nil, nil, - nil, nil, 235, nil, nil, nil, nil, 93, 83, 86, - 87, nil, 88, 90, 89, 91, nil, nil, nil, nil, - 84, 92, nil, nil, nil, 75, 76, 72, 63, 58, - 85, 97, 98, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 77, 28, 27, 105, 104, 106, 107, nil, - nil, 237, nil, nil, nil, nil, nil, nil, 46, nil, - nil, 109, 108, 110, 99, 57, 101, 100, 102, nil, - 103, 111, 112, nil, 95, 96, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 230, nil, - nil, 236, nil, nil, 59, 60, nil, nil, 61, nil, - nil, nil, nil, nil, 45, nil, nil, nil, nil, nil, - nil, nil, nil, 235, nil, nil, nil, nil, 93, 83, - 86, 87, nil, 88, 90, 89, 91, nil, nil, nil, - nil, 84, 92, nil, nil, nil, 75, 76, 72, 63, - 58, 85, 97, 98, 64, 65, nil, nil, nil, 68, - nil, 66, 67, 69, 317, 318, 73, 74, nil, nil, - nil, nil, nil, 77, 314, 320, 105, 104, 106, 107, - nil, nil, 237, nil, nil, nil, nil, nil, nil, 46, - nil, nil, 109, 108, 110, 99, 57, 101, 100, 102, - nil, 103, 111, 112, nil, 95, 96, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 230, - nil, nil, 236, nil, nil, 59, 60, nil, nil, 61, - nil, nil, nil, nil, nil, 45, nil, nil, nil, nil, - nil, nil, nil, nil, 235, nil, nil, nil, nil, 93, - 83, 86, 87, nil, 88, 90, 89, 91, nil, nil, - nil, nil, 84, 92, nil, nil, nil, 75, 76, 72, - 63, 58, 85, 97, 98, 64, 65, nil, nil, nil, - 68, nil, 66, 67, 69, 317, 318, 73, 74, nil, - nil, nil, nil, nil, 77, 314, 320, 105, 104, 106, - 107, nil, nil, 237, nil, nil, nil, nil, nil, nil, - 46, nil, nil, 109, 108, 110, 99, 57, 101, 100, - 102, nil, 103, 111, 112, nil, 95, 96, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 230, nil, nil, 236, nil, nil, 59, 60, nil, nil, - 61, nil, nil, nil, nil, nil, 45, nil, nil, nil, - nil, nil, nil, nil, nil, 235, nil, nil, nil, nil, - 93, 83, 86, 87, nil, 88, 90, 89, 91, nil, - nil, nil, nil, 84, 92, nil, nil, nil, 75, 76, - 72, 63, 58, 85, 97, 98, 64, 65, nil, nil, - nil, 68, nil, 66, 67, 69, 317, 318, 73, 74, - nil, nil, nil, nil, nil, 77, 314, 320, 105, 104, - 106, 107, nil, nil, 237, nil, nil, nil, nil, nil, - nil, 315, nil, nil, 109, 108, 110, 99, 57, 101, - 100, 102, nil, 103, 111, 112, nil, 95, 96, nil, - nil, 321, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 311, nil, nil, 307, nil, nil, 59, 60, nil, - nil, 61, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 93, 83, 86, 87, nil, 88, 90, 89, 91, - nil, nil, nil, nil, 84, 92, nil, nil, nil, 75, - 76, 72, 63, 58, 85, 97, 98, 64, 65, nil, - nil, nil, 68, nil, 66, 67, 69, 317, 318, 73, - 74, nil, nil, nil, nil, nil, 77, 314, 320, 105, - 104, 106, 107, nil, nil, 237, nil, nil, nil, nil, - nil, nil, 315, nil, nil, 109, 108, 110, 99, 57, - 101, 100, 102, nil, 103, 111, 112, nil, 95, 96, - nil, nil, 321, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 311, nil, nil, 307, nil, nil, 59, 60, - nil, nil, 61, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 93, 83, 86, 87, nil, 88, 90, 89, - 91, nil, nil, nil, nil, 84, 92, nil, nil, nil, - 75, 76, 72, 63, 58, 85, 97, 98, 64, 65, - nil, nil, nil, 68, nil, 66, 67, 69, 317, 318, - 73, 74, nil, nil, nil, nil, nil, 77, 314, 320, - 105, 104, 106, 107, nil, nil, 237, nil, nil, nil, - nil, nil, nil, 46, nil, nil, 109, 108, 110, 99, - 57, 101, 100, 102, nil, 103, 111, 112, nil, 95, - 96, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 230, nil, nil, 236, nil, nil, 59, - 60, nil, nil, 61, nil, 413, nil, nil, nil, 45, - nil, nil, nil, nil, nil, nil, nil, nil, 235, nil, - nil, nil, nil, 93, 83, 86, 87, nil, 88, 90, - 89, 91, nil, nil, nil, nil, 84, 92, nil, nil, - nil, 75, 76, 72, 63, 58, 85, 97, 98, 64, - 65, nil, nil, nil, 68, nil, 66, 67, 69, 317, - 318, 73, 74, nil, nil, nil, nil, nil, 77, 314, - 320, 105, 104, 106, 107, nil, nil, 237, nil, nil, - nil, nil, nil, nil, 46, nil, nil, 109, 108, 110, - 99, 57, 101, 100, 102, nil, 103, 111, 112, nil, - 95, 96, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 230, nil, nil, 236, nil, nil, - 59, 60, nil, nil, 61, nil, nil, nil, nil, nil, - 45, nil, nil, nil, nil, nil, nil, nil, nil, 235, - nil, nil, nil, nil, 93, 83, 86, 87, nil, 88, - 90, 89, 91, nil, nil, nil, nil, 84, 92, nil, - nil, nil, 75, 76, 72, 63, 58, 85, 97, 98, - 64, 65, nil, nil, nil, 68, nil, 66, 67, 69, - 30, 31, 73, 74, nil, nil, nil, nil, nil, 77, - 28, 27, 105, 104, 106, 107, nil, nil, 19, nil, - nil, nil, nil, nil, nil, 46, nil, nil, 109, 108, - 110, 99, 57, 101, 100, 102, nil, 103, 111, 112, - nil, 95, 96, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 230, nil, nil, 236, nil, - nil, 59, 60, nil, nil, 61, nil, nil, nil, nil, - nil, 45, nil, nil, nil, nil, nil, nil, nil, nil, - 20, nil, nil, nil, nil, 93, 83, 86, 87, nil, - 88, 90, 89, 91, nil, nil, nil, nil, 84, 92, - nil, nil, nil, 75, 76, 72, 63, 58, 85, 97, - 98, 64, 65, nil, nil, nil, 68, nil, 66, 67, - 69, 317, 318, 73, 74, nil, nil, nil, nil, nil, - 77, 314, 320, 105, 104, 106, 107, nil, nil, 237, - nil, nil, nil, nil, nil, nil, 46, nil, nil, 109, - 108, 110, 99, 57, 101, 100, 102, nil, 103, 111, - 112, nil, 95, 96, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 230, nil, nil, 236, - nil, nil, 59, 60, nil, nil, 61, nil, nil, nil, - nil, nil, 45, nil, nil, nil, nil, nil, nil, nil, - nil, 235, nil, nil, nil, nil, 93, 83, 86, 87, - nil, 88, 90, 89, 91, nil, nil, nil, nil, 84, - 92, nil, nil, nil, 75, 76, 72, 63, 58, 85, - 97, 98, 64, 65, nil, nil, nil, 68, nil, 66, - 67, 69, 30, 31, 73, 74, nil, nil, nil, nil, - nil, 77, 28, 27, 105, 104, 106, 107, nil, nil, - 237, nil, nil, nil, nil, nil, nil, 46, nil, nil, - 109, 108, 110, 99, 57, 101, 100, 102, nil, 103, - 111, 112, nil, 95, 96, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 230, nil, nil, - 236, nil, nil, 59, 60, nil, nil, 61, nil, nil, - nil, nil, nil, 45, nil, nil, nil, nil, nil, nil, - nil, nil, 235, nil, nil, nil, nil, 93, 83, 86, - 87, nil, 88, 90, 89, 91, nil, nil, nil, nil, - 84, 92, nil, nil, nil, 75, 76, 72, 63, 58, - 85, 97, 98, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 317, 318, 73, 74, nil, nil, nil, - nil, nil, 77, 314, 320, 105, 104, 106, 107, nil, - nil, 237, nil, nil, nil, nil, nil, nil, 46, nil, - nil, 109, 108, 110, 99, 57, 101, 100, 102, nil, - 103, 111, 112, nil, 95, 96, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 230, nil, - nil, 236, nil, nil, 59, 60, nil, nil, 61, nil, - nil, nil, nil, nil, 45, nil, nil, nil, nil, nil, - nil, nil, nil, 235, nil, nil, nil, nil, 93, 83, - 86, 87, nil, 88, 90, 89, 91, nil, nil, nil, - nil, 84, 92, nil, nil, nil, 75, 76, 72, 63, - 58, 85, 97, 98, 64, 65, nil, nil, nil, 68, - nil, 66, 67, 69, 317, 318, 73, 74, nil, nil, - nil, nil, nil, 77, 314, 320, 105, 104, 106, 107, - nil, nil, 237, nil, nil, nil, nil, nil, nil, 46, - nil, nil, 109, 108, 110, 99, 57, 101, 100, 102, - nil, 103, 111, 112, nil, 95, 96, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 230, - nil, nil, 236, nil, nil, 59, 60, nil, nil, 61, - nil, nil, nil, nil, nil, 45, nil, nil, nil, nil, - nil, nil, nil, nil, 235, nil, nil, nil, nil, 93, - 83, 86, 87, nil, 88, 90, 89, 91, nil, nil, - nil, nil, 84, 92, nil, nil, nil, 75, 76, 72, - 63, 58, 85, 97, 98, 64, 65, nil, nil, nil, - 68, nil, 66, 67, 69, 317, 318, 73, 74, nil, - nil, nil, nil, nil, 77, 314, 320, 105, 104, 106, - 107, nil, nil, 237, nil, nil, nil, nil, nil, nil, - 46, nil, nil, 109, 108, 110, 99, 57, 101, 100, - 102, nil, 103, 111, 112, nil, 95, 96, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 230, nil, nil, 236, nil, nil, 59, 60, nil, nil, - 61, nil, nil, nil, nil, nil, 45, nil, nil, nil, - nil, nil, nil, nil, nil, 235, nil, nil, nil, nil, - 93, 83, 86, 87, nil, 88, 90, 89, 91, nil, - nil, nil, nil, 84, 92, nil, nil, nil, 75, 76, - 72, 63, 58, 85, 97, 98, 64, 65, nil, nil, - nil, 68, nil, 66, 67, 69, 317, 318, 73, 74, - nil, nil, nil, nil, nil, 77, 314, 320, 105, 104, - 106, 107, nil, nil, 237, nil, nil, nil, nil, nil, - nil, 46, nil, nil, 109, 108, 110, 99, 57, 101, - 100, 102, nil, 103, 111, 112, nil, 95, 96, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 230, nil, nil, 236, nil, nil, 59, 60, nil, - nil, 61, nil, nil, nil, nil, nil, 45, nil, nil, - nil, nil, nil, nil, nil, nil, 235, nil, nil, nil, - nil, 93, 83, 86, 87, nil, 88, 90, 89, 91, - nil, nil, nil, nil, 84, 92, nil, nil, nil, 75, - 76, 72, 63, 58, 85, 97, 98, 64, 65, nil, - nil, nil, 68, nil, 66, 67, 69, 317, 318, 73, - 74, nil, nil, nil, nil, nil, 77, 314, 320, 105, - 104, 106, 107, nil, nil, 237, nil, nil, nil, nil, - nil, nil, 46, nil, nil, 109, 108, 110, 99, 57, - 101, 100, 102, nil, 103, 111, 112, nil, 95, 96, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 230, nil, nil, 236, nil, nil, 59, 60, - nil, nil, 61, nil, nil, nil, nil, nil, 45, nil, - nil, nil, nil, nil, nil, nil, nil, 235, nil, nil, - nil, nil, 93, 83, 86, 87, nil, 88, 90, 89, - 91, nil, nil, nil, nil, 84, 92, nil, nil, nil, - 75, 76, 72, 63, 58, 85, 97, 98, 64, 65, - nil, nil, nil, 68, nil, 66, 67, 69, 317, 318, - 73, 74, nil, nil, nil, nil, nil, 77, 314, 320, - 105, 104, 106, 107, nil, nil, 237, nil, nil, nil, - nil, nil, nil, 46, nil, nil, 109, 108, 110, 99, - 57, 101, 100, 102, nil, 103, 111, 112, nil, 95, - 96, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 230, nil, nil, 236, nil, nil, 59, - 60, nil, nil, 61, nil, nil, nil, nil, nil, 45, - nil, nil, nil, nil, nil, nil, nil, nil, 235, nil, - nil, nil, nil, 93, 83, 86, 87, nil, 88, 90, - 89, 91, nil, nil, nil, nil, 84, 92, nil, nil, - nil, 75, 76, 72, 63, 58, 85, 97, 98, 64, - 65, nil, nil, nil, 68, nil, 66, 67, 69, 30, - 31, 73, 74, nil, nil, nil, nil, nil, 77, 28, - 27, 105, 104, 106, 107, nil, nil, 19, nil, nil, - nil, nil, nil, nil, 46, nil, nil, 109, 108, 110, - 99, 57, 101, 100, 102, nil, 103, 111, 112, nil, - 95, 96, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 230, nil, nil, 236, nil, nil, - 59, 60, nil, nil, 61, nil, nil, nil, nil, nil, - 45, nil, nil, nil, nil, nil, nil, nil, nil, 20, - nil, nil, nil, nil, 93, 83, 86, 87, nil, 88, - 90, 89, 91, nil, nil, nil, nil, 84, 92, nil, - nil, nil, 75, 76, 72, 63, 58, 85, 97, 98, - 64, 65, nil, nil, nil, 68, nil, 66, 67, 69, - 317, 318, 73, 74, nil, nil, nil, nil, nil, 77, - 314, 320, 105, 104, 106, 107, nil, nil, 237, nil, - nil, nil, nil, nil, nil, 46, nil, nil, 109, 108, - 110, 99, 57, 101, 100, 102, nil, 103, 111, 112, - nil, 95, 96, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 230, nil, nil, 236, nil, - nil, 59, 60, nil, nil, 61, nil, 640, nil, nil, - nil, 45, nil, nil, nil, nil, nil, nil, nil, nil, - 235, nil, nil, nil, nil, 93, 83, 86, 87, nil, - 88, 90, 89, 91, nil, nil, nil, nil, 84, 92, - nil, nil, nil, 75, 76, 72, 63, 58, 85, 97, - 98, 64, 65, nil, nil, nil, 68, nil, 66, 67, - 69, 317, 318, 73, 74, nil, nil, nil, nil, nil, - 77, 314, 320, 105, 104, 106, 107, nil, nil, 237, - nil, nil, nil, nil, nil, nil, 46, nil, nil, 109, - 108, 110, 99, 57, 101, 100, 102, 292, 103, 111, - 112, nil, 95, 96, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 230, nil, nil, 236, - nil, nil, 59, 60, nil, nil, 61, nil, nil, nil, - 287, nil, 45, nil, nil, 293, nil, nil, nil, nil, - nil, 235, nil, nil, nil, nil, 93, 290, 86, 87, - nil, 88, 90, 89, 91, nil, nil, nil, nil, 84, - 92, nil, nil, nil, 75, 76, 72, 63, 58, 85, - 97, 98, 64, 65, nil, nil, nil, 68, nil, 66, - 67, 69, 317, 318, 73, 74, nil, nil, nil, nil, - nil, 77, 314, 320, 105, 104, 106, 107, nil, nil, - 237, nil, nil, nil, nil, nil, nil, 46, nil, nil, - 109, 108, 110, 99, 57, 101, 100, 102, nil, 103, - 111, 112, nil, 95, 96, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 230, nil, nil, - 236, nil, nil, 59, 60, nil, nil, 61, nil, nil, - nil, nil, nil, 45, nil, nil, nil, nil, nil, nil, - nil, nil, 235, nil, nil, nil, nil, 93, 83, 86, - 87, nil, 88, 90, 89, 91, nil, nil, nil, nil, - 84, 92, nil, nil, nil, 75, 76, 72, 63, 58, - 85, 97, 98, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 317, 318, 73, 74, nil, nil, nil, - nil, nil, 77, 314, 320, 105, 104, 106, 107, nil, - nil, 237, nil, nil, nil, nil, nil, nil, 315, nil, - nil, 109, 108, 110, 99, 57, 101, 100, 102, nil, - 103, 111, 112, nil, 95, 96, nil, nil, 321, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 921, nil, - nil, 236, nil, nil, 59, 60, nil, nil, 61, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 93, 83, - 86, 87, nil, 88, 90, 89, 91, nil, nil, nil, - nil, 84, 92, nil, nil, nil, 75, 76, 72, 63, - 58, 85, 97, 98, 64, 65, nil, nil, nil, 68, - nil, 66, 67, 69, 317, 318, 73, 74, nil, nil, - nil, nil, nil, 77, 314, 320, 105, 104, 106, 107, - nil, nil, 237, nil, nil, nil, nil, nil, nil, 315, - nil, nil, 109, 108, 110, 99, 57, 101, 100, 102, - nil, 103, 111, 112, nil, 95, 96, nil, nil, 321, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 927, - nil, nil, 236, nil, nil, 59, 60, nil, nil, 61, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 93, - 83, 86, 87, nil, 88, 90, 89, 91, nil, nil, - nil, nil, 84, 92, nil, nil, nil, 75, 76, 72, - 63, 58, 85, 97, 98, 64, 65, nil, nil, nil, - 68, nil, 66, 67, 69, 317, 318, 73, 74, nil, - nil, nil, nil, nil, 77, 314, 320, 105, 104, 106, - 107, nil, nil, 237, nil, nil, nil, nil, nil, nil, - 315, nil, nil, 109, 108, 110, 99, 57, 101, 100, - 102, nil, 103, 111, 112, nil, 95, 96, nil, nil, - 321, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 921, nil, nil, 236, nil, nil, 59, 60, nil, nil, - 61, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 93, 83, 86, 87, nil, 88, 90, 89, 91, nil, - nil, nil, nil, 84, 92, nil, nil, nil, 75, 76, - 72, 63, 58, 85, 97, 98, 64, 65, nil, nil, - nil, 68, nil, 66, 67, 69, 30, 31, 73, 74, - nil, nil, nil, nil, nil, 77, 28, 27, 105, 104, - 106, 107, nil, nil, 237, nil, nil, nil, nil, nil, - nil, 46, nil, nil, 109, 108, 110, 99, 57, 101, - 100, 102, 292, 103, 111, 112, nil, 95, 96, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 230, nil, nil, 236, nil, nil, 59, 60, nil, - nil, 61, nil, 289, nil, 287, nil, 45, nil, nil, - 293, nil, nil, nil, nil, nil, 235, nil, nil, nil, - nil, 93, 290, 86, 87, nil, 88, 90, 89, 91, - nil, nil, nil, nil, 84, 92, nil, nil, nil, nil, - nil, nil, 63, nil, 85, 97, 98, 178, 189, 179, - 202, 175, 195, 185, 184, 205, 206, 200, 183, 182, - 177, 203, 207, 208, 187, 176, 190, 194, 196, 188, - 181, nil, nil, nil, 197, 204, 199, 198, 191, 201, - 186, 174, 193, 192, nil, nil, nil, nil, nil, 173, - 180, 171, 172, 168, 169, 170, 129, 131, 128, nil, - 130, nil, nil, nil, nil, nil, nil, nil, 162, 163, - nil, 159, 141, 142, 143, 150, 147, 149, nil, nil, - 144, 145, nil, nil, nil, 164, 165, 151, 152, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 156, 155, nil, 140, 161, 158, 157, 166, - 153, 154, 148, 146, 138, 160, 139, nil, nil, 167, - 93, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 92, 178, 189, 179, 202, 175, - 195, 185, 184, 205, 206, 200, 183, 182, 177, 203, - 207, 208, 187, 176, 190, 194, 196, 188, 181, nil, - nil, nil, 197, 204, 199, 198, 191, 201, 186, 174, - 193, 192, nil, nil, nil, nil, nil, 173, 180, 171, - 172, 168, 169, 170, 129, 131, nil, nil, 130, nil, - nil, nil, nil, nil, nil, nil, 162, 163, nil, 159, - 141, 142, 143, 150, 147, 149, nil, nil, 144, 145, - nil, nil, nil, 164, 165, 151, 152, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 156, 155, nil, 140, 161, 158, 157, 166, 153, 154, - 148, 146, 138, 160, 139, nil, nil, 167, 93, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 92, 178, 189, 179, 202, 175, 195, 185, - 184, 205, 206, 200, 183, 182, 177, 203, 207, 208, - 187, 176, 190, 194, 196, 188, 181, nil, nil, nil, - 197, 204, 199, 198, 191, 201, 186, 174, 193, 192, - nil, nil, nil, nil, nil, 173, 180, 171, 172, 168, - 169, 170, 129, 131, nil, nil, 130, nil, nil, nil, - nil, nil, nil, nil, 162, 163, nil, 159, 141, 142, - 143, 150, 147, 149, nil, nil, 144, 145, nil, nil, - nil, 164, 165, 151, 152, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 156, 155, - nil, 140, 161, 158, 157, 166, 153, 154, 148, 146, - 138, 160, 139, nil, nil, 167, 93, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 92, 178, 189, 179, 202, 175, 195, 185, 184, 205, - 206, 200, 183, 182, 177, 203, 207, 208, 187, 176, - 190, 194, 196, 188, 181, nil, nil, nil, 197, 204, - 199, 198, 191, 201, 186, 174, 193, 192, nil, nil, - nil, nil, nil, 173, 180, 171, 172, 168, 169, 170, - 129, 131, nil, nil, 130, nil, nil, nil, nil, nil, - nil, nil, 162, 163, nil, 159, 141, 142, 143, 150, - 147, 149, nil, nil, 144, 145, nil, nil, nil, 164, - 165, 151, 152, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 156, 155, nil, 140, - 161, 158, 157, 166, 153, 154, 148, 146, 138, 160, - 139, nil, nil, 167, 93, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 92, 178, - 189, 179, 202, 175, 195, 185, 184, 205, 206, 200, - 183, 182, 177, 203, 207, 208, 187, 176, 190, 194, - 196, 188, 181, nil, nil, nil, 197, 204, 199, 380, - 379, 381, 378, 174, 193, 192, nil, nil, nil, nil, - nil, 173, 180, 171, 172, 375, 376, 377, 373, 131, - 101, 100, 374, nil, 103, nil, nil, nil, nil, nil, - 162, 163, nil, 159, 141, 142, 143, 150, 147, 149, - nil, nil, 144, 145, nil, nil, nil, 164, 165, 151, - 152, nil, nil, nil, nil, nil, 385, nil, nil, nil, - nil, nil, nil, nil, 156, 155, nil, 140, 161, 158, - 157, 166, 153, 154, 148, 146, 138, 160, 139, nil, - nil, 167, 178, 189, 179, 202, 175, 195, 185, 184, - 205, 206, 200, 183, 182, 177, 203, 207, 208, 187, - 176, 190, 194, 196, 188, 181, nil, nil, nil, 197, - 204, 199, 198, 191, 201, 186, 174, 193, 192, nil, - nil, nil, nil, nil, 173, 180, 171, 172, 168, 169, - 170, 129, 131, nil, nil, 130, nil, nil, nil, nil, - nil, nil, nil, 162, 163, nil, 159, 141, 142, 143, - 150, 147, 149, nil, nil, 144, 145, nil, nil, nil, - 164, 165, 151, 152, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 156, 155, nil, - 140, 161, 158, 157, 166, 153, 154, 148, 146, 138, - 160, 139, 435, 439, 167, nil, 436, nil, nil, nil, - nil, nil, nil, nil, 162, 163, nil, 159, 141, 142, - 143, 150, 147, 149, nil, nil, 144, 145, nil, nil, - nil, 164, 165, 151, 152, nil, nil, nil, nil, nil, - 271, nil, nil, nil, nil, nil, nil, nil, 156, 155, - nil, 140, 161, 158, 157, 166, 153, 154, 148, 146, - 138, 160, 139, 442, 446, 167, nil, 441, nil, nil, - nil, nil, nil, nil, nil, 162, 163, nil, 159, 141, - 142, 143, 150, 147, 149, nil, nil, 144, 145, nil, - nil, nil, 164, 165, 151, 152, nil, nil, nil, nil, - nil, 271, nil, nil, nil, nil, nil, nil, nil, 156, - 155, nil, 140, 161, 158, 157, 166, 153, 154, 148, - 146, 138, 160, 139, 486, 439, 167, nil, 487, nil, - nil, nil, nil, nil, nil, nil, 162, 163, nil, 159, - 141, 142, 143, 150, 147, 149, nil, nil, 144, 145, - nil, nil, nil, 164, 165, 151, 152, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 156, 155, nil, 140, 161, 158, 157, 166, 153, 154, - 148, 146, 138, 160, 139, 621, 439, 167, nil, 622, - nil, nil, nil, nil, nil, nil, nil, 162, 163, nil, - 159, 141, 142, 143, 150, 147, 149, nil, nil, 144, - 145, nil, nil, nil, 164, 165, 151, 152, nil, nil, - nil, nil, nil, 271, nil, nil, nil, nil, nil, nil, - nil, 156, 155, nil, 140, 161, 158, 157, 166, 153, - 154, 148, 146, 138, 160, 139, 623, 446, 167, nil, - 624, nil, nil, nil, nil, nil, nil, nil, 162, 163, - nil, 159, 141, 142, 143, 150, 147, 149, nil, nil, - 144, 145, nil, nil, nil, 164, 165, 151, 152, nil, - nil, nil, nil, nil, 271, nil, nil, nil, nil, nil, - nil, nil, 156, 155, nil, 140, 161, 158, 157, 166, - 153, 154, 148, 146, 138, 160, 139, 650, 439, 167, - nil, 651, nil, nil, nil, nil, nil, nil, nil, 162, - 163, nil, 159, 141, 142, 143, 150, 147, 149, nil, - nil, 144, 145, nil, nil, nil, 164, 165, 151, 152, - nil, nil, nil, nil, nil, 271, nil, nil, nil, nil, - nil, nil, nil, 156, 155, nil, 140, 161, 158, 157, - 166, 153, 154, 148, 146, 138, 160, 139, 653, 446, - 167, nil, 654, nil, nil, nil, nil, nil, nil, nil, - 162, 163, nil, 159, 141, 142, 143, 150, 147, 149, - nil, nil, 144, 145, nil, nil, nil, 164, 165, 151, - 152, nil, nil, nil, nil, nil, 271, nil, nil, nil, - nil, nil, nil, nil, 156, 155, nil, 140, 161, 158, - 157, 166, 153, 154, 148, 146, 138, 160, 139, 621, - 439, 167, nil, 622, nil, nil, nil, nil, nil, nil, - nil, 162, 163, nil, 159, 141, 142, 143, 150, 147, - 149, nil, nil, 144, 145, nil, nil, nil, 164, 165, - 151, 152, nil, nil, nil, nil, nil, 271, nil, nil, - nil, nil, nil, nil, nil, 156, 155, nil, 140, 161, - 158, 157, 166, 153, 154, 148, 146, 138, 160, 139, - 623, 446, 167, nil, 624, nil, nil, nil, nil, nil, - nil, nil, 162, 163, nil, 159, 141, 142, 143, 150, - 147, 149, nil, nil, 144, 145, nil, nil, nil, 164, - 165, 151, 152, nil, nil, nil, nil, nil, 271, nil, - nil, nil, nil, nil, nil, nil, 156, 155, nil, 140, - 161, 158, 157, 166, 153, 154, 148, 146, 138, 160, - 139, 712, 439, 167, nil, 713, nil, nil, nil, nil, - nil, nil, nil, 162, 163, nil, 159, 141, 142, 143, - 150, 147, 149, nil, nil, 144, 145, nil, nil, nil, - 164, 165, 151, 152, nil, nil, nil, nil, nil, 271, - nil, nil, nil, nil, nil, nil, nil, 156, 155, nil, - 140, 161, 158, 157, 166, 153, 154, 148, 146, 138, - 160, 139, 714, 446, 167, nil, 715, nil, nil, nil, - nil, nil, nil, nil, 162, 163, nil, 159, 141, 142, - 143, 150, 147, 149, nil, nil, 144, 145, nil, nil, - nil, 164, 165, 151, 152, nil, nil, nil, nil, nil, - 271, nil, nil, nil, nil, nil, nil, nil, 156, 155, - nil, 140, 161, 158, 157, 166, 153, 154, 148, 146, - 138, 160, 139, 717, 446, 167, nil, 718, nil, nil, - nil, nil, nil, nil, nil, 162, 163, nil, 159, 141, - 142, 143, 150, 147, 149, nil, nil, 144, 145, nil, - nil, nil, 164, 165, 151, 152, nil, nil, nil, nil, - nil, 271, nil, nil, nil, nil, nil, nil, nil, 156, - 155, nil, 140, 161, 158, 157, 166, 153, 154, 148, - 146, 138, 160, 139, 486, 439, 167, nil, 487, nil, - nil, nil, nil, nil, nil, nil, 162, 163, nil, 159, - 141, 142, 143, 150, 147, 149, nil, nil, 144, 145, - nil, nil, nil, 164, 165, 151, 152, nil, nil, nil, - nil, nil, 271, nil, nil, nil, nil, nil, nil, nil, - 156, 155, nil, 140, 161, 158, 157, 166, 153, 154, - 148, 146, 138, 160, 139, 746, 439, 167, nil, 747, - nil, nil, nil, nil, nil, nil, nil, 162, 163, nil, - 159, 141, 142, 143, 150, 147, 149, nil, nil, 144, - 145, nil, nil, nil, 164, 165, 151, 152, nil, nil, - nil, nil, nil, 271, nil, nil, nil, nil, nil, nil, - nil, 156, 155, nil, 140, 161, 158, 157, 166, 153, - 154, 148, 146, 138, 160, 139, 749, 446, 167, nil, - 748, nil, nil, nil, nil, nil, nil, nil, 162, 163, - nil, 159, 141, 142, 143, 150, 147, 149, nil, nil, - 144, 145, nil, nil, nil, 164, 165, 151, 152, nil, - nil, nil, nil, nil, 271, nil, nil, nil, nil, nil, - nil, nil, 156, 155, nil, 140, 161, 158, 157, 166, - 153, 154, 148, 146, 138, 160, 139, 1001, 446, 167, - nil, 1000, nil, nil, nil, nil, nil, nil, nil, 162, - 163, nil, 159, 141, 142, 143, 150, 147, 149, nil, - nil, 144, 145, nil, nil, nil, 164, 165, 151, 152, - nil, nil, nil, nil, nil, 271, nil, nil, nil, nil, - nil, nil, nil, 156, 155, nil, 140, 161, 158, 157, - 166, 153, 154, 148, 146, 138, 160, 139, 1004, 439, - 167, nil, 1005, nil, nil, nil, nil, nil, nil, nil, - 162, 163, nil, 159, 141, 142, 143, 150, 147, 149, - nil, nil, 144, 145, nil, nil, nil, 164, 165, 151, - 152, nil, nil, nil, nil, nil, 271, nil, nil, nil, - nil, nil, nil, nil, 156, 155, nil, 140, 161, 158, - 157, 166, 153, 154, 148, 146, 138, 160, 139, 1006, - 446, 167, nil, 1007, nil, nil, nil, nil, nil, nil, - nil, 162, 163, nil, 159, 141, 142, 143, 150, 147, - 149, nil, nil, 144, 145, nil, nil, nil, 164, 165, - 151, 152, nil, nil, nil, nil, nil, 271, nil, nil, - nil, nil, nil, nil, nil, 156, 155, nil, 140, 161, - 158, 157, 166, 153, 154, 148, 146, 138, 160, 139, - nil, 682, 167, 679, 678, 677, 687, 680, nil, 682, - nil, 679, 678, 677, 687, 680, 690, nil, nil, nil, - nil, nil, nil, nil, 690, nil, 682, nil, 679, 678, - 677, 687, 680, nil, nil, nil, nil, nil, 685, 668, - nil, 690, nil, nil, nil, nil, 685, 695, 694, 698, - 697, nil, nil, nil, 691, 695, 694, 698, 697, nil, - nil, nil, 691, 685, nil, 682, nil, 679, 678, 677, - 687, 680, 695, 694, 698, 697, nil, nil, nil, 691, - 690, nil, 682, nil, 679, 678, 677, 687, 680, nil, - 682, nil, 679, 678, 677, 687, 680, 690, nil, nil, - nil, nil, 685, nil, nil, 690, nil, nil, nil, nil, - nil, 695, 694, 698, 697, nil, nil, nil, 691, 685, - nil, nil, nil, nil, nil, nil, nil, 685, 695, 694, - 698, 697, nil, nil, nil, 691, 695, 694, 698, 697, - nil, nil, 682, 691, 679, 678, 677, 687, 680, nil, - 682, nil, 679, 678, 677, 687, 680, 690, nil, nil, - nil, nil, nil, nil, nil, 690, nil, 682, nil, 679, - 678, 677, 687, 680, nil, nil, nil, nil, nil, 685, - nil, nil, 690, nil, nil, nil, nil, 685, 695, 694, - 698, 697, nil, nil, nil, 691, 695, 694, 698, 697, - nil, nil, nil, 691, 685, nil, 682, nil, 679, 678, - 677, 687, 680, 695, 694, 698, 697, nil, nil, nil, - 691, 690, nil, 682, nil, 679, 678, 677, 687, 680, - 682, nil, 679, 678, 677, 687, 680, nil, 690, nil, - nil, nil, nil, 685, nil, 690, nil, 682, nil, 679, - 678, 677, 687, 680, 698, 697, nil, nil, nil, 691, - 685, nil, 690, nil, nil, nil, nil, 685, nil, 695, - 694, 698, 697, nil, nil, nil, 691, nil, 698, 697, - nil, nil, nil, 691, 685, nil, 682, nil, 679, 678, - 677, 687, 680, nil, nil, 698, 697, nil, nil, nil, - 691, 690, nil, 682, nil, 679, 678, 677, 687, 680, - 682, nil, 679, 678, 677, 687, 680, nil, 690, nil, - nil, nil, nil, 685, nil, 690, nil, nil, nil, nil, - nil, nil, nil, nil, 698, 697, nil, nil, nil, 691, - 685, nil, nil, nil, nil, nil, nil, 685, nil, nil, - nil, 698, 697, nil, nil, nil, 691, nil, 698, 697, - nil, nil, nil, 691 ] - -racc_action_check = [ - 99, 451, 451, 574, 574, 17, 354, 99, 99, 99, - 1, 346, 99, 99, 99, 24, 99, 26, 19, 392, - 44, 44, 24, 347, 99, 393, 99, 99, 99, 62, - 364, 630, 228, 7, 364, 355, 99, 99, 710, 99, - 99, 99, 99, 99, 867, 893, 924, 925, 928, 358, - 645, 560, 17, 896, 975, 896, 44, 44, 316, 19, - 645, 10, 17, 12, 712, 713, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, - 24, 26, 99, 99, 99, 392, 99, 99, 551, 228, - 99, 393, 797, 99, 99, 451, 99, 574, 99, 13, - 99, 15, 99, 99, 26, 99, 99, 99, 99, 99, - 1004, 99, 102, 99, 1005, 354, 62, 827, 630, 102, - 102, 102, 316, 1006, 102, 102, 102, 99, 102, 346, - 99, 99, 99, 99, 346, 99, 102, 99, 102, 102, - 102, 347, 99, 99, 355, 316, 347, 650, 102, 102, - 1007, 102, 102, 102, 102, 102, 710, 1024, 358, 710, - 560, 710, 867, 893, 924, 925, 928, 867, 893, 924, - 925, 928, 975, 712, 713, 714, 634, 975, 102, 102, - 102, 102, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 551, 22, 102, 102, 102, 551, 102, 102, - 1006, 797, 102, 37, 651, 102, 102, 40, 102, 715, - 102, 634, 102, 650, 102, 102, 46, 102, 102, 102, - 102, 102, 441, 102, 113, 102, 827, 1007, 1004, 441, - 441, 441, 1005, 1004, 772, 441, 441, 1005, 441, 102, - 714, 1006, 102, 102, 102, 102, 1006, 102, 209, 102, - 660, 660, 229, 650, 102, 102, 650, 230, 441, 441, - 786, 441, 441, 441, 441, 441, 650, 232, 1007, 772, - 651, 373, 653, 1007, 715, 1024, 14, 14, 373, 814, - 1024, 814, 814, 814, 714, 814, 570, 570, 441, 441, - 441, 441, 441, 441, 441, 441, 441, 441, 441, 441, - 441, 441, 233, 231, 441, 441, 441, 374, 441, 229, - 651, 38, 441, 651, 374, 441, 41, 41, 715, 585, - 441, 237, 441, 651, 441, 441, 786, 441, 441, 441, - 441, 441, 375, 441, 442, 441, 373, 653, 653, 375, - 128, 442, 442, 442, 660, 128, 128, 442, 442, 441, - 442, 3, 441, 441, 270, 441, 3, 441, 38, 442, - 231, 814, 345, 345, 441, 441, 786, 362, 38, 786, - 442, 442, 374, 442, 442, 442, 442, 442, 653, 786, - 570, 653, 284, 585, 585, 570, 945, 387, 945, 945, - 945, 653, 945, 585, 41, 41, 285, 375, 587, 420, - 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, - 442, 442, 442, 442, 457, 288, 442, 442, 442, 362, - 442, 321, 321, 503, 442, 296, 362, 442, 351, 621, - 296, 362, 442, 351, 442, 362, 442, 442, 39, 442, - 442, 442, 442, 442, 622, 442, 442, 442, 388, 300, - 376, 387, 387, 387, 362, 389, 420, 376, 301, 363, - 390, 442, 587, 587, 442, 442, 623, 442, 945, 442, - 303, 457, 587, 623, 623, 623, 442, 442, 623, 623, - 623, 304, 623, 305, 362, 39, 621, 503, 503, 503, - 377, 623, 623, 623, 623, 39, 311, 377, 314, 321, - 321, 622, 623, 623, 503, 623, 623, 623, 623, 623, - 325, 363, 388, 388, 388, 376, 391, 315, 363, 389, - 389, 389, 394, 363, 390, 390, 390, 363, 337, 700, - 700, 337, 623, 623, 623, 623, 623, 623, 623, 623, - 623, 623, 623, 623, 623, 623, 363, 320, 623, 623, - 623, 322, 623, 623, 16, 377, 623, 325, 378, 623, - 623, 16, 623, 326, 623, 378, 623, 325, 623, 623, - 16, 623, 623, 623, 623, 623, 363, 623, 623, 623, - 391, 391, 391, 379, 47, 380, 394, 394, 394, 463, - 379, 47, 380, 623, 329, 435, 623, 623, 623, 623, - 47, 623, 746, 623, 624, 747, 769, 436, 623, 623, - 831, 624, 624, 624, 335, 831, 624, 624, 624, 16, - 624, 463, 339, 378, 340, 463, 463, 381, 383, 464, - 624, 624, 624, 338, 381, 383, 338, 342, 606, 840, - 624, 624, 435, 624, 624, 624, 624, 624, 379, 47, - 380, 227, 435, 308, 436, 802, 802, 352, 227, 746, - 308, 464, 747, 769, 436, 464, 464, 227, 353, 308, - 624, 624, 624, 624, 624, 624, 624, 624, 624, 624, - 624, 624, 624, 624, 836, 606, 624, 624, 624, 836, - 624, 624, 381, 383, 624, 606, 840, 624, 624, 357, - 624, 359, 624, 368, 624, 341, 624, 624, 341, 624, - 624, 624, 624, 624, 748, 624, 227, 624, 308, 986, - 986, 748, 748, 748, 403, 409, 666, 748, 748, 666, - 748, 624, 471, 412, 624, 624, 624, 624, 414, 624, - 81, 624, 717, 417, 421, 431, 624, 624, 471, 471, - 748, 748, 81, 748, 748, 748, 748, 748, 964, 309, - 433, 964, 81, 310, 471, 434, 309, 443, 471, 471, - 310, 471, 471, 453, 465, 309, 466, 467, 468, 310, - 748, 748, 748, 748, 748, 748, 748, 748, 748, 748, - 748, 748, 748, 748, 717, 312, 748, 748, 748, 490, - 748, 717, 312, 494, 748, 510, 717, 748, 511, 514, - 717, 312, 748, 516, 748, 521, 748, 748, 524, 748, - 748, 748, 748, 748, 309, 748, 749, 748, 310, 717, - 533, 534, 535, 749, 749, 749, 799, 536, 548, 749, - 749, 748, 749, 552, 748, 748, 799, 748, 327, 748, - 553, 749, 554, 555, 572, 327, 748, 748, 582, 717, - 312, 590, 749, 749, 327, 749, 749, 749, 749, 749, - 890, 356, 890, 890, 890, 592, 890, 598, 356, 799, - 799, 607, 612, 617, 799, 578, 578, 356, 625, 578, - 578, 578, 749, 749, 749, 749, 749, 749, 749, 749, - 749, 749, 749, 749, 749, 749, 626, 890, 749, 749, - 749, 366, 749, 327, 419, 627, 749, 629, 366, 749, - 633, 419, 635, 637, 749, 639, 749, 366, 749, 749, - 419, 749, 749, 749, 749, 749, 356, 749, 749, 749, - 778, 647, 778, 778, 778, 778, 778, 520, 6, 6, - 6, 6, 6, 749, 520, 778, 749, 749, 27, 749, - 649, 749, 652, 520, 655, 27, 27, 27, 749, 749, - 27, 27, 27, 656, 27, 659, 366, 778, 661, 419, - 670, 478, 671, 27, 27, 27, 778, 778, 778, 778, - 673, 674, 675, 778, 27, 27, 684, 27, 27, 27, - 27, 27, 946, 692, 946, 946, 946, 563, 946, 696, - 699, 702, 520, 478, 563, 708, 711, 478, 478, 778, - 478, 478, 720, 563, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 724, 946, - 27, 27, 27, 743, 745, 27, 754, 27, 27, 775, - 785, 27, 27, 789, 27, 792, 27, 793, 27, 798, - 27, 27, 813, 27, 27, 27, 27, 27, 28, 27, - 27, 27, 563, 815, 820, 28, 28, 28, 823, 828, - 28, 28, 28, 920, 28, 27, 830, 834, 27, 27, - 920, 27, 835, 27, 28, 28, 838, 839, 848, 920, - 27, 849, 851, 852, 28, 28, 853, 28, 28, 28, - 28, 28, 855, 856, 857, 654, 858, 718, 873, 874, - 878, 879, 654, 881, 718, 882, 884, 654, 887, 718, - 889, 654, 900, 718, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, 920, 904, - 28, 28, 28, 917, 921, 28, 927, 28, 28, 947, - 954, 28, 28, 957, 28, 958, 28, 959, 28, 960, - 28, 28, 962, 28, 28, 28, 28, 28, 57, 28, - 654, 28, 718, 971, 976, 57, 57, 57, 977, 978, - 57, 57, 57, 926, 57, 28, 979, 980, 28, 28, - 926, 28, 981, 28, 57, 57, 57, 982, 984, 926, - 28, 987, 1000, 1001, 57, 57, 1003, 57, 57, 57, - 57, 57, 918, 968, 918, 918, 918, 1016, 918, 685, - 968, 685, 685, 685, 999, 685, 999, 999, 999, 968, - 999, 1019, 1020, 1021, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 57, 926, 907, - 57, 57, 57, 1022, 1025, 57, 685, 1026, 57, 907, - 1033, 57, 57, nil, 57, 685, 57, nil, 57, nil, - 57, 57, nil, 57, 57, 57, 57, 57, 968, 57, - nil, 57, 811, nil, 811, 811, 811, nil, 811, nil, - nil, nil, 907, 907, nil, 57, nil, 907, 57, 57, - 57, 57, nil, 57, 437, 57, nil, nil, nil, nil, - 57, 437, 437, 437, nil, nil, 437, 437, 437, 811, - 437, 888, nil, 888, 888, 888, nil, 888, 811, 437, - 437, 437, 983, nil, 983, 983, 983, nil, 983, nil, - 437, 437, nil, 437, 437, 437, 437, 437, 985, nil, - 985, 985, 985, 1015, 985, 1015, 1015, 1015, 888, 1015, - 299, 299, 299, 299, 299, nil, nil, 888, nil, 983, - 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, - 437, 437, 437, 437, nil, 985, 437, 437, 437, nil, - 1015, 437, nil, 437, 437, nil, nil, 437, 437, nil, - 437, nil, 437, nil, 437, nil, 437, 437, nil, 437, - 437, 437, 437, 437, nil, 437, 437, 437, 807, nil, - 807, 807, 807, 807, 807, 334, 334, 334, 334, 334, - nil, 437, nil, 807, 437, 437, 446, 437, nil, 437, - nil, nil, nil, 446, 446, 446, 437, nil, 446, 446, - 446, nil, 446, 483, nil, 807, 508, 508, 508, 508, - 508, 446, 446, 446, 446, nil, 807, 807, nil, 483, - 483, 807, 446, 446, nil, 446, 446, 446, 446, 446, - nil, nil, nil, nil, nil, 483, nil, 483, nil, 483, - 483, nil, 483, 483, nil, nil, 483, nil, 483, nil, - nil, nil, 446, 446, 446, 446, 446, 446, 446, 446, - 446, 446, 446, 446, 446, 446, nil, nil, 446, 446, - 446, 479, nil, 446, nil, nil, 446, nil, nil, 446, - 446, nil, 446, nil, 446, nil, 446, nil, 446, 446, - nil, 446, 446, 446, 446, 446, nil, 446, 446, 446, - nil, nil, nil, 479, nil, nil, nil, 479, 479, nil, - 479, 479, nil, 446, nil, nil, 446, 446, 446, 446, - nil, 446, 447, 446, nil, nil, nil, nil, 446, 447, - 447, 447, nil, nil, 447, 447, 447, 530, 447, nil, - nil, nil, nil, nil, nil, nil, nil, 447, 447, 447, - 447, nil, nil, 530, 530, nil, nil, nil, 447, 447, - nil, 447, 447, 447, 447, 447, nil, nil, nil, 530, - nil, 530, nil, 530, 530, nil, 530, 530, nil, nil, - 530, nil, 530, nil, nil, nil, nil, nil, 447, 447, - 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, - 447, 447, nil, nil, 447, 447, 447, nil, nil, 447, - nil, nil, 447, nil, nil, 447, 447, nil, 447, nil, - 447, nil, 447, nil, 447, 447, nil, 447, 447, 447, - 447, 447, nil, 447, 447, 447, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 447, - nil, nil, 447, 447, 447, 447, nil, 447, 485, 447, - nil, nil, nil, nil, 447, 485, 485, 485, nil, nil, - 485, 485, 485, 469, 485, nil, nil, nil, nil, nil, - nil, nil, nil, 485, 485, nil, nil, nil, nil, 469, - 469, nil, nil, nil, 485, 485, nil, 485, 485, 485, - 485, 485, nil, nil, nil, 469, nil, 469, nil, 469, - 469, nil, 469, 469, nil, nil, nil, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, nil, 21, - 21, nil, nil, 21, 21, 485, nil, nil, nil, nil, - nil, nil, 485, nil, nil, nil, nil, 485, 485, 21, - nil, 21, nil, 21, 21, nil, 21, 21, 21, 21, - 21, nil, 21, nil, nil, nil, nil, nil, nil, nil, - 485, 485, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 21, nil, nil, 485, nil, nil, 485, nil, - nil, nil, nil, 485, 0, 0, 0, 0, 0, 0, - 485, nil, nil, 0, 0, nil, nil, nil, 0, nil, - 0, 0, 0, 0, 0, 0, 0, nil, nil, nil, - nil, nil, 0, 0, 0, 0, 0, 0, 0, nil, - nil, 0, nil, nil, nil, nil, 424, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, nil, - 0, 0, 0, nil, 0, 0, 0, 0, 0, 424, - 424, 424, 424, 424, 424, 424, 424, 424, 424, 424, - nil, 424, 424, nil, nil, 424, 424, nil, 0, nil, - nil, 0, nil, nil, 0, 0, nil, nil, 0, nil, - 0, 424, nil, 424, 0, 424, 424, nil, 424, 424, - 424, 424, 424, 0, 424, nil, nil, nil, 0, 0, - 0, 0, nil, 0, 0, 0, 0, nil, nil, nil, - nil, 0, 0, nil, 424, nil, 424, nil, nil, 0, - nil, 0, 0, 0, 33, 33, 33, 33, 33, 33, - nil, nil, nil, 33, 33, nil, nil, nil, 33, nil, - 33, 33, 33, 33, 33, 33, 33, nil, nil, nil, - nil, nil, 33, 33, 33, 33, 33, 33, 33, nil, - nil, 33, nil, nil, nil, nil, 430, 33, 33, 33, - 33, 33, 33, 33, 33, 33, 33, 33, 33, nil, - 33, 33, 33, nil, 33, 33, 33, 33, 33, 430, - 430, 430, 430, 430, 430, 430, 430, 430, 430, 430, - nil, 430, 430, nil, nil, 430, 430, nil, 33, nil, - nil, 33, nil, nil, 33, 33, nil, nil, 33, nil, - 33, 430, nil, 430, 33, 430, 430, nil, 430, 430, - 430, 430, 430, 33, 430, nil, nil, nil, 33, 33, - 33, 33, nil, 33, 33, 33, 33, nil, nil, nil, - nil, 33, 33, nil, 430, nil, nil, nil, nil, 33, - nil, 33, 33, 33, 126, 126, 126, 126, 126, 126, - nil, nil, nil, 126, 126, nil, nil, nil, 126, nil, - 126, 126, 126, 126, 126, 126, 126, nil, nil, nil, - nil, nil, 126, 126, 126, 126, 126, 126, 126, nil, - nil, 126, nil, nil, nil, nil, nil, 126, 126, 126, - 126, 126, 126, 126, 126, 126, 126, 126, 126, nil, - 126, 126, 126, nil, 126, 126, 126, 126, 126, 282, - 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, - nil, 282, 282, nil, nil, 282, 282, nil, 126, nil, - nil, 126, nil, nil, 126, 126, nil, nil, 126, nil, - 126, 282, nil, 282, 126, 282, 282, nil, 282, 282, - 282, 282, 282, 126, 282, nil, nil, nil, 126, 126, - 126, 126, nil, 126, 126, 126, 126, nil, nil, nil, - nil, 126, 126, nil, 282, nil, nil, nil, nil, 126, - nil, 126, 126, 126, 211, 211, 211, 211, 211, 211, - nil, nil, nil, 211, 211, nil, nil, nil, 211, nil, - 211, 211, 211, 211, 211, 211, 211, nil, nil, nil, - nil, nil, 211, 211, 211, 211, 211, 211, 211, nil, - nil, 211, nil, nil, nil, nil, nil, 211, 211, 211, - 211, 211, 211, 211, 211, 211, 211, 211, 211, nil, - 211, 211, 211, nil, 211, 211, 211, 211, 211, 482, - 482, 482, 482, 482, 482, 482, 482, 482, 482, 482, - nil, 482, 482, nil, nil, 482, 482, nil, 211, nil, - nil, 211, nil, nil, 211, 211, nil, nil, 211, nil, - 211, 482, nil, 482, 211, 482, 482, nil, 482, 482, - 482, 482, 482, 211, 482, nil, nil, nil, 211, 211, - 211, 211, nil, 211, 211, 211, 211, nil, nil, nil, - nil, 211, 211, 482, 482, nil, nil, nil, nil, 211, - nil, 211, 211, 211, 236, 236, 236, 236, 236, 236, - nil, nil, nil, 236, 236, nil, nil, nil, 236, nil, - 236, 236, 236, 236, 236, 236, 236, nil, nil, nil, - nil, nil, 236, 236, 236, 236, 236, 236, 236, nil, - nil, 236, nil, nil, nil, nil, nil, 236, 236, 236, - 236, 236, 236, 236, 236, 236, 236, 236, 236, nil, - 236, 236, 236, nil, 236, 236, 236, 236, 236, 531, - 531, 531, 531, 531, 531, 531, 531, 531, 531, 531, - nil, 531, 531, nil, nil, 531, 531, nil, 236, nil, - nil, 236, nil, nil, 236, 236, nil, nil, 236, nil, - 236, 531, nil, 531, 236, 531, 531, nil, 531, 531, - 531, 531, 531, 236, 531, nil, nil, nil, 236, 236, - 236, 236, nil, 236, 236, 236, 236, nil, nil, nil, - nil, 236, 236, nil, 531, nil, nil, nil, nil, 236, - nil, 236, 236, 236, 302, 302, 302, 302, 302, 302, - nil, nil, nil, 302, 302, nil, nil, nil, 302, nil, - 302, 302, 302, 302, 302, 302, 302, nil, nil, nil, - nil, nil, 302, 302, 302, 302, 302, 302, 302, nil, - nil, 302, nil, nil, nil, nil, nil, 302, 302, 302, - 302, 302, 302, 302, 302, 302, 302, 302, 302, nil, - 302, 302, 302, nil, 302, 302, 302, 302, 302, 751, - 751, 751, 751, 751, 751, 751, 751, 751, 751, 751, - nil, 751, 751, nil, nil, 751, 751, nil, 302, nil, - nil, 302, nil, nil, 302, 302, nil, nil, 302, nil, - 302, 751, nil, 751, 302, 751, 751, nil, 751, 751, - 751, 751, 751, 302, 751, nil, nil, nil, 302, 302, - 302, 302, nil, 302, 302, 302, 302, nil, nil, nil, - nil, 302, 302, nil, 751, nil, nil, nil, nil, 302, - nil, 302, 302, 302, 307, 307, 307, 307, 307, 307, - nil, nil, nil, 307, 307, nil, nil, nil, 307, nil, - 307, 307, 307, 307, 307, 307, 307, nil, nil, nil, - nil, nil, 307, 307, 307, 307, 307, 307, 307, nil, - nil, 307, nil, nil, nil, nil, nil, 307, 307, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, nil, - 307, 307, 307, nil, 307, 307, 307, 307, 307, 845, - 845, 845, 845, 845, 845, 845, 845, 845, 845, 845, - nil, 845, 845, nil, nil, 845, 845, nil, 307, nil, - nil, 307, nil, nil, 307, 307, nil, nil, 307, nil, - 307, 845, nil, 845, 307, 845, 845, nil, 845, 845, - 845, 845, 845, 307, 845, nil, nil, nil, 307, 307, - 307, 307, nil, 307, 307, 307, 307, nil, nil, nil, - nil, 307, 307, nil, 845, nil, nil, nil, nil, 307, - nil, 307, 307, 307, 333, 333, 333, 333, 333, 333, - nil, nil, nil, 333, 333, nil, nil, nil, 333, nil, - 333, 333, 333, 333, 333, 333, 333, nil, nil, nil, - nil, nil, 333, 333, 333, 333, 333, 333, 333, nil, - nil, 333, nil, nil, nil, nil, nil, 333, 333, 333, - 333, 333, 333, 333, 333, 333, 333, 333, 333, nil, - 333, 333, 333, nil, 333, 333, 333, 333, 333, 461, - 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, - nil, 461, 461, nil, nil, 461, 461, nil, 333, nil, - nil, 333, nil, nil, 333, 333, nil, nil, 333, nil, - 333, 461, nil, 461, 333, 461, 461, nil, 461, 461, - 461, 461, 461, 333, 461, nil, nil, nil, 333, 333, - 333, 333, nil, 333, 333, 333, 333, nil, nil, nil, - nil, 333, 333, nil, nil, nil, nil, nil, nil, 333, - nil, 333, 333, 333, 349, 349, 349, 349, 349, 349, - nil, nil, nil, 349, 349, nil, nil, nil, 349, nil, - 349, 349, 349, 349, 349, 349, 349, nil, nil, nil, - nil, nil, 349, 349, 349, 349, 349, 349, 349, nil, - nil, 349, nil, nil, nil, nil, nil, 349, 349, 349, - 349, 349, 349, 349, 349, 349, 349, 349, 349, nil, - 349, 349, 349, nil, 349, 349, 349, 349, 349, 462, - 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, - nil, 462, 462, nil, nil, 462, 462, nil, 349, nil, - nil, 349, nil, nil, 349, 349, nil, nil, 349, nil, - 349, 462, nil, 462, 349, 462, 462, nil, 462, 462, - 462, 462, 462, 349, 462, nil, nil, nil, 349, 349, - 349, 349, nil, 349, 349, 349, 349, nil, nil, nil, - nil, 349, 349, nil, nil, nil, nil, nil, nil, 349, - nil, 349, 349, 349, 350, 350, 350, 350, 350, 350, - nil, nil, nil, 350, 350, nil, nil, nil, 350, nil, - 350, 350, 350, 350, 350, 350, 350, nil, nil, nil, - nil, nil, 350, 350, 350, 350, 350, 350, 350, nil, - nil, 350, nil, nil, nil, nil, nil, 350, 350, 350, - 350, 350, 350, 350, 350, 350, 350, 350, 350, nil, - 350, 350, 350, nil, 350, 350, 350, 350, 350, 472, - 472, 472, 472, 472, 472, 472, nil, nil, 472, 472, - nil, nil, nil, nil, nil, 472, 472, nil, 350, nil, - nil, 350, nil, nil, 350, 350, nil, nil, 350, nil, - 350, 472, nil, 472, 350, 472, 472, nil, 472, 472, - 472, 472, 472, 350, 472, nil, nil, nil, 350, 350, - 350, 350, nil, 350, 350, 350, 350, nil, nil, nil, - nil, 350, 350, nil, nil, nil, nil, nil, nil, 350, - nil, 350, 350, 350, 547, 547, 547, 547, 547, 547, - nil, nil, nil, 547, 547, nil, nil, nil, 547, nil, - 547, 547, 547, 547, 547, 547, 547, nil, nil, nil, - nil, nil, 547, 547, 547, 547, 547, 547, 547, nil, - nil, 547, nil, nil, nil, nil, nil, 547, 547, 547, - 547, 547, 547, 547, 547, 547, 547, 547, 547, nil, - 547, 547, 547, nil, 547, 547, 547, 547, 547, 473, - 473, 473, 473, 473, 473, 473, nil, nil, 473, 473, - nil, nil, nil, nil, nil, 473, 473, nil, 547, nil, - nil, 547, nil, nil, 547, 547, nil, nil, 547, nil, - 547, 473, nil, 473, 547, 473, 473, nil, 473, 473, - 473, 473, 473, 547, 473, nil, nil, nil, 547, 547, - 547, 547, nil, 547, 547, 547, 547, nil, nil, nil, - nil, 547, 547, nil, nil, nil, nil, nil, nil, 547, - nil, 547, 547, 547, 550, 550, 550, 550, 550, 550, - nil, nil, nil, 550, 550, nil, nil, nil, 550, nil, - 550, 550, 550, 550, 550, 550, 550, nil, nil, nil, - nil, nil, 550, 550, 550, 550, 550, 550, 550, nil, - nil, 550, nil, nil, nil, nil, nil, 550, 550, 550, - 550, 550, 550, 550, 550, 550, 550, 550, 550, nil, - 550, 550, 550, nil, 550, 550, 550, 550, 550, 474, - 474, 474, 474, 474, 474, 474, nil, nil, 474, 474, - nil, nil, nil, nil, nil, 474, 474, nil, 550, nil, - nil, 550, nil, nil, 550, 550, nil, nil, 550, nil, - 550, 474, nil, 474, 550, 474, 474, nil, 474, 474, - 474, 474, 474, 550, 474, nil, nil, nil, 550, 550, - 550, 550, nil, 550, 550, 550, 550, nil, nil, nil, - nil, 550, 550, nil, nil, nil, nil, nil, nil, 550, - nil, 550, 550, 550, 571, 571, 571, 571, 571, 571, - nil, nil, nil, 571, 571, nil, nil, nil, 571, nil, - 571, 571, 571, 571, 571, 571, 571, nil, nil, nil, - nil, nil, 571, 571, 571, 571, 571, 571, 571, nil, - nil, 571, nil, nil, nil, nil, nil, 571, 571, 571, - 571, 571, 571, 571, 571, 571, 571, 571, 571, nil, - 571, 571, 571, nil, 571, 571, 571, 571, 571, 475, - 475, 475, 475, 475, 475, 475, nil, nil, 475, 475, - nil, nil, nil, nil, nil, 475, 475, nil, 571, nil, - nil, 571, nil, nil, 571, 571, nil, nil, 571, nil, - 571, 475, nil, 475, 571, 475, 475, nil, 475, 475, - 475, 475, 475, 571, 475, nil, nil, nil, 571, 571, - 571, 571, nil, 571, 571, 571, 571, nil, nil, nil, - nil, 571, 571, nil, nil, nil, nil, nil, nil, 571, - nil, 571, 571, 571, 716, 716, 716, 716, 716, 716, - nil, nil, nil, 716, 716, nil, nil, nil, 716, nil, - 716, 716, 716, 716, 716, 716, 716, nil, nil, nil, - nil, nil, 716, 716, 716, 716, 716, 716, 716, nil, - nil, 716, nil, nil, nil, nil, nil, 716, 716, 716, - 716, 716, 716, 716, 716, 716, 716, 716, 716, nil, - 716, 716, 716, nil, 716, 716, 716, 716, 716, 476, - 476, 476, 476, 476, 476, 476, nil, nil, 476, 476, - nil, nil, nil, nil, nil, 476, 476, nil, 716, nil, - nil, 716, nil, nil, 716, 716, nil, nil, 716, nil, - 716, 476, nil, 476, 716, 476, 476, nil, 476, 476, - 476, 476, 476, 716, 476, nil, nil, nil, 716, 716, - 716, 716, nil, 716, 716, 716, 716, nil, nil, nil, - nil, 716, 716, nil, nil, nil, nil, nil, nil, 716, - nil, 716, 716, 716, 721, 721, 721, 721, 721, 721, - nil, nil, nil, 721, 721, nil, nil, nil, 721, nil, - 721, 721, 721, 721, 721, 721, 721, nil, nil, nil, - nil, nil, 721, 721, 721, 721, 721, 721, 721, nil, - nil, 721, nil, nil, nil, nil, nil, 721, 721, 721, - 721, 721, 721, 721, 721, 721, 721, 721, 721, nil, - 721, 721, 721, nil, 721, 721, 721, 721, 721, 477, - 477, 477, 477, 477, 477, 477, nil, nil, 477, 477, - nil, nil, nil, nil, nil, 477, 477, nil, 721, nil, - nil, 721, nil, nil, 721, 721, nil, nil, 721, nil, - 721, 477, nil, 477, 721, 477, 477, nil, 477, 477, - 477, 477, 477, 721, 477, nil, nil, nil, 721, 721, - 721, 721, nil, 721, 721, 721, 721, nil, nil, nil, - nil, 721, 721, nil, nil, nil, nil, nil, nil, 721, - nil, 721, 721, 721, 725, 725, 725, 725, 725, 725, - nil, nil, nil, 725, 725, nil, nil, nil, 725, nil, - 725, 725, 725, 725, 725, 725, 725, nil, nil, nil, - nil, nil, 725, 725, 725, 725, 725, 725, 725, nil, - nil, 725, nil, nil, nil, nil, nil, 725, 725, 725, - 725, 725, 725, 725, 725, 725, 725, 725, 725, nil, - 725, 725, 725, nil, 725, 725, 725, 725, 725, 480, - 480, 480, 480, 480, 480, 480, nil, nil, 480, 480, - nil, nil, nil, nil, nil, 480, 480, nil, 725, nil, - nil, 725, nil, nil, 725, 725, nil, nil, 725, nil, - 725, 480, nil, 480, 725, 480, 480, nil, 480, 480, - 480, 480, 480, 725, 480, nil, nil, nil, 725, 725, - 725, 725, nil, 725, 725, 725, 725, nil, nil, nil, - nil, 725, 725, nil, nil, nil, nil, nil, nil, 725, - nil, 725, 725, 725, 735, 735, 735, 735, 735, 735, - nil, nil, nil, 735, 735, nil, nil, nil, 735, nil, - 735, 735, 735, 735, 735, 735, 735, nil, nil, nil, - nil, nil, 735, 735, 735, 735, 735, 735, 735, nil, - nil, 735, nil, nil, nil, nil, nil, 735, 735, 735, - 735, 735, 735, 735, 735, 735, 735, 735, 735, nil, - 735, 735, 735, nil, 735, 735, 735, 735, 735, 481, - 481, 481, 481, 481, 481, 481, 481, nil, 481, 481, - nil, nil, nil, nil, nil, 481, 481, nil, 735, nil, - nil, 735, nil, nil, 735, 735, nil, nil, 735, nil, - 735, 481, nil, 481, 735, 481, 481, nil, 481, 481, - 481, 481, 481, 735, 481, nil, nil, nil, 735, 735, - 735, 735, nil, 735, 735, 735, 735, nil, nil, nil, - nil, 735, 735, nil, nil, nil, nil, nil, nil, 735, - nil, 735, 735, 735, 780, 780, 780, 780, 780, 780, - nil, nil, nil, 780, 780, nil, nil, nil, 780, nil, - 780, 780, 780, 780, 780, 780, 780, nil, nil, nil, - nil, nil, 780, 780, 780, 780, 780, 780, 780, nil, - nil, 780, nil, nil, nil, nil, nil, 780, 780, 780, - 780, 780, 780, 780, 780, 780, 780, 780, 780, nil, - 780, 780, 780, nil, 780, 780, 780, 780, 780, 470, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 470, 470, nil, 780, nil, - nil, 780, nil, nil, 780, 780, nil, nil, 780, nil, - 780, 470, nil, 470, 780, 470, 470, nil, 470, 470, - nil, nil, nil, 780, nil, nil, nil, nil, 780, 780, - 780, 780, nil, 780, 780, 780, 780, nil, nil, nil, - nil, 780, 780, nil, nil, nil, nil, nil, nil, 780, - nil, 780, 780, 780, 791, 791, 791, 791, 791, 791, - nil, nil, nil, 791, 791, nil, nil, nil, 791, nil, - 791, 791, 791, 791, 791, 791, 791, nil, nil, nil, - nil, nil, 791, 791, 791, 791, 791, 791, 791, nil, - nil, 791, nil, nil, nil, nil, nil, 791, 791, 791, - 791, 791, 791, 791, 791, 791, 791, 791, 791, nil, - 791, 791, 791, nil, 791, 791, 791, 791, 791, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 791, nil, - nil, 791, nil, nil, 791, 791, nil, nil, 791, nil, - 791, nil, nil, nil, 791, nil, nil, nil, nil, nil, - nil, nil, nil, 791, nil, nil, nil, nil, 791, 791, - 791, 791, nil, 791, 791, 791, 791, nil, nil, nil, - nil, 791, 791, nil, nil, nil, nil, nil, nil, 791, - nil, 791, 791, 791, 826, 826, 826, 826, 826, 826, - nil, nil, nil, 826, 826, nil, nil, nil, 826, nil, - 826, 826, 826, 826, 826, 826, 826, nil, nil, nil, - nil, nil, 826, 826, 826, 826, 826, 826, 826, nil, - nil, 826, nil, nil, nil, nil, nil, 826, 826, 826, - 826, 826, 826, 826, 826, 826, 826, 826, 826, nil, - 826, 826, 826, nil, 826, 826, 826, 826, 826, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 826, nil, - nil, 826, nil, nil, 826, 826, nil, nil, 826, nil, - 826, nil, nil, nil, 826, nil, nil, nil, nil, nil, - nil, nil, nil, 826, nil, nil, nil, nil, 826, 826, - 826, 826, nil, 826, 826, 826, 826, nil, nil, nil, - nil, 826, 826, nil, nil, nil, nil, nil, nil, 826, - nil, 826, 826, 826, 832, 832, 832, 832, 832, 832, - nil, nil, nil, 832, 832, nil, nil, nil, 832, nil, - 832, 832, 832, 832, 832, 832, 832, nil, nil, nil, - nil, nil, 832, 832, 832, 832, 832, 832, 832, nil, - nil, 832, nil, nil, nil, nil, nil, 832, 832, 832, - 832, 832, 832, 832, 832, 832, 832, 832, 832, nil, - 832, 832, 832, nil, 832, 832, 832, 832, 832, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 832, nil, - nil, 832, nil, nil, 832, 832, nil, nil, 832, nil, - 832, nil, nil, nil, 832, nil, nil, nil, nil, nil, - nil, nil, nil, 832, nil, nil, nil, nil, 832, 832, - 832, 832, nil, 832, 832, 832, 832, nil, nil, nil, - nil, 832, 832, nil, nil, nil, nil, nil, nil, 832, - nil, 832, 832, 832, 846, 846, 846, 846, 846, 846, - nil, nil, nil, 846, 846, nil, nil, nil, 846, nil, - 846, 846, 846, 846, 846, 846, 846, nil, nil, nil, - nil, nil, 846, 846, 846, 846, 846, 846, 846, nil, - nil, 846, nil, nil, nil, nil, nil, 846, 846, 846, - 846, 846, 846, 846, 846, 846, 846, 846, 846, nil, - 846, 846, 846, nil, 846, 846, 846, 846, 846, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 846, nil, - nil, 846, nil, nil, 846, 846, nil, nil, 846, nil, - 846, nil, nil, nil, 846, nil, nil, nil, nil, nil, - nil, nil, nil, 846, nil, nil, nil, nil, 846, 846, - 846, 846, nil, 846, 846, 846, 846, nil, nil, nil, - nil, 846, 846, nil, nil, nil, nil, nil, nil, 846, - nil, 846, 846, 846, 864, 864, 864, 864, 864, 864, - nil, nil, nil, 864, 864, nil, nil, nil, 864, nil, - 864, 864, 864, 864, 864, 864, 864, nil, nil, nil, - nil, nil, 864, 864, 864, 864, 864, 864, 864, nil, - nil, 864, nil, nil, nil, nil, nil, 864, 864, 864, - 864, 864, 864, 864, 864, 864, 864, 864, 864, nil, - 864, 864, 864, nil, 864, 864, 864, 864, 864, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 864, nil, - nil, 864, nil, nil, 864, 864, nil, nil, 864, nil, - 864, nil, nil, nil, 864, nil, nil, nil, nil, nil, - nil, nil, nil, 864, nil, nil, nil, nil, 864, 864, - 864, 864, nil, 864, 864, 864, 864, nil, nil, nil, - nil, 864, 864, nil, nil, nil, nil, nil, nil, 864, - nil, 864, 864, 864, 923, 923, 923, 923, 923, 923, - nil, nil, nil, 923, 923, nil, nil, nil, 923, nil, - 923, 923, 923, 923, 923, 923, 923, nil, nil, nil, - nil, nil, 923, 923, 923, 923, 923, 923, 923, nil, - nil, 923, nil, nil, nil, nil, nil, 923, 923, 923, - 923, 923, 923, 923, 923, 923, 923, 923, 923, nil, - 923, 923, 923, nil, 923, 923, 923, 923, 923, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 923, nil, - nil, 923, nil, nil, 923, 923, nil, nil, 923, nil, - 923, nil, nil, nil, 923, nil, nil, nil, nil, nil, - nil, nil, nil, 923, nil, nil, nil, nil, 923, 923, - 923, 923, nil, 923, 923, 923, 923, nil, nil, nil, - nil, 923, 923, nil, nil, nil, nil, nil, nil, 923, - nil, 923, 923, 923, 930, 930, 930, 930, 930, 930, - nil, nil, nil, 930, 930, nil, nil, nil, 930, nil, - 930, 930, 930, 930, 930, 930, 930, nil, nil, nil, - nil, nil, 930, 930, 930, 930, 930, 930, 930, nil, - nil, 930, nil, nil, nil, nil, nil, 930, 930, 930, - 930, 930, 930, 930, 930, 930, 930, 930, 930, nil, - 930, 930, 930, nil, 930, 930, 930, 930, 930, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 930, nil, - nil, 930, nil, nil, 930, 930, nil, nil, 930, nil, - 930, nil, nil, nil, 930, nil, nil, nil, nil, nil, - nil, nil, nil, 930, nil, nil, nil, nil, 930, 930, - 930, 930, nil, 930, 930, 930, 930, nil, nil, nil, - nil, 930, 930, nil, nil, nil, nil, nil, nil, 930, - nil, 930, 930, 930, 931, 931, 931, 931, 931, 931, - nil, nil, nil, 931, 931, nil, nil, nil, 931, nil, - 931, 931, 931, 931, 931, 931, 931, nil, nil, nil, - nil, nil, 931, 931, 931, 931, 931, 931, 931, nil, - nil, 931, nil, nil, nil, nil, nil, 931, 931, 931, - 931, 931, 931, 931, 931, 931, 931, 931, 931, nil, - 931, 931, 931, nil, 931, 931, 931, 931, 931, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 931, nil, - nil, 931, nil, nil, 931, 931, nil, nil, 931, nil, - 931, nil, nil, nil, 931, nil, nil, nil, nil, nil, - nil, nil, nil, 931, nil, nil, nil, nil, 931, 931, - 931, 931, nil, 931, 931, 931, 931, nil, nil, nil, - nil, 931, 931, nil, nil, nil, nil, nil, nil, 931, - nil, 931, 931, 931, 948, 948, 948, 948, 948, 948, - nil, nil, nil, 948, 948, nil, nil, nil, 948, nil, - 948, 948, 948, 948, 948, 948, 948, nil, nil, nil, - nil, nil, 948, 948, 948, 948, 948, 948, 948, nil, - nil, 948, nil, nil, nil, nil, nil, 948, 948, 948, - 948, 948, 948, 948, 948, 948, 948, 948, 948, nil, - 948, 948, 948, nil, 948, 948, 948, 948, 948, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 948, nil, - nil, 948, nil, nil, 948, 948, nil, nil, 948, nil, - 948, nil, nil, nil, 948, nil, nil, nil, nil, nil, - nil, nil, nil, 948, nil, nil, nil, nil, 948, 948, - 948, 948, nil, 948, 948, 948, 948, nil, nil, nil, - nil, 948, 948, nil, nil, nil, nil, nil, nil, 948, - nil, 948, 948, 948, 953, 953, 953, 953, 953, 953, - nil, nil, nil, 953, 953, nil, nil, nil, 953, nil, - 953, 953, 953, 953, 953, 953, 953, nil, nil, nil, - nil, nil, 953, 953, 953, 953, 953, 953, 953, nil, - nil, 953, nil, nil, nil, nil, nil, 953, 953, 953, - 953, 953, 953, 953, 953, 953, 953, 953, 953, nil, - 953, 953, 953, nil, 953, 953, 953, 953, 953, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 953, nil, - nil, 953, nil, nil, 953, 953, nil, nil, 953, nil, - 953, nil, nil, nil, 953, nil, nil, nil, nil, nil, - nil, nil, nil, 953, nil, nil, nil, nil, 953, 953, - 953, 953, nil, 953, 953, 953, 953, nil, nil, nil, - nil, 953, 953, nil, nil, nil, nil, nil, nil, 953, - nil, 953, 953, 953, 5, 5, 5, 5, 5, nil, - nil, nil, 5, 5, nil, nil, nil, 5, nil, 5, - 5, 5, 5, 5, 5, 5, nil, nil, nil, nil, - nil, 5, 5, 5, 5, 5, 5, 5, nil, nil, - 5, nil, nil, nil, nil, nil, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, nil, 5, - 5, 5, nil, 5, 5, 5, 5, 5, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 5, nil, nil, - 5, nil, nil, 5, 5, nil, nil, 5, nil, 5, - nil, nil, nil, 5, nil, nil, nil, nil, nil, nil, - nil, nil, 5, nil, nil, nil, nil, 5, 5, 5, - 5, nil, 5, 5, 5, 5, nil, nil, nil, nil, - 5, 5, nil, nil, nil, 20, 20, 20, 5, 20, - 5, 5, 5, 20, 20, nil, nil, nil, 20, nil, - 20, 20, 20, 20, 20, 20, 20, nil, nil, nil, - nil, nil, 20, 20, 20, 20, 20, 20, 20, nil, - nil, 20, nil, nil, nil, nil, nil, nil, 20, nil, - nil, 20, 20, 20, 20, 20, 20, 20, 20, nil, - 20, 20, 20, nil, 20, 20, 20, 20, 20, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 20, nil, - nil, 20, nil, nil, 20, 20, nil, nil, 20, nil, - nil, nil, nil, nil, 20, nil, nil, nil, nil, nil, - nil, nil, nil, 20, nil, nil, nil, nil, 20, 20, - 20, 20, nil, 20, 20, 20, 20, nil, nil, nil, - nil, 20, 20, nil, nil, nil, 29, 29, 29, 20, - 29, 20, 20, 20, 29, 29, nil, nil, nil, 29, - nil, 29, 29, 29, 29, 29, 29, 29, nil, nil, - nil, nil, nil, 29, 29, 29, 29, 29, 29, 29, - nil, nil, 29, nil, nil, nil, nil, nil, nil, 29, - nil, nil, 29, 29, 29, 29, 29, 29, 29, 29, - 29, 29, 29, 29, nil, 29, 29, 29, 29, 29, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 29, - nil, nil, 29, nil, nil, 29, 29, nil, nil, 29, - nil, 29, nil, 29, nil, 29, nil, nil, 29, nil, - nil, nil, nil, nil, 29, nil, nil, nil, nil, 29, - 29, 29, 29, nil, 29, 29, 29, 29, nil, nil, - nil, nil, 29, 29, nil, nil, nil, 30, 30, 30, - 29, 30, 29, 29, 29, 30, 30, nil, nil, nil, - 30, nil, 30, 30, 30, 30, 30, 30, 30, nil, - nil, nil, nil, nil, 30, 30, 30, 30, 30, 30, - 30, nil, nil, 30, nil, nil, nil, nil, nil, nil, - 30, nil, nil, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, nil, 30, 30, 30, 30, - 30, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 30, nil, nil, 30, nil, nil, 30, 30, nil, nil, - 30, nil, 30, nil, 30, nil, 30, nil, nil, 30, - nil, nil, nil, nil, nil, 30, nil, nil, nil, nil, - 30, 30, 30, 30, nil, 30, 30, 30, 30, nil, - nil, nil, nil, 30, 30, nil, nil, nil, 31, 31, - 31, 30, 31, 30, 30, 30, 31, 31, nil, nil, - nil, 31, nil, 31, 31, 31, 31, 31, 31, 31, - nil, nil, nil, nil, nil, 31, 31, 31, 31, 31, - 31, 31, nil, nil, 31, nil, nil, nil, nil, nil, - nil, 31, nil, nil, 31, 31, 31, 31, 31, 31, - 31, 31, 31, 31, 31, 31, nil, 31, 31, 31, - 31, 31, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 31, nil, nil, 31, nil, nil, 31, 31, nil, - nil, 31, nil, 31, nil, 31, nil, 31, nil, nil, - 31, nil, nil, nil, nil, nil, 31, nil, nil, nil, - nil, 31, 31, 31, 31, nil, 31, 31, 31, 31, - nil, nil, nil, nil, 31, 31, nil, nil, nil, 34, - 34, 34, 31, 34, 31, 31, 31, 34, 34, nil, - nil, nil, 34, nil, 34, 34, 34, 34, 34, 34, - 34, nil, nil, nil, nil, nil, 34, 34, 34, 34, - 34, 34, 34, nil, nil, 34, nil, nil, nil, nil, - nil, nil, 34, nil, nil, 34, 34, 34, 34, 34, - 34, 34, 34, nil, 34, 34, 34, nil, 34, 34, - nil, nil, 34, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 34, nil, nil, 34, nil, nil, 34, 34, - nil, nil, 34, nil, 34, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 34, 34, 34, 34, nil, 34, 34, 34, - 34, nil, nil, nil, nil, 34, 34, nil, nil, nil, - 35, 35, 35, 34, 35, 34, 34, 34, 35, 35, - nil, nil, nil, 35, nil, 35, 35, 35, 35, 35, - 35, 35, nil, nil, nil, nil, nil, 35, 35, 35, - 35, 35, 35, 35, nil, nil, 35, nil, nil, nil, - nil, nil, nil, 35, nil, nil, 35, 35, 35, 35, - 35, 35, 35, 35, nil, 35, 35, 35, nil, 35, - 35, nil, nil, 35, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 35, nil, nil, 35, nil, nil, 35, - 35, nil, nil, 35, nil, nil, 914, nil, 914, 914, - 914, 914, 914, nil, nil, nil, nil, nil, nil, nil, - nil, 914, nil, 35, 35, 35, 35, nil, 35, 35, - 35, 35, nil, nil, nil, nil, 35, 35, nil, nil, - nil, 35, nil, 914, 35, nil, 35, 35, 35, 42, - 42, 42, nil, 42, 914, 914, nil, 42, 42, 914, - nil, nil, 42, nil, 42, 42, 42, 42, 42, 42, - 42, nil, nil, nil, nil, nil, 42, 42, 42, 42, - 42, 42, 42, nil, nil, 42, nil, nil, nil, nil, - nil, nil, 42, nil, nil, 42, 42, 42, 42, 42, - 42, 42, 42, nil, 42, 42, 42, nil, 42, 42, - 42, 42, 42, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 42, nil, nil, 42, nil, nil, 42, 42, - nil, nil, 42, nil, nil, nil, nil, nil, 42, nil, - nil, nil, nil, nil, nil, nil, nil, 42, nil, nil, - nil, nil, 42, 42, 42, 42, nil, 42, 42, 42, - 42, nil, nil, nil, nil, 42, 42, nil, nil, nil, - 43, 43, 43, 42, 43, 42, 42, 42, 43, 43, - nil, nil, nil, 43, nil, 43, 43, 43, 43, 43, - 43, 43, nil, nil, nil, nil, nil, 43, 43, 43, - 43, 43, 43, 43, nil, nil, 43, nil, nil, nil, - nil, nil, nil, 43, nil, nil, 43, 43, 43, 43, - 43, 43, 43, 43, nil, 43, 43, 43, nil, 43, - 43, 43, 43, 43, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 43, nil, nil, 43, nil, nil, 43, - 43, nil, nil, 43, nil, nil, nil, nil, nil, 43, - nil, nil, nil, nil, nil, nil, nil, nil, 43, nil, - nil, nil, nil, 43, 43, 43, 43, nil, 43, 43, - 43, 43, nil, nil, nil, nil, 43, 43, nil, nil, - nil, 45, 45, 45, 43, 45, 43, 43, 43, 45, - 45, nil, nil, nil, 45, nil, 45, 45, 45, 45, - 45, 45, 45, nil, nil, nil, nil, nil, 45, 45, - 45, 45, 45, 45, 45, nil, nil, 45, nil, nil, - nil, nil, nil, nil, 45, nil, nil, 45, 45, 45, - 45, 45, 45, 45, 45, nil, 45, 45, 45, nil, - 45, 45, 45, 45, 45, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 45, nil, nil, 45, nil, nil, - 45, 45, nil, nil, 45, nil, nil, nil, nil, nil, - 45, nil, nil, nil, nil, nil, nil, nil, nil, 45, - nil, nil, nil, nil, 45, 45, 45, 45, nil, 45, - 45, 45, 45, nil, nil, nil, nil, 45, 45, nil, - nil, nil, nil, nil, nil, 45, nil, 45, 45, 45, - 59, 59, 59, 59, 59, nil, nil, nil, 59, 59, - nil, nil, nil, 59, nil, 59, 59, 59, 59, 59, - 59, 59, nil, nil, nil, nil, nil, 59, 59, 59, - 59, 59, 59, 59, nil, nil, 59, nil, nil, nil, - nil, nil, 59, 59, nil, 59, 59, 59, 59, 59, - 59, 59, 59, 59, nil, 59, 59, 59, nil, 59, - 59, 59, 59, 59, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 59, nil, nil, 59, nil, nil, 59, - 59, nil, nil, 59, nil, 59, nil, nil, nil, 59, - nil, nil, nil, nil, nil, nil, nil, nil, 59, nil, - nil, nil, nil, 59, 59, 59, 59, nil, 59, 59, - 59, 59, nil, nil, nil, nil, 59, 59, nil, nil, - nil, 60, 60, 60, 59, 60, 59, 59, 59, 60, - 60, nil, nil, nil, 60, nil, 60, 60, 60, 60, - 60, 60, 60, nil, nil, nil, nil, nil, 60, 60, - 60, 60, 60, 60, 60, nil, nil, 60, nil, nil, - nil, nil, nil, nil, 60, nil, nil, 60, 60, 60, - 60, 60, 60, 60, 60, 60, 60, 60, 60, nil, - 60, 60, 60, 60, 60, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 60, nil, nil, 60, nil, nil, - 60, 60, nil, nil, 60, nil, 60, nil, nil, nil, - 60, nil, nil, 60, nil, nil, nil, nil, nil, 60, - nil, nil, nil, nil, 60, 60, 60, 60, nil, 60, - 60, 60, 60, nil, nil, nil, nil, 60, 60, nil, - nil, nil, 61, 61, 61, 60, 61, 60, 60, 60, - 61, 61, nil, nil, nil, 61, nil, 61, 61, 61, - 61, 61, 61, 61, nil, nil, nil, nil, nil, 61, - 61, 61, 61, 61, 61, 61, nil, nil, 61, nil, - nil, nil, nil, nil, nil, 61, nil, nil, 61, 61, - 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, - nil, 61, 61, 61, 61, 61, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 61, nil, nil, 61, nil, - nil, 61, 61, nil, nil, 61, nil, nil, nil, nil, - nil, 61, nil, nil, 61, nil, nil, nil, nil, nil, - 61, nil, nil, nil, nil, 61, 61, 61, 61, nil, - 61, 61, 61, 61, nil, nil, nil, nil, 61, 61, - nil, nil, nil, 64, 64, 64, 61, 64, 61, 61, - 61, 64, 64, nil, nil, nil, 64, nil, 64, 64, - 64, 64, 64, 64, 64, nil, nil, nil, nil, nil, - 64, 64, 64, 64, 64, 64, 64, nil, nil, 64, - nil, nil, nil, nil, nil, nil, 64, nil, nil, 64, - 64, 64, 64, 64, 64, 64, 64, nil, 64, 64, - 64, nil, 64, 64, 64, 64, 64, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 64, nil, nil, 64, - nil, nil, 64, 64, nil, nil, 64, nil, nil, nil, - nil, nil, 64, nil, nil, nil, nil, nil, nil, nil, - nil, 64, nil, nil, nil, nil, 64, 64, 64, 64, - nil, 64, 64, 64, 64, nil, nil, nil, nil, 64, - 64, nil, nil, nil, 65, 65, 65, 64, 65, 64, - 64, 64, 65, 65, nil, nil, nil, 65, nil, 65, - 65, 65, 65, 65, 65, 65, nil, nil, nil, nil, - nil, 65, 65, 65, 65, 65, 65, 65, nil, nil, - 65, nil, nil, nil, nil, nil, nil, 65, nil, nil, - 65, 65, 65, 65, 65, 65, 65, 65, nil, 65, - 65, 65, nil, 65, 65, 65, 65, 65, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 65, nil, nil, - 65, nil, nil, 65, 65, nil, nil, 65, nil, nil, - nil, nil, nil, 65, nil, nil, nil, nil, nil, nil, - nil, nil, 65, nil, nil, nil, nil, 65, 65, 65, - 65, nil, 65, 65, 65, 65, nil, nil, nil, nil, - 65, 65, nil, nil, nil, 68, 68, 68, 65, 68, - 65, 65, 65, 68, 68, nil, nil, nil, 68, nil, - 68, 68, 68, 68, 68, 68, 68, nil, nil, nil, - nil, nil, 68, 68, 68, 68, 68, 68, 68, nil, - nil, 68, nil, nil, nil, nil, nil, nil, 68, nil, - nil, 68, 68, 68, 68, 68, 68, 68, 68, nil, - 68, 68, 68, nil, 68, 68, 68, 68, 68, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 68, nil, - nil, 68, nil, nil, 68, 68, nil, nil, 68, nil, - nil, nil, nil, nil, 68, nil, nil, nil, nil, nil, - nil, nil, nil, 68, nil, nil, nil, nil, 68, 68, - 68, 68, nil, 68, 68, 68, 68, nil, nil, nil, - nil, 68, 68, 68, nil, nil, nil, nil, 68, 68, - nil, 68, 68, 68, 69, 69, 69, nil, 69, nil, - nil, nil, 69, 69, nil, nil, nil, 69, nil, 69, - 69, 69, 69, 69, 69, 69, nil, nil, nil, nil, - nil, 69, 69, 69, 69, 69, 69, 69, nil, nil, - 69, nil, nil, nil, nil, nil, nil, 69, nil, nil, - 69, 69, 69, 69, 69, 69, 69, 69, nil, 69, - 69, 69, nil, 69, 69, nil, nil, 69, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 69, nil, nil, - 69, nil, nil, 69, 69, nil, nil, 69, nil, 69, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 69, 69, 69, - 69, nil, 69, 69, 69, 69, nil, nil, nil, nil, - 69, 69, nil, nil, nil, 70, 70, 70, 69, 70, - 69, 69, 69, 70, 70, nil, nil, nil, 70, nil, - 70, 70, 70, 70, 70, 70, 70, nil, nil, nil, - nil, nil, 70, 70, 70, 70, 70, 70, 70, nil, - nil, 70, nil, nil, nil, nil, nil, nil, 70, nil, - nil, 70, 70, 70, 70, 70, 70, 70, 70, nil, - 70, 70, 70, nil, 70, 70, nil, nil, 70, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 70, nil, nil, 70, nil, - nil, 70, nil, nil, 70, 70, nil, nil, 70, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 70, 70, - 70, 70, nil, 70, 70, 70, 70, nil, nil, nil, - nil, 70, 70, nil, nil, nil, 71, 71, 71, 70, - 71, 70, 70, 70, 71, 71, nil, nil, nil, 71, - nil, 71, 71, 71, 71, 71, 71, 71, nil, nil, - nil, nil, nil, 71, 71, 71, 71, 71, 71, 71, - nil, nil, 71, nil, nil, nil, nil, nil, nil, 71, - nil, nil, 71, 71, 71, 71, 71, 71, 71, 71, - nil, 71, 71, 71, nil, 71, 71, nil, nil, 71, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 71, - nil, nil, 71, nil, nil, 71, 71, nil, nil, 71, - nil, nil, 936, nil, 936, 936, 936, 936, 936, nil, - nil, nil, nil, nil, nil, nil, nil, 936, nil, 71, - 71, 71, 71, nil, 71, 71, 71, 71, nil, nil, - nil, nil, 71, 71, nil, nil, nil, nil, nil, 936, - 71, nil, 71, 71, 71, 115, 115, 115, 115, 115, - 936, 936, nil, 115, 115, 936, nil, nil, 115, nil, - 115, 115, 115, 115, 115, 115, 115, nil, nil, nil, - nil, nil, 115, 115, 115, 115, 115, 115, 115, nil, - nil, 115, nil, nil, nil, nil, nil, 115, 115, 115, - 115, 115, 115, 115, 115, 115, 115, 115, 115, nil, - 115, 115, 115, nil, 115, 115, 115, 115, 115, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 115, nil, - nil, 115, nil, nil, 115, 115, nil, nil, 115, nil, - 115, nil, nil, nil, 115, nil, nil, nil, nil, nil, - nil, nil, nil, 115, nil, nil, nil, nil, 115, 115, - 115, 115, nil, 115, 115, 115, 115, nil, nil, nil, - nil, 115, 115, nil, nil, nil, nil, nil, 115, 115, - nil, 115, 115, 115, 120, 120, 120, nil, 120, nil, - nil, nil, 120, 120, nil, nil, nil, 120, nil, 120, - 120, 120, 120, 120, 120, 120, nil, nil, nil, nil, - nil, 120, 120, 120, 120, 120, 120, 120, nil, nil, - 120, nil, nil, nil, nil, nil, nil, 120, nil, nil, - 120, 120, 120, 120, 120, 120, 120, 120, nil, 120, - 120, 120, nil, 120, 120, 120, 120, 120, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 120, nil, nil, - 120, nil, nil, 120, 120, nil, nil, 120, nil, nil, - nil, nil, nil, 120, nil, nil, nil, nil, nil, nil, - nil, nil, 120, nil, nil, nil, nil, 120, 120, 120, - 120, nil, 120, 120, 120, 120, nil, nil, nil, nil, - 120, 120, nil, nil, nil, 121, 121, 121, 120, 121, - 120, 120, 120, 121, 121, nil, nil, nil, 121, nil, - 121, 121, 121, 121, 121, 121, 121, nil, nil, nil, - nil, nil, 121, 121, 121, 121, 121, 121, 121, nil, - nil, 121, nil, nil, nil, nil, nil, nil, 121, nil, - nil, 121, 121, 121, 121, 121, 121, 121, 121, nil, - 121, 121, 121, nil, 121, 121, 121, 121, 121, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 121, nil, - nil, 121, nil, nil, 121, 121, nil, nil, 121, nil, - nil, nil, nil, nil, 121, nil, nil, nil, nil, nil, - nil, nil, nil, 121, nil, nil, nil, nil, 121, 121, - 121, 121, nil, 121, 121, 121, 121, nil, nil, nil, - nil, 121, 121, nil, nil, nil, 122, 122, 122, 121, - 122, 121, 121, 121, 122, 122, nil, nil, nil, 122, - nil, 122, 122, 122, 122, 122, 122, 122, nil, nil, - nil, nil, nil, 122, 122, 122, 122, 122, 122, 122, - nil, nil, 122, nil, nil, nil, nil, nil, nil, 122, - nil, nil, 122, 122, 122, 122, 122, 122, 122, 122, - nil, 122, 122, 122, nil, 122, 122, 122, 122, 122, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 122, - nil, nil, 122, nil, nil, 122, 122, nil, nil, 122, - nil, nil, nil, nil, nil, 122, nil, nil, nil, nil, - nil, nil, nil, nil, 122, nil, nil, nil, nil, 122, - 122, 122, 122, nil, 122, 122, 122, 122, nil, nil, - nil, nil, 122, 122, nil, nil, nil, 123, 123, 123, - 122, 123, 122, 122, 122, 123, 123, nil, nil, nil, - 123, nil, 123, 123, 123, 123, 123, 123, 123, nil, - nil, nil, nil, nil, 123, 123, 123, 123, 123, 123, - 123, nil, nil, 123, nil, nil, nil, nil, nil, nil, - 123, nil, nil, 123, 123, 123, 123, 123, 123, 123, - 123, nil, 123, 123, 123, nil, 123, 123, 123, 123, - 123, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 123, nil, nil, 123, nil, nil, 123, 123, nil, nil, - 123, nil, nil, nil, nil, nil, 123, nil, nil, nil, - nil, nil, nil, nil, nil, 123, nil, nil, nil, nil, - 123, 123, 123, 123, nil, 123, 123, 123, 123, nil, - nil, nil, nil, 123, 123, nil, nil, nil, nil, nil, - nil, 123, nil, 123, 123, 123, 124, 124, 124, 124, - 124, nil, nil, nil, 124, 124, nil, nil, nil, 124, - nil, 124, 124, 124, 124, 124, 124, 124, nil, nil, - nil, nil, nil, 124, 124, 124, 124, 124, 124, 124, - nil, nil, 124, nil, nil, nil, nil, nil, 124, 124, - nil, 124, 124, 124, 124, 124, 124, 124, 124, 124, - nil, 124, 124, 124, nil, 124, 124, 124, 124, 124, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 124, - nil, nil, 124, nil, nil, 124, 124, nil, nil, 124, - nil, 124, nil, nil, nil, 124, nil, nil, nil, nil, - nil, nil, nil, nil, 124, nil, nil, nil, nil, 124, - 124, 124, 124, nil, 124, 124, 124, 124, nil, nil, - nil, nil, 124, 124, nil, nil, nil, 212, 212, 212, - 124, 212, 124, 124, 124, 212, 212, nil, nil, nil, - 212, nil, 212, 212, 212, 212, 212, 212, 212, nil, - nil, nil, nil, nil, 212, 212, 212, 212, 212, 212, - 212, nil, nil, 212, nil, nil, nil, nil, nil, nil, - 212, nil, nil, 212, 212, 212, 212, 212, 212, 212, - 212, nil, 212, 212, 212, nil, 212, 212, 212, 212, - 212, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 212, nil, nil, 212, nil, nil, 212, 212, nil, nil, - 212, nil, 212, nil, nil, nil, 212, nil, nil, nil, - nil, nil, nil, nil, nil, 212, nil, nil, nil, nil, - 212, 212, 212, 212, nil, 212, 212, 212, 212, nil, - nil, nil, nil, 212, 212, nil, nil, nil, 213, 213, - 213, 212, 213, 212, 212, 212, 213, 213, nil, nil, - nil, 213, nil, 213, 213, 213, 213, 213, 213, 213, - nil, nil, nil, nil, nil, 213, 213, 213, 213, 213, - 213, 213, nil, nil, 213, nil, nil, nil, nil, nil, - nil, 213, nil, nil, 213, 213, 213, 213, 213, 213, - 213, 213, nil, 213, 213, 213, nil, 213, 213, 213, - 213, 213, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 213, nil, nil, 213, nil, nil, 213, 213, nil, - nil, 213, nil, 213, nil, nil, nil, 213, nil, nil, - nil, nil, nil, nil, nil, nil, 213, nil, nil, nil, - nil, 213, 213, 213, 213, nil, 213, 213, 213, 213, - nil, nil, nil, nil, 213, 213, nil, nil, nil, 214, - 214, 214, 213, 214, 213, 213, 213, 214, 214, nil, - nil, nil, 214, nil, 214, 214, 214, 214, 214, 214, - 214, nil, nil, nil, nil, nil, 214, 214, 214, 214, - 214, 214, 214, nil, nil, 214, nil, nil, nil, nil, - nil, nil, 214, nil, nil, 214, 214, 214, 214, 214, - 214, 214, 214, nil, 214, 214, 214, nil, 214, 214, - 214, 214, 214, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 214, nil, nil, 214, nil, nil, 214, 214, - nil, nil, 214, nil, nil, nil, nil, nil, 214, nil, - nil, nil, nil, nil, nil, nil, nil, 214, nil, nil, - nil, nil, 214, 214, 214, 214, nil, 214, 214, 214, - 214, nil, nil, nil, nil, 214, 214, nil, nil, nil, - 215, 215, 215, 214, 215, 214, 214, 214, 215, 215, - nil, nil, nil, 215, nil, 215, 215, 215, 215, 215, - 215, 215, nil, nil, nil, nil, nil, 215, 215, 215, - 215, 215, 215, 215, nil, nil, 215, nil, nil, nil, - nil, nil, nil, 215, nil, nil, 215, 215, 215, 215, - 215, 215, 215, 215, nil, 215, 215, 215, nil, 215, - 215, 215, 215, 215, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 215, nil, nil, 215, nil, nil, 215, - 215, nil, nil, 215, nil, nil, nil, nil, nil, 215, - nil, nil, nil, nil, nil, nil, nil, nil, 215, nil, - nil, nil, nil, 215, 215, 215, 215, nil, 215, 215, - 215, 215, nil, nil, nil, nil, 215, 215, nil, nil, - nil, 216, 216, 216, 215, 216, 215, 215, 215, 216, - 216, nil, nil, nil, 216, nil, 216, 216, 216, 216, - 216, 216, 216, nil, nil, nil, nil, nil, 216, 216, - 216, 216, 216, 216, 216, nil, nil, 216, nil, nil, - nil, nil, nil, nil, 216, nil, nil, 216, 216, 216, - 216, 216, 216, 216, 216, nil, 216, 216, 216, nil, - 216, 216, 216, 216, 216, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 216, nil, nil, 216, nil, nil, - 216, 216, nil, nil, 216, nil, nil, nil, nil, nil, - 216, nil, nil, nil, nil, nil, nil, nil, nil, 216, - nil, nil, nil, nil, 216, 216, 216, 216, nil, 216, - 216, 216, 216, nil, nil, nil, nil, 216, 216, nil, - nil, nil, 217, 217, 217, 216, 217, 216, 216, 216, - 217, 217, nil, nil, nil, 217, nil, 217, 217, 217, - 217, 217, 217, 217, nil, nil, nil, nil, nil, 217, - 217, 217, 217, 217, 217, 217, nil, nil, 217, nil, - nil, nil, nil, nil, nil, 217, nil, nil, 217, 217, - 217, 217, 217, 217, 217, 217, 217, 217, 217, 217, - nil, 217, 217, 217, 217, 217, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 217, nil, nil, 217, nil, - nil, 217, 217, nil, nil, 217, nil, 217, nil, 217, - nil, 217, nil, nil, 217, nil, nil, nil, nil, nil, - 217, nil, nil, nil, nil, 217, 217, 217, 217, nil, - 217, 217, 217, 217, nil, nil, nil, nil, 217, 217, - nil, nil, nil, 222, 222, 222, 217, 222, 217, 217, - 217, 222, 222, nil, nil, nil, 222, nil, 222, 222, - 222, 222, 222, 222, 222, nil, nil, nil, nil, nil, - 222, 222, 222, 222, 222, 222, 222, nil, nil, 222, - nil, nil, nil, nil, nil, nil, 222, nil, nil, 222, - 222, 222, 222, 222, 222, 222, 222, nil, 222, 222, - 222, nil, 222, 222, 222, 222, 222, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 222, nil, nil, 222, - nil, nil, 222, 222, nil, nil, 222, nil, nil, nil, - nil, nil, 222, nil, nil, nil, nil, nil, nil, nil, - nil, 222, nil, nil, nil, nil, 222, 222, 222, 222, - nil, 222, 222, 222, 222, nil, nil, nil, nil, 222, - 222, nil, nil, nil, 223, 223, 223, 222, 223, 222, - 222, 222, 223, 223, nil, nil, nil, 223, nil, 223, - 223, 223, 223, 223, 223, 223, nil, nil, nil, nil, - nil, 223, 223, 223, 223, 223, 223, 223, nil, nil, - 223, nil, nil, nil, nil, nil, nil, 223, nil, nil, - 223, 223, 223, 223, 223, 223, 223, 223, nil, 223, - 223, 223, nil, 223, 223, 223, 223, 223, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 223, nil, nil, - 223, nil, nil, 223, 223, nil, nil, 223, nil, nil, - nil, nil, nil, 223, nil, nil, nil, nil, nil, nil, - nil, nil, 223, nil, nil, nil, nil, 223, 223, 223, - 223, nil, 223, 223, 223, 223, nil, nil, nil, nil, - 223, 223, nil, nil, nil, 224, 224, 224, 223, 224, - 223, 223, 223, 224, 224, nil, nil, nil, 224, nil, - 224, 224, 224, 224, 224, 224, 224, nil, nil, nil, - nil, nil, 224, 224, 224, 224, 224, 224, 224, nil, - nil, 224, nil, nil, nil, nil, nil, nil, 224, nil, - nil, 224, 224, 224, 224, 224, 224, 224, 224, nil, - 224, 224, 224, nil, 224, 224, 224, 224, 224, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 224, nil, - nil, 224, nil, nil, 224, 224, nil, nil, 224, nil, - nil, nil, nil, nil, 224, nil, nil, nil, nil, nil, - nil, nil, nil, 224, nil, nil, nil, nil, 224, 224, - 224, 224, nil, 224, 224, 224, 224, nil, nil, nil, - nil, 224, 224, 224, nil, nil, 235, 235, 235, 224, - 235, 224, 224, 224, 235, 235, nil, nil, nil, 235, - nil, 235, 235, 235, 235, 235, 235, 235, nil, nil, - nil, nil, nil, 235, 235, 235, 235, 235, 235, 235, - nil, nil, 235, nil, nil, nil, nil, nil, nil, 235, - nil, nil, 235, 235, 235, 235, 235, 235, 235, 235, - nil, 235, 235, 235, nil, 235, 235, 235, 235, 235, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 235, - nil, nil, 235, nil, nil, 235, 235, nil, nil, 235, - nil, nil, nil, nil, nil, 235, nil, nil, nil, nil, - nil, nil, nil, nil, 235, nil, nil, nil, nil, 235, - 235, 235, 235, nil, 235, 235, 235, 235, nil, nil, - nil, nil, 235, 235, nil, nil, nil, 238, 238, 238, - 235, 238, 235, 235, 235, 238, 238, nil, nil, nil, - 238, nil, 238, 238, 238, 238, 238, 238, 238, nil, - nil, nil, nil, nil, 238, 238, 238, 238, 238, 238, - 238, nil, nil, 238, nil, nil, nil, nil, nil, nil, - 238, nil, nil, 238, 238, 238, 238, 238, 238, 238, - 238, nil, 238, 238, 238, nil, 238, 238, 238, 238, - 238, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 238, nil, nil, 238, nil, nil, 238, 238, nil, nil, - 238, nil, nil, nil, nil, nil, 238, nil, nil, nil, - nil, nil, nil, nil, nil, 238, nil, nil, nil, nil, - 238, 238, 238, 238, nil, 238, 238, 238, 238, nil, - nil, nil, nil, 238, 238, nil, nil, nil, 239, 239, - 239, 238, 239, 238, 238, 238, 239, 239, nil, nil, - nil, 239, nil, 239, 239, 239, 239, 239, 239, 239, - nil, nil, nil, nil, nil, 239, 239, 239, 239, 239, - 239, 239, nil, nil, 239, nil, nil, nil, nil, nil, - nil, 239, nil, nil, 239, 239, 239, 239, 239, 239, - 239, 239, nil, 239, 239, 239, nil, 239, 239, 239, - 239, 239, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 239, nil, nil, 239, nil, nil, 239, 239, nil, - nil, 239, nil, nil, nil, nil, nil, 239, nil, nil, - nil, nil, nil, nil, nil, nil, 239, nil, nil, nil, - nil, 239, 239, 239, 239, nil, 239, 239, 239, 239, - nil, nil, nil, nil, 239, 239, nil, nil, nil, 240, - 240, 240, 239, 240, 239, 239, 239, 240, 240, nil, - nil, nil, 240, nil, 240, 240, 240, 240, 240, 240, - 240, nil, nil, nil, nil, nil, 240, 240, 240, 240, - 240, 240, 240, nil, nil, 240, nil, nil, nil, nil, - nil, nil, 240, nil, nil, 240, 240, 240, 240, 240, - 240, 240, 240, nil, 240, 240, 240, nil, 240, 240, - 240, 240, 240, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 240, nil, nil, 240, nil, nil, 240, 240, - nil, nil, 240, nil, nil, nil, nil, nil, 240, nil, - nil, nil, nil, nil, nil, nil, nil, 240, nil, nil, - nil, nil, 240, 240, 240, 240, nil, 240, 240, 240, - 240, nil, nil, nil, nil, 240, 240, nil, nil, nil, - 241, 241, 241, 240, 241, 240, 240, 240, 241, 241, - nil, nil, nil, 241, nil, 241, 241, 241, 241, 241, - 241, 241, nil, nil, nil, nil, nil, 241, 241, 241, - 241, 241, 241, 241, nil, nil, 241, nil, nil, nil, - nil, nil, nil, 241, nil, nil, 241, 241, 241, 241, - 241, 241, 241, 241, nil, 241, 241, 241, nil, 241, - 241, 241, 241, 241, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 241, nil, nil, 241, nil, nil, 241, - 241, nil, nil, 241, nil, nil, nil, nil, nil, 241, - nil, nil, nil, nil, nil, nil, nil, nil, 241, nil, - nil, nil, nil, 241, 241, 241, 241, nil, 241, 241, - 241, 241, nil, nil, nil, nil, 241, 241, nil, nil, - nil, 242, 242, 242, 241, 242, 241, 241, 241, 242, - 242, nil, nil, nil, 242, nil, 242, 242, 242, 242, - 242, 242, 242, nil, nil, nil, nil, nil, 242, 242, - 242, 242, 242, 242, 242, nil, nil, 242, nil, nil, - nil, nil, nil, nil, 242, nil, nil, 242, 242, 242, - 242, 242, 242, 242, 242, nil, 242, 242, 242, nil, - 242, 242, 242, 242, 242, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 242, nil, nil, 242, nil, nil, - 242, 242, nil, nil, 242, nil, nil, nil, nil, nil, - 242, nil, nil, nil, nil, nil, nil, nil, nil, 242, - nil, nil, nil, nil, 242, 242, 242, 242, nil, 242, - 242, 242, 242, nil, nil, nil, nil, 242, 242, nil, - nil, nil, 243, 243, 243, 242, 243, 242, 242, 242, - 243, 243, nil, nil, nil, 243, nil, 243, 243, 243, - 243, 243, 243, 243, nil, nil, nil, nil, nil, 243, - 243, 243, 243, 243, 243, 243, nil, nil, 243, nil, - nil, nil, nil, nil, nil, 243, nil, nil, 243, 243, - 243, 243, 243, 243, 243, 243, nil, 243, 243, 243, - nil, 243, 243, 243, 243, 243, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 243, nil, nil, 243, nil, - nil, 243, 243, nil, nil, 243, nil, nil, nil, nil, - nil, 243, nil, nil, nil, nil, nil, nil, nil, nil, - 243, nil, nil, nil, nil, 243, 243, 243, 243, nil, - 243, 243, 243, 243, nil, nil, nil, nil, 243, 243, - nil, nil, nil, 244, 244, 244, 243, 244, 243, 243, - 243, 244, 244, nil, nil, nil, 244, nil, 244, 244, - 244, 244, 244, 244, 244, nil, nil, nil, nil, nil, - 244, 244, 244, 244, 244, 244, 244, nil, nil, 244, - nil, nil, nil, nil, nil, nil, 244, nil, nil, 244, - 244, 244, 244, 244, 244, 244, 244, nil, 244, 244, - 244, nil, 244, 244, 244, 244, 244, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 244, nil, nil, 244, - nil, nil, 244, 244, nil, nil, 244, nil, nil, nil, - nil, nil, 244, nil, nil, nil, nil, nil, nil, nil, - nil, 244, nil, nil, nil, nil, 244, 244, 244, 244, - nil, 244, 244, 244, 244, nil, nil, nil, nil, 244, - 244, nil, nil, nil, 245, 245, 245, 244, 245, 244, - 244, 244, 245, 245, nil, nil, nil, 245, nil, 245, - 245, 245, 245, 245, 245, 245, nil, nil, nil, nil, - nil, 245, 245, 245, 245, 245, 245, 245, nil, nil, - 245, nil, nil, nil, nil, nil, nil, 245, nil, nil, - 245, 245, 245, 245, 245, 245, 245, 245, nil, 245, - 245, 245, nil, 245, 245, 245, 245, 245, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 245, nil, nil, - 245, nil, nil, 245, 245, nil, nil, 245, nil, nil, - nil, nil, nil, 245, nil, nil, nil, nil, nil, nil, - nil, nil, 245, nil, nil, nil, nil, 245, 245, 245, - 245, nil, 245, 245, 245, 245, nil, nil, nil, nil, - 245, 245, nil, nil, nil, 246, 246, 246, 245, 246, - 245, 245, 245, 246, 246, nil, nil, nil, 246, nil, - 246, 246, 246, 246, 246, 246, 246, nil, nil, nil, - nil, nil, 246, 246, 246, 246, 246, 246, 246, nil, - nil, 246, nil, nil, nil, nil, nil, nil, 246, nil, - nil, 246, 246, 246, 246, 246, 246, 246, 246, nil, - 246, 246, 246, nil, 246, 246, 246, 246, 246, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 246, nil, - nil, 246, nil, nil, 246, 246, nil, nil, 246, nil, - nil, nil, nil, nil, 246, nil, nil, nil, nil, nil, - nil, nil, nil, 246, nil, nil, nil, nil, 246, 246, - 246, 246, nil, 246, 246, 246, 246, nil, nil, nil, - nil, 246, 246, nil, nil, nil, 247, 247, 247, 246, - 247, 246, 246, 246, 247, 247, nil, nil, nil, 247, - nil, 247, 247, 247, 247, 247, 247, 247, nil, nil, - nil, nil, nil, 247, 247, 247, 247, 247, 247, 247, - nil, nil, 247, nil, nil, nil, nil, nil, nil, 247, - nil, nil, 247, 247, 247, 247, 247, 247, 247, 247, - nil, 247, 247, 247, nil, 247, 247, 247, 247, 247, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 247, - nil, nil, 247, nil, nil, 247, 247, nil, nil, 247, - nil, nil, nil, nil, nil, 247, nil, nil, nil, nil, - nil, nil, nil, nil, 247, nil, nil, nil, nil, 247, - 247, 247, 247, nil, 247, 247, 247, 247, nil, nil, - nil, nil, 247, 247, nil, nil, nil, 248, 248, 248, - 247, 248, 247, 247, 247, 248, 248, nil, nil, nil, - 248, nil, 248, 248, 248, 248, 248, 248, 248, nil, - nil, nil, nil, nil, 248, 248, 248, 248, 248, 248, - 248, nil, nil, 248, nil, nil, nil, nil, nil, nil, - 248, nil, nil, 248, 248, 248, 248, 248, 248, 248, - 248, nil, 248, 248, 248, nil, 248, 248, 248, 248, - 248, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 248, nil, nil, 248, nil, nil, 248, 248, nil, nil, - 248, nil, nil, nil, nil, nil, 248, nil, nil, nil, - nil, nil, nil, nil, nil, 248, nil, nil, nil, nil, - 248, 248, 248, 248, nil, 248, 248, 248, 248, nil, - nil, nil, nil, 248, 248, nil, nil, nil, 249, 249, - 249, 248, 249, 248, 248, 248, 249, 249, nil, nil, - nil, 249, nil, 249, 249, 249, 249, 249, 249, 249, - nil, nil, nil, nil, nil, 249, 249, 249, 249, 249, - 249, 249, nil, nil, 249, nil, nil, nil, nil, nil, - nil, 249, nil, nil, 249, 249, 249, 249, 249, 249, - 249, 249, nil, 249, 249, 249, nil, 249, 249, 249, - 249, 249, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 249, nil, nil, 249, nil, nil, 249, 249, nil, - nil, 249, nil, nil, nil, nil, nil, 249, nil, nil, - nil, nil, nil, nil, nil, nil, 249, nil, nil, nil, - nil, 249, 249, 249, 249, nil, 249, 249, 249, 249, - nil, nil, nil, nil, 249, 249, nil, nil, nil, 250, - 250, 250, 249, 250, 249, 249, 249, 250, 250, nil, - nil, nil, 250, nil, 250, 250, 250, 250, 250, 250, - 250, nil, nil, nil, nil, nil, 250, 250, 250, 250, - 250, 250, 250, nil, nil, 250, nil, nil, nil, nil, - nil, nil, 250, nil, nil, 250, 250, 250, 250, 250, - 250, 250, 250, nil, 250, 250, 250, nil, 250, 250, - 250, 250, 250, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 250, nil, nil, 250, nil, nil, 250, 250, - nil, nil, 250, nil, nil, nil, nil, nil, 250, nil, - nil, nil, nil, nil, nil, nil, nil, 250, nil, nil, - nil, nil, 250, 250, 250, 250, nil, 250, 250, 250, - 250, nil, nil, nil, nil, 250, 250, nil, nil, nil, - 251, 251, 251, 250, 251, 250, 250, 250, 251, 251, - nil, nil, nil, 251, nil, 251, 251, 251, 251, 251, - 251, 251, nil, nil, nil, nil, nil, 251, 251, 251, - 251, 251, 251, 251, nil, nil, 251, nil, nil, nil, - nil, nil, nil, 251, nil, nil, 251, 251, 251, 251, - 251, 251, 251, 251, nil, 251, 251, 251, nil, 251, - 251, 251, 251, 251, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 251, nil, nil, 251, nil, nil, 251, - 251, nil, nil, 251, nil, nil, nil, nil, nil, 251, - nil, nil, nil, nil, nil, nil, nil, nil, 251, nil, - nil, nil, nil, 251, 251, 251, 251, nil, 251, 251, - 251, 251, nil, nil, nil, nil, 251, 251, nil, nil, - nil, 252, 252, 252, 251, 252, 251, 251, 251, 252, - 252, nil, nil, nil, 252, nil, 252, 252, 252, 252, - 252, 252, 252, nil, nil, nil, nil, nil, 252, 252, - 252, 252, 252, 252, 252, nil, nil, 252, nil, nil, - nil, nil, nil, nil, 252, nil, nil, 252, 252, 252, - 252, 252, 252, 252, 252, nil, 252, 252, 252, nil, - 252, 252, 252, 252, 252, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 252, nil, nil, 252, nil, nil, - 252, 252, nil, nil, 252, nil, nil, nil, nil, nil, - 252, nil, nil, nil, nil, nil, nil, nil, nil, 252, - nil, nil, nil, nil, 252, 252, 252, 252, nil, 252, - 252, 252, 252, nil, nil, nil, nil, 252, 252, nil, - nil, nil, 253, 253, 253, 252, 253, 252, 252, 252, - 253, 253, nil, nil, nil, 253, nil, 253, 253, 253, - 253, 253, 253, 253, nil, nil, nil, nil, nil, 253, - 253, 253, 253, 253, 253, 253, nil, nil, 253, nil, - nil, nil, nil, nil, nil, 253, nil, nil, 253, 253, - 253, 253, 253, 253, 253, 253, nil, 253, 253, 253, - nil, 253, 253, 253, 253, 253, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 253, nil, nil, 253, nil, - nil, 253, 253, nil, nil, 253, nil, nil, nil, nil, - nil, 253, nil, nil, nil, nil, nil, nil, nil, nil, - 253, nil, nil, nil, nil, 253, 253, 253, 253, nil, - 253, 253, 253, 253, nil, nil, nil, nil, 253, 253, - nil, nil, nil, 254, 254, 254, 253, 254, 253, 253, - 253, 254, 254, nil, nil, nil, 254, nil, 254, 254, - 254, 254, 254, 254, 254, nil, nil, nil, nil, nil, - 254, 254, 254, 254, 254, 254, 254, nil, nil, 254, - nil, nil, nil, nil, nil, nil, 254, nil, nil, 254, - 254, 254, 254, 254, 254, 254, 254, nil, 254, 254, - 254, nil, 254, 254, 254, 254, 254, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 254, nil, nil, 254, - nil, nil, 254, 254, nil, nil, 254, nil, nil, nil, - nil, nil, 254, nil, nil, nil, nil, nil, nil, nil, - nil, 254, nil, nil, nil, nil, 254, 254, 254, 254, - nil, 254, 254, 254, 254, nil, nil, nil, nil, 254, - 254, nil, nil, nil, 255, 255, 255, 254, 255, 254, - 254, 254, 255, 255, nil, nil, nil, 255, nil, 255, - 255, 255, 255, 255, 255, 255, nil, nil, nil, nil, - nil, 255, 255, 255, 255, 255, 255, 255, nil, nil, - 255, nil, nil, nil, nil, nil, nil, 255, nil, nil, - 255, 255, 255, 255, 255, 255, 255, 255, nil, 255, - 255, 255, nil, 255, 255, 255, 255, 255, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 255, nil, nil, - 255, nil, nil, 255, 255, nil, nil, 255, nil, nil, - nil, nil, nil, 255, nil, nil, nil, nil, nil, nil, - nil, nil, 255, nil, nil, nil, nil, 255, 255, 255, - 255, nil, 255, 255, 255, 255, nil, nil, nil, nil, - 255, 255, nil, nil, nil, 256, 256, 256, 255, 256, - 255, 255, 255, 256, 256, nil, nil, nil, 256, nil, - 256, 256, 256, 256, 256, 256, 256, nil, nil, nil, - nil, nil, 256, 256, 256, 256, 256, 256, 256, nil, - nil, 256, nil, nil, nil, nil, nil, nil, 256, nil, - nil, 256, 256, 256, 256, 256, 256, 256, 256, nil, - 256, 256, 256, nil, 256, 256, 256, 256, 256, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 256, nil, - nil, 256, nil, nil, 256, 256, nil, nil, 256, nil, - nil, nil, nil, nil, 256, nil, nil, nil, nil, nil, - nil, nil, nil, 256, nil, nil, nil, nil, 256, 256, - 256, 256, nil, 256, 256, 256, 256, nil, nil, nil, - nil, 256, 256, nil, nil, nil, 257, 257, 257, 256, - 257, 256, 256, 256, 257, 257, nil, nil, nil, 257, - nil, 257, 257, 257, 257, 257, 257, 257, nil, nil, - nil, nil, nil, 257, 257, 257, 257, 257, 257, 257, - nil, nil, 257, nil, nil, nil, nil, nil, nil, 257, - nil, nil, 257, 257, 257, 257, 257, 257, 257, 257, - nil, 257, 257, 257, nil, 257, 257, 257, 257, 257, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 257, - nil, nil, 257, nil, nil, 257, 257, nil, nil, 257, - nil, nil, nil, nil, nil, 257, nil, nil, nil, nil, - nil, nil, nil, nil, 257, nil, nil, nil, nil, 257, - 257, 257, 257, nil, 257, 257, 257, 257, nil, nil, - nil, nil, 257, 257, nil, nil, nil, 258, 258, 258, - 257, 258, 257, 257, 257, 258, 258, nil, nil, nil, - 258, nil, 258, 258, 258, 258, 258, 258, 258, nil, - nil, nil, nil, nil, 258, 258, 258, 258, 258, 258, - 258, nil, nil, 258, nil, nil, nil, nil, nil, nil, - 258, nil, nil, 258, 258, 258, 258, 258, 258, 258, - 258, nil, 258, 258, 258, nil, 258, 258, 258, 258, - 258, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 258, nil, nil, 258, nil, nil, 258, 258, nil, nil, - 258, nil, nil, nil, nil, nil, 258, nil, nil, nil, - nil, nil, nil, nil, nil, 258, nil, nil, nil, nil, - 258, 258, 258, 258, nil, 258, 258, 258, 258, nil, - nil, nil, nil, 258, 258, nil, nil, nil, 259, 259, - 259, 258, 259, 258, 258, 258, 259, 259, nil, nil, - nil, 259, nil, 259, 259, 259, 259, 259, 259, 259, - nil, nil, nil, nil, nil, 259, 259, 259, 259, 259, - 259, 259, nil, nil, 259, nil, nil, nil, nil, nil, - nil, 259, nil, nil, 259, 259, 259, 259, 259, 259, - 259, 259, nil, 259, 259, 259, nil, 259, 259, 259, - 259, 259, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 259, nil, nil, 259, nil, nil, 259, 259, nil, - nil, 259, nil, nil, nil, nil, nil, 259, nil, nil, - nil, nil, nil, nil, nil, nil, 259, nil, nil, nil, - nil, 259, 259, 259, 259, nil, 259, 259, 259, 259, - nil, nil, nil, nil, 259, 259, nil, nil, nil, 264, - 264, 264, 259, 264, 259, 259, 259, 264, 264, nil, - nil, nil, 264, nil, 264, 264, 264, 264, 264, 264, - 264, nil, nil, nil, nil, nil, 264, 264, 264, 264, - 264, 264, 264, nil, nil, 264, nil, nil, nil, nil, - nil, nil, 264, nil, nil, 264, 264, 264, 264, 264, - 264, 264, 264, nil, 264, 264, 264, nil, 264, 264, - 264, 264, 264, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 264, nil, nil, 264, nil, nil, 264, 264, - nil, nil, 264, nil, nil, nil, nil, nil, 264, nil, - nil, nil, nil, nil, nil, nil, nil, 264, nil, nil, - nil, nil, 264, 264, 264, 264, nil, 264, 264, 264, - 264, nil, nil, nil, nil, 264, 264, nil, nil, nil, - 271, 271, 271, 264, 271, 264, 264, 264, 271, 271, - nil, nil, nil, 271, nil, 271, 271, 271, 271, 271, - 271, 271, nil, nil, nil, nil, nil, 271, 271, 271, - 271, 271, 271, 271, nil, nil, 271, nil, nil, nil, - nil, nil, nil, 271, nil, nil, 271, 271, 271, 271, - 271, 271, 271, 271, 271, 271, 271, 271, nil, 271, - 271, 271, 271, 271, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 271, nil, nil, 271, nil, nil, 271, - 271, nil, nil, 271, nil, 271, nil, 271, nil, 271, - nil, nil, 271, nil, nil, nil, nil, nil, 271, nil, - nil, nil, nil, 271, 271, 271, 271, nil, 271, 271, - 271, 271, nil, nil, nil, nil, 271, 271, nil, nil, - nil, 272, 272, 272, 271, 272, 271, 271, 271, 272, - 272, nil, nil, nil, 272, nil, 272, 272, 272, 272, - 272, 272, 272, nil, nil, nil, nil, nil, 272, 272, - 272, 272, 272, 272, 272, nil, nil, 272, nil, nil, - nil, nil, nil, nil, 272, nil, nil, 272, 272, 272, - 272, 272, 272, 272, 272, 272, 272, 272, 272, nil, - 272, 272, 272, 272, 272, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 272, nil, nil, 272, nil, nil, - 272, 272, nil, nil, 272, nil, 272, nil, 272, nil, - 272, nil, nil, 272, nil, nil, nil, nil, nil, 272, - nil, nil, nil, nil, 272, 272, 272, 272, nil, 272, - 272, 272, 272, nil, nil, nil, nil, 272, 272, nil, - nil, nil, 280, 280, 280, 272, 280, 272, 272, 272, - 280, 280, nil, nil, nil, 280, nil, 280, 280, 280, - 280, 280, 280, 280, nil, nil, nil, nil, nil, 280, - 280, 280, 280, 280, 280, 280, nil, nil, 280, nil, - nil, nil, nil, nil, nil, 280, nil, nil, 280, 280, - 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, - nil, 280, 280, 280, 280, 280, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 280, nil, nil, 280, nil, - nil, 280, 280, nil, nil, 280, nil, 280, nil, 280, - nil, 280, nil, nil, 280, nil, nil, nil, nil, nil, - 280, nil, nil, nil, nil, 280, 280, 280, 280, nil, - 280, 280, 280, 280, nil, nil, nil, nil, 280, 280, - 280, nil, nil, 287, 287, 287, 280, 287, 280, 280, - 280, 287, 287, nil, nil, nil, 287, nil, 287, 287, - 287, 287, 287, 287, 287, nil, nil, nil, nil, nil, - 287, 287, 287, 287, 287, 287, 287, nil, nil, 287, - nil, nil, nil, nil, nil, nil, 287, nil, nil, 287, - 287, 287, 287, 287, 287, 287, 287, nil, 287, 287, - 287, nil, 287, 287, 287, 287, 287, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 287, nil, nil, 287, - nil, nil, 287, 287, nil, nil, 287, nil, nil, nil, - nil, nil, 287, nil, nil, nil, nil, nil, nil, nil, - nil, 287, nil, nil, nil, nil, 287, 287, 287, 287, - nil, 287, 287, 287, 287, nil, nil, nil, nil, 287, - 287, nil, nil, nil, 289, 289, 289, 287, 289, 287, - 287, 287, 289, 289, nil, nil, nil, 289, nil, 289, - 289, 289, 289, 289, 289, 289, nil, nil, nil, nil, - nil, 289, 289, 289, 289, 289, 289, 289, nil, nil, - 289, nil, nil, nil, nil, nil, nil, 289, nil, nil, - 289, 289, 289, 289, 289, 289, 289, 289, nil, 289, - 289, 289, nil, 289, 289, 289, 289, 289, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 289, nil, nil, - 289, nil, nil, 289, 289, nil, nil, 289, nil, nil, - nil, nil, nil, 289, nil, nil, nil, nil, nil, nil, - nil, nil, 289, nil, nil, nil, nil, 289, 289, 289, - 289, nil, 289, 289, 289, 289, nil, nil, nil, nil, - 289, 289, nil, nil, nil, 292, 292, 292, 289, 292, - 289, 289, 289, 292, 292, nil, nil, nil, 292, nil, - 292, 292, 292, 292, 292, 292, 292, nil, nil, nil, - nil, nil, 292, 292, 292, 292, 292, 292, 292, nil, - nil, 292, nil, nil, nil, nil, nil, nil, 292, nil, - nil, 292, 292, 292, 292, 292, 292, 292, 292, nil, - 292, 292, 292, nil, 292, 292, 292, 292, 292, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 292, nil, - nil, 292, nil, nil, 292, 292, nil, nil, 292, nil, - nil, nil, nil, nil, 292, nil, nil, nil, nil, nil, - nil, nil, nil, 292, nil, nil, nil, nil, 292, 292, - 292, 292, nil, 292, 292, 292, 292, nil, nil, nil, - nil, 292, 292, nil, nil, nil, 293, 293, 293, 292, - 293, 292, 292, 292, 293, 293, nil, nil, nil, 293, - nil, 293, 293, 293, 293, 293, 293, 293, nil, nil, - nil, nil, nil, 293, 293, 293, 293, 293, 293, 293, - nil, nil, 293, nil, nil, nil, nil, nil, nil, 293, - nil, nil, 293, 293, 293, 293, 293, 293, 293, 293, - nil, 293, 293, 293, nil, 293, 293, 293, 293, 293, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 293, - nil, nil, 293, nil, nil, 293, 293, nil, nil, 293, - nil, nil, nil, nil, nil, 293, nil, nil, nil, nil, - nil, nil, nil, nil, 293, nil, nil, nil, nil, 293, - 293, 293, 293, nil, 293, 293, 293, 293, nil, nil, - nil, nil, 293, 293, nil, nil, nil, nil, nil, nil, - 293, nil, 293, 293, 293, 298, 298, 298, 298, 298, - nil, nil, nil, 298, 298, nil, nil, nil, 298, nil, - 298, 298, 298, 298, 298, 298, 298, nil, nil, nil, - nil, nil, 298, 298, 298, 298, 298, 298, 298, nil, - nil, 298, nil, nil, nil, nil, nil, 298, 298, nil, - 298, 298, 298, 298, 298, 298, 298, 298, 298, nil, - 298, 298, 298, nil, 298, 298, 298, 298, 298, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 298, nil, - nil, 298, nil, nil, 298, 298, nil, nil, 298, nil, - 298, nil, nil, nil, 298, nil, nil, nil, nil, nil, - nil, nil, nil, 298, nil, nil, nil, nil, 298, 298, - 298, 298, nil, 298, 298, 298, 298, nil, nil, nil, - nil, 298, 298, nil, nil, nil, 306, 306, 306, 298, - 306, 298, 298, 298, 306, 306, nil, nil, nil, 306, - nil, 306, 306, 306, 306, 306, 306, 306, nil, nil, - nil, nil, nil, 306, 306, 306, 306, 306, 306, 306, - nil, nil, 306, nil, nil, nil, nil, nil, nil, 306, - nil, nil, 306, 306, 306, 306, 306, 306, 306, 306, - nil, 306, 306, 306, nil, 306, 306, nil, nil, 306, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 306, - nil, nil, 306, nil, nil, 306, 306, nil, nil, 306, - nil, nil, 938, nil, 938, 938, 938, 938, 938, nil, - nil, nil, nil, nil, nil, nil, nil, 938, nil, 306, - 306, 306, 306, nil, 306, 306, 306, 306, nil, nil, - nil, nil, 306, 306, nil, nil, nil, 306, nil, 938, - 306, nil, 306, 306, 306, 323, 323, 323, nil, 323, - 938, 938, nil, 323, 323, 938, nil, nil, 323, nil, - 323, 323, 323, 323, 323, 323, 323, nil, nil, nil, - nil, nil, 323, 323, 323, 323, 323, 323, 323, nil, - nil, 323, nil, nil, nil, nil, nil, nil, 323, nil, - nil, 323, 323, 323, 323, 323, 323, 323, 323, nil, - 323, 323, 323, nil, 323, 323, nil, nil, 323, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 323, nil, - nil, 323, nil, nil, 323, 323, nil, nil, 323, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 323, 323, - 323, 323, nil, 323, 323, 323, 323, nil, nil, nil, - nil, 323, 323, nil, nil, nil, 330, 330, 330, 323, - 330, 323, 323, 323, 330, 330, nil, nil, nil, 330, - nil, 330, 330, 330, 330, 330, 330, 330, nil, nil, - nil, nil, nil, 330, 330, 330, 330, 330, 330, 330, - nil, nil, 330, nil, nil, nil, nil, nil, nil, 330, - nil, nil, 330, 330, 330, 330, 330, 330, 330, 330, - nil, 330, 330, 330, nil, 330, 330, 330, 330, 330, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 330, - nil, nil, 330, nil, nil, 330, 330, nil, nil, 330, - nil, nil, nil, nil, nil, 330, nil, nil, nil, nil, - nil, nil, nil, nil, 330, nil, nil, nil, nil, 330, - 330, 330, 330, nil, 330, 330, 330, 330, nil, nil, - nil, nil, 330, 330, nil, nil, nil, 332, 332, 332, - 330, 332, 330, 330, 330, 332, 332, nil, nil, nil, - 332, nil, 332, 332, 332, 332, 332, 332, 332, nil, - nil, nil, nil, nil, 332, 332, 332, 332, 332, 332, - 332, nil, nil, 332, nil, nil, nil, nil, nil, nil, - 332, nil, nil, 332, 332, 332, 332, 332, 332, 332, - 332, nil, 332, 332, 332, nil, 332, 332, 332, 332, - 332, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 332, nil, nil, 332, 332, nil, 332, 332, nil, nil, - 332, nil, nil, nil, nil, nil, 332, nil, nil, nil, - nil, nil, nil, nil, nil, 332, nil, nil, nil, nil, - 332, 332, 332, 332, nil, 332, 332, 332, 332, nil, - nil, nil, nil, 332, 332, nil, nil, nil, 348, 348, - 348, 332, 348, 332, 332, 332, 348, 348, nil, nil, - nil, 348, nil, 348, 348, 348, 348, 348, 348, 348, - nil, nil, nil, nil, nil, 348, 348, 348, 348, 348, - 348, 348, nil, nil, 348, nil, nil, nil, nil, nil, - nil, 348, nil, nil, 348, 348, 348, 348, 348, 348, - 348, 348, nil, 348, 348, 348, nil, 348, 348, 348, - 348, 348, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 348, nil, nil, 348, nil, nil, 348, 348, nil, - nil, 348, nil, nil, nil, nil, nil, 348, nil, nil, - nil, nil, nil, nil, nil, nil, 348, nil, nil, nil, - nil, 348, 348, 348, 348, nil, 348, 348, 348, 348, - nil, nil, nil, nil, 348, 348, nil, nil, nil, 369, - 369, 369, 348, 369, 348, 348, 348, 369, 369, nil, - nil, nil, 369, nil, 369, 369, 369, 369, 369, 369, - 369, nil, nil, nil, nil, nil, 369, 369, 369, 369, - 369, 369, 369, nil, nil, 369, nil, nil, nil, nil, - nil, nil, 369, nil, nil, 369, 369, 369, 369, 369, - 369, 369, 369, nil, 369, 369, 369, nil, 369, 369, - 369, 369, 369, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 369, nil, nil, 369, nil, nil, 369, 369, - nil, nil, 369, nil, nil, nil, nil, nil, 369, nil, - nil, nil, nil, nil, nil, nil, nil, 369, nil, nil, - nil, nil, 369, 369, 369, 369, nil, 369, 369, 369, - 369, nil, nil, nil, nil, 369, 369, nil, nil, nil, - 385, 385, 385, 369, 385, 369, 369, 369, 385, 385, - nil, nil, nil, 385, nil, 385, 385, 385, 385, 385, - 385, 385, nil, nil, nil, nil, nil, 385, 385, 385, - 385, 385, 385, 385, nil, nil, 385, nil, nil, nil, - nil, nil, nil, 385, nil, nil, 385, 385, 385, 385, - 385, 385, 385, 385, nil, 385, 385, 385, nil, 385, - 385, 385, 385, 385, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 385, nil, nil, 385, nil, nil, 385, - 385, nil, nil, 385, nil, nil, nil, nil, nil, 385, - nil, nil, nil, nil, nil, nil, nil, nil, 385, nil, - nil, nil, nil, 385, 385, 385, 385, nil, 385, 385, - 385, 385, nil, nil, nil, nil, 385, 385, nil, nil, - nil, 413, 413, 413, 385, 413, 385, 385, 385, 413, - 413, nil, nil, nil, 413, nil, 413, 413, 413, 413, - 413, 413, 413, nil, nil, nil, nil, nil, 413, 413, - 413, 413, 413, 413, 413, nil, nil, 413, nil, nil, - nil, nil, nil, nil, 413, nil, nil, 413, 413, 413, - 413, 413, 413, 413, 413, nil, 413, 413, 413, nil, - 413, 413, 413, 413, 413, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 413, nil, nil, 413, nil, nil, - 413, 413, nil, nil, 413, nil, nil, nil, nil, nil, - 413, nil, nil, nil, nil, nil, nil, nil, nil, 413, - nil, nil, nil, nil, 413, 413, 413, 413, nil, 413, - 413, 413, 413, nil, nil, nil, nil, 413, 413, nil, - nil, nil, 456, 456, 456, 413, 456, 413, 413, 413, - 456, 456, nil, nil, nil, 456, nil, 456, 456, 456, - 456, 456, 456, 456, nil, nil, nil, nil, nil, 456, - 456, 456, 456, 456, 456, 456, nil, nil, 456, nil, - nil, nil, nil, nil, nil, 456, nil, nil, 456, 456, - 456, 456, 456, 456, 456, 456, 456, 456, 456, 456, - nil, 456, 456, 456, 456, 456, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 456, nil, nil, 456, nil, - nil, 456, 456, nil, nil, 456, nil, 456, nil, 456, - nil, 456, nil, nil, 456, nil, nil, nil, nil, nil, - 456, nil, nil, nil, nil, 456, 456, 456, 456, nil, - 456, 456, 456, 456, nil, nil, nil, nil, 456, 456, - nil, nil, nil, 458, 458, 458, 456, 458, 456, 456, - 456, 458, 458, nil, nil, nil, 458, nil, 458, 458, - 458, 458, 458, 458, 458, nil, nil, nil, nil, nil, - 458, 458, 458, 458, 458, 458, 458, nil, nil, 458, - nil, nil, nil, nil, nil, nil, 458, nil, nil, 458, - 458, 458, 458, 458, 458, 458, 458, nil, 458, 458, - 458, nil, 458, 458, 458, 458, 458, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 458, nil, nil, 458, - nil, nil, 458, 458, nil, nil, 458, nil, nil, nil, - nil, nil, 458, nil, nil, nil, nil, nil, nil, nil, - nil, 458, nil, nil, nil, nil, 458, 458, 458, 458, - nil, 458, 458, 458, 458, nil, nil, nil, nil, 458, - 458, nil, nil, nil, 459, 459, 459, 458, 459, 458, - 458, 458, 459, 459, nil, nil, nil, 459, nil, 459, - 459, 459, 459, 459, 459, 459, nil, nil, nil, nil, - nil, 459, 459, 459, 459, 459, 459, 459, nil, nil, - 459, nil, nil, nil, nil, nil, nil, 459, nil, nil, - 459, 459, 459, 459, 459, 459, 459, 459, nil, 459, - 459, 459, nil, 459, 459, 459, 459, 459, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 459, nil, nil, - 459, nil, nil, 459, 459, nil, nil, 459, nil, nil, - nil, nil, nil, 459, nil, nil, nil, nil, nil, nil, - nil, nil, 459, nil, nil, nil, nil, 459, 459, 459, - 459, nil, 459, 459, 459, 459, nil, nil, nil, nil, - 459, 459, nil, nil, nil, 460, 460, 460, 459, 460, - 459, 459, 459, 460, 460, nil, nil, nil, 460, nil, - 460, 460, 460, 460, 460, 460, 460, nil, nil, nil, - nil, nil, 460, 460, 460, 460, 460, 460, 460, nil, - nil, 460, nil, nil, nil, nil, nil, nil, 460, nil, - nil, 460, 460, 460, 460, 460, 460, 460, 460, nil, - 460, 460, 460, nil, 460, 460, 460, 460, 460, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 460, nil, - nil, 460, nil, nil, 460, 460, nil, nil, 460, nil, - nil, nil, nil, nil, 460, nil, nil, nil, nil, nil, - nil, nil, nil, 460, nil, nil, nil, nil, 460, 460, - 460, 460, nil, 460, 460, 460, 460, nil, nil, nil, - nil, 460, 460, nil, nil, nil, 497, 497, 497, 460, - 497, 460, 460, 460, 497, 497, nil, nil, nil, 497, - nil, 497, 497, 497, 497, 497, 497, 497, nil, nil, - nil, nil, nil, 497, 497, 497, 497, 497, 497, 497, - nil, nil, 497, nil, nil, nil, nil, nil, nil, 497, - nil, nil, 497, 497, 497, 497, 497, 497, 497, 497, - 497, 497, 497, 497, nil, 497, 497, 497, 497, 497, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 497, - nil, nil, 497, nil, nil, 497, 497, nil, nil, 497, - nil, 497, nil, 497, nil, 497, nil, nil, 497, nil, - nil, nil, nil, nil, 497, nil, nil, nil, nil, 497, - 497, 497, 497, nil, 497, 497, 497, 497, nil, nil, - nil, nil, 497, 497, nil, nil, nil, 499, 499, 499, - 497, 499, 497, 497, 497, 499, 499, nil, nil, nil, - 499, nil, 499, 499, 499, 499, 499, 499, 499, nil, - nil, nil, nil, nil, 499, 499, 499, 499, 499, 499, - 499, nil, nil, 499, nil, nil, nil, nil, nil, nil, - 499, nil, nil, 499, 499, 499, 499, 499, 499, 499, - 499, 499, 499, 499, 499, nil, 499, 499, 499, 499, - 499, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 499, nil, nil, 499, nil, nil, 499, 499, nil, nil, - 499, nil, nil, nil, 499, nil, 499, nil, nil, 499, - nil, nil, nil, nil, nil, 499, nil, nil, nil, nil, - 499, 499, 499, 499, nil, 499, 499, 499, 499, nil, - nil, nil, nil, 499, 499, nil, nil, nil, 501, 501, - 501, 499, 501, 499, 499, 499, 501, 501, nil, nil, - nil, 501, nil, 501, 501, 501, 501, 501, 501, 501, - nil, nil, nil, nil, nil, 501, 501, 501, 501, 501, - 501, 501, nil, nil, 501, nil, nil, nil, nil, nil, - nil, 501, nil, nil, 501, 501, 501, 501, 501, 501, - 501, 501, nil, 501, 501, 501, nil, 501, 501, 501, - 501, 501, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 501, nil, nil, 501, nil, nil, 501, 501, nil, - nil, 501, nil, nil, nil, nil, nil, 501, nil, nil, - nil, nil, nil, nil, nil, nil, 501, nil, nil, nil, - nil, 501, 501, 501, 501, nil, 501, 501, 501, 501, - nil, nil, nil, nil, 501, 501, nil, nil, nil, nil, - nil, nil, 501, nil, 501, 501, 501, 507, 507, 507, - 507, 507, nil, nil, nil, 507, 507, nil, nil, nil, - 507, nil, 507, 507, 507, 507, 507, 507, 507, nil, - nil, nil, nil, nil, 507, 507, 507, 507, 507, 507, - 507, nil, nil, 507, nil, nil, nil, nil, nil, 507, - 507, 507, 507, 507, 507, 507, 507, 507, 507, 507, - 507, nil, 507, 507, 507, nil, 507, 507, 507, 507, - 507, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 507, nil, nil, 507, nil, nil, 507, 507, nil, nil, - 507, nil, 507, nil, nil, nil, 507, nil, nil, nil, - nil, nil, nil, nil, nil, 507, nil, nil, nil, nil, - 507, 507, 507, 507, nil, 507, 507, 507, 507, nil, - nil, nil, nil, 507, 507, nil, nil, nil, nil, nil, - 507, 507, nil, 507, 507, 507, 515, 515, 515, nil, - 515, nil, nil, nil, 515, 515, nil, nil, nil, 515, - nil, 515, 515, 515, 515, 515, 515, 515, nil, nil, - nil, nil, nil, 515, 515, 515, 515, 515, 515, 515, - nil, nil, 515, nil, nil, nil, nil, nil, nil, 515, - nil, nil, 515, 515, 515, 515, 515, 515, 515, 515, - nil, 515, 515, 515, nil, 515, 515, nil, nil, 515, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 515, - nil, nil, 515, nil, nil, 515, 515, nil, nil, 515, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 515, - 515, 515, 515, nil, 515, 515, 515, 515, nil, nil, - nil, nil, 515, 515, nil, nil, nil, 517, 517, 517, - 515, 517, 515, 515, 515, 517, 517, nil, nil, nil, - 517, nil, 517, 517, 517, 517, 517, 517, 517, nil, - nil, nil, nil, nil, 517, 517, 517, 517, 517, 517, - 517, nil, nil, 517, nil, nil, nil, nil, nil, nil, - 517, nil, nil, 517, 517, 517, 517, 517, 517, 517, - 517, 517, 517, 517, 517, nil, 517, 517, 517, 517, - 517, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 517, nil, nil, 517, nil, nil, 517, 517, nil, nil, - 517, nil, 517, nil, 517, nil, 517, nil, nil, 517, - nil, nil, nil, nil, nil, 517, nil, nil, nil, nil, - 517, 517, 517, 517, nil, 517, 517, 517, 517, nil, - nil, nil, nil, 517, 517, nil, nil, nil, 523, 523, - 523, 517, 523, 517, 517, 517, 523, 523, nil, nil, - nil, 523, nil, 523, 523, 523, 523, 523, 523, 523, - nil, nil, nil, nil, nil, 523, 523, 523, 523, 523, - 523, 523, nil, nil, 523, nil, nil, nil, nil, nil, - nil, 523, nil, nil, 523, 523, 523, 523, 523, 523, - 523, 523, nil, 523, 523, 523, nil, 523, 523, nil, - nil, 523, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 523, nil, nil, 523, nil, nil, 523, 523, nil, - nil, 523, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 523, 523, 523, 523, nil, 523, 523, 523, 523, - nil, nil, nil, nil, 523, 523, nil, nil, nil, 526, - 526, 526, 523, 526, 523, 523, 523, 526, 526, nil, - nil, nil, 526, nil, 526, 526, 526, 526, 526, 526, - 526, nil, nil, nil, nil, nil, 526, 526, 526, 526, - 526, 526, 526, nil, nil, 526, nil, nil, nil, nil, - nil, nil, 526, nil, nil, 526, 526, 526, 526, 526, - 526, 526, 526, nil, 526, 526, 526, nil, 526, 526, - 526, 526, 526, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 526, nil, nil, 526, nil, nil, 526, 526, - nil, nil, 526, nil, nil, nil, nil, nil, 526, nil, - nil, nil, nil, nil, nil, nil, nil, 526, nil, nil, - nil, nil, 526, 526, 526, 526, nil, 526, 526, 526, - 526, nil, nil, nil, nil, 526, 526, nil, nil, nil, - 527, 527, 527, 526, 527, 526, 526, 526, 527, 527, - nil, nil, nil, 527, nil, 527, 527, 527, 527, 527, - 527, 527, nil, nil, nil, nil, nil, 527, 527, 527, - 527, 527, 527, 527, nil, nil, 527, nil, nil, nil, - nil, nil, nil, 527, nil, nil, 527, 527, 527, 527, - 527, 527, 527, 527, nil, 527, 527, 527, nil, 527, - 527, 527, 527, 527, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 527, nil, nil, 527, nil, nil, 527, - 527, nil, nil, 527, nil, nil, nil, nil, nil, 527, - nil, nil, nil, nil, nil, nil, nil, nil, 527, nil, - nil, nil, nil, 527, 527, 527, 527, nil, 527, 527, - 527, 527, nil, nil, nil, nil, 527, 527, nil, nil, - nil, 532, 532, 532, 527, 532, 527, 527, 527, 532, - 532, nil, nil, nil, 532, nil, 532, 532, 532, 532, - 532, 532, 532, nil, nil, nil, nil, nil, 532, 532, - 532, 532, 532, 532, 532, nil, nil, 532, nil, nil, - nil, nil, nil, nil, 532, nil, nil, 532, 532, 532, - 532, 532, 532, 532, 532, nil, 532, 532, 532, nil, - 532, 532, 532, 532, 532, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 532, nil, nil, 532, nil, nil, - 532, 532, nil, nil, 532, nil, nil, nil, nil, nil, - 532, nil, nil, nil, nil, nil, nil, nil, nil, 532, - nil, nil, nil, nil, 532, 532, 532, 532, nil, 532, - 532, 532, 532, nil, nil, nil, nil, 532, 532, nil, - nil, nil, 538, 538, 538, 532, 538, 532, 532, 532, - 538, 538, nil, nil, nil, 538, nil, 538, 538, 538, - 538, 538, 538, 538, nil, nil, nil, nil, nil, 538, - 538, 538, 538, 538, 538, 538, nil, nil, 538, nil, - nil, nil, nil, nil, nil, 538, nil, nil, 538, 538, - 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, - nil, 538, 538, 538, 538, 538, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 538, nil, nil, 538, nil, - nil, 538, 538, nil, nil, 538, nil, 538, nil, nil, - nil, 538, nil, nil, 538, nil, nil, nil, nil, nil, - 538, nil, nil, nil, nil, 538, 538, 538, 538, nil, - 538, 538, 538, 538, nil, nil, nil, nil, 538, 538, - nil, nil, nil, 541, 541, 541, 538, 541, 538, 538, - 538, 541, 541, nil, nil, nil, 541, nil, 541, 541, - 541, 541, 541, 541, 541, nil, nil, nil, nil, nil, - 541, 541, 541, 541, 541, 541, 541, nil, nil, 541, - nil, nil, nil, nil, nil, nil, 541, nil, nil, 541, - 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, - 541, nil, 541, 541, 541, 541, 541, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 541, nil, nil, 541, - nil, nil, 541, 541, nil, nil, 541, nil, nil, nil, - nil, nil, 541, nil, nil, 541, nil, nil, nil, nil, - nil, 541, nil, nil, nil, nil, 541, 541, 541, 541, - nil, 541, 541, 541, 541, nil, nil, nil, nil, 541, - 541, nil, nil, nil, 556, 556, 556, 541, 556, 541, - 541, 541, 556, 556, nil, nil, nil, 556, nil, 556, - 556, 556, 556, 556, 556, 556, nil, nil, nil, nil, - nil, 556, 556, 556, 556, 556, 556, 556, nil, nil, - 556, nil, nil, nil, nil, nil, nil, 556, nil, nil, - 556, 556, 556, 556, 556, 556, 556, 556, nil, 556, - 556, 556, nil, 556, 556, 556, 556, 556, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 556, nil, nil, - 556, nil, nil, 556, 556, nil, nil, 556, nil, 556, - nil, nil, nil, 556, nil, nil, nil, nil, nil, nil, - nil, nil, 556, nil, nil, nil, nil, 556, 556, 556, - 556, nil, 556, 556, 556, 556, nil, nil, nil, nil, - 556, 556, nil, nil, nil, 557, 557, 557, 556, 557, - 556, 556, 556, 557, 557, nil, nil, nil, 557, nil, - 557, 557, 557, 557, 557, 557, 557, nil, nil, nil, - nil, nil, 557, 557, 557, 557, 557, 557, 557, nil, - nil, 557, nil, nil, nil, nil, nil, nil, 557, nil, - nil, 557, 557, 557, 557, 557, 557, 557, 557, 557, - 557, 557, 557, nil, 557, 557, 557, 557, 557, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 557, nil, - nil, 557, nil, nil, 557, 557, nil, nil, 557, nil, - 557, nil, 557, nil, 557, nil, nil, 557, nil, nil, - nil, nil, nil, 557, nil, nil, nil, nil, 557, 557, - 557, 557, nil, 557, 557, 557, 557, nil, nil, nil, - nil, 557, 557, nil, nil, nil, 567, 567, 567, 557, - 567, 557, 557, 557, 567, 567, nil, nil, nil, 567, - nil, 567, 567, 567, 567, 567, 567, 567, nil, nil, - nil, nil, nil, 567, 567, 567, 567, 567, 567, 567, - nil, nil, 567, nil, nil, nil, nil, nil, nil, 567, - nil, nil, 567, 567, 567, 567, 567, 567, 567, 567, - 567, 567, 567, 567, nil, 567, 567, 567, 567, 567, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 567, - nil, nil, 567, nil, nil, 567, 567, nil, nil, 567, - nil, 567, nil, 567, nil, 567, nil, nil, 567, nil, - nil, nil, nil, nil, 567, nil, nil, nil, nil, 567, - 567, 567, 567, nil, 567, 567, 567, 567, nil, nil, - nil, nil, 567, 567, nil, nil, nil, 599, 599, 599, - 567, 599, 567, 567, 567, 599, 599, nil, nil, nil, - 599, nil, 599, 599, 599, 599, 599, 599, 599, nil, - nil, nil, nil, nil, 599, 599, 599, 599, 599, 599, - 599, nil, nil, 599, nil, nil, nil, nil, nil, nil, - 599, nil, nil, 599, 599, 599, 599, 599, 599, 599, - 599, nil, 599, 599, 599, nil, 599, 599, 599, 599, - 599, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 599, nil, nil, 599, nil, nil, 599, 599, nil, nil, - 599, nil, 599, nil, nil, nil, 599, nil, nil, nil, - nil, nil, nil, nil, nil, 599, nil, nil, nil, nil, - 599, 599, 599, 599, nil, 599, 599, 599, 599, nil, - nil, nil, nil, 599, 599, nil, nil, nil, 600, 600, - 600, 599, 600, 599, 599, 599, 600, 600, nil, nil, - nil, 600, nil, 600, 600, 600, 600, 600, 600, 600, - nil, nil, nil, nil, nil, 600, 600, 600, 600, 600, - 600, 600, nil, nil, 600, nil, nil, nil, nil, nil, - nil, 600, nil, nil, 600, 600, 600, 600, 600, 600, - 600, 600, nil, 600, 600, 600, nil, 600, 600, 600, - 600, 600, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 600, nil, nil, 600, nil, nil, 600, 600, nil, - nil, 600, nil, nil, nil, nil, nil, 600, nil, nil, - nil, nil, nil, nil, nil, nil, 600, nil, nil, nil, - nil, 600, 600, 600, 600, nil, 600, 600, 600, 600, - nil, nil, nil, nil, 600, 600, nil, nil, nil, 601, - 601, 601, 600, 601, 600, 600, 600, 601, 601, nil, - nil, nil, 601, nil, 601, 601, 601, 601, 601, 601, - 601, nil, nil, nil, nil, nil, 601, 601, 601, 601, - 601, 601, 601, nil, nil, 601, nil, nil, nil, nil, - nil, nil, 601, nil, nil, 601, 601, 601, 601, 601, - 601, 601, 601, 601, 601, 601, 601, nil, 601, 601, - 601, 601, 601, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 601, nil, nil, 601, nil, nil, 601, 601, - nil, nil, 601, nil, 601, nil, 601, nil, 601, nil, - nil, 601, nil, nil, nil, nil, nil, 601, nil, nil, - nil, nil, 601, 601, 601, 601, nil, 601, 601, 601, - 601, nil, nil, nil, nil, 601, 601, nil, nil, nil, - nil, nil, nil, 601, nil, 601, 601, 601, 604, 604, - 604, 604, 604, nil, nil, nil, 604, 604, nil, nil, - nil, 604, nil, 604, 604, 604, 604, 604, 604, 604, - nil, nil, nil, nil, nil, 604, 604, 604, 604, 604, - 604, 604, nil, nil, 604, nil, nil, nil, nil, nil, - 604, 604, nil, 604, 604, 604, 604, 604, 604, 604, - 604, 604, nil, 604, 604, 604, nil, 604, 604, 604, - 604, 604, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 604, nil, nil, 604, nil, nil, 604, 604, nil, - nil, 604, nil, 604, nil, nil, nil, 604, nil, nil, - nil, nil, nil, nil, nil, nil, 604, nil, nil, nil, - nil, 604, 604, 604, 604, nil, 604, 604, 604, 604, - nil, nil, nil, nil, 604, 604, nil, nil, nil, 605, - 605, 605, 604, 605, 604, 604, 604, 605, 605, nil, - nil, nil, 605, nil, 605, 605, 605, 605, 605, 605, - 605, nil, nil, nil, nil, nil, 605, 605, 605, 605, - 605, 605, 605, nil, nil, 605, nil, nil, nil, nil, - nil, nil, 605, nil, nil, 605, 605, 605, 605, 605, - 605, 605, 605, nil, 605, 605, 605, nil, 605, 605, - 605, 605, 605, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 605, nil, nil, 605, nil, nil, 605, 605, - nil, nil, 605, nil, nil, nil, nil, nil, 605, nil, - nil, nil, nil, nil, nil, nil, nil, 605, nil, nil, - nil, nil, 605, 605, 605, 605, nil, 605, 605, 605, - 605, nil, nil, nil, nil, 605, 605, nil, nil, nil, - 608, 608, 608, 605, 608, 605, 605, 605, 608, 608, - nil, nil, nil, 608, nil, 608, 608, 608, 608, 608, - 608, 608, nil, nil, nil, nil, nil, 608, 608, 608, - 608, 608, 608, 608, nil, nil, 608, nil, nil, nil, - nil, nil, nil, 608, nil, nil, 608, 608, 608, 608, - 608, 608, 608, 608, 608, 608, 608, 608, nil, 608, - 608, 608, 608, 608, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 608, nil, nil, 608, nil, nil, 608, - 608, nil, nil, 608, nil, 608, nil, 608, nil, 608, - nil, nil, 608, nil, nil, nil, nil, nil, 608, nil, - nil, nil, nil, 608, 608, 608, 608, nil, 608, 608, - 608, 608, nil, nil, nil, nil, 608, 608, nil, nil, - nil, 609, 609, 609, 608, 609, 608, 608, 608, 609, - 609, nil, nil, nil, 609, nil, 609, 609, 609, 609, - 609, 609, 609, nil, nil, nil, nil, nil, 609, 609, - 609, 609, 609, 609, 609, nil, nil, 609, nil, nil, - nil, nil, nil, nil, 609, nil, nil, 609, 609, 609, - 609, 609, 609, 609, 609, 609, 609, 609, 609, nil, - 609, 609, 609, 609, 609, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 609, nil, nil, 609, nil, nil, - 609, 609, nil, nil, 609, nil, nil, nil, 609, nil, - 609, nil, nil, 609, nil, nil, nil, nil, nil, 609, - nil, nil, nil, nil, 609, 609, 609, 609, nil, 609, - 609, 609, 609, nil, nil, nil, nil, 609, 609, nil, - nil, nil, 610, 610, 610, 609, 610, 609, 609, 609, - 610, 610, nil, nil, nil, 610, nil, 610, 610, 610, - 610, 610, 610, 610, nil, nil, nil, nil, nil, 610, - 610, 610, 610, 610, 610, 610, nil, nil, 610, nil, - nil, nil, nil, nil, nil, 610, nil, nil, 610, 610, - 610, 610, 610, 610, 610, 610, nil, 610, 610, 610, - nil, 610, 610, 610, 610, 610, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 610, nil, nil, 610, nil, - nil, 610, 610, nil, nil, 610, nil, nil, nil, nil, - nil, 610, nil, nil, nil, nil, nil, nil, nil, nil, - 610, nil, nil, nil, nil, 610, 610, 610, 610, nil, - 610, 610, 610, 610, nil, nil, nil, nil, 610, 610, - nil, nil, nil, 611, 611, 611, 610, 611, 610, 610, - 610, 611, 611, nil, nil, nil, 611, nil, 611, 611, - 611, 611, 611, 611, 611, nil, nil, nil, nil, nil, - 611, 611, 611, 611, 611, 611, 611, nil, nil, 611, - nil, nil, nil, nil, nil, nil, 611, nil, nil, 611, - 611, 611, 611, 611, 611, 611, 611, nil, 611, 611, - 611, nil, 611, 611, 611, 611, 611, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 611, nil, nil, 611, - nil, nil, 611, 611, nil, nil, 611, nil, nil, nil, - nil, nil, 611, nil, nil, nil, nil, nil, nil, nil, - nil, 611, nil, nil, nil, nil, 611, 611, 611, 611, - nil, 611, 611, 611, 611, nil, nil, nil, nil, 611, - 611, nil, nil, nil, 615, 615, 615, 611, 615, 611, - 611, 611, 615, 615, nil, nil, nil, 615, nil, 615, - 615, 615, 615, 615, 615, 615, nil, nil, nil, nil, - nil, 615, 615, 615, 615, 615, 615, 615, nil, nil, - 615, nil, nil, nil, nil, nil, nil, 615, nil, nil, - 615, 615, 615, 615, 615, 615, 615, 615, nil, 615, - 615, 615, nil, 615, 615, 615, 615, 615, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 615, nil, nil, - 615, nil, nil, 615, 615, nil, nil, 615, nil, nil, - nil, nil, nil, 615, nil, nil, nil, nil, nil, nil, - nil, nil, 615, nil, nil, nil, nil, 615, 615, 615, - 615, nil, 615, 615, 615, 615, nil, nil, nil, nil, - 615, 615, nil, nil, nil, 616, 616, 616, 615, 616, - 615, 615, 615, 616, 616, nil, nil, nil, 616, nil, - 616, 616, 616, 616, 616, 616, 616, nil, nil, nil, - nil, nil, 616, 616, 616, 616, 616, 616, 616, nil, - nil, 616, nil, nil, nil, nil, nil, nil, 616, nil, - nil, 616, 616, 616, 616, 616, 616, 616, 616, nil, - 616, 616, 616, nil, 616, 616, 616, 616, 616, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 616, nil, - nil, 616, nil, nil, 616, 616, nil, nil, 616, nil, - nil, nil, nil, nil, 616, nil, nil, nil, nil, nil, - nil, nil, nil, 616, nil, nil, nil, nil, 616, 616, - 616, 616, nil, 616, 616, 616, 616, nil, nil, nil, - nil, 616, 616, nil, nil, nil, 640, 640, 640, 616, - 640, 616, 616, 616, 640, 640, nil, nil, nil, 640, - nil, 640, 640, 640, 640, 640, 640, 640, nil, nil, - nil, nil, nil, 640, 640, 640, 640, 640, 640, 640, - nil, nil, 640, nil, nil, nil, nil, nil, nil, 640, - nil, nil, 640, 640, 640, 640, 640, 640, 640, 640, - nil, 640, 640, 640, nil, 640, 640, 640, 640, 640, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 640, - nil, nil, 640, nil, nil, 640, 640, nil, nil, 640, - nil, nil, nil, nil, nil, 640, nil, nil, nil, nil, - nil, nil, nil, nil, 640, nil, nil, nil, nil, 640, - 640, 640, 640, nil, 640, 640, 640, 640, nil, nil, - nil, nil, 640, 640, nil, nil, nil, 643, 643, 643, - 640, 643, 640, 640, 640, 643, 643, nil, nil, nil, - 643, nil, 643, 643, 643, 643, 643, 643, 643, nil, - nil, nil, nil, nil, 643, 643, 643, 643, 643, 643, - 643, nil, nil, 643, nil, nil, nil, nil, nil, nil, - 643, nil, nil, 643, 643, 643, 643, 643, 643, 643, - 643, nil, 643, 643, 643, nil, 643, 643, 643, 643, - 643, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 643, nil, nil, 643, nil, nil, 643, 643, nil, nil, - 643, nil, nil, nil, nil, nil, 643, nil, nil, nil, - nil, nil, nil, nil, nil, 643, nil, nil, nil, nil, - 643, 643, 643, 643, nil, 643, 643, 643, 643, nil, - nil, nil, nil, 643, 643, nil, nil, nil, 646, 646, - 646, 643, 646, 643, 643, 643, 646, 646, nil, nil, - nil, 646, nil, 646, 646, 646, 646, 646, 646, 646, - nil, nil, nil, nil, nil, 646, 646, 646, 646, 646, - 646, 646, nil, nil, 646, nil, nil, nil, nil, nil, - nil, 646, nil, nil, 646, 646, 646, 646, 646, 646, - 646, 646, nil, 646, 646, 646, nil, 646, 646, nil, - nil, 646, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 646, nil, nil, 646, nil, nil, 646, 646, nil, - nil, 646, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 646, 646, 646, 646, nil, 646, 646, 646, 646, - nil, nil, nil, nil, 646, 646, nil, nil, nil, 657, - 657, 657, 646, 657, 646, 646, 646, 657, 657, nil, - nil, nil, 657, nil, 657, 657, 657, 657, 657, 657, - 657, nil, nil, nil, nil, nil, 657, 657, 657, 657, - 657, 657, 657, nil, nil, 657, nil, nil, nil, nil, - nil, nil, 657, nil, nil, 657, 657, 657, 657, 657, - 657, 657, 657, nil, 657, 657, 657, nil, 657, 657, - nil, nil, 657, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 657, nil, nil, 657, nil, nil, 657, 657, - nil, nil, 657, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 657, 657, 657, 657, nil, 657, 657, 657, - 657, nil, nil, nil, nil, 657, 657, nil, nil, nil, - 662, 662, 662, 657, 662, 657, 657, 657, 662, 662, - nil, nil, nil, 662, nil, 662, 662, 662, 662, 662, - 662, 662, nil, nil, nil, nil, nil, 662, 662, 662, - 662, 662, 662, 662, nil, nil, 662, nil, nil, nil, - nil, nil, nil, 662, nil, nil, 662, 662, 662, 662, - 662, 662, 662, 662, nil, 662, 662, 662, nil, 662, - 662, 662, 662, 662, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 662, nil, nil, 662, nil, nil, 662, - 662, nil, nil, 662, nil, 662, nil, nil, nil, 662, - nil, nil, nil, nil, nil, nil, nil, nil, 662, nil, - nil, nil, nil, 662, 662, 662, 662, nil, 662, 662, - 662, 662, nil, nil, nil, nil, 662, 662, nil, nil, - nil, 688, 688, 688, 662, 688, 662, 662, 662, 688, - 688, nil, nil, nil, 688, nil, 688, 688, 688, 688, - 688, 688, 688, nil, nil, nil, nil, nil, 688, 688, - 688, 688, 688, 688, 688, nil, nil, 688, nil, nil, - nil, nil, nil, nil, 688, nil, nil, 688, 688, 688, - 688, 688, 688, 688, 688, nil, 688, 688, 688, nil, - 688, 688, 688, 688, 688, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 688, nil, nil, 688, nil, nil, - 688, 688, nil, nil, 688, nil, nil, nil, nil, nil, - 688, nil, nil, nil, nil, nil, nil, nil, nil, 688, - nil, nil, nil, nil, 688, 688, 688, 688, nil, 688, - 688, 688, 688, nil, nil, nil, nil, 688, 688, nil, - nil, nil, 722, 722, 722, 688, 722, 688, 688, 688, - 722, 722, nil, nil, nil, 722, nil, 722, 722, 722, - 722, 722, 722, 722, nil, nil, nil, nil, nil, 722, - 722, 722, 722, 722, 722, 722, nil, nil, 722, nil, - nil, nil, nil, nil, nil, 722, nil, nil, 722, 722, - 722, 722, 722, 722, 722, 722, nil, 722, 722, 722, - nil, 722, 722, 722, 722, 722, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 722, nil, nil, 722, nil, - nil, 722, 722, nil, nil, 722, nil, nil, nil, nil, - nil, 722, nil, nil, nil, nil, nil, nil, nil, nil, - 722, nil, nil, nil, nil, 722, 722, 722, 722, nil, - 722, 722, 722, 722, nil, nil, nil, nil, 722, 722, - nil, nil, nil, 744, 744, 744, 722, 744, 722, 722, - 722, 744, 744, nil, nil, nil, 744, nil, 744, 744, - 744, 744, 744, 744, 744, nil, nil, nil, nil, nil, - 744, 744, 744, 744, 744, 744, 744, nil, nil, 744, - nil, nil, nil, nil, nil, nil, 744, nil, nil, 744, - 744, 744, 744, 744, 744, 744, 744, nil, 744, 744, - 744, nil, 744, 744, 744, 744, 744, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 744, nil, nil, 744, - nil, nil, 744, 744, nil, nil, 744, nil, nil, nil, - nil, nil, 744, nil, nil, nil, nil, nil, nil, nil, - nil, 744, nil, nil, nil, nil, 744, 744, 744, 744, - nil, 744, 744, 744, 744, nil, nil, nil, nil, 744, - 744, nil, nil, nil, 752, 752, 752, 744, 752, 744, - 744, 744, 752, 752, nil, nil, nil, 752, nil, 752, - 752, 752, 752, 752, 752, 752, nil, nil, nil, nil, - nil, 752, 752, 752, 752, 752, 752, 752, nil, nil, - 752, nil, nil, nil, nil, nil, nil, 752, nil, nil, - 752, 752, 752, 752, 752, 752, 752, 752, nil, 752, - 752, 752, nil, 752, 752, 752, 752, 752, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 752, nil, nil, - 752, nil, nil, 752, 752, nil, nil, 752, nil, nil, - nil, nil, nil, 752, nil, nil, nil, nil, nil, nil, - nil, nil, 752, nil, nil, nil, nil, 752, 752, 752, - 752, nil, 752, 752, 752, 752, nil, nil, nil, nil, - 752, 752, nil, nil, nil, 765, 765, 765, 752, 765, - 752, 752, 752, 765, 765, nil, nil, nil, 765, nil, - 765, 765, 765, 765, 765, 765, 765, nil, nil, nil, - nil, nil, 765, 765, 765, 765, 765, 765, 765, nil, - nil, 765, nil, nil, nil, nil, nil, nil, 765, nil, - nil, 765, 765, 765, 765, 765, 765, 765, 765, nil, - 765, 765, 765, nil, 765, 765, 765, 765, 765, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 765, nil, - nil, 765, nil, nil, 765, 765, nil, nil, 765, nil, - nil, nil, nil, nil, 765, nil, nil, nil, nil, nil, - nil, nil, nil, 765, nil, nil, nil, nil, 765, 765, - 765, 765, nil, 765, 765, 765, 765, nil, nil, nil, - nil, 765, 765, nil, nil, nil, 766, 766, 766, 765, - 766, 765, 765, 765, 766, 766, nil, nil, nil, 766, - nil, 766, 766, 766, 766, 766, 766, 766, nil, nil, - nil, nil, nil, 766, 766, 766, 766, 766, 766, 766, - nil, nil, 766, nil, nil, nil, nil, nil, nil, 766, - nil, nil, 766, 766, 766, 766, 766, 766, 766, 766, - nil, 766, 766, 766, nil, 766, 766, 766, 766, 766, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 766, - nil, nil, 766, nil, nil, 766, 766, nil, nil, 766, - nil, nil, nil, nil, nil, 766, nil, nil, nil, nil, - nil, nil, nil, nil, 766, nil, nil, nil, nil, 766, - 766, 766, 766, nil, 766, 766, 766, 766, nil, nil, - nil, nil, 766, 766, nil, nil, nil, 767, 767, 767, - 766, 767, 766, 766, 766, 767, 767, nil, nil, nil, - 767, nil, 767, 767, 767, 767, 767, 767, 767, nil, - nil, nil, nil, nil, 767, 767, 767, 767, 767, 767, - 767, nil, nil, 767, nil, nil, nil, nil, nil, nil, - 767, nil, nil, 767, 767, 767, 767, 767, 767, 767, - 767, nil, 767, 767, 767, nil, 767, 767, 767, 767, - 767, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 767, nil, nil, 767, nil, nil, 767, 767, nil, nil, - 767, nil, nil, nil, nil, nil, 767, nil, nil, nil, - nil, nil, nil, nil, nil, 767, nil, nil, nil, nil, - 767, 767, 767, 767, nil, 767, 767, 767, 767, nil, - nil, nil, nil, 767, 767, nil, nil, nil, 768, 768, - 768, 767, 768, 767, 767, 767, 768, 768, nil, nil, - nil, 768, nil, 768, 768, 768, 768, 768, 768, 768, - nil, nil, nil, nil, nil, 768, 768, 768, 768, 768, - 768, 768, nil, nil, 768, nil, nil, nil, nil, nil, - nil, 768, nil, nil, 768, 768, 768, 768, 768, 768, - 768, 768, nil, 768, 768, 768, nil, 768, 768, 768, - 768, 768, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 768, nil, nil, 768, nil, nil, 768, 768, nil, - nil, 768, nil, nil, nil, nil, nil, 768, nil, nil, - nil, nil, nil, nil, nil, nil, 768, nil, nil, nil, - nil, 768, 768, 768, 768, nil, 768, 768, 768, 768, - nil, nil, nil, nil, 768, 768, nil, nil, nil, 770, - 770, 770, 768, 770, 768, 768, 768, 770, 770, nil, - nil, nil, 770, nil, 770, 770, 770, 770, 770, 770, - 770, nil, nil, nil, nil, nil, 770, 770, 770, 770, - 770, 770, 770, nil, nil, 770, nil, nil, nil, nil, - nil, nil, 770, nil, nil, 770, 770, 770, 770, 770, - 770, 770, 770, nil, 770, 770, 770, nil, 770, 770, - 770, 770, 770, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 770, nil, nil, 770, nil, nil, 770, 770, - nil, nil, 770, nil, nil, nil, nil, nil, 770, nil, - nil, nil, nil, nil, nil, nil, nil, 770, nil, nil, - nil, nil, 770, 770, 770, 770, nil, 770, 770, 770, - 770, nil, nil, nil, nil, 770, 770, nil, nil, nil, - 809, 809, 809, 770, 809, 770, 770, 770, 809, 809, - nil, nil, nil, 809, nil, 809, 809, 809, 809, 809, - 809, 809, nil, nil, nil, nil, nil, 809, 809, 809, - 809, 809, 809, 809, nil, nil, 809, nil, nil, nil, - nil, nil, nil, 809, nil, nil, 809, 809, 809, 809, - 809, 809, 809, 809, nil, 809, 809, 809, nil, 809, - 809, 809, 809, 809, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 809, nil, nil, 809, nil, nil, 809, - 809, nil, nil, 809, nil, nil, nil, nil, nil, 809, - nil, nil, nil, nil, nil, nil, nil, nil, 809, nil, - nil, nil, nil, 809, 809, 809, 809, nil, 809, 809, - 809, 809, nil, nil, nil, nil, 809, 809, nil, nil, - nil, 822, 822, 822, 809, 822, 809, 809, 809, 822, - 822, nil, nil, nil, 822, nil, 822, 822, 822, 822, - 822, 822, 822, nil, nil, nil, nil, nil, 822, 822, - 822, 822, 822, 822, 822, nil, nil, 822, nil, nil, - nil, nil, nil, nil, 822, nil, nil, 822, 822, 822, - 822, 822, 822, 822, 822, nil, 822, 822, 822, nil, - 822, 822, 822, 822, 822, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 822, nil, nil, 822, nil, nil, - 822, 822, nil, nil, 822, nil, nil, nil, nil, nil, - 822, nil, nil, nil, nil, nil, nil, nil, nil, 822, - nil, nil, nil, nil, 822, 822, 822, 822, nil, 822, - 822, 822, 822, nil, nil, nil, nil, 822, 822, nil, - nil, nil, 825, 825, 825, 822, 825, 822, 822, 822, - 825, 825, nil, nil, nil, 825, nil, 825, 825, 825, - 825, 825, 825, 825, nil, nil, nil, nil, nil, 825, - 825, 825, 825, 825, 825, 825, nil, nil, 825, nil, - nil, nil, nil, nil, nil, 825, nil, nil, 825, 825, - 825, 825, 825, 825, 825, 825, nil, 825, 825, 825, - nil, 825, 825, 825, 825, 825, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 825, nil, nil, 825, nil, - nil, 825, 825, nil, nil, 825, nil, 825, nil, nil, - nil, 825, nil, nil, nil, nil, nil, nil, nil, nil, - 825, nil, nil, nil, nil, 825, 825, 825, 825, nil, - 825, 825, 825, 825, nil, nil, nil, nil, 825, 825, - nil, nil, nil, 843, 843, 843, 825, 843, 825, 825, - 825, 843, 843, nil, nil, nil, 843, nil, 843, 843, - 843, 843, 843, 843, 843, nil, nil, nil, nil, nil, - 843, 843, 843, 843, 843, 843, 843, nil, nil, 843, - nil, nil, nil, nil, nil, nil, 843, nil, nil, 843, - 843, 843, 843, 843, 843, 843, 843, 843, 843, 843, - 843, nil, 843, 843, 843, 843, 843, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 843, nil, nil, 843, - nil, nil, 843, 843, nil, nil, 843, nil, nil, nil, - 843, nil, 843, nil, nil, 843, nil, nil, nil, nil, - nil, 843, nil, nil, nil, nil, 843, 843, 843, 843, - nil, 843, 843, 843, 843, nil, nil, nil, nil, 843, - 843, nil, nil, nil, 844, 844, 844, 843, 844, 843, - 843, 843, 844, 844, nil, nil, nil, 844, nil, 844, - 844, 844, 844, 844, 844, 844, nil, nil, nil, nil, - nil, 844, 844, 844, 844, 844, 844, 844, nil, nil, - 844, nil, nil, nil, nil, nil, nil, 844, nil, nil, - 844, 844, 844, 844, 844, 844, 844, 844, nil, 844, - 844, 844, nil, 844, 844, 844, 844, 844, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 844, nil, nil, - 844, nil, nil, 844, 844, nil, nil, 844, nil, nil, - nil, nil, nil, 844, nil, nil, nil, nil, nil, nil, - nil, nil, 844, nil, nil, nil, nil, 844, 844, 844, - 844, nil, 844, 844, 844, 844, nil, nil, nil, nil, - 844, 844, nil, nil, nil, 859, 859, 859, 844, 859, - 844, 844, 844, 859, 859, nil, nil, nil, 859, nil, - 859, 859, 859, 859, 859, 859, 859, nil, nil, nil, - nil, nil, 859, 859, 859, 859, 859, 859, 859, nil, - nil, 859, nil, nil, nil, nil, nil, nil, 859, nil, - nil, 859, 859, 859, 859, 859, 859, 859, 859, nil, - 859, 859, 859, nil, 859, 859, nil, nil, 859, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 859, nil, - nil, 859, nil, nil, 859, 859, nil, nil, 859, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 859, 859, - 859, 859, nil, 859, 859, 859, 859, nil, nil, nil, - nil, 859, 859, nil, nil, nil, 868, 868, 868, 859, - 868, 859, 859, 859, 868, 868, nil, nil, nil, 868, - nil, 868, 868, 868, 868, 868, 868, 868, nil, nil, - nil, nil, nil, 868, 868, 868, 868, 868, 868, 868, - nil, nil, 868, nil, nil, nil, nil, nil, nil, 868, - nil, nil, 868, 868, 868, 868, 868, 868, 868, 868, - nil, 868, 868, 868, nil, 868, 868, nil, nil, 868, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 868, - nil, nil, 868, nil, nil, 868, 868, nil, nil, 868, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 868, - 868, 868, 868, nil, 868, 868, 868, 868, nil, nil, - nil, nil, 868, 868, nil, nil, nil, 919, 919, 919, - 868, 919, 868, 868, 868, 919, 919, nil, nil, nil, - 919, nil, 919, 919, 919, 919, 919, 919, 919, nil, - nil, nil, nil, nil, 919, 919, 919, 919, 919, 919, - 919, nil, nil, 919, nil, nil, nil, nil, nil, nil, - 919, nil, nil, 919, 919, 919, 919, 919, 919, 919, - 919, nil, 919, 919, 919, nil, 919, 919, nil, nil, - 919, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 919, nil, nil, 919, nil, nil, 919, 919, nil, nil, - 919, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 919, 919, 919, 919, nil, 919, 919, 919, 919, nil, - nil, nil, nil, 919, 919, nil, nil, nil, 972, 972, - 972, 919, 972, 919, 919, 919, 972, 972, nil, nil, - nil, 972, nil, 972, 972, 972, 972, 972, 972, 972, - nil, nil, nil, nil, nil, 972, 972, 972, 972, 972, - 972, 972, nil, nil, 972, nil, nil, nil, nil, nil, - nil, 972, nil, nil, 972, 972, 972, 972, 972, 972, - 972, 972, 972, 972, 972, 972, nil, 972, 972, 972, - 972, 972, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 972, nil, nil, 972, nil, nil, 972, 972, nil, - nil, 972, nil, 972, nil, 972, nil, 972, nil, nil, - 972, nil, nil, nil, nil, nil, 972, nil, nil, nil, - nil, 972, 972, 972, 972, nil, 972, 972, 972, 972, - nil, nil, nil, nil, 972, 972, nil, nil, nil, nil, - nil, nil, 972, nil, 972, 972, 972, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, nil, nil, nil, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, nil, nil, nil, nil, nil, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, nil, - 8, nil, nil, nil, nil, nil, nil, nil, 8, 8, - nil, 8, 8, 8, 8, 8, 8, 8, nil, nil, - 8, 8, nil, nil, nil, 8, 8, 8, 8, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 8, 8, nil, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, nil, nil, 8, - 8, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 8, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, nil, - nil, nil, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, nil, nil, nil, nil, nil, 9, 9, 9, - 9, 9, 9, 9, 9, 9, nil, nil, 9, nil, - nil, nil, nil, nil, nil, nil, 9, 9, nil, 9, - 9, 9, 9, 9, 9, 9, nil, nil, 9, 9, - nil, nil, nil, 9, 9, 9, 9, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 9, 9, nil, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, nil, nil, 9, 9, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 9, 404, 404, 404, 404, 404, 404, 404, - 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, - 404, 404, 404, 404, 404, 404, 404, nil, nil, nil, - 404, 404, 404, 404, 404, 404, 404, 404, 404, 404, - nil, nil, nil, nil, nil, 404, 404, 404, 404, 404, - 404, 404, 404, 404, nil, nil, 404, nil, nil, nil, - nil, nil, nil, nil, 404, 404, nil, 404, 404, 404, - 404, 404, 404, 404, nil, nil, 404, 404, nil, nil, - nil, 404, 404, 404, 404, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 404, 404, - nil, 404, 404, 404, 404, 404, 404, 404, 404, 404, - 404, 404, 404, nil, nil, 404, 404, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 404, 596, 596, 596, 596, 596, 596, 596, 596, 596, - 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, - 596, 596, 596, 596, 596, nil, nil, nil, 596, 596, - 596, 596, 596, 596, 596, 596, 596, 596, nil, nil, - nil, nil, nil, 596, 596, 596, 596, 596, 596, 596, - 596, 596, nil, nil, 596, nil, nil, nil, nil, nil, - nil, nil, 596, 596, nil, 596, 596, 596, 596, 596, - 596, 596, nil, nil, 596, 596, nil, nil, nil, 596, - 596, 596, 596, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 596, 596, nil, 596, - 596, 596, 596, 596, 596, 596, 596, 596, 596, 596, - 596, nil, nil, 596, 596, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 596, 72, - 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, - 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, - 72, 72, 72, nil, nil, nil, 72, 72, 72, 72, - 72, 72, 72, 72, 72, 72, nil, nil, nil, nil, - nil, 72, 72, 72, 72, 72, 72, 72, 72, 72, - 72, 72, 72, nil, 72, nil, nil, nil, nil, nil, - 72, 72, nil, 72, 72, 72, 72, 72, 72, 72, - nil, nil, 72, 72, nil, nil, nil, 72, 72, 72, - 72, nil, nil, nil, nil, nil, 72, nil, nil, nil, - nil, nil, nil, nil, 72, 72, nil, 72, 72, 72, - 72, 72, 72, 72, 72, 72, 72, 72, 72, nil, - nil, 72, 728, 728, 728, 728, 728, 728, 728, 728, - 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, - 728, 728, 728, 728, 728, 728, nil, nil, nil, 728, - 728, 728, 728, 728, 728, 728, 728, 728, 728, nil, - nil, nil, nil, nil, 728, 728, 728, 728, 728, 728, - 728, 728, 728, nil, nil, 728, nil, nil, nil, nil, - nil, nil, nil, 728, 728, nil, 728, 728, 728, 728, - 728, 728, 728, nil, nil, 728, 728, nil, nil, nil, - 728, 728, 728, 728, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 728, 728, nil, - 728, 728, 728, 728, 728, 728, 728, 728, 728, 728, - 728, 728, 218, 218, 728, nil, 218, nil, nil, nil, - nil, nil, nil, nil, 218, 218, nil, 218, 218, 218, - 218, 218, 218, 218, nil, nil, 218, 218, nil, nil, - nil, 218, 218, 218, 218, nil, nil, nil, nil, nil, - 218, nil, nil, nil, nil, nil, nil, nil, 218, 218, - nil, 218, 218, 218, 218, 218, 218, 218, 218, 218, - 218, 218, 218, 219, 219, 218, nil, 219, nil, nil, - nil, nil, nil, nil, nil, 219, 219, nil, 219, 219, - 219, 219, 219, 219, 219, nil, nil, 219, 219, nil, - nil, nil, 219, 219, 219, 219, nil, nil, nil, nil, - nil, 219, nil, nil, nil, nil, nil, nil, nil, 219, - 219, nil, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 267, 267, 219, nil, 267, nil, - nil, nil, nil, nil, nil, nil, 267, 267, nil, 267, - 267, 267, 267, 267, 267, 267, nil, nil, 267, 267, - nil, nil, nil, 267, 267, 267, 267, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 267, 267, nil, 267, 267, 267, 267, 267, 267, 267, - 267, 267, 267, 267, 267, 454, 454, 267, nil, 454, - nil, nil, nil, nil, nil, nil, nil, 454, 454, nil, - 454, 454, 454, 454, 454, 454, 454, nil, nil, 454, - 454, nil, nil, nil, 454, 454, 454, 454, nil, nil, - nil, nil, nil, 454, nil, nil, nil, nil, nil, nil, - nil, 454, 454, nil, 454, 454, 454, 454, 454, 454, - 454, 454, 454, 454, 454, 454, 455, 455, 454, nil, - 455, nil, nil, nil, nil, nil, nil, nil, 455, 455, - nil, 455, 455, 455, 455, 455, 455, 455, nil, nil, - 455, 455, nil, nil, nil, 455, 455, 455, 455, nil, - nil, nil, nil, nil, 455, nil, nil, nil, nil, nil, - nil, nil, 455, 455, nil, 455, 455, 455, 455, 455, - 455, 455, 455, 455, 455, 455, 455, 518, 518, 455, - nil, 518, nil, nil, nil, nil, nil, nil, nil, 518, - 518, nil, 518, 518, 518, 518, 518, 518, 518, nil, - nil, 518, 518, nil, nil, nil, 518, 518, 518, 518, - nil, nil, nil, nil, nil, 518, nil, nil, nil, nil, - nil, nil, nil, 518, 518, nil, 518, 518, 518, 518, - 518, 518, 518, 518, 518, 518, 518, 518, 519, 519, - 518, nil, 519, nil, nil, nil, nil, nil, nil, nil, - 519, 519, nil, 519, 519, 519, 519, 519, 519, 519, - nil, nil, 519, 519, nil, nil, nil, 519, 519, 519, - 519, nil, nil, nil, nil, nil, 519, nil, nil, nil, - nil, nil, nil, nil, 519, 519, nil, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, 519, 528, - 528, 519, nil, 528, nil, nil, nil, nil, nil, nil, - nil, 528, 528, nil, 528, 528, 528, 528, 528, 528, - 528, nil, nil, 528, 528, nil, nil, nil, 528, 528, - 528, 528, nil, nil, nil, nil, nil, 528, nil, nil, - nil, nil, nil, nil, nil, 528, 528, nil, 528, 528, - 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, - 529, 529, 528, nil, 529, nil, nil, nil, nil, nil, - nil, nil, 529, 529, nil, 529, 529, 529, 529, 529, - 529, 529, nil, nil, 529, 529, nil, nil, nil, 529, - 529, 529, 529, nil, nil, nil, nil, nil, 529, nil, - nil, nil, nil, nil, nil, nil, 529, 529, nil, 529, - 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, - 529, 558, 558, 529, nil, 558, nil, nil, nil, nil, - nil, nil, nil, 558, 558, nil, 558, 558, 558, 558, - 558, 558, 558, nil, nil, 558, 558, nil, nil, nil, - 558, 558, 558, 558, nil, nil, nil, nil, nil, 558, - nil, nil, nil, nil, nil, nil, nil, 558, 558, nil, - 558, 558, 558, 558, 558, 558, 558, 558, 558, 558, - 558, 558, 559, 559, 558, nil, 559, nil, nil, nil, - nil, nil, nil, nil, 559, 559, nil, 559, 559, 559, - 559, 559, 559, 559, nil, nil, 559, 559, nil, nil, - nil, 559, 559, 559, 559, nil, nil, nil, nil, nil, - 559, nil, nil, nil, nil, nil, nil, nil, 559, 559, - nil, 559, 559, 559, 559, 559, 559, 559, 559, 559, - 559, 559, 559, 565, 565, 559, nil, 565, nil, nil, - nil, nil, nil, nil, nil, 565, 565, nil, 565, 565, - 565, 565, 565, 565, 565, nil, nil, 565, 565, nil, - nil, nil, 565, 565, 565, 565, nil, nil, nil, nil, - nil, 565, nil, nil, nil, nil, nil, nil, nil, 565, - 565, nil, 565, 565, 565, 565, 565, 565, 565, 565, - 565, 565, 565, 565, 566, 566, 565, nil, 566, nil, - nil, nil, nil, nil, nil, nil, 566, 566, nil, 566, - 566, 566, 566, 566, 566, 566, nil, nil, 566, 566, - nil, nil, nil, 566, 566, 566, 566, nil, nil, nil, - nil, nil, 566, nil, nil, nil, nil, nil, nil, nil, - 566, 566, nil, 566, 566, 566, 566, 566, 566, 566, - 566, 566, 566, 566, 566, 602, 602, 566, nil, 602, - nil, nil, nil, nil, nil, nil, nil, 602, 602, nil, - 602, 602, 602, 602, 602, 602, 602, nil, nil, 602, - 602, nil, nil, nil, 602, 602, 602, 602, nil, nil, - nil, nil, nil, 602, nil, nil, nil, nil, nil, nil, - nil, 602, 602, nil, 602, 602, 602, 602, 602, 602, - 602, 602, 602, 602, 602, 602, 603, 603, 602, nil, - 603, nil, nil, nil, nil, nil, nil, nil, 603, 603, - nil, 603, 603, 603, 603, 603, 603, 603, nil, nil, - 603, 603, nil, nil, nil, 603, 603, 603, 603, nil, - nil, nil, nil, nil, 603, nil, nil, nil, nil, nil, - nil, nil, 603, 603, nil, 603, 603, 603, 603, 603, - 603, 603, 603, 603, 603, 603, 603, 969, 969, 603, - nil, 969, nil, nil, nil, nil, nil, nil, nil, 969, - 969, nil, 969, 969, 969, 969, 969, 969, 969, nil, - nil, 969, 969, nil, nil, nil, 969, 969, 969, 969, - nil, nil, nil, nil, nil, 969, nil, nil, nil, nil, - nil, nil, nil, 969, 969, nil, 969, 969, 969, 969, - 969, 969, 969, 969, 969, 969, 969, 969, 973, 973, - 969, nil, 973, nil, nil, nil, nil, nil, nil, nil, - 973, 973, nil, 973, 973, 973, 973, 973, 973, 973, - nil, nil, 973, 973, nil, nil, nil, 973, 973, 973, - 973, nil, nil, nil, nil, nil, 973, nil, nil, nil, - nil, nil, nil, nil, 973, 973, nil, 973, 973, 973, - 973, 973, 973, 973, 973, 973, 973, 973, 973, 974, - 974, 973, nil, 974, nil, nil, nil, nil, nil, nil, - nil, 974, 974, nil, 974, 974, 974, 974, 974, 974, - 974, nil, nil, 974, 974, nil, nil, nil, 974, 974, - 974, 974, nil, nil, nil, nil, nil, 974, nil, nil, - nil, nil, nil, nil, nil, 974, 974, nil, 974, 974, - 974, 974, 974, 974, 974, 974, 974, 974, 974, 974, - nil, 546, 974, 546, 546, 546, 546, 546, nil, 668, - nil, 668, 668, 668, 668, 668, 546, nil, nil, nil, - nil, nil, nil, nil, 668, nil, 726, nil, 726, 726, - 726, 726, 726, nil, nil, nil, nil, nil, 546, 546, - nil, 726, nil, nil, nil, nil, 668, 546, 546, 546, - 546, nil, nil, nil, 546, 668, 668, 668, 668, nil, - nil, nil, 668, 726, nil, 727, nil, 727, 727, 727, - 727, 727, 726, 726, 726, 726, nil, nil, nil, 726, - 727, nil, 803, nil, 803, 803, 803, 803, 803, nil, - 805, nil, 805, 805, 805, 805, 805, 803, nil, nil, - nil, nil, 727, nil, nil, 805, nil, nil, nil, nil, - nil, 727, 727, 727, 727, nil, nil, nil, 727, 803, - nil, nil, nil, nil, nil, nil, nil, 805, 803, 803, - 803, 803, nil, nil, nil, 803, 805, 805, 805, 805, - nil, nil, 910, 805, 910, 910, 910, 910, 910, nil, - 912, nil, 912, 912, 912, 912, 912, 910, nil, nil, - nil, nil, nil, nil, nil, 912, nil, 934, nil, 934, - 934, 934, 934, 934, nil, nil, nil, nil, nil, 910, - nil, nil, 934, nil, nil, nil, nil, 912, 910, 910, - 910, 910, nil, nil, nil, 910, 912, 912, 912, 912, - nil, nil, nil, 912, 934, nil, 940, nil, 940, 940, - 940, 940, 940, 934, 934, 934, 934, nil, nil, nil, - 934, 940, nil, 989, nil, 989, 989, 989, 989, 989, - 991, nil, 991, 991, 991, 991, 991, nil, 989, nil, - nil, nil, nil, 940, nil, 991, nil, 993, nil, 993, - 993, 993, 993, 993, 940, 940, nil, nil, nil, 940, - 989, nil, 993, nil, nil, nil, nil, 991, nil, 989, - 989, 989, 989, nil, nil, nil, 989, nil, 991, 991, - nil, nil, nil, 991, 993, nil, 995, nil, 995, 995, - 995, 995, 995, nil, nil, 993, 993, nil, nil, nil, - 993, 995, nil, 1010, nil, 1010, 1010, 1010, 1010, 1010, - 1027, nil, 1027, 1027, 1027, 1027, 1027, nil, 1010, nil, - nil, nil, nil, 995, nil, 1027, nil, nil, nil, nil, - nil, nil, nil, nil, 995, 995, nil, nil, nil, 995, - 1010, nil, nil, nil, nil, nil, nil, 1027, nil, nil, - nil, 1010, 1010, nil, nil, nil, 1010, nil, 1027, 1027, - nil, nil, nil, 1027 ] - -racc_action_pointer = [ - 1853, 10, nil, 221, nil, 5772, 909, -79, 22505, 22633, - -51, nil, -80, -44, 240, 15, 477, -81, nil, -71, - 5903, 1711, 166, nil, -62, nil, -8, 958, 1068, 6034, - 6165, 6296, nil, 1993, 6427, 6558, nil, 70, 225, 352, - 152, 255, 6697, 6828, -51, 6959, 86, 507, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 1178, nil, 7098, - 7229, 7360, 4, nil, 7491, 7622, nil, nil, 7753, 7892, - 8023, 8154, 23017, nil, nil, nil, nil, nil, nil, nil, - nil, 624, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 0, - nil, nil, 112, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 224, nil, 8293, nil, nil, nil, nil, - 8432, 8563, 8694, 8825, 8964, nil, 2133, nil, 287, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 115, - nil, 2273, 9095, 9226, 9357, 9488, 9619, 9750, 23191, 23252, - nil, nil, 9881, 10012, 10143, nil, nil, 574, -54, 166, - 202, 217, 124, 216, nil, 10274, 2413, 232, 10405, 10536, - 10667, 10798, 10929, 11060, 11191, 11322, 11453, 11584, 11715, 11846, - 11977, 12108, 12239, 12370, 12501, 12632, 12763, 12894, 13025, 13156, - nil, nil, nil, nil, 13287, nil, nil, 23313, nil, nil, - 258, 13418, 13549, nil, nil, nil, nil, nil, nil, nil, - 13680, nil, 2133, nil, 249, 263, nil, 13811, 328, 13942, - nil, nil, 14073, 14204, nil, nil, 295, nil, 14343, 1331, - 337, 315, 2553, 340, 391, 350, 14474, 2693, 576, 682, - 686, 441, 718, nil, 409, 387, 33, nil, nil, nil, - 458, 360, 418, 14613, nil, 424, 497, 771, nil, 528, - 14744, nil, 14875, 2833, 1396, 484, nil, 398, 503, 528, - 511, 575, 550, nil, nil, 326, -1, 11, 15006, 2973, - 3113, 298, 641, 533, -18, 11, 794, 644, 25, 677, - nil, nil, 342, 434, -21, nil, 834, nil, 596, 15137, - nil, nil, nil, 194, 230, 255, 373, 413, 481, 506, - 508, 550, nil, 551, nil, 15268, nil, 327, 388, 395, - 400, 456, -41, -35, 462, nil, nil, nil, nil, nil, - nil, nil, nil, 611, 22761, nil, nil, nil, nil, 612, - nil, nil, 600, 15399, 605, nil, nil, 600, nil, 837, - 313, 701, nil, nil, 1853, nil, nil, nil, nil, nil, - 1993, 615, nil, 627, 632, 509, 521, 1314, nil, nil, - nil, 222, 334, 678, nil, nil, 1446, 1582, nil, nil, - nil, -35, nil, 683, 23374, 23435, 15530, 328, 15661, 15792, - 15923, 2833, 2973, 523, 563, 708, 710, 711, 712, 1667, - 4233, 666, 3113, 3253, 3393, 3533, 3673, 3813, 915, 1465, - 3953, 4093, 2273, 1397, nil, 1718, nil, nil, nil, nil, - 669, nil, nil, nil, 673, nil, nil, 16054, nil, 16185, - nil, 16316, nil, 363, nil, nil, nil, 16455, 1427, nil, - 675, 675, nil, nil, 676, 16594, 683, 16725, 23496, 23557, - 870, 726, nil, 16856, 685, nil, 16987, 17118, 23618, 23679, - 1531, 2413, 17249, 823, 822, 702, 747, nil, 17380, nil, - nil, 17511, nil, nil, nil, nil, 24290, 3253, 826, nil, - 3393, 62, 834, 841, 836, 844, 17642, 17773, 23740, 23801, - 27, nil, nil, 930, nil, 23862, 23923, 17904, nil, nil, - 250, 3533, 765, nil, -33, nil, nil, nil, 832, nil, - nil, nil, 739, nil, nil, 259, nil, 338, nil, nil, - 727, nil, 741, nil, nil, nil, 22889, nil, 744, 18035, - 18166, 18297, 23984, 24045, 18436, 18567, 552, 787, 18698, 18829, - 18960, 19091, 786, nil, nil, 19222, 19353, 787, nil, nil, - nil, 343, 358, 466, 604, 758, 774, 906, nil, 890, - 6, nil, nil, 807, 102, 913, nil, 790, nil, 838, - 19484, nil, nil, 19615, nil, -83, 19746, 808, nil, 830, - 123, 180, 873, 248, 1038, 875, 840, 19877, nil, 909, - 214, 964, 20008, nil, nil, nil, 596, nil, 24298, nil, - 847, 849, nil, 857, 858, 859, nil, nil, nil, nil, - nil, nil, nil, nil, 853, 1178, nil, nil, 20139, nil, - nil, nil, 952, nil, nil, nil, 958, nil, nil, 959, - 516, nil, 997, nil, nil, nil, nil, nil, 1006, nil, - 26, 886, 40, 41, 151, 185, 3673, 717, 1040, nil, - 892, 3813, 20270, nil, 1029, 3953, 24315, 24354, 23130, nil, - nil, nil, nil, nil, nil, 4093, nil, nil, nil, nil, - nil, nil, nil, 910, 20401, 914, 516, 519, 714, 826, - nil, 2553, 20532, nil, 913, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 20663, 20794, 20925, 21056, 520, - 21187, nil, 160, nil, nil, 936, nil, nil, 889, nil, - 4233, nil, nil, nil, nil, 917, 236, nil, nil, 1045, - nil, 4373, 922, 970, nil, nil, nil, 64, 929, 780, - nil, nil, 556, 24371, nil, 24379, nil, 1377, nil, 21318, - nil, 1241, nil, 929, 228, 943, nil, nil, nil, nil, - 1065, nil, 21449, 1069, nil, 21580, 4513, 93, 1070, nil, - 1077, 480, 4653, nil, 1078, 962, 554, nil, 969, 964, - 553, nil, nil, 21711, 21842, 2693, 4793, nil, 965, 968, - nil, 969, 970, 973, nil, 1003, 983, 979, 973, 21973, - nil, nil, nil, nil, 4933, nil, nil, 32, 22104, nil, - nil, nil, nil, 1028, 986, nil, nil, nil, 987, 988, - nil, 990, 992, nil, 993, nil, nil, 998, 1280, 997, - 819, nil, nil, 33, nil, nil, 39, nil, nil, nil, - 1123, nil, nil, nil, 1060, nil, nil, 1203, nil, nil, - 24431, nil, 24439, nil, 6605, nil, nil, 1044, 1171, 22235, - 1006, 1099, nil, 5073, 34, 35, 1116, 1101, 36, nil, - 5213, 5353, nil, nil, 24456, nil, 8201, nil, 14521, nil, - 24495, nil, nil, nil, nil, 335, 951, 1026, 5493, nil, - nil, nil, nil, 5633, 1027, nil, nil, 1030, 1032, 1034, - 1036, nil, 1039, nil, 628, nil, nil, nil, 1146, 24106, - nil, 1176, 22366, 24167, 24228, 42, 1071, 1179, 1056, 1063, - 1064, 1069, 1074, 1291, 1075, 1307, 706, 1202, nil, 24512, - nil, 24519, nil, 24536, nil, 24575, nil, nil, nil, 1183, - 1123, 1124, nil, 1086, 98, 102, 111, 138, nil, nil, - 24592, nil, nil, nil, nil, 1312, 1094, nil, nil, 1108, - 1109, 1110, 1130, nil, 145, 1131, 1134, 24599, nil, nil, - nil, nil, nil, 1137, nil ] - -racc_action_default = [ - -3, -608, -1, -594, -4, -608, -7, -608, -608, -608, - -608, -30, -608, -608, -34, -608, -608, -287, -46, -596, - -608, -51, -55, -56, -57, -61, -264, -264, -264, -300, - -330, -331, -73, -12, -77, -85, -87, -608, -498, -499, - -608, -608, -608, -608, -223, -608, -596, -237, -278, -279, - -280, -281, -282, -283, -284, -285, -286, -582, -289, -293, - -607, -572, -308, -310, -608, -608, -53, -53, -594, -608, - -608, -608, -608, -332, -333, -335, -336, -337, -439, -440, - -441, -442, -443, -464, -446, -447, -466, -468, -451, -456, - -460, -462, -478, -464, -480, -482, -483, -484, -485, -580, - -487, -488, -581, -490, -491, -492, -493, -494, -495, -496, - -497, -502, -503, -608, -2, -595, -603, -604, -605, -6, - -608, -608, -608, -608, -608, -8, -3, -18, -608, -116, - -117, -118, -119, -120, -121, -122, -123, -124, -128, -129, - -130, -131, -132, -133, -134, -135, -136, -137, -138, -139, - -140, -141, -142, -143, -144, -145, -146, -147, -148, -149, - -150, -151, -152, -153, -154, -155, -156, -157, -158, -159, - -160, -161, -162, -163, -164, -165, -166, -167, -168, -169, - -170, -171, -172, -173, -174, -175, -176, -177, -178, -179, - -180, -181, -182, -183, -184, -185, -186, -187, -188, -189, - -190, -191, -192, -193, -194, -195, -196, -197, -198, -23, - -125, -12, -608, -608, -608, -608, -608, -254, -608, -608, - -592, -593, -608, -608, -596, -597, -50, -608, -498, -499, - -608, -287, -608, -608, -229, -608, -12, -608, -608, -608, - -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, - -608, -608, -608, -608, -608, -608, -608, -608, -608, -608, - -238, -239, -240, -241, -608, -403, -405, -608, -590, -591, - -62, -254, -608, -307, -409, -418, -420, -68, -415, -69, - -596, -70, -244, -259, -268, -268, -263, -608, -269, -608, - -464, -574, -608, -608, -71, -72, -594, -13, -608, -16, - -608, -75, -12, -596, -608, -78, -81, -12, -93, -94, - -608, -608, -101, -300, -303, -596, -608, -330, -331, -334, - -416, -608, -83, -608, -89, -297, -481, -608, -217, -218, - -608, -230, -608, -12, -291, -596, -245, -600, -600, -608, - -608, -600, -608, -309, -394, -52, -608, -608, -608, -12, - -12, -594, -608, -595, -498, -499, -608, -608, -287, -608, - -347, -348, -111, -112, -608, -114, -608, -287, -506, -608, - -498, -499, -323, -116, -117, -158, -159, -160, -176, -181, - -188, -191, -325, -608, -570, -608, -444, -608, -608, -608, - -608, -608, -608, -608, -608, 1035, -5, -606, -24, -25, - -26, -27, -28, -608, -608, -20, -21, -22, -126, -608, - -31, -33, -274, -608, -608, -273, -32, -608, -35, -608, - -287, -43, -45, -199, -249, -269, -47, -48, -36, -200, - -249, -596, -255, -268, -268, -583, -584, -264, -413, -585, - -586, -584, -583, -264, -412, -414, -585, -586, -42, -207, - -49, -596, -306, -608, -608, -608, -254, -297, -608, -608, - -608, -208, -209, -210, -211, -212, -213, -214, -215, -219, - -220, -221, -222, -224, -225, -226, -227, -228, -231, -232, - -233, -234, -596, -242, -424, -264, -583, -584, -59, -63, - -596, -265, -422, -424, -596, -302, -260, -608, -261, -608, - -266, -608, -270, -608, -577, -579, -11, -595, -15, -17, - -596, -74, -295, -90, -79, -608, -596, -254, -608, -608, - -100, -608, -481, -608, -86, -91, -608, -608, -608, -608, - -243, -235, -608, -431, -608, -596, -608, -246, -602, -601, - -248, -602, -298, -299, -573, -311, -530, -12, -338, -339, - -12, -608, -608, -608, -608, -608, -608, -254, -608, -608, - -297, -53, -111, -112, -113, -608, -608, -254, -319, -504, - -608, -12, -508, -327, -596, -445, -465, -470, -608, -472, - -448, -467, -608, -469, -450, -608, -453, -608, -455, -458, - -608, -459, -608, -479, -9, -19, -608, -29, -277, -608, - -608, -254, -608, -608, -608, -608, -417, -608, -256, -258, - -608, -608, -64, -253, -410, -608, -608, -66, -411, -305, - -598, -583, -584, -583, -584, -596, -608, -608, -425, -58, - -406, -422, -251, -608, -383, -608, -301, -268, -267, -271, - -608, -575, -576, -608, -14, -76, -608, -82, -88, -596, - -583, -584, -252, -587, -99, -608, -84, -608, -206, -216, - -596, -607, -607, -290, -292, -294, -600, -395, -530, -398, - -569, -569, -513, -515, -515, -515, -529, -531, -532, -533, - -534, -535, -536, -537, -538, -608, -540, -542, -544, -549, - -551, -552, -554, -559, -561, -562, -564, -565, -566, -608, - -607, -340, -607, -54, -341, -342, -314, -315, -608, -317, - -608, -596, -583, -584, -587, -296, -12, -111, -112, -115, - -596, -12, -608, -321, -608, -12, -530, -530, -608, -571, - -471, -474, -475, -476, -477, -12, -449, -452, -454, -457, - -461, -463, -127, -275, -608, -596, -583, -584, -584, -583, - -44, -250, -608, -599, -268, -38, -202, -39, -203, -65, - -40, -205, -41, -204, -67, -608, -608, -608, -608, -417, - -608, -404, -383, -408, -407, -608, -419, -384, -596, -386, - -12, -421, -262, -272, -578, -80, -417, -92, -304, -607, - -345, -12, -432, -607, -433, -434, -247, -608, -596, -608, - -511, -512, -608, -608, -522, -608, -525, -608, -527, -608, - -349, -608, -351, -353, -360, -596, -543, -553, -563, -567, - -608, -343, -608, -608, -316, -608, -12, -417, -608, -417, - -608, -608, -12, -324, -608, -596, -608, -328, -608, -276, - -417, -37, -201, -257, -608, -236, -12, -60, -569, -569, - -365, -367, -367, -367, -382, -608, -596, -388, -538, -546, - -547, -557, -423, -10, -12, -438, -346, -608, -608, -436, - -396, -399, -401, -608, -569, -550, -568, -514, -515, -515, - -541, -515, -515, -560, -515, -538, -555, -596, -608, -358, - -608, -539, -312, -608, -313, -271, -607, -318, -320, -505, - -608, -326, -507, -509, -508, -473, -426, -608, -363, -364, - -373, -375, -608, -378, -608, -380, -385, -608, -608, -608, - -545, -608, -437, -12, -498, -499, -608, -608, -287, -435, - -12, -12, -397, -510, -608, -518, -608, -520, -608, -523, - -608, -526, -528, -350, -352, -356, -608, -361, -12, -427, - -428, -429, -322, -12, -569, -548, -366, -367, -367, -367, - -367, -558, -367, -387, -596, -390, -392, -393, -556, -608, - -297, -431, -254, -608, -608, -297, -608, -608, -515, -515, - -515, -515, -354, -608, -359, -608, -607, -608, -362, -608, - -370, -608, -372, -608, -376, -608, -379, -381, -389, -608, - -296, -587, -430, -596, -583, -584, -587, -296, -400, -402, - -608, -516, -519, -521, -524, -608, -357, -344, -329, -367, - -367, -367, -367, -391, -417, -515, -355, -608, -368, -371, - -374, -377, -517, -367, -369 ] - -racc_goto_table = [ - 223, 343, 304, 16, 534, 382, 127, 210, 16, 283, - 283, 283, 498, 319, 319, 431, 266, 218, 336, 267, - 132, 132, 555, 227, 661, 268, 489, 332, 118, 437, - 443, 114, 227, 227, 227, 725, 16, 310, 310, 6, - 274, 278, 326, 524, 6, 115, 135, 135, 319, 319, - 319, 346, 347, 137, 137, 351, 349, 350, 638, 305, - 638, 606, 16, 547, 550, 415, 416, 227, 227, 490, - 820, 227, 356, 366, 366, 270, 277, 279, 485, 537, - 540, 125, 633, 544, 132, 428, 345, 345, 226, 641, - 345, 448, 789, 118, 564, 780, 352, 880, 334, 119, - 581, 583, 586, 586, 2, 944, 387, 398, 399, 400, - 401, 322, 301, 800, 801, 852, 394, 855, 16, 452, - 284, 284, 284, 227, 227, 227, 227, 16, 883, 16, - 815, 641, 965, 823, 961, 1, 947, 873, 368, 372, - 863, 303, 345, 345, 345, 345, 627, 281, 294, 295, - 644, 337, 585, 587, 6, 635, 209, 967, 285, 285, - 285, 498, 361, 402, 669, 6, 411, 404, 703, 638, - 638, 631, 596, 330, 339, 495, 630, 384, 676, 340, - 409, 545, 359, 568, 383, 333, 535, 335, 344, 338, - 341, 721, 984, 832, 571, 917, 572, 283, 511, 641, - 728, 904, 944, 854, 880, 304, 856, 964, 667, 396, - 870, 961, 546, 1023, 16, 227, 419, 227, 227, 419, - 227, 775, 797, 930, 708, 419, 227, 227, 454, 1016, - 403, 447, 438, 846, 880, 647, 426, 427, 967, 16, - 931, 484, 724, 656, 492, 450, 451, 957, 493, 772, - 949, 283, 283, 793, 625, 769, 887, 883, 867, 386, - 283, 1026, 388, 389, 390, 437, 443, 391, 392, 393, - 730, 304, 735, 722, 227, 227, 304, 878, 875, 786, - 410, 421, 955, 227, 421, 319, 798, 853, nil, 880, - 421, 908, 909, nil, nil, 719, 521, 738, nil, 738, - 676, 16, 319, 414, 414, 16, nil, nil, nil, 310, - 16, 518, 879, 503, 881, 649, 536, 933, 552, 553, - nil, 118, 522, nil, 506, nil, 310, 950, 528, 652, - 274, nil, nil, nil, 278, 551, 16, 508, 507, 652, - nil, 827, nil, nil, 835, 836, 619, nil, 525, nil, - 829, 227, 16, 16, nil, 711, 1017, 558, 676, 676, - nil, nil, nil, 284, 782, 720, 785, 953, 759, 652, - 345, 284, 227, 764, 509, 840, 118, 652, 573, 554, - nil, 301, 514, nil, 268, 632, 301, nil, 227, 636, - 491, 570, 830, nil, nil, nil, 834, 988, 494, 745, - nil, 285, 595, nil, 638, 645, nil, 574, 796, 285, - 510, 648, 607, 437, 443, 516, 132, nil, nil, 958, - 602, 959, nil, nil, nil, 422, nil, 826, 422, nil, - 664, nil, nil, 641, 422, nil, 283, nil, nil, nil, - nil, 26, 135, 978, nil, nil, 26, nil, nil, 137, - nil, 613, nil, nil, nil, nil, nil, 618, nil, 227, - nil, 26, 1002, 626, nil, nil, nil, 447, 438, 729, - 26, 26, 26, nil, 26, nil, nil, nil, nil, 755, - 757, 782, nil, nil, 760, 762, 612, nil, nil, nil, - nil, nil, 617, nil, 319, nil, nil, 283, 1019, 613, - 26, nil, 319, 900, nil, 26, 26, nil, nil, 26, - 16, nil, nil, nil, nil, 794, 700, 906, 310, 702, - 227, nil, nil, nil, nil, nil, 310, nil, nil, nil, - nil, 447, 438, nil, 629, 227, nil, 283, nil, nil, - 525, 447, 438, nil, nil, nil, nil, 283, 525, nil, - 16, 716, nil, 16, 660, 788, 26, nil, nil, nil, - 227, 26, 26, 26, 26, 26, 951, 26, nil, 774, - 227, 447, 438, nil, 16, nil, 704, 447, nil, nil, - 438, 283, nil, nil, 923, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 742, 723, nil, nil, nil, nil, - nil, nil, nil, 419, 227, nil, 607, 16, 132, nil, - 948, nil, nil, 419, 419, 447, 438, nil, 419, 419, - 795, 841, nil, 773, 987, 319, 637, nil, nil, nil, - 607, nil, nil, 1024, 135, nil, 319, nil, nil, nil, - nil, 137, nil, 750, nil, nil, nil, 710, nil, 310, - nil, nil, 26, 26, 26, 26, 26, 26, 26, nil, - 310, 837, nil, 26, 26, 26, 613, 666, 421, 618, - nil, 525, nil, nil, nil, nil, nil, 26, 421, 421, - nil, nil, 787, 421, 421, 828, nil, 429, nil, nil, - nil, nil, 607, 449, nil, nil, nil, nil, nil, nil, - nil, 607, nil, nil, 838, 810, nil, nil, nil, 831, - 891, nil, 26, 26, nil, nil, nil, nil, nil, 16, - nil, 26, nil, nil, 16, 227, 607, nil, 16, nil, - 902, nil, nil, nil, nil, nil, nil, 754, 16, 26, - 132, nil, nil, 26, 345, nil, nil, 865, 26, 862, - nil, 869, nil, 414, nil, 419, nil, nil, nil, 857, - 866, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 1003, 804, 806, 808, 26, nil, nil, nil, nil, 857, - nil, 684, 943, 16, 652, nil, nil, nil, nil, 26, - 26, 26, nil, nil, 16, 896, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 893, - 26, nil, 422, nil, nil, nil, nil, nil, nil, nil, - 421, nil, 422, 422, nil, 227, 26, 422, 422, 16, - nil, 810, nil, 922, 889, 16, nil, 857, 319, nil, - nil, nil, nil, nil, 345, nil, nil, 319, 29, 16, - nil, nil, nil, 29, nil, nil, 899, nil, nil, nil, - nil, 903, 920, nil, nil, nil, nil, 16, 29, nil, - nil, 926, nil, nil, nil, nil, nil, 29, 29, 29, - nil, 29, nil, nil, nil, 13, nil, nil, nil, nil, - 13, nil, 971, 849, nil, nil, nil, 26, 319, 976, - 977, nil, nil, 684, nil, nil, nil, 29, 810, nil, - 810, nil, 29, 29, 874, nil, 29, 986, 13, nil, - nil, nil, 968, nil, nil, nil, 16, 973, nil, 449, - nil, 429, nil, 16, 16, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 13, 998, nil, nil, 26, nil, - nil, 16, 283, nil, 360, nil, 16, nil, 26, nil, - nil, 684, 684, 29, 422, 982, 810, nil, 29, 29, - 29, 29, 29, 26, 29, 227, 935, 937, nil, 939, - 941, 447, 942, nil, 607, nil, 447, 438, 26, nil, - nil, 26, nil, 850, nil, nil, nil, 658, 26, nil, - 13, nil, nil, 810, nil, 810, nil, nil, 26, 13, - nil, 13, 26, 858, 876, nil, nil, 876, nil, nil, - nil, nil, 954, nil, nil, 849, nil, 849, nil, 849, - nil, nil, nil, nil, 15, 810, nil, nil, 684, 15, - 684, 26, 26, nil, nil, 26, nil, nil, nil, nil, - nil, 26, 26, nil, nil, nil, 26, 26, nil, 29, - 29, 29, 29, 29, 29, 29, nil, 15, nil, nil, - 29, 29, 29, nil, nil, nil, 1011, 1012, 1013, 1014, - 859, 756, 758, nil, 29, nil, 761, 763, nil, nil, - nil, nil, nil, 15, nil, nil, 13, nil, 417, nil, - nil, 417, nil, nil, 849, nil, 849, 417, 849, nil, - 849, nil, nil, nil, nil, nil, nil, nil, nil, 29, - 29, 13, 876, 1032, 851, 850, nil, 850, 29, 850, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 849, nil, nil, 858, 29, 858, nil, 15, - 29, 882, nil, 884, nil, 29, nil, 26, 15, nil, - 15, nil, 26, 26, nil, nil, 26, nil, nil, 684, - nil, nil, nil, nil, nil, nil, 26, nil, nil, nil, - nil, 29, nil, 13, nil, nil, nil, 13, nil, nil, - nil, nil, 13, 26, nil, nil, 29, 29, 29, nil, - nil, nil, nil, nil, 850, nil, 850, nil, 850, 859, - 850, nil, 859, nil, 859, nil, 859, 29, 13, nil, - nil, 26, nil, 842, 858, nil, nil, nil, nil, nil, - nil, nil, 26, 29, 13, 13, 756, 758, 763, 761, - nil, nil, 850, nil, nil, 15, nil, 15, nil, nil, - 15, nil, 911, 913, 915, nil, 15, nil, 960, nil, - 962, nil, nil, 26, nil, nil, nil, 26, nil, nil, - 15, nil, nil, 26, nil, nil, nil, nil, nil, nil, - 979, nil, 980, nil, 981, nil, nil, 26, nil, nil, - nil, 859, nil, 859, nil, 859, nil, 859, nil, nil, - nil, nil, nil, nil, 29, 26, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 842, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 859, - nil, nil, 15, nil, nil, 1020, 15, 1021, nil, 1022, - nil, 15, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 29, 1025, nil, 990, 992, - 994, 996, nil, 997, 26, 29, nil, 15, nil, nil, - nil, 26, 26, 1033, nil, nil, nil, nil, nil, nil, - 29, nil, nil, 15, 15, nil, nil, nil, nil, 26, - nil, nil, 13, nil, 26, 29, nil, nil, 29, nil, - nil, nil, nil, nil, nil, 29, nil, nil, nil, nil, - nil, nil, nil, 26, nil, 29, nil, nil, nil, 29, - 1028, 1029, 1030, 1031, nil, nil, nil, nil, nil, nil, - nil, nil, 13, nil, 1034, 13, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 29, 29, - nil, nil, 29, nil, nil, nil, 13, nil, 29, 29, - nil, nil, nil, 29, 29, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 417, nil, nil, nil, 13, - nil, nil, nil, nil, nil, 417, 417, nil, nil, nil, - 417, 417, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 15, nil, nil, nil, 17, nil, nil, nil, nil, - 17, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 29, nil, nil, nil, nil, 29, - 29, nil, nil, 29, nil, nil, nil, nil, 17, 312, - 312, 15, nil, 29, 15, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 29, 13, nil, nil, 17, 15, 13, nil, nil, nil, - 13, nil, nil, nil, 358, 367, 367, nil, nil, 38, - 13, nil, nil, nil, 38, nil, nil, nil, 29, nil, - nil, nil, nil, nil, 15, nil, nil, 417, 15, 29, - nil, nil, nil, nil, 15, 15, nil, nil, nil, 15, - 15, nil, 38, 308, 308, nil, nil, nil, nil, nil, - 17, nil, nil, nil, nil, 13, nil, nil, nil, 17, - 29, 17, nil, nil, 29, nil, 13, nil, 38, nil, - 29, nil, nil, nil, nil, nil, nil, nil, 354, 370, - 370, 370, nil, nil, 29, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 13, 29, nil, nil, nil, nil, 13, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 13, nil, nil, 38, nil, nil, nil, nil, nil, - nil, nil, nil, 38, nil, 38, nil, nil, nil, 13, - 15, nil, nil, 929, nil, 15, 17, nil, 420, 15, - nil, 420, nil, 342, nil, nil, nil, 420, nil, 15, - nil, 29, nil, nil, nil, nil, nil, nil, 29, 29, - nil, 17, nil, nil, nil, nil, 15, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 29, nil, nil, nil, - nil, 29, nil, nil, nil, nil, nil, nil, 13, nil, - nil, nil, nil, nil, 15, 13, 13, nil, nil, nil, - 29, nil, nil, nil, nil, 15, nil, nil, nil, nil, - 38, nil, nil, 13, nil, nil, nil, nil, 13, nil, - nil, nil, nil, 17, nil, nil, nil, 17, nil, nil, - nil, 312, 17, nil, nil, 38, nil, nil, nil, nil, - 15, nil, nil, nil, nil, nil, 15, nil, 312, nil, - nil, nil, nil, nil, nil, nil, nil, 39, 17, nil, - 15, nil, 39, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 17, 17, nil, nil, 15, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 39, 309, 309, nil, 412, 425, nil, 38, nil, nil, - nil, 38, nil, nil, nil, 308, 38, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 39, nil, nil, nil, - nil, nil, 308, nil, nil, nil, 355, 371, 371, 371, - nil, nil, 38, nil, nil, nil, nil, 15, nil, nil, - nil, nil, nil, nil, 15, 15, nil, nil, 38, 38, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 15, nil, nil, nil, nil, 15, nil, 500, - nil, 502, 39, nil, 504, 505, nil, nil, nil, nil, - nil, 39, nil, 39, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 17, nil, nil, nil, nil, nil, nil, nil, - 312, nil, nil, nil, nil, nil, nil, nil, 312, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 39, nil, - nil, nil, 17, nil, nil, 17, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 39, nil, 598, 17, nil, nil, nil, - nil, nil, nil, 734, nil, nil, 38, nil, nil, nil, - nil, nil, nil, nil, 308, nil, nil, nil, nil, nil, - nil, nil, 308, nil, nil, 420, nil, nil, nil, 17, - nil, nil, nil, nil, nil, 420, 420, nil, nil, nil, - 420, 420, nil, nil, nil, nil, 38, nil, nil, 38, - nil, nil, nil, nil, nil, 39, nil, nil, nil, 39, - nil, nil, nil, 309, 39, nil, nil, nil, nil, nil, - 38, 312, nil, nil, nil, nil, nil, nil, nil, 639, - 309, 342, 312, 642, nil, nil, nil, nil, nil, nil, - 39, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 38, nil, nil, 39, 39, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 639, nil, nil, 342, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 425, nil, - nil, 17, nil, nil, nil, 308, 17, nil, nil, nil, - 17, nil, nil, nil, nil, nil, 308, nil, nil, nil, - 17, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 420, nil, nil, - nil, 743, nil, nil, nil, nil, nil, nil, nil, nil, - 639, 342, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 17, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 38, 17, nil, nil, nil, - 38, nil, 783, nil, 38, 784, nil, nil, nil, nil, - nil, nil, nil, nil, 38, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 792, nil, nil, nil, nil, nil, - nil, 17, nil, nil, nil, nil, nil, 17, nil, nil, - nil, nil, nil, nil, 39, nil, nil, nil, nil, nil, - 816, 17, 309, nil, nil, nil, nil, nil, nil, 38, - 309, nil, nil, nil, 367, nil, nil, nil, nil, 17, - 38, nil, 234, 928, nil, nil, nil, nil, nil, nil, - nil, 282, 282, 282, 39, nil, nil, 39, nil, nil, - nil, nil, nil, nil, 328, 329, nil, 331, nil, nil, - nil, nil, nil, nil, nil, 38, 839, nil, 39, nil, - nil, 38, 282, 282, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 367, 38, nil, nil, 17, nil, - nil, nil, nil, nil, nil, 17, 17, nil, 370, nil, - nil, 39, nil, 38, nil, nil, nil, 924, nil, nil, - nil, nil, nil, 17, nil, nil, nil, nil, 17, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 886, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 309, nil, nil, nil, 895, nil, nil, - nil, nil, nil, nil, 309, nil, nil, nil, 370, nil, - nil, nil, 38, nil, nil, 342, nil, nil, nil, 38, - 38, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 38, nil, nil, - nil, nil, 38, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 39, nil, nil, nil, nil, 39, nil, - nil, nil, 39, nil, 282, 424, nil, nil, 430, 282, - nil, nil, 39, nil, 430, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 234, nil, nil, - 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, - 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, - 481, 482, nil, nil, nil, nil, 483, 39, nil, nil, - nil, nil, nil, 282, 282, nil, nil, nil, 39, nil, - nil, nil, 282, nil, nil, nil, nil, nil, nil, 282, - nil, 282, nil, nil, 282, 282, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 39, nil, nil, nil, nil, nil, 39, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 530, 39, 531, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 371, nil, nil, nil, - nil, 39, nil, nil, nil, 925, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 371, nil, nil, nil, - 39, nil, nil, nil, nil, 282, nil, 39, 39, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 39, nil, nil, nil, nil, - 39, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 282, nil, - 430, 430, 430, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 282, - nil, 282, nil, 282, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 282, - nil, nil, nil, nil, nil, nil, nil, nil, 430, 659, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 282, nil, nil, 282, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 282, 282, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 282, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 282, 430, 282, nil, nil, nil, 751, nil, nil, - 282, 282, 430, 430, nil, nil, nil, 430, 430, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 282, nil, nil, 282, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 282, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 282, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 282, nil, nil, nil, - nil, nil, nil, nil, 430, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 430, 430, 430, - 430, nil, 845, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 282, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 282, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 282, 430, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 282 ] - -racc_goto_check = [ - 34, 96, 10, 29, 9, 63, 16, 16, 29, 39, - 39, 39, 83, 73, 73, 30, 144, 32, 77, 42, - 64, 64, 101, 29, 11, 32, 45, 34, 105, 43, - 43, 4, 29, 29, 29, 107, 29, 29, 29, 7, - 81, 81, 71, 58, 7, 6, 67, 67, 73, 73, - 73, 18, 18, 68, 68, 18, 36, 36, 84, 56, - 84, 31, 29, 99, 99, 23, 23, 29, 29, 30, - 100, 29, 29, 29, 29, 44, 44, 44, 43, 79, - 79, 8, 46, 79, 64, 27, 25, 25, 21, 188, - 25, 27, 12, 105, 61, 133, 4, 179, 7, 5, - 166, 166, 166, 166, 2, 119, 161, 18, 18, 18, - 18, 57, 52, 126, 126, 131, 161, 135, 29, 54, - 78, 78, 78, 29, 29, 29, 29, 29, 184, 29, - 121, 188, 137, 12, 185, 1, 122, 135, 62, 62, - 13, 53, 25, 25, 25, 25, 147, 51, 51, 51, - 15, 78, 165, 165, 7, 147, 17, 138, 80, 80, - 80, 83, 20, 7, 143, 7, 24, 26, 37, 84, - 84, 48, 69, 74, 76, 54, 82, 94, 173, 95, - 10, 98, 102, 104, 108, 109, 110, 111, 112, 80, - 80, 113, 122, 114, 115, 135, 116, 39, 54, 188, - 117, 118, 119, 123, 179, 10, 129, 136, 139, 5, - 140, 185, 141, 137, 29, 29, 29, 29, 29, 29, - 29, 46, 142, 145, 101, 29, 29, 29, 32, 122, - 2, 64, 81, 133, 179, 58, 25, 25, 138, 29, - 146, 148, 9, 58, 150, 25, 25, 131, 151, 154, - 155, 39, 39, 156, 30, 31, 121, 184, 157, 160, - 39, 122, 162, 163, 164, 43, 43, 167, 168, 169, - 170, 10, 171, 172, 29, 29, 10, 177, 181, 31, - 21, 21, 182, 29, 21, 73, 143, 132, nil, 179, - 21, 126, 126, nil, nil, 61, 34, 166, nil, 166, - 173, 29, 73, 78, 78, 29, nil, nil, nil, 29, - 29, 32, 132, 161, 132, 30, 34, 126, 10, 10, - nil, 105, 71, nil, 4, nil, 29, 12, 32, 43, - 81, nil, nil, nil, 81, 18, 29, 7, 6, 43, - nil, 31, nil, nil, 143, 143, 54, nil, 56, nil, - 31, 29, 29, 29, nil, 30, 100, 32, 173, 173, - nil, nil, nil, 78, 83, 30, 58, 107, 45, 43, - 25, 78, 29, 45, 8, 31, 105, 43, 42, 4, - nil, 52, 57, nil, 32, 54, 52, nil, 29, 54, - 51, 25, 9, nil, nil, nil, 9, 126, 51, 30, - nil, 80, 16, nil, 84, 54, nil, 25, 79, 80, - 53, 54, 34, 43, 43, 53, 64, nil, nil, 132, - 32, 132, nil, nil, nil, 19, nil, 99, 19, nil, - 54, nil, nil, 188, 19, nil, 39, nil, nil, nil, - nil, 47, 67, 132, nil, nil, 47, nil, nil, 68, - nil, 81, nil, nil, nil, nil, nil, 81, nil, 29, - nil, 47, 11, 34, nil, nil, nil, 64, 81, 54, - 47, 47, 47, nil, 47, nil, nil, nil, nil, 27, - 27, 83, nil, nil, 27, 27, 44, nil, nil, nil, - nil, nil, 44, nil, 73, nil, nil, 39, 132, 81, - 47, nil, 73, 9, nil, 47, 47, nil, nil, 47, - 29, nil, nil, nil, nil, 23, 10, 9, 29, 10, - 29, nil, nil, nil, nil, nil, 29, nil, nil, nil, - nil, 64, 81, nil, 44, 29, nil, 39, nil, nil, - 56, 64, 81, nil, nil, nil, nil, 39, 56, nil, - 29, 36, nil, 29, 25, 54, 47, nil, nil, nil, - 29, 47, 47, 47, 47, 47, 101, 47, nil, 96, - 29, 64, 81, nil, 29, nil, 105, 64, nil, nil, - 81, 39, nil, nil, 99, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 16, 105, nil, nil, nil, nil, - nil, nil, nil, 29, 29, nil, 34, 29, 64, nil, - 99, nil, nil, 29, 29, 64, 81, nil, 29, 29, - 77, 27, nil, 144, 9, 73, 80, nil, nil, nil, - 34, nil, nil, 31, 67, nil, 73, nil, nil, nil, - nil, 68, nil, 7, nil, nil, nil, 78, nil, 29, - nil, nil, 47, 47, 47, 47, 47, 47, 47, nil, - 29, 63, nil, 47, 47, 47, 81, 80, 21, 81, - nil, 56, nil, nil, nil, nil, nil, 47, 21, 21, - nil, nil, 56, 21, 21, 10, nil, 70, nil, nil, - nil, nil, 34, 70, nil, nil, nil, nil, nil, nil, - nil, 34, nil, nil, 10, 120, nil, nil, nil, 18, - 54, nil, 47, 47, nil, nil, nil, nil, nil, 29, - nil, 47, nil, nil, 29, 29, 34, nil, 29, nil, - 54, nil, nil, nil, nil, nil, nil, 80, 29, 47, - 64, nil, nil, 47, 25, nil, nil, 77, 47, 10, - nil, 77, nil, 78, nil, 29, nil, nil, nil, 34, - 10, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 30, 176, 176, 176, 47, nil, nil, nil, nil, 34, - nil, 178, 54, 29, 43, nil, nil, nil, nil, 47, - 47, 47, nil, nil, 29, 10, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 18, - 47, nil, 19, nil, nil, nil, nil, nil, nil, nil, - 21, nil, 19, 19, nil, 29, 47, 19, 19, 29, - nil, 120, nil, 10, 120, 29, nil, 34, 73, nil, - nil, nil, nil, nil, 25, nil, nil, 73, 50, 29, - nil, nil, nil, 50, nil, nil, 105, nil, nil, nil, - nil, 105, 29, nil, nil, nil, nil, 29, 50, nil, - nil, 29, nil, nil, nil, nil, nil, 50, 50, 50, - nil, 50, nil, nil, nil, 22, nil, nil, nil, nil, - 22, nil, 10, 125, nil, nil, nil, 47, 73, 10, - 10, nil, nil, 178, nil, nil, nil, 50, 120, nil, - 120, nil, 50, 50, 125, nil, 50, 10, 22, nil, - nil, nil, 29, nil, nil, nil, 29, 32, nil, 70, - nil, 70, nil, 29, 29, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 22, 34, nil, nil, 47, nil, - nil, 29, 39, nil, 22, nil, 29, nil, 47, nil, - nil, 178, 178, 50, 19, 120, 120, nil, 50, 50, - 50, 50, 50, 47, 50, 29, 176, 176, nil, 176, - 176, 64, 176, nil, 34, nil, 64, 81, 47, nil, - nil, 47, nil, 127, nil, nil, nil, 70, 47, nil, - 22, nil, nil, 120, nil, 120, nil, nil, 47, 22, - nil, 22, 47, 178, 127, nil, nil, 127, nil, nil, - nil, nil, 125, nil, nil, 125, nil, 125, nil, 125, - nil, nil, nil, nil, 28, 120, nil, nil, 178, 28, - 178, 47, 47, nil, nil, 47, nil, nil, nil, nil, - nil, 47, 47, nil, nil, nil, 47, 47, nil, 50, - 50, 50, 50, 50, 50, 50, nil, 28, nil, nil, - 50, 50, 50, nil, nil, nil, 176, 176, 176, 176, - 180, 70, 70, nil, 50, nil, 70, 70, nil, nil, - nil, nil, nil, 28, nil, nil, 22, nil, 22, nil, - nil, 22, nil, nil, 125, nil, 125, 22, 125, nil, - 125, nil, nil, nil, nil, nil, nil, nil, nil, 50, - 50, 22, 127, 176, 130, 127, nil, 127, 50, 127, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 125, nil, nil, 178, 50, 178, nil, 28, - 50, 130, nil, 130, nil, 50, nil, 47, 28, nil, - 28, nil, 47, 47, nil, nil, 47, nil, nil, 178, - nil, nil, nil, nil, nil, nil, 47, nil, nil, nil, - nil, 50, nil, 22, nil, nil, nil, 22, nil, nil, - nil, nil, 22, 47, nil, nil, 50, 50, 50, nil, - nil, nil, nil, nil, 127, nil, 127, nil, 127, 180, - 127, nil, 180, nil, 180, nil, 180, 50, 22, nil, - nil, 47, nil, 70, 178, nil, nil, nil, nil, nil, - nil, nil, 47, 50, 22, 22, 70, 70, 70, 70, - nil, nil, 127, nil, nil, 28, nil, 28, nil, nil, - 28, nil, 128, 128, 128, nil, 28, nil, 130, nil, - 130, nil, nil, 47, nil, nil, nil, 47, nil, nil, - 28, nil, nil, 47, nil, nil, nil, nil, nil, nil, - 130, nil, 130, nil, 130, nil, nil, 47, nil, nil, - nil, 180, nil, 180, nil, 180, nil, 180, nil, nil, - nil, nil, nil, nil, 50, 47, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 70, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 180, - nil, nil, 28, nil, nil, 130, 28, 130, nil, 130, - nil, 28, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 50, 130, nil, 128, 128, - 128, 128, nil, 128, 47, 50, nil, 28, nil, nil, - nil, 47, 47, 130, nil, nil, nil, nil, nil, nil, - 50, nil, nil, 28, 28, nil, nil, nil, nil, 47, - nil, nil, 22, nil, 47, 50, nil, nil, 50, nil, - nil, nil, nil, nil, nil, 50, nil, nil, nil, nil, - nil, nil, nil, 47, nil, 50, nil, nil, nil, 50, - 128, 128, 128, 128, nil, nil, nil, nil, nil, nil, - nil, nil, 22, nil, 128, 22, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 50, 50, - nil, nil, 50, nil, nil, nil, 22, nil, 50, 50, - nil, nil, nil, 50, 50, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 22, nil, nil, nil, 22, - nil, nil, nil, nil, nil, 22, 22, nil, nil, nil, - 22, 22, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 28, nil, nil, nil, 33, nil, nil, nil, nil, - 33, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 50, nil, nil, nil, nil, 50, - 50, nil, nil, 50, nil, nil, nil, nil, 33, 33, - 33, 28, nil, 50, 28, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 50, 22, nil, nil, 33, 28, 22, nil, nil, nil, - 22, nil, nil, nil, 33, 33, 33, nil, nil, 59, - 22, nil, nil, nil, 59, nil, nil, nil, 50, nil, - nil, nil, nil, nil, 28, nil, nil, 22, 28, 50, - nil, nil, nil, nil, 28, 28, nil, nil, nil, 28, - 28, nil, 59, 59, 59, nil, nil, nil, nil, nil, - 33, nil, nil, nil, nil, 22, nil, nil, nil, 33, - 50, 33, nil, nil, 50, nil, 22, nil, 59, nil, - 50, nil, nil, nil, nil, nil, nil, nil, 59, 59, - 59, 59, nil, nil, 50, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 22, 50, nil, nil, nil, nil, 22, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 22, nil, nil, 59, nil, nil, nil, nil, nil, - nil, nil, nil, 59, nil, 59, nil, nil, nil, 22, - 28, nil, nil, 22, nil, 28, 33, nil, 33, 28, - nil, 33, nil, 75, nil, nil, nil, 33, nil, 28, - nil, 50, nil, nil, nil, nil, nil, nil, 50, 50, - nil, 33, nil, nil, nil, nil, 28, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 50, nil, nil, nil, - nil, 50, nil, nil, nil, nil, nil, nil, 22, nil, - nil, nil, nil, nil, 28, 22, 22, nil, nil, nil, - 50, nil, nil, nil, nil, 28, nil, nil, nil, nil, - 59, nil, nil, 22, nil, nil, nil, nil, 22, nil, - nil, nil, nil, 33, nil, nil, nil, 33, nil, nil, - nil, 33, 33, nil, nil, 59, nil, nil, nil, nil, - 28, nil, nil, nil, nil, nil, 28, nil, 33, nil, - nil, nil, nil, nil, nil, nil, nil, 60, 33, nil, - 28, nil, 60, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 33, 33, nil, nil, 28, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 60, 60, 60, nil, 75, 75, nil, 59, nil, nil, - nil, 59, nil, nil, nil, 59, 59, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 60, nil, nil, nil, - nil, nil, 59, nil, nil, nil, 60, 60, 60, 60, - nil, nil, 59, nil, nil, nil, nil, 28, nil, nil, - nil, nil, nil, nil, 28, 28, nil, nil, 59, 59, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 28, nil, nil, nil, nil, 28, nil, 75, - nil, 75, 60, nil, 75, 75, nil, nil, nil, nil, - nil, 60, nil, 60, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 33, nil, nil, nil, nil, nil, nil, nil, - 33, nil, nil, nil, nil, nil, nil, nil, 33, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 60, nil, - nil, nil, 33, nil, nil, 33, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 60, nil, 75, 33, nil, nil, nil, - nil, nil, nil, 33, nil, nil, 59, nil, nil, nil, - nil, nil, nil, nil, 59, nil, nil, nil, nil, nil, - nil, nil, 59, nil, nil, 33, nil, nil, nil, 33, - nil, nil, nil, nil, nil, 33, 33, nil, nil, nil, - 33, 33, nil, nil, nil, nil, 59, nil, nil, 59, - nil, nil, nil, nil, nil, 60, nil, nil, nil, 60, - nil, nil, nil, 60, 60, nil, nil, nil, nil, nil, - 59, 33, nil, nil, nil, nil, nil, nil, nil, 75, - 60, 75, 33, 75, nil, nil, nil, nil, nil, nil, - 60, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 59, nil, nil, 60, 60, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 75, nil, nil, 75, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 75, nil, - nil, 33, nil, nil, nil, 59, 33, nil, nil, nil, - 33, nil, nil, nil, nil, nil, 59, nil, nil, nil, - 33, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 33, nil, nil, - nil, 75, nil, nil, nil, nil, nil, nil, nil, nil, - 75, 75, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 33, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 59, 33, nil, nil, nil, - 59, nil, 75, nil, 59, 75, nil, nil, nil, nil, - nil, nil, nil, nil, 59, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 75, nil, nil, nil, nil, nil, - nil, 33, nil, nil, nil, nil, nil, 33, nil, nil, - nil, nil, nil, nil, 60, nil, nil, nil, nil, nil, - 75, 33, 60, nil, nil, nil, nil, nil, nil, 59, - 60, nil, nil, nil, 33, nil, nil, nil, nil, 33, - 59, nil, 35, 33, nil, nil, nil, nil, nil, nil, - nil, 35, 35, 35, 60, nil, nil, 60, nil, nil, - nil, nil, nil, nil, 35, 35, nil, 35, nil, nil, - nil, nil, nil, nil, nil, 59, 75, nil, 60, nil, - nil, 59, 35, 35, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 33, 59, nil, nil, 33, nil, - nil, nil, nil, nil, nil, 33, 33, nil, 59, nil, - nil, 60, nil, 59, nil, nil, nil, 59, nil, nil, - nil, nil, nil, 33, nil, nil, nil, nil, 33, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 75, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 60, nil, nil, nil, 75, nil, nil, - nil, nil, nil, nil, 60, nil, nil, nil, 59, nil, - nil, nil, 59, nil, nil, 75, nil, nil, nil, 59, - 59, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 59, nil, nil, - nil, nil, 59, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 60, nil, nil, nil, nil, 60, nil, - nil, nil, 60, nil, 35, 35, nil, nil, 35, 35, - nil, nil, 60, nil, 35, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 35, nil, nil, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, nil, nil, nil, nil, 35, 60, nil, nil, - nil, nil, nil, 35, 35, nil, nil, nil, 60, nil, - nil, nil, 35, nil, nil, nil, nil, nil, nil, 35, - nil, 35, nil, nil, 35, 35, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 60, nil, nil, nil, nil, nil, 60, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 35, 60, 35, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 60, nil, nil, nil, - nil, 60, nil, nil, nil, 60, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 60, nil, nil, nil, - 60, nil, nil, nil, nil, 35, nil, 60, 60, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 60, nil, nil, nil, nil, - 60, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 35, nil, - 35, 35, 35, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 35, - nil, 35, nil, 35, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 35, - nil, nil, nil, nil, nil, nil, nil, nil, 35, 35, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 35, nil, nil, 35, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 35, 35, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 35, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 35, 35, 35, nil, nil, nil, 35, nil, nil, - 35, 35, 35, 35, nil, nil, nil, 35, 35, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 35, nil, nil, 35, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 35, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 35, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 35, nil, nil, nil, - nil, nil, nil, nil, 35, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 35, 35, 35, - 35, nil, 35, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 35, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 35, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 35, 35, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 35 ] - -racc_goto_pointer = [ - nil, 135, 104, nil, 28, 94, 42, 39, 74, -329, - -31, -509, -569, -649, nil, -357, -2, 147, -13, 212, - 93, 68, 885, -147, -46, 22, 40, -131, 1034, 3, - -202, -370, 1, 1545, -19, 2392, -10, -383, nil, -20, - nil, nil, -5, -189, 49, -244, -410, 441, -317, nil, - 848, 118, 79, 108, -105, nil, 25, 76, -280, 1619, - 1877, -270, 68, -67, 12, nil, nil, 38, 45, -236, - 471, 1, nil, -21, 129, 1702, 114, -42, 91, -258, - 129, 14, -309, -273, -439, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 105, 118, -61, nil, -163, -283, - -630, -330, 113, nil, -185, 25, nil, -537, 112, 127, - -148, 128, 125, -377, -530, -178, -186, -373, -636, -783, - 20, -555, -754, -575, nil, 115, -557, 215, 401, -572, - 346, -663, -491, -539, nil, -661, -711, -786, -761, -338, - -587, -132, -445, -382, -6, -648, -632, -338, -24, nil, - -31, -28, nil, nil, -379, -646, -409, -535, nil, nil, - 178, 23, 176, 176, 176, -238, -288, 178, 178, 178, - -308, -307, -296, -368, nil, nil, 98, -526, 235, -706, - 302, -521, -625, nil, -677, -778, nil, nil, -410 ] - -racc_goto_default = [ - nil, nil, nil, 3, nil, 4, 353, 299, nil, nil, - 533, nil, 821, nil, 296, 297, nil, nil, nil, 11, - 12, 18, 232, nil, nil, 14, nil, 418, 233, 327, - nil, nil, 566, 231, 453, 21, nil, nil, 348, 22, - 23, 24, nil, 655, nil, nil, nil, 316, nil, 25, - 313, 432, 32, nil, nil, 34, 37, 36, nil, 228, - 229, 365, nil, 134, 440, 133, 136, 79, 80, nil, - 423, 94, 44, 47, 264, 288, nil, 790, 433, nil, - 434, 445, 614, 496, 286, 272, 48, 49, 50, 51, - 52, 53, 54, 55, 56, nil, 273, 62, nil, nil, - nil, nil, nil, 70, nil, 548, 71, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 812, - 683, nil, 813, 956, 848, 671, nil, 672, nil, nil, - 673, nil, 675, nil, 777, nil, nil, nil, 681, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 444, - nil, nil, 634, 628, nil, nil, nil, nil, 78, 81, - 82, nil, nil, nil, nil, nil, 576, nil, nil, nil, - nil, nil, nil, 877, 727, 670, nil, 674, 885, 686, - 688, 689, 860, 692, 693, 861, 696, 699, 291 ] - -racc_reduce_table = [ - 0, 0, :racc_error, - 1, 146, :_reduce_none, - 2, 147, :_reduce_2, - 0, 148, :_reduce_3, - 1, 148, :_reduce_4, - 3, 148, :_reduce_5, - 2, 148, :_reduce_6, - 1, 150, :_reduce_none, - 2, 150, :_reduce_8, - 3, 153, :_reduce_9, - 4, 154, :_reduce_10, - 2, 155, :_reduce_11, - 0, 159, :_reduce_12, - 1, 159, :_reduce_13, - 3, 159, :_reduce_14, - 2, 159, :_reduce_15, - 1, 160, :_reduce_none, - 2, 160, :_reduce_17, - 0, 171, :_reduce_18, - 4, 152, :_reduce_19, - 3, 152, :_reduce_20, - 3, 152, :_reduce_21, - 3, 152, :_reduce_22, - 2, 152, :_reduce_23, - 3, 152, :_reduce_24, - 3, 152, :_reduce_25, - 3, 152, :_reduce_26, - 3, 152, :_reduce_27, - 3, 152, :_reduce_28, - 4, 152, :_reduce_29, - 1, 152, :_reduce_none, - 3, 152, :_reduce_31, - 3, 152, :_reduce_32, - 3, 152, :_reduce_33, - 1, 152, :_reduce_none, - 3, 164, :_reduce_35, - 3, 164, :_reduce_36, - 6, 164, :_reduce_37, - 5, 164, :_reduce_38, - 5, 164, :_reduce_39, - 5, 164, :_reduce_40, - 5, 164, :_reduce_41, - 3, 164, :_reduce_42, - 1, 172, :_reduce_none, - 3, 172, :_reduce_44, - 1, 172, :_reduce_none, - 1, 170, :_reduce_none, - 3, 170, :_reduce_47, - 3, 170, :_reduce_48, - 3, 170, :_reduce_49, - 2, 170, :_reduce_50, - 1, 170, :_reduce_none, - 1, 163, :_reduce_none, - 0, 183, :_reduce_53, - 3, 181, :_reduce_54, - 1, 166, :_reduce_none, - 1, 166, :_reduce_none, - 1, 185, :_reduce_none, - 4, 185, :_reduce_58, - 0, 193, :_reduce_59, - 4, 190, :_reduce_60, - 1, 192, :_reduce_none, - 2, 184, :_reduce_62, - 3, 184, :_reduce_63, - 4, 184, :_reduce_64, - 5, 184, :_reduce_65, - 4, 184, :_reduce_66, - 5, 184, :_reduce_67, - 2, 184, :_reduce_68, - 2, 184, :_reduce_69, - 2, 184, :_reduce_70, - 2, 184, :_reduce_71, - 2, 184, :_reduce_72, - 1, 165, :_reduce_73, - 3, 165, :_reduce_74, - 1, 198, :_reduce_75, - 3, 198, :_reduce_76, - 1, 197, :_reduce_none, - 2, 197, :_reduce_78, - 3, 197, :_reduce_79, - 5, 197, :_reduce_80, - 2, 197, :_reduce_81, - 4, 197, :_reduce_82, - 2, 197, :_reduce_83, - 4, 197, :_reduce_84, - 1, 197, :_reduce_85, - 3, 197, :_reduce_86, - 1, 201, :_reduce_none, - 3, 201, :_reduce_88, - 2, 200, :_reduce_89, - 3, 200, :_reduce_90, - 1, 203, :_reduce_91, - 3, 203, :_reduce_92, - 1, 202, :_reduce_93, - 1, 202, :_reduce_94, - 4, 202, :_reduce_95, - 3, 202, :_reduce_96, - 3, 202, :_reduce_97, - 3, 202, :_reduce_98, - 3, 202, :_reduce_99, - 2, 202, :_reduce_100, - 1, 202, :_reduce_101, - 1, 167, :_reduce_102, - 1, 167, :_reduce_103, - 4, 167, :_reduce_104, - 3, 167, :_reduce_105, - 3, 167, :_reduce_106, - 3, 167, :_reduce_107, - 3, 167, :_reduce_108, - 2, 167, :_reduce_109, - 1, 167, :_reduce_110, - 1, 206, :_reduce_111, - 1, 206, :_reduce_none, - 2, 207, :_reduce_113, - 1, 207, :_reduce_114, - 3, 207, :_reduce_115, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 211, :_reduce_121, - 1, 211, :_reduce_none, - 1, 161, :_reduce_none, - 1, 161, :_reduce_none, - 1, 162, :_reduce_125, - 0, 214, :_reduce_126, - 4, 162, :_reduce_127, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 3, 180, :_reduce_199, - 3, 180, :_reduce_200, - 6, 180, :_reduce_201, - 5, 180, :_reduce_202, - 5, 180, :_reduce_203, - 5, 180, :_reduce_204, - 5, 180, :_reduce_205, - 4, 180, :_reduce_206, - 3, 180, :_reduce_207, - 3, 180, :_reduce_208, - 3, 180, :_reduce_209, - 3, 180, :_reduce_210, - 3, 180, :_reduce_211, - 3, 180, :_reduce_212, - 3, 180, :_reduce_213, - 3, 180, :_reduce_214, - 3, 180, :_reduce_215, - 4, 180, :_reduce_216, - 2, 180, :_reduce_217, - 2, 180, :_reduce_218, - 3, 180, :_reduce_219, - 3, 180, :_reduce_220, - 3, 180, :_reduce_221, - 3, 180, :_reduce_222, - 1, 180, :_reduce_none, - 3, 180, :_reduce_224, - 3, 180, :_reduce_225, - 3, 180, :_reduce_226, - 3, 180, :_reduce_227, - 3, 180, :_reduce_228, - 2, 180, :_reduce_229, - 2, 180, :_reduce_230, - 3, 180, :_reduce_231, - 3, 180, :_reduce_232, - 3, 180, :_reduce_233, - 3, 180, :_reduce_234, - 3, 180, :_reduce_235, - 6, 180, :_reduce_236, - 1, 180, :_reduce_none, - 1, 219, :_reduce_none, - 1, 219, :_reduce_none, - 1, 219, :_reduce_none, - 1, 219, :_reduce_none, - 3, 217, :_reduce_242, - 3, 217, :_reduce_243, - 1, 220, :_reduce_none, - 1, 221, :_reduce_none, - 2, 221, :_reduce_none, - 4, 221, :_reduce_247, - 2, 221, :_reduce_248, - 1, 215, :_reduce_none, - 3, 215, :_reduce_250, - 3, 226, :_reduce_251, - 0, 227, :_reduce_252, - 1, 227, :_reduce_none, - 0, 175, :_reduce_254, - 1, 175, :_reduce_none, - 2, 175, :_reduce_none, - 4, 175, :_reduce_257, - 2, 175, :_reduce_258, - 1, 196, :_reduce_259, - 2, 196, :_reduce_260, - 2, 196, :_reduce_261, - 4, 196, :_reduce_262, - 1, 196, :_reduce_263, - 0, 230, :_reduce_264, - 2, 189, :_reduce_265, - 2, 229, :_reduce_266, - 2, 228, :_reduce_267, - 0, 228, :_reduce_268, - 1, 223, :_reduce_269, - 2, 223, :_reduce_270, - 3, 223, :_reduce_271, - 4, 223, :_reduce_272, - 1, 169, :_reduce_273, - 1, 169, :_reduce_none, - 3, 168, :_reduce_275, - 4, 168, :_reduce_276, - 2, 168, :_reduce_277, - 1, 218, :_reduce_none, - 1, 218, :_reduce_none, - 1, 218, :_reduce_none, - 1, 218, :_reduce_none, - 1, 218, :_reduce_none, - 1, 218, :_reduce_none, - 1, 218, :_reduce_none, - 1, 218, :_reduce_none, - 1, 218, :_reduce_none, - 1, 218, :_reduce_none, - 1, 218, :_reduce_288, - 0, 254, :_reduce_289, - 4, 218, :_reduce_290, - 0, 255, :_reduce_291, - 4, 218, :_reduce_292, - 0, 256, :_reduce_293, - 4, 218, :_reduce_294, - 3, 218, :_reduce_295, - 3, 218, :_reduce_296, - 2, 218, :_reduce_297, - 3, 218, :_reduce_298, - 3, 218, :_reduce_299, - 1, 218, :_reduce_300, - 4, 218, :_reduce_301, - 3, 218, :_reduce_302, - 1, 218, :_reduce_303, - 5, 218, :_reduce_304, - 4, 218, :_reduce_305, - 3, 218, :_reduce_306, - 2, 218, :_reduce_307, - 1, 218, :_reduce_none, - 2, 218, :_reduce_309, - 0, 257, :_reduce_310, - 3, 218, :_reduce_311, - 6, 218, :_reduce_312, - 6, 218, :_reduce_313, - 4, 218, :_reduce_314, - 4, 218, :_reduce_315, - 5, 218, :_reduce_316, - 4, 218, :_reduce_317, - 6, 218, :_reduce_318, - 0, 258, :_reduce_319, - 6, 218, :_reduce_320, - 0, 259, :_reduce_321, - 7, 218, :_reduce_322, - 0, 260, :_reduce_323, - 5, 218, :_reduce_324, - 0, 261, :_reduce_325, - 6, 218, :_reduce_326, - 0, 262, :_reduce_327, - 0, 263, :_reduce_328, - 9, 218, :_reduce_329, - 1, 218, :_reduce_330, - 1, 218, :_reduce_331, - 1, 218, :_reduce_332, - 1, 218, :_reduce_333, - 1, 174, :_reduce_none, - 1, 248, :_reduce_335, - 1, 251, :_reduce_336, - 1, 195, :_reduce_337, - 1, 244, :_reduce_none, - 1, 244, :_reduce_none, - 2, 244, :_reduce_340, - 1, 182, :_reduce_none, - 1, 182, :_reduce_none, - 1, 245, :_reduce_none, - 5, 245, :_reduce_344, - 1, 157, :_reduce_none, - 2, 157, :_reduce_346, - 1, 247, :_reduce_none, - 1, 247, :_reduce_none, - 1, 264, :_reduce_349, - 3, 264, :_reduce_350, - 1, 267, :_reduce_351, - 3, 267, :_reduce_352, - 1, 266, :_reduce_none, - 4, 266, :_reduce_354, - 6, 266, :_reduce_355, - 3, 266, :_reduce_356, - 5, 266, :_reduce_357, - 2, 266, :_reduce_358, - 4, 266, :_reduce_359, - 1, 266, :_reduce_360, - 3, 266, :_reduce_361, - 4, 268, :_reduce_362, - 2, 268, :_reduce_363, - 2, 268, :_reduce_364, - 1, 268, :_reduce_365, - 2, 273, :_reduce_366, - 0, 273, :_reduce_367, - 6, 274, :_reduce_368, - 8, 274, :_reduce_369, - 4, 274, :_reduce_370, - 6, 274, :_reduce_371, - 4, 274, :_reduce_372, - 2, 274, :_reduce_none, - 6, 274, :_reduce_374, - 2, 274, :_reduce_375, - 4, 274, :_reduce_376, - 6, 274, :_reduce_377, - 2, 274, :_reduce_378, - 4, 274, :_reduce_379, - 2, 274, :_reduce_380, - 4, 274, :_reduce_381, - 1, 274, :_reduce_none, - 0, 278, :_reduce_383, - 1, 278, :_reduce_384, - 3, 279, :_reduce_385, - 1, 279, :_reduce_386, - 4, 279, :_reduce_387, - 1, 280, :_reduce_388, - 4, 280, :_reduce_389, - 1, 281, :_reduce_390, - 3, 281, :_reduce_391, - 1, 282, :_reduce_392, - 1, 282, :_reduce_none, - 0, 286, :_reduce_394, - 0, 287, :_reduce_395, - 4, 243, :_reduce_396, - 4, 284, :_reduce_397, - 1, 284, :_reduce_398, - 0, 290, :_reduce_399, - 4, 285, :_reduce_400, - 0, 291, :_reduce_401, - 4, 285, :_reduce_402, - 0, 293, :_reduce_403, - 4, 289, :_reduce_404, - 2, 186, :_reduce_405, - 4, 186, :_reduce_406, - 5, 186, :_reduce_407, - 5, 186, :_reduce_408, - 2, 242, :_reduce_409, - 4, 242, :_reduce_410, - 4, 242, :_reduce_411, - 3, 242, :_reduce_412, - 3, 242, :_reduce_413, - 3, 242, :_reduce_414, - 2, 242, :_reduce_415, - 1, 242, :_reduce_416, - 4, 242, :_reduce_417, - 0, 295, :_reduce_418, - 4, 241, :_reduce_419, - 0, 296, :_reduce_420, - 4, 241, :_reduce_421, - 0, 297, :_reduce_422, - 3, 191, :_reduce_423, - 0, 298, :_reduce_424, - 0, 299, :_reduce_425, - 4, 292, :_reduce_426, - 5, 246, :_reduce_427, - 1, 300, :_reduce_428, - 1, 300, :_reduce_none, - 6, 156, :_reduce_430, - 0, 156, :_reduce_431, - 1, 301, :_reduce_432, - 1, 301, :_reduce_none, - 1, 301, :_reduce_none, - 2, 302, :_reduce_435, - 1, 302, :_reduce_none, - 2, 158, :_reduce_437, - 1, 158, :_reduce_none, - 1, 231, :_reduce_none, - 1, 231, :_reduce_none, - 1, 231, :_reduce_none, - 1, 232, :_reduce_442, - 1, 304, :_reduce_443, - 2, 304, :_reduce_444, - 3, 305, :_reduce_445, - 1, 305, :_reduce_446, - 1, 305, :_reduce_447, - 3, 233, :_reduce_448, - 4, 234, :_reduce_449, - 3, 235, :_reduce_450, - 0, 309, :_reduce_451, - 3, 309, :_reduce_452, - 1, 310, :_reduce_453, - 2, 310, :_reduce_454, - 3, 237, :_reduce_455, - 0, 312, :_reduce_456, - 3, 312, :_reduce_457, - 3, 236, :_reduce_458, - 3, 238, :_reduce_459, - 0, 313, :_reduce_460, - 3, 313, :_reduce_461, - 0, 314, :_reduce_462, - 3, 314, :_reduce_463, - 0, 306, :_reduce_464, - 2, 306, :_reduce_465, - 0, 307, :_reduce_466, - 2, 307, :_reduce_467, - 0, 308, :_reduce_468, - 2, 308, :_reduce_469, - 1, 311, :_reduce_470, - 2, 311, :_reduce_471, - 0, 316, :_reduce_472, - 4, 311, :_reduce_473, - 1, 315, :_reduce_474, - 1, 315, :_reduce_475, - 1, 315, :_reduce_476, - 1, 315, :_reduce_none, - 1, 212, :_reduce_478, - 3, 213, :_reduce_479, - 1, 303, :_reduce_480, - 2, 303, :_reduce_481, - 1, 216, :_reduce_482, - 1, 216, :_reduce_483, - 1, 216, :_reduce_484, - 1, 216, :_reduce_485, - 1, 204, :_reduce_486, - 1, 204, :_reduce_487, - 1, 204, :_reduce_488, - 1, 204, :_reduce_489, - 1, 204, :_reduce_490, - 1, 205, :_reduce_491, - 1, 205, :_reduce_492, - 1, 205, :_reduce_493, - 1, 205, :_reduce_494, - 1, 205, :_reduce_495, - 1, 205, :_reduce_496, - 1, 205, :_reduce_497, - 1, 239, :_reduce_498, - 1, 239, :_reduce_499, - 1, 173, :_reduce_500, - 1, 173, :_reduce_501, - 1, 178, :_reduce_502, - 1, 178, :_reduce_503, - 0, 317, :_reduce_504, - 4, 249, :_reduce_505, - 0, 249, :_reduce_506, - 3, 252, :_reduce_507, - 0, 319, :_reduce_508, - 3, 252, :_reduce_509, - 4, 318, :_reduce_510, - 2, 318, :_reduce_511, - 2, 318, :_reduce_512, - 1, 318, :_reduce_513, - 2, 321, :_reduce_514, - 0, 321, :_reduce_515, - 6, 288, :_reduce_516, - 8, 288, :_reduce_517, - 4, 288, :_reduce_518, - 6, 288, :_reduce_519, - 4, 288, :_reduce_520, - 6, 288, :_reduce_521, - 2, 288, :_reduce_522, - 4, 288, :_reduce_523, - 6, 288, :_reduce_524, - 2, 288, :_reduce_525, - 4, 288, :_reduce_526, - 2, 288, :_reduce_527, - 4, 288, :_reduce_528, - 1, 288, :_reduce_529, - 0, 288, :_reduce_530, - 1, 283, :_reduce_531, - 1, 283, :_reduce_532, - 1, 283, :_reduce_533, - 1, 283, :_reduce_534, - 1, 265, :_reduce_none, - 1, 265, :_reduce_536, - 1, 323, :_reduce_537, - 1, 324, :_reduce_538, - 3, 324, :_reduce_539, - 1, 275, :_reduce_540, - 3, 275, :_reduce_541, - 1, 325, :_reduce_542, - 2, 326, :_reduce_543, - 1, 326, :_reduce_544, - 2, 327, :_reduce_545, - 1, 327, :_reduce_546, - 1, 269, :_reduce_547, - 3, 269, :_reduce_548, - 1, 320, :_reduce_549, - 3, 320, :_reduce_550, - 1, 328, :_reduce_none, - 1, 328, :_reduce_none, - 2, 270, :_reduce_553, - 1, 270, :_reduce_554, - 3, 329, :_reduce_555, - 3, 330, :_reduce_556, - 1, 276, :_reduce_557, - 3, 276, :_reduce_558, - 1, 322, :_reduce_559, - 3, 322, :_reduce_560, - 1, 331, :_reduce_none, - 1, 331, :_reduce_none, - 2, 277, :_reduce_563, - 1, 277, :_reduce_564, - 1, 332, :_reduce_none, - 1, 332, :_reduce_none, - 2, 272, :_reduce_567, - 2, 271, :_reduce_568, - 0, 271, :_reduce_569, - 1, 253, :_reduce_none, - 3, 253, :_reduce_571, - 0, 240, :_reduce_572, - 2, 240, :_reduce_none, - 1, 225, :_reduce_574, - 3, 225, :_reduce_575, - 3, 333, :_reduce_576, - 2, 333, :_reduce_577, - 4, 333, :_reduce_578, - 2, 333, :_reduce_579, - 1, 194, :_reduce_none, - 1, 194, :_reduce_none, - 1, 194, :_reduce_none, - 1, 188, :_reduce_none, - 1, 188, :_reduce_none, - 1, 188, :_reduce_none, - 1, 188, :_reduce_none, - 1, 294, :_reduce_none, - 1, 294, :_reduce_none, - 1, 294, :_reduce_none, - 1, 187, :_reduce_none, - 1, 187, :_reduce_none, - 1, 177, :_reduce_592, - 1, 177, :_reduce_593, - 0, 149, :_reduce_none, - 1, 149, :_reduce_none, - 0, 179, :_reduce_none, - 1, 179, :_reduce_none, - 2, 199, :_reduce_598, - 2, 176, :_reduce_599, - 0, 224, :_reduce_none, - 1, 224, :_reduce_none, - 1, 224, :_reduce_none, - 1, 250, :_reduce_603, - 1, 250, :_reduce_none, - 1, 151, :_reduce_none, - 2, 151, :_reduce_none, - 0, 222, :_reduce_607 ] - -racc_reduce_n = 608 - -racc_shift_n = 1035 - -racc_token_table = { - false => 0, - :error => 1, - :kCLASS => 2, - :kMODULE => 3, - :kDEF => 4, - :kUNDEF => 5, - :kBEGIN => 6, - :kRESCUE => 7, - :kENSURE => 8, - :kEND => 9, - :kIF => 10, - :kUNLESS => 11, - :kTHEN => 12, - :kELSIF => 13, - :kELSE => 14, - :kCASE => 15, - :kWHEN => 16, - :kWHILE => 17, - :kUNTIL => 18, - :kFOR => 19, - :kBREAK => 20, - :kNEXT => 21, - :kREDO => 22, - :kRETRY => 23, - :kIN => 24, - :kDO => 25, - :kDO_COND => 26, - :kDO_BLOCK => 27, - :kDO_LAMBDA => 28, - :kRETURN => 29, - :kYIELD => 30, - :kSUPER => 31, - :kSELF => 32, - :kNIL => 33, - :kTRUE => 34, - :kFALSE => 35, - :kAND => 36, - :kOR => 37, - :kNOT => 38, - :kIF_MOD => 39, - :kUNLESS_MOD => 40, - :kWHILE_MOD => 41, - :kUNTIL_MOD => 42, - :kRESCUE_MOD => 43, - :kALIAS => 44, - :kDEFINED => 45, - :klBEGIN => 46, - :klEND => 47, - :k__LINE__ => 48, - :k__FILE__ => 49, - :k__ENCODING__ => 50, - :tIDENTIFIER => 51, - :tFID => 52, - :tGVAR => 53, - :tIVAR => 54, - :tCONSTANT => 55, - :tLABEL => 56, - :tCVAR => 57, - :tNTH_REF => 58, - :tBACK_REF => 59, - :tSTRING_CONTENT => 60, - :tINTEGER => 61, - :tFLOAT => 62, - :tUPLUS => 63, - :tUMINUS => 64, - :tUNARY_NUM => 65, - :tPOW => 66, - :tCMP => 67, - :tEQ => 68, - :tEQQ => 69, - :tNEQ => 70, - :tGEQ => 71, - :tLEQ => 72, - :tANDOP => 73, - :tOROP => 74, - :tMATCH => 75, - :tNMATCH => 76, - :tDOT => 77, - :tDOT2 => 78, - :tDOT3 => 79, - :tAREF => 80, - :tASET => 81, - :tLSHFT => 82, - :tRSHFT => 83, - :tCOLON2 => 84, - :tCOLON3 => 85, - :tOP_ASGN => 86, - :tASSOC => 87, - :tLPAREN => 88, - :tLPAREN2 => 89, - :tRPAREN => 90, - :tLPAREN_ARG => 91, - :tLBRACK => 92, - :tLBRACK2 => 93, - :tRBRACK => 94, - :tLBRACE => 95, - :tLBRACE_ARG => 96, - :tSTAR => 97, - :tSTAR2 => 98, - :tAMPER => 99, - :tAMPER2 => 100, - :tTILDE => 101, - :tPERCENT => 102, - :tDIVIDE => 103, - :tDSTAR => 104, - :tPLUS => 105, - :tMINUS => 106, - :tLT => 107, - :tGT => 108, - :tPIPE => 109, - :tBANG => 110, - :tCARET => 111, - :tLCURLY => 112, - :tRCURLY => 113, - :tBACK_REF2 => 114, - :tSYMBEG => 115, - :tSTRING_BEG => 116, - :tXSTRING_BEG => 117, - :tREGEXP_BEG => 118, - :tREGEXP_OPT => 119, - :tWORDS_BEG => 120, - :tQWORDS_BEG => 121, - :tSYMBOLS_BEG => 122, - :tQSYMBOLS_BEG => 123, - :tSTRING_DBEG => 124, - :tSTRING_DVAR => 125, - :tSTRING_END => 126, - :tSTRING_DEND => 127, - :tSTRING => 128, - :tSYMBOL => 129, - :tNL => 130, - :tEH => 131, - :tCOLON => 132, - :tCOMMA => 133, - :tSPACE => 134, - :tSEMI => 135, - :tLAMBDA => 136, - :tLAMBEG => 137, - :tCHARACTER => 138, - :tRATIONAL => 139, - :tIMAGINARY => 140, - :tLABEL_END => 141, - :tANDDOT => 142, - :tEQL => 143, - :tLOWEST => 144 } - -racc_nt_base = 145 - -racc_use_result_var = true - -Racc_arg = [ - racc_action_table, - racc_action_check, - racc_action_default, - racc_action_pointer, - racc_goto_table, - racc_goto_check, - racc_goto_default, - racc_goto_pointer, - racc_nt_base, - racc_reduce_table, - racc_token_table, - racc_shift_n, - racc_reduce_n, - racc_use_result_var ] -Ractor.make_shareable(Racc_arg) if defined?(Ractor) - -Racc_token_to_s_table = [ - "$end", - "error", - "kCLASS", - "kMODULE", - "kDEF", - "kUNDEF", - "kBEGIN", - "kRESCUE", - "kENSURE", - "kEND", - "kIF", - "kUNLESS", - "kTHEN", - "kELSIF", - "kELSE", - "kCASE", - "kWHEN", - "kWHILE", - "kUNTIL", - "kFOR", - "kBREAK", - "kNEXT", - "kREDO", - "kRETRY", - "kIN", - "kDO", - "kDO_COND", - "kDO_BLOCK", - "kDO_LAMBDA", - "kRETURN", - "kYIELD", - "kSUPER", - "kSELF", - "kNIL", - "kTRUE", - "kFALSE", - "kAND", - "kOR", - "kNOT", - "kIF_MOD", - "kUNLESS_MOD", - "kWHILE_MOD", - "kUNTIL_MOD", - "kRESCUE_MOD", - "kALIAS", - "kDEFINED", - "klBEGIN", - "klEND", - "k__LINE__", - "k__FILE__", - "k__ENCODING__", - "tIDENTIFIER", - "tFID", - "tGVAR", - "tIVAR", - "tCONSTANT", - "tLABEL", - "tCVAR", - "tNTH_REF", - "tBACK_REF", - "tSTRING_CONTENT", - "tINTEGER", - "tFLOAT", - "tUPLUS", - "tUMINUS", - "tUNARY_NUM", - "tPOW", - "tCMP", - "tEQ", - "tEQQ", - "tNEQ", - "tGEQ", - "tLEQ", - "tANDOP", - "tOROP", - "tMATCH", - "tNMATCH", - "tDOT", - "tDOT2", - "tDOT3", - "tAREF", - "tASET", - "tLSHFT", - "tRSHFT", - "tCOLON2", - "tCOLON3", - "tOP_ASGN", - "tASSOC", - "tLPAREN", - "tLPAREN2", - "tRPAREN", - "tLPAREN_ARG", - "tLBRACK", - "tLBRACK2", - "tRBRACK", - "tLBRACE", - "tLBRACE_ARG", - "tSTAR", - "tSTAR2", - "tAMPER", - "tAMPER2", - "tTILDE", - "tPERCENT", - "tDIVIDE", - "tDSTAR", - "tPLUS", - "tMINUS", - "tLT", - "tGT", - "tPIPE", - "tBANG", - "tCARET", - "tLCURLY", - "tRCURLY", - "tBACK_REF2", - "tSYMBEG", - "tSTRING_BEG", - "tXSTRING_BEG", - "tREGEXP_BEG", - "tREGEXP_OPT", - "tWORDS_BEG", - "tQWORDS_BEG", - "tSYMBOLS_BEG", - "tQSYMBOLS_BEG", - "tSTRING_DBEG", - "tSTRING_DVAR", - "tSTRING_END", - "tSTRING_DEND", - "tSTRING", - "tSYMBOL", - "tNL", - "tEH", - "tCOLON", - "tCOMMA", - "tSPACE", - "tSEMI", - "tLAMBDA", - "tLAMBEG", - "tCHARACTER", - "tRATIONAL", - "tIMAGINARY", - "tLABEL_END", - "tANDDOT", - "tEQL", - "tLOWEST", - "$start", - "program", - "top_compstmt", - "top_stmts", - "opt_terms", - "top_stmt", - "terms", - "stmt", - "begin_block", - "bodystmt", - "compstmt", - "opt_rescue", - "opt_else", - "opt_ensure", - "stmts", - "stmt_or_begin", - "fitem", - "undef_list", - "expr_value", - "command_asgn", - "mlhs", - "command_call", - "lhs", - "mrhs", - "mrhs_arg", - "expr", - "@1", - "command_rhs", - "var_lhs", - "primary_value", - "opt_call_args", - "rbracket", - "call_op", - "backref", - "opt_nl", - "arg", - "expr_value_do", - "do", - "@2", - "command", - "block_command", - "block_call", - "dot_or_colon", - "operation2", - "command_args", - "cmd_brace_block", - "brace_body", - "fcall", - "@3", - "operation", - "k_return", - "call_args", - "mlhs_basic", - "mlhs_inner", - "rparen", - "mlhs_head", - "mlhs_item", - "mlhs_node", - "mlhs_post", - "user_variable", - "keyword_variable", - "cname", - "cpath", - "fname", - "op", - "reswords", - "fsym", - "symbol", - "dsym", - "@4", - "arg_rhs", - "simple_numeric", - "rel_expr", - "primary", - "relop", - "arg_value", - "aref_args", - "none", - "args", - "trailer", - "assocs", - "paren_args", - "opt_paren_args", - "opt_block_arg", - "block_arg", - "@5", - "literal", - "strings", - "xstring", - "regexp", - "words", - "qwords", - "symbols", - "qsymbols", - "var_ref", - "assoc_list", - "brace_block", - "method_call", - "lambda", - "then", - "if_tail", - "case_body", - "for_var", - "k_class", - "superclass", - "term", - "k_module", - "f_arglist", - "singleton", - "@6", - "@7", - "@8", - "@9", - "@10", - "@11", - "@12", - "@13", - "@14", - "@15", - "f_marg", - "f_norm_arg", - "f_margs", - "f_marg_list", - "block_args_tail", - "f_block_kwarg", - "f_kwrest", - "opt_f_block_arg", - "f_block_arg", - "opt_block_args_tail", - "block_param", - "f_arg", - "f_block_optarg", - "f_rest_arg", - "opt_block_param", - "block_param_def", - "opt_bv_decl", - "bv_decls", - "bvar", - "f_bad_arg", - "f_larglist", - "lambda_body", - "@16", - "@17", - "f_args", - "do_block", - "@18", - "@19", - "do_body", - "@20", - "operation3", - "@21", - "@22", - "@23", - "@24", - "@25", - "cases", - "exc_list", - "exc_var", - "numeric", - "string", - "string1", - "string_contents", - "xstring_contents", - "regexp_contents", - "word_list", - "word", - "string_content", - "symbol_list", - "qword_list", - "qsym_list", - "string_dvar", - "@26", - "@27", - "args_tail", - "@28", - "f_kwarg", - "opt_args_tail", - "f_optarg", - "f_arg_asgn", - "f_arg_item", - "f_label", - "f_kw", - "f_block_kw", - "kwrest_mark", - "f_opt", - "f_block_opt", - "restarg_mark", - "blkarg_mark", - "assoc" ] -Ractor.make_shareable(Racc_token_to_s_table) if defined?(Ractor) - -Racc_debug_parser = false - -##### State transition tables end ##### - -# reduce 0 omitted - -# reduce 1 omitted - -def _reduce_2(val, _values, result) - result = @builder.compstmt(val[0]) - - result -end - -def _reduce_3(val, _values, result) - result = [] - - result -end - -def _reduce_4(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_5(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_6(val, _values, result) - result = [ val[1] ] - - result -end - -# reduce 7 omitted - -def _reduce_8(val, _values, result) - result = @builder.preexe(val[0], *val[1]) - - result -end - -def _reduce_9(val, _values, result) - result = val - - result -end - -def _reduce_10(val, _values, result) - rescue_bodies = val[1] - else_t, else_ = val[2] - ensure_t, ensure_ = val[3] - - if rescue_bodies.empty? && !else_t.nil? - diagnostic :warning, :useless_else, nil, else_t - end - - result = @builder.begin_body(val[0], - rescue_bodies, - else_t, else_, - ensure_t, ensure_) - - result -end - -def _reduce_11(val, _values, result) - result = @builder.compstmt(val[0]) - - result -end - -def _reduce_12(val, _values, result) - result = [] - - result -end - -def _reduce_13(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_14(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_15(val, _values, result) - result = [ val[1] ] - - result -end - -# reduce 16 omitted - -def _reduce_17(val, _values, result) - diagnostic :error, :begin_in_method, nil, val[0] - - result -end - -def _reduce_18(val, _values, result) - @lexer.state = :expr_fname - - result -end - -def _reduce_19(val, _values, result) - result = @builder.alias(val[0], val[1], val[3]) - - result -end - -def _reduce_20(val, _values, result) - result = @builder.alias(val[0], - @builder.gvar(val[1]), - @builder.gvar(val[2])) - - result -end - -def _reduce_21(val, _values, result) - result = @builder.alias(val[0], - @builder.gvar(val[1]), - @builder.back_ref(val[2])) - - result -end - -def _reduce_22(val, _values, result) - diagnostic :error, :nth_ref_alias, nil, val[2] - - result -end - -def _reduce_23(val, _values, result) - result = @builder.undef_method(val[0], val[1]) - - result -end - -def _reduce_24(val, _values, result) - result = @builder.condition_mod(val[0], nil, - val[1], val[2]) - - result -end - -def _reduce_25(val, _values, result) - result = @builder.condition_mod(nil, val[0], - val[1], val[2]) - - result -end - -def _reduce_26(val, _values, result) - result = @builder.loop_mod(:while, val[0], val[1], val[2]) - - result -end - -def _reduce_27(val, _values, result) - result = @builder.loop_mod(:until, val[0], val[1], val[2]) - - result -end - -def _reduce_28(val, _values, result) - rescue_body = @builder.rescue_body(val[1], - nil, nil, nil, - nil, val[2]) - - result = @builder.begin_body(val[0], [ rescue_body ]) - - result -end - -def _reduce_29(val, _values, result) - result = @builder.postexe(val[0], val[1], val[2], val[3]) - - result -end - -# reduce 30 omitted - -def _reduce_31(val, _values, result) - result = @builder.multi_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_32(val, _values, result) - result = @builder.assign(val[0], val[1], - @builder.array(nil, val[2], nil)) - - result -end - -def _reduce_33(val, _values, result) - result = @builder.multi_assign(val[0], val[1], val[2]) - - result -end - -# reduce 34 omitted - -def _reduce_35(val, _values, result) - result = @builder.assign(val[0], val[1], val[2]) - - result -end - -def _reduce_36(val, _values, result) - result = @builder.op_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_37(val, _values, result) - result = @builder.op_assign( - @builder.index( - val[0], val[1], val[2], val[3]), - val[4], val[5]) - - result -end - -def _reduce_38(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_39(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_40(val, _values, result) - const = @builder.const_op_assignable( - @builder.const_fetch(val[0], val[1], val[2])) - result = @builder.op_assign(const, val[3], val[4]) - - result -end - -def _reduce_41(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_42(val, _values, result) - @builder.op_assign(val[0], val[1], val[2]) - - result -end - -# reduce 43 omitted - -def _reduce_44(val, _values, result) - rescue_body = @builder.rescue_body(val[1], - nil, nil, nil, - nil, val[2]) - - result = @builder.begin_body(val[0], [ rescue_body ]) - - result -end - -# reduce 45 omitted - -# reduce 46 omitted - -def _reduce_47(val, _values, result) - result = @builder.logical_op(:and, val[0], val[1], val[2]) - - result -end - -def _reduce_48(val, _values, result) - result = @builder.logical_op(:or, val[0], val[1], val[2]) - - result -end - -def _reduce_49(val, _values, result) - result = @builder.not_op(val[0], nil, val[2], nil) - - result -end - -def _reduce_50(val, _values, result) - result = @builder.not_op(val[0], nil, val[1], nil) - - result -end - -# reduce 51 omitted - -# reduce 52 omitted - -def _reduce_53(val, _values, result) - @lexer.cond.push(true) - - result -end - -def _reduce_54(val, _values, result) - @lexer.cond.pop - result = [ val[1], val[2] ] - - result -end - -# reduce 55 omitted - -# reduce 56 omitted - -# reduce 57 omitted - -def _reduce_58(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - result -end - -def _reduce_59(val, _values, result) - result = @context.dup - @context.in_block = true - - result -end - -def _reduce_60(val, _values, result) - result = [ val[0], *val[2], val[3] ] - @context.in_block = val[1].in_block - - result -end - -# reduce 61 omitted - -def _reduce_62(val, _values, result) - result = @builder.call_method(nil, nil, val[0], - nil, val[1], nil) - - result -end - -def _reduce_63(val, _values, result) - method_call = @builder.call_method(nil, nil, val[0], - nil, val[1], nil) - - begin_t, args, body, end_t = val[2] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_64(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - result -end - -def _reduce_65(val, _values, result) - method_call = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - begin_t, args, body, end_t = val[4] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_66(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - result -end - -def _reduce_67(val, _values, result) - method_call = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - begin_t, args, body, end_t = val[4] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_68(val, _values, result) - result = @builder.keyword_cmd(:super, val[0], - nil, val[1], nil) - - result -end - -def _reduce_69(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0], - nil, val[1], nil) - - result -end - -def _reduce_70(val, _values, result) - result = @builder.keyword_cmd(:return, val[0], - nil, val[1], nil) - - result -end - -def _reduce_71(val, _values, result) - result = @builder.keyword_cmd(:break, val[0], - nil, val[1], nil) - - result -end - -def _reduce_72(val, _values, result) - result = @builder.keyword_cmd(:next, val[0], - nil, val[1], nil) - - result -end - -def _reduce_73(val, _values, result) - result = @builder.multi_lhs(nil, val[0], nil) - - result -end - -def _reduce_74(val, _values, result) - result = @builder.begin(val[0], val[1], val[2]) - - result -end - -def _reduce_75(val, _values, result) - result = @builder.multi_lhs(nil, val[0], nil) - - result -end - -def _reduce_76(val, _values, result) - result = @builder.multi_lhs(val[0], val[1], val[2]) - - result -end - -# reduce 77 omitted - -def _reduce_78(val, _values, result) - result = val[0]. - push(val[1]) - - result -end - -def _reduce_79(val, _values, result) - result = val[0]. - push(@builder.splat(val[1], val[2])) - - result -end - -def _reduce_80(val, _values, result) - result = val[0]. - push(@builder.splat(val[1], val[2])). - concat(val[4]) - - result -end - -def _reduce_81(val, _values, result) - result = val[0]. - push(@builder.splat(val[1])) - - result -end - -def _reduce_82(val, _values, result) - result = val[0]. - push(@builder.splat(val[1])). - concat(val[3]) - - result -end - -def _reduce_83(val, _values, result) - result = [ @builder.splat(val[0], val[1]) ] - - result -end - -def _reduce_84(val, _values, result) - result = [ @builder.splat(val[0], val[1]), - *val[3] ] - - result -end - -def _reduce_85(val, _values, result) - result = [ @builder.splat(val[0]) ] - - result -end - -def _reduce_86(val, _values, result) - result = [ @builder.splat(val[0]), - *val[2] ] - - result -end - -# reduce 87 omitted - -def _reduce_88(val, _values, result) - result = @builder.begin(val[0], val[1], val[2]) - - result -end - -def _reduce_89(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_90(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_91(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_92(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_93(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_94(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_95(val, _values, result) - result = @builder.index_asgn(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_96(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_97(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_98(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_99(val, _values, result) - result = @builder.assignable( - @builder.const_fetch(val[0], val[1], val[2])) - - result -end - -def _reduce_100(val, _values, result) - result = @builder.assignable( - @builder.const_global(val[0], val[1])) - - result -end - -def _reduce_101(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_102(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_103(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_104(val, _values, result) - result = @builder.index_asgn(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_105(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_106(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_107(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_108(val, _values, result) - result = @builder.assignable( - @builder.const_fetch(val[0], val[1], val[2])) - - result -end - -def _reduce_109(val, _values, result) - result = @builder.assignable( - @builder.const_global(val[0], val[1])) - - result -end - -def _reduce_110(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_111(val, _values, result) - diagnostic :error, :module_name_const, nil, val[0] - - result -end - -# reduce 112 omitted - -def _reduce_113(val, _values, result) - result = @builder.const_global(val[0], val[1]) - - result -end - -def _reduce_114(val, _values, result) - result = @builder.const(val[0]) - - result -end - -def _reduce_115(val, _values, result) - result = @builder.const_fetch(val[0], val[1], val[2]) - - result -end - -# reduce 116 omitted - -# reduce 117 omitted - -# reduce 118 omitted - -# reduce 119 omitted - -# reduce 120 omitted - -def _reduce_121(val, _values, result) - result = @builder.symbol_internal(val[0]) - - result -end - -# reduce 122 omitted - -# reduce 123 omitted - -# reduce 124 omitted - -def _reduce_125(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_126(val, _values, result) - @lexer.state = :expr_fname - - result -end - -def _reduce_127(val, _values, result) - result = val[0] << val[3] - - result -end - -# reduce 128 omitted - -# reduce 129 omitted - -# reduce 130 omitted - -# reduce 131 omitted - -# reduce 132 omitted - -# reduce 133 omitted - -# reduce 134 omitted - -# reduce 135 omitted - -# reduce 136 omitted - -# reduce 137 omitted - -# reduce 138 omitted - -# reduce 139 omitted - -# reduce 140 omitted - -# reduce 141 omitted - -# reduce 142 omitted - -# reduce 143 omitted - -# reduce 144 omitted - -# reduce 145 omitted - -# reduce 146 omitted - -# reduce 147 omitted - -# reduce 148 omitted - -# reduce 149 omitted - -# reduce 150 omitted - -# reduce 151 omitted - -# reduce 152 omitted - -# reduce 153 omitted - -# reduce 154 omitted - -# reduce 155 omitted - -# reduce 156 omitted - -# reduce 157 omitted - -# reduce 158 omitted - -# reduce 159 omitted - -# reduce 160 omitted - -# reduce 161 omitted - -# reduce 162 omitted - -# reduce 163 omitted - -# reduce 164 omitted - -# reduce 165 omitted - -# reduce 166 omitted - -# reduce 167 omitted - -# reduce 168 omitted - -# reduce 169 omitted - -# reduce 170 omitted - -# reduce 171 omitted - -# reduce 172 omitted - -# reduce 173 omitted - -# reduce 174 omitted - -# reduce 175 omitted - -# reduce 176 omitted - -# reduce 177 omitted - -# reduce 178 omitted - -# reduce 179 omitted - -# reduce 180 omitted - -# reduce 181 omitted - -# reduce 182 omitted - -# reduce 183 omitted - -# reduce 184 omitted - -# reduce 185 omitted - -# reduce 186 omitted - -# reduce 187 omitted - -# reduce 188 omitted - -# reduce 189 omitted - -# reduce 190 omitted - -# reduce 191 omitted - -# reduce 192 omitted - -# reduce 193 omitted - -# reduce 194 omitted - -# reduce 195 omitted - -# reduce 196 omitted - -# reduce 197 omitted - -# reduce 198 omitted - -def _reduce_199(val, _values, result) - result = @builder.assign(val[0], val[1], val[2]) - - result -end - -def _reduce_200(val, _values, result) - result = @builder.op_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_201(val, _values, result) - result = @builder.op_assign( - @builder.index( - val[0], val[1], val[2], val[3]), - val[4], val[5]) - - result -end - -def _reduce_202(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_203(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_204(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_205(val, _values, result) - const = @builder.const_op_assignable( - @builder.const_fetch(val[0], val[1], val[2])) - result = @builder.op_assign(const, val[3], val[4]) - - result -end - -def _reduce_206(val, _values, result) - const = @builder.const_op_assignable( - @builder.const_global(val[0], val[1])) - result = @builder.op_assign(const, val[2], val[3]) - - result -end - -def _reduce_207(val, _values, result) - result = @builder.op_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_208(val, _values, result) - result = @builder.range_inclusive(val[0], val[1], val[2]) - - result -end - -def _reduce_209(val, _values, result) - result = @builder.range_exclusive(val[0], val[1], val[2]) - - result -end - -def _reduce_210(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_211(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_212(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_213(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_214(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_215(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_216(val, _values, result) - result = @builder.unary_op(val[0], - @builder.binary_op( - val[1], val[2], val[3])) - - result -end - -def _reduce_217(val, _values, result) - result = @builder.unary_op(val[0], val[1]) - - result -end - -def _reduce_218(val, _values, result) - result = @builder.unary_op(val[0], val[1]) - - result -end - -def _reduce_219(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_220(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_221(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_222(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -# reduce 223 omitted - -def _reduce_224(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_225(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_226(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_227(val, _values, result) - result = @builder.match_op(val[0], val[1], val[2]) - - result -end - -def _reduce_228(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_229(val, _values, result) - result = @builder.not_op(val[0], nil, val[1], nil) - - result -end - -def _reduce_230(val, _values, result) - result = @builder.unary_op(val[0], val[1]) - - result -end - -def _reduce_231(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_232(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_233(val, _values, result) - result = @builder.logical_op(:and, val[0], val[1], val[2]) - - result -end - -def _reduce_234(val, _values, result) - result = @builder.logical_op(:or, val[0], val[1], val[2]) - - result -end - -def _reduce_235(val, _values, result) - result = @builder.keyword_cmd(:defined?, val[0], nil, [ val[2] ], nil) - - result -end - -def _reduce_236(val, _values, result) - result = @builder.ternary(val[0], val[1], - val[2], val[4], val[5]) - - result -end - -# reduce 237 omitted - -# reduce 238 omitted - -# reduce 239 omitted - -# reduce 240 omitted - -# reduce 241 omitted - -def _reduce_242(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_243(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -# reduce 244 omitted - -# reduce 245 omitted - -# reduce 246 omitted - -def _reduce_247(val, _values, result) - result = val[0] << @builder.associate(nil, val[2], nil) - - result -end - -def _reduce_248(val, _values, result) - result = [ @builder.associate(nil, val[0], nil) ] - - result -end - -# reduce 249 omitted - -def _reduce_250(val, _values, result) - rescue_body = @builder.rescue_body(val[1], - nil, nil, nil, - nil, val[2]) - - result = @builder.begin_body(val[0], [ rescue_body ]) - - result -end - -def _reduce_251(val, _values, result) - result = val - - result -end - -def _reduce_252(val, _values, result) - result = [ nil, [], nil ] - - result -end - -# reduce 253 omitted - -def _reduce_254(val, _values, result) - result = [] - - result -end - -# reduce 255 omitted - -# reduce 256 omitted - -def _reduce_257(val, _values, result) - result = val[0] << @builder.associate(nil, val[2], nil) - - result -end - -def _reduce_258(val, _values, result) - result = [ @builder.associate(nil, val[0], nil) ] - - result -end - -def _reduce_259(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_260(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_261(val, _values, result) - result = [ @builder.associate(nil, val[0], nil) ] - result.concat(val[1]) - - result -end - -def _reduce_262(val, _values, result) - assocs = @builder.associate(nil, val[2], nil) - result = val[0] << assocs - result.concat(val[3]) - - result -end - -def _reduce_263(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_264(val, _values, result) - # When branch gets invoked by RACC's lookahead - # and command args start with '[' or '(' - # we need to put `true` to the cmdarg stack - # **before** `false` pushed by lexer - # m [], n - # ^ - # Right here we have cmdarg [...0] because - # lexer pushed it on '[' - # We need to modify cmdarg stack to [...10] - # - # For all other cases (like `m n` or `m n, []`) we simply put 1 to the stack - # and later lexer pushes corresponding bits on top of it. - last_token = @last_token[0] - lookahead = last_token == :tLBRACK || last_token == :tLPAREN_ARG - - if lookahead - top = @lexer.cmdarg.pop - @lexer.cmdarg.push(true) - @lexer.cmdarg.push(top) - else - @lexer.cmdarg.push(true) - end - - result -end - -def _reduce_265(val, _values, result) - # call_args can be followed by tLBRACE_ARG (that does cmdarg.push(0) in the lexer) - # but the push must be done after cmdarg.pop() in the parser. - # So this code does cmdarg.pop() to pop 0 pushed by tLBRACE_ARG, - # cmdarg.pop() to pop 1 pushed by command_args, - # and cmdarg.push(0) to restore back the flag set by tLBRACE_ARG. - last_token = @last_token[0] - lookahead = last_token == :tLBRACE_ARG - if lookahead - top = @lexer.cmdarg.pop - @lexer.cmdarg.pop - @lexer.cmdarg.push(top) - else - @lexer.cmdarg.pop - end - - result = val[1] - - result -end - -def _reduce_266(val, _values, result) - result = @builder.block_pass(val[0], val[1]) - - result -end - -def _reduce_267(val, _values, result) - result = [ val[1] ] - - result -end - -def _reduce_268(val, _values, result) - result = [] - - result -end - -def _reduce_269(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_270(val, _values, result) - result = [ @builder.splat(val[0], val[1]) ] - - result -end - -def _reduce_271(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_272(val, _values, result) - result = val[0] << @builder.splat(val[2], val[3]) - - result -end - -def _reduce_273(val, _values, result) - result = @builder.array(nil, val[0], nil) - - result -end - -# reduce 274 omitted - -def _reduce_275(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_276(val, _values, result) - result = val[0] << @builder.splat(val[2], val[3]) - - result -end - -def _reduce_277(val, _values, result) - result = [ @builder.splat(val[0], val[1]) ] - - result -end - -# reduce 278 omitted - -# reduce 279 omitted - -# reduce 280 omitted - -# reduce 281 omitted - -# reduce 282 omitted - -# reduce 283 omitted - -# reduce 284 omitted - -# reduce 285 omitted - -# reduce 286 omitted - -# reduce 287 omitted - -def _reduce_288(val, _values, result) - result = @builder.call_method(nil, nil, val[0]) - - result -end - -def _reduce_289(val, _values, result) - @lexer.cmdarg.push(false) - - result -end - -def _reduce_290(val, _values, result) - @lexer.cmdarg.pop - - result = @builder.begin_keyword(val[0], val[2], val[3]) - - result -end - -def _reduce_291(val, _values, result) - @lexer.state = :expr_endarg - - result -end - -def _reduce_292(val, _values, result) - result = @builder.begin(val[0], val[1], val[3]) - - result -end - -def _reduce_293(val, _values, result) - @lexer.state = :expr_endarg - - result -end - -def _reduce_294(val, _values, result) - result = @builder.begin(val[0], nil, val[3]) - - result -end - -def _reduce_295(val, _values, result) - result = @builder.begin(val[0], val[1], val[2]) - - result -end - -def _reduce_296(val, _values, result) - result = @builder.const_fetch(val[0], val[1], val[2]) - - result -end - -def _reduce_297(val, _values, result) - result = @builder.const_global(val[0], val[1]) - - result -end - -def _reduce_298(val, _values, result) - result = @builder.array(val[0], val[1], val[2]) - - result -end - -def _reduce_299(val, _values, result) - result = @builder.associate(val[0], val[1], val[2]) - - result -end - -def _reduce_300(val, _values, result) - result = @builder.keyword_cmd(:return, val[0]) - - result -end - -def _reduce_301(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_302(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0], val[1], [], val[2]) - - result -end - -def _reduce_303(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0]) - - result -end - -def _reduce_304(val, _values, result) - result = @builder.keyword_cmd(:defined?, val[0], - val[2], [ val[3] ], val[4]) - - result -end - -def _reduce_305(val, _values, result) - result = @builder.not_op(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_306(val, _values, result) - result = @builder.not_op(val[0], val[1], nil, val[2]) - - result -end - -def _reduce_307(val, _values, result) - method_call = @builder.call_method(nil, nil, val[0]) - - begin_t, args, body, end_t = val[1] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -# reduce 308 omitted - -def _reduce_309(val, _values, result) - begin_t, args, body, end_t = val[1] - result = @builder.block(val[0], - begin_t, args, body, end_t) - - result -end - -def _reduce_310(val, _values, result) - result = @context.dup - @context.in_lambda = true - - result -end - -def _reduce_311(val, _values, result) - lambda_call = @builder.call_lambda(val[0]) - - args, (begin_t, body, end_t) = val[2] - result = @builder.block(lambda_call, - begin_t, args, body, end_t) - - @context.in_lambda = val[1].in_lambda - - result -end - -def _reduce_312(val, _values, result) - else_t, else_ = val[4] - result = @builder.condition(val[0], val[1], val[2], - val[3], else_t, - else_, val[5]) - - result -end - -def _reduce_313(val, _values, result) - else_t, else_ = val[4] - result = @builder.condition(val[0], val[1], val[2], - else_, else_t, - val[3], val[5]) - - result -end - -def _reduce_314(val, _values, result) - result = @builder.loop(:while, val[0], *val[1], val[2], val[3]) - - result -end - -def _reduce_315(val, _values, result) - result = @builder.loop(:until, val[0], *val[1], val[2], val[3]) - - result -end - -def _reduce_316(val, _values, result) - *when_bodies, (else_t, else_body) = *val[3] - - result = @builder.case(val[0], val[1], - when_bodies, else_t, else_body, - val[4]) - - result -end - -def _reduce_317(val, _values, result) - *when_bodies, (else_t, else_body) = *val[2] - - result = @builder.case(val[0], nil, - when_bodies, else_t, else_body, - val[3]) - - result -end - -def _reduce_318(val, _values, result) - result = @builder.for(val[0], val[1], val[2], *val[3], val[4], val[5]) - - result -end - -def _reduce_319(val, _values, result) - local_push - @context.in_class = true - - result -end - -def _reduce_320(val, _values, result) - k_class, ctx = val[0] - if @context.in_def - diagnostic :error, :class_in_def, nil, k_class - end - - lt_t, superclass = val[2] - result = @builder.def_class(k_class, val[1], - lt_t, superclass, - val[4], val[5]) - - local_pop - @context.in_class = ctx.in_class - - result -end - -def _reduce_321(val, _values, result) - @context.in_def = false - @context.in_class = false - local_push - - result -end - -def _reduce_322(val, _values, result) - k_class, ctx = val[0] - result = @builder.def_sclass(k_class, val[1], val[2], - val[5], val[6]) - - local_pop - @context.in_def = ctx.in_def - @context.in_class = ctx.in_class - - result -end - -def _reduce_323(val, _values, result) - @context.in_class = true - local_push - - result -end - -def _reduce_324(val, _values, result) - k_mod, ctx = val[0] - if @context.in_def - diagnostic :error, :module_in_def, nil, k_mod - end - - result = @builder.def_module(k_mod, val[1], - val[3], val[4]) - - local_pop - @context.in_class = ctx.in_class - - result -end - -def _reduce_325(val, _values, result) - local_push - result = context.dup - @context.in_def = true - - result -end - -def _reduce_326(val, _values, result) - result = @builder.def_method(val[0], val[1], - val[3], val[4], val[5]) - - local_pop - @context.in_def = val[2].in_def - - result -end - -def _reduce_327(val, _values, result) - @lexer.state = :expr_fname - - result -end - -def _reduce_328(val, _values, result) - local_push - result = context.dup - @context.in_def = true - - result -end - -def _reduce_329(val, _values, result) - result = @builder.def_singleton(val[0], val[1], val[2], - val[4], val[6], val[7], val[8]) - - local_pop - @context.in_def = val[5].in_def - - result -end - -def _reduce_330(val, _values, result) - result = @builder.keyword_cmd(:break, val[0]) - - result -end - -def _reduce_331(val, _values, result) - result = @builder.keyword_cmd(:next, val[0]) - - result -end - -def _reduce_332(val, _values, result) - result = @builder.keyword_cmd(:redo, val[0]) - - result -end - -def _reduce_333(val, _values, result) - result = @builder.keyword_cmd(:retry, val[0]) - - result -end - -# reduce 334 omitted - -def _reduce_335(val, _values, result) - result = [ val[0], @context.dup ] - - result -end - -def _reduce_336(val, _values, result) - result = [ val[0], @context.dup ] - - result -end - -def _reduce_337(val, _values, result) - if @context.in_class && !@context.in_def && !(context.in_block || context.in_lambda) - diagnostic :error, :invalid_return, nil, val[0] - end - - result -end - -# reduce 338 omitted - -# reduce 339 omitted - -def _reduce_340(val, _values, result) - result = val[1] - - result -end - -# reduce 341 omitted - -# reduce 342 omitted - -# reduce 343 omitted - -def _reduce_344(val, _values, result) - else_t, else_ = val[4] - result = [ val[0], - @builder.condition(val[0], val[1], val[2], - val[3], else_t, - else_, nil), - ] - - result -end - -# reduce 345 omitted - -def _reduce_346(val, _values, result) - result = val - - result -end - -# reduce 347 omitted - -# reduce 348 omitted - -def _reduce_349(val, _values, result) - result = @builder.arg(val[0]) - - result -end - -def _reduce_350(val, _values, result) - result = @builder.multi_lhs(val[0], val[1], val[2]) - - result -end - -def _reduce_351(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_352(val, _values, result) - result = val[0] << val[2] - - result -end - -# reduce 353 omitted - -def _reduce_354(val, _values, result) - result = val[0]. - push(@builder.restarg(val[2], val[3])) - - result -end - -def _reduce_355(val, _values, result) - result = val[0]. - push(@builder.restarg(val[2], val[3])). - concat(val[5]) - - result -end - -def _reduce_356(val, _values, result) - result = val[0]. - push(@builder.restarg(val[2])) - - result -end - -def _reduce_357(val, _values, result) - result = val[0]. - push(@builder.restarg(val[2])). - concat(val[4]) - - result -end - -def _reduce_358(val, _values, result) - result = [ @builder.restarg(val[0], val[1]) ] - - result -end - -def _reduce_359(val, _values, result) - result = [ @builder.restarg(val[0], val[1]), - *val[3] ] - - result -end - -def _reduce_360(val, _values, result) - result = [ @builder.restarg(val[0]) ] - - result -end - -def _reduce_361(val, _values, result) - result = [ @builder.restarg(val[0]), - *val[2] ] - - result -end - -def _reduce_362(val, _values, result) - result = val[0].concat(val[2]).concat(val[3]) - - result -end - -def _reduce_363(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_364(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_365(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_366(val, _values, result) - result = val[1] - - result -end - -def _reduce_367(val, _values, result) - result = [] - - result -end - -def _reduce_368(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_369(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[6]). - concat(val[7]) - - result -end - -def _reduce_370(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_371(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_372(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -# reduce 373 omitted - -def _reduce_374(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_375(val, _values, result) - if val[1].empty? && val[0].size == 1 - result = [@builder.procarg0(val[0][0])] - else - result = val[0].concat(val[1]) - end - - result -end - -def _reduce_376(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_377(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_378(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_379(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_380(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_381(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -# reduce 382 omitted - -def _reduce_383(val, _values, result) - result = @builder.args(nil, [], nil) - - result -end - -def _reduce_384(val, _values, result) - @lexer.state = :expr_value - - result -end - -def _reduce_385(val, _values, result) - result = @builder.args(val[0], val[1], val[2]) - - result -end - -def _reduce_386(val, _values, result) - result = @builder.args(val[0], [], val[0]) - - result -end - -def _reduce_387(val, _values, result) - result = @builder.args(val[0], val[1].concat(val[2]), val[3]) - - result -end - -def _reduce_388(val, _values, result) - result = [] - - result -end - -def _reduce_389(val, _values, result) - result = val[2] - - result -end - -def _reduce_390(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_391(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_392(val, _values, result) - @static_env.declare val[0][0] - result = @builder.shadowarg(val[0]) - - result -end - -# reduce 393 omitted - -def _reduce_394(val, _values, result) - @static_env.extend_dynamic - - result -end - -def _reduce_395(val, _values, result) - @lexer.cmdarg.push(false) - - result -end - -def _reduce_396(val, _values, result) - @lexer.cmdarg.pop - - result = [ val[1], val[3] ] - - @static_env.unextend - - result -end - -def _reduce_397(val, _values, result) - result = @builder.args(val[0], val[1].concat(val[2]), val[3]) - - result -end - -def _reduce_398(val, _values, result) - result = @builder.args(nil, val[0], nil) - - result -end - -def _reduce_399(val, _values, result) - result = @context.dup - @context.in_lambda = true - - result -end - -def _reduce_400(val, _values, result) - result = [ val[0], val[2], val[3] ] - @context.in_lambda = val[1].in_lambda - - result -end - -def _reduce_401(val, _values, result) - result = @context.dup - @context.in_lambda = true - - result -end - -def _reduce_402(val, _values, result) - result = [ val[0], val[2], val[3] ] - @context.in_lambda = val[1].in_lambda - - result -end - -def _reduce_403(val, _values, result) - result = @context.dup - @context.in_block = true - - result -end - -def _reduce_404(val, _values, result) - result = [ val[0], *val[2], val[3] ] - @context.in_block = val[1].in_block - - result -end - -def _reduce_405(val, _values, result) - begin_t, block_args, body, end_t = val[1] - result = @builder.block(val[0], - begin_t, block_args, body, end_t) - - result -end - -def _reduce_406(val, _values, result) - lparen_t, args, rparen_t = val[3] - result = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - result -end - -def _reduce_407(val, _values, result) - lparen_t, args, rparen_t = val[3] - method_call = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - begin_t, args, body, end_t = val[4] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_408(val, _values, result) - method_call = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - begin_t, args, body, end_t = val[4] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_409(val, _values, result) - lparen_t, args, rparen_t = val[1] - result = @builder.call_method(nil, nil, val[0], - lparen_t, args, rparen_t) - - result -end - -def _reduce_410(val, _values, result) - lparen_t, args, rparen_t = val[3] - result = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - result -end - -def _reduce_411(val, _values, result) - lparen_t, args, rparen_t = val[3] - result = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - result -end - -def _reduce_412(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2]) - - result -end - -def _reduce_413(val, _values, result) - lparen_t, args, rparen_t = val[2] - result = @builder.call_method(val[0], val[1], nil, - lparen_t, args, rparen_t) - - result -end - -def _reduce_414(val, _values, result) - lparen_t, args, rparen_t = val[2] - result = @builder.call_method(val[0], val[1], nil, - lparen_t, args, rparen_t) - - result -end - -def _reduce_415(val, _values, result) - lparen_t, args, rparen_t = val[1] - result = @builder.keyword_cmd(:super, val[0], - lparen_t, args, rparen_t) - - result -end - -def _reduce_416(val, _values, result) - result = @builder.keyword_cmd(:zsuper, val[0]) - - result -end - -def _reduce_417(val, _values, result) - result = @builder.index(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_418(val, _values, result) - result = @context.dup - @context.in_block = true - - result -end - -def _reduce_419(val, _values, result) - result = [ val[0], *val[2], val[3] ] - @context.in_block = val[1].in_block - - result -end - -def _reduce_420(val, _values, result) - result = @context.dup - @context.in_block = true - - result -end - -def _reduce_421(val, _values, result) - result = [ val[0], *val[2], val[3] ] - @context.in_block = val[1].in_block - - result -end - -def _reduce_422(val, _values, result) - @static_env.extend_dynamic - - result -end - -def _reduce_423(val, _values, result) - result = [ val[1], val[2] ] - - @static_env.unextend - - result -end - -def _reduce_424(val, _values, result) - @static_env.extend_dynamic - - result -end - -def _reduce_425(val, _values, result) - @lexer.cmdarg.push(false) - - result -end - -def _reduce_426(val, _values, result) - result = [ val[2], val[3] ] - - @static_env.unextend - @lexer.cmdarg.pop - - result -end - -def _reduce_427(val, _values, result) - result = [ @builder.when(val[0], val[1], val[2], val[3]), - *val[4] ] - - result -end - -def _reduce_428(val, _values, result) - result = [ val[0] ] - - result -end - -# reduce 429 omitted - -def _reduce_430(val, _values, result) - assoc_t, exc_var = val[2] - - if val[1] - exc_list = @builder.array(nil, val[1], nil) - end - - result = [ @builder.rescue_body(val[0], - exc_list, assoc_t, exc_var, - val[3], val[4]), - *val[5] ] - - result -end - -def _reduce_431(val, _values, result) - result = [] - - result -end - -def _reduce_432(val, _values, result) - result = [ val[0] ] - - result -end - -# reduce 433 omitted - -# reduce 434 omitted - -def _reduce_435(val, _values, result) - result = [ val[0], val[1] ] - - result -end - -# reduce 436 omitted - -def _reduce_437(val, _values, result) - result = [ val[0], val[1] ] - - result -end - -# reduce 438 omitted - -# reduce 439 omitted - -# reduce 440 omitted - -# reduce 441 omitted - -def _reduce_442(val, _values, result) - result = @builder.string_compose(nil, val[0], nil) - - result -end - -def _reduce_443(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_444(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_445(val, _values, result) - string = @builder.string_compose(val[0], val[1], val[2]) - result = @builder.dedent_string(string, @lexer.dedent_level) - - result -end - -def _reduce_446(val, _values, result) - string = @builder.string(val[0]) - result = @builder.dedent_string(string, @lexer.dedent_level) - - result -end - -def _reduce_447(val, _values, result) - result = @builder.character(val[0]) - - result -end - -def _reduce_448(val, _values, result) - string = @builder.xstring_compose(val[0], val[1], val[2]) - result = @builder.dedent_string(string, @lexer.dedent_level) - - result -end - -def _reduce_449(val, _values, result) - opts = @builder.regexp_options(val[3]) - result = @builder.regexp_compose(val[0], val[1], val[2], opts) - - result -end - -def _reduce_450(val, _values, result) - result = @builder.words_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_451(val, _values, result) - result = [] - - result -end - -def _reduce_452(val, _values, result) - result = val[0] << @builder.word(val[1]) - - result -end - -def _reduce_453(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_454(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_455(val, _values, result) - result = @builder.symbols_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_456(val, _values, result) - result = [] - - result -end - -def _reduce_457(val, _values, result) - result = val[0] << @builder.word(val[1]) - - result -end - -def _reduce_458(val, _values, result) - result = @builder.words_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_459(val, _values, result) - result = @builder.symbols_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_460(val, _values, result) - result = [] - - result -end - -def _reduce_461(val, _values, result) - result = val[0] << @builder.string_internal(val[1]) - - result -end - -def _reduce_462(val, _values, result) - result = [] - - result -end - -def _reduce_463(val, _values, result) - result = val[0] << @builder.symbol_internal(val[1]) - - result -end - -def _reduce_464(val, _values, result) - result = [] - - result -end - -def _reduce_465(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_466(val, _values, result) - result = [] - - result -end - -def _reduce_467(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_468(val, _values, result) - result = [] - - result -end - -def _reduce_469(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_470(val, _values, result) - result = @builder.string_internal(val[0]) - - result -end - -def _reduce_471(val, _values, result) - result = val[1] - - result -end - -def _reduce_472(val, _values, result) - @lexer.cmdarg.push(false) - @lexer.cond.push(false) - - result -end - -def _reduce_473(val, _values, result) - @lexer.cmdarg.pop - @lexer.cond.pop - - result = @builder.begin(val[0], val[2], val[3]) - - result -end - -def _reduce_474(val, _values, result) - result = @builder.gvar(val[0]) - - result -end - -def _reduce_475(val, _values, result) - result = @builder.ivar(val[0]) - - result -end - -def _reduce_476(val, _values, result) - result = @builder.cvar(val[0]) - - result -end - -# reduce 477 omitted - -def _reduce_478(val, _values, result) - @lexer.state = :expr_end - result = @builder.symbol(val[0]) - - result -end - -def _reduce_479(val, _values, result) - @lexer.state = :expr_end - result = @builder.symbol_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_480(val, _values, result) - result = val[0] - - result -end - -def _reduce_481(val, _values, result) - if @builder.respond_to? :negate - # AST builder interface compatibility - result = @builder.negate(val[0], val[1]) - else - result = @builder.unary_num(val[0], val[1]) - end - - result -end - -def _reduce_482(val, _values, result) - @lexer.state = :expr_end - result = @builder.integer(val[0]) - - result -end - -def _reduce_483(val, _values, result) - @lexer.state = :expr_end - result = @builder.float(val[0]) - - result -end - -def _reduce_484(val, _values, result) - @lexer.state = :expr_end - result = @builder.rational(val[0]) - - result -end - -def _reduce_485(val, _values, result) - @lexer.state = :expr_end - result = @builder.complex(val[0]) - - result -end - -def _reduce_486(val, _values, result) - result = @builder.ident(val[0]) - - result -end - -def _reduce_487(val, _values, result) - result = @builder.ivar(val[0]) - - result -end - -def _reduce_488(val, _values, result) - result = @builder.gvar(val[0]) - - result -end - -def _reduce_489(val, _values, result) - result = @builder.const(val[0]) - - result -end - -def _reduce_490(val, _values, result) - result = @builder.cvar(val[0]) - - result -end - -def _reduce_491(val, _values, result) - result = @builder.nil(val[0]) - - result -end - -def _reduce_492(val, _values, result) - result = @builder.self(val[0]) - - result -end - -def _reduce_493(val, _values, result) - result = @builder.true(val[0]) - - result -end - -def _reduce_494(val, _values, result) - result = @builder.false(val[0]) - - result -end - -def _reduce_495(val, _values, result) - result = @builder.__FILE__(val[0]) - - result -end - -def _reduce_496(val, _values, result) - result = @builder.__LINE__(val[0]) - - result -end - -def _reduce_497(val, _values, result) - result = @builder.__ENCODING__(val[0]) - - result -end - -def _reduce_498(val, _values, result) - result = @builder.accessible(val[0]) - - result -end - -def _reduce_499(val, _values, result) - result = @builder.accessible(val[0]) - - result -end - -def _reduce_500(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_501(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_502(val, _values, result) - result = @builder.nth_ref(val[0]) - - result -end - -def _reduce_503(val, _values, result) - result = @builder.back_ref(val[0]) - - result -end - -def _reduce_504(val, _values, result) - @lexer.state = :expr_value - - result -end - -def _reduce_505(val, _values, result) - result = [ val[0], val[2] ] - - result -end - -def _reduce_506(val, _values, result) - result = nil - - result -end - -def _reduce_507(val, _values, result) - result = @builder.args(val[0], val[1], val[2]) - - @lexer.state = :expr_value - - result -end - -def _reduce_508(val, _values, result) - result = @context.in_kwarg - @context.in_kwarg = true - - result -end - -def _reduce_509(val, _values, result) - @context.in_kwarg = val[0] - result = @builder.args(nil, val[1], nil) - - result -end - -def _reduce_510(val, _values, result) - result = val[0].concat(val[2]).concat(val[3]) - - result -end - -def _reduce_511(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_512(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_513(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_514(val, _values, result) - result = val[1] - - result -end - -def _reduce_515(val, _values, result) - result = [] - - result -end - -def _reduce_516(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_517(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[6]). - concat(val[7]) - - result -end - -def _reduce_518(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_519(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_520(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_521(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_522(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_523(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_524(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_525(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_526(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_527(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_528(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_529(val, _values, result) - result = val[0] - - result -end - -def _reduce_530(val, _values, result) - result = [] - - result -end - -def _reduce_531(val, _values, result) - diagnostic :error, :argument_const, nil, val[0] - - result -end - -def _reduce_532(val, _values, result) - diagnostic :error, :argument_ivar, nil, val[0] - - result -end - -def _reduce_533(val, _values, result) - diagnostic :error, :argument_gvar, nil, val[0] - - result -end - -def _reduce_534(val, _values, result) - diagnostic :error, :argument_cvar, nil, val[0] - - result -end - -# reduce 535 omitted - -def _reduce_536(val, _values, result) - @static_env.declare val[0][0] - - result = val[0] - - result -end - -def _reduce_537(val, _values, result) - result = val[0] - - result -end - -def _reduce_538(val, _values, result) - result = @builder.arg(val[0]) - - result -end - -def _reduce_539(val, _values, result) - result = @builder.multi_lhs(val[0], val[1], val[2]) - - result -end - -def _reduce_540(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_541(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_542(val, _values, result) - check_kwarg_name(val[0]) - - @static_env.declare val[0][0] - - result = val[0] - - result -end - -def _reduce_543(val, _values, result) - result = @builder.kwoptarg(val[0], val[1]) - - result -end - -def _reduce_544(val, _values, result) - result = @builder.kwarg(val[0]) - - result -end - -def _reduce_545(val, _values, result) - result = @builder.kwoptarg(val[0], val[1]) - - result -end - -def _reduce_546(val, _values, result) - result = @builder.kwarg(val[0]) - - result -end - -def _reduce_547(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_548(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_549(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_550(val, _values, result) - result = val[0] << val[2] - - result -end - -# reduce 551 omitted - -# reduce 552 omitted - -def _reduce_553(val, _values, result) - @static_env.declare val[1][0] - - result = [ @builder.kwrestarg(val[0], val[1]) ] - - result -end - -def _reduce_554(val, _values, result) - result = [ @builder.kwrestarg(val[0]) ] - - result -end - -def _reduce_555(val, _values, result) - result = @builder.optarg(val[0], val[1], val[2]) - - result -end - -def _reduce_556(val, _values, result) - result = @builder.optarg(val[0], val[1], val[2]) - - result -end - -def _reduce_557(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_558(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_559(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_560(val, _values, result) - result = val[0] << val[2] - - result -end - -# reduce 561 omitted - -# reduce 562 omitted - -def _reduce_563(val, _values, result) - @static_env.declare val[1][0] - - result = [ @builder.restarg(val[0], val[1]) ] - - result -end - -def _reduce_564(val, _values, result) - result = [ @builder.restarg(val[0]) ] - - result -end - -# reduce 565 omitted - -# reduce 566 omitted - -def _reduce_567(val, _values, result) - @static_env.declare val[1][0] - - result = @builder.blockarg(val[0], val[1]) - - result -end - -def _reduce_568(val, _values, result) - result = [ val[1] ] - - result -end - -def _reduce_569(val, _values, result) - result = [] - - result -end - -# reduce 570 omitted - -def _reduce_571(val, _values, result) - result = val[1] - - result -end - -def _reduce_572(val, _values, result) - result = [] - - result -end - -# reduce 573 omitted - -def _reduce_574(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_575(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_576(val, _values, result) - result = @builder.pair(val[0], val[1], val[2]) - - result -end - -def _reduce_577(val, _values, result) - result = @builder.pair_keyword(val[0], val[1]) - - result -end - -def _reduce_578(val, _values, result) - result = @builder.pair_quoted(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_579(val, _values, result) - result = @builder.kwsplat(val[0], val[1]) - - result -end - -# reduce 580 omitted - -# reduce 581 omitted - -# reduce 582 omitted - -# reduce 583 omitted - -# reduce 584 omitted - -# reduce 585 omitted - -# reduce 586 omitted - -# reduce 587 omitted - -# reduce 588 omitted - -# reduce 589 omitted - -# reduce 590 omitted - -# reduce 591 omitted - -def _reduce_592(val, _values, result) - result = [:dot, val[0][1]] - - result -end - -def _reduce_593(val, _values, result) - result = [:anddot, val[0][1]] - - result -end - -# reduce 594 omitted - -# reduce 595 omitted - -# reduce 596 omitted - -# reduce 597 omitted - -def _reduce_598(val, _values, result) - result = val[1] - - result -end - -def _reduce_599(val, _values, result) - result = val[1] - - result -end - -# reduce 600 omitted - -# reduce 601 omitted - -# reduce 602 omitted - -def _reduce_603(val, _values, result) - yyerrok - - result -end - -# reduce 604 omitted - -# reduce 605 omitted - -# reduce 606 omitted - -def _reduce_607(val, _values, result) - result = nil - - result -end - -def _reduce_none(val, _values, result) - val[0] -end - - end # class Ruby25 -end # module Parser diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ruby26.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ruby26.rb deleted file mode 100644 index 5f81c329..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ruby26.rb +++ /dev/null @@ -1,10352 +0,0 @@ -# -*- encoding:utf-8; warn-indent:false; frozen_string_literal: true -*- -# -# DO NOT MODIFY!!!! -# This file is automatically generated by Racc 1.7.3 -# from Racc grammar file "ruby26.y". -# - -require 'racc/parser.rb' - - -require 'parser' - -module Parser - class Ruby26 < Parser::Base - - - def version - 26 - end - - def default_encoding - Encoding::UTF_8 - end - - def local_push - @static_env.extend_static - @lexer.cmdarg.push(false) - @lexer.cond.push(false) - end - - def local_pop - @static_env.unextend - @lexer.cmdarg.pop - @lexer.cond.pop - end -##### State transition tables begin ### - -racc_action_table = [ - -489, 215, 216, 215, 216, 223, -102, -489, -489, -489, - 114, 550, -489, -489, -489, 221, -489, 277, 225, 591, - 263, 264, 270, 550, -489, 593, -489, -489, -489, 277, - 563, 277, -503, 127, 564, -103, -489, -489, 550, -489, - -489, -489, -489, -489, 550, 550, -102, -103, -110, -110, - -88, -109, -101, 792, -109, 557, 262, 261, 277, 226, - -74, 212, -110, 213, -105, -107, -489, -489, -489, -489, - -489, -489, -489, -489, -489, -489, -489, -489, -489, -489, - 222, 272, -489, -489, -489, 590, -489, -489, 706, -102, - -489, 592, 873, -489, -489, 226, -489, 226, -489, 214, - -489, 217, -489, -489, 276, -489, -489, -489, -489, -489, - -105, -489, -492, -489, -107, -93, 276, -104, 276, -492, - -492, -492, 272, -106, -492, -492, -492, -489, -492, 118, - -489, -489, -489, -489, 117, -489, -492, -489, -492, -492, - -492, 118, -489, -489, -94, 276, 117, -96, -492, -492, - -108, -492, -492, -492, -492, -492, 118, -104, -101, 826, - -100, 117, 118, 118, -102, -103, -110, 117, 117, -102, - -103, -110, -109, -96, -98, -106, 780, -109, -492, -492, - -492, -492, -492, -492, -492, -492, -492, -492, -492, -492, - -492, -492, 118, 266, -492, -492, -492, 117, -492, -492, - -586, 872, -492, 325, -98, -492, -492, 326, -492, -108, - -492, 779, -492, -96, -492, -492, 226, -492, -492, -492, - -492, -492, -298, -492, 396, -492, -95, -587, -105, -298, - -298, -298, -107, -105, 780, -298, -298, -107, -298, -492, - -586, -106, -492, -492, -492, -492, -106, -492, 409, -492, - 215, 216, -504, -96, -492, -492, -96, 458, -298, -298, - -95, -298, -298, -298, -298, -298, -96, 460, -108, 779, - -98, -489, -97, -108, -587, -104, 215, 216, -489, 683, - -104, 680, 679, 678, -97, 681, 215, 216, -298, -298, - -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, - -298, -298, 461, 459, -298, -298, -298, -492, 616, -103, - -98, -503, -298, -98, -492, -298, 96, 97, -99, 578, - -298, 225, -298, -98, -298, -298, -95, -298, -298, -298, - -298, -298, -499, -298, -590, -298, -489, -586, -97, -499, - 406, -590, -590, -590, 226, 408, 407, -590, -590, -298, - -590, 118, -298, -298, 489, -99, 117, -298, -93, -590, - -110, 891, 215, 216, -298, -108, -95, -583, -102, -95, - -590, -590, -492, -590, -590, -590, -590, -590, -97, -95, - 118, -97, 498, 580, 579, 117, 683, 578, 680, 679, - 678, -97, 681, 738, 98, 99, 500, -499, 578, 223, - -590, -590, -590, -590, -590, -590, -590, -590, -590, -590, - -590, -590, -590, -590, 527, 502, -590, -590, -590, -489, - 617, 96, 97, 578, -590, 118, -489, -590, 118, 766, - 117, -583, -590, 117, -590, -489, -590, -590, -504, -590, - -590, -590, -590, -590, 767, -590, -590, -590, 578, 127, - -498, 580, 579, 576, -583, 578, -110, -498, -73, -584, - 578, -590, 580, 579, -590, -590, -590, -97, 984, -590, - 226, -109, 740, -590, -590, -590, -590, -106, -590, -590, - -590, 513, -590, 514, -489, -94, -105, 580, 579, 576, - -500, -590, -590, -590, -590, -103, 521, -500, 281, 98, - 99, -107, -590, -590, 644, -590, -590, -590, -590, -590, - 527, -492, 580, 579, 581, -498, 578, 226, -492, 580, - 579, 583, 578, -584, 580, 579, 585, -492, 540, 823, - 792, 539, -590, -590, -590, -590, -590, -590, -590, -590, - -590, -590, -590, -590, -590, -590, -584, 272, -590, -590, - -590, 524, 768, -590, 221, -500, -590, -100, -497, -590, - -590, 220, -590, 528, -590, -497, -590, -109, -590, -590, - 218, -590, -590, -590, -590, -590, -492, -590, -590, -590, - 580, 579, 589, -494, -336, -495, 580, 579, 594, 246, - -494, -336, -495, -590, 246, 611, -590, -590, -590, -590, - -336, -590, 611, -590, -298, 612, 845, 612, -590, -106, - 118, -298, -298, -298, 226, 117, -298, -298, -298, 222, - -298, 243, 543, -497, 544, 245, 244, -496, 221, 246, - -298, -298, -298, 540, -496, 270, 542, 502, 753, 753, - -298, -298, -96, -298, -298, -298, -298, -298, -494, -336, - -495, 221, -105, -501, -98, 699, 698, 557, 456, -105, - -501, 243, -107, -104, -107, 245, 244, 457, 398, -501, - -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, - -298, -298, -298, -298, 118, -95, -298, -298, -298, 117, - 769, -298, -496, 222, -298, -104, -104, -298, -298, 561, - -298, 562, -298, 570, -298, 540, -298, -298, 542, -298, - -298, -298, -298, -298, -298, -298, 222, -298, -501, 823, - 792, -298, -298, -298, 595, 598, 540, -298, -298, 542, - -298, -298, 246, -271, -298, -298, -298, -298, 600, -298, - 84, -298, -590, 601, 605, 226, -298, -108, 256, 257, - -298, -298, 85, -298, -298, -298, -298, -298, 226, -502, - 609, 1000, 86, 221, 243, 610, -502, 272, 245, 244, - 520, 241, 242, 621, 246, -502, 246, 246, 246, 518, - -298, -298, -298, -298, -298, -298, -298, -298, -298, -298, - -298, -298, -298, -298, -590, -289, -298, -298, -298, 226, - 616, -590, -289, 226, -298, 226, -586, -298, -88, 647, - -590, -289, -298, 226, -298, 533, -298, -298, 658, -298, - -298, -298, -298, -298, -502, -298, -590, -298, 222, -590, - 663, 664, 226, -590, -590, -590, 688, 666, 702, -590, - -590, -298, -590, 707, -298, -298, 691, -298, 221, -298, - 708, -590, 557, 710, 727, 530, -298, -108, 737, -590, - -289, 741, -590, -590, 457, -590, -590, -590, -590, -590, - 683, 221, 680, 679, 678, 742, 681, -272, 560, 699, - 698, 754, 489, 489, 692, 732, 733, 558, 226, 734, - 112, 113, -590, -590, -590, -590, -590, -590, -590, -590, - -590, -590, -590, -590, -590, -590, 771, 812, -590, -590, - -590, 221, 617, 222, 221, 772, -590, 266, 566, -590, - 777, 604, 782, 500, -590, 502, -590, 568, -590, -590, - 602, -590, -590, -590, -590, -590, 222, -590, -590, -590, - 683, 658, 680, 679, 678, 688, 681, -299, 121, 122, - 123, 124, 125, -590, -299, 691, -590, -590, -419, -590, - 226, -590, 272, -299, 272, -419, -419, -419, -590, -106, - -419, -419, -419, 658, -419, 246, 222, 686, 792, 222, - 800, 246, 803, -419, -419, -419, 696, 695, 699, 698, - 804, 806, 808, 692, -419, -419, 810, -419, -419, -419, - -419, -419, 683, 818, 680, 679, 678, -299, 681, 819, - 820, 792, -299, 243, -299, 825, 226, 245, 244, 226, - 241, 242, 226, -299, -419, -419, -419, -419, -419, -419, - -419, -419, -419, -419, -419, -419, -419, -419, 834, 812, - -419, -419, -419, -273, 226, -419, 844, 272, -419, 848, - 658, -419, -419, 865, -419, -271, -419, 869, -419, 226, - -419, -419, 889, -419, -419, -419, -419, -419, -305, -419, - -419, -419, -299, 226, 893, -305, -305, -305, 895, 898, - -305, -305, -305, 221, -305, -419, 899, 902, -419, -419, - 970, -419, 226, -419, -305, -305, 906, -274, 908, 568, - -419, 803, 911, 913, -305, -305, 915, -305, -305, -305, - -305, -305, 917, 226, 919, -298, 920, -298, 933, 803, - 935, 937, -298, 939, -298, 941, 941, -587, 226, -587, - 947, -298, 953, -298, -305, -305, -305, -305, -305, -305, - -305, -305, -305, -305, -305, -305, -305, -305, 222, 727, - -305, -305, -305, 964, 971, -305, 976, 281, -305, 986, - 803, -305, -305, 990, -305, 992, -305, 994, -305, 996, - -305, -305, 996, -305, -305, -305, -305, -305, -290, -305, - -298, -305, -298, 663, 1009, -290, -290, -290, 1010, 1011, - -290, -290, -290, 221, -290, -305, 941, 941, -305, -305, - 975, -305, 941, -305, -290, -290, -290, 1016, 986, 973, - -305, 1019, -587, -586, -290, -290, 226, -290, -290, -290, - -290, -290, 967, 221, 680, 679, 678, 986, 681, 683, - 970, 680, 679, 678, 967, 681, 680, 679, 678, 568, - 681, 1028, 996, 996, -290, -290, -290, -290, -290, -290, - -290, -290, -290, -290, -290, -290, -290, -290, 222, 688, - -290, -290, -290, 996, 941, -290, 812, 986, -290, 691, - 996, -290, -290, nil, -290, 815, -290, nil, -290, nil, - -290, -290, nil, -290, -290, -290, -290, -290, 222, -290, - nil, -290, 683, nil, 680, 679, 678, nil, 681, nil, - nil, nil, 699, 698, nil, -290, nil, 692, -290, -290, - -290, -290, nil, -290, -254, -290, nil, nil, nil, nil, - -290, -254, -254, -254, nil, nil, -254, -254, -254, 812, - -254, 683, nil, 680, 679, 678, nil, 681, 815, -254, - -254, -254, 683, nil, 680, 679, 678, nil, 681, nil, - -254, -254, nil, -254, -254, -254, -254, -254, 683, nil, - 680, 679, 678, 683, 681, 680, 679, 678, 812, 681, - 121, 122, 123, 124, 125, nil, nil, 946, nil, 812, - -254, -254, -254, -254, -254, -254, -254, -254, -254, -254, - -254, -254, -254, -254, nil, 812, -254, -254, -254, nil, - 812, -254, nil, 272, -254, nil, nil, -254, -254, nil, - -254, nil, -254, nil, -254, nil, -254, -254, nil, -254, - -254, -254, -254, -254, nil, -254, -254, -254, 683, nil, - 680, 679, 678, 688, 681, 121, 122, 123, 124, 125, - nil, -254, nil, 691, -254, -254, -591, -254, nil, -254, - nil, nil, nil, -591, -591, -591, -254, nil, -591, -591, - -591, nil, -591, 246, nil, 686, 121, 122, 123, 124, - 125, -591, -591, -591, -591, nil, 699, 698, nil, 256, - 257, 692, -591, -591, nil, -591, -591, -591, -591, -591, - nil, nil, nil, nil, nil, 243, nil, 249, nil, 245, - 244, nil, 241, 242, nil, nil, 247, nil, 248, nil, - nil, nil, -591, -591, -591, -591, -591, -591, -591, -591, - -591, -591, -591, -591, -591, -591, nil, nil, -591, -591, - -591, 246, nil, -591, nil, nil, -591, nil, nil, -591, - -591, nil, -591, nil, -591, nil, -591, nil, -591, -591, - nil, -591, -591, -591, -591, -591, nil, -591, -591, -591, - nil, nil, nil, 243, nil, nil, nil, 245, 244, nil, - 241, 242, nil, -591, nil, nil, -591, -591, -591, -591, - nil, -591, -592, -591, nil, nil, nil, nil, -591, -592, - -592, -592, nil, nil, -592, -592, -592, 246, -592, nil, - nil, nil, nil, nil, nil, nil, nil, -592, -592, -592, - -592, nil, nil, 256, 257, nil, nil, nil, -592, -592, - nil, -592, -592, -592, -592, -592, nil, nil, nil, 243, - nil, 249, nil, 245, 244, nil, 241, 242, nil, nil, - 247, nil, 248, nil, nil, nil, nil, nil, -592, -592, - -592, -592, -592, -592, -592, -592, -592, -592, -592, -592, - -592, -592, nil, nil, -592, -592, -592, nil, nil, -592, - nil, nil, -592, nil, nil, -592, -592, nil, -592, nil, - -592, nil, -592, nil, -592, -592, nil, -592, -592, -592, - -592, -592, nil, -592, -592, -592, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, -592, - nil, nil, -592, -592, -592, -592, nil, -592, -254, -592, - nil, nil, nil, nil, -592, -254, -254, -254, nil, nil, - -254, -254, -254, 246, -254, nil, nil, nil, nil, nil, - nil, nil, nil, -254, -254, nil, nil, nil, nil, 256, - 257, nil, nil, nil, -254, -254, nil, -254, -254, -254, - -254, -254, nil, nil, nil, 243, nil, 249, nil, 245, - 244, nil, 241, 242, nil, nil, nil, 246, 250, 251, - 252, 253, 263, 264, 258, 259, 254, 255, nil, 239, - 240, nil, nil, 256, 257, -254, nil, nil, nil, nil, - nil, nil, -254, nil, nil, nil, nil, 272, -254, 243, - nil, 249, nil, 245, 244, nil, 241, 242, 262, 261, - 247, nil, 248, nil, nil, nil, nil, nil, nil, nil, - -254, -254, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 260, nil, nil, -254, nil, nil, -254, nil, - nil, nil, nil, -254, 5, 75, 76, 77, 9, 58, - -254, nil, nil, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 78, 28, 27, 106, 105, 107, 108, nil, - nil, 19, nil, nil, nil, nil, 606, 8, 46, 7, - 10, 110, 109, 111, 100, 57, 102, 101, 103, nil, - 104, 112, 113, nil, 96, 97, 42, 43, 41, 246, - 250, 251, 252, 253, 263, 264, 258, 259, 254, 255, - nil, 239, 240, nil, nil, 256, 257, nil, 40, nil, - nil, 33, nil, nil, 59, 60, nil, nil, 61, nil, - 35, 243, nil, 249, 45, 245, 244, nil, 241, 242, - 262, 261, 247, 20, 248, nil, nil, nil, 94, 84, - 87, 88, nil, 89, 91, 90, 92, nil, nil, nil, - nil, 85, 93, nil, 260, nil, -246, nil, nil, 63, - nil, 86, 98, 99, 299, 75, 76, 77, 9, 58, - nil, nil, nil, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 78, 28, 27, 106, 105, 107, 108, nil, - nil, 19, nil, nil, nil, nil, 606, 8, 46, 301, - 10, 110, 109, 111, 100, 57, 102, 101, 103, nil, - 104, 112, 113, nil, 96, 97, 42, 43, 41, 246, - 250, 251, 252, 253, 263, 264, 258, 259, 254, 255, - nil, 239, 240, nil, nil, 256, 257, nil, 40, nil, - nil, 303, nil, nil, 59, 60, nil, nil, 61, nil, - 35, 243, nil, 249, 45, 245, 244, nil, 241, 242, - 262, 261, 247, 20, 248, nil, nil, nil, 94, 84, - 87, 88, nil, 89, 91, 90, 92, nil, nil, nil, - nil, 85, 93, nil, 260, nil, nil, nil, nil, 63, - nil, 86, 98, 99, 5, 75, 76, 77, 9, 58, - nil, nil, nil, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 78, 28, 27, 106, 105, 107, 108, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 46, 7, - 10, 110, 109, 111, 100, 57, 102, 101, 103, nil, - 104, 112, 113, nil, 96, 97, 42, 43, 41, 246, - 250, 251, 252, 253, 263, 264, 258, 259, 254, 255, - nil, 239, 240, nil, nil, 256, 257, nil, 40, nil, - nil, 33, nil, nil, 59, 60, nil, nil, 61, nil, - 35, 243, nil, 249, 45, 245, 244, nil, 241, 242, - 262, 261, 247, 20, 248, nil, nil, nil, 94, 84, - 87, 88, nil, 89, 91, 90, 92, nil, nil, nil, - nil, 85, 93, nil, 260, nil, nil, nil, nil, 63, - nil, 86, 98, 99, 299, 75, 76, 77, 9, 58, - nil, nil, nil, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 78, 28, 27, 106, 105, 107, 108, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 46, 301, - 10, 110, 109, 111, 100, 57, 102, 101, 103, nil, - 104, 112, 113, nil, 96, 97, 42, 43, 41, 246, - 250, 251, 252, 253, 263, 264, 258, 259, 254, 255, - nil, 239, 240, nil, nil, 256, 257, nil, 40, nil, - nil, 33, nil, nil, 59, 60, nil, nil, 61, nil, - 35, 243, nil, 249, 45, 245, 244, nil, 241, 242, - 262, 261, 247, 20, 248, nil, nil, nil, 94, 84, - 87, 88, nil, 89, 91, 90, 92, nil, nil, nil, - nil, 85, 93, 226, 260, nil, nil, nil, nil, 63, - nil, 86, 98, 99, 299, 75, 76, 77, 9, 58, - nil, nil, nil, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 78, 28, 27, 106, 105, 107, 108, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 46, 301, - 10, 110, 109, 111, 100, 57, 102, 101, 103, nil, - 104, 112, 113, nil, 96, 97, 42, 43, 41, 246, - 250, 251, 252, 253, 263, 264, 258, 259, 254, 255, - nil, 239, 240, nil, nil, 256, 257, nil, 40, nil, - nil, 33, nil, nil, 59, 60, nil, nil, 61, nil, - 35, 243, nil, 249, 45, 245, 244, nil, 241, 242, - 262, 261, 247, 20, 248, nil, nil, nil, 94, 84, - 87, 88, nil, 89, 91, 90, 92, nil, nil, nil, - nil, 85, 93, nil, 260, nil, nil, nil, nil, 63, - nil, 86, 98, 99, 299, 75, 76, 77, 9, 58, - nil, nil, nil, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 78, 28, 27, 106, 105, 107, 108, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 46, 301, - 10, 110, 109, 111, 100, 57, 102, 101, 103, nil, - 104, 112, 113, nil, 96, 97, 42, 43, 41, 246, - 250, 251, 252, 253, 263, 264, 258, 259, 254, 255, - nil, 239, 240, nil, nil, 256, 257, nil, 40, nil, - nil, 303, nil, nil, 59, 60, nil, nil, 61, nil, - 35, 243, nil, 249, 45, 245, 244, nil, 241, 242, - 262, 261, 247, 20, 248, nil, nil, nil, 94, 84, - 87, 88, nil, 89, 91, 90, 92, nil, nil, nil, - nil, 85, 93, nil, 260, nil, nil, nil, nil, 63, - nil, 86, 98, 99, 299, 75, 76, 77, 9, 58, - nil, nil, nil, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 78, 28, 27, 106, 105, 107, 108, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 46, 301, - 10, 110, 109, 111, 100, 57, 102, 101, 103, nil, - 104, 112, 113, nil, 96, 97, 42, 43, 41, 246, - 250, 251, 252, 253, 263, 264, 258, 259, 254, 255, - nil, 239, 240, nil, nil, 256, 257, nil, 40, nil, - nil, 303, nil, nil, 59, 60, nil, nil, 61, nil, - 35, 243, nil, 249, 45, 245, 244, nil, 241, 242, - 262, 261, 247, 20, 248, nil, nil, nil, 94, 84, - 87, 88, nil, 89, 91, 90, 92, nil, nil, nil, - nil, 85, 93, nil, 260, nil, nil, nil, nil, 63, - nil, 86, 98, 99, 299, 75, 76, 77, 9, 58, - nil, nil, nil, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 78, 28, 27, 106, 105, 107, 108, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 46, 301, - 10, 110, 109, 111, 100, 57, 102, 101, 103, nil, - 104, 112, 113, nil, 96, 97, 42, 43, 41, 246, - 250, 251, 252, 253, 263, 264, 258, 259, 254, 255, - nil, -611, -611, nil, nil, 256, 257, nil, 40, nil, - nil, 33, nil, nil, 59, 60, nil, nil, 61, nil, - 35, 243, nil, 249, 45, 245, 244, nil, 241, 242, - 262, 261, 247, 20, 248, nil, nil, nil, 94, 84, - 87, 88, nil, 89, 91, 90, 92, nil, nil, nil, - nil, 85, 93, nil, nil, nil, nil, nil, nil, 63, - nil, 86, 98, 99, 299, 75, 76, 77, 9, 58, - nil, nil, nil, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 78, 28, 27, 106, 105, 107, 108, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 46, 301, - 10, 110, 109, 111, 100, 57, 102, 101, 103, nil, - 104, 112, 113, nil, 96, 97, 42, 43, 41, 246, - 250, 251, 252, 253, 263, 264, 258, 259, 254, 255, - nil, -611, -611, nil, nil, 256, 257, nil, 40, nil, - nil, 33, nil, nil, 59, 60, nil, nil, 61, nil, - 35, 243, nil, 249, 45, 245, 244, nil, 241, 242, - 262, 261, 247, 20, 248, nil, nil, nil, 94, 84, - 87, 88, nil, 89, 91, 90, 92, nil, nil, nil, - nil, 85, 93, nil, nil, nil, nil, nil, nil, 63, - nil, 86, 98, 99, 299, 75, 76, 77, 9, 58, - nil, nil, nil, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 78, 28, 27, 106, 105, 107, 108, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 46, 301, - 10, 110, 109, 111, 100, 57, 102, 101, 103, nil, - 104, 112, 113, nil, 96, 97, 42, 43, 41, 246, - -611, -611, -611, -611, 263, 264, nil, nil, -611, -611, - nil, nil, nil, nil, nil, 256, 257, nil, 40, nil, - nil, 33, nil, nil, 59, 60, nil, nil, 61, nil, - 35, 243, nil, 249, 45, 245, 244, nil, 241, 242, - 262, 261, 247, 20, 248, nil, nil, nil, 94, 84, - 87, 88, nil, 89, 91, 90, 92, nil, nil, nil, - nil, 85, 93, nil, nil, nil, nil, nil, nil, 63, - nil, 86, 98, 99, 299, 75, 76, 77, 9, 58, - nil, nil, nil, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 78, 28, 27, 106, 105, 107, 108, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 46, 301, - 10, 110, 109, 111, 100, 57, 102, 101, 103, nil, - 104, 112, 113, nil, 96, 97, 42, 43, 41, 246, - -611, -611, -611, -611, 263, 264, nil, nil, -611, -611, - nil, nil, nil, nil, nil, 256, 257, nil, 40, nil, - nil, 33, nil, nil, 59, 60, nil, nil, 61, nil, - 35, 243, nil, 249, 45, 245, 244, nil, 241, 242, - 262, 261, 247, 20, 248, nil, nil, nil, 94, 84, - 87, 88, nil, 89, 91, 90, 92, nil, nil, nil, - nil, 85, 93, nil, nil, nil, nil, nil, nil, 63, - nil, 86, 98, 99, 299, 75, 76, 77, 9, 58, - nil, nil, nil, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 78, 28, 27, 106, 105, 107, 108, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 46, 301, - 10, 110, 109, 111, 100, 57, 102, 101, 103, nil, - 104, 112, 113, nil, 96, 97, 42, 43, 41, 246, - -611, -611, -611, -611, 263, 264, nil, nil, -611, -611, - nil, nil, nil, nil, nil, 256, 257, nil, 40, nil, - nil, 33, nil, nil, 59, 60, nil, nil, 61, nil, - 35, 243, nil, 249, 45, 245, 244, nil, 241, 242, - 262, 261, 247, 20, 248, nil, nil, nil, 94, 84, - 87, 88, nil, 89, 91, 90, 92, nil, nil, nil, - nil, 85, 93, nil, nil, nil, nil, nil, nil, 63, - nil, 86, 98, 99, 299, 75, 76, 77, 9, 58, - nil, nil, nil, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 78, 28, 27, 106, 105, 107, 108, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 46, 301, - 10, 110, 109, 111, 100, 57, 102, 101, 103, nil, - 104, 112, 113, nil, 96, 97, 42, 43, 41, 246, - -611, -611, -611, -611, 263, 264, nil, nil, -611, -611, - nil, nil, nil, nil, nil, 256, 257, nil, 40, nil, - nil, 33, nil, nil, 59, 60, nil, nil, 61, nil, - 35, 243, nil, 249, 45, 245, 244, nil, 241, 242, - 262, 261, 247, 20, 248, nil, nil, nil, 94, 84, - 87, 88, nil, 89, 91, 90, 92, nil, nil, nil, - nil, 85, 93, nil, nil, nil, nil, nil, nil, 63, - nil, 86, 98, 99, 299, 75, 76, 77, 9, 58, - nil, nil, nil, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 78, 28, 27, 106, 105, 107, 108, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 46, 301, - 10, 110, 109, 111, 100, 57, 102, 101, 103, nil, - 104, 112, 113, nil, 96, 97, 42, 43, 41, 246, - -611, -611, -611, -611, 263, 264, nil, nil, -611, -611, - nil, nil, nil, nil, nil, 256, 257, nil, 40, nil, - nil, 33, nil, nil, 59, 60, nil, nil, 61, nil, - 35, 243, nil, 249, 45, 245, 244, nil, 241, 242, - 262, 261, 247, 20, 248, nil, nil, nil, 94, 84, - 87, 88, nil, 89, 91, 90, 92, nil, nil, nil, - nil, 85, 93, nil, nil, nil, nil, nil, nil, 63, - nil, 86, 98, 99, 299, 75, 76, 77, 9, 58, - nil, nil, nil, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 78, 28, 27, 106, 105, 107, 108, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 46, 301, - 10, 110, 109, 111, 100, 57, 102, 101, 103, nil, - 104, 112, 113, nil, 96, 97, 42, 43, 41, 246, - -611, -611, -611, -611, 263, 264, nil, nil, -611, -611, - nil, nil, nil, nil, nil, 256, 257, nil, 40, nil, - nil, 33, nil, nil, 59, 60, nil, nil, 61, nil, - 35, 243, nil, 249, 45, 245, 244, nil, 241, 242, - 262, 261, 247, 20, 248, nil, nil, nil, 94, 84, - 87, 88, nil, 89, 91, 90, 92, nil, nil, nil, - nil, 85, 93, nil, nil, nil, nil, nil, nil, 63, - nil, 86, 98, 99, 299, 75, 76, 77, 9, 58, - nil, nil, nil, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 78, 28, 27, 106, 105, 107, 108, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 46, 301, - 10, 110, 109, 111, 100, 57, 102, 101, 103, nil, - 104, 112, 113, nil, 96, 97, 42, 43, 41, 246, - 250, 251, 252, 253, 263, 264, nil, nil, 254, 255, - nil, nil, nil, nil, nil, 256, 257, nil, 40, nil, - nil, 33, nil, nil, 59, 60, nil, nil, 61, nil, - 35, 243, nil, 249, 45, 245, 244, nil, 241, 242, - 262, 261, 247, 20, 248, nil, nil, nil, 94, 84, - 87, 88, nil, 89, 91, 90, 92, nil, nil, nil, - nil, 85, 93, nil, nil, nil, nil, nil, nil, 63, - nil, 86, 98, 99, 299, 75, 76, 77, 9, 58, - nil, nil, nil, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 78, 28, 27, 106, 105, 107, 108, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 46, 301, - 10, 110, 109, 111, 100, 57, 102, 101, 103, nil, - 104, 112, 113, nil, 96, 97, 42, 43, 41, 246, - 250, 251, 252, 253, 263, 264, 258, nil, 254, 255, - nil, nil, nil, nil, nil, 256, 257, nil, 40, nil, - nil, 33, nil, nil, 59, 60, nil, nil, 61, nil, - 35, 243, nil, 249, 45, 245, 244, nil, 241, 242, - 262, 261, 247, 20, 248, nil, nil, nil, 94, 84, - 87, 88, nil, 89, 91, 90, 92, nil, nil, nil, - nil, 85, 93, nil, nil, nil, nil, nil, nil, 63, - nil, 86, 98, 99, 299, 75, 76, 77, 9, 58, - nil, nil, nil, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 78, 28, 27, 106, 105, 107, 108, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 46, 301, - 10, 110, 109, 111, 100, 57, 102, 101, 103, nil, - 104, 112, 113, nil, 96, 97, 42, 43, 41, 246, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 256, 257, nil, 40, nil, - nil, 33, nil, nil, 59, 60, nil, nil, 61, nil, - 35, 243, nil, 249, 45, 245, 244, nil, 241, 242, - nil, nil, nil, 20, nil, nil, nil, nil, 94, 84, - 87, 88, nil, 89, 91, 90, 92, nil, nil, nil, - nil, 85, 93, nil, nil, nil, nil, nil, nil, 63, - nil, 86, 98, 99, 299, 75, 76, 77, 9, 58, - nil, nil, nil, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 78, 28, 27, 106, 105, 107, 108, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 46, 301, - 10, 110, 109, 111, 100, 57, 102, 101, 103, nil, - 104, 112, 113, nil, 96, 97, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 40, nil, - nil, 33, nil, nil, 59, 60, nil, nil, 61, nil, - 35, nil, nil, nil, 45, nil, nil, nil, nil, nil, - nil, nil, nil, 20, nil, nil, nil, nil, 94, 84, - 87, 88, nil, 89, 91, 90, 92, nil, nil, nil, - nil, 85, 93, nil, nil, nil, nil, nil, nil, 63, - nil, 86, 98, 99, 299, 75, 76, 77, 9, 58, - nil, nil, nil, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 78, 28, 27, 106, 105, 107, 108, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 46, 301, - 10, 110, 109, 111, 100, 57, 102, 101, 103, nil, - 104, 112, 113, nil, 96, 97, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 40, nil, - nil, 33, nil, nil, 59, 60, nil, nil, 61, nil, - 35, nil, nil, nil, 45, nil, nil, nil, nil, nil, - nil, nil, nil, 20, nil, nil, nil, nil, 94, 84, - 87, 88, nil, 89, 91, 90, 92, nil, nil, nil, - nil, 85, 93, nil, nil, nil, nil, nil, nil, 63, - nil, 86, 98, 99, 299, 75, 76, 77, 9, 58, - nil, nil, nil, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 78, 28, 27, 106, 105, 107, 108, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 46, 301, - 10, 110, 109, 111, 100, 57, 102, 101, 103, nil, - 104, 112, 113, nil, 96, 97, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 40, nil, - nil, 33, nil, nil, 59, 60, nil, nil, 61, nil, - 35, nil, nil, nil, 45, nil, nil, nil, nil, nil, - nil, nil, nil, 20, nil, nil, nil, nil, 94, 84, - 87, 88, nil, 89, 91, 90, 92, nil, nil, nil, - nil, 85, 93, nil, nil, nil, nil, nil, nil, 63, - nil, 86, 98, 99, 299, 75, 76, 77, 9, 58, - nil, nil, nil, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 78, 28, 27, 106, 105, 107, 108, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 46, 301, - 10, 110, 109, 111, 100, 57, 102, 101, 103, nil, - 104, 112, 113, nil, 96, 97, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 40, nil, - nil, 33, nil, nil, 59, 60, nil, nil, 61, nil, - 35, nil, nil, nil, 45, nil, nil, nil, nil, nil, - nil, nil, nil, 20, nil, nil, nil, nil, 94, 84, - 87, 88, nil, 89, 91, 90, 92, nil, nil, nil, - nil, 85, 93, nil, nil, nil, nil, nil, nil, 63, - nil, 86, 98, 99, 299, 75, 76, 77, 9, 58, - nil, nil, nil, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 78, 28, 27, 106, 105, 107, 108, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 46, 301, - 10, 110, 109, 111, 100, 57, 102, 101, 103, nil, - 104, 112, 113, nil, 96, 97, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 40, nil, - nil, 33, nil, nil, 59, 60, nil, nil, 61, nil, - 35, nil, nil, nil, 45, nil, nil, nil, nil, nil, - nil, nil, nil, 20, nil, nil, nil, nil, 94, 84, - 87, 88, nil, 89, 91, 90, 92, nil, nil, nil, - nil, 85, 93, nil, nil, nil, nil, nil, nil, 63, - nil, 86, 98, 99, 299, 75, 76, 77, 9, 58, - nil, nil, nil, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 78, 28, 27, 106, 105, 107, 108, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 46, 301, - 10, 110, 109, 111, 100, 57, 102, 101, 103, nil, - 104, 112, 113, nil, 96, 97, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 40, nil, - nil, 33, nil, nil, 59, 60, nil, nil, 61, nil, - 35, nil, nil, nil, 45, nil, nil, nil, nil, nil, - nil, nil, nil, 20, nil, nil, nil, nil, 94, 84, - 87, 88, nil, 89, 91, 90, 92, nil, nil, nil, - nil, 85, 93, nil, nil, nil, nil, nil, nil, 63, - nil, 86, 98, 99, 299, 75, 76, 77, 9, 58, - nil, nil, nil, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 78, 28, 27, 106, 105, 107, 108, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 46, 301, - 10, 110, 109, 111, 100, 57, 102, 101, 103, nil, - 104, 112, 113, nil, 96, 97, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 40, nil, - nil, 33, nil, nil, 59, 60, nil, nil, 61, nil, - 35, nil, nil, nil, 45, nil, nil, nil, nil, nil, - nil, nil, nil, 20, nil, nil, nil, nil, 94, 84, - 87, 88, nil, 89, 91, 90, 92, nil, nil, nil, - nil, 85, 93, nil, nil, nil, nil, nil, nil, 63, - nil, 86, 98, 99, 299, 75, 76, 77, 9, 58, - nil, nil, nil, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 78, 28, 27, 106, 105, 107, 108, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 46, 301, - 10, 110, 109, 111, 100, 57, 102, 101, 103, nil, - 104, 112, 113, nil, 96, 97, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 40, nil, - nil, 33, nil, nil, 59, 60, nil, nil, 61, nil, - 35, nil, nil, nil, 45, nil, nil, nil, nil, nil, - nil, nil, nil, 20, nil, nil, nil, nil, 94, 84, - 87, 88, nil, 89, 91, 90, 92, nil, nil, nil, - nil, 85, 93, nil, nil, nil, nil, nil, nil, 63, - nil, 86, 98, 99, 299, 75, 76, 77, 9, 58, - nil, nil, nil, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 78, 28, 27, 106, 105, 107, 108, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 46, 301, - 10, 110, 109, 111, 100, 57, 102, 101, 103, nil, - 104, 112, 113, nil, 96, 97, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 40, nil, - nil, 33, nil, nil, 59, 60, nil, nil, 61, nil, - 35, nil, nil, nil, 45, nil, nil, nil, nil, nil, - nil, nil, nil, 20, nil, nil, nil, nil, 94, 84, - 87, 88, nil, 89, 91, 90, 92, nil, nil, nil, - nil, 85, 93, nil, nil, nil, nil, nil, nil, 63, - nil, 86, 98, 99, 299, 75, 76, 77, 9, 58, - nil, nil, nil, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 78, 28, 27, 106, 105, 107, 108, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 46, 301, - 10, 110, 109, 111, 100, 57, 102, 101, 103, nil, - 104, 112, 113, nil, 96, 97, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 40, nil, - nil, 33, nil, nil, 59, 60, nil, nil, 61, nil, - 35, nil, nil, nil, 45, nil, nil, nil, nil, nil, - nil, nil, nil, 20, nil, nil, nil, nil, 94, 84, - 87, 88, nil, 89, 91, 90, 92, nil, nil, nil, - nil, 85, 93, nil, nil, nil, nil, nil, nil, 63, - nil, 86, 98, 99, 75, 76, 77, 9, 58, nil, - nil, nil, 64, 65, nil, nil, nil, 68, nil, 66, - 67, 69, 30, 31, 73, 74, nil, nil, nil, nil, - nil, 78, 28, 27, 106, 105, 107, 108, nil, nil, - 19, nil, nil, nil, nil, nil, 8, 46, 7, 10, - 110, 109, 111, 100, 57, 102, 101, 103, nil, 104, - 112, 113, nil, 96, 97, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 40, nil, nil, - 33, nil, nil, 59, 60, nil, nil, 61, nil, 35, - nil, nil, nil, 45, nil, nil, nil, nil, nil, nil, - nil, nil, 20, nil, nil, nil, nil, 94, 84, 87, - 88, nil, 89, 91, 90, 92, nil, nil, nil, nil, - 85, 93, nil, nil, nil, 75, 76, 77, 63, 58, - 86, 98, 99, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 78, 28, 27, 106, 105, 107, 108, nil, - nil, 238, nil, nil, nil, nil, nil, nil, 46, nil, - nil, 110, 109, 111, 100, 57, 102, 101, 103, nil, - 104, 112, 113, nil, 96, 97, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 231, nil, - nil, 237, nil, nil, 59, 60, nil, nil, 61, nil, - nil, nil, nil, nil, 45, nil, nil, nil, nil, nil, - nil, nil, nil, 236, nil, nil, nil, nil, 94, 84, - 87, 88, nil, 89, 91, 90, 92, nil, nil, nil, - nil, 85, 93, nil, nil, nil, 75, 76, 77, 63, - 58, 86, 98, 99, 64, 65, nil, nil, nil, 68, - nil, 66, 67, 69, 30, 31, 73, 74, nil, nil, - nil, nil, nil, 78, 28, 27, 106, 105, 107, 108, - nil, nil, 238, nil, nil, nil, nil, nil, nil, 46, - nil, nil, 110, 109, 111, 100, 57, 102, 101, 103, - 293, 104, 112, 113, nil, 96, 97, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 231, - nil, nil, 237, nil, nil, 59, 60, nil, nil, 61, - nil, 290, nil, 288, nil, 45, nil, nil, 294, nil, - nil, nil, nil, nil, 236, nil, nil, nil, nil, 94, - 291, 87, 88, nil, 89, 91, 90, 92, nil, nil, - nil, nil, 85, 93, nil, nil, nil, 75, 76, 77, - 63, 58, 86, 98, 99, 64, 65, nil, nil, nil, - 68, nil, 66, 67, 69, 30, 31, 73, 74, nil, - nil, nil, nil, nil, 78, 28, 27, 106, 105, 107, - 108, nil, nil, 238, nil, nil, nil, nil, nil, nil, - 46, nil, nil, 110, 109, 111, 100, 57, 102, 101, - 103, 293, 104, 112, 113, nil, 96, 97, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 231, nil, nil, 237, nil, nil, 59, 60, nil, nil, - 61, nil, 290, nil, 288, nil, 45, nil, nil, 294, - nil, nil, nil, nil, nil, 236, nil, nil, nil, nil, - 94, 291, 87, 88, nil, 89, 91, 90, 92, nil, - nil, nil, nil, 85, 93, nil, nil, nil, 75, 76, - 77, 63, 58, 86, 98, 99, 64, 65, nil, nil, - nil, 68, nil, 66, 67, 69, 30, 31, 73, 74, - nil, nil, nil, nil, nil, 78, 28, 27, 106, 105, - 107, 108, nil, nil, 238, nil, nil, nil, nil, nil, - nil, 46, nil, nil, 110, 109, 111, 100, 57, 102, - 101, 103, 293, 104, 112, 113, nil, 96, 97, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 231, nil, nil, 237, nil, nil, 59, 60, nil, - nil, 61, nil, 290, nil, 288, nil, 45, nil, nil, - 294, nil, nil, nil, nil, nil, 236, nil, nil, nil, - nil, 94, 291, 87, 88, nil, 89, 91, 90, 92, - nil, nil, nil, nil, 85, 93, nil, nil, nil, 75, - 76, 77, 63, 58, 86, 98, 99, 64, 65, nil, - nil, nil, 68, nil, 66, 67, 69, 318, 319, 73, - 74, nil, nil, nil, nil, nil, 78, 315, 321, 106, - 105, 107, 108, nil, nil, 238, nil, nil, nil, nil, - nil, nil, 316, nil, nil, 110, 109, 111, 100, 57, - 102, 101, 103, nil, 104, 112, 113, nil, 96, 97, - nil, nil, 322, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 312, nil, nil, 308, nil, nil, 59, 60, - nil, nil, 61, nil, 307, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 94, 84, 87, 88, nil, 89, 91, 90, - 92, nil, nil, nil, nil, 85, 93, nil, nil, nil, - 75, 76, 77, 63, 58, 86, 98, 99, 64, 65, - nil, nil, nil, 68, nil, 66, 67, 69, 318, 319, - 73, 74, nil, nil, nil, nil, nil, 78, 315, 321, - 106, 105, 107, 108, nil, nil, 238, nil, nil, nil, - nil, nil, nil, 316, nil, nil, 110, 109, 111, 100, - 57, 102, 101, 103, nil, 104, 112, 113, nil, 96, - 97, nil, nil, 322, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 312, nil, nil, 237, nil, nil, 59, - 60, nil, nil, 61, nil, nil, 683, nil, 680, 679, - 678, 688, 681, nil, nil, nil, nil, nil, nil, nil, - nil, 691, nil, 94, 84, 87, 88, nil, 89, 91, - 90, 92, nil, nil, nil, nil, 85, 93, nil, nil, - nil, 324, nil, 686, 63, nil, 86, 98, 99, 75, - 76, 77, nil, 58, 699, 698, nil, 64, 65, 692, - nil, nil, 68, nil, 66, 67, 69, 318, 319, 73, - 74, nil, nil, nil, nil, nil, 78, 315, 321, 106, - 105, 107, 108, nil, nil, 238, nil, nil, nil, nil, - nil, nil, 46, nil, nil, 110, 109, 111, 100, 57, - 102, 101, 103, nil, 104, 112, 113, nil, 96, 97, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 231, nil, nil, 237, nil, nil, 59, 60, - nil, nil, 61, nil, nil, nil, nil, nil, 45, nil, - nil, nil, nil, nil, nil, nil, nil, 236, nil, nil, - nil, nil, 94, 84, 87, 88, nil, 89, 91, 90, - 92, nil, nil, nil, nil, 85, 93, nil, nil, nil, - 75, 76, 77, 63, 58, 86, 98, 99, 64, 65, - nil, nil, nil, 68, nil, 66, 67, 69, 318, 319, - 73, 74, nil, nil, nil, nil, nil, 78, 315, 321, - 106, 105, 107, 108, nil, nil, 238, nil, nil, nil, - nil, nil, nil, 46, nil, nil, 110, 109, 111, 100, - 57, 102, 101, 103, nil, 104, 112, 113, nil, 96, - 97, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 231, nil, nil, 237, nil, nil, 59, - 60, nil, nil, 61, nil, nil, nil, nil, nil, 45, - nil, nil, nil, nil, nil, nil, nil, nil, 236, nil, - nil, nil, nil, 94, 84, 87, 88, nil, 89, 91, - 90, 92, nil, nil, nil, nil, 85, 93, nil, nil, - nil, 75, 76, 77, 63, 58, 86, 98, 99, 64, - 65, nil, nil, nil, 68, nil, 66, 67, 69, 318, - 319, 73, 74, nil, nil, nil, nil, nil, 78, 315, - 321, 106, 105, 107, 108, nil, nil, 238, nil, nil, - nil, nil, nil, nil, 46, nil, nil, 110, 109, 111, - 100, 57, 102, 101, 103, nil, 104, 112, 113, nil, - 96, 97, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 231, nil, nil, 237, nil, nil, - 59, 60, nil, nil, 61, nil, nil, nil, nil, nil, - 45, nil, nil, nil, nil, nil, nil, nil, nil, 236, - nil, nil, nil, nil, 94, 84, 87, 88, nil, 89, - 91, 90, 92, nil, nil, nil, nil, 85, 93, nil, - nil, nil, nil, nil, nil, 63, nil, 86, 98, 99, - 75, 76, 77, 9, 58, nil, nil, nil, 64, 65, - nil, nil, nil, 68, nil, 66, 67, 69, 30, 31, - 73, 74, nil, nil, nil, nil, nil, 78, 28, 27, - 106, 105, 107, 108, nil, nil, 19, nil, nil, nil, - nil, nil, 8, 46, nil, 10, 110, 109, 111, 100, - 57, 102, 101, 103, nil, 104, 112, 113, nil, 96, - 97, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 40, nil, nil, 33, nil, nil, 59, - 60, nil, nil, 61, nil, 35, nil, nil, nil, 45, - nil, nil, nil, nil, nil, nil, nil, nil, 20, nil, - nil, nil, nil, 94, 84, 87, 88, nil, 89, 91, - 90, 92, nil, nil, nil, nil, 85, 93, nil, nil, - nil, 75, 76, 77, 63, 58, 86, 98, 99, 64, - 65, nil, nil, nil, 68, nil, 66, 67, 69, 318, - 319, 73, 74, nil, nil, nil, nil, nil, 78, 315, - 321, 106, 105, 107, 108, nil, nil, 238, nil, nil, - nil, nil, nil, nil, 46, nil, nil, 110, 109, 111, - 100, 57, 102, 101, 103, 293, 104, 112, 113, nil, - 96, 97, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 231, nil, nil, 237, nil, nil, - 59, 60, nil, nil, 61, nil, 290, nil, nil, nil, - 45, nil, nil, 294, nil, nil, nil, nil, nil, 236, - nil, nil, nil, nil, 94, 291, 87, 88, nil, 89, - 91, 90, 92, nil, nil, nil, nil, 85, 93, nil, - nil, nil, 75, 76, 77, 63, 58, 86, 98, 99, - 64, 65, nil, nil, nil, 68, nil, 66, 67, 69, - 318, 319, 73, 74, nil, nil, nil, nil, nil, 78, - 315, 321, 106, 105, 107, 108, nil, nil, 238, nil, - nil, nil, nil, nil, nil, 46, nil, nil, 110, 109, - 111, 100, 57, 102, 101, 103, 293, 104, 112, 113, - nil, 96, 97, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 231, nil, nil, 237, nil, - nil, 59, 60, nil, nil, 61, nil, nil, nil, nil, - nil, 45, nil, nil, 294, nil, nil, nil, nil, nil, - 236, nil, nil, nil, nil, 94, 291, 87, 88, nil, - 89, 91, 90, 92, nil, nil, nil, nil, 85, 93, - nil, nil, nil, 75, 76, 77, 63, 58, 86, 98, - 99, 64, 65, nil, nil, nil, 68, nil, 66, 67, - 69, 30, 31, 73, 74, nil, nil, nil, nil, nil, - 78, 28, 27, 106, 105, 107, 108, nil, nil, 19, - nil, nil, nil, nil, nil, nil, 46, nil, nil, 110, - 109, 111, 100, 57, 102, 101, 103, nil, 104, 112, - 113, nil, 96, 97, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 231, nil, nil, 237, - nil, nil, 59, 60, nil, nil, 61, nil, nil, nil, - nil, nil, 45, nil, nil, nil, nil, nil, nil, nil, - nil, 20, nil, nil, nil, nil, 94, 84, 87, 88, - nil, 89, 91, 90, 92, nil, nil, nil, nil, 85, - 93, nil, nil, nil, 75, 76, 77, 63, 58, 86, - 98, 99, 64, 65, nil, nil, nil, 68, nil, 66, - 67, 69, 30, 31, 73, 74, nil, nil, nil, nil, - nil, 78, 28, 27, 106, 105, 107, 108, nil, nil, - 19, nil, nil, nil, nil, nil, nil, 46, nil, nil, - 110, 109, 111, 100, 57, 102, 101, 103, nil, 104, - 112, 113, nil, 96, 97, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 231, nil, nil, - 237, nil, nil, 59, 60, nil, nil, 61, nil, nil, - nil, nil, nil, 45, nil, nil, nil, nil, nil, nil, - nil, nil, 20, nil, nil, nil, nil, 94, 84, 87, - 88, nil, 89, 91, 90, 92, nil, nil, nil, nil, - 85, 93, nil, nil, nil, 75, 76, 77, 63, 58, - 86, 98, 99, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 78, 28, 27, 106, 105, 107, 108, nil, - nil, 19, nil, nil, nil, nil, nil, nil, 46, nil, - nil, 110, 109, 111, 100, 57, 102, 101, 103, nil, - 104, 112, 113, nil, 96, 97, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 231, nil, - nil, 237, nil, nil, 59, 60, nil, nil, 61, nil, - nil, nil, nil, nil, 45, nil, nil, nil, nil, nil, - nil, nil, nil, 20, nil, nil, nil, nil, 94, 84, - 87, 88, nil, 89, 91, 90, 92, nil, nil, nil, - nil, 85, 93, 118, nil, nil, nil, nil, 117, 63, - nil, 86, 98, 99, 75, 76, 77, nil, 58, nil, - nil, nil, 64, 65, nil, nil, nil, 68, nil, 66, - 67, 69, 318, 319, 73, 74, nil, nil, nil, nil, - nil, 78, 315, 321, 106, 105, 107, 108, nil, nil, - 238, nil, nil, nil, nil, nil, nil, 316, nil, nil, - 110, 109, 111, 100, 57, 102, 101, 103, nil, 104, - 112, 113, nil, 96, 97, nil, nil, 322, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 358, nil, nil, - 33, nil, nil, 59, 60, nil, nil, 61, nil, 35, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 94, 84, 87, - 88, nil, 89, 91, 90, 92, nil, nil, nil, nil, - 85, 93, nil, nil, nil, 75, 76, 77, 63, 58, - 86, 98, 99, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 318, 319, 73, 74, nil, nil, nil, - nil, nil, 78, 315, 321, 106, 105, 107, 108, nil, - nil, 238, nil, nil, nil, nil, nil, nil, 316, nil, - nil, 110, 109, 111, 363, 57, 102, 101, 364, nil, - 104, 112, 113, nil, 96, 97, nil, nil, 322, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 370, nil, nil, 365, nil, - nil, 237, nil, nil, 59, 60, nil, nil, 61, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 94, 84, - 87, 88, nil, 89, 91, 90, 92, nil, nil, nil, - nil, 85, 93, nil, nil, nil, 75, 76, 77, 63, - 58, 86, 98, 99, 64, 65, nil, nil, nil, 68, - nil, 66, 67, 69, 318, 319, 73, 74, nil, nil, - nil, nil, nil, 78, 315, 321, 106, 105, 107, 108, - nil, nil, 238, nil, nil, nil, nil, nil, nil, 316, - nil, nil, 110, 109, 111, 363, 57, 102, 101, 364, - nil, 104, 112, 113, nil, 96, 97, nil, nil, 322, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 365, - nil, nil, 237, nil, nil, 59, 60, nil, nil, 61, - nil, nil, 683, nil, 680, 679, 678, 688, 681, nil, - nil, nil, nil, nil, nil, nil, nil, 691, nil, 94, - 84, 87, 88, nil, 89, 91, 90, 92, nil, nil, - nil, nil, 85, 93, nil, nil, nil, nil, nil, 686, - 63, nil, 86, 98, 99, 75, 76, 77, 9, 58, - 699, 698, nil, 64, 65, 692, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 78, 28, 27, 106, 105, 107, 108, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 46, 7, - 10, 110, 109, 111, 100, 57, 102, 101, 103, nil, - 104, 112, 113, nil, 96, 97, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 40, nil, - nil, 33, nil, nil, 59, 60, nil, nil, 61, nil, - 35, nil, nil, nil, 45, nil, nil, nil, nil, nil, - nil, nil, nil, 20, nil, nil, nil, nil, 94, 84, - 87, 88, nil, 89, 91, 90, 92, nil, nil, nil, - nil, 85, 93, nil, nil, nil, nil, nil, 398, 63, - nil, 86, 98, 99, 75, 76, 77, nil, 58, nil, - nil, nil, 64, 65, nil, nil, nil, 68, nil, 66, - 67, 69, 30, 31, 73, 74, nil, nil, nil, nil, - nil, 78, 28, 27, 106, 105, 107, 108, nil, nil, - 19, nil, nil, nil, nil, nil, nil, 46, nil, nil, - 110, 109, 111, 100, 57, 102, 101, 103, nil, 104, - 112, 113, nil, 96, 97, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 231, nil, nil, - 237, nil, nil, 59, 60, nil, nil, 61, nil, nil, - nil, nil, nil, 45, nil, nil, nil, nil, nil, nil, - nil, nil, 20, nil, nil, nil, nil, 94, 84, 87, - 88, nil, 89, 91, 90, 92, nil, nil, nil, nil, - 85, 93, nil, nil, nil, 75, 76, 77, 63, 58, - 86, 98, 99, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 78, 28, 27, 106, 105, 107, 108, nil, - nil, 19, nil, nil, nil, nil, nil, nil, 46, nil, - nil, 110, 109, 111, 100, 57, 102, 101, 103, nil, - 104, 112, 113, nil, 96, 97, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 231, nil, - nil, 237, nil, nil, 59, 60, nil, nil, 61, nil, - nil, nil, nil, nil, 45, nil, nil, nil, nil, nil, - nil, nil, nil, 20, nil, nil, nil, nil, 94, 84, - 87, 88, nil, 89, 91, 90, 92, nil, nil, nil, - nil, 85, 93, nil, nil, nil, 75, 76, 77, 63, - 58, 86, 98, 99, 64, 65, nil, nil, nil, 68, - nil, 66, 67, 69, 30, 31, 73, 74, nil, nil, - nil, nil, nil, 78, 28, 27, 106, 105, 107, 108, - nil, nil, 19, nil, nil, nil, nil, nil, nil, 46, - nil, nil, 110, 109, 111, 100, 57, 102, 101, 103, - nil, 104, 112, 113, nil, 96, 97, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 231, - nil, nil, 237, nil, nil, 59, 60, nil, nil, 61, - nil, nil, nil, nil, nil, 45, nil, nil, nil, nil, - nil, nil, nil, nil, 20, nil, nil, nil, nil, 94, - 84, 87, 88, nil, 89, 91, 90, 92, nil, nil, - nil, nil, 85, 93, nil, nil, nil, 75, 76, 77, - 63, 58, 86, 98, 99, 64, 65, nil, nil, nil, - 68, nil, 66, 67, 69, 30, 31, 73, 74, nil, - nil, nil, nil, nil, 78, 28, 27, 106, 105, 107, - 108, nil, nil, 19, nil, nil, nil, nil, nil, nil, - 46, nil, nil, 110, 109, 111, 100, 57, 102, 101, - 103, nil, 104, 112, 113, nil, 96, 97, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 231, nil, nil, 237, nil, nil, 59, 60, nil, nil, - 61, nil, nil, nil, nil, nil, 45, nil, nil, nil, - nil, nil, nil, nil, nil, 20, nil, nil, nil, nil, - 94, 84, 87, 88, nil, 89, 91, 90, 92, nil, - nil, nil, nil, 85, 93, nil, nil, nil, nil, nil, - nil, 63, nil, 86, 98, 99, 75, 76, 77, 9, - 58, nil, nil, nil, 64, 65, nil, nil, nil, 68, - nil, 66, 67, 69, 30, 31, 73, 74, nil, nil, - nil, nil, nil, 78, 28, 27, 106, 105, 107, 108, - nil, nil, 19, nil, nil, nil, nil, nil, 8, 46, - nil, 10, 110, 109, 111, 100, 57, 102, 101, 103, - nil, 104, 112, 113, nil, 96, 97, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 40, - nil, nil, 33, nil, nil, 59, 60, nil, nil, 61, - nil, 35, nil, nil, nil, 45, nil, nil, nil, nil, - nil, nil, nil, nil, 20, nil, nil, nil, nil, 94, - 84, 87, 88, nil, 89, 91, 90, 92, nil, nil, - nil, nil, 85, 93, nil, nil, nil, 75, 76, 77, - 63, 58, 86, 98, 99, 64, 65, nil, nil, nil, - 68, nil, 66, 67, 69, 30, 31, 73, 74, nil, - nil, nil, nil, nil, 78, 28, 27, 106, 105, 107, - 108, nil, nil, 238, nil, nil, nil, nil, nil, nil, - 46, nil, nil, 110, 109, 111, 100, 57, 102, 101, - 103, nil, 104, 112, 113, nil, 96, 97, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 231, nil, nil, 237, nil, nil, 59, 60, nil, nil, - 61, nil, 414, nil, nil, nil, 45, nil, nil, nil, - nil, nil, nil, nil, nil, 236, nil, nil, nil, nil, - 94, 84, 87, 88, nil, 89, 91, 90, 92, nil, - nil, nil, nil, 85, 93, nil, nil, nil, 75, 76, - 77, 63, 58, 86, 98, 99, 64, 65, nil, nil, - nil, 68, nil, 66, 67, 69, 30, 31, 73, 74, - nil, nil, nil, nil, nil, 78, 28, 27, 106, 105, - 107, 108, nil, nil, 238, nil, nil, nil, nil, nil, - nil, 46, nil, nil, 110, 109, 111, 100, 57, 102, - 101, 103, nil, 104, 112, 113, nil, 96, 97, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 231, nil, nil, 237, nil, nil, 59, 60, nil, - nil, 61, nil, 414, nil, nil, nil, 45, nil, nil, - nil, nil, nil, nil, nil, nil, 236, nil, nil, nil, - nil, 94, 84, 87, 88, nil, 89, 91, 90, 92, - nil, nil, nil, nil, 85, 93, nil, nil, nil, 75, - 76, 77, 63, 58, 86, 98, 99, 64, 65, nil, - nil, nil, 68, nil, 66, 67, 69, 30, 31, 73, - 74, nil, nil, nil, nil, nil, 78, 28, 27, 106, - 105, 107, 108, nil, nil, 19, nil, nil, nil, nil, - nil, nil, 46, nil, nil, 110, 109, 111, 100, 57, - 102, 101, 103, nil, 104, 112, 113, nil, 96, 97, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 231, nil, nil, 237, nil, nil, 59, 60, - nil, nil, 61, nil, nil, nil, nil, nil, 45, nil, - nil, nil, nil, nil, nil, nil, nil, 20, nil, nil, - nil, nil, 94, 84, 87, 88, nil, 89, 91, 90, - 92, nil, nil, nil, nil, 85, 93, nil, nil, nil, - 75, 76, 77, 63, 58, 86, 98, 99, 64, 65, - nil, nil, nil, 68, nil, 66, 67, 69, 30, 31, - 73, 74, nil, nil, nil, nil, nil, 78, 28, 27, - 106, 105, 107, 108, nil, nil, 19, nil, nil, nil, - nil, nil, nil, 46, nil, nil, 110, 109, 111, 100, - 57, 102, 101, 103, nil, 104, 112, 113, nil, 96, - 97, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 231, nil, nil, 237, nil, nil, 59, - 60, nil, nil, 61, nil, nil, nil, nil, nil, 45, - nil, nil, nil, nil, nil, nil, nil, nil, 20, nil, - nil, nil, nil, 94, 84, 87, 88, nil, 89, 91, - 90, 92, nil, nil, nil, nil, 85, 93, nil, nil, - nil, 75, 76, 77, 63, 58, 86, 98, 99, 64, - 65, nil, nil, nil, 68, nil, 66, 67, 69, 30, - 31, 73, 74, nil, nil, nil, nil, nil, 78, 28, - 27, 106, 105, 107, 108, nil, nil, 238, nil, nil, - nil, nil, nil, nil, 46, nil, nil, 110, 109, 111, - 100, 57, 102, 101, 103, nil, 104, 112, 113, nil, - 96, 97, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 231, nil, nil, 237, nil, nil, - 59, 60, nil, nil, 61, nil, nil, nil, nil, nil, - 45, nil, nil, nil, nil, nil, nil, nil, nil, 236, - nil, nil, nil, nil, 94, 84, 87, 88, nil, 89, - 91, 90, 92, nil, nil, nil, nil, 85, 93, nil, - nil, nil, 75, 76, 77, 63, 58, 86, 98, 99, - 64, 65, nil, nil, nil, 68, nil, 66, 67, 69, - 30, 31, 73, 74, nil, nil, nil, nil, nil, 78, - 28, 27, 106, 105, 107, 108, nil, nil, 238, nil, - nil, nil, nil, nil, nil, 46, nil, nil, 110, 109, - 111, 100, 57, 102, 101, 103, 293, 104, 112, 113, - nil, 96, 97, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 231, nil, nil, 237, nil, - nil, 59, 60, nil, nil, 61, nil, 290, nil, 288, - nil, 45, nil, nil, 294, nil, nil, nil, nil, nil, - 236, nil, nil, nil, nil, 94, 291, 87, 88, nil, - 89, 91, 90, 92, nil, nil, nil, nil, 85, 93, - nil, nil, nil, 75, 76, 77, 63, 58, 86, 98, - 99, 64, 65, nil, nil, nil, 68, nil, 66, 67, - 69, 30, 31, 73, 74, nil, nil, nil, nil, nil, - 78, 28, 27, 106, 105, 107, 108, nil, nil, 238, - nil, nil, nil, nil, nil, nil, 46, nil, nil, 110, - 109, 111, 100, 57, 102, 101, 103, nil, 104, 112, - 113, nil, 96, 97, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 231, nil, nil, 237, - nil, nil, 59, 60, nil, nil, 61, nil, nil, nil, - nil, nil, 45, nil, nil, nil, nil, nil, nil, nil, - nil, 236, nil, nil, nil, nil, 94, 84, 87, 88, - nil, 89, 91, 90, 92, nil, nil, nil, nil, 85, - 93, nil, nil, nil, 75, 76, 77, 63, 58, 86, - 98, 99, 64, 65, nil, nil, nil, 68, nil, 66, - 67, 69, 30, 31, 73, 74, nil, nil, nil, nil, - nil, 78, 28, 27, 106, 105, 107, 108, nil, nil, - 19, nil, nil, nil, nil, nil, nil, 46, nil, nil, - 110, 109, 111, 100, 57, 102, 101, 103, nil, 104, - 112, 113, nil, 96, 97, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 231, nil, nil, - 237, nil, nil, 59, 60, nil, nil, 61, nil, nil, - nil, nil, nil, 45, nil, nil, nil, nil, nil, nil, - nil, nil, 20, nil, nil, nil, nil, 94, 84, 87, - 88, nil, 89, 91, 90, 92, nil, nil, nil, nil, - 85, 93, nil, nil, nil, 75, 76, 77, 63, 58, - 86, 98, 99, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 78, 28, 27, 106, 105, 107, 108, nil, - nil, 19, nil, nil, nil, nil, nil, nil, 46, nil, - nil, 110, 109, 111, 100, 57, 102, 101, 103, nil, - 104, 112, 113, nil, 96, 97, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 231, nil, - nil, 237, nil, nil, 59, 60, nil, nil, 61, nil, - nil, nil, nil, nil, 45, nil, nil, nil, nil, nil, - nil, nil, nil, 20, nil, nil, nil, nil, 94, 84, - 87, 88, nil, 89, 91, 90, 92, nil, nil, nil, - nil, 85, 93, 226, nil, nil, 75, 76, 77, 63, - 58, 86, 98, 99, 64, 65, nil, nil, nil, 68, - nil, 66, 67, 69, 318, 319, 73, 74, nil, nil, - nil, nil, nil, 78, 315, 321, 106, 105, 107, 108, - nil, nil, 238, nil, nil, nil, nil, nil, nil, 46, - nil, nil, 110, 109, 111, 100, 57, 102, 101, 103, - nil, 104, 112, 113, nil, 96, 97, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 231, - nil, nil, 237, nil, nil, 59, 60, nil, nil, 61, - nil, nil, nil, nil, nil, 45, nil, nil, nil, nil, - nil, nil, nil, nil, 236, nil, nil, nil, nil, 94, - 84, 87, 88, nil, 89, 91, 90, 92, nil, nil, - nil, nil, 85, 93, nil, nil, nil, 75, 76, 77, - 63, 58, 86, 98, 99, 64, 65, nil, nil, nil, - 68, nil, 66, 67, 69, 318, 319, 73, 74, nil, - nil, nil, nil, nil, 78, 315, 321, 106, 105, 107, - 108, nil, nil, 238, nil, nil, nil, nil, nil, nil, - 46, nil, nil, 110, 109, 111, 100, 57, 102, 101, - 103, nil, 104, 112, 113, nil, 96, 97, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 231, nil, nil, 237, nil, nil, 59, 60, nil, nil, - 61, nil, nil, nil, nil, nil, 45, nil, nil, nil, - nil, nil, nil, nil, nil, 236, nil, nil, nil, nil, - 94, 84, 87, 88, nil, 89, 91, 90, 92, nil, - nil, nil, nil, 85, 93, nil, nil, nil, 75, 76, - 77, 63, 58, 86, 98, 99, 64, 65, nil, nil, - nil, 68, nil, 66, 67, 69, 318, 319, 73, 74, - nil, nil, nil, nil, nil, 78, 315, 321, 106, 105, - 107, 108, nil, nil, 238, nil, nil, nil, nil, nil, - nil, 46, nil, nil, 110, 109, 111, 100, 57, 102, - 101, 103, nil, 104, 112, 113, nil, 96, 97, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 231, nil, nil, 237, nil, nil, 59, 60, nil, - nil, 61, nil, nil, nil, nil, nil, 45, nil, nil, - nil, nil, nil, nil, nil, nil, 236, nil, nil, nil, - nil, 94, 84, 87, 88, nil, 89, 91, 90, 92, - nil, nil, nil, nil, 85, 93, nil, nil, nil, 75, - 76, 77, 63, 58, 86, 98, 99, 64, 65, nil, - nil, nil, 68, nil, 66, 67, 69, 318, 319, 73, - 74, nil, nil, nil, nil, nil, 78, 315, 321, 106, - 105, 107, 108, nil, nil, 238, nil, nil, nil, nil, - nil, nil, 46, nil, nil, 110, 109, 111, 100, 57, - 102, 101, 103, nil, 104, 112, 113, nil, 96, 97, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 231, nil, nil, 237, nil, nil, 59, 60, - nil, nil, 61, nil, nil, nil, nil, nil, 45, nil, - nil, nil, nil, nil, nil, nil, nil, 236, nil, nil, - nil, nil, 94, 84, 87, 88, nil, 89, 91, 90, - 92, nil, nil, nil, nil, 85, 93, nil, nil, nil, - 75, 76, 77, 63, 58, 86, 98, 99, 64, 65, - nil, nil, nil, 68, nil, 66, 67, 69, 318, 319, - 73, 74, nil, nil, nil, nil, nil, 78, 315, 321, - 106, 105, 107, 108, nil, nil, 238, nil, nil, nil, - nil, nil, nil, 46, nil, nil, 110, 109, 111, 100, - 57, 102, 101, 103, nil, 104, 112, 113, nil, 96, - 97, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 231, nil, nil, 237, nil, nil, 59, - 60, nil, nil, 61, nil, nil, nil, nil, nil, 45, - nil, nil, nil, nil, nil, nil, nil, nil, 236, nil, - nil, nil, nil, 94, 84, 87, 88, nil, 89, 91, - 90, 92, nil, nil, nil, nil, 85, 93, nil, nil, - nil, 75, 76, 77, 63, 58, 86, 98, 99, 64, - 65, nil, nil, nil, 68, nil, 66, 67, 69, 318, - 319, 73, 74, nil, nil, nil, nil, nil, 78, 315, - 321, 106, 105, 107, 108, nil, nil, 238, nil, nil, - nil, nil, nil, nil, 46, nil, nil, 110, 109, 111, - 100, 57, 102, 101, 103, nil, 104, 112, 113, nil, - 96, 97, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 231, nil, nil, 237, nil, nil, - 59, 60, nil, nil, 61, nil, nil, nil, nil, nil, - 45, nil, nil, nil, nil, nil, nil, nil, nil, 236, - nil, nil, nil, nil, 94, 84, 87, 88, nil, 89, - 91, 90, 92, nil, nil, nil, nil, 85, 93, nil, - nil, nil, 75, 76, 77, 63, 58, 86, 98, 99, - 64, 65, nil, nil, nil, 68, nil, 66, 67, 69, - 318, 319, 73, 74, nil, nil, nil, nil, nil, 78, - 315, 321, 106, 105, 107, 108, nil, nil, 238, nil, - nil, nil, nil, nil, nil, 46, nil, nil, 110, 109, - 111, 100, 57, 102, 101, 103, nil, 104, 112, 113, - nil, 96, 97, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 231, nil, nil, 237, nil, - nil, 59, 60, nil, nil, 61, nil, nil, nil, nil, - nil, 45, nil, nil, nil, nil, nil, nil, nil, nil, - 236, nil, nil, nil, nil, 94, 84, 87, 88, nil, - 89, 91, 90, 92, nil, nil, nil, nil, 85, 93, - nil, nil, nil, 75, 76, 77, 63, 58, 86, 98, - 99, 64, 65, nil, nil, nil, 68, nil, 66, 67, - 69, 318, 319, 73, 74, nil, nil, nil, nil, nil, - 78, 315, 321, 106, 105, 107, 108, nil, nil, 238, - nil, nil, nil, nil, nil, nil, 46, nil, nil, 110, - 109, 111, 100, 57, 102, 101, 103, nil, 104, 112, - 113, nil, 96, 97, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 231, nil, nil, 237, - nil, nil, 59, 60, nil, nil, 61, nil, nil, nil, - nil, nil, 45, nil, nil, nil, nil, nil, nil, nil, - nil, 236, nil, nil, nil, nil, 94, 84, 87, 88, - nil, 89, 91, 90, 92, nil, nil, nil, nil, 85, - 93, nil, nil, nil, 75, 76, 77, 63, 58, 86, - 98, 99, 64, 65, nil, nil, nil, 68, nil, 66, - 67, 69, 318, 319, 73, 74, nil, nil, nil, nil, - nil, 78, 315, 321, 106, 105, 107, 108, nil, nil, - 238, nil, nil, nil, nil, nil, nil, 46, nil, nil, - 110, 109, 111, 100, 57, 102, 101, 103, nil, 104, - 112, 113, nil, 96, 97, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 231, nil, nil, - 237, nil, nil, 59, 60, nil, nil, 61, nil, nil, - nil, nil, nil, 45, nil, nil, nil, nil, nil, nil, - nil, nil, 236, nil, nil, nil, nil, 94, 84, 87, - 88, nil, 89, 91, 90, 92, nil, nil, nil, nil, - 85, 93, nil, nil, nil, 75, 76, 77, 63, 58, - 86, 98, 99, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 318, 319, 73, 74, nil, nil, nil, - nil, nil, 78, 315, 321, 106, 105, 107, 108, nil, - nil, 238, nil, nil, nil, nil, nil, nil, 46, nil, - nil, 110, 109, 111, 100, 57, 102, 101, 103, nil, - 104, 112, 113, nil, 96, 97, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 231, nil, - nil, 237, nil, nil, 59, 60, nil, nil, 61, nil, - nil, nil, nil, nil, 45, nil, nil, nil, nil, nil, - nil, nil, nil, 236, nil, nil, nil, nil, 94, 84, - 87, 88, nil, 89, 91, 90, 92, nil, nil, nil, - nil, 85, 93, nil, nil, nil, 75, 76, 77, 63, - 58, 86, 98, 99, 64, 65, nil, nil, nil, 68, - nil, 66, 67, 69, 318, 319, 73, 74, nil, nil, - nil, nil, nil, 78, 315, 321, 106, 105, 107, 108, - nil, nil, 238, nil, nil, nil, nil, nil, nil, 46, - nil, nil, 110, 109, 111, 100, 57, 102, 101, 103, - nil, 104, 112, 113, nil, 96, 97, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 231, - nil, nil, 237, nil, nil, 59, 60, nil, nil, 61, - nil, nil, nil, nil, nil, 45, nil, nil, nil, nil, - nil, nil, nil, nil, 236, nil, nil, nil, nil, 94, - 84, 87, 88, nil, 89, 91, 90, 92, nil, nil, - nil, nil, 85, 93, nil, nil, nil, 75, 76, 77, - 63, 58, 86, 98, 99, 64, 65, nil, nil, nil, - 68, nil, 66, 67, 69, 318, 319, 73, 74, nil, - nil, nil, nil, nil, 78, 315, 321, 106, 105, 107, - 108, nil, nil, 238, nil, nil, nil, nil, nil, nil, - 46, nil, nil, 110, 109, 111, 100, 57, 102, 101, - 103, nil, 104, 112, 113, nil, 96, 97, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 231, nil, nil, 237, nil, nil, 59, 60, nil, nil, - 61, nil, nil, nil, nil, nil, 45, nil, nil, nil, - nil, nil, nil, nil, nil, 236, nil, nil, nil, nil, - 94, 84, 87, 88, nil, 89, 91, 90, 92, nil, - nil, nil, nil, 85, 93, nil, nil, nil, 75, 76, - 77, 63, 58, 86, 98, 99, 64, 65, nil, nil, - nil, 68, nil, 66, 67, 69, 318, 319, 73, 74, - nil, nil, nil, nil, nil, 78, 315, 321, 106, 105, - 107, 108, nil, nil, 238, nil, nil, nil, nil, nil, - nil, 46, nil, nil, 110, 109, 111, 100, 57, 102, - 101, 103, nil, 104, 112, 113, nil, 96, 97, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 231, nil, nil, 237, nil, nil, 59, 60, nil, - nil, 61, nil, nil, nil, nil, nil, 45, nil, nil, - nil, nil, nil, nil, nil, nil, 236, nil, nil, nil, - nil, 94, 84, 87, 88, nil, 89, 91, 90, 92, - nil, nil, nil, nil, 85, 93, nil, nil, nil, 75, - 76, 77, 63, 58, 86, 98, 99, 64, 65, nil, - nil, nil, 68, nil, 66, 67, 69, 318, 319, 73, - 74, nil, nil, nil, nil, nil, 78, 315, 321, 106, - 105, 107, 108, nil, nil, 238, nil, nil, nil, nil, - nil, nil, 46, nil, nil, 110, 109, 111, 100, 57, - 102, 101, 103, nil, 104, 112, 113, nil, 96, 97, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 231, nil, nil, 237, nil, nil, 59, 60, - nil, nil, 61, nil, nil, nil, nil, nil, 45, nil, - nil, nil, nil, nil, nil, nil, nil, 236, nil, nil, - nil, nil, 94, 84, 87, 88, nil, 89, 91, 90, - 92, nil, nil, nil, nil, 85, 93, nil, nil, nil, - 75, 76, 77, 63, 58, 86, 98, 99, 64, 65, - nil, nil, nil, 68, nil, 66, 67, 69, 318, 319, - 73, 74, nil, nil, nil, nil, nil, 78, 315, 321, - 106, 105, 107, 108, nil, nil, 238, nil, nil, nil, - nil, nil, nil, 46, nil, nil, 110, 109, 111, 100, - 57, 102, 101, 103, nil, 104, 112, 113, nil, 96, - 97, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 231, nil, nil, 237, nil, nil, 59, - 60, nil, nil, 61, nil, nil, nil, nil, nil, 45, - nil, nil, nil, nil, nil, nil, nil, nil, 236, nil, - nil, nil, nil, 94, 84, 87, 88, nil, 89, 91, - 90, 92, nil, nil, nil, nil, 85, 93, nil, nil, - nil, 75, 76, 77, 63, 58, 86, 98, 99, 64, - 65, nil, nil, nil, 68, nil, 66, 67, 69, 318, - 319, 73, 74, nil, nil, nil, nil, nil, 78, 315, - 321, 106, 105, 107, 108, nil, nil, 238, nil, nil, - nil, nil, nil, nil, 46, nil, nil, 110, 109, 111, - 100, 57, 102, 101, 103, nil, 104, 112, 113, nil, - 96, 97, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 231, nil, nil, 237, nil, nil, - 59, 60, nil, nil, 61, nil, nil, nil, nil, nil, - 45, nil, nil, nil, nil, nil, nil, nil, nil, 236, - nil, nil, nil, nil, 94, 84, 87, 88, nil, 89, - 91, 90, 92, nil, nil, nil, nil, 85, 93, nil, - nil, nil, 75, 76, 77, 63, 58, 86, 98, 99, - 64, 65, nil, nil, nil, 68, nil, 66, 67, 69, - 318, 319, 73, 74, nil, nil, nil, nil, nil, 78, - 315, 321, 106, 105, 107, 108, nil, nil, 238, nil, - nil, nil, nil, nil, nil, 46, nil, nil, 110, 109, - 111, 100, 57, 102, 101, 103, nil, 104, 112, 113, - nil, 96, 97, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 231, nil, nil, 237, nil, - nil, 59, 60, nil, nil, 61, nil, nil, nil, nil, - nil, 45, nil, nil, nil, nil, nil, nil, nil, nil, - 236, nil, nil, nil, nil, 94, 84, 87, 88, nil, - 89, 91, 90, 92, nil, nil, nil, nil, 85, 93, - nil, nil, nil, 75, 76, 77, 63, 58, 86, 98, - 99, 64, 65, nil, nil, nil, 68, nil, 66, 67, - 69, 318, 319, 73, 74, nil, nil, nil, nil, nil, - 78, 315, 321, 106, 105, 107, 108, nil, nil, 238, - nil, nil, nil, nil, nil, nil, 46, nil, nil, 110, - 109, 111, 100, 57, 102, 101, 103, nil, 104, 112, - 113, nil, 96, 97, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 231, nil, nil, 237, - nil, nil, 59, 60, nil, nil, 61, nil, nil, nil, - nil, nil, 45, nil, nil, nil, nil, nil, nil, nil, - nil, 236, nil, nil, nil, nil, 94, 84, 87, 88, - nil, 89, 91, 90, 92, nil, nil, nil, nil, 85, - 93, nil, nil, nil, 75, 76, 77, 63, 58, 86, - 98, 99, 64, 65, nil, nil, nil, 68, nil, 66, - 67, 69, 318, 319, 73, 74, nil, nil, nil, nil, - nil, 78, 315, 321, 106, 105, 107, 108, nil, nil, - 238, nil, nil, nil, nil, nil, nil, 46, nil, nil, - 110, 109, 111, 100, 57, 102, 101, 103, nil, 104, - 112, 113, nil, 96, 97, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 231, nil, nil, - 237, nil, nil, 59, 60, nil, nil, 61, nil, nil, - nil, nil, nil, 45, nil, nil, nil, nil, nil, nil, - nil, nil, 236, nil, nil, nil, nil, 94, 84, 87, - 88, nil, 89, 91, 90, 92, nil, nil, nil, nil, - 85, 93, nil, nil, nil, 75, 76, 77, 63, 58, - 86, 98, 99, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 318, 319, 73, 74, nil, nil, nil, - nil, nil, 78, 315, 321, 106, 105, 107, 108, nil, - nil, 238, nil, nil, nil, nil, nil, nil, 46, nil, - nil, 110, 109, 111, 100, 57, 102, 101, 103, nil, - 104, 112, 113, nil, 96, 97, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 231, nil, - nil, 237, nil, nil, 59, 60, nil, nil, 61, nil, - nil, nil, nil, nil, 45, nil, nil, nil, nil, nil, - nil, nil, nil, 236, nil, nil, nil, nil, 94, 84, - 87, 88, nil, 89, 91, 90, 92, nil, nil, nil, - nil, 85, 93, nil, nil, nil, 75, 76, 77, 63, - 58, 86, 98, 99, 64, 65, nil, nil, nil, 68, - nil, 66, 67, 69, 318, 319, 73, 74, nil, nil, - nil, nil, nil, 78, 315, 321, 106, 105, 107, 108, - nil, nil, 238, nil, nil, nil, nil, nil, nil, 46, - nil, nil, 110, 109, 111, 100, 57, 102, 101, 103, - nil, 104, 112, 113, nil, 96, 97, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 231, - nil, nil, 237, nil, nil, 59, 60, nil, nil, 61, - nil, nil, nil, nil, nil, 45, nil, nil, nil, nil, - nil, nil, nil, nil, 236, nil, nil, nil, nil, 94, - 84, 87, 88, nil, 89, 91, 90, 92, nil, nil, - nil, nil, 85, 93, nil, nil, nil, 75, 76, 77, - 63, 58, 86, 98, 99, 64, 65, nil, nil, nil, - 68, nil, 66, 67, 69, 318, 319, 73, 74, nil, - nil, nil, nil, nil, 78, 315, 321, 106, 105, 107, - 108, nil, nil, 238, nil, nil, nil, nil, nil, nil, - 46, nil, nil, 110, 109, 111, 100, 57, 102, 101, - 103, nil, 104, 112, 113, nil, 96, 97, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 231, nil, nil, 237, nil, nil, 59, 60, nil, nil, - 61, nil, nil, nil, nil, nil, 45, nil, nil, nil, - nil, nil, nil, nil, nil, 236, nil, nil, nil, nil, - 94, 84, 87, 88, nil, 89, 91, 90, 92, nil, - nil, nil, nil, 85, 93, nil, nil, nil, 75, 76, - 77, 63, 58, 86, 98, 99, 64, 65, nil, nil, - nil, 68, nil, 66, 67, 69, 318, 319, 73, 74, - nil, nil, nil, nil, nil, 78, 315, 321, 106, 105, - 107, 108, nil, nil, 238, nil, nil, nil, nil, nil, - nil, 46, nil, nil, 110, 109, 111, 100, 57, 102, - 101, 103, nil, 104, 112, 113, nil, 96, 97, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 231, nil, nil, 237, nil, nil, 59, 60, nil, - nil, 61, nil, nil, nil, nil, nil, 45, nil, nil, - nil, nil, nil, nil, nil, nil, 236, nil, nil, nil, - nil, 94, 84, 87, 88, nil, 89, 91, 90, 92, - nil, nil, nil, nil, 85, 93, nil, nil, nil, 75, - 76, 77, 63, 58, 86, 98, 99, 64, 65, nil, - nil, nil, 68, nil, 66, 67, 69, 318, 319, 73, - 74, nil, nil, nil, nil, nil, 78, 315, 321, 106, - 105, 107, 108, nil, nil, 238, nil, nil, nil, nil, - nil, nil, 46, nil, nil, 110, 109, 111, 100, 57, - 102, 101, 103, nil, 104, 112, 113, nil, 96, 97, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 231, nil, nil, 237, nil, nil, 59, 60, - nil, nil, 61, nil, nil, nil, nil, nil, 45, nil, - nil, nil, nil, nil, nil, nil, nil, 236, nil, nil, - nil, nil, 94, 84, 87, 88, nil, 89, 91, 90, - 92, nil, nil, nil, nil, 85, 93, nil, nil, nil, - 75, 76, 77, 63, 58, 86, 98, 99, 64, 65, - nil, nil, nil, 68, nil, 66, 67, 69, 30, 31, - 73, 74, nil, nil, nil, nil, nil, 78, 28, 27, - 106, 105, 107, 108, nil, nil, 238, nil, nil, nil, - nil, nil, nil, 46, nil, nil, 110, 109, 111, 100, - 57, 102, 101, 103, 293, 104, 112, 113, nil, 96, - 97, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 231, nil, nil, 237, nil, nil, 59, - 60, nil, nil, 61, nil, 290, nil, 288, nil, 45, - nil, nil, 294, nil, nil, nil, nil, nil, 236, nil, - nil, nil, nil, 94, 291, 87, 88, nil, 89, 91, - 90, 92, nil, nil, nil, nil, 85, 93, nil, nil, - nil, 75, 76, 77, 63, 58, 86, 98, 99, 64, - 65, nil, nil, nil, 68, nil, 66, 67, 69, 30, - 31, 73, 74, nil, nil, nil, nil, nil, 78, 28, - 27, 106, 105, 107, 108, nil, nil, 238, nil, nil, - nil, nil, nil, nil, 46, nil, nil, 110, 109, 111, - 100, 57, 102, 101, 103, 293, 104, 112, 113, nil, - 96, 97, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 231, nil, nil, 237, nil, nil, - 59, 60, nil, nil, 61, nil, 290, nil, 288, nil, - 45, nil, nil, 294, nil, nil, nil, nil, nil, 236, - nil, nil, nil, nil, 94, 291, 87, 88, nil, 89, - 91, 90, 92, nil, nil, nil, nil, 85, 93, nil, - nil, nil, 75, 76, 77, 63, 58, 86, 98, 99, - 64, 65, nil, nil, nil, 68, nil, 66, 67, 69, - 30, 31, 73, 74, nil, nil, nil, nil, nil, 78, - 28, 27, 106, 105, 107, 108, nil, nil, 238, nil, - nil, nil, nil, nil, nil, 46, nil, nil, 110, 109, - 111, 100, 57, 102, 101, 103, 293, 104, 112, 113, - nil, 96, 97, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 231, nil, nil, 237, nil, - nil, 59, 60, nil, nil, 61, nil, 290, nil, 288, - nil, 45, nil, nil, 294, nil, nil, nil, nil, nil, - 236, nil, nil, nil, nil, 94, 291, 87, 88, nil, - 89, 91, 90, 92, nil, nil, nil, nil, 85, 93, - 226, nil, nil, 75, 76, 77, 63, 58, 86, 98, - 99, 64, 65, nil, nil, nil, 68, nil, 66, 67, - 69, 318, 319, 73, 74, nil, nil, nil, nil, nil, - 78, 315, 321, 106, 105, 107, 108, nil, nil, 238, - nil, nil, nil, nil, nil, nil, 46, nil, nil, 110, - 109, 111, 100, 57, 102, 101, 103, nil, 104, 112, - 113, nil, 96, 97, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 231, nil, nil, 237, - nil, nil, 59, 60, nil, nil, 61, nil, nil, nil, - nil, nil, 45, nil, nil, nil, nil, nil, nil, nil, - nil, 236, nil, nil, nil, nil, 94, 84, 87, 88, - nil, 89, 91, 90, 92, nil, nil, nil, nil, 85, - 93, nil, nil, nil, 75, 76, 77, 63, 58, 86, - 98, 99, 64, 65, nil, nil, nil, 68, nil, 66, - 67, 69, 318, 319, 73, 74, nil, nil, nil, nil, - nil, 78, 315, 321, 106, 105, 107, 108, nil, nil, - 238, nil, nil, nil, nil, nil, nil, 46, nil, nil, - 110, 109, 111, 100, 57, 102, 101, 103, nil, 104, - 112, 113, nil, 96, 97, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 231, nil, nil, - 237, nil, nil, 59, 60, nil, nil, 61, nil, nil, - nil, nil, nil, 45, nil, nil, nil, nil, nil, nil, - nil, nil, 236, nil, nil, nil, nil, 94, 84, 87, - 88, nil, 89, 91, 90, 92, nil, nil, nil, nil, - 85, 93, nil, nil, nil, 75, 76, 77, 63, 58, - 86, 98, 99, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 318, 319, 73, 74, nil, nil, nil, - nil, nil, 78, 315, 321, 106, 105, 107, 108, nil, - nil, 238, nil, nil, nil, nil, nil, nil, 46, nil, - nil, 110, 109, 111, 100, 57, 102, 101, 103, nil, - 104, 112, 113, nil, 96, 97, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 231, nil, - nil, 237, nil, nil, 59, 60, nil, nil, 61, nil, - nil, nil, nil, nil, 45, nil, nil, nil, nil, nil, - nil, nil, nil, 236, nil, nil, nil, nil, 94, 84, - 87, 88, nil, 89, 91, 90, 92, nil, nil, nil, - nil, 85, 93, nil, nil, nil, 75, 76, 77, 63, - 58, 86, 98, 99, 64, 65, nil, nil, nil, 68, - nil, 66, 67, 69, 318, 319, 73, 74, nil, nil, - nil, nil, nil, 78, 315, 321, 106, 105, 107, 108, - nil, nil, 238, nil, nil, nil, nil, nil, nil, 46, - nil, nil, 110, 109, 111, 100, 57, 102, 101, 103, - nil, 104, 112, 113, nil, 96, 97, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 231, - nil, nil, 237, nil, nil, 59, 60, nil, nil, 61, - nil, nil, nil, nil, nil, 45, nil, nil, nil, nil, - nil, nil, nil, nil, 236, nil, nil, nil, nil, 94, - 84, 87, 88, nil, 89, 91, 90, 92, nil, nil, - nil, nil, 85, 93, nil, nil, nil, nil, nil, nil, - 63, nil, 86, 98, 99, 75, 76, 77, 9, 58, - nil, nil, nil, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 78, 28, 27, 106, 105, 107, 108, nil, - nil, 19, nil, nil, nil, nil, nil, 8, 46, nil, - 10, 110, 109, 111, 100, 57, 102, 101, 103, nil, - 104, 112, 113, nil, 96, 97, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 40, nil, - nil, 33, nil, nil, 59, 60, nil, nil, 61, nil, - 35, nil, nil, nil, 45, nil, nil, nil, nil, nil, - nil, nil, nil, 20, nil, nil, nil, nil, 94, 84, - 87, 88, nil, 89, 91, 90, 92, nil, nil, nil, - nil, 85, 93, nil, nil, nil, 75, 76, 77, 63, - 58, 86, 98, 99, 64, 65, nil, nil, nil, 68, - nil, 66, 67, 69, 318, 319, 73, 74, nil, nil, - nil, nil, nil, 78, 315, 321, 106, 105, 107, 108, - nil, nil, 238, nil, nil, nil, nil, nil, nil, 316, - nil, nil, 110, 109, 111, 100, 57, 102, 101, 103, - nil, 104, 112, 113, nil, 96, 97, nil, nil, 322, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 312, - nil, nil, 237, nil, nil, 59, 60, nil, nil, 61, - nil, nil, 683, nil, 680, 679, 678, 688, 681, nil, - nil, nil, nil, nil, nil, nil, nil, 691, nil, 94, - 84, 87, 88, nil, 89, 91, 90, 92, nil, nil, - nil, nil, 85, 93, nil, nil, nil, 516, nil, 686, - 63, nil, 86, 98, 99, 75, 76, 77, nil, 58, - 699, 698, nil, 64, 65, 692, nil, nil, 68, nil, - 66, 67, 69, 318, 319, 73, 74, nil, nil, nil, - nil, nil, 78, 315, 321, 106, 105, 107, 108, nil, - nil, 238, nil, nil, nil, nil, nil, nil, 316, nil, - nil, 110, 109, 111, 100, 57, 102, 101, 103, nil, - 104, 112, 113, nil, 96, 97, nil, nil, 322, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 312, nil, - nil, 308, nil, nil, 59, 60, nil, nil, 61, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 94, 84, - 87, 88, nil, 89, 91, 90, 92, nil, nil, nil, - nil, 85, 93, nil, nil, nil, 75, 76, 77, 63, - 58, 86, 98, 99, 64, 65, nil, nil, nil, 68, - nil, 66, 67, 69, 318, 319, 73, 74, nil, nil, - nil, nil, nil, 78, 315, 321, 106, 105, 107, 108, - nil, nil, 238, nil, nil, nil, nil, nil, nil, 46, - nil, nil, 110, 109, 111, 100, 57, 102, 101, 103, - nil, 104, 112, 113, nil, 96, 97, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 231, - nil, nil, 237, nil, nil, 59, 60, nil, nil, 61, - nil, nil, nil, nil, nil, 45, nil, nil, nil, nil, - nil, nil, nil, nil, 236, nil, nil, nil, nil, 94, - 84, 87, 88, nil, 89, 91, 90, 92, nil, nil, - nil, nil, 85, 93, nil, nil, nil, 75, 76, 77, - 63, 58, 86, 98, 99, 64, 65, nil, nil, nil, - 68, nil, 66, 67, 69, 318, 319, 73, 74, nil, - nil, nil, nil, nil, 78, 315, 321, 106, 105, 107, - 108, nil, nil, 238, nil, nil, nil, nil, nil, nil, - 46, nil, nil, 110, 109, 111, 100, 57, 102, 101, - 103, nil, 104, 112, 113, nil, 96, 97, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 231, nil, nil, 237, 533, nil, 59, 60, nil, nil, - 61, nil, nil, nil, nil, nil, 45, nil, nil, nil, - nil, nil, nil, nil, nil, 236, nil, nil, nil, nil, - 94, 84, 87, 88, nil, 89, 91, 90, 92, nil, - nil, nil, nil, 85, 93, nil, nil, nil, 75, 76, - 77, 63, 58, 86, 98, 99, 64, 65, nil, nil, - nil, 68, nil, 66, 67, 69, 30, 31, 73, 74, - nil, nil, nil, nil, nil, 78, 28, 27, 106, 105, - 107, 108, nil, nil, 19, nil, nil, nil, nil, nil, - nil, 46, nil, nil, 110, 109, 111, 100, 57, 102, - 101, 103, nil, 104, 112, 113, nil, 96, 97, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 231, nil, nil, 237, nil, nil, 59, 60, nil, - nil, 61, nil, nil, nil, nil, nil, 45, nil, nil, - nil, nil, nil, nil, nil, nil, 20, nil, nil, nil, - nil, 94, 84, 87, 88, nil, 89, 91, 90, 92, - nil, nil, nil, nil, 85, 93, nil, nil, nil, 75, - 76, 77, 63, 58, 86, 98, 99, 64, 65, nil, - nil, nil, 68, nil, 66, 67, 69, 30, 31, 73, - 74, nil, nil, nil, nil, nil, 78, 28, 27, 106, - 105, 107, 108, nil, nil, 19, nil, nil, nil, nil, - nil, nil, 46, nil, nil, 110, 109, 111, 100, 57, - 102, 101, 103, nil, 104, 112, 113, nil, 96, 97, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 231, nil, nil, 237, nil, nil, 59, 60, - nil, nil, 61, nil, nil, nil, nil, nil, 45, nil, - nil, nil, nil, nil, nil, nil, nil, 20, nil, nil, - nil, nil, 94, 84, 87, 88, nil, 89, 91, 90, - 92, nil, nil, nil, nil, 85, 93, nil, nil, nil, - 75, 76, 77, 63, 58, 86, 98, 99, 64, 65, - nil, nil, nil, 68, nil, 66, 67, 69, 30, 31, - 73, 74, nil, nil, nil, nil, nil, 78, 28, 27, - 106, 105, 107, 108, nil, nil, 19, nil, nil, nil, - nil, nil, nil, 46, nil, nil, 110, 109, 111, 100, - 57, 102, 101, 103, nil, 104, 112, 113, nil, 96, - 97, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 231, nil, nil, 237, nil, nil, 59, - 60, nil, nil, 61, nil, nil, nil, nil, nil, 45, - nil, nil, nil, nil, nil, nil, nil, nil, 20, nil, - nil, nil, nil, 94, 84, 87, 88, nil, 89, 91, - 90, 92, nil, nil, nil, nil, 85, 93, nil, nil, - nil, 75, 76, 77, 63, 58, 86, 98, 99, 64, - 65, nil, nil, nil, 68, nil, 66, 67, 69, 318, - 319, 73, 74, nil, nil, nil, nil, nil, 78, 315, - 321, 106, 105, 107, 108, nil, nil, 238, nil, nil, - nil, nil, nil, nil, 46, nil, nil, 110, 109, 111, - 100, 57, 102, 101, 103, nil, 104, 112, 113, nil, - 96, 97, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 231, nil, nil, 237, nil, nil, - 59, 60, nil, nil, 61, nil, nil, nil, nil, nil, - 45, nil, nil, nil, nil, nil, nil, nil, nil, 236, - nil, nil, nil, nil, 94, 84, 87, 88, nil, 89, - 91, 90, 92, nil, nil, nil, nil, 85, 93, nil, - nil, nil, 75, 76, 77, 63, 58, 86, 98, 99, - 64, 65, nil, nil, nil, 68, nil, 66, 67, 69, - 30, 31, 73, 74, nil, nil, nil, nil, nil, 78, - 28, 27, 106, 105, 107, 108, nil, nil, 238, nil, - nil, nil, nil, nil, nil, 46, nil, nil, 110, 109, - 111, 100, 57, 102, 101, 103, 293, 104, 112, 113, - nil, 96, 97, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 231, nil, nil, 237, nil, - nil, 59, 60, nil, nil, 61, nil, 290, nil, 288, - nil, 45, nil, nil, 294, nil, nil, nil, nil, nil, - 236, nil, nil, nil, nil, 94, 291, 87, 88, nil, - 89, 91, 90, 92, nil, nil, nil, nil, 85, 93, - nil, nil, nil, 75, 76, 77, 63, 58, 86, 98, - 99, 64, 65, nil, nil, nil, 68, nil, 66, 67, - 69, 318, 319, 73, 74, nil, nil, nil, nil, nil, - 78, 315, 321, 106, 105, 107, 108, nil, nil, 238, - nil, nil, nil, nil, nil, nil, 46, nil, nil, 110, - 109, 111, 100, 57, 102, 101, 103, nil, 104, 112, - 113, nil, 96, 97, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 231, nil, nil, 237, - nil, nil, 59, 60, nil, nil, 61, nil, nil, nil, - nil, nil, 45, nil, nil, nil, nil, nil, nil, nil, - nil, 236, nil, nil, nil, nil, 94, 84, 87, 88, - nil, 89, 91, 90, 92, nil, nil, nil, nil, 85, - 93, nil, nil, nil, 75, 76, 77, 63, 58, 86, - 98, 99, 64, 65, nil, nil, nil, 68, nil, 66, - 67, 69, 318, 319, 73, 74, nil, nil, nil, nil, - nil, 78, 315, 321, 106, 105, 107, 108, nil, nil, - 238, nil, nil, nil, nil, nil, nil, 46, nil, nil, - 110, 109, 111, 100, 57, 102, 101, 103, nil, 104, - 112, 113, nil, 96, 97, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 231, nil, nil, - 237, nil, nil, 59, 60, nil, nil, 61, nil, nil, - nil, nil, nil, 45, nil, nil, nil, nil, nil, nil, - nil, nil, 236, nil, nil, nil, nil, 94, 84, 87, - 88, nil, 89, 91, 90, 92, nil, nil, nil, nil, - 85, 93, nil, nil, nil, 75, 76, 77, 63, 58, - 86, 98, 99, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 318, 319, 73, 74, nil, nil, nil, - nil, nil, 78, 315, 321, 106, 105, 107, 108, nil, - nil, 238, nil, nil, nil, nil, nil, nil, 46, nil, - nil, 110, 109, 111, 100, 57, 102, 101, 103, nil, - 104, 112, 113, nil, 96, 97, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 231, nil, - nil, 237, nil, nil, 59, 60, nil, nil, 61, nil, - nil, nil, nil, nil, 45, nil, nil, nil, nil, nil, - nil, nil, nil, 236, nil, nil, nil, nil, 94, 84, - 87, 88, nil, 89, 91, 90, 92, nil, nil, nil, - nil, 85, 93, nil, nil, nil, 75, 76, 77, 63, - 58, 86, 98, 99, 64, 65, nil, nil, nil, 68, - nil, 66, 67, 69, 318, 319, 73, 74, nil, nil, - nil, nil, nil, 78, 315, 321, 106, 105, 107, 108, - nil, nil, 238, nil, nil, nil, nil, nil, nil, 46, - nil, nil, 110, 109, 111, 100, 57, 102, 101, 103, - 293, 104, 112, 113, nil, 96, 97, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 231, - nil, nil, 237, nil, nil, 59, 60, nil, nil, 61, - nil, 641, nil, 288, nil, 45, nil, nil, 294, nil, - nil, nil, nil, nil, 236, nil, nil, nil, nil, 94, - 291, 87, 88, nil, 89, 91, 90, 92, nil, nil, - nil, nil, 85, 93, nil, nil, nil, 75, 76, 77, - 63, 58, 86, 98, 99, 64, 65, nil, nil, nil, - 68, nil, 66, 67, 69, 318, 319, 73, 74, nil, - nil, nil, nil, nil, 78, 315, 321, 106, 105, 107, - 108, nil, nil, 238, nil, nil, nil, nil, nil, nil, - 46, nil, nil, 110, 109, 111, 100, 57, 102, 101, - 103, 293, 104, 112, 113, nil, 96, 97, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 231, nil, nil, 237, nil, nil, 59, 60, nil, nil, - 61, nil, nil, nil, 288, nil, 45, nil, nil, 294, - nil, nil, nil, nil, nil, 236, nil, nil, nil, nil, - 94, 291, 87, 88, nil, 89, 91, 90, 92, nil, - nil, nil, nil, 85, 93, nil, nil, nil, 75, 76, - 77, 63, 58, 86, 98, 99, 64, 65, nil, nil, - nil, 68, nil, 66, 67, 69, 318, 319, 73, 74, - nil, nil, nil, nil, nil, 78, 315, 321, 106, 105, - 107, 108, nil, nil, 238, nil, nil, nil, nil, nil, - nil, 46, nil, nil, 110, 109, 111, 100, 57, 102, - 101, 103, nil, 104, 112, 113, nil, 96, 97, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 231, nil, nil, 237, nil, nil, 59, 60, nil, - nil, 61, nil, nil, nil, nil, nil, 45, nil, nil, - nil, nil, nil, nil, nil, nil, 236, nil, nil, nil, - nil, 94, 84, 87, 88, nil, 89, 91, 90, 92, - nil, nil, nil, nil, 85, 93, nil, nil, nil, nil, - nil, nil, 63, nil, 86, 98, 99, 75, 76, 77, - 9, 58, nil, nil, nil, 64, 65, nil, nil, nil, - 68, nil, 66, 67, 69, 30, 31, 73, 74, nil, - nil, nil, nil, nil, 78, 28, 27, 106, 105, 107, - 108, nil, nil, 19, nil, nil, nil, nil, nil, 8, - 46, 301, 10, 110, 109, 111, 100, 57, 102, 101, - 103, nil, 104, 112, 113, nil, 96, 97, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 40, nil, nil, 33, nil, nil, 59, 60, nil, nil, - 61, nil, 35, nil, nil, nil, 45, nil, nil, nil, - nil, nil, nil, nil, nil, 20, nil, nil, nil, nil, - 94, 84, 87, 88, nil, 89, 91, 90, 92, nil, - nil, nil, nil, 85, 93, nil, nil, nil, nil, nil, - 398, 63, nil, 86, 98, 99, 75, 76, 77, nil, - 58, nil, nil, nil, 64, 65, nil, nil, nil, 68, - nil, 66, 67, 69, 318, 319, 73, 74, nil, nil, - nil, nil, nil, 78, 315, 321, 106, 105, 107, 108, - nil, nil, 238, nil, nil, nil, nil, nil, nil, 316, - nil, nil, 110, 109, 111, 100, 57, 102, 101, 103, - nil, 104, 112, 113, nil, 96, 97, nil, nil, 322, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 312, - nil, nil, 308, nil, nil, 59, 60, nil, nil, 61, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 94, - 84, 87, 88, nil, 89, 91, 90, 92, nil, nil, - nil, nil, 85, 93, nil, nil, nil, 75, 76, 77, - 63, 58, 86, 98, 99, 64, 65, nil, nil, nil, - 68, nil, 66, 67, 69, 30, 31, 73, 74, nil, - nil, nil, nil, nil, 78, 28, 27, 106, 105, 107, - 108, nil, nil, 238, nil, nil, nil, nil, nil, nil, - 46, nil, nil, 110, 109, 111, 100, 57, 102, 101, - 103, 293, 104, 112, 113, nil, 96, 97, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 231, nil, nil, 237, nil, nil, 59, 60, nil, nil, - 61, nil, 290, nil, 288, nil, 45, nil, nil, 294, - nil, nil, nil, nil, nil, 236, nil, nil, nil, nil, - 94, 291, 87, 88, nil, 89, 91, 90, 92, nil, - nil, nil, nil, 85, 93, nil, nil, nil, 75, 76, - 77, 63, 58, 86, 98, 99, 64, 65, nil, nil, - nil, 68, nil, 66, 67, 69, 318, 319, 73, 74, - nil, nil, nil, nil, nil, 78, 315, 321, 106, 105, - 107, 108, nil, nil, 238, nil, nil, nil, nil, nil, - nil, 316, nil, nil, 110, 109, 111, 100, 57, 102, - 101, 103, nil, 104, 112, 113, nil, 96, 97, nil, - nil, 322, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 312, nil, nil, 308, nil, nil, 59, 60, nil, - nil, 61, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 94, 84, 87, 88, nil, 89, 91, 90, 92, - nil, nil, nil, nil, 85, 93, nil, nil, nil, 75, - 76, 77, 63, 58, 86, 98, 99, 64, 65, nil, - nil, nil, 68, nil, 66, 67, 69, 318, 319, 73, - 74, nil, nil, nil, nil, nil, 78, 315, 321, 106, - 105, 107, 108, nil, nil, 238, nil, nil, nil, nil, - nil, nil, 46, nil, nil, 110, 109, 111, 100, 57, - 102, 101, 103, nil, 104, 112, 113, nil, 96, 97, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 231, nil, nil, 237, nil, nil, 59, 60, - nil, nil, 61, nil, nil, nil, nil, nil, 45, nil, - nil, nil, nil, nil, nil, nil, nil, 236, nil, nil, - nil, nil, 94, 84, 87, 88, nil, 89, 91, 90, - 92, nil, nil, nil, nil, 85, 93, nil, nil, nil, - 75, 76, 77, 63, 58, 86, 98, 99, 64, 65, - nil, nil, nil, 68, nil, 66, 67, 69, 318, 319, - 73, 74, nil, nil, nil, nil, nil, 78, 315, 321, - 106, 105, 107, 108, nil, nil, 238, nil, nil, nil, - nil, nil, nil, 46, nil, nil, 110, 109, 111, 100, - 57, 102, 101, 103, nil, 104, 112, 113, nil, 96, - 97, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 231, nil, nil, 237, nil, nil, 59, - 60, nil, nil, 61, nil, nil, nil, nil, nil, 45, - nil, nil, nil, nil, nil, nil, nil, nil, 236, nil, - nil, nil, nil, 94, 84, 87, 88, nil, 89, 91, - 90, 92, nil, nil, nil, nil, 85, 93, nil, nil, - nil, 75, 76, 77, 63, 58, 86, 98, 99, 64, - 65, nil, nil, nil, 68, nil, 66, 67, 69, 30, - 31, 73, 74, nil, nil, nil, nil, nil, 78, 28, - 27, 106, 105, 107, 108, nil, nil, 19, nil, nil, - nil, nil, nil, nil, 46, nil, nil, 110, 109, 111, - 100, 57, 102, 101, 103, nil, 104, 112, 113, nil, - 96, 97, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 231, nil, nil, 237, nil, nil, - 59, 60, nil, nil, 61, nil, nil, nil, nil, nil, - 45, nil, nil, nil, nil, nil, nil, nil, nil, 20, - nil, nil, nil, nil, 94, 84, 87, 88, nil, 89, - 91, 90, 92, nil, nil, nil, nil, 85, 93, nil, - nil, nil, 75, 76, 77, 63, 58, 86, 98, 99, - 64, 65, nil, nil, nil, 68, nil, 66, 67, 69, - 318, 319, 73, 74, nil, nil, nil, nil, nil, 78, - 315, 321, 106, 105, 107, 108, nil, nil, 238, nil, - nil, nil, nil, nil, nil, 46, nil, nil, 110, 109, - 111, 100, 57, 102, 101, 103, 293, 104, 112, 113, - nil, 96, 97, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 231, nil, nil, 237, nil, - nil, 59, 60, nil, nil, 61, nil, 641, nil, nil, - nil, 45, nil, nil, 294, nil, nil, nil, nil, nil, - 236, nil, nil, nil, nil, 94, 291, 87, 88, nil, - 89, 91, 90, 92, nil, nil, nil, nil, 85, 93, - nil, nil, nil, 75, 76, 77, 63, 58, 86, 98, - 99, 64, 65, nil, nil, nil, 68, nil, 66, 67, - 69, 318, 319, 73, 74, nil, nil, nil, nil, nil, - 78, 315, 321, 106, 105, 107, 108, nil, nil, 238, - nil, nil, nil, nil, nil, nil, 46, nil, nil, 110, - 109, 111, 100, 57, 102, 101, 103, 293, 104, 112, - 113, nil, 96, 97, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 231, nil, nil, 237, - nil, nil, 59, 60, nil, nil, 61, nil, nil, nil, - nil, nil, 45, nil, nil, 294, nil, nil, nil, nil, - nil, 236, nil, nil, nil, nil, 94, 291, 87, 88, - nil, 89, 91, 90, 92, nil, nil, nil, nil, 85, - 93, nil, nil, nil, 75, 76, 77, 63, 58, 86, - 98, 99, 64, 65, nil, nil, nil, 68, nil, 66, - 67, 69, 318, 319, 73, 74, nil, nil, nil, nil, - nil, 78, 315, 321, 106, 105, 107, 108, nil, nil, - 238, nil, nil, nil, nil, nil, nil, 46, nil, nil, - 110, 109, 111, 100, 57, 102, 101, 103, nil, 104, - 112, 113, nil, 96, 97, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 231, nil, nil, - 237, nil, nil, 59, 60, nil, nil, 61, nil, 290, - nil, nil, nil, 45, nil, nil, nil, nil, nil, nil, - nil, nil, 236, nil, nil, nil, nil, 94, 84, 87, - 88, nil, 89, 91, 90, 92, nil, nil, nil, nil, - 85, 93, nil, nil, nil, 75, 76, 77, 63, 58, - 86, 98, 99, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 78, 28, 27, 106, 105, 107, 108, nil, - nil, 238, nil, nil, nil, nil, nil, nil, 46, nil, - nil, 110, 109, 111, 100, 57, 102, 101, 103, 293, - 104, 112, 113, nil, 96, 97, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 231, nil, - nil, 237, nil, nil, 59, 60, nil, nil, 61, nil, - 290, nil, 288, nil, 45, nil, nil, 294, nil, nil, - nil, nil, nil, 236, nil, nil, nil, nil, 94, 291, - 87, 88, nil, 89, 91, 90, 92, nil, nil, nil, - nil, 85, 93, nil, nil, nil, 75, 76, 77, 63, - 58, 86, 98, 99, 64, 65, nil, nil, nil, 68, - nil, 66, 67, 69, 30, 31, 73, 74, nil, nil, - nil, nil, nil, 78, 28, 27, 106, 105, 107, 108, - nil, nil, 238, nil, nil, nil, nil, nil, nil, 46, - nil, nil, 110, 109, 111, 100, 57, 102, 101, 103, - 293, 104, 112, 113, nil, 96, 97, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 231, - nil, nil, 237, nil, nil, 59, 60, nil, nil, 61, - nil, 290, nil, 288, nil, 45, nil, nil, 294, nil, - nil, nil, nil, nil, 236, nil, nil, nil, nil, 94, - 291, 87, 88, nil, 89, 91, 90, 92, nil, nil, - nil, nil, 85, 93, nil, nil, nil, 75, 76, 77, - 63, 58, 86, 98, 99, 64, 65, nil, nil, nil, - 68, nil, 66, 67, 69, 318, 319, 73, 74, nil, - nil, nil, nil, nil, 78, 315, 321, 106, 105, 107, - 108, nil, nil, 238, nil, nil, nil, nil, nil, nil, - 46, nil, nil, 110, 109, 111, 100, 57, 102, 101, - 103, nil, 104, 112, 113, nil, 96, 97, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 231, nil, nil, 237, nil, nil, 59, 60, nil, nil, - 61, nil, 745, nil, nil, nil, 45, nil, nil, nil, - nil, nil, nil, nil, nil, 236, nil, nil, nil, nil, - 94, 84, 87, 88, nil, 89, 91, 90, 92, nil, - nil, nil, nil, 85, 93, nil, nil, nil, 75, 76, - 77, 63, 58, 86, 98, 99, 64, 65, nil, nil, - nil, 68, nil, 66, 67, 69, 30, 31, 73, 74, - nil, nil, nil, nil, nil, 78, 28, 27, 106, 105, - 107, 108, nil, nil, 238, nil, nil, nil, nil, nil, - nil, 46, nil, nil, 110, 109, 111, 100, 57, 102, - 101, 103, nil, 104, 112, 113, nil, 96, 97, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 231, nil, nil, 237, nil, nil, 59, 60, nil, - nil, 61, nil, nil, nil, nil, nil, 45, nil, nil, - nil, nil, nil, nil, nil, nil, 236, nil, nil, nil, - nil, 94, 84, 87, 88, nil, 89, 91, 90, 92, - nil, nil, nil, nil, 85, 93, nil, nil, nil, 75, - 76, 77, 63, 58, 86, 98, 99, 64, 65, nil, - nil, nil, 68, nil, 66, 67, 69, 30, 31, 73, - 74, nil, nil, nil, nil, nil, 78, 28, 27, 106, - 105, 107, 108, nil, nil, 238, nil, nil, nil, nil, - nil, nil, 46, nil, nil, 110, 109, 111, 100, 57, - 102, 101, 103, 293, 104, 112, 113, nil, 96, 97, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 231, nil, nil, 237, nil, nil, 59, 60, - nil, nil, 61, nil, 290, nil, 288, nil, 45, nil, - nil, 294, nil, nil, nil, nil, nil, 236, nil, nil, - nil, nil, 94, 291, 87, 88, nil, 89, 91, 90, - 92, nil, nil, nil, nil, 85, 93, nil, nil, nil, - nil, nil, nil, 63, nil, 86, 98, 99, 75, 76, - 77, 9, 58, nil, nil, nil, 64, 65, nil, nil, - nil, 68, nil, 66, 67, 69, 30, 31, 73, 74, - nil, nil, nil, nil, nil, 78, 28, 27, 106, 105, - 107, 108, nil, nil, 19, nil, nil, nil, nil, nil, - 8, 46, nil, 10, 110, 109, 111, 100, 57, 102, - 101, 103, nil, 104, 112, 113, nil, 96, 97, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 40, nil, nil, 33, nil, nil, 59, 60, nil, - nil, 61, nil, 35, nil, nil, nil, 45, nil, nil, - nil, nil, nil, nil, nil, nil, 20, nil, nil, nil, - nil, 94, 84, 87, 88, nil, 89, 91, 90, 92, - nil, nil, nil, nil, 85, 93, nil, nil, nil, 75, - 76, 77, 63, 58, 86, 98, 99, 64, 65, nil, - nil, nil, 68, nil, 66, 67, 69, 318, 319, 73, - 74, nil, nil, nil, nil, nil, 78, 315, 321, 106, - 105, 107, 108, nil, nil, 238, nil, nil, nil, nil, - nil, nil, 46, nil, nil, 110, 109, 111, 100, 57, - 102, 101, 103, nil, 104, 112, 113, nil, 96, 97, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 231, nil, nil, 237, nil, nil, 59, 60, - nil, nil, 61, nil, nil, nil, nil, nil, 45, nil, - nil, nil, nil, nil, nil, nil, nil, 236, nil, nil, - nil, nil, 94, 84, 87, 88, nil, 89, 91, 90, - 92, nil, nil, nil, nil, 85, 93, nil, nil, nil, - 75, 76, 77, 63, 58, 86, 98, 99, 64, 65, - nil, nil, nil, 68, nil, 66, 67, 69, 318, 319, - 73, 74, nil, nil, nil, nil, nil, 78, 315, 321, - 106, 105, 107, 108, nil, nil, 238, nil, nil, nil, - nil, nil, nil, 46, nil, nil, 110, 109, 111, 100, - 57, 102, 101, 103, 293, 104, 112, 113, nil, 96, - 97, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 231, nil, nil, 237, nil, nil, 59, - 60, nil, nil, 61, nil, 641, nil, 288, nil, 45, - nil, nil, 294, nil, nil, nil, nil, nil, 236, nil, - nil, nil, nil, 94, 291, 87, 88, nil, 89, 91, - 90, 92, nil, nil, nil, nil, 85, 93, nil, nil, - nil, 75, 76, 77, 63, 58, 86, 98, 99, 64, - 65, nil, nil, nil, 68, nil, 66, 67, 69, 318, - 319, 73, 74, nil, nil, nil, nil, nil, 78, 315, - 321, 106, 105, 107, 108, nil, nil, 238, nil, nil, - nil, nil, nil, nil, 46, nil, nil, 110, 109, 111, - 100, 57, 102, 101, 103, 293, 104, 112, 113, nil, - 96, 97, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 231, nil, nil, 237, nil, nil, - 59, 60, nil, nil, 61, nil, nil, nil, 288, nil, - 45, nil, nil, 294, nil, nil, nil, nil, nil, 236, - nil, nil, nil, nil, 94, 291, 87, 88, nil, 89, - 91, 90, 92, nil, nil, nil, nil, 85, 93, nil, - nil, nil, 75, 76, 77, 63, 58, 86, 98, 99, - 64, 65, nil, nil, nil, 68, nil, 66, 67, 69, - 30, 31, 73, 74, nil, nil, nil, nil, nil, 78, - 28, 27, 106, 105, 107, 108, nil, nil, 238, nil, - nil, nil, nil, nil, nil, 46, nil, nil, 110, 109, - 111, 100, 57, 102, 101, 103, nil, 104, 112, 113, - nil, 96, 97, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 231, nil, nil, 237, nil, - nil, 59, 60, nil, nil, 61, nil, nil, nil, nil, - nil, 45, nil, nil, nil, nil, nil, nil, nil, nil, - 236, nil, nil, nil, nil, 94, 84, 87, 88, nil, - 89, 91, 90, 92, nil, nil, nil, nil, 85, 93, - nil, nil, nil, 75, 76, 77, 63, 58, 86, 98, - 99, 64, 65, nil, nil, nil, 68, nil, 66, 67, - 69, 30, 31, 73, 74, nil, nil, nil, nil, nil, - 78, 28, 27, 106, 105, 107, 108, nil, nil, 238, - nil, nil, nil, nil, nil, nil, 46, nil, nil, 110, - 109, 111, 100, 57, 102, 101, 103, nil, 104, 112, - 113, nil, 96, 97, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 231, nil, nil, 237, - nil, nil, 59, 60, nil, nil, 61, nil, nil, nil, - nil, nil, 45, nil, nil, nil, nil, nil, nil, nil, - nil, 236, nil, nil, nil, nil, 94, 84, 87, 88, - nil, 89, 91, 90, 92, nil, nil, nil, nil, 85, - 93, nil, nil, nil, 75, 76, 77, 63, 58, 86, - 98, 99, 64, 65, nil, nil, nil, 68, nil, 66, - 67, 69, 30, 31, 73, 74, nil, nil, nil, nil, - nil, 78, 28, 27, 106, 105, 107, 108, nil, nil, - 238, nil, nil, nil, nil, nil, nil, 46, nil, nil, - 110, 109, 111, 100, 57, 102, 101, 103, nil, 104, - 112, 113, nil, 96, 97, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 231, nil, nil, - 237, nil, nil, 59, 60, nil, nil, 61, nil, nil, - nil, nil, nil, 45, nil, nil, nil, nil, nil, nil, - nil, nil, 236, nil, nil, nil, nil, 94, 84, 87, - 88, nil, 89, 91, 90, 92, nil, nil, nil, nil, - 85, 93, nil, nil, nil, 75, 76, 77, 63, 58, - 86, 98, 99, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 30, 31, 73, 74, nil, nil, nil, - nil, nil, 78, 28, 27, 106, 105, 107, 108, nil, - nil, 238, nil, nil, nil, nil, nil, nil, 46, nil, - nil, 110, 109, 111, 100, 57, 102, 101, 103, nil, - 104, 112, 113, nil, 96, 97, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 231, nil, - nil, 237, nil, nil, 59, 60, nil, nil, 61, nil, - nil, nil, nil, nil, 45, nil, nil, nil, nil, nil, - nil, nil, nil, 236, nil, nil, nil, nil, 94, 84, - 87, 88, nil, 89, 91, 90, 92, nil, nil, nil, - nil, 85, 93, nil, nil, nil, 75, 76, 77, 63, - 58, 86, 98, 99, 64, 65, nil, nil, nil, 68, - nil, 66, 67, 69, 318, 319, 73, 74, nil, nil, - nil, nil, nil, 78, 315, 321, 106, 105, 107, 108, - nil, nil, 238, nil, nil, nil, nil, nil, nil, 46, - nil, nil, 110, 109, 111, 100, 57, 102, 101, 103, - nil, 104, 112, 113, nil, 96, 97, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 231, - nil, nil, 237, nil, nil, 59, 60, nil, nil, 61, - nil, nil, nil, nil, nil, 45, nil, nil, nil, nil, - nil, nil, nil, nil, 236, nil, nil, nil, nil, 94, - 84, 87, 88, nil, 89, 91, 90, 92, nil, nil, - nil, nil, 85, 93, nil, nil, nil, 75, 76, 77, - 63, 58, 86, 98, 99, 64, 65, nil, nil, nil, - 68, nil, 66, 67, 69, 318, 319, 73, 74, nil, - nil, nil, nil, nil, 78, 315, 321, 106, 105, 107, - 108, nil, nil, 238, nil, nil, nil, nil, nil, nil, - 46, nil, nil, 110, 109, 111, 100, 57, 102, 101, - 103, nil, 104, 112, 113, nil, 96, 97, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 231, nil, nil, 237, nil, nil, 59, 60, nil, nil, - 61, nil, nil, nil, nil, nil, 45, nil, nil, nil, - nil, nil, nil, nil, nil, 236, nil, nil, nil, nil, - 94, 84, 87, 88, nil, 89, 91, 90, 92, nil, - nil, nil, nil, 85, 93, nil, nil, nil, 75, 76, - 77, 63, 58, 86, 98, 99, 64, 65, nil, nil, - nil, 68, nil, 66, 67, 69, 318, 319, 73, 74, - nil, nil, nil, nil, nil, 78, 315, 321, 106, 105, - 107, 108, nil, nil, 238, nil, nil, nil, nil, nil, - nil, 316, nil, nil, 110, 109, 111, 100, 57, 102, - 101, 103, nil, 104, 112, 113, nil, 96, 97, nil, - nil, 322, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 312, nil, nil, 308, nil, nil, 59, 60, nil, - nil, 61, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 94, 84, 87, 88, nil, 89, 91, 90, 92, - nil, nil, nil, nil, 85, 93, nil, nil, nil, 75, - 76, 77, 63, 58, 86, 98, 99, 64, 65, nil, - nil, nil, 68, nil, 66, 67, 69, 318, 319, 73, - 74, nil, nil, nil, nil, nil, 78, 315, 321, 106, - 105, 107, 108, nil, nil, 238, nil, nil, nil, nil, - nil, nil, 316, nil, nil, 110, 109, 111, 100, 57, - 102, 101, 103, nil, 104, 112, 113, nil, 96, 97, - nil, nil, 322, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 312, nil, nil, 308, nil, nil, 59, 60, - nil, nil, 61, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 94, 84, 87, 88, nil, 89, 91, 90, - 92, nil, nil, nil, nil, 85, 93, nil, nil, nil, - 75, 76, 77, 63, 58, 86, 98, 99, 64, 65, - nil, nil, nil, 68, nil, 66, 67, 69, 318, 319, - 73, 74, nil, nil, nil, nil, nil, 78, 315, 321, - 106, 105, 107, 108, nil, nil, 238, nil, nil, nil, - nil, nil, nil, 46, nil, nil, 110, 109, 111, 100, - 57, 102, 101, 103, nil, 104, 112, 113, nil, 96, - 97, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 231, nil, nil, 237, nil, nil, 59, - 60, nil, nil, 61, nil, 414, nil, nil, nil, 45, - nil, nil, nil, nil, nil, nil, nil, nil, 236, nil, - nil, nil, nil, 94, 84, 87, 88, nil, 89, 91, - 90, 92, nil, nil, nil, nil, 85, 93, nil, nil, - nil, 75, 76, 77, 63, 58, 86, 98, 99, 64, - 65, nil, nil, nil, 68, nil, 66, 67, 69, 318, - 319, 73, 74, nil, nil, nil, nil, nil, 78, 315, - 321, 106, 105, 107, 108, nil, nil, 238, nil, nil, - nil, nil, nil, nil, 46, nil, nil, 110, 109, 111, - 100, 57, 102, 101, 103, nil, 104, 112, 113, nil, - 96, 97, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 231, nil, nil, 237, nil, nil, - 59, 60, nil, nil, 61, nil, nil, nil, nil, nil, - 45, nil, nil, nil, nil, nil, nil, nil, nil, 236, - nil, nil, nil, nil, 94, 84, 87, 88, nil, 89, - 91, 90, 92, nil, nil, nil, nil, 85, 93, nil, - nil, nil, 75, 76, 77, 63, 58, 86, 98, 99, - 64, 65, nil, nil, nil, 68, nil, 66, 67, 69, - 30, 31, 73, 74, nil, nil, nil, nil, nil, 78, - 28, 27, 106, 105, 107, 108, nil, nil, 19, nil, - nil, nil, nil, nil, nil, 46, nil, nil, 110, 109, - 111, 100, 57, 102, 101, 103, nil, 104, 112, 113, - nil, 96, 97, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 231, nil, nil, 237, nil, - nil, 59, 60, nil, nil, 61, nil, nil, nil, nil, - nil, 45, nil, nil, nil, nil, nil, nil, nil, nil, - 20, nil, nil, nil, nil, 94, 84, 87, 88, nil, - 89, 91, 90, 92, nil, nil, nil, nil, 85, 93, - nil, nil, nil, 75, 76, 77, 63, 58, 86, 98, - 99, 64, 65, nil, nil, nil, 68, nil, 66, 67, - 69, 318, 319, 73, 74, nil, nil, nil, nil, nil, - 78, 315, 321, 106, 105, 107, 108, nil, nil, 238, - nil, nil, nil, nil, nil, nil, 46, nil, nil, 110, - 109, 111, 100, 57, 102, 101, 103, nil, 104, 112, - 113, nil, 96, 97, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 231, nil, nil, 237, - nil, nil, 59, 60, nil, nil, 61, nil, nil, nil, - nil, nil, 45, nil, nil, nil, nil, nil, nil, nil, - nil, 236, nil, nil, nil, nil, 94, 84, 87, 88, - nil, 89, 91, 90, 92, nil, nil, nil, nil, 85, - 93, nil, nil, nil, 75, 76, 77, 63, 58, 86, - 98, 99, 64, 65, nil, nil, nil, 68, nil, 66, - 67, 69, 30, 31, 73, 74, nil, nil, nil, nil, - nil, 78, 28, 27, 106, 105, 107, 108, nil, nil, - 238, nil, nil, nil, nil, nil, nil, 46, nil, nil, - 110, 109, 111, 100, 57, 102, 101, 103, nil, 104, - 112, 113, nil, 96, 97, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 231, nil, nil, - 237, nil, nil, 59, 60, nil, nil, 61, nil, nil, - nil, nil, nil, 45, nil, nil, nil, nil, nil, nil, - nil, nil, 236, nil, nil, nil, nil, 94, 84, 87, - 88, nil, 89, 91, 90, 92, nil, nil, nil, nil, - 85, 93, nil, nil, nil, 75, 76, 77, 63, 58, - 86, 98, 99, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 318, 319, 73, 74, nil, nil, nil, - nil, nil, 78, 315, 321, 106, 105, 107, 108, nil, - nil, 238, nil, nil, nil, nil, nil, nil, 46, nil, - nil, 110, 109, 111, 100, 57, 102, 101, 103, nil, - 104, 112, 113, nil, 96, 97, 42, 43, 41, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 231, nil, - nil, 237, nil, nil, 59, 60, nil, nil, 61, nil, - nil, nil, nil, nil, 45, nil, nil, nil, nil, nil, - nil, nil, nil, 236, nil, nil, nil, nil, 94, 84, - 87, 88, nil, 89, 91, 90, 92, nil, nil, nil, - nil, 85, 93, nil, nil, nil, 75, 76, 77, 63, - 58, 86, 98, 99, 64, 65, nil, nil, nil, 68, - nil, 66, 67, 69, 318, 319, 73, 74, nil, nil, - nil, nil, nil, 78, 315, 321, 106, 105, 107, 108, - nil, nil, 238, nil, nil, nil, nil, nil, nil, 46, - nil, nil, 110, 109, 111, 100, 57, 102, 101, 103, - nil, 104, 112, 113, nil, 96, 97, 42, 43, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 231, - nil, nil, 237, nil, nil, 59, 60, nil, nil, 61, - nil, nil, nil, nil, nil, 45, nil, nil, nil, nil, - nil, nil, nil, nil, 236, nil, nil, nil, nil, 94, - 84, 87, 88, nil, 89, 91, 90, 92, nil, nil, - nil, nil, 85, 93, nil, nil, nil, 75, 76, 77, - 63, 58, 86, 98, 99, 64, 65, nil, nil, nil, - 68, nil, 66, 67, 69, 318, 319, 73, 74, nil, - nil, nil, nil, nil, 78, 315, 321, 106, 105, 107, - 108, nil, nil, 238, nil, nil, nil, nil, nil, nil, - 46, nil, nil, 110, 109, 111, 100, 57, 102, 101, - 103, nil, 104, 112, 113, nil, 96, 97, 42, 43, - 41, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 231, nil, nil, 237, nil, nil, 59, 60, nil, nil, - 61, nil, nil, nil, nil, nil, 45, nil, nil, nil, - nil, nil, nil, nil, nil, 236, nil, nil, nil, nil, - 94, 84, 87, 88, nil, 89, 91, 90, 92, nil, - nil, nil, nil, 85, 93, nil, nil, nil, 75, 76, - 77, 63, 58, 86, 98, 99, 64, 65, nil, nil, - nil, 68, nil, 66, 67, 69, 318, 319, 73, 74, - nil, nil, nil, nil, nil, 78, 315, 321, 106, 105, - 107, 108, nil, nil, 238, nil, nil, nil, nil, nil, - nil, 46, nil, nil, 110, 109, 111, 100, 57, 102, - 101, 103, nil, 104, 112, 113, nil, 96, 97, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 231, nil, nil, 237, nil, nil, 59, 60, nil, - nil, 61, nil, nil, nil, nil, nil, 45, nil, nil, - nil, nil, nil, nil, nil, nil, 236, nil, nil, nil, - nil, 94, 84, 87, 88, nil, 89, 91, 90, 92, - nil, nil, nil, nil, 85, 93, nil, nil, nil, 75, - 76, 77, 63, 58, 86, 98, 99, 64, 65, nil, - nil, nil, 68, nil, 66, 67, 69, 318, 319, 73, - 74, nil, nil, nil, nil, nil, 78, 315, 321, 106, - 105, 107, 108, nil, nil, 238, nil, nil, nil, nil, - nil, nil, 46, nil, nil, 110, 109, 111, 100, 57, - 102, 101, 103, nil, 104, 112, 113, nil, 96, 97, - 42, 43, 41, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 231, nil, nil, 237, nil, nil, 59, 60, - nil, nil, 61, nil, nil, nil, nil, nil, 45, nil, - nil, nil, nil, nil, nil, nil, nil, 236, nil, nil, - nil, nil, 94, 84, 87, 88, nil, 89, 91, 90, - 92, nil, nil, nil, nil, 85, 93, nil, nil, nil, - 75, 76, 77, 63, 58, 86, 98, 99, 64, 65, - nil, nil, nil, 68, nil, 66, 67, 69, 318, 319, - 73, 74, nil, nil, nil, nil, nil, 78, 315, 321, - 106, 105, 107, 108, nil, nil, 238, nil, nil, nil, - nil, nil, nil, 46, nil, nil, 110, 109, 111, 100, - 57, 102, 101, 103, nil, 104, 112, 113, nil, 96, - 97, 42, 43, 41, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 231, nil, nil, 237, nil, nil, 59, - 60, nil, nil, 61, nil, nil, nil, nil, nil, 45, - nil, nil, nil, nil, nil, nil, nil, nil, 236, nil, - nil, nil, nil, 94, 84, 87, 88, nil, 89, 91, - 90, 92, nil, nil, nil, nil, 85, 93, nil, nil, - nil, 75, 76, 77, 63, 58, 86, 98, 99, 64, - 65, nil, nil, nil, 68, nil, 66, 67, 69, 30, - 31, 73, 74, nil, nil, nil, nil, nil, 78, 28, - 27, 106, 105, 107, 108, nil, nil, 19, nil, nil, - nil, nil, nil, nil, 46, nil, nil, 110, 109, 111, - 100, 57, 102, 101, 103, nil, 104, 112, 113, nil, - 96, 97, 42, 43, 41, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 231, nil, nil, 237, nil, nil, - 59, 60, nil, nil, 61, nil, nil, nil, nil, nil, - 45, nil, nil, nil, nil, nil, nil, nil, nil, 20, - nil, nil, nil, nil, 94, 84, 87, 88, nil, 89, - 91, 90, 92, nil, nil, nil, nil, 85, 93, nil, - nil, nil, 75, 76, 77, 63, 58, 86, 98, 99, - 64, 65, nil, nil, nil, 68, nil, 66, 67, 69, - 318, 319, 73, 74, nil, nil, nil, nil, nil, 78, - 315, 321, 106, 105, 107, 108, nil, nil, 238, nil, - nil, nil, nil, nil, nil, 46, nil, nil, 110, 109, - 111, 100, 57, 102, 101, 103, nil, 104, 112, 113, - nil, 96, 97, 42, 43, 41, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 231, nil, nil, 237, nil, - nil, 59, 60, nil, nil, 61, nil, 641, nil, nil, - nil, 45, nil, nil, nil, nil, nil, nil, nil, nil, - 236, nil, nil, nil, nil, 94, 84, 87, 88, nil, - 89, 91, 90, 92, nil, nil, nil, nil, 85, 93, - nil, nil, nil, 75, 76, 77, 63, 58, 86, 98, - 99, 64, 65, nil, nil, nil, 68, nil, 66, 67, - 69, 318, 319, 73, 74, nil, nil, nil, nil, nil, - 78, 315, 321, 106, 105, 107, 108, nil, nil, 238, - nil, nil, nil, nil, nil, nil, 46, nil, nil, 110, - 109, 111, 100, 57, 102, 101, 103, 293, 104, 112, - 113, nil, 96, 97, 42, 43, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 231, nil, nil, 237, - nil, nil, 59, 60, nil, nil, 61, nil, nil, nil, - 288, nil, 45, nil, nil, 294, nil, nil, nil, nil, - nil, 236, nil, nil, nil, nil, 94, 291, 87, 88, - nil, 89, 91, 90, 92, nil, nil, nil, nil, 85, - 93, nil, nil, nil, 75, 76, 77, 63, 58, 86, - 98, 99, 64, 65, nil, nil, nil, 68, nil, 66, - 67, 69, 318, 319, 73, 74, nil, nil, nil, nil, - nil, 78, 315, 321, 106, 105, 107, 108, nil, nil, - 238, nil, nil, nil, nil, nil, nil, 46, nil, nil, - 110, 109, 111, 100, 57, 102, 101, 103, nil, 104, - 112, 113, nil, 96, 97, 42, 43, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 231, nil, nil, - 237, nil, nil, 59, 60, nil, nil, 61, nil, nil, - nil, nil, nil, 45, nil, nil, nil, nil, nil, nil, - nil, nil, 236, nil, nil, nil, nil, 94, 84, 87, - 88, nil, 89, 91, 90, 92, nil, nil, nil, nil, - 85, 93, nil, nil, nil, 75, 76, 77, 63, 58, - 86, 98, 99, 64, 65, nil, nil, nil, 68, nil, - 66, 67, 69, 318, 319, 73, 74, nil, nil, nil, - nil, nil, 78, 315, 321, 106, 105, 107, 108, nil, - nil, 238, nil, nil, nil, nil, nil, nil, 316, nil, - nil, 110, 109, 111, 100, 57, 102, 101, 103, nil, - 104, 112, 113, nil, 96, 97, nil, nil, 322, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 922, nil, - nil, 237, nil, nil, 59, 60, nil, nil, 61, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 94, 84, - 87, 88, nil, 89, 91, 90, 92, nil, nil, nil, - nil, 85, 93, nil, nil, nil, 75, 76, 77, 63, - 58, 86, 98, 99, 64, 65, nil, nil, nil, 68, - nil, 66, 67, 69, 318, 319, 73, 74, nil, nil, - nil, nil, nil, 78, 315, 321, 106, 105, 107, 108, - nil, nil, 238, nil, nil, nil, nil, nil, nil, 316, - nil, nil, 110, 109, 111, 100, 57, 102, 101, 103, - nil, 104, 112, 113, nil, 96, 97, nil, nil, 322, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 928, - nil, nil, 237, nil, nil, 59, 60, nil, nil, 61, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 94, - 84, 87, 88, nil, 89, 91, 90, 92, nil, nil, - nil, nil, 85, 93, nil, nil, nil, 75, 76, 77, - 63, 58, 86, 98, 99, 64, 65, nil, nil, nil, - 68, nil, 66, 67, 69, 318, 319, 73, 74, nil, - nil, nil, nil, nil, 78, 315, 321, 106, 105, 107, - 108, nil, nil, 238, nil, nil, nil, nil, nil, nil, - 316, nil, nil, 110, 109, 111, 100, 57, 102, 101, - 103, nil, 104, 112, 113, nil, 96, 97, nil, nil, - 322, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 922, nil, nil, 237, nil, nil, 59, 60, nil, nil, - 61, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 94, 84, 87, 88, nil, 89, 91, 90, 92, nil, - nil, nil, nil, 85, 93, nil, nil, nil, 75, 76, - 77, 63, 58, 86, 98, 99, 64, 65, nil, nil, - nil, 68, nil, 66, 67, 69, 30, 31, 73, 74, - nil, nil, nil, nil, nil, 78, 28, 27, 106, 105, - 107, 108, nil, nil, 238, nil, nil, nil, nil, nil, - nil, 46, nil, nil, 110, 109, 111, 100, 57, 102, - 101, 103, 293, 104, 112, 113, nil, 96, 97, 42, - 43, 41, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 231, nil, nil, 237, nil, nil, 59, 60, nil, - nil, 61, nil, 290, nil, 288, nil, 45, nil, nil, - 294, nil, nil, nil, nil, nil, 236, nil, nil, nil, - nil, 94, 291, 87, 88, nil, 89, 91, 90, 92, - nil, nil, nil, nil, 85, 93, nil, nil, nil, nil, - nil, nil, 63, nil, 86, 98, 99, 179, 190, 180, - 203, 176, 196, 186, 185, 206, 207, 201, 184, 183, - 178, 204, 208, 209, 188, 177, 191, 195, 197, 189, - 182, nil, nil, nil, 198, 205, 200, 199, 192, 202, - 187, 175, 194, 193, nil, nil, nil, nil, nil, 174, - 181, 172, 173, 169, 170, 171, 130, 132, 129, nil, - 131, nil, nil, nil, nil, nil, nil, nil, 163, 164, - nil, 160, 142, 143, 144, 151, 148, 150, nil, nil, - 145, 146, nil, nil, nil, 165, 166, 152, 153, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 157, 156, nil, 141, 162, 159, 158, 167, - 154, 155, 149, 147, 139, 161, 140, nil, nil, 168, - 94, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 93, 179, 190, 180, 203, 176, - 196, 186, 185, 206, 207, 201, 184, 183, 178, 204, - 208, 209, 188, 177, 191, 195, 197, 189, 182, nil, - nil, nil, 198, 205, 200, 199, 192, 202, 187, 175, - 194, 193, nil, nil, nil, nil, nil, 174, 181, 172, - 173, 169, 170, 171, 130, 132, nil, nil, 131, nil, - nil, nil, nil, nil, nil, nil, 163, 164, nil, 160, - 142, 143, 144, 151, 148, 150, nil, nil, 145, 146, - nil, nil, nil, 165, 166, 152, 153, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 157, 156, nil, 141, 162, 159, 158, 167, 154, 155, - 149, 147, 139, 161, 140, nil, nil, 168, 94, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 93, 179, 190, 180, 203, 176, 196, 186, - 185, 206, 207, 201, 184, 183, 178, 204, 208, 209, - 188, 177, 191, 195, 197, 189, 182, nil, nil, nil, - 198, 205, 200, 199, 192, 202, 187, 175, 194, 193, - nil, nil, nil, nil, nil, 174, 181, 172, 173, 169, - 170, 171, 130, 132, nil, nil, 131, nil, nil, nil, - nil, nil, nil, nil, 163, 164, nil, 160, 142, 143, - 144, 151, 148, 150, nil, nil, 145, 146, nil, nil, - nil, 165, 166, 152, 153, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 157, 156, - nil, 141, 162, 159, 158, 167, 154, 155, 149, 147, - 139, 161, 140, nil, nil, 168, 94, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 93, 179, 190, 180, 203, 176, 196, 186, 185, 206, - 207, 201, 184, 183, 178, 204, 208, 209, 188, 177, - 191, 195, 197, 189, 182, nil, nil, nil, 198, 205, - 200, 199, 192, 202, 187, 175, 194, 193, nil, nil, - nil, nil, nil, 174, 181, 172, 173, 169, 170, 171, - 130, 132, nil, nil, 131, nil, nil, nil, nil, nil, - nil, nil, 163, 164, nil, 160, 142, 143, 144, 151, - 148, 150, nil, nil, 145, 146, nil, nil, nil, 165, - 166, 152, 153, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 157, 156, nil, 141, - 162, 159, 158, 167, 154, 155, 149, 147, 139, 161, - 140, nil, nil, 168, 94, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 93, 179, - 190, 180, 203, 176, 196, 186, 185, 206, 207, 201, - 184, 183, 178, 204, 208, 209, 188, 177, 191, 195, - 197, 189, 182, nil, nil, nil, 198, 205, 200, 381, - 380, 382, 379, 175, 194, 193, nil, nil, nil, nil, - nil, 174, 181, 172, 173, 376, 377, 378, 374, 132, - 102, 101, 375, nil, 104, nil, nil, nil, nil, nil, - 163, 164, nil, 160, 142, 143, 144, 151, 148, 150, - nil, nil, 145, 146, nil, nil, nil, 165, 166, 152, - 153, nil, nil, nil, nil, nil, 386, nil, nil, nil, - nil, nil, nil, nil, 157, 156, nil, 141, 162, 159, - 158, 167, 154, 155, 149, 147, 139, 161, 140, nil, - nil, 168, 179, 190, 180, 203, 176, 196, 186, 185, - 206, 207, 201, 184, 183, 178, 204, 208, 209, 188, - 177, 191, 195, 197, 189, 182, nil, nil, nil, 198, - 205, 200, 199, 192, 202, 187, 175, 194, 193, nil, - nil, nil, nil, nil, 174, 181, 172, 173, 169, 170, - 171, 130, 132, nil, nil, 131, nil, nil, nil, nil, - nil, nil, nil, 163, 164, nil, 160, 142, 143, 144, - 151, 148, 150, nil, nil, 145, 146, nil, nil, nil, - 165, 166, 152, 153, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 157, 156, nil, - 141, 162, 159, 158, 167, 154, 155, 149, 147, 139, - 161, 140, 436, 440, 168, nil, 437, nil, nil, nil, - nil, nil, nil, nil, 163, 164, nil, 160, 142, 143, - 144, 151, 148, 150, nil, nil, 145, 146, nil, nil, - nil, 165, 166, 152, 153, nil, nil, nil, nil, nil, - 272, nil, nil, nil, nil, nil, nil, nil, 157, 156, - nil, 141, 162, 159, 158, 167, 154, 155, 149, 147, - 139, 161, 140, 443, 447, 168, nil, 442, nil, nil, - nil, nil, nil, nil, nil, 163, 164, nil, 160, 142, - 143, 144, 151, 148, 150, nil, nil, 145, 146, nil, - nil, nil, 165, 166, 152, 153, nil, nil, nil, nil, - nil, 272, nil, nil, nil, nil, nil, nil, nil, 157, - 156, nil, 141, 162, 159, 158, 167, 154, 155, 149, - 147, 139, 161, 140, 487, 440, 168, nil, 488, nil, - nil, nil, nil, nil, nil, nil, 163, 164, nil, 160, - 142, 143, 144, 151, 148, 150, nil, nil, 145, 146, - nil, nil, nil, 165, 166, 152, 153, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 157, 156, nil, 141, 162, 159, 158, 167, 154, 155, - 149, 147, 139, 161, 140, 622, 440, 168, nil, 623, - nil, nil, nil, nil, nil, nil, nil, 163, 164, nil, - 160, 142, 143, 144, 151, 148, 150, nil, nil, 145, - 146, nil, nil, nil, 165, 166, 152, 153, nil, nil, - nil, nil, nil, 272, nil, nil, nil, nil, nil, nil, - nil, 157, 156, nil, 141, 162, 159, 158, 167, 154, - 155, 149, 147, 139, 161, 140, 624, 447, 168, nil, - 625, nil, nil, nil, nil, nil, nil, nil, 163, 164, - nil, 160, 142, 143, 144, 151, 148, 150, nil, nil, - 145, 146, nil, nil, nil, 165, 166, 152, 153, nil, - nil, nil, nil, nil, 272, nil, nil, nil, nil, nil, - nil, nil, 157, 156, nil, 141, 162, 159, 158, 167, - 154, 155, 149, 147, 139, 161, 140, 651, 440, 168, - nil, 652, nil, nil, nil, nil, nil, nil, nil, 163, - 164, nil, 160, 142, 143, 144, 151, 148, 150, nil, - nil, 145, 146, nil, nil, nil, 165, 166, 152, 153, - nil, nil, nil, nil, nil, 272, nil, nil, nil, nil, - nil, nil, nil, 157, 156, nil, 141, 162, 159, 158, - 167, 154, 155, 149, 147, 139, 161, 140, 654, 447, - 168, nil, 655, nil, nil, nil, nil, nil, nil, nil, - 163, 164, nil, 160, 142, 143, 144, 151, 148, 150, - nil, nil, 145, 146, nil, nil, nil, 165, 166, 152, - 153, nil, nil, nil, nil, nil, 272, nil, nil, nil, - nil, nil, nil, nil, 157, 156, nil, 141, 162, 159, - 158, 167, 154, 155, 149, 147, 139, 161, 140, 622, - 440, 168, nil, 623, nil, nil, nil, nil, nil, nil, - nil, 163, 164, nil, 160, 142, 143, 144, 151, 148, - 150, nil, nil, 145, 146, nil, nil, nil, 165, 166, - 152, 153, nil, nil, nil, nil, nil, 272, nil, nil, - nil, nil, nil, nil, nil, 157, 156, nil, 141, 162, - 159, 158, 167, 154, 155, 149, 147, 139, 161, 140, - 624, 447, 168, nil, 625, nil, nil, nil, nil, nil, - nil, nil, 163, 164, nil, 160, 142, 143, 144, 151, - 148, 150, nil, nil, 145, 146, nil, nil, nil, 165, - 166, 152, 153, nil, nil, nil, nil, nil, 272, nil, - nil, nil, nil, nil, nil, nil, 157, 156, nil, 141, - 162, 159, 158, 167, 154, 155, 149, 147, 139, 161, - 140, 713, 440, 168, nil, 714, nil, nil, nil, nil, - nil, nil, nil, 163, 164, nil, 160, 142, 143, 144, - 151, 148, 150, nil, nil, 145, 146, nil, nil, nil, - 165, 166, 152, 153, nil, nil, nil, nil, nil, 272, - nil, nil, nil, nil, nil, nil, nil, 157, 156, nil, - 141, 162, 159, 158, 167, 154, 155, 149, 147, 139, - 161, 140, 715, 447, 168, nil, 716, nil, nil, nil, - nil, nil, nil, nil, 163, 164, nil, 160, 142, 143, - 144, 151, 148, 150, nil, nil, 145, 146, nil, nil, - nil, 165, 166, 152, 153, nil, nil, nil, nil, nil, - 272, nil, nil, nil, nil, nil, nil, nil, 157, 156, - nil, 141, 162, 159, 158, 167, 154, 155, 149, 147, - 139, 161, 140, 718, 447, 168, nil, 719, nil, nil, - nil, nil, nil, nil, nil, 163, 164, nil, 160, 142, - 143, 144, 151, 148, 150, nil, nil, 145, 146, nil, - nil, nil, 165, 166, 152, 153, nil, nil, nil, nil, - nil, 272, nil, nil, nil, nil, nil, nil, nil, 157, - 156, nil, 141, 162, 159, 158, 167, 154, 155, 149, - 147, 139, 161, 140, 487, 440, 168, nil, 488, nil, - nil, nil, nil, nil, nil, nil, 163, 164, nil, 160, - 142, 143, 144, 151, 148, 150, nil, nil, 145, 146, - nil, nil, nil, 165, 166, 152, 153, nil, nil, nil, - nil, nil, 272, nil, nil, nil, nil, nil, nil, nil, - 157, 156, nil, 141, 162, 159, 158, 167, 154, 155, - 149, 147, 139, 161, 140, 747, 440, 168, nil, 748, - nil, nil, nil, nil, nil, nil, nil, 163, 164, nil, - 160, 142, 143, 144, 151, 148, 150, nil, nil, 145, - 146, nil, nil, nil, 165, 166, 152, 153, nil, nil, - nil, nil, nil, 272, nil, nil, nil, nil, nil, nil, - nil, 157, 156, nil, 141, 162, 159, 158, 167, 154, - 155, 149, 147, 139, 161, 140, 750, 447, 168, nil, - 749, nil, nil, nil, nil, nil, nil, nil, 163, 164, - nil, 160, 142, 143, 144, 151, 148, 150, nil, nil, - 145, 146, nil, nil, nil, 165, 166, 152, 153, nil, - nil, nil, nil, nil, 272, nil, nil, nil, nil, nil, - nil, nil, 157, 156, nil, 141, 162, 159, 158, 167, - 154, 155, 149, 147, 139, 161, 140, 1002, 447, 168, - nil, 1001, nil, nil, nil, nil, nil, nil, nil, 163, - 164, nil, 160, 142, 143, 144, 151, 148, 150, nil, - nil, 145, 146, nil, nil, nil, 165, 166, 152, 153, - nil, nil, nil, nil, nil, 272, nil, nil, nil, nil, - nil, nil, nil, 157, 156, nil, 141, 162, 159, 158, - 167, 154, 155, 149, 147, 139, 161, 140, 1005, 440, - 168, nil, 1006, nil, nil, nil, nil, nil, nil, nil, - 163, 164, nil, 160, 142, 143, 144, 151, 148, 150, - nil, nil, 145, 146, nil, nil, nil, 165, 166, 152, - 153, nil, nil, nil, nil, nil, 272, nil, nil, nil, - nil, nil, nil, nil, 157, 156, nil, 141, 162, 159, - 158, 167, 154, 155, 149, 147, 139, 161, 140, 1007, - 447, 168, nil, 1008, nil, nil, nil, nil, nil, nil, - nil, 163, 164, nil, 160, 142, 143, 144, 151, 148, - 150, nil, nil, 145, 146, nil, nil, nil, 165, 166, - 152, 153, nil, nil, nil, nil, nil, 272, nil, nil, - nil, nil, nil, nil, nil, 157, 156, nil, 141, 162, - 159, 158, 167, 154, 155, 149, 147, 139, 161, 140, - nil, 683, 168, 680, 679, 678, 688, 681, nil, 683, - nil, 680, 679, 678, 688, 681, 691, nil, nil, nil, - nil, nil, nil, nil, 691, nil, 683, nil, 680, 679, - 678, 688, 681, nil, nil, nil, nil, nil, 686, 669, - nil, 691, nil, nil, nil, nil, 686, 696, 695, 699, - 698, nil, nil, nil, 692, 696, 695, 699, 698, nil, - nil, nil, 692, 686, nil, 683, nil, 680, 679, 678, - 688, 681, 696, 695, 699, 698, nil, nil, nil, 692, - 691, nil, 683, nil, 680, 679, 678, 688, 681, nil, - 683, nil, 680, 679, 678, 688, 681, 691, nil, nil, - nil, nil, 686, nil, nil, 691, nil, nil, nil, nil, - nil, 696, 695, 699, 698, nil, nil, nil, 692, 686, - nil, nil, nil, nil, nil, nil, nil, 686, 696, 695, - 699, 698, nil, nil, nil, 692, 696, 695, 699, 698, - nil, nil, 683, 692, 680, 679, 678, 688, 681, nil, - 683, nil, 680, 679, 678, 688, 681, 691, nil, nil, - nil, nil, nil, nil, nil, 691, nil, 683, nil, 680, - 679, 678, 688, 681, nil, nil, nil, nil, nil, 686, - nil, nil, 691, nil, nil, nil, nil, 686, 696, 695, - 699, 698, nil, nil, nil, 692, 696, 695, 699, 698, - nil, nil, nil, 692, 686, nil, 683, nil, 680, 679, - 678, 688, 681, 696, 695, 699, 698, nil, nil, nil, - 692, 691, nil, 683, nil, 680, 679, 678, 688, 681, - 683, nil, 680, 679, 678, 688, 681, nil, 691, nil, - nil, nil, nil, 686, nil, 691, nil, 683, nil, 680, - 679, 678, 688, 681, 699, 698, nil, nil, nil, 692, - 686, nil, 691, nil, nil, nil, nil, 686, nil, 696, - 695, 699, 698, nil, nil, nil, 692, nil, 699, 698, - nil, nil, nil, 692, 686, nil, 683, nil, 680, 679, - 678, 688, 681, nil, nil, 699, 698, nil, nil, nil, - 692, 691, nil, 683, nil, 680, 679, 678, 688, 681, - 683, nil, 680, 679, 678, 688, 681, nil, 691, nil, - nil, nil, nil, 686, nil, 691, nil, nil, nil, nil, - nil, nil, nil, nil, 699, 698, nil, nil, nil, 692, - 686, nil, nil, nil, nil, nil, nil, 686, nil, nil, - nil, 699, 698, nil, nil, nil, 692, nil, 699, 698, - nil, nil, nil, 692 ] - -racc_action_check = [ - 100, 452, 452, 575, 575, 17, 355, 100, 100, 100, - 1, 347, 100, 100, 100, 24, 100, 26, 19, 393, - 44, 44, 24, 348, 100, 394, 100, 100, 100, 62, - 365, 631, 229, 7, 365, 356, 100, 100, 711, 100, - 100, 100, 100, 100, 868, 894, 925, 926, 929, 359, - 646, 561, 17, 897, 976, 897, 44, 44, 317, 19, - 646, 10, 17, 12, 713, 714, 100, 100, 100, 100, - 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, - 24, 26, 100, 100, 100, 393, 100, 100, 552, 229, - 100, 394, 798, 100, 100, 452, 100, 575, 100, 13, - 100, 15, 100, 100, 26, 100, 100, 100, 100, 100, - 1005, 100, 103, 100, 1006, 355, 62, 828, 631, 103, - 103, 103, 317, 1007, 103, 103, 103, 100, 103, 347, - 100, 100, 100, 100, 347, 100, 103, 100, 103, 103, - 103, 348, 100, 100, 356, 317, 348, 651, 103, 103, - 1008, 103, 103, 103, 103, 103, 711, 1025, 359, 711, - 561, 711, 868, 894, 925, 926, 929, 868, 894, 925, - 926, 929, 976, 713, 714, 715, 635, 976, 103, 103, - 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, - 103, 103, 552, 22, 103, 103, 103, 552, 103, 103, - 1007, 798, 103, 37, 652, 103, 103, 40, 103, 716, - 103, 635, 103, 651, 103, 103, 46, 103, 103, 103, - 103, 103, 442, 103, 114, 103, 828, 1008, 1005, 442, - 442, 442, 1006, 1005, 773, 442, 442, 1006, 442, 103, - 715, 1007, 103, 103, 103, 103, 1007, 103, 210, 103, - 661, 661, 230, 651, 103, 103, 651, 231, 442, 442, - 787, 442, 442, 442, 442, 442, 651, 233, 1008, 773, - 652, 374, 654, 1008, 716, 1025, 14, 14, 374, 815, - 1025, 815, 815, 815, 715, 815, 571, 571, 442, 442, - 442, 442, 442, 442, 442, 442, 442, 442, 442, 442, - 442, 442, 234, 232, 442, 442, 442, 375, 442, 230, - 652, 38, 442, 652, 375, 442, 41, 41, 716, 586, - 442, 238, 442, 652, 442, 442, 787, 442, 442, 442, - 442, 442, 376, 442, 443, 442, 374, 654, 654, 376, - 129, 443, 443, 443, 661, 129, 129, 443, 443, 442, - 443, 3, 442, 442, 271, 442, 3, 442, 38, 443, - 232, 815, 346, 346, 442, 442, 787, 363, 38, 787, - 443, 443, 375, 443, 443, 443, 443, 443, 654, 787, - 571, 654, 285, 586, 586, 571, 946, 388, 946, 946, - 946, 654, 946, 586, 41, 41, 286, 376, 588, 421, - 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, - 443, 443, 443, 443, 458, 289, 443, 443, 443, 363, - 443, 322, 322, 504, 443, 297, 363, 443, 352, 622, - 297, 363, 443, 352, 443, 363, 443, 443, 39, 443, - 443, 443, 443, 443, 623, 443, 443, 443, 389, 301, - 377, 388, 388, 388, 363, 390, 421, 377, 302, 364, - 391, 443, 588, 588, 443, 443, 624, 443, 946, 443, - 304, 458, 588, 624, 624, 624, 443, 443, 624, 624, - 624, 305, 624, 306, 363, 39, 622, 504, 504, 504, - 378, 624, 624, 624, 624, 39, 312, 378, 315, 322, - 322, 623, 624, 624, 504, 624, 624, 624, 624, 624, - 326, 364, 389, 389, 389, 377, 392, 316, 364, 390, - 390, 390, 395, 364, 391, 391, 391, 364, 338, 701, - 701, 338, 624, 624, 624, 624, 624, 624, 624, 624, - 624, 624, 624, 624, 624, 624, 364, 321, 624, 624, - 624, 323, 624, 624, 16, 378, 624, 326, 379, 624, - 624, 16, 624, 327, 624, 379, 624, 326, 624, 624, - 16, 624, 624, 624, 624, 624, 364, 624, 624, 624, - 392, 392, 392, 380, 47, 381, 395, 395, 395, 464, - 380, 47, 381, 624, 330, 436, 624, 624, 624, 624, - 47, 624, 747, 624, 625, 748, 770, 437, 624, 624, - 832, 625, 625, 625, 336, 832, 625, 625, 625, 16, - 625, 464, 340, 379, 341, 464, 464, 382, 384, 465, - 625, 625, 625, 339, 382, 384, 339, 343, 607, 841, - 625, 625, 436, 625, 625, 625, 625, 625, 380, 47, - 381, 228, 436, 309, 437, 803, 803, 353, 228, 747, - 309, 465, 748, 770, 437, 465, 465, 228, 354, 309, - 625, 625, 625, 625, 625, 625, 625, 625, 625, 625, - 625, 625, 625, 625, 837, 607, 625, 625, 625, 837, - 625, 625, 382, 384, 625, 607, 841, 625, 625, 358, - 625, 360, 625, 369, 625, 342, 625, 625, 342, 625, - 625, 625, 625, 625, 749, 625, 228, 625, 309, 987, - 987, 749, 749, 749, 404, 410, 667, 749, 749, 667, - 749, 625, 472, 413, 625, 625, 625, 625, 415, 625, - 82, 625, 718, 418, 422, 432, 625, 625, 472, 472, - 749, 749, 82, 749, 749, 749, 749, 749, 965, 310, - 434, 965, 82, 311, 472, 435, 310, 444, 472, 472, - 311, 472, 472, 454, 466, 310, 467, 468, 469, 311, - 749, 749, 749, 749, 749, 749, 749, 749, 749, 749, - 749, 749, 749, 749, 718, 313, 749, 749, 749, 491, - 749, 718, 313, 495, 749, 511, 718, 749, 512, 515, - 718, 313, 749, 517, 749, 522, 749, 749, 525, 749, - 749, 749, 749, 749, 310, 749, 750, 749, 311, 718, - 534, 535, 536, 750, 750, 750, 800, 537, 549, 750, - 750, 749, 750, 553, 749, 749, 800, 749, 328, 749, - 554, 750, 555, 556, 573, 328, 749, 749, 583, 718, - 313, 591, 750, 750, 328, 750, 750, 750, 750, 750, - 891, 357, 891, 891, 891, 593, 891, 599, 357, 800, - 800, 608, 613, 618, 800, 579, 579, 357, 626, 579, - 579, 579, 750, 750, 750, 750, 750, 750, 750, 750, - 750, 750, 750, 750, 750, 750, 627, 891, 750, 750, - 750, 367, 750, 328, 420, 628, 750, 630, 367, 750, - 634, 420, 636, 638, 750, 640, 750, 367, 750, 750, - 420, 750, 750, 750, 750, 750, 357, 750, 750, 750, - 779, 648, 779, 779, 779, 779, 779, 521, 6, 6, - 6, 6, 6, 750, 521, 779, 750, 750, 27, 750, - 650, 750, 653, 521, 656, 27, 27, 27, 750, 750, - 27, 27, 27, 657, 27, 660, 367, 779, 662, 420, - 671, 479, 672, 27, 27, 27, 779, 779, 779, 779, - 674, 675, 676, 779, 27, 27, 685, 27, 27, 27, - 27, 27, 947, 693, 947, 947, 947, 564, 947, 697, - 700, 703, 521, 479, 564, 709, 712, 479, 479, 779, - 479, 479, 721, 564, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 725, 947, - 27, 27, 27, 744, 746, 27, 755, 27, 27, 776, - 786, 27, 27, 790, 27, 793, 27, 794, 27, 799, - 27, 27, 814, 27, 27, 27, 27, 27, 28, 27, - 27, 27, 564, 816, 821, 28, 28, 28, 824, 829, - 28, 28, 28, 921, 28, 27, 831, 835, 27, 27, - 921, 27, 836, 27, 28, 28, 839, 840, 849, 921, - 27, 850, 852, 853, 28, 28, 854, 28, 28, 28, - 28, 28, 856, 857, 858, 655, 859, 719, 874, 875, - 879, 880, 655, 882, 719, 883, 885, 655, 888, 719, - 890, 655, 901, 719, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, 921, 905, - 28, 28, 28, 918, 922, 28, 928, 28, 28, 948, - 955, 28, 28, 958, 28, 959, 28, 960, 28, 961, - 28, 28, 963, 28, 28, 28, 28, 28, 57, 28, - 655, 28, 719, 972, 977, 57, 57, 57, 978, 979, - 57, 57, 57, 927, 57, 28, 980, 981, 28, 28, - 927, 28, 982, 28, 57, 57, 57, 983, 985, 927, - 28, 988, 1001, 1002, 57, 57, 1004, 57, 57, 57, - 57, 57, 919, 969, 919, 919, 919, 1017, 919, 686, - 969, 686, 686, 686, 1000, 686, 1000, 1000, 1000, 969, - 1000, 1020, 1021, 1022, 57, 57, 57, 57, 57, 57, - 57, 57, 57, 57, 57, 57, 57, 57, 927, 908, - 57, 57, 57, 1023, 1026, 57, 686, 1027, 57, 908, - 1034, 57, 57, nil, 57, 686, 57, nil, 57, nil, - 57, 57, nil, 57, 57, 57, 57, 57, 969, 57, - nil, 57, 812, nil, 812, 812, 812, nil, 812, nil, - nil, nil, 908, 908, nil, 57, nil, 908, 57, 57, - 57, 57, nil, 57, 438, 57, nil, nil, nil, nil, - 57, 438, 438, 438, nil, nil, 438, 438, 438, 812, - 438, 889, nil, 889, 889, 889, nil, 889, 812, 438, - 438, 438, 984, nil, 984, 984, 984, nil, 984, nil, - 438, 438, nil, 438, 438, 438, 438, 438, 986, nil, - 986, 986, 986, 1016, 986, 1016, 1016, 1016, 889, 1016, - 300, 300, 300, 300, 300, nil, nil, 889, nil, 984, - 438, 438, 438, 438, 438, 438, 438, 438, 438, 438, - 438, 438, 438, 438, nil, 986, 438, 438, 438, nil, - 1016, 438, nil, 438, 438, nil, nil, 438, 438, nil, - 438, nil, 438, nil, 438, nil, 438, 438, nil, 438, - 438, 438, 438, 438, nil, 438, 438, 438, 808, nil, - 808, 808, 808, 808, 808, 335, 335, 335, 335, 335, - nil, 438, nil, 808, 438, 438, 447, 438, nil, 438, - nil, nil, nil, 447, 447, 447, 438, nil, 447, 447, - 447, nil, 447, 484, nil, 808, 509, 509, 509, 509, - 509, 447, 447, 447, 447, nil, 808, 808, nil, 484, - 484, 808, 447, 447, nil, 447, 447, 447, 447, 447, - nil, nil, nil, nil, nil, 484, nil, 484, nil, 484, - 484, nil, 484, 484, nil, nil, 484, nil, 484, nil, - nil, nil, 447, 447, 447, 447, 447, 447, 447, 447, - 447, 447, 447, 447, 447, 447, nil, nil, 447, 447, - 447, 480, nil, 447, nil, nil, 447, nil, nil, 447, - 447, nil, 447, nil, 447, nil, 447, nil, 447, 447, - nil, 447, 447, 447, 447, 447, nil, 447, 447, 447, - nil, nil, nil, 480, nil, nil, nil, 480, 480, nil, - 480, 480, nil, 447, nil, nil, 447, 447, 447, 447, - nil, 447, 448, 447, nil, nil, nil, nil, 447, 448, - 448, 448, nil, nil, 448, 448, 448, 531, 448, nil, - nil, nil, nil, nil, nil, nil, nil, 448, 448, 448, - 448, nil, nil, 531, 531, nil, nil, nil, 448, 448, - nil, 448, 448, 448, 448, 448, nil, nil, nil, 531, - nil, 531, nil, 531, 531, nil, 531, 531, nil, nil, - 531, nil, 531, nil, nil, nil, nil, nil, 448, 448, - 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, - 448, 448, nil, nil, 448, 448, 448, nil, nil, 448, - nil, nil, 448, nil, nil, 448, 448, nil, 448, nil, - 448, nil, 448, nil, 448, 448, nil, 448, 448, 448, - 448, 448, nil, 448, 448, 448, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 448, - nil, nil, 448, 448, 448, 448, nil, 448, 486, 448, - nil, nil, nil, nil, 448, 486, 486, 486, nil, nil, - 486, 486, 486, 470, 486, nil, nil, nil, nil, nil, - nil, nil, nil, 486, 486, nil, nil, nil, nil, 470, - 470, nil, nil, nil, 486, 486, nil, 486, 486, 486, - 486, 486, nil, nil, nil, 470, nil, 470, nil, 470, - 470, nil, 470, 470, nil, nil, nil, 21, 21, 21, - 21, 21, 21, 21, 21, 21, 21, 21, nil, 21, - 21, nil, nil, 21, 21, 486, nil, nil, nil, nil, - nil, nil, 486, nil, nil, nil, nil, 486, 486, 21, - nil, 21, nil, 21, 21, nil, 21, 21, 21, 21, - 21, nil, 21, nil, nil, nil, nil, nil, nil, nil, - 486, 486, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 21, nil, nil, 486, nil, nil, 486, nil, - nil, nil, nil, 486, 0, 0, 0, 0, 0, 0, - 486, nil, nil, 0, 0, nil, nil, nil, 0, nil, - 0, 0, 0, 0, 0, 0, 0, nil, nil, nil, - nil, nil, 0, 0, 0, 0, 0, 0, 0, nil, - nil, 0, nil, nil, nil, nil, 425, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, nil, - 0, 0, 0, nil, 0, 0, 0, 0, 0, 425, - 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, - nil, 425, 425, nil, nil, 425, 425, nil, 0, nil, - nil, 0, nil, nil, 0, 0, nil, nil, 0, nil, - 0, 425, nil, 425, 0, 425, 425, nil, 425, 425, - 425, 425, 425, 0, 425, nil, nil, nil, 0, 0, - 0, 0, nil, 0, 0, 0, 0, nil, nil, nil, - nil, 0, 0, nil, 425, nil, 425, nil, nil, 0, - nil, 0, 0, 0, 33, 33, 33, 33, 33, 33, - nil, nil, nil, 33, 33, nil, nil, nil, 33, nil, - 33, 33, 33, 33, 33, 33, 33, nil, nil, nil, - nil, nil, 33, 33, 33, 33, 33, 33, 33, nil, - nil, 33, nil, nil, nil, nil, 431, 33, 33, 33, - 33, 33, 33, 33, 33, 33, 33, 33, 33, nil, - 33, 33, 33, nil, 33, 33, 33, 33, 33, 431, - 431, 431, 431, 431, 431, 431, 431, 431, 431, 431, - nil, 431, 431, nil, nil, 431, 431, nil, 33, nil, - nil, 33, nil, nil, 33, 33, nil, nil, 33, nil, - 33, 431, nil, 431, 33, 431, 431, nil, 431, 431, - 431, 431, 431, 33, 431, nil, nil, nil, 33, 33, - 33, 33, nil, 33, 33, 33, 33, nil, nil, nil, - nil, 33, 33, nil, 431, nil, nil, nil, nil, 33, - nil, 33, 33, 33, 127, 127, 127, 127, 127, 127, - nil, nil, nil, 127, 127, nil, nil, nil, 127, nil, - 127, 127, 127, 127, 127, 127, 127, nil, nil, nil, - nil, nil, 127, 127, 127, 127, 127, 127, 127, nil, - nil, 127, nil, nil, nil, nil, nil, 127, 127, 127, - 127, 127, 127, 127, 127, 127, 127, 127, 127, nil, - 127, 127, 127, nil, 127, 127, 127, 127, 127, 283, - 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, - nil, 283, 283, nil, nil, 283, 283, nil, 127, nil, - nil, 127, nil, nil, 127, 127, nil, nil, 127, nil, - 127, 283, nil, 283, 127, 283, 283, nil, 283, 283, - 283, 283, 283, 127, 283, nil, nil, nil, 127, 127, - 127, 127, nil, 127, 127, 127, 127, nil, nil, nil, - nil, 127, 127, nil, 283, nil, nil, nil, nil, 127, - nil, 127, 127, 127, 212, 212, 212, 212, 212, 212, - nil, nil, nil, 212, 212, nil, nil, nil, 212, nil, - 212, 212, 212, 212, 212, 212, 212, nil, nil, nil, - nil, nil, 212, 212, 212, 212, 212, 212, 212, nil, - nil, 212, nil, nil, nil, nil, nil, 212, 212, 212, - 212, 212, 212, 212, 212, 212, 212, 212, 212, nil, - 212, 212, 212, nil, 212, 212, 212, 212, 212, 483, - 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, - nil, 483, 483, nil, nil, 483, 483, nil, 212, nil, - nil, 212, nil, nil, 212, 212, nil, nil, 212, nil, - 212, 483, nil, 483, 212, 483, 483, nil, 483, 483, - 483, 483, 483, 212, 483, nil, nil, nil, 212, 212, - 212, 212, nil, 212, 212, 212, 212, nil, nil, nil, - nil, 212, 212, 483, 483, nil, nil, nil, nil, 212, - nil, 212, 212, 212, 237, 237, 237, 237, 237, 237, - nil, nil, nil, 237, 237, nil, nil, nil, 237, nil, - 237, 237, 237, 237, 237, 237, 237, nil, nil, nil, - nil, nil, 237, 237, 237, 237, 237, 237, 237, nil, - nil, 237, nil, nil, nil, nil, nil, 237, 237, 237, - 237, 237, 237, 237, 237, 237, 237, 237, 237, nil, - 237, 237, 237, nil, 237, 237, 237, 237, 237, 532, - 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, - nil, 532, 532, nil, nil, 532, 532, nil, 237, nil, - nil, 237, nil, nil, 237, 237, nil, nil, 237, nil, - 237, 532, nil, 532, 237, 532, 532, nil, 532, 532, - 532, 532, 532, 237, 532, nil, nil, nil, 237, 237, - 237, 237, nil, 237, 237, 237, 237, nil, nil, nil, - nil, 237, 237, nil, 532, nil, nil, nil, nil, 237, - nil, 237, 237, 237, 303, 303, 303, 303, 303, 303, - nil, nil, nil, 303, 303, nil, nil, nil, 303, nil, - 303, 303, 303, 303, 303, 303, 303, nil, nil, nil, - nil, nil, 303, 303, 303, 303, 303, 303, 303, nil, - nil, 303, nil, nil, nil, nil, nil, 303, 303, 303, - 303, 303, 303, 303, 303, 303, 303, 303, 303, nil, - 303, 303, 303, nil, 303, 303, 303, 303, 303, 752, - 752, 752, 752, 752, 752, 752, 752, 752, 752, 752, - nil, 752, 752, nil, nil, 752, 752, nil, 303, nil, - nil, 303, nil, nil, 303, 303, nil, nil, 303, nil, - 303, 752, nil, 752, 303, 752, 752, nil, 752, 752, - 752, 752, 752, 303, 752, nil, nil, nil, 303, 303, - 303, 303, nil, 303, 303, 303, 303, nil, nil, nil, - nil, 303, 303, nil, 752, nil, nil, nil, nil, 303, - nil, 303, 303, 303, 308, 308, 308, 308, 308, 308, - nil, nil, nil, 308, 308, nil, nil, nil, 308, nil, - 308, 308, 308, 308, 308, 308, 308, nil, nil, nil, - nil, nil, 308, 308, 308, 308, 308, 308, 308, nil, - nil, 308, nil, nil, nil, nil, nil, 308, 308, 308, - 308, 308, 308, 308, 308, 308, 308, 308, 308, nil, - 308, 308, 308, nil, 308, 308, 308, 308, 308, 846, - 846, 846, 846, 846, 846, 846, 846, 846, 846, 846, - nil, 846, 846, nil, nil, 846, 846, nil, 308, nil, - nil, 308, nil, nil, 308, 308, nil, nil, 308, nil, - 308, 846, nil, 846, 308, 846, 846, nil, 846, 846, - 846, 846, 846, 308, 846, nil, nil, nil, 308, 308, - 308, 308, nil, 308, 308, 308, 308, nil, nil, nil, - nil, 308, 308, nil, 846, nil, nil, nil, nil, 308, - nil, 308, 308, 308, 334, 334, 334, 334, 334, 334, - nil, nil, nil, 334, 334, nil, nil, nil, 334, nil, - 334, 334, 334, 334, 334, 334, 334, nil, nil, nil, - nil, nil, 334, 334, 334, 334, 334, 334, 334, nil, - nil, 334, nil, nil, nil, nil, nil, 334, 334, 334, - 334, 334, 334, 334, 334, 334, 334, 334, 334, nil, - 334, 334, 334, nil, 334, 334, 334, 334, 334, 462, - 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, - nil, 462, 462, nil, nil, 462, 462, nil, 334, nil, - nil, 334, nil, nil, 334, 334, nil, nil, 334, nil, - 334, 462, nil, 462, 334, 462, 462, nil, 462, 462, - 462, 462, 462, 334, 462, nil, nil, nil, 334, 334, - 334, 334, nil, 334, 334, 334, 334, nil, nil, nil, - nil, 334, 334, nil, nil, nil, nil, nil, nil, 334, - nil, 334, 334, 334, 350, 350, 350, 350, 350, 350, - nil, nil, nil, 350, 350, nil, nil, nil, 350, nil, - 350, 350, 350, 350, 350, 350, 350, nil, nil, nil, - nil, nil, 350, 350, 350, 350, 350, 350, 350, nil, - nil, 350, nil, nil, nil, nil, nil, 350, 350, 350, - 350, 350, 350, 350, 350, 350, 350, 350, 350, nil, - 350, 350, 350, nil, 350, 350, 350, 350, 350, 463, - 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, - nil, 463, 463, nil, nil, 463, 463, nil, 350, nil, - nil, 350, nil, nil, 350, 350, nil, nil, 350, nil, - 350, 463, nil, 463, 350, 463, 463, nil, 463, 463, - 463, 463, 463, 350, 463, nil, nil, nil, 350, 350, - 350, 350, nil, 350, 350, 350, 350, nil, nil, nil, - nil, 350, 350, nil, nil, nil, nil, nil, nil, 350, - nil, 350, 350, 350, 351, 351, 351, 351, 351, 351, - nil, nil, nil, 351, 351, nil, nil, nil, 351, nil, - 351, 351, 351, 351, 351, 351, 351, nil, nil, nil, - nil, nil, 351, 351, 351, 351, 351, 351, 351, nil, - nil, 351, nil, nil, nil, nil, nil, 351, 351, 351, - 351, 351, 351, 351, 351, 351, 351, 351, 351, nil, - 351, 351, 351, nil, 351, 351, 351, 351, 351, 473, - 473, 473, 473, 473, 473, 473, nil, nil, 473, 473, - nil, nil, nil, nil, nil, 473, 473, nil, 351, nil, - nil, 351, nil, nil, 351, 351, nil, nil, 351, nil, - 351, 473, nil, 473, 351, 473, 473, nil, 473, 473, - 473, 473, 473, 351, 473, nil, nil, nil, 351, 351, - 351, 351, nil, 351, 351, 351, 351, nil, nil, nil, - nil, 351, 351, nil, nil, nil, nil, nil, nil, 351, - nil, 351, 351, 351, 548, 548, 548, 548, 548, 548, - nil, nil, nil, 548, 548, nil, nil, nil, 548, nil, - 548, 548, 548, 548, 548, 548, 548, nil, nil, nil, - nil, nil, 548, 548, 548, 548, 548, 548, 548, nil, - nil, 548, nil, nil, nil, nil, nil, 548, 548, 548, - 548, 548, 548, 548, 548, 548, 548, 548, 548, nil, - 548, 548, 548, nil, 548, 548, 548, 548, 548, 474, - 474, 474, 474, 474, 474, 474, nil, nil, 474, 474, - nil, nil, nil, nil, nil, 474, 474, nil, 548, nil, - nil, 548, nil, nil, 548, 548, nil, nil, 548, nil, - 548, 474, nil, 474, 548, 474, 474, nil, 474, 474, - 474, 474, 474, 548, 474, nil, nil, nil, 548, 548, - 548, 548, nil, 548, 548, 548, 548, nil, nil, nil, - nil, 548, 548, nil, nil, nil, nil, nil, nil, 548, - nil, 548, 548, 548, 551, 551, 551, 551, 551, 551, - nil, nil, nil, 551, 551, nil, nil, nil, 551, nil, - 551, 551, 551, 551, 551, 551, 551, nil, nil, nil, - nil, nil, 551, 551, 551, 551, 551, 551, 551, nil, - nil, 551, nil, nil, nil, nil, nil, 551, 551, 551, - 551, 551, 551, 551, 551, 551, 551, 551, 551, nil, - 551, 551, 551, nil, 551, 551, 551, 551, 551, 475, - 475, 475, 475, 475, 475, 475, nil, nil, 475, 475, - nil, nil, nil, nil, nil, 475, 475, nil, 551, nil, - nil, 551, nil, nil, 551, 551, nil, nil, 551, nil, - 551, 475, nil, 475, 551, 475, 475, nil, 475, 475, - 475, 475, 475, 551, 475, nil, nil, nil, 551, 551, - 551, 551, nil, 551, 551, 551, 551, nil, nil, nil, - nil, 551, 551, nil, nil, nil, nil, nil, nil, 551, - nil, 551, 551, 551, 572, 572, 572, 572, 572, 572, - nil, nil, nil, 572, 572, nil, nil, nil, 572, nil, - 572, 572, 572, 572, 572, 572, 572, nil, nil, nil, - nil, nil, 572, 572, 572, 572, 572, 572, 572, nil, - nil, 572, nil, nil, nil, nil, nil, 572, 572, 572, - 572, 572, 572, 572, 572, 572, 572, 572, 572, nil, - 572, 572, 572, nil, 572, 572, 572, 572, 572, 476, - 476, 476, 476, 476, 476, 476, nil, nil, 476, 476, - nil, nil, nil, nil, nil, 476, 476, nil, 572, nil, - nil, 572, nil, nil, 572, 572, nil, nil, 572, nil, - 572, 476, nil, 476, 572, 476, 476, nil, 476, 476, - 476, 476, 476, 572, 476, nil, nil, nil, 572, 572, - 572, 572, nil, 572, 572, 572, 572, nil, nil, nil, - nil, 572, 572, nil, nil, nil, nil, nil, nil, 572, - nil, 572, 572, 572, 717, 717, 717, 717, 717, 717, - nil, nil, nil, 717, 717, nil, nil, nil, 717, nil, - 717, 717, 717, 717, 717, 717, 717, nil, nil, nil, - nil, nil, 717, 717, 717, 717, 717, 717, 717, nil, - nil, 717, nil, nil, nil, nil, nil, 717, 717, 717, - 717, 717, 717, 717, 717, 717, 717, 717, 717, nil, - 717, 717, 717, nil, 717, 717, 717, 717, 717, 477, - 477, 477, 477, 477, 477, 477, nil, nil, 477, 477, - nil, nil, nil, nil, nil, 477, 477, nil, 717, nil, - nil, 717, nil, nil, 717, 717, nil, nil, 717, nil, - 717, 477, nil, 477, 717, 477, 477, nil, 477, 477, - 477, 477, 477, 717, 477, nil, nil, nil, 717, 717, - 717, 717, nil, 717, 717, 717, 717, nil, nil, nil, - nil, 717, 717, nil, nil, nil, nil, nil, nil, 717, - nil, 717, 717, 717, 722, 722, 722, 722, 722, 722, - nil, nil, nil, 722, 722, nil, nil, nil, 722, nil, - 722, 722, 722, 722, 722, 722, 722, nil, nil, nil, - nil, nil, 722, 722, 722, 722, 722, 722, 722, nil, - nil, 722, nil, nil, nil, nil, nil, 722, 722, 722, - 722, 722, 722, 722, 722, 722, 722, 722, 722, nil, - 722, 722, 722, nil, 722, 722, 722, 722, 722, 478, - 478, 478, 478, 478, 478, 478, nil, nil, 478, 478, - nil, nil, nil, nil, nil, 478, 478, nil, 722, nil, - nil, 722, nil, nil, 722, 722, nil, nil, 722, nil, - 722, 478, nil, 478, 722, 478, 478, nil, 478, 478, - 478, 478, 478, 722, 478, nil, nil, nil, 722, 722, - 722, 722, nil, 722, 722, 722, 722, nil, nil, nil, - nil, 722, 722, nil, nil, nil, nil, nil, nil, 722, - nil, 722, 722, 722, 726, 726, 726, 726, 726, 726, - nil, nil, nil, 726, 726, nil, nil, nil, 726, nil, - 726, 726, 726, 726, 726, 726, 726, nil, nil, nil, - nil, nil, 726, 726, 726, 726, 726, 726, 726, nil, - nil, 726, nil, nil, nil, nil, nil, 726, 726, 726, - 726, 726, 726, 726, 726, 726, 726, 726, 726, nil, - 726, 726, 726, nil, 726, 726, 726, 726, 726, 481, - 481, 481, 481, 481, 481, 481, nil, nil, 481, 481, - nil, nil, nil, nil, nil, 481, 481, nil, 726, nil, - nil, 726, nil, nil, 726, 726, nil, nil, 726, nil, - 726, 481, nil, 481, 726, 481, 481, nil, 481, 481, - 481, 481, 481, 726, 481, nil, nil, nil, 726, 726, - 726, 726, nil, 726, 726, 726, 726, nil, nil, nil, - nil, 726, 726, nil, nil, nil, nil, nil, nil, 726, - nil, 726, 726, 726, 736, 736, 736, 736, 736, 736, - nil, nil, nil, 736, 736, nil, nil, nil, 736, nil, - 736, 736, 736, 736, 736, 736, 736, nil, nil, nil, - nil, nil, 736, 736, 736, 736, 736, 736, 736, nil, - nil, 736, nil, nil, nil, nil, nil, 736, 736, 736, - 736, 736, 736, 736, 736, 736, 736, 736, 736, nil, - 736, 736, 736, nil, 736, 736, 736, 736, 736, 482, - 482, 482, 482, 482, 482, 482, 482, nil, 482, 482, - nil, nil, nil, nil, nil, 482, 482, nil, 736, nil, - nil, 736, nil, nil, 736, 736, nil, nil, 736, nil, - 736, 482, nil, 482, 736, 482, 482, nil, 482, 482, - 482, 482, 482, 736, 482, nil, nil, nil, 736, 736, - 736, 736, nil, 736, 736, 736, 736, nil, nil, nil, - nil, 736, 736, nil, nil, nil, nil, nil, nil, 736, - nil, 736, 736, 736, 781, 781, 781, 781, 781, 781, - nil, nil, nil, 781, 781, nil, nil, nil, 781, nil, - 781, 781, 781, 781, 781, 781, 781, nil, nil, nil, - nil, nil, 781, 781, 781, 781, 781, 781, 781, nil, - nil, 781, nil, nil, nil, nil, nil, 781, 781, 781, - 781, 781, 781, 781, 781, 781, 781, 781, 781, nil, - 781, 781, 781, nil, 781, 781, 781, 781, 781, 471, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 471, 471, nil, 781, nil, - nil, 781, nil, nil, 781, 781, nil, nil, 781, nil, - 781, 471, nil, 471, 781, 471, 471, nil, 471, 471, - nil, nil, nil, 781, nil, nil, nil, nil, 781, 781, - 781, 781, nil, 781, 781, 781, 781, nil, nil, nil, - nil, 781, 781, nil, nil, nil, nil, nil, nil, 781, - nil, 781, 781, 781, 792, 792, 792, 792, 792, 792, - nil, nil, nil, 792, 792, nil, nil, nil, 792, nil, - 792, 792, 792, 792, 792, 792, 792, nil, nil, nil, - nil, nil, 792, 792, 792, 792, 792, 792, 792, nil, - nil, 792, nil, nil, nil, nil, nil, 792, 792, 792, - 792, 792, 792, 792, 792, 792, 792, 792, 792, nil, - 792, 792, 792, nil, 792, 792, 792, 792, 792, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 792, nil, - nil, 792, nil, nil, 792, 792, nil, nil, 792, nil, - 792, nil, nil, nil, 792, nil, nil, nil, nil, nil, - nil, nil, nil, 792, nil, nil, nil, nil, 792, 792, - 792, 792, nil, 792, 792, 792, 792, nil, nil, nil, - nil, 792, 792, nil, nil, nil, nil, nil, nil, 792, - nil, 792, 792, 792, 827, 827, 827, 827, 827, 827, - nil, nil, nil, 827, 827, nil, nil, nil, 827, nil, - 827, 827, 827, 827, 827, 827, 827, nil, nil, nil, - nil, nil, 827, 827, 827, 827, 827, 827, 827, nil, - nil, 827, nil, nil, nil, nil, nil, 827, 827, 827, - 827, 827, 827, 827, 827, 827, 827, 827, 827, nil, - 827, 827, 827, nil, 827, 827, 827, 827, 827, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 827, nil, - nil, 827, nil, nil, 827, 827, nil, nil, 827, nil, - 827, nil, nil, nil, 827, nil, nil, nil, nil, nil, - nil, nil, nil, 827, nil, nil, nil, nil, 827, 827, - 827, 827, nil, 827, 827, 827, 827, nil, nil, nil, - nil, 827, 827, nil, nil, nil, nil, nil, nil, 827, - nil, 827, 827, 827, 833, 833, 833, 833, 833, 833, - nil, nil, nil, 833, 833, nil, nil, nil, 833, nil, - 833, 833, 833, 833, 833, 833, 833, nil, nil, nil, - nil, nil, 833, 833, 833, 833, 833, 833, 833, nil, - nil, 833, nil, nil, nil, nil, nil, 833, 833, 833, - 833, 833, 833, 833, 833, 833, 833, 833, 833, nil, - 833, 833, 833, nil, 833, 833, 833, 833, 833, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 833, nil, - nil, 833, nil, nil, 833, 833, nil, nil, 833, nil, - 833, nil, nil, nil, 833, nil, nil, nil, nil, nil, - nil, nil, nil, 833, nil, nil, nil, nil, 833, 833, - 833, 833, nil, 833, 833, 833, 833, nil, nil, nil, - nil, 833, 833, nil, nil, nil, nil, nil, nil, 833, - nil, 833, 833, 833, 847, 847, 847, 847, 847, 847, - nil, nil, nil, 847, 847, nil, nil, nil, 847, nil, - 847, 847, 847, 847, 847, 847, 847, nil, nil, nil, - nil, nil, 847, 847, 847, 847, 847, 847, 847, nil, - nil, 847, nil, nil, nil, nil, nil, 847, 847, 847, - 847, 847, 847, 847, 847, 847, 847, 847, 847, nil, - 847, 847, 847, nil, 847, 847, 847, 847, 847, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 847, nil, - nil, 847, nil, nil, 847, 847, nil, nil, 847, nil, - 847, nil, nil, nil, 847, nil, nil, nil, nil, nil, - nil, nil, nil, 847, nil, nil, nil, nil, 847, 847, - 847, 847, nil, 847, 847, 847, 847, nil, nil, nil, - nil, 847, 847, nil, nil, nil, nil, nil, nil, 847, - nil, 847, 847, 847, 865, 865, 865, 865, 865, 865, - nil, nil, nil, 865, 865, nil, nil, nil, 865, nil, - 865, 865, 865, 865, 865, 865, 865, nil, nil, nil, - nil, nil, 865, 865, 865, 865, 865, 865, 865, nil, - nil, 865, nil, nil, nil, nil, nil, 865, 865, 865, - 865, 865, 865, 865, 865, 865, 865, 865, 865, nil, - 865, 865, 865, nil, 865, 865, 865, 865, 865, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 865, nil, - nil, 865, nil, nil, 865, 865, nil, nil, 865, nil, - 865, nil, nil, nil, 865, nil, nil, nil, nil, nil, - nil, nil, nil, 865, nil, nil, nil, nil, 865, 865, - 865, 865, nil, 865, 865, 865, 865, nil, nil, nil, - nil, 865, 865, nil, nil, nil, nil, nil, nil, 865, - nil, 865, 865, 865, 924, 924, 924, 924, 924, 924, - nil, nil, nil, 924, 924, nil, nil, nil, 924, nil, - 924, 924, 924, 924, 924, 924, 924, nil, nil, nil, - nil, nil, 924, 924, 924, 924, 924, 924, 924, nil, - nil, 924, nil, nil, nil, nil, nil, 924, 924, 924, - 924, 924, 924, 924, 924, 924, 924, 924, 924, nil, - 924, 924, 924, nil, 924, 924, 924, 924, 924, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 924, nil, - nil, 924, nil, nil, 924, 924, nil, nil, 924, nil, - 924, nil, nil, nil, 924, nil, nil, nil, nil, nil, - nil, nil, nil, 924, nil, nil, nil, nil, 924, 924, - 924, 924, nil, 924, 924, 924, 924, nil, nil, nil, - nil, 924, 924, nil, nil, nil, nil, nil, nil, 924, - nil, 924, 924, 924, 931, 931, 931, 931, 931, 931, - nil, nil, nil, 931, 931, nil, nil, nil, 931, nil, - 931, 931, 931, 931, 931, 931, 931, nil, nil, nil, - nil, nil, 931, 931, 931, 931, 931, 931, 931, nil, - nil, 931, nil, nil, nil, nil, nil, 931, 931, 931, - 931, 931, 931, 931, 931, 931, 931, 931, 931, nil, - 931, 931, 931, nil, 931, 931, 931, 931, 931, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 931, nil, - nil, 931, nil, nil, 931, 931, nil, nil, 931, nil, - 931, nil, nil, nil, 931, nil, nil, nil, nil, nil, - nil, nil, nil, 931, nil, nil, nil, nil, 931, 931, - 931, 931, nil, 931, 931, 931, 931, nil, nil, nil, - nil, 931, 931, nil, nil, nil, nil, nil, nil, 931, - nil, 931, 931, 931, 932, 932, 932, 932, 932, 932, - nil, nil, nil, 932, 932, nil, nil, nil, 932, nil, - 932, 932, 932, 932, 932, 932, 932, nil, nil, nil, - nil, nil, 932, 932, 932, 932, 932, 932, 932, nil, - nil, 932, nil, nil, nil, nil, nil, 932, 932, 932, - 932, 932, 932, 932, 932, 932, 932, 932, 932, nil, - 932, 932, 932, nil, 932, 932, 932, 932, 932, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 932, nil, - nil, 932, nil, nil, 932, 932, nil, nil, 932, nil, - 932, nil, nil, nil, 932, nil, nil, nil, nil, nil, - nil, nil, nil, 932, nil, nil, nil, nil, 932, 932, - 932, 932, nil, 932, 932, 932, 932, nil, nil, nil, - nil, 932, 932, nil, nil, nil, nil, nil, nil, 932, - nil, 932, 932, 932, 949, 949, 949, 949, 949, 949, - nil, nil, nil, 949, 949, nil, nil, nil, 949, nil, - 949, 949, 949, 949, 949, 949, 949, nil, nil, nil, - nil, nil, 949, 949, 949, 949, 949, 949, 949, nil, - nil, 949, nil, nil, nil, nil, nil, 949, 949, 949, - 949, 949, 949, 949, 949, 949, 949, 949, 949, nil, - 949, 949, 949, nil, 949, 949, 949, 949, 949, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 949, nil, - nil, 949, nil, nil, 949, 949, nil, nil, 949, nil, - 949, nil, nil, nil, 949, nil, nil, nil, nil, nil, - nil, nil, nil, 949, nil, nil, nil, nil, 949, 949, - 949, 949, nil, 949, 949, 949, 949, nil, nil, nil, - nil, 949, 949, nil, nil, nil, nil, nil, nil, 949, - nil, 949, 949, 949, 954, 954, 954, 954, 954, 954, - nil, nil, nil, 954, 954, nil, nil, nil, 954, nil, - 954, 954, 954, 954, 954, 954, 954, nil, nil, nil, - nil, nil, 954, 954, 954, 954, 954, 954, 954, nil, - nil, 954, nil, nil, nil, nil, nil, 954, 954, 954, - 954, 954, 954, 954, 954, 954, 954, 954, 954, nil, - 954, 954, 954, nil, 954, 954, 954, 954, 954, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 954, nil, - nil, 954, nil, nil, 954, 954, nil, nil, 954, nil, - 954, nil, nil, nil, 954, nil, nil, nil, nil, nil, - nil, nil, nil, 954, nil, nil, nil, nil, 954, 954, - 954, 954, nil, 954, 954, 954, 954, nil, nil, nil, - nil, 954, 954, nil, nil, nil, nil, nil, nil, 954, - nil, 954, 954, 954, 5, 5, 5, 5, 5, nil, - nil, nil, 5, 5, nil, nil, nil, 5, nil, 5, - 5, 5, 5, 5, 5, 5, nil, nil, nil, nil, - nil, 5, 5, 5, 5, 5, 5, 5, nil, nil, - 5, nil, nil, nil, nil, nil, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, nil, 5, - 5, 5, nil, 5, 5, 5, 5, 5, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 5, nil, nil, - 5, nil, nil, 5, 5, nil, nil, 5, nil, 5, - nil, nil, nil, 5, nil, nil, nil, nil, nil, nil, - nil, nil, 5, nil, nil, nil, nil, 5, 5, 5, - 5, nil, 5, 5, 5, 5, nil, nil, nil, nil, - 5, 5, nil, nil, nil, 20, 20, 20, 5, 20, - 5, 5, 5, 20, 20, nil, nil, nil, 20, nil, - 20, 20, 20, 20, 20, 20, 20, nil, nil, nil, - nil, nil, 20, 20, 20, 20, 20, 20, 20, nil, - nil, 20, nil, nil, nil, nil, nil, nil, 20, nil, - nil, 20, 20, 20, 20, 20, 20, 20, 20, nil, - 20, 20, 20, nil, 20, 20, 20, 20, 20, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 20, nil, - nil, 20, nil, nil, 20, 20, nil, nil, 20, nil, - nil, nil, nil, nil, 20, nil, nil, nil, nil, nil, - nil, nil, nil, 20, nil, nil, nil, nil, 20, 20, - 20, 20, nil, 20, 20, 20, 20, nil, nil, nil, - nil, 20, 20, nil, nil, nil, 29, 29, 29, 20, - 29, 20, 20, 20, 29, 29, nil, nil, nil, 29, - nil, 29, 29, 29, 29, 29, 29, 29, nil, nil, - nil, nil, nil, 29, 29, 29, 29, 29, 29, 29, - nil, nil, 29, nil, nil, nil, nil, nil, nil, 29, - nil, nil, 29, 29, 29, 29, 29, 29, 29, 29, - 29, 29, 29, 29, nil, 29, 29, 29, 29, 29, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 29, - nil, nil, 29, nil, nil, 29, 29, nil, nil, 29, - nil, 29, nil, 29, nil, 29, nil, nil, 29, nil, - nil, nil, nil, nil, 29, nil, nil, nil, nil, 29, - 29, 29, 29, nil, 29, 29, 29, 29, nil, nil, - nil, nil, 29, 29, nil, nil, nil, 30, 30, 30, - 29, 30, 29, 29, 29, 30, 30, nil, nil, nil, - 30, nil, 30, 30, 30, 30, 30, 30, 30, nil, - nil, nil, nil, nil, 30, 30, 30, 30, 30, 30, - 30, nil, nil, 30, nil, nil, nil, nil, nil, nil, - 30, nil, nil, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, nil, 30, 30, 30, 30, - 30, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 30, nil, nil, 30, nil, nil, 30, 30, nil, nil, - 30, nil, 30, nil, 30, nil, 30, nil, nil, 30, - nil, nil, nil, nil, nil, 30, nil, nil, nil, nil, - 30, 30, 30, 30, nil, 30, 30, 30, 30, nil, - nil, nil, nil, 30, 30, nil, nil, nil, 31, 31, - 31, 30, 31, 30, 30, 30, 31, 31, nil, nil, - nil, 31, nil, 31, 31, 31, 31, 31, 31, 31, - nil, nil, nil, nil, nil, 31, 31, 31, 31, 31, - 31, 31, nil, nil, 31, nil, nil, nil, nil, nil, - nil, 31, nil, nil, 31, 31, 31, 31, 31, 31, - 31, 31, 31, 31, 31, 31, nil, 31, 31, 31, - 31, 31, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 31, nil, nil, 31, nil, nil, 31, 31, nil, - nil, 31, nil, 31, nil, 31, nil, 31, nil, nil, - 31, nil, nil, nil, nil, nil, 31, nil, nil, nil, - nil, 31, 31, 31, 31, nil, 31, 31, 31, 31, - nil, nil, nil, nil, 31, 31, nil, nil, nil, 34, - 34, 34, 31, 34, 31, 31, 31, 34, 34, nil, - nil, nil, 34, nil, 34, 34, 34, 34, 34, 34, - 34, nil, nil, nil, nil, nil, 34, 34, 34, 34, - 34, 34, 34, nil, nil, 34, nil, nil, nil, nil, - nil, nil, 34, nil, nil, 34, 34, 34, 34, 34, - 34, 34, 34, nil, 34, 34, 34, nil, 34, 34, - nil, nil, 34, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 34, nil, nil, 34, nil, nil, 34, 34, - nil, nil, 34, nil, 34, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 34, 34, 34, 34, nil, 34, 34, 34, - 34, nil, nil, nil, nil, 34, 34, nil, nil, nil, - 35, 35, 35, 34, 35, 34, 34, 34, 35, 35, - nil, nil, nil, 35, nil, 35, 35, 35, 35, 35, - 35, 35, nil, nil, nil, nil, nil, 35, 35, 35, - 35, 35, 35, 35, nil, nil, 35, nil, nil, nil, - nil, nil, nil, 35, nil, nil, 35, 35, 35, 35, - 35, 35, 35, 35, nil, 35, 35, 35, nil, 35, - 35, nil, nil, 35, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 35, nil, nil, 35, nil, nil, 35, - 35, nil, nil, 35, nil, nil, 915, nil, 915, 915, - 915, 915, 915, nil, nil, nil, nil, nil, nil, nil, - nil, 915, nil, 35, 35, 35, 35, nil, 35, 35, - 35, 35, nil, nil, nil, nil, 35, 35, nil, nil, - nil, 35, nil, 915, 35, nil, 35, 35, 35, 42, - 42, 42, nil, 42, 915, 915, nil, 42, 42, 915, - nil, nil, 42, nil, 42, 42, 42, 42, 42, 42, - 42, nil, nil, nil, nil, nil, 42, 42, 42, 42, - 42, 42, 42, nil, nil, 42, nil, nil, nil, nil, - nil, nil, 42, nil, nil, 42, 42, 42, 42, 42, - 42, 42, 42, nil, 42, 42, 42, nil, 42, 42, - 42, 42, 42, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 42, nil, nil, 42, nil, nil, 42, 42, - nil, nil, 42, nil, nil, nil, nil, nil, 42, nil, - nil, nil, nil, nil, nil, nil, nil, 42, nil, nil, - nil, nil, 42, 42, 42, 42, nil, 42, 42, 42, - 42, nil, nil, nil, nil, 42, 42, nil, nil, nil, - 43, 43, 43, 42, 43, 42, 42, 42, 43, 43, - nil, nil, nil, 43, nil, 43, 43, 43, 43, 43, - 43, 43, nil, nil, nil, nil, nil, 43, 43, 43, - 43, 43, 43, 43, nil, nil, 43, nil, nil, nil, - nil, nil, nil, 43, nil, nil, 43, 43, 43, 43, - 43, 43, 43, 43, nil, 43, 43, 43, nil, 43, - 43, 43, 43, 43, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 43, nil, nil, 43, nil, nil, 43, - 43, nil, nil, 43, nil, nil, nil, nil, nil, 43, - nil, nil, nil, nil, nil, nil, nil, nil, 43, nil, - nil, nil, nil, 43, 43, 43, 43, nil, 43, 43, - 43, 43, nil, nil, nil, nil, 43, 43, nil, nil, - nil, 45, 45, 45, 43, 45, 43, 43, 43, 45, - 45, nil, nil, nil, 45, nil, 45, 45, 45, 45, - 45, 45, 45, nil, nil, nil, nil, nil, 45, 45, - 45, 45, 45, 45, 45, nil, nil, 45, nil, nil, - nil, nil, nil, nil, 45, nil, nil, 45, 45, 45, - 45, 45, 45, 45, 45, nil, 45, 45, 45, nil, - 45, 45, 45, 45, 45, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 45, nil, nil, 45, nil, nil, - 45, 45, nil, nil, 45, nil, nil, nil, nil, nil, - 45, nil, nil, nil, nil, nil, nil, nil, nil, 45, - nil, nil, nil, nil, 45, 45, 45, 45, nil, 45, - 45, 45, 45, nil, nil, nil, nil, 45, 45, nil, - nil, nil, nil, nil, nil, 45, nil, 45, 45, 45, - 59, 59, 59, 59, 59, nil, nil, nil, 59, 59, - nil, nil, nil, 59, nil, 59, 59, 59, 59, 59, - 59, 59, nil, nil, nil, nil, nil, 59, 59, 59, - 59, 59, 59, 59, nil, nil, 59, nil, nil, nil, - nil, nil, 59, 59, nil, 59, 59, 59, 59, 59, - 59, 59, 59, 59, nil, 59, 59, 59, nil, 59, - 59, 59, 59, 59, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 59, nil, nil, 59, nil, nil, 59, - 59, nil, nil, 59, nil, 59, nil, nil, nil, 59, - nil, nil, nil, nil, nil, nil, nil, nil, 59, nil, - nil, nil, nil, 59, 59, 59, 59, nil, 59, 59, - 59, 59, nil, nil, nil, nil, 59, 59, nil, nil, - nil, 60, 60, 60, 59, 60, 59, 59, 59, 60, - 60, nil, nil, nil, 60, nil, 60, 60, 60, 60, - 60, 60, 60, nil, nil, nil, nil, nil, 60, 60, - 60, 60, 60, 60, 60, nil, nil, 60, nil, nil, - nil, nil, nil, nil, 60, nil, nil, 60, 60, 60, - 60, 60, 60, 60, 60, 60, 60, 60, 60, nil, - 60, 60, 60, 60, 60, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 60, nil, nil, 60, nil, nil, - 60, 60, nil, nil, 60, nil, 60, nil, nil, nil, - 60, nil, nil, 60, nil, nil, nil, nil, nil, 60, - nil, nil, nil, nil, 60, 60, 60, 60, nil, 60, - 60, 60, 60, nil, nil, nil, nil, 60, 60, nil, - nil, nil, 61, 61, 61, 60, 61, 60, 60, 60, - 61, 61, nil, nil, nil, 61, nil, 61, 61, 61, - 61, 61, 61, 61, nil, nil, nil, nil, nil, 61, - 61, 61, 61, 61, 61, 61, nil, nil, 61, nil, - nil, nil, nil, nil, nil, 61, nil, nil, 61, 61, - 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, - nil, 61, 61, 61, 61, 61, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 61, nil, nil, 61, nil, - nil, 61, 61, nil, nil, 61, nil, nil, nil, nil, - nil, 61, nil, nil, 61, nil, nil, nil, nil, nil, - 61, nil, nil, nil, nil, 61, 61, 61, 61, nil, - 61, 61, 61, 61, nil, nil, nil, nil, 61, 61, - nil, nil, nil, 64, 64, 64, 61, 64, 61, 61, - 61, 64, 64, nil, nil, nil, 64, nil, 64, 64, - 64, 64, 64, 64, 64, nil, nil, nil, nil, nil, - 64, 64, 64, 64, 64, 64, 64, nil, nil, 64, - nil, nil, nil, nil, nil, nil, 64, nil, nil, 64, - 64, 64, 64, 64, 64, 64, 64, nil, 64, 64, - 64, nil, 64, 64, 64, 64, 64, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 64, nil, nil, 64, - nil, nil, 64, 64, nil, nil, 64, nil, nil, nil, - nil, nil, 64, nil, nil, nil, nil, nil, nil, nil, - nil, 64, nil, nil, nil, nil, 64, 64, 64, 64, - nil, 64, 64, 64, 64, nil, nil, nil, nil, 64, - 64, nil, nil, nil, 65, 65, 65, 64, 65, 64, - 64, 64, 65, 65, nil, nil, nil, 65, nil, 65, - 65, 65, 65, 65, 65, 65, nil, nil, nil, nil, - nil, 65, 65, 65, 65, 65, 65, 65, nil, nil, - 65, nil, nil, nil, nil, nil, nil, 65, nil, nil, - 65, 65, 65, 65, 65, 65, 65, 65, nil, 65, - 65, 65, nil, 65, 65, 65, 65, 65, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 65, nil, nil, - 65, nil, nil, 65, 65, nil, nil, 65, nil, nil, - nil, nil, nil, 65, nil, nil, nil, nil, nil, nil, - nil, nil, 65, nil, nil, nil, nil, 65, 65, 65, - 65, nil, 65, 65, 65, 65, nil, nil, nil, nil, - 65, 65, nil, nil, nil, 68, 68, 68, 65, 68, - 65, 65, 65, 68, 68, nil, nil, nil, 68, nil, - 68, 68, 68, 68, 68, 68, 68, nil, nil, nil, - nil, nil, 68, 68, 68, 68, 68, 68, 68, nil, - nil, 68, nil, nil, nil, nil, nil, nil, 68, nil, - nil, 68, 68, 68, 68, 68, 68, 68, 68, nil, - 68, 68, 68, nil, 68, 68, 68, 68, 68, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 68, nil, - nil, 68, nil, nil, 68, 68, nil, nil, 68, nil, - nil, nil, nil, nil, 68, nil, nil, nil, nil, nil, - nil, nil, nil, 68, nil, nil, nil, nil, 68, 68, - 68, 68, nil, 68, 68, 68, 68, nil, nil, nil, - nil, 68, 68, 68, nil, nil, nil, nil, 68, 68, - nil, 68, 68, 68, 69, 69, 69, nil, 69, nil, - nil, nil, 69, 69, nil, nil, nil, 69, nil, 69, - 69, 69, 69, 69, 69, 69, nil, nil, nil, nil, - nil, 69, 69, 69, 69, 69, 69, 69, nil, nil, - 69, nil, nil, nil, nil, nil, nil, 69, nil, nil, - 69, 69, 69, 69, 69, 69, 69, 69, nil, 69, - 69, 69, nil, 69, 69, nil, nil, 69, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 69, nil, nil, - 69, nil, nil, 69, 69, nil, nil, 69, nil, 69, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 69, 69, 69, - 69, nil, 69, 69, 69, 69, nil, nil, nil, nil, - 69, 69, nil, nil, nil, 70, 70, 70, 69, 70, - 69, 69, 69, 70, 70, nil, nil, nil, 70, nil, - 70, 70, 70, 70, 70, 70, 70, nil, nil, nil, - nil, nil, 70, 70, 70, 70, 70, 70, 70, nil, - nil, 70, nil, nil, nil, nil, nil, nil, 70, nil, - nil, 70, 70, 70, 70, 70, 70, 70, 70, nil, - 70, 70, 70, nil, 70, 70, nil, nil, 70, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 70, nil, nil, 70, nil, - nil, 70, nil, nil, 70, 70, nil, nil, 70, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 70, 70, - 70, 70, nil, 70, 70, 70, 70, nil, nil, nil, - nil, 70, 70, nil, nil, nil, 71, 71, 71, 70, - 71, 70, 70, 70, 71, 71, nil, nil, nil, 71, - nil, 71, 71, 71, 71, 71, 71, 71, nil, nil, - nil, nil, nil, 71, 71, 71, 71, 71, 71, 71, - nil, nil, 71, nil, nil, nil, nil, nil, nil, 71, - nil, nil, 71, 71, 71, 71, 71, 71, 71, 71, - nil, 71, 71, 71, nil, 71, 71, nil, nil, 71, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 71, - nil, nil, 71, nil, nil, 71, 71, nil, nil, 71, - nil, nil, 937, nil, 937, 937, 937, 937, 937, nil, - nil, nil, nil, nil, nil, nil, nil, 937, nil, 71, - 71, 71, 71, nil, 71, 71, 71, 71, nil, nil, - nil, nil, 71, 71, nil, nil, nil, nil, nil, 937, - 71, nil, 71, 71, 71, 116, 116, 116, 116, 116, - 937, 937, nil, 116, 116, 937, nil, nil, 116, nil, - 116, 116, 116, 116, 116, 116, 116, nil, nil, nil, - nil, nil, 116, 116, 116, 116, 116, 116, 116, nil, - nil, 116, nil, nil, nil, nil, nil, 116, 116, 116, - 116, 116, 116, 116, 116, 116, 116, 116, 116, nil, - 116, 116, 116, nil, 116, 116, 116, 116, 116, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 116, nil, - nil, 116, nil, nil, 116, 116, nil, nil, 116, nil, - 116, nil, nil, nil, 116, nil, nil, nil, nil, nil, - nil, nil, nil, 116, nil, nil, nil, nil, 116, 116, - 116, 116, nil, 116, 116, 116, 116, nil, nil, nil, - nil, 116, 116, nil, nil, nil, nil, nil, 116, 116, - nil, 116, 116, 116, 121, 121, 121, nil, 121, nil, - nil, nil, 121, 121, nil, nil, nil, 121, nil, 121, - 121, 121, 121, 121, 121, 121, nil, nil, nil, nil, - nil, 121, 121, 121, 121, 121, 121, 121, nil, nil, - 121, nil, nil, nil, nil, nil, nil, 121, nil, nil, - 121, 121, 121, 121, 121, 121, 121, 121, nil, 121, - 121, 121, nil, 121, 121, 121, 121, 121, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 121, nil, nil, - 121, nil, nil, 121, 121, nil, nil, 121, nil, nil, - nil, nil, nil, 121, nil, nil, nil, nil, nil, nil, - nil, nil, 121, nil, nil, nil, nil, 121, 121, 121, - 121, nil, 121, 121, 121, 121, nil, nil, nil, nil, - 121, 121, nil, nil, nil, 122, 122, 122, 121, 122, - 121, 121, 121, 122, 122, nil, nil, nil, 122, nil, - 122, 122, 122, 122, 122, 122, 122, nil, nil, nil, - nil, nil, 122, 122, 122, 122, 122, 122, 122, nil, - nil, 122, nil, nil, nil, nil, nil, nil, 122, nil, - nil, 122, 122, 122, 122, 122, 122, 122, 122, nil, - 122, 122, 122, nil, 122, 122, 122, 122, 122, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 122, nil, - nil, 122, nil, nil, 122, 122, nil, nil, 122, nil, - nil, nil, nil, nil, 122, nil, nil, nil, nil, nil, - nil, nil, nil, 122, nil, nil, nil, nil, 122, 122, - 122, 122, nil, 122, 122, 122, 122, nil, nil, nil, - nil, 122, 122, nil, nil, nil, 123, 123, 123, 122, - 123, 122, 122, 122, 123, 123, nil, nil, nil, 123, - nil, 123, 123, 123, 123, 123, 123, 123, nil, nil, - nil, nil, nil, 123, 123, 123, 123, 123, 123, 123, - nil, nil, 123, nil, nil, nil, nil, nil, nil, 123, - nil, nil, 123, 123, 123, 123, 123, 123, 123, 123, - nil, 123, 123, 123, nil, 123, 123, 123, 123, 123, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 123, - nil, nil, 123, nil, nil, 123, 123, nil, nil, 123, - nil, nil, nil, nil, nil, 123, nil, nil, nil, nil, - nil, nil, nil, nil, 123, nil, nil, nil, nil, 123, - 123, 123, 123, nil, 123, 123, 123, 123, nil, nil, - nil, nil, 123, 123, nil, nil, nil, 124, 124, 124, - 123, 124, 123, 123, 123, 124, 124, nil, nil, nil, - 124, nil, 124, 124, 124, 124, 124, 124, 124, nil, - nil, nil, nil, nil, 124, 124, 124, 124, 124, 124, - 124, nil, nil, 124, nil, nil, nil, nil, nil, nil, - 124, nil, nil, 124, 124, 124, 124, 124, 124, 124, - 124, nil, 124, 124, 124, nil, 124, 124, 124, 124, - 124, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 124, nil, nil, 124, nil, nil, 124, 124, nil, nil, - 124, nil, nil, nil, nil, nil, 124, nil, nil, nil, - nil, nil, nil, nil, nil, 124, nil, nil, nil, nil, - 124, 124, 124, 124, nil, 124, 124, 124, 124, nil, - nil, nil, nil, 124, 124, nil, nil, nil, nil, nil, - nil, 124, nil, 124, 124, 124, 125, 125, 125, 125, - 125, nil, nil, nil, 125, 125, nil, nil, nil, 125, - nil, 125, 125, 125, 125, 125, 125, 125, nil, nil, - nil, nil, nil, 125, 125, 125, 125, 125, 125, 125, - nil, nil, 125, nil, nil, nil, nil, nil, 125, 125, - nil, 125, 125, 125, 125, 125, 125, 125, 125, 125, - nil, 125, 125, 125, nil, 125, 125, 125, 125, 125, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 125, - nil, nil, 125, nil, nil, 125, 125, nil, nil, 125, - nil, 125, nil, nil, nil, 125, nil, nil, nil, nil, - nil, nil, nil, nil, 125, nil, nil, nil, nil, 125, - 125, 125, 125, nil, 125, 125, 125, 125, nil, nil, - nil, nil, 125, 125, nil, nil, nil, 213, 213, 213, - 125, 213, 125, 125, 125, 213, 213, nil, nil, nil, - 213, nil, 213, 213, 213, 213, 213, 213, 213, nil, - nil, nil, nil, nil, 213, 213, 213, 213, 213, 213, - 213, nil, nil, 213, nil, nil, nil, nil, nil, nil, - 213, nil, nil, 213, 213, 213, 213, 213, 213, 213, - 213, nil, 213, 213, 213, nil, 213, 213, 213, 213, - 213, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 213, nil, nil, 213, nil, nil, 213, 213, nil, nil, - 213, nil, 213, nil, nil, nil, 213, nil, nil, nil, - nil, nil, nil, nil, nil, 213, nil, nil, nil, nil, - 213, 213, 213, 213, nil, 213, 213, 213, 213, nil, - nil, nil, nil, 213, 213, nil, nil, nil, 214, 214, - 214, 213, 214, 213, 213, 213, 214, 214, nil, nil, - nil, 214, nil, 214, 214, 214, 214, 214, 214, 214, - nil, nil, nil, nil, nil, 214, 214, 214, 214, 214, - 214, 214, nil, nil, 214, nil, nil, nil, nil, nil, - nil, 214, nil, nil, 214, 214, 214, 214, 214, 214, - 214, 214, nil, 214, 214, 214, nil, 214, 214, 214, - 214, 214, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 214, nil, nil, 214, nil, nil, 214, 214, nil, - nil, 214, nil, 214, nil, nil, nil, 214, nil, nil, - nil, nil, nil, nil, nil, nil, 214, nil, nil, nil, - nil, 214, 214, 214, 214, nil, 214, 214, 214, 214, - nil, nil, nil, nil, 214, 214, nil, nil, nil, 215, - 215, 215, 214, 215, 214, 214, 214, 215, 215, nil, - nil, nil, 215, nil, 215, 215, 215, 215, 215, 215, - 215, nil, nil, nil, nil, nil, 215, 215, 215, 215, - 215, 215, 215, nil, nil, 215, nil, nil, nil, nil, - nil, nil, 215, nil, nil, 215, 215, 215, 215, 215, - 215, 215, 215, nil, 215, 215, 215, nil, 215, 215, - 215, 215, 215, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 215, nil, nil, 215, nil, nil, 215, 215, - nil, nil, 215, nil, nil, nil, nil, nil, 215, nil, - nil, nil, nil, nil, nil, nil, nil, 215, nil, nil, - nil, nil, 215, 215, 215, 215, nil, 215, 215, 215, - 215, nil, nil, nil, nil, 215, 215, nil, nil, nil, - 216, 216, 216, 215, 216, 215, 215, 215, 216, 216, - nil, nil, nil, 216, nil, 216, 216, 216, 216, 216, - 216, 216, nil, nil, nil, nil, nil, 216, 216, 216, - 216, 216, 216, 216, nil, nil, 216, nil, nil, nil, - nil, nil, nil, 216, nil, nil, 216, 216, 216, 216, - 216, 216, 216, 216, nil, 216, 216, 216, nil, 216, - 216, 216, 216, 216, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 216, nil, nil, 216, nil, nil, 216, - 216, nil, nil, 216, nil, nil, nil, nil, nil, 216, - nil, nil, nil, nil, nil, nil, nil, nil, 216, nil, - nil, nil, nil, 216, 216, 216, 216, nil, 216, 216, - 216, 216, nil, nil, nil, nil, 216, 216, nil, nil, - nil, 217, 217, 217, 216, 217, 216, 216, 216, 217, - 217, nil, nil, nil, 217, nil, 217, 217, 217, 217, - 217, 217, 217, nil, nil, nil, nil, nil, 217, 217, - 217, 217, 217, 217, 217, nil, nil, 217, nil, nil, - nil, nil, nil, nil, 217, nil, nil, 217, 217, 217, - 217, 217, 217, 217, 217, nil, 217, 217, 217, nil, - 217, 217, 217, 217, 217, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 217, nil, nil, 217, nil, nil, - 217, 217, nil, nil, 217, nil, nil, nil, nil, nil, - 217, nil, nil, nil, nil, nil, nil, nil, nil, 217, - nil, nil, nil, nil, 217, 217, 217, 217, nil, 217, - 217, 217, 217, nil, nil, nil, nil, 217, 217, nil, - nil, nil, 218, 218, 218, 217, 218, 217, 217, 217, - 218, 218, nil, nil, nil, 218, nil, 218, 218, 218, - 218, 218, 218, 218, nil, nil, nil, nil, nil, 218, - 218, 218, 218, 218, 218, 218, nil, nil, 218, nil, - nil, nil, nil, nil, nil, 218, nil, nil, 218, 218, - 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, - nil, 218, 218, 218, 218, 218, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 218, nil, nil, 218, nil, - nil, 218, 218, nil, nil, 218, nil, 218, nil, 218, - nil, 218, nil, nil, 218, nil, nil, nil, nil, nil, - 218, nil, nil, nil, nil, 218, 218, 218, 218, nil, - 218, 218, 218, 218, nil, nil, nil, nil, 218, 218, - nil, nil, nil, 223, 223, 223, 218, 223, 218, 218, - 218, 223, 223, nil, nil, nil, 223, nil, 223, 223, - 223, 223, 223, 223, 223, nil, nil, nil, nil, nil, - 223, 223, 223, 223, 223, 223, 223, nil, nil, 223, - nil, nil, nil, nil, nil, nil, 223, nil, nil, 223, - 223, 223, 223, 223, 223, 223, 223, nil, 223, 223, - 223, nil, 223, 223, 223, 223, 223, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 223, nil, nil, 223, - nil, nil, 223, 223, nil, nil, 223, nil, nil, nil, - nil, nil, 223, nil, nil, nil, nil, nil, nil, nil, - nil, 223, nil, nil, nil, nil, 223, 223, 223, 223, - nil, 223, 223, 223, 223, nil, nil, nil, nil, 223, - 223, nil, nil, nil, 224, 224, 224, 223, 224, 223, - 223, 223, 224, 224, nil, nil, nil, 224, nil, 224, - 224, 224, 224, 224, 224, 224, nil, nil, nil, nil, - nil, 224, 224, 224, 224, 224, 224, 224, nil, nil, - 224, nil, nil, nil, nil, nil, nil, 224, nil, nil, - 224, 224, 224, 224, 224, 224, 224, 224, nil, 224, - 224, 224, nil, 224, 224, 224, 224, 224, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 224, nil, nil, - 224, nil, nil, 224, 224, nil, nil, 224, nil, nil, - nil, nil, nil, 224, nil, nil, nil, nil, nil, nil, - nil, nil, 224, nil, nil, nil, nil, 224, 224, 224, - 224, nil, 224, 224, 224, 224, nil, nil, nil, nil, - 224, 224, nil, nil, nil, 225, 225, 225, 224, 225, - 224, 224, 224, 225, 225, nil, nil, nil, 225, nil, - 225, 225, 225, 225, 225, 225, 225, nil, nil, nil, - nil, nil, 225, 225, 225, 225, 225, 225, 225, nil, - nil, 225, nil, nil, nil, nil, nil, nil, 225, nil, - nil, 225, 225, 225, 225, 225, 225, 225, 225, nil, - 225, 225, 225, nil, 225, 225, 225, 225, 225, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 225, nil, - nil, 225, nil, nil, 225, 225, nil, nil, 225, nil, - nil, nil, nil, nil, 225, nil, nil, nil, nil, nil, - nil, nil, nil, 225, nil, nil, nil, nil, 225, 225, - 225, 225, nil, 225, 225, 225, 225, nil, nil, nil, - nil, 225, 225, 225, nil, nil, 236, 236, 236, 225, - 236, 225, 225, 225, 236, 236, nil, nil, nil, 236, - nil, 236, 236, 236, 236, 236, 236, 236, nil, nil, - nil, nil, nil, 236, 236, 236, 236, 236, 236, 236, - nil, nil, 236, nil, nil, nil, nil, nil, nil, 236, - nil, nil, 236, 236, 236, 236, 236, 236, 236, 236, - nil, 236, 236, 236, nil, 236, 236, 236, 236, 236, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 236, - nil, nil, 236, nil, nil, 236, 236, nil, nil, 236, - nil, nil, nil, nil, nil, 236, nil, nil, nil, nil, - nil, nil, nil, nil, 236, nil, nil, nil, nil, 236, - 236, 236, 236, nil, 236, 236, 236, 236, nil, nil, - nil, nil, 236, 236, nil, nil, nil, 239, 239, 239, - 236, 239, 236, 236, 236, 239, 239, nil, nil, nil, - 239, nil, 239, 239, 239, 239, 239, 239, 239, nil, - nil, nil, nil, nil, 239, 239, 239, 239, 239, 239, - 239, nil, nil, 239, nil, nil, nil, nil, nil, nil, - 239, nil, nil, 239, 239, 239, 239, 239, 239, 239, - 239, nil, 239, 239, 239, nil, 239, 239, 239, 239, - 239, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 239, nil, nil, 239, nil, nil, 239, 239, nil, nil, - 239, nil, nil, nil, nil, nil, 239, nil, nil, nil, - nil, nil, nil, nil, nil, 239, nil, nil, nil, nil, - 239, 239, 239, 239, nil, 239, 239, 239, 239, nil, - nil, nil, nil, 239, 239, nil, nil, nil, 240, 240, - 240, 239, 240, 239, 239, 239, 240, 240, nil, nil, - nil, 240, nil, 240, 240, 240, 240, 240, 240, 240, - nil, nil, nil, nil, nil, 240, 240, 240, 240, 240, - 240, 240, nil, nil, 240, nil, nil, nil, nil, nil, - nil, 240, nil, nil, 240, 240, 240, 240, 240, 240, - 240, 240, nil, 240, 240, 240, nil, 240, 240, 240, - 240, 240, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 240, nil, nil, 240, nil, nil, 240, 240, nil, - nil, 240, nil, nil, nil, nil, nil, 240, nil, nil, - nil, nil, nil, nil, nil, nil, 240, nil, nil, nil, - nil, 240, 240, 240, 240, nil, 240, 240, 240, 240, - nil, nil, nil, nil, 240, 240, nil, nil, nil, 241, - 241, 241, 240, 241, 240, 240, 240, 241, 241, nil, - nil, nil, 241, nil, 241, 241, 241, 241, 241, 241, - 241, nil, nil, nil, nil, nil, 241, 241, 241, 241, - 241, 241, 241, nil, nil, 241, nil, nil, nil, nil, - nil, nil, 241, nil, nil, 241, 241, 241, 241, 241, - 241, 241, 241, nil, 241, 241, 241, nil, 241, 241, - 241, 241, 241, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 241, nil, nil, 241, nil, nil, 241, 241, - nil, nil, 241, nil, nil, nil, nil, nil, 241, nil, - nil, nil, nil, nil, nil, nil, nil, 241, nil, nil, - nil, nil, 241, 241, 241, 241, nil, 241, 241, 241, - 241, nil, nil, nil, nil, 241, 241, nil, nil, nil, - 242, 242, 242, 241, 242, 241, 241, 241, 242, 242, - nil, nil, nil, 242, nil, 242, 242, 242, 242, 242, - 242, 242, nil, nil, nil, nil, nil, 242, 242, 242, - 242, 242, 242, 242, nil, nil, 242, nil, nil, nil, - nil, nil, nil, 242, nil, nil, 242, 242, 242, 242, - 242, 242, 242, 242, nil, 242, 242, 242, nil, 242, - 242, 242, 242, 242, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 242, nil, nil, 242, nil, nil, 242, - 242, nil, nil, 242, nil, nil, nil, nil, nil, 242, - nil, nil, nil, nil, nil, nil, nil, nil, 242, nil, - nil, nil, nil, 242, 242, 242, 242, nil, 242, 242, - 242, 242, nil, nil, nil, nil, 242, 242, nil, nil, - nil, 243, 243, 243, 242, 243, 242, 242, 242, 243, - 243, nil, nil, nil, 243, nil, 243, 243, 243, 243, - 243, 243, 243, nil, nil, nil, nil, nil, 243, 243, - 243, 243, 243, 243, 243, nil, nil, 243, nil, nil, - nil, nil, nil, nil, 243, nil, nil, 243, 243, 243, - 243, 243, 243, 243, 243, nil, 243, 243, 243, nil, - 243, 243, 243, 243, 243, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 243, nil, nil, 243, nil, nil, - 243, 243, nil, nil, 243, nil, nil, nil, nil, nil, - 243, nil, nil, nil, nil, nil, nil, nil, nil, 243, - nil, nil, nil, nil, 243, 243, 243, 243, nil, 243, - 243, 243, 243, nil, nil, nil, nil, 243, 243, nil, - nil, nil, 244, 244, 244, 243, 244, 243, 243, 243, - 244, 244, nil, nil, nil, 244, nil, 244, 244, 244, - 244, 244, 244, 244, nil, nil, nil, nil, nil, 244, - 244, 244, 244, 244, 244, 244, nil, nil, 244, nil, - nil, nil, nil, nil, nil, 244, nil, nil, 244, 244, - 244, 244, 244, 244, 244, 244, nil, 244, 244, 244, - nil, 244, 244, 244, 244, 244, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 244, nil, nil, 244, nil, - nil, 244, 244, nil, nil, 244, nil, nil, nil, nil, - nil, 244, nil, nil, nil, nil, nil, nil, nil, nil, - 244, nil, nil, nil, nil, 244, 244, 244, 244, nil, - 244, 244, 244, 244, nil, nil, nil, nil, 244, 244, - nil, nil, nil, 245, 245, 245, 244, 245, 244, 244, - 244, 245, 245, nil, nil, nil, 245, nil, 245, 245, - 245, 245, 245, 245, 245, nil, nil, nil, nil, nil, - 245, 245, 245, 245, 245, 245, 245, nil, nil, 245, - nil, nil, nil, nil, nil, nil, 245, nil, nil, 245, - 245, 245, 245, 245, 245, 245, 245, nil, 245, 245, - 245, nil, 245, 245, 245, 245, 245, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 245, nil, nil, 245, - nil, nil, 245, 245, nil, nil, 245, nil, nil, nil, - nil, nil, 245, nil, nil, nil, nil, nil, nil, nil, - nil, 245, nil, nil, nil, nil, 245, 245, 245, 245, - nil, 245, 245, 245, 245, nil, nil, nil, nil, 245, - 245, nil, nil, nil, 246, 246, 246, 245, 246, 245, - 245, 245, 246, 246, nil, nil, nil, 246, nil, 246, - 246, 246, 246, 246, 246, 246, nil, nil, nil, nil, - nil, 246, 246, 246, 246, 246, 246, 246, nil, nil, - 246, nil, nil, nil, nil, nil, nil, 246, nil, nil, - 246, 246, 246, 246, 246, 246, 246, 246, nil, 246, - 246, 246, nil, 246, 246, 246, 246, 246, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 246, nil, nil, - 246, nil, nil, 246, 246, nil, nil, 246, nil, nil, - nil, nil, nil, 246, nil, nil, nil, nil, nil, nil, - nil, nil, 246, nil, nil, nil, nil, 246, 246, 246, - 246, nil, 246, 246, 246, 246, nil, nil, nil, nil, - 246, 246, nil, nil, nil, 247, 247, 247, 246, 247, - 246, 246, 246, 247, 247, nil, nil, nil, 247, nil, - 247, 247, 247, 247, 247, 247, 247, nil, nil, nil, - nil, nil, 247, 247, 247, 247, 247, 247, 247, nil, - nil, 247, nil, nil, nil, nil, nil, nil, 247, nil, - nil, 247, 247, 247, 247, 247, 247, 247, 247, nil, - 247, 247, 247, nil, 247, 247, 247, 247, 247, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 247, nil, - nil, 247, nil, nil, 247, 247, nil, nil, 247, nil, - nil, nil, nil, nil, 247, nil, nil, nil, nil, nil, - nil, nil, nil, 247, nil, nil, nil, nil, 247, 247, - 247, 247, nil, 247, 247, 247, 247, nil, nil, nil, - nil, 247, 247, nil, nil, nil, 248, 248, 248, 247, - 248, 247, 247, 247, 248, 248, nil, nil, nil, 248, - nil, 248, 248, 248, 248, 248, 248, 248, nil, nil, - nil, nil, nil, 248, 248, 248, 248, 248, 248, 248, - nil, nil, 248, nil, nil, nil, nil, nil, nil, 248, - nil, nil, 248, 248, 248, 248, 248, 248, 248, 248, - nil, 248, 248, 248, nil, 248, 248, 248, 248, 248, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 248, - nil, nil, 248, nil, nil, 248, 248, nil, nil, 248, - nil, nil, nil, nil, nil, 248, nil, nil, nil, nil, - nil, nil, nil, nil, 248, nil, nil, nil, nil, 248, - 248, 248, 248, nil, 248, 248, 248, 248, nil, nil, - nil, nil, 248, 248, nil, nil, nil, 249, 249, 249, - 248, 249, 248, 248, 248, 249, 249, nil, nil, nil, - 249, nil, 249, 249, 249, 249, 249, 249, 249, nil, - nil, nil, nil, nil, 249, 249, 249, 249, 249, 249, - 249, nil, nil, 249, nil, nil, nil, nil, nil, nil, - 249, nil, nil, 249, 249, 249, 249, 249, 249, 249, - 249, nil, 249, 249, 249, nil, 249, 249, 249, 249, - 249, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 249, nil, nil, 249, nil, nil, 249, 249, nil, nil, - 249, nil, nil, nil, nil, nil, 249, nil, nil, nil, - nil, nil, nil, nil, nil, 249, nil, nil, nil, nil, - 249, 249, 249, 249, nil, 249, 249, 249, 249, nil, - nil, nil, nil, 249, 249, nil, nil, nil, 250, 250, - 250, 249, 250, 249, 249, 249, 250, 250, nil, nil, - nil, 250, nil, 250, 250, 250, 250, 250, 250, 250, - nil, nil, nil, nil, nil, 250, 250, 250, 250, 250, - 250, 250, nil, nil, 250, nil, nil, nil, nil, nil, - nil, 250, nil, nil, 250, 250, 250, 250, 250, 250, - 250, 250, nil, 250, 250, 250, nil, 250, 250, 250, - 250, 250, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 250, nil, nil, 250, nil, nil, 250, 250, nil, - nil, 250, nil, nil, nil, nil, nil, 250, nil, nil, - nil, nil, nil, nil, nil, nil, 250, nil, nil, nil, - nil, 250, 250, 250, 250, nil, 250, 250, 250, 250, - nil, nil, nil, nil, 250, 250, nil, nil, nil, 251, - 251, 251, 250, 251, 250, 250, 250, 251, 251, nil, - nil, nil, 251, nil, 251, 251, 251, 251, 251, 251, - 251, nil, nil, nil, nil, nil, 251, 251, 251, 251, - 251, 251, 251, nil, nil, 251, nil, nil, nil, nil, - nil, nil, 251, nil, nil, 251, 251, 251, 251, 251, - 251, 251, 251, nil, 251, 251, 251, nil, 251, 251, - 251, 251, 251, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 251, nil, nil, 251, nil, nil, 251, 251, - nil, nil, 251, nil, nil, nil, nil, nil, 251, nil, - nil, nil, nil, nil, nil, nil, nil, 251, nil, nil, - nil, nil, 251, 251, 251, 251, nil, 251, 251, 251, - 251, nil, nil, nil, nil, 251, 251, nil, nil, nil, - 252, 252, 252, 251, 252, 251, 251, 251, 252, 252, - nil, nil, nil, 252, nil, 252, 252, 252, 252, 252, - 252, 252, nil, nil, nil, nil, nil, 252, 252, 252, - 252, 252, 252, 252, nil, nil, 252, nil, nil, nil, - nil, nil, nil, 252, nil, nil, 252, 252, 252, 252, - 252, 252, 252, 252, nil, 252, 252, 252, nil, 252, - 252, 252, 252, 252, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 252, nil, nil, 252, nil, nil, 252, - 252, nil, nil, 252, nil, nil, nil, nil, nil, 252, - nil, nil, nil, nil, nil, nil, nil, nil, 252, nil, - nil, nil, nil, 252, 252, 252, 252, nil, 252, 252, - 252, 252, nil, nil, nil, nil, 252, 252, nil, nil, - nil, 253, 253, 253, 252, 253, 252, 252, 252, 253, - 253, nil, nil, nil, 253, nil, 253, 253, 253, 253, - 253, 253, 253, nil, nil, nil, nil, nil, 253, 253, - 253, 253, 253, 253, 253, nil, nil, 253, nil, nil, - nil, nil, nil, nil, 253, nil, nil, 253, 253, 253, - 253, 253, 253, 253, 253, nil, 253, 253, 253, nil, - 253, 253, 253, 253, 253, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 253, nil, nil, 253, nil, nil, - 253, 253, nil, nil, 253, nil, nil, nil, nil, nil, - 253, nil, nil, nil, nil, nil, nil, nil, nil, 253, - nil, nil, nil, nil, 253, 253, 253, 253, nil, 253, - 253, 253, 253, nil, nil, nil, nil, 253, 253, nil, - nil, nil, 254, 254, 254, 253, 254, 253, 253, 253, - 254, 254, nil, nil, nil, 254, nil, 254, 254, 254, - 254, 254, 254, 254, nil, nil, nil, nil, nil, 254, - 254, 254, 254, 254, 254, 254, nil, nil, 254, nil, - nil, nil, nil, nil, nil, 254, nil, nil, 254, 254, - 254, 254, 254, 254, 254, 254, nil, 254, 254, 254, - nil, 254, 254, 254, 254, 254, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 254, nil, nil, 254, nil, - nil, 254, 254, nil, nil, 254, nil, nil, nil, nil, - nil, 254, nil, nil, nil, nil, nil, nil, nil, nil, - 254, nil, nil, nil, nil, 254, 254, 254, 254, nil, - 254, 254, 254, 254, nil, nil, nil, nil, 254, 254, - nil, nil, nil, 255, 255, 255, 254, 255, 254, 254, - 254, 255, 255, nil, nil, nil, 255, nil, 255, 255, - 255, 255, 255, 255, 255, nil, nil, nil, nil, nil, - 255, 255, 255, 255, 255, 255, 255, nil, nil, 255, - nil, nil, nil, nil, nil, nil, 255, nil, nil, 255, - 255, 255, 255, 255, 255, 255, 255, nil, 255, 255, - 255, nil, 255, 255, 255, 255, 255, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 255, nil, nil, 255, - nil, nil, 255, 255, nil, nil, 255, nil, nil, nil, - nil, nil, 255, nil, nil, nil, nil, nil, nil, nil, - nil, 255, nil, nil, nil, nil, 255, 255, 255, 255, - nil, 255, 255, 255, 255, nil, nil, nil, nil, 255, - 255, nil, nil, nil, 256, 256, 256, 255, 256, 255, - 255, 255, 256, 256, nil, nil, nil, 256, nil, 256, - 256, 256, 256, 256, 256, 256, nil, nil, nil, nil, - nil, 256, 256, 256, 256, 256, 256, 256, nil, nil, - 256, nil, nil, nil, nil, nil, nil, 256, nil, nil, - 256, 256, 256, 256, 256, 256, 256, 256, nil, 256, - 256, 256, nil, 256, 256, 256, 256, 256, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 256, nil, nil, - 256, nil, nil, 256, 256, nil, nil, 256, nil, nil, - nil, nil, nil, 256, nil, nil, nil, nil, nil, nil, - nil, nil, 256, nil, nil, nil, nil, 256, 256, 256, - 256, nil, 256, 256, 256, 256, nil, nil, nil, nil, - 256, 256, nil, nil, nil, 257, 257, 257, 256, 257, - 256, 256, 256, 257, 257, nil, nil, nil, 257, nil, - 257, 257, 257, 257, 257, 257, 257, nil, nil, nil, - nil, nil, 257, 257, 257, 257, 257, 257, 257, nil, - nil, 257, nil, nil, nil, nil, nil, nil, 257, nil, - nil, 257, 257, 257, 257, 257, 257, 257, 257, nil, - 257, 257, 257, nil, 257, 257, 257, 257, 257, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 257, nil, - nil, 257, nil, nil, 257, 257, nil, nil, 257, nil, - nil, nil, nil, nil, 257, nil, nil, nil, nil, nil, - nil, nil, nil, 257, nil, nil, nil, nil, 257, 257, - 257, 257, nil, 257, 257, 257, 257, nil, nil, nil, - nil, 257, 257, nil, nil, nil, 258, 258, 258, 257, - 258, 257, 257, 257, 258, 258, nil, nil, nil, 258, - nil, 258, 258, 258, 258, 258, 258, 258, nil, nil, - nil, nil, nil, 258, 258, 258, 258, 258, 258, 258, - nil, nil, 258, nil, nil, nil, nil, nil, nil, 258, - nil, nil, 258, 258, 258, 258, 258, 258, 258, 258, - nil, 258, 258, 258, nil, 258, 258, 258, 258, 258, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 258, - nil, nil, 258, nil, nil, 258, 258, nil, nil, 258, - nil, nil, nil, nil, nil, 258, nil, nil, nil, nil, - nil, nil, nil, nil, 258, nil, nil, nil, nil, 258, - 258, 258, 258, nil, 258, 258, 258, 258, nil, nil, - nil, nil, 258, 258, nil, nil, nil, 259, 259, 259, - 258, 259, 258, 258, 258, 259, 259, nil, nil, nil, - 259, nil, 259, 259, 259, 259, 259, 259, 259, nil, - nil, nil, nil, nil, 259, 259, 259, 259, 259, 259, - 259, nil, nil, 259, nil, nil, nil, nil, nil, nil, - 259, nil, nil, 259, 259, 259, 259, 259, 259, 259, - 259, nil, 259, 259, 259, nil, 259, 259, 259, 259, - 259, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 259, nil, nil, 259, nil, nil, 259, 259, nil, nil, - 259, nil, nil, nil, nil, nil, 259, nil, nil, nil, - nil, nil, nil, nil, nil, 259, nil, nil, nil, nil, - 259, 259, 259, 259, nil, 259, 259, 259, 259, nil, - nil, nil, nil, 259, 259, nil, nil, nil, 260, 260, - 260, 259, 260, 259, 259, 259, 260, 260, nil, nil, - nil, 260, nil, 260, 260, 260, 260, 260, 260, 260, - nil, nil, nil, nil, nil, 260, 260, 260, 260, 260, - 260, 260, nil, nil, 260, nil, nil, nil, nil, nil, - nil, 260, nil, nil, 260, 260, 260, 260, 260, 260, - 260, 260, nil, 260, 260, 260, nil, 260, 260, 260, - 260, 260, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 260, nil, nil, 260, nil, nil, 260, 260, nil, - nil, 260, nil, nil, nil, nil, nil, 260, nil, nil, - nil, nil, nil, nil, nil, nil, 260, nil, nil, nil, - nil, 260, 260, 260, 260, nil, 260, 260, 260, 260, - nil, nil, nil, nil, 260, 260, nil, nil, nil, 265, - 265, 265, 260, 265, 260, 260, 260, 265, 265, nil, - nil, nil, 265, nil, 265, 265, 265, 265, 265, 265, - 265, nil, nil, nil, nil, nil, 265, 265, 265, 265, - 265, 265, 265, nil, nil, 265, nil, nil, nil, nil, - nil, nil, 265, nil, nil, 265, 265, 265, 265, 265, - 265, 265, 265, nil, 265, 265, 265, nil, 265, 265, - 265, 265, 265, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 265, nil, nil, 265, nil, nil, 265, 265, - nil, nil, 265, nil, nil, nil, nil, nil, 265, nil, - nil, nil, nil, nil, nil, nil, nil, 265, nil, nil, - nil, nil, 265, 265, 265, 265, nil, 265, 265, 265, - 265, nil, nil, nil, nil, 265, 265, nil, nil, nil, - 272, 272, 272, 265, 272, 265, 265, 265, 272, 272, - nil, nil, nil, 272, nil, 272, 272, 272, 272, 272, - 272, 272, nil, nil, nil, nil, nil, 272, 272, 272, - 272, 272, 272, 272, nil, nil, 272, nil, nil, nil, - nil, nil, nil, 272, nil, nil, 272, 272, 272, 272, - 272, 272, 272, 272, 272, 272, 272, 272, nil, 272, - 272, 272, 272, 272, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 272, nil, nil, 272, nil, nil, 272, - 272, nil, nil, 272, nil, 272, nil, 272, nil, 272, - nil, nil, 272, nil, nil, nil, nil, nil, 272, nil, - nil, nil, nil, 272, 272, 272, 272, nil, 272, 272, - 272, 272, nil, nil, nil, nil, 272, 272, nil, nil, - nil, 273, 273, 273, 272, 273, 272, 272, 272, 273, - 273, nil, nil, nil, 273, nil, 273, 273, 273, 273, - 273, 273, 273, nil, nil, nil, nil, nil, 273, 273, - 273, 273, 273, 273, 273, nil, nil, 273, nil, nil, - nil, nil, nil, nil, 273, nil, nil, 273, 273, 273, - 273, 273, 273, 273, 273, 273, 273, 273, 273, nil, - 273, 273, 273, 273, 273, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 273, nil, nil, 273, nil, nil, - 273, 273, nil, nil, 273, nil, 273, nil, 273, nil, - 273, nil, nil, 273, nil, nil, nil, nil, nil, 273, - nil, nil, nil, nil, 273, 273, 273, 273, nil, 273, - 273, 273, 273, nil, nil, nil, nil, 273, 273, nil, - nil, nil, 281, 281, 281, 273, 281, 273, 273, 273, - 281, 281, nil, nil, nil, 281, nil, 281, 281, 281, - 281, 281, 281, 281, nil, nil, nil, nil, nil, 281, - 281, 281, 281, 281, 281, 281, nil, nil, 281, nil, - nil, nil, nil, nil, nil, 281, nil, nil, 281, 281, - 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, - nil, 281, 281, 281, 281, 281, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 281, nil, nil, 281, nil, - nil, 281, 281, nil, nil, 281, nil, 281, nil, 281, - nil, 281, nil, nil, 281, nil, nil, nil, nil, nil, - 281, nil, nil, nil, nil, 281, 281, 281, 281, nil, - 281, 281, 281, 281, nil, nil, nil, nil, 281, 281, - 281, nil, nil, 288, 288, 288, 281, 288, 281, 281, - 281, 288, 288, nil, nil, nil, 288, nil, 288, 288, - 288, 288, 288, 288, 288, nil, nil, nil, nil, nil, - 288, 288, 288, 288, 288, 288, 288, nil, nil, 288, - nil, nil, nil, nil, nil, nil, 288, nil, nil, 288, - 288, 288, 288, 288, 288, 288, 288, nil, 288, 288, - 288, nil, 288, 288, 288, 288, 288, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 288, nil, nil, 288, - nil, nil, 288, 288, nil, nil, 288, nil, nil, nil, - nil, nil, 288, nil, nil, nil, nil, nil, nil, nil, - nil, 288, nil, nil, nil, nil, 288, 288, 288, 288, - nil, 288, 288, 288, 288, nil, nil, nil, nil, 288, - 288, nil, nil, nil, 290, 290, 290, 288, 290, 288, - 288, 288, 290, 290, nil, nil, nil, 290, nil, 290, - 290, 290, 290, 290, 290, 290, nil, nil, nil, nil, - nil, 290, 290, 290, 290, 290, 290, 290, nil, nil, - 290, nil, nil, nil, nil, nil, nil, 290, nil, nil, - 290, 290, 290, 290, 290, 290, 290, 290, nil, 290, - 290, 290, nil, 290, 290, 290, 290, 290, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 290, nil, nil, - 290, nil, nil, 290, 290, nil, nil, 290, nil, nil, - nil, nil, nil, 290, nil, nil, nil, nil, nil, nil, - nil, nil, 290, nil, nil, nil, nil, 290, 290, 290, - 290, nil, 290, 290, 290, 290, nil, nil, nil, nil, - 290, 290, nil, nil, nil, 293, 293, 293, 290, 293, - 290, 290, 290, 293, 293, nil, nil, nil, 293, nil, - 293, 293, 293, 293, 293, 293, 293, nil, nil, nil, - nil, nil, 293, 293, 293, 293, 293, 293, 293, nil, - nil, 293, nil, nil, nil, nil, nil, nil, 293, nil, - nil, 293, 293, 293, 293, 293, 293, 293, 293, nil, - 293, 293, 293, nil, 293, 293, 293, 293, 293, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 293, nil, - nil, 293, nil, nil, 293, 293, nil, nil, 293, nil, - nil, nil, nil, nil, 293, nil, nil, nil, nil, nil, - nil, nil, nil, 293, nil, nil, nil, nil, 293, 293, - 293, 293, nil, 293, 293, 293, 293, nil, nil, nil, - nil, 293, 293, nil, nil, nil, 294, 294, 294, 293, - 294, 293, 293, 293, 294, 294, nil, nil, nil, 294, - nil, 294, 294, 294, 294, 294, 294, 294, nil, nil, - nil, nil, nil, 294, 294, 294, 294, 294, 294, 294, - nil, nil, 294, nil, nil, nil, nil, nil, nil, 294, - nil, nil, 294, 294, 294, 294, 294, 294, 294, 294, - nil, 294, 294, 294, nil, 294, 294, 294, 294, 294, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 294, - nil, nil, 294, nil, nil, 294, 294, nil, nil, 294, - nil, nil, nil, nil, nil, 294, nil, nil, nil, nil, - nil, nil, nil, nil, 294, nil, nil, nil, nil, 294, - 294, 294, 294, nil, 294, 294, 294, 294, nil, nil, - nil, nil, 294, 294, nil, nil, nil, nil, nil, nil, - 294, nil, 294, 294, 294, 299, 299, 299, 299, 299, - nil, nil, nil, 299, 299, nil, nil, nil, 299, nil, - 299, 299, 299, 299, 299, 299, 299, nil, nil, nil, - nil, nil, 299, 299, 299, 299, 299, 299, 299, nil, - nil, 299, nil, nil, nil, nil, nil, 299, 299, nil, - 299, 299, 299, 299, 299, 299, 299, 299, 299, nil, - 299, 299, 299, nil, 299, 299, 299, 299, 299, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 299, nil, - nil, 299, nil, nil, 299, 299, nil, nil, 299, nil, - 299, nil, nil, nil, 299, nil, nil, nil, nil, nil, - nil, nil, nil, 299, nil, nil, nil, nil, 299, 299, - 299, 299, nil, 299, 299, 299, 299, nil, nil, nil, - nil, 299, 299, nil, nil, nil, 307, 307, 307, 299, - 307, 299, 299, 299, 307, 307, nil, nil, nil, 307, - nil, 307, 307, 307, 307, 307, 307, 307, nil, nil, - nil, nil, nil, 307, 307, 307, 307, 307, 307, 307, - nil, nil, 307, nil, nil, nil, nil, nil, nil, 307, - nil, nil, 307, 307, 307, 307, 307, 307, 307, 307, - nil, 307, 307, 307, nil, 307, 307, nil, nil, 307, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 307, - nil, nil, 307, nil, nil, 307, 307, nil, nil, 307, - nil, nil, 939, nil, 939, 939, 939, 939, 939, nil, - nil, nil, nil, nil, nil, nil, nil, 939, nil, 307, - 307, 307, 307, nil, 307, 307, 307, 307, nil, nil, - nil, nil, 307, 307, nil, nil, nil, 307, nil, 939, - 307, nil, 307, 307, 307, 324, 324, 324, nil, 324, - 939, 939, nil, 324, 324, 939, nil, nil, 324, nil, - 324, 324, 324, 324, 324, 324, 324, nil, nil, nil, - nil, nil, 324, 324, 324, 324, 324, 324, 324, nil, - nil, 324, nil, nil, nil, nil, nil, nil, 324, nil, - nil, 324, 324, 324, 324, 324, 324, 324, 324, nil, - 324, 324, 324, nil, 324, 324, nil, nil, 324, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 324, nil, - nil, 324, nil, nil, 324, 324, nil, nil, 324, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 324, 324, - 324, 324, nil, 324, 324, 324, 324, nil, nil, nil, - nil, 324, 324, nil, nil, nil, 331, 331, 331, 324, - 331, 324, 324, 324, 331, 331, nil, nil, nil, 331, - nil, 331, 331, 331, 331, 331, 331, 331, nil, nil, - nil, nil, nil, 331, 331, 331, 331, 331, 331, 331, - nil, nil, 331, nil, nil, nil, nil, nil, nil, 331, - nil, nil, 331, 331, 331, 331, 331, 331, 331, 331, - nil, 331, 331, 331, nil, 331, 331, 331, 331, 331, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 331, - nil, nil, 331, nil, nil, 331, 331, nil, nil, 331, - nil, nil, nil, nil, nil, 331, nil, nil, nil, nil, - nil, nil, nil, nil, 331, nil, nil, nil, nil, 331, - 331, 331, 331, nil, 331, 331, 331, 331, nil, nil, - nil, nil, 331, 331, nil, nil, nil, 333, 333, 333, - 331, 333, 331, 331, 331, 333, 333, nil, nil, nil, - 333, nil, 333, 333, 333, 333, 333, 333, 333, nil, - nil, nil, nil, nil, 333, 333, 333, 333, 333, 333, - 333, nil, nil, 333, nil, nil, nil, nil, nil, nil, - 333, nil, nil, 333, 333, 333, 333, 333, 333, 333, - 333, nil, 333, 333, 333, nil, 333, 333, 333, 333, - 333, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 333, nil, nil, 333, 333, nil, 333, 333, nil, nil, - 333, nil, nil, nil, nil, nil, 333, nil, nil, nil, - nil, nil, nil, nil, nil, 333, nil, nil, nil, nil, - 333, 333, 333, 333, nil, 333, 333, 333, 333, nil, - nil, nil, nil, 333, 333, nil, nil, nil, 349, 349, - 349, 333, 349, 333, 333, 333, 349, 349, nil, nil, - nil, 349, nil, 349, 349, 349, 349, 349, 349, 349, - nil, nil, nil, nil, nil, 349, 349, 349, 349, 349, - 349, 349, nil, nil, 349, nil, nil, nil, nil, nil, - nil, 349, nil, nil, 349, 349, 349, 349, 349, 349, - 349, 349, nil, 349, 349, 349, nil, 349, 349, 349, - 349, 349, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 349, nil, nil, 349, nil, nil, 349, 349, nil, - nil, 349, nil, nil, nil, nil, nil, 349, nil, nil, - nil, nil, nil, nil, nil, nil, 349, nil, nil, nil, - nil, 349, 349, 349, 349, nil, 349, 349, 349, 349, - nil, nil, nil, nil, 349, 349, nil, nil, nil, 370, - 370, 370, 349, 370, 349, 349, 349, 370, 370, nil, - nil, nil, 370, nil, 370, 370, 370, 370, 370, 370, - 370, nil, nil, nil, nil, nil, 370, 370, 370, 370, - 370, 370, 370, nil, nil, 370, nil, nil, nil, nil, - nil, nil, 370, nil, nil, 370, 370, 370, 370, 370, - 370, 370, 370, nil, 370, 370, 370, nil, 370, 370, - 370, 370, 370, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 370, nil, nil, 370, nil, nil, 370, 370, - nil, nil, 370, nil, nil, nil, nil, nil, 370, nil, - nil, nil, nil, nil, nil, nil, nil, 370, nil, nil, - nil, nil, 370, 370, 370, 370, nil, 370, 370, 370, - 370, nil, nil, nil, nil, 370, 370, nil, nil, nil, - 386, 386, 386, 370, 386, 370, 370, 370, 386, 386, - nil, nil, nil, 386, nil, 386, 386, 386, 386, 386, - 386, 386, nil, nil, nil, nil, nil, 386, 386, 386, - 386, 386, 386, 386, nil, nil, 386, nil, nil, nil, - nil, nil, nil, 386, nil, nil, 386, 386, 386, 386, - 386, 386, 386, 386, nil, 386, 386, 386, nil, 386, - 386, 386, 386, 386, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 386, nil, nil, 386, nil, nil, 386, - 386, nil, nil, 386, nil, nil, nil, nil, nil, 386, - nil, nil, nil, nil, nil, nil, nil, nil, 386, nil, - nil, nil, nil, 386, 386, 386, 386, nil, 386, 386, - 386, 386, nil, nil, nil, nil, 386, 386, nil, nil, - nil, 414, 414, 414, 386, 414, 386, 386, 386, 414, - 414, nil, nil, nil, 414, nil, 414, 414, 414, 414, - 414, 414, 414, nil, nil, nil, nil, nil, 414, 414, - 414, 414, 414, 414, 414, nil, nil, 414, nil, nil, - nil, nil, nil, nil, 414, nil, nil, 414, 414, 414, - 414, 414, 414, 414, 414, nil, 414, 414, 414, nil, - 414, 414, 414, 414, 414, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 414, nil, nil, 414, nil, nil, - 414, 414, nil, nil, 414, nil, nil, nil, nil, nil, - 414, nil, nil, nil, nil, nil, nil, nil, nil, 414, - nil, nil, nil, nil, 414, 414, 414, 414, nil, 414, - 414, 414, 414, nil, nil, nil, nil, 414, 414, nil, - nil, nil, 457, 457, 457, 414, 457, 414, 414, 414, - 457, 457, nil, nil, nil, 457, nil, 457, 457, 457, - 457, 457, 457, 457, nil, nil, nil, nil, nil, 457, - 457, 457, 457, 457, 457, 457, nil, nil, 457, nil, - nil, nil, nil, nil, nil, 457, nil, nil, 457, 457, - 457, 457, 457, 457, 457, 457, 457, 457, 457, 457, - nil, 457, 457, 457, 457, 457, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 457, nil, nil, 457, nil, - nil, 457, 457, nil, nil, 457, nil, 457, nil, 457, - nil, 457, nil, nil, 457, nil, nil, nil, nil, nil, - 457, nil, nil, nil, nil, 457, 457, 457, 457, nil, - 457, 457, 457, 457, nil, nil, nil, nil, 457, 457, - nil, nil, nil, 459, 459, 459, 457, 459, 457, 457, - 457, 459, 459, nil, nil, nil, 459, nil, 459, 459, - 459, 459, 459, 459, 459, nil, nil, nil, nil, nil, - 459, 459, 459, 459, 459, 459, 459, nil, nil, 459, - nil, nil, nil, nil, nil, nil, 459, nil, nil, 459, - 459, 459, 459, 459, 459, 459, 459, nil, 459, 459, - 459, nil, 459, 459, 459, 459, 459, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 459, nil, nil, 459, - nil, nil, 459, 459, nil, nil, 459, nil, nil, nil, - nil, nil, 459, nil, nil, nil, nil, nil, nil, nil, - nil, 459, nil, nil, nil, nil, 459, 459, 459, 459, - nil, 459, 459, 459, 459, nil, nil, nil, nil, 459, - 459, nil, nil, nil, 460, 460, 460, 459, 460, 459, - 459, 459, 460, 460, nil, nil, nil, 460, nil, 460, - 460, 460, 460, 460, 460, 460, nil, nil, nil, nil, - nil, 460, 460, 460, 460, 460, 460, 460, nil, nil, - 460, nil, nil, nil, nil, nil, nil, 460, nil, nil, - 460, 460, 460, 460, 460, 460, 460, 460, nil, 460, - 460, 460, nil, 460, 460, 460, 460, 460, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 460, nil, nil, - 460, nil, nil, 460, 460, nil, nil, 460, nil, nil, - nil, nil, nil, 460, nil, nil, nil, nil, nil, nil, - nil, nil, 460, nil, nil, nil, nil, 460, 460, 460, - 460, nil, 460, 460, 460, 460, nil, nil, nil, nil, - 460, 460, nil, nil, nil, 461, 461, 461, 460, 461, - 460, 460, 460, 461, 461, nil, nil, nil, 461, nil, - 461, 461, 461, 461, 461, 461, 461, nil, nil, nil, - nil, nil, 461, 461, 461, 461, 461, 461, 461, nil, - nil, 461, nil, nil, nil, nil, nil, nil, 461, nil, - nil, 461, 461, 461, 461, 461, 461, 461, 461, nil, - 461, 461, 461, nil, 461, 461, 461, 461, 461, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 461, nil, - nil, 461, nil, nil, 461, 461, nil, nil, 461, nil, - nil, nil, nil, nil, 461, nil, nil, nil, nil, nil, - nil, nil, nil, 461, nil, nil, nil, nil, 461, 461, - 461, 461, nil, 461, 461, 461, 461, nil, nil, nil, - nil, 461, 461, nil, nil, nil, 498, 498, 498, 461, - 498, 461, 461, 461, 498, 498, nil, nil, nil, 498, - nil, 498, 498, 498, 498, 498, 498, 498, nil, nil, - nil, nil, nil, 498, 498, 498, 498, 498, 498, 498, - nil, nil, 498, nil, nil, nil, nil, nil, nil, 498, - nil, nil, 498, 498, 498, 498, 498, 498, 498, 498, - 498, 498, 498, 498, nil, 498, 498, 498, 498, 498, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 498, - nil, nil, 498, nil, nil, 498, 498, nil, nil, 498, - nil, 498, nil, 498, nil, 498, nil, nil, 498, nil, - nil, nil, nil, nil, 498, nil, nil, nil, nil, 498, - 498, 498, 498, nil, 498, 498, 498, 498, nil, nil, - nil, nil, 498, 498, nil, nil, nil, 500, 500, 500, - 498, 500, 498, 498, 498, 500, 500, nil, nil, nil, - 500, nil, 500, 500, 500, 500, 500, 500, 500, nil, - nil, nil, nil, nil, 500, 500, 500, 500, 500, 500, - 500, nil, nil, 500, nil, nil, nil, nil, nil, nil, - 500, nil, nil, 500, 500, 500, 500, 500, 500, 500, - 500, 500, 500, 500, 500, nil, 500, 500, 500, 500, - 500, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 500, nil, nil, 500, nil, nil, 500, 500, nil, nil, - 500, nil, nil, nil, 500, nil, 500, nil, nil, 500, - nil, nil, nil, nil, nil, 500, nil, nil, nil, nil, - 500, 500, 500, 500, nil, 500, 500, 500, 500, nil, - nil, nil, nil, 500, 500, nil, nil, nil, 502, 502, - 502, 500, 502, 500, 500, 500, 502, 502, nil, nil, - nil, 502, nil, 502, 502, 502, 502, 502, 502, 502, - nil, nil, nil, nil, nil, 502, 502, 502, 502, 502, - 502, 502, nil, nil, 502, nil, nil, nil, nil, nil, - nil, 502, nil, nil, 502, 502, 502, 502, 502, 502, - 502, 502, nil, 502, 502, 502, nil, 502, 502, 502, - 502, 502, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 502, nil, nil, 502, nil, nil, 502, 502, nil, - nil, 502, nil, nil, nil, nil, nil, 502, nil, nil, - nil, nil, nil, nil, nil, nil, 502, nil, nil, nil, - nil, 502, 502, 502, 502, nil, 502, 502, 502, 502, - nil, nil, nil, nil, 502, 502, nil, nil, nil, nil, - nil, nil, 502, nil, 502, 502, 502, 508, 508, 508, - 508, 508, nil, nil, nil, 508, 508, nil, nil, nil, - 508, nil, 508, 508, 508, 508, 508, 508, 508, nil, - nil, nil, nil, nil, 508, 508, 508, 508, 508, 508, - 508, nil, nil, 508, nil, nil, nil, nil, nil, 508, - 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, - 508, nil, 508, 508, 508, nil, 508, 508, 508, 508, - 508, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 508, nil, nil, 508, nil, nil, 508, 508, nil, nil, - 508, nil, 508, nil, nil, nil, 508, nil, nil, nil, - nil, nil, nil, nil, nil, 508, nil, nil, nil, nil, - 508, 508, 508, 508, nil, 508, 508, 508, 508, nil, - nil, nil, nil, 508, 508, nil, nil, nil, nil, nil, - 508, 508, nil, 508, 508, 508, 516, 516, 516, nil, - 516, nil, nil, nil, 516, 516, nil, nil, nil, 516, - nil, 516, 516, 516, 516, 516, 516, 516, nil, nil, - nil, nil, nil, 516, 516, 516, 516, 516, 516, 516, - nil, nil, 516, nil, nil, nil, nil, nil, nil, 516, - nil, nil, 516, 516, 516, 516, 516, 516, 516, 516, - nil, 516, 516, 516, nil, 516, 516, nil, nil, 516, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 516, - nil, nil, 516, nil, nil, 516, 516, nil, nil, 516, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 516, - 516, 516, 516, nil, 516, 516, 516, 516, nil, nil, - nil, nil, 516, 516, nil, nil, nil, 518, 518, 518, - 516, 518, 516, 516, 516, 518, 518, nil, nil, nil, - 518, nil, 518, 518, 518, 518, 518, 518, 518, nil, - nil, nil, nil, nil, 518, 518, 518, 518, 518, 518, - 518, nil, nil, 518, nil, nil, nil, nil, nil, nil, - 518, nil, nil, 518, 518, 518, 518, 518, 518, 518, - 518, 518, 518, 518, 518, nil, 518, 518, 518, 518, - 518, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 518, nil, nil, 518, nil, nil, 518, 518, nil, nil, - 518, nil, 518, nil, 518, nil, 518, nil, nil, 518, - nil, nil, nil, nil, nil, 518, nil, nil, nil, nil, - 518, 518, 518, 518, nil, 518, 518, 518, 518, nil, - nil, nil, nil, 518, 518, nil, nil, nil, 524, 524, - 524, 518, 524, 518, 518, 518, 524, 524, nil, nil, - nil, 524, nil, 524, 524, 524, 524, 524, 524, 524, - nil, nil, nil, nil, nil, 524, 524, 524, 524, 524, - 524, 524, nil, nil, 524, nil, nil, nil, nil, nil, - nil, 524, nil, nil, 524, 524, 524, 524, 524, 524, - 524, 524, nil, 524, 524, 524, nil, 524, 524, nil, - nil, 524, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 524, nil, nil, 524, nil, nil, 524, 524, nil, - nil, 524, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 524, 524, 524, 524, nil, 524, 524, 524, 524, - nil, nil, nil, nil, 524, 524, nil, nil, nil, 527, - 527, 527, 524, 527, 524, 524, 524, 527, 527, nil, - nil, nil, 527, nil, 527, 527, 527, 527, 527, 527, - 527, nil, nil, nil, nil, nil, 527, 527, 527, 527, - 527, 527, 527, nil, nil, 527, nil, nil, nil, nil, - nil, nil, 527, nil, nil, 527, 527, 527, 527, 527, - 527, 527, 527, nil, 527, 527, 527, nil, 527, 527, - 527, 527, 527, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 527, nil, nil, 527, nil, nil, 527, 527, - nil, nil, 527, nil, nil, nil, nil, nil, 527, nil, - nil, nil, nil, nil, nil, nil, nil, 527, nil, nil, - nil, nil, 527, 527, 527, 527, nil, 527, 527, 527, - 527, nil, nil, nil, nil, 527, 527, nil, nil, nil, - 528, 528, 528, 527, 528, 527, 527, 527, 528, 528, - nil, nil, nil, 528, nil, 528, 528, 528, 528, 528, - 528, 528, nil, nil, nil, nil, nil, 528, 528, 528, - 528, 528, 528, 528, nil, nil, 528, nil, nil, nil, - nil, nil, nil, 528, nil, nil, 528, 528, 528, 528, - 528, 528, 528, 528, nil, 528, 528, 528, nil, 528, - 528, 528, 528, 528, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 528, nil, nil, 528, nil, nil, 528, - 528, nil, nil, 528, nil, nil, nil, nil, nil, 528, - nil, nil, nil, nil, nil, nil, nil, nil, 528, nil, - nil, nil, nil, 528, 528, 528, 528, nil, 528, 528, - 528, 528, nil, nil, nil, nil, 528, 528, nil, nil, - nil, 533, 533, 533, 528, 533, 528, 528, 528, 533, - 533, nil, nil, nil, 533, nil, 533, 533, 533, 533, - 533, 533, 533, nil, nil, nil, nil, nil, 533, 533, - 533, 533, 533, 533, 533, nil, nil, 533, nil, nil, - nil, nil, nil, nil, 533, nil, nil, 533, 533, 533, - 533, 533, 533, 533, 533, nil, 533, 533, 533, nil, - 533, 533, 533, 533, 533, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 533, nil, nil, 533, nil, nil, - 533, 533, nil, nil, 533, nil, nil, nil, nil, nil, - 533, nil, nil, nil, nil, nil, nil, nil, nil, 533, - nil, nil, nil, nil, 533, 533, 533, 533, nil, 533, - 533, 533, 533, nil, nil, nil, nil, 533, 533, nil, - nil, nil, 539, 539, 539, 533, 539, 533, 533, 533, - 539, 539, nil, nil, nil, 539, nil, 539, 539, 539, - 539, 539, 539, 539, nil, nil, nil, nil, nil, 539, - 539, 539, 539, 539, 539, 539, nil, nil, 539, nil, - nil, nil, nil, nil, nil, 539, nil, nil, 539, 539, - 539, 539, 539, 539, 539, 539, 539, 539, 539, 539, - nil, 539, 539, 539, 539, 539, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 539, nil, nil, 539, nil, - nil, 539, 539, nil, nil, 539, nil, 539, nil, nil, - nil, 539, nil, nil, 539, nil, nil, nil, nil, nil, - 539, nil, nil, nil, nil, 539, 539, 539, 539, nil, - 539, 539, 539, 539, nil, nil, nil, nil, 539, 539, - nil, nil, nil, 542, 542, 542, 539, 542, 539, 539, - 539, 542, 542, nil, nil, nil, 542, nil, 542, 542, - 542, 542, 542, 542, 542, nil, nil, nil, nil, nil, - 542, 542, 542, 542, 542, 542, 542, nil, nil, 542, - nil, nil, nil, nil, nil, nil, 542, nil, nil, 542, - 542, 542, 542, 542, 542, 542, 542, 542, 542, 542, - 542, nil, 542, 542, 542, 542, 542, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 542, nil, nil, 542, - nil, nil, 542, 542, nil, nil, 542, nil, nil, nil, - nil, nil, 542, nil, nil, 542, nil, nil, nil, nil, - nil, 542, nil, nil, nil, nil, 542, 542, 542, 542, - nil, 542, 542, 542, 542, nil, nil, nil, nil, 542, - 542, nil, nil, nil, 557, 557, 557, 542, 557, 542, - 542, 542, 557, 557, nil, nil, nil, 557, nil, 557, - 557, 557, 557, 557, 557, 557, nil, nil, nil, nil, - nil, 557, 557, 557, 557, 557, 557, 557, nil, nil, - 557, nil, nil, nil, nil, nil, nil, 557, nil, nil, - 557, 557, 557, 557, 557, 557, 557, 557, nil, 557, - 557, 557, nil, 557, 557, 557, 557, 557, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 557, nil, nil, - 557, nil, nil, 557, 557, nil, nil, 557, nil, 557, - nil, nil, nil, 557, nil, nil, nil, nil, nil, nil, - nil, nil, 557, nil, nil, nil, nil, 557, 557, 557, - 557, nil, 557, 557, 557, 557, nil, nil, nil, nil, - 557, 557, nil, nil, nil, 558, 558, 558, 557, 558, - 557, 557, 557, 558, 558, nil, nil, nil, 558, nil, - 558, 558, 558, 558, 558, 558, 558, nil, nil, nil, - nil, nil, 558, 558, 558, 558, 558, 558, 558, nil, - nil, 558, nil, nil, nil, nil, nil, nil, 558, nil, - nil, 558, 558, 558, 558, 558, 558, 558, 558, 558, - 558, 558, 558, nil, 558, 558, 558, 558, 558, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 558, nil, - nil, 558, nil, nil, 558, 558, nil, nil, 558, nil, - 558, nil, 558, nil, 558, nil, nil, 558, nil, nil, - nil, nil, nil, 558, nil, nil, nil, nil, 558, 558, - 558, 558, nil, 558, 558, 558, 558, nil, nil, nil, - nil, 558, 558, nil, nil, nil, 568, 568, 568, 558, - 568, 558, 558, 558, 568, 568, nil, nil, nil, 568, - nil, 568, 568, 568, 568, 568, 568, 568, nil, nil, - nil, nil, nil, 568, 568, 568, 568, 568, 568, 568, - nil, nil, 568, nil, nil, nil, nil, nil, nil, 568, - nil, nil, 568, 568, 568, 568, 568, 568, 568, 568, - 568, 568, 568, 568, nil, 568, 568, 568, 568, 568, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 568, - nil, nil, 568, nil, nil, 568, 568, nil, nil, 568, - nil, 568, nil, 568, nil, 568, nil, nil, 568, nil, - nil, nil, nil, nil, 568, nil, nil, nil, nil, 568, - 568, 568, 568, nil, 568, 568, 568, 568, nil, nil, - nil, nil, 568, 568, nil, nil, nil, 600, 600, 600, - 568, 600, 568, 568, 568, 600, 600, nil, nil, nil, - 600, nil, 600, 600, 600, 600, 600, 600, 600, nil, - nil, nil, nil, nil, 600, 600, 600, 600, 600, 600, - 600, nil, nil, 600, nil, nil, nil, nil, nil, nil, - 600, nil, nil, 600, 600, 600, 600, 600, 600, 600, - 600, nil, 600, 600, 600, nil, 600, 600, 600, 600, - 600, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 600, nil, nil, 600, nil, nil, 600, 600, nil, nil, - 600, nil, 600, nil, nil, nil, 600, nil, nil, nil, - nil, nil, nil, nil, nil, 600, nil, nil, nil, nil, - 600, 600, 600, 600, nil, 600, 600, 600, 600, nil, - nil, nil, nil, 600, 600, nil, nil, nil, 601, 601, - 601, 600, 601, 600, 600, 600, 601, 601, nil, nil, - nil, 601, nil, 601, 601, 601, 601, 601, 601, 601, - nil, nil, nil, nil, nil, 601, 601, 601, 601, 601, - 601, 601, nil, nil, 601, nil, nil, nil, nil, nil, - nil, 601, nil, nil, 601, 601, 601, 601, 601, 601, - 601, 601, nil, 601, 601, 601, nil, 601, 601, 601, - 601, 601, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 601, nil, nil, 601, nil, nil, 601, 601, nil, - nil, 601, nil, nil, nil, nil, nil, 601, nil, nil, - nil, nil, nil, nil, nil, nil, 601, nil, nil, nil, - nil, 601, 601, 601, 601, nil, 601, 601, 601, 601, - nil, nil, nil, nil, 601, 601, nil, nil, nil, 602, - 602, 602, 601, 602, 601, 601, 601, 602, 602, nil, - nil, nil, 602, nil, 602, 602, 602, 602, 602, 602, - 602, nil, nil, nil, nil, nil, 602, 602, 602, 602, - 602, 602, 602, nil, nil, 602, nil, nil, nil, nil, - nil, nil, 602, nil, nil, 602, 602, 602, 602, 602, - 602, 602, 602, 602, 602, 602, 602, nil, 602, 602, - 602, 602, 602, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 602, nil, nil, 602, nil, nil, 602, 602, - nil, nil, 602, nil, 602, nil, 602, nil, 602, nil, - nil, 602, nil, nil, nil, nil, nil, 602, nil, nil, - nil, nil, 602, 602, 602, 602, nil, 602, 602, 602, - 602, nil, nil, nil, nil, 602, 602, nil, nil, nil, - nil, nil, nil, 602, nil, 602, 602, 602, 605, 605, - 605, 605, 605, nil, nil, nil, 605, 605, nil, nil, - nil, 605, nil, 605, 605, 605, 605, 605, 605, 605, - nil, nil, nil, nil, nil, 605, 605, 605, 605, 605, - 605, 605, nil, nil, 605, nil, nil, nil, nil, nil, - 605, 605, nil, 605, 605, 605, 605, 605, 605, 605, - 605, 605, nil, 605, 605, 605, nil, 605, 605, 605, - 605, 605, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 605, nil, nil, 605, nil, nil, 605, 605, nil, - nil, 605, nil, 605, nil, nil, nil, 605, nil, nil, - nil, nil, nil, nil, nil, nil, 605, nil, nil, nil, - nil, 605, 605, 605, 605, nil, 605, 605, 605, 605, - nil, nil, nil, nil, 605, 605, nil, nil, nil, 606, - 606, 606, 605, 606, 605, 605, 605, 606, 606, nil, - nil, nil, 606, nil, 606, 606, 606, 606, 606, 606, - 606, nil, nil, nil, nil, nil, 606, 606, 606, 606, - 606, 606, 606, nil, nil, 606, nil, nil, nil, nil, - nil, nil, 606, nil, nil, 606, 606, 606, 606, 606, - 606, 606, 606, nil, 606, 606, 606, nil, 606, 606, - 606, 606, 606, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 606, nil, nil, 606, nil, nil, 606, 606, - nil, nil, 606, nil, nil, nil, nil, nil, 606, nil, - nil, nil, nil, nil, nil, nil, nil, 606, nil, nil, - nil, nil, 606, 606, 606, 606, nil, 606, 606, 606, - 606, nil, nil, nil, nil, 606, 606, nil, nil, nil, - 609, 609, 609, 606, 609, 606, 606, 606, 609, 609, - nil, nil, nil, 609, nil, 609, 609, 609, 609, 609, - 609, 609, nil, nil, nil, nil, nil, 609, 609, 609, - 609, 609, 609, 609, nil, nil, 609, nil, nil, nil, - nil, nil, nil, 609, nil, nil, 609, 609, 609, 609, - 609, 609, 609, 609, 609, 609, 609, 609, nil, 609, - 609, 609, 609, 609, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 609, nil, nil, 609, nil, nil, 609, - 609, nil, nil, 609, nil, 609, nil, 609, nil, 609, - nil, nil, 609, nil, nil, nil, nil, nil, 609, nil, - nil, nil, nil, 609, 609, 609, 609, nil, 609, 609, - 609, 609, nil, nil, nil, nil, 609, 609, nil, nil, - nil, 610, 610, 610, 609, 610, 609, 609, 609, 610, - 610, nil, nil, nil, 610, nil, 610, 610, 610, 610, - 610, 610, 610, nil, nil, nil, nil, nil, 610, 610, - 610, 610, 610, 610, 610, nil, nil, 610, nil, nil, - nil, nil, nil, nil, 610, nil, nil, 610, 610, 610, - 610, 610, 610, 610, 610, 610, 610, 610, 610, nil, - 610, 610, 610, 610, 610, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 610, nil, nil, 610, nil, nil, - 610, 610, nil, nil, 610, nil, nil, nil, 610, nil, - 610, nil, nil, 610, nil, nil, nil, nil, nil, 610, - nil, nil, nil, nil, 610, 610, 610, 610, nil, 610, - 610, 610, 610, nil, nil, nil, nil, 610, 610, nil, - nil, nil, 611, 611, 611, 610, 611, 610, 610, 610, - 611, 611, nil, nil, nil, 611, nil, 611, 611, 611, - 611, 611, 611, 611, nil, nil, nil, nil, nil, 611, - 611, 611, 611, 611, 611, 611, nil, nil, 611, nil, - nil, nil, nil, nil, nil, 611, nil, nil, 611, 611, - 611, 611, 611, 611, 611, 611, nil, 611, 611, 611, - nil, 611, 611, 611, 611, 611, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 611, nil, nil, 611, nil, - nil, 611, 611, nil, nil, 611, nil, nil, nil, nil, - nil, 611, nil, nil, nil, nil, nil, nil, nil, nil, - 611, nil, nil, nil, nil, 611, 611, 611, 611, nil, - 611, 611, 611, 611, nil, nil, nil, nil, 611, 611, - nil, nil, nil, 612, 612, 612, 611, 612, 611, 611, - 611, 612, 612, nil, nil, nil, 612, nil, 612, 612, - 612, 612, 612, 612, 612, nil, nil, nil, nil, nil, - 612, 612, 612, 612, 612, 612, 612, nil, nil, 612, - nil, nil, nil, nil, nil, nil, 612, nil, nil, 612, - 612, 612, 612, 612, 612, 612, 612, nil, 612, 612, - 612, nil, 612, 612, 612, 612, 612, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 612, nil, nil, 612, - nil, nil, 612, 612, nil, nil, 612, nil, nil, nil, - nil, nil, 612, nil, nil, nil, nil, nil, nil, nil, - nil, 612, nil, nil, nil, nil, 612, 612, 612, 612, - nil, 612, 612, 612, 612, nil, nil, nil, nil, 612, - 612, nil, nil, nil, 616, 616, 616, 612, 616, 612, - 612, 612, 616, 616, nil, nil, nil, 616, nil, 616, - 616, 616, 616, 616, 616, 616, nil, nil, nil, nil, - nil, 616, 616, 616, 616, 616, 616, 616, nil, nil, - 616, nil, nil, nil, nil, nil, nil, 616, nil, nil, - 616, 616, 616, 616, 616, 616, 616, 616, nil, 616, - 616, 616, nil, 616, 616, 616, 616, 616, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 616, nil, nil, - 616, nil, nil, 616, 616, nil, nil, 616, nil, nil, - nil, nil, nil, 616, nil, nil, nil, nil, nil, nil, - nil, nil, 616, nil, nil, nil, nil, 616, 616, 616, - 616, nil, 616, 616, 616, 616, nil, nil, nil, nil, - 616, 616, nil, nil, nil, 617, 617, 617, 616, 617, - 616, 616, 616, 617, 617, nil, nil, nil, 617, nil, - 617, 617, 617, 617, 617, 617, 617, nil, nil, nil, - nil, nil, 617, 617, 617, 617, 617, 617, 617, nil, - nil, 617, nil, nil, nil, nil, nil, nil, 617, nil, - nil, 617, 617, 617, 617, 617, 617, 617, 617, nil, - 617, 617, 617, nil, 617, 617, 617, 617, 617, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 617, nil, - nil, 617, nil, nil, 617, 617, nil, nil, 617, nil, - nil, nil, nil, nil, 617, nil, nil, nil, nil, nil, - nil, nil, nil, 617, nil, nil, nil, nil, 617, 617, - 617, 617, nil, 617, 617, 617, 617, nil, nil, nil, - nil, 617, 617, nil, nil, nil, 641, 641, 641, 617, - 641, 617, 617, 617, 641, 641, nil, nil, nil, 641, - nil, 641, 641, 641, 641, 641, 641, 641, nil, nil, - nil, nil, nil, 641, 641, 641, 641, 641, 641, 641, - nil, nil, 641, nil, nil, nil, nil, nil, nil, 641, - nil, nil, 641, 641, 641, 641, 641, 641, 641, 641, - nil, 641, 641, 641, nil, 641, 641, 641, 641, 641, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 641, - nil, nil, 641, nil, nil, 641, 641, nil, nil, 641, - nil, nil, nil, nil, nil, 641, nil, nil, nil, nil, - nil, nil, nil, nil, 641, nil, nil, nil, nil, 641, - 641, 641, 641, nil, 641, 641, 641, 641, nil, nil, - nil, nil, 641, 641, nil, nil, nil, 644, 644, 644, - 641, 644, 641, 641, 641, 644, 644, nil, nil, nil, - 644, nil, 644, 644, 644, 644, 644, 644, 644, nil, - nil, nil, nil, nil, 644, 644, 644, 644, 644, 644, - 644, nil, nil, 644, nil, nil, nil, nil, nil, nil, - 644, nil, nil, 644, 644, 644, 644, 644, 644, 644, - 644, nil, 644, 644, 644, nil, 644, 644, 644, 644, - 644, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 644, nil, nil, 644, nil, nil, 644, 644, nil, nil, - 644, nil, nil, nil, nil, nil, 644, nil, nil, nil, - nil, nil, nil, nil, nil, 644, nil, nil, nil, nil, - 644, 644, 644, 644, nil, 644, 644, 644, 644, nil, - nil, nil, nil, 644, 644, nil, nil, nil, 647, 647, - 647, 644, 647, 644, 644, 644, 647, 647, nil, nil, - nil, 647, nil, 647, 647, 647, 647, 647, 647, 647, - nil, nil, nil, nil, nil, 647, 647, 647, 647, 647, - 647, 647, nil, nil, 647, nil, nil, nil, nil, nil, - nil, 647, nil, nil, 647, 647, 647, 647, 647, 647, - 647, 647, nil, 647, 647, 647, nil, 647, 647, nil, - nil, 647, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 647, nil, nil, 647, nil, nil, 647, 647, nil, - nil, 647, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 647, 647, 647, 647, nil, 647, 647, 647, 647, - nil, nil, nil, nil, 647, 647, nil, nil, nil, 658, - 658, 658, 647, 658, 647, 647, 647, 658, 658, nil, - nil, nil, 658, nil, 658, 658, 658, 658, 658, 658, - 658, nil, nil, nil, nil, nil, 658, 658, 658, 658, - 658, 658, 658, nil, nil, 658, nil, nil, nil, nil, - nil, nil, 658, nil, nil, 658, 658, 658, 658, 658, - 658, 658, 658, nil, 658, 658, 658, nil, 658, 658, - nil, nil, 658, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 658, nil, nil, 658, nil, nil, 658, 658, - nil, nil, 658, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 658, 658, 658, 658, nil, 658, 658, 658, - 658, nil, nil, nil, nil, 658, 658, nil, nil, nil, - 663, 663, 663, 658, 663, 658, 658, 658, 663, 663, - nil, nil, nil, 663, nil, 663, 663, 663, 663, 663, - 663, 663, nil, nil, nil, nil, nil, 663, 663, 663, - 663, 663, 663, 663, nil, nil, 663, nil, nil, nil, - nil, nil, nil, 663, nil, nil, 663, 663, 663, 663, - 663, 663, 663, 663, nil, 663, 663, 663, nil, 663, - 663, 663, 663, 663, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 663, nil, nil, 663, nil, nil, 663, - 663, nil, nil, 663, nil, 663, nil, nil, nil, 663, - nil, nil, nil, nil, nil, nil, nil, nil, 663, nil, - nil, nil, nil, 663, 663, 663, 663, nil, 663, 663, - 663, 663, nil, nil, nil, nil, 663, 663, nil, nil, - nil, 689, 689, 689, 663, 689, 663, 663, 663, 689, - 689, nil, nil, nil, 689, nil, 689, 689, 689, 689, - 689, 689, 689, nil, nil, nil, nil, nil, 689, 689, - 689, 689, 689, 689, 689, nil, nil, 689, nil, nil, - nil, nil, nil, nil, 689, nil, nil, 689, 689, 689, - 689, 689, 689, 689, 689, nil, 689, 689, 689, nil, - 689, 689, 689, 689, 689, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 689, nil, nil, 689, nil, nil, - 689, 689, nil, nil, 689, nil, nil, nil, nil, nil, - 689, nil, nil, nil, nil, nil, nil, nil, nil, 689, - nil, nil, nil, nil, 689, 689, 689, 689, nil, 689, - 689, 689, 689, nil, nil, nil, nil, 689, 689, nil, - nil, nil, 723, 723, 723, 689, 723, 689, 689, 689, - 723, 723, nil, nil, nil, 723, nil, 723, 723, 723, - 723, 723, 723, 723, nil, nil, nil, nil, nil, 723, - 723, 723, 723, 723, 723, 723, nil, nil, 723, nil, - nil, nil, nil, nil, nil, 723, nil, nil, 723, 723, - 723, 723, 723, 723, 723, 723, nil, 723, 723, 723, - nil, 723, 723, 723, 723, 723, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 723, nil, nil, 723, nil, - nil, 723, 723, nil, nil, 723, nil, nil, nil, nil, - nil, 723, nil, nil, nil, nil, nil, nil, nil, nil, - 723, nil, nil, nil, nil, 723, 723, 723, 723, nil, - 723, 723, 723, 723, nil, nil, nil, nil, 723, 723, - nil, nil, nil, 745, 745, 745, 723, 745, 723, 723, - 723, 745, 745, nil, nil, nil, 745, nil, 745, 745, - 745, 745, 745, 745, 745, nil, nil, nil, nil, nil, - 745, 745, 745, 745, 745, 745, 745, nil, nil, 745, - nil, nil, nil, nil, nil, nil, 745, nil, nil, 745, - 745, 745, 745, 745, 745, 745, 745, nil, 745, 745, - 745, nil, 745, 745, 745, 745, 745, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 745, nil, nil, 745, - nil, nil, 745, 745, nil, nil, 745, nil, nil, nil, - nil, nil, 745, nil, nil, nil, nil, nil, nil, nil, - nil, 745, nil, nil, nil, nil, 745, 745, 745, 745, - nil, 745, 745, 745, 745, nil, nil, nil, nil, 745, - 745, nil, nil, nil, 753, 753, 753, 745, 753, 745, - 745, 745, 753, 753, nil, nil, nil, 753, nil, 753, - 753, 753, 753, 753, 753, 753, nil, nil, nil, nil, - nil, 753, 753, 753, 753, 753, 753, 753, nil, nil, - 753, nil, nil, nil, nil, nil, nil, 753, nil, nil, - 753, 753, 753, 753, 753, 753, 753, 753, nil, 753, - 753, 753, nil, 753, 753, 753, 753, 753, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 753, nil, nil, - 753, nil, nil, 753, 753, nil, nil, 753, nil, nil, - nil, nil, nil, 753, nil, nil, nil, nil, nil, nil, - nil, nil, 753, nil, nil, nil, nil, 753, 753, 753, - 753, nil, 753, 753, 753, 753, nil, nil, nil, nil, - 753, 753, nil, nil, nil, 766, 766, 766, 753, 766, - 753, 753, 753, 766, 766, nil, nil, nil, 766, nil, - 766, 766, 766, 766, 766, 766, 766, nil, nil, nil, - nil, nil, 766, 766, 766, 766, 766, 766, 766, nil, - nil, 766, nil, nil, nil, nil, nil, nil, 766, nil, - nil, 766, 766, 766, 766, 766, 766, 766, 766, nil, - 766, 766, 766, nil, 766, 766, 766, 766, 766, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 766, nil, - nil, 766, nil, nil, 766, 766, nil, nil, 766, nil, - nil, nil, nil, nil, 766, nil, nil, nil, nil, nil, - nil, nil, nil, 766, nil, nil, nil, nil, 766, 766, - 766, 766, nil, 766, 766, 766, 766, nil, nil, nil, - nil, 766, 766, nil, nil, nil, 767, 767, 767, 766, - 767, 766, 766, 766, 767, 767, nil, nil, nil, 767, - nil, 767, 767, 767, 767, 767, 767, 767, nil, nil, - nil, nil, nil, 767, 767, 767, 767, 767, 767, 767, - nil, nil, 767, nil, nil, nil, nil, nil, nil, 767, - nil, nil, 767, 767, 767, 767, 767, 767, 767, 767, - nil, 767, 767, 767, nil, 767, 767, 767, 767, 767, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 767, - nil, nil, 767, nil, nil, 767, 767, nil, nil, 767, - nil, nil, nil, nil, nil, 767, nil, nil, nil, nil, - nil, nil, nil, nil, 767, nil, nil, nil, nil, 767, - 767, 767, 767, nil, 767, 767, 767, 767, nil, nil, - nil, nil, 767, 767, nil, nil, nil, 768, 768, 768, - 767, 768, 767, 767, 767, 768, 768, nil, nil, nil, - 768, nil, 768, 768, 768, 768, 768, 768, 768, nil, - nil, nil, nil, nil, 768, 768, 768, 768, 768, 768, - 768, nil, nil, 768, nil, nil, nil, nil, nil, nil, - 768, nil, nil, 768, 768, 768, 768, 768, 768, 768, - 768, nil, 768, 768, 768, nil, 768, 768, 768, 768, - 768, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 768, nil, nil, 768, nil, nil, 768, 768, nil, nil, - 768, nil, nil, nil, nil, nil, 768, nil, nil, nil, - nil, nil, nil, nil, nil, 768, nil, nil, nil, nil, - 768, 768, 768, 768, nil, 768, 768, 768, 768, nil, - nil, nil, nil, 768, 768, nil, nil, nil, 769, 769, - 769, 768, 769, 768, 768, 768, 769, 769, nil, nil, - nil, 769, nil, 769, 769, 769, 769, 769, 769, 769, - nil, nil, nil, nil, nil, 769, 769, 769, 769, 769, - 769, 769, nil, nil, 769, nil, nil, nil, nil, nil, - nil, 769, nil, nil, 769, 769, 769, 769, 769, 769, - 769, 769, nil, 769, 769, 769, nil, 769, 769, 769, - 769, 769, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 769, nil, nil, 769, nil, nil, 769, 769, nil, - nil, 769, nil, nil, nil, nil, nil, 769, nil, nil, - nil, nil, nil, nil, nil, nil, 769, nil, nil, nil, - nil, 769, 769, 769, 769, nil, 769, 769, 769, 769, - nil, nil, nil, nil, 769, 769, nil, nil, nil, 771, - 771, 771, 769, 771, 769, 769, 769, 771, 771, nil, - nil, nil, 771, nil, 771, 771, 771, 771, 771, 771, - 771, nil, nil, nil, nil, nil, 771, 771, 771, 771, - 771, 771, 771, nil, nil, 771, nil, nil, nil, nil, - nil, nil, 771, nil, nil, 771, 771, 771, 771, 771, - 771, 771, 771, nil, 771, 771, 771, nil, 771, 771, - 771, 771, 771, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 771, nil, nil, 771, nil, nil, 771, 771, - nil, nil, 771, nil, nil, nil, nil, nil, 771, nil, - nil, nil, nil, nil, nil, nil, nil, 771, nil, nil, - nil, nil, 771, 771, 771, 771, nil, 771, 771, 771, - 771, nil, nil, nil, nil, 771, 771, nil, nil, nil, - 810, 810, 810, 771, 810, 771, 771, 771, 810, 810, - nil, nil, nil, 810, nil, 810, 810, 810, 810, 810, - 810, 810, nil, nil, nil, nil, nil, 810, 810, 810, - 810, 810, 810, 810, nil, nil, 810, nil, nil, nil, - nil, nil, nil, 810, nil, nil, 810, 810, 810, 810, - 810, 810, 810, 810, nil, 810, 810, 810, nil, 810, - 810, 810, 810, 810, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 810, nil, nil, 810, nil, nil, 810, - 810, nil, nil, 810, nil, nil, nil, nil, nil, 810, - nil, nil, nil, nil, nil, nil, nil, nil, 810, nil, - nil, nil, nil, 810, 810, 810, 810, nil, 810, 810, - 810, 810, nil, nil, nil, nil, 810, 810, nil, nil, - nil, 823, 823, 823, 810, 823, 810, 810, 810, 823, - 823, nil, nil, nil, 823, nil, 823, 823, 823, 823, - 823, 823, 823, nil, nil, nil, nil, nil, 823, 823, - 823, 823, 823, 823, 823, nil, nil, 823, nil, nil, - nil, nil, nil, nil, 823, nil, nil, 823, 823, 823, - 823, 823, 823, 823, 823, nil, 823, 823, 823, nil, - 823, 823, 823, 823, 823, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 823, nil, nil, 823, nil, nil, - 823, 823, nil, nil, 823, nil, nil, nil, nil, nil, - 823, nil, nil, nil, nil, nil, nil, nil, nil, 823, - nil, nil, nil, nil, 823, 823, 823, 823, nil, 823, - 823, 823, 823, nil, nil, nil, nil, 823, 823, nil, - nil, nil, 826, 826, 826, 823, 826, 823, 823, 823, - 826, 826, nil, nil, nil, 826, nil, 826, 826, 826, - 826, 826, 826, 826, nil, nil, nil, nil, nil, 826, - 826, 826, 826, 826, 826, 826, nil, nil, 826, nil, - nil, nil, nil, nil, nil, 826, nil, nil, 826, 826, - 826, 826, 826, 826, 826, 826, nil, 826, 826, 826, - nil, 826, 826, 826, 826, 826, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 826, nil, nil, 826, nil, - nil, 826, 826, nil, nil, 826, nil, 826, nil, nil, - nil, 826, nil, nil, nil, nil, nil, nil, nil, nil, - 826, nil, nil, nil, nil, 826, 826, 826, 826, nil, - 826, 826, 826, 826, nil, nil, nil, nil, 826, 826, - nil, nil, nil, 844, 844, 844, 826, 844, 826, 826, - 826, 844, 844, nil, nil, nil, 844, nil, 844, 844, - 844, 844, 844, 844, 844, nil, nil, nil, nil, nil, - 844, 844, 844, 844, 844, 844, 844, nil, nil, 844, - nil, nil, nil, nil, nil, nil, 844, nil, nil, 844, - 844, 844, 844, 844, 844, 844, 844, 844, 844, 844, - 844, nil, 844, 844, 844, 844, 844, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 844, nil, nil, 844, - nil, nil, 844, 844, nil, nil, 844, nil, nil, nil, - 844, nil, 844, nil, nil, 844, nil, nil, nil, nil, - nil, 844, nil, nil, nil, nil, 844, 844, 844, 844, - nil, 844, 844, 844, 844, nil, nil, nil, nil, 844, - 844, nil, nil, nil, 845, 845, 845, 844, 845, 844, - 844, 844, 845, 845, nil, nil, nil, 845, nil, 845, - 845, 845, 845, 845, 845, 845, nil, nil, nil, nil, - nil, 845, 845, 845, 845, 845, 845, 845, nil, nil, - 845, nil, nil, nil, nil, nil, nil, 845, nil, nil, - 845, 845, 845, 845, 845, 845, 845, 845, nil, 845, - 845, 845, nil, 845, 845, 845, 845, 845, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 845, nil, nil, - 845, nil, nil, 845, 845, nil, nil, 845, nil, nil, - nil, nil, nil, 845, nil, nil, nil, nil, nil, nil, - nil, nil, 845, nil, nil, nil, nil, 845, 845, 845, - 845, nil, 845, 845, 845, 845, nil, nil, nil, nil, - 845, 845, nil, nil, nil, 860, 860, 860, 845, 860, - 845, 845, 845, 860, 860, nil, nil, nil, 860, nil, - 860, 860, 860, 860, 860, 860, 860, nil, nil, nil, - nil, nil, 860, 860, 860, 860, 860, 860, 860, nil, - nil, 860, nil, nil, nil, nil, nil, nil, 860, nil, - nil, 860, 860, 860, 860, 860, 860, 860, 860, nil, - 860, 860, 860, nil, 860, 860, nil, nil, 860, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 860, nil, - nil, 860, nil, nil, 860, 860, nil, nil, 860, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 860, 860, - 860, 860, nil, 860, 860, 860, 860, nil, nil, nil, - nil, 860, 860, nil, nil, nil, 869, 869, 869, 860, - 869, 860, 860, 860, 869, 869, nil, nil, nil, 869, - nil, 869, 869, 869, 869, 869, 869, 869, nil, nil, - nil, nil, nil, 869, 869, 869, 869, 869, 869, 869, - nil, nil, 869, nil, nil, nil, nil, nil, nil, 869, - nil, nil, 869, 869, 869, 869, 869, 869, 869, 869, - nil, 869, 869, 869, nil, 869, 869, nil, nil, 869, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 869, - nil, nil, 869, nil, nil, 869, 869, nil, nil, 869, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 869, - 869, 869, 869, nil, 869, 869, 869, 869, nil, nil, - nil, nil, 869, 869, nil, nil, nil, 920, 920, 920, - 869, 920, 869, 869, 869, 920, 920, nil, nil, nil, - 920, nil, 920, 920, 920, 920, 920, 920, 920, nil, - nil, nil, nil, nil, 920, 920, 920, 920, 920, 920, - 920, nil, nil, 920, nil, nil, nil, nil, nil, nil, - 920, nil, nil, 920, 920, 920, 920, 920, 920, 920, - 920, nil, 920, 920, 920, nil, 920, 920, nil, nil, - 920, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 920, nil, nil, 920, nil, nil, 920, 920, nil, nil, - 920, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 920, 920, 920, 920, nil, 920, 920, 920, 920, nil, - nil, nil, nil, 920, 920, nil, nil, nil, 973, 973, - 973, 920, 973, 920, 920, 920, 973, 973, nil, nil, - nil, 973, nil, 973, 973, 973, 973, 973, 973, 973, - nil, nil, nil, nil, nil, 973, 973, 973, 973, 973, - 973, 973, nil, nil, 973, nil, nil, nil, nil, nil, - nil, 973, nil, nil, 973, 973, 973, 973, 973, 973, - 973, 973, 973, 973, 973, 973, nil, 973, 973, 973, - 973, 973, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 973, nil, nil, 973, nil, nil, 973, 973, nil, - nil, 973, nil, 973, nil, 973, nil, 973, nil, nil, - 973, nil, nil, nil, nil, nil, 973, nil, nil, nil, - nil, 973, 973, 973, 973, nil, 973, 973, 973, 973, - nil, nil, nil, nil, 973, 973, nil, nil, nil, nil, - nil, nil, 973, nil, 973, 973, 973, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, - 8, nil, nil, nil, 8, 8, 8, 8, 8, 8, - 8, 8, 8, 8, nil, nil, nil, nil, nil, 8, - 8, 8, 8, 8, 8, 8, 8, 8, 8, nil, - 8, nil, nil, nil, nil, nil, nil, nil, 8, 8, - nil, 8, 8, 8, 8, 8, 8, 8, nil, nil, - 8, 8, nil, nil, nil, 8, 8, 8, 8, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 8, 8, nil, 8, 8, 8, 8, 8, - 8, 8, 8, 8, 8, 8, 8, nil, nil, 8, - 8, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 8, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, 9, 9, 9, 9, nil, - nil, nil, 9, 9, 9, 9, 9, 9, 9, 9, - 9, 9, nil, nil, nil, nil, nil, 9, 9, 9, - 9, 9, 9, 9, 9, 9, nil, nil, 9, nil, - nil, nil, nil, nil, nil, nil, 9, 9, nil, 9, - 9, 9, 9, 9, 9, 9, nil, nil, 9, 9, - nil, nil, nil, 9, 9, 9, 9, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 9, 9, nil, 9, 9, 9, 9, 9, 9, 9, - 9, 9, 9, 9, 9, nil, nil, 9, 9, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 9, 405, 405, 405, 405, 405, 405, 405, - 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, - 405, 405, 405, 405, 405, 405, 405, nil, nil, nil, - 405, 405, 405, 405, 405, 405, 405, 405, 405, 405, - nil, nil, nil, nil, nil, 405, 405, 405, 405, 405, - 405, 405, 405, 405, nil, nil, 405, nil, nil, nil, - nil, nil, nil, nil, 405, 405, nil, 405, 405, 405, - 405, 405, 405, 405, nil, nil, 405, 405, nil, nil, - nil, 405, 405, 405, 405, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 405, 405, - nil, 405, 405, 405, 405, 405, 405, 405, 405, 405, - 405, 405, 405, nil, nil, 405, 405, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 405, 597, 597, 597, 597, 597, 597, 597, 597, 597, - 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, - 597, 597, 597, 597, 597, nil, nil, nil, 597, 597, - 597, 597, 597, 597, 597, 597, 597, 597, nil, nil, - nil, nil, nil, 597, 597, 597, 597, 597, 597, 597, - 597, 597, nil, nil, 597, nil, nil, nil, nil, nil, - nil, nil, 597, 597, nil, 597, 597, 597, 597, 597, - 597, 597, nil, nil, 597, 597, nil, nil, nil, 597, - 597, 597, 597, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 597, 597, nil, 597, - 597, 597, 597, 597, 597, 597, 597, 597, 597, 597, - 597, nil, nil, 597, 597, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 597, 72, - 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, - 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, - 72, 72, 72, nil, nil, nil, 72, 72, 72, 72, - 72, 72, 72, 72, 72, 72, nil, nil, nil, nil, - nil, 72, 72, 72, 72, 72, 72, 72, 72, 72, - 72, 72, 72, nil, 72, nil, nil, nil, nil, nil, - 72, 72, nil, 72, 72, 72, 72, 72, 72, 72, - nil, nil, 72, 72, nil, nil, nil, 72, 72, 72, - 72, nil, nil, nil, nil, nil, 72, nil, nil, nil, - nil, nil, nil, nil, 72, 72, nil, 72, 72, 72, - 72, 72, 72, 72, 72, 72, 72, 72, 72, nil, - nil, 72, 729, 729, 729, 729, 729, 729, 729, 729, - 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, - 729, 729, 729, 729, 729, 729, nil, nil, nil, 729, - 729, 729, 729, 729, 729, 729, 729, 729, 729, nil, - nil, nil, nil, nil, 729, 729, 729, 729, 729, 729, - 729, 729, 729, nil, nil, 729, nil, nil, nil, nil, - nil, nil, nil, 729, 729, nil, 729, 729, 729, 729, - 729, 729, 729, nil, nil, 729, 729, nil, nil, nil, - 729, 729, 729, 729, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 729, 729, nil, - 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, - 729, 729, 219, 219, 729, nil, 219, nil, nil, nil, - nil, nil, nil, nil, 219, 219, nil, 219, 219, 219, - 219, 219, 219, 219, nil, nil, 219, 219, nil, nil, - nil, 219, 219, 219, 219, nil, nil, nil, nil, nil, - 219, nil, nil, nil, nil, nil, nil, nil, 219, 219, - nil, 219, 219, 219, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 220, 220, 219, nil, 220, nil, nil, - nil, nil, nil, nil, nil, 220, 220, nil, 220, 220, - 220, 220, 220, 220, 220, nil, nil, 220, 220, nil, - nil, nil, 220, 220, 220, 220, nil, nil, nil, nil, - nil, 220, nil, nil, nil, nil, nil, nil, nil, 220, - 220, nil, 220, 220, 220, 220, 220, 220, 220, 220, - 220, 220, 220, 220, 268, 268, 220, nil, 268, nil, - nil, nil, nil, nil, nil, nil, 268, 268, nil, 268, - 268, 268, 268, 268, 268, 268, nil, nil, 268, 268, - nil, nil, nil, 268, 268, 268, 268, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 268, 268, nil, 268, 268, 268, 268, 268, 268, 268, - 268, 268, 268, 268, 268, 455, 455, 268, nil, 455, - nil, nil, nil, nil, nil, nil, nil, 455, 455, nil, - 455, 455, 455, 455, 455, 455, 455, nil, nil, 455, - 455, nil, nil, nil, 455, 455, 455, 455, nil, nil, - nil, nil, nil, 455, nil, nil, nil, nil, nil, nil, - nil, 455, 455, nil, 455, 455, 455, 455, 455, 455, - 455, 455, 455, 455, 455, 455, 456, 456, 455, nil, - 456, nil, nil, nil, nil, nil, nil, nil, 456, 456, - nil, 456, 456, 456, 456, 456, 456, 456, nil, nil, - 456, 456, nil, nil, nil, 456, 456, 456, 456, nil, - nil, nil, nil, nil, 456, nil, nil, nil, nil, nil, - nil, nil, 456, 456, nil, 456, 456, 456, 456, 456, - 456, 456, 456, 456, 456, 456, 456, 519, 519, 456, - nil, 519, nil, nil, nil, nil, nil, nil, nil, 519, - 519, nil, 519, 519, 519, 519, 519, 519, 519, nil, - nil, 519, 519, nil, nil, nil, 519, 519, 519, 519, - nil, nil, nil, nil, nil, 519, nil, nil, nil, nil, - nil, nil, nil, 519, 519, nil, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, 520, 520, - 519, nil, 520, nil, nil, nil, nil, nil, nil, nil, - 520, 520, nil, 520, 520, 520, 520, 520, 520, 520, - nil, nil, 520, 520, nil, nil, nil, 520, 520, 520, - 520, nil, nil, nil, nil, nil, 520, nil, nil, nil, - nil, nil, nil, nil, 520, 520, nil, 520, 520, 520, - 520, 520, 520, 520, 520, 520, 520, 520, 520, 529, - 529, 520, nil, 529, nil, nil, nil, nil, nil, nil, - nil, 529, 529, nil, 529, 529, 529, 529, 529, 529, - 529, nil, nil, 529, 529, nil, nil, nil, 529, 529, - 529, 529, nil, nil, nil, nil, nil, 529, nil, nil, - nil, nil, nil, nil, nil, 529, 529, nil, 529, 529, - 529, 529, 529, 529, 529, 529, 529, 529, 529, 529, - 530, 530, 529, nil, 530, nil, nil, nil, nil, nil, - nil, nil, 530, 530, nil, 530, 530, 530, 530, 530, - 530, 530, nil, nil, 530, 530, nil, nil, nil, 530, - 530, 530, 530, nil, nil, nil, nil, nil, 530, nil, - nil, nil, nil, nil, nil, nil, 530, 530, nil, 530, - 530, 530, 530, 530, 530, 530, 530, 530, 530, 530, - 530, 559, 559, 530, nil, 559, nil, nil, nil, nil, - nil, nil, nil, 559, 559, nil, 559, 559, 559, 559, - 559, 559, 559, nil, nil, 559, 559, nil, nil, nil, - 559, 559, 559, 559, nil, nil, nil, nil, nil, 559, - nil, nil, nil, nil, nil, nil, nil, 559, 559, nil, - 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, - 559, 559, 560, 560, 559, nil, 560, nil, nil, nil, - nil, nil, nil, nil, 560, 560, nil, 560, 560, 560, - 560, 560, 560, 560, nil, nil, 560, 560, nil, nil, - nil, 560, 560, 560, 560, nil, nil, nil, nil, nil, - 560, nil, nil, nil, nil, nil, nil, nil, 560, 560, - nil, 560, 560, 560, 560, 560, 560, 560, 560, 560, - 560, 560, 560, 566, 566, 560, nil, 566, nil, nil, - nil, nil, nil, nil, nil, 566, 566, nil, 566, 566, - 566, 566, 566, 566, 566, nil, nil, 566, 566, nil, - nil, nil, 566, 566, 566, 566, nil, nil, nil, nil, - nil, 566, nil, nil, nil, nil, nil, nil, nil, 566, - 566, nil, 566, 566, 566, 566, 566, 566, 566, 566, - 566, 566, 566, 566, 567, 567, 566, nil, 567, nil, - nil, nil, nil, nil, nil, nil, 567, 567, nil, 567, - 567, 567, 567, 567, 567, 567, nil, nil, 567, 567, - nil, nil, nil, 567, 567, 567, 567, nil, nil, nil, - nil, nil, 567, nil, nil, nil, nil, nil, nil, nil, - 567, 567, nil, 567, 567, 567, 567, 567, 567, 567, - 567, 567, 567, 567, 567, 603, 603, 567, nil, 603, - nil, nil, nil, nil, nil, nil, nil, 603, 603, nil, - 603, 603, 603, 603, 603, 603, 603, nil, nil, 603, - 603, nil, nil, nil, 603, 603, 603, 603, nil, nil, - nil, nil, nil, 603, nil, nil, nil, nil, nil, nil, - nil, 603, 603, nil, 603, 603, 603, 603, 603, 603, - 603, 603, 603, 603, 603, 603, 604, 604, 603, nil, - 604, nil, nil, nil, nil, nil, nil, nil, 604, 604, - nil, 604, 604, 604, 604, 604, 604, 604, nil, nil, - 604, 604, nil, nil, nil, 604, 604, 604, 604, nil, - nil, nil, nil, nil, 604, nil, nil, nil, nil, nil, - nil, nil, 604, 604, nil, 604, 604, 604, 604, 604, - 604, 604, 604, 604, 604, 604, 604, 970, 970, 604, - nil, 970, nil, nil, nil, nil, nil, nil, nil, 970, - 970, nil, 970, 970, 970, 970, 970, 970, 970, nil, - nil, 970, 970, nil, nil, nil, 970, 970, 970, 970, - nil, nil, nil, nil, nil, 970, nil, nil, nil, nil, - nil, nil, nil, 970, 970, nil, 970, 970, 970, 970, - 970, 970, 970, 970, 970, 970, 970, 970, 974, 974, - 970, nil, 974, nil, nil, nil, nil, nil, nil, nil, - 974, 974, nil, 974, 974, 974, 974, 974, 974, 974, - nil, nil, 974, 974, nil, nil, nil, 974, 974, 974, - 974, nil, nil, nil, nil, nil, 974, nil, nil, nil, - nil, nil, nil, nil, 974, 974, nil, 974, 974, 974, - 974, 974, 974, 974, 974, 974, 974, 974, 974, 975, - 975, 974, nil, 975, nil, nil, nil, nil, nil, nil, - nil, 975, 975, nil, 975, 975, 975, 975, 975, 975, - 975, nil, nil, 975, 975, nil, nil, nil, 975, 975, - 975, 975, nil, nil, nil, nil, nil, 975, nil, nil, - nil, nil, nil, nil, nil, 975, 975, nil, 975, 975, - 975, 975, 975, 975, 975, 975, 975, 975, 975, 975, - nil, 547, 975, 547, 547, 547, 547, 547, nil, 669, - nil, 669, 669, 669, 669, 669, 547, nil, nil, nil, - nil, nil, nil, nil, 669, nil, 727, nil, 727, 727, - 727, 727, 727, nil, nil, nil, nil, nil, 547, 547, - nil, 727, nil, nil, nil, nil, 669, 547, 547, 547, - 547, nil, nil, nil, 547, 669, 669, 669, 669, nil, - nil, nil, 669, 727, nil, 728, nil, 728, 728, 728, - 728, 728, 727, 727, 727, 727, nil, nil, nil, 727, - 728, nil, 804, nil, 804, 804, 804, 804, 804, nil, - 806, nil, 806, 806, 806, 806, 806, 804, nil, nil, - nil, nil, 728, nil, nil, 806, nil, nil, nil, nil, - nil, 728, 728, 728, 728, nil, nil, nil, 728, 804, - nil, nil, nil, nil, nil, nil, nil, 806, 804, 804, - 804, 804, nil, nil, nil, 804, 806, 806, 806, 806, - nil, nil, 911, 806, 911, 911, 911, 911, 911, nil, - 913, nil, 913, 913, 913, 913, 913, 911, nil, nil, - nil, nil, nil, nil, nil, 913, nil, 935, nil, 935, - 935, 935, 935, 935, nil, nil, nil, nil, nil, 911, - nil, nil, 935, nil, nil, nil, nil, 913, 911, 911, - 911, 911, nil, nil, nil, 911, 913, 913, 913, 913, - nil, nil, nil, 913, 935, nil, 941, nil, 941, 941, - 941, 941, 941, 935, 935, 935, 935, nil, nil, nil, - 935, 941, nil, 990, nil, 990, 990, 990, 990, 990, - 992, nil, 992, 992, 992, 992, 992, nil, 990, nil, - nil, nil, nil, 941, nil, 992, nil, 994, nil, 994, - 994, 994, 994, 994, 941, 941, nil, nil, nil, 941, - 990, nil, 994, nil, nil, nil, nil, 992, nil, 990, - 990, 990, 990, nil, nil, nil, 990, nil, 992, 992, - nil, nil, nil, 992, 994, nil, 996, nil, 996, 996, - 996, 996, 996, nil, nil, 994, 994, nil, nil, nil, - 994, 996, nil, 1011, nil, 1011, 1011, 1011, 1011, 1011, - 1028, nil, 1028, 1028, 1028, 1028, 1028, nil, 1011, nil, - nil, nil, nil, 996, nil, 1028, nil, nil, nil, nil, - nil, nil, nil, nil, 996, 996, nil, nil, nil, 996, - 1011, nil, nil, nil, nil, nil, nil, 1028, nil, nil, - nil, 1011, 1011, nil, nil, nil, 1011, nil, 1028, 1028, - nil, nil, nil, 1028 ] - -racc_action_pointer = [ - 1853, 10, nil, 221, nil, 5772, 909, -79, 22505, 22633, - -51, nil, -80, -44, 240, 15, 477, -81, nil, -71, - 5903, 1711, 166, nil, -62, nil, -8, 958, 1068, 6034, - 6165, 6296, nil, 1993, 6427, 6558, nil, 70, 225, 352, - 152, 255, 6697, 6828, -51, 6959, 86, 507, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 1178, nil, 7098, - 7229, 7360, 4, nil, 7491, 7622, nil, nil, 7753, 7892, - 8023, 8154, 23017, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 624, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 0, nil, nil, 112, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 224, nil, 8293, nil, nil, nil, - nil, 8432, 8563, 8694, 8825, 8964, nil, 2133, nil, 287, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 115, nil, 2273, 9095, 9226, 9357, 9488, 9619, 9750, 23191, - 23252, nil, nil, 9881, 10012, 10143, nil, nil, 574, -54, - 166, 202, 217, 124, 216, nil, 10274, 2413, 232, 10405, - 10536, 10667, 10798, 10929, 11060, 11191, 11322, 11453, 11584, 11715, - 11846, 11977, 12108, 12239, 12370, 12501, 12632, 12763, 12894, 13025, - 13156, nil, nil, nil, nil, 13287, nil, nil, 23313, nil, - nil, 258, 13418, 13549, nil, nil, nil, nil, nil, nil, - nil, 13680, nil, 2133, nil, 249, 263, nil, 13811, 328, - 13942, nil, nil, 14073, 14204, nil, nil, 295, nil, 14343, - 1331, 337, 315, 2553, 340, 391, 350, 14474, 2693, 576, - 682, 686, 441, 718, nil, 409, 387, 33, nil, nil, - nil, 458, 360, 418, 14613, nil, 424, 497, 771, nil, - 528, 14744, nil, 14875, 2833, 1396, 484, nil, 398, 503, - 528, 511, 575, 550, nil, nil, 326, -1, 11, 15006, - 2973, 3113, 298, 641, 533, -18, 11, 794, 644, 25, - 677, nil, nil, 342, 434, -21, nil, 834, nil, 596, - 15137, nil, nil, nil, 194, 230, 255, 373, 413, 481, - 506, 508, 550, nil, 551, nil, 15268, nil, 327, 388, - 395, 400, 456, -41, -35, 462, nil, nil, nil, nil, - nil, nil, nil, nil, 611, 22761, nil, nil, nil, nil, - 612, nil, nil, 600, 15399, 605, nil, nil, 600, nil, - 837, 313, 701, nil, nil, 1853, nil, nil, nil, nil, - nil, 1993, 615, nil, 627, 632, 509, 521, 1314, nil, - nil, nil, 222, 334, 678, nil, nil, 1446, 1582, nil, - nil, nil, -35, nil, 683, 23374, 23435, 15530, 328, 15661, - 15792, 15923, 2833, 2973, 523, 563, 708, 710, 711, 712, - 1667, 4233, 666, 3113, 3253, 3393, 3533, 3673, 3813, 915, - 1465, 3953, 4093, 2273, 1397, nil, 1718, nil, nil, nil, - nil, 669, nil, nil, nil, 673, nil, nil, 16054, nil, - 16185, nil, 16316, nil, 363, nil, nil, nil, 16455, 1427, - nil, 675, 675, nil, nil, 676, 16594, 683, 16725, 23496, - 23557, 870, 726, nil, 16856, 685, nil, 16987, 17118, 23618, - 23679, 1531, 2413, 17249, 823, 822, 702, 747, nil, 17380, - nil, nil, 17511, nil, nil, nil, nil, 24290, 3253, 826, - nil, 3393, 62, 834, 841, 836, 844, 17642, 17773, 23740, - 23801, 27, nil, nil, 930, nil, 23862, 23923, 17904, nil, - nil, 250, 3533, 765, nil, -33, nil, nil, nil, 832, - nil, nil, nil, 739, nil, nil, 259, nil, 338, nil, - nil, 727, nil, 741, nil, nil, nil, 22889, nil, 744, - 18035, 18166, 18297, 23984, 24045, 18436, 18567, 552, 787, 18698, - 18829, 18960, 19091, 786, nil, nil, 19222, 19353, 787, nil, - nil, nil, 343, 358, 466, 604, 758, 774, 906, nil, - 890, 6, nil, nil, 807, 102, 913, nil, 790, nil, - 838, 19484, nil, nil, 19615, nil, -83, 19746, 808, nil, - 830, 123, 180, 873, 248, 1038, 875, 840, 19877, nil, - 909, 214, 964, 20008, nil, nil, nil, 596, nil, 24298, - nil, 847, 849, nil, 857, 858, 859, nil, nil, nil, - nil, nil, nil, nil, nil, 853, 1178, nil, nil, 20139, - nil, nil, nil, 952, nil, nil, nil, 958, nil, nil, - 959, 516, nil, 997, nil, nil, nil, nil, nil, 1006, - nil, 26, 886, 40, 41, 151, 185, 3673, 717, 1040, - nil, 892, 3813, 20270, nil, 1029, 3953, 24315, 24354, 23130, - nil, nil, nil, nil, nil, nil, 4093, nil, nil, nil, - nil, nil, nil, nil, 910, 20401, 914, 516, 519, 714, - 826, nil, 2553, 20532, nil, 913, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 20663, 20794, 20925, 21056, - 520, 21187, nil, 160, nil, nil, 936, nil, nil, 889, - nil, 4233, nil, nil, nil, nil, 917, 236, nil, nil, - 1045, nil, 4373, 922, 970, nil, nil, nil, 64, 929, - 780, nil, nil, 556, 24371, nil, 24379, nil, 1377, nil, - 21318, nil, 1241, nil, 929, 228, 943, nil, nil, nil, - nil, 1065, nil, 21449, 1069, nil, 21580, 4513, 93, 1070, - nil, 1077, 480, 4653, nil, 1078, 962, 554, nil, 969, - 964, 553, nil, nil, 21711, 21842, 2693, 4793, nil, 965, - 968, nil, 969, 970, 973, nil, 1003, 983, 979, 973, - 21973, nil, nil, nil, nil, 4933, nil, nil, 32, 22104, - nil, nil, nil, nil, 1028, 986, nil, nil, nil, 987, - 988, nil, 990, 992, nil, 993, nil, nil, 998, 1280, - 997, 819, nil, nil, 33, nil, nil, 39, nil, nil, - nil, 1123, nil, nil, nil, 1060, nil, nil, 1203, nil, - nil, 24431, nil, 24439, nil, 6605, nil, nil, 1044, 1171, - 22235, 1006, 1099, nil, 5073, 34, 35, 1116, 1101, 36, - nil, 5213, 5353, nil, nil, 24456, nil, 8201, nil, 14521, - nil, 24495, nil, nil, nil, nil, 335, 951, 1026, 5493, - nil, nil, nil, nil, 5633, 1027, nil, nil, 1030, 1032, - 1034, 1036, nil, 1039, nil, 628, nil, nil, nil, 1146, - 24106, nil, 1176, 22366, 24167, 24228, 42, 1071, 1179, 1056, - 1063, 1064, 1069, 1074, 1291, 1075, 1307, 706, 1202, nil, - 24512, nil, 24519, nil, 24536, nil, 24575, nil, nil, nil, - 1183, 1123, 1124, nil, 1086, 98, 102, 111, 138, nil, - nil, 24592, nil, nil, nil, nil, 1312, 1094, nil, nil, - 1108, 1109, 1110, 1130, nil, 145, 1131, 1134, 24599, nil, - nil, nil, nil, nil, 1137, nil ] - -racc_action_default = [ - -3, -611, -1, -597, -4, -611, -7, -611, -611, -611, - -611, -30, -611, -611, -34, -611, -611, -289, -46, -599, - -611, -51, -55, -56, -57, -61, -266, -266, -266, -302, - -332, -333, -73, -12, -77, -85, -87, -611, -501, -502, - -611, -611, -611, -611, -225, -611, -599, -239, -280, -281, - -282, -283, -284, -285, -286, -287, -288, -585, -291, -295, - -610, -575, -310, -312, -611, -611, -53, -53, -597, -611, - -611, -611, -611, -334, -335, -337, -338, -339, -340, -442, - -443, -444, -445, -446, -467, -449, -450, -469, -471, -454, - -459, -463, -465, -481, -467, -483, -485, -486, -487, -488, - -583, -490, -491, -584, -493, -494, -495, -496, -497, -498, - -499, -500, -505, -506, -611, -2, -598, -606, -607, -608, - -6, -611, -611, -611, -611, -611, -8, -3, -18, -611, - -116, -117, -118, -119, -120, -121, -122, -123, -124, -128, - -129, -130, -131, -132, -133, -134, -135, -136, -137, -138, - -139, -140, -141, -142, -143, -144, -145, -146, -147, -148, - -149, -150, -151, -152, -153, -154, -155, -156, -157, -158, - -159, -160, -161, -162, -163, -164, -165, -166, -167, -168, - -169, -170, -171, -172, -173, -174, -175, -176, -177, -178, - -179, -180, -181, -182, -183, -184, -185, -186, -187, -188, - -189, -190, -191, -192, -193, -194, -195, -196, -197, -198, - -23, -125, -12, -611, -611, -611, -611, -611, -256, -611, - -611, -595, -596, -611, -611, -599, -600, -50, -611, -501, - -502, -611, -289, -611, -611, -231, -611, -12, -611, -210, - -211, -611, -611, -611, -611, -611, -611, -611, -611, -611, - -611, -611, -611, -611, -611, -611, -611, -611, -611, -611, - -611, -240, -241, -242, -243, -611, -406, -408, -611, -593, - -594, -62, -256, -611, -309, -412, -421, -423, -68, -418, - -69, -599, -70, -246, -261, -270, -270, -265, -611, -271, - -611, -467, -577, -611, -611, -71, -72, -597, -13, -611, - -16, -611, -75, -12, -599, -611, -78, -81, -12, -93, - -94, -611, -611, -101, -302, -305, -599, -611, -332, -333, - -336, -419, -611, -83, -611, -89, -299, -484, -611, -219, - -220, -611, -232, -611, -12, -293, -599, -247, -603, -603, - -611, -611, -603, -611, -311, -397, -52, -611, -611, -611, - -12, -12, -597, -611, -598, -501, -502, -611, -611, -289, - -611, -350, -351, -111, -112, -611, -114, -611, -289, -509, - -611, -501, -502, -325, -116, -117, -158, -159, -160, -176, - -181, -188, -191, -327, -611, -573, -611, -447, -611, -611, - -611, -611, -611, -611, -611, -611, 1036, -5, -609, -24, - -25, -26, -27, -28, -611, -611, -20, -21, -22, -126, - -611, -31, -33, -276, -611, -611, -275, -32, -611, -35, - -611, -289, -43, -45, -199, -251, -271, -47, -48, -36, - -200, -251, -599, -257, -270, -270, -586, -587, -266, -416, - -588, -589, -587, -586, -266, -415, -417, -588, -589, -42, - -207, -49, -599, -308, -611, -611, -611, -256, -299, -611, - -611, -611, -208, -209, -212, -213, -214, -215, -216, -217, - -221, -222, -223, -224, -226, -227, -228, -229, -230, -233, - -234, -235, -236, -599, -244, -427, -266, -586, -587, -59, - -63, -599, -267, -425, -427, -599, -304, -262, -611, -263, - -611, -268, -611, -272, -611, -580, -582, -11, -598, -15, - -17, -599, -74, -297, -90, -79, -611, -599, -256, -611, - -611, -100, -611, -484, -611, -86, -91, -611, -611, -611, - -611, -245, -237, -611, -434, -611, -599, -611, -248, -605, - -604, -250, -605, -300, -301, -576, -313, -533, -12, -341, - -342, -12, -611, -611, -611, -611, -611, -611, -256, -611, - -611, -299, -53, -111, -112, -113, -611, -611, -256, -321, - -507, -611, -12, -511, -329, -599, -448, -468, -473, -611, - -475, -451, -470, -611, -472, -453, -611, -456, -611, -458, - -461, -611, -462, -611, -482, -9, -19, -611, -29, -279, - -611, -611, -256, -611, -611, -611, -611, -420, -611, -258, - -260, -611, -611, -64, -255, -413, -611, -611, -66, -414, - -307, -601, -586, -587, -586, -587, -599, -611, -611, -428, - -58, -409, -425, -253, -611, -386, -611, -303, -270, -269, - -273, -611, -578, -579, -611, -14, -76, -611, -82, -88, - -599, -586, -587, -254, -590, -99, -611, -84, -611, -206, - -218, -599, -610, -610, -292, -294, -296, -603, -398, -533, - -401, -572, -572, -516, -518, -518, -518, -532, -534, -535, - -536, -537, -538, -539, -540, -541, -611, -543, -545, -547, - -552, -554, -555, -557, -562, -564, -565, -567, -568, -569, - -611, -610, -343, -610, -54, -344, -345, -316, -317, -611, - -319, -611, -599, -586, -587, -590, -298, -12, -111, -112, - -115, -599, -12, -611, -323, -611, -12, -533, -533, -611, - -574, -474, -477, -478, -479, -480, -12, -452, -455, -457, - -460, -464, -466, -127, -277, -611, -599, -586, -587, -587, - -586, -44, -252, -611, -602, -270, -38, -202, -39, -203, - -65, -40, -205, -41, -204, -67, -611, -611, -611, -611, - -420, -611, -407, -386, -411, -410, -611, -422, -387, -599, - -389, -12, -424, -264, -274, -581, -80, -420, -92, -306, - -610, -348, -12, -435, -610, -436, -437, -249, -611, -599, - -611, -514, -515, -611, -611, -525, -611, -528, -611, -530, - -611, -352, -611, -354, -356, -363, -599, -546, -556, -566, - -570, -611, -346, -611, -611, -318, -611, -12, -420, -611, - -420, -611, -611, -12, -326, -611, -599, -611, -330, -611, - -278, -420, -37, -201, -259, -611, -238, -12, -60, -572, - -572, -368, -370, -370, -370, -385, -611, -599, -391, -541, - -549, -550, -560, -426, -10, -12, -441, -349, -611, -611, - -439, -399, -402, -404, -611, -572, -553, -571, -517, -518, - -518, -544, -518, -518, -563, -518, -541, -558, -599, -611, - -361, -611, -542, -314, -611, -315, -273, -610, -320, -322, - -508, -611, -328, -510, -512, -511, -476, -429, -611, -366, - -367, -376, -378, -611, -381, -611, -383, -388, -611, -611, - -611, -548, -611, -440, -12, -501, -502, -611, -611, -289, - -438, -12, -12, -400, -513, -611, -521, -611, -523, -611, - -526, -611, -529, -531, -353, -355, -359, -611, -364, -12, - -430, -431, -432, -324, -12, -572, -551, -369, -370, -370, - -370, -370, -561, -370, -390, -599, -393, -395, -396, -559, - -611, -299, -434, -256, -611, -611, -299, -611, -611, -518, - -518, -518, -518, -357, -611, -362, -611, -610, -611, -365, - -611, -373, -611, -375, -611, -379, -611, -382, -384, -392, - -611, -298, -590, -433, -599, -586, -587, -590, -298, -403, - -405, -611, -519, -522, -524, -527, -611, -360, -347, -331, - -370, -370, -370, -370, -394, -420, -518, -358, -611, -371, - -374, -377, -380, -520, -370, -372 ] - -racc_goto_table = [ - 224, 133, 133, 16, 284, 284, 284, 337, 16, 383, - 267, 344, 416, 417, 285, 285, 285, 726, 548, 551, - 128, 211, 556, 228, 268, 119, 639, 333, 639, 275, - 279, 432, 228, 228, 228, 499, 16, 311, 311, 662, - 347, 348, 6, 429, 352, 338, 525, 6, 227, 449, - 607, 219, 350, 351, 821, 438, 444, 327, 305, 269, - 136, 136, 16, 116, 126, 133, 565, 228, 228, 490, - 306, 228, 357, 367, 367, 138, 138, 884, 642, 853, - 790, 2, 801, 802, 423, 491, 115, 423, 535, 323, - 119, 538, 541, 423, 120, 545, 634, 399, 400, 401, - 402, 335, 881, 816, 486, 781, 320, 320, 302, 966, - 945, 968, 271, 278, 280, 1, 304, 962, 864, 16, - 642, 824, 388, 645, 228, 228, 228, 228, 16, 210, - 16, 628, 395, 286, 286, 286, 362, 639, 639, 412, - 636, 320, 320, 320, 346, 346, 430, 405, 346, 369, - 373, 353, 450, 586, 588, 670, 948, 704, 6, 632, - 597, 331, 340, 677, 339, 342, 631, 403, 385, 6, - 341, 546, 360, 569, 282, 295, 296, 856, 384, 334, - 536, 336, 345, 722, 499, 833, 572, 573, 642, 729, - 1024, 905, 968, 284, 962, 855, 857, 874, 415, 415, - 965, 346, 346, 346, 346, 397, 884, 945, 404, 881, - 668, 958, 985, 448, 871, 16, 228, 420, 228, 228, - 420, 228, 439, 547, 709, 798, 420, 228, 228, 888, - 931, 582, 584, 587, 587, 776, 932, 410, 648, 881, - 16, 411, 422, 847, 770, 422, 657, 284, 284, 1017, - 485, 422, 493, 494, 773, 918, 284, 950, 285, 794, - 909, 910, 305, 455, 868, 387, 285, 720, 787, 389, - 626, 390, 391, 392, 393, 228, 228, 799, 394, 731, - 736, 1027, 723, 26, 228, 677, 934, 879, 26, 876, - 956, 438, 444, nil, 881, 427, 428, 522, nil, nil, - nil, nil, 16, 26, 451, 452, 16, nil, nil, nil, - 311, 16, 26, 26, 26, 951, 26, 537, nil, 119, - 275, nil, nil, nil, 279, 552, 725, 311, 305, 504, - 828, 650, nil, 305, nil, 836, 837, 16, 523, 830, - 1018, 509, 26, 677, 677, nil, 519, 26, 26, 954, - nil, 26, 228, 16, 16, 653, nil, 508, 510, nil, - 526, 515, nil, 529, 841, 653, 989, nil, nil, 786, - nil, 712, 639, 228, 119, 553, 554, 286, 302, 320, - 507, 721, 827, 302, 574, 286, 511, 783, 450, 228, - 430, 517, 559, nil, nil, 653, 320, nil, 133, 26, - nil, nil, nil, 653, 26, 26, 26, 26, 26, nil, - 26, 760, nil, 608, nil, 746, 765, 596, 492, 269, - 797, nil, 642, nil, nil, nil, 495, nil, 739, 346, - 739, nil, 284, nil, nil, 555, nil, 756, 758, 438, - 444, 614, 761, 763, nil, nil, 453, 619, nil, 448, - 571, nil, nil, nil, nil, 603, 659, 136, 439, nil, - 228, nil, 795, nil, 627, nil, 575, nil, nil, nil, - nil, 423, 138, nil, nil, nil, 831, 1003, nil, nil, - 835, 423, 423, nil, nil, nil, 423, 423, nil, 614, - nil, nil, nil, 284, nil, 26, 26, 26, 26, 26, - 26, 26, 496, nil, 783, nil, 26, 26, 26, nil, - nil, 16, nil, 448, nil, nil, nil, nil, nil, 311, - 26, 228, 439, 448, 613, 512, nil, 311, nil, nil, - 618, nil, 439, 284, nil, nil, 228, nil, 860, 924, - 757, 759, 711, 284, nil, 762, 764, nil, 717, nil, - nil, 16, 526, 448, 16, 26, 26, nil, 854, 448, - 526, 228, 439, nil, 26, 949, 952, nil, nil, nil, - 439, 228, 630, 701, 705, 16, 703, 284, nil, 842, - 775, nil, 26, 880, nil, 882, 26, 901, 320, nil, - 133, 26, nil, 724, nil, nil, 320, 448, nil, nil, - nil, 907, 638, nil, 420, 228, 439, 608, 16, 743, - 796, nil, nil, 661, 420, 420, nil, 26, 774, 420, - 420, nil, 1025, 423, nil, nil, nil, nil, nil, 422, - nil, 608, 26, 26, 26, nil, nil, nil, nil, 422, - 422, nil, nil, 667, 422, 422, nil, 751, 415, 136, - 311, nil, 13, 26, nil, nil, 614, 13, nil, 619, - nil, 311, nil, nil, 138, nil, 838, 860, nil, 26, - 860, nil, 860, 620, 860, nil, nil, nil, nil, nil, - nil, nil, 843, 526, nil, 13, 978, nil, nil, nil, - 959, nil, 960, 608, 788, 757, 759, 764, 762, 832, - nil, nil, 608, nil, nil, nil, nil, nil, 988, nil, - nil, 13, 633, 755, 979, nil, 637, nil, nil, 320, - 16, 361, 133, nil, nil, 16, 228, 608, nil, 16, - 320, nil, 646, nil, 685, nil, nil, 866, 649, 16, - 26, 870, 829, nil, nil, nil, nil, nil, nil, 860, - nil, 860, nil, 860, nil, 860, 420, 665, nil, nil, - 858, 839, nil, nil, nil, nil, nil, nil, 13, 1020, - nil, nil, nil, nil, 843, nil, nil, 13, nil, 13, - 858, 422, nil, nil, 16, nil, 1004, 860, nil, nil, - nil, 26, nil, nil, nil, 16, 730, nil, nil, 894, - nil, 26, nil, 346, nil, nil, 863, nil, nil, nil, - 653, nil, nil, nil, nil, 29, 26, 867, nil, nil, - 29, 811, nil, nil, nil, nil, 228, nil, nil, nil, - 16, 26, nil, nil, 26, 29, 16, nil, 858, nil, - nil, 26, nil, nil, 29, 29, 29, nil, 29, nil, - 16, 26, 897, nil, 900, 26, 685, nil, nil, 904, - nil, nil, nil, 921, 13, nil, 418, nil, 16, 418, - nil, nil, 927, nil, 29, 418, nil, nil, nil, 29, - 29, nil, 789, 29, 26, 26, nil, nil, 26, 13, - 923, nil, nil, nil, 26, 26, nil, nil, nil, 26, - 26, nil, nil, 346, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 685, 685, nil, nil, nil, nil, - nil, nil, nil, 969, nil, nil, nil, 16, nil, nil, - nil, 29, 320, nil, 16, 16, 29, 29, 29, 29, - 29, 320, 29, nil, 850, nil, 999, 811, 284, 972, - 890, 13, 16, nil, nil, 13, 977, 16, nil, nil, - 13, nil, 974, 448, nil, 875, 859, nil, 448, nil, - 805, 807, 809, nil, 987, nil, 228, 439, nil, nil, - nil, nil, nil, nil, nil, 608, 13, nil, nil, nil, - nil, 685, 320, 685, nil, nil, nil, nil, nil, nil, - 26, nil, 13, 13, nil, 26, 26, nil, 15, 26, - nil, nil, nil, 15, nil, nil, nil, nil, nil, 26, - nil, nil, nil, nil, 811, nil, 811, 29, 29, 29, - 29, 29, 29, 29, nil, nil, 26, 892, 29, 29, - 29, 15, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 29, nil, nil, nil, nil, 903, nil, nil, - nil, nil, nil, nil, 26, nil, nil, 15, nil, nil, - 851, nil, nil, 955, nil, 26, 850, nil, 850, nil, - 850, 983, 811, nil, nil, nil, nil, 29, 29, nil, - nil, 877, nil, nil, 877, nil, 29, nil, 859, nil, - 859, nil, 852, nil, nil, nil, 26, nil, nil, 944, - 26, nil, nil, nil, 29, nil, 26, nil, 29, 811, - nil, 811, 685, 29, 15, nil, nil, nil, nil, 883, - 26, 885, nil, 15, nil, 15, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 26, 29, - nil, 811, nil, nil, nil, 850, nil, 850, nil, 850, - 13, 850, nil, nil, 29, 29, 29, nil, nil, nil, - nil, nil, nil, nil, nil, 936, 938, 859, 940, 942, - nil, 943, nil, nil, nil, 29, 912, 914, 916, nil, - nil, nil, nil, 850, nil, nil, nil, nil, nil, 877, - 13, 29, 851, 13, 851, nil, 851, 26, nil, nil, - nil, nil, nil, nil, 26, 26, nil, nil, nil, nil, - 15, nil, 15, nil, 13, 15, nil, nil, nil, nil, - nil, 15, 26, nil, nil, nil, 961, 26, 963, nil, - nil, nil, nil, nil, nil, 15, nil, nil, nil, nil, - nil, nil, nil, 418, nil, nil, 26, 13, 980, nil, - 981, nil, 982, 418, 418, nil, 17, nil, 418, 418, - nil, 17, 29, nil, nil, 1012, 1013, 1014, 1015, nil, - nil, 851, nil, 851, nil, 851, nil, 851, nil, nil, - nil, nil, 991, 993, 995, 997, nil, 998, nil, 17, - 313, 313, nil, nil, nil, nil, nil, 15, nil, nil, - nil, 15, nil, 1021, nil, 1022, 15, 1023, nil, 851, - nil, nil, 1033, 29, nil, 17, nil, nil, nil, nil, - nil, nil, nil, 29, 1026, 359, 368, 368, nil, nil, - nil, nil, 15, nil, nil, nil, nil, nil, 29, nil, - nil, 1034, nil, nil, 1029, 1030, 1031, 1032, 15, 15, - nil, nil, nil, 29, nil, nil, 29, nil, 1035, 13, - nil, nil, nil, 29, 13, nil, nil, nil, 13, nil, - nil, nil, 17, 29, nil, nil, nil, 29, 13, nil, - nil, 17, nil, 17, nil, nil, nil, nil, nil, nil, - nil, nil, 38, nil, nil, 418, nil, 38, nil, nil, - nil, nil, nil, nil, nil, nil, 29, 29, nil, nil, - 29, nil, nil, nil, nil, nil, 29, 29, nil, nil, - nil, 29, 29, 13, nil, 38, 309, 309, nil, nil, - nil, nil, nil, nil, 13, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 38, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 355, 371, 371, 371, nil, nil, nil, 17, 13, - 421, nil, nil, 421, nil, 13, nil, nil, nil, 421, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 13, - nil, nil, nil, 17, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 15, 13, 38, nil, - nil, 930, nil, nil, nil, nil, nil, 38, nil, 38, - nil, nil, 29, nil, nil, nil, nil, 29, 29, nil, - nil, 29, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 29, nil, nil, nil, nil, 15, nil, nil, 15, - nil, nil, nil, nil, nil, 17, nil, nil, 29, 17, - nil, nil, nil, 313, 17, nil, 13, nil, nil, nil, - 15, nil, nil, 13, 13, nil, nil, nil, nil, nil, - 313, nil, nil, nil, nil, nil, 29, nil, nil, nil, - 17, 13, nil, nil, nil, nil, 13, 29, nil, 15, - nil, nil, nil, 15, 38, nil, 17, 17, nil, 15, - 15, nil, nil, nil, 15, 15, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 29, 38, - nil, nil, 29, nil, nil, nil, nil, nil, 29, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 29, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 29, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 38, nil, nil, nil, 38, nil, nil, nil, 309, - 38, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 15, 309, nil, nil, nil, - 15, nil, 39, nil, 15, nil, 38, 39, nil, 29, - nil, nil, nil, nil, 15, nil, 29, 29, nil, nil, - nil, nil, 38, 38, nil, nil, nil, nil, nil, nil, - nil, 15, nil, nil, 29, 39, 310, 310, nil, 29, - nil, nil, nil, nil, 17, nil, nil, nil, nil, nil, - nil, nil, 313, nil, nil, nil, nil, nil, 29, 15, - 313, 39, nil, nil, nil, nil, nil, nil, nil, nil, - 15, 356, 372, 372, 372, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 17, nil, nil, 17, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 15, nil, nil, 17, nil, - nil, 15, nil, nil, nil, 735, nil, nil, 39, nil, - nil, nil, nil, nil, nil, 15, nil, 39, nil, 39, - nil, nil, nil, nil, nil, nil, nil, 421, nil, nil, - nil, 17, nil, 15, nil, nil, nil, 421, 421, nil, - nil, nil, 421, 421, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 38, nil, nil, 313, nil, nil, nil, nil, 309, nil, - nil, nil, nil, nil, 313, nil, 309, nil, nil, nil, - nil, nil, 15, nil, nil, nil, nil, nil, nil, 15, - 15, nil, nil, nil, 39, nil, nil, nil, nil, nil, - 38, nil, nil, 38, nil, nil, nil, 15, nil, nil, - nil, nil, 15, nil, nil, nil, nil, nil, nil, 39, - nil, nil, nil, nil, 38, nil, nil, nil, nil, nil, - nil, nil, nil, 17, nil, nil, nil, nil, 17, nil, - nil, nil, 17, nil, nil, nil, nil, nil, nil, nil, - nil, 343, 17, nil, nil, nil, nil, 38, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 421, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 39, nil, nil, nil, 39, nil, nil, nil, 310, - 39, nil, nil, nil, nil, nil, nil, 17, nil, 309, - nil, nil, nil, nil, nil, nil, 310, nil, 17, nil, - 309, nil, nil, nil, nil, nil, 39, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 39, 39, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 17, nil, nil, nil, nil, nil, 17, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 17, nil, nil, nil, nil, nil, 38, - nil, nil, nil, nil, 38, nil, 368, nil, 38, nil, - nil, 17, nil, nil, nil, 929, nil, nil, 38, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 413, 426, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 38, nil, nil, 368, nil, nil, nil, - 17, 235, nil, nil, 38, nil, nil, 17, 17, nil, - 283, 283, 283, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 329, 330, 17, 332, nil, nil, nil, - 17, nil, nil, nil, nil, nil, nil, nil, 501, 38, - 503, 283, 283, 505, 506, 38, nil, nil, nil, nil, - 39, nil, nil, nil, nil, nil, nil, nil, 310, 38, - nil, nil, nil, nil, nil, nil, 310, nil, nil, nil, - nil, nil, 371, nil, nil, nil, nil, 38, nil, nil, - nil, 925, nil, nil, nil, nil, nil, nil, nil, nil, - 39, nil, nil, 39, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 39, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 371, nil, nil, nil, 38, nil, nil, nil, - nil, nil, nil, 38, 38, nil, nil, 39, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 38, nil, nil, 599, nil, 38, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 310, - nil, nil, nil, nil, 283, 425, nil, nil, 431, 283, - 310, nil, nil, nil, 431, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 235, nil, nil, - 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, - 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, - 482, 483, nil, nil, nil, nil, 484, nil, 640, nil, - 343, nil, 643, 283, 283, nil, nil, nil, nil, 39, - nil, nil, 283, nil, 39, nil, nil, nil, 39, 283, - nil, 283, nil, nil, 283, 283, nil, nil, 39, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 640, - nil, nil, 343, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 426, nil, nil, - nil, nil, 531, nil, 532, nil, nil, nil, nil, nil, - nil, nil, nil, 39, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 39, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 744, nil, nil, nil, nil, nil, nil, nil, nil, 640, - 343, nil, nil, nil, nil, nil, nil, nil, nil, 39, - nil, nil, nil, nil, nil, 39, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 39, - nil, 784, nil, nil, 785, 283, nil, nil, nil, nil, - nil, nil, 372, nil, nil, nil, nil, 39, nil, nil, - nil, 926, nil, 793, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 283, 817, - 431, 431, 431, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 372, nil, nil, nil, 39, nil, nil, nil, - nil, nil, nil, 39, 39, nil, nil, nil, nil, 283, - nil, 283, nil, 283, nil, nil, nil, nil, nil, nil, - nil, 39, nil, nil, nil, 840, 39, nil, nil, 283, - nil, nil, nil, nil, nil, nil, nil, nil, 431, 660, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 283, nil, nil, 283, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 283, 283, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 283, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 887, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 896, nil, nil, nil, - nil, 283, 431, 283, nil, nil, nil, 752, nil, nil, - 283, 283, 431, 431, 343, nil, nil, 431, 431, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 283, nil, nil, 283, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 283, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 283, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 283, nil, nil, nil, - nil, nil, nil, nil, 431, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 431, 431, 431, - 431, nil, 846, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 283, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 283, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 283, 431, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 283 ] - -racc_goto_check = [ - 34, 64, 64, 29, 39, 39, 39, 77, 29, 63, - 145, 96, 23, 23, 78, 78, 78, 108, 99, 99, - 16, 16, 101, 29, 42, 105, 84, 34, 84, 81, - 81, 30, 29, 29, 29, 83, 29, 29, 29, 11, - 18, 18, 7, 27, 18, 78, 58, 7, 21, 27, - 31, 32, 36, 36, 100, 43, 43, 71, 10, 32, - 67, 67, 29, 6, 8, 64, 61, 29, 29, 45, - 56, 29, 29, 29, 29, 68, 68, 185, 189, 132, - 12, 2, 127, 127, 19, 30, 4, 19, 9, 57, - 105, 79, 79, 19, 5, 79, 46, 18, 18, 18, - 18, 7, 180, 122, 43, 134, 73, 73, 52, 138, - 120, 139, 44, 44, 44, 1, 53, 186, 13, 29, - 189, 12, 162, 15, 29, 29, 29, 29, 29, 17, - 29, 148, 162, 80, 80, 80, 20, 84, 84, 24, - 148, 73, 73, 73, 25, 25, 70, 26, 25, 62, - 62, 4, 70, 166, 166, 144, 123, 37, 7, 48, - 69, 74, 76, 174, 80, 80, 82, 7, 94, 7, - 95, 98, 102, 104, 51, 51, 51, 136, 109, 110, - 111, 112, 113, 114, 83, 115, 116, 117, 189, 118, - 138, 119, 139, 39, 186, 124, 130, 136, 78, 78, - 137, 25, 25, 25, 25, 5, 185, 120, 2, 180, - 140, 132, 123, 64, 141, 29, 29, 29, 29, 29, - 29, 29, 81, 142, 101, 143, 29, 29, 29, 122, - 146, 167, 167, 167, 167, 46, 147, 10, 58, 180, - 29, 21, 21, 134, 31, 21, 58, 39, 39, 123, - 149, 21, 151, 152, 155, 136, 39, 156, 78, 157, - 127, 127, 10, 32, 158, 161, 78, 61, 31, 163, - 30, 164, 165, 168, 169, 29, 29, 144, 170, 171, - 172, 123, 173, 47, 29, 174, 127, 178, 47, 182, - 183, 43, 43, nil, 180, 25, 25, 34, nil, nil, - nil, nil, 29, 47, 25, 25, 29, nil, nil, nil, - 29, 29, 47, 47, 47, 12, 47, 34, nil, 105, - 81, nil, nil, nil, 81, 18, 9, 29, 10, 162, - 31, 30, nil, 10, nil, 144, 144, 29, 71, 31, - 100, 7, 47, 174, 174, nil, 32, 47, 47, 108, - nil, 47, 29, 29, 29, 43, nil, 6, 8, nil, - 56, 57, nil, 32, 31, 43, 127, nil, nil, 58, - nil, 30, 84, 29, 105, 10, 10, 80, 52, 73, - 4, 30, 99, 52, 42, 80, 53, 83, 70, 29, - 70, 53, 32, nil, nil, 43, 73, nil, 64, 47, - nil, nil, nil, 43, 47, 47, 47, 47, 47, nil, - 47, 45, nil, 34, nil, 30, 45, 16, 51, 32, - 79, nil, 189, nil, nil, nil, 51, nil, 167, 25, - 167, nil, 39, nil, nil, 4, nil, 27, 27, 43, - 43, 81, 27, 27, nil, nil, 54, 81, nil, 64, - 25, nil, nil, nil, nil, 32, 70, 67, 81, nil, - 29, nil, 23, nil, 34, nil, 25, nil, nil, nil, - nil, 19, 68, nil, nil, nil, 9, 11, nil, nil, - 9, 19, 19, nil, nil, nil, 19, 19, nil, 81, - nil, nil, nil, 39, nil, 47, 47, 47, 47, 47, - 47, 47, 54, nil, 83, nil, 47, 47, 47, nil, - nil, 29, nil, 64, nil, nil, nil, nil, nil, 29, - 47, 29, 81, 64, 44, 54, nil, 29, nil, nil, - 44, nil, 81, 39, nil, nil, 29, nil, 181, 99, - 70, 70, 78, 39, nil, 70, 70, nil, 36, nil, - nil, 29, 56, 64, 29, 47, 47, nil, 133, 64, - 56, 29, 81, nil, 47, 99, 101, nil, nil, nil, - 81, 29, 44, 10, 105, 29, 10, 39, nil, 27, - 96, nil, 47, 133, nil, 133, 47, 9, 73, nil, - 64, 47, nil, 105, nil, nil, 73, 64, nil, nil, - nil, 9, 80, nil, 29, 29, 81, 34, 29, 16, - 77, nil, nil, 25, 29, 29, nil, 47, 145, 29, - 29, nil, 31, 19, nil, nil, nil, nil, nil, 21, - nil, 34, 47, 47, 47, nil, nil, nil, nil, 21, - 21, nil, nil, 80, 21, 21, nil, 7, 78, 67, - 29, nil, 22, 47, nil, nil, 81, 22, nil, 81, - nil, 29, nil, nil, 68, nil, 63, 181, nil, 47, - 181, nil, 181, 54, 181, nil, nil, nil, nil, nil, - nil, nil, 70, 56, nil, 22, 9, nil, nil, nil, - 133, nil, 133, 34, 56, 70, 70, 70, 70, 18, - nil, nil, 34, nil, nil, nil, nil, nil, 9, nil, - nil, 22, 54, 80, 133, nil, 54, nil, nil, 73, - 29, 22, 64, nil, nil, 29, 29, 34, nil, 29, - 73, nil, 54, nil, 179, nil, nil, 77, 54, 29, - 47, 77, 10, nil, nil, nil, nil, nil, nil, 181, - nil, 181, nil, 181, nil, 181, 29, 54, nil, nil, - 34, 10, nil, nil, nil, nil, nil, nil, 22, 133, - nil, nil, nil, nil, 70, nil, nil, 22, nil, 22, - 34, 21, nil, nil, 29, nil, 30, 181, nil, nil, - nil, 47, nil, nil, nil, 29, 54, nil, nil, 18, - nil, 47, nil, 25, nil, nil, 10, nil, nil, nil, - 43, nil, nil, nil, nil, 50, 47, 10, nil, nil, - 50, 121, nil, nil, nil, nil, 29, nil, nil, nil, - 29, 47, nil, nil, 47, 50, 29, nil, 34, nil, - nil, 47, nil, nil, 50, 50, 50, nil, 50, nil, - 29, 47, 10, nil, 105, 47, 179, nil, nil, 105, - nil, nil, nil, 29, 22, nil, 22, nil, 29, 22, - nil, nil, 29, nil, 50, 22, nil, nil, nil, 50, - 50, nil, 54, 50, 47, 47, nil, nil, 47, 22, - 10, nil, nil, nil, 47, 47, nil, nil, nil, 47, - 47, nil, nil, 25, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 179, 179, nil, nil, nil, nil, - nil, nil, nil, 29, nil, nil, nil, 29, nil, nil, - nil, 50, 73, nil, 29, 29, 50, 50, 50, 50, - 50, 73, 50, nil, 126, nil, 34, 121, 39, 10, - 121, 22, 29, nil, nil, 22, 10, 29, nil, nil, - 22, nil, 32, 64, nil, 126, 179, nil, 64, nil, - 177, 177, 177, nil, 10, nil, 29, 81, nil, nil, - nil, nil, nil, nil, nil, 34, 22, nil, nil, nil, - nil, 179, 73, 179, nil, nil, nil, nil, nil, nil, - 47, nil, 22, 22, nil, 47, 47, nil, 28, 47, - nil, nil, nil, 28, nil, nil, nil, nil, nil, 47, - nil, nil, nil, nil, 121, nil, 121, 50, 50, 50, - 50, 50, 50, 50, nil, nil, 47, 54, 50, 50, - 50, 28, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 50, nil, nil, nil, nil, 54, nil, nil, - nil, nil, nil, nil, 47, nil, nil, 28, nil, nil, - 128, nil, nil, 126, nil, 47, 126, nil, 126, nil, - 126, 121, 121, nil, nil, nil, nil, 50, 50, nil, - nil, 128, nil, nil, 128, nil, 50, nil, 179, nil, - 179, nil, 131, nil, nil, nil, 47, nil, nil, 54, - 47, nil, nil, nil, 50, nil, 47, nil, 50, 121, - nil, 121, 179, 50, 28, nil, nil, nil, nil, 131, - 47, 131, nil, 28, nil, 28, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 47, 50, - nil, 121, nil, nil, nil, 126, nil, 126, nil, 126, - 22, 126, nil, nil, 50, 50, 50, nil, nil, nil, - nil, nil, nil, nil, nil, 177, 177, 179, 177, 177, - nil, 177, nil, nil, nil, 50, 129, 129, 129, nil, - nil, nil, nil, 126, nil, nil, nil, nil, nil, 128, - 22, 50, 128, 22, 128, nil, 128, 47, nil, nil, - nil, nil, nil, nil, 47, 47, nil, nil, nil, nil, - 28, nil, 28, nil, 22, 28, nil, nil, nil, nil, - nil, 28, 47, nil, nil, nil, 131, 47, 131, nil, - nil, nil, nil, nil, nil, 28, nil, nil, nil, nil, - nil, nil, nil, 22, nil, nil, 47, 22, 131, nil, - 131, nil, 131, 22, 22, nil, 33, nil, 22, 22, - nil, 33, 50, nil, nil, 177, 177, 177, 177, nil, - nil, 128, nil, 128, nil, 128, nil, 128, nil, nil, - nil, nil, 129, 129, 129, 129, nil, 129, nil, 33, - 33, 33, nil, nil, nil, nil, nil, 28, nil, nil, - nil, 28, nil, 131, nil, 131, 28, 131, nil, 128, - nil, nil, 177, 50, nil, 33, nil, nil, nil, nil, - nil, nil, nil, 50, 131, 33, 33, 33, nil, nil, - nil, nil, 28, nil, nil, nil, nil, nil, 50, nil, - nil, 131, nil, nil, 129, 129, 129, 129, 28, 28, - nil, nil, nil, 50, nil, nil, 50, nil, 129, 22, - nil, nil, nil, 50, 22, nil, nil, nil, 22, nil, - nil, nil, 33, 50, nil, nil, nil, 50, 22, nil, - nil, 33, nil, 33, nil, nil, nil, nil, nil, nil, - nil, nil, 59, nil, nil, 22, nil, 59, nil, nil, - nil, nil, nil, nil, nil, nil, 50, 50, nil, nil, - 50, nil, nil, nil, nil, nil, 50, 50, nil, nil, - nil, 50, 50, 22, nil, 59, 59, 59, nil, nil, - nil, nil, nil, nil, 22, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 59, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 59, 59, 59, 59, nil, nil, nil, 33, 22, - 33, nil, nil, 33, nil, 22, nil, nil, nil, 33, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 22, - nil, nil, nil, 33, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 28, 22, 59, nil, - nil, 22, nil, nil, nil, nil, nil, 59, nil, 59, - nil, nil, 50, nil, nil, nil, nil, 50, 50, nil, - nil, 50, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 50, nil, nil, nil, nil, 28, nil, nil, 28, - nil, nil, nil, nil, nil, 33, nil, nil, 50, 33, - nil, nil, nil, 33, 33, nil, 22, nil, nil, nil, - 28, nil, nil, 22, 22, nil, nil, nil, nil, nil, - 33, nil, nil, nil, nil, nil, 50, nil, nil, nil, - 33, 22, nil, nil, nil, nil, 22, 50, nil, 28, - nil, nil, nil, 28, 59, nil, 33, 33, nil, 28, - 28, nil, nil, nil, 28, 28, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 50, 59, - nil, nil, 50, nil, nil, nil, nil, nil, 50, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 50, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 50, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 59, nil, nil, nil, 59, nil, nil, nil, 59, - 59, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 28, 59, nil, nil, nil, - 28, nil, 60, nil, 28, nil, 59, 60, nil, 50, - nil, nil, nil, nil, 28, nil, 50, 50, nil, nil, - nil, nil, 59, 59, nil, nil, nil, nil, nil, nil, - nil, 28, nil, nil, 50, 60, 60, 60, nil, 50, - nil, nil, nil, nil, 33, nil, nil, nil, nil, nil, - nil, nil, 33, nil, nil, nil, nil, nil, 50, 28, - 33, 60, nil, nil, nil, nil, nil, nil, nil, nil, - 28, 60, 60, 60, 60, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 33, nil, nil, 33, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 28, nil, nil, 33, nil, - nil, 28, nil, nil, nil, 33, nil, nil, 60, nil, - nil, nil, nil, nil, nil, 28, nil, 60, nil, 60, - nil, nil, nil, nil, nil, nil, nil, 33, nil, nil, - nil, 33, nil, 28, nil, nil, nil, 33, 33, nil, - nil, nil, 33, 33, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 59, nil, nil, 33, nil, nil, nil, nil, 59, nil, - nil, nil, nil, nil, 33, nil, 59, nil, nil, nil, - nil, nil, 28, nil, nil, nil, nil, nil, nil, 28, - 28, nil, nil, nil, 60, nil, nil, nil, nil, nil, - 59, nil, nil, 59, nil, nil, nil, 28, nil, nil, - nil, nil, 28, nil, nil, nil, nil, nil, nil, 60, - nil, nil, nil, nil, 59, nil, nil, nil, nil, nil, - nil, nil, nil, 33, nil, nil, nil, nil, 33, nil, - nil, nil, 33, nil, nil, nil, nil, nil, nil, nil, - nil, 75, 33, nil, nil, nil, nil, 59, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 33, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 60, nil, nil, nil, 60, nil, nil, nil, 60, - 60, nil, nil, nil, nil, nil, nil, 33, nil, 59, - nil, nil, nil, nil, nil, nil, 60, nil, 33, nil, - 59, nil, nil, nil, nil, nil, 60, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 60, 60, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 33, nil, nil, nil, nil, nil, 33, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 33, nil, nil, nil, nil, nil, 59, - nil, nil, nil, nil, 59, nil, 33, nil, 59, nil, - nil, 33, nil, nil, nil, 33, nil, nil, 59, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 75, 75, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 59, nil, nil, 33, nil, nil, nil, - 33, 35, nil, nil, 59, nil, nil, 33, 33, nil, - 35, 35, 35, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 35, 35, 33, 35, nil, nil, nil, - 33, nil, nil, nil, nil, nil, nil, nil, 75, 59, - 75, 35, 35, 75, 75, 59, nil, nil, nil, nil, - 60, nil, nil, nil, nil, nil, nil, nil, 60, 59, - nil, nil, nil, nil, nil, nil, 60, nil, nil, nil, - nil, nil, 59, nil, nil, nil, nil, 59, nil, nil, - nil, 59, nil, nil, nil, nil, nil, nil, nil, nil, - 60, nil, nil, 60, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 60, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 59, nil, nil, nil, 59, nil, nil, nil, - nil, nil, nil, 59, 59, nil, nil, 60, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 59, nil, nil, 75, nil, 59, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 60, - nil, nil, nil, nil, 35, 35, nil, nil, 35, 35, - 60, nil, nil, nil, 35, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 35, nil, nil, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, 35, nil, nil, nil, nil, 35, nil, 75, nil, - 75, nil, 75, 35, 35, nil, nil, nil, nil, 60, - nil, nil, 35, nil, 60, nil, nil, nil, 60, 35, - nil, 35, nil, nil, 35, 35, nil, nil, 60, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 75, - nil, nil, 75, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 75, nil, nil, - nil, nil, 35, nil, 35, nil, nil, nil, nil, nil, - nil, nil, nil, 60, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 60, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 75, nil, nil, nil, nil, nil, nil, nil, nil, 75, - 75, nil, nil, nil, nil, nil, nil, nil, nil, 60, - nil, nil, nil, nil, nil, 60, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 60, - nil, 75, nil, nil, 75, 35, nil, nil, nil, nil, - nil, nil, 60, nil, nil, nil, nil, 60, nil, nil, - nil, 60, nil, 75, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 35, 75, - 35, 35, 35, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 60, nil, nil, nil, 60, nil, nil, nil, - nil, nil, nil, 60, 60, nil, nil, nil, nil, 35, - nil, 35, nil, 35, nil, nil, nil, nil, nil, nil, - nil, 60, nil, nil, nil, 75, 60, nil, nil, 35, - nil, nil, nil, nil, nil, nil, nil, nil, 35, 35, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 35, nil, nil, 35, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 35, 35, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 35, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 75, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 75, nil, nil, nil, - nil, 35, 35, 35, nil, nil, nil, 35, nil, nil, - 35, 35, 35, 35, 75, nil, nil, 35, 35, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 35, nil, nil, 35, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 35, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 35, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 35, nil, nil, nil, - nil, nil, nil, nil, 35, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 35, 35, 35, - 35, nil, 35, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 35, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 35, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 35, 35, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 35 ] - -racc_goto_pointer = [ - nil, 115, 81, nil, 83, 89, 60, 42, 57, -246, - 25, -495, -582, -672, nil, -385, 12, 120, -24, -130, - 67, 28, 652, -201, -74, 80, 19, -174, 1008, 3, - -187, -382, 35, 1266, -19, 2171, -14, -395, nil, -25, - nil, nil, 0, -164, 86, -202, -397, 283, -330, nil, - 815, 145, 75, 83, 221, nil, 36, 54, -278, 1402, - 1732, -299, 79, -63, -7, nil, nil, 52, 67, -249, - -71, 16, nil, 72, 117, 1940, 102, -53, -15, -247, - 104, 3, -320, -251, -472, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 96, 109, -51, nil, -174, -329, - -647, -331, 103, nil, -196, 22, nil, nil, -556, 106, - 121, -155, 122, 119, -386, -539, -187, -196, -385, -647, - -779, 135, -583, -735, -584, nil, 165, -589, 291, 334, - -583, 323, -700, -221, -530, nil, -602, -719, -810, -808, - -337, -584, -122, -443, -392, -12, -642, -637, -354, -16, - nil, -24, -24, nil, nil, -375, -640, -404, -530, nil, - nil, 183, 38, 182, 183, 183, -238, -158, 183, 183, - 186, -300, -300, -288, -384, nil, nil, 296, -517, 187, - -702, -241, -511, -618, nil, -729, -796, nil, nil, -422 ] - -racc_goto_default = [ - nil, nil, nil, 3, nil, 4, 354, 300, nil, nil, - 534, nil, 822, nil, 297, 298, nil, nil, nil, 11, - 12, 18, 233, nil, nil, 14, nil, 419, 234, 328, - nil, nil, 567, 232, 454, 21, nil, nil, 349, 22, - 23, 24, nil, 656, nil, nil, nil, 317, nil, 25, - 314, 433, 32, nil, nil, 34, 37, 36, nil, 229, - 230, 366, nil, 135, 441, 134, 137, 80, 81, nil, - 424, 95, 44, 47, 265, 289, nil, 791, 434, nil, - 435, 446, 615, 497, 287, 273, 48, 49, 50, 51, - 52, 53, 54, 55, 56, nil, 274, 62, nil, nil, - nil, nil, nil, 70, nil, 549, 71, 72, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 813, 684, nil, 814, 957, 849, 672, nil, 673, nil, - nil, 674, nil, 676, nil, 778, nil, nil, nil, 682, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 445, nil, nil, 635, 629, nil, nil, nil, nil, 79, - 82, 83, nil, nil, nil, nil, nil, 577, nil, nil, - nil, nil, nil, nil, 878, 728, 671, nil, 675, 886, - 687, 689, 690, 861, 693, 694, 862, 697, 700, 292 ] - -racc_reduce_table = [ - 0, 0, :racc_error, - 1, 146, :_reduce_none, - 2, 147, :_reduce_2, - 0, 148, :_reduce_3, - 1, 148, :_reduce_4, - 3, 148, :_reduce_5, - 2, 148, :_reduce_6, - 1, 150, :_reduce_none, - 2, 150, :_reduce_8, - 3, 153, :_reduce_9, - 4, 154, :_reduce_10, - 2, 155, :_reduce_11, - 0, 159, :_reduce_12, - 1, 159, :_reduce_13, - 3, 159, :_reduce_14, - 2, 159, :_reduce_15, - 1, 160, :_reduce_none, - 2, 160, :_reduce_17, - 0, 171, :_reduce_18, - 4, 152, :_reduce_19, - 3, 152, :_reduce_20, - 3, 152, :_reduce_21, - 3, 152, :_reduce_22, - 2, 152, :_reduce_23, - 3, 152, :_reduce_24, - 3, 152, :_reduce_25, - 3, 152, :_reduce_26, - 3, 152, :_reduce_27, - 3, 152, :_reduce_28, - 4, 152, :_reduce_29, - 1, 152, :_reduce_none, - 3, 152, :_reduce_31, - 3, 152, :_reduce_32, - 3, 152, :_reduce_33, - 1, 152, :_reduce_none, - 3, 164, :_reduce_35, - 3, 164, :_reduce_36, - 6, 164, :_reduce_37, - 5, 164, :_reduce_38, - 5, 164, :_reduce_39, - 5, 164, :_reduce_40, - 5, 164, :_reduce_41, - 3, 164, :_reduce_42, - 1, 172, :_reduce_none, - 3, 172, :_reduce_44, - 1, 172, :_reduce_none, - 1, 170, :_reduce_none, - 3, 170, :_reduce_47, - 3, 170, :_reduce_48, - 3, 170, :_reduce_49, - 2, 170, :_reduce_50, - 1, 170, :_reduce_none, - 1, 163, :_reduce_none, - 0, 183, :_reduce_53, - 3, 181, :_reduce_54, - 1, 166, :_reduce_none, - 1, 166, :_reduce_none, - 1, 185, :_reduce_none, - 4, 185, :_reduce_58, - 0, 193, :_reduce_59, - 4, 190, :_reduce_60, - 1, 192, :_reduce_none, - 2, 184, :_reduce_62, - 3, 184, :_reduce_63, - 4, 184, :_reduce_64, - 5, 184, :_reduce_65, - 4, 184, :_reduce_66, - 5, 184, :_reduce_67, - 2, 184, :_reduce_68, - 2, 184, :_reduce_69, - 2, 184, :_reduce_70, - 2, 184, :_reduce_71, - 2, 184, :_reduce_72, - 1, 165, :_reduce_73, - 3, 165, :_reduce_74, - 1, 198, :_reduce_75, - 3, 198, :_reduce_76, - 1, 197, :_reduce_none, - 2, 197, :_reduce_78, - 3, 197, :_reduce_79, - 5, 197, :_reduce_80, - 2, 197, :_reduce_81, - 4, 197, :_reduce_82, - 2, 197, :_reduce_83, - 4, 197, :_reduce_84, - 1, 197, :_reduce_85, - 3, 197, :_reduce_86, - 1, 201, :_reduce_none, - 3, 201, :_reduce_88, - 2, 200, :_reduce_89, - 3, 200, :_reduce_90, - 1, 203, :_reduce_91, - 3, 203, :_reduce_92, - 1, 202, :_reduce_93, - 1, 202, :_reduce_94, - 4, 202, :_reduce_95, - 3, 202, :_reduce_96, - 3, 202, :_reduce_97, - 3, 202, :_reduce_98, - 3, 202, :_reduce_99, - 2, 202, :_reduce_100, - 1, 202, :_reduce_101, - 1, 167, :_reduce_102, - 1, 167, :_reduce_103, - 4, 167, :_reduce_104, - 3, 167, :_reduce_105, - 3, 167, :_reduce_106, - 3, 167, :_reduce_107, - 3, 167, :_reduce_108, - 2, 167, :_reduce_109, - 1, 167, :_reduce_110, - 1, 206, :_reduce_111, - 1, 206, :_reduce_none, - 2, 207, :_reduce_113, - 1, 207, :_reduce_114, - 3, 207, :_reduce_115, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 211, :_reduce_121, - 1, 211, :_reduce_none, - 1, 161, :_reduce_none, - 1, 161, :_reduce_none, - 1, 162, :_reduce_125, - 0, 214, :_reduce_126, - 4, 162, :_reduce_127, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 3, 180, :_reduce_199, - 3, 180, :_reduce_200, - 6, 180, :_reduce_201, - 5, 180, :_reduce_202, - 5, 180, :_reduce_203, - 5, 180, :_reduce_204, - 5, 180, :_reduce_205, - 4, 180, :_reduce_206, - 3, 180, :_reduce_207, - 3, 180, :_reduce_208, - 3, 180, :_reduce_209, - 2, 180, :_reduce_210, - 2, 180, :_reduce_211, - 3, 180, :_reduce_212, - 3, 180, :_reduce_213, - 3, 180, :_reduce_214, - 3, 180, :_reduce_215, - 3, 180, :_reduce_216, - 3, 180, :_reduce_217, - 4, 180, :_reduce_218, - 2, 180, :_reduce_219, - 2, 180, :_reduce_220, - 3, 180, :_reduce_221, - 3, 180, :_reduce_222, - 3, 180, :_reduce_223, - 3, 180, :_reduce_224, - 1, 180, :_reduce_none, - 3, 180, :_reduce_226, - 3, 180, :_reduce_227, - 3, 180, :_reduce_228, - 3, 180, :_reduce_229, - 3, 180, :_reduce_230, - 2, 180, :_reduce_231, - 2, 180, :_reduce_232, - 3, 180, :_reduce_233, - 3, 180, :_reduce_234, - 3, 180, :_reduce_235, - 3, 180, :_reduce_236, - 3, 180, :_reduce_237, - 6, 180, :_reduce_238, - 1, 180, :_reduce_none, - 1, 219, :_reduce_none, - 1, 219, :_reduce_none, - 1, 219, :_reduce_none, - 1, 219, :_reduce_none, - 3, 217, :_reduce_244, - 3, 217, :_reduce_245, - 1, 220, :_reduce_none, - 1, 221, :_reduce_none, - 2, 221, :_reduce_none, - 4, 221, :_reduce_249, - 2, 221, :_reduce_250, - 1, 215, :_reduce_none, - 3, 215, :_reduce_252, - 3, 226, :_reduce_253, - 0, 227, :_reduce_254, - 1, 227, :_reduce_none, - 0, 175, :_reduce_256, - 1, 175, :_reduce_none, - 2, 175, :_reduce_none, - 4, 175, :_reduce_259, - 2, 175, :_reduce_260, - 1, 196, :_reduce_261, - 2, 196, :_reduce_262, - 2, 196, :_reduce_263, - 4, 196, :_reduce_264, - 1, 196, :_reduce_265, - 0, 230, :_reduce_266, - 2, 189, :_reduce_267, - 2, 229, :_reduce_268, - 2, 228, :_reduce_269, - 0, 228, :_reduce_270, - 1, 223, :_reduce_271, - 2, 223, :_reduce_272, - 3, 223, :_reduce_273, - 4, 223, :_reduce_274, - 1, 169, :_reduce_275, - 1, 169, :_reduce_none, - 3, 168, :_reduce_277, - 4, 168, :_reduce_278, - 2, 168, :_reduce_279, - 1, 218, :_reduce_none, - 1, 218, :_reduce_none, - 1, 218, :_reduce_none, - 1, 218, :_reduce_none, - 1, 218, :_reduce_none, - 1, 218, :_reduce_none, - 1, 218, :_reduce_none, - 1, 218, :_reduce_none, - 1, 218, :_reduce_none, - 1, 218, :_reduce_none, - 1, 218, :_reduce_290, - 0, 255, :_reduce_291, - 4, 218, :_reduce_292, - 0, 256, :_reduce_293, - 4, 218, :_reduce_294, - 0, 257, :_reduce_295, - 4, 218, :_reduce_296, - 3, 218, :_reduce_297, - 3, 218, :_reduce_298, - 2, 218, :_reduce_299, - 3, 218, :_reduce_300, - 3, 218, :_reduce_301, - 1, 218, :_reduce_302, - 4, 218, :_reduce_303, - 3, 218, :_reduce_304, - 1, 218, :_reduce_305, - 5, 218, :_reduce_306, - 4, 218, :_reduce_307, - 3, 218, :_reduce_308, - 2, 218, :_reduce_309, - 1, 218, :_reduce_none, - 2, 218, :_reduce_311, - 0, 258, :_reduce_312, - 3, 218, :_reduce_313, - 6, 218, :_reduce_314, - 6, 218, :_reduce_315, - 4, 218, :_reduce_316, - 4, 218, :_reduce_317, - 5, 218, :_reduce_318, - 4, 218, :_reduce_319, - 6, 218, :_reduce_320, - 0, 259, :_reduce_321, - 6, 218, :_reduce_322, - 0, 260, :_reduce_323, - 7, 218, :_reduce_324, - 0, 261, :_reduce_325, - 5, 218, :_reduce_326, - 0, 262, :_reduce_327, - 6, 218, :_reduce_328, - 0, 263, :_reduce_329, - 0, 264, :_reduce_330, - 9, 218, :_reduce_331, - 1, 218, :_reduce_332, - 1, 218, :_reduce_333, - 1, 218, :_reduce_334, - 1, 218, :_reduce_335, - 1, 174, :_reduce_none, - 1, 248, :_reduce_337, - 1, 251, :_reduce_338, - 1, 252, :_reduce_339, - 1, 195, :_reduce_340, - 1, 244, :_reduce_none, - 1, 244, :_reduce_none, - 2, 244, :_reduce_343, - 1, 182, :_reduce_none, - 1, 182, :_reduce_none, - 1, 245, :_reduce_none, - 5, 245, :_reduce_347, - 1, 157, :_reduce_none, - 2, 157, :_reduce_349, - 1, 247, :_reduce_none, - 1, 247, :_reduce_none, - 1, 265, :_reduce_352, - 3, 265, :_reduce_353, - 1, 268, :_reduce_354, - 3, 268, :_reduce_355, - 1, 267, :_reduce_none, - 4, 267, :_reduce_357, - 6, 267, :_reduce_358, - 3, 267, :_reduce_359, - 5, 267, :_reduce_360, - 2, 267, :_reduce_361, - 4, 267, :_reduce_362, - 1, 267, :_reduce_363, - 3, 267, :_reduce_364, - 4, 269, :_reduce_365, - 2, 269, :_reduce_366, - 2, 269, :_reduce_367, - 1, 269, :_reduce_368, - 2, 274, :_reduce_369, - 0, 274, :_reduce_370, - 6, 275, :_reduce_371, - 8, 275, :_reduce_372, - 4, 275, :_reduce_373, - 6, 275, :_reduce_374, - 4, 275, :_reduce_375, - 2, 275, :_reduce_none, - 6, 275, :_reduce_377, - 2, 275, :_reduce_378, - 4, 275, :_reduce_379, - 6, 275, :_reduce_380, - 2, 275, :_reduce_381, - 4, 275, :_reduce_382, - 2, 275, :_reduce_383, - 4, 275, :_reduce_384, - 1, 275, :_reduce_none, - 0, 279, :_reduce_386, - 1, 279, :_reduce_387, - 3, 280, :_reduce_388, - 1, 280, :_reduce_389, - 4, 280, :_reduce_390, - 1, 281, :_reduce_391, - 4, 281, :_reduce_392, - 1, 282, :_reduce_393, - 3, 282, :_reduce_394, - 1, 283, :_reduce_395, - 1, 283, :_reduce_none, - 0, 287, :_reduce_397, - 0, 288, :_reduce_398, - 4, 243, :_reduce_399, - 4, 285, :_reduce_400, - 1, 285, :_reduce_401, - 0, 291, :_reduce_402, - 4, 286, :_reduce_403, - 0, 292, :_reduce_404, - 4, 286, :_reduce_405, - 0, 294, :_reduce_406, - 4, 290, :_reduce_407, - 2, 186, :_reduce_408, - 4, 186, :_reduce_409, - 5, 186, :_reduce_410, - 5, 186, :_reduce_411, - 2, 242, :_reduce_412, - 4, 242, :_reduce_413, - 4, 242, :_reduce_414, - 3, 242, :_reduce_415, - 3, 242, :_reduce_416, - 3, 242, :_reduce_417, - 2, 242, :_reduce_418, - 1, 242, :_reduce_419, - 4, 242, :_reduce_420, - 0, 296, :_reduce_421, - 4, 241, :_reduce_422, - 0, 297, :_reduce_423, - 4, 241, :_reduce_424, - 0, 298, :_reduce_425, - 3, 191, :_reduce_426, - 0, 299, :_reduce_427, - 0, 300, :_reduce_428, - 4, 293, :_reduce_429, - 5, 246, :_reduce_430, - 1, 301, :_reduce_431, - 1, 301, :_reduce_none, - 6, 156, :_reduce_433, - 0, 156, :_reduce_434, - 1, 302, :_reduce_435, - 1, 302, :_reduce_none, - 1, 302, :_reduce_none, - 2, 303, :_reduce_438, - 1, 303, :_reduce_none, - 2, 158, :_reduce_440, - 1, 158, :_reduce_none, - 1, 231, :_reduce_none, - 1, 231, :_reduce_none, - 1, 231, :_reduce_none, - 1, 232, :_reduce_445, - 1, 305, :_reduce_446, - 2, 305, :_reduce_447, - 3, 306, :_reduce_448, - 1, 306, :_reduce_449, - 1, 306, :_reduce_450, - 3, 233, :_reduce_451, - 4, 234, :_reduce_452, - 3, 235, :_reduce_453, - 0, 310, :_reduce_454, - 3, 310, :_reduce_455, - 1, 311, :_reduce_456, - 2, 311, :_reduce_457, - 3, 237, :_reduce_458, - 0, 313, :_reduce_459, - 3, 313, :_reduce_460, - 3, 236, :_reduce_461, - 3, 238, :_reduce_462, - 0, 314, :_reduce_463, - 3, 314, :_reduce_464, - 0, 315, :_reduce_465, - 3, 315, :_reduce_466, - 0, 307, :_reduce_467, - 2, 307, :_reduce_468, - 0, 308, :_reduce_469, - 2, 308, :_reduce_470, - 0, 309, :_reduce_471, - 2, 309, :_reduce_472, - 1, 312, :_reduce_473, - 2, 312, :_reduce_474, - 0, 317, :_reduce_475, - 4, 312, :_reduce_476, - 1, 316, :_reduce_477, - 1, 316, :_reduce_478, - 1, 316, :_reduce_479, - 1, 316, :_reduce_none, - 1, 212, :_reduce_481, - 3, 213, :_reduce_482, - 1, 304, :_reduce_483, - 2, 304, :_reduce_484, - 1, 216, :_reduce_485, - 1, 216, :_reduce_486, - 1, 216, :_reduce_487, - 1, 216, :_reduce_488, - 1, 204, :_reduce_489, - 1, 204, :_reduce_490, - 1, 204, :_reduce_491, - 1, 204, :_reduce_492, - 1, 204, :_reduce_493, - 1, 205, :_reduce_494, - 1, 205, :_reduce_495, - 1, 205, :_reduce_496, - 1, 205, :_reduce_497, - 1, 205, :_reduce_498, - 1, 205, :_reduce_499, - 1, 205, :_reduce_500, - 1, 239, :_reduce_501, - 1, 239, :_reduce_502, - 1, 173, :_reduce_503, - 1, 173, :_reduce_504, - 1, 178, :_reduce_505, - 1, 178, :_reduce_506, - 0, 318, :_reduce_507, - 4, 249, :_reduce_508, - 0, 249, :_reduce_509, - 3, 253, :_reduce_510, - 0, 320, :_reduce_511, - 3, 253, :_reduce_512, - 4, 319, :_reduce_513, - 2, 319, :_reduce_514, - 2, 319, :_reduce_515, - 1, 319, :_reduce_516, - 2, 322, :_reduce_517, - 0, 322, :_reduce_518, - 6, 289, :_reduce_519, - 8, 289, :_reduce_520, - 4, 289, :_reduce_521, - 6, 289, :_reduce_522, - 4, 289, :_reduce_523, - 6, 289, :_reduce_524, - 2, 289, :_reduce_525, - 4, 289, :_reduce_526, - 6, 289, :_reduce_527, - 2, 289, :_reduce_528, - 4, 289, :_reduce_529, - 2, 289, :_reduce_530, - 4, 289, :_reduce_531, - 1, 289, :_reduce_532, - 0, 289, :_reduce_533, - 1, 284, :_reduce_534, - 1, 284, :_reduce_535, - 1, 284, :_reduce_536, - 1, 284, :_reduce_537, - 1, 266, :_reduce_none, - 1, 266, :_reduce_539, - 1, 324, :_reduce_540, - 1, 325, :_reduce_541, - 3, 325, :_reduce_542, - 1, 276, :_reduce_543, - 3, 276, :_reduce_544, - 1, 326, :_reduce_545, - 2, 327, :_reduce_546, - 1, 327, :_reduce_547, - 2, 328, :_reduce_548, - 1, 328, :_reduce_549, - 1, 270, :_reduce_550, - 3, 270, :_reduce_551, - 1, 321, :_reduce_552, - 3, 321, :_reduce_553, - 1, 329, :_reduce_none, - 1, 329, :_reduce_none, - 2, 271, :_reduce_556, - 1, 271, :_reduce_557, - 3, 330, :_reduce_558, - 3, 331, :_reduce_559, - 1, 277, :_reduce_560, - 3, 277, :_reduce_561, - 1, 323, :_reduce_562, - 3, 323, :_reduce_563, - 1, 332, :_reduce_none, - 1, 332, :_reduce_none, - 2, 278, :_reduce_566, - 1, 278, :_reduce_567, - 1, 333, :_reduce_none, - 1, 333, :_reduce_none, - 2, 273, :_reduce_570, - 2, 272, :_reduce_571, - 0, 272, :_reduce_572, - 1, 254, :_reduce_none, - 3, 254, :_reduce_574, - 0, 240, :_reduce_575, - 2, 240, :_reduce_none, - 1, 225, :_reduce_577, - 3, 225, :_reduce_578, - 3, 334, :_reduce_579, - 2, 334, :_reduce_580, - 4, 334, :_reduce_581, - 2, 334, :_reduce_582, - 1, 194, :_reduce_none, - 1, 194, :_reduce_none, - 1, 194, :_reduce_none, - 1, 188, :_reduce_none, - 1, 188, :_reduce_none, - 1, 188, :_reduce_none, - 1, 188, :_reduce_none, - 1, 295, :_reduce_none, - 1, 295, :_reduce_none, - 1, 295, :_reduce_none, - 1, 187, :_reduce_none, - 1, 187, :_reduce_none, - 1, 177, :_reduce_595, - 1, 177, :_reduce_596, - 0, 149, :_reduce_none, - 1, 149, :_reduce_none, - 0, 179, :_reduce_none, - 1, 179, :_reduce_none, - 2, 199, :_reduce_601, - 2, 176, :_reduce_602, - 0, 224, :_reduce_none, - 1, 224, :_reduce_none, - 1, 224, :_reduce_none, - 1, 250, :_reduce_606, - 1, 250, :_reduce_none, - 1, 151, :_reduce_none, - 2, 151, :_reduce_none, - 0, 222, :_reduce_610 ] - -racc_reduce_n = 611 - -racc_shift_n = 1036 - -racc_token_table = { - false => 0, - :error => 1, - :kCLASS => 2, - :kMODULE => 3, - :kDEF => 4, - :kUNDEF => 5, - :kBEGIN => 6, - :kRESCUE => 7, - :kENSURE => 8, - :kEND => 9, - :kIF => 10, - :kUNLESS => 11, - :kTHEN => 12, - :kELSIF => 13, - :kELSE => 14, - :kCASE => 15, - :kWHEN => 16, - :kWHILE => 17, - :kUNTIL => 18, - :kFOR => 19, - :kBREAK => 20, - :kNEXT => 21, - :kREDO => 22, - :kRETRY => 23, - :kIN => 24, - :kDO => 25, - :kDO_COND => 26, - :kDO_BLOCK => 27, - :kDO_LAMBDA => 28, - :kRETURN => 29, - :kYIELD => 30, - :kSUPER => 31, - :kSELF => 32, - :kNIL => 33, - :kTRUE => 34, - :kFALSE => 35, - :kAND => 36, - :kOR => 37, - :kNOT => 38, - :kIF_MOD => 39, - :kUNLESS_MOD => 40, - :kWHILE_MOD => 41, - :kUNTIL_MOD => 42, - :kRESCUE_MOD => 43, - :kALIAS => 44, - :kDEFINED => 45, - :klBEGIN => 46, - :klEND => 47, - :k__LINE__ => 48, - :k__FILE__ => 49, - :k__ENCODING__ => 50, - :tIDENTIFIER => 51, - :tFID => 52, - :tGVAR => 53, - :tIVAR => 54, - :tCONSTANT => 55, - :tLABEL => 56, - :tCVAR => 57, - :tNTH_REF => 58, - :tBACK_REF => 59, - :tSTRING_CONTENT => 60, - :tINTEGER => 61, - :tFLOAT => 62, - :tUPLUS => 63, - :tUMINUS => 64, - :tUNARY_NUM => 65, - :tPOW => 66, - :tCMP => 67, - :tEQ => 68, - :tEQQ => 69, - :tNEQ => 70, - :tGEQ => 71, - :tLEQ => 72, - :tANDOP => 73, - :tOROP => 74, - :tMATCH => 75, - :tNMATCH => 76, - :tDOT => 77, - :tDOT2 => 78, - :tDOT3 => 79, - :tAREF => 80, - :tASET => 81, - :tLSHFT => 82, - :tRSHFT => 83, - :tCOLON2 => 84, - :tCOLON3 => 85, - :tOP_ASGN => 86, - :tASSOC => 87, - :tLPAREN => 88, - :tLPAREN2 => 89, - :tRPAREN => 90, - :tLPAREN_ARG => 91, - :tLBRACK => 92, - :tLBRACK2 => 93, - :tRBRACK => 94, - :tLBRACE => 95, - :tLBRACE_ARG => 96, - :tSTAR => 97, - :tSTAR2 => 98, - :tAMPER => 99, - :tAMPER2 => 100, - :tTILDE => 101, - :tPERCENT => 102, - :tDIVIDE => 103, - :tDSTAR => 104, - :tPLUS => 105, - :tMINUS => 106, - :tLT => 107, - :tGT => 108, - :tPIPE => 109, - :tBANG => 110, - :tCARET => 111, - :tLCURLY => 112, - :tRCURLY => 113, - :tBACK_REF2 => 114, - :tSYMBEG => 115, - :tSTRING_BEG => 116, - :tXSTRING_BEG => 117, - :tREGEXP_BEG => 118, - :tREGEXP_OPT => 119, - :tWORDS_BEG => 120, - :tQWORDS_BEG => 121, - :tSYMBOLS_BEG => 122, - :tQSYMBOLS_BEG => 123, - :tSTRING_DBEG => 124, - :tSTRING_DVAR => 125, - :tSTRING_END => 126, - :tSTRING_DEND => 127, - :tSTRING => 128, - :tSYMBOL => 129, - :tNL => 130, - :tEH => 131, - :tCOLON => 132, - :tCOMMA => 133, - :tSPACE => 134, - :tSEMI => 135, - :tLAMBDA => 136, - :tLAMBEG => 137, - :tCHARACTER => 138, - :tRATIONAL => 139, - :tIMAGINARY => 140, - :tLABEL_END => 141, - :tANDDOT => 142, - :tEQL => 143, - :tLOWEST => 144 } - -racc_nt_base = 145 - -racc_use_result_var = true - -Racc_arg = [ - racc_action_table, - racc_action_check, - racc_action_default, - racc_action_pointer, - racc_goto_table, - racc_goto_check, - racc_goto_default, - racc_goto_pointer, - racc_nt_base, - racc_reduce_table, - racc_token_table, - racc_shift_n, - racc_reduce_n, - racc_use_result_var ] -Ractor.make_shareable(Racc_arg) if defined?(Ractor) - -Racc_token_to_s_table = [ - "$end", - "error", - "kCLASS", - "kMODULE", - "kDEF", - "kUNDEF", - "kBEGIN", - "kRESCUE", - "kENSURE", - "kEND", - "kIF", - "kUNLESS", - "kTHEN", - "kELSIF", - "kELSE", - "kCASE", - "kWHEN", - "kWHILE", - "kUNTIL", - "kFOR", - "kBREAK", - "kNEXT", - "kREDO", - "kRETRY", - "kIN", - "kDO", - "kDO_COND", - "kDO_BLOCK", - "kDO_LAMBDA", - "kRETURN", - "kYIELD", - "kSUPER", - "kSELF", - "kNIL", - "kTRUE", - "kFALSE", - "kAND", - "kOR", - "kNOT", - "kIF_MOD", - "kUNLESS_MOD", - "kWHILE_MOD", - "kUNTIL_MOD", - "kRESCUE_MOD", - "kALIAS", - "kDEFINED", - "klBEGIN", - "klEND", - "k__LINE__", - "k__FILE__", - "k__ENCODING__", - "tIDENTIFIER", - "tFID", - "tGVAR", - "tIVAR", - "tCONSTANT", - "tLABEL", - "tCVAR", - "tNTH_REF", - "tBACK_REF", - "tSTRING_CONTENT", - "tINTEGER", - "tFLOAT", - "tUPLUS", - "tUMINUS", - "tUNARY_NUM", - "tPOW", - "tCMP", - "tEQ", - "tEQQ", - "tNEQ", - "tGEQ", - "tLEQ", - "tANDOP", - "tOROP", - "tMATCH", - "tNMATCH", - "tDOT", - "tDOT2", - "tDOT3", - "tAREF", - "tASET", - "tLSHFT", - "tRSHFT", - "tCOLON2", - "tCOLON3", - "tOP_ASGN", - "tASSOC", - "tLPAREN", - "tLPAREN2", - "tRPAREN", - "tLPAREN_ARG", - "tLBRACK", - "tLBRACK2", - "tRBRACK", - "tLBRACE", - "tLBRACE_ARG", - "tSTAR", - "tSTAR2", - "tAMPER", - "tAMPER2", - "tTILDE", - "tPERCENT", - "tDIVIDE", - "tDSTAR", - "tPLUS", - "tMINUS", - "tLT", - "tGT", - "tPIPE", - "tBANG", - "tCARET", - "tLCURLY", - "tRCURLY", - "tBACK_REF2", - "tSYMBEG", - "tSTRING_BEG", - "tXSTRING_BEG", - "tREGEXP_BEG", - "tREGEXP_OPT", - "tWORDS_BEG", - "tQWORDS_BEG", - "tSYMBOLS_BEG", - "tQSYMBOLS_BEG", - "tSTRING_DBEG", - "tSTRING_DVAR", - "tSTRING_END", - "tSTRING_DEND", - "tSTRING", - "tSYMBOL", - "tNL", - "tEH", - "tCOLON", - "tCOMMA", - "tSPACE", - "tSEMI", - "tLAMBDA", - "tLAMBEG", - "tCHARACTER", - "tRATIONAL", - "tIMAGINARY", - "tLABEL_END", - "tANDDOT", - "tEQL", - "tLOWEST", - "$start", - "program", - "top_compstmt", - "top_stmts", - "opt_terms", - "top_stmt", - "terms", - "stmt", - "begin_block", - "bodystmt", - "compstmt", - "opt_rescue", - "opt_else", - "opt_ensure", - "stmts", - "stmt_or_begin", - "fitem", - "undef_list", - "expr_value", - "command_asgn", - "mlhs", - "command_call", - "lhs", - "mrhs", - "mrhs_arg", - "expr", - "@1", - "command_rhs", - "var_lhs", - "primary_value", - "opt_call_args", - "rbracket", - "call_op", - "backref", - "opt_nl", - "arg", - "expr_value_do", - "do", - "@2", - "command", - "block_command", - "block_call", - "dot_or_colon", - "operation2", - "command_args", - "cmd_brace_block", - "brace_body", - "fcall", - "@3", - "operation", - "k_return", - "call_args", - "mlhs_basic", - "mlhs_inner", - "rparen", - "mlhs_head", - "mlhs_item", - "mlhs_node", - "mlhs_post", - "user_variable", - "keyword_variable", - "cname", - "cpath", - "fname", - "op", - "reswords", - "fsym", - "symbol", - "dsym", - "@4", - "arg_rhs", - "simple_numeric", - "rel_expr", - "primary", - "relop", - "arg_value", - "aref_args", - "none", - "args", - "trailer", - "assocs", - "paren_args", - "opt_paren_args", - "opt_block_arg", - "block_arg", - "@5", - "literal", - "strings", - "xstring", - "regexp", - "words", - "qwords", - "symbols", - "qsymbols", - "var_ref", - "assoc_list", - "brace_block", - "method_call", - "lambda", - "then", - "if_tail", - "case_body", - "for_var", - "k_class", - "superclass", - "term", - "k_module", - "k_def", - "f_arglist", - "singleton", - "@6", - "@7", - "@8", - "@9", - "@10", - "@11", - "@12", - "@13", - "@14", - "@15", - "f_marg", - "f_norm_arg", - "f_margs", - "f_marg_list", - "block_args_tail", - "f_block_kwarg", - "f_kwrest", - "opt_f_block_arg", - "f_block_arg", - "opt_block_args_tail", - "block_param", - "f_arg", - "f_block_optarg", - "f_rest_arg", - "opt_block_param", - "block_param_def", - "opt_bv_decl", - "bv_decls", - "bvar", - "f_bad_arg", - "f_larglist", - "lambda_body", - "@16", - "@17", - "f_args", - "do_block", - "@18", - "@19", - "do_body", - "@20", - "operation3", - "@21", - "@22", - "@23", - "@24", - "@25", - "cases", - "exc_list", - "exc_var", - "numeric", - "string", - "string1", - "string_contents", - "xstring_contents", - "regexp_contents", - "word_list", - "word", - "string_content", - "symbol_list", - "qword_list", - "qsym_list", - "string_dvar", - "@26", - "@27", - "args_tail", - "@28", - "f_kwarg", - "opt_args_tail", - "f_optarg", - "f_arg_asgn", - "f_arg_item", - "f_label", - "f_kw", - "f_block_kw", - "kwrest_mark", - "f_opt", - "f_block_opt", - "restarg_mark", - "blkarg_mark", - "assoc" ] -Ractor.make_shareable(Racc_token_to_s_table) if defined?(Ractor) - -Racc_debug_parser = false - -##### State transition tables end ##### - -# reduce 0 omitted - -# reduce 1 omitted - -def _reduce_2(val, _values, result) - result = @builder.compstmt(val[0]) - - result -end - -def _reduce_3(val, _values, result) - result = [] - - result -end - -def _reduce_4(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_5(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_6(val, _values, result) - result = [ val[1] ] - - result -end - -# reduce 7 omitted - -def _reduce_8(val, _values, result) - result = @builder.preexe(val[0], *val[1]) - - result -end - -def _reduce_9(val, _values, result) - result = val - - result -end - -def _reduce_10(val, _values, result) - rescue_bodies = val[1] - else_t, else_ = val[2] - ensure_t, ensure_ = val[3] - - if rescue_bodies.empty? && !else_t.nil? - diagnostic :error, :useless_else, nil, else_t - end - - result = @builder.begin_body(val[0], - rescue_bodies, - else_t, else_, - ensure_t, ensure_) - - result -end - -def _reduce_11(val, _values, result) - result = @builder.compstmt(val[0]) - - result -end - -def _reduce_12(val, _values, result) - result = [] - - result -end - -def _reduce_13(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_14(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_15(val, _values, result) - result = [ val[1] ] - - result -end - -# reduce 16 omitted - -def _reduce_17(val, _values, result) - diagnostic :error, :begin_in_method, nil, val[0] - - result -end - -def _reduce_18(val, _values, result) - @lexer.state = :expr_fname - - result -end - -def _reduce_19(val, _values, result) - result = @builder.alias(val[0], val[1], val[3]) - - result -end - -def _reduce_20(val, _values, result) - result = @builder.alias(val[0], - @builder.gvar(val[1]), - @builder.gvar(val[2])) - - result -end - -def _reduce_21(val, _values, result) - result = @builder.alias(val[0], - @builder.gvar(val[1]), - @builder.back_ref(val[2])) - - result -end - -def _reduce_22(val, _values, result) - diagnostic :error, :nth_ref_alias, nil, val[2] - - result -end - -def _reduce_23(val, _values, result) - result = @builder.undef_method(val[0], val[1]) - - result -end - -def _reduce_24(val, _values, result) - result = @builder.condition_mod(val[0], nil, - val[1], val[2]) - - result -end - -def _reduce_25(val, _values, result) - result = @builder.condition_mod(nil, val[0], - val[1], val[2]) - - result -end - -def _reduce_26(val, _values, result) - result = @builder.loop_mod(:while, val[0], val[1], val[2]) - - result -end - -def _reduce_27(val, _values, result) - result = @builder.loop_mod(:until, val[0], val[1], val[2]) - - result -end - -def _reduce_28(val, _values, result) - rescue_body = @builder.rescue_body(val[1], - nil, nil, nil, - nil, val[2]) - - result = @builder.begin_body(val[0], [ rescue_body ]) - - result -end - -def _reduce_29(val, _values, result) - result = @builder.postexe(val[0], val[1], val[2], val[3]) - - result -end - -# reduce 30 omitted - -def _reduce_31(val, _values, result) - result = @builder.multi_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_32(val, _values, result) - result = @builder.assign(val[0], val[1], - @builder.array(nil, val[2], nil)) - - result -end - -def _reduce_33(val, _values, result) - result = @builder.multi_assign(val[0], val[1], val[2]) - - result -end - -# reduce 34 omitted - -def _reduce_35(val, _values, result) - result = @builder.assign(val[0], val[1], val[2]) - - result -end - -def _reduce_36(val, _values, result) - result = @builder.op_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_37(val, _values, result) - result = @builder.op_assign( - @builder.index( - val[0], val[1], val[2], val[3]), - val[4], val[5]) - - result -end - -def _reduce_38(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_39(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_40(val, _values, result) - const = @builder.const_op_assignable( - @builder.const_fetch(val[0], val[1], val[2])) - result = @builder.op_assign(const, val[3], val[4]) - - result -end - -def _reduce_41(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_42(val, _values, result) - @builder.op_assign(val[0], val[1], val[2]) - - result -end - -# reduce 43 omitted - -def _reduce_44(val, _values, result) - rescue_body = @builder.rescue_body(val[1], - nil, nil, nil, - nil, val[2]) - - result = @builder.begin_body(val[0], [ rescue_body ]) - - result -end - -# reduce 45 omitted - -# reduce 46 omitted - -def _reduce_47(val, _values, result) - result = @builder.logical_op(:and, val[0], val[1], val[2]) - - result -end - -def _reduce_48(val, _values, result) - result = @builder.logical_op(:or, val[0], val[1], val[2]) - - result -end - -def _reduce_49(val, _values, result) - result = @builder.not_op(val[0], nil, val[2], nil) - - result -end - -def _reduce_50(val, _values, result) - result = @builder.not_op(val[0], nil, val[1], nil) - - result -end - -# reduce 51 omitted - -# reduce 52 omitted - -def _reduce_53(val, _values, result) - @lexer.cond.push(true) - - result -end - -def _reduce_54(val, _values, result) - @lexer.cond.pop - result = [ val[1], val[2] ] - - result -end - -# reduce 55 omitted - -# reduce 56 omitted - -# reduce 57 omitted - -def _reduce_58(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - result -end - -def _reduce_59(val, _values, result) - result = @context.dup - @context.in_block = true - - result -end - -def _reduce_60(val, _values, result) - result = [ val[0], *val[2], val[3] ] - @context.in_block = val[1].in_block - - result -end - -# reduce 61 omitted - -def _reduce_62(val, _values, result) - result = @builder.call_method(nil, nil, val[0], - nil, val[1], nil) - - result -end - -def _reduce_63(val, _values, result) - method_call = @builder.call_method(nil, nil, val[0], - nil, val[1], nil) - - begin_t, args, body, end_t = val[2] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_64(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - result -end - -def _reduce_65(val, _values, result) - method_call = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - begin_t, args, body, end_t = val[4] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_66(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - result -end - -def _reduce_67(val, _values, result) - method_call = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - begin_t, args, body, end_t = val[4] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_68(val, _values, result) - result = @builder.keyword_cmd(:super, val[0], - nil, val[1], nil) - - result -end - -def _reduce_69(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0], - nil, val[1], nil) - - result -end - -def _reduce_70(val, _values, result) - result = @builder.keyword_cmd(:return, val[0], - nil, val[1], nil) - - result -end - -def _reduce_71(val, _values, result) - result = @builder.keyword_cmd(:break, val[0], - nil, val[1], nil) - - result -end - -def _reduce_72(val, _values, result) - result = @builder.keyword_cmd(:next, val[0], - nil, val[1], nil) - - result -end - -def _reduce_73(val, _values, result) - result = @builder.multi_lhs(nil, val[0], nil) - - result -end - -def _reduce_74(val, _values, result) - result = @builder.begin(val[0], val[1], val[2]) - - result -end - -def _reduce_75(val, _values, result) - result = @builder.multi_lhs(nil, val[0], nil) - - result -end - -def _reduce_76(val, _values, result) - result = @builder.multi_lhs(val[0], val[1], val[2]) - - result -end - -# reduce 77 omitted - -def _reduce_78(val, _values, result) - result = val[0]. - push(val[1]) - - result -end - -def _reduce_79(val, _values, result) - result = val[0]. - push(@builder.splat(val[1], val[2])) - - result -end - -def _reduce_80(val, _values, result) - result = val[0]. - push(@builder.splat(val[1], val[2])). - concat(val[4]) - - result -end - -def _reduce_81(val, _values, result) - result = val[0]. - push(@builder.splat(val[1])) - - result -end - -def _reduce_82(val, _values, result) - result = val[0]. - push(@builder.splat(val[1])). - concat(val[3]) - - result -end - -def _reduce_83(val, _values, result) - result = [ @builder.splat(val[0], val[1]) ] - - result -end - -def _reduce_84(val, _values, result) - result = [ @builder.splat(val[0], val[1]), - *val[3] ] - - result -end - -def _reduce_85(val, _values, result) - result = [ @builder.splat(val[0]) ] - - result -end - -def _reduce_86(val, _values, result) - result = [ @builder.splat(val[0]), - *val[2] ] - - result -end - -# reduce 87 omitted - -def _reduce_88(val, _values, result) - result = @builder.begin(val[0], val[1], val[2]) - - result -end - -def _reduce_89(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_90(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_91(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_92(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_93(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_94(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_95(val, _values, result) - result = @builder.index_asgn(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_96(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_97(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_98(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_99(val, _values, result) - result = @builder.assignable( - @builder.const_fetch(val[0], val[1], val[2])) - - result -end - -def _reduce_100(val, _values, result) - result = @builder.assignable( - @builder.const_global(val[0], val[1])) - - result -end - -def _reduce_101(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_102(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_103(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_104(val, _values, result) - result = @builder.index_asgn(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_105(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_106(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_107(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_108(val, _values, result) - result = @builder.assignable( - @builder.const_fetch(val[0], val[1], val[2])) - - result -end - -def _reduce_109(val, _values, result) - result = @builder.assignable( - @builder.const_global(val[0], val[1])) - - result -end - -def _reduce_110(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_111(val, _values, result) - diagnostic :error, :module_name_const, nil, val[0] - - result -end - -# reduce 112 omitted - -def _reduce_113(val, _values, result) - result = @builder.const_global(val[0], val[1]) - - result -end - -def _reduce_114(val, _values, result) - result = @builder.const(val[0]) - - result -end - -def _reduce_115(val, _values, result) - result = @builder.const_fetch(val[0], val[1], val[2]) - - result -end - -# reduce 116 omitted - -# reduce 117 omitted - -# reduce 118 omitted - -# reduce 119 omitted - -# reduce 120 omitted - -def _reduce_121(val, _values, result) - result = @builder.symbol_internal(val[0]) - - result -end - -# reduce 122 omitted - -# reduce 123 omitted - -# reduce 124 omitted - -def _reduce_125(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_126(val, _values, result) - @lexer.state = :expr_fname - - result -end - -def _reduce_127(val, _values, result) - result = val[0] << val[3] - - result -end - -# reduce 128 omitted - -# reduce 129 omitted - -# reduce 130 omitted - -# reduce 131 omitted - -# reduce 132 omitted - -# reduce 133 omitted - -# reduce 134 omitted - -# reduce 135 omitted - -# reduce 136 omitted - -# reduce 137 omitted - -# reduce 138 omitted - -# reduce 139 omitted - -# reduce 140 omitted - -# reduce 141 omitted - -# reduce 142 omitted - -# reduce 143 omitted - -# reduce 144 omitted - -# reduce 145 omitted - -# reduce 146 omitted - -# reduce 147 omitted - -# reduce 148 omitted - -# reduce 149 omitted - -# reduce 150 omitted - -# reduce 151 omitted - -# reduce 152 omitted - -# reduce 153 omitted - -# reduce 154 omitted - -# reduce 155 omitted - -# reduce 156 omitted - -# reduce 157 omitted - -# reduce 158 omitted - -# reduce 159 omitted - -# reduce 160 omitted - -# reduce 161 omitted - -# reduce 162 omitted - -# reduce 163 omitted - -# reduce 164 omitted - -# reduce 165 omitted - -# reduce 166 omitted - -# reduce 167 omitted - -# reduce 168 omitted - -# reduce 169 omitted - -# reduce 170 omitted - -# reduce 171 omitted - -# reduce 172 omitted - -# reduce 173 omitted - -# reduce 174 omitted - -# reduce 175 omitted - -# reduce 176 omitted - -# reduce 177 omitted - -# reduce 178 omitted - -# reduce 179 omitted - -# reduce 180 omitted - -# reduce 181 omitted - -# reduce 182 omitted - -# reduce 183 omitted - -# reduce 184 omitted - -# reduce 185 omitted - -# reduce 186 omitted - -# reduce 187 omitted - -# reduce 188 omitted - -# reduce 189 omitted - -# reduce 190 omitted - -# reduce 191 omitted - -# reduce 192 omitted - -# reduce 193 omitted - -# reduce 194 omitted - -# reduce 195 omitted - -# reduce 196 omitted - -# reduce 197 omitted - -# reduce 198 omitted - -def _reduce_199(val, _values, result) - result = @builder.assign(val[0], val[1], val[2]) - - result -end - -def _reduce_200(val, _values, result) - result = @builder.op_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_201(val, _values, result) - result = @builder.op_assign( - @builder.index( - val[0], val[1], val[2], val[3]), - val[4], val[5]) - - result -end - -def _reduce_202(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_203(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_204(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_205(val, _values, result) - const = @builder.const_op_assignable( - @builder.const_fetch(val[0], val[1], val[2])) - result = @builder.op_assign(const, val[3], val[4]) - - result -end - -def _reduce_206(val, _values, result) - const = @builder.const_op_assignable( - @builder.const_global(val[0], val[1])) - result = @builder.op_assign(const, val[2], val[3]) - - result -end - -def _reduce_207(val, _values, result) - result = @builder.op_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_208(val, _values, result) - result = @builder.range_inclusive(val[0], val[1], val[2]) - - result -end - -def _reduce_209(val, _values, result) - result = @builder.range_exclusive(val[0], val[1], val[2]) - - result -end - -def _reduce_210(val, _values, result) - result = @builder.range_inclusive(val[0], val[1], nil) - - result -end - -def _reduce_211(val, _values, result) - result = @builder.range_exclusive(val[0], val[1], nil) - - result -end - -def _reduce_212(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_213(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_214(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_215(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_216(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_217(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_218(val, _values, result) - result = @builder.unary_op(val[0], - @builder.binary_op( - val[1], val[2], val[3])) - - result -end - -def _reduce_219(val, _values, result) - result = @builder.unary_op(val[0], val[1]) - - result -end - -def _reduce_220(val, _values, result) - result = @builder.unary_op(val[0], val[1]) - - result -end - -def _reduce_221(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_222(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_223(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_224(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -# reduce 225 omitted - -def _reduce_226(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_227(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_228(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_229(val, _values, result) - result = @builder.match_op(val[0], val[1], val[2]) - - result -end - -def _reduce_230(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_231(val, _values, result) - result = @builder.not_op(val[0], nil, val[1], nil) - - result -end - -def _reduce_232(val, _values, result) - result = @builder.unary_op(val[0], val[1]) - - result -end - -def _reduce_233(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_234(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_235(val, _values, result) - result = @builder.logical_op(:and, val[0], val[1], val[2]) - - result -end - -def _reduce_236(val, _values, result) - result = @builder.logical_op(:or, val[0], val[1], val[2]) - - result -end - -def _reduce_237(val, _values, result) - result = @builder.keyword_cmd(:defined?, val[0], nil, [ val[2] ], nil) - - result -end - -def _reduce_238(val, _values, result) - result = @builder.ternary(val[0], val[1], - val[2], val[4], val[5]) - - result -end - -# reduce 239 omitted - -# reduce 240 omitted - -# reduce 241 omitted - -# reduce 242 omitted - -# reduce 243 omitted - -def _reduce_244(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_245(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -# reduce 246 omitted - -# reduce 247 omitted - -# reduce 248 omitted - -def _reduce_249(val, _values, result) - result = val[0] << @builder.associate(nil, val[2], nil) - - result -end - -def _reduce_250(val, _values, result) - result = [ @builder.associate(nil, val[0], nil) ] - - result -end - -# reduce 251 omitted - -def _reduce_252(val, _values, result) - rescue_body = @builder.rescue_body(val[1], - nil, nil, nil, - nil, val[2]) - - result = @builder.begin_body(val[0], [ rescue_body ]) - - result -end - -def _reduce_253(val, _values, result) - result = val - - result -end - -def _reduce_254(val, _values, result) - result = [ nil, [], nil ] - - result -end - -# reduce 255 omitted - -def _reduce_256(val, _values, result) - result = [] - - result -end - -# reduce 257 omitted - -# reduce 258 omitted - -def _reduce_259(val, _values, result) - result = val[0] << @builder.associate(nil, val[2], nil) - - result -end - -def _reduce_260(val, _values, result) - result = [ @builder.associate(nil, val[0], nil) ] - - result -end - -def _reduce_261(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_262(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_263(val, _values, result) - result = [ @builder.associate(nil, val[0], nil) ] - result.concat(val[1]) - - result -end - -def _reduce_264(val, _values, result) - assocs = @builder.associate(nil, val[2], nil) - result = val[0] << assocs - result.concat(val[3]) - - result -end - -def _reduce_265(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_266(val, _values, result) - # When branch gets invoked by RACC's lookahead - # and command args start with '[' or '(' - # we need to put `true` to the cmdarg stack - # **before** `false` pushed by lexer - # m [], n - # ^ - # Right here we have cmdarg [...0] because - # lexer pushed it on '[' - # We need to modify cmdarg stack to [...10] - # - # For all other cases (like `m n` or `m n, []`) we simply put 1 to the stack - # and later lexer pushes corresponding bits on top of it. - last_token = @last_token[0] - lookahead = last_token == :tLBRACK || last_token == :tLPAREN_ARG - - if lookahead - top = @lexer.cmdarg.pop - @lexer.cmdarg.push(true) - @lexer.cmdarg.push(top) - else - @lexer.cmdarg.push(true) - end - - result -end - -def _reduce_267(val, _values, result) - # call_args can be followed by tLBRACE_ARG (that does cmdarg.push(0) in the lexer) - # but the push must be done after cmdarg.pop() in the parser. - # So this code does cmdarg.pop() to pop 0 pushed by tLBRACE_ARG, - # cmdarg.pop() to pop 1 pushed by command_args, - # and cmdarg.push(0) to restore back the flag set by tLBRACE_ARG. - last_token = @last_token[0] - lookahead = last_token == :tLBRACE_ARG - if lookahead - top = @lexer.cmdarg.pop - @lexer.cmdarg.pop - @lexer.cmdarg.push(top) - else - @lexer.cmdarg.pop - end - - result = val[1] - - result -end - -def _reduce_268(val, _values, result) - result = @builder.block_pass(val[0], val[1]) - - result -end - -def _reduce_269(val, _values, result) - result = [ val[1] ] - - result -end - -def _reduce_270(val, _values, result) - result = [] - - result -end - -def _reduce_271(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_272(val, _values, result) - result = [ @builder.splat(val[0], val[1]) ] - - result -end - -def _reduce_273(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_274(val, _values, result) - result = val[0] << @builder.splat(val[2], val[3]) - - result -end - -def _reduce_275(val, _values, result) - result = @builder.array(nil, val[0], nil) - - result -end - -# reduce 276 omitted - -def _reduce_277(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_278(val, _values, result) - result = val[0] << @builder.splat(val[2], val[3]) - - result -end - -def _reduce_279(val, _values, result) - result = [ @builder.splat(val[0], val[1]) ] - - result -end - -# reduce 280 omitted - -# reduce 281 omitted - -# reduce 282 omitted - -# reduce 283 omitted - -# reduce 284 omitted - -# reduce 285 omitted - -# reduce 286 omitted - -# reduce 287 omitted - -# reduce 288 omitted - -# reduce 289 omitted - -def _reduce_290(val, _values, result) - result = @builder.call_method(nil, nil, val[0]) - - result -end - -def _reduce_291(val, _values, result) - @lexer.cmdarg.push(false) - - result -end - -def _reduce_292(val, _values, result) - @lexer.cmdarg.pop - - result = @builder.begin_keyword(val[0], val[2], val[3]) - - result -end - -def _reduce_293(val, _values, result) - @lexer.state = :expr_endarg - - result -end - -def _reduce_294(val, _values, result) - result = @builder.begin(val[0], val[1], val[3]) - - result -end - -def _reduce_295(val, _values, result) - @lexer.state = :expr_endarg - - result -end - -def _reduce_296(val, _values, result) - result = @builder.begin(val[0], nil, val[3]) - - result -end - -def _reduce_297(val, _values, result) - result = @builder.begin(val[0], val[1], val[2]) - - result -end - -def _reduce_298(val, _values, result) - result = @builder.const_fetch(val[0], val[1], val[2]) - - result -end - -def _reduce_299(val, _values, result) - result = @builder.const_global(val[0], val[1]) - - result -end - -def _reduce_300(val, _values, result) - result = @builder.array(val[0], val[1], val[2]) - - result -end - -def _reduce_301(val, _values, result) - result = @builder.associate(val[0], val[1], val[2]) - - result -end - -def _reduce_302(val, _values, result) - result = @builder.keyword_cmd(:return, val[0]) - - result -end - -def _reduce_303(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_304(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0], val[1], [], val[2]) - - result -end - -def _reduce_305(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0]) - - result -end - -def _reduce_306(val, _values, result) - result = @builder.keyword_cmd(:defined?, val[0], - val[2], [ val[3] ], val[4]) - - result -end - -def _reduce_307(val, _values, result) - result = @builder.not_op(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_308(val, _values, result) - result = @builder.not_op(val[0], val[1], nil, val[2]) - - result -end - -def _reduce_309(val, _values, result) - method_call = @builder.call_method(nil, nil, val[0]) - - begin_t, args, body, end_t = val[1] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -# reduce 310 omitted - -def _reduce_311(val, _values, result) - begin_t, args, body, end_t = val[1] - result = @builder.block(val[0], - begin_t, args, body, end_t) - - result -end - -def _reduce_312(val, _values, result) - result = @context.dup - @context.in_lambda = true - - result -end - -def _reduce_313(val, _values, result) - lambda_call = @builder.call_lambda(val[0]) - - args, (begin_t, body, end_t) = val[2] - result = @builder.block(lambda_call, - begin_t, args, body, end_t) - - @context.in_lambda = val[1].in_lambda - - result -end - -def _reduce_314(val, _values, result) - else_t, else_ = val[4] - result = @builder.condition(val[0], val[1], val[2], - val[3], else_t, - else_, val[5]) - - result -end - -def _reduce_315(val, _values, result) - else_t, else_ = val[4] - result = @builder.condition(val[0], val[1], val[2], - else_, else_t, - val[3], val[5]) - - result -end - -def _reduce_316(val, _values, result) - result = @builder.loop(:while, val[0], *val[1], val[2], val[3]) - - result -end - -def _reduce_317(val, _values, result) - result = @builder.loop(:until, val[0], *val[1], val[2], val[3]) - - result -end - -def _reduce_318(val, _values, result) - *when_bodies, (else_t, else_body) = *val[3] - - result = @builder.case(val[0], val[1], - when_bodies, else_t, else_body, - val[4]) - - result -end - -def _reduce_319(val, _values, result) - *when_bodies, (else_t, else_body) = *val[2] - - result = @builder.case(val[0], nil, - when_bodies, else_t, else_body, - val[3]) - - result -end - -def _reduce_320(val, _values, result) - result = @builder.for(val[0], val[1], val[2], *val[3], val[4], val[5]) - - result -end - -def _reduce_321(val, _values, result) - local_push - @context.in_class = true - - result -end - -def _reduce_322(val, _values, result) - k_class, ctx = val[0] - if @context.in_def - diagnostic :error, :class_in_def, nil, k_class - end - - lt_t, superclass = val[2] - result = @builder.def_class(k_class, val[1], - lt_t, superclass, - val[4], val[5]) - - local_pop - @context.in_class = ctx.in_class - - result -end - -def _reduce_323(val, _values, result) - @context.in_def = false - @context.in_class = false - local_push - - result -end - -def _reduce_324(val, _values, result) - k_class, ctx = val[0] - result = @builder.def_sclass(k_class, val[1], val[2], - val[5], val[6]) - - local_pop - @context.in_def = ctx.in_def - @context.in_class = ctx.in_class - - result -end - -def _reduce_325(val, _values, result) - @context.in_class = true - local_push - - result -end - -def _reduce_326(val, _values, result) - k_mod, ctx = val[0] - if @context.in_def - diagnostic :error, :module_in_def, nil, k_mod - end - - result = @builder.def_module(k_mod, val[1], - val[3], val[4]) - - local_pop - @context.in_class = ctx.in_class - - result -end - -def _reduce_327(val, _values, result) - local_push - result = context.dup - @context.in_def = true - - result -end - -def _reduce_328(val, _values, result) - result = @builder.def_method(val[0], val[1], - val[3], val[4], val[5]) - - local_pop - @context.in_def = val[2].in_def - - result -end - -def _reduce_329(val, _values, result) - @lexer.state = :expr_fname - - result -end - -def _reduce_330(val, _values, result) - local_push - result = context.dup - @context.in_def = true - - result -end - -def _reduce_331(val, _values, result) - result = @builder.def_singleton(val[0], val[1], val[2], - val[4], val[6], val[7], val[8]) - - local_pop - @context.in_def = val[5].in_def - - result -end - -def _reduce_332(val, _values, result) - result = @builder.keyword_cmd(:break, val[0]) - - result -end - -def _reduce_333(val, _values, result) - result = @builder.keyword_cmd(:next, val[0]) - - result -end - -def _reduce_334(val, _values, result) - result = @builder.keyword_cmd(:redo, val[0]) - - result -end - -def _reduce_335(val, _values, result) - result = @builder.keyword_cmd(:retry, val[0]) - - result -end - -# reduce 336 omitted - -def _reduce_337(val, _values, result) - result = [ val[0], @context.dup ] - - result -end - -def _reduce_338(val, _values, result) - result = [ val[0], @context.dup ] - - result -end - -def _reduce_339(val, _values, result) - result = val[0] - - result -end - -def _reduce_340(val, _values, result) - if @context.in_class && !@context.in_def && !(context.in_block || context.in_lambda) - diagnostic :error, :invalid_return, nil, val[0] - end - - result -end - -# reduce 341 omitted - -# reduce 342 omitted - -def _reduce_343(val, _values, result) - result = val[1] - - result -end - -# reduce 344 omitted - -# reduce 345 omitted - -# reduce 346 omitted - -def _reduce_347(val, _values, result) - else_t, else_ = val[4] - result = [ val[0], - @builder.condition(val[0], val[1], val[2], - val[3], else_t, - else_, nil), - ] - - result -end - -# reduce 348 omitted - -def _reduce_349(val, _values, result) - result = val - - result -end - -# reduce 350 omitted - -# reduce 351 omitted - -def _reduce_352(val, _values, result) - result = @builder.arg(val[0]) - - result -end - -def _reduce_353(val, _values, result) - result = @builder.multi_lhs(val[0], val[1], val[2]) - - result -end - -def _reduce_354(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_355(val, _values, result) - result = val[0] << val[2] - - result -end - -# reduce 356 omitted - -def _reduce_357(val, _values, result) - result = val[0]. - push(@builder.restarg(val[2], val[3])) - - result -end - -def _reduce_358(val, _values, result) - result = val[0]. - push(@builder.restarg(val[2], val[3])). - concat(val[5]) - - result -end - -def _reduce_359(val, _values, result) - result = val[0]. - push(@builder.restarg(val[2])) - - result -end - -def _reduce_360(val, _values, result) - result = val[0]. - push(@builder.restarg(val[2])). - concat(val[4]) - - result -end - -def _reduce_361(val, _values, result) - result = [ @builder.restarg(val[0], val[1]) ] - - result -end - -def _reduce_362(val, _values, result) - result = [ @builder.restarg(val[0], val[1]), - *val[3] ] - - result -end - -def _reduce_363(val, _values, result) - result = [ @builder.restarg(val[0]) ] - - result -end - -def _reduce_364(val, _values, result) - result = [ @builder.restarg(val[0]), - *val[2] ] - - result -end - -def _reduce_365(val, _values, result) - result = val[0].concat(val[2]).concat(val[3]) - - result -end - -def _reduce_366(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_367(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_368(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_369(val, _values, result) - result = val[1] - - result -end - -def _reduce_370(val, _values, result) - result = [] - - result -end - -def _reduce_371(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_372(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[6]). - concat(val[7]) - - result -end - -def _reduce_373(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_374(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_375(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -# reduce 376 omitted - -def _reduce_377(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_378(val, _values, result) - if val[1].empty? && val[0].size == 1 - result = [@builder.procarg0(val[0][0])] - else - result = val[0].concat(val[1]) - end - - result -end - -def _reduce_379(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_380(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_381(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_382(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_383(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_384(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -# reduce 385 omitted - -def _reduce_386(val, _values, result) - result = @builder.args(nil, [], nil) - - result -end - -def _reduce_387(val, _values, result) - @lexer.state = :expr_value - - result -end - -def _reduce_388(val, _values, result) - result = @builder.args(val[0], val[1], val[2]) - - result -end - -def _reduce_389(val, _values, result) - result = @builder.args(val[0], [], val[0]) - - result -end - -def _reduce_390(val, _values, result) - result = @builder.args(val[0], val[1].concat(val[2]), val[3]) - - result -end - -def _reduce_391(val, _values, result) - result = [] - - result -end - -def _reduce_392(val, _values, result) - result = val[2] - - result -end - -def _reduce_393(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_394(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_395(val, _values, result) - @static_env.declare val[0][0] - result = @builder.shadowarg(val[0]) - - result -end - -# reduce 396 omitted - -def _reduce_397(val, _values, result) - @static_env.extend_dynamic - - result -end - -def _reduce_398(val, _values, result) - @lexer.cmdarg.push(false) - - result -end - -def _reduce_399(val, _values, result) - @lexer.cmdarg.pop - - result = [ val[1], val[3] ] - - @static_env.unextend - - result -end - -def _reduce_400(val, _values, result) - result = @builder.args(val[0], val[1].concat(val[2]), val[3]) - - result -end - -def _reduce_401(val, _values, result) - result = @builder.args(nil, val[0], nil) - - result -end - -def _reduce_402(val, _values, result) - result = @context.dup - @context.in_lambda = true - - result -end - -def _reduce_403(val, _values, result) - result = [ val[0], val[2], val[3] ] - @context.in_lambda = val[1].in_lambda - - result -end - -def _reduce_404(val, _values, result) - result = @context.dup - @context.in_lambda = true - - result -end - -def _reduce_405(val, _values, result) - result = [ val[0], val[2], val[3] ] - @context.in_lambda = val[1].in_lambda - - result -end - -def _reduce_406(val, _values, result) - result = @context.dup - @context.in_block = true - - result -end - -def _reduce_407(val, _values, result) - result = [ val[0], *val[2], val[3] ] - @context.in_block = val[1].in_block - - result -end - -def _reduce_408(val, _values, result) - begin_t, block_args, body, end_t = val[1] - result = @builder.block(val[0], - begin_t, block_args, body, end_t) - - result -end - -def _reduce_409(val, _values, result) - lparen_t, args, rparen_t = val[3] - result = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - result -end - -def _reduce_410(val, _values, result) - lparen_t, args, rparen_t = val[3] - method_call = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - begin_t, args, body, end_t = val[4] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_411(val, _values, result) - method_call = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - begin_t, args, body, end_t = val[4] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_412(val, _values, result) - lparen_t, args, rparen_t = val[1] - result = @builder.call_method(nil, nil, val[0], - lparen_t, args, rparen_t) - - result -end - -def _reduce_413(val, _values, result) - lparen_t, args, rparen_t = val[3] - result = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - result -end - -def _reduce_414(val, _values, result) - lparen_t, args, rparen_t = val[3] - result = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - result -end - -def _reduce_415(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2]) - - result -end - -def _reduce_416(val, _values, result) - lparen_t, args, rparen_t = val[2] - result = @builder.call_method(val[0], val[1], nil, - lparen_t, args, rparen_t) - - result -end - -def _reduce_417(val, _values, result) - lparen_t, args, rparen_t = val[2] - result = @builder.call_method(val[0], val[1], nil, - lparen_t, args, rparen_t) - - result -end - -def _reduce_418(val, _values, result) - lparen_t, args, rparen_t = val[1] - result = @builder.keyword_cmd(:super, val[0], - lparen_t, args, rparen_t) - - result -end - -def _reduce_419(val, _values, result) - result = @builder.keyword_cmd(:zsuper, val[0]) - - result -end - -def _reduce_420(val, _values, result) - result = @builder.index(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_421(val, _values, result) - result = @context.dup - @context.in_block = true - - result -end - -def _reduce_422(val, _values, result) - result = [ val[0], *val[2], val[3] ] - @context.in_block = val[1].in_block - - result -end - -def _reduce_423(val, _values, result) - result = @context.dup - @context.in_block = true - - result -end - -def _reduce_424(val, _values, result) - result = [ val[0], *val[2], val[3] ] - @context.in_block = val[1].in_block - - result -end - -def _reduce_425(val, _values, result) - @static_env.extend_dynamic - - result -end - -def _reduce_426(val, _values, result) - result = [ val[1], val[2] ] - - @static_env.unextend - - result -end - -def _reduce_427(val, _values, result) - @static_env.extend_dynamic - - result -end - -def _reduce_428(val, _values, result) - @lexer.cmdarg.push(false) - - result -end - -def _reduce_429(val, _values, result) - result = [ val[2], val[3] ] - - @static_env.unextend - @lexer.cmdarg.pop - - result -end - -def _reduce_430(val, _values, result) - result = [ @builder.when(val[0], val[1], val[2], val[3]), - *val[4] ] - - result -end - -def _reduce_431(val, _values, result) - result = [ val[0] ] - - result -end - -# reduce 432 omitted - -def _reduce_433(val, _values, result) - assoc_t, exc_var = val[2] - - if val[1] - exc_list = @builder.array(nil, val[1], nil) - end - - result = [ @builder.rescue_body(val[0], - exc_list, assoc_t, exc_var, - val[3], val[4]), - *val[5] ] - - result -end - -def _reduce_434(val, _values, result) - result = [] - - result -end - -def _reduce_435(val, _values, result) - result = [ val[0] ] - - result -end - -# reduce 436 omitted - -# reduce 437 omitted - -def _reduce_438(val, _values, result) - result = [ val[0], val[1] ] - - result -end - -# reduce 439 omitted - -def _reduce_440(val, _values, result) - result = [ val[0], val[1] ] - - result -end - -# reduce 441 omitted - -# reduce 442 omitted - -# reduce 443 omitted - -# reduce 444 omitted - -def _reduce_445(val, _values, result) - result = @builder.string_compose(nil, val[0], nil) - - result -end - -def _reduce_446(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_447(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_448(val, _values, result) - string = @builder.string_compose(val[0], val[1], val[2]) - result = @builder.dedent_string(string, @lexer.dedent_level) - - result -end - -def _reduce_449(val, _values, result) - string = @builder.string(val[0]) - result = @builder.dedent_string(string, @lexer.dedent_level) - - result -end - -def _reduce_450(val, _values, result) - result = @builder.character(val[0]) - - result -end - -def _reduce_451(val, _values, result) - string = @builder.xstring_compose(val[0], val[1], val[2]) - result = @builder.dedent_string(string, @lexer.dedent_level) - - result -end - -def _reduce_452(val, _values, result) - opts = @builder.regexp_options(val[3]) - result = @builder.regexp_compose(val[0], val[1], val[2], opts) - - result -end - -def _reduce_453(val, _values, result) - result = @builder.words_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_454(val, _values, result) - result = [] - - result -end - -def _reduce_455(val, _values, result) - result = val[0] << @builder.word(val[1]) - - result -end - -def _reduce_456(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_457(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_458(val, _values, result) - result = @builder.symbols_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_459(val, _values, result) - result = [] - - result -end - -def _reduce_460(val, _values, result) - result = val[0] << @builder.word(val[1]) - - result -end - -def _reduce_461(val, _values, result) - result = @builder.words_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_462(val, _values, result) - result = @builder.symbols_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_463(val, _values, result) - result = [] - - result -end - -def _reduce_464(val, _values, result) - result = val[0] << @builder.string_internal(val[1]) - - result -end - -def _reduce_465(val, _values, result) - result = [] - - result -end - -def _reduce_466(val, _values, result) - result = val[0] << @builder.symbol_internal(val[1]) - - result -end - -def _reduce_467(val, _values, result) - result = [] - - result -end - -def _reduce_468(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_469(val, _values, result) - result = [] - - result -end - -def _reduce_470(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_471(val, _values, result) - result = [] - - result -end - -def _reduce_472(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_473(val, _values, result) - result = @builder.string_internal(val[0]) - - result -end - -def _reduce_474(val, _values, result) - result = val[1] - - result -end - -def _reduce_475(val, _values, result) - @lexer.cmdarg.push(false) - @lexer.cond.push(false) - - result -end - -def _reduce_476(val, _values, result) - @lexer.cmdarg.pop - @lexer.cond.pop - - result = @builder.begin(val[0], val[2], val[3]) - - result -end - -def _reduce_477(val, _values, result) - result = @builder.gvar(val[0]) - - result -end - -def _reduce_478(val, _values, result) - result = @builder.ivar(val[0]) - - result -end - -def _reduce_479(val, _values, result) - result = @builder.cvar(val[0]) - - result -end - -# reduce 480 omitted - -def _reduce_481(val, _values, result) - @lexer.state = :expr_end - result = @builder.symbol(val[0]) - - result -end - -def _reduce_482(val, _values, result) - @lexer.state = :expr_end - result = @builder.symbol_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_483(val, _values, result) - result = val[0] - - result -end - -def _reduce_484(val, _values, result) - if @builder.respond_to? :negate - # AST builder interface compatibility - result = @builder.negate(val[0], val[1]) - else - result = @builder.unary_num(val[0], val[1]) - end - - result -end - -def _reduce_485(val, _values, result) - @lexer.state = :expr_end - result = @builder.integer(val[0]) - - result -end - -def _reduce_486(val, _values, result) - @lexer.state = :expr_end - result = @builder.float(val[0]) - - result -end - -def _reduce_487(val, _values, result) - @lexer.state = :expr_end - result = @builder.rational(val[0]) - - result -end - -def _reduce_488(val, _values, result) - @lexer.state = :expr_end - result = @builder.complex(val[0]) - - result -end - -def _reduce_489(val, _values, result) - result = @builder.ident(val[0]) - - result -end - -def _reduce_490(val, _values, result) - result = @builder.ivar(val[0]) - - result -end - -def _reduce_491(val, _values, result) - result = @builder.gvar(val[0]) - - result -end - -def _reduce_492(val, _values, result) - result = @builder.const(val[0]) - - result -end - -def _reduce_493(val, _values, result) - result = @builder.cvar(val[0]) - - result -end - -def _reduce_494(val, _values, result) - result = @builder.nil(val[0]) - - result -end - -def _reduce_495(val, _values, result) - result = @builder.self(val[0]) - - result -end - -def _reduce_496(val, _values, result) - result = @builder.true(val[0]) - - result -end - -def _reduce_497(val, _values, result) - result = @builder.false(val[0]) - - result -end - -def _reduce_498(val, _values, result) - result = @builder.__FILE__(val[0]) - - result -end - -def _reduce_499(val, _values, result) - result = @builder.__LINE__(val[0]) - - result -end - -def _reduce_500(val, _values, result) - result = @builder.__ENCODING__(val[0]) - - result -end - -def _reduce_501(val, _values, result) - result = @builder.accessible(val[0]) - - result -end - -def _reduce_502(val, _values, result) - result = @builder.accessible(val[0]) - - result -end - -def _reduce_503(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_504(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_505(val, _values, result) - result = @builder.nth_ref(val[0]) - - result -end - -def _reduce_506(val, _values, result) - result = @builder.back_ref(val[0]) - - result -end - -def _reduce_507(val, _values, result) - @lexer.state = :expr_value - - result -end - -def _reduce_508(val, _values, result) - result = [ val[0], val[2] ] - - result -end - -def _reduce_509(val, _values, result) - result = nil - - result -end - -def _reduce_510(val, _values, result) - result = @builder.args(val[0], val[1], val[2]) - - @lexer.state = :expr_value - - result -end - -def _reduce_511(val, _values, result) - result = @context.in_kwarg - @context.in_kwarg = true - - result -end - -def _reduce_512(val, _values, result) - @context.in_kwarg = val[0] - result = @builder.args(nil, val[1], nil) - - result -end - -def _reduce_513(val, _values, result) - result = val[0].concat(val[2]).concat(val[3]) - - result -end - -def _reduce_514(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_515(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_516(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_517(val, _values, result) - result = val[1] - - result -end - -def _reduce_518(val, _values, result) - result = [] - - result -end - -def _reduce_519(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_520(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[6]). - concat(val[7]) - - result -end - -def _reduce_521(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_522(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_523(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_524(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_525(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_526(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_527(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_528(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_529(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_530(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_531(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_532(val, _values, result) - result = val[0] - - result -end - -def _reduce_533(val, _values, result) - result = [] - - result -end - -def _reduce_534(val, _values, result) - diagnostic :error, :argument_const, nil, val[0] - - result -end - -def _reduce_535(val, _values, result) - diagnostic :error, :argument_ivar, nil, val[0] - - result -end - -def _reduce_536(val, _values, result) - diagnostic :error, :argument_gvar, nil, val[0] - - result -end - -def _reduce_537(val, _values, result) - diagnostic :error, :argument_cvar, nil, val[0] - - result -end - -# reduce 538 omitted - -def _reduce_539(val, _values, result) - @static_env.declare val[0][0] - - result = val[0] - - result -end - -def _reduce_540(val, _values, result) - result = val[0] - - result -end - -def _reduce_541(val, _values, result) - result = @builder.arg(val[0]) - - result -end - -def _reduce_542(val, _values, result) - result = @builder.multi_lhs(val[0], val[1], val[2]) - - result -end - -def _reduce_543(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_544(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_545(val, _values, result) - check_kwarg_name(val[0]) - - @static_env.declare val[0][0] - - result = val[0] - - result -end - -def _reduce_546(val, _values, result) - result = @builder.kwoptarg(val[0], val[1]) - - result -end - -def _reduce_547(val, _values, result) - result = @builder.kwarg(val[0]) - - result -end - -def _reduce_548(val, _values, result) - result = @builder.kwoptarg(val[0], val[1]) - - result -end - -def _reduce_549(val, _values, result) - result = @builder.kwarg(val[0]) - - result -end - -def _reduce_550(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_551(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_552(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_553(val, _values, result) - result = val[0] << val[2] - - result -end - -# reduce 554 omitted - -# reduce 555 omitted - -def _reduce_556(val, _values, result) - @static_env.declare val[1][0] - - result = [ @builder.kwrestarg(val[0], val[1]) ] - - result -end - -def _reduce_557(val, _values, result) - result = [ @builder.kwrestarg(val[0]) ] - - result -end - -def _reduce_558(val, _values, result) - result = @builder.optarg(val[0], val[1], val[2]) - - result -end - -def _reduce_559(val, _values, result) - result = @builder.optarg(val[0], val[1], val[2]) - - result -end - -def _reduce_560(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_561(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_562(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_563(val, _values, result) - result = val[0] << val[2] - - result -end - -# reduce 564 omitted - -# reduce 565 omitted - -def _reduce_566(val, _values, result) - @static_env.declare val[1][0] - - result = [ @builder.restarg(val[0], val[1]) ] - - result -end - -def _reduce_567(val, _values, result) - result = [ @builder.restarg(val[0]) ] - - result -end - -# reduce 568 omitted - -# reduce 569 omitted - -def _reduce_570(val, _values, result) - @static_env.declare val[1][0] - - result = @builder.blockarg(val[0], val[1]) - - result -end - -def _reduce_571(val, _values, result) - result = [ val[1] ] - - result -end - -def _reduce_572(val, _values, result) - result = [] - - result -end - -# reduce 573 omitted - -def _reduce_574(val, _values, result) - result = val[1] - - result -end - -def _reduce_575(val, _values, result) - result = [] - - result -end - -# reduce 576 omitted - -def _reduce_577(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_578(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_579(val, _values, result) - result = @builder.pair(val[0], val[1], val[2]) - - result -end - -def _reduce_580(val, _values, result) - result = @builder.pair_keyword(val[0], val[1]) - - result -end - -def _reduce_581(val, _values, result) - result = @builder.pair_quoted(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_582(val, _values, result) - result = @builder.kwsplat(val[0], val[1]) - - result -end - -# reduce 583 omitted - -# reduce 584 omitted - -# reduce 585 omitted - -# reduce 586 omitted - -# reduce 587 omitted - -# reduce 588 omitted - -# reduce 589 omitted - -# reduce 590 omitted - -# reduce 591 omitted - -# reduce 592 omitted - -# reduce 593 omitted - -# reduce 594 omitted - -def _reduce_595(val, _values, result) - result = [:dot, val[0][1]] - - result -end - -def _reduce_596(val, _values, result) - result = [:anddot, val[0][1]] - - result -end - -# reduce 597 omitted - -# reduce 598 omitted - -# reduce 599 omitted - -# reduce 600 omitted - -def _reduce_601(val, _values, result) - result = val[1] - - result -end - -def _reduce_602(val, _values, result) - result = val[1] - - result -end - -# reduce 603 omitted - -# reduce 604 omitted - -# reduce 605 omitted - -def _reduce_606(val, _values, result) - yyerrok - - result -end - -# reduce 607 omitted - -# reduce 608 omitted - -# reduce 609 omitted - -def _reduce_610(val, _values, result) - result = nil - - result -end - -def _reduce_none(val, _values, result) - val[0] -end - - end # class Ruby26 -end # module Parser diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ruby27.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ruby27.rb deleted file mode 100644 index 7fa43ca4..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ruby27.rb +++ /dev/null @@ -1,11947 +0,0 @@ -# -*- encoding:utf-8; warn-indent:false; frozen_string_literal: true -*- -# -# DO NOT MODIFY!!!! -# This file is automatically generated by Racc 1.7.3 -# from Racc grammar file "ruby27.y". -# - -require 'racc/parser.rb' - - -require 'parser' - -module Parser - class Ruby27 < Parser::Base - - - def version - 27 - end - - def default_encoding - Encoding::UTF_8 - end - - def local_push - @static_env.extend_static - @lexer.cmdarg.push(false) - @lexer.cond.push(false) - @max_numparam_stack.push(static: true) - end - - def local_pop - @static_env.unextend - @lexer.cmdarg.pop - @lexer.cond.pop - @max_numparam_stack.pop - end - - def try_declare_numparam(node) - name = node.children[0] - - if name =~ /\A_[1-9]\z/ && !static_env.declared?(name) && context.in_dynamic_block? - # definitely an implicit param - location = node.loc.expression - - if max_numparam_stack.has_ordinary_params? - diagnostic :error, :ordinary_param_defined, nil, [nil, location] - end - - raw_max_numparam_stack = max_numparam_stack.stack.dup - - # ignore current block scope - raw_max_numparam_stack.pop - - raw_max_numparam_stack.reverse_each do |outer_scope| - if outer_scope[:static] - # found an outer scope that can't have numparams - # like def/class/etc - break - else - outer_scope_has_numparams = outer_scope[:value] > 0 - - if outer_scope_has_numparams - diagnostic :error, :numparam_used_in_outer_scope, nil, [nil, location] - else - # for now it's ok, but an outer scope can also be a block - # with numparams, so we need to continue - end - end - end - - static_env.declare(name) - max_numparam_stack.register(name[1].to_i) - - true - else - false - end - end -##### State transition tables begin ### - -racc_action_table = [ - -588, 218, 219, 218, 219, 3, -106, -588, -588, -588, - 815, 559, -588, -588, -588, 224, -588, 281, 815, 1026, - 123, 228, 223, 559, -588, 122, -588, -588, -588, 218, - 219, 221, 885, 600, -107, -114, -588, -588, 559, -588, - -588, -588, -588, -588, 559, 559, 559, -106, -107, -703, - 886, -113, 411, 857, -114, 572, -489, 413, 412, 573, - 281, 229, 229, 752, -109, -111, -588, -588, -588, -588, - -588, -588, -588, -588, -588, -588, -588, -588, -588, -588, - 225, 276, -588, -588, -588, 119, -588, -588, 747, 229, - -588, 978, -108, -588, -588, 229, -588, 229, -588, 599, - -588, 1027, -588, -588, 280, -588, -588, -588, -588, -588, - -113, -588, -591, -588, -109, -97, 281, 218, 219, -591, - -591, -591, 1093, 229, -591, -591, -591, -588, -591, 123, - -588, -588, -588, -588, 122, -588, -591, -588, -591, -591, - -591, 123, -588, -98, -105, -588, 122, 280, -591, -591, - -111, -591, -591, -591, -591, -591, 123, -110, -108, 896, - -104, 122, 123, 123, 123, -106, -107, 122, 122, 122, - -106, -107, -114, -100, -102, -110, -112, -114, -591, -591, - -591, -591, -591, -591, -591, -591, -591, -591, -591, -591, - -591, -591, 123, -112, -591, -591, -591, 122, -591, -591, - 977, -99, -591, 280, 1094, -591, -591, -703, -591, 132, - -591, 123, -591, 587, -591, -591, 122, -591, -591, -591, - -591, -591, -304, -591, 229, -591, 815, -602, -113, -304, - -304, -304, -109, -113, -690, -304, -304, -109, -304, -591, - -690, -691, -591, -591, -591, -591, -304, -591, -603, -591, - 281, 1032, 572, 587, -591, 602, 834, -591, -304, -304, - -100, -304, -304, -304, -304, -304, 101, 102, -111, 1031, - -691, 215, 1085, -111, -102, -110, -108, 589, 588, 464, - -110, -108, 101, 102, -101, -103, -106, 781, -304, -304, - -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, - -304, -304, 216, 224, -304, -304, -304, -107, 626, 572, - 274, -112, -304, 834, 276, -304, -112, 589, 588, 585, - -304, 601, -304, 587, -304, -304, -100, -304, -304, -304, - -304, -304, 226, -304, -694, -304, 217, 280, -114, 536, - -102, -694, -694, -694, 103, 104, -703, -694, -694, -304, - -694, 220, -304, -304, -703, -103, -343, -304, -694, -694, - 103, 104, -99, -343, -304, 270, -100, -112, 225, -100, - -694, -694, -343, -694, -694, -694, -694, -694, 329, -588, - -102, -100, 229, -102, -101, 330, -588, 589, 588, 587, - 229, -114, 810, 587, 123, -102, 229, 783, -113, 122, - -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, - -694, -694, -694, -694, 566, 935, -694, -694, -694, 224, - 627, -343, 752, 414, -694, 732, 461, -694, -99, 811, - 587, 463, -694, 621, -694, 462, -694, -694, 587, -694, - -694, -694, -694, -694, -588, -694, -694, -694, 465, -690, - -101, -109, 466, 589, 588, 585, 587, 589, 588, 585, - 226, -694, 587, 733, -694, -694, -687, -101, -99, -694, - 684, -99, 587, -694, 1101, 943, -694, 218, 219, -110, - -694, -694, -694, -99, 225, -694, -694, -694, -111, -694, - -101, 228, -109, -101, 589, 588, -92, -694, -694, -694, - -694, -694, 589, 588, 590, -101, -688, -105, -78, -694, - -694, 1101, -694, -694, -694, -694, -694, 495, -588, -114, - 589, 588, 592, 587, 821, -588, 589, 588, 594, 817, - -687, 622, 507, 818, -588, 918, 589, 588, 598, -694, - -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, - -694, -694, -694, -687, -602, -694, -694, -694, -591, 812, - -694, 549, 509, -694, 548, -591, -694, -694, 511, -694, - -688, -694, 797, -694, -591, -694, -694, 132, -694, -694, - -694, -694, -694, -588, -694, -694, -694, 589, 588, 603, - -111, -600, -591, -688, -108, -601, 267, 268, -600, -591, - -694, -97, -601, -694, -694, -694, -694, -600, -694, -598, - -694, -601, -304, -106, -77, -694, -598, -603, -110, -304, - -304, -304, 229, -591, -304, -304, -304, 224, -304, 218, - 219, -108, 266, 265, 529, -597, -304, 522, -304, -304, - -304, 123, -597, 527, 549, 523, 122, 551, -304, -304, - 536, -304, -304, -304, -304, -304, -600, -591, 530, -295, - -601, 224, -599, -596, -98, 285, -295, 123, 538, -599, - -596, 857, 122, 566, -598, -295, -107, 462, -304, -304, - -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, - -304, -304, 225, 935, -304, -304, -304, -104, 813, -304, - -597, 229, -304, 732, -593, -304, -304, 276, -304, -113, - -304, -593, -304, 549, -304, -304, 551, -304, -304, -304, - -304, -304, -304, -304, -295, -304, 225, -599, -596, -304, - -304, -304, 123, 828, 829, -304, -304, 122, -304, -304, - 533, 733, -304, -304, -304, -304, -304, -304, -594, -304, - 891, 857, 539, 943, -304, -594, 250, -112, -304, -304, - 229, -304, -304, -304, -304, -304, 552, 621, 553, -593, - 724, 224, 721, 720, 719, 729, 722, 511, 569, -595, - 126, 127, 128, 129, 130, 732, -595, 567, -304, -304, - -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, - -304, -304, 566, 224, -304, -304, -304, 727, 626, 403, - 274, 570, -304, -594, -100, -304, 737, 736, 740, 739, - -304, 571, -304, 733, -304, -304, -109, -304, -304, -304, - -304, -304, 622, -304, -694, -304, 225, 549, 579, 87, - 551, -694, -694, -694, -595, 740, 739, -694, -694, -304, - -694, 88, -304, -304, 604, -304, 607, -304, -694, -694, - 608, 89, 229, 909, -304, 1154, -277, -112, 225, 610, - -694, -694, 611, -694, -694, -694, -694, -694, 615, -102, - 1083, 1084, 724, 224, 721, 720, 719, 729, 722, 250, - 575, -111, 724, 229, 721, 720, 719, 732, 722, 577, - -694, -694, -694, -694, -694, -694, -694, -694, -694, -694, - -694, -694, -694, -694, 891, 857, -694, -694, -694, 727, - 627, 247, 250, 619, -694, 249, 248, -694, 737, 736, - 740, 739, -694, 620, -694, 733, -694, -694, 276, -694, - -694, -694, -694, -694, 797, -694, -694, -694, 225, 631, - 224, 250, 250, 250, 247, -305, -305, 614, 249, 248, - 250, -694, -305, -305, -694, -694, 612, -694, 229, -694, - 224, -305, -305, 672, 229, 909, -694, 1117, 229, -110, - 7, 79, 80, 81, 11, 62, 577, 229, -92, 68, - 69, -99, 687, 229, 72, -694, 70, 71, 73, 32, - 33, 77, 78, -108, 542, 698, 703, 704, 82, 30, - 29, 111, 110, 112, 113, 225, 229, 21, 706, 743, - -305, -305, 748, 10, 50, 9, 12, 115, 114, 116, - 105, 61, 107, 106, 108, 225, 109, 117, 118, -304, - 101, 102, 46, 47, 45, -304, -304, -694, 749, 224, - 753, -691, -304, 770, -694, -304, 1122, -691, 780, -690, - 784, -304, 785, -694, 42, 1120, -278, 35, 798, 495, - 63, 64, 224, 495, 65, 229, 37, 815, 816, 1117, - 49, 833, -694, 836, 837, 270, 775, 776, 577, 22, - 777, 117, 118, 843, 99, 87, 90, 91, 845, 92, - 94, 93, 95, 847, -304, 509, 511, 88, 98, 698, - -304, 229, -694, 276, 225, 67, 276, 89, 103, 104, - 698, 250, 43, 44, 303, 79, 80, 81, 11, 62, - 857, 865, 868, 68, 69, 868, 870, 225, 72, 872, - 70, 71, 73, 32, 33, 77, 78, 242, 874, 876, - 887, 888, 82, 30, 29, 111, 110, 112, 113, 857, - 1114, 21, 721, 720, 719, 893, 722, 10, 50, 305, - 12, 115, 114, 116, 105, 61, 107, 106, 108, 894, - 109, 117, 118, 229, 101, 102, 46, 47, 45, 250, - 254, 255, 256, 257, 267, 268, 262, 263, 258, 259, - 229, 243, 244, 904, -279, 260, 261, 229, 42, 917, - 661, 307, 729, 944, 63, 64, 845, 951, 65, 229, - 37, 247, 732, 253, 49, 249, 248, 698, 245, 246, - 266, 265, 251, 22, 252, 970, -277, 974, 99, 87, - 90, 91, 229, 92, 94, 93, 95, 995, 996, 229, - 999, 88, 98, 1001, 264, 740, 739, 1009, 1010, 67, - 733, 89, 103, 104, 1013, 229, 43, 44, 7, 79, - 80, 81, 11, 62, 1015, 229, 1019, 68, 69, -280, - 229, 229, 72, 1025, 70, 71, 73, 32, 33, 77, - 78, 126, 127, 128, 129, 130, 82, 30, 29, 111, - 110, 112, 113, 1028, 229, 21, 229, 229, 229, 1040, - 616, 10, 50, 9, 12, 115, 114, 116, 105, 61, - 107, 106, 108, 868, 109, 117, 118, 868, 101, 102, - 46, 47, 45, 250, 254, 255, 256, 257, 267, 268, - 262, 263, 258, 259, 1044, 243, 244, 1046, 1048, 260, - 261, 1050, 42, 229, 1052, 35, 1053, 1066, 63, 64, - 868, 886, 65, 1068, 37, 247, 1070, 253, 49, 249, - 248, 1072, 245, 246, 266, 265, 251, 22, 252, 1074, - 1074, 229, 99, 87, 90, 91, 1089, 92, 94, 93, - 95, 770, 815, 1092, 1095, 88, 98, 815, 264, 1111, - -250, 1118, 1123, 67, 1130, 89, 103, 104, 1131, 229, - 43, 44, 303, 79, 80, 81, 11, 62, 1139, 1142, - 868, 68, 69, 1144, 1146, 1148, 72, 1150, 70, 71, - 73, 32, 33, 77, 78, 126, 127, 128, 129, 130, - 82, 30, 29, 111, 110, 112, 113, 1150, 703, 21, - 1163, 1164, 1165, 1074, 616, 10, 50, 305, 12, 115, - 114, 116, 105, 61, 107, 106, 108, 1074, 109, 117, - 118, 1074, 101, 102, 46, 47, 45, 250, 254, 255, - 256, 257, 267, 268, 262, 263, 258, 259, 1173, 243, - 244, 1142, 1142, 260, 261, -691, 42, -690, 229, 35, - 729, 1131, 63, 64, 1142, 1186, 65, 1150, 37, 247, - 732, 253, 49, 249, 248, 1150, 245, 246, 266, 265, - 251, 22, 252, 1150, 1074, 1150, 99, 87, 90, 91, - nil, 92, 94, 93, 95, nil, nil, nil, nil, 88, - 98, nil, 264, 740, 739, nil, nil, 67, 733, 89, - 103, 104, nil, nil, 43, 44, 303, 79, 80, 81, - 11, 62, nil, nil, nil, 68, 69, nil, nil, nil, - 72, nil, 70, 71, 73, 32, 33, 77, 78, 126, - 127, 128, 129, 130, 82, 30, 29, 111, 110, 112, - 113, nil, 1114, 21, 721, 720, 719, nil, 722, 10, - 50, 305, 12, 115, 114, 116, 105, 61, 107, 106, - 108, nil, 109, 117, 118, nil, 101, 102, 46, 47, - 45, 250, 254, 255, 256, 257, 267, 268, 262, 263, - 258, 259, nil, 243, 244, nil, nil, 260, 261, nil, - 42, nil, nil, 35, nil, nil, 63, 64, nil, nil, - 65, nil, 37, 247, nil, 253, 49, 249, 248, nil, - 245, 246, 266, 265, 251, 22, 252, nil, nil, nil, - 99, 87, 90, 91, nil, 92, 94, 93, 95, nil, - nil, nil, nil, 88, 98, nil, 264, nil, nil, nil, - nil, 67, nil, 89, 103, 104, nil, nil, 43, 44, - 303, 79, 80, 81, 11, 62, nil, nil, nil, 68, - 69, nil, nil, nil, 72, nil, 70, 71, 73, 32, - 33, 77, 78, nil, nil, nil, nil, nil, 82, 30, - 29, 111, 110, 112, 113, nil, nil, 21, nil, nil, - nil, nil, nil, 10, 50, 305, 12, 115, 114, 116, - 105, 61, 107, 106, 108, nil, 109, 117, 118, nil, - 101, 102, 46, 47, 45, 250, 254, 255, 256, 257, - 267, 268, 262, 263, 258, 259, nil, 243, 244, nil, - nil, 260, 261, nil, 42, nil, nil, 307, nil, nil, - 63, 64, nil, nil, 65, nil, 37, 247, nil, 253, - 49, 249, 248, nil, 245, 246, 266, 265, 251, 22, - 252, nil, nil, nil, 99, 87, 90, 91, nil, 92, - 94, 93, 95, nil, nil, nil, nil, 88, 98, 229, - 264, nil, nil, nil, nil, 67, nil, 89, 103, 104, - nil, nil, 43, 44, 303, 79, 80, 81, 11, 62, - nil, nil, nil, 68, 69, nil, nil, nil, 72, nil, - 70, 71, 73, 32, 33, 77, 78, nil, nil, nil, - nil, nil, 82, 30, 29, 111, 110, 112, 113, nil, - nil, 21, nil, nil, nil, nil, nil, 10, 50, 305, - 12, 115, 114, 116, 105, 61, 107, 106, 108, nil, - 109, 117, 118, nil, 101, 102, 46, 47, 45, 250, - 254, 255, 256, 257, 267, 268, 262, 263, 258, 259, - nil, 243, 244, nil, nil, 260, 261, nil, 42, nil, - nil, 307, nil, nil, 63, 64, nil, nil, 65, nil, - 37, 247, nil, 253, 49, 249, 248, nil, 245, 246, - 266, 265, 251, 22, 252, nil, nil, nil, 99, 87, - 90, 91, nil, 92, 94, 93, 95, nil, nil, nil, - nil, 88, 98, nil, 264, nil, nil, nil, nil, 67, - nil, 89, 103, 104, nil, nil, 43, 44, 303, 79, - 80, 81, 11, 62, nil, nil, nil, 68, 69, nil, - nil, nil, 72, nil, 70, 71, 73, 32, 33, 77, - 78, nil, nil, nil, nil, nil, 82, 30, 29, 111, - 110, 112, 113, nil, nil, 21, nil, nil, nil, nil, - nil, 10, 50, 305, 12, 115, 114, 116, 105, 61, - 107, 106, 108, nil, 109, 117, 118, nil, 101, 102, - 46, 47, 45, 250, 254, 255, 256, 257, 267, 268, - 262, 263, 258, 259, nil, 243, 244, nil, nil, 260, - 261, nil, 42, nil, nil, 35, nil, nil, 63, 64, - nil, nil, 65, nil, 37, 247, nil, 253, 49, 249, - 248, nil, 245, 246, 266, 265, 251, 22, 252, nil, - nil, nil, 99, 87, 90, 91, nil, 92, 94, 93, - 95, nil, nil, nil, nil, 88, 98, nil, 264, nil, - nil, nil, nil, 67, nil, 89, 103, 104, nil, nil, - 43, 44, 303, 79, 80, 81, 11, 62, nil, nil, - nil, 68, 69, nil, nil, nil, 72, nil, 70, 71, - 73, 32, 33, 77, 78, nil, nil, nil, nil, nil, - 82, 30, 29, 111, 110, 112, 113, nil, nil, 21, - nil, nil, nil, nil, nil, 10, 50, 305, 12, 115, - 114, 116, 105, 61, 107, 106, 108, nil, 109, 117, - 118, nil, 101, 102, 46, 47, 45, 250, 254, 255, - 256, 257, 267, 268, 262, 263, 258, 259, nil, 243, - 244, nil, nil, 260, 261, nil, 42, nil, nil, 35, - nil, nil, 63, 64, nil, nil, 65, nil, 37, 247, - nil, 253, 49, 249, 248, nil, 245, 246, 266, 265, - 251, 22, 252, nil, nil, nil, 99, 87, 90, 91, - nil, 92, 94, 93, 95, nil, nil, nil, nil, 88, - 98, nil, 264, nil, nil, nil, nil, 67, nil, 89, - 103, 104, nil, nil, 43, 44, 303, 79, 80, 81, - 11, 62, nil, nil, nil, 68, 69, nil, nil, nil, - 72, nil, 70, 71, 73, 32, 33, 77, 78, nil, - nil, nil, nil, nil, 82, 30, 29, 111, 110, 112, - 113, nil, 724, 21, 721, 720, 719, nil, 722, 10, - 50, 305, 12, 115, 114, 116, 105, 61, 107, 106, - 108, nil, 109, 117, 118, nil, 101, 102, 46, 47, - 45, 724, nil, 721, 720, 719, nil, 722, nil, 878, - nil, 724, nil, 721, 720, 719, nil, 722, 882, nil, - 42, nil, nil, 35, nil, nil, 63, 64, nil, nil, - 65, 724, 37, 721, 720, 719, 49, 722, 878, nil, - nil, nil, nil, nil, nil, 22, nil, 882, 878, nil, - 99, 87, 90, 91, nil, 92, 94, 93, 95, nil, - nil, nil, nil, 88, 98, nil, nil, nil, 878, nil, - nil, 67, nil, 89, 103, 104, nil, 882, 43, 44, - 303, 79, 80, 81, 11, 62, nil, nil, nil, 68, - 69, nil, nil, nil, 72, nil, 70, 71, 73, 32, - 33, 77, 78, nil, nil, nil, nil, nil, 82, 30, - 29, 111, 110, 112, 113, nil, nil, 21, nil, nil, - nil, nil, nil, 10, 50, 305, 12, 115, 114, 116, - 105, 61, 107, 106, 108, nil, 109, 117, 118, nil, - 101, 102, 46, 47, 45, 250, 254, 255, 256, 257, - 267, 268, 262, 263, 258, 259, nil, -716, -716, nil, - nil, 260, 261, nil, 42, nil, nil, 35, nil, nil, - 63, 64, nil, 250, 65, nil, 37, 247, nil, 253, - 49, 249, 248, nil, 245, 246, 266, 265, 251, 22, - 252, nil, nil, nil, 99, 87, 90, 91, nil, 92, - 94, 93, 95, nil, nil, 247, nil, 88, 98, 249, - 248, nil, 245, 246, nil, 67, nil, 89, 103, 104, - nil, nil, 43, 44, 303, 79, 80, 81, 11, 62, - nil, nil, nil, 68, 69, nil, nil, nil, 72, nil, - 70, 71, 73, 32, 33, 77, 78, nil, nil, nil, - nil, nil, 82, 30, 29, 111, 110, 112, 113, nil, - nil, 21, nil, nil, nil, nil, nil, 10, 50, 305, - 12, 115, 114, 116, 105, 61, 107, 106, 108, nil, - 109, 117, 118, nil, 101, 102, 46, 47, 45, 250, - 254, 255, 256, 257, 267, 268, 262, 263, 258, 259, - nil, -716, -716, nil, nil, 260, 261, nil, 42, nil, - nil, 35, nil, nil, 63, 64, nil, 250, 65, nil, - 37, 247, nil, 253, 49, 249, 248, nil, 245, 246, - 266, 265, 251, 22, 252, nil, nil, nil, 99, 87, - 90, 91, nil, 92, 94, 93, 95, nil, nil, 247, - nil, 88, 98, 249, 248, nil, 245, 246, nil, 67, - nil, 89, 103, 104, nil, nil, 43, 44, 303, 79, - 80, 81, 11, 62, nil, nil, nil, 68, 69, nil, - nil, nil, 72, nil, 70, 71, 73, 32, 33, 77, - 78, nil, nil, nil, nil, nil, 82, 30, 29, 111, - 110, 112, 113, nil, nil, 21, nil, nil, nil, nil, - nil, 10, 50, 305, 12, 115, 114, 116, 105, 61, - 107, 106, 108, nil, 109, 117, 118, nil, 101, 102, - 46, 47, 45, 250, 254, 255, 256, 257, 267, 268, - 262, 263, 258, 259, nil, -716, -716, nil, nil, 260, - 261, nil, 42, nil, nil, 35, nil, nil, 63, 64, - nil, nil, 65, nil, 37, 247, nil, 253, 49, 249, - 248, nil, 245, 246, 266, 265, 251, 22, 252, nil, - nil, nil, 99, 87, 90, 91, nil, 92, 94, 93, - 95, nil, nil, nil, nil, 88, 98, nil, 724, nil, - 721, 720, 719, 67, 722, 89, 103, 104, nil, nil, - 43, 44, 303, 79, 80, 81, 11, 62, nil, nil, - nil, 68, 69, nil, nil, nil, 72, nil, 70, 71, - 73, 32, 33, 77, 78, 878, nil, nil, nil, nil, - 82, 30, 29, 111, 110, 112, 113, nil, nil, 21, - nil, nil, nil, nil, nil, 10, 50, 305, 12, 115, - 114, 116, 105, 61, 107, 106, 108, nil, 109, 117, - 118, nil, 101, 102, 46, 47, 45, 250, 254, 255, - 256, 257, 267, 268, 262, 263, 258, 259, nil, -716, - -716, nil, nil, 260, 261, nil, 42, nil, nil, 35, - nil, nil, 63, 64, nil, nil, 65, nil, 37, 247, - nil, 253, 49, 249, 248, nil, 245, 246, 266, 265, - 251, 22, 252, nil, nil, nil, 99, 87, 90, 91, - nil, 92, 94, 93, 95, nil, nil, nil, nil, 88, - 98, nil, 724, nil, 721, 720, 719, 67, 722, 89, - 103, 104, nil, nil, 43, 44, 303, 79, 80, 81, - 11, 62, nil, nil, nil, 68, 69, nil, nil, nil, - 72, nil, 70, 71, 73, 32, 33, 77, 78, 878, - nil, nil, nil, nil, 82, 30, 29, 111, 110, 112, - 113, nil, nil, 21, nil, nil, nil, nil, nil, 10, - 50, 305, 12, 115, 114, 116, 105, 61, 107, 106, - 108, nil, 109, 117, 118, nil, 101, 102, 46, 47, - 45, 250, -716, -716, -716, -716, 267, 268, nil, nil, - -716, -716, nil, nil, nil, nil, nil, 260, 261, nil, - 42, nil, nil, 35, nil, nil, 63, 64, nil, nil, - 65, nil, 37, 247, nil, 253, 49, 249, 248, nil, - 245, 246, 266, 265, 251, 22, 252, nil, nil, nil, - 99, 87, 90, 91, nil, 92, 94, 93, 95, nil, - nil, nil, nil, 88, 98, nil, nil, nil, nil, nil, - nil, 67, nil, 89, 103, 104, nil, nil, 43, 44, - 303, 79, 80, 81, 11, 62, nil, nil, nil, 68, - 69, nil, nil, nil, 72, nil, 70, 71, 73, 32, - 33, 77, 78, nil, nil, nil, nil, nil, 82, 30, - 29, 111, 110, 112, 113, nil, nil, 21, nil, nil, - nil, nil, nil, 10, 50, 305, 12, 115, 114, 116, - 105, 61, 107, 106, 108, nil, 109, 117, 118, nil, - 101, 102, 46, 47, 45, 250, -716, -716, -716, -716, - 267, 268, nil, nil, -716, -716, nil, nil, nil, nil, - nil, 260, 261, nil, 42, nil, nil, 35, nil, nil, - 63, 64, nil, nil, 65, nil, 37, 247, nil, 253, - 49, 249, 248, nil, 245, 246, 266, 265, 251, 22, - 252, nil, nil, nil, 99, 87, 90, 91, nil, 92, - 94, 93, 95, nil, nil, nil, nil, 88, 98, nil, - nil, nil, nil, nil, nil, 67, nil, 89, 103, 104, - nil, nil, 43, 44, 303, 79, 80, 81, 11, 62, - nil, nil, nil, 68, 69, nil, nil, nil, 72, nil, - 70, 71, 73, 32, 33, 77, 78, nil, nil, nil, - nil, nil, 82, 30, 29, 111, 110, 112, 113, nil, - nil, 21, nil, nil, nil, nil, nil, 10, 50, 305, - 12, 115, 114, 116, 105, 61, 107, 106, 108, nil, - 109, 117, 118, nil, 101, 102, 46, 47, 45, 250, - -716, -716, -716, -716, 267, 268, nil, nil, -716, -716, - nil, nil, nil, nil, nil, 260, 261, nil, 42, nil, - nil, 35, nil, nil, 63, 64, nil, nil, 65, nil, - 37, 247, nil, 253, 49, 249, 248, nil, 245, 246, - 266, 265, 251, 22, 252, nil, nil, nil, 99, 87, - 90, 91, nil, 92, 94, 93, 95, nil, nil, nil, - nil, 88, 98, nil, nil, nil, nil, nil, nil, 67, - nil, 89, 103, 104, nil, nil, 43, 44, 303, 79, - 80, 81, 11, 62, nil, nil, nil, 68, 69, nil, - nil, nil, 72, nil, 70, 71, 73, 32, 33, 77, - 78, nil, nil, nil, nil, nil, 82, 30, 29, 111, - 110, 112, 113, nil, nil, 21, nil, nil, nil, nil, - nil, 10, 50, 305, 12, 115, 114, 116, 105, 61, - 107, 106, 108, nil, 109, 117, 118, nil, 101, 102, - 46, 47, 45, 250, -716, -716, -716, -716, 267, 268, - nil, nil, -716, -716, nil, nil, nil, nil, nil, 260, - 261, nil, 42, nil, nil, 35, nil, nil, 63, 64, - nil, nil, 65, nil, 37, 247, nil, 253, 49, 249, - 248, nil, 245, 246, 266, 265, 251, 22, 252, nil, - nil, nil, 99, 87, 90, 91, nil, 92, 94, 93, - 95, nil, nil, nil, nil, 88, 98, nil, nil, nil, - nil, nil, nil, 67, nil, 89, 103, 104, nil, nil, - 43, 44, 303, 79, 80, 81, 11, 62, nil, nil, - nil, 68, 69, nil, nil, nil, 72, nil, 70, 71, - 73, 32, 33, 77, 78, nil, nil, nil, nil, nil, - 82, 30, 29, 111, 110, 112, 113, nil, nil, 21, - nil, nil, nil, nil, nil, 10, 50, 305, 12, 115, - 114, 116, 105, 61, 107, 106, 108, nil, 109, 117, - 118, nil, 101, 102, 46, 47, 45, 250, -716, -716, - -716, -716, 267, 268, nil, nil, -716, -716, nil, nil, - nil, nil, nil, 260, 261, nil, 42, nil, nil, 35, - nil, nil, 63, 64, nil, nil, 65, nil, 37, 247, - nil, 253, 49, 249, 248, nil, 245, 246, 266, 265, - 251, 22, 252, nil, nil, nil, 99, 87, 90, 91, - nil, 92, 94, 93, 95, nil, nil, nil, nil, 88, - 98, nil, nil, nil, nil, nil, nil, 67, nil, 89, - 103, 104, nil, nil, 43, 44, 303, 79, 80, 81, - 11, 62, nil, nil, nil, 68, 69, nil, nil, nil, - 72, nil, 70, 71, 73, 32, 33, 77, 78, nil, - nil, nil, nil, nil, 82, 30, 29, 111, 110, 112, - 113, nil, nil, 21, nil, nil, nil, nil, nil, 10, - 50, 305, 12, 115, 114, 116, 105, 61, 107, 106, - 108, nil, 109, 117, 118, nil, 101, 102, 46, 47, - 45, 250, -716, -716, -716, -716, 267, 268, nil, nil, - -716, -716, nil, nil, nil, nil, nil, 260, 261, nil, - 42, nil, nil, 35, nil, nil, 63, 64, nil, nil, - 65, nil, 37, 247, nil, 253, 49, 249, 248, nil, - 245, 246, 266, 265, 251, 22, 252, nil, nil, nil, - 99, 87, 90, 91, nil, 92, 94, 93, 95, nil, - nil, nil, nil, 88, 98, nil, nil, nil, nil, nil, - nil, 67, nil, 89, 103, 104, nil, nil, 43, 44, - 303, 79, 80, 81, 11, 62, nil, nil, nil, 68, - 69, nil, nil, nil, 72, nil, 70, 71, 73, 32, - 33, 77, 78, nil, nil, nil, nil, nil, 82, 30, - 29, 111, 110, 112, 113, nil, nil, 21, nil, nil, - nil, nil, nil, 10, 50, 305, 12, 115, 114, 116, - 105, 61, 107, 106, 108, nil, 109, 117, 118, nil, - 101, 102, 46, 47, 45, 250, 254, 255, 256, 257, - 267, 268, nil, nil, 258, 259, nil, nil, nil, nil, - nil, 260, 261, nil, 42, nil, nil, 35, nil, nil, - 63, 64, nil, nil, 65, nil, 37, 247, nil, 253, - 49, 249, 248, nil, 245, 246, 266, 265, 251, 22, - 252, nil, nil, nil, 99, 87, 90, 91, nil, 92, - 94, 93, 95, nil, nil, nil, nil, 88, 98, nil, - nil, nil, nil, nil, nil, 67, nil, 89, 103, 104, - nil, nil, 43, 44, 303, 79, 80, 81, 11, 62, - nil, nil, nil, 68, 69, nil, nil, nil, 72, nil, - 70, 71, 73, 32, 33, 77, 78, nil, nil, nil, - nil, nil, 82, 30, 29, 111, 110, 112, 113, nil, - nil, 21, nil, nil, nil, nil, nil, 10, 50, 305, - 12, 115, 114, 116, 105, 61, 107, 106, 108, nil, - 109, 117, 118, nil, 101, 102, 46, 47, 45, 250, - 254, 255, 256, 257, 267, 268, 262, nil, 258, 259, - nil, nil, nil, nil, nil, 260, 261, nil, 42, nil, - nil, 35, nil, nil, 63, 64, nil, nil, 65, nil, - 37, 247, nil, 253, 49, 249, 248, nil, 245, 246, - 266, 265, 251, 22, 252, nil, nil, nil, 99, 87, - 90, 91, nil, 92, 94, 93, 95, nil, nil, nil, - nil, 88, 98, nil, nil, nil, nil, nil, nil, 67, - nil, 89, 103, 104, nil, nil, 43, 44, 303, 79, - 80, 81, 11, 62, nil, nil, nil, 68, 69, nil, - nil, nil, 72, nil, 70, 71, 73, 32, 33, 77, - 78, nil, nil, nil, nil, nil, 82, 30, 29, 111, - 110, 112, 113, nil, nil, 21, nil, nil, nil, nil, - nil, 10, 50, 305, 12, 115, 114, 116, 105, 61, - 107, 106, 108, nil, 109, 117, 118, nil, 101, 102, - 46, 47, 45, 250, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 260, - 261, nil, 42, nil, nil, 35, nil, nil, 63, 64, - nil, nil, 65, nil, 37, 247, nil, 253, 49, 249, - 248, nil, 245, 246, nil, nil, 251, 22, 252, nil, - nil, nil, 99, 87, 90, 91, nil, 92, 94, 93, - 95, nil, nil, nil, nil, 88, 98, nil, nil, nil, - nil, nil, nil, 67, nil, 89, 103, 104, nil, nil, - 43, 44, 303, 79, 80, 81, 11, 62, nil, nil, - nil, 68, 69, nil, nil, nil, 72, nil, 70, 71, - 73, 32, 33, 77, 78, nil, nil, nil, nil, nil, - 82, 30, 29, 111, 110, 112, 113, nil, nil, 21, - nil, nil, nil, nil, nil, 10, 50, 305, 12, 115, - 114, 116, 105, 61, 107, 106, 108, nil, 109, 117, - 118, nil, 101, 102, 46, 47, 45, 250, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 260, 261, nil, 42, nil, nil, 35, - nil, nil, 63, 64, nil, nil, 65, nil, 37, 247, - nil, 253, 49, 249, 248, nil, 245, 246, nil, nil, - 251, 22, 252, nil, nil, nil, 99, 87, 90, 91, - nil, 92, 94, 93, 95, nil, nil, nil, nil, 88, - 98, nil, nil, nil, nil, nil, nil, 67, nil, 89, - 103, 104, nil, nil, 43, 44, 303, 79, 80, 81, - 11, 62, nil, nil, nil, 68, 69, nil, nil, nil, - 72, nil, 70, 71, 73, 32, 33, 77, 78, nil, - nil, nil, nil, nil, 82, 30, 29, 111, 110, 112, - 113, nil, nil, 21, nil, nil, nil, nil, nil, 10, - 50, 305, 12, 115, 114, 116, 105, 61, 107, 106, - 108, nil, 109, 117, 118, nil, 101, 102, 46, 47, - 45, 250, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 260, 261, nil, - 42, nil, nil, 35, nil, nil, 63, 64, nil, nil, - 65, nil, 37, 247, nil, 253, 49, 249, 248, nil, - 245, 246, nil, nil, nil, 22, nil, nil, nil, nil, - 99, 87, 90, 91, nil, 92, 94, 93, 95, nil, - nil, nil, nil, 88, 98, nil, nil, nil, nil, nil, - nil, 67, nil, 89, 103, 104, nil, nil, 43, 44, - 303, 79, 80, 81, 11, 62, nil, nil, nil, 68, - 69, nil, nil, nil, 72, nil, 70, 71, 73, 32, - 33, 77, 78, nil, nil, nil, nil, nil, 82, 30, - 29, 111, 110, 112, 113, nil, nil, 21, nil, nil, - nil, nil, nil, 10, 50, 305, 12, 115, 114, 116, - 105, 61, 107, 106, 108, nil, 109, 117, 118, nil, - 101, 102, 46, 47, 45, 250, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 260, 261, nil, 42, nil, nil, 35, nil, nil, - 63, 64, nil, nil, 65, nil, 37, 247, nil, 253, - 49, 249, 248, nil, 245, 246, nil, nil, nil, 22, - nil, nil, nil, nil, 99, 87, 90, 91, nil, 92, - 94, 93, 95, nil, nil, nil, nil, 88, 98, nil, - nil, nil, nil, nil, nil, 67, nil, 89, 103, 104, - nil, nil, 43, 44, 303, 79, 80, 81, 11, 62, - nil, nil, nil, 68, 69, nil, nil, nil, 72, nil, - 70, 71, 73, 32, 33, 77, 78, nil, nil, nil, - nil, nil, 82, 30, 29, 111, 110, 112, 113, nil, - nil, 21, nil, nil, nil, nil, nil, 10, 50, 305, - 12, 115, 114, 116, 105, 61, 107, 106, 108, nil, - 109, 117, 118, nil, 101, 102, 46, 47, 45, 250, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 260, 261, nil, 42, nil, - nil, 35, nil, nil, 63, 64, nil, nil, 65, nil, - 37, 247, nil, nil, 49, 249, 248, nil, 245, 246, - nil, nil, nil, 22, nil, nil, nil, nil, 99, 87, - 90, 91, nil, 92, 94, 93, 95, nil, nil, nil, - nil, 88, 98, nil, nil, nil, nil, nil, nil, 67, - nil, 89, 103, 104, nil, nil, 43, 44, 303, 79, - 80, 81, 11, 62, nil, nil, nil, 68, 69, nil, - nil, nil, 72, nil, 70, 71, 73, 32, 33, 77, - 78, nil, nil, nil, nil, nil, 82, 30, 29, 111, - 110, 112, 113, nil, nil, 21, nil, nil, nil, nil, - nil, 10, 50, 305, 12, 115, 114, 116, 105, 61, - 107, 106, 108, nil, 109, 117, 118, nil, 101, 102, - 46, 47, 45, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 42, nil, nil, 35, nil, nil, 63, 64, - nil, nil, 65, nil, 37, nil, nil, nil, 49, nil, - nil, nil, nil, nil, nil, nil, nil, 22, nil, nil, - nil, nil, 99, 87, 90, 91, nil, 92, 94, 93, - 95, nil, nil, nil, nil, 88, 98, nil, nil, nil, - nil, nil, nil, 67, nil, 89, 103, 104, nil, nil, - 43, 44, 303, 79, 80, 81, 11, 62, nil, nil, - nil, 68, 69, nil, nil, nil, 72, nil, 70, 71, - 73, 32, 33, 77, 78, nil, nil, nil, nil, nil, - 82, 30, 29, 111, 110, 112, 113, nil, nil, 21, - nil, nil, nil, nil, nil, 10, 50, 305, 12, 115, - 114, 116, 105, 61, 107, 106, 108, nil, 109, 117, - 118, nil, 101, 102, 46, 47, 45, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 42, nil, nil, 35, - nil, nil, 63, 64, nil, nil, 65, nil, 37, nil, - nil, nil, 49, nil, nil, nil, nil, nil, nil, nil, - nil, 22, nil, nil, nil, nil, 99, 87, 90, 91, - nil, 92, 94, 93, 95, nil, nil, nil, nil, 88, - 98, nil, nil, nil, nil, nil, nil, 67, nil, 89, - 103, 104, nil, nil, 43, 44, 79, 80, 81, 11, - 62, nil, nil, nil, 68, 69, nil, nil, nil, 72, - nil, 70, 71, 73, 32, 33, 77, 78, nil, nil, - nil, nil, nil, 82, 30, 29, 111, 110, 112, 113, - nil, nil, 21, nil, nil, nil, nil, nil, 10, 50, - 9, 12, 115, 114, 116, 105, 61, 107, 106, 108, - nil, 109, 117, 118, nil, 101, 102, 46, 47, 45, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 42, - nil, nil, 35, nil, nil, 63, 64, nil, nil, 65, - nil, 37, nil, nil, nil, 49, nil, nil, nil, nil, - nil, nil, nil, nil, 22, nil, nil, nil, nil, 99, - 87, 90, 91, nil, 92, 94, 93, 95, nil, nil, - nil, nil, 88, 98, nil, nil, nil, 79, 80, 81, - 67, 62, 89, 103, 104, 68, 69, 43, 44, nil, - 72, nil, 70, 71, 73, 32, 33, 77, 78, nil, - nil, nil, nil, nil, 82, 30, 29, 111, 110, 112, - 113, nil, nil, 241, nil, nil, nil, nil, nil, nil, - 50, nil, nil, 115, 114, 116, 105, 61, 107, 106, - 108, nil, 109, 117, 118, nil, 101, 102, 46, 47, - 45, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 234, nil, nil, 240, nil, nil, 63, 64, nil, nil, - 65, nil, nil, nil, nil, nil, 49, nil, nil, nil, - nil, nil, nil, nil, nil, 239, nil, nil, nil, nil, - 99, 87, 90, 91, nil, 92, 94, 93, 95, nil, - nil, nil, nil, 88, 98, nil, nil, nil, nil, nil, - nil, 67, nil, 89, 103, 104, -424, nil, 43, 44, - nil, nil, nil, -424, -424, -424, nil, nil, -424, -424, - -424, nil, -424, nil, nil, nil, nil, nil, nil, nil, - -424, -424, -424, -424, nil, nil, nil, nil, nil, nil, - nil, nil, -424, -424, nil, -424, -424, -424, -424, -424, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, -424, -424, -424, -424, -424, -424, -424, -424, - -424, -424, -424, -424, -424, -424, nil, nil, -424, -424, - -424, nil, nil, -424, nil, 276, -424, nil, nil, -424, - -424, nil, -424, nil, -424, nil, -424, nil, -424, -424, - nil, -424, -424, -424, -424, -424, -311, -424, -424, -424, - nil, nil, nil, -311, -311, -311, nil, nil, -311, -311, - -311, nil, -311, -424, nil, nil, -424, -424, nil, -424, - -311, -424, -311, -311, nil, nil, nil, nil, -424, nil, - nil, nil, -311, -311, nil, -311, -311, -311, -311, -311, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, -311, -311, -311, -311, -311, -311, -311, -311, - -311, -311, -311, -311, -311, -311, nil, nil, -311, -311, - -311, nil, nil, -311, nil, 285, -311, nil, nil, -311, - -311, nil, -311, nil, -311, nil, -311, nil, -311, -311, - nil, -311, -311, -311, -311, -311, nil, -311, nil, -311, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, -311, nil, nil, -311, -311, nil, -311, - nil, -311, 79, 80, 81, nil, 62, nil, -311, nil, - 68, 69, nil, nil, nil, 72, nil, 70, 71, 73, - 32, 33, 77, 78, nil, nil, nil, nil, nil, 82, - 30, 29, 111, 110, 112, 113, nil, nil, 241, nil, - nil, nil, nil, nil, nil, 50, nil, nil, 115, 114, - 116, 105, 61, 107, 106, 108, 297, 109, 117, 118, - nil, 101, 102, 46, 47, 45, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 234, nil, nil, 240, nil, - nil, 63, 64, nil, nil, 65, nil, 294, nil, 292, - nil, 49, nil, nil, 298, nil, nil, nil, nil, nil, - 239, nil, nil, nil, nil, 99, 295, 90, 91, nil, - 92, 94, 93, 95, nil, nil, nil, nil, 88, 98, - nil, nil, nil, 79, 80, 81, 67, 62, 89, 103, - 104, 68, 69, 43, 44, nil, 72, nil, 70, 71, - 73, 32, 33, 77, 78, nil, nil, nil, nil, nil, - 82, 30, 29, 111, 110, 112, 113, nil, nil, 241, - nil, nil, nil, nil, nil, nil, 50, nil, nil, 115, - 114, 116, 105, 61, 107, 106, 108, 297, 109, 117, - 118, nil, 101, 102, 46, 47, 45, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 234, nil, nil, 240, - nil, nil, 63, 64, nil, nil, 65, nil, 294, nil, - 292, nil, 49, nil, nil, 298, nil, nil, nil, nil, - nil, 239, nil, nil, nil, nil, 99, 295, 90, 91, - nil, 92, 94, 93, 95, nil, nil, nil, nil, 88, - 98, nil, nil, nil, 79, 80, 81, 67, 62, 89, - 103, 104, 68, 69, 43, 44, nil, 72, nil, 70, - 71, 73, 32, 33, 77, 78, nil, nil, nil, nil, - nil, 82, 30, 29, 111, 110, 112, 113, nil, nil, - 241, nil, nil, nil, nil, nil, nil, 50, nil, nil, - 115, 114, 116, 105, 61, 107, 106, 108, 297, 109, - 117, 118, nil, 101, 102, 46, 47, 45, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 234, nil, nil, - 240, nil, nil, 63, 64, nil, nil, 65, nil, 294, - nil, 292, nil, 49, nil, nil, 298, nil, nil, nil, - nil, nil, 239, nil, nil, nil, nil, 99, 295, 90, - 91, nil, 92, 94, 93, 95, nil, nil, nil, nil, - 88, 98, nil, nil, nil, 79, 80, 81, 67, 62, - 89, 103, 104, 68, 69, 43, 44, nil, 72, nil, - 70, 71, 73, 322, 323, 77, 78, nil, nil, nil, - nil, nil, 82, 319, 325, 111, 110, 112, 113, nil, - nil, 241, nil, nil, nil, nil, nil, nil, 50, nil, - nil, 115, 114, 116, 105, 61, 107, 106, 108, nil, - 109, 117, 118, nil, 101, 102, 46, 47, 45, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 234, nil, - nil, 240, nil, nil, 63, 64, nil, nil, 65, nil, - nil, nil, nil, nil, 49, nil, nil, nil, nil, nil, - nil, nil, nil, 239, nil, nil, nil, nil, 99, 87, - 90, 91, nil, 92, 94, 93, 95, nil, nil, nil, - nil, 88, 98, nil, nil, nil, 79, 80, 81, 67, - 62, 89, 103, 104, 68, 69, 43, 44, nil, 72, - nil, 70, 71, 73, 322, 323, 77, 78, nil, nil, - nil, nil, nil, 82, 319, 325, 111, 110, 112, 113, - nil, nil, 241, nil, nil, nil, nil, nil, nil, 50, - nil, nil, 115, 114, 116, 105, 61, 107, 106, 108, - nil, 109, 117, 118, nil, 101, 102, 46, 47, 45, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 234, - nil, nil, 240, nil, nil, 63, 64, nil, nil, 65, - nil, nil, nil, nil, nil, 49, nil, nil, nil, nil, - nil, nil, nil, nil, 239, nil, nil, nil, nil, 99, - 87, 90, 91, nil, 92, 94, 93, 95, nil, nil, - nil, nil, 88, 98, nil, nil, nil, 79, 80, 81, - 67, 62, 89, 103, 104, 68, 69, 43, 44, nil, - 72, nil, 70, 71, 73, 322, 323, 77, 78, nil, - nil, nil, nil, nil, 82, 319, 325, 111, 110, 112, - 113, nil, nil, 241, nil, nil, nil, nil, nil, nil, - 50, nil, nil, 115, 114, 116, 105, 61, 107, 106, - 108, nil, 109, 117, 118, nil, 101, 102, 46, 47, - 45, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 234, nil, nil, 240, nil, nil, 63, 64, nil, nil, - 65, nil, nil, nil, nil, nil, 49, nil, nil, nil, - nil, nil, nil, nil, nil, 239, nil, nil, nil, nil, - 99, 87, 90, 91, nil, 92, 94, 93, 95, nil, - nil, nil, nil, 88, 98, nil, nil, nil, 79, 80, - 81, 67, 62, 89, 103, 104, 68, 69, 43, 44, - nil, 72, nil, 70, 71, 73, 322, 323, 77, 78, - nil, nil, nil, nil, nil, 82, 319, 325, 111, 110, - 112, 113, nil, nil, 241, nil, nil, nil, nil, nil, - nil, 50, nil, nil, 115, 114, 116, 105, 61, 107, - 106, 108, nil, 109, 117, 118, nil, 101, 102, 46, - 47, 45, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 234, nil, nil, 240, nil, nil, 63, 64, nil, - nil, 65, nil, nil, nil, nil, nil, 49, nil, nil, - nil, nil, nil, nil, nil, nil, 239, nil, nil, nil, - nil, 99, 87, 90, 91, nil, 92, 94, 93, 95, - nil, nil, nil, nil, 88, 98, nil, nil, nil, 79, - 80, 81, 67, 62, 89, 103, 104, 68, 69, 43, - 44, nil, 72, nil, 70, 71, 73, 322, 323, 77, - 78, nil, nil, nil, nil, nil, 82, 319, 325, 111, - 110, 112, 113, nil, nil, 241, nil, nil, nil, nil, - nil, nil, 50, nil, nil, 115, 114, 116, 105, 61, - 107, 106, 108, nil, 109, 117, 118, nil, 101, 102, - 46, 47, 45, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 234, nil, nil, 240, nil, nil, 63, 64, - nil, nil, 65, nil, nil, nil, nil, nil, 49, nil, - nil, nil, nil, nil, nil, nil, nil, 239, nil, nil, - nil, nil, 99, 87, 90, 91, nil, 92, 94, 93, - 95, nil, nil, nil, nil, 88, 98, nil, nil, nil, - nil, nil, nil, 67, nil, 89, 103, 104, -296, nil, - 43, 44, nil, nil, nil, -296, -296, -296, nil, nil, - -296, -296, -296, nil, -296, nil, nil, nil, nil, nil, - nil, nil, -296, nil, -296, -296, -296, nil, nil, nil, - 111, 110, 112, 113, -296, -296, nil, -296, -296, -296, - -296, -296, nil, nil, nil, nil, 115, 114, 116, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 101, - 102, nil, nil, 326, -296, -296, -296, -296, -296, -296, - -296, -296, -296, -296, -296, -296, -296, -296, nil, nil, - -296, -296, -296, nil, nil, -296, nil, nil, -296, nil, - nil, -296, -296, nil, -296, nil, -296, nil, -296, nil, - -296, -296, nil, -296, -296, -296, -296, -296, nil, -296, - nil, -296, nil, 99, 87, 90, 91, nil, 92, 94, - 93, 95, nil, nil, nil, -296, 88, 98, -296, -296, - -296, -296, nil, -296, 660, -296, 89, 103, 104, nil, - -296, 79, 80, 81, 11, 62, nil, nil, nil, 68, - 69, nil, nil, nil, 72, nil, 70, 71, 73, 32, - 33, 77, 78, nil, nil, nil, nil, nil, 82, 30, - 29, 111, 110, 112, 113, nil, nil, 21, nil, nil, - nil, nil, nil, 10, 50, nil, 12, 115, 114, 116, - 105, 61, 107, 106, 108, nil, 109, 117, 118, nil, - 101, 102, 46, 47, 45, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 42, nil, nil, 35, nil, nil, - 63, 64, nil, nil, 65, nil, 37, nil, nil, nil, - 49, nil, nil, nil, nil, nil, nil, nil, nil, 22, - nil, nil, nil, nil, 99, 87, 90, 91, nil, 92, - 94, 93, 95, nil, nil, nil, nil, 88, 98, nil, - nil, nil, 79, 80, 81, 67, 62, 89, 103, 104, - 68, 69, 43, 44, nil, 72, nil, 70, 71, 73, - 322, 323, 77, 78, nil, nil, nil, nil, nil, 82, - 319, 325, 111, 110, 112, 113, nil, nil, 241, nil, - nil, nil, nil, nil, nil, 50, nil, nil, 115, 114, - 116, 105, 61, 107, 106, 108, 297, 109, 117, 118, - nil, 101, 102, 46, 47, 45, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 234, nil, nil, 240, nil, - nil, 63, 64, nil, nil, 65, nil, 294, nil, nil, - nil, 49, nil, nil, 298, nil, nil, nil, nil, nil, - 239, nil, nil, nil, nil, 99, 295, 90, 91, nil, - 92, 94, 93, 95, nil, nil, nil, nil, 88, 98, - nil, nil, nil, 79, 80, 81, 67, 62, 89, 103, - 104, 68, 69, 43, 44, nil, 72, nil, 70, 71, - 73, 322, 323, 77, 78, nil, nil, nil, nil, nil, - 82, 319, 325, 111, 110, 112, 113, nil, nil, 241, - nil, nil, nil, nil, nil, nil, 50, nil, nil, 115, - 114, 116, 105, 61, 107, 106, 108, 297, 109, 117, - 118, nil, 101, 102, 46, 47, 45, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 234, nil, nil, 240, - nil, nil, 63, 64, nil, nil, 65, nil, nil, nil, - nil, nil, 49, nil, nil, 298, nil, nil, nil, nil, - nil, 239, nil, nil, nil, nil, 99, 295, 90, 91, - nil, 92, 94, 93, 95, nil, nil, nil, nil, 88, - 98, nil, nil, nil, 79, 80, 81, 67, 62, 89, - 103, 104, 68, 69, 43, 44, nil, 72, nil, 70, - 71, 73, 32, 33, 77, 78, nil, nil, nil, nil, - nil, 82, 30, 29, 111, 110, 112, 113, nil, nil, - 21, nil, nil, nil, nil, nil, nil, 50, nil, nil, - 115, 114, 116, 105, 61, 107, 106, 108, nil, 109, - 117, 118, nil, 101, 102, 46, 47, 45, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 234, nil, nil, - 240, nil, nil, 63, 64, nil, nil, 65, nil, nil, - nil, nil, nil, 49, nil, nil, nil, nil, nil, nil, - nil, nil, 22, nil, nil, nil, nil, 99, 87, 90, - 91, nil, 92, 94, 93, 95, nil, nil, nil, nil, - 88, 98, nil, nil, nil, 79, 80, 81, 67, 62, - 89, 103, 104, 68, 69, 43, 44, nil, 72, nil, - 70, 71, 73, 32, 33, 77, 78, nil, nil, nil, - nil, nil, 82, 30, 29, 111, 110, 112, 113, nil, - nil, 21, nil, nil, nil, nil, nil, nil, 50, nil, - nil, 115, 114, 116, 105, 61, 107, 106, 108, nil, - 109, 117, 118, nil, 101, 102, 46, 47, 45, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 234, nil, - nil, 240, nil, nil, 63, 64, nil, nil, 65, nil, - nil, nil, nil, nil, 49, nil, nil, nil, nil, nil, - nil, nil, nil, 22, nil, nil, nil, nil, 99, 87, - 90, 91, nil, 92, 94, 93, 95, nil, nil, nil, - nil, 88, 98, nil, nil, nil, 79, 80, 81, 67, - 62, 89, 103, 104, 68, 69, 43, 44, nil, 72, - nil, 70, 71, 73, 32, 33, 77, 78, nil, nil, - nil, nil, nil, 82, 30, 29, 111, 110, 112, 113, - nil, nil, 21, nil, nil, nil, nil, nil, nil, 50, - nil, nil, 115, 114, 116, 105, 61, 107, 106, 108, - nil, 109, 117, 118, nil, 101, 102, 46, 47, 45, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 234, - nil, nil, 240, nil, nil, 63, 64, nil, nil, 65, - nil, nil, nil, nil, nil, 49, nil, nil, nil, nil, - nil, nil, nil, nil, 22, nil, nil, nil, nil, 99, - 87, 90, 91, nil, 92, 94, 93, 95, nil, nil, - nil, nil, 88, 98, 123, nil, nil, nil, nil, 122, - 67, nil, 89, 103, 104, nil, nil, 43, 44, 79, - 80, 81, 11, 62, nil, nil, nil, 68, 69, nil, - nil, nil, 72, nil, 70, 71, 73, 32, 33, 77, - 78, nil, nil, nil, nil, nil, 82, 30, 29, 111, - 110, 112, 113, nil, nil, 21, nil, nil, nil, nil, - nil, 10, 50, 9, 12, 115, 114, 116, 105, 61, - 107, 106, 108, nil, 109, 117, 118, nil, 101, 102, - 46, 47, 45, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 42, nil, nil, 35, nil, nil, 63, 64, - nil, nil, 65, nil, 37, nil, nil, nil, 49, nil, - nil, nil, nil, nil, nil, nil, nil, 22, nil, nil, - nil, nil, 99, 87, 90, 91, nil, 92, 94, 93, - 95, nil, nil, nil, nil, 88, 98, nil, nil, nil, - nil, nil, 403, 67, nil, 89, 103, 104, nil, nil, - 43, 44, 79, 80, 81, nil, 62, nil, nil, nil, - 68, 69, nil, nil, nil, 72, nil, 70, 71, 73, - 32, 33, 77, 78, nil, nil, nil, nil, nil, 82, - 30, 29, 111, 110, 112, 113, nil, nil, 21, nil, - nil, nil, nil, nil, nil, 50, nil, nil, 115, 114, - 116, 105, 61, 107, 106, 108, nil, 109, 117, 118, - nil, 101, 102, 46, 47, 45, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 234, nil, nil, 240, nil, - nil, 63, 64, nil, nil, 65, nil, nil, nil, nil, - nil, 49, nil, nil, nil, nil, nil, nil, nil, nil, - 22, nil, nil, nil, nil, 99, 87, 90, 91, nil, - 92, 94, 93, 95, nil, nil, nil, nil, 88, 98, - nil, nil, nil, 79, 80, 81, 67, 62, 89, 103, - 104, 68, 69, 43, 44, nil, 72, nil, 70, 71, - 73, 32, 33, 77, 78, nil, nil, nil, nil, nil, - 82, 30, 29, 111, 110, 112, 113, nil, nil, 21, - nil, nil, nil, nil, nil, nil, 50, nil, nil, 115, - 114, 116, 105, 61, 107, 106, 108, nil, 109, 117, - 118, nil, 101, 102, 46, 47, 45, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 234, nil, nil, 240, - nil, nil, 63, 64, nil, nil, 65, nil, nil, nil, - nil, nil, 49, nil, nil, nil, nil, nil, nil, nil, - nil, 22, nil, nil, nil, nil, 99, 87, 90, 91, - nil, 92, 94, 93, 95, nil, nil, nil, nil, 88, - 98, nil, nil, nil, 79, 80, 81, 67, 62, 89, - 103, 104, 68, 69, 43, 44, nil, 72, nil, 70, - 71, 73, 32, 33, 77, 78, nil, nil, nil, nil, - nil, 82, 30, 29, 111, 110, 112, 113, nil, nil, - 21, nil, nil, nil, nil, nil, nil, 50, nil, nil, - 115, 114, 116, 105, 61, 107, 106, 108, nil, 109, - 117, 118, nil, 101, 102, 46, 47, 45, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 234, nil, nil, - 240, nil, nil, 63, 64, nil, nil, 65, nil, nil, - nil, nil, nil, 49, nil, nil, nil, nil, nil, nil, - nil, nil, 22, nil, nil, nil, nil, 99, 87, 90, - 91, nil, 92, 94, 93, 95, nil, nil, nil, nil, - 88, 98, nil, nil, nil, 79, 80, 81, 67, 62, - 89, 103, 104, 68, 69, 43, 44, nil, 72, nil, - 70, 71, 73, 32, 33, 77, 78, nil, nil, nil, - nil, nil, 82, 30, 29, 111, 110, 112, 113, nil, - nil, 21, nil, nil, nil, nil, nil, nil, 50, nil, - nil, 115, 114, 116, 105, 61, 107, 106, 108, nil, - 109, 117, 118, nil, 101, 102, 46, 47, 45, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 234, nil, - nil, 240, nil, nil, 63, 64, nil, nil, 65, nil, - nil, nil, nil, nil, 49, nil, nil, nil, nil, nil, - nil, nil, nil, 22, nil, nil, nil, nil, 99, 87, - 90, 91, nil, 92, 94, 93, 95, nil, nil, nil, - nil, 88, 98, nil, nil, nil, nil, nil, nil, 67, - nil, 89, 103, 104, nil, nil, 43, 44, 79, 80, - 81, 11, 62, nil, nil, nil, 68, 69, nil, nil, - nil, 72, nil, 70, 71, 73, 32, 33, 77, 78, - nil, nil, nil, nil, nil, 82, 30, 29, 111, 110, - 112, 113, nil, nil, 21, nil, nil, nil, nil, nil, - 10, 50, nil, 12, 115, 114, 116, 105, 61, 107, - 106, 108, nil, 109, 117, 118, nil, 101, 102, 46, - 47, 45, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 42, nil, nil, 35, nil, nil, 63, 64, nil, - nil, 65, nil, 37, nil, nil, nil, 49, nil, nil, - nil, nil, nil, nil, nil, nil, 22, nil, nil, nil, - nil, 99, 87, 90, 91, nil, 92, 94, 93, 95, - nil, nil, nil, nil, 88, 98, nil, nil, nil, 79, - 80, 81, 67, 62, 89, 103, 104, 68, 69, 43, - 44, nil, 72, nil, 70, 71, 73, 32, 33, 77, - 78, nil, nil, nil, nil, nil, 82, 30, 29, 111, - 110, 112, 113, nil, nil, 241, nil, nil, nil, nil, - nil, nil, 50, nil, nil, 115, 114, 116, 105, 61, - 107, 106, 108, nil, 109, 117, 118, nil, 101, 102, - 46, 47, 45, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 234, nil, nil, 240, nil, nil, 63, 64, - nil, nil, 65, nil, 419, nil, nil, nil, 49, nil, - nil, nil, nil, nil, nil, nil, nil, 239, nil, nil, - nil, nil, 99, 87, 90, 91, nil, 92, 94, 93, - 95, nil, nil, nil, nil, 88, 98, nil, nil, nil, - 79, 80, 81, 67, 62, 89, 103, 104, 68, 69, - 43, 44, nil, 72, nil, 70, 71, 73, 32, 33, - 77, 78, nil, nil, nil, nil, nil, 82, 30, 29, - 111, 110, 112, 113, nil, nil, 241, nil, nil, nil, - nil, nil, nil, 50, nil, nil, 115, 114, 116, 105, - 61, 107, 106, 108, nil, 109, 117, 118, nil, 101, - 102, 46, 47, 45, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 234, nil, nil, 240, nil, nil, 63, - 64, nil, nil, 65, nil, 419, nil, nil, nil, 49, - nil, nil, nil, nil, nil, nil, nil, nil, 239, nil, - nil, nil, nil, 99, 87, 90, 91, nil, 92, 94, - 93, 95, nil, nil, nil, nil, 88, 98, nil, nil, - nil, 79, 80, 81, 67, 62, 89, 103, 104, 68, - 69, 43, 44, nil, 72, nil, 70, 71, 73, 32, - 33, 77, 78, nil, nil, nil, nil, nil, 82, 30, - 29, 111, 110, 112, 113, nil, nil, 21, nil, nil, - nil, nil, nil, nil, 50, nil, nil, 115, 114, 116, - 105, 61, 107, 106, 108, nil, 109, 117, 118, nil, - 101, 102, 46, 47, 45, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 234, nil, nil, 240, nil, nil, - 63, 64, nil, nil, 65, nil, nil, nil, nil, nil, - 49, nil, nil, nil, nil, nil, nil, nil, nil, 22, - nil, nil, nil, nil, 99, 87, 90, 91, nil, 92, - 94, 93, 95, nil, nil, nil, nil, 88, 98, nil, - nil, nil, 79, 80, 81, 67, 62, 89, 103, 104, - 68, 69, 43, 44, nil, 72, nil, 70, 71, 73, - 32, 33, 77, 78, nil, nil, nil, nil, nil, 82, - 30, 29, 111, 110, 112, 113, nil, nil, 21, nil, - nil, nil, nil, nil, nil, 50, nil, nil, 115, 114, - 116, 105, 61, 107, 106, 108, nil, 109, 117, 118, - nil, 101, 102, 46, 47, 45, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 234, nil, nil, 240, nil, - nil, 63, 64, nil, nil, 65, nil, nil, nil, nil, - nil, 49, nil, nil, nil, nil, nil, nil, nil, nil, - 22, nil, nil, nil, nil, 99, 87, 90, 91, nil, - 92, 94, 93, 95, nil, nil, nil, nil, 88, 98, - nil, nil, nil, 79, 80, 81, 67, 62, 89, 103, - 104, 68, 69, 43, 44, nil, 72, nil, 70, 71, - 73, 32, 33, 77, 78, nil, nil, nil, nil, nil, - 82, 30, 29, 111, 110, 112, 113, nil, nil, 241, - nil, nil, nil, nil, nil, nil, 50, nil, nil, 115, - 114, 116, 105, 61, 107, 106, 108, nil, 109, 117, - 118, nil, 101, 102, 46, 47, 45, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 234, nil, nil, 240, - nil, nil, 63, 64, nil, nil, 65, nil, nil, nil, - nil, nil, 49, nil, nil, nil, nil, nil, nil, nil, - nil, 239, nil, nil, nil, nil, 99, 87, 90, 91, - nil, 92, 94, 93, 95, nil, nil, nil, nil, 88, - 98, nil, nil, nil, 79, 80, 81, 67, 62, 89, - 103, 104, 68, 69, 43, 44, nil, 72, nil, 70, - 71, 73, 32, 33, 77, 78, nil, nil, nil, nil, - nil, 82, 30, 29, 111, 110, 112, 113, nil, nil, - 241, nil, nil, nil, nil, nil, nil, 50, nil, nil, - 115, 114, 116, 105, 61, 107, 106, 108, 297, 109, - 117, 118, nil, 101, 102, 46, 47, 45, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 234, nil, nil, - 240, nil, nil, 63, 64, nil, nil, 65, nil, 294, - nil, 292, nil, 49, nil, nil, 298, nil, nil, nil, - nil, nil, 239, nil, nil, nil, nil, 99, 295, 90, - 91, nil, 92, 94, 93, 95, nil, nil, nil, nil, - 88, 98, nil, nil, nil, 79, 80, 81, 67, 62, - 89, 103, 104, 68, 69, 43, 44, nil, 72, nil, - 70, 71, 73, 32, 33, 77, 78, nil, nil, nil, - nil, nil, 82, 30, 29, 111, 110, 112, 113, nil, - nil, 241, nil, nil, nil, nil, nil, nil, 50, nil, - nil, 115, 114, 116, 105, 61, 107, 106, 108, nil, - 109, 117, 118, nil, 101, 102, 46, 47, 45, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 234, nil, - nil, 240, nil, nil, 63, 64, nil, nil, 65, nil, - nil, nil, nil, nil, 49, nil, nil, nil, nil, nil, - nil, nil, nil, 239, nil, nil, nil, nil, 99, 87, - 90, 91, nil, 92, 94, 93, 95, nil, nil, nil, - nil, 88, 98, nil, nil, nil, 79, 80, 81, 67, - 62, 89, 103, 104, 68, 69, 43, 44, nil, 72, - nil, 70, 71, 73, 32, 33, 77, 78, nil, nil, - nil, nil, nil, 82, 30, 29, 111, 110, 112, 113, - nil, nil, 21, nil, nil, nil, nil, nil, nil, 50, - nil, nil, 115, 114, 116, 105, 61, 107, 106, 108, - nil, 109, 117, 118, nil, 101, 102, 46, 47, 45, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 234, - nil, nil, 240, nil, nil, 63, 64, nil, nil, 65, - nil, nil, nil, nil, nil, 49, nil, nil, nil, nil, - nil, nil, nil, nil, 22, nil, nil, nil, nil, 99, - 87, 90, 91, nil, 92, 94, 93, 95, nil, nil, - nil, nil, 88, 98, nil, nil, nil, 79, 80, 81, - 67, 62, 89, 103, 104, 68, 69, 43, 44, nil, - 72, nil, 70, 71, 73, 32, 33, 77, 78, nil, - nil, nil, nil, nil, 82, 30, 29, 111, 110, 112, - 113, nil, nil, 21, nil, nil, nil, nil, nil, nil, - 50, nil, nil, 115, 114, 116, 105, 61, 107, 106, - 108, nil, 109, 117, 118, nil, 101, 102, 46, 47, - 45, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 234, nil, nil, 240, nil, nil, 63, 64, nil, nil, - 65, nil, nil, nil, nil, nil, 49, nil, nil, nil, - nil, nil, nil, nil, nil, 22, nil, nil, nil, nil, - 99, 87, 90, 91, nil, 92, 94, 93, 95, nil, - nil, nil, nil, 88, 98, 229, nil, nil, 79, 80, - 81, 67, 62, 89, 103, 104, 68, 69, 43, 44, - nil, 72, nil, 70, 71, 73, 322, 323, 77, 78, - nil, nil, nil, nil, nil, 82, 319, 325, 111, 110, - 112, 113, nil, nil, 241, nil, nil, nil, nil, nil, - nil, 50, nil, nil, 115, 114, 116, 105, 61, 107, - 106, 108, nil, 109, 117, 118, nil, 101, 102, 46, - 47, 45, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 234, nil, nil, 240, nil, nil, 63, 64, nil, - nil, 65, nil, nil, nil, nil, nil, 49, nil, nil, - nil, nil, nil, nil, nil, nil, 239, nil, nil, nil, - nil, 99, 87, 90, 91, nil, 92, 94, 93, 95, - nil, nil, nil, nil, 88, 98, nil, nil, nil, 79, - 80, 81, 67, 62, 89, 103, 104, 68, 69, 43, - 44, nil, 72, nil, 70, 71, 73, 322, 323, 77, - 78, nil, nil, nil, nil, nil, 82, 319, 325, 111, - 110, 112, 113, nil, nil, 241, nil, nil, nil, nil, - nil, nil, 50, nil, nil, 115, 114, 116, 105, 61, - 107, 106, 108, nil, 109, 117, 118, nil, 101, 102, - 46, 47, 45, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 234, nil, nil, 240, nil, nil, 63, 64, - nil, nil, 65, nil, nil, nil, nil, nil, 49, nil, - nil, nil, nil, nil, nil, nil, nil, 239, nil, nil, - nil, nil, 99, 87, 90, 91, nil, 92, 94, 93, - 95, nil, nil, nil, nil, 88, 98, nil, nil, nil, - 79, 80, 81, 67, 62, 89, 103, 104, 68, 69, - 43, 44, nil, 72, nil, 70, 71, 73, 322, 323, - 77, 78, nil, nil, nil, nil, nil, 82, 319, 325, - 111, 110, 112, 113, nil, nil, 241, nil, nil, nil, - nil, nil, nil, 50, nil, nil, 115, 114, 116, 105, - 61, 107, 106, 108, nil, 109, 117, 118, nil, 101, - 102, 46, 47, 45, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 234, nil, nil, 240, nil, nil, 63, - 64, nil, nil, 65, nil, nil, nil, nil, nil, 49, - nil, nil, nil, nil, nil, nil, nil, nil, 239, nil, - nil, nil, nil, 99, 87, 90, 91, nil, 92, 94, - 93, 95, nil, nil, nil, nil, 88, 98, nil, nil, - nil, 79, 80, 81, 67, 62, 89, 103, 104, 68, - 69, 43, 44, nil, 72, nil, 70, 71, 73, 322, - 323, 77, 78, nil, nil, nil, nil, nil, 82, 319, - 325, 111, 110, 112, 113, nil, nil, 241, nil, nil, - nil, nil, nil, nil, 50, nil, nil, 115, 114, 116, - 105, 61, 107, 106, 108, nil, 109, 117, 118, nil, - 101, 102, 46, 47, 45, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 234, nil, nil, 240, nil, nil, - 63, 64, nil, nil, 65, nil, nil, nil, nil, nil, - 49, nil, nil, nil, nil, nil, nil, nil, nil, 239, - nil, nil, nil, nil, 99, 87, 90, 91, nil, 92, - 94, 93, 95, nil, nil, nil, nil, 88, 98, nil, - nil, nil, 79, 80, 81, 67, 62, 89, 103, 104, - 68, 69, 43, 44, nil, 72, nil, 70, 71, 73, - 322, 323, 77, 78, nil, nil, nil, nil, nil, 82, - 319, 325, 111, 110, 112, 113, nil, nil, 241, nil, - nil, nil, nil, nil, nil, 50, nil, nil, 115, 114, - 116, 105, 61, 107, 106, 108, nil, 109, 117, 118, - nil, 101, 102, 46, 47, 45, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 234, nil, nil, 240, nil, - nil, 63, 64, nil, nil, 65, nil, nil, nil, nil, - nil, 49, nil, nil, nil, nil, nil, nil, nil, nil, - 239, nil, nil, nil, nil, 99, 87, 90, 91, nil, - 92, 94, 93, 95, nil, nil, nil, nil, 88, 98, - nil, nil, nil, 79, 80, 81, 67, 62, 89, 103, - 104, 68, 69, 43, 44, nil, 72, nil, 70, 71, - 73, 322, 323, 77, 78, nil, nil, nil, nil, nil, - 82, 319, 325, 111, 110, 112, 113, nil, nil, 241, - nil, nil, nil, nil, nil, nil, 50, nil, nil, 115, - 114, 116, 105, 61, 107, 106, 108, nil, 109, 117, - 118, nil, 101, 102, 46, 47, 45, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 234, nil, nil, 240, - nil, nil, 63, 64, nil, nil, 65, nil, nil, nil, - nil, nil, 49, nil, nil, nil, nil, nil, nil, nil, - nil, 239, nil, nil, nil, nil, 99, 87, 90, 91, - nil, 92, 94, 93, 95, nil, nil, nil, nil, 88, - 98, nil, nil, nil, 79, 80, 81, 67, 62, 89, - 103, 104, 68, 69, 43, 44, nil, 72, nil, 70, - 71, 73, 322, 323, 77, 78, nil, nil, nil, nil, - nil, 82, 319, 325, 111, 110, 112, 113, nil, nil, - 241, nil, nil, nil, nil, nil, nil, 50, nil, nil, - 115, 114, 116, 105, 61, 107, 106, 108, nil, 109, - 117, 118, nil, 101, 102, 46, 47, 45, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 234, nil, nil, - 240, nil, nil, 63, 64, nil, nil, 65, nil, nil, - nil, nil, nil, 49, nil, nil, nil, nil, nil, nil, - nil, nil, 239, nil, nil, nil, nil, 99, 87, 90, - 91, nil, 92, 94, 93, 95, nil, nil, nil, nil, - 88, 98, nil, nil, nil, 79, 80, 81, 67, 62, - 89, 103, 104, 68, 69, 43, 44, nil, 72, nil, - 70, 71, 73, 322, 323, 77, 78, nil, nil, nil, - nil, nil, 82, 319, 325, 111, 110, 112, 113, nil, - nil, 241, nil, nil, nil, nil, nil, nil, 50, nil, - nil, 115, 114, 116, 105, 61, 107, 106, 108, nil, - 109, 117, 118, nil, 101, 102, 46, 47, 45, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 234, nil, - nil, 240, nil, nil, 63, 64, nil, nil, 65, nil, - nil, nil, nil, nil, 49, nil, nil, nil, nil, nil, - nil, nil, nil, 239, nil, nil, nil, nil, 99, 87, - 90, 91, nil, 92, 94, 93, 95, nil, nil, nil, - nil, 88, 98, nil, nil, nil, 79, 80, 81, 67, - 62, 89, 103, 104, 68, 69, 43, 44, nil, 72, - nil, 70, 71, 73, 322, 323, 77, 78, nil, nil, - nil, nil, nil, 82, 319, 325, 111, 110, 112, 113, - nil, nil, 241, nil, nil, nil, nil, nil, nil, 50, - nil, nil, 115, 114, 116, 105, 61, 107, 106, 108, - nil, 109, 117, 118, nil, 101, 102, 46, 47, 45, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 234, - nil, nil, 240, nil, nil, 63, 64, nil, nil, 65, - nil, nil, nil, nil, nil, 49, nil, nil, nil, nil, - nil, nil, nil, nil, 239, nil, nil, nil, nil, 99, - 87, 90, 91, nil, 92, 94, 93, 95, nil, nil, - nil, nil, 88, 98, nil, nil, nil, 79, 80, 81, - 67, 62, 89, 103, 104, 68, 69, 43, 44, nil, - 72, nil, 70, 71, 73, 322, 323, 77, 78, nil, - nil, nil, nil, nil, 82, 319, 325, 111, 110, 112, - 113, nil, nil, 241, nil, nil, nil, nil, nil, nil, - 50, nil, nil, 115, 114, 116, 105, 61, 107, 106, - 108, nil, 109, 117, 118, nil, 101, 102, 46, 47, - 45, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 234, nil, nil, 240, nil, nil, 63, 64, nil, nil, - 65, nil, nil, nil, nil, nil, 49, nil, nil, nil, - nil, nil, nil, nil, nil, 239, nil, nil, nil, nil, - 99, 87, 90, 91, nil, 92, 94, 93, 95, nil, - nil, nil, nil, 88, 98, nil, nil, nil, 79, 80, - 81, 67, 62, 89, 103, 104, 68, 69, 43, 44, - nil, 72, nil, 70, 71, 73, 322, 323, 77, 78, - nil, nil, nil, nil, nil, 82, 319, 325, 111, 110, - 112, 113, nil, nil, 241, nil, nil, nil, nil, nil, - nil, 50, nil, nil, 115, 114, 116, 105, 61, 107, - 106, 108, nil, 109, 117, 118, nil, 101, 102, 46, - 47, 45, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 234, nil, nil, 240, nil, nil, 63, 64, nil, - nil, 65, nil, nil, nil, nil, nil, 49, nil, nil, - nil, nil, nil, nil, nil, nil, 239, nil, nil, nil, - nil, 99, 87, 90, 91, nil, 92, 94, 93, 95, - nil, nil, nil, nil, 88, 98, nil, nil, nil, 79, - 80, 81, 67, 62, 89, 103, 104, 68, 69, 43, - 44, nil, 72, nil, 70, 71, 73, 322, 323, 77, - 78, nil, nil, nil, nil, nil, 82, 319, 325, 111, - 110, 112, 113, nil, nil, 241, nil, nil, nil, nil, - nil, nil, 50, nil, nil, 115, 114, 116, 105, 61, - 107, 106, 108, nil, 109, 117, 118, nil, 101, 102, - 46, 47, 45, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 234, nil, nil, 240, nil, nil, 63, 64, - nil, nil, 65, nil, nil, nil, nil, nil, 49, nil, - nil, nil, nil, nil, nil, nil, nil, 239, nil, nil, - nil, nil, 99, 87, 90, 91, nil, 92, 94, 93, - 95, nil, nil, nil, nil, 88, 98, nil, nil, nil, - 79, 80, 81, 67, 62, 89, 103, 104, 68, 69, - 43, 44, nil, 72, nil, 70, 71, 73, 322, 323, - 77, 78, nil, nil, nil, nil, nil, 82, 319, 325, - 111, 110, 112, 113, nil, nil, 241, nil, nil, nil, - nil, nil, nil, 50, nil, nil, 115, 114, 116, 105, - 61, 107, 106, 108, nil, 109, 117, 118, nil, 101, - 102, 46, 47, 45, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 234, nil, nil, 240, nil, nil, 63, - 64, nil, nil, 65, nil, nil, nil, nil, nil, 49, - nil, nil, nil, nil, nil, nil, nil, nil, 239, nil, - nil, nil, nil, 99, 87, 90, 91, nil, 92, 94, - 93, 95, nil, nil, nil, nil, 88, 98, nil, nil, - nil, 79, 80, 81, 67, 62, 89, 103, 104, 68, - 69, 43, 44, nil, 72, nil, 70, 71, 73, 322, - 323, 77, 78, nil, nil, nil, nil, nil, 82, 319, - 325, 111, 110, 112, 113, nil, nil, 241, nil, nil, - nil, nil, nil, nil, 50, nil, nil, 115, 114, 116, - 105, 61, 107, 106, 108, nil, 109, 117, 118, nil, - 101, 102, 46, 47, 45, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 234, nil, nil, 240, nil, nil, - 63, 64, nil, nil, 65, nil, nil, nil, nil, nil, - 49, nil, nil, nil, nil, nil, nil, nil, nil, 239, - nil, nil, nil, nil, 99, 87, 90, 91, nil, 92, - 94, 93, 95, nil, nil, nil, nil, 88, 98, nil, - nil, nil, 79, 80, 81, 67, 62, 89, 103, 104, - 68, 69, 43, 44, nil, 72, nil, 70, 71, 73, - 322, 323, 77, 78, nil, nil, nil, nil, nil, 82, - 319, 325, 111, 110, 112, 113, nil, nil, 241, nil, - nil, nil, nil, nil, nil, 50, nil, nil, 115, 114, - 116, 105, 61, 107, 106, 108, nil, 109, 117, 118, - nil, 101, 102, 46, 47, 45, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 234, nil, nil, 240, nil, - nil, 63, 64, nil, nil, 65, nil, nil, nil, nil, - nil, 49, nil, nil, nil, nil, nil, nil, nil, nil, - 239, nil, nil, nil, nil, 99, 87, 90, 91, nil, - 92, 94, 93, 95, nil, nil, nil, nil, 88, 98, - nil, nil, nil, 79, 80, 81, 67, 62, 89, 103, - 104, 68, 69, 43, 44, nil, 72, nil, 70, 71, - 73, 322, 323, 77, 78, nil, nil, nil, nil, nil, - 82, 319, 325, 111, 110, 112, 113, nil, nil, 241, - nil, nil, nil, nil, nil, nil, 50, nil, nil, 115, - 114, 116, 105, 61, 107, 106, 108, nil, 109, 117, - 118, nil, 101, 102, 46, 47, 45, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 234, nil, nil, 240, - nil, nil, 63, 64, nil, nil, 65, nil, nil, nil, - nil, nil, 49, nil, nil, nil, nil, nil, nil, nil, - nil, 239, nil, nil, nil, nil, 99, 87, 90, 91, - nil, 92, 94, 93, 95, nil, nil, nil, nil, 88, - 98, nil, nil, nil, 79, 80, 81, 67, 62, 89, - 103, 104, 68, 69, 43, 44, nil, 72, nil, 70, - 71, 73, 322, 323, 77, 78, nil, nil, nil, nil, - nil, 82, 319, 325, 111, 110, 112, 113, nil, nil, - 241, nil, nil, nil, nil, nil, nil, 50, nil, nil, - 115, 114, 116, 105, 61, 107, 106, 108, nil, 109, - 117, 118, nil, 101, 102, 46, 47, 45, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 234, nil, nil, - 240, nil, nil, 63, 64, nil, nil, 65, nil, nil, - nil, nil, nil, 49, nil, nil, nil, nil, nil, nil, - nil, nil, 239, nil, nil, nil, nil, 99, 87, 90, - 91, nil, 92, 94, 93, 95, nil, nil, nil, nil, - 88, 98, nil, nil, nil, 79, 80, 81, 67, 62, - 89, 103, 104, 68, 69, 43, 44, nil, 72, nil, - 70, 71, 73, 322, 323, 77, 78, nil, nil, nil, - nil, nil, 82, 319, 325, 111, 110, 112, 113, nil, - nil, 241, nil, nil, nil, nil, nil, nil, 50, nil, - nil, 115, 114, 116, 105, 61, 107, 106, 108, nil, - 109, 117, 118, nil, 101, 102, 46, 47, 45, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 234, nil, - nil, 240, nil, nil, 63, 64, nil, nil, 65, nil, - nil, nil, nil, nil, 49, nil, nil, nil, nil, nil, - nil, nil, nil, 239, nil, nil, nil, nil, 99, 87, - 90, 91, nil, 92, 94, 93, 95, nil, nil, nil, - nil, 88, 98, nil, nil, nil, 79, 80, 81, 67, - 62, 89, 103, 104, 68, 69, 43, 44, nil, 72, - nil, 70, 71, 73, 322, 323, 77, 78, nil, nil, - nil, nil, nil, 82, 319, 325, 111, 110, 112, 113, - nil, nil, 241, nil, nil, nil, nil, nil, nil, 50, - nil, nil, 115, 114, 116, 105, 61, 107, 106, 108, - nil, 109, 117, 118, nil, 101, 102, 46, 47, 45, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 234, - nil, nil, 240, nil, nil, 63, 64, nil, nil, 65, - nil, nil, nil, nil, nil, 49, nil, nil, nil, nil, - nil, nil, nil, nil, 239, nil, nil, nil, nil, 99, - 87, 90, 91, nil, 92, 94, 93, 95, nil, nil, - nil, nil, 88, 98, nil, nil, nil, 79, 80, 81, - 67, 62, 89, 103, 104, 68, 69, 43, 44, nil, - 72, nil, 70, 71, 73, 322, 323, 77, 78, nil, - nil, nil, nil, nil, 82, 319, 325, 111, 110, 112, - 113, nil, nil, 241, nil, nil, nil, nil, nil, nil, - 50, nil, nil, 115, 114, 116, 105, 61, 107, 106, - 108, nil, 109, 117, 118, nil, 101, 102, 46, 47, - 45, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 234, nil, nil, 240, nil, nil, 63, 64, nil, nil, - 65, nil, nil, nil, nil, nil, 49, nil, nil, nil, - nil, nil, nil, nil, nil, 239, nil, nil, nil, nil, - 99, 87, 90, 91, nil, 92, 94, 93, 95, nil, - nil, nil, nil, 88, 98, nil, nil, nil, 79, 80, - 81, 67, 62, 89, 103, 104, 68, 69, 43, 44, - nil, 72, nil, 70, 71, 73, 322, 323, 77, 78, - nil, nil, nil, nil, nil, 82, 319, 325, 111, 110, - 112, 113, nil, nil, 241, nil, nil, nil, nil, nil, - nil, 50, nil, nil, 115, 114, 116, 105, 61, 107, - 106, 108, nil, 109, 117, 118, nil, 101, 102, 46, - 47, 45, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 234, nil, nil, 240, nil, nil, 63, 64, nil, - nil, 65, nil, nil, nil, nil, nil, 49, nil, nil, - nil, nil, nil, nil, nil, nil, 239, nil, nil, nil, - nil, 99, 87, 90, 91, nil, 92, 94, 93, 95, - nil, nil, nil, nil, 88, 98, nil, nil, nil, 79, - 80, 81, 67, 62, 89, 103, 104, 68, 69, 43, - 44, nil, 72, nil, 70, 71, 73, 322, 323, 77, - 78, nil, nil, nil, nil, nil, 82, 319, 325, 111, - 110, 112, 113, nil, nil, 241, nil, nil, nil, nil, - nil, nil, 50, nil, nil, 115, 114, 116, 105, 61, - 107, 106, 108, nil, 109, 117, 118, nil, 101, 102, - 46, 47, 45, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 234, nil, nil, 240, nil, nil, 63, 64, - nil, nil, 65, nil, nil, nil, nil, nil, 49, nil, - nil, nil, nil, nil, nil, nil, nil, 239, nil, nil, - nil, nil, 99, 87, 90, 91, nil, 92, 94, 93, - 95, nil, nil, nil, nil, 88, 98, nil, nil, nil, - 79, 80, 81, 67, 62, 89, 103, 104, 68, 69, - 43, 44, nil, 72, nil, 70, 71, 73, 322, 323, - 77, 78, nil, nil, nil, nil, nil, 82, 319, 325, - 111, 110, 112, 113, nil, nil, 241, nil, nil, nil, - nil, nil, nil, 50, nil, nil, 115, 114, 116, 105, - 61, 107, 106, 108, nil, 109, 117, 118, nil, 101, - 102, 46, 47, 45, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 234, nil, nil, 240, nil, nil, 63, - 64, nil, nil, 65, nil, nil, nil, nil, nil, 49, - nil, nil, nil, nil, nil, nil, nil, nil, 239, nil, - nil, nil, nil, 99, 87, 90, 91, nil, 92, 94, - 93, 95, nil, nil, nil, nil, 88, 98, nil, nil, - nil, 79, 80, 81, 67, 62, 89, 103, 104, 68, - 69, 43, 44, nil, 72, nil, 70, 71, 73, 322, - 323, 77, 78, nil, nil, nil, nil, nil, 82, 319, - 325, 111, 110, 112, 113, nil, nil, 241, nil, nil, - nil, nil, nil, nil, 50, nil, nil, 115, 114, 116, - 105, 61, 107, 106, 108, nil, 109, 117, 118, nil, - 101, 102, 46, 47, 45, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 234, nil, nil, 240, nil, nil, - 63, 64, nil, nil, 65, nil, nil, nil, nil, nil, - 49, nil, nil, nil, nil, nil, nil, nil, nil, 239, - nil, nil, nil, nil, 99, 87, 90, 91, nil, 92, - 94, 93, 95, nil, nil, nil, nil, 88, 98, nil, - nil, nil, 79, 80, 81, 67, 62, 89, 103, 104, - 68, 69, 43, 44, nil, 72, nil, 70, 71, 73, - 32, 33, 77, 78, nil, nil, nil, nil, nil, 82, - 30, 29, 111, 110, 112, 113, nil, nil, 241, nil, - nil, nil, nil, nil, nil, 50, nil, nil, 115, 114, - 116, 105, 61, 107, 106, 108, 297, 109, 117, 118, - nil, 101, 102, 46, 47, 45, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 234, nil, nil, 240, nil, - nil, 63, 64, nil, nil, 65, nil, 294, nil, 292, - nil, 49, nil, nil, 298, nil, nil, nil, nil, nil, - 239, nil, nil, nil, nil, 99, 295, 90, 91, nil, - 92, 94, 93, 95, nil, nil, nil, nil, 88, 98, - nil, nil, nil, 79, 80, 81, 67, 62, 89, 103, - 104, 68, 69, 43, 497, nil, 72, nil, 70, 71, - 73, 32, 33, 77, 78, nil, nil, nil, nil, nil, - 82, 30, 29, 111, 110, 112, 113, nil, nil, 241, - nil, nil, nil, nil, nil, nil, 50, nil, nil, 115, - 114, 116, 105, 61, 107, 106, 108, 297, 109, 117, - 118, nil, 101, 102, 46, 47, 45, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 234, nil, nil, 240, - nil, nil, 63, 64, nil, nil, 65, nil, 294, nil, - 292, nil, 49, nil, nil, 298, nil, nil, nil, nil, - nil, 239, nil, nil, nil, nil, 99, 295, 90, 91, - nil, 92, 94, 93, 95, nil, nil, nil, nil, 88, - 98, nil, nil, nil, 79, 80, 81, 67, 62, 89, - 103, 104, 68, 69, 43, 44, nil, 72, nil, 70, - 71, 73, 32, 33, 77, 78, nil, nil, nil, nil, - nil, 82, 30, 29, 111, 110, 112, 113, nil, nil, - 241, nil, nil, nil, nil, nil, nil, 50, nil, nil, - 115, 114, 116, 105, 61, 107, 106, 108, 297, 109, - 117, 118, nil, 101, 102, 46, 47, 45, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 234, nil, nil, - 240, nil, nil, 63, 64, nil, nil, 65, nil, 294, - nil, 292, nil, 49, nil, nil, 298, nil, nil, nil, - nil, nil, 239, nil, nil, nil, nil, 99, 295, 90, - 91, nil, 92, 94, 93, 95, nil, nil, nil, nil, - 88, 98, 229, nil, nil, 79, 80, 81, 67, 62, - 89, 103, 104, 68, 69, 43, 44, nil, 72, nil, - 70, 71, 73, 322, 323, 77, 78, nil, nil, nil, - nil, nil, 82, 319, 325, 111, 110, 112, 113, nil, - nil, 241, nil, nil, nil, nil, nil, nil, 50, nil, - nil, 115, 114, 116, 105, 61, 107, 106, 108, nil, - 109, 117, 118, nil, 101, 102, 46, 47, 45, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 234, nil, - nil, 240, nil, nil, 63, 64, nil, nil, 65, nil, - nil, nil, nil, nil, 49, nil, nil, nil, nil, nil, - nil, nil, nil, 239, nil, nil, nil, nil, 99, 87, - 90, 91, nil, 92, 94, 93, 95, nil, nil, nil, - nil, 88, 98, nil, nil, nil, 79, 80, 81, 67, - 62, 89, 103, 104, 68, 69, 43, 44, nil, 72, - nil, 70, 71, 73, 322, 323, 77, 78, nil, nil, - nil, nil, nil, 82, 319, 325, 111, 110, 112, 113, - nil, nil, 241, nil, nil, nil, nil, nil, nil, 50, - nil, nil, 115, 114, 116, 105, 61, 107, 106, 108, - nil, 109, 117, 118, nil, 101, 102, 46, 47, 45, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 234, - nil, nil, 240, nil, nil, 63, 64, nil, nil, 65, - nil, nil, nil, nil, nil, 49, nil, nil, nil, nil, - nil, nil, nil, nil, 239, nil, nil, nil, nil, 99, - 87, 90, 91, nil, 92, 94, 93, 95, nil, nil, - nil, nil, 88, 98, nil, nil, nil, 79, 80, 81, - 67, 62, 89, 103, 104, 68, 69, 43, 44, nil, - 72, nil, 70, 71, 73, 322, 323, 77, 78, nil, - nil, nil, nil, nil, 82, 319, 325, 111, 110, 112, - 113, nil, nil, 241, nil, nil, nil, nil, nil, nil, - 50, nil, nil, 115, 114, 116, 105, 61, 107, 106, - 108, nil, 109, 117, 118, nil, 101, 102, 46, 47, - 45, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 234, nil, nil, 240, nil, nil, 63, 64, nil, nil, - 65, nil, nil, nil, nil, nil, 49, nil, nil, nil, - nil, nil, nil, nil, nil, 239, nil, nil, nil, nil, - 99, 87, 90, 91, nil, 92, 94, 93, 95, nil, - nil, nil, nil, 88, 98, nil, nil, nil, 79, 80, - 81, 67, 62, 89, 103, 104, 68, 69, 43, 44, - nil, 72, nil, 70, 71, 73, 322, 323, 77, 78, - nil, nil, nil, nil, nil, 82, 319, 325, 111, 110, - 112, 113, nil, nil, 241, nil, nil, nil, nil, nil, - nil, 50, nil, nil, 115, 114, 116, 105, 61, 107, - 106, 108, nil, 109, 117, 118, nil, 101, 102, 46, - 47, 45, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 234, nil, nil, 240, nil, nil, 63, 64, nil, - nil, 65, nil, nil, nil, nil, nil, 49, nil, nil, - nil, nil, nil, nil, nil, nil, 239, nil, nil, nil, - nil, 99, 87, 90, 91, nil, 92, 94, 93, 95, - nil, nil, nil, nil, 88, 98, nil, nil, nil, nil, - nil, nil, 67, nil, 89, 103, 104, nil, nil, 43, - 44, 79, 80, 81, 11, 62, nil, nil, nil, 68, - 69, nil, nil, nil, 72, nil, 70, 71, 73, 32, - 33, 77, 78, nil, nil, nil, nil, nil, 82, 30, - 29, 111, 110, 112, 113, nil, nil, 21, nil, nil, - nil, nil, nil, 10, 50, nil, 12, 115, 114, 116, - 105, 61, 107, 106, 108, nil, 109, 117, 118, nil, - 101, 102, 46, 47, 45, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 42, nil, nil, 35, nil, nil, - 63, 64, nil, nil, 65, nil, 37, nil, nil, nil, - 49, nil, nil, nil, nil, nil, nil, nil, nil, 22, - nil, nil, nil, nil, 99, 87, 90, 91, nil, 92, - 94, 93, 95, nil, nil, nil, nil, 88, 98, nil, - nil, nil, 79, 80, 81, 67, 62, 89, 103, 104, - 68, 69, 43, 44, nil, 72, nil, 70, 71, 73, - 322, 323, 77, 78, nil, nil, nil, nil, nil, 82, - 319, 325, 111, 110, 112, 113, nil, nil, 241, nil, - nil, nil, nil, nil, nil, 50, nil, nil, 115, 114, - 116, 105, 61, 107, 106, 108, nil, 109, 117, 118, - nil, 101, 102, 46, 47, 45, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 234, nil, nil, 240, nil, - nil, 63, 64, nil, nil, 65, nil, nil, nil, nil, - nil, 49, nil, nil, nil, nil, nil, nil, nil, nil, - 239, nil, nil, nil, nil, 99, 87, 90, 91, nil, - 92, 94, 93, 95, nil, nil, nil, nil, 88, 98, - nil, nil, nil, 79, 80, 81, 67, 62, 89, 103, - 104, 68, 69, 43, 44, nil, 72, nil, 70, 71, - 73, 322, 323, 77, 78, nil, nil, nil, nil, nil, - 82, 319, 325, 111, 110, 112, 113, nil, nil, 241, - nil, nil, nil, nil, nil, nil, 50, nil, nil, 115, - 114, 116, 105, 61, 107, 106, 108, nil, 109, 117, - 118, nil, 101, 102, 46, 47, 45, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 234, nil, nil, 240, - 542, nil, 63, 64, nil, nil, 65, nil, nil, nil, - nil, nil, 49, nil, nil, nil, nil, nil, nil, nil, - nil, 239, nil, nil, nil, nil, 99, 87, 90, 91, - nil, 92, 94, 93, 95, nil, nil, nil, nil, 88, - 98, nil, nil, nil, 79, 80, 81, 67, 62, 89, - 103, 104, 68, 69, 43, 44, nil, 72, nil, 70, - 71, 73, 32, 33, 77, 78, nil, nil, nil, nil, - nil, 82, 30, 29, 111, 110, 112, 113, nil, nil, - 21, nil, nil, nil, nil, nil, nil, 50, nil, nil, - 115, 114, 116, 105, 61, 107, 106, 108, nil, 109, - 117, 118, nil, 101, 102, 46, 47, 45, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 234, nil, nil, - 240, nil, nil, 63, 64, nil, nil, 65, nil, nil, - nil, nil, nil, 49, nil, nil, nil, nil, nil, nil, - nil, nil, 22, nil, nil, nil, nil, 99, 87, 90, - 91, nil, 92, 94, 93, 95, nil, nil, nil, nil, - 88, 98, nil, nil, nil, 79, 80, 81, 67, 62, - 89, 103, 104, 68, 69, 43, 44, nil, 72, nil, - 70, 71, 73, 32, 33, 77, 78, nil, nil, nil, - nil, nil, 82, 30, 29, 111, 110, 112, 113, nil, - nil, 21, nil, nil, nil, nil, nil, nil, 50, nil, - nil, 115, 114, 116, 105, 61, 107, 106, 108, nil, - 109, 117, 118, nil, 101, 102, 46, 47, 45, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 234, nil, - nil, 240, nil, nil, 63, 64, nil, nil, 65, nil, - nil, nil, nil, nil, 49, nil, nil, nil, nil, nil, - nil, nil, nil, 22, nil, nil, nil, nil, 99, 87, - 90, 91, nil, 92, 94, 93, 95, nil, nil, nil, - nil, 88, 98, nil, nil, nil, 79, 80, 81, 67, - 62, 89, 103, 104, 68, 69, 43, 44, nil, 72, - nil, 70, 71, 73, 32, 33, 77, 78, nil, nil, - nil, nil, nil, 82, 30, 29, 111, 110, 112, 113, - nil, nil, 21, nil, nil, nil, nil, nil, nil, 50, - nil, nil, 115, 114, 116, 105, 61, 107, 106, 108, - nil, 109, 117, 118, nil, 101, 102, 46, 47, 45, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 234, - nil, nil, 240, nil, nil, 63, 64, nil, nil, 65, - nil, nil, nil, nil, nil, 49, nil, nil, nil, nil, - nil, nil, nil, nil, 22, nil, nil, nil, nil, 99, - 87, 90, 91, nil, 92, 94, 93, 95, nil, nil, - nil, nil, 88, 98, nil, nil, nil, 79, 80, 81, - 67, 62, 89, 103, 104, 68, 69, 43, 44, nil, - 72, nil, 70, 71, 73, 322, 323, 77, 78, nil, - nil, nil, nil, nil, 82, 319, 325, 111, 110, 112, - 113, nil, nil, 241, nil, nil, nil, nil, nil, nil, - 50, nil, nil, 115, 114, 116, 105, 61, 107, 106, - 108, nil, 109, 117, 118, nil, 101, 102, 46, 47, - 45, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 234, nil, nil, 240, nil, nil, 63, 64, nil, nil, - 65, nil, nil, nil, nil, nil, 49, nil, nil, nil, - nil, nil, nil, nil, nil, 239, nil, nil, nil, nil, - 99, 87, 90, 91, nil, 92, 94, 93, 95, nil, - nil, nil, nil, 88, 98, nil, nil, nil, nil, nil, - nil, 67, nil, 89, 103, 104, -260, nil, 43, 44, - nil, nil, nil, -260, -260, -260, nil, nil, -260, -260, - -260, nil, -260, nil, nil, nil, nil, nil, nil, nil, - -260, -260, -260, -260, nil, nil, nil, nil, nil, nil, - nil, nil, -260, -260, nil, -260, -260, -260, -260, -260, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, -260, -260, -260, -260, -260, -260, -260, -260, - -260, -260, -260, -260, -260, -260, nil, nil, -260, -260, - -260, nil, nil, -260, nil, 276, -260, nil, nil, -260, - -260, nil, -260, nil, -260, nil, -260, nil, -260, -260, - nil, -260, -260, -260, -260, -260, nil, -260, -260, -260, - 724, nil, 721, 720, 719, 729, 722, nil, nil, nil, - nil, nil, nil, -260, nil, 732, -260, -260, -695, -260, - nil, -260, nil, nil, nil, -695, -695, -695, -260, nil, - -695, -695, -695, nil, -695, nil, nil, 727, nil, nil, - nil, nil, -695, -695, -695, -695, -695, nil, 740, 739, - nil, nil, nil, 733, -695, -695, nil, -695, -695, -695, - -695, -695, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, -695, -695, -695, -695, -695, -695, - -695, -695, -695, -695, -695, -695, -695, -695, nil, nil, - -695, -695, -695, nil, nil, -695, nil, nil, -695, nil, - nil, -695, -695, nil, -695, nil, -695, nil, -695, nil, - -695, -695, nil, -695, -695, -695, -695, -695, nil, -695, - -695, -695, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, -695, nil, nil, -695, -695, - -695, -695, nil, -695, -696, -695, nil, nil, nil, nil, - -695, -696, -696, -696, nil, nil, -696, -696, -696, nil, - -696, nil, nil, nil, nil, nil, nil, nil, -696, -696, - -696, -696, -696, nil, nil, nil, nil, nil, nil, nil, - -696, -696, nil, -696, -696, -696, -696, -696, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - -696, -696, -696, -696, -696, -696, -696, -696, -696, -696, - -696, -696, -696, -696, nil, nil, -696, -696, -696, nil, - nil, -696, nil, nil, -696, nil, nil, -696, -696, nil, - -696, nil, -696, nil, -696, nil, -696, -696, nil, -696, - -696, -696, -696, -696, nil, -696, -696, -696, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, -696, nil, nil, -696, -696, -696, -696, nil, -696, - nil, -696, nil, 79, 80, 81, -696, 62, nil, nil, - nil, 68, 69, nil, nil, nil, 72, nil, 70, 71, - 73, 32, 33, 77, 78, nil, nil, nil, nil, nil, - 82, 30, 29, 111, 110, 112, 113, nil, nil, 241, - nil, nil, nil, nil, nil, nil, 50, nil, nil, 115, - 114, 116, 105, 61, 107, 106, 108, 297, 109, 117, - 118, nil, 101, 102, 46, 47, 45, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 234, nil, nil, 240, - nil, nil, 63, 64, nil, nil, 65, nil, 294, nil, - 292, nil, 49, nil, nil, 298, nil, nil, nil, nil, - nil, 239, nil, nil, nil, nil, 99, 295, 90, 91, - nil, 92, 94, 93, 95, nil, nil, nil, nil, 88, - 98, nil, nil, nil, 79, 80, 81, 67, 62, 89, - 103, 104, 68, 69, 43, 44, nil, 72, nil, 70, - 71, 73, 322, 323, 77, 78, nil, nil, nil, nil, - nil, 82, 319, 325, 111, 110, 112, 113, nil, nil, - 241, nil, nil, nil, nil, nil, nil, 50, nil, nil, - 115, 114, 116, 105, 61, 107, 106, 108, nil, 109, - 117, 118, nil, 101, 102, 46, 47, 45, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 234, nil, nil, - 240, nil, nil, 63, 64, nil, nil, 65, nil, nil, - nil, nil, nil, 49, nil, nil, nil, nil, nil, nil, - nil, nil, 239, nil, nil, nil, nil, 99, 87, 90, - 91, nil, 92, 94, 93, 95, nil, nil, nil, nil, - 88, 98, nil, nil, nil, 79, 80, 81, 67, 62, - 89, 103, 104, 68, 69, 43, 44, nil, 72, nil, - 70, 71, 73, 322, 323, 77, 78, nil, nil, nil, - nil, nil, 82, 319, 325, 111, 110, 112, 113, nil, - nil, 241, nil, nil, nil, nil, nil, nil, 50, nil, - nil, 115, 114, 116, 105, 61, 107, 106, 108, nil, - 109, 117, 118, nil, 101, 102, 46, 47, 45, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 234, nil, - nil, 240, nil, nil, 63, 64, nil, nil, 65, nil, - nil, nil, nil, nil, 49, nil, nil, nil, nil, nil, - nil, nil, nil, 239, nil, nil, nil, nil, 99, 87, - 90, 91, nil, 92, 94, 93, 95, nil, nil, nil, - nil, 88, 98, nil, nil, nil, 79, 80, 81, 67, - 62, 89, 103, 104, 68, 69, 43, 44, nil, 72, - nil, 70, 71, 73, 322, 323, 77, 78, nil, nil, - nil, nil, nil, 82, 319, 325, 111, 110, 112, 113, - nil, nil, 241, nil, nil, nil, nil, nil, nil, 50, - nil, nil, 115, 114, 116, 105, 61, 107, 106, 108, - nil, 109, 117, 118, nil, 101, 102, 46, 47, 45, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 234, - nil, nil, 240, nil, nil, 63, 64, nil, nil, 65, - nil, nil, nil, nil, nil, 49, nil, nil, nil, nil, - nil, nil, nil, nil, 239, nil, nil, nil, nil, 99, - 87, 90, 91, nil, 92, 94, 93, 95, nil, nil, - nil, nil, 88, 98, nil, nil, nil, nil, nil, nil, - 67, nil, 89, 103, 104, -260, nil, 43, 44, nil, - nil, nil, -260, -260, -260, nil, nil, -260, -260, -260, - 724, -260, 721, 720, 719, 729, 722, nil, nil, -260, - -260, -260, nil, nil, nil, 732, nil, nil, nil, nil, - nil, -260, -260, nil, -260, -260, -260, -260, -260, nil, - nil, nil, nil, nil, nil, nil, nil, 727, nil, 724, - nil, 721, 720, 719, 729, 722, 737, 736, 740, 739, - nil, nil, nil, 733, 732, nil, nil, nil, nil, nil, - nil, nil, -260, nil, nil, nil, nil, nil, nil, -260, - nil, nil, nil, nil, 276, -260, 727, 709, nil, 229, - nil, nil, nil, nil, nil, 737, 736, 740, 739, nil, - nil, nil, 733, nil, nil, nil, nil, -260, -260, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, -260, nil, nil, -260, nil, 79, 80, 81, - -260, 62, nil, nil, nil, 68, 69, -260, nil, nil, - 72, nil, 70, 71, 73, 322, 323, 77, 78, nil, - nil, nil, nil, nil, 82, 319, 325, 111, 110, 112, - 113, nil, nil, 241, nil, nil, nil, nil, nil, nil, - 50, nil, nil, 115, 114, 116, 105, 61, 107, 106, - 108, nil, 109, 117, 118, nil, 101, 102, 46, 47, - 45, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 234, nil, nil, 240, nil, nil, 63, 64, nil, nil, - 65, nil, nil, nil, nil, nil, 49, nil, nil, nil, - nil, nil, nil, nil, nil, 239, nil, nil, nil, nil, - 99, 87, 90, 91, nil, 92, 94, 93, 95, nil, - nil, nil, nil, 88, 98, nil, nil, nil, 79, 80, - 81, 67, 62, 89, 103, 104, 68, 69, 43, 44, - nil, 72, nil, 70, 71, 73, 322, 323, 77, 78, - nil, nil, nil, nil, nil, 82, 319, 325, 111, 110, - 112, 113, nil, nil, 241, nil, nil, nil, nil, nil, - nil, 50, nil, nil, 115, 114, 116, 105, 61, 107, - 106, 108, 297, 109, 117, 118, nil, 101, 102, 46, - 47, 45, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 234, nil, nil, 240, nil, nil, 63, 64, nil, - nil, 65, nil, 681, nil, 292, nil, 49, nil, nil, - 298, nil, nil, nil, nil, nil, 239, nil, nil, nil, - nil, 99, 295, 90, 91, nil, 92, 94, 93, 95, - nil, nil, nil, nil, 88, 98, nil, nil, nil, 79, - 80, 81, 67, 62, 89, 103, 104, 68, 69, 43, - 44, nil, 72, nil, 70, 71, 73, 322, 323, 77, - 78, nil, nil, nil, nil, nil, 82, 319, 325, 111, - 110, 112, 113, nil, nil, 241, nil, nil, nil, nil, - nil, nil, 50, nil, nil, 115, 114, 116, 105, 61, - 107, 106, 108, 297, 109, 117, 118, nil, 101, 102, - 46, 47, 45, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 234, nil, nil, 240, nil, nil, 63, 64, - nil, nil, 65, nil, nil, nil, 292, nil, 49, nil, - nil, 298, nil, nil, nil, nil, nil, 239, nil, nil, - nil, nil, 99, 295, 90, 91, nil, 92, 94, 93, - 95, nil, nil, nil, nil, 88, 98, nil, nil, nil, - 79, 80, 81, 67, 62, 89, 103, 104, 68, 69, - 43, 44, nil, 72, nil, 70, 71, 73, 322, 323, - 77, 78, nil, nil, nil, nil, nil, 82, 319, 325, - 111, 110, 112, 113, nil, nil, 241, nil, nil, nil, - nil, nil, nil, 50, nil, nil, 115, 114, 116, 105, - 61, 107, 106, 108, nil, 109, 117, 118, nil, 101, - 102, 46, 47, 45, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 234, nil, nil, 240, nil, nil, 63, - 64, nil, nil, 65, nil, nil, nil, nil, nil, 49, - nil, nil, nil, nil, nil, nil, nil, nil, 239, nil, - nil, nil, nil, 99, 87, 90, 91, nil, 92, 94, - 93, 95, nil, nil, nil, nil, 88, 98, nil, nil, - nil, nil, nil, nil, 67, nil, 89, 103, 104, nil, - nil, 43, 44, 79, 80, 81, 11, 62, nil, nil, - nil, 68, 69, nil, nil, nil, 72, nil, 70, 71, - 73, 32, 33, 77, 78, nil, nil, nil, nil, nil, - 82, 30, 29, 111, 110, 112, 113, nil, nil, 21, - nil, nil, nil, nil, nil, 10, 50, 305, 12, 115, - 114, 116, 105, 61, 107, 106, 108, nil, 109, 117, - 118, nil, 101, 102, 46, 47, 45, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 42, nil, nil, 35, - nil, nil, 63, 64, nil, nil, 65, nil, 37, nil, - nil, nil, 49, nil, nil, nil, nil, nil, nil, nil, - nil, 22, nil, nil, nil, nil, 99, 87, 90, 91, - nil, 92, 94, 93, 95, nil, nil, nil, nil, 88, - 98, nil, nil, nil, nil, nil, 403, 67, nil, 89, - 103, 104, nil, nil, 43, 44, 79, 80, 81, nil, - 62, nil, nil, nil, 68, 69, nil, nil, nil, 72, - nil, 70, 71, 73, 32, 33, 77, 78, nil, nil, - nil, nil, nil, 82, 30, 29, 111, 110, 112, 113, - nil, nil, 241, nil, nil, nil, nil, nil, nil, 50, - nil, nil, 115, 114, 116, 105, 61, 107, 106, 108, - 297, 109, 117, 118, nil, 101, 102, 46, 47, 45, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 234, - nil, nil, 240, nil, nil, 63, 64, nil, nil, 65, - nil, 294, nil, 292, nil, 49, nil, nil, 298, nil, - nil, nil, nil, nil, 239, nil, nil, nil, nil, 99, - 295, 90, 91, nil, 92, 94, 93, 95, nil, nil, - nil, nil, 88, 98, nil, nil, nil, 79, 80, 81, - 67, 62, 89, 103, 104, 68, 69, 43, 44, nil, - 72, nil, 70, 71, 73, 322, 323, 77, 78, nil, - nil, nil, nil, nil, 82, 319, 325, 111, 110, 112, - 113, nil, nil, 241, nil, nil, nil, nil, nil, nil, - 50, nil, nil, 115, 114, 116, 105, 61, 107, 106, - 108, nil, 109, 117, 118, nil, 101, 102, 46, 47, - 45, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 234, nil, nil, 240, nil, nil, 63, 64, nil, nil, - 65, nil, nil, nil, nil, nil, 49, nil, nil, nil, - nil, nil, nil, nil, nil, 239, nil, nil, nil, nil, - 99, 87, 90, 91, nil, 92, 94, 93, 95, nil, - nil, nil, nil, 88, 98, nil, nil, nil, 79, 80, - 81, 67, 62, 89, 103, 104, 68, 69, 43, 44, - nil, 72, nil, 70, 71, 73, 322, 323, 77, 78, - nil, nil, nil, nil, nil, 82, 319, 325, 111, 110, - 112, 113, nil, nil, 241, nil, nil, nil, nil, nil, - nil, 50, nil, nil, 115, 114, 116, 105, 61, 107, - 106, 108, nil, 109, 117, 118, nil, 101, 102, 46, - 47, 45, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 234, nil, nil, 240, nil, nil, 63, 64, nil, - nil, 65, nil, nil, nil, nil, nil, 49, nil, nil, - nil, nil, nil, nil, nil, nil, 239, nil, nil, nil, - nil, 99, 87, 90, 91, nil, 92, 94, 93, 95, - nil, nil, nil, nil, 88, 98, nil, nil, nil, 79, - 80, 81, 67, 62, 89, 103, 104, 68, 69, 43, - 44, nil, 72, nil, 70, 71, 73, 32, 33, 77, - 78, nil, nil, nil, nil, nil, 82, 30, 29, 111, - 110, 112, 113, nil, nil, 21, nil, nil, nil, nil, - nil, nil, 50, nil, nil, 115, 114, 116, 105, 61, - 107, 106, 108, nil, 109, 117, 118, nil, 101, 102, - 46, 47, 45, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 234, nil, nil, 240, nil, nil, 63, 64, - nil, nil, 65, nil, nil, nil, nil, nil, 49, nil, - nil, nil, nil, nil, nil, nil, nil, 22, nil, nil, - nil, nil, 99, 87, 90, 91, nil, 92, 94, 93, - 95, nil, nil, nil, nil, 88, 98, nil, nil, nil, - 79, 80, 81, 67, 62, 89, 103, 104, 68, 69, - 43, 44, nil, 72, nil, 70, 71, 73, 322, 323, - 77, 78, nil, nil, nil, nil, nil, 82, 319, 325, - 111, 110, 112, 113, nil, nil, 241, nil, nil, nil, - nil, nil, nil, 50, nil, nil, 115, 114, 116, 105, - 61, 107, 106, 108, 297, 109, 117, 118, nil, 101, - 102, 46, 47, 45, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 234, nil, nil, 240, nil, nil, 63, - 64, nil, nil, 65, nil, 681, nil, nil, nil, 49, - nil, nil, 298, nil, nil, nil, nil, nil, 239, nil, - nil, nil, nil, 99, 295, 90, 91, nil, 92, 94, - 93, 95, nil, nil, nil, nil, 88, 98, nil, nil, - nil, 79, 80, 81, 67, 62, 89, 103, 104, 68, - 69, 43, 44, nil, 72, nil, 70, 71, 73, 322, - 323, 77, 78, nil, nil, nil, nil, nil, 82, 319, - 325, 111, 110, 112, 113, nil, nil, 241, nil, nil, - nil, nil, nil, nil, 50, nil, nil, 115, 114, 116, - 105, 61, 107, 106, 108, 297, 109, 117, 118, nil, - 101, 102, 46, 47, 45, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 234, nil, nil, 240, nil, nil, - 63, 64, nil, nil, 65, nil, nil, nil, nil, nil, - 49, nil, nil, 298, nil, nil, nil, nil, nil, 239, - nil, nil, nil, nil, 99, 295, 90, 91, nil, 92, - 94, 93, 95, nil, nil, nil, nil, 88, 98, nil, - nil, nil, 79, 80, 81, 67, 62, 89, 103, 104, - 68, 69, 43, 44, nil, 72, nil, 70, 71, 73, - 322, 323, 77, 78, nil, nil, nil, nil, nil, 82, - 319, 325, 111, 110, 112, 113, nil, nil, 241, nil, - nil, nil, nil, nil, nil, 50, nil, nil, 115, 114, - 116, 105, 61, 107, 106, 108, nil, 109, 117, 118, - nil, 101, 102, 46, 47, 45, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 234, nil, nil, 240, nil, - nil, 63, 64, nil, nil, 65, nil, 294, nil, nil, - nil, 49, nil, nil, nil, nil, nil, nil, nil, nil, - 239, nil, nil, nil, nil, 99, 87, 90, 91, nil, - 92, 94, 93, 95, nil, nil, nil, nil, 88, 98, - nil, nil, nil, 79, 80, 81, 67, 62, 89, 103, - 104, 68, 69, 43, 44, nil, 72, nil, 70, 71, - 73, 32, 33, 77, 78, nil, nil, nil, nil, nil, - 82, 30, 29, 111, 110, 112, 113, nil, nil, 241, - nil, nil, nil, nil, nil, nil, 50, nil, nil, 115, - 114, 116, 105, 61, 107, 106, 108, 297, 109, 117, - 118, nil, 101, 102, 46, 47, 45, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 234, nil, nil, 240, - nil, nil, 63, 64, nil, nil, 65, nil, 294, nil, - 292, nil, 49, nil, nil, 298, nil, nil, nil, nil, - nil, 239, nil, nil, nil, nil, 99, 295, 90, 91, - nil, 92, 94, 93, 95, nil, nil, nil, nil, 88, - 98, nil, nil, nil, 79, 80, 81, 67, 62, 89, - 103, 104, 68, 69, 43, 44, nil, 72, nil, 70, - 71, 73, 32, 33, 77, 78, nil, nil, nil, nil, - nil, 82, 30, 29, 111, 110, 112, 113, nil, nil, - 241, nil, nil, nil, nil, nil, nil, 50, nil, nil, - 115, 114, 116, 105, 61, 107, 106, 108, 297, 109, - 117, 118, nil, 101, 102, 46, 47, 45, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 234, nil, nil, - 240, nil, nil, 63, 64, nil, nil, 65, nil, 294, - nil, 292, nil, 49, nil, nil, 298, nil, nil, nil, - nil, nil, 239, nil, nil, nil, nil, 99, 295, 90, - 91, nil, 92, 94, 93, 95, nil, nil, nil, nil, - 88, 98, nil, nil, nil, nil, nil, nil, 67, nil, - 89, 103, 104, nil, nil, 43, 44, 79, 80, 81, - 11, 62, nil, nil, nil, 68, 69, nil, nil, nil, - 72, nil, 70, 71, 73, 32, 33, 77, 78, nil, - nil, nil, nil, nil, 82, 30, 29, 111, 110, 112, - 113, nil, nil, 21, nil, nil, nil, nil, nil, 10, - 50, nil, 12, 115, 114, 116, 105, 61, 107, 106, - 108, nil, 109, 117, 118, nil, 101, 102, 46, 47, - 45, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 42, nil, nil, 35, nil, nil, 63, 64, nil, nil, - 65, nil, 37, nil, nil, nil, 49, nil, nil, nil, - nil, nil, nil, nil, nil, 22, nil, nil, nil, nil, - 99, 87, 90, 91, nil, 92, 94, 93, 95, nil, - nil, nil, nil, 88, 98, nil, nil, nil, 79, 80, - 81, 67, 62, 89, 103, 104, 68, 69, 43, 44, - nil, 72, nil, 70, 71, 73, 322, 323, 77, 78, - nil, nil, nil, nil, nil, 82, 319, 325, 111, 110, - 112, 113, nil, nil, 241, nil, nil, nil, nil, nil, - nil, 50, nil, nil, 115, 114, 116, 105, 61, 107, - 106, 108, nil, 109, 117, 118, nil, 101, 102, 46, - 47, 45, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 234, nil, nil, 240, nil, nil, 63, 64, nil, - nil, 65, nil, 789, nil, nil, nil, 49, nil, nil, - nil, nil, nil, nil, nil, nil, 239, nil, nil, nil, - nil, 99, 87, 90, 91, nil, 92, 94, 93, 95, - nil, nil, nil, nil, 88, 98, nil, nil, nil, 79, - 80, 81, 67, 62, 89, 103, 104, 68, 69, 43, - 44, nil, 72, nil, 70, 71, 73, 32, 33, 77, - 78, nil, nil, nil, nil, nil, 82, 30, 29, 111, - 110, 112, 113, nil, nil, 241, nil, nil, nil, nil, - nil, nil, 50, nil, nil, 115, 114, 116, 105, 61, - 107, 106, 108, nil, 109, 117, 118, nil, 101, 102, - 46, 47, 45, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 234, nil, nil, 240, nil, nil, 63, 64, - nil, nil, 65, nil, nil, nil, nil, nil, 49, nil, - nil, nil, nil, nil, nil, nil, nil, 239, nil, nil, - nil, nil, 99, 87, 90, 91, nil, 92, 94, 93, - 95, nil, nil, nil, nil, 88, 98, nil, nil, nil, - 79, 80, 81, 67, 62, 89, 103, 104, 68, 69, - 43, 44, nil, 72, nil, 70, 71, 73, 32, 33, - 77, 78, nil, nil, nil, nil, nil, 82, 30, 29, - 111, 110, 112, 113, nil, nil, 241, nil, nil, nil, - nil, nil, nil, 50, nil, nil, 115, 114, 116, 105, - 61, 107, 106, 108, 297, 109, 117, 118, nil, 101, - 102, 46, 47, 45, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 234, nil, nil, 240, nil, nil, 63, - 64, nil, nil, 65, nil, 294, nil, 292, nil, 49, - nil, nil, 298, nil, nil, nil, nil, nil, 239, nil, - nil, nil, nil, 99, 295, 90, 91, nil, 92, 94, - 93, 95, nil, nil, nil, nil, 88, 98, nil, nil, - nil, nil, nil, nil, 67, nil, 89, 103, 104, nil, - nil, 43, 44, 79, 80, 81, 11, 62, nil, nil, - nil, 68, 69, nil, nil, nil, 72, nil, 70, 71, - 73, 32, 33, 77, 78, nil, nil, nil, nil, nil, - 82, 30, 29, 111, 110, 112, 113, nil, nil, 21, - nil, nil, nil, nil, nil, 10, 50, nil, 12, 115, - 114, 116, 105, 61, 107, 106, 108, nil, 109, 117, - 118, nil, 101, 102, 46, 47, 45, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 42, nil, nil, 35, - nil, nil, 63, 64, nil, nil, 65, nil, 37, nil, - nil, nil, 49, nil, nil, nil, nil, nil, nil, nil, - nil, 22, nil, nil, nil, nil, 99, 87, 90, 91, - nil, 92, 94, 93, 95, nil, nil, nil, nil, 88, - 98, nil, nil, nil, 79, 80, 81, 67, 62, 89, - 103, 104, 68, 69, 43, 44, nil, 72, nil, 70, - 71, 73, 322, 323, 77, 78, nil, nil, nil, nil, - nil, 82, 319, 325, 111, 110, 112, 113, nil, nil, - 241, nil, nil, nil, nil, nil, nil, 50, nil, nil, - 115, 114, 116, 105, 61, 107, 106, 108, nil, 109, - 117, 118, nil, 101, 102, 46, 47, 45, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 234, nil, nil, - 240, nil, nil, 63, 64, nil, nil, 65, nil, nil, - nil, nil, nil, 49, nil, nil, nil, nil, nil, nil, - nil, nil, 239, nil, nil, nil, nil, 99, 87, 90, - 91, nil, 92, 94, 93, 95, nil, nil, nil, nil, - 88, 98, nil, nil, nil, 79, 80, 81, 67, 62, - 89, 103, 104, 68, 69, 43, 44, nil, 72, nil, - 70, 71, 73, 322, 323, 77, 78, nil, nil, nil, - nil, nil, 82, 319, 325, 111, 110, 112, 113, nil, - nil, 241, nil, nil, nil, nil, nil, nil, 50, nil, - nil, 115, 114, 116, 105, 61, 107, 106, 108, 297, - 109, 117, 118, nil, 101, 102, 46, 47, 45, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 234, nil, - nil, 240, nil, nil, 63, 64, nil, nil, 65, nil, - 681, nil, 292, nil, 49, nil, nil, 298, nil, nil, - nil, nil, nil, 239, nil, nil, nil, nil, 99, 295, - 90, 91, nil, 92, 94, 93, 95, nil, nil, nil, - nil, 88, 98, nil, nil, nil, 79, 80, 81, 67, - 62, 89, 103, 104, 68, 69, 43, 44, nil, 72, - nil, 70, 71, 73, 322, 323, 77, 78, nil, nil, - nil, nil, nil, 82, 319, 325, 111, 110, 112, 113, - nil, nil, 241, nil, nil, nil, nil, nil, nil, 50, - nil, nil, 115, 114, 116, 105, 61, 107, 106, 108, - 297, 109, 117, 118, nil, 101, 102, 46, 47, 45, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 234, - nil, nil, 240, nil, nil, 63, 64, nil, nil, 65, - nil, nil, nil, 292, nil, 49, nil, nil, 298, nil, - nil, nil, nil, nil, 239, nil, nil, nil, nil, 99, - 295, 90, 91, nil, 92, 94, 93, 95, nil, nil, - nil, nil, 88, 98, nil, nil, nil, 79, 80, 81, - 67, 62, 89, 103, 104, 68, 69, 43, 44, nil, - 72, nil, 70, 71, 73, 32, 33, 77, 78, nil, - nil, nil, nil, nil, 82, 30, 29, 111, 110, 112, - 113, nil, nil, 241, nil, nil, nil, nil, nil, nil, - 50, nil, nil, 115, 114, 116, 105, 61, 107, 106, - 108, nil, 109, 117, 118, nil, 101, 102, 46, 47, - 45, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 234, nil, nil, 240, nil, nil, 63, 64, nil, nil, - 65, nil, nil, nil, nil, nil, 49, nil, nil, nil, - nil, nil, nil, nil, nil, 239, nil, nil, nil, nil, - 99, 87, 90, 91, nil, 92, 94, 93, 95, nil, - nil, nil, nil, 88, 98, nil, nil, nil, 79, 80, - 81, 67, 62, 89, 103, 104, 68, 69, 43, 44, - nil, 72, nil, 70, 71, 73, 32, 33, 77, 78, - nil, nil, nil, nil, nil, 82, 30, 29, 111, 110, - 112, 113, nil, nil, 241, nil, nil, nil, nil, nil, - nil, 50, nil, nil, 115, 114, 116, 105, 61, 107, - 106, 108, nil, 109, 117, 118, nil, 101, 102, 46, - 47, 45, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 234, nil, nil, 240, nil, nil, 63, 64, nil, - nil, 65, nil, nil, nil, nil, nil, 49, nil, nil, - nil, nil, nil, nil, nil, nil, 239, nil, nil, nil, - nil, 99, 87, 90, 91, nil, 92, 94, 93, 95, - nil, nil, nil, nil, 88, 98, nil, nil, nil, 79, - 80, 81, 67, 62, 89, 103, 104, 68, 69, 43, - 44, nil, 72, nil, 70, 71, 73, 32, 33, 77, - 78, nil, nil, nil, nil, nil, 82, 30, 29, 111, - 110, 112, 113, nil, nil, 241, nil, nil, nil, nil, - nil, nil, 50, nil, nil, 115, 114, 116, 105, 61, - 107, 106, 108, nil, 109, 117, 118, nil, 101, 102, - 46, 47, 45, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 234, nil, nil, 240, nil, nil, 63, 64, - nil, nil, 65, nil, nil, nil, nil, nil, 49, nil, - nil, nil, nil, nil, nil, nil, nil, 239, nil, nil, - nil, nil, 99, 87, 90, 91, nil, 92, 94, 93, - 95, nil, nil, nil, nil, 88, 98, nil, nil, nil, - 79, 80, 81, 67, 62, 89, 103, 104, 68, 69, - 43, 44, nil, 72, nil, 70, 71, 73, 32, 33, - 77, 78, nil, nil, nil, nil, nil, 82, 30, 29, - 111, 110, 112, 113, nil, nil, 241, nil, nil, nil, - nil, nil, nil, 50, nil, nil, 115, 114, 116, 105, - 61, 107, 106, 108, nil, 109, 117, 118, nil, 101, - 102, 46, 47, 45, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 234, nil, nil, 240, nil, nil, 63, - 64, nil, nil, 65, nil, nil, nil, nil, nil, 49, - nil, nil, nil, nil, nil, nil, nil, nil, 239, nil, - nil, nil, nil, 99, 87, 90, 91, nil, 92, 94, - 93, 95, nil, nil, nil, nil, 88, 98, nil, nil, - nil, 79, 80, 81, 67, 62, 89, 103, 104, 68, - 69, 43, 44, nil, 72, nil, 70, 71, 73, 322, - 323, 77, 78, nil, nil, nil, nil, nil, 82, 319, - 325, 111, 110, 112, 113, nil, nil, 241, nil, nil, - nil, nil, nil, nil, 50, nil, nil, 115, 114, 116, - 105, 61, 107, 106, 108, 297, 109, 117, 118, nil, - 101, 102, 46, 47, 45, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 234, nil, nil, 240, nil, nil, - 63, 64, nil, nil, 65, nil, 681, nil, 292, nil, - 49, nil, nil, 298, nil, nil, nil, nil, nil, 239, - nil, nil, nil, nil, 99, 295, 90, 91, nil, 92, - 94, 93, 95, nil, nil, nil, nil, 88, 98, nil, - nil, nil, 79, 80, 81, 67, 62, 89, 103, 104, - 68, 69, 43, 497, nil, 72, nil, 70, 71, 73, - 322, 323, 77, 78, nil, nil, nil, nil, nil, 82, - 319, 325, 111, 110, 112, 113, nil, nil, 241, nil, - nil, nil, nil, nil, nil, 50, nil, nil, 115, 114, - 116, 105, 61, 107, 106, 108, nil, 109, 117, 118, - nil, 101, 102, 46, 47, 45, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 234, nil, nil, 240, nil, - nil, 63, 64, nil, nil, 65, nil, nil, nil, nil, - nil, 49, nil, nil, nil, nil, nil, nil, nil, nil, - 239, nil, nil, nil, nil, 99, 87, 90, 91, nil, - 92, 94, 93, 95, nil, nil, nil, nil, 88, 98, - nil, nil, nil, 79, 80, 81, 67, 62, 89, 103, - 104, 68, 69, 43, 44, nil, 72, nil, 70, 71, - 73, 322, 323, 77, 78, nil, nil, nil, nil, nil, - 82, 319, 325, 111, 110, 112, 113, nil, nil, 241, - nil, nil, nil, nil, nil, nil, 50, nil, nil, 115, - 114, 116, 105, 61, 107, 106, 108, nil, 109, 117, - 118, nil, 101, 102, 46, 47, 45, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 234, nil, nil, 240, - nil, nil, 63, 64, nil, nil, 65, nil, nil, nil, - nil, nil, 49, nil, nil, nil, nil, nil, nil, nil, - nil, 239, nil, nil, nil, nil, 99, 87, 90, 91, - nil, 92, 94, 93, 95, nil, nil, nil, nil, 88, - 98, nil, nil, nil, 79, 80, 81, 67, 62, 89, - 103, 104, 68, 69, 43, 44, nil, 72, nil, 70, - 71, 73, 322, 323, 77, 78, nil, nil, nil, nil, - nil, 82, 319, 325, 111, 110, 112, 113, nil, nil, - 241, nil, nil, nil, nil, nil, nil, 50, nil, nil, - 115, 114, 116, 105, 61, 107, 106, 108, nil, 109, - 117, 118, nil, 101, 102, 46, 47, 45, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 234, nil, nil, - 240, nil, nil, 63, 64, nil, nil, 65, nil, 419, - nil, nil, nil, 49, nil, nil, nil, nil, nil, nil, - nil, nil, 239, nil, nil, nil, nil, 99, 87, 90, - 91, nil, 92, 94, 93, 95, nil, nil, nil, nil, - 88, 98, nil, nil, nil, 79, 80, 81, 67, 62, - 89, 103, 104, 68, 69, 43, 44, nil, 72, nil, - 70, 71, 73, 322, 323, 77, 78, nil, nil, nil, - nil, nil, 82, 319, 325, 111, 110, 112, 113, nil, - nil, 241, nil, nil, nil, nil, nil, nil, 50, nil, - nil, 115, 114, 116, 105, 61, 107, 106, 108, nil, - 109, 117, 118, nil, 101, 102, 46, 47, 45, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 234, nil, - nil, 240, nil, nil, 63, 64, nil, nil, 65, nil, - nil, nil, nil, nil, 49, nil, nil, nil, nil, nil, - nil, nil, nil, 239, nil, nil, nil, nil, 99, 87, - 90, 91, nil, 92, 94, 93, 95, nil, nil, nil, - nil, 88, 98, nil, nil, nil, 79, 80, 81, 67, - 62, 89, 103, 104, 68, 69, 43, 44, nil, 72, - nil, 70, 71, 73, 32, 33, 77, 78, nil, nil, - nil, nil, nil, 82, 30, 29, 111, 110, 112, 113, - nil, nil, 21, nil, nil, nil, nil, nil, nil, 50, - nil, nil, 115, 114, 116, 105, 61, 107, 106, 108, - nil, 109, 117, 118, nil, 101, 102, 46, 47, 45, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 234, - nil, nil, 240, nil, nil, 63, 64, nil, nil, 65, - nil, nil, nil, nil, nil, 49, nil, nil, nil, nil, - nil, nil, nil, nil, 22, nil, nil, nil, nil, 99, - 87, 90, 91, nil, 92, 94, 93, 95, nil, nil, - nil, nil, 88, 98, nil, nil, nil, 79, 80, 81, - 67, 62, 89, 103, 104, 68, 69, 43, 44, nil, - 72, nil, 70, 71, 73, 322, 323, 77, 78, nil, - nil, nil, nil, nil, 82, 319, 325, 111, 110, 112, - 113, nil, nil, 241, nil, nil, nil, nil, nil, nil, - 50, nil, nil, 115, 114, 116, 105, 61, 107, 106, - 108, nil, 109, 117, 118, nil, 101, 102, 46, 47, - 45, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 234, nil, nil, 240, nil, nil, 63, 64, nil, nil, - 65, nil, nil, nil, nil, nil, 49, nil, nil, nil, - nil, nil, nil, nil, nil, 239, nil, nil, nil, nil, - 99, 87, 90, 91, nil, 92, 94, 93, 95, nil, - nil, nil, nil, 88, 98, nil, nil, nil, 79, 80, - 81, 67, 62, 89, 103, 104, 68, 69, 43, 44, - nil, 72, nil, 70, 71, 73, 32, 33, 77, 78, - nil, nil, nil, nil, nil, 82, 30, 29, 111, 110, - 112, 113, nil, nil, 241, nil, nil, nil, nil, nil, - nil, 50, nil, nil, 115, 114, 116, 105, 61, 107, - 106, 108, nil, 109, 117, 118, nil, 101, 102, 46, - 47, 45, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 234, nil, nil, 240, nil, nil, 63, 64, nil, - nil, 65, nil, nil, nil, nil, nil, 49, nil, nil, - nil, nil, nil, nil, nil, nil, 239, nil, nil, nil, - nil, 99, 87, 90, 91, nil, 92, 94, 93, 95, - nil, nil, nil, nil, 88, 98, nil, nil, nil, 79, - 80, 81, 67, 62, 89, 103, 104, 68, 69, 43, - 44, nil, 72, nil, 70, 71, 73, 322, 323, 77, - 78, nil, nil, nil, nil, nil, 82, 319, 325, 111, - 110, 112, 113, nil, nil, 241, nil, nil, nil, nil, - nil, nil, 50, nil, nil, 115, 114, 116, 105, 61, - 107, 106, 108, nil, 109, 117, 118, nil, 101, 102, - 46, 47, 45, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 234, nil, nil, 240, nil, nil, 63, 64, - nil, nil, 65, nil, nil, nil, nil, nil, 49, nil, - nil, nil, nil, nil, nil, nil, nil, 239, nil, nil, - nil, nil, 99, 87, 90, 91, nil, 92, 94, 93, - 95, nil, nil, nil, nil, 88, 98, nil, nil, nil, - 79, 80, 81, 67, 62, 89, 103, 104, 68, 69, - 43, 44, nil, 72, nil, 70, 71, 73, 322, 323, - 77, 78, nil, nil, nil, nil, nil, 82, 319, 325, - 111, 110, 112, 113, nil, nil, 241, nil, nil, nil, - nil, nil, nil, 50, nil, nil, 115, 114, 116, 105, - 61, 107, 106, 108, nil, 109, 117, 118, nil, 101, - 102, 46, 47, 45, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 234, nil, nil, 240, nil, nil, 63, - 64, nil, nil, 65, nil, nil, nil, nil, nil, 49, - nil, nil, nil, nil, nil, nil, nil, nil, 239, nil, - nil, nil, nil, 99, 87, 90, 91, nil, 92, 94, - 93, 95, nil, nil, nil, nil, 88, 98, nil, nil, - nil, 79, 80, 81, 67, 62, 89, 103, 104, 68, - 69, 43, 44, nil, 72, nil, 70, 71, 73, 322, - 323, 77, 78, nil, nil, nil, nil, nil, 82, 319, - 325, 111, 110, 112, 113, nil, nil, 241, nil, nil, - nil, nil, nil, nil, 50, nil, nil, 115, 114, 116, - 105, 61, 107, 106, 108, nil, 109, 117, 118, nil, - 101, 102, 46, 47, 45, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 234, nil, nil, 240, nil, nil, - 63, 64, nil, nil, 65, nil, nil, nil, nil, nil, - 49, nil, nil, nil, nil, nil, nil, nil, nil, 239, - nil, nil, nil, nil, 99, 87, 90, 91, nil, 92, - 94, 93, 95, nil, nil, nil, nil, 88, 98, nil, - nil, nil, 79, 80, 81, 67, 62, 89, 103, 104, - 68, 69, 43, 44, nil, 72, nil, 70, 71, 73, - 322, 323, 77, 78, nil, nil, nil, nil, nil, 82, - 319, 325, 111, 110, 112, 113, nil, nil, 241, nil, - nil, nil, nil, nil, nil, 50, nil, nil, 115, 114, - 116, 105, 61, 107, 106, 108, nil, 109, 117, 118, - nil, 101, 102, 46, 47, 45, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 234, nil, nil, 240, nil, - nil, 63, 64, nil, nil, 65, nil, nil, nil, nil, - nil, 49, nil, nil, nil, nil, nil, nil, nil, nil, - 239, nil, nil, nil, nil, 99, 87, 90, 91, nil, - 92, 94, 93, 95, nil, nil, nil, nil, 88, 98, - nil, nil, nil, 79, 80, 81, 67, 62, 89, 103, - 104, 68, 69, 43, 44, nil, 72, nil, 70, 71, - 73, 322, 323, 77, 78, nil, nil, nil, nil, nil, - 82, 319, 325, 111, 110, 112, 113, nil, nil, 241, - nil, nil, nil, nil, nil, nil, 50, nil, nil, 115, - 114, 116, 105, 61, 107, 106, 108, nil, 109, 117, - 118, nil, 101, 102, 46, 47, 45, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 234, nil, nil, 240, - nil, nil, 63, 64, nil, nil, 65, nil, nil, nil, - nil, nil, 49, nil, nil, nil, nil, nil, nil, nil, - nil, 239, nil, nil, nil, nil, 99, 87, 90, 91, - nil, 92, 94, 93, 95, nil, nil, nil, nil, 88, - 98, nil, nil, nil, 79, 80, 81, 67, 62, 89, - 103, 104, 68, 69, 43, 44, nil, 72, nil, 70, - 71, 73, 322, 323, 77, 78, nil, nil, nil, nil, - nil, 82, 319, 325, 111, 110, 112, 113, nil, nil, - 241, nil, nil, nil, nil, nil, nil, 50, nil, nil, - 115, 114, 116, 105, 61, 107, 106, 108, nil, 109, - 117, 118, nil, 101, 102, 46, 47, 45, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 234, nil, nil, - 240, nil, nil, 63, 64, nil, nil, 65, nil, nil, - nil, nil, nil, 49, nil, nil, nil, nil, nil, nil, - nil, nil, 239, nil, nil, nil, nil, 99, 87, 90, - 91, nil, 92, 94, 93, 95, nil, nil, nil, nil, - 88, 98, nil, nil, nil, 79, 80, 81, 67, 62, - 89, 103, 104, 68, 69, 43, 44, nil, 72, nil, - 70, 71, 73, 32, 33, 77, 78, nil, nil, nil, - nil, nil, 82, 30, 29, 111, 110, 112, 113, nil, - nil, 21, nil, nil, nil, nil, nil, nil, 50, nil, - nil, 115, 114, 116, 105, 61, 107, 106, 108, nil, - 109, 117, 118, nil, 101, 102, 46, 47, 45, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 234, nil, - nil, 240, nil, nil, 63, 64, nil, nil, 65, nil, - nil, nil, nil, nil, 49, nil, nil, nil, nil, nil, - nil, nil, nil, 22, nil, nil, nil, nil, 99, 87, - 90, 91, nil, 92, 94, 93, 95, nil, nil, nil, - nil, 88, 98, nil, nil, nil, 79, 80, 81, 67, - 62, 89, 103, 104, 68, 69, 43, 44, nil, 72, - nil, 70, 71, 73, 322, 323, 77, 78, nil, nil, - nil, nil, nil, 82, 319, 325, 111, 110, 112, 113, - nil, nil, 241, nil, nil, nil, nil, nil, nil, 50, - nil, nil, 115, 114, 116, 105, 61, 107, 106, 108, - nil, 109, 117, 118, nil, 101, 102, 46, 47, 45, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 234, - nil, nil, 240, nil, nil, 63, 64, nil, nil, 65, - nil, 681, nil, nil, nil, 49, nil, nil, nil, nil, - nil, nil, nil, nil, 239, nil, nil, nil, nil, 99, - 87, 90, 91, nil, 92, 94, 93, 95, nil, nil, - nil, nil, 88, 98, nil, nil, nil, 79, 80, 81, - 67, 62, 89, 103, 104, 68, 69, 43, 44, nil, - 72, nil, 70, 71, 73, 322, 323, 77, 78, nil, - nil, nil, nil, nil, 82, 319, 325, 111, 110, 112, - 113, nil, nil, 241, nil, nil, nil, nil, nil, nil, - 50, nil, nil, 115, 114, 116, 105, 61, 107, 106, - 108, 297, 109, 117, 118, nil, 101, 102, 46, 47, - 45, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 234, nil, nil, 240, nil, nil, 63, 64, nil, nil, - 65, nil, nil, nil, 292, nil, 49, nil, nil, 298, - nil, nil, nil, nil, nil, 239, nil, nil, nil, nil, - 99, 295, 90, 91, nil, 92, 94, 93, 95, nil, - nil, nil, nil, 88, 98, nil, nil, nil, 79, 80, - 81, 67, 62, 89, 103, 104, 68, 69, 43, 44, - nil, 72, nil, 70, 71, 73, 322, 323, 77, 78, - nil, nil, nil, nil, nil, 82, 319, 325, 111, 110, - 112, 113, nil, nil, 241, nil, nil, nil, nil, nil, - nil, 50, nil, nil, 115, 114, 116, 105, 61, 107, - 106, 108, nil, 109, 117, 118, nil, 101, 102, 46, - 47, 45, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 234, nil, nil, 240, nil, nil, 63, 64, nil, - nil, 65, nil, nil, nil, nil, nil, 49, nil, nil, - nil, nil, nil, nil, nil, nil, 239, nil, nil, nil, - nil, 99, 87, 90, 91, nil, 92, 94, 93, 95, - nil, nil, nil, nil, 88, 98, nil, nil, nil, 79, - 80, 81, 67, 62, 89, 103, 104, 68, 69, 43, - 44, nil, 72, nil, 70, 71, 73, 32, 33, 77, - 78, nil, nil, nil, nil, nil, 82, 30, 29, 111, - 110, 112, 113, nil, nil, 21, nil, nil, nil, nil, - nil, nil, 50, nil, nil, 115, 114, 116, 105, 61, - 107, 106, 108, nil, 109, 117, 118, nil, 101, 102, - 46, 47, 45, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 234, nil, nil, 240, nil, nil, 63, 64, - nil, nil, 65, nil, nil, nil, nil, nil, 49, nil, - nil, nil, nil, nil, nil, nil, nil, 22, nil, nil, - nil, nil, 99, 87, 90, 91, nil, 92, 94, 93, - 95, nil, nil, nil, nil, 88, 98, nil, nil, nil, - 79, 80, 81, 67, 62, 89, 103, 104, 68, 69, - 43, 44, nil, 72, nil, 70, 71, 73, 32, 33, - 77, 78, nil, nil, nil, nil, nil, 82, 30, 29, - 111, 110, 112, 113, nil, nil, 21, nil, nil, nil, - nil, nil, nil, 50, nil, nil, 115, 114, 116, 105, - 61, 107, 106, 108, nil, 109, 117, 118, nil, 101, - 102, 46, 47, 45, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 234, nil, nil, 240, nil, nil, 63, - 64, nil, nil, 65, nil, nil, nil, nil, nil, 49, - nil, nil, nil, nil, nil, nil, nil, nil, 22, nil, - nil, nil, nil, 99, 87, 90, 91, nil, 92, 94, - 93, 95, nil, nil, nil, nil, 88, 98, nil, nil, - nil, 79, 80, 81, 67, 62, 89, 103, 104, 68, - 69, 43, 44, nil, 72, nil, 70, 71, 73, 32, - 33, 77, 78, nil, nil, nil, nil, nil, 82, 30, - 29, 111, 110, 112, 113, nil, nil, 241, nil, nil, - nil, nil, nil, nil, 50, nil, nil, 115, 114, 116, - 105, 61, 107, 106, 108, 297, 109, 117, 118, nil, - 101, 102, 46, 47, 45, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 234, nil, nil, 240, nil, nil, - 63, 64, nil, nil, 65, nil, 294, nil, 292, nil, - 49, nil, nil, 298, nil, nil, nil, nil, nil, 239, - nil, nil, nil, nil, 99, 295, 90, 91, nil, 92, - 94, 93, 95, nil, nil, nil, nil, 88, 98, nil, - nil, nil, 79, 80, 81, 67, 62, 89, 103, 104, - 68, 69, 43, 44, nil, 72, nil, 70, 71, 73, - 322, 323, 77, 78, nil, nil, nil, nil, nil, 82, - 319, 325, 111, 110, 112, 113, nil, nil, 241, nil, - nil, nil, nil, nil, nil, 320, nil, nil, 115, 114, - 116, 105, 61, 107, 106, 108, nil, 109, 117, 118, - nil, 101, 102, nil, nil, 326, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 316, nil, nil, 312, nil, - nil, 63, 64, nil, nil, 65, nil, 311, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 99, 87, 90, 91, nil, - 92, 94, 93, 95, nil, nil, nil, nil, 88, 98, - nil, nil, nil, 79, 80, 81, 67, 62, 89, 103, - 104, 68, 69, nil, nil, nil, 72, nil, 70, 71, - 73, 322, 323, 77, 78, nil, nil, nil, nil, nil, - 82, 319, 325, 111, 110, 112, 113, nil, nil, 241, - nil, nil, nil, nil, nil, nil, 320, nil, nil, 115, - 114, 116, 105, 61, 107, 106, 108, nil, 109, 117, - 118, nil, 101, 102, nil, nil, 326, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 316, nil, nil, 240, - nil, nil, 63, 64, nil, nil, 65, nil, nil, 724, - nil, 721, 720, 719, 729, 722, nil, nil, nil, nil, - nil, nil, nil, nil, 732, nil, 99, 87, 90, 91, - nil, 92, 94, 93, 95, nil, nil, nil, nil, 88, - 98, nil, nil, nil, 328, nil, 727, 67, nil, 89, - 103, 104, 79, 80, 81, nil, 62, 740, 739, nil, - 68, 69, 733, nil, nil, 72, nil, 70, 71, 73, - 322, 323, 77, 78, nil, nil, nil, nil, nil, 82, - 319, 325, 111, 110, 112, 113, nil, nil, 241, nil, - nil, nil, nil, nil, nil, 320, nil, nil, 115, 114, - 116, 105, 61, 107, 106, 108, nil, 109, 117, 118, - nil, 101, 102, nil, nil, 326, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 364, nil, nil, 35, nil, - nil, 63, 64, nil, nil, 65, nil, 37, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 99, 87, 90, 91, nil, - 92, 94, 93, 95, nil, nil, nil, nil, 88, 98, - nil, nil, nil, 79, 80, 81, 67, 62, 89, 103, - 104, 68, 69, nil, nil, nil, 72, nil, 70, 71, - 73, 322, 323, 77, 78, nil, nil, nil, nil, nil, - 82, 319, 325, 111, 110, 112, 113, nil, nil, 241, - nil, nil, nil, nil, nil, nil, 320, nil, nil, 115, - 114, 116, 369, 61, 107, 106, 370, nil, 109, 117, - 118, nil, 101, 102, nil, nil, 326, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 376, nil, nil, 371, nil, nil, 240, - nil, nil, 63, 64, nil, nil, 65, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 99, 87, 90, 91, - nil, 92, 94, 93, 95, nil, nil, nil, nil, 88, - 98, nil, nil, nil, 79, 80, 81, 67, 62, 89, - 103, 104, 68, 69, nil, nil, nil, 72, nil, 70, - 71, 73, 322, 323, 77, 78, nil, nil, nil, nil, - nil, 82, 319, 325, 111, 110, 112, 113, nil, nil, - 241, nil, nil, nil, nil, nil, nil, 320, nil, nil, - 115, 114, 116, 369, 61, 107, 106, 370, nil, 109, - 117, 118, nil, 101, 102, nil, nil, 326, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 371, nil, nil, - 240, nil, nil, 63, 64, nil, nil, 65, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 99, 87, 90, - 91, nil, 92, 94, 93, 95, nil, nil, nil, nil, - 88, 98, nil, nil, nil, 79, 80, 81, 67, 62, - 89, 103, 104, 68, 69, nil, nil, nil, 72, nil, - 70, 71, 73, 322, 323, 77, 78, nil, nil, nil, - nil, nil, 82, 319, 325, 111, 110, 112, 113, nil, - nil, 241, nil, nil, nil, nil, nil, nil, 320, nil, - nil, 115, 114, 116, 105, 61, 107, 106, 108, nil, - 109, 117, 118, nil, 101, 102, nil, nil, 326, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 316, nil, - nil, 240, nil, nil, 63, 64, nil, nil, 65, nil, - nil, 724, nil, 721, 720, 719, 729, 722, nil, nil, - nil, nil, nil, nil, nil, nil, 732, nil, 99, 87, - 90, 91, nil, 92, 94, 93, 95, nil, nil, nil, - nil, 88, 98, nil, nil, nil, 525, nil, 727, 67, - nil, 89, 103, 104, 79, 80, 81, nil, 62, 740, - 739, nil, 68, 69, 733, nil, nil, 72, nil, 70, - 71, 73, 322, 323, 77, 78, nil, nil, nil, nil, - nil, 82, 319, 325, 111, 110, 112, 113, nil, nil, - 241, nil, nil, nil, nil, nil, nil, 320, nil, nil, - 115, 114, 116, 105, 61, 107, 106, 108, nil, 109, - 117, 118, nil, 101, 102, nil, nil, 326, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 316, nil, nil, - 312, nil, nil, 63, 64, nil, nil, 65, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 99, 87, 90, - 91, nil, 92, 94, 93, 95, nil, nil, nil, nil, - 88, 98, nil, nil, nil, 79, 80, 81, 67, 62, - 89, 103, 104, 68, 69, nil, nil, nil, 72, nil, - 70, 71, 73, 322, 323, 77, 78, nil, nil, nil, - nil, nil, 82, 319, 325, 111, 110, 112, 113, nil, - nil, 241, nil, nil, nil, nil, nil, nil, 320, nil, - nil, 115, 114, 116, 105, 61, 107, 106, 108, nil, - 109, 117, 118, nil, 101, 102, nil, nil, 326, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 316, nil, - nil, 312, nil, nil, 63, 64, nil, nil, 65, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 99, 87, - 90, 91, nil, 92, 94, 93, 95, nil, nil, nil, - nil, 88, 98, nil, nil, nil, 79, 80, 81, 67, - 62, 89, 103, 104, 68, 69, nil, nil, nil, 72, - nil, 70, 71, 73, 322, 323, 77, 78, nil, nil, - nil, nil, nil, 82, 319, 325, 111, 110, 112, 113, - nil, nil, 241, nil, nil, nil, nil, nil, nil, 320, - nil, nil, 115, 114, 116, 105, 61, 107, 106, 108, - nil, 109, 117, 118, nil, 101, 102, nil, nil, 326, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 316, - nil, nil, 312, nil, nil, 63, 64, nil, nil, 65, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 99, - 87, 90, 91, nil, 92, 94, 93, 95, nil, nil, - nil, nil, 88, 98, nil, nil, nil, 79, 80, 81, - 67, 62, 89, 103, 104, 68, 69, nil, nil, nil, - 72, nil, 70, 71, 73, 322, 323, 77, 78, nil, - nil, nil, nil, nil, 82, 319, 325, 111, 110, 112, - 113, nil, nil, 241, nil, nil, nil, nil, nil, nil, - 320, nil, nil, 115, 114, 116, 105, 61, 107, 106, - 108, nil, 109, 117, 118, nil, 101, 102, nil, nil, - 326, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 316, nil, nil, 312, nil, nil, 63, 64, nil, nil, - 65, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 99, 87, 90, 91, nil, 92, 94, 93, 95, nil, - nil, nil, nil, 88, 98, nil, nil, nil, 79, 80, - 81, 67, 62, 89, 103, 104, 68, 69, nil, nil, - nil, 72, nil, 70, 71, 73, 322, 323, 77, 78, - nil, nil, nil, nil, nil, 82, 319, 325, 111, 110, - 112, 113, nil, nil, 241, nil, nil, nil, nil, nil, - nil, 320, nil, nil, 115, 114, 116, 105, 61, 107, - 106, 108, nil, 109, 117, 118, nil, 101, 102, nil, - nil, 326, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 316, nil, nil, 312, nil, nil, 63, 64, nil, - nil, 65, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 99, 87, 90, 91, nil, 92, 94, 93, 95, - nil, nil, nil, nil, 88, 98, nil, nil, nil, 79, - 80, 81, 67, 62, 89, 103, 104, 68, 69, nil, - nil, nil, 72, nil, 70, 71, 73, 322, 323, 77, - 78, nil, nil, nil, nil, nil, 82, 319, 325, 111, - 110, 112, 113, nil, nil, 241, nil, nil, nil, nil, - nil, nil, 320, nil, nil, 115, 114, 116, 105, 61, - 107, 106, 108, nil, 109, 117, 118, nil, 101, 102, - nil, nil, 326, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 1055, nil, nil, 240, nil, nil, 63, 64, - nil, nil, 65, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 99, 87, 90, 91, nil, 92, 94, 93, - 95, nil, nil, nil, nil, 88, 98, nil, nil, nil, - 79, 80, 81, 67, 62, 89, 103, 104, 68, 69, - nil, nil, nil, 72, nil, 70, 71, 73, 322, 323, - 77, 78, nil, nil, nil, nil, nil, 82, 319, 325, - 111, 110, 112, 113, nil, nil, 241, nil, nil, nil, - nil, nil, nil, 320, nil, nil, 115, 114, 116, 105, - 61, 107, 106, 108, nil, 109, 117, 118, nil, 101, - 102, nil, nil, 326, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 1061, nil, nil, 240, nil, nil, 63, - 64, nil, nil, 65, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 99, 87, 90, 91, nil, 92, 94, - 93, 95, nil, nil, nil, nil, 88, 98, nil, nil, - nil, 79, 80, 81, 67, 62, 89, 103, 104, 68, - 69, nil, nil, nil, 72, nil, 70, 71, 73, 322, - 323, 77, 78, nil, nil, nil, nil, nil, 82, 319, - 325, 111, 110, 112, 113, nil, nil, 241, nil, nil, - nil, nil, nil, nil, 320, nil, nil, 115, 114, 116, - 105, 61, 107, 106, 108, nil, 109, 117, 118, nil, - 101, 102, nil, nil, 326, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 1055, nil, nil, 240, nil, nil, - 63, 64, nil, nil, 65, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 99, 87, 90, 91, nil, 92, - 94, 93, 95, nil, nil, nil, nil, 88, 98, nil, - nil, nil, nil, nil, nil, 67, nil, 89, 103, 104, - 182, 193, 183, 206, 179, 199, 189, 188, 209, 210, - 204, 187, 186, 181, 207, 211, 212, 191, 180, 194, - 198, 200, 192, 185, nil, nil, nil, 201, 208, 203, - 202, 195, 205, 190, 178, 197, 196, nil, nil, nil, - nil, nil, 177, 184, 175, 176, 172, 173, 174, 135, - 137, 134, nil, 136, nil, nil, nil, nil, nil, nil, - nil, 166, 167, nil, 163, 145, 146, 147, 154, 151, - 153, nil, nil, 148, 149, nil, nil, nil, 168, 169, - 155, 156, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 160, 159, nil, 144, 165, - 162, 161, 170, 157, 158, 152, 150, 142, 164, 143, - nil, nil, 171, 99, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 98, 182, 193, - 183, 206, 179, 199, 189, 188, 209, 210, 204, 187, - 186, 181, 207, 211, 212, 191, 180, 194, 198, 200, - 192, 185, nil, nil, nil, 201, 208, 203, 202, 195, - 205, 190, 178, 197, 196, nil, nil, nil, nil, nil, - 177, 184, 175, 176, 172, 173, 174, 135, 137, nil, - nil, 136, nil, nil, nil, nil, nil, nil, nil, 166, - 167, nil, 163, 145, 146, 147, 154, 151, 153, nil, - nil, 148, 149, nil, nil, nil, 168, 169, 155, 156, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 160, 159, nil, 144, 165, 162, 161, - 170, 157, 158, 152, 150, 142, 164, 143, nil, nil, - 171, 99, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 98, 182, 193, 183, 206, - 179, 199, 189, 188, 209, 210, 204, 187, 186, 181, - 207, 211, 212, 191, 180, 194, 198, 200, 192, 185, - nil, nil, nil, 201, 208, 203, 202, 195, 205, 190, - 178, 197, 196, nil, nil, nil, nil, nil, 177, 184, - 175, 176, 172, 173, 174, 135, 137, nil, nil, 136, - nil, nil, nil, nil, nil, nil, nil, 166, 167, nil, - 163, 145, 146, 147, 154, 151, 153, nil, nil, 148, - 149, nil, nil, nil, 168, 169, 155, 156, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 160, 159, nil, 144, 165, 162, 161, 170, 157, - 158, 152, 150, 142, 164, 143, nil, nil, 171, 99, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 98, 182, 193, 183, 206, 179, 199, - 189, 188, 209, 210, 204, 187, 186, 181, 207, 211, - 212, 191, 180, 194, 198, 200, 192, 185, nil, nil, - nil, 201, 208, 203, 202, 195, 205, 190, 178, 197, - 196, nil, nil, nil, nil, nil, 177, 184, 175, 176, - 172, 173, 174, 135, 137, nil, nil, 136, nil, nil, - nil, nil, nil, nil, nil, 166, 167, nil, 163, 145, - 146, 147, 154, 151, 153, nil, nil, 148, 149, nil, - nil, nil, 168, 169, 155, 156, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 160, - 159, nil, 144, 165, 162, 161, 170, 157, 158, 152, - 150, 142, 164, 143, nil, nil, 171, 99, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 98, 182, 193, 183, 206, 179, 199, 189, 188, - 209, 210, 204, 187, 186, 181, 207, 211, 212, 191, - 180, 194, 198, 200, 192, 185, nil, nil, nil, 201, - 208, 203, 387, 386, 388, 385, 178, 197, 196, nil, - nil, nil, nil, nil, 177, 184, 175, 176, 382, 383, - 384, 380, 137, 107, 106, 381, nil, 109, nil, nil, - nil, nil, nil, 166, 167, nil, 163, 145, 146, 147, - 154, 151, 153, nil, nil, 148, 149, nil, nil, nil, - 168, 169, 155, 156, nil, nil, nil, nil, nil, 392, - nil, nil, nil, nil, nil, nil, nil, 160, 159, nil, - 144, 165, 162, 161, 170, 157, 158, 152, 150, 142, - 164, 143, nil, nil, 171, 111, 110, 112, 113, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 115, 114, 116, 661, nil, nil, 724, 664, 721, - 720, 719, 729, 722, 101, 102, nil, nil, 326, nil, - nil, nil, 732, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 663, nil, - nil, 645, nil, nil, 727, 643, nil, nil, 644, nil, - nil, nil, nil, 737, 736, 740, 739, nil, nil, nil, - 733, nil, nil, nil, 662, nil, nil, nil, 99, 87, - 90, 91, nil, 92, 94, 93, 95, nil, nil, nil, - nil, 88, 98, nil, nil, nil, nil, nil, nil, 660, - nil, 89, 103, 104, nil, nil, 649, 650, 182, 193, - 183, 206, 179, 199, 189, 188, 209, 210, 204, 187, - 186, 181, 207, 211, 212, 191, 180, 194, 198, 200, - 192, 185, nil, nil, nil, 201, 208, 203, 202, 195, - 205, 190, 178, 197, 196, nil, nil, nil, nil, nil, - 177, 184, 175, 176, 172, 173, 174, 135, 137, nil, - nil, 136, nil, nil, nil, nil, nil, nil, nil, 166, - 167, nil, 163, 145, 146, 147, 154, 151, 153, nil, - nil, 148, 149, nil, nil, nil, 168, 169, 155, 156, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 160, 159, nil, 144, 165, 162, 161, - 170, 157, 158, 152, 150, 142, 164, 143, nil, nil, - 171, 111, 110, 112, 113, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 115, 114, 116, - 661, nil, nil, 724, 664, 721, 720, 719, 729, 722, - 101, 102, nil, nil, 326, nil, nil, nil, 732, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 663, nil, nil, 645, nil, nil, - 727, 643, nil, nil, 644, nil, nil, nil, nil, 737, - 736, 740, 739, nil, nil, nil, 733, nil, nil, nil, - 662, nil, nil, nil, 99, 87, 90, 91, nil, 92, - 94, 93, 95, nil, nil, nil, nil, 88, 98, 111, - 110, 112, 113, nil, nil, 660, nil, 89, 103, 104, - nil, nil, 649, 650, nil, 115, 114, 116, 661, nil, - nil, nil, 664, 935, nil, nil, nil, nil, 101, 102, - nil, nil, 326, 732, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 663, nil, nil, 645, nil, nil, nil, 643, - nil, nil, 644, nil, 929, nil, nil, nil, nil, nil, - nil, 733, nil, nil, nil, nil, nil, nil, 662, nil, - nil, nil, 99, 936, 90, 91, nil, 92, 94, 93, - 95, nil, nil, nil, nil, 88, 98, 111, 110, 112, - 113, nil, nil, 660, nil, 89, 103, 104, nil, nil, - 649, 650, nil, 115, 114, 116, 661, nil, nil, nil, - 664, 935, nil, nil, nil, nil, 101, 102, nil, nil, - 326, 732, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 663, nil, nil, 645, nil, nil, nil, 643, nil, nil, - 644, nil, 929, nil, nil, nil, nil, nil, nil, 733, - nil, nil, nil, nil, nil, nil, 662, nil, nil, nil, - 99, 936, 90, 91, nil, 92, 94, 93, 95, nil, - nil, nil, nil, 88, 98, 111, 110, 112, 113, nil, - nil, 660, nil, 89, 103, 104, nil, nil, 649, 650, - nil, 115, 114, 116, 661, nil, nil, 724, 664, 721, - 720, 719, 729, 722, 101, 102, nil, nil, 326, nil, - nil, nil, 732, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 663, nil, - nil, 645, nil, nil, 727, 643, nil, nil, 644, nil, - 929, nil, nil, 737, 736, 740, 739, nil, nil, nil, - 733, nil, nil, nil, 662, nil, nil, nil, 99, 87, - 90, 91, nil, 92, 94, 93, 95, nil, nil, nil, - nil, 88, 98, 111, 110, 112, 113, nil, nil, 660, - nil, 89, 103, 104, nil, nil, 649, 650, nil, 115, - 114, 116, 661, nil, nil, 724, 664, 721, 720, 719, - 729, 722, 101, 102, nil, nil, 326, nil, nil, nil, - 732, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 663, nil, nil, 645, - nil, nil, 727, 643, nil, nil, 644, nil, nil, nil, - nil, 737, 736, 740, 739, nil, nil, nil, 733, nil, - nil, nil, 662, nil, nil, nil, 99, 87, 90, 91, - nil, 92, 94, 93, 95, nil, nil, nil, nil, 88, - 98, 111, 110, 112, 113, nil, nil, 660, nil, 89, - 103, 104, nil, nil, 649, 650, nil, 115, 114, 116, - 661, nil, nil, nil, 664, 935, nil, nil, nil, nil, - 101, 102, nil, nil, 326, 732, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 663, nil, nil, 645, nil, nil, - nil, 643, nil, nil, 644, nil, 929, nil, nil, nil, - nil, nil, nil, 733, nil, nil, nil, nil, nil, nil, - 662, nil, nil, nil, 99, 936, 90, 91, nil, 92, - 94, 93, 95, nil, nil, nil, nil, 88, 98, 111, - 110, 112, 113, nil, nil, 660, nil, 89, 103, 104, - nil, nil, 649, 650, nil, 115, 114, 116, 661, nil, - nil, 724, 664, 721, 720, 719, 729, 722, 101, 102, - nil, nil, 326, nil, nil, nil, 732, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 663, nil, nil, 645, nil, nil, 727, 643, - nil, nil, 644, nil, 1024, nil, nil, 737, 736, 740, - 739, nil, nil, nil, 733, nil, nil, nil, 662, nil, - nil, nil, 99, 87, 90, 91, nil, 92, 94, 93, - 95, nil, nil, nil, nil, 88, 98, 111, 110, 112, - 113, nil, nil, 660, nil, 89, 103, 104, nil, nil, - 649, 650, nil, 115, 114, 116, 661, nil, nil, 724, - 664, 721, 720, 719, 729, 722, 101, 102, nil, nil, - 326, nil, nil, nil, 732, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 663, nil, nil, 645, nil, nil, 727, 643, nil, nil, - 644, nil, nil, nil, nil, 737, 736, 740, 739, nil, - nil, nil, 733, nil, nil, nil, 662, nil, nil, nil, - 99, 87, 90, 91, nil, 92, 94, 93, 95, nil, - nil, nil, nil, 88, 98, 111, 110, 112, 113, nil, - nil, 660, nil, 89, 103, 104, nil, nil, 649, 650, - nil, 115, 114, 116, 661, nil, nil, 724, 664, 721, - 720, 719, 729, 722, 101, 102, nil, nil, 326, nil, - nil, nil, 732, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 663, nil, - nil, 645, nil, nil, 727, 643, nil, nil, 644, nil, - nil, nil, nil, 737, 736, 740, 739, nil, nil, nil, - 733, nil, nil, nil, 662, nil, nil, nil, 99, 87, - 90, 91, nil, 92, 94, 93, 95, nil, nil, nil, - nil, 88, 98, 111, 110, 112, 113, nil, nil, 660, - nil, 89, 103, 104, nil, nil, 649, 650, nil, 115, - 114, 116, 661, nil, nil, 724, 664, 721, 720, 719, - 729, 722, 101, 102, nil, nil, 326, nil, nil, nil, - 732, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 663, nil, nil, 645, - nil, nil, 727, 643, nil, nil, 644, nil, 929, nil, - nil, nil, nil, 740, 739, nil, nil, nil, 733, nil, - nil, nil, 662, nil, nil, nil, 99, 87, 90, 91, - nil, 92, 94, 93, 95, nil, nil, nil, nil, 88, - 98, 111, 110, 112, 113, nil, nil, 660, nil, 89, - 103, 104, nil, nil, 649, 650, nil, 115, 114, 116, - 661, nil, nil, 724, 664, 721, 720, 719, 729, 722, - 101, 102, nil, nil, 326, nil, nil, nil, 732, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 663, nil, nil, 645, nil, nil, - 727, 643, nil, nil, 644, nil, nil, nil, nil, nil, - nil, 740, 739, nil, nil, nil, 733, nil, nil, nil, - 662, nil, nil, nil, 99, 87, 90, 91, nil, 92, - 94, 93, 95, nil, nil, nil, nil, 88, 98, 111, - 110, 112, 113, nil, nil, 660, nil, 89, 103, 104, - nil, nil, 649, 650, nil, 115, 114, 116, 661, nil, - nil, 724, 664, 721, 720, 719, 729, 722, 101, 102, - nil, nil, 326, nil, nil, nil, 732, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 663, nil, nil, 645, nil, nil, 727, 643, - nil, nil, 644, nil, nil, nil, nil, 737, 736, 740, - 739, nil, nil, nil, 733, nil, nil, nil, 662, nil, - nil, nil, 99, 87, 90, 91, nil, 92, 94, 93, - 95, nil, nil, nil, nil, 88, 98, 111, 110, 112, - 113, nil, nil, 660, nil, 89, 103, 104, nil, nil, - 649, 650, nil, 115, 114, 116, 661, nil, nil, 724, - 664, 721, 720, 719, 729, 722, 101, 102, nil, nil, - 326, nil, nil, nil, 732, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 663, nil, nil, 645, nil, nil, 727, 643, nil, nil, - 644, nil, nil, nil, nil, nil, nil, 740, 739, nil, - nil, nil, 733, nil, nil, nil, 662, nil, nil, nil, - 99, 87, 90, 91, nil, 92, 94, 93, 95, nil, - nil, nil, nil, 88, 98, 111, 110, 112, 113, nil, - nil, 660, nil, 89, 103, 104, nil, nil, 649, 650, - nil, 115, 114, 116, 661, nil, nil, nil, 664, nil, - nil, nil, nil, nil, 101, 102, nil, nil, 326, nil, - nil, nil, nil, nil, nil, nil, 111, 110, 112, 113, - nil, nil, nil, nil, nil, nil, nil, nil, 663, nil, - nil, 645, 115, 114, 116, 643, nil, nil, 644, nil, - nil, nil, nil, nil, nil, 101, 102, nil, nil, 326, - nil, nil, nil, nil, 662, nil, nil, nil, 99, 87, - 90, 91, nil, 92, 94, 93, 95, nil, nil, nil, - nil, 88, 98, nil, nil, nil, nil, nil, nil, 660, - nil, 89, 103, 104, nil, nil, 649, 650, 724, nil, - 721, 720, 719, 729, 722, nil, nil, nil, nil, 99, - 87, 90, 91, 732, 92, 94, 93, 95, nil, nil, - nil, nil, 88, 98, 111, 110, 112, 113, nil, nil, - 660, nil, 89, 103, 104, 727, nil, nil, nil, nil, - 115, 114, 116, nil, nil, nil, 740, 739, nil, nil, - nil, 733, nil, 101, 102, nil, nil, 326, 111, 110, - 112, 113, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 115, 114, 116, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 101, 102, nil, - nil, 326, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 99, 87, 90, - 91, nil, 92, 94, 93, 95, nil, nil, nil, nil, - 88, 98, nil, nil, nil, nil, nil, nil, 660, nil, - 89, 103, 104, nil, nil, nil, nil, nil, nil, nil, - nil, 99, 87, 90, 91, nil, 92, 94, 93, 95, - nil, nil, nil, nil, 88, 98, 441, 445, nil, nil, - 442, nil, 660, nil, 89, 103, 104, nil, 166, 167, - nil, 163, 145, 146, 147, 154, 151, 153, nil, nil, - 148, 149, nil, nil, nil, 168, 169, 155, 156, nil, - nil, nil, nil, nil, 276, nil, nil, nil, nil, nil, - nil, nil, 160, 159, nil, 144, 165, 162, 161, 170, - 157, 158, 152, 150, 142, 164, 143, 448, 452, 171, - nil, 447, nil, nil, nil, nil, nil, nil, nil, 166, - 167, nil, 163, 145, 146, 147, 154, 151, 153, nil, - nil, 148, 149, nil, nil, nil, 168, 169, 155, 156, - nil, nil, nil, nil, nil, 276, nil, nil, nil, nil, - nil, nil, nil, 160, 159, nil, 144, 165, 162, 161, - 170, 157, 158, 152, 150, 142, 164, 143, 493, 445, - 171, nil, 494, nil, nil, nil, nil, nil, nil, nil, - 166, 167, nil, 163, 145, 146, 147, 154, 151, 153, - nil, nil, 148, 149, nil, nil, nil, 168, 169, 155, - 156, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 160, 159, nil, 144, 165, 162, - 161, 170, 157, 158, 152, 150, 142, 164, 143, 632, - 445, 171, nil, 633, nil, nil, nil, nil, nil, nil, - nil, 166, 167, nil, 163, 145, 146, 147, 154, 151, - 153, nil, nil, 148, 149, nil, nil, nil, 168, 169, - 155, 156, nil, nil, nil, nil, nil, 276, nil, nil, - nil, nil, nil, nil, nil, 160, 159, nil, 144, 165, - 162, 161, 170, 157, 158, 152, 150, 142, 164, 143, - 634, 452, 171, nil, 635, nil, nil, nil, nil, nil, - nil, nil, 166, 167, nil, 163, 145, 146, 147, 154, - 151, 153, nil, nil, 148, 149, nil, nil, nil, 168, - 169, 155, 156, nil, nil, nil, nil, nil, 276, nil, - nil, nil, nil, nil, nil, nil, 160, 159, nil, 144, - 165, 162, 161, 170, 157, 158, 152, 150, 142, 164, - 143, 691, 445, 171, nil, 692, nil, nil, nil, nil, - nil, nil, nil, 166, 167, nil, 163, 145, 146, 147, - 154, 151, 153, nil, nil, 148, 149, nil, nil, nil, - 168, 169, 155, 156, nil, nil, nil, nil, nil, 276, - nil, nil, nil, nil, nil, nil, nil, 160, 159, nil, - 144, 165, 162, 161, 170, 157, 158, 152, 150, 142, - 164, 143, 694, 452, 171, nil, 695, nil, nil, nil, - nil, nil, nil, nil, 166, 167, nil, 163, 145, 146, - 147, 154, 151, 153, nil, nil, 148, 149, nil, nil, - nil, 168, 169, 155, 156, nil, nil, nil, nil, nil, - 276, nil, nil, nil, nil, nil, nil, nil, 160, 159, - nil, 144, 165, 162, 161, 170, 157, 158, 152, 150, - 142, 164, 143, 632, 445, 171, nil, 633, nil, nil, - nil, nil, nil, nil, nil, 166, 167, nil, 163, 145, - 146, 147, 154, 151, 153, nil, nil, 148, 149, nil, - nil, nil, 168, 169, 155, 156, nil, nil, nil, nil, - nil, 276, nil, nil, nil, nil, nil, nil, nil, 160, - 159, nil, 144, 165, 162, 161, 170, 157, 158, 152, - 150, 142, 164, 143, 634, 452, 171, nil, 635, nil, - nil, nil, nil, nil, nil, nil, 166, 167, nil, 163, - 145, 146, 147, 154, 151, 153, nil, nil, 148, 149, - nil, nil, nil, 168, 169, 155, 156, nil, nil, nil, - nil, nil, 276, nil, nil, nil, nil, nil, nil, nil, - 160, 159, nil, 144, 165, 162, 161, 170, 157, 158, - 152, 150, 142, 164, 143, 756, 445, 171, nil, 757, - nil, nil, nil, nil, nil, nil, nil, 166, 167, nil, - 163, 145, 146, 147, 154, 151, 153, nil, nil, 148, - 149, nil, nil, nil, 168, 169, 155, 156, nil, nil, - nil, nil, nil, 276, nil, nil, nil, nil, nil, nil, - nil, 160, 159, nil, 144, 165, 162, 161, 170, 157, - 158, 152, 150, 142, 164, 143, 758, 452, 171, nil, - 759, nil, nil, nil, nil, nil, nil, nil, 166, 167, - nil, 163, 145, 146, 147, 154, 151, 153, nil, nil, - 148, 149, nil, nil, nil, 168, 169, 155, 156, nil, - nil, nil, nil, nil, 276, nil, nil, nil, nil, nil, - nil, nil, 160, 159, nil, 144, 165, 162, 161, 170, - 157, 158, 152, 150, 142, 164, 143, 761, 452, 171, - nil, 762, nil, nil, nil, nil, nil, nil, nil, 166, - 167, nil, 163, 145, 146, 147, 154, 151, 153, nil, - nil, 148, 149, nil, nil, nil, 168, 169, 155, 156, - nil, nil, nil, nil, nil, 276, nil, nil, nil, nil, - nil, nil, nil, 160, 159, nil, 144, 165, 162, 161, - 170, 157, 158, 152, 150, 142, 164, 143, 493, 445, - 171, nil, 494, nil, nil, nil, nil, nil, nil, nil, - 166, 167, nil, 163, 145, 146, 147, 154, 151, 153, - nil, nil, 148, 149, nil, nil, nil, 168, 169, 155, - 156, nil, nil, nil, nil, nil, 276, nil, nil, nil, - nil, nil, nil, nil, 160, 159, nil, 144, 165, 162, - 161, 170, 157, 158, 152, 150, 142, 164, 143, 791, - 445, 171, nil, 792, nil, nil, nil, nil, nil, nil, - nil, 166, 167, nil, 163, 145, 146, 147, 154, 151, - 153, nil, nil, 148, 149, nil, nil, nil, 168, 169, - 155, 156, nil, nil, nil, nil, nil, 276, nil, nil, - nil, nil, nil, nil, nil, 160, 159, nil, 144, 165, - 162, 161, 170, 157, 158, 152, 150, 142, 164, 143, - 794, 452, 171, nil, 793, nil, nil, nil, nil, nil, - nil, nil, 166, 167, nil, 163, 145, 146, 147, 154, - 151, 153, nil, nil, 148, 149, nil, nil, nil, 168, - 169, 155, 156, nil, nil, nil, nil, nil, 276, nil, - nil, nil, nil, nil, nil, nil, 160, 159, nil, 144, - 165, 162, 161, 170, 157, 158, 152, 150, 142, 164, - 143, 1156, 452, 171, nil, 1155, nil, nil, nil, nil, - nil, nil, nil, 166, 167, nil, 163, 145, 146, 147, - 154, 151, 153, nil, nil, 148, 149, nil, nil, nil, - 168, 169, 155, 156, nil, nil, nil, nil, nil, 276, - nil, nil, nil, nil, nil, nil, nil, 160, 159, nil, - 144, 165, 162, 161, 170, 157, 158, 152, 150, 142, - 164, 143, 1159, 445, 171, nil, 1160, nil, nil, nil, - nil, nil, nil, nil, 166, 167, nil, 163, 145, 146, - 147, 154, 151, 153, nil, nil, 148, 149, nil, nil, - nil, 168, 169, 155, 156, nil, nil, nil, nil, nil, - 276, nil, nil, nil, nil, nil, nil, nil, 160, 159, - nil, 144, 165, 162, 161, 170, 157, 158, 152, 150, - 142, 164, 143, 1161, 452, 171, nil, 1162, nil, nil, - nil, nil, nil, nil, nil, 166, 167, nil, 163, 145, - 146, 147, 154, 151, 153, nil, nil, 148, 149, nil, - nil, nil, 168, 169, 155, 156, nil, nil, nil, nil, - nil, 276, nil, nil, nil, nil, nil, nil, nil, 160, - 159, nil, 144, 165, 162, 161, 170, 157, 158, 152, - 150, 142, 164, 143, nil, 724, 171, 721, 720, 719, - 729, 722, 724, nil, 721, 720, 719, 729, 722, 724, - 732, 721, 720, 719, 729, 722, nil, 732, nil, nil, - nil, nil, nil, nil, 732, nil, nil, nil, nil, nil, - nil, nil, 727, nil, nil, nil, nil, nil, nil, 727, - nil, nil, nil, 740, 739, nil, 727, nil, 733, nil, - 740, 739, nil, nil, nil, 733, nil, 740, 739, nil, - nil, nil, 733 ] - -racc_action_check = [ - 105, 457, 457, 584, 584, 1, 361, 105, 105, 105, - 923, 353, 105, 105, 105, 18, 105, 28, 945, 929, - 5, 21, 18, 354, 105, 5, 105, 105, 105, 701, - 701, 18, 734, 399, 362, 365, 105, 105, 754, 105, - 105, 105, 105, 105, 973, 1000, 1002, 1058, 1059, 817, - 734, 570, 134, 1172, 1062, 371, 923, 134, 134, 371, - 66, 945, 21, 1172, 756, 757, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 18, 28, 105, 105, 105, 3, 105, 105, 561, 817, - 105, 863, 898, 105, 105, 457, 105, 584, 105, 399, - 105, 929, 105, 105, 28, 105, 105, 105, 105, 105, - 1123, 105, 108, 105, 1159, 361, 669, 580, 580, 108, - 108, 108, 1024, 701, 108, 108, 108, 105, 108, 353, - 105, 105, 105, 105, 353, 105, 108, 105, 108, 108, - 108, 354, 105, 362, 365, 105, 354, 66, 108, 108, - 1160, 108, 108, 108, 108, 108, 754, 1161, 1181, 754, - 570, 754, 973, 1000, 1002, 1058, 1059, 973, 1000, 1002, - 1058, 1059, 1062, 756, 757, 758, 759, 1062, 108, 108, - 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, - 108, 108, 561, 1162, 108, 108, 108, 561, 108, 108, - 863, 898, 108, 669, 1024, 108, 108, 644, 108, 9, - 108, 580, 108, 595, 108, 108, 580, 108, 108, 108, - 108, 108, 447, 108, 644, 108, 1004, 232, 1123, 447, - 447, 447, 1159, 1123, 1161, 447, 447, 1159, 447, 108, - 758, 759, 108, 108, 108, 108, 447, 108, 233, 108, - 321, 937, 663, 394, 108, 400, 663, 108, 447, 447, - 691, 447, 447, 447, 447, 447, 45, 45, 1160, 937, - 1162, 12, 1004, 1160, 692, 1161, 1181, 595, 595, 235, - 1161, 1181, 326, 326, 758, 759, 232, 595, 447, 447, - 447, 447, 447, 447, 447, 447, 447, 447, 447, 447, - 447, 447, 14, 26, 447, 447, 447, 233, 447, 821, - 26, 1162, 447, 821, 321, 447, 1162, 394, 394, 394, - 447, 400, 447, 597, 447, 447, 691, 447, 447, 447, - 447, 447, 426, 447, 448, 447, 15, 321, 235, 463, - 692, 448, 448, 448, 45, 45, 643, 448, 448, 447, - 448, 17, 447, 447, 818, 447, 51, 447, 448, 448, - 326, 326, 852, 51, 447, 24, 691, 447, 26, 691, - 448, 448, 51, 448, 448, 448, 448, 448, 39, 380, - 692, 691, 643, 692, 694, 42, 380, 597, 597, 513, - 818, 426, 632, 1030, 301, 692, 50, 597, 463, 301, - 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, - 448, 448, 448, 448, 564, 824, 448, 448, 448, 231, - 448, 51, 564, 213, 448, 824, 231, 448, 852, 633, - 1037, 234, 448, 791, 448, 231, 448, 448, 395, 448, - 448, 448, 448, 448, 380, 448, 448, 448, 236, 694, - 694, 632, 237, 513, 513, 513, 396, 1030, 1030, 1030, - 19, 448, 397, 824, 448, 448, 369, 448, 852, 448, - 513, 852, 398, 634, 1030, 824, 448, 16, 16, 448, - 634, 634, 634, 852, 231, 634, 634, 634, 633, 634, - 694, 241, 791, 694, 1037, 1037, 686, 634, 634, 634, - 634, 634, 395, 395, 395, 694, 370, 19, 686, 634, - 634, 1037, 634, 634, 634, 634, 634, 275, 369, 19, - 396, 396, 396, 401, 642, 369, 397, 397, 397, 642, - 369, 792, 289, 642, 369, 814, 398, 398, 398, 634, - 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, - 634, 634, 634, 369, 40, 634, 634, 634, 370, 634, - 634, 344, 290, 634, 344, 370, 634, 634, 293, 634, - 370, 634, 914, 634, 370, 634, 634, 305, 634, 634, - 634, 634, 634, 369, 634, 634, 634, 401, 401, 401, - 792, 313, 381, 370, 814, 314, 48, 48, 313, 381, - 634, 40, 314, 634, 634, 634, 634, 313, 634, 382, - 634, 314, 635, 40, 306, 634, 382, 41, 634, 635, - 635, 635, 308, 370, 635, 635, 635, 315, 635, 352, - 352, 914, 48, 48, 315, 383, 635, 309, 635, 635, - 635, 358, 383, 315, 345, 310, 358, 345, 635, 635, - 330, 635, 635, 635, 635, 635, 313, 381, 316, 317, - 314, 331, 384, 385, 41, 319, 317, 902, 331, 384, - 385, 1008, 902, 1008, 382, 317, 41, 331, 635, 635, - 635, 635, 635, 635, 635, 635, 635, 635, 635, 635, - 635, 635, 315, 1028, 635, 635, 635, 330, 635, 635, - 383, 320, 635, 1028, 386, 635, 635, 325, 635, 330, - 635, 386, 635, 348, 635, 635, 348, 635, 635, 635, - 635, 635, 793, 635, 317, 635, 331, 384, 385, 793, - 793, 793, 910, 646, 646, 793, 793, 910, 793, 635, - 327, 1028, 635, 635, 635, 635, 793, 635, 387, 635, - 742, 742, 334, 1028, 635, 387, 336, 635, 793, 793, - 342, 793, 793, 793, 793, 793, 346, 441, 347, 386, - 770, 363, 770, 770, 770, 770, 770, 349, 363, 388, - 8, 8, 8, 8, 8, 770, 388, 363, 793, 793, - 793, 793, 793, 793, 793, 793, 793, 793, 793, 793, - 793, 793, 359, 390, 793, 793, 793, 770, 793, 360, - 390, 364, 793, 387, 441, 793, 770, 770, 770, 770, - 793, 366, 793, 770, 793, 793, 441, 793, 793, 793, - 793, 793, 442, 793, 794, 793, 363, 707, 375, 85, - 707, 794, 794, 794, 388, 868, 868, 794, 794, 793, - 794, 85, 793, 793, 409, 793, 415, 793, 794, 794, - 417, 85, 1112, 770, 793, 1112, 418, 793, 390, 420, - 794, 794, 423, 794, 794, 794, 794, 794, 427, 442, - 1003, 1003, 1015, 373, 1015, 1015, 1015, 1015, 1015, 470, - 373, 442, 882, 437, 882, 882, 882, 1015, 882, 373, - 794, 794, 794, 794, 794, 794, 794, 794, 794, 794, - 794, 794, 794, 794, 1132, 1132, 794, 794, 794, 1015, - 794, 470, 471, 439, 794, 470, 470, 794, 1015, 1015, - 1015, 1015, 794, 440, 794, 1015, 794, 794, 449, 794, - 794, 794, 794, 794, 617, 794, 794, 794, 373, 459, - 425, 472, 473, 474, 471, 530, 573, 425, 471, 471, - 475, 794, 530, 573, 794, 794, 425, 794, 498, 794, - 1054, 530, 573, 499, 500, 1015, 794, 1054, 504, 794, - 2, 2, 2, 2, 2, 2, 1054, 520, 521, 2, - 2, 617, 524, 526, 2, 761, 2, 2, 2, 2, - 2, 2, 2, 617, 531, 534, 543, 544, 2, 2, - 2, 2, 2, 2, 2, 425, 545, 2, 546, 558, - 530, 573, 562, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 1054, 2, 2, 2, 695, - 2, 2, 2, 2, 2, 762, 695, 761, 563, 1060, - 565, 695, 762, 582, 761, 695, 1060, 762, 592, 761, - 600, 762, 602, 761, 2, 1060, 609, 2, 618, 623, - 2, 2, 1116, 628, 2, 636, 2, 637, 639, 1116, - 2, 662, 761, 665, 666, 668, 588, 588, 1116, 2, - 588, 588, 588, 674, 2, 2, 2, 2, 675, 2, - 2, 2, 2, 676, 695, 678, 680, 2, 2, 688, - 762, 690, 761, 693, 1060, 2, 696, 2, 2, 2, - 697, 700, 2, 2, 35, 35, 35, 35, 35, 35, - 702, 711, 712, 35, 35, 713, 715, 1116, 35, 716, - 35, 35, 35, 35, 35, 35, 35, 23, 717, 726, - 738, 741, 35, 35, 35, 35, 35, 35, 35, 744, - 1052, 35, 1052, 1052, 1052, 750, 1052, 35, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 751, - 35, 35, 35, 755, 35, 35, 35, 35, 35, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 764, 23, 23, 768, 788, 23, 23, 790, 35, 799, - 815, 35, 865, 826, 35, 35, 838, 841, 35, 842, - 35, 23, 865, 23, 35, 23, 23, 851, 23, 23, - 23, 23, 23, 35, 23, 855, 858, 859, 35, 35, - 35, 35, 864, 35, 35, 35, 35, 880, 881, 883, - 889, 35, 35, 892, 23, 865, 865, 899, 901, 35, - 865, 35, 35, 35, 905, 906, 35, 35, 132, 132, - 132, 132, 132, 132, 907, 908, 912, 132, 132, 913, - 924, 925, 132, 928, 132, 132, 132, 132, 132, 132, - 132, 304, 304, 304, 304, 304, 132, 132, 132, 132, - 132, 132, 132, 930, 938, 132, 939, 941, 942, 953, - 430, 132, 132, 132, 132, 132, 132, 132, 132, 132, - 132, 132, 132, 954, 132, 132, 132, 955, 132, 132, - 132, 132, 132, 430, 430, 430, 430, 430, 430, 430, - 430, 430, 430, 430, 957, 430, 430, 958, 959, 430, - 430, 961, 132, 962, 963, 132, 964, 979, 132, 132, - 980, 982, 132, 985, 132, 430, 986, 430, 132, 430, - 430, 988, 430, 430, 430, 430, 430, 132, 430, 989, - 991, 994, 132, 132, 132, 132, 1012, 132, 132, 132, - 132, 1018, 1022, 1023, 1026, 132, 132, 1029, 430, 1051, - 430, 1055, 1061, 132, 1079, 132, 132, 132, 1080, 1090, - 132, 132, 215, 215, 215, 215, 215, 215, 1093, 1096, - 1102, 215, 215, 1105, 1106, 1107, 215, 1108, 215, 215, - 215, 215, 215, 215, 215, 341, 341, 341, 341, 341, - 215, 215, 215, 215, 215, 215, 215, 1110, 1119, 215, - 1124, 1125, 1126, 1127, 436, 215, 215, 215, 215, 215, - 215, 215, 215, 215, 215, 215, 215, 1128, 215, 215, - 215, 1129, 215, 215, 215, 215, 215, 436, 436, 436, - 436, 436, 436, 436, 436, 436, 436, 436, 1138, 436, - 436, 1140, 1141, 436, 436, 1155, 215, 1156, 1158, 215, - 1040, 1170, 215, 215, 1174, 1176, 215, 1177, 215, 436, - 1040, 436, 215, 436, 436, 1178, 436, 436, 436, 436, - 436, 215, 436, 1179, 1182, 1192, 215, 215, 215, 215, - nil, 215, 215, 215, 215, nil, nil, nil, nil, 215, - 215, nil, 436, 1040, 1040, nil, nil, 215, 1040, 215, - 215, 215, nil, nil, 215, 215, 240, 240, 240, 240, - 240, 240, nil, nil, nil, 240, 240, nil, nil, nil, - 240, nil, 240, 240, 240, 240, 240, 240, 240, 518, - 518, 518, 518, 518, 240, 240, 240, 240, 240, 240, - 240, nil, 1154, 240, 1154, 1154, 1154, nil, 1154, 240, - 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, - 240, nil, 240, 240, 240, nil, 240, 240, 240, 240, - 240, 287, 287, 287, 287, 287, 287, 287, 287, 287, - 287, 287, nil, 287, 287, nil, nil, 287, 287, nil, - 240, nil, nil, 240, nil, nil, 240, 240, nil, nil, - 240, nil, 240, 287, nil, 287, 240, 287, 287, nil, - 287, 287, 287, 287, 287, 240, 287, nil, nil, nil, - 240, 240, 240, 240, nil, 240, 240, 240, 240, nil, - nil, nil, nil, 240, 240, nil, 287, nil, nil, nil, - nil, 240, nil, 240, 240, 240, nil, nil, 240, 240, - 307, 307, 307, 307, 307, 307, nil, nil, nil, 307, - 307, nil, nil, nil, 307, nil, 307, 307, 307, 307, - 307, 307, 307, nil, nil, nil, nil, nil, 307, 307, - 307, 307, 307, 307, 307, nil, nil, 307, nil, nil, - nil, nil, nil, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, nil, 307, 307, 307, nil, - 307, 307, 307, 307, 307, 489, 489, 489, 489, 489, - 489, 489, 489, 489, 489, 489, nil, 489, 489, nil, - nil, 489, 489, nil, 307, nil, nil, 307, nil, nil, - 307, 307, nil, nil, 307, nil, 307, 489, nil, 489, - 307, 489, 489, nil, 489, 489, 489, 489, 489, 307, - 489, nil, nil, nil, 307, 307, 307, 307, nil, 307, - 307, 307, 307, nil, nil, nil, nil, 307, 307, 489, - 489, nil, nil, nil, nil, 307, nil, 307, 307, 307, - nil, nil, 307, 307, 312, 312, 312, 312, 312, 312, - nil, nil, nil, 312, 312, nil, nil, nil, 312, nil, - 312, 312, 312, 312, 312, 312, 312, nil, nil, nil, - nil, nil, 312, 312, 312, 312, 312, 312, 312, nil, - nil, 312, nil, nil, nil, nil, nil, 312, 312, 312, - 312, 312, 312, 312, 312, 312, 312, 312, 312, nil, - 312, 312, 312, nil, 312, 312, 312, 312, 312, 541, - 541, 541, 541, 541, 541, 541, 541, 541, 541, 541, - nil, 541, 541, nil, nil, 541, 541, nil, 312, nil, - nil, 312, nil, nil, 312, 312, nil, nil, 312, nil, - 312, 541, nil, 541, 312, 541, 541, nil, 541, 541, - 541, 541, 541, 312, 541, nil, nil, nil, 312, 312, - 312, 312, nil, 312, 312, 312, 312, nil, nil, nil, - nil, 312, 312, nil, 541, nil, nil, nil, nil, 312, - nil, 312, 312, 312, nil, nil, 312, 312, 340, 340, - 340, 340, 340, 340, nil, nil, nil, 340, 340, nil, - nil, nil, 340, nil, 340, 340, 340, 340, 340, 340, - 340, nil, nil, nil, nil, nil, 340, 340, 340, 340, - 340, 340, 340, nil, nil, 340, nil, nil, nil, nil, - nil, 340, 340, 340, 340, 340, 340, 340, 340, 340, - 340, 340, 340, nil, 340, 340, 340, nil, 340, 340, - 340, 340, 340, 796, 796, 796, 796, 796, 796, 796, - 796, 796, 796, 796, nil, 796, 796, nil, nil, 796, - 796, nil, 340, nil, nil, 340, nil, nil, 340, 340, - nil, nil, 340, nil, 340, 796, nil, 796, 340, 796, - 796, nil, 796, 796, 796, 796, 796, 340, 796, nil, - nil, nil, 340, 340, 340, 340, nil, 340, 340, 340, - 340, nil, nil, nil, nil, 340, 340, nil, 796, nil, - nil, nil, nil, 340, nil, 340, 340, 340, nil, nil, - 340, 340, 356, 356, 356, 356, 356, 356, nil, nil, - nil, 356, 356, nil, nil, nil, 356, nil, 356, 356, - 356, 356, 356, 356, 356, nil, nil, nil, nil, nil, - 356, 356, 356, 356, 356, 356, 356, nil, nil, 356, - nil, nil, nil, nil, nil, 356, 356, 356, 356, 356, - 356, 356, 356, 356, 356, 356, 356, nil, 356, 356, - 356, nil, 356, 356, 356, 356, 356, 949, 949, 949, - 949, 949, 949, 949, 949, 949, 949, 949, nil, 949, - 949, nil, nil, 949, 949, nil, 356, nil, nil, 356, - nil, nil, 356, 356, nil, nil, 356, nil, 356, 949, - nil, 949, 356, 949, 949, nil, 949, 949, 949, 949, - 949, 356, 949, nil, nil, nil, 356, 356, 356, 356, - nil, 356, 356, 356, 356, nil, nil, nil, nil, 356, - 356, nil, 949, nil, nil, nil, nil, 356, nil, 356, - 356, 356, nil, nil, 356, 356, 357, 357, 357, 357, - 357, 357, nil, nil, nil, 357, 357, nil, nil, nil, - 357, nil, 357, 357, 357, 357, 357, 357, 357, nil, - nil, nil, nil, nil, 357, 357, 357, 357, 357, 357, - 357, nil, 727, 357, 727, 727, 727, nil, 727, 357, - 357, 357, 357, 357, 357, 357, 357, 357, 357, 357, - 357, nil, 357, 357, 357, nil, 357, 357, 357, 357, - 357, 878, nil, 878, 878, 878, nil, 878, nil, 727, - nil, 996, nil, 996, 996, 996, nil, 996, 727, nil, - 357, nil, nil, 357, nil, nil, 357, 357, nil, nil, - 357, 995, 357, 995, 995, 995, 357, 995, 878, nil, - nil, nil, nil, nil, nil, 357, nil, 878, 996, nil, - 357, 357, 357, 357, nil, 357, 357, 357, 357, nil, - nil, nil, nil, 357, 357, nil, nil, nil, 995, nil, - nil, 357, nil, 357, 357, 357, nil, 995, 357, 357, - 557, 557, 557, 557, 557, 557, nil, nil, nil, 557, - 557, nil, nil, nil, 557, nil, 557, 557, 557, 557, - 557, 557, 557, nil, nil, nil, nil, nil, 557, 557, - 557, 557, 557, 557, 557, nil, nil, 557, nil, nil, - nil, nil, nil, 557, 557, 557, 557, 557, 557, 557, - 557, 557, 557, 557, 557, nil, 557, 557, 557, nil, - 557, 557, 557, 557, 557, 332, 332, 332, 332, 332, - 332, 332, 332, 332, 332, 332, nil, 332, 332, nil, - nil, 332, 332, nil, 557, nil, nil, 557, nil, nil, - 557, 557, nil, 485, 557, nil, 557, 332, nil, 332, - 557, 332, 332, nil, 332, 332, 332, 332, 332, 557, - 332, nil, nil, nil, 557, 557, 557, 557, nil, 557, - 557, 557, 557, nil, nil, 485, nil, 557, 557, 485, - 485, nil, 485, 485, nil, 557, nil, 557, 557, 557, - nil, nil, 557, 557, 560, 560, 560, 560, 560, 560, - nil, nil, nil, 560, 560, nil, nil, nil, 560, nil, - 560, 560, 560, 560, 560, 560, 560, nil, nil, nil, - nil, nil, 560, 560, 560, 560, 560, 560, 560, nil, - nil, 560, nil, nil, nil, nil, nil, 560, 560, 560, - 560, 560, 560, 560, 560, 560, 560, 560, 560, nil, - 560, 560, 560, nil, 560, 560, 560, 560, 560, 333, - 333, 333, 333, 333, 333, 333, 333, 333, 333, 333, - nil, 333, 333, nil, nil, 333, 333, nil, 560, nil, - nil, 560, nil, nil, 560, 560, nil, 486, 560, nil, - 560, 333, nil, 333, 560, 333, 333, nil, 333, 333, - 333, 333, 333, 560, 333, nil, nil, nil, 560, 560, - 560, 560, nil, 560, 560, 560, 560, nil, nil, 486, - nil, 560, 560, 486, 486, nil, 486, 486, nil, 560, - nil, 560, 560, 560, nil, nil, 560, 560, 581, 581, - 581, 581, 581, 581, nil, nil, nil, 581, 581, nil, - nil, nil, 581, nil, 581, 581, 581, 581, 581, 581, - 581, nil, nil, nil, nil, nil, 581, 581, 581, 581, - 581, 581, 581, nil, nil, 581, nil, nil, nil, nil, - nil, 581, 581, 581, 581, 581, 581, 581, 581, 581, - 581, 581, 581, nil, 581, 581, 581, nil, 581, 581, - 581, 581, 581, 468, 468, 468, 468, 468, 468, 468, - 468, 468, 468, 468, nil, 468, 468, nil, nil, 468, - 468, nil, 581, nil, nil, 581, nil, nil, 581, 581, - nil, nil, 581, nil, 581, 468, nil, 468, 581, 468, - 468, nil, 468, 468, 468, 468, 468, 581, 468, nil, - nil, nil, 581, 581, 581, 581, nil, 581, 581, 581, - 581, nil, nil, nil, nil, 581, 581, nil, 1130, nil, - 1130, 1130, 1130, 581, 1130, 581, 581, 581, nil, nil, - 581, 581, 760, 760, 760, 760, 760, 760, nil, nil, - nil, 760, 760, nil, nil, nil, 760, nil, 760, 760, - 760, 760, 760, 760, 760, 1130, nil, nil, nil, nil, - 760, 760, 760, 760, 760, 760, 760, nil, nil, 760, - nil, nil, nil, nil, nil, 760, 760, 760, 760, 760, - 760, 760, 760, 760, 760, 760, 760, nil, 760, 760, - 760, nil, 760, 760, 760, 760, 760, 469, 469, 469, - 469, 469, 469, 469, 469, 469, 469, 469, nil, 469, - 469, nil, nil, 469, 469, nil, 760, nil, nil, 760, - nil, nil, 760, 760, nil, nil, 760, nil, 760, 469, - nil, 469, 760, 469, 469, nil, 469, 469, 469, 469, - 469, 760, 469, nil, nil, nil, 760, 760, 760, 760, - nil, 760, 760, 760, 760, nil, nil, nil, nil, 760, - 760, nil, 1131, nil, 1131, 1131, 1131, 760, 1131, 760, - 760, 760, nil, nil, 760, 760, 765, 765, 765, 765, - 765, 765, nil, nil, nil, 765, 765, nil, nil, nil, - 765, nil, 765, 765, 765, 765, 765, 765, 765, 1131, - nil, nil, nil, nil, 765, 765, 765, 765, 765, 765, - 765, nil, nil, 765, nil, nil, nil, nil, nil, 765, - 765, 765, 765, 765, 765, 765, 765, 765, 765, 765, - 765, nil, 765, 765, 765, nil, 765, 765, 765, 765, - 765, 479, 479, 479, 479, 479, 479, 479, nil, nil, - 479, 479, nil, nil, nil, nil, nil, 479, 479, nil, - 765, nil, nil, 765, nil, nil, 765, 765, nil, nil, - 765, nil, 765, 479, nil, 479, 765, 479, 479, nil, - 479, 479, 479, 479, 479, 765, 479, nil, nil, nil, - 765, 765, 765, 765, nil, 765, 765, 765, 765, nil, - nil, nil, nil, 765, 765, nil, nil, nil, nil, nil, - nil, 765, nil, 765, 765, 765, nil, nil, 765, 765, - 769, 769, 769, 769, 769, 769, nil, nil, nil, 769, - 769, nil, nil, nil, 769, nil, 769, 769, 769, 769, - 769, 769, 769, nil, nil, nil, nil, nil, 769, 769, - 769, 769, 769, 769, 769, nil, nil, 769, nil, nil, - nil, nil, nil, 769, 769, 769, 769, 769, 769, 769, - 769, 769, 769, 769, 769, nil, 769, 769, 769, nil, - 769, 769, 769, 769, 769, 480, 480, 480, 480, 480, - 480, 480, nil, nil, 480, 480, nil, nil, nil, nil, - nil, 480, 480, nil, 769, nil, nil, 769, nil, nil, - 769, 769, nil, nil, 769, nil, 769, 480, nil, 480, - 769, 480, 480, nil, 480, 480, 480, 480, 480, 769, - 480, nil, nil, nil, 769, 769, 769, 769, nil, 769, - 769, 769, 769, nil, nil, nil, nil, 769, 769, nil, - nil, nil, nil, nil, nil, 769, nil, 769, 769, 769, - nil, nil, 769, 769, 779, 779, 779, 779, 779, 779, - nil, nil, nil, 779, 779, nil, nil, nil, 779, nil, - 779, 779, 779, 779, 779, 779, 779, nil, nil, nil, - nil, nil, 779, 779, 779, 779, 779, 779, 779, nil, - nil, 779, nil, nil, nil, nil, nil, 779, 779, 779, - 779, 779, 779, 779, 779, 779, 779, 779, 779, nil, - 779, 779, 779, nil, 779, 779, 779, 779, 779, 481, - 481, 481, 481, 481, 481, 481, nil, nil, 481, 481, - nil, nil, nil, nil, nil, 481, 481, nil, 779, nil, - nil, 779, nil, nil, 779, 779, nil, nil, 779, nil, - 779, 481, nil, 481, 779, 481, 481, nil, 481, 481, - 481, 481, 481, 779, 481, nil, nil, nil, 779, 779, - 779, 779, nil, 779, 779, 779, 779, nil, nil, nil, - nil, 779, 779, nil, nil, nil, nil, nil, nil, 779, - nil, 779, 779, 779, nil, nil, 779, 779, 846, 846, - 846, 846, 846, 846, nil, nil, nil, 846, 846, nil, - nil, nil, 846, nil, 846, 846, 846, 846, 846, 846, - 846, nil, nil, nil, nil, nil, 846, 846, 846, 846, - 846, 846, 846, nil, nil, 846, nil, nil, nil, nil, - nil, 846, 846, 846, 846, 846, 846, 846, 846, 846, - 846, 846, 846, nil, 846, 846, 846, nil, 846, 846, - 846, 846, 846, 482, 482, 482, 482, 482, 482, 482, - nil, nil, 482, 482, nil, nil, nil, nil, nil, 482, - 482, nil, 846, nil, nil, 846, nil, nil, 846, 846, - nil, nil, 846, nil, 846, 482, nil, 482, 846, 482, - 482, nil, 482, 482, 482, 482, 482, 846, 482, nil, - nil, nil, 846, 846, 846, 846, nil, 846, 846, 846, - 846, nil, nil, nil, nil, 846, 846, nil, nil, nil, - nil, nil, nil, 846, nil, 846, 846, 846, nil, nil, - 846, 846, 857, 857, 857, 857, 857, 857, nil, nil, - nil, 857, 857, nil, nil, nil, 857, nil, 857, 857, - 857, 857, 857, 857, 857, nil, nil, nil, nil, nil, - 857, 857, 857, 857, 857, 857, 857, nil, nil, 857, - nil, nil, nil, nil, nil, 857, 857, 857, 857, 857, - 857, 857, 857, 857, 857, 857, 857, nil, 857, 857, - 857, nil, 857, 857, 857, 857, 857, 483, 483, 483, - 483, 483, 483, 483, nil, nil, 483, 483, nil, nil, - nil, nil, nil, 483, 483, nil, 857, nil, nil, 857, - nil, nil, 857, 857, nil, nil, 857, nil, 857, 483, - nil, 483, 857, 483, 483, nil, 483, 483, 483, 483, - 483, 857, 483, nil, nil, nil, 857, 857, 857, 857, - nil, 857, 857, 857, 857, nil, nil, nil, nil, 857, - 857, nil, nil, nil, nil, nil, nil, 857, nil, 857, - 857, 857, nil, nil, 857, 857, 897, 897, 897, 897, - 897, 897, nil, nil, nil, 897, 897, nil, nil, nil, - 897, nil, 897, 897, 897, 897, 897, 897, 897, nil, - nil, nil, nil, nil, 897, 897, 897, 897, 897, 897, - 897, nil, nil, 897, nil, nil, nil, nil, nil, 897, - 897, 897, 897, 897, 897, 897, 897, 897, 897, 897, - 897, nil, 897, 897, 897, nil, 897, 897, 897, 897, - 897, 484, 484, 484, 484, 484, 484, 484, nil, nil, - 484, 484, nil, nil, nil, nil, nil, 484, 484, nil, - 897, nil, nil, 897, nil, nil, 897, 897, nil, nil, - 897, nil, 897, 484, nil, 484, 897, 484, 484, nil, - 484, 484, 484, 484, 484, 897, 484, nil, nil, nil, - 897, 897, 897, 897, nil, 897, 897, 897, 897, nil, - nil, nil, nil, 897, 897, nil, nil, nil, nil, nil, - nil, 897, nil, 897, 897, 897, nil, nil, 897, 897, - 903, 903, 903, 903, 903, 903, nil, nil, nil, 903, - 903, nil, nil, nil, 903, nil, 903, 903, 903, 903, - 903, 903, 903, nil, nil, nil, nil, nil, 903, 903, - 903, 903, 903, 903, 903, nil, nil, 903, nil, nil, - nil, nil, nil, 903, 903, 903, 903, 903, 903, 903, - 903, 903, 903, 903, 903, nil, 903, 903, 903, nil, - 903, 903, 903, 903, 903, 487, 487, 487, 487, 487, - 487, 487, nil, nil, 487, 487, nil, nil, nil, nil, - nil, 487, 487, nil, 903, nil, nil, 903, nil, nil, - 903, 903, nil, nil, 903, nil, 903, 487, nil, 487, - 903, 487, 487, nil, 487, 487, 487, 487, 487, 903, - 487, nil, nil, nil, 903, 903, 903, 903, nil, 903, - 903, 903, 903, nil, nil, nil, nil, 903, 903, nil, - nil, nil, nil, nil, nil, 903, nil, 903, 903, 903, - nil, nil, 903, 903, 950, 950, 950, 950, 950, 950, - nil, nil, nil, 950, 950, nil, nil, nil, 950, nil, - 950, 950, 950, 950, 950, 950, 950, nil, nil, nil, - nil, nil, 950, 950, 950, 950, 950, 950, 950, nil, - nil, 950, nil, nil, nil, nil, nil, 950, 950, 950, - 950, 950, 950, 950, 950, 950, 950, 950, 950, nil, - 950, 950, 950, nil, 950, 950, 950, 950, 950, 488, - 488, 488, 488, 488, 488, 488, 488, nil, 488, 488, - nil, nil, nil, nil, nil, 488, 488, nil, 950, nil, - nil, 950, nil, nil, 950, 950, nil, nil, 950, nil, - 950, 488, nil, 488, 950, 488, 488, nil, 488, 488, - 488, 488, 488, 950, 488, nil, nil, nil, 950, 950, - 950, 950, nil, 950, 950, 950, 950, nil, nil, nil, - nil, 950, 950, nil, nil, nil, nil, nil, nil, 950, - nil, 950, 950, 950, nil, nil, 950, 950, 970, 970, - 970, 970, 970, 970, nil, nil, nil, 970, 970, nil, - nil, nil, 970, nil, 970, 970, 970, 970, 970, 970, - 970, nil, nil, nil, nil, nil, 970, 970, 970, 970, - 970, 970, 970, nil, nil, 970, nil, nil, nil, nil, - nil, 970, 970, 970, 970, 970, 970, 970, 970, 970, - 970, 970, 970, nil, 970, 970, 970, nil, 970, 970, - 970, 970, 970, 490, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 490, - 490, nil, 970, nil, nil, 970, nil, nil, 970, 970, - nil, nil, 970, nil, 970, 490, nil, 490, 970, 490, - 490, nil, 490, 490, nil, nil, 490, 970, 490, nil, - nil, nil, 970, 970, 970, 970, nil, 970, 970, 970, - 970, nil, nil, nil, nil, 970, 970, nil, nil, nil, - nil, nil, nil, 970, nil, 970, 970, 970, nil, nil, - 970, 970, 1057, 1057, 1057, 1057, 1057, 1057, nil, nil, - nil, 1057, 1057, nil, nil, nil, 1057, nil, 1057, 1057, - 1057, 1057, 1057, 1057, 1057, nil, nil, nil, nil, nil, - 1057, 1057, 1057, 1057, 1057, 1057, 1057, nil, nil, 1057, - nil, nil, nil, nil, nil, 1057, 1057, 1057, 1057, 1057, - 1057, 1057, 1057, 1057, 1057, 1057, 1057, nil, 1057, 1057, - 1057, nil, 1057, 1057, 1057, 1057, 1057, 540, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 540, 540, nil, 1057, nil, nil, 1057, - nil, nil, 1057, 1057, nil, nil, 1057, nil, 1057, 540, - nil, 540, 1057, 540, 540, nil, 540, 540, nil, nil, - 540, 1057, 540, nil, nil, nil, 1057, 1057, 1057, 1057, - nil, 1057, 1057, 1057, 1057, nil, nil, nil, nil, 1057, - 1057, nil, nil, nil, nil, nil, nil, 1057, nil, 1057, - 1057, 1057, nil, nil, 1057, 1057, 1064, 1064, 1064, 1064, - 1064, 1064, nil, nil, nil, 1064, 1064, nil, nil, nil, - 1064, nil, 1064, 1064, 1064, 1064, 1064, 1064, 1064, nil, - nil, nil, nil, nil, 1064, 1064, 1064, 1064, 1064, 1064, - 1064, nil, nil, 1064, nil, nil, nil, nil, nil, 1064, - 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, 1064, - 1064, nil, 1064, 1064, 1064, nil, 1064, 1064, 1064, 1064, - 1064, 476, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 476, 476, nil, - 1064, nil, nil, 1064, nil, nil, 1064, 1064, nil, nil, - 1064, nil, 1064, 476, nil, 476, 1064, 476, 476, nil, - 476, 476, nil, nil, nil, 1064, nil, nil, nil, nil, - 1064, 1064, 1064, 1064, nil, 1064, 1064, 1064, 1064, nil, - nil, nil, nil, 1064, 1064, nil, nil, nil, nil, nil, - nil, 1064, nil, 1064, 1064, 1064, nil, nil, 1064, 1064, - 1065, 1065, 1065, 1065, 1065, 1065, nil, nil, nil, 1065, - 1065, nil, nil, nil, 1065, nil, 1065, 1065, 1065, 1065, - 1065, 1065, 1065, nil, nil, nil, nil, nil, 1065, 1065, - 1065, 1065, 1065, 1065, 1065, nil, nil, 1065, nil, nil, - nil, nil, nil, 1065, 1065, 1065, 1065, 1065, 1065, 1065, - 1065, 1065, 1065, 1065, 1065, nil, 1065, 1065, 1065, nil, - 1065, 1065, 1065, 1065, 1065, 477, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 477, 477, nil, 1065, nil, nil, 1065, nil, nil, - 1065, 1065, nil, nil, 1065, nil, 1065, 477, nil, 477, - 1065, 477, 477, nil, 477, 477, nil, nil, nil, 1065, - nil, nil, nil, nil, 1065, 1065, 1065, 1065, nil, 1065, - 1065, 1065, 1065, nil, nil, nil, nil, 1065, 1065, nil, - nil, nil, nil, nil, nil, 1065, nil, 1065, 1065, 1065, - nil, nil, 1065, 1065, 1081, 1081, 1081, 1081, 1081, 1081, - nil, nil, nil, 1081, 1081, nil, nil, nil, 1081, nil, - 1081, 1081, 1081, 1081, 1081, 1081, 1081, nil, nil, nil, - nil, nil, 1081, 1081, 1081, 1081, 1081, 1081, 1081, nil, - nil, 1081, nil, nil, nil, nil, nil, 1081, 1081, 1081, - 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, 1081, nil, - 1081, 1081, 1081, nil, 1081, 1081, 1081, 1081, 1081, 478, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 478, 478, nil, 1081, nil, - nil, 1081, nil, nil, 1081, 1081, nil, nil, 1081, nil, - 1081, 478, nil, nil, 1081, 478, 478, nil, 478, 478, - nil, nil, nil, 1081, nil, nil, nil, nil, 1081, 1081, - 1081, 1081, nil, 1081, 1081, 1081, 1081, nil, nil, nil, - nil, 1081, 1081, nil, nil, nil, nil, nil, nil, 1081, - nil, 1081, 1081, 1081, nil, nil, 1081, 1081, 1091, 1091, - 1091, 1091, 1091, 1091, nil, nil, nil, 1091, 1091, nil, - nil, nil, 1091, nil, 1091, 1091, 1091, 1091, 1091, 1091, - 1091, nil, nil, nil, nil, nil, 1091, 1091, 1091, 1091, - 1091, 1091, 1091, nil, nil, 1091, nil, nil, nil, nil, - nil, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, 1091, - 1091, 1091, 1091, nil, 1091, 1091, 1091, nil, 1091, 1091, - 1091, 1091, 1091, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 1091, nil, nil, 1091, nil, nil, 1091, 1091, - nil, nil, 1091, nil, 1091, nil, nil, nil, 1091, nil, - nil, nil, nil, nil, nil, nil, nil, 1091, nil, nil, - nil, nil, 1091, 1091, 1091, 1091, nil, 1091, 1091, 1091, - 1091, nil, nil, nil, nil, 1091, 1091, nil, nil, nil, - nil, nil, nil, 1091, nil, 1091, 1091, 1091, nil, nil, - 1091, 1091, 1133, 1133, 1133, 1133, 1133, 1133, nil, nil, - nil, 1133, 1133, nil, nil, nil, 1133, nil, 1133, 1133, - 1133, 1133, 1133, 1133, 1133, nil, nil, nil, nil, nil, - 1133, 1133, 1133, 1133, 1133, 1133, 1133, nil, nil, 1133, - nil, nil, nil, nil, nil, 1133, 1133, 1133, 1133, 1133, - 1133, 1133, 1133, 1133, 1133, 1133, 1133, nil, 1133, 1133, - 1133, nil, 1133, 1133, 1133, 1133, 1133, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 1133, nil, nil, 1133, - nil, nil, 1133, 1133, nil, nil, 1133, nil, 1133, nil, - nil, nil, 1133, nil, nil, nil, nil, nil, nil, nil, - nil, 1133, nil, nil, nil, nil, 1133, 1133, 1133, 1133, - nil, 1133, 1133, 1133, 1133, nil, nil, nil, nil, 1133, - 1133, nil, nil, nil, nil, nil, nil, 1133, nil, 1133, - 1133, 1133, nil, nil, 1133, 1133, 7, 7, 7, 7, - 7, nil, nil, nil, 7, 7, nil, nil, nil, 7, - nil, 7, 7, 7, 7, 7, 7, 7, nil, nil, - nil, nil, nil, 7, 7, 7, 7, 7, 7, 7, - nil, nil, 7, nil, nil, nil, nil, nil, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - nil, 7, 7, 7, nil, 7, 7, 7, 7, 7, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 7, - nil, nil, 7, nil, nil, 7, 7, nil, nil, 7, - nil, 7, nil, nil, nil, 7, nil, nil, nil, nil, - nil, nil, nil, nil, 7, nil, nil, nil, nil, 7, - 7, 7, 7, nil, 7, 7, 7, 7, nil, nil, - nil, nil, 7, 7, nil, nil, nil, 22, 22, 22, - 7, 22, 7, 7, 7, 22, 22, 7, 7, nil, - 22, nil, 22, 22, 22, 22, 22, 22, 22, nil, - nil, nil, nil, nil, 22, 22, 22, 22, 22, 22, - 22, nil, nil, 22, nil, nil, nil, nil, nil, nil, - 22, nil, nil, 22, 22, 22, 22, 22, 22, 22, - 22, nil, 22, 22, 22, nil, 22, 22, 22, 22, - 22, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 22, nil, nil, 22, nil, nil, 22, 22, nil, nil, - 22, nil, nil, nil, nil, nil, 22, nil, nil, nil, - nil, nil, nil, nil, nil, 22, nil, nil, nil, nil, - 22, 22, 22, 22, nil, 22, 22, 22, 22, nil, - nil, nil, nil, 22, 22, nil, nil, nil, nil, nil, - nil, 22, nil, 22, 22, 22, 29, nil, 22, 22, - nil, nil, nil, 29, 29, 29, nil, nil, 29, 29, - 29, nil, 29, nil, nil, nil, nil, nil, nil, nil, - 29, 29, 29, 29, nil, nil, nil, nil, nil, nil, - nil, nil, 29, 29, nil, 29, 29, 29, 29, 29, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 29, 29, 29, 29, 29, 29, 29, 29, - 29, 29, 29, 29, 29, 29, nil, nil, 29, 29, - 29, nil, nil, 29, nil, 29, 29, nil, nil, 29, - 29, nil, 29, nil, 29, nil, 29, nil, 29, 29, - nil, 29, 29, 29, 29, 29, 30, 29, 29, 29, - nil, nil, nil, 30, 30, 30, nil, nil, 30, 30, - 30, nil, 30, 29, nil, nil, 29, 29, nil, 29, - 30, 29, 30, 30, nil, nil, nil, nil, 29, nil, - nil, nil, 30, 30, nil, 30, 30, 30, 30, 30, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, nil, nil, 30, 30, - 30, nil, nil, 30, nil, 30, 30, nil, nil, 30, - 30, nil, 30, nil, 30, nil, 30, nil, 30, 30, - nil, 30, 30, 30, 30, 30, nil, 30, nil, 30, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 30, nil, nil, 30, 30, nil, 30, - nil, 30, 31, 31, 31, nil, 31, nil, 30, nil, - 31, 31, nil, nil, nil, 31, nil, 31, 31, 31, - 31, 31, 31, 31, nil, nil, nil, nil, nil, 31, - 31, 31, 31, 31, 31, 31, nil, nil, 31, nil, - nil, nil, nil, nil, nil, 31, nil, nil, 31, 31, - 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, - nil, 31, 31, 31, 31, 31, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 31, nil, nil, 31, nil, - nil, 31, 31, nil, nil, 31, nil, 31, nil, 31, - nil, 31, nil, nil, 31, nil, nil, nil, nil, nil, - 31, nil, nil, nil, nil, 31, 31, 31, 31, nil, - 31, 31, 31, 31, nil, nil, nil, nil, 31, 31, - nil, nil, nil, 32, 32, 32, 31, 32, 31, 31, - 31, 32, 32, 31, 31, nil, 32, nil, 32, 32, - 32, 32, 32, 32, 32, nil, nil, nil, nil, nil, - 32, 32, 32, 32, 32, 32, 32, nil, nil, 32, - nil, nil, nil, nil, nil, nil, 32, nil, nil, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, nil, 32, 32, 32, 32, 32, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 32, nil, nil, 32, - nil, nil, 32, 32, nil, nil, 32, nil, 32, nil, - 32, nil, 32, nil, nil, 32, nil, nil, nil, nil, - nil, 32, nil, nil, nil, nil, 32, 32, 32, 32, - nil, 32, 32, 32, 32, nil, nil, nil, nil, 32, - 32, nil, nil, nil, 33, 33, 33, 32, 33, 32, - 32, 32, 33, 33, 32, 32, nil, 33, nil, 33, - 33, 33, 33, 33, 33, 33, nil, nil, nil, nil, - nil, 33, 33, 33, 33, 33, 33, 33, nil, nil, - 33, nil, nil, nil, nil, nil, nil, 33, nil, nil, - 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, - 33, 33, nil, 33, 33, 33, 33, 33, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 33, nil, nil, - 33, nil, nil, 33, 33, nil, nil, 33, nil, 33, - nil, 33, nil, 33, nil, nil, 33, nil, nil, nil, - nil, nil, 33, nil, nil, nil, nil, 33, 33, 33, - 33, nil, 33, 33, 33, 33, nil, nil, nil, nil, - 33, 33, nil, nil, nil, 43, 43, 43, 33, 43, - 33, 33, 33, 43, 43, 33, 33, nil, 43, nil, - 43, 43, 43, 43, 43, 43, 43, nil, nil, nil, - nil, nil, 43, 43, 43, 43, 43, 43, 43, nil, - nil, 43, nil, nil, nil, nil, nil, nil, 43, nil, - nil, 43, 43, 43, 43, 43, 43, 43, 43, nil, - 43, 43, 43, nil, 43, 43, 43, 43, 43, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 43, nil, - nil, 43, nil, nil, 43, 43, nil, nil, 43, nil, - nil, nil, nil, nil, 43, nil, nil, nil, nil, nil, - nil, nil, nil, 43, nil, nil, nil, nil, 43, 43, - 43, 43, nil, 43, 43, 43, 43, nil, nil, nil, - nil, 43, 43, nil, nil, nil, 44, 44, 44, 43, - 44, 43, 43, 43, 44, 44, 43, 43, nil, 44, - nil, 44, 44, 44, 44, 44, 44, 44, nil, nil, - nil, nil, nil, 44, 44, 44, 44, 44, 44, 44, - nil, nil, 44, nil, nil, nil, nil, nil, nil, 44, - nil, nil, 44, 44, 44, 44, 44, 44, 44, 44, - nil, 44, 44, 44, nil, 44, 44, 44, 44, 44, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 44, - nil, nil, 44, nil, nil, 44, 44, nil, nil, 44, - nil, nil, nil, nil, nil, 44, nil, nil, nil, nil, - nil, nil, nil, nil, 44, nil, nil, nil, nil, 44, - 44, 44, 44, nil, 44, 44, 44, 44, nil, nil, - nil, nil, 44, 44, nil, nil, nil, 46, 46, 46, - 44, 46, 44, 44, 44, 46, 46, 44, 44, nil, - 46, nil, 46, 46, 46, 46, 46, 46, 46, nil, - nil, nil, nil, nil, 46, 46, 46, 46, 46, 46, - 46, nil, nil, 46, nil, nil, nil, nil, nil, nil, - 46, nil, nil, 46, 46, 46, 46, 46, 46, 46, - 46, nil, 46, 46, 46, nil, 46, 46, 46, 46, - 46, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 46, nil, nil, 46, nil, nil, 46, 46, nil, nil, - 46, nil, nil, nil, nil, nil, 46, nil, nil, nil, - nil, nil, nil, nil, nil, 46, nil, nil, nil, nil, - 46, 46, 46, 46, nil, 46, 46, 46, 46, nil, - nil, nil, nil, 46, 46, nil, nil, nil, 47, 47, - 47, 46, 47, 46, 46, 46, 47, 47, 46, 46, - nil, 47, nil, 47, 47, 47, 47, 47, 47, 47, - nil, nil, nil, nil, nil, 47, 47, 47, 47, 47, - 47, 47, nil, nil, 47, nil, nil, nil, nil, nil, - nil, 47, nil, nil, 47, 47, 47, 47, 47, 47, - 47, 47, nil, 47, 47, 47, nil, 47, 47, 47, - 47, 47, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 47, nil, nil, 47, nil, nil, 47, 47, nil, - nil, 47, nil, nil, nil, nil, nil, 47, nil, nil, - nil, nil, nil, nil, nil, nil, 47, nil, nil, nil, - nil, 47, 47, 47, 47, nil, 47, 47, 47, 47, - nil, nil, nil, nil, 47, 47, nil, nil, nil, 49, - 49, 49, 47, 49, 47, 47, 47, 49, 49, 47, - 47, nil, 49, nil, 49, 49, 49, 49, 49, 49, - 49, nil, nil, nil, nil, nil, 49, 49, 49, 49, - 49, 49, 49, nil, nil, 49, nil, nil, nil, nil, - nil, nil, 49, nil, nil, 49, 49, 49, 49, 49, - 49, 49, 49, nil, 49, 49, 49, nil, 49, 49, - 49, 49, 49, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 49, nil, nil, 49, nil, nil, 49, 49, - nil, nil, 49, nil, nil, nil, nil, nil, 49, nil, - nil, nil, nil, nil, nil, nil, nil, 49, nil, nil, - nil, nil, 49, 49, 49, 49, nil, 49, 49, 49, - 49, nil, nil, nil, nil, 49, 49, nil, nil, nil, - nil, nil, nil, 49, nil, 49, 49, 49, 61, nil, - 49, 49, nil, nil, nil, 61, 61, 61, nil, nil, - 61, 61, 61, nil, 61, nil, nil, nil, nil, nil, - nil, nil, 61, nil, 61, 61, 61, nil, nil, nil, - 649, 649, 649, 649, 61, 61, nil, 61, 61, 61, - 61, 61, nil, nil, nil, nil, 649, 649, 649, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 649, - 649, nil, nil, 649, 61, 61, 61, 61, 61, 61, - 61, 61, 61, 61, 61, 61, 61, 61, nil, nil, - 61, 61, 61, nil, nil, 61, nil, nil, 61, nil, - nil, 61, 61, nil, 61, nil, 61, nil, 61, nil, - 61, 61, nil, 61, 61, 61, 61, 61, nil, 61, - nil, 61, nil, 649, 649, 649, 649, nil, 649, 649, - 649, 649, nil, nil, nil, 61, 649, 649, 61, 61, - 61, 61, nil, 61, 649, 61, 649, 649, 649, nil, - 61, 63, 63, 63, 63, 63, nil, nil, nil, 63, - 63, nil, nil, nil, 63, nil, 63, 63, 63, 63, - 63, 63, 63, nil, nil, nil, nil, nil, 63, 63, - 63, 63, 63, 63, 63, nil, nil, 63, nil, nil, - nil, nil, nil, 63, 63, nil, 63, 63, 63, 63, - 63, 63, 63, 63, 63, nil, 63, 63, 63, nil, - 63, 63, 63, 63, 63, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 63, nil, nil, 63, nil, nil, - 63, 63, nil, nil, 63, nil, 63, nil, nil, nil, - 63, nil, nil, nil, nil, nil, nil, nil, nil, 63, - nil, nil, nil, nil, 63, 63, 63, 63, nil, 63, - 63, 63, 63, nil, nil, nil, nil, 63, 63, nil, - nil, nil, 64, 64, 64, 63, 64, 63, 63, 63, - 64, 64, 63, 63, nil, 64, nil, 64, 64, 64, - 64, 64, 64, 64, nil, nil, nil, nil, nil, 64, - 64, 64, 64, 64, 64, 64, nil, nil, 64, nil, - nil, nil, nil, nil, nil, 64, nil, nil, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - nil, 64, 64, 64, 64, 64, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 64, nil, nil, 64, nil, - nil, 64, 64, nil, nil, 64, nil, 64, nil, nil, - nil, 64, nil, nil, 64, nil, nil, nil, nil, nil, - 64, nil, nil, nil, nil, 64, 64, 64, 64, nil, - 64, 64, 64, 64, nil, nil, nil, nil, 64, 64, - nil, nil, nil, 65, 65, 65, 64, 65, 64, 64, - 64, 65, 65, 64, 64, nil, 65, nil, 65, 65, - 65, 65, 65, 65, 65, nil, nil, nil, nil, nil, - 65, 65, 65, 65, 65, 65, 65, nil, nil, 65, - nil, nil, nil, nil, nil, nil, 65, nil, nil, 65, - 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, - 65, nil, 65, 65, 65, 65, 65, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 65, nil, nil, 65, - nil, nil, 65, 65, nil, nil, 65, nil, nil, nil, - nil, nil, 65, nil, nil, 65, nil, nil, nil, nil, - nil, 65, nil, nil, nil, nil, 65, 65, 65, 65, - nil, 65, 65, 65, 65, nil, nil, nil, nil, 65, - 65, nil, nil, nil, 68, 68, 68, 65, 68, 65, - 65, 65, 68, 68, 65, 65, nil, 68, nil, 68, - 68, 68, 68, 68, 68, 68, nil, nil, nil, nil, - nil, 68, 68, 68, 68, 68, 68, 68, nil, nil, - 68, nil, nil, nil, nil, nil, nil, 68, nil, nil, - 68, 68, 68, 68, 68, 68, 68, 68, nil, 68, - 68, 68, nil, 68, 68, 68, 68, 68, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 68, nil, nil, - 68, nil, nil, 68, 68, nil, nil, 68, nil, nil, - nil, nil, nil, 68, nil, nil, nil, nil, nil, nil, - nil, nil, 68, nil, nil, nil, nil, 68, 68, 68, - 68, nil, 68, 68, 68, 68, nil, nil, nil, nil, - 68, 68, nil, nil, nil, 69, 69, 69, 68, 69, - 68, 68, 68, 69, 69, 68, 68, nil, 69, nil, - 69, 69, 69, 69, 69, 69, 69, nil, nil, nil, - nil, nil, 69, 69, 69, 69, 69, 69, 69, nil, - nil, 69, nil, nil, nil, nil, nil, nil, 69, nil, - nil, 69, 69, 69, 69, 69, 69, 69, 69, nil, - 69, 69, 69, nil, 69, 69, 69, 69, 69, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 69, nil, - nil, 69, nil, nil, 69, 69, nil, nil, 69, nil, - nil, nil, nil, nil, 69, nil, nil, nil, nil, nil, - nil, nil, nil, 69, nil, nil, nil, nil, 69, 69, - 69, 69, nil, 69, 69, 69, 69, nil, nil, nil, - nil, 69, 69, nil, nil, nil, 72, 72, 72, 69, - 72, 69, 69, 69, 72, 72, 69, 69, nil, 72, - nil, 72, 72, 72, 72, 72, 72, 72, nil, nil, - nil, nil, nil, 72, 72, 72, 72, 72, 72, 72, - nil, nil, 72, nil, nil, nil, nil, nil, nil, 72, - nil, nil, 72, 72, 72, 72, 72, 72, 72, 72, - nil, 72, 72, 72, nil, 72, 72, 72, 72, 72, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 72, - nil, nil, 72, nil, nil, 72, 72, nil, nil, 72, - nil, nil, nil, nil, nil, 72, nil, nil, nil, nil, - nil, nil, nil, nil, 72, nil, nil, nil, nil, 72, - 72, 72, 72, nil, 72, 72, 72, 72, nil, nil, - nil, nil, 72, 72, 72, nil, nil, nil, nil, 72, - 72, nil, 72, 72, 72, nil, nil, 72, 72, 121, - 121, 121, 121, 121, nil, nil, nil, 121, 121, nil, - nil, nil, 121, nil, 121, 121, 121, 121, 121, 121, - 121, nil, nil, nil, nil, nil, 121, 121, 121, 121, - 121, 121, 121, nil, nil, 121, nil, nil, nil, nil, - nil, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, nil, 121, 121, 121, nil, 121, 121, - 121, 121, 121, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 121, nil, nil, 121, nil, nil, 121, 121, - nil, nil, 121, nil, 121, nil, nil, nil, 121, nil, - nil, nil, nil, nil, nil, nil, nil, 121, nil, nil, - nil, nil, 121, 121, 121, 121, nil, 121, 121, 121, - 121, nil, nil, nil, nil, 121, 121, nil, nil, nil, - nil, nil, 121, 121, nil, 121, 121, 121, nil, nil, - 121, 121, 126, 126, 126, nil, 126, nil, nil, nil, - 126, 126, nil, nil, nil, 126, nil, 126, 126, 126, - 126, 126, 126, 126, nil, nil, nil, nil, nil, 126, - 126, 126, 126, 126, 126, 126, nil, nil, 126, nil, - nil, nil, nil, nil, nil, 126, nil, nil, 126, 126, - 126, 126, 126, 126, 126, 126, nil, 126, 126, 126, - nil, 126, 126, 126, 126, 126, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 126, nil, nil, 126, nil, - nil, 126, 126, nil, nil, 126, nil, nil, nil, nil, - nil, 126, nil, nil, nil, nil, nil, nil, nil, nil, - 126, nil, nil, nil, nil, 126, 126, 126, 126, nil, - 126, 126, 126, 126, nil, nil, nil, nil, 126, 126, - nil, nil, nil, 127, 127, 127, 126, 127, 126, 126, - 126, 127, 127, 126, 126, nil, 127, nil, 127, 127, - 127, 127, 127, 127, 127, nil, nil, nil, nil, nil, - 127, 127, 127, 127, 127, 127, 127, nil, nil, 127, - nil, nil, nil, nil, nil, nil, 127, nil, nil, 127, - 127, 127, 127, 127, 127, 127, 127, nil, 127, 127, - 127, nil, 127, 127, 127, 127, 127, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 127, nil, nil, 127, - nil, nil, 127, 127, nil, nil, 127, nil, nil, nil, - nil, nil, 127, nil, nil, nil, nil, nil, nil, nil, - nil, 127, nil, nil, nil, nil, 127, 127, 127, 127, - nil, 127, 127, 127, 127, nil, nil, nil, nil, 127, - 127, nil, nil, nil, 128, 128, 128, 127, 128, 127, - 127, 127, 128, 128, 127, 127, nil, 128, nil, 128, - 128, 128, 128, 128, 128, 128, nil, nil, nil, nil, - nil, 128, 128, 128, 128, 128, 128, 128, nil, nil, - 128, nil, nil, nil, nil, nil, nil, 128, nil, nil, - 128, 128, 128, 128, 128, 128, 128, 128, nil, 128, - 128, 128, nil, 128, 128, 128, 128, 128, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 128, nil, nil, - 128, nil, nil, 128, 128, nil, nil, 128, nil, nil, - nil, nil, nil, 128, nil, nil, nil, nil, nil, nil, - nil, nil, 128, nil, nil, nil, nil, 128, 128, 128, - 128, nil, 128, 128, 128, 128, nil, nil, nil, nil, - 128, 128, nil, nil, nil, 129, 129, 129, 128, 129, - 128, 128, 128, 129, 129, 128, 128, nil, 129, nil, - 129, 129, 129, 129, 129, 129, 129, nil, nil, nil, - nil, nil, 129, 129, 129, 129, 129, 129, 129, nil, - nil, 129, nil, nil, nil, nil, nil, nil, 129, nil, - nil, 129, 129, 129, 129, 129, 129, 129, 129, nil, - 129, 129, 129, nil, 129, 129, 129, 129, 129, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 129, nil, - nil, 129, nil, nil, 129, 129, nil, nil, 129, nil, - nil, nil, nil, nil, 129, nil, nil, nil, nil, nil, - nil, nil, nil, 129, nil, nil, nil, nil, 129, 129, - 129, 129, nil, 129, 129, 129, 129, nil, nil, nil, - nil, 129, 129, nil, nil, nil, nil, nil, nil, 129, - nil, 129, 129, 129, nil, nil, 129, 129, 130, 130, - 130, 130, 130, nil, nil, nil, 130, 130, nil, nil, - nil, 130, nil, 130, 130, 130, 130, 130, 130, 130, - nil, nil, nil, nil, nil, 130, 130, 130, 130, 130, - 130, 130, nil, nil, 130, nil, nil, nil, nil, nil, - 130, 130, nil, 130, 130, 130, 130, 130, 130, 130, - 130, 130, nil, 130, 130, 130, nil, 130, 130, 130, - 130, 130, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 130, nil, nil, 130, nil, nil, 130, 130, nil, - nil, 130, nil, 130, nil, nil, nil, 130, nil, nil, - nil, nil, nil, nil, nil, nil, 130, nil, nil, nil, - nil, 130, 130, 130, 130, nil, 130, 130, 130, 130, - nil, nil, nil, nil, 130, 130, nil, nil, nil, 216, - 216, 216, 130, 216, 130, 130, 130, 216, 216, 130, - 130, nil, 216, nil, 216, 216, 216, 216, 216, 216, - 216, nil, nil, nil, nil, nil, 216, 216, 216, 216, - 216, 216, 216, nil, nil, 216, nil, nil, nil, nil, - nil, nil, 216, nil, nil, 216, 216, 216, 216, 216, - 216, 216, 216, nil, 216, 216, 216, nil, 216, 216, - 216, 216, 216, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 216, nil, nil, 216, nil, nil, 216, 216, - nil, nil, 216, nil, 216, nil, nil, nil, 216, nil, - nil, nil, nil, nil, nil, nil, nil, 216, nil, nil, - nil, nil, 216, 216, 216, 216, nil, 216, 216, 216, - 216, nil, nil, nil, nil, 216, 216, nil, nil, nil, - 217, 217, 217, 216, 217, 216, 216, 216, 217, 217, - 216, 216, nil, 217, nil, 217, 217, 217, 217, 217, - 217, 217, nil, nil, nil, nil, nil, 217, 217, 217, - 217, 217, 217, 217, nil, nil, 217, nil, nil, nil, - nil, nil, nil, 217, nil, nil, 217, 217, 217, 217, - 217, 217, 217, 217, nil, 217, 217, 217, nil, 217, - 217, 217, 217, 217, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 217, nil, nil, 217, nil, nil, 217, - 217, nil, nil, 217, nil, 217, nil, nil, nil, 217, - nil, nil, nil, nil, nil, nil, nil, nil, 217, nil, - nil, nil, nil, 217, 217, 217, 217, nil, 217, 217, - 217, 217, nil, nil, nil, nil, 217, 217, nil, nil, - nil, 218, 218, 218, 217, 218, 217, 217, 217, 218, - 218, 217, 217, nil, 218, nil, 218, 218, 218, 218, - 218, 218, 218, nil, nil, nil, nil, nil, 218, 218, - 218, 218, 218, 218, 218, nil, nil, 218, nil, nil, - nil, nil, nil, nil, 218, nil, nil, 218, 218, 218, - 218, 218, 218, 218, 218, nil, 218, 218, 218, nil, - 218, 218, 218, 218, 218, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 218, nil, nil, 218, nil, nil, - 218, 218, nil, nil, 218, nil, nil, nil, nil, nil, - 218, nil, nil, nil, nil, nil, nil, nil, nil, 218, - nil, nil, nil, nil, 218, 218, 218, 218, nil, 218, - 218, 218, 218, nil, nil, nil, nil, 218, 218, nil, - nil, nil, 219, 219, 219, 218, 219, 218, 218, 218, - 219, 219, 218, 218, nil, 219, nil, 219, 219, 219, - 219, 219, 219, 219, nil, nil, nil, nil, nil, 219, - 219, 219, 219, 219, 219, 219, nil, nil, 219, nil, - nil, nil, nil, nil, nil, 219, nil, nil, 219, 219, - 219, 219, 219, 219, 219, 219, nil, 219, 219, 219, - nil, 219, 219, 219, 219, 219, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 219, nil, nil, 219, nil, - nil, 219, 219, nil, nil, 219, nil, nil, nil, nil, - nil, 219, nil, nil, nil, nil, nil, nil, nil, nil, - 219, nil, nil, nil, nil, 219, 219, 219, 219, nil, - 219, 219, 219, 219, nil, nil, nil, nil, 219, 219, - nil, nil, nil, 220, 220, 220, 219, 220, 219, 219, - 219, 220, 220, 219, 219, nil, 220, nil, 220, 220, - 220, 220, 220, 220, 220, nil, nil, nil, nil, nil, - 220, 220, 220, 220, 220, 220, 220, nil, nil, 220, - nil, nil, nil, nil, nil, nil, 220, nil, nil, 220, - 220, 220, 220, 220, 220, 220, 220, nil, 220, 220, - 220, nil, 220, 220, 220, 220, 220, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 220, nil, nil, 220, - nil, nil, 220, 220, nil, nil, 220, nil, nil, nil, - nil, nil, 220, nil, nil, nil, nil, nil, nil, nil, - nil, 220, nil, nil, nil, nil, 220, 220, 220, 220, - nil, 220, 220, 220, 220, nil, nil, nil, nil, 220, - 220, nil, nil, nil, 221, 221, 221, 220, 221, 220, - 220, 220, 221, 221, 220, 220, nil, 221, nil, 221, - 221, 221, 221, 221, 221, 221, nil, nil, nil, nil, - nil, 221, 221, 221, 221, 221, 221, 221, nil, nil, - 221, nil, nil, nil, nil, nil, nil, 221, nil, nil, - 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, - 221, 221, nil, 221, 221, 221, 221, 221, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 221, nil, nil, - 221, nil, nil, 221, 221, nil, nil, 221, nil, 221, - nil, 221, nil, 221, nil, nil, 221, nil, nil, nil, - nil, nil, 221, nil, nil, nil, nil, 221, 221, 221, - 221, nil, 221, 221, 221, 221, nil, nil, nil, nil, - 221, 221, nil, nil, nil, 226, 226, 226, 221, 226, - 221, 221, 221, 226, 226, 221, 221, nil, 226, nil, - 226, 226, 226, 226, 226, 226, 226, nil, nil, nil, - nil, nil, 226, 226, 226, 226, 226, 226, 226, nil, - nil, 226, nil, nil, nil, nil, nil, nil, 226, nil, - nil, 226, 226, 226, 226, 226, 226, 226, 226, nil, - 226, 226, 226, nil, 226, 226, 226, 226, 226, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 226, nil, - nil, 226, nil, nil, 226, 226, nil, nil, 226, nil, - nil, nil, nil, nil, 226, nil, nil, nil, nil, nil, - nil, nil, nil, 226, nil, nil, nil, nil, 226, 226, - 226, 226, nil, 226, 226, 226, 226, nil, nil, nil, - nil, 226, 226, nil, nil, nil, 227, 227, 227, 226, - 227, 226, 226, 226, 227, 227, 226, 226, nil, 227, - nil, 227, 227, 227, 227, 227, 227, 227, nil, nil, - nil, nil, nil, 227, 227, 227, 227, 227, 227, 227, - nil, nil, 227, nil, nil, nil, nil, nil, nil, 227, - nil, nil, 227, 227, 227, 227, 227, 227, 227, 227, - nil, 227, 227, 227, nil, 227, 227, 227, 227, 227, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 227, - nil, nil, 227, nil, nil, 227, 227, nil, nil, 227, - nil, nil, nil, nil, nil, 227, nil, nil, nil, nil, - nil, nil, nil, nil, 227, nil, nil, nil, nil, 227, - 227, 227, 227, nil, 227, 227, 227, 227, nil, nil, - nil, nil, 227, 227, nil, nil, nil, 228, 228, 228, - 227, 228, 227, 227, 227, 228, 228, 227, 227, nil, - 228, nil, 228, 228, 228, 228, 228, 228, 228, nil, - nil, nil, nil, nil, 228, 228, 228, 228, 228, 228, - 228, nil, nil, 228, nil, nil, nil, nil, nil, nil, - 228, nil, nil, 228, 228, 228, 228, 228, 228, 228, - 228, nil, 228, 228, 228, nil, 228, 228, 228, 228, - 228, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 228, nil, nil, 228, nil, nil, 228, 228, nil, nil, - 228, nil, nil, nil, nil, nil, 228, nil, nil, nil, - nil, nil, nil, nil, nil, 228, nil, nil, nil, nil, - 228, 228, 228, 228, nil, 228, 228, 228, 228, nil, - nil, nil, nil, 228, 228, 228, nil, nil, 239, 239, - 239, 228, 239, 228, 228, 228, 239, 239, 228, 228, - nil, 239, nil, 239, 239, 239, 239, 239, 239, 239, - nil, nil, nil, nil, nil, 239, 239, 239, 239, 239, - 239, 239, nil, nil, 239, nil, nil, nil, nil, nil, - nil, 239, nil, nil, 239, 239, 239, 239, 239, 239, - 239, 239, nil, 239, 239, 239, nil, 239, 239, 239, - 239, 239, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 239, nil, nil, 239, nil, nil, 239, 239, nil, - nil, 239, nil, nil, nil, nil, nil, 239, nil, nil, - nil, nil, nil, nil, nil, nil, 239, nil, nil, nil, - nil, 239, 239, 239, 239, nil, 239, 239, 239, 239, - nil, nil, nil, nil, 239, 239, nil, nil, nil, 243, - 243, 243, 239, 243, 239, 239, 239, 243, 243, 239, - 239, nil, 243, nil, 243, 243, 243, 243, 243, 243, - 243, nil, nil, nil, nil, nil, 243, 243, 243, 243, - 243, 243, 243, nil, nil, 243, nil, nil, nil, nil, - nil, nil, 243, nil, nil, 243, 243, 243, 243, 243, - 243, 243, 243, nil, 243, 243, 243, nil, 243, 243, - 243, 243, 243, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 243, nil, nil, 243, nil, nil, 243, 243, - nil, nil, 243, nil, nil, nil, nil, nil, 243, nil, - nil, nil, nil, nil, nil, nil, nil, 243, nil, nil, - nil, nil, 243, 243, 243, 243, nil, 243, 243, 243, - 243, nil, nil, nil, nil, 243, 243, nil, nil, nil, - 244, 244, 244, 243, 244, 243, 243, 243, 244, 244, - 243, 243, nil, 244, nil, 244, 244, 244, 244, 244, - 244, 244, nil, nil, nil, nil, nil, 244, 244, 244, - 244, 244, 244, 244, nil, nil, 244, nil, nil, nil, - nil, nil, nil, 244, nil, nil, 244, 244, 244, 244, - 244, 244, 244, 244, nil, 244, 244, 244, nil, 244, - 244, 244, 244, 244, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 244, nil, nil, 244, nil, nil, 244, - 244, nil, nil, 244, nil, nil, nil, nil, nil, 244, - nil, nil, nil, nil, nil, nil, nil, nil, 244, nil, - nil, nil, nil, 244, 244, 244, 244, nil, 244, 244, - 244, 244, nil, nil, nil, nil, 244, 244, nil, nil, - nil, 245, 245, 245, 244, 245, 244, 244, 244, 245, - 245, 244, 244, nil, 245, nil, 245, 245, 245, 245, - 245, 245, 245, nil, nil, nil, nil, nil, 245, 245, - 245, 245, 245, 245, 245, nil, nil, 245, nil, nil, - nil, nil, nil, nil, 245, nil, nil, 245, 245, 245, - 245, 245, 245, 245, 245, nil, 245, 245, 245, nil, - 245, 245, 245, 245, 245, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 245, nil, nil, 245, nil, nil, - 245, 245, nil, nil, 245, nil, nil, nil, nil, nil, - 245, nil, nil, nil, nil, nil, nil, nil, nil, 245, - nil, nil, nil, nil, 245, 245, 245, 245, nil, 245, - 245, 245, 245, nil, nil, nil, nil, 245, 245, nil, - nil, nil, 246, 246, 246, 245, 246, 245, 245, 245, - 246, 246, 245, 245, nil, 246, nil, 246, 246, 246, - 246, 246, 246, 246, nil, nil, nil, nil, nil, 246, - 246, 246, 246, 246, 246, 246, nil, nil, 246, nil, - nil, nil, nil, nil, nil, 246, nil, nil, 246, 246, - 246, 246, 246, 246, 246, 246, nil, 246, 246, 246, - nil, 246, 246, 246, 246, 246, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 246, nil, nil, 246, nil, - nil, 246, 246, nil, nil, 246, nil, nil, nil, nil, - nil, 246, nil, nil, nil, nil, nil, nil, nil, nil, - 246, nil, nil, nil, nil, 246, 246, 246, 246, nil, - 246, 246, 246, 246, nil, nil, nil, nil, 246, 246, - nil, nil, nil, 247, 247, 247, 246, 247, 246, 246, - 246, 247, 247, 246, 246, nil, 247, nil, 247, 247, - 247, 247, 247, 247, 247, nil, nil, nil, nil, nil, - 247, 247, 247, 247, 247, 247, 247, nil, nil, 247, - nil, nil, nil, nil, nil, nil, 247, nil, nil, 247, - 247, 247, 247, 247, 247, 247, 247, nil, 247, 247, - 247, nil, 247, 247, 247, 247, 247, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 247, nil, nil, 247, - nil, nil, 247, 247, nil, nil, 247, nil, nil, nil, - nil, nil, 247, nil, nil, nil, nil, nil, nil, nil, - nil, 247, nil, nil, nil, nil, 247, 247, 247, 247, - nil, 247, 247, 247, 247, nil, nil, nil, nil, 247, - 247, nil, nil, nil, 248, 248, 248, 247, 248, 247, - 247, 247, 248, 248, 247, 247, nil, 248, nil, 248, - 248, 248, 248, 248, 248, 248, nil, nil, nil, nil, - nil, 248, 248, 248, 248, 248, 248, 248, nil, nil, - 248, nil, nil, nil, nil, nil, nil, 248, nil, nil, - 248, 248, 248, 248, 248, 248, 248, 248, nil, 248, - 248, 248, nil, 248, 248, 248, 248, 248, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 248, nil, nil, - 248, nil, nil, 248, 248, nil, nil, 248, nil, nil, - nil, nil, nil, 248, nil, nil, nil, nil, nil, nil, - nil, nil, 248, nil, nil, nil, nil, 248, 248, 248, - 248, nil, 248, 248, 248, 248, nil, nil, nil, nil, - 248, 248, nil, nil, nil, 249, 249, 249, 248, 249, - 248, 248, 248, 249, 249, 248, 248, nil, 249, nil, - 249, 249, 249, 249, 249, 249, 249, nil, nil, nil, - nil, nil, 249, 249, 249, 249, 249, 249, 249, nil, - nil, 249, nil, nil, nil, nil, nil, nil, 249, nil, - nil, 249, 249, 249, 249, 249, 249, 249, 249, nil, - 249, 249, 249, nil, 249, 249, 249, 249, 249, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 249, nil, - nil, 249, nil, nil, 249, 249, nil, nil, 249, nil, - nil, nil, nil, nil, 249, nil, nil, nil, nil, nil, - nil, nil, nil, 249, nil, nil, nil, nil, 249, 249, - 249, 249, nil, 249, 249, 249, 249, nil, nil, nil, - nil, 249, 249, nil, nil, nil, 250, 250, 250, 249, - 250, 249, 249, 249, 250, 250, 249, 249, nil, 250, - nil, 250, 250, 250, 250, 250, 250, 250, nil, nil, - nil, nil, nil, 250, 250, 250, 250, 250, 250, 250, - nil, nil, 250, nil, nil, nil, nil, nil, nil, 250, - nil, nil, 250, 250, 250, 250, 250, 250, 250, 250, - nil, 250, 250, 250, nil, 250, 250, 250, 250, 250, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 250, - nil, nil, 250, nil, nil, 250, 250, nil, nil, 250, - nil, nil, nil, nil, nil, 250, nil, nil, nil, nil, - nil, nil, nil, nil, 250, nil, nil, nil, nil, 250, - 250, 250, 250, nil, 250, 250, 250, 250, nil, nil, - nil, nil, 250, 250, nil, nil, nil, 251, 251, 251, - 250, 251, 250, 250, 250, 251, 251, 250, 250, nil, - 251, nil, 251, 251, 251, 251, 251, 251, 251, nil, - nil, nil, nil, nil, 251, 251, 251, 251, 251, 251, - 251, nil, nil, 251, nil, nil, nil, nil, nil, nil, - 251, nil, nil, 251, 251, 251, 251, 251, 251, 251, - 251, nil, 251, 251, 251, nil, 251, 251, 251, 251, - 251, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 251, nil, nil, 251, nil, nil, 251, 251, nil, nil, - 251, nil, nil, nil, nil, nil, 251, nil, nil, nil, - nil, nil, nil, nil, nil, 251, nil, nil, nil, nil, - 251, 251, 251, 251, nil, 251, 251, 251, 251, nil, - nil, nil, nil, 251, 251, nil, nil, nil, 252, 252, - 252, 251, 252, 251, 251, 251, 252, 252, 251, 251, - nil, 252, nil, 252, 252, 252, 252, 252, 252, 252, - nil, nil, nil, nil, nil, 252, 252, 252, 252, 252, - 252, 252, nil, nil, 252, nil, nil, nil, nil, nil, - nil, 252, nil, nil, 252, 252, 252, 252, 252, 252, - 252, 252, nil, 252, 252, 252, nil, 252, 252, 252, - 252, 252, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 252, nil, nil, 252, nil, nil, 252, 252, nil, - nil, 252, nil, nil, nil, nil, nil, 252, nil, nil, - nil, nil, nil, nil, nil, nil, 252, nil, nil, nil, - nil, 252, 252, 252, 252, nil, 252, 252, 252, 252, - nil, nil, nil, nil, 252, 252, nil, nil, nil, 253, - 253, 253, 252, 253, 252, 252, 252, 253, 253, 252, - 252, nil, 253, nil, 253, 253, 253, 253, 253, 253, - 253, nil, nil, nil, nil, nil, 253, 253, 253, 253, - 253, 253, 253, nil, nil, 253, nil, nil, nil, nil, - nil, nil, 253, nil, nil, 253, 253, 253, 253, 253, - 253, 253, 253, nil, 253, 253, 253, nil, 253, 253, - 253, 253, 253, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 253, nil, nil, 253, nil, nil, 253, 253, - nil, nil, 253, nil, nil, nil, nil, nil, 253, nil, - nil, nil, nil, nil, nil, nil, nil, 253, nil, nil, - nil, nil, 253, 253, 253, 253, nil, 253, 253, 253, - 253, nil, nil, nil, nil, 253, 253, nil, nil, nil, - 254, 254, 254, 253, 254, 253, 253, 253, 254, 254, - 253, 253, nil, 254, nil, 254, 254, 254, 254, 254, - 254, 254, nil, nil, nil, nil, nil, 254, 254, 254, - 254, 254, 254, 254, nil, nil, 254, nil, nil, nil, - nil, nil, nil, 254, nil, nil, 254, 254, 254, 254, - 254, 254, 254, 254, nil, 254, 254, 254, nil, 254, - 254, 254, 254, 254, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 254, nil, nil, 254, nil, nil, 254, - 254, nil, nil, 254, nil, nil, nil, nil, nil, 254, - nil, nil, nil, nil, nil, nil, nil, nil, 254, nil, - nil, nil, nil, 254, 254, 254, 254, nil, 254, 254, - 254, 254, nil, nil, nil, nil, 254, 254, nil, nil, - nil, 255, 255, 255, 254, 255, 254, 254, 254, 255, - 255, 254, 254, nil, 255, nil, 255, 255, 255, 255, - 255, 255, 255, nil, nil, nil, nil, nil, 255, 255, - 255, 255, 255, 255, 255, nil, nil, 255, nil, nil, - nil, nil, nil, nil, 255, nil, nil, 255, 255, 255, - 255, 255, 255, 255, 255, nil, 255, 255, 255, nil, - 255, 255, 255, 255, 255, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 255, nil, nil, 255, nil, nil, - 255, 255, nil, nil, 255, nil, nil, nil, nil, nil, - 255, nil, nil, nil, nil, nil, nil, nil, nil, 255, - nil, nil, nil, nil, 255, 255, 255, 255, nil, 255, - 255, 255, 255, nil, nil, nil, nil, 255, 255, nil, - nil, nil, 256, 256, 256, 255, 256, 255, 255, 255, - 256, 256, 255, 255, nil, 256, nil, 256, 256, 256, - 256, 256, 256, 256, nil, nil, nil, nil, nil, 256, - 256, 256, 256, 256, 256, 256, nil, nil, 256, nil, - nil, nil, nil, nil, nil, 256, nil, nil, 256, 256, - 256, 256, 256, 256, 256, 256, nil, 256, 256, 256, - nil, 256, 256, 256, 256, 256, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 256, nil, nil, 256, nil, - nil, 256, 256, nil, nil, 256, nil, nil, nil, nil, - nil, 256, nil, nil, nil, nil, nil, nil, nil, nil, - 256, nil, nil, nil, nil, 256, 256, 256, 256, nil, - 256, 256, 256, 256, nil, nil, nil, nil, 256, 256, - nil, nil, nil, 257, 257, 257, 256, 257, 256, 256, - 256, 257, 257, 256, 256, nil, 257, nil, 257, 257, - 257, 257, 257, 257, 257, nil, nil, nil, nil, nil, - 257, 257, 257, 257, 257, 257, 257, nil, nil, 257, - nil, nil, nil, nil, nil, nil, 257, nil, nil, 257, - 257, 257, 257, 257, 257, 257, 257, nil, 257, 257, - 257, nil, 257, 257, 257, 257, 257, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 257, nil, nil, 257, - nil, nil, 257, 257, nil, nil, 257, nil, nil, nil, - nil, nil, 257, nil, nil, nil, nil, nil, nil, nil, - nil, 257, nil, nil, nil, nil, 257, 257, 257, 257, - nil, 257, 257, 257, 257, nil, nil, nil, nil, 257, - 257, nil, nil, nil, 258, 258, 258, 257, 258, 257, - 257, 257, 258, 258, 257, 257, nil, 258, nil, 258, - 258, 258, 258, 258, 258, 258, nil, nil, nil, nil, - nil, 258, 258, 258, 258, 258, 258, 258, nil, nil, - 258, nil, nil, nil, nil, nil, nil, 258, nil, nil, - 258, 258, 258, 258, 258, 258, 258, 258, nil, 258, - 258, 258, nil, 258, 258, 258, 258, 258, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 258, nil, nil, - 258, nil, nil, 258, 258, nil, nil, 258, nil, nil, - nil, nil, nil, 258, nil, nil, nil, nil, nil, nil, - nil, nil, 258, nil, nil, nil, nil, 258, 258, 258, - 258, nil, 258, 258, 258, 258, nil, nil, nil, nil, - 258, 258, nil, nil, nil, 259, 259, 259, 258, 259, - 258, 258, 258, 259, 259, 258, 258, nil, 259, nil, - 259, 259, 259, 259, 259, 259, 259, nil, nil, nil, - nil, nil, 259, 259, 259, 259, 259, 259, 259, nil, - nil, 259, nil, nil, nil, nil, nil, nil, 259, nil, - nil, 259, 259, 259, 259, 259, 259, 259, 259, nil, - 259, 259, 259, nil, 259, 259, 259, 259, 259, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 259, nil, - nil, 259, nil, nil, 259, 259, nil, nil, 259, nil, - nil, nil, nil, nil, 259, nil, nil, nil, nil, nil, - nil, nil, nil, 259, nil, nil, nil, nil, 259, 259, - 259, 259, nil, 259, 259, 259, 259, nil, nil, nil, - nil, 259, 259, nil, nil, nil, 260, 260, 260, 259, - 260, 259, 259, 259, 260, 260, 259, 259, nil, 260, - nil, 260, 260, 260, 260, 260, 260, 260, nil, nil, - nil, nil, nil, 260, 260, 260, 260, 260, 260, 260, - nil, nil, 260, nil, nil, nil, nil, nil, nil, 260, - nil, nil, 260, 260, 260, 260, 260, 260, 260, 260, - nil, 260, 260, 260, nil, 260, 260, 260, 260, 260, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 260, - nil, nil, 260, nil, nil, 260, 260, nil, nil, 260, - nil, nil, nil, nil, nil, 260, nil, nil, nil, nil, - nil, nil, nil, nil, 260, nil, nil, nil, nil, 260, - 260, 260, 260, nil, 260, 260, 260, 260, nil, nil, - nil, nil, 260, 260, nil, nil, nil, 261, 261, 261, - 260, 261, 260, 260, 260, 261, 261, 260, 260, nil, - 261, nil, 261, 261, 261, 261, 261, 261, 261, nil, - nil, nil, nil, nil, 261, 261, 261, 261, 261, 261, - 261, nil, nil, 261, nil, nil, nil, nil, nil, nil, - 261, nil, nil, 261, 261, 261, 261, 261, 261, 261, - 261, nil, 261, 261, 261, nil, 261, 261, 261, 261, - 261, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 261, nil, nil, 261, nil, nil, 261, 261, nil, nil, - 261, nil, nil, nil, nil, nil, 261, nil, nil, nil, - nil, nil, nil, nil, nil, 261, nil, nil, nil, nil, - 261, 261, 261, 261, nil, 261, 261, 261, 261, nil, - nil, nil, nil, 261, 261, nil, nil, nil, 262, 262, - 262, 261, 262, 261, 261, 261, 262, 262, 261, 261, - nil, 262, nil, 262, 262, 262, 262, 262, 262, 262, - nil, nil, nil, nil, nil, 262, 262, 262, 262, 262, - 262, 262, nil, nil, 262, nil, nil, nil, nil, nil, - nil, 262, nil, nil, 262, 262, 262, 262, 262, 262, - 262, 262, nil, 262, 262, 262, nil, 262, 262, 262, - 262, 262, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 262, nil, nil, 262, nil, nil, 262, 262, nil, - nil, 262, nil, nil, nil, nil, nil, 262, nil, nil, - nil, nil, nil, nil, nil, nil, 262, nil, nil, nil, - nil, 262, 262, 262, 262, nil, 262, 262, 262, 262, - nil, nil, nil, nil, 262, 262, nil, nil, nil, 263, - 263, 263, 262, 263, 262, 262, 262, 263, 263, 262, - 262, nil, 263, nil, 263, 263, 263, 263, 263, 263, - 263, nil, nil, nil, nil, nil, 263, 263, 263, 263, - 263, 263, 263, nil, nil, 263, nil, nil, nil, nil, - nil, nil, 263, nil, nil, 263, 263, 263, 263, 263, - 263, 263, 263, nil, 263, 263, 263, nil, 263, 263, - 263, 263, 263, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 263, nil, nil, 263, nil, nil, 263, 263, - nil, nil, 263, nil, nil, nil, nil, nil, 263, nil, - nil, nil, nil, nil, nil, nil, nil, 263, nil, nil, - nil, nil, 263, 263, 263, 263, nil, 263, 263, 263, - 263, nil, nil, nil, nil, 263, 263, nil, nil, nil, - 264, 264, 264, 263, 264, 263, 263, 263, 264, 264, - 263, 263, nil, 264, nil, 264, 264, 264, 264, 264, - 264, 264, nil, nil, nil, nil, nil, 264, 264, 264, - 264, 264, 264, 264, nil, nil, 264, nil, nil, nil, - nil, nil, nil, 264, nil, nil, 264, 264, 264, 264, - 264, 264, 264, 264, nil, 264, 264, 264, nil, 264, - 264, 264, 264, 264, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 264, nil, nil, 264, nil, nil, 264, - 264, nil, nil, 264, nil, nil, nil, nil, nil, 264, - nil, nil, nil, nil, nil, nil, nil, nil, 264, nil, - nil, nil, nil, 264, 264, 264, 264, nil, 264, 264, - 264, 264, nil, nil, nil, nil, 264, 264, nil, nil, - nil, 269, 269, 269, 264, 269, 264, 264, 264, 269, - 269, 264, 264, nil, 269, nil, 269, 269, 269, 269, - 269, 269, 269, nil, nil, nil, nil, nil, 269, 269, - 269, 269, 269, 269, 269, nil, nil, 269, nil, nil, - nil, nil, nil, nil, 269, nil, nil, 269, 269, 269, - 269, 269, 269, 269, 269, nil, 269, 269, 269, nil, - 269, 269, 269, 269, 269, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 269, nil, nil, 269, nil, nil, - 269, 269, nil, nil, 269, nil, nil, nil, nil, nil, - 269, nil, nil, nil, nil, nil, nil, nil, nil, 269, - nil, nil, nil, nil, 269, 269, 269, 269, nil, 269, - 269, 269, 269, nil, nil, nil, nil, 269, 269, nil, - nil, nil, 276, 276, 276, 269, 276, 269, 269, 269, - 276, 276, 269, 269, nil, 276, nil, 276, 276, 276, - 276, 276, 276, 276, nil, nil, nil, nil, nil, 276, - 276, 276, 276, 276, 276, 276, nil, nil, 276, nil, - nil, nil, nil, nil, nil, 276, nil, nil, 276, 276, - 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, - nil, 276, 276, 276, 276, 276, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 276, nil, nil, 276, nil, - nil, 276, 276, nil, nil, 276, nil, 276, nil, 276, - nil, 276, nil, nil, 276, nil, nil, nil, nil, nil, - 276, nil, nil, nil, nil, 276, 276, 276, 276, nil, - 276, 276, 276, 276, nil, nil, nil, nil, 276, 276, - nil, nil, nil, 277, 277, 277, 276, 277, 276, 276, - 276, 277, 277, 276, 276, nil, 277, nil, 277, 277, - 277, 277, 277, 277, 277, nil, nil, nil, nil, nil, - 277, 277, 277, 277, 277, 277, 277, nil, nil, 277, - nil, nil, nil, nil, nil, nil, 277, nil, nil, 277, - 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, - 277, nil, 277, 277, 277, 277, 277, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 277, nil, nil, 277, - nil, nil, 277, 277, nil, nil, 277, nil, 277, nil, - 277, nil, 277, nil, nil, 277, nil, nil, nil, nil, - nil, 277, nil, nil, nil, nil, 277, 277, 277, 277, - nil, 277, 277, 277, 277, nil, nil, nil, nil, 277, - 277, nil, nil, nil, 285, 285, 285, 277, 285, 277, - 277, 277, 285, 285, 277, 277, nil, 285, nil, 285, - 285, 285, 285, 285, 285, 285, nil, nil, nil, nil, - nil, 285, 285, 285, 285, 285, 285, 285, nil, nil, - 285, nil, nil, nil, nil, nil, nil, 285, nil, nil, - 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, - 285, 285, nil, 285, 285, 285, 285, 285, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 285, nil, nil, - 285, nil, nil, 285, 285, nil, nil, 285, nil, 285, - nil, 285, nil, 285, nil, nil, 285, nil, nil, nil, - nil, nil, 285, nil, nil, nil, nil, 285, 285, 285, - 285, nil, 285, 285, 285, 285, nil, nil, nil, nil, - 285, 285, 285, nil, nil, 292, 292, 292, 285, 292, - 285, 285, 285, 292, 292, 285, 285, nil, 292, nil, - 292, 292, 292, 292, 292, 292, 292, nil, nil, nil, - nil, nil, 292, 292, 292, 292, 292, 292, 292, nil, - nil, 292, nil, nil, nil, nil, nil, nil, 292, nil, - nil, 292, 292, 292, 292, 292, 292, 292, 292, nil, - 292, 292, 292, nil, 292, 292, 292, 292, 292, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 292, nil, - nil, 292, nil, nil, 292, 292, nil, nil, 292, nil, - nil, nil, nil, nil, 292, nil, nil, nil, nil, nil, - nil, nil, nil, 292, nil, nil, nil, nil, 292, 292, - 292, 292, nil, 292, 292, 292, 292, nil, nil, nil, - nil, 292, 292, nil, nil, nil, 294, 294, 294, 292, - 294, 292, 292, 292, 294, 294, 292, 292, nil, 294, - nil, 294, 294, 294, 294, 294, 294, 294, nil, nil, - nil, nil, nil, 294, 294, 294, 294, 294, 294, 294, - nil, nil, 294, nil, nil, nil, nil, nil, nil, 294, - nil, nil, 294, 294, 294, 294, 294, 294, 294, 294, - nil, 294, 294, 294, nil, 294, 294, 294, 294, 294, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 294, - nil, nil, 294, nil, nil, 294, 294, nil, nil, 294, - nil, nil, nil, nil, nil, 294, nil, nil, nil, nil, - nil, nil, nil, nil, 294, nil, nil, nil, nil, 294, - 294, 294, 294, nil, 294, 294, 294, 294, nil, nil, - nil, nil, 294, 294, nil, nil, nil, 297, 297, 297, - 294, 297, 294, 294, 294, 297, 297, 294, 294, nil, - 297, nil, 297, 297, 297, 297, 297, 297, 297, nil, - nil, nil, nil, nil, 297, 297, 297, 297, 297, 297, - 297, nil, nil, 297, nil, nil, nil, nil, nil, nil, - 297, nil, nil, 297, 297, 297, 297, 297, 297, 297, - 297, nil, 297, 297, 297, nil, 297, 297, 297, 297, - 297, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 297, nil, nil, 297, nil, nil, 297, 297, nil, nil, - 297, nil, nil, nil, nil, nil, 297, nil, nil, nil, - nil, nil, nil, nil, nil, 297, nil, nil, nil, nil, - 297, 297, 297, 297, nil, 297, 297, 297, 297, nil, - nil, nil, nil, 297, 297, nil, nil, nil, 298, 298, - 298, 297, 298, 297, 297, 297, 298, 298, 297, 297, - nil, 298, nil, 298, 298, 298, 298, 298, 298, 298, - nil, nil, nil, nil, nil, 298, 298, 298, 298, 298, - 298, 298, nil, nil, 298, nil, nil, nil, nil, nil, - nil, 298, nil, nil, 298, 298, 298, 298, 298, 298, - 298, 298, nil, 298, 298, 298, nil, 298, 298, 298, - 298, 298, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 298, nil, nil, 298, nil, nil, 298, 298, nil, - nil, 298, nil, nil, nil, nil, nil, 298, nil, nil, - nil, nil, nil, nil, nil, nil, 298, nil, nil, nil, - nil, 298, 298, 298, 298, nil, 298, 298, 298, 298, - nil, nil, nil, nil, 298, 298, nil, nil, nil, nil, - nil, nil, 298, nil, 298, 298, 298, nil, nil, 298, - 298, 303, 303, 303, 303, 303, nil, nil, nil, 303, - 303, nil, nil, nil, 303, nil, 303, 303, 303, 303, - 303, 303, 303, nil, nil, nil, nil, nil, 303, 303, - 303, 303, 303, 303, 303, nil, nil, 303, nil, nil, - nil, nil, nil, 303, 303, nil, 303, 303, 303, 303, - 303, 303, 303, 303, 303, nil, 303, 303, 303, nil, - 303, 303, 303, 303, 303, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 303, nil, nil, 303, nil, nil, - 303, 303, nil, nil, 303, nil, 303, nil, nil, nil, - 303, nil, nil, nil, nil, nil, nil, nil, nil, 303, - nil, nil, nil, nil, 303, 303, 303, 303, nil, 303, - 303, 303, 303, nil, nil, nil, nil, 303, 303, nil, - nil, nil, 337, 337, 337, 303, 337, 303, 303, 303, - 337, 337, 303, 303, nil, 337, nil, 337, 337, 337, - 337, 337, 337, 337, nil, nil, nil, nil, nil, 337, - 337, 337, 337, 337, 337, 337, nil, nil, 337, nil, - nil, nil, nil, nil, nil, 337, nil, nil, 337, 337, - 337, 337, 337, 337, 337, 337, nil, 337, 337, 337, - nil, 337, 337, 337, 337, 337, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 337, nil, nil, 337, nil, - nil, 337, 337, nil, nil, 337, nil, nil, nil, nil, - nil, 337, nil, nil, nil, nil, nil, nil, nil, nil, - 337, nil, nil, nil, nil, 337, 337, 337, 337, nil, - 337, 337, 337, 337, nil, nil, nil, nil, 337, 337, - nil, nil, nil, 339, 339, 339, 337, 339, 337, 337, - 337, 339, 339, 337, 337, nil, 339, nil, 339, 339, - 339, 339, 339, 339, 339, nil, nil, nil, nil, nil, - 339, 339, 339, 339, 339, 339, 339, nil, nil, 339, - nil, nil, nil, nil, nil, nil, 339, nil, nil, 339, - 339, 339, 339, 339, 339, 339, 339, nil, 339, 339, - 339, nil, 339, 339, 339, 339, 339, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 339, nil, nil, 339, - 339, nil, 339, 339, nil, nil, 339, nil, nil, nil, - nil, nil, 339, nil, nil, nil, nil, nil, nil, nil, - nil, 339, nil, nil, nil, nil, 339, 339, 339, 339, - nil, 339, 339, 339, 339, nil, nil, nil, nil, 339, - 339, nil, nil, nil, 355, 355, 355, 339, 355, 339, - 339, 339, 355, 355, 339, 339, nil, 355, nil, 355, - 355, 355, 355, 355, 355, 355, nil, nil, nil, nil, - nil, 355, 355, 355, 355, 355, 355, 355, nil, nil, - 355, nil, nil, nil, nil, nil, nil, 355, nil, nil, - 355, 355, 355, 355, 355, 355, 355, 355, nil, 355, - 355, 355, nil, 355, 355, 355, 355, 355, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 355, nil, nil, - 355, nil, nil, 355, 355, nil, nil, 355, nil, nil, - nil, nil, nil, 355, nil, nil, nil, nil, nil, nil, - nil, nil, 355, nil, nil, nil, nil, 355, 355, 355, - 355, nil, 355, 355, 355, 355, nil, nil, nil, nil, - 355, 355, nil, nil, nil, 376, 376, 376, 355, 376, - 355, 355, 355, 376, 376, 355, 355, nil, 376, nil, - 376, 376, 376, 376, 376, 376, 376, nil, nil, nil, - nil, nil, 376, 376, 376, 376, 376, 376, 376, nil, - nil, 376, nil, nil, nil, nil, nil, nil, 376, nil, - nil, 376, 376, 376, 376, 376, 376, 376, 376, nil, - 376, 376, 376, nil, 376, 376, 376, 376, 376, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 376, nil, - nil, 376, nil, nil, 376, 376, nil, nil, 376, nil, - nil, nil, nil, nil, 376, nil, nil, nil, nil, nil, - nil, nil, nil, 376, nil, nil, nil, nil, 376, 376, - 376, 376, nil, 376, 376, 376, 376, nil, nil, nil, - nil, 376, 376, nil, nil, nil, 392, 392, 392, 376, - 392, 376, 376, 376, 392, 392, 376, 376, nil, 392, - nil, 392, 392, 392, 392, 392, 392, 392, nil, nil, - nil, nil, nil, 392, 392, 392, 392, 392, 392, 392, - nil, nil, 392, nil, nil, nil, nil, nil, nil, 392, - nil, nil, 392, 392, 392, 392, 392, 392, 392, 392, - nil, 392, 392, 392, nil, 392, 392, 392, 392, 392, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 392, - nil, nil, 392, nil, nil, 392, 392, nil, nil, 392, - nil, nil, nil, nil, nil, 392, nil, nil, nil, nil, - nil, nil, nil, nil, 392, nil, nil, nil, nil, 392, - 392, 392, 392, nil, 392, 392, 392, 392, nil, nil, - nil, nil, 392, 392, nil, nil, nil, 419, 419, 419, - 392, 419, 392, 392, 392, 419, 419, 392, 392, nil, - 419, nil, 419, 419, 419, 419, 419, 419, 419, nil, - nil, nil, nil, nil, 419, 419, 419, 419, 419, 419, - 419, nil, nil, 419, nil, nil, nil, nil, nil, nil, - 419, nil, nil, 419, 419, 419, 419, 419, 419, 419, - 419, nil, 419, 419, 419, nil, 419, 419, 419, 419, - 419, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 419, nil, nil, 419, nil, nil, 419, 419, nil, nil, - 419, nil, nil, nil, nil, nil, 419, nil, nil, nil, - nil, nil, nil, nil, nil, 419, nil, nil, nil, nil, - 419, 419, 419, 419, nil, 419, 419, 419, 419, nil, - nil, nil, nil, 419, 419, nil, nil, nil, nil, nil, - nil, 419, nil, 419, 419, 419, 443, nil, 419, 419, - nil, nil, nil, 443, 443, 443, nil, nil, 443, 443, - 443, nil, 443, nil, nil, nil, nil, nil, nil, nil, - 443, 443, 443, 443, nil, nil, nil, nil, nil, nil, - nil, nil, 443, 443, nil, 443, 443, 443, 443, 443, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 443, 443, 443, 443, 443, 443, 443, 443, - 443, 443, 443, 443, 443, 443, nil, nil, 443, 443, - 443, nil, nil, 443, nil, 443, 443, nil, nil, 443, - 443, nil, 443, nil, 443, nil, 443, nil, 443, 443, - nil, 443, 443, 443, 443, 443, nil, 443, 443, 443, - 874, nil, 874, 874, 874, 874, 874, nil, nil, nil, - nil, nil, nil, 443, nil, 874, 443, 443, 452, 443, - nil, 443, nil, nil, nil, 452, 452, 452, 443, nil, - 452, 452, 452, nil, 452, nil, nil, 874, nil, nil, - nil, nil, 452, 452, 452, 452, 452, nil, 874, 874, - nil, nil, nil, 874, 452, 452, nil, 452, 452, 452, - 452, 452, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 452, 452, 452, 452, 452, 452, - 452, 452, 452, 452, 452, 452, 452, 452, nil, nil, - 452, 452, 452, nil, nil, 452, nil, nil, 452, nil, - nil, 452, 452, nil, 452, nil, 452, nil, 452, nil, - 452, 452, nil, 452, 452, 452, 452, 452, nil, 452, - 452, 452, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 452, nil, nil, 452, 452, - 452, 452, nil, 452, 453, 452, nil, nil, nil, nil, - 452, 453, 453, 453, nil, nil, 453, 453, 453, nil, - 453, nil, nil, nil, nil, nil, nil, nil, 453, 453, - 453, 453, 453, nil, nil, nil, nil, nil, nil, nil, - 453, 453, nil, 453, 453, 453, 453, 453, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 453, 453, 453, 453, 453, 453, 453, 453, 453, 453, - 453, 453, 453, 453, nil, nil, 453, 453, 453, nil, - nil, 453, nil, nil, 453, nil, nil, 453, 453, nil, - 453, nil, 453, nil, 453, nil, 453, 453, nil, 453, - 453, 453, 453, 453, nil, 453, 453, 453, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 453, nil, nil, 453, 453, 453, 453, nil, 453, - nil, 453, nil, 462, 462, 462, 453, 462, nil, nil, - nil, 462, 462, nil, nil, nil, 462, nil, 462, 462, - 462, 462, 462, 462, 462, nil, nil, nil, nil, nil, - 462, 462, 462, 462, 462, 462, 462, nil, nil, 462, - nil, nil, nil, nil, nil, nil, 462, nil, nil, 462, - 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, - 462, nil, 462, 462, 462, 462, 462, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 462, nil, nil, 462, - nil, nil, 462, 462, nil, nil, 462, nil, 462, nil, - 462, nil, 462, nil, nil, 462, nil, nil, nil, nil, - nil, 462, nil, nil, nil, nil, 462, 462, 462, 462, - nil, 462, 462, 462, 462, nil, nil, nil, nil, 462, - 462, nil, nil, nil, 464, 464, 464, 462, 464, 462, - 462, 462, 464, 464, 462, 462, nil, 464, nil, 464, - 464, 464, 464, 464, 464, 464, nil, nil, nil, nil, - nil, 464, 464, 464, 464, 464, 464, 464, nil, nil, - 464, nil, nil, nil, nil, nil, nil, 464, nil, nil, - 464, 464, 464, 464, 464, 464, 464, 464, nil, 464, - 464, 464, nil, 464, 464, 464, 464, 464, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 464, nil, nil, - 464, nil, nil, 464, 464, nil, nil, 464, nil, nil, - nil, nil, nil, 464, nil, nil, nil, nil, nil, nil, - nil, nil, 464, nil, nil, nil, nil, 464, 464, 464, - 464, nil, 464, 464, 464, 464, nil, nil, nil, nil, - 464, 464, nil, nil, nil, 465, 465, 465, 464, 465, - 464, 464, 464, 465, 465, 464, 464, nil, 465, nil, - 465, 465, 465, 465, 465, 465, 465, nil, nil, nil, - nil, nil, 465, 465, 465, 465, 465, 465, 465, nil, - nil, 465, nil, nil, nil, nil, nil, nil, 465, nil, - nil, 465, 465, 465, 465, 465, 465, 465, 465, nil, - 465, 465, 465, nil, 465, 465, 465, 465, 465, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 465, nil, - nil, 465, nil, nil, 465, 465, nil, nil, 465, nil, - nil, nil, nil, nil, 465, nil, nil, nil, nil, nil, - nil, nil, nil, 465, nil, nil, nil, nil, 465, 465, - 465, 465, nil, 465, 465, 465, 465, nil, nil, nil, - nil, 465, 465, nil, nil, nil, 466, 466, 466, 465, - 466, 465, 465, 465, 466, 466, 465, 465, nil, 466, - nil, 466, 466, 466, 466, 466, 466, 466, nil, nil, - nil, nil, nil, 466, 466, 466, 466, 466, 466, 466, - nil, nil, 466, nil, nil, nil, nil, nil, nil, 466, - nil, nil, 466, 466, 466, 466, 466, 466, 466, 466, - nil, 466, 466, 466, nil, 466, 466, 466, 466, 466, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 466, - nil, nil, 466, nil, nil, 466, 466, nil, nil, 466, - nil, nil, nil, nil, nil, 466, nil, nil, nil, nil, - nil, nil, nil, nil, 466, nil, nil, nil, nil, 466, - 466, 466, 466, nil, 466, 466, 466, 466, nil, nil, - nil, nil, 466, 466, nil, nil, nil, nil, nil, nil, - 466, nil, 466, 466, 466, 492, nil, 466, 466, nil, - nil, nil, 492, 492, 492, nil, nil, 492, 492, 492, - 845, 492, 845, 845, 845, 845, 845, nil, nil, 492, - 492, 492, nil, nil, nil, 845, nil, nil, nil, nil, - nil, 492, 492, nil, 492, 492, 492, 492, 492, nil, - nil, nil, nil, nil, nil, nil, nil, 845, nil, 556, - nil, 556, 556, 556, 556, 556, 845, 845, 845, 845, - nil, nil, nil, 845, 556, nil, nil, nil, nil, nil, - nil, nil, 492, nil, nil, nil, nil, nil, nil, 492, - nil, nil, nil, nil, 492, 492, 556, 556, nil, 845, - nil, nil, nil, nil, nil, 556, 556, 556, 556, nil, - nil, nil, 556, nil, nil, nil, nil, 492, 492, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 492, nil, nil, 492, nil, 497, 497, 497, - 492, 497, nil, nil, nil, 497, 497, 492, nil, nil, - 497, nil, 497, 497, 497, 497, 497, 497, 497, nil, - nil, nil, nil, nil, 497, 497, 497, 497, 497, 497, - 497, nil, nil, 497, nil, nil, nil, nil, nil, nil, - 497, nil, nil, 497, 497, 497, 497, 497, 497, 497, - 497, nil, 497, 497, 497, nil, 497, 497, 497, 497, - 497, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 497, nil, nil, 497, nil, nil, 497, 497, nil, nil, - 497, nil, nil, nil, nil, nil, 497, nil, nil, nil, - nil, nil, nil, nil, nil, 497, nil, nil, nil, nil, - 497, 497, 497, 497, nil, 497, 497, 497, 497, nil, - nil, nil, nil, 497, 497, nil, nil, nil, 507, 507, - 507, 497, 507, 497, 497, 497, 507, 507, 497, 497, - nil, 507, nil, 507, 507, 507, 507, 507, 507, 507, - nil, nil, nil, nil, nil, 507, 507, 507, 507, 507, - 507, 507, nil, nil, 507, nil, nil, nil, nil, nil, - nil, 507, nil, nil, 507, 507, 507, 507, 507, 507, - 507, 507, 507, 507, 507, 507, nil, 507, 507, 507, - 507, 507, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 507, nil, nil, 507, nil, nil, 507, 507, nil, - nil, 507, nil, 507, nil, 507, nil, 507, nil, nil, - 507, nil, nil, nil, nil, nil, 507, nil, nil, nil, - nil, 507, 507, 507, 507, nil, 507, 507, 507, 507, - nil, nil, nil, nil, 507, 507, nil, nil, nil, 509, - 509, 509, 507, 509, 507, 507, 507, 509, 509, 507, - 507, nil, 509, nil, 509, 509, 509, 509, 509, 509, - 509, nil, nil, nil, nil, nil, 509, 509, 509, 509, - 509, 509, 509, nil, nil, 509, nil, nil, nil, nil, - nil, nil, 509, nil, nil, 509, 509, 509, 509, 509, - 509, 509, 509, 509, 509, 509, 509, nil, 509, 509, - 509, 509, 509, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 509, nil, nil, 509, nil, nil, 509, 509, - nil, nil, 509, nil, nil, nil, 509, nil, 509, nil, - nil, 509, nil, nil, nil, nil, nil, 509, nil, nil, - nil, nil, 509, 509, 509, 509, nil, 509, 509, 509, - 509, nil, nil, nil, nil, 509, 509, nil, nil, nil, - 511, 511, 511, 509, 511, 509, 509, 509, 511, 511, - 509, 509, nil, 511, nil, 511, 511, 511, 511, 511, - 511, 511, nil, nil, nil, nil, nil, 511, 511, 511, - 511, 511, 511, 511, nil, nil, 511, nil, nil, nil, - nil, nil, nil, 511, nil, nil, 511, 511, 511, 511, - 511, 511, 511, 511, nil, 511, 511, 511, nil, 511, - 511, 511, 511, 511, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 511, nil, nil, 511, nil, nil, 511, - 511, nil, nil, 511, nil, nil, nil, nil, nil, 511, - nil, nil, nil, nil, nil, nil, nil, nil, 511, nil, - nil, nil, nil, 511, 511, 511, 511, nil, 511, 511, - 511, 511, nil, nil, nil, nil, 511, 511, nil, nil, - nil, nil, nil, nil, 511, nil, 511, 511, 511, nil, - nil, 511, 511, 517, 517, 517, 517, 517, nil, nil, - nil, 517, 517, nil, nil, nil, 517, nil, 517, 517, - 517, 517, 517, 517, 517, nil, nil, nil, nil, nil, - 517, 517, 517, 517, 517, 517, 517, nil, nil, 517, - nil, nil, nil, nil, nil, 517, 517, 517, 517, 517, - 517, 517, 517, 517, 517, 517, 517, nil, 517, 517, - 517, nil, 517, 517, 517, 517, 517, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 517, nil, nil, 517, - nil, nil, 517, 517, nil, nil, 517, nil, 517, nil, - nil, nil, 517, nil, nil, nil, nil, nil, nil, nil, - nil, 517, nil, nil, nil, nil, 517, 517, 517, 517, - nil, 517, 517, 517, 517, nil, nil, nil, nil, 517, - 517, nil, nil, nil, nil, nil, 517, 517, nil, 517, - 517, 517, nil, nil, 517, 517, 527, 527, 527, nil, - 527, nil, nil, nil, 527, 527, nil, nil, nil, 527, - nil, 527, 527, 527, 527, 527, 527, 527, nil, nil, - nil, nil, nil, 527, 527, 527, 527, 527, 527, 527, - nil, nil, 527, nil, nil, nil, nil, nil, nil, 527, - nil, nil, 527, 527, 527, 527, 527, 527, 527, 527, - 527, 527, 527, 527, nil, 527, 527, 527, 527, 527, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 527, - nil, nil, 527, nil, nil, 527, 527, nil, nil, 527, - nil, 527, nil, 527, nil, 527, nil, nil, 527, nil, - nil, nil, nil, nil, 527, nil, nil, nil, nil, 527, - 527, 527, 527, nil, 527, 527, 527, 527, nil, nil, - nil, nil, 527, 527, nil, nil, nil, 536, 536, 536, - 527, 536, 527, 527, 527, 536, 536, 527, 527, nil, - 536, nil, 536, 536, 536, 536, 536, 536, 536, nil, - nil, nil, nil, nil, 536, 536, 536, 536, 536, 536, - 536, nil, nil, 536, nil, nil, nil, nil, nil, nil, - 536, nil, nil, 536, 536, 536, 536, 536, 536, 536, - 536, nil, 536, 536, 536, nil, 536, 536, 536, 536, - 536, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 536, nil, nil, 536, nil, nil, 536, 536, nil, nil, - 536, nil, nil, nil, nil, nil, 536, nil, nil, nil, - nil, nil, nil, nil, nil, 536, nil, nil, nil, nil, - 536, 536, 536, 536, nil, 536, 536, 536, 536, nil, - nil, nil, nil, 536, 536, nil, nil, nil, 539, 539, - 539, 536, 539, 536, 536, 536, 539, 539, 536, 536, - nil, 539, nil, 539, 539, 539, 539, 539, 539, 539, - nil, nil, nil, nil, nil, 539, 539, 539, 539, 539, - 539, 539, nil, nil, 539, nil, nil, nil, nil, nil, - nil, 539, nil, nil, 539, 539, 539, 539, 539, 539, - 539, 539, nil, 539, 539, 539, nil, 539, 539, 539, - 539, 539, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 539, nil, nil, 539, nil, nil, 539, 539, nil, - nil, 539, nil, nil, nil, nil, nil, 539, nil, nil, - nil, nil, nil, nil, nil, nil, 539, nil, nil, nil, - nil, 539, 539, 539, 539, nil, 539, 539, 539, 539, - nil, nil, nil, nil, 539, 539, nil, nil, nil, 542, - 542, 542, 539, 542, 539, 539, 539, 542, 542, 539, - 539, nil, 542, nil, 542, 542, 542, 542, 542, 542, - 542, nil, nil, nil, nil, nil, 542, 542, 542, 542, - 542, 542, 542, nil, nil, 542, nil, nil, nil, nil, - nil, nil, 542, nil, nil, 542, 542, 542, 542, 542, - 542, 542, 542, nil, 542, 542, 542, nil, 542, 542, - 542, 542, 542, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 542, nil, nil, 542, nil, nil, 542, 542, - nil, nil, 542, nil, nil, nil, nil, nil, 542, nil, - nil, nil, nil, nil, nil, nil, nil, 542, nil, nil, - nil, nil, 542, 542, 542, 542, nil, 542, 542, 542, - 542, nil, nil, nil, nil, 542, 542, nil, nil, nil, - 548, 548, 548, 542, 548, 542, 542, 542, 548, 548, - 542, 542, nil, 548, nil, 548, 548, 548, 548, 548, - 548, 548, nil, nil, nil, nil, nil, 548, 548, 548, - 548, 548, 548, 548, nil, nil, 548, nil, nil, nil, - nil, nil, nil, 548, nil, nil, 548, 548, 548, 548, - 548, 548, 548, 548, 548, 548, 548, 548, nil, 548, - 548, 548, 548, 548, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 548, nil, nil, 548, nil, nil, 548, - 548, nil, nil, 548, nil, 548, nil, nil, nil, 548, - nil, nil, 548, nil, nil, nil, nil, nil, 548, nil, - nil, nil, nil, 548, 548, 548, 548, nil, 548, 548, - 548, 548, nil, nil, nil, nil, 548, 548, nil, nil, - nil, 551, 551, 551, 548, 551, 548, 548, 548, 551, - 551, 548, 548, nil, 551, nil, 551, 551, 551, 551, - 551, 551, 551, nil, nil, nil, nil, nil, 551, 551, - 551, 551, 551, 551, 551, nil, nil, 551, nil, nil, - nil, nil, nil, nil, 551, nil, nil, 551, 551, 551, - 551, 551, 551, 551, 551, 551, 551, 551, 551, nil, - 551, 551, 551, 551, 551, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 551, nil, nil, 551, nil, nil, - 551, 551, nil, nil, 551, nil, nil, nil, nil, nil, - 551, nil, nil, 551, nil, nil, nil, nil, nil, 551, - nil, nil, nil, nil, 551, 551, 551, 551, nil, 551, - 551, 551, 551, nil, nil, nil, nil, 551, 551, nil, - nil, nil, 566, 566, 566, 551, 566, 551, 551, 551, - 566, 566, 551, 551, nil, 566, nil, 566, 566, 566, - 566, 566, 566, 566, nil, nil, nil, nil, nil, 566, - 566, 566, 566, 566, 566, 566, nil, nil, 566, nil, - nil, nil, nil, nil, nil, 566, nil, nil, 566, 566, - 566, 566, 566, 566, 566, 566, nil, 566, 566, 566, - nil, 566, 566, 566, 566, 566, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 566, nil, nil, 566, nil, - nil, 566, 566, nil, nil, 566, nil, 566, nil, nil, - nil, 566, nil, nil, nil, nil, nil, nil, nil, nil, - 566, nil, nil, nil, nil, 566, 566, 566, 566, nil, - 566, 566, 566, 566, nil, nil, nil, nil, 566, 566, - nil, nil, nil, 567, 567, 567, 566, 567, 566, 566, - 566, 567, 567, 566, 566, nil, 567, nil, 567, 567, - 567, 567, 567, 567, 567, nil, nil, nil, nil, nil, - 567, 567, 567, 567, 567, 567, 567, nil, nil, 567, - nil, nil, nil, nil, nil, nil, 567, nil, nil, 567, - 567, 567, 567, 567, 567, 567, 567, 567, 567, 567, - 567, nil, 567, 567, 567, 567, 567, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 567, nil, nil, 567, - nil, nil, 567, 567, nil, nil, 567, nil, 567, nil, - 567, nil, 567, nil, nil, 567, nil, nil, nil, nil, - nil, 567, nil, nil, nil, nil, 567, 567, 567, 567, - nil, 567, 567, 567, 567, nil, nil, nil, nil, 567, - 567, nil, nil, nil, 577, 577, 577, 567, 577, 567, - 567, 567, 577, 577, 567, 567, nil, 577, nil, 577, - 577, 577, 577, 577, 577, 577, nil, nil, nil, nil, - nil, 577, 577, 577, 577, 577, 577, 577, nil, nil, - 577, nil, nil, nil, nil, nil, nil, 577, nil, nil, - 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, - 577, 577, nil, 577, 577, 577, 577, 577, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 577, nil, nil, - 577, nil, nil, 577, 577, nil, nil, 577, nil, 577, - nil, 577, nil, 577, nil, nil, 577, nil, nil, nil, - nil, nil, 577, nil, nil, nil, nil, 577, 577, 577, - 577, nil, 577, 577, 577, 577, nil, nil, nil, nil, - 577, 577, nil, nil, nil, nil, nil, nil, 577, nil, - 577, 577, 577, nil, nil, 577, 577, 608, 608, 608, - 608, 608, nil, nil, nil, 608, 608, nil, nil, nil, - 608, nil, 608, 608, 608, 608, 608, 608, 608, nil, - nil, nil, nil, nil, 608, 608, 608, 608, 608, 608, - 608, nil, nil, 608, nil, nil, nil, nil, nil, 608, - 608, nil, 608, 608, 608, 608, 608, 608, 608, 608, - 608, nil, 608, 608, 608, nil, 608, 608, 608, 608, - 608, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 608, nil, nil, 608, nil, nil, 608, 608, nil, nil, - 608, nil, 608, nil, nil, nil, 608, nil, nil, nil, - nil, nil, nil, nil, nil, 608, nil, nil, nil, nil, - 608, 608, 608, 608, nil, 608, 608, 608, 608, nil, - nil, nil, nil, 608, 608, nil, nil, nil, 610, 610, - 610, 608, 610, 608, 608, 608, 610, 610, 608, 608, - nil, 610, nil, 610, 610, 610, 610, 610, 610, 610, - nil, nil, nil, nil, nil, 610, 610, 610, 610, 610, - 610, 610, nil, nil, 610, nil, nil, nil, nil, nil, - nil, 610, nil, nil, 610, 610, 610, 610, 610, 610, - 610, 610, nil, 610, 610, 610, nil, 610, 610, 610, - 610, 610, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 610, nil, nil, 610, nil, nil, 610, 610, nil, - nil, 610, nil, 610, nil, nil, nil, 610, nil, nil, - nil, nil, nil, nil, nil, nil, 610, nil, nil, nil, - nil, 610, 610, 610, 610, nil, 610, 610, 610, 610, - nil, nil, nil, nil, 610, 610, nil, nil, nil, 611, - 611, 611, 610, 611, 610, 610, 610, 611, 611, 610, - 610, nil, 611, nil, 611, 611, 611, 611, 611, 611, - 611, nil, nil, nil, nil, nil, 611, 611, 611, 611, - 611, 611, 611, nil, nil, 611, nil, nil, nil, nil, - nil, nil, 611, nil, nil, 611, 611, 611, 611, 611, - 611, 611, 611, nil, 611, 611, 611, nil, 611, 611, - 611, 611, 611, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 611, nil, nil, 611, nil, nil, 611, 611, - nil, nil, 611, nil, nil, nil, nil, nil, 611, nil, - nil, nil, nil, nil, nil, nil, nil, 611, nil, nil, - nil, nil, 611, 611, 611, 611, nil, 611, 611, 611, - 611, nil, nil, nil, nil, 611, 611, nil, nil, nil, - 612, 612, 612, 611, 612, 611, 611, 611, 612, 612, - 611, 611, nil, 612, nil, 612, 612, 612, 612, 612, - 612, 612, nil, nil, nil, nil, nil, 612, 612, 612, - 612, 612, 612, 612, nil, nil, 612, nil, nil, nil, - nil, nil, nil, 612, nil, nil, 612, 612, 612, 612, - 612, 612, 612, 612, 612, 612, 612, 612, nil, 612, - 612, 612, 612, 612, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 612, nil, nil, 612, nil, nil, 612, - 612, nil, nil, 612, nil, 612, nil, 612, nil, 612, - nil, nil, 612, nil, nil, nil, nil, nil, 612, nil, - nil, nil, nil, 612, 612, 612, 612, nil, 612, 612, - 612, 612, nil, nil, nil, nil, 612, 612, nil, nil, - nil, nil, nil, nil, 612, nil, 612, 612, 612, nil, - nil, 612, 612, 615, 615, 615, 615, 615, nil, nil, - nil, 615, 615, nil, nil, nil, 615, nil, 615, 615, - 615, 615, 615, 615, 615, nil, nil, nil, nil, nil, - 615, 615, 615, 615, 615, 615, 615, nil, nil, 615, - nil, nil, nil, nil, nil, 615, 615, nil, 615, 615, - 615, 615, 615, 615, 615, 615, 615, nil, 615, 615, - 615, nil, 615, 615, 615, 615, 615, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 615, nil, nil, 615, - nil, nil, 615, 615, nil, nil, 615, nil, 615, nil, - nil, nil, 615, nil, nil, nil, nil, nil, nil, nil, - nil, 615, nil, nil, nil, nil, 615, 615, 615, 615, - nil, 615, 615, 615, 615, nil, nil, nil, nil, 615, - 615, nil, nil, nil, 616, 616, 616, 615, 616, 615, - 615, 615, 616, 616, 615, 615, nil, 616, nil, 616, - 616, 616, 616, 616, 616, 616, nil, nil, nil, nil, - nil, 616, 616, 616, 616, 616, 616, 616, nil, nil, - 616, nil, nil, nil, nil, nil, nil, 616, nil, nil, - 616, 616, 616, 616, 616, 616, 616, 616, nil, 616, - 616, 616, nil, 616, 616, 616, 616, 616, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 616, nil, nil, - 616, nil, nil, 616, 616, nil, nil, 616, nil, nil, - nil, nil, nil, 616, nil, nil, nil, nil, nil, nil, - nil, nil, 616, nil, nil, nil, nil, 616, 616, 616, - 616, nil, 616, 616, 616, 616, nil, nil, nil, nil, - 616, 616, nil, nil, nil, 619, 619, 619, 616, 619, - 616, 616, 616, 619, 619, 616, 616, nil, 619, nil, - 619, 619, 619, 619, 619, 619, 619, nil, nil, nil, - nil, nil, 619, 619, 619, 619, 619, 619, 619, nil, - nil, 619, nil, nil, nil, nil, nil, nil, 619, nil, - nil, 619, 619, 619, 619, 619, 619, 619, 619, 619, - 619, 619, 619, nil, 619, 619, 619, 619, 619, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 619, nil, - nil, 619, nil, nil, 619, 619, nil, nil, 619, nil, - 619, nil, 619, nil, 619, nil, nil, 619, nil, nil, - nil, nil, nil, 619, nil, nil, nil, nil, 619, 619, - 619, 619, nil, 619, 619, 619, 619, nil, nil, nil, - nil, 619, 619, nil, nil, nil, 620, 620, 620, 619, - 620, 619, 619, 619, 620, 620, 619, 619, nil, 620, - nil, 620, 620, 620, 620, 620, 620, 620, nil, nil, - nil, nil, nil, 620, 620, 620, 620, 620, 620, 620, - nil, nil, 620, nil, nil, nil, nil, nil, nil, 620, - nil, nil, 620, 620, 620, 620, 620, 620, 620, 620, - 620, 620, 620, 620, nil, 620, 620, 620, 620, 620, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 620, - nil, nil, 620, nil, nil, 620, 620, nil, nil, 620, - nil, nil, nil, 620, nil, 620, nil, nil, 620, nil, - nil, nil, nil, nil, 620, nil, nil, nil, nil, 620, - 620, 620, 620, nil, 620, 620, 620, 620, nil, nil, - nil, nil, 620, 620, nil, nil, nil, 621, 621, 621, - 620, 621, 620, 620, 620, 621, 621, 620, 620, nil, - 621, nil, 621, 621, 621, 621, 621, 621, 621, nil, - nil, nil, nil, nil, 621, 621, 621, 621, 621, 621, - 621, nil, nil, 621, nil, nil, nil, nil, nil, nil, - 621, nil, nil, 621, 621, 621, 621, 621, 621, 621, - 621, nil, 621, 621, 621, nil, 621, 621, 621, 621, - 621, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 621, nil, nil, 621, nil, nil, 621, 621, nil, nil, - 621, nil, nil, nil, nil, nil, 621, nil, nil, nil, - nil, nil, nil, nil, nil, 621, nil, nil, nil, nil, - 621, 621, 621, 621, nil, 621, 621, 621, 621, nil, - nil, nil, nil, 621, 621, nil, nil, nil, 622, 622, - 622, 621, 622, 621, 621, 621, 622, 622, 621, 621, - nil, 622, nil, 622, 622, 622, 622, 622, 622, 622, - nil, nil, nil, nil, nil, 622, 622, 622, 622, 622, - 622, 622, nil, nil, 622, nil, nil, nil, nil, nil, - nil, 622, nil, nil, 622, 622, 622, 622, 622, 622, - 622, 622, nil, 622, 622, 622, nil, 622, 622, 622, - 622, 622, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 622, nil, nil, 622, nil, nil, 622, 622, nil, - nil, 622, nil, nil, nil, nil, nil, 622, nil, nil, - nil, nil, nil, nil, nil, nil, 622, nil, nil, nil, - nil, 622, 622, 622, 622, nil, 622, 622, 622, 622, - nil, nil, nil, nil, 622, 622, nil, nil, nil, 626, - 626, 626, 622, 626, 622, 622, 622, 626, 626, 622, - 622, nil, 626, nil, 626, 626, 626, 626, 626, 626, - 626, nil, nil, nil, nil, nil, 626, 626, 626, 626, - 626, 626, 626, nil, nil, 626, nil, nil, nil, nil, - nil, nil, 626, nil, nil, 626, 626, 626, 626, 626, - 626, 626, 626, nil, 626, 626, 626, nil, 626, 626, - 626, 626, 626, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 626, nil, nil, 626, nil, nil, 626, 626, - nil, nil, 626, nil, nil, nil, nil, nil, 626, nil, - nil, nil, nil, nil, nil, nil, nil, 626, nil, nil, - nil, nil, 626, 626, 626, 626, nil, 626, 626, 626, - 626, nil, nil, nil, nil, 626, 626, nil, nil, nil, - 627, 627, 627, 626, 627, 626, 626, 626, 627, 627, - 626, 626, nil, 627, nil, 627, 627, 627, 627, 627, - 627, 627, nil, nil, nil, nil, nil, 627, 627, 627, - 627, 627, 627, 627, nil, nil, 627, nil, nil, nil, - nil, nil, nil, 627, nil, nil, 627, 627, 627, 627, - 627, 627, 627, 627, nil, 627, 627, 627, nil, 627, - 627, 627, 627, 627, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 627, nil, nil, 627, nil, nil, 627, - 627, nil, nil, 627, nil, nil, nil, nil, nil, 627, - nil, nil, nil, nil, nil, nil, nil, nil, 627, nil, - nil, nil, nil, 627, 627, 627, 627, nil, 627, 627, - 627, 627, nil, nil, nil, nil, 627, 627, nil, nil, - nil, 672, 672, 672, 627, 672, 627, 627, 627, 672, - 672, 627, 627, nil, 672, nil, 672, 672, 672, 672, - 672, 672, 672, nil, nil, nil, nil, nil, 672, 672, - 672, 672, 672, 672, 672, nil, nil, 672, nil, nil, - nil, nil, nil, nil, 672, nil, nil, 672, 672, 672, - 672, 672, 672, 672, 672, 672, 672, 672, 672, nil, - 672, 672, 672, 672, 672, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 672, nil, nil, 672, nil, nil, - 672, 672, nil, nil, 672, nil, 672, nil, 672, nil, - 672, nil, nil, 672, nil, nil, nil, nil, nil, 672, - nil, nil, nil, nil, 672, 672, 672, 672, nil, 672, - 672, 672, 672, nil, nil, nil, nil, 672, 672, nil, - nil, nil, 681, 681, 681, 672, 681, 672, 672, 672, - 681, 681, 672, 672, nil, 681, nil, 681, 681, 681, - 681, 681, 681, 681, nil, nil, nil, nil, nil, 681, - 681, 681, 681, 681, 681, 681, nil, nil, 681, nil, - nil, nil, nil, nil, nil, 681, nil, nil, 681, 681, - 681, 681, 681, 681, 681, 681, nil, 681, 681, 681, - nil, 681, 681, 681, 681, 681, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 681, nil, nil, 681, nil, - nil, 681, 681, nil, nil, 681, nil, nil, nil, nil, - nil, 681, nil, nil, nil, nil, nil, nil, nil, nil, - 681, nil, nil, nil, nil, 681, 681, 681, 681, nil, - 681, 681, 681, 681, nil, nil, nil, nil, 681, 681, - nil, nil, nil, 684, 684, 684, 681, 684, 681, 681, - 681, 684, 684, 681, 681, nil, 684, nil, 684, 684, - 684, 684, 684, 684, 684, nil, nil, nil, nil, nil, - 684, 684, 684, 684, 684, 684, 684, nil, nil, 684, - nil, nil, nil, nil, nil, nil, 684, nil, nil, 684, - 684, 684, 684, 684, 684, 684, 684, nil, 684, 684, - 684, nil, 684, 684, 684, 684, 684, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 684, nil, nil, 684, - nil, nil, 684, 684, nil, nil, 684, nil, nil, nil, - nil, nil, 684, nil, nil, nil, nil, nil, nil, nil, - nil, 684, nil, nil, nil, nil, 684, 684, 684, 684, - nil, 684, 684, 684, 684, nil, nil, nil, nil, 684, - 684, nil, nil, nil, 703, 703, 703, 684, 703, 684, - 684, 684, 703, 703, 684, 684, nil, 703, nil, 703, - 703, 703, 703, 703, 703, 703, nil, nil, nil, nil, - nil, 703, 703, 703, 703, 703, 703, 703, nil, nil, - 703, nil, nil, nil, nil, nil, nil, 703, nil, nil, - 703, 703, 703, 703, 703, 703, 703, 703, nil, 703, - 703, 703, nil, 703, 703, 703, 703, 703, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 703, nil, nil, - 703, nil, nil, 703, 703, nil, nil, 703, nil, 703, - nil, nil, nil, 703, nil, nil, nil, nil, nil, nil, - nil, nil, 703, nil, nil, nil, nil, 703, 703, 703, - 703, nil, 703, 703, 703, 703, nil, nil, nil, nil, - 703, 703, nil, nil, nil, 730, 730, 730, 703, 730, - 703, 703, 703, 730, 730, 703, 703, nil, 730, nil, - 730, 730, 730, 730, 730, 730, 730, nil, nil, nil, - nil, nil, 730, 730, 730, 730, 730, 730, 730, nil, - nil, 730, nil, nil, nil, nil, nil, nil, 730, nil, - nil, 730, 730, 730, 730, 730, 730, 730, 730, nil, - 730, 730, 730, nil, 730, 730, 730, 730, 730, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 730, nil, - nil, 730, nil, nil, 730, 730, nil, nil, 730, nil, - nil, nil, nil, nil, 730, nil, nil, nil, nil, nil, - nil, nil, nil, 730, nil, nil, nil, nil, 730, 730, - 730, 730, nil, 730, 730, 730, 730, nil, nil, nil, - nil, 730, 730, nil, nil, nil, 766, 766, 766, 730, - 766, 730, 730, 730, 766, 766, 730, 730, nil, 766, - nil, 766, 766, 766, 766, 766, 766, 766, nil, nil, - nil, nil, nil, 766, 766, 766, 766, 766, 766, 766, - nil, nil, 766, nil, nil, nil, nil, nil, nil, 766, - nil, nil, 766, 766, 766, 766, 766, 766, 766, 766, - nil, 766, 766, 766, nil, 766, 766, 766, 766, 766, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 766, - nil, nil, 766, nil, nil, 766, 766, nil, nil, 766, - nil, nil, nil, nil, nil, 766, nil, nil, nil, nil, - nil, nil, nil, nil, 766, nil, nil, nil, nil, 766, - 766, 766, 766, nil, 766, 766, 766, 766, nil, nil, - nil, nil, 766, 766, nil, nil, nil, 789, 789, 789, - 766, 789, 766, 766, 766, 789, 789, 766, 766, nil, - 789, nil, 789, 789, 789, 789, 789, 789, 789, nil, - nil, nil, nil, nil, 789, 789, 789, 789, 789, 789, - 789, nil, nil, 789, nil, nil, nil, nil, nil, nil, - 789, nil, nil, 789, 789, 789, 789, 789, 789, 789, - 789, nil, 789, 789, 789, nil, 789, 789, 789, 789, - 789, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 789, nil, nil, 789, nil, nil, 789, 789, nil, nil, - 789, nil, nil, nil, nil, nil, 789, nil, nil, nil, - nil, nil, nil, nil, nil, 789, nil, nil, nil, nil, - 789, 789, 789, 789, nil, 789, 789, 789, 789, nil, - nil, nil, nil, 789, 789, nil, nil, nil, 797, 797, - 797, 789, 797, 789, 789, 789, 797, 797, 789, 789, - nil, 797, nil, 797, 797, 797, 797, 797, 797, 797, - nil, nil, nil, nil, nil, 797, 797, 797, 797, 797, - 797, 797, nil, nil, 797, nil, nil, nil, nil, nil, - nil, 797, nil, nil, 797, 797, 797, 797, 797, 797, - 797, 797, nil, 797, 797, 797, nil, 797, 797, 797, - 797, 797, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 797, nil, nil, 797, nil, nil, 797, 797, nil, - nil, 797, nil, nil, nil, nil, nil, 797, nil, nil, - nil, nil, nil, nil, nil, nil, 797, nil, nil, nil, - nil, 797, 797, 797, 797, nil, 797, 797, 797, 797, - nil, nil, nil, nil, 797, 797, nil, nil, nil, 810, - 810, 810, 797, 810, 797, 797, 797, 810, 810, 797, - 797, nil, 810, nil, 810, 810, 810, 810, 810, 810, - 810, nil, nil, nil, nil, nil, 810, 810, 810, 810, - 810, 810, 810, nil, nil, 810, nil, nil, nil, nil, - nil, nil, 810, nil, nil, 810, 810, 810, 810, 810, - 810, 810, 810, nil, 810, 810, 810, nil, 810, 810, - 810, 810, 810, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 810, nil, nil, 810, nil, nil, 810, 810, - nil, nil, 810, nil, nil, nil, nil, nil, 810, nil, - nil, nil, nil, nil, nil, nil, nil, 810, nil, nil, - nil, nil, 810, 810, 810, 810, nil, 810, 810, 810, - 810, nil, nil, nil, nil, 810, 810, nil, nil, nil, - 811, 811, 811, 810, 811, 810, 810, 810, 811, 811, - 810, 810, nil, 811, nil, 811, 811, 811, 811, 811, - 811, 811, nil, nil, nil, nil, nil, 811, 811, 811, - 811, 811, 811, 811, nil, nil, 811, nil, nil, nil, - nil, nil, nil, 811, nil, nil, 811, 811, 811, 811, - 811, 811, 811, 811, nil, 811, 811, 811, nil, 811, - 811, 811, 811, 811, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 811, nil, nil, 811, nil, nil, 811, - 811, nil, nil, 811, nil, nil, nil, nil, nil, 811, - nil, nil, nil, nil, nil, nil, nil, nil, 811, nil, - nil, nil, nil, 811, 811, 811, 811, nil, 811, 811, - 811, 811, nil, nil, nil, nil, 811, 811, nil, nil, - nil, 812, 812, 812, 811, 812, 811, 811, 811, 812, - 812, 811, 811, nil, 812, nil, 812, 812, 812, 812, - 812, 812, 812, nil, nil, nil, nil, nil, 812, 812, - 812, 812, 812, 812, 812, nil, nil, 812, nil, nil, - nil, nil, nil, nil, 812, nil, nil, 812, 812, 812, - 812, 812, 812, 812, 812, nil, 812, 812, 812, nil, - 812, 812, 812, 812, 812, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 812, nil, nil, 812, nil, nil, - 812, 812, nil, nil, 812, nil, nil, nil, nil, nil, - 812, nil, nil, nil, nil, nil, nil, nil, nil, 812, - nil, nil, nil, nil, 812, 812, 812, 812, nil, 812, - 812, 812, 812, nil, nil, nil, nil, 812, 812, nil, - nil, nil, 813, 813, 813, 812, 813, 812, 812, 812, - 813, 813, 812, 812, nil, 813, nil, 813, 813, 813, - 813, 813, 813, 813, nil, nil, nil, nil, nil, 813, - 813, 813, 813, 813, 813, 813, nil, nil, 813, nil, - nil, nil, nil, nil, nil, 813, nil, nil, 813, 813, - 813, 813, 813, 813, 813, 813, nil, 813, 813, 813, - nil, 813, 813, 813, 813, 813, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 813, nil, nil, 813, nil, - nil, 813, 813, nil, nil, 813, nil, nil, nil, nil, - nil, 813, nil, nil, nil, nil, nil, nil, nil, nil, - 813, nil, nil, nil, nil, 813, 813, 813, 813, nil, - 813, 813, 813, 813, nil, nil, nil, nil, 813, 813, - nil, nil, nil, 836, 836, 836, 813, 836, 813, 813, - 813, 836, 836, 813, 813, nil, 836, nil, 836, 836, - 836, 836, 836, 836, 836, nil, nil, nil, nil, nil, - 836, 836, 836, 836, 836, 836, 836, nil, nil, 836, - nil, nil, nil, nil, nil, nil, 836, nil, nil, 836, - 836, 836, 836, 836, 836, 836, 836, nil, 836, 836, - 836, nil, 836, 836, 836, 836, 836, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 836, nil, nil, 836, - nil, nil, 836, 836, nil, nil, 836, nil, nil, nil, - nil, nil, 836, nil, nil, nil, nil, nil, nil, nil, - nil, 836, nil, nil, nil, nil, 836, 836, 836, 836, - nil, 836, 836, 836, 836, nil, nil, nil, nil, 836, - 836, nil, nil, nil, 876, 876, 876, 836, 876, 836, - 836, 836, 876, 876, 836, 836, nil, 876, nil, 876, - 876, 876, 876, 876, 876, 876, nil, nil, nil, nil, - nil, 876, 876, 876, 876, 876, 876, 876, nil, nil, - 876, nil, nil, nil, nil, nil, nil, 876, nil, nil, - 876, 876, 876, 876, 876, 876, 876, 876, nil, 876, - 876, 876, nil, 876, 876, 876, 876, 876, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 876, nil, nil, - 876, nil, nil, 876, 876, nil, nil, 876, nil, nil, - nil, nil, nil, 876, nil, nil, nil, nil, nil, nil, - nil, nil, 876, nil, nil, nil, nil, 876, 876, 876, - 876, nil, 876, 876, 876, 876, nil, nil, nil, nil, - 876, 876, nil, nil, nil, 891, 891, 891, 876, 891, - 876, 876, 876, 891, 891, 876, 876, nil, 891, nil, - 891, 891, 891, 891, 891, 891, 891, nil, nil, nil, - nil, nil, 891, 891, 891, 891, 891, 891, 891, nil, - nil, 891, nil, nil, nil, nil, nil, nil, 891, nil, - nil, 891, 891, 891, 891, 891, 891, 891, 891, nil, - 891, 891, 891, nil, 891, 891, 891, 891, 891, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 891, nil, - nil, 891, nil, nil, 891, 891, nil, nil, 891, nil, - nil, nil, nil, nil, 891, nil, nil, nil, nil, nil, - nil, nil, nil, 891, nil, nil, nil, nil, 891, 891, - 891, 891, nil, 891, 891, 891, 891, nil, nil, nil, - nil, 891, 891, nil, nil, nil, 896, 896, 896, 891, - 896, 891, 891, 891, 896, 896, 891, 891, nil, 896, - nil, 896, 896, 896, 896, 896, 896, 896, nil, nil, - nil, nil, nil, 896, 896, 896, 896, 896, 896, 896, - nil, nil, 896, nil, nil, nil, nil, nil, nil, 896, - nil, nil, 896, 896, 896, 896, 896, 896, 896, 896, - nil, 896, 896, 896, nil, 896, 896, 896, 896, 896, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 896, - nil, nil, 896, nil, nil, 896, 896, nil, nil, 896, - nil, 896, nil, nil, nil, 896, nil, nil, nil, nil, - nil, nil, nil, nil, 896, nil, nil, nil, nil, 896, - 896, 896, 896, nil, 896, 896, 896, 896, nil, nil, - nil, nil, 896, 896, nil, nil, nil, 917, 917, 917, - 896, 917, 896, 896, 896, 917, 917, 896, 896, nil, - 917, nil, 917, 917, 917, 917, 917, 917, 917, nil, - nil, nil, nil, nil, 917, 917, 917, 917, 917, 917, - 917, nil, nil, 917, nil, nil, nil, nil, nil, nil, - 917, nil, nil, 917, 917, 917, 917, 917, 917, 917, - 917, 917, 917, 917, 917, nil, 917, 917, 917, 917, - 917, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 917, nil, nil, 917, nil, nil, 917, 917, nil, nil, - 917, nil, nil, nil, 917, nil, 917, nil, nil, 917, - nil, nil, nil, nil, nil, 917, nil, nil, nil, nil, - 917, 917, 917, 917, nil, 917, 917, 917, 917, nil, - nil, nil, nil, 917, 917, nil, nil, nil, 918, 918, - 918, 917, 918, 917, 917, 917, 918, 918, 917, 917, - nil, 918, nil, 918, 918, 918, 918, 918, 918, 918, - nil, nil, nil, nil, nil, 918, 918, 918, 918, 918, - 918, 918, nil, nil, 918, nil, nil, nil, nil, nil, - nil, 918, nil, nil, 918, 918, 918, 918, 918, 918, - 918, 918, nil, 918, 918, 918, nil, 918, 918, 918, - 918, 918, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 918, nil, nil, 918, nil, nil, 918, 918, nil, - nil, 918, nil, nil, nil, nil, nil, 918, nil, nil, - nil, nil, nil, nil, nil, nil, 918, nil, nil, nil, - nil, 918, 918, 918, 918, nil, 918, 918, 918, 918, - nil, nil, nil, nil, 918, 918, nil, nil, nil, 1083, - 1083, 1083, 918, 1083, 918, 918, 918, 1083, 1083, 918, - 918, nil, 1083, nil, 1083, 1083, 1083, 1083, 1083, 1083, - 1083, nil, nil, nil, nil, nil, 1083, 1083, 1083, 1083, - 1083, 1083, 1083, nil, nil, 1083, nil, nil, nil, nil, - nil, nil, 1083, nil, nil, 1083, 1083, 1083, 1083, 1083, - 1083, 1083, 1083, nil, 1083, 1083, 1083, nil, 1083, 1083, - 1083, 1083, 1083, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 1083, nil, nil, 1083, nil, nil, 1083, 1083, - nil, nil, 1083, nil, nil, nil, nil, nil, 1083, nil, - nil, nil, nil, nil, nil, nil, nil, 1083, nil, nil, - nil, nil, 1083, 1083, 1083, 1083, nil, 1083, 1083, 1083, - 1083, nil, nil, nil, nil, 1083, 1083, nil, nil, nil, - 1084, 1084, 1084, 1083, 1084, 1083, 1083, 1083, 1084, 1084, - 1083, 1083, nil, 1084, nil, 1084, 1084, 1084, 1084, 1084, - 1084, 1084, nil, nil, nil, nil, nil, 1084, 1084, 1084, - 1084, 1084, 1084, 1084, nil, nil, 1084, nil, nil, nil, - nil, nil, nil, 1084, nil, nil, 1084, 1084, 1084, 1084, - 1084, 1084, 1084, 1084, nil, 1084, 1084, 1084, nil, 1084, - 1084, 1084, 1084, 1084, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 1084, nil, nil, 1084, nil, nil, 1084, - 1084, nil, nil, 1084, nil, nil, nil, nil, nil, 1084, - nil, nil, nil, nil, nil, nil, nil, nil, 1084, nil, - nil, nil, nil, 1084, 1084, 1084, 1084, nil, 1084, 1084, - 1084, 1084, nil, nil, nil, nil, 1084, 1084, nil, nil, - nil, 1120, 1120, 1120, 1084, 1120, 1084, 1084, 1084, 1120, - 1120, 1084, 1084, nil, 1120, nil, 1120, 1120, 1120, 1120, - 1120, 1120, 1120, nil, nil, nil, nil, nil, 1120, 1120, - 1120, 1120, 1120, 1120, 1120, nil, nil, 1120, nil, nil, - nil, nil, nil, nil, 1120, nil, nil, 1120, 1120, 1120, - 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, nil, - 1120, 1120, 1120, 1120, 1120, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 1120, nil, nil, 1120, nil, nil, - 1120, 1120, nil, nil, 1120, nil, 1120, nil, 1120, nil, - 1120, nil, nil, 1120, nil, nil, nil, nil, nil, 1120, - nil, nil, nil, nil, 1120, 1120, 1120, 1120, nil, 1120, - 1120, 1120, 1120, nil, nil, nil, nil, 1120, 1120, nil, - nil, nil, 36, 36, 36, 1120, 36, 1120, 1120, 1120, - 36, 36, 1120, 1120, nil, 36, nil, 36, 36, 36, - 36, 36, 36, 36, nil, nil, nil, nil, nil, 36, - 36, 36, 36, 36, 36, 36, nil, nil, 36, nil, - nil, nil, nil, nil, nil, 36, nil, nil, 36, 36, - 36, 36, 36, 36, 36, 36, nil, 36, 36, 36, - nil, 36, 36, nil, nil, 36, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 36, nil, nil, 36, nil, - nil, 36, 36, nil, nil, 36, nil, 36, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 36, 36, 36, 36, nil, - 36, 36, 36, 36, nil, nil, nil, nil, 36, 36, - nil, nil, nil, 37, 37, 37, 36, 37, 36, 36, - 36, 37, 37, nil, nil, nil, 37, nil, 37, 37, - 37, 37, 37, 37, 37, nil, nil, nil, nil, nil, - 37, 37, 37, 37, 37, 37, 37, nil, nil, 37, - nil, nil, nil, nil, nil, nil, 37, nil, nil, 37, - 37, 37, 37, 37, 37, 37, 37, nil, 37, 37, - 37, nil, 37, 37, nil, nil, 37, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 37, nil, nil, 37, - nil, nil, 37, 37, nil, nil, 37, nil, nil, 1048, - nil, 1048, 1048, 1048, 1048, 1048, nil, nil, nil, nil, - nil, nil, nil, nil, 1048, nil, 37, 37, 37, 37, - nil, 37, 37, 37, 37, nil, nil, nil, nil, 37, - 37, nil, nil, nil, 37, nil, 1048, 37, nil, 37, - 37, 37, 73, 73, 73, nil, 73, 1048, 1048, nil, - 73, 73, 1048, nil, nil, 73, nil, 73, 73, 73, - 73, 73, 73, 73, nil, nil, nil, nil, nil, 73, - 73, 73, 73, 73, 73, 73, nil, nil, 73, nil, - nil, nil, nil, nil, nil, 73, nil, nil, 73, 73, - 73, 73, 73, 73, 73, 73, nil, 73, 73, 73, - nil, 73, 73, nil, nil, 73, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 73, nil, nil, 73, nil, - nil, 73, 73, nil, nil, 73, nil, 73, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 73, 73, 73, 73, nil, - 73, 73, 73, 73, nil, nil, nil, nil, 73, 73, - nil, nil, nil, 74, 74, 74, 73, 74, 73, 73, - 73, 74, 74, nil, nil, nil, 74, nil, 74, 74, - 74, 74, 74, 74, 74, nil, nil, nil, nil, nil, - 74, 74, 74, 74, 74, 74, 74, nil, nil, 74, - nil, nil, nil, nil, nil, nil, 74, nil, nil, 74, - 74, 74, 74, 74, 74, 74, 74, nil, 74, 74, - 74, nil, 74, 74, nil, nil, 74, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 74, nil, nil, 74, nil, nil, 74, - nil, nil, 74, 74, nil, nil, 74, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 74, 74, 74, 74, - nil, 74, 74, 74, 74, nil, nil, nil, nil, 74, - 74, nil, nil, nil, 75, 75, 75, 74, 75, 74, - 74, 74, 75, 75, nil, nil, nil, 75, nil, 75, - 75, 75, 75, 75, 75, 75, nil, nil, nil, nil, - nil, 75, 75, 75, 75, 75, 75, 75, nil, nil, - 75, nil, nil, nil, nil, nil, nil, 75, nil, nil, - 75, 75, 75, 75, 75, 75, 75, 75, nil, 75, - 75, 75, nil, 75, 75, nil, nil, 75, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 75, nil, nil, - 75, nil, nil, 75, 75, nil, nil, 75, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 75, 75, 75, - 75, nil, 75, 75, 75, 75, nil, nil, nil, nil, - 75, 75, nil, nil, nil, 311, 311, 311, 75, 311, - 75, 75, 75, 311, 311, nil, nil, nil, 311, nil, - 311, 311, 311, 311, 311, 311, 311, nil, nil, nil, - nil, nil, 311, 311, 311, 311, 311, 311, 311, nil, - nil, 311, nil, nil, nil, nil, nil, nil, 311, nil, - nil, 311, 311, 311, 311, 311, 311, 311, 311, nil, - 311, 311, 311, nil, 311, 311, nil, nil, 311, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 311, nil, - nil, 311, nil, nil, 311, 311, nil, nil, 311, nil, - nil, 1070, nil, 1070, 1070, 1070, 1070, 1070, nil, nil, - nil, nil, nil, nil, nil, nil, 1070, nil, 311, 311, - 311, 311, nil, 311, 311, 311, 311, nil, nil, nil, - nil, 311, 311, nil, nil, nil, 311, nil, 1070, 311, - nil, 311, 311, 311, 328, 328, 328, nil, 328, 1070, - 1070, nil, 328, 328, 1070, nil, nil, 328, nil, 328, - 328, 328, 328, 328, 328, 328, nil, nil, nil, nil, - nil, 328, 328, 328, 328, 328, 328, 328, nil, nil, - 328, nil, nil, nil, nil, nil, nil, 328, nil, nil, - 328, 328, 328, 328, 328, 328, 328, 328, nil, 328, - 328, 328, nil, 328, 328, nil, nil, 328, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 328, nil, nil, - 328, nil, nil, 328, 328, nil, nil, 328, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 328, 328, 328, - 328, nil, 328, 328, 328, 328, nil, nil, nil, nil, - 328, 328, nil, nil, nil, 525, 525, 525, 328, 525, - 328, 328, 328, 525, 525, nil, nil, nil, 525, nil, - 525, 525, 525, 525, 525, 525, 525, nil, nil, nil, - nil, nil, 525, 525, 525, 525, 525, 525, 525, nil, - nil, 525, nil, nil, nil, nil, nil, nil, 525, nil, - nil, 525, 525, 525, 525, 525, 525, 525, 525, nil, - 525, 525, 525, nil, 525, 525, nil, nil, 525, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 525, nil, - nil, 525, nil, nil, 525, 525, nil, nil, 525, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 525, 525, - 525, 525, nil, 525, 525, 525, 525, nil, nil, nil, - nil, 525, 525, nil, nil, nil, 533, 533, 533, 525, - 533, 525, 525, 525, 533, 533, nil, nil, nil, 533, - nil, 533, 533, 533, 533, 533, 533, 533, nil, nil, - nil, nil, nil, 533, 533, 533, 533, 533, 533, 533, - nil, nil, 533, nil, nil, nil, nil, nil, nil, 533, - nil, nil, 533, 533, 533, 533, 533, 533, 533, 533, - nil, 533, 533, 533, nil, 533, 533, nil, nil, 533, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 533, - nil, nil, 533, nil, nil, 533, 533, nil, nil, 533, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 533, - 533, 533, 533, nil, 533, 533, 533, 533, nil, nil, - nil, nil, 533, 533, nil, nil, nil, 687, 687, 687, - 533, 687, 533, 533, 533, 687, 687, nil, nil, nil, - 687, nil, 687, 687, 687, 687, 687, 687, 687, nil, - nil, nil, nil, nil, 687, 687, 687, 687, 687, 687, - 687, nil, nil, 687, nil, nil, nil, nil, nil, nil, - 687, nil, nil, 687, 687, 687, 687, 687, 687, 687, - 687, nil, 687, 687, 687, nil, 687, 687, nil, nil, - 687, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 687, nil, nil, 687, nil, nil, 687, 687, nil, nil, - 687, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 687, 687, 687, 687, nil, 687, 687, 687, 687, nil, - nil, nil, nil, 687, 687, nil, nil, nil, 698, 698, - 698, 687, 698, 687, 687, 687, 698, 698, nil, nil, - nil, 698, nil, 698, 698, 698, 698, 698, 698, 698, - nil, nil, nil, nil, nil, 698, 698, 698, 698, 698, - 698, 698, nil, nil, 698, nil, nil, nil, nil, nil, - nil, 698, nil, nil, 698, 698, 698, 698, 698, 698, - 698, 698, nil, 698, 698, 698, nil, 698, 698, nil, - nil, 698, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 698, nil, nil, 698, nil, nil, 698, 698, nil, - nil, 698, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 698, 698, 698, 698, nil, 698, 698, 698, 698, - nil, nil, nil, nil, 698, 698, nil, nil, nil, 965, - 965, 965, 698, 965, 698, 698, 698, 965, 965, nil, - nil, nil, 965, nil, 965, 965, 965, 965, 965, 965, - 965, nil, nil, nil, nil, nil, 965, 965, 965, 965, - 965, 965, 965, nil, nil, 965, nil, nil, nil, nil, - nil, nil, 965, nil, nil, 965, 965, 965, 965, 965, - 965, 965, 965, nil, 965, 965, 965, nil, 965, 965, - nil, nil, 965, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 965, nil, nil, 965, nil, nil, 965, 965, - nil, nil, 965, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 965, 965, 965, 965, nil, 965, 965, 965, - 965, nil, nil, nil, nil, 965, 965, nil, nil, nil, - 974, 974, 974, 965, 974, 965, 965, 965, 974, 974, - nil, nil, nil, 974, nil, 974, 974, 974, 974, 974, - 974, 974, nil, nil, nil, nil, nil, 974, 974, 974, - 974, 974, 974, 974, nil, nil, 974, nil, nil, nil, - nil, nil, nil, 974, nil, nil, 974, 974, 974, 974, - 974, 974, 974, 974, nil, 974, 974, 974, nil, 974, - 974, nil, nil, 974, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 974, nil, nil, 974, nil, nil, 974, - 974, nil, nil, 974, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 974, 974, 974, 974, nil, 974, 974, - 974, 974, nil, nil, nil, nil, 974, 974, nil, nil, - nil, 1053, 1053, 1053, 974, 1053, 974, 974, 974, 1053, - 1053, nil, nil, nil, 1053, nil, 1053, 1053, 1053, 1053, - 1053, 1053, 1053, nil, nil, nil, nil, nil, 1053, 1053, - 1053, 1053, 1053, 1053, 1053, nil, nil, 1053, nil, nil, - nil, nil, nil, nil, 1053, nil, nil, 1053, 1053, 1053, - 1053, 1053, 1053, 1053, 1053, nil, 1053, 1053, 1053, nil, - 1053, 1053, nil, nil, 1053, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 1053, nil, nil, 1053, nil, nil, - 1053, 1053, nil, nil, 1053, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 1053, 1053, 1053, 1053, nil, 1053, - 1053, 1053, 1053, nil, nil, nil, nil, 1053, 1053, nil, - nil, nil, nil, nil, nil, 1053, nil, 1053, 1053, 1053, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, nil, nil, nil, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, nil, nil, nil, - nil, nil, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, nil, 10, nil, nil, nil, nil, nil, nil, - nil, 10, 10, nil, 10, 10, 10, 10, 10, 10, - 10, nil, nil, 10, 10, nil, nil, nil, 10, 10, - 10, 10, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 10, 10, nil, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - nil, nil, 10, 10, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 10, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, - 11, 11, nil, nil, nil, 11, 11, 11, 11, 11, - 11, 11, 11, 11, 11, nil, nil, nil, nil, nil, - 11, 11, 11, 11, 11, 11, 11, 11, 11, nil, - nil, 11, nil, nil, nil, nil, nil, nil, nil, 11, - 11, nil, 11, 11, 11, 11, 11, 11, 11, nil, - nil, 11, 11, nil, nil, nil, 11, 11, 11, 11, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 11, 11, nil, 11, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 11, nil, nil, - 11, 11, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 11, 410, 410, 410, 410, - 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, - 410, 410, 410, 410, 410, 410, 410, 410, 410, 410, - nil, nil, nil, 410, 410, 410, 410, 410, 410, 410, - 410, 410, 410, nil, nil, nil, nil, nil, 410, 410, - 410, 410, 410, 410, 410, 410, 410, nil, nil, 410, - nil, nil, nil, nil, nil, nil, nil, 410, 410, nil, - 410, 410, 410, 410, 410, 410, 410, nil, nil, 410, - 410, nil, nil, nil, 410, 410, 410, 410, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 410, 410, nil, 410, 410, 410, 410, 410, 410, - 410, 410, 410, 410, 410, 410, nil, nil, 410, 410, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 410, 606, 606, 606, 606, 606, 606, - 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, - 606, 606, 606, 606, 606, 606, 606, 606, nil, nil, - nil, 606, 606, 606, 606, 606, 606, 606, 606, 606, - 606, nil, nil, nil, nil, nil, 606, 606, 606, 606, - 606, 606, 606, 606, 606, nil, nil, 606, nil, nil, - nil, nil, nil, nil, nil, 606, 606, nil, 606, 606, - 606, 606, 606, 606, 606, nil, nil, 606, 606, nil, - nil, nil, 606, 606, 606, 606, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 606, - 606, nil, 606, 606, 606, 606, 606, 606, 606, 606, - 606, 606, 606, 606, nil, nil, 606, 606, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 606, 76, 76, 76, 76, 76, 76, 76, 76, - 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, - 76, 76, 76, 76, 76, 76, nil, nil, nil, 76, - 76, 76, 76, 76, 76, 76, 76, 76, 76, nil, - nil, nil, nil, nil, 76, 76, 76, 76, 76, 76, - 76, 76, 76, 76, 76, 76, nil, 76, nil, nil, - nil, nil, nil, 76, 76, nil, 76, 76, 76, 76, - 76, 76, 76, nil, nil, 76, 76, nil, nil, nil, - 76, 76, 76, 76, nil, nil, nil, nil, nil, 76, - nil, nil, nil, nil, nil, nil, nil, 76, 76, nil, - 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, - 76, 76, nil, nil, 76, 467, 467, 467, 467, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 467, 467, 467, 467, nil, nil, 709, 467, 709, - 709, 709, 709, 709, 467, 467, nil, nil, 467, nil, - nil, nil, 709, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 467, nil, - nil, 467, nil, nil, 709, 467, nil, nil, 467, nil, - nil, nil, nil, 709, 709, 709, 709, nil, nil, nil, - 709, nil, nil, nil, 467, nil, nil, nil, 467, 467, - 467, 467, nil, 467, 467, 467, 467, nil, nil, nil, - nil, 467, 467, nil, nil, nil, nil, nil, nil, 467, - nil, 467, 467, 467, nil, nil, 467, 467, 772, 772, - 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, - 772, 772, 772, 772, 772, 772, 772, 772, 772, 772, - 772, 772, nil, nil, nil, 772, 772, 772, 772, 772, - 772, 772, 772, 772, 772, nil, nil, nil, nil, nil, - 772, 772, 772, 772, 772, 772, 772, 772, 772, nil, - nil, 772, nil, nil, nil, nil, nil, nil, nil, 772, - 772, nil, 772, 772, 772, 772, 772, 772, 772, nil, - nil, 772, 772, nil, nil, nil, 772, 772, 772, 772, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 772, 772, nil, 772, 772, 772, 772, - 772, 772, 772, 772, 772, 772, 772, 772, nil, nil, - 772, 816, 816, 816, 816, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 816, 816, 816, - 816, nil, nil, 771, 816, 771, 771, 771, 771, 771, - 816, 816, nil, nil, 816, nil, nil, nil, 771, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 816, nil, nil, 816, nil, nil, - 771, 816, nil, nil, 816, nil, nil, nil, nil, 771, - 771, 771, 771, nil, nil, nil, 771, nil, nil, nil, - 816, nil, nil, nil, 816, 816, 816, 816, nil, 816, - 816, 816, 816, nil, nil, nil, nil, 816, 816, 819, - 819, 819, 819, nil, nil, 816, nil, 816, 816, 816, - nil, nil, 816, 816, nil, 819, 819, 819, 819, nil, - nil, nil, 819, 819, nil, nil, nil, nil, 819, 819, - nil, nil, 819, 819, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 819, nil, nil, 819, nil, nil, nil, 819, - nil, nil, 819, nil, 819, nil, nil, nil, nil, nil, - nil, 819, nil, nil, nil, nil, nil, nil, 819, nil, - nil, nil, 819, 819, 819, 819, nil, 819, 819, 819, - 819, nil, nil, nil, nil, 819, 819, 820, 820, 820, - 820, nil, nil, 819, nil, 819, 819, 819, nil, nil, - 819, 819, nil, 820, 820, 820, 820, nil, nil, nil, - 820, 820, nil, nil, nil, nil, 820, 820, nil, nil, - 820, 820, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 820, nil, nil, 820, nil, nil, nil, 820, nil, nil, - 820, nil, 820, nil, nil, nil, nil, nil, nil, 820, - nil, nil, nil, nil, nil, nil, 820, nil, nil, nil, - 820, 820, 820, 820, nil, 820, 820, 820, 820, nil, - nil, nil, nil, 820, 820, 822, 822, 822, 822, nil, - nil, 820, nil, 820, 820, 820, nil, nil, 820, 820, - nil, 822, 822, 822, 822, nil, nil, 870, 822, 870, - 870, 870, 870, 870, 822, 822, nil, nil, 822, nil, - nil, nil, 870, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 822, nil, - nil, 822, nil, nil, 870, 822, nil, nil, 822, nil, - 822, nil, nil, 870, 870, 870, 870, nil, nil, nil, - 870, nil, nil, nil, 822, nil, nil, nil, 822, 822, - 822, 822, nil, 822, 822, 822, 822, nil, nil, nil, - nil, 822, 822, 827, 827, 827, 827, nil, nil, 822, - nil, 822, 822, 822, nil, nil, 822, 822, nil, 827, - 827, 827, 827, nil, nil, 872, 827, 872, 872, 872, - 872, 872, 827, 827, nil, nil, 827, nil, nil, nil, - 872, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 827, nil, nil, 827, - nil, nil, 872, 827, nil, nil, 827, nil, nil, nil, - nil, 872, 872, 872, 872, nil, nil, nil, 872, nil, - nil, nil, 827, nil, nil, nil, 827, 827, 827, 827, - nil, 827, 827, 827, 827, nil, nil, nil, nil, 827, - 827, 895, 895, 895, 895, nil, nil, 827, nil, 827, - 827, 827, nil, nil, 827, 827, nil, 895, 895, 895, - 895, nil, nil, nil, 895, 895, nil, nil, nil, nil, - 895, 895, nil, nil, 895, 895, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 895, nil, nil, 895, nil, nil, - nil, 895, nil, nil, 895, nil, 895, nil, nil, nil, - nil, nil, nil, 895, nil, nil, nil, nil, nil, nil, - 895, nil, nil, nil, 895, 895, 895, 895, nil, 895, - 895, 895, 895, nil, nil, nil, nil, 895, 895, 926, - 926, 926, 926, nil, nil, 895, nil, 895, 895, 895, - nil, nil, 895, 895, nil, 926, 926, 926, 926, nil, - nil, 1044, 926, 1044, 1044, 1044, 1044, 1044, 926, 926, - nil, nil, 926, nil, nil, nil, 1044, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 926, nil, nil, 926, nil, nil, 1044, 926, - nil, nil, 926, nil, 926, nil, nil, 1044, 1044, 1044, - 1044, nil, nil, nil, 1044, nil, nil, nil, 926, nil, - nil, nil, 926, 926, 926, 926, nil, 926, 926, 926, - 926, nil, nil, nil, nil, 926, 926, 934, 934, 934, - 934, nil, nil, 926, nil, 926, 926, 926, nil, nil, - 926, 926, nil, 934, 934, 934, 934, nil, nil, 1046, - 934, 1046, 1046, 1046, 1046, 1046, 934, 934, nil, nil, - 934, nil, nil, nil, 1046, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 934, nil, nil, 934, nil, nil, 1046, 934, nil, nil, - 934, nil, nil, nil, nil, 1046, 1046, 1046, 1046, nil, - nil, nil, 1046, nil, nil, nil, 934, nil, nil, nil, - 934, 934, 934, 934, nil, 934, 934, 934, 934, nil, - nil, nil, nil, 934, 934, 1027, 1027, 1027, 1027, nil, - nil, 934, nil, 934, 934, 934, nil, nil, 934, 934, - nil, 1027, 1027, 1027, 1027, nil, nil, 1068, 1027, 1068, - 1068, 1068, 1068, 1068, 1027, 1027, nil, nil, 1027, nil, - nil, nil, 1068, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 1027, nil, - nil, 1027, nil, nil, 1068, 1027, nil, nil, 1027, nil, - nil, nil, nil, 1068, 1068, 1068, 1068, nil, nil, nil, - 1068, nil, nil, nil, 1027, nil, nil, nil, 1027, 1027, - 1027, 1027, nil, 1027, 1027, 1027, 1027, nil, nil, nil, - nil, 1027, 1027, 1085, 1085, 1085, 1085, nil, nil, 1027, - nil, 1027, 1027, 1027, nil, nil, 1027, 1027, nil, 1085, - 1085, 1085, 1085, nil, nil, 1072, 1085, 1072, 1072, 1072, - 1072, 1072, 1085, 1085, nil, nil, 1085, nil, nil, nil, - 1072, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 1085, nil, nil, 1085, - nil, nil, 1072, 1085, nil, nil, 1085, nil, 1085, nil, - nil, nil, nil, 1072, 1072, nil, nil, nil, 1072, nil, - nil, nil, 1085, nil, nil, nil, 1085, 1085, 1085, 1085, - nil, 1085, 1085, 1085, 1085, nil, nil, nil, nil, 1085, - 1085, 1094, 1094, 1094, 1094, nil, nil, 1085, nil, 1085, - 1085, 1085, nil, nil, 1085, 1085, nil, 1094, 1094, 1094, - 1094, nil, nil, 1074, 1094, 1074, 1074, 1074, 1074, 1074, - 1094, 1094, nil, nil, 1094, nil, nil, nil, 1074, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 1094, nil, nil, 1094, nil, nil, - 1074, 1094, nil, nil, 1094, nil, nil, nil, nil, nil, - nil, 1074, 1074, nil, nil, nil, 1074, nil, nil, nil, - 1094, nil, nil, nil, 1094, 1094, 1094, 1094, nil, 1094, - 1094, 1094, 1094, nil, nil, nil, nil, 1094, 1094, 1095, - 1095, 1095, 1095, nil, nil, 1094, nil, 1094, 1094, 1094, - nil, nil, 1094, 1094, nil, 1095, 1095, 1095, 1095, nil, - nil, 1144, 1095, 1144, 1144, 1144, 1144, 1144, 1095, 1095, - nil, nil, 1095, nil, nil, nil, 1144, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 1095, nil, nil, 1095, nil, nil, 1144, 1095, - nil, nil, 1095, nil, nil, nil, nil, 1144, 1144, 1144, - 1144, nil, nil, nil, 1144, nil, nil, nil, 1095, nil, - nil, nil, 1095, 1095, 1095, 1095, nil, 1095, 1095, 1095, - 1095, nil, nil, nil, nil, 1095, 1095, 1139, 1139, 1139, - 1139, nil, nil, 1095, nil, 1095, 1095, 1095, nil, nil, - 1095, 1095, nil, 1139, 1139, 1139, 1139, nil, nil, 1146, - 1139, 1146, 1146, 1146, 1146, 1146, 1139, 1139, nil, nil, - 1139, nil, nil, nil, 1146, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 1139, nil, nil, 1139, nil, nil, 1146, 1139, nil, nil, - 1139, nil, nil, nil, nil, nil, nil, 1146, 1146, nil, - nil, nil, 1146, nil, nil, nil, 1139, nil, nil, nil, - 1139, 1139, 1139, 1139, nil, 1139, 1139, 1139, 1139, nil, - nil, nil, nil, 1139, 1139, 1142, 1142, 1142, 1142, nil, - nil, 1139, nil, 1139, 1139, 1139, nil, nil, 1139, 1139, - nil, 1142, 1142, 1142, 1142, nil, nil, nil, 1142, nil, - nil, nil, nil, nil, 1142, 1142, nil, nil, 1142, nil, - nil, nil, nil, nil, nil, nil, 650, 650, 650, 650, - nil, nil, nil, nil, nil, nil, nil, nil, 1142, nil, - nil, 1142, 650, 650, 650, 1142, nil, nil, 1142, nil, - nil, nil, nil, nil, nil, 650, 650, nil, nil, 650, - nil, nil, nil, nil, 1142, nil, nil, nil, 1142, 1142, - 1142, 1142, nil, 1142, 1142, 1142, 1142, nil, nil, nil, - nil, 1142, 1142, nil, nil, nil, nil, nil, nil, 1142, - nil, 1142, 1142, 1142, nil, nil, 1142, 1142, 1148, nil, - 1148, 1148, 1148, 1148, 1148, nil, nil, nil, nil, 650, - 650, 650, 650, 1148, 650, 650, 650, 650, nil, nil, - nil, nil, 650, 650, 828, 828, 828, 828, nil, nil, - 650, nil, 650, 650, 650, 1148, nil, nil, nil, nil, - 828, 828, 828, nil, nil, nil, 1148, 1148, nil, nil, - nil, 1148, nil, 828, 828, nil, nil, 828, 829, 829, - 829, 829, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 829, 829, 829, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 829, 829, nil, - nil, 829, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 828, 828, 828, - 828, nil, 828, 828, 828, 828, nil, nil, nil, nil, - 828, 828, nil, nil, nil, nil, nil, nil, 828, nil, - 828, 828, 828, nil, nil, nil, nil, nil, nil, nil, - nil, 829, 829, 829, 829, nil, 829, 829, 829, 829, - nil, nil, nil, nil, 829, 829, 222, 222, nil, nil, - 222, nil, 829, nil, 829, 829, 829, nil, 222, 222, - nil, 222, 222, 222, 222, 222, 222, 222, nil, nil, - 222, 222, nil, nil, nil, 222, 222, 222, 222, nil, - nil, nil, nil, nil, 222, nil, nil, nil, nil, nil, - nil, nil, 222, 222, nil, 222, 222, 222, 222, 222, - 222, 222, 222, 222, 222, 222, 222, 223, 223, 222, - nil, 223, nil, nil, nil, nil, nil, nil, nil, 223, - 223, nil, 223, 223, 223, 223, 223, 223, 223, nil, - nil, 223, 223, nil, nil, nil, 223, 223, 223, 223, - nil, nil, nil, nil, nil, 223, nil, nil, nil, nil, - nil, nil, nil, 223, 223, nil, 223, 223, 223, 223, - 223, 223, 223, 223, 223, 223, 223, 223, 272, 272, - 223, nil, 272, nil, nil, nil, nil, nil, nil, nil, - 272, 272, nil, 272, 272, 272, 272, 272, 272, 272, - nil, nil, 272, 272, nil, nil, nil, 272, 272, 272, - 272, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 272, 272, nil, 272, 272, 272, - 272, 272, 272, 272, 272, 272, 272, 272, 272, 460, - 460, 272, nil, 460, nil, nil, nil, nil, nil, nil, - nil, 460, 460, nil, 460, 460, 460, 460, 460, 460, - 460, nil, nil, 460, 460, nil, nil, nil, 460, 460, - 460, 460, nil, nil, nil, nil, nil, 460, nil, nil, - nil, nil, nil, nil, nil, 460, 460, nil, 460, 460, - 460, 460, 460, 460, 460, 460, 460, 460, 460, 460, - 461, 461, 460, nil, 461, nil, nil, nil, nil, nil, - nil, nil, 461, 461, nil, 461, 461, 461, 461, 461, - 461, 461, nil, nil, 461, 461, nil, nil, nil, 461, - 461, 461, 461, nil, nil, nil, nil, nil, 461, nil, - nil, nil, nil, nil, nil, nil, 461, 461, nil, 461, - 461, 461, 461, 461, 461, 461, 461, 461, 461, 461, - 461, 528, 528, 461, nil, 528, nil, nil, nil, nil, - nil, nil, nil, 528, 528, nil, 528, 528, 528, 528, - 528, 528, 528, nil, nil, 528, 528, nil, nil, nil, - 528, 528, 528, 528, nil, nil, nil, nil, nil, 528, - nil, nil, nil, nil, nil, nil, nil, 528, 528, nil, - 528, 528, 528, 528, 528, 528, 528, 528, 528, 528, - 528, 528, 529, 529, 528, nil, 529, nil, nil, nil, - nil, nil, nil, nil, 529, 529, nil, 529, 529, 529, - 529, 529, 529, 529, nil, nil, 529, 529, nil, nil, - nil, 529, 529, 529, 529, nil, nil, nil, nil, nil, - 529, nil, nil, nil, nil, nil, nil, nil, 529, 529, - nil, 529, 529, 529, 529, 529, 529, 529, 529, 529, - 529, 529, 529, 537, 537, 529, nil, 537, nil, nil, - nil, nil, nil, nil, nil, 537, 537, nil, 537, 537, - 537, 537, 537, 537, 537, nil, nil, 537, 537, nil, - nil, nil, 537, 537, 537, 537, nil, nil, nil, nil, - nil, 537, nil, nil, nil, nil, nil, nil, nil, 537, - 537, nil, 537, 537, 537, 537, 537, 537, 537, 537, - 537, 537, 537, 537, 538, 538, 537, nil, 538, nil, - nil, nil, nil, nil, nil, nil, 538, 538, nil, 538, - 538, 538, 538, 538, 538, 538, nil, nil, 538, 538, - nil, nil, nil, 538, 538, 538, 538, nil, nil, nil, - nil, nil, 538, nil, nil, nil, nil, nil, nil, nil, - 538, 538, nil, 538, 538, 538, 538, 538, 538, 538, - 538, 538, 538, 538, 538, 568, 568, 538, nil, 568, - nil, nil, nil, nil, nil, nil, nil, 568, 568, nil, - 568, 568, 568, 568, 568, 568, 568, nil, nil, 568, - 568, nil, nil, nil, 568, 568, 568, 568, nil, nil, - nil, nil, nil, 568, nil, nil, nil, nil, nil, nil, - nil, 568, 568, nil, 568, 568, 568, 568, 568, 568, - 568, 568, 568, 568, 568, 568, 569, 569, 568, nil, - 569, nil, nil, nil, nil, nil, nil, nil, 569, 569, - nil, 569, 569, 569, 569, 569, 569, 569, nil, nil, - 569, 569, nil, nil, nil, 569, 569, 569, 569, nil, - nil, nil, nil, nil, 569, nil, nil, nil, nil, nil, - nil, nil, 569, 569, nil, 569, 569, 569, 569, 569, - 569, 569, 569, 569, 569, 569, 569, 575, 575, 569, - nil, 575, nil, nil, nil, nil, nil, nil, nil, 575, - 575, nil, 575, 575, 575, 575, 575, 575, 575, nil, - nil, 575, 575, nil, nil, nil, 575, 575, 575, 575, - nil, nil, nil, nil, nil, 575, nil, nil, nil, nil, - nil, nil, nil, 575, 575, nil, 575, 575, 575, 575, - 575, 575, 575, 575, 575, 575, 575, 575, 576, 576, - 575, nil, 576, nil, nil, nil, nil, nil, nil, nil, - 576, 576, nil, 576, 576, 576, 576, 576, 576, 576, - nil, nil, 576, 576, nil, nil, nil, 576, 576, 576, - 576, nil, nil, nil, nil, nil, 576, nil, nil, nil, - nil, nil, nil, nil, 576, 576, nil, 576, 576, 576, - 576, 576, 576, 576, 576, 576, 576, 576, 576, 613, - 613, 576, nil, 613, nil, nil, nil, nil, nil, nil, - nil, 613, 613, nil, 613, 613, 613, 613, 613, 613, - 613, nil, nil, 613, 613, nil, nil, nil, 613, 613, - 613, 613, nil, nil, nil, nil, nil, 613, nil, nil, - nil, nil, nil, nil, nil, 613, 613, nil, 613, 613, - 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, - 614, 614, 613, nil, 614, nil, nil, nil, nil, nil, - nil, nil, 614, 614, nil, 614, 614, 614, 614, 614, - 614, 614, nil, nil, 614, 614, nil, nil, nil, 614, - 614, 614, 614, nil, nil, nil, nil, nil, 614, nil, - nil, nil, nil, nil, nil, nil, 614, 614, nil, 614, - 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, - 614, 1117, 1117, 614, nil, 1117, nil, nil, nil, nil, - nil, nil, nil, 1117, 1117, nil, 1117, 1117, 1117, 1117, - 1117, 1117, 1117, nil, nil, 1117, 1117, nil, nil, nil, - 1117, 1117, 1117, 1117, nil, nil, nil, nil, nil, 1117, - nil, nil, nil, nil, nil, nil, nil, 1117, 1117, nil, - 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, 1117, - 1117, 1117, 1121, 1121, 1117, nil, 1121, nil, nil, nil, - nil, nil, nil, nil, 1121, 1121, nil, 1121, 1121, 1121, - 1121, 1121, 1121, 1121, nil, nil, 1121, 1121, nil, nil, - nil, 1121, 1121, 1121, 1121, nil, nil, nil, nil, nil, - 1121, nil, nil, nil, nil, nil, nil, nil, 1121, 1121, - nil, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, 1121, - 1121, 1121, 1121, 1122, 1122, 1121, nil, 1122, nil, nil, - nil, nil, nil, nil, nil, 1122, 1122, nil, 1122, 1122, - 1122, 1122, 1122, 1122, 1122, nil, nil, 1122, 1122, nil, - nil, nil, 1122, 1122, 1122, 1122, nil, nil, nil, nil, - nil, 1122, nil, nil, nil, nil, nil, nil, nil, 1122, - 1122, nil, 1122, 1122, 1122, 1122, 1122, 1122, 1122, 1122, - 1122, 1122, 1122, 1122, nil, 1150, 1122, 1150, 1150, 1150, - 1150, 1150, 1165, nil, 1165, 1165, 1165, 1165, 1165, 1186, - 1150, 1186, 1186, 1186, 1186, 1186, nil, 1165, nil, nil, - nil, nil, nil, nil, 1186, nil, nil, nil, nil, nil, - nil, nil, 1150, nil, nil, nil, nil, nil, nil, 1165, - nil, nil, nil, 1150, 1150, nil, 1186, nil, 1150, nil, - 1165, 1165, nil, nil, nil, 1165, nil, 1186, 1186, nil, - nil, nil, 1186 ] - -racc_action_pointer = [ - nil, 5, 979, 85, nil, -110, nil, 5154, 741, 97, - 23788, 23916, 159, nil, 157, 191, 441, 265, -62, 374, - nil, -68, 5285, 1123, 338, nil, 226, nil, -8, 5426, - 5536, 5670, 5801, 5932, nil, 1123, 21930, 22061, nil, 245, - 468, 531, 330, 6063, 6194, 205, 6325, 6456, 525, 6587, - 266, 279, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 6728, nil, 6869, 7000, 7131, 35, nil, 7262, 7393, - nil, nil, 7524, 22200, 22331, 22462, 24300, nil, nil, nil, - nil, nil, nil, nil, nil, 723, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 0, nil, nil, 112, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 7667, nil, nil, nil, nil, 7810, 7941, 8072, 8203, - 8346, nil, 1267, nil, -1, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 290, nil, 1411, 8477, 8608, 8739, 8870, - 9001, 9132, 26135, 26196, nil, nil, 9263, 9394, 9525, nil, - nil, 342, 141, 162, 376, 193, 303, 366, nil, 9656, - 1555, 402, nil, 9787, 9918, 10049, 10180, 10311, 10442, 10573, - 10704, 10835, 10966, 11097, 11228, 11359, 11490, 11621, 11752, 11883, - 12014, 12145, 12276, 12407, 12538, nil, nil, nil, nil, 12669, - nil, nil, 26257, nil, nil, 421, 12800, 12931, nil, nil, - nil, nil, nil, nil, nil, 13062, nil, 1555, nil, 399, - 429, nil, 13193, 481, 13324, nil, nil, 13455, 13586, nil, - nil, 264, nil, 13729, 1252, 465, 469, 1699, 492, 547, - 512, 22593, 1843, 514, 518, 550, 603, 582, nil, 576, - 571, 225, nil, nil, nil, 618, 221, 607, 22732, nil, - 564, 584, 2419, 2563, 686, nil, 690, 13860, nil, 13991, - 1987, 1396, 630, nil, 431, 514, 672, 655, 583, 690, - nil, nil, 593, -1, 11, 14122, 2131, 2275, 511, 786, - 674, -18, 10, 694, 756, 11, 797, nil, nil, 441, - 481, 4, nil, 806, nil, 731, 14253, nil, nil, nil, - 302, 515, 532, 558, 585, 586, 627, 671, 702, nil, - 726, nil, 14384, nil, 193, 378, 396, 402, 412, -27, - 195, 463, nil, nil, nil, nil, nil, nil, nil, 741, - 24044, nil, nil, nil, nil, 743, nil, 817, 733, 14515, - 736, nil, nil, 727, nil, 873, 246, 835, nil, nil, - 1267, nil, nil, nil, nil, nil, 1411, 763, nil, 790, - 800, 681, 746, 14656, nil, nil, nil, 222, 334, 849, - nil, nil, 14788, 14924, nil, nil, nil, -35, nil, 859, - 26318, 26379, 15061, 253, 15192, 15323, 15454, 24383, 2707, 2851, - 823, 856, 885, 886, 887, 894, 4435, 4579, 4723, 2995, - 3139, 3283, 3427, 3571, 3715, 2447, 2591, 3859, 4003, 1699, - 4147, nil, 15595, nil, nil, nil, nil, 15725, 838, 840, - 844, nil, nil, nil, 848, nil, nil, 15856, nil, 15987, - nil, 16118, nil, 329, nil, nil, nil, 16261, 1540, nil, - 857, 855, nil, nil, 859, 22863, 863, 16404, 26440, 26501, - 878, 915, nil, 22994, 872, nil, 16535, 26562, 26623, 16666, - 4291, 1843, 16797, 999, 998, 886, 928, nil, 16928, nil, - nil, 17059, nil, nil, nil, nil, 15598, 2419, 1007, nil, - 2563, 62, 1013, 1039, 398, 1041, 17190, 17321, 26684, 26745, - 27, nil, nil, 879, nil, 26806, 26867, 17452, nil, nil, - 81, 2707, 964, nil, -33, nil, nil, nil, 1033, nil, - nil, nil, 939, nil, nil, 153, nil, 263, nil, nil, - 926, nil, 928, nil, nil, nil, 24172, nil, 17595, 933, - 17726, 17857, 17988, 26928, 26989, 18131, 18262, 858, 974, 18393, - 18524, 18655, 18786, 973, nil, nil, 18917, 19048, 977, nil, - nil, nil, 306, 343, 473, 612, 945, 990, nil, 969, - nil, nil, 440, 252, 94, nil, 655, nil, nil, 6728, - 25924, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 1030, 201, nil, 951, 1075, nil, 1058, 91, - nil, nil, 19179, nil, 980, 989, 1094, nil, 972, nil, - 1019, 19310, nil, nil, 19441, nil, 363, 23125, 976, nil, - 981, 236, 250, 1024, 360, 962, 1027, 987, 23256, nil, - 1055, -7, 1116, 19572, nil, nil, nil, 707, nil, 24386, - nil, 998, 999, 1002, nil, 1003, 1006, 1015, nil, nil, - nil, nil, nil, nil, nil, nil, 1004, 2261, nil, nil, - 19703, nil, nil, nil, -1, nil, nil, nil, 1099, nil, - nil, 1100, 737, nil, 1145, nil, nil, nil, nil, nil, - 1156, 1170, nil, nil, 26, 1053, 40, 41, 151, 152, - 2851, 970, 968, nil, 1070, 2995, 19834, nil, 1194, 3139, - 719, 24612, 24526, nil, nil, nil, nil, nil, nil, 3283, - nil, nil, nil, nil, nil, nil, nil, nil, 1071, 19965, - 1077, 347, 445, 722, 834, nil, 1987, 20096, nil, 1076, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 20227, 20358, 20489, 20620, 449, 1159, 24609, -41, 260, 24707, - 24805, 258, 24903, nil, 359, nil, 1100, 25001, 26022, 26056, - nil, nil, nil, nil, nil, nil, 20751, nil, 1107, nil, - nil, 1104, 1089, nil, nil, 15559, 3427, nil, nil, nil, - nil, 1094, 338, nil, nil, 1227, nil, 3571, 1103, 1150, - nil, nil, nil, 63, 1112, 1156, nil, nil, 746, nil, - 24906, nil, 25004, nil, 14719, nil, 20882, nil, 2290, nil, - 1114, 1115, 841, 1119, nil, nil, nil, nil, nil, 1241, - nil, 21013, 1244, nil, nil, 25099, 21144, 3715, 68, 1248, - nil, 1249, 537, 3859, nil, 1255, 1135, 1141, 1145, nil, - 602, nil, 1149, 1146, 486, nil, nil, 21275, 21406, nil, - nil, nil, nil, -77, 1150, 1151, 25197, nil, 1150, -32, - 1170, nil, nil, nil, 25295, nil, nil, 218, 1174, 1176, - nil, 1177, 1178, nil, nil, -69, nil, nil, nil, 2131, - 4003, nil, nil, 1176, 1190, 1194, nil, 1211, 1214, 1215, - nil, 1242, 1223, 1219, 1211, 23387, nil, nil, nil, nil, - 4147, nil, nil, 32, 23518, nil, nil, nil, nil, 1267, - 1227, nil, 1310, nil, nil, 1230, 1233, nil, 1238, 1246, - nil, 1247, nil, nil, 1251, 2320, 2300, nil, nil, nil, - 33, nil, 34, 841, 139, nil, nil, nil, 657, nil, - nil, nil, 1377, nil, nil, 831, nil, nil, 1302, nil, - nil, nil, 1305, 1260, 71, nil, 1261, 25393, 637, 1310, - 333, nil, nil, nil, nil, nil, nil, 370, nil, nil, - 1444, nil, nil, nil, 25200, nil, 25298, nil, 22108, nil, - nil, 1290, 1109, 23649, 893, 1346, nil, 4291, 35, 36, - 972, 1347, 42, nil, 4435, 4579, nil, nil, 25396, nil, - 22640, nil, 25494, nil, 25592, nil, nil, nil, nil, 1271, - 1275, 4723, nil, 21537, 21668, 25491, nil, nil, nil, nil, - 1279, 4867, nil, 1285, 25589, 25687, 1286, nil, nil, nil, - nil, nil, 1287, nil, nil, 1290, 1291, 1292, 1294, nil, - 1314, nil, 732, nil, nil, nil, 995, 27050, nil, 1441, - 21799, 27111, 27172, 98, 1337, 1442, 1319, 1320, 1334, 1338, - 2787, 2931, 901, 5011, nil, nil, nil, nil, 1479, 25785, - 1358, 1359, 25883, nil, 25690, nil, 25788, nil, 25977, nil, - 27234, nil, nil, nil, 1541, 1406, 1408, nil, 1368, 102, - 138, 145, 181, nil, nil, 27241, nil, nil, nil, nil, - 1368, nil, 39, nil, 1371, nil, 1372, 1374, 1382, 1390, - nil, 146, 1391, nil, nil, nil, 27248, nil, nil, nil, - nil, nil, 1392, nil ] - -racc_action_default = [ - -1, -716, -4, -716, -2, -701, -5, -716, -8, -716, - -716, -716, -716, -31, -716, -716, -36, -716, -716, -295, - -48, -703, -716, -55, -59, -60, -61, -65, -272, -272, - -272, -308, -339, -340, -77, -13, -81, -89, -91, -716, - -600, -601, -716, -716, -716, -716, -716, -716, -229, -716, - -703, -243, -286, -287, -288, -289, -290, -291, -292, -293, - -294, -689, -297, -301, -715, -679, -316, -318, -716, -716, - -57, -57, -701, -716, -716, -716, -716, -341, -342, -344, - -345, -346, -347, -540, -541, -542, -543, -564, -546, -547, - -566, -568, -551, -556, -560, -562, -578, -579, -580, -564, - -582, -584, -585, -586, -587, -687, -589, -590, -688, -592, - -593, -594, -595, -596, -597, -598, -599, -604, -605, 1194, - -3, -702, -711, -712, -713, -7, -716, -716, -716, -716, - -716, -9, -4, -19, -716, -120, -121, -122, -123, -124, - -125, -126, -130, -131, -132, -133, -134, -135, -136, -137, - -138, -139, -140, -141, -142, -143, -144, -145, -146, -147, - -148, -149, -150, -151, -152, -153, -154, -155, -156, -157, - -158, -159, -160, -161, -162, -163, -164, -165, -166, -167, - -168, -169, -170, -171, -172, -173, -174, -175, -176, -177, - -178, -179, -180, -181, -182, -183, -184, -185, -186, -187, - -188, -189, -190, -191, -192, -193, -194, -195, -196, -197, - -198, -199, -200, -24, -127, -13, -716, -716, -716, -716, - -716, -262, -716, -716, -699, -700, -716, -716, -703, -704, - -52, -716, -600, -601, -716, -295, -716, -716, -235, -716, - -13, -716, -53, -212, -213, -716, -716, -716, -716, -716, - -716, -716, -716, -716, -716, -716, -716, -716, -716, -716, - -716, -716, -716, -716, -716, -244, -245, -246, -247, -716, - -411, -413, -716, -697, -698, -66, -262, -716, -315, -417, - -426, -428, -72, -423, -73, -703, -74, -250, -267, -276, - -276, -271, -716, -277, -716, -564, -681, -716, -716, -75, - -76, -701, -14, -716, -17, -716, -79, -13, -703, -716, - -82, -85, -13, -97, -98, -716, -716, -105, -308, -311, - -703, -716, -339, -340, -343, -424, -716, -87, -716, -93, - -305, -716, -214, -215, -583, -223, -224, -716, -236, -716, - -13, -299, -703, -251, -708, -708, -716, -716, -708, -716, - -317, -402, -56, -716, -716, -716, -13, -13, -701, -716, - -702, -600, -601, -716, -716, -295, -716, -357, -358, -115, - -116, -716, -118, -716, -295, -608, -716, -600, -601, -332, - -120, -121, -160, -161, -162, -178, -183, -190, -193, -334, - -716, -677, -716, -544, -716, -716, -716, -716, -716, -716, - -716, -716, -6, -714, -25, -26, -27, -28, -29, -716, - -716, -21, -22, -23, -128, -716, -32, -35, -282, -716, - -716, -281, -33, -716, -37, -716, -295, -45, -47, -201, - -255, -277, -49, -50, -38, -202, -255, -703, -263, -276, - -276, -690, -691, -272, -421, -692, -693, -691, -690, -272, - -420, -422, -692, -693, -44, -209, -51, -703, -314, -716, - -716, -716, -262, -305, -716, -716, -716, -716, -210, -211, - -216, -217, -218, -219, -220, -221, -225, -226, -227, -228, - -230, -231, -232, -233, -234, -237, -238, -239, -240, -703, - -248, -432, -272, -690, -691, -63, -67, -636, -703, -276, - -703, -273, -430, -432, -703, -310, -268, -716, -269, -716, - -274, -716, -278, -716, -684, -686, -12, -702, -16, -18, - -703, -78, -303, -94, -83, -716, -703, -262, -716, -716, - -104, -716, -583, -716, -90, -95, -716, -716, -716, -716, - -249, -241, -716, -532, -716, -703, -716, -252, -710, -709, - -254, -710, -306, -307, -680, -319, -635, -13, -348, -349, - -13, -716, -716, -716, -716, -716, -716, -262, -716, -716, - -305, -57, -115, -116, -117, -716, -716, -262, -328, -606, - -716, -13, -612, -336, -703, -545, -565, -570, -716, -572, - -548, -567, -716, -569, -550, -716, -553, -716, -555, -558, - -716, -559, -716, -581, -10, -20, -716, -30, -716, -285, - -716, -716, -262, -716, -716, -716, -716, -425, -716, -264, - -266, -716, -716, -68, -261, -418, -716, -716, -70, -419, - -313, -705, -690, -691, -690, -691, -703, -54, -451, -453, - -455, -458, -512, -465, -468, -471, -505, -510, -511, -716, - -716, -515, -516, -517, -518, -519, -520, -521, -522, -523, - -524, -526, -716, -716, -530, -716, -716, -433, -62, -414, - -430, -257, -264, -259, -716, -392, -716, -309, -276, -275, - -279, -716, -682, -683, -716, -15, -80, -716, -86, -92, - -703, -690, -691, -260, -694, -103, -716, -88, -716, -208, - -222, -703, -715, -715, -298, -300, -302, -708, -403, -635, - -406, -676, -676, -676, -618, -620, -620, -620, -634, -637, - -638, -639, -640, -641, -642, -643, -644, -716, -646, -648, - -650, -655, -657, -658, -661, -666, -668, -669, -671, -672, - -673, -716, -715, -350, -715, -58, -351, -352, -322, -323, - -716, -716, -438, -325, -716, -703, -690, -691, -694, -304, - -13, -115, -116, -119, -703, -13, -716, -330, -716, -13, - -635, -635, -716, -678, -571, -574, -575, -576, -577, -13, - -549, -552, -554, -557, -561, -563, -129, -34, -283, -716, - -703, -690, -691, -691, -690, -46, -256, -716, -706, -276, - -40, -204, -41, -205, -69, -42, -207, -43, -206, -71, - -716, -716, -716, -716, -425, -716, -716, -456, -457, -716, - -716, -716, -716, -467, -716, -470, -716, -716, -508, -509, - -513, -514, -402, -527, -116, -528, -716, -412, -392, -416, - -415, -716, -703, -427, -393, -703, -13, -429, -270, -280, - -685, -84, -425, -96, -312, -715, -355, -13, -533, -715, - -534, -535, -253, -716, -703, -716, -615, -616, -716, -617, - -716, -627, -716, -630, -716, -632, -716, -359, -716, -361, - -363, -366, -369, -703, -649, -659, -660, -670, -674, -716, - -353, -716, -716, -324, -326, -716, -716, -13, -425, -716, - -425, -716, -716, -13, -333, -716, -703, -620, -703, -636, - -716, -337, -716, -284, -425, -39, -203, -265, -716, -452, - -454, -461, -464, -473, -703, -703, -474, -480, -716, -485, - -491, -493, -495, -496, -499, -500, -564, -503, -703, -703, - -529, -703, -703, -564, -707, -703, -506, -507, -525, -242, - -13, -64, -258, -676, -676, -676, -374, -376, -376, -376, - -391, -716, -703, -396, -644, -652, -653, -664, -431, -11, - -13, -539, -356, -716, -716, -537, -404, -407, -409, -716, - -676, -656, -661, -675, -619, -620, -620, -647, -620, -620, - -667, -620, -644, -662, -703, -716, -716, -368, -645, -320, - -716, -321, -716, -443, -446, -449, -450, -279, -715, -327, - -329, -607, -716, -335, -609, -716, -611, -613, -612, -573, - -459, -460, -489, -475, -478, -481, -483, -716, -492, -498, - -716, -502, -504, -462, -463, -466, -469, -716, -472, -434, - -716, -371, -372, -373, -382, -384, -716, -387, -716, -389, - -394, -716, -716, -716, -651, -716, -538, -13, -600, -601, - -716, -716, -295, -536, -13, -13, -405, -614, -716, -623, - -716, -625, -716, -628, -716, -631, -633, -360, -362, -364, - -367, -13, -439, -716, -716, -447, -435, -436, -437, -331, - -703, -13, -482, -476, -716, -716, -486, -487, -490, -494, - -497, -501, -676, -654, -375, -376, -376, -376, -376, -665, - -376, -395, -703, -398, -400, -401, -663, -716, -305, -532, - -262, -716, -716, -305, -716, -716, -620, -620, -620, -620, - -716, -716, -715, -13, -444, -445, -448, -610, -716, -716, - -479, -484, -716, -370, -716, -379, -716, -381, -716, -385, - -716, -388, -390, -397, -716, -304, -694, -531, -703, -690, - -691, -694, -304, -408, -410, -716, -621, -624, -626, -629, - -365, -354, -715, -338, -477, -488, -376, -376, -376, -376, - -399, -425, -620, -440, -441, -442, -716, -377, -380, -383, - -386, -622, -376, -378 ] - -racc_goto_table = [ - 41, 288, 288, 288, 389, 41, 222, 353, 354, 227, - 124, 358, 500, 271, 273, 394, 557, 560, 751, 350, - 343, 565, 702, 437, 279, 283, 555, 401, 352, 352, - 544, 889, 352, 41, 314, 314, 15, 769, 339, 310, - 508, 15, 356, 357, 637, 877, 289, 289, 289, 682, - 496, 421, 422, 574, 133, 214, 534, 324, 324, 334, - 679, 41, 679, 272, 121, 404, 405, 406, 407, 15, - 855, 362, 378, 378, 378, 131, 120, 124, 498, 344, - 8, 955, 710, 230, 306, 8, 352, 352, 352, 352, - 825, 682, 883, 327, 324, 324, 324, 15, 125, 138, - 138, 141, 141, 434, 443, 449, 990, 367, 958, 454, - 718, 674, 892, 846, 987, 4, 290, 290, 290, 41, - 547, 550, 1078, 308, 554, 985, 924, 938, 41, 941, - 41, 286, 299, 300, 1113, 1115, 1096, 1, 1080, 961, - 666, 341, 1109, 359, 275, 282, 284, 375, 379, 345, - 348, 2, 676, 969, 492, 15, 595, 597, 979, 309, - 682, 685, 213, 368, 15, 138, 15, 617, 417, 410, - 467, 745, 679, 679, 670, 606, 925, 939, 432, 433, - 337, 942, 346, 669, 391, 347, 366, 456, 457, 578, - 508, 288, 428, 390, 340, 428, 877, 545, 342, 8, - 997, 428, 351, 1140, 1141, 765, 903, 581, 408, 582, - 8, 772, 402, 41, 1018, 1079, 960, 959, 444, 460, - 866, 867, 869, 513, 962, 679, 750, 830, 831, 17, - 1112, 420, 420, 708, 17, 864, 1180, 1115, 41, 976, - 1109, 863, 986, 994, 988, 409, 288, 288, 1174, 15, - 1064, 423, 1006, 688, 423, 288, 1051, 763, 1078, 987, - 423, 697, 17, 718, 636, 1065, 591, 593, 596, 596, - 985, 768, 1170, 491, 15, 502, 950, 416, 427, 841, - 955, 427, 955, 503, 955, 838, 1086, 427, 987, 1002, - 17, 499, 289, 1183, 561, 895, 906, 910, 1133, 1003, - 289, 41, 990, 528, 1005, 41, 124, 1105, 531, 314, - 41, 919, 453, 877, 877, 352, 920, 279, 987, 537, - 819, 283, 820, 822, 718, 718, 314, 824, 827, 690, - 546, 535, 324, 1098, 1099, 1100, 580, 15, 41, 415, - 532, 15, 443, 449, 832, 835, 15, 859, 17, 324, - 973, 568, 584, 393, 41, 41, 306, 17, 395, 17, - 517, 306, 290, 124, 309, 396, 814, 524, 397, 755, - 290, 519, 516, 823, 15, 398, 1087, 501, 273, 764, - 955, 518, 955, 399, 955, 504, 955, 986, 1036, 400, - 15, 15, 1136, 774, 987, 520, 923, 923, 804, 923, - 526, 779, 766, 809, 945, 981, 946, 947, 842, 1103, - 693, nil, nil, 613, 790, 851, 1106, 897, 1107, 693, - 852, 1171, 955, 726, nil, 618, nil, 583, 848, 564, - nil, 309, 288, nil, nil, nil, 309, nil, nil, 624, - 1126, nil, 17, nil, 17, 629, nil, 17, 877, 877, - 693, nil, nil, 17, 605, 901, 444, 682, 693, 905, - 1023, nil, 1041, 1042, 1043, 659, 782, 17, 782, nil, - 679, nil, 1004, 1091, nil, nil, nil, 665, nil, nil, - 562, 563, nil, 862, nil, 898, nil, nil, 624, 1067, - nil, nil, nil, nil, 900, 443, 449, 288, nil, 138, - nil, 141, 701, 940, 800, 802, 908, 948, nil, 805, - 807, 1029, nil, nil, nil, 41, 1176, nil, nil, nil, - 914, nil, nil, 314, 444, nil, nil, nil, 535, nil, - 17, 314, nil, 444, 17, nil, 535, 288, 860, 17, - 1184, nil, nil, 760, nil, nil, 324, 288, 922, 848, - 453, 15, nil, nil, 324, 41, nil, nil, 41, 623, - nil, 1097, nil, nil, 444, 628, 746, 17, nil, nil, - 937, 937, 444, nil, nil, 937, 726, nil, nil, 41, - nil, 754, 288, 17, 17, 767, 428, 873, 875, nil, - nil, 15, 678, 1012, 15, nil, 428, 428, 1157, nil, - nil, 428, 428, nil, nil, nil, 41, nil, 668, 444, - nil, 1143, nil, 41, nil, 15, 982, nil, 453, nil, - nil, nil, 840, nil, 618, nil, 1185, 453, 1097, 1097, - nil, 618, 826, 707, nil, nil, 1057, 726, 726, nil, - 1039, nil, 15, nil, 965, 423, 937, 659, 659, 15, - 786, nil, nil, nil, nil, 423, 423, 839, 453, 861, - 423, 423, 923, 1081, 453, 1082, nil, nil, 1033, 1034, - 1088, 1035, 427, 1097, 954, nil, 1175, nil, 618, nil, - 915, 742, 427, 427, 744, 314, 787, 427, 427, 624, - 535, nil, 629, 795, 980, 138, 314, 141, nil, nil, - 911, 853, nil, 453, 799, 902, nil, nil, 324, nil, - nil, 956, 964, nil, nil, nil, nil, nil, 420, 324, - nil, nil, nil, nil, nil, nil, 352, nil, nil, nil, - nil, 983, nil, nil, 983, nil, nil, 726, nil, 726, - nil, nil, nil, 618, 17, nil, nil, nil, nil, nil, - nil, 1090, 618, nil, nil, 1125, nil, 799, 41, nil, - nil, nil, nil, 41, nil, nil, nil, 41, nil, nil, - nil, nil, 428, nil, nil, nil, nil, 41, 618, 937, - nil, 1138, nil, nil, 17, nil, nil, 17, nil, 435, - nil, 982, nil, nil, 15, 455, nil, nil, nil, 15, - nil, nil, nil, 15, nil, nil, 618, nil, 17, nil, - nil, 971, nil, 15, 659, 975, nil, 659, 659, nil, - 659, nil, nil, nil, nil, 659, 659, 659, nil, nil, - 1000, 423, nil, 963, nil, 17, nil, nil, 17, 965, - nil, nil, 17, 965, 41, 965, nil, 965, 17, 17, - nil, 352, 963, 17, 17, 41, 1069, 1071, 427, 1073, - 1075, 138, 1076, nil, 1030, nil, nil, 651, nil, 1102, - nil, 1037, nil, 954, nil, 954, nil, 954, nil, nil, - 15, nil, 726, nil, 899, nil, nil, nil, 1181, nil, - nil, 15, nil, 659, nil, 41, nil, nil, nil, nil, - 458, 41, nil, 912, nil, nil, 983, 1011, nil, nil, - 956, 964, 956, 964, 956, 1017, nil, nil, nil, nil, - nil, nil, 1158, nil, 659, nil, 618, 618, nil, 618, - 826, 15, 659, nil, nil, 726, nil, 15, nil, nil, - nil, nil, nil, 965, 652, 965, nil, 965, 41, 965, - 963, nil, nil, nil, nil, nil, nil, 505, nil, nil, - nil, nil, nil, 378, nil, nil, nil, nil, 41, nil, - 968, nil, 1059, 954, nil, 954, nil, 954, nil, 954, - 521, 972, nil, nil, 15, 965, 324, 17, nil, nil, - nil, nil, 17, nil, nil, 324, 17, 1166, 1167, 1168, - 1169, nil, nil, 693, 15, nil, 17, nil, 1063, nil, - 956, 964, 956, nil, 956, 954, 956, nil, nil, nil, - nil, 1008, 1134, 1135, 17, 659, nil, nil, nil, nil, - nil, nil, nil, 455, nil, 435, 18, nil, nil, nil, - nil, 18, nil, 352, 352, nil, nil, nil, 1121, 651, - 651, 378, 956, 1191, nil, 41, 231, nil, nil, nil, - nil, nil, 41, 41, nil, 231, 231, 231, nil, 18, - 315, 315, nil, 17, 324, nil, nil, nil, nil, 41, - nil, nil, nil, 659, 17, nil, nil, nil, nil, 41, - 288, 15, 659, 659, 1056, nil, nil, 18, 15, 15, - 1153, nil, 231, 231, nil, 699, 231, 363, 373, 373, - nil, nil, nil, nil, nil, 15, nil, 444, 653, nil, - nil, nil, nil, nil, 17, 15, 652, 652, nil, 630, - 17, 41, nil, nil, nil, nil, nil, 659, nil, nil, - 659, nil, nil, nil, nil, nil, 618, nil, nil, nil, - nil, nil, nil, nil, nil, 18, nil, nil, nil, nil, - 231, 231, 231, 231, 18, nil, 18, 15, nil, nil, - 671, nil, 673, nil, nil, nil, 677, 17, nil, nil, - nil, 1119, nil, nil, nil, nil, nil, nil, 1124, nil, - 801, 803, 686, nil, nil, 806, 808, 17, 689, nil, - nil, nil, nil, nil, nil, 1132, 453, nil, nil, nil, - 19, 453, nil, nil, nil, 19, 651, 705, nil, 651, - 651, nil, 651, nil, nil, nil, nil, 651, 651, 651, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 19, 317, 317, nil, nil, nil, 18, - 231, 425, 231, 231, 425, 231, 773, 1172, nil, nil, - 425, 231, 231, nil, nil, nil, nil, nil, nil, nil, - 349, 19, nil, nil, 18, nil, nil, nil, nil, nil, - nil, 365, 374, 374, 17, nil, nil, 1045, 1047, 1049, - nil, 17, 17, 652, nil, 651, 652, 652, nil, 652, - 653, 653, nil, nil, 652, 652, 652, nil, 17, nil, - 231, 231, 907, nil, nil, nil, nil, nil, 17, 231, - nil, nil, nil, nil, nil, nil, 651, nil, nil, 19, - nil, nil, nil, nil, 651, nil, nil, 18, 19, nil, - 19, 18, nil, nil, nil, 315, 18, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 17, nil, 315, nil, nil, nil, 916, nil, nil, nil, - nil, nil, 652, 854, 18, nil, nil, nil, nil, 801, - 803, 808, 806, nil, nil, nil, nil, 957, nil, 231, - 18, 18, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 652, nil, nil, nil, nil, nil, nil, - 231, 652, nil, nil, 989, nil, 991, nil, nil, nil, - nil, 418, 431, 19, nil, 426, 231, 651, 426, nil, - nil, nil, nil, nil, 426, 1145, 1147, 1149, 1151, nil, - 1152, nil, nil, nil, nil, nil, nil, nil, 19, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 653, nil, nil, - 653, 653, nil, 653, nil, nil, nil, nil, 653, 653, - 653, nil, nil, nil, nil, 651, nil, 916, nil, 921, - nil, nil, nil, nil, 651, 651, 231, 510, nil, 512, - nil, nil, 514, 515, 652, nil, 1187, 1188, 1189, 1190, - nil, 19, nil, nil, 952, 19, nil, nil, nil, 317, - 19, nil, 1193, 654, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 317, nil, nil, 651, - nil, nil, 651, nil, nil, nil, 653, nil, 19, nil, - nil, 18, nil, nil, nil, 998, nil, nil, nil, 315, - nil, 231, 652, nil, 19, 19, nil, 315, nil, nil, - nil, 652, 652, nil, nil, nil, 231, 653, 1014, nil, - 1016, nil, nil, nil, nil, 653, nil, nil, 1108, nil, - 1110, 18, nil, nil, 18, nil, 1020, 1021, nil, nil, - nil, 231, nil, nil, nil, nil, nil, nil, nil, nil, - 1127, 231, 1128, nil, 1129, 18, 652, 1038, nil, 652, - nil, nil, nil, nil, 609, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 18, nil, nil, 425, 231, nil, nil, 18, - nil, nil, nil, nil, nil, 425, 425, nil, nil, nil, - 425, 425, nil, nil, 655, nil, 1077, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 653, nil, - nil, nil, nil, nil, nil, nil, 1177, nil, 1178, nil, - 1179, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 654, 654, 1182, nil, nil, - nil, nil, 680, nil, 349, nil, 683, nil, nil, nil, - nil, 315, nil, nil, nil, 19, nil, nil, 1192, nil, - nil, nil, 315, 317, nil, nil, 653, nil, nil, nil, - nil, 317, nil, nil, nil, 653, 653, nil, nil, nil, - nil, nil, nil, 680, nil, nil, 349, nil, nil, nil, - nil, nil, 1137, nil, nil, 19, nil, nil, 19, nil, - nil, 431, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 19, - 653, nil, nil, 653, 18, nil, 778, nil, nil, 18, - 231, nil, nil, 18, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 18, nil, 788, 19, nil, nil, 426, - nil, nil, nil, 19, 680, 349, nil, nil, nil, 426, - 426, 425, nil, 28, 426, 426, nil, nil, 28, nil, - nil, nil, nil, nil, nil, nil, 655, 655, nil, nil, - nil, nil, nil, 28, nil, nil, nil, nil, nil, nil, - nil, nil, 28, 28, 28, nil, 28, nil, nil, nil, - nil, nil, 654, nil, nil, 654, 654, 680, 654, nil, - 18, nil, nil, 654, 654, 654, 849, nil, nil, 850, - nil, 18, nil, nil, 28, 317, nil, nil, nil, 28, - 28, nil, nil, 28, nil, nil, 317, 656, 858, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 231, nil, nil, nil, nil, - nil, 18, nil, nil, nil, 884, nil, 18, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 654, 28, nil, nil, nil, nil, 28, 28, 28, - 28, 28, 657, 28, nil, nil, nil, nil, 19, nil, - nil, nil, nil, 19, nil, nil, nil, 19, nil, nil, - nil, nil, 654, nil, 18, nil, nil, 19, nil, nil, - 654, nil, nil, nil, 913, nil, nil, nil, nil, 1054, - nil, nil, 31, nil, 18, 426, nil, 31, 1060, nil, - nil, nil, nil, 655, nil, nil, 655, 655, nil, 655, - nil, nil, 31, nil, 655, 655, 655, nil, nil, nil, - nil, 31, 31, 31, nil, 31, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 28, 28, 28, 28, - 28, 28, 28, nil, 19, nil, nil, 28, 28, 28, - nil, nil, nil, 31, nil, 19, nil, nil, 31, 31, - nil, 28, 31, nil, nil, nil, nil, nil, nil, nil, - nil, 993, nil, 654, nil, nil, nil, 1116, nil, 656, - 656, 18, 655, nil, nil, nil, nil, nil, 18, 18, - nil, 1007, nil, nil, nil, 19, nil, 28, 28, nil, - nil, 19, nil, nil, nil, 18, 28, 231, 231, nil, - nil, 31, 349, 655, nil, 18, 31, 31, 31, 31, - 31, 655, 31, nil, 28, nil, 658, nil, 28, nil, - nil, 654, nil, 28, 657, 657, nil, nil, nil, nil, - 654, 654, nil, nil, 231, nil, nil, nil, 19, nil, - nil, nil, nil, nil, nil, nil, nil, 18, nil, nil, - nil, 28, nil, 374, nil, nil, nil, nil, 19, nil, - nil, nil, 1062, nil, nil, nil, 28, 28, 28, nil, - nil, nil, nil, nil, nil, 654, nil, nil, 654, nil, - nil, nil, nil, nil, nil, nil, nil, 28, nil, nil, - nil, nil, nil, nil, nil, 31, 31, 31, 31, 31, - 31, 31, nil, 28, 655, nil, 31, 31, 31, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 31, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 656, nil, nil, 656, - 656, 374, 656, nil, nil, 19, nil, 656, 656, 656, - nil, nil, 19, 19, nil, nil, 31, 31, nil, nil, - nil, nil, 655, nil, nil, 31, nil, nil, nil, 19, - nil, 655, 655, 28, nil, nil, nil, nil, nil, 19, - nil, nil, nil, 31, nil, nil, nil, 31, nil, nil, - nil, 657, 31, nil, 657, 657, nil, 657, 658, 658, - nil, nil, 657, 657, 657, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 656, 655, nil, nil, 655, - 31, 19, nil, nil, nil, nil, 40, nil, 28, nil, - nil, 40, nil, nil, nil, 31, 31, 31, 28, nil, - nil, nil, nil, nil, nil, nil, 656, nil, nil, nil, - nil, nil, nil, 28, 656, nil, 31, nil, nil, 40, - 313, 313, nil, nil, nil, nil, nil, nil, 28, nil, - 657, 28, 31, nil, nil, nil, nil, nil, 28, nil, - nil, nil, nil, nil, nil, nil, nil, 40, 28, nil, - nil, nil, 28, nil, nil, nil, nil, 361, 377, 377, - 377, 657, nil, nil, nil, nil, nil, nil, nil, 657, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 28, - nil, nil, 28, 28, nil, nil, 28, nil, nil, nil, - nil, nil, 28, 28, nil, nil, nil, 28, 28, nil, - nil, nil, 31, nil, nil, 40, nil, 656, nil, nil, - nil, nil, nil, nil, 40, nil, 40, nil, nil, nil, - nil, nil, nil, nil, nil, 658, nil, nil, 658, 658, - nil, 658, nil, nil, nil, nil, 658, 658, 658, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 31, nil, nil, - nil, nil, 657, nil, nil, 656, nil, 31, nil, nil, - nil, nil, nil, nil, 656, 656, nil, nil, nil, nil, - nil, nil, 31, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 31, nil, 40, - 31, nil, nil, nil, 658, nil, nil, 31, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 31, nil, 656, - 657, 31, 656, nil, 40, nil, nil, nil, nil, 657, - 657, 28, nil, nil, nil, 658, 28, 28, nil, nil, - 28, nil, nil, 658, nil, nil, nil, nil, 31, nil, - 28, 31, 31, nil, nil, 31, nil, nil, nil, nil, - nil, 31, 31, nil, nil, nil, 31, 31, 28, nil, - nil, nil, nil, nil, 657, nil, nil, 657, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 40, nil, nil, - nil, 40, nil, nil, nil, 313, 40, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 313, nil, nil, nil, nil, 28, nil, nil, - nil, nil, nil, nil, 40, nil, nil, nil, 28, nil, - nil, nil, nil, nil, nil, nil, 658, nil, nil, nil, - 40, 40, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 28, nil, nil, nil, nil, nil, 28, nil, - nil, nil, nil, nil, 28, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 658, nil, nil, nil, nil, nil, - 31, nil, nil, 658, 658, 31, 31, nil, nil, 31, - nil, nil, nil, nil, nil, nil, nil, nil, 238, 31, - nil, 28, nil, nil, nil, nil, nil, 287, 287, 287, - nil, nil, nil, nil, nil, nil, nil, 31, nil, 332, - 333, 28, 335, 336, nil, 338, nil, nil, 658, nil, - nil, 658, nil, nil, nil, nil, nil, nil, nil, nil, - 287, 287, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 31, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 31, nil, nil, - nil, 40, nil, nil, nil, nil, nil, nil, nil, 313, - nil, nil, nil, nil, nil, nil, nil, 313, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 28, nil, - nil, 31, nil, nil, nil, 28, 28, 31, nil, nil, - nil, 40, nil, 31, 40, nil, nil, nil, nil, nil, - nil, nil, 28, nil, 28, 28, nil, nil, nil, nil, - nil, nil, 28, nil, nil, 40, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 31, 28, 40, nil, nil, nil, nil, nil, nil, 40, - nil, nil, nil, nil, 28, nil, nil, nil, nil, nil, - 31, nil, 287, 430, nil, nil, 436, 287, nil, nil, - nil, nil, 436, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 238, nil, nil, nil, 468, - 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, - 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, - 489, nil, nil, nil, nil, 490, nil, nil, nil, nil, - nil, 313, 287, 287, nil, nil, nil, nil, nil, nil, - nil, 287, 313, nil, nil, nil, nil, nil, 287, nil, - 287, nil, nil, 287, 287, nil, nil, 31, nil, nil, - nil, nil, nil, nil, 31, 31, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 31, nil, 31, 31, nil, nil, nil, nil, nil, - nil, 31, nil, 540, nil, 541, nil, nil, nil, nil, - nil, nil, nil, nil, 40, nil, nil, nil, nil, 40, - nil, nil, nil, 40, nil, nil, nil, nil, nil, nil, - 31, nil, nil, 40, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 31, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 287, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 40, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 40, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 287, nil, - 436, 436, 436, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 40, nil, nil, nil, nil, nil, 40, nil, nil, - nil, nil, nil, 333, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 287, nil, 287, nil, 287, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 287, nil, nil, nil, nil, nil, nil, - nil, nil, 436, nil, 40, 700, nil, nil, nil, nil, - nil, nil, nil, nil, 287, nil, nil, 287, nil, 377, - nil, nil, nil, nil, 40, nil, nil, nil, 1058, nil, - nil, nil, 287, 287, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 287, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 287, 436, 287, nil, - nil, nil, 796, nil, nil, 287, 287, 436, 436, nil, - nil, nil, 436, 436, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 377, nil, nil, - nil, 40, nil, nil, nil, nil, nil, nil, 40, 40, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 40, nil, nil, 287, nil, - nil, nil, nil, nil, nil, 40, nil, 287, nil, nil, - 287, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 287, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 40, nil, nil, - nil, nil, nil, nil, nil, nil, 287, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 287, nil, nil, nil, nil, - nil, nil, nil, 436, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 436, 436, 436, 436, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 949, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 287, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 287, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 287, 436, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 287 ] - -racc_goto_check = [ - 63, 42, 42, 42, 66, 63, 33, 19, 19, 35, - 108, 19, 83, 150, 33, 190, 101, 101, 104, 98, - 78, 103, 12, 31, 82, 82, 100, 190, 26, 26, - 10, 102, 26, 63, 63, 63, 23, 111, 35, 59, - 85, 23, 39, 39, 37, 124, 79, 79, 79, 227, - 48, 24, 24, 64, 17, 17, 61, 74, 74, 72, - 86, 63, 86, 45, 7, 19, 19, 19, 19, 23, - 13, 63, 63, 63, 63, 9, 5, 108, 31, 79, - 8, 132, 149, 22, 55, 8, 26, 26, 26, 26, - 178, 227, 125, 60, 74, 74, 74, 23, 6, 67, - 67, 69, 69, 28, 46, 46, 223, 23, 137, 28, - 213, 49, 13, 139, 219, 2, 81, 81, 81, 63, - 80, 80, 123, 56, 80, 217, 167, 167, 63, 167, - 63, 54, 54, 54, 143, 144, 184, 1, 126, 141, - 153, 8, 224, 5, 47, 47, 47, 65, 65, 81, - 81, 3, 153, 14, 46, 23, 203, 203, 141, 11, - 227, 16, 18, 21, 23, 67, 23, 32, 25, 27, - 38, 40, 86, 86, 51, 70, 169, 169, 26, 26, - 75, 169, 77, 84, 96, 97, 105, 26, 26, 107, - 85, 42, 20, 112, 113, 20, 124, 114, 115, 8, - 124, 20, 116, 184, 184, 117, 118, 119, 8, 120, - 8, 121, 6, 63, 122, 127, 128, 138, 82, 33, - 131, 131, 131, 190, 135, 86, 103, 192, 192, 29, - 142, 79, 79, 145, 29, 149, 143, 144, 63, 146, - 224, 148, 138, 125, 138, 2, 42, 42, 184, 23, - 151, 23, 169, 61, 23, 42, 141, 64, 123, 219, - 23, 61, 29, 213, 31, 152, 204, 204, 204, 204, - 217, 10, 126, 154, 23, 156, 139, 22, 22, 49, - 132, 22, 132, 157, 132, 160, 161, 22, 219, 162, - 29, 79, 79, 163, 19, 164, 149, 149, 165, 166, - 79, 63, 223, 33, 168, 63, 108, 137, 35, 63, - 63, 171, 67, 124, 124, 26, 173, 82, 219, 33, - 174, 82, 175, 179, 213, 213, 63, 180, 181, 31, - 35, 59, 74, 186, 187, 188, 26, 23, 63, 11, - 72, 23, 46, 46, 194, 64, 23, 195, 29, 74, - 196, 33, 26, 199, 63, 63, 55, 29, 200, 29, - 7, 55, 81, 108, 11, 201, 32, 60, 202, 31, - 81, 9, 5, 32, 23, 205, 13, 54, 33, 31, - 132, 8, 132, 206, 132, 54, 132, 138, 178, 207, - 23, 23, 167, 208, 219, 56, 37, 37, 48, 37, - 56, 209, 212, 48, 37, 221, 192, 192, 83, 222, - 46, nil, nil, 33, 31, 61, 138, 101, 138, 46, - 32, 102, 132, 218, nil, 35, nil, 45, 85, 5, - nil, 11, 42, nil, nil, nil, 11, nil, nil, 82, - 138, nil, 29, nil, 29, 82, nil, 29, 124, 124, - 46, nil, nil, 29, 17, 10, 82, 227, 46, 10, - 183, nil, 131, 131, 131, 63, 204, 29, 204, nil, - 86, nil, 37, 111, nil, nil, nil, 35, nil, nil, - 11, 11, nil, 80, nil, 32, nil, nil, 82, 131, - nil, nil, nil, nil, 32, 46, 46, 42, nil, 67, - nil, 69, 26, 64, 28, 28, 83, 100, nil, 28, - 28, 37, nil, nil, nil, 63, 138, nil, nil, nil, - 32, nil, nil, 63, 82, nil, nil, nil, 59, nil, - 29, 63, nil, 82, 29, nil, 59, 42, 24, 29, - 13, nil, nil, 39, nil, nil, 74, 42, 32, 85, - 67, 23, nil, nil, 74, 63, nil, nil, 63, 47, - nil, 183, nil, nil, 82, 47, 108, 29, nil, nil, - 191, 191, 82, nil, nil, 191, 218, nil, nil, 63, - nil, 79, 42, 29, 29, 108, 20, 216, 216, nil, - nil, 23, 81, 10, 23, nil, 20, 20, 12, nil, - nil, 20, 20, nil, nil, nil, 63, nil, 47, 82, - nil, 131, nil, 63, nil, 23, 191, nil, 67, nil, - nil, nil, 98, nil, 35, nil, 104, 67, 183, 183, - nil, 35, 35, 81, nil, nil, 101, 218, 218, nil, - 10, nil, 23, nil, 220, 23, 191, 63, 63, 23, - 17, nil, nil, nil, nil, 23, 23, 150, 67, 78, - 23, 23, 37, 101, 67, 101, nil, nil, 32, 32, - 103, 32, 22, 183, 130, nil, 183, nil, 35, nil, - 28, 11, 22, 22, 11, 63, 8, 22, 22, 82, - 59, nil, 82, 8, 130, 67, 63, 69, nil, nil, - 66, 59, nil, 67, 81, 19, nil, nil, 74, nil, - nil, 133, 218, nil, nil, nil, nil, nil, 79, 74, - nil, nil, nil, nil, nil, nil, 26, nil, nil, nil, - nil, 133, nil, nil, 133, nil, nil, 218, nil, 218, - nil, nil, nil, 35, 29, nil, nil, nil, nil, nil, - nil, 83, 35, nil, nil, 10, nil, 81, 63, nil, - nil, nil, nil, 63, nil, nil, nil, 63, nil, nil, - nil, nil, 20, nil, nil, nil, nil, 63, 35, 191, - nil, 10, nil, nil, 29, nil, nil, 29, nil, 71, - nil, 191, nil, nil, 23, 71, nil, nil, nil, 23, - nil, nil, nil, 23, nil, nil, 35, nil, 29, nil, - nil, 78, nil, 23, 63, 78, nil, 63, 63, nil, - 63, nil, nil, nil, nil, 63, 63, 63, nil, nil, - 19, 23, nil, 35, nil, 29, nil, nil, 29, 220, - nil, nil, 29, 220, 63, 220, nil, 220, 29, 29, - nil, 26, 35, 29, 29, 63, 216, 216, 22, 216, - 216, 67, 216, nil, 190, nil, nil, 88, nil, 130, - nil, 190, nil, 130, nil, 130, nil, 130, nil, nil, - 23, nil, 218, nil, 11, nil, nil, nil, 32, nil, - nil, 23, nil, 63, nil, 63, nil, nil, nil, nil, - 57, 63, nil, 11, nil, nil, 133, 108, nil, nil, - 133, 218, 133, 218, 133, 108, nil, nil, nil, nil, - nil, nil, 31, nil, 63, nil, 35, 35, nil, 35, - 35, 23, 63, nil, nil, 218, nil, 23, nil, nil, - nil, nil, nil, 220, 89, 220, nil, 220, 63, 220, - 35, nil, nil, nil, nil, nil, nil, 57, nil, nil, - nil, nil, nil, 63, nil, nil, nil, nil, 63, nil, - 11, nil, 63, 130, nil, 130, nil, 130, nil, 130, - 57, 11, nil, nil, 23, 220, 74, 29, nil, nil, - nil, nil, 29, nil, nil, 74, 29, 216, 216, 216, - 216, nil, nil, 46, 23, nil, 29, nil, 23, nil, - 133, 218, 133, nil, 133, 130, 133, nil, nil, nil, - nil, 11, 19, 19, 29, 63, nil, nil, nil, nil, - nil, nil, nil, 71, nil, 71, 30, nil, nil, nil, - nil, 30, nil, 26, 26, nil, nil, nil, 33, 88, - 88, 63, 133, 216, nil, 63, 30, nil, nil, nil, - nil, nil, 63, 63, nil, 30, 30, 30, nil, 30, - 30, 30, nil, 29, 74, nil, nil, nil, nil, 63, - nil, nil, nil, 63, 29, nil, nil, nil, nil, 63, - 42, 23, 63, 63, 11, nil, nil, 30, 23, 23, - 35, nil, 30, 30, nil, 71, 30, 30, 30, 30, - nil, nil, nil, nil, nil, 23, nil, 82, 90, nil, - nil, nil, nil, nil, 29, 23, 89, 89, nil, 57, - 29, 63, nil, nil, nil, nil, nil, 63, nil, nil, - 63, nil, nil, nil, nil, nil, 35, nil, nil, nil, - nil, nil, nil, nil, nil, 30, nil, nil, nil, nil, - 30, 30, 30, 30, 30, nil, 30, 23, nil, nil, - 57, nil, 57, nil, nil, nil, 57, 29, nil, nil, - nil, 11, nil, nil, nil, nil, nil, nil, 11, nil, - 71, 71, 57, nil, nil, 71, 71, 29, 57, nil, - nil, nil, nil, nil, nil, 11, 67, nil, nil, nil, - 34, 67, nil, nil, nil, 34, 88, 57, nil, 88, - 88, nil, 88, nil, nil, nil, nil, 88, 88, 88, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 34, 34, 34, nil, nil, nil, 30, - 30, 30, 30, 30, 30, 30, 57, 11, nil, nil, - 30, 30, 30, nil, nil, nil, nil, nil, nil, nil, - 76, 34, nil, nil, 30, nil, nil, nil, nil, nil, - nil, 34, 34, 34, 29, nil, nil, 134, 134, 134, - nil, 29, 29, 89, nil, 88, 89, 89, nil, 89, - 90, 90, nil, nil, 89, 89, 89, nil, 29, nil, - 30, 30, 136, nil, nil, nil, nil, nil, 29, 30, - nil, nil, nil, nil, nil, nil, 88, nil, nil, 34, - nil, nil, nil, nil, 88, nil, nil, 30, 34, nil, - 34, 30, nil, nil, nil, 30, 30, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 29, nil, 30, nil, nil, nil, 71, nil, nil, nil, - nil, nil, 89, 57, 30, nil, nil, nil, nil, 71, - 71, 71, 71, nil, nil, nil, nil, 136, nil, 30, - 30, 30, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 89, nil, nil, nil, nil, nil, nil, - 30, 89, nil, nil, 136, nil, 136, nil, nil, nil, - nil, 76, 76, 34, nil, 34, 30, 88, 34, nil, - nil, nil, nil, nil, 34, 134, 134, 134, 134, nil, - 134, nil, nil, nil, nil, nil, nil, nil, 34, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 90, nil, nil, - 90, 90, nil, 90, nil, nil, nil, nil, 90, 90, - 90, nil, nil, nil, nil, 88, nil, 71, nil, 57, - nil, nil, nil, nil, 88, 88, 30, 76, nil, 76, - nil, nil, 76, 76, 89, nil, 134, 134, 134, 134, - nil, 34, nil, nil, 57, 34, nil, nil, nil, 34, - 34, nil, 134, 91, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 34, nil, nil, 88, - nil, nil, 88, nil, nil, nil, 90, nil, 34, nil, - nil, 30, nil, nil, nil, 57, nil, nil, nil, 30, - nil, 30, 89, nil, 34, 34, nil, 30, nil, nil, - nil, 89, 89, nil, nil, nil, 30, 90, 57, nil, - 57, nil, nil, nil, nil, 90, nil, nil, 136, nil, - 136, 30, nil, nil, 30, nil, 57, 57, nil, nil, - nil, 30, nil, nil, nil, nil, nil, nil, nil, nil, - 136, 30, 136, nil, 136, 30, 89, 57, nil, 89, - nil, nil, nil, nil, 76, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 30, nil, nil, 30, 30, nil, nil, 30, - nil, nil, nil, nil, nil, 30, 30, nil, nil, nil, - 30, 30, nil, nil, 92, nil, 57, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 90, nil, - nil, nil, nil, nil, nil, nil, 136, nil, 136, nil, - 136, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 91, 91, 136, nil, nil, - nil, nil, 76, nil, 76, nil, 76, nil, nil, nil, - nil, 30, nil, nil, nil, 34, nil, nil, 136, nil, - nil, nil, 30, 34, nil, nil, 90, nil, nil, nil, - nil, 34, nil, nil, nil, 90, 90, nil, nil, nil, - nil, nil, nil, 76, nil, nil, 76, nil, nil, nil, - nil, nil, 57, nil, nil, 34, nil, nil, 34, nil, - nil, 76, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 34, - 90, nil, nil, 90, 30, nil, 34, nil, nil, 30, - 30, nil, nil, 30, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 30, nil, 76, 34, nil, nil, 34, - nil, nil, nil, 34, 76, 76, nil, nil, nil, 34, - 34, 30, nil, 50, 34, 34, nil, nil, 50, nil, - nil, nil, nil, nil, nil, nil, 92, 92, nil, nil, - nil, nil, nil, 50, nil, nil, nil, nil, nil, nil, - nil, nil, 50, 50, 50, nil, 50, nil, nil, nil, - nil, nil, 91, nil, nil, 91, 91, 76, 91, nil, - 30, nil, nil, 91, 91, 91, 76, nil, nil, 76, - nil, 30, nil, nil, 50, 34, nil, nil, nil, 50, - 50, nil, nil, 50, nil, nil, 34, 93, 76, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 30, nil, nil, nil, nil, - nil, 30, nil, nil, nil, 76, nil, 30, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 91, 50, nil, nil, nil, nil, 50, 50, 50, - 50, 50, 94, 50, nil, nil, nil, nil, 34, nil, - nil, nil, nil, 34, nil, nil, nil, 34, nil, nil, - nil, nil, 91, nil, 30, nil, nil, 34, nil, nil, - 91, nil, nil, nil, 76, nil, nil, nil, nil, 30, - nil, nil, 53, nil, 30, 34, nil, 53, 30, nil, - nil, nil, nil, 92, nil, nil, 92, 92, nil, 92, - nil, nil, 53, nil, 92, 92, 92, nil, nil, nil, - nil, 53, 53, 53, nil, 53, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 50, 50, 50, 50, - 50, 50, 50, nil, 34, nil, nil, 50, 50, 50, - nil, nil, nil, 53, nil, 34, nil, nil, 53, 53, - nil, 50, 53, nil, nil, nil, nil, nil, nil, nil, - nil, 76, nil, 91, nil, nil, nil, 30, nil, 93, - 93, 30, 92, nil, nil, nil, nil, nil, 30, 30, - nil, 76, nil, nil, nil, 34, nil, 50, 50, nil, - nil, 34, nil, nil, nil, 30, 50, 30, 30, nil, - nil, 53, 76, 92, nil, 30, 53, 53, 53, 53, - 53, 92, 53, nil, 50, nil, 95, nil, 50, nil, - nil, 91, nil, 50, 94, 94, nil, nil, nil, nil, - 91, 91, nil, nil, 30, nil, nil, nil, 34, nil, - nil, nil, nil, nil, nil, nil, nil, 30, nil, nil, - nil, 50, nil, 34, nil, nil, nil, nil, 34, nil, - nil, nil, 34, nil, nil, nil, 50, 50, 50, nil, - nil, nil, nil, nil, nil, 91, nil, nil, 91, nil, - nil, nil, nil, nil, nil, nil, nil, 50, nil, nil, - nil, nil, nil, nil, nil, 53, 53, 53, 53, 53, - 53, 53, nil, 50, 92, nil, 53, 53, 53, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 53, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 93, nil, nil, 93, - 93, 34, 93, nil, nil, 34, nil, 93, 93, 93, - nil, nil, 34, 34, nil, nil, 53, 53, nil, nil, - nil, nil, 92, nil, nil, 53, nil, nil, nil, 34, - nil, 92, 92, 50, nil, nil, nil, nil, nil, 34, - nil, nil, nil, 53, nil, nil, nil, 53, nil, nil, - nil, 94, 53, nil, 94, 94, nil, 94, 95, 95, - nil, nil, 94, 94, 94, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 93, 92, nil, nil, 92, - 53, 34, nil, nil, nil, nil, 62, nil, 50, nil, - nil, 62, nil, nil, nil, 53, 53, 53, 50, nil, - nil, nil, nil, nil, nil, nil, 93, nil, nil, nil, - nil, nil, nil, 50, 93, nil, 53, nil, nil, 62, - 62, 62, nil, nil, nil, nil, nil, nil, 50, nil, - 94, 50, 53, nil, nil, nil, nil, nil, 50, nil, - nil, nil, nil, nil, nil, nil, nil, 62, 50, nil, - nil, nil, 50, nil, nil, nil, nil, 62, 62, 62, - 62, 94, nil, nil, nil, nil, nil, nil, nil, 94, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 50, - nil, nil, 50, 50, nil, nil, 50, nil, nil, nil, - nil, nil, 50, 50, nil, nil, nil, 50, 50, nil, - nil, nil, 53, nil, nil, 62, nil, 93, nil, nil, - nil, nil, nil, nil, 62, nil, 62, nil, nil, nil, - nil, nil, nil, nil, nil, 95, nil, nil, 95, 95, - nil, 95, nil, nil, nil, nil, 95, 95, 95, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 53, nil, nil, - nil, nil, 94, nil, nil, 93, nil, 53, nil, nil, - nil, nil, nil, nil, 93, 93, nil, nil, nil, nil, - nil, nil, 53, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 53, nil, 62, - 53, nil, nil, nil, 95, nil, nil, 53, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 53, nil, 93, - 94, 53, 93, nil, 62, nil, nil, nil, nil, 94, - 94, 50, nil, nil, nil, 95, 50, 50, nil, nil, - 50, nil, nil, 95, nil, nil, nil, nil, 53, nil, - 50, 53, 53, nil, nil, 53, nil, nil, nil, nil, - nil, 53, 53, nil, nil, nil, 53, 53, 50, nil, - nil, nil, nil, nil, 94, nil, nil, 94, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 62, nil, nil, - nil, 62, nil, nil, nil, 62, 62, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 62, nil, nil, nil, nil, 50, nil, nil, - nil, nil, nil, nil, 62, nil, nil, nil, 50, nil, - nil, nil, nil, nil, nil, nil, 95, nil, nil, nil, - 62, 62, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 50, nil, nil, nil, nil, nil, 50, nil, - nil, nil, nil, nil, 50, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 95, nil, nil, nil, nil, nil, - 53, nil, nil, 95, 95, 53, 53, nil, nil, 53, - nil, nil, nil, nil, nil, nil, nil, nil, 36, 53, - nil, 50, nil, nil, nil, nil, nil, 36, 36, 36, - nil, nil, nil, nil, nil, nil, nil, 53, nil, 36, - 36, 50, 36, 36, nil, 36, nil, nil, 95, nil, - nil, 95, nil, nil, nil, nil, nil, nil, nil, nil, - 36, 36, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 53, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 53, nil, nil, - nil, 62, nil, nil, nil, nil, nil, nil, nil, 62, - nil, nil, nil, nil, nil, nil, nil, 62, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 50, nil, - nil, 53, nil, nil, nil, 50, 50, 53, nil, nil, - nil, 62, nil, 53, 62, nil, nil, nil, nil, nil, - nil, nil, 50, nil, 50, 50, nil, nil, nil, nil, - nil, nil, 50, nil, nil, 62, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 53, 50, 62, nil, nil, nil, nil, nil, nil, 62, - nil, nil, nil, nil, 50, nil, nil, nil, nil, nil, - 53, nil, 36, 36, nil, nil, 36, 36, nil, nil, - nil, nil, 36, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 36, nil, nil, nil, 36, - 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, - 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, - 36, nil, nil, nil, nil, 36, nil, nil, nil, nil, - nil, 62, 36, 36, nil, nil, nil, nil, nil, nil, - nil, 36, 62, nil, nil, nil, nil, nil, 36, nil, - 36, nil, nil, 36, 36, nil, nil, 53, nil, nil, - nil, nil, nil, nil, 53, 53, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 53, nil, 53, 53, nil, nil, nil, nil, nil, - nil, 53, nil, 36, nil, 36, nil, nil, nil, nil, - nil, nil, nil, nil, 62, nil, nil, nil, nil, 62, - nil, nil, nil, 62, nil, nil, nil, nil, nil, nil, - 53, nil, nil, 62, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 53, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 36, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 62, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 62, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 36, nil, - 36, 36, 36, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 62, nil, nil, nil, nil, nil, 62, nil, nil, - nil, nil, nil, 36, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 36, nil, 36, nil, 36, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 36, nil, nil, nil, nil, nil, nil, - nil, nil, 36, nil, 62, 36, nil, nil, nil, nil, - nil, nil, nil, nil, 36, nil, nil, 36, nil, 62, - nil, nil, nil, nil, 62, nil, nil, nil, 62, nil, - nil, nil, 36, 36, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 36, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 36, 36, 36, nil, - nil, nil, 36, nil, nil, 36, 36, 36, 36, nil, - nil, nil, 36, 36, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 62, nil, nil, - nil, 62, nil, nil, nil, nil, nil, nil, 62, 62, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 62, nil, nil, 36, nil, - nil, nil, nil, nil, nil, 62, nil, 36, nil, nil, - 36, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 36, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 62, nil, nil, - nil, nil, nil, nil, nil, nil, 36, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 36, nil, nil, nil, nil, - nil, nil, nil, 36, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 36, 36, 36, 36, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 36, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 36, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 36, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 36, 36, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 36 ] - -racc_goto_pointer = [ - nil, 137, 113, 151, nil, 71, 91, 59, 78, 66, - -310, 124, -521, -632, -702, nil, -356, 44, 151, -61, - -25, 90, 61, 34, -165, -48, -40, 36, -117, 227, - 1034, -198, -270, -12, 1208, -12, 2756, -423, -72, -28, - -390, nil, -30, nil, nil, 37, -118, 116, -225, -391, - 1831, -321, nil, 2000, 100, 49, 88, 672, nil, 3, - 56, -272, 2344, -2, -318, 73, -72, 89, nil, 91, - -239, 569, 14, nil, 21, 132, 1205, 118, -44, 15, - -224, 85, -4, -264, -309, -250, -447, nil, 400, 477, - 651, 1056, 1197, 1440, 1495, 1669, 108, 120, -47, nil, - -325, -337, -711, -338, -546, 113, nil, -186, 5, nil, - nil, -545, 117, 132, -144, 135, 135, -373, -561, -172, - -180, -372, -697, -873, -682, -635, -858, -780, -629, nil, - -171, -491, -764, -134, 330, -621, 542, -737, -628, -562, - nil, -706, -822, -918, -917, -323, -624, nil, -467, -474, - -11, -727, -713, -351, 3, nil, -5, 2, nil, nil, - -382, -722, -606, -879, -457, -784, -596, -693, -591, -643, - nil, -504, nil, -500, -322, -320, nil, nil, -554, -320, - -317, -317, nil, -466, -891, nil, -695, -694, -693, nil, - -72, -249, -422, nil, -316, -356, -509, nil, nil, 268, - 268, 274, 276, -241, -129, 282, 289, 294, -195, -188, - nil, nil, -177, -446, nil, nil, -129, -745, -133, -756, - -201, -460, -631, -766, -904, nil, nil, -460 ] - -racc_goto_default = [ - nil, nil, nil, nil, 5, nil, 6, 360, 304, nil, - nil, 543, nil, 890, nil, 301, 302, nil, nil, nil, - 13, 14, 20, 236, nil, nil, 16, nil, 424, 237, - 331, nil, nil, 576, 235, 459, 23, 1022, nil, nil, - nil, 355, 24, 25, 26, nil, 696, nil, nil, nil, - 321, nil, 27, 318, 438, 34, nil, nil, 36, 39, - 38, nil, 232, 233, 372, nil, 140, 446, 139, 84, - nil, 429, 100, 48, 51, 269, 293, nil, 856, 439, - nil, 440, 451, nil, 625, 506, 291, 277, 52, 53, - 54, 55, 56, 57, 58, 59, 60, nil, 278, 66, - nil, nil, nil, nil, nil, nil, 74, nil, 558, 75, - 76, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 879, 725, nil, 880, 881, 1104, 953, - 712, nil, 713, 714, nil, nil, 715, nil, 717, nil, - 844, nil, nil, nil, 723, nil, nil, 556, nil, nil, - nil, nil, nil, nil, nil, 450, nil, nil, 675, 667, - nil, nil, nil, nil, nil, nil, nil, nil, 927, nil, - 638, 647, 639, 640, nil, nil, 641, 642, nil, nil, - nil, nil, 926, 928, nil, 930, 931, 932, 933, 934, - nil, 734, 646, 648, nil, nil, nil, 83, 85, 86, - nil, nil, nil, nil, 586, nil, nil, nil, nil, nil, - 96, 97, nil, 984, 771, 711, 871, 716, 992, 728, - 730, 731, 966, 735, 967, 738, 741, 296 ] - -racc_reduce_table = [ - 0, 0, :racc_error, - 0, 150, :_reduce_1, - 2, 148, :_reduce_2, - 2, 149, :_reduce_3, - 0, 151, :_reduce_4, - 1, 151, :_reduce_5, - 3, 151, :_reduce_6, - 2, 151, :_reduce_7, - 1, 153, :_reduce_none, - 2, 153, :_reduce_9, - 3, 156, :_reduce_10, - 4, 157, :_reduce_11, - 2, 158, :_reduce_12, - 0, 162, :_reduce_13, - 1, 162, :_reduce_14, - 3, 162, :_reduce_15, - 2, 162, :_reduce_16, - 1, 163, :_reduce_none, - 2, 163, :_reduce_18, - 0, 174, :_reduce_19, - 4, 155, :_reduce_20, - 3, 155, :_reduce_21, - 3, 155, :_reduce_22, - 3, 155, :_reduce_23, - 2, 155, :_reduce_24, - 3, 155, :_reduce_25, - 3, 155, :_reduce_26, - 3, 155, :_reduce_27, - 3, 155, :_reduce_28, - 3, 155, :_reduce_29, - 4, 155, :_reduce_30, - 1, 155, :_reduce_none, - 3, 155, :_reduce_32, - 3, 155, :_reduce_33, - 5, 155, :_reduce_34, - 3, 155, :_reduce_35, - 1, 155, :_reduce_none, - 3, 167, :_reduce_37, - 3, 167, :_reduce_38, - 6, 167, :_reduce_39, - 5, 167, :_reduce_40, - 5, 167, :_reduce_41, - 5, 167, :_reduce_42, - 5, 167, :_reduce_43, - 3, 167, :_reduce_44, - 1, 175, :_reduce_none, - 3, 175, :_reduce_46, - 1, 175, :_reduce_none, - 1, 173, :_reduce_none, - 3, 173, :_reduce_49, - 3, 173, :_reduce_50, - 3, 173, :_reduce_51, - 2, 173, :_reduce_52, - 0, 185, :_reduce_53, - 4, 173, :_reduce_54, - 1, 173, :_reduce_none, - 1, 166, :_reduce_none, - 0, 188, :_reduce_57, - 3, 186, :_reduce_58, - 1, 169, :_reduce_none, - 1, 169, :_reduce_none, - 1, 190, :_reduce_none, - 4, 190, :_reduce_62, - 0, 198, :_reduce_63, - 4, 195, :_reduce_64, - 1, 197, :_reduce_none, - 2, 189, :_reduce_66, - 3, 189, :_reduce_67, - 4, 189, :_reduce_68, - 5, 189, :_reduce_69, - 4, 189, :_reduce_70, - 5, 189, :_reduce_71, - 2, 189, :_reduce_72, - 2, 189, :_reduce_73, - 2, 189, :_reduce_74, - 2, 189, :_reduce_75, - 2, 189, :_reduce_76, - 1, 168, :_reduce_77, - 3, 168, :_reduce_78, - 1, 203, :_reduce_79, - 3, 203, :_reduce_80, - 1, 202, :_reduce_none, - 2, 202, :_reduce_82, - 3, 202, :_reduce_83, - 5, 202, :_reduce_84, - 2, 202, :_reduce_85, - 4, 202, :_reduce_86, - 2, 202, :_reduce_87, - 4, 202, :_reduce_88, - 1, 202, :_reduce_89, - 3, 202, :_reduce_90, - 1, 206, :_reduce_none, - 3, 206, :_reduce_92, - 2, 205, :_reduce_93, - 3, 205, :_reduce_94, - 1, 208, :_reduce_95, - 3, 208, :_reduce_96, - 1, 207, :_reduce_97, - 1, 207, :_reduce_98, - 4, 207, :_reduce_99, - 3, 207, :_reduce_100, - 3, 207, :_reduce_101, - 3, 207, :_reduce_102, - 3, 207, :_reduce_103, - 2, 207, :_reduce_104, - 1, 207, :_reduce_105, - 1, 170, :_reduce_106, - 1, 170, :_reduce_107, - 4, 170, :_reduce_108, - 3, 170, :_reduce_109, - 3, 170, :_reduce_110, - 3, 170, :_reduce_111, - 3, 170, :_reduce_112, - 2, 170, :_reduce_113, - 1, 170, :_reduce_114, - 1, 211, :_reduce_115, - 1, 211, :_reduce_none, - 2, 212, :_reduce_117, - 1, 212, :_reduce_118, - 3, 212, :_reduce_119, - 1, 213, :_reduce_none, - 1, 213, :_reduce_none, - 1, 213, :_reduce_none, - 1, 213, :_reduce_none, - 1, 213, :_reduce_none, - 1, 164, :_reduce_125, - 1, 164, :_reduce_none, - 1, 165, :_reduce_127, - 0, 217, :_reduce_128, - 4, 165, :_reduce_129, - 1, 214, :_reduce_none, - 1, 214, :_reduce_none, - 1, 214, :_reduce_none, - 1, 214, :_reduce_none, - 1, 214, :_reduce_none, - 1, 214, :_reduce_none, - 1, 214, :_reduce_none, - 1, 214, :_reduce_none, - 1, 214, :_reduce_none, - 1, 214, :_reduce_none, - 1, 214, :_reduce_none, - 1, 214, :_reduce_none, - 1, 214, :_reduce_none, - 1, 214, :_reduce_none, - 1, 214, :_reduce_none, - 1, 214, :_reduce_none, - 1, 214, :_reduce_none, - 1, 214, :_reduce_none, - 1, 214, :_reduce_none, - 1, 214, :_reduce_none, - 1, 214, :_reduce_none, - 1, 214, :_reduce_none, - 1, 214, :_reduce_none, - 1, 214, :_reduce_none, - 1, 214, :_reduce_none, - 1, 214, :_reduce_none, - 1, 214, :_reduce_none, - 1, 214, :_reduce_none, - 1, 214, :_reduce_none, - 1, 214, :_reduce_none, - 1, 215, :_reduce_none, - 1, 215, :_reduce_none, - 1, 215, :_reduce_none, - 1, 215, :_reduce_none, - 1, 215, :_reduce_none, - 1, 215, :_reduce_none, - 1, 215, :_reduce_none, - 1, 215, :_reduce_none, - 1, 215, :_reduce_none, - 1, 215, :_reduce_none, - 1, 215, :_reduce_none, - 1, 215, :_reduce_none, - 1, 215, :_reduce_none, - 1, 215, :_reduce_none, - 1, 215, :_reduce_none, - 1, 215, :_reduce_none, - 1, 215, :_reduce_none, - 1, 215, :_reduce_none, - 1, 215, :_reduce_none, - 1, 215, :_reduce_none, - 1, 215, :_reduce_none, - 1, 215, :_reduce_none, - 1, 215, :_reduce_none, - 1, 215, :_reduce_none, - 1, 215, :_reduce_none, - 1, 215, :_reduce_none, - 1, 215, :_reduce_none, - 1, 215, :_reduce_none, - 1, 215, :_reduce_none, - 1, 215, :_reduce_none, - 1, 215, :_reduce_none, - 1, 215, :_reduce_none, - 1, 215, :_reduce_none, - 1, 215, :_reduce_none, - 1, 215, :_reduce_none, - 1, 215, :_reduce_none, - 1, 215, :_reduce_none, - 1, 215, :_reduce_none, - 1, 215, :_reduce_none, - 1, 215, :_reduce_none, - 1, 215, :_reduce_none, - 3, 183, :_reduce_201, - 3, 183, :_reduce_202, - 6, 183, :_reduce_203, - 5, 183, :_reduce_204, - 5, 183, :_reduce_205, - 5, 183, :_reduce_206, - 5, 183, :_reduce_207, - 4, 183, :_reduce_208, - 3, 183, :_reduce_209, - 3, 183, :_reduce_210, - 3, 183, :_reduce_211, - 2, 183, :_reduce_212, - 2, 183, :_reduce_213, - 2, 183, :_reduce_214, - 2, 183, :_reduce_215, - 3, 183, :_reduce_216, - 3, 183, :_reduce_217, - 3, 183, :_reduce_218, - 3, 183, :_reduce_219, - 3, 183, :_reduce_220, - 3, 183, :_reduce_221, - 4, 183, :_reduce_222, - 2, 183, :_reduce_223, - 2, 183, :_reduce_224, - 3, 183, :_reduce_225, - 3, 183, :_reduce_226, - 3, 183, :_reduce_227, - 3, 183, :_reduce_228, - 1, 183, :_reduce_none, - 3, 183, :_reduce_230, - 3, 183, :_reduce_231, - 3, 183, :_reduce_232, - 3, 183, :_reduce_233, - 3, 183, :_reduce_234, - 2, 183, :_reduce_235, - 2, 183, :_reduce_236, - 3, 183, :_reduce_237, - 3, 183, :_reduce_238, - 3, 183, :_reduce_239, - 3, 183, :_reduce_240, - 3, 183, :_reduce_241, - 6, 183, :_reduce_242, - 1, 183, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 3, 220, :_reduce_248, - 3, 220, :_reduce_249, - 1, 223, :_reduce_none, - 1, 224, :_reduce_none, - 2, 224, :_reduce_none, - 4, 224, :_reduce_253, - 2, 224, :_reduce_254, - 1, 218, :_reduce_none, - 3, 218, :_reduce_256, - 3, 229, :_reduce_257, - 5, 229, :_reduce_258, - 3, 229, :_reduce_259, - 0, 231, :_reduce_260, - 1, 231, :_reduce_none, - 0, 178, :_reduce_262, - 1, 178, :_reduce_none, - 2, 178, :_reduce_none, - 4, 178, :_reduce_265, - 2, 178, :_reduce_266, - 1, 201, :_reduce_267, - 2, 201, :_reduce_268, - 2, 201, :_reduce_269, - 4, 201, :_reduce_270, - 1, 201, :_reduce_271, - 0, 234, :_reduce_272, - 2, 194, :_reduce_273, - 2, 233, :_reduce_274, - 2, 232, :_reduce_275, - 0, 232, :_reduce_276, - 1, 226, :_reduce_277, - 2, 226, :_reduce_278, - 3, 226, :_reduce_279, - 4, 226, :_reduce_280, - 1, 172, :_reduce_281, - 1, 172, :_reduce_none, - 3, 171, :_reduce_283, - 4, 171, :_reduce_284, - 2, 171, :_reduce_285, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_296, - 0, 260, :_reduce_297, - 4, 221, :_reduce_298, - 0, 261, :_reduce_299, - 4, 221, :_reduce_300, - 0, 262, :_reduce_301, - 4, 221, :_reduce_302, - 3, 221, :_reduce_303, - 3, 221, :_reduce_304, - 2, 221, :_reduce_305, - 3, 221, :_reduce_306, - 3, 221, :_reduce_307, - 1, 221, :_reduce_308, - 4, 221, :_reduce_309, - 3, 221, :_reduce_310, - 1, 221, :_reduce_311, - 5, 221, :_reduce_312, - 4, 221, :_reduce_313, - 3, 221, :_reduce_314, - 2, 221, :_reduce_315, - 1, 221, :_reduce_none, - 2, 221, :_reduce_317, - 0, 263, :_reduce_318, - 3, 221, :_reduce_319, - 6, 221, :_reduce_320, - 6, 221, :_reduce_321, - 4, 221, :_reduce_322, - 4, 221, :_reduce_323, - 5, 221, :_reduce_324, - 4, 221, :_reduce_325, - 5, 221, :_reduce_326, - 6, 221, :_reduce_327, - 0, 264, :_reduce_328, - 6, 221, :_reduce_329, - 0, 265, :_reduce_330, - 7, 221, :_reduce_331, - 0, 266, :_reduce_332, - 5, 221, :_reduce_333, - 0, 267, :_reduce_334, - 6, 221, :_reduce_335, - 0, 268, :_reduce_336, - 0, 269, :_reduce_337, - 9, 221, :_reduce_338, - 1, 221, :_reduce_339, - 1, 221, :_reduce_340, - 1, 221, :_reduce_341, - 1, 221, :_reduce_342, - 1, 177, :_reduce_none, - 1, 253, :_reduce_344, - 1, 256, :_reduce_345, - 1, 257, :_reduce_346, - 1, 200, :_reduce_347, - 1, 248, :_reduce_none, - 1, 248, :_reduce_none, - 2, 248, :_reduce_350, - 1, 187, :_reduce_none, - 1, 187, :_reduce_none, - 1, 249, :_reduce_none, - 5, 249, :_reduce_354, - 1, 160, :_reduce_none, - 2, 160, :_reduce_356, - 1, 252, :_reduce_none, - 1, 252, :_reduce_none, - 1, 270, :_reduce_359, - 3, 270, :_reduce_360, - 1, 273, :_reduce_361, - 3, 273, :_reduce_362, - 1, 272, :_reduce_none, - 3, 272, :_reduce_364, - 5, 272, :_reduce_365, - 1, 272, :_reduce_366, - 3, 272, :_reduce_367, - 2, 274, :_reduce_368, - 1, 274, :_reduce_369, - 4, 275, :_reduce_370, - 2, 275, :_reduce_371, - 2, 275, :_reduce_372, - 2, 275, :_reduce_373, - 1, 275, :_reduce_374, - 2, 281, :_reduce_375, - 0, 281, :_reduce_376, - 6, 282, :_reduce_377, - 8, 282, :_reduce_378, - 4, 282, :_reduce_379, - 6, 282, :_reduce_380, - 4, 282, :_reduce_381, - 2, 282, :_reduce_none, - 6, 282, :_reduce_383, - 2, 282, :_reduce_384, - 4, 282, :_reduce_385, - 6, 282, :_reduce_386, - 2, 282, :_reduce_387, - 4, 282, :_reduce_388, - 2, 282, :_reduce_389, - 4, 282, :_reduce_390, - 1, 282, :_reduce_none, - 0, 286, :_reduce_392, - 1, 286, :_reduce_393, - 3, 287, :_reduce_394, - 4, 287, :_reduce_395, - 1, 288, :_reduce_396, - 4, 288, :_reduce_397, - 1, 289, :_reduce_398, - 3, 289, :_reduce_399, - 1, 290, :_reduce_400, - 1, 290, :_reduce_none, - 0, 294, :_reduce_402, - 0, 295, :_reduce_403, - 4, 247, :_reduce_404, - 4, 292, :_reduce_405, - 1, 292, :_reduce_406, - 0, 298, :_reduce_407, - 4, 293, :_reduce_408, - 0, 299, :_reduce_409, - 4, 293, :_reduce_410, - 0, 301, :_reduce_411, - 4, 297, :_reduce_412, - 2, 191, :_reduce_413, - 4, 191, :_reduce_414, - 5, 191, :_reduce_415, - 5, 191, :_reduce_416, - 2, 246, :_reduce_417, - 4, 246, :_reduce_418, - 4, 246, :_reduce_419, - 3, 246, :_reduce_420, - 3, 246, :_reduce_421, - 3, 246, :_reduce_422, - 2, 246, :_reduce_423, - 1, 246, :_reduce_424, - 4, 246, :_reduce_425, - 0, 303, :_reduce_426, - 4, 245, :_reduce_427, - 0, 304, :_reduce_428, - 4, 245, :_reduce_429, - 0, 305, :_reduce_430, - 3, 196, :_reduce_431, - 0, 306, :_reduce_432, - 0, 307, :_reduce_433, - 4, 300, :_reduce_434, - 5, 250, :_reduce_435, - 1, 308, :_reduce_436, - 1, 308, :_reduce_none, - 0, 311, :_reduce_438, - 0, 312, :_reduce_439, - 7, 251, :_reduce_440, - 1, 310, :_reduce_441, - 1, 310, :_reduce_none, - 1, 309, :_reduce_443, - 3, 309, :_reduce_444, - 3, 309, :_reduce_445, - 1, 313, :_reduce_none, - 2, 313, :_reduce_447, - 3, 313, :_reduce_448, - 1, 313, :_reduce_449, - 1, 313, :_reduce_450, - 1, 184, :_reduce_none, - 3, 317, :_reduce_452, - 1, 317, :_reduce_none, - 3, 319, :_reduce_454, - 1, 319, :_reduce_none, - 1, 321, :_reduce_456, - 1, 322, :_reduce_457, - 1, 320, :_reduce_none, - 4, 320, :_reduce_459, - 4, 320, :_reduce_460, - 3, 320, :_reduce_461, - 4, 320, :_reduce_462, - 4, 320, :_reduce_463, - 3, 320, :_reduce_464, - 0, 326, :_reduce_465, - 4, 320, :_reduce_466, - 2, 320, :_reduce_467, - 0, 327, :_reduce_468, - 4, 320, :_reduce_469, - 2, 320, :_reduce_470, - 0, 328, :_reduce_471, - 4, 320, :_reduce_472, - 1, 314, :_reduce_473, - 1, 314, :_reduce_474, - 2, 314, :_reduce_475, - 3, 314, :_reduce_476, - 5, 314, :_reduce_477, - 2, 314, :_reduce_478, - 4, 314, :_reduce_479, - 1, 314, :_reduce_none, - 2, 329, :_reduce_481, - 3, 329, :_reduce_482, - 2, 315, :_reduce_483, - 4, 315, :_reduce_484, - 1, 315, :_reduce_485, - 3, 315, :_reduce_486, - 1, 331, :_reduce_487, - 3, 331, :_reduce_488, - 1, 330, :_reduce_none, - 3, 316, :_reduce_490, - 1, 316, :_reduce_491, - 2, 316, :_reduce_492, - 1, 316, :_reduce_493, - 3, 316, :_reduce_494, - 1, 316, :_reduce_495, - 1, 332, :_reduce_496, - 3, 332, :_reduce_497, - 2, 335, :_reduce_498, - 1, 335, :_reduce_499, - 1, 336, :_reduce_500, - 3, 336, :_reduce_501, - 2, 333, :_reduce_502, - 1, 333, :_reduce_503, - 2, 334, :_reduce_504, - 1, 323, :_reduce_none, - 3, 323, :_reduce_506, - 3, 323, :_reduce_507, - 2, 323, :_reduce_508, - 2, 323, :_reduce_509, - 1, 323, :_reduce_none, - 1, 323, :_reduce_none, - 1, 323, :_reduce_none, - 2, 323, :_reduce_513, - 2, 323, :_reduce_514, - 1, 339, :_reduce_none, - 1, 339, :_reduce_none, - 1, 339, :_reduce_none, - 1, 339, :_reduce_none, - 1, 339, :_reduce_none, - 1, 339, :_reduce_none, - 1, 339, :_reduce_none, - 1, 339, :_reduce_none, - 1, 339, :_reduce_523, - 0, 341, :_reduce_524, - 3, 339, :_reduce_525, - 1, 318, :_reduce_526, - 2, 340, :_reduce_527, - 2, 324, :_reduce_528, - 3, 324, :_reduce_529, - 1, 324, :_reduce_530, - 6, 159, :_reduce_531, - 0, 159, :_reduce_532, - 1, 342, :_reduce_533, - 1, 342, :_reduce_none, - 1, 342, :_reduce_none, - 2, 343, :_reduce_536, - 1, 343, :_reduce_none, - 2, 161, :_reduce_538, - 1, 161, :_reduce_none, - 1, 235, :_reduce_none, - 1, 235, :_reduce_none, - 1, 236, :_reduce_542, - 1, 345, :_reduce_543, - 2, 345, :_reduce_544, - 3, 346, :_reduce_545, - 1, 346, :_reduce_546, - 1, 346, :_reduce_547, - 3, 237, :_reduce_548, - 4, 238, :_reduce_549, - 3, 239, :_reduce_550, - 0, 349, :_reduce_551, - 3, 349, :_reduce_552, - 1, 350, :_reduce_553, - 2, 350, :_reduce_554, - 3, 241, :_reduce_555, - 0, 352, :_reduce_556, - 3, 352, :_reduce_557, - 3, 240, :_reduce_558, - 3, 242, :_reduce_559, - 0, 353, :_reduce_560, - 3, 353, :_reduce_561, - 0, 354, :_reduce_562, - 3, 354, :_reduce_563, - 0, 337, :_reduce_564, - 2, 337, :_reduce_565, - 0, 347, :_reduce_566, - 2, 347, :_reduce_567, - 0, 348, :_reduce_568, - 2, 348, :_reduce_569, - 1, 351, :_reduce_570, - 2, 351, :_reduce_571, - 0, 356, :_reduce_572, - 4, 351, :_reduce_573, - 1, 355, :_reduce_574, - 1, 355, :_reduce_575, - 1, 355, :_reduce_576, - 1, 355, :_reduce_none, - 1, 216, :_reduce_none, - 1, 216, :_reduce_none, - 1, 357, :_reduce_580, - 3, 358, :_reduce_581, - 1, 344, :_reduce_582, - 2, 344, :_reduce_583, - 1, 219, :_reduce_584, - 1, 219, :_reduce_585, - 1, 219, :_reduce_586, - 1, 219, :_reduce_587, - 1, 209, :_reduce_588, - 1, 209, :_reduce_589, - 1, 209, :_reduce_590, - 1, 209, :_reduce_591, - 1, 209, :_reduce_592, - 1, 210, :_reduce_593, - 1, 210, :_reduce_594, - 1, 210, :_reduce_595, - 1, 210, :_reduce_596, - 1, 210, :_reduce_597, - 1, 210, :_reduce_598, - 1, 210, :_reduce_599, - 1, 243, :_reduce_600, - 1, 243, :_reduce_601, - 1, 176, :_reduce_602, - 1, 176, :_reduce_603, - 1, 181, :_reduce_604, - 1, 181, :_reduce_605, - 0, 359, :_reduce_606, - 4, 254, :_reduce_607, - 0, 254, :_reduce_608, - 3, 258, :_reduce_609, - 5, 258, :_reduce_610, - 3, 258, :_reduce_611, - 0, 361, :_reduce_612, - 3, 258, :_reduce_613, - 4, 360, :_reduce_614, - 2, 360, :_reduce_615, - 2, 360, :_reduce_616, - 2, 360, :_reduce_617, - 1, 360, :_reduce_618, - 2, 363, :_reduce_619, - 0, 363, :_reduce_620, - 6, 296, :_reduce_621, - 8, 296, :_reduce_622, - 4, 296, :_reduce_623, - 6, 296, :_reduce_624, - 4, 296, :_reduce_625, - 6, 296, :_reduce_626, - 2, 296, :_reduce_627, - 4, 296, :_reduce_628, - 6, 296, :_reduce_629, - 2, 296, :_reduce_630, - 4, 296, :_reduce_631, - 2, 296, :_reduce_632, - 4, 296, :_reduce_633, - 1, 296, :_reduce_634, - 0, 296, :_reduce_635, - 1, 230, :_reduce_636, - 1, 291, :_reduce_637, - 1, 291, :_reduce_638, - 1, 291, :_reduce_639, - 1, 291, :_reduce_640, - 1, 271, :_reduce_none, - 1, 271, :_reduce_642, - 1, 365, :_reduce_643, - 1, 366, :_reduce_644, - 3, 366, :_reduce_645, - 1, 283, :_reduce_646, - 3, 283, :_reduce_647, - 1, 367, :_reduce_648, - 2, 368, :_reduce_649, - 1, 368, :_reduce_650, - 2, 369, :_reduce_651, - 1, 369, :_reduce_652, - 1, 276, :_reduce_653, - 3, 276, :_reduce_654, - 1, 362, :_reduce_655, - 3, 362, :_reduce_656, - 1, 338, :_reduce_none, - 1, 338, :_reduce_none, - 2, 279, :_reduce_659, - 2, 277, :_reduce_660, - 1, 277, :_reduce_661, - 3, 370, :_reduce_662, - 3, 371, :_reduce_663, - 1, 284, :_reduce_664, - 3, 284, :_reduce_665, - 1, 364, :_reduce_666, - 3, 364, :_reduce_667, - 1, 372, :_reduce_none, - 1, 372, :_reduce_none, - 2, 285, :_reduce_670, - 1, 285, :_reduce_671, - 1, 373, :_reduce_none, - 1, 373, :_reduce_none, - 2, 280, :_reduce_674, - 2, 278, :_reduce_675, - 0, 278, :_reduce_676, - 1, 259, :_reduce_none, - 3, 259, :_reduce_678, - 0, 244, :_reduce_679, - 2, 244, :_reduce_none, - 1, 228, :_reduce_681, - 3, 228, :_reduce_682, - 3, 374, :_reduce_683, - 2, 374, :_reduce_684, - 4, 374, :_reduce_685, - 2, 374, :_reduce_686, - 1, 199, :_reduce_none, - 1, 199, :_reduce_none, - 1, 199, :_reduce_none, - 1, 193, :_reduce_none, - 1, 193, :_reduce_none, - 1, 193, :_reduce_none, - 1, 193, :_reduce_none, - 1, 302, :_reduce_none, - 1, 302, :_reduce_none, - 1, 302, :_reduce_none, - 1, 192, :_reduce_none, - 1, 192, :_reduce_none, - 1, 180, :_reduce_699, - 1, 180, :_reduce_700, - 0, 152, :_reduce_none, - 1, 152, :_reduce_none, - 0, 182, :_reduce_none, - 1, 182, :_reduce_none, - 2, 204, :_reduce_705, - 2, 179, :_reduce_706, - 2, 325, :_reduce_707, - 0, 227, :_reduce_none, - 1, 227, :_reduce_none, - 1, 227, :_reduce_none, - 1, 255, :_reduce_711, - 1, 255, :_reduce_none, - 1, 154, :_reduce_none, - 2, 154, :_reduce_none, - 0, 225, :_reduce_715 ] - -racc_reduce_n = 716 - -racc_shift_n = 1194 - -racc_token_table = { - false => 0, - :error => 1, - :kCLASS => 2, - :kMODULE => 3, - :kDEF => 4, - :kUNDEF => 5, - :kBEGIN => 6, - :kRESCUE => 7, - :kENSURE => 8, - :kEND => 9, - :kIF => 10, - :kUNLESS => 11, - :kTHEN => 12, - :kELSIF => 13, - :kELSE => 14, - :kCASE => 15, - :kWHEN => 16, - :kWHILE => 17, - :kUNTIL => 18, - :kFOR => 19, - :kBREAK => 20, - :kNEXT => 21, - :kREDO => 22, - :kRETRY => 23, - :kIN => 24, - :kDO => 25, - :kDO_COND => 26, - :kDO_BLOCK => 27, - :kDO_LAMBDA => 28, - :kRETURN => 29, - :kYIELD => 30, - :kSUPER => 31, - :kSELF => 32, - :kNIL => 33, - :kTRUE => 34, - :kFALSE => 35, - :kAND => 36, - :kOR => 37, - :kNOT => 38, - :kIF_MOD => 39, - :kUNLESS_MOD => 40, - :kWHILE_MOD => 41, - :kUNTIL_MOD => 42, - :kRESCUE_MOD => 43, - :kALIAS => 44, - :kDEFINED => 45, - :klBEGIN => 46, - :klEND => 47, - :k__LINE__ => 48, - :k__FILE__ => 49, - :k__ENCODING__ => 50, - :tIDENTIFIER => 51, - :tFID => 52, - :tGVAR => 53, - :tIVAR => 54, - :tCONSTANT => 55, - :tLABEL => 56, - :tCVAR => 57, - :tNTH_REF => 58, - :tBACK_REF => 59, - :tSTRING_CONTENT => 60, - :tINTEGER => 61, - :tFLOAT => 62, - :tUPLUS => 63, - :tUMINUS => 64, - :tUNARY_NUM => 65, - :tPOW => 66, - :tCMP => 67, - :tEQ => 68, - :tEQQ => 69, - :tNEQ => 70, - :tGEQ => 71, - :tLEQ => 72, - :tANDOP => 73, - :tOROP => 74, - :tMATCH => 75, - :tNMATCH => 76, - :tDOT => 77, - :tDOT2 => 78, - :tDOT3 => 79, - :tAREF => 80, - :tASET => 81, - :tLSHFT => 82, - :tRSHFT => 83, - :tCOLON2 => 84, - :tCOLON3 => 85, - :tOP_ASGN => 86, - :tASSOC => 87, - :tLPAREN => 88, - :tLPAREN2 => 89, - :tRPAREN => 90, - :tLPAREN_ARG => 91, - :tLBRACK => 92, - :tLBRACK2 => 93, - :tRBRACK => 94, - :tLBRACE => 95, - :tLBRACE_ARG => 96, - :tSTAR => 97, - :tSTAR2 => 98, - :tAMPER => 99, - :tAMPER2 => 100, - :tTILDE => 101, - :tPERCENT => 102, - :tDIVIDE => 103, - :tDSTAR => 104, - :tPLUS => 105, - :tMINUS => 106, - :tLT => 107, - :tGT => 108, - :tPIPE => 109, - :tBANG => 110, - :tCARET => 111, - :tLCURLY => 112, - :tRCURLY => 113, - :tBACK_REF2 => 114, - :tSYMBEG => 115, - :tSTRING_BEG => 116, - :tXSTRING_BEG => 117, - :tREGEXP_BEG => 118, - :tREGEXP_OPT => 119, - :tWORDS_BEG => 120, - :tQWORDS_BEG => 121, - :tSYMBOLS_BEG => 122, - :tQSYMBOLS_BEG => 123, - :tSTRING_DBEG => 124, - :tSTRING_DVAR => 125, - :tSTRING_END => 126, - :tSTRING_DEND => 127, - :tSTRING => 128, - :tSYMBOL => 129, - :tNL => 130, - :tEH => 131, - :tCOLON => 132, - :tCOMMA => 133, - :tSPACE => 134, - :tSEMI => 135, - :tLAMBDA => 136, - :tLAMBEG => 137, - :tCHARACTER => 138, - :tRATIONAL => 139, - :tIMAGINARY => 140, - :tLABEL_END => 141, - :tANDDOT => 142, - :tBDOT2 => 143, - :tBDOT3 => 144, - :tEQL => 145, - :tLOWEST => 146 } - -racc_nt_base = 147 - -racc_use_result_var = true - -Racc_arg = [ - racc_action_table, - racc_action_check, - racc_action_default, - racc_action_pointer, - racc_goto_table, - racc_goto_check, - racc_goto_default, - racc_goto_pointer, - racc_nt_base, - racc_reduce_table, - racc_token_table, - racc_shift_n, - racc_reduce_n, - racc_use_result_var ] -Ractor.make_shareable(Racc_arg) if defined?(Ractor) - -Racc_token_to_s_table = [ - "$end", - "error", - "kCLASS", - "kMODULE", - "kDEF", - "kUNDEF", - "kBEGIN", - "kRESCUE", - "kENSURE", - "kEND", - "kIF", - "kUNLESS", - "kTHEN", - "kELSIF", - "kELSE", - "kCASE", - "kWHEN", - "kWHILE", - "kUNTIL", - "kFOR", - "kBREAK", - "kNEXT", - "kREDO", - "kRETRY", - "kIN", - "kDO", - "kDO_COND", - "kDO_BLOCK", - "kDO_LAMBDA", - "kRETURN", - "kYIELD", - "kSUPER", - "kSELF", - "kNIL", - "kTRUE", - "kFALSE", - "kAND", - "kOR", - "kNOT", - "kIF_MOD", - "kUNLESS_MOD", - "kWHILE_MOD", - "kUNTIL_MOD", - "kRESCUE_MOD", - "kALIAS", - "kDEFINED", - "klBEGIN", - "klEND", - "k__LINE__", - "k__FILE__", - "k__ENCODING__", - "tIDENTIFIER", - "tFID", - "tGVAR", - "tIVAR", - "tCONSTANT", - "tLABEL", - "tCVAR", - "tNTH_REF", - "tBACK_REF", - "tSTRING_CONTENT", - "tINTEGER", - "tFLOAT", - "tUPLUS", - "tUMINUS", - "tUNARY_NUM", - "tPOW", - "tCMP", - "tEQ", - "tEQQ", - "tNEQ", - "tGEQ", - "tLEQ", - "tANDOP", - "tOROP", - "tMATCH", - "tNMATCH", - "tDOT", - "tDOT2", - "tDOT3", - "tAREF", - "tASET", - "tLSHFT", - "tRSHFT", - "tCOLON2", - "tCOLON3", - "tOP_ASGN", - "tASSOC", - "tLPAREN", - "tLPAREN2", - "tRPAREN", - "tLPAREN_ARG", - "tLBRACK", - "tLBRACK2", - "tRBRACK", - "tLBRACE", - "tLBRACE_ARG", - "tSTAR", - "tSTAR2", - "tAMPER", - "tAMPER2", - "tTILDE", - "tPERCENT", - "tDIVIDE", - "tDSTAR", - "tPLUS", - "tMINUS", - "tLT", - "tGT", - "tPIPE", - "tBANG", - "tCARET", - "tLCURLY", - "tRCURLY", - "tBACK_REF2", - "tSYMBEG", - "tSTRING_BEG", - "tXSTRING_BEG", - "tREGEXP_BEG", - "tREGEXP_OPT", - "tWORDS_BEG", - "tQWORDS_BEG", - "tSYMBOLS_BEG", - "tQSYMBOLS_BEG", - "tSTRING_DBEG", - "tSTRING_DVAR", - "tSTRING_END", - "tSTRING_DEND", - "tSTRING", - "tSYMBOL", - "tNL", - "tEH", - "tCOLON", - "tCOMMA", - "tSPACE", - "tSEMI", - "tLAMBDA", - "tLAMBEG", - "tCHARACTER", - "tRATIONAL", - "tIMAGINARY", - "tLABEL_END", - "tANDDOT", - "tBDOT2", - "tBDOT3", - "tEQL", - "tLOWEST", - "$start", - "program", - "top_compstmt", - "@1", - "top_stmts", - "opt_terms", - "top_stmt", - "terms", - "stmt", - "begin_block", - "bodystmt", - "compstmt", - "opt_rescue", - "opt_else", - "opt_ensure", - "stmts", - "stmt_or_begin", - "fitem", - "undef_list", - "expr_value", - "command_asgn", - "mlhs", - "command_call", - "lhs", - "mrhs", - "mrhs_arg", - "expr", - "@2", - "command_rhs", - "var_lhs", - "primary_value", - "opt_call_args", - "rbracket", - "call_op", - "backref", - "opt_nl", - "arg", - "p_expr", - "@3", - "expr_value_do", - "do", - "@4", - "command", - "block_command", - "block_call", - "dot_or_colon", - "operation2", - "command_args", - "cmd_brace_block", - "brace_body", - "fcall", - "@5", - "operation", - "k_return", - "call_args", - "mlhs_basic", - "mlhs_inner", - "rparen", - "mlhs_head", - "mlhs_item", - "mlhs_node", - "mlhs_post", - "user_variable", - "keyword_variable", - "cname", - "cpath", - "fname", - "op", - "reswords", - "symbol", - "@6", - "arg_rhs", - "simple_numeric", - "rel_expr", - "primary", - "relop", - "arg_value", - "aref_args", - "none", - "args", - "trailer", - "assocs", - "paren_args", - "args_forward", - "opt_paren_args", - "opt_block_arg", - "block_arg", - "@7", - "literal", - "strings", - "xstring", - "regexp", - "words", - "qwords", - "symbols", - "qsymbols", - "var_ref", - "assoc_list", - "brace_block", - "method_call", - "lambda", - "then", - "if_tail", - "case_body", - "p_case_body", - "for_var", - "k_class", - "superclass", - "term", - "k_module", - "k_def", - "f_arglist", - "singleton", - "@8", - "@9", - "@10", - "@11", - "@12", - "@13", - "@14", - "@15", - "@16", - "@17", - "f_marg", - "f_norm_arg", - "f_margs", - "f_marg_list", - "f_rest_marg", - "block_args_tail", - "f_block_kwarg", - "f_kwrest", - "opt_f_block_arg", - "f_no_kwarg", - "f_block_arg", - "opt_block_args_tail", - "block_param", - "f_arg", - "f_block_optarg", - "f_rest_arg", - "opt_block_param", - "block_param_def", - "opt_bv_decl", - "bv_decls", - "bvar", - "f_bad_arg", - "f_larglist", - "lambda_body", - "@18", - "@19", - "f_args", - "do_block", - "@20", - "@21", - "do_body", - "@22", - "operation3", - "@23", - "@24", - "@25", - "@26", - "@27", - "cases", - "p_top_expr", - "p_cases", - "@28", - "@29", - "p_top_expr_body", - "p_args", - "p_args_tail", - "p_kwargs", - "p_as", - "p_variable", - "p_alt", - "p_expr_basic", - "p_lparen", - "p_lbracket", - "p_value", - "p_const", - "rbrace", - "@30", - "@31", - "@32", - "p_args_head", - "p_arg", - "p_args_post", - "p_kwarg", - "p_kwrest", - "p_kwnorest", - "p_kw", - "p_kw_label", - "string_contents", - "kwrest_mark", - "p_primitive", - "p_var_ref", - "@33", - "exc_list", - "exc_var", - "numeric", - "string", - "string1", - "xstring_contents", - "regexp_contents", - "word_list", - "word", - "string_content", - "symbol_list", - "qword_list", - "qsym_list", - "string_dvar", - "@34", - "ssym", - "dsym", - "@35", - "args_tail", - "@36", - "f_kwarg", - "opt_args_tail", - "f_optarg", - "f_arg_asgn", - "f_arg_item", - "f_label", - "f_kw", - "f_block_kw", - "f_opt", - "f_block_opt", - "restarg_mark", - "blkarg_mark", - "assoc" ] -Ractor.make_shareable(Racc_token_to_s_table) if defined?(Ractor) - -Racc_debug_parser = false - -##### State transition tables end ##### - -# reduce 0 omitted - -def _reduce_1(val, _values, result) - @current_arg_stack.push(nil) - @max_numparam_stack.push(static: false) - - result -end - -def _reduce_2(val, _values, result) - result = val[1] - - @current_arg_stack.pop - @max_numparam_stack.pop - - result -end - -def _reduce_3(val, _values, result) - result = @builder.compstmt(val[0]) - - result -end - -def _reduce_4(val, _values, result) - result = [] - - result -end - -def _reduce_5(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_6(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_7(val, _values, result) - result = [ val[1] ] - - result -end - -# reduce 8 omitted - -def _reduce_9(val, _values, result) - result = @builder.preexe(val[0], *val[1]) - - result -end - -def _reduce_10(val, _values, result) - result = val - - result -end - -def _reduce_11(val, _values, result) - rescue_bodies = val[1] - else_t, else_ = val[2] - ensure_t, ensure_ = val[3] - - if rescue_bodies.empty? && !else_t.nil? - diagnostic :error, :useless_else, nil, else_t - end - - result = @builder.begin_body(val[0], - rescue_bodies, - else_t, else_, - ensure_t, ensure_) - - result -end - -def _reduce_12(val, _values, result) - result = @builder.compstmt(val[0]) - - result -end - -def _reduce_13(val, _values, result) - result = [] - - result -end - -def _reduce_14(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_15(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_16(val, _values, result) - result = [ val[1] ] - - result -end - -# reduce 17 omitted - -def _reduce_18(val, _values, result) - diagnostic :error, :begin_in_method, nil, val[0] - - result -end - -def _reduce_19(val, _values, result) - @lexer.state = :expr_fname - - result -end - -def _reduce_20(val, _values, result) - result = @builder.alias(val[0], val[1], val[3]) - - result -end - -def _reduce_21(val, _values, result) - result = @builder.alias(val[0], - @builder.gvar(val[1]), - @builder.gvar(val[2])) - - result -end - -def _reduce_22(val, _values, result) - result = @builder.alias(val[0], - @builder.gvar(val[1]), - @builder.back_ref(val[2])) - - result -end - -def _reduce_23(val, _values, result) - diagnostic :error, :nth_ref_alias, nil, val[2] - - result -end - -def _reduce_24(val, _values, result) - result = @builder.undef_method(val[0], val[1]) - - result -end - -def _reduce_25(val, _values, result) - result = @builder.condition_mod(val[0], nil, - val[1], val[2]) - - result -end - -def _reduce_26(val, _values, result) - result = @builder.condition_mod(nil, val[0], - val[1], val[2]) - - result -end - -def _reduce_27(val, _values, result) - result = @builder.loop_mod(:while, val[0], val[1], val[2]) - - result -end - -def _reduce_28(val, _values, result) - result = @builder.loop_mod(:until, val[0], val[1], val[2]) - - result -end - -def _reduce_29(val, _values, result) - rescue_body = @builder.rescue_body(val[1], - nil, nil, nil, - nil, val[2]) - - result = @builder.begin_body(val[0], [ rescue_body ]) - - result -end - -def _reduce_30(val, _values, result) - result = @builder.postexe(val[0], val[1], val[2], val[3]) - - result -end - -# reduce 31 omitted - -def _reduce_32(val, _values, result) - result = @builder.multi_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_33(val, _values, result) - result = @builder.assign(val[0], val[1], - @builder.array(nil, val[2], nil)) - - result -end - -def _reduce_34(val, _values, result) - rescue_body = @builder.rescue_body(val[3], - nil, nil, nil, - nil, val[4]) - begin_body = @builder.begin_body(val[2], [ rescue_body ]) - - result = @builder.multi_assign(val[0], val[1], begin_body) - - result -end - -def _reduce_35(val, _values, result) - result = @builder.multi_assign(val[0], val[1], val[2]) - - result -end - -# reduce 36 omitted - -def _reduce_37(val, _values, result) - result = @builder.assign(val[0], val[1], val[2]) - - result -end - -def _reduce_38(val, _values, result) - result = @builder.op_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_39(val, _values, result) - result = @builder.op_assign( - @builder.index( - val[0], val[1], val[2], val[3]), - val[4], val[5]) - - result -end - -def _reduce_40(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_41(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_42(val, _values, result) - const = @builder.const_op_assignable( - @builder.const_fetch(val[0], val[1], val[2])) - result = @builder.op_assign(const, val[3], val[4]) - - result -end - -def _reduce_43(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_44(val, _values, result) - @builder.op_assign(val[0], val[1], val[2]) - - result -end - -# reduce 45 omitted - -def _reduce_46(val, _values, result) - rescue_body = @builder.rescue_body(val[1], - nil, nil, nil, - nil, val[2]) - - result = @builder.begin_body(val[0], [ rescue_body ]) - - result -end - -# reduce 47 omitted - -# reduce 48 omitted - -def _reduce_49(val, _values, result) - result = @builder.logical_op(:and, val[0], val[1], val[2]) - - result -end - -def _reduce_50(val, _values, result) - result = @builder.logical_op(:or, val[0], val[1], val[2]) - - result -end - -def _reduce_51(val, _values, result) - result = @builder.not_op(val[0], nil, val[2], nil) - - result -end - -def _reduce_52(val, _values, result) - result = @builder.not_op(val[0], nil, val[1], nil) - - result -end - -def _reduce_53(val, _values, result) - @lexer.state = :expr_beg - @lexer.command_start = false - @pattern_variables.push - - result = @context.in_kwarg - @context.in_kwarg = true - - result -end - -def _reduce_54(val, _values, result) - @pattern_variables.pop - @context.in_kwarg = val[2] - if @builder.class.emit_match_pattern - result = @builder.match_pattern(val[0], val[1], val[3]) - else - result = @builder.in_match(val[0], val[1], val[3]) - end - - result -end - -# reduce 55 omitted - -# reduce 56 omitted - -def _reduce_57(val, _values, result) - @lexer.cond.push(true) - - result -end - -def _reduce_58(val, _values, result) - @lexer.cond.pop - result = [ val[1], val[2] ] - - result -end - -# reduce 59 omitted - -# reduce 60 omitted - -# reduce 61 omitted - -def _reduce_62(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - result -end - -def _reduce_63(val, _values, result) - result = @context.dup - @context.in_block = true - - result -end - -def _reduce_64(val, _values, result) - result = [ val[0], *val[2], val[3] ] - @context.in_block = val[1].in_block - - result -end - -# reduce 65 omitted - -def _reduce_66(val, _values, result) - result = @builder.call_method(nil, nil, val[0], - nil, val[1], nil) - - result -end - -def _reduce_67(val, _values, result) - method_call = @builder.call_method(nil, nil, val[0], - nil, val[1], nil) - - begin_t, args, body, end_t = val[2] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_68(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - result -end - -def _reduce_69(val, _values, result) - method_call = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - begin_t, args, body, end_t = val[4] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_70(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - result -end - -def _reduce_71(val, _values, result) - method_call = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - begin_t, args, body, end_t = val[4] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_72(val, _values, result) - result = @builder.keyword_cmd(:super, val[0], - nil, val[1], nil) - - result -end - -def _reduce_73(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0], - nil, val[1], nil) - - result -end - -def _reduce_74(val, _values, result) - result = @builder.keyword_cmd(:return, val[0], - nil, val[1], nil) - - result -end - -def _reduce_75(val, _values, result) - result = @builder.keyword_cmd(:break, val[0], - nil, val[1], nil) - - result -end - -def _reduce_76(val, _values, result) - result = @builder.keyword_cmd(:next, val[0], - nil, val[1], nil) - - result -end - -def _reduce_77(val, _values, result) - result = @builder.multi_lhs(nil, val[0], nil) - - result -end - -def _reduce_78(val, _values, result) - result = @builder.begin(val[0], val[1], val[2]) - - result -end - -def _reduce_79(val, _values, result) - result = @builder.multi_lhs(nil, val[0], nil) - - result -end - -def _reduce_80(val, _values, result) - result = @builder.multi_lhs(val[0], val[1], val[2]) - - result -end - -# reduce 81 omitted - -def _reduce_82(val, _values, result) - result = val[0]. - push(val[1]) - - result -end - -def _reduce_83(val, _values, result) - result = val[0]. - push(@builder.splat(val[1], val[2])) - - result -end - -def _reduce_84(val, _values, result) - result = val[0]. - push(@builder.splat(val[1], val[2])). - concat(val[4]) - - result -end - -def _reduce_85(val, _values, result) - result = val[0]. - push(@builder.splat(val[1])) - - result -end - -def _reduce_86(val, _values, result) - result = val[0]. - push(@builder.splat(val[1])). - concat(val[3]) - - result -end - -def _reduce_87(val, _values, result) - result = [ @builder.splat(val[0], val[1]) ] - - result -end - -def _reduce_88(val, _values, result) - result = [ @builder.splat(val[0], val[1]), - *val[3] ] - - result -end - -def _reduce_89(val, _values, result) - result = [ @builder.splat(val[0]) ] - - result -end - -def _reduce_90(val, _values, result) - result = [ @builder.splat(val[0]), - *val[2] ] - - result -end - -# reduce 91 omitted - -def _reduce_92(val, _values, result) - result = @builder.begin(val[0], val[1], val[2]) - - result -end - -def _reduce_93(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_94(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_95(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_96(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_97(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_98(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_99(val, _values, result) - result = @builder.index_asgn(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_100(val, _values, result) - if (val[1][0] == :anddot) - diagnostic :error, :csend_in_lhs_of_masgn, nil, val[1] - end - - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_101(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_102(val, _values, result) - if (val[1][0] == :anddot) - diagnostic :error, :csend_in_lhs_of_masgn, nil, val[1] - end - - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_103(val, _values, result) - result = @builder.assignable( - @builder.const_fetch(val[0], val[1], val[2])) - - result -end - -def _reduce_104(val, _values, result) - result = @builder.assignable( - @builder.const_global(val[0], val[1])) - - result -end - -def _reduce_105(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_106(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_107(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_108(val, _values, result) - result = @builder.index_asgn(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_109(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_110(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_111(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_112(val, _values, result) - result = @builder.assignable( - @builder.const_fetch(val[0], val[1], val[2])) - - result -end - -def _reduce_113(val, _values, result) - result = @builder.assignable( - @builder.const_global(val[0], val[1])) - - result -end - -def _reduce_114(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_115(val, _values, result) - diagnostic :error, :module_name_const, nil, val[0] - - result -end - -# reduce 116 omitted - -def _reduce_117(val, _values, result) - result = @builder.const_global(val[0], val[1]) - - result -end - -def _reduce_118(val, _values, result) - result = @builder.const(val[0]) - - result -end - -def _reduce_119(val, _values, result) - result = @builder.const_fetch(val[0], val[1], val[2]) - - result -end - -# reduce 120 omitted - -# reduce 121 omitted - -# reduce 122 omitted - -# reduce 123 omitted - -# reduce 124 omitted - -def _reduce_125(val, _values, result) - result = @builder.symbol_internal(val[0]) - - result -end - -# reduce 126 omitted - -def _reduce_127(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_128(val, _values, result) - @lexer.state = :expr_fname - - result -end - -def _reduce_129(val, _values, result) - result = val[0] << val[3] - - result -end - -# reduce 130 omitted - -# reduce 131 omitted - -# reduce 132 omitted - -# reduce 133 omitted - -# reduce 134 omitted - -# reduce 135 omitted - -# reduce 136 omitted - -# reduce 137 omitted - -# reduce 138 omitted - -# reduce 139 omitted - -# reduce 140 omitted - -# reduce 141 omitted - -# reduce 142 omitted - -# reduce 143 omitted - -# reduce 144 omitted - -# reduce 145 omitted - -# reduce 146 omitted - -# reduce 147 omitted - -# reduce 148 omitted - -# reduce 149 omitted - -# reduce 150 omitted - -# reduce 151 omitted - -# reduce 152 omitted - -# reduce 153 omitted - -# reduce 154 omitted - -# reduce 155 omitted - -# reduce 156 omitted - -# reduce 157 omitted - -# reduce 158 omitted - -# reduce 159 omitted - -# reduce 160 omitted - -# reduce 161 omitted - -# reduce 162 omitted - -# reduce 163 omitted - -# reduce 164 omitted - -# reduce 165 omitted - -# reduce 166 omitted - -# reduce 167 omitted - -# reduce 168 omitted - -# reduce 169 omitted - -# reduce 170 omitted - -# reduce 171 omitted - -# reduce 172 omitted - -# reduce 173 omitted - -# reduce 174 omitted - -# reduce 175 omitted - -# reduce 176 omitted - -# reduce 177 omitted - -# reduce 178 omitted - -# reduce 179 omitted - -# reduce 180 omitted - -# reduce 181 omitted - -# reduce 182 omitted - -# reduce 183 omitted - -# reduce 184 omitted - -# reduce 185 omitted - -# reduce 186 omitted - -# reduce 187 omitted - -# reduce 188 omitted - -# reduce 189 omitted - -# reduce 190 omitted - -# reduce 191 omitted - -# reduce 192 omitted - -# reduce 193 omitted - -# reduce 194 omitted - -# reduce 195 omitted - -# reduce 196 omitted - -# reduce 197 omitted - -# reduce 198 omitted - -# reduce 199 omitted - -# reduce 200 omitted - -def _reduce_201(val, _values, result) - result = @builder.assign(val[0], val[1], val[2]) - - result -end - -def _reduce_202(val, _values, result) - result = @builder.op_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_203(val, _values, result) - result = @builder.op_assign( - @builder.index( - val[0], val[1], val[2], val[3]), - val[4], val[5]) - - result -end - -def _reduce_204(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_205(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_206(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_207(val, _values, result) - const = @builder.const_op_assignable( - @builder.const_fetch(val[0], val[1], val[2])) - result = @builder.op_assign(const, val[3], val[4]) - - result -end - -def _reduce_208(val, _values, result) - const = @builder.const_op_assignable( - @builder.const_global(val[0], val[1])) - result = @builder.op_assign(const, val[2], val[3]) - - result -end - -def _reduce_209(val, _values, result) - result = @builder.op_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_210(val, _values, result) - result = @builder.range_inclusive(val[0], val[1], val[2]) - - result -end - -def _reduce_211(val, _values, result) - result = @builder.range_exclusive(val[0], val[1], val[2]) - - result -end - -def _reduce_212(val, _values, result) - result = @builder.range_inclusive(val[0], val[1], nil) - - result -end - -def _reduce_213(val, _values, result) - result = @builder.range_exclusive(val[0], val[1], nil) - - result -end - -def _reduce_214(val, _values, result) - result = @builder.range_inclusive(nil, val[0], val[1]) - - result -end - -def _reduce_215(val, _values, result) - result = @builder.range_exclusive(nil, val[0], val[1]) - - result -end - -def _reduce_216(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_217(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_218(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_219(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_220(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_221(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_222(val, _values, result) - result = @builder.unary_op(val[0], - @builder.binary_op( - val[1], val[2], val[3])) - - result -end - -def _reduce_223(val, _values, result) - result = @builder.unary_op(val[0], val[1]) - - result -end - -def _reduce_224(val, _values, result) - result = @builder.unary_op(val[0], val[1]) - - result -end - -def _reduce_225(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_226(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_227(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_228(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -# reduce 229 omitted - -def _reduce_230(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_231(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_232(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_233(val, _values, result) - result = @builder.match_op(val[0], val[1], val[2]) - - result -end - -def _reduce_234(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_235(val, _values, result) - result = @builder.not_op(val[0], nil, val[1], nil) - - result -end - -def _reduce_236(val, _values, result) - result = @builder.unary_op(val[0], val[1]) - - result -end - -def _reduce_237(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_238(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_239(val, _values, result) - result = @builder.logical_op(:and, val[0], val[1], val[2]) - - result -end - -def _reduce_240(val, _values, result) - result = @builder.logical_op(:or, val[0], val[1], val[2]) - - result -end - -def _reduce_241(val, _values, result) - result = @builder.keyword_cmd(:defined?, val[0], nil, [ val[2] ], nil) - - result -end - -def _reduce_242(val, _values, result) - result = @builder.ternary(val[0], val[1], - val[2], val[4], val[5]) - - result -end - -# reduce 243 omitted - -# reduce 244 omitted - -# reduce 245 omitted - -# reduce 246 omitted - -# reduce 247 omitted - -def _reduce_248(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_249(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -# reduce 250 omitted - -# reduce 251 omitted - -# reduce 252 omitted - -def _reduce_253(val, _values, result) - result = val[0] << @builder.associate(nil, val[2], nil) - - result -end - -def _reduce_254(val, _values, result) - result = [ @builder.associate(nil, val[0], nil) ] - - result -end - -# reduce 255 omitted - -def _reduce_256(val, _values, result) - rescue_body = @builder.rescue_body(val[1], - nil, nil, nil, - nil, val[2]) - - result = @builder.begin_body(val[0], [ rescue_body ]) - - result -end - -def _reduce_257(val, _values, result) - result = val - - result -end - -def _reduce_258(val, _values, result) - unless @static_env.declared_forward_args? - diagnostic :error, :unexpected_token, { :token => 'tBDOT3' } , val[3] - end - - result = [val[0], [*val[1], @builder.forwarded_args(val[3])], val[4]] - - result -end - -def _reduce_259(val, _values, result) - unless @static_env.declared_forward_args? - diagnostic :error, :unexpected_token, { :token => 'tBDOT3' } , val[1] - end - - result = [val[0], [@builder.forwarded_args(val[1])], val[2]] - - result -end - -def _reduce_260(val, _values, result) - result = [ nil, [], nil ] - - result -end - -# reduce 261 omitted - -def _reduce_262(val, _values, result) - result = [] - - result -end - -# reduce 263 omitted - -# reduce 264 omitted - -def _reduce_265(val, _values, result) - result = val[0] << @builder.associate(nil, val[2], nil) - - result -end - -def _reduce_266(val, _values, result) - result = [ @builder.associate(nil, val[0], nil) ] - - result -end - -def _reduce_267(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_268(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_269(val, _values, result) - result = [ @builder.associate(nil, val[0], nil) ] - result.concat(val[1]) - - result -end - -def _reduce_270(val, _values, result) - assocs = @builder.associate(nil, val[2], nil) - result = val[0] << assocs - result.concat(val[3]) - - result -end - -def _reduce_271(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_272(val, _values, result) - # When branch gets invoked by RACC's lookahead - # and command args start with '[' or '(' - # we need to put `true` to the cmdarg stack - # **before** `false` pushed by lexer - # m [], n - # ^ - # Right here we have cmdarg [...0] because - # lexer pushed it on '[' - # We need to modify cmdarg stack to [...10] - # - # For all other cases (like `m n` or `m n, []`) we simply put 1 to the stack - # and later lexer pushes corresponding bits on top of it. - last_token = @last_token[0] - lookahead = last_token == :tLBRACK || last_token == :tLPAREN_ARG - - if lookahead - top = @lexer.cmdarg.pop - @lexer.cmdarg.push(true) - @lexer.cmdarg.push(top) - else - @lexer.cmdarg.push(true) - end - - result -end - -def _reduce_273(val, _values, result) - # call_args can be followed by tLBRACE_ARG (that does cmdarg.push(0) in the lexer) - # but the push must be done after cmdarg.pop() in the parser. - # So this code does cmdarg.pop() to pop 0 pushed by tLBRACE_ARG, - # cmdarg.pop() to pop 1 pushed by command_args, - # and cmdarg.push(0) to restore back the flag set by tLBRACE_ARG. - last_token = @last_token[0] - lookahead = last_token == :tLBRACE_ARG - if lookahead - top = @lexer.cmdarg.pop - @lexer.cmdarg.pop - @lexer.cmdarg.push(top) - else - @lexer.cmdarg.pop - end - - result = val[1] - - result -end - -def _reduce_274(val, _values, result) - result = @builder.block_pass(val[0], val[1]) - - result -end - -def _reduce_275(val, _values, result) - result = [ val[1] ] - - result -end - -def _reduce_276(val, _values, result) - result = [] - - result -end - -def _reduce_277(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_278(val, _values, result) - result = [ @builder.splat(val[0], val[1]) ] - - result -end - -def _reduce_279(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_280(val, _values, result) - result = val[0] << @builder.splat(val[2], val[3]) - - result -end - -def _reduce_281(val, _values, result) - result = @builder.array(nil, val[0], nil) - - result -end - -# reduce 282 omitted - -def _reduce_283(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_284(val, _values, result) - result = val[0] << @builder.splat(val[2], val[3]) - - result -end - -def _reduce_285(val, _values, result) - result = [ @builder.splat(val[0], val[1]) ] - - result -end - -# reduce 286 omitted - -# reduce 287 omitted - -# reduce 288 omitted - -# reduce 289 omitted - -# reduce 290 omitted - -# reduce 291 omitted - -# reduce 292 omitted - -# reduce 293 omitted - -# reduce 294 omitted - -# reduce 295 omitted - -def _reduce_296(val, _values, result) - result = @builder.call_method(nil, nil, val[0]) - - result -end - -def _reduce_297(val, _values, result) - @lexer.cmdarg.push(false) - - result -end - -def _reduce_298(val, _values, result) - @lexer.cmdarg.pop - - result = @builder.begin_keyword(val[0], val[2], val[3]) - - result -end - -def _reduce_299(val, _values, result) - @lexer.state = :expr_endarg - - result -end - -def _reduce_300(val, _values, result) - result = @builder.begin(val[0], val[1], val[3]) - - result -end - -def _reduce_301(val, _values, result) - @lexer.state = :expr_endarg - - result -end - -def _reduce_302(val, _values, result) - result = @builder.begin(val[0], nil, val[3]) - - result -end - -def _reduce_303(val, _values, result) - result = @builder.begin(val[0], val[1], val[2]) - - result -end - -def _reduce_304(val, _values, result) - result = @builder.const_fetch(val[0], val[1], val[2]) - - result -end - -def _reduce_305(val, _values, result) - result = @builder.const_global(val[0], val[1]) - - result -end - -def _reduce_306(val, _values, result) - result = @builder.array(val[0], val[1], val[2]) - - result -end - -def _reduce_307(val, _values, result) - result = @builder.associate(val[0], val[1], val[2]) - - result -end - -def _reduce_308(val, _values, result) - result = @builder.keyword_cmd(:return, val[0]) - - result -end - -def _reduce_309(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_310(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0], val[1], [], val[2]) - - result -end - -def _reduce_311(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0]) - - result -end - -def _reduce_312(val, _values, result) - result = @builder.keyword_cmd(:defined?, val[0], - val[2], [ val[3] ], val[4]) - - result -end - -def _reduce_313(val, _values, result) - result = @builder.not_op(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_314(val, _values, result) - result = @builder.not_op(val[0], val[1], nil, val[2]) - - result -end - -def _reduce_315(val, _values, result) - method_call = @builder.call_method(nil, nil, val[0]) - - begin_t, args, body, end_t = val[1] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -# reduce 316 omitted - -def _reduce_317(val, _values, result) - begin_t, args, body, end_t = val[1] - result = @builder.block(val[0], - begin_t, args, body, end_t) - - result -end - -def _reduce_318(val, _values, result) - result = @context.dup - @context.in_lambda = true - - result -end - -def _reduce_319(val, _values, result) - lambda_call = @builder.call_lambda(val[0]) - - args, (begin_t, body, end_t) = val[2] - result = @builder.block(lambda_call, - begin_t, args, body, end_t) - - @context.in_lambda = val[1].in_lambda - - result -end - -def _reduce_320(val, _values, result) - else_t, else_ = val[4] - result = @builder.condition(val[0], val[1], val[2], - val[3], else_t, - else_, val[5]) - - result -end - -def _reduce_321(val, _values, result) - else_t, else_ = val[4] - result = @builder.condition(val[0], val[1], val[2], - else_, else_t, - val[3], val[5]) - - result -end - -def _reduce_322(val, _values, result) - result = @builder.loop(:while, val[0], *val[1], val[2], val[3]) - - result -end - -def _reduce_323(val, _values, result) - result = @builder.loop(:until, val[0], *val[1], val[2], val[3]) - - result -end - -def _reduce_324(val, _values, result) - *when_bodies, (else_t, else_body) = *val[3] - - result = @builder.case(val[0], val[1], - when_bodies, else_t, else_body, - val[4]) - - result -end - -def _reduce_325(val, _values, result) - *when_bodies, (else_t, else_body) = *val[2] - - result = @builder.case(val[0], nil, - when_bodies, else_t, else_body, - val[3]) - - result -end - -def _reduce_326(val, _values, result) - *in_bodies, (else_t, else_body) = *val[3] - - result = @builder.case_match(val[0], val[1], - in_bodies, else_t, else_body, - val[4]) - - result -end - -def _reduce_327(val, _values, result) - result = @builder.for(val[0], val[1], val[2], *val[3], val[4], val[5]) - - result -end - -def _reduce_328(val, _values, result) - local_push - @context.in_class = true - - result -end - -def _reduce_329(val, _values, result) - k_class, ctx = val[0] - if @context.in_def - diagnostic :error, :class_in_def, nil, k_class - end - - lt_t, superclass = val[2] - result = @builder.def_class(k_class, val[1], - lt_t, superclass, - val[4], val[5]) - - local_pop - @context.in_class = ctx.in_class - - result -end - -def _reduce_330(val, _values, result) - @context.in_def = false - @context.in_class = false - local_push - - result -end - -def _reduce_331(val, _values, result) - k_class, ctx = val[0] - result = @builder.def_sclass(k_class, val[1], val[2], - val[5], val[6]) - - local_pop - @context.in_def = ctx.in_def - @context.in_class = ctx.in_class - - result -end - -def _reduce_332(val, _values, result) - @context.in_class = true - local_push - - result -end - -def _reduce_333(val, _values, result) - k_mod, ctx = val[0] - if @context.in_def - diagnostic :error, :module_in_def, nil, k_mod - end - - result = @builder.def_module(k_mod, val[1], - val[3], val[4]) - - local_pop - @context.in_class = ctx.in_class - - result -end - -def _reduce_334(val, _values, result) - local_push - result = context.dup - @context.in_def = true - @current_arg_stack.push(nil) - - result -end - -def _reduce_335(val, _values, result) - result = @builder.def_method(val[0], val[1], - val[3], val[4], val[5]) - - local_pop - @context.in_def = val[2].in_def - @current_arg_stack.pop - - result -end - -def _reduce_336(val, _values, result) - @lexer.state = :expr_fname - - result -end - -def _reduce_337(val, _values, result) - local_push - result = context.dup - @context.in_def = true - @current_arg_stack.push(nil) - - result -end - -def _reduce_338(val, _values, result) - result = @builder.def_singleton(val[0], val[1], val[2], - val[4], val[6], val[7], val[8]) - - local_pop - @context.in_def = val[5].in_def - @current_arg_stack.pop - - result -end - -def _reduce_339(val, _values, result) - result = @builder.keyword_cmd(:break, val[0]) - - result -end - -def _reduce_340(val, _values, result) - result = @builder.keyword_cmd(:next, val[0]) - - result -end - -def _reduce_341(val, _values, result) - result = @builder.keyword_cmd(:redo, val[0]) - - result -end - -def _reduce_342(val, _values, result) - result = @builder.keyword_cmd(:retry, val[0]) - - result -end - -# reduce 343 omitted - -def _reduce_344(val, _values, result) - result = [ val[0], @context.dup ] - - result -end - -def _reduce_345(val, _values, result) - result = [ val[0], @context.dup ] - - result -end - -def _reduce_346(val, _values, result) - result = val[0] - - result -end - -def _reduce_347(val, _values, result) - if @context.in_class && !@context.in_def && !(context.in_block || context.in_lambda) - diagnostic :error, :invalid_return, nil, val[0] - end - - result -end - -# reduce 348 omitted - -# reduce 349 omitted - -def _reduce_350(val, _values, result) - result = val[1] - - result -end - -# reduce 351 omitted - -# reduce 352 omitted - -# reduce 353 omitted - -def _reduce_354(val, _values, result) - else_t, else_ = val[4] - result = [ val[0], - @builder.condition(val[0], val[1], val[2], - val[3], else_t, - else_, nil), - ] - - result -end - -# reduce 355 omitted - -def _reduce_356(val, _values, result) - result = val - - result -end - -# reduce 357 omitted - -# reduce 358 omitted - -def _reduce_359(val, _values, result) - result = @builder.arg(val[0]) - - result -end - -def _reduce_360(val, _values, result) - result = @builder.multi_lhs(val[0], val[1], val[2]) - - result -end - -def _reduce_361(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_362(val, _values, result) - result = val[0] << val[2] - - result -end - -# reduce 363 omitted - -def _reduce_364(val, _values, result) - result = val[0]. - push(val[2]) - - result -end - -def _reduce_365(val, _values, result) - result = val[0]. - push(val[2]). - concat(val[4]) - - result -end - -def _reduce_366(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_367(val, _values, result) - result = [ val[0], *val[2] ] - - result -end - -def _reduce_368(val, _values, result) - result = @builder.restarg(val[0], val[1]) - - result -end - -def _reduce_369(val, _values, result) - result = @builder.restarg(val[0]) - - result -end - -def _reduce_370(val, _values, result) - result = val[0].concat(val[2]).concat(val[3]) - - result -end - -def _reduce_371(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_372(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_373(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_374(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_375(val, _values, result) - result = val[1] - - result -end - -def _reduce_376(val, _values, result) - result = [] - - result -end - -def _reduce_377(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_378(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[6]). - concat(val[7]) - - result -end - -def _reduce_379(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_380(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_381(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -# reduce 382 omitted - -def _reduce_383(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_384(val, _values, result) - if val[1].empty? && val[0].size == 1 - result = [@builder.procarg0(val[0][0])] - else - result = val[0].concat(val[1]) - end - - result -end - -def _reduce_385(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_386(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_387(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_388(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_389(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_390(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -# reduce 391 omitted - -def _reduce_392(val, _values, result) - result = @builder.args(nil, [], nil) - - result -end - -def _reduce_393(val, _values, result) - @lexer.state = :expr_value - - result -end - -def _reduce_394(val, _values, result) - @max_numparam_stack.has_ordinary_params! - @current_arg_stack.set(nil) - result = @builder.args(val[0], val[1], val[2]) - - result -end - -def _reduce_395(val, _values, result) - @max_numparam_stack.has_ordinary_params! - @current_arg_stack.set(nil) - result = @builder.args(val[0], val[1].concat(val[2]), val[3]) - - result -end - -def _reduce_396(val, _values, result) - result = [] - - result -end - -def _reduce_397(val, _values, result) - result = val[2] - - result -end - -def _reduce_398(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_399(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_400(val, _values, result) - @static_env.declare val[0][0] - result = @builder.shadowarg(val[0]) - - result -end - -# reduce 401 omitted - -def _reduce_402(val, _values, result) - @static_env.extend_dynamic - @max_numparam_stack.push(static: false) - - result -end - -def _reduce_403(val, _values, result) - @lexer.cmdarg.push(false) - - result -end - -def _reduce_404(val, _values, result) - args = @max_numparam_stack.has_numparams? ? @builder.numargs(@max_numparam_stack.top) : val[1] - result = [ args, val[3] ] - - @max_numparam_stack.pop - @static_env.unextend - @lexer.cmdarg.pop - - result -end - -def _reduce_405(val, _values, result) - @max_numparam_stack.has_ordinary_params! - result = @builder.args(val[0], val[1].concat(val[2]), val[3]) - - result -end - -def _reduce_406(val, _values, result) - if val[0].any? - @max_numparam_stack.has_ordinary_params! - end - result = @builder.args(nil, val[0], nil) - - result -end - -def _reduce_407(val, _values, result) - result = @context.dup - @context.in_lambda = true - - result -end - -def _reduce_408(val, _values, result) - result = [ val[0], val[2], val[3] ] - @context.in_lambda = val[1].in_lambda - - result -end - -def _reduce_409(val, _values, result) - result = @context.dup - @context.in_lambda = true - - result -end - -def _reduce_410(val, _values, result) - result = [ val[0], val[2], val[3] ] - @context.in_lambda = val[1].in_lambda - - result -end - -def _reduce_411(val, _values, result) - result = @context.dup - @context.in_block = true - - result -end - -def _reduce_412(val, _values, result) - result = [ val[0], *val[2], val[3] ] - @context.in_block = val[1].in_block - - result -end - -def _reduce_413(val, _values, result) - begin_t, block_args, body, end_t = val[1] - result = @builder.block(val[0], - begin_t, block_args, body, end_t) - - result -end - -def _reduce_414(val, _values, result) - lparen_t, args, rparen_t = val[3] - result = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - result -end - -def _reduce_415(val, _values, result) - lparen_t, args, rparen_t = val[3] - method_call = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - begin_t, args, body, end_t = val[4] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_416(val, _values, result) - method_call = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - begin_t, args, body, end_t = val[4] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_417(val, _values, result) - lparen_t, args, rparen_t = val[1] - result = @builder.call_method(nil, nil, val[0], - lparen_t, args, rparen_t) - - result -end - -def _reduce_418(val, _values, result) - lparen_t, args, rparen_t = val[3] - result = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - result -end - -def _reduce_419(val, _values, result) - lparen_t, args, rparen_t = val[3] - result = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - result -end - -def _reduce_420(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2]) - - result -end - -def _reduce_421(val, _values, result) - lparen_t, args, rparen_t = val[2] - result = @builder.call_method(val[0], val[1], nil, - lparen_t, args, rparen_t) - - result -end - -def _reduce_422(val, _values, result) - lparen_t, args, rparen_t = val[2] - result = @builder.call_method(val[0], val[1], nil, - lparen_t, args, rparen_t) - - result -end - -def _reduce_423(val, _values, result) - lparen_t, args, rparen_t = val[1] - result = @builder.keyword_cmd(:super, val[0], - lparen_t, args, rparen_t) - - result -end - -def _reduce_424(val, _values, result) - result = @builder.keyword_cmd(:zsuper, val[0]) - - result -end - -def _reduce_425(val, _values, result) - result = @builder.index(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_426(val, _values, result) - result = @context.dup - @context.in_block = true - - result -end - -def _reduce_427(val, _values, result) - result = [ val[0], *val[2], val[3] ] - @context.in_block = val[1].in_block - - result -end - -def _reduce_428(val, _values, result) - result = @context.dup - @context.in_block = true - - result -end - -def _reduce_429(val, _values, result) - result = [ val[0], *val[2], val[3] ] - @context.in_block = val[1].in_block - - result -end - -def _reduce_430(val, _values, result) - @static_env.extend_dynamic - @max_numparam_stack.push(static: false) - - result -end - -def _reduce_431(val, _values, result) - args = @max_numparam_stack.has_numparams? ? @builder.numargs(@max_numparam_stack.top) : val[1] - result = [ args, val[2] ] - - @max_numparam_stack.pop - @static_env.unextend - - result -end - -def _reduce_432(val, _values, result) - @static_env.extend_dynamic - @max_numparam_stack.push(static: false) - - result -end - -def _reduce_433(val, _values, result) - @lexer.cmdarg.push(false) - - result -end - -def _reduce_434(val, _values, result) - args = @max_numparam_stack.has_numparams? ? @builder.numargs(@max_numparam_stack.top) : val[2] - result = [ args, val[3] ] - - @max_numparam_stack.pop - @static_env.unextend - @lexer.cmdarg.pop - - result -end - -def _reduce_435(val, _values, result) - result = [ @builder.when(val[0], val[1], val[2], val[3]), - *val[4] ] - - result -end - -def _reduce_436(val, _values, result) - result = [ val[0] ] - - result -end - -# reduce 437 omitted - -def _reduce_438(val, _values, result) - @lexer.state = :expr_beg - @lexer.command_start = false - @pattern_variables.push - @pattern_hash_keys.push - - result = @context.in_kwarg - @context.in_kwarg = true - - result -end - -def _reduce_439(val, _values, result) - @pattern_hash_keys.pop - @pattern_variables.pop - @context.in_kwarg = val[1] - - result -end - -def _reduce_440(val, _values, result) - result = [ @builder.in_pattern(val[0], *val[2], val[3], val[5]), - *val[6] ] - - result -end - -def _reduce_441(val, _values, result) - result = [ val[0] ] - - result -end - -# reduce 442 omitted - -def _reduce_443(val, _values, result) - result = [ val[0], nil ] - - result -end - -def _reduce_444(val, _values, result) - result = [ val[0], @builder.if_guard(val[1], val[2]) ] - - result -end - -def _reduce_445(val, _values, result) - result = [ val[0], @builder.unless_guard(val[1], val[2]) ] - - result -end - -# reduce 446 omitted - -def _reduce_447(val, _values, result) - # array patterns that end with comma - # like 1, 2, - # must be emitted as `array_pattern_with_tail` - item = @builder.match_with_trailing_comma(val[0], val[1]) - result = @builder.array_pattern(nil, [ item ], nil) - - result -end - -def _reduce_448(val, _values, result) - result = @builder.array_pattern(nil, [val[0]].concat(val[2]), nil) - - result -end - -def _reduce_449(val, _values, result) - result = @builder.array_pattern(nil, val[0], nil) - - result -end - -def _reduce_450(val, _values, result) - result = @builder.hash_pattern(nil, val[0], nil) - - result -end - -# reduce 451 omitted - -def _reduce_452(val, _values, result) - result = @builder.match_as(val[0], val[1], val[2]) - - result -end - -# reduce 453 omitted - -def _reduce_454(val, _values, result) - result = @builder.match_alt(val[0], val[1], val[2]) - - result -end - -# reduce 455 omitted - -def _reduce_456(val, _values, result) - result = val[0] - @pattern_hash_keys.push - - result -end - -def _reduce_457(val, _values, result) - result = val[0] - @pattern_hash_keys.push - - result -end - -# reduce 458 omitted - -def _reduce_459(val, _values, result) - @pattern_hash_keys.pop - pattern = @builder.array_pattern(nil, val[2], nil) - result = @builder.const_pattern(val[0], val[1], pattern, val[3]) - - result -end - -def _reduce_460(val, _values, result) - @pattern_hash_keys.pop - pattern = @builder.hash_pattern(nil, val[2], nil) - result = @builder.const_pattern(val[0], val[1], pattern, val[3]) - - result -end - -def _reduce_461(val, _values, result) - pattern = @builder.array_pattern(val[1], nil, val[2]) - result = @builder.const_pattern(val[0], val[1], pattern, val[2]) - - result -end - -def _reduce_462(val, _values, result) - @pattern_hash_keys.pop - pattern = @builder.array_pattern(nil, val[2], nil) - result = @builder.const_pattern(val[0], val[1], pattern, val[3]) - - result -end - -def _reduce_463(val, _values, result) - @pattern_hash_keys.pop - pattern = @builder.hash_pattern(nil, val[2], nil) - result = @builder.const_pattern(val[0], val[1], pattern, val[3]) - - result -end - -def _reduce_464(val, _values, result) - pattern = @builder.array_pattern(val[1], nil, val[2]) - result = @builder.const_pattern(val[0], val[1], pattern, val[2]) - - result -end - -def _reduce_465(val, _values, result) - @pattern_hash_keys.push - - result -end - -def _reduce_466(val, _values, result) - @pattern_hash_keys.pop - result = @builder.array_pattern(val[0], val[2], val[3]) - - result -end - -def _reduce_467(val, _values, result) - result = @builder.array_pattern(val[0], [], val[1]) - - result -end - -def _reduce_468(val, _values, result) - @pattern_hash_keys.push - result = @context.in_kwarg - @context.in_kwarg = false - - result -end - -def _reduce_469(val, _values, result) - @pattern_hash_keys.pop - @context.in_kwarg = val[1] - result = @builder.hash_pattern(val[0], val[2], val[3]) - - result -end - -def _reduce_470(val, _values, result) - result = @builder.hash_pattern(val[0], [], val[1]) - - result -end - -def _reduce_471(val, _values, result) - @pattern_hash_keys.push - - result -end - -def _reduce_472(val, _values, result) - @pattern_hash_keys.pop - result = @builder.begin(val[0], val[2], val[3]) - - result -end - -def _reduce_473(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_474(val, _values, result) - result = val[0] - - result -end - -def _reduce_475(val, _values, result) - result = [ *val[0], val[1] ] - - result -end - -def _reduce_476(val, _values, result) - match_rest = @builder.match_rest(val[1], val[2]) - result = [ *val[0], match_rest ] - - result -end - -def _reduce_477(val, _values, result) - match_rest = @builder.match_rest(val[1], val[2]) - result = [ *val[0], match_rest, *val[4] ] - - result -end - -def _reduce_478(val, _values, result) - result = [ *val[0], @builder.match_rest(val[1]) ] - - result -end - -def _reduce_479(val, _values, result) - result = [ *val[0], @builder.match_rest(val[1]), *val[3] ] - - result -end - -# reduce 480 omitted - -def _reduce_481(val, _values, result) - # array patterns that end with comma - # like [1, 2,] - # must be emitted as `array_pattern_with_tail` - item = @builder.match_with_trailing_comma(val[0], val[1]) - result = [ item ] - - result -end - -def _reduce_482(val, _values, result) - # array patterns that end with comma - # like [1, 2,] - # must be emitted as `array_pattern_with_tail` - last_item = @builder.match_with_trailing_comma(val[1], val[2]) - result = [ *val[0], last_item ] - - result -end - -def _reduce_483(val, _values, result) - match_rest = @builder.match_rest(val[0], val[1]) - result = [ match_rest ] - - result -end - -def _reduce_484(val, _values, result) - match_rest = @builder.match_rest(val[0], val[1]) - result = [ match_rest, *val[3] ] - - result -end - -def _reduce_485(val, _values, result) - match_rest = @builder.match_rest(val[0]) - result = [ match_rest ] - - result -end - -def _reduce_486(val, _values, result) - match_rest = @builder.match_rest(val[0]) - result = [ match_rest, *val[2] ] - - result -end - -def _reduce_487(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_488(val, _values, result) - result = [ *val[0], val[2] ] - - result -end - -# reduce 489 omitted - -def _reduce_490(val, _values, result) - result = [ *val[0], *val[2] ] - - result -end - -def _reduce_491(val, _values, result) - result = val[0] - - result -end - -def _reduce_492(val, _values, result) - result = val[0] - - result -end - -def _reduce_493(val, _values, result) - result = val[0] - - result -end - -def _reduce_494(val, _values, result) - result = [ *val[0], *val[2] ] - - result -end - -def _reduce_495(val, _values, result) - result = [ *val[0], *val[2] ] - - result -end - -def _reduce_496(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_497(val, _values, result) - result = [ *val[0], val[2] ] - - result -end - -def _reduce_498(val, _values, result) - result = @builder.match_pair(*val[0], val[1]) - - result -end - -def _reduce_499(val, _values, result) - result = @builder.match_label(*val[0]) - - result -end - -def _reduce_500(val, _values, result) - result = [:label, val[0]] - - result -end - -def _reduce_501(val, _values, result) - result = [:quoted, [val[0], val[1], val[2]]] - - result -end - -def _reduce_502(val, _values, result) - result = [ @builder.match_rest(val[0], val[1]) ] - - result -end - -def _reduce_503(val, _values, result) - result = [ @builder.match_rest(val[0], nil) ] - - result -end - -def _reduce_504(val, _values, result) - result = [ @builder.match_nil_pattern(val[0], val[1]) ] - - result -end - -# reduce 505 omitted - -def _reduce_506(val, _values, result) - result = @builder.range_inclusive(val[0], val[1], val[2]) - - result -end - -def _reduce_507(val, _values, result) - result = @builder.range_exclusive(val[0], val[1], val[2]) - - result -end - -def _reduce_508(val, _values, result) - result = @builder.range_inclusive(val[0], val[1], nil) - - result -end - -def _reduce_509(val, _values, result) - result = @builder.range_exclusive(val[0], val[1], nil) - - result -end - -# reduce 510 omitted - -# reduce 511 omitted - -# reduce 512 omitted - -def _reduce_513(val, _values, result) - result = @builder.range_inclusive(nil, val[0], val[1]) - - result -end - -def _reduce_514(val, _values, result) - result = @builder.range_exclusive(nil, val[0], val[1]) - - result -end - -# reduce 515 omitted - -# reduce 516 omitted - -# reduce 517 omitted - -# reduce 518 omitted - -# reduce 519 omitted - -# reduce 520 omitted - -# reduce 521 omitted - -# reduce 522 omitted - -def _reduce_523(val, _values, result) - result = @builder.accessible(val[0]) - - result -end - -def _reduce_524(val, _values, result) - result = @context.dup - @context.in_lambda = true - - result -end - -def _reduce_525(val, _values, result) - lambda_call = @builder.call_lambda(val[0]) - - args, (begin_t, body, end_t) = val[2] - result = @builder.block(lambda_call, - begin_t, args, body, end_t) - - @context.in_lambda = val[1].in_lambda - - result -end - -def _reduce_526(val, _values, result) - result = @builder.assignable(@builder.match_var(val[0])) - - result -end - -def _reduce_527(val, _values, result) - name = val[1][0] - unless static_env.declared?(name) - diagnostic :error, :undefined_lvar, { :name => name }, val[1] - end - - lvar = @builder.accessible(@builder.ident(val[1])) - result = @builder.pin(val[0], lvar) - - result -end - -def _reduce_528(val, _values, result) - result = @builder.const_global(val[0], val[1]) - - result -end - -def _reduce_529(val, _values, result) - result = @builder.const_fetch(val[0], val[1], val[2]) - - result -end - -def _reduce_530(val, _values, result) - result = @builder.const(val[0]) - - result -end - -def _reduce_531(val, _values, result) - assoc_t, exc_var = val[2] - - if val[1] - exc_list = @builder.array(nil, val[1], nil) - end - - result = [ @builder.rescue_body(val[0], - exc_list, assoc_t, exc_var, - val[3], val[4]), - *val[5] ] - - result -end - -def _reduce_532(val, _values, result) - result = [] - - result -end - -def _reduce_533(val, _values, result) - result = [ val[0] ] - - result -end - -# reduce 534 omitted - -# reduce 535 omitted - -def _reduce_536(val, _values, result) - result = [ val[0], val[1] ] - - result -end - -# reduce 537 omitted - -def _reduce_538(val, _values, result) - result = [ val[0], val[1] ] - - result -end - -# reduce 539 omitted - -# reduce 540 omitted - -# reduce 541 omitted - -def _reduce_542(val, _values, result) - result = @builder.string_compose(nil, val[0], nil) - - result -end - -def _reduce_543(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_544(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_545(val, _values, result) - string = @builder.string_compose(val[0], val[1], val[2]) - result = @builder.dedent_string(string, @lexer.dedent_level) - - result -end - -def _reduce_546(val, _values, result) - string = @builder.string(val[0]) - result = @builder.dedent_string(string, @lexer.dedent_level) - - result -end - -def _reduce_547(val, _values, result) - result = @builder.character(val[0]) - - result -end - -def _reduce_548(val, _values, result) - string = @builder.xstring_compose(val[0], val[1], val[2]) - result = @builder.dedent_string(string, @lexer.dedent_level) - - result -end - -def _reduce_549(val, _values, result) - opts = @builder.regexp_options(val[3]) - result = @builder.regexp_compose(val[0], val[1], val[2], opts) - - result -end - -def _reduce_550(val, _values, result) - result = @builder.words_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_551(val, _values, result) - result = [] - - result -end - -def _reduce_552(val, _values, result) - result = val[0] << @builder.word(val[1]) - - result -end - -def _reduce_553(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_554(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_555(val, _values, result) - result = @builder.symbols_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_556(val, _values, result) - result = [] - - result -end - -def _reduce_557(val, _values, result) - result = val[0] << @builder.word(val[1]) - - result -end - -def _reduce_558(val, _values, result) - result = @builder.words_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_559(val, _values, result) - result = @builder.symbols_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_560(val, _values, result) - result = [] - - result -end - -def _reduce_561(val, _values, result) - result = val[0] << @builder.string_internal(val[1]) - - result -end - -def _reduce_562(val, _values, result) - result = [] - - result -end - -def _reduce_563(val, _values, result) - result = val[0] << @builder.symbol_internal(val[1]) - - result -end - -def _reduce_564(val, _values, result) - result = [] - - result -end - -def _reduce_565(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_566(val, _values, result) - result = [] - - result -end - -def _reduce_567(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_568(val, _values, result) - result = [] - - result -end - -def _reduce_569(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_570(val, _values, result) - result = @builder.string_internal(val[0]) - - result -end - -def _reduce_571(val, _values, result) - result = val[1] - - result -end - -def _reduce_572(val, _values, result) - @lexer.cmdarg.push(false) - @lexer.cond.push(false) - - result -end - -def _reduce_573(val, _values, result) - @lexer.cmdarg.pop - @lexer.cond.pop - - result = @builder.begin(val[0], val[2], val[3]) - - result -end - -def _reduce_574(val, _values, result) - result = @builder.gvar(val[0]) - - result -end - -def _reduce_575(val, _values, result) - result = @builder.ivar(val[0]) - - result -end - -def _reduce_576(val, _values, result) - result = @builder.cvar(val[0]) - - result -end - -# reduce 577 omitted - -# reduce 578 omitted - -# reduce 579 omitted - -def _reduce_580(val, _values, result) - @lexer.state = :expr_end - result = @builder.symbol(val[0]) - - result -end - -def _reduce_581(val, _values, result) - @lexer.state = :expr_end - result = @builder.symbol_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_582(val, _values, result) - result = val[0] - - result -end - -def _reduce_583(val, _values, result) - if @builder.respond_to? :negate - # AST builder interface compatibility - result = @builder.negate(val[0], val[1]) - else - result = @builder.unary_num(val[0], val[1]) - end - - result -end - -def _reduce_584(val, _values, result) - @lexer.state = :expr_end - result = @builder.integer(val[0]) - - result -end - -def _reduce_585(val, _values, result) - @lexer.state = :expr_end - result = @builder.float(val[0]) - - result -end - -def _reduce_586(val, _values, result) - @lexer.state = :expr_end - result = @builder.rational(val[0]) - - result -end - -def _reduce_587(val, _values, result) - @lexer.state = :expr_end - result = @builder.complex(val[0]) - - result -end - -def _reduce_588(val, _values, result) - result = @builder.ident(val[0]) - - result -end - -def _reduce_589(val, _values, result) - result = @builder.ivar(val[0]) - - result -end - -def _reduce_590(val, _values, result) - result = @builder.gvar(val[0]) - - result -end - -def _reduce_591(val, _values, result) - result = @builder.const(val[0]) - - result -end - -def _reduce_592(val, _values, result) - result = @builder.cvar(val[0]) - - result -end - -def _reduce_593(val, _values, result) - result = @builder.nil(val[0]) - - result -end - -def _reduce_594(val, _values, result) - result = @builder.self(val[0]) - - result -end - -def _reduce_595(val, _values, result) - result = @builder.true(val[0]) - - result -end - -def _reduce_596(val, _values, result) - result = @builder.false(val[0]) - - result -end - -def _reduce_597(val, _values, result) - result = @builder.__FILE__(val[0]) - - result -end - -def _reduce_598(val, _values, result) - result = @builder.__LINE__(val[0]) - - result -end - -def _reduce_599(val, _values, result) - result = @builder.__ENCODING__(val[0]) - - result -end - -def _reduce_600(val, _values, result) - result = @builder.accessible(val[0]) - - result -end - -def _reduce_601(val, _values, result) - result = @builder.accessible(val[0]) - - result -end - -def _reduce_602(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_603(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_604(val, _values, result) - result = @builder.nth_ref(val[0]) - - result -end - -def _reduce_605(val, _values, result) - result = @builder.back_ref(val[0]) - - result -end - -def _reduce_606(val, _values, result) - @lexer.state = :expr_value - - result -end - -def _reduce_607(val, _values, result) - result = [ val[0], val[2] ] - - result -end - -def _reduce_608(val, _values, result) - result = nil - - result -end - -def _reduce_609(val, _values, result) - result = @builder.args(val[0], val[1], val[2]) - - @lexer.state = :expr_value - - result -end - -def _reduce_610(val, _values, result) - args = [ *val[1], @builder.forward_arg(val[3]) ] - result = @builder.args(val[0], args, val[4]) - @static_env.declare_forward_args - - result -end - -def _reduce_611(val, _values, result) - result = @builder.forward_only_args(val[0], val[1], val[2]) - @static_env.declare_forward_args - - @lexer.state = :expr_value - - result -end - -def _reduce_612(val, _values, result) - result = @context.in_kwarg - @context.in_kwarg = true - - result -end - -def _reduce_613(val, _values, result) - @context.in_kwarg = val[0] - result = @builder.args(nil, val[1], nil) - - result -end - -def _reduce_614(val, _values, result) - result = val[0].concat(val[2]).concat(val[3]) - - result -end - -def _reduce_615(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_616(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_617(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_618(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_619(val, _values, result) - result = val[1] - - result -end - -def _reduce_620(val, _values, result) - result = [] - - result -end - -def _reduce_621(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_622(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[6]). - concat(val[7]) - - result -end - -def _reduce_623(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_624(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_625(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_626(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_627(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_628(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_629(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_630(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_631(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_632(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_633(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_634(val, _values, result) - result = val[0] - - result -end - -def _reduce_635(val, _values, result) - result = [] - - result -end - -def _reduce_636(val, _values, result) - result = val[0] - - result -end - -def _reduce_637(val, _values, result) - diagnostic :error, :argument_const, nil, val[0] - - result -end - -def _reduce_638(val, _values, result) - diagnostic :error, :argument_ivar, nil, val[0] - - result -end - -def _reduce_639(val, _values, result) - diagnostic :error, :argument_gvar, nil, val[0] - - result -end - -def _reduce_640(val, _values, result) - diagnostic :error, :argument_cvar, nil, val[0] - - result -end - -# reduce 641 omitted - -def _reduce_642(val, _values, result) - @static_env.declare val[0][0] - - @max_numparam_stack.has_ordinary_params! - - result = val[0] - - result -end - -def _reduce_643(val, _values, result) - @current_arg_stack.set(val[0][0]) - result = val[0] - - result -end - -def _reduce_644(val, _values, result) - @current_arg_stack.set(0) - result = @builder.arg(val[0]) - - result -end - -def _reduce_645(val, _values, result) - result = @builder.multi_lhs(val[0], val[1], val[2]) - - result -end - -def _reduce_646(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_647(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_648(val, _values, result) - check_kwarg_name(val[0]) - - @static_env.declare val[0][0] - - @max_numparam_stack.has_ordinary_params! - - @current_arg_stack.set(val[0][0]) - - result = val[0] - - result -end - -def _reduce_649(val, _values, result) - @current_arg_stack.set(nil) - result = @builder.kwoptarg(val[0], val[1]) - - result -end - -def _reduce_650(val, _values, result) - @current_arg_stack.set(nil) - result = @builder.kwarg(val[0]) - - result -end - -def _reduce_651(val, _values, result) - result = @builder.kwoptarg(val[0], val[1]) - - result -end - -def _reduce_652(val, _values, result) - result = @builder.kwarg(val[0]) - - result -end - -def _reduce_653(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_654(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_655(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_656(val, _values, result) - result = val[0] << val[2] - - result -end - -# reduce 657 omitted - -# reduce 658 omitted - -def _reduce_659(val, _values, result) - result = [ @builder.kwnilarg(val[0], val[1]) ] - - result -end - -def _reduce_660(val, _values, result) - @static_env.declare val[1][0] - - result = [ @builder.kwrestarg(val[0], val[1]) ] - - result -end - -def _reduce_661(val, _values, result) - result = [ @builder.kwrestarg(val[0]) ] - - result -end - -def _reduce_662(val, _values, result) - @current_arg_stack.set(0) - result = @builder.optarg(val[0], val[1], val[2]) - - result -end - -def _reduce_663(val, _values, result) - @current_arg_stack.set(0) - result = @builder.optarg(val[0], val[1], val[2]) - - result -end - -def _reduce_664(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_665(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_666(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_667(val, _values, result) - result = val[0] << val[2] - - result -end - -# reduce 668 omitted - -# reduce 669 omitted - -def _reduce_670(val, _values, result) - @static_env.declare val[1][0] - - result = [ @builder.restarg(val[0], val[1]) ] - - result -end - -def _reduce_671(val, _values, result) - result = [ @builder.restarg(val[0]) ] - - result -end - -# reduce 672 omitted - -# reduce 673 omitted - -def _reduce_674(val, _values, result) - @static_env.declare val[1][0] - - result = @builder.blockarg(val[0], val[1]) - - result -end - -def _reduce_675(val, _values, result) - result = [ val[1] ] - - result -end - -def _reduce_676(val, _values, result) - result = [] - - result -end - -# reduce 677 omitted - -def _reduce_678(val, _values, result) - result = val[1] - - result -end - -def _reduce_679(val, _values, result) - result = [] - - result -end - -# reduce 680 omitted - -def _reduce_681(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_682(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_683(val, _values, result) - result = @builder.pair(val[0], val[1], val[2]) - - result -end - -def _reduce_684(val, _values, result) - result = @builder.pair_keyword(val[0], val[1]) - - result -end - -def _reduce_685(val, _values, result) - result = @builder.pair_quoted(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_686(val, _values, result) - result = @builder.kwsplat(val[0], val[1]) - - result -end - -# reduce 687 omitted - -# reduce 688 omitted - -# reduce 689 omitted - -# reduce 690 omitted - -# reduce 691 omitted - -# reduce 692 omitted - -# reduce 693 omitted - -# reduce 694 omitted - -# reduce 695 omitted - -# reduce 696 omitted - -# reduce 697 omitted - -# reduce 698 omitted - -def _reduce_699(val, _values, result) - result = [:dot, val[0][1]] - - result -end - -def _reduce_700(val, _values, result) - result = [:anddot, val[0][1]] - - result -end - -# reduce 701 omitted - -# reduce 702 omitted - -# reduce 703 omitted - -# reduce 704 omitted - -def _reduce_705(val, _values, result) - result = val[1] - - result -end - -def _reduce_706(val, _values, result) - result = val[1] - - result -end - -def _reduce_707(val, _values, result) - result = val[1] - - result -end - -# reduce 708 omitted - -# reduce 709 omitted - -# reduce 710 omitted - -def _reduce_711(val, _values, result) - yyerrok - - result -end - -# reduce 712 omitted - -# reduce 713 omitted - -# reduce 714 omitted - -def _reduce_715(val, _values, result) - result = nil - - result -end - -def _reduce_none(val, _values, result) - val[0] -end - - end # class Ruby27 -end # module Parser diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ruby28.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ruby28.rb deleted file mode 100644 index 9e077816..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ruby28.rb +++ /dev/null @@ -1,8047 +0,0 @@ -# -*- encoding:utf-8; warn-indent:false; frozen_string_literal: true -*- -# -# DO NOT MODIFY!!!! -# This file is automatically generated by Racc 1.4.15 -# from Racc grammer file "". -# - -require 'racc/parser.rb' - - -require 'parser' - -module Parser - class Ruby28 < Parser::Base - - - def version - 28 - end - - def default_encoding - Encoding::UTF_8 - end -##### State transition tables begin ### - -clist = [ -'-704,618,-119,-117,299,-122,965,-704,-704,-704,299,-120,870,-704,-704', -'1078,-704,1083,-121,659,-116,870,219,220,-704,-704,618,-603,805,362', -'299,299,-713,1077,-603,661,-704,-704,618,-704,-704,-704,-704,-704,788', -'-604,219,220,230,231,618,-114,-604,811,618,556,219,220,-500,962,219', -'220,789,974,231,618,-704,-704,-704,-704,-704,-704,-704,-704,-704,-704', -'-704,-704,-704,-704,-118,-115,-704,-704,-704,658,686,-704,-701,231,-704', -'298,-603,-704,294,294,625,298,-704,1084,-704,660,-704,-704,810,-704', -'-704,-704,-704,-704,-604,-704,-704,-704,-121,964,231,298,298,123,-119', -'-117,-116,-122,122,-119,-117,-704,-122,-120,-704,-704,123,-109,-120', -'-704,-121,122,-116,-704,231,-121,-704,-116,123,-118,-704,-704,-704,122', -'231,-704,-704,-704,123,-704,123,-700,-100,122,-612,122,231,-704,-704', -'-704,-704,-704,123,-114,-86,807,123,122,-114,-704,-704,122,-704,-704', -'-704,-704,-704,123,556,-291,954,-713,122,101,102,920,123,625,-613,481', -'646,122,-118,-115,681,101,102,-118,-115,-704,-704,-704,-704,-704,-704', -'-704,-704,-704,-704,-704,-704,-704,-704,-114,230,-704,-704,-704,680', -'867,-704,231,866,-704,646,-112,-704,-704,646,-704,646,-704,646,-704', -'231,-704,-704,-121,-704,-704,-704,-704,-704,-316,-704,-704,-704,-115', -'-122,865,-316,-316,-316,-119,648,647,-316,-316,806,-316,-704,103,104', -'-704,-704,-704,-704,-316,-704,-605,-704,1137,-432,103,104,-704,-605', -'-117,-118,-316,-316,-119,-316,-316,-316,-316,-316,-713,648,647,644,362', -'648,647,648,647,648,647,644,852,483,646,836,631,838,745,482,895,-117', -'-316,-316,-316,-316,-316,-316,-316,-316,-316,-316,-316,-316,-316,-316', -'231,-432,-316,-316,-316,228,685,-316,-432,920,-316,-605,646,-316,226', -'870,801,-432,-316,810,-316,673,-316,-316,646,-316,-316,-316,-316,-316', -'671,-316,-704,-316,681,-116,-432,228,294,-704,-704,-704,648,647,644', -'-704,-704,-316,-704,876,-316,-316,-113,-316,872,-316,-704,-704,873,1137', -'973,1124,-316,631,-122,-120,-432,895,-704,-704,480,-704,-704,-704,-704', -'-704,648,647,653,227,583,-110,580,579,578,588,581,226,648,647,651,553', -'123,-119,292,591,-122,122,-704,-704,-704,-704,-704,-704,-704,-704,-704', -'-704,-704,-704,-704,-704,798,680,-704,-704,-704,586,686,-704,631,231', -'-704,646,632,-704,596,595,599,598,-704,646,-704,592,-704,-704,646,-704', -'-704,-704,-704,-704,-598,-704,-704,-704,852,-612,123,-598,-598,-598', -'227,122,-598,-598,-598,226,-598,-704,-108,796,-704,-704,292,-704,-598', -'-704,-598,-598,-598,123,-117,577,-704,123,122,-118,-598,-598,122,-598', -'-598,-598,-598,-598,720,648,647,657,795,-316,-598,-107,-105,648,647', -'662,-316,-598,648,647,649,-701,793,-116,-114,-316,-598,-598,-598,-598', -'-598,-598,-598,-598,-598,-598,-598,-598,-598,-598,227,-601,-598,-598', -'-598,-316,-598,-598,-601,791,-598,231,-316,-598,-598,231,-598,-701,-598', -'790,-598,-316,-598,-598,1000,-598,-598,-598,-598,-598,-608,-598,-601', -'-598,-316,-598,1001,-608,1002,-601,-601,-601,269,270,-601,-601,-601', -'-598,-601,1005,-598,-598,-598,-598,779,-598,-601,-598,-601,-601,-601', -'-111,-598,777,610,-598,-601,609,-601,-601,-316,-601,-601,-601,-601,-601', -'986,-610,268,267,775,226,-607,-609,-610,-606,591,774,1152,-607,-609', -'610,-606,-610,612,-608,907,636,-601,-601,-601,-601,-601,-601,-601,-601', -'-601,-601,-601,-601,-601,-601,1011,226,-601,-601,-601,231,-601,-601', -'225,771,-601,231,592,-601,-601,759,-601,223,-601,768,-601,-105,-601', -'-601,1004,-601,-601,-601,-601,-601,-610,-601,-316,-601,227,-607,-609', -'-613,-606,-316,-316,-316,87,427,-316,-316,-316,-601,-316,1029,-601,-601', -'-601,-601,88,-601,-316,-601,-316,-316,-316,-289,-601,1033,89,-601,227', -'610,-316,-316,612,-316,-316,-316,-316,-316,231,424,1036,226,1038,226', -'426,425,-106,774,1157,583,1152,580,579,578,789,581,1041,1155,-115,636', -'-316,-316,-316,-316,-316,-316,-316,-316,-316,-316,-316,-316,-316,-316', -'1043,986,-316,-316,-316,231,868,-316,1174,1043,-316,591,781,-316,-316', -'231,-316,231,-316,414,-316,785,-316,-316,1051,-316,-316,-316,-316,-316', -'-316,-316,227,-316,227,1122,1123,-316,-316,-316,599,598,610,-316,-316', -'612,-316,-316,1053,592,-316,-316,-316,-316,-316,-316,766,-316,949,920', -'765,1004,-316,949,920,-120,-316,-316,559,-316,-316,-316,-316,-316,890', -'891,219,220,583,226,580,579,578,588,581,583,628,580,579,578,1186,581', -'1062,591,1063,626,-316,-316,-316,-316,-316,-316,-316,-316,-316,-316', -'-316,-316,-316,-316,219,220,-316,-316,-316,586,685,-316,362,1068,-316', -'1069,781,-316,596,595,599,598,-316,1070,-316,592,-316,-316,-292,-316', -'-316,-316,-316,-316,588,-316,252,-316,227,362,226,231,231,231,591,-317', -'-351,634,231,1074,759,-316,-317,-351,-316,-316,636,-111,231,-316,226', -'-317,-351,231,231,577,-316,558,870,-120,321,77,78,24,9,65,479,599,598', -'71,72,1082,592,563,75,-700,73,74,76,33,34,79,80,126,127,128,129,130', -'81,31,30,111,110,112,113,227,562,21,231,231,-317,-351,1091,8,51,323', -'10,115,114,116,105,64,107,106,108,227,109,117,118,226,101,102,47,48', -'46,-317,478,-700,774,-611,1094,1097,-317,1099,-700,479,-611,1101,231', -'-700,1103,-317,748,-700,43,-611,-100,325,350,231,66,67,-316,603,68,231', -'38,1118,1119,-316,50,231,-700,349,-701,231,830,831,-316,22,832,117,118', -'733,99,87,90,91,1128,92,94,93,95,231,227,-106,288,88,98,870,-317,613', -'-700,1138,-611,82,1140,89,103,104,252,1150,44,45,321,77,78,24,9,65,252', -'252,1153,71,72,252,1158,-316,75,-697,73,74,76,33,34,79,80,126,127,128', -'129,130,81,31,30,111,110,112,113,614,583,21,580,579,578,1159,581,8,51', -'323,10,115,114,116,105,64,107,106,108,1043,109,117,118,-307,101,102', -'47,48,46,226,-307,-598,1043,-307,1043,222,548,781,-598,-307,-307,221', -'1171,-697,1172,546,785,-598,43,-307,530,36,1176,774,66,67,-611,1180', -'68,1182,38,1184,1186,-611,50,1186,-697,690,252,765,218,294,-611,22,625', -'217,416,1119,99,87,90,91,216,92,94,93,95,1200,-307,-113,1176,88,98,679', -'227,678,-598,231,-307,82,249,89,103,104,251,250,44,45,321,77,78,24,9', -'65,674,670,-701,71,72,-700,231,-611,75,-698,73,74,76,33,34,79,80,126', -'127,128,129,130,81,31,30,111,110,112,113,215,583,21,580,579,578,132', -'581,8,51,323,10,115,114,116,105,64,107,106,108,588,109,117,118,-610', -'101,102,47,48,46,591,-610,-601,1043,-317,669,630,-289,781,-601,-610', -'-317,667,638,-698,629,666,785,-601,43,-317,663,36,871,894,66,67,897', -'870,68,899,38,288,599,598,50,231,-698,592,252,526,905,907,909,22,528', -'530,514,528,99,87,90,91,514,92,94,93,95,759,-610,-112,231,88,98,530', -'1212,294,-601,1186,-317,82,249,89,103,104,251,250,44,45,321,77,78,24', -'9,65,294,759,514,71,72,252,132,920,75,-701,73,74,76,33,34,79,80,126', -'127,128,129,130,81,31,30,111,110,112,113,-85,252,21,231,853,541,542', -'-290,8,51,323,10,115,114,116,105,64,107,106,108,549,109,117,118,941', -'101,102,47,48,46,942,231,-701,249,840,839,252,251,250,-701,247,248,920', -'951,-701,952,835,231,-701,43,1186,1186,36,119,303,66,67,1176,231,68', -'583,38,580,579,578,50,581,-701,249,231,,,251,250,22,247,248,,,99,87', -'90,91,,92,94,93,95,,,,,88,98,,,,-701,,,82,,89,103,104,,,44,45,321,77', -'78,24,9,65,,,,71,72,,,,75,-704,73,74,76,33,34,79,80,,,,,,81,31,30,111', -'110,112,113,,583,21,580,579,578,,581,8,51,323,10,115,114,116,105,64', -'107,106,108,,109,117,118,,101,102,47,48,46,,583,-704,580,579,578,,581', -'781,-704,,,,,-700,,,,-704,43,,,325,,,66,67,,,68,1133,38,580,579,578', -'50,581,-704,781,1133,,580,579,578,22,581,,,,99,87,90,91,,92,94,93,95', -',,,,88,98,,,,-704,,,82,,89,103,104,,,44,45,321,77,78,24,9,65,,,,71,72', -',,,75,-700,73,74,76,33,34,79,80,,,,,,81,31,30,111,110,112,113,,,21,', -',,,,8,51,323,10,115,114,116,105,64,107,106,108,,109,117,118,,101,102', -'47,48,46,,,-700,,,,,,,-700,,,,,-700,,,,-700,43,,,36,,,66,67,,,68,,38', -',,,50,,-700,,,,,,,22,,,,,99,87,90,91,,92,94,93,95,-108,,,,88,98,,,,-700', -',,82,,89,103,104,,,44,45,321,77,78,24,9,65,,,,71,72,,,,75,-701,73,74', -'76,33,34,79,80,,,,,,81,31,30,111,110,112,113,,,21,,,,,,8,51,323,10,115', -'114,116,105,64,107,106,108,,109,117,118,,101,102,47,48,46,,,-701,,,', -',,,-701,,,,,-701,,,,-701,43,,,36,,,66,67,,,68,,38,,,,50,,-701,,,,,,', -'22,,,,,99,87,90,91,,92,94,93,95,-110,,,,88,98,,,,-701,,,82,,89,103,104', -',,44,45,321,77,78,24,9,65,,,,71,72,,,,75,-704,73,74,76,33,34,79,80,', -',,,,81,31,30,111,110,112,113,,,21,,,,,,8,51,323,10,115,114,116,105,64', -'107,106,108,,109,117,118,,101,102,47,48,46,,,-704,,,,,,,-704,,,,,-700', -',,,-704,43,,,36,,,66,67,,,68,,38,,,,50,,-704,,,,,,,22,,,,,99,87,90,91', -',92,94,93,95,-109,,,,88,98,,,,-704,,,82,,89,103,104,,,44,45,321,77,78', -'24,9,65,,,,71,72,,,,75,-704,73,74,76,33,34,79,80,,,,,,81,31,30,111,110', -'112,113,,,21,,,,,,8,51,323,10,115,114,116,105,64,107,106,108,,109,117', -'118,,101,102,47,48,46,,,-704,,,,,,,-704,,,,,-700,,,,-704,43,,,36,,,66', -'67,,,68,,38,,,,50,,-704,,,,,,,22,,,,,99,87,90,91,,92,94,93,95,,,,,88', -'98,,,,-704,,,82,,89,103,104,,,44,45,321,77,78,24,9,65,,,,71,72,,,,75', -'-432,73,74,76,33,34,79,80,,,,,,81,31,30,111,110,112,113,,,21,,,,,,8', -'51,323,10,115,114,116,105,64,107,106,108,,109,117,118,,101,102,47,48', -'46,,,-432,,,,,,,-432,,,,,,,,,-432,43,,,36,,,66,67,,,68,,38,,,,50,,-432', -',,,,,,22,,,,,99,87,90,91,,92,94,93,95,-107,,,,88,98,,,,-432,,,82,,89', -'103,104,,,44,45,5,77,78,24,9,65,,,,71,72,,,,75,,73,74,76,33,34,79,80', -'244,,,,,81,31,30,111,110,112,113,,,21,,,,,,8,51,7,10,115,114,116,105', -'64,107,106,108,,109,117,118,,101,102,47,48,46,252,256,257,258,259,269', -'270,264,265,260,261,,245,246,,,262,263,,43,,-262,36,,,66,67,,,68,,38', -'249,,255,50,251,250,,247,248,268,267,253,22,254,,,,99,87,90,91,,92,94', -'93,95,,,,,88,98,,266,,,,,82,,89,103,104,,,44,45,321,77,78,24,9,65,,', -',71,72,,,,75,,73,74,76,33,34,79,80,244,,,,,81,31,30,111,110,112,113', -',,21,,,,,,8,51,323,10,115,114,116,105,64,107,106,108,,109,117,118,,101', -'102,47,48,46,252,256,257,258,259,269,270,264,265,260,261,,245,246,,', -'262,263,,43,,,36,,,66,67,,,68,,38,249,,255,50,251,250,,247,248,268,267', -'253,22,254,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,266,,,,,82,,89,103', -'104,,,44,45,321,77,78,24,9,65,,,,71,72,,,,75,,73,74,76,33,34,79,80,', -',,,,81,31,30,111,110,112,113,,,21,,,,,675,8,51,323,10,115,114,116,105', -'64,107,106,108,,109,117,118,,101,102,47,48,46,252,256,257,258,259,269', -'270,264,265,260,261,,245,246,,,262,263,,43,,,36,,,66,67,,,68,,38,249', -',255,50,251,250,,247,248,268,267,253,22,254,,,,99,87,90,91,,92,94,93', -'95,,,,,88,98,,266,,-262,,,82,,89,103,104,,,44,45,321,77,78,24,9,65,', -',,71,72,,,,75,,73,74,76,33,34,79,80,,,,,,81,31,30,111,110,112,113,,', -'21,,,,,675,8,51,323,10,115,114,116,105,64,107,106,108,,109,117,118,', -'101,102,47,48,46,252,256,257,258,259,269,270,264,265,260,261,,245,246', -',,262,263,,43,,,36,,,66,67,,,68,,38,249,,255,50,251,250,,247,248,268', -'267,253,22,254,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,266,,,,,82,,89', -'103,104,,,44,45,321,77,78,24,9,65,,,,71,72,,,,75,,73,74,76,33,34,79', -'80,,,,,,81,31,30,111,110,112,113,,,21,,,,,917,8,51,323,10,115,114,116', -'105,64,107,106,108,,109,117,118,,101,102,47,48,46,252,256,257,258,259', -'269,270,264,265,260,261,,245,246,,,262,263,,43,,,36,,,66,67,,,68,,38', -'249,,255,50,251,250,,247,248,268,267,253,22,254,,,,99,87,90,91,,92,94', -'93,95,,,,,88,98,,266,,,,,82,,89,103,104,,,44,45,321,77,78,24,9,65,,', -',71,72,,,,75,,73,74,76,33,34,79,80,,,,,,81,31,30,111,110,112,113,,,21', -',,,,945,8,51,323,10,115,114,116,105,64,107,106,108,,109,117,118,,101', -'102,47,48,46,252,256,257,258,259,269,270,264,265,260,261,,245,246,,', -'262,263,,43,,,36,,,66,67,,,68,,38,249,,255,50,251,250,,247,248,268,267', -'253,22,254,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,266,,,,,82,,89,103', -'104,,,44,45,321,77,78,24,9,65,,,,71,72,,,,75,,73,74,76,33,34,79,80,', -',,,,81,31,30,111,110,112,113,,,21,,,,,,8,51,323,10,115,114,116,105,64', -'107,106,108,,109,117,118,,101,102,47,48,46,252,256,257,258,259,269,270', -'264,265,260,261,,245,246,,,262,263,,43,,,36,,,66,67,,,68,,38,249,,255', -'50,251,250,,247,248,268,267,253,22,254,,,,99,87,90,91,,92,94,93,95,', -',,,88,98,,266,,,,,82,,89,103,104,,,44,45,321,77,78,24,9,65,,,,71,72', -',,,75,,73,74,76,33,34,79,80,,,,,,81,31,30,111,110,112,113,,,21,,,,,', -'8,51,323,10,115,114,116,105,64,107,106,108,,109,117,118,,101,102,47', -'48,46,252,256,257,258,259,269,270,264,265,260,261,,245,246,,,262,263', -',43,,,36,,,66,67,,,68,,38,249,,255,50,251,250,,247,248,268,267,253,22', -'254,,,,99,87,90,91,,92,94,93,95,,,,,88,98,231,266,,,,,82,,89,103,104', -',,44,45,321,77,78,24,9,65,,,,71,72,,,,75,,73,74,76,33,34,79,80,,,,,', -'81,31,30,111,110,112,113,,,21,,,,,,8,51,323,10,115,114,116,105,64,107', -'106,108,,109,117,118,,101,102,47,48,46,252,256,257,258,259,269,270,264', -'265,260,261,,245,246,,,262,263,,43,,,325,,,66,67,,,68,,38,249,,255,50', -'251,250,,247,248,268,267,253,22,254,,,,99,87,90,91,,92,94,93,95,,,,', -'88,98,,266,,,,,82,,89,103,104,,,44,45,321,77,78,24,9,65,,,,71,72,,,', -'75,,73,74,76,33,34,79,80,,,,,,81,31,30,111,110,112,113,,,21,,,,,,8,51', -'323,10,115,114,116,105,64,107,106,108,,109,117,118,,101,102,47,48,46', -'252,256,257,258,259,269,270,264,265,260,261,,245,246,,,262,263,,43,', -',36,,,66,67,,,68,,38,249,,255,50,251,250,,247,248,268,267,253,22,254', -',,,99,87,90,91,,92,94,93,95,,,,,88,98,,266,,,,,82,,89,103,104,,,44,45', -'5,77,78,24,9,65,,,,71,72,,,,75,,73,74,76,33,34,79,80,,,,,,81,31,30,111', -'110,112,113,,,21,,,,,,8,51,7,10,115,114,116,105,64,107,106,108,,109', -'117,118,,101,102,47,48,46,252,256,257,258,259,269,270,264,265,260,261', -',245,246,,,262,263,,43,,,36,,,66,67,,,68,,38,249,,255,50,251,250,,247', -'248,268,267,253,22,254,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,266,,', -',,82,,89,103,104,,,44,45,321,77,78,24,9,65,,,,71,72,,,,75,,73,74,76', -'33,34,79,80,,,,,,81,31,30,111,110,112,113,,,21,,,,,,8,51,323,10,115', -'114,116,105,64,107,106,108,,109,117,118,,101,102,47,48,46,252,256,257', -'258,259,269,270,264,265,260,261,,245,246,,,262,263,,43,,,36,,,66,67', -',,68,,38,249,,255,50,251,250,,247,248,268,267,253,22,254,,,,99,87,90', -'91,,92,94,93,95,,,,,88,98,,266,,,,,82,,89,103,104,,,44,45,321,77,78', -'24,9,65,,,,71,72,,,,75,,73,74,76,33,34,79,80,,,,,,81,31,30,111,110,112', -'113,,,21,,,,,,8,51,323,10,115,114,116,105,64,107,106,108,,109,117,118', -',101,102,47,48,46,252,256,257,258,259,269,270,264,265,260,261,,245,246', -',,262,263,,43,,,36,,,66,67,,,68,,38,249,,255,50,251,250,,247,248,268', -'267,253,22,254,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,266,,,,,82,,89', -'103,104,,,44,45,321,77,78,24,9,65,,,,71,72,,,,75,,73,74,76,33,34,79', -'80,,,,,,81,31,30,111,110,112,113,,,21,,,,,,8,51,323,10,115,114,116,105', -'64,107,106,108,,109,117,118,,101,102,47,48,46,252,-726,-726,-726,-726', -'269,270,,,-726,-726,,,,,,262,263,,43,,,36,,,66,67,,,68,,38,249,,255', -'50,251,250,,247,248,268,267,253,22,254,,,,99,87,90,91,,92,94,93,95,', -',,,88,98,,,,,,,82,,89,103,104,,,44,45,321,77,78,24,9,65,,,,71,72,,,', -'75,,73,74,76,33,34,79,80,,,,,,81,31,30,111,110,112,113,,,21,,,,,,8,51', -'323,10,115,114,116,105,64,107,106,108,,109,117,118,,101,102,47,48,46', -'252,256,257,258,259,269,270,264,265,260,261,,-726,-726,,,262,263,,43', -',,36,,,66,67,,,68,,38,249,,255,50,251,250,,247,248,268,267,253,22,254', -',,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,,,,82,,89,103,104,,,44,45,321', -'77,78,24,9,65,,,,71,72,,,,75,,73,74,76,33,34,79,80,,,,,,81,31,30,111', -'110,112,113,,,21,,,,,,8,51,323,10,115,114,116,105,64,107,106,108,,109', -'117,118,,101,102,47,48,46,252,256,257,258,259,269,270,264,265,260,261', -',-726,-726,,,262,263,,43,,,36,,,66,67,,,68,,38,249,,255,50,251,250,', -'247,248,268,267,253,22,254,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,', -',,,82,,89,103,104,,,44,45,321,77,78,24,9,65,,,,71,72,,,,75,,73,74,76', -'33,34,79,80,,,,,,81,31,30,111,110,112,113,,,21,,,,,,8,51,323,10,115', -'114,116,105,64,107,106,108,,109,117,118,,101,102,47,48,46,252,-726,-726', -'-726,-726,269,270,,,-726,-726,,,,,,262,263,,43,,,36,,,66,67,,,68,,38', -'249,,255,50,251,250,,247,248,268,267,253,22,254,,,,99,87,90,91,,92,94', -'93,95,,,,,88,98,,,,,,,82,,89,103,104,,,44,45,321,77,78,24,9,65,,,,71', -'72,,,,75,,73,74,76,33,34,79,80,,,,,,81,31,30,111,110,112,113,,,21,,', -',,,8,51,323,10,115,114,116,105,64,107,106,108,,109,117,118,,101,102', -'47,48,46,252,-726,-726,-726,-726,269,270,,,-726,-726,,,,,,262,263,,43', -',,36,,,66,67,,,68,,38,249,,255,50,251,250,,247,248,268,267,253,22,254', -',,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,,,,82,,89,103,104,,,44,45,321', -'77,78,24,9,65,,,,71,72,,,,75,,73,74,76,33,34,79,80,,,,,,81,31,30,111', -'110,112,113,,,21,,,,,,8,51,323,10,115,114,116,105,64,107,106,108,,109', -'117,118,,101,102,47,48,46,252,-726,-726,-726,-726,269,270,,,-726,-726', -',,,,,262,263,,43,,,36,,,66,67,,,68,,38,249,,255,50,251,250,,247,248', -'268,267,253,22,254,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24', -'82,65,89,103,104,71,72,44,45,,75,,73,74,76,33,34,79,80,,,,,,81,31,30', -'111,110,112,113,,,243,,,,,,,51,,,115,114,116,105,64,107,106,108,315', -'109,117,118,,101,102,47,48,46,252,-726,-726,-726,-726,269,270,,,-726', -'-726,,,,,,262,263,,236,,,242,,,66,67,,,68,,312,249,310,255,50,251,250', -'316,247,248,268,267,253,241,254,,,,99,313,90,91,,92,94,93,95,,,,,88', -'98,,,,,,,82,,89,103,104,,,44,45,77,78,24,9,65,,,,71,72,,,,75,,73,74', -'76,33,34,79,80,,,,,,81,31,30,111,110,112,113,,,21,,,,,,8,51,7,10,115', -'114,116,105,64,107,106,108,,109,117,118,,101,102,47,48,46,252,-726,-726', -'-726,-726,269,270,,,-726,-726,,,,,,262,263,,43,,,36,,,66,67,,,68,,38', -'249,,255,50,251,250,,247,248,268,267,253,22,254,,,,99,87,90,91,,92,94', -'93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74', -'76,33,34,79,80,,,,,,81,31,30,111,110,112,113,,,243,,,,,,,51,,,115,114', -'116,105,64,107,106,108,315,109,117,118,,101,102,47,48,46,252,256,257', -'258,259,269,270,,,260,261,,,,,,262,263,,236,,,242,,,66,67,,,68,,312', -'249,310,255,50,251,250,316,247,248,268,267,253,241,254,,,,99,313,90', -'91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,', -'75,,73,74,76,33,34,79,80,,,,,,81,31,30,111,110,112,113,,,21,,,,,,,51', -',,115,114,116,105,64,107,106,108,,109,117,118,,101,102,47,48,46,252', -'256,257,258,259,269,270,264,,260,261,,,,,,262,263,,236,,,242,,,66,67', -',,68,,,249,,255,50,251,250,,247,248,268,267,253,22,254,,,,99,87,90,91', -',92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75', -',73,74,76,33,34,79,80,,,,,,81,31,30,111,110,112,113,,,21,,,,,,,51,,', -'115,114,116,105,64,107,106,108,,109,117,118,,101,102,47,48,46,252,,', -',,,,,,,,,,,,,262,263,,236,,,242,,,66,67,,,68,,,249,,255,50,251,250,', -'247,248,,,253,22,254,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78', -'24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,33,34,79,80,,,,,,81,31', -'30,111,110,112,113,,,243,,,,,,,51,,,115,114,116,105,64,107,106,108,', -'109,117,118,,101,102,47,48,46,252,,,,,,,,,,,,,,,,262,263,,236,,,242', -',,66,67,,,68,,,249,,255,50,251,250,,247,248,,,253,241,254,,,,99,87,90', -'91,,92,94,93,95,,,,,88,98,,,,,,,82,,89,103,104,-431,,44,45,,,,-431,-431', -'-431,,,-431,-431,-431,252,-431,,,,,,,,-431,-431,-431,-431,,,,262,263', -',,,-431,-431,,-431,-431,-431,-431,-431,,,,249,,255,,251,250,,247,248', -',,,,,,,,,,-431,-431,-431,-431,-431,-431,-431,-431,-431,-431,-431,-431', -'-431,-431,,,-431,-431,-431,,,-431,,294,-431,,,-431,-431,,-431,,-431', -',-431,,-431,-431,,-431,-431,-431,-431,-431,-323,-431,-431,-431,,,,-323', -'-323,-323,,,-323,-323,-323,,-323,-431,252,,-431,-431,,-431,-323,-431', -'-323,-323,,,,,-431,,262,263,-323,-323,,-323,-323,-323,-323,-323,,,,', -',,249,,,,251,250,,247,248,,,,,,,,-323,-323,-323,-323,-323,-323,-323', -'-323,-323,-323,-323,-323,-323,-323,,,-323,-323,-323,,,-323,,303,-323', -',,-323,-323,,-323,,-323,,-323,,-323,-323,,-323,-323,-323,-323,-323,', -'-323,,-323,,,,,,,,,,,,,,-323,,,-323,-323,,-323,,-323,77,78,24,,65,,-323', -',71,72,,,,75,,73,74,76,33,34,79,80,,,,,,81,31,30,111,110,112,113,,,243', -',,,,,,51,,,115,114,116,105,64,107,106,108,315,109,117,118,,101,102,47', -'48,46,252,256,257,258,259,269,270,264,265,260,261,,-726,-726,,,262,263', -',236,,,242,,,66,67,,,68,,312,249,310,255,50,251,250,316,247,248,268', -'267,253,241,254,,,,99,313,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82', -'65,89,103,104,71,72,44,45,,75,,73,74,76,33,34,79,80,,,,,,81,31,30,111', -'110,112,113,,,243,,,,,,,51,,,115,114,116,105,64,107,106,108,315,109', -'117,118,,101,102,47,48,46,252,256,257,258,259,269,270,264,265,260,261', -',-726,-726,,,262,263,,236,,,242,,,66,67,,,68,,312,249,310,255,50,251', -'250,316,247,248,268,267,253,241,254,,,,99,313,90,91,,92,94,93,95,,,', -',88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,33,34', -'79,80,,,,,,81,31,30,111,110,112,113,,,243,,,,,,,51,,,115,114,116,105', -'64,107,106,108,315,109,117,118,,101,102,47,48,46,252,,,,,,,,,,,,,,,', -'262,263,,236,,,242,,,66,67,,,68,,312,249,310,255,50,251,250,316,247', -'248,,,,241,,,,,99,313,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65', -'89,103,104,71,72,44,45,,75,,73,74,76,342,343,79,80,,,,,,81,337,345,111', -'110,112,113,,,243,,,,,,,51,,,115,114,116,105,64,107,106,108,,109,117', -'118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,', -',50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82', -'65,89,103,104,71,72,44,45,,75,,73,74,76,342,343,79,80,,,,,,81,337,345', -'111,110,112,113,,,243,,,,,,,51,,,115,114,116,105,64,107,106,108,,109', -'117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68', -',,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78', -'24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,342,343,79,80,,,,,,81', -'337,345,111,110,112,113,,,243,,,,,,,51,,,115,114,116,105,64,107,106', -'108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66', -'67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,', -',,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,342,343,79,80', -',,,,,81,337,345,111,110,112,113,,,243,,,,,,,51,,,115,114,116,105,64', -'107,106,108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,', -'242,,,66,67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93,95,,', -',,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,342,343', -'79,80,,,,,,81,337,345,111,110,112,113,,,243,,,,,,,51,,,115,114,116,105', -'64,107,106,108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236', -',,242,,,66,67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93,95', -',,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,342', -'343,79,80,,,,,,81,337,345,111,110,112,113,,,243,,,,,,,51,,,115,114,116', -'105,64,107,106,108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,', -',236,,,242,,,66,67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93', -'95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76', -'342,343,79,80,,,,,,81,337,345,111,110,112,113,,,243,,,,,,,51,,,115,114', -'116,105,64,107,106,108,315,109,117,118,,101,102,47,48,46,,,,,,,,,,,', -',,,,,,,,236,,,242,,,66,67,,,68,,,,310,,50,,,316,,,,,,241,,,,,99,313', -'90,91,,92,94,93,95,,,,,88,98,,,,,,,82,,89,103,104,-308,,44,45,,,,-308', -'-308,-308,,,-308,-308,-308,,-308,,,,,,,,-308,,-308,-308,-308,,,,111', -'110,112,113,-308,-308,,-308,-308,-308,-308,-308,,,,,115,114,116,,,,', -',,,,,,101,102,,,346,-308,-308,-308,-308,-308,-308,-308,-308,-308,-308', -'-308,-308,-308,-308,,,-308,-308,-308,,,-308,,,-308,,,-308,-308,,-308', -',-308,,-308,,-308,-308,,-308,-308,-308,-308,-308,,-308,,-308,,99,87', -'90,91,,92,94,93,95,,,,-308,88,98,-308,-308,-308,-308,,-308,82,-308,89', -'103,104,,-308,77,78,24,9,65,,,,71,72,,,,75,,73,74,76,33,34,79,80,,,', -',,81,31,30,111,110,112,113,,,21,,,,,,8,51,,10,115,114,116,105,64,107', -'106,108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,43,,,36,,', -'66,67,,,68,,38,,,,50,,,,,,,,,22,,,,,99,87,90,91,,92,94,93,95,,,,,88', -'98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,342,343,79', -'80,,,,,,81,337,345,111,110,112,113,,,243,,,,,,,51,,,115,114,116,105', -'64,107,106,108,315,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,', -'236,,,242,,,66,67,,,68,,312,,,,50,,,316,,,,,,241,,,,,99,313,90,91,,92', -'94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73', -'74,76,342,343,79,80,,,,,,81,337,345,111,110,112,113,,,243,,,,,,,51,', -',115,114,116,105,64,107,106,108,315,109,117,118,,101,102,47,48,46,,', -',,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50,,,316,,,,,,241,,,,,99', -'313,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72', -'44,45,,75,,73,74,76,342,343,79,80,,,,,,81,337,345,111,110,112,113,,', -'243,,,,,,,51,,,115,114,116,105,64,107,106,108,,109,117,118,,101,102', -'47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,742,,,,50,,,,,,', -',,241,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103', -'104,71,72,44,45,,75,,73,74,76,33,34,79,80,,,,,,81,31,30,111,110,112', -'113,,,21,,,,,,,51,,,115,114,116,105,64,107,106,108,,109,117,118,,101', -'102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,', -',,,22,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103', -'104,71,72,44,45,,75,,73,74,76,33,34,79,80,,,,,,81,31,30,111,110,112', -'113,,,21,,,,,,,51,,,115,114,116,105,64,107,106,108,,109,117,118,,101', -'102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,', -',,,22,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103', -'104,71,72,44,45,,75,,73,74,76,33,34,79,80,,,,,,81,31,30,111,110,112', -'113,,,21,,,,,,,51,,,115,114,116,105,64,107,106,108,,109,117,118,,101', -'102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,', -',,,22,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,123,,,,,122,82,,89,103', -'104,,,44,45,77,78,24,,65,,,,71,72,,,,75,,73,74,76,33,34,79,80,,,,,,81', -'31,30,111,110,112,113,,,21,,,,,,,51,,,115,114,116,105,64,107,106,108', -',109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67', -',,68,,,,,,50,,,,,,,,,22,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77', -'78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,342,343,79,80,,,,,', -'81,337,345,111,110,112,113,,,243,,,,,,,51,,,115,114,116,105,64,107,106', -'108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66', -'67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,', -',,,,,82,,89,103,104,,,44,45,77,78,24,9,65,,,,71,72,,,,75,,73,74,76,33', -'34,79,80,,,,,,81,31,30,111,110,112,113,,,21,,,,,,8,51,7,10,115,114,116', -'105,64,107,106,108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,', -',43,,,36,,,66,67,,,68,,38,,,,50,,,,,,,,,22,,,,,99,87,90,91,,92,94,93', -'95,,,,,88,98,,,,,,416,82,,89,103,104,,,44,45,77,78,24,,65,,,,71,72,', -',,75,,73,74,76,33,34,79,80,,,,,,81,31,30,111,110,112,113,,,21,,,,,,', -'51,,,115,114,116,105,64,107,106,108,,109,117,118,,101,102,47,48,46,', -',,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,,,,,22,,,,,99,87', -'90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45', -',75,,73,74,76,33,34,79,80,,,,,,81,31,30,111,110,112,113,,,21,,,,,,,51', -',,115,114,116,105,64,107,106,108,,109,117,118,,101,102,47,48,46,,,,', -',,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,,,,,22,,,,,99,87,90', -'91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,', -'75,,73,74,76,33,34,79,80,,,,,,81,31,30,111,110,112,113,,,21,,,,,,,51', -',,115,114,116,105,64,107,106,108,,109,117,118,,101,102,47,48,46,,,,', -',,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,,,,,22,,,,,99,87,90', -'91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,', -'75,,73,74,76,33,34,79,80,,,,,,81,31,30,111,110,112,113,,,21,,,,,,,51', -',,115,114,116,105,64,107,106,108,,109,117,118,,101,102,47,48,46,,,,', -',,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,,,,,22,,,,,99,87,90', -'91,,92,94,93,95,,,,,88,98,,,,,,,82,,89,103,104,,,44,45,77,78,24,9,65', -',,,71,72,,,,75,,73,74,76,33,34,79,80,,,,,,81,31,30,111,110,112,113,', -',21,,,,,,8,51,,10,115,114,116,105,64,107,106,108,,109,117,118,,101,102', -'47,48,46,,,,,,,,,,,,,,,,,,,,43,,,36,,,66,67,,,68,,38,,,,50,,,,,,,,,22', -',,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104', -'71,72,44,45,,75,,73,74,76,342,343,79,80,,,,,,81,337,345,111,110,112', -'113,,,243,,,,,,,51,,,115,114,116,105,64,107,106,108,,109,117,118,,101', -'102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,', -',,,241,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103', -'104,71,72,44,45,,75,,73,74,76,33,34,79,80,,,,,,81,31,30,111,110,112', -'113,,,243,,,,,,,51,,,115,114,116,105,64,107,106,108,,109,117,118,,101', -'102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,432,,,,50,,', -',,,,,,241,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89', -'103,104,71,72,44,45,,75,,73,74,76,33,34,79,80,,,,,,81,31,30,111,110', -'112,113,,,243,,,,,,,51,,,115,114,116,105,64,107,106,108,,109,117,118', -',101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,432,,,', -'50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82', -'65,89,103,104,71,72,44,45,,75,,73,74,76,342,343,79,80,,,,,,81,337,345', -'111,110,112,113,,,243,,,,,,,51,,,115,114,116,105,64,107,106,108,,109', -'117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68', -',,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,,,,82', -',89,103,104,,,44,45,77,78,24,9,65,,,,71,72,,,,75,,73,74,76,33,34,79', -'80,,,,,,81,31,30,111,110,112,113,,,21,,,,,,8,51,,10,115,114,116,105', -'64,107,106,108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,43', -',,36,,,66,67,,,68,,38,,,,50,,,,,,,,,22,,,,,99,87,90,91,,92,94,93,95', -',,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,33', -'34,79,80,,,,,,81,31,30,111,110,112,113,,,243,,,,,,,51,,,115,114,116', -'105,64,107,106,108,315,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,', -',,,,236,,,242,,,66,67,,,68,,312,,310,,50,,,316,,,,,,241,,,,,99,313,90', -'91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,', -'75,,73,74,76,33,34,79,80,,,,,,81,31,30,111,110,112,113,,,243,,,,,,,51', -',,115,114,116,105,64,107,106,108,,109,117,118,,101,102,47,48,46,,,,', -',,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87', -'90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45', -',75,,73,74,76,342,343,79,80,,,,,,81,337,345,111,110,112,113,,,243,,', -',,,,51,,,115,114,116,105,64,107,106,108,,109,117,118,,101,102,47,48', -'46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,844,,,,50,,,,,,,,,241', -',,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,,,,82,,89,103,104,,,44,45', -'77,78,24,9,65,,,,71,72,,,,75,,73,74,76,33,34,79,80,,,,,,81,31,30,111', -'110,112,113,,,21,,,,,,8,51,,10,115,114,116,105,64,107,106,108,,109,117', -'118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,43,,,36,,,66,67,,,68,,38,,', -',50,,,,,,,,,22,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82', -'65,89,103,104,71,72,44,45,,75,,73,74,76,33,34,79,80,,,,,,81,31,30,111', -'110,112,113,,,243,,,,,,,51,,,115,114,116,105,64,107,106,108,315,109', -'117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68', -',312,,310,,50,,,316,,,,,,241,,,,,99,313,90,91,,92,94,93,95,,,,,88,98', -',,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,33,34,79,80,', -',,,,81,31,30,111,110,112,113,,,243,,,,,,,51,,,115,114,116,105,64,107', -'106,108,315,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242', -',,66,67,,,68,,312,,310,,50,,,316,,,,,,241,,,,,99,313,90,91,,92,94,93', -'95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76', -'342,343,79,80,,,,,,81,337,345,111,110,112,113,,,243,,,,,,,51,,,115,114', -'116,105,64,107,106,108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,', -',,,,,236,,,242,,,66,67,,,68,,312,,,,50,,,,,,,,,241,,,,,99,87,90,91,', -'92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,', -'73,74,76,342,343,79,80,,,,,,81,337,345,111,110,112,113,,,243,,,,,,,51', -',,115,114,116,105,64,107,106,108,315,109,117,118,,101,102,47,48,46,', -',,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50,,,316,,,,,,241,,,,', -'99,313,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71', -'72,44,45,,75,,73,74,76,342,343,79,80,,,,,,81,337,345,111,110,112,113', -',,243,,,,,,,51,,,115,114,116,105,64,107,106,108,315,109,117,118,,101', -'102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,742,,,,50,,', -'316,,,,,,241,,,,,99,313,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82', -'65,89,103,104,71,72,44,45,,75,,73,74,76,342,343,79,80,,,,,,81,337,345', -'111,110,112,113,,,243,,,,,,,51,,,115,114,116,105,64,107,106,108,,109', -'117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68', -',,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78', -'24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,342,343,79,80,,,,,,81', -'337,345,111,110,112,113,,,243,,,,,,,51,,,115,114,116,105,64,107,106', -'108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66', -'67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,', -',,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,342,343,79,80', -',,,,,81,337,345,111,110,112,113,,,243,,,,,,,51,,,115,114,116,105,64', -'107,106,108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,', -'242,,,66,67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93,95,,', -',,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,33,34', -'79,80,,,,,,81,31,30,111,110,112,113,,,21,,,,,,,51,,,115,114,116,105', -'64,107,106,108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236', -',,242,,,66,67,,,68,,,,,,50,,,,,,,,,22,,,,,99,87,90,91,,92,94,93,95,', -',,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,342', -'343,79,80,,,,,,81,337,345,111,110,112,113,,,243,,,,,,,51,,,115,114,116', -'105,64,107,106,108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,', -',236,,,242,,,66,67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93', -'95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76', -'342,343,79,80,,,,,,81,337,345,111,110,112,113,,,243,,,,,,,51,,,115,114', -'116,105,64,107,106,108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,', -',,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92', -'94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73', -'74,76,342,343,79,80,,,,,,81,337,345,111,110,112,113,,,243,,,,,,,51,', -',115,114,116,105,64,107,106,108,,109,117,118,,101,102,47,48,46,,,,,', -',,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90', -'91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,', -'75,,73,74,76,342,343,79,80,,,,,,81,337,345,111,110,112,113,,,243,,,', -',,,51,,,115,114,116,105,64,107,106,108,,109,117,118,,101,102,47,48,46', -',,,,,,,,,,,,,,,,,,,236,,,242,562,,66,67,,,68,,,,,,50,,,,,,,,,241,,,', -',99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71', -'72,44,45,,75,,73,74,76,33,34,79,80,,,,,,81,31,30,111,110,112,113,,,21', -',,,,,,51,,,115,114,116,105,64,107,106,108,,109,117,118,,101,102,47,48', -'46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,,,,,22,,,,', -'99,87,90,91,,92,94,93,95,,,,,88,98,,,,,,,82,,89,103,104,,,44,45,77,78', -'24,9,65,,,,71,72,,,,75,,73,74,76,33,34,79,80,,,,,,81,31,30,111,110,112', -'113,,,21,,,,,,8,51,323,10,115,114,116,105,64,107,106,108,,109,117,118', -',101,102,47,48,46,,,,,,,,,,,,,,,,,,,,43,,,36,,,66,67,,,68,,38,,,,50', -',,,,,,,,22,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,,,416,82,,89,103', -'104,,,44,45,77,78,24,,65,,,,71,72,,,,75,,73,74,76,342,343,79,80,,,,', -',81,337,345,111,110,112,113,,,243,,,,,,,51,,,115,114,116,105,64,107', -'106,108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242', -',,66,67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93,95,,,,,88', -'98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,342,343,79', -'80,,,,,,81,337,345,111,110,112,113,,,243,,,,,,,51,,,115,114,116,105', -'64,107,106,108,315,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,', -'236,,,242,,,66,67,,,68,,,,310,,50,,,316,,,,,,241,,,,,99,313,90,91,,92', -'94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73', -'74,76,342,343,79,80,,,,,,81,337,345,111,110,112,113,,,243,,,,,,,51,', -',115,114,116,105,64,107,106,108,315,109,117,118,,101,102,47,48,46,,', -',,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,742,,310,,50,,,316,,,,,,241', -',,,,99,313,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104', -'71,72,44,45,,75,,73,74,76,342,343,79,80,,,,,,81,337,345,111,110,112', -'113,,,243,,,,,,,51,,,115,114,116,105,64,107,106,108,,109,117,118,,101', -'102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,', -',,,241,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,,,,82,,89,103,104,-272', -',44,45,,,,-272,-272,-272,,,-272,-272,-272,583,-272,580,579,578,588,581', -',,-272,-272,-272,,,,591,,,,,,-272,-272,,-272,-272,-272,-272,-272,,,', -',,,,583,586,580,579,578,588,581,,,,596,595,599,598,,591,,592,,583,,580', -'579,578,588,581,-272,,,,,,,-272,591,,,586,294,-272,,,,231,,,596,595', -'599,598,,,,592,,,586,,,,,-272,-272,,,596,595,599,598,,,,592,,,,-272', -',,-272,,77,78,24,-272,65,,,,71,72,-272,,,75,,73,74,76,342,343,79,80', -',,,,,81,337,345,111,110,112,113,,,243,,,,,,,51,,,115,114,116,105,64', -'107,106,108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,', -'242,,,66,67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93,95,,', -',,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,342,343', -'79,80,,,,,,81,337,345,111,110,112,113,,,243,,,,,,,51,,,115,114,116,105', -'64,107,106,108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236', -',,242,,,66,67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93,95', -',,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,342', -'343,79,80,,,,,,81,337,345,111,110,112,113,,,243,,,,,,,51,,,115,114,116', -'105,64,107,106,108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,', -',236,,,242,,,66,67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93', -'95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76', -'33,34,79,80,,,,,,81,31,30,111,110,112,113,,,243,,,,,,,51,,,115,114,116', -'105,64,107,106,108,315,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,', -',,,,236,,,242,,,66,67,,,68,,312,,310,,50,,,316,,,,,,241,,,,,99,313,90', -'91,,92,94,93,95,,,,,88,98,,,,,,,82,,89,103,104,-706,,44,45,,,,-706,-706', -'-706,,,-706,-706,-706,,-706,,,,,,,,-706,-706,-706,-706,-706,,,,,,,,-706', -'-706,,-706,-706,-706,-706,-706,,,,,,,,,,,,,,,,,,,,,,,-706,-706,-706', -'-706,-706,-706,-706,-706,-706,-706,-706,-706,-706,-706,,,-706,-706,-706', -',,-706,,,-706,,,-706,-706,,-706,,-706,,-706,,-706,-706,,-706,-706,-706', -'-706,-706,,-706,-706,-706,,,,,,,,,,,,,,-706,,,-706,-706,-706,-706,,-706', -',-706,,77,78,24,-706,65,,,,71,72,,,,75,,73,74,76,33,34,79,80,,,,,,81', -'31,30,111,110,112,113,,,21,,,,,,,51,,,115,114,116,105,64,107,106,108', -',109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67', -',,68,,,,,,50,,,,,,,,,22,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,,', -',82,,89,103,104,-705,,44,45,,,,-705,-705,-705,,,-705,-705,-705,,-705', -',,,,,,,-705,-705,-705,-705,-705,,,,,,,,-705,-705,,-705,-705,-705,-705', -'-705,,,,,,,,,,,,,,,,,,,,,,,-705,-705,-705,-705,-705,-705,-705,-705,-705', -'-705,-705,-705,-705,-705,,,-705,-705,-705,,,-705,,,-705,,,-705,-705', -',-705,,-705,,-705,,-705,-705,,-705,-705,-705,-705,-705,,-705,-705,-705', -',,,,,,,,,,,,,-705,,,-705,-705,-705,-705,,-705,-272,-705,,,,,-705,-272', -'-272,-272,,,-272,-272,-272,,-272,,,,,,,,-272,-272,-272,-272,,,,,,,,', -'-272,-272,,-272,-272,-272,-272,-272,,,,,,,,,,,,,,,,,,,,,,,-272,-272', -'-272,-272,-272,-272,-272,-272,-272,-272,-272,-272,-272,-272,,,-272,-272', -'-272,,,-272,,294,-272,,,-272,-272,,-272,,-272,,-272,,-272,-272,,-272', -'-272,-272,-272,-272,,-272,-272,-272,,,,,,,,,,,,,,-272,,,-272,-272,,-272', -',-272,77,78,24,,65,,-272,,71,72,,,,75,,73,74,76,342,343,79,80,,,,,,81', -'337,345,111,110,112,113,,,243,,,,,,,51,,,115,114,116,105,64,107,106', -'108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66', -'67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,', -',,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,33,34,79,80,,', -',,,81,31,30,111,110,112,113,,,21,,,,,,,51,,,115,114,116,105,64,107,106', -'108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66', -'67,,,68,,,,,,50,,,,,,,,,22,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,', -',77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,33,34,79,80,,,', -',,81,31,30,111,110,112,113,,,21,,,,,,,51,,,115,114,116,105,64,107,106', -'108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66', -'67,,,68,,,,,,50,,,,,,,,,22,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,', -',77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,33,34,79,80,,,', -',,81,31,30,111,110,112,113,,,243,,,,,,,51,,,115,114,116,105,64,107,106', -'108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66', -'67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,', -',,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,33,34,79,80,,', -',,,81,31,30,111,110,112,113,,,243,,,,,,,51,,,115,114,116,105,64,107', -'106,108,315,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242', -',,66,67,,,68,,312,,310,,50,,,316,,,,,,241,,,,,99,313,90,91,,92,94,93', -'95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76', -'342,343,79,80,,,,,,81,337,345,111,110,112,113,,,243,,,,,,,51,,,115,114', -'116,105,64,107,106,108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,', -',,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92', -'94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73', -'74,76,33,34,79,80,,,,,,81,31,30,111,110,112,113,,,243,,,,,,,51,,,115', -'114,116,105,64,107,106,108,,109,117,118,,101,102,47,48,46,,,,,,,,,,', -',,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91', -',92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75', -',73,74,76,33,34,79,80,,,,,,81,31,30,111,110,112,113,,,21,,,,,,,51,,', -'115,114,116,105,64,107,106,108,,109,117,118,,101,102,47,48,46,,,,,,', -',,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,,,,,22,,,,,99,87,90', -'91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,', -'75,,73,74,76,33,34,79,80,,,,,,81,31,30,111,110,112,113,,,21,,,,,,,51', -',,115,114,116,105,64,107,106,108,,109,117,118,,101,102,47,48,46,,,,', -',,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,,,,,22,,,,,99,87,90', -'91,,92,94,93,95,,,,,88,98,231,,,77,78,24,82,65,89,103,104,71,72,44,45', -',75,,73,74,76,342,343,79,80,,,,,,81,337,345,111,110,112,113,,,243,,', -',,,,51,,,115,114,116,105,64,107,106,108,,109,117,118,,101,102,47,48', -'46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,,,,,241,,,', -',99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71', -'72,44,45,,75,,73,74,76,342,343,79,80,,,,,,81,337,345,111,110,112,113', -',,243,,,,,,,51,,,115,114,116,105,64,107,106,108,,109,117,118,,101,102', -'47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,,,,,241', -',,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104', -'71,72,44,45,,75,,73,74,76,342,343,79,80,,,,,,81,337,345,111,110,112', -'113,,,243,,,,,,,51,,,115,114,116,105,64,107,106,108,,109,117,118,,101', -'102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,', -',,,241,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103', -'104,71,72,44,45,,75,,73,74,76,342,343,79,80,,,,,,81,337,345,111,110', -'112,113,,,243,,,,,,,51,,,115,114,116,105,64,107,106,108,,109,117,118', -',101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50', -',,,,,,,,241,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65', -'89,103,104,71,72,44,45,,75,,73,74,76,33,34,79,80,,,,,,81,31,30,111,110', -'112,113,,,243,,,,,,,51,,,115,114,116,105,64,107,106,108,,109,117,118', -',101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50', -',,,,,,,,241,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65', -'89,103,104,71,72,44,45,,75,,73,74,76,342,343,79,80,,,,,,81,337,345,111', -'110,112,113,,,243,,,,,,,51,,,115,114,116,105,64,107,106,108,,109,117', -'118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,', -',50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82', -'65,89,103,104,71,72,44,45,,75,,73,74,76,342,343,79,80,,,,,,81,337,345', -'111,110,112,113,,,243,,,,,,,51,,,115,114,116,105,64,107,106,108,,109', -'117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68', -',,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78', -'24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,342,343,79,80,,,,,,81', -'337,345,111,110,112,113,,,243,,,,,,,51,,,115,114,116,105,64,107,106', -'108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66', -'67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,', -',,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,342,343,79,80', -',,,,,81,337,345,111,110,112,113,,,243,,,,,,,51,,,115,114,116,105,64', -'107,106,108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,', -'242,,,66,67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93,95,,', -',,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,342,343', -'79,80,,,,,,81,337,345,111,110,112,113,,,243,,,,,,,51,,,115,114,116,105', -'64,107,106,108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236', -',,242,,,66,67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93,95', -',,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,342', -'343,79,80,,,,,,81,337,345,111,110,112,113,,,243,,,,,,,51,,,115,114,116', -'105,64,107,106,108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,', -',236,,,242,,,66,67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93', -'95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76', -'342,343,79,80,,,,,,81,337,345,111,110,112,113,,,243,,,,,,,51,,,115,114', -'116,105,64,107,106,108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,', -',,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92', -'94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73', -'74,76,342,343,79,80,,,,,,81,337,345,111,110,112,113,,,243,,,,,,,51,', -',115,114,116,105,64,107,106,108,,109,117,118,,101,102,47,48,46,,,,,', -',,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90', -'91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,', -'75,,73,74,76,342,343,79,80,,,,,,81,337,345,111,110,112,113,,,243,,,', -',,,51,,,115,114,116,105,64,107,106,108,,109,117,118,,101,102,47,48,46', -',,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,,,,,241,,,,,99', -'87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44', -'45,,75,,73,74,76,342,343,79,80,,,,,,81,337,345,111,110,112,113,,,243', -',,,,,,51,,,115,114,116,105,64,107,106,108,,109,117,118,,101,102,47,48', -'46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,,,,,241,,,', -',99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71', -'72,44,45,,75,,73,74,76,342,343,79,80,,,,,,81,337,345,111,110,112,113', -',,243,,,,,,,51,,,115,114,116,105,64,107,106,108,,109,117,118,,101,102', -'47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,,,,,241', -',,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104', -'71,72,44,45,,75,,73,74,76,342,343,79,80,,,,,,81,337,345,111,110,112', -'113,,,243,,,,,,,51,,,115,114,116,105,64,107,106,108,,109,117,118,,101', -'102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,', -',,,241,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103', -'104,71,72,44,45,,75,,73,74,76,342,343,79,80,,,,,,81,337,345,111,110', -'112,113,,,243,,,,,,,51,,,115,114,116,105,64,107,106,108,,109,117,118', -',101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50', -',,,,,,,,241,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65', -'89,103,104,71,72,44,45,,75,,73,74,76,342,343,79,80,,,,,,81,337,345,111', -'110,112,113,,,243,,,,,,,51,,,115,114,116,105,64,107,106,108,,109,117', -'118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,', -',50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82', -'65,89,103,104,71,72,44,45,,75,,73,74,76,342,343,79,80,,,,,,81,337,345', -'111,110,112,113,,,243,,,,,,,51,,,115,114,116,105,64,107,106,108,,109', -'117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68', -',,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78', -'24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,342,343,79,80,,,,,,81', -'337,345,111,110,112,113,,,243,,,,,,,51,,,115,114,116,105,64,107,106', -'108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66', -'67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,', -',,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,342,343,79,80', -',,,,,81,337,345,111,110,112,113,,,243,,,,,,,51,,,115,114,116,105,64', -'107,106,108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,', -'242,,,66,67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93,95,,', -',,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,342,343', -'79,80,,,,,,81,337,345,111,110,112,113,,,243,,,,,,,51,,,115,114,116,105', -'64,107,106,108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236', -',,242,,,66,67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93,95', -',,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,342', -'343,79,80,,,,,,81,337,345,111,110,112,113,,,243,,,,,,,51,,,115,114,116', -'105,64,107,106,108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,', -',236,,,242,,,66,67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93', -'95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76', -'342,343,79,80,,,,,,81,337,345,111,110,112,113,,,243,,,,,,,51,,,115,114', -'116,105,64,107,106,108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,', -',,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92', -'94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73', -'74,76,342,343,79,80,,,,,,81,337,345,111,110,112,113,,,243,,,,,,,51,', -',115,114,116,105,64,107,106,108,,109,117,118,,101,102,47,48,46,,,,,', -',,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90', -'91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,', -'75,,73,74,76,342,343,79,80,,,,,,81,337,345,111,110,112,113,,,243,,,', -',,,51,,,115,114,116,105,64,107,106,108,,109,117,118,,101,102,47,48,46', -',,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,,,,,241,,,,,99', -'87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44', -'45,,75,,73,74,76,342,343,79,80,,,,,,81,337,345,111,110,112,113,,,243', -',,,,,,51,,,115,114,116,105,64,107,106,108,,109,117,118,,101,102,47,48', -'46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,,,,,241,,,', -',99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71', -'72,44,45,,75,,73,74,76,342,343,79,80,,,,,,81,337,345,111,110,112,113', -',,243,,,,,,,51,,,115,114,116,105,64,107,106,108,,109,117,118,,101,102', -'47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,,,,,241', -',,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104', -'71,72,44,45,,75,,73,74,76,342,343,79,80,,,,,,81,337,345,111,110,112', -'113,,,243,,,,,,,51,,,115,114,116,105,64,107,106,108,,109,117,118,,101', -'102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,', -',,,241,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103', -'104,71,72,44,45,,75,,73,74,76,33,34,79,80,,,,,,81,31,30,111,110,112', -'113,,,21,,,,,,,51,,,115,114,116,105,64,107,106,108,,109,117,118,,101', -'102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,', -',,,22,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103', -'104,71,72,44,45,,75,,73,74,76,342,343,79,80,,,,,,81,337,345,111,110', -'112,113,,,243,,,,,,,51,,,115,114,116,105,64,107,106,108,,109,117,118', -',101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50', -',,,,,,,,241,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65', -'89,103,104,71,72,44,45,,75,,73,74,76,342,343,79,80,,,,,,81,337,345,111', -'110,112,113,,,243,,,,,,,51,,,115,114,116,105,64,107,106,108,,109,117', -'118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,432', -',,,50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24', -'82,65,89,103,104,71,72,44,45,,75,,73,74,76,33,34,79,80,,,,,,81,31,30', -'111,110,112,113,,,21,,,,,,,51,,,115,114,116,105,64,107,106,108,,109', -'117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68', -',,,,,50,,,,,,,,,22,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24', -'82,65,89,103,104,71,72,44,45,,75,,73,74,76,342,343,79,80,,,,,,81,337', -'345,111,110,112,113,,,243,,,,,,,51,,,115,114,116,105,64,107,106,108', -',109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67', -',,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77', -'78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,342,343,79,80,,,,,', -'81,337,345,111,110,112,113,,,243,,,,,,,51,,,115,114,116,105,64,107,106', -'108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66', -'67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,', -',,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,33,34,79,80,,', -',,,81,31,30,111,110,112,113,,,243,,,,,,,51,,,115,114,116,105,64,107', -'106,108,315,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242', -',,66,67,,,68,,312,,310,,50,,,316,,,,,,241,,,,,99,313,90,91,,92,94,93', -'95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,516,,75,,73,74,76', -'33,34,79,80,,,,,,81,31,30,111,110,112,113,,,243,,,,,,,51,,,115,114,116', -'105,64,107,106,108,315,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,', -',,,,236,,,242,,,66,67,,,68,,312,,310,,50,,,316,,,,,,241,,,,,99,313,90', -'91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,', -'75,,73,74,76,33,34,79,80,,,,,,81,31,30,111,110,112,113,,,243,,,,,,,51', -',,115,114,116,105,64,107,106,108,315,109,117,118,,101,102,47,48,46,', -',,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,312,,310,,50,,,316,,,,,,241', -',,,,99,313,90,91,,92,94,93,95,,,,,88,98,231,,,77,78,24,82,65,89,103', -'104,71,72,44,45,,75,,73,74,76,342,343,79,80,,,,,,81,337,345,111,110', -'112,113,,,243,,,,,,,51,,,115,114,116,105,64,107,106,108,315,109,117', -'118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,742', -',310,,50,,,316,,,,,,241,,,,,99,313,90,91,,92,94,93,95,,,,,88,98,,,,77', -'78,24,82,65,89,103,104,71,72,44,516,,75,,73,74,76,342,343,79,80,,,,', -',81,337,345,111,110,112,113,,,243,,,,,,,51,,,115,114,116,105,64,107', -'106,108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242', -',,66,67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93,95,,,,,88', -'98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,33,34,79,80', -',,,,,81,31,30,111,110,112,113,,,243,,,,,,,51,,,115,114,116,105,64,107', -'106,108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242', -',,66,67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93,95,,,,,88', -'98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,342,343,79', -'80,,,,,,81,337,345,111,110,112,113,,,243,,,,,,,51,,,115,114,116,105', -'64,107,106,108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236', -',,242,,,66,67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93,95', -',,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,342', -'343,79,80,,,,,,81,337,345,111,110,112,113,,,243,,,,,,,51,,,115,114,116', -'105,64,107,106,108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,', -',236,,,242,,,66,67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92,94,93', -'95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76', -'342,343,79,80,,,,,,81,337,345,111,110,112,113,,,243,,,,,,,51,,,115,114', -'116,105,64,107,106,108,,109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,', -',,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91,,92', -'94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73', -'74,76,33,34,79,80,,,,,,81,31,30,111,110,112,113,,,243,,,,,,,51,,,115', -'114,116,105,64,107,106,108,,109,117,118,,101,102,47,48,46,,,,,,,,,,', -',,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,,,,,241,,,,,99,87,90,91', -',92,94,93,95,,,,,88,98,,,,,,,82,,89,103,104,,,44,45,77,78,24,9,65,,', -',71,72,,,,75,,73,74,76,33,34,79,80,,,,,,81,31,30,111,110,112,113,,,21', -',,,,,8,51,,10,115,114,116,105,64,107,106,108,,109,117,118,,101,102,47', -'48,46,,,,,,,,,,,,,,,,,,,,43,,,36,,,66,67,,,68,,38,,,,50,,,,,,,,,22,', -',,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71', -'72,44,45,,75,,73,74,76,33,34,79,80,,,,,,81,31,30,111,110,112,113,,,243', -',,,,,,51,,,115,114,116,105,64,107,106,108,,109,117,118,,101,102,47,48', -'46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,,,,,241,,,', -',99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71', -'72,44,45,,75,,73,74,76,33,34,79,80,,,,,,81,31,30,111,110,112,113,,,243', -',,,,,,51,,,115,114,116,105,64,107,106,108,,109,117,118,,101,102,47,48', -'46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,,,50,,,,,,,,,241,,,', -',99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71', -'72,44,45,,75,,73,74,76,342,343,79,80,,,,,,81,337,345,111,110,112,113', -',,243,,,,,,,51,,,115,114,116,105,64,107,106,108,315,109,117,118,,101', -'102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,,,68,,,,310,,50,,', -'316,,,,,,241,,,,,99,313,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82', -'65,89,103,104,71,72,44,45,,75,,73,74,76,342,343,79,80,,,,,,81,337,345', -'111,110,112,113,,,243,,,,,,,51,,,115,114,116,105,64,107,106,108,315', -'109,117,118,,101,102,47,48,46,,,,,,,,,,,,,,,,,,,,236,,,242,,,66,67,', -',68,,742,,310,,50,,,316,,,,,,241,,,,,99,313,90,91,,92,94,93,95,,,,,88', -'98,,,,77,78,24,82,65,89,103,104,71,72,44,45,,75,,73,74,76,342,343,79', -'80,,,,,,81,337,345,111,110,112,113,,,243,,,,,,,338,,,115,114,116,105', -'64,107,106,108,,109,117,118,,101,102,,,346,,,,,,,,,,,,,,,,,,,,390,,', -'36,,,66,67,,,68,,38,,,,,,,,,,,,,,,,,,99,87,90,91,,92,94,93,95,,,,,88', -'98,,,,77,78,24,82,65,89,103,104,71,72,,,,75,,73,74,76,342,343,79,80', -',,,,,81,337,345,111,110,112,113,,,243,,,,,,,338,,,115,114,116,105,64', -'107,106,108,,109,117,118,,101,102,,,346,,,,,,,,,,,,,,,,,,,,390,,,36', -',,66,67,,,68,,38,,,,,,,,,,,,,,,,,,99,87,90,91,,92,94,93,95,,,,,88,98', -',,,77,78,24,82,65,89,103,104,71,72,,,,75,,73,74,76,342,343,79,80,,,', -',,81,337,345,111,110,112,113,,,243,,,,,,,338,,,115,114,116,105,64,107', -'106,108,,109,117,118,,101,102,,,346,,,,,,,,,,,,,,,,,,,,334,,,330,,,66', -'67,,,68,,,,,,,,,,,,,,,,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77', -'78,24,82,65,89,103,104,71,72,,,,75,,73,74,76,342,343,79,80,,,,,,81,337', -'345,111,110,112,113,,,243,,,,,,,338,,,115,114,116,395,64,107,106,396', -',109,117,118,,101,102,,,346,,,,,,,,,,,,,,,,,,,,397,,,242,,,66,67,,,68', -',,,,,,,,,,,,,,,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82', -'65,89,103,104,71,72,,,,75,,73,74,76,342,343,79,80,,,,,,81,337,345,111', -'110,112,113,,,243,,,,,,,338,,,115,114,116,105,64,107,106,108,,109,117', -'118,,101,102,,,346,,,,,,,,,,,,,,,,,,,,334,,,330,,,66,67,,,68,,,,,,,', -',,,,,,,,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89', -'103,104,71,72,,,,75,,73,74,76,342,343,79,80,,,,,,81,337,345,111,110', -'112,113,,,243,,,,,,,338,,,115,114,116,105,64,107,106,108,,109,117,118', -',101,102,,,346,,,,,,,,,,,,,,,,,,,,334,,,330,,,66,67,,,68,,,,,,,,,,,', -',,,,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103', -'104,71,72,,,,75,,73,74,76,342,343,79,80,,,,,,81,337,345,111,110,112', -'113,,,243,,,,,,,338,,,115,114,116,105,64,107,106,108,,109,117,118,,101', -'102,,,346,,,,,,,,,,,,,,,,,,,,1105,,,242,,,66,67,,,68,,,,,,,,,,,,,,,', -',,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104', -'71,72,,,,75,,73,74,76,342,343,79,80,,,,,,81,337,345,111,110,112,113', -',,243,,,,,,,338,,,115,114,116,105,64,107,106,108,,109,117,118,,101,102', -',,346,,,,,,,,,,,,,,,,,,,,1111,,,242,,,66,67,,,68,,,,,,,,,,,,,,,,,,,', -'99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72', -',,,75,,73,74,76,342,343,79,80,,,,,,81,337,345,111,110,112,113,,,243', -',,,,,,338,,,115,114,116,395,64,107,106,396,,109,117,118,,101,102,,,346', -',,,,,,,,,,,,,,,,402,,,397,,,242,,,66,67,,,68,,,,,,,,,,,,,,,,,,,,99,87', -'90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,,,,75', -',73,74,76,342,343,79,80,,,,,,81,337,345,111,110,112,113,,,243,,,,,,', -'338,,,115,114,116,105,64,107,106,108,,109,117,118,,101,102,,,346,,,', -',,,,,,,,,,,,,,,,390,,,36,,,66,67,,,68,,38,,,,,,,,,,,,,,,,,,99,87,90', -'91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,,,,75,', -'73,74,76,342,343,79,80,,,,,,81,337,345,111,110,112,113,,,243,,,,,,,338', -',,115,114,116,105,64,107,106,108,,109,117,118,,101,102,,,346,,,,,,,', -',,,,,,,,,,,,1105,,,242,,,66,67,,,68,,,,,,,,,,,,,,,,,,,,99,87,90,91,', -'92,94,93,95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,,,,75,,73,74', -'76,342,343,79,80,,,,,,81,337,345,111,110,112,113,,,243,,,,,,,338,,,115', -'114,116,105,64,107,106,108,,109,117,118,,101,102,,,346,,,,,,,,,,,,,', -',,,,,,334,,,330,,,66,67,,,68,,,,,,,,,,,,,,,,,,,,99,87,90,91,,92,94,93', -'95,,,,,88,98,,,,77,78,24,82,65,89,103,104,71,72,,,,75,,73,74,76,342', -'343,79,80,,,,,,81,337,345,111,110,112,113,,,243,,,,,,,338,,,115,114', -'116,105,64,107,106,108,,109,117,118,,101,102,,,346,,,,,,,,,,,,,,,,,', -',,334,,,242,,,66,67,,,68,,,583,,580,579,578,588,581,,,,,,,,,591,,99', -'87,90,91,,92,94,93,95,,,,,88,98,,,,348,,586,82,,89,103,104,77,78,24', -',65,599,598,,71,72,592,,,75,,73,74,76,342,343,79,80,,,,,,81,337,345', -'111,110,112,113,,,243,,,,,,,338,,,115,114,116,105,64,107,106,108,,109', -'117,118,,101,102,,,346,,,,,,,,,,,,,,,,,,,,334,,,330,,,66,67,,,68,,,', -',,,,,,,,,,,,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,77,78,24,82,65', -'89,103,104,71,72,,,,75,,73,74,76,342,343,79,80,,,,,,81,337,345,111,110', -'112,113,,,243,,,,,,,338,,,115,114,116,105,64,107,106,108,,109,117,118', -',101,102,,,346,,,,,,,,,,,,,,,,,,,,334,,,242,,,66,67,,,68,,,583,,580', -'579,578,588,581,,,,,,,,,591,,99,87,90,91,,92,94,93,95,,,,,88,98,,,,544', -',586,82,,89,103,104,77,78,24,,65,599,598,,71,72,592,,,75,,73,74,76,342', -'343,79,80,,,,,,81,337,345,111,110,112,113,,,243,,,,,,,338,,,115,114', -'116,105,64,107,106,108,,109,117,118,,101,102,,,346,,,,,,,,,,,,,,,,,', -',,334,,,330,,,66,67,,,68,,329,,,,,,,,,,,,,,,,,,99,87,90,91,,92,94,93', -'95,,,,,88,98,,,,,,,82,,89,103,104,182,193,183,206,179,199,189,188,209', -'210,204,187,186,181,207,211,212,191,180,194,198,200,192,185,,,,201,208', -'203,202,195,205,190,178,197,196,,,,,,177,184,175,176,172,173,174,135', -'137,,,136,,,,,,,,166,167,,163,145,146,147,154,151,153,,,148,149,,,,168', -'169,155,156,,,,,,,,,,,,,,160,159,,144,165,162,161,170,157,158,152,150', -'142,164,143,,,171,99,,,,,,,,,,,,,,98,182,193,183,206,179,199,189,188', -'209,210,204,187,186,181,207,211,212,191,180,194,198,200,192,185,,,,201', -'208,203,202,195,205,190,178,197,196,,,,,,177,184,175,176,172,173,174', -'135,137,134,,136,,,,,,,,166,167,,163,145,146,147,154,151,153,,,148,149', -',,,168,169,155,156,,,,,,,,,,,,,,160,159,,144,165,162,161,170,157,158', -'152,150,142,164,143,,,171,99,,,,,,,,,,,,,,98,182,193,183,206,179,199', -'189,188,209,210,204,187,186,181,207,211,212,191,180,194,198,200,192', -'185,,,,201,208,203,202,195,205,190,178,197,196,,,,,,177,184,175,176', -'172,173,174,135,137,,,136,,,,,,,,166,167,,163,145,146,147,154,151,153', -',,148,149,,,,168,169,155,156,,,,,,,,,,,,,,160,159,,144,165,162,161,170', -'157,158,152,150,142,164,143,,,171,99,,,,,,,,,,,,,,98,182,193,183,206', -'179,199,189,188,209,210,204,187,186,181,207,211,212,191,180,194,198', -'200,192,185,,,,201,208,203,202,195,205,190,178,197,196,,,,,,177,184', -'175,176,172,173,174,135,137,,,136,,,,,,,,166,167,,163,145,146,147,154', -'151,153,,,148,149,,,,168,169,155,156,,,,,,,,,,,,,,160,159,,144,165,162', -'161,170,157,158,152,150,142,164,143,,,171,99,111,110,112,113,,,583,', -'580,579,578,588,581,98,,,115,114,116,720,,591,,723,986,,,,,101,102,', -',346,591,,,,,,,,,586,,,,,,,,,,722,599,598,704,,,592,702,,,703,,885,', -',,,,,592,,,,,,,721,,,,99,987,90,91,,92,94,93,95,,,,,88,98,111,110,112', -'113,,,82,,89,103,104,,,708,709,,115,114,116,720,,,583,723,580,579,578', -'588,581,101,102,,,346,,,,591,,,,,,,,,,,,,,,,722,,,704,,,586,702,,,703', -',,,,596,595,599,598,,,,592,,,,721,,,,99,87,90,91,,92,94,93,95,,,,,88', -'98,111,110,112,113,,,82,,89,103,104,,,708,709,,115,114,116,720,,,583', -'723,580,579,578,588,581,101,102,,,346,,,,591,,,,,,,,,,,,,,,,722,,,704', -',,586,702,,,703,,,,,596,595,599,598,,,,592,,,,721,,,,99,87,90,91,,92', -'94,93,95,,,,,88,98,,,,,,,82,,89,103,104,,,708,709,182,193,183,206,179', -'199,189,188,209,210,204,187,186,181,207,211,212,191,180,194,198,200', -'192,185,,,,201,208,203,202,195,205,190,178,197,196,,,,,,177,184,175', -'176,172,173,174,135,137,,,136,,,,,,,,166,167,,163,145,146,147,154,151', -'153,,,148,149,,,,168,169,155,156,,,,,,,,,,,,,,160,159,,144,165,162,161', -'170,157,158,152,150,142,164,143,,,171,111,110,112,113,,,583,,580,579', -'578,588,581,,,,115,114,116,720,,591,,723,,,,,,101,102,,,346,,,,,,,,', -',586,,,,,,,,,,722,599,598,704,,,592,702,,,703,,,,,,,,,,,,,,,,721,,,', -'99,87,90,91,,92,94,93,95,,,,,88,98,111,110,112,113,,,82,,89,103,104', -',,708,709,,115,114,116,720,,,583,723,580,579,578,588,581,101,102,,,346', -',,,591,,,,,,,,,,,,,,,,722,,,704,,,586,702,,,703,,885,,,596,595,599,598', -',,,592,,,,721,,,,99,87,90,91,,92,94,93,95,,,,,88,98,111,110,112,113', -',,82,,89,103,104,,,708,709,,115,114,116,720,,,583,723,580,579,578,588', -'581,101,102,,,346,,,,591,,,,,,,,,,,,,,,,722,,,704,,,586,702,,,703,,', -',,596,595,599,598,,,,592,,,,721,,,,99,87,90,91,,92,94,93,95,,,,,88,98', -'111,110,112,113,,,82,,89,103,104,,,708,709,,115,114,116,720,,,583,723', -'580,579,578,588,581,101,102,,,346,,,,591,,,,,,,,,,,,,,,,722,,,704,,', -'586,702,,,703,,885,,,,,599,598,,,,592,,,,721,,,,99,87,90,91,,92,94,93', -'95,,,,,88,98,111,110,112,113,,,82,,89,103,104,,,708,709,,115,114,116', -'720,,,583,723,580,579,578,588,581,101,102,,,346,,,,591,,,,,,,,,,,,,', -',,722,,,704,,,586,702,,,703,,,,,,,599,598,,,,592,,,,721,,,,99,87,90', -'91,,92,94,93,95,,,,,88,98,111,110,112,113,,,82,,89,103,104,,,708,709', -',115,114,116,720,,,583,723,580,579,578,588,581,101,102,,,346,,,,591', -',,,,,,,,,,,,,,,722,,,704,,,586,702,,,703,,,,,,,599,598,,,,592,,,,721', -',,,99,87,90,91,,92,94,93,95,,,,,88,98,111,110,112,113,,,82,,89,103,104', -',,708,709,,115,114,116,720,,,583,723,580,579,578,588,581,101,102,,,346', -',,,591,,,,,,,,,,,,,,,,722,,,704,,,586,702,,,703,,999,,,,,599,598,,,', -'592,,,,721,,,,99,87,90,91,,92,94,93,95,,,,,88,98,111,110,112,113,,,82', -',89,103,104,,,708,709,,115,114,116,720,,,583,723,580,579,578,588,581', -'101,102,,,346,,,,591,,,,,,,,,,,,,,,,722,,,704,,,586,702,,,703,,,,,596', -'595,599,598,,,,592,,,,721,,,,99,87,90,91,,92,94,93,95,,,,,88,98,111', -'110,112,113,,,82,,89,103,104,,,708,709,,115,114,116,720,,,,723,986,', -',,,101,102,,,346,591,,,,,,,,,,,,,,,,,,,722,,,704,,,,702,,,703,,885,', -',,,,,592,,,,,,,721,,,,99,987,90,91,,92,94,93,95,,,,,88,98,111,110,112', -'113,,,82,,89,103,104,,,708,709,,115,114,116,720,,,583,723,580,579,578', -'588,581,101,102,,,346,,,,591,,,,,,,,,,,,,,,,722,,,704,,,586,702,,,703', -',,,,,,599,598,,,,592,,,,721,,,,99,87,90,91,,92,94,93,95,,,,,88,98,111', -'110,112,113,,,82,,89,103,104,,,708,709,,115,114,116,720,,,583,723,580', -'579,578,588,581,101,102,,,346,,,,591,,,,,,,,,,,,,,,,722,,,704,,,586', -'702,,,703,,,,,,,599,598,,,,592,,,,721,,,,99,87,90,91,,92,94,93,95,,', -',,88,98,111,110,112,113,,,82,,89,103,104,,,708,709,,115,114,116,720', -',,583,723,580,579,578,588,581,101,102,,,346,,,,591,,,,,,,,,,,,,,,,722', -',,704,,,586,702,,,703,,885,,,596,595,599,598,,,,592,,,,721,,,,99,87', -'90,91,,92,94,93,95,,,,,88,98,231,111,110,112,113,,82,,89,103,104,,,708', -'709,,,115,114,116,720,,,,723,986,,,,,101,102,,,346,591,,,,,,,,,,,,,', -',,,,,722,,,704,,,,702,,,703,,885,,,,,,,592,,,,,,,721,,,,99,987,90,91', -',92,94,93,95,,,,,88,98,,,,,,,82,,89,103,104,,,708,709,182,193,183,206', -'179,199,189,188,209,210,204,187,186,181,207,211,212,191,180,194,198', -'200,192,185,,,,201,208,203,282,281,283,280,178,197,196,,,,,,177,184', -'175,176,277,278,279,275,137,107,106,276,,109,,,,,,166,167,,163,145,146', -'147,154,151,153,,,148,149,,,,168,169,155,156,,,,,,287,,,,,,,,160,159', -',144,165,162,161,170,157,158,152,150,142,164,143,,,171,111,110,112,113', -',,,583,,580,579,578,588,581,,,115,114,116,,,,591,,,,,,,101,102,,,346', -'111,110,112,113,,,,,,,586,642,,,,,115,114,116,596,595,599,598,,,,592', -',,101,102,,,346,,,,,,,,,,,,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,,', -',,,,82,,89,103,104,,,,,,,,,99,87,90,91,,92,94,93,95,,,,,88,98,111,110', -'112,113,,,82,,89,103,104,,,,,,115,114,116,1195,469,,,1196,,,,,,101,102', -'166,167,346,163,145,146,147,154,151,153,,,148,149,,,,168,169,155,156', -',,,,,294,,,,,,,,160,159,,144,165,162,161,170,157,158,152,150,142,164', -'143,,,171,99,87,90,91,,92,94,93,95,,,,,88,98,846,462,,,847,,82,,89,103', -'104,,166,167,,163,145,146,147,154,151,153,,,148,149,,,,168,169,155,156', -',,,,,294,,,,,,,,160,159,,144,165,162,161,170,157,158,152,150,142,164', -'143,512,462,171,,513,,,,,,,,166,167,,163,145,146,147,154,151,153,,,148', -'149,,,,168,169,155,156,,,,,,294,,,,,,,,160,159,,144,165,162,161,170', -'157,158,152,150,142,164,143,693,469,171,,694,,,,,,,,166,167,,163,145', -'146,147,154,151,153,,,148,149,,,,168,169,155,156,,,,,,294,,,,,,,,160', -'159,,144,165,162,161,170,157,158,152,150,142,164,143,819,469,171,,820', -',,,,,,,166,167,,163,145,146,147,154,151,153,,,148,149,,,,168,169,155', -'156,,,,,,294,,,,,,,,160,159,,144,165,162,161,170,157,158,152,150,142', -'164,143,691,462,171,,692,,,,,,,,166,167,,163,145,146,147,154,151,153', -',,148,149,,,,168,169,155,156,,,,,,294,,,,,,,,160,159,,144,165,162,161', -'170,157,158,152,150,142,164,143,693,469,171,,694,,,,,,,,166,167,,163', -'145,146,147,154,151,153,,,148,149,,,,168,169,155,156,,,,,,294,,,,,,', -',160,159,,144,165,162,161,170,157,158,152,150,142,164,143,755,469,171', -',756,,,,,,,,166,167,,163,145,146,147,154,151,153,,,148,149,,,,168,169', -'155,156,,,,,,294,,,,,,,,160,159,,144,165,162,161,170,157,158,152,150', -'142,164,143,816,469,171,,817,,,,,,,,166,167,,163,145,146,147,154,151', -'153,,,148,149,,,,168,169,155,156,,,,,,294,,,,,,,,160,159,,144,165,162', -'161,170,157,158,152,150,142,164,143,512,462,171,,513,,,,,,,,166,167', -',163,145,146,147,154,151,153,,,148,149,,,,168,169,155,156,,,,,,,,,,', -',,,160,159,,144,165,162,161,170,157,158,152,150,142,164,143,465,469', -'171,,464,,,,,,,,166,167,,163,145,146,147,154,151,153,,,148,149,,,,168', -'169,155,156,,,,,,294,,,,,,,,160,159,,144,165,162,161,170,157,158,152', -'150,142,164,143,814,462,171,,815,,,,,,,,166,167,,163,145,146,147,154', -'151,153,,,148,149,,,,168,169,155,156,,,,,,294,,,,,,,,160,159,,144,165', -'162,161,170,157,158,152,150,142,164,143,691,462,171,,692,,,,,,,,166', -'167,,163,145,146,147,154,151,153,,,148,149,,,,168,169,155,156,,,,,,294', -',,,,,,,160,159,,144,165,162,161,170,157,158,152,150,142,164,143,752', -'462,171,,753,,,,,,,,166,167,,163,145,146,147,154,151,153,,,148,149,', -',,168,169,155,156,,,,,,294,,,,,,,,160,159,,144,165,162,161,170,157,158', -'152,150,142,164,143,1190,469,171,,1189,,,,,,,,166,167,,163,145,146,147', -'154,151,153,,,148,149,,,,168,169,155,156,,,,,,294,,,,,,,,160,159,,144', -'165,162,161,170,157,158,152,150,142,164,143,1193,462,171,,1194,,,,,', -',,166,167,,163,145,146,147,154,151,153,,,148,149,,,,168,169,155,156', -',,,,,294,,,,,,,,160,159,,144,165,162,161,170,157,158,152,150,142,164', -'143,849,469,171,,848,,,,,,,,166,167,,163,145,146,147,154,151,153,,,148', -'149,,,,168,169,155,156,,,,,,294,,,,,,,,160,159,,144,165,162,161,170', -'157,158,152,150,142,164,143,458,462,171,,459,,,,,,,,166,167,,163,145', -'146,147,154,151,153,,,148,149,,,,168,169,155,156,,,,,,294,,,,,,,,160', -'159,,144,165,162,161,170,157,158,152,150,142,164,143,,,171' ] - racc_action_table = arr = ::Array.new(28164, nil) - idx = 0 - clist.each do |str| - str.split(',', -1).each do |i| - arr[idx] = i.to_i unless i.empty? - idx += 1 - end - end - -clist = [ -'465,380,1194,1193,730,1112,827,465,465,465,69,1196,877,465,465,988,465', -'999,1158,411,1206,1006,509,509,465,465,379,281,620,340,29,339,703,988', -'281,412,465,465,1032,465,465,465,465,465,593,282,474,474,21,703,1054', -'1108,282,624,1052,480,762,762,877,826,639,639,593,869,1006,812,465,465', -'465,465,465,465,465,465,465,465,465,465,465,465,1195,1109,465,465,465', -'411,465,465,1196,21,465,730,281,465,29,339,623,69,465,999,465,412,465', -'465,623,465,465,465,465,465,282,465,465,465,480,827,509,29,339,380,1194', -'1193,869,1112,380,1194,1193,465,1112,1196,465,465,620,465,1196,465,1158', -'620,1206,693,474,1158,465,1206,379,465,693,693,693,379,762,693,693,693', -'639,693,1032,1195,747,639,234,1032,828,693,693,693,693,693,1054,1108', -'747,622,1052,1054,1108,693,693,1052,693,693,693,693,693,812,350,843', -'812,872,812,46,46,1061,3,1061,235,237,1088,3,1195,1109,847,346,346,1195', -'1109,693,693,693,693,693,693,693,693,693,693,693,693,693,693,234,243', -'693,693,693,846,693,693,872,692,693,532,350,693,693,654,693,656,693', -'406,693,845,693,693,350,693,693,693,693,693,848,693,693,693,235,237', -'691,848,848,848,847,1088,1088,848,848,621,848,693,46,46,693,693,693', -'693,848,693,283,693,1088,914,346,346,693,283,846,693,848,848,692,848', -'848,848,848,848,873,532,532,532,341,654,654,656,656,406,406,406,970', -'239,1076,654,722,656,532,238,722,691,848,848,848,848,848,848,848,848', -'848,848,848,848,848,848,873,914,848,848,848,19,848,848,914,1199,848', -'283,409,848,438,1056,617,914,848,1199,848,438,848,848,408,848,848,848', -'848,848,438,848,849,848,459,970,914,439,345,849,849,849,1076,1076,1076', -'849,849,848,849,701,848,848,19,848,701,848,849,849,701,1076,854,1056', -'848,876,19,848,914,876,849,849,236,849,849,849,849,849,409,409,409,438', -'362,459,362,362,362,362,362,27,408,408,408,347,384,459,27,362,439,384', -'849,849,849,849,849,849,849,849,849,849,849,849,849,849,607,458,849', -'849,849,362,849,849,397,606,849,410,397,849,362,362,362,362,849,413', -'849,362,849,849,407,849,849,849,849,849,105,849,849,849,676,41,960,105', -'105,105,27,960,105,105,105,274,105,849,458,605,849,849,274,849,105,849', -'105,105,105,319,458,362,849,601,319,849,105,105,601,105,105,105,105', -'105,870,410,410,410,604,756,275,676,41,413,413,413,756,275,407,407,407', -'756,602,676,41,756,105,105,105,105,105,105,105,105,105,105,105,105,105', -'105,274,276,105,105,105,817,105,105,276,600,105,878,817,105,105,879', -'105,817,105,597,105,817,105,105,883,105,105,105,105,105,277,105,108', -'105,756,275,884,277,885,108,108,108,49,49,108,108,108,105,108,888,105', -'105,105,105,585,105,108,105,108,108,108,817,105,575,370,105,276,370', -'108,108,817,108,108,108,108,108,886,387,49,49,574,1151,278,279,387,280', -'886,572,1151,278,279,799,280,387,799,277,900,1151,108,108,108,108,108', -'108,108,108,108,108,108,108,108,108,903,18,108,108,108,904,108,108,18', -'571,108,570,886,108,108,913,108,18,108,569,108,387,108,108,886,108,108', -'108,108,108,387,108,694,108,1151,278,279,42,280,694,694,694,85,213,694', -'694,694,108,694,918,108,108,108,108,85,108,694,108,694,694,694,921,108', -'922,85,108,18,371,694,694,371,694,694,694,694,694,925,134,927,1110,928', -'1104,134,134,42,930,1110,586,1104,586,586,586,932,586,934,1110,42,1104', -'694,694,694,694,694,694,694,694,694,694,694,694,694,694,935,1074,694', -'694,694,1131,694,694,1131,937,694,1074,586,694,694,940,694,568,694,119', -'694,586,694,694,947,694,694,694,694,694,464,694,1110,694,1104,1055,1055', -'464,464,464,774,774,374,464,464,374,464,694,950,1074,694,694,694,694', -'464,694,565,694,800,800,564,1074,694,1165,1165,694,464,464,354,464,464', -'464,464,464,705,705,15,15,768,389,768,768,768,768,768,1118,389,1118', -'1118,1118,1217,1118,957,768,959,389,464,464,464,464,464,464,464,464', -'464,464,464,464,464,464,377,377,464,464,464,768,464,464,53,966,464,967', -'1118,464,768,768,768,768,464,968,464,768,464,464,969,464,464,464,464', -'464,1091,464,356,464,389,52,399,51,979,980,1091,549,54,399,981,982,554', -'464,549,54,464,464,399,464,991,464,351,549,54,992,993,768,464,351,997', -'464,330,330,330,330,330,330,351,1091,1091,330,330,998,1091,360,330,752', -'330,330,330,330,330,330,330,537,537,537,537,537,330,330,330,330,330', -'330,330,399,550,330,1003,545,549,54,1013,330,330,330,330,330,330,330', -'330,330,330,330,330,351,330,330,330,233,330,330,330,330,330,632,233', -'752,1014,388,1016,1017,632,1018,752,233,388,1020,1021,752,1022,632,543', -'752,330,388,540,330,43,539,330,330,820,364,330,368,330,1048,1049,820', -'330,523,752,40,820,519,647,647,820,330,647,647,647,518,330,330,330,330', -'1065,330,330,330,330,517,233,388,25,330,330,1075,632,372,752,1083,388', -'330,1085,330,330,330,492,1102,330,330,955,955,955,955,955,955,491,490', -'1105,955,955,489,1111,820,955,395,955,955,955,955,955,955,955,6,6,6', -'6,6,955,955,955,955,955,955,955,373,781,955,781,781,781,1114,781,955', -'955,955,955,955,955,955,955,955,955,955,955,1115,955,955,955,335,955', -'955,955,955,955,333,335,395,1116,391,1117,17,333,781,395,335,391,16', -'1129,395,1130,333,781,395,955,391,375,955,1139,1141,955,955,332,1144', -'955,1145,955,1146,1147,332,955,1149,395,476,487,1154,14,466,332,955', -'385,13,386,1164,955,955,955,955,12,955,955,955,955,1170,335,391,1175', -'955,955,457,333,456,395,454,391,955,487,955,955,955,487,487,955,955', -'382,382,382,382,382,382,440,436,1189,382,382,1190,1192,332,382,396,382', -'382,382,382,382,382,382,322,322,322,322,322,382,382,382,382,382,382', -'382,10,941,382,941,941,941,7,941,382,382,382,382,382,382,382,382,382', -'382,382,382,771,382,382,382,331,382,382,382,382,382,771,331,396,1197', -'629,433,392,431,941,396,331,629,430,401,396,390,428,941,396,382,629', -'422,382,698,721,382,382,724,696,382,727,382,729,771,771,382,695,396', -'771,488,307,735,736,737,382,739,741,293,308,382,382,382,382,687,382', -'382,382,382,749,331,629,751,382,382,311,1202,754,396,1203,629,382,488', -'382,382,382,488,488,382,382,1107,1107,1107,1107,1107,1107,757,758,682', -'1107,1107,761,323,764,1107,753,1107,1107,1107,1107,1107,1107,1107,367', -'367,367,367,367,1107,1107,1107,1107,1107,1107,1107,324,502,1107,326', -'677,327,328,668,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107,1107', -'1107,334,1107,1107,1107,783,1107,1107,1107,1107,1107,784,786,753,502', -'661,659,503,502,502,753,502,502,802,808,753,809,651,813,753,1107,1204', -'1205,1107,1,337,1107,1107,1211,338,1107,785,1107,785,785,785,1107,785', -'753,503,822,,,503,503,1107,503,503,,,1107,1107,1107,1107,,1107,1107', -'1107,1107,,,,,1107,1107,,,,753,,,1107,,1107,1107,1107,,,1107,1107,325', -'325,325,325,325,325,,,,325,325,,,,325,755,325,325,325,325,325,325,325', -',,,,,325,325,325,325,325,325,325,,942,325,942,942,942,,942,325,325,325', -'325,325,325,325,325,325,325,325,325,,325,325,325,,325,325,325,325,325', -',1119,755,1119,1119,1119,,1119,942,755,,,,,755,,,,755,325,,,325,,,325', -'325,,,325,1068,325,1068,1068,1068,325,1068,755,1119,1174,,1174,1174', -'1174,325,1174,,,,325,325,325,325,,325,325,325,325,,,,,325,325,,,,755', -',,325,,325,325,325,,,325,325,1067,1067,1067,1067,1067,1067,,,,1067,1067', -',,,1067,814,1067,1067,1067,1067,1067,1067,1067,,,,,,1067,1067,1067,1067', -'1067,1067,1067,,,1067,,,,,,1067,1067,1067,1067,1067,1067,1067,1067,1067', -'1067,1067,1067,,1067,1067,1067,,1067,1067,1067,1067,1067,,,814,,,,,', -',814,,,,,814,,,,814,1067,,,1067,,,1067,1067,,,1067,,1067,,,,1067,,814', -',,,,,,1067,,,,,1067,1067,1067,1067,,1067,1067,1067,1067,814,,,,1067', -'1067,,,,814,,,1067,,1067,1067,1067,,,1067,1067,1066,1066,1066,1066,1066', -'1066,,,,1066,1066,,,,1066,815,1066,1066,1066,1066,1066,1066,1066,,,', -',,1066,1066,1066,1066,1066,1066,1066,,,1066,,,,,,1066,1066,1066,1066', -'1066,1066,1066,1066,1066,1066,1066,1066,,1066,1066,1066,,1066,1066,1066', -'1066,1066,,,815,,,,,,,815,,,,,815,,,,815,1066,,,1066,,,1066,1066,,,1066', -',1066,,,,1066,,815,,,,,,,1066,,,,,1066,1066,1066,1066,,1066,1066,1066', -'1066,815,,,,1066,1066,,,,815,,,1066,,1066,1066,1066,,,1066,1066,823', -'823,823,823,823,823,,,,823,823,,,,823,816,823,823,823,823,823,823,823', -',,,,,823,823,823,823,823,823,823,,,823,,,,,,823,823,823,823,823,823', -'823,823,823,823,823,823,,823,823,823,,823,823,823,823,823,,,816,,,,', -',,816,,,,,816,,,,816,823,,,823,,,823,823,,,823,,823,,,,823,,816,,,,', -',,823,,,,,823,823,823,823,,823,823,823,823,816,,,,823,823,,,,816,,,823', -',823,823,823,,,823,823,366,366,366,366,366,366,,,,366,366,,,,366,819', -'366,366,366,366,366,366,366,,,,,,366,366,366,366,366,366,366,,,366,', -',,,,366,366,366,366,366,366,366,366,366,366,366,366,,366,366,366,,366', -'366,366,366,366,,,819,,,,,,,819,,,,,819,,,,819,366,,,366,,,366,366,', -',366,,366,,,,366,,819,,,,,,,366,,,,,366,366,366,366,,366,366,366,366', -',,,,366,366,,,,819,,,366,,366,366,366,,,366,366,365,365,365,365,365', -'365,,,,365,365,,,,365,956,365,365,365,365,365,365,365,,,,,,365,365,365', -'365,365,365,365,,,365,,,,,,365,365,365,365,365,365,365,365,365,365,365', -'365,,365,365,365,,365,365,365,365,365,,,956,,,,,,,956,,,,,,,,,956,365', -',,365,,,365,365,,,365,,365,,,,365,,956,,,,,,,365,,,,,365,365,365,365', -',365,365,365,365,956,,,,365,365,,,,956,,,365,,365,365,365,,,365,365', -'132,132,132,132,132,132,,,,132,132,,,,132,,132,132,132,132,132,132,132', -'23,,,,,132,132,132,132,132,132,132,,,132,,,,,,132,132,132,132,132,132', -'132,132,132,132,132,132,,132,132,132,,132,132,132,132,132,23,23,23,23', -'23,23,23,23,23,23,23,,23,23,,,23,23,,132,,23,132,,,132,132,,,132,,132', -'23,,23,132,23,23,,23,23,23,23,23,132,23,,,,132,132,132,132,,132,132', -'132,132,,,,,132,132,,23,,,,,132,,132,132,132,,,132,132,920,920,920,920', -'920,920,,,,920,920,,,,920,,920,920,920,920,920,920,920,378,,,,,920,920', -'920,920,920,920,920,,,920,,,,,,920,920,920,920,920,920,920,920,920,920', -'920,920,,920,920,920,,920,920,920,920,920,378,378,378,378,378,378,378', -'378,378,378,378,,378,378,,,378,378,,920,,,920,,,920,920,,,920,,920,378', -',378,920,378,378,,378,378,378,378,378,920,378,,,,920,920,920,920,,920', -'920,920,920,,,,,920,920,,378,,,,,920,,920,920,920,,,920,920,908,908', -'908,908,908,908,,,,908,908,,,,908,,908,908,908,908,908,908,908,,,,,', -'908,908,908,908,908,908,908,,,908,,,,,443,908,908,908,908,908,908,908', -'908,908,908,908,908,,908,908,908,,908,908,908,908,908,443,443,443,443', -'443,443,443,443,443,443,443,,443,443,,,443,443,,908,,,908,,,908,908', -',,908,,908,443,,443,908,443,443,,443,443,443,443,443,908,443,,,,908', -'908,908,908,,908,908,908,908,,,,,908,908,,443,,443,,,908,,908,908,908', -',,908,908,361,361,361,361,361,361,,,,361,361,,,,361,,361,361,361,361', -'361,361,361,,,,,,361,361,361,361,361,361,361,,,361,,,,,453,361,361,361', -'361,361,361,361,361,361,361,361,361,,361,361,361,,361,361,361,361,361', -'453,453,453,453,453,453,453,453,453,453,453,,453,453,,,453,453,,361', -',,361,,,361,361,,,361,,361,453,,453,361,453,453,,453,453,453,453,453', -'361,453,,,,361,361,361,361,,361,361,361,361,,,,,361,361,,453,,,,,361', -',361,361,361,,,361,361,834,834,834,834,834,834,,,,834,834,,,,834,,834', -'834,834,834,834,834,834,,,,,,834,834,834,834,834,834,834,,,834,,,,,763', -'834,834,834,834,834,834,834,834,834,834,834,834,,834,834,834,,834,834', -'834,834,834,763,763,763,763,763,763,763,763,763,763,763,,763,763,,,763', -'763,,834,,,834,,,834,834,,,834,,834,763,,763,834,763,763,,763,763,763', -'763,763,834,763,,,,834,834,834,834,,834,834,834,834,,,,,834,834,,763', -',,,,834,,834,834,834,,,834,834,215,215,215,215,215,215,,,,215,215,,', -',215,,215,215,215,215,215,215,215,,,,,,215,215,215,215,215,215,215,', -',215,,,,,794,215,215,215,215,215,215,215,215,215,215,215,215,,215,215', -'215,,215,215,215,215,215,794,794,794,794,794,794,794,794,794,794,794', -',794,794,,,794,794,,215,,,215,,,215,215,,,215,,215,794,,794,215,794', -'794,,794,794,794,794,794,215,794,,,,215,215,215,215,,215,215,215,215', -',,,,215,215,,794,,,,,215,,215,215,215,,,215,215,1166,1166,1166,1166', -'1166,1166,,,,1166,1166,,,,1166,,1166,1166,1166,1166,1166,1166,1166,', -',,,,1166,1166,1166,1166,1166,1166,1166,,,1166,,,,,,1166,1166,1166,1166', -'1166,1166,1166,1166,1166,1166,1166,1166,,1166,1166,1166,,1166,1166,1166', -'1166,1166,305,305,305,305,305,305,305,305,305,305,305,,305,305,,,305', -'305,,1166,,,1166,,,1166,1166,,,1166,,1166,305,,305,1166,305,305,,305', -'305,305,305,305,1166,305,,,,1166,1166,1166,1166,,1166,1166,1166,1166', -',,,,1166,1166,,305,,,,,1166,,1166,1166,1166,,,1166,1166,616,616,616', -'616,616,616,,,,616,616,,,,616,,616,616,616,616,616,616,616,,,,,,616', -'616,616,616,616,616,616,,,616,,,,,,616,616,616,616,616,616,616,616,616', -'616,616,616,,616,616,616,,616,616,616,616,616,506,506,506,506,506,506', -'506,506,506,506,506,,506,506,,,506,506,,616,,,616,,,616,616,,,616,,616', -'506,,506,616,506,506,,506,506,506,506,506,616,506,,,,616,616,616,616', -',616,616,616,616,,,,,616,616,506,506,,,,,616,,616,616,616,,,616,616', -'36,36,36,36,36,36,,,,36,36,,,,36,,36,36,36,36,36,36,36,,,,,,36,36,36', -'36,36,36,36,,,36,,,,,,36,36,36,36,36,36,36,36,36,36,36,36,,36,36,36', -',36,36,36,36,36,1050,1050,1050,1050,1050,1050,1050,1050,1050,1050,1050', -',1050,1050,,,1050,1050,,36,,,36,,,36,36,,,36,,36,1050,,1050,36,1050', -'1050,,1050,1050,1050,1050,1050,36,1050,,,,36,36,36,36,,36,36,36,36,', -',,,36,36,,1050,,,,,36,,36,36,36,,,36,36,1029,1029,1029,1029,1029,1029', -',,,1029,1029,,,,1029,,1029,1029,1029,1029,1029,1029,1029,,,,,,1029,1029', -'1029,1029,1029,1029,1029,,,1029,,,,,,1029,1029,1029,1029,1029,1029,1029', -'1029,1029,1029,1029,1029,,1029,1029,1029,,1029,1029,1029,1029,1029,1027', -'1027,1027,1027,1027,1027,1027,1027,1027,1027,1027,,1027,1027,,,1027', -'1027,,1029,,,1029,,,1029,1029,,,1029,,1029,1027,,1027,1029,1027,1027', -',1027,1027,1027,1027,1027,1029,1027,,,,1029,1029,1029,1029,,1029,1029', -'1029,1029,,,,,1029,1029,,1027,,,,,1029,,1029,1029,1029,,,1029,1029,0', -'0,0,0,0,0,,,,0,0,,,,0,,0,0,0,0,0,0,0,,,,,,0,0,0,0,0,0,0,,,0,,,,,,0,0', -'0,0,0,0,0,0,0,0,0,0,,0,0,0,,0,0,0,0,0,1009,1009,1009,1009,1009,1009', -'1009,1009,1009,1009,1009,,1009,1009,,,1009,1009,,0,,,0,,,0,0,,,0,,0', -'1009,,1009,0,1009,1009,,1009,1009,1009,1009,1009,0,1009,,,,0,0,0,0,', -'0,0,0,0,,,,,0,0,,1009,,,,,0,,0,0,0,,,0,0,818,818,818,818,818,818,,,', -'818,818,,,,818,,818,818,818,818,818,818,818,,,,,,818,818,818,818,818', -'818,818,,,818,,,,,,818,818,818,818,818,818,818,818,818,818,818,818,', -'818,818,818,,818,818,818,818,818,561,561,561,561,561,561,561,561,561', -'561,561,,561,561,,,561,561,,818,,,818,,,818,818,,,818,,818,561,,561', -'818,561,561,,561,561,561,561,561,818,561,,,,818,818,818,818,,818,818', -'818,818,,,,,818,818,,561,,,,,818,,818,818,818,,,818,818,242,242,242', -'242,242,242,,,,242,242,,,,242,,242,242,242,242,242,242,242,,,,,,242', -'242,242,242,242,242,242,,,242,,,,,,242,242,242,242,242,242,242,242,242', -'242,242,242,,242,242,242,,242,242,242,242,242,851,851,851,851,851,851', -'851,851,851,851,851,,851,851,,,851,851,,242,,,242,,,242,242,,,242,,242', -'851,,851,242,851,851,,851,851,851,851,851,242,851,,,,242,242,242,242', -',242,242,242,242,,,,,242,242,,851,,,,,242,,242,242,242,,,242,242,383', -'383,383,383,383,383,,,,383,383,,,,383,,383,383,383,383,383,383,383,', -',,,,383,383,383,383,383,383,383,,,383,,,,,,383,383,383,383,383,383,383', -'383,383,383,383,383,,383,383,383,,383,383,383,383,383,500,500,500,500', -'500,500,500,,,500,500,,,,,,500,500,,383,,,383,,,383,383,,,383,,383,500', -',500,383,500,500,,500,500,500,500,500,383,500,,,,383,383,383,383,,383', -'383,383,383,,,,,383,383,,,,,,,383,,383,383,383,,,383,383,1120,1120,1120', -'1120,1120,1120,,,,1120,1120,,,,1120,,1120,1120,1120,1120,1120,1120,1120', -',,,,,1120,1120,1120,1120,1120,1120,1120,,,1120,,,,,,1120,1120,1120,1120', -'1120,1120,1120,1120,1120,1120,1120,1120,,1120,1120,1120,,1120,1120,1120', -'1120,1120,485,485,485,485,485,485,485,485,485,485,485,,485,485,,,485', -'485,,1120,,,1120,,,1120,1120,,,1120,,1120,485,,485,1120,485,485,,485', -'485,485,485,485,1120,485,,,,1120,1120,1120,1120,,1120,1120,1120,1120', -',,,,1120,1120,,,,,,,1120,,1120,1120,1120,,,1120,1120,1010,1010,1010', -'1010,1010,1010,,,,1010,1010,,,,1010,,1010,1010,1010,1010,1010,1010,1010', -',,,,,1010,1010,1010,1010,1010,1010,1010,,,1010,,,,,,1010,1010,1010,1010', -'1010,1010,1010,1010,1010,1010,1010,1010,,1010,1010,1010,,1010,1010,1010', -'1010,1010,486,486,486,486,486,486,486,486,486,486,486,,486,486,,,486', -'486,,1010,,,1010,,,1010,1010,,,1010,,1010,486,,486,1010,486,486,,486', -'486,486,486,486,1010,486,,,,1010,1010,1010,1010,,1010,1010,1010,1010', -',,,,1010,1010,,,,,,,1010,,1010,1010,1010,,,1010,1010,619,619,619,619', -'619,619,,,,619,619,,,,619,,619,619,619,619,619,619,619,,,,,,619,619', -'619,619,619,619,619,,,619,,,,,,619,619,619,619,619,619,619,619,619,619', -'619,619,,619,619,619,,619,619,619,619,619,496,496,496,496,496,496,496', -',,496,496,,,,,,496,496,,619,,,619,,,619,619,,,619,,619,496,,496,619', -'496,496,,496,496,496,496,496,619,496,,,,619,619,619,619,,619,619,619', -'619,,,,,619,619,,,,,,,619,,619,619,619,,,619,619,640,640,640,640,640', -'640,,,,640,640,,,,640,,640,640,640,640,640,640,640,,,,,,640,640,640', -'640,640,640,640,,,640,,,,,,640,640,640,640,640,640,640,640,640,640,640', -'640,,640,640,640,,640,640,640,640,640,497,497,497,497,497,497,497,,', -'497,497,,,,,,497,497,,640,,,640,,,640,640,,,640,,640,497,,497,640,497', -'497,,497,497,497,497,497,640,497,,,,640,640,640,640,,640,640,640,640', -',,,,640,640,,,,,,,640,,640,640,640,,,640,640,961,961,961,961,961,961', -',,,961,961,,,,961,,961,961,961,961,961,961,961,,,,,,961,961,961,961', -'961,961,961,,,961,,,,,,961,961,961,961,961,961,961,961,961,961,961,961', -',961,961,961,,961,961,961,961,961,498,498,498,498,498,498,498,,,498', -'498,,,,,,498,498,,961,,,961,,,961,961,,,961,,961,498,,498,961,498,498', -',498,498,498,498,498,961,498,,,,961,961,961,961,,961,961,961,961,,,', -',961,961,,,,546,546,546,961,546,961,961,961,546,546,961,961,,546,,546', -'546,546,546,546,546,546,,,,,,546,546,546,546,546,546,546,,,546,,,,,', -',546,,,546,546,546,546,546,546,546,546,546,546,546,546,,546,546,546', -'546,546,499,499,499,499,499,499,499,,,499,499,,,,,,499,499,,546,,,546', -',,546,546,,,546,,546,499,546,499,546,499,499,546,499,499,499,499,499', -'546,499,,,,546,546,546,546,,546,546,546,546,,,,,546,546,,,,,,,546,,546', -'546,546,,,546,546,5,5,5,5,5,,,,5,5,,,,5,,5,5,5,5,5,5,5,,,,,,5,5,5,5', -'5,5,5,,,5,,,,,,5,5,5,5,5,5,5,5,5,5,5,5,,5,5,5,,5,5,5,5,5,501,501,501', -'501,501,501,501,,,501,501,,,,,,501,501,,5,,,5,,,5,5,,,5,,5,501,,501', -'5,501,501,,501,501,501,501,501,5,501,,,,5,5,5,5,,5,5,5,5,,,,,5,5,,,', -'1155,1155,1155,5,1155,5,5,5,1155,1155,5,5,,1155,,1155,1155,1155,1155', -'1155,1155,1155,,,,,,1155,1155,1155,1155,1155,1155,1155,,,1155,,,,,,', -'1155,,,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,1155,', -'1155,1155,1155,1155,1155,504,504,504,504,504,504,504,,,504,504,,,,,', -'504,504,,1155,,,1155,,,1155,1155,,,1155,,1155,504,1155,504,1155,504', -'504,1155,504,504,504,504,504,1155,504,,,,1155,1155,1155,1155,,1155,1155', -'1155,1155,,,,,1155,1155,,,,1123,1123,1123,1155,1123,1155,1155,1155,1123', -'1123,1155,1155,,1123,,1123,1123,1123,1123,1123,1123,1123,,,,,,1123,1123', -'1123,1123,1123,1123,1123,,,1123,,,,,,,1123,,,1123,1123,1123,1123,1123', -'1123,1123,1123,,1123,1123,1123,,1123,1123,1123,1123,1123,505,505,505', -'505,505,505,505,505,,505,505,,,,,,505,505,,1123,,,1123,,,1123,1123,', -',1123,,,505,,505,1123,505,505,,505,505,505,505,505,1123,505,,,,1123', -'1123,1123,1123,,1123,1123,1123,1123,,,,,1123,1123,,,,1122,1122,1122', -'1123,1122,1123,1123,1123,1122,1122,1123,1123,,1122,,1122,1122,1122,1122', -'1122,1122,1122,,,,,,1122,1122,1122,1122,1122,1122,1122,,,1122,,,,,,', -'1122,,,1122,1122,1122,1122,1122,1122,1122,1122,,1122,1122,1122,,1122', -'1122,1122,1122,1122,507,,,,,,,,,,,,,,,,507,507,,1122,,,1122,,,1122,1122', -',,1122,,,507,,507,1122,507,507,,507,507,,,507,1122,507,,,,1122,1122', -'1122,1122,,1122,1122,1122,1122,,,,,1122,1122,,,,22,22,22,1122,22,1122', -'1122,1122,22,22,1122,1122,,22,,22,22,22,22,22,22,22,,,,,,22,22,22,22', -'22,22,22,,,22,,,,,,,22,,,22,22,22,22,22,22,22,22,,22,22,22,,22,22,22', -'22,22,560,,,,,,,,,,,,,,,,560,560,,22,,,22,,,22,22,,,22,,,560,,560,22', -'560,560,,560,560,,,560,22,560,,,,22,22,22,22,,22,22,22,22,,,,,22,22', -',,,,,,22,,22,22,22,30,,22,22,,,,30,30,30,,,30,30,30,494,30,,,,,,,,30', -'30,30,30,,,,494,494,,,,30,30,,30,30,30,30,30,,,,494,,494,,494,494,,494', -'494,,,,,,,,,,,30,30,30,30,30,30,30,30,30,30,30,30,30,30,,,30,30,30,', -',30,,30,30,,,30,30,,30,,30,,30,,30,30,,30,30,30,30,30,31,30,30,30,,', -',31,31,31,,,31,31,31,,31,30,495,,30,30,,30,31,30,31,31,,,,,30,,495,495', -'31,31,,31,31,31,31,31,,,,,,,495,,,,495,495,,495,495,,,,,,,,31,31,31', -'31,31,31,31,31,31,31,31,31,31,31,,,31,31,31,,,31,,31,31,,,31,31,,31', -',31,,31,,31,31,,31,31,31,31,31,,31,,31,,,,,,,,,,,,,,31,,,31,31,,31,', -'31,32,32,32,,32,,31,,32,32,,,,32,,32,32,32,32,32,32,32,,,,,,32,32,32', -'32,32,32,32,,,32,,,,,,,32,,,32,32,32,32,32,32,32,32,32,32,32,32,,32', -'32,32,32,32,353,353,353,353,353,353,353,353,353,353,353,,353,353,,,353', -'353,,32,,,32,,,32,32,,,32,,32,353,32,353,32,353,353,32,353,353,353,353', -'353,32,353,,,,32,32,32,32,,32,32,32,32,,,,,32,32,,,,33,33,33,32,33,32', -'32,32,33,33,32,32,,33,,33,33,33,33,33,33,33,,,,,,33,33,33,33,33,33,33', -',,33,,,,,,,33,,,33,33,33,33,33,33,33,33,33,33,33,33,,33,33,33,33,33', -'352,352,352,352,352,352,352,352,352,352,352,,352,352,,,352,352,,33,', -',33,,,33,33,,,33,,33,352,33,352,33,352,352,33,352,352,352,352,352,33', -'352,,,,33,33,33,33,,33,33,33,33,,,,,33,33,,,,34,34,34,33,34,33,33,33', -'34,34,33,33,,34,,34,34,34,34,34,34,34,,,,,,34,34,34,34,34,34,34,,,34', -',,,,,,34,,,34,34,34,34,34,34,34,34,34,34,34,34,,34,34,34,34,34,493,', -',,,,,,,,,,,,,,493,493,,34,,,34,,,34,34,,,34,,34,493,34,493,34,493,493', -'34,493,493,,,,34,,,,,34,34,34,34,,34,34,34,34,,,,,34,34,,,,44,44,44', -'34,44,34,34,34,44,44,34,34,,44,,44,44,44,44,44,44,44,,,,,,44,44,44,44', -'44,44,44,,,44,,,,,,,44,,,44,44,44,44,44,44,44,44,,44,44,44,,44,44,44', -'44,44,,,,,,,,,,,,,,,,,,,,44,,,44,,,44,44,,,44,,,,,,44,,,,,,,,,44,,,', -',44,44,44,44,,44,44,44,44,,,,,44,44,,,,45,45,45,44,45,44,44,44,45,45', -'44,44,,45,,45,45,45,45,45,45,45,,,,,,45,45,45,45,45,45,45,,,45,,,,,', -',45,,,45,45,45,45,45,45,45,45,,45,45,45,,45,45,45,45,45,,,,,,,,,,,,', -',,,,,,,45,,,45,,,45,45,,,45,,,,,,45,,,,,,,,,45,,,,,45,45,45,45,,45,45', -'45,45,,,,,45,45,,,,47,47,47,45,47,45,45,45,47,47,45,45,,47,,47,47,47', -'47,47,47,47,,,,,,47,47,47,47,47,47,47,,,47,,,,,,,47,,,47,47,47,47,47', -'47,47,47,,47,47,47,,47,47,47,47,47,,,,,,,,,,,,,,,,,,,,47,,,47,,,47,47', -',,47,,,,,,47,,,,,,,,,47,,,,,47,47,47,47,,47,47,47,47,,,,,47,47,,,,48', -'48,48,47,48,47,47,47,48,48,47,47,,48,,48,48,48,48,48,48,48,,,,,,48,48', -'48,48,48,48,48,,,48,,,,,,,48,,,48,48,48,48,48,48,48,48,,48,48,48,,48', -'48,48,48,48,,,,,,,,,,,,,,,,,,,,48,,,48,,,48,48,,,48,,,,,,48,,,,,,,,', -'48,,,,,48,48,48,48,,48,48,48,48,,,,,48,48,,,,50,50,50,48,50,48,48,48', -'50,50,48,48,,50,,50,50,50,50,50,50,50,,,,,,50,50,50,50,50,50,50,,,50', -',,,,,,50,,,50,50,50,50,50,50,50,50,,50,50,50,,50,50,50,50,50,,,,,,,', -',,,,,,,,,,,,50,,,50,,,50,50,,,50,,,,,,50,,,,,,,,,50,,,,,50,50,50,50', -',50,50,50,50,,,,,50,50,,,,974,974,974,50,974,50,50,50,974,974,50,50', -',974,,974,974,974,974,974,974,974,,,,,,974,974,974,974,974,974,974,', -',974,,,,,,,974,,,974,974,974,974,974,974,974,974,,974,974,974,,974,974', -'974,974,974,,,,,,,,,,,,,,,,,,,,974,,,974,,,974,974,,,974,,,,,,974,,', -',,,,,,974,,,,,974,974,974,974,,974,974,974,974,,,,,974,974,,,,973,973', -'973,974,973,974,974,974,973,973,974,974,,973,,973,973,973,973,973,973', -'973,,,,,,973,973,973,973,973,973,973,,,973,,,,,,,973,,,973,973,973,973', -'973,973,973,973,973,973,973,973,,973,973,973,973,973,,,,,,,,,,,,,,,', -',,,,973,,,973,,,973,973,,,973,,,,973,,973,,,973,,,,,,973,,,,,973,973', -'973,973,,973,973,973,973,,,,,973,973,,,,,,,973,,973,973,973,64,,973', -'973,,,,64,64,64,,,64,64,64,,64,,,,,,,,64,,64,64,64,,,,709,709,709,709', -'64,64,,64,64,64,64,64,,,,,709,709,709,,,,,,,,,,,709,709,,,709,64,64', -'64,64,64,64,64,64,64,64,64,64,64,64,,,64,64,64,,,64,,,64,,,64,64,,64', -',64,,64,,64,64,,64,64,64,64,64,,64,,64,,709,709,709,709,,709,709,709', -'709,,,,64,709,709,64,64,64,64,,64,709,64,709,709,709,,64,66,66,66,66', -'66,,,,66,66,,,,66,,66,66,66,66,66,66,66,,,,,,66,66,66,66,66,66,66,,', -'66,,,,,,66,66,,66,66,66,66,66,66,66,66,66,,66,66,66,,66,66,66,66,66', -',,,,,,,,,,,,,,,,,,,66,,,66,,,66,66,,,66,,66,,,,66,,,,,,,,,66,,,,,66', -'66,66,66,,66,66,66,66,,,,,66,66,,,,67,67,67,66,67,66,66,66,67,67,66', -'66,,67,,67,67,67,67,67,67,67,,,,,,67,67,67,67,67,67,67,,,67,,,,,,,67', -',,67,67,67,67,67,67,67,67,67,67,67,67,,67,67,67,67,67,,,,,,,,,,,,,,', -',,,,,67,,,67,,,67,67,,,67,,67,,,,67,,,67,,,,,,67,,,,,67,67,67,67,,67', -'67,67,67,,,,,67,67,,,,68,68,68,67,68,67,67,67,68,68,67,67,,68,,68,68', -'68,68,68,68,68,,,,,,68,68,68,68,68,68,68,,,68,,,,,,,68,,,68,68,68,68', -'68,68,68,68,68,68,68,68,,68,68,68,68,68,,,,,,,,,,,,,,,,,,,,68,,,68,', -',68,68,,,68,,,,,,68,,,68,,,,,,68,,,,,68,68,68,68,,68,68,68,68,,,,,68', -'68,,,,954,954,954,68,954,68,68,68,954,954,68,68,,954,,954,954,954,954', -'954,954,954,,,,,,954,954,954,954,954,954,954,,,954,,,,,,,954,,,954,954', -'954,954,954,954,954,954,,954,954,954,,954,954,954,954,954,,,,,,,,,,', -',,,,,,,,,954,,,954,,,954,954,,,954,,954,,,,954,,,,,,,,,954,,,,,954,954', -'954,954,,954,954,954,954,,,,,954,954,,,,71,71,71,954,71,954,954,954', -'71,71,954,954,,71,,71,71,71,71,71,71,71,,,,,,71,71,71,71,71,71,71,,', -'71,,,,,,,71,,,71,71,71,71,71,71,71,71,,71,71,71,,71,71,71,71,71,,,,', -',,,,,,,,,,,,,,,71,,,71,,,71,71,,,71,,,,,,71,,,,,,,,,71,,,,,71,71,71', -'71,,71,71,71,71,,,,,71,71,,,,72,72,72,71,72,71,71,71,72,72,71,71,,72', -',72,72,72,72,72,72,72,,,,,,72,72,72,72,72,72,72,,,72,,,,,,,72,,,72,72', -'72,72,72,72,72,72,,72,72,72,,72,72,72,72,72,,,,,,,,,,,,,,,,,,,,72,,', -'72,,,72,72,,,72,,,,,,72,,,,,,,,,72,,,,,72,72,72,72,,72,72,72,72,,,,', -'72,72,,,,75,75,75,72,75,72,72,72,75,75,72,72,,75,,75,75,75,75,75,75', -'75,,,,,,75,75,75,75,75,75,75,,,75,,,,,,,75,,,75,75,75,75,75,75,75,75', -',75,75,75,,75,75,75,75,75,,,,,,,,,,,,,,,,,,,,75,,,75,,,75,75,,,75,,', -',,,75,,,,,,,,,75,,,,,75,75,75,75,,75,75,75,75,,,,,75,75,75,,,,,75,75', -',75,75,75,,,75,75,949,949,949,,949,,,,949,949,,,,949,,949,949,949,949', -'949,949,949,,,,,,949,949,949,949,949,949,949,,,949,,,,,,,949,,,949,949', -'949,949,949,949,949,949,,949,949,949,,949,949,949,949,949,,,,,,,,,,', -',,,,,,,,,949,,,949,,,949,949,,,949,,,,,,949,,,,,,,,,949,,,,,949,949', -'949,949,,949,949,949,949,,,,,949,949,,,,945,945,945,949,945,949,949', -'949,945,945,949,949,,945,,945,945,945,945,945,945,945,,,,,,945,945,945', -'945,945,945,945,,,945,,,,,,,945,,,945,945,945,945,945,945,945,945,,945', -'945,945,,945,945,945,945,945,,,,,,,,,,,,,,,,,,,,945,,,945,,,945,945', -',,945,,,,,,945,,,,,,,,,945,,,,,945,945,945,945,,945,945,945,945,,,,', -'945,945,,,,,,,945,,945,945,945,,,945,945,121,121,121,121,121,,,,121', -'121,,,,121,,121,121,121,121,121,121,121,,,,,,121,121,121,121,121,121', -'121,,,121,,,,,,121,121,121,121,121,121,121,121,121,121,121,121,,121', -'121,121,,121,121,121,121,121,,,,,,,,,,,,,,,,,,,,121,,,121,,,121,121', -',,121,,121,,,,121,,,,,,,,,121,,,,,121,121,121,121,,121,121,121,121,', -',,,121,121,,,,,,121,121,,121,121,121,,,121,121,126,126,126,,126,,,,126', -'126,,,,126,,126,126,126,126,126,126,126,,,,,,126,126,126,126,126,126', -'126,,,126,,,,,,,126,,,126,126,126,126,126,126,126,126,,126,126,126,', -'126,126,126,126,126,,,,,,,,,,,,,,,,,,,,126,,,126,,,126,126,,,126,,,', -',,126,,,,,,,,,126,,,,,126,126,126,126,,126,126,126,126,,,,,126,126,', -',,127,127,127,126,127,126,126,126,127,127,126,126,,127,,127,127,127', -'127,127,127,127,,,,,,127,127,127,127,127,127,127,,,127,,,,,,,127,,,127', -'127,127,127,127,127,127,127,,127,127,127,,127,127,127,127,127,,,,,,', -',,,,,,,,,,,,,127,,,127,,,127,127,,,127,,,,,,127,,,,,,,,,127,,,,,127', -'127,127,127,,127,127,127,127,,,,,127,127,,,,128,128,128,127,128,127', -'127,127,128,128,127,127,,128,,128,128,128,128,128,128,128,,,,,,128,128', -'128,128,128,128,128,,,128,,,,,,,128,,,128,128,128,128,128,128,128,128', -',128,128,128,,128,128,128,128,128,,,,,,,,,,,,,,,,,,,,128,,,128,,,128', -'128,,,128,,,,,,128,,,,,,,,,128,,,,,128,128,128,128,,128,128,128,128', -',,,,128,128,,,,129,129,129,128,129,128,128,128,129,129,128,128,,129', -',129,129,129,129,129,129,129,,,,,,129,129,129,129,129,129,129,,,129', -',,,,,,129,,,129,129,129,129,129,129,129,129,,129,129,129,,129,129,129', -'129,129,,,,,,,,,,,,,,,,,,,,129,,,129,,,129,129,,,129,,,,,,129,,,,,,', -',,129,,,,,129,129,129,129,,129,129,129,129,,,,,129,129,,,,,,,129,,129', -'129,129,,,129,129,130,130,130,130,130,,,,130,130,,,,130,,130,130,130', -'130,130,130,130,,,,,,130,130,130,130,130,130,130,,,130,,,,,,130,130', -',130,130,130,130,130,130,130,130,130,,130,130,130,,130,130,130,130,130', -',,,,,,,,,,,,,,,,,,,130,,,130,,,130,130,,,130,,130,,,,130,,,,,,,,,130', -',,,,130,130,130,130,,130,130,130,130,,,,,130,130,,,,917,917,917,130', -'917,130,130,130,917,917,130,130,,917,,917,917,917,917,917,917,917,,', -',,,917,917,917,917,917,917,917,,,917,,,,,,,917,,,917,917,917,917,917', -'917,917,917,,917,917,917,,917,917,917,917,917,,,,,,,,,,,,,,,,,,,,917', -',,917,,,917,917,,,917,,,,,,917,,,,,,,,,917,,,,,917,917,917,917,,917', -'917,917,917,,,,,917,917,,,,216,216,216,917,216,917,917,917,216,216,917', -'917,,216,,216,216,216,216,216,216,216,,,,,,216,216,216,216,216,216,216', -',,216,,,,,,,216,,,216,216,216,216,216,216,216,216,,216,216,216,,216', -'216,216,216,216,,,,,,,,,,,,,,,,,,,,216,,,216,,,216,216,,,216,,216,,', -',216,,,,,,,,,216,,,,,216,216,216,216,,216,216,216,216,,,,,216,216,,', -',217,217,217,216,217,216,216,216,217,217,216,216,,217,,217,217,217,217', -'217,217,217,,,,,,217,217,217,217,217,217,217,,,217,,,,,,,217,,,217,217', -'217,217,217,217,217,217,,217,217,217,,217,217,217,217,217,,,,,,,,,,', -',,,,,,,,,217,,,217,,,217,217,,,217,,217,,,,217,,,,,,,,,217,,,,,217,217', -'217,217,,217,217,217,217,,,,,217,217,,,,675,675,675,217,675,217,217', -'217,675,675,217,217,,675,,675,675,675,675,675,675,675,,,,,,675,675,675', -'675,675,675,675,,,675,,,,,,,675,,,675,675,675,675,675,675,675,675,,675', -'675,675,,675,675,675,675,675,,,,,,,,,,,,,,,,,,,,675,,,675,,,675,675', -',,675,,,,,,675,,,,,,,,,675,,,,,675,675,675,675,,675,675,675,675,,,,', -'675,675,,,,,,,675,,675,675,675,,,675,675,674,674,674,674,674,,,,674', -'674,,,,674,,674,674,674,674,674,674,674,,,,,,674,674,674,674,674,674', -'674,,,674,,,,,,674,674,,674,674,674,674,674,674,674,674,674,,674,674', -'674,,674,674,674,674,674,,,,,,,,,,,,,,,,,,,,674,,,674,,,674,674,,,674', -',674,,,,674,,,,,,,,,674,,,,,674,674,674,674,,674,674,674,674,,,,,674', -'674,,,,671,671,671,674,671,674,674,674,671,671,674,674,,671,,671,671', -'671,671,671,671,671,,,,,,671,671,671,671,671,671,671,,,671,,,,,,,671', -',,671,671,671,671,671,671,671,671,671,671,671,671,,671,671,671,671,671', -',,,,,,,,,,,,,,,,,,,671,,,671,,,671,671,,,671,,671,,671,,671,,,671,,', -',,,671,,,,,671,671,671,671,,671,671,671,671,,,,,671,671,,,,670,670,670', -'671,670,671,671,671,670,670,671,671,,670,,670,670,670,670,670,670,670', -',,,,,670,670,670,670,670,670,670,,,670,,,,,,,670,,,670,670,670,670,670', -'670,670,670,,670,670,670,,670,670,670,670,670,,,,,,,,,,,,,,,,,,,,670', -',,670,,,670,670,,,670,,,,,,670,,,,,,,,,670,,,,,670,670,670,670,,670', -'670,670,670,,,,,670,670,,,,669,669,669,670,669,670,670,670,669,669,670', -'670,,669,,669,669,669,669,669,669,669,,,,,,669,669,669,669,669,669,669', -',,669,,,,,,,669,,,669,669,669,669,669,669,669,669,,669,669,669,,669', -'669,669,669,669,,,,,,,,,,,,,,,,,,,,669,,,669,,,669,669,,,669,,669,,', -',669,,,,,,,,,669,,,,,669,669,669,669,,669,669,669,669,,,,,669,669,,', -',,,,669,,669,669,669,,,669,669,667,667,667,667,667,,,,667,667,,,,667', -',667,667,667,667,667,667,667,,,,,,667,667,667,667,667,667,667,,,667', -',,,,,667,667,,667,667,667,667,667,667,667,667,667,,667,667,667,,667', -'667,667,667,667,,,,,,,,,,,,,,,,,,,,667,,,667,,,667,667,,,667,,667,,', -',667,,,,,,,,,667,,,,,667,667,667,667,,667,667,667,667,,,,,667,667,,', -',636,636,636,667,636,667,667,667,636,636,667,667,,636,,636,636,636,636', -'636,636,636,,,,,,636,636,636,636,636,636,636,,,636,,,,,,,636,,,636,636', -'636,636,636,636,636,636,636,636,636,636,,636,636,636,636,636,,,,,,,', -',,,,,,,,,,,,636,,,636,,,636,636,,,636,,636,,636,,636,,,636,,,,,,636', -',,,,636,636,636,636,,636,636,636,636,,,,,636,636,,,,626,626,626,636', -'626,636,636,636,626,626,636,636,,626,,626,626,626,626,626,626,626,,', -',,,626,626,626,626,626,626,626,,,626,,,,,,,626,,,626,626,626,626,626', -'626,626,626,626,626,626,626,,626,626,626,626,626,,,,,,,,,,,,,,,,,,,', -'626,,,626,,,626,626,,,626,,626,,626,,626,,,626,,,,,,626,,,,,626,626', -'626,626,,626,626,626,626,,,,,626,626,,,,625,625,625,626,625,626,626', -'626,625,625,626,626,,625,,625,625,625,625,625,625,625,,,,,,625,625,625', -'625,625,625,625,,,625,,,,,,,625,,,625,625,625,625,625,625,625,625,,625', -'625,625,,625,625,625,625,625,,,,,,,,,,,,,,,,,,,,625,,,625,,,625,625', -',,625,,625,,,,625,,,,,,,,,625,,,,,625,625,625,625,,625,625,625,625,', -',,,625,625,,,,612,612,612,625,612,625,625,625,612,612,625,625,,612,', -'612,612,612,612,612,612,612,,,,,,612,612,612,612,612,612,612,,,612,', -',,,,,612,,,612,612,612,612,612,612,612,612,612,612,612,612,,612,612', -'612,612,612,,,,,,,,,,,,,,,,,,,,612,,,612,,,612,612,,,612,,,,,,612,,', -'612,,,,,,612,,,,,612,612,612,612,,612,612,612,612,,,,,612,612,,,,609', -'609,609,612,609,612,612,612,609,609,612,612,,609,,609,609,609,609,609', -'609,609,,,,,,609,609,609,609,609,609,609,,,609,,,,,,,609,,,609,609,609', -'609,609,609,609,609,609,609,609,609,,609,609,609,609,609,,,,,,,,,,,', -',,,,,,,,609,,,609,,,609,609,,,609,,609,,,,609,,,609,,,,,,609,,,,,609', -'609,609,609,,609,609,609,609,,,,,609,609,,,,603,603,603,609,603,609', -'609,609,603,603,609,609,,603,,603,603,603,603,603,603,603,,,,,,603,603', -'603,603,603,603,603,,,603,,,,,,,603,,,603,603,603,603,603,603,603,603', -',603,603,603,,603,603,603,603,603,,,,,,,,,,,,,,,,,,,,603,,,603,,,603', -'603,,,603,,,,,,603,,,,,,,,,603,,,,,603,603,603,603,,603,603,603,603', -',,,,603,603,,,,589,589,589,603,589,603,603,603,589,589,603,603,,589', -',589,589,589,589,589,589,589,,,,,,589,589,589,589,589,589,589,,,589', -',,,,,,589,,,589,589,589,589,589,589,589,589,,589,589,589,,589,589,589', -'589,589,,,,,,,,,,,,,,,,,,,,589,,,589,,,589,589,,,589,,,,,,589,,,,,,', -',,589,,,,,589,589,589,589,,589,589,589,589,,,,,589,589,,,,563,563,563', -'589,563,589,589,589,563,563,589,589,,563,,563,563,563,563,563,563,563', -',,,,,563,563,563,563,563,563,563,,,563,,,,,,,563,,,563,563,563,563,563', -'563,563,563,,563,563,563,,563,563,563,563,563,,,,,,,,,,,,,,,,,,,,563', -',,563,,,563,563,,,563,,,,,,563,,,,,,,,,563,,,,,563,563,563,563,,563', -'563,563,563,,,,,563,563,,,,562,562,562,563,562,563,563,563,562,562,563', -'563,,562,,562,562,562,562,562,562,562,,,,,,562,562,562,562,562,562,562', -',,562,,,,,,,562,,,562,562,562,562,562,562,562,562,,562,562,562,,562', -'562,562,562,562,,,,,,,,,,,,,,,,,,,,562,,,562,,,562,562,,,562,,,,,,562', -',,,,,,,,562,,,,,562,562,562,562,,562,562,562,562,,,,,562,562,,,,559', -'559,559,562,559,562,562,562,559,559,562,562,,559,,559,559,559,559,559', -'559,559,,,,,,559,559,559,559,559,559,559,,,559,,,,,,,559,,,559,559,559', -'559,559,559,559,559,,559,559,559,,559,559,559,559,559,,,,,,,,,,,,,,', -',,,,,559,,,559,,,559,559,,,559,,,,,,559,,,,,,,,,559,,,,,559,559,559', -'559,,559,559,559,559,,,,,559,559,,,,556,556,556,559,556,559,559,559', -'556,556,559,559,,556,,556,556,556,556,556,556,556,,,,,,556,556,556,556', -'556,556,556,,,556,,,,,,,556,,,556,556,556,556,556,556,556,556,,556,556', -'556,,556,556,556,556,556,,,,,,,,,,,,,,,,,,,,556,,,556,,,556,556,,,556', -',,,,,556,,,,,,,,,556,,,,,556,556,556,556,,556,556,556,556,,,,,556,556', -',,,357,357,357,556,357,556,556,556,357,357,556,556,,357,,357,357,357', -'357,357,357,357,,,,,,357,357,357,357,357,357,357,,,357,,,,,,,357,,,357', -'357,357,357,357,357,357,357,,357,357,357,,357,357,357,357,357,,,,,,', -',,,,,,,,,,,,,357,,,357,,,357,357,,,357,,,,,,357,,,,,,,,,357,,,,,357', -'357,357,357,,357,357,357,357,,,,,357,357,,,,359,359,359,357,359,357', -'357,357,359,359,357,357,,359,,359,359,359,359,359,359,359,,,,,,359,359', -'359,359,359,359,359,,,359,,,,,,,359,,,359,359,359,359,359,359,359,359', -',359,359,359,,359,359,359,359,359,,,,,,,,,,,,,,,,,,,,359,,,359,359,', -'359,359,,,359,,,,,,359,,,,,,,,,359,,,,,359,359,359,359,,359,359,359', -'359,,,,,359,359,,,,402,402,402,359,402,359,359,359,402,402,359,359,', -'402,,402,402,402,402,402,402,402,,,,,,402,402,402,402,402,402,402,,', -'402,,,,,,,402,,,402,402,402,402,402,402,402,402,,402,402,402,,402,402', -'402,402,402,,,,,,,,,,,,,,,,,,,,402,,,402,,,402,402,,,402,,,,,,402,,', -',,,,,,402,,,,,402,402,402,402,,402,402,402,402,,,,,402,402,,,,,,,402', -',402,402,402,,,402,402,536,536,536,536,536,,,,536,536,,,,536,,536,536', -'536,536,536,536,536,,,,,,536,536,536,536,536,536,536,,,536,,,,,,536', -'536,536,536,536,536,536,536,536,536,536,536,,536,536,536,,536,536,536', -'536,536,,,,,,,,,,,,,,,,,,,,536,,,536,,,536,536,,,536,,536,,,,536,,,', -',,,,,536,,,,,536,536,536,536,,536,536,536,536,,,,,536,536,,,,,,536,536', -',536,536,536,,,536,536,530,530,530,,530,,,,530,530,,,,530,,530,530,530', -'530,530,530,530,,,,,,530,530,530,530,530,530,530,,,530,,,,,,,530,,,530', -'530,530,530,530,530,530,530,,530,530,530,,530,530,530,530,530,,,,,,', -',,,,,,,,,,,,,530,,,530,,,530,530,,,530,,,,,,530,,,,,,,,,530,,,,,530', -'530,530,530,,530,530,530,530,,,,,530,530,,,,528,528,528,530,528,530', -'530,530,528,528,530,530,,528,,528,528,528,528,528,528,528,,,,,,528,528', -'528,528,528,528,528,,,528,,,,,,,528,,,528,528,528,528,528,528,528,528', -'528,528,528,528,,528,528,528,528,528,,,,,,,,,,,,,,,,,,,,528,,,528,,', -'528,528,,,528,,,,528,,528,,,528,,,,,,528,,,,,528,528,528,528,,528,528', -'528,528,,,,,528,528,,,,526,526,526,528,526,528,528,528,526,526,528,528', -',526,,526,526,526,526,526,526,526,,,,,,526,526,526,526,526,526,526,', -',526,,,,,,,526,,,526,526,526,526,526,526,526,526,526,526,526,526,,526', -'526,526,526,526,,,,,,,,,,,,,,,,,,,,526,,,526,,,526,526,,,526,,526,,526', -',526,,,526,,,,,,526,,,,,526,526,526,526,,526,526,526,526,,,,,526,526', -',,,516,516,516,526,516,526,526,526,516,516,526,526,,516,,516,516,516', -'516,516,516,516,,,,,,516,516,516,516,516,516,516,,,516,,,,,,,516,,,516', -'516,516,516,516,516,516,516,,516,516,516,,516,516,516,516,516,,,,,,', -',,,,,,,,,,,,,516,,,516,,,516,516,,,516,,,,,,516,,,,,,,,,516,,,,,516', -'516,516,516,,516,516,516,516,,,,,516,516,,,,,,,516,,516,516,516,511', -',516,516,,,,511,511,511,,,511,511,511,907,511,907,907,907,907,907,,', -'511,511,511,,,,907,,,,,,511,511,,511,511,511,511,511,,,,,,,,775,907', -'775,775,775,775,775,,,,907,907,907,907,,775,,907,,793,,793,793,793,793', -'793,511,,,,,,,511,793,,,775,511,511,,,,907,,,775,775,775,775,,,,775', -',,793,,,,,511,511,,,793,793,793,793,,,,793,,,,511,,,511,,483,483,483', -'511,483,,,,483,483,511,,,483,,483,483,483,483,483,483,483,,,,,,483,483', -'483,483,483,483,483,,,483,,,,,,,483,,,483,483,483,483,483,483,483,483', -',483,483,483,,483,483,483,483,483,,,,,,,,,,,,,,,,,,,,483,,,483,,,483', -'483,,,483,,,,,,483,,,,,,,,,483,,,,,483,483,483,483,,483,483,483,483', -',,,,483,483,,,,482,482,482,483,482,483,483,483,482,482,483,483,,482', -',482,482,482,482,482,482,482,,,,,,482,482,482,482,482,482,482,,,482', -',,,,,,482,,,482,482,482,482,482,482,482,482,,482,482,482,,482,482,482', -'482,482,,,,,,,,,,,,,,,,,,,,482,,,482,,,482,482,,,482,,,,,,482,,,,,,', -',,482,,,,,482,482,482,482,,482,482,482,482,,,,,482,482,,,,481,481,481', -'482,481,482,482,482,481,481,482,482,,481,,481,481,481,481,481,481,481', -',,,,,481,481,481,481,481,481,481,,,481,,,,,,,481,,,481,481,481,481,481', -'481,481,481,,481,481,481,,481,481,481,481,481,,,,,,,,,,,,,,,,,,,,481', -',,481,,,481,481,,,481,,,,,,481,,,,,,,,,481,,,,,481,481,481,481,,481', -'481,481,481,,,,,481,481,,,,479,479,479,481,479,481,481,481,479,479,481', -'481,,479,,479,479,479,479,479,479,479,,,,,,479,479,479,479,479,479,479', -',,479,,,,,,,479,,,479,479,479,479,479,479,479,479,479,479,479,479,,479', -'479,479,479,479,,,,,,,,,,,,,,,,,,,,479,,,479,,,479,479,,,479,,479,,479', -',479,,,479,,,,,,479,,,,,479,479,479,479,,479,479,479,479,,,,,479,479', -',,,,,,479,,479,479,479,470,,479,479,,,,470,470,470,,,470,470,470,,470', -',,,,,,,470,470,470,470,470,,,,,,,,470,470,,470,470,470,470,470,,,,,', -',,,,,,,,,,,,,,,,,470,470,470,470,470,470,470,470,470,470,470,470,470', -'470,,,470,470,470,,,470,,,470,,,470,470,,470,,470,,470,,470,470,,470', -'470,470,470,470,,470,470,470,,,,,,,,,,,,,,470,,,470,470,470,470,,470', -',470,,381,381,381,470,381,,,,381,381,,,,381,,381,381,381,381,381,381', -'381,,,,,,381,381,381,381,381,381,381,,,381,,,,,,,381,,,381,381,381,381', -'381,381,381,381,,381,381,381,,381,381,381,381,381,,,,,,,,,,,,,,,,,,', -',381,,,381,,,381,381,,,381,,,,,,381,,,,,,,,,381,,,,,381,381,381,381', -',381,381,381,381,,,,,381,381,,,,,,,381,,381,381,381,469,,381,381,,,', -'469,469,469,,,469,469,469,,469,,,,,,,,469,469,469,469,469,,,,,,,,469', -'469,,469,469,469,469,469,,,,,,,,,,,,,,,,,,,,,,,469,469,469,469,469,469', -'469,469,469,469,469,469,469,469,,,469,469,469,,,469,,,469,,,469,469', -',469,,469,,469,,469,469,,469,469,469,469,469,,469,469,469,,,,,,,,,,', -',,,469,,,469,469,469,469,,469,460,469,,,,,469,460,460,460,,,460,460', -'460,,460,,,,,,,,460,460,460,460,,,,,,,,,460,460,,460,460,460,460,460', -',,,,,,,,,,,,,,,,,,,,,,460,460,460,460,460,460,460,460,460,460,460,460', -'460,460,,,460,460,460,,,460,,460,460,,,460,460,,460,,460,,460,,460,460', -',460,460,460,460,460,,460,460,460,,,,,,,,,,,,,,460,,,460,460,,460,,460', -'432,432,432,,432,,460,,432,432,,,,432,,432,432,432,432,432,432,432,', -',,,,432,432,432,432,432,432,432,,,432,,,,,,,432,,,432,432,432,432,432', -'432,432,432,,432,432,432,,432,432,432,432,432,,,,,,,,,,,,,,,,,,,,432', -',,432,,,432,432,,,432,,,,,,432,,,,,,,,,432,,,,,432,432,432,432,,432', -'432,432,432,,,,,432,432,,,,219,219,219,432,219,432,432,432,219,219,432', -'432,,219,,219,219,219,219,219,219,219,,,,,,219,219,219,219,219,219,219', -',,219,,,,,,,219,,,219,219,219,219,219,219,219,219,,219,219,219,,219', -'219,219,219,219,,,,,,,,,,,,,,,,,,,,219,,,219,,,219,219,,,219,,,,,,219', -',,,,,,,,219,,,,,219,219,219,219,,219,219,219,219,,,,,219,219,,,,220', -'220,220,219,220,219,219,219,220,220,219,219,,220,,220,220,220,220,220', -'220,220,,,,,,220,220,220,220,220,220,220,,,220,,,,,,,220,,,220,220,220', -'220,220,220,220,220,,220,220,220,,220,220,220,220,220,,,,,,,,,,,,,,', -',,,,,220,,,220,,,220,220,,,220,,,,,,220,,,,,,,,,220,,,,,220,220,220', -'220,,220,220,220,220,,,,,220,220,,,,222,222,222,220,222,220,220,220', -'222,222,220,220,,222,,222,222,222,222,222,222,222,,,,,,222,222,222,222', -'222,222,222,,,222,,,,,,,222,,,222,222,222,222,222,222,222,222,,222,222', -'222,,222,222,222,222,222,,,,,,,,,,,,,,,,,,,,222,,,222,,,222,222,,,222', -',,,,,222,,,,,,,,,222,,,,,222,222,222,222,,222,222,222,222,,,,,222,222', -',,,223,223,223,222,223,222,222,222,223,223,222,222,,223,,223,223,223', -'223,223,223,223,,,,,,223,223,223,223,223,223,223,,,223,,,,,,,223,,,223', -'223,223,223,223,223,223,223,223,223,223,223,,223,223,223,223,223,,,', -',,,,,,,,,,,,,,,,223,,,223,,,223,223,,,223,,223,,223,,223,,,223,,,,,', -'223,,,,,223,223,223,223,,223,223,223,223,,,,,223,223,,,,897,897,897', -'223,897,223,223,223,897,897,223,223,,897,,897,897,897,897,897,897,897', -',,,,,897,897,897,897,897,897,897,,,897,,,,,,,897,,,897,897,897,897,897', -'897,897,897,,897,897,897,,897,897,897,897,897,,,,,,,,,,,,,,,,,,,,897', -',,897,,,897,897,,,897,,,,,,897,,,,,,,,,897,,,,,897,897,897,897,,897', -'897,897,897,,,,,897,897,,,,228,228,228,897,228,897,897,897,228,228,897', -'897,,228,,228,228,228,228,228,228,228,,,,,,228,228,228,228,228,228,228', -',,228,,,,,,,228,,,228,228,228,228,228,228,228,228,,228,228,228,,228', -'228,228,228,228,,,,,,,,,,,,,,,,,,,,228,,,228,,,228,228,,,228,,,,,,228', -',,,,,,,,228,,,,,228,228,228,228,,228,228,228,228,,,,,228,228,,,,229', -'229,229,228,229,228,228,228,229,229,228,228,,229,,229,229,229,229,229', -'229,229,,,,,,229,229,229,229,229,229,229,,,229,,,,,,,229,,,229,229,229', -'229,229,229,229,229,,229,229,229,,229,229,229,229,229,,,,,,,,,,,,,,', -',,,,,229,,,229,,,229,229,,,229,,,,,,229,,,,,,,,,229,,,,,229,229,229', -'229,,229,229,229,229,,,,,229,229,,,,230,230,230,229,230,229,229,229', -'230,230,229,229,,230,,230,230,230,230,230,230,230,,,,,,230,230,230,230', -'230,230,230,,,230,,,,,,,230,,,230,230,230,230,230,230,230,230,,230,230', -'230,,230,230,230,230,230,,,,,,,,,,,,,,,,,,,,230,,,230,,,230,230,,,230', -',,,,,230,,,,,,,,,230,,,,,230,230,230,230,,230,230,230,230,,,,,230,230', -'230,,,868,868,868,230,868,230,230,230,868,868,230,230,,868,,868,868', -'868,868,868,868,868,,,,,,868,868,868,868,868,868,868,,,868,,,,,,,868', -',,868,868,868,868,868,868,868,868,,868,868,868,,868,868,868,868,868', -',,,,,,,,,,,,,,,,,,,868,,,868,,,868,868,,,868,,,,,,868,,,,,,,,,868,,', -',,868,868,868,868,,868,868,868,868,,,,,868,868,,,,867,867,867,868,867', -'868,868,868,867,867,868,868,,867,,867,867,867,867,867,867,867,,,,,,867', -'867,867,867,867,867,867,,,867,,,,,,,867,,,867,867,867,867,867,867,867', -'867,,867,867,867,,867,867,867,867,867,,,,,,,,,,,,,,,,,,,,867,,,867,', -',867,867,,,867,,,,,,867,,,,,,,,,867,,,,,867,867,867,867,,867,867,867', -'867,,,,,867,867,,,,866,866,866,867,866,867,867,867,866,866,867,867,', -'866,,866,866,866,866,866,866,866,,,,,,866,866,866,866,866,866,866,,', -'866,,,,,,,866,,,866,866,866,866,866,866,866,866,,866,866,866,,866,866', -'866,866,866,,,,,,,,,,,,,,,,,,,,866,,,866,,,866,866,,,866,,,,,,866,,', -',,,,,,866,,,,,866,866,866,866,,866,866,866,866,,,,,866,866,,,,865,865', -'865,866,865,866,866,866,865,865,866,866,,865,,865,865,865,865,865,865', -'865,,,,,,865,865,865,865,865,865,865,,,865,,,,,,,865,,,865,865,865,865', -'865,865,865,865,,865,865,865,,865,865,865,865,865,,,,,,,,,,,,,,,,,,', -',865,,,865,,,865,865,,,865,,,,,,865,,,,,,,,,865,,,,,865,865,865,865', -',865,865,865,865,,,,,865,865,,,,852,852,852,865,852,865,865,865,852', -'852,865,865,,852,,852,852,852,852,852,852,852,,,,,,852,852,852,852,852', -'852,852,,,852,,,,,,,852,,,852,852,852,852,852,852,852,852,,852,852,852', -',852,852,852,852,852,,,,,,,,,,,,,,,,,,,,852,,,852,,,852,852,,,852,,', -',,,852,,,,,,,,,852,,,,,852,852,852,852,,852,852,852,852,,,,,852,852', -',,,241,241,241,852,241,852,852,852,241,241,852,852,,241,,241,241,241', -'241,241,241,241,,,,,,241,241,241,241,241,241,241,,,241,,,,,,,241,,,241', -'241,241,241,241,241,241,241,,241,241,241,,241,241,241,241,241,,,,,,', -',,,,,,,,,,,,,241,,,241,,,241,241,,,241,,,,,,241,,,,,,,,,241,,,,,241', -'241,241,241,,241,241,241,241,,,,,241,241,,,,844,844,844,241,844,241', -'241,241,844,844,241,241,,844,,844,844,844,844,844,844,844,,,,,,844,844', -'844,844,844,844,844,,,844,,,,,,,844,,,844,844,844,844,844,844,844,844', -',844,844,844,,844,844,844,844,844,,,,,,,,,,,,,,,,,,,,844,,,844,,,844', -'844,,,844,,,,,,844,,,,,,,,,844,,,,,844,844,844,844,,844,844,844,844', -',,,,844,844,,,,245,245,245,844,245,844,844,844,245,245,844,844,,245', -',245,245,245,245,245,245,245,,,,,,245,245,245,245,245,245,245,,,245', -',,,,,,245,,,245,245,245,245,245,245,245,245,,245,245,245,,245,245,245', -'245,245,,,,,,,,,,,,,,,,,,,,245,,,245,,,245,245,,,245,,,,,,245,,,,,,', -',,245,,,,,245,245,245,245,,245,245,245,245,,,,,245,245,,,,246,246,246', -'245,246,245,245,245,246,246,245,245,,246,,246,246,246,246,246,246,246', -',,,,,246,246,246,246,246,246,246,,,246,,,,,,,246,,,246,246,246,246,246', -'246,246,246,,246,246,246,,246,246,246,246,246,,,,,,,,,,,,,,,,,,,,246', -',,246,,,246,246,,,246,,,,,,246,,,,,,,,,246,,,,,246,246,246,246,,246', -'246,246,246,,,,,246,246,,,,247,247,247,246,247,246,246,246,247,247,246', -'246,,247,,247,247,247,247,247,247,247,,,,,,247,247,247,247,247,247,247', -',,247,,,,,,,247,,,247,247,247,247,247,247,247,247,,247,247,247,,247', -'247,247,247,247,,,,,,,,,,,,,,,,,,,,247,,,247,,,247,247,,,247,,,,,,247', -',,,,,,,,247,,,,,247,247,247,247,,247,247,247,247,,,,,247,247,,,,248', -'248,248,247,248,247,247,247,248,248,247,247,,248,,248,248,248,248,248', -'248,248,,,,,,248,248,248,248,248,248,248,,,248,,,,,,,248,,,248,248,248', -'248,248,248,248,248,,248,248,248,,248,248,248,248,248,,,,,,,,,,,,,,', -',,,,,248,,,248,,,248,248,,,248,,,,,,248,,,,,,,,,248,,,,,248,248,248', -'248,,248,248,248,248,,,,,248,248,,,,249,249,249,248,249,248,248,248', -'249,249,248,248,,249,,249,249,249,249,249,249,249,,,,,,249,249,249,249', -'249,249,249,,,249,,,,,,,249,,,249,249,249,249,249,249,249,249,,249,249', -'249,,249,249,249,249,249,,,,,,,,,,,,,,,,,,,,249,,,249,,,249,249,,,249', -',,,,,249,,,,,,,,,249,,,,,249,249,249,249,,249,249,249,249,,,,,249,249', -',,,250,250,250,249,250,249,249,249,250,250,249,249,,250,,250,250,250', -'250,250,250,250,,,,,,250,250,250,250,250,250,250,,,250,,,,,,,250,,,250', -'250,250,250,250,250,250,250,,250,250,250,,250,250,250,250,250,,,,,,', -',,,,,,,,,,,,,250,,,250,,,250,250,,,250,,,,,,250,,,,,,,,,250,,,,,250', -'250,250,250,,250,250,250,250,,,,,250,250,,,,251,251,251,250,251,250', -'250,250,251,251,250,250,,251,,251,251,251,251,251,251,251,,,,,,251,251', -'251,251,251,251,251,,,251,,,,,,,251,,,251,251,251,251,251,251,251,251', -',251,251,251,,251,251,251,251,251,,,,,,,,,,,,,,,,,,,,251,,,251,,,251', -'251,,,251,,,,,,251,,,,,,,,,251,,,,,251,251,251,251,,251,251,251,251', -',,,,251,251,,,,252,252,252,251,252,251,251,251,252,252,251,251,,252', -',252,252,252,252,252,252,252,,,,,,252,252,252,252,252,252,252,,,252', -',,,,,,252,,,252,252,252,252,252,252,252,252,,252,252,252,,252,252,252', -'252,252,,,,,,,,,,,,,,,,,,,,252,,,252,,,252,252,,,252,,,,,,252,,,,,,', -',,252,,,,,252,252,252,252,,252,252,252,252,,,,,252,252,,,,253,253,253', -'252,253,252,252,252,253,253,252,252,,253,,253,253,253,253,253,253,253', -',,,,,253,253,253,253,253,253,253,,,253,,,,,,,253,,,253,253,253,253,253', -'253,253,253,,253,253,253,,253,253,253,253,253,,,,,,,,,,,,,,,,,,,,253', -',,253,,,253,253,,,253,,,,,,253,,,,,,,,,253,,,,,253,253,253,253,,253', -'253,253,253,,,,,253,253,,,,254,254,254,253,254,253,253,253,254,254,253', -'253,,254,,254,254,254,254,254,254,254,,,,,,254,254,254,254,254,254,254', -',,254,,,,,,,254,,,254,254,254,254,254,254,254,254,,254,254,254,,254', -'254,254,254,254,,,,,,,,,,,,,,,,,,,,254,,,254,,,254,254,,,254,,,,,,254', -',,,,,,,,254,,,,,254,254,254,254,,254,254,254,254,,,,,254,254,,,,255', -'255,255,254,255,254,254,254,255,255,254,254,,255,,255,255,255,255,255', -'255,255,,,,,,255,255,255,255,255,255,255,,,255,,,,,,,255,,,255,255,255', -'255,255,255,255,255,,255,255,255,,255,255,255,255,255,,,,,,,,,,,,,,', -',,,,,255,,,255,,,255,255,,,255,,,,,,255,,,,,,,,,255,,,,,255,255,255', -'255,,255,255,255,255,,,,,255,255,,,,256,256,256,255,256,255,255,255', -'256,256,255,255,,256,,256,256,256,256,256,256,256,,,,,,256,256,256,256', -'256,256,256,,,256,,,,,,,256,,,256,256,256,256,256,256,256,256,,256,256', -'256,,256,256,256,256,256,,,,,,,,,,,,,,,,,,,,256,,,256,,,256,256,,,256', -',,,,,256,,,,,,,,,256,,,,,256,256,256,256,,256,256,256,256,,,,,256,256', -',,,257,257,257,256,257,256,256,256,257,257,256,256,,257,,257,257,257', -'257,257,257,257,,,,,,257,257,257,257,257,257,257,,,257,,,,,,,257,,,257', -'257,257,257,257,257,257,257,,257,257,257,,257,257,257,257,257,,,,,,', -',,,,,,,,,,,,,257,,,257,,,257,257,,,257,,,,,,257,,,,,,,,,257,,,,,257', -'257,257,257,,257,257,257,257,,,,,257,257,,,,258,258,258,257,258,257', -'257,257,258,258,257,257,,258,,258,258,258,258,258,258,258,,,,,,258,258', -'258,258,258,258,258,,,258,,,,,,,258,,,258,258,258,258,258,258,258,258', -',258,258,258,,258,258,258,258,258,,,,,,,,,,,,,,,,,,,,258,,,258,,,258', -'258,,,258,,,,,,258,,,,,,,,,258,,,,,258,258,258,258,,258,258,258,258', -',,,,258,258,,,,259,259,259,258,259,258,258,258,259,259,258,258,,259', -',259,259,259,259,259,259,259,,,,,,259,259,259,259,259,259,259,,,259', -',,,,,,259,,,259,259,259,259,259,259,259,259,,259,259,259,,259,259,259', -'259,259,,,,,,,,,,,,,,,,,,,,259,,,259,,,259,259,,,259,,,,,,259,,,,,,', -',,259,,,,,259,259,259,259,,259,259,259,259,,,,,259,259,,,,260,260,260', -'259,260,259,259,259,260,260,259,259,,260,,260,260,260,260,260,260,260', -',,,,,260,260,260,260,260,260,260,,,260,,,,,,,260,,,260,260,260,260,260', -'260,260,260,,260,260,260,,260,260,260,260,260,,,,,,,,,,,,,,,,,,,,260', -',,260,,,260,260,,,260,,,,,,260,,,,,,,,,260,,,,,260,260,260,260,,260', -'260,260,260,,,,,260,260,,,,261,261,261,260,261,260,260,260,261,261,260', -'260,,261,,261,261,261,261,261,261,261,,,,,,261,261,261,261,261,261,261', -',,261,,,,,,,261,,,261,261,261,261,261,261,261,261,,261,261,261,,261', -'261,261,261,261,,,,,,,,,,,,,,,,,,,,261,,,261,,,261,261,,,261,,,,,,261', -',,,,,,,,261,,,,,261,261,261,261,,261,261,261,261,,,,,261,261,,,,262', -'262,262,261,262,261,261,261,262,262,261,261,,262,,262,262,262,262,262', -'262,262,,,,,,262,262,262,262,262,262,262,,,262,,,,,,,262,,,262,262,262', -'262,262,262,262,262,,262,262,262,,262,262,262,262,262,,,,,,,,,,,,,,', -',,,,,262,,,262,,,262,262,,,262,,,,,,262,,,,,,,,,262,,,,,262,262,262', -'262,,262,262,262,262,,,,,262,262,,,,263,263,263,262,263,262,262,262', -'263,263,262,262,,263,,263,263,263,263,263,263,263,,,,,,263,263,263,263', -'263,263,263,,,263,,,,,,,263,,,263,263,263,263,263,263,263,263,,263,263', -'263,,263,263,263,263,263,,,,,,,,,,,,,,,,,,,,263,,,263,,,263,263,,,263', -',,,,,263,,,,,,,,,263,,,,,263,263,263,263,,263,263,263,263,,,,,263,263', -',,,264,264,264,263,264,263,263,263,264,264,263,263,,264,,264,264,264', -'264,264,264,264,,,,,,264,264,264,264,264,264,264,,,264,,,,,,,264,,,264', -'264,264,264,264,264,264,264,,264,264,264,,264,264,264,264,264,,,,,,', -',,,,,,,,,,,,,264,,,264,,,264,264,,,264,,,,,,264,,,,,,,,,264,,,,,264', -'264,264,264,,264,264,264,264,,,,,264,264,,,,265,265,265,264,265,264', -'264,264,265,265,264,264,,265,,265,265,265,265,265,265,265,,,,,,265,265', -'265,265,265,265,265,,,265,,,,,,,265,,,265,265,265,265,265,265,265,265', -',265,265,265,,265,265,265,265,265,,,,,,,,,,,,,,,,,,,,265,,,265,,,265', -'265,,,265,,,,,,265,,,,,,,,,265,,,,,265,265,265,265,,265,265,265,265', -',,,,265,265,,,,266,266,266,265,266,265,265,265,266,266,265,265,,266', -',266,266,266,266,266,266,266,,,,,,266,266,266,266,266,266,266,,,266', -',,,,,,266,,,266,266,266,266,266,266,266,266,,266,266,266,,266,266,266', -'266,266,,,,,,,,,,,,,,,,,,,,266,,,266,,,266,266,,,266,,,,,,266,,,,,,', -',,266,,,,,266,266,266,266,,266,266,266,266,,,,,266,266,,,,271,271,271', -'266,271,266,266,266,271,271,266,266,,271,,271,271,271,271,271,271,271', -',,,,,271,271,271,271,271,271,271,,,271,,,,,,,271,,,271,271,271,271,271', -'271,271,271,,271,271,271,,271,271,271,271,271,,,,,,,,,,,,,,,,,,,,271', -',,271,,,271,271,,,271,,,,,,271,,,,,,,,,271,,,,,271,271,271,271,,271', -'271,271,271,,,,,271,271,,,,824,824,824,271,824,271,271,271,824,824,271', -'271,,824,,824,824,824,824,824,824,824,,,,,,824,824,824,824,824,824,824', -',,824,,,,,,,824,,,824,824,824,824,824,824,824,824,,824,824,824,,824', -'824,824,824,824,,,,,,,,,,,,,,,,,,,,824,,,824,,,824,824,,,824,,,,,,824', -',,,,,,,,824,,,,,824,824,824,824,,824,824,824,824,,,,,824,824,,,,779', -'779,779,824,779,824,824,824,779,779,824,824,,779,,779,779,779,779,779', -'779,779,,,,,,779,779,779,779,779,779,779,,,779,,,,,,,779,,,779,779,779', -'779,779,779,779,779,,779,779,779,,779,779,779,779,779,,,,,,,,,,,,,,', -',,,,,779,,,779,,,779,779,,,779,,,,,,779,,,,,,,,,779,,,,,779,779,779', -'779,,779,779,779,779,,,,,779,779,,,,765,765,765,779,765,779,779,779', -'765,765,779,779,,765,,765,765,765,765,765,765,765,,,,,,765,765,765,765', -'765,765,765,,,765,,,,,,,765,,,765,765,765,765,765,765,765,765,,765,765', -'765,,765,765,765,765,765,,,,,,,,,,,,,,,,,,,,765,,,765,,,765,765,,,765', -',765,,,,765,,,,,,,,,765,,,,,765,765,765,765,,765,765,765,765,,,,,765', -'765,,,,287,287,287,765,287,765,765,765,287,287,765,765,,287,,287,287', -'287,287,287,287,287,,,,,,287,287,287,287,287,287,287,,,287,,,,,,,287', -',,287,287,287,287,287,287,287,287,,287,287,287,,287,287,287,287,287', -',,,,,,,,,,,,,,,,,,,287,,,287,,,287,287,,,287,,,,,,287,,,,,,,,,287,,', -',,287,287,287,287,,287,287,287,287,,,,,287,287,,,,745,745,745,287,745', -'287,287,287,745,745,287,287,,745,,745,745,745,745,745,745,745,,,,,,745', -'745,745,745,745,745,745,,,745,,,,,,,745,,,745,745,745,745,745,745,745', -'745,,745,745,745,,745,745,745,745,745,,,,,,,,,,,,,,,,,,,,745,,,745,', -',745,745,,,745,,,,,,745,,,,,,,,,745,,,,,745,745,745,745,,745,745,745', -'745,,,,,745,745,,,,742,742,742,745,742,745,745,745,742,742,745,745,', -'742,,742,742,742,742,742,742,742,,,,,,742,742,742,742,742,742,742,,', -'742,,,,,,,742,,,742,742,742,742,742,742,742,742,,742,742,742,,742,742', -'742,742,742,,,,,,,,,,,,,,,,,,,,742,,,742,,,742,742,,,742,,,,,,742,,', -',,,,,,742,,,,,742,742,742,742,,742,742,742,742,,,,,742,742,,,,294,294', -'294,742,294,742,742,742,294,294,742,742,,294,,294,294,294,294,294,294', -'294,,,,,,294,294,294,294,294,294,294,,,294,,,,,,,294,,,294,294,294,294', -'294,294,294,294,294,294,294,294,,294,294,294,294,294,,,,,,,,,,,,,,,', -',,,,294,,,294,,,294,294,,,294,,294,,294,,294,,,294,,,,,,294,,,,,294', -'294,294,294,,294,294,294,294,,,,,294,294,,,,295,295,295,294,295,294', -'294,294,295,295,294,294,,295,,295,295,295,295,295,295,295,,,,,,295,295', -'295,295,295,295,295,,,295,,,,,,,295,,,295,295,295,295,295,295,295,295', -'295,295,295,295,,295,295,295,295,295,,,,,,,,,,,,,,,,,,,,295,,,295,,', -'295,295,,,295,,295,,295,,295,,,295,,,,,,295,,,,,295,295,295,295,,295', -'295,295,295,,,,,295,295,,,,303,303,303,295,303,295,295,295,303,303,295', -'295,,303,,303,303,303,303,303,303,303,,,,,,303,303,303,303,303,303,303', -',,303,,,,,,,303,,,303,303,303,303,303,303,303,303,303,303,303,303,,303', -'303,303,303,303,,,,,,,,,,,,,,,,,,,,303,,,303,,,303,303,,,303,,303,,303', -',303,,,303,,,,,,303,,,,,303,303,303,303,,303,303,303,303,,,,,303,303', -'303,,,733,733,733,303,733,303,303,303,733,733,303,303,,733,,733,733', -'733,733,733,733,733,,,,,,733,733,733,733,733,733,733,,,733,,,,,,,733', -',,733,733,733,733,733,733,733,733,733,733,733,733,,733,733,733,733,733', -',,,,,,,,,,,,,,,,,,,733,,,733,,,733,733,,,733,,733,,733,,733,,,733,,', -',,,733,,,,,733,733,733,733,,733,733,733,733,,,,,733,733,,,,310,310,310', -'733,310,733,733,733,310,310,733,733,,310,,310,310,310,310,310,310,310', -',,,,,310,310,310,310,310,310,310,,,310,,,,,,,310,,,310,310,310,310,310', -'310,310,310,,310,310,310,,310,310,310,310,310,,,,,,,,,,,,,,,,,,,,310', -',,310,,,310,310,,,310,,,,,,310,,,,,,,,,310,,,,,310,310,310,310,,310', -'310,310,310,,,,,310,310,,,,686,686,686,310,686,310,310,310,686,686,310', -'310,,686,,686,686,686,686,686,686,686,,,,,,686,686,686,686,686,686,686', -',,686,,,,,,,686,,,686,686,686,686,686,686,686,686,,686,686,686,,686', -'686,686,686,686,,,,,,,,,,,,,,,,,,,,686,,,686,,,686,686,,,686,,,,,,686', -',,,,,,,,686,,,,,686,686,686,686,,686,686,686,686,,,,,686,686,,,,312', -'312,312,686,312,686,686,686,312,312,686,686,,312,,312,312,312,312,312', -'312,312,,,,,,312,312,312,312,312,312,312,,,312,,,,,,,312,,,312,312,312', -'312,312,312,312,312,,312,312,312,,312,312,312,312,312,,,,,,,,,,,,,,', -',,,,,312,,,312,,,312,312,,,312,,,,,,312,,,,,,,,,312,,,,,312,312,312', -'312,,312,312,312,312,,,,,312,312,,,,315,315,315,312,315,312,312,312', -'315,315,312,312,,315,,315,315,315,315,315,315,315,,,,,,315,315,315,315', -'315,315,315,,,315,,,,,,,315,,,315,315,315,315,315,315,315,315,,315,315', -'315,,315,315,315,315,315,,,,,,,,,,,,,,,,,,,,315,,,315,,,315,315,,,315', -',,,,,315,,,,,,,,,315,,,,,315,315,315,315,,315,315,315,315,,,,,315,315', -',,,316,316,316,315,316,315,315,315,316,316,315,315,,316,,316,316,316', -'316,316,316,316,,,,,,316,316,316,316,316,316,316,,,316,,,,,,,316,,,316', -'316,316,316,316,316,316,316,,316,316,316,,316,316,316,316,316,,,,,,', -',,,,,,,,,,,,,316,,,316,,,316,316,,,316,,,,,,316,,,,,,,,,316,,,,,316', -'316,316,316,,316,316,316,316,,,,,316,316,,,,685,685,685,316,685,316', -'316,316,685,685,316,316,,685,,685,685,685,685,685,685,685,,,,,,685,685', -'685,685,685,685,685,,,685,,,,,,,685,,,685,685,685,685,685,685,685,685', -',685,685,685,,685,685,685,685,685,,,,,,,,,,,,,,,,,,,,685,,,685,,,685', -'685,,,685,,,,,,685,,,,,,,,,685,,,,,685,685,685,685,,685,685,685,685', -',,,,685,685,,,,,,,685,,685,685,685,,,685,685,321,321,321,321,321,,,', -'321,321,,,,321,,321,321,321,321,321,321,321,,,,,,321,321,321,321,321', -'321,321,,,321,,,,,,321,321,,321,321,321,321,321,321,321,321,321,,321', -'321,321,,321,321,321,321,321,,,,,,,,,,,,,,,,,,,,321,,,321,,,321,321', -',,321,,321,,,,321,,,,,,,,,321,,,,,321,321,321,321,,321,321,321,321,', -',,,321,321,,,,681,681,681,321,681,321,321,321,681,681,321,321,,681,', -'681,681,681,681,681,681,681,,,,,,681,681,681,681,681,681,681,,,681,', -',,,,,681,,,681,681,681,681,681,681,681,681,,681,681,681,,681,681,681', -'681,681,,,,,,,,,,,,,,,,,,,,681,,,681,,,681,681,,,681,,,,,,681,,,,,,', -',,681,,,,,681,681,681,681,,681,681,681,681,,,,,681,681,,,,680,680,680', -'681,680,681,681,681,680,680,681,681,,680,,680,680,680,680,680,680,680', -',,,,,680,680,680,680,680,680,680,,,680,,,,,,,680,,,680,680,680,680,680', -'680,680,680,,680,680,680,,680,680,680,680,680,,,,,,,,,,,,,,,,,,,,680', -',,680,,,680,680,,,680,,,,,,680,,,,,,,,,680,,,,,680,680,680,680,,680', -'680,680,680,,,,,680,680,,,,679,679,679,680,679,680,680,680,679,679,680', -'680,,679,,679,679,679,679,679,679,679,,,,,,679,679,679,679,679,679,679', -',,679,,,,,,,679,,,679,679,679,679,679,679,679,679,679,679,679,679,,679', -'679,679,679,679,,,,,,,,,,,,,,,,,,,,679,,,679,,,679,679,,,679,,,,679', -',679,,,679,,,,,,679,,,,,679,679,679,679,,679,679,679,679,,,,,679,679', -',,,678,678,678,679,678,679,679,679,678,678,679,679,,678,,678,678,678', -'678,678,678,678,,,,,,678,678,678,678,678,678,678,,,678,,,,,,,678,,,678', -'678,678,678,678,678,678,678,678,678,678,678,,678,678,678,678,678,,,', -',,,,,,,,,,,,,,,,678,,,678,,,678,678,,,678,,678,,678,,678,,,678,,,,,', -'678,,,,,678,678,678,678,,678,678,678,678,,,,,678,678,,,,218,218,218', -'678,218,678,678,678,218,218,678,678,,218,,218,218,218,218,218,218,218', -',,,,,218,218,218,218,218,218,218,,,218,,,,,,,218,,,218,218,218,218,218', -'218,218,218,,218,218,218,,218,218,,,218,,,,,,,,,,,,,,,,,,,,218,,,218', -',,218,218,,,218,,218,,,,,,,,,,,,,,,,,,218,218,218,218,,218,218,218,218', -',,,,218,218,,,,221,221,221,218,221,218,218,218,221,221,,,,221,,221,221', -'221,221,221,221,221,,,,,,221,221,221,221,221,221,221,,,221,,,,,,,221', -',,221,221,221,221,221,221,221,221,,221,221,221,,221,221,,,221,,,,,,', -',,,,,,,,,,,,,221,,,221,,,221,221,,,221,,221,,,,,,,,,,,,,,,,,,221,221', -'221,221,,221,221,221,221,,,,,221,221,,,,553,553,553,221,553,221,221', -'221,553,553,,,,553,,553,553,553,553,553,553,553,,,,,,553,553,553,553', -'553,553,553,,,553,,,,,,,553,,,553,553,553,553,553,553,553,553,,553,553', -'553,,553,553,,,553,,,,,,,,,,,,,,,,,,,,553,,,553,,,553,553,,,553,,,,', -',,,,,,,,,,,,,,,553,553,553,553,,553,553,553,553,,,,,553,553,,,,78,78', -'78,553,78,553,553,553,78,78,,,,78,,78,78,78,78,78,78,78,,,,,,78,78,78', -'78,78,78,78,,,78,,,,,,,78,,,78,78,78,78,78,78,78,78,,78,78,78,,78,78', -',,78,,,,,,,,,,,,,,,,,,,,78,,,78,,,78,78,,,78,,,,,,,,,,,,,,,,,,,,78,78', -'78,78,,78,78,78,78,,,,,78,78,,,,544,544,544,78,544,78,78,78,544,544', -',,,544,,544,544,544,544,544,544,544,,,,,,544,544,544,544,544,544,544', -',,544,,,,,,,544,,,544,544,544,544,544,544,544,544,,544,544,544,,544', -'544,,,544,,,,,,,,,,,,,,,,,,,,544,,,544,,,544,544,,,544,,,,,,,,,,,,,', -',,,,,,544,544,544,544,,544,544,544,544,,,,,544,544,,,,348,348,348,544', -'348,544,544,544,348,348,,,,348,,348,348,348,348,348,348,348,,,,,,348', -'348,348,348,348,348,348,,,348,,,,,,,348,,,348,348,348,348,348,348,348', -'348,,348,348,348,,348,348,,,348,,,,,,,,,,,,,,,,,,,,348,,,348,,,348,348', -',,348,,,,,,,,,,,,,,,,,,,,348,348,348,348,,348,348,348,348,,,,,348,348', -',,,1103,1103,1103,348,1103,348,348,348,1103,1103,,,,1103,,1103,1103', -'1103,1103,1103,1103,1103,,,,,,1103,1103,1103,1103,1103,1103,1103,,,1103', -',,,,,,1103,,,1103,1103,1103,1103,1103,1103,1103,1103,,1103,1103,1103', -',1103,1103,,,1103,,,,,,,,,,,,,,,,,,,,1103,,,1103,,,1103,1103,,,1103', -',,,,,,,,,,,,,,,,,,,1103,1103,1103,1103,,1103,1103,1103,1103,,,,,1103', -'1103,,,,1033,1033,1033,1103,1033,1103,1103,1103,1033,1033,,,,1033,,1033', -'1033,1033,1033,1033,1033,1033,,,,,,1033,1033,1033,1033,1033,1033,1033', -',,1033,,,,,,,1033,,,1033,1033,1033,1033,1033,1033,1033,1033,,1033,1033', -'1033,,1033,1033,,,1033,,,,,,,,,,,,,,,,,,,,1033,,,1033,,,1033,1033,,', -'1033,,,,,,,,,,,,,,,,,,,,1033,1033,1033,1033,,1033,1033,1033,1033,,,', -',1033,1033,,,,77,77,77,1033,77,1033,1033,1033,77,77,,,,77,,77,77,77', -'77,77,77,77,,,,,,77,77,77,77,77,77,77,,,77,,,,,,,77,,,77,77,77,77,77', -'77,77,77,,77,77,77,,77,77,,,77,,,,,,,,,,,,,,,,,77,,,77,,,77,,,77,77', -',,77,,,,,,,,,,,,,,,,,,,,77,77,77,77,,77,77,77,77,,,,,77,77,,,,76,76', -'76,77,76,77,77,77,76,76,,,,76,,76,76,76,76,76,76,76,,,,,,76,76,76,76', -'76,76,76,,,76,,,,,,,76,,,76,76,76,76,76,76,76,76,,76,76,76,,76,76,,', -'76,,,,,,,,,,,,,,,,,,,,76,,,76,,,76,76,,,76,,76,,,,,,,,,,,,,,,,,,76,76', -'76,76,,76,76,76,76,,,,,76,76,,,,1023,1023,1023,76,1023,76,76,76,1023', -'1023,,,,1023,,1023,1023,1023,1023,1023,1023,1023,,,,,,1023,1023,1023', -'1023,1023,1023,1023,,,1023,,,,,,,1023,,,1023,1023,1023,1023,1023,1023', -'1023,1023,,1023,1023,1023,,1023,1023,,,1023,,,,,,,,,,,,,,,,,,,,1023', -',,1023,,,1023,1023,,,1023,,,,,,,,,,,,,,,,,,,,1023,1023,1023,1023,,1023', -'1023,1023,1023,,,,,1023,1023,,,,759,759,759,1023,759,1023,1023,1023', -'759,759,,,,759,,759,759,759,759,759,759,759,,,,,,759,759,759,759,759', -'759,759,,,759,,,,,,,759,,,759,759,759,759,759,759,759,759,,759,759,759', -',759,759,,,759,,,,,,,,,,,,,,,,,,,,759,,,759,,,759,759,,,759,,,,,,,,', -',,,,,,,,,,,759,759,759,759,,759,759,759,759,,,,,759,759,,,,38,38,38', -'759,38,759,759,759,38,38,,,,38,,38,38,38,38,38,38,38,,,,,,38,38,38,38', -'38,38,38,,,38,,,,,,,38,,,38,38,38,38,38,38,38,38,,38,38,38,,38,38,,', -'38,,,,,,,,,,,,,,,,,,,,38,,,38,,,38,38,,,38,,,1038,,1038,1038,1038,1038', -'1038,,,,,,,,,1038,,38,38,38,38,,38,38,38,38,,,,,38,38,,,,38,,1038,38', -',38,38,38,748,748,748,,748,1038,1038,,748,748,1038,,,748,,748,748,748', -'748,748,748,748,,,,,,748,748,748,748,748,748,748,,,748,,,,,,,748,,,748', -'748,748,748,748,748,748,748,,748,748,748,,748,748,,,748,,,,,,,,,,,,', -',,,,,,,748,,,748,,,748,748,,,748,,,,,,,,,,,,,,,,,,,,748,748,748,748', -',748,748,748,748,,,,,748,748,,,,329,329,329,748,329,748,748,748,329', -'329,,,,329,,329,329,329,329,329,329,329,,,,,,329,329,329,329,329,329', -'329,,,329,,,,,,,329,,,329,329,329,329,329,329,329,329,,329,329,329,', -'329,329,,,329,,,,,,,,,,,,,,,,,,,,329,,,329,,,329,329,,,329,,,777,,777', -'777,777,777,777,,,,,,,,,777,,329,329,329,329,,329,329,329,329,,,,,329', -'329,,,,329,,777,329,,329,329,329,37,37,37,,37,777,777,,37,37,777,,,37', -',37,37,37,37,37,37,37,,,,,,37,37,37,37,37,37,37,,,37,,,,,,,37,,,37,37', -'37,37,37,37,37,37,,37,37,37,,37,37,,,37,,,,,,,,,,,,,,,,,,,,37,,,37,', -',37,37,,,37,,37,,,,,,,,,,,,,,,,,,37,37,37,37,,37,37,37,37,,,,,37,37', -',,,,,,37,,37,37,37,423,423,423,423,423,423,423,423,423,423,423,423,423', -'423,423,423,423,423,423,423,423,423,423,423,,,,423,423,423,423,423,423', -'423,423,423,423,,,,,,423,423,423,423,423,423,423,423,423,,,423,,,,,', -',,423,423,,423,423,423,423,423,423,423,,,423,423,,,,423,423,423,423', -',,,,,,,,,,,,,423,423,,423,423,423,423,423,423,423,423,423,423,423,423', -',,423,423,,,,,,,,,,,,,,423,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8', -'8,8,8,,,,8,8,8,8,8,8,8,8,8,8,,,,,,8,8,8,8,8,8,8,8,8,8,,8,,,,,,,,8,8', -',8,8,8,8,8,8,8,,,8,8,,,,8,8,8,8,,,,,,,,,,,,,,8,8,,8,8,8,8,8,8,8,8,8', -'8,8,8,,,8,8,,,,,,,,,,,,,,8,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9', -'9,9,9,,,,9,9,9,9,9,9,9,9,9,9,,,,,,9,9,9,9,9,9,9,9,9,,,9,,,,,,,,9,9,', -'9,9,9,9,9,9,9,,,9,9,,,,9,9,9,9,,,,,,,,,,,,,,9,9,,9,9,9,9,9,9,9,9,9,9', -'9,9,,,9,9,,,,,,,,,,,,,,9,665,665,665,665,665,665,665,665,665,665,665', -'665,665,665,665,665,665,665,665,665,665,665,665,665,,,,665,665,665,665', -'665,665,665,665,665,665,,,,,,665,665,665,665,665,665,665,665,665,,,665', -',,,,,,,665,665,,665,665,665,665,665,665,665,,,665,665,,,,665,665,665', -'665,,,,,,,,,,,,,,665,665,,665,665,665,665,665,665,665,665,665,665,665', -'665,,,665,665,875,875,875,875,,,1182,,1182,1182,1182,1182,1182,665,', -',875,875,875,875,,1182,,875,875,,,,,875,875,,,875,875,,,,,,,,,1182,', -',,,,,,,,875,1182,1182,875,,,1182,875,,,875,,875,,,,,,,875,,,,,,,875', -',,,875,875,875,875,,875,875,875,875,,,,,875,875,1200,1200,1200,1200', -',,875,,875,875,875,,,875,875,,1200,1200,1200,1200,,,1036,1200,1036,1036', -'1036,1036,1036,1200,1200,,,1200,,,,1036,,,,,,,,,,,,,,,,1200,,,1200,', -',1036,1200,,,1200,,,,,1036,1036,1036,1036,,,,1036,,,,1200,,,,1200,1200', -'1200,1200,,1200,1200,1200,1200,,,,,1200,1200,1001,1001,1001,1001,,,1200', -',1200,1200,1200,,,1200,1200,,1001,1001,1001,1001,,,1094,1001,1094,1094', -'1094,1094,1094,1001,1001,,,1001,,,,1094,,,,,,,,,,,,,,,,1001,,,1001,', -',1094,1001,,,1001,,,,,1094,1094,1094,1094,,,,1094,,,,1001,,,,1001,1001', -'1001,1001,,1001,1001,1001,1001,,,,,1001,1001,,,,,,,1001,,1001,1001,1001', -',,1001,1001,725,725,725,725,725,725,725,725,725,725,725,725,725,725', -'725,725,725,725,725,725,725,725,725,725,,,,725,725,725,725,725,725,725', -'725,725,725,,,,,,725,725,725,725,725,725,725,725,725,,,725,,,,,,,,725', -'725,,725,725,725,725,725,725,725,,,725,725,,,,725,725,725,725,,,,,,', -',,,,,,,725,725,,725,725,725,725,725,725,725,725,725,725,725,725,,,725', -'484,484,484,484,,,1041,,1041,1041,1041,1041,1041,,,,484,484,484,484', -',1041,,484,,,,,,484,484,,,484,,,,,,,,,,1041,,,,,,,,,,484,1041,1041,484', -',,1041,484,,,484,,,,,,,,,,,,,,,,484,,,,484,484,484,484,,484,484,484', -'484,,,,,484,484,1124,1124,1124,1124,,,484,,484,484,484,,,484,484,,1124', -'1124,1124,1124,,,363,1124,363,363,363,363,363,1124,1124,,,1124,,,,363', -',,,,,,,,,,,,,,,1124,,,1124,,,363,1124,,,1124,,1124,,,363,363,363,363', -',,,363,,,,1124,,,,1124,1124,1124,1124,,1124,1124,1124,1124,,,,,1124', -'1124,1138,1138,1138,1138,,,1124,,1124,1124,1124,,,1124,1124,,1138,1138', -'1138,1138,,,1097,1138,1097,1097,1097,1097,1097,1138,1138,,,1138,,,,1097', -',,,,,,,,,,,,,,,1138,,,1138,,,1097,1138,,,1138,,,,,1097,1097,1097,1097', -',,,1097,,,,1138,,,,1138,1138,1138,1138,,1138,1138,1138,1138,,,,,1138', -'1138,1140,1140,1140,1140,,,1138,,1138,1138,1138,,,1138,1138,,1140,1140', -'1140,1140,,,1043,1140,1043,1043,1043,1043,1043,1140,1140,,,1140,,,,1043', -',,,,,,,,,,,,,,,1140,,,1140,,,1043,1140,,,1140,,1140,,,,,1043,1043,,', -',1043,,,,1140,,,,1140,1140,1140,1140,,1140,1140,1140,1140,,,,,1140,1140', -'1176,1176,1176,1176,,,1140,,1140,1140,1140,,,1140,1140,,1176,1176,1176', -'1176,,,1099,1176,1099,1099,1099,1099,1099,1176,1176,,,1176,,,,1099,', -',,,,,,,,,,,,,,1176,,,1176,,,1099,1176,,,1176,,,,,,,1099,1099,,,,1099', -',,,1176,,,,1176,1176,1176,1176,,1176,1176,1176,1176,,,,,1176,1176,889', -'889,889,889,,,1176,,1176,1176,1176,,,1176,1176,,889,889,889,889,,,1186', -'889,1186,1186,1186,1186,1186,889,889,,,889,,,,1186,,,,,,,,,,,,,,,,889', -',,889,,,1186,889,,,889,,,,,,,1186,1186,,,,1186,,,,889,,,,889,889,889', -'889,,889,889,889,889,,,,,889,889,881,881,881,881,,,889,,889,889,889', -',,889,889,,881,881,881,881,,,1212,881,1212,1212,1212,1212,1212,881,881', -',,881,,,,1212,,,,,,,,,,,,,,,,881,,,881,,,1212,881,,,881,,881,,,,,1212', -'1212,,,,1212,,,,881,,,,881,881,881,881,,881,881,881,881,,,,,881,881', -'871,871,871,871,,,881,,881,881,881,,,881,881,,871,871,871,871,,,1180', -'871,1180,1180,1180,1180,1180,871,871,,,871,,,,1180,,,,,,,,,,,,,,,,871', -',,871,,,1180,871,,,871,,,,,1180,1180,1180,1180,,,,1180,,,,871,,,,871', -'871,871,871,,871,871,871,871,,,,,871,871,874,874,874,874,,,871,,871', -'871,871,,,871,871,,874,874,874,874,,,,874,874,,,,,874,874,,,874,874', -',,,,,,,,,,,,,,,,,,874,,,874,,,,874,,,874,,874,,,,,,,874,,,,,,,874,,', -',874,874,874,874,,874,874,874,874,,,,,874,874,1084,1084,1084,1084,,', -'874,,874,874,874,,,874,874,,1084,1084,1084,1084,,,1184,1084,1184,1184', -'1184,1184,1184,1084,1084,,,1084,,,,1184,,,,,,,,,,,,,,,,1084,,,1084,', -',1184,1084,,,1084,,,,,,,1184,1184,,,,1184,,,,1084,,,,1084,1084,1084', -'1084,,1084,1084,1084,1084,,,,,1084,1084,985,985,985,985,,,1084,,1084', -'1084,1084,,,1084,1084,,985,985,985,985,,,1159,985,1159,1159,1159,1159', -'1159,985,985,,,985,,,,1159,,,,,,,,,,,,,,,,985,,,985,,,1159,985,,,985', -',,,,,,1159,1159,,,,1159,,,,985,,,,985,985,985,985,,985,985,985,985,', -',,,985,985,702,702,702,702,,,985,,985,985,985,,,985,985,,702,702,702', -'702,,,642,702,642,642,642,642,642,702,702,,,702,,,,642,,,,,,,,,,,,,', -',,702,,,702,,,642,702,,,702,,702,,,642,642,642,642,,,,642,,,,702,,,', -'702,702,702,702,,702,702,702,702,,,,,702,702,702,953,953,953,953,,702', -',702,702,702,,,702,702,,,953,953,953,953,,,,953,953,,,,,953,953,,,953', -'953,,,,,,,,,,,,,,,,,,,953,,,953,,,,953,,,953,,953,,,,,,,953,,,,,,,953', -',,,953,953,953,953,,953,953,953,953,,,,,953,953,,,,,,,953,,953,953,953', -',,953,953,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24', -'24,24,24,24,,,,24,24,24,24,24,24,24,24,24,24,,,,,,24,24,24,24,24,24', -'24,24,24,24,24,24,,24,,,,,,24,24,,24,24,24,24,24,24,24,,,24,24,,,,24', -'24,24,24,,,,,,24,,,,,,,,24,24,,24,24,24,24,24,24,24,24,24,24,24,24,', -',24,891,891,891,891,,,,404,,404,404,404,404,404,,,891,891,891,,,,404', -',,,,,,891,891,,,891,708,708,708,708,,,,,,,404,404,,,,,708,708,708,404', -'404,404,404,,,,404,,,708,708,,,708,,,,,,,,,,,,,,,,891,891,891,891,,891', -'891,891,891,,,,,891,891,,,,,,,891,,891,891,891,,,,,,,,,708,708,708,708', -',708,708,708,708,,,,,708,708,890,890,890,890,,,708,,708,708,708,,,,', -',890,890,890,1157,1157,,,1157,,,,,,890,890,1157,1157,890,1157,1157,1157', -'1157,1157,1157,1157,,,1157,1157,,,,1157,1157,1157,1157,,,,,,1157,,,', -',,,,1157,1157,,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157,1157', -'1157,,,1157,890,890,890,890,,890,890,890,890,,,,,890,890,672,672,,,672', -',890,,890,890,890,,672,672,,672,672,672,672,672,672,672,,,672,672,,', -',672,672,672,672,,,,,,672,,,,,,,,672,672,,672,672,672,672,672,672,672', -'672,672,672,672,672,635,635,672,,635,,,,,,,,635,635,,635,635,635,635', -'635,635,635,,,635,635,,,,635,635,635,635,,,,,,635,,,,,,,,635,635,,635', -'635,635,635,635,635,635,635,635,635,635,635,558,558,635,,558,,,,,,,', -'558,558,,558,558,558,558,558,558,558,,,558,558,,,,558,558,558,558,,', -',,,558,,,,,,,,558,558,,558,558,558,558,558,558,558,558,558,558,558,558', -'634,634,558,,634,,,,,,,,634,634,,634,634,634,634,634,634,634,,,634,634', -',,,634,634,634,634,,,,,,634,,,,,,,,634,634,,634,634,634,634,634,634', -'634,634,634,634,634,634,557,557,634,,557,,,,,,,,557,557,,557,557,557', -'557,557,557,557,,,557,557,,,,557,557,557,557,,,,,,557,,,,,,,,557,557', -',557,557,557,557,557,557,557,557,557,557,557,557,478,478,557,,478,,', -',,,,,478,478,,478,478,478,478,478,478,478,,,478,478,,,,478,478,478,478', -',,,,,478,,,,,,,,478,478,,478,478,478,478,478,478,478,478,478,478,478', -'478,548,548,478,,548,,,,,,,,548,548,,548,548,548,548,548,548,548,,,548', -'548,,,,548,548,548,548,,,,,,548,,,,,,,,548,548,,548,548,548,548,548', -'548,548,548,548,548,548,548,628,628,548,,628,,,,,,,,628,628,,628,628', -'628,628,628,628,628,,,628,628,,,,628,628,628,628,,,,,,628,,,,,,,,628', -'628,,628,628,628,628,628,628,628,628,628,628,628,628,290,290,628,,290', -',,,,,,,290,290,,290,290,290,290,290,290,290,,,290,290,,,,290,290,290', -'290,,,,,,,,,,,,,,290,290,,290,290,290,290,290,290,290,290,290,290,290', -'290,225,225,290,,225,,,,,,,,225,225,,225,225,225,225,225,225,225,,,225', -'225,,,,225,225,225,225,,,,,,225,,,,,,,,225,225,,225,225,225,225,225', -'225,225,225,225,225,225,225,627,627,225,,627,,,,,,,,627,627,,627,627', -'627,627,627,627,627,,,627,627,,,,627,627,627,627,,,,,,627,,,,,,,,627', -'627,,627,627,627,627,627,627,627,627,627,627,627,627,477,477,627,,477', -',,,,,,,477,477,,477,477,477,477,477,477,477,,,477,477,,,,477,477,477', -'477,,,,,,477,,,,,,,,477,477,,477,477,477,477,477,477,477,477,477,477', -'477,477,547,547,477,,547,,,,,,,,547,547,,547,547,547,547,547,547,547', -',,547,547,,,,547,547,547,547,,,,,,547,,,,,,,,547,547,,547,547,547,547', -'547,547,547,547,547,547,547,547,1152,1152,547,,1152,,,,,,,,1152,1152', -',1152,1152,1152,1152,1152,1152,1152,,,1152,1152,,,,1152,1152,1152,1152', -',,,,,1152,,,,,,,,1152,1152,,1152,1152,1152,1152,1152,1152,1152,1152', -'1152,1152,1152,1152,1156,1156,1152,,1156,,,,,,,,1156,1156,,1156,1156', -'1156,1156,1156,1156,1156,,,1156,1156,,,,1156,1156,1156,1156,,,,,,1156', -',,,,,,,1156,1156,,1156,1156,1156,1156,1156,1156,1156,1156,1156,1156', -'1156,1156,673,673,1156,,673,,,,,,,,673,673,,673,673,673,673,673,673', -'673,,,673,673,,,,673,673,673,673,,,,,,673,,,,,,,,673,673,,673,673,673', -'673,673,673,673,673,673,673,673,673,224,224,673,,224,,,,,,,,224,224', -',224,224,224,224,224,224,224,,,224,224,,,,224,224,224,224,,,,,,224,', -',,,,,,224,224,,224,224,224,224,224,224,224,224,224,224,224,224,,,224' ] - racc_action_check = arr = ::Array.new(28164, nil) - idx = 0 - clist.each do |str| - str.split(',', -1).each do |i| - arr[idx] = i.to_i unless i.empty? - idx += 1 - end - end - -racc_action_pointer = [ - 3830, 1471, nil, 62, nil, 5256, 1079, 1168, 24697, 24825, - 1162, nil, 1068, 1061, 1114, 815, 1085, 1080, 587, 248, - nil, -41, 5780, 2390, 26779, 1050, nil, 339, nil, 5, - 5921, 6031, 6165, 6296, 6427, nil, 3542, 24430, 24021, nil, - 921, 390, 614, 984, 6558, 6689, 128, 6820, 6951, 522, - 7082, 792, 831, 804, 850, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 7485, nil, 7626, 7757, 7888, -15, - nil, 8150, 8281, nil, nil, 8412, 23628, 23497, 22842, nil, - nil, nil, nil, nil, nil, 589, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 471, nil, nil, 583, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 794, - nil, 8829, nil, nil, nil, nil, 8972, 9103, 9234, 9365, - 9508, nil, 2390, nil, 687, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 573, nil, 3110, 9770, 9901, 22449, 14708, - 14839, 22580, 14970, 15101, 28049, 27622, nil, nil, 15363, 15494, - 15625, nil, nil, 933, 74, 108, 344, 109, 167, 220, - nil, 16411, 4118, 131, nil, 16673, 16804, 16935, 17066, 17197, - 17328, 17459, 17590, 17721, 17852, 17983, 18114, 18245, 18376, 18507, - 18638, 18769, 18900, 19031, 19162, 19293, 19424, nil, nil, nil, - nil, 19555, nil, nil, 409, 444, 475, 504, 556, 557, - 559, -50, -32, 198, nil, nil, nil, 20079, nil, nil, - 27561, nil, nil, 1255, 20472, 20603, nil, nil, nil, nil, - nil, nil, nil, 20734, nil, 3254, nil, 1211, 1219, nil, - 20996, 1281, 21258, nil, nil, 21389, 21520, nil, nil, 370, - nil, 21794, 1223, 1283, 1273, 1526, 1291, 1333, 1291, 24291, - 950, 1221, 1110, 1083, 1383, 1077, nil, 1383, 1346, 6, - -60, 208, nil, nil, nil, 278, 140, 287, 23104, nil, - 98, 864, 6296, 6165, 777, nil, 851, 12283, nil, 12414, - 819, 2822, 358, 25560, 899, 2246, 2102, 1367, 916, nil, - 485, 600, 988, 1017, 687, 1094, nil, 849, 2534, 14, - -11, 14166, 1238, 4262, 291, 1189, 1072, 551, 943, 777, - 1264, 1087, 1286, nil, nil, 1085, 1229, 398, nil, 844, - nil, 1210, 12545, nil, 26850, nil, 178, 405, 293, 281, - 392, -41, -25, 400, nil, nil, nil, nil, nil, nil, - nil, nil, 1212, 24569, nil, nil, nil, nil, 1207, nil, - 1273, 1178, 14577, 1176, nil, nil, 1101, nil, 266, 280, - 1202, nil, nil, 2678, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 2822, 1098, nil, 1093, 1091, 356, 277, - 14443, nil, nil, nil, 805, 0, 1113, nil, nil, 14307, - 14029, nil, nil, nil, 10, nil, 1108, 27744, 27378, 13888, - -31, 13757, 13626, 13495, 25459, 4406, 4550, 1133, 1277, 1040, - 1036, 1035, 1025, 6427, 5870, 5983, 4694, 4838, 4982, 5113, - 4262, 5256, 1353, 1388, 5387, 5518, 3398, 5649, nil, -14, - nil, 13365, nil, nil, nil, nil, 13224, 944, 931, 926, - nil, nil, nil, 922, nil, nil, 13093, nil, 12962, nil, - 12831, nil, 170, nil, nil, nil, 12688, 935, nil, 910, - 904, nil, nil, 900, 22973, 860, 5113, 27805, 27439, 849, - 898, nil, nil, 22711, 798, nil, 12152, 27317, 27195, 12021, - 5780, 3974, 11890, 11759, 828, 822, nil, nil, 662, 549, - 544, 539, 505, nil, 498, 481, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 460, 699, nil, nil, 11628, - nil, nil, nil, 11, nil, nil, nil, 519, nil, nil, - 509, 374, 400, 11497, 510, 481, 320, 351, nil, 11366, - nil, nil, 11235, nil, nil, nil, 3398, 333, nil, 4694, - 2, 255, 162, 80, 44, 11104, 10973, 27683, 27500, 1231, - nil, nil, 939, nil, 27256, 27134, 10842, nil, nil, 24, - 4838, nil, 26540, nil, nil, nil, nil, 1004, nil, nil, - nil, 1345, nil, nil, 174, nil, 176, nil, nil, 1319, - nil, 1318, nil, nil, nil, 24953, nil, 10711, 1292, 10568, - 10437, 10306, 27073, 27988, 10175, 10032, 389, 1328, 22318, 22187, - 22056, 21925, 1295, nil, nil, 21651, 21127, 1261, nil, nil, - nil, 169, 142, 139, 695, 1210, 1245, nil, 1218, nil, - nil, 294, 26537, -81, nil, 771, nil, nil, 26896, 7485, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 1277, 258, nil, 1199, 25376, nil, 1325, nil, 1309, - -21, nil, nil, 20865, nil, 1232, 1237, 1338, nil, 1216, - nil, 1263, 20341, nil, nil, 20210, nil, 25, 24160, 1229, - nil, 1235, 941, 1373, 1281, 1517, 443, 1300, 1257, 23890, - nil, 1328, 20, 2966, 1382, 19948, nil, nil, 802, nil, - nil, 1238, nil, nil, 716, 13365, nil, 24338, nil, 19817, - nil, 1080, nil, 1309, 1315, 1427, 1319, nil, nil, nil, - nil, nil, nil, 13384, 3110, nil, nil, nil, nil, 512, - 820, nil, 1446, nil, nil, nil, nil, nil, 1452, 1454, - nil, nil, 53, 1335, 1661, 1805, 1949, 479, 3974, 2093, - 966, nil, 1357, 1958, 19686, nil, 50, -22, 32, nil, - nil, nil, nil, nil, 2966, nil, nil, nil, nil, nil, - nil, nil, nil, 52, 16542, 110, 138, 114, 249, 361, - nil, 4118, 16280, nil, 256, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 16149, 16018, 15887, 15756, -23, - 464, 26145, 97, 199, 26243, 25037, 341, -75, 432, 436, - nil, 26047, nil, 442, 454, 538, 571, nil, 487, 25949, - 26994, 26862, nil, nil, nil, nil, nil, 15232, nil, nil, - 538, nil, nil, 550, 538, nil, nil, 13329, 2678, nil, - nil, nil, nil, 545, 253, nil, nil, 9639, 704, nil, - 2534, 591, 639, nil, nil, 609, nil, 608, 610, nil, - 615, nil, 704, nil, 624, 642, nil, 651, nil, nil, - 660, 1224, 1512, nil, nil, 8686, nil, 790, nil, 8555, - 814, nil, nil, 26636, 8019, 1094, 2237, 858, nil, 860, - 347, 4982, nil, nil, nil, nil, 759, 806, 777, 776, - 219, nil, nil, 7344, 7213, nil, nil, nil, nil, 793, - 794, 799, 797, nil, nil, 26439, nil, nil, -18, nil, - nil, 809, 814, 815, nil, nil, nil, 862, 829, -34, - nil, 25233, nil, 859, nil, nil, -66, nil, nil, 3830, - 4550, nil, nil, 860, 886, nil, 888, 889, 891, nil, - 919, 899, 886, 23759, nil, nil, nil, 3686, nil, 3686, - nil, nil, 26, 23366, nil, nil, 25138, nil, 24068, nil, - nil, 25446, nil, 25756, nil, nil, nil, nil, 915, 916, - 3542, nil, 42, nil, 38, 771, 257, nil, nil, nil, - nil, 177, nil, nil, nil, 1060, 1814, 1670, 1571, nil, - nil, nil, nil, nil, 720, 993, 247, nil, nil, nil, - nil, nil, nil, 951, 26341, 954, nil, nil, 136, nil, - nil, 859, nil, nil, 25236, nil, nil, 25658, nil, 25854, - nil, nil, 983, 23235, 667, 1048, nil, 1382, 39, 69, - 665, 1052, -7, nil, 1003, 1017, 1030, 1032, 809, 1542, - 4406, nil, 5649, 5518, 25557, nil, nil, nil, nil, 1060, - 1166, 650, nil, nil, nil, nil, nil, nil, 25655, 1050, - 25753, 1051, nil, nil, 1055, 1057, 1059, 1060, nil, 1063, - nil, 555, 27866, nil, 1193, 5387, 27927, 26994, 6, 26442, - nil, nil, nil, nil, 1075, 825, 3254, nil, nil, nil, - 1085, nil, nil, nil, 1580, 1088, 25851, nil, nil, nil, - 26148, nil, 25024, nil, 26344, nil, 25952, nil, nil, 1158, - 1161, nil, 1121, -9, -10, 68, -1, 1174, nil, 324, - 25135, nil, 1236, 1239, 1335, 1336, 8, nil, nil, nil, - nil, 1342, 26050, nil, nil, nil, nil, 732, nil ] - -racc_action_default = [ - -3, -726, -1, -711, -4, -726, -7, -726, -726, -726, - -726, -30, -726, -726, -35, -36, -726, -726, -726, -307, - -52, -713, -726, -59, -726, -67, -68, -69, -73, -284, - -284, -284, -320, -347, -348, -85, -12, -89, -97, -99, - -726, -610, -611, -726, -726, -726, -726, -726, -726, -237, - -726, -713, -623, -623, -255, -298, -299, -300, -301, -302, - -303, -304, -305, -306, -699, -309, -313, -725, -689, -328, - -330, -726, -726, -61, -61, -711, -726, -726, -726, -349, - -350, -352, -409, -550, -551, -552, -553, -574, -556, -557, - -576, -578, -561, -566, -570, -572, -588, -589, -590, -574, - -592, -594, -595, -596, -597, -697, -599, -600, -698, -602, - -603, -604, -605, -606, -607, -608, -609, -614, -615, -726, - -2, -712, -721, -722, -723, -6, -726, -726, -726, -726, - -726, -8, -3, -18, -726, -128, -129, -130, -131, -132, - -133, -134, -138, -139, -140, -141, -142, -143, -144, -145, - -146, -147, -148, -149, -150, -151, -152, -153, -154, -155, - -156, -157, -158, -159, -160, -161, -162, -163, -164, -165, - -166, -167, -168, -169, -170, -171, -172, -173, -174, -175, - -176, -177, -178, -179, -180, -181, -182, -183, -184, -185, - -186, -187, -188, -189, -190, -191, -192, -193, -194, -195, - -196, -197, -198, -199, -200, -201, -202, -203, -204, -205, - -206, -207, -208, -23, -135, -12, -726, -726, -726, -726, - -726, -726, -726, -274, -726, -726, -709, -710, -726, -726, - -713, -714, -56, -726, -610, -611, -726, -307, -726, -726, - -243, -726, -12, -726, -57, -220, -221, -726, -726, -726, - -726, -726, -726, -726, -726, -726, -726, -726, -726, -726, - -726, -726, -726, -726, -726, -726, -726, -256, -257, -258, - -259, -726, -63, -64, -726, -128, -129, -168, -169, -170, - -186, -191, -198, -201, -610, -611, -687, -726, -418, -420, - -726, -707, -708, -74, -274, -726, -327, -424, -433, -435, - -80, -430, -81, -713, -82, -262, -279, -288, -288, -283, - -726, -289, -726, -574, -691, -726, -726, -83, -84, -711, - -13, -726, -16, -726, -87, -12, -713, -726, -90, -93, - -12, -105, -106, -726, -726, -113, -320, -323, -713, -726, - -623, -623, -347, -348, -351, -431, -726, -95, -726, -101, - -317, -726, -222, -223, -593, -231, -232, -726, -244, -726, - -622, -12, -645, -645, -622, -12, -12, -311, -713, -263, - -718, -718, -726, -726, -718, -726, -329, -60, -59, -726, - -726, -726, -12, -12, -711, -726, -712, -114, -115, -726, - -726, -122, -726, -362, -363, -123, -124, -726, -126, -726, - -307, -618, -726, -343, -645, -554, -726, -726, -726, -726, - -726, -726, -726, -726, 1219, -5, -724, -24, -25, -26, - -27, -28, -726, -726, -20, -21, -22, -136, -726, -31, - -34, -294, -726, -726, -293, -32, -726, -41, -726, -307, - -49, -51, -209, -267, -289, -39, -40, -53, -54, -37, - -38, -42, -210, -267, -713, -275, -288, -288, -700, -701, - -284, -428, -702, -703, -701, -700, -284, -427, -429, -702, - -703, -48, -217, -55, -713, -326, -726, -726, -726, -274, - -317, -726, -726, -726, -726, -218, -219, -224, -225, -226, - -227, -228, -229, -233, -234, -235, -236, -238, -239, -240, - -241, -242, -245, -246, -247, -248, -713, -260, -65, -713, - -439, -284, -700, -701, -71, -75, -646, -713, -288, -713, - -285, -437, -439, -713, -322, -280, -726, -281, -726, -286, - -726, -290, -726, -694, -696, -11, -712, -15, -17, -713, - -86, -315, -102, -91, -726, -713, -274, -726, -726, -112, - -726, -622, -593, -726, -98, -103, -726, -726, -726, -726, - -261, -249, -726, -726, -542, -726, -375, -376, -713, -630, - -713, -686, -686, -628, -630, -630, -644, -646, -647, -648, - -649, -650, -651, -652, -653, -654, -726, -656, -658, -660, - -665, -667, -668, -671, -676, -678, -679, -681, -682, -683, - -726, -726, -630, -726, -726, -726, -713, -726, -264, -720, - -719, -266, -720, -318, -319, -690, -12, -353, -354, -12, - -726, -726, -726, -726, -726, -726, -274, -726, -726, -121, - -61, -123, -124, -125, -726, -726, -274, -339, -616, -726, - -12, -410, -645, -413, -555, -575, -580, -726, -582, -558, - -577, -726, -579, -560, -726, -563, -726, -565, -568, -726, - -569, -726, -591, -9, -19, -726, -29, -726, -297, -726, - -726, -274, -726, -726, -726, -726, -432, -726, -276, -278, - -726, -726, -76, -273, -425, -726, -726, -78, -426, -325, - -715, -700, -701, -700, -701, -713, -58, -459, -461, -463, - -466, -523, -713, -478, -481, -516, -521, -522, -726, -726, - -526, -527, -528, -529, -530, -531, -532, -533, -534, -535, - -536, -726, -726, -540, -726, -726, -688, -726, -440, -70, - -421, -437, -269, -276, -271, -726, -399, -726, -321, -288, - -287, -291, -726, -692, -693, -726, -14, -88, -726, -94, - -100, -713, -108, -110, -272, -109, -111, -726, -96, -726, - -216, -230, -713, -251, -725, -725, -345, -619, -726, -637, - -621, -726, -626, -627, -726, -726, -640, -726, -642, -726, - -364, -726, -366, -368, -371, -374, -713, -659, -669, -670, - -680, -684, -624, -726, -253, -346, -310, -312, -314, -718, - -725, -355, -725, -62, -356, -357, -333, -334, -726, -726, - -445, -336, -726, -713, -117, -119, -118, -120, -12, -123, - -124, -127, -713, -12, -726, -341, -726, -726, -713, -581, - -584, -585, -586, -587, -12, -559, -562, -564, -567, -571, - -573, -137, -33, -295, -726, -713, -700, -701, -701, -700, - -50, -268, -726, -716, -288, -44, -212, -45, -213, -77, - -46, -215, -47, -214, -79, -726, -726, -726, -726, -432, - -726, -726, -464, -465, -726, -726, -726, -483, -713, -713, - -477, -484, -490, -726, -493, -497, -726, -480, -726, -726, - -519, -520, -524, -525, -537, -124, -538, -726, -66, -419, - -399, -423, -422, -726, -713, -434, -400, -713, -12, -436, - -282, -292, -695, -92, -107, -104, -324, -726, -725, -360, - -12, -543, -725, -544, -545, -713, -629, -630, -630, -657, - -686, -666, -671, -685, -630, -630, -677, -630, -654, -672, - -713, -726, -726, -373, -655, -726, -265, -726, -358, -726, - -726, -335, -337, -726, -726, -12, -116, -726, -432, -726, - -726, -12, -344, -411, -414, -416, -403, -726, -726, -296, - -432, -43, -211, -277, -726, -460, -462, -470, -474, -713, - -713, -713, -502, -504, -505, -508, -509, -574, -512, -514, - -515, -713, -713, -713, -539, -475, -476, -500, -485, -488, - -491, -726, -496, -713, -574, -717, -713, -517, -518, -250, - -12, -72, -270, -686, -686, -380, -382, -382, -382, -398, - -726, -713, -654, -662, -663, -674, -438, -252, -10, -12, - -549, -361, -726, -726, -547, -620, -726, -633, -726, -635, - -625, -726, -638, -726, -641, -643, -365, -367, -369, -372, - -254, -331, -726, -332, -726, -450, -453, -456, -457, -458, - -291, -725, -338, -340, -617, -726, -12, -12, -726, -412, - -583, -467, -468, -469, -503, -507, -726, -511, -513, -471, - -472, -473, -492, -486, -726, -494, -498, -479, -726, -482, - -441, -726, -378, -379, -383, -389, -391, -726, -394, -726, - -396, -401, -726, -726, -661, -726, -548, -12, -610, -611, - -726, -726, -307, -546, -630, -630, -630, -630, -726, -726, - -12, -446, -726, -726, -454, -442, -443, -444, -342, -726, - -726, -713, -405, -407, -408, -501, -506, -510, -726, -489, - -726, -686, -664, -381, -382, -382, -382, -382, -675, -382, - -402, -673, -726, -317, -542, -274, -726, -726, -317, -726, - -631, -634, -636, -639, -370, -725, -12, -451, -452, -455, - -493, -415, -417, -404, -726, -487, -726, -495, -499, -377, - -726, -386, -726, -388, -726, -392, -726, -395, -397, -316, - -704, -541, -713, -700, -701, -704, -316, -630, -359, -725, - -726, -406, -382, -382, -382, -382, -432, -632, -447, -448, - -449, -494, -726, -384, -387, -390, -393, -382, -385 ] - -clist = [ -'42,224,229,289,272,42,306,306,306,406,291,328,138,138,376,624,764,297', -'301,124,273,413,369,809,285,585,585,743,138,565,633,454,359,604,605', -'527,42,332,332,519,141,141,947,452,382,383,460,466,930,472,676,878,232', -'344,344,133,214,131,121,879,340,340,434,435,327,347,42,585,735,6,354', -'379,380,515,6,384,388,285,285,1017,120,616,619,772,773,887,326,918,307', -'307,307,124,344,344,344,780,554,324,17,340,340,340,517,17,365,341,341', -'570,1085,608,611,743,511,615,568,601,377,377,576,576,377,42,786,370', -'908,950,417,418,419,420,42,290,42,451,17,367,1047,394,936,471,922,308', -'308,308,341,341,341,1049,967,696,929,1028,385,2,892,893,643,1148,360', -'364,576,304,317,318,17,1132,746,293,300,302,1134,377,377,377,377,929', -'371,374,743,1170,932,125,981,993,527,927,740,213,740,430,6,1139,423', -'441,1003,1177,727,306,441,421,484,6,654,656,441,401,403,803,737,274', -'927,725,461,731,665,42,477,357,388,17,372,388,730,979,991,286,373,1020', -'17,470,17,980,992,392,344,532,637,344,366,606,1148,340,42,428,340,1175', -'429,440,368,823,961,640,440,808,1048,1019,928,291,440,1095,1021,1059', -'1131,934,447,448,1144,821,306,306,327,1201,433,433,473,474,1134,306', -'903,446,641,928,450,988,988,422,341,695,1010,341,780,869,749,963,943', -'988,404,415,880,460,466,758,472,827,452,585,1066,1211,826,1067,1057', -'510,521,17,1047,17,547,940,522,550,17,42,555,1164,900,42,17,297,1125', -'332,42,1054,509,301,557,124,1007,1008,740,740,17,1102,1208,953,1166', -'344,1055,914,332,607,518,307,340,327,751,896,543,1058,327,307,975,42', -'988,976,344,42,42,877,1141,754,552,340,627,538,536,539,874,760,508,754', -'545,620,42,42,1126,1087,324,875,886,889,537,324,365,740,828,1018,535', -'341,576,936,124,1135,1136,1,308,1032,405,1198,407,956,621,622,308,408', -'409,410,341,411,958,17,412,672,829,17,520,929,377,138,17,834,824,585', -'523,931,813,677,998,1142,585,776,778,970,1040,,822,,,639,683,754,780', -'780,,306,688,141,585,754,,17,,623,859,17,17,461,910,864,,978,664,,743', -'1169,995,996,929,,904,845,17,17,470,988,718,,,724,,,,959,,,460,466,913', -',,683,932,856,858,,,,861,863,,994,,,,925,955,,,,555,,306,,1209,,1114', -'1092,1093,555,,933,,,933,,,461,42,,946,877,877,,,,332,461,,,,,,,470', -'332,1006,,1086,,,,344,,470,,,,,340,929,344,1022,,,,,,340,,,,,910,1145', -'569,,1146,,1079,1080,1081,,855,857,,,,860,862,682,1210,306,818,,,687', -',1191,762,,,306,923,341,,,461,42,792,1056,42,1023,341,,461,,,,780,780', -'1065,,,470,740,17,739,804,,470,1086,42,,,,800,306,441,802,,729,1075', -',,1179,,825,441,441,,,461,441,441,,,1015,1014,42,1202,138,,,,972,42', -'902,677,470,1090,,,812,,677,888,,856,858,863,861,,1127,,1086,,1178,', -'141,,585,440,,718,,,272,,901,718,718,440,440,841,,17,440,440,17,799', -',924,898,555,,,,,,,138,,1178,677,915,1107,1130,842,,17,,,,683,850,,688', -',,332,,650,652,655,655,1120,1086,1121,1022,,332,1022,,,971,344,17,,', -'17,,,340,17,,,344,,,17,17,,,340,17,17,,,854,1206,877,,,1037,1039,677', -'972,,,,1042,1044,,1045,677,1023,,,1023,,966,1023,,1023,,,,341,,42,,', -'433,,42,960,,677,341,441,,13,,,,42,13,,,,,,,854,1022,,,957,,,933,,,1015', -'1014,677,1015,1014,1015,1014,677,677,,968,,,,13,,,377,,718,,1030,718', -'718,,1034,,,713,718,440,,,,,,966,718,718,718,,1023,,1023,13,1023,,1023', -',,,,,,393,,42,1076,,,,,,,17,,,,42,17,,,,1023,1088,,,,,,17,,,,1026,,1015', -'1014,1015,1014,1015,1014,1015,1014,,,1031,1052,17,13,,718,712,42,,,', -',13,42,13,1192,,,,,,,1015,1014,677,677,677,,1064,,754,1160,1161,1162', -'1163,1061,888,718,,,,,,,,,377,,935,837,937,837,,718,966,,18,,17,,,18', -'42,,,,,,,,17,,,,,285,,,233,,,42,,,,1109,,,233,233,233,344,18,333,333', -',,13,340,436,445,344,,449,436,17,716,,340,1106,436,17,,,1207,,,,42,42', -',,18,,13,,,233,233,,,233,389,399,399,,718,,,,,,,341,,1156,1129,,,,713', -',,341,,285,713,713,,42,17,,,,1173,,,,,,,344,42,,1167,1168,718,18,340', -'17,1016,306,233,233,233,233,18,1154,18,,718,,718,,,,461,,,,1165,,,13', -',,,13,470,,,,13,470,,,17,17,42,377,377,475,,341,712,677,,,718,,712,712', -',,,,,,,,,,,13,,,1199,13,13,,,,718,,,,,17,,,,,,,13,13,,,,,17,18,233,438', -'389,233,233,389,438,233,,,,,438,233,233,,,,,,,,524,,,,18,,,,,,,,,,,1115', -',1116,,,1117,,17,540,,713,,,713,713,716,,,,,713,716,716,,,,,,713,713', -'713,1096,1098,1100,233,,,,,,,233,233,,,,,,,,233,710,,,,,,,,,,1147,,1149', -',,,,18,,,,18,,,,333,18,,,,,,,712,,,712,712,,,,713,,712,333,,,,,,19,712', -'712,712,,19,,18,13,,,18,18,,,,,,,,,,1197,713,,,,233,18,18,,,,,,,19,335', -'335,713,,,,1203,,1204,,1205,233,,,,,,,689,,,1181,1183,1185,1187,,1188', -',712,19,,,,,,,,,1217,391,400,400,,,,,716,,,716,716,13,,726,13,,716,', -',,712,732,,734,716,716,716,738,,,,,,,,13,712,,,1213,1214,1215,1216,747', -'19,713,,,233,750,,,,19,1218,19,,,,,,,13,,,436,,,,13,,,767,,770,436,436', -',,,436,436,,,,713,,,716,,,710,,,,,,710,710,713,,713,,,,18,,,,,797,,', -'333,,233,,,,712,716,,333,,,,,,,,,233,,,,,716,713,19,,439,391,,,391,439', -',,,,,439,,719,,,,,,712,,713,,,,19,,,,,,,,712,,712,,,,,,,,,,18,,,18,', -',,,,,233,,,,,,,,,,233,,,,18,,712,,13,,,,,13,716,,,,,,,,,,13,,,,,,712', -'18,,,438,233,,,18,19,,,436,19,438,438,,335,19,438,438,,,,716,710,,,710', -'710,,916,,,,710,335,,716,,716,,,710,710,710,,,,19,,,,19,19,944,,,,,', -',,,,,,,13,,19,19,,,,,716,,,,13,,333,,,,,,,,,,,333,,,,,,,716,,,,,,,710', -',,,,,,,13,,,,,,13,,711,,,,,,,,,,,,,719,,,710,,977,719,719,,,,,,,,,18', -',,710,,18,233,,,,,,715,,,,18,,13,,,1012,,,,,,,,,,,,,438,,,13,,,,1113', -'1035,,,,,,,,,,,,,,,1046,,,,,,,,,,,,,,,19,,13,13,,,,,335,,,,,,710,,,335', -'18,,,,,,1071,1072,1073,,,,18,,,,,,,,,,,29,,13,,,29,,,,,1089,,,710,,13', -',,233,,,,29,,18,,,710,,710,18,,29,29,29,,29,,,19,719,,19,719,719,,,', -',,719,,,,,,,,719,719,719,13,,19,,710,29,,,,833,29,29,,,29,711,,,18,', -',711,711,,,,,,710,19,,1104,439,,,,19,18,,,,1110,439,439,,,,439,439,', -',,,,,,715,,,,29,719,715,715,,29,29,29,29,29,,29,,,18,18,,,,,,,,,,,,', -',,,,,719,,,,,,,,,,,,,,,,719,335,1151,,717,,18,,,,,,335,,,,,,,18,,233', -'233,,,,,,,,,,,,311,311,311,,,,,,,,,29,29,29,,29,29,,29,29,233,,,,29', -'29,29,,,,,18,,,,311,375,19,29,,,711,19,,711,711,,,,719,,711,,19,,,,', -',711,711,711,,,,,,,,,,439,41,,,,,41,,,,,715,29,,715,715,,,719,29,29', -'715,,,,284,,,29,715,715,715,719,,719,,,41,331,331,,,,,,,29,,,,29,,711', -',,29,19,,,,,,,,,,,41,19,,719,,,714,,,,387,284,284,,,,,711,,29,,,,29', -'29,,715,719,,,,,,711,,,19,,,29,29,29,19,,,,431,444,,,717,,,311,,41,717', -'717,715,,29,,,,41,,41,,,,,,,,715,,,,,,,,,,,,,,,,,19,,,,,,,,,,,,,400', -',,,,,19,,,,1112,,711,,,,,,,,311,311,,,,,,,,311,,,,29,,,529,,531,,,533', -'534,19,19,41,,,387,,,387,711,715,,,,,,,,,,,,,711,,711,,,,41,,,,,,,,400', -',,,19,,,,,,29,,,715,,,,19,,,29,,,,711,,,715,,715,,,,,,717,29,,717,717', -'714,,,,,717,714,714,711,,,,,717,717,717,,,,,,,,19,,715,,,,,,41,,,,41', -',,668,331,41,,,,,,,,,715,29,,,29,,,,,331,,29,,,,,,,,,,29,41,,,29,41', -'41,717,,,,,,,,311,,,,,,,41,41,,,,,,,,29,,,29,29,,,29,717,,,,,29,29,', -',,29,29,,,,,717,,,,,,,741,,375,,744,,,,,,,,,,,,,,,,311,,,,,,,,,,,,,', -',,,714,,,714,714,,,,,,714,,,,,,,,714,714,714,,,,,,787,,,,,,,,,,,,,717', -',,,,,,741,,,375,,,,,,,,,,,,,444,311,,,,,,,,,,311,,,,41,,717,,,714,29', -',331,,,29,29,,,,717,331,717,,,,29,,,,,,,843,,311,,,,,,714,741,375,29', -'32,,,,,32,,,,,,,714,717,,,,,,,,,32,,,,,,,,,,32,32,32,,32,717,,41,,,41', -',,,,,,,,,741,,,29,,,,,,911,,41,912,,32,29,,,,32,32,,,32,,,,,,,,,921', -',,,,,41,,,,,714,29,41,939,,,,29,,,,,,29,,,,,,,,,,,,,32,,,,,32,32,32', -'32,32,,32,,,714,,,,,,,,,,,,,,714,,714,,,,,,29,,,,,,969,,,,,,,,331,,', -',,29,,,,,,331,,,,,714,,,,,,,,,,,,,,,,,,,,,,,,714,,29,29,32,32,32,,32', -'32,,32,32,,,,,32,32,32,,,,,,,,,,,41,32,,,,41,,,,,,,,29,,,41,,,,,,,,', -',29,,29,29,,,1060,,,,,,,,,,,,,,32,,,,,375,,32,32,,,,,,,29,32,,,,,,,', -',,29,,,,,,,,32,,,,32,,,,,32,41,,,,,,,,,,,,41,,,,,,,,,,,,,,,,,,32,,,', -'32,32,,,,,,,,,,,,41,,,32,32,32,41,,,,,,,,,,,,,,,,,,32,,,,,,,,,,,,,,', -',,,,,,,,,,,,,,,,41,,,,,,,,,,,,,284,,,,,,41,,,,1108,,,,,,,,,,,,,,,,,', -'311,,,,,32,,,,,,,,,,41,41,,,,,,,,,,,,,,,,,,,,,,,,,,23,,,,,23,,,,,284', -',,,41,,,,,,32,,240,,,,,41,,,32,,,,,,23,,,,,,,,352,353,32,355,356,,358', -',,,,,,,,,,,,,,,23,,,,,378,378,41,,378,,,,,,,,,,,,,,,,,,,,,,,,,32,,,32', -',,,,,,32,,,,,,,,,,32,23,,,32,,378,378,378,378,23,,23,,,,,,,,,,,,,,,', -',,,32,,,32,32,,,32,,,,,,32,32,,,,32,32,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -',,,,,,,,,,,,,,,23,,443,,378,378,,453,,,,,,453,378,378,,,,,,,,,,,240', -'23,,,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500', -'501,502,503,504,505,506,,,,,507,,,,,,,,,,,,,,,,378,,,,,,,,,,,,,,,32', -',,,,32,32,,,,,,,,,,32,,,23,,,,23,,,,,23,,,,,,32,,,,,,,,,,,,,,,,,,,,', -'560,,561,,23,,,,23,23,,,,,,,,,,,,,,,378,23,23,,,,,,,,,32,,,,,,,,,,378', -',32,,,,,,,,,,,,,,,,,,,,,,,,,,,,,32,,,,,,32,,,,,,32,,,,,,,,,,,,,,,,,', -',,,,,,,,,,,,,,,,,,453,453,453,,,,,,,,,,,32,,,,,,,,,,,,,,,,,,,32,,,353', -',,,,,,,,,,,,,,,,,,,23,,,,,,,,,,,,,,32,32,,,,,453,,,761,,,378,763,,,', -',,,,,,,,,,,,,,,,,,,,,,,,32,,,,,,,,,,,,794,32,,32,32,,,,,,,,,23,,,23', -',,,,,,,,,,,,,,,,,,,32,23,,,,,,,,,,32,,,,,,,,,,,,,,,,,23,,,453,,,,23', -'851,,,,,453,453,,,,453,453,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -',,,,,,,,,,,,,,,,,,,,,,23,,,,,23,378,,,,,,,,,,23,,,,,,,,,,,,,,,,,,453', -',,,,,,,,,,,,453,453,453,453,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1009,,,,,,,', -',,,23,,,,,,,,,1027,,,23,,,,,,,,,,,,,,,,,,,,,,,,,1050,,,,378,,,,,,23', -',,,,,23,,,,,,,,,,,,,453,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,23,,,,,,', -',,,,,,,,,,,,23,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,23,23,,,,,,,,,,,', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,23,,,,,,,,,,,,,23,,378,378,,,,,,,,,,,,,', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,,23' ] - racc_goto_table = arr = ::Array.new(4471, nil) - idx = 0 - clist.each do |str| - str.split(',', -1).each do |i| - arr[idx] = i.to_i unless i.empty? - idx += 1 - end - end - -clist = [ -'70,34,36,150,44,70,50,50,50,190,34,66,73,73,104,109,11,88,88,113,42', -'190,84,110,70,219,219,228,73,9,71,32,36,9,9,91,70,70,70,89,75,75,108', -'77,40,40,53,53,127,77,33,167,21,81,81,16,16,8,6,168,45,45,23,23,10,67', -'70,219,56,7,78,18,18,55,7,18,70,70,70,137,4,107,107,131,131,179,63,12', -'85,85,85,113,81,81,81,122,68,62,30,45,45,45,32,30,114,46,46,89,184,86', -'86,228,53,86,149,149,26,26,214,214,26,70,123,85,139,12,18,18,18,18,70', -'48,70,29,30,7,121,20,224,29,196,87,87,87,46,46,46,124,141,38,220,13', -'4,2,194,194,149,225,80,80,214,61,61,61,30,143,15,54,54,54,144,26,26', -'26,26,220,87,87,228,185,192,5,170,170,91,218,92,17,92,24,7,184,27,19', -'170,185,153,50,19,7,39,7,204,204,19,72,72,41,153,47,218,49,88,58,76', -'70,34,82,70,30,83,70,90,167,167,102,103,141,30,73,30,168,168,111,81', -'190,112,81,115,116,225,45,70,10,45,184,21,21,117,118,119,120,21,109', -'125,129,138,34,21,134,135,170,142,138,26,26,137,71,50,50,10,143,85,85', -'26,26,144,50,56,20,145,138,20,192,192,2,46,32,139,46,122,33,68,146,122', -'192,147,5,33,53,53,68,77,148,77,219,151,184,9,152,168,154,156,30,121', -'30,34,123,157,36,30,70,66,124,160,70,30,88,161,70,70,162,26,88,34,113', -'194,194,92,92,30,141,163,164,165,81,166,33,70,36,85,85,45,10,32,71,67', -'169,10,85,172,70,192,174,81,70,70,38,127,53,78,45,34,8,6,63,175,77,48', -'53,63,18,70,70,12,179,62,176,180,181,7,62,114,92,149,138,4,46,214,224', -'113,187,188,1,87,197,200,108,201,33,10,10,87,202,203,206,46,207,33,30', -'208,34,209,30,61,220,26,73,30,210,213,219,61,222,32,36,183,223,219,217', -'217,33,131,,32,,,26,88,53,122,122,,50,88,75,219,53,,30,,4,55,30,30,88', -'91,55,,33,16,,228,167,33,33,220,,89,32,30,30,73,192,70,,,36,,,,9,,,53', -'53,68,,,88,192,77,77,,,,77,77,,71,,,,89,107,,,,66,,50,,12,,138,131,131', -'66,,132,,,132,,,88,70,,86,38,38,,,,70,88,,,,,,,73,70,38,,183,,,,81,', -'73,,,,,45,220,81,219,,,,,,45,,,,,91,138,136,,138,,33,33,33,,29,29,,', -',29,29,54,110,50,40,,,54,,11,26,,,50,23,46,,,88,70,113,38,70,221,46', -',88,,,,122,122,9,,,73,92,30,87,113,,73,183,70,,,,10,50,19,10,,54,38', -',,131,,113,19,19,,,88,19,19,,,132,126,70,138,73,,,,77,70,104,36,73,9', -',,85,,36,36,,77,77,77,77,,109,,183,,183,,75,,219,21,,70,,,44,,150,70', -'70,21,21,16,,30,21,21,30,87,,84,42,66,,,,,,,73,,183,36,66,107,9,7,,30', -',,,88,7,,88,,,70,,205,205,205,205,107,183,107,219,,70,219,,,29,81,30', -',,30,,,45,30,,,81,,,30,30,,,45,30,30,,,87,33,38,,,217,217,36,77,,,,217', -'217,,217,36,221,,,221,,36,221,,221,,,,46,,70,,,85,,70,18,,36,46,19,', -'22,,,,70,22,,,,,,,87,219,,,10,,,132,,,132,126,36,132,126,132,126,36', -'36,,10,,,,22,,,26,,70,,84,70,70,,84,,,97,70,21,,,,,,36,70,70,70,,221', -',221,22,221,,221,,,,,,,22,,70,190,,,,,,,30,,,,70,30,,,,221,190,,,,,', -'30,,,,10,,132,126,132,126,132,126,132,126,,,10,18,30,22,,70,96,70,,', -',,22,70,22,32,,,,,,,132,126,36,36,36,,113,,53,217,217,217,217,10,36', -'70,,,,,,,,,26,,136,205,136,205,,70,36,,31,,30,,,31,70,,,,,,,,30,,,,', -'70,,,31,,,70,,,,70,,,31,31,31,81,31,31,31,,,22,45,22,22,81,,22,22,30', -'100,,45,10,22,30,,,217,,,,70,70,,,31,,22,,,31,31,,,31,31,31,31,,70,', -',,,,,46,,34,10,,,,97,,,46,,70,97,97,,70,30,,,,36,,,,,,,81,70,,18,18', -'70,31,45,30,136,50,31,31,31,31,31,10,31,,70,,70,,,,88,,,,10,,,22,,,', -'22,73,,,,22,73,,,30,30,70,26,26,64,,46,96,36,,,70,,96,96,,,,,,,,,,,', -'22,,,10,22,22,,,,70,,,,,30,,,,,,,22,22,,,,,30,31,31,31,31,31,31,31,31', -'31,,,,,31,31,31,,,,,,,,64,,,,31,,,,,,,,,,,136,,136,,,136,,30,64,,97', -',,97,97,100,,,,,97,100,100,,,,,,97,97,97,133,133,133,31,,,,,,,31,31', -',,,,,,,31,94,,,,,,,,,,136,,136,,,,,31,,,,31,,,,31,31,,,,,,,96,,,96,96', -',,,97,,96,31,,,,,,35,96,96,96,,35,,31,22,,,31,31,,,,,,,,,,136,97,,,', -'31,31,31,,,,,,,35,35,35,97,,,,136,,136,,136,31,,,,,,,64,,,133,133,133', -'133,,133,,96,35,,,,,,,,,136,35,35,35,,,,,100,,,100,100,22,,64,22,,100', -',,,96,64,,64,100,100,100,64,,,,,,,,22,96,,,133,133,133,133,64,35,97', -',,31,64,,,,35,133,35,,,,,,,22,,,22,,,,22,,,64,,64,22,22,,,,22,22,,,', -'97,,,100,,,94,,,,,,94,94,97,,97,,,,31,,,,,64,,,31,,31,,,,96,100,,31', -',,,,,,,,31,,,,,100,97,35,,35,35,,,35,35,,,,,,35,,106,,,,,,96,,97,,,', -'35,,,,,,,,96,,96,,,,,,,,,,31,,,31,,,,,,,31,,,,,,,,,,31,,,,31,,96,,22', -',,,,22,100,,,,,,,,,,22,,,,,,96,31,,,31,31,,,31,35,,,22,35,31,31,,35', -'35,31,31,,,,100,94,,,94,94,,64,,,,94,35,,100,,100,,,94,94,94,,,,35,', -',,35,35,64,,,,,,,,,,,,,22,,35,35,,,,,100,,,,22,,31,,,,,,,,,,,31,,,,', -',,100,,,,,,,94,,,,,,,,22,,,,,,22,,95,,,,,,,,,,,,,106,,,94,,64,106,106', -',,,,,,,,31,,,94,,31,31,,,,,,99,,,,31,,22,,,64,,,,,,,,,,,,,31,,,22,,', -',22,64,,,,,,,,,,,,,,,64,,,,,,,,,,,,,,,35,,22,22,,,,,35,,,,,,94,,,35', -'31,,,,,,64,64,64,,,,31,,,,,,,,,,,57,,22,,,57,,,,,64,,,94,,22,,,31,,', -',57,,31,,,94,,94,31,,57,57,57,,57,,,35,106,,35,106,106,,,,,,106,,,,', -',,,106,106,106,22,,35,,94,57,,,,35,57,57,,,57,95,,,31,,,95,95,,,,,,94', -'35,,31,35,,,,35,31,,,,31,35,35,,,,35,35,,,,,,,,99,,,,57,106,99,99,,57', -'57,57,57,57,,57,,,31,31,,,,,,,,,,,,,,,,,,106,,,,,,,,,,,,,,,,106,35,31', -',101,,31,,,,,,35,,,,,,,31,,31,31,,,,,,,,,,,,28,28,28,,,,,,,,,57,57,57', -',57,57,,57,57,31,,,,57,57,57,,,,,31,,,,28,28,35,57,,,95,35,,95,95,,', -',106,,95,,35,,,,,,95,95,95,,,,,,,,,,35,69,,,,,69,,,,,99,57,,99,99,,', -'106,57,57,99,,,,69,,,57,99,99,99,106,,106,,,69,69,69,,,,,,,57,,,,57', -',95,,,57,35,,,,,,,,,,,69,35,,106,,,98,,,,69,69,69,,,,,95,,57,,,,57,57', -',99,106,,,,,,95,,,35,,,57,57,57,35,,,,28,28,,,101,,,28,,69,101,101,99', -',57,,,,69,,69,,,,,,,,99,,,,,,,,,,,,,,,,,35,,,,,,,,,,,,,35,,,,,,35,,', -',35,,95,,,,,,,,28,28,,,,,,,,28,,,,57,,,28,,28,,,28,28,35,35,69,,,69', -',,69,95,99,,,,,,,,,,,,,95,,95,,,,69,,,,,,,,35,,,,35,,,,,,57,,,99,,,', -'35,,,57,,,,95,,,99,,99,,,,,,101,57,,101,101,98,,,,,101,98,98,95,,,,', -'101,101,101,,,,,,,,35,,99,,,,,,69,,,,69,,,28,69,69,,,,,,,,,99,57,,,57', -',,,,69,,57,,,,,,,,,,57,69,,,57,69,69,101,,,,,,,,28,,,,,,,69,69,,,,,', -',,57,,,57,57,,,57,101,,,,,57,57,,,,57,57,,,,,101,,,,,,,28,,28,,28,,', -',,,,,,,,,,,,,28,,,,,,,,,,,,,,,,,98,,,98,98,,,,,,98,,,,,,,,98,98,98,', -',,,,28,,,,,,,,,,,,,101,,,,,,,28,,,28,,,,,,,,,,,,,28,28,,,,,,,,,,28,', -',,69,,101,,,98,57,,69,,,57,57,,,,101,69,101,,,,57,,,,,,,28,,28,,,,,', -'98,28,28,57,60,,,,,60,,,,,,,98,101,,,,,,,,,60,,,,,,,,,,60,60,60,,60', -'101,,69,,,69,,,,,,,,,,28,,,57,,,,,,28,,69,28,,60,57,,,,60,60,,,60,,', -',,,,,,28,,,,,,69,,,,,98,57,69,28,,,,57,,,,,,57,,,,,,,,,,,,,60,,,,,60', -'60,60,60,60,,60,,,98,,,,,,,,,,,,,,98,,98,,,,,,57,,,,,,28,,,,,,,,69,', -',,,57,,,,,,69,,,,,98,,,,,,,,,,,,,,,,,,,,,,,,98,,57,57,60,60,60,,60,60', -',60,60,,,,,60,60,60,,,,,,,,,,,69,60,,,,69,,,,,,,,57,,,69,,,,,,,,,,57', -',57,57,,,28,,,,,,,,,,,,,,60,,,,,28,,60,60,,,,,,,57,60,,,,,,,,,,57,,', -',,,,,60,,,,60,,,,,60,69,,,,,,,,,,,,69,,,,,,,,,,,,,,,,,,60,,,,60,60,', -',,,,,,,,,,69,,,60,60,60,69,,,,,,,,,,,,,,,,,,60,,,,,,,,,,,,,,,,,,,,,', -',,,,,,,,,69,,,,,,,,,,,,,69,,,,,,69,,,,69,,,,,,,,,,,,,,,,,,28,,,,,60', -',,,,,,,,,69,69,,,,,,,,,,,,,,,,,,,,,,,,,,37,,,,,37,,,,,69,,,,69,,,,,', -'60,,37,,,,,69,,,60,,,,,,37,,,,,,,,37,37,60,37,37,,37,,,,,,,,,,,,,,,', -'37,,,,,37,37,69,,37,,,,,,,,,,,,,,,,,,,,,,,,,60,,,60,,,,,,,60,,,,,,,', -',,60,37,,,60,,37,37,37,37,37,,37,,,,,,,,,,,,,,,,,,,60,,,60,60,,,60,', -',,,,60,60,,,,60,60,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,37,,37', -',37,37,,37,,,,,,37,37,37,,,,,,,,,,,37,37,,,37,37,37,37,37,37,37,37,37', -'37,37,37,37,37,37,37,37,37,37,37,37,37,,,,,37,,,,,,,,,,,,,,,,37,,,,', -',,,,,,,,,,60,,,,,60,60,,,,,,,,,,60,,,37,,,,37,,,,,37,,,,,,60,,,,,,,', -',,,,,,,,,,,,,37,,37,,37,,,,37,37,,,,,,,,,,,,,,,37,37,37,,,,,,,,,60,', -',,,,,,,,37,,60,,,,,,,,,,,,,,,,,,,,,,,,,,,,,60,,,,,,60,,,,,,60,,,,,,', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,,37,37,37,,,,,,,,,,,60,,,,,,,,,,,,,,,,,', -',60,,,37,,,,,,,,,,,,,,,,,,,,37,,,,,,,,,,,,,,60,60,,,,,37,,,37,,,37,37', -',,,,,,,,,,,,,,,,,,,,,,,,,,,60,,,,,,,,,,,,37,60,,60,60,,,,,,,,,37,,,37', -',,,,,,,,,,,,,,,,,,,60,37,,,,,,,,,,60,,,,,,,,,,,,,,,,,37,,,37,,,,37,37', -',,,,37,37,,,,37,37,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -',,,,,,,,,,,,,,37,,,,,37,37,,,,,,,,,,37,,,,,,,,,,,,,,,,,,37,,,,,,,,,', -',,,37,37,37,37,,,,,,,,,,,,,,,,,,,,,,,,,,,,,37,,,,,,,,,,,37,,,,,,,,,37', -',,37,,,,,,,,,,,,,,,,,,,,,,,,,37,,,,37,,,,,,37,,,,,,37,,,,,,,,,,,,,37', -',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,37,,,,,,,,,,,,,,,,,,,37,,,,,,,,,', -',,,,,,,,,,,,,,,,,,,,,,,,,,,37,37,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -',,,,37,,,,,,,,,,,,,37,,37,37,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,', -',,,37' ] - racc_goto_check = arr = ::Array.new(4471, nil) - idx = 0 - clist.each do |str| - str.split(',', -1).each do |i| - arr[idx] = i.to_i unless i.empty? - idx += 1 - end - end - -racc_goto_pointer = [ - nil, 403, 153, nil, 77, 176, 55, 69, 50, -332, - 28, -548, -677, -767, nil, -370, 47, 178, 0, -24, - 61, 30, 830, -154, -27, nil, 45, 59, 2107, -89, - 98, 1004, -192, -404, -17, 1358, -19, 3304, -335, -44, - -29, -413, -4, nil, -20, 23, 68, 185, 104, -297, - -26, nil, nil, -178, 138, -220, -453, 1935, -301, nil, - 2788, 129, 61, 50, 939, nil, -26, 27, -252, 2211, - 0, -367, 128, 4, nil, 32, -213, -179, 24, nil, - 106, 16, 168, 153, -45, 56, -261, 109, -12, -255, - -289, -273, -340, nil, 824, 1309, 470, 396, 1799, 1350, - 570, 1625, 201, 158, -55, nil, 1104, -298, -758, -370, - -600, 157, -165, 16, 51, 173, -128, 182, -388, -575, - -152, -805, -491, -464, -795, -687, -241, -723, nil, -652, - nil, -488, -242, 272, -757, -647, 221, -828, -512, -612, - nil, -680, -806, -903, -898, -124, -534, 214, -338, -248, - -22, -658, -656, -314, 23, nil, 14, 19, nil, nil, - -404, -733, -622, -857, -467, -777, -607, -651, -643, -596, - -692, nil, -510, nil, -508, -325, -314, nil, nil, -618, - -315, -315, nil, -445, -893, -945, nil, -673, -672, nil, - -78, nil, -591, nil, -554, nil, -625, -517, nil, nil, - 321, 318, 322, 322, -207, 343, 322, 323, 325, -225, - -219, nil, nil, -208, -244, nil, nil, -135, -583, -337, - -618, -287, -338, -654, -637, -940, nil, nil, -501 ] - -racc_goto_default = [ - nil, nil, nil, 3, nil, 4, 386, 322, nil, nil, - 564, nil, 948, nil, 319, 320, nil, nil, nil, 11, - 12, 20, 238, nil, nil, 14, 15, nil, 16, 437, - 239, 351, nil, nil, 635, 237, 476, 305, 997, nil, - nil, nil, nil, 381, 140, 52, 53, nil, nil, nil, - 25, 26, 27, 757, nil, nil, nil, 339, nil, 28, - 336, 455, 35, nil, nil, 37, 40, 39, nil, 234, - 235, 398, nil, 463, 139, 84, nil, 442, 100, 49, - 551, 54, 271, nil, 919, 456, nil, 457, 468, nil, - 684, 525, 309, 295, 55, 56, 57, 58, 59, 60, - 61, 62, 63, nil, 296, 69, 70, nil, nil, nil, - nil, nil, nil, 617, 361, nil, nil, nil, nil, nil, - nil, 782, 584, nil, 783, 784, 572, 566, 567, 1143, - 1013, nil, 573, nil, nil, nil, 602, nil, 575, nil, - 906, nil, nil, nil, 582, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 467, nil, nil, 736, 728, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 882, - nil, 697, 706, 698, 699, nil, nil, 700, 701, nil, - nil, nil, 881, 883, nil, 884, 982, 983, 984, 985, - nil, 989, 593, 990, 705, 707, nil, nil, 83, 85, - 86, nil, nil, nil, nil, 645, nil, nil, nil, nil, - nil, 96, 97, nil, 926, 363, 571, 769, 574, 938, - 587, 589, 590, 1024, 594, 1025, 597, 600, 314 ] - -racc_reduce_table = [ - 0, 0, :racc_error, - 1, 148, :_reduce_none, - 2, 149, :_reduce_2, - 0, 150, :_reduce_3, - 1, 150, :_reduce_4, - 3, 150, :_reduce_5, - 2, 150, :_reduce_6, - 1, 152, :_reduce_none, - 2, 152, :_reduce_8, - 3, 155, :_reduce_9, - 4, 156, :_reduce_10, - 2, 157, :_reduce_11, - 0, 161, :_reduce_12, - 1, 161, :_reduce_13, - 3, 161, :_reduce_14, - 2, 161, :_reduce_15, - 1, 162, :_reduce_none, - 2, 162, :_reduce_17, - 0, 174, :_reduce_18, - 4, 154, :_reduce_19, - 3, 154, :_reduce_20, - 3, 154, :_reduce_21, - 3, 154, :_reduce_22, - 2, 154, :_reduce_23, - 3, 154, :_reduce_24, - 3, 154, :_reduce_25, - 3, 154, :_reduce_26, - 3, 154, :_reduce_27, - 3, 154, :_reduce_28, - 4, 154, :_reduce_29, - 1, 154, :_reduce_none, - 3, 154, :_reduce_31, - 3, 154, :_reduce_32, - 5, 154, :_reduce_33, - 3, 154, :_reduce_34, - 1, 154, :_reduce_none, - 1, 154, :_reduce_none, - 3, 172, :_reduce_37, - 3, 172, :_reduce_38, - 3, 172, :_reduce_39, - 3, 172, :_reduce_40, - 3, 166, :_reduce_41, - 3, 166, :_reduce_42, - 6, 166, :_reduce_43, - 5, 166, :_reduce_44, - 5, 166, :_reduce_45, - 5, 166, :_reduce_46, - 5, 166, :_reduce_47, - 3, 166, :_reduce_48, - 1, 176, :_reduce_none, - 3, 176, :_reduce_50, - 1, 176, :_reduce_none, - 1, 173, :_reduce_none, - 3, 173, :_reduce_53, - 3, 173, :_reduce_54, - 3, 173, :_reduce_55, - 2, 173, :_reduce_56, - 0, 186, :_reduce_57, - 4, 173, :_reduce_58, - 1, 173, :_reduce_none, - 1, 165, :_reduce_none, - 0, 190, :_reduce_61, - 3, 187, :_reduce_62, - 1, 189, :_reduce_63, - 2, 192, :_reduce_64, - 0, 196, :_reduce_65, - 5, 193, :_reduce_66, - 1, 168, :_reduce_none, - 1, 168, :_reduce_none, - 1, 198, :_reduce_none, - 4, 198, :_reduce_70, - 0, 205, :_reduce_71, - 4, 202, :_reduce_72, - 1, 204, :_reduce_none, - 2, 197, :_reduce_74, - 3, 197, :_reduce_75, - 4, 197, :_reduce_76, - 5, 197, :_reduce_77, - 4, 197, :_reduce_78, - 5, 197, :_reduce_79, - 2, 197, :_reduce_80, - 2, 197, :_reduce_81, - 2, 197, :_reduce_82, - 2, 197, :_reduce_83, - 2, 197, :_reduce_84, - 1, 167, :_reduce_85, - 3, 167, :_reduce_86, - 1, 210, :_reduce_87, - 3, 210, :_reduce_88, - 1, 209, :_reduce_none, - 2, 209, :_reduce_90, - 3, 209, :_reduce_91, - 5, 209, :_reduce_92, - 2, 209, :_reduce_93, - 4, 209, :_reduce_94, - 2, 209, :_reduce_95, - 4, 209, :_reduce_96, - 1, 209, :_reduce_97, - 3, 209, :_reduce_98, - 1, 213, :_reduce_none, - 3, 213, :_reduce_100, - 2, 212, :_reduce_101, - 3, 212, :_reduce_102, - 1, 215, :_reduce_103, - 3, 215, :_reduce_104, - 1, 214, :_reduce_105, - 1, 214, :_reduce_106, - 4, 214, :_reduce_107, - 3, 214, :_reduce_108, - 3, 214, :_reduce_109, - 3, 214, :_reduce_110, - 3, 214, :_reduce_111, - 2, 214, :_reduce_112, - 1, 214, :_reduce_113, - 1, 169, :_reduce_114, - 1, 169, :_reduce_115, - 4, 169, :_reduce_116, - 3, 169, :_reduce_117, - 3, 169, :_reduce_118, - 3, 169, :_reduce_119, - 3, 169, :_reduce_120, - 2, 169, :_reduce_121, - 1, 169, :_reduce_122, - 1, 218, :_reduce_123, - 1, 218, :_reduce_none, - 2, 219, :_reduce_125, - 1, 219, :_reduce_126, - 3, 219, :_reduce_127, - 1, 191, :_reduce_none, - 1, 191, :_reduce_none, - 1, 191, :_reduce_none, - 1, 191, :_reduce_none, - 1, 191, :_reduce_none, - 1, 163, :_reduce_133, - 1, 163, :_reduce_none, - 1, 164, :_reduce_135, - 0, 223, :_reduce_136, - 4, 164, :_reduce_137, - 1, 220, :_reduce_none, - 1, 220, :_reduce_none, - 1, 220, :_reduce_none, - 1, 220, :_reduce_none, - 1, 220, :_reduce_none, - 1, 220, :_reduce_none, - 1, 220, :_reduce_none, - 1, 220, :_reduce_none, - 1, 220, :_reduce_none, - 1, 220, :_reduce_none, - 1, 220, :_reduce_none, - 1, 220, :_reduce_none, - 1, 220, :_reduce_none, - 1, 220, :_reduce_none, - 1, 220, :_reduce_none, - 1, 220, :_reduce_none, - 1, 220, :_reduce_none, - 1, 220, :_reduce_none, - 1, 220, :_reduce_none, - 1, 220, :_reduce_none, - 1, 220, :_reduce_none, - 1, 220, :_reduce_none, - 1, 220, :_reduce_none, - 1, 220, :_reduce_none, - 1, 220, :_reduce_none, - 1, 220, :_reduce_none, - 1, 220, :_reduce_none, - 1, 220, :_reduce_none, - 1, 220, :_reduce_none, - 1, 220, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 3, 184, :_reduce_209, - 3, 184, :_reduce_210, - 6, 184, :_reduce_211, - 5, 184, :_reduce_212, - 5, 184, :_reduce_213, - 5, 184, :_reduce_214, - 5, 184, :_reduce_215, - 4, 184, :_reduce_216, - 3, 184, :_reduce_217, - 3, 184, :_reduce_218, - 3, 184, :_reduce_219, - 2, 184, :_reduce_220, - 2, 184, :_reduce_221, - 2, 184, :_reduce_222, - 2, 184, :_reduce_223, - 3, 184, :_reduce_224, - 3, 184, :_reduce_225, - 3, 184, :_reduce_226, - 3, 184, :_reduce_227, - 3, 184, :_reduce_228, - 3, 184, :_reduce_229, - 4, 184, :_reduce_230, - 2, 184, :_reduce_231, - 2, 184, :_reduce_232, - 3, 184, :_reduce_233, - 3, 184, :_reduce_234, - 3, 184, :_reduce_235, - 3, 184, :_reduce_236, - 1, 184, :_reduce_none, - 3, 184, :_reduce_238, - 3, 184, :_reduce_239, - 3, 184, :_reduce_240, - 3, 184, :_reduce_241, - 3, 184, :_reduce_242, - 2, 184, :_reduce_243, - 2, 184, :_reduce_244, - 3, 184, :_reduce_245, - 3, 184, :_reduce_246, - 3, 184, :_reduce_247, - 3, 184, :_reduce_248, - 3, 184, :_reduce_249, - 6, 184, :_reduce_250, - 4, 184, :_reduce_251, - 6, 184, :_reduce_252, - 4, 184, :_reduce_253, - 6, 184, :_reduce_254, - 1, 184, :_reduce_none, - 1, 229, :_reduce_none, - 1, 229, :_reduce_none, - 1, 229, :_reduce_none, - 1, 229, :_reduce_none, - 3, 226, :_reduce_260, - 3, 226, :_reduce_261, - 1, 175, :_reduce_none, - 1, 230, :_reduce_none, - 2, 230, :_reduce_none, - 4, 230, :_reduce_265, - 2, 230, :_reduce_266, - 1, 224, :_reduce_none, - 3, 224, :_reduce_268, - 3, 235, :_reduce_269, - 5, 235, :_reduce_270, - 3, 235, :_reduce_271, - 0, 237, :_reduce_272, - 1, 237, :_reduce_none, - 0, 179, :_reduce_274, - 1, 179, :_reduce_none, - 2, 179, :_reduce_none, - 4, 179, :_reduce_277, - 2, 179, :_reduce_278, - 1, 208, :_reduce_279, - 2, 208, :_reduce_280, - 2, 208, :_reduce_281, - 4, 208, :_reduce_282, - 1, 208, :_reduce_283, - 0, 240, :_reduce_284, - 2, 201, :_reduce_285, - 2, 239, :_reduce_286, - 2, 238, :_reduce_287, - 0, 238, :_reduce_288, - 1, 232, :_reduce_289, - 2, 232, :_reduce_290, - 3, 232, :_reduce_291, - 4, 232, :_reduce_292, - 1, 171, :_reduce_293, - 1, 171, :_reduce_none, - 3, 170, :_reduce_295, - 4, 170, :_reduce_296, - 2, 170, :_reduce_297, - 1, 228, :_reduce_none, - 1, 228, :_reduce_none, - 1, 228, :_reduce_none, - 1, 228, :_reduce_none, - 1, 228, :_reduce_none, - 1, 228, :_reduce_none, - 1, 228, :_reduce_none, - 1, 228, :_reduce_none, - 1, 228, :_reduce_none, - 1, 228, :_reduce_none, - 1, 228, :_reduce_308, - 0, 262, :_reduce_309, - 4, 228, :_reduce_310, - 0, 263, :_reduce_311, - 4, 228, :_reduce_312, - 0, 264, :_reduce_313, - 4, 228, :_reduce_314, - 3, 228, :_reduce_315, - 3, 228, :_reduce_316, - 2, 228, :_reduce_317, - 3, 228, :_reduce_318, - 3, 228, :_reduce_319, - 1, 228, :_reduce_320, - 4, 228, :_reduce_321, - 3, 228, :_reduce_322, - 1, 228, :_reduce_323, - 5, 228, :_reduce_324, - 4, 228, :_reduce_325, - 3, 228, :_reduce_326, - 2, 228, :_reduce_327, - 1, 228, :_reduce_none, - 2, 228, :_reduce_329, - 1, 228, :_reduce_none, - 6, 228, :_reduce_331, - 6, 228, :_reduce_332, - 4, 228, :_reduce_333, - 4, 228, :_reduce_334, - 5, 228, :_reduce_335, - 4, 228, :_reduce_336, - 5, 228, :_reduce_337, - 6, 228, :_reduce_338, - 0, 265, :_reduce_339, - 6, 228, :_reduce_340, - 0, 266, :_reduce_341, - 7, 228, :_reduce_342, - 0, 267, :_reduce_343, - 5, 228, :_reduce_344, - 4, 228, :_reduce_345, - 4, 228, :_reduce_346, - 1, 228, :_reduce_347, - 1, 228, :_reduce_348, - 1, 228, :_reduce_349, - 1, 228, :_reduce_350, - 1, 178, :_reduce_none, - 1, 207, :_reduce_352, - 1, 254, :_reduce_none, - 1, 254, :_reduce_none, - 2, 254, :_reduce_355, - 1, 188, :_reduce_none, - 1, 188, :_reduce_none, - 1, 255, :_reduce_none, - 5, 255, :_reduce_359, - 1, 159, :_reduce_none, - 2, 159, :_reduce_361, - 1, 258, :_reduce_none, - 1, 258, :_reduce_none, - 1, 268, :_reduce_364, - 3, 268, :_reduce_365, - 1, 271, :_reduce_366, - 3, 271, :_reduce_367, - 1, 270, :_reduce_none, - 3, 270, :_reduce_369, - 5, 270, :_reduce_370, - 1, 270, :_reduce_371, - 3, 270, :_reduce_372, - 2, 272, :_reduce_373, - 1, 272, :_reduce_374, - 1, 273, :_reduce_none, - 1, 273, :_reduce_none, - 4, 276, :_reduce_377, - 2, 276, :_reduce_378, - 2, 276, :_reduce_379, - 1, 276, :_reduce_380, - 2, 280, :_reduce_381, - 0, 280, :_reduce_382, - 1, 281, :_reduce_none, - 6, 282, :_reduce_384, - 8, 282, :_reduce_385, - 4, 282, :_reduce_386, - 6, 282, :_reduce_387, - 4, 282, :_reduce_388, - 2, 282, :_reduce_none, - 6, 282, :_reduce_390, - 2, 282, :_reduce_391, - 4, 282, :_reduce_392, - 6, 282, :_reduce_393, - 2, 282, :_reduce_394, - 4, 282, :_reduce_395, - 2, 282, :_reduce_396, - 4, 282, :_reduce_397, - 1, 282, :_reduce_none, - 0, 286, :_reduce_399, - 1, 286, :_reduce_400, - 3, 287, :_reduce_401, - 4, 287, :_reduce_402, - 1, 288, :_reduce_403, - 4, 288, :_reduce_404, - 1, 289, :_reduce_405, - 3, 289, :_reduce_406, - 1, 290, :_reduce_407, - 1, 290, :_reduce_none, - 0, 294, :_reduce_409, - 0, 295, :_reduce_410, - 5, 253, :_reduce_411, - 4, 292, :_reduce_412, - 1, 292, :_reduce_413, - 0, 298, :_reduce_414, - 4, 293, :_reduce_415, - 0, 299, :_reduce_416, - 4, 293, :_reduce_417, - 0, 301, :_reduce_418, - 4, 297, :_reduce_419, - 2, 199, :_reduce_420, - 4, 199, :_reduce_421, - 5, 199, :_reduce_422, - 5, 199, :_reduce_423, - 2, 252, :_reduce_424, - 4, 252, :_reduce_425, - 4, 252, :_reduce_426, - 3, 252, :_reduce_427, - 3, 252, :_reduce_428, - 3, 252, :_reduce_429, - 2, 252, :_reduce_430, - 1, 252, :_reduce_431, - 4, 252, :_reduce_432, - 0, 303, :_reduce_433, - 4, 251, :_reduce_434, - 0, 304, :_reduce_435, - 4, 251, :_reduce_436, - 0, 305, :_reduce_437, - 3, 203, :_reduce_438, - 0, 306, :_reduce_439, - 0, 307, :_reduce_440, - 4, 300, :_reduce_441, - 5, 256, :_reduce_442, - 1, 308, :_reduce_443, - 1, 308, :_reduce_none, - 0, 311, :_reduce_445, - 0, 312, :_reduce_446, - 7, 257, :_reduce_447, - 1, 310, :_reduce_448, - 1, 310, :_reduce_none, - 1, 309, :_reduce_450, - 3, 309, :_reduce_451, - 3, 309, :_reduce_452, - 1, 313, :_reduce_none, - 2, 313, :_reduce_454, - 3, 313, :_reduce_455, - 1, 313, :_reduce_456, - 1, 313, :_reduce_457, - 1, 313, :_reduce_458, - 1, 185, :_reduce_none, - 3, 318, :_reduce_460, - 1, 318, :_reduce_none, - 3, 320, :_reduce_462, - 1, 320, :_reduce_none, - 1, 322, :_reduce_464, - 1, 323, :_reduce_465, - 1, 321, :_reduce_none, - 4, 321, :_reduce_467, - 4, 321, :_reduce_468, - 4, 321, :_reduce_469, - 3, 321, :_reduce_470, - 4, 321, :_reduce_471, - 4, 321, :_reduce_472, - 4, 321, :_reduce_473, - 3, 321, :_reduce_474, - 3, 321, :_reduce_475, - 3, 321, :_reduce_476, - 2, 321, :_reduce_477, - 0, 327, :_reduce_478, - 4, 321, :_reduce_479, - 2, 321, :_reduce_480, - 0, 328, :_reduce_481, - 4, 321, :_reduce_482, - 1, 314, :_reduce_483, - 1, 314, :_reduce_484, - 2, 314, :_reduce_485, - 3, 314, :_reduce_486, - 5, 314, :_reduce_487, - 2, 314, :_reduce_488, - 4, 314, :_reduce_489, - 1, 314, :_reduce_none, - 2, 329, :_reduce_491, - 3, 329, :_reduce_492, - 1, 316, :_reduce_493, - 3, 316, :_reduce_494, - 5, 315, :_reduce_495, - 2, 332, :_reduce_496, - 1, 332, :_reduce_497, - 1, 331, :_reduce_498, - 3, 331, :_reduce_499, - 1, 330, :_reduce_none, - 3, 317, :_reduce_501, - 1, 317, :_reduce_502, - 2, 317, :_reduce_503, - 1, 317, :_reduce_504, - 1, 333, :_reduce_505, - 3, 333, :_reduce_506, - 2, 335, :_reduce_507, - 1, 335, :_reduce_508, - 1, 336, :_reduce_509, - 3, 336, :_reduce_510, - 2, 338, :_reduce_511, - 1, 338, :_reduce_512, - 2, 340, :_reduce_513, - 1, 334, :_reduce_none, - 1, 334, :_reduce_none, - 1, 324, :_reduce_none, - 3, 324, :_reduce_517, - 3, 324, :_reduce_518, - 2, 324, :_reduce_519, - 2, 324, :_reduce_520, - 1, 324, :_reduce_none, - 1, 324, :_reduce_none, - 1, 324, :_reduce_none, - 2, 324, :_reduce_524, - 2, 324, :_reduce_525, - 1, 341, :_reduce_none, - 1, 341, :_reduce_none, - 1, 341, :_reduce_none, - 1, 341, :_reduce_none, - 1, 341, :_reduce_none, - 1, 341, :_reduce_none, - 1, 341, :_reduce_none, - 1, 341, :_reduce_none, - 1, 341, :_reduce_534, - 1, 341, :_reduce_none, - 1, 319, :_reduce_536, - 2, 342, :_reduce_537, - 2, 325, :_reduce_538, - 3, 325, :_reduce_539, - 1, 325, :_reduce_540, - 6, 158, :_reduce_541, - 0, 158, :_reduce_542, - 1, 343, :_reduce_543, - 1, 343, :_reduce_none, - 1, 343, :_reduce_none, - 2, 344, :_reduce_546, - 1, 344, :_reduce_none, - 2, 160, :_reduce_548, - 1, 160, :_reduce_none, - 1, 241, :_reduce_none, - 1, 241, :_reduce_none, - 1, 242, :_reduce_552, - 1, 346, :_reduce_553, - 2, 346, :_reduce_554, - 3, 347, :_reduce_555, - 1, 347, :_reduce_556, - 1, 347, :_reduce_557, - 3, 243, :_reduce_558, - 4, 244, :_reduce_559, - 3, 245, :_reduce_560, - 0, 350, :_reduce_561, - 3, 350, :_reduce_562, - 1, 351, :_reduce_563, - 2, 351, :_reduce_564, - 3, 247, :_reduce_565, - 0, 353, :_reduce_566, - 3, 353, :_reduce_567, - 3, 246, :_reduce_568, - 3, 248, :_reduce_569, - 0, 354, :_reduce_570, - 3, 354, :_reduce_571, - 0, 355, :_reduce_572, - 3, 355, :_reduce_573, - 0, 337, :_reduce_574, - 2, 337, :_reduce_575, - 0, 348, :_reduce_576, - 2, 348, :_reduce_577, - 0, 349, :_reduce_578, - 2, 349, :_reduce_579, - 1, 352, :_reduce_580, - 2, 352, :_reduce_581, - 0, 357, :_reduce_582, - 4, 352, :_reduce_583, - 1, 356, :_reduce_584, - 1, 356, :_reduce_585, - 1, 356, :_reduce_586, - 1, 356, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 358, :_reduce_590, - 3, 359, :_reduce_591, - 1, 345, :_reduce_592, - 2, 345, :_reduce_593, - 1, 225, :_reduce_594, - 1, 225, :_reduce_595, - 1, 225, :_reduce_596, - 1, 225, :_reduce_597, - 1, 216, :_reduce_598, - 1, 216, :_reduce_599, - 1, 216, :_reduce_600, - 1, 216, :_reduce_601, - 1, 216, :_reduce_602, - 1, 217, :_reduce_603, - 1, 217, :_reduce_604, - 1, 217, :_reduce_605, - 1, 217, :_reduce_606, - 1, 217, :_reduce_607, - 1, 217, :_reduce_608, - 1, 217, :_reduce_609, - 1, 249, :_reduce_610, - 1, 249, :_reduce_611, - 1, 177, :_reduce_612, - 1, 177, :_reduce_613, - 1, 182, :_reduce_614, - 1, 182, :_reduce_615, - 0, 360, :_reduce_616, - 4, 259, :_reduce_617, - 0, 259, :_reduce_618, - 3, 227, :_reduce_619, - 5, 227, :_reduce_620, - 3, 227, :_reduce_621, - 1, 261, :_reduce_none, - 0, 362, :_reduce_623, - 3, 261, :_reduce_624, - 4, 361, :_reduce_625, - 2, 361, :_reduce_626, - 2, 361, :_reduce_627, - 1, 361, :_reduce_628, - 2, 364, :_reduce_629, - 0, 364, :_reduce_630, - 6, 296, :_reduce_631, - 8, 296, :_reduce_632, - 4, 296, :_reduce_633, - 6, 296, :_reduce_634, - 4, 296, :_reduce_635, - 6, 296, :_reduce_636, - 2, 296, :_reduce_637, - 4, 296, :_reduce_638, - 6, 296, :_reduce_639, - 2, 296, :_reduce_640, - 4, 296, :_reduce_641, - 2, 296, :_reduce_642, - 4, 296, :_reduce_643, - 1, 296, :_reduce_644, - 0, 296, :_reduce_645, - 1, 236, :_reduce_646, - 1, 291, :_reduce_647, - 1, 291, :_reduce_648, - 1, 291, :_reduce_649, - 1, 291, :_reduce_650, - 1, 269, :_reduce_none, - 1, 269, :_reduce_652, - 1, 366, :_reduce_653, - 1, 367, :_reduce_654, - 3, 367, :_reduce_655, - 1, 283, :_reduce_656, - 3, 283, :_reduce_657, - 1, 368, :_reduce_658, - 2, 369, :_reduce_659, - 1, 369, :_reduce_660, - 2, 370, :_reduce_661, - 1, 370, :_reduce_662, - 1, 277, :_reduce_663, - 3, 277, :_reduce_664, - 1, 363, :_reduce_665, - 3, 363, :_reduce_666, - 1, 339, :_reduce_none, - 1, 339, :_reduce_none, - 2, 275, :_reduce_669, - 2, 274, :_reduce_670, - 1, 274, :_reduce_671, - 3, 371, :_reduce_672, - 3, 372, :_reduce_673, - 1, 284, :_reduce_674, - 3, 284, :_reduce_675, - 1, 365, :_reduce_676, - 3, 365, :_reduce_677, - 1, 373, :_reduce_none, - 1, 373, :_reduce_none, - 2, 285, :_reduce_680, - 1, 285, :_reduce_681, - 1, 374, :_reduce_none, - 1, 374, :_reduce_none, - 2, 279, :_reduce_684, - 2, 278, :_reduce_685, - 0, 278, :_reduce_686, - 1, 194, :_reduce_none, - 3, 194, :_reduce_688, - 0, 250, :_reduce_689, - 2, 250, :_reduce_none, - 1, 234, :_reduce_691, - 3, 234, :_reduce_692, - 3, 375, :_reduce_693, - 2, 375, :_reduce_694, - 4, 375, :_reduce_695, - 2, 375, :_reduce_696, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 206, :_reduce_none, - 1, 200, :_reduce_none, - 1, 200, :_reduce_none, - 1, 200, :_reduce_none, - 1, 200, :_reduce_none, - 1, 302, :_reduce_none, - 1, 302, :_reduce_none, - 1, 302, :_reduce_none, - 1, 195, :_reduce_none, - 1, 195, :_reduce_none, - 1, 181, :_reduce_709, - 1, 181, :_reduce_710, - 0, 151, :_reduce_none, - 1, 151, :_reduce_none, - 0, 183, :_reduce_none, - 1, 183, :_reduce_none, - 2, 211, :_reduce_715, - 2, 180, :_reduce_716, - 2, 326, :_reduce_717, - 0, 233, :_reduce_none, - 1, 233, :_reduce_none, - 1, 233, :_reduce_none, - 1, 260, :_reduce_721, - 1, 260, :_reduce_none, - 1, 153, :_reduce_none, - 2, 153, :_reduce_none, - 0, 231, :_reduce_725 ] - -racc_reduce_n = 726 - -racc_shift_n = 1219 - -racc_token_table = { - false => 0, - :error => 1, - :kCLASS => 2, - :kMODULE => 3, - :kDEF => 4, - :kUNDEF => 5, - :kBEGIN => 6, - :kRESCUE => 7, - :kENSURE => 8, - :kEND => 9, - :kIF => 10, - :kUNLESS => 11, - :kTHEN => 12, - :kELSIF => 13, - :kELSE => 14, - :kCASE => 15, - :kWHEN => 16, - :kWHILE => 17, - :kUNTIL => 18, - :kFOR => 19, - :kBREAK => 20, - :kNEXT => 21, - :kREDO => 22, - :kRETRY => 23, - :kIN => 24, - :kDO => 25, - :kDO_COND => 26, - :kDO_BLOCK => 27, - :kDO_LAMBDA => 28, - :kRETURN => 29, - :kYIELD => 30, - :kSUPER => 31, - :kSELF => 32, - :kNIL => 33, - :kTRUE => 34, - :kFALSE => 35, - :kAND => 36, - :kOR => 37, - :kNOT => 38, - :kIF_MOD => 39, - :kUNLESS_MOD => 40, - :kWHILE_MOD => 41, - :kUNTIL_MOD => 42, - :kRESCUE_MOD => 43, - :kALIAS => 44, - :kDEFINED => 45, - :klBEGIN => 46, - :klEND => 47, - :k__LINE__ => 48, - :k__FILE__ => 49, - :k__ENCODING__ => 50, - :tIDENTIFIER => 51, - :tFID => 52, - :tGVAR => 53, - :tIVAR => 54, - :tCONSTANT => 55, - :tLABEL => 56, - :tCVAR => 57, - :tNTH_REF => 58, - :tBACK_REF => 59, - :tSTRING_CONTENT => 60, - :tINTEGER => 61, - :tFLOAT => 62, - :tUPLUS => 63, - :tUMINUS => 64, - :tUNARY_NUM => 65, - :tPOW => 66, - :tCMP => 67, - :tEQ => 68, - :tEQQ => 69, - :tNEQ => 70, - :tGEQ => 71, - :tLEQ => 72, - :tANDOP => 73, - :tOROP => 74, - :tMATCH => 75, - :tNMATCH => 76, - :tDOT => 77, - :tDOT2 => 78, - :tDOT3 => 79, - :tAREF => 80, - :tASET => 81, - :tLSHFT => 82, - :tRSHFT => 83, - :tCOLON2 => 84, - :tCOLON3 => 85, - :tOP_ASGN => 86, - :tASSOC => 87, - :tLPAREN => 88, - :tLPAREN2 => 89, - :tRPAREN => 90, - :tLPAREN_ARG => 91, - :tLBRACK => 92, - :tLBRACK2 => 93, - :tRBRACK => 94, - :tLBRACE => 95, - :tLBRACE_ARG => 96, - :tSTAR => 97, - :tSTAR2 => 98, - :tAMPER => 99, - :tAMPER2 => 100, - :tTILDE => 101, - :tPERCENT => 102, - :tDIVIDE => 103, - :tDSTAR => 104, - :tPLUS => 105, - :tMINUS => 106, - :tLT => 107, - :tGT => 108, - :tPIPE => 109, - :tBANG => 110, - :tCARET => 111, - :tLCURLY => 112, - :tRCURLY => 113, - :tBACK_REF2 => 114, - :tSYMBEG => 115, - :tSTRING_BEG => 116, - :tXSTRING_BEG => 117, - :tREGEXP_BEG => 118, - :tREGEXP_OPT => 119, - :tWORDS_BEG => 120, - :tQWORDS_BEG => 121, - :tSYMBOLS_BEG => 122, - :tQSYMBOLS_BEG => 123, - :tSTRING_DBEG => 124, - :tSTRING_DVAR => 125, - :tSTRING_END => 126, - :tSTRING_DEND => 127, - :tSTRING => 128, - :tSYMBOL => 129, - :tNL => 130, - :tEH => 131, - :tCOLON => 132, - :tCOMMA => 133, - :tSPACE => 134, - :tSEMI => 135, - :tLAMBDA => 136, - :tLAMBEG => 137, - :tCHARACTER => 138, - :tRATIONAL => 139, - :tIMAGINARY => 140, - :tLABEL_END => 141, - :tANDDOT => 142, - :tBDOT2 => 143, - :tBDOT3 => 144, - :tEQL => 145, - :tLOWEST => 146 } - -racc_nt_base = 147 - -racc_use_result_var = true - -Racc_arg = [ - racc_action_table, - racc_action_check, - racc_action_default, - racc_action_pointer, - racc_goto_table, - racc_goto_check, - racc_goto_default, - racc_goto_pointer, - racc_nt_base, - racc_reduce_table, - racc_token_table, - racc_shift_n, - racc_reduce_n, - racc_use_result_var ] - -Racc_token_to_s_table = [ - "$end", - "error", - "kCLASS", - "kMODULE", - "kDEF", - "kUNDEF", - "kBEGIN", - "kRESCUE", - "kENSURE", - "kEND", - "kIF", - "kUNLESS", - "kTHEN", - "kELSIF", - "kELSE", - "kCASE", - "kWHEN", - "kWHILE", - "kUNTIL", - "kFOR", - "kBREAK", - "kNEXT", - "kREDO", - "kRETRY", - "kIN", - "kDO", - "kDO_COND", - "kDO_BLOCK", - "kDO_LAMBDA", - "kRETURN", - "kYIELD", - "kSUPER", - "kSELF", - "kNIL", - "kTRUE", - "kFALSE", - "kAND", - "kOR", - "kNOT", - "kIF_MOD", - "kUNLESS_MOD", - "kWHILE_MOD", - "kUNTIL_MOD", - "kRESCUE_MOD", - "kALIAS", - "kDEFINED", - "klBEGIN", - "klEND", - "k__LINE__", - "k__FILE__", - "k__ENCODING__", - "tIDENTIFIER", - "tFID", - "tGVAR", - "tIVAR", - "tCONSTANT", - "tLABEL", - "tCVAR", - "tNTH_REF", - "tBACK_REF", - "tSTRING_CONTENT", - "tINTEGER", - "tFLOAT", - "tUPLUS", - "tUMINUS", - "tUNARY_NUM", - "tPOW", - "tCMP", - "tEQ", - "tEQQ", - "tNEQ", - "tGEQ", - "tLEQ", - "tANDOP", - "tOROP", - "tMATCH", - "tNMATCH", - "tDOT", - "tDOT2", - "tDOT3", - "tAREF", - "tASET", - "tLSHFT", - "tRSHFT", - "tCOLON2", - "tCOLON3", - "tOP_ASGN", - "tASSOC", - "tLPAREN", - "tLPAREN2", - "tRPAREN", - "tLPAREN_ARG", - "tLBRACK", - "tLBRACK2", - "tRBRACK", - "tLBRACE", - "tLBRACE_ARG", - "tSTAR", - "tSTAR2", - "tAMPER", - "tAMPER2", - "tTILDE", - "tPERCENT", - "tDIVIDE", - "tDSTAR", - "tPLUS", - "tMINUS", - "tLT", - "tGT", - "tPIPE", - "tBANG", - "tCARET", - "tLCURLY", - "tRCURLY", - "tBACK_REF2", - "tSYMBEG", - "tSTRING_BEG", - "tXSTRING_BEG", - "tREGEXP_BEG", - "tREGEXP_OPT", - "tWORDS_BEG", - "tQWORDS_BEG", - "tSYMBOLS_BEG", - "tQSYMBOLS_BEG", - "tSTRING_DBEG", - "tSTRING_DVAR", - "tSTRING_END", - "tSTRING_DEND", - "tSTRING", - "tSYMBOL", - "tNL", - "tEH", - "tCOLON", - "tCOMMA", - "tSPACE", - "tSEMI", - "tLAMBDA", - "tLAMBEG", - "tCHARACTER", - "tRATIONAL", - "tIMAGINARY", - "tLABEL_END", - "tANDDOT", - "tBDOT2", - "tBDOT3", - "tEQL", - "tLOWEST", - "$start", - "program", - "top_compstmt", - "top_stmts", - "opt_terms", - "top_stmt", - "terms", - "stmt", - "begin_block", - "bodystmt", - "compstmt", - "opt_rescue", - "opt_else", - "opt_ensure", - "stmts", - "stmt_or_begin", - "fitem", - "undef_list", - "expr_value", - "command_asgn", - "mlhs", - "command_call", - "lhs", - "mrhs", - "mrhs_arg", - "rassign", - "expr", - "@1", - "arg_value", - "command_rhs", - "var_lhs", - "primary_value", - "opt_call_args", - "rbracket", - "call_op", - "backref", - "opt_nl", - "arg", - "p_expr", - "@2", - "expr_value_do", - "do", - "def_name", - "@3", - "fname", - "defn_head", - "defs_head", - "singleton", - "dot_or_colon", - "@4", - "command", - "block_command", - "block_call", - "operation2", - "command_args", - "cmd_brace_block", - "brace_body", - "fcall", - "@5", - "operation", - "k_return", - "call_args", - "mlhs_basic", - "mlhs_inner", - "rparen", - "mlhs_head", - "mlhs_item", - "mlhs_node", - "mlhs_post", - "user_variable", - "keyword_variable", - "cname", - "cpath", - "op", - "reswords", - "symbol", - "@6", - "arg_rhs", - "simple_numeric", - "rel_expr", - "f_paren_args", - "primary", - "relop", - "aref_args", - "none", - "args", - "trailer", - "assocs", - "paren_args", - "args_forward", - "opt_paren_args", - "opt_block_arg", - "block_arg", - "@7", - "literal", - "strings", - "xstring", - "regexp", - "words", - "qwords", - "symbols", - "qsymbols", - "var_ref", - "assoc_list", - "brace_block", - "method_call", - "lambda", - "then", - "if_tail", - "case_body", - "p_case_body", - "for_var", - "superclass", - "term", - "f_arglist", - "@8", - "@9", - "@10", - "@11", - "@12", - "@13", - "f_marg", - "f_norm_arg", - "f_margs", - "f_marg_list", - "f_rest_marg", - "f_any_kwrest", - "f_kwrest", - "f_no_kwarg", - "block_args_tail", - "f_block_kwarg", - "opt_f_block_arg", - "f_block_arg", - "opt_block_args_tail", - "excessed_comma", - "block_param", - "f_arg", - "f_block_optarg", - "f_rest_arg", - "opt_block_param", - "block_param_def", - "opt_bv_decl", - "bv_decls", - "bvar", - "f_bad_arg", - "f_larglist", - "lambda_body", - "@14", - "@15", - "f_args", - "do_block", - "@16", - "@17", - "do_body", - "@18", - "operation3", - "@19", - "@20", - "@21", - "@22", - "@23", - "cases", - "p_top_expr", - "p_cases", - "@24", - "@25", - "p_top_expr_body", - "p_args", - "p_find", - "p_args_tail", - "p_kwargs", - "p_as", - "p_variable", - "p_alt", - "p_expr_basic", - "p_lparen", - "p_lbracket", - "p_value", - "p_const", - "rbrace", - "@26", - "@27", - "p_args_head", - "p_arg", - "p_args_post", - "p_rest", - "p_kwarg", - "p_any_kwrest", - "p_kw", - "p_kw_label", - "string_contents", - "p_kwrest", - "kwrest_mark", - "p_kwnorest", - "p_primitive", - "p_var_ref", - "exc_list", - "exc_var", - "numeric", - "string", - "string1", - "xstring_contents", - "regexp_contents", - "word_list", - "word", - "string_content", - "symbol_list", - "qword_list", - "qsym_list", - "string_dvar", - "@28", - "ssym", - "dsym", - "@29", - "args_tail", - "@30", - "f_kwarg", - "opt_args_tail", - "f_optarg", - "f_arg_asgn", - "f_arg_item", - "f_label", - "f_kw", - "f_block_kw", - "f_opt", - "f_block_opt", - "restarg_mark", - "blkarg_mark", - "assoc" ] - -Racc_debug_parser = false - -##### State transition tables end ##### - -# reduce 0 omitted - -# reduce 1 omitted - -def _reduce_2(val, _values, result) - result = @builder.compstmt(val[0]) - - result -end - -def _reduce_3(val, _values, result) - result = [] - - result -end - -def _reduce_4(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_5(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_6(val, _values, result) - result = [ val[1] ] - - result -end - -# reduce 7 omitted - -def _reduce_8(val, _values, result) - result = @builder.preexe(val[0], *val[1]) - - result -end - -def _reduce_9(val, _values, result) - result = val - - result -end - -def _reduce_10(val, _values, result) - rescue_bodies = val[1] - else_t, else_ = val[2] - ensure_t, ensure_ = val[3] - - if rescue_bodies.empty? && !else_t.nil? - diagnostic :error, :useless_else, nil, else_t - end - - result = @builder.begin_body(val[0], - rescue_bodies, - else_t, else_, - ensure_t, ensure_) - - result -end - -def _reduce_11(val, _values, result) - result = @builder.compstmt(val[0]) - - result -end - -def _reduce_12(val, _values, result) - result = [] - - result -end - -def _reduce_13(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_14(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_15(val, _values, result) - result = [ val[1] ] - - result -end - -# reduce 16 omitted - -def _reduce_17(val, _values, result) - diagnostic :error, :begin_in_method, nil, val[0] - - result -end - -def _reduce_18(val, _values, result) - @lexer.state = :expr_fname - - result -end - -def _reduce_19(val, _values, result) - result = @builder.alias(val[0], val[1], val[3]) - - result -end - -def _reduce_20(val, _values, result) - result = @builder.alias(val[0], - @builder.gvar(val[1]), - @builder.gvar(val[2])) - - result -end - -def _reduce_21(val, _values, result) - result = @builder.alias(val[0], - @builder.gvar(val[1]), - @builder.back_ref(val[2])) - - result -end - -def _reduce_22(val, _values, result) - diagnostic :error, :nth_ref_alias, nil, val[2] - - result -end - -def _reduce_23(val, _values, result) - result = @builder.undef_method(val[0], val[1]) - - result -end - -def _reduce_24(val, _values, result) - result = @builder.condition_mod(val[0], nil, - val[1], val[2]) - - result -end - -def _reduce_25(val, _values, result) - result = @builder.condition_mod(nil, val[0], - val[1], val[2]) - - result -end - -def _reduce_26(val, _values, result) - result = @builder.loop_mod(:while, val[0], val[1], val[2]) - - result -end - -def _reduce_27(val, _values, result) - result = @builder.loop_mod(:until, val[0], val[1], val[2]) - - result -end - -def _reduce_28(val, _values, result) - rescue_body = @builder.rescue_body(val[1], - nil, nil, nil, - nil, val[2]) - - result = @builder.begin_body(val[0], [ rescue_body ]) - - result -end - -def _reduce_29(val, _values, result) - result = @builder.postexe(val[0], val[1], val[2], val[3]) - - result -end - -# reduce 30 omitted - -def _reduce_31(val, _values, result) - result = @builder.multi_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_32(val, _values, result) - result = @builder.assign(val[0], val[1], - @builder.array(nil, val[2], nil)) - - result -end - -def _reduce_33(val, _values, result) - rescue_body = @builder.rescue_body(val[3], - nil, nil, nil, - nil, val[4]) - begin_body = @builder.begin_body(val[2], [ rescue_body ]) - - result = @builder.multi_assign(val[0], val[1], begin_body) - - result -end - -def _reduce_34(val, _values, result) - result = @builder.multi_assign(val[0], val[1], val[2]) - - result -end - -# reduce 35 omitted - -# reduce 36 omitted - -def _reduce_37(val, _values, result) - result = @builder.rassign(val[0], val[1], val[2]) - - result -end - -def _reduce_38(val, _values, result) - result = @builder.multi_rassign(val[0], val[1], val[2]) - - result -end - -def _reduce_39(val, _values, result) - result = @builder.rassign(val[0], val[1], val[2]) - - result -end - -def _reduce_40(val, _values, result) - result = @builder.multi_rassign(val[0], val[1], val[2]) - - result -end - -def _reduce_41(val, _values, result) - result = @builder.assign(val[0], val[1], val[2]) - - result -end - -def _reduce_42(val, _values, result) - result = @builder.op_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_43(val, _values, result) - result = @builder.op_assign( - @builder.index( - val[0], val[1], val[2], val[3]), - val[4], val[5]) - - result -end - -def _reduce_44(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_45(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_46(val, _values, result) - const = @builder.const_op_assignable( - @builder.const_fetch(val[0], val[1], val[2])) - result = @builder.op_assign(const, val[3], val[4]) - - result -end - -def _reduce_47(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_48(val, _values, result) - @builder.op_assign(val[0], val[1], val[2]) - - result -end - -# reduce 49 omitted - -def _reduce_50(val, _values, result) - rescue_body = @builder.rescue_body(val[1], - nil, nil, nil, - nil, val[2]) - - result = @builder.begin_body(val[0], [ rescue_body ]) - - result -end - -# reduce 51 omitted - -# reduce 52 omitted - -def _reduce_53(val, _values, result) - result = @builder.logical_op(:and, val[0], val[1], val[2]) - - result -end - -def _reduce_54(val, _values, result) - result = @builder.logical_op(:or, val[0], val[1], val[2]) - - result -end - -def _reduce_55(val, _values, result) - result = @builder.not_op(val[0], nil, val[2], nil) - - result -end - -def _reduce_56(val, _values, result) - result = @builder.not_op(val[0], nil, val[1], nil) - - result -end - -def _reduce_57(val, _values, result) - @lexer.state = :expr_beg - @lexer.command_start = false - pattern_variables.push - - result = @lexer.in_kwarg - @lexer.in_kwarg = true - - result -end - -def _reduce_58(val, _values, result) - @lexer.in_kwarg = val[2] - result = @builder.in_match(val[0], val[1], val[3]) - - result -end - -# reduce 59 omitted - -# reduce 60 omitted - -def _reduce_61(val, _values, result) - @lexer.cond.push(true) - - result -end - -def _reduce_62(val, _values, result) - @lexer.cond.pop - result = [ val[1], val[2] ] - - result -end - -def _reduce_63(val, _values, result) - @static_env.extend_static - @lexer.cmdarg.push(false) - @lexer.cond.push(false) - @current_arg_stack.push(nil) - - result = val[0] - - result -end - -def _reduce_64(val, _values, result) - @context.push(:def) - - result = [ val[0], val[1] ] - - result -end - -def _reduce_65(val, _values, result) - @lexer.state = :expr_fname - - result -end - -def _reduce_66(val, _values, result) - @context.push(:defs) - - result = [ val[0], val[1], val[2], val[4] ] - - result -end - -# reduce 67 omitted - -# reduce 68 omitted - -# reduce 69 omitted - -def _reduce_70(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - result -end - -def _reduce_71(val, _values, result) - @context.push(:block) - - result -end - -def _reduce_72(val, _values, result) - result = [ val[0], *val[2], val[3] ] - @context.pop - - result -end - -# reduce 73 omitted - -def _reduce_74(val, _values, result) - result = @builder.call_method(nil, nil, val[0], - nil, val[1], nil) - - result -end - -def _reduce_75(val, _values, result) - method_call = @builder.call_method(nil, nil, val[0], - nil, val[1], nil) - - begin_t, args, body, end_t = val[2] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_76(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - result -end - -def _reduce_77(val, _values, result) - method_call = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - begin_t, args, body, end_t = val[4] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_78(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - result -end - -def _reduce_79(val, _values, result) - method_call = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - begin_t, args, body, end_t = val[4] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_80(val, _values, result) - result = @builder.keyword_cmd(:super, val[0], - nil, val[1], nil) - - result -end - -def _reduce_81(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0], - nil, val[1], nil) - - result -end - -def _reduce_82(val, _values, result) - result = @builder.keyword_cmd(:return, val[0], - nil, val[1], nil) - - result -end - -def _reduce_83(val, _values, result) - result = @builder.keyword_cmd(:break, val[0], - nil, val[1], nil) - - result -end - -def _reduce_84(val, _values, result) - result = @builder.keyword_cmd(:next, val[0], - nil, val[1], nil) - - result -end - -def _reduce_85(val, _values, result) - result = @builder.multi_lhs(nil, val[0], nil) - - result -end - -def _reduce_86(val, _values, result) - result = @builder.begin(val[0], val[1], val[2]) - - result -end - -def _reduce_87(val, _values, result) - result = @builder.multi_lhs(nil, val[0], nil) - - result -end - -def _reduce_88(val, _values, result) - result = @builder.multi_lhs(val[0], val[1], val[2]) - - result -end - -# reduce 89 omitted - -def _reduce_90(val, _values, result) - result = val[0]. - push(val[1]) - - result -end - -def _reduce_91(val, _values, result) - result = val[0]. - push(@builder.splat(val[1], val[2])) - - result -end - -def _reduce_92(val, _values, result) - result = val[0]. - push(@builder.splat(val[1], val[2])). - concat(val[4]) - - result -end - -def _reduce_93(val, _values, result) - result = val[0]. - push(@builder.splat(val[1])) - - result -end - -def _reduce_94(val, _values, result) - result = val[0]. - push(@builder.splat(val[1])). - concat(val[3]) - - result -end - -def _reduce_95(val, _values, result) - result = [ @builder.splat(val[0], val[1]) ] - - result -end - -def _reduce_96(val, _values, result) - result = [ @builder.splat(val[0], val[1]), - *val[3] ] - - result -end - -def _reduce_97(val, _values, result) - result = [ @builder.splat(val[0]) ] - - result -end - -def _reduce_98(val, _values, result) - result = [ @builder.splat(val[0]), - *val[2] ] - - result -end - -# reduce 99 omitted - -def _reduce_100(val, _values, result) - result = @builder.begin(val[0], val[1], val[2]) - - result -end - -def _reduce_101(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_102(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_103(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_104(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_105(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_106(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_107(val, _values, result) - result = @builder.index_asgn(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_108(val, _values, result) - if (val[1][0] == :anddot) - diagnostic :error, :csend_in_lhs_of_masgn, nil, val[1] - end - - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_109(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_110(val, _values, result) - if (val[1][0] == :anddot) - diagnostic :error, :csend_in_lhs_of_masgn, nil, val[1] - end - - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_111(val, _values, result) - result = @builder.assignable( - @builder.const_fetch(val[0], val[1], val[2])) - - result -end - -def _reduce_112(val, _values, result) - result = @builder.assignable( - @builder.const_global(val[0], val[1])) - - result -end - -def _reduce_113(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_114(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_115(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_116(val, _values, result) - result = @builder.index_asgn(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_117(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_118(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_119(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_120(val, _values, result) - result = @builder.assignable( - @builder.const_fetch(val[0], val[1], val[2])) - - result -end - -def _reduce_121(val, _values, result) - result = @builder.assignable( - @builder.const_global(val[0], val[1])) - - result -end - -def _reduce_122(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_123(val, _values, result) - diagnostic :error, :module_name_const, nil, val[0] - - result -end - -# reduce 124 omitted - -def _reduce_125(val, _values, result) - result = @builder.const_global(val[0], val[1]) - - result -end - -def _reduce_126(val, _values, result) - result = @builder.const(val[0]) - - result -end - -def _reduce_127(val, _values, result) - result = @builder.const_fetch(val[0], val[1], val[2]) - - result -end - -# reduce 128 omitted - -# reduce 129 omitted - -# reduce 130 omitted - -# reduce 131 omitted - -# reduce 132 omitted - -def _reduce_133(val, _values, result) - result = @builder.symbol(val[0]) - - result -end - -# reduce 134 omitted - -def _reduce_135(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_136(val, _values, result) - @lexer.state = :expr_fname - - result -end - -def _reduce_137(val, _values, result) - result = val[0] << val[3] - - result -end - -# reduce 138 omitted - -# reduce 139 omitted - -# reduce 140 omitted - -# reduce 141 omitted - -# reduce 142 omitted - -# reduce 143 omitted - -# reduce 144 omitted - -# reduce 145 omitted - -# reduce 146 omitted - -# reduce 147 omitted - -# reduce 148 omitted - -# reduce 149 omitted - -# reduce 150 omitted - -# reduce 151 omitted - -# reduce 152 omitted - -# reduce 153 omitted - -# reduce 154 omitted - -# reduce 155 omitted - -# reduce 156 omitted - -# reduce 157 omitted - -# reduce 158 omitted - -# reduce 159 omitted - -# reduce 160 omitted - -# reduce 161 omitted - -# reduce 162 omitted - -# reduce 163 omitted - -# reduce 164 omitted - -# reduce 165 omitted - -# reduce 166 omitted - -# reduce 167 omitted - -# reduce 168 omitted - -# reduce 169 omitted - -# reduce 170 omitted - -# reduce 171 omitted - -# reduce 172 omitted - -# reduce 173 omitted - -# reduce 174 omitted - -# reduce 175 omitted - -# reduce 176 omitted - -# reduce 177 omitted - -# reduce 178 omitted - -# reduce 179 omitted - -# reduce 180 omitted - -# reduce 181 omitted - -# reduce 182 omitted - -# reduce 183 omitted - -# reduce 184 omitted - -# reduce 185 omitted - -# reduce 186 omitted - -# reduce 187 omitted - -# reduce 188 omitted - -# reduce 189 omitted - -# reduce 190 omitted - -# reduce 191 omitted - -# reduce 192 omitted - -# reduce 193 omitted - -# reduce 194 omitted - -# reduce 195 omitted - -# reduce 196 omitted - -# reduce 197 omitted - -# reduce 198 omitted - -# reduce 199 omitted - -# reduce 200 omitted - -# reduce 201 omitted - -# reduce 202 omitted - -# reduce 203 omitted - -# reduce 204 omitted - -# reduce 205 omitted - -# reduce 206 omitted - -# reduce 207 omitted - -# reduce 208 omitted - -def _reduce_209(val, _values, result) - result = @builder.assign(val[0], val[1], val[2]) - - result -end - -def _reduce_210(val, _values, result) - result = @builder.op_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_211(val, _values, result) - result = @builder.op_assign( - @builder.index( - val[0], val[1], val[2], val[3]), - val[4], val[5]) - - result -end - -def _reduce_212(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_213(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_214(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_215(val, _values, result) - const = @builder.const_op_assignable( - @builder.const_fetch(val[0], val[1], val[2])) - result = @builder.op_assign(const, val[3], val[4]) - - result -end - -def _reduce_216(val, _values, result) - const = @builder.const_op_assignable( - @builder.const_global(val[0], val[1])) - result = @builder.op_assign(const, val[2], val[3]) - - result -end - -def _reduce_217(val, _values, result) - result = @builder.op_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_218(val, _values, result) - result = @builder.range_inclusive(val[0], val[1], val[2]) - - result -end - -def _reduce_219(val, _values, result) - result = @builder.range_exclusive(val[0], val[1], val[2]) - - result -end - -def _reduce_220(val, _values, result) - result = @builder.range_inclusive(val[0], val[1], nil) - - result -end - -def _reduce_221(val, _values, result) - result = @builder.range_exclusive(val[0], val[1], nil) - - result -end - -def _reduce_222(val, _values, result) - result = @builder.range_inclusive(nil, val[0], val[1]) - - result -end - -def _reduce_223(val, _values, result) - result = @builder.range_exclusive(nil, val[0], val[1]) - - result -end - -def _reduce_224(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_225(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_226(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_227(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_228(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_229(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_230(val, _values, result) - result = @builder.unary_op(val[0], - @builder.binary_op( - val[1], val[2], val[3])) - - result -end - -def _reduce_231(val, _values, result) - result = @builder.unary_op(val[0], val[1]) - - result -end - -def _reduce_232(val, _values, result) - result = @builder.unary_op(val[0], val[1]) - - result -end - -def _reduce_233(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_234(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_235(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_236(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -# reduce 237 omitted - -def _reduce_238(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_239(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_240(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_241(val, _values, result) - result = @builder.match_op(val[0], val[1], val[2]) - - result -end - -def _reduce_242(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_243(val, _values, result) - result = @builder.not_op(val[0], nil, val[1], nil) - - result -end - -def _reduce_244(val, _values, result) - result = @builder.unary_op(val[0], val[1]) - - result -end - -def _reduce_245(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_246(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_247(val, _values, result) - result = @builder.logical_op(:and, val[0], val[1], val[2]) - - result -end - -def _reduce_248(val, _values, result) - result = @builder.logical_op(:or, val[0], val[1], val[2]) - - result -end - -def _reduce_249(val, _values, result) - result = @builder.keyword_cmd(:defined?, val[0], nil, [ val[2] ], nil) - - result -end - -def _reduce_250(val, _values, result) - result = @builder.ternary(val[0], val[1], - val[2], val[4], val[5]) - - result -end - -def _reduce_251(val, _values, result) - result = @builder.def_endless_method(*val[0], - val[1], val[2], val[3]) - - @lexer.cmdarg.pop - @lexer.cond.pop - @static_env.unextend - @context.pop - @current_arg_stack.pop - - result -end - -def _reduce_252(val, _values, result) - rescue_body = @builder.rescue_body(val[4], - nil, nil, nil, - nil, val[5]) - - method_body = @builder.begin_body(val[3], [ rescue_body ]) - - result = @builder.def_endless_method(*val[0], - val[1], val[2], method_body) - - @lexer.cmdarg.pop - @lexer.cond.pop - @static_env.unextend - @context.pop - @current_arg_stack.pop - - result -end - -def _reduce_253(val, _values, result) - result = @builder.def_endless_singleton(*val[0], - val[1], val[2], val[3]) - - @lexer.cmdarg.pop - @lexer.cond.pop - @static_env.unextend - @context.pop - @current_arg_stack.pop - - result -end - -def _reduce_254(val, _values, result) - rescue_body = @builder.rescue_body(val[4], - nil, nil, nil, - nil, val[5]) - - method_body = @builder.begin_body(val[3], [ rescue_body ]) - - result = @builder.def_endless_singleton(*val[0], - val[1], val[2], method_body) - - @lexer.cmdarg.pop - @lexer.cond.pop - @static_env.unextend - @context.pop - @current_arg_stack.pop - - result -end - -# reduce 255 omitted - -# reduce 256 omitted - -# reduce 257 omitted - -# reduce 258 omitted - -# reduce 259 omitted - -def _reduce_260(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_261(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -# reduce 262 omitted - -# reduce 263 omitted - -# reduce 264 omitted - -def _reduce_265(val, _values, result) - result = val[0] << @builder.associate(nil, val[2], nil) - - result -end - -def _reduce_266(val, _values, result) - result = [ @builder.associate(nil, val[0], nil) ] - - result -end - -# reduce 267 omitted - -def _reduce_268(val, _values, result) - rescue_body = @builder.rescue_body(val[1], - nil, nil, nil, - nil, val[2]) - - result = @builder.begin_body(val[0], [ rescue_body ]) - - result -end - -def _reduce_269(val, _values, result) - result = val - - result -end - -def _reduce_270(val, _values, result) - unless @static_env.declared_forward_args? - diagnostic :error, :unexpected_token, { :token => 'tBDOT3' } , val[3] - end - - result = [val[0], [*val[1], @builder.forwarded_args(val[3])], val[4]] - - result -end - -def _reduce_271(val, _values, result) - unless @static_env.declared_forward_args? - diagnostic :error, :unexpected_token, { :token => 'tBDOT3' } , val[1] - end - - result = [val[0], [@builder.forwarded_args(val[1])], val[2]] - - result -end - -def _reduce_272(val, _values, result) - result = [ nil, [], nil ] - - result -end - -# reduce 273 omitted - -def _reduce_274(val, _values, result) - result = [] - - result -end - -# reduce 275 omitted - -# reduce 276 omitted - -def _reduce_277(val, _values, result) - result = val[0] << @builder.associate(nil, val[2], nil) - - result -end - -def _reduce_278(val, _values, result) - result = [ @builder.associate(nil, val[0], nil) ] - - result -end - -def _reduce_279(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_280(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_281(val, _values, result) - result = [ @builder.associate(nil, val[0], nil) ] - result.concat(val[1]) - - result -end - -def _reduce_282(val, _values, result) - assocs = @builder.associate(nil, val[2], nil) - result = val[0] << assocs - result.concat(val[3]) - - result -end - -def _reduce_283(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_284(val, _values, result) - # When branch gets invoked by RACC's lookahead - # and command args start with '[' or '(' - # we need to put `true` to the cmdarg stack - # **before** `false` pushed by lexer - # m [], n - # ^ - # Right here we have cmdarg [...0] because - # lexer pushed it on '[' - # We need to modify cmdarg stack to [...10] - # - # For all other cases (like `m n` or `m n, []`) we simply put 1 to the stack - # and later lexer pushes corresponding bits on top of it. - last_token = @last_token[0] - lookahead = last_token == :tLBRACK || last_token == :tLPAREN_ARG - - if lookahead - top = @lexer.cmdarg.pop - @lexer.cmdarg.push(true) - @lexer.cmdarg.push(top) - else - @lexer.cmdarg.push(true) - end - - result -end - -def _reduce_285(val, _values, result) - # call_args can be followed by tLBRACE_ARG (that does cmdarg.push(0) in the lexer) - # but the push must be done after cmdarg.pop() in the parser. - # So this code does cmdarg.pop() to pop 0 pushed by tLBRACE_ARG, - # cmdarg.pop() to pop 1 pushed by command_args, - # and cmdarg.push(0) to restore back the flag set by tLBRACE_ARG. - last_token = @last_token[0] - lookahead = last_token == :tLBRACE_ARG - if lookahead - top = @lexer.cmdarg.pop - @lexer.cmdarg.pop - @lexer.cmdarg.push(top) - else - @lexer.cmdarg.pop - end - - result = val[1] - - result -end - -def _reduce_286(val, _values, result) - result = @builder.block_pass(val[0], val[1]) - - result -end - -def _reduce_287(val, _values, result) - result = [ val[1] ] - - result -end - -def _reduce_288(val, _values, result) - result = [] - - result -end - -def _reduce_289(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_290(val, _values, result) - result = [ @builder.splat(val[0], val[1]) ] - - result -end - -def _reduce_291(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_292(val, _values, result) - result = val[0] << @builder.splat(val[2], val[3]) - - result -end - -def _reduce_293(val, _values, result) - result = @builder.array(nil, val[0], nil) - - result -end - -# reduce 294 omitted - -def _reduce_295(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_296(val, _values, result) - result = val[0] << @builder.splat(val[2], val[3]) - - result -end - -def _reduce_297(val, _values, result) - result = [ @builder.splat(val[0], val[1]) ] - - result -end - -# reduce 298 omitted - -# reduce 299 omitted - -# reduce 300 omitted - -# reduce 301 omitted - -# reduce 302 omitted - -# reduce 303 omitted - -# reduce 304 omitted - -# reduce 305 omitted - -# reduce 306 omitted - -# reduce 307 omitted - -def _reduce_308(val, _values, result) - result = @builder.call_method(nil, nil, val[0]) - - result -end - -def _reduce_309(val, _values, result) - @lexer.cmdarg.push(false) - - result -end - -def _reduce_310(val, _values, result) - @lexer.cmdarg.pop - - result = @builder.begin_keyword(val[0], val[2], val[3]) - - result -end - -def _reduce_311(val, _values, result) - @lexer.state = :expr_endarg - - result -end - -def _reduce_312(val, _values, result) - result = @builder.begin(val[0], val[1], val[3]) - - result -end - -def _reduce_313(val, _values, result) - @lexer.state = :expr_endarg - - result -end - -def _reduce_314(val, _values, result) - result = @builder.begin(val[0], nil, val[3]) - - result -end - -def _reduce_315(val, _values, result) - result = @builder.begin(val[0], val[1], val[2]) - - result -end - -def _reduce_316(val, _values, result) - result = @builder.const_fetch(val[0], val[1], val[2]) - - result -end - -def _reduce_317(val, _values, result) - result = @builder.const_global(val[0], val[1]) - - result -end - -def _reduce_318(val, _values, result) - result = @builder.array(val[0], val[1], val[2]) - - result -end - -def _reduce_319(val, _values, result) - result = @builder.associate(val[0], val[1], val[2]) - - result -end - -def _reduce_320(val, _values, result) - result = @builder.keyword_cmd(:return, val[0]) - - result -end - -def _reduce_321(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_322(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0], val[1], [], val[2]) - - result -end - -def _reduce_323(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0]) - - result -end - -def _reduce_324(val, _values, result) - result = @builder.keyword_cmd(:defined?, val[0], - val[2], [ val[3] ], val[4]) - - result -end - -def _reduce_325(val, _values, result) - result = @builder.not_op(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_326(val, _values, result) - result = @builder.not_op(val[0], val[1], nil, val[2]) - - result -end - -def _reduce_327(val, _values, result) - method_call = @builder.call_method(nil, nil, val[0]) - - begin_t, args, body, end_t = val[1] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -# reduce 328 omitted - -def _reduce_329(val, _values, result) - begin_t, args, body, end_t = val[1] - result = @builder.block(val[0], - begin_t, args, body, end_t) - - result -end - -# reduce 330 omitted - -def _reduce_331(val, _values, result) - else_t, else_ = val[4] - result = @builder.condition(val[0], val[1], val[2], - val[3], else_t, - else_, val[5]) - - result -end - -def _reduce_332(val, _values, result) - else_t, else_ = val[4] - result = @builder.condition(val[0], val[1], val[2], - else_, else_t, - val[3], val[5]) - - result -end - -def _reduce_333(val, _values, result) - result = @builder.loop(:while, val[0], *val[1], val[2], val[3]) - - result -end - -def _reduce_334(val, _values, result) - result = @builder.loop(:until, val[0], *val[1], val[2], val[3]) - - result -end - -def _reduce_335(val, _values, result) - *when_bodies, (else_t, else_body) = *val[3] - - result = @builder.case(val[0], val[1], - when_bodies, else_t, else_body, - val[4]) - - result -end - -def _reduce_336(val, _values, result) - *when_bodies, (else_t, else_body) = *val[2] - - result = @builder.case(val[0], nil, - when_bodies, else_t, else_body, - val[3]) - - result -end - -def _reduce_337(val, _values, result) - *in_bodies, (else_t, else_body) = *val[3] - - result = @builder.case_match(val[0], val[1], - in_bodies, else_t, else_body, - val[4]) - - result -end - -def _reduce_338(val, _values, result) - result = @builder.for(val[0], val[1], val[2], *val[3], val[4], val[5]) - - result -end - -def _reduce_339(val, _values, result) - @static_env.extend_static - @lexer.cmdarg.push(false) - @lexer.cond.push(false) - @context.push(:class) - - result -end - -def _reduce_340(val, _values, result) - unless @context.class_definition_allowed? - diagnostic :error, :class_in_def, nil, val[0] - end - - lt_t, superclass = val[2] - result = @builder.def_class(val[0], val[1], - lt_t, superclass, - val[4], val[5]) - - @lexer.cmdarg.pop - @lexer.cond.pop - @static_env.unextend - @context.pop - - result -end - -def _reduce_341(val, _values, result) - @static_env.extend_static - @lexer.cmdarg.push(false) - @lexer.cond.push(false) - @context.push(:sclass) - - result -end - -def _reduce_342(val, _values, result) - result = @builder.def_sclass(val[0], val[1], val[2], - val[5], val[6]) - - @lexer.cmdarg.pop - @lexer.cond.pop - @static_env.unextend - @context.pop - - result -end - -def _reduce_343(val, _values, result) - @static_env.extend_static - @lexer.cmdarg.push(false) - @context.push(:module) - - result -end - -def _reduce_344(val, _values, result) - unless @context.module_definition_allowed? - diagnostic :error, :module_in_def, nil, val[0] - end - - result = @builder.def_module(val[0], val[1], - val[3], val[4]) - - @lexer.cmdarg.pop - @static_env.unextend - @context.pop - - result -end - -def _reduce_345(val, _values, result) - result = @builder.def_method(*val[0], val[1], - val[2], val[3]) - - @lexer.cmdarg.pop - @lexer.cond.pop - @static_env.unextend - @context.pop - @current_arg_stack.pop - - result -end - -def _reduce_346(val, _values, result) - result = @builder.def_singleton(*val[0], val[1], - val[2], val[3]) - - @lexer.cmdarg.pop - @lexer.cond.pop - @static_env.unextend - @context.pop - @current_arg_stack.pop - - result -end - -def _reduce_347(val, _values, result) - result = @builder.keyword_cmd(:break, val[0]) - - result -end - -def _reduce_348(val, _values, result) - result = @builder.keyword_cmd(:next, val[0]) - - result -end - -def _reduce_349(val, _values, result) - result = @builder.keyword_cmd(:redo, val[0]) - - result -end - -def _reduce_350(val, _values, result) - result = @builder.keyword_cmd(:retry, val[0]) - - result -end - -# reduce 351 omitted - -def _reduce_352(val, _values, result) - if @context.in_class? - diagnostic :error, :invalid_return, nil, val[0] - end - - result -end - -# reduce 353 omitted - -# reduce 354 omitted - -def _reduce_355(val, _values, result) - result = val[1] - - result -end - -# reduce 356 omitted - -# reduce 357 omitted - -# reduce 358 omitted - -def _reduce_359(val, _values, result) - else_t, else_ = val[4] - result = [ val[0], - @builder.condition(val[0], val[1], val[2], - val[3], else_t, - else_, nil), - ] - - result -end - -# reduce 360 omitted - -def _reduce_361(val, _values, result) - result = val - - result -end - -# reduce 362 omitted - -# reduce 363 omitted - -def _reduce_364(val, _values, result) - result = @builder.arg(val[0]) - - result -end - -def _reduce_365(val, _values, result) - result = @builder.multi_lhs(val[0], val[1], val[2]) - - result -end - -def _reduce_366(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_367(val, _values, result) - result = val[0] << val[2] - - result -end - -# reduce 368 omitted - -def _reduce_369(val, _values, result) - result = val[0]. - push(val[2]) - - result -end - -def _reduce_370(val, _values, result) - result = val[0]. - push(val[2]). - concat(val[4]) - - result -end - -def _reduce_371(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_372(val, _values, result) - result = [ val[0], *val[2] ] - - result -end - -def _reduce_373(val, _values, result) - result = @builder.restarg(val[0], val[1]) - - result -end - -def _reduce_374(val, _values, result) - result = @builder.restarg(val[0]) - - result -end - -# reduce 375 omitted - -# reduce 376 omitted - -def _reduce_377(val, _values, result) - result = val[0].concat(val[2]).concat(val[3]) - - result -end - -def _reduce_378(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_379(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_380(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_381(val, _values, result) - result = val[1] - - result -end - -def _reduce_382(val, _values, result) - result = [] - - result -end - -# reduce 383 omitted - -def _reduce_384(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_385(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[6]). - concat(val[7]) - - result -end - -def _reduce_386(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_387(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_388(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -# reduce 389 omitted - -def _reduce_390(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_391(val, _values, result) - if val[1].empty? && val[0].size == 1 - result = [@builder.procarg0(val[0][0])] - else - result = val[0].concat(val[1]) - end - - result -end - -def _reduce_392(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_393(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_394(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_395(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_396(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_397(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -# reduce 398 omitted - -def _reduce_399(val, _values, result) - result = @builder.args(nil, [], nil) - - result -end - -def _reduce_400(val, _values, result) - @lexer.state = :expr_value - - result -end - -def _reduce_401(val, _values, result) - @max_numparam_stack.has_ordinary_params! - @current_arg_stack.set(nil) - result = @builder.args(val[0], val[1], val[2]) - - result -end - -def _reduce_402(val, _values, result) - @max_numparam_stack.has_ordinary_params! - @current_arg_stack.set(nil) - result = @builder.args(val[0], val[1].concat(val[2]), val[3]) - - result -end - -def _reduce_403(val, _values, result) - result = [] - - result -end - -def _reduce_404(val, _values, result) - result = val[2] - - result -end - -def _reduce_405(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_406(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_407(val, _values, result) - @static_env.declare val[0][0] - result = @builder.shadowarg(val[0]) - - result -end - -# reduce 408 omitted - -def _reduce_409(val, _values, result) - @static_env.extend_dynamic - @max_numparam_stack.push - @context.push(:lambda) - - result -end - -def _reduce_410(val, _values, result) - @context.pop - @lexer.cmdarg.push(false) - - result -end - -def _reduce_411(val, _values, result) - lambda_call = @builder.call_lambda(val[0]) - args = @max_numparam_stack.has_numparams? ? @builder.numargs(@max_numparam_stack.top) : val[2] - begin_t, body, end_t = val[4] - - @max_numparam_stack.pop - @static_env.unextend - @lexer.cmdarg.pop - - result = @builder.block(lambda_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_412(val, _values, result) - @max_numparam_stack.has_ordinary_params! - result = @builder.args(val[0], val[1].concat(val[2]), val[3]) - - result -end - -def _reduce_413(val, _values, result) - if val[0].any? - @max_numparam_stack.has_ordinary_params! - end - result = @builder.args(nil, val[0], nil) - - result -end - -def _reduce_414(val, _values, result) - @context.push(:lambda) - - result -end - -def _reduce_415(val, _values, result) - result = [ val[0], val[2], val[3] ] - @context.pop - - result -end - -def _reduce_416(val, _values, result) - @context.push(:lambda) - - result -end - -def _reduce_417(val, _values, result) - result = [ val[0], val[2], val[3] ] - @context.pop - - result -end - -def _reduce_418(val, _values, result) - @context.push(:block) - - result -end - -def _reduce_419(val, _values, result) - result = [ val[0], *val[2], val[3] ] - @context.pop - - result -end - -def _reduce_420(val, _values, result) - begin_t, block_args, body, end_t = val[1] - result = @builder.block(val[0], - begin_t, block_args, body, end_t) - - result -end - -def _reduce_421(val, _values, result) - lparen_t, args, rparen_t = val[3] - result = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - result -end - -def _reduce_422(val, _values, result) - lparen_t, args, rparen_t = val[3] - method_call = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - begin_t, args, body, end_t = val[4] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_423(val, _values, result) - method_call = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - begin_t, args, body, end_t = val[4] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_424(val, _values, result) - lparen_t, args, rparen_t = val[1] - result = @builder.call_method(nil, nil, val[0], - lparen_t, args, rparen_t) - - result -end - -def _reduce_425(val, _values, result) - lparen_t, args, rparen_t = val[3] - result = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - result -end - -def _reduce_426(val, _values, result) - lparen_t, args, rparen_t = val[3] - result = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - result -end - -def _reduce_427(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2]) - - result -end - -def _reduce_428(val, _values, result) - lparen_t, args, rparen_t = val[2] - result = @builder.call_method(val[0], val[1], nil, - lparen_t, args, rparen_t) - - result -end - -def _reduce_429(val, _values, result) - lparen_t, args, rparen_t = val[2] - result = @builder.call_method(val[0], val[1], nil, - lparen_t, args, rparen_t) - - result -end - -def _reduce_430(val, _values, result) - lparen_t, args, rparen_t = val[1] - result = @builder.keyword_cmd(:super, val[0], - lparen_t, args, rparen_t) - - result -end - -def _reduce_431(val, _values, result) - result = @builder.keyword_cmd(:zsuper, val[0]) - - result -end - -def _reduce_432(val, _values, result) - result = @builder.index(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_433(val, _values, result) - @context.push(:block) - - result -end - -def _reduce_434(val, _values, result) - result = [ val[0], *val[2], val[3] ] - @context.pop - - result -end - -def _reduce_435(val, _values, result) - @context.push(:block) - - result -end - -def _reduce_436(val, _values, result) - result = [ val[0], *val[2], val[3] ] - @context.pop - - result -end - -def _reduce_437(val, _values, result) - @static_env.extend_dynamic - @max_numparam_stack.push - - result -end - -def _reduce_438(val, _values, result) - args = @max_numparam_stack.has_numparams? ? @builder.numargs(@max_numparam_stack.top) : val[1] - result = [ args, val[2] ] - - @max_numparam_stack.pop - @static_env.unextend - - result -end - -def _reduce_439(val, _values, result) - @static_env.extend_dynamic - @max_numparam_stack.push - - result -end - -def _reduce_440(val, _values, result) - @lexer.cmdarg.push(false) - - result -end - -def _reduce_441(val, _values, result) - args = @max_numparam_stack.has_numparams? ? @builder.numargs(@max_numparam_stack.top) : val[2] - result = [ args, val[3] ] - - @max_numparam_stack.pop - @static_env.unextend - @lexer.cmdarg.pop - - result -end - -def _reduce_442(val, _values, result) - result = [ @builder.when(val[0], val[1], val[2], val[3]), - *val[4] ] - - result -end - -def _reduce_443(val, _values, result) - result = [ val[0] ] - - result -end - -# reduce 444 omitted - -def _reduce_445(val, _values, result) - @lexer.state = :expr_beg - @lexer.command_start = false - @pattern_variables.push - @pattern_hash_keys.push - - result = @lexer.in_kwarg - @lexer.in_kwarg = true - - result -end - -def _reduce_446(val, _values, result) - @lexer.in_kwarg = val[1] - - result -end - -def _reduce_447(val, _values, result) - result = [ @builder.in_pattern(val[0], *val[2], val[3], val[5]), - *val[6] ] - - result -end - -def _reduce_448(val, _values, result) - result = [ val[0] ] - - result -end - -# reduce 449 omitted - -def _reduce_450(val, _values, result) - result = [ val[0], nil ] - - result -end - -def _reduce_451(val, _values, result) - result = [ val[0], @builder.if_guard(val[1], val[2]) ] - - result -end - -def _reduce_452(val, _values, result) - result = [ val[0], @builder.unless_guard(val[1], val[2]) ] - - result -end - -# reduce 453 omitted - -def _reduce_454(val, _values, result) - # array patterns that end with comma - # like 1, 2, - # must be emitted as `array_pattern_with_tail` - item = @builder.match_with_trailing_comma(val[0], val[1]) - result = @builder.array_pattern(nil, [ item ], nil) - - result -end - -def _reduce_455(val, _values, result) - result = @builder.array_pattern(nil, [val[0]].concat(val[2]), nil) - - result -end - -def _reduce_456(val, _values, result) - result = @builder.find_pattern(nil, val[0], nil) - - result -end - -def _reduce_457(val, _values, result) - result = @builder.array_pattern(nil, val[0], nil) - - result -end - -def _reduce_458(val, _values, result) - result = @builder.hash_pattern(nil, val[0], nil) - - result -end - -# reduce 459 omitted - -def _reduce_460(val, _values, result) - result = @builder.match_as(val[0], val[1], val[2]) - - result -end - -# reduce 461 omitted - -def _reduce_462(val, _values, result) - result = @builder.match_alt(val[0], val[1], val[2]) - - result -end - -# reduce 463 omitted - -def _reduce_464(val, _values, result) - result = val[0] - @pattern_hash_keys.push - - result -end - -def _reduce_465(val, _values, result) - result = val[0] - @pattern_hash_keys.push - - result -end - -# reduce 466 omitted - -def _reduce_467(val, _values, result) - @pattern_hash_keys.pop - pattern = @builder.array_pattern(nil, val[2], nil) - result = @builder.const_pattern(val[0], val[1], pattern, val[3]) - - result -end - -def _reduce_468(val, _values, result) - @pattern_hash_keys.pop - pattern = @builder.find_pattern(nil, val[2], nil) - result = @builder.const_pattern(val[0], val[1], pattern, val[3]) - - result -end - -def _reduce_469(val, _values, result) - @pattern_hash_keys.pop - pattern = @builder.hash_pattern(nil, val[2], nil) - result = @builder.const_pattern(val[0], val[1], pattern, val[3]) - - result -end - -def _reduce_470(val, _values, result) - pattern = @builder.array_pattern(val[1], nil, val[2]) - result = @builder.const_pattern(val[0], val[1], pattern, val[2]) - - result -end - -def _reduce_471(val, _values, result) - @pattern_hash_keys.pop - pattern = @builder.array_pattern(nil, val[2], nil) - result = @builder.const_pattern(val[0], val[1], pattern, val[3]) - - result -end - -def _reduce_472(val, _values, result) - @pattern_hash_keys.pop - pattern = @builder.find_pattern(nil, val[2], nil) - result = @builder.const_pattern(val[0], val[1], pattern, val[3]) - - result -end - -def _reduce_473(val, _values, result) - @pattern_hash_keys.pop - pattern = @builder.hash_pattern(nil, val[2], nil) - result = @builder.const_pattern(val[0], val[1], pattern, val[3]) - - result -end - -def _reduce_474(val, _values, result) - pattern = @builder.array_pattern(val[1], nil, val[2]) - result = @builder.const_pattern(val[0], val[1], pattern, val[2]) - - result -end - -def _reduce_475(val, _values, result) - result = @builder.array_pattern(val[0], val[1], val[2]) - - result -end - -def _reduce_476(val, _values, result) - result = @builder.find_pattern(val[0], val[1], val[2]) - - result -end - -def _reduce_477(val, _values, result) - result = @builder.array_pattern(val[0], [], val[1]) - - result -end - -def _reduce_478(val, _values, result) - @pattern_hash_keys.push - result = @lexer.in_kwarg - @lexer.in_kwarg = false - - result -end - -def _reduce_479(val, _values, result) - @pattern_hash_keys.pop - @lexer.in_kwarg = val[1] - result = @builder.hash_pattern(val[0], val[2], val[3]) - - result -end - -def _reduce_480(val, _values, result) - result = @builder.hash_pattern(val[0], [], val[1]) - - result -end - -def _reduce_481(val, _values, result) - @pattern_hash_keys.push - - result -end - -def _reduce_482(val, _values, result) - @pattern_hash_keys.pop - result = @builder.begin(val[0], val[2], val[3]) - - result -end - -def _reduce_483(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_484(val, _values, result) - result = val[0] - - result -end - -def _reduce_485(val, _values, result) - result = [ *val[0], val[1] ] - - result -end - -def _reduce_486(val, _values, result) - match_rest = @builder.match_rest(val[1], val[2]) - result = [ *val[0], match_rest ] - - result -end - -def _reduce_487(val, _values, result) - match_rest = @builder.match_rest(val[1], val[2]) - result = [ *val[0], match_rest, *val[4] ] - - result -end - -def _reduce_488(val, _values, result) - result = [ *val[0], @builder.match_rest(val[1]) ] - - result -end - -def _reduce_489(val, _values, result) - result = [ *val[0], @builder.match_rest(val[1]), *val[3] ] - - result -end - -# reduce 490 omitted - -def _reduce_491(val, _values, result) - # array patterns that end with comma - # like [1, 2,] - # must be emitted as `array_pattern_with_tail` - item = @builder.match_with_trailing_comma(val[0], val[1]) - result = [ item ] - - result -end - -def _reduce_492(val, _values, result) - # array patterns that end with comma - # like [1, 2,] - # must be emitted as `array_pattern_with_tail` - last_item = @builder.match_with_trailing_comma(val[1], val[2]) - result = [ *val[0], last_item ] - - result -end - -def _reduce_493(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_494(val, _values, result) - result = [ val[0], *val[2] ] - - result -end - -def _reduce_495(val, _values, result) - result = [ val[0], *val[2], val[4] ] - - result -end - -def _reduce_496(val, _values, result) - result = @builder.match_rest(val[0], val[1]) - - result -end - -def _reduce_497(val, _values, result) - result = @builder.match_rest(val[0]) - - result -end - -def _reduce_498(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_499(val, _values, result) - result = [ *val[0], val[2] ] - - result -end - -# reduce 500 omitted - -def _reduce_501(val, _values, result) - result = [ *val[0], *val[2] ] - - result -end - -def _reduce_502(val, _values, result) - result = val[0] - - result -end - -def _reduce_503(val, _values, result) - result = val[0] - - result -end - -def _reduce_504(val, _values, result) - result = val[0] - - result -end - -def _reduce_505(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_506(val, _values, result) - result = [ *val[0], val[2] ] - - result -end - -def _reduce_507(val, _values, result) - result = @builder.match_pair(*val[0], val[1]) - - result -end - -def _reduce_508(val, _values, result) - result = @builder.match_label(*val[0]) - - result -end - -def _reduce_509(val, _values, result) - check_kwarg_name(val[0]) - result = [:label, val[0]] - - result -end - -def _reduce_510(val, _values, result) - result = [:quoted, [val[0], val[1], val[2]]] - - result -end - -def _reduce_511(val, _values, result) - result = [ @builder.match_rest(val[0], val[1]) ] - - result -end - -def _reduce_512(val, _values, result) - result = [ @builder.match_rest(val[0], nil) ] - - result -end - -def _reduce_513(val, _values, result) - result = [ @builder.match_nil_pattern(val[0], val[1]) ] - - result -end - -# reduce 514 omitted - -# reduce 515 omitted - -# reduce 516 omitted - -def _reduce_517(val, _values, result) - result = @builder.range_inclusive(val[0], val[1], val[2]) - - result -end - -def _reduce_518(val, _values, result) - result = @builder.range_exclusive(val[0], val[1], val[2]) - - result -end - -def _reduce_519(val, _values, result) - result = @builder.range_inclusive(val[0], val[1], nil) - - result -end - -def _reduce_520(val, _values, result) - result = @builder.range_exclusive(val[0], val[1], nil) - - result -end - -# reduce 521 omitted - -# reduce 522 omitted - -# reduce 523 omitted - -def _reduce_524(val, _values, result) - result = @builder.range_inclusive(nil, val[0], val[1]) - - result -end - -def _reduce_525(val, _values, result) - result = @builder.range_exclusive(nil, val[0], val[1]) - - result -end - -# reduce 526 omitted - -# reduce 527 omitted - -# reduce 528 omitted - -# reduce 529 omitted - -# reduce 530 omitted - -# reduce 531 omitted - -# reduce 532 omitted - -# reduce 533 omitted - -def _reduce_534(val, _values, result) - result = @builder.accessible(val[0]) - - result -end - -# reduce 535 omitted - -def _reduce_536(val, _values, result) - result = @builder.match_var(val[0]) - - result -end - -def _reduce_537(val, _values, result) - name = val[1][0] - unless static_env.declared?(name) - diagnostic :error, :undefined_lvar, { :name => name }, val[1] - end - - lvar = @builder.accessible(@builder.ident(val[1])) - result = @builder.pin(val[0], lvar) - - result -end - -def _reduce_538(val, _values, result) - result = @builder.const_global(val[0], val[1]) - - result -end - -def _reduce_539(val, _values, result) - result = @builder.const_fetch(val[0], val[1], val[2]) - - result -end - -def _reduce_540(val, _values, result) - result = @builder.const(val[0]) - - result -end - -def _reduce_541(val, _values, result) - assoc_t, exc_var = val[2] - - if val[1] - exc_list = @builder.array(nil, val[1], nil) - end - - result = [ @builder.rescue_body(val[0], - exc_list, assoc_t, exc_var, - val[3], val[4]), - *val[5] ] - - result -end - -def _reduce_542(val, _values, result) - result = [] - - result -end - -def _reduce_543(val, _values, result) - result = [ val[0] ] - - result -end - -# reduce 544 omitted - -# reduce 545 omitted - -def _reduce_546(val, _values, result) - result = [ val[0], val[1] ] - - result -end - -# reduce 547 omitted - -def _reduce_548(val, _values, result) - result = [ val[0], val[1] ] - - result -end - -# reduce 549 omitted - -# reduce 550 omitted - -# reduce 551 omitted - -def _reduce_552(val, _values, result) - result = @builder.string_compose(nil, val[0], nil) - - result -end - -def _reduce_553(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_554(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_555(val, _values, result) - string = @builder.string_compose(val[0], val[1], val[2]) - result = @builder.dedent_string(string, @lexer.dedent_level) - - result -end - -def _reduce_556(val, _values, result) - string = @builder.string(val[0]) - result = @builder.dedent_string(string, @lexer.dedent_level) - - result -end - -def _reduce_557(val, _values, result) - result = @builder.character(val[0]) - - result -end - -def _reduce_558(val, _values, result) - string = @builder.xstring_compose(val[0], val[1], val[2]) - result = @builder.dedent_string(string, @lexer.dedent_level) - - result -end - -def _reduce_559(val, _values, result) - opts = @builder.regexp_options(val[3]) - result = @builder.regexp_compose(val[0], val[1], val[2], opts) - - result -end - -def _reduce_560(val, _values, result) - result = @builder.words_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_561(val, _values, result) - result = [] - - result -end - -def _reduce_562(val, _values, result) - result = val[0] << @builder.word(val[1]) - - result -end - -def _reduce_563(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_564(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_565(val, _values, result) - result = @builder.symbols_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_566(val, _values, result) - result = [] - - result -end - -def _reduce_567(val, _values, result) - result = val[0] << @builder.word(val[1]) - - result -end - -def _reduce_568(val, _values, result) - result = @builder.words_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_569(val, _values, result) - result = @builder.symbols_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_570(val, _values, result) - result = [] - - result -end - -def _reduce_571(val, _values, result) - result = val[0] << @builder.string_internal(val[1]) - - result -end - -def _reduce_572(val, _values, result) - result = [] - - result -end - -def _reduce_573(val, _values, result) - result = val[0] << @builder.symbol_internal(val[1]) - - result -end - -def _reduce_574(val, _values, result) - result = [] - - result -end - -def _reduce_575(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_576(val, _values, result) - result = [] - - result -end - -def _reduce_577(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_578(val, _values, result) - result = [] - - result -end - -def _reduce_579(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_580(val, _values, result) - result = @builder.string_internal(val[0]) - - result -end - -def _reduce_581(val, _values, result) - result = val[1] - - result -end - -def _reduce_582(val, _values, result) - @lexer.cmdarg.push(false) - @lexer.cond.push(false) - - result -end - -def _reduce_583(val, _values, result) - @lexer.cmdarg.pop - @lexer.cond.pop - - result = @builder.begin(val[0], val[2], val[3]) - - result -end - -def _reduce_584(val, _values, result) - result = @builder.gvar(val[0]) - - result -end - -def _reduce_585(val, _values, result) - result = @builder.ivar(val[0]) - - result -end - -def _reduce_586(val, _values, result) - result = @builder.cvar(val[0]) - - result -end - -# reduce 587 omitted - -# reduce 588 omitted - -# reduce 589 omitted - -def _reduce_590(val, _values, result) - @lexer.state = :expr_end - result = @builder.symbol(val[0]) - - result -end - -def _reduce_591(val, _values, result) - @lexer.state = :expr_end - result = @builder.symbol_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_592(val, _values, result) - result = val[0] - - result -end - -def _reduce_593(val, _values, result) - if @builder.respond_to? :negate - # AST builder interface compatibility - result = @builder.negate(val[0], val[1]) - else - result = @builder.unary_num(val[0], val[1]) - end - - result -end - -def _reduce_594(val, _values, result) - @lexer.state = :expr_end - result = @builder.integer(val[0]) - - result -end - -def _reduce_595(val, _values, result) - @lexer.state = :expr_end - result = @builder.float(val[0]) - - result -end - -def _reduce_596(val, _values, result) - @lexer.state = :expr_end - result = @builder.rational(val[0]) - - result -end - -def _reduce_597(val, _values, result) - @lexer.state = :expr_end - result = @builder.complex(val[0]) - - result -end - -def _reduce_598(val, _values, result) - result = @builder.ident(val[0]) - - result -end - -def _reduce_599(val, _values, result) - result = @builder.ivar(val[0]) - - result -end - -def _reduce_600(val, _values, result) - result = @builder.gvar(val[0]) - - result -end - -def _reduce_601(val, _values, result) - result = @builder.const(val[0]) - - result -end - -def _reduce_602(val, _values, result) - result = @builder.cvar(val[0]) - - result -end - -def _reduce_603(val, _values, result) - result = @builder.nil(val[0]) - - result -end - -def _reduce_604(val, _values, result) - result = @builder.self(val[0]) - - result -end - -def _reduce_605(val, _values, result) - result = @builder.true(val[0]) - - result -end - -def _reduce_606(val, _values, result) - result = @builder.false(val[0]) - - result -end - -def _reduce_607(val, _values, result) - result = @builder.__FILE__(val[0]) - - result -end - -def _reduce_608(val, _values, result) - result = @builder.__LINE__(val[0]) - - result -end - -def _reduce_609(val, _values, result) - result = @builder.__ENCODING__(val[0]) - - result -end - -def _reduce_610(val, _values, result) - if (node = val[0]) && node.type == :ident - name = node.children[0] - - if name =~ /\A_[1-9]\z/ && !static_env.declared?(name) && context.in_dynamic_block? - # definitely an implicit param - location = node.loc.expression - - if max_numparam_stack.has_ordinary_params? - diagnostic :error, :ordinary_param_defined, nil, [nil, location] - end - - raw_context = context.stack.dup - raw_max_numparam_stack = max_numparam_stack.stack.dup - - # ignore current block scope - raw_context.pop - raw_max_numparam_stack.pop - - raw_context.reverse_each do |outer_scope| - if outer_scope == :block || outer_scope == :lambda - outer_scope_has_numparams = raw_max_numparam_stack.pop > 0 - - if outer_scope_has_numparams - diagnostic :error, :numparam_used_in_outer_scope, nil, [nil, location] - else - # for now it's ok, but an outer scope can also be a block - # with numparams, so we need to continue - end - else - # found an outer scope that can't have numparams - # like def/class/etc - break - end - end - - static_env.declare(name) - max_numparam_stack.register(name[1].to_i) - end - end - - result = @builder.accessible(val[0]) - - result -end - -def _reduce_611(val, _values, result) - result = @builder.accessible(val[0]) - - result -end - -def _reduce_612(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_613(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_614(val, _values, result) - result = @builder.nth_ref(val[0]) - - result -end - -def _reduce_615(val, _values, result) - result = @builder.back_ref(val[0]) - - result -end - -def _reduce_616(val, _values, result) - @lexer.state = :expr_value - - result -end - -def _reduce_617(val, _values, result) - result = [ val[0], val[2] ] - - result -end - -def _reduce_618(val, _values, result) - result = nil - - result -end - -def _reduce_619(val, _values, result) - result = @builder.args(val[0], val[1], val[2]) - - @lexer.state = :expr_value - - result -end - -def _reduce_620(val, _values, result) - args = [ *val[1], @builder.forward_arg(val[3]) ] - result = @builder.args(val[0], args, val[4]) - - @static_env.declare_forward_args - - result -end - -def _reduce_621(val, _values, result) - result = @builder.forward_only_args(val[0], val[1], val[2]) - @static_env.declare_forward_args - - @lexer.state = :expr_value - - result -end - -# reduce 622 omitted - -def _reduce_623(val, _values, result) - result = @lexer.in_kwarg - @lexer.in_kwarg = true - - result -end - -def _reduce_624(val, _values, result) - @lexer.in_kwarg = val[0] - result = @builder.args(nil, val[1], nil) - - result -end - -def _reduce_625(val, _values, result) - result = val[0].concat(val[2]).concat(val[3]) - - result -end - -def _reduce_626(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_627(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_628(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_629(val, _values, result) - result = val[1] - - result -end - -def _reduce_630(val, _values, result) - result = [] - - result -end - -def _reduce_631(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_632(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[6]). - concat(val[7]) - - result -end - -def _reduce_633(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_634(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_635(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_636(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_637(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_638(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_639(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_640(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_641(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_642(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_643(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_644(val, _values, result) - result = val[0] - - result -end - -def _reduce_645(val, _values, result) - result = [] - - result -end - -def _reduce_646(val, _values, result) - result = val[0] - - result -end - -def _reduce_647(val, _values, result) - diagnostic :error, :argument_const, nil, val[0] - - result -end - -def _reduce_648(val, _values, result) - diagnostic :error, :argument_ivar, nil, val[0] - - result -end - -def _reduce_649(val, _values, result) - diagnostic :error, :argument_gvar, nil, val[0] - - result -end - -def _reduce_650(val, _values, result) - diagnostic :error, :argument_cvar, nil, val[0] - - result -end - -# reduce 651 omitted - -def _reduce_652(val, _values, result) - @static_env.declare val[0][0] - - @max_numparam_stack.has_ordinary_params! - - result = val[0] - - result -end - -def _reduce_653(val, _values, result) - @current_arg_stack.set(val[0][0]) - result = val[0] - - result -end - -def _reduce_654(val, _values, result) - @current_arg_stack.set(0) - result = @builder.arg(val[0]) - - result -end - -def _reduce_655(val, _values, result) - result = @builder.multi_lhs(val[0], val[1], val[2]) - - result -end - -def _reduce_656(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_657(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_658(val, _values, result) - check_kwarg_name(val[0]) - - @static_env.declare val[0][0] - - @max_numparam_stack.has_ordinary_params! - - @current_arg_stack.set(val[0][0]) - - result = val[0] - - result -end - -def _reduce_659(val, _values, result) - @current_arg_stack.set(nil) - result = @builder.kwoptarg(val[0], val[1]) - - result -end - -def _reduce_660(val, _values, result) - @current_arg_stack.set(nil) - result = @builder.kwarg(val[0]) - - result -end - -def _reduce_661(val, _values, result) - result = @builder.kwoptarg(val[0], val[1]) - - result -end - -def _reduce_662(val, _values, result) - result = @builder.kwarg(val[0]) - - result -end - -def _reduce_663(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_664(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_665(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_666(val, _values, result) - result = val[0] << val[2] - - result -end - -# reduce 667 omitted - -# reduce 668 omitted - -def _reduce_669(val, _values, result) - result = [ @builder.kwnilarg(val[0], val[1]) ] - - result -end - -def _reduce_670(val, _values, result) - @static_env.declare val[1][0] - - result = [ @builder.kwrestarg(val[0], val[1]) ] - - result -end - -def _reduce_671(val, _values, result) - result = [ @builder.kwrestarg(val[0]) ] - - result -end - -def _reduce_672(val, _values, result) - @current_arg_stack.set(0) - result = @builder.optarg(val[0], val[1], val[2]) - - result -end - -def _reduce_673(val, _values, result) - @current_arg_stack.set(0) - result = @builder.optarg(val[0], val[1], val[2]) - - result -end - -def _reduce_674(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_675(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_676(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_677(val, _values, result) - result = val[0] << val[2] - - result -end - -# reduce 678 omitted - -# reduce 679 omitted - -def _reduce_680(val, _values, result) - @static_env.declare val[1][0] - - result = [ @builder.restarg(val[0], val[1]) ] - - result -end - -def _reduce_681(val, _values, result) - result = [ @builder.restarg(val[0]) ] - - result -end - -# reduce 682 omitted - -# reduce 683 omitted - -def _reduce_684(val, _values, result) - @static_env.declare val[1][0] - - result = @builder.blockarg(val[0], val[1]) - - result -end - -def _reduce_685(val, _values, result) - result = [ val[1] ] - - result -end - -def _reduce_686(val, _values, result) - result = [] - - result -end - -# reduce 687 omitted - -def _reduce_688(val, _values, result) - result = val[1] - - result -end - -def _reduce_689(val, _values, result) - result = [] - - result -end - -# reduce 690 omitted - -def _reduce_691(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_692(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_693(val, _values, result) - result = @builder.pair(val[0], val[1], val[2]) - - result -end - -def _reduce_694(val, _values, result) - result = @builder.pair_keyword(val[0], val[1]) - - result -end - -def _reduce_695(val, _values, result) - result = @builder.pair_quoted(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_696(val, _values, result) - result = @builder.kwsplat(val[0], val[1]) - - result -end - -# reduce 697 omitted - -# reduce 698 omitted - -# reduce 699 omitted - -# reduce 700 omitted - -# reduce 701 omitted - -# reduce 702 omitted - -# reduce 703 omitted - -# reduce 704 omitted - -# reduce 705 omitted - -# reduce 706 omitted - -# reduce 707 omitted - -# reduce 708 omitted - -def _reduce_709(val, _values, result) - result = [:dot, val[0][1]] - - result -end - -def _reduce_710(val, _values, result) - result = [:anddot, val[0][1]] - - result -end - -# reduce 711 omitted - -# reduce 712 omitted - -# reduce 713 omitted - -# reduce 714 omitted - -def _reduce_715(val, _values, result) - result = val[1] - - result -end - -def _reduce_716(val, _values, result) - result = val[1] - - result -end - -def _reduce_717(val, _values, result) - result = val[1] - - result -end - -# reduce 718 omitted - -# reduce 719 omitted - -# reduce 720 omitted - -def _reduce_721(val, _values, result) - yyerrok - - result -end - -# reduce 722 omitted - -# reduce 723 omitted - -# reduce 724 omitted - -def _reduce_725(val, _values, result) - result = nil - - result -end - -def _reduce_none(val, _values, result) - val[0] -end - - end # class Ruby28 - end # module Parser diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ruby30.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ruby30.rb deleted file mode 100644 index 2a289459..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ruby30.rb +++ /dev/null @@ -1,12243 +0,0 @@ -# -*- encoding:utf-8; warn-indent:false; frozen_string_literal: true -*- -# -# DO NOT MODIFY!!!! -# This file is automatically generated by Racc 1.7.3 -# from Racc grammar file "ruby30.y". -# - -require 'racc/parser.rb' - - -require 'parser' - -module Parser - class Ruby30 < Parser::Base - - - def version - 30 - end - - def default_encoding - Encoding::UTF_8 - end - - def endless_method_name(name_t) - if !%w[=== == != <= >=].include?(name_t[0]) && name_t[0].end_with?('=') - diagnostic :error, :endless_setter, nil, name_t - end - end - - def local_push - @static_env.extend_static - @lexer.cmdarg.push(false) - @lexer.cond.push(false) - @max_numparam_stack.push(static: true) - end - - def local_pop - @static_env.unextend - @lexer.cmdarg.pop - @lexer.cond.pop - @max_numparam_stack.pop - end - - def try_declare_numparam(node) - name = node.children[0] - - if name =~ /\A_[1-9]\z/ && !static_env.declared?(name) && @context.in_dynamic_block? - # definitely an implicit param - location = node.loc.expression - - if max_numparam_stack.has_ordinary_params? - diagnostic :error, :ordinary_param_defined, nil, [nil, location] - end - - raw_max_numparam_stack = max_numparam_stack.stack.dup - - # ignore current block scope - raw_max_numparam_stack.pop - - raw_max_numparam_stack.reverse_each do |outer_scope| - if outer_scope[:static] - # found an outer scope that can't have numparams - # like def/class/etc - break - else - outer_scope_has_numparams = outer_scope[:value] > 0 - - if outer_scope_has_numparams - diagnostic :error, :numparam_used_in_outer_scope, nil, [nil, location] - else - # for now it's ok, but an outer scope can also be a block - # like proc { _1; proc { proc { proc { _2 }} }} - # with numparams, so we need to continue - end - end - end - - static_env.declare(name) - max_numparam_stack.register(name[1].to_i) - - true - else - false - end - end -##### State transition tables begin ### - -racc_action_table = [ - -599, 221, 222, 221, 222, 366, -112, -599, -599, -599, - 870, 617, -599, -599, -599, 227, -599, 301, 231, 1083, - 126, -716, 226, 617, -599, 125, -599, -599, -599, 221, - 222, 224, 788, 658, -113, -120, -599, -599, 617, -599, - -599, -599, -599, -599, 617, 617, 617, -112, -113, -716, - 789, -119, 920, 232, -120, 624, 660, 232, 3, 232, - 301, -728, 810, 810, -115, -117, -599, -599, -599, -599, - -599, -599, -599, -599, -599, -599, -599, -599, -599, -599, - 228, 296, -599, -599, -599, 122, -599, -599, 805, 232, - -599, 965, -114, -599, -599, 232, -599, 232, -599, 657, - -599, 1084, -599, -599, 300, -599, -599, -599, -599, -599, - -119, -599, -602, -599, -115, -103, 301, 221, 222, -602, - -602, -602, 659, 232, -602, -602, -602, -599, -602, 126, - -599, -599, -599, -599, 125, -599, -602, -599, -602, -602, - -602, 126, -599, -104, -111, -599, 125, 300, -602, -602, - -117, -602, -602, -602, -602, -602, 126, -116, -114, 954, - -110, 125, 126, 126, 126, -112, -113, 125, 125, 125, - -112, -113, -120, -106, -108, -116, -118, -120, -602, -602, - -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, - -602, -602, 126, -118, -602, -602, -602, 125, -602, -602, - 964, -105, -602, 300, 126, -602, -602, -716, -602, 125, - -602, 126, -602, 645, -602, -602, 125, -602, -602, -602, - -602, -602, -314, -602, 232, -602, 870, -613, -119, -314, - -314, -314, -115, -119, -703, -314, -314, -115, -314, -602, - -703, -704, -602, -602, -602, -602, -314, -602, 227, -602, - 301, 366, 135, 645, -602, 294, 870, -602, -314, -314, - -106, -314, -314, -314, -314, -314, 104, 105, -117, 920, - -704, 624, -501, -117, -108, -116, -114, 647, 646, -614, - -116, -114, 104, 105, -107, -109, -112, 836, -314, -314, - -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, - -314, -314, 1124, 227, -314, -314, -314, -728, 684, -314, - 294, -118, -314, 228, 296, -314, -118, 647, 646, 643, - -314, 218, -314, 645, -314, -314, -106, -314, -314, -314, - -314, -314, 479, -314, -707, -314, 1078, 300, -113, 229, - -108, -707, -707, -707, 106, 107, 126, -707, -707, -314, - -707, 125, -314, -314, 1077, -109, 219, -314, -707, -707, - 106, 107, -105, 555, -314, 220, -106, -118, 228, -106, - -707, -707, 865, -707, -707, -707, -707, -707, -98, -599, - -108, -106, 609, -108, -107, 608, -599, 647, 646, 645, - -84, -120, 866, 645, 126, -108, 223, 838, -120, 125, - -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, - -707, -707, -707, -707, 290, 986, -707, -707, -707, -349, - 685, -707, -119, 351, -707, 590, -349, -707, -105, 679, - 645, -115, -707, 680, -707, -349, -707, -707, 645, -707, - -707, -707, -707, -707, -599, -707, -707, -707, 630, -703, - -107, -117, 631, 647, 646, 643, 645, 647, 646, 643, - 229, -707, 645, 591, -707, -707, -700, -107, -105, -707, - 745, -105, 645, -707, 1137, 1004, -707, 221, 222, -116, - -707, -707, -707, -105, -349, -707, -707, -707, -115, -707, - -107, 126, -117, -107, 647, 646, 125, -707, -707, -707, - -707, -707, 647, 646, 648, -107, -701, -111, 352, -707, - -707, 1137, -707, -707, -707, -707, -707, 232, -599, -120, - 647, 646, 650, 645, 876, -599, 647, 646, 652, 872, - -700, 974, 609, 873, -599, 611, 647, 646, 656, -707, - -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, - -707, -707, -707, -700, 852, -707, -707, -707, -602, 867, - -707, 221, 222, -707, 630, -602, -707, -707, 895, -707, - -701, -707, 429, -707, -602, -707, -707, 478, -707, -707, - -707, -707, -707, -599, -707, -707, -707, 647, 646, 661, - -114, 227, -602, -701, -609, -608, 271, 272, 476, -602, - -707, -609, -608, -707, -707, -707, -707, 477, -707, -610, - -707, -613, -314, -114, 480, -707, -610, -614, -116, -314, - -314, -314, 481, -602, -314, -314, -314, -607, -314, 890, - 891, 231, 270, 269, -607, -604, -314, 513, -314, -314, - -314, 426, -604, 598, 597, 525, 428, 427, -314, -314, - 555, -314, -314, -314, -314, -314, 228, -602, -103, -609, - -608, -605, -606, 630, -104, 949, 920, 895, -605, -606, - -112, 527, 609, 529, -610, 611, -113, 135, -314, -314, - -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, - -314, -314, -607, 986, -314, -314, -314, -110, 868, -314, - -604, 679, -314, 590, 609, -314, -314, 611, -314, -119, - -314, -83, -314, 232, -314, -314, 1174, -314, -314, -314, - -314, -314, -314, -314, 232, -314, -605, -606, 90, -314, - -314, -314, 1122, 1123, 540, -314, -314, 541, -314, -314, - 91, 591, -314, -314, -314, -314, -314, -314, -106, -314, - 92, 949, 920, 1004, -314, 680, 548, -118, -314, -314, - -115, -314, -314, -314, -314, -314, 305, 232, 366, 366, - 582, -611, 579, 578, 577, 587, 580, 296, -611, 852, - 582, 552, 579, 578, 577, 590, 580, -611, -314, -314, - -314, -314, -314, -314, -314, -314, -314, -314, -314, -314, - -314, -314, -108, 558, -314, -314, -314, 585, 684, -314, - 254, 562, -314, -620, -117, -314, 595, 594, 598, 597, - -314, 602, -314, 591, -314, -314, -105, -314, -314, -314, - -314, -314, 232, -314, -707, -314, -611, 612, -114, 613, - 529, -707, -707, -707, 624, 418, 628, -707, -707, -314, - -707, 629, -314, -314, 637, -314, 662, -314, -707, -707, - 665, 666, -287, 576, -314, 668, 669, -118, 673, 232, - -707, -707, 677, -707, -707, -707, -707, -707, 678, 296, - 689, 254, 582, -612, 579, 578, 577, 587, 580, 582, - -612, 579, 578, 577, 254, 580, 254, 590, 254, -612, - -707, -707, -707, -707, -707, -707, -707, -707, -707, -707, - -707, -707, -707, -707, 232, 733, -707, -707, -707, 585, - 685, -707, 232, 232, -707, 232, 781, -707, 595, 594, - 598, 597, -707, -98, -707, 591, -707, -707, 748, -707, - -707, -707, -707, -707, 587, -707, -707, -707, -612, 232, - 227, 561, 759, 765, 590, -305, 227, 547, 766, 232, - 768, -707, -305, 557, -707, -707, 545, -707, 232, -707, - 227, -305, 477, 771, 774, 576, -707, 627, 775, -116, - 7, 81, 82, 83, 11, 65, 625, 598, 597, 71, - 72, 777, 591, 779, 75, -707, 73, 74, 76, 33, - 34, 79, 80, 129, 130, 131, 132, 133, 84, 31, - 30, 114, 113, 115, 116, 228, 790, 21, 791, 793, - -305, 228, 795, 10, 51, 9, 12, 118, 117, 119, - 108, 64, 110, 109, 111, 228, 112, 120, 121, 227, - 104, 105, 47, 48, 46, 227, 633, -707, 796, -315, - 232, 798, 672, 801, -707, 635, -315, 806, 807, -703, - 811, 670, 835, -707, 43, -315, 839, 36, 840, -288, - 66, 67, -315, 853, 68, 513, 38, 513, 232, -315, - 50, 870, -707, 871, 254, 894, 830, 831, -315, 22, - 832, 120, 121, 870, 102, 90, 93, 94, 897, 95, - 97, 96, 98, 899, 228, 290, 905, 91, 101, 907, - 228, 909, -707, 527, -315, 85, 251, 92, 106, 107, - 253, 252, 44, 45, 323, 81, 82, 83, 11, 65, - 529, 759, 232, 71, 72, 296, 296, -315, 75, 759, - 73, 74, 76, 33, 34, 79, 80, 246, 254, 920, - 941, 942, 84, 31, 30, 114, 113, 115, 116, 232, - 1133, 21, 579, 578, 577, 920, 580, 10, 51, 325, - 12, 118, 117, 119, 108, 64, 110, 109, 111, 951, - 112, 120, 121, 952, 104, 105, 47, 48, 46, 254, - 258, 259, 260, 261, 271, 272, 266, 267, 262, 263, - -314, 247, 248, 232, 232, 264, 265, -314, 43, 962, - 245, 327, -704, 232, 66, 67, -314, -289, 68, 232, - 38, 251, 973, 257, 50, 253, 252, 719, 249, 250, - 270, 269, 255, 22, 256, 232, 232, 1000, 102, 90, - 93, 94, 227, 95, 97, 96, 98, 1001, 1002, 1152, - 1005, 91, 101, 907, 268, 1011, 232, 759, 635, 85, - 1029, 92, 106, 107, -287, -314, 44, 45, 7, 81, - 82, 83, 11, 65, 1033, 232, 1036, 71, 72, 1038, - 774, 789, 75, 1041, 73, 74, 76, 33, 34, 79, - 80, 129, 130, 131, 132, 133, 84, 31, 30, 114, - 113, 115, 116, 1043, 1043, 21, 232, 228, 1051, 1053, - 674, 10, 51, 9, 12, 118, 117, 119, 108, 64, - 110, 109, 111, 1062, 112, 120, 121, 1063, 104, 105, - 47, 48, 46, 254, 258, 259, 260, 261, 271, 272, - 266, 267, 262, 263, -314, 247, 248, 1068, 1069, 264, - 265, -314, 43, 1070, -290, 36, -704, 232, 66, 67, - -314, 232, 68, 232, 38, 251, 1074, 257, 50, 253, - 252, 232, 249, 250, 270, 269, 255, 22, 256, 232, - 232, 870, 102, 90, 93, 94, 227, 95, 97, 96, - 98, 1082, 232, 1157, 1091, 91, 101, 774, 268, 1094, - -260, 1097, 1155, 85, 1099, 92, 106, 107, 1101, -314, - 44, 45, 323, 81, 82, 83, 11, 65, 232, 1103, - 1118, 71, 72, 1119, 1128, 870, 75, 1138, 73, 74, - 76, 33, 34, 79, 80, 129, 130, 131, 132, 133, - 84, 31, 30, 114, 113, 115, 116, 1140, 1150, 21, - 1153, 228, 1158, 1159, 674, 10, 51, 325, 12, 118, - 117, 119, 108, 64, 110, 109, 111, 1043, 112, 120, - 121, 1043, 104, 105, 47, 48, 46, 254, 258, 259, - 260, 261, 271, 272, 266, 267, 262, 263, 227, 247, - 248, 1043, 1171, 264, 265, 1152, 43, 1172, 1176, 36, - 587, 774, 66, 67, 635, 1180, 68, 1182, 38, 251, - 590, 257, 50, 253, 252, 1184, 249, 250, 270, 269, - 255, 22, 256, 1186, 1186, 765, 102, 90, 93, 94, - 1119, 95, 97, 96, 98, 1200, 1176, -704, -703, 91, - 101, 232, 268, 598, 597, 1043, 1212, 85, 591, 92, - 106, 107, 1186, 228, 44, 45, 323, 81, 82, 83, - 11, 65, 1186, 1186, 1176, 71, 72, 1186, nil, nil, - 75, nil, 73, 74, 76, 33, 34, 79, 80, 129, - 130, 131, 132, 133, 84, 31, 30, 114, 113, 115, - 116, nil, nil, 21, nil, nil, nil, nil, 917, 10, - 51, 325, 12, 118, 117, 119, 108, 64, 110, 109, - 111, nil, 112, 120, 121, nil, 104, 105, 47, 48, - 46, 254, 258, 259, 260, 261, 271, 272, 266, 267, - 262, 263, nil, 247, 248, nil, nil, 264, 265, nil, - 43, nil, nil, 36, nil, nil, 66, 67, nil, nil, - 68, nil, 38, 251, nil, 257, 50, 253, 252, nil, - 249, 250, 270, 269, 255, 22, 256, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, 268, nil, nil, nil, - nil, 85, nil, 92, 106, 107, nil, nil, 44, 45, - 323, 81, 82, 83, 11, 65, nil, nil, nil, 71, - 72, nil, nil, nil, 75, nil, 73, 74, 76, 33, - 34, 79, 80, nil, nil, nil, nil, nil, 84, 31, - 30, 114, 113, 115, 116, nil, nil, 21, nil, nil, - nil, nil, 945, 10, 51, 325, 12, 118, 117, 119, - 108, 64, 110, 109, 111, nil, 112, 120, 121, nil, - 104, 105, 47, 48, 46, 254, 258, 259, 260, 261, - 271, 272, 266, 267, 262, 263, nil, 247, 248, nil, - nil, 264, 265, nil, 43, nil, nil, 327, nil, nil, - 66, 67, nil, nil, 68, nil, 38, 251, nil, 257, - 50, 253, 252, nil, 249, 250, 270, 269, 255, 22, - 256, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - 268, nil, nil, nil, nil, 85, nil, 92, 106, 107, - nil, nil, 44, 45, 323, 81, 82, 83, 11, 65, - nil, nil, nil, 71, 72, nil, nil, nil, 75, nil, - 73, 74, 76, 33, 34, 79, 80, nil, nil, nil, - nil, nil, 84, 31, 30, 114, 113, 115, 116, nil, - 1133, 21, 579, 578, 577, nil, 580, 10, 51, 325, - 12, 118, 117, 119, 108, 64, 110, 109, 111, nil, - 112, 120, 121, nil, 104, 105, 47, 48, 46, 254, - 258, 259, 260, 261, 271, 272, 266, 267, 262, 263, - nil, 247, 248, nil, nil, 264, 265, nil, 43, nil, - nil, 327, nil, nil, 66, 67, nil, nil, 68, nil, - 38, 251, nil, 257, 50, 253, 252, nil, 249, 250, - 270, 269, 255, 22, 256, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, 268, nil, nil, nil, nil, 85, - nil, 92, 106, 107, nil, nil, 44, 45, 323, 81, - 82, 83, 11, 65, nil, nil, nil, 71, 72, nil, - nil, nil, 75, nil, 73, 74, 76, 33, 34, 79, - 80, nil, nil, nil, nil, nil, 84, 31, 30, 114, - 113, 115, 116, nil, nil, 21, nil, nil, nil, nil, - nil, 10, 51, 325, 12, 118, 117, 119, 108, 64, - 110, 109, 111, nil, 112, 120, 121, nil, 104, 105, - 47, 48, 46, 254, 258, 259, 260, 261, 271, 272, - 266, 267, 262, 263, nil, 247, 248, nil, nil, 264, - 265, nil, 43, nil, nil, 36, nil, nil, 66, 67, - nil, nil, 68, nil, 38, 251, nil, 257, 50, 253, - 252, nil, 249, 250, 270, 269, 255, 22, 256, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, 232, 268, nil, - nil, nil, nil, 85, nil, 92, 106, 107, nil, nil, - 44, 45, 323, 81, 82, 83, 11, 65, nil, nil, - nil, 71, 72, nil, nil, nil, 75, nil, 73, 74, - 76, 33, 34, 79, 80, nil, nil, nil, nil, nil, - 84, 31, 30, 114, 113, 115, 116, nil, nil, 21, - nil, nil, nil, nil, nil, 10, 51, 325, 12, 118, - 117, 119, 108, 64, 110, 109, 111, nil, 112, 120, - 121, nil, 104, 105, 47, 48, 46, 254, 258, 259, - 260, 261, 271, 272, 266, 267, 262, 263, nil, 247, - 248, nil, nil, 264, 265, nil, 43, nil, nil, 36, - nil, nil, 66, 67, nil, nil, 68, nil, 38, 251, - nil, 257, 50, 253, 252, nil, 249, 250, 270, 269, - 255, 22, 256, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, 268, nil, nil, nil, nil, 85, nil, 92, - 106, 107, nil, nil, 44, 45, 323, 81, 82, 83, - 11, 65, nil, nil, nil, 71, 72, nil, nil, nil, - 75, nil, 73, 74, 76, 33, 34, 79, 80, nil, - nil, nil, nil, nil, 84, 31, 30, 114, 113, 115, - 116, nil, nil, 21, nil, nil, nil, nil, nil, 10, - 51, 325, 12, 118, 117, 119, 108, 64, 110, 109, - 111, nil, 112, 120, 121, nil, 104, 105, 47, 48, - 46, 254, 258, 259, 260, 261, 271, 272, 266, 267, - 262, 263, nil, 247, 248, nil, nil, 264, 265, nil, - 43, nil, nil, 36, nil, nil, 66, 67, nil, nil, - 68, nil, 38, 251, nil, 257, 50, 253, 252, nil, - 249, 250, 270, 269, 255, 22, 256, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, 268, nil, nil, nil, - nil, 85, nil, 92, 106, 107, nil, nil, 44, 45, - 323, 81, 82, 83, 11, 65, nil, nil, nil, 71, - 72, nil, nil, nil, 75, nil, 73, 74, 76, 33, - 34, 79, 80, nil, nil, nil, nil, nil, 84, 31, - 30, 114, 113, 115, 116, nil, nil, 21, nil, nil, - nil, nil, nil, 10, 51, 325, 12, 118, 117, 119, - 108, 64, 110, 109, 111, nil, 112, 120, 121, nil, - 104, 105, 47, 48, 46, 254, 258, 259, 260, 261, - 271, 272, 266, 267, 262, 263, nil, 247, 248, nil, - nil, 264, 265, nil, 43, nil, nil, 36, nil, nil, - 66, 67, nil, nil, 68, nil, 38, 251, nil, 257, - 50, 253, 252, nil, 249, 250, 270, 269, 255, 22, - 256, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - 268, nil, nil, nil, nil, 85, nil, 92, 106, 107, - nil, nil, 44, 45, 323, 81, 82, 83, 11, 65, - nil, nil, nil, 71, 72, nil, nil, nil, 75, nil, - 73, 74, 76, 33, 34, 79, 80, nil, nil, nil, - nil, nil, 84, 31, 30, 114, 113, 115, 116, nil, - nil, 21, nil, nil, nil, nil, nil, 10, 51, 325, - 12, 118, 117, 119, 108, 64, 110, 109, 111, nil, - 112, 120, 121, nil, 104, 105, 47, 48, 46, 254, - 258, 259, 260, 261, 271, 272, 266, 267, 262, 263, - nil, 247, 248, nil, nil, 264, 265, nil, 43, nil, - nil, 36, nil, nil, 66, 67, nil, nil, 68, nil, - 38, 251, nil, 257, 50, 253, 252, nil, 249, 250, - 270, 269, 255, 22, 256, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, 268, nil, nil, nil, nil, 85, - nil, 92, 106, 107, nil, nil, 44, 45, 323, 81, - 82, 83, 11, 65, nil, nil, nil, 71, 72, nil, - nil, nil, 75, nil, 73, 74, 76, 33, 34, 79, - 80, nil, nil, nil, nil, nil, 84, 31, 30, 114, - 113, 115, 116, nil, nil, 21, nil, nil, nil, nil, - nil, 10, 51, 325, 12, 118, 117, 119, 108, 64, - 110, 109, 111, nil, 112, 120, 121, nil, 104, 105, - 47, 48, 46, 254, 258, 259, 260, 261, 271, 272, - 266, 267, 262, 263, nil, 247, 248, nil, nil, 264, - 265, nil, 43, nil, nil, 36, nil, nil, 66, 67, - nil, nil, 68, nil, 38, 251, nil, 257, 50, 253, - 252, nil, 249, 250, 270, 269, 255, 22, 256, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, 268, nil, - nil, nil, nil, 85, nil, 92, 106, 107, nil, nil, - 44, 45, 323, 81, 82, 83, 11, 65, nil, nil, - nil, 71, 72, nil, nil, nil, 75, nil, 73, 74, - 76, 33, 34, 79, 80, nil, nil, nil, nil, nil, - 84, 31, 30, 114, 113, 115, 116, nil, 582, 21, - 579, 578, 577, nil, 580, 10, 51, 325, 12, 118, - 117, 119, 108, 64, 110, 109, 111, nil, 112, 120, - 121, nil, 104, 105, 47, 48, 46, 582, nil, 579, - 578, 577, nil, 580, nil, 781, nil, nil, 254, nil, - nil, nil, nil, nil, 785, nil, 43, nil, nil, 36, - nil, nil, 66, 67, nil, nil, 68, 582, 38, 579, - 578, 577, 50, 580, 781, nil, nil, nil, nil, nil, - 251, 22, nil, 785, 253, 252, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 781, nil, nil, 85, nil, 92, - 106, 107, nil, 785, 44, 45, 323, 81, 82, 83, - 11, 65, nil, nil, nil, 71, 72, nil, nil, nil, - 75, nil, 73, 74, 76, 33, 34, 79, 80, nil, - nil, nil, nil, nil, 84, 31, 30, 114, 113, 115, - 116, nil, nil, 21, nil, nil, nil, nil, nil, 10, - 51, 325, 12, 118, 117, 119, 108, 64, 110, 109, - 111, nil, 112, 120, 121, nil, 104, 105, 47, 48, - 46, 254, 258, 259, 260, 261, 271, 272, 266, 267, - 262, 263, nil, -729, -729, nil, nil, 264, 265, nil, - 43, nil, nil, 36, nil, nil, 66, 67, nil, 254, - 68, nil, 38, 251, nil, 257, 50, 253, 252, nil, - 249, 250, 270, 269, 255, 22, 256, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, 251, nil, 91, 101, 253, 252, nil, 249, 250, - nil, 85, nil, 92, 106, 107, nil, nil, 44, 45, - 323, 81, 82, 83, 11, 65, nil, nil, nil, 71, - 72, nil, nil, nil, 75, nil, 73, 74, 76, 33, - 34, 79, 80, nil, nil, nil, nil, nil, 84, 31, - 30, 114, 113, 115, 116, nil, nil, 21, nil, nil, - nil, nil, nil, 10, 51, 325, 12, 118, 117, 119, - 108, 64, 110, 109, 111, nil, 112, 120, 121, nil, - 104, 105, 47, 48, 46, 254, 258, 259, 260, 261, - 271, 272, 266, 267, 262, 263, nil, -729, -729, nil, - nil, 264, 265, nil, 43, nil, nil, 36, nil, nil, - 66, 67, nil, 254, 68, nil, 38, 251, nil, 257, - 50, 253, 252, nil, 249, 250, 270, 269, 255, 22, - 256, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, 251, nil, 91, 101, 253, - 252, nil, 249, 250, nil, 85, nil, 92, 106, 107, - nil, nil, 44, 45, 323, 81, 82, 83, 11, 65, - nil, nil, nil, 71, 72, nil, nil, nil, 75, nil, - 73, 74, 76, 33, 34, 79, 80, nil, nil, nil, - nil, nil, 84, 31, 30, 114, 113, 115, 116, nil, - nil, 21, nil, nil, nil, nil, nil, 10, 51, 325, - 12, 118, 117, 119, 108, 64, 110, 109, 111, nil, - 112, 120, 121, nil, 104, 105, 47, 48, 46, 254, - 258, 259, 260, 261, 271, 272, 266, 267, 262, 263, - nil, -729, -729, nil, nil, 264, 265, nil, 43, nil, - nil, 36, nil, nil, 66, 67, nil, nil, 68, nil, - 38, 251, nil, 257, 50, 253, 252, nil, 249, 250, - 270, 269, 255, 22, 256, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, 582, nil, 579, 578, 577, 85, - 580, 92, 106, 107, nil, nil, 44, 45, 323, 81, - 82, 83, 11, 65, nil, nil, nil, 71, 72, nil, - nil, nil, 75, nil, 73, 74, 76, 33, 34, 79, - 80, 781, nil, nil, nil, nil, 84, 31, 30, 114, - 113, 115, 116, nil, nil, 21, nil, nil, nil, nil, - nil, 10, 51, 325, 12, 118, 117, 119, 108, 64, - 110, 109, 111, nil, 112, 120, 121, nil, 104, 105, - 47, 48, 46, 254, 258, 259, 260, 261, 271, 272, - 266, 267, 262, 263, nil, -729, -729, nil, nil, 264, - 265, nil, 43, nil, nil, 36, nil, nil, 66, 67, - nil, nil, 68, nil, 38, 251, nil, 257, 50, 253, - 252, nil, 249, 250, 270, 269, 255, 22, 256, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, 582, nil, - 579, 578, 577, 85, 580, 92, 106, 107, nil, nil, - 44, 45, 323, 81, 82, 83, 11, 65, nil, nil, - nil, 71, 72, nil, nil, nil, 75, nil, 73, 74, - 76, 33, 34, 79, 80, 781, nil, nil, nil, nil, - 84, 31, 30, 114, 113, 115, 116, nil, nil, 21, - nil, nil, nil, nil, nil, 10, 51, 325, 12, 118, - 117, 119, 108, 64, 110, 109, 111, nil, 112, 120, - 121, nil, 104, 105, 47, 48, 46, 254, -729, -729, - -729, -729, 271, 272, nil, nil, -729, -729, nil, nil, - nil, nil, nil, 264, 265, nil, 43, nil, nil, 36, - nil, nil, 66, 67, nil, nil, 68, nil, 38, 251, - nil, 257, 50, 253, 252, nil, 249, 250, 270, 269, - 255, 22, 256, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, nil, nil, nil, 85, nil, 92, - 106, 107, nil, nil, 44, 45, 323, 81, 82, 83, - 11, 65, nil, nil, nil, 71, 72, nil, nil, nil, - 75, nil, 73, 74, 76, 33, 34, 79, 80, nil, - nil, nil, nil, nil, 84, 31, 30, 114, 113, 115, - 116, nil, nil, 21, nil, nil, nil, nil, nil, 10, - 51, 325, 12, 118, 117, 119, 108, 64, 110, 109, - 111, nil, 112, 120, 121, nil, 104, 105, 47, 48, - 46, 254, -729, -729, -729, -729, 271, 272, nil, nil, - -729, -729, nil, nil, nil, nil, nil, 264, 265, nil, - 43, nil, nil, 36, nil, nil, 66, 67, nil, nil, - 68, nil, 38, 251, nil, 257, 50, 253, 252, nil, - 249, 250, 270, 269, 255, 22, 256, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, nil, nil, - nil, 85, nil, 92, 106, 107, nil, nil, 44, 45, - 323, 81, 82, 83, 11, 65, nil, nil, nil, 71, - 72, nil, nil, nil, 75, nil, 73, 74, 76, 33, - 34, 79, 80, nil, nil, nil, nil, nil, 84, 31, - 30, 114, 113, 115, 116, nil, nil, 21, nil, nil, - nil, nil, nil, 10, 51, 325, 12, 118, 117, 119, - 108, 64, 110, 109, 111, nil, 112, 120, 121, nil, - 104, 105, 47, 48, 46, 254, -729, -729, -729, -729, - 271, 272, nil, nil, -729, -729, nil, nil, nil, nil, - nil, 264, 265, nil, 43, nil, nil, 36, nil, nil, - 66, 67, nil, nil, 68, nil, 38, 251, nil, 257, - 50, 253, 252, nil, 249, 250, 270, 269, 255, 22, - 256, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - nil, nil, nil, nil, nil, 85, nil, 92, 106, 107, - nil, nil, 44, 45, 323, 81, 82, 83, 11, 65, - nil, nil, nil, 71, 72, nil, nil, nil, 75, nil, - 73, 74, 76, 33, 34, 79, 80, nil, nil, nil, - nil, nil, 84, 31, 30, 114, 113, 115, 116, nil, - nil, 21, nil, nil, nil, nil, nil, 10, 51, 325, - 12, 118, 117, 119, 108, 64, 110, 109, 111, nil, - 112, 120, 121, nil, 104, 105, 47, 48, 46, 254, - -729, -729, -729, -729, 271, 272, nil, nil, -729, -729, - nil, nil, nil, nil, nil, 264, 265, nil, 43, nil, - nil, 36, nil, nil, 66, 67, nil, nil, 68, nil, - 38, 251, nil, 257, 50, 253, 252, nil, 249, 250, - 270, 269, 255, 22, 256, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, nil, nil, nil, 85, - nil, 92, 106, 107, nil, nil, 44, 45, 323, 81, - 82, 83, 11, 65, nil, nil, nil, 71, 72, nil, - nil, nil, 75, nil, 73, 74, 76, 33, 34, 79, - 80, nil, nil, nil, nil, nil, 84, 31, 30, 114, - 113, 115, 116, nil, nil, 21, nil, nil, nil, nil, - nil, 10, 51, 325, 12, 118, 117, 119, 108, 64, - 110, 109, 111, nil, 112, 120, 121, nil, 104, 105, - 47, 48, 46, 254, -729, -729, -729, -729, 271, 272, - nil, nil, -729, -729, nil, nil, nil, nil, nil, 264, - 265, nil, 43, nil, nil, 36, nil, nil, 66, 67, - nil, nil, 68, nil, 38, 251, nil, 257, 50, 253, - 252, nil, 249, 250, 270, 269, 255, 22, 256, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - nil, nil, nil, 85, nil, 92, 106, 107, nil, nil, - 44, 45, 323, 81, 82, 83, 11, 65, nil, nil, - nil, 71, 72, nil, nil, nil, 75, nil, 73, 74, - 76, 33, 34, 79, 80, nil, nil, nil, nil, nil, - 84, 31, 30, 114, 113, 115, 116, nil, nil, 21, - nil, nil, nil, nil, nil, 10, 51, 325, 12, 118, - 117, 119, 108, 64, 110, 109, 111, nil, 112, 120, - 121, nil, 104, 105, 47, 48, 46, 254, -729, -729, - -729, -729, 271, 272, nil, nil, -729, -729, nil, nil, - nil, nil, nil, 264, 265, nil, 43, nil, nil, 36, - nil, nil, 66, 67, nil, nil, 68, nil, 38, 251, - nil, 257, 50, 253, 252, nil, 249, 250, 270, 269, - 255, 22, 256, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, nil, nil, nil, 85, nil, 92, - 106, 107, nil, nil, 44, 45, 323, 81, 82, 83, - 11, 65, nil, nil, nil, 71, 72, nil, nil, nil, - 75, nil, 73, 74, 76, 33, 34, 79, 80, nil, - nil, nil, nil, nil, 84, 31, 30, 114, 113, 115, - 116, nil, nil, 21, nil, nil, nil, nil, nil, 10, - 51, 325, 12, 118, 117, 119, 108, 64, 110, 109, - 111, nil, 112, 120, 121, nil, 104, 105, 47, 48, - 46, 254, 258, 259, 260, 261, 271, 272, nil, nil, - 262, 263, nil, nil, nil, nil, nil, 264, 265, nil, - 43, nil, nil, 36, nil, nil, 66, 67, nil, nil, - 68, nil, 38, 251, nil, 257, 50, 253, 252, nil, - 249, 250, 270, 269, 255, 22, 256, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, nil, nil, - nil, 85, nil, 92, 106, 107, nil, nil, 44, 45, - 323, 81, 82, 83, 11, 65, nil, nil, nil, 71, - 72, nil, nil, nil, 75, nil, 73, 74, 76, 33, - 34, 79, 80, nil, nil, nil, nil, nil, 84, 31, - 30, 114, 113, 115, 116, nil, nil, 21, nil, nil, - nil, nil, nil, 10, 51, 325, 12, 118, 117, 119, - 108, 64, 110, 109, 111, nil, 112, 120, 121, nil, - 104, 105, 47, 48, 46, 254, 258, 259, 260, 261, - 271, 272, 266, nil, 262, 263, nil, nil, nil, nil, - nil, 264, 265, nil, 43, nil, nil, 36, nil, nil, - 66, 67, nil, nil, 68, nil, 38, 251, nil, 257, - 50, 253, 252, nil, 249, 250, 270, 269, 255, 22, - 256, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - nil, nil, nil, nil, nil, 85, nil, 92, 106, 107, - nil, nil, 44, 45, 323, 81, 82, 83, 11, 65, - nil, nil, nil, 71, 72, nil, nil, nil, 75, nil, - 73, 74, 76, 33, 34, 79, 80, nil, nil, nil, - nil, nil, 84, 31, 30, 114, 113, 115, 116, nil, - nil, 21, nil, nil, nil, nil, nil, 10, 51, 325, - 12, 118, 117, 119, 108, 64, 110, 109, 111, nil, - 112, 120, 121, nil, 104, 105, 47, 48, 46, 254, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 264, 265, nil, 43, nil, - nil, 36, nil, nil, 66, 67, nil, nil, 68, nil, - 38, 251, nil, 257, 50, 253, 252, nil, 249, 250, - nil, nil, 255, 22, 256, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, nil, nil, nil, 85, - nil, 92, 106, 107, nil, nil, 44, 45, 323, 81, - 82, 83, 11, 65, nil, nil, nil, 71, 72, nil, - nil, nil, 75, nil, 73, 74, 76, 33, 34, 79, - 80, nil, nil, nil, nil, nil, 84, 31, 30, 114, - 113, 115, 116, nil, nil, 21, nil, nil, nil, nil, - nil, 10, 51, 325, 12, 118, 117, 119, 108, 64, - 110, 109, 111, nil, 112, 120, 121, nil, 104, 105, - 47, 48, 46, 254, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 264, - 265, nil, 43, nil, nil, 36, nil, nil, 66, 67, - nil, nil, 68, nil, 38, 251, nil, 257, 50, 253, - 252, nil, 249, 250, nil, nil, 255, 22, 256, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - nil, nil, nil, 85, nil, 92, 106, 107, nil, nil, - 44, 45, 323, 81, 82, 83, 11, 65, nil, nil, - nil, 71, 72, nil, nil, nil, 75, nil, 73, 74, - 76, 33, 34, 79, 80, nil, nil, nil, nil, nil, - 84, 31, 30, 114, 113, 115, 116, nil, nil, 21, - nil, nil, nil, nil, nil, 10, 51, 325, 12, 118, - 117, 119, 108, 64, 110, 109, 111, nil, 112, 120, - 121, nil, 104, 105, 47, 48, 46, 254, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 264, 265, nil, 43, nil, nil, 36, - nil, nil, 66, 67, nil, nil, 68, nil, 38, 251, - nil, 257, 50, 253, 252, nil, 249, 250, nil, nil, - nil, 22, nil, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, nil, nil, nil, 85, nil, 92, - 106, 107, nil, nil, 44, 45, 81, 82, 83, 11, - 65, nil, nil, nil, 71, 72, nil, nil, nil, 75, - nil, 73, 74, 76, 33, 34, 79, 80, nil, nil, - nil, nil, nil, 84, 31, 30, 114, 113, 115, 116, - nil, nil, 21, nil, nil, nil, nil, nil, 10, 51, - 9, 12, 118, 117, 119, 108, 64, 110, 109, 111, - nil, 112, 120, 121, nil, 104, 105, 47, 48, 46, - 254, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 264, 265, nil, 43, - nil, nil, 36, nil, nil, 66, 67, nil, nil, 68, - nil, 38, 251, nil, 257, 50, 253, 252, nil, 249, - 250, nil, nil, nil, 22, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, 81, 82, 83, - 85, 65, 92, 106, 107, 71, 72, 44, 45, nil, - 75, nil, 73, 74, 76, 33, 34, 79, 80, nil, - nil, nil, nil, nil, 84, 31, 30, 114, 113, 115, - 116, nil, nil, 244, nil, nil, nil, nil, nil, nil, - 51, nil, nil, 118, 117, 119, 108, 64, 110, 109, - 111, nil, 112, 120, 121, nil, 104, 105, 47, 48, - 46, 254, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 264, 265, nil, - 237, nil, nil, 243, nil, nil, 66, 67, nil, nil, - 68, nil, nil, 251, nil, nil, 50, 253, 252, nil, - 249, 250, nil, nil, nil, 242, nil, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, nil, nil, - nil, 85, nil, 92, 106, 107, -432, nil, 44, 45, - nil, nil, nil, -432, -432, -432, nil, nil, -432, -432, - -432, nil, -432, nil, nil, nil, nil, nil, nil, nil, - -432, -432, -432, -432, nil, nil, nil, nil, nil, nil, - nil, nil, -432, -432, nil, -432, -432, -432, -432, -432, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, -432, -432, -432, -432, -432, -432, -432, -432, - -432, -432, -432, -432, -432, -432, nil, nil, -432, -432, - -432, nil, nil, -432, nil, 296, -432, nil, nil, -432, - -432, nil, -432, nil, -432, nil, -432, nil, -432, -432, - nil, -432, -432, -432, -432, -432, -321, -432, -432, -432, - nil, nil, nil, -321, -321, -321, nil, nil, -321, -321, - -321, nil, -321, -432, nil, nil, -432, -432, nil, -432, - -321, -432, -321, -321, nil, nil, nil, nil, -432, nil, - nil, nil, -321, -321, nil, -321, -321, -321, -321, -321, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, -321, -321, -321, -321, -321, -321, -321, -321, - -321, -321, -321, -321, -321, -321, nil, nil, -321, -321, - -321, nil, nil, -321, nil, 305, -321, nil, nil, -321, - -321, nil, -321, nil, -321, nil, -321, nil, -321, -321, - nil, -321, -321, -321, -321, -321, nil, -321, nil, -321, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, -321, nil, nil, -321, -321, nil, -321, - nil, -321, 81, 82, 83, nil, 65, nil, -321, nil, - 71, 72, nil, nil, nil, 75, nil, 73, 74, 76, - 33, 34, 79, 80, nil, nil, nil, nil, nil, 84, - 31, 30, 114, 113, 115, 116, nil, nil, 244, nil, - nil, nil, nil, nil, nil, 51, nil, nil, 118, 117, - 119, 108, 64, 110, 109, 111, 317, 112, 120, 121, - nil, 104, 105, 47, 48, 46, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 237, nil, nil, 243, nil, - nil, 66, 67, nil, nil, 68, nil, 314, nil, 312, - nil, 50, nil, nil, 318, nil, nil, nil, nil, nil, - 242, nil, nil, nil, nil, 102, 315, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, 81, 82, 83, 85, 65, 92, 106, - 107, 71, 72, 44, 45, nil, 75, nil, 73, 74, - 76, 33, 34, 79, 80, nil, nil, nil, nil, nil, - 84, 31, 30, 114, 113, 115, 116, nil, nil, 244, - nil, nil, nil, nil, nil, nil, 51, nil, nil, 118, - 117, 119, 108, 64, 110, 109, 111, 317, 112, 120, - 121, nil, 104, 105, 47, 48, 46, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 237, nil, nil, 243, - nil, nil, 66, 67, nil, nil, 68, nil, 314, nil, - 312, nil, 50, nil, nil, 318, nil, nil, nil, nil, - nil, 242, nil, nil, nil, nil, 102, 315, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 81, 82, 83, 85, 65, 92, - 106, 107, 71, 72, 44, 45, nil, 75, nil, 73, - 74, 76, 33, 34, 79, 80, nil, nil, nil, nil, - nil, 84, 31, 30, 114, 113, 115, 116, nil, nil, - 244, nil, nil, nil, nil, nil, nil, 51, nil, nil, - 118, 117, 119, 108, 64, 110, 109, 111, 317, 112, - 120, 121, nil, 104, 105, 47, 48, 46, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 237, nil, nil, - 243, nil, nil, 66, 67, nil, nil, 68, nil, 314, - nil, 312, nil, 50, nil, nil, 318, nil, nil, nil, - nil, nil, 242, nil, nil, nil, nil, 102, 315, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 81, 82, 83, 85, 65, - 92, 106, 107, 71, 72, 44, 45, nil, 75, nil, - 73, 74, 76, 344, 345, 79, 80, nil, nil, nil, - nil, nil, 84, 339, 347, 114, 113, 115, 116, nil, - nil, 244, nil, nil, nil, nil, nil, nil, 51, nil, - nil, 118, 117, 119, 108, 64, 110, 109, 111, nil, - 112, 120, 121, nil, 104, 105, 47, 48, 46, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 237, nil, - nil, 243, nil, nil, 66, 67, nil, nil, 68, nil, - nil, nil, nil, nil, 50, nil, nil, nil, nil, nil, - nil, nil, nil, 242, nil, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, 81, 82, 83, 85, - 65, 92, 106, 107, 71, 72, 44, 45, nil, 75, - nil, 73, 74, 76, 344, 345, 79, 80, nil, nil, - nil, nil, nil, 84, 339, 347, 114, 113, 115, 116, - nil, nil, 244, nil, nil, nil, nil, nil, nil, 51, - nil, nil, 118, 117, 119, 108, 64, 110, 109, 111, - nil, 112, 120, 121, nil, 104, 105, 47, 48, 46, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 237, - nil, nil, 243, nil, nil, 66, 67, nil, nil, 68, - nil, nil, nil, nil, nil, 50, nil, nil, nil, nil, - nil, nil, nil, nil, 242, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, 81, 82, 83, - 85, 65, 92, 106, 107, 71, 72, 44, 45, nil, - 75, nil, 73, 74, 76, 344, 345, 79, 80, nil, - nil, nil, nil, nil, 84, 339, 347, 114, 113, 115, - 116, nil, nil, 244, nil, nil, nil, nil, nil, nil, - 51, nil, nil, 118, 117, 119, 108, 64, 110, 109, - 111, nil, 112, 120, 121, nil, 104, 105, 47, 48, - 46, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 237, nil, nil, 243, nil, nil, 66, 67, nil, nil, - 68, nil, nil, nil, nil, nil, 50, nil, nil, nil, - nil, nil, nil, nil, nil, 242, nil, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, 81, 82, - 83, 85, 65, 92, 106, 107, 71, 72, 44, 45, - nil, 75, nil, 73, 74, 76, 344, 345, 79, 80, - nil, nil, nil, nil, nil, 84, 339, 347, 114, 113, - 115, 116, nil, nil, 244, nil, nil, nil, nil, nil, - nil, 51, nil, nil, 118, 117, 119, 108, 64, 110, - 109, 111, nil, 112, 120, 121, nil, 104, 105, 47, - 48, 46, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 237, nil, nil, 243, nil, nil, 66, 67, nil, - nil, 68, nil, nil, nil, nil, nil, 50, nil, nil, - nil, nil, nil, nil, nil, nil, 242, nil, nil, nil, - nil, 102, 90, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, 81, - 82, 83, 85, 65, 92, 106, 107, 71, 72, 44, - 45, nil, 75, nil, 73, 74, 76, 344, 345, 79, - 80, nil, nil, nil, nil, nil, 84, 339, 347, 114, - 113, 115, 116, nil, nil, 244, nil, nil, nil, nil, - nil, nil, 51, nil, nil, 118, 117, 119, 108, 64, - 110, 109, 111, nil, 112, 120, 121, nil, 104, 105, - 47, 48, 46, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 237, nil, nil, 243, nil, nil, 66, 67, - nil, nil, 68, nil, nil, nil, nil, nil, 50, nil, - nil, nil, nil, nil, nil, nil, nil, 242, nil, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - nil, nil, nil, 85, nil, 92, 106, 107, -306, nil, - 44, 45, nil, nil, nil, -306, -306, -306, nil, nil, - -306, -306, -306, nil, -306, nil, nil, nil, nil, nil, - nil, nil, -306, nil, -306, -306, -306, nil, nil, nil, - 114, 113, 115, 116, -306, -306, nil, -306, -306, -306, - -306, -306, nil, nil, nil, nil, 118, 117, 119, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 104, - 105, nil, nil, 348, -306, -306, -306, -306, -306, -306, - -306, -306, -306, -306, -306, -306, -306, -306, nil, nil, - -306, -306, -306, nil, nil, -306, nil, nil, -306, nil, - nil, -306, -306, nil, -306, nil, -306, nil, -306, nil, - -306, -306, nil, -306, -306, -306, -306, -306, nil, -306, - nil, -306, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, -306, 91, 101, -306, -306, - -306, -306, nil, -306, 85, -306, 92, 106, 107, nil, - -306, 81, 82, 83, 11, 65, nil, nil, nil, 71, - 72, nil, nil, nil, 75, nil, 73, 74, 76, 33, - 34, 79, 80, nil, nil, nil, nil, nil, 84, 31, - 30, 114, 113, 115, 116, nil, nil, 21, nil, nil, - nil, nil, nil, 10, 51, nil, 12, 118, 117, 119, - 108, 64, 110, 109, 111, nil, 112, 120, 121, nil, - 104, 105, 47, 48, 46, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 43, nil, nil, 36, nil, nil, - 66, 67, nil, nil, 68, nil, 38, nil, nil, nil, - 50, nil, nil, nil, nil, nil, nil, nil, nil, 22, - nil, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - nil, nil, 81, 82, 83, 85, 65, 92, 106, 107, - 71, 72, 44, 45, nil, 75, nil, 73, 74, 76, - 344, 345, 79, 80, nil, nil, nil, nil, nil, 84, - 339, 347, 114, 113, 115, 116, nil, nil, 244, nil, - nil, nil, nil, nil, nil, 51, nil, nil, 118, 117, - 119, 108, 64, 110, 109, 111, 317, 112, 120, 121, - nil, 104, 105, 47, 48, 46, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 237, nil, nil, 243, nil, - nil, 66, 67, nil, nil, 68, nil, 314, nil, nil, - nil, 50, nil, nil, 318, nil, nil, nil, nil, nil, - 242, nil, nil, nil, nil, 102, 315, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, 81, 82, 83, 85, 65, 92, 106, - 107, 71, 72, 44, 45, nil, 75, nil, 73, 74, - 76, 344, 345, 79, 80, nil, nil, nil, nil, nil, - 84, 339, 347, 114, 113, 115, 116, nil, nil, 244, - nil, nil, nil, nil, nil, nil, 51, nil, nil, 118, - 117, 119, 108, 64, 110, 109, 111, 317, 112, 120, - 121, nil, 104, 105, 47, 48, 46, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 237, nil, nil, 243, - nil, nil, 66, 67, nil, nil, 68, nil, nil, nil, - nil, nil, 50, nil, nil, 318, nil, nil, nil, nil, - nil, 242, nil, nil, nil, nil, 102, 315, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 81, 82, 83, 85, 65, 92, - 106, 107, 71, 72, 44, 45, nil, 75, nil, 73, - 74, 76, 33, 34, 79, 80, nil, nil, nil, nil, - nil, 84, 31, 30, 114, 113, 115, 116, nil, nil, - 21, nil, nil, nil, nil, nil, nil, 51, nil, nil, - 118, 117, 119, 108, 64, 110, 109, 111, nil, 112, - 120, 121, nil, 104, 105, 47, 48, 46, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 237, nil, nil, - 243, nil, nil, 66, 67, nil, nil, 68, nil, nil, - nil, nil, nil, 50, nil, nil, nil, nil, nil, nil, - nil, nil, 22, nil, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 81, 82, 83, 85, 65, - 92, 106, 107, 71, 72, 44, 45, nil, 75, nil, - 73, 74, 76, 33, 34, 79, 80, nil, nil, nil, - nil, nil, 84, 31, 30, 114, 113, 115, 116, nil, - nil, 21, nil, nil, nil, nil, nil, nil, 51, nil, - nil, 118, 117, 119, 108, 64, 110, 109, 111, nil, - 112, 120, 121, nil, 104, 105, 47, 48, 46, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 237, nil, - nil, 243, nil, nil, 66, 67, nil, nil, 68, nil, - nil, nil, nil, nil, 50, nil, nil, nil, nil, nil, - nil, nil, nil, 22, nil, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, 81, 82, 83, 85, - 65, 92, 106, 107, 71, 72, 44, 45, nil, 75, - nil, 73, 74, 76, 33, 34, 79, 80, nil, nil, - nil, nil, nil, 84, 31, 30, 114, 113, 115, 116, - nil, nil, 21, nil, nil, nil, nil, nil, nil, 51, - nil, nil, 118, 117, 119, 108, 64, 110, 109, 111, - nil, 112, 120, 121, nil, 104, 105, 47, 48, 46, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 237, - nil, nil, 243, nil, nil, 66, 67, nil, nil, 68, - nil, nil, nil, nil, nil, 50, nil, nil, nil, nil, - nil, nil, nil, nil, 22, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, 126, nil, nil, nil, nil, 125, - 85, nil, 92, 106, 107, nil, nil, 44, 45, 81, - 82, 83, 11, 65, nil, nil, nil, 71, 72, nil, - nil, nil, 75, nil, 73, 74, 76, 33, 34, 79, - 80, nil, nil, nil, nil, nil, 84, 31, 30, 114, - 113, 115, 116, nil, nil, 21, nil, nil, nil, nil, - nil, 10, 51, 9, 12, 118, 117, 119, 108, 64, - 110, 109, 111, nil, 112, 120, 121, nil, 104, 105, - 47, 48, 46, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 43, nil, nil, 36, nil, nil, 66, 67, - nil, nil, 68, nil, 38, nil, nil, nil, 50, nil, - nil, nil, nil, nil, nil, nil, nil, 22, nil, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - nil, nil, 418, 85, nil, 92, 106, 107, nil, nil, - 44, 45, 81, 82, 83, nil, 65, nil, nil, nil, - 71, 72, nil, nil, nil, 75, nil, 73, 74, 76, - 33, 34, 79, 80, nil, nil, nil, nil, nil, 84, - 31, 30, 114, 113, 115, 116, nil, nil, 21, nil, - nil, nil, nil, nil, nil, 51, nil, nil, 118, 117, - 119, 108, 64, 110, 109, 111, nil, 112, 120, 121, - nil, 104, 105, 47, 48, 46, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 237, nil, nil, 243, nil, - nil, 66, 67, nil, nil, 68, nil, nil, nil, nil, - nil, 50, nil, nil, nil, nil, nil, nil, nil, nil, - 22, nil, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, 81, 82, 83, 85, 65, 92, 106, - 107, 71, 72, 44, 45, nil, 75, nil, 73, 74, - 76, 33, 34, 79, 80, nil, nil, nil, nil, nil, - 84, 31, 30, 114, 113, 115, 116, nil, nil, 21, - nil, nil, nil, nil, nil, nil, 51, nil, nil, 118, - 117, 119, 108, 64, 110, 109, 111, nil, 112, 120, - 121, nil, 104, 105, 47, 48, 46, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 237, nil, nil, 243, - nil, nil, 66, 67, nil, nil, 68, nil, nil, nil, - nil, nil, 50, nil, nil, nil, nil, nil, nil, nil, - nil, 22, nil, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 81, 82, 83, 85, 65, 92, - 106, 107, 71, 72, 44, 45, nil, 75, nil, 73, - 74, 76, 33, 34, 79, 80, nil, nil, nil, nil, - nil, 84, 31, 30, 114, 113, 115, 116, nil, nil, - 21, nil, nil, nil, nil, nil, nil, 51, nil, nil, - 118, 117, 119, 108, 64, 110, 109, 111, nil, 112, - 120, 121, nil, 104, 105, 47, 48, 46, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 237, nil, nil, - 243, nil, nil, 66, 67, nil, nil, 68, nil, nil, - nil, nil, nil, 50, nil, nil, nil, nil, nil, nil, - nil, nil, 22, nil, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 81, 82, 83, 85, 65, - 92, 106, 107, 71, 72, 44, 45, nil, 75, nil, - 73, 74, 76, 33, 34, 79, 80, nil, nil, nil, - nil, nil, 84, 31, 30, 114, 113, 115, 116, nil, - nil, 21, nil, nil, nil, nil, nil, nil, 51, nil, - nil, 118, 117, 119, 108, 64, 110, 109, 111, nil, - 112, 120, 121, nil, 104, 105, 47, 48, 46, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 237, nil, - nil, 243, nil, nil, 66, 67, nil, nil, 68, nil, - nil, nil, nil, nil, 50, nil, nil, nil, nil, nil, - nil, nil, nil, 22, nil, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, nil, nil, nil, 85, - nil, 92, 106, 107, nil, nil, 44, 45, 81, 82, - 83, 11, 65, nil, nil, nil, 71, 72, nil, nil, - nil, 75, nil, 73, 74, 76, 33, 34, 79, 80, - nil, nil, nil, nil, nil, 84, 31, 30, 114, 113, - 115, 116, nil, nil, 21, nil, nil, nil, nil, nil, - 10, 51, nil, 12, 118, 117, 119, 108, 64, 110, - 109, 111, nil, 112, 120, 121, nil, 104, 105, 47, - 48, 46, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 43, nil, nil, 36, nil, nil, 66, 67, nil, - nil, 68, nil, 38, nil, nil, nil, 50, nil, nil, - nil, nil, nil, nil, nil, nil, 22, nil, nil, nil, - nil, 102, 90, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, 81, - 82, 83, 85, 65, 92, 106, 107, 71, 72, 44, - 45, nil, 75, nil, 73, 74, 76, 33, 34, 79, - 80, nil, nil, nil, nil, nil, 84, 31, 30, 114, - 113, 115, 116, nil, nil, 244, nil, nil, nil, nil, - nil, nil, 51, nil, nil, 118, 117, 119, 108, 64, - 110, 109, 111, nil, 112, 120, 121, nil, 104, 105, - 47, 48, 46, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 237, nil, nil, 243, nil, nil, 66, 67, - nil, nil, 68, nil, 434, nil, nil, nil, 50, nil, - nil, nil, nil, nil, nil, nil, nil, 242, nil, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - 81, 82, 83, 85, 65, 92, 106, 107, 71, 72, - 44, 45, nil, 75, nil, 73, 74, 76, 33, 34, - 79, 80, nil, nil, nil, nil, nil, 84, 31, 30, - 114, 113, 115, 116, nil, nil, 244, nil, nil, nil, - nil, nil, nil, 51, nil, nil, 118, 117, 119, 108, - 64, 110, 109, 111, nil, 112, 120, 121, nil, 104, - 105, 47, 48, 46, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 237, nil, nil, 243, nil, nil, 66, - 67, nil, nil, 68, nil, 434, nil, nil, nil, 50, - nil, nil, nil, nil, nil, nil, nil, nil, 242, nil, - nil, nil, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, 81, 82, 83, 85, 65, 92, 106, 107, 71, - 72, 44, 45, nil, 75, nil, 73, 74, 76, 33, - 34, 79, 80, nil, nil, nil, nil, nil, 84, 31, - 30, 114, 113, 115, 116, nil, nil, 21, nil, nil, - nil, nil, nil, nil, 51, nil, nil, 118, 117, 119, - 108, 64, 110, 109, 111, nil, 112, 120, 121, nil, - 104, 105, 47, 48, 46, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 237, nil, nil, 243, nil, nil, - 66, 67, nil, nil, 68, nil, nil, nil, nil, nil, - 50, nil, nil, nil, nil, nil, nil, nil, nil, 22, - nil, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - nil, nil, 81, 82, 83, 85, 65, 92, 106, 107, - 71, 72, 44, 45, nil, 75, nil, 73, 74, 76, - 33, 34, 79, 80, nil, nil, nil, nil, nil, 84, - 31, 30, 114, 113, 115, 116, nil, nil, 21, nil, - nil, nil, nil, nil, nil, 51, nil, nil, 118, 117, - 119, 108, 64, 110, 109, 111, nil, 112, 120, 121, - nil, 104, 105, 47, 48, 46, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 237, nil, nil, 243, nil, - nil, 66, 67, nil, nil, 68, nil, nil, nil, nil, - nil, 50, nil, nil, nil, nil, nil, nil, nil, nil, - 22, nil, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, 81, 82, 83, 85, 65, 92, 106, - 107, 71, 72, 44, 45, nil, 75, nil, 73, 74, - 76, 33, 34, 79, 80, nil, nil, nil, nil, nil, - 84, 31, 30, 114, 113, 115, 116, nil, nil, 244, - nil, nil, nil, nil, nil, nil, 51, nil, nil, 118, - 117, 119, 108, 64, 110, 109, 111, nil, 112, 120, - 121, nil, 104, 105, 47, 48, 46, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 237, nil, nil, 243, - nil, nil, 66, 67, nil, nil, 68, nil, nil, nil, - nil, nil, 50, nil, nil, nil, nil, nil, nil, nil, - nil, 242, nil, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 81, 82, 83, 85, 65, 92, - 106, 107, 71, 72, 44, 45, nil, 75, nil, 73, - 74, 76, 33, 34, 79, 80, nil, nil, nil, nil, - nil, 84, 31, 30, 114, 113, 115, 116, nil, nil, - 244, nil, nil, nil, nil, nil, nil, 51, nil, nil, - 118, 117, 119, 108, 64, 110, 109, 111, 317, 112, - 120, 121, nil, 104, 105, 47, 48, 46, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 237, nil, nil, - 243, nil, nil, 66, 67, nil, nil, 68, nil, 314, - nil, 312, nil, 50, nil, nil, 318, nil, nil, nil, - nil, nil, 242, nil, nil, nil, nil, 102, 315, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 81, 82, 83, 85, 65, - 92, 106, 107, 71, 72, 44, 45, nil, 75, nil, - 73, 74, 76, 33, 34, 79, 80, nil, nil, nil, - nil, nil, 84, 31, 30, 114, 113, 115, 116, nil, - nil, 244, nil, nil, nil, nil, nil, nil, 51, nil, - nil, 118, 117, 119, 108, 64, 110, 109, 111, nil, - 112, 120, 121, nil, 104, 105, 47, 48, 46, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 237, nil, - nil, 243, nil, nil, 66, 67, nil, nil, 68, nil, - nil, nil, nil, nil, 50, nil, nil, nil, nil, nil, - nil, nil, nil, 242, nil, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, 81, 82, 83, 85, - 65, 92, 106, 107, 71, 72, 44, 45, nil, 75, - nil, 73, 74, 76, 33, 34, 79, 80, nil, nil, - nil, nil, nil, 84, 31, 30, 114, 113, 115, 116, - nil, nil, 21, nil, nil, nil, nil, nil, nil, 51, - nil, nil, 118, 117, 119, 108, 64, 110, 109, 111, - nil, 112, 120, 121, nil, 104, 105, 47, 48, 46, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 237, - nil, nil, 243, nil, nil, 66, 67, nil, nil, 68, - nil, nil, nil, nil, nil, 50, nil, nil, nil, nil, - nil, nil, nil, nil, 22, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, 81, 82, 83, - 85, 65, 92, 106, 107, 71, 72, 44, 45, nil, - 75, nil, 73, 74, 76, 33, 34, 79, 80, nil, - nil, nil, nil, nil, 84, 31, 30, 114, 113, 115, - 116, nil, nil, 21, nil, nil, nil, nil, nil, nil, - 51, nil, nil, 118, 117, 119, 108, 64, 110, 109, - 111, nil, 112, 120, 121, nil, 104, 105, 47, 48, - 46, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 237, nil, nil, 243, nil, nil, 66, 67, nil, nil, - 68, nil, nil, nil, nil, nil, 50, nil, nil, nil, - nil, nil, nil, nil, nil, 22, nil, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, 232, nil, nil, 81, 82, - 83, 85, 65, 92, 106, 107, 71, 72, 44, 45, - nil, 75, nil, 73, 74, 76, 344, 345, 79, 80, - nil, nil, nil, nil, nil, 84, 339, 347, 114, 113, - 115, 116, nil, nil, 244, nil, nil, nil, nil, nil, - nil, 51, nil, nil, 118, 117, 119, 108, 64, 110, - 109, 111, nil, 112, 120, 121, nil, 104, 105, 47, - 48, 46, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 237, nil, nil, 243, nil, nil, 66, 67, nil, - nil, 68, nil, nil, nil, nil, nil, 50, nil, nil, - nil, nil, nil, nil, nil, nil, 242, nil, nil, nil, - nil, 102, 90, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, 81, - 82, 83, 85, 65, 92, 106, 107, 71, 72, 44, - 45, nil, 75, nil, 73, 74, 76, 344, 345, 79, - 80, nil, nil, nil, nil, nil, 84, 339, 347, 114, - 113, 115, 116, nil, nil, 244, nil, nil, nil, nil, - nil, nil, 51, nil, nil, 118, 117, 119, 108, 64, - 110, 109, 111, nil, 112, 120, 121, nil, 104, 105, - 47, 48, 46, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 237, nil, nil, 243, nil, nil, 66, 67, - nil, nil, 68, nil, nil, nil, nil, nil, 50, nil, - nil, nil, nil, nil, nil, nil, nil, 242, nil, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - 81, 82, 83, 85, 65, 92, 106, 107, 71, 72, - 44, 45, nil, 75, nil, 73, 74, 76, 344, 345, - 79, 80, nil, nil, nil, nil, nil, 84, 339, 347, - 114, 113, 115, 116, nil, nil, 244, nil, nil, nil, - nil, nil, nil, 51, nil, nil, 118, 117, 119, 108, - 64, 110, 109, 111, nil, 112, 120, 121, nil, 104, - 105, 47, 48, 46, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 237, nil, nil, 243, nil, nil, 66, - 67, nil, nil, 68, nil, nil, nil, nil, nil, 50, - nil, nil, nil, nil, nil, nil, nil, nil, 242, nil, - nil, nil, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, 81, 82, 83, 85, 65, 92, 106, 107, 71, - 72, 44, 45, nil, 75, nil, 73, 74, 76, 344, - 345, 79, 80, nil, nil, nil, nil, nil, 84, 339, - 347, 114, 113, 115, 116, nil, nil, 244, nil, nil, - nil, nil, nil, nil, 51, nil, nil, 118, 117, 119, - 108, 64, 110, 109, 111, nil, 112, 120, 121, nil, - 104, 105, 47, 48, 46, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 237, nil, nil, 243, nil, nil, - 66, 67, nil, nil, 68, nil, nil, nil, nil, nil, - 50, nil, nil, nil, nil, nil, nil, nil, nil, 242, - nil, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - nil, nil, 81, 82, 83, 85, 65, 92, 106, 107, - 71, 72, 44, 45, nil, 75, nil, 73, 74, 76, - 344, 345, 79, 80, nil, nil, nil, nil, nil, 84, - 339, 347, 114, 113, 115, 116, nil, nil, 244, nil, - nil, nil, nil, nil, nil, 51, nil, nil, 118, 117, - 119, 108, 64, 110, 109, 111, nil, 112, 120, 121, - nil, 104, 105, 47, 48, 46, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 237, nil, nil, 243, nil, - nil, 66, 67, nil, nil, 68, nil, nil, nil, nil, - nil, 50, nil, nil, nil, nil, nil, nil, nil, nil, - 242, nil, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, 81, 82, 83, 85, 65, 92, 106, - 107, 71, 72, 44, 45, nil, 75, nil, 73, 74, - 76, 344, 345, 79, 80, nil, nil, nil, nil, nil, - 84, 339, 347, 114, 113, 115, 116, nil, nil, 244, - nil, nil, nil, nil, nil, nil, 51, nil, nil, 118, - 117, 119, 108, 64, 110, 109, 111, nil, 112, 120, - 121, nil, 104, 105, 47, 48, 46, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 237, nil, nil, 243, - nil, nil, 66, 67, nil, nil, 68, nil, nil, nil, - nil, nil, 50, nil, nil, nil, nil, nil, nil, nil, - nil, 242, nil, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 81, 82, 83, 85, 65, 92, - 106, 107, 71, 72, 44, 45, nil, 75, nil, 73, - 74, 76, 344, 345, 79, 80, nil, nil, nil, nil, - nil, 84, 339, 347, 114, 113, 115, 116, nil, nil, - 244, nil, nil, nil, nil, nil, nil, 51, nil, nil, - 118, 117, 119, 108, 64, 110, 109, 111, nil, 112, - 120, 121, nil, 104, 105, 47, 48, 46, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 237, nil, nil, - 243, nil, nil, 66, 67, nil, nil, 68, nil, nil, - nil, nil, nil, 50, nil, nil, nil, nil, nil, nil, - nil, nil, 242, nil, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 81, 82, 83, 85, 65, - 92, 106, 107, 71, 72, 44, 45, nil, 75, nil, - 73, 74, 76, 344, 345, 79, 80, nil, nil, nil, - nil, nil, 84, 339, 347, 114, 113, 115, 116, nil, - nil, 244, nil, nil, nil, nil, nil, nil, 51, nil, - nil, 118, 117, 119, 108, 64, 110, 109, 111, nil, - 112, 120, 121, nil, 104, 105, 47, 48, 46, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 237, nil, - nil, 243, nil, nil, 66, 67, nil, nil, 68, nil, - nil, nil, nil, nil, 50, nil, nil, nil, nil, nil, - nil, nil, nil, 242, nil, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, 81, 82, 83, 85, - 65, 92, 106, 107, 71, 72, 44, 45, nil, 75, - nil, 73, 74, 76, 344, 345, 79, 80, nil, nil, - nil, nil, nil, 84, 339, 347, 114, 113, 115, 116, - nil, nil, 244, nil, nil, nil, nil, nil, nil, 51, - nil, nil, 118, 117, 119, 108, 64, 110, 109, 111, - nil, 112, 120, 121, nil, 104, 105, 47, 48, 46, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 237, - nil, nil, 243, nil, nil, 66, 67, nil, nil, 68, - nil, nil, nil, nil, nil, 50, nil, nil, nil, nil, - nil, nil, nil, nil, 242, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, 81, 82, 83, - 85, 65, 92, 106, 107, 71, 72, 44, 45, nil, - 75, nil, 73, 74, 76, 344, 345, 79, 80, nil, - nil, nil, nil, nil, 84, 339, 347, 114, 113, 115, - 116, nil, nil, 244, nil, nil, nil, nil, nil, nil, - 51, nil, nil, 118, 117, 119, 108, 64, 110, 109, - 111, nil, 112, 120, 121, nil, 104, 105, 47, 48, - 46, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 237, nil, nil, 243, nil, nil, 66, 67, nil, nil, - 68, nil, nil, nil, nil, nil, 50, nil, nil, nil, - nil, nil, nil, nil, nil, 242, nil, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, 81, 82, - 83, 85, 65, 92, 106, 107, 71, 72, 44, 45, - nil, 75, nil, 73, 74, 76, 344, 345, 79, 80, - nil, nil, nil, nil, nil, 84, 339, 347, 114, 113, - 115, 116, nil, nil, 244, nil, nil, nil, nil, nil, - nil, 51, nil, nil, 118, 117, 119, 108, 64, 110, - 109, 111, nil, 112, 120, 121, nil, 104, 105, 47, - 48, 46, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 237, nil, nil, 243, nil, nil, 66, 67, nil, - nil, 68, nil, nil, nil, nil, nil, 50, nil, nil, - nil, nil, nil, nil, nil, nil, 242, nil, nil, nil, - nil, 102, 90, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, 81, - 82, 83, 85, 65, 92, 106, 107, 71, 72, 44, - 45, nil, 75, nil, 73, 74, 76, 344, 345, 79, - 80, nil, nil, nil, nil, nil, 84, 339, 347, 114, - 113, 115, 116, nil, nil, 244, nil, nil, nil, nil, - nil, nil, 51, nil, nil, 118, 117, 119, 108, 64, - 110, 109, 111, nil, 112, 120, 121, nil, 104, 105, - 47, 48, 46, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 237, nil, nil, 243, nil, nil, 66, 67, - nil, nil, 68, nil, nil, nil, nil, nil, 50, nil, - nil, nil, nil, nil, nil, nil, nil, 242, nil, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - 81, 82, 83, 85, 65, 92, 106, 107, 71, 72, - 44, 45, nil, 75, nil, 73, 74, 76, 344, 345, - 79, 80, nil, nil, nil, nil, nil, 84, 339, 347, - 114, 113, 115, 116, nil, nil, 244, nil, nil, nil, - nil, nil, nil, 51, nil, nil, 118, 117, 119, 108, - 64, 110, 109, 111, nil, 112, 120, 121, nil, 104, - 105, 47, 48, 46, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 237, nil, nil, 243, nil, nil, 66, - 67, nil, nil, 68, nil, nil, nil, nil, nil, 50, - nil, nil, nil, nil, nil, nil, nil, nil, 242, nil, - nil, nil, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, 81, 82, 83, 85, 65, 92, 106, 107, 71, - 72, 44, 45, nil, 75, nil, 73, 74, 76, 344, - 345, 79, 80, nil, nil, nil, nil, nil, 84, 339, - 347, 114, 113, 115, 116, nil, nil, 244, nil, nil, - nil, nil, nil, nil, 51, nil, nil, 118, 117, 119, - 108, 64, 110, 109, 111, nil, 112, 120, 121, nil, - 104, 105, 47, 48, 46, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 237, nil, nil, 243, nil, nil, - 66, 67, nil, nil, 68, nil, nil, nil, nil, nil, - 50, nil, nil, nil, nil, nil, nil, nil, nil, 242, - nil, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - nil, nil, 81, 82, 83, 85, 65, 92, 106, 107, - 71, 72, 44, 45, nil, 75, nil, 73, 74, 76, - 344, 345, 79, 80, nil, nil, nil, nil, nil, 84, - 339, 347, 114, 113, 115, 116, nil, nil, 244, nil, - nil, nil, nil, nil, nil, 51, nil, nil, 118, 117, - 119, 108, 64, 110, 109, 111, nil, 112, 120, 121, - nil, 104, 105, 47, 48, 46, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 237, nil, nil, 243, nil, - nil, 66, 67, nil, nil, 68, nil, nil, nil, nil, - nil, 50, nil, nil, nil, nil, nil, nil, nil, nil, - 242, nil, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, 81, 82, 83, 85, 65, 92, 106, - 107, 71, 72, 44, 45, nil, 75, nil, 73, 74, - 76, 344, 345, 79, 80, nil, nil, nil, nil, nil, - 84, 339, 347, 114, 113, 115, 116, nil, nil, 244, - nil, nil, nil, nil, nil, nil, 51, nil, nil, 118, - 117, 119, 108, 64, 110, 109, 111, nil, 112, 120, - 121, nil, 104, 105, 47, 48, 46, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 237, nil, nil, 243, - nil, nil, 66, 67, nil, nil, 68, nil, nil, nil, - nil, nil, 50, nil, nil, nil, nil, nil, nil, nil, - nil, 242, nil, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 81, 82, 83, 85, 65, 92, - 106, 107, 71, 72, 44, 45, nil, 75, nil, 73, - 74, 76, 344, 345, 79, 80, nil, nil, nil, nil, - nil, 84, 339, 347, 114, 113, 115, 116, nil, nil, - 244, nil, nil, nil, nil, nil, nil, 51, nil, nil, - 118, 117, 119, 108, 64, 110, 109, 111, nil, 112, - 120, 121, nil, 104, 105, 47, 48, 46, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 237, nil, nil, - 243, nil, nil, 66, 67, nil, nil, 68, nil, nil, - nil, nil, nil, 50, nil, nil, nil, nil, nil, nil, - nil, nil, 242, nil, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 81, 82, 83, 85, 65, - 92, 106, 107, 71, 72, 44, 45, nil, 75, nil, - 73, 74, 76, 344, 345, 79, 80, nil, nil, nil, - nil, nil, 84, 339, 347, 114, 113, 115, 116, nil, - nil, 244, nil, nil, nil, nil, nil, nil, 51, nil, - nil, 118, 117, 119, 108, 64, 110, 109, 111, nil, - 112, 120, 121, nil, 104, 105, 47, 48, 46, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 237, nil, - nil, 243, nil, nil, 66, 67, nil, nil, 68, nil, - nil, nil, nil, nil, 50, nil, nil, nil, nil, nil, - nil, nil, nil, 242, nil, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, 81, 82, 83, 85, - 65, 92, 106, 107, 71, 72, 44, 45, nil, 75, - nil, 73, 74, 76, 344, 345, 79, 80, nil, nil, - nil, nil, nil, 84, 339, 347, 114, 113, 115, 116, - nil, nil, 244, nil, nil, nil, nil, nil, nil, 51, - nil, nil, 118, 117, 119, 108, 64, 110, 109, 111, - nil, 112, 120, 121, nil, 104, 105, 47, 48, 46, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 237, - nil, nil, 243, nil, nil, 66, 67, nil, nil, 68, - nil, nil, nil, nil, nil, 50, nil, nil, nil, nil, - nil, nil, nil, nil, 242, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, 81, 82, 83, - 85, 65, 92, 106, 107, 71, 72, 44, 45, nil, - 75, nil, 73, 74, 76, 344, 345, 79, 80, nil, - nil, nil, nil, nil, 84, 339, 347, 114, 113, 115, - 116, nil, nil, 244, nil, nil, nil, nil, nil, nil, - 51, nil, nil, 118, 117, 119, 108, 64, 110, 109, - 111, nil, 112, 120, 121, nil, 104, 105, 47, 48, - 46, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 237, nil, nil, 243, nil, nil, 66, 67, nil, nil, - 68, nil, nil, nil, nil, nil, 50, nil, nil, nil, - nil, nil, nil, nil, nil, 242, nil, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, 81, 82, - 83, 85, 65, 92, 106, 107, 71, 72, 44, 45, - nil, 75, nil, 73, 74, 76, 344, 345, 79, 80, - nil, nil, nil, nil, nil, 84, 339, 347, 114, 113, - 115, 116, nil, nil, 244, nil, nil, nil, nil, nil, - nil, 51, nil, nil, 118, 117, 119, 108, 64, 110, - 109, 111, nil, 112, 120, 121, nil, 104, 105, 47, - 48, 46, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 237, nil, nil, 243, nil, nil, 66, 67, nil, - nil, 68, nil, nil, nil, nil, nil, 50, nil, nil, - nil, nil, nil, nil, nil, nil, 242, nil, nil, nil, - nil, 102, 90, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, 81, - 82, 83, 85, 65, 92, 106, 107, 71, 72, 44, - 45, nil, 75, nil, 73, 74, 76, 344, 345, 79, - 80, nil, nil, nil, nil, nil, 84, 339, 347, 114, - 113, 115, 116, nil, nil, 244, nil, nil, nil, nil, - nil, nil, 51, nil, nil, 118, 117, 119, 108, 64, - 110, 109, 111, nil, 112, 120, 121, nil, 104, 105, - 47, 48, 46, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 237, nil, nil, 243, nil, nil, 66, 67, - nil, nil, 68, nil, nil, nil, nil, nil, 50, nil, - nil, nil, nil, nil, nil, nil, nil, 242, nil, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - 81, 82, 83, 85, 65, 92, 106, 107, 71, 72, - 44, 45, nil, 75, nil, 73, 74, 76, 344, 345, - 79, 80, nil, nil, nil, nil, nil, 84, 339, 347, - 114, 113, 115, 116, nil, nil, 244, nil, nil, nil, - nil, nil, nil, 51, nil, nil, 118, 117, 119, 108, - 64, 110, 109, 111, nil, 112, 120, 121, nil, 104, - 105, 47, 48, 46, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 237, nil, nil, 243, nil, nil, 66, - 67, nil, nil, 68, nil, nil, nil, nil, nil, 50, - nil, nil, nil, nil, nil, nil, nil, nil, 242, nil, - nil, nil, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, 81, 82, 83, 85, 65, 92, 106, 107, 71, - 72, 44, 45, nil, 75, nil, 73, 74, 76, 344, - 345, 79, 80, nil, nil, nil, nil, nil, 84, 339, - 347, 114, 113, 115, 116, nil, nil, 244, nil, nil, - nil, nil, nil, nil, 51, nil, nil, 118, 117, 119, - 108, 64, 110, 109, 111, nil, 112, 120, 121, nil, - 104, 105, 47, 48, 46, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 237, nil, nil, 243, nil, nil, - 66, 67, nil, nil, 68, nil, nil, nil, nil, nil, - 50, nil, nil, nil, nil, nil, nil, nil, nil, 242, - nil, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - nil, nil, 81, 82, 83, 85, 65, 92, 106, 107, - 71, 72, 44, 45, nil, 75, nil, 73, 74, 76, - 33, 34, 79, 80, nil, nil, nil, nil, nil, 84, - 31, 30, 114, 113, 115, 116, nil, nil, 21, nil, - nil, nil, nil, nil, nil, 51, nil, nil, 118, 117, - 119, 108, 64, 110, 109, 111, nil, 112, 120, 121, - nil, 104, 105, 47, 48, 46, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 237, nil, nil, 243, nil, - nil, 66, 67, nil, nil, 68, nil, nil, nil, nil, - nil, 50, nil, nil, nil, nil, nil, nil, nil, nil, - 22, nil, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, 81, 82, 83, 85, 65, 92, 106, - 107, 71, 72, 44, 45, nil, 75, nil, 73, 74, - 76, 33, 34, 79, 80, nil, nil, nil, nil, nil, - 84, 31, 30, 114, 113, 115, 116, nil, nil, 244, - nil, nil, nil, nil, nil, nil, 51, nil, nil, 118, - 117, 119, 108, 64, 110, 109, 111, 317, 112, 120, - 121, nil, 104, 105, 47, 48, 46, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 237, nil, nil, 243, - nil, nil, 66, 67, nil, nil, 68, nil, 314, nil, - 312, nil, 50, nil, nil, 318, nil, nil, nil, nil, - nil, 242, nil, nil, nil, nil, 102, 315, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 81, 82, 83, 85, 65, 92, - 106, 107, 71, 72, 44, 515, nil, 75, nil, 73, - 74, 76, 33, 34, 79, 80, nil, nil, nil, nil, - nil, 84, 31, 30, 114, 113, 115, 116, nil, nil, - 244, nil, nil, nil, nil, nil, nil, 51, nil, nil, - 118, 117, 119, 108, 64, 110, 109, 111, 317, 112, - 120, 121, nil, 104, 105, 47, 48, 46, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 237, nil, nil, - 243, nil, nil, 66, 67, nil, nil, 68, nil, 314, - nil, 312, nil, 50, nil, nil, 318, nil, nil, nil, - nil, nil, 242, nil, nil, nil, nil, 102, 315, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 81, 82, 83, 85, 65, - 92, 106, 107, 71, 72, 44, 45, nil, 75, nil, - 73, 74, 76, 33, 34, 79, 80, nil, nil, nil, - nil, nil, 84, 31, 30, 114, 113, 115, 116, nil, - nil, 244, nil, nil, nil, nil, nil, nil, 51, nil, - nil, 118, 117, 119, 108, 64, 110, 109, 111, 317, - 112, 120, 121, nil, 104, 105, 47, 48, 46, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 237, nil, - nil, 243, nil, nil, 66, 67, nil, nil, 68, nil, - 314, nil, 312, nil, 50, nil, nil, 318, nil, nil, - nil, nil, nil, 242, nil, nil, nil, nil, 102, 315, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, 232, nil, nil, 81, 82, 83, 85, - 65, 92, 106, 107, 71, 72, 44, 45, nil, 75, - nil, 73, 74, 76, 344, 345, 79, 80, nil, nil, - nil, nil, nil, 84, 339, 347, 114, 113, 115, 116, - nil, nil, 244, nil, nil, nil, nil, nil, nil, 51, - nil, nil, 118, 117, 119, 108, 64, 110, 109, 111, - nil, 112, 120, 121, nil, 104, 105, 47, 48, 46, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 237, - nil, nil, 243, nil, nil, 66, 67, nil, nil, 68, - nil, nil, nil, nil, nil, 50, nil, nil, nil, nil, - nil, nil, nil, nil, 242, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, 81, 82, 83, - 85, 65, 92, 106, 107, 71, 72, 44, 45, nil, - 75, nil, 73, 74, 76, 344, 345, 79, 80, nil, - nil, nil, nil, nil, 84, 339, 347, 114, 113, 115, - 116, nil, nil, 244, nil, nil, nil, nil, nil, nil, - 51, nil, nil, 118, 117, 119, 108, 64, 110, 109, - 111, nil, 112, 120, 121, nil, 104, 105, 47, 48, - 46, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 237, nil, nil, 243, nil, nil, 66, 67, nil, nil, - 68, nil, nil, nil, nil, nil, 50, nil, nil, nil, - nil, nil, nil, nil, nil, 242, nil, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, 81, 82, - 83, 85, 65, 92, 106, 107, 71, 72, 44, 45, - nil, 75, nil, 73, 74, 76, 344, 345, 79, 80, - nil, nil, nil, nil, nil, 84, 339, 347, 114, 113, - 115, 116, nil, nil, 244, nil, nil, nil, nil, nil, - nil, 51, nil, nil, 118, 117, 119, 108, 64, 110, - 109, 111, nil, 112, 120, 121, nil, 104, 105, 47, - 48, 46, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 237, nil, nil, 243, nil, nil, 66, 67, nil, - nil, 68, nil, nil, nil, nil, nil, 50, nil, nil, - nil, nil, nil, nil, nil, nil, 242, nil, nil, nil, - nil, 102, 90, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, 81, - 82, 83, 85, 65, 92, 106, 107, 71, 72, 44, - 45, nil, 75, nil, 73, 74, 76, 344, 345, 79, - 80, nil, nil, nil, nil, nil, 84, 339, 347, 114, - 113, 115, 116, nil, nil, 244, nil, nil, nil, nil, - nil, nil, 51, nil, nil, 118, 117, 119, 108, 64, - 110, 109, 111, nil, 112, 120, 121, nil, 104, 105, - 47, 48, 46, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 237, nil, nil, 243, nil, nil, 66, 67, - nil, nil, 68, nil, nil, nil, nil, nil, 50, nil, - nil, nil, nil, nil, nil, nil, nil, 242, nil, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - nil, nil, nil, 85, nil, 92, 106, 107, nil, nil, - 44, 45, 81, 82, 83, 11, 65, nil, nil, nil, - 71, 72, nil, nil, nil, 75, nil, 73, 74, 76, - 33, 34, 79, 80, nil, nil, nil, nil, nil, 84, - 31, 30, 114, 113, 115, 116, nil, nil, 21, nil, - nil, nil, nil, nil, 10, 51, nil, 12, 118, 117, - 119, 108, 64, 110, 109, 111, nil, 112, 120, 121, - nil, 104, 105, 47, 48, 46, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 43, nil, nil, 36, nil, - nil, 66, 67, nil, nil, 68, nil, 38, nil, nil, - nil, 50, nil, nil, nil, nil, nil, nil, nil, nil, - 22, nil, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, 81, 82, 83, 85, 65, 92, 106, - 107, 71, 72, 44, 45, nil, 75, nil, 73, 74, - 76, 344, 345, 79, 80, nil, nil, nil, nil, nil, - 84, 339, 347, 114, 113, 115, 116, nil, nil, 244, - nil, nil, nil, nil, nil, nil, 51, nil, nil, 118, - 117, 119, 108, 64, 110, 109, 111, nil, 112, 120, - 121, nil, 104, 105, 47, 48, 46, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 237, nil, nil, 243, - nil, nil, 66, 67, nil, nil, 68, nil, nil, nil, - nil, nil, 50, nil, nil, nil, nil, nil, nil, nil, - nil, 242, nil, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 81, 82, 83, 85, 65, 92, - 106, 107, 71, 72, 44, 45, nil, 75, nil, 73, - 74, 76, 344, 345, 79, 80, nil, nil, nil, nil, - nil, 84, 339, 347, 114, 113, 115, 116, nil, nil, - 244, nil, nil, nil, nil, nil, nil, 51, nil, nil, - 118, 117, 119, 108, 64, 110, 109, 111, nil, 112, - 120, 121, nil, 104, 105, 47, 48, 46, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 237, nil, nil, - 243, 561, nil, 66, 67, nil, nil, 68, nil, nil, - nil, nil, nil, 50, nil, nil, nil, nil, nil, nil, - nil, nil, 242, nil, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 81, 82, 83, 85, 65, - 92, 106, 107, 71, 72, 44, 45, nil, 75, nil, - 73, 74, 76, 33, 34, 79, 80, nil, nil, nil, - nil, nil, 84, 31, 30, 114, 113, 115, 116, nil, - nil, 21, nil, nil, nil, nil, nil, nil, 51, nil, - nil, 118, 117, 119, 108, 64, 110, 109, 111, nil, - 112, 120, 121, nil, 104, 105, 47, 48, 46, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 237, nil, - nil, 243, nil, nil, 66, 67, nil, nil, 68, nil, - nil, nil, nil, nil, 50, nil, nil, nil, nil, nil, - nil, nil, nil, 22, nil, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, 81, 82, 83, 85, - 65, 92, 106, 107, 71, 72, 44, 45, nil, 75, - nil, 73, 74, 76, 33, 34, 79, 80, nil, nil, - nil, nil, nil, 84, 31, 30, 114, 113, 115, 116, - nil, nil, 21, nil, nil, nil, nil, nil, nil, 51, - nil, nil, 118, 117, 119, 108, 64, 110, 109, 111, - nil, 112, 120, 121, nil, 104, 105, 47, 48, 46, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 237, - nil, nil, 243, nil, nil, 66, 67, nil, nil, 68, - nil, nil, nil, nil, nil, 50, nil, nil, nil, nil, - nil, nil, nil, nil, 22, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, 81, 82, 83, - 85, 65, 92, 106, 107, 71, 72, 44, 45, nil, - 75, nil, 73, 74, 76, 344, 345, 79, 80, nil, - nil, nil, nil, nil, 84, 339, 347, 114, 113, 115, - 116, nil, nil, 244, nil, nil, nil, nil, nil, nil, - 51, nil, nil, 118, 117, 119, 108, 64, 110, 109, - 111, nil, 112, 120, 121, nil, 104, 105, 47, 48, - 46, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 237, nil, nil, 243, nil, nil, 66, 67, nil, nil, - 68, nil, nil, nil, nil, nil, 50, nil, nil, nil, - nil, nil, nil, nil, nil, 242, nil, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, nil, nil, - nil, 85, nil, 92, 106, 107, -270, nil, 44, 45, - nil, nil, nil, -270, -270, -270, nil, nil, -270, -270, - -270, nil, -270, nil, nil, nil, nil, nil, nil, nil, - -270, -270, -270, -270, nil, nil, nil, nil, nil, nil, - nil, nil, -270, -270, nil, -270, -270, -270, -270, -270, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, -270, -270, -270, -270, -270, -270, -270, -270, - -270, -270, -270, -270, -270, -270, nil, nil, -270, -270, - -270, nil, nil, -270, nil, 296, -270, nil, nil, -270, - -270, nil, -270, nil, -270, nil, -270, nil, -270, -270, - nil, -270, -270, -270, -270, -270, nil, -270, -270, -270, - 582, nil, 579, 578, 577, 587, 580, nil, nil, nil, - nil, nil, nil, -270, nil, 590, -270, -270, -708, -270, - nil, -270, nil, nil, nil, -708, -708, -708, -270, nil, - -708, -708, -708, nil, -708, nil, nil, 585, nil, nil, - nil, nil, -708, -708, -708, -708, -708, nil, 598, 597, - nil, nil, nil, 591, -708, -708, nil, -708, -708, -708, - -708, -708, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, -708, -708, -708, -708, -708, -708, - -708, -708, -708, -708, -708, -708, -708, -708, nil, nil, - -708, -708, -708, nil, nil, -708, nil, nil, -708, nil, - nil, -708, -708, nil, -708, nil, -708, nil, -708, nil, - -708, -708, nil, -708, -708, -708, -708, -708, nil, -708, - -708, -708, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, -708, nil, nil, -708, -708, - -708, -708, nil, -708, -709, -708, nil, nil, nil, nil, - -708, -709, -709, -709, nil, nil, -709, -709, -709, nil, - -709, nil, nil, nil, nil, nil, nil, nil, -709, -709, - -709, -709, -709, nil, nil, nil, nil, nil, nil, nil, - -709, -709, nil, -709, -709, -709, -709, -709, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - -709, -709, -709, -709, -709, -709, -709, -709, -709, -709, - -709, -709, -709, -709, nil, nil, -709, -709, -709, nil, - nil, -709, nil, nil, -709, nil, nil, -709, -709, nil, - -709, nil, -709, nil, -709, nil, -709, -709, nil, -709, - -709, -709, -709, -709, nil, -709, -709, -709, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, -709, nil, nil, -709, -709, -709, -709, nil, -709, - nil, -709, nil, 81, 82, 83, -709, 65, nil, nil, - nil, 71, 72, nil, nil, nil, 75, nil, 73, 74, - 76, 33, 34, 79, 80, nil, nil, nil, nil, nil, - 84, 31, 30, 114, 113, 115, 116, nil, nil, 244, - nil, nil, nil, nil, nil, nil, 51, nil, nil, 118, - 117, 119, 108, 64, 110, 109, 111, 317, 112, 120, - 121, nil, 104, 105, 47, 48, 46, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 237, nil, nil, 243, - nil, nil, 66, 67, nil, nil, 68, nil, 314, nil, - 312, nil, 50, nil, nil, 318, nil, nil, nil, nil, - nil, 242, nil, nil, nil, nil, 102, 315, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 81, 82, 83, 85, 65, 92, - 106, 107, 71, 72, 44, 45, nil, 75, nil, 73, - 74, 76, 344, 345, 79, 80, nil, nil, nil, nil, - nil, 84, 339, 347, 114, 113, 115, 116, nil, nil, - 244, nil, nil, nil, nil, nil, nil, 51, nil, nil, - 118, 117, 119, 108, 64, 110, 109, 111, nil, 112, - 120, 121, nil, 104, 105, 47, 48, 46, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 237, nil, nil, - 243, nil, nil, 66, 67, nil, nil, 68, nil, nil, - nil, nil, nil, 50, nil, nil, nil, nil, nil, nil, - nil, nil, 242, nil, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 81, 82, 83, 85, 65, - 92, 106, 107, 71, 72, 44, 45, nil, 75, nil, - 73, 74, 76, 344, 345, 79, 80, nil, nil, nil, - nil, nil, 84, 339, 347, 114, 113, 115, 116, nil, - nil, 244, nil, nil, nil, nil, nil, nil, 51, nil, - nil, 118, 117, 119, 108, 64, 110, 109, 111, nil, - 112, 120, 121, nil, 104, 105, 47, 48, 46, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 237, nil, - nil, 243, nil, nil, 66, 67, nil, nil, 68, nil, - nil, nil, nil, nil, 50, nil, nil, nil, nil, nil, - nil, nil, nil, 242, nil, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, 81, 82, 83, 85, - 65, 92, 106, 107, 71, 72, 44, 45, nil, 75, - nil, 73, 74, 76, 344, 345, 79, 80, nil, nil, - nil, nil, nil, 84, 339, 347, 114, 113, 115, 116, - nil, nil, 244, nil, nil, nil, nil, nil, nil, 51, - nil, nil, 118, 117, 119, 108, 64, 110, 109, 111, - nil, 112, 120, 121, nil, 104, 105, 47, 48, 46, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 237, - nil, nil, 243, nil, nil, 66, 67, nil, nil, 68, - nil, nil, nil, nil, nil, 50, nil, nil, nil, nil, - nil, nil, nil, nil, 242, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, nil, nil, nil, - 85, nil, 92, 106, 107, -270, nil, 44, 45, nil, - nil, nil, -270, -270, -270, nil, nil, -270, -270, -270, - 582, -270, 579, 578, 577, 587, 580, nil, nil, -270, - -270, -270, nil, nil, nil, 590, nil, nil, nil, nil, - nil, -270, -270, nil, -270, -270, -270, -270, -270, nil, - nil, nil, nil, nil, nil, nil, 582, 585, 579, 578, - 577, 587, 580, nil, nil, nil, 595, 594, 598, 597, - nil, 590, nil, 591, nil, 582, nil, 579, 578, 577, - 587, 580, -270, nil, nil, nil, nil, nil, nil, -270, - 590, nil, nil, 585, 296, -270, nil, nil, nil, 232, - nil, nil, 595, 594, 598, 597, nil, nil, nil, 591, - nil, nil, 585, 641, nil, nil, nil, -270, -270, nil, - nil, 595, 594, 598, 597, nil, nil, nil, 591, nil, - nil, nil, -270, nil, nil, -270, nil, 81, 82, 83, - -270, 65, nil, nil, nil, 71, 72, -270, nil, nil, - 75, nil, 73, 74, 76, 344, 345, 79, 80, nil, - nil, nil, nil, nil, 84, 339, 347, 114, 113, 115, - 116, nil, nil, 244, nil, nil, nil, nil, nil, nil, - 51, nil, nil, 118, 117, 119, 108, 64, 110, 109, - 111, nil, 112, 120, 121, nil, 104, 105, 47, 48, - 46, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 237, nil, nil, 243, nil, nil, 66, 67, nil, nil, - 68, nil, nil, nil, nil, nil, 50, nil, nil, nil, - nil, nil, nil, nil, nil, 242, nil, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, 81, 82, - 83, 85, 65, 92, 106, 107, 71, 72, 44, 45, - nil, 75, nil, 73, 74, 76, 344, 345, 79, 80, - nil, nil, nil, nil, nil, 84, 339, 347, 114, 113, - 115, 116, nil, nil, 244, nil, nil, nil, nil, nil, - nil, 51, nil, nil, 118, 117, 119, 108, 64, 110, - 109, 111, 317, 112, 120, 121, nil, 104, 105, 47, - 48, 46, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 237, nil, nil, 243, nil, nil, 66, 67, nil, - nil, 68, nil, 742, nil, 312, nil, 50, nil, nil, - 318, nil, nil, nil, nil, nil, 242, nil, nil, nil, - nil, 102, 315, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, 81, - 82, 83, 85, 65, 92, 106, 107, 71, 72, 44, - 45, nil, 75, nil, 73, 74, 76, 344, 345, 79, - 80, nil, nil, nil, nil, nil, 84, 339, 347, 114, - 113, 115, 116, nil, nil, 244, nil, nil, nil, nil, - nil, nil, 51, nil, nil, 118, 117, 119, 108, 64, - 110, 109, 111, 317, 112, 120, 121, nil, 104, 105, - 47, 48, 46, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 237, nil, nil, 243, nil, nil, 66, 67, - nil, nil, 68, nil, nil, nil, 312, nil, 50, nil, - nil, 318, nil, nil, nil, nil, nil, 242, nil, nil, - nil, nil, 102, 315, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - 81, 82, 83, 85, 65, 92, 106, 107, 71, 72, - 44, 45, nil, 75, nil, 73, 74, 76, 344, 345, - 79, 80, nil, nil, nil, nil, nil, 84, 339, 347, - 114, 113, 115, 116, nil, nil, 244, nil, nil, nil, - nil, nil, nil, 51, nil, nil, 118, 117, 119, 108, - 64, 110, 109, 111, nil, 112, 120, 121, nil, 104, - 105, 47, 48, 46, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 237, nil, nil, 243, nil, nil, 66, - 67, nil, nil, 68, nil, nil, nil, nil, nil, 50, - nil, nil, nil, nil, nil, nil, nil, nil, 242, nil, - nil, nil, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, nil, nil, nil, 85, nil, 92, 106, 107, nil, - nil, 44, 45, 81, 82, 83, 11, 65, nil, nil, - nil, 71, 72, nil, nil, nil, 75, nil, 73, 74, - 76, 33, 34, 79, 80, nil, nil, nil, nil, nil, - 84, 31, 30, 114, 113, 115, 116, nil, nil, 21, - nil, nil, nil, nil, nil, 10, 51, 325, 12, 118, - 117, 119, 108, 64, 110, 109, 111, nil, 112, 120, - 121, nil, 104, 105, 47, 48, 46, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 43, nil, nil, 36, - nil, nil, 66, 67, nil, nil, 68, nil, 38, nil, - nil, nil, 50, nil, nil, nil, nil, nil, nil, nil, - nil, 22, nil, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, nil, nil, 418, 85, nil, 92, - 106, 107, nil, nil, 44, 45, 81, 82, 83, nil, - 65, nil, nil, nil, 71, 72, nil, nil, nil, 75, - nil, 73, 74, 76, 33, 34, 79, 80, nil, nil, - nil, nil, nil, 84, 31, 30, 114, 113, 115, 116, - nil, nil, 244, nil, nil, nil, nil, nil, nil, 51, - nil, nil, 118, 117, 119, 108, 64, 110, 109, 111, - 317, 112, 120, 121, nil, 104, 105, 47, 48, 46, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 237, - nil, nil, 243, nil, nil, 66, 67, nil, nil, 68, - nil, 314, nil, 312, nil, 50, nil, nil, 318, nil, - nil, nil, nil, nil, 242, nil, nil, nil, nil, 102, - 315, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, 81, 82, 83, - 85, 65, 92, 106, 107, 71, 72, 44, 45, nil, - 75, nil, 73, 74, 76, 344, 345, 79, 80, nil, - nil, nil, nil, nil, 84, 339, 347, 114, 113, 115, - 116, nil, nil, 244, nil, nil, nil, nil, nil, nil, - 51, nil, nil, 118, 117, 119, 108, 64, 110, 109, - 111, nil, 112, 120, 121, nil, 104, 105, 47, 48, - 46, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 237, nil, nil, 243, nil, nil, 66, 67, nil, nil, - 68, nil, nil, nil, nil, nil, 50, nil, nil, nil, - nil, nil, nil, nil, nil, 242, nil, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, 81, 82, - 83, 85, 65, 92, 106, 107, 71, 72, 44, 45, - nil, 75, nil, 73, 74, 76, 344, 345, 79, 80, - nil, nil, nil, nil, nil, 84, 339, 347, 114, 113, - 115, 116, nil, nil, 244, nil, nil, nil, nil, nil, - nil, 51, nil, nil, 118, 117, 119, 108, 64, 110, - 109, 111, nil, 112, 120, 121, nil, 104, 105, 47, - 48, 46, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 237, nil, nil, 243, nil, nil, 66, 67, nil, - nil, 68, nil, nil, nil, nil, nil, 50, nil, nil, - nil, nil, nil, nil, nil, nil, 242, nil, nil, nil, - nil, 102, 90, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, 81, - 82, 83, 85, 65, 92, 106, 107, 71, 72, 44, - 45, nil, 75, nil, 73, 74, 76, 33, 34, 79, - 80, nil, nil, nil, nil, nil, 84, 31, 30, 114, - 113, 115, 116, nil, nil, 21, nil, nil, nil, nil, - nil, nil, 51, nil, nil, 118, 117, 119, 108, 64, - 110, 109, 111, nil, 112, 120, 121, nil, 104, 105, - 47, 48, 46, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 237, nil, nil, 243, nil, nil, 66, 67, - nil, nil, 68, nil, nil, nil, nil, nil, 50, nil, - nil, nil, nil, nil, nil, nil, nil, 22, nil, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - 81, 82, 83, 85, 65, 92, 106, 107, 71, 72, - 44, 45, nil, 75, nil, 73, 74, 76, 344, 345, - 79, 80, nil, nil, nil, nil, nil, 84, 339, 347, - 114, 113, 115, 116, nil, nil, 244, nil, nil, nil, - nil, nil, nil, 51, nil, nil, 118, 117, 119, 108, - 64, 110, 109, 111, nil, 112, 120, 121, nil, 104, - 105, 47, 48, 46, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 237, nil, nil, 243, nil, nil, 66, - 67, nil, nil, 68, nil, nil, nil, nil, nil, 50, - nil, nil, nil, nil, nil, nil, nil, nil, 242, nil, - nil, nil, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, 81, 82, 83, 85, 65, 92, 106, 107, 71, - 72, 44, 45, nil, 75, nil, 73, 74, 76, 344, - 345, 79, 80, nil, nil, nil, nil, nil, 84, 339, - 347, 114, 113, 115, 116, nil, nil, 244, nil, nil, - nil, nil, nil, nil, 51, nil, nil, 118, 117, 119, - 108, 64, 110, 109, 111, nil, 112, 120, 121, nil, - 104, 105, 47, 48, 46, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 237, nil, nil, 243, nil, nil, - 66, 67, nil, nil, 68, nil, nil, nil, nil, nil, - 50, nil, nil, nil, nil, nil, nil, nil, nil, 242, - nil, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - nil, nil, 81, 82, 83, 85, 65, 92, 106, 107, - 71, 72, 44, 45, nil, 75, nil, 73, 74, 76, - 344, 345, 79, 80, nil, nil, nil, nil, nil, 84, - 339, 347, 114, 113, 115, 116, nil, nil, 244, nil, - nil, nil, nil, nil, nil, 51, nil, nil, 118, 117, - 119, 108, 64, 110, 109, 111, nil, 112, 120, 121, - nil, 104, 105, 47, 48, 46, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 237, nil, nil, 243, nil, - nil, 66, 67, nil, nil, 68, nil, nil, nil, nil, - nil, 50, nil, nil, nil, nil, nil, nil, nil, nil, - 242, nil, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, 81, 82, 83, 85, 65, 92, 106, - 107, 71, 72, 44, 45, nil, 75, nil, 73, 74, - 76, 344, 345, 79, 80, nil, nil, nil, nil, nil, - 84, 339, 347, 114, 113, 115, 116, nil, nil, 244, - nil, nil, nil, nil, nil, nil, 51, nil, nil, 118, - 117, 119, 108, 64, 110, 109, 111, 317, 112, 120, - 121, nil, 104, 105, 47, 48, 46, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 237, nil, nil, 243, - nil, nil, 66, 67, nil, nil, 68, nil, 742, nil, - nil, nil, 50, nil, nil, 318, nil, nil, nil, nil, - nil, 242, nil, nil, nil, nil, 102, 315, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 81, 82, 83, 85, 65, 92, - 106, 107, 71, 72, 44, 45, nil, 75, nil, 73, - 74, 76, 344, 345, 79, 80, nil, nil, nil, nil, - nil, 84, 339, 347, 114, 113, 115, 116, nil, nil, - 244, nil, nil, nil, nil, nil, nil, 51, nil, nil, - 118, 117, 119, 108, 64, 110, 109, 111, 317, 112, - 120, 121, nil, 104, 105, 47, 48, 46, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 237, nil, nil, - 243, nil, nil, 66, 67, nil, nil, 68, nil, nil, - nil, nil, nil, 50, nil, nil, 318, nil, nil, nil, - nil, nil, 242, nil, nil, nil, nil, 102, 315, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 81, 82, 83, 85, 65, - 92, 106, 107, 71, 72, 44, 45, nil, 75, nil, - 73, 74, 76, 344, 345, 79, 80, nil, nil, nil, - nil, nil, 84, 339, 347, 114, 113, 115, 116, nil, - nil, 244, nil, nil, nil, nil, nil, nil, 51, nil, - nil, 118, 117, 119, 108, 64, 110, 109, 111, nil, - 112, 120, 121, nil, 104, 105, 47, 48, 46, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 237, nil, - nil, 243, nil, nil, 66, 67, nil, nil, 68, nil, - 314, nil, nil, nil, 50, nil, nil, nil, nil, nil, - nil, nil, nil, 242, nil, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, 81, 82, 83, 85, - 65, 92, 106, 107, 71, 72, 44, 45, nil, 75, - nil, 73, 74, 76, 33, 34, 79, 80, nil, nil, - nil, nil, nil, 84, 31, 30, 114, 113, 115, 116, - nil, nil, 244, nil, nil, nil, nil, nil, nil, 51, - nil, nil, 118, 117, 119, 108, 64, 110, 109, 111, - 317, 112, 120, 121, nil, 104, 105, 47, 48, 46, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 237, - nil, nil, 243, nil, nil, 66, 67, nil, nil, 68, - nil, 314, nil, 312, nil, 50, nil, nil, 318, nil, - nil, nil, nil, nil, 242, nil, nil, nil, nil, 102, - 315, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, 81, 82, 83, - 85, 65, 92, 106, 107, 71, 72, 44, 45, nil, - 75, nil, 73, 74, 76, 33, 34, 79, 80, nil, - nil, nil, nil, nil, 84, 31, 30, 114, 113, 115, - 116, nil, nil, 244, nil, nil, nil, nil, nil, nil, - 51, nil, nil, 118, 117, 119, 108, 64, 110, 109, - 111, 317, 112, 120, 121, nil, 104, 105, 47, 48, - 46, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 237, nil, nil, 243, nil, nil, 66, 67, nil, nil, - 68, nil, 314, nil, 312, nil, 50, nil, nil, 318, - nil, nil, nil, nil, nil, 242, nil, nil, nil, nil, - 102, 315, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, nil, nil, - nil, 85, nil, 92, 106, 107, nil, nil, 44, 45, - 81, 82, 83, 11, 65, nil, nil, nil, 71, 72, - nil, nil, nil, 75, nil, 73, 74, 76, 33, 34, - 79, 80, nil, nil, nil, nil, nil, 84, 31, 30, - 114, 113, 115, 116, nil, nil, 21, nil, nil, nil, - nil, nil, 10, 51, nil, 12, 118, 117, 119, 108, - 64, 110, 109, 111, nil, 112, 120, 121, nil, 104, - 105, 47, 48, 46, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 43, nil, nil, 36, nil, nil, 66, - 67, nil, nil, 68, nil, 38, nil, nil, nil, 50, - nil, nil, nil, nil, nil, nil, nil, nil, 22, nil, - nil, nil, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, 81, 82, 83, 85, 65, 92, 106, 107, 71, - 72, 44, 45, nil, 75, nil, 73, 74, 76, 344, - 345, 79, 80, nil, nil, nil, nil, nil, 84, 339, - 347, 114, 113, 115, 116, nil, nil, 244, nil, nil, - nil, nil, nil, nil, 51, nil, nil, 118, 117, 119, - 108, 64, 110, 109, 111, nil, 112, 120, 121, nil, - 104, 105, 47, 48, 46, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 237, nil, nil, 243, nil, nil, - 66, 67, nil, nil, 68, nil, 844, nil, nil, nil, - 50, nil, nil, nil, nil, nil, nil, nil, nil, 242, - nil, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - nil, nil, 81, 82, 83, 85, 65, 92, 106, 107, - 71, 72, 44, 45, nil, 75, nil, 73, 74, 76, - 33, 34, 79, 80, nil, nil, nil, nil, nil, 84, - 31, 30, 114, 113, 115, 116, nil, nil, 244, nil, - nil, nil, nil, nil, nil, 51, nil, nil, 118, 117, - 119, 108, 64, 110, 109, 111, nil, 112, 120, 121, - nil, 104, 105, 47, 48, 46, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 237, nil, nil, 243, nil, - nil, 66, 67, nil, nil, 68, nil, nil, nil, nil, - nil, 50, nil, nil, nil, nil, nil, nil, nil, nil, - 242, nil, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, 81, 82, 83, 85, 65, 92, 106, - 107, 71, 72, 44, 45, nil, 75, nil, 73, 74, - 76, 33, 34, 79, 80, nil, nil, nil, nil, nil, - 84, 31, 30, 114, 113, 115, 116, nil, nil, 244, - nil, nil, nil, nil, nil, nil, 51, nil, nil, 118, - 117, 119, 108, 64, 110, 109, 111, 317, 112, 120, - 121, nil, 104, 105, 47, 48, 46, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 237, nil, nil, 243, - nil, nil, 66, 67, nil, nil, 68, nil, 314, nil, - 312, nil, 50, nil, nil, 318, nil, nil, nil, nil, - nil, 242, nil, nil, nil, nil, 102, 315, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, nil, nil, nil, 85, nil, 92, - 106, 107, nil, nil, 44, 45, 81, 82, 83, 11, - 65, nil, nil, nil, 71, 72, nil, nil, nil, 75, - nil, 73, 74, 76, 33, 34, 79, 80, nil, nil, - nil, nil, nil, 84, 31, 30, 114, 113, 115, 116, - nil, nil, 21, nil, nil, nil, nil, nil, 10, 51, - nil, 12, 118, 117, 119, 108, 64, 110, 109, 111, - nil, 112, 120, 121, nil, 104, 105, 47, 48, 46, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 43, - nil, nil, 36, nil, nil, 66, 67, nil, nil, 68, - nil, 38, nil, nil, nil, 50, nil, nil, nil, nil, - nil, nil, nil, nil, 22, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, 81, 82, 83, - 85, 65, 92, 106, 107, 71, 72, 44, 45, nil, - 75, nil, 73, 74, 76, 344, 345, 79, 80, nil, - nil, nil, nil, nil, 84, 339, 347, 114, 113, 115, - 116, nil, nil, 244, nil, nil, nil, nil, nil, nil, - 51, nil, nil, 118, 117, 119, 108, 64, 110, 109, - 111, nil, 112, 120, 121, nil, 104, 105, 47, 48, - 46, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 237, nil, nil, 243, nil, nil, 66, 67, nil, nil, - 68, nil, nil, nil, nil, nil, 50, nil, nil, nil, - nil, nil, nil, nil, nil, 242, nil, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, 81, 82, - 83, 85, 65, 92, 106, 107, 71, 72, 44, 45, - nil, 75, nil, 73, 74, 76, 344, 345, 79, 80, - nil, nil, nil, nil, nil, 84, 339, 347, 114, 113, - 115, 116, nil, nil, 244, nil, nil, nil, nil, nil, - nil, 51, nil, nil, 118, 117, 119, 108, 64, 110, - 109, 111, 317, 112, 120, 121, nil, 104, 105, 47, - 48, 46, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 237, nil, nil, 243, nil, nil, 66, 67, nil, - nil, 68, nil, 742, nil, 312, nil, 50, nil, nil, - 318, nil, nil, nil, nil, nil, 242, nil, nil, nil, - nil, 102, 315, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, 81, - 82, 83, 85, 65, 92, 106, 107, 71, 72, 44, - 45, nil, 75, nil, 73, 74, 76, 344, 345, 79, - 80, nil, nil, nil, nil, nil, 84, 339, 347, 114, - 113, 115, 116, nil, nil, 244, nil, nil, nil, nil, - nil, nil, 51, nil, nil, 118, 117, 119, 108, 64, - 110, 109, 111, 317, 112, 120, 121, nil, 104, 105, - 47, 48, 46, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 237, nil, nil, 243, nil, nil, 66, 67, - nil, nil, 68, nil, nil, nil, 312, nil, 50, nil, - nil, 318, nil, nil, nil, nil, nil, 242, nil, nil, - nil, nil, 102, 315, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - 81, 82, 83, 85, 65, 92, 106, 107, 71, 72, - 44, 45, nil, 75, nil, 73, 74, 76, 33, 34, - 79, 80, nil, nil, nil, nil, nil, 84, 31, 30, - 114, 113, 115, 116, nil, nil, 244, nil, nil, nil, - nil, nil, nil, 51, nil, nil, 118, 117, 119, 108, - 64, 110, 109, 111, nil, 112, 120, 121, nil, 104, - 105, 47, 48, 46, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 237, nil, nil, 243, nil, nil, 66, - 67, nil, nil, 68, nil, nil, nil, nil, nil, 50, - nil, nil, nil, nil, nil, nil, nil, nil, 242, nil, - nil, nil, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, 81, 82, 83, 85, 65, 92, 106, 107, 71, - 72, 44, 45, nil, 75, nil, 73, 74, 76, 33, - 34, 79, 80, nil, nil, nil, nil, nil, 84, 31, - 30, 114, 113, 115, 116, nil, nil, 244, nil, nil, - nil, nil, nil, nil, 51, nil, nil, 118, 117, 119, - 108, 64, 110, 109, 111, nil, 112, 120, 121, nil, - 104, 105, 47, 48, 46, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 237, nil, nil, 243, nil, nil, - 66, 67, nil, nil, 68, nil, nil, nil, nil, nil, - 50, nil, nil, nil, nil, nil, nil, nil, nil, 242, - nil, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - nil, nil, 81, 82, 83, 85, 65, 92, 106, 107, - 71, 72, 44, 45, nil, 75, nil, 73, 74, 76, - 33, 34, 79, 80, nil, nil, nil, nil, nil, 84, - 31, 30, 114, 113, 115, 116, nil, nil, 244, nil, - nil, nil, nil, nil, nil, 51, nil, nil, 118, 117, - 119, 108, 64, 110, 109, 111, nil, 112, 120, 121, - nil, 104, 105, 47, 48, 46, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 237, nil, nil, 243, nil, - nil, 66, 67, nil, nil, 68, nil, nil, nil, nil, - nil, 50, nil, nil, nil, nil, nil, nil, nil, nil, - 242, nil, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, 81, 82, 83, 85, 65, 92, 106, - 107, 71, 72, 44, 45, nil, 75, nil, 73, 74, - 76, 33, 34, 79, 80, nil, nil, nil, nil, nil, - 84, 31, 30, 114, 113, 115, 116, nil, nil, 244, - nil, nil, nil, nil, nil, nil, 51, nil, nil, 118, - 117, 119, 108, 64, 110, 109, 111, nil, 112, 120, - 121, nil, 104, 105, 47, 48, 46, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 237, nil, nil, 243, - nil, nil, 66, 67, nil, nil, 68, nil, nil, nil, - nil, nil, 50, nil, nil, nil, nil, nil, nil, nil, - nil, 242, nil, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 81, 82, 83, 85, 65, 92, - 106, 107, 71, 72, 44, 45, nil, 75, nil, 73, - 74, 76, 344, 345, 79, 80, nil, nil, nil, nil, - nil, 84, 339, 347, 114, 113, 115, 116, nil, nil, - 244, nil, nil, nil, nil, nil, nil, 51, nil, nil, - 118, 117, 119, 108, 64, 110, 109, 111, 317, 112, - 120, 121, nil, 104, 105, 47, 48, 46, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 237, nil, nil, - 243, nil, nil, 66, 67, nil, nil, 68, nil, 742, - nil, 312, nil, 50, nil, nil, 318, nil, nil, nil, - nil, nil, 242, nil, nil, nil, nil, 102, 315, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 81, 82, 83, 85, 65, - 92, 106, 107, 71, 72, 44, 515, nil, 75, nil, - 73, 74, 76, 344, 345, 79, 80, nil, nil, nil, - nil, nil, 84, 339, 347, 114, 113, 115, 116, nil, - nil, 244, nil, nil, nil, nil, nil, nil, 51, nil, - nil, 118, 117, 119, 108, 64, 110, 109, 111, nil, - 112, 120, 121, nil, 104, 105, 47, 48, 46, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 237, nil, - nil, 243, nil, nil, 66, 67, nil, nil, 68, nil, - nil, nil, nil, nil, 50, nil, nil, nil, nil, nil, - nil, nil, nil, 242, nil, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, 81, 82, 83, 85, - 65, 92, 106, 107, 71, 72, 44, 45, nil, 75, - nil, 73, 74, 76, 344, 345, 79, 80, nil, nil, - nil, nil, nil, 84, 339, 347, 114, 113, 115, 116, - nil, nil, 244, nil, nil, nil, nil, nil, nil, 51, - nil, nil, 118, 117, 119, 108, 64, 110, 109, 111, - nil, 112, 120, 121, nil, 104, 105, 47, 48, 46, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 237, - nil, nil, 243, nil, nil, 66, 67, nil, nil, 68, - nil, nil, nil, nil, nil, 50, nil, nil, nil, nil, - nil, nil, nil, nil, 242, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, 81, 82, 83, - 85, 65, 92, 106, 107, 71, 72, 44, 45, nil, - 75, nil, 73, 74, 76, 344, 345, 79, 80, nil, - nil, nil, nil, nil, 84, 339, 347, 114, 113, 115, - 116, nil, nil, 244, nil, nil, nil, nil, nil, nil, - 51, nil, nil, 118, 117, 119, 108, 64, 110, 109, - 111, nil, 112, 120, 121, nil, 104, 105, 47, 48, - 46, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 237, nil, nil, 243, nil, nil, 66, 67, nil, nil, - 68, nil, 434, nil, nil, nil, 50, nil, nil, nil, - nil, nil, nil, nil, nil, 242, nil, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, 81, 82, - 83, 85, 65, 92, 106, 107, 71, 72, 44, 45, - nil, 75, nil, 73, 74, 76, 344, 345, 79, 80, - nil, nil, nil, nil, nil, 84, 339, 347, 114, 113, - 115, 116, nil, nil, 244, nil, nil, nil, nil, nil, - nil, 51, nil, nil, 118, 117, 119, 108, 64, 110, - 109, 111, nil, 112, 120, 121, nil, 104, 105, 47, - 48, 46, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 237, nil, nil, 243, nil, nil, 66, 67, nil, - nil, 68, nil, nil, nil, nil, nil, 50, nil, nil, - nil, nil, nil, nil, nil, nil, 242, nil, nil, nil, - nil, 102, 90, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, 81, - 82, 83, 85, 65, 92, 106, 107, 71, 72, 44, - 45, nil, 75, nil, 73, 74, 76, 33, 34, 79, - 80, nil, nil, nil, nil, nil, 84, 31, 30, 114, - 113, 115, 116, nil, nil, 21, nil, nil, nil, nil, - nil, nil, 51, nil, nil, 118, 117, 119, 108, 64, - 110, 109, 111, nil, 112, 120, 121, nil, 104, 105, - 47, 48, 46, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 237, nil, nil, 243, nil, nil, 66, 67, - nil, nil, 68, nil, nil, nil, nil, nil, 50, nil, - nil, nil, nil, nil, nil, nil, nil, 22, nil, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - 81, 82, 83, 85, 65, 92, 106, 107, 71, 72, - 44, 45, nil, 75, nil, 73, 74, 76, 344, 345, - 79, 80, nil, nil, nil, nil, nil, 84, 339, 347, - 114, 113, 115, 116, nil, nil, 244, nil, nil, nil, - nil, nil, nil, 51, nil, nil, 118, 117, 119, 108, - 64, 110, 109, 111, nil, 112, 120, 121, nil, 104, - 105, 47, 48, 46, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 237, nil, nil, 243, nil, nil, 66, - 67, nil, nil, 68, nil, nil, nil, nil, nil, 50, - nil, nil, nil, nil, nil, nil, nil, nil, 242, nil, - nil, nil, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, 81, 82, 83, 85, 65, 92, 106, 107, 71, - 72, 44, 45, nil, 75, nil, 73, 74, 76, 33, - 34, 79, 80, nil, nil, nil, nil, nil, 84, 31, - 30, 114, 113, 115, 116, nil, nil, 244, nil, nil, - nil, nil, nil, nil, 51, nil, nil, 118, 117, 119, - 108, 64, 110, 109, 111, nil, 112, 120, 121, nil, - 104, 105, 47, 48, 46, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 237, nil, nil, 243, nil, nil, - 66, 67, nil, nil, 68, nil, nil, nil, nil, nil, - 50, nil, nil, nil, nil, nil, nil, nil, nil, 242, - nil, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - nil, nil, 81, 82, 83, 85, 65, 92, 106, 107, - 71, 72, 44, 45, nil, 75, nil, 73, 74, 76, - 344, 345, 79, 80, nil, nil, nil, nil, nil, 84, - 339, 347, 114, 113, 115, 116, nil, nil, 244, nil, - nil, nil, nil, nil, nil, 51, nil, nil, 118, 117, - 119, 108, 64, 110, 109, 111, nil, 112, 120, 121, - nil, 104, 105, 47, 48, 46, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 237, nil, nil, 243, nil, - nil, 66, 67, nil, nil, 68, nil, nil, nil, nil, - nil, 50, nil, nil, nil, nil, nil, nil, nil, nil, - 242, nil, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, 81, 82, 83, 85, 65, 92, 106, - 107, 71, 72, 44, 45, nil, 75, nil, 73, 74, - 76, 344, 345, 79, 80, nil, nil, nil, nil, nil, - 84, 339, 347, 114, 113, 115, 116, nil, nil, 244, - nil, nil, nil, nil, nil, nil, 51, nil, nil, 118, - 117, 119, 108, 64, 110, 109, 111, nil, 112, 120, - 121, nil, 104, 105, 47, 48, 46, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 237, nil, nil, 243, - nil, nil, 66, 67, nil, nil, 68, nil, nil, nil, - nil, nil, 50, nil, nil, nil, nil, nil, nil, nil, - nil, 242, nil, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 81, 82, 83, 85, 65, 92, - 106, 107, 71, 72, 44, 45, nil, 75, nil, 73, - 74, 76, 344, 345, 79, 80, nil, nil, nil, nil, - nil, 84, 339, 347, 114, 113, 115, 116, nil, nil, - 244, nil, nil, nil, nil, nil, nil, 51, nil, nil, - 118, 117, 119, 108, 64, 110, 109, 111, nil, 112, - 120, 121, nil, 104, 105, 47, 48, 46, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 237, nil, nil, - 243, nil, nil, 66, 67, nil, nil, 68, nil, nil, - nil, nil, nil, 50, nil, nil, nil, nil, nil, nil, - nil, nil, 242, nil, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 81, 82, 83, 85, 65, - 92, 106, 107, 71, 72, 44, 45, nil, 75, nil, - 73, 74, 76, 344, 345, 79, 80, nil, nil, nil, - nil, nil, 84, 339, 347, 114, 113, 115, 116, nil, - nil, 244, nil, nil, nil, nil, nil, nil, 51, nil, - nil, 118, 117, 119, 108, 64, 110, 109, 111, nil, - 112, 120, 121, nil, 104, 105, 47, 48, 46, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 237, nil, - nil, 243, nil, nil, 66, 67, nil, nil, 68, nil, - nil, nil, nil, nil, 50, nil, nil, nil, nil, nil, - nil, nil, nil, 242, nil, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, 81, 82, 83, 85, - 65, 92, 106, 107, 71, 72, 44, 45, nil, 75, - nil, 73, 74, 76, 344, 345, 79, 80, nil, nil, - nil, nil, nil, 84, 339, 347, 114, 113, 115, 116, - nil, nil, 244, nil, nil, nil, nil, nil, nil, 51, - nil, nil, 118, 117, 119, 108, 64, 110, 109, 111, - nil, 112, 120, 121, nil, 104, 105, 47, 48, 46, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 237, - nil, nil, 243, nil, nil, 66, 67, nil, nil, 68, - nil, nil, nil, nil, nil, 50, nil, nil, nil, nil, - nil, nil, nil, nil, 242, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, 81, 82, 83, - 85, 65, 92, 106, 107, 71, 72, 44, 45, nil, - 75, nil, 73, 74, 76, 344, 345, 79, 80, nil, - nil, nil, nil, nil, 84, 339, 347, 114, 113, 115, - 116, nil, nil, 244, nil, nil, nil, nil, nil, nil, - 51, nil, nil, 118, 117, 119, 108, 64, 110, 109, - 111, nil, 112, 120, 121, nil, 104, 105, 47, 48, - 46, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 237, nil, nil, 243, nil, nil, 66, 67, nil, nil, - 68, nil, nil, nil, nil, nil, 50, nil, nil, nil, - nil, nil, nil, nil, nil, 242, nil, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, 81, 82, - 83, 85, 65, 92, 106, 107, 71, 72, 44, 45, - nil, 75, nil, 73, 74, 76, 344, 345, 79, 80, - nil, nil, nil, nil, nil, 84, 339, 347, 114, 113, - 115, 116, nil, nil, 244, nil, nil, nil, nil, nil, - nil, 51, nil, nil, 118, 117, 119, 108, 64, 110, - 109, 111, nil, 112, 120, 121, nil, 104, 105, 47, - 48, 46, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 237, nil, nil, 243, nil, nil, 66, 67, nil, - nil, 68, nil, nil, nil, nil, nil, 50, nil, nil, - nil, nil, nil, nil, nil, nil, 242, nil, nil, nil, - nil, 102, 90, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, 81, - 82, 83, 85, 65, 92, 106, 107, 71, 72, 44, - 45, nil, 75, nil, 73, 74, 76, 33, 34, 79, - 80, nil, nil, nil, nil, nil, 84, 31, 30, 114, - 113, 115, 116, nil, nil, 21, nil, nil, nil, nil, - nil, nil, 51, nil, nil, 118, 117, 119, 108, 64, - 110, 109, 111, nil, 112, 120, 121, nil, 104, 105, - 47, 48, 46, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 237, nil, nil, 243, nil, nil, 66, 67, - nil, nil, 68, nil, nil, nil, nil, nil, 50, nil, - nil, nil, nil, nil, nil, nil, nil, 22, nil, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - 81, 82, 83, 85, 65, 92, 106, 107, 71, 72, - 44, 45, nil, 75, nil, 73, 74, 76, 344, 345, - 79, 80, nil, nil, nil, nil, nil, 84, 339, 347, - 114, 113, 115, 116, nil, nil, 244, nil, nil, nil, - nil, nil, nil, 51, nil, nil, 118, 117, 119, 108, - 64, 110, 109, 111, nil, 112, 120, 121, nil, 104, - 105, 47, 48, 46, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 237, nil, nil, 243, nil, nil, 66, - 67, nil, nil, 68, nil, 742, nil, nil, nil, 50, - nil, nil, nil, nil, nil, nil, nil, nil, 242, nil, - nil, nil, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, 81, 82, 83, 85, 65, 92, 106, 107, 71, - 72, 44, 45, nil, 75, nil, 73, 74, 76, 344, - 345, 79, 80, nil, nil, nil, nil, nil, 84, 339, - 347, 114, 113, 115, 116, nil, nil, 244, nil, nil, - nil, nil, nil, nil, 51, nil, nil, 118, 117, 119, - 108, 64, 110, 109, 111, 317, 112, 120, 121, nil, - 104, 105, 47, 48, 46, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 237, nil, nil, 243, nil, nil, - 66, 67, nil, nil, 68, nil, nil, nil, 312, nil, - 50, nil, nil, 318, nil, nil, nil, nil, nil, 242, - nil, nil, nil, nil, 102, 315, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - nil, nil, 81, 82, 83, 85, 65, 92, 106, 107, - 71, 72, 44, 45, nil, 75, nil, 73, 74, 76, - 344, 345, 79, 80, nil, nil, nil, nil, nil, 84, - 339, 347, 114, 113, 115, 116, nil, nil, 244, nil, - nil, nil, nil, nil, nil, 51, nil, nil, 118, 117, - 119, 108, 64, 110, 109, 111, nil, 112, 120, 121, - nil, 104, 105, 47, 48, 46, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 237, nil, nil, 243, nil, - nil, 66, 67, nil, nil, 68, nil, nil, nil, nil, - nil, 50, nil, nil, nil, nil, nil, nil, nil, nil, - 242, nil, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, 81, 82, 83, 85, 65, 92, 106, - 107, 71, 72, 44, 45, nil, 75, nil, 73, 74, - 76, 33, 34, 79, 80, nil, nil, nil, nil, nil, - 84, 31, 30, 114, 113, 115, 116, nil, nil, 21, - nil, nil, nil, nil, nil, nil, 51, nil, nil, 118, - 117, 119, 108, 64, 110, 109, 111, nil, 112, 120, - 121, nil, 104, 105, 47, 48, 46, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 237, nil, nil, 243, - nil, nil, 66, 67, nil, nil, 68, nil, nil, nil, - nil, nil, 50, nil, nil, nil, nil, nil, nil, nil, - nil, 22, nil, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 81, 82, 83, 85, 65, 92, - 106, 107, 71, 72, 44, 45, nil, 75, nil, 73, - 74, 76, 33, 34, 79, 80, nil, nil, nil, nil, - nil, 84, 31, 30, 114, 113, 115, 116, nil, nil, - 21, nil, nil, nil, nil, nil, nil, 51, nil, nil, - 118, 117, 119, 108, 64, 110, 109, 111, nil, 112, - 120, 121, nil, 104, 105, 47, 48, 46, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 237, nil, nil, - 243, nil, nil, 66, 67, nil, nil, 68, nil, nil, - nil, nil, nil, 50, nil, nil, nil, nil, nil, nil, - nil, nil, 22, nil, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 81, 82, 83, 85, 65, - 92, 106, 107, 71, 72, 44, 45, nil, 75, nil, - 73, 74, 76, 33, 34, 79, 80, nil, nil, nil, - nil, nil, 84, 31, 30, 114, 113, 115, 116, nil, - nil, 244, nil, nil, nil, nil, nil, nil, 51, nil, - nil, 118, 117, 119, 108, 64, 110, 109, 111, 317, - 112, 120, 121, nil, 104, 105, 47, 48, 46, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 237, nil, - nil, 243, nil, nil, 66, 67, nil, nil, 68, nil, - 314, nil, 312, nil, 50, nil, nil, 318, nil, nil, - nil, nil, nil, 242, nil, nil, nil, nil, 102, 315, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, 81, 82, 83, 85, - 65, 92, 106, 107, 71, 72, 44, 45, nil, 75, - nil, 73, 74, 76, 344, 345, 79, 80, nil, nil, - nil, nil, nil, 84, 339, 347, 114, 113, 115, 116, - nil, nil, 244, nil, nil, nil, nil, nil, nil, 340, - nil, nil, 118, 117, 119, 108, 64, 110, 109, 111, - nil, 112, 120, 121, nil, 104, 105, nil, nil, 348, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 336, - nil, nil, 332, nil, nil, 66, 67, nil, nil, 68, - nil, 331, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, 81, 82, 83, - 85, 65, 92, 106, 107, 71, 72, nil, nil, nil, - 75, nil, 73, 74, 76, 344, 345, 79, 80, nil, - nil, nil, nil, nil, 84, 339, 347, 114, 113, 115, - 116, nil, nil, 244, nil, nil, nil, nil, nil, nil, - 340, nil, nil, 118, 117, 119, 108, 64, 110, 109, - 111, nil, 112, 120, 121, nil, 104, 105, nil, nil, - 348, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 336, nil, nil, 243, nil, nil, 66, 67, nil, nil, - 68, nil, nil, 582, nil, 579, 578, 577, 587, 580, - nil, nil, nil, nil, nil, nil, nil, nil, 590, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, 350, nil, - 585, 85, nil, 92, 106, 107, 81, 82, 83, nil, - 65, 598, 597, nil, 71, 72, 591, nil, nil, 75, - nil, 73, 74, 76, 344, 345, 79, 80, nil, nil, - nil, nil, nil, 84, 339, 347, 114, 113, 115, 116, - nil, nil, 244, nil, nil, nil, nil, nil, nil, 340, - nil, nil, 118, 117, 119, 108, 64, 110, 109, 111, - nil, 112, 120, 121, nil, 104, 105, nil, nil, 348, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 393, - nil, nil, 36, nil, nil, 66, 67, nil, nil, 68, - nil, 38, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, 81, 82, 83, - 85, 65, 92, 106, 107, 71, 72, nil, nil, nil, - 75, nil, 73, 74, 76, 344, 345, 79, 80, nil, - nil, nil, nil, nil, 84, 339, 347, 114, 113, 115, - 116, nil, nil, 244, nil, nil, nil, nil, nil, nil, - 340, nil, nil, 118, 117, 119, 398, 64, 110, 109, - 399, nil, 112, 120, 121, nil, 104, 105, nil, nil, - 348, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 405, nil, nil, - 400, nil, nil, 243, nil, nil, 66, 67, nil, nil, - 68, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, 81, 82, - 83, 85, 65, 92, 106, 107, 71, 72, nil, nil, - nil, 75, nil, 73, 74, 76, 344, 345, 79, 80, - nil, nil, nil, nil, nil, 84, 339, 347, 114, 113, - 115, 116, nil, nil, 244, nil, nil, nil, nil, nil, - nil, 340, nil, nil, 118, 117, 119, 398, 64, 110, - 109, 399, nil, 112, 120, 121, nil, 104, 105, nil, - nil, 348, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 400, nil, nil, 243, nil, nil, 66, 67, nil, - nil, 68, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 102, 90, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, 81, - 82, 83, 85, 65, 92, 106, 107, 71, 72, nil, - nil, nil, 75, nil, 73, 74, 76, 344, 345, 79, - 80, nil, nil, nil, nil, nil, 84, 339, 347, 114, - 113, 115, 116, nil, nil, 244, nil, nil, nil, nil, - nil, nil, 340, nil, nil, 118, 117, 119, 108, 64, - 110, 109, 111, nil, 112, 120, 121, nil, 104, 105, - nil, nil, 348, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 336, nil, nil, 243, nil, nil, 66, 67, - nil, nil, 68, nil, nil, 582, nil, 579, 578, 577, - 587, 580, nil, nil, nil, nil, nil, nil, nil, nil, - 590, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - 543, nil, 585, 85, nil, 92, 106, 107, 81, 82, - 83, nil, 65, 598, 597, nil, 71, 72, 591, nil, - nil, 75, nil, 73, 74, 76, 344, 345, 79, 80, - nil, nil, nil, nil, nil, 84, 339, 347, 114, 113, - 115, 116, nil, nil, 244, nil, nil, nil, nil, nil, - nil, 340, nil, nil, 118, 117, 119, 108, 64, 110, - 109, 111, nil, 112, 120, 121, nil, 104, 105, nil, - nil, 348, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 336, nil, nil, 332, nil, nil, 66, 67, nil, - nil, 68, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 102, 90, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, 81, - 82, 83, 85, 65, 92, 106, 107, 71, 72, nil, - nil, nil, 75, nil, 73, 74, 76, 344, 345, 79, - 80, nil, nil, nil, nil, nil, 84, 339, 347, 114, - 113, 115, 116, nil, nil, 244, nil, nil, nil, nil, - nil, nil, 340, nil, nil, 118, 117, 119, 108, 64, - 110, 109, 111, nil, 112, 120, 121, nil, 104, 105, - nil, nil, 348, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 336, nil, nil, 332, nil, nil, 66, 67, - nil, nil, 68, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - 81, 82, 83, 85, 65, 92, 106, 107, 71, 72, - nil, nil, nil, 75, nil, 73, 74, 76, 344, 345, - 79, 80, nil, nil, nil, nil, nil, 84, 339, 347, - 114, 113, 115, 116, nil, nil, 244, nil, nil, nil, - nil, nil, nil, 340, nil, nil, 118, 117, 119, 108, - 64, 110, 109, 111, nil, 112, 120, 121, nil, 104, - 105, nil, nil, 348, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 336, nil, nil, 332, nil, nil, 66, - 67, nil, nil, 68, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, 81, 82, 83, 85, 65, 92, 106, 107, 71, - 72, nil, nil, nil, 75, nil, 73, 74, 76, 344, - 345, 79, 80, nil, nil, nil, nil, nil, 84, 339, - 347, 114, 113, 115, 116, nil, nil, 244, nil, nil, - nil, nil, nil, nil, 340, nil, nil, 118, 117, 119, - 108, 64, 110, 109, 111, nil, 112, 120, 121, nil, - 104, 105, nil, nil, 348, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 336, nil, nil, 332, nil, nil, - 66, 67, nil, nil, 68, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - nil, nil, 81, 82, 83, 85, 65, 92, 106, 107, - 71, 72, nil, nil, nil, 75, nil, 73, 74, 76, - 344, 345, 79, 80, nil, nil, nil, nil, nil, 84, - 339, 347, 114, 113, 115, 116, nil, nil, 244, nil, - nil, nil, nil, nil, nil, 340, nil, nil, 118, 117, - 119, 108, 64, 110, 109, 111, nil, 112, 120, 121, - nil, 104, 105, nil, nil, 348, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 336, nil, nil, 332, nil, - nil, 66, 67, nil, nil, 68, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, 81, 82, 83, 85, 65, 92, 106, - 107, 71, 72, nil, nil, nil, 75, nil, 73, 74, - 76, 344, 345, 79, 80, nil, nil, nil, nil, nil, - 84, 339, 347, 114, 113, 115, 116, nil, nil, 244, - nil, nil, nil, nil, nil, nil, 340, nil, nil, 118, - 117, 119, 108, 64, 110, 109, 111, nil, 112, 120, - 121, nil, 104, 105, nil, nil, 348, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 1105, nil, nil, 243, - nil, nil, 66, 67, nil, nil, 68, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 81, 82, 83, 85, 65, 92, - 106, 107, 71, 72, nil, nil, nil, 75, nil, 73, - 74, 76, 344, 345, 79, 80, nil, nil, nil, nil, - nil, 84, 339, 347, 114, 113, 115, 116, nil, nil, - 244, nil, nil, nil, nil, nil, nil, 340, nil, nil, - 118, 117, 119, 108, 64, 110, 109, 111, nil, 112, - 120, 121, nil, 104, 105, nil, nil, 348, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 1111, nil, nil, - 243, nil, nil, 66, 67, nil, nil, 68, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 81, 82, 83, 85, 65, - 92, 106, 107, 71, 72, nil, nil, nil, 75, nil, - 73, 74, 76, 344, 345, 79, 80, nil, nil, nil, - nil, nil, 84, 339, 347, 114, 113, 115, 116, nil, - nil, 244, nil, nil, nil, nil, nil, nil, 340, nil, - nil, 118, 117, 119, 108, 64, 110, 109, 111, nil, - 112, 120, 121, nil, 104, 105, nil, nil, 348, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 1105, nil, - nil, 243, nil, nil, 66, 67, nil, nil, 68, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, nil, nil, nil, 85, - nil, 92, 106, 107, 185, 196, 186, 209, 182, 202, - 192, 191, 212, 213, 207, 190, 189, 184, 210, 214, - 215, 194, 183, 197, 201, 203, 195, 188, nil, nil, - nil, 204, 211, 206, 205, 198, 208, 193, 181, 200, - 199, nil, nil, nil, nil, nil, 180, 187, 178, 179, - 175, 176, 177, 138, 140, 137, nil, 139, nil, nil, - nil, nil, nil, nil, nil, 169, 170, nil, 166, 148, - 149, 150, 157, 154, 156, nil, nil, 151, 152, nil, - nil, nil, 171, 172, 158, 159, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 163, - 162, nil, 147, 168, 165, 164, 173, 160, 161, 155, - 153, 145, 167, 146, nil, nil, 174, 102, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 101, 185, 196, 186, 209, 182, 202, 192, 191, - 212, 213, 207, 190, 189, 184, 210, 214, 215, 194, - 183, 197, 201, 203, 195, 188, nil, nil, nil, 204, - 211, 206, 205, 198, 208, 193, 181, 200, 199, nil, - nil, nil, nil, nil, 180, 187, 178, 179, 175, 176, - 177, 138, 140, nil, nil, 139, nil, nil, nil, nil, - nil, nil, nil, 169, 170, nil, 166, 148, 149, 150, - 157, 154, 156, nil, nil, 151, 152, nil, nil, nil, - 171, 172, 158, 159, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 163, 162, nil, - 147, 168, 165, 164, 173, 160, 161, 155, 153, 145, - 167, 146, nil, nil, 174, 102, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 101, - 185, 196, 186, 209, 182, 202, 192, 191, 212, 213, - 207, 190, 189, 184, 210, 214, 215, 194, 183, 197, - 201, 203, 195, 188, nil, nil, nil, 204, 211, 206, - 205, 198, 208, 193, 181, 200, 199, nil, nil, nil, - nil, nil, 180, 187, 178, 179, 175, 176, 177, 138, - 140, nil, nil, 139, nil, nil, nil, nil, nil, nil, - nil, 169, 170, nil, 166, 148, 149, 150, 157, 154, - 156, nil, nil, 151, 152, nil, nil, nil, 171, 172, - 158, 159, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 163, 162, nil, 147, 168, - 165, 164, 173, 160, 161, 155, 153, 145, 167, 146, - nil, nil, 174, 102, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 101, 185, 196, - 186, 209, 182, 202, 192, 191, 212, 213, 207, 190, - 189, 184, 210, 214, 215, 194, 183, 197, 201, 203, - 195, 188, nil, nil, nil, 204, 211, 206, 205, 198, - 208, 193, 181, 200, 199, nil, nil, nil, nil, nil, - 180, 187, 178, 179, 175, 176, 177, 138, 140, nil, - nil, 139, nil, nil, nil, nil, nil, nil, nil, 169, - 170, nil, 166, 148, 149, 150, 157, 154, 156, nil, - nil, 151, 152, nil, nil, nil, 171, 172, 158, 159, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 163, 162, nil, 147, 168, 165, 164, - 173, 160, 161, 155, 153, 145, 167, 146, nil, nil, - 174, 102, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 101, 185, 196, 186, 209, - 182, 202, 192, 191, 212, 213, 207, 190, 189, 184, - 210, 214, 215, 194, 183, 197, 201, 203, 195, 188, - nil, nil, nil, 204, 211, 206, 284, 283, 285, 282, - 181, 200, 199, nil, nil, nil, nil, nil, 180, 187, - 178, 179, 279, 280, 281, 277, 140, 110, 109, 278, - nil, 112, nil, nil, nil, nil, nil, 169, 170, nil, - 166, 148, 149, 150, 157, 154, 156, nil, nil, 151, - 152, nil, nil, nil, 171, 172, 158, 159, nil, nil, - nil, nil, nil, 289, nil, nil, nil, nil, nil, nil, - nil, 163, 162, nil, 147, 168, 165, 164, 173, 160, - 161, 155, 153, 145, 167, 146, nil, nil, 174, 114, - 113, 115, 116, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 118, 117, 119, 719, nil, - nil, 582, 722, 579, 578, 577, 587, 580, 104, 105, - nil, nil, 348, nil, nil, nil, 590, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 721, nil, nil, 703, nil, nil, 585, 701, - nil, nil, 702, nil, nil, nil, nil, 595, 594, 598, - 597, nil, nil, nil, 591, nil, nil, nil, 720, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, 114, 113, 115, - 116, nil, nil, 85, nil, 92, 106, 107, nil, nil, - 707, 708, nil, 118, 117, 119, 719, nil, nil, 582, - 722, 579, 578, 577, 587, 580, 104, 105, nil, nil, - 348, nil, nil, nil, 590, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 721, nil, nil, 703, nil, nil, 585, 701, nil, nil, - 702, nil, nil, nil, nil, 595, 594, 598, 597, nil, - nil, nil, 591, nil, nil, nil, 720, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, 114, 113, 115, 116, nil, - nil, 85, nil, 92, 106, 107, nil, nil, 707, 708, - nil, 118, 117, 119, 719, nil, nil, 582, 722, 579, - 578, 577, 587, 580, 104, 105, nil, nil, 348, nil, - nil, nil, 590, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 721, nil, - nil, 703, nil, nil, 585, 701, nil, nil, 702, nil, - 885, nil, nil, 595, 594, 598, 597, nil, nil, nil, - 591, nil, nil, nil, 720, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, 232, nil, nil, nil, nil, nil, 85, - nil, 92, 106, 107, nil, nil, 707, 708, 185, 196, - 186, 209, 182, 202, 192, 191, 212, 213, 207, 190, - 189, 184, 210, 214, 215, 194, 183, 197, 201, 203, - 195, 188, nil, nil, nil, 204, 211, 206, 205, 198, - 208, 193, 181, 200, 199, nil, nil, nil, nil, nil, - 180, 187, 178, 179, 175, 176, 177, 138, 140, nil, - nil, 139, nil, nil, nil, nil, nil, nil, nil, 169, - 170, nil, 166, 148, 149, 150, 157, 154, 156, nil, - nil, 151, 152, nil, nil, nil, 171, 172, 158, 159, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 163, 162, nil, 147, 168, 165, 164, - 173, 160, 161, 155, 153, 145, 167, 146, nil, nil, - 174, 114, 113, 115, 116, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 118, 117, 119, - 719, nil, nil, 582, 722, 579, 578, 577, 587, 580, - 104, 105, nil, nil, 348, nil, nil, nil, 590, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 721, nil, nil, 703, nil, nil, - 585, 701, nil, nil, 702, nil, nil, nil, nil, 595, - 594, 598, 597, nil, nil, nil, 591, nil, nil, nil, - 720, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, 114, - 113, 115, 116, nil, nil, 85, nil, 92, 106, 107, - nil, nil, 707, 708, nil, 118, 117, 119, 719, nil, - nil, nil, 722, 986, nil, nil, nil, nil, 104, 105, - nil, nil, 348, 590, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 721, nil, nil, 703, nil, nil, nil, 701, - nil, nil, 702, nil, 885, nil, nil, nil, nil, nil, - nil, 591, nil, nil, nil, nil, nil, nil, 720, nil, - nil, nil, 102, 987, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, 114, 113, 115, - 116, nil, nil, 85, nil, 92, 106, 107, nil, nil, - 707, 708, nil, 118, 117, 119, 719, nil, nil, nil, - 722, 986, nil, nil, nil, nil, 104, 105, nil, nil, - 348, 590, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 721, nil, nil, 703, nil, nil, nil, 701, nil, nil, - 702, nil, 885, nil, nil, nil, nil, nil, nil, 591, - nil, nil, nil, nil, nil, nil, 720, nil, nil, nil, - 102, 987, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, 114, 113, 115, 116, nil, - nil, 85, nil, 92, 106, 107, nil, nil, 707, 708, - nil, 118, 117, 119, 719, nil, nil, 582, 722, 579, - 578, 577, 587, 580, 104, 105, nil, nil, 348, nil, - nil, nil, 590, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 721, nil, - nil, 703, nil, nil, 585, 701, nil, nil, 702, nil, - 999, nil, nil, nil, nil, 598, 597, nil, nil, nil, - 591, nil, nil, nil, 720, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, 114, 113, 115, 116, nil, nil, 85, - nil, 92, 106, 107, nil, nil, 707, 708, nil, 118, - 117, 119, 719, nil, nil, 582, 722, 579, 578, 577, - 587, 580, 104, 105, nil, nil, 348, nil, nil, nil, - 590, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 721, nil, nil, 703, - nil, nil, 585, 701, nil, nil, 702, nil, nil, nil, - nil, 595, 594, 598, 597, nil, nil, nil, 591, nil, - nil, nil, 720, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, 114, 113, 115, 116, nil, nil, 85, nil, 92, - 106, 107, nil, nil, 707, 708, nil, 118, 117, 119, - 719, nil, nil, nil, 722, 986, nil, nil, nil, nil, - 104, 105, nil, nil, 348, 590, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 721, nil, nil, 703, nil, nil, - nil, 701, nil, nil, 702, nil, 885, nil, nil, nil, - nil, nil, nil, 591, nil, nil, nil, nil, nil, nil, - 720, nil, nil, nil, 102, 987, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, 114, - 113, 115, 116, nil, nil, 85, nil, 92, 106, 107, - nil, nil, 707, 708, nil, 118, 117, 119, 719, nil, - nil, 582, 722, 579, 578, 577, 587, 580, 104, 105, - nil, nil, 348, nil, nil, nil, 590, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 721, nil, nil, 703, nil, nil, 585, 701, - nil, nil, 702, nil, nil, nil, nil, 595, 594, 598, - 597, nil, nil, nil, 591, nil, nil, nil, 720, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, 114, 113, 115, - 116, nil, nil, 85, nil, 92, 106, 107, nil, nil, - 707, 708, nil, 118, 117, 119, 719, nil, nil, 582, - 722, 579, 578, 577, 587, 580, 104, 105, nil, nil, - 348, nil, nil, nil, 590, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 721, nil, nil, 703, nil, nil, 585, 701, nil, nil, - 702, nil, nil, nil, nil, nil, nil, 598, 597, nil, - nil, nil, 591, nil, nil, nil, 720, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, 114, 113, 115, 116, nil, - nil, 85, nil, 92, 106, 107, nil, nil, 707, 708, - nil, 118, 117, 119, 719, nil, nil, 582, 722, 579, - 578, 577, 587, 580, 104, 105, nil, nil, 348, nil, - nil, nil, 590, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 721, nil, - nil, 703, nil, nil, 585, 701, nil, nil, 702, nil, - nil, nil, nil, nil, nil, 598, 597, nil, nil, nil, - 591, nil, nil, nil, 720, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, 114, 113, 115, 116, nil, nil, 85, - nil, 92, 106, 107, nil, nil, 707, 708, nil, 118, - 117, 119, 719, nil, nil, 582, 722, 579, 578, 577, - 587, 580, 104, 105, nil, nil, 348, nil, nil, nil, - 590, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 721, nil, nil, 703, - nil, nil, 585, 701, nil, nil, 702, nil, 885, nil, - nil, 595, 594, 598, 597, nil, nil, nil, 591, nil, - nil, nil, 720, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, 114, 113, 115, 116, nil, nil, 85, nil, 92, - 106, 107, nil, nil, 707, 708, nil, 118, 117, 119, - 719, nil, nil, 582, 722, 579, 578, 577, 587, 580, - 104, 105, nil, nil, 348, nil, nil, nil, 590, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 721, nil, nil, 703, nil, nil, - 585, 701, nil, nil, 702, nil, nil, nil, nil, nil, - nil, 598, 597, nil, nil, nil, 591, nil, nil, nil, - 720, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, 114, - 113, 115, 116, nil, nil, 85, nil, 92, 106, 107, - nil, nil, 707, 708, nil, 118, 117, 119, 719, nil, - nil, 582, 722, 579, 578, 577, 587, 580, 104, 105, - nil, nil, 348, nil, nil, nil, 590, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 721, nil, nil, 703, nil, nil, 585, 701, - nil, nil, 702, nil, 885, nil, nil, nil, nil, 598, - 597, nil, nil, nil, 591, nil, nil, nil, 720, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, 114, 113, 115, - 116, nil, nil, 85, nil, 92, 106, 107, nil, nil, - 707, 708, nil, 118, 117, 119, 719, nil, nil, 582, - 722, 579, 578, 577, 587, 580, 104, 105, nil, nil, - 348, nil, nil, nil, 590, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 721, nil, nil, 703, nil, nil, 585, 701, nil, nil, - 702, nil, nil, nil, nil, nil, nil, 598, 597, nil, - nil, nil, 591, nil, nil, nil, 720, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, 114, 113, 115, 116, nil, - nil, 85, nil, 92, 106, 107, nil, nil, 707, 708, - nil, 118, 117, 119, 719, nil, nil, nil, 722, nil, - nil, nil, nil, nil, 104, 105, nil, nil, 348, nil, - nil, nil, nil, nil, nil, nil, 114, 113, 115, 116, - nil, nil, nil, nil, nil, nil, nil, nil, 721, nil, - nil, 703, 118, 117, 119, 701, nil, nil, 702, nil, - nil, nil, nil, nil, nil, 104, 105, nil, nil, 348, - nil, nil, nil, nil, 720, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, nil, nil, nil, 85, - nil, 92, 106, 107, nil, nil, 707, 708, 582, nil, - 579, 578, 577, 587, 580, nil, nil, nil, nil, 102, - 90, 93, 94, 590, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, 114, 113, 115, 116, nil, nil, - 85, nil, 92, 106, 107, 585, nil, nil, nil, nil, - 118, 117, 119, nil, nil, nil, 598, 597, nil, nil, - nil, 591, nil, 104, 105, nil, nil, 348, 114, 113, - 115, 116, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 118, 117, 119, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 104, 105, nil, - nil, 348, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, nil, nil, nil, 85, nil, - 92, 106, 107, nil, nil, nil, nil, nil, nil, nil, - nil, 102, 90, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, 456, 460, nil, nil, - 457, nil, 85, nil, 92, 106, 107, nil, 169, 170, - nil, 166, 148, 149, 150, 157, 154, 156, nil, nil, - 151, 152, nil, nil, nil, 171, 172, 158, 159, nil, - nil, nil, nil, nil, 296, nil, nil, nil, nil, nil, - nil, nil, 163, 162, nil, 147, 168, 165, 164, 173, - 160, 161, 155, 153, 145, 167, 146, 463, 467, 174, - nil, 462, nil, nil, nil, nil, nil, nil, nil, 169, - 170, nil, 166, 148, 149, 150, 157, 154, 156, nil, - nil, 151, 152, nil, nil, nil, 171, 172, 158, 159, - nil, nil, nil, nil, nil, 296, nil, nil, nil, nil, - nil, nil, nil, 163, 162, nil, 147, 168, 165, 164, - 173, 160, 161, 155, 153, 145, 167, 146, 511, 460, - 174, nil, 512, nil, nil, nil, nil, nil, nil, nil, - 169, 170, nil, 166, 148, 149, 150, 157, 154, 156, - nil, nil, 151, 152, nil, nil, nil, 171, 172, 158, - 159, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 163, 162, nil, 147, 168, 165, - 164, 173, 160, 161, 155, 153, 145, 167, 146, 690, - 460, 174, nil, 691, nil, nil, nil, nil, nil, nil, - nil, 169, 170, nil, 166, 148, 149, 150, 157, 154, - 156, nil, nil, 151, 152, nil, nil, nil, 171, 172, - 158, 159, nil, nil, nil, nil, nil, 296, nil, nil, - nil, nil, nil, nil, nil, 163, 162, nil, 147, 168, - 165, 164, 173, 160, 161, 155, 153, 145, 167, 146, - 692, 467, 174, nil, 693, nil, nil, nil, nil, nil, - nil, nil, 169, 170, nil, 166, 148, 149, 150, 157, - 154, 156, nil, nil, 151, 152, nil, nil, nil, 171, - 172, 158, 159, nil, nil, nil, nil, nil, 296, nil, - nil, nil, nil, nil, nil, nil, 163, 162, nil, 147, - 168, 165, 164, 173, 160, 161, 155, 153, 145, 167, - 146, 752, 460, 174, nil, 753, nil, nil, nil, nil, - nil, nil, nil, 169, 170, nil, 166, 148, 149, 150, - 157, 154, 156, nil, nil, 151, 152, nil, nil, nil, - 171, 172, 158, 159, nil, nil, nil, nil, nil, 296, - nil, nil, nil, nil, nil, nil, nil, 163, 162, nil, - 147, 168, 165, 164, 173, 160, 161, 155, 153, 145, - 167, 146, 755, 467, 174, nil, 756, nil, nil, nil, - nil, nil, nil, nil, 169, 170, nil, 166, 148, 149, - 150, 157, 154, 156, nil, nil, 151, 152, nil, nil, - nil, 171, 172, 158, 159, nil, nil, nil, nil, nil, - 296, nil, nil, nil, nil, nil, nil, nil, 163, 162, - nil, 147, 168, 165, 164, 173, 160, 161, 155, 153, - 145, 167, 146, 690, 460, 174, nil, 691, nil, nil, - nil, nil, nil, nil, nil, 169, 170, nil, 166, 148, - 149, 150, 157, 154, 156, nil, nil, 151, 152, nil, - nil, nil, 171, 172, 158, 159, nil, nil, nil, nil, - nil, 296, nil, nil, nil, nil, nil, nil, nil, 163, - 162, nil, 147, 168, 165, 164, 173, 160, 161, 155, - 153, 145, 167, 146, 692, 467, 174, nil, 693, nil, - nil, nil, nil, nil, nil, nil, 169, 170, nil, 166, - 148, 149, 150, 157, 154, 156, nil, nil, 151, 152, - nil, nil, nil, 171, 172, 158, 159, nil, nil, nil, - nil, nil, 296, nil, nil, nil, nil, nil, nil, nil, - 163, 162, nil, 147, 168, 165, 164, 173, 160, 161, - 155, 153, 145, 167, 146, 814, 460, 174, nil, 815, - nil, nil, nil, nil, nil, nil, nil, 169, 170, nil, - 166, 148, 149, 150, 157, 154, 156, nil, nil, 151, - 152, nil, nil, nil, 171, 172, 158, 159, nil, nil, - nil, nil, nil, 296, nil, nil, nil, nil, nil, nil, - nil, 163, 162, nil, 147, 168, 165, 164, 173, 160, - 161, 155, 153, 145, 167, 146, 816, 467, 174, nil, - 817, nil, nil, nil, nil, nil, nil, nil, 169, 170, - nil, 166, 148, 149, 150, 157, 154, 156, nil, nil, - 151, 152, nil, nil, nil, 171, 172, 158, 159, nil, - nil, nil, nil, nil, 296, nil, nil, nil, nil, nil, - nil, nil, 163, 162, nil, 147, 168, 165, 164, 173, - 160, 161, 155, 153, 145, 167, 146, 819, 467, 174, - nil, 820, nil, nil, nil, nil, nil, nil, nil, 169, - 170, nil, 166, 148, 149, 150, 157, 154, 156, nil, - nil, 151, 152, nil, nil, nil, 171, 172, 158, 159, - nil, nil, nil, nil, nil, 296, nil, nil, nil, nil, - nil, nil, nil, 163, 162, nil, 147, 168, 165, 164, - 173, 160, 161, 155, 153, 145, 167, 146, 511, 460, - 174, nil, 512, nil, nil, nil, nil, nil, nil, nil, - 169, 170, nil, 166, 148, 149, 150, 157, 154, 156, - nil, nil, 151, 152, nil, nil, nil, 171, 172, 158, - 159, nil, nil, nil, nil, nil, 296, nil, nil, nil, - nil, nil, nil, nil, 163, 162, nil, 147, 168, 165, - 164, 173, 160, 161, 155, 153, 145, 167, 146, 846, - 460, 174, nil, 847, nil, nil, nil, nil, nil, nil, - nil, 169, 170, nil, 166, 148, 149, 150, 157, 154, - 156, nil, nil, 151, 152, nil, nil, nil, 171, 172, - 158, 159, nil, nil, nil, nil, nil, 296, nil, nil, - nil, nil, nil, nil, nil, 163, 162, nil, 147, 168, - 165, 164, 173, 160, 161, 155, 153, 145, 167, 146, - 849, 467, 174, nil, 848, nil, nil, nil, nil, nil, - nil, nil, 169, 170, nil, 166, 148, 149, 150, 157, - 154, 156, nil, nil, 151, 152, nil, nil, nil, 171, - 172, 158, 159, nil, nil, nil, nil, nil, 296, nil, - nil, nil, nil, nil, nil, nil, 163, 162, nil, 147, - 168, 165, 164, 173, 160, 161, 155, 153, 145, 167, - 146, 1190, 467, 174, nil, 1189, nil, nil, nil, nil, - nil, nil, nil, 169, 170, nil, 166, 148, 149, 150, - 157, 154, 156, nil, nil, 151, 152, nil, nil, nil, - 171, 172, 158, 159, nil, nil, nil, nil, nil, 296, - nil, nil, nil, nil, nil, nil, nil, 163, 162, nil, - 147, 168, 165, 164, 173, 160, 161, 155, 153, 145, - 167, 146, 1193, 460, 174, nil, 1194, nil, nil, nil, - nil, nil, nil, nil, 169, 170, nil, 166, 148, 149, - 150, 157, 154, 156, nil, nil, 151, 152, nil, nil, - nil, 171, 172, 158, 159, nil, nil, nil, nil, nil, - 296, nil, nil, nil, nil, nil, nil, nil, 163, 162, - nil, 147, 168, 165, 164, 173, 160, 161, 155, 153, - 145, 167, 146, 1195, 467, 174, nil, 1196, nil, nil, - nil, nil, nil, nil, nil, 169, 170, nil, 166, 148, - 149, 150, 157, 154, 156, nil, nil, 151, 152, nil, - nil, nil, 171, 172, 158, 159, nil, nil, nil, nil, - nil, 296, nil, nil, nil, nil, nil, nil, nil, 163, - 162, nil, 147, 168, 165, 164, 173, 160, 161, 155, - 153, 145, 167, 146, nil, nil, 174 ] - -racc_action_check = [ - 108, 472, 472, 508, 508, 52, 390, 108, 108, 108, - 1006, 382, 108, 108, 108, 18, 108, 29, 21, 999, - 5, 873, 18, 383, 108, 5, 108, 108, 108, 762, - 762, 18, 592, 414, 391, 394, 108, 108, 812, 108, - 108, 108, 108, 108, 1032, 1052, 1054, 1108, 1109, 872, - 592, 628, 1199, 1006, 1112, 622, 415, 873, 1, 21, - 69, 52, 1199, 622, 814, 815, 108, 108, 108, 108, - 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, - 18, 29, 108, 108, 108, 3, 108, 108, 619, 872, - 108, 827, 956, 108, 108, 472, 108, 508, 108, 414, - 108, 999, 108, 108, 29, 108, 108, 108, 108, 108, - 1158, 108, 111, 108, 1193, 390, 730, 638, 638, 111, - 111, 111, 415, 762, 111, 111, 111, 108, 111, 382, - 108, 108, 108, 108, 382, 108, 111, 108, 111, 111, - 111, 383, 108, 391, 394, 108, 383, 69, 111, 111, - 1194, 111, 111, 111, 111, 111, 812, 1195, 1206, 812, - 628, 812, 1032, 1052, 1054, 1108, 1109, 1032, 1052, 1054, - 1108, 1109, 1112, 814, 815, 816, 817, 1112, 111, 111, - 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, - 111, 111, 619, 1196, 111, 111, 111, 619, 111, 111, - 827, 956, 111, 730, 321, 111, 111, 702, 111, 321, - 111, 638, 111, 653, 111, 111, 638, 111, 111, 111, - 111, 111, 462, 111, 702, 111, 877, 235, 1158, 462, - 462, 462, 1193, 1158, 1195, 462, 462, 1193, 462, 111, - 816, 817, 111, 111, 111, 111, 462, 111, 27, 111, - 341, 53, 9, 409, 111, 27, 1056, 111, 462, 462, - 752, 462, 462, 462, 462, 462, 46, 46, 1194, 1061, - 1196, 1061, 877, 1194, 753, 1195, 1206, 653, 653, 236, - 1195, 1206, 348, 348, 816, 817, 235, 653, 462, 462, - 462, 462, 462, 462, 462, 462, 462, 462, 462, 462, - 462, 462, 1056, 276, 462, 462, 462, 53, 462, 462, - 276, 1196, 462, 27, 341, 462, 1196, 409, 409, 409, - 462, 12, 462, 655, 462, 462, 752, 462, 462, 462, - 462, 462, 238, 462, 463, 462, 988, 341, 236, 441, - 753, 463, 463, 463, 46, 46, 387, 463, 463, 462, - 463, 387, 462, 462, 988, 462, 14, 462, 463, 463, - 348, 348, 914, 478, 462, 15, 752, 462, 276, 752, - 463, 463, 690, 463, 463, 463, 463, 463, 747, 277, - 753, 752, 374, 753, 755, 374, 277, 655, 655, 531, - 747, 238, 691, 1076, 600, 753, 17, 655, 441, 600, - 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, - 463, 463, 463, 463, 25, 886, 463, 463, 463, 54, - 463, 463, 478, 40, 463, 886, 54, 463, 914, 846, - 1088, 690, 463, 847, 463, 54, 463, 463, 410, 463, - 463, 463, 463, 463, 277, 463, 463, 463, 400, 755, - 755, 691, 400, 531, 531, 531, 411, 1076, 1076, 1076, - 19, 463, 412, 886, 463, 463, 398, 463, 914, 463, - 531, 914, 413, 692, 1076, 886, 463, 16, 16, 463, - 692, 692, 692, 914, 54, 692, 692, 692, 846, 692, - 755, 960, 847, 755, 1088, 1088, 960, 692, 692, 692, - 692, 692, 410, 410, 410, 755, 399, 19, 43, 692, - 692, 1088, 692, 692, 692, 692, 692, 51, 398, 19, - 411, 411, 411, 416, 700, 398, 412, 412, 412, 700, - 398, 869, 375, 700, 398, 375, 413, 413, 413, 692, - 692, 692, 692, 692, 692, 692, 692, 692, 692, 692, - 692, 692, 692, 398, 970, 692, 692, 692, 399, 692, - 692, 381, 381, 692, 721, 399, 692, 692, 721, 692, - 399, 692, 216, 692, 399, 692, 692, 237, 692, 692, - 692, 692, 692, 398, 692, 692, 692, 416, 416, 416, - 869, 234, 278, 399, 279, 280, 49, 49, 234, 278, - 692, 279, 280, 692, 692, 692, 692, 234, 692, 281, - 692, 41, 693, 970, 239, 692, 281, 42, 692, 693, - 693, 693, 240, 399, 693, 693, 693, 282, 693, 704, - 704, 244, 49, 49, 282, 283, 693, 295, 693, 693, - 693, 137, 283, 774, 774, 309, 137, 137, 693, 693, - 352, 693, 693, 693, 693, 693, 234, 278, 41, 279, - 280, 284, 285, 876, 42, 800, 800, 876, 284, 285, - 41, 310, 378, 313, 281, 378, 42, 325, 693, 693, - 693, 693, 693, 693, 693, 693, 693, 693, 693, 693, - 693, 693, 282, 1074, 693, 693, 693, 352, 693, 693, - 283, 456, 693, 1074, 799, 693, 693, 799, 693, 352, - 693, 326, 693, 1131, 693, 693, 1131, 693, 693, 693, - 693, 693, 848, 693, 328, 693, 284, 285, 88, 848, - 848, 848, 1055, 1055, 329, 848, 848, 330, 848, 693, - 88, 1074, 693, 693, 693, 693, 848, 693, 456, 693, - 88, 1165, 1165, 1074, 693, 457, 336, 693, 848, 848, - 456, 848, 848, 848, 848, 848, 339, 340, 342, 343, - 366, 333, 366, 366, 366, 366, 366, 347, 333, 675, - 785, 349, 785, 785, 785, 366, 785, 333, 848, 848, - 848, 848, 848, 848, 848, 848, 848, 848, 848, 848, - 848, 848, 457, 356, 848, 848, 848, 366, 848, 848, - 358, 362, 848, 364, 457, 848, 366, 366, 366, 366, - 848, 368, 848, 366, 848, 848, 675, 848, 848, 848, - 848, 848, 372, 848, 849, 848, 333, 376, 675, 377, - 379, 849, 849, 849, 388, 389, 393, 849, 849, 848, - 849, 395, 848, 848, 404, 848, 424, 848, 849, 849, - 430, 432, 433, 366, 848, 435, 438, 848, 442, 452, - 849, 849, 454, 849, 849, 849, 849, 849, 455, 464, - 474, 488, 768, 334, 768, 768, 768, 768, 768, 942, - 334, 942, 942, 942, 489, 942, 490, 768, 491, 334, - 849, 849, 849, 849, 849, 849, 849, 849, 849, 849, - 849, 849, 849, 849, 516, 517, 849, 849, 849, 768, - 849, 849, 518, 522, 849, 538, 942, 849, 768, 768, - 768, 768, 849, 539, 849, 768, 849, 849, 542, 849, - 849, 849, 849, 849, 771, 849, 849, 849, 334, 544, - 335, 549, 553, 563, 771, 337, 353, 335, 564, 567, - 568, 849, 337, 353, 849, 849, 335, 849, 569, 849, - 392, 337, 353, 570, 571, 768, 849, 392, 573, 849, - 2, 2, 2, 2, 2, 2, 392, 771, 771, 2, - 2, 574, 771, 584, 2, 819, 2, 2, 2, 2, - 2, 2, 2, 8, 8, 8, 8, 8, 2, 2, - 2, 2, 2, 2, 2, 335, 596, 2, 599, 601, - 337, 353, 603, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 392, 2, 2, 2, 402, - 2, 2, 2, 2, 2, 440, 402, 819, 604, 548, - 605, 606, 440, 616, 819, 402, 548, 620, 621, 819, - 623, 440, 650, 819, 2, 548, 658, 2, 660, 667, - 2, 2, 631, 676, 2, 681, 2, 686, 694, 631, - 2, 695, 819, 697, 486, 720, 646, 646, 631, 2, - 646, 646, 646, 723, 2, 2, 2, 2, 724, 2, - 2, 2, 2, 727, 402, 729, 735, 2, 2, 736, - 440, 737, 819, 739, 548, 2, 486, 2, 2, 2, - 486, 486, 2, 2, 36, 36, 36, 36, 36, 36, - 741, 749, 751, 36, 36, 754, 757, 631, 36, 758, - 36, 36, 36, 36, 36, 36, 36, 23, 761, 764, - 783, 784, 36, 36, 36, 36, 36, 36, 36, 786, - 1068, 36, 1068, 1068, 1068, 802, 1068, 36, 36, 36, - 36, 36, 36, 36, 36, 36, 36, 36, 36, 808, - 36, 36, 36, 809, 36, 36, 36, 36, 36, 23, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 756, 23, 23, 813, 822, 23, 23, 756, 36, 826, - 23, 36, 756, 828, 36, 36, 756, 843, 36, 845, - 36, 23, 854, 23, 36, 23, 23, 870, 23, 23, - 23, 23, 23, 36, 23, 878, 879, 883, 36, 36, - 36, 36, 1104, 36, 36, 36, 36, 884, 885, 1104, - 888, 36, 36, 900, 23, 903, 904, 913, 1104, 36, - 918, 36, 36, 36, 921, 756, 36, 36, 135, 135, - 135, 135, 135, 135, 922, 925, 927, 135, 135, 928, - 930, 932, 135, 934, 135, 135, 135, 135, 135, 135, - 135, 324, 324, 324, 324, 324, 135, 135, 135, 135, - 135, 135, 135, 935, 937, 135, 940, 1104, 947, 950, - 445, 135, 135, 135, 135, 135, 135, 135, 135, 135, - 135, 135, 135, 957, 135, 135, 135, 959, 135, 135, - 135, 135, 135, 445, 445, 445, 445, 445, 445, 445, - 445, 445, 445, 445, 820, 445, 445, 966, 967, 445, - 445, 820, 135, 968, 969, 135, 820, 979, 135, 135, - 820, 980, 135, 981, 135, 445, 982, 445, 135, 445, - 445, 991, 445, 445, 445, 445, 445, 135, 445, 992, - 993, 997, 135, 135, 135, 135, 1110, 135, 135, 135, - 135, 998, 1003, 1110, 1013, 135, 135, 1014, 445, 1016, - 445, 1017, 1110, 135, 1018, 135, 135, 135, 1020, 820, - 135, 135, 218, 218, 218, 218, 218, 218, 1021, 1022, - 1048, 218, 218, 1049, 1065, 1075, 218, 1083, 218, 218, - 218, 218, 218, 218, 218, 371, 371, 371, 371, 371, - 218, 218, 218, 218, 218, 218, 218, 1085, 1102, 218, - 1105, 1110, 1111, 1114, 451, 218, 218, 218, 218, 218, - 218, 218, 218, 218, 218, 218, 218, 1115, 218, 218, - 218, 1116, 218, 218, 218, 218, 218, 451, 451, 451, - 451, 451, 451, 451, 451, 451, 451, 451, 1151, 451, - 451, 1117, 1129, 451, 451, 1151, 218, 1130, 1139, 218, - 1091, 1141, 218, 218, 1151, 1144, 218, 1145, 218, 451, - 1091, 451, 218, 451, 451, 1146, 451, 451, 451, 451, - 451, 218, 451, 1147, 1149, 1154, 218, 218, 218, 218, - 1164, 218, 218, 218, 218, 1170, 1175, 1189, 1190, 218, - 218, 1192, 451, 1091, 1091, 1197, 1202, 218, 1091, 218, - 218, 218, 1203, 1151, 218, 218, 243, 243, 243, 243, - 243, 243, 1204, 1205, 1211, 243, 243, 1217, nil, nil, - 243, nil, 243, 243, 243, 243, 243, 243, 243, 536, - 536, 536, 536, 536, 243, 243, 243, 243, 243, 243, - 243, nil, nil, 243, nil, nil, nil, nil, 763, 243, - 243, 243, 243, 243, 243, 243, 243, 243, 243, 243, - 243, nil, 243, 243, 243, nil, 243, 243, 243, 243, - 243, 763, 763, 763, 763, 763, 763, 763, 763, 763, - 763, 763, nil, 763, 763, nil, nil, 763, 763, nil, - 243, nil, nil, 243, nil, nil, 243, 243, nil, nil, - 243, nil, 243, 763, nil, 763, 243, 763, 763, nil, - 763, 763, 763, 763, 763, 243, 763, nil, nil, nil, - 243, 243, 243, 243, nil, 243, 243, 243, 243, nil, - nil, nil, nil, 243, 243, nil, 763, nil, nil, nil, - nil, 243, nil, 243, 243, 243, nil, nil, 243, 243, - 327, 327, 327, 327, 327, 327, nil, nil, nil, 327, - 327, nil, nil, nil, 327, nil, 327, 327, 327, 327, - 327, 327, 327, nil, nil, nil, nil, nil, 327, 327, - 327, 327, 327, 327, 327, nil, nil, 327, nil, nil, - nil, nil, 794, 327, 327, 327, 327, 327, 327, 327, - 327, 327, 327, 327, 327, nil, 327, 327, 327, nil, - 327, 327, 327, 327, 327, 794, 794, 794, 794, 794, - 794, 794, 794, 794, 794, 794, nil, 794, 794, nil, - nil, 794, 794, nil, 327, nil, nil, 327, nil, nil, - 327, 327, nil, nil, 327, nil, 327, 794, nil, 794, - 327, 794, 794, nil, 794, 794, 794, 794, 794, 327, - 794, nil, nil, nil, 327, 327, 327, 327, nil, 327, - 327, 327, 327, nil, nil, nil, nil, 327, 327, nil, - 794, nil, nil, nil, nil, 327, nil, 327, 327, 327, - nil, nil, 327, 327, 332, 332, 332, 332, 332, 332, - nil, nil, nil, 332, 332, nil, nil, nil, 332, nil, - 332, 332, 332, 332, 332, 332, 332, nil, nil, nil, - nil, nil, 332, 332, 332, 332, 332, 332, 332, nil, - 1174, 332, 1174, 1174, 1174, nil, 1174, 332, 332, 332, - 332, 332, 332, 332, 332, 332, 332, 332, 332, nil, - 332, 332, 332, nil, 332, 332, 332, 332, 332, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - nil, 307, 307, nil, nil, 307, 307, nil, 332, nil, - nil, 332, nil, nil, 332, 332, nil, nil, 332, nil, - 332, 307, nil, 307, 332, 307, 307, nil, 307, 307, - 307, 307, 307, 332, 307, nil, nil, nil, 332, 332, - 332, 332, nil, 332, 332, 332, 332, nil, nil, nil, - nil, 332, 332, nil, 307, nil, nil, nil, nil, 332, - nil, 332, 332, 332, nil, nil, 332, 332, 363, 363, - 363, 363, 363, 363, nil, nil, nil, 363, 363, nil, - nil, nil, 363, nil, 363, 363, 363, 363, 363, 363, - 363, nil, nil, nil, nil, nil, 363, 363, 363, 363, - 363, 363, 363, nil, nil, 363, nil, nil, nil, nil, - nil, 363, 363, 363, 363, 363, 363, 363, 363, 363, - 363, 363, 363, nil, 363, 363, 363, nil, 363, 363, - 363, 363, 363, 505, 505, 505, 505, 505, 505, 505, - 505, 505, 505, 505, nil, 505, 505, nil, nil, 505, - 505, nil, 363, nil, nil, 363, nil, nil, 363, 363, - nil, nil, 363, nil, 363, 505, nil, 505, 363, 505, - 505, nil, 505, 505, 505, 505, 505, 363, 505, nil, - nil, nil, 363, 363, 363, 363, nil, 363, 363, 363, - 363, nil, nil, nil, nil, 363, 363, 505, 505, nil, - nil, nil, nil, 363, nil, 363, 363, 363, nil, nil, - 363, 363, 369, 369, 369, 369, 369, 369, nil, nil, - nil, 369, 369, nil, nil, nil, 369, nil, 369, 369, - 369, 369, 369, 369, 369, nil, nil, nil, nil, nil, - 369, 369, 369, 369, 369, 369, 369, nil, nil, 369, - nil, nil, nil, nil, nil, 369, 369, 369, 369, 369, - 369, 369, 369, 369, 369, 369, 369, nil, 369, 369, - 369, nil, 369, 369, 369, 369, 369, 560, 560, 560, - 560, 560, 560, 560, 560, 560, 560, 560, nil, 560, - 560, nil, nil, 560, 560, nil, 369, nil, nil, 369, - nil, nil, 369, 369, nil, nil, 369, nil, 369, 560, - nil, 560, 369, 560, 560, nil, 560, 560, 560, 560, - 560, 369, 560, nil, nil, nil, 369, 369, 369, 369, - nil, 369, 369, 369, 369, nil, nil, nil, nil, 369, - 369, nil, 560, nil, nil, nil, nil, 369, nil, 369, - 369, 369, nil, nil, 369, 369, 370, 370, 370, 370, - 370, 370, nil, nil, nil, 370, 370, nil, nil, nil, - 370, nil, 370, 370, 370, 370, 370, 370, 370, nil, - nil, nil, nil, nil, 370, 370, 370, 370, 370, 370, - 370, nil, nil, 370, nil, nil, nil, nil, nil, 370, - 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, - 370, nil, 370, 370, 370, nil, 370, 370, 370, 370, - 370, 851, 851, 851, 851, 851, 851, 851, 851, 851, - 851, 851, nil, 851, 851, nil, nil, 851, 851, nil, - 370, nil, nil, 370, nil, nil, 370, 370, nil, nil, - 370, nil, 370, 851, nil, 851, 370, 851, 851, nil, - 851, 851, 851, 851, 851, 370, 851, nil, nil, nil, - 370, 370, 370, 370, nil, 370, 370, 370, 370, nil, - nil, nil, nil, 370, 370, nil, 851, nil, nil, nil, - nil, 370, nil, 370, 370, 370, nil, nil, 370, 370, - 385, 385, 385, 385, 385, 385, nil, nil, nil, 385, - 385, nil, nil, nil, 385, nil, 385, 385, 385, 385, - 385, 385, 385, nil, nil, nil, nil, nil, 385, 385, - 385, 385, 385, 385, 385, nil, nil, 385, nil, nil, - nil, nil, nil, 385, 385, 385, 385, 385, 385, 385, - 385, 385, 385, 385, 385, nil, 385, 385, 385, nil, - 385, 385, 385, 385, 385, 1009, 1009, 1009, 1009, 1009, - 1009, 1009, 1009, 1009, 1009, 1009, nil, 1009, 1009, nil, - nil, 1009, 1009, nil, 385, nil, nil, 385, nil, nil, - 385, 385, nil, nil, 385, nil, 385, 1009, nil, 1009, - 385, 1009, 1009, nil, 1009, 1009, 1009, 1009, 1009, 385, - 1009, nil, nil, nil, 385, 385, 385, 385, nil, 385, - 385, 385, 385, nil, nil, nil, nil, 385, 385, nil, - 1009, nil, nil, nil, nil, 385, nil, 385, 385, 385, - nil, nil, 385, 385, 386, 386, 386, 386, 386, 386, - nil, nil, nil, 386, 386, nil, nil, nil, 386, nil, - 386, 386, 386, 386, 386, 386, 386, nil, nil, nil, - nil, nil, 386, 386, 386, 386, 386, 386, 386, nil, - nil, 386, nil, nil, nil, nil, nil, 386, 386, 386, - 386, 386, 386, 386, 386, 386, 386, 386, 386, nil, - 386, 386, 386, nil, 386, 386, 386, 386, 386, 1027, - 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, 1027, - nil, 1027, 1027, nil, nil, 1027, 1027, nil, 386, nil, - nil, 386, nil, nil, 386, 386, nil, nil, 386, nil, - 386, 1027, nil, 1027, 386, 1027, 1027, nil, 1027, 1027, - 1027, 1027, 1027, 386, 1027, nil, nil, nil, 386, 386, - 386, 386, nil, 386, 386, 386, 386, nil, nil, nil, - nil, 386, 386, nil, 1027, nil, nil, nil, nil, 386, - nil, 386, 386, 386, nil, nil, 386, 386, 615, 615, - 615, 615, 615, 615, nil, nil, nil, 615, 615, nil, - nil, nil, 615, nil, 615, 615, 615, 615, 615, 615, - 615, nil, nil, nil, nil, nil, 615, 615, 615, 615, - 615, 615, 615, nil, nil, 615, nil, nil, nil, nil, - nil, 615, 615, 615, 615, 615, 615, 615, 615, 615, - 615, 615, 615, nil, 615, 615, 615, nil, 615, 615, - 615, 615, 615, 1050, 1050, 1050, 1050, 1050, 1050, 1050, - 1050, 1050, 1050, 1050, nil, 1050, 1050, nil, nil, 1050, - 1050, nil, 615, nil, nil, 615, nil, nil, 615, 615, - nil, nil, 615, nil, 615, 1050, nil, 1050, 615, 1050, - 1050, nil, 1050, 1050, 1050, 1050, 1050, 615, 1050, nil, - nil, nil, 615, 615, 615, 615, nil, 615, 615, 615, - 615, nil, nil, nil, nil, 615, 615, nil, 1050, nil, - nil, nil, nil, 615, nil, 615, 615, 615, nil, nil, - 615, 615, 618, 618, 618, 618, 618, 618, nil, nil, - nil, 618, 618, nil, nil, nil, 618, nil, 618, 618, - 618, 618, 618, 618, 618, nil, nil, nil, nil, nil, - 618, 618, 618, 618, 618, 618, 618, nil, 585, 618, - 585, 585, 585, nil, 585, 618, 618, 618, 618, 618, - 618, 618, 618, 618, 618, 618, 618, nil, 618, 618, - 618, nil, 618, 618, 618, 618, 618, 781, nil, 781, - 781, 781, nil, 781, nil, 585, nil, nil, 487, nil, - nil, nil, nil, nil, 585, nil, 618, nil, nil, 618, - nil, nil, 618, 618, nil, nil, 618, 941, 618, 941, - 941, 941, 618, 941, 781, nil, nil, nil, nil, nil, - 487, 618, nil, 781, 487, 487, 618, 618, 618, 618, - nil, 618, 618, 618, 618, nil, nil, nil, nil, 618, - 618, nil, nil, nil, 941, nil, nil, 618, nil, 618, - 618, 618, nil, 941, 618, 618, 639, 639, 639, 639, - 639, 639, nil, nil, nil, 639, 639, nil, nil, nil, - 639, nil, 639, 639, 639, 639, 639, 639, 639, nil, - nil, nil, nil, nil, 639, 639, 639, 639, 639, 639, - 639, nil, nil, 639, nil, nil, nil, nil, nil, 639, - 639, 639, 639, 639, 639, 639, 639, 639, 639, 639, - 639, nil, 639, 639, 639, nil, 639, 639, 639, 639, - 639, 354, 354, 354, 354, 354, 354, 354, 354, 354, - 354, 354, nil, 354, 354, nil, nil, 354, 354, nil, - 639, nil, nil, 639, nil, nil, 639, 639, nil, 501, - 639, nil, 639, 354, nil, 354, 639, 354, 354, nil, - 354, 354, 354, 354, 354, 639, 354, nil, nil, nil, - 639, 639, 639, 639, nil, 639, 639, 639, 639, nil, - nil, 501, nil, 639, 639, 501, 501, nil, 501, 501, - nil, 639, nil, 639, 639, 639, nil, nil, 639, 639, - 818, 818, 818, 818, 818, 818, nil, nil, nil, 818, - 818, nil, nil, nil, 818, nil, 818, 818, 818, 818, - 818, 818, 818, nil, nil, nil, nil, nil, 818, 818, - 818, 818, 818, 818, 818, nil, nil, 818, nil, nil, - nil, nil, nil, 818, 818, 818, 818, 818, 818, 818, - 818, 818, 818, 818, 818, nil, 818, 818, 818, nil, - 818, 818, 818, 818, 818, 355, 355, 355, 355, 355, - 355, 355, 355, 355, 355, 355, nil, 355, 355, nil, - nil, 355, 355, nil, 818, nil, nil, 818, nil, nil, - 818, 818, nil, 502, 818, nil, 818, 355, nil, 355, - 818, 355, 355, nil, 355, 355, 355, 355, 355, 818, - 355, nil, nil, nil, 818, 818, 818, 818, nil, 818, - 818, 818, 818, nil, nil, 502, nil, 818, 818, 502, - 502, nil, 502, 502, nil, 818, nil, 818, 818, 818, - nil, nil, 818, 818, 823, 823, 823, 823, 823, 823, - nil, nil, nil, 823, 823, nil, nil, nil, 823, nil, - 823, 823, 823, 823, 823, 823, 823, nil, nil, nil, - nil, nil, 823, 823, 823, 823, 823, 823, 823, nil, - nil, 823, nil, nil, nil, nil, nil, 823, 823, 823, - 823, 823, 823, 823, 823, 823, 823, 823, 823, nil, - 823, 823, 823, nil, 823, 823, 823, 823, 823, 484, - 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, - nil, 484, 484, nil, nil, 484, 484, nil, 823, nil, - nil, 823, nil, nil, 823, 823, nil, nil, 823, nil, - 823, 484, nil, 484, 823, 484, 484, nil, 484, 484, - 484, 484, 484, 823, 484, nil, nil, nil, 823, 823, - 823, 823, nil, 823, 823, 823, 823, nil, nil, nil, - nil, 823, 823, nil, 1118, nil, 1118, 1118, 1118, 823, - 1118, 823, 823, 823, nil, nil, 823, 823, 834, 834, - 834, 834, 834, 834, nil, nil, nil, 834, 834, nil, - nil, nil, 834, nil, 834, 834, 834, 834, 834, 834, - 834, 1118, nil, nil, nil, nil, 834, 834, 834, 834, - 834, 834, 834, nil, nil, 834, nil, nil, nil, nil, - nil, 834, 834, 834, 834, 834, 834, 834, 834, 834, - 834, 834, 834, nil, 834, 834, 834, nil, 834, 834, - 834, 834, 834, 485, 485, 485, 485, 485, 485, 485, - 485, 485, 485, 485, nil, 485, 485, nil, nil, 485, - 485, nil, 834, nil, nil, 834, nil, nil, 834, 834, - nil, nil, 834, nil, 834, 485, nil, 485, 834, 485, - 485, nil, 485, 485, 485, 485, 485, 834, 485, nil, - nil, nil, 834, 834, 834, 834, nil, 834, 834, 834, - 834, nil, nil, nil, nil, 834, 834, nil, 1119, nil, - 1119, 1119, 1119, 834, 1119, 834, 834, 834, nil, nil, - 834, 834, 908, 908, 908, 908, 908, 908, nil, nil, - nil, 908, 908, nil, nil, nil, 908, nil, 908, 908, - 908, 908, 908, 908, 908, 1119, nil, nil, nil, nil, - 908, 908, 908, 908, 908, 908, 908, nil, nil, 908, - nil, nil, nil, nil, nil, 908, 908, 908, 908, 908, - 908, 908, 908, 908, 908, 908, 908, nil, 908, 908, - 908, nil, 908, 908, 908, 908, 908, 495, 495, 495, - 495, 495, 495, 495, nil, nil, 495, 495, nil, nil, - nil, nil, nil, 495, 495, nil, 908, nil, nil, 908, - nil, nil, 908, 908, nil, nil, 908, nil, 908, 495, - nil, 495, 908, 495, 495, nil, 495, 495, 495, 495, - 495, 908, 495, nil, nil, nil, 908, 908, 908, 908, - nil, 908, 908, 908, 908, nil, nil, nil, nil, 908, - 908, nil, nil, nil, nil, nil, nil, 908, nil, 908, - 908, 908, nil, nil, 908, 908, 920, 920, 920, 920, - 920, 920, nil, nil, nil, 920, 920, nil, nil, nil, - 920, nil, 920, 920, 920, 920, 920, 920, 920, nil, - nil, nil, nil, nil, 920, 920, 920, 920, 920, 920, - 920, nil, nil, 920, nil, nil, nil, nil, nil, 920, - 920, 920, 920, 920, 920, 920, 920, 920, 920, 920, - 920, nil, 920, 920, 920, nil, 920, 920, 920, 920, - 920, 496, 496, 496, 496, 496, 496, 496, nil, nil, - 496, 496, nil, nil, nil, nil, nil, 496, 496, nil, - 920, nil, nil, 920, nil, nil, 920, 920, nil, nil, - 920, nil, 920, 496, nil, 496, 920, 496, 496, nil, - 496, 496, 496, 496, 496, 920, 496, nil, nil, nil, - 920, 920, 920, 920, nil, 920, 920, 920, 920, nil, - nil, nil, nil, 920, 920, nil, nil, nil, nil, nil, - nil, 920, nil, 920, 920, 920, nil, nil, 920, 920, - 955, 955, 955, 955, 955, 955, nil, nil, nil, 955, - 955, nil, nil, nil, 955, nil, 955, 955, 955, 955, - 955, 955, 955, nil, nil, nil, nil, nil, 955, 955, - 955, 955, 955, 955, 955, nil, nil, 955, nil, nil, - nil, nil, nil, 955, 955, 955, 955, 955, 955, 955, - 955, 955, 955, 955, 955, nil, 955, 955, 955, nil, - 955, 955, 955, 955, 955, 497, 497, 497, 497, 497, - 497, 497, nil, nil, 497, 497, nil, nil, nil, nil, - nil, 497, 497, nil, 955, nil, nil, 955, nil, nil, - 955, 955, nil, nil, 955, nil, 955, 497, nil, 497, - 955, 497, 497, nil, 497, 497, 497, 497, 497, 955, - 497, nil, nil, nil, 955, 955, 955, 955, nil, 955, - 955, 955, 955, nil, nil, nil, nil, 955, 955, nil, - nil, nil, nil, nil, nil, 955, nil, 955, 955, 955, - nil, nil, 955, 955, 961, 961, 961, 961, 961, 961, - nil, nil, nil, 961, 961, nil, nil, nil, 961, nil, - 961, 961, 961, 961, 961, 961, 961, nil, nil, nil, - nil, nil, 961, 961, 961, 961, 961, 961, 961, nil, - nil, 961, nil, nil, nil, nil, nil, 961, 961, 961, - 961, 961, 961, 961, 961, 961, 961, 961, 961, nil, - 961, 961, 961, nil, 961, 961, 961, 961, 961, 498, - 498, 498, 498, 498, 498, 498, nil, nil, 498, 498, - nil, nil, nil, nil, nil, 498, 498, nil, 961, nil, - nil, 961, nil, nil, 961, 961, nil, nil, 961, nil, - 961, 498, nil, 498, 961, 498, 498, nil, 498, 498, - 498, 498, 498, 961, 498, nil, nil, nil, 961, 961, - 961, 961, nil, 961, 961, 961, 961, nil, nil, nil, - nil, 961, 961, nil, nil, nil, nil, nil, nil, 961, - nil, 961, 961, 961, nil, nil, 961, 961, 1010, 1010, - 1010, 1010, 1010, 1010, nil, nil, nil, 1010, 1010, nil, - nil, nil, 1010, nil, 1010, 1010, 1010, 1010, 1010, 1010, - 1010, nil, nil, nil, nil, nil, 1010, 1010, 1010, 1010, - 1010, 1010, 1010, nil, nil, 1010, nil, nil, nil, nil, - nil, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, - 1010, 1010, 1010, nil, 1010, 1010, 1010, nil, 1010, 1010, - 1010, 1010, 1010, 499, 499, 499, 499, 499, 499, 499, - nil, nil, 499, 499, nil, nil, nil, nil, nil, 499, - 499, nil, 1010, nil, nil, 1010, nil, nil, 1010, 1010, - nil, nil, 1010, nil, 1010, 499, nil, 499, 1010, 499, - 499, nil, 499, 499, 499, 499, 499, 1010, 499, nil, - nil, nil, 1010, 1010, 1010, 1010, nil, 1010, 1010, 1010, - 1010, nil, nil, nil, nil, 1010, 1010, nil, nil, nil, - nil, nil, nil, 1010, nil, 1010, 1010, 1010, nil, nil, - 1010, 1010, 1029, 1029, 1029, 1029, 1029, 1029, nil, nil, - nil, 1029, 1029, nil, nil, nil, 1029, nil, 1029, 1029, - 1029, 1029, 1029, 1029, 1029, nil, nil, nil, nil, nil, - 1029, 1029, 1029, 1029, 1029, 1029, 1029, nil, nil, 1029, - nil, nil, nil, nil, nil, 1029, 1029, 1029, 1029, 1029, - 1029, 1029, 1029, 1029, 1029, 1029, 1029, nil, 1029, 1029, - 1029, nil, 1029, 1029, 1029, 1029, 1029, 500, 500, 500, - 500, 500, 500, 500, nil, nil, 500, 500, nil, nil, - nil, nil, nil, 500, 500, nil, 1029, nil, nil, 1029, - nil, nil, 1029, 1029, nil, nil, 1029, nil, 1029, 500, - nil, 500, 1029, 500, 500, nil, 500, 500, 500, 500, - 500, 1029, 500, nil, nil, nil, 1029, 1029, 1029, 1029, - nil, 1029, 1029, 1029, 1029, nil, nil, nil, nil, 1029, - 1029, nil, nil, nil, nil, nil, nil, 1029, nil, 1029, - 1029, 1029, nil, nil, 1029, 1029, 1066, 1066, 1066, 1066, - 1066, 1066, nil, nil, nil, 1066, 1066, nil, nil, nil, - 1066, nil, 1066, 1066, 1066, 1066, 1066, 1066, 1066, nil, - nil, nil, nil, nil, 1066, 1066, 1066, 1066, 1066, 1066, - 1066, nil, nil, 1066, nil, nil, nil, nil, nil, 1066, - 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, - 1066, nil, 1066, 1066, 1066, nil, 1066, 1066, 1066, 1066, - 1066, 503, 503, 503, 503, 503, 503, 503, nil, nil, - 503, 503, nil, nil, nil, nil, nil, 503, 503, nil, - 1066, nil, nil, 1066, nil, nil, 1066, 1066, nil, nil, - 1066, nil, 1066, 503, nil, 503, 1066, 503, 503, nil, - 503, 503, 503, 503, 503, 1066, 503, nil, nil, nil, - 1066, 1066, 1066, 1066, nil, 1066, 1066, 1066, 1066, nil, - nil, nil, nil, 1066, 1066, nil, nil, nil, nil, nil, - nil, 1066, nil, 1066, 1066, 1066, nil, nil, 1066, 1066, - 1067, 1067, 1067, 1067, 1067, 1067, nil, nil, nil, 1067, - 1067, nil, nil, nil, 1067, nil, 1067, 1067, 1067, 1067, - 1067, 1067, 1067, nil, nil, nil, nil, nil, 1067, 1067, - 1067, 1067, 1067, 1067, 1067, nil, nil, 1067, nil, nil, - nil, nil, nil, 1067, 1067, 1067, 1067, 1067, 1067, 1067, - 1067, 1067, 1067, 1067, 1067, nil, 1067, 1067, 1067, nil, - 1067, 1067, 1067, 1067, 1067, 504, 504, 504, 504, 504, - 504, 504, 504, nil, 504, 504, nil, nil, nil, nil, - nil, 504, 504, nil, 1067, nil, nil, 1067, nil, nil, - 1067, 1067, nil, nil, 1067, nil, 1067, 504, nil, 504, - 1067, 504, 504, nil, 504, 504, 504, 504, 504, 1067, - 504, nil, nil, nil, 1067, 1067, 1067, 1067, nil, 1067, - 1067, 1067, 1067, nil, nil, nil, nil, 1067, 1067, nil, - nil, nil, nil, nil, nil, 1067, nil, 1067, 1067, 1067, - nil, nil, 1067, 1067, 1107, 1107, 1107, 1107, 1107, 1107, - nil, nil, nil, 1107, 1107, nil, nil, nil, 1107, nil, - 1107, 1107, 1107, 1107, 1107, 1107, 1107, nil, nil, nil, - nil, nil, 1107, 1107, 1107, 1107, 1107, 1107, 1107, nil, - nil, 1107, nil, nil, nil, nil, nil, 1107, 1107, 1107, - 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, 1107, nil, - 1107, 1107, 1107, nil, 1107, 1107, 1107, 1107, 1107, 506, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 506, 506, nil, 1107, nil, - nil, 1107, nil, nil, 1107, 1107, nil, nil, 1107, nil, - 1107, 506, nil, 506, 1107, 506, 506, nil, 506, 506, - nil, nil, 506, 1107, 506, nil, nil, nil, 1107, 1107, - 1107, 1107, nil, 1107, 1107, 1107, 1107, nil, nil, nil, - nil, 1107, 1107, nil, nil, nil, nil, nil, nil, 1107, - nil, 1107, 1107, 1107, nil, nil, 1107, 1107, 1120, 1120, - 1120, 1120, 1120, 1120, nil, nil, nil, 1120, 1120, nil, - nil, nil, 1120, nil, 1120, 1120, 1120, 1120, 1120, 1120, - 1120, nil, nil, nil, nil, nil, 1120, 1120, 1120, 1120, - 1120, 1120, 1120, nil, nil, 1120, nil, nil, nil, nil, - nil, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, 1120, - 1120, 1120, 1120, nil, 1120, 1120, 1120, nil, 1120, 1120, - 1120, 1120, 1120, 559, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 559, - 559, nil, 1120, nil, nil, 1120, nil, nil, 1120, 1120, - nil, nil, 1120, nil, 1120, 559, nil, 559, 1120, 559, - 559, nil, 559, 559, nil, nil, 559, 1120, 559, nil, - nil, nil, 1120, 1120, 1120, 1120, nil, 1120, 1120, 1120, - 1120, nil, nil, nil, nil, 1120, 1120, nil, nil, nil, - nil, nil, nil, 1120, nil, 1120, 1120, 1120, nil, nil, - 1120, 1120, 1166, 1166, 1166, 1166, 1166, 1166, nil, nil, - nil, 1166, 1166, nil, nil, nil, 1166, nil, 1166, 1166, - 1166, 1166, 1166, 1166, 1166, nil, nil, nil, nil, nil, - 1166, 1166, 1166, 1166, 1166, 1166, 1166, nil, nil, 1166, - nil, nil, nil, nil, nil, 1166, 1166, 1166, 1166, 1166, - 1166, 1166, 1166, 1166, 1166, 1166, 1166, nil, 1166, 1166, - 1166, nil, 1166, 1166, 1166, 1166, 1166, 492, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 492, 492, nil, 1166, nil, nil, 1166, - nil, nil, 1166, 1166, nil, nil, 1166, nil, 1166, 492, - nil, 492, 1166, 492, 492, nil, 492, 492, nil, nil, - nil, 1166, nil, nil, nil, nil, 1166, 1166, 1166, 1166, - nil, 1166, 1166, 1166, 1166, nil, nil, nil, nil, 1166, - 1166, nil, nil, nil, nil, nil, nil, 1166, nil, 1166, - 1166, 1166, nil, nil, 1166, 1166, 7, 7, 7, 7, - 7, nil, nil, nil, 7, 7, nil, nil, nil, 7, - nil, 7, 7, 7, 7, 7, 7, 7, nil, nil, - nil, nil, nil, 7, 7, 7, 7, 7, 7, 7, - nil, nil, 7, nil, nil, nil, nil, nil, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - nil, 7, 7, 7, nil, 7, 7, 7, 7, 7, - 493, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 493, 493, nil, 7, - nil, nil, 7, nil, nil, 7, 7, nil, nil, 7, - nil, 7, 493, nil, 493, 7, 493, 493, nil, 493, - 493, nil, nil, nil, 7, nil, nil, nil, nil, 7, - 7, 7, 7, nil, 7, 7, 7, 7, nil, nil, - nil, nil, 7, 7, nil, nil, nil, 22, 22, 22, - 7, 22, 7, 7, 7, 22, 22, 7, 7, nil, - 22, nil, 22, 22, 22, 22, 22, 22, 22, nil, - nil, nil, nil, nil, 22, 22, 22, 22, 22, 22, - 22, nil, nil, 22, nil, nil, nil, nil, nil, nil, - 22, nil, nil, 22, 22, 22, 22, 22, 22, 22, - 22, nil, 22, 22, 22, nil, 22, 22, 22, 22, - 22, 494, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 494, 494, nil, - 22, nil, nil, 22, nil, nil, 22, 22, nil, nil, - 22, nil, nil, 494, nil, nil, 22, 494, 494, nil, - 494, 494, nil, nil, nil, 22, nil, nil, nil, nil, - 22, 22, 22, 22, nil, 22, 22, 22, 22, nil, - nil, nil, nil, 22, 22, nil, nil, nil, nil, nil, - nil, 22, nil, 22, 22, 22, 30, nil, 22, 22, - nil, nil, nil, 30, 30, 30, nil, nil, 30, 30, - 30, nil, 30, nil, nil, nil, nil, nil, nil, nil, - 30, 30, 30, 30, nil, nil, nil, nil, nil, nil, - nil, nil, 30, 30, nil, 30, 30, 30, 30, 30, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, nil, nil, 30, 30, - 30, nil, nil, 30, nil, 30, 30, nil, nil, 30, - 30, nil, 30, nil, 30, nil, 30, nil, 30, 30, - nil, 30, 30, 30, 30, 30, 31, 30, 30, 30, - nil, nil, nil, 31, 31, 31, nil, nil, 31, 31, - 31, nil, 31, 30, nil, nil, 30, 30, nil, 30, - 31, 30, 31, 31, nil, nil, nil, nil, 30, nil, - nil, nil, 31, 31, nil, 31, 31, 31, 31, 31, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 31, 31, 31, 31, 31, 31, 31, 31, - 31, 31, 31, 31, 31, 31, nil, nil, 31, 31, - 31, nil, nil, 31, nil, 31, 31, nil, nil, 31, - 31, nil, 31, nil, 31, nil, 31, nil, 31, 31, - nil, 31, 31, 31, 31, 31, nil, 31, nil, 31, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 31, nil, nil, 31, 31, nil, 31, - nil, 31, 32, 32, 32, nil, 32, nil, 31, nil, - 32, 32, nil, nil, nil, 32, nil, 32, 32, 32, - 32, 32, 32, 32, nil, nil, nil, nil, nil, 32, - 32, 32, 32, 32, 32, 32, nil, nil, 32, nil, - nil, nil, nil, nil, nil, 32, nil, nil, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - nil, 32, 32, 32, 32, 32, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 32, nil, nil, 32, nil, - nil, 32, 32, nil, nil, 32, nil, 32, nil, 32, - nil, 32, nil, nil, 32, nil, nil, nil, nil, nil, - 32, nil, nil, nil, nil, 32, 32, 32, 32, nil, - 32, 32, 32, 32, nil, nil, nil, nil, 32, 32, - nil, nil, nil, 33, 33, 33, 32, 33, 32, 32, - 32, 33, 33, 32, 32, nil, 33, nil, 33, 33, - 33, 33, 33, 33, 33, nil, nil, nil, nil, nil, - 33, 33, 33, 33, 33, 33, 33, nil, nil, 33, - nil, nil, nil, nil, nil, nil, 33, nil, nil, 33, - 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, - 33, nil, 33, 33, 33, 33, 33, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 33, nil, nil, 33, - nil, nil, 33, 33, nil, nil, 33, nil, 33, nil, - 33, nil, 33, nil, nil, 33, nil, nil, nil, nil, - nil, 33, nil, nil, nil, nil, 33, 33, 33, 33, - nil, 33, 33, 33, 33, nil, nil, nil, nil, 33, - 33, nil, nil, nil, 34, 34, 34, 33, 34, 33, - 33, 33, 34, 34, 33, 33, nil, 34, nil, 34, - 34, 34, 34, 34, 34, 34, nil, nil, nil, nil, - nil, 34, 34, 34, 34, 34, 34, 34, nil, nil, - 34, nil, nil, nil, nil, nil, nil, 34, nil, nil, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, nil, 34, 34, 34, 34, 34, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 34, nil, nil, - 34, nil, nil, 34, 34, nil, nil, 34, nil, 34, - nil, 34, nil, 34, nil, nil, 34, nil, nil, nil, - nil, nil, 34, nil, nil, nil, nil, 34, 34, 34, - 34, nil, 34, 34, 34, 34, nil, nil, nil, nil, - 34, 34, nil, nil, nil, 44, 44, 44, 34, 44, - 34, 34, 34, 44, 44, 34, 34, nil, 44, nil, - 44, 44, 44, 44, 44, 44, 44, nil, nil, nil, - nil, nil, 44, 44, 44, 44, 44, 44, 44, nil, - nil, 44, nil, nil, nil, nil, nil, nil, 44, nil, - nil, 44, 44, 44, 44, 44, 44, 44, 44, nil, - 44, 44, 44, nil, 44, 44, 44, 44, 44, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 44, nil, - nil, 44, nil, nil, 44, 44, nil, nil, 44, nil, - nil, nil, nil, nil, 44, nil, nil, nil, nil, nil, - nil, nil, nil, 44, nil, nil, nil, nil, 44, 44, - 44, 44, nil, 44, 44, 44, 44, nil, nil, nil, - nil, 44, 44, nil, nil, nil, 45, 45, 45, 44, - 45, 44, 44, 44, 45, 45, 44, 44, nil, 45, - nil, 45, 45, 45, 45, 45, 45, 45, nil, nil, - nil, nil, nil, 45, 45, 45, 45, 45, 45, 45, - nil, nil, 45, nil, nil, nil, nil, nil, nil, 45, - nil, nil, 45, 45, 45, 45, 45, 45, 45, 45, - nil, 45, 45, 45, nil, 45, 45, 45, 45, 45, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 45, - nil, nil, 45, nil, nil, 45, 45, nil, nil, 45, - nil, nil, nil, nil, nil, 45, nil, nil, nil, nil, - nil, nil, nil, nil, 45, nil, nil, nil, nil, 45, - 45, 45, 45, nil, 45, 45, 45, 45, nil, nil, - nil, nil, 45, 45, nil, nil, nil, 47, 47, 47, - 45, 47, 45, 45, 45, 47, 47, 45, 45, nil, - 47, nil, 47, 47, 47, 47, 47, 47, 47, nil, - nil, nil, nil, nil, 47, 47, 47, 47, 47, 47, - 47, nil, nil, 47, nil, nil, nil, nil, nil, nil, - 47, nil, nil, 47, 47, 47, 47, 47, 47, 47, - 47, nil, 47, 47, 47, nil, 47, 47, 47, 47, - 47, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 47, nil, nil, 47, nil, nil, 47, 47, nil, nil, - 47, nil, nil, nil, nil, nil, 47, nil, nil, nil, - nil, nil, nil, nil, nil, 47, nil, nil, nil, nil, - 47, 47, 47, 47, nil, 47, 47, 47, 47, nil, - nil, nil, nil, 47, 47, nil, nil, nil, 48, 48, - 48, 47, 48, 47, 47, 47, 48, 48, 47, 47, - nil, 48, nil, 48, 48, 48, 48, 48, 48, 48, - nil, nil, nil, nil, nil, 48, 48, 48, 48, 48, - 48, 48, nil, nil, 48, nil, nil, nil, nil, nil, - nil, 48, nil, nil, 48, 48, 48, 48, 48, 48, - 48, 48, nil, 48, 48, 48, nil, 48, 48, 48, - 48, 48, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 48, nil, nil, 48, nil, nil, 48, 48, nil, - nil, 48, nil, nil, nil, nil, nil, 48, nil, nil, - nil, nil, nil, nil, nil, nil, 48, nil, nil, nil, - nil, 48, 48, 48, 48, nil, 48, 48, 48, 48, - nil, nil, nil, nil, 48, 48, nil, nil, nil, 50, - 50, 50, 48, 50, 48, 48, 48, 50, 50, 48, - 48, nil, 50, nil, 50, 50, 50, 50, 50, 50, - 50, nil, nil, nil, nil, nil, 50, 50, 50, 50, - 50, 50, 50, nil, nil, 50, nil, nil, nil, nil, - nil, nil, 50, nil, nil, 50, 50, 50, 50, 50, - 50, 50, 50, nil, 50, 50, 50, nil, 50, 50, - 50, 50, 50, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 50, nil, nil, 50, nil, nil, 50, 50, - nil, nil, 50, nil, nil, nil, nil, nil, 50, nil, - nil, nil, nil, nil, nil, nil, nil, 50, nil, nil, - nil, nil, 50, 50, 50, 50, nil, 50, 50, 50, - 50, nil, nil, nil, nil, 50, 50, nil, nil, nil, - nil, nil, nil, 50, nil, 50, 50, 50, 64, nil, - 50, 50, nil, nil, nil, 64, 64, 64, nil, nil, - 64, 64, 64, nil, 64, nil, nil, nil, nil, nil, - nil, nil, 64, nil, 64, 64, 64, nil, nil, nil, - 707, 707, 707, 707, 64, 64, nil, 64, 64, 64, - 64, 64, nil, nil, nil, nil, 707, 707, 707, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 707, - 707, nil, nil, 707, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, nil, nil, - 64, 64, 64, nil, nil, 64, nil, nil, 64, nil, - nil, 64, 64, nil, 64, nil, 64, nil, 64, nil, - 64, 64, nil, 64, 64, 64, 64, 64, nil, 64, - nil, 64, nil, 707, 707, 707, 707, nil, 707, 707, - 707, 707, nil, nil, nil, 64, 707, 707, 64, 64, - 64, 64, nil, 64, 707, 64, 707, 707, 707, nil, - 64, 66, 66, 66, 66, 66, nil, nil, nil, 66, - 66, nil, nil, nil, 66, nil, 66, 66, 66, 66, - 66, 66, 66, nil, nil, nil, nil, nil, 66, 66, - 66, 66, 66, 66, 66, nil, nil, 66, nil, nil, - nil, nil, nil, 66, 66, nil, 66, 66, 66, 66, - 66, 66, 66, 66, 66, nil, 66, 66, 66, nil, - 66, 66, 66, 66, 66, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 66, nil, nil, 66, nil, nil, - 66, 66, nil, nil, 66, nil, 66, nil, nil, nil, - 66, nil, nil, nil, nil, nil, nil, nil, nil, 66, - nil, nil, nil, nil, 66, 66, 66, 66, nil, 66, - 66, 66, 66, nil, nil, nil, nil, 66, 66, nil, - nil, nil, 67, 67, 67, 66, 67, 66, 66, 66, - 67, 67, 66, 66, nil, 67, nil, 67, 67, 67, - 67, 67, 67, 67, nil, nil, nil, nil, nil, 67, - 67, 67, 67, 67, 67, 67, nil, nil, 67, nil, - nil, nil, nil, nil, nil, 67, nil, nil, 67, 67, - 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, - nil, 67, 67, 67, 67, 67, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 67, nil, nil, 67, nil, - nil, 67, 67, nil, nil, 67, nil, 67, nil, nil, - nil, 67, nil, nil, 67, nil, nil, nil, nil, nil, - 67, nil, nil, nil, nil, 67, 67, 67, 67, nil, - 67, 67, 67, 67, nil, nil, nil, nil, 67, 67, - nil, nil, nil, 68, 68, 68, 67, 68, 67, 67, - 67, 68, 68, 67, 67, nil, 68, nil, 68, 68, - 68, 68, 68, 68, 68, nil, nil, nil, nil, nil, - 68, 68, 68, 68, 68, 68, 68, nil, nil, 68, - nil, nil, nil, nil, nil, nil, 68, nil, nil, 68, - 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, - 68, nil, 68, 68, 68, 68, 68, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 68, nil, nil, 68, - nil, nil, 68, 68, nil, nil, 68, nil, nil, nil, - nil, nil, 68, nil, nil, 68, nil, nil, nil, nil, - nil, 68, nil, nil, nil, nil, 68, 68, 68, 68, - nil, 68, 68, 68, 68, nil, nil, nil, nil, 68, - 68, nil, nil, nil, 71, 71, 71, 68, 71, 68, - 68, 68, 71, 71, 68, 68, nil, 71, nil, 71, - 71, 71, 71, 71, 71, 71, nil, nil, nil, nil, - nil, 71, 71, 71, 71, 71, 71, 71, nil, nil, - 71, nil, nil, nil, nil, nil, nil, 71, nil, nil, - 71, 71, 71, 71, 71, 71, 71, 71, nil, 71, - 71, 71, nil, 71, 71, 71, 71, 71, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 71, nil, nil, - 71, nil, nil, 71, 71, nil, nil, 71, nil, nil, - nil, nil, nil, 71, nil, nil, nil, nil, nil, nil, - nil, nil, 71, nil, nil, nil, nil, 71, 71, 71, - 71, nil, 71, 71, 71, 71, nil, nil, nil, nil, - 71, 71, nil, nil, nil, 72, 72, 72, 71, 72, - 71, 71, 71, 72, 72, 71, 71, nil, 72, nil, - 72, 72, 72, 72, 72, 72, 72, nil, nil, nil, - nil, nil, 72, 72, 72, 72, 72, 72, 72, nil, - nil, 72, nil, nil, nil, nil, nil, nil, 72, nil, - nil, 72, 72, 72, 72, 72, 72, 72, 72, nil, - 72, 72, 72, nil, 72, 72, 72, 72, 72, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 72, nil, - nil, 72, nil, nil, 72, 72, nil, nil, 72, nil, - nil, nil, nil, nil, 72, nil, nil, nil, nil, nil, - nil, nil, nil, 72, nil, nil, nil, nil, 72, 72, - 72, 72, nil, 72, 72, 72, 72, nil, nil, nil, - nil, 72, 72, nil, nil, nil, 75, 75, 75, 72, - 75, 72, 72, 72, 75, 75, 72, 72, nil, 75, - nil, 75, 75, 75, 75, 75, 75, 75, nil, nil, - nil, nil, nil, 75, 75, 75, 75, 75, 75, 75, - nil, nil, 75, nil, nil, nil, nil, nil, nil, 75, - nil, nil, 75, 75, 75, 75, 75, 75, 75, 75, - nil, 75, 75, 75, nil, 75, 75, 75, 75, 75, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 75, - nil, nil, 75, nil, nil, 75, 75, nil, nil, 75, - nil, nil, nil, nil, nil, 75, nil, nil, nil, nil, - nil, nil, nil, nil, 75, nil, nil, nil, nil, 75, - 75, 75, 75, nil, 75, 75, 75, 75, nil, nil, - nil, nil, 75, 75, 75, nil, nil, nil, nil, 75, - 75, nil, 75, 75, 75, nil, nil, 75, 75, 124, - 124, 124, 124, 124, nil, nil, nil, 124, 124, nil, - nil, nil, 124, nil, 124, 124, 124, 124, 124, 124, - 124, nil, nil, nil, nil, nil, 124, 124, 124, 124, - 124, 124, 124, nil, nil, 124, nil, nil, nil, nil, - nil, 124, 124, 124, 124, 124, 124, 124, 124, 124, - 124, 124, 124, nil, 124, 124, 124, nil, 124, 124, - 124, 124, 124, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 124, nil, nil, 124, nil, nil, 124, 124, - nil, nil, 124, nil, 124, nil, nil, nil, 124, nil, - nil, nil, nil, nil, nil, nil, nil, 124, nil, nil, - nil, nil, 124, 124, 124, 124, nil, 124, 124, 124, - 124, nil, nil, nil, nil, 124, 124, nil, nil, nil, - nil, nil, 124, 124, nil, 124, 124, 124, nil, nil, - 124, 124, 129, 129, 129, nil, 129, nil, nil, nil, - 129, 129, nil, nil, nil, 129, nil, 129, 129, 129, - 129, 129, 129, 129, nil, nil, nil, nil, nil, 129, - 129, 129, 129, 129, 129, 129, nil, nil, 129, nil, - nil, nil, nil, nil, nil, 129, nil, nil, 129, 129, - 129, 129, 129, 129, 129, 129, nil, 129, 129, 129, - nil, 129, 129, 129, 129, 129, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 129, nil, nil, 129, nil, - nil, 129, 129, nil, nil, 129, nil, nil, nil, nil, - nil, 129, nil, nil, nil, nil, nil, nil, nil, nil, - 129, nil, nil, nil, nil, 129, 129, 129, 129, nil, - 129, 129, 129, 129, nil, nil, nil, nil, 129, 129, - nil, nil, nil, 130, 130, 130, 129, 130, 129, 129, - 129, 130, 130, 129, 129, nil, 130, nil, 130, 130, - 130, 130, 130, 130, 130, nil, nil, nil, nil, nil, - 130, 130, 130, 130, 130, 130, 130, nil, nil, 130, - nil, nil, nil, nil, nil, nil, 130, nil, nil, 130, - 130, 130, 130, 130, 130, 130, 130, nil, 130, 130, - 130, nil, 130, 130, 130, 130, 130, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 130, nil, nil, 130, - nil, nil, 130, 130, nil, nil, 130, nil, nil, nil, - nil, nil, 130, nil, nil, nil, nil, nil, nil, nil, - nil, 130, nil, nil, nil, nil, 130, 130, 130, 130, - nil, 130, 130, 130, 130, nil, nil, nil, nil, 130, - 130, nil, nil, nil, 131, 131, 131, 130, 131, 130, - 130, 130, 131, 131, 130, 130, nil, 131, nil, 131, - 131, 131, 131, 131, 131, 131, nil, nil, nil, nil, - nil, 131, 131, 131, 131, 131, 131, 131, nil, nil, - 131, nil, nil, nil, nil, nil, nil, 131, nil, nil, - 131, 131, 131, 131, 131, 131, 131, 131, nil, 131, - 131, 131, nil, 131, 131, 131, 131, 131, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 131, nil, nil, - 131, nil, nil, 131, 131, nil, nil, 131, nil, nil, - nil, nil, nil, 131, nil, nil, nil, nil, nil, nil, - nil, nil, 131, nil, nil, nil, nil, 131, 131, 131, - 131, nil, 131, 131, 131, 131, nil, nil, nil, nil, - 131, 131, nil, nil, nil, 132, 132, 132, 131, 132, - 131, 131, 131, 132, 132, 131, 131, nil, 132, nil, - 132, 132, 132, 132, 132, 132, 132, nil, nil, nil, - nil, nil, 132, 132, 132, 132, 132, 132, 132, nil, - nil, 132, nil, nil, nil, nil, nil, nil, 132, nil, - nil, 132, 132, 132, 132, 132, 132, 132, 132, nil, - 132, 132, 132, nil, 132, 132, 132, 132, 132, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 132, nil, - nil, 132, nil, nil, 132, 132, nil, nil, 132, nil, - nil, nil, nil, nil, 132, nil, nil, nil, nil, nil, - nil, nil, nil, 132, nil, nil, nil, nil, 132, 132, - 132, 132, nil, 132, 132, 132, 132, nil, nil, nil, - nil, 132, 132, nil, nil, nil, nil, nil, nil, 132, - nil, 132, 132, 132, nil, nil, 132, 132, 133, 133, - 133, 133, 133, nil, nil, nil, 133, 133, nil, nil, - nil, 133, nil, 133, 133, 133, 133, 133, 133, 133, - nil, nil, nil, nil, nil, 133, 133, 133, 133, 133, - 133, 133, nil, nil, 133, nil, nil, nil, nil, nil, - 133, 133, nil, 133, 133, 133, 133, 133, 133, 133, - 133, 133, nil, 133, 133, 133, nil, 133, 133, 133, - 133, 133, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 133, nil, nil, 133, nil, nil, 133, 133, nil, - nil, 133, nil, 133, nil, nil, nil, 133, nil, nil, - nil, nil, nil, nil, nil, nil, 133, nil, nil, nil, - nil, 133, 133, 133, 133, nil, 133, 133, 133, 133, - nil, nil, nil, nil, 133, 133, nil, nil, nil, 219, - 219, 219, 133, 219, 133, 133, 133, 219, 219, 133, - 133, nil, 219, nil, 219, 219, 219, 219, 219, 219, - 219, nil, nil, nil, nil, nil, 219, 219, 219, 219, - 219, 219, 219, nil, nil, 219, nil, nil, nil, nil, - nil, nil, 219, nil, nil, 219, 219, 219, 219, 219, - 219, 219, 219, nil, 219, 219, 219, nil, 219, 219, - 219, 219, 219, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 219, nil, nil, 219, nil, nil, 219, 219, - nil, nil, 219, nil, 219, nil, nil, nil, 219, nil, - nil, nil, nil, nil, nil, nil, nil, 219, nil, nil, - nil, nil, 219, 219, 219, 219, nil, 219, 219, 219, - 219, nil, nil, nil, nil, 219, 219, nil, nil, nil, - 220, 220, 220, 219, 220, 219, 219, 219, 220, 220, - 219, 219, nil, 220, nil, 220, 220, 220, 220, 220, - 220, 220, nil, nil, nil, nil, nil, 220, 220, 220, - 220, 220, 220, 220, nil, nil, 220, nil, nil, nil, - nil, nil, nil, 220, nil, nil, 220, 220, 220, 220, - 220, 220, 220, 220, nil, 220, 220, 220, nil, 220, - 220, 220, 220, 220, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 220, nil, nil, 220, nil, nil, 220, - 220, nil, nil, 220, nil, 220, nil, nil, nil, 220, - nil, nil, nil, nil, nil, nil, nil, nil, 220, nil, - nil, nil, nil, 220, 220, 220, 220, nil, 220, 220, - 220, 220, nil, nil, nil, nil, 220, 220, nil, nil, - nil, 221, 221, 221, 220, 221, 220, 220, 220, 221, - 221, 220, 220, nil, 221, nil, 221, 221, 221, 221, - 221, 221, 221, nil, nil, nil, nil, nil, 221, 221, - 221, 221, 221, 221, 221, nil, nil, 221, nil, nil, - nil, nil, nil, nil, 221, nil, nil, 221, 221, 221, - 221, 221, 221, 221, 221, nil, 221, 221, 221, nil, - 221, 221, 221, 221, 221, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 221, nil, nil, 221, nil, nil, - 221, 221, nil, nil, 221, nil, nil, nil, nil, nil, - 221, nil, nil, nil, nil, nil, nil, nil, nil, 221, - nil, nil, nil, nil, 221, 221, 221, 221, nil, 221, - 221, 221, 221, nil, nil, nil, nil, 221, 221, nil, - nil, nil, 222, 222, 222, 221, 222, 221, 221, 221, - 222, 222, 221, 221, nil, 222, nil, 222, 222, 222, - 222, 222, 222, 222, nil, nil, nil, nil, nil, 222, - 222, 222, 222, 222, 222, 222, nil, nil, 222, nil, - nil, nil, nil, nil, nil, 222, nil, nil, 222, 222, - 222, 222, 222, 222, 222, 222, nil, 222, 222, 222, - nil, 222, 222, 222, 222, 222, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 222, nil, nil, 222, nil, - nil, 222, 222, nil, nil, 222, nil, nil, nil, nil, - nil, 222, nil, nil, nil, nil, nil, nil, nil, nil, - 222, nil, nil, nil, nil, 222, 222, 222, 222, nil, - 222, 222, 222, 222, nil, nil, nil, nil, 222, 222, - nil, nil, nil, 223, 223, 223, 222, 223, 222, 222, - 222, 223, 223, 222, 222, nil, 223, nil, 223, 223, - 223, 223, 223, 223, 223, nil, nil, nil, nil, nil, - 223, 223, 223, 223, 223, 223, 223, nil, nil, 223, - nil, nil, nil, nil, nil, nil, 223, nil, nil, 223, - 223, 223, 223, 223, 223, 223, 223, nil, 223, 223, - 223, nil, 223, 223, 223, 223, 223, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 223, nil, nil, 223, - nil, nil, 223, 223, nil, nil, 223, nil, nil, nil, - nil, nil, 223, nil, nil, nil, nil, nil, nil, nil, - nil, 223, nil, nil, nil, nil, 223, 223, 223, 223, - nil, 223, 223, 223, 223, nil, nil, nil, nil, 223, - 223, nil, nil, nil, 224, 224, 224, 223, 224, 223, - 223, 223, 224, 224, 223, 223, nil, 224, nil, 224, - 224, 224, 224, 224, 224, 224, nil, nil, nil, nil, - nil, 224, 224, 224, 224, 224, 224, 224, nil, nil, - 224, nil, nil, nil, nil, nil, nil, 224, nil, nil, - 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, nil, 224, 224, 224, 224, 224, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 224, nil, nil, - 224, nil, nil, 224, 224, nil, nil, 224, nil, 224, - nil, 224, nil, 224, nil, nil, 224, nil, nil, nil, - nil, nil, 224, nil, nil, nil, nil, 224, 224, 224, - 224, nil, 224, 224, 224, 224, nil, nil, nil, nil, - 224, 224, nil, nil, nil, 229, 229, 229, 224, 229, - 224, 224, 224, 229, 229, 224, 224, nil, 229, nil, - 229, 229, 229, 229, 229, 229, 229, nil, nil, nil, - nil, nil, 229, 229, 229, 229, 229, 229, 229, nil, - nil, 229, nil, nil, nil, nil, nil, nil, 229, nil, - nil, 229, 229, 229, 229, 229, 229, 229, 229, nil, - 229, 229, 229, nil, 229, 229, 229, 229, 229, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 229, nil, - nil, 229, nil, nil, 229, 229, nil, nil, 229, nil, - nil, nil, nil, nil, 229, nil, nil, nil, nil, nil, - nil, nil, nil, 229, nil, nil, nil, nil, 229, 229, - 229, 229, nil, 229, 229, 229, 229, nil, nil, nil, - nil, 229, 229, nil, nil, nil, 230, 230, 230, 229, - 230, 229, 229, 229, 230, 230, 229, 229, nil, 230, - nil, 230, 230, 230, 230, 230, 230, 230, nil, nil, - nil, nil, nil, 230, 230, 230, 230, 230, 230, 230, - nil, nil, 230, nil, nil, nil, nil, nil, nil, 230, - nil, nil, 230, 230, 230, 230, 230, 230, 230, 230, - nil, 230, 230, 230, nil, 230, 230, 230, 230, 230, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 230, - nil, nil, 230, nil, nil, 230, 230, nil, nil, 230, - nil, nil, nil, nil, nil, 230, nil, nil, nil, nil, - nil, nil, nil, nil, 230, nil, nil, nil, nil, 230, - 230, 230, 230, nil, 230, 230, 230, 230, nil, nil, - nil, nil, 230, 230, nil, nil, nil, 231, 231, 231, - 230, 231, 230, 230, 230, 231, 231, 230, 230, nil, - 231, nil, 231, 231, 231, 231, 231, 231, 231, nil, - nil, nil, nil, nil, 231, 231, 231, 231, 231, 231, - 231, nil, nil, 231, nil, nil, nil, nil, nil, nil, - 231, nil, nil, 231, 231, 231, 231, 231, 231, 231, - 231, nil, 231, 231, 231, nil, 231, 231, 231, 231, - 231, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 231, nil, nil, 231, nil, nil, 231, 231, nil, nil, - 231, nil, nil, nil, nil, nil, 231, nil, nil, nil, - nil, nil, nil, nil, nil, 231, nil, nil, nil, nil, - 231, 231, 231, 231, nil, 231, 231, 231, 231, nil, - nil, nil, nil, 231, 231, 231, nil, nil, 242, 242, - 242, 231, 242, 231, 231, 231, 242, 242, 231, 231, - nil, 242, nil, 242, 242, 242, 242, 242, 242, 242, - nil, nil, nil, nil, nil, 242, 242, 242, 242, 242, - 242, 242, nil, nil, 242, nil, nil, nil, nil, nil, - nil, 242, nil, nil, 242, 242, 242, 242, 242, 242, - 242, 242, nil, 242, 242, 242, nil, 242, 242, 242, - 242, 242, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 242, nil, nil, 242, nil, nil, 242, 242, nil, - nil, 242, nil, nil, nil, nil, nil, 242, nil, nil, - nil, nil, nil, nil, nil, nil, 242, nil, nil, nil, - nil, 242, 242, 242, 242, nil, 242, 242, 242, 242, - nil, nil, nil, nil, 242, 242, nil, nil, nil, 247, - 247, 247, 242, 247, 242, 242, 242, 247, 247, 242, - 242, nil, 247, nil, 247, 247, 247, 247, 247, 247, - 247, nil, nil, nil, nil, nil, 247, 247, 247, 247, - 247, 247, 247, nil, nil, 247, nil, nil, nil, nil, - nil, nil, 247, nil, nil, 247, 247, 247, 247, 247, - 247, 247, 247, nil, 247, 247, 247, nil, 247, 247, - 247, 247, 247, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 247, nil, nil, 247, nil, nil, 247, 247, - nil, nil, 247, nil, nil, nil, nil, nil, 247, nil, - nil, nil, nil, nil, nil, nil, nil, 247, nil, nil, - nil, nil, 247, 247, 247, 247, nil, 247, 247, 247, - 247, nil, nil, nil, nil, 247, 247, nil, nil, nil, - 248, 248, 248, 247, 248, 247, 247, 247, 248, 248, - 247, 247, nil, 248, nil, 248, 248, 248, 248, 248, - 248, 248, nil, nil, nil, nil, nil, 248, 248, 248, - 248, 248, 248, 248, nil, nil, 248, nil, nil, nil, - nil, nil, nil, 248, nil, nil, 248, 248, 248, 248, - 248, 248, 248, 248, nil, 248, 248, 248, nil, 248, - 248, 248, 248, 248, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 248, nil, nil, 248, nil, nil, 248, - 248, nil, nil, 248, nil, nil, nil, nil, nil, 248, - nil, nil, nil, nil, nil, nil, nil, nil, 248, nil, - nil, nil, nil, 248, 248, 248, 248, nil, 248, 248, - 248, 248, nil, nil, nil, nil, 248, 248, nil, nil, - nil, 249, 249, 249, 248, 249, 248, 248, 248, 249, - 249, 248, 248, nil, 249, nil, 249, 249, 249, 249, - 249, 249, 249, nil, nil, nil, nil, nil, 249, 249, - 249, 249, 249, 249, 249, nil, nil, 249, nil, nil, - nil, nil, nil, nil, 249, nil, nil, 249, 249, 249, - 249, 249, 249, 249, 249, nil, 249, 249, 249, nil, - 249, 249, 249, 249, 249, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 249, nil, nil, 249, nil, nil, - 249, 249, nil, nil, 249, nil, nil, nil, nil, nil, - 249, nil, nil, nil, nil, nil, nil, nil, nil, 249, - nil, nil, nil, nil, 249, 249, 249, 249, nil, 249, - 249, 249, 249, nil, nil, nil, nil, 249, 249, nil, - nil, nil, 250, 250, 250, 249, 250, 249, 249, 249, - 250, 250, 249, 249, nil, 250, nil, 250, 250, 250, - 250, 250, 250, 250, nil, nil, nil, nil, nil, 250, - 250, 250, 250, 250, 250, 250, nil, nil, 250, nil, - nil, nil, nil, nil, nil, 250, nil, nil, 250, 250, - 250, 250, 250, 250, 250, 250, nil, 250, 250, 250, - nil, 250, 250, 250, 250, 250, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 250, nil, nil, 250, nil, - nil, 250, 250, nil, nil, 250, nil, nil, nil, nil, - nil, 250, nil, nil, nil, nil, nil, nil, nil, nil, - 250, nil, nil, nil, nil, 250, 250, 250, 250, nil, - 250, 250, 250, 250, nil, nil, nil, nil, 250, 250, - nil, nil, nil, 251, 251, 251, 250, 251, 250, 250, - 250, 251, 251, 250, 250, nil, 251, nil, 251, 251, - 251, 251, 251, 251, 251, nil, nil, nil, nil, nil, - 251, 251, 251, 251, 251, 251, 251, nil, nil, 251, - nil, nil, nil, nil, nil, nil, 251, nil, nil, 251, - 251, 251, 251, 251, 251, 251, 251, nil, 251, 251, - 251, nil, 251, 251, 251, 251, 251, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 251, nil, nil, 251, - nil, nil, 251, 251, nil, nil, 251, nil, nil, nil, - nil, nil, 251, nil, nil, nil, nil, nil, nil, nil, - nil, 251, nil, nil, nil, nil, 251, 251, 251, 251, - nil, 251, 251, 251, 251, nil, nil, nil, nil, 251, - 251, nil, nil, nil, 252, 252, 252, 251, 252, 251, - 251, 251, 252, 252, 251, 251, nil, 252, nil, 252, - 252, 252, 252, 252, 252, 252, nil, nil, nil, nil, - nil, 252, 252, 252, 252, 252, 252, 252, nil, nil, - 252, nil, nil, nil, nil, nil, nil, 252, nil, nil, - 252, 252, 252, 252, 252, 252, 252, 252, nil, 252, - 252, 252, nil, 252, 252, 252, 252, 252, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 252, nil, nil, - 252, nil, nil, 252, 252, nil, nil, 252, nil, nil, - nil, nil, nil, 252, nil, nil, nil, nil, nil, nil, - nil, nil, 252, nil, nil, nil, nil, 252, 252, 252, - 252, nil, 252, 252, 252, 252, nil, nil, nil, nil, - 252, 252, nil, nil, nil, 253, 253, 253, 252, 253, - 252, 252, 252, 253, 253, 252, 252, nil, 253, nil, - 253, 253, 253, 253, 253, 253, 253, nil, nil, nil, - nil, nil, 253, 253, 253, 253, 253, 253, 253, nil, - nil, 253, nil, nil, nil, nil, nil, nil, 253, nil, - nil, 253, 253, 253, 253, 253, 253, 253, 253, nil, - 253, 253, 253, nil, 253, 253, 253, 253, 253, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 253, nil, - nil, 253, nil, nil, 253, 253, nil, nil, 253, nil, - nil, nil, nil, nil, 253, nil, nil, nil, nil, nil, - nil, nil, nil, 253, nil, nil, nil, nil, 253, 253, - 253, 253, nil, 253, 253, 253, 253, nil, nil, nil, - nil, 253, 253, nil, nil, nil, 254, 254, 254, 253, - 254, 253, 253, 253, 254, 254, 253, 253, nil, 254, - nil, 254, 254, 254, 254, 254, 254, 254, nil, nil, - nil, nil, nil, 254, 254, 254, 254, 254, 254, 254, - nil, nil, 254, nil, nil, nil, nil, nil, nil, 254, - nil, nil, 254, 254, 254, 254, 254, 254, 254, 254, - nil, 254, 254, 254, nil, 254, 254, 254, 254, 254, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 254, - nil, nil, 254, nil, nil, 254, 254, nil, nil, 254, - nil, nil, nil, nil, nil, 254, nil, nil, nil, nil, - nil, nil, nil, nil, 254, nil, nil, nil, nil, 254, - 254, 254, 254, nil, 254, 254, 254, 254, nil, nil, - nil, nil, 254, 254, nil, nil, nil, 255, 255, 255, - 254, 255, 254, 254, 254, 255, 255, 254, 254, nil, - 255, nil, 255, 255, 255, 255, 255, 255, 255, nil, - nil, nil, nil, nil, 255, 255, 255, 255, 255, 255, - 255, nil, nil, 255, nil, nil, nil, nil, nil, nil, - 255, nil, nil, 255, 255, 255, 255, 255, 255, 255, - 255, nil, 255, 255, 255, nil, 255, 255, 255, 255, - 255, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 255, nil, nil, 255, nil, nil, 255, 255, nil, nil, - 255, nil, nil, nil, nil, nil, 255, nil, nil, nil, - nil, nil, nil, nil, nil, 255, nil, nil, nil, nil, - 255, 255, 255, 255, nil, 255, 255, 255, 255, nil, - nil, nil, nil, 255, 255, nil, nil, nil, 256, 256, - 256, 255, 256, 255, 255, 255, 256, 256, 255, 255, - nil, 256, nil, 256, 256, 256, 256, 256, 256, 256, - nil, nil, nil, nil, nil, 256, 256, 256, 256, 256, - 256, 256, nil, nil, 256, nil, nil, nil, nil, nil, - nil, 256, nil, nil, 256, 256, 256, 256, 256, 256, - 256, 256, nil, 256, 256, 256, nil, 256, 256, 256, - 256, 256, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 256, nil, nil, 256, nil, nil, 256, 256, nil, - nil, 256, nil, nil, nil, nil, nil, 256, nil, nil, - nil, nil, nil, nil, nil, nil, 256, nil, nil, nil, - nil, 256, 256, 256, 256, nil, 256, 256, 256, 256, - nil, nil, nil, nil, 256, 256, nil, nil, nil, 257, - 257, 257, 256, 257, 256, 256, 256, 257, 257, 256, - 256, nil, 257, nil, 257, 257, 257, 257, 257, 257, - 257, nil, nil, nil, nil, nil, 257, 257, 257, 257, - 257, 257, 257, nil, nil, 257, nil, nil, nil, nil, - nil, nil, 257, nil, nil, 257, 257, 257, 257, 257, - 257, 257, 257, nil, 257, 257, 257, nil, 257, 257, - 257, 257, 257, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 257, nil, nil, 257, nil, nil, 257, 257, - nil, nil, 257, nil, nil, nil, nil, nil, 257, nil, - nil, nil, nil, nil, nil, nil, nil, 257, nil, nil, - nil, nil, 257, 257, 257, 257, nil, 257, 257, 257, - 257, nil, nil, nil, nil, 257, 257, nil, nil, nil, - 258, 258, 258, 257, 258, 257, 257, 257, 258, 258, - 257, 257, nil, 258, nil, 258, 258, 258, 258, 258, - 258, 258, nil, nil, nil, nil, nil, 258, 258, 258, - 258, 258, 258, 258, nil, nil, 258, nil, nil, nil, - nil, nil, nil, 258, nil, nil, 258, 258, 258, 258, - 258, 258, 258, 258, nil, 258, 258, 258, nil, 258, - 258, 258, 258, 258, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 258, nil, nil, 258, nil, nil, 258, - 258, nil, nil, 258, nil, nil, nil, nil, nil, 258, - nil, nil, nil, nil, nil, nil, nil, nil, 258, nil, - nil, nil, nil, 258, 258, 258, 258, nil, 258, 258, - 258, 258, nil, nil, nil, nil, 258, 258, nil, nil, - nil, 259, 259, 259, 258, 259, 258, 258, 258, 259, - 259, 258, 258, nil, 259, nil, 259, 259, 259, 259, - 259, 259, 259, nil, nil, nil, nil, nil, 259, 259, - 259, 259, 259, 259, 259, nil, nil, 259, nil, nil, - nil, nil, nil, nil, 259, nil, nil, 259, 259, 259, - 259, 259, 259, 259, 259, nil, 259, 259, 259, nil, - 259, 259, 259, 259, 259, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 259, nil, nil, 259, nil, nil, - 259, 259, nil, nil, 259, nil, nil, nil, nil, nil, - 259, nil, nil, nil, nil, nil, nil, nil, nil, 259, - nil, nil, nil, nil, 259, 259, 259, 259, nil, 259, - 259, 259, 259, nil, nil, nil, nil, 259, 259, nil, - nil, nil, 260, 260, 260, 259, 260, 259, 259, 259, - 260, 260, 259, 259, nil, 260, nil, 260, 260, 260, - 260, 260, 260, 260, nil, nil, nil, nil, nil, 260, - 260, 260, 260, 260, 260, 260, nil, nil, 260, nil, - nil, nil, nil, nil, nil, 260, nil, nil, 260, 260, - 260, 260, 260, 260, 260, 260, nil, 260, 260, 260, - nil, 260, 260, 260, 260, 260, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 260, nil, nil, 260, nil, - nil, 260, 260, nil, nil, 260, nil, nil, nil, nil, - nil, 260, nil, nil, nil, nil, nil, nil, nil, nil, - 260, nil, nil, nil, nil, 260, 260, 260, 260, nil, - 260, 260, 260, 260, nil, nil, nil, nil, 260, 260, - nil, nil, nil, 261, 261, 261, 260, 261, 260, 260, - 260, 261, 261, 260, 260, nil, 261, nil, 261, 261, - 261, 261, 261, 261, 261, nil, nil, nil, nil, nil, - 261, 261, 261, 261, 261, 261, 261, nil, nil, 261, - nil, nil, nil, nil, nil, nil, 261, nil, nil, 261, - 261, 261, 261, 261, 261, 261, 261, nil, 261, 261, - 261, nil, 261, 261, 261, 261, 261, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 261, nil, nil, 261, - nil, nil, 261, 261, nil, nil, 261, nil, nil, nil, - nil, nil, 261, nil, nil, nil, nil, nil, nil, nil, - nil, 261, nil, nil, nil, nil, 261, 261, 261, 261, - nil, 261, 261, 261, 261, nil, nil, nil, nil, 261, - 261, nil, nil, nil, 262, 262, 262, 261, 262, 261, - 261, 261, 262, 262, 261, 261, nil, 262, nil, 262, - 262, 262, 262, 262, 262, 262, nil, nil, nil, nil, - nil, 262, 262, 262, 262, 262, 262, 262, nil, nil, - 262, nil, nil, nil, nil, nil, nil, 262, nil, nil, - 262, 262, 262, 262, 262, 262, 262, 262, nil, 262, - 262, 262, nil, 262, 262, 262, 262, 262, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 262, nil, nil, - 262, nil, nil, 262, 262, nil, nil, 262, nil, nil, - nil, nil, nil, 262, nil, nil, nil, nil, nil, nil, - nil, nil, 262, nil, nil, nil, nil, 262, 262, 262, - 262, nil, 262, 262, 262, 262, nil, nil, nil, nil, - 262, 262, nil, nil, nil, 263, 263, 263, 262, 263, - 262, 262, 262, 263, 263, 262, 262, nil, 263, nil, - 263, 263, 263, 263, 263, 263, 263, nil, nil, nil, - nil, nil, 263, 263, 263, 263, 263, 263, 263, nil, - nil, 263, nil, nil, nil, nil, nil, nil, 263, nil, - nil, 263, 263, 263, 263, 263, 263, 263, 263, nil, - 263, 263, 263, nil, 263, 263, 263, 263, 263, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 263, nil, - nil, 263, nil, nil, 263, 263, nil, nil, 263, nil, - nil, nil, nil, nil, 263, nil, nil, nil, nil, nil, - nil, nil, nil, 263, nil, nil, nil, nil, 263, 263, - 263, 263, nil, 263, 263, 263, 263, nil, nil, nil, - nil, 263, 263, nil, nil, nil, 264, 264, 264, 263, - 264, 263, 263, 263, 264, 264, 263, 263, nil, 264, - nil, 264, 264, 264, 264, 264, 264, 264, nil, nil, - nil, nil, nil, 264, 264, 264, 264, 264, 264, 264, - nil, nil, 264, nil, nil, nil, nil, nil, nil, 264, - nil, nil, 264, 264, 264, 264, 264, 264, 264, 264, - nil, 264, 264, 264, nil, 264, 264, 264, 264, 264, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 264, - nil, nil, 264, nil, nil, 264, 264, nil, nil, 264, - nil, nil, nil, nil, nil, 264, nil, nil, nil, nil, - nil, nil, nil, nil, 264, nil, nil, nil, nil, 264, - 264, 264, 264, nil, 264, 264, 264, 264, nil, nil, - nil, nil, 264, 264, nil, nil, nil, 265, 265, 265, - 264, 265, 264, 264, 264, 265, 265, 264, 264, nil, - 265, nil, 265, 265, 265, 265, 265, 265, 265, nil, - nil, nil, nil, nil, 265, 265, 265, 265, 265, 265, - 265, nil, nil, 265, nil, nil, nil, nil, nil, nil, - 265, nil, nil, 265, 265, 265, 265, 265, 265, 265, - 265, nil, 265, 265, 265, nil, 265, 265, 265, 265, - 265, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 265, nil, nil, 265, nil, nil, 265, 265, nil, nil, - 265, nil, nil, nil, nil, nil, 265, nil, nil, nil, - nil, nil, nil, nil, nil, 265, nil, nil, nil, nil, - 265, 265, 265, 265, nil, 265, 265, 265, 265, nil, - nil, nil, nil, 265, 265, nil, nil, nil, 266, 266, - 266, 265, 266, 265, 265, 265, 266, 266, 265, 265, - nil, 266, nil, 266, 266, 266, 266, 266, 266, 266, - nil, nil, nil, nil, nil, 266, 266, 266, 266, 266, - 266, 266, nil, nil, 266, nil, nil, nil, nil, nil, - nil, 266, nil, nil, 266, 266, 266, 266, 266, 266, - 266, 266, nil, 266, 266, 266, nil, 266, 266, 266, - 266, 266, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 266, nil, nil, 266, nil, nil, 266, 266, nil, - nil, 266, nil, nil, nil, nil, nil, 266, nil, nil, - nil, nil, nil, nil, nil, nil, 266, nil, nil, nil, - nil, 266, 266, 266, 266, nil, 266, 266, 266, 266, - nil, nil, nil, nil, 266, 266, nil, nil, nil, 267, - 267, 267, 266, 267, 266, 266, 266, 267, 267, 266, - 266, nil, 267, nil, 267, 267, 267, 267, 267, 267, - 267, nil, nil, nil, nil, nil, 267, 267, 267, 267, - 267, 267, 267, nil, nil, 267, nil, nil, nil, nil, - nil, nil, 267, nil, nil, 267, 267, 267, 267, 267, - 267, 267, 267, nil, 267, 267, 267, nil, 267, 267, - 267, 267, 267, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 267, nil, nil, 267, nil, nil, 267, 267, - nil, nil, 267, nil, nil, nil, nil, nil, 267, nil, - nil, nil, nil, nil, nil, nil, nil, 267, nil, nil, - nil, nil, 267, 267, 267, 267, nil, 267, 267, 267, - 267, nil, nil, nil, nil, 267, 267, nil, nil, nil, - 268, 268, 268, 267, 268, 267, 267, 267, 268, 268, - 267, 267, nil, 268, nil, 268, 268, 268, 268, 268, - 268, 268, nil, nil, nil, nil, nil, 268, 268, 268, - 268, 268, 268, 268, nil, nil, 268, nil, nil, nil, - nil, nil, nil, 268, nil, nil, 268, 268, 268, 268, - 268, 268, 268, 268, nil, 268, 268, 268, nil, 268, - 268, 268, 268, 268, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 268, nil, nil, 268, nil, nil, 268, - 268, nil, nil, 268, nil, nil, nil, nil, nil, 268, - nil, nil, nil, nil, nil, nil, nil, nil, 268, nil, - nil, nil, nil, 268, 268, 268, 268, nil, 268, 268, - 268, 268, nil, nil, nil, nil, 268, 268, nil, nil, - nil, 273, 273, 273, 268, 273, 268, 268, 268, 273, - 273, 268, 268, nil, 273, nil, 273, 273, 273, 273, - 273, 273, 273, nil, nil, nil, nil, nil, 273, 273, - 273, 273, 273, 273, 273, nil, nil, 273, nil, nil, - nil, nil, nil, nil, 273, nil, nil, 273, 273, 273, - 273, 273, 273, 273, 273, nil, 273, 273, 273, nil, - 273, 273, 273, 273, 273, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 273, nil, nil, 273, nil, nil, - 273, 273, nil, nil, 273, nil, nil, nil, nil, nil, - 273, nil, nil, nil, nil, nil, nil, nil, nil, 273, - nil, nil, nil, nil, 273, 273, 273, 273, nil, 273, - 273, 273, 273, nil, nil, nil, nil, 273, 273, nil, - nil, nil, 289, 289, 289, 273, 289, 273, 273, 273, - 289, 289, 273, 273, nil, 289, nil, 289, 289, 289, - 289, 289, 289, 289, nil, nil, nil, nil, nil, 289, - 289, 289, 289, 289, 289, 289, nil, nil, 289, nil, - nil, nil, nil, nil, nil, 289, nil, nil, 289, 289, - 289, 289, 289, 289, 289, 289, nil, 289, 289, 289, - nil, 289, 289, 289, 289, 289, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 289, nil, nil, 289, nil, - nil, 289, 289, nil, nil, 289, nil, nil, nil, nil, - nil, 289, nil, nil, nil, nil, nil, nil, nil, nil, - 289, nil, nil, nil, nil, 289, 289, 289, 289, nil, - 289, 289, 289, 289, nil, nil, nil, nil, 289, 289, - nil, nil, nil, 296, 296, 296, 289, 296, 289, 289, - 289, 296, 296, 289, 289, nil, 296, nil, 296, 296, - 296, 296, 296, 296, 296, nil, nil, nil, nil, nil, - 296, 296, 296, 296, 296, 296, 296, nil, nil, 296, - nil, nil, nil, nil, nil, nil, 296, nil, nil, 296, - 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, - 296, nil, 296, 296, 296, 296, 296, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 296, nil, nil, 296, - nil, nil, 296, 296, nil, nil, 296, nil, 296, nil, - 296, nil, 296, nil, nil, 296, nil, nil, nil, nil, - nil, 296, nil, nil, nil, nil, 296, 296, 296, 296, - nil, 296, 296, 296, 296, nil, nil, nil, nil, 296, - 296, nil, nil, nil, 297, 297, 297, 296, 297, 296, - 296, 296, 297, 297, 296, 296, nil, 297, nil, 297, - 297, 297, 297, 297, 297, 297, nil, nil, nil, nil, - nil, 297, 297, 297, 297, 297, 297, 297, nil, nil, - 297, nil, nil, nil, nil, nil, nil, 297, nil, nil, - 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, - 297, 297, nil, 297, 297, 297, 297, 297, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 297, nil, nil, - 297, nil, nil, 297, 297, nil, nil, 297, nil, 297, - nil, 297, nil, 297, nil, nil, 297, nil, nil, nil, - nil, nil, 297, nil, nil, nil, nil, 297, 297, 297, - 297, nil, 297, 297, 297, 297, nil, nil, nil, nil, - 297, 297, nil, nil, nil, 305, 305, 305, 297, 305, - 297, 297, 297, 305, 305, 297, 297, nil, 305, nil, - 305, 305, 305, 305, 305, 305, 305, nil, nil, nil, - nil, nil, 305, 305, 305, 305, 305, 305, 305, nil, - nil, 305, nil, nil, nil, nil, nil, nil, 305, nil, - nil, 305, 305, 305, 305, 305, 305, 305, 305, 305, - 305, 305, 305, nil, 305, 305, 305, 305, 305, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 305, nil, - nil, 305, nil, nil, 305, 305, nil, nil, 305, nil, - 305, nil, 305, nil, 305, nil, nil, 305, nil, nil, - nil, nil, nil, 305, nil, nil, nil, nil, 305, 305, - 305, 305, nil, 305, 305, 305, 305, nil, nil, nil, - nil, 305, 305, 305, nil, nil, 312, 312, 312, 305, - 312, 305, 305, 305, 312, 312, 305, 305, nil, 312, - nil, 312, 312, 312, 312, 312, 312, 312, nil, nil, - nil, nil, nil, 312, 312, 312, 312, 312, 312, 312, - nil, nil, 312, nil, nil, nil, nil, nil, nil, 312, - nil, nil, 312, 312, 312, 312, 312, 312, 312, 312, - nil, 312, 312, 312, nil, 312, 312, 312, 312, 312, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 312, - nil, nil, 312, nil, nil, 312, 312, nil, nil, 312, - nil, nil, nil, nil, nil, 312, nil, nil, nil, nil, - nil, nil, nil, nil, 312, nil, nil, nil, nil, 312, - 312, 312, 312, nil, 312, 312, 312, 312, nil, nil, - nil, nil, 312, 312, nil, nil, nil, 314, 314, 314, - 312, 314, 312, 312, 312, 314, 314, 312, 312, nil, - 314, nil, 314, 314, 314, 314, 314, 314, 314, nil, - nil, nil, nil, nil, 314, 314, 314, 314, 314, 314, - 314, nil, nil, 314, nil, nil, nil, nil, nil, nil, - 314, nil, nil, 314, 314, 314, 314, 314, 314, 314, - 314, nil, 314, 314, 314, nil, 314, 314, 314, 314, - 314, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 314, nil, nil, 314, nil, nil, 314, 314, nil, nil, - 314, nil, nil, nil, nil, nil, 314, nil, nil, nil, - nil, nil, nil, nil, nil, 314, nil, nil, nil, nil, - 314, 314, 314, 314, nil, 314, 314, 314, 314, nil, - nil, nil, nil, 314, 314, nil, nil, nil, 317, 317, - 317, 314, 317, 314, 314, 314, 317, 317, 314, 314, - nil, 317, nil, 317, 317, 317, 317, 317, 317, 317, - nil, nil, nil, nil, nil, 317, 317, 317, 317, 317, - 317, 317, nil, nil, 317, nil, nil, nil, nil, nil, - nil, 317, nil, nil, 317, 317, 317, 317, 317, 317, - 317, 317, nil, 317, 317, 317, nil, 317, 317, 317, - 317, 317, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 317, nil, nil, 317, nil, nil, 317, 317, nil, - nil, 317, nil, nil, nil, nil, nil, 317, nil, nil, - nil, nil, nil, nil, nil, nil, 317, nil, nil, nil, - nil, 317, 317, 317, 317, nil, 317, 317, 317, 317, - nil, nil, nil, nil, 317, 317, nil, nil, nil, 318, - 318, 318, 317, 318, 317, 317, 317, 318, 318, 317, - 317, nil, 318, nil, 318, 318, 318, 318, 318, 318, - 318, nil, nil, nil, nil, nil, 318, 318, 318, 318, - 318, 318, 318, nil, nil, 318, nil, nil, nil, nil, - nil, nil, 318, nil, nil, 318, 318, 318, 318, 318, - 318, 318, 318, nil, 318, 318, 318, nil, 318, 318, - 318, 318, 318, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 318, nil, nil, 318, nil, nil, 318, 318, - nil, nil, 318, nil, nil, nil, nil, nil, 318, nil, - nil, nil, nil, nil, nil, nil, nil, 318, nil, nil, - nil, nil, 318, 318, 318, 318, nil, 318, 318, 318, - 318, nil, nil, nil, nil, 318, 318, nil, nil, nil, - nil, nil, nil, 318, nil, 318, 318, 318, nil, nil, - 318, 318, 323, 323, 323, 323, 323, nil, nil, nil, - 323, 323, nil, nil, nil, 323, nil, 323, 323, 323, - 323, 323, 323, 323, nil, nil, nil, nil, nil, 323, - 323, 323, 323, 323, 323, 323, nil, nil, 323, nil, - nil, nil, nil, nil, 323, 323, nil, 323, 323, 323, - 323, 323, 323, 323, 323, 323, nil, 323, 323, 323, - nil, 323, 323, 323, 323, 323, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 323, nil, nil, 323, nil, - nil, 323, 323, nil, nil, 323, nil, 323, nil, nil, - nil, 323, nil, nil, nil, nil, nil, nil, nil, nil, - 323, nil, nil, nil, nil, 323, 323, 323, 323, nil, - 323, 323, 323, 323, nil, nil, nil, nil, 323, 323, - nil, nil, nil, 359, 359, 359, 323, 359, 323, 323, - 323, 359, 359, 323, 323, nil, 359, nil, 359, 359, - 359, 359, 359, 359, 359, nil, nil, nil, nil, nil, - 359, 359, 359, 359, 359, 359, 359, nil, nil, 359, - nil, nil, nil, nil, nil, nil, 359, nil, nil, 359, - 359, 359, 359, 359, 359, 359, 359, nil, 359, 359, - 359, nil, 359, 359, 359, 359, 359, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 359, nil, nil, 359, - nil, nil, 359, 359, nil, nil, 359, nil, nil, nil, - nil, nil, 359, nil, nil, nil, nil, nil, nil, nil, - nil, 359, nil, nil, nil, nil, 359, 359, 359, 359, - nil, 359, 359, 359, 359, nil, nil, nil, nil, 359, - 359, nil, nil, nil, 361, 361, 361, 359, 361, 359, - 359, 359, 361, 361, 359, 359, nil, 361, nil, 361, - 361, 361, 361, 361, 361, 361, nil, nil, nil, nil, - nil, 361, 361, 361, 361, 361, 361, 361, nil, nil, - 361, nil, nil, nil, nil, nil, nil, 361, nil, nil, - 361, 361, 361, 361, 361, 361, 361, 361, nil, 361, - 361, 361, nil, 361, 361, 361, 361, 361, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 361, nil, nil, - 361, 361, nil, 361, 361, nil, nil, 361, nil, nil, - nil, nil, nil, 361, nil, nil, nil, nil, nil, nil, - nil, nil, 361, nil, nil, nil, nil, 361, 361, 361, - 361, nil, 361, 361, 361, 361, nil, nil, nil, nil, - 361, 361, nil, nil, nil, 384, 384, 384, 361, 384, - 361, 361, 361, 384, 384, 361, 361, nil, 384, nil, - 384, 384, 384, 384, 384, 384, 384, nil, nil, nil, - nil, nil, 384, 384, 384, 384, 384, 384, 384, nil, - nil, 384, nil, nil, nil, nil, nil, nil, 384, nil, - nil, 384, 384, 384, 384, 384, 384, 384, 384, nil, - 384, 384, 384, nil, 384, 384, 384, 384, 384, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 384, nil, - nil, 384, nil, nil, 384, 384, nil, nil, 384, nil, - nil, nil, nil, nil, 384, nil, nil, nil, nil, nil, - nil, nil, nil, 384, nil, nil, nil, nil, 384, 384, - 384, 384, nil, 384, 384, 384, 384, nil, nil, nil, - nil, 384, 384, nil, nil, nil, 405, 405, 405, 384, - 405, 384, 384, 384, 405, 405, 384, 384, nil, 405, - nil, 405, 405, 405, 405, 405, 405, 405, nil, nil, - nil, nil, nil, 405, 405, 405, 405, 405, 405, 405, - nil, nil, 405, nil, nil, nil, nil, nil, nil, 405, - nil, nil, 405, 405, 405, 405, 405, 405, 405, 405, - nil, 405, 405, 405, nil, 405, 405, 405, 405, 405, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 405, - nil, nil, 405, nil, nil, 405, 405, nil, nil, 405, - nil, nil, nil, nil, nil, 405, nil, nil, nil, nil, - nil, nil, nil, nil, 405, nil, nil, nil, nil, 405, - 405, 405, 405, nil, 405, 405, 405, 405, nil, nil, - nil, nil, 405, 405, nil, nil, nil, 434, 434, 434, - 405, 434, 405, 405, 405, 434, 434, 405, 405, nil, - 434, nil, 434, 434, 434, 434, 434, 434, 434, nil, - nil, nil, nil, nil, 434, 434, 434, 434, 434, 434, - 434, nil, nil, 434, nil, nil, nil, nil, nil, nil, - 434, nil, nil, 434, 434, 434, 434, 434, 434, 434, - 434, nil, 434, 434, 434, nil, 434, 434, 434, 434, - 434, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 434, nil, nil, 434, nil, nil, 434, 434, nil, nil, - 434, nil, nil, nil, nil, nil, 434, nil, nil, nil, - nil, nil, nil, nil, nil, 434, nil, nil, nil, nil, - 434, 434, 434, 434, nil, 434, 434, 434, 434, nil, - nil, nil, nil, 434, 434, nil, nil, nil, nil, nil, - nil, 434, nil, 434, 434, 434, 458, nil, 434, 434, - nil, nil, nil, 458, 458, 458, nil, nil, 458, 458, - 458, nil, 458, nil, nil, nil, nil, nil, nil, nil, - 458, 458, 458, 458, nil, nil, nil, nil, nil, nil, - nil, nil, 458, 458, nil, 458, 458, 458, 458, 458, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 458, 458, 458, 458, 458, 458, 458, 458, - 458, 458, 458, 458, 458, 458, nil, nil, 458, 458, - 458, nil, nil, 458, nil, 458, 458, nil, nil, 458, - 458, nil, 458, nil, 458, nil, 458, nil, 458, 458, - nil, 458, 458, 458, 458, 458, nil, 458, 458, 458, - 777, nil, 777, 777, 777, 777, 777, nil, nil, nil, - nil, nil, nil, 458, nil, 777, 458, 458, 467, 458, - nil, 458, nil, nil, nil, 467, 467, 467, 458, nil, - 467, 467, 467, nil, 467, nil, nil, 777, nil, nil, - nil, nil, 467, 467, 467, 467, 467, nil, 777, 777, - nil, nil, nil, 777, 467, 467, nil, 467, 467, 467, - 467, 467, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 467, 467, 467, 467, 467, 467, - 467, 467, 467, 467, 467, 467, 467, 467, nil, nil, - 467, 467, 467, nil, nil, 467, nil, nil, 467, nil, - nil, 467, 467, nil, 467, nil, 467, nil, 467, nil, - 467, 467, nil, 467, 467, 467, 467, 467, nil, 467, - 467, 467, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 467, nil, nil, 467, 467, - 467, 467, nil, 467, 468, 467, nil, nil, nil, nil, - 467, 468, 468, 468, nil, nil, 468, 468, 468, nil, - 468, nil, nil, nil, nil, nil, nil, nil, 468, 468, - 468, 468, 468, nil, nil, nil, nil, nil, nil, nil, - 468, 468, nil, 468, 468, 468, 468, 468, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, - 468, 468, 468, 468, nil, nil, 468, 468, 468, nil, - nil, 468, nil, nil, 468, nil, nil, 468, 468, nil, - 468, nil, 468, nil, 468, nil, 468, 468, nil, 468, - 468, 468, 468, 468, nil, 468, 468, 468, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 468, nil, nil, 468, 468, 468, 468, nil, 468, - nil, 468, nil, 477, 477, 477, 468, 477, nil, nil, - nil, 477, 477, nil, nil, nil, 477, nil, 477, 477, - 477, 477, 477, 477, 477, nil, nil, nil, nil, nil, - 477, 477, 477, 477, 477, 477, 477, nil, nil, 477, - nil, nil, nil, nil, nil, nil, 477, nil, nil, 477, - 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, - 477, nil, 477, 477, 477, 477, 477, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 477, nil, nil, 477, - nil, nil, 477, 477, nil, nil, 477, nil, 477, nil, - 477, nil, 477, nil, nil, 477, nil, nil, nil, nil, - nil, 477, nil, nil, nil, nil, 477, 477, 477, 477, - nil, 477, 477, 477, 477, nil, nil, nil, nil, 477, - 477, nil, nil, nil, 479, 479, 479, 477, 479, 477, - 477, 477, 479, 479, 477, 477, nil, 479, nil, 479, - 479, 479, 479, 479, 479, 479, nil, nil, nil, nil, - nil, 479, 479, 479, 479, 479, 479, 479, nil, nil, - 479, nil, nil, nil, nil, nil, nil, 479, nil, nil, - 479, 479, 479, 479, 479, 479, 479, 479, nil, 479, - 479, 479, nil, 479, 479, 479, 479, 479, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 479, nil, nil, - 479, nil, nil, 479, 479, nil, nil, 479, nil, nil, - nil, nil, nil, 479, nil, nil, nil, nil, nil, nil, - nil, nil, 479, nil, nil, nil, nil, 479, 479, 479, - 479, nil, 479, 479, 479, 479, nil, nil, nil, nil, - 479, 479, nil, nil, nil, 480, 480, 480, 479, 480, - 479, 479, 479, 480, 480, 479, 479, nil, 480, nil, - 480, 480, 480, 480, 480, 480, 480, nil, nil, nil, - nil, nil, 480, 480, 480, 480, 480, 480, 480, nil, - nil, 480, nil, nil, nil, nil, nil, nil, 480, nil, - nil, 480, 480, 480, 480, 480, 480, 480, 480, nil, - 480, 480, 480, nil, 480, 480, 480, 480, 480, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 480, nil, - nil, 480, nil, nil, 480, 480, nil, nil, 480, nil, - nil, nil, nil, nil, 480, nil, nil, nil, nil, nil, - nil, nil, nil, 480, nil, nil, nil, nil, 480, 480, - 480, 480, nil, 480, 480, 480, 480, nil, nil, nil, - nil, 480, 480, nil, nil, nil, 481, 481, 481, 480, - 481, 480, 480, 480, 481, 481, 480, 480, nil, 481, - nil, 481, 481, 481, 481, 481, 481, 481, nil, nil, - nil, nil, nil, 481, 481, 481, 481, 481, 481, 481, - nil, nil, 481, nil, nil, nil, nil, nil, nil, 481, - nil, nil, 481, 481, 481, 481, 481, 481, 481, 481, - nil, 481, 481, 481, nil, 481, 481, 481, 481, 481, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 481, - nil, nil, 481, nil, nil, 481, 481, nil, nil, 481, - nil, nil, nil, nil, nil, 481, nil, nil, nil, nil, - nil, nil, nil, nil, 481, nil, nil, nil, nil, 481, - 481, 481, 481, nil, 481, 481, 481, 481, nil, nil, - nil, nil, 481, 481, nil, nil, nil, nil, nil, nil, - 481, nil, 481, 481, 481, 510, nil, 481, 481, nil, - nil, nil, 510, 510, 510, nil, nil, 510, 510, 510, - 907, 510, 907, 907, 907, 907, 907, nil, nil, 510, - 510, 510, nil, nil, nil, 907, nil, nil, nil, nil, - nil, 510, 510, nil, 510, 510, 510, 510, 510, nil, - nil, nil, nil, nil, nil, nil, 367, 907, 367, 367, - 367, 367, 367, nil, nil, nil, 907, 907, 907, 907, - nil, 367, nil, 907, nil, 407, nil, 407, 407, 407, - 407, 407, 510, nil, nil, nil, nil, nil, nil, 510, - 407, nil, nil, 367, 510, 510, nil, nil, nil, 907, - nil, nil, 367, 367, 367, 367, nil, nil, nil, 367, - nil, nil, 407, 407, nil, nil, nil, 510, 510, nil, - nil, 407, 407, 407, 407, nil, nil, nil, 407, nil, - nil, nil, 510, nil, nil, 510, nil, 515, 515, 515, - 510, 515, nil, nil, nil, 515, 515, 510, nil, nil, - 515, nil, 515, 515, 515, 515, 515, 515, 515, nil, - nil, nil, nil, nil, 515, 515, 515, 515, 515, 515, - 515, nil, nil, 515, nil, nil, nil, nil, nil, nil, - 515, nil, nil, 515, 515, 515, 515, 515, 515, 515, - 515, nil, 515, 515, 515, nil, 515, 515, 515, 515, - 515, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 515, nil, nil, 515, nil, nil, 515, 515, nil, nil, - 515, nil, nil, nil, nil, nil, 515, nil, nil, nil, - nil, nil, nil, nil, nil, 515, nil, nil, nil, nil, - 515, 515, 515, 515, nil, 515, 515, 515, 515, nil, - nil, nil, nil, 515, 515, nil, nil, nil, 525, 525, - 525, 515, 525, 515, 515, 515, 525, 525, 515, 515, - nil, 525, nil, 525, 525, 525, 525, 525, 525, 525, - nil, nil, nil, nil, nil, 525, 525, 525, 525, 525, - 525, 525, nil, nil, 525, nil, nil, nil, nil, nil, - nil, 525, nil, nil, 525, 525, 525, 525, 525, 525, - 525, 525, 525, 525, 525, 525, nil, 525, 525, 525, - 525, 525, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 525, nil, nil, 525, nil, nil, 525, 525, nil, - nil, 525, nil, 525, nil, 525, nil, 525, nil, nil, - 525, nil, nil, nil, nil, nil, 525, nil, nil, nil, - nil, 525, 525, 525, 525, nil, 525, 525, 525, 525, - nil, nil, nil, nil, 525, 525, nil, nil, nil, 527, - 527, 527, 525, 527, 525, 525, 525, 527, 527, 525, - 525, nil, 527, nil, 527, 527, 527, 527, 527, 527, - 527, nil, nil, nil, nil, nil, 527, 527, 527, 527, - 527, 527, 527, nil, nil, 527, nil, nil, nil, nil, - nil, nil, 527, nil, nil, 527, 527, 527, 527, 527, - 527, 527, 527, 527, 527, 527, 527, nil, 527, 527, - 527, 527, 527, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 527, nil, nil, 527, nil, nil, 527, 527, - nil, nil, 527, nil, nil, nil, 527, nil, 527, nil, - nil, 527, nil, nil, nil, nil, nil, 527, nil, nil, - nil, nil, 527, 527, 527, 527, nil, 527, 527, 527, - 527, nil, nil, nil, nil, 527, 527, nil, nil, nil, - 529, 529, 529, 527, 529, 527, 527, 527, 529, 529, - 527, 527, nil, 529, nil, 529, 529, 529, 529, 529, - 529, 529, nil, nil, nil, nil, nil, 529, 529, 529, - 529, 529, 529, 529, nil, nil, 529, nil, nil, nil, - nil, nil, nil, 529, nil, nil, 529, 529, 529, 529, - 529, 529, 529, 529, nil, 529, 529, 529, nil, 529, - 529, 529, 529, 529, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 529, nil, nil, 529, nil, nil, 529, - 529, nil, nil, 529, nil, nil, nil, nil, nil, 529, - nil, nil, nil, nil, nil, nil, nil, nil, 529, nil, - nil, nil, nil, 529, 529, 529, 529, nil, 529, 529, - 529, 529, nil, nil, nil, nil, 529, 529, nil, nil, - nil, nil, nil, nil, 529, nil, 529, 529, 529, nil, - nil, 529, 529, 535, 535, 535, 535, 535, nil, nil, - nil, 535, 535, nil, nil, nil, 535, nil, 535, 535, - 535, 535, 535, 535, 535, nil, nil, nil, nil, nil, - 535, 535, 535, 535, 535, 535, 535, nil, nil, 535, - nil, nil, nil, nil, nil, 535, 535, 535, 535, 535, - 535, 535, 535, 535, 535, 535, 535, nil, 535, 535, - 535, nil, 535, 535, 535, 535, 535, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 535, nil, nil, 535, - nil, nil, 535, 535, nil, nil, 535, nil, 535, nil, - nil, nil, 535, nil, nil, nil, nil, nil, nil, nil, - nil, 535, nil, nil, nil, nil, 535, 535, 535, 535, - nil, 535, 535, 535, 535, nil, nil, nil, nil, 535, - 535, nil, nil, nil, nil, nil, 535, 535, nil, 535, - 535, 535, nil, nil, 535, 535, 545, 545, 545, nil, - 545, nil, nil, nil, 545, 545, nil, nil, nil, 545, - nil, 545, 545, 545, 545, 545, 545, 545, nil, nil, - nil, nil, nil, 545, 545, 545, 545, 545, 545, 545, - nil, nil, 545, nil, nil, nil, nil, nil, nil, 545, - nil, nil, 545, 545, 545, 545, 545, 545, 545, 545, - 545, 545, 545, 545, nil, 545, 545, 545, 545, 545, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 545, - nil, nil, 545, nil, nil, 545, 545, nil, nil, 545, - nil, 545, nil, 545, nil, 545, nil, nil, 545, nil, - nil, nil, nil, nil, 545, nil, nil, nil, nil, 545, - 545, 545, 545, nil, 545, 545, 545, 545, nil, nil, - nil, nil, 545, 545, nil, nil, nil, 555, 555, 555, - 545, 555, 545, 545, 545, 555, 555, 545, 545, nil, - 555, nil, 555, 555, 555, 555, 555, 555, 555, nil, - nil, nil, nil, nil, 555, 555, 555, 555, 555, 555, - 555, nil, nil, 555, nil, nil, nil, nil, nil, nil, - 555, nil, nil, 555, 555, 555, 555, 555, 555, 555, - 555, nil, 555, 555, 555, nil, 555, 555, 555, 555, - 555, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 555, nil, nil, 555, nil, nil, 555, 555, nil, nil, - 555, nil, nil, nil, nil, nil, 555, nil, nil, nil, - nil, nil, nil, nil, nil, 555, nil, nil, nil, nil, - 555, 555, 555, 555, nil, 555, 555, 555, 555, nil, - nil, nil, nil, 555, 555, nil, nil, nil, 558, 558, - 558, 555, 558, 555, 555, 555, 558, 558, 555, 555, - nil, 558, nil, 558, 558, 558, 558, 558, 558, 558, - nil, nil, nil, nil, nil, 558, 558, 558, 558, 558, - 558, 558, nil, nil, 558, nil, nil, nil, nil, nil, - nil, 558, nil, nil, 558, 558, 558, 558, 558, 558, - 558, 558, nil, 558, 558, 558, nil, 558, 558, 558, - 558, 558, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 558, nil, nil, 558, nil, nil, 558, 558, nil, - nil, 558, nil, nil, nil, nil, nil, 558, nil, nil, - nil, nil, nil, nil, nil, nil, 558, nil, nil, nil, - nil, 558, 558, 558, 558, nil, 558, 558, 558, 558, - nil, nil, nil, nil, 558, 558, nil, nil, nil, 561, - 561, 561, 558, 561, 558, 558, 558, 561, 561, 558, - 558, nil, 561, nil, 561, 561, 561, 561, 561, 561, - 561, nil, nil, nil, nil, nil, 561, 561, 561, 561, - 561, 561, 561, nil, nil, 561, nil, nil, nil, nil, - nil, nil, 561, nil, nil, 561, 561, 561, 561, 561, - 561, 561, 561, nil, 561, 561, 561, nil, 561, 561, - 561, 561, 561, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 561, nil, nil, 561, nil, nil, 561, 561, - nil, nil, 561, nil, nil, nil, nil, nil, 561, nil, - nil, nil, nil, nil, nil, nil, nil, 561, nil, nil, - nil, nil, 561, 561, 561, 561, nil, 561, 561, 561, - 561, nil, nil, nil, nil, 561, 561, nil, nil, nil, - 562, 562, 562, 561, 562, 561, 561, 561, 562, 562, - 561, 561, nil, 562, nil, 562, 562, 562, 562, 562, - 562, 562, nil, nil, nil, nil, nil, 562, 562, 562, - 562, 562, 562, 562, nil, nil, 562, nil, nil, nil, - nil, nil, nil, 562, nil, nil, 562, 562, 562, 562, - 562, 562, 562, 562, nil, 562, 562, 562, nil, 562, - 562, 562, 562, 562, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 562, nil, nil, 562, nil, nil, 562, - 562, nil, nil, 562, nil, nil, nil, nil, nil, 562, - nil, nil, nil, nil, nil, nil, nil, nil, 562, nil, - nil, nil, nil, 562, 562, 562, 562, nil, 562, 562, - 562, 562, nil, nil, nil, nil, 562, 562, nil, nil, - nil, 588, 588, 588, 562, 588, 562, 562, 562, 588, - 588, 562, 562, nil, 588, nil, 588, 588, 588, 588, - 588, 588, 588, nil, nil, nil, nil, nil, 588, 588, - 588, 588, 588, 588, 588, nil, nil, 588, nil, nil, - nil, nil, nil, nil, 588, nil, nil, 588, 588, 588, - 588, 588, 588, 588, 588, nil, 588, 588, 588, nil, - 588, 588, 588, 588, 588, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 588, nil, nil, 588, nil, nil, - 588, 588, nil, nil, 588, nil, nil, nil, nil, nil, - 588, nil, nil, nil, nil, nil, nil, nil, nil, 588, - nil, nil, nil, nil, 588, 588, 588, 588, nil, 588, - 588, 588, 588, nil, nil, nil, nil, 588, 588, nil, - nil, nil, 602, 602, 602, 588, 602, 588, 588, 588, - 602, 602, 588, 588, nil, 602, nil, 602, 602, 602, - 602, 602, 602, 602, nil, nil, nil, nil, nil, 602, - 602, 602, 602, 602, 602, 602, nil, nil, 602, nil, - nil, nil, nil, nil, nil, 602, nil, nil, 602, 602, - 602, 602, 602, 602, 602, 602, nil, 602, 602, 602, - nil, 602, 602, 602, 602, 602, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 602, nil, nil, 602, nil, - nil, 602, 602, nil, nil, 602, nil, nil, nil, nil, - nil, 602, nil, nil, nil, nil, nil, nil, nil, nil, - 602, nil, nil, nil, nil, 602, 602, 602, 602, nil, - 602, 602, 602, 602, nil, nil, nil, nil, 602, 602, - nil, nil, nil, 608, 608, 608, 602, 608, 602, 602, - 602, 608, 608, 602, 602, nil, 608, nil, 608, 608, - 608, 608, 608, 608, 608, nil, nil, nil, nil, nil, - 608, 608, 608, 608, 608, 608, 608, nil, nil, 608, - nil, nil, nil, nil, nil, nil, 608, nil, nil, 608, - 608, 608, 608, 608, 608, 608, 608, 608, 608, 608, - 608, nil, 608, 608, 608, 608, 608, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 608, nil, nil, 608, - nil, nil, 608, 608, nil, nil, 608, nil, 608, nil, - nil, nil, 608, nil, nil, 608, nil, nil, nil, nil, - nil, 608, nil, nil, nil, nil, 608, 608, 608, 608, - nil, 608, 608, 608, 608, nil, nil, nil, nil, 608, - 608, nil, nil, nil, 611, 611, 611, 608, 611, 608, - 608, 608, 611, 611, 608, 608, nil, 611, nil, 611, - 611, 611, 611, 611, 611, 611, nil, nil, nil, nil, - nil, 611, 611, 611, 611, 611, 611, 611, nil, nil, - 611, nil, nil, nil, nil, nil, nil, 611, nil, nil, - 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, - 611, 611, nil, 611, 611, 611, 611, 611, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 611, nil, nil, - 611, nil, nil, 611, 611, nil, nil, 611, nil, nil, - nil, nil, nil, 611, nil, nil, 611, nil, nil, nil, - nil, nil, 611, nil, nil, nil, nil, 611, 611, 611, - 611, nil, 611, 611, 611, 611, nil, nil, nil, nil, - 611, 611, nil, nil, nil, 624, 624, 624, 611, 624, - 611, 611, 611, 624, 624, 611, 611, nil, 624, nil, - 624, 624, 624, 624, 624, 624, 624, nil, nil, nil, - nil, nil, 624, 624, 624, 624, 624, 624, 624, nil, - nil, 624, nil, nil, nil, nil, nil, nil, 624, nil, - nil, 624, 624, 624, 624, 624, 624, 624, 624, nil, - 624, 624, 624, nil, 624, 624, 624, 624, 624, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 624, nil, - nil, 624, nil, nil, 624, 624, nil, nil, 624, nil, - 624, nil, nil, nil, 624, nil, nil, nil, nil, nil, - nil, nil, nil, 624, nil, nil, nil, nil, 624, 624, - 624, 624, nil, 624, 624, 624, 624, nil, nil, nil, - nil, 624, 624, nil, nil, nil, 625, 625, 625, 624, - 625, 624, 624, 624, 625, 625, 624, 624, nil, 625, - nil, 625, 625, 625, 625, 625, 625, 625, nil, nil, - nil, nil, nil, 625, 625, 625, 625, 625, 625, 625, - nil, nil, 625, nil, nil, nil, nil, nil, nil, 625, - nil, nil, 625, 625, 625, 625, 625, 625, 625, 625, - 625, 625, 625, 625, nil, 625, 625, 625, 625, 625, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 625, - nil, nil, 625, nil, nil, 625, 625, nil, nil, 625, - nil, 625, nil, 625, nil, 625, nil, nil, 625, nil, - nil, nil, nil, nil, 625, nil, nil, nil, nil, 625, - 625, 625, 625, nil, 625, 625, 625, 625, nil, nil, - nil, nil, 625, 625, nil, nil, nil, 635, 635, 635, - 625, 635, 625, 625, 625, 635, 635, 625, 625, nil, - 635, nil, 635, 635, 635, 635, 635, 635, 635, nil, - nil, nil, nil, nil, 635, 635, 635, 635, 635, 635, - 635, nil, nil, 635, nil, nil, nil, nil, nil, nil, - 635, nil, nil, 635, 635, 635, 635, 635, 635, 635, - 635, 635, 635, 635, 635, nil, 635, 635, 635, 635, - 635, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 635, nil, nil, 635, nil, nil, 635, 635, nil, nil, - 635, nil, 635, nil, 635, nil, 635, nil, nil, 635, - nil, nil, nil, nil, nil, 635, nil, nil, nil, nil, - 635, 635, 635, 635, nil, 635, 635, 635, 635, nil, - nil, nil, nil, 635, 635, nil, nil, nil, nil, nil, - nil, 635, nil, 635, 635, 635, nil, nil, 635, 635, - 666, 666, 666, 666, 666, nil, nil, nil, 666, 666, - nil, nil, nil, 666, nil, 666, 666, 666, 666, 666, - 666, 666, nil, nil, nil, nil, nil, 666, 666, 666, - 666, 666, 666, 666, nil, nil, 666, nil, nil, nil, - nil, nil, 666, 666, nil, 666, 666, 666, 666, 666, - 666, 666, 666, 666, nil, 666, 666, 666, nil, 666, - 666, 666, 666, 666, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 666, nil, nil, 666, nil, nil, 666, - 666, nil, nil, 666, nil, 666, nil, nil, nil, 666, - nil, nil, nil, nil, nil, nil, nil, nil, 666, nil, - nil, nil, nil, 666, 666, 666, 666, nil, 666, 666, - 666, 666, nil, nil, nil, nil, 666, 666, nil, nil, - nil, 668, 668, 668, 666, 668, 666, 666, 666, 668, - 668, 666, 666, nil, 668, nil, 668, 668, 668, 668, - 668, 668, 668, nil, nil, nil, nil, nil, 668, 668, - 668, 668, 668, 668, 668, nil, nil, 668, nil, nil, - nil, nil, nil, nil, 668, nil, nil, 668, 668, 668, - 668, 668, 668, 668, 668, nil, 668, 668, 668, nil, - 668, 668, 668, 668, 668, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 668, nil, nil, 668, nil, nil, - 668, 668, nil, nil, 668, nil, 668, nil, nil, nil, - 668, nil, nil, nil, nil, nil, nil, nil, nil, 668, - nil, nil, nil, nil, 668, 668, 668, 668, nil, 668, - 668, 668, 668, nil, nil, nil, nil, 668, 668, nil, - nil, nil, 669, 669, 669, 668, 669, 668, 668, 668, - 669, 669, 668, 668, nil, 669, nil, 669, 669, 669, - 669, 669, 669, 669, nil, nil, nil, nil, nil, 669, - 669, 669, 669, 669, 669, 669, nil, nil, 669, nil, - nil, nil, nil, nil, nil, 669, nil, nil, 669, 669, - 669, 669, 669, 669, 669, 669, nil, 669, 669, 669, - nil, 669, 669, 669, 669, 669, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 669, nil, nil, 669, nil, - nil, 669, 669, nil, nil, 669, nil, nil, nil, nil, - nil, 669, nil, nil, nil, nil, nil, nil, nil, nil, - 669, nil, nil, nil, nil, 669, 669, 669, 669, nil, - 669, 669, 669, 669, nil, nil, nil, nil, 669, 669, - nil, nil, nil, 670, 670, 670, 669, 670, 669, 669, - 669, 670, 670, 669, 669, nil, 670, nil, 670, 670, - 670, 670, 670, 670, 670, nil, nil, nil, nil, nil, - 670, 670, 670, 670, 670, 670, 670, nil, nil, 670, - nil, nil, nil, nil, nil, nil, 670, nil, nil, 670, - 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, - 670, nil, 670, 670, 670, 670, 670, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 670, nil, nil, 670, - nil, nil, 670, 670, nil, nil, 670, nil, 670, nil, - 670, nil, 670, nil, nil, 670, nil, nil, nil, nil, - nil, 670, nil, nil, nil, nil, 670, 670, 670, 670, - nil, 670, 670, 670, 670, nil, nil, nil, nil, 670, - 670, nil, nil, nil, nil, nil, nil, 670, nil, 670, - 670, 670, nil, nil, 670, 670, 673, 673, 673, 673, - 673, nil, nil, nil, 673, 673, nil, nil, nil, 673, - nil, 673, 673, 673, 673, 673, 673, 673, nil, nil, - nil, nil, nil, 673, 673, 673, 673, 673, 673, 673, - nil, nil, 673, nil, nil, nil, nil, nil, 673, 673, - nil, 673, 673, 673, 673, 673, 673, 673, 673, 673, - nil, 673, 673, 673, nil, 673, 673, 673, 673, 673, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 673, - nil, nil, 673, nil, nil, 673, 673, nil, nil, 673, - nil, 673, nil, nil, nil, 673, nil, nil, nil, nil, - nil, nil, nil, nil, 673, nil, nil, nil, nil, 673, - 673, 673, 673, nil, 673, 673, 673, 673, nil, nil, - nil, nil, 673, 673, nil, nil, nil, 674, 674, 674, - 673, 674, 673, 673, 673, 674, 674, 673, 673, nil, - 674, nil, 674, 674, 674, 674, 674, 674, 674, nil, - nil, nil, nil, nil, 674, 674, 674, 674, 674, 674, - 674, nil, nil, 674, nil, nil, nil, nil, nil, nil, - 674, nil, nil, 674, 674, 674, 674, 674, 674, 674, - 674, nil, 674, 674, 674, nil, 674, 674, 674, 674, - 674, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 674, nil, nil, 674, nil, nil, 674, 674, nil, nil, - 674, nil, nil, nil, nil, nil, 674, nil, nil, nil, - nil, nil, nil, nil, nil, 674, nil, nil, nil, nil, - 674, 674, 674, 674, nil, 674, 674, 674, 674, nil, - nil, nil, nil, 674, 674, nil, nil, nil, 677, 677, - 677, 674, 677, 674, 674, 674, 677, 677, 674, 674, - nil, 677, nil, 677, 677, 677, 677, 677, 677, 677, - nil, nil, nil, nil, nil, 677, 677, 677, 677, 677, - 677, 677, nil, nil, 677, nil, nil, nil, nil, nil, - nil, 677, nil, nil, 677, 677, 677, 677, 677, 677, - 677, 677, 677, 677, 677, 677, nil, 677, 677, 677, - 677, 677, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 677, nil, nil, 677, nil, nil, 677, 677, nil, - nil, 677, nil, 677, nil, 677, nil, 677, nil, nil, - 677, nil, nil, nil, nil, nil, 677, nil, nil, nil, - nil, 677, 677, 677, 677, nil, 677, 677, 677, 677, - nil, nil, nil, nil, 677, 677, nil, nil, nil, 678, - 678, 678, 677, 678, 677, 677, 677, 678, 678, 677, - 677, nil, 678, nil, 678, 678, 678, 678, 678, 678, - 678, nil, nil, nil, nil, nil, 678, 678, 678, 678, - 678, 678, 678, nil, nil, 678, nil, nil, nil, nil, - nil, nil, 678, nil, nil, 678, 678, 678, 678, 678, - 678, 678, 678, 678, 678, 678, 678, nil, 678, 678, - 678, 678, 678, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 678, nil, nil, 678, nil, nil, 678, 678, - nil, nil, 678, nil, nil, nil, 678, nil, 678, nil, - nil, 678, nil, nil, nil, nil, nil, 678, nil, nil, - nil, nil, 678, 678, 678, 678, nil, 678, 678, 678, - 678, nil, nil, nil, nil, 678, 678, nil, nil, nil, - 679, 679, 679, 678, 679, 678, 678, 678, 679, 679, - 678, 678, nil, 679, nil, 679, 679, 679, 679, 679, - 679, 679, nil, nil, nil, nil, nil, 679, 679, 679, - 679, 679, 679, 679, nil, nil, 679, nil, nil, nil, - nil, nil, nil, 679, nil, nil, 679, 679, 679, 679, - 679, 679, 679, 679, nil, 679, 679, 679, nil, 679, - 679, 679, 679, 679, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 679, nil, nil, 679, nil, nil, 679, - 679, nil, nil, 679, nil, nil, nil, nil, nil, 679, - nil, nil, nil, nil, nil, nil, nil, nil, 679, nil, - nil, nil, nil, 679, 679, 679, 679, nil, 679, 679, - 679, 679, nil, nil, nil, nil, 679, 679, nil, nil, - nil, 680, 680, 680, 679, 680, 679, 679, 679, 680, - 680, 679, 679, nil, 680, nil, 680, 680, 680, 680, - 680, 680, 680, nil, nil, nil, nil, nil, 680, 680, - 680, 680, 680, 680, 680, nil, nil, 680, nil, nil, - nil, nil, nil, nil, 680, nil, nil, 680, 680, 680, - 680, 680, 680, 680, 680, nil, 680, 680, 680, nil, - 680, 680, 680, 680, 680, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 680, nil, nil, 680, nil, nil, - 680, 680, nil, nil, 680, nil, nil, nil, nil, nil, - 680, nil, nil, nil, nil, nil, nil, nil, nil, 680, - nil, nil, nil, nil, 680, 680, 680, 680, nil, 680, - 680, 680, 680, nil, nil, nil, nil, 680, 680, nil, - nil, nil, 684, 684, 684, 680, 684, 680, 680, 680, - 684, 684, 680, 680, nil, 684, nil, 684, 684, 684, - 684, 684, 684, 684, nil, nil, nil, nil, nil, 684, - 684, 684, 684, 684, 684, 684, nil, nil, 684, nil, - nil, nil, nil, nil, nil, 684, nil, nil, 684, 684, - 684, 684, 684, 684, 684, 684, nil, 684, 684, 684, - nil, 684, 684, 684, 684, 684, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 684, nil, nil, 684, nil, - nil, 684, 684, nil, nil, 684, nil, nil, nil, nil, - nil, 684, nil, nil, nil, nil, nil, nil, nil, nil, - 684, nil, nil, nil, nil, 684, 684, 684, 684, nil, - 684, 684, 684, 684, nil, nil, nil, nil, 684, 684, - nil, nil, nil, 685, 685, 685, 684, 685, 684, 684, - 684, 685, 685, 684, 684, nil, 685, nil, 685, 685, - 685, 685, 685, 685, 685, nil, nil, nil, nil, nil, - 685, 685, 685, 685, 685, 685, 685, nil, nil, 685, - nil, nil, nil, nil, nil, nil, 685, nil, nil, 685, - 685, 685, 685, 685, 685, 685, 685, nil, 685, 685, - 685, nil, 685, 685, 685, 685, 685, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 685, nil, nil, 685, - nil, nil, 685, 685, nil, nil, 685, nil, nil, nil, - nil, nil, 685, nil, nil, nil, nil, nil, nil, nil, - nil, 685, nil, nil, nil, nil, 685, 685, 685, 685, - nil, 685, 685, 685, 685, nil, nil, nil, nil, 685, - 685, nil, nil, nil, 733, 733, 733, 685, 733, 685, - 685, 685, 733, 733, 685, 685, nil, 733, nil, 733, - 733, 733, 733, 733, 733, 733, nil, nil, nil, nil, - nil, 733, 733, 733, 733, 733, 733, 733, nil, nil, - 733, nil, nil, nil, nil, nil, nil, 733, nil, nil, - 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, - 733, 733, nil, 733, 733, 733, 733, 733, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 733, nil, nil, - 733, nil, nil, 733, 733, nil, nil, 733, nil, 733, - nil, 733, nil, 733, nil, nil, 733, nil, nil, nil, - nil, nil, 733, nil, nil, nil, nil, 733, 733, 733, - 733, nil, 733, 733, 733, 733, nil, nil, nil, nil, - 733, 733, nil, nil, nil, 742, 742, 742, 733, 742, - 733, 733, 733, 742, 742, 733, 733, nil, 742, nil, - 742, 742, 742, 742, 742, 742, 742, nil, nil, nil, - nil, nil, 742, 742, 742, 742, 742, 742, 742, nil, - nil, 742, nil, nil, nil, nil, nil, nil, 742, nil, - nil, 742, 742, 742, 742, 742, 742, 742, 742, nil, - 742, 742, 742, nil, 742, 742, 742, 742, 742, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 742, nil, - nil, 742, nil, nil, 742, 742, nil, nil, 742, nil, - nil, nil, nil, nil, 742, nil, nil, nil, nil, nil, - nil, nil, nil, 742, nil, nil, nil, nil, 742, 742, - 742, 742, nil, 742, 742, 742, 742, nil, nil, nil, - nil, 742, 742, nil, nil, nil, 745, 745, 745, 742, - 745, 742, 742, 742, 745, 745, 742, 742, nil, 745, - nil, 745, 745, 745, 745, 745, 745, 745, nil, nil, - nil, nil, nil, 745, 745, 745, 745, 745, 745, 745, - nil, nil, 745, nil, nil, nil, nil, nil, nil, 745, - nil, nil, 745, 745, 745, 745, 745, 745, 745, 745, - nil, 745, 745, 745, nil, 745, 745, 745, 745, 745, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 745, - nil, nil, 745, nil, nil, 745, 745, nil, nil, 745, - nil, nil, nil, nil, nil, 745, nil, nil, nil, nil, - nil, nil, nil, nil, 745, nil, nil, nil, nil, 745, - 745, 745, 745, nil, 745, 745, 745, 745, nil, nil, - nil, nil, 745, 745, nil, nil, nil, 765, 765, 765, - 745, 765, 745, 745, 745, 765, 765, 745, 745, nil, - 765, nil, 765, 765, 765, 765, 765, 765, 765, nil, - nil, nil, nil, nil, 765, 765, 765, 765, 765, 765, - 765, nil, nil, 765, nil, nil, nil, nil, nil, nil, - 765, nil, nil, 765, 765, 765, 765, 765, 765, 765, - 765, nil, 765, 765, 765, nil, 765, 765, 765, 765, - 765, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 765, nil, nil, 765, nil, nil, 765, 765, nil, nil, - 765, nil, 765, nil, nil, nil, 765, nil, nil, nil, - nil, nil, nil, nil, nil, 765, nil, nil, nil, nil, - 765, 765, 765, 765, nil, 765, 765, 765, 765, nil, - nil, nil, nil, 765, 765, nil, nil, nil, 779, 779, - 779, 765, 779, 765, 765, 765, 779, 779, 765, 765, - nil, 779, nil, 779, 779, 779, 779, 779, 779, 779, - nil, nil, nil, nil, nil, 779, 779, 779, 779, 779, - 779, 779, nil, nil, 779, nil, nil, nil, nil, nil, - nil, 779, nil, nil, 779, 779, 779, 779, 779, 779, - 779, 779, nil, 779, 779, 779, nil, 779, 779, 779, - 779, 779, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 779, nil, nil, 779, nil, nil, 779, 779, nil, - nil, 779, nil, nil, nil, nil, nil, 779, nil, nil, - nil, nil, nil, nil, nil, nil, 779, nil, nil, nil, - nil, 779, 779, 779, 779, nil, 779, 779, 779, 779, - nil, nil, nil, nil, 779, 779, nil, nil, nil, 824, - 824, 824, 779, 824, 779, 779, 779, 824, 824, 779, - 779, nil, 824, nil, 824, 824, 824, 824, 824, 824, - 824, nil, nil, nil, nil, nil, 824, 824, 824, 824, - 824, 824, 824, nil, nil, 824, nil, nil, nil, nil, - nil, nil, 824, nil, nil, 824, 824, 824, 824, 824, - 824, 824, 824, nil, 824, 824, 824, nil, 824, 824, - 824, 824, 824, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 824, nil, nil, 824, nil, nil, 824, 824, - nil, nil, 824, nil, nil, nil, nil, nil, 824, nil, - nil, nil, nil, nil, nil, nil, nil, 824, nil, nil, - nil, nil, 824, 824, 824, 824, nil, 824, 824, 824, - 824, nil, nil, nil, nil, 824, 824, nil, nil, nil, - 844, 844, 844, 824, 844, 824, 824, 824, 844, 844, - 824, 824, nil, 844, nil, 844, 844, 844, 844, 844, - 844, 844, nil, nil, nil, nil, nil, 844, 844, 844, - 844, 844, 844, 844, nil, nil, 844, nil, nil, nil, - nil, nil, nil, 844, nil, nil, 844, 844, 844, 844, - 844, 844, 844, 844, nil, 844, 844, 844, nil, 844, - 844, 844, 844, 844, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 844, nil, nil, 844, nil, nil, 844, - 844, nil, nil, 844, nil, nil, nil, nil, nil, 844, - nil, nil, nil, nil, nil, nil, nil, nil, 844, nil, - nil, nil, nil, 844, 844, 844, 844, nil, 844, 844, - 844, 844, nil, nil, nil, nil, 844, 844, nil, nil, - nil, 852, 852, 852, 844, 852, 844, 844, 844, 852, - 852, 844, 844, nil, 852, nil, 852, 852, 852, 852, - 852, 852, 852, nil, nil, nil, nil, nil, 852, 852, - 852, 852, 852, 852, 852, nil, nil, 852, nil, nil, - nil, nil, nil, nil, 852, nil, nil, 852, 852, 852, - 852, 852, 852, 852, 852, nil, 852, 852, 852, nil, - 852, 852, 852, 852, 852, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 852, nil, nil, 852, nil, nil, - 852, 852, nil, nil, 852, nil, nil, nil, nil, nil, - 852, nil, nil, nil, nil, nil, nil, nil, nil, 852, - nil, nil, nil, nil, 852, 852, 852, 852, nil, 852, - 852, 852, 852, nil, nil, nil, nil, 852, 852, nil, - nil, nil, 865, 865, 865, 852, 865, 852, 852, 852, - 865, 865, 852, 852, nil, 865, nil, 865, 865, 865, - 865, 865, 865, 865, nil, nil, nil, nil, nil, 865, - 865, 865, 865, 865, 865, 865, nil, nil, 865, nil, - nil, nil, nil, nil, nil, 865, nil, nil, 865, 865, - 865, 865, 865, 865, 865, 865, nil, 865, 865, 865, - nil, 865, 865, 865, 865, 865, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 865, nil, nil, 865, nil, - nil, 865, 865, nil, nil, 865, nil, nil, nil, nil, - nil, 865, nil, nil, nil, nil, nil, nil, nil, nil, - 865, nil, nil, nil, nil, 865, 865, 865, 865, nil, - 865, 865, 865, 865, nil, nil, nil, nil, 865, 865, - nil, nil, nil, 866, 866, 866, 865, 866, 865, 865, - 865, 866, 866, 865, 865, nil, 866, nil, 866, 866, - 866, 866, 866, 866, 866, nil, nil, nil, nil, nil, - 866, 866, 866, 866, 866, 866, 866, nil, nil, 866, - nil, nil, nil, nil, nil, nil, 866, nil, nil, 866, - 866, 866, 866, 866, 866, 866, 866, nil, 866, 866, - 866, nil, 866, 866, 866, 866, 866, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 866, nil, nil, 866, - nil, nil, 866, 866, nil, nil, 866, nil, nil, nil, - nil, nil, 866, nil, nil, nil, nil, nil, nil, nil, - nil, 866, nil, nil, nil, nil, 866, 866, 866, 866, - nil, 866, 866, 866, 866, nil, nil, nil, nil, 866, - 866, nil, nil, nil, 867, 867, 867, 866, 867, 866, - 866, 866, 867, 867, 866, 866, nil, 867, nil, 867, - 867, 867, 867, 867, 867, 867, nil, nil, nil, nil, - nil, 867, 867, 867, 867, 867, 867, 867, nil, nil, - 867, nil, nil, nil, nil, nil, nil, 867, nil, nil, - 867, 867, 867, 867, 867, 867, 867, 867, nil, 867, - 867, 867, nil, 867, 867, 867, 867, 867, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 867, nil, nil, - 867, nil, nil, 867, 867, nil, nil, 867, nil, nil, - nil, nil, nil, 867, nil, nil, nil, nil, nil, nil, - nil, nil, 867, nil, nil, nil, nil, 867, 867, 867, - 867, nil, 867, 867, 867, 867, nil, nil, nil, nil, - 867, 867, nil, nil, nil, 868, 868, 868, 867, 868, - 867, 867, 867, 868, 868, 867, 867, nil, 868, nil, - 868, 868, 868, 868, 868, 868, 868, nil, nil, nil, - nil, nil, 868, 868, 868, 868, 868, 868, 868, nil, - nil, 868, nil, nil, nil, nil, nil, nil, 868, nil, - nil, 868, 868, 868, 868, 868, 868, 868, 868, nil, - 868, 868, 868, nil, 868, 868, 868, 868, 868, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 868, nil, - nil, 868, nil, nil, 868, 868, nil, nil, 868, nil, - nil, nil, nil, nil, 868, nil, nil, nil, nil, nil, - nil, nil, nil, 868, nil, nil, nil, nil, 868, 868, - 868, 868, nil, 868, 868, 868, 868, nil, nil, nil, - nil, 868, 868, nil, nil, nil, 897, 897, 897, 868, - 897, 868, 868, 868, 897, 897, 868, 868, nil, 897, - nil, 897, 897, 897, 897, 897, 897, 897, nil, nil, - nil, nil, nil, 897, 897, 897, 897, 897, 897, 897, - nil, nil, 897, nil, nil, nil, nil, nil, nil, 897, - nil, nil, 897, 897, 897, 897, 897, 897, 897, 897, - nil, 897, 897, 897, nil, 897, 897, 897, 897, 897, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 897, - nil, nil, 897, nil, nil, 897, 897, nil, nil, 897, - nil, nil, nil, nil, nil, 897, nil, nil, nil, nil, - nil, nil, nil, nil, 897, nil, nil, nil, nil, 897, - 897, 897, 897, nil, 897, 897, 897, 897, nil, nil, - nil, nil, 897, 897, nil, nil, nil, 917, 917, 917, - 897, 917, 897, 897, 897, 917, 917, 897, 897, nil, - 917, nil, 917, 917, 917, 917, 917, 917, 917, nil, - nil, nil, nil, nil, 917, 917, 917, 917, 917, 917, - 917, nil, nil, 917, nil, nil, nil, nil, nil, nil, - 917, nil, nil, 917, 917, 917, 917, 917, 917, 917, - 917, nil, 917, 917, 917, nil, 917, 917, 917, 917, - 917, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 917, nil, nil, 917, nil, nil, 917, 917, nil, nil, - 917, nil, nil, nil, nil, nil, 917, nil, nil, nil, - nil, nil, nil, nil, nil, 917, nil, nil, nil, nil, - 917, 917, 917, 917, nil, 917, 917, 917, 917, nil, - nil, nil, nil, 917, 917, nil, nil, nil, 945, 945, - 945, 917, 945, 917, 917, 917, 945, 945, 917, 917, - nil, 945, nil, 945, 945, 945, 945, 945, 945, 945, - nil, nil, nil, nil, nil, 945, 945, 945, 945, 945, - 945, 945, nil, nil, 945, nil, nil, nil, nil, nil, - nil, 945, nil, nil, 945, 945, 945, 945, 945, 945, - 945, 945, nil, 945, 945, 945, nil, 945, 945, 945, - 945, 945, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 945, nil, nil, 945, nil, nil, 945, 945, nil, - nil, 945, nil, nil, nil, nil, nil, 945, nil, nil, - nil, nil, nil, nil, nil, nil, 945, nil, nil, nil, - nil, 945, 945, 945, 945, nil, 945, 945, 945, 945, - nil, nil, nil, nil, 945, 945, nil, nil, nil, 949, - 949, 949, 945, 949, 945, 945, 945, 949, 949, 945, - 945, nil, 949, nil, 949, 949, 949, 949, 949, 949, - 949, nil, nil, nil, nil, nil, 949, 949, 949, 949, - 949, 949, 949, nil, nil, 949, nil, nil, nil, nil, - nil, nil, 949, nil, nil, 949, 949, 949, 949, 949, - 949, 949, 949, nil, 949, 949, 949, nil, 949, 949, - 949, 949, 949, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 949, nil, nil, 949, nil, nil, 949, 949, - nil, nil, 949, nil, nil, nil, nil, nil, 949, nil, - nil, nil, nil, nil, nil, nil, nil, 949, nil, nil, - nil, nil, 949, 949, 949, 949, nil, 949, 949, 949, - 949, nil, nil, nil, nil, 949, 949, nil, nil, nil, - 954, 954, 954, 949, 954, 949, 949, 949, 954, 954, - 949, 949, nil, 954, nil, 954, 954, 954, 954, 954, - 954, 954, nil, nil, nil, nil, nil, 954, 954, 954, - 954, 954, 954, 954, nil, nil, 954, nil, nil, nil, - nil, nil, nil, 954, nil, nil, 954, 954, 954, 954, - 954, 954, 954, 954, nil, 954, 954, 954, nil, 954, - 954, 954, 954, 954, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 954, nil, nil, 954, nil, nil, 954, - 954, nil, nil, 954, nil, 954, nil, nil, nil, 954, - nil, nil, nil, nil, nil, nil, nil, nil, 954, nil, - nil, nil, nil, 954, 954, 954, 954, nil, 954, 954, - 954, 954, nil, nil, nil, nil, 954, 954, nil, nil, - nil, 973, 973, 973, 954, 973, 954, 954, 954, 973, - 973, 954, 954, nil, 973, nil, 973, 973, 973, 973, - 973, 973, 973, nil, nil, nil, nil, nil, 973, 973, - 973, 973, 973, 973, 973, nil, nil, 973, nil, nil, - nil, nil, nil, nil, 973, nil, nil, 973, 973, 973, - 973, 973, 973, 973, 973, 973, 973, 973, 973, nil, - 973, 973, 973, 973, 973, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 973, nil, nil, 973, nil, nil, - 973, 973, nil, nil, 973, nil, nil, nil, 973, nil, - 973, nil, nil, 973, nil, nil, nil, nil, nil, 973, - nil, nil, nil, nil, 973, 973, 973, 973, nil, 973, - 973, 973, 973, nil, nil, nil, nil, 973, 973, nil, - nil, nil, 974, 974, 974, 973, 974, 973, 973, 973, - 974, 974, 973, 973, nil, 974, nil, 974, 974, 974, - 974, 974, 974, 974, nil, nil, nil, nil, nil, 974, - 974, 974, 974, 974, 974, 974, nil, nil, 974, nil, - nil, nil, nil, nil, nil, 974, nil, nil, 974, 974, - 974, 974, 974, 974, 974, 974, nil, 974, 974, 974, - nil, 974, 974, 974, 974, 974, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 974, nil, nil, 974, nil, - nil, 974, 974, nil, nil, 974, nil, nil, nil, nil, - nil, 974, nil, nil, nil, nil, nil, nil, nil, nil, - 974, nil, nil, nil, nil, 974, 974, 974, 974, nil, - 974, 974, 974, 974, nil, nil, nil, nil, 974, 974, - nil, nil, nil, 1122, 1122, 1122, 974, 1122, 974, 974, - 974, 1122, 1122, 974, 974, nil, 1122, nil, 1122, 1122, - 1122, 1122, 1122, 1122, 1122, nil, nil, nil, nil, nil, - 1122, 1122, 1122, 1122, 1122, 1122, 1122, nil, nil, 1122, - nil, nil, nil, nil, nil, nil, 1122, nil, nil, 1122, - 1122, 1122, 1122, 1122, 1122, 1122, 1122, nil, 1122, 1122, - 1122, nil, 1122, 1122, 1122, 1122, 1122, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 1122, nil, nil, 1122, - nil, nil, 1122, 1122, nil, nil, 1122, nil, nil, nil, - nil, nil, 1122, nil, nil, nil, nil, nil, nil, nil, - nil, 1122, nil, nil, nil, nil, 1122, 1122, 1122, 1122, - nil, 1122, 1122, 1122, 1122, nil, nil, nil, nil, 1122, - 1122, nil, nil, nil, 1123, 1123, 1123, 1122, 1123, 1122, - 1122, 1122, 1123, 1123, 1122, 1122, nil, 1123, nil, 1123, - 1123, 1123, 1123, 1123, 1123, 1123, nil, nil, nil, nil, - nil, 1123, 1123, 1123, 1123, 1123, 1123, 1123, nil, nil, - 1123, nil, nil, nil, nil, nil, nil, 1123, nil, nil, - 1123, 1123, 1123, 1123, 1123, 1123, 1123, 1123, nil, 1123, - 1123, 1123, nil, 1123, 1123, 1123, 1123, 1123, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 1123, nil, nil, - 1123, nil, nil, 1123, 1123, nil, nil, 1123, nil, nil, - nil, nil, nil, 1123, nil, nil, nil, nil, nil, nil, - nil, nil, 1123, nil, nil, nil, nil, 1123, 1123, 1123, - 1123, nil, 1123, 1123, 1123, 1123, nil, nil, nil, nil, - 1123, 1123, nil, nil, nil, 1155, 1155, 1155, 1123, 1155, - 1123, 1123, 1123, 1155, 1155, 1123, 1123, nil, 1155, nil, - 1155, 1155, 1155, 1155, 1155, 1155, 1155, nil, nil, nil, - nil, nil, 1155, 1155, 1155, 1155, 1155, 1155, 1155, nil, - nil, 1155, nil, nil, nil, nil, nil, nil, 1155, nil, - nil, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, - 1155, 1155, 1155, nil, 1155, 1155, 1155, 1155, 1155, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 1155, nil, - nil, 1155, nil, nil, 1155, 1155, nil, nil, 1155, nil, - 1155, nil, 1155, nil, 1155, nil, nil, 1155, nil, nil, - nil, nil, nil, 1155, nil, nil, nil, nil, 1155, 1155, - 1155, 1155, nil, 1155, 1155, 1155, 1155, nil, nil, nil, - nil, 1155, 1155, nil, nil, nil, 37, 37, 37, 1155, - 37, 1155, 1155, 1155, 37, 37, 1155, 1155, nil, 37, - nil, 37, 37, 37, 37, 37, 37, 37, nil, nil, - nil, nil, nil, 37, 37, 37, 37, 37, 37, 37, - nil, nil, 37, nil, nil, nil, nil, nil, nil, 37, - nil, nil, 37, 37, 37, 37, 37, 37, 37, 37, - nil, 37, 37, 37, nil, 37, 37, nil, nil, 37, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 37, - nil, nil, 37, nil, nil, 37, 37, nil, nil, 37, - nil, 37, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 37, - 37, 37, 37, nil, 37, 37, 37, 37, nil, nil, - nil, nil, 37, 37, nil, nil, nil, 38, 38, 38, - 37, 38, 37, 37, 37, 38, 38, nil, nil, nil, - 38, nil, 38, 38, 38, 38, 38, 38, 38, nil, - nil, nil, nil, nil, 38, 38, 38, 38, 38, 38, - 38, nil, nil, 38, nil, nil, nil, nil, nil, nil, - 38, nil, nil, 38, 38, 38, 38, 38, 38, 38, - 38, nil, 38, 38, 38, nil, 38, 38, nil, nil, - 38, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 38, nil, nil, 38, nil, nil, 38, 38, nil, nil, - 38, nil, nil, 1038, nil, 1038, 1038, 1038, 1038, 1038, - nil, nil, nil, nil, nil, nil, nil, nil, 1038, nil, - 38, 38, 38, 38, nil, 38, 38, 38, 38, nil, - nil, nil, nil, 38, 38, nil, nil, nil, 38, nil, - 1038, 38, nil, 38, 38, 38, 76, 76, 76, nil, - 76, 1038, 1038, nil, 76, 76, 1038, nil, nil, 76, - nil, 76, 76, 76, 76, 76, 76, 76, nil, nil, - nil, nil, nil, 76, 76, 76, 76, 76, 76, 76, - nil, nil, 76, nil, nil, nil, nil, nil, nil, 76, - nil, nil, 76, 76, 76, 76, 76, 76, 76, 76, - nil, 76, 76, 76, nil, 76, 76, nil, nil, 76, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 76, - nil, nil, 76, nil, nil, 76, 76, nil, nil, 76, - nil, 76, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 76, - 76, 76, 76, nil, 76, 76, 76, 76, nil, nil, - nil, nil, 76, 76, nil, nil, nil, 77, 77, 77, - 76, 77, 76, 76, 76, 77, 77, nil, nil, nil, - 77, nil, 77, 77, 77, 77, 77, 77, 77, nil, - nil, nil, nil, nil, 77, 77, 77, 77, 77, 77, - 77, nil, nil, 77, nil, nil, nil, nil, nil, nil, - 77, nil, nil, 77, 77, 77, 77, 77, 77, 77, - 77, nil, 77, 77, 77, nil, 77, 77, nil, nil, - 77, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 77, nil, nil, - 77, nil, nil, 77, nil, nil, 77, 77, nil, nil, - 77, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 77, 77, 77, 77, nil, 77, 77, 77, 77, nil, - nil, nil, nil, 77, 77, nil, nil, nil, 78, 78, - 78, 77, 78, 77, 77, 77, 78, 78, nil, nil, - nil, 78, nil, 78, 78, 78, 78, 78, 78, 78, - nil, nil, nil, nil, nil, 78, 78, 78, 78, 78, - 78, 78, nil, nil, 78, nil, nil, nil, nil, nil, - nil, 78, nil, nil, 78, 78, 78, 78, 78, 78, - 78, 78, nil, 78, 78, 78, nil, 78, 78, nil, - nil, 78, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 78, nil, nil, 78, nil, nil, 78, 78, nil, - nil, 78, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 78, 78, 78, 78, nil, 78, 78, 78, 78, - nil, nil, nil, nil, 78, 78, nil, nil, nil, 331, - 331, 331, 78, 331, 78, 78, 78, 331, 331, nil, - nil, nil, 331, nil, 331, 331, 331, 331, 331, 331, - 331, nil, nil, nil, nil, nil, 331, 331, 331, 331, - 331, 331, 331, nil, nil, 331, nil, nil, nil, nil, - nil, nil, 331, nil, nil, 331, 331, 331, 331, 331, - 331, 331, 331, nil, 331, 331, 331, nil, 331, 331, - nil, nil, 331, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 331, nil, nil, 331, nil, nil, 331, 331, - nil, nil, 331, nil, nil, 1041, nil, 1041, 1041, 1041, - 1041, 1041, nil, nil, nil, nil, nil, nil, nil, nil, - 1041, nil, 331, 331, 331, 331, nil, 331, 331, 331, - 331, nil, nil, nil, nil, 331, 331, nil, nil, nil, - 331, nil, 1041, 331, nil, 331, 331, 331, 350, 350, - 350, nil, 350, 1041, 1041, nil, 350, 350, 1041, nil, - nil, 350, nil, 350, 350, 350, 350, 350, 350, 350, - nil, nil, nil, nil, nil, 350, 350, 350, 350, 350, - 350, 350, nil, nil, 350, nil, nil, nil, nil, nil, - nil, 350, nil, nil, 350, 350, 350, 350, 350, 350, - 350, 350, nil, 350, 350, 350, nil, 350, 350, nil, - nil, 350, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 350, nil, nil, 350, nil, nil, 350, 350, nil, - nil, 350, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 350, 350, 350, 350, nil, 350, 350, 350, 350, - nil, nil, nil, nil, 350, 350, nil, nil, nil, 543, - 543, 543, 350, 543, 350, 350, 350, 543, 543, nil, - nil, nil, 543, nil, 543, 543, 543, 543, 543, 543, - 543, nil, nil, nil, nil, nil, 543, 543, 543, 543, - 543, 543, 543, nil, nil, 543, nil, nil, nil, nil, - nil, nil, 543, nil, nil, 543, 543, 543, 543, 543, - 543, 543, 543, nil, 543, 543, 543, nil, 543, 543, - nil, nil, 543, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 543, nil, nil, 543, nil, nil, 543, 543, - nil, nil, 543, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 543, 543, 543, 543, nil, 543, 543, 543, - 543, nil, nil, nil, nil, 543, 543, nil, nil, nil, - 552, 552, 552, 543, 552, 543, 543, 543, 552, 552, - nil, nil, nil, 552, nil, 552, 552, 552, 552, 552, - 552, 552, nil, nil, nil, nil, nil, 552, 552, 552, - 552, 552, 552, 552, nil, nil, 552, nil, nil, nil, - nil, nil, nil, 552, nil, nil, 552, 552, 552, 552, - 552, 552, 552, 552, nil, 552, 552, 552, nil, 552, - 552, nil, nil, 552, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 552, nil, nil, 552, nil, nil, 552, - 552, nil, nil, 552, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 552, 552, 552, 552, nil, 552, 552, - 552, 552, nil, nil, nil, nil, 552, 552, nil, nil, - nil, 748, 748, 748, 552, 748, 552, 552, 552, 748, - 748, nil, nil, nil, 748, nil, 748, 748, 748, 748, - 748, 748, 748, nil, nil, nil, nil, nil, 748, 748, - 748, 748, 748, 748, 748, nil, nil, 748, nil, nil, - nil, nil, nil, nil, 748, nil, nil, 748, 748, 748, - 748, 748, 748, 748, 748, nil, 748, 748, 748, nil, - 748, 748, nil, nil, 748, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 748, nil, nil, 748, nil, nil, - 748, 748, nil, nil, 748, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 748, 748, 748, 748, nil, 748, - 748, 748, 748, nil, nil, nil, nil, 748, 748, nil, - nil, nil, 759, 759, 759, 748, 759, 748, 748, 748, - 759, 759, nil, nil, nil, 759, nil, 759, 759, 759, - 759, 759, 759, 759, nil, nil, nil, nil, nil, 759, - 759, 759, 759, 759, 759, 759, nil, nil, 759, nil, - nil, nil, nil, nil, nil, 759, nil, nil, 759, 759, - 759, 759, 759, 759, 759, 759, nil, 759, 759, 759, - nil, 759, 759, nil, nil, 759, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 759, nil, nil, 759, nil, - nil, 759, 759, nil, nil, 759, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 759, 759, 759, 759, nil, - 759, 759, 759, 759, nil, nil, nil, nil, 759, 759, - nil, nil, nil, 1023, 1023, 1023, 759, 1023, 759, 759, - 759, 1023, 1023, nil, nil, nil, 1023, nil, 1023, 1023, - 1023, 1023, 1023, 1023, 1023, nil, nil, nil, nil, nil, - 1023, 1023, 1023, 1023, 1023, 1023, 1023, nil, nil, 1023, - nil, nil, nil, nil, nil, nil, 1023, nil, nil, 1023, - 1023, 1023, 1023, 1023, 1023, 1023, 1023, nil, 1023, 1023, - 1023, nil, 1023, 1023, nil, nil, 1023, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 1023, nil, nil, 1023, - nil, nil, 1023, 1023, nil, nil, 1023, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 1023, 1023, 1023, 1023, - nil, 1023, 1023, 1023, 1023, nil, nil, nil, nil, 1023, - 1023, nil, nil, nil, 1033, 1033, 1033, 1023, 1033, 1023, - 1023, 1023, 1033, 1033, nil, nil, nil, 1033, nil, 1033, - 1033, 1033, 1033, 1033, 1033, 1033, nil, nil, nil, nil, - nil, 1033, 1033, 1033, 1033, 1033, 1033, 1033, nil, nil, - 1033, nil, nil, nil, nil, nil, nil, 1033, nil, nil, - 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, nil, 1033, - 1033, 1033, nil, 1033, 1033, nil, nil, 1033, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 1033, nil, nil, - 1033, nil, nil, 1033, 1033, nil, nil, 1033, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 1033, 1033, 1033, - 1033, nil, 1033, 1033, 1033, 1033, nil, nil, nil, nil, - 1033, 1033, nil, nil, nil, 1103, 1103, 1103, 1033, 1103, - 1033, 1033, 1033, 1103, 1103, nil, nil, nil, 1103, nil, - 1103, 1103, 1103, 1103, 1103, 1103, 1103, nil, nil, nil, - nil, nil, 1103, 1103, 1103, 1103, 1103, 1103, 1103, nil, - nil, 1103, nil, nil, nil, nil, nil, nil, 1103, nil, - nil, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, nil, - 1103, 1103, 1103, nil, 1103, 1103, nil, nil, 1103, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 1103, nil, - nil, 1103, nil, nil, 1103, 1103, nil, nil, 1103, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 1103, 1103, - 1103, 1103, nil, 1103, 1103, 1103, 1103, nil, nil, nil, - nil, 1103, 1103, nil, nil, nil, nil, nil, nil, 1103, - nil, 1103, 1103, 1103, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, nil, nil, - nil, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, nil, nil, nil, nil, nil, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, nil, 10, nil, nil, - nil, nil, nil, nil, nil, 10, 10, nil, 10, 10, - 10, 10, 10, 10, 10, nil, nil, 10, 10, nil, - nil, nil, 10, 10, 10, 10, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 10, - 10, nil, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, nil, nil, 10, 10, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 10, 11, 11, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 11, 11, 11, nil, nil, nil, 11, - 11, 11, 11, 11, 11, 11, 11, 11, 11, nil, - nil, nil, nil, nil, 11, 11, 11, 11, 11, 11, - 11, 11, 11, nil, nil, 11, nil, nil, nil, nil, - nil, nil, nil, 11, 11, nil, 11, 11, 11, 11, - 11, 11, 11, nil, nil, 11, 11, nil, nil, nil, - 11, 11, 11, 11, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 11, 11, nil, - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, - 11, 11, nil, nil, 11, 11, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 11, - 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, - 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, - 425, 425, 425, 425, nil, nil, nil, 425, 425, 425, - 425, 425, 425, 425, 425, 425, 425, nil, nil, nil, - nil, nil, 425, 425, 425, 425, 425, 425, 425, 425, - 425, nil, nil, 425, nil, nil, nil, nil, nil, nil, - nil, 425, 425, nil, 425, 425, 425, 425, 425, 425, - 425, nil, nil, 425, 425, nil, nil, nil, 425, 425, - 425, 425, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 425, 425, nil, 425, 425, - 425, 425, 425, 425, 425, 425, 425, 425, 425, 425, - nil, nil, 425, 425, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 425, 664, 664, - 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, - 664, 664, 664, 664, 664, 664, 664, 664, 664, 664, - 664, 664, nil, nil, nil, 664, 664, 664, 664, 664, - 664, 664, 664, 664, 664, nil, nil, nil, nil, nil, - 664, 664, 664, 664, 664, 664, 664, 664, 664, nil, - nil, 664, nil, nil, nil, nil, nil, nil, nil, 664, - 664, nil, 664, 664, 664, 664, 664, 664, 664, nil, - nil, 664, 664, nil, nil, nil, 664, 664, 664, 664, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 664, 664, nil, 664, 664, 664, 664, - 664, 664, 664, 664, 664, 664, 664, 664, nil, nil, - 664, 664, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 664, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - nil, nil, nil, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, nil, nil, nil, nil, nil, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - nil, 24, nil, nil, nil, nil, nil, 24, 24, nil, - 24, 24, 24, 24, 24, 24, 24, nil, nil, 24, - 24, nil, nil, nil, 24, 24, 24, 24, nil, nil, - nil, nil, nil, 24, nil, nil, nil, nil, nil, nil, - nil, 24, 24, nil, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, nil, nil, 24, 482, - 482, 482, 482, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 482, 482, 482, 482, nil, - nil, 641, 482, 641, 641, 641, 641, 641, 482, 482, - nil, nil, 482, nil, nil, nil, 641, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 482, nil, nil, 482, nil, nil, 641, 482, - nil, nil, 482, nil, nil, nil, nil, 641, 641, 641, - 641, nil, nil, nil, 641, nil, nil, nil, 482, nil, - nil, nil, 482, 482, 482, 482, nil, 482, 482, 482, - 482, nil, nil, nil, nil, 482, 482, 483, 483, 483, - 483, nil, nil, 482, nil, 482, 482, 482, nil, nil, - 482, 482, nil, 483, 483, 483, 483, nil, nil, 775, - 483, 775, 775, 775, 775, 775, 483, 483, nil, nil, - 483, nil, nil, nil, 775, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 483, nil, nil, 483, nil, nil, 775, 483, nil, nil, - 483, nil, nil, nil, nil, 775, 775, 775, 775, nil, - nil, nil, 775, nil, nil, nil, 483, nil, nil, nil, - 483, 483, 483, 483, nil, 483, 483, 483, 483, nil, - nil, nil, nil, 483, 483, 701, 701, 701, 701, nil, - nil, 483, nil, 483, 483, 483, nil, nil, 483, 483, - nil, 701, 701, 701, 701, nil, nil, 793, 701, 793, - 793, 793, 793, 793, 701, 701, nil, nil, 701, nil, - nil, nil, 793, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 701, nil, - nil, 701, nil, nil, 793, 701, nil, nil, 701, nil, - 701, nil, nil, 793, 793, 793, 793, nil, nil, nil, - 793, nil, nil, nil, 701, nil, nil, nil, 701, 701, - 701, 701, nil, 701, 701, 701, 701, nil, nil, nil, - nil, 701, 701, 701, nil, nil, nil, nil, nil, 701, - nil, 701, 701, 701, nil, nil, 701, 701, 725, 725, - 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, - 725, 725, 725, 725, 725, 725, 725, 725, 725, 725, - 725, 725, nil, nil, nil, 725, 725, 725, 725, 725, - 725, 725, 725, 725, 725, nil, nil, nil, nil, nil, - 725, 725, 725, 725, 725, 725, 725, 725, 725, nil, - nil, 725, nil, nil, nil, nil, nil, nil, nil, 725, - 725, nil, 725, 725, 725, 725, 725, 725, 725, nil, - nil, 725, 725, nil, nil, nil, 725, 725, 725, 725, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 725, 725, nil, 725, 725, 725, 725, - 725, 725, 725, 725, 725, 725, 725, 725, nil, nil, - 725, 871, 871, 871, 871, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 871, 871, 871, - 871, nil, nil, 1036, 871, 1036, 1036, 1036, 1036, 1036, - 871, 871, nil, nil, 871, nil, nil, nil, 1036, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 871, nil, nil, 871, nil, nil, - 1036, 871, nil, nil, 871, nil, nil, nil, nil, 1036, - 1036, 1036, 1036, nil, nil, nil, 1036, nil, nil, nil, - 871, nil, nil, nil, 871, 871, 871, 871, nil, 871, - 871, 871, 871, nil, nil, nil, nil, 871, 871, 874, - 874, 874, 874, nil, nil, 871, nil, 871, 871, 871, - nil, nil, 871, 871, nil, 874, 874, 874, 874, nil, - nil, nil, 874, 874, nil, nil, nil, nil, 874, 874, - nil, nil, 874, 874, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 874, nil, nil, 874, nil, nil, nil, 874, - nil, nil, 874, nil, 874, nil, nil, nil, nil, nil, - nil, 874, nil, nil, nil, nil, nil, nil, 874, nil, - nil, nil, 874, 874, 874, 874, nil, 874, 874, 874, - 874, nil, nil, nil, nil, 874, 874, 875, 875, 875, - 875, nil, nil, 874, nil, 874, 874, 874, nil, nil, - 874, 874, nil, 875, 875, 875, 875, nil, nil, nil, - 875, 875, nil, nil, nil, nil, 875, 875, nil, nil, - 875, 875, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 875, nil, nil, 875, nil, nil, nil, 875, nil, nil, - 875, nil, 875, nil, nil, nil, nil, nil, nil, 875, - nil, nil, nil, nil, nil, nil, 875, nil, nil, nil, - 875, 875, 875, 875, nil, 875, 875, 875, 875, nil, - nil, nil, nil, 875, 875, 881, 881, 881, 881, nil, - nil, 875, nil, 875, 875, 875, nil, nil, 875, 875, - nil, 881, 881, 881, 881, nil, nil, 1043, 881, 1043, - 1043, 1043, 1043, 1043, 881, 881, nil, nil, 881, nil, - nil, nil, 1043, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 881, nil, - nil, 881, nil, nil, 1043, 881, nil, nil, 881, nil, - 881, nil, nil, nil, nil, 1043, 1043, nil, nil, nil, - 1043, nil, nil, nil, 881, nil, nil, nil, 881, 881, - 881, 881, nil, 881, 881, 881, 881, nil, nil, nil, - nil, 881, 881, 889, 889, 889, 889, nil, nil, 881, - nil, 881, 881, 881, nil, nil, 881, 881, nil, 889, - 889, 889, 889, nil, nil, 1094, 889, 1094, 1094, 1094, - 1094, 1094, 889, 889, nil, nil, 889, nil, nil, nil, - 1094, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 889, nil, nil, 889, - nil, nil, 1094, 889, nil, nil, 889, nil, nil, nil, - nil, 1094, 1094, 1094, 1094, nil, nil, nil, 1094, nil, - nil, nil, 889, nil, nil, nil, 889, 889, 889, 889, - nil, 889, 889, 889, 889, nil, nil, nil, nil, 889, - 889, 953, 953, 953, 953, nil, nil, 889, nil, 889, - 889, 889, nil, nil, 889, 889, nil, 953, 953, 953, - 953, nil, nil, nil, 953, 953, nil, nil, nil, nil, - 953, 953, nil, nil, 953, 953, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 953, nil, nil, 953, nil, nil, - nil, 953, nil, nil, 953, nil, 953, nil, nil, nil, - nil, nil, nil, 953, nil, nil, nil, nil, nil, nil, - 953, nil, nil, nil, 953, 953, 953, 953, nil, 953, - 953, 953, 953, nil, nil, nil, nil, 953, 953, 985, - 985, 985, 985, nil, nil, 953, nil, 953, 953, 953, - nil, nil, 953, 953, nil, 985, 985, 985, 985, nil, - nil, 1097, 985, 1097, 1097, 1097, 1097, 1097, 985, 985, - nil, nil, 985, nil, nil, nil, 1097, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 985, nil, nil, 985, nil, nil, 1097, 985, - nil, nil, 985, nil, nil, nil, nil, 1097, 1097, 1097, - 1097, nil, nil, nil, 1097, nil, nil, nil, 985, nil, - nil, nil, 985, 985, 985, 985, nil, 985, 985, 985, - 985, nil, nil, nil, nil, 985, 985, 1001, 1001, 1001, - 1001, nil, nil, 985, nil, 985, 985, 985, nil, nil, - 985, 985, nil, 1001, 1001, 1001, 1001, nil, nil, 1099, - 1001, 1099, 1099, 1099, 1099, 1099, 1001, 1001, nil, nil, - 1001, nil, nil, nil, 1099, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 1001, nil, nil, 1001, nil, nil, 1099, 1001, nil, nil, - 1001, nil, nil, nil, nil, nil, nil, 1099, 1099, nil, - nil, nil, 1099, nil, nil, nil, 1001, nil, nil, nil, - 1001, 1001, 1001, 1001, nil, 1001, 1001, 1001, 1001, nil, - nil, nil, nil, 1001, 1001, 1084, 1084, 1084, 1084, nil, - nil, 1001, nil, 1001, 1001, 1001, nil, nil, 1001, 1001, - nil, 1084, 1084, 1084, 1084, nil, nil, 1159, 1084, 1159, - 1159, 1159, 1159, 1159, 1084, 1084, nil, nil, 1084, nil, - nil, nil, 1159, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 1084, nil, - nil, 1084, nil, nil, 1159, 1084, nil, nil, 1084, nil, - nil, nil, nil, nil, nil, 1159, 1159, nil, nil, nil, - 1159, nil, nil, nil, 1084, nil, nil, nil, 1084, 1084, - 1084, 1084, nil, 1084, 1084, 1084, 1084, nil, nil, nil, - nil, 1084, 1084, 1124, 1124, 1124, 1124, nil, nil, 1084, - nil, 1084, 1084, 1084, nil, nil, 1084, 1084, nil, 1124, - 1124, 1124, 1124, nil, nil, 1180, 1124, 1180, 1180, 1180, - 1180, 1180, 1124, 1124, nil, nil, 1124, nil, nil, nil, - 1180, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 1124, nil, nil, 1124, - nil, nil, 1180, 1124, nil, nil, 1124, nil, 1124, nil, - nil, 1180, 1180, 1180, 1180, nil, nil, nil, 1180, nil, - nil, nil, 1124, nil, nil, nil, 1124, 1124, 1124, 1124, - nil, 1124, 1124, 1124, 1124, nil, nil, nil, nil, 1124, - 1124, 1138, 1138, 1138, 1138, nil, nil, 1124, nil, 1124, - 1124, 1124, nil, nil, 1124, 1124, nil, 1138, 1138, 1138, - 1138, nil, nil, 1182, 1138, 1182, 1182, 1182, 1182, 1182, - 1138, 1138, nil, nil, 1138, nil, nil, nil, 1182, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 1138, nil, nil, 1138, nil, nil, - 1182, 1138, nil, nil, 1138, nil, nil, nil, nil, nil, - nil, 1182, 1182, nil, nil, nil, 1182, nil, nil, nil, - 1138, nil, nil, nil, 1138, 1138, 1138, 1138, nil, 1138, - 1138, 1138, 1138, nil, nil, nil, nil, 1138, 1138, 1140, - 1140, 1140, 1140, nil, nil, 1138, nil, 1138, 1138, 1138, - nil, nil, 1138, 1138, nil, 1140, 1140, 1140, 1140, nil, - nil, 1184, 1140, 1184, 1184, 1184, 1184, 1184, 1140, 1140, - nil, nil, 1140, nil, nil, nil, 1184, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 1140, nil, nil, 1140, nil, nil, 1184, 1140, - nil, nil, 1140, nil, 1140, nil, nil, nil, nil, 1184, - 1184, nil, nil, nil, 1184, nil, nil, nil, 1140, nil, - nil, nil, 1140, 1140, 1140, 1140, nil, 1140, 1140, 1140, - 1140, nil, nil, nil, nil, 1140, 1140, 1176, 1176, 1176, - 1176, nil, nil, 1140, nil, 1140, 1140, 1140, nil, nil, - 1140, 1140, nil, 1176, 1176, 1176, 1176, nil, nil, 1186, - 1176, 1186, 1186, 1186, 1186, 1186, 1176, 1176, nil, nil, - 1176, nil, nil, nil, 1186, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 1176, nil, nil, 1176, nil, nil, 1186, 1176, nil, nil, - 1176, nil, nil, nil, nil, nil, nil, 1186, 1186, nil, - nil, nil, 1186, nil, nil, nil, 1176, nil, nil, nil, - 1176, 1176, 1176, 1176, nil, 1176, 1176, 1176, 1176, nil, - nil, nil, nil, 1176, 1176, 1200, 1200, 1200, 1200, nil, - nil, 1176, nil, 1176, 1176, 1176, nil, nil, 1176, 1176, - nil, 1200, 1200, 1200, 1200, nil, nil, nil, 1200, nil, - nil, nil, nil, nil, 1200, 1200, nil, nil, 1200, nil, - nil, nil, nil, nil, nil, nil, 708, 708, 708, 708, - nil, nil, nil, nil, nil, nil, nil, nil, 1200, nil, - nil, 1200, 708, 708, 708, 1200, nil, nil, 1200, nil, - nil, nil, nil, nil, nil, 708, 708, nil, nil, 708, - nil, nil, nil, nil, 1200, nil, nil, nil, 1200, 1200, - 1200, 1200, nil, 1200, 1200, 1200, 1200, nil, nil, nil, - nil, 1200, 1200, nil, nil, nil, nil, nil, nil, 1200, - nil, 1200, 1200, 1200, nil, nil, 1200, 1200, 1212, nil, - 1212, 1212, 1212, 1212, 1212, nil, nil, nil, nil, 708, - 708, 708, 708, 1212, 708, 708, 708, 708, nil, nil, - nil, nil, 708, 708, 890, 890, 890, 890, nil, nil, - 708, nil, 708, 708, 708, 1212, nil, nil, nil, nil, - 890, 890, 890, nil, nil, nil, 1212, 1212, nil, nil, - nil, 1212, nil, 890, 890, nil, nil, 890, 891, 891, - 891, 891, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 891, 891, 891, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 891, 891, nil, - nil, 891, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 890, 890, 890, - 890, nil, 890, 890, 890, 890, nil, nil, nil, nil, - 890, 890, nil, nil, nil, nil, nil, nil, 890, nil, - 890, 890, 890, nil, nil, nil, nil, nil, nil, nil, - nil, 891, 891, 891, 891, nil, 891, 891, 891, 891, - nil, nil, nil, nil, 891, 891, 225, 225, nil, nil, - 225, nil, 891, nil, 891, 891, 891, nil, 225, 225, - nil, 225, 225, 225, 225, 225, 225, 225, nil, nil, - 225, 225, nil, nil, nil, 225, 225, 225, 225, nil, - nil, nil, nil, nil, 225, nil, nil, nil, nil, nil, - nil, nil, 225, 225, nil, 225, 225, 225, 225, 225, - 225, 225, 225, 225, 225, 225, 225, 226, 226, 225, - nil, 226, nil, nil, nil, nil, nil, nil, nil, 226, - 226, nil, 226, 226, 226, 226, 226, 226, 226, nil, - nil, 226, 226, nil, nil, nil, 226, 226, 226, 226, - nil, nil, nil, nil, nil, 226, nil, nil, nil, nil, - nil, nil, nil, 226, 226, nil, 226, 226, 226, 226, - 226, 226, 226, 226, 226, 226, 226, 226, 292, 292, - 226, nil, 292, nil, nil, nil, nil, nil, nil, nil, - 292, 292, nil, 292, 292, 292, 292, 292, 292, 292, - nil, nil, 292, 292, nil, nil, nil, 292, 292, 292, - 292, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 292, 292, nil, 292, 292, 292, - 292, 292, 292, 292, 292, 292, 292, 292, 292, 475, - 475, 292, nil, 475, nil, nil, nil, nil, nil, nil, - nil, 475, 475, nil, 475, 475, 475, 475, 475, 475, - 475, nil, nil, 475, 475, nil, nil, nil, 475, 475, - 475, 475, nil, nil, nil, nil, nil, 475, nil, nil, - nil, nil, nil, nil, nil, 475, 475, nil, 475, 475, - 475, 475, 475, 475, 475, 475, 475, 475, 475, 475, - 476, 476, 475, nil, 476, nil, nil, nil, nil, nil, - nil, nil, 476, 476, nil, 476, 476, 476, 476, 476, - 476, 476, nil, nil, 476, 476, nil, nil, nil, 476, - 476, 476, 476, nil, nil, nil, nil, nil, 476, nil, - nil, nil, nil, nil, nil, nil, 476, 476, nil, 476, - 476, 476, 476, 476, 476, 476, 476, 476, 476, 476, - 476, 546, 546, 476, nil, 546, nil, nil, nil, nil, - nil, nil, nil, 546, 546, nil, 546, 546, 546, 546, - 546, 546, 546, nil, nil, 546, 546, nil, nil, nil, - 546, 546, 546, 546, nil, nil, nil, nil, nil, 546, - nil, nil, nil, nil, nil, nil, nil, 546, 546, nil, - 546, 546, 546, 546, 546, 546, 546, 546, 546, 546, - 546, 546, 547, 547, 546, nil, 547, nil, nil, nil, - nil, nil, nil, nil, 547, 547, nil, 547, 547, 547, - 547, 547, 547, 547, nil, nil, 547, 547, nil, nil, - nil, 547, 547, 547, 547, nil, nil, nil, nil, nil, - 547, nil, nil, nil, nil, nil, nil, nil, 547, 547, - nil, 547, 547, 547, 547, 547, 547, 547, 547, 547, - 547, 547, 547, 556, 556, 547, nil, 556, nil, nil, - nil, nil, nil, nil, nil, 556, 556, nil, 556, 556, - 556, 556, 556, 556, 556, nil, nil, 556, 556, nil, - nil, nil, 556, 556, 556, 556, nil, nil, nil, nil, - nil, 556, nil, nil, nil, nil, nil, nil, nil, 556, - 556, nil, 556, 556, 556, 556, 556, 556, 556, 556, - 556, 556, 556, 556, 557, 557, 556, nil, 557, nil, - nil, nil, nil, nil, nil, nil, 557, 557, nil, 557, - 557, 557, 557, 557, 557, 557, nil, nil, 557, 557, - nil, nil, nil, 557, 557, 557, 557, nil, nil, nil, - nil, nil, 557, nil, nil, nil, nil, nil, nil, nil, - 557, 557, nil, 557, 557, 557, 557, 557, 557, 557, - 557, 557, 557, 557, 557, 626, 626, 557, nil, 626, - nil, nil, nil, nil, nil, nil, nil, 626, 626, nil, - 626, 626, 626, 626, 626, 626, 626, nil, nil, 626, - 626, nil, nil, nil, 626, 626, 626, 626, nil, nil, - nil, nil, nil, 626, nil, nil, nil, nil, nil, nil, - nil, 626, 626, nil, 626, 626, 626, 626, 626, 626, - 626, 626, 626, 626, 626, 626, 627, 627, 626, nil, - 627, nil, nil, nil, nil, nil, nil, nil, 627, 627, - nil, 627, 627, 627, 627, 627, 627, 627, nil, nil, - 627, 627, nil, nil, nil, 627, 627, 627, 627, nil, - nil, nil, nil, nil, 627, nil, nil, nil, nil, nil, - nil, nil, 627, 627, nil, 627, 627, 627, 627, 627, - 627, 627, 627, 627, 627, 627, 627, 633, 633, 627, - nil, 633, nil, nil, nil, nil, nil, nil, nil, 633, - 633, nil, 633, 633, 633, 633, 633, 633, 633, nil, - nil, 633, 633, nil, nil, nil, 633, 633, 633, 633, - nil, nil, nil, nil, nil, 633, nil, nil, nil, nil, - nil, nil, nil, 633, 633, nil, 633, 633, 633, 633, - 633, 633, 633, 633, 633, 633, 633, 633, 634, 634, - 633, nil, 634, nil, nil, nil, nil, nil, nil, nil, - 634, 634, nil, 634, 634, 634, 634, 634, 634, 634, - nil, nil, 634, 634, nil, nil, nil, 634, 634, 634, - 634, nil, nil, nil, nil, nil, 634, nil, nil, nil, - nil, nil, nil, nil, 634, 634, nil, 634, 634, 634, - 634, 634, 634, 634, 634, 634, 634, 634, 634, 671, - 671, 634, nil, 671, nil, nil, nil, nil, nil, nil, - nil, 671, 671, nil, 671, 671, 671, 671, 671, 671, - 671, nil, nil, 671, 671, nil, nil, nil, 671, 671, - 671, 671, nil, nil, nil, nil, nil, 671, nil, nil, - nil, nil, nil, nil, nil, 671, 671, nil, 671, 671, - 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, - 672, 672, 671, nil, 672, nil, nil, nil, nil, nil, - nil, nil, 672, 672, nil, 672, 672, 672, 672, 672, - 672, 672, nil, nil, 672, 672, nil, nil, nil, 672, - 672, 672, 672, nil, nil, nil, nil, nil, 672, nil, - nil, nil, nil, nil, nil, nil, 672, 672, nil, 672, - 672, 672, 672, 672, 672, 672, 672, 672, 672, 672, - 672, 1152, 1152, 672, nil, 1152, nil, nil, nil, nil, - nil, nil, nil, 1152, 1152, nil, 1152, 1152, 1152, 1152, - 1152, 1152, 1152, nil, nil, 1152, 1152, nil, nil, nil, - 1152, 1152, 1152, 1152, nil, nil, nil, nil, nil, 1152, - nil, nil, nil, nil, nil, nil, nil, 1152, 1152, nil, - 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, - 1152, 1152, 1156, 1156, 1152, nil, 1156, nil, nil, nil, - nil, nil, nil, nil, 1156, 1156, nil, 1156, 1156, 1156, - 1156, 1156, 1156, 1156, nil, nil, 1156, 1156, nil, nil, - nil, 1156, 1156, 1156, 1156, nil, nil, nil, nil, nil, - 1156, nil, nil, nil, nil, nil, nil, nil, 1156, 1156, - nil, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, - 1156, 1156, 1156, 1157, 1157, 1156, nil, 1157, nil, nil, - nil, nil, nil, nil, nil, 1157, 1157, nil, 1157, 1157, - 1157, 1157, 1157, 1157, 1157, nil, nil, 1157, 1157, nil, - nil, nil, 1157, 1157, 1157, 1157, nil, nil, nil, nil, - nil, 1157, nil, nil, nil, nil, nil, nil, nil, 1157, - 1157, nil, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, - 1157, 1157, 1157, 1157, nil, nil, 1157 ] - -racc_action_pointer = [ - nil, 58, 979, 85, nil, -110, nil, 5154, 964, 140, - 24312, 24440, 209, nil, 211, 220, 441, 310, -62, 374, - nil, -71, 5285, 1123, 24824, 387, nil, 171, nil, -8, - 5426, 5536, 5670, 5801, 5932, nil, 1123, 22454, 22585, nil, - 290, 525, 531, 453, 6063, 6194, 205, 6325, 6456, 525, - 6587, 387, -84, 162, 342, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 6728, nil, 6869, 7000, 7131, 35, - nil, 7262, 7393, nil, nil, 7524, 22724, 22855, 22986, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 612, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 0, nil, - nil, 112, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 7667, nil, nil, nil, nil, 7810, - 7941, 8072, 8203, 8346, nil, 1267, nil, 588, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 439, nil, 1411, 8477, - 8608, 8739, 8870, 9001, 9132, 26855, 26916, nil, nil, 9263, - 9394, 9525, nil, nil, 514, 141, 193, 522, 246, 469, - 536, nil, 9656, 1555, 542, nil, nil, 9787, 9918, 10049, - 10180, 10311, 10442, 10573, 10704, 10835, 10966, 11097, 11228, 11359, - 11490, 11621, 11752, 11883, 12014, 12145, 12276, 12407, 12538, nil, - nil, nil, nil, 12669, nil, nil, 226, 302, 515, 517, - 518, 532, 550, 558, 584, 585, nil, nil, nil, 12800, - nil, nil, 26977, nil, nil, 541, 12931, 13062, nil, nil, - nil, nil, nil, nil, nil, 13193, nil, 1843, nil, 512, - 538, nil, 13324, 586, 13455, nil, nil, 13586, 13717, nil, - nil, 74, nil, 13860, 1252, 565, 566, 1699, 594, 644, - 604, 23117, 1843, 694, 806, 873, 701, 878, nil, 677, - 637, 225, 679, 680, nil, nil, nil, 688, 221, 648, - 23256, nil, 564, 879, 2995, 3139, 737, nil, 744, 13991, - nil, 14122, 666, 1987, 668, nil, 719, 15595, 676, 2131, - 2275, 1396, 702, nil, 252, 402, 743, 726, 542, 753, - nil, 525, -1, 11, 14253, 2419, 2563, 216, 828, 710, - -18, 10, 893, 791, 11, 827, nil, nil, 441, 481, - 397, nil, 962, nil, 747, 14384, nil, 15614, nil, 193, - 378, 396, 402, 412, -27, -4, 463, nil, nil, nil, - nil, nil, nil, nil, 743, 24568, nil, nil, nil, nil, - 747, nil, 818, 729, 14515, 732, nil, nil, 721, nil, - 968, 253, 825, nil, nil, 1267, nil, nil, nil, nil, - nil, 1411, 739, nil, 739, 745, 615, 669, 14656, nil, - nil, nil, 222, 334, 790, nil, nil, 14788, 14924, nil, - nil, nil, -35, nil, 790, 27038, 27099, 15061, 277, 15192, - 15323, 15454, 24907, 25005, 3283, 3427, 1018, 2862, 815, 828, - 830, 832, 5011, 5154, 5285, 3571, 3715, 3859, 4003, 4147, - 4291, 3023, 3167, 4435, 4579, 1987, 4723, nil, -33, nil, - 15595, nil, nil, nil, nil, 15725, 784, 782, 792, nil, - nil, nil, 793, nil, nil, 15856, nil, 15987, nil, 16118, - nil, 329, nil, nil, nil, 16261, 1540, nil, 795, 800, - nil, nil, 805, 23387, 819, 16404, 27160, 27221, 972, 862, - nil, nil, 23518, 819, nil, 16535, 27282, 27343, 16666, 4867, - 2131, 16797, 16928, 946, 949, nil, nil, 829, 827, 838, - 840, 841, nil, 845, 858, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 848, 2837, nil, nil, 17059, nil, - nil, nil, -1, nil, nil, nil, 965, nil, nil, 967, - 264, 886, 17190, 1013, 1039, 920, 961, nil, 17321, nil, - nil, 17452, nil, nil, nil, 2707, 1041, nil, 2851, 62, - 1048, 1049, 39, 1051, 17583, 17714, 27404, 27465, 27, nil, - nil, 995, nil, 27526, 27587, 17845, nil, nil, 81, 2995, - nil, 24910, nil, nil, nil, nil, 1033, nil, nil, nil, - 943, nil, nil, 153, nil, 263, nil, nil, 932, nil, - 934, nil, nil, nil, 24696, nil, 17988, 936, 18119, 18250, - 18381, 27648, 27709, 18524, 18655, 693, 979, 18786, 18917, 19048, - 19179, 979, nil, nil, 19310, 19441, 981, nil, nil, nil, - 286, 306, 473, 612, 948, 994, nil, 974, nil, nil, - 440, 25103, 94, nil, 551, nil, nil, 6728, 26644, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 1034, 513, nil, 1006, 966, 25246, nil, 1094, nil, 1078, - 91, nil, nil, 19572, nil, 993, 1000, 1102, nil, 980, - nil, 1043, 19703, nil, nil, 19834, nil, 245, 23649, 998, - nil, 1002, 236, 250, 1046, 360, 1123, 1047, 1006, 23780, - nil, 1082, -7, 1555, 1135, 19965, nil, nil, 831, nil, - nil, 888, nil, nil, 544, 25008, nil, 14719, nil, 20096, - nil, 2866, nil, 1017, 1018, 729, 1029, nil, nil, nil, - nil, nil, nil, 25106, 1699, nil, nil, nil, nil, 574, - 652, nil, 1151, nil, nil, nil, nil, nil, 1170, 1174, - nil, nil, 26, 1073, 40, 41, 151, 152, 3139, 970, - 1267, nil, 1074, 3283, 20227, nil, 1200, 63, 1083, nil, - nil, nil, nil, nil, 3427, nil, nil, nil, nil, nil, - nil, nil, nil, 1084, 20358, 1089, 343, 347, 722, 834, - nil, 2275, 20489, nil, 1089, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 20620, 20751, 20882, 21013, 445, - 1176, 25329, -41, -73, 25427, 25525, 612, 139, 1105, 1106, - nil, 25623, nil, 1104, 1114, 1197, 359, nil, 1137, 25721, - 26742, 26776, nil, nil, nil, nil, nil, 21144, nil, nil, - 1144, nil, nil, 1142, 1126, nil, nil, 15559, 3571, nil, - nil, nil, nil, 1124, 338, nil, nil, 21275, 1252, nil, - 3715, 1131, 1187, nil, nil, 1145, nil, 1143, 1146, nil, - 1147, nil, 1230, nil, 1150, 1170, nil, 1171, nil, nil, - 1176, 2896, 838, nil, nil, 21406, nil, 1299, nil, 21537, - 1300, nil, nil, 25819, 21668, 3859, 68, 1314, nil, 1318, - 361, 4003, nil, nil, nil, nil, 1212, 1258, 1226, 1221, - 468, nil, nil, 21799, 21930, nil, nil, nil, nil, 1227, - 1231, 1233, 1233, nil, nil, 25917, nil, nil, 303, nil, - nil, 1241, 1249, 1250, nil, nil, nil, 1294, 1258, -32, - nil, 26015, nil, 1262, nil, nil, -77, nil, nil, 2419, - 4147, nil, nil, 1261, 1264, nil, 1266, 1268, 1271, nil, - 1299, 1288, 1274, 23911, nil, nil, nil, 2563, nil, 4291, - nil, nil, 32, 24042, nil, nil, 25332, nil, 22632, nil, - nil, 23164, nil, 25626, nil, nil, nil, nil, 1287, 1290, - 2707, nil, 33, nil, 34, 693, 169, nil, nil, nil, - nil, 255, nil, nil, nil, 1415, 4435, 4579, 1109, nil, - nil, nil, nil, nil, 637, 1338, 333, nil, nil, nil, - nil, nil, nil, 1294, 26113, 1314, nil, nil, 370, nil, - nil, 1444, nil, nil, 25724, nil, nil, 25920, nil, 26018, - nil, nil, 1339, 24173, 1165, 1395, nil, 4723, 35, 36, - 1309, 1397, 42, nil, 1320, 1334, 1338, 1358, 3363, 3507, - 4867, nil, 22061, 22192, 26211, nil, nil, nil, nil, 1379, - 1488, 583, nil, nil, nil, nil, nil, nil, 26309, 1365, - 26407, 1368, nil, nil, 1372, 1374, 1382, 1390, nil, 1391, - nil, 1411, 27770, nil, 1518, 22323, 27831, 27892, 98, 26116, - nil, nil, nil, nil, 1397, 738, 5011, nil, nil, nil, - 1402, nil, nil, nil, 1829, 1403, 26505, nil, nil, nil, - 26214, nil, 26312, nil, 26410, nil, 26508, nil, nil, 1448, - 1449, nil, 1411, 102, 138, 145, 181, 1412, nil, 38, - 26603, nil, 1413, 1419, 1429, 1430, 146, nil, nil, nil, - nil, 1431, 26697, nil, nil, nil, nil, 1434, nil ] - -racc_action_default = [ - -1, -729, -4, -729, -2, -714, -5, -729, -8, -729, - -729, -729, -729, -31, -729, -729, -36, -729, -729, -305, - -48, -716, -729, -57, -729, -65, -66, -67, -71, -282, - -282, -282, -318, -345, -346, -83, -13, -87, -95, -97, - -729, -611, -612, -729, -729, -729, -729, -729, -729, -235, - -729, -716, -626, -626, -253, -296, -297, -298, -299, -300, - -301, -302, -303, -304, -702, -307, -311, -728, -692, -326, - -328, -729, -729, -59, -59, -714, -729, -729, -729, -347, - -348, -350, -351, -352, -353, -410, -551, -552, -553, -554, - -575, -557, -558, -577, -579, -562, -567, -571, -573, -589, - -590, -591, -575, -593, -595, -596, -597, -598, -700, -600, - -601, -701, -603, -604, -605, -606, -607, -608, -609, -610, - -615, -616, 1219, -3, -715, -724, -725, -726, -7, -729, - -729, -729, -729, -729, -9, -4, -19, -729, -126, -127, - -128, -129, -130, -131, -132, -136, -137, -138, -139, -140, - -141, -142, -143, -144, -145, -146, -147, -148, -149, -150, - -151, -152, -153, -154, -155, -156, -157, -158, -159, -160, - -161, -162, -163, -164, -165, -166, -167, -168, -169, -170, - -171, -172, -173, -174, -175, -176, -177, -178, -179, -180, - -181, -182, -183, -184, -185, -186, -187, -188, -189, -190, - -191, -192, -193, -194, -195, -196, -197, -198, -199, -200, - -201, -202, -203, -204, -205, -206, -24, -133, -13, -729, - -729, -729, -729, -729, -272, -729, -729, -712, -713, -729, - -729, -716, -717, -52, -729, -611, -612, -729, -305, -729, - -729, -241, -729, -13, -729, -53, -55, -218, -219, -729, - -729, -729, -729, -729, -729, -729, -729, -729, -729, -729, - -729, -729, -729, -729, -729, -729, -729, -729, -729, -254, - -255, -256, -257, -729, -61, -62, -729, -126, -127, -166, - -167, -168, -184, -189, -196, -199, -611, -612, -690, -729, - -419, -421, -729, -710, -711, -72, -272, -729, -325, -425, - -434, -436, -78, -431, -79, -716, -80, -260, -277, -286, - -286, -281, -729, -287, -729, -575, -694, -729, -729, -81, - -82, -714, -14, -729, -17, -729, -85, -13, -716, -729, - -88, -91, -13, -103, -104, -729, -729, -111, -318, -321, - -716, -729, -626, -626, -345, -346, -349, -432, -729, -93, - -729, -99, -315, -729, -220, -221, -594, -229, -230, -729, - -242, -729, -729, -13, -625, -621, -648, -648, -729, -13, - -13, -309, -716, -261, -721, -721, -729, -729, -721, -729, - -327, -58, -729, -729, -729, -13, -13, -714, -729, -715, - -611, -612, -729, -729, -305, -729, -363, -364, -121, -122, - -729, -124, -729, -305, -619, -729, -341, -648, -555, -729, - -729, -729, -729, -729, -729, -729, -729, -6, -727, -25, - -26, -27, -28, -29, -729, -729, -21, -22, -23, -134, - -729, -32, -35, -292, -729, -729, -291, -33, -729, -37, - -729, -305, -45, -47, -207, -265, -287, -49, -50, -38, - -208, -265, -716, -273, -286, -286, -703, -704, -282, -429, - -705, -706, -704, -703, -282, -428, -430, -705, -706, -44, - -215, -51, -716, -324, -729, -729, -729, -272, -315, -729, - -729, -729, -729, -729, -216, -217, -222, -223, -224, -225, - -226, -227, -231, -232, -233, -234, -236, -237, -238, -239, - -240, -243, -244, -245, -246, -716, -258, -63, -716, -440, - -282, -703, -704, -69, -73, -649, -716, -286, -716, -283, - -438, -440, -716, -320, -278, -729, -279, -729, -284, -729, - -288, -729, -697, -699, -12, -715, -16, -18, -716, -84, - -313, -100, -89, -729, -716, -272, -729, -729, -110, -729, - -625, -594, -729, -96, -101, -729, -729, -729, -729, -259, - -247, -729, -729, -543, -729, -376, -377, -716, -633, -716, - -689, -689, -631, -633, -633, -647, -649, -650, -651, -652, - -653, -654, -655, -656, -657, -729, -659, -661, -663, -668, - -670, -671, -674, -679, -681, -682, -684, -685, -686, -729, - -729, -633, -729, -729, -729, -716, -729, -262, -723, -722, - -264, -723, -316, -317, -693, -13, -354, -355, -13, -729, - -729, -729, -729, -729, -729, -272, -729, -729, -315, -59, - -121, -122, -123, -729, -729, -272, -337, -617, -729, -13, - -411, -648, -414, -556, -576, -581, -729, -583, -559, -578, - -729, -580, -561, -729, -564, -729, -566, -569, -729, -570, - -729, -592, -10, -20, -729, -30, -729, -295, -729, -729, - -272, -729, -729, -729, -729, -433, -729, -274, -276, -729, - -729, -74, -271, -426, -729, -729, -76, -427, -323, -718, - -703, -704, -703, -704, -716, -54, -460, -462, -464, -467, - -524, -716, -479, -482, -517, -522, -523, -729, -729, -527, - -528, -529, -530, -531, -532, -533, -534, -535, -536, -537, - -729, -729, -541, -56, -729, -729, -691, -729, -441, -68, - -422, -438, -267, -274, -269, -729, -400, -729, -319, -286, - -285, -289, -729, -695, -696, -729, -15, -86, -729, -92, - -98, -716, -703, -704, -270, -707, -109, -729, -94, -729, - -214, -228, -716, -249, -728, -728, -343, -622, -729, -640, - -624, -729, -629, -630, -729, -729, -643, -729, -645, -729, - -365, -729, -367, -369, -372, -375, -716, -662, -672, -673, - -683, -687, -627, -729, -251, -344, -308, -310, -312, -721, - -728, -356, -728, -60, -357, -358, -331, -332, -729, -729, - -446, -334, -729, -716, -703, -704, -707, -314, -13, -121, - -122, -125, -716, -13, -729, -339, -729, -729, -716, -582, - -585, -586, -587, -588, -13, -560, -563, -565, -568, -572, - -574, -135, -34, -293, -729, -716, -703, -704, -704, -703, - -46, -266, -729, -719, -286, -40, -210, -41, -211, -75, - -42, -213, -43, -212, -77, -729, -729, -729, -729, -433, - -729, -729, -465, -466, -729, -729, -729, -484, -716, -716, - -478, -485, -491, -729, -494, -498, -729, -481, -729, -729, - -520, -521, -525, -526, -538, -122, -539, -729, -64, -420, - -400, -424, -423, -729, -716, -435, -401, -716, -13, -437, - -280, -290, -698, -90, -433, -102, -322, -729, -728, -361, - -13, -544, -728, -545, -546, -716, -632, -633, -633, -660, - -689, -669, -674, -688, -633, -633, -680, -633, -657, -675, - -716, -729, -729, -374, -658, -729, -263, -729, -359, -729, - -729, -333, -335, -729, -729, -13, -433, -729, -433, -729, - -729, -13, -342, -412, -415, -417, -404, -729, -729, -294, - -433, -39, -209, -275, -729, -461, -463, -471, -475, -716, - -716, -716, -503, -505, -506, -509, -510, -575, -513, -515, - -516, -716, -716, -716, -540, -476, -477, -501, -486, -489, - -492, -729, -497, -716, -575, -720, -716, -518, -519, -248, - -13, -70, -268, -689, -689, -381, -383, -383, -383, -399, - -729, -716, -657, -665, -666, -677, -439, -250, -11, -13, - -550, -362, -729, -729, -548, -623, -729, -636, -729, -638, - -628, -729, -641, -729, -644, -646, -366, -368, -370, -373, - -252, -329, -729, -330, -729, -451, -454, -457, -458, -459, - -289, -728, -336, -338, -618, -729, -13, -13, -729, -413, - -584, -468, -469, -470, -504, -508, -729, -512, -514, -472, - -473, -474, -493, -487, -729, -495, -499, -480, -729, -483, - -442, -729, -379, -380, -384, -390, -392, -729, -395, -729, - -397, -402, -729, -729, -664, -729, -549, -13, -611, -612, - -729, -729, -305, -547, -633, -633, -633, -633, -729, -729, - -13, -447, -729, -729, -455, -443, -444, -445, -340, -729, - -729, -716, -406, -408, -409, -502, -507, -511, -729, -490, - -729, -689, -667, -382, -383, -383, -383, -383, -678, -383, - -403, -676, -729, -315, -543, -272, -729, -729, -315, -729, - -634, -637, -639, -642, -371, -728, -13, -452, -453, -456, - -494, -416, -418, -405, -729, -488, -729, -496, -500, -378, - -729, -387, -729, -389, -729, -393, -729, -396, -398, -314, - -707, -542, -716, -703, -704, -707, -314, -633, -360, -728, - -729, -407, -383, -383, -383, -383, -433, -635, -448, -449, - -450, -495, -729, -385, -388, -391, -394, -383, -386 ] - -racc_goto_table = [ - 42, 141, 141, 330, 291, 42, 452, 230, 380, 623, - 809, 308, 308, 308, 225, 141, 275, 409, 274, 342, - 342, 764, 287, 293, 526, 299, 303, 382, 383, 416, - 947, 387, 365, 365, 42, 334, 334, 361, 233, 127, - 929, 458, 464, 564, 136, 217, 292, 373, 356, 603, - 604, 930, 615, 618, 772, 773, 329, 918, 342, 342, - 342, 144, 144, 553, 42, 929, 343, 343, 632, 381, - 381, 385, 386, 381, 391, 287, 287, 780, 516, 518, - 346, 346, 436, 437, 878, 419, 420, 421, 422, 607, - 610, 735, 8, 614, 124, 950, 936, 8, 514, 743, - 887, 369, 584, 584, 449, 343, 343, 343, 510, 127, - 469, 568, 134, 1049, 740, 349, 740, 1014, 15, 346, - 346, 346, 42, 15, 326, 1085, 879, 381, 381, 381, - 381, 42, 786, 42, 328, 123, 1017, 4, 295, 302, - 304, 443, 1047, 584, 443, 967, 908, 128, 1132, 569, - 443, 1148, 15, 1, 567, 600, 371, 404, 406, 927, - 575, 575, 695, 723, 928, 1134, 2, 981, 993, 526, - 675, 934, 306, 319, 320, 1170, 309, 309, 309, 1003, - 1028, 727, 15, 743, 927, 746, 892, 893, 216, 928, - 397, 1177, 396, 737, 432, 642, 362, 368, 653, 655, - 425, 575, 482, 308, 483, 388, 550, 550, 1139, 803, - 276, 374, 725, 731, 8, 664, 42, 468, 359, 447, - 448, 459, 376, 423, 1020, 8, 730, 288, 471, 472, - 475, 377, 395, 636, 1148, 431, 442, 370, 430, 442, - 15, 42, 531, 808, 605, 442, 1059, 372, 823, 15, - 743, 15, 961, 639, 1201, 1048, 749, 979, 991, 694, - 1019, 1095, 1175, 329, 417, 758, 740, 740, 1021, 1131, - 424, 1134, 293, 780, 640, 308, 308, 943, 17, 963, - 407, 827, 932, 17, 308, 1066, 1067, 508, 509, 1164, - 520, 458, 464, 521, 900, 507, 1125, 1054, 1208, 980, - 992, 821, 903, 1018, 1014, 953, 1166, 1014, 1055, 1014, - 1010, 1058, 17, 342, 975, 929, 554, 976, 874, 826, - 1047, 42, 740, 1144, 1211, 42, 549, 751, 940, 334, - 42, 546, 342, 875, 15, 886, 438, 299, 1102, 438, - 619, 889, 17, 303, 1135, 438, 1136, 329, 334, 556, - 551, 922, 329, 1032, 1126, 127, 408, 936, 606, 15, - 343, 42, 754, 435, 435, 410, 929, 42, 42, 1007, - 1008, 1141, 754, 411, 346, 412, 413, 584, 1057, 343, - 414, 877, 381, 42, 42, 988, 988, 415, 626, 896, - 1014, 369, 1014, 346, 1014, 1198, 1014, 988, 829, 834, - 17, 1087, 824, 638, 931, 620, 621, 813, 542, 17, - 535, 17, 869, 536, 1040, 326, 141, 822, 1142, 880, - 326, 127, 1014, nil, nil, 538, nil, nil, 537, 828, - 544, nil, 1114, 780, 780, 575, 671, 519, 676, 15, - 517, 309, 754, 15, nil, 522, nil, nil, 15, 309, - 754, 534, 845, 910, 682, nil, 308, nil, 929, 663, - 687, 913, nil, nil, 988, nil, nil, 468, nil, 914, - nil, 459, nil, nil, nil, nil, 144, nil, nil, 15, - 717, 717, 955, nil, 859, 15, 15, 458, 464, 864, - 1145, 724, 1209, 1146, 17, nil, 17, 1092, 1093, 17, - nil, 15, 15, 959, 584, 17, 682, 1169, nil, 554, - nil, 584, nil, nil, 946, nil, 904, 622, 554, 17, - 935, nil, 937, nil, 308, 342, nil, nil, nil, 584, - nil, 956, nil, 42, 342, nil, nil, nil, 468, nil, - 958, 334, 459, nil, 994, 743, nil, nil, 468, nil, - 334, 925, 459, nil, 877, 877, 998, nil, nil, 762, - 855, 857, 740, 970, nil, 860, 862, 681, 910, 1006, - nil, nil, 343, 686, nil, nil, 1202, nil, nil, nil, - nil, 343, nil, nil, nil, 988, 346, 1210, nil, nil, - 443, 978, nil, nil, nil, 346, 995, 996, nil, 17, - 443, 443, 932, 17, 308, 443, 443, nil, 17, nil, - 780, 780, 1191, 42, 308, nil, 42, nil, 468, 729, - nil, nil, 459, nil, 468, 1179, nil, 818, 923, nil, - 459, nil, nil, 1056, 792, 800, nil, 42, 802, 17, - nil, 1065, nil, 1022, nil, 17, 17, nil, nil, 308, - nil, 15, 1016, 804, nil, 141, 649, 651, 654, 654, - nil, 17, 17, 468, 42, 1075, nil, 459, 450, 902, - nil, 42, 825, nil, 470, nil, 1086, nil, nil, nil, - 676, nil, 1127, nil, nil, 442, nil, 676, 888, nil, - 1090, nil, nil, nil, nil, 442, 442, nil, 841, 717, - 442, 442, 1107, nil, nil, 717, 717, nil, 901, 1079, - 1080, 1081, nil, nil, 554, 144, 141, 898, nil, 274, - nil, nil, 1120, nil, 1121, 915, nil, nil, nil, nil, - 342, 15, nil, 971, 15, nil, nil, 676, nil, nil, - nil, 342, nil, nil, nil, 924, 334, 1130, nil, nil, - 682, nil, nil, 687, nil, 15, 842, 334, nil, 1086, - nil, nil, nil, 850, nil, nil, nil, nil, 812, nil, - nil, nil, 584, 443, nil, nil, nil, 343, nil, nil, - 960, 1115, 15, 1116, 379, 438, 1117, nil, 343, 15, - nil, 346, nil, nil, nil, 438, 438, nil, nil, 676, - 438, 438, 346, nil, 877, nil, nil, nil, 676, nil, - nil, 17, nil, 1086, 966, 1178, 42, nil, nil, nil, - nil, 42, 381, nil, nil, 310, 310, 310, nil, nil, - 1022, 676, 42, 1022, nil, nil, nil, nil, 957, nil, - nil, nil, 1147, nil, 1149, nil, nil, nil, nil, nil, - nil, 1178, nil, nil, 968, nil, nil, nil, 1023, 676, - 375, 378, nil, nil, 676, 676, nil, nil, 442, 717, - nil, nil, 717, 717, nil, 1086, nil, nil, nil, 717, - nil, 933, nil, nil, 933, 776, 778, 717, 717, 717, - nil, 17, nil, 966, 17, nil, nil, nil, 1030, 837, - nil, 837, 1034, nil, 1197, 1052, 42, nil, nil, 435, - 1206, nil, nil, nil, 1076, 17, 1022, nil, 42, nil, - nil, nil, nil, nil, 470, 1203, 450, 1204, 1026, 1205, - nil, 1088, nil, nil, 15, 433, 446, 1192, nil, 15, - 1031, nil, 17, nil, nil, 17, nil, 381, nil, 17, - 15, 717, nil, 42, nil, 17, 17, 1217, nil, 42, - 17, 17, nil, nil, nil, nil, nil, nil, 438, nil, - nil, nil, 754, nil, nil, 1061, nil, 676, 676, 676, - nil, nil, nil, 717, nil, nil, nil, nil, nil, 888, - nil, nil, nil, nil, 1064, nil, nil, nil, nil, 717, - 760, nil, nil, nil, nil, 342, nil, 966, 42, nil, - nil, nil, nil, nil, nil, 342, nil, 1015, nil, nil, - nil, 287, nil, nil, 15, 709, 709, 42, 528, nil, - 530, 1109, nil, 532, 533, nil, 15, nil, 18, nil, - nil, nil, 1023, 18, nil, 1023, nil, nil, 1023, 1106, - 1023, nil, 343, nil, nil, nil, nil, nil, 234, nil, - nil, nil, 343, nil, 42, 42, 346, nil, 234, 234, - 234, 15, 18, 335, 335, nil, 346, 15, 1167, 1168, - nil, nil, 717, nil, nil, 342, 1129, nil, nil, nil, - 310, nil, nil, nil, 17, nil, nil, nil, 310, 17, - nil, 287, 18, nil, nil, 42, 1156, 234, 234, nil, - 17, 234, 392, 402, 402, nil, nil, 1173, 42, nil, - 381, 381, 717, nil, 856, 858, 15, 1154, 17, 861, - 863, 1023, 343, 1023, 308, 1023, 717, 1023, 717, nil, - 1165, nil, nil, 468, nil, 15, 346, nil, 468, 1113, - 667, nil, 459, nil, 19, nil, nil, nil, nil, 19, - 18, nil, nil, 1023, 42, 234, 234, 234, 234, 18, - nil, 18, nil, nil, 717, nil, nil, nil, 676, nil, - nil, nil, 15, 15, 17, nil, 1199, nil, 19, 337, - 337, nil, nil, nil, nil, nil, 17, nil, 717, nil, - nil, 933, nil, 473, 1015, nil, nil, 1015, nil, 1015, - nil, 710, 710, nil, nil, nil, nil, nil, 19, nil, - nil, nil, nil, 15, 1096, 1098, 1100, nil, 394, 403, - 403, 17, nil, nil, nil, nil, 15, 17, nil, 1037, - 1039, 741, nil, 379, 709, 744, 1042, 1044, nil, 1045, - 709, 709, nil, nil, 18, 234, 440, 234, 234, 440, - 234, nil, nil, nil, nil, 440, 234, 234, nil, nil, - nil, nil, nil, nil, nil, nil, 19, 523, nil, 18, - nil, nil, 15, nil, nil, 19, 17, 19, nil, nil, - 1015, nil, 1015, nil, 1015, nil, 1015, 972, nil, nil, - 539, nil, nil, nil, 787, 17, nil, nil, nil, nil, - 856, 858, 863, 861, nil, nil, nil, nil, 739, nil, - nil, nil, 1015, nil, 741, 234, nil, 379, nil, nil, - nil, nil, 234, 234, nil, nil, nil, nil, nil, nil, - 446, 234, 17, 17, nil, nil, nil, nil, nil, nil, - nil, nil, 1181, 1183, 1185, 1187, nil, 1188, nil, 18, - nil, nil, nil, 18, nil, nil, nil, 335, 18, nil, - 19, nil, 441, nil, nil, 441, nil, nil, nil, nil, - nil, 441, nil, 17, 843, nil, 335, nil, nil, nil, - nil, nil, nil, 741, 379, 19, 17, nil, nil, 18, - nil, 799, nil, nil, nil, 18, 18, nil, nil, nil, - 1213, 1214, 1215, 1216, 709, nil, nil, 709, 709, 972, - 234, 18, 18, nil, 709, 1218, 1160, 1161, 1162, 1163, - 710, nil, 709, 709, 709, nil, 710, 710, nil, nil, - nil, 234, 17, nil, 688, nil, nil, nil, nil, 741, - nil, nil, nil, nil, nil, nil, nil, nil, 911, nil, - nil, 912, nil, nil, nil, nil, nil, nil, nil, nil, - 854, nil, nil, nil, nil, 19, nil, nil, nil, 19, - 726, 921, nil, 337, 19, nil, nil, nil, 732, nil, - 734, nil, nil, nil, 738, 939, 709, nil, nil, nil, - nil, nil, 337, nil, nil, nil, nil, nil, nil, 1207, - 747, nil, nil, 234, nil, 19, 750, nil, nil, nil, - nil, 19, 19, nil, nil, nil, 854, nil, 709, nil, - nil, nil, nil, nil, nil, nil, nil, 19, 19, 767, - nil, 770, nil, nil, 709, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 969, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 18, nil, nil, nil, nil, nil, 797, nil, 335, - nil, 234, nil, nil, nil, nil, nil, nil, 335, nil, - nil, nil, nil, nil, nil, nil, nil, 234, nil, nil, - 710, nil, nil, 710, 710, nil, nil, nil, nil, nil, - 710, nil, nil, nil, nil, nil, nil, nil, 710, 710, - 710, nil, nil, nil, nil, nil, nil, 709, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 18, nil, nil, 18, nil, nil, nil, nil, nil, - nil, 234, nil, nil, nil, nil, nil, 709, nil, nil, - 1060, 234, nil, nil, nil, 18, nil, nil, nil, nil, - nil, 709, 710, 709, nil, nil, nil, 19, nil, 379, - nil, nil, nil, nil, nil, 337, nil, nil, nil, nil, - nil, nil, 18, nil, 337, 440, 234, nil, nil, 18, - nil, nil, nil, nil, 710, 440, 440, nil, nil, 709, - 440, 440, nil, nil, nil, nil, nil, nil, nil, nil, - 710, nil, nil, nil, 916, nil, nil, nil, nil, nil, - nil, nil, nil, 709, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 944, nil, - nil, nil, nil, nil, nil, nil, nil, 19, nil, nil, - 19, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 335, nil, nil, nil, nil, nil, - nil, 19, nil, nil, nil, 335, nil, nil, 833, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 710, nil, nil, nil, nil, 19, nil, - nil, 441, nil, nil, nil, 19, nil, nil, nil, nil, - nil, 441, 441, nil, nil, nil, 441, 441, nil, nil, - nil, nil, nil, nil, 977, nil, nil, nil, nil, nil, - nil, nil, nil, 710, 18, nil, nil, nil, nil, 18, - 234, nil, nil, nil, nil, nil, nil, 710, nil, 710, - 18, nil, nil, nil, nil, nil, 1012, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 440, nil, - nil, nil, nil, nil, nil, nil, nil, 1035, nil, nil, - 337, nil, nil, 29, nil, 710, nil, nil, 29, nil, - nil, 337, 1046, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 29, nil, nil, nil, nil, nil, 710, - nil, nil, nil, 29, 29, 29, nil, 29, nil, nil, - nil, nil, nil, nil, 18, nil, nil, nil, nil, nil, - nil, 1071, 1072, 1073, nil, nil, 18, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 29, nil, nil, - 19, nil, 29, 29, nil, 19, 29, nil, 1089, nil, - nil, nil, nil, nil, nil, 234, 19, nil, nil, nil, - nil, 18, nil, nil, nil, nil, nil, 18, nil, nil, - nil, nil, nil, nil, 441, nil, nil, nil, nil, nil, - 711, 711, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 29, nil, nil, nil, nil, - 29, 29, 29, 29, 29, nil, 29, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 18, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 712, 712, nil, 1104, - 19, nil, nil, nil, nil, 18, nil, nil, nil, 1110, - nil, nil, 19, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 18, 18, nil, nil, nil, 19, nil, nil, - nil, nil, nil, 19, nil, nil, nil, nil, nil, 29, - 29, 29, 29, 29, 29, 29, nil, nil, nil, nil, - 29, 29, 29, nil, nil, nil, nil, nil, nil, 1151, - nil, nil, nil, 18, 29, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 18, nil, 234, 234, - nil, nil, 19, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 403, nil, nil, nil, nil, - nil, 19, nil, nil, nil, 1112, nil, nil, nil, nil, - 29, 234, nil, nil, nil, nil, nil, 29, 29, nil, - nil, nil, 18, nil, nil, nil, 29, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 19, 19, - nil, nil, nil, nil, 29, nil, nil, nil, 29, 711, - nil, nil, nil, 29, nil, 711, 711, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 403, nil, nil, 32, 19, - nil, nil, nil, 32, 29, nil, nil, nil, nil, nil, - 29, 29, 19, nil, nil, 712, nil, nil, 32, nil, - nil, 712, 712, nil, nil, 29, 29, 29, 32, 32, - 32, nil, 32, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 29, nil, 41, nil, - nil, nil, nil, 41, nil, nil, nil, nil, 19, nil, - nil, nil, 32, nil, nil, nil, nil, 32, 32, nil, - 286, 32, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 41, 333, 333, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 41, nil, nil, nil, nil, nil, 29, nil, - 32, nil, 390, 286, 286, 32, 32, 32, 32, 32, - nil, 32, nil, nil, nil, nil, nil, 713, 713, 711, - nil, nil, 711, 711, nil, nil, nil, nil, nil, 711, - nil, nil, nil, nil, nil, nil, nil, 711, 711, 711, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 41, nil, nil, nil, nil, nil, 29, nil, nil, 41, - nil, 41, nil, nil, nil, 712, 29, nil, 712, 712, - nil, nil, nil, nil, nil, 712, nil, nil, nil, nil, - nil, nil, 29, 712, 712, 712, nil, nil, nil, nil, - nil, nil, nil, nil, 32, 32, 32, 32, 32, 32, - 32, 711, nil, nil, nil, 32, 32, 32, nil, nil, - 714, 714, nil, nil, nil, nil, nil, nil, nil, 32, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 711, nil, nil, 29, nil, nil, 29, - nil, nil, nil, nil, 41, nil, 29, 712, nil, 711, - nil, nil, nil, nil, nil, nil, 29, nil, nil, nil, - 29, nil, nil, nil, nil, 32, nil, nil, nil, 41, - nil, nil, 32, 32, nil, nil, nil, nil, nil, 712, - nil, 32, nil, nil, nil, nil, nil, 29, nil, nil, - 29, 29, nil, nil, 29, 712, nil, nil, nil, 32, - 29, 29, nil, 32, nil, 29, 29, nil, 32, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 711, nil, nil, nil, 713, nil, nil, 32, - nil, nil, 713, 713, nil, 32, 32, nil, nil, 41, - nil, nil, nil, 41, nil, nil, nil, 333, 41, nil, - 32, 32, 32, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 711, nil, nil, nil, 333, nil, 712, nil, - nil, 32, nil, nil, nil, nil, 711, nil, 711, 41, - nil, nil, nil, nil, nil, 41, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 41, 41, nil, 715, 715, nil, nil, 712, nil, - nil, nil, nil, nil, 711, nil, nil, nil, nil, 714, - nil, nil, 712, nil, 712, 714, 714, nil, nil, 29, - nil, nil, nil, nil, 29, 29, nil, nil, 711, nil, - nil, nil, nil, 32, nil, 29, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 712, nil, nil, 29, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 712, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 713, nil, nil, 713, - 713, 32, nil, nil, nil, nil, 713, nil, nil, nil, - nil, 32, nil, nil, 713, 713, 713, nil, nil, 29, - nil, nil, nil, nil, nil, nil, nil, 32, nil, nil, - nil, 29, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 41, nil, nil, nil, nil, nil, nil, nil, 333, - 29, nil, nil, nil, nil, nil, 29, nil, 333, nil, - nil, nil, 29, nil, nil, nil, nil, nil, 713, nil, - nil, 32, nil, nil, 32, nil, nil, nil, nil, 714, - nil, 32, 714, 714, nil, nil, nil, nil, nil, 714, - nil, 32, nil, nil, nil, 32, nil, 714, 714, 714, - 713, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 29, nil, 715, nil, nil, 713, nil, nil, 715, - 715, 41, 32, nil, 41, 32, 32, nil, nil, 32, - 29, nil, nil, nil, nil, 32, 32, nil, nil, nil, - 32, 32, nil, nil, nil, 41, nil, nil, 716, 716, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 714, nil, nil, nil, nil, nil, 29, 29, nil, - nil, nil, 41, nil, nil, 718, 718, nil, nil, 41, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 714, nil, nil, nil, nil, nil, 713, - nil, nil, nil, nil, nil, 241, nil, nil, 29, 714, - nil, nil, nil, nil, nil, 307, 307, 307, nil, nil, - nil, 29, nil, 29, 29, nil, nil, 354, 355, nil, - 357, 358, nil, 360, nil, nil, nil, nil, nil, 713, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 307, 307, nil, 713, 333, 713, 29, nil, nil, nil, - nil, nil, nil, nil, nil, 333, nil, 29, nil, nil, - nil, nil, nil, nil, 32, nil, nil, nil, nil, 32, - 32, nil, nil, 715, nil, nil, 715, 715, nil, nil, - 32, 713, 714, 715, nil, nil, nil, nil, nil, nil, - nil, 715, 715, 715, nil, nil, nil, nil, 32, nil, - nil, nil, nil, nil, nil, 713, nil, nil, nil, nil, - nil, nil, nil, nil, 41, nil, nil, nil, nil, 41, - nil, nil, 714, nil, nil, nil, nil, nil, nil, nil, - 41, nil, nil, nil, nil, nil, 714, nil, 714, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 32, 715, nil, 716, nil, nil, - nil, nil, nil, 716, 716, nil, 32, nil, nil, nil, - nil, nil, nil, nil, 714, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 718, nil, nil, 715, nil, nil, - 718, 718, 307, 445, nil, 32, 451, 307, 714, nil, - nil, 32, 451, 715, 41, nil, nil, 32, nil, nil, - nil, nil, nil, nil, nil, 241, 41, nil, nil, nil, - 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, - 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, - 504, 505, nil, nil, nil, nil, 506, nil, nil, nil, - nil, 41, nil, nil, nil, nil, 32, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 307, - 307, nil, nil, nil, nil, 32, nil, nil, 307, nil, - nil, nil, nil, nil, nil, 307, 715, 307, nil, nil, - 307, 307, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 41, nil, nil, nil, - nil, nil, 32, 32, nil, nil, nil, nil, nil, 286, - nil, nil, nil, nil, nil, 41, 715, 716, nil, 1108, - 716, 716, 559, nil, 560, nil, nil, 716, nil, nil, - 715, nil, 715, nil, nil, 716, 716, 716, nil, nil, - nil, nil, nil, 32, 718, nil, nil, 718, 718, nil, - nil, nil, 41, 41, 718, nil, 32, nil, 32, 32, - nil, nil, 718, 718, 718, nil, nil, nil, 715, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 286, - nil, 32, 715, 41, nil, nil, nil, 307, nil, 716, - nil, nil, 32, nil, nil, nil, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 718, nil, nil, nil, - nil, 716, nil, nil, nil, nil, nil, nil, nil, nil, - 307, nil, 451, 451, 451, nil, nil, 716, nil, nil, - nil, nil, 41, nil, nil, nil, nil, nil, 718, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 718, nil, nil, nil, 355, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 307, nil, - 307, nil, 307, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 307, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 451, nil, - nil, 761, nil, nil, nil, 763, nil, nil, nil, nil, - 716, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 307, nil, nil, nil, nil, nil, 718, nil, nil, - nil, nil, nil, nil, nil, 794, nil, nil, nil, nil, - 716, 307, nil, nil, 307, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 716, nil, 716, 307, 307, nil, - nil, nil, nil, nil, nil, nil, nil, 718, 307, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 718, nil, 718, nil, nil, nil, nil, nil, nil, - nil, nil, 716, nil, nil, nil, nil, nil, nil, nil, - nil, 307, 451, 307, nil, nil, nil, 851, nil, nil, - 307, 307, 451, 451, nil, nil, 716, 451, 451, 718, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 718, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 307, nil, nil, nil, - nil, nil, nil, nil, nil, 307, nil, nil, 307, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 307, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 307, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 307, nil, nil, - nil, nil, nil, nil, nil, 451, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 451, 451, - 451, 451, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 1009, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 1027, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 1050, nil, - nil, nil, nil, nil, nil, nil, nil, 307, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 307, 451, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 307 ] - -racc_goto_check = [ - 71, 74, 74, 67, 154, 71, 31, 35, 106, 111, - 112, 51, 51, 51, 33, 74, 42, 194, 44, 45, - 45, 12, 71, 33, 93, 90, 90, 19, 19, 194, - 110, 19, 86, 86, 71, 71, 71, 35, 22, 116, - 225, 54, 54, 10, 17, 17, 49, 86, 79, 10, - 10, 131, 109, 109, 135, 135, 11, 13, 45, 45, - 45, 76, 76, 69, 71, 225, 47, 47, 72, 26, - 26, 40, 40, 26, 71, 71, 71, 126, 31, 91, - 82, 82, 24, 24, 171, 19, 19, 19, 19, 88, - 88, 57, 8, 88, 7, 13, 229, 8, 56, 233, - 183, 118, 224, 224, 28, 47, 47, 47, 54, 116, - 28, 140, 9, 128, 94, 68, 94, 130, 23, 82, - 82, 82, 71, 23, 63, 188, 172, 26, 26, 26, - 26, 71, 127, 71, 64, 5, 141, 2, 55, 55, - 55, 20, 125, 224, 20, 145, 143, 6, 147, 91, - 20, 230, 23, 1, 153, 153, 8, 73, 73, 223, - 219, 219, 37, 37, 142, 148, 3, 174, 174, 93, - 32, 142, 62, 62, 62, 189, 87, 87, 87, 174, - 14, 157, 23, 233, 223, 16, 198, 198, 18, 142, - 21, 189, 23, 157, 25, 153, 81, 81, 208, 208, - 27, 219, 38, 51, 39, 5, 218, 218, 188, 41, - 48, 87, 50, 59, 8, 77, 71, 74, 83, 26, - 26, 90, 85, 8, 145, 8, 92, 104, 26, 26, - 33, 105, 113, 115, 230, 22, 22, 119, 11, 22, - 23, 71, 194, 111, 120, 22, 174, 121, 122, 23, - 233, 23, 123, 124, 147, 129, 69, 171, 171, 31, - 133, 138, 188, 11, 6, 69, 94, 94, 139, 146, - 2, 148, 33, 126, 149, 51, 51, 126, 29, 150, - 151, 152, 196, 29, 51, 155, 156, 26, 158, 128, - 160, 54, 54, 161, 164, 49, 165, 166, 167, 172, - 172, 72, 57, 142, 130, 168, 169, 130, 170, 130, - 143, 173, 29, 45, 176, 225, 67, 178, 179, 10, - 125, 71, 94, 141, 188, 71, 35, 31, 127, 71, - 71, 33, 45, 180, 23, 184, 23, 90, 145, 23, - 19, 185, 29, 90, 191, 23, 192, 11, 71, 33, - 79, 200, 11, 201, 13, 116, 204, 229, 35, 23, - 47, 71, 54, 87, 87, 205, 225, 71, 71, 198, - 198, 131, 54, 206, 82, 207, 210, 224, 172, 47, - 211, 37, 26, 71, 71, 196, 196, 212, 33, 72, - 130, 118, 130, 82, 130, 110, 130, 196, 213, 214, - 29, 183, 217, 26, 227, 11, 11, 31, 68, 29, - 7, 29, 32, 8, 135, 63, 74, 31, 228, 32, - 63, 116, 130, nil, nil, 64, nil, nil, 9, 153, - 64, nil, 142, 126, 126, 219, 33, 62, 35, 23, - 87, 87, 54, 23, nil, 62, nil, nil, 23, 87, - 54, 5, 31, 93, 90, nil, 51, nil, 225, 17, - 90, 69, nil, nil, 196, nil, nil, 74, nil, 32, - nil, 90, nil, nil, nil, nil, 76, nil, nil, 23, - 71, 71, 109, nil, 56, 23, 23, 54, 54, 56, - 142, 35, 13, 142, 29, nil, 29, 135, 135, 29, - nil, 23, 23, 10, 224, 29, 90, 171, nil, 67, - nil, 224, nil, nil, 88, nil, 91, 5, 67, 29, - 140, nil, 140, nil, 51, 45, nil, nil, nil, 224, - nil, 32, nil, 71, 45, nil, nil, nil, 74, nil, - 32, 71, 90, nil, 72, 233, nil, nil, 74, nil, - 71, 91, 90, nil, 37, 37, 187, nil, nil, 26, - 28, 28, 94, 32, nil, 28, 28, 55, 93, 37, - nil, nil, 47, 55, nil, nil, 142, nil, nil, nil, - nil, 47, nil, nil, nil, 196, 82, 112, nil, nil, - 20, 32, nil, nil, nil, 82, 32, 32, nil, 29, - 20, 20, 196, 29, 51, 20, 20, nil, 29, nil, - 126, 126, 12, 71, 51, nil, 71, nil, 74, 55, - nil, nil, 90, nil, 74, 135, nil, 40, 24, nil, - 90, nil, nil, 37, 116, 11, nil, 71, 11, 29, - nil, 10, nil, 224, nil, 29, 29, nil, nil, 51, - nil, 23, 140, 116, nil, 74, 209, 209, 209, 209, - nil, 29, 29, 74, 71, 37, nil, 90, 78, 106, - nil, 71, 116, nil, 78, nil, 187, nil, nil, nil, - 35, nil, 111, nil, nil, 22, nil, 35, 35, nil, - 10, nil, nil, nil, nil, 22, 22, nil, 17, 71, - 22, 22, 109, nil, nil, 71, 71, nil, 154, 32, - 32, 32, nil, nil, 67, 76, 74, 42, nil, 44, - nil, nil, 109, nil, 109, 67, nil, nil, nil, nil, - 45, 23, nil, 28, 23, nil, nil, 35, nil, nil, - nil, 45, nil, nil, nil, 86, 71, 10, nil, nil, - 90, nil, nil, 90, nil, 23, 8, 71, nil, 187, - nil, nil, nil, 8, nil, nil, nil, nil, 87, nil, - nil, nil, 224, 20, nil, nil, nil, 47, nil, nil, - 19, 140, 23, 140, 84, 23, 140, nil, 47, 23, - nil, 82, nil, nil, nil, 23, 23, nil, nil, 35, - 23, 23, 82, nil, 37, nil, nil, nil, 35, nil, - nil, 29, nil, 187, 35, 187, 71, nil, nil, nil, - nil, 71, 26, nil, nil, 89, 89, 89, nil, nil, - 224, 35, 71, 224, nil, nil, nil, nil, 11, nil, - nil, nil, 140, nil, 140, nil, nil, nil, nil, nil, - nil, 187, nil, nil, 11, nil, nil, nil, 226, 35, - 89, 89, nil, nil, 35, 35, nil, nil, 22, 71, - nil, nil, 71, 71, nil, 187, nil, nil, nil, 71, - nil, 136, nil, nil, 136, 222, 222, 71, 71, 71, - nil, 29, nil, 35, 29, nil, nil, nil, 86, 209, - nil, 209, 86, nil, 140, 19, 71, nil, nil, 87, - 32, nil, nil, nil, 194, 29, 224, nil, 71, nil, - nil, nil, nil, nil, 78, 140, 78, 140, 11, 140, - nil, 194, nil, nil, 23, 84, 84, 31, nil, 23, - 11, nil, 29, nil, nil, 29, nil, 26, nil, 29, - 23, 71, nil, 71, nil, 29, 29, 140, nil, 71, - 29, 29, nil, nil, nil, nil, nil, nil, 23, nil, - nil, nil, 54, nil, nil, 11, nil, 35, 35, 35, - nil, nil, nil, 71, nil, nil, nil, nil, nil, 35, - nil, nil, nil, nil, 116, nil, nil, nil, nil, 71, - 78, nil, nil, nil, nil, 45, nil, 35, 71, nil, - nil, nil, nil, nil, nil, 45, nil, 136, nil, nil, - nil, 71, nil, nil, 23, 96, 96, 71, 84, nil, - 84, 71, nil, 84, 84, nil, 23, nil, 30, nil, - nil, nil, 226, 30, nil, 226, nil, nil, 226, 11, - 226, nil, 47, nil, nil, nil, nil, nil, 30, nil, - nil, nil, 47, nil, 71, 71, 82, nil, 30, 30, - 30, 23, 30, 30, 30, nil, 82, 23, 19, 19, - nil, nil, 71, nil, nil, 45, 11, nil, nil, nil, - 89, nil, nil, nil, 29, nil, nil, nil, 89, 29, - nil, 71, 30, nil, nil, 71, 33, 30, 30, nil, - 29, 30, 30, 30, 30, nil, nil, 35, 71, nil, - 26, 26, 71, nil, 78, 78, 23, 11, 29, 78, - 78, 226, 47, 226, 51, 226, 71, 226, 71, nil, - 11, nil, nil, 74, nil, 23, 82, nil, 74, 23, - 84, nil, 90, nil, 34, nil, nil, nil, nil, 34, - 30, nil, nil, 226, 71, 30, 30, 30, 30, 30, - nil, 30, nil, nil, 71, nil, nil, nil, 35, nil, - nil, nil, 23, 23, 29, nil, 11, nil, 34, 34, - 34, nil, nil, nil, nil, nil, 29, nil, 71, nil, - nil, 136, nil, 65, 136, nil, nil, 136, nil, 136, - nil, 97, 97, nil, nil, nil, nil, nil, 34, nil, - nil, nil, nil, 23, 137, 137, 137, nil, 34, 34, - 34, 29, nil, nil, nil, nil, 23, 29, nil, 222, - 222, 84, nil, 84, 96, 84, 222, 222, nil, 222, - 96, 96, nil, nil, 30, 30, 30, 30, 30, 30, - 30, nil, nil, nil, nil, 30, 30, 30, nil, nil, - nil, nil, nil, nil, nil, nil, 34, 65, nil, 30, - nil, nil, 23, nil, nil, 34, 29, 34, nil, nil, - 136, nil, 136, nil, 136, nil, 136, 78, nil, nil, - 65, nil, nil, nil, 84, 29, nil, nil, nil, nil, - 78, 78, 78, 78, nil, nil, nil, nil, 89, nil, - nil, nil, 136, nil, 84, 30, nil, 84, nil, nil, - nil, nil, 30, 30, nil, nil, nil, nil, nil, nil, - 84, 30, 29, 29, nil, nil, nil, nil, nil, nil, - nil, nil, 137, 137, 137, 137, nil, 137, nil, 30, - nil, nil, nil, 30, nil, nil, nil, 30, 30, nil, - 34, nil, 34, nil, nil, 34, nil, nil, nil, nil, - nil, 34, nil, 29, 84, nil, 30, nil, nil, nil, - nil, nil, nil, 84, 84, 34, 29, nil, nil, 30, - nil, 89, nil, nil, nil, 30, 30, nil, nil, nil, - 137, 137, 137, 137, 96, nil, nil, 96, 96, 78, - 30, 30, 30, nil, 96, 137, 222, 222, 222, 222, - 97, nil, 96, 96, 96, nil, 97, 97, nil, nil, - nil, 30, 29, nil, 65, nil, nil, nil, nil, 84, - nil, nil, nil, nil, nil, nil, nil, nil, 84, nil, - nil, 84, nil, nil, nil, nil, nil, nil, nil, nil, - 89, nil, nil, nil, nil, 34, nil, nil, nil, 34, - 65, 84, nil, 34, 34, nil, nil, nil, 65, nil, - 65, nil, nil, nil, 65, 84, 96, nil, nil, nil, - nil, nil, 34, nil, nil, nil, nil, nil, nil, 222, - 65, nil, nil, 30, nil, 34, 65, nil, nil, nil, - nil, 34, 34, nil, nil, nil, 89, nil, 96, nil, - nil, nil, nil, nil, nil, nil, nil, 34, 34, 65, - nil, 65, nil, nil, 96, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 84, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 30, nil, nil, nil, nil, nil, 65, nil, 30, - nil, 30, nil, nil, nil, nil, nil, nil, 30, nil, - nil, nil, nil, nil, nil, nil, nil, 30, nil, nil, - 97, nil, nil, 97, 97, nil, nil, nil, nil, nil, - 97, nil, nil, nil, nil, nil, nil, nil, 97, 97, - 97, nil, nil, nil, nil, nil, nil, 96, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 30, nil, nil, 30, nil, nil, nil, nil, nil, - nil, 30, nil, nil, nil, nil, nil, 96, nil, nil, - 84, 30, nil, nil, nil, 30, nil, nil, nil, nil, - nil, 96, 97, 96, nil, nil, nil, 34, nil, 84, - nil, nil, nil, nil, nil, 34, nil, nil, nil, nil, - nil, nil, 30, nil, 34, 30, 30, nil, nil, 30, - nil, nil, nil, nil, 97, 30, 30, nil, nil, 96, - 30, 30, nil, nil, nil, nil, nil, nil, nil, nil, - 97, nil, nil, nil, 65, nil, nil, nil, nil, nil, - nil, nil, nil, 96, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 65, nil, - nil, nil, nil, nil, nil, nil, nil, 34, nil, nil, - 34, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 30, nil, nil, nil, nil, nil, - nil, 34, nil, nil, nil, 30, nil, nil, 34, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 97, nil, nil, nil, nil, 34, nil, - nil, 34, nil, nil, nil, 34, nil, nil, nil, nil, - nil, 34, 34, nil, nil, nil, 34, 34, nil, nil, - nil, nil, nil, nil, 65, nil, nil, nil, nil, nil, - nil, nil, nil, 97, 30, nil, nil, nil, nil, 30, - 30, nil, nil, nil, nil, nil, nil, 97, nil, 97, - 30, nil, nil, nil, nil, nil, 65, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 30, nil, - nil, nil, nil, nil, nil, nil, nil, 65, nil, nil, - 34, nil, nil, 58, nil, 97, nil, nil, 58, nil, - nil, 34, 65, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 58, nil, nil, nil, nil, nil, 97, - nil, nil, nil, 58, 58, 58, nil, 58, nil, nil, - nil, nil, nil, nil, 30, nil, nil, nil, nil, nil, - nil, 65, 65, 65, nil, nil, 30, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 58, nil, nil, - 34, nil, 58, 58, nil, 34, 58, nil, 65, nil, - nil, nil, nil, nil, nil, 30, 34, nil, nil, nil, - nil, 30, nil, nil, nil, nil, nil, 30, nil, nil, - nil, nil, nil, nil, 34, nil, nil, nil, nil, nil, - 98, 98, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 58, nil, nil, nil, nil, - 58, 58, 58, 58, 58, nil, 58, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 30, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 99, 99, nil, 30, - 34, nil, nil, nil, nil, 30, nil, nil, nil, 30, - nil, nil, 34, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 30, 30, nil, nil, nil, 34, nil, nil, - nil, nil, nil, 34, nil, nil, nil, nil, nil, 58, - 58, 58, 58, 58, 58, 58, nil, nil, nil, nil, - 58, 58, 58, nil, nil, nil, nil, nil, nil, 30, - nil, nil, nil, 30, 58, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 30, nil, 30, 30, - nil, nil, 34, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 34, nil, nil, nil, nil, - nil, 34, nil, nil, nil, 34, nil, nil, nil, nil, - 58, 30, nil, nil, nil, nil, nil, 58, 58, nil, - nil, nil, 30, nil, nil, nil, 58, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 34, 34, - nil, nil, nil, nil, 58, nil, nil, nil, 58, 98, - nil, nil, nil, 58, nil, 98, 98, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 34, nil, nil, 61, 34, - nil, nil, nil, 61, 58, nil, nil, nil, nil, nil, - 58, 58, 34, nil, nil, 99, nil, nil, 61, nil, - nil, 99, 99, nil, nil, 58, 58, 58, 61, 61, - 61, nil, 61, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 58, nil, 70, nil, - nil, nil, nil, 70, nil, nil, nil, nil, 34, nil, - nil, nil, 61, nil, nil, nil, nil, 61, 61, nil, - 70, 61, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 70, 70, 70, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 70, nil, nil, nil, nil, nil, 58, nil, - 61, nil, 70, 70, 70, 61, 61, 61, 61, 61, - nil, 61, nil, nil, nil, nil, nil, 100, 100, 98, - nil, nil, 98, 98, nil, nil, nil, nil, nil, 98, - nil, nil, nil, nil, nil, nil, nil, 98, 98, 98, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 70, nil, nil, nil, nil, nil, 58, nil, nil, 70, - nil, 70, nil, nil, nil, 99, 58, nil, 99, 99, - nil, nil, nil, nil, nil, 99, nil, nil, nil, nil, - nil, nil, 58, 99, 99, 99, nil, nil, nil, nil, - nil, nil, nil, nil, 61, 61, 61, 61, 61, 61, - 61, 98, nil, nil, nil, 61, 61, 61, nil, nil, - 101, 101, nil, nil, nil, nil, nil, nil, nil, 61, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 98, nil, nil, 58, nil, nil, 58, - nil, nil, nil, nil, 70, nil, 58, 99, nil, 98, - nil, nil, nil, nil, nil, nil, 58, nil, nil, nil, - 58, nil, nil, nil, nil, 61, nil, nil, nil, 70, - nil, nil, 61, 61, nil, nil, nil, nil, nil, 99, - nil, 61, nil, nil, nil, nil, nil, 58, nil, nil, - 58, 58, nil, nil, 58, 99, nil, nil, nil, 61, - 58, 58, nil, 61, nil, 58, 58, nil, 61, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 98, nil, nil, nil, 100, nil, nil, 61, - nil, nil, 100, 100, nil, 61, 61, nil, nil, 70, - nil, nil, nil, 70, nil, nil, nil, 70, 70, nil, - 61, 61, 61, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 98, nil, nil, nil, 70, nil, 99, nil, - nil, 61, nil, nil, nil, nil, 98, nil, 98, 70, - nil, nil, nil, nil, nil, 70, 70, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 70, 70, nil, 102, 102, nil, nil, 99, nil, - nil, nil, nil, nil, 98, nil, nil, nil, nil, 101, - nil, nil, 99, nil, 99, 101, 101, nil, nil, 58, - nil, nil, nil, nil, 58, 58, nil, nil, 98, nil, - nil, nil, nil, 61, nil, 58, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 99, nil, nil, 58, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 99, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 100, nil, nil, 100, - 100, 61, nil, nil, nil, nil, 100, nil, nil, nil, - nil, 61, nil, nil, 100, 100, 100, nil, nil, 58, - nil, nil, nil, nil, nil, nil, nil, 61, nil, nil, - nil, 58, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 70, nil, nil, nil, nil, nil, nil, nil, 70, - 58, nil, nil, nil, nil, nil, 58, nil, 70, nil, - nil, nil, 58, nil, nil, nil, nil, nil, 100, nil, - nil, 61, nil, nil, 61, nil, nil, nil, nil, 101, - nil, 61, 101, 101, nil, nil, nil, nil, nil, 101, - nil, 61, nil, nil, nil, 61, nil, 101, 101, 101, - 100, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 58, nil, 102, nil, nil, 100, nil, nil, 102, - 102, 70, 61, nil, 70, 61, 61, nil, nil, 61, - 58, nil, nil, nil, nil, 61, 61, nil, nil, nil, - 61, 61, nil, nil, nil, 70, nil, nil, 103, 103, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 101, nil, nil, nil, nil, nil, 58, 58, nil, - nil, nil, 70, nil, nil, 108, 108, nil, nil, 70, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 101, nil, nil, nil, nil, nil, 100, - nil, nil, nil, nil, nil, 36, nil, nil, 58, 101, - nil, nil, nil, nil, nil, 36, 36, 36, nil, nil, - nil, 58, nil, 58, 58, nil, nil, 36, 36, nil, - 36, 36, nil, 36, nil, nil, nil, nil, nil, 100, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 36, 36, nil, 100, 70, 100, 58, nil, nil, nil, - nil, nil, nil, nil, nil, 70, nil, 58, nil, nil, - nil, nil, nil, nil, 61, nil, nil, nil, nil, 61, - 61, nil, nil, 102, nil, nil, 102, 102, nil, nil, - 61, 100, 101, 102, nil, nil, nil, nil, nil, nil, - nil, 102, 102, 102, nil, nil, nil, nil, 61, nil, - nil, nil, nil, nil, nil, 100, nil, nil, nil, nil, - nil, nil, nil, nil, 70, nil, nil, nil, nil, 70, - nil, nil, 101, nil, nil, nil, nil, nil, nil, nil, - 70, nil, nil, nil, nil, nil, 101, nil, 101, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 61, 102, nil, 103, nil, nil, - nil, nil, nil, 103, 103, nil, 61, nil, nil, nil, - nil, nil, nil, nil, 101, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 108, nil, nil, 102, nil, nil, - 108, 108, 36, 36, nil, 61, 36, 36, 101, nil, - nil, 61, 36, 102, 70, nil, nil, 61, nil, nil, - nil, nil, nil, nil, nil, 36, 70, nil, nil, nil, - 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, - 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, - 36, 36, nil, nil, nil, nil, 36, nil, nil, nil, - nil, 70, nil, nil, nil, nil, 61, 70, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 36, - 36, nil, nil, nil, nil, 61, nil, nil, 36, nil, - nil, nil, nil, nil, nil, 36, 102, 36, nil, nil, - 36, 36, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 70, nil, nil, nil, - nil, nil, 61, 61, nil, nil, nil, nil, nil, 70, - nil, nil, nil, nil, nil, 70, 102, 103, nil, 70, - 103, 103, 36, nil, 36, nil, nil, 103, nil, nil, - 102, nil, 102, nil, nil, 103, 103, 103, nil, nil, - nil, nil, nil, 61, 108, nil, nil, 108, 108, nil, - nil, nil, 70, 70, 108, nil, 61, nil, 61, 61, - nil, nil, 108, 108, 108, nil, nil, nil, 102, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 70, - nil, 61, 102, 70, nil, nil, nil, 36, nil, 103, - nil, nil, 61, nil, nil, nil, 70, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 108, nil, nil, nil, - nil, 103, nil, nil, nil, nil, nil, nil, nil, nil, - 36, nil, 36, 36, 36, nil, nil, 103, nil, nil, - nil, nil, 70, nil, nil, nil, nil, nil, 108, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 108, nil, nil, nil, 36, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 36, nil, - 36, nil, 36, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 36, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 36, nil, - nil, 36, nil, nil, nil, 36, nil, nil, nil, nil, - 103, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 36, nil, nil, nil, nil, nil, 108, nil, nil, - nil, nil, nil, nil, nil, 36, nil, nil, nil, nil, - 103, 36, nil, nil, 36, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 103, nil, 103, 36, 36, nil, - nil, nil, nil, nil, nil, nil, nil, 108, 36, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 108, nil, 108, nil, nil, nil, nil, nil, nil, - nil, nil, 103, nil, nil, nil, nil, nil, nil, nil, - nil, 36, 36, 36, nil, nil, nil, 36, nil, nil, - 36, 36, 36, 36, nil, nil, 103, 36, 36, 108, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 108, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 36, nil, nil, nil, - nil, nil, nil, nil, nil, 36, nil, nil, 36, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 36, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 36, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 36, nil, nil, - nil, nil, nil, nil, nil, 36, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 36, 36, - 36, 36, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 36, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 36, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 36, nil, - nil, nil, nil, nil, nil, nil, nil, 36, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 36, 36, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 36 ] - -racc_goto_pointer = [ - nil, 153, 135, 166, nil, 130, 140, 89, 90, 103, - -320, 20, -542, -707, -738, nil, -350, 34, 177, -44, - -79, 114, 16, 116, -137, -25, -2, 64, -119, 276, - 1036, -218, -282, -4, 1152, -14, 2983, -320, -43, -42, - -2, -410, -8, nil, -6, -18, nil, 29, 186, 19, - -295, -21, nil, nil, -184, 109, -197, -429, 1901, -300, - nil, 2256, 140, 88, 98, 972, nil, -34, 77, -287, - 2306, -2, -332, 80, -9, nil, 51, -214, 445, 2, - nil, 144, 43, 169, 716, 155, -20, 144, -285, 793, - -4, -217, -284, -286, -411, nil, 543, 729, 1528, 1574, - 1915, 2008, 2212, 2466, 203, 163, -61, nil, 2493, -330, - -770, -379, -612, 156, nil, -171, 34, nil, 48, 172, - -127, 181, -388, -573, -153, -799, -508, -453, -829, -686, - -790, -720, nil, -647, nil, -516, 110, 208, -755, -639, - -255, -771, -604, -590, nil, -683, -799, -920, -903, -133, - -548, 195, -359, -212, -21, -679, -679, -328, -2, nil, - -10, -8, nil, nil, -434, -765, -656, -901, -505, -815, - -645, -617, -575, -642, -707, nil, -556, nil, -554, -382, - -367, nil, nil, -602, -367, -362, nil, -325, -876, -949, - nil, -730, -728, nil, -73, nil, -489, nil, -521, nil, - -414, -569, nil, nil, 268, 272, 279, 280, -214, 246, - 280, 283, 289, -248, -248, nil, nil, -235, -136, -206, - nil, nil, 312, -609, -264, -728, -49, -367, -673, -679, - -946, nil, nil, -428 ] - -racc_goto_default = [ - nil, nil, nil, nil, 5, nil, 6, 389, 324, nil, - nil, 563, nil, 948, nil, 321, 322, nil, nil, nil, - 13, 14, 20, 239, nil, nil, 16, nil, 439, 240, - 353, nil, nil, 634, 238, 474, 23, 997, nil, nil, - nil, nil, nil, 384, 143, 52, 24, 53, nil, nil, - nil, 25, 26, 27, 757, nil, nil, nil, 341, nil, - 28, 338, 453, 35, nil, nil, 37, 40, 39, nil, - 235, 236, 401, nil, 461, 142, 87, nil, 444, 103, - 49, nil, 54, 273, 313, nil, 919, 454, nil, 455, - 466, nil, 683, 524, 311, 297, 55, 56, 57, 58, - 59, 60, 61, 62, 63, nil, 298, 69, 70, nil, - nil, nil, nil, nil, 77, nil, 616, 78, 363, nil, - nil, nil, nil, nil, nil, 782, 583, nil, 783, 784, - 571, 565, 566, 1143, 1013, nil, 572, nil, nil, nil, - 601, nil, 574, nil, 906, nil, nil, nil, 581, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 465, - nil, nil, 736, 728, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 882, nil, 696, 705, 697, 698, nil, - nil, 699, 700, nil, nil, nil, 881, 883, nil, 884, - 982, 983, 984, 985, nil, 989, 592, 990, 704, 706, - nil, nil, 86, 88, 89, nil, nil, nil, nil, 644, - nil, nil, nil, nil, nil, 99, 100, nil, 364, 926, - 367, 570, 769, 573, 938, 586, 588, 589, 1024, 593, - 1025, 596, 599, 316 ] - -racc_reduce_table = [ - 0, 0, :racc_error, - 0, 150, :_reduce_1, - 2, 148, :_reduce_2, - 2, 149, :_reduce_3, - 0, 151, :_reduce_4, - 1, 151, :_reduce_5, - 3, 151, :_reduce_6, - 2, 151, :_reduce_7, - 1, 153, :_reduce_none, - 2, 153, :_reduce_9, - 3, 156, :_reduce_10, - 4, 157, :_reduce_11, - 2, 158, :_reduce_12, - 0, 162, :_reduce_13, - 1, 162, :_reduce_14, - 3, 162, :_reduce_15, - 2, 162, :_reduce_16, - 1, 163, :_reduce_none, - 2, 163, :_reduce_18, - 0, 174, :_reduce_19, - 4, 155, :_reduce_20, - 3, 155, :_reduce_21, - 3, 155, :_reduce_22, - 3, 155, :_reduce_23, - 2, 155, :_reduce_24, - 3, 155, :_reduce_25, - 3, 155, :_reduce_26, - 3, 155, :_reduce_27, - 3, 155, :_reduce_28, - 3, 155, :_reduce_29, - 4, 155, :_reduce_30, - 1, 155, :_reduce_none, - 3, 155, :_reduce_32, - 3, 155, :_reduce_33, - 5, 155, :_reduce_34, - 3, 155, :_reduce_35, - 1, 155, :_reduce_none, - 3, 167, :_reduce_37, - 3, 167, :_reduce_38, - 6, 167, :_reduce_39, - 5, 167, :_reduce_40, - 5, 167, :_reduce_41, - 5, 167, :_reduce_42, - 5, 167, :_reduce_43, - 3, 167, :_reduce_44, - 1, 175, :_reduce_none, - 3, 175, :_reduce_46, - 1, 175, :_reduce_none, - 1, 173, :_reduce_none, - 3, 173, :_reduce_49, - 3, 173, :_reduce_50, - 3, 173, :_reduce_51, - 2, 173, :_reduce_52, - 0, 185, :_reduce_53, - 4, 173, :_reduce_54, - 0, 186, :_reduce_55, - 4, 173, :_reduce_56, - 1, 173, :_reduce_none, - 1, 166, :_reduce_none, - 0, 190, :_reduce_59, - 3, 187, :_reduce_60, - 1, 189, :_reduce_61, - 2, 192, :_reduce_62, - 0, 197, :_reduce_63, - 5, 194, :_reduce_64, - 1, 169, :_reduce_none, - 1, 169, :_reduce_none, - 1, 199, :_reduce_none, - 4, 199, :_reduce_68, - 0, 206, :_reduce_69, - 4, 203, :_reduce_70, - 1, 205, :_reduce_none, - 2, 198, :_reduce_72, - 3, 198, :_reduce_73, - 4, 198, :_reduce_74, - 5, 198, :_reduce_75, - 4, 198, :_reduce_76, - 5, 198, :_reduce_77, - 2, 198, :_reduce_78, - 2, 198, :_reduce_79, - 2, 198, :_reduce_80, - 2, 198, :_reduce_81, - 2, 198, :_reduce_82, - 1, 168, :_reduce_83, - 3, 168, :_reduce_84, - 1, 211, :_reduce_85, - 3, 211, :_reduce_86, - 1, 210, :_reduce_none, - 2, 210, :_reduce_88, - 3, 210, :_reduce_89, - 5, 210, :_reduce_90, - 2, 210, :_reduce_91, - 4, 210, :_reduce_92, - 2, 210, :_reduce_93, - 4, 210, :_reduce_94, - 1, 210, :_reduce_95, - 3, 210, :_reduce_96, - 1, 214, :_reduce_none, - 3, 214, :_reduce_98, - 2, 213, :_reduce_99, - 3, 213, :_reduce_100, - 1, 216, :_reduce_101, - 3, 216, :_reduce_102, - 1, 215, :_reduce_103, - 1, 215, :_reduce_104, - 4, 215, :_reduce_105, - 3, 215, :_reduce_106, - 3, 215, :_reduce_107, - 3, 215, :_reduce_108, - 3, 215, :_reduce_109, - 2, 215, :_reduce_110, - 1, 215, :_reduce_111, - 1, 170, :_reduce_112, - 1, 170, :_reduce_113, - 4, 170, :_reduce_114, - 3, 170, :_reduce_115, - 3, 170, :_reduce_116, - 3, 170, :_reduce_117, - 3, 170, :_reduce_118, - 2, 170, :_reduce_119, - 1, 170, :_reduce_120, - 1, 219, :_reduce_121, - 1, 219, :_reduce_none, - 2, 220, :_reduce_123, - 1, 220, :_reduce_124, - 3, 220, :_reduce_125, - 1, 191, :_reduce_none, - 1, 191, :_reduce_none, - 1, 191, :_reduce_none, - 1, 191, :_reduce_none, - 1, 191, :_reduce_none, - 1, 164, :_reduce_131, - 1, 164, :_reduce_none, - 1, 165, :_reduce_133, - 0, 224, :_reduce_134, - 4, 165, :_reduce_135, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 221, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 3, 183, :_reduce_207, - 3, 183, :_reduce_208, - 6, 183, :_reduce_209, - 5, 183, :_reduce_210, - 5, 183, :_reduce_211, - 5, 183, :_reduce_212, - 5, 183, :_reduce_213, - 4, 183, :_reduce_214, - 3, 183, :_reduce_215, - 3, 183, :_reduce_216, - 3, 183, :_reduce_217, - 2, 183, :_reduce_218, - 2, 183, :_reduce_219, - 2, 183, :_reduce_220, - 2, 183, :_reduce_221, - 3, 183, :_reduce_222, - 3, 183, :_reduce_223, - 3, 183, :_reduce_224, - 3, 183, :_reduce_225, - 3, 183, :_reduce_226, - 3, 183, :_reduce_227, - 4, 183, :_reduce_228, - 2, 183, :_reduce_229, - 2, 183, :_reduce_230, - 3, 183, :_reduce_231, - 3, 183, :_reduce_232, - 3, 183, :_reduce_233, - 3, 183, :_reduce_234, - 1, 183, :_reduce_none, - 3, 183, :_reduce_236, - 3, 183, :_reduce_237, - 3, 183, :_reduce_238, - 3, 183, :_reduce_239, - 3, 183, :_reduce_240, - 2, 183, :_reduce_241, - 2, 183, :_reduce_242, - 3, 183, :_reduce_243, - 3, 183, :_reduce_244, - 3, 183, :_reduce_245, - 3, 183, :_reduce_246, - 3, 183, :_reduce_247, - 6, 183, :_reduce_248, - 4, 183, :_reduce_249, - 6, 183, :_reduce_250, - 4, 183, :_reduce_251, - 6, 183, :_reduce_252, - 1, 183, :_reduce_none, - 1, 230, :_reduce_none, - 1, 230, :_reduce_none, - 1, 230, :_reduce_none, - 1, 230, :_reduce_none, - 3, 227, :_reduce_258, - 3, 227, :_reduce_259, - 1, 231, :_reduce_none, - 1, 232, :_reduce_none, - 2, 232, :_reduce_none, - 4, 232, :_reduce_263, - 2, 232, :_reduce_264, - 1, 225, :_reduce_none, - 3, 225, :_reduce_266, - 3, 237, :_reduce_267, - 5, 237, :_reduce_268, - 3, 237, :_reduce_269, - 0, 239, :_reduce_270, - 1, 239, :_reduce_none, - 0, 178, :_reduce_272, - 1, 178, :_reduce_none, - 2, 178, :_reduce_none, - 4, 178, :_reduce_275, - 2, 178, :_reduce_276, - 1, 209, :_reduce_277, - 2, 209, :_reduce_278, - 2, 209, :_reduce_279, - 4, 209, :_reduce_280, - 1, 209, :_reduce_281, - 0, 242, :_reduce_282, - 2, 202, :_reduce_283, - 2, 241, :_reduce_284, - 2, 240, :_reduce_285, - 0, 240, :_reduce_286, - 1, 234, :_reduce_287, - 2, 234, :_reduce_288, - 3, 234, :_reduce_289, - 4, 234, :_reduce_290, - 1, 172, :_reduce_291, - 1, 172, :_reduce_none, - 3, 171, :_reduce_293, - 4, 171, :_reduce_294, - 2, 171, :_reduce_295, - 1, 229, :_reduce_none, - 1, 229, :_reduce_none, - 1, 229, :_reduce_none, - 1, 229, :_reduce_none, - 1, 229, :_reduce_none, - 1, 229, :_reduce_none, - 1, 229, :_reduce_none, - 1, 229, :_reduce_none, - 1, 229, :_reduce_none, - 1, 229, :_reduce_none, - 1, 229, :_reduce_306, - 0, 266, :_reduce_307, - 4, 229, :_reduce_308, - 0, 267, :_reduce_309, - 4, 229, :_reduce_310, - 0, 268, :_reduce_311, - 4, 229, :_reduce_312, - 3, 229, :_reduce_313, - 3, 229, :_reduce_314, - 2, 229, :_reduce_315, - 3, 229, :_reduce_316, - 3, 229, :_reduce_317, - 1, 229, :_reduce_318, - 4, 229, :_reduce_319, - 3, 229, :_reduce_320, - 1, 229, :_reduce_321, - 5, 229, :_reduce_322, - 4, 229, :_reduce_323, - 3, 229, :_reduce_324, - 2, 229, :_reduce_325, - 1, 229, :_reduce_none, - 2, 229, :_reduce_327, - 1, 229, :_reduce_none, - 6, 229, :_reduce_329, - 6, 229, :_reduce_330, - 4, 229, :_reduce_331, - 4, 229, :_reduce_332, - 5, 229, :_reduce_333, - 4, 229, :_reduce_334, - 5, 229, :_reduce_335, - 6, 229, :_reduce_336, - 0, 269, :_reduce_337, - 6, 229, :_reduce_338, - 0, 270, :_reduce_339, - 7, 229, :_reduce_340, - 0, 271, :_reduce_341, - 5, 229, :_reduce_342, - 4, 229, :_reduce_343, - 4, 229, :_reduce_344, - 1, 229, :_reduce_345, - 1, 229, :_reduce_346, - 1, 229, :_reduce_347, - 1, 229, :_reduce_348, - 1, 177, :_reduce_none, - 1, 261, :_reduce_350, - 1, 264, :_reduce_351, - 1, 193, :_reduce_352, - 1, 208, :_reduce_353, - 1, 256, :_reduce_none, - 1, 256, :_reduce_none, - 2, 256, :_reduce_356, - 1, 188, :_reduce_none, - 1, 188, :_reduce_none, - 1, 257, :_reduce_none, - 5, 257, :_reduce_360, - 1, 160, :_reduce_none, - 2, 160, :_reduce_362, - 1, 260, :_reduce_none, - 1, 260, :_reduce_none, - 1, 272, :_reduce_365, - 3, 272, :_reduce_366, - 1, 275, :_reduce_367, - 3, 275, :_reduce_368, - 1, 274, :_reduce_none, - 3, 274, :_reduce_370, - 5, 274, :_reduce_371, - 1, 274, :_reduce_372, - 3, 274, :_reduce_373, - 2, 276, :_reduce_374, - 1, 276, :_reduce_375, - 1, 277, :_reduce_none, - 1, 277, :_reduce_none, - 4, 280, :_reduce_378, - 2, 280, :_reduce_379, - 2, 280, :_reduce_380, - 1, 280, :_reduce_381, - 2, 284, :_reduce_382, - 0, 284, :_reduce_383, - 1, 285, :_reduce_none, - 6, 286, :_reduce_385, - 8, 286, :_reduce_386, - 4, 286, :_reduce_387, - 6, 286, :_reduce_388, - 4, 286, :_reduce_389, - 2, 286, :_reduce_none, - 6, 286, :_reduce_391, - 2, 286, :_reduce_392, - 4, 286, :_reduce_393, - 6, 286, :_reduce_394, - 2, 286, :_reduce_395, - 4, 286, :_reduce_396, - 2, 286, :_reduce_397, - 4, 286, :_reduce_398, - 1, 286, :_reduce_none, - 0, 290, :_reduce_400, - 1, 290, :_reduce_401, - 3, 291, :_reduce_402, - 4, 291, :_reduce_403, - 1, 292, :_reduce_404, - 4, 292, :_reduce_405, - 1, 293, :_reduce_406, - 3, 293, :_reduce_407, - 1, 294, :_reduce_408, - 1, 294, :_reduce_none, - 0, 298, :_reduce_410, - 0, 299, :_reduce_411, - 5, 255, :_reduce_412, - 4, 296, :_reduce_413, - 1, 296, :_reduce_414, - 0, 302, :_reduce_415, - 4, 297, :_reduce_416, - 0, 303, :_reduce_417, - 4, 297, :_reduce_418, - 0, 305, :_reduce_419, - 4, 301, :_reduce_420, - 2, 200, :_reduce_421, - 4, 200, :_reduce_422, - 5, 200, :_reduce_423, - 5, 200, :_reduce_424, - 2, 254, :_reduce_425, - 4, 254, :_reduce_426, - 4, 254, :_reduce_427, - 3, 254, :_reduce_428, - 3, 254, :_reduce_429, - 3, 254, :_reduce_430, - 2, 254, :_reduce_431, - 1, 254, :_reduce_432, - 4, 254, :_reduce_433, - 0, 307, :_reduce_434, - 4, 253, :_reduce_435, - 0, 308, :_reduce_436, - 4, 253, :_reduce_437, - 0, 309, :_reduce_438, - 3, 204, :_reduce_439, - 0, 310, :_reduce_440, - 0, 311, :_reduce_441, - 4, 304, :_reduce_442, - 5, 258, :_reduce_443, - 1, 312, :_reduce_444, - 1, 312, :_reduce_none, - 0, 315, :_reduce_446, - 0, 316, :_reduce_447, - 7, 259, :_reduce_448, - 1, 314, :_reduce_449, - 1, 314, :_reduce_none, - 1, 313, :_reduce_451, - 3, 313, :_reduce_452, - 3, 313, :_reduce_453, - 1, 317, :_reduce_none, - 2, 317, :_reduce_455, - 3, 317, :_reduce_456, - 1, 317, :_reduce_457, - 1, 317, :_reduce_458, - 1, 317, :_reduce_459, - 1, 184, :_reduce_none, - 3, 322, :_reduce_461, - 1, 322, :_reduce_none, - 3, 324, :_reduce_463, - 1, 324, :_reduce_none, - 1, 326, :_reduce_465, - 1, 327, :_reduce_466, - 1, 325, :_reduce_none, - 4, 325, :_reduce_468, - 4, 325, :_reduce_469, - 4, 325, :_reduce_470, - 3, 325, :_reduce_471, - 4, 325, :_reduce_472, - 4, 325, :_reduce_473, - 4, 325, :_reduce_474, - 3, 325, :_reduce_475, - 3, 325, :_reduce_476, - 3, 325, :_reduce_477, - 2, 325, :_reduce_478, - 0, 331, :_reduce_479, - 4, 325, :_reduce_480, - 2, 325, :_reduce_481, - 0, 332, :_reduce_482, - 4, 325, :_reduce_483, - 1, 318, :_reduce_484, - 1, 318, :_reduce_485, - 2, 318, :_reduce_486, - 3, 318, :_reduce_487, - 5, 318, :_reduce_488, - 2, 318, :_reduce_489, - 4, 318, :_reduce_490, - 1, 318, :_reduce_none, - 2, 333, :_reduce_492, - 3, 333, :_reduce_493, - 1, 320, :_reduce_494, - 3, 320, :_reduce_495, - 5, 319, :_reduce_496, - 2, 336, :_reduce_497, - 1, 336, :_reduce_498, - 1, 335, :_reduce_499, - 3, 335, :_reduce_500, - 1, 334, :_reduce_none, - 3, 321, :_reduce_502, - 1, 321, :_reduce_503, - 2, 321, :_reduce_504, - 1, 321, :_reduce_505, - 1, 337, :_reduce_506, - 3, 337, :_reduce_507, - 2, 339, :_reduce_508, - 1, 339, :_reduce_509, - 1, 340, :_reduce_510, - 3, 340, :_reduce_511, - 2, 342, :_reduce_512, - 1, 342, :_reduce_513, - 2, 344, :_reduce_514, - 1, 338, :_reduce_none, - 1, 338, :_reduce_none, - 1, 328, :_reduce_none, - 3, 328, :_reduce_518, - 3, 328, :_reduce_519, - 2, 328, :_reduce_520, - 2, 328, :_reduce_521, - 1, 328, :_reduce_none, - 1, 328, :_reduce_none, - 1, 328, :_reduce_none, - 2, 328, :_reduce_525, - 2, 328, :_reduce_526, - 1, 345, :_reduce_none, - 1, 345, :_reduce_none, - 1, 345, :_reduce_none, - 1, 345, :_reduce_none, - 1, 345, :_reduce_none, - 1, 345, :_reduce_none, - 1, 345, :_reduce_none, - 1, 345, :_reduce_none, - 1, 345, :_reduce_535, - 1, 345, :_reduce_none, - 1, 323, :_reduce_537, - 2, 346, :_reduce_538, - 2, 329, :_reduce_539, - 3, 329, :_reduce_540, - 1, 329, :_reduce_541, - 6, 159, :_reduce_542, - 0, 159, :_reduce_543, - 1, 347, :_reduce_544, - 1, 347, :_reduce_none, - 1, 347, :_reduce_none, - 2, 348, :_reduce_547, - 1, 348, :_reduce_none, - 2, 161, :_reduce_549, - 1, 161, :_reduce_none, - 1, 243, :_reduce_none, - 1, 243, :_reduce_none, - 1, 244, :_reduce_553, - 1, 350, :_reduce_554, - 2, 350, :_reduce_555, - 3, 351, :_reduce_556, - 1, 351, :_reduce_557, - 1, 351, :_reduce_558, - 3, 245, :_reduce_559, - 4, 246, :_reduce_560, - 3, 247, :_reduce_561, - 0, 354, :_reduce_562, - 3, 354, :_reduce_563, - 1, 355, :_reduce_564, - 2, 355, :_reduce_565, - 3, 249, :_reduce_566, - 0, 357, :_reduce_567, - 3, 357, :_reduce_568, - 3, 248, :_reduce_569, - 3, 250, :_reduce_570, - 0, 358, :_reduce_571, - 3, 358, :_reduce_572, - 0, 359, :_reduce_573, - 3, 359, :_reduce_574, - 0, 341, :_reduce_575, - 2, 341, :_reduce_576, - 0, 352, :_reduce_577, - 2, 352, :_reduce_578, - 0, 353, :_reduce_579, - 2, 353, :_reduce_580, - 1, 356, :_reduce_581, - 2, 356, :_reduce_582, - 0, 361, :_reduce_583, - 4, 356, :_reduce_584, - 1, 360, :_reduce_585, - 1, 360, :_reduce_586, - 1, 360, :_reduce_587, - 1, 360, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 362, :_reduce_591, - 3, 363, :_reduce_592, - 1, 349, :_reduce_593, - 2, 349, :_reduce_594, - 1, 226, :_reduce_595, - 1, 226, :_reduce_596, - 1, 226, :_reduce_597, - 1, 226, :_reduce_598, - 1, 217, :_reduce_599, - 1, 217, :_reduce_600, - 1, 217, :_reduce_601, - 1, 217, :_reduce_602, - 1, 217, :_reduce_603, - 1, 218, :_reduce_604, - 1, 218, :_reduce_605, - 1, 218, :_reduce_606, - 1, 218, :_reduce_607, - 1, 218, :_reduce_608, - 1, 218, :_reduce_609, - 1, 218, :_reduce_610, - 1, 251, :_reduce_611, - 1, 251, :_reduce_612, - 1, 176, :_reduce_613, - 1, 176, :_reduce_614, - 1, 181, :_reduce_615, - 1, 181, :_reduce_616, - 0, 364, :_reduce_617, - 4, 262, :_reduce_618, - 0, 262, :_reduce_619, - 1, 228, :_reduce_none, - 1, 228, :_reduce_621, - 3, 365, :_reduce_622, - 5, 365, :_reduce_623, - 3, 365, :_reduce_624, - 1, 265, :_reduce_none, - 0, 367, :_reduce_626, - 3, 265, :_reduce_627, - 4, 366, :_reduce_628, - 2, 366, :_reduce_629, - 2, 366, :_reduce_630, - 1, 366, :_reduce_631, - 2, 369, :_reduce_632, - 0, 369, :_reduce_633, - 6, 300, :_reduce_634, - 8, 300, :_reduce_635, - 4, 300, :_reduce_636, - 6, 300, :_reduce_637, - 4, 300, :_reduce_638, - 6, 300, :_reduce_639, - 2, 300, :_reduce_640, - 4, 300, :_reduce_641, - 6, 300, :_reduce_642, - 2, 300, :_reduce_643, - 4, 300, :_reduce_644, - 2, 300, :_reduce_645, - 4, 300, :_reduce_646, - 1, 300, :_reduce_647, - 0, 300, :_reduce_648, - 1, 238, :_reduce_649, - 1, 295, :_reduce_650, - 1, 295, :_reduce_651, - 1, 295, :_reduce_652, - 1, 295, :_reduce_653, - 1, 273, :_reduce_none, - 1, 273, :_reduce_655, - 1, 371, :_reduce_656, - 1, 372, :_reduce_657, - 3, 372, :_reduce_658, - 1, 287, :_reduce_659, - 3, 287, :_reduce_660, - 1, 373, :_reduce_661, - 2, 374, :_reduce_662, - 1, 374, :_reduce_663, - 2, 375, :_reduce_664, - 1, 375, :_reduce_665, - 1, 281, :_reduce_666, - 3, 281, :_reduce_667, - 1, 368, :_reduce_668, - 3, 368, :_reduce_669, - 1, 343, :_reduce_none, - 1, 343, :_reduce_none, - 2, 279, :_reduce_672, - 2, 278, :_reduce_673, - 1, 278, :_reduce_674, - 3, 376, :_reduce_675, - 3, 377, :_reduce_676, - 1, 288, :_reduce_677, - 3, 288, :_reduce_678, - 1, 370, :_reduce_679, - 3, 370, :_reduce_680, - 1, 378, :_reduce_none, - 1, 378, :_reduce_none, - 2, 289, :_reduce_683, - 1, 289, :_reduce_684, - 1, 379, :_reduce_none, - 1, 379, :_reduce_none, - 2, 283, :_reduce_687, - 2, 282, :_reduce_688, - 0, 282, :_reduce_689, - 1, 195, :_reduce_none, - 3, 195, :_reduce_691, - 0, 252, :_reduce_692, - 2, 252, :_reduce_none, - 1, 236, :_reduce_694, - 3, 236, :_reduce_695, - 3, 380, :_reduce_696, - 2, 380, :_reduce_697, - 4, 380, :_reduce_698, - 2, 380, :_reduce_699, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 207, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 201, :_reduce_none, - 1, 306, :_reduce_none, - 1, 306, :_reduce_none, - 1, 306, :_reduce_none, - 1, 196, :_reduce_none, - 1, 196, :_reduce_none, - 1, 180, :_reduce_712, - 1, 180, :_reduce_713, - 0, 152, :_reduce_none, - 1, 152, :_reduce_none, - 0, 182, :_reduce_none, - 1, 182, :_reduce_none, - 2, 212, :_reduce_718, - 2, 179, :_reduce_719, - 2, 330, :_reduce_720, - 0, 235, :_reduce_none, - 1, 235, :_reduce_none, - 1, 235, :_reduce_none, - 1, 263, :_reduce_724, - 1, 263, :_reduce_none, - 1, 154, :_reduce_none, - 2, 154, :_reduce_none, - 0, 233, :_reduce_728 ] - -racc_reduce_n = 729 - -racc_shift_n = 1219 - -racc_token_table = { - false => 0, - :error => 1, - :kCLASS => 2, - :kMODULE => 3, - :kDEF => 4, - :kUNDEF => 5, - :kBEGIN => 6, - :kRESCUE => 7, - :kENSURE => 8, - :kEND => 9, - :kIF => 10, - :kUNLESS => 11, - :kTHEN => 12, - :kELSIF => 13, - :kELSE => 14, - :kCASE => 15, - :kWHEN => 16, - :kWHILE => 17, - :kUNTIL => 18, - :kFOR => 19, - :kBREAK => 20, - :kNEXT => 21, - :kREDO => 22, - :kRETRY => 23, - :kIN => 24, - :kDO => 25, - :kDO_COND => 26, - :kDO_BLOCK => 27, - :kDO_LAMBDA => 28, - :kRETURN => 29, - :kYIELD => 30, - :kSUPER => 31, - :kSELF => 32, - :kNIL => 33, - :kTRUE => 34, - :kFALSE => 35, - :kAND => 36, - :kOR => 37, - :kNOT => 38, - :kIF_MOD => 39, - :kUNLESS_MOD => 40, - :kWHILE_MOD => 41, - :kUNTIL_MOD => 42, - :kRESCUE_MOD => 43, - :kALIAS => 44, - :kDEFINED => 45, - :klBEGIN => 46, - :klEND => 47, - :k__LINE__ => 48, - :k__FILE__ => 49, - :k__ENCODING__ => 50, - :tIDENTIFIER => 51, - :tFID => 52, - :tGVAR => 53, - :tIVAR => 54, - :tCONSTANT => 55, - :tLABEL => 56, - :tCVAR => 57, - :tNTH_REF => 58, - :tBACK_REF => 59, - :tSTRING_CONTENT => 60, - :tINTEGER => 61, - :tFLOAT => 62, - :tUPLUS => 63, - :tUMINUS => 64, - :tUNARY_NUM => 65, - :tPOW => 66, - :tCMP => 67, - :tEQ => 68, - :tEQQ => 69, - :tNEQ => 70, - :tGEQ => 71, - :tLEQ => 72, - :tANDOP => 73, - :tOROP => 74, - :tMATCH => 75, - :tNMATCH => 76, - :tDOT => 77, - :tDOT2 => 78, - :tDOT3 => 79, - :tAREF => 80, - :tASET => 81, - :tLSHFT => 82, - :tRSHFT => 83, - :tCOLON2 => 84, - :tCOLON3 => 85, - :tOP_ASGN => 86, - :tASSOC => 87, - :tLPAREN => 88, - :tLPAREN2 => 89, - :tRPAREN => 90, - :tLPAREN_ARG => 91, - :tLBRACK => 92, - :tLBRACK2 => 93, - :tRBRACK => 94, - :tLBRACE => 95, - :tLBRACE_ARG => 96, - :tSTAR => 97, - :tSTAR2 => 98, - :tAMPER => 99, - :tAMPER2 => 100, - :tTILDE => 101, - :tPERCENT => 102, - :tDIVIDE => 103, - :tDSTAR => 104, - :tPLUS => 105, - :tMINUS => 106, - :tLT => 107, - :tGT => 108, - :tPIPE => 109, - :tBANG => 110, - :tCARET => 111, - :tLCURLY => 112, - :tRCURLY => 113, - :tBACK_REF2 => 114, - :tSYMBEG => 115, - :tSTRING_BEG => 116, - :tXSTRING_BEG => 117, - :tREGEXP_BEG => 118, - :tREGEXP_OPT => 119, - :tWORDS_BEG => 120, - :tQWORDS_BEG => 121, - :tSYMBOLS_BEG => 122, - :tQSYMBOLS_BEG => 123, - :tSTRING_DBEG => 124, - :tSTRING_DVAR => 125, - :tSTRING_END => 126, - :tSTRING_DEND => 127, - :tSTRING => 128, - :tSYMBOL => 129, - :tNL => 130, - :tEH => 131, - :tCOLON => 132, - :tCOMMA => 133, - :tSPACE => 134, - :tSEMI => 135, - :tLAMBDA => 136, - :tLAMBEG => 137, - :tCHARACTER => 138, - :tRATIONAL => 139, - :tIMAGINARY => 140, - :tLABEL_END => 141, - :tANDDOT => 142, - :tBDOT2 => 143, - :tBDOT3 => 144, - :tEQL => 145, - :tLOWEST => 146 } - -racc_nt_base = 147 - -racc_use_result_var = true - -Racc_arg = [ - racc_action_table, - racc_action_check, - racc_action_default, - racc_action_pointer, - racc_goto_table, - racc_goto_check, - racc_goto_default, - racc_goto_pointer, - racc_nt_base, - racc_reduce_table, - racc_token_table, - racc_shift_n, - racc_reduce_n, - racc_use_result_var ] -Ractor.make_shareable(Racc_arg) if defined?(Ractor) - -Racc_token_to_s_table = [ - "$end", - "error", - "kCLASS", - "kMODULE", - "kDEF", - "kUNDEF", - "kBEGIN", - "kRESCUE", - "kENSURE", - "kEND", - "kIF", - "kUNLESS", - "kTHEN", - "kELSIF", - "kELSE", - "kCASE", - "kWHEN", - "kWHILE", - "kUNTIL", - "kFOR", - "kBREAK", - "kNEXT", - "kREDO", - "kRETRY", - "kIN", - "kDO", - "kDO_COND", - "kDO_BLOCK", - "kDO_LAMBDA", - "kRETURN", - "kYIELD", - "kSUPER", - "kSELF", - "kNIL", - "kTRUE", - "kFALSE", - "kAND", - "kOR", - "kNOT", - "kIF_MOD", - "kUNLESS_MOD", - "kWHILE_MOD", - "kUNTIL_MOD", - "kRESCUE_MOD", - "kALIAS", - "kDEFINED", - "klBEGIN", - "klEND", - "k__LINE__", - "k__FILE__", - "k__ENCODING__", - "tIDENTIFIER", - "tFID", - "tGVAR", - "tIVAR", - "tCONSTANT", - "tLABEL", - "tCVAR", - "tNTH_REF", - "tBACK_REF", - "tSTRING_CONTENT", - "tINTEGER", - "tFLOAT", - "tUPLUS", - "tUMINUS", - "tUNARY_NUM", - "tPOW", - "tCMP", - "tEQ", - "tEQQ", - "tNEQ", - "tGEQ", - "tLEQ", - "tANDOP", - "tOROP", - "tMATCH", - "tNMATCH", - "tDOT", - "tDOT2", - "tDOT3", - "tAREF", - "tASET", - "tLSHFT", - "tRSHFT", - "tCOLON2", - "tCOLON3", - "tOP_ASGN", - "tASSOC", - "tLPAREN", - "tLPAREN2", - "tRPAREN", - "tLPAREN_ARG", - "tLBRACK", - "tLBRACK2", - "tRBRACK", - "tLBRACE", - "tLBRACE_ARG", - "tSTAR", - "tSTAR2", - "tAMPER", - "tAMPER2", - "tTILDE", - "tPERCENT", - "tDIVIDE", - "tDSTAR", - "tPLUS", - "tMINUS", - "tLT", - "tGT", - "tPIPE", - "tBANG", - "tCARET", - "tLCURLY", - "tRCURLY", - "tBACK_REF2", - "tSYMBEG", - "tSTRING_BEG", - "tXSTRING_BEG", - "tREGEXP_BEG", - "tREGEXP_OPT", - "tWORDS_BEG", - "tQWORDS_BEG", - "tSYMBOLS_BEG", - "tQSYMBOLS_BEG", - "tSTRING_DBEG", - "tSTRING_DVAR", - "tSTRING_END", - "tSTRING_DEND", - "tSTRING", - "tSYMBOL", - "tNL", - "tEH", - "tCOLON", - "tCOMMA", - "tSPACE", - "tSEMI", - "tLAMBDA", - "tLAMBEG", - "tCHARACTER", - "tRATIONAL", - "tIMAGINARY", - "tLABEL_END", - "tANDDOT", - "tBDOT2", - "tBDOT3", - "tEQL", - "tLOWEST", - "$start", - "program", - "top_compstmt", - "@1", - "top_stmts", - "opt_terms", - "top_stmt", - "terms", - "stmt", - "begin_block", - "bodystmt", - "compstmt", - "opt_rescue", - "opt_else", - "opt_ensure", - "stmts", - "stmt_or_begin", - "fitem", - "undef_list", - "expr_value", - "command_asgn", - "mlhs", - "command_call", - "lhs", - "mrhs", - "mrhs_arg", - "expr", - "@2", - "command_rhs", - "var_lhs", - "primary_value", - "opt_call_args", - "rbracket", - "call_op", - "backref", - "opt_nl", - "arg", - "p_expr", - "@3", - "@4", - "expr_value_do", - "do", - "def_name", - "@5", - "fname", - "defn_head", - "k_def", - "defs_head", - "singleton", - "dot_or_colon", - "@6", - "command", - "block_command", - "block_call", - "operation2", - "command_args", - "cmd_brace_block", - "brace_body", - "fcall", - "@7", - "operation", - "k_return", - "call_args", - "mlhs_basic", - "mlhs_inner", - "rparen", - "mlhs_head", - "mlhs_item", - "mlhs_node", - "mlhs_post", - "user_variable", - "keyword_variable", - "cname", - "cpath", - "op", - "reswords", - "symbol", - "@8", - "arg_rhs", - "simple_numeric", - "rel_expr", - "f_opt_paren_args", - "primary", - "relop", - "arg_value", - "aref_args", - "none", - "args", - "trailer", - "assocs", - "paren_args", - "args_forward", - "opt_paren_args", - "opt_block_arg", - "block_arg", - "@9", - "literal", - "strings", - "xstring", - "regexp", - "words", - "qwords", - "symbols", - "qsymbols", - "var_ref", - "assoc_list", - "brace_block", - "method_call", - "lambda", - "then", - "if_tail", - "case_body", - "p_case_body", - "for_var", - "k_class", - "superclass", - "term", - "k_module", - "f_arglist", - "@10", - "@11", - "@12", - "@13", - "@14", - "@15", - "f_marg", - "f_norm_arg", - "f_margs", - "f_marg_list", - "f_rest_marg", - "f_any_kwrest", - "f_kwrest", - "f_no_kwarg", - "block_args_tail", - "f_block_kwarg", - "opt_f_block_arg", - "f_block_arg", - "opt_block_args_tail", - "excessed_comma", - "block_param", - "f_arg", - "f_block_optarg", - "f_rest_arg", - "opt_block_param", - "block_param_def", - "opt_bv_decl", - "bv_decls", - "bvar", - "f_bad_arg", - "f_larglist", - "lambda_body", - "@16", - "@17", - "f_args", - "do_block", - "@18", - "@19", - "do_body", - "@20", - "operation3", - "@21", - "@22", - "@23", - "@24", - "@25", - "cases", - "p_top_expr", - "p_cases", - "@26", - "@27", - "p_top_expr_body", - "p_args", - "p_find", - "p_args_tail", - "p_kwargs", - "p_as", - "p_variable", - "p_alt", - "p_expr_basic", - "p_lparen", - "p_lbracket", - "p_value", - "p_const", - "rbrace", - "@28", - "@29", - "p_args_head", - "p_arg", - "p_args_post", - "p_rest", - "p_kwarg", - "p_any_kwrest", - "p_kw", - "p_kw_label", - "string_contents", - "p_kwrest", - "kwrest_mark", - "p_kwnorest", - "p_primitive", - "p_var_ref", - "exc_list", - "exc_var", - "numeric", - "string", - "string1", - "xstring_contents", - "regexp_contents", - "word_list", - "word", - "string_content", - "symbol_list", - "qword_list", - "qsym_list", - "string_dvar", - "@30", - "ssym", - "dsym", - "@31", - "f_paren_args", - "args_tail", - "@32", - "f_kwarg", - "opt_args_tail", - "f_optarg", - "f_arg_asgn", - "f_arg_item", - "f_label", - "f_kw", - "f_block_kw", - "f_opt", - "f_block_opt", - "restarg_mark", - "blkarg_mark", - "assoc" ] -Ractor.make_shareable(Racc_token_to_s_table) if defined?(Ractor) - -Racc_debug_parser = false - -##### State transition tables end ##### - -# reduce 0 omitted - -def _reduce_1(val, _values, result) - @current_arg_stack.push(nil) - @max_numparam_stack.push(static: true) - - result -end - -def _reduce_2(val, _values, result) - result = val[1] - - @current_arg_stack.pop - @max_numparam_stack.pop - - result -end - -def _reduce_3(val, _values, result) - result = @builder.compstmt(val[0]) - - result -end - -def _reduce_4(val, _values, result) - result = [] - - result -end - -def _reduce_5(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_6(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_7(val, _values, result) - result = [ val[1] ] - - result -end - -# reduce 8 omitted - -def _reduce_9(val, _values, result) - result = @builder.preexe(val[0], *val[1]) - - result -end - -def _reduce_10(val, _values, result) - result = val - - result -end - -def _reduce_11(val, _values, result) - rescue_bodies = val[1] - else_t, else_ = val[2] - ensure_t, ensure_ = val[3] - - if rescue_bodies.empty? && !else_t.nil? - diagnostic :error, :useless_else, nil, else_t - end - - result = @builder.begin_body(val[0], - rescue_bodies, - else_t, else_, - ensure_t, ensure_) - - result -end - -def _reduce_12(val, _values, result) - result = @builder.compstmt(val[0]) - - result -end - -def _reduce_13(val, _values, result) - result = [] - - result -end - -def _reduce_14(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_15(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_16(val, _values, result) - result = [ val[1] ] - - result -end - -# reduce 17 omitted - -def _reduce_18(val, _values, result) - diagnostic :error, :begin_in_method, nil, val[0] - - result -end - -def _reduce_19(val, _values, result) - @lexer.state = :expr_fname - - result -end - -def _reduce_20(val, _values, result) - result = @builder.alias(val[0], val[1], val[3]) - - result -end - -def _reduce_21(val, _values, result) - result = @builder.alias(val[0], - @builder.gvar(val[1]), - @builder.gvar(val[2])) - - result -end - -def _reduce_22(val, _values, result) - result = @builder.alias(val[0], - @builder.gvar(val[1]), - @builder.back_ref(val[2])) - - result -end - -def _reduce_23(val, _values, result) - diagnostic :error, :nth_ref_alias, nil, val[2] - - result -end - -def _reduce_24(val, _values, result) - result = @builder.undef_method(val[0], val[1]) - - result -end - -def _reduce_25(val, _values, result) - result = @builder.condition_mod(val[0], nil, - val[1], val[2]) - - result -end - -def _reduce_26(val, _values, result) - result = @builder.condition_mod(nil, val[0], - val[1], val[2]) - - result -end - -def _reduce_27(val, _values, result) - result = @builder.loop_mod(:while, val[0], val[1], val[2]) - - result -end - -def _reduce_28(val, _values, result) - result = @builder.loop_mod(:until, val[0], val[1], val[2]) - - result -end - -def _reduce_29(val, _values, result) - rescue_body = @builder.rescue_body(val[1], - nil, nil, nil, - nil, val[2]) - - result = @builder.begin_body(val[0], [ rescue_body ]) - - result -end - -def _reduce_30(val, _values, result) - result = @builder.postexe(val[0], val[1], val[2], val[3]) - - result -end - -# reduce 31 omitted - -def _reduce_32(val, _values, result) - result = @builder.multi_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_33(val, _values, result) - result = @builder.assign(val[0], val[1], - @builder.array(nil, val[2], nil)) - - result -end - -def _reduce_34(val, _values, result) - rescue_body = @builder.rescue_body(val[3], - nil, nil, nil, - nil, val[4]) - begin_body = @builder.begin_body(val[2], [ rescue_body ]) - - result = @builder.multi_assign(val[0], val[1], begin_body) - - result -end - -def _reduce_35(val, _values, result) - result = @builder.multi_assign(val[0], val[1], val[2]) - - result -end - -# reduce 36 omitted - -def _reduce_37(val, _values, result) - result = @builder.assign(val[0], val[1], val[2]) - - result -end - -def _reduce_38(val, _values, result) - result = @builder.op_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_39(val, _values, result) - result = @builder.op_assign( - @builder.index( - val[0], val[1], val[2], val[3]), - val[4], val[5]) - - result -end - -def _reduce_40(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_41(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_42(val, _values, result) - const = @builder.const_op_assignable( - @builder.const_fetch(val[0], val[1], val[2])) - result = @builder.op_assign(const, val[3], val[4]) - - result -end - -def _reduce_43(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_44(val, _values, result) - @builder.op_assign(val[0], val[1], val[2]) - - result -end - -# reduce 45 omitted - -def _reduce_46(val, _values, result) - rescue_body = @builder.rescue_body(val[1], - nil, nil, nil, - nil, val[2]) - - result = @builder.begin_body(val[0], [ rescue_body ]) - - result -end - -# reduce 47 omitted - -# reduce 48 omitted - -def _reduce_49(val, _values, result) - result = @builder.logical_op(:and, val[0], val[1], val[2]) - - result -end - -def _reduce_50(val, _values, result) - result = @builder.logical_op(:or, val[0], val[1], val[2]) - - result -end - -def _reduce_51(val, _values, result) - result = @builder.not_op(val[0], nil, val[2], nil) - - result -end - -def _reduce_52(val, _values, result) - result = @builder.not_op(val[0], nil, val[1], nil) - - result -end - -def _reduce_53(val, _values, result) - @lexer.state = :expr_beg - @lexer.command_start = false - @pattern_variables.push - - result = @context.in_kwarg - @context.in_kwarg = true - - result -end - -def _reduce_54(val, _values, result) - @pattern_variables.pop - @context.in_kwarg = val[2] - result = @builder.match_pattern(val[0], val[1], val[3]) - - result -end - -def _reduce_55(val, _values, result) - @lexer.state = :expr_beg - @lexer.command_start = false - @pattern_variables.push - - result = @context.in_kwarg - @context.in_kwarg = true - - result -end - -def _reduce_56(val, _values, result) - @pattern_variables.pop - @context.in_kwarg = val[2] - result = @builder.match_pattern_p(val[0], val[1], val[3]) - - result -end - -# reduce 57 omitted - -# reduce 58 omitted - -def _reduce_59(val, _values, result) - @lexer.cond.push(true) - - result -end - -def _reduce_60(val, _values, result) - @lexer.cond.pop - result = [ val[1], val[2] ] - - result -end - -def _reduce_61(val, _values, result) - local_push - @current_arg_stack.push(nil) - - result = [ val[0], @context.dup ] - @context.in_def = true - - result -end - -def _reduce_62(val, _values, result) - result = [ val[0], val[1] ] - - result -end - -def _reduce_63(val, _values, result) - @lexer.state = :expr_fname - - result -end - -def _reduce_64(val, _values, result) - result = [ val[0], val[1], val[2], val[4] ] - - result -end - -# reduce 65 omitted - -# reduce 66 omitted - -# reduce 67 omitted - -def _reduce_68(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - result -end - -def _reduce_69(val, _values, result) - result = @context.dup - @context.in_block = true - - result -end - -def _reduce_70(val, _values, result) - result = [ val[0], *val[2], val[3] ] - @context.in_block = val[1].in_block - - result -end - -# reduce 71 omitted - -def _reduce_72(val, _values, result) - result = @builder.call_method(nil, nil, val[0], - nil, val[1], nil) - - result -end - -def _reduce_73(val, _values, result) - method_call = @builder.call_method(nil, nil, val[0], - nil, val[1], nil) - - begin_t, args, body, end_t = val[2] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_74(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - result -end - -def _reduce_75(val, _values, result) - method_call = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - begin_t, args, body, end_t = val[4] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_76(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - result -end - -def _reduce_77(val, _values, result) - method_call = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - begin_t, args, body, end_t = val[4] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_78(val, _values, result) - result = @builder.keyword_cmd(:super, val[0], - nil, val[1], nil) - - result -end - -def _reduce_79(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0], - nil, val[1], nil) - - result -end - -def _reduce_80(val, _values, result) - result = @builder.keyword_cmd(:return, val[0], - nil, val[1], nil) - - result -end - -def _reduce_81(val, _values, result) - result = @builder.keyword_cmd(:break, val[0], - nil, val[1], nil) - - result -end - -def _reduce_82(val, _values, result) - result = @builder.keyword_cmd(:next, val[0], - nil, val[1], nil) - - result -end - -def _reduce_83(val, _values, result) - result = @builder.multi_lhs(nil, val[0], nil) - - result -end - -def _reduce_84(val, _values, result) - result = @builder.begin(val[0], val[1], val[2]) - - result -end - -def _reduce_85(val, _values, result) - result = @builder.multi_lhs(nil, val[0], nil) - - result -end - -def _reduce_86(val, _values, result) - result = @builder.multi_lhs(val[0], val[1], val[2]) - - result -end - -# reduce 87 omitted - -def _reduce_88(val, _values, result) - result = val[0]. - push(val[1]) - - result -end - -def _reduce_89(val, _values, result) - result = val[0]. - push(@builder.splat(val[1], val[2])) - - result -end - -def _reduce_90(val, _values, result) - result = val[0]. - push(@builder.splat(val[1], val[2])). - concat(val[4]) - - result -end - -def _reduce_91(val, _values, result) - result = val[0]. - push(@builder.splat(val[1])) - - result -end - -def _reduce_92(val, _values, result) - result = val[0]. - push(@builder.splat(val[1])). - concat(val[3]) - - result -end - -def _reduce_93(val, _values, result) - result = [ @builder.splat(val[0], val[1]) ] - - result -end - -def _reduce_94(val, _values, result) - result = [ @builder.splat(val[0], val[1]), - *val[3] ] - - result -end - -def _reduce_95(val, _values, result) - result = [ @builder.splat(val[0]) ] - - result -end - -def _reduce_96(val, _values, result) - result = [ @builder.splat(val[0]), - *val[2] ] - - result -end - -# reduce 97 omitted - -def _reduce_98(val, _values, result) - result = @builder.begin(val[0], val[1], val[2]) - - result -end - -def _reduce_99(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_100(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_101(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_102(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_103(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_104(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_105(val, _values, result) - result = @builder.index_asgn(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_106(val, _values, result) - if (val[1][0] == :anddot) - diagnostic :error, :csend_in_lhs_of_masgn, nil, val[1] - end - - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_107(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_108(val, _values, result) - if (val[1][0] == :anddot) - diagnostic :error, :csend_in_lhs_of_masgn, nil, val[1] - end - - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_109(val, _values, result) - result = @builder.assignable( - @builder.const_fetch(val[0], val[1], val[2])) - - result -end - -def _reduce_110(val, _values, result) - result = @builder.assignable( - @builder.const_global(val[0], val[1])) - - result -end - -def _reduce_111(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_112(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_113(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_114(val, _values, result) - result = @builder.index_asgn(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_115(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_116(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_117(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_118(val, _values, result) - result = @builder.assignable( - @builder.const_fetch(val[0], val[1], val[2])) - - result -end - -def _reduce_119(val, _values, result) - result = @builder.assignable( - @builder.const_global(val[0], val[1])) - - result -end - -def _reduce_120(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_121(val, _values, result) - diagnostic :error, :module_name_const, nil, val[0] - - result -end - -# reduce 122 omitted - -def _reduce_123(val, _values, result) - result = @builder.const_global(val[0], val[1]) - - result -end - -def _reduce_124(val, _values, result) - result = @builder.const(val[0]) - - result -end - -def _reduce_125(val, _values, result) - result = @builder.const_fetch(val[0], val[1], val[2]) - - result -end - -# reduce 126 omitted - -# reduce 127 omitted - -# reduce 128 omitted - -# reduce 129 omitted - -# reduce 130 omitted - -def _reduce_131(val, _values, result) - result = @builder.symbol_internal(val[0]) - - result -end - -# reduce 132 omitted - -def _reduce_133(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_134(val, _values, result) - @lexer.state = :expr_fname - - result -end - -def _reduce_135(val, _values, result) - result = val[0] << val[3] - - result -end - -# reduce 136 omitted - -# reduce 137 omitted - -# reduce 138 omitted - -# reduce 139 omitted - -# reduce 140 omitted - -# reduce 141 omitted - -# reduce 142 omitted - -# reduce 143 omitted - -# reduce 144 omitted - -# reduce 145 omitted - -# reduce 146 omitted - -# reduce 147 omitted - -# reduce 148 omitted - -# reduce 149 omitted - -# reduce 150 omitted - -# reduce 151 omitted - -# reduce 152 omitted - -# reduce 153 omitted - -# reduce 154 omitted - -# reduce 155 omitted - -# reduce 156 omitted - -# reduce 157 omitted - -# reduce 158 omitted - -# reduce 159 omitted - -# reduce 160 omitted - -# reduce 161 omitted - -# reduce 162 omitted - -# reduce 163 omitted - -# reduce 164 omitted - -# reduce 165 omitted - -# reduce 166 omitted - -# reduce 167 omitted - -# reduce 168 omitted - -# reduce 169 omitted - -# reduce 170 omitted - -# reduce 171 omitted - -# reduce 172 omitted - -# reduce 173 omitted - -# reduce 174 omitted - -# reduce 175 omitted - -# reduce 176 omitted - -# reduce 177 omitted - -# reduce 178 omitted - -# reduce 179 omitted - -# reduce 180 omitted - -# reduce 181 omitted - -# reduce 182 omitted - -# reduce 183 omitted - -# reduce 184 omitted - -# reduce 185 omitted - -# reduce 186 omitted - -# reduce 187 omitted - -# reduce 188 omitted - -# reduce 189 omitted - -# reduce 190 omitted - -# reduce 191 omitted - -# reduce 192 omitted - -# reduce 193 omitted - -# reduce 194 omitted - -# reduce 195 omitted - -# reduce 196 omitted - -# reduce 197 omitted - -# reduce 198 omitted - -# reduce 199 omitted - -# reduce 200 omitted - -# reduce 201 omitted - -# reduce 202 omitted - -# reduce 203 omitted - -# reduce 204 omitted - -# reduce 205 omitted - -# reduce 206 omitted - -def _reduce_207(val, _values, result) - result = @builder.assign(val[0], val[1], val[2]) - - result -end - -def _reduce_208(val, _values, result) - result = @builder.op_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_209(val, _values, result) - result = @builder.op_assign( - @builder.index( - val[0], val[1], val[2], val[3]), - val[4], val[5]) - - result -end - -def _reduce_210(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_211(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_212(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_213(val, _values, result) - const = @builder.const_op_assignable( - @builder.const_fetch(val[0], val[1], val[2])) - result = @builder.op_assign(const, val[3], val[4]) - - result -end - -def _reduce_214(val, _values, result) - const = @builder.const_op_assignable( - @builder.const_global(val[0], val[1])) - result = @builder.op_assign(const, val[2], val[3]) - - result -end - -def _reduce_215(val, _values, result) - result = @builder.op_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_216(val, _values, result) - result = @builder.range_inclusive(val[0], val[1], val[2]) - - result -end - -def _reduce_217(val, _values, result) - result = @builder.range_exclusive(val[0], val[1], val[2]) - - result -end - -def _reduce_218(val, _values, result) - result = @builder.range_inclusive(val[0], val[1], nil) - - result -end - -def _reduce_219(val, _values, result) - result = @builder.range_exclusive(val[0], val[1], nil) - - result -end - -def _reduce_220(val, _values, result) - result = @builder.range_inclusive(nil, val[0], val[1]) - - result -end - -def _reduce_221(val, _values, result) - result = @builder.range_exclusive(nil, val[0], val[1]) - - result -end - -def _reduce_222(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_223(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_224(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_225(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_226(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_227(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_228(val, _values, result) - result = @builder.unary_op(val[0], - @builder.binary_op( - val[1], val[2], val[3])) - - result -end - -def _reduce_229(val, _values, result) - result = @builder.unary_op(val[0], val[1]) - - result -end - -def _reduce_230(val, _values, result) - result = @builder.unary_op(val[0], val[1]) - - result -end - -def _reduce_231(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_232(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_233(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_234(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -# reduce 235 omitted - -def _reduce_236(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_237(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_238(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_239(val, _values, result) - result = @builder.match_op(val[0], val[1], val[2]) - - result -end - -def _reduce_240(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_241(val, _values, result) - result = @builder.not_op(val[0], nil, val[1], nil) - - result -end - -def _reduce_242(val, _values, result) - result = @builder.unary_op(val[0], val[1]) - - result -end - -def _reduce_243(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_244(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_245(val, _values, result) - result = @builder.logical_op(:and, val[0], val[1], val[2]) - - result -end - -def _reduce_246(val, _values, result) - result = @builder.logical_op(:or, val[0], val[1], val[2]) - - result -end - -def _reduce_247(val, _values, result) - result = @builder.keyword_cmd(:defined?, val[0], nil, [ val[2] ], nil) - - result -end - -def _reduce_248(val, _values, result) - result = @builder.ternary(val[0], val[1], - val[2], val[4], val[5]) - - result -end - -def _reduce_249(val, _values, result) - def_t, (name_t, ctx) = val[0] - endless_method_name(name_t) - - result = @builder.def_endless_method(def_t, name_t, - val[1], val[2], val[3]) - - local_pop - @context.in_def = ctx.in_def - @current_arg_stack.pop - - result -end - -def _reduce_250(val, _values, result) - def_t, (name_t, ctx) = val[0] - endless_method_name(name_t) - - rescue_body = @builder.rescue_body(val[4], - nil, nil, nil, - nil, val[5]) - - method_body = @builder.begin_body(val[3], [ rescue_body ]) - - result = @builder.def_endless_method(def_t, name_t, - val[1], val[2], method_body) - - local_pop - @context.in_def = ctx.in_def - @current_arg_stack.pop - - result -end - -def _reduce_251(val, _values, result) - def_t, recv, dot_t, (name_t, ctx) = val[0] - endless_method_name(name_t) - - result = @builder.def_endless_singleton(def_t, recv, dot_t, name_t, - val[1], val[2], val[3]) - - local_pop - @context.in_def = ctx.in_def - @current_arg_stack.pop - - result -end - -def _reduce_252(val, _values, result) - def_t, recv, dot_t, (name_t, ctx) = val[0] - endless_method_name(name_t) - - rescue_body = @builder.rescue_body(val[4], - nil, nil, nil, - nil, val[5]) - - method_body = @builder.begin_body(val[3], [ rescue_body ]) - - result = @builder.def_endless_singleton(def_t, recv, dot_t, name_t, - val[1], val[2], method_body) - - local_pop - @context.in_def = ctx.in_def - @current_arg_stack.pop - - result -end - -# reduce 253 omitted - -# reduce 254 omitted - -# reduce 255 omitted - -# reduce 256 omitted - -# reduce 257 omitted - -def _reduce_258(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_259(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -# reduce 260 omitted - -# reduce 261 omitted - -# reduce 262 omitted - -def _reduce_263(val, _values, result) - result = val[0] << @builder.associate(nil, val[2], nil) - - result -end - -def _reduce_264(val, _values, result) - result = [ @builder.associate(nil, val[0], nil) ] - - result -end - -# reduce 265 omitted - -def _reduce_266(val, _values, result) - rescue_body = @builder.rescue_body(val[1], - nil, nil, nil, - nil, val[2]) - - result = @builder.begin_body(val[0], [ rescue_body ]) - - result -end - -def _reduce_267(val, _values, result) - result = val - - result -end - -def _reduce_268(val, _values, result) - unless @static_env.declared_forward_args? - diagnostic :error, :unexpected_token, { :token => 'tBDOT3' } , val[3] - end - - result = [val[0], [*val[1], @builder.forwarded_args(val[3])], val[4]] - - result -end - -def _reduce_269(val, _values, result) - unless @static_env.declared_forward_args? - diagnostic :error, :unexpected_token, { :token => 'tBDOT3' } , val[1] - end - - result = [val[0], [@builder.forwarded_args(val[1])], val[2]] - - result -end - -def _reduce_270(val, _values, result) - result = [ nil, [], nil ] - - result -end - -# reduce 271 omitted - -def _reduce_272(val, _values, result) - result = [] - - result -end - -# reduce 273 omitted - -# reduce 274 omitted - -def _reduce_275(val, _values, result) - result = val[0] << @builder.associate(nil, val[2], nil) - - result -end - -def _reduce_276(val, _values, result) - result = [ @builder.associate(nil, val[0], nil) ] - - result -end - -def _reduce_277(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_278(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_279(val, _values, result) - result = [ @builder.associate(nil, val[0], nil) ] - result.concat(val[1]) - - result -end - -def _reduce_280(val, _values, result) - assocs = @builder.associate(nil, val[2], nil) - result = val[0] << assocs - result.concat(val[3]) - - result -end - -def _reduce_281(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_282(val, _values, result) - # When branch gets invoked by RACC's lookahead - # and command args start with '[' or '(' - # we need to put `true` to the cmdarg stack - # **before** `false` pushed by lexer - # m [], n - # ^ - # Right here we have cmdarg [...0] because - # lexer pushed it on '[' - # We need to modify cmdarg stack to [...10] - # - # For all other cases (like `m n` or `m n, []`) we simply put 1 to the stack - # and later lexer pushes corresponding bits on top of it. - last_token = @last_token[0] - lookahead = last_token == :tLBRACK || last_token == :tLPAREN_ARG - - if lookahead - top = @lexer.cmdarg.pop - @lexer.cmdarg.push(true) - @lexer.cmdarg.push(top) - else - @lexer.cmdarg.push(true) - end - - result -end - -def _reduce_283(val, _values, result) - # call_args can be followed by tLBRACE_ARG (that does cmdarg.push(0) in the lexer) - # but the push must be done after cmdarg.pop() in the parser. - # So this code does cmdarg.pop() to pop 0 pushed by tLBRACE_ARG, - # cmdarg.pop() to pop 1 pushed by command_args, - # and cmdarg.push(0) to restore back the flag set by tLBRACE_ARG. - last_token = @last_token[0] - lookahead = last_token == :tLBRACE_ARG - if lookahead - top = @lexer.cmdarg.pop - @lexer.cmdarg.pop - @lexer.cmdarg.push(top) - else - @lexer.cmdarg.pop - end - - result = val[1] - - result -end - -def _reduce_284(val, _values, result) - result = @builder.block_pass(val[0], val[1]) - - result -end - -def _reduce_285(val, _values, result) - result = [ val[1] ] - - result -end - -def _reduce_286(val, _values, result) - result = [] - - result -end - -def _reduce_287(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_288(val, _values, result) - result = [ @builder.splat(val[0], val[1]) ] - - result -end - -def _reduce_289(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_290(val, _values, result) - result = val[0] << @builder.splat(val[2], val[3]) - - result -end - -def _reduce_291(val, _values, result) - result = @builder.array(nil, val[0], nil) - - result -end - -# reduce 292 omitted - -def _reduce_293(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_294(val, _values, result) - result = val[0] << @builder.splat(val[2], val[3]) - - result -end - -def _reduce_295(val, _values, result) - result = [ @builder.splat(val[0], val[1]) ] - - result -end - -# reduce 296 omitted - -# reduce 297 omitted - -# reduce 298 omitted - -# reduce 299 omitted - -# reduce 300 omitted - -# reduce 301 omitted - -# reduce 302 omitted - -# reduce 303 omitted - -# reduce 304 omitted - -# reduce 305 omitted - -def _reduce_306(val, _values, result) - result = @builder.call_method(nil, nil, val[0]) - - result -end - -def _reduce_307(val, _values, result) - @lexer.cmdarg.push(false) - - result -end - -def _reduce_308(val, _values, result) - @lexer.cmdarg.pop - - result = @builder.begin_keyword(val[0], val[2], val[3]) - - result -end - -def _reduce_309(val, _values, result) - @lexer.state = :expr_endarg - - result -end - -def _reduce_310(val, _values, result) - result = @builder.begin(val[0], val[1], val[3]) - - result -end - -def _reduce_311(val, _values, result) - @lexer.state = :expr_endarg - - result -end - -def _reduce_312(val, _values, result) - result = @builder.begin(val[0], nil, val[3]) - - result -end - -def _reduce_313(val, _values, result) - result = @builder.begin(val[0], val[1], val[2]) - - result -end - -def _reduce_314(val, _values, result) - result = @builder.const_fetch(val[0], val[1], val[2]) - - result -end - -def _reduce_315(val, _values, result) - result = @builder.const_global(val[0], val[1]) - - result -end - -def _reduce_316(val, _values, result) - result = @builder.array(val[0], val[1], val[2]) - - result -end - -def _reduce_317(val, _values, result) - result = @builder.associate(val[0], val[1], val[2]) - - result -end - -def _reduce_318(val, _values, result) - result = @builder.keyword_cmd(:return, val[0]) - - result -end - -def _reduce_319(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_320(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0], val[1], [], val[2]) - - result -end - -def _reduce_321(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0]) - - result -end - -def _reduce_322(val, _values, result) - result = @builder.keyword_cmd(:defined?, val[0], - val[2], [ val[3] ], val[4]) - - result -end - -def _reduce_323(val, _values, result) - result = @builder.not_op(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_324(val, _values, result) - result = @builder.not_op(val[0], val[1], nil, val[2]) - - result -end - -def _reduce_325(val, _values, result) - method_call = @builder.call_method(nil, nil, val[0]) - - begin_t, args, body, end_t = val[1] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -# reduce 326 omitted - -def _reduce_327(val, _values, result) - begin_t, args, body, end_t = val[1] - result = @builder.block(val[0], - begin_t, args, body, end_t) - - result -end - -# reduce 328 omitted - -def _reduce_329(val, _values, result) - else_t, else_ = val[4] - result = @builder.condition(val[0], val[1], val[2], - val[3], else_t, - else_, val[5]) - - result -end - -def _reduce_330(val, _values, result) - else_t, else_ = val[4] - result = @builder.condition(val[0], val[1], val[2], - else_, else_t, - val[3], val[5]) - - result -end - -def _reduce_331(val, _values, result) - result = @builder.loop(:while, val[0], *val[1], val[2], val[3]) - - result -end - -def _reduce_332(val, _values, result) - result = @builder.loop(:until, val[0], *val[1], val[2], val[3]) - - result -end - -def _reduce_333(val, _values, result) - *when_bodies, (else_t, else_body) = *val[3] - - result = @builder.case(val[0], val[1], - when_bodies, else_t, else_body, - val[4]) - - result -end - -def _reduce_334(val, _values, result) - *when_bodies, (else_t, else_body) = *val[2] - - result = @builder.case(val[0], nil, - when_bodies, else_t, else_body, - val[3]) - - result -end - -def _reduce_335(val, _values, result) - *in_bodies, (else_t, else_body) = *val[3] - - result = @builder.case_match(val[0], val[1], - in_bodies, else_t, else_body, - val[4]) - - result -end - -def _reduce_336(val, _values, result) - result = @builder.for(val[0], val[1], val[2], *val[3], val[4], val[5]) - - result -end - -def _reduce_337(val, _values, result) - @context.in_class = true - local_push - - result -end - -def _reduce_338(val, _values, result) - k_class, ctx = val[0] - if @context.in_def - diagnostic :error, :class_in_def, nil, k_class - end - - lt_t, superclass = val[2] - result = @builder.def_class(k_class, val[1], - lt_t, superclass, - val[4], val[5]) - - local_pop - @context.in_class = ctx.in_class - - result -end - -def _reduce_339(val, _values, result) - @context.in_def = false - @context.in_class = false - local_push - - result -end - -def _reduce_340(val, _values, result) - k_class, ctx = val[0] - result = @builder.def_sclass(k_class, val[1], val[2], - val[5], val[6]) - - local_pop - @context.in_def = ctx.in_def - @context.in_class = ctx.in_class - - result -end - -def _reduce_341(val, _values, result) - @context.in_class = true - local_push - - result -end - -def _reduce_342(val, _values, result) - k_mod, ctx = val[0] - if @context.in_def - diagnostic :error, :module_in_def, nil, k_mod - end - - result = @builder.def_module(k_mod, val[1], - val[3], val[4]) - - local_pop - @context.in_class = ctx.in_class - - result -end - -def _reduce_343(val, _values, result) - def_t, (name_t, ctx) = val[0] - result = @builder.def_method(def_t, name_t, val[1], - val[2], val[3]) - - local_pop - @context.in_def = ctx.in_def - @current_arg_stack.pop - - result -end - -def _reduce_344(val, _values, result) - def_t, recv, dot_t, (name_t, ctx) = val[0] - result = @builder.def_singleton(def_t, recv, dot_t, name_t, val[1], - val[2], val[3]) - - local_pop - @context.in_def = ctx.in_def - @current_arg_stack.pop - - result -end - -def _reduce_345(val, _values, result) - result = @builder.keyword_cmd(:break, val[0]) - - result -end - -def _reduce_346(val, _values, result) - result = @builder.keyword_cmd(:next, val[0]) - - result -end - -def _reduce_347(val, _values, result) - result = @builder.keyword_cmd(:redo, val[0]) - - result -end - -def _reduce_348(val, _values, result) - result = @builder.keyword_cmd(:retry, val[0]) - - result -end - -# reduce 349 omitted - -def _reduce_350(val, _values, result) - result = [ val[0], @context.dup ] - - result -end - -def _reduce_351(val, _values, result) - result = [ val[0], @context.dup ] - - result -end - -def _reduce_352(val, _values, result) - result = val[0] - - result -end - -def _reduce_353(val, _values, result) - if @context.in_class && !@context.in_def && !(context.in_block || context.in_lambda) - diagnostic :error, :invalid_return, nil, val[0] - end - - result -end - -# reduce 354 omitted - -# reduce 355 omitted - -def _reduce_356(val, _values, result) - result = val[1] - - result -end - -# reduce 357 omitted - -# reduce 358 omitted - -# reduce 359 omitted - -def _reduce_360(val, _values, result) - else_t, else_ = val[4] - result = [ val[0], - @builder.condition(val[0], val[1], val[2], - val[3], else_t, - else_, nil), - ] - - result -end - -# reduce 361 omitted - -def _reduce_362(val, _values, result) - result = val - - result -end - -# reduce 363 omitted - -# reduce 364 omitted - -def _reduce_365(val, _values, result) - result = @builder.arg(val[0]) - - result -end - -def _reduce_366(val, _values, result) - result = @builder.multi_lhs(val[0], val[1], val[2]) - - result -end - -def _reduce_367(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_368(val, _values, result) - result = val[0] << val[2] - - result -end - -# reduce 369 omitted - -def _reduce_370(val, _values, result) - result = val[0]. - push(val[2]) - - result -end - -def _reduce_371(val, _values, result) - result = val[0]. - push(val[2]). - concat(val[4]) - - result -end - -def _reduce_372(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_373(val, _values, result) - result = [ val[0], *val[2] ] - - result -end - -def _reduce_374(val, _values, result) - result = @builder.restarg(val[0], val[1]) - - result -end - -def _reduce_375(val, _values, result) - result = @builder.restarg(val[0]) - - result -end - -# reduce 376 omitted - -# reduce 377 omitted - -def _reduce_378(val, _values, result) - result = val[0].concat(val[2]).concat(val[3]) - - result -end - -def _reduce_379(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_380(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_381(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_382(val, _values, result) - result = val[1] - - result -end - -def _reduce_383(val, _values, result) - result = [] - - result -end - -# reduce 384 omitted - -def _reduce_385(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_386(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[6]). - concat(val[7]) - - result -end - -def _reduce_387(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_388(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_389(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -# reduce 390 omitted - -def _reduce_391(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_392(val, _values, result) - if val[1].empty? && val[0].size == 1 - result = [@builder.procarg0(val[0][0])] - else - result = val[0].concat(val[1]) - end - - result -end - -def _reduce_393(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_394(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_395(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_396(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_397(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_398(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -# reduce 399 omitted - -def _reduce_400(val, _values, result) - result = @builder.args(nil, [], nil) - - result -end - -def _reduce_401(val, _values, result) - @lexer.state = :expr_value - - result -end - -def _reduce_402(val, _values, result) - @max_numparam_stack.has_ordinary_params! - @current_arg_stack.set(nil) - result = @builder.args(val[0], val[1], val[2]) - - result -end - -def _reduce_403(val, _values, result) - @max_numparam_stack.has_ordinary_params! - @current_arg_stack.set(nil) - result = @builder.args(val[0], val[1].concat(val[2]), val[3]) - - result -end - -def _reduce_404(val, _values, result) - result = [] - - result -end - -def _reduce_405(val, _values, result) - result = val[2] - - result -end - -def _reduce_406(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_407(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_408(val, _values, result) - @static_env.declare val[0][0] - result = @builder.shadowarg(val[0]) - - result -end - -# reduce 409 omitted - -def _reduce_410(val, _values, result) - @static_env.extend_dynamic - @max_numparam_stack.push(static: false) - result = @context.dup - @context.in_lambda = true - - result -end - -def _reduce_411(val, _values, result) - @lexer.cmdarg.push(false) - - result -end - -def _reduce_412(val, _values, result) - lambda_call = @builder.call_lambda(val[0]) - args = @max_numparam_stack.has_numparams? ? @builder.numargs(@max_numparam_stack.top) : val[2] - begin_t, body, end_t = val[4] - - @max_numparam_stack.pop - @static_env.unextend - @lexer.cmdarg.pop - @context.in_lambda = val[1].in_lambda - - result = @builder.block(lambda_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_413(val, _values, result) - @max_numparam_stack.has_ordinary_params! - result = @builder.args(val[0], val[1].concat(val[2]), val[3]) - - result -end - -def _reduce_414(val, _values, result) - if val[0].any? - @max_numparam_stack.has_ordinary_params! - end - result = @builder.args(nil, val[0], nil) - - result -end - -def _reduce_415(val, _values, result) - result = @context.dup - @context.in_lambda = true - - result -end - -def _reduce_416(val, _values, result) - result = [ val[0], val[2], val[3] ] - @context.in_lambda = val[1].in_lambda - - result -end - -def _reduce_417(val, _values, result) - result = @context.dup - @context.in_lambda = true - - result -end - -def _reduce_418(val, _values, result) - result = [ val[0], val[2], val[3] ] - @context.in_lambda = val[1].in_lambda - - result -end - -def _reduce_419(val, _values, result) - result = @context.dup - @context.in_block = true - - result -end - -def _reduce_420(val, _values, result) - result = [ val[0], *val[2], val[3] ] - @context.in_block = val[1].in_block - - result -end - -def _reduce_421(val, _values, result) - begin_t, block_args, body, end_t = val[1] - result = @builder.block(val[0], - begin_t, block_args, body, end_t) - - result -end - -def _reduce_422(val, _values, result) - lparen_t, args, rparen_t = val[3] - result = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - result -end - -def _reduce_423(val, _values, result) - lparen_t, args, rparen_t = val[3] - method_call = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - begin_t, args, body, end_t = val[4] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_424(val, _values, result) - method_call = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - begin_t, args, body, end_t = val[4] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_425(val, _values, result) - lparen_t, args, rparen_t = val[1] - result = @builder.call_method(nil, nil, val[0], - lparen_t, args, rparen_t) - - result -end - -def _reduce_426(val, _values, result) - lparen_t, args, rparen_t = val[3] - result = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - result -end - -def _reduce_427(val, _values, result) - lparen_t, args, rparen_t = val[3] - result = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - result -end - -def _reduce_428(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2]) - - result -end - -def _reduce_429(val, _values, result) - lparen_t, args, rparen_t = val[2] - result = @builder.call_method(val[0], val[1], nil, - lparen_t, args, rparen_t) - - result -end - -def _reduce_430(val, _values, result) - lparen_t, args, rparen_t = val[2] - result = @builder.call_method(val[0], val[1], nil, - lparen_t, args, rparen_t) - - result -end - -def _reduce_431(val, _values, result) - lparen_t, args, rparen_t = val[1] - result = @builder.keyword_cmd(:super, val[0], - lparen_t, args, rparen_t) - - result -end - -def _reduce_432(val, _values, result) - result = @builder.keyword_cmd(:zsuper, val[0]) - - result -end - -def _reduce_433(val, _values, result) - result = @builder.index(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_434(val, _values, result) - result = @context.dup - @context.in_block = true - - result -end - -def _reduce_435(val, _values, result) - result = [ val[0], *val[2], val[3] ] - @context.in_block = val[1].in_block - - result -end - -def _reduce_436(val, _values, result) - result = @context.dup - @context.in_block = true - - result -end - -def _reduce_437(val, _values, result) - result = [ val[0], *val[2], val[3] ] - @context.in_block = val[1].in_block - - result -end - -def _reduce_438(val, _values, result) - @static_env.extend_dynamic - @max_numparam_stack.push(static: false) - - result -end - -def _reduce_439(val, _values, result) - args = @max_numparam_stack.has_numparams? ? @builder.numargs(@max_numparam_stack.top) : val[1] - result = [ args, val[2] ] - - @max_numparam_stack.pop - @static_env.unextend - - result -end - -def _reduce_440(val, _values, result) - @static_env.extend_dynamic - @max_numparam_stack.push(static: false) - - result -end - -def _reduce_441(val, _values, result) - @lexer.cmdarg.push(false) - - result -end - -def _reduce_442(val, _values, result) - args = @max_numparam_stack.has_numparams? ? @builder.numargs(@max_numparam_stack.top) : val[2] - result = [ args, val[3] ] - - @max_numparam_stack.pop - @static_env.unextend - @lexer.cmdarg.pop - - result -end - -def _reduce_443(val, _values, result) - result = [ @builder.when(val[0], val[1], val[2], val[3]), - *val[4] ] - - result -end - -def _reduce_444(val, _values, result) - result = [ val[0] ] - - result -end - -# reduce 445 omitted - -def _reduce_446(val, _values, result) - @lexer.state = :expr_beg - @lexer.command_start = false - @pattern_variables.push - @pattern_hash_keys.push - - result = @context.in_kwarg - @context.in_kwarg = true - - result -end - -def _reduce_447(val, _values, result) - @pattern_variables.pop - @pattern_hash_keys.pop - @context.in_kwarg = val[1] - - result -end - -def _reduce_448(val, _values, result) - result = [ @builder.in_pattern(val[0], *val[2], val[3], val[5]), - *val[6] ] - - result -end - -def _reduce_449(val, _values, result) - result = [ val[0] ] - - result -end - -# reduce 450 omitted - -def _reduce_451(val, _values, result) - result = [ val[0], nil ] - - result -end - -def _reduce_452(val, _values, result) - result = [ val[0], @builder.if_guard(val[1], val[2]) ] - - result -end - -def _reduce_453(val, _values, result) - result = [ val[0], @builder.unless_guard(val[1], val[2]) ] - - result -end - -# reduce 454 omitted - -def _reduce_455(val, _values, result) - # array patterns that end with comma - # like 1, 2, - # must be emitted as `array_pattern_with_tail` - item = @builder.match_with_trailing_comma(val[0], val[1]) - result = @builder.array_pattern(nil, [ item ], nil) - - result -end - -def _reduce_456(val, _values, result) - result = @builder.array_pattern(nil, [val[0]].concat(val[2]), nil) - - result -end - -def _reduce_457(val, _values, result) - result = @builder.find_pattern(nil, val[0], nil) - - result -end - -def _reduce_458(val, _values, result) - result = @builder.array_pattern(nil, val[0], nil) - - result -end - -def _reduce_459(val, _values, result) - result = @builder.hash_pattern(nil, val[0], nil) - - result -end - -# reduce 460 omitted - -def _reduce_461(val, _values, result) - result = @builder.match_as(val[0], val[1], val[2]) - - result -end - -# reduce 462 omitted - -def _reduce_463(val, _values, result) - result = @builder.match_alt(val[0], val[1], val[2]) - - result -end - -# reduce 464 omitted - -def _reduce_465(val, _values, result) - result = val[0] - @pattern_hash_keys.push - - result -end - -def _reduce_466(val, _values, result) - result = val[0] - @pattern_hash_keys.push - - result -end - -# reduce 467 omitted - -def _reduce_468(val, _values, result) - @pattern_hash_keys.pop - pattern = @builder.array_pattern(nil, val[2], nil) - result = @builder.const_pattern(val[0], val[1], pattern, val[3]) - - result -end - -def _reduce_469(val, _values, result) - @pattern_hash_keys.pop - pattern = @builder.find_pattern(nil, val[2], nil) - result = @builder.const_pattern(val[0], val[1], pattern, val[3]) - - result -end - -def _reduce_470(val, _values, result) - @pattern_hash_keys.pop - pattern = @builder.hash_pattern(nil, val[2], nil) - result = @builder.const_pattern(val[0], val[1], pattern, val[3]) - - result -end - -def _reduce_471(val, _values, result) - pattern = @builder.array_pattern(val[1], nil, val[2]) - result = @builder.const_pattern(val[0], val[1], pattern, val[2]) - - result -end - -def _reduce_472(val, _values, result) - @pattern_hash_keys.pop - pattern = @builder.array_pattern(nil, val[2], nil) - result = @builder.const_pattern(val[0], val[1], pattern, val[3]) - - result -end - -def _reduce_473(val, _values, result) - @pattern_hash_keys.pop - pattern = @builder.find_pattern(nil, val[2], nil) - result = @builder.const_pattern(val[0], val[1], pattern, val[3]) - - result -end - -def _reduce_474(val, _values, result) - @pattern_hash_keys.pop - pattern = @builder.hash_pattern(nil, val[2], nil) - result = @builder.const_pattern(val[0], val[1], pattern, val[3]) - - result -end - -def _reduce_475(val, _values, result) - pattern = @builder.array_pattern(val[1], nil, val[2]) - result = @builder.const_pattern(val[0], val[1], pattern, val[2]) - - result -end - -def _reduce_476(val, _values, result) - result = @builder.array_pattern(val[0], val[1], val[2]) - - result -end - -def _reduce_477(val, _values, result) - result = @builder.find_pattern(val[0], val[1], val[2]) - - result -end - -def _reduce_478(val, _values, result) - result = @builder.array_pattern(val[0], [], val[1]) - - result -end - -def _reduce_479(val, _values, result) - @pattern_hash_keys.push - result = @context.in_kwarg - @context.in_kwarg = false - - result -end - -def _reduce_480(val, _values, result) - @pattern_hash_keys.pop - @context.in_kwarg = val[1] - result = @builder.hash_pattern(val[0], val[2], val[3]) - - result -end - -def _reduce_481(val, _values, result) - result = @builder.hash_pattern(val[0], [], val[1]) - - result -end - -def _reduce_482(val, _values, result) - @pattern_hash_keys.push - - result -end - -def _reduce_483(val, _values, result) - @pattern_hash_keys.pop - result = @builder.begin(val[0], val[2], val[3]) - - result -end - -def _reduce_484(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_485(val, _values, result) - result = val[0] - - result -end - -def _reduce_486(val, _values, result) - result = [ *val[0], val[1] ] - - result -end - -def _reduce_487(val, _values, result) - match_rest = @builder.match_rest(val[1], val[2]) - result = [ *val[0], match_rest ] - - result -end - -def _reduce_488(val, _values, result) - match_rest = @builder.match_rest(val[1], val[2]) - result = [ *val[0], match_rest, *val[4] ] - - result -end - -def _reduce_489(val, _values, result) - result = [ *val[0], @builder.match_rest(val[1]) ] - - result -end - -def _reduce_490(val, _values, result) - result = [ *val[0], @builder.match_rest(val[1]), *val[3] ] - - result -end - -# reduce 491 omitted - -def _reduce_492(val, _values, result) - # array patterns that end with comma - # like [1, 2,] - # must be emitted as `array_pattern_with_tail` - item = @builder.match_with_trailing_comma(val[0], val[1]) - result = [ item ] - - result -end - -def _reduce_493(val, _values, result) - # array patterns that end with comma - # like [1, 2,] - # must be emitted as `array_pattern_with_tail` - last_item = @builder.match_with_trailing_comma(val[1], val[2]) - result = [ *val[0], last_item ] - - result -end - -def _reduce_494(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_495(val, _values, result) - result = [ val[0], *val[2] ] - - result -end - -def _reduce_496(val, _values, result) - result = [ val[0], *val[2], val[4] ] - - result -end - -def _reduce_497(val, _values, result) - result = @builder.match_rest(val[0], val[1]) - - result -end - -def _reduce_498(val, _values, result) - result = @builder.match_rest(val[0]) - - result -end - -def _reduce_499(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_500(val, _values, result) - result = [ *val[0], val[2] ] - - result -end - -# reduce 501 omitted - -def _reduce_502(val, _values, result) - result = [ *val[0], *val[2] ] - - result -end - -def _reduce_503(val, _values, result) - result = val[0] - - result -end - -def _reduce_504(val, _values, result) - result = val[0] - - result -end - -def _reduce_505(val, _values, result) - result = val[0] - - result -end - -def _reduce_506(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_507(val, _values, result) - result = [ *val[0], val[2] ] - - result -end - -def _reduce_508(val, _values, result) - result = @builder.match_pair(*val[0], val[1]) - - result -end - -def _reduce_509(val, _values, result) - result = @builder.match_label(*val[0]) - - result -end - -def _reduce_510(val, _values, result) - result = [:label, val[0]] - - result -end - -def _reduce_511(val, _values, result) - result = [:quoted, [val[0], val[1], val[2]]] - - result -end - -def _reduce_512(val, _values, result) - result = [ @builder.match_rest(val[0], val[1]) ] - - result -end - -def _reduce_513(val, _values, result) - result = [ @builder.match_rest(val[0], nil) ] - - result -end - -def _reduce_514(val, _values, result) - result = [ @builder.match_nil_pattern(val[0], val[1]) ] - - result -end - -# reduce 515 omitted - -# reduce 516 omitted - -# reduce 517 omitted - -def _reduce_518(val, _values, result) - result = @builder.range_inclusive(val[0], val[1], val[2]) - - result -end - -def _reduce_519(val, _values, result) - result = @builder.range_exclusive(val[0], val[1], val[2]) - - result -end - -def _reduce_520(val, _values, result) - result = @builder.range_inclusive(val[0], val[1], nil) - - result -end - -def _reduce_521(val, _values, result) - result = @builder.range_exclusive(val[0], val[1], nil) - - result -end - -# reduce 522 omitted - -# reduce 523 omitted - -# reduce 524 omitted - -def _reduce_525(val, _values, result) - result = @builder.range_inclusive(nil, val[0], val[1]) - - result -end - -def _reduce_526(val, _values, result) - result = @builder.range_exclusive(nil, val[0], val[1]) - - result -end - -# reduce 527 omitted - -# reduce 528 omitted - -# reduce 529 omitted - -# reduce 530 omitted - -# reduce 531 omitted - -# reduce 532 omitted - -# reduce 533 omitted - -# reduce 534 omitted - -def _reduce_535(val, _values, result) - result = @builder.accessible(val[0]) - - result -end - -# reduce 536 omitted - -def _reduce_537(val, _values, result) - result = @builder.assignable(@builder.match_var(val[0])) - - result -end - -def _reduce_538(val, _values, result) - name = val[1][0] - unless static_env.declared?(name) - diagnostic :error, :undefined_lvar, { :name => name }, val[1] - end - - lvar = @builder.accessible(@builder.ident(val[1])) - result = @builder.pin(val[0], lvar) - - result -end - -def _reduce_539(val, _values, result) - result = @builder.const_global(val[0], val[1]) - - result -end - -def _reduce_540(val, _values, result) - result = @builder.const_fetch(val[0], val[1], val[2]) - - result -end - -def _reduce_541(val, _values, result) - result = @builder.const(val[0]) - - result -end - -def _reduce_542(val, _values, result) - assoc_t, exc_var = val[2] - - if val[1] - exc_list = @builder.array(nil, val[1], nil) - end - - result = [ @builder.rescue_body(val[0], - exc_list, assoc_t, exc_var, - val[3], val[4]), - *val[5] ] - - result -end - -def _reduce_543(val, _values, result) - result = [] - - result -end - -def _reduce_544(val, _values, result) - result = [ val[0] ] - - result -end - -# reduce 545 omitted - -# reduce 546 omitted - -def _reduce_547(val, _values, result) - result = [ val[0], val[1] ] - - result -end - -# reduce 548 omitted - -def _reduce_549(val, _values, result) - result = [ val[0], val[1] ] - - result -end - -# reduce 550 omitted - -# reduce 551 omitted - -# reduce 552 omitted - -def _reduce_553(val, _values, result) - result = @builder.string_compose(nil, val[0], nil) - - result -end - -def _reduce_554(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_555(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_556(val, _values, result) - string = @builder.string_compose(val[0], val[1], val[2]) - result = @builder.dedent_string(string, @lexer.dedent_level) - - result -end - -def _reduce_557(val, _values, result) - string = @builder.string(val[0]) - result = @builder.dedent_string(string, @lexer.dedent_level) - - result -end - -def _reduce_558(val, _values, result) - result = @builder.character(val[0]) - - result -end - -def _reduce_559(val, _values, result) - string = @builder.xstring_compose(val[0], val[1], val[2]) - result = @builder.dedent_string(string, @lexer.dedent_level) - - result -end - -def _reduce_560(val, _values, result) - opts = @builder.regexp_options(val[3]) - result = @builder.regexp_compose(val[0], val[1], val[2], opts) - - result -end - -def _reduce_561(val, _values, result) - result = @builder.words_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_562(val, _values, result) - result = [] - - result -end - -def _reduce_563(val, _values, result) - result = val[0] << @builder.word(val[1]) - - result -end - -def _reduce_564(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_565(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_566(val, _values, result) - result = @builder.symbols_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_567(val, _values, result) - result = [] - - result -end - -def _reduce_568(val, _values, result) - result = val[0] << @builder.word(val[1]) - - result -end - -def _reduce_569(val, _values, result) - result = @builder.words_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_570(val, _values, result) - result = @builder.symbols_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_571(val, _values, result) - result = [] - - result -end - -def _reduce_572(val, _values, result) - result = val[0] << @builder.string_internal(val[1]) - - result -end - -def _reduce_573(val, _values, result) - result = [] - - result -end - -def _reduce_574(val, _values, result) - result = val[0] << @builder.symbol_internal(val[1]) - - result -end - -def _reduce_575(val, _values, result) - result = [] - - result -end - -def _reduce_576(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_577(val, _values, result) - result = [] - - result -end - -def _reduce_578(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_579(val, _values, result) - result = [] - - result -end - -def _reduce_580(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_581(val, _values, result) - result = @builder.string_internal(val[0]) - - result -end - -def _reduce_582(val, _values, result) - result = val[1] - - result -end - -def _reduce_583(val, _values, result) - @lexer.cmdarg.push(false) - @lexer.cond.push(false) - - result -end - -def _reduce_584(val, _values, result) - @lexer.cmdarg.pop - @lexer.cond.pop - - result = @builder.begin(val[0], val[2], val[3]) - - result -end - -def _reduce_585(val, _values, result) - result = @builder.gvar(val[0]) - - result -end - -def _reduce_586(val, _values, result) - result = @builder.ivar(val[0]) - - result -end - -def _reduce_587(val, _values, result) - result = @builder.cvar(val[0]) - - result -end - -# reduce 588 omitted - -# reduce 589 omitted - -# reduce 590 omitted - -def _reduce_591(val, _values, result) - @lexer.state = :expr_end - result = @builder.symbol(val[0]) - - result -end - -def _reduce_592(val, _values, result) - @lexer.state = :expr_end - result = @builder.symbol_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_593(val, _values, result) - result = val[0] - - result -end - -def _reduce_594(val, _values, result) - if @builder.respond_to? :negate - # AST builder interface compatibility - result = @builder.negate(val[0], val[1]) - else - result = @builder.unary_num(val[0], val[1]) - end - - result -end - -def _reduce_595(val, _values, result) - @lexer.state = :expr_end - result = @builder.integer(val[0]) - - result -end - -def _reduce_596(val, _values, result) - @lexer.state = :expr_end - result = @builder.float(val[0]) - - result -end - -def _reduce_597(val, _values, result) - @lexer.state = :expr_end - result = @builder.rational(val[0]) - - result -end - -def _reduce_598(val, _values, result) - @lexer.state = :expr_end - result = @builder.complex(val[0]) - - result -end - -def _reduce_599(val, _values, result) - result = @builder.ident(val[0]) - - result -end - -def _reduce_600(val, _values, result) - result = @builder.ivar(val[0]) - - result -end - -def _reduce_601(val, _values, result) - result = @builder.gvar(val[0]) - - result -end - -def _reduce_602(val, _values, result) - result = @builder.const(val[0]) - - result -end - -def _reduce_603(val, _values, result) - result = @builder.cvar(val[0]) - - result -end - -def _reduce_604(val, _values, result) - result = @builder.nil(val[0]) - - result -end - -def _reduce_605(val, _values, result) - result = @builder.self(val[0]) - - result -end - -def _reduce_606(val, _values, result) - result = @builder.true(val[0]) - - result -end - -def _reduce_607(val, _values, result) - result = @builder.false(val[0]) - - result -end - -def _reduce_608(val, _values, result) - result = @builder.__FILE__(val[0]) - - result -end - -def _reduce_609(val, _values, result) - result = @builder.__LINE__(val[0]) - - result -end - -def _reduce_610(val, _values, result) - result = @builder.__ENCODING__(val[0]) - - result -end - -def _reduce_611(val, _values, result) - result = @builder.accessible(val[0]) - - result -end - -def _reduce_612(val, _values, result) - result = @builder.accessible(val[0]) - - result -end - -def _reduce_613(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_614(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_615(val, _values, result) - result = @builder.nth_ref(val[0]) - - result -end - -def _reduce_616(val, _values, result) - result = @builder.back_ref(val[0]) - - result -end - -def _reduce_617(val, _values, result) - @lexer.state = :expr_value - - result -end - -def _reduce_618(val, _values, result) - result = [ val[0], val[2] ] - - result -end - -def _reduce_619(val, _values, result) - result = nil - - result -end - -# reduce 620 omitted - -def _reduce_621(val, _values, result) - result = @builder.args(nil, [], nil) - - result -end - -def _reduce_622(val, _values, result) - result = @builder.args(val[0], val[1], val[2]) - - @lexer.state = :expr_value - - result -end - -def _reduce_623(val, _values, result) - args = [ *val[1], @builder.forward_arg(val[3]) ] - result = @builder.args(val[0], args, val[4]) - - @static_env.declare_forward_args - - result -end - -def _reduce_624(val, _values, result) - result = @builder.forward_only_args(val[0], val[1], val[2]) - @static_env.declare_forward_args - - @lexer.state = :expr_value - - result -end - -# reduce 625 omitted - -def _reduce_626(val, _values, result) - result = @context.in_kwarg - @context.in_kwarg = true - - result -end - -def _reduce_627(val, _values, result) - @context.in_kwarg = val[0] - result = @builder.args(nil, val[1], nil) - - result -end - -def _reduce_628(val, _values, result) - result = val[0].concat(val[2]).concat(val[3]) - - result -end - -def _reduce_629(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_630(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_631(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_632(val, _values, result) - result = val[1] - - result -end - -def _reduce_633(val, _values, result) - result = [] - - result -end - -def _reduce_634(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_635(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[6]). - concat(val[7]) - - result -end - -def _reduce_636(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_637(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_638(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_639(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_640(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_641(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_642(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_643(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_644(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_645(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_646(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_647(val, _values, result) - result = val[0] - - result -end - -def _reduce_648(val, _values, result) - result = [] - - result -end - -def _reduce_649(val, _values, result) - result = val[0] - - result -end - -def _reduce_650(val, _values, result) - diagnostic :error, :argument_const, nil, val[0] - - result -end - -def _reduce_651(val, _values, result) - diagnostic :error, :argument_ivar, nil, val[0] - - result -end - -def _reduce_652(val, _values, result) - diagnostic :error, :argument_gvar, nil, val[0] - - result -end - -def _reduce_653(val, _values, result) - diagnostic :error, :argument_cvar, nil, val[0] - - result -end - -# reduce 654 omitted - -def _reduce_655(val, _values, result) - @static_env.declare val[0][0] - - @max_numparam_stack.has_ordinary_params! - - result = val[0] - - result -end - -def _reduce_656(val, _values, result) - @current_arg_stack.set(val[0][0]) - result = val[0] - - result -end - -def _reduce_657(val, _values, result) - @current_arg_stack.set(0) - result = @builder.arg(val[0]) - - result -end - -def _reduce_658(val, _values, result) - result = @builder.multi_lhs(val[0], val[1], val[2]) - - result -end - -def _reduce_659(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_660(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_661(val, _values, result) - check_kwarg_name(val[0]) - - @static_env.declare val[0][0] - - @max_numparam_stack.has_ordinary_params! - - @current_arg_stack.set(val[0][0]) - - result = val[0] - - result -end - -def _reduce_662(val, _values, result) - @current_arg_stack.set(nil) - result = @builder.kwoptarg(val[0], val[1]) - - result -end - -def _reduce_663(val, _values, result) - @current_arg_stack.set(nil) - result = @builder.kwarg(val[0]) - - result -end - -def _reduce_664(val, _values, result) - result = @builder.kwoptarg(val[0], val[1]) - - result -end - -def _reduce_665(val, _values, result) - result = @builder.kwarg(val[0]) - - result -end - -def _reduce_666(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_667(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_668(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_669(val, _values, result) - result = val[0] << val[2] - - result -end - -# reduce 670 omitted - -# reduce 671 omitted - -def _reduce_672(val, _values, result) - result = [ @builder.kwnilarg(val[0], val[1]) ] - - result -end - -def _reduce_673(val, _values, result) - @static_env.declare val[1][0] - - result = [ @builder.kwrestarg(val[0], val[1]) ] - - result -end - -def _reduce_674(val, _values, result) - result = [ @builder.kwrestarg(val[0]) ] - - result -end - -def _reduce_675(val, _values, result) - @current_arg_stack.set(0) - result = @builder.optarg(val[0], val[1], val[2]) - - result -end - -def _reduce_676(val, _values, result) - @current_arg_stack.set(0) - result = @builder.optarg(val[0], val[1], val[2]) - - result -end - -def _reduce_677(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_678(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_679(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_680(val, _values, result) - result = val[0] << val[2] - - result -end - -# reduce 681 omitted - -# reduce 682 omitted - -def _reduce_683(val, _values, result) - @static_env.declare val[1][0] - - result = [ @builder.restarg(val[0], val[1]) ] - - result -end - -def _reduce_684(val, _values, result) - result = [ @builder.restarg(val[0]) ] - - result -end - -# reduce 685 omitted - -# reduce 686 omitted - -def _reduce_687(val, _values, result) - @static_env.declare val[1][0] - - result = @builder.blockarg(val[0], val[1]) - - result -end - -def _reduce_688(val, _values, result) - result = [ val[1] ] - - result -end - -def _reduce_689(val, _values, result) - result = [] - - result -end - -# reduce 690 omitted - -def _reduce_691(val, _values, result) - result = val[1] - - result -end - -def _reduce_692(val, _values, result) - result = [] - - result -end - -# reduce 693 omitted - -def _reduce_694(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_695(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_696(val, _values, result) - result = @builder.pair(val[0], val[1], val[2]) - - result -end - -def _reduce_697(val, _values, result) - result = @builder.pair_keyword(val[0], val[1]) - - result -end - -def _reduce_698(val, _values, result) - result = @builder.pair_quoted(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_699(val, _values, result) - result = @builder.kwsplat(val[0], val[1]) - - result -end - -# reduce 700 omitted - -# reduce 701 omitted - -# reduce 702 omitted - -# reduce 703 omitted - -# reduce 704 omitted - -# reduce 705 omitted - -# reduce 706 omitted - -# reduce 707 omitted - -# reduce 708 omitted - -# reduce 709 omitted - -# reduce 710 omitted - -# reduce 711 omitted - -def _reduce_712(val, _values, result) - result = [:dot, val[0][1]] - - result -end - -def _reduce_713(val, _values, result) - result = [:anddot, val[0][1]] - - result -end - -# reduce 714 omitted - -# reduce 715 omitted - -# reduce 716 omitted - -# reduce 717 omitted - -def _reduce_718(val, _values, result) - result = val[1] - - result -end - -def _reduce_719(val, _values, result) - result = val[1] - - result -end - -def _reduce_720(val, _values, result) - result = val[1] - - result -end - -# reduce 721 omitted - -# reduce 722 omitted - -# reduce 723 omitted - -def _reduce_724(val, _values, result) - yyerrok - - result -end - -# reduce 725 omitted - -# reduce 726 omitted - -# reduce 727 omitted - -def _reduce_728(val, _values, result) - result = nil - - result -end - -def _reduce_none(val, _values, result) - val[0] -end - - end # class Ruby30 -end # module Parser diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ruby31.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ruby31.rb deleted file mode 100644 index 9957a468..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ruby31.rb +++ /dev/null @@ -1,12716 +0,0 @@ -# -*- encoding:utf-8; warn-indent:false; frozen_string_literal: true -*- -# -# DO NOT MODIFY!!!! -# This file is automatically generated by Racc 1.7.3 -# from Racc grammar file "ruby31.y". -# - -require 'racc/parser.rb' - - -require 'parser' - -module Parser - class Ruby31 < Parser::Base - - - def version - 31 - end - - def default_encoding - Encoding::UTF_8 - end - - def endless_method_name(name_t) - if !%w[=== == != <= >=].include?(name_t[0]) && name_t[0].end_with?('=') - diagnostic :error, :endless_setter, nil, name_t - end - end - - def local_push - @static_env.extend_static - @lexer.cmdarg.push(false) - @lexer.cond.push(false) - @max_numparam_stack.push(static: true) - end - - def local_pop - @static_env.unextend - @lexer.cmdarg.pop - @lexer.cond.pop - @max_numparam_stack.pop - end - - def try_declare_numparam(node) - name = node.children[0] - - if name =~ /\A_[1-9]\z/ && !static_env.declared?(name) && @context.in_dynamic_block? - # definitely an implicit param - location = node.loc.expression - - if max_numparam_stack.has_ordinary_params? - diagnostic :error, :ordinary_param_defined, nil, [nil, location] - end - - raw_max_numparam_stack = max_numparam_stack.stack.dup - # ignore current block scope - raw_max_numparam_stack.pop - - raw_max_numparam_stack.reverse_each do |outer_scope| - if outer_scope[:static] - # found an outer scope that can't have numparams - # like def/class/etc - break - else - outer_scope_has_numparams = outer_scope[:value] > 0 - - if outer_scope_has_numparams - diagnostic :error, :numparam_used_in_outer_scope, nil, [nil, location] - else - # for now it's ok, but an outer scope can also be a block - # like proc { _1; proc { proc { proc { _2 }} }} - # with numparams, so we need to continue - end - end - end - - static_env.declare(name) - max_numparam_stack.register(name[1].to_i) - - true - else - false - end - end -##### State transition tables begin ### - -racc_action_table = [ - -614, 221, 222, 221, 222, 233, -116, -614, -614, -614, - 925, 620, -614, -614, -614, 227, -614, 311, 239, 1124, - 126, -732, 226, 620, -614, 125, -614, -614, -614, 221, - 222, 224, 717, 661, -117, -124, -614, -614, 620, -614, - -614, -614, -614, -614, 620, 620, 620, -116, -117, -732, - 718, -123, 892, 240, -124, 627, 663, 240, 3, 240, - 311, -744, 833, 833, -119, -121, -614, -614, -614, -614, - -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, - 228, 306, -614, -614, -614, 122, -614, -614, 828, 240, - -614, 1001, -118, -614, -614, 240, -614, 240, -614, 660, - -614, 1125, -614, -614, 310, -614, -614, -614, -614, -614, - -123, -614, -617, -614, -119, -107, 311, 221, 222, -617, - -617, -617, 662, 240, -617, -617, -617, -614, -617, 126, - -614, -614, -614, -614, 125, -614, -617, -614, -617, -617, - -617, 126, -614, -108, -115, -614, 125, 310, -617, -617, - -121, -617, -617, -617, -617, -617, 126, -120, -118, 990, - -114, 125, 126, 126, 126, -116, -117, 125, 125, 125, - -116, -117, -124, -110, -112, -120, -122, -124, -617, -617, - -617, -617, -617, -617, -617, -617, -617, -617, -617, -617, - -617, -617, 126, -122, -617, -617, -617, 125, -617, -617, - 1000, -109, -617, 310, 126, -617, -617, -732, -617, 125, - -617, 126, -617, 648, -617, -617, 125, -617, -617, -617, - -617, -617, -320, -617, 240, -617, 925, -628, -123, -320, - -320, -320, -119, -123, -719, -320, -320, -119, -320, -617, - -719, -720, -617, -617, -617, -617, -320, -617, 227, -617, - 311, 233, 135, 648, -617, 304, 925, -617, -320, -320, - -110, -320, -320, -320, -320, -320, 104, 105, -121, 892, - -720, 627, 924, -121, -112, -120, -118, 650, 649, -629, - -120, -118, 104, 105, -111, -113, -116, 859, -320, -320, - -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, - -320, -320, -511, 227, -320, -320, -320, -744, 687, -320, - 304, -122, -320, 228, 306, -320, -122, 650, 649, 646, - -320, 218, -320, 648, -320, -320, -110, -320, -320, -320, - -320, -320, 522, -320, -723, -320, 949, 310, -117, 237, - -112, -723, -723, -723, 106, 107, 126, -723, -723, -320, - -723, 125, -320, -320, 948, -113, 219, -320, -723, -723, - 106, 107, -109, 600, -320, 220, -110, -122, 228, -110, - -723, -723, 919, -723, -723, -723, -723, -723, -102, -614, - -112, -110, 612, -112, -111, 611, -614, 650, 649, 648, - -88, -124, 920, 648, 126, -112, 233, 861, -124, 125, - -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, - -723, -723, -723, -723, 223, 754, -723, -723, -723, -356, - 688, -723, -123, 300, -723, 499, -356, -723, -109, 682, - 648, -119, -723, 683, -723, -356, -723, -723, 648, -723, - -723, -723, -723, -723, -614, -723, -723, -723, 361, -719, - -111, -121, -744, 650, 649, 646, 648, 650, 649, 646, - 237, -723, 648, 500, -723, -723, -716, -111, -109, -723, - 800, -109, 648, -723, 1063, 1056, -723, 233, 362, -120, - -723, -723, -723, -109, -356, -723, -723, -723, -119, -723, - -111, 126, -121, -111, 650, 649, 125, -723, -723, -723, - -723, -723, 650, 649, 651, -111, -717, -115, 240, -723, - -723, 1063, -723, -723, -723, -723, -723, 431, -614, -124, - 650, 649, 653, 648, 471, -614, 650, 649, 655, 612, - -716, 1035, 614, -744, -614, -635, 650, 649, 659, -723, - -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, - -723, -723, -723, -716, 875, -723, -723, -723, -617, 921, - -723, 221, 222, -723, 633, -617, -723, -723, 634, -723, - -717, -723, 510, -723, -617, -723, -723, 521, -723, -723, - -723, -723, -723, -614, -723, -723, -723, 650, 649, 664, - -118, 227, -617, -717, -624, -623, 281, 282, 519, -617, - -723, -624, -623, -723, -723, -723, -723, 520, -723, -625, - -723, -628, -320, -118, 523, -723, -625, -629, -120, -320, - -320, -320, 524, -617, -320, -320, -320, -622, -320, 221, - 222, 239, 280, 279, -622, -619, -320, 558, -320, -320, - -320, 428, -619, 507, 506, 570, 430, 429, -320, -320, - 600, -320, -320, -320, -320, -320, 228, -617, -107, -624, - -623, -620, -621, 633, -108, 572, 931, 960, -620, -621, - -116, 927, 574, 633, -625, 928, -117, 960, -320, -320, - -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, - -320, -320, -622, 754, -320, -320, -320, -114, 922, -320, - -619, 682, -320, 499, 612, -320, -320, 614, -320, -123, - -320, 135, -320, 612, -320, -320, 614, -320, -320, -320, - -320, -320, -320, -320, -87, -320, -620, -621, 90, -320, - -320, -320, 950, 951, 240, -320, -320, 1197, -320, -320, - 91, 500, -320, -320, -320, -320, -320, -320, -110, -320, - 92, 985, 892, 1056, -320, 683, 240, -122, -320, -320, - -119, -320, -320, -320, -320, -320, 1149, 1150, 985, 892, - 491, -626, 488, 487, 486, 496, 489, 585, -626, 875, - 491, 586, 488, 487, 486, 499, 489, -626, -320, -320, - -320, -320, -320, -320, -320, -320, -320, -320, -320, -320, - -320, -320, -112, 593, -320, -320, -320, 494, 687, -320, - 315, 240, -320, 233, -121, -320, 504, 503, 507, 506, - -320, 233, -320, 500, -320, -320, -109, -320, -320, -320, - -320, -320, 306, -320, -723, -320, -626, 597, -118, 603, - 264, -723, -723, -723, 606, 240, 615, -723, -723, -320, - -723, 616, -320, -320, 574, -320, 627, -320, -723, -723, - 420, 631, 632, 485, -320, 640, 665, -122, 668, 669, - -723, -723, -293, -723, -723, -723, -723, -723, 671, 672, - 676, 240, 491, -627, 488, 487, 486, 496, 489, 954, - -627, 958, 957, 680, 681, 959, 306, 499, 694, -627, - -723, -723, -723, -723, -723, -723, -723, -723, -723, -723, - -723, -723, -723, -723, 695, 240, -723, -723, -723, 494, - 688, -723, 697, 700, -723, 701, 956, -723, 504, 503, - 507, 506, -723, 703, -723, 500, -723, -723, 705, -723, - -723, -723, -723, -723, 496, -723, -723, -723, -627, -385, - 227, 719, 720, 724, 499, -311, 227, 592, 726, 732, - 733, -723, -311, 602, -723, -723, 590, -723, 264, -723, - 227, -311, 520, 264, 264, 485, -723, 630, 264, -120, - 7, 81, 82, 83, 11, 65, 628, 507, 506, 71, - 72, 240, 500, 788, 75, -723, 73, 74, 76, 35, - 36, 79, 80, 129, 130, 131, 132, 133, 84, 33, - 32, 114, 113, 115, 116, 228, 240, 23, 240, 240, - -311, 228, -102, 10, 53, 9, 12, 118, 117, 119, - 108, 64, 110, 109, 111, 228, 112, 120, 121, 227, - 104, 105, 49, 50, 48, 227, 636, -723, 803, -321, - 240, 606, 675, 814, -723, 638, -321, 819, 240, -719, - 821, 673, 824, -723, 45, -321, 829, 38, 830, 834, - 66, 67, -321, 858, 68, 862, 40, 863, -294, -321, - 52, 876, -723, 558, 264, 558, 853, 854, -321, 24, - 855, 120, 121, 888, 102, 90, 93, 94, 892, 95, - 97, 96, 98, 910, 228, 913, 914, 91, 101, 240, - 228, 917, -723, 240, -321, 85, 261, 92, 106, 107, - 263, 262, 46, 47, 333, 81, 82, 83, 11, 65, - 926, 943, 944, 71, 72, 945, 962, -321, 75, 964, - 73, 74, 76, 35, 36, 79, 80, 256, 300, 970, - 972, 974, 84, 33, 32, 114, 113, 115, 116, 572, - 1159, 23, 488, 487, 486, 574, 489, 10, 53, 335, - 12, 118, 117, 119, 108, 64, 110, 109, 111, 814, - 112, 120, 121, 240, 104, 105, 49, 50, 48, 264, - 268, 269, 270, 271, 281, 282, 276, 277, 272, 273, - -320, 257, 258, 306, 306, 274, 275, -320, 45, 814, - 255, 337, -720, 264, 66, 67, -320, 892, 68, 987, - 40, 261, 988, 267, 52, 263, 262, 240, 259, 260, - 280, 279, 265, 24, 266, 240, 998, 240, 102, 90, - 93, 94, 227, 95, 97, 96, 98, -295, 240, 1164, - 1009, 91, 101, 1013, 278, -293, 1017, 700, 1162, 85, - 718, 92, 106, 107, 1020, -320, 46, 47, 7, 81, - 82, 83, 11, 65, 1022, 1024, 1026, 71, 72, 1026, - 240, 774, 75, 240, 73, 74, 76, 35, 36, 79, - 80, 129, 130, 131, 132, 133, 84, 33, 32, 114, - 113, 115, 116, 240, 1054, 23, 1057, 228, 925, 972, - 677, 10, 53, 9, 12, 118, 117, 119, 108, 64, - 110, 109, 111, 1069, 112, 120, 121, 240, 104, 105, - 49, 50, 48, 264, 268, 269, 270, 271, 281, 282, - 276, 277, 272, 273, -320, 257, 258, 814, 1086, 274, - 275, -320, 45, 1088, 1093, 38, -720, 1094, 66, 67, - -320, 1099, 68, 1100, 40, 261, 1101, 267, 52, 263, - 262, -296, 259, 260, 280, 279, 265, 24, 266, 1114, - 1115, 1116, 102, 90, 93, 94, 227, 95, 97, 96, - 98, 240, 240, 1188, 240, 91, 101, 240, 278, 240, - -265, 240, 638, 85, 925, 92, 106, 107, 1123, -320, - 46, 47, 333, 81, 82, 83, 11, 65, 240, 1129, - 1130, 71, 72, 1132, 700, 1135, 75, 1138, 73, 74, - 76, 35, 36, 79, 80, 129, 130, 131, 132, 133, - 84, 33, 32, 114, 113, 115, 116, 1140, 1142, 23, - 240, 228, -385, 1154, 677, 10, 53, 335, 12, 118, - 117, 119, 108, 64, 110, 109, 111, 1165, 112, 120, - 121, 1166, 104, 105, 49, 50, 48, 264, 268, 269, - 270, 271, 281, 282, 276, 277, 272, 273, 227, 257, - 258, 1026, 1026, 274, 275, 1188, 45, 1026, 1173, 38, - 496, 1186, 66, 67, 638, 1189, 68, 1194, 40, 261, - 499, 267, 52, 263, 262, 1195, 259, 260, 280, 279, - 265, 24, 266, 694, 1115, 1205, 102, 90, 93, 94, - 1205, 95, 97, 96, 98, 700, 1208, 1210, 1212, 91, - 101, 1214, 278, 507, 506, 1214, 240, 85, 500, 92, - 106, 107, 1026, 228, 46, 47, 333, 81, 82, 83, - 11, 65, 1205, -720, -719, 71, 72, 1231, 1214, 1214, - 75, 1214, 73, 74, 76, 35, 36, 79, 80, 129, - 130, 131, 132, 133, 84, 33, 32, 114, 113, 115, - 116, 1214, nil, 23, nil, nil, nil, nil, 889, 10, - 53, 335, 12, 118, 117, 119, 108, 64, 110, 109, - 111, nil, 112, 120, 121, nil, 104, 105, 49, 50, - 48, 264, 268, 269, 270, 271, 281, 282, 276, 277, - 272, 273, nil, 257, 258, nil, nil, 274, 275, nil, - 45, nil, nil, 38, nil, nil, 66, 67, nil, nil, - 68, nil, 40, 261, nil, 267, 52, 263, 262, nil, - 259, 260, 280, 279, 265, 24, 266, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, 278, nil, nil, nil, - nil, 85, nil, 92, 106, 107, nil, nil, 46, 47, - 333, 81, 82, 83, 11, 65, nil, nil, nil, 71, - 72, nil, nil, nil, 75, nil, 73, 74, 76, 35, - 36, 79, 80, nil, nil, nil, nil, nil, 84, 33, - 32, 114, 113, 115, 116, nil, nil, 23, nil, nil, - nil, nil, 918, 10, 53, 335, 12, 118, 117, 119, - 108, 64, 110, 109, 111, nil, 112, 120, 121, nil, - 104, 105, 49, 50, 48, 264, 268, 269, 270, 271, - 281, 282, 276, 277, 272, 273, nil, 257, 258, nil, - nil, 274, 275, nil, 45, nil, nil, 38, nil, nil, - 66, 67, nil, nil, 68, nil, 40, 261, nil, 267, - 52, 263, 262, nil, 259, 260, 280, 279, 265, 24, - 266, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - 278, nil, nil, nil, nil, 85, nil, 92, 106, 107, - nil, nil, 46, 47, 333, 81, 82, 83, 11, 65, - nil, nil, nil, 71, 72, nil, nil, nil, 75, nil, - 73, 74, 76, 35, 36, 79, 80, nil, nil, nil, - nil, nil, 84, 33, 32, 114, 113, 115, 116, nil, - 1159, 23, 488, 487, 486, nil, 489, 10, 53, 335, - 12, 118, 117, 119, 108, 64, 110, 109, 111, nil, - 112, 120, 121, nil, 104, 105, 49, 50, 48, 264, - 268, 269, 270, 271, 281, 282, 276, 277, 272, 273, - nil, 257, 258, nil, nil, 274, 275, nil, 45, nil, - nil, 38, nil, nil, 66, 67, nil, nil, 68, nil, - 40, 261, nil, 267, 52, 263, 262, nil, 259, 260, - 280, 279, 265, 24, 266, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, 278, nil, nil, nil, nil, 85, - nil, 92, 106, 107, nil, nil, 46, 47, 333, 81, - 82, 83, 11, 65, nil, nil, nil, 71, 72, nil, - nil, nil, 75, nil, 73, 74, 76, 35, 36, 79, - 80, nil, nil, nil, nil, nil, 84, 33, 32, 114, - 113, 115, 116, nil, nil, 23, nil, nil, nil, nil, - nil, 10, 53, 335, 12, 118, 117, 119, 108, 64, - 110, 109, 111, nil, 112, 120, 121, nil, 104, 105, - 49, 50, 48, 264, 268, 269, 270, 271, 281, 282, - 276, 277, 272, 273, nil, 257, 258, nil, nil, 274, - 275, nil, 45, nil, nil, 337, nil, nil, 66, 67, - nil, nil, 68, nil, 40, 261, nil, 267, 52, 263, - 262, nil, 259, 260, 280, 279, 265, 24, 266, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, 240, 278, nil, - nil, nil, nil, 85, nil, 92, 106, 107, nil, nil, - 46, 47, 333, 81, 82, 83, 11, 65, nil, nil, - nil, 71, 72, nil, nil, nil, 75, nil, 73, 74, - 76, 35, 36, 79, 80, nil, nil, nil, nil, nil, - 84, 33, 32, 114, 113, 115, 116, nil, nil, 23, - nil, nil, nil, nil, nil, 10, 53, 335, 12, 118, - 117, 119, 108, 64, 110, 109, 111, nil, 112, 120, - 121, nil, 104, 105, 49, 50, 48, 264, 268, 269, - 270, 271, 281, 282, 276, 277, 272, 273, nil, 257, - 258, nil, nil, 274, 275, nil, 45, nil, nil, 337, - nil, nil, 66, 67, nil, nil, 68, nil, 40, 261, - nil, 267, 52, 263, 262, nil, 259, 260, 280, 279, - 265, 24, 266, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, 278, nil, nil, nil, nil, 85, nil, 92, - 106, 107, nil, nil, 46, 47, 333, 81, 82, 83, - 11, 65, nil, nil, nil, 71, 72, nil, nil, nil, - 75, nil, 73, 74, 76, 35, 36, 79, 80, nil, - nil, nil, nil, nil, 84, 33, 32, 114, 113, 115, - 116, nil, nil, 23, nil, nil, nil, nil, nil, 10, - 53, 335, 12, 118, 117, 119, 108, 64, 110, 109, - 111, nil, 112, 120, 121, nil, 104, 105, 49, 50, - 48, 264, 268, 269, 270, 271, 281, 282, 276, 277, - 272, 273, nil, 257, 258, nil, nil, 274, 275, nil, - 45, nil, nil, 38, nil, nil, 66, 67, nil, nil, - 68, nil, 40, 261, nil, 267, 52, 263, 262, nil, - 259, 260, 280, 279, 265, 24, 266, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, 278, nil, nil, nil, - nil, 85, nil, 92, 106, 107, nil, nil, 46, 47, - 333, 81, 82, 83, 11, 65, nil, nil, nil, 71, - 72, nil, nil, nil, 75, nil, 73, 74, 76, 35, - 36, 79, 80, nil, nil, nil, nil, nil, 84, 33, - 32, 114, 113, 115, 116, nil, nil, 23, nil, nil, - nil, nil, nil, 10, 53, 335, 12, 118, 117, 119, - 108, 64, 110, 109, 111, nil, 112, 120, 121, nil, - 104, 105, 49, 50, 48, 264, 268, 269, 270, 271, - 281, 282, 276, 277, 272, 273, nil, 257, 258, nil, - nil, 274, 275, nil, 45, nil, nil, 38, nil, nil, - 66, 67, nil, nil, 68, nil, 40, 261, nil, 267, - 52, 263, 262, nil, 259, 260, 280, 279, 265, 24, - 266, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - 278, nil, nil, nil, nil, 85, nil, 92, 106, 107, - nil, nil, 46, 47, 333, 81, 82, 83, 11, 65, - nil, nil, nil, 71, 72, nil, nil, nil, 75, nil, - 73, 74, 76, 35, 36, 79, 80, nil, nil, nil, - nil, nil, 84, 33, 32, 114, 113, 115, 116, nil, - nil, 23, nil, nil, nil, nil, nil, 10, 53, 335, - 12, 118, 117, 119, 108, 64, 110, 109, 111, nil, - 112, 120, 121, nil, 104, 105, 49, 50, 48, 264, - 268, 269, 270, 271, 281, 282, 276, 277, 272, 273, - nil, 257, 258, nil, nil, 274, 275, nil, 45, nil, - nil, 38, nil, nil, 66, 67, nil, nil, 68, nil, - 40, 261, nil, 267, 52, 263, 262, nil, 259, 260, - 280, 279, 265, 24, 266, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, 278, nil, nil, nil, nil, 85, - nil, 92, 106, 107, nil, nil, 46, 47, 333, 81, - 82, 83, 11, 65, nil, nil, nil, 71, 72, nil, - nil, nil, 75, nil, 73, 74, 76, 35, 36, 79, - 80, nil, nil, nil, nil, nil, 84, 33, 32, 114, - 113, 115, 116, nil, nil, 23, nil, nil, nil, nil, - nil, 10, 53, 335, 12, 118, 117, 119, 108, 64, - 110, 109, 111, nil, 112, 120, 121, nil, 104, 105, - 49, 50, 48, 264, 268, 269, 270, 271, 281, 282, - 276, 277, 272, 273, nil, 257, 258, nil, nil, 274, - 275, nil, 45, nil, nil, 38, nil, nil, 66, 67, - nil, nil, 68, nil, 40, 261, nil, 267, 52, 263, - 262, nil, 259, 260, 280, 279, 265, 24, 266, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, 278, nil, - nil, nil, nil, 85, nil, 92, 106, 107, nil, nil, - 46, 47, 333, 81, 82, 83, 11, 65, nil, nil, - nil, 71, 72, nil, nil, nil, 75, nil, 73, 74, - 76, 35, 36, 79, 80, nil, nil, nil, nil, nil, - 84, 33, 32, 114, 113, 115, 116, nil, nil, 23, - nil, nil, nil, nil, nil, 10, 53, 335, 12, 118, - 117, 119, 108, 64, 110, 109, 111, nil, 112, 120, - 121, nil, 104, 105, 49, 50, 48, 264, 268, 269, - 270, 271, 281, 282, 276, 277, 272, 273, nil, 257, - 258, nil, nil, 274, 275, nil, 45, nil, nil, 38, - nil, nil, 66, 67, nil, nil, 68, nil, 40, 261, - nil, 267, 52, 263, 262, nil, 259, 260, 280, 279, - 265, 24, 266, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, 278, nil, nil, nil, nil, 85, nil, 92, - 106, 107, nil, nil, 46, 47, 333, 81, 82, 83, - 11, 65, nil, nil, nil, 71, 72, nil, nil, nil, - 75, nil, 73, 74, 76, 35, 36, 79, 80, nil, - nil, nil, nil, nil, 84, 33, 32, 114, 113, 115, - 116, nil, nil, 23, nil, nil, nil, nil, nil, 10, - 53, 335, 12, 118, 117, 119, 108, 64, 110, 109, - 111, nil, 112, 120, 121, nil, 104, 105, 49, 50, - 48, 264, 268, 269, 270, 271, 281, 282, 276, 277, - 272, 273, nil, 257, 258, nil, nil, 274, 275, nil, - 45, nil, nil, 38, nil, nil, 66, 67, nil, nil, - 68, nil, 40, 261, nil, 267, 52, 263, 262, nil, - 259, 260, 280, 279, 265, 24, 266, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, 278, nil, nil, nil, - nil, 85, nil, 92, 106, 107, nil, nil, 46, 47, - 333, 81, 82, 83, 11, 65, nil, nil, nil, 71, - 72, nil, nil, nil, 75, nil, 73, 74, 76, 35, - 36, 79, 80, nil, nil, nil, nil, nil, 84, 33, - 32, 114, 113, 115, 116, nil, 491, 23, 488, 487, - 486, nil, 489, 10, 53, 335, 12, 118, 117, 119, - 108, 64, 110, 109, 111, nil, 112, 120, 121, nil, - 104, 105, 49, 50, 48, 491, nil, 488, 487, 486, - nil, 489, nil, 710, nil, nil, 264, nil, nil, nil, - nil, nil, 714, nil, 45, nil, nil, 38, nil, nil, - 66, 67, nil, nil, 68, 491, 40, 488, 487, 486, - 52, 489, 710, nil, nil, nil, nil, nil, 261, 24, - nil, 714, 263, 262, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - nil, nil, 710, nil, nil, 85, nil, 92, 106, 107, - nil, 714, 46, 47, 333, 81, 82, 83, 11, 65, - nil, nil, nil, 71, 72, nil, nil, nil, 75, nil, - 73, 74, 76, 35, 36, 79, 80, nil, nil, nil, - nil, nil, 84, 33, 32, 114, 113, 115, 116, nil, - nil, 23, nil, nil, nil, nil, nil, 10, 53, 335, - 12, 118, 117, 119, 108, 64, 110, 109, 111, nil, - 112, 120, 121, nil, 104, 105, 49, 50, 48, 264, - 268, 269, 270, 271, 281, 282, 276, 277, 272, 273, - nil, -745, -745, nil, nil, 274, 275, nil, 45, nil, - nil, 38, nil, nil, 66, 67, nil, 264, 68, nil, - 40, 261, nil, 267, 52, 263, 262, nil, 259, 260, - 280, 279, 265, 24, 266, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, 261, - nil, 91, 101, 263, 262, nil, 259, 260, nil, 85, - nil, 92, 106, 107, nil, nil, 46, 47, 333, 81, - 82, 83, 11, 65, nil, nil, nil, 71, 72, nil, - nil, nil, 75, nil, 73, 74, 76, 35, 36, 79, - 80, nil, nil, nil, nil, nil, 84, 33, 32, 114, - 113, 115, 116, nil, nil, 23, nil, nil, nil, nil, - nil, 10, 53, 335, 12, 118, 117, 119, 108, 64, - 110, 109, 111, nil, 112, 120, 121, nil, 104, 105, - 49, 50, 48, 264, 268, 269, 270, 271, 281, 282, - 276, 277, 272, 273, nil, -745, -745, nil, nil, 274, - 275, nil, 45, nil, nil, 38, nil, nil, 66, 67, - nil, 264, 68, nil, 40, 261, nil, 267, 52, 263, - 262, nil, 259, 260, 280, 279, 265, 24, 266, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, 261, nil, 91, 101, 263, 262, nil, - 259, 260, nil, 85, nil, 92, 106, 107, nil, nil, - 46, 47, 333, 81, 82, 83, 11, 65, nil, nil, - nil, 71, 72, nil, nil, nil, 75, nil, 73, 74, - 76, 35, 36, 79, 80, nil, nil, nil, nil, nil, - 84, 33, 32, 114, 113, 115, 116, nil, nil, 23, - nil, nil, nil, nil, nil, 10, 53, 335, 12, 118, - 117, 119, 108, 64, 110, 109, 111, nil, 112, 120, - 121, nil, 104, 105, 49, 50, 48, 264, 268, 269, - 270, 271, 281, 282, 276, 277, 272, 273, nil, -745, - -745, nil, nil, 274, 275, nil, 45, nil, nil, 38, - nil, nil, 66, 67, nil, nil, 68, nil, 40, 261, - nil, 267, 52, 263, 262, nil, 259, 260, 280, 279, - 265, 24, 266, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, 491, nil, 488, 487, 486, 85, 489, 92, - 106, 107, nil, nil, 46, 47, 333, 81, 82, 83, - 11, 65, nil, nil, nil, 71, 72, nil, nil, nil, - 75, nil, 73, 74, 76, 35, 36, 79, 80, 710, - nil, nil, nil, nil, 84, 33, 32, 114, 113, 115, - 116, nil, nil, 23, nil, nil, nil, nil, nil, 10, - 53, 335, 12, 118, 117, 119, 108, 64, 110, 109, - 111, nil, 112, 120, 121, nil, 104, 105, 49, 50, - 48, 264, 268, 269, 270, 271, 281, 282, 276, 277, - 272, 273, nil, -745, -745, nil, nil, 274, 275, nil, - 45, nil, nil, 38, nil, nil, 66, 67, nil, nil, - 68, nil, 40, 261, nil, 267, 52, 263, 262, nil, - 259, 260, 280, 279, 265, 24, 266, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, 491, nil, 488, 487, - 486, 85, 489, 92, 106, 107, nil, nil, 46, 47, - 333, 81, 82, 83, 11, 65, nil, nil, nil, 71, - 72, nil, nil, nil, 75, nil, 73, 74, 76, 35, - 36, 79, 80, 710, nil, nil, nil, nil, 84, 33, - 32, 114, 113, 115, 116, nil, 491, 23, 488, 487, - 486, nil, 489, 10, 53, 335, 12, 118, 117, 119, - 108, 64, 110, 109, 111, nil, 112, 120, 121, nil, - 104, 105, 49, 50, 48, 264, -745, -745, -745, -745, - 281, 282, nil, 710, -745, -745, nil, nil, nil, nil, - nil, 274, 275, nil, 45, nil, nil, 38, nil, nil, - 66, 67, nil, nil, 68, nil, 40, 261, nil, 267, - 52, 263, 262, nil, 259, 260, 280, 279, 265, 24, - 266, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - nil, nil, nil, nil, nil, 85, nil, 92, 106, 107, - nil, nil, 46, 47, 333, 81, 82, 83, 11, 65, - nil, nil, nil, 71, 72, nil, nil, nil, 75, nil, - 73, 74, 76, 35, 36, 79, 80, nil, nil, nil, - nil, nil, 84, 33, 32, 114, 113, 115, 116, nil, - nil, 23, nil, nil, nil, nil, nil, 10, 53, 335, - 12, 118, 117, 119, 108, 64, 110, 109, 111, nil, - 112, 120, 121, nil, 104, 105, 49, 50, 48, 264, - -745, -745, -745, -745, 281, 282, nil, nil, -745, -745, - nil, nil, nil, nil, nil, 274, 275, nil, 45, nil, - nil, 38, nil, nil, 66, 67, nil, nil, 68, nil, - 40, 261, nil, 267, 52, 263, 262, nil, 259, 260, - 280, 279, 265, 24, 266, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, nil, nil, nil, 85, - nil, 92, 106, 107, nil, nil, 46, 47, 333, 81, - 82, 83, 11, 65, nil, nil, nil, 71, 72, nil, - nil, nil, 75, nil, 73, 74, 76, 35, 36, 79, - 80, nil, nil, nil, nil, nil, 84, 33, 32, 114, - 113, 115, 116, nil, nil, 23, nil, nil, nil, nil, - nil, 10, 53, 335, 12, 118, 117, 119, 108, 64, - 110, 109, 111, nil, 112, 120, 121, nil, 104, 105, - 49, 50, 48, 264, -745, -745, -745, -745, 281, 282, - nil, nil, -745, -745, nil, nil, nil, nil, nil, 274, - 275, nil, 45, nil, nil, 38, nil, nil, 66, 67, - nil, nil, 68, nil, 40, 261, nil, 267, 52, 263, - 262, nil, 259, 260, 280, 279, 265, 24, 266, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - nil, nil, nil, 85, nil, 92, 106, 107, nil, nil, - 46, 47, 333, 81, 82, 83, 11, 65, nil, nil, - nil, 71, 72, nil, nil, nil, 75, nil, 73, 74, - 76, 35, 36, 79, 80, nil, nil, nil, nil, nil, - 84, 33, 32, 114, 113, 115, 116, nil, nil, 23, - nil, nil, nil, nil, nil, 10, 53, 335, 12, 118, - 117, 119, 108, 64, 110, 109, 111, nil, 112, 120, - 121, nil, 104, 105, 49, 50, 48, 264, -745, -745, - -745, -745, 281, 282, nil, nil, -745, -745, nil, nil, - nil, nil, nil, 274, 275, nil, 45, nil, nil, 38, - nil, nil, 66, 67, nil, nil, 68, nil, 40, 261, - nil, 267, 52, 263, 262, nil, 259, 260, 280, 279, - 265, 24, 266, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, nil, nil, nil, 85, nil, 92, - 106, 107, nil, nil, 46, 47, 333, 81, 82, 83, - 11, 65, nil, nil, nil, 71, 72, nil, nil, nil, - 75, nil, 73, 74, 76, 35, 36, 79, 80, nil, - nil, nil, nil, nil, 84, 33, 32, 114, 113, 115, - 116, nil, nil, 23, nil, nil, nil, nil, nil, 10, - 53, 335, 12, 118, 117, 119, 108, 64, 110, 109, - 111, nil, 112, 120, 121, nil, 104, 105, 49, 50, - 48, 264, -745, -745, -745, -745, 281, 282, nil, nil, - -745, -745, nil, nil, nil, nil, nil, 274, 275, nil, - 45, nil, nil, 38, nil, nil, 66, 67, nil, nil, - 68, nil, 40, 261, nil, 267, 52, 263, 262, nil, - 259, 260, 280, 279, 265, 24, 266, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, nil, nil, - nil, 85, nil, 92, 106, 107, nil, nil, 46, 47, - 333, 81, 82, 83, 11, 65, nil, nil, nil, 71, - 72, nil, nil, nil, 75, nil, 73, 74, 76, 35, - 36, 79, 80, nil, nil, nil, nil, nil, 84, 33, - 32, 114, 113, 115, 116, nil, nil, 23, nil, nil, - nil, nil, nil, 10, 53, 335, 12, 118, 117, 119, - 108, 64, 110, 109, 111, nil, 112, 120, 121, nil, - 104, 105, 49, 50, 48, 264, -745, -745, -745, -745, - 281, 282, nil, nil, -745, -745, nil, nil, nil, nil, - nil, 274, 275, nil, 45, nil, nil, 38, nil, nil, - 66, 67, nil, nil, 68, nil, 40, 261, nil, 267, - 52, 263, 262, nil, 259, 260, 280, 279, 265, 24, - 266, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - nil, nil, nil, nil, nil, 85, nil, 92, 106, 107, - nil, nil, 46, 47, 333, 81, 82, 83, 11, 65, - nil, nil, nil, 71, 72, nil, nil, nil, 75, nil, - 73, 74, 76, 35, 36, 79, 80, nil, nil, nil, - nil, nil, 84, 33, 32, 114, 113, 115, 116, nil, - nil, 23, nil, nil, nil, nil, nil, 10, 53, 335, - 12, 118, 117, 119, 108, 64, 110, 109, 111, nil, - 112, 120, 121, nil, 104, 105, 49, 50, 48, 264, - 268, 269, 270, 271, 281, 282, nil, nil, 272, 273, - nil, nil, nil, nil, nil, 274, 275, nil, 45, nil, - nil, 38, nil, nil, 66, 67, nil, nil, 68, nil, - 40, 261, nil, 267, 52, 263, 262, nil, 259, 260, - 280, 279, 265, 24, 266, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, nil, nil, nil, 85, - nil, 92, 106, 107, nil, nil, 46, 47, 333, 81, - 82, 83, 11, 65, nil, nil, nil, 71, 72, nil, - nil, nil, 75, nil, 73, 74, 76, 35, 36, 79, - 80, nil, nil, nil, nil, nil, 84, 33, 32, 114, - 113, 115, 116, nil, nil, 23, nil, nil, nil, nil, - nil, 10, 53, 335, 12, 118, 117, 119, 108, 64, - 110, 109, 111, nil, 112, 120, 121, nil, 104, 105, - 49, 50, 48, 264, 268, 269, 270, 271, 281, 282, - 276, nil, 272, 273, nil, nil, nil, nil, nil, 274, - 275, nil, 45, nil, nil, 38, nil, nil, 66, 67, - nil, nil, 68, nil, 40, 261, nil, 267, 52, 263, - 262, nil, 259, 260, 280, 279, 265, 24, 266, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - nil, nil, nil, 85, nil, 92, 106, 107, nil, nil, - 46, 47, 333, 81, 82, 83, 11, 65, nil, nil, - nil, 71, 72, nil, nil, nil, 75, nil, 73, 74, - 76, 35, 36, 79, 80, nil, nil, nil, nil, nil, - 84, 33, 32, 114, 113, 115, 116, nil, nil, 23, - nil, nil, nil, nil, nil, 10, 53, 335, 12, 118, - 117, 119, 108, 64, 110, 109, 111, nil, 112, 120, - 121, nil, 104, 105, 49, 50, 48, 264, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 274, 275, nil, 45, nil, nil, 38, - nil, nil, 66, 67, nil, nil, 68, nil, 40, 261, - nil, 267, 52, 263, 262, nil, 259, 260, nil, nil, - 265, 24, 266, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, nil, nil, nil, 85, nil, 92, - 106, 107, nil, nil, 46, 47, 81, 82, 83, 11, - 65, nil, nil, nil, 71, 72, nil, nil, nil, 75, - nil, 73, 74, 76, 35, 36, 79, 80, nil, nil, - nil, nil, nil, 84, 33, 32, 114, 113, 115, 116, - nil, nil, 23, nil, nil, nil, nil, nil, 10, 53, - 9, 12, 118, 117, 119, 108, 64, 110, 109, 111, - nil, 112, 120, 121, nil, 104, 105, 49, 50, 48, - 264, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 274, 275, nil, 45, - nil, nil, 38, nil, nil, 66, 67, nil, nil, 68, - nil, 40, 261, nil, 267, 52, 263, 262, nil, 259, - 260, nil, nil, 265, 24, 266, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, 81, 82, 83, - 85, 65, 92, 106, 107, 71, 72, 46, 47, nil, - 75, nil, 73, 74, 76, 35, 36, 79, 80, nil, - nil, nil, nil, nil, 84, 33, 32, 114, 113, 115, - 116, nil, nil, 254, nil, nil, nil, nil, nil, nil, - 53, nil, nil, 118, 117, 119, 108, 64, 110, 109, - 111, nil, 112, 120, 121, nil, 104, 105, 49, 50, - 48, 264, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 274, 275, nil, - 245, nil, nil, 253, nil, nil, 66, 67, nil, nil, - 68, nil, nil, 261, nil, 267, 52, 263, 262, nil, - 259, 260, nil, nil, nil, 250, nil, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, nil, nil, - nil, 85, nil, 92, 106, 107, -441, nil, 46, 47, - nil, nil, nil, -441, -441, -441, nil, nil, -441, -441, - -441, 264, -441, nil, nil, nil, nil, nil, nil, nil, - -441, -441, -441, -441, nil, nil, nil, 274, 275, nil, - nil, nil, -441, -441, nil, -441, -441, -441, -441, -441, - nil, nil, nil, 261, nil, 267, nil, 263, 262, nil, - 259, 260, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, -441, -441, -441, -441, -441, -441, -441, -441, - -441, -441, -441, -441, -441, -441, nil, nil, -441, -441, - -441, nil, nil, -441, nil, 306, -441, nil, nil, -441, - -441, nil, -441, nil, -441, nil, -441, nil, -441, -441, - nil, -441, -441, -441, -441, -441, -327, -441, -441, -441, - nil, nil, nil, -327, -327, -327, nil, nil, -327, -327, - -327, nil, -327, -441, 264, nil, -441, -441, nil, -441, - -327, -441, -327, -327, nil, nil, nil, nil, -441, nil, - 274, 275, -327, -327, nil, -327, -327, -327, -327, -327, - nil, nil, nil, nil, nil, nil, 261, nil, nil, nil, - 263, 262, nil, 259, 260, nil, nil, nil, nil, nil, - nil, nil, -327, -327, -327, -327, -327, -327, -327, -327, - -327, -327, -327, -327, -327, -327, nil, nil, -327, -327, - -327, nil, nil, -327, nil, 315, -327, nil, nil, -327, - -327, nil, -327, nil, -327, nil, -327, nil, -327, -327, - nil, -327, -327, -327, -327, -327, nil, -327, nil, -327, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, -327, nil, nil, -327, -327, nil, -327, - nil, -327, 81, 82, 83, nil, 65, nil, -327, nil, - 71, 72, nil, nil, nil, 75, nil, 73, 74, 76, - 35, 36, 79, 80, nil, nil, nil, nil, nil, 84, - 33, 32, 114, 113, 115, 116, nil, nil, 254, nil, - nil, nil, nil, nil, nil, 53, nil, nil, 118, 117, - 119, 108, 64, 110, 109, 111, 327, 112, 120, 121, - nil, 104, 105, 49, 50, 48, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 245, nil, nil, 253, nil, - nil, 66, 67, nil, nil, 68, nil, 324, nil, 322, - nil, 52, nil, nil, 328, nil, nil, nil, nil, nil, - 250, nil, nil, nil, nil, 102, 325, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, 81, 82, 83, 85, 65, 92, 106, - 107, 71, 72, 46, 47, nil, 75, nil, 73, 74, - 76, 35, 36, 79, 80, nil, nil, nil, nil, nil, - 84, 33, 32, 114, 113, 115, 116, nil, nil, 254, - nil, nil, nil, nil, nil, nil, 53, nil, nil, 118, - 117, 119, 108, 64, 110, 109, 111, 327, 112, 120, - 121, nil, 104, 105, 49, 50, 48, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 245, nil, nil, 253, - nil, nil, 66, 67, nil, nil, 68, nil, 324, nil, - 322, nil, 52, nil, nil, 328, nil, nil, nil, nil, - nil, 250, nil, nil, nil, nil, 102, 325, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 81, 82, 83, 85, 65, 92, - 106, 107, 71, 72, 46, 47, nil, 75, nil, 73, - 74, 76, 35, 36, 79, 80, nil, nil, nil, nil, - nil, 84, 33, 32, 114, 113, 115, 116, nil, nil, - 254, nil, nil, nil, nil, nil, nil, 53, nil, nil, - 118, 117, 119, 108, 64, 110, 109, 111, 327, 112, - 120, 121, nil, 104, 105, 49, 50, 48, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 245, nil, nil, - 253, nil, nil, 66, 67, nil, nil, 68, nil, 324, - nil, 322, nil, 52, nil, nil, 328, nil, nil, nil, - nil, nil, 250, nil, nil, nil, nil, 102, 325, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 81, 82, 83, 85, 65, - 92, 106, 107, 71, 72, 46, 47, nil, 75, nil, - 73, 74, 76, 354, 355, 79, 80, nil, nil, nil, - nil, nil, 84, 349, 357, 114, 113, 115, 116, nil, - nil, 254, nil, nil, nil, nil, nil, nil, 53, nil, - nil, 118, 117, 119, 108, 64, 110, 109, 111, nil, - 112, 120, 121, nil, 104, 105, 49, 50, 48, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 245, nil, - nil, 253, nil, nil, 66, 67, nil, nil, 68, nil, - nil, nil, nil, nil, 52, nil, nil, nil, nil, nil, - nil, nil, nil, 250, nil, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, 81, 82, 83, 85, - 65, 92, 106, 107, 71, 72, 46, 47, nil, 75, - nil, 73, 74, 76, 354, 355, 79, 80, nil, nil, - nil, nil, nil, 84, 349, 357, 114, 113, 115, 116, - nil, nil, 254, nil, nil, nil, nil, nil, nil, 53, - nil, nil, 118, 117, 119, 108, 64, 110, 109, 111, - nil, 112, 120, 121, nil, 104, 105, 49, 50, 48, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 245, - nil, nil, 253, nil, nil, 66, 67, nil, nil, 68, - nil, nil, nil, nil, nil, 52, nil, nil, nil, nil, - nil, nil, nil, nil, 250, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, 81, 82, 83, - 85, 65, 92, 106, 107, 71, 72, 46, 47, nil, - 75, nil, 73, 74, 76, 354, 355, 79, 80, nil, - nil, nil, nil, nil, 84, 349, 357, 114, 113, 115, - 116, nil, nil, 254, nil, nil, nil, nil, nil, nil, - 53, nil, nil, 118, 117, 119, 108, 64, 110, 109, - 111, nil, 112, 120, 121, nil, 104, 105, 49, 50, - 48, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 245, nil, nil, 253, nil, nil, 66, 67, nil, nil, - 68, nil, nil, nil, nil, nil, 52, nil, nil, nil, - nil, nil, nil, nil, nil, 250, nil, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, 81, 82, - 83, 85, 65, 92, 106, 107, 71, 72, 46, 47, - nil, 75, nil, 73, 74, 76, 354, 355, 79, 80, - nil, nil, nil, nil, nil, 84, 349, 357, 114, 113, - 115, 116, nil, nil, 254, nil, nil, nil, nil, nil, - nil, 53, nil, nil, 118, 117, 119, 108, 64, 110, - 109, 111, nil, 112, 120, 121, nil, 104, 105, 49, - 50, 48, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 245, nil, nil, 253, nil, nil, 66, 67, nil, - nil, 68, nil, nil, nil, nil, nil, 52, nil, nil, - nil, nil, nil, nil, nil, nil, 250, nil, nil, nil, - nil, 102, 90, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, 81, - 82, 83, 85, 65, 92, 106, 107, 71, 72, 46, - 47, nil, 75, nil, 73, 74, 76, 354, 355, 79, - 80, nil, nil, nil, nil, nil, 84, 349, 357, 114, - 113, 115, 116, nil, nil, 254, nil, nil, nil, nil, - nil, nil, 53, nil, nil, 118, 117, 119, 108, 64, - 110, 109, 111, nil, 112, 120, 121, nil, 104, 105, - 49, 50, 48, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 245, nil, nil, 253, nil, nil, 66, 67, - nil, nil, 68, nil, nil, nil, nil, nil, 52, nil, - nil, nil, nil, nil, nil, nil, nil, 250, nil, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - nil, nil, nil, 85, nil, 92, 106, 107, -312, nil, - 46, 47, nil, nil, nil, -312, -312, -312, nil, nil, - -312, -312, -312, nil, -312, nil, nil, nil, nil, nil, - nil, nil, -312, nil, -312, -312, -312, nil, nil, nil, - 114, 113, 115, 116, -312, -312, nil, -312, -312, -312, - -312, -312, nil, nil, nil, nil, 118, 117, 119, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 104, - 105, nil, nil, 358, -312, -312, -312, -312, -312, -312, - -312, -312, -312, -312, -312, -312, -312, -312, nil, nil, - -312, -312, -312, nil, nil, -312, nil, nil, -312, nil, - nil, -312, -312, nil, -312, nil, -312, nil, -312, nil, - -312, -312, nil, -312, -312, -312, -312, -312, nil, -312, - nil, -312, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, -312, 91, 101, -312, -312, - -312, -312, nil, -312, 85, -312, 92, 106, 107, nil, - -312, 81, 82, 83, 11, 65, nil, nil, nil, 71, - 72, nil, nil, nil, 75, nil, 73, 74, 76, 35, - 36, 79, 80, nil, nil, nil, nil, nil, 84, 33, - 32, 114, 113, 115, 116, nil, nil, 23, nil, nil, - nil, nil, nil, 10, 53, nil, 12, 118, 117, 119, - 108, 64, 110, 109, 111, nil, 112, 120, 121, nil, - 104, 105, 49, 50, 48, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 45, nil, nil, 38, nil, nil, - 66, 67, nil, nil, 68, nil, 40, nil, nil, nil, - 52, nil, nil, nil, nil, nil, nil, nil, nil, 24, - nil, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - nil, nil, 81, 82, 83, 85, 65, 92, 106, 107, - 71, 72, 46, 47, nil, 75, nil, 73, 74, 76, - 354, 355, 79, 80, nil, nil, nil, nil, nil, 84, - 349, 357, 114, 113, 115, 116, nil, nil, 254, nil, - nil, nil, nil, nil, nil, 53, nil, nil, 118, 117, - 119, 108, 64, 110, 109, 111, 327, 112, 120, 121, - nil, 104, 105, 49, 50, 48, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 245, nil, nil, 253, nil, - nil, 66, 67, nil, nil, 68, nil, 324, nil, nil, - nil, 52, nil, nil, 328, nil, nil, nil, nil, nil, - 250, nil, nil, nil, nil, 102, 325, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, 81, 82, 83, 85, 65, 92, 106, - 107, 71, 72, 46, 47, nil, 75, nil, 73, 74, - 76, 354, 355, 79, 80, nil, nil, nil, nil, nil, - 84, 349, 357, 114, 113, 115, 116, nil, nil, 254, - nil, nil, nil, nil, nil, nil, 53, nil, nil, 118, - 117, 119, 108, 64, 110, 109, 111, 327, 112, 120, - 121, nil, 104, 105, 49, 50, 48, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 245, nil, nil, 253, - nil, nil, 66, 67, nil, nil, 68, nil, nil, nil, - nil, nil, 52, nil, nil, 328, nil, nil, nil, nil, - nil, 250, nil, nil, nil, nil, 102, 325, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 81, 82, 83, 85, 65, 92, - 106, 107, 71, 72, 46, 47, nil, 75, nil, 73, - 74, 76, 35, 36, 79, 80, nil, nil, nil, nil, - nil, 84, 33, 32, 114, 113, 115, 116, nil, nil, - 23, nil, nil, nil, nil, nil, nil, 53, nil, nil, - 118, 117, 119, 108, 64, 110, 109, 111, nil, 112, - 120, 121, nil, 104, 105, 49, 50, 48, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 245, nil, nil, - 253, nil, nil, 66, 67, nil, nil, 68, nil, nil, - nil, nil, nil, 52, nil, nil, nil, nil, nil, nil, - nil, nil, 24, nil, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 81, 82, 83, 85, 65, - 92, 106, 107, 71, 72, 46, 47, nil, 75, nil, - 73, 74, 76, 35, 36, 79, 80, nil, nil, nil, - nil, nil, 84, 33, 32, 114, 113, 115, 116, nil, - nil, 23, nil, nil, nil, nil, nil, nil, 53, nil, - nil, 118, 117, 119, 108, 64, 110, 109, 111, nil, - 112, 120, 121, nil, 104, 105, 49, 50, 48, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 245, nil, - nil, 253, nil, nil, 66, 67, nil, nil, 68, nil, - nil, nil, nil, nil, 52, nil, nil, nil, nil, nil, - nil, nil, nil, 24, nil, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, 81, 82, 83, 85, - 65, 92, 106, 107, 71, 72, 46, 47, nil, 75, - nil, 73, 74, 76, 35, 36, 79, 80, nil, nil, - nil, nil, nil, 84, 33, 32, 114, 113, 115, 116, - nil, nil, 23, nil, nil, nil, nil, nil, nil, 53, - nil, nil, 118, 117, 119, 108, 64, 110, 109, 111, - nil, 112, 120, 121, nil, 104, 105, 49, 50, 48, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 245, - nil, nil, 253, nil, nil, 66, 67, nil, nil, 68, - nil, nil, nil, nil, nil, 52, nil, nil, nil, nil, - nil, nil, nil, nil, 24, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, 126, nil, nil, nil, nil, 125, - 85, nil, 92, 106, 107, nil, nil, 46, 47, 81, - 82, 83, 11, 65, nil, nil, nil, 71, 72, nil, - nil, nil, 75, nil, 73, 74, 76, 35, 36, 79, - 80, nil, nil, nil, nil, nil, 84, 33, 32, 114, - 113, 115, 116, nil, nil, 23, nil, nil, nil, nil, - nil, 10, 53, 9, 12, 118, 117, 119, 108, 64, - 110, 109, 111, nil, 112, 120, 121, nil, 104, 105, - 49, 50, 48, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 45, nil, nil, 38, nil, nil, 66, 67, - nil, nil, 68, nil, 40, nil, nil, nil, 52, nil, - nil, nil, nil, nil, nil, nil, nil, 24, nil, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - nil, nil, 420, 85, nil, 92, 106, 107, nil, nil, - 46, 47, 81, 82, 83, nil, 65, nil, nil, nil, - 71, 72, nil, nil, nil, 75, nil, 73, 74, 76, - 35, 36, 79, 80, nil, nil, nil, nil, nil, 84, - 33, 32, 114, 113, 115, 116, nil, nil, 23, nil, - nil, nil, nil, nil, nil, 53, nil, nil, 118, 117, - 119, 108, 64, 110, 109, 111, nil, 112, 120, 121, - nil, 104, 105, 49, 50, 48, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 245, nil, nil, 253, nil, - nil, 66, 67, nil, nil, 68, nil, nil, nil, nil, - nil, 52, nil, nil, nil, nil, nil, nil, nil, nil, - 24, nil, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, 81, 82, 83, 85, 65, 92, 106, - 107, 71, 72, 46, 47, nil, 75, nil, 73, 74, - 76, 35, 36, 79, 80, nil, nil, nil, nil, nil, - 84, 33, 32, 114, 113, 115, 116, nil, nil, 23, - nil, nil, nil, nil, nil, nil, 53, nil, nil, 118, - 117, 119, 108, 64, 110, 109, 111, nil, 112, 120, - 121, nil, 104, 105, 49, 50, 48, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 245, nil, nil, 253, - nil, nil, 66, 67, nil, nil, 68, nil, nil, nil, - nil, nil, 52, nil, nil, nil, nil, nil, nil, nil, - nil, 24, nil, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 81, 82, 83, 85, 65, 92, - 106, 107, 71, 72, 46, 47, nil, 75, nil, 73, - 74, 76, 35, 36, 79, 80, nil, nil, nil, nil, - nil, 84, 33, 32, 114, 113, 115, 116, nil, nil, - 23, nil, nil, nil, nil, nil, nil, 53, nil, nil, - 118, 117, 119, 108, 64, 110, 109, 111, nil, 112, - 120, 121, nil, 104, 105, 49, 50, 48, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 245, nil, nil, - 253, nil, nil, 66, 67, nil, nil, 68, nil, nil, - nil, nil, nil, 52, nil, nil, nil, nil, nil, nil, - nil, nil, 24, nil, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 81, 82, 83, 85, 65, - 92, 106, 107, 71, 72, 46, 47, nil, 75, nil, - 73, 74, 76, 35, 36, 79, 80, nil, nil, nil, - nil, nil, 84, 33, 32, 114, 113, 115, 116, nil, - nil, 23, nil, nil, nil, nil, nil, nil, 53, nil, - nil, 118, 117, 119, 108, 64, 110, 109, 111, nil, - 112, 120, 121, nil, 104, 105, 49, 50, 48, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 245, nil, - nil, 253, nil, nil, 66, 67, nil, nil, 68, nil, - nil, nil, nil, nil, 52, nil, nil, nil, nil, nil, - nil, nil, nil, 24, nil, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, nil, nil, nil, 85, - nil, 92, 106, 107, nil, nil, 46, 47, 81, 82, - 83, 11, 65, nil, nil, nil, 71, 72, nil, nil, - nil, 75, nil, 73, 74, 76, 35, 36, 79, 80, - nil, nil, nil, nil, nil, 84, 33, 32, 114, 113, - 115, 116, nil, nil, 23, nil, nil, nil, nil, nil, - 10, 53, nil, 12, 118, 117, 119, 108, 64, 110, - 109, 111, nil, 112, 120, 121, nil, 104, 105, 49, - 50, 48, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 45, nil, nil, 38, nil, nil, 66, 67, nil, - nil, 68, nil, 40, nil, nil, nil, 52, nil, nil, - nil, nil, nil, nil, nil, nil, 24, nil, nil, nil, - nil, 102, 90, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, 81, - 82, 83, 85, 65, 92, 106, 107, 71, 72, 46, - 47, nil, 75, nil, 73, 74, 76, 35, 36, 79, - 80, nil, nil, nil, nil, nil, 84, 33, 32, 114, - 113, 115, 116, nil, nil, 254, nil, nil, nil, nil, - nil, nil, 53, nil, nil, 118, 117, 119, 108, 64, - 110, 109, 111, nil, 112, 120, 121, nil, 104, 105, - 49, 50, 48, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 245, nil, nil, 253, nil, nil, 66, 67, - nil, nil, 68, nil, 436, nil, nil, nil, 52, nil, - nil, nil, nil, nil, nil, nil, nil, 250, nil, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - 81, 82, 83, 85, 65, 92, 106, 107, 71, 72, - 46, 47, nil, 75, nil, 73, 74, 76, 35, 36, - 79, 80, nil, nil, nil, nil, nil, 84, 33, 32, - 114, 113, 115, 116, nil, nil, 254, nil, nil, nil, - nil, nil, nil, 53, nil, nil, 118, 117, 119, 108, - 64, 110, 109, 111, nil, 112, 120, 121, nil, 104, - 105, 49, 50, 48, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 245, nil, nil, 253, nil, nil, 66, - 67, nil, nil, 68, nil, 436, nil, nil, nil, 52, - nil, nil, nil, nil, nil, nil, nil, nil, 250, nil, - nil, nil, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, 81, 82, 83, 85, 65, 92, 106, 107, 71, - 72, 46, 47, nil, 75, nil, 73, 74, 76, 35, - 36, 79, 80, nil, nil, nil, nil, nil, 84, 33, - 32, 114, 113, 115, 116, nil, nil, 23, nil, nil, - nil, nil, nil, nil, 53, nil, nil, 118, 117, 119, - 108, 64, 110, 109, 111, nil, 112, 120, 121, nil, - 104, 105, 49, 50, 48, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 245, nil, nil, 253, nil, nil, - 66, 67, nil, nil, 68, nil, nil, nil, nil, nil, - 52, nil, nil, nil, nil, nil, nil, nil, nil, 24, - nil, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - nil, nil, 81, 82, 83, 85, 65, 92, 106, 107, - 71, 72, 46, 47, nil, 75, nil, 73, 74, 76, - 35, 36, 79, 80, nil, nil, nil, nil, nil, 84, - 33, 32, 114, 113, 115, 116, nil, nil, 23, nil, - nil, nil, nil, nil, nil, 53, nil, nil, 118, 117, - 119, 108, 64, 110, 109, 111, nil, 112, 120, 121, - nil, 104, 105, 49, 50, 48, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 245, nil, nil, 253, nil, - nil, 66, 67, nil, nil, 68, nil, nil, nil, nil, - nil, 52, nil, nil, nil, nil, nil, nil, nil, nil, - 24, nil, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, 81, 82, 83, 85, 65, 92, 106, - 107, 71, 72, 46, 47, nil, 75, nil, 73, 74, - 76, 35, 36, 79, 80, nil, nil, nil, nil, nil, - 84, 33, 32, 114, 113, 115, 116, nil, nil, 254, - nil, nil, nil, nil, nil, nil, 53, nil, nil, 118, - 117, 119, 108, 64, 110, 109, 111, nil, 112, 120, - 121, nil, 104, 105, 49, 50, 48, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 245, nil, nil, 253, - nil, nil, 66, 67, nil, nil, 68, nil, nil, nil, - nil, nil, 52, nil, nil, nil, nil, nil, nil, nil, - nil, 250, nil, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 81, 82, 83, 85, 65, 92, - 106, 107, 71, 72, 46, 47, nil, 75, nil, 73, - 74, 76, 35, 36, 79, 80, nil, nil, nil, nil, - nil, 84, 33, 32, 114, 113, 115, 116, nil, nil, - 254, nil, nil, nil, nil, nil, nil, 53, nil, nil, - 118, 117, 119, 108, 64, 110, 109, 111, 327, 112, - 120, 121, nil, 104, 105, 49, 50, 48, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 245, nil, nil, - 253, nil, nil, 66, 67, nil, nil, 68, nil, 324, - nil, 322, nil, 52, nil, nil, 328, nil, nil, nil, - nil, nil, 250, nil, nil, nil, nil, 102, 325, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 81, 82, 83, 85, 65, - 92, 106, 107, 71, 72, 46, 47, nil, 75, nil, - 73, 74, 76, 35, 36, 79, 80, nil, nil, nil, - nil, nil, 84, 33, 32, 114, 113, 115, 116, nil, - nil, 254, nil, nil, nil, nil, nil, nil, 53, nil, - nil, 118, 117, 119, 108, 64, 110, 109, 111, nil, - 112, 120, 121, nil, 104, 105, 49, 50, 48, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 245, nil, - nil, 253, nil, nil, 66, 67, nil, nil, 68, nil, - nil, nil, nil, nil, 52, nil, nil, nil, nil, nil, - nil, nil, nil, 250, nil, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, 81, 82, 83, 85, - 65, 92, 106, 107, 71, 72, 46, 47, nil, 75, - nil, 73, 74, 76, 35, 36, 79, 80, nil, nil, - nil, nil, nil, 84, 33, 32, 114, 113, 115, 116, - nil, nil, 23, nil, nil, nil, nil, nil, nil, 53, - nil, nil, 118, 117, 119, 108, 64, 110, 109, 111, - nil, 112, 120, 121, nil, 104, 105, 49, 50, 48, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 245, - nil, nil, 253, nil, nil, 66, 67, nil, nil, 68, - nil, nil, nil, nil, nil, 52, nil, nil, nil, nil, - nil, nil, nil, nil, 24, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, 81, 82, 83, - 85, 65, 92, 106, 107, 71, 72, 46, 47, nil, - 75, nil, 73, 74, 76, 35, 36, 79, 80, nil, - nil, nil, nil, nil, 84, 33, 32, 114, 113, 115, - 116, nil, nil, 23, nil, nil, nil, nil, nil, nil, - 53, nil, nil, 118, 117, 119, 108, 64, 110, 109, - 111, nil, 112, 120, 121, nil, 104, 105, 49, 50, - 48, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 245, nil, nil, 253, nil, nil, 66, 67, nil, nil, - 68, nil, nil, nil, nil, nil, 52, nil, nil, nil, - nil, nil, nil, nil, nil, 24, nil, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, 240, nil, nil, 81, 82, - 83, 85, 65, 92, 106, 107, 71, 72, 46, 47, - nil, 75, nil, 73, 74, 76, 354, 355, 79, 80, - nil, nil, nil, nil, nil, 84, 349, 357, 114, 113, - 115, 116, nil, nil, 254, nil, nil, nil, nil, nil, - nil, 53, nil, nil, 118, 117, 119, 108, 64, 110, - 109, 111, nil, 112, 120, 121, nil, 104, 105, 49, - 50, 48, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 245, nil, nil, 253, nil, nil, 66, 67, nil, - nil, 68, nil, nil, nil, nil, nil, 52, nil, nil, - nil, nil, nil, nil, nil, nil, 250, nil, nil, nil, - nil, 102, 90, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, 81, - 82, 83, 85, 65, 92, 106, 107, 71, 72, 46, - 47, nil, 75, nil, 73, 74, 76, 354, 355, 79, - 80, nil, nil, nil, nil, nil, 84, 349, 357, 114, - 113, 115, 116, nil, nil, 254, nil, nil, nil, nil, - nil, nil, 53, nil, nil, 118, 117, 119, 108, 64, - 110, 109, 111, nil, 112, 120, 121, nil, 104, 105, - 49, 50, 48, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 245, nil, nil, 253, nil, nil, 66, 67, - nil, nil, 68, nil, nil, nil, nil, nil, 52, nil, - nil, nil, nil, nil, nil, nil, nil, 250, nil, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - 81, 82, 83, 85, 65, 92, 106, 107, 71, 72, - 46, 47, nil, 75, nil, 73, 74, 76, 354, 355, - 79, 80, nil, nil, nil, nil, nil, 84, 349, 357, - 114, 113, 115, 116, nil, nil, 254, nil, nil, nil, - nil, nil, nil, 53, nil, nil, 118, 117, 119, 108, - 64, 110, 109, 111, nil, 112, 120, 121, nil, 104, - 105, 49, 50, 48, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 245, nil, nil, 253, nil, nil, 66, - 67, nil, nil, 68, nil, nil, nil, nil, nil, 52, - nil, nil, nil, nil, nil, nil, nil, nil, 250, nil, - nil, nil, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, 81, 82, 83, 85, 65, 92, 106, 107, 71, - 72, 46, 47, nil, 75, nil, 73, 74, 76, 354, - 355, 79, 80, nil, nil, nil, nil, nil, 84, 349, - 357, 114, 113, 115, 116, nil, nil, 254, nil, nil, - nil, nil, nil, nil, 53, nil, nil, 118, 117, 119, - 108, 64, 110, 109, 111, nil, 112, 120, 121, nil, - 104, 105, 49, 50, 48, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 245, nil, nil, 253, nil, nil, - 66, 67, nil, nil, 68, nil, nil, nil, nil, nil, - 52, nil, nil, nil, nil, nil, nil, nil, nil, 250, - nil, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - nil, nil, 81, 82, 83, 85, 65, 92, 106, 107, - 71, 72, 46, 47, nil, 75, nil, 73, 74, 76, - 354, 355, 79, 80, nil, nil, nil, nil, nil, 84, - 349, 357, 114, 113, 115, 116, nil, nil, 254, nil, - nil, nil, nil, nil, nil, 53, nil, nil, 118, 117, - 119, 108, 64, 110, 109, 111, nil, 112, 120, 121, - nil, 104, 105, 49, 50, 48, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 245, nil, nil, 253, nil, - nil, 66, 67, nil, nil, 68, nil, nil, nil, nil, - nil, 52, nil, nil, nil, nil, nil, nil, nil, nil, - 250, nil, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, 81, 82, 83, 85, 65, 92, 106, - 107, 71, 72, 46, 47, nil, 75, nil, 73, 74, - 76, 354, 355, 79, 80, nil, nil, nil, nil, nil, - 84, 349, 357, 114, 113, 115, 116, nil, nil, 254, - nil, nil, nil, nil, nil, nil, 53, nil, nil, 118, - 117, 119, 108, 64, 110, 109, 111, nil, 112, 120, - 121, nil, 104, 105, 49, 50, 48, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 245, nil, nil, 253, - nil, nil, 66, 67, nil, nil, 68, nil, nil, nil, - nil, nil, 52, nil, nil, nil, nil, nil, nil, nil, - nil, 250, nil, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 81, 82, 83, 85, 65, 92, - 106, 107, 71, 72, 46, 47, nil, 75, nil, 73, - 74, 76, 354, 355, 79, 80, nil, nil, nil, nil, - nil, 84, 349, 357, 114, 113, 115, 116, nil, nil, - 254, nil, nil, nil, nil, nil, nil, 53, nil, nil, - 118, 117, 119, 108, 64, 110, 109, 111, nil, 112, - 120, 121, nil, 104, 105, 49, 50, 48, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 245, nil, nil, - 253, nil, nil, 66, 67, nil, nil, 68, nil, nil, - nil, nil, nil, 52, nil, nil, nil, nil, nil, nil, - nil, nil, 250, nil, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 81, 82, 83, 85, 65, - 92, 106, 107, 71, 72, 46, 47, nil, 75, nil, - 73, 74, 76, 354, 355, 79, 80, nil, nil, nil, - nil, nil, 84, 349, 357, 114, 113, 115, 116, nil, - nil, 254, nil, nil, nil, nil, nil, nil, 53, nil, - nil, 118, 117, 119, 108, 64, 110, 109, 111, nil, - 112, 120, 121, nil, 104, 105, 49, 50, 48, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 245, nil, - nil, 253, nil, nil, 66, 67, nil, nil, 68, nil, - nil, nil, nil, nil, 52, nil, nil, nil, nil, nil, - nil, nil, nil, 250, nil, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, 81, 82, 83, 85, - 65, 92, 106, 107, 71, 72, 46, 47, nil, 75, - nil, 73, 74, 76, 354, 355, 79, 80, nil, nil, - nil, nil, nil, 84, 349, 357, 114, 113, 115, 116, - nil, nil, 254, nil, nil, nil, nil, nil, nil, 53, - nil, nil, 118, 117, 119, 108, 64, 110, 109, 111, - nil, 112, 120, 121, nil, 104, 105, 49, 50, 48, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 245, - nil, nil, 253, nil, nil, 66, 67, nil, nil, 68, - nil, nil, nil, nil, nil, 52, nil, nil, nil, nil, - nil, nil, nil, nil, 250, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, 81, 82, 83, - 85, 65, 92, 106, 107, 71, 72, 46, 47, nil, - 75, nil, 73, 74, 76, 354, 355, 79, 80, nil, - nil, nil, nil, nil, 84, 349, 357, 114, 113, 115, - 116, nil, nil, 254, nil, nil, nil, nil, nil, nil, - 53, nil, nil, 118, 117, 119, 108, 64, 110, 109, - 111, nil, 112, 120, 121, nil, 104, 105, 49, 50, - 48, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 245, nil, nil, 253, nil, nil, 66, 67, nil, nil, - 68, nil, nil, nil, nil, nil, 52, nil, nil, nil, - nil, nil, nil, nil, nil, 250, nil, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, 81, 82, - 83, 85, 65, 92, 106, 107, 71, 72, 46, 47, - nil, 75, nil, 73, 74, 76, 354, 355, 79, 80, - nil, nil, nil, nil, nil, 84, 349, 357, 114, 113, - 115, 116, nil, nil, 254, nil, nil, nil, nil, nil, - nil, 53, nil, nil, 118, 117, 119, 108, 64, 110, - 109, 111, nil, 112, 120, 121, nil, 104, 105, 49, - 50, 48, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 245, nil, nil, 253, nil, nil, 66, 67, nil, - nil, 68, nil, nil, nil, nil, nil, 52, nil, nil, - nil, nil, nil, nil, nil, nil, 250, nil, nil, nil, - nil, 102, 90, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, 81, - 82, 83, 85, 65, 92, 106, 107, 71, 72, 46, - 47, nil, 75, nil, 73, 74, 76, 354, 355, 79, - 80, nil, nil, nil, nil, nil, 84, 349, 357, 114, - 113, 115, 116, nil, nil, 254, nil, nil, nil, nil, - nil, nil, 53, nil, nil, 118, 117, 119, 108, 64, - 110, 109, 111, nil, 112, 120, 121, nil, 104, 105, - 49, 50, 48, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 245, nil, nil, 253, nil, nil, 66, 67, - nil, nil, 68, nil, nil, nil, nil, nil, 52, nil, - nil, nil, nil, nil, nil, nil, nil, 250, nil, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - 81, 82, 83, 85, 65, 92, 106, 107, 71, 72, - 46, 47, nil, 75, nil, 73, 74, 76, 354, 355, - 79, 80, nil, nil, nil, nil, nil, 84, 349, 357, - 114, 113, 115, 116, nil, nil, 254, nil, nil, nil, - nil, nil, nil, 53, nil, nil, 118, 117, 119, 108, - 64, 110, 109, 111, nil, 112, 120, 121, nil, 104, - 105, 49, 50, 48, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 245, nil, nil, 253, nil, nil, 66, - 67, nil, nil, 68, nil, nil, nil, nil, nil, 52, - nil, nil, nil, nil, nil, nil, nil, nil, 250, nil, - nil, nil, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, 81, 82, 83, 85, 65, 92, 106, 107, 71, - 72, 46, 47, nil, 75, nil, 73, 74, 76, 354, - 355, 79, 80, nil, nil, nil, nil, nil, 84, 349, - 357, 114, 113, 115, 116, nil, nil, 254, nil, nil, - nil, nil, nil, nil, 53, nil, nil, 118, 117, 119, - 108, 64, 110, 109, 111, nil, 112, 120, 121, nil, - 104, 105, 49, 50, 48, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 245, nil, nil, 253, nil, nil, - 66, 67, nil, nil, 68, nil, nil, nil, nil, nil, - 52, nil, nil, nil, nil, nil, nil, nil, nil, 250, - nil, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - nil, nil, 81, 82, 83, 85, 65, 92, 106, 107, - 71, 72, 46, 47, nil, 75, nil, 73, 74, 76, - 354, 355, 79, 80, nil, nil, nil, nil, nil, 84, - 349, 357, 114, 113, 115, 116, nil, nil, 254, nil, - nil, nil, nil, nil, nil, 53, nil, nil, 118, 117, - 119, 108, 64, 110, 109, 111, nil, 112, 120, 121, - nil, 104, 105, 49, 50, 48, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 245, nil, nil, 253, nil, - nil, 66, 67, nil, nil, 68, nil, nil, nil, nil, - nil, 52, nil, nil, nil, nil, nil, nil, nil, nil, - 250, nil, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, 81, 82, 83, 85, 65, 92, 106, - 107, 71, 72, 46, 47, nil, 75, nil, 73, 74, - 76, 354, 355, 79, 80, nil, nil, nil, nil, nil, - 84, 349, 357, 114, 113, 115, 116, nil, nil, 254, - nil, nil, nil, nil, nil, nil, 53, nil, nil, 118, - 117, 119, 108, 64, 110, 109, 111, nil, 112, 120, - 121, nil, 104, 105, 49, 50, 48, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 245, nil, nil, 253, - nil, nil, 66, 67, nil, nil, 68, nil, nil, nil, - nil, nil, 52, nil, nil, nil, nil, nil, nil, nil, - nil, 250, nil, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 81, 82, 83, 85, 65, 92, - 106, 107, 71, 72, 46, 47, nil, 75, nil, 73, - 74, 76, 354, 355, 79, 80, nil, nil, nil, nil, - nil, 84, 349, 357, 114, 113, 115, 116, nil, nil, - 254, nil, nil, nil, nil, nil, nil, 53, nil, nil, - 118, 117, 119, 108, 64, 110, 109, 111, nil, 112, - 120, 121, nil, 104, 105, 49, 50, 48, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 245, nil, nil, - 253, nil, nil, 66, 67, nil, nil, 68, nil, nil, - nil, nil, nil, 52, nil, nil, nil, nil, nil, nil, - nil, nil, 250, nil, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 81, 82, 83, 85, 65, - 92, 106, 107, 71, 72, 46, 47, nil, 75, nil, - 73, 74, 76, 354, 355, 79, 80, nil, nil, nil, - nil, nil, 84, 349, 357, 114, 113, 115, 116, nil, - nil, 254, nil, nil, nil, nil, nil, nil, 53, nil, - nil, 118, 117, 119, 108, 64, 110, 109, 111, nil, - 112, 120, 121, nil, 104, 105, 49, 50, 48, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 245, nil, - nil, 253, nil, nil, 66, 67, nil, nil, 68, nil, - nil, nil, nil, nil, 52, nil, nil, nil, nil, nil, - nil, nil, nil, 250, nil, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, 81, 82, 83, 85, - 65, 92, 106, 107, 71, 72, 46, 47, nil, 75, - nil, 73, 74, 76, 354, 355, 79, 80, nil, nil, - nil, nil, nil, 84, 349, 357, 114, 113, 115, 116, - nil, nil, 254, nil, nil, nil, nil, nil, nil, 53, - nil, nil, 118, 117, 119, 108, 64, 110, 109, 111, - nil, 112, 120, 121, nil, 104, 105, 49, 50, 48, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 245, - nil, nil, 253, nil, nil, 66, 67, nil, nil, 68, - nil, nil, nil, nil, nil, 52, nil, nil, nil, nil, - nil, nil, nil, nil, 250, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, 81, 82, 83, - 85, 65, 92, 106, 107, 71, 72, 46, 47, nil, - 75, nil, 73, 74, 76, 354, 355, 79, 80, nil, - nil, nil, nil, nil, 84, 349, 357, 114, 113, 115, - 116, nil, nil, 254, nil, nil, nil, nil, nil, nil, - 53, nil, nil, 118, 117, 119, 108, 64, 110, 109, - 111, nil, 112, 120, 121, nil, 104, 105, 49, 50, - 48, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 245, nil, nil, 253, nil, nil, 66, 67, nil, nil, - 68, nil, nil, nil, nil, nil, 52, nil, nil, nil, - nil, nil, nil, nil, nil, 250, nil, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, 81, 82, - 83, 85, 65, 92, 106, 107, 71, 72, 46, 47, - nil, 75, nil, 73, 74, 76, 354, 355, 79, 80, - nil, nil, nil, nil, nil, 84, 349, 357, 114, 113, - 115, 116, nil, nil, 254, nil, nil, nil, nil, nil, - nil, 53, nil, nil, 118, 117, 119, 108, 64, 110, - 109, 111, nil, 112, 120, 121, nil, 104, 105, 49, - 50, 48, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 245, nil, nil, 253, nil, nil, 66, 67, nil, - nil, 68, nil, nil, nil, nil, nil, 52, nil, nil, - nil, nil, nil, nil, nil, nil, 250, nil, nil, nil, - nil, 102, 90, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, 81, - 82, 83, 85, 65, 92, 106, 107, 71, 72, 46, - 47, nil, 75, nil, 73, 74, 76, 354, 355, 79, - 80, nil, nil, nil, nil, nil, 84, 349, 357, 114, - 113, 115, 116, nil, nil, 254, nil, nil, nil, nil, - nil, nil, 53, nil, nil, 118, 117, 119, 108, 64, - 110, 109, 111, nil, 112, 120, 121, nil, 104, 105, - 49, 50, 48, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 245, nil, nil, 253, nil, nil, 66, 67, - nil, nil, 68, nil, nil, nil, nil, nil, 52, nil, - nil, nil, nil, nil, nil, nil, nil, 250, nil, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - 81, 82, 83, 85, 65, 92, 106, 107, 71, 72, - 46, 47, nil, 75, nil, 73, 74, 76, 354, 355, - 79, 80, nil, nil, nil, nil, nil, 84, 349, 357, - 114, 113, 115, 116, nil, nil, 254, nil, nil, nil, - nil, nil, nil, 53, nil, nil, 118, 117, 119, 108, - 64, 110, 109, 111, nil, 112, 120, 121, nil, 104, - 105, 49, 50, 48, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 245, nil, nil, 253, nil, nil, 66, - 67, nil, nil, 68, nil, nil, nil, nil, nil, 52, - nil, nil, nil, nil, nil, nil, nil, nil, 250, nil, - nil, nil, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, 81, 82, 83, 85, 65, 92, 106, 107, 71, - 72, 46, 47, nil, 75, nil, 73, 74, 76, 354, - 355, 79, 80, nil, nil, nil, nil, nil, 84, 349, - 357, 114, 113, 115, 116, nil, nil, 254, nil, nil, - nil, nil, nil, nil, 53, nil, nil, 118, 117, 119, - 108, 64, 110, 109, 111, nil, 112, 120, 121, nil, - 104, 105, 49, 50, 48, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 245, nil, nil, 253, nil, nil, - 66, 67, nil, nil, 68, nil, nil, nil, nil, nil, - 52, nil, nil, nil, nil, nil, nil, nil, nil, 250, - nil, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - nil, nil, 81, 82, 83, 85, 65, 92, 106, 107, - 71, 72, 46, 47, nil, 75, nil, 73, 74, 76, - 35, 36, 79, 80, nil, nil, nil, nil, nil, 84, - 33, 32, 114, 113, 115, 116, nil, nil, 23, nil, - nil, nil, nil, nil, nil, 53, nil, nil, 118, 117, - 119, 108, 64, 110, 109, 111, nil, 112, 120, 121, - nil, 104, 105, 49, 50, 48, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 245, nil, nil, 253, nil, - nil, 66, 67, nil, nil, 68, nil, nil, nil, nil, - nil, 52, nil, nil, nil, nil, nil, nil, nil, nil, - 24, nil, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, 81, 82, 83, 85, 65, 92, 106, - 107, 71, 72, 46, 47, nil, 75, nil, 73, 74, - 76, 35, 36, 79, 80, nil, nil, nil, nil, nil, - 84, 33, 32, 114, 113, 115, 116, nil, nil, 254, - nil, nil, nil, nil, nil, nil, 53, nil, nil, 118, - 117, 119, 108, 64, 110, 109, 111, 327, 112, 120, - 121, nil, 104, 105, 49, 50, 48, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 245, nil, nil, 253, - nil, nil, 66, 67, nil, nil, 68, nil, 324, nil, - 322, nil, 52, nil, nil, 328, nil, nil, nil, nil, - nil, 250, nil, nil, nil, nil, 102, 325, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 81, 82, 83, 85, 65, 92, - 106, 107, 71, 72, 46, 560, nil, 75, nil, 73, - 74, 76, 35, 36, 79, 80, nil, nil, nil, nil, - nil, 84, 33, 32, 114, 113, 115, 116, nil, nil, - 254, nil, nil, nil, nil, nil, nil, 53, nil, nil, - 118, 117, 119, 108, 64, 110, 109, 111, 327, 112, - 120, 121, nil, 104, 105, 49, 50, 48, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 245, nil, nil, - 253, nil, nil, 66, 67, nil, nil, 68, nil, 324, - nil, 322, nil, 52, nil, nil, 328, nil, nil, nil, - nil, nil, 250, nil, nil, nil, nil, 102, 325, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 81, 82, 83, 85, 65, - 92, 106, 107, 71, 72, 46, 47, nil, 75, nil, - 73, 74, 76, 35, 36, 79, 80, nil, nil, nil, - nil, nil, 84, 33, 32, 114, 113, 115, 116, nil, - nil, 254, nil, nil, nil, nil, nil, nil, 53, nil, - nil, 118, 117, 119, 108, 64, 110, 109, 111, 327, - 112, 120, 121, nil, 104, 105, 49, 50, 48, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 245, nil, - nil, 253, nil, nil, 66, 67, nil, nil, 68, nil, - 324, nil, 322, nil, 52, nil, nil, 328, nil, nil, - nil, nil, nil, 250, nil, nil, nil, nil, 102, 325, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, 240, nil, nil, 81, 82, 83, 85, - 65, 92, 106, 107, 71, 72, 46, 47, nil, 75, - nil, 73, 74, 76, 354, 355, 79, 80, nil, nil, - nil, nil, nil, 84, 349, 357, 114, 113, 115, 116, - nil, nil, 254, nil, nil, nil, nil, nil, nil, 53, - nil, nil, 118, 117, 119, 108, 64, 110, 109, 111, - nil, 112, 120, 121, nil, 104, 105, 49, 50, 48, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 245, - nil, nil, 253, nil, nil, 66, 67, nil, nil, 68, - nil, nil, nil, nil, nil, 52, nil, nil, nil, nil, - nil, nil, nil, nil, 250, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, 81, 82, 83, - 85, 65, 92, 106, 107, 71, 72, 46, 47, nil, - 75, nil, 73, 74, 76, 354, 355, 79, 80, nil, - nil, nil, nil, nil, 84, 349, 357, 114, 113, 115, - 116, nil, nil, 254, nil, nil, nil, nil, nil, nil, - 53, nil, nil, 118, 117, 119, 108, 64, 110, 109, - 111, nil, 112, 120, 121, nil, 104, 105, 49, 50, - 48, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 245, nil, nil, 253, nil, nil, 66, 67, nil, nil, - 68, nil, nil, nil, nil, nil, 52, nil, nil, nil, - nil, nil, nil, nil, nil, 250, nil, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, 81, 82, - 83, 85, 65, 92, 106, 107, 71, 72, 46, 47, - nil, 75, nil, 73, 74, 76, 354, 355, 79, 80, - nil, nil, nil, nil, nil, 84, 349, 357, 114, 113, - 115, 116, nil, nil, 254, nil, nil, nil, nil, nil, - nil, 53, nil, nil, 118, 117, 119, 108, 64, 110, - 109, 111, nil, 112, 120, 121, nil, 104, 105, 49, - 50, 48, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 245, nil, nil, 253, nil, nil, 66, 67, nil, - nil, 68, nil, nil, nil, nil, nil, 52, nil, nil, - nil, nil, nil, nil, nil, nil, 250, nil, nil, nil, - nil, 102, 90, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, 81, - 82, 83, 85, 65, 92, 106, 107, 71, 72, 46, - 47, nil, 75, nil, 73, 74, 76, 354, 355, 79, - 80, nil, nil, nil, nil, nil, 84, 349, 357, 114, - 113, 115, 116, nil, nil, 254, nil, nil, nil, nil, - nil, nil, 53, nil, nil, 118, 117, 119, 108, 64, - 110, 109, 111, nil, 112, 120, 121, nil, 104, 105, - 49, 50, 48, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 245, nil, nil, 253, nil, nil, 66, 67, - nil, nil, 68, nil, nil, nil, nil, nil, 52, nil, - nil, nil, nil, nil, nil, nil, nil, 250, nil, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - nil, nil, nil, 85, nil, 92, 106, 107, nil, nil, - 46, 47, 81, 82, 83, 11, 65, nil, nil, nil, - 71, 72, nil, nil, nil, 75, nil, 73, 74, 76, - 35, 36, 79, 80, nil, nil, nil, nil, nil, 84, - 33, 32, 114, 113, 115, 116, nil, nil, 23, nil, - nil, nil, nil, nil, 10, 53, nil, 12, 118, 117, - 119, 108, 64, 110, 109, 111, nil, 112, 120, 121, - nil, 104, 105, 49, 50, 48, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 45, nil, nil, 38, nil, - nil, 66, 67, nil, nil, 68, nil, 40, nil, nil, - nil, 52, nil, nil, nil, nil, nil, nil, nil, nil, - 24, nil, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, 81, 82, 83, 85, 65, 92, 106, - 107, 71, 72, 46, 47, nil, 75, nil, 73, 74, - 76, 354, 355, 79, 80, nil, nil, nil, nil, nil, - 84, 349, 357, 114, 113, 115, 116, nil, nil, 254, - nil, nil, nil, nil, nil, nil, 53, nil, nil, 118, - 117, 119, 108, 64, 110, 109, 111, nil, 112, 120, - 121, nil, 104, 105, 49, 50, 48, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 245, nil, nil, 253, - nil, nil, 66, 67, nil, nil, 68, nil, nil, nil, - nil, nil, 52, nil, nil, nil, nil, nil, nil, nil, - nil, 250, nil, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 81, 82, 83, 85, 65, 92, - 106, 107, 71, 72, 46, 47, nil, 75, nil, 73, - 74, 76, 35, 36, 79, 80, nil, nil, nil, nil, - nil, 84, 33, 32, 114, 113, 115, 116, nil, nil, - 23, nil, nil, nil, nil, nil, nil, 53, nil, nil, - 118, 117, 119, 108, 64, 110, 109, 111, nil, 112, - 120, 121, nil, 104, 105, 49, 50, 48, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 245, nil, nil, - 253, nil, nil, 66, 67, nil, nil, 68, nil, nil, - nil, nil, nil, 52, nil, nil, nil, nil, nil, nil, - nil, nil, 24, nil, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 81, 82, 83, 85, 65, - 92, 106, 107, 71, 72, 46, 47, nil, 75, nil, - 73, 74, 76, 35, 36, 79, 80, nil, nil, nil, - nil, nil, 84, 33, 32, 114, 113, 115, 116, nil, - nil, 23, nil, nil, nil, nil, nil, nil, 53, nil, - nil, 118, 117, 119, 108, 64, 110, 109, 111, nil, - 112, 120, 121, nil, 104, 105, 49, 50, 48, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 245, nil, - nil, 253, nil, nil, 66, 67, nil, nil, 68, nil, - nil, nil, nil, nil, 52, nil, nil, nil, nil, nil, - nil, nil, nil, 24, nil, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, 81, 82, 83, 85, - 65, 92, 106, 107, 71, 72, 46, 47, nil, 75, - nil, 73, 74, 76, 354, 355, 79, 80, nil, nil, - nil, nil, nil, 84, 349, 357, 114, 113, 115, 116, - nil, nil, 254, nil, nil, nil, nil, nil, nil, 53, - nil, nil, 118, 117, 119, 108, 64, 110, 109, 111, - nil, 112, 120, 121, nil, 104, 105, 49, 50, 48, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 245, - nil, nil, 253, nil, nil, 66, 67, nil, nil, 68, - nil, nil, nil, nil, nil, 52, nil, nil, nil, nil, - nil, nil, nil, nil, 250, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, nil, nil, nil, - 85, nil, 92, 106, 107, -275, nil, 46, 47, nil, - nil, nil, -275, -275, -275, nil, nil, -275, -275, -275, - nil, -275, nil, nil, nil, nil, nil, nil, nil, -275, - -275, -275, -275, nil, nil, nil, nil, nil, nil, nil, - nil, -275, -275, nil, -275, -275, -275, -275, -275, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, -275, -275, -275, -275, -275, -275, -275, -275, -275, - -275, -275, -275, -275, -275, nil, nil, -275, -275, -275, - nil, nil, -275, nil, 306, -275, nil, nil, -275, -275, - nil, -275, nil, -275, nil, -275, nil, -275, -275, nil, - -275, -275, -275, -275, -275, nil, -275, -275, -275, 491, - nil, 488, 487, 486, 496, 489, nil, nil, nil, nil, - nil, nil, -275, nil, 499, -275, -275, -724, -275, nil, - -275, nil, nil, nil, -724, -724, -724, -275, nil, -724, - -724, -724, nil, -724, nil, nil, 494, nil, nil, nil, - nil, -724, -724, -724, -724, -724, nil, 507, 506, nil, - nil, nil, 500, -724, -724, nil, -724, -724, -724, -724, - -724, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, -724, -724, -724, -724, -724, -724, -724, - -724, -724, -724, -724, -724, -724, -724, nil, nil, -724, - -724, -724, nil, nil, -724, nil, nil, -724, nil, nil, - -724, -724, nil, -724, nil, -724, nil, -724, nil, -724, - -724, nil, -724, -724, -724, -724, -724, nil, -724, -724, - -724, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, -724, nil, nil, -724, -724, -724, - -724, nil, -724, -725, -724, nil, nil, nil, nil, -724, - -725, -725, -725, nil, nil, -725, -725, -725, nil, -725, - nil, nil, nil, nil, nil, nil, nil, -725, -725, -725, - -725, -725, nil, nil, nil, nil, nil, nil, nil, -725, - -725, nil, -725, -725, -725, -725, -725, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, -725, - -725, -725, -725, -725, -725, -725, -725, -725, -725, -725, - -725, -725, -725, nil, nil, -725, -725, -725, nil, nil, - -725, nil, nil, -725, nil, nil, -725, -725, nil, -725, - nil, -725, nil, -725, nil, -725, -725, nil, -725, -725, - -725, -725, -725, nil, -725, -725, -725, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - -725, nil, nil, -725, -725, -725, -725, nil, -725, nil, - -725, nil, 81, 82, 83, -725, 65, nil, nil, nil, - 71, 72, nil, nil, nil, 75, nil, 73, 74, 76, - 35, 36, 79, 80, nil, nil, nil, nil, nil, 84, - 33, 32, 114, 113, 115, 116, nil, nil, 254, nil, - nil, nil, nil, nil, nil, 53, nil, nil, 118, 117, - 119, 108, 64, 110, 109, 111, nil, 112, 120, 121, - nil, 104, 105, 49, 50, 48, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 245, nil, nil, 253, nil, - nil, 66, 67, nil, nil, 68, nil, nil, nil, nil, - nil, 52, nil, nil, nil, nil, nil, nil, nil, nil, - 250, nil, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, 81, 82, 83, 85, 65, 92, 106, - 107, 71, 72, 46, 47, nil, 75, nil, 73, 74, - 76, 354, 355, 79, 80, nil, nil, nil, nil, nil, - 84, 349, 357, 114, 113, 115, 116, nil, nil, 254, - nil, nil, nil, nil, nil, nil, 53, nil, nil, 118, - 117, 119, 108, 64, 110, 109, 111, nil, 112, 120, - 121, nil, 104, 105, 49, 50, 48, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 245, nil, nil, 253, - nil, nil, 66, 67, nil, nil, 68, nil, nil, nil, - nil, nil, 52, nil, nil, nil, nil, nil, nil, nil, - nil, 250, nil, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 81, 82, 83, 85, 65, 92, - 106, 107, 71, 72, 46, 47, nil, 75, nil, 73, - 74, 76, 35, 36, 79, 80, nil, nil, nil, nil, - nil, 84, 33, 32, 114, 113, 115, 116, nil, nil, - 254, nil, nil, nil, nil, nil, nil, 53, nil, nil, - 118, 117, 119, 108, 64, 110, 109, 111, nil, 112, - 120, 121, nil, 104, 105, 49, 50, 48, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 245, nil, nil, - 253, nil, nil, 66, 67, nil, nil, 68, nil, nil, - nil, nil, nil, 52, nil, nil, nil, nil, nil, nil, - nil, nil, 250, nil, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 81, 82, 83, 85, 65, - 92, 106, 107, 71, 72, 46, 47, nil, 75, nil, - 73, 74, 76, 35, 36, 79, 80, nil, nil, nil, - nil, nil, 84, 33, 32, 114, 113, 115, 116, nil, - nil, 254, nil, nil, nil, nil, nil, nil, 53, nil, - nil, 118, 117, 119, 108, 64, 110, 109, 111, 327, - 112, 120, 121, nil, 104, 105, 49, 50, 48, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 245, nil, - nil, 253, nil, nil, 66, 67, nil, nil, 68, nil, - 324, nil, 322, nil, 52, nil, nil, 328, nil, nil, - nil, nil, nil, 250, nil, nil, nil, nil, 102, 325, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, 81, 82, 83, 85, - 65, 92, 106, 107, 71, 72, 46, 47, nil, 75, - nil, 73, 74, 76, 354, 355, 79, 80, nil, nil, - nil, nil, nil, 84, 349, 357, 114, 113, 115, 116, - nil, nil, 254, nil, nil, nil, nil, nil, nil, 53, - nil, nil, 118, 117, 119, 108, 64, 110, 109, 111, - nil, 112, 120, 121, nil, 104, 105, 49, 50, 48, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 245, - nil, nil, 253, nil, nil, 66, 67, nil, nil, 68, - nil, nil, nil, nil, nil, 52, nil, nil, nil, nil, - nil, nil, nil, nil, 250, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, 81, 82, 83, - 85, 65, 92, 106, 107, 71, 72, 46, 47, nil, - 75, nil, 73, 74, 76, 354, 355, 79, 80, nil, - nil, nil, nil, nil, 84, 349, 357, 114, 113, 115, - 116, nil, nil, 254, nil, nil, nil, nil, nil, nil, - 53, nil, nil, 118, 117, 119, 108, 64, 110, 109, - 111, nil, 112, 120, 121, nil, 104, 105, 49, 50, - 48, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 245, nil, nil, 253, nil, nil, 66, 67, nil, nil, - 68, nil, nil, nil, nil, nil, 52, nil, nil, nil, - nil, nil, nil, nil, nil, 250, nil, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, 81, 82, - 83, 85, 65, 92, 106, 107, 71, 72, 46, 47, - nil, 75, nil, 73, 74, 76, 354, 355, 79, 80, - nil, nil, nil, nil, nil, 84, 349, 357, 114, 113, - 115, 116, nil, nil, 254, nil, nil, nil, nil, nil, - nil, 53, nil, nil, 118, 117, 119, 108, 64, 110, - 109, 111, nil, 112, 120, 121, nil, 104, 105, 49, - 50, 48, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 245, nil, nil, 253, nil, nil, 66, 67, nil, - nil, 68, nil, nil, nil, nil, nil, 52, nil, nil, - nil, nil, nil, nil, nil, nil, 250, nil, nil, nil, - nil, 102, 90, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, nil, - nil, nil, 85, nil, 92, 106, 107, -275, nil, 46, - 47, nil, nil, nil, -275, -275, -275, nil, nil, -275, - -275, -275, 491, -275, 488, 487, 486, 496, 489, nil, - nil, -275, -275, -275, nil, nil, nil, 499, nil, nil, - nil, nil, nil, -275, -275, nil, -275, -275, -275, -275, - -275, nil, 491, nil, 488, 487, 486, 496, 489, 494, - 644, nil, nil, nil, nil, nil, nil, 499, 504, 503, - 507, 506, nil, nil, nil, 500, nil, 491, nil, 488, - 487, 486, 496, 489, -275, nil, nil, nil, nil, 494, - nil, -275, 499, nil, nil, nil, 306, -275, 504, 503, - 507, 506, nil, nil, nil, 500, nil, nil, nil, nil, - nil, nil, nil, nil, 494, 485, nil, nil, nil, -275, - -275, nil, nil, 504, 503, 507, 506, nil, nil, nil, - 500, nil, nil, nil, -275, nil, nil, -275, nil, 81, - 82, 83, -275, 65, nil, 485, nil, 71, 72, -275, - nil, nil, 75, nil, 73, 74, 76, 354, 355, 79, - 80, nil, nil, nil, nil, nil, 84, 349, 357, 114, - 113, 115, 116, nil, nil, 254, nil, nil, nil, nil, - nil, nil, 53, nil, nil, 118, 117, 119, 108, 64, - 110, 109, 111, nil, 112, 120, 121, nil, 104, 105, - 49, 50, 48, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 245, nil, nil, 253, nil, nil, 66, 67, - nil, nil, 68, nil, nil, nil, nil, nil, 52, nil, - nil, nil, nil, nil, nil, nil, nil, 250, nil, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - 81, 82, 83, 85, 65, 92, 106, 107, 71, 72, - 46, 47, nil, 75, nil, 73, 74, 76, 354, 355, - 79, 80, nil, nil, nil, nil, nil, 84, 349, 357, - 114, 113, 115, 116, nil, nil, 254, nil, nil, nil, - nil, nil, nil, 53, nil, nil, 118, 117, 119, 108, - 64, 110, 109, 111, 327, 112, 120, 121, nil, 104, - 105, 49, 50, 48, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 245, nil, nil, 253, nil, nil, 66, - 67, nil, nil, 68, nil, 797, nil, 322, nil, 52, - nil, nil, 328, nil, nil, nil, nil, nil, 250, nil, - nil, nil, nil, 102, 325, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, 81, 82, 83, 85, 65, 92, 106, 107, 71, - 72, 46, 47, nil, 75, nil, 73, 74, 76, 354, - 355, 79, 80, nil, nil, nil, nil, nil, 84, 349, - 357, 114, 113, 115, 116, nil, nil, 254, nil, nil, - nil, nil, nil, nil, 53, nil, nil, 118, 117, 119, - 108, 64, 110, 109, 111, 327, 112, 120, 121, nil, - 104, 105, 49, 50, 48, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 245, nil, nil, 253, nil, nil, - 66, 67, nil, nil, 68, nil, nil, nil, 322, nil, - 52, nil, nil, 328, nil, nil, nil, nil, nil, 250, - nil, nil, nil, nil, 102, 325, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - nil, nil, 81, 82, 83, 85, 65, 92, 106, 107, - 71, 72, 46, 47, nil, 75, nil, 73, 74, 76, - 354, 355, 79, 80, nil, nil, nil, nil, nil, 84, - 349, 357, 114, 113, 115, 116, nil, nil, 254, nil, - nil, nil, nil, nil, nil, 53, nil, nil, 118, 117, - 119, 108, 64, 110, 109, 111, nil, 112, 120, 121, - nil, 104, 105, 49, 50, 48, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 245, nil, nil, 253, nil, - nil, 66, 67, nil, nil, 68, nil, nil, nil, nil, - nil, 52, nil, nil, nil, nil, nil, nil, nil, nil, - 250, nil, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, nil, nil, nil, 85, nil, 92, 106, - 107, nil, nil, 46, 47, 81, 82, 83, 11, 65, - nil, nil, nil, 71, 72, nil, nil, nil, 75, nil, - 73, 74, 76, 35, 36, 79, 80, nil, nil, nil, - nil, nil, 84, 33, 32, 114, 113, 115, 116, nil, - nil, 23, nil, nil, nil, nil, nil, 10, 53, 335, - 12, 118, 117, 119, 108, 64, 110, 109, 111, nil, - 112, 120, 121, nil, 104, 105, 49, 50, 48, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 45, nil, - nil, 38, nil, nil, 66, 67, nil, nil, 68, nil, - 40, nil, nil, nil, 52, nil, nil, nil, nil, nil, - nil, nil, nil, 24, nil, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, nil, nil, 420, 85, - nil, 92, 106, 107, nil, nil, 46, 47, 81, 82, - 83, nil, 65, nil, nil, nil, 71, 72, nil, nil, - nil, 75, nil, 73, 74, 76, 35, 36, 79, 80, - nil, nil, nil, nil, nil, 84, 33, 32, 114, 113, - 115, 116, nil, nil, 254, nil, nil, nil, nil, nil, - nil, 53, nil, nil, 118, 117, 119, 108, 64, 110, - 109, 111, 327, 112, 120, 121, nil, 104, 105, 49, - 50, 48, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 245, nil, nil, 253, nil, nil, 66, 67, nil, - nil, 68, nil, 324, nil, 322, nil, 52, nil, nil, - 328, nil, nil, nil, nil, nil, 250, nil, nil, nil, - nil, 102, 325, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, 81, - 82, 83, 85, 65, 92, 106, 107, 71, 72, 46, - 47, nil, 75, nil, 73, 74, 76, 354, 355, 79, - 80, nil, nil, nil, nil, nil, 84, 349, 357, 114, - 113, 115, 116, nil, nil, 254, nil, nil, nil, nil, - nil, nil, 53, nil, nil, 118, 117, 119, 108, 64, - 110, 109, 111, nil, 112, 120, 121, nil, 104, 105, - 49, 50, 48, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 245, nil, nil, 253, nil, nil, 66, 67, - nil, nil, 68, nil, nil, nil, nil, nil, 52, nil, - nil, nil, nil, nil, nil, nil, nil, 250, nil, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - 81, 82, 83, 85, 65, 92, 106, 107, 71, 72, - 46, 47, nil, 75, nil, 73, 74, 76, 354, 355, - 79, 80, nil, nil, nil, nil, nil, 84, 349, 357, - 114, 113, 115, 116, nil, nil, 254, nil, nil, nil, - nil, nil, nil, 53, nil, nil, 118, 117, 119, 108, - 64, 110, 109, 111, nil, 112, 120, 121, nil, 104, - 105, 49, 50, 48, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 245, nil, nil, 253, nil, nil, 66, - 67, nil, nil, 68, nil, nil, nil, nil, nil, 52, - nil, nil, nil, nil, nil, nil, nil, nil, 250, nil, - nil, nil, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, 81, 82, 83, 85, 65, 92, 106, 107, 71, - 72, 46, 47, nil, 75, nil, 73, 74, 76, 354, - 355, 79, 80, nil, nil, nil, nil, nil, 84, 349, - 357, 114, 113, 115, 116, nil, nil, 254, nil, nil, - nil, nil, nil, nil, 53, nil, nil, 118, 117, 119, - 108, 64, 110, 109, 111, nil, 112, 120, 121, nil, - 104, 105, 49, 50, 48, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 245, nil, nil, 253, nil, nil, - 66, 67, nil, nil, 68, nil, nil, nil, nil, nil, - 52, nil, nil, nil, nil, nil, nil, nil, nil, 250, - nil, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - nil, nil, 81, 82, 83, 85, 65, 92, 106, 107, - 71, 72, 46, 47, nil, 75, nil, 73, 74, 76, - 354, 355, 79, 80, nil, nil, nil, nil, nil, 84, - 349, 357, 114, 113, 115, 116, nil, nil, 254, nil, - nil, nil, nil, nil, nil, 53, nil, nil, 118, 117, - 119, 108, 64, 110, 109, 111, 327, 112, 120, 121, - nil, 104, 105, 49, 50, 48, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 245, nil, nil, 253, nil, - nil, 66, 67, nil, nil, 68, nil, 797, nil, nil, - nil, 52, nil, nil, 328, nil, nil, nil, nil, nil, - 250, nil, nil, nil, nil, 102, 325, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, 81, 82, 83, 85, 65, 92, 106, - 107, 71, 72, 46, 47, nil, 75, nil, 73, 74, - 76, 354, 355, 79, 80, nil, nil, nil, nil, nil, - 84, 349, 357, 114, 113, 115, 116, nil, nil, 254, - nil, nil, nil, nil, nil, nil, 53, nil, nil, 118, - 117, 119, 108, 64, 110, 109, 111, 327, 112, 120, - 121, nil, 104, 105, 49, 50, 48, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 245, nil, nil, 253, - nil, nil, 66, 67, nil, nil, 68, nil, nil, nil, - nil, nil, 52, nil, nil, 328, nil, nil, nil, nil, - nil, 250, nil, nil, nil, nil, 102, 325, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 81, 82, 83, 85, 65, 92, - 106, 107, 71, 72, 46, 47, nil, 75, nil, 73, - 74, 76, 354, 355, 79, 80, nil, nil, nil, nil, - nil, 84, 349, 357, 114, 113, 115, 116, nil, nil, - 254, nil, nil, nil, nil, nil, nil, 53, nil, nil, - 118, 117, 119, 108, 64, 110, 109, 111, nil, 112, - 120, 121, nil, 104, 105, 49, 50, 48, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 245, nil, nil, - 253, nil, nil, 66, 67, nil, nil, 68, nil, 324, - nil, nil, nil, 52, nil, nil, nil, nil, nil, nil, - nil, nil, 250, nil, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 81, 82, 83, 85, 65, - 92, 106, 107, 71, 72, 46, 47, nil, 75, nil, - 73, 74, 76, 35, 36, 79, 80, nil, nil, nil, - nil, nil, 84, 33, 32, 114, 113, 115, 116, nil, - nil, 254, nil, nil, nil, nil, nil, nil, 53, nil, - nil, 118, 117, 119, 108, 64, 110, 109, 111, 327, - 112, 120, 121, nil, 104, 105, 49, 50, 48, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 245, nil, - nil, 253, nil, nil, 66, 67, nil, nil, 68, nil, - 324, nil, 322, nil, 52, nil, nil, 328, nil, nil, - nil, nil, nil, 250, nil, nil, nil, nil, 102, 325, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, 81, 82, 83, 85, - 65, 92, 106, 107, 71, 72, 46, 47, nil, 75, - nil, 73, 74, 76, 35, 36, 79, 80, nil, nil, - nil, nil, nil, 84, 33, 32, 114, 113, 115, 116, - nil, nil, 254, nil, nil, nil, nil, nil, nil, 53, - nil, nil, 118, 117, 119, 108, 64, 110, 109, 111, - 327, 112, 120, 121, nil, 104, 105, 49, 50, 48, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 245, - nil, nil, 253, nil, nil, 66, 67, nil, nil, 68, - nil, 324, nil, 322, nil, 52, nil, nil, 328, nil, - nil, nil, nil, nil, 250, nil, nil, nil, nil, 102, - 325, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, nil, nil, nil, - 85, nil, 92, 106, 107, nil, nil, 46, 47, 81, - 82, 83, 11, 65, nil, nil, nil, 71, 72, nil, - nil, nil, 75, nil, 73, 74, 76, 35, 36, 79, - 80, nil, nil, nil, nil, nil, 84, 33, 32, 114, - 113, 115, 116, nil, nil, 23, nil, nil, nil, nil, - nil, 10, 53, nil, 12, 118, 117, 119, 108, 64, - 110, 109, 111, nil, 112, 120, 121, nil, 104, 105, - 49, 50, 48, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 45, nil, nil, 38, nil, nil, 66, 67, - nil, nil, 68, nil, 40, nil, nil, nil, 52, nil, - nil, nil, nil, nil, nil, nil, nil, 24, nil, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - 81, 82, 83, 85, 65, 92, 106, 107, 71, 72, - 46, 47, nil, 75, nil, 73, 74, 76, 354, 355, - 79, 80, nil, nil, nil, nil, nil, 84, 349, 357, - 114, 113, 115, 116, nil, nil, 254, nil, nil, nil, - nil, nil, nil, 53, nil, nil, 118, 117, 119, 108, - 64, 110, 109, 111, nil, 112, 120, 121, nil, 104, - 105, 49, 50, 48, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 245, nil, nil, 253, nil, nil, 66, - 67, nil, nil, 68, nil, 867, nil, nil, nil, 52, - nil, nil, nil, nil, nil, nil, nil, nil, 250, nil, - nil, nil, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, 81, 82, 83, 85, 65, 92, 106, 107, 71, - 72, 46, 47, nil, 75, nil, 73, 74, 76, 35, - 36, 79, 80, nil, nil, nil, nil, nil, 84, 33, - 32, 114, 113, 115, 116, nil, nil, 254, nil, nil, - nil, nil, nil, nil, 53, nil, nil, 118, 117, 119, - 108, 64, 110, 109, 111, nil, 112, 120, 121, nil, - 104, 105, 49, 50, 48, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 245, nil, nil, 253, nil, nil, - 66, 67, nil, nil, 68, nil, nil, nil, nil, nil, - 52, nil, nil, nil, nil, nil, nil, nil, nil, 250, - nil, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - nil, nil, 81, 82, 83, 85, 65, 92, 106, 107, - 71, 72, 46, 47, nil, 75, nil, 73, 74, 76, - 35, 36, 79, 80, nil, nil, nil, nil, nil, 84, - 33, 32, 114, 113, 115, 116, nil, nil, 254, nil, - nil, nil, nil, nil, nil, 53, nil, nil, 118, 117, - 119, 108, 64, 110, 109, 111, 327, 112, 120, 121, - nil, 104, 105, 49, 50, 48, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 245, nil, nil, 253, nil, - nil, 66, 67, nil, nil, 68, nil, 324, nil, 322, - nil, 52, nil, nil, 328, nil, nil, nil, nil, nil, - 250, nil, nil, nil, nil, 102, 325, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, nil, nil, nil, 85, nil, 92, 106, - 107, nil, nil, 46, 47, 81, 82, 83, 11, 65, - nil, nil, nil, 71, 72, nil, nil, nil, 75, nil, - 73, 74, 76, 35, 36, 79, 80, nil, nil, nil, - nil, nil, 84, 33, 32, 114, 113, 115, 116, nil, - nil, 23, nil, nil, nil, nil, nil, 10, 53, nil, - 12, 118, 117, 119, 108, 64, 110, 109, 111, nil, - 112, 120, 121, nil, 104, 105, 49, 50, 48, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 45, nil, - nil, 38, nil, nil, 66, 67, nil, nil, 68, nil, - 40, nil, nil, nil, 52, nil, nil, nil, nil, nil, - nil, nil, nil, 24, nil, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, 81, 82, 83, 85, - 65, 92, 106, 107, 71, 72, 46, 47, nil, 75, - nil, 73, 74, 76, 354, 355, 79, 80, nil, nil, - nil, nil, nil, 84, 349, 357, 114, 113, 115, 116, - nil, nil, 254, nil, nil, nil, nil, nil, nil, 53, - nil, nil, 118, 117, 119, 108, 64, 110, 109, 111, - nil, 112, 120, 121, nil, 104, 105, 49, 50, 48, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 245, - nil, nil, 253, nil, nil, 66, 67, nil, nil, 68, - nil, nil, nil, nil, nil, 52, nil, nil, nil, nil, - nil, nil, nil, nil, 250, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, 81, 82, 83, - 85, 65, 92, 106, 107, 71, 72, 46, 47, nil, - 75, nil, 73, 74, 76, 354, 355, 79, 80, nil, - nil, nil, nil, nil, 84, 349, 357, 114, 113, 115, - 116, nil, nil, 254, nil, nil, nil, nil, nil, nil, - 53, nil, nil, 118, 117, 119, 108, 64, 110, 109, - 111, 327, 112, 120, 121, nil, 104, 105, 49, 50, - 48, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 245, nil, nil, 253, nil, nil, 66, 67, nil, nil, - 68, nil, 797, nil, 322, nil, 52, nil, nil, 328, - nil, nil, nil, nil, nil, 250, nil, nil, nil, nil, - 102, 325, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, 81, 82, - 83, 85, 65, 92, 106, 107, 71, 72, 46, 47, - nil, 75, nil, 73, 74, 76, 354, 355, 79, 80, - nil, nil, nil, nil, nil, 84, 349, 357, 114, 113, - 115, 116, nil, nil, 254, nil, nil, nil, nil, nil, - nil, 53, nil, nil, 118, 117, 119, 108, 64, 110, - 109, 111, 327, 112, 120, 121, nil, 104, 105, 49, - 50, 48, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 245, nil, nil, 253, nil, nil, 66, 67, nil, - nil, 68, nil, nil, nil, 322, nil, 52, nil, nil, - 328, nil, nil, nil, nil, nil, 250, nil, nil, nil, - nil, 102, 325, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, 81, - 82, 83, 85, 65, 92, 106, 107, 71, 72, 46, - 47, nil, 75, nil, 73, 74, 76, 35, 36, 79, - 80, nil, nil, nil, nil, nil, 84, 33, 32, 114, - 113, 115, 116, nil, nil, 254, nil, nil, nil, nil, - nil, nil, 53, nil, nil, 118, 117, 119, 108, 64, - 110, 109, 111, nil, 112, 120, 121, nil, 104, 105, - 49, 50, 48, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 245, nil, nil, 253, nil, nil, 66, 67, - nil, nil, 68, nil, nil, nil, nil, nil, 52, nil, - nil, nil, nil, nil, nil, nil, nil, 250, nil, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - 81, 82, 83, 85, 65, 92, 106, 107, 71, 72, - 46, 47, nil, 75, nil, 73, 74, 76, 35, 36, - 79, 80, nil, nil, nil, nil, nil, 84, 33, 32, - 114, 113, 115, 116, nil, nil, 254, nil, nil, nil, - nil, nil, nil, 53, nil, nil, 118, 117, 119, 108, - 64, 110, 109, 111, nil, 112, 120, 121, nil, 104, - 105, 49, 50, 48, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 245, nil, nil, 253, nil, nil, 66, - 67, nil, nil, 68, nil, nil, nil, nil, nil, 52, - nil, nil, nil, nil, nil, nil, nil, nil, 250, nil, - nil, nil, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, 81, 82, 83, 85, 65, 92, 106, 107, 71, - 72, 46, 47, nil, 75, nil, 73, 74, 76, 35, - 36, 79, 80, nil, nil, nil, nil, nil, 84, 33, - 32, 114, 113, 115, 116, nil, nil, 254, nil, nil, - nil, nil, nil, nil, 53, nil, nil, 118, 117, 119, - 108, 64, 110, 109, 111, nil, 112, 120, 121, nil, - 104, 105, 49, 50, 48, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 245, nil, nil, 253, nil, nil, - 66, 67, nil, nil, 68, nil, nil, nil, nil, nil, - 52, nil, nil, nil, nil, nil, nil, nil, nil, 250, - nil, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - nil, nil, 81, 82, 83, 85, 65, 92, 106, 107, - 71, 72, 46, 47, nil, 75, nil, 73, 74, 76, - 35, 36, 79, 80, nil, nil, nil, nil, nil, 84, - 33, 32, 114, 113, 115, 116, nil, nil, 254, nil, - nil, nil, nil, nil, nil, 53, nil, nil, 118, 117, - 119, 108, 64, 110, 109, 111, nil, 112, 120, 121, - nil, 104, 105, 49, 50, 48, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 245, nil, nil, 253, nil, - nil, 66, 67, nil, nil, 68, nil, nil, nil, nil, - nil, 52, nil, nil, nil, nil, nil, nil, nil, nil, - 250, nil, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, 81, 82, 83, 85, 65, 92, 106, - 107, 71, 72, 46, 47, nil, 75, nil, 73, 74, - 76, 354, 355, 79, 80, nil, nil, nil, nil, nil, - 84, 349, 357, 114, 113, 115, 116, nil, nil, 254, - nil, nil, nil, nil, nil, nil, 53, nil, nil, 118, - 117, 119, 108, 64, 110, 109, 111, nil, 112, 120, - 121, nil, 104, 105, 49, 50, 48, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 245, nil, nil, 253, - nil, nil, 66, 67, nil, nil, 68, nil, 436, nil, - nil, nil, 52, nil, nil, nil, nil, nil, nil, nil, - nil, 250, nil, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 81, 82, 83, 85, 65, 92, - 106, 107, 71, 72, 46, 47, nil, 75, nil, 73, - 74, 76, 354, 355, 79, 80, nil, nil, nil, nil, - nil, 84, 349, 357, 114, 113, 115, 116, nil, nil, - 254, nil, nil, nil, nil, nil, nil, 53, nil, nil, - 118, 117, 119, 108, 64, 110, 109, 111, nil, 112, - 120, 121, nil, 104, 105, 49, 50, 48, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 245, nil, nil, - 253, nil, nil, 66, 67, nil, nil, 68, nil, nil, - nil, nil, nil, 52, nil, nil, nil, nil, nil, nil, - nil, nil, 250, nil, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 81, 82, 83, 85, 65, - 92, 106, 107, 71, 72, 46, 47, nil, 75, nil, - 73, 74, 76, 354, 355, 79, 80, nil, nil, nil, - nil, nil, 84, 349, 357, 114, 113, 115, 116, nil, - nil, 254, nil, nil, nil, nil, nil, nil, 53, nil, - nil, 118, 117, 119, 108, 64, 110, 109, 111, nil, - 112, 120, 121, nil, 104, 105, 49, 50, 48, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 245, nil, - nil, 253, nil, nil, 66, 67, nil, nil, 68, nil, - nil, nil, nil, nil, 52, nil, nil, nil, nil, nil, - nil, nil, nil, 250, nil, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, 81, 82, 83, 85, - 65, 92, 106, 107, 71, 72, 46, 47, nil, 75, - nil, 73, 74, 76, 354, 355, 79, 80, nil, nil, - nil, nil, nil, 84, 349, 357, 114, 113, 115, 116, - nil, nil, 254, nil, nil, nil, nil, nil, nil, 53, - nil, nil, 118, 117, 119, 108, 64, 110, 109, 111, - nil, 112, 120, 121, nil, 104, 105, 49, 50, 48, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 245, - nil, nil, 253, nil, nil, 66, 67, nil, nil, 68, - nil, nil, nil, nil, nil, 52, nil, nil, nil, nil, - nil, nil, nil, nil, 250, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, 81, 82, 83, - 85, 65, 92, 106, 107, 71, 72, 46, 47, nil, - 75, nil, 73, 74, 76, 354, 355, 79, 80, nil, - nil, nil, nil, nil, 84, 349, 357, 114, 113, 115, - 116, nil, nil, 254, nil, nil, nil, nil, nil, nil, - 53, nil, nil, 118, 117, 119, 108, 64, 110, 109, - 111, 327, 112, 120, 121, nil, 104, 105, 49, 50, - 48, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 245, nil, nil, 253, nil, nil, 66, 67, nil, nil, - 68, nil, 797, nil, 322, nil, 52, nil, nil, 328, - nil, nil, nil, nil, nil, 250, nil, nil, nil, nil, - 102, 325, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, 81, 82, - 83, 85, 65, 92, 106, 107, 71, 72, 46, 560, - nil, 75, nil, 73, 74, 76, 354, 355, 79, 80, - nil, nil, nil, nil, nil, 84, 349, 357, 114, 113, - 115, 116, nil, nil, 254, nil, nil, nil, nil, nil, - nil, 53, nil, nil, 118, 117, 119, 108, 64, 110, - 109, 111, nil, 112, 120, 121, nil, 104, 105, 49, - 50, 48, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 245, nil, nil, 253, nil, nil, 66, 67, nil, - nil, 68, nil, nil, nil, nil, nil, 52, nil, nil, - nil, nil, nil, nil, nil, nil, 250, nil, nil, nil, - nil, 102, 90, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, 81, - 82, 83, 85, 65, 92, 106, 107, 71, 72, 46, - 47, nil, 75, nil, 73, 74, 76, 354, 355, 79, - 80, nil, nil, nil, nil, nil, 84, 349, 357, 114, - 113, 115, 116, nil, nil, 254, nil, nil, nil, nil, - nil, nil, 53, nil, nil, 118, 117, 119, 108, 64, - 110, 109, 111, nil, 112, 120, 121, nil, 104, 105, - 49, 50, 48, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 245, nil, nil, 253, nil, nil, 66, 67, - nil, nil, 68, nil, nil, nil, nil, nil, 52, nil, - nil, nil, nil, nil, nil, nil, nil, 250, nil, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - 81, 82, 83, 85, 65, 92, 106, 107, 71, 72, - 46, 47, nil, 75, nil, 73, 74, 76, 35, 36, - 79, 80, nil, nil, nil, nil, nil, 84, 33, 32, - 114, 113, 115, 116, nil, nil, 23, nil, nil, nil, - nil, nil, nil, 53, nil, nil, 118, 117, 119, 108, - 64, 110, 109, 111, nil, 112, 120, 121, nil, 104, - 105, 49, 50, 48, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 245, nil, nil, 253, nil, nil, 66, - 67, nil, nil, 68, nil, nil, nil, nil, nil, 52, - nil, nil, nil, nil, nil, nil, nil, nil, 24, nil, - nil, nil, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, 81, 82, 83, 85, 65, 92, 106, 107, 71, - 72, 46, 47, nil, 75, nil, 73, 74, 76, 35, - 36, 79, 80, nil, nil, nil, nil, nil, 84, 33, - 32, 114, 113, 115, 116, nil, nil, 23, nil, nil, - nil, nil, nil, nil, 53, nil, nil, 118, 117, 119, - 108, 64, 110, 109, 111, nil, 112, 120, 121, nil, - 104, 105, 49, 50, 48, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 245, nil, nil, 253, nil, nil, - 66, 67, nil, nil, 68, nil, nil, nil, nil, nil, - 52, nil, nil, nil, nil, nil, nil, nil, nil, 24, - nil, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - nil, nil, 81, 82, 83, 85, 65, 92, 106, 107, - 71, 72, 46, 47, nil, 75, nil, 73, 74, 76, - 354, 355, 79, 80, nil, nil, nil, nil, nil, 84, - 349, 357, 114, 113, 115, 116, nil, nil, 254, nil, - nil, nil, nil, nil, nil, 53, nil, nil, 118, 117, - 119, 108, 64, 110, 109, 111, nil, 112, 120, 121, - nil, 104, 105, 49, 50, 48, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 245, nil, nil, 253, nil, - nil, 66, 67, nil, nil, 68, nil, nil, nil, nil, - nil, 52, nil, nil, nil, nil, nil, nil, nil, nil, - 250, nil, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, 81, 82, 83, 85, 65, 92, 106, - 107, 71, 72, 46, 47, nil, 75, nil, 73, 74, - 76, 35, 36, 79, 80, nil, nil, nil, nil, nil, - 84, 33, 32, 114, 113, 115, 116, nil, nil, 254, - nil, nil, nil, nil, nil, nil, 53, nil, nil, 118, - 117, 119, 108, 64, 110, 109, 111, nil, 112, 120, - 121, nil, 104, 105, 49, 50, 48, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 245, nil, nil, 253, - nil, nil, 66, 67, nil, nil, 68, nil, nil, nil, - nil, nil, 52, nil, nil, nil, nil, nil, nil, nil, - nil, 250, nil, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 81, 82, 83, 85, 65, 92, - 106, 107, 71, 72, 46, 47, nil, 75, nil, 73, - 74, 76, 354, 355, 79, 80, nil, nil, nil, nil, - nil, 84, 349, 357, 114, 113, 115, 116, nil, nil, - 254, nil, nil, nil, nil, nil, nil, 53, nil, nil, - 118, 117, 119, 108, 64, 110, 109, 111, nil, 112, - 120, 121, nil, 104, 105, 49, 50, 48, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 245, nil, nil, - 253, nil, nil, 66, 67, nil, nil, 68, nil, nil, - nil, nil, nil, 52, nil, nil, nil, nil, nil, nil, - nil, nil, 250, nil, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 81, 82, 83, 85, 65, - 92, 106, 107, 71, 72, 46, 47, nil, 75, nil, - 73, 74, 76, 354, 355, 79, 80, nil, nil, nil, - nil, nil, 84, 349, 357, 114, 113, 115, 116, nil, - nil, 254, nil, nil, nil, nil, nil, nil, 53, nil, - nil, 118, 117, 119, 108, 64, 110, 109, 111, nil, - 112, 120, 121, nil, 104, 105, 49, 50, 48, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 245, nil, - nil, 253, nil, nil, 66, 67, nil, nil, 68, nil, - nil, nil, nil, nil, 52, nil, nil, nil, nil, nil, - nil, nil, nil, 250, nil, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, 81, 82, 83, 85, - 65, 92, 106, 107, 71, 72, 46, 47, nil, 75, - nil, 73, 74, 76, 354, 355, 79, 80, nil, nil, - nil, nil, nil, 84, 349, 357, 114, 113, 115, 116, - nil, nil, 254, nil, nil, nil, nil, nil, nil, 53, - nil, nil, 118, 117, 119, 108, 64, 110, 109, 111, - nil, 112, 120, 121, nil, 104, 105, 49, 50, 48, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 245, - nil, nil, 253, nil, nil, 66, 67, nil, nil, 68, - nil, nil, nil, nil, nil, 52, nil, nil, nil, nil, - nil, nil, nil, nil, 250, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, 81, 82, 83, - 85, 65, 92, 106, 107, 71, 72, 46, 47, nil, - 75, nil, 73, 74, 76, 354, 355, 79, 80, nil, - nil, nil, nil, nil, 84, 349, 357, 114, 113, 115, - 116, nil, nil, 254, nil, nil, nil, nil, nil, nil, - 53, nil, nil, 118, 117, 119, 108, 64, 110, 109, - 111, nil, 112, 120, 121, nil, 104, 105, 49, 50, - 48, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 245, nil, nil, 253, nil, nil, 66, 67, nil, nil, - 68, nil, nil, nil, nil, nil, 52, nil, nil, nil, - nil, nil, nil, nil, nil, 250, nil, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, 81, 82, - 83, 85, 65, 92, 106, 107, 71, 72, 46, 47, - nil, 75, nil, 73, 74, 76, 354, 355, 79, 80, - nil, nil, nil, nil, nil, 84, 349, 357, 114, 113, - 115, 116, nil, nil, 254, nil, nil, nil, nil, nil, - nil, 53, nil, nil, 118, 117, 119, 108, 64, 110, - 109, 111, nil, 112, 120, 121, nil, 104, 105, 49, - 50, 48, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 245, nil, nil, 253, nil, nil, 66, 67, nil, - nil, 68, nil, nil, nil, nil, nil, 52, nil, nil, - nil, nil, nil, nil, nil, nil, 250, nil, nil, nil, - nil, 102, 90, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, 81, - 82, 83, 85, 65, 92, 106, 107, 71, 72, 46, - 47, nil, 75, nil, 73, 74, 76, 354, 355, 79, - 80, nil, nil, nil, nil, nil, 84, 349, 357, 114, - 113, 115, 116, nil, nil, 254, nil, nil, nil, nil, - nil, nil, 53, nil, nil, 118, 117, 119, 108, 64, - 110, 109, 111, nil, 112, 120, 121, nil, 104, 105, - 49, 50, 48, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 245, nil, nil, 253, nil, nil, 66, 67, - nil, nil, 68, nil, nil, nil, nil, nil, 52, nil, - nil, nil, nil, nil, nil, nil, nil, 250, nil, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - 81, 82, 83, 85, 65, 92, 106, 107, 71, 72, - 46, 47, nil, 75, nil, 73, 74, 76, 354, 355, - 79, 80, nil, nil, nil, nil, nil, 84, 349, 357, - 114, 113, 115, 116, nil, nil, 254, nil, nil, nil, - nil, nil, nil, 53, nil, nil, 118, 117, 119, 108, - 64, 110, 109, 111, nil, 112, 120, 121, nil, 104, - 105, 49, 50, 48, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 245, nil, nil, 253, nil, nil, 66, - 67, nil, nil, 68, nil, nil, nil, nil, nil, 52, - nil, nil, nil, nil, nil, nil, nil, nil, 250, nil, - nil, nil, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, 81, 82, 83, 85, 65, 92, 106, 107, 71, - 72, 46, 47, nil, 75, nil, 73, 74, 76, 354, - 355, 79, 80, nil, nil, nil, nil, nil, 84, 349, - 357, 114, 113, 115, 116, nil, nil, 254, nil, nil, - nil, nil, nil, nil, 53, nil, nil, 118, 117, 119, - 108, 64, 110, 109, 111, nil, 112, 120, 121, nil, - 104, 105, 49, 50, 48, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 245, nil, nil, 253, nil, nil, - 66, 67, nil, nil, 68, nil, nil, nil, nil, nil, - 52, nil, nil, nil, nil, nil, nil, nil, nil, 250, - nil, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - nil, nil, 81, 82, 83, 85, 65, 92, 106, 107, - 71, 72, 46, 47, nil, 75, nil, 73, 74, 76, - 35, 36, 79, 80, nil, nil, nil, nil, nil, 84, - 33, 32, 114, 113, 115, 116, nil, nil, 23, nil, - nil, nil, nil, nil, nil, 53, nil, nil, 118, 117, - 119, 108, 64, 110, 109, 111, nil, 112, 120, 121, - nil, 104, 105, 49, 50, 48, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 245, nil, nil, 253, nil, - nil, 66, 67, nil, nil, 68, nil, nil, nil, nil, - nil, 52, nil, nil, nil, nil, nil, nil, nil, nil, - 24, nil, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, 81, 82, 83, 85, 65, 92, 106, - 107, 71, 72, 46, 47, nil, 75, nil, 73, 74, - 76, 354, 355, 79, 80, nil, nil, nil, nil, nil, - 84, 349, 357, 114, 113, 115, 116, nil, nil, 254, - nil, nil, nil, nil, nil, nil, 53, nil, nil, 118, - 117, 119, 108, 64, 110, 109, 111, nil, 112, 120, - 121, nil, 104, 105, 49, 50, 48, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 245, nil, nil, 253, - nil, nil, 66, 67, nil, nil, 68, nil, nil, nil, - nil, nil, 52, nil, nil, nil, nil, nil, nil, nil, - nil, 250, nil, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 81, 82, 83, 85, 65, 92, - 106, 107, 71, 72, 46, 47, nil, 75, nil, 73, - 74, 76, 35, 36, 79, 80, nil, nil, nil, nil, - nil, 84, 33, 32, 114, 113, 115, 116, nil, nil, - 23, nil, nil, nil, nil, nil, nil, 53, nil, nil, - 118, 117, 119, 108, 64, 110, 109, 111, nil, 112, - 120, 121, nil, 104, 105, 49, 50, 48, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 245, nil, nil, - 253, nil, nil, 66, 67, nil, nil, 68, nil, nil, - nil, nil, nil, 52, nil, nil, nil, nil, nil, nil, - nil, nil, 24, nil, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 81, 82, 83, 85, 65, - 92, 106, 107, 71, 72, 46, 47, nil, 75, nil, - 73, 74, 76, 354, 355, 79, 80, nil, nil, nil, - nil, nil, 84, 349, 357, 114, 113, 115, 116, nil, - nil, 254, nil, nil, nil, nil, nil, nil, 53, nil, - nil, 118, 117, 119, 108, 64, 110, 109, 111, nil, - 112, 120, 121, nil, 104, 105, 49, 50, 48, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 245, nil, - nil, 253, nil, nil, 66, 67, nil, nil, 68, nil, - 797, nil, nil, nil, 52, nil, nil, nil, nil, nil, - nil, nil, nil, 250, nil, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, 81, 82, 83, 85, - 65, 92, 106, 107, 71, 72, 46, 47, nil, 75, - nil, 73, 74, 76, 354, 355, 79, 80, nil, nil, - nil, nil, nil, 84, 349, 357, 114, 113, 115, 116, - nil, nil, 254, nil, nil, nil, nil, nil, nil, 53, - nil, nil, 118, 117, 119, 108, 64, 110, 109, 111, - 327, 112, 120, 121, nil, 104, 105, 49, 50, 48, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 245, - nil, nil, 253, nil, nil, 66, 67, nil, nil, 68, - nil, nil, nil, 322, nil, 52, nil, nil, 328, nil, - nil, nil, nil, nil, 250, nil, nil, nil, nil, 102, - 325, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, 81, 82, 83, - 85, 65, 92, 106, 107, 71, 72, 46, 47, nil, - 75, nil, 73, 74, 76, 354, 355, 79, 80, nil, - nil, nil, nil, nil, 84, 349, 357, 114, 113, 115, - 116, nil, nil, 254, nil, nil, nil, nil, nil, nil, - 53, nil, nil, 118, 117, 119, 108, 64, 110, 109, - 111, nil, 112, 120, 121, nil, 104, 105, 49, 50, - 48, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 245, nil, nil, 253, nil, nil, 66, 67, nil, nil, - 68, nil, nil, nil, nil, nil, 52, nil, nil, nil, - nil, nil, nil, nil, nil, 250, nil, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, 81, 82, - 83, 85, 65, 92, 106, 107, 71, 72, 46, 47, - nil, 75, nil, 73, 74, 76, 35, 36, 79, 80, - nil, nil, nil, nil, nil, 84, 33, 32, 114, 113, - 115, 116, nil, nil, 23, nil, nil, nil, nil, nil, - nil, 53, nil, nil, 118, 117, 119, 108, 64, 110, - 109, 111, nil, 112, 120, 121, nil, 104, 105, 49, - 50, 48, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 245, nil, nil, 253, nil, nil, 66, 67, nil, - nil, 68, nil, nil, nil, nil, nil, 52, nil, nil, - nil, nil, nil, nil, nil, nil, 24, nil, nil, nil, - nil, 102, 90, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, 81, - 82, 83, 85, 65, 92, 106, 107, 71, 72, 46, - 47, nil, 75, nil, 73, 74, 76, 35, 36, 79, - 80, nil, nil, nil, nil, nil, 84, 33, 32, 114, - 113, 115, 116, nil, nil, 23, nil, nil, nil, nil, - nil, nil, 53, nil, nil, 118, 117, 119, 108, 64, - 110, 109, 111, nil, 112, 120, 121, nil, 104, 105, - 49, 50, 48, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 245, nil, nil, 253, nil, nil, 66, 67, - nil, nil, 68, nil, nil, nil, nil, nil, 52, nil, - nil, nil, nil, nil, nil, nil, nil, 24, nil, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - 81, 82, 83, 85, 65, 92, 106, 107, 71, 72, - 46, 47, nil, 75, nil, 73, 74, 76, 35, 36, - 79, 80, nil, nil, nil, nil, nil, 84, 33, 32, - 114, 113, 115, 116, nil, nil, 254, nil, nil, nil, - nil, nil, nil, 53, nil, nil, 118, 117, 119, 108, - 64, 110, 109, 111, 327, 112, 120, 121, nil, 104, - 105, 49, 50, 48, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 245, nil, nil, 253, nil, nil, 66, - 67, nil, nil, 68, nil, 324, nil, 322, nil, 52, - nil, nil, 328, nil, nil, nil, nil, nil, 250, nil, - nil, nil, nil, 102, 325, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, 81, 82, 83, 85, 65, 92, 106, 107, 71, - 72, 46, 47, nil, 75, nil, 73, 74, 76, 354, - 355, 79, 80, nil, nil, nil, nil, nil, 84, 349, - 357, 114, 113, 115, 116, nil, nil, 254, nil, nil, - nil, nil, nil, nil, 350, nil, nil, 118, 117, 119, - 108, 64, 110, 109, 111, nil, 112, 120, 121, nil, - 104, 105, nil, nil, 358, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 346, nil, nil, 342, nil, nil, - 66, 67, nil, nil, 68, nil, 341, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - nil, nil, 81, 82, 83, 85, 65, 92, 106, 107, - 71, 72, nil, nil, nil, 75, nil, 73, 74, 76, - 354, 355, 79, 80, nil, nil, nil, nil, nil, 84, - 349, 357, 114, 113, 115, 116, nil, nil, 254, nil, - nil, nil, nil, nil, nil, 350, nil, nil, 118, 117, - 119, 108, 64, 110, 109, 111, nil, 112, 120, 121, - nil, 104, 105, nil, nil, 358, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 346, nil, nil, 253, nil, - nil, 66, 67, nil, nil, 68, nil, nil, 491, nil, - 488, 487, 486, 496, 489, nil, nil, nil, nil, nil, - nil, nil, nil, 499, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, 360, nil, 494, 85, nil, 92, 106, - 107, 81, 82, 83, nil, 65, 507, 506, nil, 71, - 72, 500, nil, nil, 75, nil, 73, 74, 76, 354, - 355, 79, 80, nil, nil, nil, nil, nil, 84, 349, - 357, 114, 113, 115, 116, nil, nil, 254, nil, nil, - nil, nil, nil, nil, 350, nil, nil, 118, 117, 119, - 108, 64, 110, 109, 111, nil, 112, 120, 121, nil, - 104, 105, nil, nil, 358, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 395, nil, nil, 38, nil, nil, - 66, 67, nil, nil, 68, nil, 40, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - nil, nil, 81, 82, 83, 85, 65, 92, 106, 107, - 71, 72, nil, nil, nil, 75, nil, 73, 74, 76, - 354, 355, 79, 80, nil, nil, nil, nil, nil, 84, - 349, 357, 114, 113, 115, 116, nil, nil, 254, nil, - nil, nil, nil, nil, nil, 350, nil, nil, 118, 117, - 119, 400, 64, 110, 109, 401, nil, 112, 120, 121, - nil, 104, 105, nil, nil, 358, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 407, nil, nil, 402, nil, nil, 253, nil, - nil, 66, 67, nil, nil, 68, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, 81, 82, 83, 85, 65, 92, 106, - 107, 71, 72, nil, nil, nil, 75, nil, 73, 74, - 76, 354, 355, 79, 80, nil, nil, nil, nil, nil, - 84, 349, 357, 114, 113, 115, 116, nil, nil, 254, - nil, nil, nil, nil, nil, nil, 350, nil, nil, 118, - 117, 119, 400, 64, 110, 109, 401, nil, 112, 120, - 121, nil, 104, 105, nil, nil, 358, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 402, nil, nil, 253, - nil, nil, 66, 67, nil, nil, 68, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 81, 82, 83, 85, 65, 92, - 106, 107, 71, 72, nil, nil, nil, 75, nil, 73, - 74, 76, 354, 355, 79, 80, nil, nil, nil, nil, - nil, 84, 349, 357, 114, 113, 115, 116, nil, nil, - 254, nil, nil, nil, nil, nil, nil, 350, nil, nil, - 118, 117, 119, 108, 64, 110, 109, 111, nil, 112, - 120, 121, nil, 104, 105, nil, nil, 358, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 346, nil, nil, - 253, nil, nil, 66, 67, nil, nil, 68, nil, nil, - 491, nil, 488, 487, 486, 496, 489, nil, nil, nil, - nil, nil, nil, nil, nil, 499, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 588, nil, 494, 85, nil, - 92, 106, 107, 81, 82, 83, nil, 65, 507, 506, - nil, 71, 72, 500, nil, nil, 75, nil, 73, 74, - 76, 354, 355, 79, 80, nil, nil, nil, nil, nil, - 84, 349, 357, 114, 113, 115, 116, nil, nil, 254, - nil, nil, nil, nil, nil, nil, 350, nil, nil, 118, - 117, 119, 108, 64, 110, 109, 111, nil, 112, 120, - 121, nil, 104, 105, nil, nil, 358, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 346, nil, nil, 342, - nil, nil, 66, 67, nil, nil, 68, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 81, 82, 83, 85, 65, 92, - 106, 107, 71, 72, nil, nil, nil, 75, nil, 73, - 74, 76, 354, 355, 79, 80, nil, nil, nil, nil, - nil, 84, 349, 357, 114, 113, 115, 116, nil, nil, - 254, nil, nil, nil, nil, nil, nil, 350, nil, nil, - 118, 117, 119, 108, 64, 110, 109, 111, nil, 112, - 120, 121, nil, 104, 105, nil, nil, 358, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 346, nil, nil, - 342, nil, nil, 66, 67, nil, nil, 68, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 81, 82, 83, 85, 65, - 92, 106, 107, 71, 72, nil, nil, nil, 75, nil, - 73, 74, 76, 354, 355, 79, 80, nil, nil, nil, - nil, nil, 84, 349, 357, 114, 113, 115, 116, nil, - nil, 254, nil, nil, nil, nil, nil, nil, 350, nil, - nil, 118, 117, 119, 108, 64, 110, 109, 111, nil, - 112, 120, 121, nil, 104, 105, nil, nil, 358, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 346, nil, - nil, 342, nil, nil, 66, 67, nil, nil, 68, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, 81, 82, 83, 85, - 65, 92, 106, 107, 71, 72, nil, nil, nil, 75, - nil, 73, 74, 76, 354, 355, 79, 80, nil, nil, - nil, nil, nil, 84, 349, 357, 114, 113, 115, 116, - nil, nil, 254, nil, nil, nil, nil, nil, nil, 350, - nil, nil, 118, 117, 119, 108, 64, 110, 109, 111, - nil, 112, 120, 121, nil, 104, 105, nil, nil, 358, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 346, - nil, nil, 342, nil, nil, 66, 67, nil, nil, 68, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, 81, 82, 83, - 85, 65, 92, 106, 107, 71, 72, nil, nil, nil, - 75, nil, 73, 74, 76, 354, 355, 79, 80, nil, - nil, nil, nil, nil, 84, 349, 357, 114, 113, 115, - 116, nil, nil, 254, nil, nil, nil, nil, nil, nil, - 350, nil, nil, 118, 117, 119, 108, 64, 110, 109, - 111, nil, 112, 120, 121, nil, 104, 105, nil, nil, - 358, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 346, nil, nil, 342, nil, nil, 66, 67, nil, nil, - 68, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, 81, 82, - 83, 85, 65, 92, 106, 107, 71, 72, nil, nil, - nil, 75, nil, 73, 74, 76, 354, 355, 79, 80, - nil, nil, nil, nil, nil, 84, 349, 357, 114, 113, - 115, 116, nil, nil, 254, nil, nil, nil, nil, nil, - nil, 350, nil, nil, 118, 117, 119, 108, 64, 110, - 109, 111, nil, 112, 120, 121, nil, 104, 105, nil, - nil, 358, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 1107, nil, nil, 253, nil, nil, 66, 67, nil, - nil, 68, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 102, 90, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, 81, - 82, 83, 85, 65, 92, 106, 107, 71, 72, nil, - nil, nil, 75, nil, 73, 74, 76, 354, 355, 79, - 80, nil, nil, nil, nil, nil, 84, 349, 357, 114, - 113, 115, 116, nil, nil, 254, nil, nil, nil, nil, - nil, nil, 350, nil, nil, 118, 117, 119, 108, 64, - 110, 109, 111, nil, 112, 120, 121, nil, 104, 105, - nil, nil, 358, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 1146, nil, nil, 253, nil, nil, 66, 67, - nil, nil, 68, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - 81, 82, 83, 85, 65, 92, 106, 107, 71, 72, - nil, nil, nil, 75, nil, 73, 74, 76, 354, 355, - 79, 80, nil, nil, nil, nil, nil, 84, 349, 357, - 114, 113, 115, 116, nil, nil, 254, nil, nil, nil, - nil, nil, nil, 350, nil, nil, 118, 117, 119, 108, - 64, 110, 109, 111, nil, 112, 120, 121, nil, 104, - 105, nil, nil, 358, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 1146, nil, nil, 253, nil, nil, 66, - 67, nil, nil, 68, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, nil, nil, nil, 85, nil, 92, 106, 107, 185, - 196, 186, 209, 182, 202, 192, 191, 212, 213, 207, - 190, 189, 184, 210, 214, 215, 194, 183, 197, 201, - 203, 195, 188, nil, nil, nil, 204, 211, 206, 205, - 198, 208, 193, 181, 200, 199, nil, nil, nil, nil, - nil, 180, 187, 178, 179, 175, 176, 177, 138, 140, - 137, nil, 139, nil, nil, nil, nil, nil, nil, nil, - 169, 170, nil, 166, 148, 149, 150, 157, 154, 156, - nil, nil, 151, 152, nil, nil, nil, 171, 172, 158, - 159, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 163, 162, nil, 147, 168, 165, - 164, 173, 160, 161, 155, 153, 145, 167, 146, nil, - nil, 174, 102, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 101, 185, 196, 186, - 209, 182, 202, 192, 191, 212, 213, 207, 190, 189, - 184, 210, 214, 215, 194, 183, 197, 201, 203, 195, - 188, nil, nil, nil, 204, 211, 206, 205, 198, 208, - 193, 181, 200, 199, nil, nil, nil, nil, nil, 180, - 187, 178, 179, 175, 176, 177, 138, 140, nil, nil, - 139, nil, nil, nil, nil, nil, nil, nil, 169, 170, - nil, 166, 148, 149, 150, 157, 154, 156, nil, nil, - 151, 152, nil, nil, nil, 171, 172, 158, 159, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 163, 162, nil, 147, 168, 165, 164, 173, - 160, 161, 155, 153, 145, 167, 146, nil, nil, 174, - 102, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 101, 185, 196, 186, 209, 182, - 202, 192, 191, 212, 213, 207, 190, 189, 184, 210, - 214, 215, 194, 183, 197, 201, 203, 195, 188, nil, - nil, nil, 204, 211, 206, 205, 198, 208, 193, 181, - 200, 199, nil, nil, nil, nil, nil, 180, 187, 178, - 179, 175, 176, 177, 138, 140, nil, nil, 139, nil, - nil, nil, nil, nil, nil, nil, 169, 170, nil, 166, - 148, 149, 150, 157, 154, 156, nil, nil, 151, 152, - nil, nil, nil, 171, 172, 158, 159, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 163, 162, nil, 147, 168, 165, 164, 173, 160, 161, - 155, 153, 145, 167, 146, nil, nil, 174, 102, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 101, 185, 196, 186, 209, 182, 202, 192, - 191, 212, 213, 207, 190, 189, 184, 210, 214, 215, - 194, 183, 197, 201, 203, 195, 188, nil, nil, nil, - 204, 211, 206, 205, 198, 208, 193, 181, 200, 199, - nil, nil, nil, nil, nil, 180, 187, 178, 179, 175, - 176, 177, 138, 140, nil, nil, 139, nil, nil, nil, - nil, nil, nil, nil, 169, 170, nil, 166, 148, 149, - 150, 157, 154, 156, nil, nil, 151, 152, nil, nil, - nil, 171, 172, 158, 159, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 163, 162, - nil, 147, 168, 165, 164, 173, 160, 161, 155, 153, - 145, 167, 146, nil, nil, 174, 102, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 101, 185, 196, 186, 209, 182, 202, 192, 191, 212, - 213, 207, 190, 189, 184, 210, 214, 215, 194, 183, - 197, 201, 203, 195, 188, nil, nil, nil, 204, 211, - 206, 294, 293, 295, 292, 181, 200, 199, nil, nil, - nil, nil, nil, 180, 187, 178, 179, 289, 290, 291, - 287, 140, 110, 109, 288, nil, 112, nil, nil, nil, - nil, nil, 169, 170, nil, 166, 148, 149, 150, 157, - 154, 156, nil, nil, 151, 152, nil, nil, nil, 171, - 172, 158, 159, nil, nil, nil, nil, nil, 299, nil, - nil, nil, nil, nil, nil, nil, 163, 162, nil, 147, - 168, 165, 164, 173, 160, 161, 155, 153, 145, 167, - 146, nil, nil, 174, 114, 113, 115, 116, nil, nil, - 491, nil, 488, 487, 486, 496, 489, nil, nil, nil, - 118, 117, 119, 774, nil, 499, nil, 777, 754, nil, - nil, nil, nil, 104, 105, nil, nil, 358, 499, nil, - nil, nil, nil, nil, nil, nil, nil, 494, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 776, 507, 506, - 747, nil, nil, 500, 745, nil, nil, 746, nil, 749, - nil, nil, nil, nil, nil, nil, 500, nil, nil, nil, - nil, nil, nil, 775, nil, nil, nil, 102, 755, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, 114, 113, 115, 116, nil, nil, 85, nil, - 92, 106, 107, nil, nil, 762, 763, nil, 118, 117, - 119, 774, nil, nil, nil, 777, 754, nil, nil, nil, - nil, 104, 105, nil, nil, 358, 499, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 776, nil, nil, 747, nil, - nil, nil, 745, nil, nil, 746, nil, 749, nil, nil, - nil, nil, nil, nil, 500, nil, nil, nil, nil, nil, - nil, 775, nil, nil, nil, 102, 755, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - 114, 113, 115, 116, nil, nil, 85, nil, 92, 106, - 107, nil, nil, 762, 763, nil, 118, 117, 119, 774, - nil, nil, nil, 777, nil, nil, nil, nil, nil, 104, - 105, nil, nil, 358, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 776, nil, nil, 747, nil, nil, nil, - 745, nil, nil, 746, nil, 749, nil, nil, nil, nil, - nil, nil, 491, nil, 488, 487, 486, 496, 489, 775, - nil, nil, nil, 102, 90, 93, 94, 499, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, 240, 114, - 113, 115, 116, nil, 85, nil, 92, 106, 107, 494, - nil, 762, 763, nil, nil, 118, 117, 119, 774, nil, - 507, 506, 777, nil, nil, 500, nil, nil, 104, 105, - nil, nil, 358, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 776, nil, nil, 747, nil, nil, nil, 745, - nil, nil, 746, nil, nil, 485, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 775, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - nil, nil, nil, 85, nil, 92, 106, 107, nil, nil, - 762, 763, 185, 196, 186, 209, 182, 202, 192, 191, - 212, 213, 207, 190, 189, 184, 210, 214, 215, 194, - 183, 197, 201, 203, 195, 188, nil, nil, nil, 204, - 211, 206, 205, 198, 208, 193, 181, 200, 199, nil, - nil, nil, nil, nil, 180, 187, 178, 179, 175, 176, - 177, 138, 140, nil, nil, 139, nil, nil, nil, nil, - nil, nil, nil, 169, 170, nil, 166, 148, 149, 150, - 157, 154, 156, nil, nil, 151, 152, nil, nil, nil, - 171, 172, 158, 159, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 163, 162, nil, - 147, 168, 165, 164, 173, 160, 161, 155, 153, 145, - 167, 146, nil, nil, 174, 114, 113, 115, 116, nil, - nil, nil, nil, nil, 491, nil, 488, 487, 486, 496, - 489, 118, 117, 119, 774, nil, nil, nil, 777, 499, - nil, nil, nil, nil, 104, 105, nil, nil, 358, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 494, nil, nil, nil, nil, nil, nil, 776, nil, - nil, 747, 507, 506, nil, 745, nil, 500, 746, nil, - 749, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 775, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, 114, 113, 115, 116, 485, nil, 85, - nil, 92, 106, 107, nil, nil, 762, 763, nil, 118, - 117, 119, 774, nil, nil, 491, 777, 488, 487, 486, - 496, 489, 104, 105, nil, nil, 358, nil, nil, nil, - 499, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 776, nil, nil, 747, - nil, nil, 494, 745, nil, nil, 746, nil, nil, nil, - nil, 504, 503, 507, 506, nil, nil, nil, 500, nil, - nil, nil, 775, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, 114, 113, 115, 116, nil, nil, 85, nil, 92, - 106, 107, nil, nil, 762, 763, nil, 118, 117, 119, - 774, nil, nil, nil, 777, 754, nil, nil, nil, nil, - 104, 105, nil, nil, 358, 499, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 776, nil, nil, 747, nil, nil, - nil, 745, nil, nil, 746, nil, 749, nil, nil, nil, - nil, nil, nil, 500, nil, nil, nil, nil, nil, nil, - 775, nil, nil, nil, 102, 755, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, 114, - 113, 115, 116, nil, nil, 85, nil, 92, 106, 107, - nil, nil, 762, 763, nil, 118, 117, 119, 774, nil, - nil, nil, 777, 754, nil, nil, nil, nil, 104, 105, - nil, nil, 358, 499, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 776, nil, nil, 747, nil, nil, nil, 745, - nil, nil, 746, nil, 749, nil, nil, nil, nil, nil, - nil, 500, nil, nil, nil, nil, nil, nil, 775, nil, - nil, nil, 102, 755, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, 114, 113, 115, - 116, nil, nil, 85, nil, 92, 106, 107, nil, nil, - 762, 763, nil, 118, 117, 119, 774, nil, nil, 491, - 777, 488, 487, 486, 496, 489, 104, 105, nil, nil, - 358, nil, nil, nil, 499, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 776, nil, nil, 747, nil, nil, 494, 745, nil, nil, - 746, nil, 1053, nil, nil, 504, 503, 507, 506, nil, - nil, nil, 500, nil, nil, nil, 775, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, 114, 113, 115, 116, nil, - nil, 85, nil, 92, 106, 107, nil, nil, 762, 763, - nil, 118, 117, 119, 774, nil, nil, 491, 777, 488, - 487, 486, 496, 489, 104, 105, nil, nil, 358, nil, - nil, nil, 499, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 776, nil, - nil, 747, nil, nil, 494, 745, nil, nil, 746, nil, - nil, nil, nil, nil, nil, 507, 506, nil, nil, nil, - 500, nil, nil, nil, 775, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, 114, 113, 115, 116, nil, nil, 85, - nil, 92, 106, 107, nil, nil, 762, 763, nil, 118, - 117, 119, 774, nil, nil, nil, 777, nil, nil, nil, - nil, nil, 104, 105, nil, nil, 358, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 776, nil, nil, 747, - nil, nil, nil, 745, nil, nil, 746, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 775, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, 114, 113, 115, 116, nil, nil, 85, nil, 92, - 106, 107, nil, nil, 762, 763, nil, 118, 117, 119, - 774, nil, nil, nil, 777, 754, nil, nil, nil, nil, - 104, 105, nil, nil, 358, 499, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 776, nil, nil, 747, nil, nil, - nil, 745, nil, nil, 746, nil, 749, nil, nil, nil, - nil, nil, nil, 500, nil, nil, nil, nil, nil, nil, - 775, nil, nil, nil, 102, 755, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, 114, - 113, 115, 116, nil, nil, 85, nil, 92, 106, 107, - nil, nil, 762, 763, nil, 118, 117, 119, 774, nil, - nil, nil, 777, nil, nil, nil, nil, nil, 104, 105, - nil, nil, 358, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 776, nil, nil, 747, nil, nil, nil, 745, - nil, nil, 746, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 775, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, 114, 113, 115, - 116, nil, nil, 85, nil, 92, 106, 107, nil, nil, - 762, 763, nil, 118, 117, 119, 774, nil, nil, nil, - 777, nil, nil, nil, nil, nil, 104, 105, nil, nil, - 358, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 776, nil, nil, 747, nil, nil, nil, 745, nil, nil, - 746, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 775, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, 114, 113, 115, 116, nil, - nil, 85, nil, 92, 106, 107, nil, nil, 762, 763, - nil, 118, 117, 119, 774, nil, nil, nil, 777, nil, - nil, nil, nil, nil, 104, 105, nil, nil, 358, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 776, nil, - nil, 747, nil, nil, nil, 745, nil, nil, 746, nil, - 749, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 775, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, 114, 113, 115, 116, nil, nil, 85, - nil, 92, 106, 107, nil, nil, 762, 763, nil, 118, - 117, 119, 774, nil, nil, nil, 777, nil, nil, nil, - nil, nil, 104, 105, nil, nil, 358, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 776, nil, nil, 747, - nil, nil, nil, 745, nil, nil, 746, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 775, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, 114, 113, 115, 116, nil, nil, 85, nil, 92, - 106, 107, nil, nil, 762, 763, nil, 118, 117, 119, - 774, nil, nil, nil, 777, nil, nil, nil, nil, nil, - 104, 105, nil, nil, 358, nil, nil, nil, nil, nil, - nil, nil, 114, 113, 115, 116, nil, nil, nil, nil, - nil, nil, nil, nil, 776, nil, nil, 747, 118, 117, - 119, 745, nil, nil, 746, nil, nil, nil, nil, nil, - nil, 104, 105, nil, nil, 358, nil, nil, nil, nil, - 775, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - nil, nil, nil, nil, nil, 85, nil, 92, 106, 107, - nil, nil, 762, 763, 491, nil, 488, 487, 486, 496, - 489, nil, nil, nil, nil, 102, 90, 93, 94, 499, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - 114, 113, 115, 116, nil, nil, 85, nil, 92, 106, - 107, 494, nil, nil, nil, nil, 118, 117, 119, nil, - 504, 503, 507, 506, nil, nil, nil, 500, nil, 104, - 105, nil, nil, 358, 114, 113, 115, 116, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 118, 117, 119, 240, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 104, 105, nil, nil, 358, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, nil, nil, nil, 85, nil, 92, 106, 107, nil, - nil, nil, nil, nil, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, nil, nil, nil, 85, nil, - 92, 106, 107, 491, nil, 488, 487, 486, 496, 489, - nil, 491, nil, 488, 487, 486, 496, 489, 499, nil, - nil, nil, nil, nil, nil, nil, 499, nil, 491, nil, - 488, 487, 486, 496, 489, nil, nil, nil, nil, nil, - 494, nil, nil, 499, nil, nil, nil, nil, 494, 504, - 503, 507, 506, nil, nil, nil, 500, 504, 503, 507, - 506, nil, nil, nil, 500, 494, nil, nil, nil, nil, - nil, nil, nil, nil, 504, 503, 507, 506, nil, nil, - 491, 500, 488, 487, 486, 496, 489, 491, nil, 488, - 487, 486, 496, 489, nil, 499, 485, nil, nil, nil, - nil, nil, 499, nil, 485, 491, nil, 488, 487, 486, - 496, 489, nil, nil, nil, nil, nil, 494, nil, nil, - 499, 485, nil, nil, 494, nil, nil, nil, 507, 506, - nil, nil, nil, 500, nil, 507, 506, nil, nil, nil, - 500, nil, 494, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 507, 506, nil, nil, nil, 500, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 458, 462, nil, 485, 459, nil, nil, nil, nil, nil, - 485, nil, 169, 170, nil, 166, 148, 149, 150, 157, - 154, 156, nil, nil, 151, 152, nil, nil, 485, 171, - 172, 158, 159, nil, nil, nil, nil, nil, 306, nil, - nil, nil, nil, nil, nil, nil, 163, 162, nil, 147, - 168, 165, 164, 173, 160, 161, 155, 153, 145, 167, - 146, 465, 469, 174, nil, 464, nil, nil, nil, nil, - nil, nil, nil, 169, 170, nil, 166, 148, 149, 150, - 157, 154, 156, nil, nil, 151, 152, nil, nil, nil, - 171, 172, 158, 159, nil, nil, nil, nil, nil, 306, - nil, nil, nil, nil, nil, nil, nil, 163, 162, nil, - 147, 168, 165, 164, 173, 160, 161, 155, 153, 145, - 167, 146, 556, 462, 174, nil, 557, nil, nil, nil, - nil, nil, nil, nil, 169, 170, nil, 166, 148, 149, - 150, 157, 154, 156, nil, nil, 151, 152, nil, nil, - nil, 171, 172, 158, 159, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 163, 162, - nil, 147, 168, 165, 164, 173, 160, 161, 155, 153, - 145, 167, 146, 727, 462, 174, nil, 728, nil, nil, - nil, nil, nil, nil, nil, 169, 170, nil, 166, 148, - 149, 150, 157, 154, 156, nil, nil, 151, 152, nil, - nil, nil, 171, 172, 158, 159, nil, nil, nil, nil, - nil, 306, nil, nil, nil, nil, nil, nil, nil, 163, - 162, nil, 147, 168, 165, 164, 173, 160, 161, 155, - 153, 145, 167, 146, 729, 469, 174, nil, 730, nil, - nil, nil, nil, nil, nil, nil, 169, 170, nil, 166, - 148, 149, 150, 157, 154, 156, nil, nil, 151, 152, - nil, nil, nil, 171, 172, 158, 159, nil, nil, nil, - nil, nil, 306, nil, nil, nil, nil, nil, nil, nil, - 163, 162, nil, 147, 168, 165, 164, 173, 160, 161, - 155, 153, 145, 167, 146, 807, 462, 174, nil, 808, - nil, nil, nil, nil, nil, nil, nil, 169, 170, nil, - 166, 148, 149, 150, 157, 154, 156, nil, nil, 151, - 152, nil, nil, nil, 171, 172, 158, 159, nil, nil, - nil, nil, nil, 306, nil, nil, nil, nil, nil, nil, - nil, 163, 162, nil, 147, 168, 165, 164, 173, 160, - 161, 155, 153, 145, 167, 146, 810, 469, 174, nil, - 811, nil, nil, nil, nil, nil, nil, nil, 169, 170, - nil, 166, 148, 149, 150, 157, 154, 156, nil, nil, - 151, 152, nil, nil, nil, 171, 172, 158, 159, nil, - nil, nil, nil, nil, 306, nil, nil, nil, nil, nil, - nil, nil, 163, 162, nil, 147, 168, 165, 164, 173, - 160, 161, 155, 153, 145, 167, 146, 727, 462, 174, - nil, 728, nil, nil, nil, nil, nil, nil, nil, 169, - 170, nil, 166, 148, 149, 150, 157, 154, 156, nil, - nil, 151, 152, nil, nil, nil, 171, 172, 158, 159, - nil, nil, nil, nil, nil, 306, nil, nil, nil, nil, - nil, nil, nil, 163, 162, nil, 147, 168, 165, 164, - 173, 160, 161, 155, 153, 145, 167, 146, 729, 469, - 174, nil, 730, nil, nil, nil, nil, nil, nil, nil, - 169, 170, nil, 166, 148, 149, 150, 157, 154, 156, - nil, nil, 151, 152, nil, nil, nil, 171, 172, 158, - 159, nil, nil, nil, nil, nil, 306, nil, nil, nil, - nil, nil, nil, nil, 163, 162, nil, 147, 168, 165, - 164, 173, 160, 161, 155, 153, 145, 167, 146, 837, - 462, 174, nil, 838, nil, nil, nil, nil, nil, nil, - nil, 169, 170, nil, 166, 148, 149, 150, 157, 154, - 156, nil, nil, 151, 152, nil, nil, nil, 171, 172, - 158, 159, nil, nil, nil, nil, nil, 306, nil, nil, - nil, nil, nil, nil, nil, 163, 162, nil, 147, 168, - 165, 164, 173, 160, 161, 155, 153, 145, 167, 146, - 839, 469, 174, nil, 840, nil, nil, nil, nil, nil, - nil, nil, 169, 170, nil, 166, 148, 149, 150, 157, - 154, 156, nil, nil, 151, 152, nil, nil, nil, 171, - 172, 158, 159, nil, nil, nil, nil, nil, 306, nil, - nil, nil, nil, nil, nil, nil, 163, 162, nil, 147, - 168, 165, 164, 173, 160, 161, 155, 153, 145, 167, - 146, 842, 469, 174, nil, 843, nil, nil, nil, nil, - nil, nil, nil, 169, 170, nil, 166, 148, 149, 150, - 157, 154, 156, nil, nil, 151, 152, nil, nil, nil, - 171, 172, 158, 159, nil, nil, nil, nil, nil, 306, - nil, nil, nil, nil, nil, nil, nil, 163, 162, nil, - 147, 168, 165, 164, 173, 160, 161, 155, 153, 145, - 167, 146, 556, 462, 174, nil, 557, nil, nil, nil, - nil, nil, nil, nil, 169, 170, nil, 166, 148, 149, - 150, 157, 154, 156, nil, nil, 151, 152, nil, nil, - nil, 171, 172, 158, 159, nil, nil, nil, nil, nil, - 306, nil, nil, nil, nil, nil, nil, nil, 163, 162, - nil, 147, 168, 165, 164, 173, 160, 161, 155, 153, - 145, 167, 146, 869, 462, 174, nil, 870, nil, nil, - nil, nil, nil, nil, nil, 169, 170, nil, 166, 148, - 149, 150, 157, 154, 156, nil, nil, 151, 152, nil, - nil, nil, 171, 172, 158, 159, nil, nil, nil, nil, - nil, 306, nil, nil, nil, nil, nil, nil, nil, 163, - 162, nil, 147, 168, 165, 164, 173, 160, 161, 155, - 153, 145, 167, 146, 872, 469, 174, nil, 871, nil, - nil, nil, nil, nil, nil, nil, 169, 170, nil, 166, - 148, 149, 150, 157, 154, 156, nil, nil, 151, 152, - nil, nil, nil, 171, 172, 158, 159, nil, nil, nil, - nil, nil, 306, nil, nil, nil, nil, nil, nil, nil, - 163, 162, nil, 147, 168, 165, 164, 173, 160, 161, - 155, 153, 145, 167, 146, 1200, 462, 174, nil, 1201, - nil, nil, nil, nil, nil, nil, nil, 169, 170, nil, - 166, 148, 149, 150, 157, 154, 156, nil, nil, 151, - 152, nil, nil, nil, 171, 172, 158, 159, nil, nil, - nil, nil, nil, 306, nil, nil, nil, nil, nil, nil, - nil, 163, 162, nil, 147, 168, 165, 164, 173, 160, - 161, 155, 153, 145, 167, 146, 1202, 469, 174, nil, - 1203, nil, nil, nil, nil, nil, nil, nil, 169, 170, - nil, 166, 148, 149, 150, 157, 154, 156, nil, nil, - 151, 152, nil, nil, nil, 171, 172, 158, 159, nil, - nil, nil, nil, nil, 306, nil, nil, nil, nil, nil, - nil, nil, 163, 162, nil, 147, 168, 165, 164, 173, - 160, 161, 155, 153, 145, 167, 146, 1218, 469, 174, - nil, 1217, nil, nil, nil, nil, nil, nil, nil, 169, - 170, nil, 166, 148, 149, 150, 157, 154, 156, nil, - nil, 151, 152, nil, nil, nil, 171, 172, 158, 159, - nil, nil, nil, nil, nil, 306, nil, nil, nil, nil, - nil, nil, nil, 163, 162, nil, 147, 168, 165, 164, - 173, 160, 161, 155, 153, 145, 167, 146, nil, nil, - 174 ] - -racc_action_check = [ - 108, 515, 515, 553, 553, 19, 392, 108, 108, 108, - 1058, 384, 108, 108, 108, 18, 108, 31, 23, 1053, - 5, 928, 18, 385, 108, 5, 108, 108, 108, 981, - 981, 18, 501, 416, 393, 396, 108, 108, 835, 108, - 108, 108, 108, 108, 1016, 1087, 1089, 1104, 1105, 927, - 501, 631, 1220, 1058, 1108, 625, 417, 928, 1, 23, - 69, 19, 1220, 625, 837, 838, 108, 108, 108, 108, - 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, - 18, 31, 108, 108, 108, 3, 108, 108, 622, 927, - 108, 850, 992, 108, 108, 515, 108, 553, 108, 416, - 108, 1053, 108, 108, 31, 108, 108, 108, 108, 108, - 1165, 108, 111, 108, 1200, 392, 785, 641, 641, 111, - 111, 111, 417, 981, 111, 111, 111, 108, 111, 384, - 108, 108, 108, 108, 384, 108, 111, 108, 111, 111, - 111, 385, 108, 393, 396, 108, 385, 69, 111, 111, - 1201, 111, 111, 111, 111, 111, 835, 1202, 1222, 835, - 631, 835, 1016, 1087, 1089, 1104, 1105, 1016, 1087, 1089, - 1104, 1105, 1108, 837, 838, 839, 840, 1108, 111, 111, - 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, - 111, 111, 622, 1203, 111, 111, 111, 622, 111, 111, - 850, 992, 111, 785, 331, 111, 111, 746, 111, 331, - 111, 641, 111, 656, 111, 111, 641, 111, 111, 111, - 111, 111, 464, 111, 746, 111, 735, 243, 1165, 464, - 464, 464, 1200, 1165, 1202, 464, 464, 1200, 464, 111, - 839, 840, 111, 111, 111, 111, 464, 111, 29, 111, - 351, 20, 9, 411, 111, 29, 932, 111, 464, 464, - 807, 464, 464, 464, 464, 464, 48, 48, 1201, 1092, - 1203, 1092, 735, 1201, 808, 1202, 1222, 656, 656, 244, - 1202, 1222, 358, 358, 839, 840, 243, 656, 464, 464, - 464, 464, 464, 464, 464, 464, 464, 464, 464, 464, - 464, 464, 932, 286, 464, 464, 464, 20, 464, 464, - 286, 1203, 464, 29, 351, 464, 1203, 411, 411, 411, - 464, 12, 464, 658, 464, 464, 807, 464, 464, 464, - 464, 464, 246, 464, 465, 464, 756, 351, 244, 443, - 808, 465, 465, 465, 48, 48, 389, 465, 465, 464, - 465, 389, 464, 464, 756, 464, 14, 464, 465, 465, - 358, 358, 979, 521, 464, 15, 807, 464, 286, 807, - 465, 465, 727, 465, 465, 465, 465, 465, 802, 287, - 808, 807, 376, 808, 810, 376, 287, 658, 658, 576, - 802, 246, 728, 947, 509, 808, 251, 658, 443, 509, - 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, - 465, 465, 465, 465, 17, 939, 465, 465, 465, 54, - 465, 465, 521, 27, 465, 939, 54, 465, 979, 869, - 1127, 727, 465, 870, 465, 54, 465, 465, 412, 465, - 465, 465, 465, 465, 287, 465, 465, 465, 42, 810, - 810, 728, 251, 576, 576, 576, 413, 947, 947, 947, - 21, 465, 414, 939, 465, 465, 400, 465, 979, 465, - 576, 979, 415, 729, 947, 939, 465, 252, 45, 465, - 729, 729, 729, 979, 54, 729, 729, 729, 869, 729, - 810, 996, 870, 810, 1127, 1127, 996, 729, 729, 729, - 729, 729, 412, 412, 412, 810, 401, 21, 53, 729, - 729, 1127, 729, 729, 729, 729, 729, 216, 400, 21, - 413, 413, 413, 418, 229, 400, 414, 414, 414, 377, - 400, 923, 377, 252, 400, 231, 415, 415, 415, 729, - 729, 729, 729, 729, 729, 729, 729, 729, 729, 729, - 729, 729, 729, 400, 1006, 729, 729, 729, 401, 729, - 729, 16, 16, 729, 402, 401, 729, 729, 402, 729, - 401, 729, 235, 729, 401, 729, 729, 245, 729, 729, - 729, 729, 729, 400, 729, 729, 729, 418, 418, 418, - 923, 242, 288, 401, 289, 290, 51, 51, 242, 288, - 729, 289, 290, 729, 729, 729, 729, 242, 729, 291, - 729, 43, 730, 1006, 247, 729, 291, 44, 729, 730, - 730, 730, 248, 401, 730, 730, 730, 292, 730, 383, - 383, 254, 51, 51, 292, 293, 730, 305, 730, 730, - 730, 137, 293, 700, 700, 319, 137, 137, 730, 730, - 362, 730, 730, 730, 730, 730, 242, 288, 43, 289, - 290, 294, 295, 776, 44, 320, 744, 776, 294, 295, - 43, 744, 323, 931, 291, 744, 44, 931, 730, 730, - 730, 730, 730, 730, 730, 730, 730, 730, 730, 730, - 730, 730, 292, 945, 730, 730, 730, 362, 730, 730, - 293, 458, 730, 945, 380, 730, 730, 380, 730, 362, - 730, 335, 730, 822, 730, 730, 822, 730, 730, 730, - 730, 730, 871, 730, 336, 730, 294, 295, 88, 871, - 871, 871, 759, 759, 1157, 871, 871, 1157, 871, 730, - 88, 945, 730, 730, 730, 730, 871, 730, 458, 730, - 88, 823, 823, 945, 730, 459, 338, 730, 871, 871, - 458, 871, 871, 871, 871, 871, 1090, 1090, 1190, 1190, - 233, 343, 233, 233, 233, 233, 233, 339, 343, 678, - 714, 340, 714, 714, 714, 233, 714, 343, 871, 871, - 871, 871, 871, 871, 871, 871, 871, 871, 871, 871, - 871, 871, 459, 346, 871, 871, 871, 233, 871, 871, - 349, 350, 871, 352, 459, 871, 233, 233, 233, 233, - 871, 353, 871, 233, 871, 871, 678, 871, 871, 871, - 871, 871, 357, 871, 872, 871, 343, 359, 678, 366, - 368, 872, 872, 872, 371, 374, 378, 872, 872, 871, - 872, 379, 871, 871, 381, 871, 390, 871, 872, 872, - 391, 395, 397, 233, 871, 406, 426, 871, 432, 434, - 872, 872, 435, 872, 872, 872, 872, 872, 437, 440, - 444, 454, 234, 344, 234, 234, 234, 234, 234, 775, - 344, 775, 775, 456, 457, 775, 466, 234, 472, 344, - 872, 872, 872, 872, 872, 872, 872, 872, 872, 872, - 872, 872, 872, 872, 473, 476, 872, 872, 872, 234, - 872, 872, 477, 478, 872, 481, 775, 872, 234, 234, - 234, 234, 872, 482, 872, 234, 872, 872, 483, 872, - 872, 872, 872, 872, 697, 872, 872, 872, 344, 493, - 345, 505, 508, 511, 697, 347, 363, 345, 517, 525, - 526, 872, 347, 363, 872, 872, 345, 872, 533, 872, - 394, 347, 363, 534, 535, 234, 872, 394, 536, 872, - 2, 2, 2, 2, 2, 2, 394, 697, 697, 2, - 2, 561, 697, 562, 2, 842, 2, 2, 2, 2, - 2, 2, 2, 8, 8, 8, 8, 8, 2, 2, - 2, 2, 2, 2, 2, 345, 563, 2, 567, 583, - 347, 363, 584, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 394, 2, 2, 2, 404, - 2, 2, 2, 2, 2, 442, 404, 842, 587, 593, - 589, 594, 442, 598, 842, 404, 593, 607, 608, 842, - 609, 442, 619, 842, 2, 593, 623, 2, 624, 626, - 2, 2, 634, 653, 2, 661, 2, 663, 670, 634, - 2, 679, 842, 684, 531, 689, 649, 649, 634, 2, - 649, 649, 649, 691, 2, 2, 2, 2, 693, 2, - 2, 2, 2, 707, 404, 712, 713, 2, 2, 715, - 442, 722, 842, 731, 593, 2, 531, 2, 2, 2, - 531, 531, 2, 2, 38, 38, 38, 38, 38, 38, - 740, 748, 749, 38, 38, 750, 779, 634, 38, 782, - 38, 38, 38, 38, 38, 38, 38, 25, 784, 790, - 791, 792, 38, 38, 38, 38, 38, 38, 38, 794, - 1099, 38, 1099, 1099, 1099, 796, 1099, 38, 38, 38, - 38, 38, 38, 38, 38, 38, 38, 38, 38, 804, - 38, 38, 38, 806, 38, 38, 38, 38, 38, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 811, 25, 25, 809, 812, 25, 25, 811, 38, 813, - 25, 38, 811, 816, 38, 38, 811, 825, 38, 831, - 38, 25, 832, 25, 38, 25, 25, 836, 25, 25, - 25, 25, 25, 38, 25, 845, 849, 851, 38, 38, - 38, 38, 1106, 38, 38, 38, 38, 866, 868, 1106, - 877, 38, 38, 890, 25, 893, 894, 897, 1106, 38, - 899, 38, 38, 38, 902, 811, 38, 38, 135, 135, - 135, 135, 135, 135, 903, 905, 906, 135, 135, 908, - 912, 925, 135, 933, 135, 135, 135, 135, 135, 135, - 135, 334, 334, 334, 334, 334, 135, 135, 135, 135, - 135, 135, 135, 934, 938, 135, 941, 1106, 946, 965, - 447, 135, 135, 135, 135, 135, 135, 135, 135, 135, - 135, 135, 135, 968, 135, 135, 135, 969, 135, 135, - 135, 135, 135, 447, 447, 447, 447, 447, 447, 447, - 447, 447, 447, 447, 843, 447, 447, 978, 983, 447, - 447, 843, 135, 986, 993, 135, 843, 995, 135, 135, - 843, 1002, 135, 1003, 135, 447, 1004, 447, 135, 447, - 447, 1005, 447, 447, 447, 447, 447, 135, 447, 1031, - 1032, 1037, 135, 135, 135, 135, 1145, 135, 135, 135, - 135, 1042, 1043, 1145, 1044, 135, 135, 1045, 447, 1046, - 447, 1047, 1145, 135, 1051, 135, 135, 135, 1052, 843, - 135, 135, 218, 218, 218, 218, 218, 218, 1055, 1059, - 1066, 218, 218, 1071, 1072, 1074, 218, 1075, 218, 218, - 218, 218, 218, 218, 218, 373, 373, 373, 373, 373, - 218, 218, 218, 218, 218, 218, 218, 1076, 1078, 218, - 1079, 1145, 1080, 1096, 453, 218, 218, 218, 218, 218, - 218, 218, 218, 218, 218, 218, 218, 1107, 218, 218, - 218, 1110, 218, 218, 218, 218, 218, 453, 453, 453, - 453, 453, 453, 453, 453, 453, 453, 453, 1187, 453, - 453, 1111, 1112, 453, 453, 1187, 218, 1113, 1124, 218, - 1132, 1143, 218, 218, 1187, 1146, 218, 1155, 218, 453, - 1132, 453, 218, 453, 453, 1156, 453, 453, 453, 453, - 453, 218, 453, 1161, 1171, 1172, 218, 218, 218, 218, - 1174, 218, 218, 218, 218, 1177, 1180, 1181, 1182, 218, - 218, 1183, 453, 1132, 1132, 1185, 1199, 218, 1132, 218, - 218, 218, 1204, 1187, 218, 218, 230, 230, 230, 230, - 230, 230, 1206, 1217, 1218, 230, 230, 1224, 1225, 1226, - 230, 1227, 230, 230, 230, 230, 230, 230, 230, 581, - 581, 581, 581, 581, 230, 230, 230, 230, 230, 230, - 230, 1236, nil, 230, nil, nil, nil, nil, 692, 230, - 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, - 230, nil, 230, 230, 230, nil, 230, 230, 230, 230, - 230, 692, 692, 692, 692, 692, 692, 692, 692, 692, - 692, 692, nil, 692, 692, nil, nil, 692, 692, nil, - 230, nil, nil, 230, nil, nil, 230, 230, nil, nil, - 230, nil, 230, 692, nil, 692, 230, 692, 692, nil, - 692, 692, 692, 692, 692, 230, 692, nil, nil, nil, - 230, 230, 230, 230, nil, 230, 230, 230, 230, nil, - nil, nil, nil, 230, 230, nil, 692, nil, nil, nil, - nil, 230, nil, 230, 230, 230, nil, nil, 230, 230, - 236, 236, 236, 236, 236, 236, nil, nil, nil, 236, - 236, nil, nil, nil, 236, nil, 236, 236, 236, 236, - 236, 236, 236, nil, nil, nil, nil, nil, 236, 236, - 236, 236, 236, 236, 236, nil, nil, 236, nil, nil, - nil, nil, 723, 236, 236, 236, 236, 236, 236, 236, - 236, 236, 236, 236, 236, nil, 236, 236, 236, nil, - 236, 236, 236, 236, 236, 723, 723, 723, 723, 723, - 723, 723, 723, 723, 723, 723, nil, 723, 723, nil, - nil, 723, 723, nil, 236, nil, nil, 236, nil, nil, - 236, 236, nil, nil, 236, nil, 236, 723, nil, 723, - 236, 723, 723, nil, 723, 723, 723, 723, 723, 236, - 723, nil, nil, nil, 236, 236, 236, 236, nil, 236, - 236, 236, 236, nil, nil, nil, nil, 236, 236, nil, - 723, nil, nil, nil, nil, 236, nil, 236, 236, 236, - nil, nil, 236, 236, 253, 253, 253, 253, 253, 253, - nil, nil, nil, 253, 253, nil, nil, nil, 253, nil, - 253, 253, 253, 253, 253, 253, 253, nil, nil, nil, - nil, nil, 253, 253, 253, 253, 253, 253, 253, nil, - 1197, 253, 1197, 1197, 1197, nil, 1197, 253, 253, 253, - 253, 253, 253, 253, 253, 253, 253, 253, 253, nil, - 253, 253, 253, nil, 253, 253, 253, 253, 253, 317, - 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, - nil, 317, 317, nil, nil, 317, 317, nil, 253, nil, - nil, 253, nil, nil, 253, 253, nil, nil, 253, nil, - 253, 317, nil, 317, 253, 317, 317, nil, 317, 317, - 317, 317, 317, 253, 317, nil, nil, nil, 253, 253, - 253, 253, nil, 253, 253, 253, 253, nil, nil, nil, - nil, 253, 253, nil, 317, nil, nil, nil, nil, 253, - nil, 253, 253, 253, nil, nil, 253, 253, 337, 337, - 337, 337, 337, 337, nil, nil, nil, 337, 337, nil, - nil, nil, 337, nil, 337, 337, 337, 337, 337, 337, - 337, nil, nil, nil, nil, nil, 337, 337, 337, 337, - 337, 337, 337, nil, nil, 337, nil, nil, nil, nil, - nil, 337, 337, 337, 337, 337, 337, 337, 337, 337, - 337, 337, 337, nil, 337, 337, 337, nil, 337, 337, - 337, 337, 337, 550, 550, 550, 550, 550, 550, 550, - 550, 550, 550, 550, nil, 550, 550, nil, nil, 550, - 550, nil, 337, nil, nil, 337, nil, nil, 337, 337, - nil, nil, 337, nil, 337, 550, nil, 550, 337, 550, - 550, nil, 550, 550, 550, 550, 550, 337, 550, nil, - nil, nil, 337, 337, 337, 337, nil, 337, 337, 337, - 337, nil, nil, nil, nil, 337, 337, 550, 550, nil, - nil, nil, nil, 337, nil, 337, 337, 337, nil, nil, - 337, 337, 342, 342, 342, 342, 342, 342, nil, nil, - nil, 342, 342, nil, nil, nil, 342, nil, 342, 342, - 342, 342, 342, 342, 342, nil, nil, nil, nil, nil, - 342, 342, 342, 342, 342, 342, 342, nil, nil, 342, - nil, nil, nil, nil, nil, 342, 342, 342, 342, 342, - 342, 342, 342, 342, 342, 342, 342, nil, 342, 342, - 342, nil, 342, 342, 342, 342, 342, 817, 817, 817, - 817, 817, 817, 817, 817, 817, 817, 817, nil, 817, - 817, nil, nil, 817, 817, nil, 342, nil, nil, 342, - nil, nil, 342, 342, nil, nil, 342, nil, 342, 817, - nil, 817, 342, 817, 817, nil, 817, 817, 817, 817, - 817, 342, 817, nil, nil, nil, 342, 342, 342, 342, - nil, 342, 342, 342, 342, nil, nil, nil, nil, 342, - 342, nil, 817, nil, nil, nil, nil, 342, nil, 342, - 342, 342, nil, nil, 342, 342, 372, 372, 372, 372, - 372, 372, nil, nil, nil, 372, 372, nil, nil, nil, - 372, nil, 372, 372, 372, 372, 372, 372, 372, nil, - nil, nil, nil, nil, 372, 372, 372, 372, 372, 372, - 372, nil, nil, 372, nil, nil, nil, nil, nil, 372, - 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, - 372, nil, 372, 372, 372, nil, 372, 372, 372, 372, - 372, 874, 874, 874, 874, 874, 874, 874, 874, 874, - 874, 874, nil, 874, 874, nil, nil, 874, 874, nil, - 372, nil, nil, 372, nil, nil, 372, 372, nil, nil, - 372, nil, 372, 874, nil, 874, 372, 874, 874, nil, - 874, 874, 874, 874, 874, 372, 874, nil, nil, nil, - 372, 372, 372, 372, nil, 372, 372, 372, 372, nil, - nil, nil, nil, 372, 372, nil, 874, nil, nil, nil, - nil, 372, nil, 372, 372, 372, nil, nil, 372, 372, - 387, 387, 387, 387, 387, 387, nil, nil, nil, 387, - 387, nil, nil, nil, 387, nil, 387, 387, 387, 387, - 387, 387, 387, nil, nil, nil, nil, nil, 387, 387, - 387, 387, 387, 387, 387, nil, nil, 387, nil, nil, - nil, nil, nil, 387, 387, 387, 387, 387, 387, 387, - 387, 387, 387, 387, 387, nil, 387, 387, 387, nil, - 387, 387, 387, 387, 387, 1010, 1010, 1010, 1010, 1010, - 1010, 1010, 1010, 1010, 1010, 1010, nil, 1010, 1010, nil, - nil, 1010, 1010, nil, 387, nil, nil, 387, nil, nil, - 387, 387, nil, nil, 387, nil, 387, 1010, nil, 1010, - 387, 1010, 1010, nil, 1010, 1010, 1010, 1010, 1010, 387, - 1010, nil, nil, nil, 387, 387, 387, 387, nil, 387, - 387, 387, 387, nil, nil, nil, nil, 387, 387, nil, - 1010, nil, nil, nil, nil, 387, nil, 387, 387, 387, - nil, nil, 387, 387, 388, 388, 388, 388, 388, 388, - nil, nil, nil, 388, 388, nil, nil, nil, 388, nil, - 388, 388, 388, 388, 388, 388, 388, nil, nil, nil, - nil, nil, 388, 388, 388, 388, 388, 388, 388, nil, - nil, 388, nil, nil, nil, nil, nil, 388, 388, 388, - 388, 388, 388, 388, 388, 388, 388, 388, 388, nil, - 388, 388, 388, nil, 388, 388, 388, 388, 388, 1011, - 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, 1011, - nil, 1011, 1011, nil, nil, 1011, 1011, nil, 388, nil, - nil, 388, nil, nil, 388, 388, nil, nil, 388, nil, - 388, 1011, nil, 1011, 388, 1011, 1011, nil, 1011, 1011, - 1011, 1011, 1011, 388, 1011, nil, nil, nil, 388, 388, - 388, 388, nil, 388, 388, 388, 388, nil, nil, nil, - nil, 388, 388, nil, 1011, nil, nil, nil, nil, 388, - nil, 388, 388, 388, nil, nil, 388, 388, 618, 618, - 618, 618, 618, 618, nil, nil, nil, 618, 618, nil, - nil, nil, 618, nil, 618, 618, 618, 618, 618, 618, - 618, nil, nil, nil, nil, nil, 618, 618, 618, 618, - 618, 618, 618, nil, nil, 618, nil, nil, nil, nil, - nil, 618, 618, 618, 618, 618, 618, 618, 618, 618, - 618, 618, 618, nil, 618, 618, 618, nil, 618, 618, - 618, 618, 618, 1033, 1033, 1033, 1033, 1033, 1033, 1033, - 1033, 1033, 1033, 1033, nil, 1033, 1033, nil, nil, 1033, - 1033, nil, 618, nil, nil, 618, nil, nil, 618, 618, - nil, nil, 618, nil, 618, 1033, nil, 1033, 618, 1033, - 1033, nil, 1033, 1033, 1033, 1033, 1033, 618, 1033, nil, - nil, nil, 618, 618, 618, 618, nil, 618, 618, 618, - 618, nil, nil, nil, nil, 618, 618, nil, 1033, nil, - nil, nil, nil, 618, nil, 618, 618, 618, nil, nil, - 618, 618, 621, 621, 621, 621, 621, 621, nil, nil, - nil, 621, 621, nil, nil, nil, 621, nil, 621, 621, - 621, 621, 621, 621, 621, nil, nil, nil, nil, nil, - 621, 621, 621, 621, 621, 621, 621, nil, nil, 621, - nil, nil, nil, nil, nil, 621, 621, 621, 621, 621, - 621, 621, 621, 621, 621, 621, 621, nil, 621, 621, - 621, nil, 621, 621, 621, 621, 621, 1034, 1034, 1034, - 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, nil, 1034, - 1034, nil, nil, 1034, 1034, nil, 621, nil, nil, 621, - nil, nil, 621, 621, nil, nil, 621, nil, 621, 1034, - nil, 1034, 621, 1034, 1034, nil, 1034, 1034, 1034, 1034, - 1034, 621, 1034, nil, nil, nil, 621, 621, 621, 621, - nil, 621, 621, 621, 621, nil, nil, nil, nil, 621, - 621, nil, 1034, nil, nil, nil, nil, 621, nil, 621, - 621, 621, nil, nil, 621, 621, 642, 642, 642, 642, - 642, 642, nil, nil, nil, 642, 642, nil, nil, nil, - 642, nil, 642, 642, 642, 642, 642, 642, 642, nil, - nil, nil, nil, nil, 642, 642, 642, 642, 642, 642, - 642, nil, nil, 642, nil, nil, nil, nil, nil, 642, - 642, 642, 642, 642, 642, 642, 642, 642, 642, 642, - 642, nil, 642, 642, 642, nil, 642, 642, 642, 642, - 642, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, 1067, - 1067, 1067, nil, 1067, 1067, nil, nil, 1067, 1067, nil, - 642, nil, nil, 642, nil, nil, 642, 642, nil, nil, - 642, nil, 642, 1067, nil, 1067, 642, 1067, 1067, nil, - 1067, 1067, 1067, 1067, 1067, 642, 1067, nil, nil, nil, - 642, 642, 642, 642, nil, 642, 642, 642, 642, nil, - nil, nil, nil, 642, 642, nil, 1067, nil, nil, nil, - nil, 642, nil, 642, 642, 642, nil, nil, 642, 642, - 841, 841, 841, 841, 841, 841, nil, nil, nil, 841, - 841, nil, nil, nil, 841, nil, 841, 841, 841, 841, - 841, 841, 841, nil, nil, nil, nil, nil, 841, 841, - 841, 841, 841, 841, 841, nil, 494, 841, 494, 494, - 494, nil, 494, 841, 841, 841, 841, 841, 841, 841, - 841, 841, 841, 841, 841, nil, 841, 841, 841, nil, - 841, 841, 841, 841, 841, 710, nil, 710, 710, 710, - nil, 710, nil, 494, nil, nil, 532, nil, nil, nil, - nil, nil, 494, nil, 841, nil, nil, 841, nil, nil, - 841, 841, nil, nil, 841, 913, 841, 913, 913, 913, - 841, 913, 710, nil, nil, nil, nil, nil, 532, 841, - nil, 710, 532, 532, 841, 841, 841, 841, nil, 841, - 841, 841, 841, nil, nil, nil, nil, 841, 841, nil, - nil, nil, 913, nil, nil, 841, nil, 841, 841, 841, - nil, 913, 841, 841, 846, 846, 846, 846, 846, 846, - nil, nil, nil, 846, 846, nil, nil, nil, 846, nil, - 846, 846, 846, 846, 846, 846, 846, nil, nil, nil, - nil, nil, 846, 846, 846, 846, 846, 846, 846, nil, - nil, 846, nil, nil, nil, nil, nil, 846, 846, 846, - 846, 846, 846, 846, 846, 846, 846, 846, 846, nil, - 846, 846, 846, nil, 846, 846, 846, 846, 846, 364, - 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, - nil, 364, 364, nil, nil, 364, 364, nil, 846, nil, - nil, 846, nil, nil, 846, 846, nil, 546, 846, nil, - 846, 364, nil, 364, 846, 364, 364, nil, 364, 364, - 364, 364, 364, 846, 364, nil, nil, nil, 846, 846, - 846, 846, nil, 846, 846, 846, 846, nil, nil, 546, - nil, 846, 846, 546, 546, nil, 546, 546, nil, 846, - nil, 846, 846, 846, nil, nil, 846, 846, 857, 857, - 857, 857, 857, 857, nil, nil, nil, 857, 857, nil, - nil, nil, 857, nil, 857, 857, 857, 857, 857, 857, - 857, nil, nil, nil, nil, nil, 857, 857, 857, 857, - 857, 857, 857, nil, nil, 857, nil, nil, nil, nil, - nil, 857, 857, 857, 857, 857, 857, 857, 857, 857, - 857, 857, 857, nil, 857, 857, 857, nil, 857, 857, - 857, 857, 857, 365, 365, 365, 365, 365, 365, 365, - 365, 365, 365, 365, nil, 365, 365, nil, nil, 365, - 365, nil, 857, nil, nil, 857, nil, nil, 857, 857, - nil, 547, 857, nil, 857, 365, nil, 365, 857, 365, - 365, nil, 365, 365, 365, 365, 365, 857, 365, nil, - nil, nil, 857, 857, 857, 857, nil, 857, 857, 857, - 857, nil, nil, 547, nil, 857, 857, 547, 547, nil, - 547, 547, nil, 857, nil, 857, 857, 857, nil, nil, - 857, 857, 892, 892, 892, 892, 892, 892, nil, nil, - nil, 892, 892, nil, nil, nil, 892, nil, 892, 892, - 892, 892, 892, 892, 892, nil, nil, nil, nil, nil, - 892, 892, 892, 892, 892, 892, 892, nil, nil, 892, - nil, nil, nil, nil, nil, 892, 892, 892, 892, 892, - 892, 892, 892, 892, 892, 892, 892, nil, 892, 892, - 892, nil, 892, 892, 892, 892, 892, 529, 529, 529, - 529, 529, 529, 529, 529, 529, 529, 529, nil, 529, - 529, nil, nil, 529, 529, nil, 892, nil, nil, 892, - nil, nil, 892, 892, nil, nil, 892, nil, 892, 529, - nil, 529, 892, 529, 529, nil, 529, 529, 529, 529, - 529, 892, 529, nil, nil, nil, 892, 892, 892, 892, - nil, 892, 892, 892, 892, nil, nil, nil, nil, 892, - 892, nil, 914, nil, 914, 914, 914, 892, 914, 892, - 892, 892, nil, nil, 892, 892, 973, 973, 973, 973, - 973, 973, nil, nil, nil, 973, 973, nil, nil, nil, - 973, nil, 973, 973, 973, 973, 973, 973, 973, 914, - nil, nil, nil, nil, 973, 973, 973, 973, 973, 973, - 973, nil, nil, 973, nil, nil, nil, nil, nil, 973, - 973, 973, 973, 973, 973, 973, 973, 973, 973, 973, - 973, nil, 973, 973, 973, nil, 973, 973, 973, 973, - 973, 530, 530, 530, 530, 530, 530, 530, 530, 530, - 530, 530, nil, 530, 530, nil, nil, 530, 530, nil, - 973, nil, nil, 973, nil, nil, 973, 973, nil, nil, - 973, nil, 973, 530, nil, 530, 973, 530, 530, nil, - 530, 530, 530, 530, 530, 973, 530, nil, nil, nil, - 973, 973, 973, 973, nil, 973, 973, 973, 973, nil, - nil, nil, nil, 973, 973, nil, 1114, nil, 1114, 1114, - 1114, 973, 1114, 973, 973, 973, nil, nil, 973, 973, - 991, 991, 991, 991, 991, 991, nil, nil, nil, 991, - 991, nil, nil, nil, 991, nil, 991, 991, 991, 991, - 991, 991, 991, 1114, nil, nil, nil, nil, 991, 991, - 991, 991, 991, 991, 991, nil, 1115, 991, 1115, 1115, - 1115, nil, 1115, 991, 991, 991, 991, 991, 991, 991, - 991, 991, 991, 991, 991, nil, 991, 991, 991, nil, - 991, 991, 991, 991, 991, 540, 540, 540, 540, 540, - 540, 540, nil, 1115, 540, 540, nil, nil, nil, nil, - nil, 540, 540, nil, 991, nil, nil, 991, nil, nil, - 991, 991, nil, nil, 991, nil, 991, 540, nil, 540, - 991, 540, 540, nil, 540, 540, 540, 540, 540, 991, - 540, nil, nil, nil, 991, 991, 991, 991, nil, 991, - 991, 991, 991, nil, nil, nil, nil, 991, 991, nil, - nil, nil, nil, nil, nil, 991, nil, 991, 991, 991, - nil, nil, 991, 991, 997, 997, 997, 997, 997, 997, - nil, nil, nil, 997, 997, nil, nil, nil, 997, nil, - 997, 997, 997, 997, 997, 997, 997, nil, nil, nil, - nil, nil, 997, 997, 997, 997, 997, 997, 997, nil, - nil, 997, nil, nil, nil, nil, nil, 997, 997, 997, - 997, 997, 997, 997, 997, 997, 997, 997, 997, nil, - 997, 997, 997, nil, 997, 997, 997, 997, 997, 541, - 541, 541, 541, 541, 541, 541, nil, nil, 541, 541, - nil, nil, nil, nil, nil, 541, 541, nil, 997, nil, - nil, 997, nil, nil, 997, 997, nil, nil, 997, nil, - 997, 541, nil, 541, 997, 541, 541, nil, 541, 541, - 541, 541, 541, 997, 541, nil, nil, nil, 997, 997, - 997, 997, nil, 997, 997, 997, 997, nil, nil, nil, - nil, 997, 997, nil, nil, nil, nil, nil, nil, 997, - nil, 997, 997, 997, nil, nil, 997, 997, 1013, 1013, - 1013, 1013, 1013, 1013, nil, nil, nil, 1013, 1013, nil, - nil, nil, 1013, nil, 1013, 1013, 1013, 1013, 1013, 1013, - 1013, nil, nil, nil, nil, nil, 1013, 1013, 1013, 1013, - 1013, 1013, 1013, nil, nil, 1013, nil, nil, nil, nil, - nil, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, - 1013, 1013, 1013, nil, 1013, 1013, 1013, nil, 1013, 1013, - 1013, 1013, 1013, 542, 542, 542, 542, 542, 542, 542, - nil, nil, 542, 542, nil, nil, nil, nil, nil, 542, - 542, nil, 1013, nil, nil, 1013, nil, nil, 1013, 1013, - nil, nil, 1013, nil, 1013, 542, nil, 542, 1013, 542, - 542, nil, 542, 542, 542, 542, 542, 1013, 542, nil, - nil, nil, 1013, 1013, 1013, 1013, nil, 1013, 1013, 1013, - 1013, nil, nil, nil, nil, 1013, 1013, nil, nil, nil, - nil, nil, nil, 1013, nil, 1013, 1013, 1013, nil, nil, - 1013, 1013, 1068, 1068, 1068, 1068, 1068, 1068, nil, nil, - nil, 1068, 1068, nil, nil, nil, 1068, nil, 1068, 1068, - 1068, 1068, 1068, 1068, 1068, nil, nil, nil, nil, nil, - 1068, 1068, 1068, 1068, 1068, 1068, 1068, nil, nil, 1068, - nil, nil, nil, nil, nil, 1068, 1068, 1068, 1068, 1068, - 1068, 1068, 1068, 1068, 1068, 1068, 1068, nil, 1068, 1068, - 1068, nil, 1068, 1068, 1068, 1068, 1068, 543, 543, 543, - 543, 543, 543, 543, nil, nil, 543, 543, nil, nil, - nil, nil, nil, 543, 543, nil, 1068, nil, nil, 1068, - nil, nil, 1068, 1068, nil, nil, 1068, nil, 1068, 543, - nil, 543, 1068, 543, 543, nil, 543, 543, 543, 543, - 543, 1068, 543, nil, nil, nil, 1068, 1068, 1068, 1068, - nil, 1068, 1068, 1068, 1068, nil, nil, nil, nil, 1068, - 1068, nil, nil, nil, nil, nil, nil, 1068, nil, 1068, - 1068, 1068, nil, nil, 1068, 1068, 1097, 1097, 1097, 1097, - 1097, 1097, nil, nil, nil, 1097, 1097, nil, nil, nil, - 1097, nil, 1097, 1097, 1097, 1097, 1097, 1097, 1097, nil, - nil, nil, nil, nil, 1097, 1097, 1097, 1097, 1097, 1097, - 1097, nil, nil, 1097, nil, nil, nil, nil, nil, 1097, - 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, 1097, - 1097, nil, 1097, 1097, 1097, nil, 1097, 1097, 1097, 1097, - 1097, 544, 544, 544, 544, 544, 544, 544, nil, nil, - 544, 544, nil, nil, nil, nil, nil, 544, 544, nil, - 1097, nil, nil, 1097, nil, nil, 1097, 1097, nil, nil, - 1097, nil, 1097, 544, nil, 544, 1097, 544, 544, nil, - 544, 544, 544, 544, 544, 1097, 544, nil, nil, nil, - 1097, 1097, 1097, 1097, nil, 1097, 1097, 1097, 1097, nil, - nil, nil, nil, 1097, 1097, nil, nil, nil, nil, nil, - nil, 1097, nil, 1097, 1097, 1097, nil, nil, 1097, 1097, - 1098, 1098, 1098, 1098, 1098, 1098, nil, nil, nil, 1098, - 1098, nil, nil, nil, 1098, nil, 1098, 1098, 1098, 1098, - 1098, 1098, 1098, nil, nil, nil, nil, nil, 1098, 1098, - 1098, 1098, 1098, 1098, 1098, nil, nil, 1098, nil, nil, - nil, nil, nil, 1098, 1098, 1098, 1098, 1098, 1098, 1098, - 1098, 1098, 1098, 1098, 1098, nil, 1098, 1098, 1098, nil, - 1098, 1098, 1098, 1098, 1098, 545, 545, 545, 545, 545, - 545, 545, nil, nil, 545, 545, nil, nil, nil, nil, - nil, 545, 545, nil, 1098, nil, nil, 1098, nil, nil, - 1098, 1098, nil, nil, 1098, nil, 1098, 545, nil, 545, - 1098, 545, 545, nil, 545, 545, 545, 545, 545, 1098, - 545, nil, nil, nil, 1098, 1098, 1098, 1098, nil, 1098, - 1098, 1098, 1098, nil, nil, nil, nil, 1098, 1098, nil, - nil, nil, nil, nil, nil, 1098, nil, 1098, 1098, 1098, - nil, nil, 1098, 1098, 1103, 1103, 1103, 1103, 1103, 1103, - nil, nil, nil, 1103, 1103, nil, nil, nil, 1103, nil, - 1103, 1103, 1103, 1103, 1103, 1103, 1103, nil, nil, nil, - nil, nil, 1103, 1103, 1103, 1103, 1103, 1103, 1103, nil, - nil, 1103, nil, nil, nil, nil, nil, 1103, 1103, 1103, - 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, 1103, nil, - 1103, 1103, 1103, nil, 1103, 1103, 1103, 1103, 1103, 548, - 548, 548, 548, 548, 548, 548, nil, nil, 548, 548, - nil, nil, nil, nil, nil, 548, 548, nil, 1103, nil, - nil, 1103, nil, nil, 1103, 1103, nil, nil, 1103, nil, - 1103, 548, nil, 548, 1103, 548, 548, nil, 548, 548, - 548, 548, 548, 1103, 548, nil, nil, nil, 1103, 1103, - 1103, 1103, nil, 1103, 1103, 1103, 1103, nil, nil, nil, - nil, 1103, 1103, nil, nil, nil, nil, nil, nil, 1103, - nil, 1103, 1103, 1103, nil, nil, 1103, 1103, 1147, 1147, - 1147, 1147, 1147, 1147, nil, nil, nil, 1147, 1147, nil, - nil, nil, 1147, nil, 1147, 1147, 1147, 1147, 1147, 1147, - 1147, nil, nil, nil, nil, nil, 1147, 1147, 1147, 1147, - 1147, 1147, 1147, nil, nil, 1147, nil, nil, nil, nil, - nil, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, - 1147, 1147, 1147, nil, 1147, 1147, 1147, nil, 1147, 1147, - 1147, 1147, 1147, 549, 549, 549, 549, 549, 549, 549, - 549, nil, 549, 549, nil, nil, nil, nil, nil, 549, - 549, nil, 1147, nil, nil, 1147, nil, nil, 1147, 1147, - nil, nil, 1147, nil, 1147, 549, nil, 549, 1147, 549, - 549, nil, 549, 549, 549, 549, 549, 1147, 549, nil, - nil, nil, 1147, 1147, 1147, 1147, nil, 1147, 1147, 1147, - 1147, nil, nil, nil, nil, 1147, 1147, nil, nil, nil, - nil, nil, nil, 1147, nil, 1147, 1147, 1147, nil, nil, - 1147, 1147, 1191, 1191, 1191, 1191, 1191, 1191, nil, nil, - nil, 1191, 1191, nil, nil, nil, 1191, nil, 1191, 1191, - 1191, 1191, 1191, 1191, 1191, nil, nil, nil, nil, nil, - 1191, 1191, 1191, 1191, 1191, 1191, 1191, nil, nil, 1191, - nil, nil, nil, nil, nil, 1191, 1191, 1191, 1191, 1191, - 1191, 1191, 1191, 1191, 1191, 1191, 1191, nil, 1191, 1191, - 1191, nil, 1191, 1191, 1191, 1191, 1191, 551, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 551, 551, nil, 1191, nil, nil, 1191, - nil, nil, 1191, 1191, nil, nil, 1191, nil, 1191, 551, - nil, 551, 1191, 551, 551, nil, 551, 551, nil, nil, - 551, 1191, 551, nil, nil, nil, 1191, 1191, 1191, 1191, - nil, 1191, 1191, 1191, 1191, nil, nil, nil, nil, 1191, - 1191, nil, nil, nil, nil, nil, nil, 1191, nil, 1191, - 1191, 1191, nil, nil, 1191, 1191, 7, 7, 7, 7, - 7, nil, nil, nil, 7, 7, nil, nil, nil, 7, - nil, 7, 7, 7, 7, 7, 7, 7, nil, nil, - nil, nil, nil, 7, 7, 7, 7, 7, 7, 7, - nil, nil, 7, nil, nil, nil, nil, nil, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - nil, 7, 7, 7, nil, 7, 7, 7, 7, 7, - 604, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 604, 604, nil, 7, - nil, nil, 7, nil, nil, 7, 7, nil, nil, 7, - nil, 7, 604, nil, 604, 7, 604, 604, nil, 604, - 604, nil, nil, 604, 7, 604, nil, nil, nil, 7, - 7, 7, 7, nil, 7, 7, 7, 7, nil, nil, - nil, nil, 7, 7, nil, nil, nil, 24, 24, 24, - 7, 24, 7, 7, 7, 24, 24, 7, 7, nil, - 24, nil, 24, 24, 24, 24, 24, 24, 24, nil, - nil, nil, nil, nil, 24, 24, 24, 24, 24, 24, - 24, nil, nil, 24, nil, nil, nil, nil, nil, nil, - 24, nil, nil, 24, 24, 24, 24, 24, 24, 24, - 24, nil, 24, 24, 24, nil, 24, 24, 24, 24, - 24, 537, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 537, 537, nil, - 24, nil, nil, 24, nil, nil, 24, 24, nil, nil, - 24, nil, nil, 537, nil, 537, 24, 537, 537, nil, - 537, 537, nil, nil, nil, 24, nil, nil, nil, nil, - 24, 24, 24, 24, nil, 24, 24, 24, 24, nil, - nil, nil, nil, 24, 24, nil, nil, nil, nil, nil, - nil, 24, nil, 24, 24, 24, 32, nil, 24, 24, - nil, nil, nil, 32, 32, 32, nil, nil, 32, 32, - 32, 538, 32, nil, nil, nil, nil, nil, nil, nil, - 32, 32, 32, 32, nil, nil, nil, 538, 538, nil, - nil, nil, 32, 32, nil, 32, 32, 32, 32, 32, - nil, nil, nil, 538, nil, 538, nil, 538, 538, nil, - 538, 538, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, nil, nil, 32, 32, - 32, nil, nil, 32, nil, 32, 32, nil, nil, 32, - 32, nil, 32, nil, 32, nil, 32, nil, 32, 32, - nil, 32, 32, 32, 32, 32, 33, 32, 32, 32, - nil, nil, nil, 33, 33, 33, nil, nil, 33, 33, - 33, nil, 33, 32, 539, nil, 32, 32, nil, 32, - 33, 32, 33, 33, nil, nil, nil, nil, 32, nil, - 539, 539, 33, 33, nil, 33, 33, 33, 33, 33, - nil, nil, nil, nil, nil, nil, 539, nil, nil, nil, - 539, 539, nil, 539, 539, nil, nil, nil, nil, nil, - nil, nil, 33, 33, 33, 33, 33, 33, 33, 33, - 33, 33, 33, 33, 33, 33, nil, nil, 33, 33, - 33, nil, nil, 33, nil, 33, 33, nil, nil, 33, - 33, nil, 33, nil, 33, nil, 33, nil, 33, 33, - nil, 33, 33, 33, 33, 33, nil, 33, nil, 33, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 33, nil, nil, 33, 33, nil, 33, - nil, 33, 34, 34, 34, nil, 34, nil, 33, nil, - 34, 34, nil, nil, nil, 34, nil, 34, 34, 34, - 34, 34, 34, 34, nil, nil, nil, nil, nil, 34, - 34, 34, 34, 34, 34, 34, nil, nil, 34, nil, - nil, nil, nil, nil, nil, 34, nil, nil, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - nil, 34, 34, 34, 34, 34, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 34, nil, nil, 34, nil, - nil, 34, 34, nil, nil, 34, nil, 34, nil, 34, - nil, 34, nil, nil, 34, nil, nil, nil, nil, nil, - 34, nil, nil, nil, nil, 34, 34, 34, 34, nil, - 34, 34, 34, 34, nil, nil, nil, nil, 34, 34, - nil, nil, nil, 35, 35, 35, 34, 35, 34, 34, - 34, 35, 35, 34, 34, nil, 35, nil, 35, 35, - 35, 35, 35, 35, 35, nil, nil, nil, nil, nil, - 35, 35, 35, 35, 35, 35, 35, nil, nil, 35, - nil, nil, nil, nil, nil, nil, 35, nil, nil, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, nil, 35, 35, 35, 35, 35, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 35, nil, nil, 35, - nil, nil, 35, 35, nil, nil, 35, nil, 35, nil, - 35, nil, 35, nil, nil, 35, nil, nil, nil, nil, - nil, 35, nil, nil, nil, nil, 35, 35, 35, 35, - nil, 35, 35, 35, 35, nil, nil, nil, nil, 35, - 35, nil, nil, nil, 36, 36, 36, 35, 36, 35, - 35, 35, 36, 36, 35, 35, nil, 36, nil, 36, - 36, 36, 36, 36, 36, 36, nil, nil, nil, nil, - nil, 36, 36, 36, 36, 36, 36, 36, nil, nil, - 36, nil, nil, nil, nil, nil, nil, 36, nil, nil, - 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, - 36, 36, nil, 36, 36, 36, 36, 36, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 36, nil, nil, - 36, nil, nil, 36, 36, nil, nil, 36, nil, 36, - nil, 36, nil, 36, nil, nil, 36, nil, nil, nil, - nil, nil, 36, nil, nil, nil, nil, 36, 36, 36, - 36, nil, 36, 36, 36, 36, nil, nil, nil, nil, - 36, 36, nil, nil, nil, 46, 46, 46, 36, 46, - 36, 36, 36, 46, 46, 36, 36, nil, 46, nil, - 46, 46, 46, 46, 46, 46, 46, nil, nil, nil, - nil, nil, 46, 46, 46, 46, 46, 46, 46, nil, - nil, 46, nil, nil, nil, nil, nil, nil, 46, nil, - nil, 46, 46, 46, 46, 46, 46, 46, 46, nil, - 46, 46, 46, nil, 46, 46, 46, 46, 46, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 46, nil, - nil, 46, nil, nil, 46, 46, nil, nil, 46, nil, - nil, nil, nil, nil, 46, nil, nil, nil, nil, nil, - nil, nil, nil, 46, nil, nil, nil, nil, 46, 46, - 46, 46, nil, 46, 46, 46, 46, nil, nil, nil, - nil, 46, 46, nil, nil, nil, 47, 47, 47, 46, - 47, 46, 46, 46, 47, 47, 46, 46, nil, 47, - nil, 47, 47, 47, 47, 47, 47, 47, nil, nil, - nil, nil, nil, 47, 47, 47, 47, 47, 47, 47, - nil, nil, 47, nil, nil, nil, nil, nil, nil, 47, - nil, nil, 47, 47, 47, 47, 47, 47, 47, 47, - nil, 47, 47, 47, nil, 47, 47, 47, 47, 47, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 47, - nil, nil, 47, nil, nil, 47, 47, nil, nil, 47, - nil, nil, nil, nil, nil, 47, nil, nil, nil, nil, - nil, nil, nil, nil, 47, nil, nil, nil, nil, 47, - 47, 47, 47, nil, 47, 47, 47, 47, nil, nil, - nil, nil, 47, 47, nil, nil, nil, 49, 49, 49, - 47, 49, 47, 47, 47, 49, 49, 47, 47, nil, - 49, nil, 49, 49, 49, 49, 49, 49, 49, nil, - nil, nil, nil, nil, 49, 49, 49, 49, 49, 49, - 49, nil, nil, 49, nil, nil, nil, nil, nil, nil, - 49, nil, nil, 49, 49, 49, 49, 49, 49, 49, - 49, nil, 49, 49, 49, nil, 49, 49, 49, 49, - 49, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 49, nil, nil, 49, nil, nil, 49, 49, nil, nil, - 49, nil, nil, nil, nil, nil, 49, nil, nil, nil, - nil, nil, nil, nil, nil, 49, nil, nil, nil, nil, - 49, 49, 49, 49, nil, 49, 49, 49, 49, nil, - nil, nil, nil, 49, 49, nil, nil, nil, 50, 50, - 50, 49, 50, 49, 49, 49, 50, 50, 49, 49, - nil, 50, nil, 50, 50, 50, 50, 50, 50, 50, - nil, nil, nil, nil, nil, 50, 50, 50, 50, 50, - 50, 50, nil, nil, 50, nil, nil, nil, nil, nil, - nil, 50, nil, nil, 50, 50, 50, 50, 50, 50, - 50, 50, nil, 50, 50, 50, nil, 50, 50, 50, - 50, 50, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 50, nil, nil, 50, nil, nil, 50, 50, nil, - nil, 50, nil, nil, nil, nil, nil, 50, nil, nil, - nil, nil, nil, nil, nil, nil, 50, nil, nil, nil, - nil, 50, 50, 50, 50, nil, 50, 50, 50, 50, - nil, nil, nil, nil, 50, 50, nil, nil, nil, 52, - 52, 52, 50, 52, 50, 50, 50, 52, 52, 50, - 50, nil, 52, nil, 52, 52, 52, 52, 52, 52, - 52, nil, nil, nil, nil, nil, 52, 52, 52, 52, - 52, 52, 52, nil, nil, 52, nil, nil, nil, nil, - nil, nil, 52, nil, nil, 52, 52, 52, 52, 52, - 52, 52, 52, nil, 52, 52, 52, nil, 52, 52, - 52, 52, 52, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 52, nil, nil, 52, nil, nil, 52, 52, - nil, nil, 52, nil, nil, nil, nil, nil, 52, nil, - nil, nil, nil, nil, nil, nil, nil, 52, nil, nil, - nil, nil, 52, 52, 52, 52, nil, 52, 52, 52, - 52, nil, nil, nil, nil, 52, 52, nil, nil, nil, - nil, nil, nil, 52, nil, 52, 52, 52, 64, nil, - 52, 52, nil, nil, nil, 64, 64, 64, nil, nil, - 64, 64, 64, nil, 64, nil, nil, nil, nil, nil, - nil, nil, 64, nil, 64, 64, 64, nil, nil, nil, - 762, 762, 762, 762, 64, 64, nil, 64, 64, 64, - 64, 64, nil, nil, nil, nil, 762, 762, 762, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 762, - 762, nil, nil, 762, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, nil, nil, - 64, 64, 64, nil, nil, 64, nil, nil, 64, nil, - nil, 64, 64, nil, 64, nil, 64, nil, 64, nil, - 64, 64, nil, 64, 64, 64, 64, 64, nil, 64, - nil, 64, nil, 762, 762, 762, 762, nil, 762, 762, - 762, 762, nil, nil, nil, 64, 762, 762, 64, 64, - 64, 64, nil, 64, 762, 64, 762, 762, 762, nil, - 64, 66, 66, 66, 66, 66, nil, nil, nil, 66, - 66, nil, nil, nil, 66, nil, 66, 66, 66, 66, - 66, 66, 66, nil, nil, nil, nil, nil, 66, 66, - 66, 66, 66, 66, 66, nil, nil, 66, nil, nil, - nil, nil, nil, 66, 66, nil, 66, 66, 66, 66, - 66, 66, 66, 66, 66, nil, 66, 66, 66, nil, - 66, 66, 66, 66, 66, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 66, nil, nil, 66, nil, nil, - 66, 66, nil, nil, 66, nil, 66, nil, nil, nil, - 66, nil, nil, nil, nil, nil, nil, nil, nil, 66, - nil, nil, nil, nil, 66, 66, 66, 66, nil, 66, - 66, 66, 66, nil, nil, nil, nil, 66, 66, nil, - nil, nil, 67, 67, 67, 66, 67, 66, 66, 66, - 67, 67, 66, 66, nil, 67, nil, 67, 67, 67, - 67, 67, 67, 67, nil, nil, nil, nil, nil, 67, - 67, 67, 67, 67, 67, 67, nil, nil, 67, nil, - nil, nil, nil, nil, nil, 67, nil, nil, 67, 67, - 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, - nil, 67, 67, 67, 67, 67, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 67, nil, nil, 67, nil, - nil, 67, 67, nil, nil, 67, nil, 67, nil, nil, - nil, 67, nil, nil, 67, nil, nil, nil, nil, nil, - 67, nil, nil, nil, nil, 67, 67, 67, 67, nil, - 67, 67, 67, 67, nil, nil, nil, nil, 67, 67, - nil, nil, nil, 68, 68, 68, 67, 68, 67, 67, - 67, 68, 68, 67, 67, nil, 68, nil, 68, 68, - 68, 68, 68, 68, 68, nil, nil, nil, nil, nil, - 68, 68, 68, 68, 68, 68, 68, nil, nil, 68, - nil, nil, nil, nil, nil, nil, 68, nil, nil, 68, - 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, - 68, nil, 68, 68, 68, 68, 68, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 68, nil, nil, 68, - nil, nil, 68, 68, nil, nil, 68, nil, nil, nil, - nil, nil, 68, nil, nil, 68, nil, nil, nil, nil, - nil, 68, nil, nil, nil, nil, 68, 68, 68, 68, - nil, 68, 68, 68, 68, nil, nil, nil, nil, 68, - 68, nil, nil, nil, 71, 71, 71, 68, 71, 68, - 68, 68, 71, 71, 68, 68, nil, 71, nil, 71, - 71, 71, 71, 71, 71, 71, nil, nil, nil, nil, - nil, 71, 71, 71, 71, 71, 71, 71, nil, nil, - 71, nil, nil, nil, nil, nil, nil, 71, nil, nil, - 71, 71, 71, 71, 71, 71, 71, 71, nil, 71, - 71, 71, nil, 71, 71, 71, 71, 71, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 71, nil, nil, - 71, nil, nil, 71, 71, nil, nil, 71, nil, nil, - nil, nil, nil, 71, nil, nil, nil, nil, nil, nil, - nil, nil, 71, nil, nil, nil, nil, 71, 71, 71, - 71, nil, 71, 71, 71, 71, nil, nil, nil, nil, - 71, 71, nil, nil, nil, 72, 72, 72, 71, 72, - 71, 71, 71, 72, 72, 71, 71, nil, 72, nil, - 72, 72, 72, 72, 72, 72, 72, nil, nil, nil, - nil, nil, 72, 72, 72, 72, 72, 72, 72, nil, - nil, 72, nil, nil, nil, nil, nil, nil, 72, nil, - nil, 72, 72, 72, 72, 72, 72, 72, 72, nil, - 72, 72, 72, nil, 72, 72, 72, 72, 72, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 72, nil, - nil, 72, nil, nil, 72, 72, nil, nil, 72, nil, - nil, nil, nil, nil, 72, nil, nil, nil, nil, nil, - nil, nil, nil, 72, nil, nil, nil, nil, 72, 72, - 72, 72, nil, 72, 72, 72, 72, nil, nil, nil, - nil, 72, 72, nil, nil, nil, 75, 75, 75, 72, - 75, 72, 72, 72, 75, 75, 72, 72, nil, 75, - nil, 75, 75, 75, 75, 75, 75, 75, nil, nil, - nil, nil, nil, 75, 75, 75, 75, 75, 75, 75, - nil, nil, 75, nil, nil, nil, nil, nil, nil, 75, - nil, nil, 75, 75, 75, 75, 75, 75, 75, 75, - nil, 75, 75, 75, nil, 75, 75, 75, 75, 75, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 75, - nil, nil, 75, nil, nil, 75, 75, nil, nil, 75, - nil, nil, nil, nil, nil, 75, nil, nil, nil, nil, - nil, nil, nil, nil, 75, nil, nil, nil, nil, 75, - 75, 75, 75, nil, 75, 75, 75, 75, nil, nil, - nil, nil, 75, 75, 75, nil, nil, nil, nil, 75, - 75, nil, 75, 75, 75, nil, nil, 75, 75, 124, - 124, 124, 124, 124, nil, nil, nil, 124, 124, nil, - nil, nil, 124, nil, 124, 124, 124, 124, 124, 124, - 124, nil, nil, nil, nil, nil, 124, 124, 124, 124, - 124, 124, 124, nil, nil, 124, nil, nil, nil, nil, - nil, 124, 124, 124, 124, 124, 124, 124, 124, 124, - 124, 124, 124, nil, 124, 124, 124, nil, 124, 124, - 124, 124, 124, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 124, nil, nil, 124, nil, nil, 124, 124, - nil, nil, 124, nil, 124, nil, nil, nil, 124, nil, - nil, nil, nil, nil, nil, nil, nil, 124, nil, nil, - nil, nil, 124, 124, 124, 124, nil, 124, 124, 124, - 124, nil, nil, nil, nil, 124, 124, nil, nil, nil, - nil, nil, 124, 124, nil, 124, 124, 124, nil, nil, - 124, 124, 129, 129, 129, nil, 129, nil, nil, nil, - 129, 129, nil, nil, nil, 129, nil, 129, 129, 129, - 129, 129, 129, 129, nil, nil, nil, nil, nil, 129, - 129, 129, 129, 129, 129, 129, nil, nil, 129, nil, - nil, nil, nil, nil, nil, 129, nil, nil, 129, 129, - 129, 129, 129, 129, 129, 129, nil, 129, 129, 129, - nil, 129, 129, 129, 129, 129, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 129, nil, nil, 129, nil, - nil, 129, 129, nil, nil, 129, nil, nil, nil, nil, - nil, 129, nil, nil, nil, nil, nil, nil, nil, nil, - 129, nil, nil, nil, nil, 129, 129, 129, 129, nil, - 129, 129, 129, 129, nil, nil, nil, nil, 129, 129, - nil, nil, nil, 130, 130, 130, 129, 130, 129, 129, - 129, 130, 130, 129, 129, nil, 130, nil, 130, 130, - 130, 130, 130, 130, 130, nil, nil, nil, nil, nil, - 130, 130, 130, 130, 130, 130, 130, nil, nil, 130, - nil, nil, nil, nil, nil, nil, 130, nil, nil, 130, - 130, 130, 130, 130, 130, 130, 130, nil, 130, 130, - 130, nil, 130, 130, 130, 130, 130, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 130, nil, nil, 130, - nil, nil, 130, 130, nil, nil, 130, nil, nil, nil, - nil, nil, 130, nil, nil, nil, nil, nil, nil, nil, - nil, 130, nil, nil, nil, nil, 130, 130, 130, 130, - nil, 130, 130, 130, 130, nil, nil, nil, nil, 130, - 130, nil, nil, nil, 131, 131, 131, 130, 131, 130, - 130, 130, 131, 131, 130, 130, nil, 131, nil, 131, - 131, 131, 131, 131, 131, 131, nil, nil, nil, nil, - nil, 131, 131, 131, 131, 131, 131, 131, nil, nil, - 131, nil, nil, nil, nil, nil, nil, 131, nil, nil, - 131, 131, 131, 131, 131, 131, 131, 131, nil, 131, - 131, 131, nil, 131, 131, 131, 131, 131, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 131, nil, nil, - 131, nil, nil, 131, 131, nil, nil, 131, nil, nil, - nil, nil, nil, 131, nil, nil, nil, nil, nil, nil, - nil, nil, 131, nil, nil, nil, nil, 131, 131, 131, - 131, nil, 131, 131, 131, 131, nil, nil, nil, nil, - 131, 131, nil, nil, nil, 132, 132, 132, 131, 132, - 131, 131, 131, 132, 132, 131, 131, nil, 132, nil, - 132, 132, 132, 132, 132, 132, 132, nil, nil, nil, - nil, nil, 132, 132, 132, 132, 132, 132, 132, nil, - nil, 132, nil, nil, nil, nil, nil, nil, 132, nil, - nil, 132, 132, 132, 132, 132, 132, 132, 132, nil, - 132, 132, 132, nil, 132, 132, 132, 132, 132, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 132, nil, - nil, 132, nil, nil, 132, 132, nil, nil, 132, nil, - nil, nil, nil, nil, 132, nil, nil, nil, nil, nil, - nil, nil, nil, 132, nil, nil, nil, nil, 132, 132, - 132, 132, nil, 132, 132, 132, 132, nil, nil, nil, - nil, 132, 132, nil, nil, nil, nil, nil, nil, 132, - nil, 132, 132, 132, nil, nil, 132, 132, 133, 133, - 133, 133, 133, nil, nil, nil, 133, 133, nil, nil, - nil, 133, nil, 133, 133, 133, 133, 133, 133, 133, - nil, nil, nil, nil, nil, 133, 133, 133, 133, 133, - 133, 133, nil, nil, 133, nil, nil, nil, nil, nil, - 133, 133, nil, 133, 133, 133, 133, 133, 133, 133, - 133, 133, nil, 133, 133, 133, nil, 133, 133, 133, - 133, 133, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 133, nil, nil, 133, nil, nil, 133, 133, nil, - nil, 133, nil, 133, nil, nil, nil, 133, nil, nil, - nil, nil, nil, nil, nil, nil, 133, nil, nil, nil, - nil, 133, 133, 133, 133, nil, 133, 133, 133, 133, - nil, nil, nil, nil, 133, 133, nil, nil, nil, 219, - 219, 219, 133, 219, 133, 133, 133, 219, 219, 133, - 133, nil, 219, nil, 219, 219, 219, 219, 219, 219, - 219, nil, nil, nil, nil, nil, 219, 219, 219, 219, - 219, 219, 219, nil, nil, 219, nil, nil, nil, nil, - nil, nil, 219, nil, nil, 219, 219, 219, 219, 219, - 219, 219, 219, nil, 219, 219, 219, nil, 219, 219, - 219, 219, 219, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 219, nil, nil, 219, nil, nil, 219, 219, - nil, nil, 219, nil, 219, nil, nil, nil, 219, nil, - nil, nil, nil, nil, nil, nil, nil, 219, nil, nil, - nil, nil, 219, 219, 219, 219, nil, 219, 219, 219, - 219, nil, nil, nil, nil, 219, 219, nil, nil, nil, - 220, 220, 220, 219, 220, 219, 219, 219, 220, 220, - 219, 219, nil, 220, nil, 220, 220, 220, 220, 220, - 220, 220, nil, nil, nil, nil, nil, 220, 220, 220, - 220, 220, 220, 220, nil, nil, 220, nil, nil, nil, - nil, nil, nil, 220, nil, nil, 220, 220, 220, 220, - 220, 220, 220, 220, nil, 220, 220, 220, nil, 220, - 220, 220, 220, 220, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 220, nil, nil, 220, nil, nil, 220, - 220, nil, nil, 220, nil, 220, nil, nil, nil, 220, - nil, nil, nil, nil, nil, nil, nil, nil, 220, nil, - nil, nil, nil, 220, 220, 220, 220, nil, 220, 220, - 220, 220, nil, nil, nil, nil, 220, 220, nil, nil, - nil, 221, 221, 221, 220, 221, 220, 220, 220, 221, - 221, 220, 220, nil, 221, nil, 221, 221, 221, 221, - 221, 221, 221, nil, nil, nil, nil, nil, 221, 221, - 221, 221, 221, 221, 221, nil, nil, 221, nil, nil, - nil, nil, nil, nil, 221, nil, nil, 221, 221, 221, - 221, 221, 221, 221, 221, nil, 221, 221, 221, nil, - 221, 221, 221, 221, 221, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 221, nil, nil, 221, nil, nil, - 221, 221, nil, nil, 221, nil, nil, nil, nil, nil, - 221, nil, nil, nil, nil, nil, nil, nil, nil, 221, - nil, nil, nil, nil, 221, 221, 221, 221, nil, 221, - 221, 221, 221, nil, nil, nil, nil, 221, 221, nil, - nil, nil, 222, 222, 222, 221, 222, 221, 221, 221, - 222, 222, 221, 221, nil, 222, nil, 222, 222, 222, - 222, 222, 222, 222, nil, nil, nil, nil, nil, 222, - 222, 222, 222, 222, 222, 222, nil, nil, 222, nil, - nil, nil, nil, nil, nil, 222, nil, nil, 222, 222, - 222, 222, 222, 222, 222, 222, nil, 222, 222, 222, - nil, 222, 222, 222, 222, 222, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 222, nil, nil, 222, nil, - nil, 222, 222, nil, nil, 222, nil, nil, nil, nil, - nil, 222, nil, nil, nil, nil, nil, nil, nil, nil, - 222, nil, nil, nil, nil, 222, 222, 222, 222, nil, - 222, 222, 222, 222, nil, nil, nil, nil, 222, 222, - nil, nil, nil, 223, 223, 223, 222, 223, 222, 222, - 222, 223, 223, 222, 222, nil, 223, nil, 223, 223, - 223, 223, 223, 223, 223, nil, nil, nil, nil, nil, - 223, 223, 223, 223, 223, 223, 223, nil, nil, 223, - nil, nil, nil, nil, nil, nil, 223, nil, nil, 223, - 223, 223, 223, 223, 223, 223, 223, nil, 223, 223, - 223, nil, 223, 223, 223, 223, 223, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 223, nil, nil, 223, - nil, nil, 223, 223, nil, nil, 223, nil, nil, nil, - nil, nil, 223, nil, nil, nil, nil, nil, nil, nil, - nil, 223, nil, nil, nil, nil, 223, 223, 223, 223, - nil, 223, 223, 223, 223, nil, nil, nil, nil, 223, - 223, nil, nil, nil, 224, 224, 224, 223, 224, 223, - 223, 223, 224, 224, 223, 223, nil, 224, nil, 224, - 224, 224, 224, 224, 224, 224, nil, nil, nil, nil, - nil, 224, 224, 224, 224, 224, 224, 224, nil, nil, - 224, nil, nil, nil, nil, nil, nil, 224, nil, nil, - 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, - 224, 224, nil, 224, 224, 224, 224, 224, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 224, nil, nil, - 224, nil, nil, 224, 224, nil, nil, 224, nil, 224, - nil, 224, nil, 224, nil, nil, 224, nil, nil, nil, - nil, nil, 224, nil, nil, nil, nil, 224, 224, 224, - 224, nil, 224, 224, 224, 224, nil, nil, nil, nil, - 224, 224, nil, nil, nil, 237, 237, 237, 224, 237, - 224, 224, 224, 237, 237, 224, 224, nil, 237, nil, - 237, 237, 237, 237, 237, 237, 237, nil, nil, nil, - nil, nil, 237, 237, 237, 237, 237, 237, 237, nil, - nil, 237, nil, nil, nil, nil, nil, nil, 237, nil, - nil, 237, 237, 237, 237, 237, 237, 237, 237, nil, - 237, 237, 237, nil, 237, 237, 237, 237, 237, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 237, nil, - nil, 237, nil, nil, 237, 237, nil, nil, 237, nil, - nil, nil, nil, nil, 237, nil, nil, nil, nil, nil, - nil, nil, nil, 237, nil, nil, nil, nil, 237, 237, - 237, 237, nil, 237, 237, 237, 237, nil, nil, nil, - nil, 237, 237, nil, nil, nil, 238, 238, 238, 237, - 238, 237, 237, 237, 238, 238, 237, 237, nil, 238, - nil, 238, 238, 238, 238, 238, 238, 238, nil, nil, - nil, nil, nil, 238, 238, 238, 238, 238, 238, 238, - nil, nil, 238, nil, nil, nil, nil, nil, nil, 238, - nil, nil, 238, 238, 238, 238, 238, 238, 238, 238, - nil, 238, 238, 238, nil, 238, 238, 238, 238, 238, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 238, - nil, nil, 238, nil, nil, 238, 238, nil, nil, 238, - nil, nil, nil, nil, nil, 238, nil, nil, nil, nil, - nil, nil, nil, nil, 238, nil, nil, nil, nil, 238, - 238, 238, 238, nil, 238, 238, 238, 238, nil, nil, - nil, nil, 238, 238, nil, nil, nil, 239, 239, 239, - 238, 239, 238, 238, 238, 239, 239, 238, 238, nil, - 239, nil, 239, 239, 239, 239, 239, 239, 239, nil, - nil, nil, nil, nil, 239, 239, 239, 239, 239, 239, - 239, nil, nil, 239, nil, nil, nil, nil, nil, nil, - 239, nil, nil, 239, 239, 239, 239, 239, 239, 239, - 239, nil, 239, 239, 239, nil, 239, 239, 239, 239, - 239, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 239, nil, nil, 239, nil, nil, 239, 239, nil, nil, - 239, nil, nil, nil, nil, nil, 239, nil, nil, nil, - nil, nil, nil, nil, nil, 239, nil, nil, nil, nil, - 239, 239, 239, 239, nil, 239, 239, 239, 239, nil, - nil, nil, nil, 239, 239, 239, nil, nil, 250, 250, - 250, 239, 250, 239, 239, 239, 250, 250, 239, 239, - nil, 250, nil, 250, 250, 250, 250, 250, 250, 250, - nil, nil, nil, nil, nil, 250, 250, 250, 250, 250, - 250, 250, nil, nil, 250, nil, nil, nil, nil, nil, - nil, 250, nil, nil, 250, 250, 250, 250, 250, 250, - 250, 250, nil, 250, 250, 250, nil, 250, 250, 250, - 250, 250, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 250, nil, nil, 250, nil, nil, 250, 250, nil, - nil, 250, nil, nil, nil, nil, nil, 250, nil, nil, - nil, nil, nil, nil, nil, nil, 250, nil, nil, nil, - nil, 250, 250, 250, 250, nil, 250, 250, 250, 250, - nil, nil, nil, nil, 250, 250, nil, nil, nil, 257, - 257, 257, 250, 257, 250, 250, 250, 257, 257, 250, - 250, nil, 257, nil, 257, 257, 257, 257, 257, 257, - 257, nil, nil, nil, nil, nil, 257, 257, 257, 257, - 257, 257, 257, nil, nil, 257, nil, nil, nil, nil, - nil, nil, 257, nil, nil, 257, 257, 257, 257, 257, - 257, 257, 257, nil, 257, 257, 257, nil, 257, 257, - 257, 257, 257, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 257, nil, nil, 257, nil, nil, 257, 257, - nil, nil, 257, nil, nil, nil, nil, nil, 257, nil, - nil, nil, nil, nil, nil, nil, nil, 257, nil, nil, - nil, nil, 257, 257, 257, 257, nil, 257, 257, 257, - 257, nil, nil, nil, nil, 257, 257, nil, nil, nil, - 258, 258, 258, 257, 258, 257, 257, 257, 258, 258, - 257, 257, nil, 258, nil, 258, 258, 258, 258, 258, - 258, 258, nil, nil, nil, nil, nil, 258, 258, 258, - 258, 258, 258, 258, nil, nil, 258, nil, nil, nil, - nil, nil, nil, 258, nil, nil, 258, 258, 258, 258, - 258, 258, 258, 258, nil, 258, 258, 258, nil, 258, - 258, 258, 258, 258, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 258, nil, nil, 258, nil, nil, 258, - 258, nil, nil, 258, nil, nil, nil, nil, nil, 258, - nil, nil, nil, nil, nil, nil, nil, nil, 258, nil, - nil, nil, nil, 258, 258, 258, 258, nil, 258, 258, - 258, 258, nil, nil, nil, nil, 258, 258, nil, nil, - nil, 259, 259, 259, 258, 259, 258, 258, 258, 259, - 259, 258, 258, nil, 259, nil, 259, 259, 259, 259, - 259, 259, 259, nil, nil, nil, nil, nil, 259, 259, - 259, 259, 259, 259, 259, nil, nil, 259, nil, nil, - nil, nil, nil, nil, 259, nil, nil, 259, 259, 259, - 259, 259, 259, 259, 259, nil, 259, 259, 259, nil, - 259, 259, 259, 259, 259, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 259, nil, nil, 259, nil, nil, - 259, 259, nil, nil, 259, nil, nil, nil, nil, nil, - 259, nil, nil, nil, nil, nil, nil, nil, nil, 259, - nil, nil, nil, nil, 259, 259, 259, 259, nil, 259, - 259, 259, 259, nil, nil, nil, nil, 259, 259, nil, - nil, nil, 260, 260, 260, 259, 260, 259, 259, 259, - 260, 260, 259, 259, nil, 260, nil, 260, 260, 260, - 260, 260, 260, 260, nil, nil, nil, nil, nil, 260, - 260, 260, 260, 260, 260, 260, nil, nil, 260, nil, - nil, nil, nil, nil, nil, 260, nil, nil, 260, 260, - 260, 260, 260, 260, 260, 260, nil, 260, 260, 260, - nil, 260, 260, 260, 260, 260, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 260, nil, nil, 260, nil, - nil, 260, 260, nil, nil, 260, nil, nil, nil, nil, - nil, 260, nil, nil, nil, nil, nil, nil, nil, nil, - 260, nil, nil, nil, nil, 260, 260, 260, 260, nil, - 260, 260, 260, 260, nil, nil, nil, nil, 260, 260, - nil, nil, nil, 261, 261, 261, 260, 261, 260, 260, - 260, 261, 261, 260, 260, nil, 261, nil, 261, 261, - 261, 261, 261, 261, 261, nil, nil, nil, nil, nil, - 261, 261, 261, 261, 261, 261, 261, nil, nil, 261, - nil, nil, nil, nil, nil, nil, 261, nil, nil, 261, - 261, 261, 261, 261, 261, 261, 261, nil, 261, 261, - 261, nil, 261, 261, 261, 261, 261, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 261, nil, nil, 261, - nil, nil, 261, 261, nil, nil, 261, nil, nil, nil, - nil, nil, 261, nil, nil, nil, nil, nil, nil, nil, - nil, 261, nil, nil, nil, nil, 261, 261, 261, 261, - nil, 261, 261, 261, 261, nil, nil, nil, nil, 261, - 261, nil, nil, nil, 262, 262, 262, 261, 262, 261, - 261, 261, 262, 262, 261, 261, nil, 262, nil, 262, - 262, 262, 262, 262, 262, 262, nil, nil, nil, nil, - nil, 262, 262, 262, 262, 262, 262, 262, nil, nil, - 262, nil, nil, nil, nil, nil, nil, 262, nil, nil, - 262, 262, 262, 262, 262, 262, 262, 262, nil, 262, - 262, 262, nil, 262, 262, 262, 262, 262, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 262, nil, nil, - 262, nil, nil, 262, 262, nil, nil, 262, nil, nil, - nil, nil, nil, 262, nil, nil, nil, nil, nil, nil, - nil, nil, 262, nil, nil, nil, nil, 262, 262, 262, - 262, nil, 262, 262, 262, 262, nil, nil, nil, nil, - 262, 262, nil, nil, nil, 263, 263, 263, 262, 263, - 262, 262, 262, 263, 263, 262, 262, nil, 263, nil, - 263, 263, 263, 263, 263, 263, 263, nil, nil, nil, - nil, nil, 263, 263, 263, 263, 263, 263, 263, nil, - nil, 263, nil, nil, nil, nil, nil, nil, 263, nil, - nil, 263, 263, 263, 263, 263, 263, 263, 263, nil, - 263, 263, 263, nil, 263, 263, 263, 263, 263, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 263, nil, - nil, 263, nil, nil, 263, 263, nil, nil, 263, nil, - nil, nil, nil, nil, 263, nil, nil, nil, nil, nil, - nil, nil, nil, 263, nil, nil, nil, nil, 263, 263, - 263, 263, nil, 263, 263, 263, 263, nil, nil, nil, - nil, 263, 263, nil, nil, nil, 264, 264, 264, 263, - 264, 263, 263, 263, 264, 264, 263, 263, nil, 264, - nil, 264, 264, 264, 264, 264, 264, 264, nil, nil, - nil, nil, nil, 264, 264, 264, 264, 264, 264, 264, - nil, nil, 264, nil, nil, nil, nil, nil, nil, 264, - nil, nil, 264, 264, 264, 264, 264, 264, 264, 264, - nil, 264, 264, 264, nil, 264, 264, 264, 264, 264, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 264, - nil, nil, 264, nil, nil, 264, 264, nil, nil, 264, - nil, nil, nil, nil, nil, 264, nil, nil, nil, nil, - nil, nil, nil, nil, 264, nil, nil, nil, nil, 264, - 264, 264, 264, nil, 264, 264, 264, 264, nil, nil, - nil, nil, 264, 264, nil, nil, nil, 265, 265, 265, - 264, 265, 264, 264, 264, 265, 265, 264, 264, nil, - 265, nil, 265, 265, 265, 265, 265, 265, 265, nil, - nil, nil, nil, nil, 265, 265, 265, 265, 265, 265, - 265, nil, nil, 265, nil, nil, nil, nil, nil, nil, - 265, nil, nil, 265, 265, 265, 265, 265, 265, 265, - 265, nil, 265, 265, 265, nil, 265, 265, 265, 265, - 265, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 265, nil, nil, 265, nil, nil, 265, 265, nil, nil, - 265, nil, nil, nil, nil, nil, 265, nil, nil, nil, - nil, nil, nil, nil, nil, 265, nil, nil, nil, nil, - 265, 265, 265, 265, nil, 265, 265, 265, 265, nil, - nil, nil, nil, 265, 265, nil, nil, nil, 266, 266, - 266, 265, 266, 265, 265, 265, 266, 266, 265, 265, - nil, 266, nil, 266, 266, 266, 266, 266, 266, 266, - nil, nil, nil, nil, nil, 266, 266, 266, 266, 266, - 266, 266, nil, nil, 266, nil, nil, nil, nil, nil, - nil, 266, nil, nil, 266, 266, 266, 266, 266, 266, - 266, 266, nil, 266, 266, 266, nil, 266, 266, 266, - 266, 266, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 266, nil, nil, 266, nil, nil, 266, 266, nil, - nil, 266, nil, nil, nil, nil, nil, 266, nil, nil, - nil, nil, nil, nil, nil, nil, 266, nil, nil, nil, - nil, 266, 266, 266, 266, nil, 266, 266, 266, 266, - nil, nil, nil, nil, 266, 266, nil, nil, nil, 267, - 267, 267, 266, 267, 266, 266, 266, 267, 267, 266, - 266, nil, 267, nil, 267, 267, 267, 267, 267, 267, - 267, nil, nil, nil, nil, nil, 267, 267, 267, 267, - 267, 267, 267, nil, nil, 267, nil, nil, nil, nil, - nil, nil, 267, nil, nil, 267, 267, 267, 267, 267, - 267, 267, 267, nil, 267, 267, 267, nil, 267, 267, - 267, 267, 267, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 267, nil, nil, 267, nil, nil, 267, 267, - nil, nil, 267, nil, nil, nil, nil, nil, 267, nil, - nil, nil, nil, nil, nil, nil, nil, 267, nil, nil, - nil, nil, 267, 267, 267, 267, nil, 267, 267, 267, - 267, nil, nil, nil, nil, 267, 267, nil, nil, nil, - 268, 268, 268, 267, 268, 267, 267, 267, 268, 268, - 267, 267, nil, 268, nil, 268, 268, 268, 268, 268, - 268, 268, nil, nil, nil, nil, nil, 268, 268, 268, - 268, 268, 268, 268, nil, nil, 268, nil, nil, nil, - nil, nil, nil, 268, nil, nil, 268, 268, 268, 268, - 268, 268, 268, 268, nil, 268, 268, 268, nil, 268, - 268, 268, 268, 268, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 268, nil, nil, 268, nil, nil, 268, - 268, nil, nil, 268, nil, nil, nil, nil, nil, 268, - nil, nil, nil, nil, nil, nil, nil, nil, 268, nil, - nil, nil, nil, 268, 268, 268, 268, nil, 268, 268, - 268, 268, nil, nil, nil, nil, 268, 268, nil, nil, - nil, 269, 269, 269, 268, 269, 268, 268, 268, 269, - 269, 268, 268, nil, 269, nil, 269, 269, 269, 269, - 269, 269, 269, nil, nil, nil, nil, nil, 269, 269, - 269, 269, 269, 269, 269, nil, nil, 269, nil, nil, - nil, nil, nil, nil, 269, nil, nil, 269, 269, 269, - 269, 269, 269, 269, 269, nil, 269, 269, 269, nil, - 269, 269, 269, 269, 269, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 269, nil, nil, 269, nil, nil, - 269, 269, nil, nil, 269, nil, nil, nil, nil, nil, - 269, nil, nil, nil, nil, nil, nil, nil, nil, 269, - nil, nil, nil, nil, 269, 269, 269, 269, nil, 269, - 269, 269, 269, nil, nil, nil, nil, 269, 269, nil, - nil, nil, 270, 270, 270, 269, 270, 269, 269, 269, - 270, 270, 269, 269, nil, 270, nil, 270, 270, 270, - 270, 270, 270, 270, nil, nil, nil, nil, nil, 270, - 270, 270, 270, 270, 270, 270, nil, nil, 270, nil, - nil, nil, nil, nil, nil, 270, nil, nil, 270, 270, - 270, 270, 270, 270, 270, 270, nil, 270, 270, 270, - nil, 270, 270, 270, 270, 270, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 270, nil, nil, 270, nil, - nil, 270, 270, nil, nil, 270, nil, nil, nil, nil, - nil, 270, nil, nil, nil, nil, nil, nil, nil, nil, - 270, nil, nil, nil, nil, 270, 270, 270, 270, nil, - 270, 270, 270, 270, nil, nil, nil, nil, 270, 270, - nil, nil, nil, 271, 271, 271, 270, 271, 270, 270, - 270, 271, 271, 270, 270, nil, 271, nil, 271, 271, - 271, 271, 271, 271, 271, nil, nil, nil, nil, nil, - 271, 271, 271, 271, 271, 271, 271, nil, nil, 271, - nil, nil, nil, nil, nil, nil, 271, nil, nil, 271, - 271, 271, 271, 271, 271, 271, 271, nil, 271, 271, - 271, nil, 271, 271, 271, 271, 271, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 271, nil, nil, 271, - nil, nil, 271, 271, nil, nil, 271, nil, nil, nil, - nil, nil, 271, nil, nil, nil, nil, nil, nil, nil, - nil, 271, nil, nil, nil, nil, 271, 271, 271, 271, - nil, 271, 271, 271, 271, nil, nil, nil, nil, 271, - 271, nil, nil, nil, 272, 272, 272, 271, 272, 271, - 271, 271, 272, 272, 271, 271, nil, 272, nil, 272, - 272, 272, 272, 272, 272, 272, nil, nil, nil, nil, - nil, 272, 272, 272, 272, 272, 272, 272, nil, nil, - 272, nil, nil, nil, nil, nil, nil, 272, nil, nil, - 272, 272, 272, 272, 272, 272, 272, 272, nil, 272, - 272, 272, nil, 272, 272, 272, 272, 272, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 272, nil, nil, - 272, nil, nil, 272, 272, nil, nil, 272, nil, nil, - nil, nil, nil, 272, nil, nil, nil, nil, nil, nil, - nil, nil, 272, nil, nil, nil, nil, 272, 272, 272, - 272, nil, 272, 272, 272, 272, nil, nil, nil, nil, - 272, 272, nil, nil, nil, 273, 273, 273, 272, 273, - 272, 272, 272, 273, 273, 272, 272, nil, 273, nil, - 273, 273, 273, 273, 273, 273, 273, nil, nil, nil, - nil, nil, 273, 273, 273, 273, 273, 273, 273, nil, - nil, 273, nil, nil, nil, nil, nil, nil, 273, nil, - nil, 273, 273, 273, 273, 273, 273, 273, 273, nil, - 273, 273, 273, nil, 273, 273, 273, 273, 273, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 273, nil, - nil, 273, nil, nil, 273, 273, nil, nil, 273, nil, - nil, nil, nil, nil, 273, nil, nil, nil, nil, nil, - nil, nil, nil, 273, nil, nil, nil, nil, 273, 273, - 273, 273, nil, 273, 273, 273, 273, nil, nil, nil, - nil, 273, 273, nil, nil, nil, 274, 274, 274, 273, - 274, 273, 273, 273, 274, 274, 273, 273, nil, 274, - nil, 274, 274, 274, 274, 274, 274, 274, nil, nil, - nil, nil, nil, 274, 274, 274, 274, 274, 274, 274, - nil, nil, 274, nil, nil, nil, nil, nil, nil, 274, - nil, nil, 274, 274, 274, 274, 274, 274, 274, 274, - nil, 274, 274, 274, nil, 274, 274, 274, 274, 274, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 274, - nil, nil, 274, nil, nil, 274, 274, nil, nil, 274, - nil, nil, nil, nil, nil, 274, nil, nil, nil, nil, - nil, nil, nil, nil, 274, nil, nil, nil, nil, 274, - 274, 274, 274, nil, 274, 274, 274, 274, nil, nil, - nil, nil, 274, 274, nil, nil, nil, 275, 275, 275, - 274, 275, 274, 274, 274, 275, 275, 274, 274, nil, - 275, nil, 275, 275, 275, 275, 275, 275, 275, nil, - nil, nil, nil, nil, 275, 275, 275, 275, 275, 275, - 275, nil, nil, 275, nil, nil, nil, nil, nil, nil, - 275, nil, nil, 275, 275, 275, 275, 275, 275, 275, - 275, nil, 275, 275, 275, nil, 275, 275, 275, 275, - 275, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 275, nil, nil, 275, nil, nil, 275, 275, nil, nil, - 275, nil, nil, nil, nil, nil, 275, nil, nil, nil, - nil, nil, nil, nil, nil, 275, nil, nil, nil, nil, - 275, 275, 275, 275, nil, 275, 275, 275, 275, nil, - nil, nil, nil, 275, 275, nil, nil, nil, 276, 276, - 276, 275, 276, 275, 275, 275, 276, 276, 275, 275, - nil, 276, nil, 276, 276, 276, 276, 276, 276, 276, - nil, nil, nil, nil, nil, 276, 276, 276, 276, 276, - 276, 276, nil, nil, 276, nil, nil, nil, nil, nil, - nil, 276, nil, nil, 276, 276, 276, 276, 276, 276, - 276, 276, nil, 276, 276, 276, nil, 276, 276, 276, - 276, 276, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 276, nil, nil, 276, nil, nil, 276, 276, nil, - nil, 276, nil, nil, nil, nil, nil, 276, nil, nil, - nil, nil, nil, nil, nil, nil, 276, nil, nil, nil, - nil, 276, 276, 276, 276, nil, 276, 276, 276, 276, - nil, nil, nil, nil, 276, 276, nil, nil, nil, 277, - 277, 277, 276, 277, 276, 276, 276, 277, 277, 276, - 276, nil, 277, nil, 277, 277, 277, 277, 277, 277, - 277, nil, nil, nil, nil, nil, 277, 277, 277, 277, - 277, 277, 277, nil, nil, 277, nil, nil, nil, nil, - nil, nil, 277, nil, nil, 277, 277, 277, 277, 277, - 277, 277, 277, nil, 277, 277, 277, nil, 277, 277, - 277, 277, 277, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 277, nil, nil, 277, nil, nil, 277, 277, - nil, nil, 277, nil, nil, nil, nil, nil, 277, nil, - nil, nil, nil, nil, nil, nil, nil, 277, nil, nil, - nil, nil, 277, 277, 277, 277, nil, 277, 277, 277, - 277, nil, nil, nil, nil, 277, 277, nil, nil, nil, - 278, 278, 278, 277, 278, 277, 277, 277, 278, 278, - 277, 277, nil, 278, nil, 278, 278, 278, 278, 278, - 278, 278, nil, nil, nil, nil, nil, 278, 278, 278, - 278, 278, 278, 278, nil, nil, 278, nil, nil, nil, - nil, nil, nil, 278, nil, nil, 278, 278, 278, 278, - 278, 278, 278, 278, nil, 278, 278, 278, nil, 278, - 278, 278, 278, 278, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 278, nil, nil, 278, nil, nil, 278, - 278, nil, nil, 278, nil, nil, nil, nil, nil, 278, - nil, nil, nil, nil, nil, nil, nil, nil, 278, nil, - nil, nil, nil, 278, 278, 278, 278, nil, 278, 278, - 278, 278, nil, nil, nil, nil, 278, 278, nil, nil, - nil, 283, 283, 283, 278, 283, 278, 278, 278, 283, - 283, 278, 278, nil, 283, nil, 283, 283, 283, 283, - 283, 283, 283, nil, nil, nil, nil, nil, 283, 283, - 283, 283, 283, 283, 283, nil, nil, 283, nil, nil, - nil, nil, nil, nil, 283, nil, nil, 283, 283, 283, - 283, 283, 283, 283, 283, nil, 283, 283, 283, nil, - 283, 283, 283, 283, 283, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 283, nil, nil, 283, nil, nil, - 283, 283, nil, nil, 283, nil, nil, nil, nil, nil, - 283, nil, nil, nil, nil, nil, nil, nil, nil, 283, - nil, nil, nil, nil, 283, 283, 283, 283, nil, 283, - 283, 283, 283, nil, nil, nil, nil, 283, 283, nil, - nil, nil, 299, 299, 299, 283, 299, 283, 283, 283, - 299, 299, 283, 283, nil, 299, nil, 299, 299, 299, - 299, 299, 299, 299, nil, nil, nil, nil, nil, 299, - 299, 299, 299, 299, 299, 299, nil, nil, 299, nil, - nil, nil, nil, nil, nil, 299, nil, nil, 299, 299, - 299, 299, 299, 299, 299, 299, nil, 299, 299, 299, - nil, 299, 299, 299, 299, 299, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 299, nil, nil, 299, nil, - nil, 299, 299, nil, nil, 299, nil, nil, nil, nil, - nil, 299, nil, nil, nil, nil, nil, nil, nil, nil, - 299, nil, nil, nil, nil, 299, 299, 299, 299, nil, - 299, 299, 299, 299, nil, nil, nil, nil, 299, 299, - nil, nil, nil, 306, 306, 306, 299, 306, 299, 299, - 299, 306, 306, 299, 299, nil, 306, nil, 306, 306, - 306, 306, 306, 306, 306, nil, nil, nil, nil, nil, - 306, 306, 306, 306, 306, 306, 306, nil, nil, 306, - nil, nil, nil, nil, nil, nil, 306, nil, nil, 306, - 306, 306, 306, 306, 306, 306, 306, 306, 306, 306, - 306, nil, 306, 306, 306, 306, 306, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 306, nil, nil, 306, - nil, nil, 306, 306, nil, nil, 306, nil, 306, nil, - 306, nil, 306, nil, nil, 306, nil, nil, nil, nil, - nil, 306, nil, nil, nil, nil, 306, 306, 306, 306, - nil, 306, 306, 306, 306, nil, nil, nil, nil, 306, - 306, nil, nil, nil, 307, 307, 307, 306, 307, 306, - 306, 306, 307, 307, 306, 306, nil, 307, nil, 307, - 307, 307, 307, 307, 307, 307, nil, nil, nil, nil, - nil, 307, 307, 307, 307, 307, 307, 307, nil, nil, - 307, nil, nil, nil, nil, nil, nil, 307, nil, nil, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, 307, nil, 307, 307, 307, 307, 307, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 307, nil, nil, - 307, nil, nil, 307, 307, nil, nil, 307, nil, 307, - nil, 307, nil, 307, nil, nil, 307, nil, nil, nil, - nil, nil, 307, nil, nil, nil, nil, 307, 307, 307, - 307, nil, 307, 307, 307, 307, nil, nil, nil, nil, - 307, 307, nil, nil, nil, 315, 315, 315, 307, 315, - 307, 307, 307, 315, 315, 307, 307, nil, 315, nil, - 315, 315, 315, 315, 315, 315, 315, nil, nil, nil, - nil, nil, 315, 315, 315, 315, 315, 315, 315, nil, - nil, 315, nil, nil, nil, nil, nil, nil, 315, nil, - nil, 315, 315, 315, 315, 315, 315, 315, 315, 315, - 315, 315, 315, nil, 315, 315, 315, 315, 315, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 315, nil, - nil, 315, nil, nil, 315, 315, nil, nil, 315, nil, - 315, nil, 315, nil, 315, nil, nil, 315, nil, nil, - nil, nil, nil, 315, nil, nil, nil, nil, 315, 315, - 315, 315, nil, 315, 315, 315, 315, nil, nil, nil, - nil, 315, 315, 315, nil, nil, 322, 322, 322, 315, - 322, 315, 315, 315, 322, 322, 315, 315, nil, 322, - nil, 322, 322, 322, 322, 322, 322, 322, nil, nil, - nil, nil, nil, 322, 322, 322, 322, 322, 322, 322, - nil, nil, 322, nil, nil, nil, nil, nil, nil, 322, - nil, nil, 322, 322, 322, 322, 322, 322, 322, 322, - nil, 322, 322, 322, nil, 322, 322, 322, 322, 322, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 322, - nil, nil, 322, nil, nil, 322, 322, nil, nil, 322, - nil, nil, nil, nil, nil, 322, nil, nil, nil, nil, - nil, nil, nil, nil, 322, nil, nil, nil, nil, 322, - 322, 322, 322, nil, 322, 322, 322, 322, nil, nil, - nil, nil, 322, 322, nil, nil, nil, 324, 324, 324, - 322, 324, 322, 322, 322, 324, 324, 322, 322, nil, - 324, nil, 324, 324, 324, 324, 324, 324, 324, nil, - nil, nil, nil, nil, 324, 324, 324, 324, 324, 324, - 324, nil, nil, 324, nil, nil, nil, nil, nil, nil, - 324, nil, nil, 324, 324, 324, 324, 324, 324, 324, - 324, nil, 324, 324, 324, nil, 324, 324, 324, 324, - 324, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 324, nil, nil, 324, nil, nil, 324, 324, nil, nil, - 324, nil, nil, nil, nil, nil, 324, nil, nil, nil, - nil, nil, nil, nil, nil, 324, nil, nil, nil, nil, - 324, 324, 324, 324, nil, 324, 324, 324, 324, nil, - nil, nil, nil, 324, 324, nil, nil, nil, 327, 327, - 327, 324, 327, 324, 324, 324, 327, 327, 324, 324, - nil, 327, nil, 327, 327, 327, 327, 327, 327, 327, - nil, nil, nil, nil, nil, 327, 327, 327, 327, 327, - 327, 327, nil, nil, 327, nil, nil, nil, nil, nil, - nil, 327, nil, nil, 327, 327, 327, 327, 327, 327, - 327, 327, nil, 327, 327, 327, nil, 327, 327, 327, - 327, 327, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 327, nil, nil, 327, nil, nil, 327, 327, nil, - nil, 327, nil, nil, nil, nil, nil, 327, nil, nil, - nil, nil, nil, nil, nil, nil, 327, nil, nil, nil, - nil, 327, 327, 327, 327, nil, 327, 327, 327, 327, - nil, nil, nil, nil, 327, 327, nil, nil, nil, 328, - 328, 328, 327, 328, 327, 327, 327, 328, 328, 327, - 327, nil, 328, nil, 328, 328, 328, 328, 328, 328, - 328, nil, nil, nil, nil, nil, 328, 328, 328, 328, - 328, 328, 328, nil, nil, 328, nil, nil, nil, nil, - nil, nil, 328, nil, nil, 328, 328, 328, 328, 328, - 328, 328, 328, nil, 328, 328, 328, nil, 328, 328, - 328, 328, 328, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 328, nil, nil, 328, nil, nil, 328, 328, - nil, nil, 328, nil, nil, nil, nil, nil, 328, nil, - nil, nil, nil, nil, nil, nil, nil, 328, nil, nil, - nil, nil, 328, 328, 328, 328, nil, 328, 328, 328, - 328, nil, nil, nil, nil, 328, 328, nil, nil, nil, - nil, nil, nil, 328, nil, 328, 328, 328, nil, nil, - 328, 328, 333, 333, 333, 333, 333, nil, nil, nil, - 333, 333, nil, nil, nil, 333, nil, 333, 333, 333, - 333, 333, 333, 333, nil, nil, nil, nil, nil, 333, - 333, 333, 333, 333, 333, 333, nil, nil, 333, nil, - nil, nil, nil, nil, 333, 333, nil, 333, 333, 333, - 333, 333, 333, 333, 333, 333, nil, 333, 333, 333, - nil, 333, 333, 333, 333, 333, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 333, nil, nil, 333, nil, - nil, 333, 333, nil, nil, 333, nil, 333, nil, nil, - nil, 333, nil, nil, nil, nil, nil, nil, nil, nil, - 333, nil, nil, nil, nil, 333, 333, 333, 333, nil, - 333, 333, 333, 333, nil, nil, nil, nil, 333, 333, - nil, nil, nil, 369, 369, 369, 333, 369, 333, 333, - 333, 369, 369, 333, 333, nil, 369, nil, 369, 369, - 369, 369, 369, 369, 369, nil, nil, nil, nil, nil, - 369, 369, 369, 369, 369, 369, 369, nil, nil, 369, - nil, nil, nil, nil, nil, nil, 369, nil, nil, 369, - 369, 369, 369, 369, 369, 369, 369, nil, 369, 369, - 369, nil, 369, 369, 369, 369, 369, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 369, nil, nil, 369, - nil, nil, 369, 369, nil, nil, 369, nil, nil, nil, - nil, nil, 369, nil, nil, nil, nil, nil, nil, nil, - nil, 369, nil, nil, nil, nil, 369, 369, 369, 369, - nil, 369, 369, 369, 369, nil, nil, nil, nil, 369, - 369, nil, nil, nil, 386, 386, 386, 369, 386, 369, - 369, 369, 386, 386, 369, 369, nil, 386, nil, 386, - 386, 386, 386, 386, 386, 386, nil, nil, nil, nil, - nil, 386, 386, 386, 386, 386, 386, 386, nil, nil, - 386, nil, nil, nil, nil, nil, nil, 386, nil, nil, - 386, 386, 386, 386, 386, 386, 386, 386, nil, 386, - 386, 386, nil, 386, 386, 386, 386, 386, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 386, nil, nil, - 386, nil, nil, 386, 386, nil, nil, 386, nil, nil, - nil, nil, nil, 386, nil, nil, nil, nil, nil, nil, - nil, nil, 386, nil, nil, nil, nil, 386, 386, 386, - 386, nil, 386, 386, 386, 386, nil, nil, nil, nil, - 386, 386, nil, nil, nil, 407, 407, 407, 386, 407, - 386, 386, 386, 407, 407, 386, 386, nil, 407, nil, - 407, 407, 407, 407, 407, 407, 407, nil, nil, nil, - nil, nil, 407, 407, 407, 407, 407, 407, 407, nil, - nil, 407, nil, nil, nil, nil, nil, nil, 407, nil, - nil, 407, 407, 407, 407, 407, 407, 407, 407, nil, - 407, 407, 407, nil, 407, 407, 407, 407, 407, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 407, nil, - nil, 407, nil, nil, 407, 407, nil, nil, 407, nil, - nil, nil, nil, nil, 407, nil, nil, nil, nil, nil, - nil, nil, nil, 407, nil, nil, nil, nil, 407, 407, - 407, 407, nil, 407, 407, 407, 407, nil, nil, nil, - nil, 407, 407, nil, nil, nil, 436, 436, 436, 407, - 436, 407, 407, 407, 436, 436, 407, 407, nil, 436, - nil, 436, 436, 436, 436, 436, 436, 436, nil, nil, - nil, nil, nil, 436, 436, 436, 436, 436, 436, 436, - nil, nil, 436, nil, nil, nil, nil, nil, nil, 436, - nil, nil, 436, 436, 436, 436, 436, 436, 436, 436, - nil, 436, 436, 436, nil, 436, 436, 436, 436, 436, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 436, - nil, nil, 436, nil, nil, 436, 436, nil, nil, 436, - nil, nil, nil, nil, nil, 436, nil, nil, nil, nil, - nil, nil, nil, nil, 436, nil, nil, nil, nil, 436, - 436, 436, 436, nil, 436, 436, 436, 436, nil, nil, - nil, nil, 436, 436, nil, nil, nil, nil, nil, nil, - 436, nil, 436, 436, 436, 460, nil, 436, 436, nil, - nil, nil, 460, 460, 460, nil, nil, 460, 460, 460, - nil, 460, nil, nil, nil, nil, nil, nil, nil, 460, - 460, 460, 460, nil, nil, nil, nil, nil, nil, nil, - nil, 460, 460, nil, 460, 460, 460, 460, 460, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 460, 460, 460, 460, 460, 460, 460, 460, 460, - 460, 460, 460, 460, 460, nil, nil, 460, 460, 460, - nil, nil, 460, nil, 460, 460, nil, nil, 460, 460, - nil, 460, nil, 460, nil, 460, nil, 460, 460, nil, - 460, 460, 460, 460, 460, nil, 460, 460, 460, 1140, - nil, 1140, 1140, 1140, 1140, 1140, nil, nil, nil, nil, - nil, nil, 460, nil, 1140, 460, 460, 469, 460, nil, - 460, nil, nil, nil, 469, 469, 469, 460, nil, 469, - 469, 469, nil, 469, nil, nil, 1140, nil, nil, nil, - nil, 469, 469, 469, 469, 469, nil, 1140, 1140, nil, - nil, nil, 1140, 469, 469, nil, 469, 469, 469, 469, - 469, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 469, 469, 469, 469, 469, 469, 469, - 469, 469, 469, 469, 469, 469, 469, nil, nil, 469, - 469, 469, nil, nil, 469, nil, nil, 469, nil, nil, - 469, 469, nil, 469, nil, 469, nil, 469, nil, 469, - 469, nil, 469, 469, 469, 469, 469, nil, 469, 469, - 469, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 469, nil, nil, 469, 469, 469, - 469, nil, 469, 470, 469, nil, nil, nil, nil, 469, - 470, 470, 470, nil, nil, 470, 470, 470, nil, 470, - nil, nil, nil, nil, nil, nil, nil, 470, 470, 470, - 470, 470, nil, nil, nil, nil, nil, nil, nil, 470, - 470, nil, 470, 470, 470, 470, 470, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 470, - 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, - 470, 470, 470, nil, nil, 470, 470, 470, nil, nil, - 470, nil, nil, 470, nil, nil, 470, 470, nil, 470, - nil, 470, nil, 470, nil, 470, 470, nil, 470, 470, - 470, 470, 470, nil, 470, 470, 470, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 470, nil, nil, 470, 470, 470, 470, nil, 470, nil, - 470, nil, 471, 471, 471, 470, 471, nil, nil, nil, - 471, 471, nil, nil, nil, 471, nil, 471, 471, 471, - 471, 471, 471, 471, nil, nil, nil, nil, nil, 471, - 471, 471, 471, 471, 471, 471, nil, nil, 471, nil, - nil, nil, nil, nil, nil, 471, nil, nil, 471, 471, - 471, 471, 471, 471, 471, 471, nil, 471, 471, 471, - nil, 471, 471, 471, 471, 471, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 471, nil, nil, 471, nil, - nil, 471, 471, nil, nil, 471, nil, nil, nil, nil, - nil, 471, nil, nil, nil, nil, nil, nil, nil, nil, - 471, nil, nil, nil, nil, 471, 471, 471, 471, nil, - 471, 471, 471, 471, nil, nil, nil, nil, 471, 471, - nil, nil, nil, 497, 497, 497, 471, 497, 471, 471, - 471, 497, 497, 471, 471, nil, 497, nil, 497, 497, - 497, 497, 497, 497, 497, nil, nil, nil, nil, nil, - 497, 497, 497, 497, 497, 497, 497, nil, nil, 497, - nil, nil, nil, nil, nil, nil, 497, nil, nil, 497, - 497, 497, 497, 497, 497, 497, 497, nil, 497, 497, - 497, nil, 497, 497, 497, 497, 497, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 497, nil, nil, 497, - nil, nil, 497, 497, nil, nil, 497, nil, nil, nil, - nil, nil, 497, nil, nil, nil, nil, nil, nil, nil, - nil, 497, nil, nil, nil, nil, 497, 497, 497, 497, - nil, 497, 497, 497, 497, nil, nil, nil, nil, 497, - 497, nil, nil, nil, 510, 510, 510, 497, 510, 497, - 497, 497, 510, 510, 497, 497, nil, 510, nil, 510, - 510, 510, 510, 510, 510, 510, nil, nil, nil, nil, - nil, 510, 510, 510, 510, 510, 510, 510, nil, nil, - 510, nil, nil, nil, nil, nil, nil, 510, nil, nil, - 510, 510, 510, 510, 510, 510, 510, 510, nil, 510, - 510, 510, nil, 510, 510, 510, 510, 510, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 510, nil, nil, - 510, nil, nil, 510, 510, nil, nil, 510, nil, nil, - nil, nil, nil, 510, nil, nil, nil, nil, nil, nil, - nil, nil, 510, nil, nil, nil, nil, 510, 510, 510, - 510, nil, 510, 510, 510, 510, nil, nil, nil, nil, - 510, 510, nil, nil, nil, 520, 520, 520, 510, 520, - 510, 510, 510, 520, 520, 510, 510, nil, 520, nil, - 520, 520, 520, 520, 520, 520, 520, nil, nil, nil, - nil, nil, 520, 520, 520, 520, 520, 520, 520, nil, - nil, 520, nil, nil, nil, nil, nil, nil, 520, nil, - nil, 520, 520, 520, 520, 520, 520, 520, 520, 520, - 520, 520, 520, nil, 520, 520, 520, 520, 520, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 520, nil, - nil, 520, nil, nil, 520, 520, nil, nil, 520, nil, - 520, nil, 520, nil, 520, nil, nil, 520, nil, nil, - nil, nil, nil, 520, nil, nil, nil, nil, 520, 520, - 520, 520, nil, 520, 520, 520, 520, nil, nil, nil, - nil, 520, 520, nil, nil, nil, 522, 522, 522, 520, - 522, 520, 520, 520, 522, 522, 520, 520, nil, 522, - nil, 522, 522, 522, 522, 522, 522, 522, nil, nil, - nil, nil, nil, 522, 522, 522, 522, 522, 522, 522, - nil, nil, 522, nil, nil, nil, nil, nil, nil, 522, - nil, nil, 522, 522, 522, 522, 522, 522, 522, 522, - nil, 522, 522, 522, nil, 522, 522, 522, 522, 522, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 522, - nil, nil, 522, nil, nil, 522, 522, nil, nil, 522, - nil, nil, nil, nil, nil, 522, nil, nil, nil, nil, - nil, nil, nil, nil, 522, nil, nil, nil, nil, 522, - 522, 522, 522, nil, 522, 522, 522, 522, nil, nil, - nil, nil, 522, 522, nil, nil, nil, 523, 523, 523, - 522, 523, 522, 522, 522, 523, 523, 522, 522, nil, - 523, nil, 523, 523, 523, 523, 523, 523, 523, nil, - nil, nil, nil, nil, 523, 523, 523, 523, 523, 523, - 523, nil, nil, 523, nil, nil, nil, nil, nil, nil, - 523, nil, nil, 523, 523, 523, 523, 523, 523, 523, - 523, nil, 523, 523, 523, nil, 523, 523, 523, 523, - 523, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 523, nil, nil, 523, nil, nil, 523, 523, nil, nil, - 523, nil, nil, nil, nil, nil, 523, nil, nil, nil, - nil, nil, nil, nil, nil, 523, nil, nil, nil, nil, - 523, 523, 523, 523, nil, 523, 523, 523, 523, nil, - nil, nil, nil, 523, 523, nil, nil, nil, 524, 524, - 524, 523, 524, 523, 523, 523, 524, 524, 523, 523, - nil, 524, nil, 524, 524, 524, 524, 524, 524, 524, - nil, nil, nil, nil, nil, 524, 524, 524, 524, 524, - 524, 524, nil, nil, 524, nil, nil, nil, nil, nil, - nil, 524, nil, nil, 524, 524, 524, 524, 524, 524, - 524, 524, nil, 524, 524, 524, nil, 524, 524, 524, - 524, 524, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 524, nil, nil, 524, nil, nil, 524, 524, nil, - nil, 524, nil, nil, nil, nil, nil, 524, nil, nil, - nil, nil, nil, nil, nil, nil, 524, nil, nil, nil, - nil, 524, 524, 524, 524, nil, 524, 524, 524, 524, - nil, nil, nil, nil, 524, 524, nil, nil, nil, nil, - nil, nil, 524, nil, 524, 524, 524, 555, nil, 524, - 524, nil, nil, nil, 555, 555, 555, nil, nil, 555, - 555, 555, 409, 555, 409, 409, 409, 409, 409, nil, - nil, 555, 555, 555, nil, nil, nil, 409, nil, nil, - nil, nil, nil, 555, 555, nil, 555, 555, 555, 555, - 555, nil, 644, nil, 644, 644, 644, 644, 644, 409, - 409, nil, nil, nil, nil, nil, nil, 644, 409, 409, - 409, 409, nil, nil, nil, 409, nil, 1135, nil, 1135, - 1135, 1135, 1135, 1135, 555, nil, nil, nil, nil, 644, - nil, 555, 1135, nil, nil, nil, 555, 555, 644, 644, - 644, 644, nil, nil, nil, 644, nil, nil, nil, nil, - nil, nil, nil, nil, 1135, 409, nil, nil, nil, 555, - 555, nil, nil, 1135, 1135, 1135, 1135, nil, nil, nil, - 1135, nil, nil, nil, 555, nil, nil, 555, nil, 560, - 560, 560, 555, 560, nil, 644, nil, 560, 560, 555, - nil, nil, 560, nil, 560, 560, 560, 560, 560, 560, - 560, nil, nil, nil, nil, nil, 560, 560, 560, 560, - 560, 560, 560, nil, nil, 560, nil, nil, nil, nil, - nil, nil, 560, nil, nil, 560, 560, 560, 560, 560, - 560, 560, 560, nil, 560, 560, 560, nil, 560, 560, - 560, 560, 560, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 560, nil, nil, 560, nil, nil, 560, 560, - nil, nil, 560, nil, nil, nil, nil, nil, 560, nil, - nil, nil, nil, nil, nil, nil, nil, 560, nil, nil, - nil, nil, 560, 560, 560, 560, nil, 560, 560, 560, - 560, nil, nil, nil, nil, 560, 560, nil, nil, nil, - 570, 570, 570, 560, 570, 560, 560, 560, 570, 570, - 560, 560, nil, 570, nil, 570, 570, 570, 570, 570, - 570, 570, nil, nil, nil, nil, nil, 570, 570, 570, - 570, 570, 570, 570, nil, nil, 570, nil, nil, nil, - nil, nil, nil, 570, nil, nil, 570, 570, 570, 570, - 570, 570, 570, 570, 570, 570, 570, 570, nil, 570, - 570, 570, 570, 570, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 570, nil, nil, 570, nil, nil, 570, - 570, nil, nil, 570, nil, 570, nil, 570, nil, 570, - nil, nil, 570, nil, nil, nil, nil, nil, 570, nil, - nil, nil, nil, 570, 570, 570, 570, nil, 570, 570, - 570, 570, nil, nil, nil, nil, 570, 570, nil, nil, - nil, 572, 572, 572, 570, 572, 570, 570, 570, 572, - 572, 570, 570, nil, 572, nil, 572, 572, 572, 572, - 572, 572, 572, nil, nil, nil, nil, nil, 572, 572, - 572, 572, 572, 572, 572, nil, nil, 572, nil, nil, - nil, nil, nil, nil, 572, nil, nil, 572, 572, 572, - 572, 572, 572, 572, 572, 572, 572, 572, 572, nil, - 572, 572, 572, 572, 572, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 572, nil, nil, 572, nil, nil, - 572, 572, nil, nil, 572, nil, nil, nil, 572, nil, - 572, nil, nil, 572, nil, nil, nil, nil, nil, 572, - nil, nil, nil, nil, 572, 572, 572, 572, nil, 572, - 572, 572, 572, nil, nil, nil, nil, 572, 572, nil, - nil, nil, 574, 574, 574, 572, 574, 572, 572, 572, - 574, 574, 572, 572, nil, 574, nil, 574, 574, 574, - 574, 574, 574, 574, nil, nil, nil, nil, nil, 574, - 574, 574, 574, 574, 574, 574, nil, nil, 574, nil, - nil, nil, nil, nil, nil, 574, nil, nil, 574, 574, - 574, 574, 574, 574, 574, 574, nil, 574, 574, 574, - nil, 574, 574, 574, 574, 574, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 574, nil, nil, 574, nil, - nil, 574, 574, nil, nil, 574, nil, nil, nil, nil, - nil, 574, nil, nil, nil, nil, nil, nil, nil, nil, - 574, nil, nil, nil, nil, 574, 574, 574, 574, nil, - 574, 574, 574, 574, nil, nil, nil, nil, 574, 574, - nil, nil, nil, nil, nil, nil, 574, nil, 574, 574, - 574, nil, nil, 574, 574, 580, 580, 580, 580, 580, - nil, nil, nil, 580, 580, nil, nil, nil, 580, nil, - 580, 580, 580, 580, 580, 580, 580, nil, nil, nil, - nil, nil, 580, 580, 580, 580, 580, 580, 580, nil, - nil, 580, nil, nil, nil, nil, nil, 580, 580, 580, - 580, 580, 580, 580, 580, 580, 580, 580, 580, nil, - 580, 580, 580, nil, 580, 580, 580, 580, 580, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 580, nil, - nil, 580, nil, nil, 580, 580, nil, nil, 580, nil, - 580, nil, nil, nil, 580, nil, nil, nil, nil, nil, - nil, nil, nil, 580, nil, nil, nil, nil, 580, 580, - 580, 580, nil, 580, 580, 580, 580, nil, nil, nil, - nil, 580, 580, nil, nil, nil, nil, nil, 580, 580, - nil, 580, 580, 580, nil, nil, 580, 580, 590, 590, - 590, nil, 590, nil, nil, nil, 590, 590, nil, nil, - nil, 590, nil, 590, 590, 590, 590, 590, 590, 590, - nil, nil, nil, nil, nil, 590, 590, 590, 590, 590, - 590, 590, nil, nil, 590, nil, nil, nil, nil, nil, - nil, 590, nil, nil, 590, 590, 590, 590, 590, 590, - 590, 590, 590, 590, 590, 590, nil, 590, 590, 590, - 590, 590, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 590, nil, nil, 590, nil, nil, 590, 590, nil, - nil, 590, nil, 590, nil, 590, nil, 590, nil, nil, - 590, nil, nil, nil, nil, nil, 590, nil, nil, nil, - nil, 590, 590, 590, 590, nil, 590, 590, 590, 590, - nil, nil, nil, nil, 590, 590, nil, nil, nil, 600, - 600, 600, 590, 600, 590, 590, 590, 600, 600, 590, - 590, nil, 600, nil, 600, 600, 600, 600, 600, 600, - 600, nil, nil, nil, nil, nil, 600, 600, 600, 600, - 600, 600, 600, nil, nil, 600, nil, nil, nil, nil, - nil, nil, 600, nil, nil, 600, 600, 600, 600, 600, - 600, 600, 600, nil, 600, 600, 600, nil, 600, 600, - 600, 600, 600, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 600, nil, nil, 600, nil, nil, 600, 600, - nil, nil, 600, nil, nil, nil, nil, nil, 600, nil, - nil, nil, nil, nil, nil, nil, nil, 600, nil, nil, - nil, nil, 600, 600, 600, 600, nil, 600, 600, 600, - 600, nil, nil, nil, nil, 600, 600, nil, nil, nil, - 603, 603, 603, 600, 603, 600, 600, 600, 603, 603, - 600, 600, nil, 603, nil, 603, 603, 603, 603, 603, - 603, 603, nil, nil, nil, nil, nil, 603, 603, 603, - 603, 603, 603, 603, nil, nil, 603, nil, nil, nil, - nil, nil, nil, 603, nil, nil, 603, 603, 603, 603, - 603, 603, 603, 603, nil, 603, 603, 603, nil, 603, - 603, 603, 603, 603, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 603, nil, nil, 603, nil, nil, 603, - 603, nil, nil, 603, nil, nil, nil, nil, nil, 603, - nil, nil, nil, nil, nil, nil, nil, nil, 603, nil, - nil, nil, nil, 603, 603, 603, 603, nil, 603, 603, - 603, 603, nil, nil, nil, nil, 603, 603, nil, nil, - nil, 605, 605, 605, 603, 605, 603, 603, 603, 605, - 605, 603, 603, nil, 605, nil, 605, 605, 605, 605, - 605, 605, 605, nil, nil, nil, nil, nil, 605, 605, - 605, 605, 605, 605, 605, nil, nil, 605, nil, nil, - nil, nil, nil, nil, 605, nil, nil, 605, 605, 605, - 605, 605, 605, 605, 605, nil, 605, 605, 605, nil, - 605, 605, 605, 605, 605, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 605, nil, nil, 605, nil, nil, - 605, 605, nil, nil, 605, nil, nil, nil, nil, nil, - 605, nil, nil, nil, nil, nil, nil, nil, nil, 605, - nil, nil, nil, nil, 605, 605, 605, 605, nil, 605, - 605, 605, 605, nil, nil, nil, nil, 605, 605, nil, - nil, nil, 611, 611, 611, 605, 611, 605, 605, 605, - 611, 611, 605, 605, nil, 611, nil, 611, 611, 611, - 611, 611, 611, 611, nil, nil, nil, nil, nil, 611, - 611, 611, 611, 611, 611, 611, nil, nil, 611, nil, - nil, nil, nil, nil, nil, 611, nil, nil, 611, 611, - 611, 611, 611, 611, 611, 611, 611, 611, 611, 611, - nil, 611, 611, 611, 611, 611, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 611, nil, nil, 611, nil, - nil, 611, 611, nil, nil, 611, nil, 611, nil, nil, - nil, 611, nil, nil, 611, nil, nil, nil, nil, nil, - 611, nil, nil, nil, nil, 611, 611, 611, 611, nil, - 611, 611, 611, 611, nil, nil, nil, nil, 611, 611, - nil, nil, nil, 614, 614, 614, 611, 614, 611, 611, - 611, 614, 614, 611, 611, nil, 614, nil, 614, 614, - 614, 614, 614, 614, 614, nil, nil, nil, nil, nil, - 614, 614, 614, 614, 614, 614, 614, nil, nil, 614, - nil, nil, nil, nil, nil, nil, 614, nil, nil, 614, - 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, - 614, nil, 614, 614, 614, 614, 614, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 614, nil, nil, 614, - nil, nil, 614, 614, nil, nil, 614, nil, nil, nil, - nil, nil, 614, nil, nil, 614, nil, nil, nil, nil, - nil, 614, nil, nil, nil, nil, 614, 614, 614, 614, - nil, 614, 614, 614, 614, nil, nil, nil, nil, 614, - 614, nil, nil, nil, 627, 627, 627, 614, 627, 614, - 614, 614, 627, 627, 614, 614, nil, 627, nil, 627, - 627, 627, 627, 627, 627, 627, nil, nil, nil, nil, - nil, 627, 627, 627, 627, 627, 627, 627, nil, nil, - 627, nil, nil, nil, nil, nil, nil, 627, nil, nil, - 627, 627, 627, 627, 627, 627, 627, 627, nil, 627, - 627, 627, nil, 627, 627, 627, 627, 627, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 627, nil, nil, - 627, nil, nil, 627, 627, nil, nil, 627, nil, 627, - nil, nil, nil, 627, nil, nil, nil, nil, nil, nil, - nil, nil, 627, nil, nil, nil, nil, 627, 627, 627, - 627, nil, 627, 627, 627, 627, nil, nil, nil, nil, - 627, 627, nil, nil, nil, 628, 628, 628, 627, 628, - 627, 627, 627, 628, 628, 627, 627, nil, 628, nil, - 628, 628, 628, 628, 628, 628, 628, nil, nil, nil, - nil, nil, 628, 628, 628, 628, 628, 628, 628, nil, - nil, 628, nil, nil, nil, nil, nil, nil, 628, nil, - nil, 628, 628, 628, 628, 628, 628, 628, 628, 628, - 628, 628, 628, nil, 628, 628, 628, 628, 628, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 628, nil, - nil, 628, nil, nil, 628, 628, nil, nil, 628, nil, - 628, nil, 628, nil, 628, nil, nil, 628, nil, nil, - nil, nil, nil, 628, nil, nil, nil, nil, 628, 628, - 628, 628, nil, 628, 628, 628, 628, nil, nil, nil, - nil, 628, 628, nil, nil, nil, 638, 638, 638, 628, - 638, 628, 628, 628, 638, 638, 628, 628, nil, 638, - nil, 638, 638, 638, 638, 638, 638, 638, nil, nil, - nil, nil, nil, 638, 638, 638, 638, 638, 638, 638, - nil, nil, 638, nil, nil, nil, nil, nil, nil, 638, - nil, nil, 638, 638, 638, 638, 638, 638, 638, 638, - 638, 638, 638, 638, nil, 638, 638, 638, 638, 638, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 638, - nil, nil, 638, nil, nil, 638, 638, nil, nil, 638, - nil, 638, nil, 638, nil, 638, nil, nil, 638, nil, - nil, nil, nil, nil, 638, nil, nil, nil, nil, 638, - 638, 638, 638, nil, 638, 638, 638, 638, nil, nil, - nil, nil, 638, 638, nil, nil, nil, nil, nil, nil, - 638, nil, 638, 638, 638, nil, nil, 638, 638, 669, - 669, 669, 669, 669, nil, nil, nil, 669, 669, nil, - nil, nil, 669, nil, 669, 669, 669, 669, 669, 669, - 669, nil, nil, nil, nil, nil, 669, 669, 669, 669, - 669, 669, 669, nil, nil, 669, nil, nil, nil, nil, - nil, 669, 669, nil, 669, 669, 669, 669, 669, 669, - 669, 669, 669, nil, 669, 669, 669, nil, 669, 669, - 669, 669, 669, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 669, nil, nil, 669, nil, nil, 669, 669, - nil, nil, 669, nil, 669, nil, nil, nil, 669, nil, - nil, nil, nil, nil, nil, nil, nil, 669, nil, nil, - nil, nil, 669, 669, 669, 669, nil, 669, 669, 669, - 669, nil, nil, nil, nil, 669, 669, nil, nil, nil, - 671, 671, 671, 669, 671, 669, 669, 669, 671, 671, - 669, 669, nil, 671, nil, 671, 671, 671, 671, 671, - 671, 671, nil, nil, nil, nil, nil, 671, 671, 671, - 671, 671, 671, 671, nil, nil, 671, nil, nil, nil, - nil, nil, nil, 671, nil, nil, 671, 671, 671, 671, - 671, 671, 671, 671, nil, 671, 671, 671, nil, 671, - 671, 671, 671, 671, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 671, nil, nil, 671, nil, nil, 671, - 671, nil, nil, 671, nil, 671, nil, nil, nil, 671, - nil, nil, nil, nil, nil, nil, nil, nil, 671, nil, - nil, nil, nil, 671, 671, 671, 671, nil, 671, 671, - 671, 671, nil, nil, nil, nil, 671, 671, nil, nil, - nil, 672, 672, 672, 671, 672, 671, 671, 671, 672, - 672, 671, 671, nil, 672, nil, 672, 672, 672, 672, - 672, 672, 672, nil, nil, nil, nil, nil, 672, 672, - 672, 672, 672, 672, 672, nil, nil, 672, nil, nil, - nil, nil, nil, nil, 672, nil, nil, 672, 672, 672, - 672, 672, 672, 672, 672, nil, 672, 672, 672, nil, - 672, 672, 672, 672, 672, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 672, nil, nil, 672, nil, nil, - 672, 672, nil, nil, 672, nil, nil, nil, nil, nil, - 672, nil, nil, nil, nil, nil, nil, nil, nil, 672, - nil, nil, nil, nil, 672, 672, 672, 672, nil, 672, - 672, 672, 672, nil, nil, nil, nil, 672, 672, nil, - nil, nil, 673, 673, 673, 672, 673, 672, 672, 672, - 673, 673, 672, 672, nil, 673, nil, 673, 673, 673, - 673, 673, 673, 673, nil, nil, nil, nil, nil, 673, - 673, 673, 673, 673, 673, 673, nil, nil, 673, nil, - nil, nil, nil, nil, nil, 673, nil, nil, 673, 673, - 673, 673, 673, 673, 673, 673, 673, 673, 673, 673, - nil, 673, 673, 673, 673, 673, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 673, nil, nil, 673, nil, - nil, 673, 673, nil, nil, 673, nil, 673, nil, 673, - nil, 673, nil, nil, 673, nil, nil, nil, nil, nil, - 673, nil, nil, nil, nil, 673, 673, 673, 673, nil, - 673, 673, 673, 673, nil, nil, nil, nil, 673, 673, - nil, nil, nil, nil, nil, nil, 673, nil, 673, 673, - 673, nil, nil, 673, 673, 676, 676, 676, 676, 676, - nil, nil, nil, 676, 676, nil, nil, nil, 676, nil, - 676, 676, 676, 676, 676, 676, 676, nil, nil, nil, - nil, nil, 676, 676, 676, 676, 676, 676, 676, nil, - nil, 676, nil, nil, nil, nil, nil, 676, 676, nil, - 676, 676, 676, 676, 676, 676, 676, 676, 676, nil, - 676, 676, 676, nil, 676, 676, 676, 676, 676, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 676, nil, - nil, 676, nil, nil, 676, 676, nil, nil, 676, nil, - 676, nil, nil, nil, 676, nil, nil, nil, nil, nil, - nil, nil, nil, 676, nil, nil, nil, nil, 676, 676, - 676, 676, nil, 676, 676, 676, 676, nil, nil, nil, - nil, 676, 676, nil, nil, nil, 677, 677, 677, 676, - 677, 676, 676, 676, 677, 677, 676, 676, nil, 677, - nil, 677, 677, 677, 677, 677, 677, 677, nil, nil, - nil, nil, nil, 677, 677, 677, 677, 677, 677, 677, - nil, nil, 677, nil, nil, nil, nil, nil, nil, 677, - nil, nil, 677, 677, 677, 677, 677, 677, 677, 677, - nil, 677, 677, 677, nil, 677, 677, 677, 677, 677, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 677, - nil, nil, 677, nil, nil, 677, 677, nil, nil, 677, - nil, nil, nil, nil, nil, 677, nil, nil, nil, nil, - nil, nil, nil, nil, 677, nil, nil, nil, nil, 677, - 677, 677, 677, nil, 677, 677, 677, 677, nil, nil, - nil, nil, 677, 677, nil, nil, nil, 680, 680, 680, - 677, 680, 677, 677, 677, 680, 680, 677, 677, nil, - 680, nil, 680, 680, 680, 680, 680, 680, 680, nil, - nil, nil, nil, nil, 680, 680, 680, 680, 680, 680, - 680, nil, nil, 680, nil, nil, nil, nil, nil, nil, - 680, nil, nil, 680, 680, 680, 680, 680, 680, 680, - 680, 680, 680, 680, 680, nil, 680, 680, 680, 680, - 680, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 680, nil, nil, 680, nil, nil, 680, 680, nil, nil, - 680, nil, 680, nil, 680, nil, 680, nil, nil, 680, - nil, nil, nil, nil, nil, 680, nil, nil, nil, nil, - 680, 680, 680, 680, nil, 680, 680, 680, 680, nil, - nil, nil, nil, 680, 680, nil, nil, nil, 681, 681, - 681, 680, 681, 680, 680, 680, 681, 681, 680, 680, - nil, 681, nil, 681, 681, 681, 681, 681, 681, 681, - nil, nil, nil, nil, nil, 681, 681, 681, 681, 681, - 681, 681, nil, nil, 681, nil, nil, nil, nil, nil, - nil, 681, nil, nil, 681, 681, 681, 681, 681, 681, - 681, 681, 681, 681, 681, 681, nil, 681, 681, 681, - 681, 681, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 681, nil, nil, 681, nil, nil, 681, 681, nil, - nil, 681, nil, nil, nil, 681, nil, 681, nil, nil, - 681, nil, nil, nil, nil, nil, 681, nil, nil, nil, - nil, 681, 681, 681, 681, nil, 681, 681, 681, 681, - nil, nil, nil, nil, 681, 681, nil, nil, nil, 682, - 682, 682, 681, 682, 681, 681, 681, 682, 682, 681, - 681, nil, 682, nil, 682, 682, 682, 682, 682, 682, - 682, nil, nil, nil, nil, nil, 682, 682, 682, 682, - 682, 682, 682, nil, nil, 682, nil, nil, nil, nil, - nil, nil, 682, nil, nil, 682, 682, 682, 682, 682, - 682, 682, 682, nil, 682, 682, 682, nil, 682, 682, - 682, 682, 682, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 682, nil, nil, 682, nil, nil, 682, 682, - nil, nil, 682, nil, nil, nil, nil, nil, 682, nil, - nil, nil, nil, nil, nil, nil, nil, 682, nil, nil, - nil, nil, 682, 682, 682, 682, nil, 682, 682, 682, - 682, nil, nil, nil, nil, 682, 682, nil, nil, nil, - 683, 683, 683, 682, 683, 682, 682, 682, 683, 683, - 682, 682, nil, 683, nil, 683, 683, 683, 683, 683, - 683, 683, nil, nil, nil, nil, nil, 683, 683, 683, - 683, 683, 683, 683, nil, nil, 683, nil, nil, nil, - nil, nil, nil, 683, nil, nil, 683, 683, 683, 683, - 683, 683, 683, 683, nil, 683, 683, 683, nil, 683, - 683, 683, 683, 683, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 683, nil, nil, 683, nil, nil, 683, - 683, nil, nil, 683, nil, nil, nil, nil, nil, 683, - nil, nil, nil, nil, nil, nil, nil, nil, 683, nil, - nil, nil, nil, 683, 683, 683, 683, nil, 683, 683, - 683, 683, nil, nil, nil, nil, 683, 683, nil, nil, - nil, 687, 687, 687, 683, 687, 683, 683, 683, 687, - 687, 683, 683, nil, 687, nil, 687, 687, 687, 687, - 687, 687, 687, nil, nil, nil, nil, nil, 687, 687, - 687, 687, 687, 687, 687, nil, nil, 687, nil, nil, - nil, nil, nil, nil, 687, nil, nil, 687, 687, 687, - 687, 687, 687, 687, 687, nil, 687, 687, 687, nil, - 687, 687, 687, 687, 687, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 687, nil, nil, 687, nil, nil, - 687, 687, nil, nil, 687, nil, nil, nil, nil, nil, - 687, nil, nil, nil, nil, nil, nil, nil, nil, 687, - nil, nil, nil, nil, 687, 687, 687, 687, nil, 687, - 687, 687, 687, nil, nil, nil, nil, 687, 687, nil, - nil, nil, 688, 688, 688, 687, 688, 687, 687, 687, - 688, 688, 687, 687, nil, 688, nil, 688, 688, 688, - 688, 688, 688, 688, nil, nil, nil, nil, nil, 688, - 688, 688, 688, 688, 688, 688, nil, nil, 688, nil, - nil, nil, nil, nil, nil, 688, nil, nil, 688, 688, - 688, 688, 688, 688, 688, 688, nil, 688, 688, 688, - nil, 688, 688, 688, 688, 688, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 688, nil, nil, 688, nil, - nil, 688, 688, nil, nil, 688, nil, nil, nil, nil, - nil, 688, nil, nil, nil, nil, nil, nil, nil, nil, - 688, nil, nil, nil, nil, 688, 688, 688, 688, nil, - 688, 688, 688, 688, nil, nil, nil, nil, 688, 688, - nil, nil, nil, 694, 694, 694, 688, 694, 688, 688, - 688, 694, 694, 688, 688, nil, 694, nil, 694, 694, - 694, 694, 694, 694, 694, nil, nil, nil, nil, nil, - 694, 694, 694, 694, 694, 694, 694, nil, nil, 694, - nil, nil, nil, nil, nil, nil, 694, nil, nil, 694, - 694, 694, 694, 694, 694, 694, 694, nil, 694, 694, - 694, nil, 694, 694, 694, 694, 694, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 694, nil, nil, 694, - nil, nil, 694, 694, nil, nil, 694, nil, 694, nil, - nil, nil, 694, nil, nil, nil, nil, nil, nil, nil, - nil, 694, nil, nil, nil, nil, 694, 694, 694, 694, - nil, 694, 694, 694, 694, nil, nil, nil, nil, 694, - 694, nil, nil, nil, 708, 708, 708, 694, 708, 694, - 694, 694, 708, 708, 694, 694, nil, 708, nil, 708, - 708, 708, 708, 708, 708, 708, nil, nil, nil, nil, - nil, 708, 708, 708, 708, 708, 708, 708, nil, nil, - 708, nil, nil, nil, nil, nil, nil, 708, nil, nil, - 708, 708, 708, 708, 708, 708, 708, 708, nil, 708, - 708, 708, nil, 708, 708, 708, 708, 708, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 708, nil, nil, - 708, nil, nil, 708, 708, nil, nil, 708, nil, nil, - nil, nil, nil, 708, nil, nil, nil, nil, nil, nil, - nil, nil, 708, nil, nil, nil, nil, 708, 708, 708, - 708, nil, 708, 708, 708, 708, nil, nil, nil, nil, - 708, 708, nil, nil, nil, 732, 732, 732, 708, 732, - 708, 708, 708, 732, 732, 708, 708, nil, 732, nil, - 732, 732, 732, 732, 732, 732, 732, nil, nil, nil, - nil, nil, 732, 732, 732, 732, 732, 732, 732, nil, - nil, 732, nil, nil, nil, nil, nil, nil, 732, nil, - nil, 732, 732, 732, 732, 732, 732, 732, 732, nil, - 732, 732, 732, nil, 732, 732, 732, 732, 732, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 732, nil, - nil, 732, nil, nil, 732, 732, nil, nil, 732, nil, - nil, nil, nil, nil, 732, nil, nil, nil, nil, nil, - nil, nil, nil, 732, nil, nil, nil, nil, 732, 732, - 732, 732, nil, 732, 732, 732, 732, nil, nil, nil, - nil, 732, 732, nil, nil, nil, 733, 733, 733, 732, - 733, 732, 732, 732, 733, 733, 732, 732, nil, 733, - nil, 733, 733, 733, 733, 733, 733, 733, nil, nil, - nil, nil, nil, 733, 733, 733, 733, 733, 733, 733, - nil, nil, 733, nil, nil, nil, nil, nil, nil, 733, - nil, nil, 733, 733, 733, 733, 733, 733, 733, 733, - nil, 733, 733, 733, nil, 733, 733, 733, 733, 733, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 733, - nil, nil, 733, nil, nil, 733, 733, nil, nil, 733, - nil, nil, nil, nil, nil, 733, nil, nil, nil, nil, - nil, nil, nil, nil, 733, nil, nil, nil, nil, 733, - 733, 733, 733, nil, 733, 733, 733, 733, nil, nil, - nil, nil, 733, 733, nil, nil, nil, 788, 788, 788, - 733, 788, 733, 733, 733, 788, 788, 733, 733, nil, - 788, nil, 788, 788, 788, 788, 788, 788, 788, nil, - nil, nil, nil, nil, 788, 788, 788, 788, 788, 788, - 788, nil, nil, 788, nil, nil, nil, nil, nil, nil, - 788, nil, nil, 788, 788, 788, 788, 788, 788, 788, - 788, 788, 788, 788, 788, nil, 788, 788, 788, 788, - 788, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 788, nil, nil, 788, nil, nil, 788, 788, nil, nil, - 788, nil, 788, nil, 788, nil, 788, nil, nil, 788, - nil, nil, nil, nil, nil, 788, nil, nil, nil, nil, - 788, 788, 788, 788, nil, 788, 788, 788, 788, nil, - nil, nil, nil, 788, 788, nil, nil, nil, 797, 797, - 797, 788, 797, 788, 788, 788, 797, 797, 788, 788, - nil, 797, nil, 797, 797, 797, 797, 797, 797, 797, - nil, nil, nil, nil, nil, 797, 797, 797, 797, 797, - 797, 797, nil, nil, 797, nil, nil, nil, nil, nil, - nil, 797, nil, nil, 797, 797, 797, 797, 797, 797, - 797, 797, nil, 797, 797, 797, nil, 797, 797, 797, - 797, 797, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 797, nil, nil, 797, nil, nil, 797, 797, nil, - nil, 797, nil, nil, nil, nil, nil, 797, nil, nil, - nil, nil, nil, nil, nil, nil, 797, nil, nil, nil, - nil, 797, 797, 797, 797, nil, 797, 797, 797, 797, - nil, nil, nil, nil, 797, 797, nil, nil, nil, 800, - 800, 800, 797, 800, 797, 797, 797, 800, 800, 797, - 797, nil, 800, nil, 800, 800, 800, 800, 800, 800, - 800, nil, nil, nil, nil, nil, 800, 800, 800, 800, - 800, 800, 800, nil, nil, 800, nil, nil, nil, nil, - nil, nil, 800, nil, nil, 800, 800, 800, 800, 800, - 800, 800, 800, nil, 800, 800, 800, nil, 800, 800, - 800, 800, 800, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 800, nil, nil, 800, nil, nil, 800, 800, - nil, nil, 800, nil, nil, nil, nil, nil, 800, nil, - nil, nil, nil, nil, nil, nil, nil, 800, nil, nil, - nil, nil, 800, 800, 800, 800, nil, 800, 800, 800, - 800, nil, nil, nil, nil, 800, 800, nil, nil, nil, - 818, 818, 818, 800, 818, 800, 800, 800, 818, 818, - 800, 800, nil, 818, nil, 818, 818, 818, 818, 818, - 818, 818, nil, nil, nil, nil, nil, 818, 818, 818, - 818, 818, 818, 818, nil, nil, 818, nil, nil, nil, - nil, nil, nil, 818, nil, nil, 818, 818, 818, 818, - 818, 818, 818, 818, nil, 818, 818, 818, nil, 818, - 818, 818, 818, 818, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 818, nil, nil, 818, nil, nil, 818, - 818, nil, nil, 818, nil, nil, nil, nil, nil, 818, - nil, nil, nil, nil, nil, nil, nil, nil, 818, nil, - nil, nil, nil, 818, 818, 818, 818, nil, 818, 818, - 818, 818, nil, nil, nil, nil, 818, 818, nil, nil, - nil, 847, 847, 847, 818, 847, 818, 818, 818, 847, - 847, 818, 818, nil, 847, nil, 847, 847, 847, 847, - 847, 847, 847, nil, nil, nil, nil, nil, 847, 847, - 847, 847, 847, 847, 847, nil, nil, 847, nil, nil, - nil, nil, nil, nil, 847, nil, nil, 847, 847, 847, - 847, 847, 847, 847, 847, nil, 847, 847, 847, nil, - 847, 847, 847, 847, 847, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 847, nil, nil, 847, nil, nil, - 847, 847, nil, nil, 847, nil, nil, nil, nil, nil, - 847, nil, nil, nil, nil, nil, nil, nil, nil, 847, - nil, nil, nil, nil, 847, 847, 847, 847, nil, 847, - 847, 847, 847, nil, nil, nil, nil, 847, 847, nil, - nil, nil, 867, 867, 867, 847, 867, 847, 847, 847, - 867, 867, 847, 847, nil, 867, nil, 867, 867, 867, - 867, 867, 867, 867, nil, nil, nil, nil, nil, 867, - 867, 867, 867, 867, 867, 867, nil, nil, 867, nil, - nil, nil, nil, nil, nil, 867, nil, nil, 867, 867, - 867, 867, 867, 867, 867, 867, nil, 867, 867, 867, - nil, 867, 867, 867, 867, 867, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 867, nil, nil, 867, nil, - nil, 867, 867, nil, nil, 867, nil, nil, nil, nil, - nil, 867, nil, nil, nil, nil, nil, nil, nil, nil, - 867, nil, nil, nil, nil, 867, 867, 867, 867, nil, - 867, 867, 867, 867, nil, nil, nil, nil, 867, 867, - nil, nil, nil, 875, 875, 875, 867, 875, 867, 867, - 867, 875, 875, 867, 867, nil, 875, nil, 875, 875, - 875, 875, 875, 875, 875, nil, nil, nil, nil, nil, - 875, 875, 875, 875, 875, 875, 875, nil, nil, 875, - nil, nil, nil, nil, nil, nil, 875, nil, nil, 875, - 875, 875, 875, 875, 875, 875, 875, nil, 875, 875, - 875, nil, 875, 875, 875, 875, 875, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 875, nil, nil, 875, - nil, nil, 875, 875, nil, nil, 875, nil, nil, nil, - nil, nil, 875, nil, nil, nil, nil, nil, nil, nil, - nil, 875, nil, nil, nil, nil, 875, 875, 875, 875, - nil, 875, 875, 875, 875, nil, nil, nil, nil, 875, - 875, nil, nil, nil, 888, 888, 888, 875, 888, 875, - 875, 875, 888, 888, 875, 875, nil, 888, nil, 888, - 888, 888, 888, 888, 888, 888, nil, nil, nil, nil, - nil, 888, 888, 888, 888, 888, 888, 888, nil, nil, - 888, nil, nil, nil, nil, nil, nil, 888, nil, nil, - 888, 888, 888, 888, 888, 888, 888, 888, nil, 888, - 888, 888, nil, 888, 888, 888, 888, 888, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 888, nil, nil, - 888, nil, nil, 888, 888, nil, nil, 888, nil, nil, - nil, nil, nil, 888, nil, nil, nil, nil, nil, nil, - nil, nil, 888, nil, nil, nil, nil, 888, 888, 888, - 888, nil, 888, 888, 888, 888, nil, nil, nil, nil, - 888, 888, nil, nil, nil, 889, 889, 889, 888, 889, - 888, 888, 888, 889, 889, 888, 888, nil, 889, nil, - 889, 889, 889, 889, 889, 889, 889, nil, nil, nil, - nil, nil, 889, 889, 889, 889, 889, 889, 889, nil, - nil, 889, nil, nil, nil, nil, nil, nil, 889, nil, - nil, 889, 889, 889, 889, 889, 889, 889, 889, nil, - 889, 889, 889, nil, 889, 889, 889, 889, 889, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 889, nil, - nil, 889, nil, nil, 889, 889, nil, nil, 889, nil, - nil, nil, nil, nil, 889, nil, nil, nil, nil, nil, - nil, nil, nil, 889, nil, nil, nil, nil, 889, 889, - 889, 889, nil, 889, 889, 889, 889, nil, nil, nil, - nil, 889, 889, nil, nil, nil, 917, 917, 917, 889, - 917, 889, 889, 889, 917, 917, 889, 889, nil, 917, - nil, 917, 917, 917, 917, 917, 917, 917, nil, nil, - nil, nil, nil, 917, 917, 917, 917, 917, 917, 917, - nil, nil, 917, nil, nil, nil, nil, nil, nil, 917, - nil, nil, 917, 917, 917, 917, 917, 917, 917, 917, - nil, 917, 917, 917, nil, 917, 917, 917, 917, 917, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 917, - nil, nil, 917, nil, nil, 917, 917, nil, nil, 917, - nil, nil, nil, nil, nil, 917, nil, nil, nil, nil, - nil, nil, nil, nil, 917, nil, nil, nil, nil, 917, - 917, 917, 917, nil, 917, 917, 917, 917, nil, nil, - nil, nil, 917, 917, nil, nil, nil, 918, 918, 918, - 917, 918, 917, 917, 917, 918, 918, 917, 917, nil, - 918, nil, 918, 918, 918, 918, 918, 918, 918, nil, - nil, nil, nil, nil, 918, 918, 918, 918, 918, 918, - 918, nil, nil, 918, nil, nil, nil, nil, nil, nil, - 918, nil, nil, 918, 918, 918, 918, 918, 918, 918, - 918, nil, 918, 918, 918, nil, 918, 918, 918, 918, - 918, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 918, nil, nil, 918, nil, nil, 918, 918, nil, nil, - 918, nil, nil, nil, nil, nil, 918, nil, nil, nil, - nil, nil, nil, nil, nil, 918, nil, nil, nil, nil, - 918, 918, 918, 918, nil, 918, 918, 918, 918, nil, - nil, nil, nil, 918, 918, nil, nil, nil, 919, 919, - 919, 918, 919, 918, 918, 918, 919, 919, 918, 918, - nil, 919, nil, 919, 919, 919, 919, 919, 919, 919, - nil, nil, nil, nil, nil, 919, 919, 919, 919, 919, - 919, 919, nil, nil, 919, nil, nil, nil, nil, nil, - nil, 919, nil, nil, 919, 919, 919, 919, 919, 919, - 919, 919, nil, 919, 919, 919, nil, 919, 919, 919, - 919, 919, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 919, nil, nil, 919, nil, nil, 919, 919, nil, - nil, 919, nil, nil, nil, nil, nil, 919, nil, nil, - nil, nil, nil, nil, nil, nil, 919, nil, nil, nil, - nil, 919, 919, 919, 919, nil, 919, 919, 919, 919, - nil, nil, nil, nil, 919, 919, nil, nil, nil, 920, - 920, 920, 919, 920, 919, 919, 919, 920, 920, 919, - 919, nil, 920, nil, 920, 920, 920, 920, 920, 920, - 920, nil, nil, nil, nil, nil, 920, 920, 920, 920, - 920, 920, 920, nil, nil, 920, nil, nil, nil, nil, - nil, nil, 920, nil, nil, 920, 920, 920, 920, 920, - 920, 920, 920, nil, 920, 920, 920, nil, 920, 920, - 920, 920, 920, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 920, nil, nil, 920, nil, nil, 920, 920, - nil, nil, 920, nil, nil, nil, nil, nil, 920, nil, - nil, nil, nil, nil, nil, nil, nil, 920, nil, nil, - nil, nil, 920, 920, 920, 920, nil, 920, 920, 920, - 920, nil, nil, nil, nil, 920, 920, nil, nil, nil, - 921, 921, 921, 920, 921, 920, 920, 920, 921, 921, - 920, 920, nil, 921, nil, 921, 921, 921, 921, 921, - 921, 921, nil, nil, nil, nil, nil, 921, 921, 921, - 921, 921, 921, 921, nil, nil, 921, nil, nil, nil, - nil, nil, nil, 921, nil, nil, 921, 921, 921, 921, - 921, 921, 921, 921, nil, 921, 921, 921, nil, 921, - 921, 921, 921, 921, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 921, nil, nil, 921, nil, nil, 921, - 921, nil, nil, 921, nil, nil, nil, nil, nil, 921, - nil, nil, nil, nil, nil, nil, nil, nil, 921, nil, - nil, nil, nil, 921, 921, 921, 921, nil, 921, 921, - 921, 921, nil, nil, nil, nil, 921, 921, nil, nil, - nil, 922, 922, 922, 921, 922, 921, 921, 921, 922, - 922, 921, 921, nil, 922, nil, 922, 922, 922, 922, - 922, 922, 922, nil, nil, nil, nil, nil, 922, 922, - 922, 922, 922, 922, 922, nil, nil, 922, nil, nil, - nil, nil, nil, nil, 922, nil, nil, 922, 922, 922, - 922, 922, 922, 922, 922, nil, 922, 922, 922, nil, - 922, 922, 922, 922, 922, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 922, nil, nil, 922, nil, nil, - 922, 922, nil, nil, 922, nil, nil, nil, nil, nil, - 922, nil, nil, nil, nil, nil, nil, nil, nil, 922, - nil, nil, nil, nil, 922, 922, 922, 922, nil, 922, - 922, 922, 922, nil, nil, nil, nil, 922, 922, nil, - nil, nil, 956, 956, 956, 922, 956, 922, 922, 922, - 956, 956, 922, 922, nil, 956, nil, 956, 956, 956, - 956, 956, 956, 956, nil, nil, nil, nil, nil, 956, - 956, 956, 956, 956, 956, 956, nil, nil, 956, nil, - nil, nil, nil, nil, nil, 956, nil, nil, 956, 956, - 956, 956, 956, 956, 956, 956, nil, 956, 956, 956, - nil, 956, 956, 956, 956, 956, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 956, nil, nil, 956, nil, - nil, 956, 956, nil, nil, 956, nil, nil, nil, nil, - nil, 956, nil, nil, nil, nil, nil, nil, nil, nil, - 956, nil, nil, nil, nil, 956, 956, 956, 956, nil, - 956, 956, 956, 956, nil, nil, nil, nil, 956, 956, - nil, nil, nil, 962, 962, 962, 956, 962, 956, 956, - 956, 962, 962, 956, 956, nil, 962, nil, 962, 962, - 962, 962, 962, 962, 962, nil, nil, nil, nil, nil, - 962, 962, 962, 962, 962, 962, 962, nil, nil, 962, - nil, nil, nil, nil, nil, nil, 962, nil, nil, 962, - 962, 962, 962, 962, 962, 962, 962, nil, 962, 962, - 962, nil, 962, 962, 962, 962, 962, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 962, nil, nil, 962, - nil, nil, 962, 962, nil, nil, 962, nil, nil, nil, - nil, nil, 962, nil, nil, nil, nil, nil, nil, nil, - nil, 962, nil, nil, nil, nil, 962, 962, 962, 962, - nil, 962, 962, 962, 962, nil, nil, nil, nil, 962, - 962, nil, nil, nil, 985, 985, 985, 962, 985, 962, - 962, 962, 985, 985, 962, 962, nil, 985, nil, 985, - 985, 985, 985, 985, 985, 985, nil, nil, nil, nil, - nil, 985, 985, 985, 985, 985, 985, 985, nil, nil, - 985, nil, nil, nil, nil, nil, nil, 985, nil, nil, - 985, 985, 985, 985, 985, 985, 985, 985, nil, 985, - 985, 985, nil, 985, 985, 985, 985, 985, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 985, nil, nil, - 985, nil, nil, 985, 985, nil, nil, 985, nil, nil, - nil, nil, nil, 985, nil, nil, nil, nil, nil, nil, - nil, nil, 985, nil, nil, nil, nil, 985, 985, 985, - 985, nil, 985, 985, 985, 985, nil, nil, nil, nil, - 985, 985, nil, nil, nil, 990, 990, 990, 985, 990, - 985, 985, 985, 990, 990, 985, 985, nil, 990, nil, - 990, 990, 990, 990, 990, 990, 990, nil, nil, nil, - nil, nil, 990, 990, 990, 990, 990, 990, 990, nil, - nil, 990, nil, nil, nil, nil, nil, nil, 990, nil, - nil, 990, 990, 990, 990, 990, 990, 990, 990, nil, - 990, 990, 990, nil, 990, 990, 990, 990, 990, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 990, nil, - nil, 990, nil, nil, 990, 990, nil, nil, 990, nil, - 990, nil, nil, nil, 990, nil, nil, nil, nil, nil, - nil, nil, nil, 990, nil, nil, nil, nil, 990, 990, - 990, 990, nil, 990, 990, 990, 990, nil, nil, nil, - nil, 990, 990, nil, nil, nil, 1009, 1009, 1009, 990, - 1009, 990, 990, 990, 1009, 1009, 990, 990, nil, 1009, - nil, 1009, 1009, 1009, 1009, 1009, 1009, 1009, nil, nil, - nil, nil, nil, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - nil, nil, 1009, nil, nil, nil, nil, nil, nil, 1009, - nil, nil, 1009, 1009, 1009, 1009, 1009, 1009, 1009, 1009, - 1009, 1009, 1009, 1009, nil, 1009, 1009, 1009, 1009, 1009, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 1009, - nil, nil, 1009, nil, nil, 1009, 1009, nil, nil, 1009, - nil, nil, nil, 1009, nil, 1009, nil, nil, 1009, nil, - nil, nil, nil, nil, 1009, nil, nil, nil, nil, 1009, - 1009, 1009, 1009, nil, 1009, 1009, 1009, 1009, nil, nil, - nil, nil, 1009, 1009, nil, nil, nil, 1035, 1035, 1035, - 1009, 1035, 1009, 1009, 1009, 1035, 1035, 1009, 1009, nil, - 1035, nil, 1035, 1035, 1035, 1035, 1035, 1035, 1035, nil, - nil, nil, nil, nil, 1035, 1035, 1035, 1035, 1035, 1035, - 1035, nil, nil, 1035, nil, nil, nil, nil, nil, nil, - 1035, nil, nil, 1035, 1035, 1035, 1035, 1035, 1035, 1035, - 1035, nil, 1035, 1035, 1035, nil, 1035, 1035, 1035, 1035, - 1035, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 1035, nil, nil, 1035, nil, nil, 1035, 1035, nil, nil, - 1035, nil, nil, nil, nil, nil, 1035, nil, nil, nil, - nil, nil, nil, nil, nil, 1035, nil, nil, nil, nil, - 1035, 1035, 1035, 1035, nil, 1035, 1035, 1035, 1035, nil, - nil, nil, nil, 1035, 1035, nil, nil, nil, 1149, 1149, - 1149, 1035, 1149, 1035, 1035, 1035, 1149, 1149, 1035, 1035, - nil, 1149, nil, 1149, 1149, 1149, 1149, 1149, 1149, 1149, - nil, nil, nil, nil, nil, 1149, 1149, 1149, 1149, 1149, - 1149, 1149, nil, nil, 1149, nil, nil, nil, nil, nil, - nil, 1149, nil, nil, 1149, 1149, 1149, 1149, 1149, 1149, - 1149, 1149, nil, 1149, 1149, 1149, nil, 1149, 1149, 1149, - 1149, 1149, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 1149, nil, nil, 1149, nil, nil, 1149, 1149, nil, - nil, 1149, nil, nil, nil, nil, nil, 1149, nil, nil, - nil, nil, nil, nil, nil, nil, 1149, nil, nil, nil, - nil, 1149, 1149, 1149, 1149, nil, 1149, 1149, 1149, 1149, - nil, nil, nil, nil, 1149, 1149, nil, nil, nil, 1150, - 1150, 1150, 1149, 1150, 1149, 1149, 1149, 1150, 1150, 1149, - 1149, nil, 1150, nil, 1150, 1150, 1150, 1150, 1150, 1150, - 1150, nil, nil, nil, nil, nil, 1150, 1150, 1150, 1150, - 1150, 1150, 1150, nil, nil, 1150, nil, nil, nil, nil, - nil, nil, 1150, nil, nil, 1150, 1150, 1150, 1150, 1150, - 1150, 1150, 1150, nil, 1150, 1150, 1150, nil, 1150, 1150, - 1150, 1150, 1150, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 1150, nil, nil, 1150, nil, nil, 1150, 1150, - nil, nil, 1150, nil, nil, nil, nil, nil, 1150, nil, - nil, nil, nil, nil, nil, nil, nil, 1150, nil, nil, - nil, nil, 1150, 1150, 1150, 1150, nil, 1150, 1150, 1150, - 1150, nil, nil, nil, nil, 1150, 1150, nil, nil, nil, - 1162, 1162, 1162, 1150, 1162, 1150, 1150, 1150, 1162, 1162, - 1150, 1150, nil, 1162, nil, 1162, 1162, 1162, 1162, 1162, - 1162, 1162, nil, nil, nil, nil, nil, 1162, 1162, 1162, - 1162, 1162, 1162, 1162, nil, nil, 1162, nil, nil, nil, - nil, nil, nil, 1162, nil, nil, 1162, 1162, 1162, 1162, - 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, nil, 1162, - 1162, 1162, 1162, 1162, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 1162, nil, nil, 1162, nil, nil, 1162, - 1162, nil, nil, 1162, nil, 1162, nil, 1162, nil, 1162, - nil, nil, 1162, nil, nil, nil, nil, nil, 1162, nil, - nil, nil, nil, 1162, 1162, 1162, 1162, nil, 1162, 1162, - 1162, 1162, nil, nil, nil, nil, 1162, 1162, nil, nil, - nil, 39, 39, 39, 1162, 39, 1162, 1162, 1162, 39, - 39, 1162, 1162, nil, 39, nil, 39, 39, 39, 39, - 39, 39, 39, nil, nil, nil, nil, nil, 39, 39, - 39, 39, 39, 39, 39, nil, nil, 39, nil, nil, - nil, nil, nil, nil, 39, nil, nil, 39, 39, 39, - 39, 39, 39, 39, 39, nil, 39, 39, 39, nil, - 39, 39, nil, nil, 39, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 39, nil, nil, 39, nil, nil, - 39, 39, nil, nil, 39, nil, 39, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 39, 39, 39, 39, nil, 39, - 39, 39, 39, nil, nil, nil, nil, 39, 39, nil, - nil, nil, 40, 40, 40, 39, 40, 39, 39, 39, - 40, 40, nil, nil, nil, 40, nil, 40, 40, 40, - 40, 40, 40, 40, nil, nil, nil, nil, nil, 40, - 40, 40, 40, 40, 40, 40, nil, nil, 40, nil, - nil, nil, nil, nil, nil, 40, nil, nil, 40, 40, - 40, 40, 40, 40, 40, 40, nil, 40, 40, 40, - nil, 40, 40, nil, nil, 40, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 40, nil, nil, 40, nil, - nil, 40, 40, nil, nil, 40, nil, nil, 1210, nil, - 1210, 1210, 1210, 1210, 1210, nil, nil, nil, nil, nil, - nil, nil, nil, 1210, nil, 40, 40, 40, 40, nil, - 40, 40, 40, 40, nil, nil, nil, nil, 40, 40, - nil, nil, nil, 40, nil, 1210, 40, nil, 40, 40, - 40, 76, 76, 76, nil, 76, 1210, 1210, nil, 76, - 76, 1210, nil, nil, 76, nil, 76, 76, 76, 76, - 76, 76, 76, nil, nil, nil, nil, nil, 76, 76, - 76, 76, 76, 76, 76, nil, nil, 76, nil, nil, - nil, nil, nil, nil, 76, nil, nil, 76, 76, 76, - 76, 76, 76, 76, 76, nil, 76, 76, 76, nil, - 76, 76, nil, nil, 76, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 76, nil, nil, 76, nil, nil, - 76, 76, nil, nil, 76, nil, 76, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 76, 76, 76, 76, nil, 76, - 76, 76, 76, nil, nil, nil, nil, 76, 76, nil, - nil, nil, 77, 77, 77, 76, 77, 76, 76, 76, - 77, 77, nil, nil, nil, 77, nil, 77, 77, 77, - 77, 77, 77, 77, nil, nil, nil, nil, nil, 77, - 77, 77, 77, 77, 77, 77, nil, nil, 77, nil, - nil, nil, nil, nil, nil, 77, nil, nil, 77, 77, - 77, 77, 77, 77, 77, 77, nil, 77, 77, 77, - nil, 77, 77, nil, nil, 77, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 77, nil, nil, 77, nil, nil, 77, nil, - nil, 77, 77, nil, nil, 77, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 77, 77, 77, 77, nil, - 77, 77, 77, 77, nil, nil, nil, nil, 77, 77, - nil, nil, nil, 78, 78, 78, 77, 78, 77, 77, - 77, 78, 78, nil, nil, nil, 78, nil, 78, 78, - 78, 78, 78, 78, 78, nil, nil, nil, nil, nil, - 78, 78, 78, 78, 78, 78, 78, nil, nil, 78, - nil, nil, nil, nil, nil, nil, 78, nil, nil, 78, - 78, 78, 78, 78, 78, 78, 78, nil, 78, 78, - 78, nil, 78, 78, nil, nil, 78, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 78, nil, nil, 78, - nil, nil, 78, 78, nil, nil, 78, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 78, 78, 78, 78, - nil, 78, 78, 78, 78, nil, nil, nil, nil, 78, - 78, nil, nil, nil, 341, 341, 341, 78, 341, 78, - 78, 78, 341, 341, nil, nil, nil, 341, nil, 341, - 341, 341, 341, 341, 341, 341, nil, nil, nil, nil, - nil, 341, 341, 341, 341, 341, 341, 341, nil, nil, - 341, nil, nil, nil, nil, nil, nil, 341, nil, nil, - 341, 341, 341, 341, 341, 341, 341, 341, nil, 341, - 341, 341, nil, 341, 341, nil, nil, 341, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 341, nil, nil, - 341, nil, nil, 341, 341, nil, nil, 341, nil, nil, - 1212, nil, 1212, 1212, 1212, 1212, 1212, nil, nil, nil, - nil, nil, nil, nil, nil, 1212, nil, 341, 341, 341, - 341, nil, 341, 341, 341, 341, nil, nil, nil, nil, - 341, 341, nil, nil, nil, 341, nil, 1212, 341, nil, - 341, 341, 341, 360, 360, 360, nil, 360, 1212, 1212, - nil, 360, 360, 1212, nil, nil, 360, nil, 360, 360, - 360, 360, 360, 360, 360, nil, nil, nil, nil, nil, - 360, 360, 360, 360, 360, 360, 360, nil, nil, 360, - nil, nil, nil, nil, nil, nil, 360, nil, nil, 360, - 360, 360, 360, 360, 360, 360, 360, nil, 360, 360, - 360, nil, 360, 360, nil, nil, 360, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 360, nil, nil, 360, - nil, nil, 360, 360, nil, nil, 360, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 360, 360, 360, 360, - nil, 360, 360, 360, 360, nil, nil, nil, nil, 360, - 360, nil, nil, nil, 588, 588, 588, 360, 588, 360, - 360, 360, 588, 588, nil, nil, nil, 588, nil, 588, - 588, 588, 588, 588, 588, 588, nil, nil, nil, nil, - nil, 588, 588, 588, 588, 588, 588, 588, nil, nil, - 588, nil, nil, nil, nil, nil, nil, 588, nil, nil, - 588, 588, 588, 588, 588, 588, 588, 588, nil, 588, - 588, 588, nil, 588, 588, nil, nil, 588, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 588, nil, nil, - 588, nil, nil, 588, 588, nil, nil, 588, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 588, 588, 588, - 588, nil, 588, 588, 588, 588, nil, nil, nil, nil, - 588, 588, nil, nil, nil, 597, 597, 597, 588, 597, - 588, 588, 588, 597, 597, nil, nil, nil, 597, nil, - 597, 597, 597, 597, 597, 597, 597, nil, nil, nil, - nil, nil, 597, 597, 597, 597, 597, 597, 597, nil, - nil, 597, nil, nil, nil, nil, nil, nil, 597, nil, - nil, 597, 597, 597, 597, 597, 597, 597, 597, nil, - 597, 597, 597, nil, 597, 597, nil, nil, 597, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 597, nil, - nil, 597, nil, nil, 597, 597, nil, nil, 597, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 597, 597, - 597, 597, nil, 597, 597, 597, 597, nil, nil, nil, - nil, 597, 597, nil, nil, nil, 803, 803, 803, 597, - 803, 597, 597, 597, 803, 803, nil, nil, nil, 803, - nil, 803, 803, 803, 803, 803, 803, 803, nil, nil, - nil, nil, nil, 803, 803, 803, 803, 803, 803, 803, - nil, nil, 803, nil, nil, nil, nil, nil, nil, 803, - nil, nil, 803, 803, 803, 803, 803, 803, 803, 803, - nil, 803, 803, 803, nil, 803, 803, nil, nil, 803, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 803, - nil, nil, 803, nil, nil, 803, 803, nil, nil, 803, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 803, - 803, 803, 803, nil, 803, 803, 803, 803, nil, nil, - nil, nil, 803, 803, nil, nil, nil, 814, 814, 814, - 803, 814, 803, 803, 803, 814, 814, nil, nil, nil, - 814, nil, 814, 814, 814, 814, 814, 814, 814, nil, - nil, nil, nil, nil, 814, 814, 814, 814, 814, 814, - 814, nil, nil, 814, nil, nil, nil, nil, nil, nil, - 814, nil, nil, 814, 814, 814, 814, 814, 814, 814, - 814, nil, 814, 814, 814, nil, 814, 814, nil, nil, - 814, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 814, nil, nil, 814, nil, nil, 814, 814, nil, nil, - 814, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 814, 814, 814, 814, nil, 814, 814, 814, 814, nil, - nil, nil, nil, 814, 814, nil, nil, nil, 1017, 1017, - 1017, 814, 1017, 814, 814, 814, 1017, 1017, nil, nil, - nil, 1017, nil, 1017, 1017, 1017, 1017, 1017, 1017, 1017, - nil, nil, nil, nil, nil, 1017, 1017, 1017, 1017, 1017, - 1017, 1017, nil, nil, 1017, nil, nil, nil, nil, nil, - nil, 1017, nil, nil, 1017, 1017, 1017, 1017, 1017, 1017, - 1017, 1017, nil, 1017, 1017, 1017, nil, 1017, 1017, nil, - nil, 1017, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 1017, nil, nil, 1017, nil, nil, 1017, 1017, nil, - nil, 1017, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 1017, 1017, 1017, 1017, nil, 1017, 1017, 1017, 1017, - nil, nil, nil, nil, 1017, 1017, nil, nil, nil, 1081, - 1081, 1081, 1017, 1081, 1017, 1017, 1017, 1081, 1081, nil, - nil, nil, 1081, nil, 1081, 1081, 1081, 1081, 1081, 1081, - 1081, nil, nil, nil, nil, nil, 1081, 1081, 1081, 1081, - 1081, 1081, 1081, nil, nil, 1081, nil, nil, nil, nil, - nil, nil, 1081, nil, nil, 1081, 1081, 1081, 1081, 1081, - 1081, 1081, 1081, nil, 1081, 1081, 1081, nil, 1081, 1081, - nil, nil, 1081, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 1081, nil, nil, 1081, nil, nil, 1081, 1081, - nil, nil, 1081, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 1081, 1081, 1081, 1081, nil, 1081, 1081, 1081, - 1081, nil, nil, nil, nil, 1081, 1081, nil, nil, nil, - 1144, 1144, 1144, 1081, 1144, 1081, 1081, 1081, 1144, 1144, - nil, nil, nil, 1144, nil, 1144, 1144, 1144, 1144, 1144, - 1144, 1144, nil, nil, nil, nil, nil, 1144, 1144, 1144, - 1144, 1144, 1144, 1144, nil, nil, 1144, nil, nil, nil, - nil, nil, nil, 1144, nil, nil, 1144, 1144, 1144, 1144, - 1144, 1144, 1144, 1144, nil, 1144, 1144, 1144, nil, 1144, - 1144, nil, nil, 1144, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 1144, nil, nil, 1144, nil, nil, 1144, - 1144, nil, nil, 1144, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 1144, 1144, 1144, 1144, nil, 1144, 1144, - 1144, 1144, nil, nil, nil, nil, 1144, 1144, nil, nil, - nil, nil, nil, nil, 1144, nil, 1144, 1144, 1144, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, nil, nil, nil, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, nil, nil, nil, nil, - nil, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, nil, 10, nil, nil, nil, nil, nil, nil, nil, - 10, 10, nil, 10, 10, 10, 10, 10, 10, 10, - nil, nil, 10, 10, nil, nil, nil, 10, 10, 10, - 10, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 10, 10, nil, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, nil, - nil, 10, 10, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 10, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, - 11, nil, nil, nil, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 11, nil, nil, nil, nil, nil, 11, - 11, 11, 11, 11, 11, 11, 11, 11, nil, nil, - 11, nil, nil, nil, nil, nil, nil, nil, 11, 11, - nil, 11, 11, 11, 11, 11, 11, 11, nil, nil, - 11, 11, nil, nil, nil, 11, 11, 11, 11, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 11, 11, nil, 11, 11, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 11, nil, nil, 11, - 11, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 11, 427, 427, 427, 427, 427, - 427, 427, 427, 427, 427, 427, 427, 427, 427, 427, - 427, 427, 427, 427, 427, 427, 427, 427, 427, nil, - nil, nil, 427, 427, 427, 427, 427, 427, 427, 427, - 427, 427, nil, nil, nil, nil, nil, 427, 427, 427, - 427, 427, 427, 427, 427, 427, nil, nil, 427, nil, - nil, nil, nil, nil, nil, nil, 427, 427, nil, 427, - 427, 427, 427, 427, 427, 427, nil, nil, 427, 427, - nil, nil, nil, 427, 427, 427, 427, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 427, 427, nil, 427, 427, 427, 427, 427, 427, 427, - 427, 427, 427, 427, 427, nil, nil, 427, 427, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 427, 667, 667, 667, 667, 667, 667, 667, - 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, - 667, 667, 667, 667, 667, 667, 667, nil, nil, nil, - 667, 667, 667, 667, 667, 667, 667, 667, 667, 667, - nil, nil, nil, nil, nil, 667, 667, 667, 667, 667, - 667, 667, 667, 667, nil, nil, 667, nil, nil, nil, - nil, nil, nil, nil, 667, 667, nil, 667, 667, 667, - 667, 667, 667, 667, nil, nil, 667, 667, nil, nil, - nil, 667, 667, 667, 667, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 667, 667, - nil, 667, 667, 667, 667, 667, 667, 667, 667, 667, - 667, 667, 667, nil, nil, 667, 667, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 667, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, nil, nil, nil, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, nil, nil, - nil, nil, nil, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, nil, 26, nil, nil, nil, - nil, nil, 26, 26, nil, 26, 26, 26, 26, 26, - 26, 26, nil, nil, 26, 26, nil, nil, nil, 26, - 26, 26, 26, nil, nil, nil, nil, nil, 26, nil, - nil, nil, nil, nil, nil, nil, 26, 26, nil, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, nil, nil, 26, 527, 527, 527, 527, nil, nil, - 1214, nil, 1214, 1214, 1214, 1214, 1214, nil, nil, nil, - 527, 527, 527, 527, nil, 1214, nil, 527, 527, nil, - nil, nil, nil, 527, 527, nil, nil, 527, 527, nil, - nil, nil, nil, nil, nil, nil, nil, 1214, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 527, 1214, 1214, - 527, nil, nil, 1214, 527, nil, nil, 527, nil, 527, - nil, nil, nil, nil, nil, nil, 527, nil, nil, nil, - nil, nil, nil, 527, nil, nil, nil, 527, 527, 527, - 527, nil, 527, 527, 527, 527, nil, nil, nil, nil, - 527, 527, 528, 528, 528, 528, nil, nil, 527, nil, - 527, 527, 527, nil, nil, 527, 527, nil, 528, 528, - 528, 528, nil, nil, nil, 528, 528, nil, nil, nil, - nil, 528, 528, nil, nil, 528, 528, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 528, nil, nil, 528, nil, - nil, nil, 528, nil, nil, 528, nil, 528, nil, nil, - nil, nil, nil, nil, 528, nil, nil, nil, nil, nil, - nil, 528, nil, nil, nil, 528, 528, 528, 528, nil, - 528, 528, 528, 528, nil, nil, nil, nil, 528, 528, - 745, 745, 745, 745, nil, nil, 528, nil, 528, 528, - 528, nil, nil, 528, 528, nil, 745, 745, 745, 745, - nil, nil, nil, 745, nil, nil, nil, nil, nil, 745, - 745, nil, nil, 745, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 745, nil, nil, 745, nil, nil, nil, - 745, nil, nil, 745, nil, 745, nil, nil, nil, nil, - nil, nil, 705, nil, 705, 705, 705, 705, 705, 745, - nil, nil, nil, 745, 745, 745, 745, 705, 745, 745, - 745, 745, nil, nil, nil, nil, 745, 745, 745, 753, - 753, 753, 753, nil, 745, nil, 745, 745, 745, 705, - nil, 745, 745, nil, nil, 753, 753, 753, 753, nil, - 705, 705, 753, nil, nil, 705, nil, nil, 753, 753, - nil, nil, 753, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 753, nil, nil, 753, nil, nil, nil, 753, - nil, nil, 753, nil, nil, 705, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 753, nil, - nil, nil, 753, 753, 753, 753, nil, 753, 753, 753, - 753, nil, nil, nil, nil, 753, 753, nil, nil, nil, - nil, nil, nil, 753, nil, 753, 753, 753, nil, nil, - 753, 753, 780, 780, 780, 780, 780, 780, 780, 780, - 780, 780, 780, 780, 780, 780, 780, 780, 780, 780, - 780, 780, 780, 780, 780, 780, nil, nil, nil, 780, - 780, 780, 780, 780, 780, 780, 780, 780, 780, nil, - nil, nil, nil, nil, 780, 780, 780, 780, 780, 780, - 780, 780, 780, nil, nil, 780, nil, nil, nil, nil, - nil, nil, nil, 780, 780, nil, 780, 780, 780, 780, - 780, 780, 780, nil, nil, 780, 780, nil, nil, nil, - 780, 780, 780, 780, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 780, 780, nil, - 780, 780, 780, 780, 780, 780, 780, 780, 780, 780, - 780, 780, nil, nil, 780, 924, 924, 924, 924, nil, - nil, nil, nil, nil, 1022, nil, 1022, 1022, 1022, 1022, - 1022, 924, 924, 924, 924, nil, nil, nil, 924, 1022, - nil, nil, nil, nil, 924, 924, nil, nil, 924, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 1022, nil, nil, nil, nil, nil, nil, 924, nil, - nil, 924, 1022, 1022, nil, 924, nil, 1022, 924, nil, - 924, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 924, nil, nil, nil, 924, 924, - 924, 924, nil, 924, 924, 924, 924, nil, nil, nil, - nil, 924, 924, 926, 926, 926, 926, 1022, nil, 924, - nil, 924, 924, 924, nil, nil, 924, 924, nil, 926, - 926, 926, 926, nil, nil, 1138, 926, 1138, 1138, 1138, - 1138, 1138, 926, 926, nil, nil, 926, nil, nil, nil, - 1138, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 926, nil, nil, 926, - nil, nil, 1138, 926, nil, nil, 926, nil, nil, nil, - nil, 1138, 1138, 1138, 1138, nil, nil, nil, 1138, nil, - nil, nil, 926, nil, nil, nil, 926, 926, 926, 926, - nil, 926, 926, 926, 926, nil, nil, nil, nil, 926, - 926, 929, 929, 929, 929, nil, nil, 926, nil, 926, - 926, 926, nil, nil, 926, 926, nil, 929, 929, 929, - 929, nil, nil, nil, 929, 929, nil, nil, nil, nil, - 929, 929, nil, nil, 929, 929, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 929, nil, nil, 929, nil, nil, - nil, 929, nil, nil, 929, nil, 929, nil, nil, nil, - nil, nil, nil, 929, nil, nil, nil, nil, nil, nil, - 929, nil, nil, nil, 929, 929, 929, 929, nil, 929, - 929, 929, 929, nil, nil, nil, nil, 929, 929, 930, - 930, 930, 930, nil, nil, 929, nil, 929, 929, 929, - nil, nil, 929, 929, nil, 930, 930, 930, 930, nil, - nil, nil, 930, 930, nil, nil, nil, nil, 930, 930, - nil, nil, 930, 930, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 930, nil, nil, 930, nil, nil, nil, 930, - nil, nil, 930, nil, 930, nil, nil, nil, nil, nil, - nil, 930, nil, nil, nil, nil, nil, nil, 930, nil, - nil, nil, 930, 930, 930, 930, nil, 930, 930, 930, - 930, nil, nil, nil, nil, 930, 930, 936, 936, 936, - 936, nil, nil, 930, nil, 930, 930, 930, nil, nil, - 930, 930, nil, 936, 936, 936, 936, nil, nil, 1208, - 936, 1208, 1208, 1208, 1208, 1208, 936, 936, nil, nil, - 936, nil, nil, nil, 1208, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 936, nil, nil, 936, nil, nil, 1208, 936, nil, nil, - 936, nil, 936, nil, nil, 1208, 1208, 1208, 1208, nil, - nil, nil, 1208, nil, nil, nil, 936, nil, nil, nil, - 936, 936, 936, 936, nil, 936, 936, 936, 936, nil, - nil, nil, nil, 936, 936, 942, 942, 942, 942, nil, - nil, 936, nil, 936, 936, 936, nil, nil, 936, 936, - nil, 942, 942, 942, 942, nil, nil, 1231, 942, 1231, - 1231, 1231, 1231, 1231, 942, 942, nil, nil, 942, nil, - nil, nil, 1231, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 942, nil, - nil, 942, nil, nil, 1231, 942, nil, nil, 942, nil, - nil, nil, nil, nil, nil, 1231, 1231, nil, nil, nil, - 1231, nil, nil, nil, 942, nil, nil, nil, 942, 942, - 942, 942, nil, 942, 942, 942, 942, nil, nil, nil, - nil, 942, 942, 943, 943, 943, 943, nil, nil, 942, - nil, 942, 942, 942, nil, nil, 942, 942, nil, 943, - 943, 943, 943, nil, nil, nil, 943, nil, nil, nil, - nil, nil, 943, 943, nil, nil, 943, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 943, nil, nil, 943, - nil, nil, nil, 943, nil, nil, 943, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 943, nil, nil, nil, 943, 943, 943, 943, - nil, 943, 943, 943, 943, nil, nil, nil, nil, 943, - 943, 989, 989, 989, 989, nil, nil, 943, nil, 943, - 943, 943, nil, nil, 943, 943, nil, 989, 989, 989, - 989, nil, nil, nil, 989, 989, nil, nil, nil, nil, - 989, 989, nil, nil, 989, 989, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 989, nil, nil, 989, nil, nil, - nil, 989, nil, nil, 989, nil, 989, nil, nil, nil, - nil, nil, nil, 989, nil, nil, nil, nil, nil, nil, - 989, nil, nil, nil, 989, 989, 989, 989, nil, 989, - 989, 989, 989, nil, nil, nil, nil, 989, 989, 1116, - 1116, 1116, 1116, nil, nil, 989, nil, 989, 989, 989, - nil, nil, 989, 989, nil, 1116, 1116, 1116, 1116, nil, - nil, nil, 1116, nil, nil, nil, nil, nil, 1116, 1116, - nil, nil, 1116, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 1116, nil, nil, 1116, nil, nil, nil, 1116, - nil, nil, 1116, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 1116, nil, - nil, nil, 1116, 1116, 1116, 1116, nil, 1116, 1116, 1116, - 1116, nil, nil, nil, nil, 1116, 1116, 1125, 1125, 1125, - 1125, nil, nil, 1116, nil, 1116, 1116, 1116, nil, nil, - 1116, 1116, nil, 1125, 1125, 1125, 1125, nil, nil, nil, - 1125, nil, nil, nil, nil, nil, 1125, 1125, nil, nil, - 1125, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 1125, nil, nil, 1125, nil, nil, nil, 1125, nil, nil, - 1125, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 1125, nil, nil, nil, - 1125, 1125, 1125, 1125, nil, 1125, 1125, 1125, 1125, nil, - nil, nil, nil, 1125, 1125, 1129, 1129, 1129, 1129, nil, - nil, 1125, nil, 1125, 1125, 1125, nil, nil, 1125, 1125, - nil, 1129, 1129, 1129, 1129, nil, nil, nil, 1129, nil, - nil, nil, nil, nil, 1129, 1129, nil, nil, 1129, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 1129, nil, - nil, 1129, nil, nil, nil, 1129, nil, nil, 1129, nil, - 1129, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 1129, nil, nil, nil, 1129, 1129, - 1129, 1129, nil, 1129, 1129, 1129, 1129, nil, nil, nil, - nil, 1129, 1129, 1173, 1173, 1173, 1173, nil, nil, 1129, - nil, 1129, 1129, 1129, nil, nil, 1129, 1129, nil, 1173, - 1173, 1173, 1173, nil, nil, nil, 1173, nil, nil, nil, - nil, nil, 1173, 1173, nil, nil, 1173, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 1173, nil, nil, 1173, - nil, nil, nil, 1173, nil, nil, 1173, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 1173, nil, nil, nil, 1173, 1173, 1173, 1173, - nil, 1173, 1173, 1173, 1173, nil, nil, nil, nil, 1173, - 1173, 1205, 1205, 1205, 1205, nil, nil, 1173, nil, 1173, - 1173, 1173, nil, nil, 1173, 1173, nil, 1205, 1205, 1205, - 1205, nil, nil, nil, 1205, nil, nil, nil, nil, nil, - 1205, 1205, nil, nil, 1205, nil, nil, nil, nil, nil, - nil, nil, 763, 763, 763, 763, nil, nil, nil, nil, - nil, nil, nil, nil, 1205, nil, nil, 1205, 763, 763, - 763, 1205, nil, nil, 1205, nil, nil, nil, nil, nil, - nil, 763, 763, nil, nil, 763, nil, nil, nil, nil, - 1205, nil, nil, nil, 1205, 1205, 1205, 1205, nil, 1205, - 1205, 1205, 1205, nil, nil, nil, nil, 1205, 1205, nil, - nil, nil, nil, nil, nil, 1205, nil, 1205, 1205, 1205, - nil, nil, 1205, 1205, 972, nil, 972, 972, 972, 972, - 972, nil, nil, nil, nil, 763, 763, 763, 763, 972, - 763, 763, 763, 763, nil, nil, nil, nil, 763, 763, - 950, 950, 950, 950, nil, nil, 763, nil, 763, 763, - 763, 972, nil, nil, nil, nil, 950, 950, 950, nil, - 972, 972, 972, 972, nil, nil, nil, 972, nil, 950, - 950, nil, nil, 950, 951, 951, 951, 951, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 951, 951, 951, 972, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 951, 951, nil, nil, 951, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 950, 950, 950, 950, nil, 950, 950, - 950, 950, nil, nil, nil, nil, 950, 950, nil, nil, - nil, nil, nil, nil, 950, nil, 950, 950, 950, nil, - nil, nil, nil, nil, nil, nil, nil, 951, 951, 951, - 951, nil, 951, 951, 951, 951, nil, nil, nil, nil, - 951, 951, nil, nil, nil, nil, nil, nil, 951, nil, - 951, 951, 951, 701, nil, 701, 701, 701, 701, 701, - nil, 703, nil, 703, 703, 703, 703, 703, 701, nil, - nil, nil, nil, nil, nil, nil, 703, nil, 1020, nil, - 1020, 1020, 1020, 1020, 1020, nil, nil, nil, nil, nil, - 701, nil, nil, 1020, nil, nil, nil, nil, 703, 701, - 701, 701, 701, nil, nil, nil, 701, 703, 703, 703, - 703, nil, nil, nil, 703, 1020, nil, nil, nil, nil, - nil, nil, nil, nil, 1020, 1020, 1020, 1020, nil, nil, - 1024, 1020, 1024, 1024, 1024, 1024, 1024, 1026, nil, 1026, - 1026, 1026, 1026, 1026, nil, 1024, 701, nil, nil, nil, - nil, nil, 1026, nil, 703, 1166, nil, 1166, 1166, 1166, - 1166, 1166, nil, nil, nil, nil, nil, 1024, nil, nil, - 1166, 1020, nil, nil, 1026, nil, nil, nil, 1024, 1024, - nil, nil, nil, 1024, nil, 1026, 1026, nil, nil, nil, - 1026, nil, 1166, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 1166, 1166, nil, nil, nil, 1166, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 225, 225, nil, 1024, 225, nil, nil, nil, nil, nil, - 1026, nil, 225, 225, nil, 225, 225, 225, 225, 225, - 225, 225, nil, nil, 225, 225, nil, nil, 1166, 225, - 225, 225, 225, nil, nil, nil, nil, nil, 225, nil, - nil, nil, nil, nil, nil, nil, 225, 225, nil, 225, - 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, - 225, 226, 226, 225, nil, 226, nil, nil, nil, nil, - nil, nil, nil, 226, 226, nil, 226, 226, 226, 226, - 226, 226, 226, nil, nil, 226, 226, nil, nil, nil, - 226, 226, 226, 226, nil, nil, nil, nil, nil, 226, - nil, nil, nil, nil, nil, nil, nil, 226, 226, nil, - 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, - 226, 226, 302, 302, 226, nil, 302, nil, nil, nil, - nil, nil, nil, nil, 302, 302, nil, 302, 302, 302, - 302, 302, 302, 302, nil, nil, 302, 302, nil, nil, - nil, 302, 302, 302, 302, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 302, 302, - nil, 302, 302, 302, 302, 302, 302, 302, 302, 302, - 302, 302, 302, 518, 518, 302, nil, 518, nil, nil, - nil, nil, nil, nil, nil, 518, 518, nil, 518, 518, - 518, 518, 518, 518, 518, nil, nil, 518, 518, nil, - nil, nil, 518, 518, 518, 518, nil, nil, nil, nil, - nil, 518, nil, nil, nil, nil, nil, nil, nil, 518, - 518, nil, 518, 518, 518, 518, 518, 518, 518, 518, - 518, 518, 518, 518, 519, 519, 518, nil, 519, nil, - nil, nil, nil, nil, nil, nil, 519, 519, nil, 519, - 519, 519, 519, 519, 519, 519, nil, nil, 519, 519, - nil, nil, nil, 519, 519, 519, 519, nil, nil, nil, - nil, nil, 519, nil, nil, nil, nil, nil, nil, nil, - 519, 519, nil, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 591, 591, 519, nil, 591, - nil, nil, nil, nil, nil, nil, nil, 591, 591, nil, - 591, 591, 591, 591, 591, 591, 591, nil, nil, 591, - 591, nil, nil, nil, 591, 591, 591, 591, nil, nil, - nil, nil, nil, 591, nil, nil, nil, nil, nil, nil, - nil, 591, 591, nil, 591, 591, 591, 591, 591, 591, - 591, 591, 591, 591, 591, 591, 592, 592, 591, nil, - 592, nil, nil, nil, nil, nil, nil, nil, 592, 592, - nil, 592, 592, 592, 592, 592, 592, 592, nil, nil, - 592, 592, nil, nil, nil, 592, 592, 592, 592, nil, - nil, nil, nil, nil, 592, nil, nil, nil, nil, nil, - nil, nil, 592, 592, nil, 592, 592, 592, 592, 592, - 592, 592, 592, 592, 592, 592, 592, 601, 601, 592, - nil, 601, nil, nil, nil, nil, nil, nil, nil, 601, - 601, nil, 601, 601, 601, 601, 601, 601, 601, nil, - nil, 601, 601, nil, nil, nil, 601, 601, 601, 601, - nil, nil, nil, nil, nil, 601, nil, nil, nil, nil, - nil, nil, nil, 601, 601, nil, 601, 601, 601, 601, - 601, 601, 601, 601, 601, 601, 601, 601, 602, 602, - 601, nil, 602, nil, nil, nil, nil, nil, nil, nil, - 602, 602, nil, 602, 602, 602, 602, 602, 602, 602, - nil, nil, 602, 602, nil, nil, nil, 602, 602, 602, - 602, nil, nil, nil, nil, nil, 602, nil, nil, nil, - nil, nil, nil, nil, 602, 602, nil, 602, 602, 602, - 602, 602, 602, 602, 602, 602, 602, 602, 602, 629, - 629, 602, nil, 629, nil, nil, nil, nil, nil, nil, - nil, 629, 629, nil, 629, 629, 629, 629, 629, 629, - 629, nil, nil, 629, 629, nil, nil, nil, 629, 629, - 629, 629, nil, nil, nil, nil, nil, 629, nil, nil, - nil, nil, nil, nil, nil, 629, 629, nil, 629, 629, - 629, 629, 629, 629, 629, 629, 629, 629, 629, 629, - 630, 630, 629, nil, 630, nil, nil, nil, nil, nil, - nil, nil, 630, 630, nil, 630, 630, 630, 630, 630, - 630, 630, nil, nil, 630, 630, nil, nil, nil, 630, - 630, 630, 630, nil, nil, nil, nil, nil, 630, nil, - nil, nil, nil, nil, nil, nil, 630, 630, nil, 630, - 630, 630, 630, 630, 630, 630, 630, 630, 630, 630, - 630, 636, 636, 630, nil, 636, nil, nil, nil, nil, - nil, nil, nil, 636, 636, nil, 636, 636, 636, 636, - 636, 636, 636, nil, nil, 636, 636, nil, nil, nil, - 636, 636, 636, 636, nil, nil, nil, nil, nil, 636, - nil, nil, nil, nil, nil, nil, nil, 636, 636, nil, - 636, 636, 636, 636, 636, 636, 636, 636, 636, 636, - 636, 636, 637, 637, 636, nil, 637, nil, nil, nil, - nil, nil, nil, nil, 637, 637, nil, 637, 637, 637, - 637, 637, 637, 637, nil, nil, 637, 637, nil, nil, - nil, 637, 637, 637, 637, nil, nil, nil, nil, nil, - 637, nil, nil, nil, nil, nil, nil, nil, 637, 637, - nil, 637, 637, 637, 637, 637, 637, 637, 637, 637, - 637, 637, 637, 674, 674, 637, nil, 674, nil, nil, - nil, nil, nil, nil, nil, 674, 674, nil, 674, 674, - 674, 674, 674, 674, 674, nil, nil, 674, 674, nil, - nil, nil, 674, 674, 674, 674, nil, nil, nil, nil, - nil, 674, nil, nil, nil, nil, nil, nil, nil, 674, - 674, nil, 674, 674, 674, 674, 674, 674, 674, 674, - 674, 674, 674, 674, 675, 675, 674, nil, 675, nil, - nil, nil, nil, nil, nil, nil, 675, 675, nil, 675, - 675, 675, 675, 675, 675, 675, nil, nil, 675, 675, - nil, nil, nil, 675, 675, 675, 675, nil, nil, nil, - nil, nil, 675, nil, nil, nil, nil, nil, nil, nil, - 675, 675, nil, 675, 675, 675, 675, 675, 675, 675, - 675, 675, 675, 675, 675, 1163, 1163, 675, nil, 1163, - nil, nil, nil, nil, nil, nil, nil, 1163, 1163, nil, - 1163, 1163, 1163, 1163, 1163, 1163, 1163, nil, nil, 1163, - 1163, nil, nil, nil, 1163, 1163, 1163, 1163, nil, nil, - nil, nil, nil, 1163, nil, nil, nil, nil, nil, nil, - nil, 1163, 1163, nil, 1163, 1163, 1163, 1163, 1163, 1163, - 1163, 1163, 1163, 1163, 1163, 1163, 1164, 1164, 1163, nil, - 1164, nil, nil, nil, nil, nil, nil, nil, 1164, 1164, - nil, 1164, 1164, 1164, 1164, 1164, 1164, 1164, nil, nil, - 1164, 1164, nil, nil, nil, 1164, 1164, 1164, 1164, nil, - nil, nil, nil, nil, 1164, nil, nil, nil, nil, nil, - nil, nil, 1164, 1164, nil, 1164, 1164, 1164, 1164, 1164, - 1164, 1164, 1164, 1164, 1164, 1164, 1164, 1188, 1188, 1164, - nil, 1188, nil, nil, nil, nil, nil, nil, nil, 1188, - 1188, nil, 1188, 1188, 1188, 1188, 1188, 1188, 1188, nil, - nil, 1188, 1188, nil, nil, nil, 1188, 1188, 1188, 1188, - nil, nil, nil, nil, nil, 1188, nil, nil, nil, nil, - nil, nil, nil, 1188, 1188, nil, 1188, 1188, 1188, 1188, - 1188, 1188, 1188, 1188, 1188, 1188, 1188, 1188, nil, nil, - 1188 ] - -racc_action_pointer = [ - nil, 58, 979, 85, nil, -110, nil, 5154, 964, 140, - 24967, 25095, 209, nil, 211, 220, 525, 328, -62, -84, - 162, 374, nil, -71, 5285, 1123, 25479, 396, nil, 171, - nil, -8, 5426, 5536, 5670, 5801, 5932, nil, 1123, 23109, - 23240, nil, 315, 525, 531, 423, 6063, 6194, 205, 6325, - 6456, 525, 6587, 378, 342, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 6728, nil, 6869, 7000, 7131, 35, - nil, 7262, 7393, nil, nil, 7524, 23379, 23510, 23641, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 612, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 0, nil, - nil, 112, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 7667, nil, nil, nil, nil, 7810, - 7941, 8072, 8203, 8346, nil, 1267, nil, 588, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 384, nil, 1411, 8477, - 8608, 8739, 8870, 9001, 9132, 27689, 27750, nil, nil, 379, - 1555, 390, nil, 719, 831, 427, 1699, 9263, 9394, 9525, - nil, nil, 514, 141, 193, 522, 246, 469, 536, nil, - 9656, 307, 388, 1843, 542, nil, nil, 9787, 9918, 10049, - 10180, 10311, 10442, 10573, 10704, 10835, 10966, 11097, 11228, 11359, - 11490, 11621, 11752, 11883, 12014, 12145, 12276, 12407, 12538, nil, - nil, nil, nil, 12669, nil, nil, 226, 302, 515, 517, - 518, 532, 550, 558, 584, 585, nil, nil, nil, 12800, - nil, nil, 27811, nil, nil, 541, 12931, 13062, nil, nil, - nil, nil, nil, nil, nil, 13193, nil, 1843, nil, 512, - 532, nil, 13324, 585, 13455, nil, nil, 13586, 13717, nil, - nil, 74, nil, 13860, 1252, 599, 579, 1987, 626, 687, - 648, 23772, 2131, 694, 806, 873, 748, 878, nil, 721, - 681, 225, 724, 732, nil, nil, nil, 743, 221, 704, - 23911, nil, 564, 879, 3283, 3427, 773, nil, 774, 13991, - nil, 755, 2275, 1396, 715, nil, 252, 399, 752, 738, - 574, 767, nil, 593, -1, 11, 14122, 2419, 2563, 216, - 840, 725, -18, 10, 893, 806, 11, 838, nil, nil, - 441, 481, 513, nil, 962, nil, 758, 14253, nil, 15821, - nil, 193, 378, 396, 402, 412, -27, -4, 463, nil, - nil, nil, nil, nil, nil, nil, 753, 25223, nil, nil, - nil, nil, 755, nil, 826, 739, 14384, 745, nil, nil, - 734, nil, 968, 253, 837, nil, nil, 1267, nil, nil, - nil, nil, nil, 1411, 751, nil, 760, 761, 615, 669, - 14525, nil, nil, nil, 222, 334, 807, nil, nil, 14657, - 14793, 14930, 891, 905, nil, nil, 785, 789, 790, nil, - nil, 792, 800, 805, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 804, 3125, nil, nil, 15061, nil, nil, - nil, -1, nil, nil, nil, 900, nil, nil, 901, 264, - 15192, 944, nil, nil, nil, -35, nil, 868, 27872, 27933, - 15323, 277, 15454, 15585, 15716, 814, 815, 25562, 25660, 3571, - 3715, 1018, 3150, 902, 907, 908, 912, 5285, 5375, 5488, - 3859, 4003, 4147, 4291, 4435, 4579, 3311, 3455, 4723, 4867, - 1987, 5011, nil, -33, nil, 15857, nil, nil, nil, nil, - 15987, 861, 860, 886, nil, nil, nil, 888, nil, nil, - 16118, nil, 16249, nil, 16380, nil, 329, nil, nil, nil, - 16523, 1540, nil, 889, 889, nil, nil, 915, 24042, 920, - 16666, 27994, 28055, 972, 962, nil, nil, 24173, 920, nil, - 16797, 28116, 28177, 16928, 5154, 17059, nil, 1048, 928, 970, - nil, 17190, nil, nil, 17321, nil, nil, nil, 2707, 1050, - nil, 2851, 62, 1057, 1059, 39, 1060, 17452, 17583, 28238, - 28299, 27, nil, nil, 995, nil, 28360, 28421, 17714, nil, - nil, 81, 2995, nil, 15851, nil, nil, nil, nil, 1033, - nil, nil, nil, 954, nil, nil, 153, nil, 263, nil, - nil, 941, nil, 943, nil, nil, nil, 25351, nil, 17857, - 945, 17988, 18119, 18250, 28482, 28543, 18393, 18524, 693, 987, - 18655, 18786, 18917, 19048, 987, nil, nil, 19179, 19310, 989, - nil, 1050, 1555, 1084, 19441, nil, nil, 888, nil, nil, - 544, 27522, nil, 27530, nil, 25811, nil, 958, 19572, nil, - 3154, nil, 972, 973, 729, 979, nil, nil, nil, nil, - nil, nil, 1068, 1699, nil, nil, nil, 286, 306, 473, - 612, 983, 19703, 19834, nil, 139, nil, nil, nil, nil, - 1021, nil, nil, nil, 582, 25758, 94, nil, 998, 1081, - 1002, nil, nil, 25857, nil, nil, 303, nil, nil, 654, - nil, nil, 6728, 27300, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 838, 612, nil, nil, 1004, - 26000, nil, 1130, nil, 1121, 91, nil, nil, 19965, nil, - 1036, 1041, 1142, nil, 1026, nil, 1078, 20096, nil, nil, - 20227, nil, 245, 24304, 1046, nil, 1053, 236, 250, 1114, - 360, 1123, 1115, 1076, 24435, nil, 1147, 2131, 20358, nil, - nil, nil, 583, 738, nil, 1203, nil, nil, nil, nil, - nil, 1210, 1213, nil, nil, 26, 1097, 40, 41, 151, - 152, 3139, 970, 1267, nil, 1105, 3283, 20489, nil, 1227, - 63, 1107, nil, nil, nil, nil, nil, 3427, nil, nil, - nil, nil, nil, nil, nil, nil, 1114, 20620, 1118, 343, - 347, 722, 834, nil, 2275, 20751, nil, 1117, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 20882, 21013, - 1245, nil, 3571, 1122, 1169, nil, nil, 1124, nil, 1209, - nil, nil, 1131, 1141, nil, 1142, 1143, nil, 1146, nil, - nil, nil, 1150, 3184, 3651, nil, nil, 21144, 21275, 21406, - 21537, 21668, 21799, 445, 26083, 1230, 26181, -41, -73, 26279, - 26377, 622, 169, 1153, 1173, nil, 26475, nil, 1171, 359, - nil, 1193, 26573, 26671, nil, 637, 1221, 333, nil, nil, - 27398, 27432, nil, nil, nil, nil, 21930, nil, nil, nil, - nil, nil, 22061, nil, nil, 1200, nil, nil, 1210, 1197, - nil, nil, 27353, 3715, nil, nil, nil, nil, 1214, 338, - nil, -7, nil, 1339, nil, 22192, 1344, nil, nil, 26769, - 22323, 3859, 68, 1345, nil, 1348, 361, 4003, nil, nil, - nil, nil, 1226, 1273, 1239, 1238, 468, nil, nil, 22454, - 2419, 2563, nil, 4147, nil, nil, 32, 24566, nil, nil, - 27547, nil, 26073, nil, 27599, nil, 27606, nil, nil, nil, - nil, 1246, 1247, 2707, 2851, 22585, nil, 1248, nil, nil, - nil, nil, 1261, 1262, 1264, 1267, 1269, 1271, nil, nil, - nil, 1317, 1275, -32, nil, 1288, nil, nil, -77, 1286, - nil, nil, nil, nil, nil, nil, 1330, 2995, 4291, nil, - nil, 1290, 1291, nil, 1292, 1294, 1314, nil, 1339, 1320, - 1307, 24697, nil, nil, nil, nil, nil, 33, nil, 34, - 727, nil, 255, nil, nil, nil, 1444, 4435, 4579, 1109, - nil, nil, nil, 4723, 35, 36, 1165, 1412, 42, nil, - 1338, 1358, 1359, 1364, 3795, 3845, 26867, nil, nil, nil, - nil, nil, nil, nil, 1365, 26965, nil, 370, nil, 27063, - nil, nil, 1444, nil, nil, 15876, nil, nil, 26184, nil, - 14588, nil, nil, 1392, 24828, 1309, 1450, 4867, nil, 22716, - 22847, nil, nil, nil, nil, 1394, 1506, 604, nil, nil, - nil, 1516, 22978, 28604, 28665, 98, 27624, nil, nil, nil, - nil, 1391, 1392, 27161, 1397, nil, nil, 1402, nil, nil, - 1403, 1404, 1405, 1408, nil, 1412, nil, 1411, 28726, nil, - 755, 5011, nil, nil, nil, nil, nil, 1829, nil, 1416, - 102, 138, 145, 181, 1419, 27259, 1429, nil, 26478, nil, - 23287, nil, 23819, nil, 25549, nil, nil, 1474, 1475, nil, - 38, nil, 146, nil, 1434, 1435, 1436, 1438, nil, nil, - nil, 26576, nil, nil, nil, nil, 1458, nil ] - -racc_action_default = [ - -1, -745, -4, -745, -2, -730, -5, -745, -8, -745, - -745, -745, -745, -31, -745, -745, -36, -745, -745, -639, - -639, -311, -52, -732, -745, -61, -745, -69, -70, -71, - -75, -287, -287, -287, -324, -352, -353, -87, -13, -91, - -99, -101, -745, -626, -627, -745, -745, -745, -745, -745, - -745, -239, -745, -732, -258, -302, -303, -304, -305, -306, - -307, -308, -309, -310, -718, -313, -317, -744, -707, -333, - -335, -745, -745, -63, -63, -730, -745, -745, -745, -354, - -355, -357, -358, -359, -360, -419, -563, -564, -565, -566, - -587, -569, -570, -589, -591, -574, -579, -583, -585, -601, - -602, -603, -587, -605, -607, -608, -609, -610, -716, -615, - -616, -717, -618, -619, -620, -621, -622, -623, -624, -625, - -630, -631, 1238, -3, -731, -740, -741, -742, -7, -745, - -745, -745, -745, -745, -9, -4, -19, -745, -130, -131, - -132, -133, -134, -135, -136, -140, -141, -142, -143, -144, - -145, -146, -147, -148, -149, -150, -151, -152, -153, -154, - -155, -156, -157, -158, -159, -160, -161, -162, -163, -164, - -165, -166, -167, -168, -169, -170, -171, -172, -173, -174, - -175, -176, -177, -178, -179, -180, -181, -182, -183, -184, - -185, -186, -187, -188, -189, -190, -191, -192, -193, -194, - -195, -196, -197, -198, -199, -200, -201, -202, -203, -204, - -205, -206, -207, -208, -209, -210, -24, -137, -13, -745, - -745, -745, -745, -745, -277, -745, -745, -728, -729, -745, - -13, -638, -636, -662, -662, -745, -13, -745, -745, -732, - -733, -56, -745, -626, -627, -745, -311, -745, -745, -245, - -745, -639, -639, -13, -745, -57, -59, -222, -223, -745, - -745, -745, -745, -745, -745, -745, -745, -745, -745, -745, - -745, -745, -745, -745, -745, -745, -745, -745, -745, -259, - -260, -261, -262, -745, -65, -66, -745, -130, -131, -170, - -171, -172, -188, -193, -200, -203, -626, -627, -705, -745, - -428, -430, -745, -726, -727, -76, -277, -745, -332, -434, - -443, -445, -82, -440, -83, -732, -84, -265, -282, -292, - -292, -286, -290, -293, -745, -587, -709, -713, -745, -85, - -86, -730, -14, -745, -17, -745, -89, -13, -732, -745, - -92, -95, -13, -107, -108, -745, -745, -115, -324, -327, - -732, -745, -639, -639, -352, -353, -356, -441, -745, -97, - -745, -103, -321, -745, -224, -225, -606, -233, -234, -745, - -246, -251, -13, -315, -732, -266, -737, -737, -745, -745, - -737, -745, -334, -62, -745, -745, -745, -13, -13, -730, - -745, -731, -626, -627, -745, -745, -311, -745, -370, -371, - -125, -126, -745, -128, -745, -311, -634, -745, -348, -662, - -567, -745, -745, -745, -745, -745, -745, -745, -745, -6, - -743, -25, -26, -27, -28, -29, -745, -745, -21, -22, - -23, -138, -745, -32, -35, -298, -745, -745, -297, -33, - -745, -37, -745, -311, -49, -51, -211, -270, -293, -53, - -54, -38, -212, -270, -732, -278, -292, -292, -719, -720, - -287, -438, -721, -722, -720, -719, -287, -437, -439, -721, - -722, -745, -555, -745, -383, -384, -732, -704, -704, -644, - -645, -647, -647, -647, -661, -663, -664, -665, -666, -667, - -668, -669, -670, -671, -745, -673, -675, -677, -682, -684, - -685, -688, -693, -695, -696, -698, -699, -700, -702, -745, - -745, -745, -48, -219, -55, -732, -331, -745, -745, -745, - -277, -321, -745, -745, -745, -745, -745, -745, -745, -220, - -221, -226, -227, -228, -229, -230, -231, -235, -236, -237, - -238, -240, -241, -242, -243, -244, -247, -248, -249, -250, - -732, -263, -67, -732, -449, -287, -719, -720, -73, -77, - -663, -732, -292, -732, -288, -447, -449, -732, -326, -283, - -745, -284, -745, -289, -745, -294, -745, -712, -715, -12, - -731, -16, -18, -732, -88, -319, -104, -93, -745, -732, - -277, -745, -745, -114, -745, -638, -606, -745, -100, -105, - -745, -745, -745, -745, -264, -745, -328, -745, -732, -745, - -267, -739, -738, -269, -739, -322, -323, -708, -13, -361, - -362, -13, -745, -745, -745, -745, -745, -745, -277, -745, - -745, -321, -63, -125, -126, -127, -745, -745, -277, -344, - -632, -745, -13, -420, -662, -423, -568, -588, -593, -745, - -595, -571, -590, -745, -592, -573, -745, -576, -745, -578, - -581, -745, -582, -745, -604, -10, -20, -745, -30, -745, - -301, -745, -745, -277, -745, -745, -745, -745, -442, -745, - -279, -281, -745, -745, -78, -276, -435, -745, -745, -80, - -436, -44, -254, -744, -744, -350, -637, -745, -642, -643, - -745, -745, -654, -745, -657, -745, -659, -745, -745, -372, - -745, -374, -376, -379, -382, -732, -676, -686, -687, -697, - -701, -640, -46, -256, -351, -330, -734, -719, -720, -719, - -720, -732, -745, -745, -58, -463, -466, -467, -468, -469, - -471, -473, -476, -477, -534, -732, -489, -492, -504, -508, - -513, -515, -516, -519, -520, -587, -523, -525, -526, -527, - -532, -533, -745, -745, -537, -538, -539, -540, -541, -542, - -543, -544, -545, -546, -547, -745, -745, -553, -60, -745, - -745, -706, -745, -450, -72, -431, -447, -272, -279, -274, - -745, -409, -745, -325, -292, -291, -295, -745, -710, -711, - -745, -15, -90, -745, -96, -102, -732, -719, -720, -275, - -723, -113, -745, -98, -745, -218, -232, -252, -745, -314, - -316, -318, -737, -744, -363, -744, -64, -364, -365, -338, - -339, -745, -745, -455, -341, -745, -732, -719, -720, -723, - -320, -13, -125, -126, -129, -732, -13, -745, -346, -745, - -745, -732, -594, -597, -598, -599, -600, -13, -572, -575, - -577, -580, -584, -586, -139, -34, -299, -745, -732, -719, - -720, -720, -719, -50, -271, -745, -735, -292, -40, -214, - -41, -215, -79, -42, -217, -43, -216, -81, -745, -745, - -744, -368, -13, -556, -744, -557, -558, -704, -683, -688, - -703, -646, -647, -647, -674, -647, -647, -694, -647, -671, - -386, -689, -732, -745, -745, -381, -672, -745, -745, -745, - -745, -745, -745, -442, -464, -745, -745, -474, -475, -745, - -745, -745, -494, -732, -732, -488, -495, -501, -745, -745, - -491, -745, -745, -745, -507, -514, -518, -745, -522, -524, - -530, -531, -535, -536, -548, -549, -745, -611, -612, -613, - -126, -551, -745, -68, -429, -409, -433, -432, -745, -732, - -444, -410, -732, -13, -446, -285, -296, -714, -94, -442, - -106, -732, -268, -745, -366, -745, -745, -340, -342, -745, - -745, -13, -442, -745, -442, -745, -745, -13, -349, -421, - -424, -426, -413, -745, -745, -300, -442, -39, -213, -280, - -45, -255, -11, -13, -562, -369, -745, -745, -560, -641, - -745, -650, -745, -652, -745, -655, -745, -658, -660, -373, - -375, -377, -380, -47, -257, -745, -465, -504, -470, -472, - -481, -485, -732, -732, -732, -732, -732, -732, -552, -486, - -487, -511, -496, -499, -502, -732, -587, -736, -732, -505, - -509, -512, -517, -521, -528, -529, -745, -253, -13, -74, - -273, -704, -704, -390, -392, -392, -392, -408, -745, -732, - -671, -679, -680, -691, -448, -329, -336, -745, -337, -745, - -460, -295, -744, -343, -345, -633, -745, -13, -13, -745, - -422, -596, -561, -13, -626, -627, -745, -745, -311, -559, - -647, -647, -647, -647, -745, -745, -745, -478, -479, -480, - -482, -483, -484, -503, -497, -745, -490, -745, -493, -745, - -550, -451, -745, -388, -389, -393, -399, -401, -745, -404, - -745, -406, -411, -745, -745, -678, -745, -13, -456, -745, - -745, -452, -453, -454, -347, -745, -745, -732, -415, -417, - -418, -555, -277, -745, -745, -321, -745, -648, -651, -653, - -656, -378, -505, -745, -500, -506, -510, -704, -681, -391, - -392, -392, -392, -392, -692, -392, -412, -690, -745, -321, - -744, -13, -461, -462, -425, -427, -414, -745, -554, -732, - -719, -720, -723, -320, -647, -745, -498, -387, -745, -396, - -745, -398, -745, -402, -745, -405, -407, -320, -723, -367, - -744, -416, -442, -649, -392, -392, -392, -392, -457, -458, - -459, -745, -394, -397, -400, -403, -392, -395 ] - -racc_goto_table = [ - 44, 493, 493, 411, 285, 44, 141, 141, 318, 318, - 318, 382, 309, 313, 301, 418, 340, 890, 225, 384, - 385, 284, 141, 389, 297, 15, 693, 473, 626, 303, - 15, 635, 454, 511, 618, 621, 44, 344, 344, 136, - 217, 127, 232, 232, 698, 699, 144, 144, 451, 8, - 708, 832, 563, 339, 8, 702, 704, 706, 387, 388, - 598, 15, 512, 897, 44, 983, 438, 439, 320, 320, - 320, 356, 356, 123, 393, 297, 297, 421, 422, 423, - 424, 236, 17, 460, 466, 336, 366, 17, 940, 15, - 375, 559, 571, 904, 383, 383, 734, 778, 383, 398, - 445, 377, 380, 445, 302, 124, 241, 134, 356, 356, - 356, 127, 907, 373, 561, 737, 737, 445, 17, 359, - 452, 790, 44, 1030, 305, 312, 314, 709, 715, 1032, - 973, 44, 1075, 44, 513, 610, 613, 756, 756, 617, - 4, 1059, 1158, 390, 338, 1037, 17, 15, 1184, 986, - 476, 509, 383, 383, 383, 383, 15, 798, 15, 1160, - 555, 128, 652, 654, 657, 657, 406, 408, 1, 607, - 2, 8, 795, 1003, 795, 1012, 782, 493, 484, 484, - 425, 801, 8, 216, 934, 399, 952, 953, 792, 434, - 903, 427, 905, 319, 319, 319, 527, 238, 318, 798, - 656, 658, 229, 235, 17, 528, 461, 1044, 1047, 826, - 316, 329, 330, 17, 286, 17, 44, 1055, 1184, 595, - 595, 780, 470, 786, 667, 369, 376, 371, 44, 571, - 605, 378, 785, 432, 44, 298, 379, 397, 576, 678, - 1221, 15, 518, 440, 449, 450, 440, 639, 372, 608, - 374, 44, 818, 15, 846, 997, 642, 1160, 1031, 15, - 440, 514, 515, 831, 1077, 844, 798, 1136, 339, 1079, - 1157, 643, 999, 426, 232, 232, 15, 409, 419, 850, - 318, 318, 795, 795, 1097, 1098, 303, 554, 804, 318, - 565, 566, 965, 1151, 1078, 1180, 1089, 813, 17, 1228, - 17, 433, 444, 17, 1068, 444, 989, 899, 1191, 1038, - 17, 1039, 929, 236, 1172, 930, 17, 17, 939, 444, - 942, 933, 553, 1174, 1061, 1030, 645, 1062, 731, 1171, - 955, 44, 309, 17, 622, 44, 894, 599, 313, 344, - 44, 320, 968, 709, 912, 591, 1016, 915, 410, 320, - 1175, 412, 339, 413, 484, 414, 15, 339, 344, 415, - 15, 552, 416, 601, 417, 15, 852, 127, 1043, 1046, - 44, 1206, 857, 356, 1064, 1065, 460, 466, 437, 437, - 581, 847, 902, 898, 336, 44, 44, 1178, nil, 336, - 795, nil, 356, nil, 629, 15, 596, 1126, 806, 579, - nil, 1143, 623, 624, nil, 961, 860, nil, 860, 383, - 15, 15, 493, 17, 236, nil, 1152, 17, 904, 513, - 587, 452, 17, 141, nil, 127, nil, nil, nil, 907, - 641, 580, 1219, 582, 525, 526, 836, nil, nil, 849, - nil, 685, 674, 583, nil, 691, 845, 690, 589, 809, - nil, 900, 17, nil, 900, nil, 666, 625, nil, 809, - nil, 1076, nil, 144, 1019, 562, 319, 17, 17, 493, - 882, 493, nil, nil, 319, 887, 1021, 1023, nil, 1025, - 1027, 868, 1028, 564, 722, 991, nil, 809, nil, nil, - nil, 567, nil, nil, 318, 809, nil, 815, 1177, 461, - 1036, nil, nil, 978, nil, 1042, 1045, 878, 880, 1110, - nil, nil, 883, 885, nil, 470, 923, nil, nil, nil, - nil, nil, nil, nil, 594, 772, 772, 904, nil, nil, - 935, nil, 460, 466, 969, nil, 685, nil, nil, 756, - 756, 895, nil, nil, 1229, 721, 709, 709, 609, 756, - nil, nil, 445, 684, nil, 756, nil, nil, 1090, 689, - 1048, 851, 445, 445, 318, 599, 975, 445, 445, nil, - nil, nil, 461, nil, 599, nil, nil, 737, 44, 879, - 881, 982, 461, nil, 884, 886, 344, nil, 470, 484, - nil, 979, nil, nil, 798, 344, nil, nil, 470, 756, - nil, nil, 318, 15, 794, nil, 904, nil, nil, nil, - 461, 795, 318, nil, nil, nil, 44, 841, 461, 44, - 356, 992, nil, nil, 1181, nil, 470, 1182, 679, 356, - 994, nil, 470, 823, nil, nil, 825, 1144, 1133, 1134, - 44, 15, nil, 995, 15, 822, 1230, 318, 784, 975, - nil, nil, nil, 1006, 1052, 461, nil, nil, 827, nil, - 17, 1060, nil, 141, nil, 15, 1103, 44, 947, nil, - nil, 470, nil, nil, 44, nil, nil, 848, nil, nil, - nil, nil, nil, nil, 1167, 1168, 1169, 1170, nil, nil, - nil, nil, 15, nil, nil, 440, 864, 1224, 17, 15, - 1007, 17, nil, 144, nil, 440, 440, nil, nil, nil, - 440, 440, nil, 1041, 877, 1198, 865, 896, 1049, 1050, - nil, nil, 17, 873, 779, nil, 1073, 967, nil, nil, - 1153, nil, 735, 735, nil, nil, nil, 1147, nil, 1148, - 1080, nil, 899, 772, 1207, nil, nil, 709, 709, 17, - nil, 772, 17, nil, 444, 445, 17, nil, 963, nil, - 772, 772, 17, 17, 444, 444, nil, 17, 17, 444, - 444, 966, 1008, nil, nil, 284, 141, nil, 1223, nil, - 599, nil, nil, nil, nil, nil, 835, nil, 493, nil, - 685, 980, nil, 690, 1096, 996, nil, nil, nil, nil, - nil, 344, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 344, nil, nil, nil, 879, 881, 886, 884, - nil, nil, 877, nil, nil, nil, nil, nil, nil, nil, - 1120, 1121, 1122, nil, 1060, 356, nil, nil, nil, 44, - nil, 981, nil, 1060, 44, nil, 356, 1176, nil, nil, - 1072, nil, nil, 437, nil, 44, 993, nil, nil, nil, - nil, nil, nil, nil, 15, 1131, nil, nil, nil, 15, - 383, nil, 1004, nil, nil, nil, nil, nil, nil, nil, - 15, nil, nil, nil, nil, nil, 900, 516, nil, 1073, - 44, 1060, 1073, nil, 1073, 1156, nil, nil, 440, nil, - nil, nil, nil, 1080, 1066, 679, 1080, 1015, nil, nil, - nil, nil, nil, 1014, nil, 15, nil, 1018, nil, 679, - 941, 17, 772, 1176, 772, nil, 17, 772, 772, nil, - nil, nil, 1008, 1087, 772, nil, nil, 17, nil, nil, - 772, 772, nil, nil, nil, nil, nil, nil, 772, 772, - 932, nil, nil, nil, nil, 17, nil, 444, 946, nil, - nil, nil, 1073, 568, 1073, nil, 1073, nil, 1073, 1127, - 1199, 44, 17, nil, nil, nil, 1080, nil, nil, 383, - 679, nil, nil, nil, 1222, 1073, 584, 772, 1084, 44, - nil, nil, nil, nil, nil, 44, 15, nil, nil, 906, - nil, 908, nil, nil, nil, nil, 1092, nil, 383, nil, - 679, 44, nil, 1072, 15, 1105, 1072, nil, 1072, 679, - 15, 809, nil, nil, nil, 1002, nil, nil, 1102, nil, - nil, nil, 1095, nil, nil, nil, 15, nil, nil, nil, - 1109, nil, 679, nil, 1081, nil, nil, nil, 381, 356, - nil, nil, nil, 17, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 44, nil, nil, nil, - nil, 17, nil, nil, nil, nil, nil, 17, nil, 297, - nil, nil, nil, nil, nil, nil, 1072, nil, 1072, nil, - 1072, 15, 1072, 17, nil, 44, 44, 1192, 1193, nil, - nil, 44, 679, nil, nil, nil, 1163, 679, 679, 1072, - nil, nil, 1155, 356, 772, nil, nil, 18, 1161, nil, - 15, 15, 18, 772, 696, nil, 15, 772, nil, 932, - nil, nil, nil, nil, 932, 932, 318, nil, nil, 242, - nil, nil, 297, nil, 461, 44, 1002, 1058, 17, 242, - 242, 242, nil, 18, 345, 345, nil, nil, nil, 19, - 470, nil, 1190, 725, 19, nil, nil, nil, nil, nil, - 15, 772, 383, 383, nil, nil, 356, 17, 17, nil, - nil, 18, nil, 17, 470, nil, 242, 242, nil, 44, - 242, 394, 404, 404, 735, 19, 352, 352, nil, 435, - 448, 781, nil, 772, 1081, nil, 1220, 1081, nil, 787, - 1081, 789, 1081, nil, 15, 793, nil, nil, nil, 679, - 679, 679, nil, 19, nil, nil, nil, 17, nil, 941, - nil, 802, nil, 352, 352, 352, nil, 805, nil, 18, - nil, nil, nil, nil, 242, 242, 242, 242, 18, nil, - 18, nil, nil, 1002, nil, nil, 820, nil, nil, nil, - 764, 764, nil, nil, nil, nil, nil, nil, 1074, nil, - nil, 17, nil, nil, nil, 1137, 1139, 1141, nil, nil, - 1081, 19, 1081, nil, 1081, nil, 1081, nil, nil, nil, - 19, nil, 19, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 573, 1081, 575, nil, nil, 577, 578, nil, - nil, nil, nil, nil, nil, nil, 1111, nil, 1112, nil, - 1113, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 1196, nil, 18, 242, 442, 242, 242, 442, 242, - nil, nil, nil, nil, nil, 18, nil, 765, 765, nil, - nil, 18, 442, 242, 242, nil, nil, nil, nil, nil, - nil, nil, nil, 916, nil, nil, nil, nil, 18, nil, - nil, nil, nil, 679, nil, 19, nil, 19, nil, nil, - 19, 1209, 1211, 1213, 1215, nil, 1216, 19, nil, nil, - nil, nil, nil, 19, 19, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 19, nil, nil, nil, 242, nil, 670, nil, nil, nil, - nil, 242, 242, nil, nil, 1232, 1233, 1234, 1235, nil, - 242, nil, nil, nil, 1183, nil, 1185, 1237, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 18, nil, - nil, nil, 18, nil, nil, nil, 345, 18, nil, nil, - nil, nil, 1204, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 345, nil, 716, 764, nil, - nil, nil, nil, 20, nil, nil, 764, 18, 20, nil, - 19, nil, nil, nil, 19, 764, 764, nil, 352, 19, - nil, 242, 18, 18, 1225, nil, 1226, nil, 1227, nil, - nil, nil, nil, nil, nil, nil, nil, 352, nil, 20, - 353, 353, 242, nil, nil, nil, nil, 1236, nil, 19, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 19, 19, nil, 20, nil, nil, - 796, nil, 381, nil, 799, nil, nil, 353, 353, 353, - 1029, nil, nil, nil, nil, 765, nil, nil, nil, nil, - nil, nil, nil, 765, nil, 1040, nil, nil, nil, nil, - nil, nil, 765, 765, nil, nil, 242, nil, nil, nil, - nil, 796, nil, nil, 381, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 20, nil, 448, nil, nil, - nil, nil, nil, nil, 20, nil, 20, 1070, nil, nil, - nil, nil, nil, nil, nil, 242, nil, nil, nil, 1085, - nil, nil, nil, nil, nil, 242, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 866, nil, nil, nil, nil, nil, 764, nil, 764, - 796, 381, 764, 764, nil, nil, nil, nil, nil, 764, - nil, nil, nil, nil, 893, 764, 764, nil, nil, nil, - nil, nil, nil, 764, 764, nil, nil, nil, 911, nil, - 1117, 1118, 1119, nil, nil, 18, nil, nil, nil, 20, - nil, 20, nil, 345, 20, 242, 1128, nil, nil, nil, - nil, 20, 345, nil, nil, nil, nil, 20, 20, nil, - nil, nil, 764, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 18, 20, nil, 18, 19, nil, nil, - nil, nil, nil, 242, 765, 352, 765, nil, nil, 765, - 765, nil, nil, 242, 352, nil, 765, 18, nil, nil, - nil, nil, 765, 765, nil, nil, nil, nil, 796, nil, - 765, 765, nil, nil, nil, 19, nil, 976, 19, nil, - 977, nil, nil, nil, 18, nil, nil, 442, 242, nil, - nil, 18, nil, nil, nil, nil, nil, 442, 442, 19, - nil, nil, 442, 442, nil, nil, nil, nil, nil, 765, - nil, nil, nil, nil, 20, nil, nil, nil, 20, nil, - nil, nil, 353, 20, 766, 766, 19, nil, nil, 19, - nil, nil, nil, 19, nil, nil, nil, nil, nil, 19, - 19, 353, nil, nil, 19, 19, 21, 1005, nil, 764, - nil, 21, nil, 20, nil, nil, nil, nil, 764, nil, - nil, nil, 764, nil, nil, nil, nil, nil, 20, 20, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 21, 347, 347, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 764, nil, nil, nil, - 21, nil, nil, nil, nil, nil, nil, nil, 345, nil, - 396, 405, 405, nil, nil, nil, 767, 767, nil, 345, - nil, nil, nil, 242, nil, nil, 765, nil, 764, nil, - nil, nil, nil, nil, nil, 765, nil, nil, nil, 765, - nil, nil, nil, nil, nil, nil, 18, nil, nil, nil, - 352, 18, 242, nil, nil, nil, nil, nil, 21, nil, - 1091, 352, 18, nil, nil, nil, nil, 21, nil, 21, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 381, - 442, nil, nil, 765, nil, nil, nil, nil, 19, nil, - nil, nil, nil, 19, nil, nil, nil, 18, nil, nil, - nil, nil, nil, nil, 19, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 765, nil, nil, nil, nil, - nil, nil, 19, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 766, nil, nil, nil, nil, nil, nil, 19, - 766, nil, nil, nil, nil, nil, nil, nil, nil, 766, - 766, 20, 21, nil, 443, nil, nil, 443, nil, 353, - nil, 242, nil, nil, 21, nil, nil, nil, 353, nil, - 21, 443, nil, nil, nil, nil, nil, nil, 18, nil, - nil, nil, nil, nil, nil, nil, nil, 21, nil, 20, - 242, nil, 20, nil, nil, nil, 18, nil, nil, nil, - nil, nil, 18, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 20, nil, nil, nil, nil, 18, nil, - 19, nil, 1106, nil, nil, nil, nil, nil, nil, nil, - nil, 768, 768, nil, 767, nil, nil, nil, 19, nil, - 20, nil, 767, 20, 19, nil, nil, 20, nil, nil, - nil, 767, 767, 20, 20, nil, nil, nil, 20, 20, - 19, nil, nil, nil, 352, nil, nil, 21, nil, nil, - nil, 21, nil, 18, nil, 347, 21, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 1145, nil, nil, nil, - nil, nil, nil, nil, 347, nil, nil, nil, nil, nil, - nil, nil, 18, 18, nil, nil, 21, nil, 18, nil, - nil, 766, nil, 766, nil, 19, 766, 766, nil, nil, - nil, 21, 21, 766, nil, nil, nil, nil, 352, 766, - 766, 769, 769, nil, nil, nil, nil, 766, 766, nil, - nil, nil, nil, nil, 19, 19, nil, nil, nil, 1187, - 19, nil, 18, nil, 242, 242, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 242, nil, nil, - nil, nil, nil, nil, 353, nil, 766, nil, nil, nil, - nil, nil, nil, nil, nil, 353, nil, nil, nil, nil, - nil, 352, nil, nil, 19, nil, 18, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 20, 767, nil, 767, nil, 20, 767, 767, - nil, nil, nil, nil, nil, 767, nil, nil, 20, nil, - nil, 767, 767, nil, nil, nil, nil, nil, 19, 767, - 767, nil, nil, nil, nil, nil, 20, nil, nil, 768, - nil, nil, nil, nil, nil, nil, nil, 768, nil, nil, - nil, nil, nil, 20, nil, nil, 768, 768, 31, nil, - nil, nil, nil, 31, nil, nil, nil, nil, 767, nil, - nil, 770, 770, nil, nil, nil, nil, nil, nil, nil, - 31, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 31, 31, 31, 766, 31, nil, nil, nil, nil, nil, - nil, nil, 766, nil, 21, nil, 766, nil, nil, nil, - nil, nil, 347, nil, nil, nil, nil, nil, nil, nil, - nil, 347, 31, nil, nil, nil, nil, 31, 31, nil, - nil, 31, nil, nil, 20, nil, nil, nil, nil, 769, - nil, nil, 21, nil, nil, 21, nil, 769, nil, nil, - 766, nil, 20, nil, nil, nil, 769, 769, 20, nil, - nil, nil, nil, nil, nil, nil, 21, nil, nil, nil, - nil, nil, nil, 856, 20, nil, nil, nil, 353, nil, - 31, nil, 766, nil, nil, 31, 31, 31, 31, 31, - nil, 31, nil, 21, nil, 767, 443, nil, nil, nil, - 21, nil, nil, nil, 767, nil, 443, 443, 767, nil, - nil, 443, 443, nil, nil, nil, nil, nil, 768, nil, - 768, nil, nil, 768, 768, nil, nil, nil, nil, 20, - 768, nil, nil, nil, nil, nil, 768, 768, nil, nil, - nil, nil, 353, nil, 768, 768, nil, nil, nil, nil, - nil, nil, 767, nil, nil, nil, nil, nil, 20, 20, - nil, nil, nil, nil, 20, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 31, 31, 31, 31, 31, 31, - 31, nil, nil, 768, 767, nil, 31, nil, nil, 770, - nil, nil, 31, 31, 31, 31, nil, 770, nil, nil, - nil, nil, nil, nil, nil, 353, 770, 770, 20, 31, - nil, nil, nil, nil, nil, nil, nil, nil, 769, nil, - 769, nil, nil, 769, 769, nil, nil, 347, nil, nil, - 769, nil, nil, nil, nil, nil, 769, 769, 347, nil, - nil, nil, nil, nil, 769, 769, nil, nil, nil, nil, - nil, nil, 20, nil, nil, 31, nil, nil, nil, nil, - nil, nil, 31, 31, nil, 21, nil, nil, nil, nil, - 21, 31, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 21, nil, 769, nil, nil, nil, nil, nil, 31, - nil, nil, nil, 31, nil, nil, nil, nil, 31, 443, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 768, nil, nil, nil, nil, nil, 21, nil, nil, 768, - nil, nil, nil, 768, nil, nil, nil, nil, 31, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 31, 31, 31, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 31, nil, nil, nil, 768, 770, nil, - 770, nil, nil, 770, 770, nil, nil, nil, nil, nil, - 770, nil, nil, nil, nil, nil, 770, 770, nil, nil, - nil, nil, nil, nil, 770, 770, nil, 21, nil, 768, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 769, nil, nil, nil, nil, 21, nil, nil, nil, 769, - nil, 21, nil, 769, nil, nil, nil, 31, nil, nil, - 771, 771, nil, 770, nil, nil, nil, 21, nil, nil, - nil, 1108, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 31, 769, nil, nil, - nil, 773, 773, nil, 34, nil, 31, nil, nil, 34, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 21, nil, nil, nil, 34, nil, nil, 769, - nil, nil, nil, nil, nil, 405, 34, 34, 34, nil, - 34, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 21, 21, nil, nil, nil, nil, 21, nil, nil, - nil, nil, nil, nil, nil, nil, 31, nil, 34, nil, - nil, nil, nil, 34, 34, nil, 31, 34, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 770, nil, nil, nil, nil, nil, nil, nil, 405, 770, - nil, 21, nil, 770, 31, nil, nil, 31, nil, nil, - nil, nil, nil, nil, 31, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 31, nil, 34, nil, 31, nil, - nil, 34, 34, 34, 34, 34, nil, 34, nil, nil, - nil, nil, nil, nil, nil, 21, nil, 770, nil, nil, - nil, nil, nil, nil, nil, 31, nil, nil, 31, 31, - nil, nil, 31, nil, nil, nil, nil, nil, 31, 31, - nil, nil, nil, 31, 31, nil, nil, nil, 771, 770, - nil, nil, nil, nil, nil, nil, 771, nil, nil, nil, - nil, nil, nil, nil, nil, 771, 771, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 773, - 34, 34, 34, 34, 34, 34, 34, 773, nil, nil, - nil, nil, 34, nil, nil, nil, 773, 773, 34, 34, - 34, 34, nil, nil, nil, nil, 43, nil, nil, nil, - nil, 43, nil, nil, nil, 34, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 296, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 43, 343, 343, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 34, nil, nil, 31, nil, nil, nil, 34, 34, - 43, nil, nil, nil, nil, nil, nil, 34, nil, nil, - 392, 296, 296, nil, nil, nil, nil, 31, nil, nil, - nil, nil, 31, 31, nil, 34, nil, nil, nil, 34, - nil, nil, nil, 31, 34, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 771, nil, 771, - nil, 31, 771, 771, nil, nil, nil, nil, 43, 771, - nil, nil, nil, nil, 34, 771, 771, 43, 31, 43, - nil, nil, nil, 771, 771, nil, nil, nil, 34, 34, - 34, nil, nil, nil, nil, nil, nil, nil, 773, nil, - 773, nil, nil, 773, 773, nil, nil, nil, nil, 34, - 773, nil, nil, nil, nil, nil, 773, 773, nil, nil, - nil, nil, 771, nil, 773, 773, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 31, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 31, - nil, nil, 43, 773, nil, nil, nil, nil, nil, nil, - nil, 31, nil, 34, 43, nil, nil, 31, nil, nil, - 43, nil, nil, 31, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 43, nil, 31, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 34, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 34, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 771, - nil, nil, nil, nil, 31, nil, nil, nil, 771, nil, - nil, nil, 771, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 43, nil, nil, - nil, 43, 34, 31, 31, 343, 43, nil, nil, 31, - 773, nil, 34, nil, nil, nil, nil, nil, nil, 773, - nil, nil, nil, 773, 343, nil, 771, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 43, nil, nil, nil, - 34, nil, nil, 34, nil, nil, nil, nil, nil, nil, - 34, 43, 43, 31, nil, 31, 31, nil, 771, nil, - 34, nil, nil, nil, 34, nil, nil, 773, 31, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 34, nil, nil, 34, 34, nil, 31, 34, 773, - nil, nil, nil, nil, 34, 34, nil, nil, nil, 34, - 34, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 249, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 317, 317, 317, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 364, 365, nil, 367, 368, - nil, 370, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 317, 317, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 34, nil, nil, nil, 43, nil, nil, nil, nil, nil, - nil, nil, 343, nil, nil, nil, nil, nil, nil, nil, - nil, 343, nil, 34, nil, nil, nil, nil, 34, 34, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 34, - nil, nil, 43, nil, nil, 43, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 34, nil, nil, - nil, nil, nil, nil, nil, nil, 43, nil, nil, nil, - nil, nil, nil, nil, 34, nil, nil, nil, 317, 447, - nil, nil, 453, 317, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 43, nil, nil, 453, nil, nil, nil, - 43, nil, nil, nil, nil, nil, nil, nil, nil, 249, - nil, nil, nil, nil, nil, nil, 529, 530, 531, 532, - 533, 534, 535, 536, 537, 538, 539, 540, 541, 542, - 543, 544, 545, 546, 547, 548, 549, 550, 34, nil, - nil, nil, 551, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 34, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 317, 317, 34, nil, nil, - nil, nil, nil, 34, 317, nil, nil, nil, nil, 34, - nil, 317, nil, 317, nil, nil, 317, 317, nil, nil, - nil, nil, nil, nil, nil, 34, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 343, 604, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 343, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 34, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 43, nil, nil, nil, nil, - 43, nil, nil, nil, nil, nil, nil, nil, nil, 34, - 34, 43, nil, nil, nil, 34, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 317, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 43, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 34, - 692, 34, 34, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 34, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 317, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 723, - nil, nil, nil, 34, nil, nil, nil, nil, nil, 317, - nil, 453, 453, 453, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 43, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 43, nil, nil, nil, 365, - nil, 43, nil, nil, nil, nil, nil, nil, nil, 317, - nil, 317, nil, 317, nil, nil, nil, 43, nil, nil, - nil, 1104, nil, nil, nil, nil, nil, nil, nil, 317, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 453, - nil, nil, 816, nil, 817, nil, nil, nil, nil, nil, - 317, nil, nil, 317, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 317, 317, nil, nil, - nil, nil, 43, nil, nil, nil, nil, 317, nil, nil, - nil, nil, nil, nil, nil, 296, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 43, 43, nil, nil, nil, nil, 43, nil, nil, - 317, 453, 317, nil, nil, nil, 874, nil, nil, 317, - 317, 453, 453, nil, nil, nil, 453, 453, nil, nil, - nil, nil, nil, 317, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 317, 296, nil, - nil, 43, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 692, 723, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 43, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 317, nil, nil, - nil, nil, nil, nil, nil, nil, 317, nil, nil, 317, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 317, nil, nil, nil, - nil, nil, nil, nil, 453, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 1010, 1011, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 1033, 1034, 453, 453, - 453, 453, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 1067, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 317, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 317, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 453, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 317 ] - -racc_goto_check = [ - 72, 230, 230, 198, 46, 72, 75, 75, 36, 36, - 36, 107, 91, 91, 158, 198, 68, 13, 33, 19, - 19, 48, 75, 19, 72, 23, 12, 10, 112, 33, - 23, 73, 31, 10, 110, 110, 72, 72, 72, 17, - 17, 117, 87, 87, 139, 139, 77, 77, 28, 8, - 135, 113, 92, 11, 8, 228, 228, 228, 44, 44, - 70, 23, 28, 133, 72, 111, 24, 24, 90, 90, - 90, 82, 82, 5, 72, 72, 72, 19, 19, 19, - 19, 119, 29, 55, 55, 64, 80, 29, 187, 23, - 87, 57, 94, 231, 26, 26, 41, 41, 26, 23, - 20, 90, 90, 20, 51, 7, 22, 9, 82, 82, - 82, 117, 235, 8, 31, 177, 177, 20, 29, 69, - 79, 58, 72, 127, 56, 56, 56, 128, 129, 130, - 147, 72, 145, 72, 79, 89, 89, 200, 200, 89, - 2, 192, 151, 5, 65, 193, 29, 23, 236, 13, - 157, 157, 26, 26, 26, 26, 23, 239, 23, 152, - 55, 6, 215, 215, 215, 215, 74, 74, 1, 10, - 3, 8, 95, 149, 95, 14, 161, 230, 225, 225, - 8, 16, 8, 18, 176, 21, 202, 202, 161, 25, - 146, 27, 146, 88, 88, 88, 42, 40, 36, 239, - 214, 214, 35, 35, 29, 43, 91, 178, 178, 45, - 63, 63, 63, 29, 50, 29, 72, 178, 236, 224, - 224, 52, 75, 60, 78, 83, 88, 40, 72, 94, - 84, 86, 93, 11, 72, 105, 106, 114, 198, 32, - 151, 23, 33, 23, 26, 26, 23, 116, 120, 121, - 122, 72, 123, 23, 124, 125, 126, 152, 131, 23, - 23, 26, 26, 112, 136, 73, 239, 142, 11, 143, - 150, 153, 154, 2, 87, 87, 23, 155, 6, 156, - 36, 36, 95, 95, 159, 160, 33, 162, 70, 36, - 164, 165, 168, 169, 149, 145, 170, 70, 29, 171, - 29, 22, 22, 29, 147, 22, 172, 200, 173, 180, - 29, 182, 183, 119, 192, 184, 29, 29, 188, 22, - 189, 175, 26, 192, 195, 127, 157, 196, 31, 130, - 205, 72, 91, 29, 19, 72, 206, 68, 91, 72, - 72, 90, 58, 128, 129, 33, 207, 128, 210, 90, - 193, 211, 11, 212, 225, 213, 23, 11, 72, 216, - 23, 51, 217, 33, 218, 23, 219, 117, 176, 176, - 72, 192, 220, 82, 202, 202, 55, 55, 88, 88, - 8, 223, 229, 233, 64, 72, 72, 234, nil, 64, - 95, nil, 82, nil, 33, 23, 80, 187, 31, 5, - nil, 149, 11, 11, nil, 73, 215, nil, 215, 26, - 23, 23, 230, 29, 119, nil, 13, 29, 231, 79, - 69, 79, 29, 75, nil, 117, nil, nil, nil, 235, - 26, 7, 111, 9, 35, 35, 31, nil, nil, 10, - nil, 91, 33, 65, nil, 36, 31, 91, 65, 55, - nil, 140, 29, nil, 140, nil, 17, 5, nil, 55, - nil, 146, nil, 77, 139, 88, 88, 29, 29, 230, - 57, 230, nil, nil, 88, 57, 228, 228, nil, 228, - 228, 31, 228, 63, 36, 110, nil, 55, nil, nil, - nil, 63, nil, nil, 36, 55, nil, 79, 133, 91, - 175, nil, nil, 70, nil, 175, 175, 28, 28, 146, - nil, nil, 28, 28, nil, 75, 32, nil, nil, nil, - nil, nil, nil, nil, 40, 72, 72, 231, nil, nil, - 32, nil, 55, 55, 92, nil, 91, nil, nil, 200, - 200, 24, nil, nil, 13, 117, 128, 128, 40, 200, - nil, nil, 20, 56, nil, 200, nil, nil, 41, 56, - 73, 157, 20, 20, 36, 68, 94, 20, 20, nil, - nil, nil, 91, nil, 68, nil, nil, 177, 72, 79, - 79, 89, 91, nil, 79, 79, 72, nil, 75, 225, - nil, 32, nil, nil, 239, 72, nil, nil, 75, 200, - nil, nil, 36, 23, 90, nil, 231, nil, nil, nil, - 91, 95, 36, nil, nil, nil, 72, 44, 91, 72, - 82, 32, nil, nil, 146, nil, 75, 146, 40, 82, - 32, nil, 75, 11, nil, nil, 11, 135, 139, 139, - 72, 23, nil, 10, 23, 90, 113, 36, 56, 94, - nil, nil, nil, 32, 191, 91, nil, nil, 117, nil, - 29, 191, nil, 75, nil, 23, 110, 72, 198, nil, - nil, 75, nil, nil, 72, nil, nil, 117, nil, nil, - nil, nil, nil, nil, 228, 228, 228, 228, nil, nil, - nil, nil, 23, nil, nil, 23, 17, 146, 29, 23, - 28, 29, nil, 77, nil, 23, 23, nil, nil, nil, - 23, 23, nil, 32, 90, 12, 8, 87, 32, 32, - nil, nil, 29, 8, 40, nil, 140, 107, nil, nil, - 112, nil, 174, 174, nil, nil, nil, 110, nil, 110, - 230, nil, 200, 72, 139, nil, nil, 128, 128, 29, - nil, 72, 29, nil, 22, 20, 29, nil, 46, nil, - 72, 72, 29, 29, 22, 22, nil, 29, 29, 22, - 22, 158, 79, nil, nil, 48, 75, nil, 228, nil, - 68, nil, nil, nil, nil, nil, 88, nil, 230, nil, - 91, 68, nil, 91, 10, 19, nil, nil, nil, nil, - nil, 72, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 72, nil, nil, nil, 79, 79, 79, 79, - nil, nil, 90, nil, nil, nil, nil, nil, nil, nil, - 32, 32, 32, nil, 191, 82, nil, nil, nil, 72, - nil, 26, nil, 191, 72, nil, 82, 191, nil, nil, - 132, nil, nil, 88, nil, 72, 11, nil, nil, nil, - nil, nil, nil, nil, 23, 10, nil, nil, nil, 23, - 26, nil, 11, nil, nil, nil, nil, nil, nil, nil, - 23, nil, nil, nil, nil, nil, 140, 66, nil, 140, - 72, 191, 140, nil, 140, 10, nil, nil, 23, nil, - nil, nil, nil, 230, 19, 40, 230, 11, nil, nil, - nil, nil, nil, 87, nil, 23, nil, 87, nil, 40, - 40, 29, 72, 191, 72, nil, 29, 72, 72, nil, - nil, nil, 79, 19, 72, nil, nil, 29, nil, nil, - 72, 72, nil, nil, nil, nil, nil, nil, 72, 72, - 174, nil, nil, nil, nil, 29, nil, 22, 174, nil, - nil, nil, 140, 66, 140, nil, 140, nil, 140, 198, - 31, 72, 29, nil, nil, nil, 230, nil, nil, 26, - 40, nil, nil, nil, 32, 140, 66, 72, 11, 72, - nil, nil, nil, nil, nil, 72, 23, nil, nil, 144, - nil, 144, nil, nil, nil, nil, 11, nil, 26, nil, - 40, 72, nil, 132, 23, 72, 132, nil, 132, 40, - 23, 55, nil, nil, nil, 40, nil, nil, 11, nil, - nil, nil, 117, nil, nil, nil, 23, nil, nil, nil, - 23, nil, 40, nil, 232, nil, nil, nil, 85, 82, - nil, nil, nil, 29, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 72, nil, nil, nil, - nil, 29, nil, nil, nil, nil, nil, 29, nil, 72, - nil, nil, nil, nil, nil, nil, 132, nil, 132, nil, - 132, 23, 132, 29, nil, 72, 72, 19, 19, nil, - nil, 72, 40, nil, nil, nil, 33, 40, 40, 132, - nil, nil, 11, 82, 72, nil, nil, 30, 11, nil, - 23, 23, 30, 72, 66, nil, 23, 72, nil, 174, - nil, nil, nil, nil, 174, 174, 36, nil, nil, 30, - nil, nil, 72, nil, 91, 72, 40, 174, 29, 30, - 30, 30, nil, 30, 30, 30, nil, nil, nil, 34, - 75, nil, 11, 66, 34, nil, nil, nil, nil, nil, - 23, 72, 26, 26, nil, nil, 82, 29, 29, nil, - nil, 30, nil, 29, 75, nil, 30, 30, nil, 72, - 30, 30, 30, 30, 174, 34, 34, 34, nil, 85, - 85, 66, nil, 72, 232, nil, 11, 232, nil, 66, - 232, 66, 232, nil, 23, 66, nil, nil, nil, 40, - 40, 40, nil, 34, nil, nil, nil, 29, nil, 40, - nil, 66, nil, 34, 34, 34, nil, 66, nil, 30, - nil, nil, nil, nil, 30, 30, 30, 30, 30, nil, - 30, nil, nil, 40, nil, nil, 66, nil, nil, nil, - 97, 97, nil, nil, nil, nil, nil, nil, 144, nil, - nil, 29, nil, nil, nil, 141, 141, 141, nil, nil, - 232, 34, 232, nil, 232, nil, 232, nil, nil, nil, - 34, nil, 34, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 85, 232, 85, nil, nil, 85, 85, nil, - nil, nil, nil, nil, nil, nil, 144, nil, 144, nil, - 144, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 40, nil, 30, 30, 30, 30, 30, 30, 30, - nil, nil, nil, nil, nil, 30, nil, 98, 98, nil, - nil, 30, 30, 30, 30, nil, nil, nil, nil, nil, - nil, nil, nil, 66, nil, nil, nil, nil, 30, nil, - nil, nil, nil, 40, nil, 34, nil, 34, nil, nil, - 34, 141, 141, 141, 141, nil, 141, 34, nil, nil, - nil, nil, nil, 34, 34, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 34, nil, nil, nil, 30, nil, 85, nil, nil, nil, - nil, 30, 30, nil, nil, 141, 141, 141, 141, nil, - 30, nil, nil, nil, 144, nil, 144, 141, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 30, nil, - nil, nil, 30, nil, nil, nil, 30, 30, nil, nil, - nil, nil, 144, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 30, nil, 85, 97, nil, - nil, nil, nil, 38, nil, nil, 97, 30, 38, nil, - 34, nil, nil, nil, 34, 97, 97, nil, 34, 34, - nil, 30, 30, 30, 144, nil, 144, nil, 144, nil, - nil, nil, nil, nil, nil, nil, nil, 34, nil, 38, - 38, 38, 30, nil, nil, nil, nil, 144, nil, 34, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 34, 34, nil, 38, nil, nil, - 85, nil, 85, nil, 85, nil, nil, 38, 38, 38, - 66, nil, nil, nil, nil, 98, nil, nil, nil, nil, - nil, nil, nil, 98, nil, 66, nil, nil, nil, nil, - nil, nil, 98, 98, nil, nil, 30, nil, nil, nil, - nil, 85, nil, nil, 85, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 38, nil, 85, nil, nil, - nil, nil, nil, nil, 38, nil, 38, 66, nil, nil, - nil, nil, nil, nil, nil, 30, nil, nil, nil, 66, - nil, nil, nil, nil, nil, 30, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 85, nil, nil, nil, nil, nil, 97, nil, 97, - 85, 85, 97, 97, nil, nil, nil, nil, nil, 97, - nil, nil, nil, nil, 85, 97, 97, nil, nil, nil, - nil, nil, nil, 97, 97, nil, nil, nil, 85, nil, - 66, 66, 66, nil, nil, 30, nil, nil, nil, 38, - nil, 38, nil, 30, 38, 30, 66, nil, nil, nil, - nil, 38, 30, nil, nil, nil, nil, 38, 38, nil, - nil, nil, 97, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 30, 38, nil, 30, 34, nil, nil, - nil, nil, nil, 30, 98, 34, 98, nil, nil, 98, - 98, nil, nil, 30, 34, nil, 98, 30, nil, nil, - nil, nil, 98, 98, nil, nil, nil, nil, 85, nil, - 98, 98, nil, nil, nil, 34, nil, 85, 34, nil, - 85, nil, nil, nil, 30, nil, nil, 30, 30, nil, - nil, 30, nil, nil, nil, nil, nil, 30, 30, 34, - nil, nil, 30, 30, nil, nil, nil, nil, nil, 98, - nil, nil, nil, nil, 38, nil, nil, nil, 38, nil, - nil, nil, 38, 38, 99, 99, 34, nil, nil, 34, - nil, nil, nil, 34, nil, nil, nil, nil, nil, 34, - 34, 38, nil, nil, 34, 34, 39, 85, nil, 97, - nil, 39, nil, 38, nil, nil, nil, nil, 97, nil, - nil, nil, 97, nil, nil, nil, nil, nil, 38, 38, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 39, 39, 39, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 97, nil, nil, nil, - 39, nil, nil, nil, nil, nil, nil, nil, 30, nil, - 39, 39, 39, nil, nil, nil, 100, 100, nil, 30, - nil, nil, nil, 30, nil, nil, 98, nil, 97, nil, - nil, nil, nil, nil, nil, 98, nil, nil, nil, 98, - nil, nil, nil, nil, nil, nil, 30, nil, nil, nil, - 34, 30, 30, nil, nil, nil, nil, nil, 39, nil, - 85, 34, 30, nil, nil, nil, nil, 39, nil, 39, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 85, - 30, nil, nil, 98, nil, nil, nil, nil, 34, nil, - nil, nil, nil, 34, nil, nil, nil, 30, nil, nil, - nil, nil, nil, nil, 34, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 98, nil, nil, nil, nil, - nil, nil, 34, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 99, nil, nil, nil, nil, nil, nil, 34, - 99, nil, nil, nil, nil, nil, nil, nil, nil, 99, - 99, 38, 39, nil, 39, nil, nil, 39, nil, 38, - nil, 30, nil, nil, 39, nil, nil, nil, 38, nil, - 39, 39, nil, nil, nil, nil, nil, nil, 30, nil, - nil, nil, nil, nil, nil, nil, nil, 39, nil, 38, - 30, nil, 38, nil, nil, nil, 30, nil, nil, nil, - nil, nil, 30, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 38, nil, nil, nil, nil, 30, nil, - 34, nil, 30, nil, nil, nil, nil, nil, nil, nil, - nil, 101, 101, nil, 100, nil, nil, nil, 34, nil, - 38, nil, 100, 38, 34, nil, nil, 38, nil, nil, - nil, 100, 100, 38, 38, nil, nil, nil, 38, 38, - 34, nil, nil, nil, 34, nil, nil, 39, nil, nil, - nil, 39, nil, 30, nil, 39, 39, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 30, nil, nil, nil, - nil, nil, nil, nil, 39, nil, nil, nil, nil, nil, - nil, nil, 30, 30, nil, nil, 39, nil, 30, nil, - nil, 99, nil, 99, nil, 34, 99, 99, nil, nil, - nil, 39, 39, 99, nil, nil, nil, nil, 34, 99, - 99, 102, 102, nil, nil, nil, nil, 99, 99, nil, - nil, nil, nil, nil, 34, 34, nil, nil, nil, 30, - 34, nil, 30, nil, 30, 30, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 30, nil, nil, - nil, nil, nil, nil, 38, nil, 99, nil, nil, nil, - nil, nil, nil, nil, nil, 38, nil, nil, nil, nil, - nil, 34, nil, nil, 34, nil, 30, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 38, 100, nil, 100, nil, 38, 100, 100, - nil, nil, nil, nil, nil, 100, nil, nil, 38, nil, - nil, 100, 100, nil, nil, nil, nil, nil, 34, 100, - 100, nil, nil, nil, nil, nil, 38, nil, nil, 101, - nil, nil, nil, nil, nil, nil, nil, 101, nil, nil, - nil, nil, nil, 38, nil, nil, 101, 101, 59, nil, - nil, nil, nil, 59, nil, nil, nil, nil, 100, nil, - nil, 103, 103, nil, nil, nil, nil, nil, nil, nil, - 59, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 59, 59, 59, 99, 59, nil, nil, nil, nil, nil, - nil, nil, 99, nil, 39, nil, 99, nil, nil, nil, - nil, nil, 39, nil, nil, nil, nil, nil, nil, nil, - nil, 39, 59, nil, nil, nil, nil, 59, 59, nil, - nil, 59, nil, nil, 38, nil, nil, nil, nil, 102, - nil, nil, 39, nil, nil, 39, nil, 102, nil, nil, - 99, nil, 38, nil, nil, nil, 102, 102, 38, nil, - nil, nil, nil, nil, nil, nil, 39, nil, nil, nil, - nil, nil, nil, 39, 38, nil, nil, nil, 38, nil, - 59, nil, 99, nil, nil, 59, 59, 59, 59, 59, - nil, 59, nil, 39, nil, 100, 39, nil, nil, nil, - 39, nil, nil, nil, 100, nil, 39, 39, 100, nil, - nil, 39, 39, nil, nil, nil, nil, nil, 101, nil, - 101, nil, nil, 101, 101, nil, nil, nil, nil, 38, - 101, nil, nil, nil, nil, nil, 101, 101, nil, nil, - nil, nil, 38, nil, 101, 101, nil, nil, nil, nil, - nil, nil, 100, nil, nil, nil, nil, nil, 38, 38, - nil, nil, nil, nil, 38, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 59, 59, 59, 59, 59, 59, - 59, nil, nil, 101, 100, nil, 59, nil, nil, 103, - nil, nil, 59, 59, 59, 59, nil, 103, nil, nil, - nil, nil, nil, nil, nil, 38, 103, 103, 38, 59, - nil, nil, nil, nil, nil, nil, nil, nil, 102, nil, - 102, nil, nil, 102, 102, nil, nil, 39, nil, nil, - 102, nil, nil, nil, nil, nil, 102, 102, 39, nil, - nil, nil, nil, nil, 102, 102, nil, nil, nil, nil, - nil, nil, 38, nil, nil, 59, nil, nil, nil, nil, - nil, nil, 59, 59, nil, 39, nil, nil, nil, nil, - 39, 59, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 39, nil, 102, nil, nil, nil, nil, nil, 59, - nil, nil, nil, 59, nil, nil, nil, nil, 59, 39, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 101, nil, nil, nil, nil, nil, 39, nil, nil, 101, - nil, nil, nil, 101, nil, nil, nil, nil, 59, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 59, 59, 59, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 59, nil, nil, nil, 101, 103, nil, - 103, nil, nil, 103, 103, nil, nil, nil, nil, nil, - 103, nil, nil, nil, nil, nil, 103, 103, nil, nil, - nil, nil, nil, nil, 103, 103, nil, 39, nil, 101, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 102, nil, nil, nil, nil, 39, nil, nil, nil, 102, - nil, 39, nil, 102, nil, nil, nil, 59, nil, nil, - 104, 104, nil, 103, nil, nil, nil, 39, nil, nil, - nil, 39, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 59, 102, nil, nil, - nil, 109, 109, nil, 62, nil, 59, nil, nil, 62, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 39, nil, nil, nil, 62, nil, nil, 102, - nil, nil, nil, nil, nil, 39, 62, 62, 62, nil, - 62, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 39, 39, nil, nil, nil, nil, 39, nil, nil, - nil, nil, nil, nil, nil, nil, 59, nil, 62, nil, - nil, nil, nil, 62, 62, nil, 59, 62, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 103, nil, nil, nil, nil, nil, nil, nil, 39, 103, - nil, 39, nil, 103, 59, nil, nil, 59, nil, nil, - nil, nil, nil, nil, 59, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 59, nil, 62, nil, 59, nil, - nil, 62, 62, 62, 62, 62, nil, 62, nil, nil, - nil, nil, nil, nil, nil, 39, nil, 103, nil, nil, - nil, nil, nil, nil, nil, 59, nil, nil, 59, 59, - nil, nil, 59, nil, nil, nil, nil, nil, 59, 59, - nil, nil, nil, 59, 59, nil, nil, nil, 104, 103, - nil, nil, nil, nil, nil, nil, 104, nil, nil, nil, - nil, nil, nil, nil, nil, 104, 104, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 109, - 62, 62, 62, 62, 62, 62, 62, 109, nil, nil, - nil, nil, 62, nil, nil, nil, 109, 109, 62, 62, - 62, 62, nil, nil, nil, nil, 71, nil, nil, nil, - nil, 71, nil, nil, nil, 62, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 71, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 71, 71, 71, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 62, nil, nil, 59, nil, nil, nil, 62, 62, - 71, nil, nil, nil, nil, nil, nil, 62, nil, nil, - 71, 71, 71, nil, nil, nil, nil, 59, nil, nil, - nil, nil, 59, 59, nil, 62, nil, nil, nil, 62, - nil, nil, nil, 59, 62, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 104, nil, 104, - nil, 59, 104, 104, nil, nil, nil, nil, 71, 104, - nil, nil, nil, nil, 62, 104, 104, 71, 59, 71, - nil, nil, nil, 104, 104, nil, nil, nil, 62, 62, - 62, nil, nil, nil, nil, nil, nil, nil, 109, nil, - 109, nil, nil, 109, 109, nil, nil, nil, nil, 62, - 109, nil, nil, nil, nil, nil, 109, 109, nil, nil, - nil, nil, 104, nil, 109, 109, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 59, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 59, - nil, nil, 71, 109, nil, nil, nil, nil, nil, nil, - nil, 59, nil, 62, 71, nil, nil, 59, nil, nil, - 71, nil, nil, 59, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 71, nil, 59, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 62, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 62, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 104, - nil, nil, nil, nil, 59, nil, nil, nil, 104, nil, - nil, nil, 104, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 71, nil, nil, - nil, 71, 62, 59, 59, 71, 71, nil, nil, 59, - 109, nil, 62, nil, nil, nil, nil, nil, nil, 109, - nil, nil, nil, 109, 71, nil, 104, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 71, nil, nil, nil, - 62, nil, nil, 62, nil, nil, nil, nil, nil, nil, - 62, 71, 71, 59, nil, 59, 59, nil, 104, nil, - 62, nil, nil, nil, 62, nil, nil, 109, 59, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 62, nil, nil, 62, 62, nil, 59, 62, 109, - nil, nil, nil, nil, 62, 62, nil, nil, nil, 62, - 62, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 37, 37, 37, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 37, 37, nil, 37, 37, - nil, 37, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 37, 37, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 62, nil, nil, nil, 71, nil, nil, nil, nil, nil, - nil, nil, 71, nil, nil, nil, nil, nil, nil, nil, - nil, 71, nil, 62, nil, nil, nil, nil, 62, 62, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 62, - nil, nil, 71, nil, nil, 71, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 62, nil, nil, - nil, nil, nil, nil, nil, nil, 71, nil, nil, nil, - nil, nil, nil, nil, 62, nil, nil, nil, 37, 37, - nil, nil, 37, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 71, nil, nil, 37, nil, nil, nil, - 71, nil, nil, nil, nil, nil, nil, nil, nil, 37, - nil, nil, nil, nil, nil, nil, 37, 37, 37, 37, - 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, - 37, 37, 37, 37, 37, 37, 37, 37, 62, nil, - nil, nil, 37, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 62, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 37, 37, 62, nil, nil, - nil, nil, nil, 62, 37, nil, nil, nil, nil, 62, - nil, 37, nil, 37, nil, nil, 37, 37, nil, nil, - nil, nil, nil, nil, nil, 62, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 71, 37, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 71, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 62, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 71, nil, nil, nil, nil, - 71, nil, nil, nil, nil, nil, nil, nil, nil, 62, - 62, 71, nil, nil, nil, 62, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 37, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 71, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 62, - 37, 62, 62, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 62, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 37, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 37, - nil, nil, nil, 62, nil, nil, nil, nil, nil, 37, - nil, 37, 37, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 71, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 71, nil, nil, nil, 37, - nil, 71, nil, nil, nil, nil, nil, nil, nil, 37, - nil, 37, nil, 37, nil, nil, nil, 71, nil, nil, - nil, 71, nil, nil, nil, nil, nil, nil, nil, 37, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 37, - nil, nil, 37, nil, 37, nil, nil, nil, nil, nil, - 37, nil, nil, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 37, 37, nil, nil, - nil, nil, 71, nil, nil, nil, nil, 37, nil, nil, - nil, nil, nil, nil, nil, 71, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 71, 71, nil, nil, nil, nil, 71, nil, nil, - 37, 37, 37, nil, nil, nil, 37, nil, nil, 37, - 37, 37, 37, nil, nil, nil, 37, 37, nil, nil, - nil, nil, nil, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 37, 71, nil, - nil, 71, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 37, 37, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 71, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 37, nil, nil, - nil, nil, nil, nil, nil, nil, 37, nil, nil, 37, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 37, nil, nil, nil, - nil, nil, nil, nil, 37, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 37, 37, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 37, 37, 37, 37, - 37, 37, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 37, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 37, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 37, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 37, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 37 ] - -racc_goto_pointer = [ - nil, 168, 138, 170, nil, 68, 154, 100, 47, 98, - -203, 15, -446, -676, -715, nil, -399, 29, 172, -52, - -120, 109, 82, 23, -153, -30, 23, 55, -175, 80, - 1115, -192, -215, 0, 1157, 183, -26, 3569, 1481, 1844, - 174, -431, -59, -51, -15, -413, -22, nil, -5, nil, - 188, 75, -331, nil, nil, -142, 93, -214, -444, 2376, - -335, nil, 2892, 176, 47, 106, 648, nil, -23, 79, - -300, 3134, -2, -371, 89, -4, nil, 36, -207, -103, - 38, nil, 32, 174, -141, 980, 164, 23, 159, -241, - 34, -19, -254, -323, -228, -398, nil, 733, 820, 1297, - 1399, 1614, 1714, 1864, 2323, 209, 168, -58, nil, 2364, - -350, -758, -362, -574, 161, nil, -159, 36, nil, 61, - 183, -124, 184, -354, -385, -593, -152, -790, -367, -366, - -785, -655, -122, -634, nil, -443, -708, nil, nil, -433, - -246, 201, -807, -703, 296, -840, -511, -661, nil, -678, - -829, -957, -940, -138, -578, 192, -364, -83, -13, -716, - -716, -378, -13, nil, -20, -20, nil, nil, -491, -799, - -693, -921, -527, -840, 205, -424, -561, -412, -722, nil, - -616, nil, -615, -432, -429, nil, nil, -658, -428, -427, - nil, -282, -802, -779, nil, -621, -618, nil, -87, nil, - -390, nil, -576, nil, nil, -445, -358, -548, nil, nil, - 260, 258, 259, 260, -214, -250, 263, 265, 266, -283, - -278, nil, nil, -259, -133, -55, nil, nil, -426, -319, - -232, -608, 72, -314, -745, -591, -990, nil, nil, -415 ] - -racc_goto_default = [ - nil, nil, nil, nil, 5, nil, 6, 391, 334, nil, - nil, 472, nil, 984, nil, 331, 332, nil, nil, nil, - 13, 14, 22, 247, nil, nil, 16, nil, 441, 248, - 363, nil, nil, 637, 251, nil, 27, 25, 252, 246, - 517, nil, nil, nil, nil, nil, nil, 386, 143, 26, - nil, nil, nil, 28, 29, 812, nil, nil, nil, 351, - nil, 30, 348, 455, 37, nil, nil, 39, 42, 41, - nil, 243, 244, 403, nil, 463, 142, 87, nil, 446, - 103, 51, 54, 283, nil, 323, nil, 891, 456, nil, - 457, 468, 480, 686, 569, 321, 307, 55, 56, 57, - 58, 59, 60, 61, 62, 63, nil, 308, 69, 70, - nil, nil, nil, nil, nil, 77, nil, 619, 78, 230, - nil, nil, nil, nil, nil, nil, nil, 711, 492, nil, - 712, 713, 478, 474, 475, nil, 1179, 707, 1071, nil, - 479, nil, nil, nil, 481, nil, 483, nil, 971, nil, - nil, nil, 490, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 467, nil, nil, 791, 783, nil, nil, - nil, nil, nil, nil, 1051, nil, 736, 937, 738, 739, - 743, 740, 741, nil, nil, 742, 744, nil, nil, nil, - 936, 938, nil, 748, 750, 751, 752, 753, nil, 757, - 501, 758, 759, 760, 761, nil, nil, nil, 86, 88, - 89, nil, nil, nil, nil, 647, nil, nil, nil, nil, - nil, 99, 100, nil, 231, 901, 234, 477, nil, 482, - 909, 495, 497, 498, 1082, 502, 1083, 505, 508, 326 ] - -racc_reduce_table = [ - 0, 0, :racc_error, - 0, 150, :_reduce_1, - 2, 148, :_reduce_2, - 2, 149, :_reduce_3, - 0, 151, :_reduce_4, - 1, 151, :_reduce_5, - 3, 151, :_reduce_6, - 2, 151, :_reduce_7, - 1, 153, :_reduce_none, - 2, 153, :_reduce_9, - 3, 156, :_reduce_10, - 4, 157, :_reduce_11, - 2, 158, :_reduce_12, - 0, 162, :_reduce_13, - 1, 162, :_reduce_14, - 3, 162, :_reduce_15, - 2, 162, :_reduce_16, - 1, 163, :_reduce_none, - 2, 163, :_reduce_18, - 0, 174, :_reduce_19, - 4, 155, :_reduce_20, - 3, 155, :_reduce_21, - 3, 155, :_reduce_22, - 3, 155, :_reduce_23, - 2, 155, :_reduce_24, - 3, 155, :_reduce_25, - 3, 155, :_reduce_26, - 3, 155, :_reduce_27, - 3, 155, :_reduce_28, - 3, 155, :_reduce_29, - 4, 155, :_reduce_30, - 1, 155, :_reduce_none, - 3, 155, :_reduce_32, - 3, 155, :_reduce_33, - 5, 155, :_reduce_34, - 3, 155, :_reduce_35, - 1, 155, :_reduce_none, - 3, 167, :_reduce_37, - 3, 167, :_reduce_38, - 6, 167, :_reduce_39, - 5, 167, :_reduce_40, - 5, 167, :_reduce_41, - 5, 167, :_reduce_42, - 5, 167, :_reduce_43, - 4, 167, :_reduce_44, - 6, 167, :_reduce_45, - 4, 167, :_reduce_46, - 6, 167, :_reduce_47, - 3, 167, :_reduce_48, - 1, 175, :_reduce_none, - 3, 175, :_reduce_50, - 1, 175, :_reduce_none, - 1, 173, :_reduce_none, - 3, 173, :_reduce_53, - 3, 173, :_reduce_54, - 3, 173, :_reduce_55, - 2, 173, :_reduce_56, - 0, 189, :_reduce_57, - 4, 173, :_reduce_58, - 0, 190, :_reduce_59, - 4, 173, :_reduce_60, - 1, 173, :_reduce_none, - 1, 166, :_reduce_none, - 0, 194, :_reduce_63, - 3, 191, :_reduce_64, - 1, 193, :_reduce_65, - 2, 181, :_reduce_66, - 0, 199, :_reduce_67, - 5, 185, :_reduce_68, - 1, 169, :_reduce_none, - 1, 169, :_reduce_none, - 1, 200, :_reduce_none, - 4, 200, :_reduce_72, - 0, 207, :_reduce_73, - 4, 204, :_reduce_74, - 1, 206, :_reduce_none, - 2, 183, :_reduce_76, - 3, 183, :_reduce_77, - 4, 183, :_reduce_78, - 5, 183, :_reduce_79, - 4, 183, :_reduce_80, - 5, 183, :_reduce_81, - 2, 183, :_reduce_82, - 2, 183, :_reduce_83, - 2, 183, :_reduce_84, - 2, 183, :_reduce_85, - 2, 183, :_reduce_86, - 1, 168, :_reduce_87, - 3, 168, :_reduce_88, - 1, 212, :_reduce_89, - 3, 212, :_reduce_90, - 1, 211, :_reduce_none, - 2, 211, :_reduce_92, - 3, 211, :_reduce_93, - 5, 211, :_reduce_94, - 2, 211, :_reduce_95, - 4, 211, :_reduce_96, - 2, 211, :_reduce_97, - 4, 211, :_reduce_98, - 1, 211, :_reduce_99, - 3, 211, :_reduce_100, - 1, 215, :_reduce_none, - 3, 215, :_reduce_102, - 2, 214, :_reduce_103, - 3, 214, :_reduce_104, - 1, 217, :_reduce_105, - 3, 217, :_reduce_106, - 1, 216, :_reduce_107, - 1, 216, :_reduce_108, - 4, 216, :_reduce_109, - 3, 216, :_reduce_110, - 3, 216, :_reduce_111, - 3, 216, :_reduce_112, - 3, 216, :_reduce_113, - 2, 216, :_reduce_114, - 1, 216, :_reduce_115, - 1, 170, :_reduce_116, - 1, 170, :_reduce_117, - 4, 170, :_reduce_118, - 3, 170, :_reduce_119, - 3, 170, :_reduce_120, - 3, 170, :_reduce_121, - 3, 170, :_reduce_122, - 2, 170, :_reduce_123, - 1, 170, :_reduce_124, - 1, 220, :_reduce_125, - 1, 220, :_reduce_none, - 2, 221, :_reduce_127, - 1, 221, :_reduce_128, - 3, 221, :_reduce_129, - 1, 195, :_reduce_none, - 1, 195, :_reduce_none, - 1, 195, :_reduce_none, - 1, 195, :_reduce_none, - 1, 195, :_reduce_none, - 1, 164, :_reduce_135, - 1, 164, :_reduce_none, - 1, 165, :_reduce_137, - 0, 225, :_reduce_138, - 4, 165, :_reduce_139, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 3, 184, :_reduce_211, - 3, 184, :_reduce_212, - 6, 184, :_reduce_213, - 5, 184, :_reduce_214, - 5, 184, :_reduce_215, - 5, 184, :_reduce_216, - 5, 184, :_reduce_217, - 4, 184, :_reduce_218, - 3, 184, :_reduce_219, - 3, 184, :_reduce_220, - 3, 184, :_reduce_221, - 2, 184, :_reduce_222, - 2, 184, :_reduce_223, - 2, 184, :_reduce_224, - 2, 184, :_reduce_225, - 3, 184, :_reduce_226, - 3, 184, :_reduce_227, - 3, 184, :_reduce_228, - 3, 184, :_reduce_229, - 3, 184, :_reduce_230, - 3, 184, :_reduce_231, - 4, 184, :_reduce_232, - 2, 184, :_reduce_233, - 2, 184, :_reduce_234, - 3, 184, :_reduce_235, - 3, 184, :_reduce_236, - 3, 184, :_reduce_237, - 3, 184, :_reduce_238, - 1, 184, :_reduce_none, - 3, 184, :_reduce_240, - 3, 184, :_reduce_241, - 3, 184, :_reduce_242, - 3, 184, :_reduce_243, - 3, 184, :_reduce_244, - 2, 184, :_reduce_245, - 2, 184, :_reduce_246, - 3, 184, :_reduce_247, - 3, 184, :_reduce_248, - 3, 184, :_reduce_249, - 3, 184, :_reduce_250, - 0, 231, :_reduce_251, - 4, 184, :_reduce_252, - 6, 184, :_reduce_253, - 4, 184, :_reduce_254, - 6, 184, :_reduce_255, - 4, 184, :_reduce_256, - 6, 184, :_reduce_257, - 1, 184, :_reduce_none, - 1, 230, :_reduce_none, - 1, 230, :_reduce_none, - 1, 230, :_reduce_none, - 1, 230, :_reduce_none, - 3, 228, :_reduce_263, - 3, 228, :_reduce_264, - 1, 232, :_reduce_none, - 1, 233, :_reduce_none, - 2, 233, :_reduce_none, - 4, 233, :_reduce_268, - 2, 233, :_reduce_269, - 1, 226, :_reduce_none, - 3, 226, :_reduce_271, - 3, 238, :_reduce_272, - 5, 238, :_reduce_273, - 3, 238, :_reduce_274, - 0, 240, :_reduce_275, - 1, 240, :_reduce_none, - 0, 178, :_reduce_277, - 1, 178, :_reduce_none, - 2, 178, :_reduce_none, - 4, 178, :_reduce_280, - 2, 178, :_reduce_281, - 1, 210, :_reduce_282, - 2, 210, :_reduce_283, - 2, 210, :_reduce_284, - 4, 210, :_reduce_285, - 1, 210, :_reduce_286, - 0, 243, :_reduce_287, - 2, 203, :_reduce_288, - 2, 242, :_reduce_289, - 1, 242, :_reduce_290, - 2, 241, :_reduce_291, - 0, 241, :_reduce_292, - 1, 235, :_reduce_293, - 2, 235, :_reduce_294, - 3, 235, :_reduce_295, - 4, 235, :_reduce_296, - 1, 172, :_reduce_297, - 1, 172, :_reduce_none, - 3, 171, :_reduce_299, - 4, 171, :_reduce_300, - 2, 171, :_reduce_301, - 1, 229, :_reduce_none, - 1, 229, :_reduce_none, - 1, 229, :_reduce_none, - 1, 229, :_reduce_none, - 1, 229, :_reduce_none, - 1, 229, :_reduce_none, - 1, 229, :_reduce_none, - 1, 229, :_reduce_none, - 1, 229, :_reduce_none, - 1, 229, :_reduce_none, - 1, 229, :_reduce_312, - 0, 267, :_reduce_313, - 4, 229, :_reduce_314, - 0, 268, :_reduce_315, - 4, 229, :_reduce_316, - 0, 269, :_reduce_317, - 4, 229, :_reduce_318, - 3, 229, :_reduce_319, - 3, 229, :_reduce_320, - 2, 229, :_reduce_321, - 3, 229, :_reduce_322, - 3, 229, :_reduce_323, - 1, 229, :_reduce_324, - 4, 229, :_reduce_325, - 3, 229, :_reduce_326, - 1, 229, :_reduce_327, - 0, 270, :_reduce_328, - 6, 229, :_reduce_329, - 4, 229, :_reduce_330, - 3, 229, :_reduce_331, - 2, 229, :_reduce_332, - 1, 229, :_reduce_none, - 2, 229, :_reduce_334, - 1, 229, :_reduce_none, - 6, 229, :_reduce_336, - 6, 229, :_reduce_337, - 4, 229, :_reduce_338, - 4, 229, :_reduce_339, - 5, 229, :_reduce_340, - 4, 229, :_reduce_341, - 5, 229, :_reduce_342, - 6, 229, :_reduce_343, - 0, 271, :_reduce_344, - 6, 229, :_reduce_345, - 0, 272, :_reduce_346, - 7, 229, :_reduce_347, - 0, 273, :_reduce_348, - 5, 229, :_reduce_349, - 4, 229, :_reduce_350, - 4, 229, :_reduce_351, - 1, 229, :_reduce_352, - 1, 229, :_reduce_353, - 1, 229, :_reduce_354, - 1, 229, :_reduce_355, - 1, 177, :_reduce_none, - 1, 262, :_reduce_357, - 1, 265, :_reduce_358, - 1, 196, :_reduce_359, - 1, 209, :_reduce_360, - 1, 257, :_reduce_none, - 1, 257, :_reduce_none, - 2, 257, :_reduce_363, - 1, 192, :_reduce_none, - 1, 192, :_reduce_none, - 1, 258, :_reduce_none, - 5, 258, :_reduce_367, - 1, 160, :_reduce_none, - 2, 160, :_reduce_369, - 1, 261, :_reduce_none, - 1, 261, :_reduce_none, - 1, 274, :_reduce_372, - 3, 274, :_reduce_373, - 1, 277, :_reduce_374, - 3, 277, :_reduce_375, - 1, 276, :_reduce_none, - 3, 276, :_reduce_377, - 5, 276, :_reduce_378, - 1, 276, :_reduce_379, - 3, 276, :_reduce_380, - 2, 278, :_reduce_381, - 1, 278, :_reduce_382, - 1, 279, :_reduce_none, - 1, 279, :_reduce_none, - 0, 284, :_reduce_385, - 2, 282, :_reduce_386, - 4, 283, :_reduce_387, - 2, 283, :_reduce_388, - 2, 283, :_reduce_389, - 1, 283, :_reduce_390, - 2, 288, :_reduce_391, - 0, 288, :_reduce_392, - 1, 289, :_reduce_none, - 6, 290, :_reduce_394, - 8, 290, :_reduce_395, - 4, 290, :_reduce_396, - 6, 290, :_reduce_397, - 4, 290, :_reduce_398, - 2, 290, :_reduce_none, - 6, 290, :_reduce_400, - 2, 290, :_reduce_401, - 4, 290, :_reduce_402, - 6, 290, :_reduce_403, - 2, 290, :_reduce_404, - 4, 290, :_reduce_405, - 2, 290, :_reduce_406, - 4, 290, :_reduce_407, - 1, 290, :_reduce_none, - 0, 294, :_reduce_409, - 1, 294, :_reduce_410, - 3, 295, :_reduce_411, - 4, 295, :_reduce_412, - 1, 296, :_reduce_413, - 4, 296, :_reduce_414, - 1, 297, :_reduce_415, - 3, 297, :_reduce_416, - 1, 298, :_reduce_417, - 1, 298, :_reduce_none, - 0, 302, :_reduce_419, - 0, 303, :_reduce_420, - 5, 256, :_reduce_421, - 4, 300, :_reduce_422, - 1, 300, :_reduce_423, - 0, 306, :_reduce_424, - 4, 301, :_reduce_425, - 0, 307, :_reduce_426, - 4, 301, :_reduce_427, - 0, 309, :_reduce_428, - 4, 305, :_reduce_429, - 2, 201, :_reduce_430, - 4, 201, :_reduce_431, - 5, 201, :_reduce_432, - 5, 201, :_reduce_433, - 2, 255, :_reduce_434, - 4, 255, :_reduce_435, - 4, 255, :_reduce_436, - 3, 255, :_reduce_437, - 3, 255, :_reduce_438, - 3, 255, :_reduce_439, - 2, 255, :_reduce_440, - 1, 255, :_reduce_441, - 4, 255, :_reduce_442, - 0, 311, :_reduce_443, - 4, 254, :_reduce_444, - 0, 312, :_reduce_445, - 4, 254, :_reduce_446, - 0, 313, :_reduce_447, - 3, 205, :_reduce_448, - 0, 314, :_reduce_449, - 0, 315, :_reduce_450, - 4, 308, :_reduce_451, - 5, 259, :_reduce_452, - 1, 316, :_reduce_453, - 1, 316, :_reduce_none, - 0, 319, :_reduce_455, - 0, 320, :_reduce_456, - 7, 260, :_reduce_457, - 1, 318, :_reduce_458, - 1, 318, :_reduce_none, - 1, 317, :_reduce_460, - 3, 317, :_reduce_461, - 3, 317, :_reduce_462, - 1, 188, :_reduce_none, - 2, 188, :_reduce_464, - 3, 188, :_reduce_465, - 1, 188, :_reduce_466, - 1, 188, :_reduce_467, - 1, 188, :_reduce_468, - 1, 321, :_reduce_none, - 3, 326, :_reduce_470, - 1, 326, :_reduce_none, - 3, 328, :_reduce_472, - 1, 328, :_reduce_none, - 1, 330, :_reduce_474, - 1, 331, :_reduce_475, - 1, 329, :_reduce_none, - 1, 329, :_reduce_none, - 4, 329, :_reduce_478, - 4, 329, :_reduce_479, - 4, 329, :_reduce_480, - 3, 329, :_reduce_481, - 4, 329, :_reduce_482, - 4, 329, :_reduce_483, - 4, 329, :_reduce_484, - 3, 329, :_reduce_485, - 3, 329, :_reduce_486, - 3, 329, :_reduce_487, - 2, 329, :_reduce_488, - 0, 335, :_reduce_489, - 4, 329, :_reduce_490, - 2, 329, :_reduce_491, - 0, 336, :_reduce_492, - 4, 329, :_reduce_493, - 1, 322, :_reduce_494, - 1, 322, :_reduce_495, - 2, 322, :_reduce_496, - 3, 322, :_reduce_497, - 5, 322, :_reduce_498, - 2, 322, :_reduce_499, - 4, 322, :_reduce_500, - 1, 322, :_reduce_none, - 2, 337, :_reduce_502, - 3, 337, :_reduce_503, - 1, 324, :_reduce_504, - 3, 324, :_reduce_505, - 5, 323, :_reduce_506, - 2, 340, :_reduce_507, - 1, 340, :_reduce_508, - 1, 339, :_reduce_509, - 3, 339, :_reduce_510, - 1, 338, :_reduce_none, - 3, 325, :_reduce_512, - 1, 325, :_reduce_513, - 2, 325, :_reduce_514, - 1, 325, :_reduce_515, - 1, 341, :_reduce_516, - 3, 341, :_reduce_517, - 2, 343, :_reduce_518, - 1, 343, :_reduce_519, - 1, 344, :_reduce_520, - 3, 344, :_reduce_521, - 2, 346, :_reduce_522, - 1, 346, :_reduce_523, - 2, 348, :_reduce_524, - 1, 342, :_reduce_none, - 1, 342, :_reduce_none, - 1, 332, :_reduce_none, - 3, 332, :_reduce_528, - 3, 332, :_reduce_529, - 2, 332, :_reduce_530, - 2, 332, :_reduce_531, - 1, 332, :_reduce_none, - 1, 332, :_reduce_none, - 1, 332, :_reduce_none, - 2, 332, :_reduce_535, - 2, 332, :_reduce_536, - 1, 349, :_reduce_none, - 1, 349, :_reduce_none, - 1, 349, :_reduce_none, - 1, 349, :_reduce_none, - 1, 349, :_reduce_none, - 1, 349, :_reduce_none, - 1, 349, :_reduce_none, - 1, 349, :_reduce_none, - 1, 349, :_reduce_545, - 1, 349, :_reduce_none, - 1, 327, :_reduce_547, - 2, 350, :_reduce_548, - 2, 350, :_reduce_549, - 4, 351, :_reduce_550, - 2, 333, :_reduce_551, - 3, 333, :_reduce_552, - 1, 333, :_reduce_553, - 6, 159, :_reduce_554, - 0, 159, :_reduce_555, - 1, 353, :_reduce_556, - 1, 353, :_reduce_none, - 1, 353, :_reduce_none, - 2, 354, :_reduce_559, - 1, 354, :_reduce_none, - 2, 161, :_reduce_561, - 1, 161, :_reduce_none, - 1, 244, :_reduce_none, - 1, 244, :_reduce_none, - 1, 245, :_reduce_565, - 1, 356, :_reduce_566, - 2, 356, :_reduce_567, - 3, 357, :_reduce_568, - 1, 357, :_reduce_569, - 1, 357, :_reduce_570, - 3, 246, :_reduce_571, - 4, 247, :_reduce_572, - 3, 248, :_reduce_573, - 0, 360, :_reduce_574, - 3, 360, :_reduce_575, - 1, 361, :_reduce_576, - 2, 361, :_reduce_577, - 3, 250, :_reduce_578, - 0, 363, :_reduce_579, - 3, 363, :_reduce_580, - 3, 249, :_reduce_581, - 3, 251, :_reduce_582, - 0, 364, :_reduce_583, - 3, 364, :_reduce_584, - 0, 365, :_reduce_585, - 3, 365, :_reduce_586, - 0, 345, :_reduce_587, - 2, 345, :_reduce_588, - 0, 358, :_reduce_589, - 2, 358, :_reduce_590, - 0, 359, :_reduce_591, - 2, 359, :_reduce_592, - 1, 362, :_reduce_593, - 2, 362, :_reduce_594, - 0, 367, :_reduce_595, - 4, 362, :_reduce_596, - 1, 366, :_reduce_597, - 1, 366, :_reduce_598, - 1, 366, :_reduce_599, - 1, 366, :_reduce_none, - 1, 224, :_reduce_none, - 1, 224, :_reduce_none, - 1, 368, :_reduce_603, - 3, 369, :_reduce_604, - 1, 355, :_reduce_605, - 2, 355, :_reduce_606, - 1, 227, :_reduce_607, - 1, 227, :_reduce_608, - 1, 227, :_reduce_609, - 1, 227, :_reduce_610, - 1, 352, :_reduce_611, - 1, 352, :_reduce_612, - 1, 352, :_reduce_613, - 1, 218, :_reduce_614, - 1, 218, :_reduce_615, - 1, 218, :_reduce_616, - 1, 218, :_reduce_617, - 1, 218, :_reduce_618, - 1, 219, :_reduce_619, - 1, 219, :_reduce_620, - 1, 219, :_reduce_621, - 1, 219, :_reduce_622, - 1, 219, :_reduce_623, - 1, 219, :_reduce_624, - 1, 219, :_reduce_625, - 1, 252, :_reduce_626, - 1, 252, :_reduce_627, - 1, 176, :_reduce_628, - 1, 176, :_reduce_629, - 1, 186, :_reduce_630, - 1, 186, :_reduce_631, - 0, 370, :_reduce_632, - 4, 263, :_reduce_633, - 0, 263, :_reduce_634, - 1, 182, :_reduce_none, - 1, 182, :_reduce_636, - 3, 371, :_reduce_637, - 1, 266, :_reduce_none, - 0, 373, :_reduce_639, - 3, 266, :_reduce_640, - 4, 372, :_reduce_641, - 2, 372, :_reduce_642, - 2, 372, :_reduce_643, - 1, 372, :_reduce_644, - 1, 372, :_reduce_645, - 2, 375, :_reduce_646, - 0, 375, :_reduce_647, - 6, 304, :_reduce_648, - 8, 304, :_reduce_649, - 4, 304, :_reduce_650, - 6, 304, :_reduce_651, - 4, 304, :_reduce_652, - 6, 304, :_reduce_653, - 2, 304, :_reduce_654, - 4, 304, :_reduce_655, - 6, 304, :_reduce_656, - 2, 304, :_reduce_657, - 4, 304, :_reduce_658, - 2, 304, :_reduce_659, - 4, 304, :_reduce_660, - 1, 304, :_reduce_661, - 0, 304, :_reduce_662, - 1, 239, :_reduce_663, - 1, 299, :_reduce_664, - 1, 299, :_reduce_665, - 1, 299, :_reduce_666, - 1, 299, :_reduce_667, - 1, 275, :_reduce_none, - 1, 275, :_reduce_669, - 1, 377, :_reduce_670, - 1, 378, :_reduce_671, - 3, 378, :_reduce_672, - 1, 291, :_reduce_673, - 3, 291, :_reduce_674, - 1, 379, :_reduce_675, - 2, 380, :_reduce_676, - 1, 380, :_reduce_677, - 2, 381, :_reduce_678, - 1, 381, :_reduce_679, - 1, 285, :_reduce_680, - 3, 285, :_reduce_681, - 1, 374, :_reduce_682, - 3, 374, :_reduce_683, - 1, 347, :_reduce_none, - 1, 347, :_reduce_none, - 2, 281, :_reduce_686, - 2, 280, :_reduce_687, - 1, 280, :_reduce_688, - 3, 382, :_reduce_689, - 3, 383, :_reduce_690, - 1, 292, :_reduce_691, - 3, 292, :_reduce_692, - 1, 376, :_reduce_693, - 3, 376, :_reduce_694, - 1, 384, :_reduce_none, - 1, 384, :_reduce_none, - 2, 293, :_reduce_697, - 1, 293, :_reduce_698, - 1, 385, :_reduce_none, - 1, 385, :_reduce_none, - 2, 287, :_reduce_701, - 1, 287, :_reduce_702, - 2, 286, :_reduce_703, - 0, 286, :_reduce_704, - 1, 197, :_reduce_none, - 3, 197, :_reduce_706, - 0, 253, :_reduce_707, - 2, 253, :_reduce_none, - 1, 237, :_reduce_709, - 3, 237, :_reduce_710, - 3, 386, :_reduce_711, - 2, 386, :_reduce_712, - 1, 386, :_reduce_713, - 4, 386, :_reduce_714, - 2, 386, :_reduce_715, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 202, :_reduce_none, - 1, 202, :_reduce_none, - 1, 202, :_reduce_none, - 1, 202, :_reduce_none, - 1, 310, :_reduce_none, - 1, 310, :_reduce_none, - 1, 310, :_reduce_none, - 1, 198, :_reduce_none, - 1, 198, :_reduce_none, - 1, 180, :_reduce_728, - 1, 180, :_reduce_729, - 0, 152, :_reduce_none, - 1, 152, :_reduce_none, - 0, 187, :_reduce_none, - 1, 187, :_reduce_none, - 2, 213, :_reduce_734, - 2, 179, :_reduce_735, - 2, 334, :_reduce_736, - 0, 236, :_reduce_none, - 1, 236, :_reduce_none, - 1, 236, :_reduce_none, - 1, 264, :_reduce_740, - 1, 264, :_reduce_none, - 1, 154, :_reduce_none, - 2, 154, :_reduce_none, - 0, 234, :_reduce_744 ] - -racc_reduce_n = 745 - -racc_shift_n = 1238 - -racc_token_table = { - false => 0, - :error => 1, - :kCLASS => 2, - :kMODULE => 3, - :kDEF => 4, - :kUNDEF => 5, - :kBEGIN => 6, - :kRESCUE => 7, - :kENSURE => 8, - :kEND => 9, - :kIF => 10, - :kUNLESS => 11, - :kTHEN => 12, - :kELSIF => 13, - :kELSE => 14, - :kCASE => 15, - :kWHEN => 16, - :kWHILE => 17, - :kUNTIL => 18, - :kFOR => 19, - :kBREAK => 20, - :kNEXT => 21, - :kREDO => 22, - :kRETRY => 23, - :kIN => 24, - :kDO => 25, - :kDO_COND => 26, - :kDO_BLOCK => 27, - :kDO_LAMBDA => 28, - :kRETURN => 29, - :kYIELD => 30, - :kSUPER => 31, - :kSELF => 32, - :kNIL => 33, - :kTRUE => 34, - :kFALSE => 35, - :kAND => 36, - :kOR => 37, - :kNOT => 38, - :kIF_MOD => 39, - :kUNLESS_MOD => 40, - :kWHILE_MOD => 41, - :kUNTIL_MOD => 42, - :kRESCUE_MOD => 43, - :kALIAS => 44, - :kDEFINED => 45, - :klBEGIN => 46, - :klEND => 47, - :k__LINE__ => 48, - :k__FILE__ => 49, - :k__ENCODING__ => 50, - :tIDENTIFIER => 51, - :tFID => 52, - :tGVAR => 53, - :tIVAR => 54, - :tCONSTANT => 55, - :tLABEL => 56, - :tCVAR => 57, - :tNTH_REF => 58, - :tBACK_REF => 59, - :tSTRING_CONTENT => 60, - :tINTEGER => 61, - :tFLOAT => 62, - :tUPLUS => 63, - :tUMINUS => 64, - :tUNARY_NUM => 65, - :tPOW => 66, - :tCMP => 67, - :tEQ => 68, - :tEQQ => 69, - :tNEQ => 70, - :tGEQ => 71, - :tLEQ => 72, - :tANDOP => 73, - :tOROP => 74, - :tMATCH => 75, - :tNMATCH => 76, - :tDOT => 77, - :tDOT2 => 78, - :tDOT3 => 79, - :tAREF => 80, - :tASET => 81, - :tLSHFT => 82, - :tRSHFT => 83, - :tCOLON2 => 84, - :tCOLON3 => 85, - :tOP_ASGN => 86, - :tASSOC => 87, - :tLPAREN => 88, - :tLPAREN2 => 89, - :tRPAREN => 90, - :tLPAREN_ARG => 91, - :tLBRACK => 92, - :tLBRACK2 => 93, - :tRBRACK => 94, - :tLBRACE => 95, - :tLBRACE_ARG => 96, - :tSTAR => 97, - :tSTAR2 => 98, - :tAMPER => 99, - :tAMPER2 => 100, - :tTILDE => 101, - :tPERCENT => 102, - :tDIVIDE => 103, - :tDSTAR => 104, - :tPLUS => 105, - :tMINUS => 106, - :tLT => 107, - :tGT => 108, - :tPIPE => 109, - :tBANG => 110, - :tCARET => 111, - :tLCURLY => 112, - :tRCURLY => 113, - :tBACK_REF2 => 114, - :tSYMBEG => 115, - :tSTRING_BEG => 116, - :tXSTRING_BEG => 117, - :tREGEXP_BEG => 118, - :tREGEXP_OPT => 119, - :tWORDS_BEG => 120, - :tQWORDS_BEG => 121, - :tSYMBOLS_BEG => 122, - :tQSYMBOLS_BEG => 123, - :tSTRING_DBEG => 124, - :tSTRING_DVAR => 125, - :tSTRING_END => 126, - :tSTRING_DEND => 127, - :tSTRING => 128, - :tSYMBOL => 129, - :tNL => 130, - :tEH => 131, - :tCOLON => 132, - :tCOMMA => 133, - :tSPACE => 134, - :tSEMI => 135, - :tLAMBDA => 136, - :tLAMBEG => 137, - :tCHARACTER => 138, - :tRATIONAL => 139, - :tIMAGINARY => 140, - :tLABEL_END => 141, - :tANDDOT => 142, - :tBDOT2 => 143, - :tBDOT3 => 144, - :tEQL => 145, - :tLOWEST => 146 } - -racc_nt_base = 147 - -racc_use_result_var = true - -Racc_arg = [ - racc_action_table, - racc_action_check, - racc_action_default, - racc_action_pointer, - racc_goto_table, - racc_goto_check, - racc_goto_default, - racc_goto_pointer, - racc_nt_base, - racc_reduce_table, - racc_token_table, - racc_shift_n, - racc_reduce_n, - racc_use_result_var ] -Ractor.make_shareable(Racc_arg) if defined?(Ractor) - -Racc_token_to_s_table = [ - "$end", - "error", - "kCLASS", - "kMODULE", - "kDEF", - "kUNDEF", - "kBEGIN", - "kRESCUE", - "kENSURE", - "kEND", - "kIF", - "kUNLESS", - "kTHEN", - "kELSIF", - "kELSE", - "kCASE", - "kWHEN", - "kWHILE", - "kUNTIL", - "kFOR", - "kBREAK", - "kNEXT", - "kREDO", - "kRETRY", - "kIN", - "kDO", - "kDO_COND", - "kDO_BLOCK", - "kDO_LAMBDA", - "kRETURN", - "kYIELD", - "kSUPER", - "kSELF", - "kNIL", - "kTRUE", - "kFALSE", - "kAND", - "kOR", - "kNOT", - "kIF_MOD", - "kUNLESS_MOD", - "kWHILE_MOD", - "kUNTIL_MOD", - "kRESCUE_MOD", - "kALIAS", - "kDEFINED", - "klBEGIN", - "klEND", - "k__LINE__", - "k__FILE__", - "k__ENCODING__", - "tIDENTIFIER", - "tFID", - "tGVAR", - "tIVAR", - "tCONSTANT", - "tLABEL", - "tCVAR", - "tNTH_REF", - "tBACK_REF", - "tSTRING_CONTENT", - "tINTEGER", - "tFLOAT", - "tUPLUS", - "tUMINUS", - "tUNARY_NUM", - "tPOW", - "tCMP", - "tEQ", - "tEQQ", - "tNEQ", - "tGEQ", - "tLEQ", - "tANDOP", - "tOROP", - "tMATCH", - "tNMATCH", - "tDOT", - "tDOT2", - "tDOT3", - "tAREF", - "tASET", - "tLSHFT", - "tRSHFT", - "tCOLON2", - "tCOLON3", - "tOP_ASGN", - "tASSOC", - "tLPAREN", - "tLPAREN2", - "tRPAREN", - "tLPAREN_ARG", - "tLBRACK", - "tLBRACK2", - "tRBRACK", - "tLBRACE", - "tLBRACE_ARG", - "tSTAR", - "tSTAR2", - "tAMPER", - "tAMPER2", - "tTILDE", - "tPERCENT", - "tDIVIDE", - "tDSTAR", - "tPLUS", - "tMINUS", - "tLT", - "tGT", - "tPIPE", - "tBANG", - "tCARET", - "tLCURLY", - "tRCURLY", - "tBACK_REF2", - "tSYMBEG", - "tSTRING_BEG", - "tXSTRING_BEG", - "tREGEXP_BEG", - "tREGEXP_OPT", - "tWORDS_BEG", - "tQWORDS_BEG", - "tSYMBOLS_BEG", - "tQSYMBOLS_BEG", - "tSTRING_DBEG", - "tSTRING_DVAR", - "tSTRING_END", - "tSTRING_DEND", - "tSTRING", - "tSYMBOL", - "tNL", - "tEH", - "tCOLON", - "tCOMMA", - "tSPACE", - "tSEMI", - "tLAMBDA", - "tLAMBEG", - "tCHARACTER", - "tRATIONAL", - "tIMAGINARY", - "tLABEL_END", - "tANDDOT", - "tBDOT2", - "tBDOT3", - "tEQL", - "tLOWEST", - "$start", - "program", - "top_compstmt", - "@1", - "top_stmts", - "opt_terms", - "top_stmt", - "terms", - "stmt", - "begin_block", - "bodystmt", - "compstmt", - "opt_rescue", - "opt_else", - "opt_ensure", - "stmts", - "stmt_or_begin", - "fitem", - "undef_list", - "expr_value", - "command_asgn", - "mlhs", - "command_call", - "lhs", - "mrhs", - "mrhs_arg", - "expr", - "@2", - "command_rhs", - "var_lhs", - "primary_value", - "opt_call_args", - "rbracket", - "call_op", - "defn_head", - "f_opt_paren_args", - "command", - "arg", - "defs_head", - "backref", - "opt_nl", - "p_top_expr_body", - "@3", - "@4", - "expr_value_do", - "do", - "def_name", - "@5", - "fname", - "k_def", - "singleton", - "dot_or_colon", - "@6", - "block_command", - "block_call", - "operation2", - "command_args", - "cmd_brace_block", - "brace_body", - "fcall", - "@7", - "operation", - "k_return", - "call_args", - "mlhs_basic", - "mlhs_inner", - "rparen", - "mlhs_head", - "mlhs_item", - "mlhs_node", - "mlhs_post", - "user_variable", - "keyword_variable", - "cname", - "cpath", - "op", - "reswords", - "symbol", - "@8", - "arg_rhs", - "simple_numeric", - "rel_expr", - "primary", - "relop", - "@9", - "arg_value", - "aref_args", - "none", - "args", - "trailer", - "assocs", - "paren_args", - "args_forward", - "opt_paren_args", - "opt_block_arg", - "block_arg", - "@10", - "literal", - "strings", - "xstring", - "regexp", - "words", - "qwords", - "symbols", - "qsymbols", - "var_ref", - "assoc_list", - "brace_block", - "method_call", - "lambda", - "then", - "if_tail", - "case_body", - "p_case_body", - "for_var", - "k_class", - "superclass", - "term", - "k_module", - "f_arglist", - "@11", - "@12", - "@13", - "@14", - "@15", - "@16", - "@17", - "f_marg", - "f_norm_arg", - "f_margs", - "f_marg_list", - "f_rest_marg", - "f_any_kwrest", - "f_kwrest", - "f_no_kwarg", - "f_eq", - "block_args_tail", - "@18", - "f_block_kwarg", - "opt_f_block_arg", - "f_block_arg", - "opt_block_args_tail", - "excessed_comma", - "block_param", - "f_arg", - "f_block_optarg", - "f_rest_arg", - "opt_block_param", - "block_param_def", - "opt_bv_decl", - "bv_decls", - "bvar", - "f_bad_arg", - "f_larglist", - "lambda_body", - "@19", - "@20", - "f_args", - "do_block", - "@21", - "@22", - "do_body", - "@23", - "operation3", - "@24", - "@25", - "@26", - "@27", - "@28", - "cases", - "p_top_expr", - "p_cases", - "@29", - "@30", - "p_expr", - "p_args", - "p_find", - "p_args_tail", - "p_kwargs", - "p_as", - "p_variable", - "p_alt", - "p_expr_basic", - "p_lparen", - "p_lbracket", - "p_value", - "p_const", - "rbrace", - "@31", - "@32", - "p_args_head", - "p_arg", - "p_args_post", - "p_rest", - "p_kwarg", - "p_any_kwrest", - "p_kw", - "p_kw_label", - "string_contents", - "p_kwrest", - "kwrest_mark", - "p_kwnorest", - "p_primitive", - "p_var_ref", - "p_expr_ref", - "nonlocal_var", - "exc_list", - "exc_var", - "numeric", - "string", - "string1", - "xstring_contents", - "regexp_contents", - "word_list", - "word", - "string_content", - "symbol_list", - "qword_list", - "qsym_list", - "string_dvar", - "@33", - "ssym", - "dsym", - "@34", - "f_paren_args", - "args_tail", - "@35", - "f_kwarg", - "opt_args_tail", - "f_optarg", - "f_arg_asgn", - "f_arg_item", - "f_label", - "f_kw", - "f_block_kw", - "f_opt", - "f_block_opt", - "restarg_mark", - "blkarg_mark", - "assoc" ] -Ractor.make_shareable(Racc_token_to_s_table) if defined?(Ractor) - -Racc_debug_parser = false - -##### State transition tables end ##### - -# reduce 0 omitted - -def _reduce_1(val, _values, result) - @current_arg_stack.push(nil) - @max_numparam_stack.push(static: true) - - result -end - -def _reduce_2(val, _values, result) - result = val[1] - - @current_arg_stack.pop - @max_numparam_stack.pop - - result -end - -def _reduce_3(val, _values, result) - result = @builder.compstmt(val[0]) - - result -end - -def _reduce_4(val, _values, result) - result = [] - - result -end - -def _reduce_5(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_6(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_7(val, _values, result) - result = [ val[1] ] - - result -end - -# reduce 8 omitted - -def _reduce_9(val, _values, result) - result = @builder.preexe(val[0], *val[1]) - - result -end - -def _reduce_10(val, _values, result) - result = val - - result -end - -def _reduce_11(val, _values, result) - rescue_bodies = val[1] - else_t, else_ = val[2] - ensure_t, ensure_ = val[3] - - if rescue_bodies.empty? && !else_t.nil? - diagnostic :error, :useless_else, nil, else_t - end - - result = @builder.begin_body(val[0], - rescue_bodies, - else_t, else_, - ensure_t, ensure_) - - result -end - -def _reduce_12(val, _values, result) - result = @builder.compstmt(val[0]) - - result -end - -def _reduce_13(val, _values, result) - result = [] - - result -end - -def _reduce_14(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_15(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_16(val, _values, result) - result = [ val[1] ] - - result -end - -# reduce 17 omitted - -def _reduce_18(val, _values, result) - diagnostic :error, :begin_in_method, nil, val[0] - - result -end - -def _reduce_19(val, _values, result) - @lexer.state = :expr_fname - - result -end - -def _reduce_20(val, _values, result) - result = @builder.alias(val[0], val[1], val[3]) - - result -end - -def _reduce_21(val, _values, result) - result = @builder.alias(val[0], - @builder.gvar(val[1]), - @builder.gvar(val[2])) - - result -end - -def _reduce_22(val, _values, result) - result = @builder.alias(val[0], - @builder.gvar(val[1]), - @builder.back_ref(val[2])) - - result -end - -def _reduce_23(val, _values, result) - diagnostic :error, :nth_ref_alias, nil, val[2] - - result -end - -def _reduce_24(val, _values, result) - result = @builder.undef_method(val[0], val[1]) - - result -end - -def _reduce_25(val, _values, result) - result = @builder.condition_mod(val[0], nil, - val[1], val[2]) - - result -end - -def _reduce_26(val, _values, result) - result = @builder.condition_mod(nil, val[0], - val[1], val[2]) - - result -end - -def _reduce_27(val, _values, result) - result = @builder.loop_mod(:while, val[0], val[1], val[2]) - - result -end - -def _reduce_28(val, _values, result) - result = @builder.loop_mod(:until, val[0], val[1], val[2]) - - result -end - -def _reduce_29(val, _values, result) - rescue_body = @builder.rescue_body(val[1], - nil, nil, nil, - nil, val[2]) - - result = @builder.begin_body(val[0], [ rescue_body ]) - - result -end - -def _reduce_30(val, _values, result) - result = @builder.postexe(val[0], val[1], val[2], val[3]) - - result -end - -# reduce 31 omitted - -def _reduce_32(val, _values, result) - result = @builder.multi_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_33(val, _values, result) - result = @builder.assign(val[0], val[1], - @builder.array(nil, val[2], nil)) - - result -end - -def _reduce_34(val, _values, result) - rescue_body = @builder.rescue_body(val[3], - nil, nil, nil, - nil, val[4]) - begin_body = @builder.begin_body(val[2], [ rescue_body ]) - - result = @builder.multi_assign(val[0], val[1], begin_body) - - result -end - -def _reduce_35(val, _values, result) - result = @builder.multi_assign(val[0], val[1], val[2]) - - result -end - -# reduce 36 omitted - -def _reduce_37(val, _values, result) - result = @builder.assign(val[0], val[1], val[2]) - - result -end - -def _reduce_38(val, _values, result) - result = @builder.op_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_39(val, _values, result) - result = @builder.op_assign( - @builder.index( - val[0], val[1], val[2], val[3]), - val[4], val[5]) - - result -end - -def _reduce_40(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_41(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_42(val, _values, result) - const = @builder.const_op_assignable( - @builder.const_fetch(val[0], val[1], val[2])) - result = @builder.op_assign(const, val[3], val[4]) - - result -end - -def _reduce_43(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_44(val, _values, result) - def_t, (name_t, ctx) = val[0] - endless_method_name(name_t) - - result = @builder.def_endless_method(def_t, name_t, - val[1], val[2], val[3]) - - local_pop - @current_arg_stack.pop - @context.in_def = ctx.in_def - - result -end - -def _reduce_45(val, _values, result) - def_t, (name_t, ctx) = val[0] - endless_method_name(name_t) - - rescue_body = @builder.rescue_body(val[4], - nil, nil, nil, - nil, val[5]) - - method_body = @builder.begin_body(val[3], [ rescue_body ]) - - result = @builder.def_endless_method(def_t, name_t, - val[1], val[2], method_body) - - local_pop - @current_arg_stack.pop - @context.in_def = ctx.in_def - - result -end - -def _reduce_46(val, _values, result) - def_t, recv, dot_t, (name_t, ctx) = val[0] - endless_method_name(name_t) - - result = @builder.def_endless_singleton(def_t, recv, dot_t, name_t, - val[1], val[2], val[3]) - - local_pop - @current_arg_stack.pop - @context.in_def = ctx.in_def - - result -end - -def _reduce_47(val, _values, result) - def_t, recv, dot_t, (name_t, ctx) = val[0] - endless_method_name(name_t) - - rescue_body = @builder.rescue_body(val[4], - nil, nil, nil, - nil, val[5]) - - method_body = @builder.begin_body(val[3], [ rescue_body ]) - - result = @builder.def_endless_singleton(def_t, recv, dot_t, name_t, - val[1], val[2], method_body) - - local_pop - @current_arg_stack.pop - @context.in_def = ctx.in_def - - result -end - -def _reduce_48(val, _values, result) - @builder.op_assign(val[0], val[1], val[2]) - - result -end - -# reduce 49 omitted - -def _reduce_50(val, _values, result) - rescue_body = @builder.rescue_body(val[1], - nil, nil, nil, - nil, val[2]) - - result = @builder.begin_body(val[0], [ rescue_body ]) - - result -end - -# reduce 51 omitted - -# reduce 52 omitted - -def _reduce_53(val, _values, result) - result = @builder.logical_op(:and, val[0], val[1], val[2]) - - result -end - -def _reduce_54(val, _values, result) - result = @builder.logical_op(:or, val[0], val[1], val[2]) - - result -end - -def _reduce_55(val, _values, result) - result = @builder.not_op(val[0], nil, val[2], nil) - - result -end - -def _reduce_56(val, _values, result) - result = @builder.not_op(val[0], nil, val[1], nil) - - result -end - -def _reduce_57(val, _values, result) - @lexer.state = :expr_beg - @lexer.command_start = false - @pattern_variables.push - @pattern_hash_keys.push - - result = @context.in_kwarg - @context.in_kwarg = true - - result -end - -def _reduce_58(val, _values, result) - @pattern_variables.pop - @pattern_hash_keys.pop - @context.in_kwarg = val[2] - result = @builder.match_pattern(val[0], val[1], val[3]) - - result -end - -def _reduce_59(val, _values, result) - @lexer.state = :expr_beg - @lexer.command_start = false - @pattern_variables.push - @pattern_hash_keys.push - - result = @context.in_kwarg - @context.in_kwarg = true - - result -end - -def _reduce_60(val, _values, result) - @pattern_variables.pop - @pattern_hash_keys.pop - @context.in_kwarg = val[2] - result = @builder.match_pattern_p(val[0], val[1], val[3]) - - result -end - -# reduce 61 omitted - -# reduce 62 omitted - -def _reduce_63(val, _values, result) - @lexer.cond.push(true) - - result -end - -def _reduce_64(val, _values, result) - @lexer.cond.pop - result = [ val[1], val[2] ] - - result -end - -def _reduce_65(val, _values, result) - local_push - @current_arg_stack.push(nil) - - result = [ val[0], @context.dup ] - @context.in_def = true - - result -end - -def _reduce_66(val, _values, result) - result = [ val[0], val[1] ] - - result -end - -def _reduce_67(val, _values, result) - @lexer.state = :expr_fname - @context.in_argdef = true - - result -end - -def _reduce_68(val, _values, result) - result = [ val[0], val[1], val[2], val[4] ] - - result -end - -# reduce 69 omitted - -# reduce 70 omitted - -# reduce 71 omitted - -def _reduce_72(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - result -end - -def _reduce_73(val, _values, result) - result = @context.dup - @context.in_block = true - - result -end - -def _reduce_74(val, _values, result) - @context.in_block = val[1].in_block - result = [ val[0], *val[2], val[3] ] - - result -end - -# reduce 75 omitted - -def _reduce_76(val, _values, result) - result = @builder.call_method(nil, nil, val[0], - nil, val[1], nil) - - result -end - -def _reduce_77(val, _values, result) - method_call = @builder.call_method(nil, nil, val[0], - nil, val[1], nil) - - begin_t, args, body, end_t = val[2] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_78(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - result -end - -def _reduce_79(val, _values, result) - method_call = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - begin_t, args, body, end_t = val[4] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_80(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - result -end - -def _reduce_81(val, _values, result) - method_call = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - begin_t, args, body, end_t = val[4] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_82(val, _values, result) - result = @builder.keyword_cmd(:super, val[0], - nil, val[1], nil) - - result -end - -def _reduce_83(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0], - nil, val[1], nil) - - result -end - -def _reduce_84(val, _values, result) - result = @builder.keyword_cmd(:return, val[0], - nil, val[1], nil) - - result -end - -def _reduce_85(val, _values, result) - result = @builder.keyword_cmd(:break, val[0], - nil, val[1], nil) - - result -end - -def _reduce_86(val, _values, result) - result = @builder.keyword_cmd(:next, val[0], - nil, val[1], nil) - - result -end - -def _reduce_87(val, _values, result) - result = @builder.multi_lhs(nil, val[0], nil) - - result -end - -def _reduce_88(val, _values, result) - result = @builder.begin(val[0], val[1], val[2]) - - result -end - -def _reduce_89(val, _values, result) - result = @builder.multi_lhs(nil, val[0], nil) - - result -end - -def _reduce_90(val, _values, result) - result = @builder.multi_lhs(val[0], val[1], val[2]) - - result -end - -# reduce 91 omitted - -def _reduce_92(val, _values, result) - result = val[0]. - push(val[1]) - - result -end - -def _reduce_93(val, _values, result) - result = val[0]. - push(@builder.splat(val[1], val[2])) - - result -end - -def _reduce_94(val, _values, result) - result = val[0]. - push(@builder.splat(val[1], val[2])). - concat(val[4]) - - result -end - -def _reduce_95(val, _values, result) - result = val[0]. - push(@builder.splat(val[1])) - - result -end - -def _reduce_96(val, _values, result) - result = val[0]. - push(@builder.splat(val[1])). - concat(val[3]) - - result -end - -def _reduce_97(val, _values, result) - result = [ @builder.splat(val[0], val[1]) ] - - result -end - -def _reduce_98(val, _values, result) - result = [ @builder.splat(val[0], val[1]), - *val[3] ] - - result -end - -def _reduce_99(val, _values, result) - result = [ @builder.splat(val[0]) ] - - result -end - -def _reduce_100(val, _values, result) - result = [ @builder.splat(val[0]), - *val[2] ] - - result -end - -# reduce 101 omitted - -def _reduce_102(val, _values, result) - result = @builder.begin(val[0], val[1], val[2]) - - result -end - -def _reduce_103(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_104(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_105(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_106(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_107(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_108(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_109(val, _values, result) - result = @builder.index_asgn(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_110(val, _values, result) - if (val[1][0] == :anddot) - diagnostic :error, :csend_in_lhs_of_masgn, nil, val[1] - end - - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_111(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_112(val, _values, result) - if (val[1][0] == :anddot) - diagnostic :error, :csend_in_lhs_of_masgn, nil, val[1] - end - - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_113(val, _values, result) - result = @builder.assignable( - @builder.const_fetch(val[0], val[1], val[2])) - - result -end - -def _reduce_114(val, _values, result) - result = @builder.assignable( - @builder.const_global(val[0], val[1])) - - result -end - -def _reduce_115(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_116(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_117(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_118(val, _values, result) - result = @builder.index_asgn(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_119(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_120(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_121(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_122(val, _values, result) - result = @builder.assignable( - @builder.const_fetch(val[0], val[1], val[2])) - - result -end - -def _reduce_123(val, _values, result) - result = @builder.assignable( - @builder.const_global(val[0], val[1])) - - result -end - -def _reduce_124(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_125(val, _values, result) - diagnostic :error, :module_name_const, nil, val[0] - - result -end - -# reduce 126 omitted - -def _reduce_127(val, _values, result) - result = @builder.const_global(val[0], val[1]) - - result -end - -def _reduce_128(val, _values, result) - result = @builder.const(val[0]) - - result -end - -def _reduce_129(val, _values, result) - result = @builder.const_fetch(val[0], val[1], val[2]) - - result -end - -# reduce 130 omitted - -# reduce 131 omitted - -# reduce 132 omitted - -# reduce 133 omitted - -# reduce 134 omitted - -def _reduce_135(val, _values, result) - result = @builder.symbol_internal(val[0]) - - result -end - -# reduce 136 omitted - -def _reduce_137(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_138(val, _values, result) - @lexer.state = :expr_fname - - result -end - -def _reduce_139(val, _values, result) - result = val[0] << val[3] - - result -end - -# reduce 140 omitted - -# reduce 141 omitted - -# reduce 142 omitted - -# reduce 143 omitted - -# reduce 144 omitted - -# reduce 145 omitted - -# reduce 146 omitted - -# reduce 147 omitted - -# reduce 148 omitted - -# reduce 149 omitted - -# reduce 150 omitted - -# reduce 151 omitted - -# reduce 152 omitted - -# reduce 153 omitted - -# reduce 154 omitted - -# reduce 155 omitted - -# reduce 156 omitted - -# reduce 157 omitted - -# reduce 158 omitted - -# reduce 159 omitted - -# reduce 160 omitted - -# reduce 161 omitted - -# reduce 162 omitted - -# reduce 163 omitted - -# reduce 164 omitted - -# reduce 165 omitted - -# reduce 166 omitted - -# reduce 167 omitted - -# reduce 168 omitted - -# reduce 169 omitted - -# reduce 170 omitted - -# reduce 171 omitted - -# reduce 172 omitted - -# reduce 173 omitted - -# reduce 174 omitted - -# reduce 175 omitted - -# reduce 176 omitted - -# reduce 177 omitted - -# reduce 178 omitted - -# reduce 179 omitted - -# reduce 180 omitted - -# reduce 181 omitted - -# reduce 182 omitted - -# reduce 183 omitted - -# reduce 184 omitted - -# reduce 185 omitted - -# reduce 186 omitted - -# reduce 187 omitted - -# reduce 188 omitted - -# reduce 189 omitted - -# reduce 190 omitted - -# reduce 191 omitted - -# reduce 192 omitted - -# reduce 193 omitted - -# reduce 194 omitted - -# reduce 195 omitted - -# reduce 196 omitted - -# reduce 197 omitted - -# reduce 198 omitted - -# reduce 199 omitted - -# reduce 200 omitted - -# reduce 201 omitted - -# reduce 202 omitted - -# reduce 203 omitted - -# reduce 204 omitted - -# reduce 205 omitted - -# reduce 206 omitted - -# reduce 207 omitted - -# reduce 208 omitted - -# reduce 209 omitted - -# reduce 210 omitted - -def _reduce_211(val, _values, result) - result = @builder.assign(val[0], val[1], val[2]) - - result -end - -def _reduce_212(val, _values, result) - result = @builder.op_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_213(val, _values, result) - result = @builder.op_assign( - @builder.index( - val[0], val[1], val[2], val[3]), - val[4], val[5]) - - result -end - -def _reduce_214(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_215(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_216(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_217(val, _values, result) - const = @builder.const_op_assignable( - @builder.const_fetch(val[0], val[1], val[2])) - result = @builder.op_assign(const, val[3], val[4]) - - result -end - -def _reduce_218(val, _values, result) - const = @builder.const_op_assignable( - @builder.const_global(val[0], val[1])) - result = @builder.op_assign(const, val[2], val[3]) - - result -end - -def _reduce_219(val, _values, result) - result = @builder.op_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_220(val, _values, result) - result = @builder.range_inclusive(val[0], val[1], val[2]) - - result -end - -def _reduce_221(val, _values, result) - result = @builder.range_exclusive(val[0], val[1], val[2]) - - result -end - -def _reduce_222(val, _values, result) - result = @builder.range_inclusive(val[0], val[1], nil) - - result -end - -def _reduce_223(val, _values, result) - result = @builder.range_exclusive(val[0], val[1], nil) - - result -end - -def _reduce_224(val, _values, result) - result = @builder.range_inclusive(nil, val[0], val[1]) - - result -end - -def _reduce_225(val, _values, result) - result = @builder.range_exclusive(nil, val[0], val[1]) - - result -end - -def _reduce_226(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_227(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_228(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_229(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_230(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_231(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_232(val, _values, result) - result = @builder.unary_op(val[0], - @builder.binary_op( - val[1], val[2], val[3])) - - result -end - -def _reduce_233(val, _values, result) - result = @builder.unary_op(val[0], val[1]) - - result -end - -def _reduce_234(val, _values, result) - result = @builder.unary_op(val[0], val[1]) - - result -end - -def _reduce_235(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_236(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_237(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_238(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -# reduce 239 omitted - -def _reduce_240(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_241(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_242(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_243(val, _values, result) - result = @builder.match_op(val[0], val[1], val[2]) - - result -end - -def _reduce_244(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_245(val, _values, result) - result = @builder.not_op(val[0], nil, val[1], nil) - - result -end - -def _reduce_246(val, _values, result) - result = @builder.unary_op(val[0], val[1]) - - result -end - -def _reduce_247(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_248(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_249(val, _values, result) - result = @builder.logical_op(:and, val[0], val[1], val[2]) - - result -end - -def _reduce_250(val, _values, result) - result = @builder.logical_op(:or, val[0], val[1], val[2]) - - result -end - -def _reduce_251(val, _values, result) - @context.in_defined = true - - result -end - -def _reduce_252(val, _values, result) - @context.in_defined = false - result = @builder.keyword_cmd(:defined?, val[0], nil, [ val[3] ], nil) - - result -end - -def _reduce_253(val, _values, result) - result = @builder.ternary(val[0], val[1], - val[2], val[4], val[5]) - - result -end - -def _reduce_254(val, _values, result) - def_t, (name_t, ctx) = val[0] - endless_method_name(name_t) - - result = @builder.def_endless_method(def_t, name_t, - val[1], val[2], val[3]) - - local_pop - @current_arg_stack.pop - @context.in_def = ctx.in_def - - result -end - -def _reduce_255(val, _values, result) - def_t, (name_t, ctx) = val[0] - endless_method_name(name_t) - - rescue_body = @builder.rescue_body(val[4], - nil, nil, nil, - nil, val[5]) - - method_body = @builder.begin_body(val[3], [ rescue_body ]) - - result = @builder.def_endless_method(def_t, name_t, - val[1], val[2], method_body) - - local_pop - @current_arg_stack.pop - @context.in_def = ctx.in_def - - result -end - -def _reduce_256(val, _values, result) - def_t, recv, dot_t, (name_t, ctx) = val[0] - endless_method_name(name_t) - - result = @builder.def_endless_singleton(def_t, recv, dot_t, name_t, - val[1], val[2], val[3]) - - local_pop - @current_arg_stack.pop - @context.in_def = ctx.in_def - - result -end - -def _reduce_257(val, _values, result) - def_t, recv, dot_t, (name_t, ctx) = val[0] - endless_method_name(name_t) - - rescue_body = @builder.rescue_body(val[4], - nil, nil, nil, - nil, val[5]) - - method_body = @builder.begin_body(val[3], [ rescue_body ]) - - result = @builder.def_endless_singleton(def_t, recv, dot_t, name_t, - val[1], val[2], method_body) - - local_pop - @current_arg_stack.pop - @context.in_def = ctx.in_def - - result -end - -# reduce 258 omitted - -# reduce 259 omitted - -# reduce 260 omitted - -# reduce 261 omitted - -# reduce 262 omitted - -def _reduce_263(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_264(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -# reduce 265 omitted - -# reduce 266 omitted - -# reduce 267 omitted - -def _reduce_268(val, _values, result) - result = val[0] << @builder.associate(nil, val[2], nil) - - result -end - -def _reduce_269(val, _values, result) - result = [ @builder.associate(nil, val[0], nil) ] - - result -end - -# reduce 270 omitted - -def _reduce_271(val, _values, result) - rescue_body = @builder.rescue_body(val[1], - nil, nil, nil, - nil, val[2]) - - result = @builder.begin_body(val[0], [ rescue_body ]) - - result -end - -def _reduce_272(val, _values, result) - result = val - - result -end - -def _reduce_273(val, _values, result) - unless @static_env.declared_forward_args? - diagnostic :error, :unexpected_token, { :token => 'tBDOT3' } , val[3] - end - - result = [val[0], [*val[1], @builder.forwarded_args(val[3])], val[4]] - - result -end - -def _reduce_274(val, _values, result) - unless @static_env.declared_forward_args? - diagnostic :error, :unexpected_token, { :token => 'tBDOT3' } , val[1] - end - - result = [val[0], [@builder.forwarded_args(val[1])], val[2]] - - result -end - -def _reduce_275(val, _values, result) - result = [ nil, [], nil ] - - result -end - -# reduce 276 omitted - -def _reduce_277(val, _values, result) - result = [] - - result -end - -# reduce 278 omitted - -# reduce 279 omitted - -def _reduce_280(val, _values, result) - result = val[0] << @builder.associate(nil, val[2], nil) - - result -end - -def _reduce_281(val, _values, result) - result = [ @builder.associate(nil, val[0], nil) ] - - result -end - -def _reduce_282(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_283(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_284(val, _values, result) - result = [ @builder.associate(nil, val[0], nil) ] - result.concat(val[1]) - - result -end - -def _reduce_285(val, _values, result) - assocs = @builder.associate(nil, val[2], nil) - result = val[0] << assocs - result.concat(val[3]) - - result -end - -def _reduce_286(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_287(val, _values, result) - # When branch gets invoked by RACC's lookahead - # and command args start with '[' or '(' - # we need to put `true` to the cmdarg stack - # **before** `false` pushed by lexer - # m [], n - # ^ - # Right here we have cmdarg [...0] because - # lexer pushed it on '[' - # We need to modify cmdarg stack to [...10] - # - # For all other cases (like `m n` or `m n, []`) we simply put 1 to the stack - # and later lexer pushes corresponding bits on top of it. - last_token = @last_token[0] - lookahead = last_token == :tLBRACK || last_token == :tLPAREN_ARG - - if lookahead - top = @lexer.cmdarg.pop - @lexer.cmdarg.push(true) - @lexer.cmdarg.push(top) - else - @lexer.cmdarg.push(true) - end - - result -end - -def _reduce_288(val, _values, result) - # call_args can be followed by tLBRACE_ARG (that does cmdarg.push(0) in the lexer) - # but the push must be done after cmdarg.pop() in the parser. - # So this code does cmdarg.pop() to pop 0 pushed by tLBRACE_ARG, - # cmdarg.pop() to pop 1 pushed by command_args, - # and cmdarg.push(0) to restore back the flag set by tLBRACE_ARG. - last_token = @last_token[0] - lookahead = last_token == :tLBRACE_ARG - if lookahead - top = @lexer.cmdarg.pop - @lexer.cmdarg.pop - @lexer.cmdarg.push(top) - else - @lexer.cmdarg.pop - end - - result = val[1] - - result -end - -def _reduce_289(val, _values, result) - result = @builder.block_pass(val[0], val[1]) - - result -end - -def _reduce_290(val, _values, result) - if !@static_env.declared_anonymous_blockarg? - diagnostic :error, :no_anonymous_blockarg, nil, val[0] - end - - result = @builder.block_pass(val[0], nil) - - result -end - -def _reduce_291(val, _values, result) - result = [ val[1] ] - - result -end - -def _reduce_292(val, _values, result) - result = [] - - result -end - -def _reduce_293(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_294(val, _values, result) - result = [ @builder.splat(val[0], val[1]) ] - - result -end - -def _reduce_295(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_296(val, _values, result) - result = val[0] << @builder.splat(val[2], val[3]) - - result -end - -def _reduce_297(val, _values, result) - result = @builder.array(nil, val[0], nil) - - result -end - -# reduce 298 omitted - -def _reduce_299(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_300(val, _values, result) - result = val[0] << @builder.splat(val[2], val[3]) - - result -end - -def _reduce_301(val, _values, result) - result = [ @builder.splat(val[0], val[1]) ] - - result -end - -# reduce 302 omitted - -# reduce 303 omitted - -# reduce 304 omitted - -# reduce 305 omitted - -# reduce 306 omitted - -# reduce 307 omitted - -# reduce 308 omitted - -# reduce 309 omitted - -# reduce 310 omitted - -# reduce 311 omitted - -def _reduce_312(val, _values, result) - result = @builder.call_method(nil, nil, val[0]) - - result -end - -def _reduce_313(val, _values, result) - @lexer.cmdarg.push(false) - - result -end - -def _reduce_314(val, _values, result) - @lexer.cmdarg.pop - - result = @builder.begin_keyword(val[0], val[2], val[3]) - - result -end - -def _reduce_315(val, _values, result) - @lexer.state = :expr_endarg - - result -end - -def _reduce_316(val, _values, result) - result = @builder.begin(val[0], val[1], val[3]) - - result -end - -def _reduce_317(val, _values, result) - @lexer.state = :expr_endarg - - result -end - -def _reduce_318(val, _values, result) - result = @builder.begin(val[0], nil, val[3]) - - result -end - -def _reduce_319(val, _values, result) - result = @builder.begin(val[0], val[1], val[2]) - - result -end - -def _reduce_320(val, _values, result) - result = @builder.const_fetch(val[0], val[1], val[2]) - - result -end - -def _reduce_321(val, _values, result) - result = @builder.const_global(val[0], val[1]) - - result -end - -def _reduce_322(val, _values, result) - result = @builder.array(val[0], val[1], val[2]) - - result -end - -def _reduce_323(val, _values, result) - result = @builder.associate(val[0], val[1], val[2]) - - result -end - -def _reduce_324(val, _values, result) - result = @builder.keyword_cmd(:return, val[0]) - - result -end - -def _reduce_325(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_326(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0], val[1], [], val[2]) - - result -end - -def _reduce_327(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0]) - - result -end - -def _reduce_328(val, _values, result) - @context.in_defined = true - - result -end - -def _reduce_329(val, _values, result) - @context.in_defined = false - result = @builder.keyword_cmd(:defined?, val[0], - val[2], [ val[4] ], val[5]) - - result -end - -def _reduce_330(val, _values, result) - result = @builder.not_op(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_331(val, _values, result) - result = @builder.not_op(val[0], val[1], nil, val[2]) - - result -end - -def _reduce_332(val, _values, result) - method_call = @builder.call_method(nil, nil, val[0]) - - begin_t, args, body, end_t = val[1] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -# reduce 333 omitted - -def _reduce_334(val, _values, result) - begin_t, args, body, end_t = val[1] - result = @builder.block(val[0], - begin_t, args, body, end_t) - - result -end - -# reduce 335 omitted - -def _reduce_336(val, _values, result) - else_t, else_ = val[4] - result = @builder.condition(val[0], val[1], val[2], - val[3], else_t, - else_, val[5]) - - result -end - -def _reduce_337(val, _values, result) - else_t, else_ = val[4] - result = @builder.condition(val[0], val[1], val[2], - else_, else_t, - val[3], val[5]) - - result -end - -def _reduce_338(val, _values, result) - result = @builder.loop(:while, val[0], *val[1], val[2], val[3]) - - result -end - -def _reduce_339(val, _values, result) - result = @builder.loop(:until, val[0], *val[1], val[2], val[3]) - - result -end - -def _reduce_340(val, _values, result) - *when_bodies, (else_t, else_body) = *val[3] - - result = @builder.case(val[0], val[1], - when_bodies, else_t, else_body, - val[4]) - - result -end - -def _reduce_341(val, _values, result) - *when_bodies, (else_t, else_body) = *val[2] - - result = @builder.case(val[0], nil, - when_bodies, else_t, else_body, - val[3]) - - result -end - -def _reduce_342(val, _values, result) - *in_bodies, (else_t, else_body) = *val[3] - - result = @builder.case_match(val[0], val[1], - in_bodies, else_t, else_body, - val[4]) - - result -end - -def _reduce_343(val, _values, result) - result = @builder.for(val[0], val[1], val[2], *val[3], val[4], val[5]) - - result -end - -def _reduce_344(val, _values, result) - @context.in_class = true - local_push - - result -end - -def _reduce_345(val, _values, result) - k_class, ctx = val[0] - if @context.in_def - diagnostic :error, :class_in_def, nil, k_class - end - lt_t, superclass = val[2] - result = @builder.def_class(k_class, val[1], - lt_t, superclass, - val[4], val[5]) - - local_pop - @context.in_class = ctx.in_class - - result -end - -def _reduce_346(val, _values, result) - @context.in_def = false - @context.in_class = false - local_push - - result -end - -def _reduce_347(val, _values, result) - k_class, ctx = val[0] - result = @builder.def_sclass(k_class, val[1], val[2], - val[5], val[6]) - - local_pop - @context.in_def = ctx.in_def - @context.in_class = ctx.in_class - - result -end - -def _reduce_348(val, _values, result) - @context.in_class = true - local_push - - result -end - -def _reduce_349(val, _values, result) - k_mod, ctx = val[0] - if @context.in_def - diagnostic :error, :module_in_def, nil, k_mod - end - result = @builder.def_module(k_mod, val[1], - val[3], val[4]) - - local_pop - @context.in_class = ctx.in_class - - result -end - -def _reduce_350(val, _values, result) - def_t, (name_t, ctx) = val[0] - result = @builder.def_method(def_t, name_t, val[1], - val[2], val[3]) - - local_pop - @current_arg_stack.pop - @context.in_def = ctx.in_def - - result -end - -def _reduce_351(val, _values, result) - def_t, recv, dot_t, (name_t, ctx) = val[0] - result = @builder.def_singleton(def_t, recv, dot_t, name_t, val[1], - val[2], val[3]) - - local_pop - @current_arg_stack.pop - @context.in_def = ctx.in_def - - result -end - -def _reduce_352(val, _values, result) - result = @builder.keyword_cmd(:break, val[0]) - - result -end - -def _reduce_353(val, _values, result) - result = @builder.keyword_cmd(:next, val[0]) - - result -end - -def _reduce_354(val, _values, result) - result = @builder.keyword_cmd(:redo, val[0]) - - result -end - -def _reduce_355(val, _values, result) - result = @builder.keyword_cmd(:retry, val[0]) - - result -end - -# reduce 356 omitted - -def _reduce_357(val, _values, result) - result = [ val[0], @context.dup ] - - result -end - -def _reduce_358(val, _values, result) - result = [ val[0], @context.dup ] - - result -end - -def _reduce_359(val, _values, result) - result = val[0] - @context.in_argdef = true - - result -end - -def _reduce_360(val, _values, result) - if @context.in_class && !@context.in_def && !(context.in_block || context.in_lambda) - diagnostic :error, :invalid_return, nil, val[0] - end - - result -end - -# reduce 361 omitted - -# reduce 362 omitted - -def _reduce_363(val, _values, result) - result = val[1] - - result -end - -# reduce 364 omitted - -# reduce 365 omitted - -# reduce 366 omitted - -def _reduce_367(val, _values, result) - else_t, else_ = val[4] - result = [ val[0], - @builder.condition(val[0], val[1], val[2], - val[3], else_t, - else_, nil), - ] - - result -end - -# reduce 368 omitted - -def _reduce_369(val, _values, result) - result = val - - result -end - -# reduce 370 omitted - -# reduce 371 omitted - -def _reduce_372(val, _values, result) - result = @builder.arg(val[0]) - - result -end - -def _reduce_373(val, _values, result) - result = @builder.multi_lhs(val[0], val[1], val[2]) - - result -end - -def _reduce_374(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_375(val, _values, result) - result = val[0] << val[2] - - result -end - -# reduce 376 omitted - -def _reduce_377(val, _values, result) - result = val[0]. - push(val[2]) - - result -end - -def _reduce_378(val, _values, result) - result = val[0]. - push(val[2]). - concat(val[4]) - - result -end - -def _reduce_379(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_380(val, _values, result) - result = [ val[0], *val[2] ] - - result -end - -def _reduce_381(val, _values, result) - result = @builder.restarg(val[0], val[1]) - - result -end - -def _reduce_382(val, _values, result) - result = @builder.restarg(val[0]) - - result -end - -# reduce 383 omitted - -# reduce 384 omitted - -def _reduce_385(val, _values, result) - @context.in_argdef = false - - result -end - -def _reduce_386(val, _values, result) - result = val[1] - - result -end - -def _reduce_387(val, _values, result) - result = val[0].concat(val[2]).concat(val[3]) - - result -end - -def _reduce_388(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_389(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_390(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_391(val, _values, result) - result = val[1] - - result -end - -def _reduce_392(val, _values, result) - result = [] - - result -end - -# reduce 393 omitted - -def _reduce_394(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_395(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[6]). - concat(val[7]) - - result -end - -def _reduce_396(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_397(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_398(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -# reduce 399 omitted - -def _reduce_400(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_401(val, _values, result) - if val[1].empty? && val[0].size == 1 - result = [@builder.procarg0(val[0][0])] - else - result = val[0].concat(val[1]) - end - - result -end - -def _reduce_402(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_403(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_404(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_405(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_406(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_407(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -# reduce 408 omitted - -def _reduce_409(val, _values, result) - result = @builder.args(nil, [], nil) - - result -end - -def _reduce_410(val, _values, result) - @lexer.state = :expr_value - - result -end - -def _reduce_411(val, _values, result) - @max_numparam_stack.has_ordinary_params! - @current_arg_stack.set(nil) - @context.in_argdef = false - result = @builder.args(val[0], val[1], val[2]) - - result -end - -def _reduce_412(val, _values, result) - @max_numparam_stack.has_ordinary_params! - @current_arg_stack.set(nil) - @context.in_argdef = false - result = @builder.args(val[0], val[1].concat(val[2]), val[3]) - - result -end - -def _reduce_413(val, _values, result) - result = [] - - result -end - -def _reduce_414(val, _values, result) - result = val[2] - - result -end - -def _reduce_415(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_416(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_417(val, _values, result) - @static_env.declare val[0][0] - result = @builder.shadowarg(val[0]) - - result -end - -# reduce 418 omitted - -def _reduce_419(val, _values, result) - @static_env.extend_dynamic - @max_numparam_stack.push(static: false) - result = @context.dup - @context.in_lambda = true - - result -end - -def _reduce_420(val, _values, result) - @lexer.cmdarg.push(false) - - result -end - -def _reduce_421(val, _values, result) - lambda_call = @builder.call_lambda(val[0]) - args = @max_numparam_stack.has_numparams? ? @builder.numargs(@max_numparam_stack.top) : val[2] - begin_t, body, end_t = val[4] - - @max_numparam_stack.pop - @static_env.unextend - @lexer.cmdarg.pop - @context.in_lambda = val[1].in_lambda - - result = @builder.block(lambda_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_422(val, _values, result) - @context.in_argdef = false - @max_numparam_stack.has_ordinary_params! - result = @builder.args(val[0], val[1].concat(val[2]), val[3]) - - result -end - -def _reduce_423(val, _values, result) - @context.in_argdef = false - if val[0].any? - @max_numparam_stack.has_ordinary_params! - end - result = @builder.args(nil, val[0], nil) - - result -end - -def _reduce_424(val, _values, result) - result = @context.dup - @context.in_lambda = true - - result -end - -def _reduce_425(val, _values, result) - @context.in_lambda = val[1].in_lambda - result = [ val[0], val[2], val[3] ] - - result -end - -def _reduce_426(val, _values, result) - result = @context.dup - @context.in_lambda = true - - result -end - -def _reduce_427(val, _values, result) - @context.in_lambda = val[1].in_lambda - result = [ val[0], val[2], val[3] ] - - result -end - -def _reduce_428(val, _values, result) - result = @context.dup - @context.in_block = true - - result -end - -def _reduce_429(val, _values, result) - @context.in_block = val[1].in_block - result = [ val[0], *val[2], val[3] ] - - result -end - -def _reduce_430(val, _values, result) - begin_t, block_args, body, end_t = val[1] - result = @builder.block(val[0], - begin_t, block_args, body, end_t) - - result -end - -def _reduce_431(val, _values, result) - lparen_t, args, rparen_t = val[3] - result = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - result -end - -def _reduce_432(val, _values, result) - lparen_t, args, rparen_t = val[3] - method_call = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - begin_t, args, body, end_t = val[4] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_433(val, _values, result) - method_call = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - begin_t, args, body, end_t = val[4] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_434(val, _values, result) - lparen_t, args, rparen_t = val[1] - result = @builder.call_method(nil, nil, val[0], - lparen_t, args, rparen_t) - - result -end - -def _reduce_435(val, _values, result) - lparen_t, args, rparen_t = val[3] - result = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - result -end - -def _reduce_436(val, _values, result) - lparen_t, args, rparen_t = val[3] - result = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - result -end - -def _reduce_437(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2]) - - result -end - -def _reduce_438(val, _values, result) - lparen_t, args, rparen_t = val[2] - result = @builder.call_method(val[0], val[1], nil, - lparen_t, args, rparen_t) - - result -end - -def _reduce_439(val, _values, result) - lparen_t, args, rparen_t = val[2] - result = @builder.call_method(val[0], val[1], nil, - lparen_t, args, rparen_t) - - result -end - -def _reduce_440(val, _values, result) - lparen_t, args, rparen_t = val[1] - result = @builder.keyword_cmd(:super, val[0], - lparen_t, args, rparen_t) - - result -end - -def _reduce_441(val, _values, result) - result = @builder.keyword_cmd(:zsuper, val[0]) - - result -end - -def _reduce_442(val, _values, result) - result = @builder.index(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_443(val, _values, result) - result = @context.dup - @context.in_block = true - - result -end - -def _reduce_444(val, _values, result) - @context.in_block = val[1].in_block - result = [ val[0], *val[2], val[3] ] - - result -end - -def _reduce_445(val, _values, result) - result = @context.dup - @context.in_block = true - - result -end - -def _reduce_446(val, _values, result) - @context.in_block = val[1].in_block - result = [ val[0], *val[2], val[3] ] - - result -end - -def _reduce_447(val, _values, result) - @static_env.extend_dynamic - @max_numparam_stack.push(static: false) - - result -end - -def _reduce_448(val, _values, result) - args = @max_numparam_stack.has_numparams? ? @builder.numargs(@max_numparam_stack.top) : val[1] - result = [ args, val[2] ] - - @max_numparam_stack.pop - @static_env.unextend - - result -end - -def _reduce_449(val, _values, result) - @static_env.extend_dynamic - @max_numparam_stack.push(static: false) - - result -end - -def _reduce_450(val, _values, result) - @lexer.cmdarg.push(false) - - result -end - -def _reduce_451(val, _values, result) - args = @max_numparam_stack.has_numparams? ? @builder.numargs(@max_numparam_stack.top) : val[2] - result = [ args, val[3] ] - - @max_numparam_stack.pop - @static_env.unextend - @lexer.cmdarg.pop - - result -end - -def _reduce_452(val, _values, result) - result = [ @builder.when(val[0], val[1], val[2], val[3]), - *val[4] ] - - result -end - -def _reduce_453(val, _values, result) - result = [ val[0] ] - - result -end - -# reduce 454 omitted - -def _reduce_455(val, _values, result) - @lexer.state = :expr_beg - @lexer.command_start = false - @pattern_variables.push - @pattern_hash_keys.push - - result = @context.in_kwarg - @context.in_kwarg = true - - result -end - -def _reduce_456(val, _values, result) - @pattern_variables.pop - @pattern_hash_keys.pop - @context.in_kwarg = val[1] - - result -end - -def _reduce_457(val, _values, result) - result = [ @builder.in_pattern(val[0], *val[2], val[3], val[5]), - *val[6] ] - - result -end - -def _reduce_458(val, _values, result) - result = [ val[0] ] - - result -end - -# reduce 459 omitted - -def _reduce_460(val, _values, result) - result = [ val[0], nil ] - - result -end - -def _reduce_461(val, _values, result) - result = [ val[0], @builder.if_guard(val[1], val[2]) ] - - result -end - -def _reduce_462(val, _values, result) - result = [ val[0], @builder.unless_guard(val[1], val[2]) ] - - result -end - -# reduce 463 omitted - -def _reduce_464(val, _values, result) - # array patterns that end with comma - # like 1, 2, - # must be emitted as `array_pattern_with_tail` - item = @builder.match_with_trailing_comma(val[0], val[1]) - result = @builder.array_pattern(nil, [ item ], nil) - - result -end - -def _reduce_465(val, _values, result) - result = @builder.array_pattern(nil, [val[0]].concat(val[2]), nil) - - result -end - -def _reduce_466(val, _values, result) - result = @builder.find_pattern(nil, val[0], nil) - - result -end - -def _reduce_467(val, _values, result) - result = @builder.array_pattern(nil, val[0], nil) - - result -end - -def _reduce_468(val, _values, result) - result = @builder.hash_pattern(nil, val[0], nil) - - result -end - -# reduce 469 omitted - -def _reduce_470(val, _values, result) - result = @builder.match_as(val[0], val[1], val[2]) - - result -end - -# reduce 471 omitted - -def _reduce_472(val, _values, result) - result = @builder.match_alt(val[0], val[1], val[2]) - - result -end - -# reduce 473 omitted - -def _reduce_474(val, _values, result) - result = val[0] - @pattern_hash_keys.push - - result -end - -def _reduce_475(val, _values, result) - result = val[0] - @pattern_hash_keys.push - - result -end - -# reduce 476 omitted - -# reduce 477 omitted - -def _reduce_478(val, _values, result) - @pattern_hash_keys.pop - pattern = @builder.array_pattern(nil, val[2], nil) - result = @builder.const_pattern(val[0], val[1], pattern, val[3]) - - result -end - -def _reduce_479(val, _values, result) - @pattern_hash_keys.pop - pattern = @builder.find_pattern(nil, val[2], nil) - result = @builder.const_pattern(val[0], val[1], pattern, val[3]) - - result -end - -def _reduce_480(val, _values, result) - @pattern_hash_keys.pop - pattern = @builder.hash_pattern(nil, val[2], nil) - result = @builder.const_pattern(val[0], val[1], pattern, val[3]) - - result -end - -def _reduce_481(val, _values, result) - pattern = @builder.array_pattern(val[1], nil, val[2]) - result = @builder.const_pattern(val[0], val[1], pattern, val[2]) - - result -end - -def _reduce_482(val, _values, result) - @pattern_hash_keys.pop - pattern = @builder.array_pattern(nil, val[2], nil) - result = @builder.const_pattern(val[0], val[1], pattern, val[3]) - - result -end - -def _reduce_483(val, _values, result) - @pattern_hash_keys.pop - pattern = @builder.find_pattern(nil, val[2], nil) - result = @builder.const_pattern(val[0], val[1], pattern, val[3]) - - result -end - -def _reduce_484(val, _values, result) - @pattern_hash_keys.pop - pattern = @builder.hash_pattern(nil, val[2], nil) - result = @builder.const_pattern(val[0], val[1], pattern, val[3]) - - result -end - -def _reduce_485(val, _values, result) - pattern = @builder.array_pattern(val[1], nil, val[2]) - result = @builder.const_pattern(val[0], val[1], pattern, val[2]) - - result -end - -def _reduce_486(val, _values, result) - result = @builder.array_pattern(val[0], val[1], val[2]) - - result -end - -def _reduce_487(val, _values, result) - result = @builder.find_pattern(val[0], val[1], val[2]) - - result -end - -def _reduce_488(val, _values, result) - result = @builder.array_pattern(val[0], [], val[1]) - - result -end - -def _reduce_489(val, _values, result) - @pattern_hash_keys.push - result = @context.in_kwarg - @context.in_kwarg = false - - result -end - -def _reduce_490(val, _values, result) - @pattern_hash_keys.pop - @context.in_kwarg = val[1] - result = @builder.hash_pattern(val[0], val[2], val[3]) - - result -end - -def _reduce_491(val, _values, result) - result = @builder.hash_pattern(val[0], [], val[1]) - - result -end - -def _reduce_492(val, _values, result) - @pattern_hash_keys.push - - result -end - -def _reduce_493(val, _values, result) - @pattern_hash_keys.pop - result = @builder.begin(val[0], val[2], val[3]) - - result -end - -def _reduce_494(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_495(val, _values, result) - result = val[0] - - result -end - -def _reduce_496(val, _values, result) - result = [ *val[0], val[1] ] - - result -end - -def _reduce_497(val, _values, result) - match_rest = @builder.match_rest(val[1], val[2]) - result = [ *val[0], match_rest ] - - result -end - -def _reduce_498(val, _values, result) - match_rest = @builder.match_rest(val[1], val[2]) - result = [ *val[0], match_rest, *val[4] ] - - result -end - -def _reduce_499(val, _values, result) - result = [ *val[0], @builder.match_rest(val[1]) ] - - result -end - -def _reduce_500(val, _values, result) - result = [ *val[0], @builder.match_rest(val[1]), *val[3] ] - - result -end - -# reduce 501 omitted - -def _reduce_502(val, _values, result) - # array patterns that end with comma - # like [1, 2,] - # must be emitted as `array_pattern_with_tail` - item = @builder.match_with_trailing_comma(val[0], val[1]) - result = [ item ] - - result -end - -def _reduce_503(val, _values, result) - # array patterns that end with comma - # like [1, 2,] - # must be emitted as `array_pattern_with_tail` - last_item = @builder.match_with_trailing_comma(val[1], val[2]) - result = [ *val[0], last_item ] - - result -end - -def _reduce_504(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_505(val, _values, result) - result = [ val[0], *val[2] ] - - result -end - -def _reduce_506(val, _values, result) - result = [ val[0], *val[2], val[4] ] - - result -end - -def _reduce_507(val, _values, result) - result = @builder.match_rest(val[0], val[1]) - - result -end - -def _reduce_508(val, _values, result) - result = @builder.match_rest(val[0]) - - result -end - -def _reduce_509(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_510(val, _values, result) - result = [ *val[0], val[2] ] - - result -end - -# reduce 511 omitted - -def _reduce_512(val, _values, result) - result = [ *val[0], *val[2] ] - - result -end - -def _reduce_513(val, _values, result) - result = val[0] - - result -end - -def _reduce_514(val, _values, result) - result = val[0] - - result -end - -def _reduce_515(val, _values, result) - result = val[0] - - result -end - -def _reduce_516(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_517(val, _values, result) - result = [ *val[0], val[2] ] - - result -end - -def _reduce_518(val, _values, result) - result = @builder.match_pair(*val[0], val[1]) - - result -end - -def _reduce_519(val, _values, result) - result = @builder.match_label(*val[0]) - - result -end - -def _reduce_520(val, _values, result) - result = [:label, val[0]] - - result -end - -def _reduce_521(val, _values, result) - result = [:quoted, [val[0], val[1], val[2]]] - - result -end - -def _reduce_522(val, _values, result) - result = [ @builder.match_rest(val[0], val[1]) ] - - result -end - -def _reduce_523(val, _values, result) - result = [ @builder.match_rest(val[0], nil) ] - - result -end - -def _reduce_524(val, _values, result) - result = [ @builder.match_nil_pattern(val[0], val[1]) ] - - result -end - -# reduce 525 omitted - -# reduce 526 omitted - -# reduce 527 omitted - -def _reduce_528(val, _values, result) - result = @builder.range_inclusive(val[0], val[1], val[2]) - - result -end - -def _reduce_529(val, _values, result) - result = @builder.range_exclusive(val[0], val[1], val[2]) - - result -end - -def _reduce_530(val, _values, result) - result = @builder.range_inclusive(val[0], val[1], nil) - - result -end - -def _reduce_531(val, _values, result) - result = @builder.range_exclusive(val[0], val[1], nil) - - result -end - -# reduce 532 omitted - -# reduce 533 omitted - -# reduce 534 omitted - -def _reduce_535(val, _values, result) - result = @builder.range_inclusive(nil, val[0], val[1]) - - result -end - -def _reduce_536(val, _values, result) - result = @builder.range_exclusive(nil, val[0], val[1]) - - result -end - -# reduce 537 omitted - -# reduce 538 omitted - -# reduce 539 omitted - -# reduce 540 omitted - -# reduce 541 omitted - -# reduce 542 omitted - -# reduce 543 omitted - -# reduce 544 omitted - -def _reduce_545(val, _values, result) - result = @builder.accessible(val[0]) - - result -end - -# reduce 546 omitted - -def _reduce_547(val, _values, result) - result = @builder.assignable(@builder.match_var(val[0])) - - result -end - -def _reduce_548(val, _values, result) - name = val[1][0] - unless static_env.declared?(name) - diagnostic :error, :undefined_lvar, { :name => name }, val[1] - end - - lvar = @builder.accessible(@builder.ident(val[1])) - result = @builder.pin(val[0], lvar) - - result -end - -def _reduce_549(val, _values, result) - non_lvar = @builder.accessible(val[1]) - result = @builder.pin(val[0], non_lvar) - - result -end - -def _reduce_550(val, _values, result) - expr = @builder.begin(val[1], val[2], val[3]) - result = @builder.pin(val[0], expr) - - result -end - -def _reduce_551(val, _values, result) - result = @builder.const_global(val[0], val[1]) - - result -end - -def _reduce_552(val, _values, result) - result = @builder.const_fetch(val[0], val[1], val[2]) - - result -end - -def _reduce_553(val, _values, result) - result = @builder.const(val[0]) - - result -end - -def _reduce_554(val, _values, result) - assoc_t, exc_var = val[2] - - if val[1] - exc_list = @builder.array(nil, val[1], nil) - end - - result = [ @builder.rescue_body(val[0], - exc_list, assoc_t, exc_var, - val[3], val[4]), - *val[5] ] - - result -end - -def _reduce_555(val, _values, result) - result = [] - - result -end - -def _reduce_556(val, _values, result) - result = [ val[0] ] - - result -end - -# reduce 557 omitted - -# reduce 558 omitted - -def _reduce_559(val, _values, result) - result = [ val[0], val[1] ] - - result -end - -# reduce 560 omitted - -def _reduce_561(val, _values, result) - result = [ val[0], val[1] ] - - result -end - -# reduce 562 omitted - -# reduce 563 omitted - -# reduce 564 omitted - -def _reduce_565(val, _values, result) - result = @builder.string_compose(nil, val[0], nil) - - result -end - -def _reduce_566(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_567(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_568(val, _values, result) - string = @builder.string_compose(val[0], val[1], val[2]) - result = @builder.dedent_string(string, @lexer.dedent_level) - - result -end - -def _reduce_569(val, _values, result) - string = @builder.string(val[0]) - result = @builder.dedent_string(string, @lexer.dedent_level) - - result -end - -def _reduce_570(val, _values, result) - result = @builder.character(val[0]) - - result -end - -def _reduce_571(val, _values, result) - string = @builder.xstring_compose(val[0], val[1], val[2]) - result = @builder.dedent_string(string, @lexer.dedent_level) - - result -end - -def _reduce_572(val, _values, result) - opts = @builder.regexp_options(val[3]) - result = @builder.regexp_compose(val[0], val[1], val[2], opts) - - result -end - -def _reduce_573(val, _values, result) - result = @builder.words_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_574(val, _values, result) - result = [] - - result -end - -def _reduce_575(val, _values, result) - result = val[0] << @builder.word(val[1]) - - result -end - -def _reduce_576(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_577(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_578(val, _values, result) - result = @builder.symbols_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_579(val, _values, result) - result = [] - - result -end - -def _reduce_580(val, _values, result) - result = val[0] << @builder.word(val[1]) - - result -end - -def _reduce_581(val, _values, result) - result = @builder.words_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_582(val, _values, result) - result = @builder.symbols_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_583(val, _values, result) - result = [] - - result -end - -def _reduce_584(val, _values, result) - result = val[0] << @builder.string_internal(val[1]) - - result -end - -def _reduce_585(val, _values, result) - result = [] - - result -end - -def _reduce_586(val, _values, result) - result = val[0] << @builder.symbol_internal(val[1]) - - result -end - -def _reduce_587(val, _values, result) - result = [] - - result -end - -def _reduce_588(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_589(val, _values, result) - result = [] - - result -end - -def _reduce_590(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_591(val, _values, result) - result = [] - - result -end - -def _reduce_592(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_593(val, _values, result) - result = @builder.string_internal(val[0]) - - result -end - -def _reduce_594(val, _values, result) - result = val[1] - - result -end - -def _reduce_595(val, _values, result) - @lexer.cmdarg.push(false) - @lexer.cond.push(false) - - result -end - -def _reduce_596(val, _values, result) - @lexer.cmdarg.pop - @lexer.cond.pop - - result = @builder.begin(val[0], val[2], val[3]) - - result -end - -def _reduce_597(val, _values, result) - result = @builder.gvar(val[0]) - - result -end - -def _reduce_598(val, _values, result) - result = @builder.ivar(val[0]) - - result -end - -def _reduce_599(val, _values, result) - result = @builder.cvar(val[0]) - - result -end - -# reduce 600 omitted - -# reduce 601 omitted - -# reduce 602 omitted - -def _reduce_603(val, _values, result) - @lexer.state = :expr_end - result = @builder.symbol(val[0]) - - result -end - -def _reduce_604(val, _values, result) - @lexer.state = :expr_end - result = @builder.symbol_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_605(val, _values, result) - result = val[0] - - result -end - -def _reduce_606(val, _values, result) - if @builder.respond_to? :negate - # AST builder interface compatibility - result = @builder.negate(val[0], val[1]) - else - result = @builder.unary_num(val[0], val[1]) - end - - result -end - -def _reduce_607(val, _values, result) - @lexer.state = :expr_end - result = @builder.integer(val[0]) - - result -end - -def _reduce_608(val, _values, result) - @lexer.state = :expr_end - result = @builder.float(val[0]) - - result -end - -def _reduce_609(val, _values, result) - @lexer.state = :expr_end - result = @builder.rational(val[0]) - - result -end - -def _reduce_610(val, _values, result) - @lexer.state = :expr_end - result = @builder.complex(val[0]) - - result -end - -def _reduce_611(val, _values, result) - result = @builder.ivar(val[0]) - - result -end - -def _reduce_612(val, _values, result) - result = @builder.gvar(val[0]) - - result -end - -def _reduce_613(val, _values, result) - result = @builder.cvar(val[0]) - - result -end - -def _reduce_614(val, _values, result) - result = @builder.ident(val[0]) - - result -end - -def _reduce_615(val, _values, result) - result = @builder.ivar(val[0]) - - result -end - -def _reduce_616(val, _values, result) - result = @builder.gvar(val[0]) - - result -end - -def _reduce_617(val, _values, result) - result = @builder.const(val[0]) - - result -end - -def _reduce_618(val, _values, result) - result = @builder.cvar(val[0]) - - result -end - -def _reduce_619(val, _values, result) - result = @builder.nil(val[0]) - - result -end - -def _reduce_620(val, _values, result) - result = @builder.self(val[0]) - - result -end - -def _reduce_621(val, _values, result) - result = @builder.true(val[0]) - - result -end - -def _reduce_622(val, _values, result) - result = @builder.false(val[0]) - - result -end - -def _reduce_623(val, _values, result) - result = @builder.__FILE__(val[0]) - - result -end - -def _reduce_624(val, _values, result) - result = @builder.__LINE__(val[0]) - - result -end - -def _reduce_625(val, _values, result) - result = @builder.__ENCODING__(val[0]) - - result -end - -def _reduce_626(val, _values, result) - result = @builder.accessible(val[0]) - - result -end - -def _reduce_627(val, _values, result) - result = @builder.accessible(val[0]) - - result -end - -def _reduce_628(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_629(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_630(val, _values, result) - result = @builder.nth_ref(val[0]) - - result -end - -def _reduce_631(val, _values, result) - result = @builder.back_ref(val[0]) - - result -end - -def _reduce_632(val, _values, result) - @lexer.state = :expr_value - - result -end - -def _reduce_633(val, _values, result) - result = [ val[0], val[2] ] - - result -end - -def _reduce_634(val, _values, result) - result = nil - - result -end - -# reduce 635 omitted - -def _reduce_636(val, _values, result) - @context.in_argdef = false - result = @builder.args(nil, [], nil) - - result -end - -def _reduce_637(val, _values, result) - result = @builder.args(val[0], val[1], val[2]) - - @lexer.state = :expr_value - @context.in_argdef = false - - result -end - -# reduce 638 omitted - -def _reduce_639(val, _values, result) - result = @context.dup - @context.in_kwarg = true - @context.in_argdef = true - - result -end - -def _reduce_640(val, _values, result) - @context.in_kwarg = val[0].in_kwarg - @context.in_argdef = false - result = @builder.args(nil, val[1], nil) - - result -end - -def _reduce_641(val, _values, result) - result = val[0].concat(val[2]).concat(val[3]) - - result -end - -def _reduce_642(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_643(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_644(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_645(val, _values, result) - @static_env.declare_forward_args - result = [ @builder.forward_arg(val[0]) ] - - result -end - -def _reduce_646(val, _values, result) - result = val[1] - - result -end - -def _reduce_647(val, _values, result) - result = [] - - result -end - -def _reduce_648(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_649(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[6]). - concat(val[7]) - - result -end - -def _reduce_650(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_651(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_652(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_653(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_654(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_655(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_656(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_657(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_658(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_659(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_660(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_661(val, _values, result) - result = val[0] - - result -end - -def _reduce_662(val, _values, result) - result = [] - - result -end - -def _reduce_663(val, _values, result) - result = val[0] - - result -end - -def _reduce_664(val, _values, result) - diagnostic :error, :argument_const, nil, val[0] - - result -end - -def _reduce_665(val, _values, result) - diagnostic :error, :argument_ivar, nil, val[0] - - result -end - -def _reduce_666(val, _values, result) - diagnostic :error, :argument_gvar, nil, val[0] - - result -end - -def _reduce_667(val, _values, result) - diagnostic :error, :argument_cvar, nil, val[0] - - result -end - -# reduce 668 omitted - -def _reduce_669(val, _values, result) - @static_env.declare val[0][0] - - @max_numparam_stack.has_ordinary_params! - - result = val[0] - - result -end - -def _reduce_670(val, _values, result) - @current_arg_stack.set(val[0][0]) - result = val[0] - - result -end - -def _reduce_671(val, _values, result) - @current_arg_stack.set(0) - result = @builder.arg(val[0]) - - result -end - -def _reduce_672(val, _values, result) - result = @builder.multi_lhs(val[0], val[1], val[2]) - - result -end - -def _reduce_673(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_674(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_675(val, _values, result) - check_kwarg_name(val[0]) - - @static_env.declare val[0][0] - - @max_numparam_stack.has_ordinary_params! - - @current_arg_stack.set(val[0][0]) - @context.in_argdef = false - - result = val[0] - - result -end - -def _reduce_676(val, _values, result) - @current_arg_stack.set(nil) - @context.in_argdef = true - result = @builder.kwoptarg(val[0], val[1]) - - result -end - -def _reduce_677(val, _values, result) - @current_arg_stack.set(nil) - @context.in_argdef = true - result = @builder.kwarg(val[0]) - - result -end - -def _reduce_678(val, _values, result) - @context.in_argdef = true - result = @builder.kwoptarg(val[0], val[1]) - - result -end - -def _reduce_679(val, _values, result) - @context.in_argdef = true - result = @builder.kwarg(val[0]) - - result -end - -def _reduce_680(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_681(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_682(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_683(val, _values, result) - result = val[0] << val[2] - - result -end - -# reduce 684 omitted - -# reduce 685 omitted - -def _reduce_686(val, _values, result) - result = [ @builder.kwnilarg(val[0], val[1]) ] - - result -end - -def _reduce_687(val, _values, result) - @static_env.declare val[1][0] - - result = [ @builder.kwrestarg(val[0], val[1]) ] - - result -end - -def _reduce_688(val, _values, result) - result = [ @builder.kwrestarg(val[0]) ] - - result -end - -def _reduce_689(val, _values, result) - @current_arg_stack.set(0) - @context.in_argdef = true - result = @builder.optarg(val[0], val[1], val[2]) - - result -end - -def _reduce_690(val, _values, result) - @current_arg_stack.set(0) - @context.in_argdef = true - result = @builder.optarg(val[0], val[1], val[2]) - - result -end - -def _reduce_691(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_692(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_693(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_694(val, _values, result) - result = val[0] << val[2] - - result -end - -# reduce 695 omitted - -# reduce 696 omitted - -def _reduce_697(val, _values, result) - @static_env.declare val[1][0] - - result = [ @builder.restarg(val[0], val[1]) ] - - result -end - -def _reduce_698(val, _values, result) - result = [ @builder.restarg(val[0]) ] - - result -end - -# reduce 699 omitted - -# reduce 700 omitted - -def _reduce_701(val, _values, result) - @static_env.declare val[1][0] - - result = @builder.blockarg(val[0], val[1]) - - result -end - -def _reduce_702(val, _values, result) - @static_env.declare_anonymous_blockarg - - result = @builder.blockarg(val[0], nil) - - result -end - -def _reduce_703(val, _values, result) - result = [ val[1] ] - - result -end - -def _reduce_704(val, _values, result) - result = [] - - result -end - -# reduce 705 omitted - -def _reduce_706(val, _values, result) - result = val[1] - - result -end - -def _reduce_707(val, _values, result) - result = [] - - result -end - -# reduce 708 omitted - -def _reduce_709(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_710(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_711(val, _values, result) - result = @builder.pair(val[0], val[1], val[2]) - - result -end - -def _reduce_712(val, _values, result) - result = @builder.pair_keyword(val[0], val[1]) - - result -end - -def _reduce_713(val, _values, result) - result = @builder.pair_label(val[0]) - - result -end - -def _reduce_714(val, _values, result) - result = @builder.pair_quoted(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_715(val, _values, result) - result = @builder.kwsplat(val[0], val[1]) - - result -end - -# reduce 716 omitted - -# reduce 717 omitted - -# reduce 718 omitted - -# reduce 719 omitted - -# reduce 720 omitted - -# reduce 721 omitted - -# reduce 722 omitted - -# reduce 723 omitted - -# reduce 724 omitted - -# reduce 725 omitted - -# reduce 726 omitted - -# reduce 727 omitted - -def _reduce_728(val, _values, result) - result = [:dot, val[0][1]] - - result -end - -def _reduce_729(val, _values, result) - result = [:anddot, val[0][1]] - - result -end - -# reduce 730 omitted - -# reduce 731 omitted - -# reduce 732 omitted - -# reduce 733 omitted - -def _reduce_734(val, _values, result) - result = val[1] - - result -end - -def _reduce_735(val, _values, result) - result = val[1] - - result -end - -def _reduce_736(val, _values, result) - result = val[1] - - result -end - -# reduce 737 omitted - -# reduce 738 omitted - -# reduce 739 omitted - -def _reduce_740(val, _values, result) - yyerrok - - result -end - -# reduce 741 omitted - -# reduce 742 omitted - -# reduce 743 omitted - -def _reduce_744(val, _values, result) - result = nil - - result -end - -def _reduce_none(val, _values, result) - val[0] -end - - end # class Ruby31 -end # module Parser diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ruby32.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ruby32.rb deleted file mode 100644 index 4d5cf554..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ruby32.rb +++ /dev/null @@ -1,12704 +0,0 @@ -# -*- encoding:utf-8; warn-indent:false; frozen_string_literal: true -*- -# -# DO NOT MODIFY!!!! -# This file is automatically generated by Racc 1.7.3 -# from Racc grammar file "ruby32.y". -# - -require 'racc/parser.rb' - - -require 'parser' - -module Parser - class Ruby32 < Parser::Base - - - def version - 32 - end - - def default_encoding - Encoding::UTF_8 - end - - def endless_method_name(name_t) - if !%w[=== == != <= >=].include?(name_t[0]) && name_t[0].end_with?('=') - diagnostic :error, :endless_setter, nil, name_t - end - end - - def local_push - @static_env.extend_static - @lexer.cmdarg.push(false) - @lexer.cond.push(false) - @max_numparam_stack.push(static: true) - end - - def local_pop - @static_env.unextend - @lexer.cmdarg.pop - @lexer.cond.pop - @max_numparam_stack.pop - end - - def try_declare_numparam(node) - name = node.children[0] - - if name =~ /\A_[1-9]\z/ && !static_env.declared?(name) && @context.in_dynamic_block? - # definitely an implicit param - location = node.loc.expression - - if max_numparam_stack.has_ordinary_params? - diagnostic :error, :ordinary_param_defined, nil, [nil, location] - end - - raw_max_numparam_stack = max_numparam_stack.stack.dup - # ignore current block scope - raw_max_numparam_stack.pop - - raw_max_numparam_stack.reverse_each do |outer_scope| - if outer_scope[:static] - # found an outer scope that can't have numparams - # like def/class/etc - break - else - outer_scope_has_numparams = outer_scope[:value] > 0 - - if outer_scope_has_numparams - diagnostic :error, :numparam_used_in_outer_scope, nil, [nil, location] - else - # for now it's ok, but an outer scope can also be a block - # like proc { _1; proc { proc { proc { _2 }} }} - # with numparams, so we need to continue - end - end - end - - static_env.declare(name) - max_numparam_stack.register(name[1].to_i) - - true - else - false - end - end -##### State transition tables begin ### - -racc_action_table = [ - -614, 222, 223, 222, 223, 234, -116, -614, -614, -614, - 928, 623, -614, -614, -614, 228, -614, 312, 240, 664, - 127, 265, 227, 623, -614, 126, -614, -614, -614, 222, - 223, 225, 699, 666, -117, -124, -614, -614, 623, -614, - -614, -614, -614, -614, 623, 623, 623, -116, -117, -729, - 700, -123, 895, 262, -124, 928, 927, 264, 263, 241, - 312, -740, 836, -626, -119, -121, -614, -614, -614, -614, - -614, -614, -614, -614, -614, -614, -614, -614, -614, -614, - 229, 307, -614, -614, -614, 663, -614, -614, 831, 241, - -614, 1000, -118, -614, -614, 241, -614, 241, -614, 665, - -614, -511, -614, -614, 311, -614, -614, -614, -614, -614, - -123, -614, -615, -614, -119, -107, 312, 222, 223, -615, - -615, -615, -116, 241, -615, -615, -615, -614, -615, 127, - -614, -614, -614, -614, 126, -614, -615, -614, -615, -615, - -615, 127, -614, -108, -115, -614, 126, 311, -615, -615, - -121, -615, -615, -615, -615, -615, 127, -120, -118, 989, - -114, 126, 127, 127, 127, -116, -117, 126, 126, 126, - -116, -117, -124, -110, -112, -120, -122, -124, -615, -615, - -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, - -615, -615, 127, -122, -615, -615, -615, 126, -615, -615, - 999, -109, -615, 311, 3, -615, -615, -729, -615, 928, - -615, 127, -615, 651, -615, -615, 126, -615, -615, -615, - -615, -615, -322, -615, 241, -615, 123, -627, -123, -322, - -322, -322, -119, -123, -715, -322, -322, -119, -322, -615, - -715, -716, -615, -615, -615, -615, -322, -615, 228, -615, - 312, 234, 241, 651, -615, 305, 136, -615, -322, -322, - -110, -322, -322, -322, -322, -322, 104, 105, -121, 241, - -716, 219, 614, -121, -112, -120, -118, 653, 652, 525, - -120, -118, 104, 105, -111, -113, -117, 862, -322, -322, - -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, - -322, -322, 220, 228, -322, -322, -322, -740, 690, -322, - 305, -122, -322, 229, 307, -322, -122, 653, 652, 649, - -322, 221, -322, 651, -322, -322, -110, -322, -322, -322, - -322, -322, 238, -322, -720, -322, 699, 311, -124, 603, - -112, -720, -720, -720, 106, 107, -729, -720, -720, -322, - -720, 127, -322, -322, 951, -113, 126, -322, -720, -720, - 106, 107, -109, 922, -322, 224, -110, -122, 229, -110, - -720, -720, 923, -720, -720, -720, -720, -720, -102, -614, - -112, -110, 241, -112, -111, 301, -614, 653, 652, 651, - -88, -124, 685, 651, 127, -112, 234, 864, -123, 126, - -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, - -720, -720, -720, -720, 362, 757, -720, -720, -720, -358, - 691, -720, -119, 363, -720, 502, -358, -720, -109, 686, - 651, -121, -720, 1034, -720, -358, -720, -720, 651, -720, - -720, -720, -720, -720, -614, -720, -720, -720, 241, -715, - -111, -119, -740, 653, 652, 649, 651, 653, 652, 649, - 238, -720, 651, 503, -720, -720, -715, -111, -109, -720, - 803, -109, 651, -720, 1062, 1055, -720, 234, 432, -120, - -720, -720, -720, -109, -358, -720, -720, -720, -121, -720, - -111, 127, -118, -111, 653, 652, 126, -720, -720, -720, - -720, -720, 653, 652, 654, -111, -716, -115, 473, -720, - -720, 1062, -720, -720, -720, -720, -720, -633, -614, -124, - 653, 652, 656, 651, 630, -614, 653, 652, 658, 513, - -715, 878, 836, -740, -614, 524, 653, 652, 662, -720, - -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, - -720, -720, -720, -715, 526, -720, -720, -720, -615, 924, - -720, 222, 223, -720, 636, -615, -720, -720, 637, -720, - -716, -720, 127, -720, -615, -720, -720, 126, -720, -720, - -720, -720, -720, -614, -720, -720, -720, 653, 652, 667, - -118, 228, -615, -716, -622, -621, 282, 283, 522, -615, - -720, -622, -621, -720, -720, -720, -720, 523, -720, -623, - -720, -626, -322, 222, 223, -720, -623, -627, -120, -322, - -322, -322, 527, -615, -322, -322, -322, -620, -322, 895, - 240, 630, 281, 280, -620, -617, -322, 561, -322, -322, - -322, 429, -617, 510, 509, 573, 431, 430, -322, -322, - 603, -322, -322, -322, -322, -322, 229, -615, -107, -622, - -621, -618, -619, 636, -108, 575, 934, 959, -618, -619, - -116, 930, 577, 636, -623, 931, -117, 959, -322, -322, - -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, - -322, -322, -620, 757, -322, -322, -322, -114, 925, -322, - -617, 685, -322, 502, 241, -322, -322, 617, -322, -123, - -322, 136, -322, 241, -322, -322, 617, -322, -322, -322, - -322, -322, -322, -322, -87, -322, -618, -619, 90, -322, - -322, -322, 952, 953, 241, -322, -322, 617, -322, -322, - 91, 503, -322, -322, -322, -322, -322, -322, -110, -322, - 92, 984, 895, 1055, -322, 686, 241, -122, -322, -322, - -119, -322, -322, -322, -322, -322, 241, 1147, 1148, 1194, - 494, -624, 491, 490, 489, 499, 492, 588, -624, 878, - 494, 589, 491, 490, 489, 502, 492, -624, -322, -322, - -322, -322, -322, -322, -322, -322, -322, -322, -322, -322, - -322, -322, -112, 596, -322, -322, -322, 497, 690, -322, - 984, 895, -322, 316, -121, -322, 507, 506, 510, 509, - -322, 241, -322, 503, -322, -322, -109, -322, -322, -322, - -322, -322, 234, -322, -720, -322, -624, 234, -118, 307, - 600, -720, -720, -720, 606, 265, 609, -720, -720, -322, - -720, 241, -322, -322, 618, -322, 619, -322, -720, -720, - 577, 630, 421, 488, -322, 634, 635, -122, 643, 668, - -720, -720, 671, -720, -720, -720, -720, -720, 672, -293, - 674, 675, 494, -625, 491, 490, 489, 499, 492, 956, - -625, 109, 108, 679, 241, 110, 683, 502, 684, -625, - -720, -720, -720, -720, -720, -720, -720, -720, -720, -720, - -720, -720, -720, -720, 307, 697, -720, -720, -720, 497, - 691, -720, 698, 241, -720, 702, 958, -720, 507, 506, - 510, 509, -720, 705, -720, 503, -720, -720, 706, -720, - -720, -720, -720, -720, 499, -720, -720, -720, -625, 708, - 228, 710, -387, 722, 502, -313, 228, 595, 723, 727, - 729, -720, -313, 605, -720, -720, 593, -720, 735, -720, - 228, -313, 523, 736, 265, 488, -720, 633, 265, -120, - 7, 81, 82, 83, 11, 65, 631, 510, 509, 71, - 72, 265, 503, 265, 75, -720, 73, 74, 76, 35, - 36, 79, 80, 130, 131, 132, 133, 134, 84, 33, - 32, 115, 114, 116, 117, 229, 241, 23, 791, 241, - -313, 229, 241, 10, 53, 9, 12, 119, 118, 120, - 111, 64, 109, 108, 112, 229, 110, 121, 122, 228, - 104, 105, 49, 50, 48, 228, 639, -720, 241, -323, - -102, 806, 678, 241, -720, 641, -323, 609, 817, -715, - 822, 676, 241, -720, 45, -323, 824, 38, 827, 832, - 66, 67, -323, 833, 68, 837, 40, 861, 865, -323, - 52, 866, -720, -294, 265, 879, 856, 857, -323, 24, - 858, 121, 122, 561, 102, 90, 93, 94, 561, 95, - 97, 96, 98, 891, 229, 895, 913, 91, 101, 916, - 229, 917, -720, 241, -323, 85, 262, 92, 106, 107, - 264, 263, 46, 47, 334, 81, 82, 83, 11, 65, - 920, 241, 929, 71, 72, 946, 947, -323, 75, 948, - 73, 74, 76, 35, 36, 79, 80, 257, 961, 963, - 301, 969, 84, 33, 32, 115, 114, 116, 117, 971, - 1157, 23, 491, 490, 489, 973, 492, 10, 53, 336, - 12, 119, 118, 120, 111, 64, 109, 108, 112, 575, - 110, 121, 122, 577, 104, 105, 49, 50, 48, 265, - 269, 270, 271, 272, 282, 283, 277, 278, 273, 274, - -322, 258, 259, 817, 241, 275, 276, -322, 45, 307, - 256, 338, -716, 307, 66, 67, -322, 817, 68, 265, - 40, 262, 895, 268, 52, 264, 263, 986, 260, 261, - 281, 280, 266, 24, 267, 987, 241, 241, 102, 90, - 93, 94, 228, 95, 97, 96, 98, 997, 241, 1162, - -296, 91, 101, 241, 279, 1008, 1012, -293, 1160, 85, - 1016, 92, 106, 107, 705, -322, 46, 47, 7, 81, - 82, 83, 11, 65, 700, 1019, 1021, 71, 72, 1023, - 1025, 1025, 75, 241, 73, 74, 76, 35, 36, 79, - 80, 130, 131, 132, 133, 134, 84, 33, 32, 115, - 114, 116, 117, 777, 241, 23, 241, 229, 1053, 1056, - 680, 10, 53, 9, 12, 119, 118, 120, 111, 64, - 109, 108, 112, 928, 110, 121, 122, 971, 104, 105, - 49, 50, 48, 265, 269, 270, 271, 272, 282, 283, - 277, 278, 273, 274, -322, 258, 259, 1068, 241, 275, - 276, -322, 45, 817, 1085, 38, -716, 1087, 66, 67, - -322, 1092, 68, 1093, 40, 262, 1098, 268, 52, 264, - 263, 1099, 260, 261, 281, 280, 266, 24, 267, 1100, - -297, 1113, 102, 90, 93, 94, 228, 95, 97, 96, - 98, 1114, 1115, 1185, 241, 91, 101, 241, 279, 241, - -265, 241, 641, 85, 241, 92, 106, 107, 241, -322, - 46, 47, 334, 81, 82, 83, 11, 65, 928, 1122, - 1123, 71, 72, 241, 1127, 241, 75, 1130, 73, 74, - 76, 35, 36, 79, 80, 130, 131, 132, 133, 134, - 84, 33, 32, 115, 114, 116, 117, 705, 1133, 23, - 1136, 229, 1138, 1140, 680, 10, 53, 336, 12, 119, - 118, 120, 111, 64, 109, 108, 112, 241, 110, 121, - 122, -387, 104, 105, 49, 50, 48, 265, 269, 270, - 271, 272, 282, 283, 277, 278, 273, 274, 228, 258, - 259, 1152, 1163, 275, 276, 1185, 45, 1164, 1025, 38, - 499, 1025, 66, 67, 641, 1025, 68, 1183, 40, 262, - 502, 268, 52, 264, 263, 1186, 260, 261, 281, 280, - 266, 24, 267, 1191, 1192, 697, 102, 90, 93, 94, - 1114, 95, 97, 96, 98, 1202, 1202, 705, 1204, 91, - 101, 1206, 279, 510, 509, 1208, 1210, 85, 503, 92, - 106, 107, 1210, 229, 46, 47, 334, 81, 82, 83, - 11, 65, 241, 1025, -716, 71, 72, -715, 1227, 1210, - 75, 1210, 73, 74, 76, 35, 36, 79, 80, 130, - 131, 132, 133, 134, 84, 33, 32, 115, 114, 116, - 117, 1210, 1210, 23, nil, nil, nil, nil, 892, 10, - 53, 336, 12, 119, 118, 120, 111, 64, 109, 108, - 112, nil, 110, 121, 122, nil, 104, 105, 49, 50, - 48, 265, 269, 270, 271, 272, 282, 283, 277, 278, - 273, 274, nil, 258, 259, nil, nil, 275, 276, nil, - 45, nil, nil, 38, nil, nil, 66, 67, nil, nil, - 68, nil, 40, 262, nil, 268, 52, 264, 263, nil, - 260, 261, 281, 280, 266, 24, 267, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, 279, nil, nil, nil, - nil, 85, nil, 92, 106, 107, nil, nil, 46, 47, - 334, 81, 82, 83, 11, 65, nil, nil, nil, 71, - 72, nil, nil, nil, 75, nil, 73, 74, 76, 35, - 36, 79, 80, nil, nil, nil, nil, nil, 84, 33, - 32, 115, 114, 116, 117, nil, nil, 23, nil, nil, - nil, nil, 921, 10, 53, 336, 12, 119, 118, 120, - 111, 64, 109, 108, 112, nil, 110, 121, 122, nil, - 104, 105, 49, 50, 48, 265, 269, 270, 271, 272, - 282, 283, 277, 278, 273, 274, nil, 258, 259, nil, - nil, 275, 276, nil, 45, nil, nil, 38, nil, nil, - 66, 67, nil, nil, 68, nil, 40, 262, nil, 268, - 52, 264, 263, nil, 260, 261, 281, 280, 266, 24, - 267, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - 279, nil, nil, nil, nil, 85, nil, 92, 106, 107, - nil, nil, 46, 47, 334, 81, 82, 83, 11, 65, - nil, nil, nil, 71, 72, nil, nil, nil, 75, nil, - 73, 74, 76, 35, 36, 79, 80, nil, nil, nil, - nil, nil, 84, 33, 32, 115, 114, 116, 117, nil, - 1157, 23, 491, 490, 489, nil, 492, 10, 53, 336, - 12, 119, 118, 120, 111, 64, 109, 108, 112, nil, - 110, 121, 122, nil, 104, 105, 49, 50, 48, 265, - 269, 270, 271, 272, 282, 283, 277, 278, 273, 274, - nil, 258, 259, nil, nil, 275, 276, nil, 45, nil, - nil, 38, nil, nil, 66, 67, nil, nil, 68, nil, - 40, 262, nil, 268, 52, 264, 263, nil, 260, 261, - 281, 280, 266, 24, 267, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, 279, nil, nil, nil, nil, 85, - nil, 92, 106, 107, nil, nil, 46, 47, 334, 81, - 82, 83, 11, 65, nil, nil, nil, 71, 72, nil, - nil, nil, 75, nil, 73, 74, 76, 35, 36, 79, - 80, nil, nil, nil, nil, nil, 84, 33, 32, 115, - 114, 116, 117, nil, nil, 23, nil, nil, nil, nil, - nil, 10, 53, 336, 12, 119, 118, 120, 111, 64, - 109, 108, 112, nil, 110, 121, 122, nil, 104, 105, - 49, 50, 48, 265, 269, 270, 271, 272, 282, 283, - 277, 278, 273, 274, nil, 258, 259, nil, nil, 275, - 276, nil, 45, nil, nil, 338, nil, nil, 66, 67, - nil, nil, 68, nil, 40, 262, nil, 268, 52, 264, - 263, nil, 260, 261, 281, 280, 266, 24, 267, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, 241, 279, nil, - nil, nil, nil, 85, nil, 92, 106, 107, nil, nil, - 46, 47, 334, 81, 82, 83, 11, 65, nil, nil, - nil, 71, 72, nil, nil, nil, 75, nil, 73, 74, - 76, 35, 36, 79, 80, nil, nil, nil, nil, nil, - 84, 33, 32, 115, 114, 116, 117, nil, nil, 23, - nil, nil, nil, nil, nil, 10, 53, 336, 12, 119, - 118, 120, 111, 64, 109, 108, 112, nil, 110, 121, - 122, nil, 104, 105, 49, 50, 48, 265, 269, 270, - 271, 272, 282, 283, 277, 278, 273, 274, nil, 258, - 259, nil, nil, 275, 276, nil, 45, nil, nil, 338, - nil, nil, 66, 67, nil, nil, 68, nil, 40, 262, - nil, 268, 52, 264, 263, nil, 260, 261, 281, 280, - 266, 24, 267, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, 279, nil, nil, nil, nil, 85, nil, 92, - 106, 107, nil, nil, 46, 47, 334, 81, 82, 83, - 11, 65, nil, nil, nil, 71, 72, nil, nil, nil, - 75, nil, 73, 74, 76, 35, 36, 79, 80, nil, - nil, nil, nil, nil, 84, 33, 32, 115, 114, 116, - 117, nil, nil, 23, nil, nil, nil, nil, nil, 10, - 53, 336, 12, 119, 118, 120, 111, 64, 109, 108, - 112, nil, 110, 121, 122, nil, 104, 105, 49, 50, - 48, 265, 269, 270, 271, 272, 282, 283, 277, 278, - 273, 274, nil, 258, 259, nil, nil, 275, 276, nil, - 45, nil, nil, 38, nil, nil, 66, 67, nil, nil, - 68, nil, 40, 262, nil, 268, 52, 264, 263, nil, - 260, 261, 281, 280, 266, 24, 267, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, 279, nil, nil, nil, - nil, 85, nil, 92, 106, 107, nil, nil, 46, 47, - 334, 81, 82, 83, 11, 65, nil, nil, nil, 71, - 72, nil, nil, nil, 75, nil, 73, 74, 76, 35, - 36, 79, 80, nil, nil, nil, nil, nil, 84, 33, - 32, 115, 114, 116, 117, nil, nil, 23, nil, nil, - nil, nil, nil, 10, 53, 336, 12, 119, 118, 120, - 111, 64, 109, 108, 112, nil, 110, 121, 122, nil, - 104, 105, 49, 50, 48, 265, 269, 270, 271, 272, - 282, 283, 277, 278, 273, 274, nil, 258, 259, nil, - nil, 275, 276, nil, 45, nil, nil, 38, nil, nil, - 66, 67, nil, nil, 68, nil, 40, 262, nil, 268, - 52, 264, 263, nil, 260, 261, 281, 280, 266, 24, - 267, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - 279, nil, nil, nil, nil, 85, nil, 92, 106, 107, - nil, nil, 46, 47, 334, 81, 82, 83, 11, 65, - nil, nil, nil, 71, 72, nil, nil, nil, 75, nil, - 73, 74, 76, 35, 36, 79, 80, nil, nil, nil, - nil, nil, 84, 33, 32, 115, 114, 116, 117, nil, - nil, 23, nil, nil, nil, nil, nil, 10, 53, 336, - 12, 119, 118, 120, 111, 64, 109, 108, 112, nil, - 110, 121, 122, nil, 104, 105, 49, 50, 48, 265, - 269, 270, 271, 272, 282, 283, 277, 278, 273, 274, - nil, 258, 259, nil, nil, 275, 276, nil, 45, nil, - nil, 38, nil, nil, 66, 67, nil, nil, 68, nil, - 40, 262, nil, 268, 52, 264, 263, nil, 260, 261, - 281, 280, 266, 24, 267, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, 279, nil, nil, nil, nil, 85, - nil, 92, 106, 107, nil, nil, 46, 47, 334, 81, - 82, 83, 11, 65, nil, nil, nil, 71, 72, nil, - nil, nil, 75, nil, 73, 74, 76, 35, 36, 79, - 80, nil, nil, nil, nil, nil, 84, 33, 32, 115, - 114, 116, 117, nil, nil, 23, nil, nil, nil, nil, - nil, 10, 53, 336, 12, 119, 118, 120, 111, 64, - 109, 108, 112, nil, 110, 121, 122, nil, 104, 105, - 49, 50, 48, 265, 269, 270, 271, 272, 282, 283, - 277, 278, 273, 274, nil, 258, 259, nil, nil, 275, - 276, nil, 45, nil, nil, 38, nil, nil, 66, 67, - nil, nil, 68, nil, 40, 262, nil, 268, 52, 264, - 263, nil, 260, 261, 281, 280, 266, 24, 267, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, 279, nil, - nil, nil, nil, 85, nil, 92, 106, 107, nil, nil, - 46, 47, 334, 81, 82, 83, 11, 65, nil, nil, - nil, 71, 72, nil, nil, nil, 75, nil, 73, 74, - 76, 35, 36, 79, 80, nil, nil, nil, nil, nil, - 84, 33, 32, 115, 114, 116, 117, nil, nil, 23, - nil, nil, nil, nil, nil, 10, 53, 336, 12, 119, - 118, 120, 111, 64, 109, 108, 112, nil, 110, 121, - 122, nil, 104, 105, 49, 50, 48, 265, 269, 270, - 271, 272, 282, 283, 277, 278, 273, 274, nil, 258, - 259, nil, nil, 275, 276, nil, 45, nil, nil, 38, - nil, nil, 66, 67, nil, nil, 68, nil, 40, 262, - nil, 268, 52, 264, 263, nil, 260, 261, 281, 280, - 266, 24, 267, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, 279, nil, nil, nil, nil, 85, nil, 92, - 106, 107, nil, nil, 46, 47, 334, 81, 82, 83, - 11, 65, nil, nil, nil, 71, 72, nil, nil, nil, - 75, nil, 73, 74, 76, 35, 36, 79, 80, nil, - nil, nil, nil, nil, 84, 33, 32, 115, 114, 116, - 117, nil, nil, 23, nil, nil, nil, nil, nil, 10, - 53, 336, 12, 119, 118, 120, 111, 64, 109, 108, - 112, nil, 110, 121, 122, nil, 104, 105, 49, 50, - 48, 265, 269, 270, 271, 272, 282, 283, 277, 278, - 273, 274, nil, 258, 259, nil, nil, 275, 276, nil, - 45, nil, nil, 38, nil, nil, 66, 67, nil, nil, - 68, nil, 40, 262, nil, 268, 52, 264, 263, nil, - 260, 261, 281, 280, 266, 24, 267, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, 279, nil, nil, nil, - nil, 85, nil, 92, 106, 107, nil, nil, 46, 47, - 334, 81, 82, 83, 11, 65, nil, nil, nil, 71, - 72, nil, nil, nil, 75, nil, 73, 74, 76, 35, - 36, 79, 80, nil, nil, nil, nil, nil, 84, 33, - 32, 115, 114, 116, 117, nil, 494, 23, 491, 490, - 489, nil, 492, 10, 53, 336, 12, 119, 118, 120, - 111, 64, 109, 108, 112, nil, 110, 121, 122, nil, - 104, 105, 49, 50, 48, 494, nil, 491, 490, 489, - nil, 492, nil, 715, nil, 494, nil, 491, 490, 489, - nil, 492, 719, nil, 45, nil, nil, 38, nil, nil, - 66, 67, nil, nil, 68, 494, 40, 491, 490, 489, - 52, 492, 715, nil, nil, nil, nil, nil, nil, 24, - nil, 719, 715, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - nil, nil, 715, nil, nil, 85, nil, 92, 106, 107, - nil, 719, 46, 47, 334, 81, 82, 83, 11, 65, - nil, nil, nil, 71, 72, nil, nil, nil, 75, nil, - 73, 74, 76, 35, 36, 79, 80, nil, nil, nil, - nil, nil, 84, 33, 32, 115, 114, 116, 117, nil, - nil, 23, nil, nil, nil, nil, nil, 10, 53, 336, - 12, 119, 118, 120, 111, 64, 109, 108, 112, nil, - 110, 121, 122, nil, 104, 105, 49, 50, 48, 265, - 269, 270, 271, 272, 282, 283, 277, 278, 273, 274, - nil, -741, -741, nil, nil, 275, 276, nil, 45, nil, - nil, 38, nil, nil, 66, 67, nil, 265, 68, nil, - 40, 262, nil, 268, 52, 264, 263, nil, 260, 261, - 281, 280, 266, 24, 267, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, 262, - nil, 91, 101, 264, 263, nil, 260, 261, nil, 85, - nil, 92, 106, 107, nil, nil, 46, 47, 334, 81, - 82, 83, 11, 65, nil, nil, nil, 71, 72, nil, - nil, nil, 75, nil, 73, 74, 76, 35, 36, 79, - 80, nil, nil, nil, nil, nil, 84, 33, 32, 115, - 114, 116, 117, nil, nil, 23, nil, nil, nil, nil, - nil, 10, 53, 336, 12, 119, 118, 120, 111, 64, - 109, 108, 112, nil, 110, 121, 122, nil, 104, 105, - 49, 50, 48, 265, 269, 270, 271, 272, 282, 283, - 277, 278, 273, 274, nil, -741, -741, nil, nil, 275, - 276, nil, 45, nil, nil, 38, nil, nil, 66, 67, - nil, 265, 68, nil, 40, 262, nil, 268, 52, 264, - 263, nil, 260, 261, 281, 280, 266, 24, 267, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, 262, nil, 91, 101, 264, 263, nil, - 260, 261, nil, 85, nil, 92, 106, 107, nil, nil, - 46, 47, 334, 81, 82, 83, 11, 65, nil, nil, - nil, 71, 72, nil, nil, nil, 75, nil, 73, 74, - 76, 35, 36, 79, 80, nil, nil, nil, nil, nil, - 84, 33, 32, 115, 114, 116, 117, nil, nil, 23, - nil, nil, nil, nil, nil, 10, 53, 336, 12, 119, - 118, 120, 111, 64, 109, 108, 112, nil, 110, 121, - 122, nil, 104, 105, 49, 50, 48, 265, 269, 270, - 271, 272, 282, 283, 277, 278, 273, 274, nil, -741, - -741, nil, nil, 275, 276, nil, 45, nil, nil, 38, - nil, nil, 66, 67, nil, nil, 68, nil, 40, 262, - nil, 268, 52, 264, 263, nil, 260, 261, 281, 280, - 266, 24, 267, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, 494, nil, 491, 490, 489, 85, 492, 92, - 106, 107, nil, nil, 46, 47, 334, 81, 82, 83, - 11, 65, nil, nil, nil, 71, 72, nil, nil, nil, - 75, nil, 73, 74, 76, 35, 36, 79, 80, 715, - nil, nil, nil, nil, 84, 33, 32, 115, 114, 116, - 117, nil, nil, 23, nil, nil, nil, nil, nil, 10, - 53, 336, 12, 119, 118, 120, 111, 64, 109, 108, - 112, nil, 110, 121, 122, nil, 104, 105, 49, 50, - 48, 265, 269, 270, 271, 272, 282, 283, 277, 278, - 273, 274, nil, -741, -741, nil, nil, 275, 276, nil, - 45, nil, nil, 38, nil, nil, 66, 67, nil, nil, - 68, nil, 40, 262, nil, 268, 52, 264, 263, nil, - 260, 261, 281, 280, 266, 24, 267, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, 494, nil, 491, 490, - 489, 85, 492, 92, 106, 107, nil, nil, 46, 47, - 334, 81, 82, 83, 11, 65, nil, nil, nil, 71, - 72, nil, nil, nil, 75, nil, 73, 74, 76, 35, - 36, 79, 80, 715, nil, nil, nil, nil, 84, 33, - 32, 115, 114, 116, 117, nil, nil, 23, nil, nil, - nil, nil, nil, 10, 53, 336, 12, 119, 118, 120, - 111, 64, 109, 108, 112, nil, 110, 121, 122, nil, - 104, 105, 49, 50, 48, 265, -741, -741, -741, -741, - 282, 283, nil, nil, -741, -741, nil, nil, nil, nil, - nil, 275, 276, nil, 45, nil, nil, 38, nil, nil, - 66, 67, nil, nil, 68, nil, 40, 262, nil, 268, - 52, 264, 263, nil, 260, 261, 281, 280, 266, 24, - 267, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - nil, nil, nil, nil, nil, 85, nil, 92, 106, 107, - nil, nil, 46, 47, 334, 81, 82, 83, 11, 65, - nil, nil, nil, 71, 72, nil, nil, nil, 75, nil, - 73, 74, 76, 35, 36, 79, 80, nil, nil, nil, - nil, nil, 84, 33, 32, 115, 114, 116, 117, nil, - nil, 23, nil, nil, nil, nil, nil, 10, 53, 336, - 12, 119, 118, 120, 111, 64, 109, 108, 112, nil, - 110, 121, 122, nil, 104, 105, 49, 50, 48, 265, - -741, -741, -741, -741, 282, 283, nil, nil, -741, -741, - nil, nil, nil, nil, nil, 275, 276, nil, 45, nil, - nil, 38, nil, nil, 66, 67, nil, nil, 68, nil, - 40, 262, nil, 268, 52, 264, 263, nil, 260, 261, - 281, 280, 266, 24, 267, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, nil, nil, nil, 85, - nil, 92, 106, 107, nil, nil, 46, 47, 334, 81, - 82, 83, 11, 65, nil, nil, nil, 71, 72, nil, - nil, nil, 75, nil, 73, 74, 76, 35, 36, 79, - 80, nil, nil, nil, nil, nil, 84, 33, 32, 115, - 114, 116, 117, nil, nil, 23, nil, nil, nil, nil, - nil, 10, 53, 336, 12, 119, 118, 120, 111, 64, - 109, 108, 112, nil, 110, 121, 122, nil, 104, 105, - 49, 50, 48, 265, -741, -741, -741, -741, 282, 283, - nil, nil, -741, -741, nil, nil, nil, nil, nil, 275, - 276, nil, 45, nil, nil, 38, nil, nil, 66, 67, - nil, nil, 68, nil, 40, 262, nil, 268, 52, 264, - 263, nil, 260, 261, 281, 280, 266, 24, 267, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - nil, nil, nil, 85, nil, 92, 106, 107, nil, nil, - 46, 47, 334, 81, 82, 83, 11, 65, nil, nil, - nil, 71, 72, nil, nil, nil, 75, nil, 73, 74, - 76, 35, 36, 79, 80, nil, nil, nil, nil, nil, - 84, 33, 32, 115, 114, 116, 117, nil, nil, 23, - nil, nil, nil, nil, nil, 10, 53, 336, 12, 119, - 118, 120, 111, 64, 109, 108, 112, nil, 110, 121, - 122, nil, 104, 105, 49, 50, 48, 265, -741, -741, - -741, -741, 282, 283, nil, nil, -741, -741, nil, nil, - nil, nil, nil, 275, 276, nil, 45, nil, nil, 38, - nil, nil, 66, 67, nil, nil, 68, nil, 40, 262, - nil, 268, 52, 264, 263, nil, 260, 261, 281, 280, - 266, 24, 267, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, nil, nil, nil, 85, nil, 92, - 106, 107, nil, nil, 46, 47, 334, 81, 82, 83, - 11, 65, nil, nil, nil, 71, 72, nil, nil, nil, - 75, nil, 73, 74, 76, 35, 36, 79, 80, nil, - nil, nil, nil, nil, 84, 33, 32, 115, 114, 116, - 117, nil, nil, 23, nil, nil, nil, nil, nil, 10, - 53, 336, 12, 119, 118, 120, 111, 64, 109, 108, - 112, nil, 110, 121, 122, nil, 104, 105, 49, 50, - 48, 265, -741, -741, -741, -741, 282, 283, nil, nil, - -741, -741, nil, nil, nil, nil, nil, 275, 276, nil, - 45, nil, nil, 38, nil, nil, 66, 67, nil, nil, - 68, nil, 40, 262, nil, 268, 52, 264, 263, nil, - 260, 261, 281, 280, 266, 24, 267, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, nil, nil, - nil, 85, nil, 92, 106, 107, nil, nil, 46, 47, - 334, 81, 82, 83, 11, 65, nil, nil, nil, 71, - 72, nil, nil, nil, 75, nil, 73, 74, 76, 35, - 36, 79, 80, nil, nil, nil, nil, nil, 84, 33, - 32, 115, 114, 116, 117, nil, nil, 23, nil, nil, - nil, nil, nil, 10, 53, 336, 12, 119, 118, 120, - 111, 64, 109, 108, 112, nil, 110, 121, 122, nil, - 104, 105, 49, 50, 48, 265, -741, -741, -741, -741, - 282, 283, nil, nil, -741, -741, nil, nil, nil, nil, - nil, 275, 276, nil, 45, nil, nil, 38, nil, nil, - 66, 67, nil, nil, 68, nil, 40, 262, nil, 268, - 52, 264, 263, nil, 260, 261, 281, 280, 266, 24, - 267, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - nil, nil, nil, nil, nil, 85, nil, 92, 106, 107, - nil, nil, 46, 47, 334, 81, 82, 83, 11, 65, - nil, nil, nil, 71, 72, nil, nil, nil, 75, nil, - 73, 74, 76, 35, 36, 79, 80, nil, nil, nil, - nil, nil, 84, 33, 32, 115, 114, 116, 117, nil, - nil, 23, nil, nil, nil, nil, nil, 10, 53, 336, - 12, 119, 118, 120, 111, 64, 109, 108, 112, nil, - 110, 121, 122, nil, 104, 105, 49, 50, 48, 265, - 269, 270, 271, 272, 282, 283, nil, nil, 273, 274, - nil, nil, nil, nil, nil, 275, 276, nil, 45, nil, - nil, 38, nil, nil, 66, 67, nil, nil, 68, nil, - 40, 262, nil, 268, 52, 264, 263, nil, 260, 261, - 281, 280, 266, 24, 267, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, nil, nil, nil, 85, - nil, 92, 106, 107, nil, nil, 46, 47, 334, 81, - 82, 83, 11, 65, nil, nil, nil, 71, 72, nil, - nil, nil, 75, nil, 73, 74, 76, 35, 36, 79, - 80, nil, nil, nil, nil, nil, 84, 33, 32, 115, - 114, 116, 117, nil, nil, 23, nil, nil, nil, nil, - nil, 10, 53, 336, 12, 119, 118, 120, 111, 64, - 109, 108, 112, nil, 110, 121, 122, nil, 104, 105, - 49, 50, 48, 265, 269, 270, 271, 272, 282, 283, - 277, nil, 273, 274, nil, nil, nil, nil, nil, 275, - 276, nil, 45, nil, nil, 38, nil, nil, 66, 67, - nil, nil, 68, nil, 40, 262, nil, 268, 52, 264, - 263, nil, 260, 261, 281, 280, 266, 24, 267, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - nil, nil, nil, 85, nil, 92, 106, 107, nil, nil, - 46, 47, 334, 81, 82, 83, 11, 65, nil, nil, - nil, 71, 72, nil, nil, nil, 75, nil, 73, 74, - 76, 35, 36, 79, 80, nil, nil, nil, nil, nil, - 84, 33, 32, 115, 114, 116, 117, nil, nil, 23, - nil, nil, nil, nil, nil, 10, 53, 336, 12, 119, - 118, 120, 111, 64, 109, 108, 112, nil, 110, 121, - 122, nil, 104, 105, 49, 50, 48, 265, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 275, 276, nil, 45, nil, nil, 38, - nil, nil, 66, 67, nil, nil, 68, nil, 40, 262, - nil, 268, 52, 264, 263, nil, 260, 261, nil, nil, - 266, 24, 267, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, nil, nil, nil, 85, nil, 92, - 106, 107, nil, nil, 46, 47, 81, 82, 83, 11, - 65, nil, nil, nil, 71, 72, nil, nil, nil, 75, - nil, 73, 74, 76, 35, 36, 79, 80, nil, nil, - nil, nil, nil, 84, 33, 32, 115, 114, 116, 117, - nil, nil, 23, nil, nil, nil, nil, nil, 10, 53, - 9, 12, 119, 118, 120, 111, 64, 109, 108, 112, - nil, 110, 121, 122, nil, 104, 105, 49, 50, 48, - 265, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 275, 276, nil, 45, - nil, nil, 38, nil, nil, 66, 67, nil, nil, 68, - nil, 40, 262, nil, 268, 52, 264, 263, nil, 260, - 261, nil, nil, 266, 24, 267, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, 81, 82, 83, - 85, 65, 92, 106, 107, 71, 72, 46, 47, nil, - 75, nil, 73, 74, 76, 35, 36, 79, 80, nil, - nil, nil, nil, nil, 84, 33, 32, 115, 114, 116, - 117, nil, nil, 255, nil, nil, nil, nil, nil, nil, - 53, nil, nil, 119, 118, 120, 111, 64, 109, 108, - 112, nil, 110, 121, 122, nil, 104, 105, 49, 50, - 48, 265, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 275, 276, nil, - 246, nil, nil, 254, nil, nil, 66, 67, nil, nil, - 68, nil, nil, 262, nil, 268, 52, 264, 263, nil, - 260, 261, nil, nil, nil, 251, nil, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, nil, nil, - nil, 85, nil, 92, 106, 107, -443, nil, 46, 47, - nil, nil, nil, -443, -443, -443, nil, nil, -443, -443, - -443, 265, -443, nil, nil, nil, nil, nil, nil, nil, - -443, -443, -443, -443, nil, nil, nil, 275, 276, nil, - nil, nil, -443, -443, nil, -443, -443, -443, -443, -443, - nil, nil, nil, 262, nil, 268, nil, 264, 263, nil, - 260, 261, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, -443, -443, -443, -443, -443, -443, -443, -443, - -443, -443, -443, -443, -443, -443, nil, nil, -443, -443, - -443, nil, nil, -443, nil, 307, -443, nil, nil, -443, - -443, nil, -443, nil, -443, nil, -443, nil, -443, -443, - nil, -443, -443, -443, -443, -443, -329, -443, -443, -443, - nil, nil, nil, -329, -329, -329, nil, nil, -329, -329, - -329, nil, -329, -443, 265, nil, -443, -443, nil, -443, - -329, -443, -329, -329, nil, nil, nil, nil, -443, nil, - 275, 276, -329, -329, nil, -329, -329, -329, -329, -329, - nil, nil, nil, nil, nil, nil, 262, nil, nil, nil, - 264, 263, nil, 260, 261, nil, nil, nil, nil, nil, - nil, nil, -329, -329, -329, -329, -329, -329, -329, -329, - -329, -329, -329, -329, -329, -329, nil, nil, -329, -329, - -329, nil, nil, -329, nil, 316, -329, nil, nil, -329, - -329, nil, -329, nil, -329, nil, -329, nil, -329, -329, - nil, -329, -329, -329, -329, -329, nil, -329, nil, -329, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, -329, nil, nil, -329, -329, nil, -329, - nil, -329, 81, 82, 83, nil, 65, nil, -329, nil, - 71, 72, nil, nil, nil, 75, nil, 73, 74, 76, - 35, 36, 79, 80, nil, nil, nil, nil, nil, 84, - 33, 32, 115, 114, 116, 117, nil, nil, 255, nil, - nil, nil, nil, nil, nil, 53, nil, nil, 119, 118, - 120, 111, 64, 109, 108, 112, 328, 110, 121, 122, - nil, 104, 105, 49, 50, 48, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 246, nil, nil, 254, nil, - nil, 66, 67, nil, nil, 68, nil, 325, nil, 323, - nil, 52, nil, nil, 329, nil, nil, nil, nil, nil, - 251, nil, nil, nil, nil, 102, 326, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, 81, 82, 83, 85, 65, 92, 106, - 107, 71, 72, 46, 47, nil, 75, nil, 73, 74, - 76, 35, 36, 79, 80, nil, nil, nil, nil, nil, - 84, 33, 32, 115, 114, 116, 117, nil, nil, 255, - nil, nil, nil, nil, nil, nil, 53, nil, nil, 119, - 118, 120, 111, 64, 109, 108, 112, 328, 110, 121, - 122, nil, 104, 105, 49, 50, 48, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 246, nil, nil, 254, - nil, nil, 66, 67, nil, nil, 68, nil, 325, nil, - 323, nil, 52, nil, nil, 329, nil, nil, nil, nil, - nil, 251, nil, nil, nil, nil, 102, 326, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 81, 82, 83, 85, 65, 92, - 106, 107, 71, 72, 46, 47, nil, 75, nil, 73, - 74, 76, 35, 36, 79, 80, nil, nil, nil, nil, - nil, 84, 33, 32, 115, 114, 116, 117, nil, nil, - 255, nil, nil, nil, nil, nil, nil, 53, nil, nil, - 119, 118, 120, 111, 64, 109, 108, 112, 328, 110, - 121, 122, nil, 104, 105, 49, 50, 48, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 246, nil, nil, - 254, nil, nil, 66, 67, nil, nil, 68, nil, 325, - nil, 323, nil, 52, nil, nil, 329, nil, nil, nil, - nil, nil, 251, nil, nil, nil, nil, 102, 326, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 81, 82, 83, 85, 65, - 92, 106, 107, 71, 72, 46, 47, nil, 75, nil, - 73, 74, 76, 355, 356, 79, 80, nil, nil, nil, - nil, nil, 84, 350, 358, 115, 114, 116, 117, nil, - nil, 255, nil, nil, nil, nil, nil, nil, 53, nil, - nil, 119, 118, 120, 111, 64, 109, 108, 112, nil, - 110, 121, 122, nil, 104, 105, 49, 50, 48, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 246, nil, - nil, 254, nil, nil, 66, 67, nil, nil, 68, nil, - nil, nil, nil, nil, 52, nil, nil, nil, nil, nil, - nil, nil, nil, 251, nil, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, 81, 82, 83, 85, - 65, 92, 106, 107, 71, 72, 46, 47, nil, 75, - nil, 73, 74, 76, 355, 356, 79, 80, nil, nil, - nil, nil, nil, 84, 350, 358, 115, 114, 116, 117, - nil, nil, 255, nil, nil, nil, nil, nil, nil, 53, - nil, nil, 119, 118, 120, 111, 64, 109, 108, 112, - nil, 110, 121, 122, nil, 104, 105, 49, 50, 48, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 246, - nil, nil, 254, nil, nil, 66, 67, nil, nil, 68, - nil, nil, nil, nil, nil, 52, nil, nil, nil, nil, - nil, nil, nil, nil, 251, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, 81, 82, 83, - 85, 65, 92, 106, 107, 71, 72, 46, 47, nil, - 75, nil, 73, 74, 76, 355, 356, 79, 80, nil, - nil, nil, nil, nil, 84, 350, 358, 115, 114, 116, - 117, nil, nil, 255, nil, nil, nil, nil, nil, nil, - 53, nil, nil, 119, 118, 120, 111, 64, 109, 108, - 112, nil, 110, 121, 122, nil, 104, 105, 49, 50, - 48, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 246, nil, nil, 254, nil, nil, 66, 67, nil, nil, - 68, nil, nil, nil, nil, nil, 52, nil, nil, nil, - nil, nil, nil, nil, nil, 251, nil, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, 81, 82, - 83, 85, 65, 92, 106, 107, 71, 72, 46, 47, - nil, 75, nil, 73, 74, 76, 355, 356, 79, 80, - nil, nil, nil, nil, nil, 84, 350, 358, 115, 114, - 116, 117, nil, nil, 255, nil, nil, nil, nil, nil, - nil, 53, nil, nil, 119, 118, 120, 111, 64, 109, - 108, 112, nil, 110, 121, 122, nil, 104, 105, 49, - 50, 48, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 246, nil, nil, 254, nil, nil, 66, 67, nil, - nil, 68, nil, nil, nil, nil, nil, 52, nil, nil, - nil, nil, nil, nil, nil, nil, 251, nil, nil, nil, - nil, 102, 90, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, 81, - 82, 83, 85, 65, 92, 106, 107, 71, 72, 46, - 47, nil, 75, nil, 73, 74, 76, 355, 356, 79, - 80, nil, nil, nil, nil, nil, 84, 350, 358, 115, - 114, 116, 117, nil, nil, 255, nil, nil, nil, nil, - nil, nil, 53, nil, nil, 119, 118, 120, 111, 64, - 109, 108, 112, nil, 110, 121, 122, nil, 104, 105, - 49, 50, 48, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 246, nil, nil, 254, nil, nil, 66, 67, - nil, nil, 68, nil, nil, nil, nil, nil, 52, nil, - nil, nil, nil, nil, nil, nil, nil, 251, nil, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - nil, nil, nil, 85, nil, 92, 106, 107, -314, nil, - 46, 47, nil, nil, nil, -314, -314, -314, nil, nil, - -314, -314, -314, nil, -314, nil, nil, nil, nil, nil, - nil, nil, -314, nil, -314, -314, -314, nil, nil, nil, - 115, 114, 116, 117, -314, -314, nil, -314, -314, -314, - -314, -314, nil, nil, nil, nil, 119, 118, 120, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 104, - 105, nil, nil, 359, -314, -314, -314, -314, -314, -314, - -314, -314, -314, -314, -314, -314, -314, -314, nil, nil, - -314, -314, -314, nil, nil, -314, nil, nil, -314, nil, - nil, -314, -314, nil, -314, nil, -314, nil, -314, nil, - -314, -314, nil, -314, -314, -314, -314, -314, nil, -314, - nil, -314, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, -314, 91, 101, -314, -314, - -314, -314, nil, -314, 85, -314, 92, 106, 107, nil, - -314, 81, 82, 83, 11, 65, nil, nil, nil, 71, - 72, nil, nil, nil, 75, nil, 73, 74, 76, 35, - 36, 79, 80, nil, nil, nil, nil, nil, 84, 33, - 32, 115, 114, 116, 117, nil, nil, 23, nil, nil, - nil, nil, nil, 10, 53, nil, 12, 119, 118, 120, - 111, 64, 109, 108, 112, nil, 110, 121, 122, nil, - 104, 105, 49, 50, 48, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 45, nil, nil, 38, nil, nil, - 66, 67, nil, nil, 68, nil, 40, nil, nil, nil, - 52, nil, nil, nil, nil, nil, nil, nil, nil, 24, - nil, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - nil, nil, 81, 82, 83, 85, 65, 92, 106, 107, - 71, 72, 46, 47, nil, 75, nil, 73, 74, 76, - 355, 356, 79, 80, nil, nil, nil, nil, nil, 84, - 350, 358, 115, 114, 116, 117, nil, nil, 255, nil, - nil, nil, nil, nil, nil, 53, nil, nil, 119, 118, - 120, 111, 64, 109, 108, 112, 328, 110, 121, 122, - nil, 104, 105, 49, 50, 48, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 246, nil, nil, 254, nil, - nil, 66, 67, nil, nil, 68, nil, 325, nil, nil, - nil, 52, nil, nil, 329, nil, nil, nil, nil, nil, - 251, nil, nil, nil, nil, 102, 326, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, 81, 82, 83, 85, 65, 92, 106, - 107, 71, 72, 46, 47, nil, 75, nil, 73, 74, - 76, 355, 356, 79, 80, nil, nil, nil, nil, nil, - 84, 350, 358, 115, 114, 116, 117, nil, nil, 255, - nil, nil, nil, nil, nil, nil, 53, nil, nil, 119, - 118, 120, 111, 64, 109, 108, 112, 328, 110, 121, - 122, nil, 104, 105, 49, 50, 48, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 246, nil, nil, 254, - nil, nil, 66, 67, nil, nil, 68, nil, nil, nil, - nil, nil, 52, nil, nil, 329, nil, nil, nil, nil, - nil, 251, nil, nil, nil, nil, 102, 326, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 81, 82, 83, 85, 65, 92, - 106, 107, 71, 72, 46, 47, nil, 75, nil, 73, - 74, 76, 35, 36, 79, 80, nil, nil, nil, nil, - nil, 84, 33, 32, 115, 114, 116, 117, nil, nil, - 23, nil, nil, nil, nil, nil, nil, 53, nil, nil, - 119, 118, 120, 111, 64, 109, 108, 112, nil, 110, - 121, 122, nil, 104, 105, 49, 50, 48, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 246, nil, nil, - 254, nil, nil, 66, 67, nil, nil, 68, nil, nil, - nil, nil, nil, 52, nil, nil, nil, nil, nil, nil, - nil, nil, 24, nil, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 81, 82, 83, 85, 65, - 92, 106, 107, 71, 72, 46, 47, nil, 75, nil, - 73, 74, 76, 35, 36, 79, 80, nil, nil, nil, - nil, nil, 84, 33, 32, 115, 114, 116, 117, nil, - nil, 23, nil, nil, nil, nil, nil, nil, 53, nil, - nil, 119, 118, 120, 111, 64, 109, 108, 112, nil, - 110, 121, 122, nil, 104, 105, 49, 50, 48, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 246, nil, - nil, 254, nil, nil, 66, 67, nil, nil, 68, nil, - nil, nil, nil, nil, 52, nil, nil, nil, nil, nil, - nil, nil, nil, 24, nil, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, 81, 82, 83, 85, - 65, 92, 106, 107, 71, 72, 46, 47, nil, 75, - nil, 73, 74, 76, 35, 36, 79, 80, nil, nil, - nil, nil, nil, 84, 33, 32, 115, 114, 116, 117, - nil, nil, 23, nil, nil, nil, nil, nil, nil, 53, - nil, nil, 119, 118, 120, 111, 64, 109, 108, 112, - nil, 110, 121, 122, nil, 104, 105, 49, 50, 48, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 246, - nil, nil, 254, nil, nil, 66, 67, nil, nil, 68, - nil, nil, nil, nil, nil, 52, nil, nil, nil, nil, - nil, nil, nil, nil, 24, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, 127, nil, nil, nil, nil, 126, - 85, nil, 92, 106, 107, nil, nil, 46, 47, 81, - 82, 83, 11, 65, nil, nil, nil, 71, 72, nil, - nil, nil, 75, nil, 73, 74, 76, 35, 36, 79, - 80, nil, nil, nil, nil, nil, 84, 33, 32, 115, - 114, 116, 117, nil, nil, 23, nil, nil, nil, nil, - nil, 10, 53, 9, 12, 119, 118, 120, 111, 64, - 109, 108, 112, nil, 110, 121, 122, nil, 104, 105, - 49, 50, 48, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 45, nil, nil, 38, nil, nil, 66, 67, - nil, nil, 68, nil, 40, nil, nil, nil, 52, nil, - nil, nil, nil, nil, nil, nil, nil, 24, nil, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - nil, nil, 421, 85, nil, 92, 106, 107, nil, nil, - 46, 47, 81, 82, 83, nil, 65, nil, nil, nil, - 71, 72, nil, nil, nil, 75, nil, 73, 74, 76, - 35, 36, 79, 80, nil, nil, nil, nil, nil, 84, - 33, 32, 115, 114, 116, 117, nil, nil, 23, nil, - nil, nil, nil, nil, nil, 53, nil, nil, 119, 118, - 120, 111, 64, 109, 108, 112, nil, 110, 121, 122, - nil, 104, 105, 49, 50, 48, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 246, nil, nil, 254, nil, - nil, 66, 67, nil, nil, 68, nil, nil, nil, nil, - nil, 52, nil, nil, nil, nil, nil, nil, nil, nil, - 24, nil, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, 81, 82, 83, 85, 65, 92, 106, - 107, 71, 72, 46, 47, nil, 75, nil, 73, 74, - 76, 35, 36, 79, 80, nil, nil, nil, nil, nil, - 84, 33, 32, 115, 114, 116, 117, nil, nil, 23, - nil, nil, nil, nil, nil, nil, 53, nil, nil, 119, - 118, 120, 111, 64, 109, 108, 112, nil, 110, 121, - 122, nil, 104, 105, 49, 50, 48, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 246, nil, nil, 254, - nil, nil, 66, 67, nil, nil, 68, nil, nil, nil, - nil, nil, 52, nil, nil, nil, nil, nil, nil, nil, - nil, 24, nil, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 81, 82, 83, 85, 65, 92, - 106, 107, 71, 72, 46, 47, nil, 75, nil, 73, - 74, 76, 35, 36, 79, 80, nil, nil, nil, nil, - nil, 84, 33, 32, 115, 114, 116, 117, nil, nil, - 23, nil, nil, nil, nil, nil, nil, 53, nil, nil, - 119, 118, 120, 111, 64, 109, 108, 112, nil, 110, - 121, 122, nil, 104, 105, 49, 50, 48, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 246, nil, nil, - 254, nil, nil, 66, 67, nil, nil, 68, nil, nil, - nil, nil, nil, 52, nil, nil, nil, nil, nil, nil, - nil, nil, 24, nil, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 81, 82, 83, 85, 65, - 92, 106, 107, 71, 72, 46, 47, nil, 75, nil, - 73, 74, 76, 35, 36, 79, 80, nil, nil, nil, - nil, nil, 84, 33, 32, 115, 114, 116, 117, nil, - nil, 23, nil, nil, nil, nil, nil, nil, 53, nil, - nil, 119, 118, 120, 111, 64, 109, 108, 112, nil, - 110, 121, 122, nil, 104, 105, 49, 50, 48, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 246, nil, - nil, 254, nil, nil, 66, 67, nil, nil, 68, nil, - nil, nil, nil, nil, 52, nil, nil, nil, nil, nil, - nil, nil, nil, 24, nil, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, nil, nil, nil, 85, - nil, 92, 106, 107, nil, nil, 46, 47, 81, 82, - 83, 11, 65, nil, nil, nil, 71, 72, nil, nil, - nil, 75, nil, 73, 74, 76, 35, 36, 79, 80, - nil, nil, nil, nil, nil, 84, 33, 32, 115, 114, - 116, 117, nil, nil, 23, nil, nil, nil, nil, nil, - 10, 53, nil, 12, 119, 118, 120, 111, 64, 109, - 108, 112, nil, 110, 121, 122, nil, 104, 105, 49, - 50, 48, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 45, nil, nil, 38, nil, nil, 66, 67, nil, - nil, 68, nil, 40, nil, nil, nil, 52, nil, nil, - nil, nil, nil, nil, nil, nil, 24, nil, nil, nil, - nil, 102, 90, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, 81, - 82, 83, 85, 65, 92, 106, 107, 71, 72, 46, - 47, nil, 75, nil, 73, 74, 76, 35, 36, 79, - 80, nil, nil, nil, nil, nil, 84, 33, 32, 115, - 114, 116, 117, nil, nil, 255, nil, nil, nil, nil, - nil, nil, 53, nil, nil, 119, 118, 120, 111, 64, - 109, 108, 112, nil, 110, 121, 122, nil, 104, 105, - 49, 50, 48, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 246, nil, nil, 254, nil, nil, 66, 67, - nil, nil, 68, nil, 437, nil, nil, nil, 52, nil, - nil, nil, nil, nil, nil, nil, nil, 251, nil, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - 81, 82, 83, 85, 65, 92, 106, 107, 71, 72, - 46, 47, nil, 75, nil, 73, 74, 76, 35, 36, - 79, 80, nil, nil, nil, nil, nil, 84, 33, 32, - 115, 114, 116, 117, nil, nil, 255, nil, nil, nil, - nil, nil, nil, 53, nil, nil, 119, 118, 120, 111, - 64, 109, 108, 112, nil, 110, 121, 122, nil, 104, - 105, 49, 50, 48, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 246, nil, nil, 254, nil, nil, 66, - 67, nil, nil, 68, nil, 437, nil, nil, nil, 52, - nil, nil, nil, nil, nil, nil, nil, nil, 251, nil, - nil, nil, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, 81, 82, 83, 85, 65, 92, 106, 107, 71, - 72, 46, 47, nil, 75, nil, 73, 74, 76, 35, - 36, 79, 80, nil, nil, nil, nil, nil, 84, 33, - 32, 115, 114, 116, 117, nil, nil, 23, nil, nil, - nil, nil, nil, nil, 53, nil, nil, 119, 118, 120, - 111, 64, 109, 108, 112, nil, 110, 121, 122, nil, - 104, 105, 49, 50, 48, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 246, nil, nil, 254, nil, nil, - 66, 67, nil, nil, 68, nil, nil, nil, nil, nil, - 52, nil, nil, nil, nil, nil, nil, nil, nil, 24, - nil, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - nil, nil, 81, 82, 83, 85, 65, 92, 106, 107, - 71, 72, 46, 47, nil, 75, nil, 73, 74, 76, - 35, 36, 79, 80, nil, nil, nil, nil, nil, 84, - 33, 32, 115, 114, 116, 117, nil, nil, 23, nil, - nil, nil, nil, nil, nil, 53, nil, nil, 119, 118, - 120, 111, 64, 109, 108, 112, nil, 110, 121, 122, - nil, 104, 105, 49, 50, 48, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 246, nil, nil, 254, nil, - nil, 66, 67, nil, nil, 68, nil, nil, nil, nil, - nil, 52, nil, nil, nil, nil, nil, nil, nil, nil, - 24, nil, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, 81, 82, 83, 85, 65, 92, 106, - 107, 71, 72, 46, 47, nil, 75, nil, 73, 74, - 76, 35, 36, 79, 80, nil, nil, nil, nil, nil, - 84, 33, 32, 115, 114, 116, 117, nil, nil, 255, - nil, nil, nil, nil, nil, nil, 53, nil, nil, 119, - 118, 120, 111, 64, 109, 108, 112, nil, 110, 121, - 122, nil, 104, 105, 49, 50, 48, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 246, nil, nil, 254, - nil, nil, 66, 67, nil, nil, 68, nil, nil, nil, - nil, nil, 52, nil, nil, nil, nil, nil, nil, nil, - nil, 251, nil, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 81, 82, 83, 85, 65, 92, - 106, 107, 71, 72, 46, 47, nil, 75, nil, 73, - 74, 76, 35, 36, 79, 80, nil, nil, nil, nil, - nil, 84, 33, 32, 115, 114, 116, 117, nil, nil, - 255, nil, nil, nil, nil, nil, nil, 53, nil, nil, - 119, 118, 120, 111, 64, 109, 108, 112, 328, 110, - 121, 122, nil, 104, 105, 49, 50, 48, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 246, nil, nil, - 254, nil, nil, 66, 67, nil, nil, 68, nil, 325, - nil, 323, nil, 52, nil, nil, 329, nil, nil, nil, - nil, nil, 251, nil, nil, nil, nil, 102, 326, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 81, 82, 83, 85, 65, - 92, 106, 107, 71, 72, 46, 47, nil, 75, nil, - 73, 74, 76, 35, 36, 79, 80, nil, nil, nil, - nil, nil, 84, 33, 32, 115, 114, 116, 117, nil, - nil, 255, nil, nil, nil, nil, nil, nil, 53, nil, - nil, 119, 118, 120, 111, 64, 109, 108, 112, nil, - 110, 121, 122, nil, 104, 105, 49, 50, 48, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 246, nil, - nil, 254, nil, nil, 66, 67, nil, nil, 68, nil, - nil, nil, nil, nil, 52, nil, nil, nil, nil, nil, - nil, nil, nil, 251, nil, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, 81, 82, 83, 85, - 65, 92, 106, 107, 71, 72, 46, 47, nil, 75, - nil, 73, 74, 76, 35, 36, 79, 80, nil, nil, - nil, nil, nil, 84, 33, 32, 115, 114, 116, 117, - nil, nil, 23, nil, nil, nil, nil, nil, nil, 53, - nil, nil, 119, 118, 120, 111, 64, 109, 108, 112, - nil, 110, 121, 122, nil, 104, 105, 49, 50, 48, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 246, - nil, nil, 254, nil, nil, 66, 67, nil, nil, 68, - nil, nil, nil, nil, nil, 52, nil, nil, nil, nil, - nil, nil, nil, nil, 24, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, 81, 82, 83, - 85, 65, 92, 106, 107, 71, 72, 46, 47, nil, - 75, nil, 73, 74, 76, 35, 36, 79, 80, nil, - nil, nil, nil, nil, 84, 33, 32, 115, 114, 116, - 117, nil, nil, 23, nil, nil, nil, nil, nil, nil, - 53, nil, nil, 119, 118, 120, 111, 64, 109, 108, - 112, nil, 110, 121, 122, nil, 104, 105, 49, 50, - 48, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 246, nil, nil, 254, nil, nil, 66, 67, nil, nil, - 68, nil, nil, nil, nil, nil, 52, nil, nil, nil, - nil, nil, nil, nil, nil, 24, nil, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, 241, nil, nil, 81, 82, - 83, 85, 65, 92, 106, 107, 71, 72, 46, 47, - nil, 75, nil, 73, 74, 76, 355, 356, 79, 80, - nil, nil, nil, nil, nil, 84, 350, 358, 115, 114, - 116, 117, nil, nil, 255, nil, nil, nil, nil, nil, - nil, 53, nil, nil, 119, 118, 120, 111, 64, 109, - 108, 112, nil, 110, 121, 122, nil, 104, 105, 49, - 50, 48, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 246, nil, nil, 254, nil, nil, 66, 67, nil, - nil, 68, nil, nil, nil, nil, nil, 52, nil, nil, - nil, nil, nil, nil, nil, nil, 251, nil, nil, nil, - nil, 102, 90, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, 81, - 82, 83, 85, 65, 92, 106, 107, 71, 72, 46, - 47, nil, 75, nil, 73, 74, 76, 355, 356, 79, - 80, nil, nil, nil, nil, nil, 84, 350, 358, 115, - 114, 116, 117, nil, nil, 255, nil, nil, nil, nil, - nil, nil, 53, nil, nil, 119, 118, 120, 111, 64, - 109, 108, 112, nil, 110, 121, 122, nil, 104, 105, - 49, 50, 48, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 246, nil, nil, 254, nil, nil, 66, 67, - nil, nil, 68, nil, nil, nil, nil, nil, 52, nil, - nil, nil, nil, nil, nil, nil, nil, 251, nil, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - 81, 82, 83, 85, 65, 92, 106, 107, 71, 72, - 46, 47, nil, 75, nil, 73, 74, 76, 355, 356, - 79, 80, nil, nil, nil, nil, nil, 84, 350, 358, - 115, 114, 116, 117, nil, nil, 255, nil, nil, nil, - nil, nil, nil, 53, nil, nil, 119, 118, 120, 111, - 64, 109, 108, 112, nil, 110, 121, 122, nil, 104, - 105, 49, 50, 48, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 246, nil, nil, 254, nil, nil, 66, - 67, nil, nil, 68, nil, nil, nil, nil, nil, 52, - nil, nil, nil, nil, nil, nil, nil, nil, 251, nil, - nil, nil, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, 81, 82, 83, 85, 65, 92, 106, 107, 71, - 72, 46, 47, nil, 75, nil, 73, 74, 76, 355, - 356, 79, 80, nil, nil, nil, nil, nil, 84, 350, - 358, 115, 114, 116, 117, nil, nil, 255, nil, nil, - nil, nil, nil, nil, 53, nil, nil, 119, 118, 120, - 111, 64, 109, 108, 112, nil, 110, 121, 122, nil, - 104, 105, 49, 50, 48, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 246, nil, nil, 254, nil, nil, - 66, 67, nil, nil, 68, nil, nil, nil, nil, nil, - 52, nil, nil, nil, nil, nil, nil, nil, nil, 251, - nil, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - nil, nil, 81, 82, 83, 85, 65, 92, 106, 107, - 71, 72, 46, 47, nil, 75, nil, 73, 74, 76, - 355, 356, 79, 80, nil, nil, nil, nil, nil, 84, - 350, 358, 115, 114, 116, 117, nil, nil, 255, nil, - nil, nil, nil, nil, nil, 53, nil, nil, 119, 118, - 120, 111, 64, 109, 108, 112, nil, 110, 121, 122, - nil, 104, 105, 49, 50, 48, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 246, nil, nil, 254, nil, - nil, 66, 67, nil, nil, 68, nil, nil, nil, nil, - nil, 52, nil, nil, nil, nil, nil, nil, nil, nil, - 251, nil, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, 81, 82, 83, 85, 65, 92, 106, - 107, 71, 72, 46, 47, nil, 75, nil, 73, 74, - 76, 355, 356, 79, 80, nil, nil, nil, nil, nil, - 84, 350, 358, 115, 114, 116, 117, nil, nil, 255, - nil, nil, nil, nil, nil, nil, 53, nil, nil, 119, - 118, 120, 111, 64, 109, 108, 112, nil, 110, 121, - 122, nil, 104, 105, 49, 50, 48, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 246, nil, nil, 254, - nil, nil, 66, 67, nil, nil, 68, nil, nil, nil, - nil, nil, 52, nil, nil, nil, nil, nil, nil, nil, - nil, 251, nil, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 81, 82, 83, 85, 65, 92, - 106, 107, 71, 72, 46, 47, nil, 75, nil, 73, - 74, 76, 355, 356, 79, 80, nil, nil, nil, nil, - nil, 84, 350, 358, 115, 114, 116, 117, nil, nil, - 255, nil, nil, nil, nil, nil, nil, 53, nil, nil, - 119, 118, 120, 111, 64, 109, 108, 112, nil, 110, - 121, 122, nil, 104, 105, 49, 50, 48, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 246, nil, nil, - 254, nil, nil, 66, 67, nil, nil, 68, nil, nil, - nil, nil, nil, 52, nil, nil, nil, nil, nil, nil, - nil, nil, 251, nil, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 81, 82, 83, 85, 65, - 92, 106, 107, 71, 72, 46, 47, nil, 75, nil, - 73, 74, 76, 355, 356, 79, 80, nil, nil, nil, - nil, nil, 84, 350, 358, 115, 114, 116, 117, nil, - nil, 255, nil, nil, nil, nil, nil, nil, 53, nil, - nil, 119, 118, 120, 111, 64, 109, 108, 112, nil, - 110, 121, 122, nil, 104, 105, 49, 50, 48, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 246, nil, - nil, 254, nil, nil, 66, 67, nil, nil, 68, nil, - nil, nil, nil, nil, 52, nil, nil, nil, nil, nil, - nil, nil, nil, 251, nil, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, 81, 82, 83, 85, - 65, 92, 106, 107, 71, 72, 46, 47, nil, 75, - nil, 73, 74, 76, 355, 356, 79, 80, nil, nil, - nil, nil, nil, 84, 350, 358, 115, 114, 116, 117, - nil, nil, 255, nil, nil, nil, nil, nil, nil, 53, - nil, nil, 119, 118, 120, 111, 64, 109, 108, 112, - nil, 110, 121, 122, nil, 104, 105, 49, 50, 48, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 246, - nil, nil, 254, nil, nil, 66, 67, nil, nil, 68, - nil, nil, nil, nil, nil, 52, nil, nil, nil, nil, - nil, nil, nil, nil, 251, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, 81, 82, 83, - 85, 65, 92, 106, 107, 71, 72, 46, 47, nil, - 75, nil, 73, 74, 76, 355, 356, 79, 80, nil, - nil, nil, nil, nil, 84, 350, 358, 115, 114, 116, - 117, nil, nil, 255, nil, nil, nil, nil, nil, nil, - 53, nil, nil, 119, 118, 120, 111, 64, 109, 108, - 112, nil, 110, 121, 122, nil, 104, 105, 49, 50, - 48, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 246, nil, nil, 254, nil, nil, 66, 67, nil, nil, - 68, nil, nil, nil, nil, nil, 52, nil, nil, nil, - nil, nil, nil, nil, nil, 251, nil, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, 81, 82, - 83, 85, 65, 92, 106, 107, 71, 72, 46, 47, - nil, 75, nil, 73, 74, 76, 355, 356, 79, 80, - nil, nil, nil, nil, nil, 84, 350, 358, 115, 114, - 116, 117, nil, nil, 255, nil, nil, nil, nil, nil, - nil, 53, nil, nil, 119, 118, 120, 111, 64, 109, - 108, 112, nil, 110, 121, 122, nil, 104, 105, 49, - 50, 48, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 246, nil, nil, 254, nil, nil, 66, 67, nil, - nil, 68, nil, nil, nil, nil, nil, 52, nil, nil, - nil, nil, nil, nil, nil, nil, 251, nil, nil, nil, - nil, 102, 90, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, 81, - 82, 83, 85, 65, 92, 106, 107, 71, 72, 46, - 47, nil, 75, nil, 73, 74, 76, 355, 356, 79, - 80, nil, nil, nil, nil, nil, 84, 350, 358, 115, - 114, 116, 117, nil, nil, 255, nil, nil, nil, nil, - nil, nil, 53, nil, nil, 119, 118, 120, 111, 64, - 109, 108, 112, nil, 110, 121, 122, nil, 104, 105, - 49, 50, 48, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 246, nil, nil, 254, nil, nil, 66, 67, - nil, nil, 68, nil, nil, nil, nil, nil, 52, nil, - nil, nil, nil, nil, nil, nil, nil, 251, nil, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - 81, 82, 83, 85, 65, 92, 106, 107, 71, 72, - 46, 47, nil, 75, nil, 73, 74, 76, 355, 356, - 79, 80, nil, nil, nil, nil, nil, 84, 350, 358, - 115, 114, 116, 117, nil, nil, 255, nil, nil, nil, - nil, nil, nil, 53, nil, nil, 119, 118, 120, 111, - 64, 109, 108, 112, nil, 110, 121, 122, nil, 104, - 105, 49, 50, 48, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 246, nil, nil, 254, nil, nil, 66, - 67, nil, nil, 68, nil, nil, nil, nil, nil, 52, - nil, nil, nil, nil, nil, nil, nil, nil, 251, nil, - nil, nil, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, 81, 82, 83, 85, 65, 92, 106, 107, 71, - 72, 46, 47, nil, 75, nil, 73, 74, 76, 355, - 356, 79, 80, nil, nil, nil, nil, nil, 84, 350, - 358, 115, 114, 116, 117, nil, nil, 255, nil, nil, - nil, nil, nil, nil, 53, nil, nil, 119, 118, 120, - 111, 64, 109, 108, 112, nil, 110, 121, 122, nil, - 104, 105, 49, 50, 48, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 246, nil, nil, 254, nil, nil, - 66, 67, nil, nil, 68, nil, nil, nil, nil, nil, - 52, nil, nil, nil, nil, nil, nil, nil, nil, 251, - nil, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - nil, nil, 81, 82, 83, 85, 65, 92, 106, 107, - 71, 72, 46, 47, nil, 75, nil, 73, 74, 76, - 355, 356, 79, 80, nil, nil, nil, nil, nil, 84, - 350, 358, 115, 114, 116, 117, nil, nil, 255, nil, - nil, nil, nil, nil, nil, 53, nil, nil, 119, 118, - 120, 111, 64, 109, 108, 112, nil, 110, 121, 122, - nil, 104, 105, 49, 50, 48, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 246, nil, nil, 254, nil, - nil, 66, 67, nil, nil, 68, nil, nil, nil, nil, - nil, 52, nil, nil, nil, nil, nil, nil, nil, nil, - 251, nil, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, 81, 82, 83, 85, 65, 92, 106, - 107, 71, 72, 46, 47, nil, 75, nil, 73, 74, - 76, 355, 356, 79, 80, nil, nil, nil, nil, nil, - 84, 350, 358, 115, 114, 116, 117, nil, nil, 255, - nil, nil, nil, nil, nil, nil, 53, nil, nil, 119, - 118, 120, 111, 64, 109, 108, 112, nil, 110, 121, - 122, nil, 104, 105, 49, 50, 48, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 246, nil, nil, 254, - nil, nil, 66, 67, nil, nil, 68, nil, nil, nil, - nil, nil, 52, nil, nil, nil, nil, nil, nil, nil, - nil, 251, nil, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 81, 82, 83, 85, 65, 92, - 106, 107, 71, 72, 46, 47, nil, 75, nil, 73, - 74, 76, 355, 356, 79, 80, nil, nil, nil, nil, - nil, 84, 350, 358, 115, 114, 116, 117, nil, nil, - 255, nil, nil, nil, nil, nil, nil, 53, nil, nil, - 119, 118, 120, 111, 64, 109, 108, 112, nil, 110, - 121, 122, nil, 104, 105, 49, 50, 48, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 246, nil, nil, - 254, nil, nil, 66, 67, nil, nil, 68, nil, nil, - nil, nil, nil, 52, nil, nil, nil, nil, nil, nil, - nil, nil, 251, nil, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 81, 82, 83, 85, 65, - 92, 106, 107, 71, 72, 46, 47, nil, 75, nil, - 73, 74, 76, 355, 356, 79, 80, nil, nil, nil, - nil, nil, 84, 350, 358, 115, 114, 116, 117, nil, - nil, 255, nil, nil, nil, nil, nil, nil, 53, nil, - nil, 119, 118, 120, 111, 64, 109, 108, 112, nil, - 110, 121, 122, nil, 104, 105, 49, 50, 48, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 246, nil, - nil, 254, nil, nil, 66, 67, nil, nil, 68, nil, - nil, nil, nil, nil, 52, nil, nil, nil, nil, nil, - nil, nil, nil, 251, nil, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, 81, 82, 83, 85, - 65, 92, 106, 107, 71, 72, 46, 47, nil, 75, - nil, 73, 74, 76, 355, 356, 79, 80, nil, nil, - nil, nil, nil, 84, 350, 358, 115, 114, 116, 117, - nil, nil, 255, nil, nil, nil, nil, nil, nil, 53, - nil, nil, 119, 118, 120, 111, 64, 109, 108, 112, - nil, 110, 121, 122, nil, 104, 105, 49, 50, 48, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 246, - nil, nil, 254, nil, nil, 66, 67, nil, nil, 68, - nil, nil, nil, nil, nil, 52, nil, nil, nil, nil, - nil, nil, nil, nil, 251, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, 81, 82, 83, - 85, 65, 92, 106, 107, 71, 72, 46, 47, nil, - 75, nil, 73, 74, 76, 355, 356, 79, 80, nil, - nil, nil, nil, nil, 84, 350, 358, 115, 114, 116, - 117, nil, nil, 255, nil, nil, nil, nil, nil, nil, - 53, nil, nil, 119, 118, 120, 111, 64, 109, 108, - 112, nil, 110, 121, 122, nil, 104, 105, 49, 50, - 48, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 246, nil, nil, 254, nil, nil, 66, 67, nil, nil, - 68, nil, nil, nil, nil, nil, 52, nil, nil, nil, - nil, nil, nil, nil, nil, 251, nil, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, 81, 82, - 83, 85, 65, 92, 106, 107, 71, 72, 46, 47, - nil, 75, nil, 73, 74, 76, 355, 356, 79, 80, - nil, nil, nil, nil, nil, 84, 350, 358, 115, 114, - 116, 117, nil, nil, 255, nil, nil, nil, nil, nil, - nil, 53, nil, nil, 119, 118, 120, 111, 64, 109, - 108, 112, nil, 110, 121, 122, nil, 104, 105, 49, - 50, 48, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 246, nil, nil, 254, nil, nil, 66, 67, nil, - nil, 68, nil, nil, nil, nil, nil, 52, nil, nil, - nil, nil, nil, nil, nil, nil, 251, nil, nil, nil, - nil, 102, 90, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, 81, - 82, 83, 85, 65, 92, 106, 107, 71, 72, 46, - 47, nil, 75, nil, 73, 74, 76, 355, 356, 79, - 80, nil, nil, nil, nil, nil, 84, 350, 358, 115, - 114, 116, 117, nil, nil, 255, nil, nil, nil, nil, - nil, nil, 53, nil, nil, 119, 118, 120, 111, 64, - 109, 108, 112, nil, 110, 121, 122, nil, 104, 105, - 49, 50, 48, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 246, nil, nil, 254, nil, nil, 66, 67, - nil, nil, 68, nil, nil, nil, nil, nil, 52, nil, - nil, nil, nil, nil, nil, nil, nil, 251, nil, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - 81, 82, 83, 85, 65, 92, 106, 107, 71, 72, - 46, 47, nil, 75, nil, 73, 74, 76, 355, 356, - 79, 80, nil, nil, nil, nil, nil, 84, 350, 358, - 115, 114, 116, 117, nil, nil, 255, nil, nil, nil, - nil, nil, nil, 53, nil, nil, 119, 118, 120, 111, - 64, 109, 108, 112, nil, 110, 121, 122, nil, 104, - 105, 49, 50, 48, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 246, nil, nil, 254, nil, nil, 66, - 67, nil, nil, 68, nil, nil, nil, nil, nil, 52, - nil, nil, nil, nil, nil, nil, nil, nil, 251, nil, - nil, nil, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, 81, 82, 83, 85, 65, 92, 106, 107, 71, - 72, 46, 47, nil, 75, nil, 73, 74, 76, 355, - 356, 79, 80, nil, nil, nil, nil, nil, 84, 350, - 358, 115, 114, 116, 117, nil, nil, 255, nil, nil, - nil, nil, nil, nil, 53, nil, nil, 119, 118, 120, - 111, 64, 109, 108, 112, nil, 110, 121, 122, nil, - 104, 105, 49, 50, 48, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 246, nil, nil, 254, nil, nil, - 66, 67, nil, nil, 68, nil, nil, nil, nil, nil, - 52, nil, nil, nil, nil, nil, nil, nil, nil, 251, - nil, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - nil, nil, 81, 82, 83, 85, 65, 92, 106, 107, - 71, 72, 46, 47, nil, 75, nil, 73, 74, 76, - 35, 36, 79, 80, nil, nil, nil, nil, nil, 84, - 33, 32, 115, 114, 116, 117, nil, nil, 23, nil, - nil, nil, nil, nil, nil, 53, nil, nil, 119, 118, - 120, 111, 64, 109, 108, 112, nil, 110, 121, 122, - nil, 104, 105, 49, 50, 48, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 246, nil, nil, 254, nil, - nil, 66, 67, nil, nil, 68, nil, nil, nil, nil, - nil, 52, nil, nil, nil, nil, nil, nil, nil, nil, - 24, nil, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, 81, 82, 83, 85, 65, 92, 106, - 107, 71, 72, 46, 47, nil, 75, nil, 73, 74, - 76, 35, 36, 79, 80, nil, nil, nil, nil, nil, - 84, 33, 32, 115, 114, 116, 117, nil, nil, 255, - nil, nil, nil, nil, nil, nil, 53, nil, nil, 119, - 118, 120, 111, 64, 109, 108, 112, 328, 110, 121, - 122, nil, 104, 105, 49, 50, 48, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 246, nil, nil, 254, - nil, nil, 66, 67, nil, nil, 68, nil, 325, nil, - 323, nil, 52, nil, nil, 329, nil, nil, nil, nil, - nil, 251, nil, nil, nil, nil, 102, 326, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 81, 82, 83, 85, 65, 92, - 106, 107, 71, 72, 46, 563, nil, 75, nil, 73, - 74, 76, 35, 36, 79, 80, nil, nil, nil, nil, - nil, 84, 33, 32, 115, 114, 116, 117, nil, nil, - 255, nil, nil, nil, nil, nil, nil, 53, nil, nil, - 119, 118, 120, 111, 64, 109, 108, 112, 328, 110, - 121, 122, nil, 104, 105, 49, 50, 48, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 246, nil, nil, - 254, nil, nil, 66, 67, nil, nil, 68, nil, 325, - nil, 323, nil, 52, nil, nil, 329, nil, nil, nil, - nil, nil, 251, nil, nil, nil, nil, 102, 326, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 81, 82, 83, 85, 65, - 92, 106, 107, 71, 72, 46, 47, nil, 75, nil, - 73, 74, 76, 35, 36, 79, 80, nil, nil, nil, - nil, nil, 84, 33, 32, 115, 114, 116, 117, nil, - nil, 255, nil, nil, nil, nil, nil, nil, 53, nil, - nil, 119, 118, 120, 111, 64, 109, 108, 112, 328, - 110, 121, 122, nil, 104, 105, 49, 50, 48, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 246, nil, - nil, 254, nil, nil, 66, 67, nil, nil, 68, nil, - 325, nil, 323, nil, 52, nil, nil, 329, nil, nil, - nil, nil, nil, 251, nil, nil, nil, nil, 102, 326, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, 241, nil, nil, 81, 82, 83, 85, - 65, 92, 106, 107, 71, 72, 46, 47, nil, 75, - nil, 73, 74, 76, 355, 356, 79, 80, nil, nil, - nil, nil, nil, 84, 350, 358, 115, 114, 116, 117, - nil, nil, 255, nil, nil, nil, nil, nil, nil, 53, - nil, nil, 119, 118, 120, 111, 64, 109, 108, 112, - nil, 110, 121, 122, nil, 104, 105, 49, 50, 48, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 246, - nil, nil, 254, nil, nil, 66, 67, nil, nil, 68, - nil, nil, nil, nil, nil, 52, nil, nil, nil, nil, - nil, nil, nil, nil, 251, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, 81, 82, 83, - 85, 65, 92, 106, 107, 71, 72, 46, 47, nil, - 75, nil, 73, 74, 76, 355, 356, 79, 80, nil, - nil, nil, nil, nil, 84, 350, 358, 115, 114, 116, - 117, nil, nil, 255, nil, nil, nil, nil, nil, nil, - 53, nil, nil, 119, 118, 120, 111, 64, 109, 108, - 112, nil, 110, 121, 122, nil, 104, 105, 49, 50, - 48, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 246, nil, nil, 254, nil, nil, 66, 67, nil, nil, - 68, nil, nil, nil, nil, nil, 52, nil, nil, nil, - nil, nil, nil, nil, nil, 251, nil, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, 81, 82, - 83, 85, 65, 92, 106, 107, 71, 72, 46, 47, - nil, 75, nil, 73, 74, 76, 355, 356, 79, 80, - nil, nil, nil, nil, nil, 84, 350, 358, 115, 114, - 116, 117, nil, nil, 255, nil, nil, nil, nil, nil, - nil, 53, nil, nil, 119, 118, 120, 111, 64, 109, - 108, 112, nil, 110, 121, 122, nil, 104, 105, 49, - 50, 48, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 246, nil, nil, 254, nil, nil, 66, 67, nil, - nil, 68, nil, nil, nil, nil, nil, 52, nil, nil, - nil, nil, nil, nil, nil, nil, 251, nil, nil, nil, - nil, 102, 90, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, 81, - 82, 83, 85, 65, 92, 106, 107, 71, 72, 46, - 47, nil, 75, nil, 73, 74, 76, 355, 356, 79, - 80, nil, nil, nil, nil, nil, 84, 350, 358, 115, - 114, 116, 117, nil, nil, 255, nil, nil, nil, nil, - nil, nil, 53, nil, nil, 119, 118, 120, 111, 64, - 109, 108, 112, nil, 110, 121, 122, nil, 104, 105, - 49, 50, 48, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 246, nil, nil, 254, nil, nil, 66, 67, - nil, nil, 68, nil, nil, nil, nil, nil, 52, nil, - nil, nil, nil, nil, nil, nil, nil, 251, nil, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - nil, nil, nil, 85, nil, 92, 106, 107, nil, nil, - 46, 47, 81, 82, 83, 11, 65, nil, nil, nil, - 71, 72, nil, nil, nil, 75, nil, 73, 74, 76, - 35, 36, 79, 80, nil, nil, nil, nil, nil, 84, - 33, 32, 115, 114, 116, 117, nil, nil, 23, nil, - nil, nil, nil, nil, 10, 53, nil, 12, 119, 118, - 120, 111, 64, 109, 108, 112, nil, 110, 121, 122, - nil, 104, 105, 49, 50, 48, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 45, nil, nil, 38, nil, - nil, 66, 67, nil, nil, 68, nil, 40, nil, nil, - nil, 52, nil, nil, nil, nil, nil, nil, nil, nil, - 24, nil, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, 81, 82, 83, 85, 65, 92, 106, - 107, 71, 72, 46, 47, nil, 75, nil, 73, 74, - 76, 355, 356, 79, 80, nil, nil, nil, nil, nil, - 84, 350, 358, 115, 114, 116, 117, nil, nil, 255, - nil, nil, nil, nil, nil, nil, 53, nil, nil, 119, - 118, 120, 111, 64, 109, 108, 112, nil, 110, 121, - 122, nil, 104, 105, 49, 50, 48, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 246, nil, nil, 254, - nil, nil, 66, 67, nil, nil, 68, nil, nil, nil, - nil, nil, 52, nil, nil, nil, nil, nil, nil, nil, - nil, 251, nil, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 81, 82, 83, 85, 65, 92, - 106, 107, 71, 72, 46, 47, nil, 75, nil, 73, - 74, 76, 35, 36, 79, 80, nil, nil, nil, nil, - nil, 84, 33, 32, 115, 114, 116, 117, nil, nil, - 23, nil, nil, nil, nil, nil, nil, 53, nil, nil, - 119, 118, 120, 111, 64, 109, 108, 112, nil, 110, - 121, 122, nil, 104, 105, 49, 50, 48, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 246, nil, nil, - 254, nil, nil, 66, 67, nil, nil, 68, nil, nil, - nil, nil, nil, 52, nil, nil, nil, nil, nil, nil, - nil, nil, 24, nil, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 81, 82, 83, 85, 65, - 92, 106, 107, 71, 72, 46, 47, nil, 75, nil, - 73, 74, 76, 35, 36, 79, 80, nil, nil, nil, - nil, nil, 84, 33, 32, 115, 114, 116, 117, nil, - nil, 23, nil, nil, nil, nil, nil, nil, 53, nil, - nil, 119, 118, 120, 111, 64, 109, 108, 112, nil, - 110, 121, 122, nil, 104, 105, 49, 50, 48, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 246, nil, - nil, 254, nil, nil, 66, 67, nil, nil, 68, nil, - nil, nil, nil, nil, 52, nil, nil, nil, nil, nil, - nil, nil, nil, 24, nil, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, 81, 82, 83, 85, - 65, 92, 106, 107, 71, 72, 46, 47, nil, 75, - nil, 73, 74, 76, 355, 356, 79, 80, nil, nil, - nil, nil, nil, 84, 350, 358, 115, 114, 116, 117, - nil, nil, 255, nil, nil, nil, nil, nil, nil, 53, - nil, nil, 119, 118, 120, 111, 64, 109, 108, 112, - nil, 110, 121, 122, nil, 104, 105, 49, 50, 48, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 246, - nil, nil, 254, nil, nil, 66, 67, nil, nil, 68, - nil, nil, nil, nil, nil, 52, nil, nil, nil, nil, - nil, nil, nil, nil, 251, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, nil, nil, nil, - 85, nil, 92, 106, 107, -275, nil, 46, 47, nil, - nil, nil, -275, -275, -275, nil, nil, -275, -275, -275, - nil, -275, nil, nil, nil, nil, nil, nil, nil, -275, - -275, -275, -275, nil, nil, nil, nil, nil, nil, nil, - nil, -275, -275, nil, -275, -275, -275, -275, -275, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, -275, -275, -275, -275, -275, -275, -275, -275, -275, - -275, -275, -275, -275, -275, nil, nil, -275, -275, -275, - nil, nil, -275, nil, 307, -275, nil, nil, -275, -275, - nil, -275, nil, -275, nil, -275, nil, -275, -275, nil, - -275, -275, -275, -275, -275, nil, -275, -275, -275, 494, - nil, 491, 490, 489, 499, 492, nil, nil, nil, nil, - nil, nil, -275, nil, 502, -275, -275, -721, -275, nil, - -275, nil, nil, nil, -721, -721, -721, -275, nil, -721, - -721, -721, nil, -721, nil, nil, 497, nil, nil, nil, - nil, -721, -721, -721, -721, -721, nil, 510, 509, nil, - nil, nil, 503, -721, -721, nil, -721, -721, -721, -721, - -721, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, -721, -721, -721, -721, -721, -721, -721, - -721, -721, -721, -721, -721, -721, -721, nil, nil, -721, - -721, -721, nil, nil, -721, nil, nil, -721, nil, nil, - -721, -721, nil, -721, nil, -721, nil, -721, nil, -721, - -721, nil, -721, -721, -721, -721, -721, nil, -721, -721, - -721, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, -721, nil, nil, -721, -721, -721, - -721, nil, -721, -722, -721, nil, nil, nil, nil, -721, - -722, -722, -722, nil, nil, -722, -722, -722, nil, -722, - nil, nil, nil, nil, nil, nil, nil, -722, -722, -722, - -722, -722, nil, nil, nil, nil, nil, nil, nil, -722, - -722, nil, -722, -722, -722, -722, -722, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, -722, - -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, - -722, -722, -722, nil, nil, -722, -722, -722, nil, nil, - -722, nil, nil, -722, nil, nil, -722, -722, nil, -722, - nil, -722, nil, -722, nil, -722, -722, nil, -722, -722, - -722, -722, -722, nil, -722, -722, -722, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - -722, nil, nil, -722, -722, -722, -722, nil, -722, nil, - -722, nil, 81, 82, 83, -722, 65, nil, nil, nil, - 71, 72, nil, nil, nil, 75, nil, 73, 74, 76, - 35, 36, 79, 80, nil, nil, nil, nil, nil, 84, - 33, 32, 115, 114, 116, 117, nil, nil, 255, nil, - nil, nil, nil, nil, nil, 53, nil, nil, 119, 118, - 120, 111, 64, 109, 108, 112, nil, 110, 121, 122, - nil, 104, 105, 49, 50, 48, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 246, nil, nil, 254, nil, - nil, 66, 67, nil, nil, 68, nil, nil, nil, nil, - nil, 52, nil, nil, nil, nil, nil, nil, nil, nil, - 251, nil, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, 81, 82, 83, 85, 65, 92, 106, - 107, 71, 72, 46, 47, nil, 75, nil, 73, 74, - 76, 355, 356, 79, 80, nil, nil, nil, nil, nil, - 84, 350, 358, 115, 114, 116, 117, nil, nil, 255, - nil, nil, nil, nil, nil, nil, 53, nil, nil, 119, - 118, 120, 111, 64, 109, 108, 112, nil, 110, 121, - 122, nil, 104, 105, 49, 50, 48, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 246, nil, nil, 254, - nil, nil, 66, 67, nil, nil, 68, nil, nil, nil, - nil, nil, 52, nil, nil, nil, nil, nil, nil, nil, - nil, 251, nil, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 81, 82, 83, 85, 65, 92, - 106, 107, 71, 72, 46, 47, nil, 75, nil, 73, - 74, 76, 35, 36, 79, 80, nil, nil, nil, nil, - nil, 84, 33, 32, 115, 114, 116, 117, nil, nil, - 255, nil, nil, nil, nil, nil, nil, 53, nil, nil, - 119, 118, 120, 111, 64, 109, 108, 112, nil, 110, - 121, 122, nil, 104, 105, 49, 50, 48, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 246, nil, nil, - 254, nil, nil, 66, 67, nil, nil, 68, nil, nil, - nil, nil, nil, 52, nil, nil, nil, nil, nil, nil, - nil, nil, 251, nil, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 81, 82, 83, 85, 65, - 92, 106, 107, 71, 72, 46, 47, nil, 75, nil, - 73, 74, 76, 35, 36, 79, 80, nil, nil, nil, - nil, nil, 84, 33, 32, 115, 114, 116, 117, nil, - nil, 255, nil, nil, nil, nil, nil, nil, 53, nil, - nil, 119, 118, 120, 111, 64, 109, 108, 112, 328, - 110, 121, 122, nil, 104, 105, 49, 50, 48, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 246, nil, - nil, 254, nil, nil, 66, 67, nil, nil, 68, nil, - 325, nil, 323, nil, 52, nil, nil, 329, nil, nil, - nil, nil, nil, 251, nil, nil, nil, nil, 102, 326, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, 81, 82, 83, 85, - 65, 92, 106, 107, 71, 72, 46, 47, nil, 75, - nil, 73, 74, 76, 355, 356, 79, 80, nil, nil, - nil, nil, nil, 84, 350, 358, 115, 114, 116, 117, - nil, nil, 255, nil, nil, nil, nil, nil, nil, 53, - nil, nil, 119, 118, 120, 111, 64, 109, 108, 112, - nil, 110, 121, 122, nil, 104, 105, 49, 50, 48, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 246, - nil, nil, 254, nil, nil, 66, 67, nil, nil, 68, - nil, nil, nil, nil, nil, 52, nil, nil, nil, nil, - nil, nil, nil, nil, 251, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, 81, 82, 83, - 85, 65, 92, 106, 107, 71, 72, 46, 47, nil, - 75, nil, 73, 74, 76, 355, 356, 79, 80, nil, - nil, nil, nil, nil, 84, 350, 358, 115, 114, 116, - 117, nil, nil, 255, nil, nil, nil, nil, nil, nil, - 53, nil, nil, 119, 118, 120, 111, 64, 109, 108, - 112, nil, 110, 121, 122, nil, 104, 105, 49, 50, - 48, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 246, nil, nil, 254, nil, nil, 66, 67, nil, nil, - 68, nil, nil, nil, nil, nil, 52, nil, nil, nil, - nil, nil, nil, nil, nil, 251, nil, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, 81, 82, - 83, 85, 65, 92, 106, 107, 71, 72, 46, 47, - nil, 75, nil, 73, 74, 76, 355, 356, 79, 80, - nil, nil, nil, nil, nil, 84, 350, 358, 115, 114, - 116, 117, nil, nil, 255, nil, nil, nil, nil, nil, - nil, 53, nil, nil, 119, 118, 120, 111, 64, 109, - 108, 112, nil, 110, 121, 122, nil, 104, 105, 49, - 50, 48, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 246, nil, nil, 254, nil, nil, 66, 67, nil, - nil, 68, nil, nil, nil, nil, nil, 52, nil, nil, - nil, nil, nil, nil, nil, nil, 251, nil, nil, nil, - nil, 102, 90, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, nil, - nil, nil, 85, nil, 92, 106, 107, -275, nil, 46, - 47, nil, nil, nil, -275, -275, -275, nil, nil, -275, - -275, -275, 494, -275, 491, 490, 489, 499, 492, nil, - nil, -275, -275, -275, nil, nil, nil, 502, nil, nil, - nil, nil, nil, -275, -275, nil, -275, -275, -275, -275, - -275, nil, 494, nil, 491, 490, 489, 499, 492, 497, - 647, nil, nil, nil, nil, nil, nil, 502, 507, 506, - 510, 509, nil, nil, nil, 503, nil, 494, nil, 491, - 490, 489, 499, 492, -275, nil, nil, nil, nil, 497, - nil, -275, 502, nil, nil, nil, 307, -275, 507, 506, - 510, 509, nil, nil, nil, 503, nil, nil, nil, nil, - nil, nil, nil, nil, 497, 488, nil, nil, nil, -275, - -275, nil, nil, 507, 506, 510, 509, nil, nil, nil, - 503, nil, nil, nil, -275, nil, nil, -275, nil, 81, - 82, 83, -275, 65, nil, 488, nil, 71, 72, -275, - nil, nil, 75, nil, 73, 74, 76, 355, 356, 79, - 80, nil, nil, nil, nil, nil, 84, 350, 358, 115, - 114, 116, 117, nil, nil, 255, nil, nil, nil, nil, - nil, nil, 53, nil, nil, 119, 118, 120, 111, 64, - 109, 108, 112, nil, 110, 121, 122, nil, 104, 105, - 49, 50, 48, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 246, nil, nil, 254, nil, nil, 66, 67, - nil, nil, 68, nil, nil, nil, nil, nil, 52, nil, - nil, nil, nil, nil, nil, nil, nil, 251, nil, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - 81, 82, 83, 85, 65, 92, 106, 107, 71, 72, - 46, 47, nil, 75, nil, 73, 74, 76, 355, 356, - 79, 80, nil, nil, nil, nil, nil, 84, 350, 358, - 115, 114, 116, 117, nil, nil, 255, nil, nil, nil, - nil, nil, nil, 53, nil, nil, 119, 118, 120, 111, - 64, 109, 108, 112, 328, 110, 121, 122, nil, 104, - 105, 49, 50, 48, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 246, nil, nil, 254, nil, nil, 66, - 67, nil, nil, 68, nil, 800, nil, 323, nil, 52, - nil, nil, 329, nil, nil, nil, nil, nil, 251, nil, - nil, nil, nil, 102, 326, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, 81, 82, 83, 85, 65, 92, 106, 107, 71, - 72, 46, 47, nil, 75, nil, 73, 74, 76, 355, - 356, 79, 80, nil, nil, nil, nil, nil, 84, 350, - 358, 115, 114, 116, 117, nil, nil, 255, nil, nil, - nil, nil, nil, nil, 53, nil, nil, 119, 118, 120, - 111, 64, 109, 108, 112, 328, 110, 121, 122, nil, - 104, 105, 49, 50, 48, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 246, nil, nil, 254, nil, nil, - 66, 67, nil, nil, 68, nil, nil, nil, 323, nil, - 52, nil, nil, 329, nil, nil, nil, nil, nil, 251, - nil, nil, nil, nil, 102, 326, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - nil, nil, 81, 82, 83, 85, 65, 92, 106, 107, - 71, 72, 46, 47, nil, 75, nil, 73, 74, 76, - 355, 356, 79, 80, nil, nil, nil, nil, nil, 84, - 350, 358, 115, 114, 116, 117, nil, nil, 255, nil, - nil, nil, nil, nil, nil, 53, nil, nil, 119, 118, - 120, 111, 64, 109, 108, 112, nil, 110, 121, 122, - nil, 104, 105, 49, 50, 48, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 246, nil, nil, 254, nil, - nil, 66, 67, nil, nil, 68, nil, nil, nil, nil, - nil, 52, nil, nil, nil, nil, nil, nil, nil, nil, - 251, nil, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, nil, nil, nil, 85, nil, 92, 106, - 107, nil, nil, 46, 47, 81, 82, 83, 11, 65, - nil, nil, nil, 71, 72, nil, nil, nil, 75, nil, - 73, 74, 76, 35, 36, 79, 80, nil, nil, nil, - nil, nil, 84, 33, 32, 115, 114, 116, 117, nil, - nil, 23, nil, nil, nil, nil, nil, 10, 53, 336, - 12, 119, 118, 120, 111, 64, 109, 108, 112, nil, - 110, 121, 122, nil, 104, 105, 49, 50, 48, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 45, nil, - nil, 38, nil, nil, 66, 67, nil, nil, 68, nil, - 40, nil, nil, nil, 52, nil, nil, nil, nil, nil, - nil, nil, nil, 24, nil, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, nil, nil, 421, 85, - nil, 92, 106, 107, nil, nil, 46, 47, 81, 82, - 83, nil, 65, nil, nil, nil, 71, 72, nil, nil, - nil, 75, nil, 73, 74, 76, 35, 36, 79, 80, - nil, nil, nil, nil, nil, 84, 33, 32, 115, 114, - 116, 117, nil, nil, 255, nil, nil, nil, nil, nil, - nil, 53, nil, nil, 119, 118, 120, 111, 64, 109, - 108, 112, 328, 110, 121, 122, nil, 104, 105, 49, - 50, 48, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 246, nil, nil, 254, nil, nil, 66, 67, nil, - nil, 68, nil, 325, nil, 323, nil, 52, nil, nil, - 329, nil, nil, nil, nil, nil, 251, nil, nil, nil, - nil, 102, 326, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, 81, - 82, 83, 85, 65, 92, 106, 107, 71, 72, 46, - 47, nil, 75, nil, 73, 74, 76, 355, 356, 79, - 80, nil, nil, nil, nil, nil, 84, 350, 358, 115, - 114, 116, 117, nil, nil, 255, nil, nil, nil, nil, - nil, nil, 53, nil, nil, 119, 118, 120, 111, 64, - 109, 108, 112, nil, 110, 121, 122, nil, 104, 105, - 49, 50, 48, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 246, nil, nil, 254, nil, nil, 66, 67, - nil, nil, 68, nil, nil, nil, nil, nil, 52, nil, - nil, nil, nil, nil, nil, nil, nil, 251, nil, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - 81, 82, 83, 85, 65, 92, 106, 107, 71, 72, - 46, 47, nil, 75, nil, 73, 74, 76, 355, 356, - 79, 80, nil, nil, nil, nil, nil, 84, 350, 358, - 115, 114, 116, 117, nil, nil, 255, nil, nil, nil, - nil, nil, nil, 53, nil, nil, 119, 118, 120, 111, - 64, 109, 108, 112, nil, 110, 121, 122, nil, 104, - 105, 49, 50, 48, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 246, nil, nil, 254, nil, nil, 66, - 67, nil, nil, 68, nil, nil, nil, nil, nil, 52, - nil, nil, nil, nil, nil, nil, nil, nil, 251, nil, - nil, nil, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, 81, 82, 83, 85, 65, 92, 106, 107, 71, - 72, 46, 47, nil, 75, nil, 73, 74, 76, 355, - 356, 79, 80, nil, nil, nil, nil, nil, 84, 350, - 358, 115, 114, 116, 117, nil, nil, 255, nil, nil, - nil, nil, nil, nil, 53, nil, nil, 119, 118, 120, - 111, 64, 109, 108, 112, nil, 110, 121, 122, nil, - 104, 105, 49, 50, 48, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 246, nil, nil, 254, nil, nil, - 66, 67, nil, nil, 68, nil, nil, nil, nil, nil, - 52, nil, nil, nil, nil, nil, nil, nil, nil, 251, - nil, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - nil, nil, 81, 82, 83, 85, 65, 92, 106, 107, - 71, 72, 46, 47, nil, 75, nil, 73, 74, 76, - 355, 356, 79, 80, nil, nil, nil, nil, nil, 84, - 350, 358, 115, 114, 116, 117, nil, nil, 255, nil, - nil, nil, nil, nil, nil, 53, nil, nil, 119, 118, - 120, 111, 64, 109, 108, 112, 328, 110, 121, 122, - nil, 104, 105, 49, 50, 48, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 246, nil, nil, 254, nil, - nil, 66, 67, nil, nil, 68, nil, 800, nil, nil, - nil, 52, nil, nil, 329, nil, nil, nil, nil, nil, - 251, nil, nil, nil, nil, 102, 326, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, 81, 82, 83, 85, 65, 92, 106, - 107, 71, 72, 46, 47, nil, 75, nil, 73, 74, - 76, 355, 356, 79, 80, nil, nil, nil, nil, nil, - 84, 350, 358, 115, 114, 116, 117, nil, nil, 255, - nil, nil, nil, nil, nil, nil, 53, nil, nil, 119, - 118, 120, 111, 64, 109, 108, 112, 328, 110, 121, - 122, nil, 104, 105, 49, 50, 48, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 246, nil, nil, 254, - nil, nil, 66, 67, nil, nil, 68, nil, nil, nil, - nil, nil, 52, nil, nil, 329, nil, nil, nil, nil, - nil, 251, nil, nil, nil, nil, 102, 326, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 81, 82, 83, 85, 65, 92, - 106, 107, 71, 72, 46, 47, nil, 75, nil, 73, - 74, 76, 355, 356, 79, 80, nil, nil, nil, nil, - nil, 84, 350, 358, 115, 114, 116, 117, nil, nil, - 255, nil, nil, nil, nil, nil, nil, 53, nil, nil, - 119, 118, 120, 111, 64, 109, 108, 112, nil, 110, - 121, 122, nil, 104, 105, 49, 50, 48, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 246, nil, nil, - 254, nil, nil, 66, 67, nil, nil, 68, nil, 325, - nil, nil, nil, 52, nil, nil, nil, nil, nil, nil, - nil, nil, 251, nil, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 81, 82, 83, 85, 65, - 92, 106, 107, 71, 72, 46, 47, nil, 75, nil, - 73, 74, 76, 35, 36, 79, 80, nil, nil, nil, - nil, nil, 84, 33, 32, 115, 114, 116, 117, nil, - nil, 255, nil, nil, nil, nil, nil, nil, 53, nil, - nil, 119, 118, 120, 111, 64, 109, 108, 112, 328, - 110, 121, 122, nil, 104, 105, 49, 50, 48, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 246, nil, - nil, 254, nil, nil, 66, 67, nil, nil, 68, nil, - 325, nil, 323, nil, 52, nil, nil, 329, nil, nil, - nil, nil, nil, 251, nil, nil, nil, nil, 102, 326, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, 81, 82, 83, 85, - 65, 92, 106, 107, 71, 72, 46, 47, nil, 75, - nil, 73, 74, 76, 35, 36, 79, 80, nil, nil, - nil, nil, nil, 84, 33, 32, 115, 114, 116, 117, - nil, nil, 255, nil, nil, nil, nil, nil, nil, 53, - nil, nil, 119, 118, 120, 111, 64, 109, 108, 112, - 328, 110, 121, 122, nil, 104, 105, 49, 50, 48, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 246, - nil, nil, 254, nil, nil, 66, 67, nil, nil, 68, - nil, 325, nil, 323, nil, 52, nil, nil, 329, nil, - nil, nil, nil, nil, 251, nil, nil, nil, nil, 102, - 326, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, nil, nil, nil, - 85, nil, 92, 106, 107, nil, nil, 46, 47, 81, - 82, 83, 11, 65, nil, nil, nil, 71, 72, nil, - nil, nil, 75, nil, 73, 74, 76, 35, 36, 79, - 80, nil, nil, nil, nil, nil, 84, 33, 32, 115, - 114, 116, 117, nil, nil, 23, nil, nil, nil, nil, - nil, 10, 53, nil, 12, 119, 118, 120, 111, 64, - 109, 108, 112, nil, 110, 121, 122, nil, 104, 105, - 49, 50, 48, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 45, nil, nil, 38, nil, nil, 66, 67, - nil, nil, 68, nil, 40, nil, nil, nil, 52, nil, - nil, nil, nil, nil, nil, nil, nil, 24, nil, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - 81, 82, 83, 85, 65, 92, 106, 107, 71, 72, - 46, 47, nil, 75, nil, 73, 74, 76, 355, 356, - 79, 80, nil, nil, nil, nil, nil, 84, 350, 358, - 115, 114, 116, 117, nil, nil, 255, nil, nil, nil, - nil, nil, nil, 53, nil, nil, 119, 118, 120, 111, - 64, 109, 108, 112, nil, 110, 121, 122, nil, 104, - 105, 49, 50, 48, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 246, nil, nil, 254, nil, nil, 66, - 67, nil, nil, 68, nil, 870, nil, nil, nil, 52, - nil, nil, nil, nil, nil, nil, nil, nil, 251, nil, - nil, nil, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, 81, 82, 83, 85, 65, 92, 106, 107, 71, - 72, 46, 47, nil, 75, nil, 73, 74, 76, 35, - 36, 79, 80, nil, nil, nil, nil, nil, 84, 33, - 32, 115, 114, 116, 117, nil, nil, 255, nil, nil, - nil, nil, nil, nil, 53, nil, nil, 119, 118, 120, - 111, 64, 109, 108, 112, nil, 110, 121, 122, nil, - 104, 105, 49, 50, 48, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 246, nil, nil, 254, nil, nil, - 66, 67, nil, nil, 68, nil, nil, nil, nil, nil, - 52, nil, nil, nil, nil, nil, nil, nil, nil, 251, - nil, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - nil, nil, 81, 82, 83, 85, 65, 92, 106, 107, - 71, 72, 46, 47, nil, 75, nil, 73, 74, 76, - 35, 36, 79, 80, nil, nil, nil, nil, nil, 84, - 33, 32, 115, 114, 116, 117, nil, nil, 255, nil, - nil, nil, nil, nil, nil, 53, nil, nil, 119, 118, - 120, 111, 64, 109, 108, 112, 328, 110, 121, 122, - nil, 104, 105, 49, 50, 48, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 246, nil, nil, 254, nil, - nil, 66, 67, nil, nil, 68, nil, 325, nil, 323, - nil, 52, nil, nil, 329, nil, nil, nil, nil, nil, - 251, nil, nil, nil, nil, 102, 326, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, nil, nil, nil, 85, nil, 92, 106, - 107, nil, nil, 46, 47, 81, 82, 83, 11, 65, - nil, nil, nil, 71, 72, nil, nil, nil, 75, nil, - 73, 74, 76, 35, 36, 79, 80, nil, nil, nil, - nil, nil, 84, 33, 32, 115, 114, 116, 117, nil, - nil, 23, nil, nil, nil, nil, nil, 10, 53, nil, - 12, 119, 118, 120, 111, 64, 109, 108, 112, nil, - 110, 121, 122, nil, 104, 105, 49, 50, 48, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 45, nil, - nil, 38, nil, nil, 66, 67, nil, nil, 68, nil, - 40, nil, nil, nil, 52, nil, nil, nil, nil, nil, - nil, nil, nil, 24, nil, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, 81, 82, 83, 85, - 65, 92, 106, 107, 71, 72, 46, 47, nil, 75, - nil, 73, 74, 76, 355, 356, 79, 80, nil, nil, - nil, nil, nil, 84, 350, 358, 115, 114, 116, 117, - nil, nil, 255, nil, nil, nil, nil, nil, nil, 53, - nil, nil, 119, 118, 120, 111, 64, 109, 108, 112, - nil, 110, 121, 122, nil, 104, 105, 49, 50, 48, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 246, - nil, nil, 254, nil, nil, 66, 67, nil, nil, 68, - nil, nil, nil, nil, nil, 52, nil, nil, nil, nil, - nil, nil, nil, nil, 251, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, 81, 82, 83, - 85, 65, 92, 106, 107, 71, 72, 46, 47, nil, - 75, nil, 73, 74, 76, 355, 356, 79, 80, nil, - nil, nil, nil, nil, 84, 350, 358, 115, 114, 116, - 117, nil, nil, 255, nil, nil, nil, nil, nil, nil, - 53, nil, nil, 119, 118, 120, 111, 64, 109, 108, - 112, 328, 110, 121, 122, nil, 104, 105, 49, 50, - 48, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 246, nil, nil, 254, nil, nil, 66, 67, nil, nil, - 68, nil, 800, nil, 323, nil, 52, nil, nil, 329, - nil, nil, nil, nil, nil, 251, nil, nil, nil, nil, - 102, 326, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, 81, 82, - 83, 85, 65, 92, 106, 107, 71, 72, 46, 47, - nil, 75, nil, 73, 74, 76, 355, 356, 79, 80, - nil, nil, nil, nil, nil, 84, 350, 358, 115, 114, - 116, 117, nil, nil, 255, nil, nil, nil, nil, nil, - nil, 53, nil, nil, 119, 118, 120, 111, 64, 109, - 108, 112, 328, 110, 121, 122, nil, 104, 105, 49, - 50, 48, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 246, nil, nil, 254, nil, nil, 66, 67, nil, - nil, 68, nil, nil, nil, 323, nil, 52, nil, nil, - 329, nil, nil, nil, nil, nil, 251, nil, nil, nil, - nil, 102, 326, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, 81, - 82, 83, 85, 65, 92, 106, 107, 71, 72, 46, - 47, nil, 75, nil, 73, 74, 76, 35, 36, 79, - 80, nil, nil, nil, nil, nil, 84, 33, 32, 115, - 114, 116, 117, nil, nil, 255, nil, nil, nil, nil, - nil, nil, 53, nil, nil, 119, 118, 120, 111, 64, - 109, 108, 112, nil, 110, 121, 122, nil, 104, 105, - 49, 50, 48, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 246, nil, nil, 254, nil, nil, 66, 67, - nil, nil, 68, nil, nil, nil, nil, nil, 52, nil, - nil, nil, nil, nil, nil, nil, nil, 251, nil, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - 81, 82, 83, 85, 65, 92, 106, 107, 71, 72, - 46, 47, nil, 75, nil, 73, 74, 76, 35, 36, - 79, 80, nil, nil, nil, nil, nil, 84, 33, 32, - 115, 114, 116, 117, nil, nil, 255, nil, nil, nil, - nil, nil, nil, 53, nil, nil, 119, 118, 120, 111, - 64, 109, 108, 112, nil, 110, 121, 122, nil, 104, - 105, 49, 50, 48, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 246, nil, nil, 254, nil, nil, 66, - 67, nil, nil, 68, nil, nil, nil, nil, nil, 52, - nil, nil, nil, nil, nil, nil, nil, nil, 251, nil, - nil, nil, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, 81, 82, 83, 85, 65, 92, 106, 107, 71, - 72, 46, 47, nil, 75, nil, 73, 74, 76, 35, - 36, 79, 80, nil, nil, nil, nil, nil, 84, 33, - 32, 115, 114, 116, 117, nil, nil, 255, nil, nil, - nil, nil, nil, nil, 53, nil, nil, 119, 118, 120, - 111, 64, 109, 108, 112, nil, 110, 121, 122, nil, - 104, 105, 49, 50, 48, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 246, nil, nil, 254, nil, nil, - 66, 67, nil, nil, 68, nil, nil, nil, nil, nil, - 52, nil, nil, nil, nil, nil, nil, nil, nil, 251, - nil, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - nil, nil, 81, 82, 83, 85, 65, 92, 106, 107, - 71, 72, 46, 47, nil, 75, nil, 73, 74, 76, - 35, 36, 79, 80, nil, nil, nil, nil, nil, 84, - 33, 32, 115, 114, 116, 117, nil, nil, 255, nil, - nil, nil, nil, nil, nil, 53, nil, nil, 119, 118, - 120, 111, 64, 109, 108, 112, nil, 110, 121, 122, - nil, 104, 105, 49, 50, 48, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 246, nil, nil, 254, nil, - nil, 66, 67, nil, nil, 68, nil, nil, nil, nil, - nil, 52, nil, nil, nil, nil, nil, nil, nil, nil, - 251, nil, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, 81, 82, 83, 85, 65, 92, 106, - 107, 71, 72, 46, 47, nil, 75, nil, 73, 74, - 76, 355, 356, 79, 80, nil, nil, nil, nil, nil, - 84, 350, 358, 115, 114, 116, 117, nil, nil, 255, - nil, nil, nil, nil, nil, nil, 53, nil, nil, 119, - 118, 120, 111, 64, 109, 108, 112, nil, 110, 121, - 122, nil, 104, 105, 49, 50, 48, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 246, nil, nil, 254, - nil, nil, 66, 67, nil, nil, 68, nil, 437, nil, - nil, nil, 52, nil, nil, nil, nil, nil, nil, nil, - nil, 251, nil, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 81, 82, 83, 85, 65, 92, - 106, 107, 71, 72, 46, 47, nil, 75, nil, 73, - 74, 76, 355, 356, 79, 80, nil, nil, nil, nil, - nil, 84, 350, 358, 115, 114, 116, 117, nil, nil, - 255, nil, nil, nil, nil, nil, nil, 53, nil, nil, - 119, 118, 120, 111, 64, 109, 108, 112, nil, 110, - 121, 122, nil, 104, 105, 49, 50, 48, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 246, nil, nil, - 254, nil, nil, 66, 67, nil, nil, 68, nil, nil, - nil, nil, nil, 52, nil, nil, nil, nil, nil, nil, - nil, nil, 251, nil, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 81, 82, 83, 85, 65, - 92, 106, 107, 71, 72, 46, 47, nil, 75, nil, - 73, 74, 76, 355, 356, 79, 80, nil, nil, nil, - nil, nil, 84, 350, 358, 115, 114, 116, 117, nil, - nil, 255, nil, nil, nil, nil, nil, nil, 53, nil, - nil, 119, 118, 120, 111, 64, 109, 108, 112, nil, - 110, 121, 122, nil, 104, 105, 49, 50, 48, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 246, nil, - nil, 254, nil, nil, 66, 67, nil, nil, 68, nil, - nil, nil, nil, nil, 52, nil, nil, nil, nil, nil, - nil, nil, nil, 251, nil, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, 81, 82, 83, 85, - 65, 92, 106, 107, 71, 72, 46, 47, nil, 75, - nil, 73, 74, 76, 355, 356, 79, 80, nil, nil, - nil, nil, nil, 84, 350, 358, 115, 114, 116, 117, - nil, nil, 255, nil, nil, nil, nil, nil, nil, 53, - nil, nil, 119, 118, 120, 111, 64, 109, 108, 112, - nil, 110, 121, 122, nil, 104, 105, 49, 50, 48, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 246, - nil, nil, 254, nil, nil, 66, 67, nil, nil, 68, - nil, nil, nil, nil, nil, 52, nil, nil, nil, nil, - nil, nil, nil, nil, 251, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, 81, 82, 83, - 85, 65, 92, 106, 107, 71, 72, 46, 47, nil, - 75, nil, 73, 74, 76, 355, 356, 79, 80, nil, - nil, nil, nil, nil, 84, 350, 358, 115, 114, 116, - 117, nil, nil, 255, nil, nil, nil, nil, nil, nil, - 53, nil, nil, 119, 118, 120, 111, 64, 109, 108, - 112, 328, 110, 121, 122, nil, 104, 105, 49, 50, - 48, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 246, nil, nil, 254, nil, nil, 66, 67, nil, nil, - 68, nil, 800, nil, 323, nil, 52, nil, nil, 329, - nil, nil, nil, nil, nil, 251, nil, nil, nil, nil, - 102, 326, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, 81, 82, - 83, 85, 65, 92, 106, 107, 71, 72, 46, 563, - nil, 75, nil, 73, 74, 76, 355, 356, 79, 80, - nil, nil, nil, nil, nil, 84, 350, 358, 115, 114, - 116, 117, nil, nil, 255, nil, nil, nil, nil, nil, - nil, 53, nil, nil, 119, 118, 120, 111, 64, 109, - 108, 112, nil, 110, 121, 122, nil, 104, 105, 49, - 50, 48, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 246, nil, nil, 254, nil, nil, 66, 67, nil, - nil, 68, nil, nil, nil, nil, nil, 52, nil, nil, - nil, nil, nil, nil, nil, nil, 251, nil, nil, nil, - nil, 102, 90, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, 81, - 82, 83, 85, 65, 92, 106, 107, 71, 72, 46, - 47, nil, 75, nil, 73, 74, 76, 355, 356, 79, - 80, nil, nil, nil, nil, nil, 84, 350, 358, 115, - 114, 116, 117, nil, nil, 255, nil, nil, nil, nil, - nil, nil, 53, nil, nil, 119, 118, 120, 111, 64, - 109, 108, 112, nil, 110, 121, 122, nil, 104, 105, - 49, 50, 48, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 246, nil, nil, 254, nil, nil, 66, 67, - nil, nil, 68, nil, nil, nil, nil, nil, 52, nil, - nil, nil, nil, nil, nil, nil, nil, 251, nil, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - 81, 82, 83, 85, 65, 92, 106, 107, 71, 72, - 46, 47, nil, 75, nil, 73, 74, 76, 35, 36, - 79, 80, nil, nil, nil, nil, nil, 84, 33, 32, - 115, 114, 116, 117, nil, nil, 23, nil, nil, nil, - nil, nil, nil, 53, nil, nil, 119, 118, 120, 111, - 64, 109, 108, 112, nil, 110, 121, 122, nil, 104, - 105, 49, 50, 48, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 246, nil, nil, 254, nil, nil, 66, - 67, nil, nil, 68, nil, nil, nil, nil, nil, 52, - nil, nil, nil, nil, nil, nil, nil, nil, 24, nil, - nil, nil, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, 81, 82, 83, 85, 65, 92, 106, 107, 71, - 72, 46, 47, nil, 75, nil, 73, 74, 76, 35, - 36, 79, 80, nil, nil, nil, nil, nil, 84, 33, - 32, 115, 114, 116, 117, nil, nil, 23, nil, nil, - nil, nil, nil, nil, 53, nil, nil, 119, 118, 120, - 111, 64, 109, 108, 112, nil, 110, 121, 122, nil, - 104, 105, 49, 50, 48, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 246, nil, nil, 254, nil, nil, - 66, 67, nil, nil, 68, nil, nil, nil, nil, nil, - 52, nil, nil, nil, nil, nil, nil, nil, nil, 24, - nil, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - nil, nil, 81, 82, 83, 85, 65, 92, 106, 107, - 71, 72, 46, 47, nil, 75, nil, 73, 74, 76, - 355, 356, 79, 80, nil, nil, nil, nil, nil, 84, - 350, 358, 115, 114, 116, 117, nil, nil, 255, nil, - nil, nil, nil, nil, nil, 53, nil, nil, 119, 118, - 120, 111, 64, 109, 108, 112, nil, 110, 121, 122, - nil, 104, 105, 49, 50, 48, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 246, nil, nil, 254, nil, - nil, 66, 67, nil, nil, 68, nil, nil, nil, nil, - nil, 52, nil, nil, nil, nil, nil, nil, nil, nil, - 251, nil, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, 81, 82, 83, 85, 65, 92, 106, - 107, 71, 72, 46, 47, nil, 75, nil, 73, 74, - 76, 35, 36, 79, 80, nil, nil, nil, nil, nil, - 84, 33, 32, 115, 114, 116, 117, nil, nil, 255, - nil, nil, nil, nil, nil, nil, 53, nil, nil, 119, - 118, 120, 111, 64, 109, 108, 112, nil, 110, 121, - 122, nil, 104, 105, 49, 50, 48, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 246, nil, nil, 254, - nil, nil, 66, 67, nil, nil, 68, nil, nil, nil, - nil, nil, 52, nil, nil, nil, nil, nil, nil, nil, - nil, 251, nil, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 81, 82, 83, 85, 65, 92, - 106, 107, 71, 72, 46, 47, nil, 75, nil, 73, - 74, 76, 355, 356, 79, 80, nil, nil, nil, nil, - nil, 84, 350, 358, 115, 114, 116, 117, nil, nil, - 255, nil, nil, nil, nil, nil, nil, 53, nil, nil, - 119, 118, 120, 111, 64, 109, 108, 112, nil, 110, - 121, 122, nil, 104, 105, 49, 50, 48, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 246, nil, nil, - 254, nil, nil, 66, 67, nil, nil, 68, nil, nil, - nil, nil, nil, 52, nil, nil, nil, nil, nil, nil, - nil, nil, 251, nil, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 81, 82, 83, 85, 65, - 92, 106, 107, 71, 72, 46, 47, nil, 75, nil, - 73, 74, 76, 355, 356, 79, 80, nil, nil, nil, - nil, nil, 84, 350, 358, 115, 114, 116, 117, nil, - nil, 255, nil, nil, nil, nil, nil, nil, 53, nil, - nil, 119, 118, 120, 111, 64, 109, 108, 112, nil, - 110, 121, 122, nil, 104, 105, 49, 50, 48, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 246, nil, - nil, 254, nil, nil, 66, 67, nil, nil, 68, nil, - nil, nil, nil, nil, 52, nil, nil, nil, nil, nil, - nil, nil, nil, 251, nil, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, 81, 82, 83, 85, - 65, 92, 106, 107, 71, 72, 46, 47, nil, 75, - nil, 73, 74, 76, 355, 356, 79, 80, nil, nil, - nil, nil, nil, 84, 350, 358, 115, 114, 116, 117, - nil, nil, 255, nil, nil, nil, nil, nil, nil, 53, - nil, nil, 119, 118, 120, 111, 64, 109, 108, 112, - nil, 110, 121, 122, nil, 104, 105, 49, 50, 48, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 246, - nil, nil, 254, nil, nil, 66, 67, nil, nil, 68, - nil, nil, nil, nil, nil, 52, nil, nil, nil, nil, - nil, nil, nil, nil, 251, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, 81, 82, 83, - 85, 65, 92, 106, 107, 71, 72, 46, 47, nil, - 75, nil, 73, 74, 76, 355, 356, 79, 80, nil, - nil, nil, nil, nil, 84, 350, 358, 115, 114, 116, - 117, nil, nil, 255, nil, nil, nil, nil, nil, nil, - 53, nil, nil, 119, 118, 120, 111, 64, 109, 108, - 112, nil, 110, 121, 122, nil, 104, 105, 49, 50, - 48, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 246, nil, nil, 254, nil, nil, 66, 67, nil, nil, - 68, nil, nil, nil, nil, nil, 52, nil, nil, nil, - nil, nil, nil, nil, nil, 251, nil, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, 81, 82, - 83, 85, 65, 92, 106, 107, 71, 72, 46, 47, - nil, 75, nil, 73, 74, 76, 355, 356, 79, 80, - nil, nil, nil, nil, nil, 84, 350, 358, 115, 114, - 116, 117, nil, nil, 255, nil, nil, nil, nil, nil, - nil, 53, nil, nil, 119, 118, 120, 111, 64, 109, - 108, 112, nil, 110, 121, 122, nil, 104, 105, 49, - 50, 48, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 246, nil, nil, 254, nil, nil, 66, 67, nil, - nil, 68, nil, nil, nil, nil, nil, 52, nil, nil, - nil, nil, nil, nil, nil, nil, 251, nil, nil, nil, - nil, 102, 90, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, 81, - 82, 83, 85, 65, 92, 106, 107, 71, 72, 46, - 47, nil, 75, nil, 73, 74, 76, 355, 356, 79, - 80, nil, nil, nil, nil, nil, 84, 350, 358, 115, - 114, 116, 117, nil, nil, 255, nil, nil, nil, nil, - nil, nil, 53, nil, nil, 119, 118, 120, 111, 64, - 109, 108, 112, nil, 110, 121, 122, nil, 104, 105, - 49, 50, 48, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 246, nil, nil, 254, nil, nil, 66, 67, - nil, nil, 68, nil, nil, nil, nil, nil, 52, nil, - nil, nil, nil, nil, nil, nil, nil, 251, nil, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - 81, 82, 83, 85, 65, 92, 106, 107, 71, 72, - 46, 47, nil, 75, nil, 73, 74, 76, 355, 356, - 79, 80, nil, nil, nil, nil, nil, 84, 350, 358, - 115, 114, 116, 117, nil, nil, 255, nil, nil, nil, - nil, nil, nil, 53, nil, nil, 119, 118, 120, 111, - 64, 109, 108, 112, nil, 110, 121, 122, nil, 104, - 105, 49, 50, 48, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 246, nil, nil, 254, nil, nil, 66, - 67, nil, nil, 68, nil, nil, nil, nil, nil, 52, - nil, nil, nil, nil, nil, nil, nil, nil, 251, nil, - nil, nil, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, 81, 82, 83, 85, 65, 92, 106, 107, 71, - 72, 46, 47, nil, 75, nil, 73, 74, 76, 355, - 356, 79, 80, nil, nil, nil, nil, nil, 84, 350, - 358, 115, 114, 116, 117, nil, nil, 255, nil, nil, - nil, nil, nil, nil, 53, nil, nil, 119, 118, 120, - 111, 64, 109, 108, 112, nil, 110, 121, 122, nil, - 104, 105, 49, 50, 48, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 246, nil, nil, 254, nil, nil, - 66, 67, nil, nil, 68, nil, nil, nil, nil, nil, - 52, nil, nil, nil, nil, nil, nil, nil, nil, 251, - nil, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - nil, nil, 81, 82, 83, 85, 65, 92, 106, 107, - 71, 72, 46, 47, nil, 75, nil, 73, 74, 76, - 35, 36, 79, 80, nil, nil, nil, nil, nil, 84, - 33, 32, 115, 114, 116, 117, nil, nil, 23, nil, - nil, nil, nil, nil, nil, 53, nil, nil, 119, 118, - 120, 111, 64, 109, 108, 112, nil, 110, 121, 122, - nil, 104, 105, 49, 50, 48, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 246, nil, nil, 254, nil, - nil, 66, 67, nil, nil, 68, nil, nil, nil, nil, - nil, 52, nil, nil, nil, nil, nil, nil, nil, nil, - 24, nil, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, 81, 82, 83, 85, 65, 92, 106, - 107, 71, 72, 46, 47, nil, 75, nil, 73, 74, - 76, 355, 356, 79, 80, nil, nil, nil, nil, nil, - 84, 350, 358, 115, 114, 116, 117, nil, nil, 255, - nil, nil, nil, nil, nil, nil, 53, nil, nil, 119, - 118, 120, 111, 64, 109, 108, 112, nil, 110, 121, - 122, nil, 104, 105, 49, 50, 48, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 246, nil, nil, 254, - nil, nil, 66, 67, nil, nil, 68, nil, nil, nil, - nil, nil, 52, nil, nil, nil, nil, nil, nil, nil, - nil, 251, nil, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 81, 82, 83, 85, 65, 92, - 106, 107, 71, 72, 46, 47, nil, 75, nil, 73, - 74, 76, 35, 36, 79, 80, nil, nil, nil, nil, - nil, 84, 33, 32, 115, 114, 116, 117, nil, nil, - 23, nil, nil, nil, nil, nil, nil, 53, nil, nil, - 119, 118, 120, 111, 64, 109, 108, 112, nil, 110, - 121, 122, nil, 104, 105, 49, 50, 48, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 246, nil, nil, - 254, nil, nil, 66, 67, nil, nil, 68, nil, nil, - nil, nil, nil, 52, nil, nil, nil, nil, nil, nil, - nil, nil, 24, nil, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 81, 82, 83, 85, 65, - 92, 106, 107, 71, 72, 46, 47, nil, 75, nil, - 73, 74, 76, 355, 356, 79, 80, nil, nil, nil, - nil, nil, 84, 350, 358, 115, 114, 116, 117, nil, - nil, 255, nil, nil, nil, nil, nil, nil, 53, nil, - nil, 119, 118, 120, 111, 64, 109, 108, 112, nil, - 110, 121, 122, nil, 104, 105, 49, 50, 48, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 246, nil, - nil, 254, nil, nil, 66, 67, nil, nil, 68, nil, - 800, nil, nil, nil, 52, nil, nil, nil, nil, nil, - nil, nil, nil, 251, nil, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, 81, 82, 83, 85, - 65, 92, 106, 107, 71, 72, 46, 47, nil, 75, - nil, 73, 74, 76, 355, 356, 79, 80, nil, nil, - nil, nil, nil, 84, 350, 358, 115, 114, 116, 117, - nil, nil, 255, nil, nil, nil, nil, nil, nil, 53, - nil, nil, 119, 118, 120, 111, 64, 109, 108, 112, - 328, 110, 121, 122, nil, 104, 105, 49, 50, 48, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 246, - nil, nil, 254, nil, nil, 66, 67, nil, nil, 68, - nil, nil, nil, 323, nil, 52, nil, nil, 329, nil, - nil, nil, nil, nil, 251, nil, nil, nil, nil, 102, - 326, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, 81, 82, 83, - 85, 65, 92, 106, 107, 71, 72, 46, 47, nil, - 75, nil, 73, 74, 76, 355, 356, 79, 80, nil, - nil, nil, nil, nil, 84, 350, 358, 115, 114, 116, - 117, nil, nil, 255, nil, nil, nil, nil, nil, nil, - 53, nil, nil, 119, 118, 120, 111, 64, 109, 108, - 112, nil, 110, 121, 122, nil, 104, 105, 49, 50, - 48, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 246, nil, nil, 254, nil, nil, 66, 67, nil, nil, - 68, nil, nil, nil, nil, nil, 52, nil, nil, nil, - nil, nil, nil, nil, nil, 251, nil, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, 81, 82, - 83, 85, 65, 92, 106, 107, 71, 72, 46, 47, - nil, 75, nil, 73, 74, 76, 35, 36, 79, 80, - nil, nil, nil, nil, nil, 84, 33, 32, 115, 114, - 116, 117, nil, nil, 23, nil, nil, nil, nil, nil, - nil, 53, nil, nil, 119, 118, 120, 111, 64, 109, - 108, 112, nil, 110, 121, 122, nil, 104, 105, 49, - 50, 48, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 246, nil, nil, 254, nil, nil, 66, 67, nil, - nil, 68, nil, nil, nil, nil, nil, 52, nil, nil, - nil, nil, nil, nil, nil, nil, 24, nil, nil, nil, - nil, 102, 90, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, 81, - 82, 83, 85, 65, 92, 106, 107, 71, 72, 46, - 47, nil, 75, nil, 73, 74, 76, 35, 36, 79, - 80, nil, nil, nil, nil, nil, 84, 33, 32, 115, - 114, 116, 117, nil, nil, 23, nil, nil, nil, nil, - nil, nil, 53, nil, nil, 119, 118, 120, 111, 64, - 109, 108, 112, nil, 110, 121, 122, nil, 104, 105, - 49, 50, 48, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 246, nil, nil, 254, nil, nil, 66, 67, - nil, nil, 68, nil, nil, nil, nil, nil, 52, nil, - nil, nil, nil, nil, nil, nil, nil, 24, nil, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - 81, 82, 83, 85, 65, 92, 106, 107, 71, 72, - 46, 47, nil, 75, nil, 73, 74, 76, 35, 36, - 79, 80, nil, nil, nil, nil, nil, 84, 33, 32, - 115, 114, 116, 117, nil, nil, 255, nil, nil, nil, - nil, nil, nil, 53, nil, nil, 119, 118, 120, 111, - 64, 109, 108, 112, 328, 110, 121, 122, nil, 104, - 105, 49, 50, 48, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 246, nil, nil, 254, nil, nil, 66, - 67, nil, nil, 68, nil, 325, nil, 323, nil, 52, - nil, nil, 329, nil, nil, nil, nil, nil, 251, nil, - nil, nil, nil, 102, 326, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, 81, 82, 83, 85, 65, 92, 106, 107, 71, - 72, 46, 47, nil, 75, nil, 73, 74, 76, 355, - 356, 79, 80, nil, nil, nil, nil, nil, 84, 350, - 358, 115, 114, 116, 117, nil, nil, 255, nil, nil, - nil, nil, nil, nil, 351, nil, nil, 119, 118, 120, - 111, 64, 109, 108, 112, nil, 110, 121, 122, nil, - 104, 105, nil, nil, 359, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 347, nil, nil, 343, nil, nil, - 66, 67, nil, nil, 68, nil, 342, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - nil, nil, 81, 82, 83, 85, 65, 92, 106, 107, - 71, 72, nil, nil, nil, 75, nil, 73, 74, 76, - 355, 356, 79, 80, nil, nil, nil, nil, nil, 84, - 350, 358, 115, 114, 116, 117, nil, nil, 255, nil, - nil, nil, nil, nil, nil, 351, nil, nil, 119, 118, - 120, 111, 64, 109, 108, 112, nil, 110, 121, 122, - nil, 104, 105, nil, nil, 359, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 347, nil, nil, 254, nil, - nil, 66, 67, nil, nil, 68, nil, nil, 494, nil, - 491, 490, 489, 499, 492, nil, nil, nil, nil, nil, - nil, nil, nil, 502, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, 361, nil, 497, 85, nil, 92, 106, - 107, 81, 82, 83, nil, 65, 510, 509, nil, 71, - 72, 503, nil, nil, 75, nil, 73, 74, 76, 355, - 356, 79, 80, nil, nil, nil, nil, nil, 84, 350, - 358, 115, 114, 116, 117, nil, nil, 255, nil, nil, - nil, nil, nil, nil, 351, nil, nil, 119, 118, 120, - 111, 64, 109, 108, 112, nil, 110, 121, 122, nil, - 104, 105, nil, nil, 359, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 396, nil, nil, 38, nil, nil, - 66, 67, nil, nil, 68, nil, 40, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - nil, nil, 81, 82, 83, 85, 65, 92, 106, 107, - 71, 72, nil, nil, nil, 75, nil, 73, 74, 76, - 355, 356, 79, 80, nil, nil, nil, nil, nil, 84, - 350, 358, 115, 114, 116, 117, nil, nil, 255, nil, - nil, nil, nil, nil, nil, 351, nil, nil, 119, 118, - 120, 401, 64, 109, 108, 402, nil, 110, 121, 122, - nil, 104, 105, nil, nil, 359, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 408, nil, nil, 403, nil, nil, 254, nil, - nil, 66, 67, nil, nil, 68, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, 81, 82, 83, 85, 65, 92, 106, - 107, 71, 72, nil, nil, nil, 75, nil, 73, 74, - 76, 355, 356, 79, 80, nil, nil, nil, nil, nil, - 84, 350, 358, 115, 114, 116, 117, nil, nil, 255, - nil, nil, nil, nil, nil, nil, 351, nil, nil, 119, - 118, 120, 401, 64, 109, 108, 402, nil, 110, 121, - 122, nil, 104, 105, nil, nil, 359, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 403, nil, nil, 254, - nil, nil, 66, 67, nil, nil, 68, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 81, 82, 83, 85, 65, 92, - 106, 107, 71, 72, nil, nil, nil, 75, nil, 73, - 74, 76, 355, 356, 79, 80, nil, nil, nil, nil, - nil, 84, 350, 358, 115, 114, 116, 117, nil, nil, - 255, nil, nil, nil, nil, nil, nil, 351, nil, nil, - 119, 118, 120, 111, 64, 109, 108, 112, nil, 110, - 121, 122, nil, 104, 105, nil, nil, 359, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 347, nil, nil, - 254, nil, nil, 66, 67, nil, nil, 68, nil, nil, - 494, nil, 491, 490, 489, 499, 492, nil, nil, nil, - nil, nil, nil, nil, nil, 502, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 591, nil, 497, 85, nil, - 92, 106, 107, 81, 82, 83, nil, 65, 510, 509, - nil, 71, 72, 503, nil, nil, 75, nil, 73, 74, - 76, 355, 356, 79, 80, nil, nil, nil, nil, nil, - 84, 350, 358, 115, 114, 116, 117, nil, nil, 255, - nil, nil, nil, nil, nil, nil, 351, nil, nil, 119, - 118, 120, 111, 64, 109, 108, 112, nil, 110, 121, - 122, nil, 104, 105, nil, nil, 359, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 347, nil, nil, 343, - nil, nil, 66, 67, nil, nil, 68, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 81, 82, 83, 85, 65, 92, - 106, 107, 71, 72, nil, nil, nil, 75, nil, 73, - 74, 76, 355, 356, 79, 80, nil, nil, nil, nil, - nil, 84, 350, 358, 115, 114, 116, 117, nil, nil, - 255, nil, nil, nil, nil, nil, nil, 351, nil, nil, - 119, 118, 120, 111, 64, 109, 108, 112, nil, 110, - 121, 122, nil, 104, 105, nil, nil, 359, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 347, nil, nil, - 343, nil, nil, 66, 67, nil, nil, 68, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 81, 82, 83, 85, 65, - 92, 106, 107, 71, 72, nil, nil, nil, 75, nil, - 73, 74, 76, 355, 356, 79, 80, nil, nil, nil, - nil, nil, 84, 350, 358, 115, 114, 116, 117, nil, - nil, 255, nil, nil, nil, nil, nil, nil, 351, nil, - nil, 119, 118, 120, 111, 64, 109, 108, 112, nil, - 110, 121, 122, nil, 104, 105, nil, nil, 359, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 347, nil, - nil, 343, nil, nil, 66, 67, nil, nil, 68, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, 81, 82, 83, 85, - 65, 92, 106, 107, 71, 72, nil, nil, nil, 75, - nil, 73, 74, 76, 355, 356, 79, 80, nil, nil, - nil, nil, nil, 84, 350, 358, 115, 114, 116, 117, - nil, nil, 255, nil, nil, nil, nil, nil, nil, 351, - nil, nil, 119, 118, 120, 111, 64, 109, 108, 112, - nil, 110, 121, 122, nil, 104, 105, nil, nil, 359, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 347, - nil, nil, 343, nil, nil, 66, 67, nil, nil, 68, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, 81, 82, 83, - 85, 65, 92, 106, 107, 71, 72, nil, nil, nil, - 75, nil, 73, 74, 76, 355, 356, 79, 80, nil, - nil, nil, nil, nil, 84, 350, 358, 115, 114, 116, - 117, nil, nil, 255, nil, nil, nil, nil, nil, nil, - 351, nil, nil, 119, 118, 120, 111, 64, 109, 108, - 112, nil, 110, 121, 122, nil, 104, 105, nil, nil, - 359, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 347, nil, nil, 343, nil, nil, 66, 67, nil, nil, - 68, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, 81, 82, - 83, 85, 65, 92, 106, 107, 71, 72, nil, nil, - nil, 75, nil, 73, 74, 76, 355, 356, 79, 80, - nil, nil, nil, nil, nil, 84, 350, 358, 115, 114, - 116, 117, nil, nil, 255, nil, nil, nil, nil, nil, - nil, 351, nil, nil, 119, 118, 120, 111, 64, 109, - 108, 112, nil, 110, 121, 122, nil, 104, 105, nil, - nil, 359, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 1106, nil, nil, 254, nil, nil, 66, 67, nil, - nil, 68, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 102, 90, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, 81, - 82, 83, 85, 65, 92, 106, 107, 71, 72, nil, - nil, nil, 75, nil, 73, 74, 76, 355, 356, 79, - 80, nil, nil, nil, nil, nil, 84, 350, 358, 115, - 114, 116, 117, nil, nil, 255, nil, nil, nil, nil, - nil, nil, 351, nil, nil, 119, 118, 120, 111, 64, - 109, 108, 112, nil, 110, 121, 122, nil, 104, 105, - nil, nil, 359, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 1144, nil, nil, 254, nil, nil, 66, 67, - nil, nil, 68, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - 81, 82, 83, 85, 65, 92, 106, 107, 71, 72, - nil, nil, nil, 75, nil, 73, 74, 76, 355, 356, - 79, 80, nil, nil, nil, nil, nil, 84, 350, 358, - 115, 114, 116, 117, nil, nil, 255, nil, nil, nil, - nil, nil, nil, 351, nil, nil, 119, 118, 120, 111, - 64, 109, 108, 112, nil, 110, 121, 122, nil, 104, - 105, nil, nil, 359, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 1144, nil, nil, 254, nil, nil, 66, - 67, nil, nil, 68, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, nil, nil, nil, 85, nil, 92, 106, 107, 186, - 197, 187, 210, 183, 203, 193, 192, 213, 214, 208, - 191, 190, 185, 211, 215, 216, 195, 184, 198, 202, - 204, 196, 189, nil, nil, nil, 205, 212, 207, 206, - 199, 209, 194, 182, 201, 200, nil, nil, nil, nil, - nil, 181, 188, 179, 180, 176, 177, 178, 139, 141, - 138, nil, 140, nil, nil, nil, nil, nil, nil, nil, - 170, 171, nil, 167, 149, 150, 151, 158, 155, 157, - nil, nil, 152, 153, nil, nil, nil, 172, 173, 159, - 160, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 164, 163, nil, 148, 169, 166, - 165, 174, 161, 162, 156, 154, 146, 168, 147, nil, - nil, 175, 102, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 101, 186, 197, 187, - 210, 183, 203, 193, 192, 213, 214, 208, 191, 190, - 185, 211, 215, 216, 195, 184, 198, 202, 204, 196, - 189, nil, nil, nil, 205, 212, 207, 206, 199, 209, - 194, 182, 201, 200, nil, nil, nil, nil, nil, 181, - 188, 179, 180, 176, 177, 178, 139, 141, nil, nil, - 140, nil, nil, nil, nil, nil, nil, nil, 170, 171, - nil, 167, 149, 150, 151, 158, 155, 157, nil, nil, - 152, 153, nil, nil, nil, 172, 173, 159, 160, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 164, 163, nil, 148, 169, 166, 165, 174, - 161, 162, 156, 154, 146, 168, 147, nil, nil, 175, - 102, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 101, 186, 197, 187, 210, 183, - 203, 193, 192, 213, 214, 208, 191, 190, 185, 211, - 215, 216, 195, 184, 198, 202, 204, 196, 189, nil, - nil, nil, 205, 212, 207, 206, 199, 209, 194, 182, - 201, 200, nil, nil, nil, nil, nil, 181, 188, 179, - 180, 176, 177, 178, 139, 141, nil, nil, 140, nil, - nil, nil, nil, nil, nil, nil, 170, 171, nil, 167, - 149, 150, 151, 158, 155, 157, nil, nil, 152, 153, - nil, nil, nil, 172, 173, 159, 160, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 164, 163, nil, 148, 169, 166, 165, 174, 161, 162, - 156, 154, 146, 168, 147, nil, nil, 175, 102, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 101, 186, 197, 187, 210, 183, 203, 193, - 192, 213, 214, 208, 191, 190, 185, 211, 215, 216, - 195, 184, 198, 202, 204, 196, 189, nil, nil, nil, - 205, 212, 207, 206, 199, 209, 194, 182, 201, 200, - nil, nil, nil, nil, nil, 181, 188, 179, 180, 176, - 177, 178, 139, 141, nil, nil, 140, nil, nil, nil, - nil, nil, nil, nil, 170, 171, nil, 167, 149, 150, - 151, 158, 155, 157, nil, nil, 152, 153, nil, nil, - nil, 172, 173, 159, 160, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 164, 163, - nil, 148, 169, 166, 165, 174, 161, 162, 156, 154, - 146, 168, 147, nil, nil, 175, 102, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 101, 186, 197, 187, 210, 183, 203, 193, 192, 213, - 214, 208, 191, 190, 185, 211, 215, 216, 195, 184, - 198, 202, 204, 196, 189, nil, nil, nil, 205, 212, - 207, 295, 294, 296, 293, 182, 201, 200, nil, nil, - nil, nil, nil, 181, 188, 179, 180, 290, 291, 292, - 288, 141, 109, 108, 289, nil, 110, nil, nil, nil, - nil, nil, 170, 171, nil, 167, 149, 150, 151, 158, - 155, 157, nil, nil, 152, 153, nil, nil, nil, 172, - 173, 159, 160, nil, nil, nil, nil, nil, 300, nil, - nil, nil, nil, nil, nil, nil, 164, 163, nil, 148, - 169, 166, 165, 174, 161, 162, 156, 154, 146, 168, - 147, nil, nil, 175, 115, 114, 116, 117, nil, nil, - 494, nil, 491, 490, 489, 499, 492, nil, nil, nil, - 119, 118, 120, 777, nil, 502, nil, 780, 757, nil, - nil, nil, nil, 104, 105, nil, nil, 359, 502, nil, - nil, nil, nil, nil, nil, nil, nil, 497, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 779, 510, 509, - 750, nil, nil, 503, 748, nil, nil, 749, nil, 752, - nil, nil, nil, nil, nil, nil, 503, nil, nil, nil, - nil, nil, nil, 778, nil, nil, nil, 102, 758, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, 115, 114, 116, 117, nil, nil, 85, nil, - 92, 106, 107, nil, nil, 765, 766, nil, 119, 118, - 120, 777, nil, nil, nil, 780, 757, nil, nil, nil, - nil, 104, 105, nil, nil, 359, 502, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 779, nil, nil, 750, nil, - nil, nil, 748, nil, nil, 749, nil, 752, nil, nil, - nil, nil, nil, nil, 503, nil, nil, nil, nil, nil, - nil, 778, nil, nil, nil, 102, 758, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - 115, 114, 116, 117, nil, nil, 85, nil, 92, 106, - 107, nil, nil, 765, 766, nil, 119, 118, 120, 777, - nil, nil, nil, 780, nil, nil, nil, nil, nil, 104, - 105, nil, nil, 359, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 779, nil, nil, 750, nil, nil, nil, - 748, nil, nil, 749, nil, 752, nil, nil, nil, nil, - nil, nil, 494, nil, 491, 490, 489, 499, 492, 778, - nil, nil, nil, 102, 90, 93, 94, 502, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, 241, 115, - 114, 116, 117, nil, 85, nil, 92, 106, 107, 497, - nil, 765, 766, nil, nil, 119, 118, 120, 777, nil, - 510, 509, 780, nil, nil, 503, nil, nil, 104, 105, - nil, nil, 359, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 779, nil, nil, 750, nil, nil, nil, 748, - nil, nil, 749, nil, nil, 488, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 778, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - nil, nil, nil, 85, nil, 92, 106, 107, nil, nil, - 765, 766, 186, 197, 187, 210, 183, 203, 193, 192, - 213, 214, 208, 191, 190, 185, 211, 215, 216, 195, - 184, 198, 202, 204, 196, 189, nil, nil, nil, 205, - 212, 207, 206, 199, 209, 194, 182, 201, 200, nil, - nil, nil, nil, nil, 181, 188, 179, 180, 176, 177, - 178, 139, 141, nil, nil, 140, nil, nil, nil, nil, - nil, nil, nil, 170, 171, nil, 167, 149, 150, 151, - 158, 155, 157, nil, nil, 152, 153, nil, nil, nil, - 172, 173, 159, 160, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 164, 163, nil, - 148, 169, 166, 165, 174, 161, 162, 156, 154, 146, - 168, 147, nil, nil, 175, 115, 114, 116, 117, nil, - nil, nil, nil, nil, 494, nil, 491, 490, 489, 499, - 492, 119, 118, 120, 777, nil, nil, nil, 780, 502, - nil, nil, nil, nil, 104, 105, nil, nil, 359, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 497, nil, nil, nil, nil, nil, nil, 779, nil, - nil, 750, 510, 509, nil, 748, nil, 503, 749, nil, - 752, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 778, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, 115, 114, 116, 117, 488, nil, 85, - nil, 92, 106, 107, nil, nil, 765, 766, nil, 119, - 118, 120, 777, nil, nil, 494, 780, 491, 490, 489, - 499, 492, 104, 105, nil, nil, 359, nil, nil, nil, - 502, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 779, nil, nil, 750, - nil, nil, 497, 748, nil, nil, 749, nil, nil, nil, - nil, 507, 506, 510, 509, nil, nil, nil, 503, nil, - nil, nil, 778, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, 115, 114, 116, 117, nil, nil, 85, nil, 92, - 106, 107, nil, nil, 765, 766, nil, 119, 118, 120, - 777, nil, nil, nil, 780, 757, nil, nil, nil, nil, - 104, 105, nil, nil, 359, 502, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 779, nil, nil, 750, nil, nil, - nil, 748, nil, nil, 749, nil, 752, nil, nil, nil, - nil, nil, nil, 503, nil, nil, nil, nil, nil, nil, - 778, nil, nil, nil, 102, 758, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, 115, - 114, 116, 117, nil, nil, 85, nil, 92, 106, 107, - nil, nil, 765, 766, nil, 119, 118, 120, 777, nil, - nil, nil, 780, 757, nil, nil, nil, nil, 104, 105, - nil, nil, 359, 502, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 779, nil, nil, 750, nil, nil, nil, 748, - nil, nil, 749, nil, 752, nil, nil, nil, nil, nil, - nil, 503, nil, nil, nil, nil, nil, nil, 778, nil, - nil, nil, 102, 758, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, 115, 114, 116, - 117, nil, nil, 85, nil, 92, 106, 107, nil, nil, - 765, 766, nil, 119, 118, 120, 777, nil, nil, 494, - 780, 491, 490, 489, 499, 492, 104, 105, nil, nil, - 359, nil, nil, nil, 502, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 779, nil, nil, 750, nil, nil, 497, 748, nil, nil, - 749, nil, 752, nil, nil, 507, 506, 510, 509, nil, - nil, nil, 503, nil, nil, nil, 778, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, 115, 114, 116, 117, nil, - nil, 85, nil, 92, 106, 107, nil, nil, 765, 766, - nil, 119, 118, 120, 777, nil, nil, 494, 780, 491, - 490, 489, 499, 492, 104, 105, nil, nil, 359, nil, - nil, nil, 502, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 779, nil, - nil, 750, nil, nil, 497, 748, nil, nil, 749, nil, - nil, nil, nil, nil, nil, 510, 509, nil, nil, nil, - 503, nil, nil, nil, 778, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, 115, 114, 116, 117, nil, nil, 85, - nil, 92, 106, 107, nil, nil, 765, 766, nil, 119, - 118, 120, 777, nil, nil, nil, 780, nil, nil, nil, - nil, nil, 104, 105, nil, nil, 359, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 779, nil, nil, 750, - nil, nil, nil, 748, nil, nil, 749, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 778, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, 115, 114, 116, 117, nil, nil, 85, nil, 92, - 106, 107, nil, nil, 765, 766, nil, 119, 118, 120, - 777, nil, nil, nil, 780, 757, nil, nil, nil, nil, - 104, 105, nil, nil, 359, 502, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 779, nil, nil, 750, nil, nil, - nil, 748, nil, nil, 749, nil, 752, nil, nil, nil, - nil, nil, nil, 503, nil, nil, nil, nil, nil, nil, - 778, nil, nil, nil, 102, 758, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, 115, - 114, 116, 117, nil, nil, 85, nil, 92, 106, 107, - nil, nil, 765, 766, nil, 119, 118, 120, 777, nil, - nil, nil, 780, nil, nil, nil, nil, nil, 104, 105, - nil, nil, 359, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 779, nil, nil, 750, nil, nil, nil, 748, - nil, nil, 749, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 778, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, 115, 114, 116, - 117, nil, nil, 85, nil, 92, 106, 107, nil, nil, - 765, 766, nil, 119, 118, 120, 777, nil, nil, nil, - 780, nil, nil, nil, nil, nil, 104, 105, nil, nil, - 359, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 779, nil, nil, 750, nil, nil, nil, 748, nil, nil, - 749, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 778, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, 115, 114, 116, 117, nil, - nil, 85, nil, 92, 106, 107, nil, nil, 765, 766, - nil, 119, 118, 120, 777, nil, nil, nil, 780, nil, - nil, nil, nil, nil, 104, 105, nil, nil, 359, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 779, nil, - nil, 750, nil, nil, nil, 748, nil, nil, 749, nil, - 752, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 778, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, 115, 114, 116, 117, nil, nil, 85, - nil, 92, 106, 107, nil, nil, 765, 766, nil, 119, - 118, 120, 777, nil, nil, nil, 780, nil, nil, nil, - nil, nil, 104, 105, nil, nil, 359, nil, nil, nil, - nil, nil, nil, nil, 115, 114, 116, 117, nil, nil, - nil, nil, nil, nil, nil, nil, 779, nil, nil, 750, - 119, 118, 120, 748, nil, nil, 749, nil, nil, nil, - nil, nil, nil, 104, 105, nil, nil, 359, nil, nil, - nil, nil, 778, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, nil, nil, nil, 85, nil, 92, - 106, 107, nil, nil, 765, 766, 494, nil, 491, 490, - 489, 499, 492, nil, nil, nil, nil, 102, 90, 93, - 94, 502, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, 115, 114, 116, 117, nil, nil, 85, nil, - 92, 106, 107, 497, nil, nil, nil, nil, 119, 118, - 120, nil, 507, 506, 510, 509, nil, nil, nil, 503, - nil, 104, 105, nil, nil, 359, 115, 114, 116, 117, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 119, 118, 120, 241, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 104, 105, nil, nil, 359, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, nil, nil, nil, 85, nil, 92, 106, - 107, nil, nil, nil, nil, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, nil, nil, nil, - 85, nil, 92, 106, 107, 494, nil, 491, 490, 489, - 499, 492, nil, 494, nil, 491, 490, 489, 499, 492, - 502, nil, nil, nil, nil, nil, nil, nil, 502, nil, - 494, nil, 491, 490, 489, 499, 492, nil, nil, nil, - nil, nil, 497, nil, nil, 502, nil, nil, nil, nil, - 497, 507, 506, 510, 509, nil, nil, nil, 503, 507, - 506, 510, 509, nil, nil, nil, 503, 497, nil, nil, - nil, nil, nil, nil, nil, nil, 507, 506, 510, 509, - nil, nil, 494, 503, 491, 490, 489, 499, 492, 494, - nil, 491, 490, 489, 499, 492, nil, 502, 488, nil, - nil, nil, nil, nil, 502, nil, 488, 494, nil, 491, - 490, 489, 499, 492, nil, nil, nil, nil, nil, 497, - nil, nil, 502, 488, nil, nil, 497, nil, nil, nil, - 510, 509, nil, nil, nil, 503, nil, 510, 509, nil, - nil, nil, 503, nil, 497, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 510, 509, nil, nil, nil, - 503, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 459, 463, nil, 488, 460, nil, nil, nil, - nil, nil, 488, nil, 170, 171, nil, 167, 149, 150, - 151, 158, 155, 157, nil, nil, 152, 153, nil, nil, - 488, 172, 173, 159, 160, nil, nil, nil, nil, nil, - 307, nil, nil, nil, nil, nil, nil, nil, 164, 163, - nil, 148, 169, 166, 165, 174, 161, 162, 156, 154, - 146, 168, 147, 467, 471, 175, nil, 466, nil, nil, - nil, nil, nil, nil, nil, 170, 171, nil, 167, 149, - 150, 151, 158, 155, 157, nil, nil, 152, 153, nil, - nil, nil, 172, 173, 159, 160, nil, nil, nil, nil, - nil, 307, nil, nil, nil, nil, nil, nil, nil, 164, - 163, nil, 148, 169, 166, 165, 174, 161, 162, 156, - 154, 146, 168, 147, 559, 463, 175, nil, 560, nil, - nil, nil, nil, nil, nil, nil, 170, 171, nil, 167, - 149, 150, 151, 158, 155, 157, nil, nil, 152, 153, - nil, nil, nil, 172, 173, 159, 160, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 164, 163, nil, 148, 169, 166, 165, 174, 161, 162, - 156, 154, 146, 168, 147, 730, 463, 175, nil, 731, - nil, nil, nil, nil, nil, nil, nil, 170, 171, nil, - 167, 149, 150, 151, 158, 155, 157, nil, nil, 152, - 153, nil, nil, nil, 172, 173, 159, 160, nil, nil, - nil, nil, nil, 307, nil, nil, nil, nil, nil, nil, - nil, 164, 163, nil, 148, 169, 166, 165, 174, 161, - 162, 156, 154, 146, 168, 147, 732, 471, 175, nil, - 733, nil, nil, nil, nil, nil, nil, nil, 170, 171, - nil, 167, 149, 150, 151, 158, 155, 157, nil, nil, - 152, 153, nil, nil, nil, 172, 173, 159, 160, nil, - nil, nil, nil, nil, 307, nil, nil, nil, nil, nil, - nil, nil, 164, 163, nil, 148, 169, 166, 165, 174, - 161, 162, 156, 154, 146, 168, 147, 810, 463, 175, - nil, 811, nil, nil, nil, nil, nil, nil, nil, 170, - 171, nil, 167, 149, 150, 151, 158, 155, 157, nil, - nil, 152, 153, nil, nil, nil, 172, 173, 159, 160, - nil, nil, nil, nil, nil, 307, nil, nil, nil, nil, - nil, nil, nil, 164, 163, nil, 148, 169, 166, 165, - 174, 161, 162, 156, 154, 146, 168, 147, 813, 471, - 175, nil, 814, nil, nil, nil, nil, nil, nil, nil, - 170, 171, nil, 167, 149, 150, 151, 158, 155, 157, - nil, nil, 152, 153, nil, nil, nil, 172, 173, 159, - 160, nil, nil, nil, nil, nil, 307, nil, nil, nil, - nil, nil, nil, nil, 164, 163, nil, 148, 169, 166, - 165, 174, 161, 162, 156, 154, 146, 168, 147, 730, - 463, 175, nil, 731, nil, nil, nil, nil, nil, nil, - nil, 170, 171, nil, 167, 149, 150, 151, 158, 155, - 157, nil, nil, 152, 153, nil, nil, nil, 172, 173, - 159, 160, nil, nil, nil, nil, nil, 307, nil, nil, - nil, nil, nil, nil, nil, 164, 163, nil, 148, 169, - 166, 165, 174, 161, 162, 156, 154, 146, 168, 147, - 732, 471, 175, nil, 733, nil, nil, nil, nil, nil, - nil, nil, 170, 171, nil, 167, 149, 150, 151, 158, - 155, 157, nil, nil, 152, 153, nil, nil, nil, 172, - 173, 159, 160, nil, nil, nil, nil, nil, 307, nil, - nil, nil, nil, nil, nil, nil, 164, 163, nil, 148, - 169, 166, 165, 174, 161, 162, 156, 154, 146, 168, - 147, 840, 463, 175, nil, 841, nil, nil, nil, nil, - nil, nil, nil, 170, 171, nil, 167, 149, 150, 151, - 158, 155, 157, nil, nil, 152, 153, nil, nil, nil, - 172, 173, 159, 160, nil, nil, nil, nil, nil, 307, - nil, nil, nil, nil, nil, nil, nil, 164, 163, nil, - 148, 169, 166, 165, 174, 161, 162, 156, 154, 146, - 168, 147, 842, 471, 175, nil, 843, nil, nil, nil, - nil, nil, nil, nil, 170, 171, nil, 167, 149, 150, - 151, 158, 155, 157, nil, nil, 152, 153, nil, nil, - nil, 172, 173, 159, 160, nil, nil, nil, nil, nil, - 307, nil, nil, nil, nil, nil, nil, nil, 164, 163, - nil, 148, 169, 166, 165, 174, 161, 162, 156, 154, - 146, 168, 147, 845, 471, 175, nil, 846, nil, nil, - nil, nil, nil, nil, nil, 170, 171, nil, 167, 149, - 150, 151, 158, 155, 157, nil, nil, 152, 153, nil, - nil, nil, 172, 173, 159, 160, nil, nil, nil, nil, - nil, 307, nil, nil, nil, nil, nil, nil, nil, 164, - 163, nil, 148, 169, 166, 165, 174, 161, 162, 156, - 154, 146, 168, 147, 559, 463, 175, nil, 560, nil, - nil, nil, nil, nil, nil, nil, 170, 171, nil, 167, - 149, 150, 151, 158, 155, 157, nil, nil, 152, 153, - nil, nil, nil, 172, 173, 159, 160, nil, nil, nil, - nil, nil, 307, nil, nil, nil, nil, nil, nil, nil, - 164, 163, nil, 148, 169, 166, 165, 174, 161, 162, - 156, 154, 146, 168, 147, 872, 463, 175, nil, 873, - nil, nil, nil, nil, nil, nil, nil, 170, 171, nil, - 167, 149, 150, 151, 158, 155, 157, nil, nil, 152, - 153, nil, nil, nil, 172, 173, 159, 160, nil, nil, - nil, nil, nil, 307, nil, nil, nil, nil, nil, nil, - nil, 164, 163, nil, 148, 169, 166, 165, 174, 161, - 162, 156, 154, 146, 168, 147, 875, 471, 175, nil, - 874, nil, nil, nil, nil, nil, nil, nil, 170, 171, - nil, 167, 149, 150, 151, 158, 155, 157, nil, nil, - 152, 153, nil, nil, nil, 172, 173, 159, 160, nil, - nil, nil, nil, nil, 307, nil, nil, nil, nil, nil, - nil, nil, 164, 163, nil, 148, 169, 166, 165, 174, - 161, 162, 156, 154, 146, 168, 147, 1197, 463, 175, - nil, 1198, nil, nil, nil, nil, nil, nil, nil, 170, - 171, nil, 167, 149, 150, 151, 158, 155, 157, nil, - nil, 152, 153, nil, nil, nil, 172, 173, 159, 160, - nil, nil, nil, nil, nil, 307, nil, nil, nil, nil, - nil, nil, nil, 164, 163, nil, 148, 169, 166, 165, - 174, 161, 162, 156, 154, 146, 168, 147, 1199, 471, - 175, nil, 1200, nil, nil, nil, nil, nil, nil, nil, - 170, 171, nil, 167, 149, 150, 151, 158, 155, 157, - nil, nil, 152, 153, nil, nil, nil, 172, 173, 159, - 160, nil, nil, nil, nil, nil, 307, nil, nil, nil, - nil, nil, nil, nil, 164, 163, nil, 148, 169, 166, - 165, 174, 161, 162, 156, 154, 146, 168, 147, 1214, - 471, 175, nil, 1213, nil, nil, nil, nil, nil, nil, - nil, 170, 171, nil, 167, 149, 150, 151, 158, 155, - 157, nil, nil, 152, 153, nil, nil, nil, 172, 173, - 159, 160, nil, nil, nil, nil, nil, 307, nil, nil, - nil, nil, nil, nil, nil, 164, 163, nil, 148, 169, - 166, 165, 174, 161, 162, 156, 154, 146, 168, 147, - nil, nil, 175 ] - -racc_action_check = [ - 111, 518, 518, 556, 556, 19, 393, 111, 111, 111, - 738, 385, 111, 111, 111, 18, 111, 31, 23, 417, - 5, 534, 18, 386, 111, 5, 111, 111, 111, 980, - 980, 18, 478, 418, 394, 397, 111, 111, 838, 111, - 111, 111, 111, 111, 1015, 1086, 1088, 1103, 1104, 930, - 478, 634, 1216, 534, 1107, 935, 738, 534, 534, 23, - 69, 19, 1216, 244, 840, 841, 111, 111, 111, 111, - 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, - 18, 31, 111, 111, 111, 417, 111, 111, 625, 930, - 111, 853, 991, 111, 111, 518, 111, 556, 111, 418, - 111, 935, 111, 111, 31, 111, 111, 111, 111, 111, - 1163, 111, 112, 111, 1197, 393, 788, 644, 644, 112, - 112, 112, 244, 980, 112, 112, 112, 111, 112, 385, - 111, 111, 111, 111, 385, 111, 112, 111, 112, 112, - 112, 386, 111, 394, 397, 111, 386, 69, 112, 112, - 1198, 112, 112, 112, 112, 112, 838, 1199, 1218, 838, - 634, 838, 1015, 1086, 1088, 1103, 1104, 1015, 1086, 1088, - 1103, 1104, 1107, 840, 841, 842, 843, 1107, 112, 112, - 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, - 112, 112, 625, 1200, 112, 112, 112, 625, 112, 112, - 853, 991, 112, 788, 1, 112, 112, 749, 112, 1057, - 112, 644, 112, 659, 112, 112, 644, 112, 112, 112, - 112, 112, 466, 112, 749, 112, 3, 245, 1163, 466, - 466, 466, 1197, 1163, 1199, 466, 466, 1197, 466, 112, - 842, 843, 112, 112, 112, 112, 466, 112, 29, 112, - 352, 20, 1057, 412, 112, 29, 9, 112, 466, 466, - 810, 466, 466, 466, 466, 466, 48, 48, 1198, 377, - 1200, 12, 377, 1198, 811, 1199, 1218, 659, 659, 247, - 1199, 1218, 359, 359, 842, 843, 245, 659, 466, 466, - 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, - 466, 466, 14, 287, 466, 466, 466, 20, 466, 466, - 287, 1200, 466, 29, 352, 466, 1200, 412, 412, 412, - 466, 15, 466, 661, 466, 466, 810, 466, 466, 466, - 466, 466, 444, 466, 467, 466, 759, 352, 247, 524, - 811, 467, 467, 467, 48, 48, 931, 467, 467, 466, - 467, 332, 466, 466, 759, 466, 332, 466, 467, 467, - 359, 359, 978, 730, 466, 17, 810, 466, 287, 810, - 467, 467, 731, 467, 467, 467, 467, 467, 805, 288, - 811, 810, 931, 811, 813, 27, 288, 661, 661, 579, - 805, 444, 872, 950, 390, 811, 252, 661, 524, 390, - 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, - 467, 467, 467, 467, 42, 942, 467, 467, 467, 54, - 467, 467, 730, 45, 467, 942, 54, 467, 978, 873, - 1125, 731, 467, 926, 467, 54, 467, 467, 413, 467, - 467, 467, 467, 467, 288, 467, 467, 467, 53, 813, - 813, 872, 252, 579, 579, 579, 414, 950, 950, 950, - 21, 467, 415, 942, 467, 467, 401, 467, 978, 467, - 579, 978, 416, 732, 950, 942, 467, 253, 217, 467, - 732, 732, 732, 978, 54, 732, 732, 732, 873, 732, - 813, 512, 926, 813, 1125, 1125, 512, 732, 732, 732, - 732, 732, 413, 413, 413, 813, 402, 21, 230, 732, - 732, 1125, 732, 732, 732, 732, 732, 232, 401, 21, - 414, 414, 414, 419, 628, 401, 415, 415, 415, 236, - 401, 1005, 628, 253, 401, 246, 416, 416, 416, 732, - 732, 732, 732, 732, 732, 732, 732, 732, 732, 732, - 732, 732, 732, 401, 248, 732, 732, 732, 402, 732, - 732, 16, 16, 732, 403, 402, 732, 732, 403, 732, - 402, 732, 995, 732, 402, 732, 732, 995, 732, 732, - 732, 732, 732, 401, 732, 732, 732, 419, 419, 419, - 1005, 243, 289, 402, 290, 291, 51, 51, 243, 289, - 732, 290, 291, 732, 732, 732, 732, 243, 732, 292, - 732, 43, 733, 384, 384, 732, 292, 44, 732, 733, - 733, 733, 249, 402, 733, 733, 733, 293, 733, 1091, - 255, 1091, 51, 51, 293, 294, 733, 306, 733, 733, - 733, 138, 294, 705, 705, 320, 138, 138, 733, 733, - 363, 733, 733, 733, 733, 733, 243, 289, 43, 290, - 291, 295, 296, 779, 44, 321, 747, 779, 295, 296, - 43, 747, 324, 934, 292, 747, 44, 934, 733, 733, - 733, 733, 733, 733, 733, 733, 733, 733, 733, 733, - 733, 733, 293, 948, 733, 733, 733, 363, 733, 733, - 294, 459, 733, 948, 378, 733, 733, 378, 733, 363, - 733, 336, 733, 381, 733, 733, 381, 733, 733, 733, - 733, 733, 874, 733, 337, 733, 295, 296, 88, 874, - 874, 874, 762, 762, 825, 874, 874, 825, 874, 733, - 88, 948, 733, 733, 733, 733, 874, 733, 459, 733, - 88, 826, 826, 948, 733, 460, 339, 733, 874, 874, - 459, 874, 874, 874, 874, 874, 1155, 1089, 1089, 1155, - 234, 344, 234, 234, 234, 234, 234, 340, 344, 681, - 719, 341, 719, 719, 719, 234, 719, 344, 874, 874, - 874, 874, 874, 874, 874, 874, 874, 874, 874, 874, - 874, 874, 460, 347, 874, 874, 874, 234, 874, 874, - 1187, 1187, 874, 350, 460, 874, 234, 234, 234, 234, - 874, 351, 874, 234, 874, 874, 681, 874, 874, 874, - 874, 874, 353, 874, 875, 874, 344, 354, 681, 358, - 360, 875, 875, 875, 367, 369, 372, 875, 875, 874, - 875, 375, 874, 874, 379, 874, 380, 874, 875, 875, - 382, 391, 392, 234, 874, 396, 398, 874, 407, 427, - 875, 875, 433, 875, 875, 875, 875, 875, 435, 436, - 438, 441, 235, 345, 235, 235, 235, 235, 235, 778, - 345, 778, 778, 445, 455, 778, 457, 235, 458, 345, - 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, - 875, 875, 875, 875, 468, 474, 875, 875, 875, 235, - 875, 875, 475, 479, 875, 480, 778, 875, 235, 235, - 235, 235, 875, 481, 875, 235, 875, 875, 484, 875, - 875, 875, 875, 875, 702, 875, 875, 875, 345, 485, - 346, 486, 496, 508, 702, 348, 364, 346, 511, 514, - 520, 875, 348, 364, 875, 875, 346, 875, 528, 875, - 395, 348, 364, 529, 536, 235, 875, 395, 537, 875, - 2, 2, 2, 2, 2, 2, 395, 702, 702, 2, - 2, 538, 702, 539, 2, 845, 2, 2, 2, 2, - 2, 2, 2, 8, 8, 8, 8, 8, 2, 2, - 2, 2, 2, 2, 2, 346, 564, 2, 565, 566, - 348, 364, 570, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 395, 2, 2, 2, 405, - 2, 2, 2, 2, 2, 443, 405, 845, 586, 596, - 587, 590, 443, 592, 845, 405, 596, 597, 601, 845, - 610, 443, 611, 845, 2, 596, 612, 2, 622, 626, - 2, 2, 637, 627, 2, 629, 2, 656, 664, 637, - 2, 666, 845, 673, 535, 682, 652, 652, 637, 2, - 652, 652, 652, 687, 2, 2, 2, 2, 692, 2, - 2, 2, 2, 694, 405, 696, 712, 2, 2, 717, - 443, 718, 845, 720, 596, 2, 535, 2, 2, 2, - 535, 535, 2, 2, 38, 38, 38, 38, 38, 38, - 725, 734, 743, 38, 38, 751, 752, 637, 38, 753, - 38, 38, 38, 38, 38, 38, 38, 25, 782, 785, - 787, 793, 38, 38, 38, 38, 38, 38, 38, 794, - 1098, 38, 1098, 1098, 1098, 795, 1098, 38, 38, 38, - 38, 38, 38, 38, 38, 38, 38, 38, 38, 797, - 38, 38, 38, 799, 38, 38, 38, 38, 38, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 814, 25, 25, 807, 809, 25, 25, 814, 38, 812, - 25, 38, 814, 815, 38, 38, 814, 816, 38, 819, - 38, 25, 828, 25, 38, 25, 25, 834, 25, 25, - 25, 25, 25, 38, 25, 835, 839, 848, 38, 38, - 38, 38, 1105, 38, 38, 38, 38, 852, 854, 1105, - 869, 38, 38, 871, 25, 880, 893, 896, 1105, 38, - 897, 38, 38, 38, 900, 814, 38, 38, 136, 136, - 136, 136, 136, 136, 902, 905, 906, 136, 136, 908, - 909, 911, 136, 915, 136, 136, 136, 136, 136, 136, - 136, 335, 335, 335, 335, 335, 136, 136, 136, 136, - 136, 136, 136, 928, 936, 136, 937, 1105, 941, 944, - 448, 136, 136, 136, 136, 136, 136, 136, 136, 136, - 136, 136, 136, 949, 136, 136, 136, 964, 136, 136, - 136, 136, 136, 448, 448, 448, 448, 448, 448, 448, - 448, 448, 448, 448, 846, 448, 448, 967, 968, 448, - 448, 846, 136, 977, 982, 136, 846, 985, 136, 136, - 846, 992, 136, 994, 136, 448, 1001, 448, 136, 448, - 448, 1002, 448, 448, 448, 448, 448, 136, 448, 1003, - 1004, 1030, 136, 136, 136, 136, 1143, 136, 136, 136, - 136, 1031, 1036, 1143, 1041, 136, 136, 1042, 448, 1043, - 448, 1044, 1143, 136, 1045, 136, 136, 136, 1046, 846, - 136, 136, 219, 219, 219, 219, 219, 219, 1050, 1051, - 1052, 219, 219, 1054, 1058, 1065, 219, 1070, 219, 219, - 219, 219, 219, 219, 219, 374, 374, 374, 374, 374, - 219, 219, 219, 219, 219, 219, 219, 1071, 1073, 219, - 1074, 1143, 1075, 1077, 454, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, 219, 1078, 219, 219, - 219, 1079, 219, 219, 219, 219, 219, 454, 454, 454, - 454, 454, 454, 454, 454, 454, 454, 454, 1184, 454, - 454, 1095, 1106, 454, 454, 1184, 219, 1109, 1110, 219, - 1130, 1111, 219, 219, 1184, 1112, 219, 1141, 219, 454, - 1130, 454, 219, 454, 454, 1144, 454, 454, 454, 454, - 454, 219, 454, 1153, 1154, 1159, 219, 219, 219, 219, - 1169, 219, 219, 219, 219, 1170, 1171, 1174, 1177, 219, - 219, 1178, 454, 1130, 1130, 1179, 1180, 219, 1130, 219, - 219, 219, 1182, 1184, 219, 219, 231, 231, 231, 231, - 231, 231, 1196, 1201, 1213, 231, 231, 1214, 1220, 1221, - 231, 1222, 231, 231, 231, 231, 231, 231, 231, 584, - 584, 584, 584, 584, 231, 231, 231, 231, 231, 231, - 231, 1223, 1232, 231, nil, nil, nil, nil, 695, 231, - 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, - 231, nil, 231, 231, 231, nil, 231, 231, 231, 231, - 231, 695, 695, 695, 695, 695, 695, 695, 695, 695, - 695, 695, nil, 695, 695, nil, nil, 695, 695, nil, - 231, nil, nil, 231, nil, nil, 231, 231, nil, nil, - 231, nil, 231, 695, nil, 695, 231, 695, 695, nil, - 695, 695, 695, 695, 695, 231, 695, nil, nil, nil, - 231, 231, 231, 231, nil, 231, 231, 231, 231, nil, - nil, nil, nil, 231, 231, nil, 695, nil, nil, nil, - nil, 231, nil, 231, 231, 231, nil, nil, 231, 231, - 237, 237, 237, 237, 237, 237, nil, nil, nil, 237, - 237, nil, nil, nil, 237, nil, 237, 237, 237, 237, - 237, 237, 237, nil, nil, nil, nil, nil, 237, 237, - 237, 237, 237, 237, 237, nil, nil, 237, nil, nil, - nil, nil, 726, 237, 237, 237, 237, 237, 237, 237, - 237, 237, 237, 237, 237, nil, 237, 237, 237, nil, - 237, 237, 237, 237, 237, 726, 726, 726, 726, 726, - 726, 726, 726, 726, 726, 726, nil, 726, 726, nil, - nil, 726, 726, nil, 237, nil, nil, 237, nil, nil, - 237, 237, nil, nil, 237, nil, 237, 726, nil, 726, - 237, 726, 726, nil, 726, 726, 726, 726, 726, 237, - 726, nil, nil, nil, 237, 237, 237, 237, nil, 237, - 237, 237, 237, nil, nil, nil, nil, 237, 237, nil, - 726, nil, nil, nil, nil, 237, nil, 237, 237, 237, - nil, nil, 237, 237, 254, 254, 254, 254, 254, 254, - nil, nil, nil, 254, 254, nil, nil, nil, 254, nil, - 254, 254, 254, 254, 254, 254, 254, nil, nil, nil, - nil, nil, 254, 254, 254, 254, 254, 254, 254, nil, - 1194, 254, 1194, 1194, 1194, nil, 1194, 254, 254, 254, - 254, 254, 254, 254, 254, 254, 254, 254, 254, nil, - 254, 254, 254, nil, 254, 254, 254, 254, 254, 318, - 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, - nil, 318, 318, nil, nil, 318, 318, nil, 254, nil, - nil, 254, nil, nil, 254, 254, nil, nil, 254, nil, - 254, 318, nil, 318, 254, 318, 318, nil, 318, 318, - 318, 318, 318, 254, 318, nil, nil, nil, 254, 254, - 254, 254, nil, 254, 254, 254, 254, nil, nil, nil, - nil, 254, 254, nil, 318, nil, nil, nil, nil, 254, - nil, 254, 254, 254, nil, nil, 254, 254, 338, 338, - 338, 338, 338, 338, nil, nil, nil, 338, 338, nil, - nil, nil, 338, nil, 338, 338, 338, 338, 338, 338, - 338, nil, nil, nil, nil, nil, 338, 338, 338, 338, - 338, 338, 338, nil, nil, 338, nil, nil, nil, nil, - nil, 338, 338, 338, 338, 338, 338, 338, 338, 338, - 338, 338, 338, nil, 338, 338, 338, nil, 338, 338, - 338, 338, 338, 553, 553, 553, 553, 553, 553, 553, - 553, 553, 553, 553, nil, 553, 553, nil, nil, 553, - 553, nil, 338, nil, nil, 338, nil, nil, 338, 338, - nil, nil, 338, nil, 338, 553, nil, 553, 338, 553, - 553, nil, 553, 553, 553, 553, 553, 338, 553, nil, - nil, nil, 338, 338, 338, 338, nil, 338, 338, 338, - 338, nil, nil, nil, nil, 338, 338, 553, 553, nil, - nil, nil, nil, 338, nil, 338, 338, 338, nil, nil, - 338, 338, 343, 343, 343, 343, 343, 343, nil, nil, - nil, 343, 343, nil, nil, nil, 343, nil, 343, 343, - 343, 343, 343, 343, 343, nil, nil, nil, nil, nil, - 343, 343, 343, 343, 343, 343, 343, nil, nil, 343, - nil, nil, nil, nil, nil, 343, 343, 343, 343, 343, - 343, 343, 343, 343, 343, 343, 343, nil, 343, 343, - 343, nil, 343, 343, 343, 343, 343, 820, 820, 820, - 820, 820, 820, 820, 820, 820, 820, 820, nil, 820, - 820, nil, nil, 820, 820, nil, 343, nil, nil, 343, - nil, nil, 343, 343, nil, nil, 343, nil, 343, 820, - nil, 820, 343, 820, 820, nil, 820, 820, 820, 820, - 820, 343, 820, nil, nil, nil, 343, 343, 343, 343, - nil, 343, 343, 343, 343, nil, nil, nil, nil, 343, - 343, nil, 820, nil, nil, nil, nil, 343, nil, 343, - 343, 343, nil, nil, 343, 343, 373, 373, 373, 373, - 373, 373, nil, nil, nil, 373, 373, nil, nil, nil, - 373, nil, 373, 373, 373, 373, 373, 373, 373, nil, - nil, nil, nil, nil, 373, 373, 373, 373, 373, 373, - 373, nil, nil, 373, nil, nil, nil, nil, nil, 373, - 373, 373, 373, 373, 373, 373, 373, 373, 373, 373, - 373, nil, 373, 373, 373, nil, 373, 373, 373, 373, - 373, 877, 877, 877, 877, 877, 877, 877, 877, 877, - 877, 877, nil, 877, 877, nil, nil, 877, 877, nil, - 373, nil, nil, 373, nil, nil, 373, 373, nil, nil, - 373, nil, 373, 877, nil, 877, 373, 877, 877, nil, - 877, 877, 877, 877, 877, 373, 877, nil, nil, nil, - 373, 373, 373, 373, nil, 373, 373, 373, 373, nil, - nil, nil, nil, 373, 373, nil, 877, nil, nil, nil, - nil, 373, nil, 373, 373, 373, nil, nil, 373, 373, - 388, 388, 388, 388, 388, 388, nil, nil, nil, 388, - 388, nil, nil, nil, 388, nil, 388, 388, 388, 388, - 388, 388, 388, nil, nil, nil, nil, nil, 388, 388, - 388, 388, 388, 388, 388, nil, nil, 388, nil, nil, - nil, nil, nil, 388, 388, 388, 388, 388, 388, 388, - 388, 388, 388, 388, 388, nil, 388, 388, 388, nil, - 388, 388, 388, 388, 388, 1009, 1009, 1009, 1009, 1009, - 1009, 1009, 1009, 1009, 1009, 1009, nil, 1009, 1009, nil, - nil, 1009, 1009, nil, 388, nil, nil, 388, nil, nil, - 388, 388, nil, nil, 388, nil, 388, 1009, nil, 1009, - 388, 1009, 1009, nil, 1009, 1009, 1009, 1009, 1009, 388, - 1009, nil, nil, nil, 388, 388, 388, 388, nil, 388, - 388, 388, 388, nil, nil, nil, nil, 388, 388, nil, - 1009, nil, nil, nil, nil, 388, nil, 388, 388, 388, - nil, nil, 388, 388, 389, 389, 389, 389, 389, 389, - nil, nil, nil, 389, 389, nil, nil, nil, 389, nil, - 389, 389, 389, 389, 389, 389, 389, nil, nil, nil, - nil, nil, 389, 389, 389, 389, 389, 389, 389, nil, - nil, 389, nil, nil, nil, nil, nil, 389, 389, 389, - 389, 389, 389, 389, 389, 389, 389, 389, 389, nil, - 389, 389, 389, nil, 389, 389, 389, 389, 389, 1010, - 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, - nil, 1010, 1010, nil, nil, 1010, 1010, nil, 389, nil, - nil, 389, nil, nil, 389, 389, nil, nil, 389, nil, - 389, 1010, nil, 1010, 389, 1010, 1010, nil, 1010, 1010, - 1010, 1010, 1010, 389, 1010, nil, nil, nil, 389, 389, - 389, 389, nil, 389, 389, 389, 389, nil, nil, nil, - nil, 389, 389, nil, 1010, nil, nil, nil, nil, 389, - nil, 389, 389, 389, nil, nil, 389, 389, 621, 621, - 621, 621, 621, 621, nil, nil, nil, 621, 621, nil, - nil, nil, 621, nil, 621, 621, 621, 621, 621, 621, - 621, nil, nil, nil, nil, nil, 621, 621, 621, 621, - 621, 621, 621, nil, nil, 621, nil, nil, nil, nil, - nil, 621, 621, 621, 621, 621, 621, 621, 621, 621, - 621, 621, 621, nil, 621, 621, 621, nil, 621, 621, - 621, 621, 621, 1032, 1032, 1032, 1032, 1032, 1032, 1032, - 1032, 1032, 1032, 1032, nil, 1032, 1032, nil, nil, 1032, - 1032, nil, 621, nil, nil, 621, nil, nil, 621, 621, - nil, nil, 621, nil, 621, 1032, nil, 1032, 621, 1032, - 1032, nil, 1032, 1032, 1032, 1032, 1032, 621, 1032, nil, - nil, nil, 621, 621, 621, 621, nil, 621, 621, 621, - 621, nil, nil, nil, nil, 621, 621, nil, 1032, nil, - nil, nil, nil, 621, nil, 621, 621, 621, nil, nil, - 621, 621, 624, 624, 624, 624, 624, 624, nil, nil, - nil, 624, 624, nil, nil, nil, 624, nil, 624, 624, - 624, 624, 624, 624, 624, nil, nil, nil, nil, nil, - 624, 624, 624, 624, 624, 624, 624, nil, nil, 624, - nil, nil, nil, nil, nil, 624, 624, 624, 624, 624, - 624, 624, 624, 624, 624, 624, 624, nil, 624, 624, - 624, nil, 624, 624, 624, 624, 624, 1033, 1033, 1033, - 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, nil, 1033, - 1033, nil, nil, 1033, 1033, nil, 624, nil, nil, 624, - nil, nil, 624, 624, nil, nil, 624, nil, 624, 1033, - nil, 1033, 624, 1033, 1033, nil, 1033, 1033, 1033, 1033, - 1033, 624, 1033, nil, nil, nil, 624, 624, 624, 624, - nil, 624, 624, 624, 624, nil, nil, nil, nil, 624, - 624, nil, 1033, nil, nil, nil, nil, 624, nil, 624, - 624, 624, nil, nil, 624, 624, 645, 645, 645, 645, - 645, 645, nil, nil, nil, 645, 645, nil, nil, nil, - 645, nil, 645, 645, 645, 645, 645, 645, 645, nil, - nil, nil, nil, nil, 645, 645, 645, 645, 645, 645, - 645, nil, nil, 645, nil, nil, nil, nil, nil, 645, - 645, 645, 645, 645, 645, 645, 645, 645, 645, 645, - 645, nil, 645, 645, 645, nil, 645, 645, 645, 645, - 645, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, 1066, - 1066, 1066, nil, 1066, 1066, nil, nil, 1066, 1066, nil, - 645, nil, nil, 645, nil, nil, 645, 645, nil, nil, - 645, nil, 645, 1066, nil, 1066, 645, 1066, 1066, nil, - 1066, 1066, 1066, 1066, 1066, 645, 1066, nil, nil, nil, - 645, 645, 645, 645, nil, 645, 645, 645, 645, nil, - nil, nil, nil, 645, 645, nil, 1066, nil, nil, nil, - nil, 645, nil, 645, 645, 645, nil, nil, 645, 645, - 844, 844, 844, 844, 844, 844, nil, nil, nil, 844, - 844, nil, nil, nil, 844, nil, 844, 844, 844, 844, - 844, 844, 844, nil, nil, nil, nil, nil, 844, 844, - 844, 844, 844, 844, 844, nil, 497, 844, 497, 497, - 497, nil, 497, 844, 844, 844, 844, 844, 844, 844, - 844, 844, 844, 844, 844, nil, 844, 844, 844, nil, - 844, 844, 844, 844, 844, 715, nil, 715, 715, 715, - nil, 715, nil, 497, nil, 917, nil, 917, 917, 917, - nil, 917, 497, nil, 844, nil, nil, 844, nil, nil, - 844, 844, nil, nil, 844, 916, 844, 916, 916, 916, - 844, 916, 715, nil, nil, nil, nil, nil, nil, 844, - nil, 715, 917, nil, 844, 844, 844, 844, nil, 844, - 844, 844, 844, nil, nil, nil, nil, 844, 844, nil, - nil, nil, 916, nil, nil, 844, nil, 844, 844, 844, - nil, 916, 844, 844, 849, 849, 849, 849, 849, 849, - nil, nil, nil, 849, 849, nil, nil, nil, 849, nil, - 849, 849, 849, 849, 849, 849, 849, nil, nil, nil, - nil, nil, 849, 849, 849, 849, 849, 849, 849, nil, - nil, 849, nil, nil, nil, nil, nil, 849, 849, 849, - 849, 849, 849, 849, 849, 849, 849, 849, 849, nil, - 849, 849, 849, nil, 849, 849, 849, 849, 849, 365, - 365, 365, 365, 365, 365, 365, 365, 365, 365, 365, - nil, 365, 365, nil, nil, 365, 365, nil, 849, nil, - nil, 849, nil, nil, 849, 849, nil, 549, 849, nil, - 849, 365, nil, 365, 849, 365, 365, nil, 365, 365, - 365, 365, 365, 849, 365, nil, nil, nil, 849, 849, - 849, 849, nil, 849, 849, 849, 849, nil, nil, 549, - nil, 849, 849, 549, 549, nil, 549, 549, nil, 849, - nil, 849, 849, 849, nil, nil, 849, 849, 860, 860, - 860, 860, 860, 860, nil, nil, nil, 860, 860, nil, - nil, nil, 860, nil, 860, 860, 860, 860, 860, 860, - 860, nil, nil, nil, nil, nil, 860, 860, 860, 860, - 860, 860, 860, nil, nil, 860, nil, nil, nil, nil, - nil, 860, 860, 860, 860, 860, 860, 860, 860, 860, - 860, 860, 860, nil, 860, 860, 860, nil, 860, 860, - 860, 860, 860, 366, 366, 366, 366, 366, 366, 366, - 366, 366, 366, 366, nil, 366, 366, nil, nil, 366, - 366, nil, 860, nil, nil, 860, nil, nil, 860, 860, - nil, 550, 860, nil, 860, 366, nil, 366, 860, 366, - 366, nil, 366, 366, 366, 366, 366, 860, 366, nil, - nil, nil, 860, 860, 860, 860, nil, 860, 860, 860, - 860, nil, nil, 550, nil, 860, 860, 550, 550, nil, - 550, 550, nil, 860, nil, 860, 860, 860, nil, nil, - 860, 860, 895, 895, 895, 895, 895, 895, nil, nil, - nil, 895, 895, nil, nil, nil, 895, nil, 895, 895, - 895, 895, 895, 895, 895, nil, nil, nil, nil, nil, - 895, 895, 895, 895, 895, 895, 895, nil, nil, 895, - nil, nil, nil, nil, nil, 895, 895, 895, 895, 895, - 895, 895, 895, 895, 895, 895, 895, nil, 895, 895, - 895, nil, 895, 895, 895, 895, 895, 532, 532, 532, - 532, 532, 532, 532, 532, 532, 532, 532, nil, 532, - 532, nil, nil, 532, 532, nil, 895, nil, nil, 895, - nil, nil, 895, 895, nil, nil, 895, nil, 895, 532, - nil, 532, 895, 532, 532, nil, 532, 532, 532, 532, - 532, 895, 532, nil, nil, nil, 895, 895, 895, 895, - nil, 895, 895, 895, 895, nil, nil, nil, nil, 895, - 895, nil, 1113, nil, 1113, 1113, 1113, 895, 1113, 895, - 895, 895, nil, nil, 895, 895, 972, 972, 972, 972, - 972, 972, nil, nil, nil, 972, 972, nil, nil, nil, - 972, nil, 972, 972, 972, 972, 972, 972, 972, 1113, - nil, nil, nil, nil, 972, 972, 972, 972, 972, 972, - 972, nil, nil, 972, nil, nil, nil, nil, nil, 972, - 972, 972, 972, 972, 972, 972, 972, 972, 972, 972, - 972, nil, 972, 972, 972, nil, 972, 972, 972, 972, - 972, 533, 533, 533, 533, 533, 533, 533, 533, 533, - 533, 533, nil, 533, 533, nil, nil, 533, 533, nil, - 972, nil, nil, 972, nil, nil, 972, 972, nil, nil, - 972, nil, 972, 533, nil, 533, 972, 533, 533, nil, - 533, 533, 533, 533, 533, 972, 533, nil, nil, nil, - 972, 972, 972, 972, nil, 972, 972, 972, 972, nil, - nil, nil, nil, 972, 972, nil, 1114, nil, 1114, 1114, - 1114, 972, 1114, 972, 972, 972, nil, nil, 972, 972, - 990, 990, 990, 990, 990, 990, nil, nil, nil, 990, - 990, nil, nil, nil, 990, nil, 990, 990, 990, 990, - 990, 990, 990, 1114, nil, nil, nil, nil, 990, 990, - 990, 990, 990, 990, 990, nil, nil, 990, nil, nil, - nil, nil, nil, 990, 990, 990, 990, 990, 990, 990, - 990, 990, 990, 990, 990, nil, 990, 990, 990, nil, - 990, 990, 990, 990, 990, 543, 543, 543, 543, 543, - 543, 543, nil, nil, 543, 543, nil, nil, nil, nil, - nil, 543, 543, nil, 990, nil, nil, 990, nil, nil, - 990, 990, nil, nil, 990, nil, 990, 543, nil, 543, - 990, 543, 543, nil, 543, 543, 543, 543, 543, 990, - 543, nil, nil, nil, 990, 990, 990, 990, nil, 990, - 990, 990, 990, nil, nil, nil, nil, 990, 990, nil, - nil, nil, nil, nil, nil, 990, nil, 990, 990, 990, - nil, nil, 990, 990, 996, 996, 996, 996, 996, 996, - nil, nil, nil, 996, 996, nil, nil, nil, 996, nil, - 996, 996, 996, 996, 996, 996, 996, nil, nil, nil, - nil, nil, 996, 996, 996, 996, 996, 996, 996, nil, - nil, 996, nil, nil, nil, nil, nil, 996, 996, 996, - 996, 996, 996, 996, 996, 996, 996, 996, 996, nil, - 996, 996, 996, nil, 996, 996, 996, 996, 996, 544, - 544, 544, 544, 544, 544, 544, nil, nil, 544, 544, - nil, nil, nil, nil, nil, 544, 544, nil, 996, nil, - nil, 996, nil, nil, 996, 996, nil, nil, 996, nil, - 996, 544, nil, 544, 996, 544, 544, nil, 544, 544, - 544, 544, 544, 996, 544, nil, nil, nil, 996, 996, - 996, 996, nil, 996, 996, 996, 996, nil, nil, nil, - nil, 996, 996, nil, nil, nil, nil, nil, nil, 996, - nil, 996, 996, 996, nil, nil, 996, 996, 1012, 1012, - 1012, 1012, 1012, 1012, nil, nil, nil, 1012, 1012, nil, - nil, nil, 1012, nil, 1012, 1012, 1012, 1012, 1012, 1012, - 1012, nil, nil, nil, nil, nil, 1012, 1012, 1012, 1012, - 1012, 1012, 1012, nil, nil, 1012, nil, nil, nil, nil, - nil, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, 1012, - 1012, 1012, 1012, nil, 1012, 1012, 1012, nil, 1012, 1012, - 1012, 1012, 1012, 545, 545, 545, 545, 545, 545, 545, - nil, nil, 545, 545, nil, nil, nil, nil, nil, 545, - 545, nil, 1012, nil, nil, 1012, nil, nil, 1012, 1012, - nil, nil, 1012, nil, 1012, 545, nil, 545, 1012, 545, - 545, nil, 545, 545, 545, 545, 545, 1012, 545, nil, - nil, nil, 1012, 1012, 1012, 1012, nil, 1012, 1012, 1012, - 1012, nil, nil, nil, nil, 1012, 1012, nil, nil, nil, - nil, nil, nil, 1012, nil, 1012, 1012, 1012, nil, nil, - 1012, 1012, 1067, 1067, 1067, 1067, 1067, 1067, nil, nil, - nil, 1067, 1067, nil, nil, nil, 1067, nil, 1067, 1067, - 1067, 1067, 1067, 1067, 1067, nil, nil, nil, nil, nil, - 1067, 1067, 1067, 1067, 1067, 1067, 1067, nil, nil, 1067, - nil, nil, nil, nil, nil, 1067, 1067, 1067, 1067, 1067, - 1067, 1067, 1067, 1067, 1067, 1067, 1067, nil, 1067, 1067, - 1067, nil, 1067, 1067, 1067, 1067, 1067, 546, 546, 546, - 546, 546, 546, 546, nil, nil, 546, 546, nil, nil, - nil, nil, nil, 546, 546, nil, 1067, nil, nil, 1067, - nil, nil, 1067, 1067, nil, nil, 1067, nil, 1067, 546, - nil, 546, 1067, 546, 546, nil, 546, 546, 546, 546, - 546, 1067, 546, nil, nil, nil, 1067, 1067, 1067, 1067, - nil, 1067, 1067, 1067, 1067, nil, nil, nil, nil, 1067, - 1067, nil, nil, nil, nil, nil, nil, 1067, nil, 1067, - 1067, 1067, nil, nil, 1067, 1067, 1096, 1096, 1096, 1096, - 1096, 1096, nil, nil, nil, 1096, 1096, nil, nil, nil, - 1096, nil, 1096, 1096, 1096, 1096, 1096, 1096, 1096, nil, - nil, nil, nil, nil, 1096, 1096, 1096, 1096, 1096, 1096, - 1096, nil, nil, 1096, nil, nil, nil, nil, nil, 1096, - 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, 1096, - 1096, nil, 1096, 1096, 1096, nil, 1096, 1096, 1096, 1096, - 1096, 547, 547, 547, 547, 547, 547, 547, nil, nil, - 547, 547, nil, nil, nil, nil, nil, 547, 547, nil, - 1096, nil, nil, 1096, nil, nil, 1096, 1096, nil, nil, - 1096, nil, 1096, 547, nil, 547, 1096, 547, 547, nil, - 547, 547, 547, 547, 547, 1096, 547, nil, nil, nil, - 1096, 1096, 1096, 1096, nil, 1096, 1096, 1096, 1096, nil, - nil, nil, nil, 1096, 1096, nil, nil, nil, nil, nil, - nil, 1096, nil, 1096, 1096, 1096, nil, nil, 1096, 1096, - 1097, 1097, 1097, 1097, 1097, 1097, nil, nil, nil, 1097, - 1097, nil, nil, nil, 1097, nil, 1097, 1097, 1097, 1097, - 1097, 1097, 1097, nil, nil, nil, nil, nil, 1097, 1097, - 1097, 1097, 1097, 1097, 1097, nil, nil, 1097, nil, nil, - nil, nil, nil, 1097, 1097, 1097, 1097, 1097, 1097, 1097, - 1097, 1097, 1097, 1097, 1097, nil, 1097, 1097, 1097, nil, - 1097, 1097, 1097, 1097, 1097, 548, 548, 548, 548, 548, - 548, 548, nil, nil, 548, 548, nil, nil, nil, nil, - nil, 548, 548, nil, 1097, nil, nil, 1097, nil, nil, - 1097, 1097, nil, nil, 1097, nil, 1097, 548, nil, 548, - 1097, 548, 548, nil, 548, 548, 548, 548, 548, 1097, - 548, nil, nil, nil, 1097, 1097, 1097, 1097, nil, 1097, - 1097, 1097, 1097, nil, nil, nil, nil, 1097, 1097, nil, - nil, nil, nil, nil, nil, 1097, nil, 1097, 1097, 1097, - nil, nil, 1097, 1097, 1102, 1102, 1102, 1102, 1102, 1102, - nil, nil, nil, 1102, 1102, nil, nil, nil, 1102, nil, - 1102, 1102, 1102, 1102, 1102, 1102, 1102, nil, nil, nil, - nil, nil, 1102, 1102, 1102, 1102, 1102, 1102, 1102, nil, - nil, 1102, nil, nil, nil, nil, nil, 1102, 1102, 1102, - 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, 1102, nil, - 1102, 1102, 1102, nil, 1102, 1102, 1102, 1102, 1102, 551, - 551, 551, 551, 551, 551, 551, nil, nil, 551, 551, - nil, nil, nil, nil, nil, 551, 551, nil, 1102, nil, - nil, 1102, nil, nil, 1102, 1102, nil, nil, 1102, nil, - 1102, 551, nil, 551, 1102, 551, 551, nil, 551, 551, - 551, 551, 551, 1102, 551, nil, nil, nil, 1102, 1102, - 1102, 1102, nil, 1102, 1102, 1102, 1102, nil, nil, nil, - nil, 1102, 1102, nil, nil, nil, nil, nil, nil, 1102, - nil, 1102, 1102, 1102, nil, nil, 1102, 1102, 1145, 1145, - 1145, 1145, 1145, 1145, nil, nil, nil, 1145, 1145, nil, - nil, nil, 1145, nil, 1145, 1145, 1145, 1145, 1145, 1145, - 1145, nil, nil, nil, nil, nil, 1145, 1145, 1145, 1145, - 1145, 1145, 1145, nil, nil, 1145, nil, nil, nil, nil, - nil, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, - 1145, 1145, 1145, nil, 1145, 1145, 1145, nil, 1145, 1145, - 1145, 1145, 1145, 552, 552, 552, 552, 552, 552, 552, - 552, nil, 552, 552, nil, nil, nil, nil, nil, 552, - 552, nil, 1145, nil, nil, 1145, nil, nil, 1145, 1145, - nil, nil, 1145, nil, 1145, 552, nil, 552, 1145, 552, - 552, nil, 552, 552, 552, 552, 552, 1145, 552, nil, - nil, nil, 1145, 1145, 1145, 1145, nil, 1145, 1145, 1145, - 1145, nil, nil, nil, nil, 1145, 1145, nil, nil, nil, - nil, nil, nil, 1145, nil, 1145, 1145, 1145, nil, nil, - 1145, 1145, 1188, 1188, 1188, 1188, 1188, 1188, nil, nil, - nil, 1188, 1188, nil, nil, nil, 1188, nil, 1188, 1188, - 1188, 1188, 1188, 1188, 1188, nil, nil, nil, nil, nil, - 1188, 1188, 1188, 1188, 1188, 1188, 1188, nil, nil, 1188, - nil, nil, nil, nil, nil, 1188, 1188, 1188, 1188, 1188, - 1188, 1188, 1188, 1188, 1188, 1188, 1188, nil, 1188, 1188, - 1188, nil, 1188, 1188, 1188, 1188, 1188, 554, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 554, 554, nil, 1188, nil, nil, 1188, - nil, nil, 1188, 1188, nil, nil, 1188, nil, 1188, 554, - nil, 554, 1188, 554, 554, nil, 554, 554, nil, nil, - 554, 1188, 554, nil, nil, nil, 1188, 1188, 1188, 1188, - nil, 1188, 1188, 1188, 1188, nil, nil, nil, nil, 1188, - 1188, nil, nil, nil, nil, nil, nil, 1188, nil, 1188, - 1188, 1188, nil, nil, 1188, 1188, 7, 7, 7, 7, - 7, nil, nil, nil, 7, 7, nil, nil, nil, 7, - nil, 7, 7, 7, 7, 7, 7, 7, nil, nil, - nil, nil, nil, 7, 7, 7, 7, 7, 7, 7, - nil, nil, 7, nil, nil, nil, nil, nil, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - nil, 7, 7, 7, nil, 7, 7, 7, 7, 7, - 607, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 607, 607, nil, 7, - nil, nil, 7, nil, nil, 7, 7, nil, nil, 7, - nil, 7, 607, nil, 607, 7, 607, 607, nil, 607, - 607, nil, nil, 607, 7, 607, nil, nil, nil, 7, - 7, 7, 7, nil, 7, 7, 7, 7, nil, nil, - nil, nil, 7, 7, nil, nil, nil, 24, 24, 24, - 7, 24, 7, 7, 7, 24, 24, 7, 7, nil, - 24, nil, 24, 24, 24, 24, 24, 24, 24, nil, - nil, nil, nil, nil, 24, 24, 24, 24, 24, 24, - 24, nil, nil, 24, nil, nil, nil, nil, nil, nil, - 24, nil, nil, 24, 24, 24, 24, 24, 24, 24, - 24, nil, 24, 24, 24, nil, 24, 24, 24, 24, - 24, 540, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 540, 540, nil, - 24, nil, nil, 24, nil, nil, 24, 24, nil, nil, - 24, nil, nil, 540, nil, 540, 24, 540, 540, nil, - 540, 540, nil, nil, nil, 24, nil, nil, nil, nil, - 24, 24, 24, 24, nil, 24, 24, 24, 24, nil, - nil, nil, nil, 24, 24, nil, nil, nil, nil, nil, - nil, 24, nil, 24, 24, 24, 32, nil, 24, 24, - nil, nil, nil, 32, 32, 32, nil, nil, 32, 32, - 32, 541, 32, nil, nil, nil, nil, nil, nil, nil, - 32, 32, 32, 32, nil, nil, nil, 541, 541, nil, - nil, nil, 32, 32, nil, 32, 32, 32, 32, 32, - nil, nil, nil, 541, nil, 541, nil, 541, 541, nil, - 541, 541, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, nil, nil, 32, 32, - 32, nil, nil, 32, nil, 32, 32, nil, nil, 32, - 32, nil, 32, nil, 32, nil, 32, nil, 32, 32, - nil, 32, 32, 32, 32, 32, 33, 32, 32, 32, - nil, nil, nil, 33, 33, 33, nil, nil, 33, 33, - 33, nil, 33, 32, 542, nil, 32, 32, nil, 32, - 33, 32, 33, 33, nil, nil, nil, nil, 32, nil, - 542, 542, 33, 33, nil, 33, 33, 33, 33, 33, - nil, nil, nil, nil, nil, nil, 542, nil, nil, nil, - 542, 542, nil, 542, 542, nil, nil, nil, nil, nil, - nil, nil, 33, 33, 33, 33, 33, 33, 33, 33, - 33, 33, 33, 33, 33, 33, nil, nil, 33, 33, - 33, nil, nil, 33, nil, 33, 33, nil, nil, 33, - 33, nil, 33, nil, 33, nil, 33, nil, 33, 33, - nil, 33, 33, 33, 33, 33, nil, 33, nil, 33, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 33, nil, nil, 33, 33, nil, 33, - nil, 33, 34, 34, 34, nil, 34, nil, 33, nil, - 34, 34, nil, nil, nil, 34, nil, 34, 34, 34, - 34, 34, 34, 34, nil, nil, nil, nil, nil, 34, - 34, 34, 34, 34, 34, 34, nil, nil, 34, nil, - nil, nil, nil, nil, nil, 34, nil, nil, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - nil, 34, 34, 34, 34, 34, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 34, nil, nil, 34, nil, - nil, 34, 34, nil, nil, 34, nil, 34, nil, 34, - nil, 34, nil, nil, 34, nil, nil, nil, nil, nil, - 34, nil, nil, nil, nil, 34, 34, 34, 34, nil, - 34, 34, 34, 34, nil, nil, nil, nil, 34, 34, - nil, nil, nil, 35, 35, 35, 34, 35, 34, 34, - 34, 35, 35, 34, 34, nil, 35, nil, 35, 35, - 35, 35, 35, 35, 35, nil, nil, nil, nil, nil, - 35, 35, 35, 35, 35, 35, 35, nil, nil, 35, - nil, nil, nil, nil, nil, nil, 35, nil, nil, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - 35, nil, 35, 35, 35, 35, 35, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 35, nil, nil, 35, - nil, nil, 35, 35, nil, nil, 35, nil, 35, nil, - 35, nil, 35, nil, nil, 35, nil, nil, nil, nil, - nil, 35, nil, nil, nil, nil, 35, 35, 35, 35, - nil, 35, 35, 35, 35, nil, nil, nil, nil, 35, - 35, nil, nil, nil, 36, 36, 36, 35, 36, 35, - 35, 35, 36, 36, 35, 35, nil, 36, nil, 36, - 36, 36, 36, 36, 36, 36, nil, nil, nil, nil, - nil, 36, 36, 36, 36, 36, 36, 36, nil, nil, - 36, nil, nil, nil, nil, nil, nil, 36, nil, nil, - 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, - 36, 36, nil, 36, 36, 36, 36, 36, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 36, nil, nil, - 36, nil, nil, 36, 36, nil, nil, 36, nil, 36, - nil, 36, nil, 36, nil, nil, 36, nil, nil, nil, - nil, nil, 36, nil, nil, nil, nil, 36, 36, 36, - 36, nil, 36, 36, 36, 36, nil, nil, nil, nil, - 36, 36, nil, nil, nil, 46, 46, 46, 36, 46, - 36, 36, 36, 46, 46, 36, 36, nil, 46, nil, - 46, 46, 46, 46, 46, 46, 46, nil, nil, nil, - nil, nil, 46, 46, 46, 46, 46, 46, 46, nil, - nil, 46, nil, nil, nil, nil, nil, nil, 46, nil, - nil, 46, 46, 46, 46, 46, 46, 46, 46, nil, - 46, 46, 46, nil, 46, 46, 46, 46, 46, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 46, nil, - nil, 46, nil, nil, 46, 46, nil, nil, 46, nil, - nil, nil, nil, nil, 46, nil, nil, nil, nil, nil, - nil, nil, nil, 46, nil, nil, nil, nil, 46, 46, - 46, 46, nil, 46, 46, 46, 46, nil, nil, nil, - nil, 46, 46, nil, nil, nil, 47, 47, 47, 46, - 47, 46, 46, 46, 47, 47, 46, 46, nil, 47, - nil, 47, 47, 47, 47, 47, 47, 47, nil, nil, - nil, nil, nil, 47, 47, 47, 47, 47, 47, 47, - nil, nil, 47, nil, nil, nil, nil, nil, nil, 47, - nil, nil, 47, 47, 47, 47, 47, 47, 47, 47, - nil, 47, 47, 47, nil, 47, 47, 47, 47, 47, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 47, - nil, nil, 47, nil, nil, 47, 47, nil, nil, 47, - nil, nil, nil, nil, nil, 47, nil, nil, nil, nil, - nil, nil, nil, nil, 47, nil, nil, nil, nil, 47, - 47, 47, 47, nil, 47, 47, 47, 47, nil, nil, - nil, nil, 47, 47, nil, nil, nil, 49, 49, 49, - 47, 49, 47, 47, 47, 49, 49, 47, 47, nil, - 49, nil, 49, 49, 49, 49, 49, 49, 49, nil, - nil, nil, nil, nil, 49, 49, 49, 49, 49, 49, - 49, nil, nil, 49, nil, nil, nil, nil, nil, nil, - 49, nil, nil, 49, 49, 49, 49, 49, 49, 49, - 49, nil, 49, 49, 49, nil, 49, 49, 49, 49, - 49, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 49, nil, nil, 49, nil, nil, 49, 49, nil, nil, - 49, nil, nil, nil, nil, nil, 49, nil, nil, nil, - nil, nil, nil, nil, nil, 49, nil, nil, nil, nil, - 49, 49, 49, 49, nil, 49, 49, 49, 49, nil, - nil, nil, nil, 49, 49, nil, nil, nil, 50, 50, - 50, 49, 50, 49, 49, 49, 50, 50, 49, 49, - nil, 50, nil, 50, 50, 50, 50, 50, 50, 50, - nil, nil, nil, nil, nil, 50, 50, 50, 50, 50, - 50, 50, nil, nil, 50, nil, nil, nil, nil, nil, - nil, 50, nil, nil, 50, 50, 50, 50, 50, 50, - 50, 50, nil, 50, 50, 50, nil, 50, 50, 50, - 50, 50, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 50, nil, nil, 50, nil, nil, 50, 50, nil, - nil, 50, nil, nil, nil, nil, nil, 50, nil, nil, - nil, nil, nil, nil, nil, nil, 50, nil, nil, nil, - nil, 50, 50, 50, 50, nil, 50, 50, 50, 50, - nil, nil, nil, nil, 50, 50, nil, nil, nil, 52, - 52, 52, 50, 52, 50, 50, 50, 52, 52, 50, - 50, nil, 52, nil, 52, 52, 52, 52, 52, 52, - 52, nil, nil, nil, nil, nil, 52, 52, 52, 52, - 52, 52, 52, nil, nil, 52, nil, nil, nil, nil, - nil, nil, 52, nil, nil, 52, 52, 52, 52, 52, - 52, 52, 52, nil, 52, 52, 52, nil, 52, 52, - 52, 52, 52, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 52, nil, nil, 52, nil, nil, 52, 52, - nil, nil, 52, nil, nil, nil, nil, nil, 52, nil, - nil, nil, nil, nil, nil, nil, nil, 52, nil, nil, - nil, nil, 52, 52, 52, 52, nil, 52, 52, 52, - 52, nil, nil, nil, nil, 52, 52, nil, nil, nil, - nil, nil, nil, 52, nil, 52, 52, 52, 64, nil, - 52, 52, nil, nil, nil, 64, 64, 64, nil, nil, - 64, 64, 64, nil, 64, nil, nil, nil, nil, nil, - nil, nil, 64, nil, 64, 64, 64, nil, nil, nil, - 765, 765, 765, 765, 64, 64, nil, 64, 64, 64, - 64, 64, nil, nil, nil, nil, 765, 765, 765, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 765, - 765, nil, nil, 765, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, nil, nil, - 64, 64, 64, nil, nil, 64, nil, nil, 64, nil, - nil, 64, 64, nil, 64, nil, 64, nil, 64, nil, - 64, 64, nil, 64, 64, 64, 64, 64, nil, 64, - nil, 64, nil, 765, 765, 765, 765, nil, 765, 765, - 765, 765, nil, nil, nil, 64, 765, 765, 64, 64, - 64, 64, nil, 64, 765, 64, 765, 765, 765, nil, - 64, 66, 66, 66, 66, 66, nil, nil, nil, 66, - 66, nil, nil, nil, 66, nil, 66, 66, 66, 66, - 66, 66, 66, nil, nil, nil, nil, nil, 66, 66, - 66, 66, 66, 66, 66, nil, nil, 66, nil, nil, - nil, nil, nil, 66, 66, nil, 66, 66, 66, 66, - 66, 66, 66, 66, 66, nil, 66, 66, 66, nil, - 66, 66, 66, 66, 66, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 66, nil, nil, 66, nil, nil, - 66, 66, nil, nil, 66, nil, 66, nil, nil, nil, - 66, nil, nil, nil, nil, nil, nil, nil, nil, 66, - nil, nil, nil, nil, 66, 66, 66, 66, nil, 66, - 66, 66, 66, nil, nil, nil, nil, 66, 66, nil, - nil, nil, 67, 67, 67, 66, 67, 66, 66, 66, - 67, 67, 66, 66, nil, 67, nil, 67, 67, 67, - 67, 67, 67, 67, nil, nil, nil, nil, nil, 67, - 67, 67, 67, 67, 67, 67, nil, nil, 67, nil, - nil, nil, nil, nil, nil, 67, nil, nil, 67, 67, - 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, - nil, 67, 67, 67, 67, 67, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 67, nil, nil, 67, nil, - nil, 67, 67, nil, nil, 67, nil, 67, nil, nil, - nil, 67, nil, nil, 67, nil, nil, nil, nil, nil, - 67, nil, nil, nil, nil, 67, 67, 67, 67, nil, - 67, 67, 67, 67, nil, nil, nil, nil, 67, 67, - nil, nil, nil, 68, 68, 68, 67, 68, 67, 67, - 67, 68, 68, 67, 67, nil, 68, nil, 68, 68, - 68, 68, 68, 68, 68, nil, nil, nil, nil, nil, - 68, 68, 68, 68, 68, 68, 68, nil, nil, 68, - nil, nil, nil, nil, nil, nil, 68, nil, nil, 68, - 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, - 68, nil, 68, 68, 68, 68, 68, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 68, nil, nil, 68, - nil, nil, 68, 68, nil, nil, 68, nil, nil, nil, - nil, nil, 68, nil, nil, 68, nil, nil, nil, nil, - nil, 68, nil, nil, nil, nil, 68, 68, 68, 68, - nil, 68, 68, 68, 68, nil, nil, nil, nil, 68, - 68, nil, nil, nil, 71, 71, 71, 68, 71, 68, - 68, 68, 71, 71, 68, 68, nil, 71, nil, 71, - 71, 71, 71, 71, 71, 71, nil, nil, nil, nil, - nil, 71, 71, 71, 71, 71, 71, 71, nil, nil, - 71, nil, nil, nil, nil, nil, nil, 71, nil, nil, - 71, 71, 71, 71, 71, 71, 71, 71, nil, 71, - 71, 71, nil, 71, 71, 71, 71, 71, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 71, nil, nil, - 71, nil, nil, 71, 71, nil, nil, 71, nil, nil, - nil, nil, nil, 71, nil, nil, nil, nil, nil, nil, - nil, nil, 71, nil, nil, nil, nil, 71, 71, 71, - 71, nil, 71, 71, 71, 71, nil, nil, nil, nil, - 71, 71, nil, nil, nil, 72, 72, 72, 71, 72, - 71, 71, 71, 72, 72, 71, 71, nil, 72, nil, - 72, 72, 72, 72, 72, 72, 72, nil, nil, nil, - nil, nil, 72, 72, 72, 72, 72, 72, 72, nil, - nil, 72, nil, nil, nil, nil, nil, nil, 72, nil, - nil, 72, 72, 72, 72, 72, 72, 72, 72, nil, - 72, 72, 72, nil, 72, 72, 72, 72, 72, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 72, nil, - nil, 72, nil, nil, 72, 72, nil, nil, 72, nil, - nil, nil, nil, nil, 72, nil, nil, nil, nil, nil, - nil, nil, nil, 72, nil, nil, nil, nil, 72, 72, - 72, 72, nil, 72, 72, 72, 72, nil, nil, nil, - nil, 72, 72, nil, nil, nil, 75, 75, 75, 72, - 75, 72, 72, 72, 75, 75, 72, 72, nil, 75, - nil, 75, 75, 75, 75, 75, 75, 75, nil, nil, - nil, nil, nil, 75, 75, 75, 75, 75, 75, 75, - nil, nil, 75, nil, nil, nil, nil, nil, nil, 75, - nil, nil, 75, 75, 75, 75, 75, 75, 75, 75, - nil, 75, 75, 75, nil, 75, 75, 75, 75, 75, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 75, - nil, nil, 75, nil, nil, 75, 75, nil, nil, 75, - nil, nil, nil, nil, nil, 75, nil, nil, nil, nil, - nil, nil, nil, nil, 75, nil, nil, nil, nil, 75, - 75, 75, 75, nil, 75, 75, 75, 75, nil, nil, - nil, nil, 75, 75, 75, nil, nil, nil, nil, 75, - 75, nil, 75, 75, 75, nil, nil, 75, 75, 125, - 125, 125, 125, 125, nil, nil, nil, 125, 125, nil, - nil, nil, 125, nil, 125, 125, 125, 125, 125, 125, - 125, nil, nil, nil, nil, nil, 125, 125, 125, 125, - 125, 125, 125, nil, nil, 125, nil, nil, nil, nil, - nil, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, nil, 125, 125, 125, nil, 125, 125, - 125, 125, 125, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 125, nil, nil, 125, nil, nil, 125, 125, - nil, nil, 125, nil, 125, nil, nil, nil, 125, nil, - nil, nil, nil, nil, nil, nil, nil, 125, nil, nil, - nil, nil, 125, 125, 125, 125, nil, 125, 125, 125, - 125, nil, nil, nil, nil, 125, 125, nil, nil, nil, - nil, nil, 125, 125, nil, 125, 125, 125, nil, nil, - 125, 125, 130, 130, 130, nil, 130, nil, nil, nil, - 130, 130, nil, nil, nil, 130, nil, 130, 130, 130, - 130, 130, 130, 130, nil, nil, nil, nil, nil, 130, - 130, 130, 130, 130, 130, 130, nil, nil, 130, nil, - nil, nil, nil, nil, nil, 130, nil, nil, 130, 130, - 130, 130, 130, 130, 130, 130, nil, 130, 130, 130, - nil, 130, 130, 130, 130, 130, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 130, nil, nil, 130, nil, - nil, 130, 130, nil, nil, 130, nil, nil, nil, nil, - nil, 130, nil, nil, nil, nil, nil, nil, nil, nil, - 130, nil, nil, nil, nil, 130, 130, 130, 130, nil, - 130, 130, 130, 130, nil, nil, nil, nil, 130, 130, - nil, nil, nil, 131, 131, 131, 130, 131, 130, 130, - 130, 131, 131, 130, 130, nil, 131, nil, 131, 131, - 131, 131, 131, 131, 131, nil, nil, nil, nil, nil, - 131, 131, 131, 131, 131, 131, 131, nil, nil, 131, - nil, nil, nil, nil, nil, nil, 131, nil, nil, 131, - 131, 131, 131, 131, 131, 131, 131, nil, 131, 131, - 131, nil, 131, 131, 131, 131, 131, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 131, nil, nil, 131, - nil, nil, 131, 131, nil, nil, 131, nil, nil, nil, - nil, nil, 131, nil, nil, nil, nil, nil, nil, nil, - nil, 131, nil, nil, nil, nil, 131, 131, 131, 131, - nil, 131, 131, 131, 131, nil, nil, nil, nil, 131, - 131, nil, nil, nil, 132, 132, 132, 131, 132, 131, - 131, 131, 132, 132, 131, 131, nil, 132, nil, 132, - 132, 132, 132, 132, 132, 132, nil, nil, nil, nil, - nil, 132, 132, 132, 132, 132, 132, 132, nil, nil, - 132, nil, nil, nil, nil, nil, nil, 132, nil, nil, - 132, 132, 132, 132, 132, 132, 132, 132, nil, 132, - 132, 132, nil, 132, 132, 132, 132, 132, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 132, nil, nil, - 132, nil, nil, 132, 132, nil, nil, 132, nil, nil, - nil, nil, nil, 132, nil, nil, nil, nil, nil, nil, - nil, nil, 132, nil, nil, nil, nil, 132, 132, 132, - 132, nil, 132, 132, 132, 132, nil, nil, nil, nil, - 132, 132, nil, nil, nil, 133, 133, 133, 132, 133, - 132, 132, 132, 133, 133, 132, 132, nil, 133, nil, - 133, 133, 133, 133, 133, 133, 133, nil, nil, nil, - nil, nil, 133, 133, 133, 133, 133, 133, 133, nil, - nil, 133, nil, nil, nil, nil, nil, nil, 133, nil, - nil, 133, 133, 133, 133, 133, 133, 133, 133, nil, - 133, 133, 133, nil, 133, 133, 133, 133, 133, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 133, nil, - nil, 133, nil, nil, 133, 133, nil, nil, 133, nil, - nil, nil, nil, nil, 133, nil, nil, nil, nil, nil, - nil, nil, nil, 133, nil, nil, nil, nil, 133, 133, - 133, 133, nil, 133, 133, 133, 133, nil, nil, nil, - nil, 133, 133, nil, nil, nil, nil, nil, nil, 133, - nil, 133, 133, 133, nil, nil, 133, 133, 134, 134, - 134, 134, 134, nil, nil, nil, 134, 134, nil, nil, - nil, 134, nil, 134, 134, 134, 134, 134, 134, 134, - nil, nil, nil, nil, nil, 134, 134, 134, 134, 134, - 134, 134, nil, nil, 134, nil, nil, nil, nil, nil, - 134, 134, nil, 134, 134, 134, 134, 134, 134, 134, - 134, 134, nil, 134, 134, 134, nil, 134, 134, 134, - 134, 134, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 134, nil, nil, 134, nil, nil, 134, 134, nil, - nil, 134, nil, 134, nil, nil, nil, 134, nil, nil, - nil, nil, nil, nil, nil, nil, 134, nil, nil, nil, - nil, 134, 134, 134, 134, nil, 134, 134, 134, 134, - nil, nil, nil, nil, 134, 134, nil, nil, nil, 220, - 220, 220, 134, 220, 134, 134, 134, 220, 220, 134, - 134, nil, 220, nil, 220, 220, 220, 220, 220, 220, - 220, nil, nil, nil, nil, nil, 220, 220, 220, 220, - 220, 220, 220, nil, nil, 220, nil, nil, nil, nil, - nil, nil, 220, nil, nil, 220, 220, 220, 220, 220, - 220, 220, 220, nil, 220, 220, 220, nil, 220, 220, - 220, 220, 220, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 220, nil, nil, 220, nil, nil, 220, 220, - nil, nil, 220, nil, 220, nil, nil, nil, 220, nil, - nil, nil, nil, nil, nil, nil, nil, 220, nil, nil, - nil, nil, 220, 220, 220, 220, nil, 220, 220, 220, - 220, nil, nil, nil, nil, 220, 220, nil, nil, nil, - 221, 221, 221, 220, 221, 220, 220, 220, 221, 221, - 220, 220, nil, 221, nil, 221, 221, 221, 221, 221, - 221, 221, nil, nil, nil, nil, nil, 221, 221, 221, - 221, 221, 221, 221, nil, nil, 221, nil, nil, nil, - nil, nil, nil, 221, nil, nil, 221, 221, 221, 221, - 221, 221, 221, 221, nil, 221, 221, 221, nil, 221, - 221, 221, 221, 221, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 221, nil, nil, 221, nil, nil, 221, - 221, nil, nil, 221, nil, 221, nil, nil, nil, 221, - nil, nil, nil, nil, nil, nil, nil, nil, 221, nil, - nil, nil, nil, 221, 221, 221, 221, nil, 221, 221, - 221, 221, nil, nil, nil, nil, 221, 221, nil, nil, - nil, 222, 222, 222, 221, 222, 221, 221, 221, 222, - 222, 221, 221, nil, 222, nil, 222, 222, 222, 222, - 222, 222, 222, nil, nil, nil, nil, nil, 222, 222, - 222, 222, 222, 222, 222, nil, nil, 222, nil, nil, - nil, nil, nil, nil, 222, nil, nil, 222, 222, 222, - 222, 222, 222, 222, 222, nil, 222, 222, 222, nil, - 222, 222, 222, 222, 222, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 222, nil, nil, 222, nil, nil, - 222, 222, nil, nil, 222, nil, nil, nil, nil, nil, - 222, nil, nil, nil, nil, nil, nil, nil, nil, 222, - nil, nil, nil, nil, 222, 222, 222, 222, nil, 222, - 222, 222, 222, nil, nil, nil, nil, 222, 222, nil, - nil, nil, 223, 223, 223, 222, 223, 222, 222, 222, - 223, 223, 222, 222, nil, 223, nil, 223, 223, 223, - 223, 223, 223, 223, nil, nil, nil, nil, nil, 223, - 223, 223, 223, 223, 223, 223, nil, nil, 223, nil, - nil, nil, nil, nil, nil, 223, nil, nil, 223, 223, - 223, 223, 223, 223, 223, 223, nil, 223, 223, 223, - nil, 223, 223, 223, 223, 223, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 223, nil, nil, 223, nil, - nil, 223, 223, nil, nil, 223, nil, nil, nil, nil, - nil, 223, nil, nil, nil, nil, nil, nil, nil, nil, - 223, nil, nil, nil, nil, 223, 223, 223, 223, nil, - 223, 223, 223, 223, nil, nil, nil, nil, 223, 223, - nil, nil, nil, 224, 224, 224, 223, 224, 223, 223, - 223, 224, 224, 223, 223, nil, 224, nil, 224, 224, - 224, 224, 224, 224, 224, nil, nil, nil, nil, nil, - 224, 224, 224, 224, 224, 224, 224, nil, nil, 224, - nil, nil, nil, nil, nil, nil, 224, nil, nil, 224, - 224, 224, 224, 224, 224, 224, 224, nil, 224, 224, - 224, nil, 224, 224, 224, 224, 224, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 224, nil, nil, 224, - nil, nil, 224, 224, nil, nil, 224, nil, nil, nil, - nil, nil, 224, nil, nil, nil, nil, nil, nil, nil, - nil, 224, nil, nil, nil, nil, 224, 224, 224, 224, - nil, 224, 224, 224, 224, nil, nil, nil, nil, 224, - 224, nil, nil, nil, 225, 225, 225, 224, 225, 224, - 224, 224, 225, 225, 224, 224, nil, 225, nil, 225, - 225, 225, 225, 225, 225, 225, nil, nil, nil, nil, - nil, 225, 225, 225, 225, 225, 225, 225, nil, nil, - 225, nil, nil, nil, nil, nil, nil, 225, nil, nil, - 225, 225, 225, 225, 225, 225, 225, 225, 225, 225, - 225, 225, nil, 225, 225, 225, 225, 225, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 225, nil, nil, - 225, nil, nil, 225, 225, nil, nil, 225, nil, 225, - nil, 225, nil, 225, nil, nil, 225, nil, nil, nil, - nil, nil, 225, nil, nil, nil, nil, 225, 225, 225, - 225, nil, 225, 225, 225, 225, nil, nil, nil, nil, - 225, 225, nil, nil, nil, 238, 238, 238, 225, 238, - 225, 225, 225, 238, 238, 225, 225, nil, 238, nil, - 238, 238, 238, 238, 238, 238, 238, nil, nil, nil, - nil, nil, 238, 238, 238, 238, 238, 238, 238, nil, - nil, 238, nil, nil, nil, nil, nil, nil, 238, nil, - nil, 238, 238, 238, 238, 238, 238, 238, 238, nil, - 238, 238, 238, nil, 238, 238, 238, 238, 238, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 238, nil, - nil, 238, nil, nil, 238, 238, nil, nil, 238, nil, - nil, nil, nil, nil, 238, nil, nil, nil, nil, nil, - nil, nil, nil, 238, nil, nil, nil, nil, 238, 238, - 238, 238, nil, 238, 238, 238, 238, nil, nil, nil, - nil, 238, 238, nil, nil, nil, 239, 239, 239, 238, - 239, 238, 238, 238, 239, 239, 238, 238, nil, 239, - nil, 239, 239, 239, 239, 239, 239, 239, nil, nil, - nil, nil, nil, 239, 239, 239, 239, 239, 239, 239, - nil, nil, 239, nil, nil, nil, nil, nil, nil, 239, - nil, nil, 239, 239, 239, 239, 239, 239, 239, 239, - nil, 239, 239, 239, nil, 239, 239, 239, 239, 239, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 239, - nil, nil, 239, nil, nil, 239, 239, nil, nil, 239, - nil, nil, nil, nil, nil, 239, nil, nil, nil, nil, - nil, nil, nil, nil, 239, nil, nil, nil, nil, 239, - 239, 239, 239, nil, 239, 239, 239, 239, nil, nil, - nil, nil, 239, 239, nil, nil, nil, 240, 240, 240, - 239, 240, 239, 239, 239, 240, 240, 239, 239, nil, - 240, nil, 240, 240, 240, 240, 240, 240, 240, nil, - nil, nil, nil, nil, 240, 240, 240, 240, 240, 240, - 240, nil, nil, 240, nil, nil, nil, nil, nil, nil, - 240, nil, nil, 240, 240, 240, 240, 240, 240, 240, - 240, nil, 240, 240, 240, nil, 240, 240, 240, 240, - 240, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 240, nil, nil, 240, nil, nil, 240, 240, nil, nil, - 240, nil, nil, nil, nil, nil, 240, nil, nil, nil, - nil, nil, nil, nil, nil, 240, nil, nil, nil, nil, - 240, 240, 240, 240, nil, 240, 240, 240, 240, nil, - nil, nil, nil, 240, 240, 240, nil, nil, 251, 251, - 251, 240, 251, 240, 240, 240, 251, 251, 240, 240, - nil, 251, nil, 251, 251, 251, 251, 251, 251, 251, - nil, nil, nil, nil, nil, 251, 251, 251, 251, 251, - 251, 251, nil, nil, 251, nil, nil, nil, nil, nil, - nil, 251, nil, nil, 251, 251, 251, 251, 251, 251, - 251, 251, nil, 251, 251, 251, nil, 251, 251, 251, - 251, 251, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 251, nil, nil, 251, nil, nil, 251, 251, nil, - nil, 251, nil, nil, nil, nil, nil, 251, nil, nil, - nil, nil, nil, nil, nil, nil, 251, nil, nil, nil, - nil, 251, 251, 251, 251, nil, 251, 251, 251, 251, - nil, nil, nil, nil, 251, 251, nil, nil, nil, 258, - 258, 258, 251, 258, 251, 251, 251, 258, 258, 251, - 251, nil, 258, nil, 258, 258, 258, 258, 258, 258, - 258, nil, nil, nil, nil, nil, 258, 258, 258, 258, - 258, 258, 258, nil, nil, 258, nil, nil, nil, nil, - nil, nil, 258, nil, nil, 258, 258, 258, 258, 258, - 258, 258, 258, nil, 258, 258, 258, nil, 258, 258, - 258, 258, 258, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 258, nil, nil, 258, nil, nil, 258, 258, - nil, nil, 258, nil, nil, nil, nil, nil, 258, nil, - nil, nil, nil, nil, nil, nil, nil, 258, nil, nil, - nil, nil, 258, 258, 258, 258, nil, 258, 258, 258, - 258, nil, nil, nil, nil, 258, 258, nil, nil, nil, - 259, 259, 259, 258, 259, 258, 258, 258, 259, 259, - 258, 258, nil, 259, nil, 259, 259, 259, 259, 259, - 259, 259, nil, nil, nil, nil, nil, 259, 259, 259, - 259, 259, 259, 259, nil, nil, 259, nil, nil, nil, - nil, nil, nil, 259, nil, nil, 259, 259, 259, 259, - 259, 259, 259, 259, nil, 259, 259, 259, nil, 259, - 259, 259, 259, 259, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 259, nil, nil, 259, nil, nil, 259, - 259, nil, nil, 259, nil, nil, nil, nil, nil, 259, - nil, nil, nil, nil, nil, nil, nil, nil, 259, nil, - nil, nil, nil, 259, 259, 259, 259, nil, 259, 259, - 259, 259, nil, nil, nil, nil, 259, 259, nil, nil, - nil, 260, 260, 260, 259, 260, 259, 259, 259, 260, - 260, 259, 259, nil, 260, nil, 260, 260, 260, 260, - 260, 260, 260, nil, nil, nil, nil, nil, 260, 260, - 260, 260, 260, 260, 260, nil, nil, 260, nil, nil, - nil, nil, nil, nil, 260, nil, nil, 260, 260, 260, - 260, 260, 260, 260, 260, nil, 260, 260, 260, nil, - 260, 260, 260, 260, 260, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 260, nil, nil, 260, nil, nil, - 260, 260, nil, nil, 260, nil, nil, nil, nil, nil, - 260, nil, nil, nil, nil, nil, nil, nil, nil, 260, - nil, nil, nil, nil, 260, 260, 260, 260, nil, 260, - 260, 260, 260, nil, nil, nil, nil, 260, 260, nil, - nil, nil, 261, 261, 261, 260, 261, 260, 260, 260, - 261, 261, 260, 260, nil, 261, nil, 261, 261, 261, - 261, 261, 261, 261, nil, nil, nil, nil, nil, 261, - 261, 261, 261, 261, 261, 261, nil, nil, 261, nil, - nil, nil, nil, nil, nil, 261, nil, nil, 261, 261, - 261, 261, 261, 261, 261, 261, nil, 261, 261, 261, - nil, 261, 261, 261, 261, 261, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 261, nil, nil, 261, nil, - nil, 261, 261, nil, nil, 261, nil, nil, nil, nil, - nil, 261, nil, nil, nil, nil, nil, nil, nil, nil, - 261, nil, nil, nil, nil, 261, 261, 261, 261, nil, - 261, 261, 261, 261, nil, nil, nil, nil, 261, 261, - nil, nil, nil, 262, 262, 262, 261, 262, 261, 261, - 261, 262, 262, 261, 261, nil, 262, nil, 262, 262, - 262, 262, 262, 262, 262, nil, nil, nil, nil, nil, - 262, 262, 262, 262, 262, 262, 262, nil, nil, 262, - nil, nil, nil, nil, nil, nil, 262, nil, nil, 262, - 262, 262, 262, 262, 262, 262, 262, nil, 262, 262, - 262, nil, 262, 262, 262, 262, 262, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 262, nil, nil, 262, - nil, nil, 262, 262, nil, nil, 262, nil, nil, nil, - nil, nil, 262, nil, nil, nil, nil, nil, nil, nil, - nil, 262, nil, nil, nil, nil, 262, 262, 262, 262, - nil, 262, 262, 262, 262, nil, nil, nil, nil, 262, - 262, nil, nil, nil, 263, 263, 263, 262, 263, 262, - 262, 262, 263, 263, 262, 262, nil, 263, nil, 263, - 263, 263, 263, 263, 263, 263, nil, nil, nil, nil, - nil, 263, 263, 263, 263, 263, 263, 263, nil, nil, - 263, nil, nil, nil, nil, nil, nil, 263, nil, nil, - 263, 263, 263, 263, 263, 263, 263, 263, nil, 263, - 263, 263, nil, 263, 263, 263, 263, 263, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 263, nil, nil, - 263, nil, nil, 263, 263, nil, nil, 263, nil, nil, - nil, nil, nil, 263, nil, nil, nil, nil, nil, nil, - nil, nil, 263, nil, nil, nil, nil, 263, 263, 263, - 263, nil, 263, 263, 263, 263, nil, nil, nil, nil, - 263, 263, nil, nil, nil, 264, 264, 264, 263, 264, - 263, 263, 263, 264, 264, 263, 263, nil, 264, nil, - 264, 264, 264, 264, 264, 264, 264, nil, nil, nil, - nil, nil, 264, 264, 264, 264, 264, 264, 264, nil, - nil, 264, nil, nil, nil, nil, nil, nil, 264, nil, - nil, 264, 264, 264, 264, 264, 264, 264, 264, nil, - 264, 264, 264, nil, 264, 264, 264, 264, 264, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 264, nil, - nil, 264, nil, nil, 264, 264, nil, nil, 264, nil, - nil, nil, nil, nil, 264, nil, nil, nil, nil, nil, - nil, nil, nil, 264, nil, nil, nil, nil, 264, 264, - 264, 264, nil, 264, 264, 264, 264, nil, nil, nil, - nil, 264, 264, nil, nil, nil, 265, 265, 265, 264, - 265, 264, 264, 264, 265, 265, 264, 264, nil, 265, - nil, 265, 265, 265, 265, 265, 265, 265, nil, nil, - nil, nil, nil, 265, 265, 265, 265, 265, 265, 265, - nil, nil, 265, nil, nil, nil, nil, nil, nil, 265, - nil, nil, 265, 265, 265, 265, 265, 265, 265, 265, - nil, 265, 265, 265, nil, 265, 265, 265, 265, 265, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 265, - nil, nil, 265, nil, nil, 265, 265, nil, nil, 265, - nil, nil, nil, nil, nil, 265, nil, nil, nil, nil, - nil, nil, nil, nil, 265, nil, nil, nil, nil, 265, - 265, 265, 265, nil, 265, 265, 265, 265, nil, nil, - nil, nil, 265, 265, nil, nil, nil, 266, 266, 266, - 265, 266, 265, 265, 265, 266, 266, 265, 265, nil, - 266, nil, 266, 266, 266, 266, 266, 266, 266, nil, - nil, nil, nil, nil, 266, 266, 266, 266, 266, 266, - 266, nil, nil, 266, nil, nil, nil, nil, nil, nil, - 266, nil, nil, 266, 266, 266, 266, 266, 266, 266, - 266, nil, 266, 266, 266, nil, 266, 266, 266, 266, - 266, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 266, nil, nil, 266, nil, nil, 266, 266, nil, nil, - 266, nil, nil, nil, nil, nil, 266, nil, nil, nil, - nil, nil, nil, nil, nil, 266, nil, nil, nil, nil, - 266, 266, 266, 266, nil, 266, 266, 266, 266, nil, - nil, nil, nil, 266, 266, nil, nil, nil, 267, 267, - 267, 266, 267, 266, 266, 266, 267, 267, 266, 266, - nil, 267, nil, 267, 267, 267, 267, 267, 267, 267, - nil, nil, nil, nil, nil, 267, 267, 267, 267, 267, - 267, 267, nil, nil, 267, nil, nil, nil, nil, nil, - nil, 267, nil, nil, 267, 267, 267, 267, 267, 267, - 267, 267, nil, 267, 267, 267, nil, 267, 267, 267, - 267, 267, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 267, nil, nil, 267, nil, nil, 267, 267, nil, - nil, 267, nil, nil, nil, nil, nil, 267, nil, nil, - nil, nil, nil, nil, nil, nil, 267, nil, nil, nil, - nil, 267, 267, 267, 267, nil, 267, 267, 267, 267, - nil, nil, nil, nil, 267, 267, nil, nil, nil, 268, - 268, 268, 267, 268, 267, 267, 267, 268, 268, 267, - 267, nil, 268, nil, 268, 268, 268, 268, 268, 268, - 268, nil, nil, nil, nil, nil, 268, 268, 268, 268, - 268, 268, 268, nil, nil, 268, nil, nil, nil, nil, - nil, nil, 268, nil, nil, 268, 268, 268, 268, 268, - 268, 268, 268, nil, 268, 268, 268, nil, 268, 268, - 268, 268, 268, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 268, nil, nil, 268, nil, nil, 268, 268, - nil, nil, 268, nil, nil, nil, nil, nil, 268, nil, - nil, nil, nil, nil, nil, nil, nil, 268, nil, nil, - nil, nil, 268, 268, 268, 268, nil, 268, 268, 268, - 268, nil, nil, nil, nil, 268, 268, nil, nil, nil, - 269, 269, 269, 268, 269, 268, 268, 268, 269, 269, - 268, 268, nil, 269, nil, 269, 269, 269, 269, 269, - 269, 269, nil, nil, nil, nil, nil, 269, 269, 269, - 269, 269, 269, 269, nil, nil, 269, nil, nil, nil, - nil, nil, nil, 269, nil, nil, 269, 269, 269, 269, - 269, 269, 269, 269, nil, 269, 269, 269, nil, 269, - 269, 269, 269, 269, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 269, nil, nil, 269, nil, nil, 269, - 269, nil, nil, 269, nil, nil, nil, nil, nil, 269, - nil, nil, nil, nil, nil, nil, nil, nil, 269, nil, - nil, nil, nil, 269, 269, 269, 269, nil, 269, 269, - 269, 269, nil, nil, nil, nil, 269, 269, nil, nil, - nil, 270, 270, 270, 269, 270, 269, 269, 269, 270, - 270, 269, 269, nil, 270, nil, 270, 270, 270, 270, - 270, 270, 270, nil, nil, nil, nil, nil, 270, 270, - 270, 270, 270, 270, 270, nil, nil, 270, nil, nil, - nil, nil, nil, nil, 270, nil, nil, 270, 270, 270, - 270, 270, 270, 270, 270, nil, 270, 270, 270, nil, - 270, 270, 270, 270, 270, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 270, nil, nil, 270, nil, nil, - 270, 270, nil, nil, 270, nil, nil, nil, nil, nil, - 270, nil, nil, nil, nil, nil, nil, nil, nil, 270, - nil, nil, nil, nil, 270, 270, 270, 270, nil, 270, - 270, 270, 270, nil, nil, nil, nil, 270, 270, nil, - nil, nil, 271, 271, 271, 270, 271, 270, 270, 270, - 271, 271, 270, 270, nil, 271, nil, 271, 271, 271, - 271, 271, 271, 271, nil, nil, nil, nil, nil, 271, - 271, 271, 271, 271, 271, 271, nil, nil, 271, nil, - nil, nil, nil, nil, nil, 271, nil, nil, 271, 271, - 271, 271, 271, 271, 271, 271, nil, 271, 271, 271, - nil, 271, 271, 271, 271, 271, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 271, nil, nil, 271, nil, - nil, 271, 271, nil, nil, 271, nil, nil, nil, nil, - nil, 271, nil, nil, nil, nil, nil, nil, nil, nil, - 271, nil, nil, nil, nil, 271, 271, 271, 271, nil, - 271, 271, 271, 271, nil, nil, nil, nil, 271, 271, - nil, nil, nil, 272, 272, 272, 271, 272, 271, 271, - 271, 272, 272, 271, 271, nil, 272, nil, 272, 272, - 272, 272, 272, 272, 272, nil, nil, nil, nil, nil, - 272, 272, 272, 272, 272, 272, 272, nil, nil, 272, - nil, nil, nil, nil, nil, nil, 272, nil, nil, 272, - 272, 272, 272, 272, 272, 272, 272, nil, 272, 272, - 272, nil, 272, 272, 272, 272, 272, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 272, nil, nil, 272, - nil, nil, 272, 272, nil, nil, 272, nil, nil, nil, - nil, nil, 272, nil, nil, nil, nil, nil, nil, nil, - nil, 272, nil, nil, nil, nil, 272, 272, 272, 272, - nil, 272, 272, 272, 272, nil, nil, nil, nil, 272, - 272, nil, nil, nil, 273, 273, 273, 272, 273, 272, - 272, 272, 273, 273, 272, 272, nil, 273, nil, 273, - 273, 273, 273, 273, 273, 273, nil, nil, nil, nil, - nil, 273, 273, 273, 273, 273, 273, 273, nil, nil, - 273, nil, nil, nil, nil, nil, nil, 273, nil, nil, - 273, 273, 273, 273, 273, 273, 273, 273, nil, 273, - 273, 273, nil, 273, 273, 273, 273, 273, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 273, nil, nil, - 273, nil, nil, 273, 273, nil, nil, 273, nil, nil, - nil, nil, nil, 273, nil, nil, nil, nil, nil, nil, - nil, nil, 273, nil, nil, nil, nil, 273, 273, 273, - 273, nil, 273, 273, 273, 273, nil, nil, nil, nil, - 273, 273, nil, nil, nil, 274, 274, 274, 273, 274, - 273, 273, 273, 274, 274, 273, 273, nil, 274, nil, - 274, 274, 274, 274, 274, 274, 274, nil, nil, nil, - nil, nil, 274, 274, 274, 274, 274, 274, 274, nil, - nil, 274, nil, nil, nil, nil, nil, nil, 274, nil, - nil, 274, 274, 274, 274, 274, 274, 274, 274, nil, - 274, 274, 274, nil, 274, 274, 274, 274, 274, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 274, nil, - nil, 274, nil, nil, 274, 274, nil, nil, 274, nil, - nil, nil, nil, nil, 274, nil, nil, nil, nil, nil, - nil, nil, nil, 274, nil, nil, nil, nil, 274, 274, - 274, 274, nil, 274, 274, 274, 274, nil, nil, nil, - nil, 274, 274, nil, nil, nil, 275, 275, 275, 274, - 275, 274, 274, 274, 275, 275, 274, 274, nil, 275, - nil, 275, 275, 275, 275, 275, 275, 275, nil, nil, - nil, nil, nil, 275, 275, 275, 275, 275, 275, 275, - nil, nil, 275, nil, nil, nil, nil, nil, nil, 275, - nil, nil, 275, 275, 275, 275, 275, 275, 275, 275, - nil, 275, 275, 275, nil, 275, 275, 275, 275, 275, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 275, - nil, nil, 275, nil, nil, 275, 275, nil, nil, 275, - nil, nil, nil, nil, nil, 275, nil, nil, nil, nil, - nil, nil, nil, nil, 275, nil, nil, nil, nil, 275, - 275, 275, 275, nil, 275, 275, 275, 275, nil, nil, - nil, nil, 275, 275, nil, nil, nil, 276, 276, 276, - 275, 276, 275, 275, 275, 276, 276, 275, 275, nil, - 276, nil, 276, 276, 276, 276, 276, 276, 276, nil, - nil, nil, nil, nil, 276, 276, 276, 276, 276, 276, - 276, nil, nil, 276, nil, nil, nil, nil, nil, nil, - 276, nil, nil, 276, 276, 276, 276, 276, 276, 276, - 276, nil, 276, 276, 276, nil, 276, 276, 276, 276, - 276, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 276, nil, nil, 276, nil, nil, 276, 276, nil, nil, - 276, nil, nil, nil, nil, nil, 276, nil, nil, nil, - nil, nil, nil, nil, nil, 276, nil, nil, nil, nil, - 276, 276, 276, 276, nil, 276, 276, 276, 276, nil, - nil, nil, nil, 276, 276, nil, nil, nil, 277, 277, - 277, 276, 277, 276, 276, 276, 277, 277, 276, 276, - nil, 277, nil, 277, 277, 277, 277, 277, 277, 277, - nil, nil, nil, nil, nil, 277, 277, 277, 277, 277, - 277, 277, nil, nil, 277, nil, nil, nil, nil, nil, - nil, 277, nil, nil, 277, 277, 277, 277, 277, 277, - 277, 277, nil, 277, 277, 277, nil, 277, 277, 277, - 277, 277, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 277, nil, nil, 277, nil, nil, 277, 277, nil, - nil, 277, nil, nil, nil, nil, nil, 277, nil, nil, - nil, nil, nil, nil, nil, nil, 277, nil, nil, nil, - nil, 277, 277, 277, 277, nil, 277, 277, 277, 277, - nil, nil, nil, nil, 277, 277, nil, nil, nil, 278, - 278, 278, 277, 278, 277, 277, 277, 278, 278, 277, - 277, nil, 278, nil, 278, 278, 278, 278, 278, 278, - 278, nil, nil, nil, nil, nil, 278, 278, 278, 278, - 278, 278, 278, nil, nil, 278, nil, nil, nil, nil, - nil, nil, 278, nil, nil, 278, 278, 278, 278, 278, - 278, 278, 278, nil, 278, 278, 278, nil, 278, 278, - 278, 278, 278, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 278, nil, nil, 278, nil, nil, 278, 278, - nil, nil, 278, nil, nil, nil, nil, nil, 278, nil, - nil, nil, nil, nil, nil, nil, nil, 278, nil, nil, - nil, nil, 278, 278, 278, 278, nil, 278, 278, 278, - 278, nil, nil, nil, nil, 278, 278, nil, nil, nil, - 279, 279, 279, 278, 279, 278, 278, 278, 279, 279, - 278, 278, nil, 279, nil, 279, 279, 279, 279, 279, - 279, 279, nil, nil, nil, nil, nil, 279, 279, 279, - 279, 279, 279, 279, nil, nil, 279, nil, nil, nil, - nil, nil, nil, 279, nil, nil, 279, 279, 279, 279, - 279, 279, 279, 279, nil, 279, 279, 279, nil, 279, - 279, 279, 279, 279, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 279, nil, nil, 279, nil, nil, 279, - 279, nil, nil, 279, nil, nil, nil, nil, nil, 279, - nil, nil, nil, nil, nil, nil, nil, nil, 279, nil, - nil, nil, nil, 279, 279, 279, 279, nil, 279, 279, - 279, 279, nil, nil, nil, nil, 279, 279, nil, nil, - nil, 284, 284, 284, 279, 284, 279, 279, 279, 284, - 284, 279, 279, nil, 284, nil, 284, 284, 284, 284, - 284, 284, 284, nil, nil, nil, nil, nil, 284, 284, - 284, 284, 284, 284, 284, nil, nil, 284, nil, nil, - nil, nil, nil, nil, 284, nil, nil, 284, 284, 284, - 284, 284, 284, 284, 284, nil, 284, 284, 284, nil, - 284, 284, 284, 284, 284, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 284, nil, nil, 284, nil, nil, - 284, 284, nil, nil, 284, nil, nil, nil, nil, nil, - 284, nil, nil, nil, nil, nil, nil, nil, nil, 284, - nil, nil, nil, nil, 284, 284, 284, 284, nil, 284, - 284, 284, 284, nil, nil, nil, nil, 284, 284, nil, - nil, nil, 300, 300, 300, 284, 300, 284, 284, 284, - 300, 300, 284, 284, nil, 300, nil, 300, 300, 300, - 300, 300, 300, 300, nil, nil, nil, nil, nil, 300, - 300, 300, 300, 300, 300, 300, nil, nil, 300, nil, - nil, nil, nil, nil, nil, 300, nil, nil, 300, 300, - 300, 300, 300, 300, 300, 300, nil, 300, 300, 300, - nil, 300, 300, 300, 300, 300, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 300, nil, nil, 300, nil, - nil, 300, 300, nil, nil, 300, nil, nil, nil, nil, - nil, 300, nil, nil, nil, nil, nil, nil, nil, nil, - 300, nil, nil, nil, nil, 300, 300, 300, 300, nil, - 300, 300, 300, 300, nil, nil, nil, nil, 300, 300, - nil, nil, nil, 307, 307, 307, 300, 307, 300, 300, - 300, 307, 307, 300, 300, nil, 307, nil, 307, 307, - 307, 307, 307, 307, 307, nil, nil, nil, nil, nil, - 307, 307, 307, 307, 307, 307, 307, nil, nil, 307, - nil, nil, nil, nil, nil, nil, 307, nil, nil, 307, - 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, - 307, nil, 307, 307, 307, 307, 307, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 307, nil, nil, 307, - nil, nil, 307, 307, nil, nil, 307, nil, 307, nil, - 307, nil, 307, nil, nil, 307, nil, nil, nil, nil, - nil, 307, nil, nil, nil, nil, 307, 307, 307, 307, - nil, 307, 307, 307, 307, nil, nil, nil, nil, 307, - 307, nil, nil, nil, 308, 308, 308, 307, 308, 307, - 307, 307, 308, 308, 307, 307, nil, 308, nil, 308, - 308, 308, 308, 308, 308, 308, nil, nil, nil, nil, - nil, 308, 308, 308, 308, 308, 308, 308, nil, nil, - 308, nil, nil, nil, nil, nil, nil, 308, nil, nil, - 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, - 308, 308, nil, 308, 308, 308, 308, 308, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 308, nil, nil, - 308, nil, nil, 308, 308, nil, nil, 308, nil, 308, - nil, 308, nil, 308, nil, nil, 308, nil, nil, nil, - nil, nil, 308, nil, nil, nil, nil, 308, 308, 308, - 308, nil, 308, 308, 308, 308, nil, nil, nil, nil, - 308, 308, nil, nil, nil, 316, 316, 316, 308, 316, - 308, 308, 308, 316, 316, 308, 308, nil, 316, nil, - 316, 316, 316, 316, 316, 316, 316, nil, nil, nil, - nil, nil, 316, 316, 316, 316, 316, 316, 316, nil, - nil, 316, nil, nil, nil, nil, nil, nil, 316, nil, - nil, 316, 316, 316, 316, 316, 316, 316, 316, 316, - 316, 316, 316, nil, 316, 316, 316, 316, 316, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 316, nil, - nil, 316, nil, nil, 316, 316, nil, nil, 316, nil, - 316, nil, 316, nil, 316, nil, nil, 316, nil, nil, - nil, nil, nil, 316, nil, nil, nil, nil, 316, 316, - 316, 316, nil, 316, 316, 316, 316, nil, nil, nil, - nil, 316, 316, 316, nil, nil, 323, 323, 323, 316, - 323, 316, 316, 316, 323, 323, 316, 316, nil, 323, - nil, 323, 323, 323, 323, 323, 323, 323, nil, nil, - nil, nil, nil, 323, 323, 323, 323, 323, 323, 323, - nil, nil, 323, nil, nil, nil, nil, nil, nil, 323, - nil, nil, 323, 323, 323, 323, 323, 323, 323, 323, - nil, 323, 323, 323, nil, 323, 323, 323, 323, 323, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 323, - nil, nil, 323, nil, nil, 323, 323, nil, nil, 323, - nil, nil, nil, nil, nil, 323, nil, nil, nil, nil, - nil, nil, nil, nil, 323, nil, nil, nil, nil, 323, - 323, 323, 323, nil, 323, 323, 323, 323, nil, nil, - nil, nil, 323, 323, nil, nil, nil, 325, 325, 325, - 323, 325, 323, 323, 323, 325, 325, 323, 323, nil, - 325, nil, 325, 325, 325, 325, 325, 325, 325, nil, - nil, nil, nil, nil, 325, 325, 325, 325, 325, 325, - 325, nil, nil, 325, nil, nil, nil, nil, nil, nil, - 325, nil, nil, 325, 325, 325, 325, 325, 325, 325, - 325, nil, 325, 325, 325, nil, 325, 325, 325, 325, - 325, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 325, nil, nil, 325, nil, nil, 325, 325, nil, nil, - 325, nil, nil, nil, nil, nil, 325, nil, nil, nil, - nil, nil, nil, nil, nil, 325, nil, nil, nil, nil, - 325, 325, 325, 325, nil, 325, 325, 325, 325, nil, - nil, nil, nil, 325, 325, nil, nil, nil, 328, 328, - 328, 325, 328, 325, 325, 325, 328, 328, 325, 325, - nil, 328, nil, 328, 328, 328, 328, 328, 328, 328, - nil, nil, nil, nil, nil, 328, 328, 328, 328, 328, - 328, 328, nil, nil, 328, nil, nil, nil, nil, nil, - nil, 328, nil, nil, 328, 328, 328, 328, 328, 328, - 328, 328, nil, 328, 328, 328, nil, 328, 328, 328, - 328, 328, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 328, nil, nil, 328, nil, nil, 328, 328, nil, - nil, 328, nil, nil, nil, nil, nil, 328, nil, nil, - nil, nil, nil, nil, nil, nil, 328, nil, nil, nil, - nil, 328, 328, 328, 328, nil, 328, 328, 328, 328, - nil, nil, nil, nil, 328, 328, nil, nil, nil, 329, - 329, 329, 328, 329, 328, 328, 328, 329, 329, 328, - 328, nil, 329, nil, 329, 329, 329, 329, 329, 329, - 329, nil, nil, nil, nil, nil, 329, 329, 329, 329, - 329, 329, 329, nil, nil, 329, nil, nil, nil, nil, - nil, nil, 329, nil, nil, 329, 329, 329, 329, 329, - 329, 329, 329, nil, 329, 329, 329, nil, 329, 329, - 329, 329, 329, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 329, nil, nil, 329, nil, nil, 329, 329, - nil, nil, 329, nil, nil, nil, nil, nil, 329, nil, - nil, nil, nil, nil, nil, nil, nil, 329, nil, nil, - nil, nil, 329, 329, 329, 329, nil, 329, 329, 329, - 329, nil, nil, nil, nil, 329, 329, nil, nil, nil, - nil, nil, nil, 329, nil, 329, 329, 329, nil, nil, - 329, 329, 334, 334, 334, 334, 334, nil, nil, nil, - 334, 334, nil, nil, nil, 334, nil, 334, 334, 334, - 334, 334, 334, 334, nil, nil, nil, nil, nil, 334, - 334, 334, 334, 334, 334, 334, nil, nil, 334, nil, - nil, nil, nil, nil, 334, 334, nil, 334, 334, 334, - 334, 334, 334, 334, 334, 334, nil, 334, 334, 334, - nil, 334, 334, 334, 334, 334, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 334, nil, nil, 334, nil, - nil, 334, 334, nil, nil, 334, nil, 334, nil, nil, - nil, 334, nil, nil, nil, nil, nil, nil, nil, nil, - 334, nil, nil, nil, nil, 334, 334, 334, 334, nil, - 334, 334, 334, 334, nil, nil, nil, nil, 334, 334, - nil, nil, nil, 370, 370, 370, 334, 370, 334, 334, - 334, 370, 370, 334, 334, nil, 370, nil, 370, 370, - 370, 370, 370, 370, 370, nil, nil, nil, nil, nil, - 370, 370, 370, 370, 370, 370, 370, nil, nil, 370, - nil, nil, nil, nil, nil, nil, 370, nil, nil, 370, - 370, 370, 370, 370, 370, 370, 370, nil, 370, 370, - 370, nil, 370, 370, 370, 370, 370, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 370, nil, nil, 370, - nil, nil, 370, 370, nil, nil, 370, nil, nil, nil, - nil, nil, 370, nil, nil, nil, nil, nil, nil, nil, - nil, 370, nil, nil, nil, nil, 370, 370, 370, 370, - nil, 370, 370, 370, 370, nil, nil, nil, nil, 370, - 370, nil, nil, nil, 387, 387, 387, 370, 387, 370, - 370, 370, 387, 387, 370, 370, nil, 387, nil, 387, - 387, 387, 387, 387, 387, 387, nil, nil, nil, nil, - nil, 387, 387, 387, 387, 387, 387, 387, nil, nil, - 387, nil, nil, nil, nil, nil, nil, 387, nil, nil, - 387, 387, 387, 387, 387, 387, 387, 387, nil, 387, - 387, 387, nil, 387, 387, 387, 387, 387, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 387, nil, nil, - 387, nil, nil, 387, 387, nil, nil, 387, nil, nil, - nil, nil, nil, 387, nil, nil, nil, nil, nil, nil, - nil, nil, 387, nil, nil, nil, nil, 387, 387, 387, - 387, nil, 387, 387, 387, 387, nil, nil, nil, nil, - 387, 387, nil, nil, nil, 408, 408, 408, 387, 408, - 387, 387, 387, 408, 408, 387, 387, nil, 408, nil, - 408, 408, 408, 408, 408, 408, 408, nil, nil, nil, - nil, nil, 408, 408, 408, 408, 408, 408, 408, nil, - nil, 408, nil, nil, nil, nil, nil, nil, 408, nil, - nil, 408, 408, 408, 408, 408, 408, 408, 408, nil, - 408, 408, 408, nil, 408, 408, 408, 408, 408, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 408, nil, - nil, 408, nil, nil, 408, 408, nil, nil, 408, nil, - nil, nil, nil, nil, 408, nil, nil, nil, nil, nil, - nil, nil, nil, 408, nil, nil, nil, nil, 408, 408, - 408, 408, nil, 408, 408, 408, 408, nil, nil, nil, - nil, 408, 408, nil, nil, nil, 437, 437, 437, 408, - 437, 408, 408, 408, 437, 437, 408, 408, nil, 437, - nil, 437, 437, 437, 437, 437, 437, 437, nil, nil, - nil, nil, nil, 437, 437, 437, 437, 437, 437, 437, - nil, nil, 437, nil, nil, nil, nil, nil, nil, 437, - nil, nil, 437, 437, 437, 437, 437, 437, 437, 437, - nil, 437, 437, 437, nil, 437, 437, 437, 437, 437, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 437, - nil, nil, 437, nil, nil, 437, 437, nil, nil, 437, - nil, nil, nil, nil, nil, 437, nil, nil, nil, nil, - nil, nil, nil, nil, 437, nil, nil, nil, nil, 437, - 437, 437, 437, nil, 437, 437, 437, 437, nil, nil, - nil, nil, 437, 437, nil, nil, nil, nil, nil, nil, - 437, nil, 437, 437, 437, 461, nil, 437, 437, nil, - nil, nil, 461, 461, 461, nil, nil, 461, 461, 461, - nil, 461, nil, nil, nil, nil, nil, nil, nil, 461, - 461, 461, 461, nil, nil, nil, nil, nil, nil, nil, - nil, 461, 461, nil, 461, 461, 461, 461, 461, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 461, 461, 461, 461, 461, 461, 461, 461, 461, - 461, 461, 461, 461, 461, nil, nil, 461, 461, 461, - nil, nil, 461, nil, 461, 461, nil, nil, 461, 461, - nil, 461, nil, 461, nil, 461, nil, 461, 461, nil, - 461, 461, 461, 461, 461, nil, 461, 461, 461, 1138, - nil, 1138, 1138, 1138, 1138, 1138, nil, nil, nil, nil, - nil, nil, 461, nil, 1138, 461, 461, 471, 461, nil, - 461, nil, nil, nil, 471, 471, 471, 461, nil, 471, - 471, 471, nil, 471, nil, nil, 1138, nil, nil, nil, - nil, 471, 471, 471, 471, 471, nil, 1138, 1138, nil, - nil, nil, 1138, 471, 471, nil, 471, 471, 471, 471, - 471, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 471, 471, 471, 471, 471, 471, 471, - 471, 471, 471, 471, 471, 471, 471, nil, nil, 471, - 471, 471, nil, nil, 471, nil, nil, 471, nil, nil, - 471, 471, nil, 471, nil, 471, nil, 471, nil, 471, - 471, nil, 471, 471, 471, 471, 471, nil, 471, 471, - 471, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 471, nil, nil, 471, 471, 471, - 471, nil, 471, 472, 471, nil, nil, nil, nil, 471, - 472, 472, 472, nil, nil, 472, 472, 472, nil, 472, - nil, nil, nil, nil, nil, nil, nil, 472, 472, 472, - 472, 472, nil, nil, nil, nil, nil, nil, nil, 472, - 472, nil, 472, 472, 472, 472, 472, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 472, - 472, 472, 472, 472, 472, 472, 472, 472, 472, 472, - 472, 472, 472, nil, nil, 472, 472, 472, nil, nil, - 472, nil, nil, 472, nil, nil, 472, 472, nil, 472, - nil, 472, nil, 472, nil, 472, 472, nil, 472, 472, - 472, 472, 472, nil, 472, 472, 472, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 472, nil, nil, 472, 472, 472, 472, nil, 472, nil, - 472, nil, 473, 473, 473, 472, 473, nil, nil, nil, - 473, 473, nil, nil, nil, 473, nil, 473, 473, 473, - 473, 473, 473, 473, nil, nil, nil, nil, nil, 473, - 473, 473, 473, 473, 473, 473, nil, nil, 473, nil, - nil, nil, nil, nil, nil, 473, nil, nil, 473, 473, - 473, 473, 473, 473, 473, 473, nil, 473, 473, 473, - nil, 473, 473, 473, 473, 473, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 473, nil, nil, 473, nil, - nil, 473, 473, nil, nil, 473, nil, nil, nil, nil, - nil, 473, nil, nil, nil, nil, nil, nil, nil, nil, - 473, nil, nil, nil, nil, 473, 473, 473, 473, nil, - 473, 473, 473, 473, nil, nil, nil, nil, 473, 473, - nil, nil, nil, 500, 500, 500, 473, 500, 473, 473, - 473, 500, 500, 473, 473, nil, 500, nil, 500, 500, - 500, 500, 500, 500, 500, nil, nil, nil, nil, nil, - 500, 500, 500, 500, 500, 500, 500, nil, nil, 500, - nil, nil, nil, nil, nil, nil, 500, nil, nil, 500, - 500, 500, 500, 500, 500, 500, 500, nil, 500, 500, - 500, nil, 500, 500, 500, 500, 500, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 500, nil, nil, 500, - nil, nil, 500, 500, nil, nil, 500, nil, nil, nil, - nil, nil, 500, nil, nil, nil, nil, nil, nil, nil, - nil, 500, nil, nil, nil, nil, 500, 500, 500, 500, - nil, 500, 500, 500, 500, nil, nil, nil, nil, 500, - 500, nil, nil, nil, 513, 513, 513, 500, 513, 500, - 500, 500, 513, 513, 500, 500, nil, 513, nil, 513, - 513, 513, 513, 513, 513, 513, nil, nil, nil, nil, - nil, 513, 513, 513, 513, 513, 513, 513, nil, nil, - 513, nil, nil, nil, nil, nil, nil, 513, nil, nil, - 513, 513, 513, 513, 513, 513, 513, 513, nil, 513, - 513, 513, nil, 513, 513, 513, 513, 513, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 513, nil, nil, - 513, nil, nil, 513, 513, nil, nil, 513, nil, nil, - nil, nil, nil, 513, nil, nil, nil, nil, nil, nil, - nil, nil, 513, nil, nil, nil, nil, 513, 513, 513, - 513, nil, 513, 513, 513, 513, nil, nil, nil, nil, - 513, 513, nil, nil, nil, 523, 523, 523, 513, 523, - 513, 513, 513, 523, 523, 513, 513, nil, 523, nil, - 523, 523, 523, 523, 523, 523, 523, nil, nil, nil, - nil, nil, 523, 523, 523, 523, 523, 523, 523, nil, - nil, 523, nil, nil, nil, nil, nil, nil, 523, nil, - nil, 523, 523, 523, 523, 523, 523, 523, 523, 523, - 523, 523, 523, nil, 523, 523, 523, 523, 523, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 523, nil, - nil, 523, nil, nil, 523, 523, nil, nil, 523, nil, - 523, nil, 523, nil, 523, nil, nil, 523, nil, nil, - nil, nil, nil, 523, nil, nil, nil, nil, 523, 523, - 523, 523, nil, 523, 523, 523, 523, nil, nil, nil, - nil, 523, 523, nil, nil, nil, 525, 525, 525, 523, - 525, 523, 523, 523, 525, 525, 523, 523, nil, 525, - nil, 525, 525, 525, 525, 525, 525, 525, nil, nil, - nil, nil, nil, 525, 525, 525, 525, 525, 525, 525, - nil, nil, 525, nil, nil, nil, nil, nil, nil, 525, - nil, nil, 525, 525, 525, 525, 525, 525, 525, 525, - nil, 525, 525, 525, nil, 525, 525, 525, 525, 525, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 525, - nil, nil, 525, nil, nil, 525, 525, nil, nil, 525, - nil, nil, nil, nil, nil, 525, nil, nil, nil, nil, - nil, nil, nil, nil, 525, nil, nil, nil, nil, 525, - 525, 525, 525, nil, 525, 525, 525, 525, nil, nil, - nil, nil, 525, 525, nil, nil, nil, 526, 526, 526, - 525, 526, 525, 525, 525, 526, 526, 525, 525, nil, - 526, nil, 526, 526, 526, 526, 526, 526, 526, nil, - nil, nil, nil, nil, 526, 526, 526, 526, 526, 526, - 526, nil, nil, 526, nil, nil, nil, nil, nil, nil, - 526, nil, nil, 526, 526, 526, 526, 526, 526, 526, - 526, nil, 526, 526, 526, nil, 526, 526, 526, 526, - 526, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 526, nil, nil, 526, nil, nil, 526, 526, nil, nil, - 526, nil, nil, nil, nil, nil, 526, nil, nil, nil, - nil, nil, nil, nil, nil, 526, nil, nil, nil, nil, - 526, 526, 526, 526, nil, 526, 526, 526, 526, nil, - nil, nil, nil, 526, 526, nil, nil, nil, 527, 527, - 527, 526, 527, 526, 526, 526, 527, 527, 526, 526, - nil, 527, nil, 527, 527, 527, 527, 527, 527, 527, - nil, nil, nil, nil, nil, 527, 527, 527, 527, 527, - 527, 527, nil, nil, 527, nil, nil, nil, nil, nil, - nil, 527, nil, nil, 527, 527, 527, 527, 527, 527, - 527, 527, nil, 527, 527, 527, nil, 527, 527, 527, - 527, 527, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 527, nil, nil, 527, nil, nil, 527, 527, nil, - nil, 527, nil, nil, nil, nil, nil, 527, nil, nil, - nil, nil, nil, nil, nil, nil, 527, nil, nil, nil, - nil, 527, 527, 527, 527, nil, 527, 527, 527, 527, - nil, nil, nil, nil, 527, 527, nil, nil, nil, nil, - nil, nil, 527, nil, 527, 527, 527, 558, nil, 527, - 527, nil, nil, nil, 558, 558, 558, nil, nil, 558, - 558, 558, 410, 558, 410, 410, 410, 410, 410, nil, - nil, 558, 558, 558, nil, nil, nil, 410, nil, nil, - nil, nil, nil, 558, 558, nil, 558, 558, 558, 558, - 558, nil, 647, nil, 647, 647, 647, 647, 647, 410, - 410, nil, nil, nil, nil, nil, nil, 647, 410, 410, - 410, 410, nil, nil, nil, 410, nil, 1133, nil, 1133, - 1133, 1133, 1133, 1133, 558, nil, nil, nil, nil, 647, - nil, 558, 1133, nil, nil, nil, 558, 558, 647, 647, - 647, 647, nil, nil, nil, 647, nil, nil, nil, nil, - nil, nil, nil, nil, 1133, 410, nil, nil, nil, 558, - 558, nil, nil, 1133, 1133, 1133, 1133, nil, nil, nil, - 1133, nil, nil, nil, 558, nil, nil, 558, nil, 563, - 563, 563, 558, 563, nil, 647, nil, 563, 563, 558, - nil, nil, 563, nil, 563, 563, 563, 563, 563, 563, - 563, nil, nil, nil, nil, nil, 563, 563, 563, 563, - 563, 563, 563, nil, nil, 563, nil, nil, nil, nil, - nil, nil, 563, nil, nil, 563, 563, 563, 563, 563, - 563, 563, 563, nil, 563, 563, 563, nil, 563, 563, - 563, 563, 563, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 563, nil, nil, 563, nil, nil, 563, 563, - nil, nil, 563, nil, nil, nil, nil, nil, 563, nil, - nil, nil, nil, nil, nil, nil, nil, 563, nil, nil, - nil, nil, 563, 563, 563, 563, nil, 563, 563, 563, - 563, nil, nil, nil, nil, 563, 563, nil, nil, nil, - 573, 573, 573, 563, 573, 563, 563, 563, 573, 573, - 563, 563, nil, 573, nil, 573, 573, 573, 573, 573, - 573, 573, nil, nil, nil, nil, nil, 573, 573, 573, - 573, 573, 573, 573, nil, nil, 573, nil, nil, nil, - nil, nil, nil, 573, nil, nil, 573, 573, 573, 573, - 573, 573, 573, 573, 573, 573, 573, 573, nil, 573, - 573, 573, 573, 573, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 573, nil, nil, 573, nil, nil, 573, - 573, nil, nil, 573, nil, 573, nil, 573, nil, 573, - nil, nil, 573, nil, nil, nil, nil, nil, 573, nil, - nil, nil, nil, 573, 573, 573, 573, nil, 573, 573, - 573, 573, nil, nil, nil, nil, 573, 573, nil, nil, - nil, 575, 575, 575, 573, 575, 573, 573, 573, 575, - 575, 573, 573, nil, 575, nil, 575, 575, 575, 575, - 575, 575, 575, nil, nil, nil, nil, nil, 575, 575, - 575, 575, 575, 575, 575, nil, nil, 575, nil, nil, - nil, nil, nil, nil, 575, nil, nil, 575, 575, 575, - 575, 575, 575, 575, 575, 575, 575, 575, 575, nil, - 575, 575, 575, 575, 575, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 575, nil, nil, 575, nil, nil, - 575, 575, nil, nil, 575, nil, nil, nil, 575, nil, - 575, nil, nil, 575, nil, nil, nil, nil, nil, 575, - nil, nil, nil, nil, 575, 575, 575, 575, nil, 575, - 575, 575, 575, nil, nil, nil, nil, 575, 575, nil, - nil, nil, 577, 577, 577, 575, 577, 575, 575, 575, - 577, 577, 575, 575, nil, 577, nil, 577, 577, 577, - 577, 577, 577, 577, nil, nil, nil, nil, nil, 577, - 577, 577, 577, 577, 577, 577, nil, nil, 577, nil, - nil, nil, nil, nil, nil, 577, nil, nil, 577, 577, - 577, 577, 577, 577, 577, 577, nil, 577, 577, 577, - nil, 577, 577, 577, 577, 577, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 577, nil, nil, 577, nil, - nil, 577, 577, nil, nil, 577, nil, nil, nil, nil, - nil, 577, nil, nil, nil, nil, nil, nil, nil, nil, - 577, nil, nil, nil, nil, 577, 577, 577, 577, nil, - 577, 577, 577, 577, nil, nil, nil, nil, 577, 577, - nil, nil, nil, nil, nil, nil, 577, nil, 577, 577, - 577, nil, nil, 577, 577, 583, 583, 583, 583, 583, - nil, nil, nil, 583, 583, nil, nil, nil, 583, nil, - 583, 583, 583, 583, 583, 583, 583, nil, nil, nil, - nil, nil, 583, 583, 583, 583, 583, 583, 583, nil, - nil, 583, nil, nil, nil, nil, nil, 583, 583, 583, - 583, 583, 583, 583, 583, 583, 583, 583, 583, nil, - 583, 583, 583, nil, 583, 583, 583, 583, 583, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 583, nil, - nil, 583, nil, nil, 583, 583, nil, nil, 583, nil, - 583, nil, nil, nil, 583, nil, nil, nil, nil, nil, - nil, nil, nil, 583, nil, nil, nil, nil, 583, 583, - 583, 583, nil, 583, 583, 583, 583, nil, nil, nil, - nil, 583, 583, nil, nil, nil, nil, nil, 583, 583, - nil, 583, 583, 583, nil, nil, 583, 583, 593, 593, - 593, nil, 593, nil, nil, nil, 593, 593, nil, nil, - nil, 593, nil, 593, 593, 593, 593, 593, 593, 593, - nil, nil, nil, nil, nil, 593, 593, 593, 593, 593, - 593, 593, nil, nil, 593, nil, nil, nil, nil, nil, - nil, 593, nil, nil, 593, 593, 593, 593, 593, 593, - 593, 593, 593, 593, 593, 593, nil, 593, 593, 593, - 593, 593, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 593, nil, nil, 593, nil, nil, 593, 593, nil, - nil, 593, nil, 593, nil, 593, nil, 593, nil, nil, - 593, nil, nil, nil, nil, nil, 593, nil, nil, nil, - nil, 593, 593, 593, 593, nil, 593, 593, 593, 593, - nil, nil, nil, nil, 593, 593, nil, nil, nil, 603, - 603, 603, 593, 603, 593, 593, 593, 603, 603, 593, - 593, nil, 603, nil, 603, 603, 603, 603, 603, 603, - 603, nil, nil, nil, nil, nil, 603, 603, 603, 603, - 603, 603, 603, nil, nil, 603, nil, nil, nil, nil, - nil, nil, 603, nil, nil, 603, 603, 603, 603, 603, - 603, 603, 603, nil, 603, 603, 603, nil, 603, 603, - 603, 603, 603, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 603, nil, nil, 603, nil, nil, 603, 603, - nil, nil, 603, nil, nil, nil, nil, nil, 603, nil, - nil, nil, nil, nil, nil, nil, nil, 603, nil, nil, - nil, nil, 603, 603, 603, 603, nil, 603, 603, 603, - 603, nil, nil, nil, nil, 603, 603, nil, nil, nil, - 606, 606, 606, 603, 606, 603, 603, 603, 606, 606, - 603, 603, nil, 606, nil, 606, 606, 606, 606, 606, - 606, 606, nil, nil, nil, nil, nil, 606, 606, 606, - 606, 606, 606, 606, nil, nil, 606, nil, nil, nil, - nil, nil, nil, 606, nil, nil, 606, 606, 606, 606, - 606, 606, 606, 606, nil, 606, 606, 606, nil, 606, - 606, 606, 606, 606, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 606, nil, nil, 606, nil, nil, 606, - 606, nil, nil, 606, nil, nil, nil, nil, nil, 606, - nil, nil, nil, nil, nil, nil, nil, nil, 606, nil, - nil, nil, nil, 606, 606, 606, 606, nil, 606, 606, - 606, 606, nil, nil, nil, nil, 606, 606, nil, nil, - nil, 608, 608, 608, 606, 608, 606, 606, 606, 608, - 608, 606, 606, nil, 608, nil, 608, 608, 608, 608, - 608, 608, 608, nil, nil, nil, nil, nil, 608, 608, - 608, 608, 608, 608, 608, nil, nil, 608, nil, nil, - nil, nil, nil, nil, 608, nil, nil, 608, 608, 608, - 608, 608, 608, 608, 608, nil, 608, 608, 608, nil, - 608, 608, 608, 608, 608, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 608, nil, nil, 608, nil, nil, - 608, 608, nil, nil, 608, nil, nil, nil, nil, nil, - 608, nil, nil, nil, nil, nil, nil, nil, nil, 608, - nil, nil, nil, nil, 608, 608, 608, 608, nil, 608, - 608, 608, 608, nil, nil, nil, nil, 608, 608, nil, - nil, nil, 614, 614, 614, 608, 614, 608, 608, 608, - 614, 614, 608, 608, nil, 614, nil, 614, 614, 614, - 614, 614, 614, 614, nil, nil, nil, nil, nil, 614, - 614, 614, 614, 614, 614, 614, nil, nil, 614, nil, - nil, nil, nil, nil, nil, 614, nil, nil, 614, 614, - 614, 614, 614, 614, 614, 614, 614, 614, 614, 614, - nil, 614, 614, 614, 614, 614, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 614, nil, nil, 614, nil, - nil, 614, 614, nil, nil, 614, nil, 614, nil, nil, - nil, 614, nil, nil, 614, nil, nil, nil, nil, nil, - 614, nil, nil, nil, nil, 614, 614, 614, 614, nil, - 614, 614, 614, 614, nil, nil, nil, nil, 614, 614, - nil, nil, nil, 617, 617, 617, 614, 617, 614, 614, - 614, 617, 617, 614, 614, nil, 617, nil, 617, 617, - 617, 617, 617, 617, 617, nil, nil, nil, nil, nil, - 617, 617, 617, 617, 617, 617, 617, nil, nil, 617, - nil, nil, nil, nil, nil, nil, 617, nil, nil, 617, - 617, 617, 617, 617, 617, 617, 617, 617, 617, 617, - 617, nil, 617, 617, 617, 617, 617, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 617, nil, nil, 617, - nil, nil, 617, 617, nil, nil, 617, nil, nil, nil, - nil, nil, 617, nil, nil, 617, nil, nil, nil, nil, - nil, 617, nil, nil, nil, nil, 617, 617, 617, 617, - nil, 617, 617, 617, 617, nil, nil, nil, nil, 617, - 617, nil, nil, nil, 630, 630, 630, 617, 630, 617, - 617, 617, 630, 630, 617, 617, nil, 630, nil, 630, - 630, 630, 630, 630, 630, 630, nil, nil, nil, nil, - nil, 630, 630, 630, 630, 630, 630, 630, nil, nil, - 630, nil, nil, nil, nil, nil, nil, 630, nil, nil, - 630, 630, 630, 630, 630, 630, 630, 630, nil, 630, - 630, 630, nil, 630, 630, 630, 630, 630, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 630, nil, nil, - 630, nil, nil, 630, 630, nil, nil, 630, nil, 630, - nil, nil, nil, 630, nil, nil, nil, nil, nil, nil, - nil, nil, 630, nil, nil, nil, nil, 630, 630, 630, - 630, nil, 630, 630, 630, 630, nil, nil, nil, nil, - 630, 630, nil, nil, nil, 631, 631, 631, 630, 631, - 630, 630, 630, 631, 631, 630, 630, nil, 631, nil, - 631, 631, 631, 631, 631, 631, 631, nil, nil, nil, - nil, nil, 631, 631, 631, 631, 631, 631, 631, nil, - nil, 631, nil, nil, nil, nil, nil, nil, 631, nil, - nil, 631, 631, 631, 631, 631, 631, 631, 631, 631, - 631, 631, 631, nil, 631, 631, 631, 631, 631, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 631, nil, - nil, 631, nil, nil, 631, 631, nil, nil, 631, nil, - 631, nil, 631, nil, 631, nil, nil, 631, nil, nil, - nil, nil, nil, 631, nil, nil, nil, nil, 631, 631, - 631, 631, nil, 631, 631, 631, 631, nil, nil, nil, - nil, 631, 631, nil, nil, nil, 641, 641, 641, 631, - 641, 631, 631, 631, 641, 641, 631, 631, nil, 641, - nil, 641, 641, 641, 641, 641, 641, 641, nil, nil, - nil, nil, nil, 641, 641, 641, 641, 641, 641, 641, - nil, nil, 641, nil, nil, nil, nil, nil, nil, 641, - nil, nil, 641, 641, 641, 641, 641, 641, 641, 641, - 641, 641, 641, 641, nil, 641, 641, 641, 641, 641, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 641, - nil, nil, 641, nil, nil, 641, 641, nil, nil, 641, - nil, 641, nil, 641, nil, 641, nil, nil, 641, nil, - nil, nil, nil, nil, 641, nil, nil, nil, nil, 641, - 641, 641, 641, nil, 641, 641, 641, 641, nil, nil, - nil, nil, 641, 641, nil, nil, nil, nil, nil, nil, - 641, nil, 641, 641, 641, nil, nil, 641, 641, 672, - 672, 672, 672, 672, nil, nil, nil, 672, 672, nil, - nil, nil, 672, nil, 672, 672, 672, 672, 672, 672, - 672, nil, nil, nil, nil, nil, 672, 672, 672, 672, - 672, 672, 672, nil, nil, 672, nil, nil, nil, nil, - nil, 672, 672, nil, 672, 672, 672, 672, 672, 672, - 672, 672, 672, nil, 672, 672, 672, nil, 672, 672, - 672, 672, 672, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 672, nil, nil, 672, nil, nil, 672, 672, - nil, nil, 672, nil, 672, nil, nil, nil, 672, nil, - nil, nil, nil, nil, nil, nil, nil, 672, nil, nil, - nil, nil, 672, 672, 672, 672, nil, 672, 672, 672, - 672, nil, nil, nil, nil, 672, 672, nil, nil, nil, - 674, 674, 674, 672, 674, 672, 672, 672, 674, 674, - 672, 672, nil, 674, nil, 674, 674, 674, 674, 674, - 674, 674, nil, nil, nil, nil, nil, 674, 674, 674, - 674, 674, 674, 674, nil, nil, 674, nil, nil, nil, - nil, nil, nil, 674, nil, nil, 674, 674, 674, 674, - 674, 674, 674, 674, nil, 674, 674, 674, nil, 674, - 674, 674, 674, 674, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 674, nil, nil, 674, nil, nil, 674, - 674, nil, nil, 674, nil, 674, nil, nil, nil, 674, - nil, nil, nil, nil, nil, nil, nil, nil, 674, nil, - nil, nil, nil, 674, 674, 674, 674, nil, 674, 674, - 674, 674, nil, nil, nil, nil, 674, 674, nil, nil, - nil, 675, 675, 675, 674, 675, 674, 674, 674, 675, - 675, 674, 674, nil, 675, nil, 675, 675, 675, 675, - 675, 675, 675, nil, nil, nil, nil, nil, 675, 675, - 675, 675, 675, 675, 675, nil, nil, 675, nil, nil, - nil, nil, nil, nil, 675, nil, nil, 675, 675, 675, - 675, 675, 675, 675, 675, nil, 675, 675, 675, nil, - 675, 675, 675, 675, 675, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 675, nil, nil, 675, nil, nil, - 675, 675, nil, nil, 675, nil, nil, nil, nil, nil, - 675, nil, nil, nil, nil, nil, nil, nil, nil, 675, - nil, nil, nil, nil, 675, 675, 675, 675, nil, 675, - 675, 675, 675, nil, nil, nil, nil, 675, 675, nil, - nil, nil, 676, 676, 676, 675, 676, 675, 675, 675, - 676, 676, 675, 675, nil, 676, nil, 676, 676, 676, - 676, 676, 676, 676, nil, nil, nil, nil, nil, 676, - 676, 676, 676, 676, 676, 676, nil, nil, 676, nil, - nil, nil, nil, nil, nil, 676, nil, nil, 676, 676, - 676, 676, 676, 676, 676, 676, 676, 676, 676, 676, - nil, 676, 676, 676, 676, 676, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 676, nil, nil, 676, nil, - nil, 676, 676, nil, nil, 676, nil, 676, nil, 676, - nil, 676, nil, nil, 676, nil, nil, nil, nil, nil, - 676, nil, nil, nil, nil, 676, 676, 676, 676, nil, - 676, 676, 676, 676, nil, nil, nil, nil, 676, 676, - nil, nil, nil, nil, nil, nil, 676, nil, 676, 676, - 676, nil, nil, 676, 676, 679, 679, 679, 679, 679, - nil, nil, nil, 679, 679, nil, nil, nil, 679, nil, - 679, 679, 679, 679, 679, 679, 679, nil, nil, nil, - nil, nil, 679, 679, 679, 679, 679, 679, 679, nil, - nil, 679, nil, nil, nil, nil, nil, 679, 679, nil, - 679, 679, 679, 679, 679, 679, 679, 679, 679, nil, - 679, 679, 679, nil, 679, 679, 679, 679, 679, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 679, nil, - nil, 679, nil, nil, 679, 679, nil, nil, 679, nil, - 679, nil, nil, nil, 679, nil, nil, nil, nil, nil, - nil, nil, nil, 679, nil, nil, nil, nil, 679, 679, - 679, 679, nil, 679, 679, 679, 679, nil, nil, nil, - nil, 679, 679, nil, nil, nil, 680, 680, 680, 679, - 680, 679, 679, 679, 680, 680, 679, 679, nil, 680, - nil, 680, 680, 680, 680, 680, 680, 680, nil, nil, - nil, nil, nil, 680, 680, 680, 680, 680, 680, 680, - nil, nil, 680, nil, nil, nil, nil, nil, nil, 680, - nil, nil, 680, 680, 680, 680, 680, 680, 680, 680, - nil, 680, 680, 680, nil, 680, 680, 680, 680, 680, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 680, - nil, nil, 680, nil, nil, 680, 680, nil, nil, 680, - nil, nil, nil, nil, nil, 680, nil, nil, nil, nil, - nil, nil, nil, nil, 680, nil, nil, nil, nil, 680, - 680, 680, 680, nil, 680, 680, 680, 680, nil, nil, - nil, nil, 680, 680, nil, nil, nil, 683, 683, 683, - 680, 683, 680, 680, 680, 683, 683, 680, 680, nil, - 683, nil, 683, 683, 683, 683, 683, 683, 683, nil, - nil, nil, nil, nil, 683, 683, 683, 683, 683, 683, - 683, nil, nil, 683, nil, nil, nil, nil, nil, nil, - 683, nil, nil, 683, 683, 683, 683, 683, 683, 683, - 683, 683, 683, 683, 683, nil, 683, 683, 683, 683, - 683, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 683, nil, nil, 683, nil, nil, 683, 683, nil, nil, - 683, nil, 683, nil, 683, nil, 683, nil, nil, 683, - nil, nil, nil, nil, nil, 683, nil, nil, nil, nil, - 683, 683, 683, 683, nil, 683, 683, 683, 683, nil, - nil, nil, nil, 683, 683, nil, nil, nil, 684, 684, - 684, 683, 684, 683, 683, 683, 684, 684, 683, 683, - nil, 684, nil, 684, 684, 684, 684, 684, 684, 684, - nil, nil, nil, nil, nil, 684, 684, 684, 684, 684, - 684, 684, nil, nil, 684, nil, nil, nil, nil, nil, - nil, 684, nil, nil, 684, 684, 684, 684, 684, 684, - 684, 684, 684, 684, 684, 684, nil, 684, 684, 684, - 684, 684, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 684, nil, nil, 684, nil, nil, 684, 684, nil, - nil, 684, nil, nil, nil, 684, nil, 684, nil, nil, - 684, nil, nil, nil, nil, nil, 684, nil, nil, nil, - nil, 684, 684, 684, 684, nil, 684, 684, 684, 684, - nil, nil, nil, nil, 684, 684, nil, nil, nil, 685, - 685, 685, 684, 685, 684, 684, 684, 685, 685, 684, - 684, nil, 685, nil, 685, 685, 685, 685, 685, 685, - 685, nil, nil, nil, nil, nil, 685, 685, 685, 685, - 685, 685, 685, nil, nil, 685, nil, nil, nil, nil, - nil, nil, 685, nil, nil, 685, 685, 685, 685, 685, - 685, 685, 685, nil, 685, 685, 685, nil, 685, 685, - 685, 685, 685, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 685, nil, nil, 685, nil, nil, 685, 685, - nil, nil, 685, nil, nil, nil, nil, nil, 685, nil, - nil, nil, nil, nil, nil, nil, nil, 685, nil, nil, - nil, nil, 685, 685, 685, 685, nil, 685, 685, 685, - 685, nil, nil, nil, nil, 685, 685, nil, nil, nil, - 686, 686, 686, 685, 686, 685, 685, 685, 686, 686, - 685, 685, nil, 686, nil, 686, 686, 686, 686, 686, - 686, 686, nil, nil, nil, nil, nil, 686, 686, 686, - 686, 686, 686, 686, nil, nil, 686, nil, nil, nil, - nil, nil, nil, 686, nil, nil, 686, 686, 686, 686, - 686, 686, 686, 686, nil, 686, 686, 686, nil, 686, - 686, 686, 686, 686, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 686, nil, nil, 686, nil, nil, 686, - 686, nil, nil, 686, nil, nil, nil, nil, nil, 686, - nil, nil, nil, nil, nil, nil, nil, nil, 686, nil, - nil, nil, nil, 686, 686, 686, 686, nil, 686, 686, - 686, 686, nil, nil, nil, nil, 686, 686, nil, nil, - nil, 690, 690, 690, 686, 690, 686, 686, 686, 690, - 690, 686, 686, nil, 690, nil, 690, 690, 690, 690, - 690, 690, 690, nil, nil, nil, nil, nil, 690, 690, - 690, 690, 690, 690, 690, nil, nil, 690, nil, nil, - nil, nil, nil, nil, 690, nil, nil, 690, 690, 690, - 690, 690, 690, 690, 690, nil, 690, 690, 690, nil, - 690, 690, 690, 690, 690, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 690, nil, nil, 690, nil, nil, - 690, 690, nil, nil, 690, nil, nil, nil, nil, nil, - 690, nil, nil, nil, nil, nil, nil, nil, nil, 690, - nil, nil, nil, nil, 690, 690, 690, 690, nil, 690, - 690, 690, 690, nil, nil, nil, nil, 690, 690, nil, - nil, nil, 691, 691, 691, 690, 691, 690, 690, 690, - 691, 691, 690, 690, nil, 691, nil, 691, 691, 691, - 691, 691, 691, 691, nil, nil, nil, nil, nil, 691, - 691, 691, 691, 691, 691, 691, nil, nil, 691, nil, - nil, nil, nil, nil, nil, 691, nil, nil, 691, 691, - 691, 691, 691, 691, 691, 691, nil, 691, 691, 691, - nil, 691, 691, 691, 691, 691, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 691, nil, nil, 691, nil, - nil, 691, 691, nil, nil, 691, nil, nil, nil, nil, - nil, 691, nil, nil, nil, nil, nil, nil, nil, nil, - 691, nil, nil, nil, nil, 691, 691, 691, 691, nil, - 691, 691, 691, 691, nil, nil, nil, nil, 691, 691, - nil, nil, nil, 697, 697, 697, 691, 697, 691, 691, - 691, 697, 697, 691, 691, nil, 697, nil, 697, 697, - 697, 697, 697, 697, 697, nil, nil, nil, nil, nil, - 697, 697, 697, 697, 697, 697, 697, nil, nil, 697, - nil, nil, nil, nil, nil, nil, 697, nil, nil, 697, - 697, 697, 697, 697, 697, 697, 697, nil, 697, 697, - 697, nil, 697, 697, 697, 697, 697, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 697, nil, nil, 697, - nil, nil, 697, 697, nil, nil, 697, nil, 697, nil, - nil, nil, 697, nil, nil, nil, nil, nil, nil, nil, - nil, 697, nil, nil, nil, nil, 697, 697, 697, 697, - nil, 697, 697, 697, 697, nil, nil, nil, nil, 697, - 697, nil, nil, nil, 713, 713, 713, 697, 713, 697, - 697, 697, 713, 713, 697, 697, nil, 713, nil, 713, - 713, 713, 713, 713, 713, 713, nil, nil, nil, nil, - nil, 713, 713, 713, 713, 713, 713, 713, nil, nil, - 713, nil, nil, nil, nil, nil, nil, 713, nil, nil, - 713, 713, 713, 713, 713, 713, 713, 713, nil, 713, - 713, 713, nil, 713, 713, 713, 713, 713, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 713, nil, nil, - 713, nil, nil, 713, 713, nil, nil, 713, nil, nil, - nil, nil, nil, 713, nil, nil, nil, nil, nil, nil, - nil, nil, 713, nil, nil, nil, nil, 713, 713, 713, - 713, nil, 713, 713, 713, 713, nil, nil, nil, nil, - 713, 713, nil, nil, nil, 735, 735, 735, 713, 735, - 713, 713, 713, 735, 735, 713, 713, nil, 735, nil, - 735, 735, 735, 735, 735, 735, 735, nil, nil, nil, - nil, nil, 735, 735, 735, 735, 735, 735, 735, nil, - nil, 735, nil, nil, nil, nil, nil, nil, 735, nil, - nil, 735, 735, 735, 735, 735, 735, 735, 735, nil, - 735, 735, 735, nil, 735, 735, 735, 735, 735, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 735, nil, - nil, 735, nil, nil, 735, 735, nil, nil, 735, nil, - nil, nil, nil, nil, 735, nil, nil, nil, nil, nil, - nil, nil, nil, 735, nil, nil, nil, nil, 735, 735, - 735, 735, nil, 735, 735, 735, 735, nil, nil, nil, - nil, 735, 735, nil, nil, nil, 736, 736, 736, 735, - 736, 735, 735, 735, 736, 736, 735, 735, nil, 736, - nil, 736, 736, 736, 736, 736, 736, 736, nil, nil, - nil, nil, nil, 736, 736, 736, 736, 736, 736, 736, - nil, nil, 736, nil, nil, nil, nil, nil, nil, 736, - nil, nil, 736, 736, 736, 736, 736, 736, 736, 736, - nil, 736, 736, 736, nil, 736, 736, 736, 736, 736, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 736, - nil, nil, 736, nil, nil, 736, 736, nil, nil, 736, - nil, nil, nil, nil, nil, 736, nil, nil, nil, nil, - nil, nil, nil, nil, 736, nil, nil, nil, nil, 736, - 736, 736, 736, nil, 736, 736, 736, 736, nil, nil, - nil, nil, 736, 736, nil, nil, nil, 791, 791, 791, - 736, 791, 736, 736, 736, 791, 791, 736, 736, nil, - 791, nil, 791, 791, 791, 791, 791, 791, 791, nil, - nil, nil, nil, nil, 791, 791, 791, 791, 791, 791, - 791, nil, nil, 791, nil, nil, nil, nil, nil, nil, - 791, nil, nil, 791, 791, 791, 791, 791, 791, 791, - 791, 791, 791, 791, 791, nil, 791, 791, 791, 791, - 791, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 791, nil, nil, 791, nil, nil, 791, 791, nil, nil, - 791, nil, 791, nil, 791, nil, 791, nil, nil, 791, - nil, nil, nil, nil, nil, 791, nil, nil, nil, nil, - 791, 791, 791, 791, nil, 791, 791, 791, 791, nil, - nil, nil, nil, 791, 791, nil, nil, nil, 800, 800, - 800, 791, 800, 791, 791, 791, 800, 800, 791, 791, - nil, 800, nil, 800, 800, 800, 800, 800, 800, 800, - nil, nil, nil, nil, nil, 800, 800, 800, 800, 800, - 800, 800, nil, nil, 800, nil, nil, nil, nil, nil, - nil, 800, nil, nil, 800, 800, 800, 800, 800, 800, - 800, 800, nil, 800, 800, 800, nil, 800, 800, 800, - 800, 800, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 800, nil, nil, 800, nil, nil, 800, 800, nil, - nil, 800, nil, nil, nil, nil, nil, 800, nil, nil, - nil, nil, nil, nil, nil, nil, 800, nil, nil, nil, - nil, 800, 800, 800, 800, nil, 800, 800, 800, 800, - nil, nil, nil, nil, 800, 800, nil, nil, nil, 803, - 803, 803, 800, 803, 800, 800, 800, 803, 803, 800, - 800, nil, 803, nil, 803, 803, 803, 803, 803, 803, - 803, nil, nil, nil, nil, nil, 803, 803, 803, 803, - 803, 803, 803, nil, nil, 803, nil, nil, nil, nil, - nil, nil, 803, nil, nil, 803, 803, 803, 803, 803, - 803, 803, 803, nil, 803, 803, 803, nil, 803, 803, - 803, 803, 803, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 803, nil, nil, 803, nil, nil, 803, 803, - nil, nil, 803, nil, nil, nil, nil, nil, 803, nil, - nil, nil, nil, nil, nil, nil, nil, 803, nil, nil, - nil, nil, 803, 803, 803, 803, nil, 803, 803, 803, - 803, nil, nil, nil, nil, 803, 803, nil, nil, nil, - 821, 821, 821, 803, 821, 803, 803, 803, 821, 821, - 803, 803, nil, 821, nil, 821, 821, 821, 821, 821, - 821, 821, nil, nil, nil, nil, nil, 821, 821, 821, - 821, 821, 821, 821, nil, nil, 821, nil, nil, nil, - nil, nil, nil, 821, nil, nil, 821, 821, 821, 821, - 821, 821, 821, 821, nil, 821, 821, 821, nil, 821, - 821, 821, 821, 821, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 821, nil, nil, 821, nil, nil, 821, - 821, nil, nil, 821, nil, nil, nil, nil, nil, 821, - nil, nil, nil, nil, nil, nil, nil, nil, 821, nil, - nil, nil, nil, 821, 821, 821, 821, nil, 821, 821, - 821, 821, nil, nil, nil, nil, 821, 821, nil, nil, - nil, 850, 850, 850, 821, 850, 821, 821, 821, 850, - 850, 821, 821, nil, 850, nil, 850, 850, 850, 850, - 850, 850, 850, nil, nil, nil, nil, nil, 850, 850, - 850, 850, 850, 850, 850, nil, nil, 850, nil, nil, - nil, nil, nil, nil, 850, nil, nil, 850, 850, 850, - 850, 850, 850, 850, 850, nil, 850, 850, 850, nil, - 850, 850, 850, 850, 850, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 850, nil, nil, 850, nil, nil, - 850, 850, nil, nil, 850, nil, nil, nil, nil, nil, - 850, nil, nil, nil, nil, nil, nil, nil, nil, 850, - nil, nil, nil, nil, 850, 850, 850, 850, nil, 850, - 850, 850, 850, nil, nil, nil, nil, 850, 850, nil, - nil, nil, 870, 870, 870, 850, 870, 850, 850, 850, - 870, 870, 850, 850, nil, 870, nil, 870, 870, 870, - 870, 870, 870, 870, nil, nil, nil, nil, nil, 870, - 870, 870, 870, 870, 870, 870, nil, nil, 870, nil, - nil, nil, nil, nil, nil, 870, nil, nil, 870, 870, - 870, 870, 870, 870, 870, 870, nil, 870, 870, 870, - nil, 870, 870, 870, 870, 870, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 870, nil, nil, 870, nil, - nil, 870, 870, nil, nil, 870, nil, nil, nil, nil, - nil, 870, nil, nil, nil, nil, nil, nil, nil, nil, - 870, nil, nil, nil, nil, 870, 870, 870, 870, nil, - 870, 870, 870, 870, nil, nil, nil, nil, 870, 870, - nil, nil, nil, 878, 878, 878, 870, 878, 870, 870, - 870, 878, 878, 870, 870, nil, 878, nil, 878, 878, - 878, 878, 878, 878, 878, nil, nil, nil, nil, nil, - 878, 878, 878, 878, 878, 878, 878, nil, nil, 878, - nil, nil, nil, nil, nil, nil, 878, nil, nil, 878, - 878, 878, 878, 878, 878, 878, 878, nil, 878, 878, - 878, nil, 878, 878, 878, 878, 878, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 878, nil, nil, 878, - nil, nil, 878, 878, nil, nil, 878, nil, nil, nil, - nil, nil, 878, nil, nil, nil, nil, nil, nil, nil, - nil, 878, nil, nil, nil, nil, 878, 878, 878, 878, - nil, 878, 878, 878, 878, nil, nil, nil, nil, 878, - 878, nil, nil, nil, 891, 891, 891, 878, 891, 878, - 878, 878, 891, 891, 878, 878, nil, 891, nil, 891, - 891, 891, 891, 891, 891, 891, nil, nil, nil, nil, - nil, 891, 891, 891, 891, 891, 891, 891, nil, nil, - 891, nil, nil, nil, nil, nil, nil, 891, nil, nil, - 891, 891, 891, 891, 891, 891, 891, 891, nil, 891, - 891, 891, nil, 891, 891, 891, 891, 891, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 891, nil, nil, - 891, nil, nil, 891, 891, nil, nil, 891, nil, nil, - nil, nil, nil, 891, nil, nil, nil, nil, nil, nil, - nil, nil, 891, nil, nil, nil, nil, 891, 891, 891, - 891, nil, 891, 891, 891, 891, nil, nil, nil, nil, - 891, 891, nil, nil, nil, 892, 892, 892, 891, 892, - 891, 891, 891, 892, 892, 891, 891, nil, 892, nil, - 892, 892, 892, 892, 892, 892, 892, nil, nil, nil, - nil, nil, 892, 892, 892, 892, 892, 892, 892, nil, - nil, 892, nil, nil, nil, nil, nil, nil, 892, nil, - nil, 892, 892, 892, 892, 892, 892, 892, 892, nil, - 892, 892, 892, nil, 892, 892, 892, 892, 892, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 892, nil, - nil, 892, nil, nil, 892, 892, nil, nil, 892, nil, - nil, nil, nil, nil, 892, nil, nil, nil, nil, nil, - nil, nil, nil, 892, nil, nil, nil, nil, 892, 892, - 892, 892, nil, 892, 892, 892, 892, nil, nil, nil, - nil, 892, 892, nil, nil, nil, 920, 920, 920, 892, - 920, 892, 892, 892, 920, 920, 892, 892, nil, 920, - nil, 920, 920, 920, 920, 920, 920, 920, nil, nil, - nil, nil, nil, 920, 920, 920, 920, 920, 920, 920, - nil, nil, 920, nil, nil, nil, nil, nil, nil, 920, - nil, nil, 920, 920, 920, 920, 920, 920, 920, 920, - nil, 920, 920, 920, nil, 920, 920, 920, 920, 920, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 920, - nil, nil, 920, nil, nil, 920, 920, nil, nil, 920, - nil, nil, nil, nil, nil, 920, nil, nil, nil, nil, - nil, nil, nil, nil, 920, nil, nil, nil, nil, 920, - 920, 920, 920, nil, 920, 920, 920, 920, nil, nil, - nil, nil, 920, 920, nil, nil, nil, 921, 921, 921, - 920, 921, 920, 920, 920, 921, 921, 920, 920, nil, - 921, nil, 921, 921, 921, 921, 921, 921, 921, nil, - nil, nil, nil, nil, 921, 921, 921, 921, 921, 921, - 921, nil, nil, 921, nil, nil, nil, nil, nil, nil, - 921, nil, nil, 921, 921, 921, 921, 921, 921, 921, - 921, nil, 921, 921, 921, nil, 921, 921, 921, 921, - 921, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 921, nil, nil, 921, nil, nil, 921, 921, nil, nil, - 921, nil, nil, nil, nil, nil, 921, nil, nil, nil, - nil, nil, nil, nil, nil, 921, nil, nil, nil, nil, - 921, 921, 921, 921, nil, 921, 921, 921, 921, nil, - nil, nil, nil, 921, 921, nil, nil, nil, 922, 922, - 922, 921, 922, 921, 921, 921, 922, 922, 921, 921, - nil, 922, nil, 922, 922, 922, 922, 922, 922, 922, - nil, nil, nil, nil, nil, 922, 922, 922, 922, 922, - 922, 922, nil, nil, 922, nil, nil, nil, nil, nil, - nil, 922, nil, nil, 922, 922, 922, 922, 922, 922, - 922, 922, nil, 922, 922, 922, nil, 922, 922, 922, - 922, 922, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 922, nil, nil, 922, nil, nil, 922, 922, nil, - nil, 922, nil, nil, nil, nil, nil, 922, nil, nil, - nil, nil, nil, nil, nil, nil, 922, nil, nil, nil, - nil, 922, 922, 922, 922, nil, 922, 922, 922, 922, - nil, nil, nil, nil, 922, 922, nil, nil, nil, 923, - 923, 923, 922, 923, 922, 922, 922, 923, 923, 922, - 922, nil, 923, nil, 923, 923, 923, 923, 923, 923, - 923, nil, nil, nil, nil, nil, 923, 923, 923, 923, - 923, 923, 923, nil, nil, 923, nil, nil, nil, nil, - nil, nil, 923, nil, nil, 923, 923, 923, 923, 923, - 923, 923, 923, nil, 923, 923, 923, nil, 923, 923, - 923, 923, 923, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 923, nil, nil, 923, nil, nil, 923, 923, - nil, nil, 923, nil, nil, nil, nil, nil, 923, nil, - nil, nil, nil, nil, nil, nil, nil, 923, nil, nil, - nil, nil, 923, 923, 923, 923, nil, 923, 923, 923, - 923, nil, nil, nil, nil, 923, 923, nil, nil, nil, - 924, 924, 924, 923, 924, 923, 923, 923, 924, 924, - 923, 923, nil, 924, nil, 924, 924, 924, 924, 924, - 924, 924, nil, nil, nil, nil, nil, 924, 924, 924, - 924, 924, 924, 924, nil, nil, 924, nil, nil, nil, - nil, nil, nil, 924, nil, nil, 924, 924, 924, 924, - 924, 924, 924, 924, nil, 924, 924, 924, nil, 924, - 924, 924, 924, 924, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 924, nil, nil, 924, nil, nil, 924, - 924, nil, nil, 924, nil, nil, nil, nil, nil, 924, - nil, nil, nil, nil, nil, nil, nil, nil, 924, nil, - nil, nil, nil, 924, 924, 924, 924, nil, 924, 924, - 924, 924, nil, nil, nil, nil, 924, 924, nil, nil, - nil, 925, 925, 925, 924, 925, 924, 924, 924, 925, - 925, 924, 924, nil, 925, nil, 925, 925, 925, 925, - 925, 925, 925, nil, nil, nil, nil, nil, 925, 925, - 925, 925, 925, 925, 925, nil, nil, 925, nil, nil, - nil, nil, nil, nil, 925, nil, nil, 925, 925, 925, - 925, 925, 925, 925, 925, nil, 925, 925, 925, nil, - 925, 925, 925, 925, 925, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 925, nil, nil, 925, nil, nil, - 925, 925, nil, nil, 925, nil, nil, nil, nil, nil, - 925, nil, nil, nil, nil, nil, nil, nil, nil, 925, - nil, nil, nil, nil, 925, 925, 925, 925, nil, 925, - 925, 925, 925, nil, nil, nil, nil, 925, 925, nil, - nil, nil, 958, 958, 958, 925, 958, 925, 925, 925, - 958, 958, 925, 925, nil, 958, nil, 958, 958, 958, - 958, 958, 958, 958, nil, nil, nil, nil, nil, 958, - 958, 958, 958, 958, 958, 958, nil, nil, 958, nil, - nil, nil, nil, nil, nil, 958, nil, nil, 958, 958, - 958, 958, 958, 958, 958, 958, nil, 958, 958, 958, - nil, 958, 958, 958, 958, 958, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 958, nil, nil, 958, nil, - nil, 958, 958, nil, nil, 958, nil, nil, nil, nil, - nil, 958, nil, nil, nil, nil, nil, nil, nil, nil, - 958, nil, nil, nil, nil, 958, 958, 958, 958, nil, - 958, 958, 958, 958, nil, nil, nil, nil, 958, 958, - nil, nil, nil, 961, 961, 961, 958, 961, 958, 958, - 958, 961, 961, 958, 958, nil, 961, nil, 961, 961, - 961, 961, 961, 961, 961, nil, nil, nil, nil, nil, - 961, 961, 961, 961, 961, 961, 961, nil, nil, 961, - nil, nil, nil, nil, nil, nil, 961, nil, nil, 961, - 961, 961, 961, 961, 961, 961, 961, nil, 961, 961, - 961, nil, 961, 961, 961, 961, 961, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 961, nil, nil, 961, - nil, nil, 961, 961, nil, nil, 961, nil, nil, nil, - nil, nil, 961, nil, nil, nil, nil, nil, nil, nil, - nil, 961, nil, nil, nil, nil, 961, 961, 961, 961, - nil, 961, 961, 961, 961, nil, nil, nil, nil, 961, - 961, nil, nil, nil, 984, 984, 984, 961, 984, 961, - 961, 961, 984, 984, 961, 961, nil, 984, nil, 984, - 984, 984, 984, 984, 984, 984, nil, nil, nil, nil, - nil, 984, 984, 984, 984, 984, 984, 984, nil, nil, - 984, nil, nil, nil, nil, nil, nil, 984, nil, nil, - 984, 984, 984, 984, 984, 984, 984, 984, nil, 984, - 984, 984, nil, 984, 984, 984, 984, 984, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 984, nil, nil, - 984, nil, nil, 984, 984, nil, nil, 984, nil, nil, - nil, nil, nil, 984, nil, nil, nil, nil, nil, nil, - nil, nil, 984, nil, nil, nil, nil, 984, 984, 984, - 984, nil, 984, 984, 984, 984, nil, nil, nil, nil, - 984, 984, nil, nil, nil, 989, 989, 989, 984, 989, - 984, 984, 984, 989, 989, 984, 984, nil, 989, nil, - 989, 989, 989, 989, 989, 989, 989, nil, nil, nil, - nil, nil, 989, 989, 989, 989, 989, 989, 989, nil, - nil, 989, nil, nil, nil, nil, nil, nil, 989, nil, - nil, 989, 989, 989, 989, 989, 989, 989, 989, nil, - 989, 989, 989, nil, 989, 989, 989, 989, 989, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 989, nil, - nil, 989, nil, nil, 989, 989, nil, nil, 989, nil, - 989, nil, nil, nil, 989, nil, nil, nil, nil, nil, - nil, nil, nil, 989, nil, nil, nil, nil, 989, 989, - 989, 989, nil, 989, 989, 989, 989, nil, nil, nil, - nil, 989, 989, nil, nil, nil, 1008, 1008, 1008, 989, - 1008, 989, 989, 989, 1008, 1008, 989, 989, nil, 1008, - nil, 1008, 1008, 1008, 1008, 1008, 1008, 1008, nil, nil, - nil, nil, nil, 1008, 1008, 1008, 1008, 1008, 1008, 1008, - nil, nil, 1008, nil, nil, nil, nil, nil, nil, 1008, - nil, nil, 1008, 1008, 1008, 1008, 1008, 1008, 1008, 1008, - 1008, 1008, 1008, 1008, nil, 1008, 1008, 1008, 1008, 1008, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 1008, - nil, nil, 1008, nil, nil, 1008, 1008, nil, nil, 1008, - nil, nil, nil, 1008, nil, 1008, nil, nil, 1008, nil, - nil, nil, nil, nil, 1008, nil, nil, nil, nil, 1008, - 1008, 1008, 1008, nil, 1008, 1008, 1008, 1008, nil, nil, - nil, nil, 1008, 1008, nil, nil, nil, 1034, 1034, 1034, - 1008, 1034, 1008, 1008, 1008, 1034, 1034, 1008, 1008, nil, - 1034, nil, 1034, 1034, 1034, 1034, 1034, 1034, 1034, nil, - nil, nil, nil, nil, 1034, 1034, 1034, 1034, 1034, 1034, - 1034, nil, nil, 1034, nil, nil, nil, nil, nil, nil, - 1034, nil, nil, 1034, 1034, 1034, 1034, 1034, 1034, 1034, - 1034, nil, 1034, 1034, 1034, nil, 1034, 1034, 1034, 1034, - 1034, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 1034, nil, nil, 1034, nil, nil, 1034, 1034, nil, nil, - 1034, nil, nil, nil, nil, nil, 1034, nil, nil, nil, - nil, nil, nil, nil, nil, 1034, nil, nil, nil, nil, - 1034, 1034, 1034, 1034, nil, 1034, 1034, 1034, 1034, nil, - nil, nil, nil, 1034, 1034, nil, nil, nil, 1147, 1147, - 1147, 1034, 1147, 1034, 1034, 1034, 1147, 1147, 1034, 1034, - nil, 1147, nil, 1147, 1147, 1147, 1147, 1147, 1147, 1147, - nil, nil, nil, nil, nil, 1147, 1147, 1147, 1147, 1147, - 1147, 1147, nil, nil, 1147, nil, nil, nil, nil, nil, - nil, 1147, nil, nil, 1147, 1147, 1147, 1147, 1147, 1147, - 1147, 1147, nil, 1147, 1147, 1147, nil, 1147, 1147, 1147, - 1147, 1147, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 1147, nil, nil, 1147, nil, nil, 1147, 1147, nil, - nil, 1147, nil, nil, nil, nil, nil, 1147, nil, nil, - nil, nil, nil, nil, nil, nil, 1147, nil, nil, nil, - nil, 1147, 1147, 1147, 1147, nil, 1147, 1147, 1147, 1147, - nil, nil, nil, nil, 1147, 1147, nil, nil, nil, 1148, - 1148, 1148, 1147, 1148, 1147, 1147, 1147, 1148, 1148, 1147, - 1147, nil, 1148, nil, 1148, 1148, 1148, 1148, 1148, 1148, - 1148, nil, nil, nil, nil, nil, 1148, 1148, 1148, 1148, - 1148, 1148, 1148, nil, nil, 1148, nil, nil, nil, nil, - nil, nil, 1148, nil, nil, 1148, 1148, 1148, 1148, 1148, - 1148, 1148, 1148, nil, 1148, 1148, 1148, nil, 1148, 1148, - 1148, 1148, 1148, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 1148, nil, nil, 1148, nil, nil, 1148, 1148, - nil, nil, 1148, nil, nil, nil, nil, nil, 1148, nil, - nil, nil, nil, nil, nil, nil, nil, 1148, nil, nil, - nil, nil, 1148, 1148, 1148, 1148, nil, 1148, 1148, 1148, - 1148, nil, nil, nil, nil, 1148, 1148, nil, nil, nil, - 1160, 1160, 1160, 1148, 1160, 1148, 1148, 1148, 1160, 1160, - 1148, 1148, nil, 1160, nil, 1160, 1160, 1160, 1160, 1160, - 1160, 1160, nil, nil, nil, nil, nil, 1160, 1160, 1160, - 1160, 1160, 1160, 1160, nil, nil, 1160, nil, nil, nil, - nil, nil, nil, 1160, nil, nil, 1160, 1160, 1160, 1160, - 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, nil, 1160, - 1160, 1160, 1160, 1160, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 1160, nil, nil, 1160, nil, nil, 1160, - 1160, nil, nil, 1160, nil, 1160, nil, 1160, nil, 1160, - nil, nil, 1160, nil, nil, nil, nil, nil, 1160, nil, - nil, nil, nil, 1160, 1160, 1160, 1160, nil, 1160, 1160, - 1160, 1160, nil, nil, nil, nil, 1160, 1160, nil, nil, - nil, 39, 39, 39, 1160, 39, 1160, 1160, 1160, 39, - 39, 1160, 1160, nil, 39, nil, 39, 39, 39, 39, - 39, 39, 39, nil, nil, nil, nil, nil, 39, 39, - 39, 39, 39, 39, 39, nil, nil, 39, nil, nil, - nil, nil, nil, nil, 39, nil, nil, 39, 39, 39, - 39, 39, 39, 39, 39, nil, 39, 39, 39, nil, - 39, 39, nil, nil, 39, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 39, nil, nil, 39, nil, nil, - 39, 39, nil, nil, 39, nil, 39, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 39, 39, 39, 39, nil, 39, - 39, 39, 39, nil, nil, nil, nil, 39, 39, nil, - nil, nil, 40, 40, 40, 39, 40, 39, 39, 39, - 40, 40, nil, nil, nil, 40, nil, 40, 40, 40, - 40, 40, 40, 40, nil, nil, nil, nil, nil, 40, - 40, 40, 40, 40, 40, 40, nil, nil, 40, nil, - nil, nil, nil, nil, nil, 40, nil, nil, 40, 40, - 40, 40, 40, 40, 40, 40, nil, 40, 40, 40, - nil, 40, 40, nil, nil, 40, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 40, nil, nil, 40, nil, - nil, 40, 40, nil, nil, 40, nil, nil, 1206, nil, - 1206, 1206, 1206, 1206, 1206, nil, nil, nil, nil, nil, - nil, nil, nil, 1206, nil, 40, 40, 40, 40, nil, - 40, 40, 40, 40, nil, nil, nil, nil, 40, 40, - nil, nil, nil, 40, nil, 1206, 40, nil, 40, 40, - 40, 76, 76, 76, nil, 76, 1206, 1206, nil, 76, - 76, 1206, nil, nil, 76, nil, 76, 76, 76, 76, - 76, 76, 76, nil, nil, nil, nil, nil, 76, 76, - 76, 76, 76, 76, 76, nil, nil, 76, nil, nil, - nil, nil, nil, nil, 76, nil, nil, 76, 76, 76, - 76, 76, 76, 76, 76, nil, 76, 76, 76, nil, - 76, 76, nil, nil, 76, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 76, nil, nil, 76, nil, nil, - 76, 76, nil, nil, 76, nil, 76, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 76, 76, 76, 76, nil, 76, - 76, 76, 76, nil, nil, nil, nil, 76, 76, nil, - nil, nil, 77, 77, 77, 76, 77, 76, 76, 76, - 77, 77, nil, nil, nil, 77, nil, 77, 77, 77, - 77, 77, 77, 77, nil, nil, nil, nil, nil, 77, - 77, 77, 77, 77, 77, 77, nil, nil, 77, nil, - nil, nil, nil, nil, nil, 77, nil, nil, 77, 77, - 77, 77, 77, 77, 77, 77, nil, 77, 77, 77, - nil, 77, 77, nil, nil, 77, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 77, nil, nil, 77, nil, nil, 77, nil, - nil, 77, 77, nil, nil, 77, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 77, 77, 77, 77, nil, - 77, 77, 77, 77, nil, nil, nil, nil, 77, 77, - nil, nil, nil, 78, 78, 78, 77, 78, 77, 77, - 77, 78, 78, nil, nil, nil, 78, nil, 78, 78, - 78, 78, 78, 78, 78, nil, nil, nil, nil, nil, - 78, 78, 78, 78, 78, 78, 78, nil, nil, 78, - nil, nil, nil, nil, nil, nil, 78, nil, nil, 78, - 78, 78, 78, 78, 78, 78, 78, nil, 78, 78, - 78, nil, 78, 78, nil, nil, 78, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 78, nil, nil, 78, - nil, nil, 78, 78, nil, nil, 78, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 78, 78, 78, 78, - nil, 78, 78, 78, 78, nil, nil, nil, nil, 78, - 78, nil, nil, nil, 342, 342, 342, 78, 342, 78, - 78, 78, 342, 342, nil, nil, nil, 342, nil, 342, - 342, 342, 342, 342, 342, 342, nil, nil, nil, nil, - nil, 342, 342, 342, 342, 342, 342, 342, nil, nil, - 342, nil, nil, nil, nil, nil, nil, 342, nil, nil, - 342, 342, 342, 342, 342, 342, 342, 342, nil, 342, - 342, 342, nil, 342, 342, nil, nil, 342, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 342, nil, nil, - 342, nil, nil, 342, 342, nil, nil, 342, nil, nil, - 1208, nil, 1208, 1208, 1208, 1208, 1208, nil, nil, nil, - nil, nil, nil, nil, nil, 1208, nil, 342, 342, 342, - 342, nil, 342, 342, 342, 342, nil, nil, nil, nil, - 342, 342, nil, nil, nil, 342, nil, 1208, 342, nil, - 342, 342, 342, 361, 361, 361, nil, 361, 1208, 1208, - nil, 361, 361, 1208, nil, nil, 361, nil, 361, 361, - 361, 361, 361, 361, 361, nil, nil, nil, nil, nil, - 361, 361, 361, 361, 361, 361, 361, nil, nil, 361, - nil, nil, nil, nil, nil, nil, 361, nil, nil, 361, - 361, 361, 361, 361, 361, 361, 361, nil, 361, 361, - 361, nil, 361, 361, nil, nil, 361, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 361, nil, nil, 361, - nil, nil, 361, 361, nil, nil, 361, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 361, 361, 361, 361, - nil, 361, 361, 361, 361, nil, nil, nil, nil, 361, - 361, nil, nil, nil, 591, 591, 591, 361, 591, 361, - 361, 361, 591, 591, nil, nil, nil, 591, nil, 591, - 591, 591, 591, 591, 591, 591, nil, nil, nil, nil, - nil, 591, 591, 591, 591, 591, 591, 591, nil, nil, - 591, nil, nil, nil, nil, nil, nil, 591, nil, nil, - 591, 591, 591, 591, 591, 591, 591, 591, nil, 591, - 591, 591, nil, 591, 591, nil, nil, 591, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 591, nil, nil, - 591, nil, nil, 591, 591, nil, nil, 591, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 591, 591, 591, - 591, nil, 591, 591, 591, 591, nil, nil, nil, nil, - 591, 591, nil, nil, nil, 600, 600, 600, 591, 600, - 591, 591, 591, 600, 600, nil, nil, nil, 600, nil, - 600, 600, 600, 600, 600, 600, 600, nil, nil, nil, - nil, nil, 600, 600, 600, 600, 600, 600, 600, nil, - nil, 600, nil, nil, nil, nil, nil, nil, 600, nil, - nil, 600, 600, 600, 600, 600, 600, 600, 600, nil, - 600, 600, 600, nil, 600, 600, nil, nil, 600, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 600, nil, - nil, 600, nil, nil, 600, 600, nil, nil, 600, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 600, 600, - 600, 600, nil, 600, 600, 600, 600, nil, nil, nil, - nil, 600, 600, nil, nil, nil, 806, 806, 806, 600, - 806, 600, 600, 600, 806, 806, nil, nil, nil, 806, - nil, 806, 806, 806, 806, 806, 806, 806, nil, nil, - nil, nil, nil, 806, 806, 806, 806, 806, 806, 806, - nil, nil, 806, nil, nil, nil, nil, nil, nil, 806, - nil, nil, 806, 806, 806, 806, 806, 806, 806, 806, - nil, 806, 806, 806, nil, 806, 806, nil, nil, 806, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 806, - nil, nil, 806, nil, nil, 806, 806, nil, nil, 806, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 806, - 806, 806, 806, nil, 806, 806, 806, 806, nil, nil, - nil, nil, 806, 806, nil, nil, nil, 817, 817, 817, - 806, 817, 806, 806, 806, 817, 817, nil, nil, nil, - 817, nil, 817, 817, 817, 817, 817, 817, 817, nil, - nil, nil, nil, nil, 817, 817, 817, 817, 817, 817, - 817, nil, nil, 817, nil, nil, nil, nil, nil, nil, - 817, nil, nil, 817, 817, 817, 817, 817, 817, 817, - 817, nil, 817, 817, 817, nil, 817, 817, nil, nil, - 817, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 817, nil, nil, 817, nil, nil, 817, 817, nil, nil, - 817, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 817, 817, 817, 817, nil, 817, 817, 817, 817, nil, - nil, nil, nil, 817, 817, nil, nil, nil, 1016, 1016, - 1016, 817, 1016, 817, 817, 817, 1016, 1016, nil, nil, - nil, 1016, nil, 1016, 1016, 1016, 1016, 1016, 1016, 1016, - nil, nil, nil, nil, nil, 1016, 1016, 1016, 1016, 1016, - 1016, 1016, nil, nil, 1016, nil, nil, nil, nil, nil, - nil, 1016, nil, nil, 1016, 1016, 1016, 1016, 1016, 1016, - 1016, 1016, nil, 1016, 1016, 1016, nil, 1016, 1016, nil, - nil, 1016, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 1016, nil, nil, 1016, nil, nil, 1016, 1016, nil, - nil, 1016, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 1016, 1016, 1016, 1016, nil, 1016, 1016, 1016, 1016, - nil, nil, nil, nil, 1016, 1016, nil, nil, nil, 1080, - 1080, 1080, 1016, 1080, 1016, 1016, 1016, 1080, 1080, nil, - nil, nil, 1080, nil, 1080, 1080, 1080, 1080, 1080, 1080, - 1080, nil, nil, nil, nil, nil, 1080, 1080, 1080, 1080, - 1080, 1080, 1080, nil, nil, 1080, nil, nil, nil, nil, - nil, nil, 1080, nil, nil, 1080, 1080, 1080, 1080, 1080, - 1080, 1080, 1080, nil, 1080, 1080, 1080, nil, 1080, 1080, - nil, nil, 1080, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 1080, nil, nil, 1080, nil, nil, 1080, 1080, - nil, nil, 1080, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 1080, 1080, 1080, 1080, nil, 1080, 1080, 1080, - 1080, nil, nil, nil, nil, 1080, 1080, nil, nil, nil, - 1142, 1142, 1142, 1080, 1142, 1080, 1080, 1080, 1142, 1142, - nil, nil, nil, 1142, nil, 1142, 1142, 1142, 1142, 1142, - 1142, 1142, nil, nil, nil, nil, nil, 1142, 1142, 1142, - 1142, 1142, 1142, 1142, nil, nil, 1142, nil, nil, nil, - nil, nil, nil, 1142, nil, nil, 1142, 1142, 1142, 1142, - 1142, 1142, 1142, 1142, nil, 1142, 1142, 1142, nil, 1142, - 1142, nil, nil, 1142, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 1142, nil, nil, 1142, nil, nil, 1142, - 1142, nil, nil, 1142, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 1142, 1142, 1142, 1142, nil, 1142, 1142, - 1142, 1142, nil, nil, nil, nil, 1142, 1142, nil, nil, - nil, nil, nil, nil, 1142, nil, 1142, 1142, 1142, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, nil, nil, nil, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, nil, nil, nil, nil, - nil, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, nil, 10, nil, nil, nil, nil, nil, nil, nil, - 10, 10, nil, 10, 10, 10, 10, 10, 10, 10, - nil, nil, 10, 10, nil, nil, nil, 10, 10, 10, - 10, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 10, 10, nil, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, nil, - nil, 10, 10, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 10, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, - 11, nil, nil, nil, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 11, nil, nil, nil, nil, nil, 11, - 11, 11, 11, 11, 11, 11, 11, 11, nil, nil, - 11, nil, nil, nil, nil, nil, nil, nil, 11, 11, - nil, 11, 11, 11, 11, 11, 11, 11, nil, nil, - 11, 11, nil, nil, nil, 11, 11, 11, 11, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 11, 11, nil, 11, 11, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 11, nil, nil, 11, - 11, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 11, 428, 428, 428, 428, 428, - 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, - 428, 428, 428, 428, 428, 428, 428, 428, 428, nil, - nil, nil, 428, 428, 428, 428, 428, 428, 428, 428, - 428, 428, nil, nil, nil, nil, nil, 428, 428, 428, - 428, 428, 428, 428, 428, 428, nil, nil, 428, nil, - nil, nil, nil, nil, nil, nil, 428, 428, nil, 428, - 428, 428, 428, 428, 428, 428, nil, nil, 428, 428, - nil, nil, nil, 428, 428, 428, 428, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 428, 428, nil, 428, 428, 428, 428, 428, 428, 428, - 428, 428, 428, 428, 428, nil, nil, 428, 428, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 428, 670, 670, 670, 670, 670, 670, 670, - 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, - 670, 670, 670, 670, 670, 670, 670, nil, nil, nil, - 670, 670, 670, 670, 670, 670, 670, 670, 670, 670, - nil, nil, nil, nil, nil, 670, 670, 670, 670, 670, - 670, 670, 670, 670, nil, nil, 670, nil, nil, nil, - nil, nil, nil, nil, 670, 670, nil, 670, 670, 670, - 670, 670, 670, 670, nil, nil, 670, 670, nil, nil, - nil, 670, 670, 670, 670, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 670, 670, - nil, 670, 670, 670, 670, 670, 670, 670, 670, 670, - 670, 670, 670, nil, nil, 670, 670, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 670, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, nil, nil, nil, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, nil, nil, - nil, nil, nil, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, nil, 26, nil, nil, nil, - nil, nil, 26, 26, nil, 26, 26, 26, 26, 26, - 26, 26, nil, nil, 26, 26, nil, nil, nil, 26, - 26, 26, 26, nil, nil, nil, nil, nil, 26, nil, - nil, nil, nil, nil, nil, nil, 26, 26, nil, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, nil, nil, 26, 530, 530, 530, 530, nil, nil, - 1210, nil, 1210, 1210, 1210, 1210, 1210, nil, nil, nil, - 530, 530, 530, 530, nil, 1210, nil, 530, 530, nil, - nil, nil, nil, 530, 530, nil, nil, 530, 530, nil, - nil, nil, nil, nil, nil, nil, nil, 1210, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 530, 1210, 1210, - 530, nil, nil, 1210, 530, nil, nil, 530, nil, 530, - nil, nil, nil, nil, nil, nil, 530, nil, nil, nil, - nil, nil, nil, 530, nil, nil, nil, 530, 530, 530, - 530, nil, 530, 530, 530, 530, nil, nil, nil, nil, - 530, 530, 531, 531, 531, 531, nil, nil, 530, nil, - 530, 530, 530, nil, nil, 530, 530, nil, 531, 531, - 531, 531, nil, nil, nil, 531, 531, nil, nil, nil, - nil, 531, 531, nil, nil, 531, 531, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 531, nil, nil, 531, nil, - nil, nil, 531, nil, nil, 531, nil, 531, nil, nil, - nil, nil, nil, nil, 531, nil, nil, nil, nil, nil, - nil, 531, nil, nil, nil, 531, 531, 531, 531, nil, - 531, 531, 531, 531, nil, nil, nil, nil, 531, 531, - 748, 748, 748, 748, nil, nil, 531, nil, 531, 531, - 531, nil, nil, 531, 531, nil, 748, 748, 748, 748, - nil, nil, nil, 748, nil, nil, nil, nil, nil, 748, - 748, nil, nil, 748, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 748, nil, nil, 748, nil, nil, nil, - 748, nil, nil, 748, nil, 748, nil, nil, nil, nil, - nil, nil, 710, nil, 710, 710, 710, 710, 710, 748, - nil, nil, nil, 748, 748, 748, 748, 710, 748, 748, - 748, 748, nil, nil, nil, nil, 748, 748, 748, 756, - 756, 756, 756, nil, 748, nil, 748, 748, 748, 710, - nil, 748, 748, nil, nil, 756, 756, 756, 756, nil, - 710, 710, 756, nil, nil, 710, nil, nil, 756, 756, - nil, nil, 756, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 756, nil, nil, 756, nil, nil, nil, 756, - nil, nil, 756, nil, nil, 710, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 756, nil, - nil, nil, 756, 756, 756, 756, nil, 756, 756, 756, - 756, nil, nil, nil, nil, 756, 756, nil, nil, nil, - nil, nil, nil, 756, nil, 756, 756, 756, nil, nil, - 756, 756, 783, 783, 783, 783, 783, 783, 783, 783, - 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, - 783, 783, 783, 783, 783, 783, nil, nil, nil, 783, - 783, 783, 783, 783, 783, 783, 783, 783, 783, nil, - nil, nil, nil, nil, 783, 783, 783, 783, 783, 783, - 783, 783, 783, nil, nil, 783, nil, nil, nil, nil, - nil, nil, nil, 783, 783, nil, 783, 783, 783, 783, - 783, 783, 783, nil, nil, 783, 783, nil, nil, nil, - 783, 783, 783, 783, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 783, 783, nil, - 783, 783, 783, 783, 783, 783, 783, 783, 783, 783, - 783, 783, nil, nil, 783, 927, 927, 927, 927, nil, - nil, nil, nil, nil, 1021, nil, 1021, 1021, 1021, 1021, - 1021, 927, 927, 927, 927, nil, nil, nil, 927, 1021, - nil, nil, nil, nil, 927, 927, nil, nil, 927, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 1021, nil, nil, nil, nil, nil, nil, 927, nil, - nil, 927, 1021, 1021, nil, 927, nil, 1021, 927, nil, - 927, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 927, nil, nil, nil, 927, 927, - 927, 927, nil, 927, 927, 927, 927, nil, nil, nil, - nil, 927, 927, 929, 929, 929, 929, 1021, nil, 927, - nil, 927, 927, 927, nil, nil, 927, 927, nil, 929, - 929, 929, 929, nil, nil, 1136, 929, 1136, 1136, 1136, - 1136, 1136, 929, 929, nil, nil, 929, nil, nil, nil, - 1136, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 929, nil, nil, 929, - nil, nil, 1136, 929, nil, nil, 929, nil, nil, nil, - nil, 1136, 1136, 1136, 1136, nil, nil, nil, 1136, nil, - nil, nil, 929, nil, nil, nil, 929, 929, 929, 929, - nil, 929, 929, 929, 929, nil, nil, nil, nil, 929, - 929, 932, 932, 932, 932, nil, nil, 929, nil, 929, - 929, 929, nil, nil, 929, 929, nil, 932, 932, 932, - 932, nil, nil, nil, 932, 932, nil, nil, nil, nil, - 932, 932, nil, nil, 932, 932, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 932, nil, nil, 932, nil, nil, - nil, 932, nil, nil, 932, nil, 932, nil, nil, nil, - nil, nil, nil, 932, nil, nil, nil, nil, nil, nil, - 932, nil, nil, nil, 932, 932, 932, 932, nil, 932, - 932, 932, 932, nil, nil, nil, nil, 932, 932, 933, - 933, 933, 933, nil, nil, 932, nil, 932, 932, 932, - nil, nil, 932, 932, nil, 933, 933, 933, 933, nil, - nil, nil, 933, 933, nil, nil, nil, nil, 933, 933, - nil, nil, 933, 933, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 933, nil, nil, 933, nil, nil, nil, 933, - nil, nil, 933, nil, 933, nil, nil, nil, nil, nil, - nil, 933, nil, nil, nil, nil, nil, nil, 933, nil, - nil, nil, 933, 933, 933, 933, nil, 933, 933, 933, - 933, nil, nil, nil, nil, 933, 933, 939, 939, 939, - 939, nil, nil, 933, nil, 933, 933, 933, nil, nil, - 933, 933, nil, 939, 939, 939, 939, nil, nil, 1204, - 939, 1204, 1204, 1204, 1204, 1204, 939, 939, nil, nil, - 939, nil, nil, nil, 1204, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 939, nil, nil, 939, nil, nil, 1204, 939, nil, nil, - 939, nil, 939, nil, nil, 1204, 1204, 1204, 1204, nil, - nil, nil, 1204, nil, nil, nil, 939, nil, nil, nil, - 939, 939, 939, 939, nil, 939, 939, 939, 939, nil, - nil, nil, nil, 939, 939, 945, 945, 945, 945, nil, - nil, 939, nil, 939, 939, 939, nil, nil, 939, 939, - nil, 945, 945, 945, 945, nil, nil, 1227, 945, 1227, - 1227, 1227, 1227, 1227, 945, 945, nil, nil, 945, nil, - nil, nil, 1227, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 945, nil, - nil, 945, nil, nil, 1227, 945, nil, nil, 945, nil, - nil, nil, nil, nil, nil, 1227, 1227, nil, nil, nil, - 1227, nil, nil, nil, 945, nil, nil, nil, 945, 945, - 945, 945, nil, 945, 945, 945, 945, nil, nil, nil, - nil, 945, 945, 946, 946, 946, 946, nil, nil, 945, - nil, 945, 945, 945, nil, nil, 945, 945, nil, 946, - 946, 946, 946, nil, nil, nil, 946, nil, nil, nil, - nil, nil, 946, 946, nil, nil, 946, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 946, nil, nil, 946, - nil, nil, nil, 946, nil, nil, 946, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 946, nil, nil, nil, 946, 946, 946, 946, - nil, 946, 946, 946, 946, nil, nil, nil, nil, 946, - 946, 988, 988, 988, 988, nil, nil, 946, nil, 946, - 946, 946, nil, nil, 946, 946, nil, 988, 988, 988, - 988, nil, nil, nil, 988, 988, nil, nil, nil, nil, - 988, 988, nil, nil, 988, 988, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 988, nil, nil, 988, nil, nil, - nil, 988, nil, nil, 988, nil, 988, nil, nil, nil, - nil, nil, nil, 988, nil, nil, nil, nil, nil, nil, - 988, nil, nil, nil, 988, 988, 988, 988, nil, 988, - 988, 988, 988, nil, nil, nil, nil, 988, 988, 1115, - 1115, 1115, 1115, nil, nil, 988, nil, 988, 988, 988, - nil, nil, 988, 988, nil, 1115, 1115, 1115, 1115, nil, - nil, nil, 1115, nil, nil, nil, nil, nil, 1115, 1115, - nil, nil, 1115, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 1115, nil, nil, 1115, nil, nil, nil, 1115, - nil, nil, 1115, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 1115, nil, - nil, nil, 1115, 1115, 1115, 1115, nil, 1115, 1115, 1115, - 1115, nil, nil, nil, nil, 1115, 1115, 1123, 1123, 1123, - 1123, nil, nil, 1115, nil, 1115, 1115, 1115, nil, nil, - 1115, 1115, nil, 1123, 1123, 1123, 1123, nil, nil, nil, - 1123, nil, nil, nil, nil, nil, 1123, 1123, nil, nil, - 1123, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 1123, nil, nil, 1123, nil, nil, nil, 1123, nil, nil, - 1123, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 1123, nil, nil, nil, - 1123, 1123, 1123, 1123, nil, 1123, 1123, 1123, 1123, nil, - nil, nil, nil, 1123, 1123, 1127, 1127, 1127, 1127, nil, - nil, 1123, nil, 1123, 1123, 1123, nil, nil, 1123, 1123, - nil, 1127, 1127, 1127, 1127, nil, nil, nil, 1127, nil, - nil, nil, nil, nil, 1127, 1127, nil, nil, 1127, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 1127, nil, - nil, 1127, nil, nil, nil, 1127, nil, nil, 1127, nil, - 1127, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 1127, nil, nil, nil, 1127, 1127, - 1127, 1127, nil, 1127, 1127, 1127, 1127, nil, nil, nil, - nil, 1127, 1127, 1202, 1202, 1202, 1202, nil, nil, 1127, - nil, 1127, 1127, 1127, nil, nil, 1127, 1127, nil, 1202, - 1202, 1202, 1202, nil, nil, nil, 1202, nil, nil, nil, - nil, nil, 1202, 1202, nil, nil, 1202, nil, nil, nil, - nil, nil, nil, nil, 766, 766, 766, 766, nil, nil, - nil, nil, nil, nil, nil, nil, 1202, nil, nil, 1202, - 766, 766, 766, 1202, nil, nil, 1202, nil, nil, nil, - nil, nil, nil, 766, 766, nil, nil, 766, nil, nil, - nil, nil, 1202, nil, nil, nil, 1202, 1202, 1202, 1202, - nil, 1202, 1202, 1202, 1202, nil, nil, nil, nil, 1202, - 1202, nil, nil, nil, nil, nil, nil, 1202, nil, 1202, - 1202, 1202, nil, nil, 1202, 1202, 971, nil, 971, 971, - 971, 971, 971, nil, nil, nil, nil, 766, 766, 766, - 766, 971, 766, 766, 766, 766, nil, nil, nil, nil, - 766, 766, 952, 952, 952, 952, nil, nil, 766, nil, - 766, 766, 766, 971, nil, nil, nil, nil, 952, 952, - 952, nil, 971, 971, 971, 971, nil, nil, nil, 971, - nil, 952, 952, nil, nil, 952, 953, 953, 953, 953, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 953, 953, 953, 971, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 953, 953, nil, nil, 953, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 952, 952, 952, 952, nil, - 952, 952, 952, 952, nil, nil, nil, nil, 952, 952, - nil, nil, nil, nil, nil, nil, 952, nil, 952, 952, - 952, nil, nil, nil, nil, nil, nil, nil, nil, 953, - 953, 953, 953, nil, 953, 953, 953, 953, nil, nil, - nil, nil, 953, 953, nil, nil, nil, nil, nil, nil, - 953, nil, 953, 953, 953, 706, nil, 706, 706, 706, - 706, 706, nil, 708, nil, 708, 708, 708, 708, 708, - 706, nil, nil, nil, nil, nil, nil, nil, 708, nil, - 1019, nil, 1019, 1019, 1019, 1019, 1019, nil, nil, nil, - nil, nil, 706, nil, nil, 1019, nil, nil, nil, nil, - 708, 706, 706, 706, 706, nil, nil, nil, 706, 708, - 708, 708, 708, nil, nil, nil, 708, 1019, nil, nil, - nil, nil, nil, nil, nil, nil, 1019, 1019, 1019, 1019, - nil, nil, 1023, 1019, 1023, 1023, 1023, 1023, 1023, 1025, - nil, 1025, 1025, 1025, 1025, 1025, nil, 1023, 706, nil, - nil, nil, nil, nil, 1025, nil, 708, 1164, nil, 1164, - 1164, 1164, 1164, 1164, nil, nil, nil, nil, nil, 1023, - nil, nil, 1164, 1019, nil, nil, 1025, nil, nil, nil, - 1023, 1023, nil, nil, nil, 1023, nil, 1025, 1025, nil, - nil, nil, 1025, nil, 1164, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 1164, 1164, nil, nil, nil, - 1164, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 226, 226, nil, 1023, 226, nil, nil, nil, - nil, nil, 1025, nil, 226, 226, nil, 226, 226, 226, - 226, 226, 226, 226, nil, nil, 226, 226, nil, nil, - 1164, 226, 226, 226, 226, nil, nil, nil, nil, nil, - 226, nil, nil, nil, nil, nil, nil, nil, 226, 226, - nil, 226, 226, 226, 226, 226, 226, 226, 226, 226, - 226, 226, 226, 227, 227, 226, nil, 227, nil, nil, - nil, nil, nil, nil, nil, 227, 227, nil, 227, 227, - 227, 227, 227, 227, 227, nil, nil, 227, 227, nil, - nil, nil, 227, 227, 227, 227, nil, nil, nil, nil, - nil, 227, nil, nil, nil, nil, nil, nil, nil, 227, - 227, nil, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 227, 303, 303, 227, nil, 303, nil, - nil, nil, nil, nil, nil, nil, 303, 303, nil, 303, - 303, 303, 303, 303, 303, 303, nil, nil, 303, 303, - nil, nil, nil, 303, 303, 303, 303, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 303, 303, nil, 303, 303, 303, 303, 303, 303, 303, - 303, 303, 303, 303, 303, 521, 521, 303, nil, 521, - nil, nil, nil, nil, nil, nil, nil, 521, 521, nil, - 521, 521, 521, 521, 521, 521, 521, nil, nil, 521, - 521, nil, nil, nil, 521, 521, 521, 521, nil, nil, - nil, nil, nil, 521, nil, nil, nil, nil, nil, nil, - nil, 521, 521, nil, 521, 521, 521, 521, 521, 521, - 521, 521, 521, 521, 521, 521, 522, 522, 521, nil, - 522, nil, nil, nil, nil, nil, nil, nil, 522, 522, - nil, 522, 522, 522, 522, 522, 522, 522, nil, nil, - 522, 522, nil, nil, nil, 522, 522, 522, 522, nil, - nil, nil, nil, nil, 522, nil, nil, nil, nil, nil, - nil, nil, 522, 522, nil, 522, 522, 522, 522, 522, - 522, 522, 522, 522, 522, 522, 522, 594, 594, 522, - nil, 594, nil, nil, nil, nil, nil, nil, nil, 594, - 594, nil, 594, 594, 594, 594, 594, 594, 594, nil, - nil, 594, 594, nil, nil, nil, 594, 594, 594, 594, - nil, nil, nil, nil, nil, 594, nil, nil, nil, nil, - nil, nil, nil, 594, 594, nil, 594, 594, 594, 594, - 594, 594, 594, 594, 594, 594, 594, 594, 595, 595, - 594, nil, 595, nil, nil, nil, nil, nil, nil, nil, - 595, 595, nil, 595, 595, 595, 595, 595, 595, 595, - nil, nil, 595, 595, nil, nil, nil, 595, 595, 595, - 595, nil, nil, nil, nil, nil, 595, nil, nil, nil, - nil, nil, nil, nil, 595, 595, nil, 595, 595, 595, - 595, 595, 595, 595, 595, 595, 595, 595, 595, 604, - 604, 595, nil, 604, nil, nil, nil, nil, nil, nil, - nil, 604, 604, nil, 604, 604, 604, 604, 604, 604, - 604, nil, nil, 604, 604, nil, nil, nil, 604, 604, - 604, 604, nil, nil, nil, nil, nil, 604, nil, nil, - nil, nil, nil, nil, nil, 604, 604, nil, 604, 604, - 604, 604, 604, 604, 604, 604, 604, 604, 604, 604, - 605, 605, 604, nil, 605, nil, nil, nil, nil, nil, - nil, nil, 605, 605, nil, 605, 605, 605, 605, 605, - 605, 605, nil, nil, 605, 605, nil, nil, nil, 605, - 605, 605, 605, nil, nil, nil, nil, nil, 605, nil, - nil, nil, nil, nil, nil, nil, 605, 605, nil, 605, - 605, 605, 605, 605, 605, 605, 605, 605, 605, 605, - 605, 632, 632, 605, nil, 632, nil, nil, nil, nil, - nil, nil, nil, 632, 632, nil, 632, 632, 632, 632, - 632, 632, 632, nil, nil, 632, 632, nil, nil, nil, - 632, 632, 632, 632, nil, nil, nil, nil, nil, 632, - nil, nil, nil, nil, nil, nil, nil, 632, 632, nil, - 632, 632, 632, 632, 632, 632, 632, 632, 632, 632, - 632, 632, 633, 633, 632, nil, 633, nil, nil, nil, - nil, nil, nil, nil, 633, 633, nil, 633, 633, 633, - 633, 633, 633, 633, nil, nil, 633, 633, nil, nil, - nil, 633, 633, 633, 633, nil, nil, nil, nil, nil, - 633, nil, nil, nil, nil, nil, nil, nil, 633, 633, - nil, 633, 633, 633, 633, 633, 633, 633, 633, 633, - 633, 633, 633, 639, 639, 633, nil, 639, nil, nil, - nil, nil, nil, nil, nil, 639, 639, nil, 639, 639, - 639, 639, 639, 639, 639, nil, nil, 639, 639, nil, - nil, nil, 639, 639, 639, 639, nil, nil, nil, nil, - nil, 639, nil, nil, nil, nil, nil, nil, nil, 639, - 639, nil, 639, 639, 639, 639, 639, 639, 639, 639, - 639, 639, 639, 639, 640, 640, 639, nil, 640, nil, - nil, nil, nil, nil, nil, nil, 640, 640, nil, 640, - 640, 640, 640, 640, 640, 640, nil, nil, 640, 640, - nil, nil, nil, 640, 640, 640, 640, nil, nil, nil, - nil, nil, 640, nil, nil, nil, nil, nil, nil, nil, - 640, 640, nil, 640, 640, 640, 640, 640, 640, 640, - 640, 640, 640, 640, 640, 677, 677, 640, nil, 677, - nil, nil, nil, nil, nil, nil, nil, 677, 677, nil, - 677, 677, 677, 677, 677, 677, 677, nil, nil, 677, - 677, nil, nil, nil, 677, 677, 677, 677, nil, nil, - nil, nil, nil, 677, nil, nil, nil, nil, nil, nil, - nil, 677, 677, nil, 677, 677, 677, 677, 677, 677, - 677, 677, 677, 677, 677, 677, 678, 678, 677, nil, - 678, nil, nil, nil, nil, nil, nil, nil, 678, 678, - nil, 678, 678, 678, 678, 678, 678, 678, nil, nil, - 678, 678, nil, nil, nil, 678, 678, 678, 678, nil, - nil, nil, nil, nil, 678, nil, nil, nil, nil, nil, - nil, nil, 678, 678, nil, 678, 678, 678, 678, 678, - 678, 678, 678, 678, 678, 678, 678, 1161, 1161, 678, - nil, 1161, nil, nil, nil, nil, nil, nil, nil, 1161, - 1161, nil, 1161, 1161, 1161, 1161, 1161, 1161, 1161, nil, - nil, 1161, 1161, nil, nil, nil, 1161, 1161, 1161, 1161, - nil, nil, nil, nil, nil, 1161, nil, nil, nil, nil, - nil, nil, nil, 1161, 1161, nil, 1161, 1161, 1161, 1161, - 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1161, 1162, 1162, - 1161, nil, 1162, nil, nil, nil, nil, nil, nil, nil, - 1162, 1162, nil, 1162, 1162, 1162, 1162, 1162, 1162, 1162, - nil, nil, 1162, 1162, nil, nil, nil, 1162, 1162, 1162, - 1162, nil, nil, nil, nil, nil, 1162, nil, nil, nil, - nil, nil, nil, nil, 1162, 1162, nil, 1162, 1162, 1162, - 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1162, 1185, - 1185, 1162, nil, 1185, nil, nil, nil, nil, nil, nil, - nil, 1185, 1185, nil, 1185, 1185, 1185, 1185, 1185, 1185, - 1185, nil, nil, 1185, 1185, nil, nil, nil, 1185, 1185, - 1185, 1185, nil, nil, nil, nil, nil, 1185, nil, nil, - nil, nil, nil, nil, nil, 1185, 1185, nil, 1185, 1185, - 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185, - nil, nil, 1185 ] - -racc_action_pointer = [ - nil, 204, 979, 226, nil, -110, nil, 5154, 964, 144, - 24967, 25095, 159, nil, 157, 176, 525, 279, -62, -84, - 162, 374, nil, -71, 5285, 1123, 25479, 358, nil, 171, - nil, -8, 5426, 5536, 5670, 5801, 5932, nil, 1123, 23109, - 23240, nil, 281, 525, 531, 368, 6063, 6194, 205, 6325, - 6456, 525, 6587, 318, 342, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 6728, nil, 6869, 7000, 7131, 35, - nil, 7262, 7393, nil, nil, 7524, 23379, 23510, 23641, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 612, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 0, 112, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 7667, nil, nil, nil, nil, - 7810, 7941, 8072, 8203, 8346, nil, 1267, nil, 588, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 345, nil, 1411, - 8477, 8608, 8739, 8870, 9001, 9132, 27591, 27652, nil, nil, - 363, 1555, 372, nil, 719, 831, 384, 1699, 9263, 9394, - 9525, nil, nil, 514, -23, 141, 480, 193, 409, 536, - nil, 9656, 307, 388, 1843, 541, nil, nil, 9787, 9918, - 10049, 10180, 10311, 10442, 10573, 10704, 10835, 10966, 11097, 11228, - 11359, 11490, 11621, 11752, 11883, 12014, 12145, 12276, 12407, 12538, - nil, nil, nil, nil, 12669, nil, nil, 226, 302, 515, - 517, 518, 532, 550, 558, 584, 585, nil, nil, nil, - 12800, nil, nil, 27713, nil, nil, 541, 12931, 13062, nil, - nil, nil, nil, nil, nil, nil, 13193, nil, 1843, nil, - 512, 532, nil, 13324, 585, 13455, nil, nil, 13586, 13717, - nil, nil, 221, nil, 13860, 1252, 599, 579, 1987, 626, - 687, 648, 23772, 2131, 694, 806, 873, 748, 878, nil, - 724, 691, 225, 743, 748, nil, nil, nil, 750, 221, - 707, 23911, nil, 564, 879, 3283, 3427, 778, nil, 779, - 13991, nil, 757, 2275, 1396, 721, nil, 139, 574, 760, - 743, 583, 773, nil, 577, -1, 11, 14122, 2419, 2563, - 264, 845, 727, -18, 10, 893, 810, 11, 842, nil, - nil, 441, 481, 513, nil, 962, nil, 761, 14253, nil, - 15821, nil, 193, 378, 396, 402, 412, -41, -27, 463, - nil, nil, nil, nil, nil, nil, nil, 756, 25223, nil, - nil, nil, nil, 759, nil, 835, 746, 14384, 747, nil, - nil, 736, nil, 968, 246, 850, nil, nil, 1267, nil, - nil, nil, nil, nil, 1411, 764, nil, 763, 765, 615, - 669, 14525, nil, nil, nil, nil, 222, 334, 825, nil, - nil, 14657, 14793, 14930, 908, 913, nil, nil, -1, 793, - 792, 800, nil, nil, 805, 816, 818, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 807, 3125, nil, nil, - 15061, nil, nil, nil, nil, nil, nil, nil, 902, nil, - nil, 907, 361, 15192, 950, nil, nil, nil, -35, nil, - 870, 27774, 27835, 15323, 253, 15454, 15585, 15716, 823, 828, - 25562, 25660, 3571, 3715, -45, 1018, 908, 912, 925, 927, - 5285, 5375, 5488, 3859, 4003, 4147, 4291, 4435, 4579, 3311, - 3455, 4723, 4867, 1987, 5011, nil, -33, nil, 15857, nil, - nil, nil, nil, 15987, 886, 885, 889, nil, nil, nil, - 892, nil, nil, 16118, nil, 16249, nil, 16380, nil, 329, - nil, nil, nil, 16523, 1540, nil, 918, 917, nil, nil, - 918, 24042, 923, 16666, 27896, 27957, 972, 968, nil, nil, - 24173, 925, nil, 16797, 28018, 28079, 16928, 5154, 17059, nil, - 1051, 932, 976, nil, 17190, nil, nil, 17321, nil, nil, - nil, 2707, 1056, nil, 2851, 62, 1060, 1064, 508, 1066, - 17452, 17583, 28140, 28201, 27, nil, nil, 995, nil, 28262, - 28323, 17714, nil, nil, 81, 2995, nil, 15851, nil, nil, - nil, nil, 1033, nil, nil, nil, 958, nil, nil, 153, - nil, 263, nil, nil, 944, nil, 947, nil, nil, nil, - 25351, nil, 17857, 950, 17988, 18119, 18250, 28384, 28445, 18393, - 18524, 693, 991, 18655, 18786, 18917, 19048, 997, nil, nil, - 19179, 19310, 1002, nil, 1060, 1555, 1091, 19441, nil, nil, - nil, nil, 888, nil, nil, 544, 27424, nil, 27432, nil, - 25811, nil, 961, 19572, nil, 3154, nil, 976, 978, 729, - 983, nil, nil, nil, nil, 1087, 1699, nil, nil, nil, - 277, 286, 473, 612, 1001, 19703, 19834, nil, -77, nil, - nil, nil, nil, 1023, nil, nil, nil, 582, 25758, 94, - nil, 1002, 1085, 1006, nil, nil, 25857, nil, nil, 303, - nil, nil, 654, nil, nil, 6728, 27202, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 838, 612, - nil, nil, 1016, 26000, nil, 1140, nil, 1123, 91, nil, - nil, 19965, nil, 1038, 1050, 1156, nil, 1046, nil, 1096, - 20096, nil, nil, 20227, nil, 245, 24304, 1070, nil, 1074, - 236, 250, 1120, 360, 1123, 1124, 1084, 24435, nil, 1153, - 2131, 20358, nil, nil, nil, 604, 738, nil, 1208, nil, - nil, nil, nil, nil, 1218, 1226, nil, nil, 26, 1106, - 40, 41, 151, 152, 3139, 970, 1267, nil, 1107, 3283, - 20489, nil, 1238, 63, 1118, nil, nil, nil, nil, nil, - 3427, nil, nil, nil, nil, nil, nil, nil, nil, 1117, - 20620, 1123, 306, 343, 722, 834, nil, 2275, 20751, nil, - 1122, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 20882, 21013, 1248, nil, 3571, 1124, 1173, nil, nil, - 1131, nil, 1223, nil, nil, 1142, 1143, nil, 1146, 1147, - nil, 1148, nil, nil, nil, 1153, 3184, 3164, nil, nil, - 21144, 21275, 21406, 21537, 21668, 21799, 347, 26083, 1252, 26181, - -41, 252, 26279, 26377, 622, -32, 1174, 1176, nil, 26475, - nil, 1175, 359, nil, 1196, 26573, 26671, nil, 637, 1236, - 333, nil, 27300, 27334, nil, nil, nil, nil, 21930, nil, - nil, 22061, nil, nil, 1218, nil, nil, 1234, 1218, nil, - nil, 27255, 3715, nil, nil, nil, nil, 1220, 338, nil, - -7, nil, 1345, nil, 22192, 1348, nil, nil, 26769, 22323, - 3859, 68, 1352, nil, 1354, 442, 4003, nil, nil, nil, - nil, 1231, 1281, 1252, 1247, 445, nil, nil, 22454, 2419, - 2563, nil, 4147, nil, nil, 32, 24566, nil, nil, 27449, - nil, 26073, nil, 27501, nil, 27508, nil, nil, nil, nil, - 1248, 1258, 2707, 2851, 22585, nil, 1259, nil, nil, nil, - nil, 1264, 1267, 1269, 1271, 1274, 1278, nil, nil, nil, - 1331, 1286, 1287, nil, 1293, nil, nil, 122, 1291, nil, - nil, nil, nil, nil, nil, 1295, 2995, 4291, nil, nil, - 1294, 1314, nil, 1315, 1317, 1319, nil, 1344, 1337, 1326, - 24697, nil, nil, nil, nil, nil, 33, nil, 34, 728, - nil, 615, nil, nil, nil, 1482, 4435, 4579, 1109, nil, - nil, nil, 4723, 35, 36, 1165, 1437, 42, nil, 1364, - 1365, 1368, 1372, 3651, 3795, 26867, nil, nil, nil, nil, - nil, nil, nil, 26965, nil, 370, nil, 27063, nil, nil, - 1444, nil, nil, 15876, nil, nil, 26184, nil, 14588, nil, - nil, 1398, 24828, 1309, 1460, 4867, nil, 22716, 22847, nil, - nil, nil, nil, 1410, 1515, 636, nil, nil, nil, 1518, - 22978, 28506, 28567, 98, 27526, nil, nil, nil, nil, 1397, - 1402, 1403, nil, nil, 1404, nil, nil, 1405, 1408, 1412, - 1413, nil, 1419, nil, 1411, 28628, nil, 797, 5011, nil, - nil, nil, nil, nil, 1829, nil, 1432, 102, 138, 145, - 181, 1430, 27161, nil, 26478, nil, 23287, nil, 23819, nil, - 25549, nil, nil, 1475, 1478, nil, 38, nil, 146, nil, - 1435, 1436, 1438, 1458, nil, nil, nil, 26576, nil, nil, - nil, nil, 1459, nil ] - -racc_action_default = [ - -1, -741, -4, -741, -2, -727, -5, -741, -8, -741, - -741, -741, -741, -31, -741, -741, -36, -741, -741, -637, - -637, -313, -52, -729, -741, -61, -741, -69, -70, -71, - -75, -287, -287, -287, -326, -354, -355, -87, -13, -91, - -99, -101, -741, -624, -625, -741, -741, -741, -741, -741, - -741, -239, -741, -729, -258, -304, -305, -306, -307, -308, - -309, -310, -311, -312, -717, -315, -319, -740, -705, -335, - -337, -741, -741, -63, -63, -727, -741, -741, -741, -356, - -357, -359, -360, -361, -362, -421, -563, -564, -565, -566, - -587, -569, -570, -589, -591, -574, -579, -583, -585, -601, - -602, -603, -587, -605, -607, -608, -609, -610, -611, -612, - -613, -715, -716, -616, -617, -618, -619, -620, -621, -622, - -623, -628, -629, 1234, -3, -728, -736, -737, -738, -7, - -741, -741, -741, -741, -741, -9, -4, -19, -741, -130, - -131, -132, -133, -134, -135, -136, -140, -141, -142, -143, - -144, -145, -146, -147, -148, -149, -150, -151, -152, -153, - -154, -155, -156, -157, -158, -159, -160, -161, -162, -163, - -164, -165, -166, -167, -168, -169, -170, -171, -172, -173, - -174, -175, -176, -177, -178, -179, -180, -181, -182, -183, - -184, -185, -186, -187, -188, -189, -190, -191, -192, -193, - -194, -195, -196, -197, -198, -199, -200, -201, -202, -203, - -204, -205, -206, -207, -208, -209, -210, -24, -137, -13, - -741, -741, -741, -741, -741, -277, -741, -741, -725, -726, - -741, -13, -636, -634, -660, -660, -741, -13, -741, -741, - -729, -730, -56, -741, -624, -625, -741, -313, -741, -741, - -245, -741, -637, -637, -13, -741, -57, -59, -222, -223, - -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, - -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, - -259, -260, -261, -262, -741, -65, -66, -741, -130, -131, - -170, -171, -172, -188, -193, -200, -203, -624, -625, -703, - -741, -430, -432, -741, -723, -724, -76, -277, -741, -334, - -436, -445, -447, -82, -442, -83, -729, -84, -265, -282, - -292, -292, -286, -290, -293, -295, -587, -707, -711, -714, - -85, -86, -727, -14, -741, -17, -741, -89, -13, -729, - -741, -92, -95, -13, -107, -108, -741, -741, -115, -326, - -329, -729, -741, -637, -637, -354, -355, -358, -443, -741, - -97, -741, -103, -323, -741, -224, -225, -606, -233, -234, - -741, -246, -251, -13, -317, -729, -266, -729, -729, -741, - -741, -729, -741, -336, -62, -741, -741, -741, -13, -13, - -727, -741, -728, -624, -625, -741, -741, -313, -741, -372, - -373, -125, -126, -741, -128, -741, -313, -632, -741, -350, - -660, -567, -741, -741, -741, -741, -741, -741, -741, -741, - -6, -739, -25, -26, -27, -28, -29, -741, -741, -21, - -22, -23, -138, -741, -32, -35, -300, -295, -741, -299, - -33, -741, -37, -741, -313, -49, -51, -211, -270, -293, - -53, -54, -38, -212, -270, -729, -278, -292, -292, -715, - -716, -287, -440, -717, -718, -719, -716, -715, -287, -439, - -441, -717, -719, -741, -555, -741, -385, -386, -686, -729, - -702, -702, -642, -643, -645, -645, -645, -659, -661, -662, - -663, -664, -665, -666, -667, -668, -669, -741, -671, -673, - -675, -680, -682, -683, -684, -691, -693, -694, -696, -697, - -698, -700, -741, -741, -741, -48, -219, -55, -729, -333, - -741, -741, -741, -277, -323, -741, -741, -741, -741, -741, - -741, -741, -220, -221, -226, -227, -228, -229, -230, -231, - -235, -236, -237, -238, -240, -241, -242, -243, -244, -247, - -248, -249, -250, -729, -263, -67, -729, -451, -287, -715, - -716, -73, -77, -661, -729, -292, -729, -288, -449, -451, - -729, -328, -283, -741, -284, -741, -289, -741, -294, -741, - -710, -713, -12, -728, -16, -18, -729, -88, -321, -104, - -93, -741, -729, -277, -741, -741, -114, -741, -636, -606, - -741, -100, -105, -741, -741, -741, -741, -264, -741, -330, - -741, -729, -741, -267, -735, -734, -269, -735, -324, -325, - -706, -13, -363, -364, -13, -741, -741, -741, -741, -741, - -741, -277, -741, -741, -323, -63, -125, -126, -127, -741, - -741, -277, -346, -630, -741, -13, -422, -660, -425, -568, - -588, -593, -741, -595, -571, -590, -741, -592, -573, -741, - -576, -741, -578, -581, -741, -582, -741, -604, -10, -20, - -741, -30, -741, -303, -741, -741, -277, -741, -741, -741, - -741, -444, -741, -279, -281, -741, -741, -78, -276, -437, - -741, -741, -80, -438, -44, -254, -740, -740, -352, -524, - -685, -635, -741, -640, -641, -741, -741, -652, -741, -655, - -741, -657, -741, -741, -374, -741, -376, -378, -381, -384, - -729, -674, -695, -699, -638, -46, -256, -353, -332, -731, - -715, -716, -715, -716, -729, -741, -741, -58, -465, -468, - -469, -470, -471, -473, -475, -478, -479, -534, -729, -491, - -494, -504, -508, -513, -515, -516, -519, -520, -587, -523, - -525, -526, -527, -532, -533, -741, -741, -537, -538, -539, - -540, -541, -542, -543, -544, -545, -546, -547, -741, -741, - -553, -60, -741, -741, -704, -741, -452, -72, -433, -449, - -272, -279, -274, -741, -411, -741, -327, -292, -291, -296, - -298, -708, -709, -741, -15, -90, -741, -96, -102, -729, - -715, -716, -275, -720, -113, -741, -98, -741, -218, -232, - -252, -741, -316, -318, -320, -729, -740, -365, -740, -64, - -366, -367, -340, -341, -741, -741, -457, -343, -741, -729, - -715, -716, -720, -322, -13, -125, -126, -129, -729, -13, - -741, -348, -741, -741, -729, -594, -597, -598, -599, -600, - -13, -572, -575, -577, -580, -584, -586, -139, -34, -301, - -298, -729, -715, -716, -716, -715, -50, -271, -741, -732, - -292, -40, -214, -41, -215, -79, -42, -217, -43, -216, - -81, -741, -741, -740, -370, -13, -556, -740, -557, -558, - -702, -681, -686, -701, -644, -645, -645, -672, -645, -645, - -692, -645, -669, -388, -687, -729, -741, -741, -383, -670, - -741, -741, -741, -741, -741, -741, -444, -466, -741, -741, - -476, -477, -741, -741, -741, -496, -729, -729, -490, -497, - -501, -741, -741, -493, -741, -741, -741, -507, -514, -518, - -741, -522, -530, -531, -535, -536, -548, -549, -741, -126, - -551, -741, -68, -431, -411, -435, -434, -741, -729, -446, - -412, -729, -13, -448, -285, -297, -712, -94, -444, -106, - -729, -268, -741, -368, -741, -741, -342, -344, -741, -741, - -13, -444, -741, -444, -741, -741, -13, -351, -423, -426, - -428, -415, -741, -741, -302, -444, -39, -213, -280, -45, - -255, -11, -13, -562, -371, -741, -741, -560, -639, -741, - -648, -741, -650, -741, -653, -741, -656, -658, -375, -377, - -379, -382, -47, -257, -741, -467, -504, -472, -474, -483, - -487, -729, -729, -729, -729, -729, -729, -552, -488, -489, - -511, -498, -499, -502, -729, -587, -733, -729, -505, -509, - -512, -517, -521, -528, -529, -729, -253, -13, -74, -273, - -702, -702, -392, -394, -394, -394, -410, -741, -729, -669, - -677, -678, -689, -450, -331, -338, -741, -339, -741, -462, - -296, -740, -345, -347, -631, -741, -13, -13, -741, -424, - -596, -561, -13, -624, -625, -741, -741, -313, -559, -645, - -645, -645, -645, -741, -741, -741, -480, -481, -482, -484, - -485, -486, -503, -741, -492, -741, -495, -741, -550, -453, - -741, -390, -391, -395, -401, -403, -741, -406, -741, -408, - -413, -741, -741, -676, -741, -13, -458, -741, -741, -454, - -455, -456, -349, -741, -741, -729, -417, -419, -420, -555, - -277, -741, -741, -323, -741, -646, -649, -651, -654, -380, - -505, -500, -506, -510, -702, -679, -393, -394, -394, -394, - -394, -690, -394, -414, -688, -741, -323, -740, -13, -463, - -464, -427, -429, -416, -741, -554, -729, -715, -716, -720, - -322, -645, -741, -389, -741, -398, -741, -400, -741, -404, - -741, -407, -409, -322, -720, -369, -740, -418, -444, -647, - -394, -394, -394, -394, -459, -460, -461, -741, -396, -399, - -402, -405, -394, -397 ] - -racc_goto_table = [ - 44, 412, 475, 341, 340, 44, 142, 142, 514, 319, - 319, 319, 696, 419, 233, 233, 226, 302, 286, 638, - 496, 496, 142, 285, 298, 383, 128, 304, 455, 385, - 386, 714, 893, 390, 137, 218, 44, 345, 345, 145, - 145, 713, 15, 629, 357, 357, 835, 15, 388, 389, - 566, 703, 704, 900, 461, 468, 907, 621, 624, 737, - 781, 562, 376, 125, 44, 135, 574, 310, 314, 982, - 439, 440, 242, 124, 394, 298, 298, 798, 15, 798, - 801, 357, 357, 357, 306, 313, 315, 237, 422, 423, - 424, 425, 367, 910, 303, 906, 128, 908, 793, 17, - 740, 740, 446, 360, 17, 446, 15, 337, 1029, 601, - 564, 613, 616, 479, 512, 620, 399, 487, 487, 446, - 720, 1031, 801, 44, 707, 709, 711, 1036, 320, 320, - 320, 558, 44, 1002, 44, 17, 4, 972, 339, 1052, - 943, 452, 129, 391, 610, 785, 1074, 1, 903, 1156, - 1158, 903, 2, 1181, 1011, 515, 804, 795, 936, 1043, - 1046, 377, 217, 17, 985, 15, 407, 409, 400, 1054, - 659, 661, 598, 598, 15, 435, 15, 954, 955, 8, - 317, 330, 331, 428, 8, 433, 530, 798, 798, 801, - 531, 829, 1051, 287, 783, 789, 496, 759, 759, 1059, - 319, 670, 370, 574, 1058, 608, 379, 788, 299, 380, - 398, 642, 373, 655, 657, 660, 660, 44, 611, 375, - 340, 1181, 17, 472, 821, 849, 996, 645, 1030, 44, - 937, 17, 1076, 17, 1134, 44, 1078, 579, 1155, 230, - 236, 521, 646, 374, 998, 1217, 1158, 233, 233, 714, - 1077, 410, 44, 918, 853, 847, 738, 738, 1096, 15, - 420, 441, 462, 1097, 441, 557, 568, 569, 434, 445, - 427, 15, 445, 964, 1149, 1088, 1224, 15, 441, 988, - 834, 1188, 319, 319, 1037, 304, 445, 1038, 932, 648, - 933, 319, 942, 487, 15, 798, 321, 321, 321, 945, - 1060, 1061, 8, 957, 340, 897, 1029, 1067, 1177, 340, - 1015, 426, 411, 8, 438, 438, 17, 1169, 17, 967, - 237, 17, 464, 464, 413, 602, 734, 1172, 17, 378, - 381, 414, 44, 415, 17, 17, 44, 1035, 915, 807, - 345, 44, 1041, 1044, 594, 625, 416, 357, 816, 461, - 468, 17, 555, 128, 626, 627, 417, 1141, 418, 345, - 1075, 855, 604, 860, 1063, 1064, 357, 850, 1059, 902, - 905, 44, 901, 1170, 15, 907, 1059, 1175, 15, nil, - 1173, 1171, nil, 15, nil, nil, 44, 44, 310, nil, - 583, nil, 585, 632, 314, 960, 809, nil, nil, 464, - 582, 565, 320, 599, 910, 590, nil, 337, 1109, nil, - 320, 128, 337, 15, 1042, 1045, 852, 1072, nil, nil, - nil, 237, 812, nil, 142, 761, 761, 1150, 15, 15, - 1215, 17, 812, 496, 839, 17, nil, nil, 586, nil, - 17, 677, 885, 592, 848, 1124, nil, 890, 694, nil, - 714, 714, 669, nil, 567, 1173, nil, 145, 628, 863, - 812, 863, 570, nil, nil, nil, 239, nil, 812, nil, - 17, 1018, 528, 529, 935, nil, 384, 384, nil, 871, - 384, 1174, 949, 907, nil, 17, 17, nil, 725, nil, - nil, nil, 496, 519, 496, nil, 372, 688, 319, nil, - nil, nil, nil, nil, 693, 461, 468, nil, nil, nil, - 990, 584, 798, 801, 687, nil, nil, 1089, 472, nil, - nil, 692, 1178, nil, nil, 1179, 854, nil, 775, 775, - 487, nil, nil, 724, 968, 384, 384, 384, 384, 909, - nil, 911, 974, nil, nil, 1020, 1022, 898, 1024, 1026, - 1047, 1027, 1225, nil, 977, 602, 446, 462, 740, 981, - 907, nil, nil, nil, 602, nil, 446, 446, 319, 571, - 321, 446, 446, nil, nil, nil, 903, nil, 321, 1072, - nil, 44, 1072, nil, 1072, nil, nil, 826, nil, 345, - 828, 472, 587, 1220, 688, nil, 357, nil, 345, 759, - 759, 472, 881, 883, nil, 357, 319, 886, 888, 759, - 844, 787, nil, nil, nil, 759, 319, 464, 464, 44, - 994, nil, 44, 15, 1142, 974, nil, 450, 451, 472, - 462, nil, nil, nil, 1226, 472, nil, nil, nil, nil, - 462, 1131, 1132, 44, 517, 518, 830, 714, 714, nil, - 1072, 319, 1072, 935, 1072, 759, 1072, nil, 935, 935, - nil, 15, nil, nil, 15, 851, 142, nil, 462, 950, - 44, 1057, nil, 1072, 472, nil, 462, 44, nil, nil, - 17, nil, nil, nil, nil, 15, nil, 1102, nil, nil, - 464, 464, 899, nil, 867, nil, nil, 1195, nil, 145, - 464, 464, nil, nil, nil, 556, nil, nil, nil, nil, - nil, nil, 15, 462, 738, 441, nil, nil, 17, 15, - nil, 17, nil, 445, 838, 441, 441, nil, 464, 464, - 441, 441, 701, 445, 445, 464, 464, nil, 445, 445, - nil, nil, 17, 1151, 966, 1203, 775, nil, 1071, 1165, - 1166, 1167, 1168, nil, 775, nil, nil, 1079, 1145, 446, - 1146, nil, nil, 775, 775, nil, nil, 1095, nil, 17, - 602, 728, 17, 464, 464, 962, 17, 965, nil, 142, - 285, 979, 17, 17, nil, nil, nil, 17, 17, nil, - nil, 438, 384, nil, 597, 1006, nil, 902, nil, nil, - nil, nil, 1073, nil, 345, 496, nil, nil, 995, 784, - 992, 357, nil, 644, nil, 345, nil, 790, 612, 792, - 615, 615, 357, 796, 615, nil, 1003, 761, 761, nil, - nil, nil, nil, nil, nil, 797, nil, 761, 1129, 805, - 1080, 1219, 44, 761, nil, 808, nil, 44, 688, 868, - 1110, 693, 1111, nil, 1112, nil, 876, nil, 44, nil, - nil, 1014, nil, nil, 823, nil, nil, nil, 1154, nil, - nil, nil, nil, nil, nil, nil, 825, nil, nil, nil, - nil, nil, nil, 761, 15, nil, nil, 453, 1013, 15, - nil, nil, 1017, 44, nil, nil, nil, nil, 682, nil, - 15, 516, nil, nil, nil, nil, nil, nil, nil, nil, - 1071, nil, nil, 1071, 382, 1071, 1065, nil, 441, 1079, - nil, nil, 1079, nil, nil, 775, 445, 775, nil, nil, - 775, 775, nil, nil, nil, 15, nil, 775, 1083, nil, - nil, 17, 1086, 775, 775, 880, 17, nil, nil, nil, - 775, 775, nil, nil, nil, nil, 1091, 17, nil, nil, - nil, nil, nil, 1196, nil, nil, 1125, 1180, nil, 1182, - 44, nil, nil, 919, nil, 17, nil, nil, 1101, nil, - nil, 1071, nil, 1071, nil, 1071, 775, 1071, 44, 812, - 1079, nil, 17, nil, 44, 1201, 782, nil, nil, 1080, - nil, nil, 1080, nil, 1071, 1080, nil, 1080, nil, nil, - 44, nil, 15, nil, 1104, nil, 1094, nil, nil, nil, - nil, 357, nil, nil, nil, nil, nil, nil, nil, nil, - 15, nil, nil, nil, nil, 1221, 15, 1222, nil, 1223, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 15, 880, nil, nil, 1108, nil, 1232, nil, - nil, nil, 1153, nil, nil, 44, 436, 449, 1159, 17, - nil, nil, nil, 1080, nil, 1080, nil, 1080, 298, 1080, - nil, nil, nil, nil, nil, 357, 18, 17, nil, nil, - nil, 18, nil, 17, 44, 44, 1080, 1135, 1137, 1139, - 44, nil, nil, 1161, nil, 1189, 1190, 15, 243, 17, - nil, 1187, nil, 775, nil, nil, nil, nil, 243, 243, - 243, 775, 18, 346, 346, 775, nil, nil, nil, nil, - nil, nil, 681, nil, nil, 319, 15, 15, nil, nil, - 298, nil, 15, 44, nil, nil, nil, 357, nil, nil, - 18, nil, nil, nil, 1216, 243, 243, nil, 472, 243, - 395, 405, 405, nil, 17, nil, nil, nil, 1028, 576, - nil, 578, nil, nil, 580, 581, nil, 682, nil, nil, - nil, 472, nil, 1039, nil, 15, 44, nil, 516, nil, - 453, 682, 944, 17, 17, nil, nil, 462, nil, 17, - 775, 1205, 1207, 1209, 1211, nil, 1212, nil, nil, 18, - nil, nil, nil, nil, 243, 243, 243, 243, 18, nil, - 18, 1069, nil, nil, nil, nil, 980, nil, 15, nil, - nil, nil, nil, 1084, nil, nil, nil, nil, nil, nil, - nil, nil, 17, nil, 1228, 1229, 1230, 1231, nil, nil, - nil, nil, 682, nil, nil, 384, 1233, 464, 464, nil, - nil, nil, nil, nil, nil, nil, 818, nil, 615, nil, - nil, nil, nil, nil, nil, nil, nil, 767, 767, nil, - nil, 464, 682, 673, nil, 17, nil, nil, nil, nil, - nil, 682, nil, nil, 1116, 1117, 1118, 1001, nil, nil, - nil, nil, nil, 18, 243, 443, 243, 243, 443, 243, - 1126, nil, nil, nil, 682, 18, nil, nil, 1128, nil, - nil, 18, 443, 243, 243, nil, nil, nil, nil, nil, - nil, nil, 19, nil, nil, nil, nil, 19, 18, nil, - nil, nil, nil, nil, nil, nil, 721, nil, 882, 884, - nil, nil, nil, 887, 889, nil, nil, nil, nil, nil, - nil, nil, nil, 384, nil, nil, nil, nil, 19, 353, - 353, nil, nil, nil, 682, nil, nil, nil, nil, 682, - 682, nil, nil, nil, 243, 768, 768, nil, nil, 384, - nil, 243, 243, nil, nil, nil, 19, nil, nil, nil, - 243, nil, nil, nil, nil, 20, 353, 353, 353, nil, - 20, 926, nil, nil, 1001, nil, nil, nil, 18, 799, - nil, 382, 18, 802, nil, 938, 346, 18, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 20, 354, 354, nil, 346, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 19, nil, 18, nil, nil, - 799, nil, nil, 382, 19, nil, 19, nil, nil, 20, - nil, 243, 18, 18, nil, nil, 449, nil, nil, 354, - 354, 354, nil, nil, nil, nil, 978, 682, 682, 682, - nil, nil, 243, nil, nil, 767, nil, 944, nil, nil, - nil, nil, nil, 767, nil, nil, nil, nil, nil, nil, - nil, nil, 767, 767, nil, nil, 991, nil, nil, nil, - 869, 1001, nil, nil, nil, 993, nil, nil, 20, 799, - 382, nil, nil, nil, nil, nil, nil, 20, nil, 20, - nil, 1007, nil, 896, nil, nil, nil, nil, 1005, 19, - nil, 19, 384, 384, 19, nil, nil, 243, nil, 914, - nil, 19, nil, nil, nil, nil, nil, 19, 19, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 19, 882, 884, 889, 887, nil, - nil, nil, nil, nil, nil, nil, nil, 243, 1193, nil, - nil, nil, nil, 768, nil, nil, nil, 243, 1040, nil, - nil, 768, nil, 1048, 1049, nil, nil, nil, nil, nil, - 768, 768, 20, nil, 20, nil, nil, 20, nil, nil, - nil, nil, nil, nil, 20, nil, nil, 799, nil, 682, - 20, 20, nil, nil, nil, nil, 975, nil, nil, 976, - nil, nil, nil, nil, nil, nil, nil, 20, nil, nil, - nil, 769, 769, nil, 19, nil, nil, 18, 19, nil, - nil, nil, 353, 19, 767, 346, 767, 243, nil, 767, - 767, nil, nil, nil, 346, nil, 767, nil, nil, nil, - nil, 353, 767, 767, nil, nil, nil, 1007, nil, 767, - 767, nil, nil, 19, nil, 18, nil, nil, 18, nil, - nil, nil, nil, nil, nil, 243, 1004, nil, 19, 19, - nil, 1119, 1120, 1121, nil, 243, nil, nil, nil, 18, - nil, nil, nil, nil, nil, 767, nil, 20, nil, nil, - nil, 20, nil, nil, nil, 354, 20, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 18, nil, nil, 443, - 243, nil, nil, 18, 354, nil, nil, nil, nil, 443, - 443, nil, nil, nil, 443, 443, 20, nil, nil, nil, - nil, nil, 768, nil, 768, nil, nil, 768, 768, nil, - nil, 20, 20, nil, 768, nil, nil, nil, nil, nil, - 768, 768, nil, nil, nil, nil, nil, 768, 768, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 1090, nil, nil, nil, nil, - nil, nil, nil, 768, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 382, nil, nil, nil, nil, nil, - nil, nil, 767, nil, nil, nil, nil, nil, nil, nil, - 767, nil, nil, 1218, 767, nil, nil, nil, nil, 769, - nil, nil, nil, nil, nil, nil, nil, 769, nil, nil, - 346, nil, nil, nil, nil, nil, 769, 769, nil, nil, - nil, 346, nil, nil, nil, 243, nil, nil, nil, 21, - nil, nil, nil, 19, 21, nil, nil, nil, nil, nil, - nil, 353, nil, nil, nil, nil, nil, nil, 18, nil, - 353, nil, nil, 18, 243, nil, nil, nil, nil, nil, - nil, nil, 770, 770, 18, 21, 348, 348, nil, 767, - nil, 19, nil, nil, 19, nil, nil, nil, nil, nil, - nil, nil, 443, nil, nil, nil, nil, nil, nil, nil, - 768, nil, nil, 21, nil, 19, nil, nil, 768, 18, - 771, 771, 768, 397, 406, 406, 20, nil, nil, nil, - nil, nil, nil, nil, 354, nil, nil, nil, nil, nil, - nil, nil, 19, 354, nil, 19, nil, nil, nil, 19, - nil, nil, nil, nil, nil, 19, 19, nil, nil, nil, - 19, 19, nil, nil, 20, nil, nil, 20, nil, nil, - nil, nil, 21, nil, nil, nil, nil, nil, 772, 772, - nil, 21, 243, 21, nil, nil, nil, nil, 20, nil, - nil, nil, nil, nil, nil, nil, 18, 768, 769, nil, - 769, nil, nil, 769, 769, nil, nil, nil, 243, nil, - 769, nil, nil, nil, 18, 20, 769, 769, 20, nil, - 18, nil, 20, 769, 769, nil, nil, nil, 20, 20, - nil, nil, nil, 20, 20, nil, 18, nil, nil, nil, - 1105, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 769, - nil, nil, nil, nil, nil, nil, 21, nil, 444, nil, - nil, 444, nil, nil, nil, nil, 353, nil, 21, nil, - nil, nil, nil, nil, 21, 444, nil, 353, nil, nil, - nil, 18, nil, nil, nil, nil, nil, nil, nil, nil, - 770, 21, nil, nil, 1143, nil, nil, nil, 770, nil, - nil, nil, nil, nil, 19, nil, nil, 770, 770, 19, - 18, 18, nil, nil, nil, nil, 18, nil, nil, nil, - 19, nil, nil, nil, nil, nil, nil, nil, 771, nil, - nil, nil, nil, nil, nil, nil, 771, nil, 19, 354, - nil, nil, nil, nil, nil, 771, 771, nil, nil, nil, - 354, nil, nil, nil, nil, 19, 1184, nil, nil, 18, - nil, 243, 243, nil, nil, nil, nil, nil, nil, nil, - nil, 21, nil, nil, 243, 21, 769, 20, nil, 348, - 21, nil, 20, nil, 769, nil, 772, nil, 769, nil, - nil, nil, nil, 20, 772, nil, nil, nil, 348, nil, - nil, nil, 18, 772, 772, nil, nil, nil, nil, nil, - 21, 20, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 21, 21, nil, 20, nil, - nil, nil, 19, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 19, nil, nil, nil, nil, nil, 19, nil, nil, nil, - nil, nil, nil, 769, nil, nil, nil, nil, nil, 770, - nil, 770, 19, nil, 770, 770, 353, nil, nil, nil, - nil, 770, nil, nil, nil, nil, nil, 770, 770, nil, - nil, nil, nil, nil, 770, 770, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 20, nil, 771, nil, 771, - nil, nil, 771, 771, nil, nil, nil, nil, nil, 771, - nil, nil, nil, 20, nil, 771, 771, 19, nil, 20, - 770, nil, 771, 771, nil, nil, nil, nil, nil, nil, - 353, nil, nil, nil, nil, 20, nil, nil, nil, 354, - nil, nil, nil, nil, nil, nil, 19, 19, nil, nil, - nil, nil, 19, nil, nil, 772, nil, 772, 771, nil, - 772, 772, nil, nil, nil, nil, nil, 772, nil, nil, - nil, nil, nil, 772, 772, nil, nil, nil, nil, nil, - 772, 772, nil, nil, nil, nil, nil, nil, nil, nil, - 20, nil, 353, 773, 773, 19, nil, nil, nil, nil, - nil, nil, nil, 354, nil, nil, nil, nil, nil, nil, - 21, nil, nil, nil, nil, nil, 772, nil, 348, 20, - 20, nil, nil, nil, nil, 20, nil, 348, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 19, nil, - nil, nil, nil, nil, nil, nil, nil, 770, 21, nil, - nil, 21, nil, nil, nil, 770, nil, nil, nil, 770, - nil, nil, 31, nil, nil, 354, nil, 31, 20, nil, - nil, nil, 21, nil, nil, nil, nil, nil, nil, 859, - nil, nil, nil, nil, 31, 771, nil, nil, nil, nil, - nil, nil, nil, 771, 31, 31, 31, 771, 31, 21, - nil, nil, 444, nil, 43, nil, 21, nil, nil, 43, - nil, 20, 444, 444, nil, nil, nil, 444, 444, nil, - nil, nil, nil, nil, nil, nil, 31, nil, 297, nil, - nil, 31, 31, nil, 770, 31, nil, nil, nil, nil, - 43, 344, 344, 772, nil, nil, nil, nil, nil, nil, - nil, 772, nil, nil, nil, 772, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 43, nil, - nil, nil, 771, nil, nil, nil, nil, nil, 393, 297, - 297, nil, nil, nil, nil, 31, nil, nil, nil, nil, - 31, 31, 31, 31, 31, nil, 31, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 773, nil, nil, nil, nil, nil, nil, nil, 773, - nil, nil, nil, nil, nil, nil, nil, 43, 773, 773, - 772, nil, nil, 348, nil, nil, 43, nil, 43, nil, - nil, nil, nil, nil, 348, nil, nil, nil, nil, nil, - nil, nil, 774, 774, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 21, nil, nil, nil, nil, 21, nil, nil, 31, - 31, 31, 31, 31, 31, 31, nil, 21, nil, nil, - nil, 31, nil, nil, nil, nil, nil, 31, 31, 31, - 31, nil, nil, nil, nil, 444, nil, nil, nil, nil, - nil, nil, nil, nil, 31, nil, nil, nil, nil, nil, - nil, 43, 21, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 43, nil, nil, nil, nil, nil, 43, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 43, nil, nil, nil, - 31, nil, nil, nil, nil, nil, nil, 31, 31, nil, - nil, nil, nil, nil, nil, nil, 31, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 773, nil, 773, nil, 31, 773, 773, nil, 31, 21, - nil, nil, 773, 31, nil, nil, nil, nil, 773, 773, - nil, nil, nil, nil, nil, 773, 773, 21, nil, nil, - nil, nil, nil, 21, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 31, nil, nil, 43, nil, nil, 21, - 43, nil, nil, 1107, 344, 43, nil, 31, 31, 31, - nil, 773, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 344, nil, nil, nil, nil, 31, nil, - 774, nil, nil, nil, nil, 43, nil, 34, 774, nil, - nil, nil, 34, nil, nil, nil, nil, 774, 774, nil, - 43, 43, nil, nil, 21, nil, nil, nil, nil, 34, - nil, nil, nil, nil, nil, nil, nil, 406, nil, 34, - 34, 34, nil, 34, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 21, 21, nil, nil, nil, nil, 21, - nil, nil, nil, 31, nil, nil, nil, nil, nil, nil, - nil, 34, nil, nil, nil, nil, 34, 34, nil, nil, - 34, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 406, - 776, 776, 21, 31, nil, nil, nil, nil, 773, nil, - nil, nil, nil, 31, nil, nil, 773, nil, nil, nil, - 773, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 34, nil, nil, nil, nil, 34, 34, 34, 34, 34, - nil, 34, nil, nil, nil, 21, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 31, nil, nil, nil, nil, nil, 774, - nil, 774, nil, 31, 774, 774, nil, nil, nil, nil, - nil, 774, nil, nil, nil, 773, nil, 774, 774, nil, - nil, nil, nil, nil, 774, 774, nil, nil, nil, nil, - nil, 31, nil, nil, 31, 43, nil, nil, nil, nil, - nil, 31, nil, 344, 34, 34, 34, 34, 34, 34, - 34, 31, 344, nil, nil, 31, 34, nil, nil, nil, - 774, nil, 34, 34, 34, 34, nil, nil, nil, nil, - nil, nil, nil, 43, nil, nil, 43, nil, nil, 34, - nil, nil, 31, nil, nil, 31, 31, nil, nil, 31, - nil, nil, nil, nil, nil, 31, 31, 43, nil, nil, - 31, 31, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 43, 34, nil, nil, nil, nil, - nil, 43, 34, 34, nil, nil, nil, nil, 776, nil, - nil, 34, nil, nil, nil, nil, 776, nil, nil, nil, - nil, nil, nil, nil, nil, 776, 776, nil, nil, 34, - nil, nil, nil, 34, nil, nil, nil, nil, 34, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 774, nil, nil, - nil, nil, nil, nil, nil, 774, nil, nil, 34, 774, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 34, 34, 34, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 31, nil, 34, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 31, nil, nil, nil, 344, 31, - 31, nil, nil, nil, nil, nil, nil, nil, nil, 344, - 31, nil, nil, nil, 774, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 31, nil, - nil, nil, nil, nil, nil, nil, 43, nil, 34, nil, - nil, 43, nil, nil, nil, 31, nil, nil, nil, nil, - nil, nil, 43, nil, nil, nil, nil, 776, nil, 776, - nil, nil, 776, 776, nil, nil, nil, nil, nil, 776, - nil, nil, nil, nil, nil, 776, 776, nil, 34, nil, - nil, nil, 776, 776, nil, nil, nil, 43, 34, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 31, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 776, nil, - nil, nil, 31, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 31, nil, nil, nil, nil, nil, - 31, nil, nil, nil, nil, nil, 31, nil, 34, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 34, nil, - nil, nil, 31, nil, 43, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 43, nil, nil, nil, 34, nil, 43, 34, - nil, nil, nil, nil, nil, nil, 34, nil, nil, nil, - nil, nil, nil, nil, 43, nil, 34, nil, 1103, nil, - 34, nil, nil, nil, nil, nil, nil, 31, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 34, nil, nil, - 34, 34, nil, nil, 34, 776, 31, 31, nil, nil, - 34, 34, 31, 776, nil, 34, 34, 776, 250, 43, - nil, nil, nil, nil, nil, nil, nil, nil, 318, 318, - 318, nil, 297, nil, nil, nil, nil, nil, nil, nil, - 365, 366, nil, 368, 369, nil, 371, nil, 43, 43, - nil, nil, nil, nil, 43, 31, nil, 31, 31, nil, - nil, 318, 318, nil, nil, nil, nil, nil, nil, nil, - 31, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 776, nil, 297, nil, nil, 43, 31, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 43, nil, nil, nil, nil, nil, 34, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 34, - nil, nil, nil, nil, 34, 34, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 34, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 34, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 318, 448, nil, nil, 454, 318, - 34, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 454, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 250, nil, nil, nil, nil, - nil, nil, 532, 533, 534, 535, 536, 537, 538, 539, - 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, - 550, 551, 552, 553, nil, nil, nil, nil, 554, nil, - nil, nil, nil, 34, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 34, nil, nil, - nil, 318, 318, nil, nil, nil, nil, nil, nil, 34, - 318, nil, nil, nil, nil, 34, nil, 318, nil, 318, - nil, 34, 318, 318, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 34, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 607, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 34, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 34, 34, nil, nil, nil, nil, 34, nil, nil, - nil, 318, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 695, nil, nil, - 34, nil, 34, 34, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 34, nil, nil, nil, nil, - nil, nil, nil, nil, 318, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 726, nil, nil, - nil, nil, nil, 34, nil, nil, nil, 318, nil, 454, - 454, 454, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 366, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 318, nil, 318, - nil, 318, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 318, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 454, nil, nil, - 819, nil, 820, nil, nil, nil, nil, nil, 318, nil, - nil, 318, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 318, 318, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 318, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 318, 454, - 318, nil, nil, nil, 877, nil, nil, 318, 318, 454, - 454, nil, nil, nil, 454, 454, nil, nil, nil, nil, - nil, 318, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 318, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 695, - 726, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 318, nil, nil, nil, nil, - nil, nil, nil, nil, 318, nil, nil, 318, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 318, nil, nil, nil, nil, nil, - nil, nil, 454, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 1009, 1010, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 1032, 1033, 454, 454, 454, 454, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 1066, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 318, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 318, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 454, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 318 ] - -racc_goto_check = [ - 72, 198, 10, 68, 11, 72, 75, 75, 10, 36, - 36, 36, 12, 198, 87, 87, 33, 158, 46, 73, - 230, 230, 75, 48, 72, 107, 117, 33, 31, 19, - 19, 128, 13, 19, 17, 17, 72, 72, 72, 77, - 77, 135, 23, 112, 82, 82, 113, 23, 44, 44, - 92, 139, 139, 133, 55, 55, 231, 110, 110, 41, - 41, 57, 87, 7, 72, 9, 94, 91, 91, 111, - 24, 24, 22, 5, 72, 72, 72, 95, 23, 95, - 239, 82, 82, 82, 56, 56, 56, 119, 19, 19, - 19, 19, 80, 235, 51, 146, 117, 146, 58, 29, - 177, 177, 20, 69, 29, 20, 23, 64, 127, 70, - 31, 89, 89, 157, 157, 89, 23, 225, 225, 20, - 129, 130, 239, 72, 228, 228, 228, 192, 88, 88, - 88, 55, 72, 149, 72, 29, 2, 147, 65, 192, - 187, 28, 6, 5, 10, 161, 145, 1, 140, 151, - 152, 140, 3, 236, 14, 28, 16, 161, 175, 178, - 178, 88, 18, 29, 13, 23, 74, 74, 21, 178, - 214, 214, 224, 224, 23, 25, 23, 202, 202, 8, - 63, 63, 63, 27, 8, 11, 42, 95, 95, 239, - 43, 45, 191, 50, 52, 60, 230, 200, 200, 191, - 36, 78, 83, 94, 193, 84, 86, 93, 105, 106, - 114, 116, 120, 215, 215, 215, 215, 72, 121, 122, - 11, 236, 29, 75, 123, 124, 125, 126, 131, 72, - 176, 29, 136, 29, 142, 72, 143, 198, 150, 35, - 35, 33, 153, 8, 154, 151, 152, 87, 87, 128, - 149, 155, 72, 128, 156, 73, 174, 174, 159, 23, - 6, 23, 91, 160, 23, 162, 164, 165, 22, 22, - 2, 23, 22, 168, 169, 170, 171, 23, 23, 172, - 112, 173, 36, 36, 180, 33, 22, 182, 183, 157, - 184, 36, 188, 225, 23, 95, 90, 90, 90, 189, - 195, 196, 8, 205, 11, 206, 127, 147, 145, 11, - 207, 8, 210, 8, 88, 88, 29, 130, 29, 58, - 119, 29, 61, 61, 211, 68, 31, 192, 29, 90, - 90, 212, 72, 213, 29, 29, 72, 175, 129, 70, - 72, 72, 175, 175, 33, 19, 216, 82, 70, 55, - 55, 29, 51, 117, 11, 11, 217, 149, 218, 72, - 146, 219, 33, 220, 202, 202, 82, 223, 191, 200, - 229, 72, 233, 193, 23, 231, 191, 234, 23, nil, - 191, 193, nil, 23, nil, nil, 72, 72, 91, nil, - 7, nil, 9, 33, 91, 73, 31, nil, nil, 61, - 5, 88, 88, 80, 235, 69, nil, 64, 146, nil, - 88, 117, 64, 23, 176, 176, 10, 140, nil, nil, - nil, 119, 55, nil, 75, 201, 201, 13, 23, 23, - 111, 29, 55, 230, 31, 29, nil, nil, 65, nil, - 29, 33, 57, 65, 31, 187, nil, 57, 36, nil, - 128, 128, 17, nil, 63, 191, nil, 77, 5, 215, - 55, 215, 63, nil, nil, nil, 40, nil, 55, nil, - 29, 139, 35, 35, 174, nil, 26, 26, nil, 31, - 26, 133, 174, 231, nil, 29, 29, nil, 36, nil, - nil, nil, 230, 66, 230, nil, 40, 91, 36, nil, - nil, nil, nil, nil, 91, 55, 55, nil, nil, nil, - 110, 8, 95, 239, 56, nil, nil, 41, 75, nil, - nil, 56, 146, nil, nil, 146, 157, nil, 72, 72, - 225, nil, nil, 117, 92, 26, 26, 26, 26, 144, - nil, 144, 94, nil, nil, 228, 228, 24, 228, 228, - 73, 228, 13, nil, 70, 68, 20, 91, 177, 89, - 231, nil, nil, nil, 68, nil, 20, 20, 36, 66, - 90, 20, 20, nil, nil, nil, 140, nil, 90, 140, - nil, 72, 140, nil, 140, nil, nil, 11, nil, 72, - 11, 75, 66, 146, 91, nil, 82, nil, 72, 200, - 200, 75, 28, 28, nil, 82, 36, 28, 28, 200, - 44, 56, nil, nil, nil, 200, 36, 61, 61, 72, - 10, nil, 72, 23, 135, 94, nil, 26, 26, 75, - 91, nil, nil, nil, 113, 75, nil, nil, nil, nil, - 91, 139, 139, 72, 26, 26, 117, 128, 128, nil, - 140, 36, 140, 174, 140, 200, 140, nil, 174, 174, - nil, 23, nil, nil, 23, 117, 75, nil, 91, 198, - 72, 174, nil, 140, 75, nil, 91, 72, nil, nil, - 29, nil, nil, nil, nil, 23, nil, 110, nil, nil, - 61, 61, 87, nil, 17, nil, nil, 12, nil, 77, - 61, 61, nil, nil, nil, 26, nil, nil, nil, nil, - nil, nil, 23, 91, 174, 23, nil, nil, 29, 23, - nil, 29, nil, 22, 88, 23, 23, nil, 61, 61, - 23, 23, 66, 22, 22, 61, 61, nil, 22, 22, - nil, nil, 29, 112, 107, 139, 72, nil, 132, 228, - 228, 228, 228, nil, 72, nil, nil, 230, 110, 20, - 110, nil, nil, 72, 72, nil, nil, 10, nil, 29, - 68, 66, 29, 61, 61, 46, 29, 158, nil, 75, - 48, 68, 29, 29, nil, nil, nil, 29, 29, nil, - nil, 88, 26, nil, 40, 28, nil, 200, nil, nil, - nil, nil, 144, nil, 72, 230, nil, nil, 19, 66, - 11, 82, nil, 26, nil, 72, nil, 66, 40, 66, - 40, 40, 82, 66, 40, nil, 11, 201, 201, nil, - nil, nil, nil, nil, nil, 90, nil, 201, 10, 66, - 232, 228, 72, 201, nil, 66, nil, 72, 91, 8, - 144, 91, 144, nil, 144, nil, 8, nil, 72, nil, - nil, 11, nil, nil, 66, nil, nil, nil, 10, nil, - nil, nil, nil, nil, nil, nil, 90, nil, nil, nil, - nil, nil, nil, 201, 23, nil, nil, 79, 87, 23, - nil, nil, 87, 72, nil, nil, nil, nil, 40, nil, - 23, 79, nil, nil, nil, nil, nil, nil, nil, nil, - 132, nil, nil, 132, 85, 132, 19, nil, 23, 230, - nil, nil, 230, nil, nil, 72, 22, 72, nil, nil, - 72, 72, nil, nil, nil, 23, nil, 72, 11, nil, - nil, 29, 19, 72, 72, 90, 29, nil, nil, nil, - 72, 72, nil, nil, nil, nil, 11, 29, nil, nil, - nil, nil, nil, 31, nil, nil, 198, 144, nil, 144, - 72, nil, nil, 66, nil, 29, nil, nil, 11, nil, - nil, 132, nil, 132, nil, 132, 72, 132, 72, 55, - 230, nil, 29, nil, 72, 144, 40, nil, nil, 232, - nil, nil, 232, nil, 132, 232, nil, 232, nil, nil, - 72, nil, 23, nil, 72, nil, 117, nil, nil, nil, - nil, 82, nil, nil, nil, nil, nil, nil, nil, nil, - 23, nil, nil, nil, nil, 144, 23, 144, nil, 144, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 23, 90, nil, nil, 23, nil, 144, nil, - nil, nil, 11, nil, nil, 72, 85, 85, 11, 29, - nil, nil, nil, 232, nil, 232, nil, 232, 72, 232, - nil, nil, nil, nil, nil, 82, 30, 29, nil, nil, - nil, 30, nil, 29, 72, 72, 232, 141, 141, 141, - 72, nil, nil, 33, nil, 19, 19, 23, 30, 29, - nil, 11, nil, 72, nil, nil, nil, nil, 30, 30, - 30, 72, 30, 30, 30, 72, nil, nil, nil, nil, - nil, nil, 32, nil, nil, 36, 23, 23, nil, nil, - 72, nil, 23, 72, nil, nil, nil, 82, nil, nil, - 30, nil, nil, nil, 11, 30, 30, nil, 75, 30, - 30, 30, 30, nil, 29, nil, nil, nil, 66, 85, - nil, 85, nil, nil, 85, 85, nil, 40, nil, nil, - nil, 75, nil, 66, nil, 23, 72, nil, 79, nil, - 79, 40, 40, 29, 29, nil, nil, 91, nil, 29, - 72, 141, 141, 141, 141, nil, 141, nil, nil, 30, - nil, nil, nil, nil, 30, 30, 30, 30, 30, nil, - 30, 66, nil, nil, nil, nil, 26, nil, 23, nil, - nil, nil, nil, 66, nil, nil, nil, nil, nil, nil, - nil, nil, 29, nil, 141, 141, 141, 141, nil, nil, - nil, nil, 40, nil, nil, 26, 141, 61, 61, nil, - nil, nil, nil, nil, nil, nil, 79, nil, 40, nil, - nil, nil, nil, nil, nil, nil, nil, 97, 97, nil, - nil, 61, 40, 85, nil, 29, nil, nil, nil, nil, - nil, 40, nil, nil, 66, 66, 66, 40, nil, nil, - nil, nil, nil, 30, 30, 30, 30, 30, 30, 30, - 66, nil, nil, nil, 40, 30, nil, nil, 66, nil, - nil, 30, 30, 30, 30, nil, nil, nil, nil, nil, - nil, nil, 34, nil, nil, nil, nil, 34, 30, nil, - nil, nil, nil, nil, nil, nil, 85, nil, 79, 79, - nil, nil, nil, 79, 79, nil, nil, nil, nil, nil, - nil, nil, nil, 26, nil, nil, nil, nil, 34, 34, - 34, nil, nil, nil, 40, nil, nil, nil, nil, 40, - 40, nil, nil, nil, 30, 98, 98, nil, nil, 26, - nil, 30, 30, nil, nil, nil, 34, nil, nil, nil, - 30, nil, nil, nil, nil, 38, 34, 34, 34, nil, - 38, 32, nil, nil, 40, nil, nil, nil, 30, 85, - nil, 85, 30, 85, nil, 32, 30, 30, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 38, 38, 38, nil, 30, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 34, nil, 30, nil, nil, - 85, nil, nil, 85, 34, nil, 34, nil, nil, 38, - nil, 30, 30, 30, nil, nil, 85, nil, nil, 38, - 38, 38, nil, nil, nil, nil, 32, 40, 40, 40, - nil, nil, 30, nil, nil, 97, nil, 40, nil, nil, - nil, nil, nil, 97, nil, nil, nil, nil, nil, nil, - nil, nil, 97, 97, nil, nil, 32, nil, nil, nil, - 85, 40, nil, nil, nil, 32, nil, nil, 38, 85, - 85, nil, nil, nil, nil, nil, nil, 38, nil, 38, - nil, 79, nil, 85, nil, nil, nil, nil, 32, 34, - nil, 34, 26, 26, 34, nil, nil, 30, nil, 85, - nil, 34, nil, nil, nil, nil, nil, 34, 34, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 34, 79, 79, 79, 79, nil, - nil, nil, nil, nil, nil, nil, nil, 30, 40, nil, - nil, nil, nil, 98, nil, nil, nil, 30, 32, nil, - nil, 98, nil, 32, 32, nil, nil, nil, nil, nil, - 98, 98, 38, nil, 38, nil, nil, 38, nil, nil, - nil, nil, nil, nil, 38, nil, nil, 85, nil, 40, - 38, 38, nil, nil, nil, nil, 85, nil, nil, 85, - nil, nil, nil, nil, nil, nil, nil, 38, nil, nil, - nil, 99, 99, nil, 34, nil, nil, 30, 34, nil, - nil, nil, 34, 34, 97, 30, 97, 30, nil, 97, - 97, nil, nil, nil, 30, nil, 97, nil, nil, nil, - nil, 34, 97, 97, nil, nil, nil, 79, nil, 97, - 97, nil, nil, 34, nil, 30, nil, nil, 30, nil, - nil, nil, nil, nil, nil, 30, 85, nil, 34, 34, - nil, 32, 32, 32, nil, 30, nil, nil, nil, 30, - nil, nil, nil, nil, nil, 97, nil, 38, nil, nil, - nil, 38, nil, nil, nil, 38, 38, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 30, nil, nil, 30, - 30, nil, nil, 30, 38, nil, nil, nil, nil, 30, - 30, nil, nil, nil, 30, 30, 38, nil, nil, nil, - nil, nil, 98, nil, 98, nil, nil, 98, 98, nil, - nil, 38, 38, nil, 98, nil, nil, nil, nil, nil, - 98, 98, nil, nil, nil, nil, nil, 98, 98, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 85, nil, nil, nil, nil, - nil, nil, nil, 98, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 85, nil, nil, nil, nil, nil, - nil, nil, 97, nil, nil, nil, nil, nil, nil, nil, - 97, nil, nil, 32, 97, nil, nil, nil, nil, 99, - nil, nil, nil, nil, nil, nil, nil, 99, nil, nil, - 30, nil, nil, nil, nil, nil, 99, 99, nil, nil, - nil, 30, nil, nil, nil, 30, nil, nil, nil, 39, - nil, nil, nil, 34, 39, nil, nil, nil, nil, nil, - nil, 34, nil, nil, nil, nil, nil, nil, 30, nil, - 34, nil, nil, 30, 30, nil, nil, nil, nil, nil, - nil, nil, 100, 100, 30, 39, 39, 39, nil, 97, - nil, 34, nil, nil, 34, nil, nil, nil, nil, nil, - nil, nil, 30, nil, nil, nil, nil, nil, nil, nil, - 98, nil, nil, 39, nil, 34, nil, nil, 98, 30, - 101, 101, 98, 39, 39, 39, 38, nil, nil, nil, - nil, nil, nil, nil, 38, nil, nil, nil, nil, nil, - nil, nil, 34, 38, nil, 34, nil, nil, nil, 34, - nil, nil, nil, nil, nil, 34, 34, nil, nil, nil, - 34, 34, nil, nil, 38, nil, nil, 38, nil, nil, - nil, nil, 39, nil, nil, nil, nil, nil, 102, 102, - nil, 39, 30, 39, nil, nil, nil, nil, 38, nil, - nil, nil, nil, nil, nil, nil, 30, 98, 99, nil, - 99, nil, nil, 99, 99, nil, nil, nil, 30, nil, - 99, nil, nil, nil, 30, 38, 99, 99, 38, nil, - 30, nil, 38, 99, 99, nil, nil, nil, 38, 38, - nil, nil, nil, 38, 38, nil, 30, nil, nil, nil, - 30, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 99, - nil, nil, nil, nil, nil, nil, 39, nil, 39, nil, - nil, 39, nil, nil, nil, nil, 34, nil, 39, nil, - nil, nil, nil, nil, 39, 39, nil, 34, nil, nil, - nil, 30, nil, nil, nil, nil, nil, nil, nil, nil, - 100, 39, nil, nil, 30, nil, nil, nil, 100, nil, - nil, nil, nil, nil, 34, nil, nil, 100, 100, 34, - 30, 30, nil, nil, nil, nil, 30, nil, nil, nil, - 34, nil, nil, nil, nil, nil, nil, nil, 101, nil, - nil, nil, nil, nil, nil, nil, 101, nil, 34, 38, - nil, nil, nil, nil, nil, 101, 101, nil, nil, nil, - 38, nil, nil, nil, nil, 34, 30, nil, nil, 30, - nil, 30, 30, nil, nil, nil, nil, nil, nil, nil, - nil, 39, nil, nil, 30, 39, 99, 38, nil, 39, - 39, nil, 38, nil, 99, nil, 102, nil, 99, nil, - nil, nil, nil, 38, 102, nil, nil, nil, 39, nil, - nil, nil, 30, 102, 102, nil, nil, nil, nil, nil, - 39, 38, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 39, 39, nil, 38, nil, - nil, nil, 34, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 34, nil, nil, nil, nil, nil, 34, nil, nil, nil, - nil, nil, nil, 99, nil, nil, nil, nil, nil, 100, - nil, 100, 34, nil, 100, 100, 34, nil, nil, nil, - nil, 100, nil, nil, nil, nil, nil, 100, 100, nil, - nil, nil, nil, nil, 100, 100, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 38, nil, 101, nil, 101, - nil, nil, 101, 101, nil, nil, nil, nil, nil, 101, - nil, nil, nil, 38, nil, 101, 101, 34, nil, 38, - 100, nil, 101, 101, nil, nil, nil, nil, nil, nil, - 34, nil, nil, nil, nil, 38, nil, nil, nil, 38, - nil, nil, nil, nil, nil, nil, 34, 34, nil, nil, - nil, nil, 34, nil, nil, 102, nil, 102, 101, nil, - 102, 102, nil, nil, nil, nil, nil, 102, nil, nil, - nil, nil, nil, 102, 102, nil, nil, nil, nil, nil, - 102, 102, nil, nil, nil, nil, nil, nil, nil, nil, - 38, nil, 34, 103, 103, 34, nil, nil, nil, nil, - nil, nil, nil, 38, nil, nil, nil, nil, nil, nil, - 39, nil, nil, nil, nil, nil, 102, nil, 39, 38, - 38, nil, nil, nil, nil, 38, nil, 39, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 34, nil, - nil, nil, nil, nil, nil, nil, nil, 100, 39, nil, - nil, 39, nil, nil, nil, 100, nil, nil, nil, 100, - nil, nil, 59, nil, nil, 38, nil, 59, 38, nil, - nil, nil, 39, nil, nil, nil, nil, nil, nil, 39, - nil, nil, nil, nil, 59, 101, nil, nil, nil, nil, - nil, nil, nil, 101, 59, 59, 59, 101, 59, 39, - nil, nil, 39, nil, 71, nil, 39, nil, nil, 71, - nil, 38, 39, 39, nil, nil, nil, 39, 39, nil, - nil, nil, nil, nil, nil, nil, 59, nil, 71, nil, - nil, 59, 59, nil, 100, 59, nil, nil, nil, nil, - 71, 71, 71, 102, nil, nil, nil, nil, nil, nil, - nil, 102, nil, nil, nil, 102, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 71, nil, - nil, nil, 101, nil, nil, nil, nil, nil, 71, 71, - 71, nil, nil, nil, nil, 59, nil, nil, nil, nil, - 59, 59, 59, 59, 59, nil, 59, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 103, nil, nil, nil, nil, nil, nil, nil, 103, - nil, nil, nil, nil, nil, nil, nil, 71, 103, 103, - 102, nil, nil, 39, nil, nil, 71, nil, 71, nil, - nil, nil, nil, nil, 39, nil, nil, nil, nil, nil, - nil, nil, 104, 104, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 39, nil, nil, nil, nil, 39, nil, nil, 59, - 59, 59, 59, 59, 59, 59, nil, 39, nil, nil, - nil, 59, nil, nil, nil, nil, nil, 59, 59, 59, - 59, nil, nil, nil, nil, 39, nil, nil, nil, nil, - nil, nil, nil, nil, 59, nil, nil, nil, nil, nil, - nil, 71, 39, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 71, nil, nil, nil, nil, nil, 71, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 71, nil, nil, nil, - 59, nil, nil, nil, nil, nil, nil, 59, 59, nil, - nil, nil, nil, nil, nil, nil, 59, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 103, nil, 103, nil, 59, 103, 103, nil, 59, 39, - nil, nil, 103, 59, nil, nil, nil, nil, 103, 103, - nil, nil, nil, nil, nil, 103, 103, 39, nil, nil, - nil, nil, nil, 39, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 59, nil, nil, 71, nil, nil, 39, - 71, nil, nil, 39, 71, 71, nil, 59, 59, 59, - nil, 103, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 71, nil, nil, nil, nil, 59, nil, - 104, nil, nil, nil, nil, 71, nil, 62, 104, nil, - nil, nil, 62, nil, nil, nil, nil, 104, 104, nil, - 71, 71, nil, nil, 39, nil, nil, nil, nil, 62, - nil, nil, nil, nil, nil, nil, nil, 39, nil, 62, - 62, 62, nil, 62, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 39, 39, nil, nil, nil, nil, 39, - nil, nil, nil, 59, nil, nil, nil, nil, nil, nil, - nil, 62, nil, nil, nil, nil, 62, 62, nil, nil, - 62, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 39, - 109, 109, 39, 59, nil, nil, nil, nil, 103, nil, - nil, nil, nil, 59, nil, nil, 103, nil, nil, nil, - 103, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 62, nil, nil, nil, nil, 62, 62, 62, 62, 62, - nil, 62, nil, nil, nil, 39, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 59, nil, nil, nil, nil, nil, 104, - nil, 104, nil, 59, 104, 104, nil, nil, nil, nil, - nil, 104, nil, nil, nil, 103, nil, 104, 104, nil, - nil, nil, nil, nil, 104, 104, nil, nil, nil, nil, - nil, 59, nil, nil, 59, 71, nil, nil, nil, nil, - nil, 59, nil, 71, 62, 62, 62, 62, 62, 62, - 62, 59, 71, nil, nil, 59, 62, nil, nil, nil, - 104, nil, 62, 62, 62, 62, nil, nil, nil, nil, - nil, nil, nil, 71, nil, nil, 71, nil, nil, 62, - nil, nil, 59, nil, nil, 59, 59, nil, nil, 59, - nil, nil, nil, nil, nil, 59, 59, 71, nil, nil, - 59, 59, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 71, 62, nil, nil, nil, nil, - nil, 71, 62, 62, nil, nil, nil, nil, 109, nil, - nil, 62, nil, nil, nil, nil, 109, nil, nil, nil, - nil, nil, nil, nil, nil, 109, 109, nil, nil, 62, - nil, nil, nil, 62, nil, nil, nil, nil, 62, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 104, nil, nil, - nil, nil, nil, nil, nil, 104, nil, nil, 62, 104, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 62, 62, 62, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 59, nil, 62, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 59, nil, nil, nil, 71, 59, - 59, nil, nil, nil, nil, nil, nil, nil, nil, 71, - 59, nil, nil, nil, 104, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 59, nil, - nil, nil, nil, nil, nil, nil, 71, nil, 62, nil, - nil, 71, nil, nil, nil, 59, nil, nil, nil, nil, - nil, nil, 71, nil, nil, nil, nil, 109, nil, 109, - nil, nil, 109, 109, nil, nil, nil, nil, nil, 109, - nil, nil, nil, nil, nil, 109, 109, nil, 62, nil, - nil, nil, 109, 109, nil, nil, nil, 71, 62, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 59, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 109, nil, - nil, nil, 59, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 59, nil, nil, nil, nil, nil, - 59, nil, nil, nil, nil, nil, 59, nil, 62, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 62, nil, - nil, nil, 59, nil, 71, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 71, nil, nil, nil, 62, nil, 71, 62, - nil, nil, nil, nil, nil, nil, 62, nil, nil, nil, - nil, nil, nil, nil, 71, nil, 62, nil, 71, nil, - 62, nil, nil, nil, nil, nil, nil, 59, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 62, nil, nil, - 62, 62, nil, nil, 62, 109, 59, 59, nil, nil, - 62, 62, 59, 109, nil, 62, 62, 109, 37, 71, - nil, nil, nil, nil, nil, nil, nil, nil, 37, 37, - 37, nil, 71, nil, nil, nil, nil, nil, nil, nil, - 37, 37, nil, 37, 37, nil, 37, nil, 71, 71, - nil, nil, nil, nil, 71, 59, nil, 59, 59, nil, - nil, 37, 37, nil, nil, nil, nil, nil, nil, nil, - 59, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 109, nil, 71, nil, nil, 71, 59, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 71, nil, nil, nil, nil, nil, 62, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 62, - nil, nil, nil, nil, 62, 62, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 62, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 62, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 37, 37, nil, nil, 37, 37, - 62, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 37, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 37, nil, nil, nil, nil, - nil, nil, 37, 37, 37, 37, 37, 37, 37, 37, - 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, - 37, 37, 37, 37, nil, nil, nil, nil, 37, nil, - nil, nil, nil, 62, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 62, nil, nil, - nil, 37, 37, nil, nil, nil, nil, nil, nil, 62, - 37, nil, nil, nil, nil, 62, nil, 37, nil, 37, - nil, 62, 37, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 62, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 37, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 62, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 62, 62, nil, nil, nil, nil, 62, nil, nil, - nil, 37, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 37, nil, nil, - 62, nil, 62, 62, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 62, nil, nil, nil, nil, - nil, nil, nil, nil, 37, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 37, nil, nil, - nil, nil, nil, 62, nil, nil, nil, 37, nil, 37, - 37, 37, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 37, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 37, nil, 37, - nil, 37, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 37, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 37, nil, nil, - 37, nil, 37, nil, nil, nil, nil, nil, 37, nil, - nil, 37, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 37, 37, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 37, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 37, 37, - 37, nil, nil, nil, 37, nil, nil, 37, 37, 37, - 37, nil, nil, nil, 37, 37, nil, nil, nil, nil, - nil, 37, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 37, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 37, - 37, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 37, nil, nil, nil, nil, - nil, nil, nil, nil, 37, nil, nil, 37, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 37, nil, nil, nil, nil, nil, - nil, nil, 37, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 37, 37, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 37, 37, 37, 37, 37, 37, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 37, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 37, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 37, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 37, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 37 ] - -racc_goto_pointer = [ - nil, 147, 134, 152, nil, 68, 135, 58, 177, 56, - -229, -34, -462, -664, -739, nil, -427, 24, 151, -42, - -119, 92, 48, 40, -150, -45, 405, 46, -83, 97, - 1084, -197, 677, -2, 1330, 220, -25, 3624, 1403, 1907, - 443, -471, -70, -67, -25, -434, -8, nil, -3, nil, - 167, 65, -361, nil, nil, -172, 53, -245, -470, 2540, - -366, 96, 2955, 146, 69, 100, 253, nil, -36, 63, - -252, 2582, -2, -384, 89, -4, nil, 29, -231, 663, - 44, nil, 5, 151, -167, 846, 139, -5, 94, -266, - 262, 36, -257, -351, -255, -496, nil, 747, 855, 1131, - 1412, 1450, 1508, 1943, 2202, 182, 141, -44, nil, 2520, - -328, -757, -348, -582, 134, nil, -196, 21, nil, 67, - 147, -156, 153, -385, -417, -625, -182, -808, -466, -377, - -796, -688, -223, -649, nil, -455, -739, nil, nil, -429, - -554, 24, -839, -735, -169, -825, -611, -657, nil, -721, - -860, -949, -948, -168, -609, 166, -392, -121, -10, -741, - -737, -412, -36, nil, -45, -45, nil, nil, -513, -817, - -713, -940, -557, -865, -274, -590, -518, -430, -773, nil, - -644, nil, -642, -459, -457, nil, nil, -609, -457, -451, - nil, -747, -800, -742, nil, -648, -647, nil, -89, nil, - -333, -105, -588, nil, nil, -475, -392, -587, nil, nil, - 224, 231, 237, 238, -245, -200, 250, 259, 260, -291, - -290, nil, nil, -276, -181, -117, nil, nil, -360, -336, - -214, -650, -131, -330, -753, -615, -983, nil, nil, -495 ] - -racc_goto_default = [ - nil, nil, nil, nil, 5, nil, 6, 392, 335, nil, - nil, 474, nil, 983, nil, 332, 333, nil, nil, nil, - 13, 14, 22, 248, nil, nil, 16, nil, 442, 249, - 364, nil, nil, 640, 252, nil, 27, 25, 253, 247, - 520, nil, nil, nil, nil, nil, nil, 387, 144, 26, - nil, nil, nil, 28, 29, 815, nil, nil, nil, 352, - nil, 30, 349, 456, 37, nil, nil, 39, 42, 41, - nil, 244, 245, 404, nil, 465, 143, 87, nil, 447, - 103, 51, 54, 284, nil, 324, nil, 894, 457, nil, - 458, 470, 483, 689, 572, 322, 308, 55, 56, 57, - 58, 59, 60, 61, 62, 63, nil, 309, 69, 70, - nil, nil, nil, nil, nil, 77, nil, 622, 78, 231, - nil, nil, nil, nil, nil, nil, nil, 716, 495, nil, - 717, 718, 481, 476, 477, nil, 1176, 712, 1070, nil, - 482, nil, nil, nil, 484, nil, 486, nil, 970, nil, - nil, nil, 493, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 469, nil, nil, 794, 786, nil, nil, - nil, nil, nil, nil, 1050, nil, 739, 940, 741, 742, - 746, 743, 744, nil, nil, 745, 747, nil, nil, nil, - 939, 941, 751, nil, 753, 754, 755, 756, nil, 760, - 478, 504, 762, 763, 764, 113, nil, nil, 86, 88, - 89, nil, nil, nil, nil, 650, nil, nil, nil, nil, - nil, 99, 100, nil, 232, 904, 235, 480, nil, 485, - 912, 498, 500, 501, 1081, 505, 1082, 508, 511, 327 ] - -racc_reduce_table = [ - 0, 0, :racc_error, - 0, 150, :_reduce_1, - 2, 148, :_reduce_2, - 2, 149, :_reduce_3, - 0, 151, :_reduce_4, - 1, 151, :_reduce_5, - 3, 151, :_reduce_6, - 2, 151, :_reduce_7, - 1, 153, :_reduce_none, - 2, 153, :_reduce_9, - 3, 156, :_reduce_10, - 4, 157, :_reduce_11, - 2, 158, :_reduce_12, - 0, 162, :_reduce_13, - 1, 162, :_reduce_14, - 3, 162, :_reduce_15, - 2, 162, :_reduce_16, - 1, 163, :_reduce_none, - 2, 163, :_reduce_18, - 0, 174, :_reduce_19, - 4, 155, :_reduce_20, - 3, 155, :_reduce_21, - 3, 155, :_reduce_22, - 3, 155, :_reduce_23, - 2, 155, :_reduce_24, - 3, 155, :_reduce_25, - 3, 155, :_reduce_26, - 3, 155, :_reduce_27, - 3, 155, :_reduce_28, - 3, 155, :_reduce_29, - 4, 155, :_reduce_30, - 1, 155, :_reduce_none, - 3, 155, :_reduce_32, - 3, 155, :_reduce_33, - 5, 155, :_reduce_34, - 3, 155, :_reduce_35, - 1, 155, :_reduce_none, - 3, 167, :_reduce_37, - 3, 167, :_reduce_38, - 6, 167, :_reduce_39, - 5, 167, :_reduce_40, - 5, 167, :_reduce_41, - 5, 167, :_reduce_42, - 5, 167, :_reduce_43, - 4, 167, :_reduce_44, - 6, 167, :_reduce_45, - 4, 167, :_reduce_46, - 6, 167, :_reduce_47, - 3, 167, :_reduce_48, - 1, 175, :_reduce_none, - 3, 175, :_reduce_50, - 1, 175, :_reduce_none, - 1, 173, :_reduce_none, - 3, 173, :_reduce_53, - 3, 173, :_reduce_54, - 3, 173, :_reduce_55, - 2, 173, :_reduce_56, - 0, 189, :_reduce_57, - 4, 173, :_reduce_58, - 0, 190, :_reduce_59, - 4, 173, :_reduce_60, - 1, 173, :_reduce_none, - 1, 166, :_reduce_none, - 0, 194, :_reduce_63, - 3, 191, :_reduce_64, - 1, 193, :_reduce_65, - 2, 181, :_reduce_66, - 0, 199, :_reduce_67, - 5, 185, :_reduce_68, - 1, 169, :_reduce_none, - 1, 169, :_reduce_none, - 1, 200, :_reduce_none, - 4, 200, :_reduce_72, - 0, 207, :_reduce_73, - 4, 204, :_reduce_74, - 1, 206, :_reduce_none, - 2, 183, :_reduce_76, - 3, 183, :_reduce_77, - 4, 183, :_reduce_78, - 5, 183, :_reduce_79, - 4, 183, :_reduce_80, - 5, 183, :_reduce_81, - 2, 183, :_reduce_82, - 2, 183, :_reduce_83, - 2, 183, :_reduce_84, - 2, 183, :_reduce_85, - 2, 183, :_reduce_86, - 1, 168, :_reduce_87, - 3, 168, :_reduce_88, - 1, 212, :_reduce_89, - 3, 212, :_reduce_90, - 1, 211, :_reduce_none, - 2, 211, :_reduce_92, - 3, 211, :_reduce_93, - 5, 211, :_reduce_94, - 2, 211, :_reduce_95, - 4, 211, :_reduce_96, - 2, 211, :_reduce_97, - 4, 211, :_reduce_98, - 1, 211, :_reduce_99, - 3, 211, :_reduce_100, - 1, 215, :_reduce_none, - 3, 215, :_reduce_102, - 2, 214, :_reduce_103, - 3, 214, :_reduce_104, - 1, 217, :_reduce_105, - 3, 217, :_reduce_106, - 1, 216, :_reduce_107, - 1, 216, :_reduce_108, - 4, 216, :_reduce_109, - 3, 216, :_reduce_110, - 3, 216, :_reduce_111, - 3, 216, :_reduce_112, - 3, 216, :_reduce_113, - 2, 216, :_reduce_114, - 1, 216, :_reduce_115, - 1, 170, :_reduce_116, - 1, 170, :_reduce_117, - 4, 170, :_reduce_118, - 3, 170, :_reduce_119, - 3, 170, :_reduce_120, - 3, 170, :_reduce_121, - 3, 170, :_reduce_122, - 2, 170, :_reduce_123, - 1, 170, :_reduce_124, - 1, 220, :_reduce_125, - 1, 220, :_reduce_none, - 2, 221, :_reduce_127, - 1, 221, :_reduce_128, - 3, 221, :_reduce_129, - 1, 195, :_reduce_none, - 1, 195, :_reduce_none, - 1, 195, :_reduce_none, - 1, 195, :_reduce_none, - 1, 195, :_reduce_none, - 1, 164, :_reduce_135, - 1, 164, :_reduce_none, - 1, 165, :_reduce_137, - 0, 225, :_reduce_138, - 4, 165, :_reduce_139, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 1, 223, :_reduce_none, - 3, 184, :_reduce_211, - 3, 184, :_reduce_212, - 6, 184, :_reduce_213, - 5, 184, :_reduce_214, - 5, 184, :_reduce_215, - 5, 184, :_reduce_216, - 5, 184, :_reduce_217, - 4, 184, :_reduce_218, - 3, 184, :_reduce_219, - 3, 184, :_reduce_220, - 3, 184, :_reduce_221, - 2, 184, :_reduce_222, - 2, 184, :_reduce_223, - 2, 184, :_reduce_224, - 2, 184, :_reduce_225, - 3, 184, :_reduce_226, - 3, 184, :_reduce_227, - 3, 184, :_reduce_228, - 3, 184, :_reduce_229, - 3, 184, :_reduce_230, - 3, 184, :_reduce_231, - 4, 184, :_reduce_232, - 2, 184, :_reduce_233, - 2, 184, :_reduce_234, - 3, 184, :_reduce_235, - 3, 184, :_reduce_236, - 3, 184, :_reduce_237, - 3, 184, :_reduce_238, - 1, 184, :_reduce_none, - 3, 184, :_reduce_240, - 3, 184, :_reduce_241, - 3, 184, :_reduce_242, - 3, 184, :_reduce_243, - 3, 184, :_reduce_244, - 2, 184, :_reduce_245, - 2, 184, :_reduce_246, - 3, 184, :_reduce_247, - 3, 184, :_reduce_248, - 3, 184, :_reduce_249, - 3, 184, :_reduce_250, - 0, 231, :_reduce_251, - 4, 184, :_reduce_252, - 6, 184, :_reduce_253, - 4, 184, :_reduce_254, - 6, 184, :_reduce_255, - 4, 184, :_reduce_256, - 6, 184, :_reduce_257, - 1, 184, :_reduce_none, - 1, 230, :_reduce_none, - 1, 230, :_reduce_none, - 1, 230, :_reduce_none, - 1, 230, :_reduce_none, - 3, 228, :_reduce_263, - 3, 228, :_reduce_264, - 1, 232, :_reduce_none, - 1, 233, :_reduce_none, - 2, 233, :_reduce_none, - 4, 233, :_reduce_268, - 2, 233, :_reduce_269, - 1, 226, :_reduce_none, - 3, 226, :_reduce_271, - 3, 238, :_reduce_272, - 5, 238, :_reduce_273, - 3, 238, :_reduce_274, - 0, 240, :_reduce_275, - 1, 240, :_reduce_none, - 0, 178, :_reduce_277, - 1, 178, :_reduce_none, - 2, 178, :_reduce_none, - 4, 178, :_reduce_280, - 2, 178, :_reduce_281, - 1, 210, :_reduce_282, - 2, 210, :_reduce_283, - 2, 210, :_reduce_284, - 4, 210, :_reduce_285, - 1, 210, :_reduce_286, - 0, 243, :_reduce_287, - 2, 203, :_reduce_288, - 2, 242, :_reduce_289, - 1, 242, :_reduce_290, - 2, 241, :_reduce_291, - 0, 241, :_reduce_292, - 1, 235, :_reduce_293, - 2, 235, :_reduce_294, - 1, 235, :_reduce_295, - 3, 235, :_reduce_296, - 4, 235, :_reduce_297, - 3, 235, :_reduce_298, - 1, 172, :_reduce_299, - 1, 172, :_reduce_none, - 3, 171, :_reduce_301, - 4, 171, :_reduce_302, - 2, 171, :_reduce_303, - 1, 229, :_reduce_none, - 1, 229, :_reduce_none, - 1, 229, :_reduce_none, - 1, 229, :_reduce_none, - 1, 229, :_reduce_none, - 1, 229, :_reduce_none, - 1, 229, :_reduce_none, - 1, 229, :_reduce_none, - 1, 229, :_reduce_none, - 1, 229, :_reduce_none, - 1, 229, :_reduce_314, - 0, 267, :_reduce_315, - 4, 229, :_reduce_316, - 0, 268, :_reduce_317, - 4, 229, :_reduce_318, - 0, 269, :_reduce_319, - 4, 229, :_reduce_320, - 3, 229, :_reduce_321, - 3, 229, :_reduce_322, - 2, 229, :_reduce_323, - 3, 229, :_reduce_324, - 3, 229, :_reduce_325, - 1, 229, :_reduce_326, - 4, 229, :_reduce_327, - 3, 229, :_reduce_328, - 1, 229, :_reduce_329, - 0, 270, :_reduce_330, - 6, 229, :_reduce_331, - 4, 229, :_reduce_332, - 3, 229, :_reduce_333, - 2, 229, :_reduce_334, - 1, 229, :_reduce_none, - 2, 229, :_reduce_336, - 1, 229, :_reduce_none, - 6, 229, :_reduce_338, - 6, 229, :_reduce_339, - 4, 229, :_reduce_340, - 4, 229, :_reduce_341, - 5, 229, :_reduce_342, - 4, 229, :_reduce_343, - 5, 229, :_reduce_344, - 6, 229, :_reduce_345, - 0, 271, :_reduce_346, - 6, 229, :_reduce_347, - 0, 272, :_reduce_348, - 7, 229, :_reduce_349, - 0, 273, :_reduce_350, - 5, 229, :_reduce_351, - 4, 229, :_reduce_352, - 4, 229, :_reduce_353, - 1, 229, :_reduce_354, - 1, 229, :_reduce_355, - 1, 229, :_reduce_356, - 1, 229, :_reduce_357, - 1, 177, :_reduce_none, - 1, 262, :_reduce_359, - 1, 265, :_reduce_360, - 1, 196, :_reduce_361, - 1, 209, :_reduce_362, - 1, 257, :_reduce_none, - 1, 257, :_reduce_none, - 2, 257, :_reduce_365, - 1, 192, :_reduce_none, - 1, 192, :_reduce_none, - 1, 258, :_reduce_none, - 5, 258, :_reduce_369, - 1, 160, :_reduce_none, - 2, 160, :_reduce_371, - 1, 261, :_reduce_none, - 1, 261, :_reduce_none, - 1, 274, :_reduce_374, - 3, 274, :_reduce_375, - 1, 277, :_reduce_376, - 3, 277, :_reduce_377, - 1, 276, :_reduce_none, - 3, 276, :_reduce_379, - 5, 276, :_reduce_380, - 1, 276, :_reduce_381, - 3, 276, :_reduce_382, - 2, 278, :_reduce_383, - 1, 278, :_reduce_384, - 1, 279, :_reduce_none, - 1, 279, :_reduce_none, - 0, 284, :_reduce_387, - 2, 282, :_reduce_388, - 4, 283, :_reduce_389, - 2, 283, :_reduce_390, - 2, 283, :_reduce_391, - 1, 283, :_reduce_392, - 2, 288, :_reduce_393, - 0, 288, :_reduce_394, - 1, 289, :_reduce_none, - 6, 290, :_reduce_396, - 8, 290, :_reduce_397, - 4, 290, :_reduce_398, - 6, 290, :_reduce_399, - 4, 290, :_reduce_400, - 2, 290, :_reduce_none, - 6, 290, :_reduce_402, - 2, 290, :_reduce_403, - 4, 290, :_reduce_404, - 6, 290, :_reduce_405, - 2, 290, :_reduce_406, - 4, 290, :_reduce_407, - 2, 290, :_reduce_408, - 4, 290, :_reduce_409, - 1, 290, :_reduce_none, - 0, 294, :_reduce_411, - 1, 294, :_reduce_412, - 3, 295, :_reduce_413, - 4, 295, :_reduce_414, - 1, 296, :_reduce_415, - 4, 296, :_reduce_416, - 1, 297, :_reduce_417, - 3, 297, :_reduce_418, - 1, 298, :_reduce_419, - 1, 298, :_reduce_none, - 0, 302, :_reduce_421, - 0, 303, :_reduce_422, - 5, 256, :_reduce_423, - 4, 300, :_reduce_424, - 1, 300, :_reduce_425, - 0, 306, :_reduce_426, - 4, 301, :_reduce_427, - 0, 307, :_reduce_428, - 4, 301, :_reduce_429, - 0, 309, :_reduce_430, - 4, 305, :_reduce_431, - 2, 201, :_reduce_432, - 4, 201, :_reduce_433, - 5, 201, :_reduce_434, - 5, 201, :_reduce_435, - 2, 255, :_reduce_436, - 4, 255, :_reduce_437, - 4, 255, :_reduce_438, - 3, 255, :_reduce_439, - 3, 255, :_reduce_440, - 3, 255, :_reduce_441, - 2, 255, :_reduce_442, - 1, 255, :_reduce_443, - 4, 255, :_reduce_444, - 0, 311, :_reduce_445, - 4, 254, :_reduce_446, - 0, 312, :_reduce_447, - 4, 254, :_reduce_448, - 0, 313, :_reduce_449, - 3, 205, :_reduce_450, - 0, 314, :_reduce_451, - 0, 315, :_reduce_452, - 4, 308, :_reduce_453, - 5, 259, :_reduce_454, - 1, 316, :_reduce_455, - 1, 316, :_reduce_none, - 0, 319, :_reduce_457, - 0, 320, :_reduce_458, - 7, 260, :_reduce_459, - 1, 318, :_reduce_460, - 1, 318, :_reduce_none, - 1, 317, :_reduce_462, - 3, 317, :_reduce_463, - 3, 317, :_reduce_464, - 1, 188, :_reduce_none, - 2, 188, :_reduce_466, - 3, 188, :_reduce_467, - 1, 188, :_reduce_468, - 1, 188, :_reduce_469, - 1, 188, :_reduce_470, - 1, 321, :_reduce_none, - 3, 326, :_reduce_472, - 1, 326, :_reduce_none, - 3, 328, :_reduce_474, - 1, 328, :_reduce_none, - 1, 330, :_reduce_476, - 1, 331, :_reduce_477, - 1, 329, :_reduce_none, - 1, 329, :_reduce_none, - 4, 329, :_reduce_480, - 4, 329, :_reduce_481, - 4, 329, :_reduce_482, - 3, 329, :_reduce_483, - 4, 329, :_reduce_484, - 4, 329, :_reduce_485, - 4, 329, :_reduce_486, - 3, 329, :_reduce_487, - 3, 329, :_reduce_488, - 3, 329, :_reduce_489, - 2, 329, :_reduce_490, - 0, 335, :_reduce_491, - 4, 329, :_reduce_492, - 2, 329, :_reduce_493, - 0, 336, :_reduce_494, - 4, 329, :_reduce_495, - 1, 322, :_reduce_496, - 1, 322, :_reduce_497, - 2, 322, :_reduce_498, - 2, 322, :_reduce_499, - 4, 322, :_reduce_500, - 1, 322, :_reduce_none, - 2, 337, :_reduce_502, - 3, 337, :_reduce_503, - 1, 324, :_reduce_504, - 3, 324, :_reduce_505, - 5, 323, :_reduce_506, - 2, 339, :_reduce_507, - 1, 339, :_reduce_508, - 1, 340, :_reduce_509, - 3, 340, :_reduce_510, - 1, 338, :_reduce_none, - 3, 325, :_reduce_512, - 1, 325, :_reduce_513, - 2, 325, :_reduce_514, - 1, 325, :_reduce_515, - 1, 341, :_reduce_516, - 3, 341, :_reduce_517, - 2, 343, :_reduce_518, - 1, 343, :_reduce_519, - 1, 344, :_reduce_520, - 3, 344, :_reduce_521, - 2, 346, :_reduce_522, - 1, 346, :_reduce_523, - 2, 348, :_reduce_524, - 1, 342, :_reduce_none, - 1, 342, :_reduce_526, - 1, 332, :_reduce_none, - 3, 332, :_reduce_528, - 3, 332, :_reduce_529, - 2, 332, :_reduce_530, - 2, 332, :_reduce_531, - 1, 332, :_reduce_none, - 1, 332, :_reduce_none, - 1, 332, :_reduce_none, - 2, 332, :_reduce_535, - 2, 332, :_reduce_536, - 1, 349, :_reduce_none, - 1, 349, :_reduce_none, - 1, 349, :_reduce_none, - 1, 349, :_reduce_none, - 1, 349, :_reduce_none, - 1, 349, :_reduce_none, - 1, 349, :_reduce_none, - 1, 349, :_reduce_none, - 1, 349, :_reduce_545, - 1, 349, :_reduce_none, - 1, 327, :_reduce_547, - 2, 350, :_reduce_548, - 2, 350, :_reduce_549, - 4, 351, :_reduce_550, - 2, 333, :_reduce_551, - 3, 333, :_reduce_552, - 1, 333, :_reduce_553, - 6, 159, :_reduce_554, - 0, 159, :_reduce_555, - 1, 353, :_reduce_556, - 1, 353, :_reduce_none, - 1, 353, :_reduce_none, - 2, 354, :_reduce_559, - 1, 354, :_reduce_none, - 2, 161, :_reduce_561, - 1, 161, :_reduce_none, - 1, 244, :_reduce_none, - 1, 244, :_reduce_none, - 1, 245, :_reduce_565, - 1, 356, :_reduce_566, - 2, 356, :_reduce_567, - 3, 357, :_reduce_568, - 1, 357, :_reduce_569, - 1, 357, :_reduce_570, - 3, 246, :_reduce_571, - 4, 247, :_reduce_572, - 3, 248, :_reduce_573, - 0, 360, :_reduce_574, - 3, 360, :_reduce_575, - 1, 361, :_reduce_576, - 2, 361, :_reduce_577, - 3, 250, :_reduce_578, - 0, 363, :_reduce_579, - 3, 363, :_reduce_580, - 3, 249, :_reduce_581, - 3, 251, :_reduce_582, - 0, 364, :_reduce_583, - 3, 364, :_reduce_584, - 0, 365, :_reduce_585, - 3, 365, :_reduce_586, - 0, 345, :_reduce_587, - 2, 345, :_reduce_588, - 0, 358, :_reduce_589, - 2, 358, :_reduce_590, - 0, 359, :_reduce_591, - 2, 359, :_reduce_592, - 1, 362, :_reduce_593, - 2, 362, :_reduce_594, - 0, 367, :_reduce_595, - 4, 362, :_reduce_596, - 1, 366, :_reduce_597, - 1, 366, :_reduce_598, - 1, 366, :_reduce_599, - 1, 366, :_reduce_none, - 1, 224, :_reduce_none, - 1, 224, :_reduce_none, - 1, 368, :_reduce_603, - 3, 369, :_reduce_604, - 1, 355, :_reduce_605, - 2, 355, :_reduce_606, - 1, 227, :_reduce_607, - 1, 227, :_reduce_608, - 1, 227, :_reduce_609, - 1, 227, :_reduce_610, - 1, 352, :_reduce_611, - 1, 352, :_reduce_612, - 1, 352, :_reduce_613, - 1, 218, :_reduce_614, - 1, 218, :_reduce_615, - 1, 218, :_reduce_none, - 1, 219, :_reduce_617, - 1, 219, :_reduce_618, - 1, 219, :_reduce_619, - 1, 219, :_reduce_620, - 1, 219, :_reduce_621, - 1, 219, :_reduce_622, - 1, 219, :_reduce_623, - 1, 252, :_reduce_624, - 1, 252, :_reduce_625, - 1, 176, :_reduce_626, - 1, 176, :_reduce_627, - 1, 186, :_reduce_628, - 1, 186, :_reduce_629, - 0, 370, :_reduce_630, - 4, 263, :_reduce_631, - 0, 263, :_reduce_632, - 1, 182, :_reduce_none, - 1, 182, :_reduce_634, - 3, 371, :_reduce_635, - 1, 266, :_reduce_none, - 0, 373, :_reduce_637, - 3, 266, :_reduce_638, - 4, 372, :_reduce_639, - 2, 372, :_reduce_640, - 2, 372, :_reduce_641, - 1, 372, :_reduce_642, - 1, 372, :_reduce_643, - 2, 375, :_reduce_644, - 0, 375, :_reduce_645, - 6, 304, :_reduce_646, - 8, 304, :_reduce_647, - 4, 304, :_reduce_648, - 6, 304, :_reduce_649, - 4, 304, :_reduce_650, - 6, 304, :_reduce_651, - 2, 304, :_reduce_652, - 4, 304, :_reduce_653, - 6, 304, :_reduce_654, - 2, 304, :_reduce_655, - 4, 304, :_reduce_656, - 2, 304, :_reduce_657, - 4, 304, :_reduce_658, - 1, 304, :_reduce_659, - 0, 304, :_reduce_660, - 1, 239, :_reduce_661, - 1, 299, :_reduce_662, - 1, 299, :_reduce_663, - 1, 299, :_reduce_664, - 1, 299, :_reduce_665, - 1, 275, :_reduce_none, - 1, 275, :_reduce_667, - 1, 377, :_reduce_668, - 1, 378, :_reduce_669, - 3, 378, :_reduce_670, - 1, 291, :_reduce_671, - 3, 291, :_reduce_672, - 1, 379, :_reduce_673, - 2, 380, :_reduce_674, - 1, 380, :_reduce_675, - 2, 381, :_reduce_676, - 1, 381, :_reduce_677, - 1, 285, :_reduce_678, - 3, 285, :_reduce_679, - 1, 374, :_reduce_680, - 3, 374, :_reduce_681, - 1, 347, :_reduce_none, - 1, 347, :_reduce_none, - 1, 281, :_reduce_684, - 2, 280, :_reduce_685, - 1, 280, :_reduce_686, - 3, 382, :_reduce_687, - 3, 383, :_reduce_688, - 1, 292, :_reduce_689, - 3, 292, :_reduce_690, - 1, 376, :_reduce_691, - 3, 376, :_reduce_692, - 1, 384, :_reduce_none, - 1, 384, :_reduce_none, - 2, 293, :_reduce_695, - 1, 293, :_reduce_696, - 1, 385, :_reduce_none, - 1, 385, :_reduce_none, - 2, 287, :_reduce_699, - 1, 287, :_reduce_700, - 2, 286, :_reduce_701, - 0, 286, :_reduce_702, - 1, 197, :_reduce_none, - 3, 197, :_reduce_704, - 0, 253, :_reduce_705, - 2, 253, :_reduce_none, - 1, 237, :_reduce_707, - 3, 237, :_reduce_708, - 3, 386, :_reduce_709, - 2, 386, :_reduce_710, - 1, 386, :_reduce_711, - 4, 386, :_reduce_712, - 2, 386, :_reduce_713, - 1, 386, :_reduce_714, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 208, :_reduce_none, - 1, 202, :_reduce_none, - 1, 202, :_reduce_none, - 1, 310, :_reduce_none, - 1, 310, :_reduce_none, - 1, 310, :_reduce_none, - 1, 198, :_reduce_none, - 1, 198, :_reduce_none, - 1, 180, :_reduce_725, - 1, 180, :_reduce_726, - 0, 152, :_reduce_none, - 1, 152, :_reduce_none, - 0, 187, :_reduce_none, - 1, 187, :_reduce_none, - 2, 213, :_reduce_731, - 2, 179, :_reduce_732, - 2, 334, :_reduce_733, - 1, 236, :_reduce_none, - 1, 236, :_reduce_none, - 1, 264, :_reduce_736, - 1, 264, :_reduce_none, - 1, 154, :_reduce_none, - 2, 154, :_reduce_none, - 0, 234, :_reduce_740 ] - -racc_reduce_n = 741 - -racc_shift_n = 1234 - -racc_token_table = { - false => 0, - :error => 1, - :kCLASS => 2, - :kMODULE => 3, - :kDEF => 4, - :kUNDEF => 5, - :kBEGIN => 6, - :kRESCUE => 7, - :kENSURE => 8, - :kEND => 9, - :kIF => 10, - :kUNLESS => 11, - :kTHEN => 12, - :kELSIF => 13, - :kELSE => 14, - :kCASE => 15, - :kWHEN => 16, - :kWHILE => 17, - :kUNTIL => 18, - :kFOR => 19, - :kBREAK => 20, - :kNEXT => 21, - :kREDO => 22, - :kRETRY => 23, - :kIN => 24, - :kDO => 25, - :kDO_COND => 26, - :kDO_BLOCK => 27, - :kDO_LAMBDA => 28, - :kRETURN => 29, - :kYIELD => 30, - :kSUPER => 31, - :kSELF => 32, - :kNIL => 33, - :kTRUE => 34, - :kFALSE => 35, - :kAND => 36, - :kOR => 37, - :kNOT => 38, - :kIF_MOD => 39, - :kUNLESS_MOD => 40, - :kWHILE_MOD => 41, - :kUNTIL_MOD => 42, - :kRESCUE_MOD => 43, - :kALIAS => 44, - :kDEFINED => 45, - :klBEGIN => 46, - :klEND => 47, - :k__LINE__ => 48, - :k__FILE__ => 49, - :k__ENCODING__ => 50, - :tIDENTIFIER => 51, - :tFID => 52, - :tGVAR => 53, - :tIVAR => 54, - :tCONSTANT => 55, - :tLABEL => 56, - :tCVAR => 57, - :tNTH_REF => 58, - :tBACK_REF => 59, - :tSTRING_CONTENT => 60, - :tINTEGER => 61, - :tFLOAT => 62, - :tUPLUS => 63, - :tUMINUS => 64, - :tUNARY_NUM => 65, - :tPOW => 66, - :tCMP => 67, - :tEQ => 68, - :tEQQ => 69, - :tNEQ => 70, - :tGEQ => 71, - :tLEQ => 72, - :tANDOP => 73, - :tOROP => 74, - :tMATCH => 75, - :tNMATCH => 76, - :tDOT => 77, - :tDOT2 => 78, - :tDOT3 => 79, - :tAREF => 80, - :tASET => 81, - :tLSHFT => 82, - :tRSHFT => 83, - :tCOLON2 => 84, - :tCOLON3 => 85, - :tOP_ASGN => 86, - :tASSOC => 87, - :tLPAREN => 88, - :tLPAREN2 => 89, - :tRPAREN => 90, - :tLPAREN_ARG => 91, - :tLBRACK => 92, - :tLBRACK2 => 93, - :tRBRACK => 94, - :tLBRACE => 95, - :tLBRACE_ARG => 96, - :tSTAR => 97, - :tSTAR2 => 98, - :tAMPER => 99, - :tAMPER2 => 100, - :tTILDE => 101, - :tPERCENT => 102, - :tDIVIDE => 103, - :tDSTAR => 104, - :tPLUS => 105, - :tMINUS => 106, - :tLT => 107, - :tGT => 108, - :tPIPE => 109, - :tBANG => 110, - :tCARET => 111, - :tLCURLY => 112, - :tRCURLY => 113, - :tBACK_REF2 => 114, - :tSYMBEG => 115, - :tSTRING_BEG => 116, - :tXSTRING_BEG => 117, - :tREGEXP_BEG => 118, - :tREGEXP_OPT => 119, - :tWORDS_BEG => 120, - :tQWORDS_BEG => 121, - :tSYMBOLS_BEG => 122, - :tQSYMBOLS_BEG => 123, - :tSTRING_DBEG => 124, - :tSTRING_DVAR => 125, - :tSTRING_END => 126, - :tSTRING_DEND => 127, - :tSTRING => 128, - :tSYMBOL => 129, - :tNL => 130, - :tEH => 131, - :tCOLON => 132, - :tCOMMA => 133, - :tSPACE => 134, - :tSEMI => 135, - :tLAMBDA => 136, - :tLAMBEG => 137, - :tCHARACTER => 138, - :tRATIONAL => 139, - :tIMAGINARY => 140, - :tLABEL_END => 141, - :tANDDOT => 142, - :tBDOT2 => 143, - :tBDOT3 => 144, - :tEQL => 145, - :tLOWEST => 146 } - -racc_nt_base = 147 - -racc_use_result_var = true - -Racc_arg = [ - racc_action_table, - racc_action_check, - racc_action_default, - racc_action_pointer, - racc_goto_table, - racc_goto_check, - racc_goto_default, - racc_goto_pointer, - racc_nt_base, - racc_reduce_table, - racc_token_table, - racc_shift_n, - racc_reduce_n, - racc_use_result_var ] -Ractor.make_shareable(Racc_arg) if defined?(Ractor) - -Racc_token_to_s_table = [ - "$end", - "error", - "kCLASS", - "kMODULE", - "kDEF", - "kUNDEF", - "kBEGIN", - "kRESCUE", - "kENSURE", - "kEND", - "kIF", - "kUNLESS", - "kTHEN", - "kELSIF", - "kELSE", - "kCASE", - "kWHEN", - "kWHILE", - "kUNTIL", - "kFOR", - "kBREAK", - "kNEXT", - "kREDO", - "kRETRY", - "kIN", - "kDO", - "kDO_COND", - "kDO_BLOCK", - "kDO_LAMBDA", - "kRETURN", - "kYIELD", - "kSUPER", - "kSELF", - "kNIL", - "kTRUE", - "kFALSE", - "kAND", - "kOR", - "kNOT", - "kIF_MOD", - "kUNLESS_MOD", - "kWHILE_MOD", - "kUNTIL_MOD", - "kRESCUE_MOD", - "kALIAS", - "kDEFINED", - "klBEGIN", - "klEND", - "k__LINE__", - "k__FILE__", - "k__ENCODING__", - "tIDENTIFIER", - "tFID", - "tGVAR", - "tIVAR", - "tCONSTANT", - "tLABEL", - "tCVAR", - "tNTH_REF", - "tBACK_REF", - "tSTRING_CONTENT", - "tINTEGER", - "tFLOAT", - "tUPLUS", - "tUMINUS", - "tUNARY_NUM", - "tPOW", - "tCMP", - "tEQ", - "tEQQ", - "tNEQ", - "tGEQ", - "tLEQ", - "tANDOP", - "tOROP", - "tMATCH", - "tNMATCH", - "tDOT", - "tDOT2", - "tDOT3", - "tAREF", - "tASET", - "tLSHFT", - "tRSHFT", - "tCOLON2", - "tCOLON3", - "tOP_ASGN", - "tASSOC", - "tLPAREN", - "tLPAREN2", - "tRPAREN", - "tLPAREN_ARG", - "tLBRACK", - "tLBRACK2", - "tRBRACK", - "tLBRACE", - "tLBRACE_ARG", - "tSTAR", - "tSTAR2", - "tAMPER", - "tAMPER2", - "tTILDE", - "tPERCENT", - "tDIVIDE", - "tDSTAR", - "tPLUS", - "tMINUS", - "tLT", - "tGT", - "tPIPE", - "tBANG", - "tCARET", - "tLCURLY", - "tRCURLY", - "tBACK_REF2", - "tSYMBEG", - "tSTRING_BEG", - "tXSTRING_BEG", - "tREGEXP_BEG", - "tREGEXP_OPT", - "tWORDS_BEG", - "tQWORDS_BEG", - "tSYMBOLS_BEG", - "tQSYMBOLS_BEG", - "tSTRING_DBEG", - "tSTRING_DVAR", - "tSTRING_END", - "tSTRING_DEND", - "tSTRING", - "tSYMBOL", - "tNL", - "tEH", - "tCOLON", - "tCOMMA", - "tSPACE", - "tSEMI", - "tLAMBDA", - "tLAMBEG", - "tCHARACTER", - "tRATIONAL", - "tIMAGINARY", - "tLABEL_END", - "tANDDOT", - "tBDOT2", - "tBDOT3", - "tEQL", - "tLOWEST", - "$start", - "program", - "top_compstmt", - "@1", - "top_stmts", - "opt_terms", - "top_stmt", - "terms", - "stmt", - "begin_block", - "bodystmt", - "compstmt", - "opt_rescue", - "opt_else", - "opt_ensure", - "stmts", - "stmt_or_begin", - "fitem", - "undef_list", - "expr_value", - "command_asgn", - "mlhs", - "command_call", - "lhs", - "mrhs", - "mrhs_arg", - "expr", - "@2", - "command_rhs", - "var_lhs", - "primary_value", - "opt_call_args", - "rbracket", - "call_op", - "defn_head", - "f_opt_paren_args", - "command", - "arg", - "defs_head", - "backref", - "opt_nl", - "p_top_expr_body", - "@3", - "@4", - "expr_value_do", - "do", - "def_name", - "@5", - "fname", - "k_def", - "singleton", - "dot_or_colon", - "@6", - "block_command", - "block_call", - "operation2", - "command_args", - "cmd_brace_block", - "brace_body", - "fcall", - "@7", - "operation", - "k_return", - "call_args", - "mlhs_basic", - "mlhs_inner", - "rparen", - "mlhs_head", - "mlhs_item", - "mlhs_node", - "mlhs_post", - "user_variable", - "keyword_variable", - "cname", - "cpath", - "op", - "reswords", - "symbol", - "@8", - "arg_rhs", - "simple_numeric", - "rel_expr", - "primary", - "relop", - "@9", - "arg_value", - "aref_args", - "none", - "args", - "trailer", - "assocs", - "paren_args", - "args_forward", - "opt_paren_args", - "opt_block_arg", - "block_arg", - "@10", - "literal", - "strings", - "xstring", - "regexp", - "words", - "qwords", - "symbols", - "qsymbols", - "var_ref", - "assoc_list", - "brace_block", - "method_call", - "lambda", - "then", - "if_tail", - "case_body", - "p_case_body", - "for_var", - "k_class", - "superclass", - "term", - "k_module", - "f_arglist", - "@11", - "@12", - "@13", - "@14", - "@15", - "@16", - "@17", - "f_marg", - "f_norm_arg", - "f_margs", - "f_marg_list", - "f_rest_marg", - "f_any_kwrest", - "f_kwrest", - "f_no_kwarg", - "f_eq", - "block_args_tail", - "@18", - "f_block_kwarg", - "opt_f_block_arg", - "f_block_arg", - "opt_block_args_tail", - "excessed_comma", - "block_param", - "f_arg", - "f_block_optarg", - "f_rest_arg", - "opt_block_param", - "block_param_def", - "opt_bv_decl", - "bv_decls", - "bvar", - "f_bad_arg", - "f_larglist", - "lambda_body", - "@19", - "@20", - "f_args", - "do_block", - "@21", - "@22", - "do_body", - "@23", - "operation3", - "@24", - "@25", - "@26", - "@27", - "@28", - "cases", - "p_top_expr", - "p_cases", - "@29", - "@30", - "p_expr", - "p_args", - "p_find", - "p_args_tail", - "p_kwargs", - "p_as", - "p_variable", - "p_alt", - "p_expr_basic", - "p_lparen", - "p_lbracket", - "p_value", - "p_const", - "rbrace", - "@31", - "@32", - "p_args_head", - "p_arg", - "p_rest", - "p_args_post", - "p_kwarg", - "p_any_kwrest", - "p_kw", - "p_kw_label", - "string_contents", - "p_kwrest", - "kwrest_mark", - "p_kwnorest", - "p_primitive", - "p_var_ref", - "p_expr_ref", - "nonlocal_var", - "exc_list", - "exc_var", - "numeric", - "string", - "string1", - "xstring_contents", - "regexp_contents", - "word_list", - "word", - "string_content", - "symbol_list", - "qword_list", - "qsym_list", - "string_dvar", - "@33", - "ssym", - "dsym", - "@34", - "f_paren_args", - "args_tail", - "@35", - "f_kwarg", - "opt_args_tail", - "f_optarg", - "f_arg_asgn", - "f_arg_item", - "f_label", - "f_kw", - "f_block_kw", - "f_opt", - "f_block_opt", - "restarg_mark", - "blkarg_mark", - "assoc" ] -Ractor.make_shareable(Racc_token_to_s_table) if defined?(Ractor) - -Racc_debug_parser = false - -##### State transition tables end ##### - -# reduce 0 omitted - -def _reduce_1(val, _values, result) - @current_arg_stack.push(nil) - @max_numparam_stack.push(static: true) - - result -end - -def _reduce_2(val, _values, result) - result = val[1] - - @current_arg_stack.pop - @max_numparam_stack.pop - - result -end - -def _reduce_3(val, _values, result) - result = @builder.compstmt(val[0]) - - result -end - -def _reduce_4(val, _values, result) - result = [] - - result -end - -def _reduce_5(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_6(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_7(val, _values, result) - result = [ val[1] ] - - result -end - -# reduce 8 omitted - -def _reduce_9(val, _values, result) - result = @builder.preexe(val[0], *val[1]) - - result -end - -def _reduce_10(val, _values, result) - result = val - - result -end - -def _reduce_11(val, _values, result) - rescue_bodies = val[1] - else_t, else_ = val[2] - ensure_t, ensure_ = val[3] - - if rescue_bodies.empty? && !else_t.nil? - diagnostic :error, :useless_else, nil, else_t - end - - result = @builder.begin_body(val[0], - rescue_bodies, - else_t, else_, - ensure_t, ensure_) - - result -end - -def _reduce_12(val, _values, result) - result = @builder.compstmt(val[0]) - - result -end - -def _reduce_13(val, _values, result) - result = [] - - result -end - -def _reduce_14(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_15(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_16(val, _values, result) - result = [ val[1] ] - - result -end - -# reduce 17 omitted - -def _reduce_18(val, _values, result) - diagnostic :error, :begin_in_method, nil, val[0] - - result -end - -def _reduce_19(val, _values, result) - @lexer.state = :expr_fname - - result -end - -def _reduce_20(val, _values, result) - result = @builder.alias(val[0], val[1], val[3]) - - result -end - -def _reduce_21(val, _values, result) - result = @builder.alias(val[0], - @builder.gvar(val[1]), - @builder.gvar(val[2])) - - result -end - -def _reduce_22(val, _values, result) - result = @builder.alias(val[0], - @builder.gvar(val[1]), - @builder.back_ref(val[2])) - - result -end - -def _reduce_23(val, _values, result) - diagnostic :error, :nth_ref_alias, nil, val[2] - - result -end - -def _reduce_24(val, _values, result) - result = @builder.undef_method(val[0], val[1]) - - result -end - -def _reduce_25(val, _values, result) - result = @builder.condition_mod(val[0], nil, - val[1], val[2]) - - result -end - -def _reduce_26(val, _values, result) - result = @builder.condition_mod(nil, val[0], - val[1], val[2]) - - result -end - -def _reduce_27(val, _values, result) - result = @builder.loop_mod(:while, val[0], val[1], val[2]) - - result -end - -def _reduce_28(val, _values, result) - result = @builder.loop_mod(:until, val[0], val[1], val[2]) - - result -end - -def _reduce_29(val, _values, result) - rescue_body = @builder.rescue_body(val[1], - nil, nil, nil, - nil, val[2]) - - result = @builder.begin_body(val[0], [ rescue_body ]) - - result -end - -def _reduce_30(val, _values, result) - result = @builder.postexe(val[0], val[1], val[2], val[3]) - - result -end - -# reduce 31 omitted - -def _reduce_32(val, _values, result) - result = @builder.multi_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_33(val, _values, result) - result = @builder.assign(val[0], val[1], - @builder.array(nil, val[2], nil)) - - result -end - -def _reduce_34(val, _values, result) - rescue_body = @builder.rescue_body(val[3], - nil, nil, nil, - nil, val[4]) - begin_body = @builder.begin_body(val[2], [ rescue_body ]) - - result = @builder.multi_assign(val[0], val[1], begin_body) - - result -end - -def _reduce_35(val, _values, result) - result = @builder.multi_assign(val[0], val[1], val[2]) - - result -end - -# reduce 36 omitted - -def _reduce_37(val, _values, result) - result = @builder.assign(val[0], val[1], val[2]) - - result -end - -def _reduce_38(val, _values, result) - result = @builder.op_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_39(val, _values, result) - result = @builder.op_assign( - @builder.index( - val[0], val[1], val[2], val[3]), - val[4], val[5]) - - result -end - -def _reduce_40(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_41(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_42(val, _values, result) - const = @builder.const_op_assignable( - @builder.const_fetch(val[0], val[1], val[2])) - result = @builder.op_assign(const, val[3], val[4]) - - result -end - -def _reduce_43(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_44(val, _values, result) - def_t, (name_t, ctx) = val[0] - endless_method_name(name_t) - - result = @builder.def_endless_method(def_t, name_t, - val[1], val[2], val[3]) - - local_pop - @current_arg_stack.pop - @context.in_def = ctx.in_def - - result -end - -def _reduce_45(val, _values, result) - def_t, (name_t, ctx) = val[0] - endless_method_name(name_t) - - rescue_body = @builder.rescue_body(val[4], - nil, nil, nil, - nil, val[5]) - - method_body = @builder.begin_body(val[3], [ rescue_body ]) - - result = @builder.def_endless_method(def_t, name_t, - val[1], val[2], method_body) - - local_pop - @current_arg_stack.pop - @context.in_def = ctx.in_def - - result -end - -def _reduce_46(val, _values, result) - def_t, recv, dot_t, (name_t, ctx) = val[0] - endless_method_name(name_t) - - result = @builder.def_endless_singleton(def_t, recv, dot_t, name_t, - val[1], val[2], val[3]) - - local_pop - @current_arg_stack.pop - @context.in_def = ctx.in_def - - result -end - -def _reduce_47(val, _values, result) - def_t, recv, dot_t, (name_t, ctx) = val[0] - endless_method_name(name_t) - - rescue_body = @builder.rescue_body(val[4], - nil, nil, nil, - nil, val[5]) - - method_body = @builder.begin_body(val[3], [ rescue_body ]) - - result = @builder.def_endless_singleton(def_t, recv, dot_t, name_t, - val[1], val[2], method_body) - - local_pop - @current_arg_stack.pop - @context.in_def = ctx.in_def - - result -end - -def _reduce_48(val, _values, result) - @builder.op_assign(val[0], val[1], val[2]) - - result -end - -# reduce 49 omitted - -def _reduce_50(val, _values, result) - rescue_body = @builder.rescue_body(val[1], - nil, nil, nil, - nil, val[2]) - - result = @builder.begin_body(val[0], [ rescue_body ]) - - result -end - -# reduce 51 omitted - -# reduce 52 omitted - -def _reduce_53(val, _values, result) - result = @builder.logical_op(:and, val[0], val[1], val[2]) - - result -end - -def _reduce_54(val, _values, result) - result = @builder.logical_op(:or, val[0], val[1], val[2]) - - result -end - -def _reduce_55(val, _values, result) - result = @builder.not_op(val[0], nil, val[2], nil) - - result -end - -def _reduce_56(val, _values, result) - result = @builder.not_op(val[0], nil, val[1], nil) - - result -end - -def _reduce_57(val, _values, result) - @lexer.state = :expr_beg - @lexer.command_start = false - @pattern_variables.push - @pattern_hash_keys.push - - result = @context.in_kwarg - @context.in_kwarg = true - - result -end - -def _reduce_58(val, _values, result) - @pattern_variables.pop - @pattern_hash_keys.pop - @context.in_kwarg = val[2] - result = @builder.match_pattern(val[0], val[1], val[3]) - - result -end - -def _reduce_59(val, _values, result) - @lexer.state = :expr_beg - @lexer.command_start = false - @pattern_variables.push - @pattern_hash_keys.push - - result = @context.in_kwarg - @context.in_kwarg = true - - result -end - -def _reduce_60(val, _values, result) - @pattern_variables.pop - @pattern_hash_keys.pop - @context.in_kwarg = val[2] - result = @builder.match_pattern_p(val[0], val[1], val[3]) - - result -end - -# reduce 61 omitted - -# reduce 62 omitted - -def _reduce_63(val, _values, result) - @lexer.cond.push(true) - - result -end - -def _reduce_64(val, _values, result) - @lexer.cond.pop - result = [ val[1], val[2] ] - - result -end - -def _reduce_65(val, _values, result) - local_push - @current_arg_stack.push(nil) - - result = [ val[0], @context.dup ] - @context.in_def = true - - result -end - -def _reduce_66(val, _values, result) - result = [ val[0], val[1] ] - - result -end - -def _reduce_67(val, _values, result) - @lexer.state = :expr_fname - @context.in_argdef = true - - result -end - -def _reduce_68(val, _values, result) - result = [ val[0], val[1], val[2], val[4] ] - - result -end - -# reduce 69 omitted - -# reduce 70 omitted - -# reduce 71 omitted - -def _reduce_72(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - result -end - -def _reduce_73(val, _values, result) - result = @context.dup - @context.in_block = true - - result -end - -def _reduce_74(val, _values, result) - @context.in_block = val[1].in_block - result = [ val[0], *val[2], val[3] ] - - result -end - -# reduce 75 omitted - -def _reduce_76(val, _values, result) - result = @builder.call_method(nil, nil, val[0], - nil, val[1], nil) - - result -end - -def _reduce_77(val, _values, result) - method_call = @builder.call_method(nil, nil, val[0], - nil, val[1], nil) - - begin_t, args, body, end_t = val[2] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_78(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - result -end - -def _reduce_79(val, _values, result) - method_call = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - begin_t, args, body, end_t = val[4] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_80(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - result -end - -def _reduce_81(val, _values, result) - method_call = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - begin_t, args, body, end_t = val[4] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_82(val, _values, result) - result = @builder.keyword_cmd(:super, val[0], - nil, val[1], nil) - - result -end - -def _reduce_83(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0], - nil, val[1], nil) - - result -end - -def _reduce_84(val, _values, result) - result = @builder.keyword_cmd(:return, val[0], - nil, val[1], nil) - - result -end - -def _reduce_85(val, _values, result) - result = @builder.keyword_cmd(:break, val[0], - nil, val[1], nil) - - result -end - -def _reduce_86(val, _values, result) - result = @builder.keyword_cmd(:next, val[0], - nil, val[1], nil) - - result -end - -def _reduce_87(val, _values, result) - result = @builder.multi_lhs(nil, val[0], nil) - - result -end - -def _reduce_88(val, _values, result) - result = @builder.begin(val[0], val[1], val[2]) - - result -end - -def _reduce_89(val, _values, result) - result = @builder.multi_lhs(nil, val[0], nil) - - result -end - -def _reduce_90(val, _values, result) - result = @builder.multi_lhs(val[0], val[1], val[2]) - - result -end - -# reduce 91 omitted - -def _reduce_92(val, _values, result) - result = val[0]. - push(val[1]) - - result -end - -def _reduce_93(val, _values, result) - result = val[0]. - push(@builder.splat(val[1], val[2])) - - result -end - -def _reduce_94(val, _values, result) - result = val[0]. - push(@builder.splat(val[1], val[2])). - concat(val[4]) - - result -end - -def _reduce_95(val, _values, result) - result = val[0]. - push(@builder.splat(val[1])) - - result -end - -def _reduce_96(val, _values, result) - result = val[0]. - push(@builder.splat(val[1])). - concat(val[3]) - - result -end - -def _reduce_97(val, _values, result) - result = [ @builder.splat(val[0], val[1]) ] - - result -end - -def _reduce_98(val, _values, result) - result = [ @builder.splat(val[0], val[1]), - *val[3] ] - - result -end - -def _reduce_99(val, _values, result) - result = [ @builder.splat(val[0]) ] - - result -end - -def _reduce_100(val, _values, result) - result = [ @builder.splat(val[0]), - *val[2] ] - - result -end - -# reduce 101 omitted - -def _reduce_102(val, _values, result) - result = @builder.begin(val[0], val[1], val[2]) - - result -end - -def _reduce_103(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_104(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_105(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_106(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_107(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_108(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_109(val, _values, result) - result = @builder.index_asgn(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_110(val, _values, result) - if (val[1][0] == :anddot) - diagnostic :error, :csend_in_lhs_of_masgn, nil, val[1] - end - - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_111(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_112(val, _values, result) - if (val[1][0] == :anddot) - diagnostic :error, :csend_in_lhs_of_masgn, nil, val[1] - end - - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_113(val, _values, result) - result = @builder.assignable( - @builder.const_fetch(val[0], val[1], val[2])) - - result -end - -def _reduce_114(val, _values, result) - result = @builder.assignable( - @builder.const_global(val[0], val[1])) - - result -end - -def _reduce_115(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_116(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_117(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_118(val, _values, result) - result = @builder.index_asgn(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_119(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_120(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_121(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_122(val, _values, result) - result = @builder.assignable( - @builder.const_fetch(val[0], val[1], val[2])) - - result -end - -def _reduce_123(val, _values, result) - result = @builder.assignable( - @builder.const_global(val[0], val[1])) - - result -end - -def _reduce_124(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_125(val, _values, result) - diagnostic :error, :module_name_const, nil, val[0] - - result -end - -# reduce 126 omitted - -def _reduce_127(val, _values, result) - result = @builder.const_global(val[0], val[1]) - - result -end - -def _reduce_128(val, _values, result) - result = @builder.const(val[0]) - - result -end - -def _reduce_129(val, _values, result) - result = @builder.const_fetch(val[0], val[1], val[2]) - - result -end - -# reduce 130 omitted - -# reduce 131 omitted - -# reduce 132 omitted - -# reduce 133 omitted - -# reduce 134 omitted - -def _reduce_135(val, _values, result) - result = @builder.symbol_internal(val[0]) - - result -end - -# reduce 136 omitted - -def _reduce_137(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_138(val, _values, result) - @lexer.state = :expr_fname - - result -end - -def _reduce_139(val, _values, result) - result = val[0] << val[3] - - result -end - -# reduce 140 omitted - -# reduce 141 omitted - -# reduce 142 omitted - -# reduce 143 omitted - -# reduce 144 omitted - -# reduce 145 omitted - -# reduce 146 omitted - -# reduce 147 omitted - -# reduce 148 omitted - -# reduce 149 omitted - -# reduce 150 omitted - -# reduce 151 omitted - -# reduce 152 omitted - -# reduce 153 omitted - -# reduce 154 omitted - -# reduce 155 omitted - -# reduce 156 omitted - -# reduce 157 omitted - -# reduce 158 omitted - -# reduce 159 omitted - -# reduce 160 omitted - -# reduce 161 omitted - -# reduce 162 omitted - -# reduce 163 omitted - -# reduce 164 omitted - -# reduce 165 omitted - -# reduce 166 omitted - -# reduce 167 omitted - -# reduce 168 omitted - -# reduce 169 omitted - -# reduce 170 omitted - -# reduce 171 omitted - -# reduce 172 omitted - -# reduce 173 omitted - -# reduce 174 omitted - -# reduce 175 omitted - -# reduce 176 omitted - -# reduce 177 omitted - -# reduce 178 omitted - -# reduce 179 omitted - -# reduce 180 omitted - -# reduce 181 omitted - -# reduce 182 omitted - -# reduce 183 omitted - -# reduce 184 omitted - -# reduce 185 omitted - -# reduce 186 omitted - -# reduce 187 omitted - -# reduce 188 omitted - -# reduce 189 omitted - -# reduce 190 omitted - -# reduce 191 omitted - -# reduce 192 omitted - -# reduce 193 omitted - -# reduce 194 omitted - -# reduce 195 omitted - -# reduce 196 omitted - -# reduce 197 omitted - -# reduce 198 omitted - -# reduce 199 omitted - -# reduce 200 omitted - -# reduce 201 omitted - -# reduce 202 omitted - -# reduce 203 omitted - -# reduce 204 omitted - -# reduce 205 omitted - -# reduce 206 omitted - -# reduce 207 omitted - -# reduce 208 omitted - -# reduce 209 omitted - -# reduce 210 omitted - -def _reduce_211(val, _values, result) - result = @builder.assign(val[0], val[1], val[2]) - - result -end - -def _reduce_212(val, _values, result) - result = @builder.op_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_213(val, _values, result) - result = @builder.op_assign( - @builder.index( - val[0], val[1], val[2], val[3]), - val[4], val[5]) - - result -end - -def _reduce_214(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_215(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_216(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_217(val, _values, result) - const = @builder.const_op_assignable( - @builder.const_fetch(val[0], val[1], val[2])) - result = @builder.op_assign(const, val[3], val[4]) - - result -end - -def _reduce_218(val, _values, result) - const = @builder.const_op_assignable( - @builder.const_global(val[0], val[1])) - result = @builder.op_assign(const, val[2], val[3]) - - result -end - -def _reduce_219(val, _values, result) - result = @builder.op_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_220(val, _values, result) - result = @builder.range_inclusive(val[0], val[1], val[2]) - - result -end - -def _reduce_221(val, _values, result) - result = @builder.range_exclusive(val[0], val[1], val[2]) - - result -end - -def _reduce_222(val, _values, result) - result = @builder.range_inclusive(val[0], val[1], nil) - - result -end - -def _reduce_223(val, _values, result) - result = @builder.range_exclusive(val[0], val[1], nil) - - result -end - -def _reduce_224(val, _values, result) - result = @builder.range_inclusive(nil, val[0], val[1]) - - result -end - -def _reduce_225(val, _values, result) - result = @builder.range_exclusive(nil, val[0], val[1]) - - result -end - -def _reduce_226(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_227(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_228(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_229(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_230(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_231(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_232(val, _values, result) - result = @builder.unary_op(val[0], - @builder.binary_op( - val[1], val[2], val[3])) - - result -end - -def _reduce_233(val, _values, result) - result = @builder.unary_op(val[0], val[1]) - - result -end - -def _reduce_234(val, _values, result) - result = @builder.unary_op(val[0], val[1]) - - result -end - -def _reduce_235(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_236(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_237(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_238(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -# reduce 239 omitted - -def _reduce_240(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_241(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_242(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_243(val, _values, result) - result = @builder.match_op(val[0], val[1], val[2]) - - result -end - -def _reduce_244(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_245(val, _values, result) - result = @builder.not_op(val[0], nil, val[1], nil) - - result -end - -def _reduce_246(val, _values, result) - result = @builder.unary_op(val[0], val[1]) - - result -end - -def _reduce_247(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_248(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_249(val, _values, result) - result = @builder.logical_op(:and, val[0], val[1], val[2]) - - result -end - -def _reduce_250(val, _values, result) - result = @builder.logical_op(:or, val[0], val[1], val[2]) - - result -end - -def _reduce_251(val, _values, result) - @context.in_defined = true - - result -end - -def _reduce_252(val, _values, result) - @context.in_defined = false - result = @builder.keyword_cmd(:defined?, val[0], nil, [ val[3] ], nil) - - result -end - -def _reduce_253(val, _values, result) - result = @builder.ternary(val[0], val[1], - val[2], val[4], val[5]) - - result -end - -def _reduce_254(val, _values, result) - def_t, (name_t, ctx) = val[0] - endless_method_name(name_t) - - result = @builder.def_endless_method(def_t, name_t, - val[1], val[2], val[3]) - - local_pop - @current_arg_stack.pop - @context.in_def = ctx.in_def - - result -end - -def _reduce_255(val, _values, result) - def_t, (name_t, ctx) = val[0] - endless_method_name(name_t) - - rescue_body = @builder.rescue_body(val[4], - nil, nil, nil, - nil, val[5]) - - method_body = @builder.begin_body(val[3], [ rescue_body ]) - - result = @builder.def_endless_method(def_t, name_t, - val[1], val[2], method_body) - - local_pop - @current_arg_stack.pop - @context.in_def = ctx.in_def - - result -end - -def _reduce_256(val, _values, result) - def_t, recv, dot_t, (name_t, ctx) = val[0] - endless_method_name(name_t) - - result = @builder.def_endless_singleton(def_t, recv, dot_t, name_t, - val[1], val[2], val[3]) - - local_pop - @current_arg_stack.pop - @context.in_def = ctx.in_def - - result -end - -def _reduce_257(val, _values, result) - def_t, recv, dot_t, (name_t, ctx) = val[0] - endless_method_name(name_t) - - rescue_body = @builder.rescue_body(val[4], - nil, nil, nil, - nil, val[5]) - - method_body = @builder.begin_body(val[3], [ rescue_body ]) - - result = @builder.def_endless_singleton(def_t, recv, dot_t, name_t, - val[1], val[2], method_body) - - local_pop - @current_arg_stack.pop - @context.in_def = ctx.in_def - - result -end - -# reduce 258 omitted - -# reduce 259 omitted - -# reduce 260 omitted - -# reduce 261 omitted - -# reduce 262 omitted - -def _reduce_263(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_264(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -# reduce 265 omitted - -# reduce 266 omitted - -# reduce 267 omitted - -def _reduce_268(val, _values, result) - result = val[0] << @builder.associate(nil, val[2], nil) - - result -end - -def _reduce_269(val, _values, result) - result = [ @builder.associate(nil, val[0], nil) ] - - result -end - -# reduce 270 omitted - -def _reduce_271(val, _values, result) - rescue_body = @builder.rescue_body(val[1], - nil, nil, nil, - nil, val[2]) - - result = @builder.begin_body(val[0], [ rescue_body ]) - - result -end - -def _reduce_272(val, _values, result) - result = val - - result -end - -def _reduce_273(val, _values, result) - unless @static_env.declared_forward_args? - diagnostic :error, :unexpected_token, { :token => 'tBDOT3' } , val[3] - end - - result = [val[0], [*val[1], @builder.forwarded_args(val[3])], val[4]] - - result -end - -def _reduce_274(val, _values, result) - unless @static_env.declared_forward_args? - diagnostic :error, :unexpected_token, { :token => 'tBDOT3' } , val[1] - end - - result = [val[0], [@builder.forwarded_args(val[1])], val[2]] - - result -end - -def _reduce_275(val, _values, result) - result = [ nil, [], nil ] - - result -end - -# reduce 276 omitted - -def _reduce_277(val, _values, result) - result = [] - - result -end - -# reduce 278 omitted - -# reduce 279 omitted - -def _reduce_280(val, _values, result) - result = val[0] << @builder.associate(nil, val[2], nil) - - result -end - -def _reduce_281(val, _values, result) - result = [ @builder.associate(nil, val[0], nil) ] - - result -end - -def _reduce_282(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_283(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_284(val, _values, result) - result = [ @builder.associate(nil, val[0], nil) ] - result.concat(val[1]) - - result -end - -def _reduce_285(val, _values, result) - assocs = @builder.associate(nil, val[2], nil) - result = val[0] << assocs - result.concat(val[3]) - - result -end - -def _reduce_286(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_287(val, _values, result) - # When branch gets invoked by RACC's lookahead - # and command args start with '[' or '(' - # we need to put `true` to the cmdarg stack - # **before** `false` pushed by lexer - # m [], n - # ^ - # Right here we have cmdarg [...0] because - # lexer pushed it on '[' - # We need to modify cmdarg stack to [...10] - # - # For all other cases (like `m n` or `m n, []`) we simply put 1 to the stack - # and later lexer pushes corresponding bits on top of it. - last_token = @last_token[0] - lookahead = last_token == :tLBRACK || last_token == :tLPAREN_ARG - - if lookahead - top = @lexer.cmdarg.pop - @lexer.cmdarg.push(true) - @lexer.cmdarg.push(top) - else - @lexer.cmdarg.push(true) - end - - result -end - -def _reduce_288(val, _values, result) - # call_args can be followed by tLBRACE_ARG (that does cmdarg.push(0) in the lexer) - # but the push must be done after cmdarg.pop() in the parser. - # So this code does cmdarg.pop() to pop 0 pushed by tLBRACE_ARG, - # cmdarg.pop() to pop 1 pushed by command_args, - # and cmdarg.push(0) to restore back the flag set by tLBRACE_ARG. - last_token = @last_token[0] - lookahead = last_token == :tLBRACE_ARG - if lookahead - top = @lexer.cmdarg.pop - @lexer.cmdarg.pop - @lexer.cmdarg.push(top) - else - @lexer.cmdarg.pop - end - - result = val[1] - - result -end - -def _reduce_289(val, _values, result) - result = @builder.block_pass(val[0], val[1]) - - result -end - -def _reduce_290(val, _values, result) - if !@static_env.declared_anonymous_blockarg? - diagnostic :error, :no_anonymous_blockarg, nil, val[0] - end - - result = @builder.block_pass(val[0], nil) - - result -end - -def _reduce_291(val, _values, result) - result = [ val[1] ] - - result -end - -def _reduce_292(val, _values, result) - result = [] - - result -end - -def _reduce_293(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_294(val, _values, result) - result = [ @builder.splat(val[0], val[1]) ] - - result -end - -def _reduce_295(val, _values, result) - if !@static_env.declared_anonymous_restarg? - diagnostic :error, :no_anonymous_restarg, nil, val[0] - end - - result = [ @builder.forwarded_restarg(val[0]) ] - - result -end - -def _reduce_296(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_297(val, _values, result) - result = val[0] << @builder.splat(val[2], val[3]) - - result -end - -def _reduce_298(val, _values, result) - if !@static_env.declared_anonymous_restarg? - diagnostic :error, :no_anonymous_restarg, nil, val[2] - end - - result = val[0] << @builder.forwarded_restarg(val[2]) - - result -end - -def _reduce_299(val, _values, result) - result = @builder.array(nil, val[0], nil) - - result -end - -# reduce 300 omitted - -def _reduce_301(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_302(val, _values, result) - result = val[0] << @builder.splat(val[2], val[3]) - - result -end - -def _reduce_303(val, _values, result) - result = [ @builder.splat(val[0], val[1]) ] - - result -end - -# reduce 304 omitted - -# reduce 305 omitted - -# reduce 306 omitted - -# reduce 307 omitted - -# reduce 308 omitted - -# reduce 309 omitted - -# reduce 310 omitted - -# reduce 311 omitted - -# reduce 312 omitted - -# reduce 313 omitted - -def _reduce_314(val, _values, result) - result = @builder.call_method(nil, nil, val[0]) - - result -end - -def _reduce_315(val, _values, result) - @lexer.cmdarg.push(false) - - result -end - -def _reduce_316(val, _values, result) - @lexer.cmdarg.pop - - result = @builder.begin_keyword(val[0], val[2], val[3]) - - result -end - -def _reduce_317(val, _values, result) - @lexer.state = :expr_endarg - - result -end - -def _reduce_318(val, _values, result) - result = @builder.begin(val[0], val[1], val[3]) - - result -end - -def _reduce_319(val, _values, result) - @lexer.state = :expr_endarg - - result -end - -def _reduce_320(val, _values, result) - result = @builder.begin(val[0], nil, val[3]) - - result -end - -def _reduce_321(val, _values, result) - result = @builder.begin(val[0], val[1], val[2]) - - result -end - -def _reduce_322(val, _values, result) - result = @builder.const_fetch(val[0], val[1], val[2]) - - result -end - -def _reduce_323(val, _values, result) - result = @builder.const_global(val[0], val[1]) - - result -end - -def _reduce_324(val, _values, result) - result = @builder.array(val[0], val[1], val[2]) - - result -end - -def _reduce_325(val, _values, result) - result = @builder.associate(val[0], val[1], val[2]) - - result -end - -def _reduce_326(val, _values, result) - result = @builder.keyword_cmd(:return, val[0]) - - result -end - -def _reduce_327(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_328(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0], val[1], [], val[2]) - - result -end - -def _reduce_329(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0]) - - result -end - -def _reduce_330(val, _values, result) - @context.in_defined = true - - result -end - -def _reduce_331(val, _values, result) - @context.in_defined = false - result = @builder.keyword_cmd(:defined?, val[0], - val[2], [ val[4] ], val[5]) - - result -end - -def _reduce_332(val, _values, result) - result = @builder.not_op(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_333(val, _values, result) - result = @builder.not_op(val[0], val[1], nil, val[2]) - - result -end - -def _reduce_334(val, _values, result) - method_call = @builder.call_method(nil, nil, val[0]) - - begin_t, args, body, end_t = val[1] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -# reduce 335 omitted - -def _reduce_336(val, _values, result) - begin_t, args, body, end_t = val[1] - result = @builder.block(val[0], - begin_t, args, body, end_t) - - result -end - -# reduce 337 omitted - -def _reduce_338(val, _values, result) - else_t, else_ = val[4] - result = @builder.condition(val[0], val[1], val[2], - val[3], else_t, - else_, val[5]) - - result -end - -def _reduce_339(val, _values, result) - else_t, else_ = val[4] - result = @builder.condition(val[0], val[1], val[2], - else_, else_t, - val[3], val[5]) - - result -end - -def _reduce_340(val, _values, result) - result = @builder.loop(:while, val[0], *val[1], val[2], val[3]) - - result -end - -def _reduce_341(val, _values, result) - result = @builder.loop(:until, val[0], *val[1], val[2], val[3]) - - result -end - -def _reduce_342(val, _values, result) - *when_bodies, (else_t, else_body) = *val[3] - - result = @builder.case(val[0], val[1], - when_bodies, else_t, else_body, - val[4]) - - result -end - -def _reduce_343(val, _values, result) - *when_bodies, (else_t, else_body) = *val[2] - - result = @builder.case(val[0], nil, - when_bodies, else_t, else_body, - val[3]) - - result -end - -def _reduce_344(val, _values, result) - *in_bodies, (else_t, else_body) = *val[3] - - result = @builder.case_match(val[0], val[1], - in_bodies, else_t, else_body, - val[4]) - - result -end - -def _reduce_345(val, _values, result) - result = @builder.for(val[0], val[1], val[2], *val[3], val[4], val[5]) - - result -end - -def _reduce_346(val, _values, result) - @context.in_class = true - local_push - - result -end - -def _reduce_347(val, _values, result) - k_class, ctx = val[0] - if @context.in_def - diagnostic :error, :class_in_def, nil, k_class - end - lt_t, superclass = val[2] - result = @builder.def_class(k_class, val[1], - lt_t, superclass, - val[4], val[5]) - - local_pop - @context.in_class = ctx.in_class - - result -end - -def _reduce_348(val, _values, result) - @context.in_def = false - @context.in_class = false - local_push - - result -end - -def _reduce_349(val, _values, result) - k_class, ctx = val[0] - result = @builder.def_sclass(k_class, val[1], val[2], - val[5], val[6]) - - local_pop - @context.in_def = ctx.in_def - @context.in_class = ctx.in_class - - result -end - -def _reduce_350(val, _values, result) - @context.in_class = true - local_push - - result -end - -def _reduce_351(val, _values, result) - k_mod, ctx = val[0] - if @context.in_def - diagnostic :error, :module_in_def, nil, k_mod - end - result = @builder.def_module(k_mod, val[1], - val[3], val[4]) - - local_pop - @context.in_class = ctx.in_class - - result -end - -def _reduce_352(val, _values, result) - def_t, (name_t, ctx) = val[0] - result = @builder.def_method(def_t, name_t, val[1], - val[2], val[3]) - - local_pop - @current_arg_stack.pop - @context.in_def = ctx.in_def - - result -end - -def _reduce_353(val, _values, result) - def_t, recv, dot_t, (name_t, ctx) = val[0] - result = @builder.def_singleton(def_t, recv, dot_t, name_t, val[1], - val[2], val[3]) - - local_pop - @current_arg_stack.pop - @context.in_def = ctx.in_def - - result -end - -def _reduce_354(val, _values, result) - result = @builder.keyword_cmd(:break, val[0]) - - result -end - -def _reduce_355(val, _values, result) - result = @builder.keyword_cmd(:next, val[0]) - - result -end - -def _reduce_356(val, _values, result) - result = @builder.keyword_cmd(:redo, val[0]) - - result -end - -def _reduce_357(val, _values, result) - result = @builder.keyword_cmd(:retry, val[0]) - - result -end - -# reduce 358 omitted - -def _reduce_359(val, _values, result) - result = [ val[0], @context.dup ] - - result -end - -def _reduce_360(val, _values, result) - result = [ val[0], @context.dup ] - - result -end - -def _reduce_361(val, _values, result) - result = val[0] - @context.in_argdef = true - - result -end - -def _reduce_362(val, _values, result) - if @context.in_class && !@context.in_def && !(context.in_block || context.in_lambda) - diagnostic :error, :invalid_return, nil, val[0] - end - - result -end - -# reduce 363 omitted - -# reduce 364 omitted - -def _reduce_365(val, _values, result) - result = val[1] - - result -end - -# reduce 366 omitted - -# reduce 367 omitted - -# reduce 368 omitted - -def _reduce_369(val, _values, result) - else_t, else_ = val[4] - result = [ val[0], - @builder.condition(val[0], val[1], val[2], - val[3], else_t, - else_, nil), - ] - - result -end - -# reduce 370 omitted - -def _reduce_371(val, _values, result) - result = val - - result -end - -# reduce 372 omitted - -# reduce 373 omitted - -def _reduce_374(val, _values, result) - result = @builder.arg(val[0]) - - result -end - -def _reduce_375(val, _values, result) - result = @builder.multi_lhs(val[0], val[1], val[2]) - - result -end - -def _reduce_376(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_377(val, _values, result) - result = val[0] << val[2] - - result -end - -# reduce 378 omitted - -def _reduce_379(val, _values, result) - result = val[0]. - push(val[2]) - - result -end - -def _reduce_380(val, _values, result) - result = val[0]. - push(val[2]). - concat(val[4]) - - result -end - -def _reduce_381(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_382(val, _values, result) - result = [ val[0], *val[2] ] - - result -end - -def _reduce_383(val, _values, result) - result = @builder.restarg(val[0], val[1]) - - result -end - -def _reduce_384(val, _values, result) - result = @builder.restarg(val[0]) - - result -end - -# reduce 385 omitted - -# reduce 386 omitted - -def _reduce_387(val, _values, result) - @context.in_argdef = false - - result -end - -def _reduce_388(val, _values, result) - result = val[1] - - result -end - -def _reduce_389(val, _values, result) - result = val[0].concat(val[2]).concat(val[3]) - - result -end - -def _reduce_390(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_391(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_392(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_393(val, _values, result) - result = val[1] - - result -end - -def _reduce_394(val, _values, result) - result = [] - - result -end - -# reduce 395 omitted - -def _reduce_396(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_397(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[6]). - concat(val[7]) - - result -end - -def _reduce_398(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_399(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_400(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -# reduce 401 omitted - -def _reduce_402(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_403(val, _values, result) - if val[1].empty? && val[0].size == 1 - result = [@builder.procarg0(val[0][0])] - else - result = val[0].concat(val[1]) - end - - result -end - -def _reduce_404(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_405(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_406(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_407(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_408(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_409(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -# reduce 410 omitted - -def _reduce_411(val, _values, result) - result = @builder.args(nil, [], nil) - - result -end - -def _reduce_412(val, _values, result) - @lexer.state = :expr_value - - result -end - -def _reduce_413(val, _values, result) - @max_numparam_stack.has_ordinary_params! - @current_arg_stack.set(nil) - @context.in_argdef = false - result = @builder.args(val[0], val[1], val[2]) - - result -end - -def _reduce_414(val, _values, result) - @max_numparam_stack.has_ordinary_params! - @current_arg_stack.set(nil) - @context.in_argdef = false - result = @builder.args(val[0], val[1].concat(val[2]), val[3]) - - result -end - -def _reduce_415(val, _values, result) - result = [] - - result -end - -def _reduce_416(val, _values, result) - result = val[2] - - result -end - -def _reduce_417(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_418(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_419(val, _values, result) - @static_env.declare val[0][0] - result = @builder.shadowarg(val[0]) - - result -end - -# reduce 420 omitted - -def _reduce_421(val, _values, result) - @static_env.extend_dynamic - @max_numparam_stack.push(static: false) - result = @context.dup - @context.in_lambda = true - - result -end - -def _reduce_422(val, _values, result) - @lexer.cmdarg.push(false) - - result -end - -def _reduce_423(val, _values, result) - lambda_call = @builder.call_lambda(val[0]) - args = @max_numparam_stack.has_numparams? ? @builder.numargs(@max_numparam_stack.top) : val[2] - begin_t, body, end_t = val[4] - - @max_numparam_stack.pop - @static_env.unextend - @lexer.cmdarg.pop - @context.in_lambda = val[1].in_lambda - - result = @builder.block(lambda_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_424(val, _values, result) - @context.in_argdef = false - @max_numparam_stack.has_ordinary_params! - result = @builder.args(val[0], val[1].concat(val[2]), val[3]) - - result -end - -def _reduce_425(val, _values, result) - @context.in_argdef = false - if val[0].any? - @max_numparam_stack.has_ordinary_params! - end - result = @builder.args(nil, val[0], nil) - - result -end - -def _reduce_426(val, _values, result) - result = @context.dup - @context.in_lambda = true - - result -end - -def _reduce_427(val, _values, result) - @context.in_lambda = val[1].in_lambda - result = [ val[0], val[2], val[3] ] - - result -end - -def _reduce_428(val, _values, result) - result = @context.dup - @context.in_lambda = true - - result -end - -def _reduce_429(val, _values, result) - @context.in_lambda = val[1].in_lambda - result = [ val[0], val[2], val[3] ] - - result -end - -def _reduce_430(val, _values, result) - result = @context.dup - @context.in_block = true - - result -end - -def _reduce_431(val, _values, result) - @context.in_block = val[1].in_block - result = [ val[0], *val[2], val[3] ] - - result -end - -def _reduce_432(val, _values, result) - begin_t, block_args, body, end_t = val[1] - result = @builder.block(val[0], - begin_t, block_args, body, end_t) - - result -end - -def _reduce_433(val, _values, result) - lparen_t, args, rparen_t = val[3] - result = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - result -end - -def _reduce_434(val, _values, result) - lparen_t, args, rparen_t = val[3] - method_call = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - begin_t, args, body, end_t = val[4] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_435(val, _values, result) - method_call = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - begin_t, args, body, end_t = val[4] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_436(val, _values, result) - lparen_t, args, rparen_t = val[1] - result = @builder.call_method(nil, nil, val[0], - lparen_t, args, rparen_t) - - result -end - -def _reduce_437(val, _values, result) - lparen_t, args, rparen_t = val[3] - result = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - result -end - -def _reduce_438(val, _values, result) - lparen_t, args, rparen_t = val[3] - result = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - result -end - -def _reduce_439(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2]) - - result -end - -def _reduce_440(val, _values, result) - lparen_t, args, rparen_t = val[2] - result = @builder.call_method(val[0], val[1], nil, - lparen_t, args, rparen_t) - - result -end - -def _reduce_441(val, _values, result) - lparen_t, args, rparen_t = val[2] - result = @builder.call_method(val[0], val[1], nil, - lparen_t, args, rparen_t) - - result -end - -def _reduce_442(val, _values, result) - lparen_t, args, rparen_t = val[1] - result = @builder.keyword_cmd(:super, val[0], - lparen_t, args, rparen_t) - - result -end - -def _reduce_443(val, _values, result) - result = @builder.keyword_cmd(:zsuper, val[0]) - - result -end - -def _reduce_444(val, _values, result) - result = @builder.index(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_445(val, _values, result) - result = @context.dup - @context.in_block = true - - result -end - -def _reduce_446(val, _values, result) - @context.in_block = val[1].in_block - result = [ val[0], *val[2], val[3] ] - - result -end - -def _reduce_447(val, _values, result) - result = @context.dup - @context.in_block = true - - result -end - -def _reduce_448(val, _values, result) - @context.in_block = val[1].in_block - result = [ val[0], *val[2], val[3] ] - - result -end - -def _reduce_449(val, _values, result) - @static_env.extend_dynamic - @max_numparam_stack.push(static: false) - - result -end - -def _reduce_450(val, _values, result) - args = @max_numparam_stack.has_numparams? ? @builder.numargs(@max_numparam_stack.top) : val[1] - result = [ args, val[2] ] - - @max_numparam_stack.pop - @static_env.unextend - - result -end - -def _reduce_451(val, _values, result) - @static_env.extend_dynamic - @max_numparam_stack.push(static: false) - - result -end - -def _reduce_452(val, _values, result) - @lexer.cmdarg.push(false) - - result -end - -def _reduce_453(val, _values, result) - args = @max_numparam_stack.has_numparams? ? @builder.numargs(@max_numparam_stack.top) : val[2] - result = [ args, val[3] ] - - @max_numparam_stack.pop - @static_env.unextend - @lexer.cmdarg.pop - - result -end - -def _reduce_454(val, _values, result) - result = [ @builder.when(val[0], val[1], val[2], val[3]), - *val[4] ] - - result -end - -def _reduce_455(val, _values, result) - result = [ val[0] ] - - result -end - -# reduce 456 omitted - -def _reduce_457(val, _values, result) - @lexer.state = :expr_beg - @lexer.command_start = false - @pattern_variables.push - @pattern_hash_keys.push - - result = @context.in_kwarg - @context.in_kwarg = true - - result -end - -def _reduce_458(val, _values, result) - @pattern_variables.pop - @pattern_hash_keys.pop - @context.in_kwarg = val[1] - - result -end - -def _reduce_459(val, _values, result) - result = [ @builder.in_pattern(val[0], *val[2], val[3], val[5]), - *val[6] ] - - result -end - -def _reduce_460(val, _values, result) - result = [ val[0] ] - - result -end - -# reduce 461 omitted - -def _reduce_462(val, _values, result) - result = [ val[0], nil ] - - result -end - -def _reduce_463(val, _values, result) - result = [ val[0], @builder.if_guard(val[1], val[2]) ] - - result -end - -def _reduce_464(val, _values, result) - result = [ val[0], @builder.unless_guard(val[1], val[2]) ] - - result -end - -# reduce 465 omitted - -def _reduce_466(val, _values, result) - # array patterns that end with comma - # like 1, 2, - # must be emitted as `array_pattern_with_tail` - item = @builder.match_with_trailing_comma(val[0], val[1]) - result = @builder.array_pattern(nil, [ item ], nil) - - result -end - -def _reduce_467(val, _values, result) - result = @builder.array_pattern(nil, [val[0]].concat(val[2]), nil) - - result -end - -def _reduce_468(val, _values, result) - result = @builder.find_pattern(nil, val[0], nil) - - result -end - -def _reduce_469(val, _values, result) - result = @builder.array_pattern(nil, val[0], nil) - - result -end - -def _reduce_470(val, _values, result) - result = @builder.hash_pattern(nil, val[0], nil) - - result -end - -# reduce 471 omitted - -def _reduce_472(val, _values, result) - result = @builder.match_as(val[0], val[1], val[2]) - - result -end - -# reduce 473 omitted - -def _reduce_474(val, _values, result) - result = @builder.match_alt(val[0], val[1], val[2]) - - result -end - -# reduce 475 omitted - -def _reduce_476(val, _values, result) - result = val[0] - @pattern_hash_keys.push - - result -end - -def _reduce_477(val, _values, result) - result = val[0] - @pattern_hash_keys.push - - result -end - -# reduce 478 omitted - -# reduce 479 omitted - -def _reduce_480(val, _values, result) - @pattern_hash_keys.pop - pattern = @builder.array_pattern(nil, val[2], nil) - result = @builder.const_pattern(val[0], val[1], pattern, val[3]) - - result -end - -def _reduce_481(val, _values, result) - @pattern_hash_keys.pop - pattern = @builder.find_pattern(nil, val[2], nil) - result = @builder.const_pattern(val[0], val[1], pattern, val[3]) - - result -end - -def _reduce_482(val, _values, result) - @pattern_hash_keys.pop - pattern = @builder.hash_pattern(nil, val[2], nil) - result = @builder.const_pattern(val[0], val[1], pattern, val[3]) - - result -end - -def _reduce_483(val, _values, result) - pattern = @builder.array_pattern(val[1], nil, val[2]) - result = @builder.const_pattern(val[0], val[1], pattern, val[2]) - - result -end - -def _reduce_484(val, _values, result) - @pattern_hash_keys.pop - pattern = @builder.array_pattern(nil, val[2], nil) - result = @builder.const_pattern(val[0], val[1], pattern, val[3]) - - result -end - -def _reduce_485(val, _values, result) - @pattern_hash_keys.pop - pattern = @builder.find_pattern(nil, val[2], nil) - result = @builder.const_pattern(val[0], val[1], pattern, val[3]) - - result -end - -def _reduce_486(val, _values, result) - @pattern_hash_keys.pop - pattern = @builder.hash_pattern(nil, val[2], nil) - result = @builder.const_pattern(val[0], val[1], pattern, val[3]) - - result -end - -def _reduce_487(val, _values, result) - pattern = @builder.array_pattern(val[1], nil, val[2]) - result = @builder.const_pattern(val[0], val[1], pattern, val[2]) - - result -end - -def _reduce_488(val, _values, result) - result = @builder.array_pattern(val[0], val[1], val[2]) - - result -end - -def _reduce_489(val, _values, result) - result = @builder.find_pattern(val[0], val[1], val[2]) - - result -end - -def _reduce_490(val, _values, result) - result = @builder.array_pattern(val[0], [], val[1]) - - result -end - -def _reduce_491(val, _values, result) - @pattern_hash_keys.push - result = @context.in_kwarg - @context.in_kwarg = false - - result -end - -def _reduce_492(val, _values, result) - @pattern_hash_keys.pop - @context.in_kwarg = val[1] - result = @builder.hash_pattern(val[0], val[2], val[3]) - - result -end - -def _reduce_493(val, _values, result) - result = @builder.hash_pattern(val[0], [], val[1]) - - result -end - -def _reduce_494(val, _values, result) - @pattern_hash_keys.push - - result -end - -def _reduce_495(val, _values, result) - @pattern_hash_keys.pop - result = @builder.begin(val[0], val[2], val[3]) - - result -end - -def _reduce_496(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_497(val, _values, result) - result = val[0] - - result -end - -def _reduce_498(val, _values, result) - result = [ *val[0], val[1] ] - - result -end - -def _reduce_499(val, _values, result) - result = [ *val[0], val[1] ] - - result -end - -def _reduce_500(val, _values, result) - result = [ *val[0], val[1], *val[3] ] - - result -end - -# reduce 501 omitted - -def _reduce_502(val, _values, result) - # array patterns that end with comma - # like [1, 2,] - # must be emitted as `array_pattern_with_tail` - item = @builder.match_with_trailing_comma(val[0], val[1]) - result = [ item ] - - result -end - -def _reduce_503(val, _values, result) - # array patterns that end with comma - # like [1, 2,] - # must be emitted as `array_pattern_with_tail` - last_item = @builder.match_with_trailing_comma(val[1], val[2]) - result = [ *val[0], last_item ] - - result -end - -def _reduce_504(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_505(val, _values, result) - result = [ val[0], *val[2] ] - - result -end - -def _reduce_506(val, _values, result) - result = [ val[0], *val[2], val[4] ] - - result -end - -def _reduce_507(val, _values, result) - result = @builder.match_rest(val[0], val[1]) - - result -end - -def _reduce_508(val, _values, result) - result = @builder.match_rest(val[0]) - - result -end - -def _reduce_509(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_510(val, _values, result) - result = [ *val[0], val[2] ] - - result -end - -# reduce 511 omitted - -def _reduce_512(val, _values, result) - result = [ *val[0], *val[2] ] - - result -end - -def _reduce_513(val, _values, result) - result = val[0] - - result -end - -def _reduce_514(val, _values, result) - result = val[0] - - result -end - -def _reduce_515(val, _values, result) - result = val[0] - - result -end - -def _reduce_516(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_517(val, _values, result) - result = [ *val[0], val[2] ] - - result -end - -def _reduce_518(val, _values, result) - result = @builder.match_pair(*val[0], val[1]) - - result -end - -def _reduce_519(val, _values, result) - result = @builder.match_label(*val[0]) - - result -end - -def _reduce_520(val, _values, result) - result = [:label, val[0]] - - result -end - -def _reduce_521(val, _values, result) - result = [:quoted, [val[0], val[1], val[2]]] - - result -end - -def _reduce_522(val, _values, result) - result = [ @builder.match_rest(val[0], val[1]) ] - - result -end - -def _reduce_523(val, _values, result) - result = [ @builder.match_rest(val[0], nil) ] - - result -end - -def _reduce_524(val, _values, result) - result = val - - result -end - -# reduce 525 omitted - -def _reduce_526(val, _values, result) - result = [ @builder.match_nil_pattern(val[0][0], val[0][1]) ] - - result -end - -# reduce 527 omitted - -def _reduce_528(val, _values, result) - result = @builder.range_inclusive(val[0], val[1], val[2]) - - result -end - -def _reduce_529(val, _values, result) - result = @builder.range_exclusive(val[0], val[1], val[2]) - - result -end - -def _reduce_530(val, _values, result) - result = @builder.range_inclusive(val[0], val[1], nil) - - result -end - -def _reduce_531(val, _values, result) - result = @builder.range_exclusive(val[0], val[1], nil) - - result -end - -# reduce 532 omitted - -# reduce 533 omitted - -# reduce 534 omitted - -def _reduce_535(val, _values, result) - result = @builder.range_inclusive(nil, val[0], val[1]) - - result -end - -def _reduce_536(val, _values, result) - result = @builder.range_exclusive(nil, val[0], val[1]) - - result -end - -# reduce 537 omitted - -# reduce 538 omitted - -# reduce 539 omitted - -# reduce 540 omitted - -# reduce 541 omitted - -# reduce 542 omitted - -# reduce 543 omitted - -# reduce 544 omitted - -def _reduce_545(val, _values, result) - result = @builder.accessible(val[0]) - - result -end - -# reduce 546 omitted - -def _reduce_547(val, _values, result) - result = @builder.assignable(@builder.match_var(val[0])) - - result -end - -def _reduce_548(val, _values, result) - name = val[1][0] - unless static_env.declared?(name) - diagnostic :error, :undefined_lvar, { :name => name }, val[1] - end - - lvar = @builder.accessible(@builder.ident(val[1])) - result = @builder.pin(val[0], lvar) - - result -end - -def _reduce_549(val, _values, result) - non_lvar = @builder.accessible(val[1]) - result = @builder.pin(val[0], non_lvar) - - result -end - -def _reduce_550(val, _values, result) - expr = @builder.begin(val[1], val[2], val[3]) - result = @builder.pin(val[0], expr) - - result -end - -def _reduce_551(val, _values, result) - result = @builder.const_global(val[0], val[1]) - - result -end - -def _reduce_552(val, _values, result) - result = @builder.const_fetch(val[0], val[1], val[2]) - - result -end - -def _reduce_553(val, _values, result) - result = @builder.const(val[0]) - - result -end - -def _reduce_554(val, _values, result) - assoc_t, exc_var = val[2] - - if val[1] - exc_list = @builder.array(nil, val[1], nil) - end - - result = [ @builder.rescue_body(val[0], - exc_list, assoc_t, exc_var, - val[3], val[4]), - *val[5] ] - - result -end - -def _reduce_555(val, _values, result) - result = [] - - result -end - -def _reduce_556(val, _values, result) - result = [ val[0] ] - - result -end - -# reduce 557 omitted - -# reduce 558 omitted - -def _reduce_559(val, _values, result) - result = [ val[0], val[1] ] - - result -end - -# reduce 560 omitted - -def _reduce_561(val, _values, result) - result = [ val[0], val[1] ] - - result -end - -# reduce 562 omitted - -# reduce 563 omitted - -# reduce 564 omitted - -def _reduce_565(val, _values, result) - result = @builder.string_compose(nil, val[0], nil) - - result -end - -def _reduce_566(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_567(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_568(val, _values, result) - string = @builder.string_compose(val[0], val[1], val[2]) - result = @builder.dedent_string(string, @lexer.dedent_level) - - result -end - -def _reduce_569(val, _values, result) - string = @builder.string(val[0]) - result = @builder.dedent_string(string, @lexer.dedent_level) - - result -end - -def _reduce_570(val, _values, result) - result = @builder.character(val[0]) - - result -end - -def _reduce_571(val, _values, result) - string = @builder.xstring_compose(val[0], val[1], val[2]) - result = @builder.dedent_string(string, @lexer.dedent_level) - - result -end - -def _reduce_572(val, _values, result) - opts = @builder.regexp_options(val[3]) - result = @builder.regexp_compose(val[0], val[1], val[2], opts) - - result -end - -def _reduce_573(val, _values, result) - result = @builder.words_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_574(val, _values, result) - result = [] - - result -end - -def _reduce_575(val, _values, result) - result = val[0] << @builder.word(val[1]) - - result -end - -def _reduce_576(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_577(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_578(val, _values, result) - result = @builder.symbols_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_579(val, _values, result) - result = [] - - result -end - -def _reduce_580(val, _values, result) - result = val[0] << @builder.word(val[1]) - - result -end - -def _reduce_581(val, _values, result) - result = @builder.words_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_582(val, _values, result) - result = @builder.symbols_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_583(val, _values, result) - result = [] - - result -end - -def _reduce_584(val, _values, result) - result = val[0] << @builder.string_internal(val[1]) - - result -end - -def _reduce_585(val, _values, result) - result = [] - - result -end - -def _reduce_586(val, _values, result) - result = val[0] << @builder.symbol_internal(val[1]) - - result -end - -def _reduce_587(val, _values, result) - result = [] - - result -end - -def _reduce_588(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_589(val, _values, result) - result = [] - - result -end - -def _reduce_590(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_591(val, _values, result) - result = [] - - result -end - -def _reduce_592(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_593(val, _values, result) - result = @builder.string_internal(val[0]) - - result -end - -def _reduce_594(val, _values, result) - result = val[1] - - result -end - -def _reduce_595(val, _values, result) - @lexer.cmdarg.push(false) - @lexer.cond.push(false) - - result -end - -def _reduce_596(val, _values, result) - @lexer.cmdarg.pop - @lexer.cond.pop - - result = @builder.begin(val[0], val[2], val[3]) - - result -end - -def _reduce_597(val, _values, result) - result = @builder.gvar(val[0]) - - result -end - -def _reduce_598(val, _values, result) - result = @builder.ivar(val[0]) - - result -end - -def _reduce_599(val, _values, result) - result = @builder.cvar(val[0]) - - result -end - -# reduce 600 omitted - -# reduce 601 omitted - -# reduce 602 omitted - -def _reduce_603(val, _values, result) - @lexer.state = :expr_end - result = @builder.symbol(val[0]) - - result -end - -def _reduce_604(val, _values, result) - @lexer.state = :expr_end - result = @builder.symbol_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_605(val, _values, result) - result = val[0] - - result -end - -def _reduce_606(val, _values, result) - if @builder.respond_to? :negate - # AST builder interface compatibility - result = @builder.negate(val[0], val[1]) - else - result = @builder.unary_num(val[0], val[1]) - end - - result -end - -def _reduce_607(val, _values, result) - @lexer.state = :expr_end - result = @builder.integer(val[0]) - - result -end - -def _reduce_608(val, _values, result) - @lexer.state = :expr_end - result = @builder.float(val[0]) - - result -end - -def _reduce_609(val, _values, result) - @lexer.state = :expr_end - result = @builder.rational(val[0]) - - result -end - -def _reduce_610(val, _values, result) - @lexer.state = :expr_end - result = @builder.complex(val[0]) - - result -end - -def _reduce_611(val, _values, result) - result = @builder.ivar(val[0]) - - result -end - -def _reduce_612(val, _values, result) - result = @builder.gvar(val[0]) - - result -end - -def _reduce_613(val, _values, result) - result = @builder.cvar(val[0]) - - result -end - -def _reduce_614(val, _values, result) - result = @builder.ident(val[0]) - - result -end - -def _reduce_615(val, _values, result) - result = @builder.const(val[0]) - - result -end - -# reduce 616 omitted - -def _reduce_617(val, _values, result) - result = @builder.nil(val[0]) - - result -end - -def _reduce_618(val, _values, result) - result = @builder.self(val[0]) - - result -end - -def _reduce_619(val, _values, result) - result = @builder.true(val[0]) - - result -end - -def _reduce_620(val, _values, result) - result = @builder.false(val[0]) - - result -end - -def _reduce_621(val, _values, result) - result = @builder.__FILE__(val[0]) - - result -end - -def _reduce_622(val, _values, result) - result = @builder.__LINE__(val[0]) - - result -end - -def _reduce_623(val, _values, result) - result = @builder.__ENCODING__(val[0]) - - result -end - -def _reduce_624(val, _values, result) - result = @builder.accessible(val[0]) - - result -end - -def _reduce_625(val, _values, result) - result = @builder.accessible(val[0]) - - result -end - -def _reduce_626(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_627(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_628(val, _values, result) - result = @builder.nth_ref(val[0]) - - result -end - -def _reduce_629(val, _values, result) - result = @builder.back_ref(val[0]) - - result -end - -def _reduce_630(val, _values, result) - @lexer.state = :expr_value - - result -end - -def _reduce_631(val, _values, result) - result = [ val[0], val[2] ] - - result -end - -def _reduce_632(val, _values, result) - result = nil - - result -end - -# reduce 633 omitted - -def _reduce_634(val, _values, result) - @context.in_argdef = false - result = @builder.args(nil, [], nil) - - result -end - -def _reduce_635(val, _values, result) - result = @builder.args(val[0], val[1], val[2]) - - @lexer.state = :expr_value - @context.in_argdef = false - - result -end - -# reduce 636 omitted - -def _reduce_637(val, _values, result) - result = @context.dup - @context.in_kwarg = true - @context.in_argdef = true - - result -end - -def _reduce_638(val, _values, result) - @context.in_kwarg = val[0].in_kwarg - @context.in_argdef = false - result = @builder.args(nil, val[1], nil) - - result -end - -def _reduce_639(val, _values, result) - result = val[0].concat(val[2]).concat(val[3]) - - result -end - -def _reduce_640(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_641(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_642(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_643(val, _values, result) - @static_env.declare_forward_args - result = [ @builder.forward_arg(val[0]) ] - - result -end - -def _reduce_644(val, _values, result) - result = val[1] - - result -end - -def _reduce_645(val, _values, result) - result = [] - - result -end - -def _reduce_646(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_647(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[6]). - concat(val[7]) - - result -end - -def _reduce_648(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_649(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_650(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_651(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_652(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_653(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_654(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_655(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_656(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_657(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_658(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_659(val, _values, result) - result = val[0] - - result -end - -def _reduce_660(val, _values, result) - result = [] - - result -end - -def _reduce_661(val, _values, result) - result = val[0] - - result -end - -def _reduce_662(val, _values, result) - diagnostic :error, :argument_const, nil, val[0] - - result -end - -def _reduce_663(val, _values, result) - diagnostic :error, :argument_ivar, nil, val[0] - - result -end - -def _reduce_664(val, _values, result) - diagnostic :error, :argument_gvar, nil, val[0] - - result -end - -def _reduce_665(val, _values, result) - diagnostic :error, :argument_cvar, nil, val[0] - - result -end - -# reduce 666 omitted - -def _reduce_667(val, _values, result) - @static_env.declare val[0][0] - - @max_numparam_stack.has_ordinary_params! - - result = val[0] - - result -end - -def _reduce_668(val, _values, result) - @current_arg_stack.set(val[0][0]) - result = val[0] - - result -end - -def _reduce_669(val, _values, result) - @current_arg_stack.set(0) - result = @builder.arg(val[0]) - - result -end - -def _reduce_670(val, _values, result) - result = @builder.multi_lhs(val[0], val[1], val[2]) - - result -end - -def _reduce_671(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_672(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_673(val, _values, result) - check_kwarg_name(val[0]) - - @static_env.declare val[0][0] - - @max_numparam_stack.has_ordinary_params! - - @current_arg_stack.set(val[0][0]) - @context.in_argdef = false - - result = val[0] - - result -end - -def _reduce_674(val, _values, result) - @current_arg_stack.set(nil) - @context.in_argdef = true - result = @builder.kwoptarg(val[0], val[1]) - - result -end - -def _reduce_675(val, _values, result) - @current_arg_stack.set(nil) - @context.in_argdef = true - result = @builder.kwarg(val[0]) - - result -end - -def _reduce_676(val, _values, result) - @context.in_argdef = true - result = @builder.kwoptarg(val[0], val[1]) - - result -end - -def _reduce_677(val, _values, result) - @context.in_argdef = true - result = @builder.kwarg(val[0]) - - result -end - -def _reduce_678(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_679(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_680(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_681(val, _values, result) - result = val[0] << val[2] - - result -end - -# reduce 682 omitted - -# reduce 683 omitted - -def _reduce_684(val, _values, result) - result = [ @builder.kwnilarg(val[0][0], val[0][1]) ] - - result -end - -def _reduce_685(val, _values, result) - @static_env.declare val[1][0] - - result = [ @builder.kwrestarg(val[0], val[1]) ] - - result -end - -def _reduce_686(val, _values, result) - @static_env.declare_anonymous_kwrestarg - - result = [ @builder.kwrestarg(val[0]) ] - - result -end - -def _reduce_687(val, _values, result) - @current_arg_stack.set(0) - @context.in_argdef = true - result = @builder.optarg(val[0], val[1], val[2]) - - result -end - -def _reduce_688(val, _values, result) - @current_arg_stack.set(0) - @context.in_argdef = true - result = @builder.optarg(val[0], val[1], val[2]) - - result -end - -def _reduce_689(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_690(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_691(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_692(val, _values, result) - result = val[0] << val[2] - - result -end - -# reduce 693 omitted - -# reduce 694 omitted - -def _reduce_695(val, _values, result) - @static_env.declare val[1][0] - - result = [ @builder.restarg(val[0], val[1]) ] - - result -end - -def _reduce_696(val, _values, result) - @static_env.declare_anonymous_restarg - - result = [ @builder.restarg(val[0]) ] - - result -end - -# reduce 697 omitted - -# reduce 698 omitted - -def _reduce_699(val, _values, result) - @static_env.declare val[1][0] - - result = @builder.blockarg(val[0], val[1]) - - result -end - -def _reduce_700(val, _values, result) - @static_env.declare_anonymous_blockarg - - result = @builder.blockarg(val[0], nil) - - result -end - -def _reduce_701(val, _values, result) - result = [ val[1] ] - - result -end - -def _reduce_702(val, _values, result) - result = [] - - result -end - -# reduce 703 omitted - -def _reduce_704(val, _values, result) - result = val[1] - - result -end - -def _reduce_705(val, _values, result) - result = [] - - result -end - -# reduce 706 omitted - -def _reduce_707(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_708(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_709(val, _values, result) - result = @builder.pair(val[0], val[1], val[2]) - - result -end - -def _reduce_710(val, _values, result) - result = @builder.pair_keyword(val[0], val[1]) - - result -end - -def _reduce_711(val, _values, result) - result = @builder.pair_label(val[0]) - - result -end - -def _reduce_712(val, _values, result) - result = @builder.pair_quoted(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_713(val, _values, result) - result = @builder.kwsplat(val[0], val[1]) - - result -end - -def _reduce_714(val, _values, result) - if !@static_env.declared_anonymous_kwrestarg? - diagnostic :error, :no_anonymous_kwrestarg, nil, val[0] - end - - result = @builder.forwarded_kwrestarg(val[0]) - - result -end - -# reduce 715 omitted - -# reduce 716 omitted - -# reduce 717 omitted - -# reduce 718 omitted - -# reduce 719 omitted - -# reduce 720 omitted - -# reduce 721 omitted - -# reduce 722 omitted - -# reduce 723 omitted - -# reduce 724 omitted - -def _reduce_725(val, _values, result) - result = [:dot, val[0][1]] - - result -end - -def _reduce_726(val, _values, result) - result = [:anddot, val[0][1]] - - result -end - -# reduce 727 omitted - -# reduce 728 omitted - -# reduce 729 omitted - -# reduce 730 omitted - -def _reduce_731(val, _values, result) - result = val[1] - - result -end - -def _reduce_732(val, _values, result) - result = val[1] - - result -end - -def _reduce_733(val, _values, result) - result = val[1] - - result -end - -# reduce 734 omitted - -# reduce 735 omitted - -def _reduce_736(val, _values, result) - yyerrok - - result -end - -# reduce 737 omitted - -# reduce 738 omitted - -# reduce 739 omitted - -def _reduce_740(val, _values, result) - result = nil - - result -end - -def _reduce_none(val, _values, result) - val[0] -end - - end # class Ruby32 -end # module Parser diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ruby33.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ruby33.rb deleted file mode 100644 index 5838887e..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ruby33.rb +++ /dev/null @@ -1,12589 +0,0 @@ -# -*- encoding:utf-8; warn-indent:false; frozen_string_literal: true -*- -# -# DO NOT MODIFY!!!! -# This file is automatically generated by Racc 1.7.3 -# from Racc grammar file "ruby33.y". -# - -require 'racc/parser.rb' - - -require 'parser' - -module Parser - class Ruby33 < Parser::Base - - - def version - 33 - end - - def default_encoding - Encoding::UTF_8 - end - - def endless_method_name(name_t) - if !%w[=== == != <= >=].include?(name_t[0]) && name_t[0].end_with?('=') - diagnostic :error, :endless_setter, nil, name_t - end - end - - def local_push - @static_env.extend_static - @lexer.cmdarg.push(false) - @lexer.cond.push(false) - @max_numparam_stack.push(static: true) - end - - def local_pop - @static_env.unextend - @lexer.cmdarg.pop - @lexer.cond.pop - @max_numparam_stack.pop - end - - def try_declare_numparam(node) - name = node.children[0] - - if name =~ /\A_[1-9]\z/ && !static_env.declared?(name) && @context.in_dynamic_block? - # definitely an implicit param - location = node.loc.expression - - if max_numparam_stack.has_ordinary_params? - diagnostic :error, :ordinary_param_defined, nil, [nil, location] - end - - raw_max_numparam_stack = max_numparam_stack.stack.dup - # ignore current block scope - raw_max_numparam_stack.pop - - raw_max_numparam_stack.reverse_each do |outer_scope| - if outer_scope[:static] - # found an outer scope that can't have numparams - # like def/class/etc - break - else - outer_scope_has_numparams = outer_scope[:value] > 0 - - if outer_scope_has_numparams - diagnostic :error, :numparam_used_in_outer_scope, nil, [nil, location] - else - # for now it's ok, but an outer scope can also be a block - # like proc { _1; proc { proc { proc { _2 }} }} - # with numparams, so we need to continue - end - end - end - - static_env.declare(name) - max_numparam_stack.register(name[1].to_i) - - true - else - false - end - end -##### State transition tables begin ### - -racc_action_table = [ - -615, -627, 312, 222, 223, 312, -116, -615, -615, -615, - 1064, 624, -615, -615, -615, 228, -615, 312, 1064, 665, - 127, 240, 227, 624, -615, 126, -615, -615, -615, 222, - 223, 225, 704, 667, -117, -124, -615, -615, 624, -615, - -615, -615, -615, -615, 624, 624, -116, -117, -124, 859, - 705, -123, 3, 127, -123, 1064, 1063, -628, 126, 799, - -116, 241, 241, 525, -119, -121, -615, -615, -615, -615, - -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, - 229, 307, -615, -615, -615, 664, -615, -615, 794, 311, - -615, 931, 311, -615, -615, -118, -615, 241, -615, 666, - -615, -511, -615, -615, 311, -615, -615, -615, -615, -615, - 624, -615, -616, -615, -119, -107, -117, 222, 223, -616, - -616, -616, -124, 241, -616, -616, -616, -615, -616, 127, - -615, -615, -615, -615, 126, -615, -616, -615, -616, -616, - -616, 127, -615, -108, -115, -615, 126, 234, -616, -616, - -121, -616, -616, -616, -616, -616, 127, -120, -118, 920, - -114, 126, 127, 127, -116, -117, -124, 126, 126, -116, - -117, -124, -123, -110, -112, -120, -730, -123, -616, -616, - -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, - -616, -616, 127, -122, -616, -616, -616, 126, -616, -616, - 930, -122, -616, -741, -109, -616, -616, 859, -616, 631, - -616, 241, -616, 234, -616, -616, 241, -616, -616, -616, - -616, -616, -321, -616, 238, -616, 238, 604, 127, -321, - -321, -321, -119, 126, -716, -321, -321, -119, -321, -616, - -716, -110, -616, -616, -616, -616, -321, -616, 228, -616, - 312, -730, 631, 652, -616, 305, 123, -616, -321, -321, - 799, -321, -321, -321, -321, -321, -717, -102, -121, -741, - -717, -115, -112, -121, -111, -120, -118, 652, -109, -88, - -120, -118, 136, -124, -111, -124, -123, 241, -321, -321, - -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, - -321, -321, 219, 234, -321, -321, -321, -110, 691, -321, - -113, -122, -321, 229, 307, -321, -122, 654, 653, 650, - -321, 220, -321, 884, -321, -321, 652, -321, -321, -321, - -321, -321, 234, -321, 692, -321, 221, 311, -112, -716, - -111, 654, 653, 650, -109, 224, 989, -110, 240, -321, - -110, 90, -321, -321, 652, -113, 502, -321, 766, -741, - 127, -721, -110, 91, -321, 126, 885, -122, -721, -721, - -721, 104, 105, 92, -721, -721, 301, -721, -112, -730, - -111, -112, -119, -111, -109, -721, -721, -109, -741, 241, - 654, 653, 650, -112, 503, -111, 241, -721, -721, -109, - -721, -721, -721, -721, -721, 241, 1156, 1163, 615, 494, - -356, 491, 490, 489, 499, 492, 228, -356, 654, 653, - 655, 104, 105, 305, 502, -121, -356, -721, -721, -721, - -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, - -721, 240, -627, -721, -721, -721, 497, 693, -721, 106, - 107, -721, 652, 363, -721, 507, 506, 510, 509, -721, - 652, -721, 503, -721, -721, 652, -721, -721, -721, -721, - -721, -321, -721, -721, -721, -356, 686, 687, -321, -321, - -321, 229, 241, -321, -321, -321, -615, -321, -721, -107, - 364, -721, -721, -615, -111, -321, -721, -321, -321, 106, - 107, -116, 488, -721, -716, 241, -120, -321, -321, 704, - -321, -321, -321, -321, -321, 127, 654, 653, 222, 223, - 126, 652, 967, 652, 654, 653, 432, 1087, 652, 654, - 653, 657, 473, 1163, 823, -119, -121, -321, -321, -321, - -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, - -321, -615, -628, -321, -321, -321, -615, 886, -321, 241, - -634, -321, 618, -615, -321, -321, 652, -321, -716, -321, - 840, -321, -615, -321, -321, 513, -321, -321, -321, -321, - -321, -118, -321, 692, -321, 654, 653, 654, 653, 659, - -616, -716, 654, 653, 663, 823, 228, -616, -321, -108, - -623, -321, -321, 522, -321, 524, -321, -623, -622, 604, - -721, -117, 523, -321, 526, -622, -122, -721, -721, -721, - 127, -615, -721, -721, -721, 126, -721, 282, 283, -118, - 654, 653, 668, -624, -721, -721, -721, -721, -721, 1070, - -624, 637, 222, 223, 1066, 638, -721, -721, 1067, -721, - -721, -721, -721, -721, 637, -616, -114, 127, 1095, -621, - -618, 229, 126, 281, 280, -623, -621, -618, -123, 241, - 527, 886, 618, -622, -717, 240, -721, -721, -721, -721, - -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, - 562, 989, -721, -721, -721, 574, 887, -721, -624, 686, - -721, 502, -619, -721, -721, 576, -721, -620, -721, -619, - -721, 578, -721, -721, -620, -721, -721, -721, -721, -721, - -321, -721, -721, -721, -621, -618, 429, -321, -321, -321, - -122, 431, 430, -321, -321, 136, -321, -721, 265, 503, - -721, -721, -721, -721, -321, -721, -110, -721, 510, 509, - 637, 1156, -721, -717, 1095, -120, -321, -321, -119, -321, - -321, -321, -321, -321, -87, 241, 241, -619, 618, -625, - 262, 499, -620, 589, 264, 263, -625, 687, 109, 108, - 590, 502, 110, 121, 122, -625, -321, -321, -321, -321, - -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, - 597, 840, -321, -321, -321, -616, 691, -321, 241, 316, - -321, 1186, -616, -321, 510, 509, 241, -717, -321, 503, - -321, -616, -321, -321, -112, -321, -321, -321, -321, -321, - 234, -321, 692, -321, -625, 234, -121, 915, 859, 494, - -717, 491, 490, 489, 499, 492, 307, -321, -109, 601, - -321, -321, -721, -321, 502, -321, 607, 265, 265, -721, - -118, 611, -321, 1088, 1089, -122, -721, -721, -721, 499, - -616, 619, -721, -721, 620, -721, 497, 915, 859, 502, - 1222, 1223, 578, -721, -721, 507, 506, 510, 509, 262, - -626, 631, 503, 264, 263, -721, -721, -626, -721, -721, - -721, -721, -721, 421, -721, 635, -626, 636, 228, 644, - 669, -721, 510, 509, 672, 596, -716, 503, 241, 673, - -721, -294, 674, 676, 594, -721, -721, -721, -721, -721, - -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, - 680, -721, -721, -721, 241, 693, -721, -314, 684, -721, - 685, 307, -721, 702, -314, -626, 703, -721, 241, -721, - 707, -721, -721, -314, -721, -721, -721, -721, -721, -721, - -721, -721, -721, 229, 710, 228, 711, 713, 715, -385, - 228, 228, 606, 727, 728, 732, -721, 634, 640, -721, - -721, 523, -721, 734, -721, 228, 632, 642, 740, 741, - 265, -721, 679, 265, -120, 7, 81, 82, 83, 11, - 65, 677, -314, 265, 71, 72, 265, 241, 754, 75, - 241, 73, 74, 76, 35, 36, 79, 80, 257, 241, - 241, -102, 769, 84, 33, 32, 115, 114, 116, 117, - 229, 241, 23, 611, 780, 229, 229, 786, 10, 53, - 9, 12, 119, 118, 120, 111, 64, 109, 108, 112, - 229, 110, 121, 122, 787, 104, 105, 49, 50, 48, - 265, 269, 270, 271, 272, 282, 283, 277, 278, 273, - 274, -322, 258, 259, 790, 795, 275, 276, -322, 45, - 796, 256, 38, 800, 822, 66, 67, -322, 823, 68, - 823, 40, 262, -298, 268, 52, 264, 263, 841, 260, - 261, 281, 280, 266, 24, 267, 562, 562, 854, 102, - 90, 93, 94, -322, 95, 97, 96, 98, 856, 859, - -322, 877, 91, 101, 880, 279, 881, 241, 854, -322, - 85, 856, 92, 106, 107, 241, -322, 46, 47, 335, - 81, 82, 83, 11, 65, 893, 895, 301, 71, 72, - 901, 903, 905, 75, 576, 73, 74, 76, 35, 36, - 79, 80, 130, 131, 132, 133, 134, 84, 33, 32, - 115, 114, 116, 117, 578, 780, 23, 241, -322, 307, - 307, 681, 10, 53, 337, 12, 119, 118, 120, 111, - 64, 109, 108, 112, 780, 110, 121, 122, 265, 104, - 105, 49, 50, 48, 265, 269, 270, 271, 272, 282, - 283, 277, 278, 273, 274, -321, 258, 259, 859, 917, - 275, 276, -321, 45, 918, 241, 339, -717, 241, 66, - 67, -321, 928, 68, 241, 40, 262, 935, 268, 52, - 264, 263, 935, 260, 261, 281, 280, 266, 24, 267, - 935, 935, -296, 102, 90, 93, 94, 228, 95, 97, - 96, 98, 241, 940, 1128, 941, 91, 101, 947, 279, - -294, -266, 951, 1126, 85, 710, 92, 106, 107, 705, - -321, 46, 47, 335, 81, 82, 83, 11, 65, 954, - 956, 958, 71, 72, 960, 960, 241, 75, 903, 73, - 74, 76, 35, 36, 79, 80, 130, 131, 132, 133, - 134, 84, 33, 32, 115, 114, 116, 117, 1016, 241, - 23, 780, 229, 1033, 1035, 681, 10, 53, 337, 12, - 119, 118, 120, 111, 64, 109, 108, 112, 1039, 110, - 121, 122, 1040, 104, 105, 49, 50, 48, 265, 269, - 270, 271, 272, 282, 283, 277, 278, 273, 274, -321, - 258, 259, 1045, 1046, 275, 276, -321, 45, 1048, -298, - 38, -717, 854, 66, 67, -321, 856, 68, 1061, 40, - 262, 1062, 268, 52, 264, 263, 1065, 260, 261, 281, - 280, 266, 24, 267, 1082, 1083, 1084, 102, 90, 93, - 94, 228, 95, 97, 96, 98, 1098, 710, 1178, 1101, - 91, 101, 1104, 279, 1106, 1108, 241, 642, 85, -385, - 92, 106, 107, 1118, -321, 46, 47, 7, 81, 82, - 83, 11, 65, 1129, 1130, 960, 71, 72, 960, 960, - 1009, 75, 241, 73, 74, 76, 35, 36, 79, 80, - 130, 131, 132, 133, 134, 84, 33, 32, 115, 114, - 116, 117, 241, 1154, 23, 1157, 229, 1064, 1176, 1179, - 10, 53, 9, 12, 119, 118, 120, 111, 64, 109, - 108, 112, 1183, 110, 121, 122, 1184, 104, 105, 49, - 50, 48, 265, 269, 270, 271, 272, 282, 283, 277, - 278, 273, 274, 228, 258, 259, 702, 1062, 275, 276, - 1178, 45, 1194, 241, 38, 241, 241, 66, 67, 642, - 241, 68, 241, 40, 262, 241, 268, 52, 264, 263, - 1064, 260, 261, 281, 280, 266, 24, 267, 1201, 1202, - 241, 102, 90, 93, 94, 1206, 95, 97, 96, 98, - 241, 710, 1209, 1211, 91, 101, 1213, 279, 1215, 1215, - 241, 960, 85, -717, 92, 106, 107, -716, 229, 46, - 47, 335, 81, 82, 83, 11, 65, 1238, 1238, 1239, - 71, 72, 1215, 1215, 1215, 75, 1215, 73, 74, 76, - 35, 36, 79, 80, nil, nil, nil, nil, nil, 84, - 33, 32, 115, 114, 116, 117, nil, 494, 23, 491, - 490, 489, nil, 492, 10, 53, 337, 12, 119, 118, - 120, 111, 64, 109, 108, 112, nil, 110, 121, 122, - nil, 104, 105, 49, 50, 48, 265, 269, 270, 271, - 272, 282, 283, 277, 278, 273, 274, nil, 258, 259, - nil, nil, 275, 276, nil, 45, nil, 1092, 38, 109, - 108, 66, 67, 110, nil, 68, nil, 40, 262, nil, - 268, 52, 264, 263, nil, 260, 261, 281, 280, 266, - 24, 267, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, 1094, nil, nil, nil, 91, 101, - 241, 279, nil, nil, nil, nil, 85, nil, 92, 106, - 107, nil, nil, 46, 47, 335, 81, 82, 83, 11, - 65, nil, nil, nil, 71, 72, nil, nil, nil, 75, - nil, 73, 74, 76, 35, 36, 79, 80, nil, nil, - nil, nil, nil, 84, 33, 32, 115, 114, 116, 117, - nil, 1123, 23, 491, 490, 489, nil, 492, 10, 53, - 337, 12, 119, 118, 120, 111, 64, 109, 108, 112, - nil, 110, 121, 122, nil, 104, 105, 49, 50, 48, - 265, 269, 270, 271, 272, 282, 283, 277, 278, 273, - 274, nil, 258, 259, nil, nil, 275, 276, nil, 45, - nil, nil, 38, nil, nil, 66, 67, nil, nil, 68, - nil, 40, 262, nil, 268, 52, 264, 263, nil, 260, - 261, 281, 280, 266, 24, 267, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, 279, nil, nil, nil, nil, - 85, nil, 92, 106, 107, nil, nil, 46, 47, 335, - 81, 82, 83, 11, 65, nil, nil, nil, 71, 72, - nil, nil, nil, 75, nil, 73, 74, 76, 35, 36, - 79, 80, nil, nil, nil, nil, nil, 84, 33, 32, - 115, 114, 116, 117, nil, 1123, 23, 491, 490, 489, - nil, 492, 10, 53, 337, 12, 119, 118, 120, 111, - 64, 109, 108, 112, nil, 110, 121, 122, nil, 104, - 105, 49, 50, 48, 265, 269, 270, 271, 272, 282, - 283, 277, 278, 273, 274, nil, 258, 259, nil, nil, - 275, 276, nil, 45, nil, nil, 38, nil, nil, 66, - 67, nil, nil, 68, nil, 40, 262, nil, 268, 52, - 264, 263, nil, 260, 261, 281, 280, 266, 24, 267, - nil, nil, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, 279, - nil, nil, nil, nil, 85, nil, 92, 106, 107, nil, - nil, 46, 47, 335, 81, 82, 83, 11, 65, nil, - nil, nil, 71, 72, nil, nil, nil, 75, nil, 73, - 74, 76, 35, 36, 79, 80, nil, nil, nil, nil, - nil, 84, 33, 32, 115, 114, 116, 117, nil, nil, - 23, nil, nil, nil, nil, nil, 10, 53, 337, 12, - 119, 118, 120, 111, 64, 109, 108, 112, nil, 110, - 121, 122, nil, 104, 105, 49, 50, 48, 265, 269, - 270, 271, 272, 282, 283, 277, 278, 273, 274, nil, - 258, 259, nil, nil, 275, 276, nil, 45, nil, nil, - 38, nil, nil, 66, 67, nil, nil, 68, nil, 40, - 262, nil, 268, 52, 264, 263, nil, 260, 261, 281, - 280, 266, 24, 267, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, 279, nil, nil, nil, nil, 85, nil, - 92, 106, 107, nil, nil, 46, 47, 335, 81, 82, - 83, 11, 65, nil, nil, nil, 71, 72, nil, nil, - nil, 75, nil, 73, 74, 76, 35, 36, 79, 80, - nil, nil, nil, nil, nil, 84, 33, 32, 115, 114, - 116, 117, nil, nil, 23, nil, nil, nil, nil, nil, - 10, 53, 337, 12, 119, 118, 120, 111, 64, 109, - 108, 112, nil, 110, 121, 122, nil, 104, 105, 49, - 50, 48, 265, 269, 270, 271, 272, 282, 283, 277, - 278, 273, 274, nil, 258, 259, nil, nil, 275, 276, - nil, 45, nil, nil, 339, nil, nil, 66, 67, nil, - nil, 68, nil, 40, 262, nil, 268, 52, 264, 263, - nil, 260, 261, 281, 280, 266, 24, 267, nil, nil, - nil, 102, 90, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, 279, nil, nil, - nil, nil, 85, nil, 92, 106, 107, nil, nil, 46, - 47, 335, 81, 82, 83, 11, 65, nil, nil, nil, - 71, 72, nil, nil, nil, 75, nil, 73, 74, 76, - 35, 36, 79, 80, nil, nil, nil, nil, nil, 84, - 33, 32, 115, 114, 116, 117, nil, nil, 23, nil, - nil, nil, nil, nil, 10, 53, 337, 12, 119, 118, - 120, 111, 64, 109, 108, 112, nil, 110, 121, 122, - nil, 104, 105, 49, 50, 48, 265, 269, 270, 271, - 272, 282, 283, 277, 278, 273, 274, nil, 258, 259, - nil, nil, 275, 276, nil, 45, nil, nil, 339, nil, - nil, 66, 67, nil, nil, 68, nil, 40, 262, nil, - 268, 52, 264, 263, nil, 260, 261, 281, 280, 266, - 24, 267, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, 279, nil, nil, nil, nil, 85, nil, 92, 106, - 107, nil, nil, 46, 47, 335, 81, 82, 83, 11, - 65, nil, nil, nil, 71, 72, nil, nil, nil, 75, - nil, 73, 74, 76, 35, 36, 79, 80, nil, nil, - nil, nil, nil, 84, 33, 32, 115, 114, 116, 117, - nil, nil, 23, nil, nil, nil, nil, nil, 10, 53, - 337, 12, 119, 118, 120, 111, 64, 109, 108, 112, - nil, 110, 121, 122, nil, 104, 105, 49, 50, 48, - 265, 269, 270, 271, 272, 282, 283, 277, 278, 273, - 274, nil, 258, 259, nil, nil, 275, 276, nil, 45, - nil, nil, 38, nil, nil, 66, 67, nil, nil, 68, - nil, 40, 262, nil, 268, 52, 264, 263, nil, 260, - 261, 281, 280, 266, 24, 267, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, 279, nil, nil, nil, nil, - 85, nil, 92, 106, 107, nil, nil, 46, 47, 335, - 81, 82, 83, 11, 65, nil, nil, nil, 71, 72, - nil, nil, nil, 75, nil, 73, 74, 76, 35, 36, - 79, 80, nil, nil, nil, nil, nil, 84, 33, 32, - 115, 114, 116, 117, nil, 494, 23, 491, 490, 489, - nil, 492, 10, 53, 337, 12, 119, 118, 120, 111, - 64, 109, 108, 112, nil, 110, 121, 122, nil, 104, - 105, 49, 50, 48, 494, nil, 491, 490, 489, nil, - 492, nil, 720, nil, 494, nil, 491, 490, 489, nil, - 492, 724, nil, 45, nil, nil, 38, nil, nil, 66, - 67, nil, nil, 68, 494, 40, 491, 490, 489, 52, - 492, 720, nil, nil, nil, nil, nil, nil, 24, nil, - 724, 720, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, 720, nil, nil, 85, nil, 92, 106, 107, nil, - 724, 46, 47, 335, 81, 82, 83, 11, 65, nil, - nil, nil, 71, 72, nil, nil, nil, 75, nil, 73, - 74, 76, 35, 36, 79, 80, nil, nil, nil, nil, - nil, 84, 33, 32, 115, 114, 116, 117, nil, nil, - 23, nil, nil, nil, nil, nil, 10, 53, 337, 12, - 119, 118, 120, 111, 64, 109, 108, 112, nil, 110, - 121, 122, nil, 104, 105, 49, 50, 48, 265, 269, - 270, 271, 272, 282, 283, 277, 278, 273, 274, nil, - -742, -742, nil, nil, 275, 276, nil, 45, nil, nil, - 38, nil, nil, 66, 67, nil, 265, 68, nil, 40, - 262, nil, 268, 52, 264, 263, nil, 260, 261, 281, - 280, 266, 24, 267, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, 262, nil, - 91, 101, 264, 263, nil, 260, 261, nil, 85, nil, - 92, 106, 107, nil, nil, 46, 47, 335, 81, 82, - 83, 11, 65, nil, nil, nil, 71, 72, nil, nil, - nil, 75, nil, 73, 74, 76, 35, 36, 79, 80, - nil, nil, nil, nil, nil, 84, 33, 32, 115, 114, - 116, 117, nil, nil, 23, nil, nil, nil, nil, nil, - 10, 53, 337, 12, 119, 118, 120, 111, 64, 109, - 108, 112, nil, 110, 121, 122, nil, 104, 105, 49, - 50, 48, 265, 269, 270, 271, 272, 282, 283, 277, - 278, 273, 274, nil, -742, -742, nil, nil, 275, 276, - nil, 45, nil, nil, 38, nil, nil, 66, 67, nil, - 265, 68, nil, 40, 262, nil, 268, 52, 264, 263, - nil, 260, 261, 281, 280, 266, 24, 267, nil, nil, - nil, 102, 90, 93, 94, nil, 95, 97, 96, 98, - nil, nil, 262, nil, 91, 101, 264, 263, nil, 260, - 261, nil, 85, nil, 92, 106, 107, nil, nil, 46, - 47, 335, 81, 82, 83, 11, 65, nil, nil, nil, - 71, 72, nil, nil, nil, 75, nil, 73, 74, 76, - 35, 36, 79, 80, nil, nil, nil, nil, nil, 84, - 33, 32, 115, 114, 116, 117, nil, nil, 23, nil, - nil, nil, nil, nil, 10, 53, 337, 12, 119, 118, - 120, 111, 64, 109, 108, 112, nil, 110, 121, 122, - nil, 104, 105, 49, 50, 48, 265, 269, 270, 271, - 272, 282, 283, 277, 278, 273, 274, nil, -742, -742, - nil, nil, 275, 276, nil, 45, nil, nil, 38, nil, - nil, 66, 67, nil, nil, 68, nil, 40, 262, nil, - 268, 52, 264, 263, nil, 260, 261, 281, 280, 266, - 24, 267, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, 494, nil, 491, 490, 489, 85, 492, 92, 106, - 107, nil, nil, 46, 47, 335, 81, 82, 83, 11, - 65, nil, nil, nil, 71, 72, nil, nil, nil, 75, - nil, 73, 74, 76, 35, 36, 79, 80, 720, nil, - nil, nil, nil, 84, 33, 32, 115, 114, 116, 117, - nil, nil, 23, nil, nil, nil, nil, nil, 10, 53, - 337, 12, 119, 118, 120, 111, 64, 109, 108, 112, - nil, 110, 121, 122, nil, 104, 105, 49, 50, 48, - 265, 269, 270, 271, 272, 282, 283, 277, 278, 273, - 274, nil, -742, -742, nil, nil, 275, 276, nil, 45, - nil, nil, 38, nil, nil, 66, 67, nil, nil, 68, - nil, 40, 262, nil, 268, 52, 264, 263, nil, 260, - 261, 281, 280, 266, 24, 267, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, 494, nil, 491, 490, 489, - 85, 492, 92, 106, 107, nil, nil, 46, 47, 335, - 81, 82, 83, 11, 65, nil, nil, nil, 71, 72, - nil, nil, nil, 75, nil, 73, 74, 76, 35, 36, - 79, 80, 720, nil, nil, nil, nil, 84, 33, 32, - 115, 114, 116, 117, nil, nil, 23, nil, nil, nil, - nil, nil, 10, 53, 337, 12, 119, 118, 120, 111, - 64, 109, 108, 112, nil, 110, 121, 122, nil, 104, - 105, 49, 50, 48, 265, -742, -742, -742, -742, 282, - 283, nil, nil, -742, -742, nil, nil, nil, nil, nil, - 275, 276, nil, 45, nil, nil, 38, nil, nil, 66, - 67, nil, nil, 68, nil, 40, 262, nil, 268, 52, - 264, 263, nil, 260, 261, 281, 280, 266, 24, 267, - nil, nil, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, nil, nil, nil, 85, nil, 92, 106, 107, nil, - nil, 46, 47, 335, 81, 82, 83, 11, 65, nil, - nil, nil, 71, 72, nil, nil, nil, 75, nil, 73, - 74, 76, 35, 36, 79, 80, nil, nil, nil, nil, - nil, 84, 33, 32, 115, 114, 116, 117, nil, nil, - 23, nil, nil, nil, nil, nil, 10, 53, 337, 12, - 119, 118, 120, 111, 64, 109, 108, 112, nil, 110, - 121, 122, nil, 104, 105, 49, 50, 48, 265, -742, - -742, -742, -742, 282, 283, nil, nil, -742, -742, nil, - nil, nil, nil, nil, 275, 276, nil, 45, nil, nil, - 38, nil, nil, 66, 67, nil, nil, 68, nil, 40, - 262, nil, 268, 52, 264, 263, nil, 260, 261, 281, - 280, 266, 24, 267, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, nil, nil, nil, 85, nil, - 92, 106, 107, nil, nil, 46, 47, 335, 81, 82, - 83, 11, 65, nil, nil, nil, 71, 72, nil, nil, - nil, 75, nil, 73, 74, 76, 35, 36, 79, 80, - nil, nil, nil, nil, nil, 84, 33, 32, 115, 114, - 116, 117, nil, nil, 23, nil, nil, nil, nil, nil, - 10, 53, 337, 12, 119, 118, 120, 111, 64, 109, - 108, 112, nil, 110, 121, 122, nil, 104, 105, 49, - 50, 48, 265, -742, -742, -742, -742, 282, 283, nil, - nil, -742, -742, nil, nil, nil, nil, nil, 275, 276, - nil, 45, nil, nil, 38, nil, nil, 66, 67, nil, - nil, 68, nil, 40, 262, nil, 268, 52, 264, 263, - nil, 260, 261, 281, 280, 266, 24, 267, nil, nil, - nil, 102, 90, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, nil, - nil, nil, 85, nil, 92, 106, 107, nil, nil, 46, - 47, 335, 81, 82, 83, 11, 65, nil, nil, nil, - 71, 72, nil, nil, nil, 75, nil, 73, 74, 76, - 35, 36, 79, 80, nil, nil, nil, nil, nil, 84, - 33, 32, 115, 114, 116, 117, nil, nil, 23, nil, - nil, nil, nil, nil, 10, 53, 337, 12, 119, 118, - 120, 111, 64, 109, 108, 112, nil, 110, 121, 122, - nil, 104, 105, 49, 50, 48, 265, -742, -742, -742, - -742, 282, 283, nil, nil, -742, -742, nil, nil, nil, - nil, nil, 275, 276, nil, 45, nil, nil, 38, nil, - nil, 66, 67, nil, nil, 68, nil, 40, 262, nil, - 268, 52, 264, 263, nil, 260, 261, 281, 280, 266, - 24, 267, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, nil, nil, nil, 85, nil, 92, 106, - 107, nil, nil, 46, 47, 335, 81, 82, 83, 11, - 65, nil, nil, nil, 71, 72, nil, nil, nil, 75, - nil, 73, 74, 76, 35, 36, 79, 80, nil, nil, - nil, nil, nil, 84, 33, 32, 115, 114, 116, 117, - nil, nil, 23, nil, nil, nil, nil, nil, 10, 53, - 337, 12, 119, 118, 120, 111, 64, 109, 108, 112, - nil, 110, 121, 122, nil, 104, 105, 49, 50, 48, - 265, -742, -742, -742, -742, 282, 283, nil, nil, -742, - -742, nil, nil, nil, nil, nil, 275, 276, nil, 45, - nil, nil, 38, nil, nil, 66, 67, nil, nil, 68, - nil, 40, 262, nil, 268, 52, 264, 263, nil, 260, - 261, 281, 280, 266, 24, 267, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, nil, nil, nil, - 85, nil, 92, 106, 107, nil, nil, 46, 47, 335, - 81, 82, 83, 11, 65, nil, nil, nil, 71, 72, - nil, nil, nil, 75, nil, 73, 74, 76, 35, 36, - 79, 80, nil, nil, nil, nil, nil, 84, 33, 32, - 115, 114, 116, 117, nil, nil, 23, nil, nil, nil, - nil, nil, 10, 53, 337, 12, 119, 118, 120, 111, - 64, 109, 108, 112, nil, 110, 121, 122, nil, 104, - 105, 49, 50, 48, 265, -742, -742, -742, -742, 282, - 283, nil, nil, -742, -742, nil, nil, nil, nil, nil, - 275, 276, nil, 45, nil, nil, 38, nil, nil, 66, - 67, nil, nil, 68, nil, 40, 262, nil, 268, 52, - 264, 263, nil, 260, 261, 281, 280, 266, 24, 267, - nil, nil, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, nil, nil, nil, 85, nil, 92, 106, 107, nil, - nil, 46, 47, 335, 81, 82, 83, 11, 65, nil, - nil, nil, 71, 72, nil, nil, nil, 75, nil, 73, - 74, 76, 35, 36, 79, 80, nil, nil, nil, nil, - nil, 84, 33, 32, 115, 114, 116, 117, nil, nil, - 23, nil, nil, nil, nil, nil, 10, 53, 337, 12, - 119, 118, 120, 111, 64, 109, 108, 112, nil, 110, - 121, 122, nil, 104, 105, 49, 50, 48, 265, 269, - 270, 271, 272, 282, 283, nil, nil, 273, 274, nil, - nil, nil, nil, nil, 275, 276, nil, 45, nil, nil, - 38, nil, nil, 66, 67, nil, nil, 68, nil, 40, - 262, nil, 268, 52, 264, 263, nil, 260, 261, 281, - 280, 266, 24, 267, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, nil, nil, nil, 85, nil, - 92, 106, 107, nil, nil, 46, 47, 335, 81, 82, - 83, 11, 65, nil, nil, nil, 71, 72, nil, nil, - nil, 75, nil, 73, 74, 76, 35, 36, 79, 80, - nil, nil, nil, nil, nil, 84, 33, 32, 115, 114, - 116, 117, nil, nil, 23, nil, nil, nil, nil, nil, - 10, 53, 337, 12, 119, 118, 120, 111, 64, 109, - 108, 112, nil, 110, 121, 122, nil, 104, 105, 49, - 50, 48, 265, 269, 270, 271, 272, 282, 283, 277, - nil, 273, 274, nil, nil, nil, nil, nil, 275, 276, - nil, 45, nil, nil, 38, nil, nil, 66, 67, nil, - nil, 68, nil, 40, 262, nil, 268, 52, 264, 263, - nil, 260, 261, 281, 280, 266, 24, 267, nil, nil, - nil, 102, 90, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, nil, - nil, nil, 85, nil, 92, 106, 107, nil, nil, 46, - 47, 335, 81, 82, 83, 11, 65, nil, nil, nil, - 71, 72, nil, nil, nil, 75, nil, 73, 74, 76, - 35, 36, 79, 80, nil, nil, nil, nil, nil, 84, - 33, 32, 115, 114, 116, 117, nil, nil, 23, nil, - nil, nil, nil, nil, 10, 53, 337, 12, 119, 118, - 120, 111, 64, 109, 108, 112, nil, 110, 121, 122, - nil, 104, 105, 49, 50, 48, 265, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 275, 276, nil, 45, nil, nil, 38, nil, - nil, 66, 67, nil, nil, 68, nil, 40, 262, nil, - 268, 52, 264, 263, nil, 260, 261, nil, nil, 266, - 24, 267, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, nil, nil, nil, 85, nil, 92, 106, - 107, nil, nil, 46, 47, 335, 81, 82, 83, 11, - 65, nil, nil, nil, 71, 72, nil, nil, nil, 75, - nil, 73, 74, 76, 35, 36, 79, 80, nil, nil, - nil, nil, nil, 84, 33, 32, 115, 114, 116, 117, - nil, nil, 23, nil, nil, nil, nil, nil, 10, 53, - 337, 12, 119, 118, 120, 111, 64, 109, 108, 112, - nil, 110, 121, 122, nil, 104, 105, 49, 50, 48, - 265, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 275, 276, nil, 45, - nil, nil, 38, nil, nil, 66, 67, nil, nil, 68, - nil, 40, 262, nil, 268, 52, 264, 263, nil, 260, - 261, nil, nil, 266, 24, 267, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, nil, nil, nil, - 85, nil, 92, 106, 107, nil, nil, 46, 47, 335, - 81, 82, 83, 11, 65, nil, nil, nil, 71, 72, - nil, nil, nil, 75, nil, 73, 74, 76, 35, 36, - 79, 80, nil, nil, nil, nil, nil, 84, 33, 32, - 115, 114, 116, 117, nil, nil, 23, nil, nil, nil, - nil, nil, 10, 53, 337, 12, 119, 118, 120, 111, - 64, 109, 108, 112, nil, 110, 121, 122, nil, 104, - 105, 49, 50, 48, 265, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 275, 276, nil, 45, nil, nil, 38, nil, nil, 66, - 67, nil, nil, 68, nil, 40, 262, nil, 268, 52, - 264, 263, nil, 260, 261, nil, nil, nil, 24, nil, - nil, nil, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, nil, nil, nil, 85, nil, 92, 106, 107, nil, - nil, 46, 47, 335, 81, 82, 83, 11, 65, nil, - nil, nil, 71, 72, nil, nil, nil, 75, nil, 73, - 74, 76, 35, 36, 79, 80, nil, nil, nil, nil, - nil, 84, 33, 32, 115, 114, 116, 117, nil, nil, - 23, nil, nil, nil, nil, nil, 10, 53, 337, 12, - 119, 118, 120, 111, 64, 109, 108, 112, nil, 110, - 121, 122, nil, 104, 105, 49, 50, 48, 265, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 275, 276, nil, 45, nil, nil, - 38, nil, nil, 66, 67, nil, nil, 68, nil, 40, - 262, nil, 268, 52, 264, 263, nil, 260, 261, nil, - nil, nil, 24, nil, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, nil, nil, nil, 85, nil, - 92, 106, 107, nil, nil, 46, 47, 335, 81, 82, - 83, 11, 65, nil, nil, nil, 71, 72, nil, nil, - nil, 75, nil, 73, 74, 76, 35, 36, 79, 80, - nil, nil, nil, nil, nil, 84, 33, 32, 115, 114, - 116, 117, nil, nil, 23, nil, nil, nil, nil, nil, - 10, 53, 337, 12, 119, 118, 120, 111, 64, 109, - 108, 112, nil, 110, 121, 122, nil, 104, 105, 49, - 50, 48, 265, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 275, 276, - nil, 45, nil, nil, 38, nil, nil, 66, 67, nil, - nil, 68, nil, 40, 262, nil, nil, 52, 264, 263, - nil, 260, 261, nil, nil, nil, 24, nil, nil, nil, - nil, 102, 90, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, nil, - nil, nil, 85, nil, 92, 106, 107, nil, nil, 46, - 47, 335, 81, 82, 83, 11, 65, nil, nil, nil, - 71, 72, nil, nil, nil, 75, nil, 73, 74, 76, - 35, 36, 79, 80, nil, nil, nil, nil, nil, 84, - 33, 32, 115, 114, 116, 117, nil, nil, 23, nil, - nil, nil, nil, nil, 10, 53, 337, 12, 119, 118, - 120, 111, 64, 109, 108, 112, nil, 110, 121, 122, - nil, 104, 105, 49, 50, 48, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 45, nil, nil, 38, nil, - nil, 66, 67, nil, nil, 68, nil, 40, nil, nil, - nil, 52, nil, nil, nil, nil, nil, nil, nil, nil, - 24, nil, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, nil, nil, nil, 85, nil, 92, 106, - 107, nil, nil, 46, 47, 81, 82, 83, 11, 65, - nil, nil, nil, 71, 72, nil, nil, nil, 75, nil, - 73, 74, 76, 35, 36, 79, 80, nil, nil, nil, - nil, nil, 84, 33, 32, 115, 114, 116, 117, nil, - nil, 23, nil, nil, nil, nil, nil, 10, 53, 9, - 12, 119, 118, 120, 111, 64, 109, 108, 112, nil, - 110, 121, 122, nil, 104, 105, 49, 50, 48, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 45, nil, - nil, 38, nil, nil, 66, 67, nil, nil, 68, nil, - 40, nil, nil, nil, 52, nil, nil, nil, nil, nil, - nil, nil, nil, 24, nil, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, 81, 82, 83, 85, - 65, 92, 106, 107, 71, 72, 46, 47, nil, 75, - nil, 73, 74, 76, 35, 36, 79, 80, nil, nil, - nil, nil, nil, 84, 33, 32, 115, 114, 116, 117, - nil, nil, 255, nil, nil, nil, nil, nil, nil, 53, - nil, nil, 119, 118, 120, 111, 64, 109, 108, 112, - nil, 110, 121, 122, nil, 104, 105, 49, 50, 48, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 246, - nil, nil, 254, nil, nil, 66, 67, nil, nil, 68, - nil, nil, nil, nil, nil, 52, nil, nil, nil, nil, - nil, nil, nil, nil, 251, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, nil, nil, nil, - 85, nil, 92, 106, 107, -441, nil, 46, 47, nil, - nil, nil, -441, -441, -441, nil, nil, -441, -441, -441, - nil, -441, nil, nil, nil, nil, nil, nil, nil, -441, - -441, -441, -441, nil, nil, nil, nil, nil, nil, nil, - nil, -441, -441, nil, -441, -441, -441, -441, -441, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, -441, -441, -441, -441, -441, -441, -441, -441, -441, - -441, -441, -441, -441, -441, nil, nil, -441, -441, -441, - nil, nil, -441, nil, 307, -441, nil, nil, -441, -441, - nil, -441, nil, -441, nil, -441, nil, -441, -441, nil, - -441, -441, -441, -441, -441, -328, -441, -441, -441, nil, - nil, nil, -328, -328, -328, nil, nil, -328, -328, -328, - nil, -328, -441, nil, nil, -441, -441, nil, -441, -328, - -441, -328, -328, nil, nil, nil, nil, -441, nil, nil, - nil, -328, -328, nil, -328, -328, -328, -328, -328, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, -328, -328, -328, -328, -328, -328, -328, -328, -328, - -328, -328, -328, -328, -328, nil, nil, -328, -328, -328, - nil, nil, -328, nil, 316, -328, nil, nil, -328, -328, - nil, -328, nil, -328, nil, -328, nil, -328, -328, nil, - -328, -328, -328, -328, -328, nil, -328, nil, -328, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, -328, nil, nil, -328, -328, nil, -328, nil, - -328, 81, 82, 83, nil, 65, nil, -328, nil, 71, - 72, nil, nil, nil, 75, nil, 73, 74, 76, 35, - 36, 79, 80, nil, nil, nil, nil, nil, 84, 33, - 32, 115, 114, 116, 117, nil, nil, 255, nil, nil, - nil, nil, nil, nil, 53, nil, nil, 119, 118, 120, - 111, 64, 109, 108, 112, 329, 110, 121, 122, nil, - 104, 105, 49, 50, 48, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 246, nil, nil, 254, nil, nil, - 66, 67, nil, nil, 68, nil, 326, nil, 323, nil, - 52, nil, nil, 330, nil, nil, nil, nil, nil, 251, - nil, nil, nil, nil, 102, 327, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - nil, nil, 81, 82, 83, 85, 65, 92, 106, 107, - 71, 72, 46, 47, nil, 75, nil, 73, 74, 76, - 35, 36, 79, 80, nil, nil, nil, nil, nil, 84, - 33, 32, 115, 114, 116, 117, nil, nil, 255, nil, - nil, nil, nil, nil, nil, 53, nil, nil, 119, 118, - 120, 111, 64, 109, 108, 112, 329, 110, 121, 122, - nil, 104, 105, 49, 50, 48, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 246, nil, nil, 254, nil, - nil, 66, 67, nil, nil, 68, nil, 326, nil, 323, - nil, 52, nil, nil, 330, nil, nil, nil, nil, nil, - 251, nil, nil, nil, nil, 102, 327, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, 81, 82, 83, 85, 65, 92, 106, - 107, 71, 72, 46, 47, nil, 75, nil, 73, 74, - 76, 35, 36, 79, 80, nil, nil, nil, nil, nil, - 84, 33, 32, 115, 114, 116, 117, nil, nil, 255, - nil, nil, nil, nil, nil, nil, 53, nil, nil, 119, - 118, 120, 111, 64, 109, 108, 112, 329, 110, 121, - 122, nil, 104, 105, 49, 50, 48, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 246, nil, nil, 254, - nil, nil, 66, 67, nil, nil, 68, nil, 326, nil, - 323, nil, 52, nil, nil, 330, nil, nil, nil, nil, - nil, 251, nil, nil, nil, nil, 102, 327, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 81, 82, 83, 85, 65, 92, - 106, 107, 71, 72, 46, 47, nil, 75, nil, 73, - 74, 76, 356, 357, 79, 80, nil, nil, nil, nil, - nil, 84, 351, 359, 115, 114, 116, 117, nil, nil, - 255, nil, nil, nil, nil, nil, nil, 53, nil, nil, - 119, 118, 120, 111, 64, 109, 108, 112, nil, 110, - 121, 122, nil, 104, 105, 49, 50, 48, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 246, nil, nil, - 254, nil, nil, 66, 67, nil, nil, 68, nil, nil, - nil, nil, nil, 52, nil, nil, nil, nil, nil, nil, - nil, nil, 251, nil, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 81, 82, 83, 85, 65, - 92, 106, 107, 71, 72, 46, 47, nil, 75, nil, - 73, 74, 76, 356, 357, 79, 80, nil, nil, nil, - nil, nil, 84, 351, 359, 115, 114, 116, 117, nil, - nil, 255, nil, nil, nil, nil, nil, nil, 53, nil, - nil, 119, 118, 120, 111, 64, 109, 108, 112, nil, - 110, 121, 122, nil, 104, 105, 49, 50, 48, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 246, nil, - nil, 254, nil, nil, 66, 67, nil, nil, 68, nil, - nil, nil, nil, nil, 52, nil, nil, nil, nil, nil, - nil, nil, nil, 251, nil, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, 81, 82, 83, 85, - 65, 92, 106, 107, 71, 72, 46, 47, nil, 75, - nil, 73, 74, 76, 356, 357, 79, 80, nil, nil, - nil, nil, nil, 84, 351, 359, 115, 114, 116, 117, - nil, nil, 255, nil, nil, nil, nil, nil, nil, 53, - nil, nil, 119, 118, 120, 111, 64, 109, 108, 112, - nil, 110, 121, 122, nil, 104, 105, 49, 50, 48, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 246, - nil, nil, 254, nil, nil, 66, 67, nil, nil, 68, - nil, nil, nil, nil, nil, 52, nil, nil, nil, nil, - nil, nil, nil, nil, 251, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, 81, 82, 83, - 85, 65, 92, 106, 107, 71, 72, 46, 47, nil, - 75, nil, 73, 74, 76, 356, 357, 79, 80, nil, - nil, nil, nil, nil, 84, 351, 359, 115, 114, 116, - 117, nil, nil, 255, nil, nil, nil, nil, nil, nil, - 53, nil, nil, 119, 118, 120, 111, 64, 109, 108, - 112, nil, 110, 121, 122, nil, 104, 105, 49, 50, - 48, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 246, nil, nil, 254, nil, nil, 66, 67, nil, nil, - 68, nil, nil, nil, nil, nil, 52, nil, nil, nil, - nil, nil, nil, nil, nil, 251, nil, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, 81, 82, - 83, 85, 65, 92, 106, 107, 71, 72, 46, 47, - nil, 75, nil, 73, 74, 76, 356, 357, 79, 80, - nil, nil, nil, nil, nil, 84, 351, 359, 115, 114, - 116, 117, nil, nil, 255, nil, nil, nil, nil, nil, - nil, 53, nil, nil, 119, 118, 120, 111, 64, 109, - 108, 112, nil, 110, 121, 122, nil, 104, 105, 49, - 50, 48, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 246, nil, nil, 254, nil, nil, 66, 67, nil, - nil, 68, nil, nil, nil, nil, nil, 52, nil, nil, - nil, nil, nil, nil, nil, nil, 251, nil, nil, nil, - nil, 102, 90, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, nil, - nil, nil, 85, nil, 92, 106, 107, -315, nil, 46, - 47, nil, nil, nil, -315, -315, -315, nil, nil, -315, - -315, -315, nil, -315, nil, nil, nil, nil, nil, nil, - nil, -315, nil, -315, -315, -315, nil, nil, nil, nil, - nil, nil, nil, -315, -315, nil, -315, -315, -315, -315, - -315, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, -315, -315, -315, -315, -315, -315, -315, - -315, -315, -315, -315, -315, -315, -315, nil, nil, -315, - -315, -315, nil, nil, -315, nil, nil, -315, nil, nil, - -315, -315, nil, -315, nil, -315, nil, -315, nil, -315, - -315, nil, -315, -315, -315, -315, -315, nil, -315, nil, - -315, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, -315, nil, nil, -315, -315, -315, - -315, nil, -315, nil, -315, nil, 81, 82, 83, -315, - 65, nil, nil, nil, 71, 72, nil, nil, nil, 75, - nil, 73, 74, 76, 356, 357, 79, 80, nil, nil, - nil, nil, nil, 84, 351, 359, 115, 114, 116, 117, - nil, nil, 255, nil, nil, nil, nil, nil, nil, 53, - nil, nil, 119, 118, 120, 111, 64, 109, 108, 112, - 329, 110, 121, 122, nil, 104, 105, 49, 50, 48, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 246, - nil, nil, 254, nil, nil, 66, 67, nil, nil, 68, - nil, 326, nil, nil, nil, 52, nil, nil, 330, nil, - nil, nil, nil, nil, 251, nil, nil, nil, nil, 102, - 327, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, 81, 82, 83, - 85, 65, 92, 106, 107, 71, 72, 46, 47, nil, - 75, nil, 73, 74, 76, 356, 357, 79, 80, nil, - nil, nil, nil, nil, 84, 351, 359, 115, 114, 116, - 117, nil, nil, 255, nil, nil, nil, nil, nil, nil, - 53, nil, nil, 119, 118, 120, 111, 64, 109, 108, - 112, 329, 110, 121, 122, nil, 104, 105, 49, 50, - 48, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 246, nil, nil, 254, nil, nil, 66, 67, nil, nil, - 68, nil, nil, nil, nil, nil, 52, nil, nil, 330, - nil, nil, nil, nil, nil, 251, nil, nil, nil, nil, - 102, 327, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, 81, 82, - 83, 85, 65, 92, 106, 107, 71, 72, 46, 47, - nil, 75, nil, 73, 74, 76, 35, 36, 79, 80, - nil, nil, nil, nil, nil, 84, 33, 32, 115, 114, - 116, 117, nil, nil, 23, nil, nil, nil, nil, nil, - nil, 53, nil, nil, 119, 118, 120, 111, 64, 109, - 108, 112, nil, 110, 121, 122, nil, 104, 105, 49, - 50, 48, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 246, nil, nil, 254, nil, nil, 66, 67, nil, - nil, 68, nil, nil, nil, nil, nil, 52, nil, nil, - nil, nil, nil, nil, nil, nil, 24, nil, nil, nil, - nil, 102, 90, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, 81, - 82, 83, 85, 65, 92, 106, 107, 71, 72, 46, - 47, nil, 75, nil, 73, 74, 76, 35, 36, 79, - 80, nil, nil, nil, nil, nil, 84, 33, 32, 115, - 114, 116, 117, nil, nil, 23, nil, nil, nil, nil, - nil, nil, 53, nil, nil, 119, 118, 120, 111, 64, - 109, 108, 112, nil, 110, 121, 122, nil, 104, 105, - 49, 50, 48, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 246, nil, nil, 254, nil, nil, 66, 67, - nil, nil, 68, nil, nil, nil, nil, nil, 52, nil, - nil, nil, nil, nil, nil, nil, nil, 24, nil, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - 81, 82, 83, 85, 65, 92, 106, 107, 71, 72, - 46, 47, nil, 75, nil, 73, 74, 76, 35, 36, - 79, 80, nil, nil, nil, nil, nil, 84, 33, 32, - 115, 114, 116, 117, nil, nil, 23, nil, nil, nil, - nil, nil, nil, 53, nil, nil, 119, 118, 120, 111, - 64, 109, 108, 112, nil, 110, 121, 122, nil, 104, - 105, 49, 50, 48, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 246, nil, nil, 254, nil, nil, 66, - 67, nil, nil, 68, nil, nil, nil, nil, nil, 52, - nil, nil, nil, nil, nil, nil, nil, nil, 24, nil, - nil, nil, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, 127, nil, - nil, nil, nil, 126, 85, nil, 92, 106, 107, nil, - nil, 46, 47, 81, 82, 83, 11, 65, nil, nil, - nil, 71, 72, nil, nil, nil, 75, nil, 73, 74, - 76, 35, 36, 79, 80, nil, nil, nil, nil, nil, - 84, 33, 32, 115, 114, 116, 117, nil, nil, 23, - nil, nil, nil, nil, nil, 10, 53, 9, 12, 119, - 118, 120, 111, 64, 109, 108, 112, nil, 110, 121, - 122, nil, 104, 105, 49, 50, 48, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 45, nil, nil, 38, - nil, nil, 66, 67, nil, nil, 68, nil, 40, nil, - nil, nil, 52, nil, nil, nil, nil, nil, nil, nil, - nil, 24, nil, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, nil, nil, 421, 85, nil, 92, - 106, 107, nil, nil, 46, 47, 81, 82, 83, nil, - 65, nil, nil, nil, 71, 72, nil, nil, nil, 75, - nil, 73, 74, 76, 35, 36, 79, 80, nil, nil, - nil, nil, nil, 84, 33, 32, 115, 114, 116, 117, - nil, nil, 23, nil, nil, nil, nil, nil, nil, 53, - nil, nil, 119, 118, 120, 111, 64, 109, 108, 112, - nil, 110, 121, 122, nil, 104, 105, 49, 50, 48, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 246, - nil, nil, 254, nil, nil, 66, 67, nil, nil, 68, - nil, nil, nil, nil, nil, 52, nil, nil, nil, nil, - nil, nil, nil, nil, 24, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, 81, 82, 83, - 85, 65, 92, 106, 107, 71, 72, 46, 47, nil, - 75, nil, 73, 74, 76, 35, 36, 79, 80, nil, - nil, nil, nil, nil, 84, 33, 32, 115, 114, 116, - 117, nil, nil, 23, nil, nil, nil, nil, nil, nil, - 53, nil, nil, 119, 118, 120, 111, 64, 109, 108, - 112, nil, 110, 121, 122, nil, 104, 105, 49, 50, - 48, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 246, nil, nil, 254, nil, nil, 66, 67, nil, nil, - 68, nil, nil, nil, nil, nil, 52, nil, nil, nil, - nil, nil, nil, nil, nil, 24, nil, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, 81, 82, - 83, 85, 65, 92, 106, 107, 71, 72, 46, 47, - nil, 75, nil, 73, 74, 76, 35, 36, 79, 80, - nil, nil, nil, nil, nil, 84, 33, 32, 115, 114, - 116, 117, nil, nil, 23, nil, nil, nil, nil, nil, - nil, 53, nil, nil, 119, 118, 120, 111, 64, 109, - 108, 112, nil, 110, 121, 122, nil, 104, 105, 49, - 50, 48, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 246, nil, nil, 254, nil, nil, 66, 67, nil, - nil, 68, nil, nil, nil, nil, nil, 52, nil, nil, - nil, nil, nil, nil, nil, nil, 24, nil, nil, nil, - nil, 102, 90, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, 81, - 82, 83, 85, 65, 92, 106, 107, 71, 72, 46, - 47, nil, 75, nil, 73, 74, 76, 35, 36, 79, - 80, nil, nil, nil, nil, nil, 84, 33, 32, 115, - 114, 116, 117, nil, nil, 23, nil, nil, nil, nil, - nil, nil, 53, nil, nil, 119, 118, 120, 111, 64, - 109, 108, 112, nil, 110, 121, 122, nil, 104, 105, - 49, 50, 48, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 246, nil, nil, 254, nil, nil, 66, 67, - nil, nil, 68, nil, nil, nil, nil, nil, 52, nil, - nil, nil, nil, nil, nil, nil, nil, 24, nil, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - nil, nil, nil, 85, nil, 92, 106, 107, nil, nil, - 46, 47, 81, 82, 83, 11, 65, nil, nil, nil, - 71, 72, nil, nil, nil, 75, nil, 73, 74, 76, - 35, 36, 79, 80, nil, nil, nil, nil, nil, 84, - 33, 32, 115, 114, 116, 117, nil, nil, 23, nil, - nil, nil, nil, nil, 10, 53, nil, 12, 119, 118, - 120, 111, 64, 109, 108, 112, nil, 110, 121, 122, - nil, 104, 105, 49, 50, 48, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 45, nil, nil, 38, nil, - nil, 66, 67, nil, nil, 68, nil, 40, nil, nil, - nil, 52, nil, nil, nil, nil, nil, nil, nil, nil, - 24, nil, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, 81, 82, 83, 85, 65, 92, 106, - 107, 71, 72, 46, 47, nil, 75, nil, 73, 74, - 76, 35, 36, 79, 80, nil, nil, nil, nil, nil, - 84, 33, 32, 115, 114, 116, 117, nil, nil, 255, - nil, nil, nil, nil, nil, nil, 53, nil, nil, 119, - 118, 120, 111, 64, 109, 108, 112, nil, 110, 121, - 122, nil, 104, 105, 49, 50, 48, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 246, nil, nil, 254, - nil, nil, 66, 67, nil, nil, 68, nil, 438, nil, - nil, nil, 52, nil, nil, nil, nil, nil, nil, nil, - nil, 251, nil, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 81, 82, 83, 85, 65, 92, - 106, 107, 71, 72, 46, 47, nil, 75, nil, 73, - 74, 76, 35, 36, 79, 80, nil, nil, nil, nil, - nil, 84, 33, 32, 115, 114, 116, 117, nil, nil, - 255, nil, nil, nil, nil, nil, nil, 53, nil, nil, - 119, 118, 120, 111, 64, 109, 108, 112, nil, 110, - 121, 122, nil, 104, 105, 49, 50, 48, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 246, nil, nil, - 254, nil, nil, 66, 67, nil, nil, 68, nil, 438, - nil, nil, nil, 52, nil, nil, nil, nil, nil, nil, - nil, nil, 251, nil, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 81, 82, 83, 85, 65, - 92, 106, 107, 71, 72, 46, 47, nil, 75, nil, - 73, 74, 76, 35, 36, 79, 80, nil, nil, nil, - nil, nil, 84, 33, 32, 115, 114, 116, 117, nil, - nil, 23, nil, nil, nil, nil, nil, nil, 53, nil, - nil, 119, 118, 120, 111, 64, 109, 108, 112, nil, - 110, 121, 122, nil, 104, 105, 49, 50, 48, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 246, nil, - nil, 254, nil, nil, 66, 67, nil, nil, 68, nil, - nil, nil, nil, nil, 52, nil, nil, nil, nil, nil, - nil, nil, nil, 24, nil, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, 81, 82, 83, 85, - 65, 92, 106, 107, 71, 72, 46, 47, nil, 75, - nil, 73, 74, 76, 35, 36, 79, 80, nil, nil, - nil, nil, nil, 84, 33, 32, 115, 114, 116, 117, - nil, nil, 23, nil, nil, nil, nil, nil, nil, 53, - nil, nil, 119, 118, 120, 111, 64, 109, 108, 112, - nil, 110, 121, 122, nil, 104, 105, 49, 50, 48, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 246, - nil, nil, 254, nil, nil, 66, 67, nil, nil, 68, - nil, nil, nil, nil, nil, 52, nil, nil, nil, nil, - nil, nil, nil, nil, 24, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, 81, 82, 83, - 85, 65, 92, 106, 107, 71, 72, 46, 47, nil, - 75, nil, 73, 74, 76, 35, 36, 79, 80, nil, - nil, nil, nil, nil, 84, 33, 32, 115, 114, 116, - 117, nil, nil, 255, nil, nil, nil, nil, nil, nil, - 53, nil, nil, 119, 118, 120, 111, 64, 109, 108, - 112, nil, 110, 121, 122, nil, 104, 105, 49, 50, - 48, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 246, nil, nil, 254, nil, nil, 66, 67, nil, nil, - 68, nil, nil, nil, nil, nil, 52, nil, nil, nil, - nil, nil, nil, nil, nil, 251, nil, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, 81, 82, - 83, 85, 65, 92, 106, 107, 71, 72, 46, 47, - nil, 75, nil, 73, 74, 76, 35, 36, 79, 80, - nil, nil, nil, nil, nil, 84, 33, 32, 115, 114, - 116, 117, nil, nil, 255, nil, nil, nil, nil, nil, - nil, 53, nil, nil, 119, 118, 120, 111, 64, 109, - 108, 112, 329, 110, 121, 122, nil, 104, 105, 49, - 50, 48, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 246, nil, nil, 254, nil, nil, 66, 67, nil, - nil, 68, nil, 326, nil, 323, nil, 52, nil, nil, - 330, nil, nil, nil, nil, nil, 251, nil, nil, nil, - nil, 102, 327, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, 81, - 82, 83, 85, 65, 92, 106, 107, 71, 72, 46, - 47, nil, 75, nil, 73, 74, 76, 35, 36, 79, - 80, nil, nil, nil, nil, nil, 84, 33, 32, 115, - 114, 116, 117, nil, nil, 255, nil, nil, nil, nil, - nil, nil, 53, nil, nil, 119, 118, 120, 111, 64, - 109, 108, 112, nil, 110, 121, 122, nil, 104, 105, - 49, 50, 48, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 246, nil, nil, 254, nil, nil, 66, 67, - nil, nil, 68, nil, nil, nil, nil, nil, 52, nil, - nil, nil, nil, nil, nil, nil, nil, 251, nil, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - 81, 82, 83, 85, 65, 92, 106, 107, 71, 72, - 46, 47, nil, 75, nil, 73, 74, 76, 35, 36, - 79, 80, nil, nil, nil, nil, nil, 84, 33, 32, - 115, 114, 116, 117, nil, nil, 23, nil, nil, nil, - nil, nil, nil, 53, nil, nil, 119, 118, 120, 111, - 64, 109, 108, 112, nil, 110, 121, 122, nil, 104, - 105, 49, 50, 48, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 246, nil, nil, 254, nil, nil, 66, - 67, nil, nil, 68, nil, nil, nil, nil, nil, 52, - nil, nil, nil, nil, nil, nil, nil, nil, 24, nil, - nil, nil, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, 81, 82, 83, 85, 65, 92, 106, 107, 71, - 72, 46, 47, nil, 75, nil, 73, 74, 76, 35, - 36, 79, 80, nil, nil, nil, nil, nil, 84, 33, - 32, 115, 114, 116, 117, nil, nil, 23, nil, nil, - nil, nil, nil, nil, 53, nil, nil, 119, 118, 120, - 111, 64, 109, 108, 112, nil, 110, 121, 122, nil, - 104, 105, 49, 50, 48, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 246, nil, nil, 254, nil, nil, - 66, 67, nil, nil, 68, nil, nil, nil, nil, nil, - 52, nil, nil, nil, nil, nil, nil, nil, nil, 24, - nil, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, 241, - nil, nil, 81, 82, 83, 85, 65, 92, 106, 107, - 71, 72, 46, 47, nil, 75, nil, 73, 74, 76, - 356, 357, 79, 80, nil, nil, nil, nil, nil, 84, - 351, 359, 115, 114, 116, 117, nil, nil, 255, nil, - nil, nil, nil, nil, nil, 53, nil, nil, 119, 118, - 120, 111, 64, 109, 108, 112, nil, 110, 121, 122, - nil, 104, 105, 49, 50, 48, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 246, nil, nil, 254, nil, - nil, 66, 67, nil, nil, 68, nil, nil, nil, nil, - nil, 52, nil, nil, nil, nil, nil, nil, nil, nil, - 251, nil, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, 81, 82, 83, 85, 65, 92, 106, - 107, 71, 72, 46, 47, nil, 75, nil, 73, 74, - 76, 356, 357, 79, 80, nil, nil, nil, nil, nil, - 84, 351, 359, 115, 114, 116, 117, nil, nil, 255, - nil, nil, nil, nil, nil, nil, 53, nil, nil, 119, - 118, 120, 111, 64, 109, 108, 112, nil, 110, 121, - 122, nil, 104, 105, 49, 50, 48, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 246, nil, nil, 254, - nil, nil, 66, 67, nil, nil, 68, nil, nil, nil, - nil, nil, 52, nil, nil, nil, nil, nil, nil, nil, - nil, 251, nil, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 81, 82, 83, 85, 65, 92, - 106, 107, 71, 72, 46, 47, nil, 75, nil, 73, - 74, 76, 356, 357, 79, 80, nil, nil, nil, nil, - nil, 84, 351, 359, 115, 114, 116, 117, nil, nil, - 255, nil, nil, nil, nil, nil, nil, 53, nil, nil, - 119, 118, 120, 111, 64, 109, 108, 112, nil, 110, - 121, 122, nil, 104, 105, 49, 50, 48, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 246, nil, nil, - 254, nil, nil, 66, 67, nil, nil, 68, nil, nil, - nil, nil, nil, 52, nil, nil, nil, nil, nil, nil, - nil, nil, 251, nil, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 81, 82, 83, 85, 65, - 92, 106, 107, 71, 72, 46, 47, nil, 75, nil, - 73, 74, 76, 356, 357, 79, 80, nil, nil, nil, - nil, nil, 84, 351, 359, 115, 114, 116, 117, nil, - nil, 255, nil, nil, nil, nil, nil, nil, 53, nil, - nil, 119, 118, 120, 111, 64, 109, 108, 112, nil, - 110, 121, 122, nil, 104, 105, 49, 50, 48, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 246, nil, - nil, 254, nil, nil, 66, 67, nil, nil, 68, nil, - nil, nil, nil, nil, 52, nil, nil, nil, nil, nil, - nil, nil, nil, 251, nil, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, 81, 82, 83, 85, - 65, 92, 106, 107, 71, 72, 46, 47, nil, 75, - nil, 73, 74, 76, 356, 357, 79, 80, nil, nil, - nil, nil, nil, 84, 351, 359, 115, 114, 116, 117, - nil, nil, 255, nil, nil, nil, nil, nil, nil, 53, - nil, nil, 119, 118, 120, 111, 64, 109, 108, 112, - nil, 110, 121, 122, nil, 104, 105, 49, 50, 48, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 246, - nil, nil, 254, nil, nil, 66, 67, nil, nil, 68, - nil, nil, nil, nil, nil, 52, nil, nil, nil, nil, - nil, nil, nil, nil, 251, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, 81, 82, 83, - 85, 65, 92, 106, 107, 71, 72, 46, 47, nil, - 75, nil, 73, 74, 76, 356, 357, 79, 80, nil, - nil, nil, nil, nil, 84, 351, 359, 115, 114, 116, - 117, nil, nil, 255, nil, nil, nil, nil, nil, nil, - 53, nil, nil, 119, 118, 120, 111, 64, 109, 108, - 112, nil, 110, 121, 122, nil, 104, 105, 49, 50, - 48, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 246, nil, nil, 254, nil, nil, 66, 67, nil, nil, - 68, nil, nil, nil, nil, nil, 52, nil, nil, nil, - nil, nil, nil, nil, nil, 251, nil, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, 81, 82, - 83, 85, 65, 92, 106, 107, 71, 72, 46, 47, - nil, 75, nil, 73, 74, 76, 356, 357, 79, 80, - nil, nil, nil, nil, nil, 84, 351, 359, 115, 114, - 116, 117, nil, nil, 255, nil, nil, nil, nil, nil, - nil, 53, nil, nil, 119, 118, 120, 111, 64, 109, - 108, 112, nil, 110, 121, 122, nil, 104, 105, 49, - 50, 48, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 246, nil, nil, 254, nil, nil, 66, 67, nil, - nil, 68, nil, nil, nil, nil, nil, 52, nil, nil, - nil, nil, nil, nil, nil, nil, 251, nil, nil, nil, - nil, 102, 90, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, 81, - 82, 83, 85, 65, 92, 106, 107, 71, 72, 46, - 47, nil, 75, nil, 73, 74, 76, 356, 357, 79, - 80, nil, nil, nil, nil, nil, 84, 351, 359, 115, - 114, 116, 117, nil, nil, 255, nil, nil, nil, nil, - nil, nil, 53, nil, nil, 119, 118, 120, 111, 64, - 109, 108, 112, nil, 110, 121, 122, nil, 104, 105, - 49, 50, 48, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 246, nil, nil, 254, nil, nil, 66, 67, - nil, nil, 68, nil, nil, nil, nil, nil, 52, nil, - nil, nil, nil, nil, nil, nil, nil, 251, nil, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - 81, 82, 83, 85, 65, 92, 106, 107, 71, 72, - 46, 47, nil, 75, nil, 73, 74, 76, 356, 357, - 79, 80, nil, nil, nil, nil, nil, 84, 351, 359, - 115, 114, 116, 117, nil, nil, 255, nil, nil, nil, - nil, nil, nil, 53, nil, nil, 119, 118, 120, 111, - 64, 109, 108, 112, nil, 110, 121, 122, nil, 104, - 105, 49, 50, 48, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 246, nil, nil, 254, nil, nil, 66, - 67, nil, nil, 68, nil, nil, nil, nil, nil, 52, - nil, nil, nil, nil, nil, nil, nil, nil, 251, nil, - nil, nil, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, 81, 82, 83, 85, 65, 92, 106, 107, 71, - 72, 46, 47, nil, 75, nil, 73, 74, 76, 356, - 357, 79, 80, nil, nil, nil, nil, nil, 84, 351, - 359, 115, 114, 116, 117, nil, nil, 255, nil, nil, - nil, nil, nil, nil, 53, nil, nil, 119, 118, 120, - 111, 64, 109, 108, 112, nil, 110, 121, 122, nil, - 104, 105, 49, 50, 48, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 246, nil, nil, 254, nil, nil, - 66, 67, nil, nil, 68, nil, nil, nil, nil, nil, - 52, nil, nil, nil, nil, nil, nil, nil, nil, 251, - nil, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - nil, nil, 81, 82, 83, 85, 65, 92, 106, 107, - 71, 72, 46, 47, nil, 75, nil, 73, 74, 76, - 356, 357, 79, 80, nil, nil, nil, nil, nil, 84, - 351, 359, 115, 114, 116, 117, nil, nil, 255, nil, - nil, nil, nil, nil, nil, 53, nil, nil, 119, 118, - 120, 111, 64, 109, 108, 112, nil, 110, 121, 122, - nil, 104, 105, 49, 50, 48, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 246, nil, nil, 254, nil, - nil, 66, 67, nil, nil, 68, nil, nil, nil, nil, - nil, 52, nil, nil, nil, nil, nil, nil, nil, nil, - 251, nil, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, 81, 82, 83, 85, 65, 92, 106, - 107, 71, 72, 46, 47, nil, 75, nil, 73, 74, - 76, 356, 357, 79, 80, nil, nil, nil, nil, nil, - 84, 351, 359, 115, 114, 116, 117, nil, nil, 255, - nil, nil, nil, nil, nil, nil, 53, nil, nil, 119, - 118, 120, 111, 64, 109, 108, 112, nil, 110, 121, - 122, nil, 104, 105, 49, 50, 48, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 246, nil, nil, 254, - nil, nil, 66, 67, nil, nil, 68, nil, nil, nil, - nil, nil, 52, nil, nil, nil, nil, nil, nil, nil, - nil, 251, nil, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 81, 82, 83, 85, 65, 92, - 106, 107, 71, 72, 46, 47, nil, 75, nil, 73, - 74, 76, 356, 357, 79, 80, nil, nil, nil, nil, - nil, 84, 351, 359, 115, 114, 116, 117, nil, nil, - 255, nil, nil, nil, nil, nil, nil, 53, nil, nil, - 119, 118, 120, 111, 64, 109, 108, 112, nil, 110, - 121, 122, nil, 104, 105, 49, 50, 48, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 246, nil, nil, - 254, nil, nil, 66, 67, nil, nil, 68, nil, nil, - nil, nil, nil, 52, nil, nil, nil, nil, nil, nil, - nil, nil, 251, nil, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 81, 82, 83, 85, 65, - 92, 106, 107, 71, 72, 46, 47, nil, 75, nil, - 73, 74, 76, 356, 357, 79, 80, nil, nil, nil, - nil, nil, 84, 351, 359, 115, 114, 116, 117, nil, - nil, 255, nil, nil, nil, nil, nil, nil, 53, nil, - nil, 119, 118, 120, 111, 64, 109, 108, 112, nil, - 110, 121, 122, nil, 104, 105, 49, 50, 48, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 246, nil, - nil, 254, nil, nil, 66, 67, nil, nil, 68, nil, - nil, nil, nil, nil, 52, nil, nil, nil, nil, nil, - nil, nil, nil, 251, nil, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, 81, 82, 83, 85, - 65, 92, 106, 107, 71, 72, 46, 47, nil, 75, - nil, 73, 74, 76, 356, 357, 79, 80, nil, nil, - nil, nil, nil, 84, 351, 359, 115, 114, 116, 117, - nil, nil, 255, nil, nil, nil, nil, nil, nil, 53, - nil, nil, 119, 118, 120, 111, 64, 109, 108, 112, - nil, 110, 121, 122, nil, 104, 105, 49, 50, 48, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 246, - nil, nil, 254, nil, nil, 66, 67, nil, nil, 68, - nil, nil, nil, nil, nil, 52, nil, nil, nil, nil, - nil, nil, nil, nil, 251, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, 81, 82, 83, - 85, 65, 92, 106, 107, 71, 72, 46, 47, nil, - 75, nil, 73, 74, 76, 356, 357, 79, 80, nil, - nil, nil, nil, nil, 84, 351, 359, 115, 114, 116, - 117, nil, nil, 255, nil, nil, nil, nil, nil, nil, - 53, nil, nil, 119, 118, 120, 111, 64, 109, 108, - 112, nil, 110, 121, 122, nil, 104, 105, 49, 50, - 48, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 246, nil, nil, 254, nil, nil, 66, 67, nil, nil, - 68, nil, nil, nil, nil, nil, 52, nil, nil, nil, - nil, nil, nil, nil, nil, 251, nil, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, 81, 82, - 83, 85, 65, 92, 106, 107, 71, 72, 46, 47, - nil, 75, nil, 73, 74, 76, 356, 357, 79, 80, - nil, nil, nil, nil, nil, 84, 351, 359, 115, 114, - 116, 117, nil, nil, 255, nil, nil, nil, nil, nil, - nil, 53, nil, nil, 119, 118, 120, 111, 64, 109, - 108, 112, nil, 110, 121, 122, nil, 104, 105, 49, - 50, 48, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 246, nil, nil, 254, nil, nil, 66, 67, nil, - nil, 68, nil, nil, nil, nil, nil, 52, nil, nil, - nil, nil, nil, nil, nil, nil, 251, nil, nil, nil, - nil, 102, 90, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, 81, - 82, 83, 85, 65, 92, 106, 107, 71, 72, 46, - 47, nil, 75, nil, 73, 74, 76, 356, 357, 79, - 80, nil, nil, nil, nil, nil, 84, 351, 359, 115, - 114, 116, 117, nil, nil, 255, nil, nil, nil, nil, - nil, nil, 53, nil, nil, 119, 118, 120, 111, 64, - 109, 108, 112, nil, 110, 121, 122, nil, 104, 105, - 49, 50, 48, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 246, nil, nil, 254, nil, nil, 66, 67, - nil, nil, 68, nil, nil, nil, nil, nil, 52, nil, - nil, nil, nil, nil, nil, nil, nil, 251, nil, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - 81, 82, 83, 85, 65, 92, 106, 107, 71, 72, - 46, 47, nil, 75, nil, 73, 74, 76, 356, 357, - 79, 80, nil, nil, nil, nil, nil, 84, 351, 359, - 115, 114, 116, 117, nil, nil, 255, nil, nil, nil, - nil, nil, nil, 53, nil, nil, 119, 118, 120, 111, - 64, 109, 108, 112, nil, 110, 121, 122, nil, 104, - 105, 49, 50, 48, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 246, nil, nil, 254, nil, nil, 66, - 67, nil, nil, 68, nil, nil, nil, nil, nil, 52, - nil, nil, nil, nil, nil, nil, nil, nil, 251, nil, - nil, nil, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, 81, 82, 83, 85, 65, 92, 106, 107, 71, - 72, 46, 47, nil, 75, nil, 73, 74, 76, 356, - 357, 79, 80, nil, nil, nil, nil, nil, 84, 351, - 359, 115, 114, 116, 117, nil, nil, 255, nil, nil, - nil, nil, nil, nil, 53, nil, nil, 119, 118, 120, - 111, 64, 109, 108, 112, nil, 110, 121, 122, nil, - 104, 105, 49, 50, 48, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 246, nil, nil, 254, nil, nil, - 66, 67, nil, nil, 68, nil, nil, nil, nil, nil, - 52, nil, nil, nil, nil, nil, nil, nil, nil, 251, - nil, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - nil, nil, 81, 82, 83, 85, 65, 92, 106, 107, - 71, 72, 46, 47, nil, 75, nil, 73, 74, 76, - 356, 357, 79, 80, nil, nil, nil, nil, nil, 84, - 351, 359, 115, 114, 116, 117, nil, nil, 255, nil, - nil, nil, nil, nil, nil, 53, nil, nil, 119, 118, - 120, 111, 64, 109, 108, 112, nil, 110, 121, 122, - nil, 104, 105, 49, 50, 48, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 246, nil, nil, 254, nil, - nil, 66, 67, nil, nil, 68, nil, nil, nil, nil, - nil, 52, nil, nil, nil, nil, nil, nil, nil, nil, - 251, nil, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, 81, 82, 83, 85, 65, 92, 106, - 107, 71, 72, 46, 47, nil, 75, nil, 73, 74, - 76, 356, 357, 79, 80, nil, nil, nil, nil, nil, - 84, 351, 359, 115, 114, 116, 117, nil, nil, 255, - nil, nil, nil, nil, nil, nil, 53, nil, nil, 119, - 118, 120, 111, 64, 109, 108, 112, nil, 110, 121, - 122, nil, 104, 105, 49, 50, 48, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 246, nil, nil, 254, - nil, nil, 66, 67, nil, nil, 68, nil, nil, nil, - nil, nil, 52, nil, nil, nil, nil, nil, nil, nil, - nil, 251, nil, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 81, 82, 83, 85, 65, 92, - 106, 107, 71, 72, 46, 47, nil, 75, nil, 73, - 74, 76, 356, 357, 79, 80, nil, nil, nil, nil, - nil, 84, 351, 359, 115, 114, 116, 117, nil, nil, - 255, nil, nil, nil, nil, nil, nil, 53, nil, nil, - 119, 118, 120, 111, 64, 109, 108, 112, nil, 110, - 121, 122, nil, 104, 105, 49, 50, 48, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 246, nil, nil, - 254, nil, nil, 66, 67, nil, nil, 68, nil, nil, - nil, nil, nil, 52, nil, nil, nil, nil, nil, nil, - nil, nil, 251, nil, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 81, 82, 83, 85, 65, - 92, 106, 107, 71, 72, 46, 47, nil, 75, nil, - 73, 74, 76, 356, 357, 79, 80, nil, nil, nil, - nil, nil, 84, 351, 359, 115, 114, 116, 117, nil, - nil, 255, nil, nil, nil, nil, nil, nil, 53, nil, - nil, 119, 118, 120, 111, 64, 109, 108, 112, nil, - 110, 121, 122, nil, 104, 105, 49, 50, 48, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 246, nil, - nil, 254, nil, nil, 66, 67, nil, nil, 68, nil, - nil, nil, nil, nil, 52, nil, nil, nil, nil, nil, - nil, nil, nil, 251, nil, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, 81, 82, 83, 85, - 65, 92, 106, 107, 71, 72, 46, 47, nil, 75, - nil, 73, 74, 76, 35, 36, 79, 80, nil, nil, - nil, nil, nil, 84, 33, 32, 115, 114, 116, 117, - nil, nil, 23, nil, nil, nil, nil, nil, nil, 53, - nil, nil, 119, 118, 120, 111, 64, 109, 108, 112, - nil, 110, 121, 122, nil, 104, 105, 49, 50, 48, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 246, - nil, nil, 254, nil, nil, 66, 67, nil, nil, 68, - nil, nil, nil, nil, nil, 52, nil, nil, nil, nil, - nil, nil, nil, nil, 24, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, 81, 82, 83, - 85, 65, 92, 106, 107, 71, 72, 46, 47, nil, - 75, nil, 73, 74, 76, 35, 36, 79, 80, nil, - nil, nil, nil, nil, 84, 33, 32, 115, 114, 116, - 117, nil, nil, 255, nil, nil, nil, nil, nil, nil, - 53, nil, nil, 119, 118, 120, 111, 64, 109, 108, - 112, 329, 110, 121, 122, nil, 104, 105, 49, 50, - 48, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 246, nil, nil, 254, nil, nil, 66, 67, nil, nil, - 68, nil, 326, nil, 323, nil, 52, nil, nil, 330, - nil, nil, nil, nil, nil, 251, nil, nil, nil, nil, - 102, 327, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, 81, 82, - 83, 85, 65, 92, 106, 107, 71, 72, 46, 564, - nil, 75, nil, 73, 74, 76, 35, 36, 79, 80, - nil, nil, nil, nil, nil, 84, 33, 32, 115, 114, - 116, 117, nil, nil, 255, nil, nil, nil, nil, nil, - nil, 53, nil, nil, 119, 118, 120, 111, 64, 109, - 108, 112, 329, 110, 121, 122, nil, 104, 105, 49, - 50, 48, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 246, nil, nil, 254, nil, nil, 66, 67, nil, - nil, 68, nil, 326, nil, 323, nil, 52, nil, nil, - 330, nil, nil, nil, nil, nil, 251, nil, nil, nil, - nil, 102, 327, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, 81, - 82, 83, 85, 65, 92, 106, 107, 71, 72, 46, - 47, nil, 75, nil, 73, 74, 76, 35, 36, 79, - 80, nil, nil, nil, nil, nil, 84, 33, 32, 115, - 114, 116, 117, nil, nil, 255, nil, nil, nil, nil, - nil, nil, 53, nil, nil, 119, 118, 120, 111, 64, - 109, 108, 112, 329, 110, 121, 122, nil, 104, 105, - 49, 50, 48, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 246, nil, nil, 254, nil, nil, 66, 67, - nil, nil, 68, nil, 326, nil, 323, nil, 52, nil, - nil, 330, nil, nil, nil, nil, nil, 251, nil, nil, - nil, nil, 102, 327, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, 241, nil, nil, - 81, 82, 83, 85, 65, 92, 106, 107, 71, 72, - 46, 47, nil, 75, nil, 73, 74, 76, 356, 357, - 79, 80, nil, nil, nil, nil, nil, 84, 351, 359, - 115, 114, 116, 117, nil, nil, 255, nil, nil, nil, - nil, nil, nil, 53, nil, nil, 119, 118, 120, 111, - 64, 109, 108, 112, nil, 110, 121, 122, nil, 104, - 105, 49, 50, 48, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 246, nil, nil, 254, nil, nil, 66, - 67, nil, nil, 68, nil, nil, nil, nil, nil, 52, - nil, nil, nil, nil, nil, nil, nil, nil, 251, nil, - nil, nil, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, 81, 82, 83, 85, 65, 92, 106, 107, 71, - 72, 46, 47, nil, 75, nil, 73, 74, 76, 356, - 357, 79, 80, nil, nil, nil, nil, nil, 84, 351, - 359, 115, 114, 116, 117, nil, nil, 255, nil, nil, - nil, nil, nil, nil, 53, nil, nil, 119, 118, 120, - 111, 64, 109, 108, 112, nil, 110, 121, 122, nil, - 104, 105, 49, 50, 48, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 246, nil, nil, 254, nil, nil, - 66, 67, nil, nil, 68, nil, nil, nil, nil, nil, - 52, nil, nil, nil, nil, nil, nil, nil, nil, 251, - nil, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - nil, nil, 81, 82, 83, 85, 65, 92, 106, 107, - 71, 72, 46, 47, nil, 75, nil, 73, 74, 76, - 356, 357, 79, 80, nil, nil, nil, nil, nil, 84, - 351, 359, 115, 114, 116, 117, nil, nil, 255, nil, - nil, nil, nil, nil, nil, 53, nil, nil, 119, 118, - 120, 111, 64, 109, 108, 112, nil, 110, 121, 122, - nil, 104, 105, 49, 50, 48, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 246, nil, nil, 254, nil, - nil, 66, 67, nil, nil, 68, nil, nil, nil, nil, - nil, 52, nil, nil, nil, nil, nil, nil, nil, nil, - 251, nil, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, 81, 82, 83, 85, 65, 92, 106, - 107, 71, 72, 46, 47, nil, 75, nil, 73, 74, - 76, 356, 357, 79, 80, nil, nil, nil, nil, nil, - 84, 351, 359, 115, 114, 116, 117, nil, nil, 255, - nil, nil, nil, nil, nil, nil, 53, nil, nil, 119, - 118, 120, 111, 64, 109, 108, 112, nil, 110, 121, - 122, nil, 104, 105, 49, 50, 48, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 246, nil, nil, 254, - nil, nil, 66, 67, nil, nil, 68, nil, nil, nil, - nil, nil, 52, nil, nil, nil, nil, nil, nil, nil, - nil, 251, nil, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, nil, nil, nil, 85, nil, 92, - 106, 107, nil, nil, 46, 47, 81, 82, 83, 11, - 65, nil, nil, nil, 71, 72, nil, nil, nil, 75, - nil, 73, 74, 76, 35, 36, 79, 80, nil, nil, - nil, nil, nil, 84, 33, 32, 115, 114, 116, 117, - nil, nil, 23, nil, nil, nil, nil, nil, 10, 53, - nil, 12, 119, 118, 120, 111, 64, 109, 108, 112, - nil, 110, 121, 122, nil, 104, 105, 49, 50, 48, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 45, - nil, nil, 38, nil, nil, 66, 67, nil, nil, 68, - nil, 40, nil, nil, nil, 52, nil, nil, nil, nil, - nil, nil, nil, nil, 24, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, 81, 82, 83, - 85, 65, 92, 106, 107, 71, 72, 46, 47, nil, - 75, nil, 73, 74, 76, 356, 357, 79, 80, nil, - nil, nil, nil, nil, 84, 351, 359, 115, 114, 116, - 117, nil, nil, 255, nil, nil, nil, nil, nil, nil, - 53, nil, nil, 119, 118, 120, 111, 64, 109, 108, - 112, nil, 110, 121, 122, nil, 104, 105, 49, 50, - 48, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 246, nil, nil, 254, nil, nil, 66, 67, nil, nil, - 68, nil, nil, nil, nil, nil, 52, nil, nil, nil, - nil, nil, nil, nil, nil, 251, nil, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, 81, 82, - 83, 85, 65, 92, 106, 107, 71, 72, 46, 47, - nil, 75, nil, 73, 74, 76, 35, 36, 79, 80, - nil, nil, nil, nil, nil, 84, 33, 32, 115, 114, - 116, 117, nil, nil, 23, nil, nil, nil, nil, nil, - nil, 53, nil, nil, 119, 118, 120, 111, 64, 109, - 108, 112, nil, 110, 121, 122, nil, 104, 105, 49, - 50, 48, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 246, nil, nil, 254, nil, nil, 66, 67, nil, - nil, 68, nil, nil, nil, nil, nil, 52, nil, nil, - nil, nil, nil, nil, nil, nil, 24, nil, nil, nil, - nil, 102, 90, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, 81, - 82, 83, 85, 65, 92, 106, 107, 71, 72, 46, - 47, nil, 75, nil, 73, 74, 76, 35, 36, 79, - 80, nil, nil, nil, nil, nil, 84, 33, 32, 115, - 114, 116, 117, nil, nil, 23, nil, nil, nil, nil, - nil, nil, 53, nil, nil, 119, 118, 120, 111, 64, - 109, 108, 112, nil, 110, 121, 122, nil, 104, 105, - 49, 50, 48, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 246, nil, nil, 254, nil, nil, 66, 67, - nil, nil, 68, nil, nil, nil, nil, nil, 52, nil, - nil, nil, nil, nil, nil, nil, nil, 24, nil, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - 81, 82, 83, 85, 65, 92, 106, 107, 71, 72, - 46, 47, nil, 75, nil, 73, 74, 76, 356, 357, - 79, 80, nil, nil, nil, nil, nil, 84, 351, 359, - 115, 114, 116, 117, nil, nil, 255, nil, nil, nil, - nil, nil, nil, 53, nil, nil, 119, 118, 120, 111, - 64, 109, 108, 112, nil, 110, 121, 122, nil, 104, - 105, 49, 50, 48, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 246, nil, nil, 254, nil, nil, 66, - 67, nil, nil, 68, nil, nil, nil, nil, nil, 52, - nil, nil, nil, nil, nil, nil, nil, nil, 251, nil, - nil, nil, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, nil, nil, nil, 85, nil, 92, 106, 107, -276, - nil, 46, 47, nil, nil, nil, -276, -276, -276, nil, - nil, -276, -276, -276, nil, -276, nil, nil, nil, nil, - nil, nil, nil, -276, -276, -276, -276, nil, nil, nil, - nil, nil, nil, nil, nil, -276, -276, nil, -276, -276, - -276, -276, -276, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, -276, -276, -276, -276, -276, - -276, -276, -276, -276, -276, -276, -276, -276, -276, nil, - nil, -276, -276, -276, nil, nil, -276, nil, 307, -276, - nil, nil, -276, -276, nil, -276, nil, -276, nil, -276, - nil, -276, -276, nil, -276, -276, -276, -276, -276, nil, - -276, -276, -276, 494, nil, 491, 490, 489, 499, 492, - nil, nil, nil, nil, nil, nil, -276, nil, 502, -276, - -276, -722, -276, nil, -276, nil, nil, nil, -722, -722, - -722, -276, nil, -722, -722, -722, nil, -722, nil, nil, - 497, nil, nil, nil, nil, -722, -722, -722, -722, -722, - nil, 510, 509, nil, nil, nil, 503, -722, -722, nil, - -722, -722, -722, -722, -722, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, -722, -722, -722, - -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, - -722, nil, nil, -722, -722, -722, nil, nil, -722, nil, - nil, -722, nil, nil, -722, -722, nil, -722, nil, -722, - nil, -722, nil, -722, -722, nil, -722, -722, -722, -722, - -722, nil, -722, -722, -722, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, -722, nil, - nil, -722, -722, -722, -722, nil, -722, -723, -722, nil, - nil, nil, nil, -722, -723, -723, -723, nil, nil, -723, - -723, -723, nil, -723, nil, nil, nil, nil, nil, nil, - nil, -723, -723, -723, -723, -723, nil, nil, nil, nil, - nil, nil, nil, -723, -723, nil, -723, -723, -723, -723, - -723, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, -723, -723, -723, -723, -723, -723, -723, - -723, -723, -723, -723, -723, -723, -723, nil, nil, -723, - -723, -723, nil, nil, -723, nil, nil, -723, nil, nil, - -723, -723, nil, -723, nil, -723, nil, -723, nil, -723, - -723, nil, -723, -723, -723, -723, -723, nil, -723, -723, - -723, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, -723, nil, nil, -723, -723, -723, - -723, nil, -723, nil, -723, nil, 81, 82, 83, -723, - 65, nil, nil, nil, 71, 72, nil, nil, nil, 75, - nil, 73, 74, 76, 35, 36, 79, 80, nil, nil, - nil, nil, nil, 84, 33, 32, 115, 114, 116, 117, - nil, nil, 698, nil, nil, nil, nil, nil, nil, 53, - nil, nil, 119, 118, 120, 111, 64, 109, 108, 112, - nil, 110, 121, 122, nil, 104, 105, 49, 50, 48, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 246, - nil, nil, 254, nil, nil, 66, 67, nil, nil, 68, - nil, nil, nil, nil, nil, 52, nil, nil, nil, nil, - nil, nil, nil, nil, 251, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, 81, 82, 83, - 85, 65, 92, 106, 107, 71, 72, 46, 47, nil, - 75, nil, 73, 74, 76, 356, 357, 79, 80, nil, - nil, nil, nil, nil, 84, 351, 359, 115, 114, 116, - 117, nil, nil, 255, nil, nil, nil, nil, nil, nil, - 53, nil, nil, 119, 118, 120, 111, 64, 109, 108, - 112, nil, 110, 121, 122, nil, 104, 105, 49, 50, - 48, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 246, nil, nil, 254, nil, nil, 66, 67, nil, nil, - 68, nil, nil, nil, nil, nil, 52, nil, nil, nil, - nil, nil, nil, nil, nil, 251, nil, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, 81, 82, - 83, 85, 65, 92, 106, 107, 71, 72, 46, 47, - nil, 75, nil, 73, 74, 76, 35, 36, 79, 80, - nil, nil, nil, nil, nil, 84, 33, 32, 115, 114, - 116, 117, nil, nil, 698, nil, nil, nil, nil, nil, - nil, 53, nil, nil, 119, 118, 120, 111, 64, 109, - 108, 112, nil, 110, 121, 122, nil, 104, 105, 49, - 50, 48, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 246, nil, nil, 254, nil, nil, 66, 67, nil, - nil, 68, nil, nil, nil, nil, nil, 52, nil, nil, - nil, nil, nil, nil, nil, nil, 251, nil, nil, nil, - nil, 102, 90, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, 81, - 82, 83, 85, 65, 92, 106, 107, 71, 72, 46, - 47, nil, 75, nil, 73, 74, 76, 35, 36, 79, - 80, nil, nil, nil, nil, nil, 84, 33, 32, 115, - 114, 116, 117, nil, nil, 255, nil, nil, nil, nil, - nil, nil, 53, nil, nil, 119, 118, 120, 111, 64, - 109, 108, 112, 329, 110, 121, 122, nil, 104, 105, - 49, 50, 48, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 246, nil, nil, 254, nil, nil, 66, 67, - nil, nil, 68, nil, 326, nil, 323, nil, 52, nil, - nil, 330, nil, nil, nil, nil, nil, 251, nil, nil, - nil, nil, 102, 327, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - 81, 82, 83, 85, 65, 92, 106, 107, 71, 72, - 46, 47, nil, 75, nil, 73, 74, 76, 356, 357, - 79, 80, nil, nil, nil, nil, nil, 84, 351, 359, - 115, 114, 116, 117, nil, nil, 255, nil, nil, nil, - nil, nil, nil, 53, nil, nil, 119, 118, 120, 111, - 64, 109, 108, 112, nil, 110, 121, 122, nil, 104, - 105, 49, 50, 48, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 246, nil, nil, 254, nil, nil, 66, - 67, nil, nil, 68, nil, nil, nil, nil, nil, 52, - nil, nil, nil, nil, nil, nil, nil, nil, 251, nil, - nil, nil, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, 81, 82, 83, 85, 65, 92, 106, 107, 71, - 72, 46, 47, nil, 75, nil, 73, 74, 76, 356, - 357, 79, 80, nil, nil, nil, nil, nil, 84, 351, - 359, 115, 114, 116, 117, nil, nil, 255, nil, nil, - nil, nil, nil, nil, 53, nil, nil, 119, 118, 120, - 111, 64, 109, 108, 112, nil, 110, 121, 122, nil, - 104, 105, 49, 50, 48, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 246, nil, nil, 254, nil, nil, - 66, 67, nil, nil, 68, nil, nil, nil, nil, nil, - 52, nil, nil, nil, nil, nil, nil, nil, nil, 251, - nil, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - nil, nil, 81, 82, 83, 85, 65, 92, 106, 107, - 71, 72, 46, 47, nil, 75, nil, 73, 74, 76, - 356, 357, 79, 80, nil, nil, nil, nil, nil, 84, - 351, 359, 115, 114, 116, 117, nil, nil, 255, nil, - nil, nil, nil, nil, nil, 53, nil, nil, 119, 118, - 120, 111, 64, 109, 108, 112, nil, 110, 121, 122, - nil, 104, 105, 49, 50, 48, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 246, nil, nil, 254, nil, - nil, 66, 67, nil, nil, 68, nil, nil, nil, nil, - nil, 52, nil, nil, nil, nil, nil, nil, nil, nil, - 251, nil, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, nil, nil, nil, 85, nil, 92, 106, - 107, -276, nil, 46, 47, nil, nil, nil, -276, -276, - -276, nil, nil, -276, -276, -276, 494, -276, 491, 490, - 489, 499, 492, nil, nil, -276, -276, -276, nil, nil, - nil, 502, nil, nil, nil, nil, nil, -276, -276, nil, - -276, -276, -276, -276, -276, nil, 494, nil, 491, 490, - 489, 499, 492, 497, nil, nil, nil, nil, nil, nil, - nil, 502, 507, 506, 510, 509, nil, nil, nil, 503, - nil, 494, nil, 491, 490, 489, 499, 492, -276, nil, - nil, nil, nil, 497, 648, -276, 502, nil, nil, nil, - 307, -276, 507, 506, 510, 509, nil, nil, nil, 503, - nil, nil, nil, nil, nil, nil, nil, nil, 497, 488, - nil, nil, nil, -276, -276, nil, nil, 507, 506, 510, - 509, nil, nil, nil, 503, nil, nil, nil, -276, nil, - nil, -276, nil, 81, 82, 83, -276, 65, nil, 488, - nil, 71, 72, -276, nil, nil, 75, nil, 73, 74, - 76, 356, 357, 79, 80, nil, nil, nil, nil, nil, - 84, 351, 359, 115, 114, 116, 117, nil, nil, 255, - nil, nil, nil, nil, nil, nil, 53, nil, nil, 119, - 118, 120, 111, 64, 109, 108, 112, nil, 110, 121, - 122, nil, 104, 105, 49, 50, 48, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 246, nil, nil, 254, - nil, nil, 66, 67, nil, nil, 68, nil, nil, nil, - nil, nil, 52, nil, nil, nil, nil, nil, nil, nil, - nil, 251, nil, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 81, 82, 83, 85, 65, 92, - 106, 107, 71, 72, 46, 47, nil, 75, nil, 73, - 74, 76, 356, 357, 79, 80, nil, nil, nil, nil, - nil, 84, 351, 359, 115, 114, 116, 117, nil, nil, - 255, nil, nil, nil, nil, nil, nil, 53, nil, nil, - 119, 118, 120, 111, 64, 109, 108, 112, 329, 110, - 121, 122, nil, 104, 105, 49, 50, 48, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 246, nil, nil, - 254, nil, nil, 66, 67, nil, nil, 68, nil, 326, - nil, 323, nil, 52, nil, nil, 330, nil, nil, nil, - nil, nil, 251, nil, nil, nil, nil, 102, 327, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 81, 82, 83, 85, 65, - 92, 106, 107, 71, 72, 46, 47, nil, 75, nil, - 73, 74, 76, 356, 357, 79, 80, nil, nil, nil, - nil, nil, 84, 351, 359, 115, 114, 116, 117, nil, - nil, 255, nil, nil, nil, nil, nil, nil, 53, nil, - nil, 119, 118, 120, 111, 64, 109, 108, 112, 329, - 110, 121, 122, nil, 104, 105, 49, 50, 48, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 246, nil, - nil, 254, nil, nil, 66, 67, nil, nil, 68, nil, - nil, nil, 323, nil, 52, nil, nil, 330, nil, nil, - nil, nil, nil, 251, nil, nil, nil, nil, 102, 327, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, 81, 82, 83, 85, - 65, 92, 106, 107, 71, 72, 46, 47, nil, 75, - nil, 73, 74, 76, 356, 357, 79, 80, nil, nil, - nil, nil, nil, 84, 351, 359, 115, 114, 116, 117, - nil, nil, 255, nil, nil, nil, nil, nil, nil, 53, - nil, nil, 119, 118, 120, 111, 64, 109, 108, 112, - nil, 110, 121, 122, nil, 104, 105, 49, 50, 48, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 246, - nil, nil, 254, nil, nil, 66, 67, nil, nil, 68, - nil, nil, nil, nil, nil, 52, nil, nil, nil, nil, - nil, nil, nil, nil, 251, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, nil, nil, nil, - 85, nil, 92, 106, 107, nil, nil, 46, 47, 81, - 82, 83, 11, 65, nil, nil, nil, 71, 72, nil, - nil, nil, 75, nil, 73, 74, 76, 35, 36, 79, - 80, nil, nil, nil, nil, nil, 84, 33, 32, 115, - 114, 116, 117, nil, nil, 23, nil, nil, nil, nil, - nil, 10, 53, 337, 12, 119, 118, 120, 111, 64, - 109, 108, 112, nil, 110, 121, 122, nil, 104, 105, - 49, 50, 48, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 45, nil, nil, 38, nil, nil, 66, 67, - nil, nil, 68, nil, 40, nil, nil, nil, 52, nil, - nil, nil, nil, nil, nil, nil, nil, 24, nil, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - nil, nil, 421, 85, nil, 92, 106, 107, nil, nil, - 46, 47, 81, 82, 83, nil, 65, nil, nil, nil, - 71, 72, nil, nil, nil, 75, nil, 73, 74, 76, - 35, 36, 79, 80, nil, nil, nil, nil, nil, 84, - 33, 32, 115, 114, 116, 117, nil, nil, 255, nil, - nil, nil, nil, nil, nil, 53, nil, nil, 119, 118, - 120, 111, 64, 109, 108, 112, 329, 110, 121, 122, - nil, 104, 105, 49, 50, 48, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 246, nil, nil, 254, nil, - nil, 66, 67, nil, nil, 68, nil, 326, nil, 323, - nil, 52, nil, nil, 330, nil, nil, nil, nil, nil, - 251, nil, nil, nil, nil, 102, 327, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, 81, 82, 83, 85, 65, 92, 106, - 107, 71, 72, 46, 47, nil, 75, nil, 73, 74, - 76, 356, 357, 79, 80, nil, nil, nil, nil, nil, - 84, 351, 359, 115, 114, 116, 117, nil, nil, 255, - nil, nil, nil, nil, nil, nil, 53, nil, nil, 119, - 118, 120, 111, 64, 109, 108, 112, nil, 110, 121, - 122, nil, 104, 105, 49, 50, 48, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 246, nil, nil, 254, - nil, nil, 66, 67, nil, nil, 68, nil, nil, nil, - nil, nil, 52, nil, nil, nil, nil, nil, nil, nil, - nil, 251, nil, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 81, 82, 83, 85, 65, 92, - 106, 107, 71, 72, 46, 47, nil, 75, nil, 73, - 74, 76, 356, 357, 79, 80, nil, nil, nil, nil, - nil, 84, 351, 359, 115, 114, 116, 117, nil, nil, - 255, nil, nil, nil, nil, nil, nil, 53, nil, nil, - 119, 118, 120, 111, 64, 109, 108, 112, nil, 110, - 121, 122, nil, 104, 105, 49, 50, 48, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 246, nil, nil, - 254, nil, nil, 66, 67, nil, nil, 68, nil, nil, - nil, nil, nil, 52, nil, nil, nil, nil, nil, nil, - nil, nil, 251, nil, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 81, 82, 83, 85, 65, - 92, 106, 107, 71, 72, 46, 47, nil, 75, nil, - 73, 74, 76, 356, 357, 79, 80, nil, nil, nil, - nil, nil, 84, 351, 359, 115, 114, 116, 117, nil, - nil, 255, nil, nil, nil, nil, nil, nil, 53, nil, - nil, 119, 118, 120, 111, 64, 109, 108, 112, nil, - 110, 121, 122, nil, 104, 105, 49, 50, 48, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 246, nil, - nil, 254, nil, nil, 66, 67, nil, nil, 68, nil, - nil, nil, nil, nil, 52, nil, nil, nil, nil, nil, - nil, nil, nil, 251, nil, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, 81, 82, 83, 85, - 65, 92, 106, 107, 71, 72, 46, 47, nil, 75, - nil, 73, 74, 76, 356, 357, 79, 80, nil, nil, - nil, nil, nil, 84, 351, 359, 115, 114, 116, 117, - nil, nil, 255, nil, nil, nil, nil, nil, nil, 53, - nil, nil, 119, 118, 120, 111, 64, 109, 108, 112, - 329, 110, 121, 122, nil, 104, 105, 49, 50, 48, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 246, - nil, nil, 254, nil, nil, 66, 67, nil, nil, 68, - nil, 326, nil, nil, nil, 52, nil, nil, 330, nil, - nil, nil, nil, nil, 251, nil, nil, nil, nil, 102, - 327, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, 81, 82, 83, - 85, 65, 92, 106, 107, 71, 72, 46, 47, nil, - 75, nil, 73, 74, 76, 356, 357, 79, 80, nil, - nil, nil, nil, nil, 84, 351, 359, 115, 114, 116, - 117, nil, nil, 255, nil, nil, nil, nil, nil, nil, - 53, nil, nil, 119, 118, 120, 111, 64, 109, 108, - 112, 329, 110, 121, 122, nil, 104, 105, 49, 50, - 48, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 246, nil, nil, 254, nil, nil, 66, 67, nil, nil, - 68, nil, nil, nil, nil, nil, 52, nil, nil, 330, - nil, nil, nil, nil, nil, 251, nil, nil, nil, nil, - 102, 327, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, 81, 82, - 83, 85, 65, 92, 106, 107, 71, 72, 46, 47, - nil, 75, nil, 73, 74, 76, 356, 357, 79, 80, - nil, nil, nil, nil, nil, 84, 351, 359, 115, 114, - 116, 117, nil, nil, 255, nil, nil, nil, nil, nil, - nil, 53, nil, nil, 119, 118, 120, 111, 64, 109, - 108, 112, nil, 110, 121, 122, nil, 104, 105, 49, - 50, 48, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 246, nil, nil, 254, nil, nil, 66, 67, nil, - nil, 68, nil, 326, nil, nil, nil, 52, nil, nil, - nil, nil, nil, nil, nil, nil, 251, nil, nil, nil, - nil, 102, 90, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, 81, - 82, 83, 85, 65, 92, 106, 107, 71, 72, 46, - 47, nil, 75, nil, 73, 74, 76, 35, 36, 79, - 80, nil, nil, nil, nil, nil, 84, 33, 32, 115, - 114, 116, 117, nil, nil, 255, nil, nil, nil, nil, - nil, nil, 53, nil, nil, 119, 118, 120, 111, 64, - 109, 108, 112, 329, 110, 121, 122, nil, 104, 105, - 49, 50, 48, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 246, nil, nil, 254, nil, nil, 66, 67, - nil, nil, 68, nil, 326, nil, 323, nil, 52, nil, - nil, 330, nil, nil, nil, nil, nil, 251, nil, nil, - nil, nil, 102, 327, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - 81, 82, 83, 85, 65, 92, 106, 107, 71, 72, - 46, 47, nil, 75, nil, 73, 74, 76, 35, 36, - 79, 80, nil, nil, nil, nil, nil, 84, 33, 32, - 115, 114, 116, 117, nil, nil, 255, nil, nil, nil, - nil, nil, nil, 53, nil, nil, 119, 118, 120, 111, - 64, 109, 108, 112, 329, 110, 121, 122, nil, 104, - 105, 49, 50, 48, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 246, nil, nil, 254, nil, nil, 66, - 67, nil, nil, 68, nil, 326, nil, 323, nil, 52, - nil, nil, 330, nil, nil, nil, nil, nil, 251, nil, - nil, nil, nil, 102, 327, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, nil, nil, nil, 85, nil, 92, 106, 107, nil, - nil, 46, 47, 81, 82, 83, 11, 65, nil, nil, - nil, 71, 72, nil, nil, nil, 75, nil, 73, 74, - 76, 35, 36, 79, 80, nil, nil, nil, nil, nil, - 84, 33, 32, 115, 114, 116, 117, nil, nil, 23, - nil, nil, nil, nil, nil, 10, 53, nil, 12, 119, - 118, 120, 111, 64, 109, 108, 112, nil, 110, 121, - 122, nil, 104, 105, 49, 50, 48, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 45, nil, nil, 38, - nil, nil, 66, 67, nil, nil, 68, nil, 40, nil, - nil, nil, 52, nil, nil, nil, nil, nil, nil, nil, - nil, 24, nil, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 81, 82, 83, 85, 65, 92, - 106, 107, 71, 72, 46, 47, nil, 75, nil, 73, - 74, 76, 356, 357, 79, 80, nil, nil, nil, nil, - nil, 84, 351, 359, 115, 114, 116, 117, nil, nil, - 255, nil, nil, nil, nil, nil, nil, 53, nil, nil, - 119, 118, 120, 111, 64, 109, 108, 112, nil, 110, - 121, 122, nil, 104, 105, 49, 50, 48, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 246, nil, nil, - 254, nil, nil, 66, 67, nil, nil, 68, nil, 832, - nil, nil, nil, 52, nil, nil, nil, nil, nil, nil, - nil, nil, 251, nil, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 81, 82, 83, 85, 65, - 92, 106, 107, 71, 72, 46, 47, nil, 75, nil, - 73, 74, 76, 35, 36, 79, 80, nil, nil, nil, - nil, nil, 84, 33, 32, 115, 114, 116, 117, nil, - nil, 255, nil, nil, nil, nil, nil, nil, 53, nil, - nil, 119, 118, 120, 111, 64, 109, 108, 112, nil, - 110, 121, 122, nil, 104, 105, 49, 50, 48, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 246, nil, - nil, 254, nil, nil, 66, 67, nil, nil, 68, nil, - nil, nil, nil, nil, 52, nil, nil, nil, nil, nil, - nil, nil, nil, 251, nil, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, 81, 82, 83, 85, - 65, 92, 106, 107, 71, 72, 46, 47, nil, 75, - nil, 73, 74, 76, 35, 36, 79, 80, nil, nil, - nil, nil, nil, 84, 33, 32, 115, 114, 116, 117, - nil, nil, 255, nil, nil, nil, nil, nil, nil, 53, - nil, nil, 119, 118, 120, 111, 64, 109, 108, 112, - 329, 110, 121, 122, nil, 104, 105, 49, 50, 48, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 246, - nil, nil, 254, nil, nil, 66, 67, nil, nil, 68, - nil, 326, nil, 323, nil, 52, nil, nil, 330, nil, - nil, nil, nil, nil, 251, nil, nil, nil, nil, 102, - 327, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, nil, nil, nil, - 85, nil, 92, 106, 107, nil, nil, 46, 47, 81, - 82, 83, 11, 65, nil, nil, nil, 71, 72, nil, - nil, nil, 75, nil, 73, 74, 76, 35, 36, 79, - 80, nil, nil, nil, nil, nil, 84, 33, 32, 115, - 114, 116, 117, nil, nil, 23, nil, nil, nil, nil, - nil, 10, 53, nil, 12, 119, 118, 120, 111, 64, - 109, 108, 112, nil, 110, 121, 122, nil, 104, 105, - 49, 50, 48, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 45, nil, nil, 38, nil, nil, 66, 67, - nil, nil, 68, nil, 40, nil, nil, nil, 52, nil, - nil, nil, nil, nil, nil, nil, nil, 24, nil, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - 81, 82, 83, 85, 65, 92, 106, 107, 71, 72, - 46, 47, nil, 75, nil, 73, 74, 76, 356, 357, - 79, 80, nil, nil, nil, nil, nil, 84, 351, 359, - 115, 114, 116, 117, nil, nil, 255, nil, nil, nil, - nil, nil, nil, 53, nil, nil, 119, 118, 120, 111, - 64, 109, 108, 112, nil, 110, 121, 122, nil, 104, - 105, 49, 50, 48, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 246, nil, nil, 254, nil, nil, 66, - 67, nil, nil, 68, nil, nil, nil, nil, nil, 52, - nil, nil, nil, nil, nil, nil, nil, nil, 251, nil, - nil, nil, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, 81, 82, 83, 85, 65, 92, 106, 107, 71, - 72, 46, 47, nil, 75, nil, 73, 74, 76, 356, - 357, 79, 80, nil, nil, nil, nil, nil, 84, 351, - 359, 115, 114, 116, 117, nil, nil, 255, nil, nil, - nil, nil, nil, nil, 53, nil, nil, 119, 118, 120, - 111, 64, 109, 108, 112, 329, 110, 121, 122, nil, - 104, 105, 49, 50, 48, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 246, nil, nil, 254, nil, nil, - 66, 67, nil, nil, 68, nil, 326, nil, 323, nil, - 52, nil, nil, 330, nil, nil, nil, nil, nil, 251, - nil, nil, nil, nil, 102, 327, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - nil, nil, 81, 82, 83, 85, 65, 92, 106, 107, - 71, 72, 46, 47, nil, 75, nil, 73, 74, 76, - 356, 357, 79, 80, nil, nil, nil, nil, nil, 84, - 351, 359, 115, 114, 116, 117, nil, nil, 255, nil, - nil, nil, nil, nil, nil, 53, nil, nil, 119, 118, - 120, 111, 64, 109, 108, 112, 329, 110, 121, 122, - nil, 104, 105, 49, 50, 48, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 246, nil, nil, 254, nil, - nil, 66, 67, nil, nil, 68, nil, nil, nil, 323, - nil, 52, nil, nil, 330, nil, nil, nil, nil, nil, - 251, nil, nil, nil, nil, 102, 327, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, 81, 82, 83, 85, 65, 92, 106, - 107, 71, 72, 46, 47, nil, 75, nil, 73, 74, - 76, 35, 36, 79, 80, nil, nil, nil, nil, nil, - 84, 33, 32, 115, 114, 116, 117, nil, nil, 255, - nil, nil, nil, nil, nil, nil, 53, nil, nil, 119, - 118, 120, 111, 64, 109, 108, 112, nil, 110, 121, - 122, nil, 104, 105, 49, 50, 48, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 246, nil, nil, 254, - nil, nil, 66, 67, nil, nil, 68, nil, nil, nil, - nil, nil, 52, nil, nil, nil, nil, nil, nil, nil, - nil, 251, nil, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 81, 82, 83, 85, 65, 92, - 106, 107, 71, 72, 46, 47, nil, 75, nil, 73, - 74, 76, 35, 36, 79, 80, nil, nil, nil, nil, - nil, 84, 33, 32, 115, 114, 116, 117, nil, nil, - 255, nil, nil, nil, nil, nil, nil, 53, nil, nil, - 119, 118, 120, 111, 64, 109, 108, 112, nil, 110, - 121, 122, nil, 104, 105, 49, 50, 48, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 246, nil, nil, - 254, nil, nil, 66, 67, nil, nil, 68, nil, nil, - nil, nil, nil, 52, nil, nil, nil, nil, nil, nil, - nil, nil, 251, nil, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 81, 82, 83, 85, 65, - 92, 106, 107, 71, 72, 46, 47, nil, 75, nil, - 73, 74, 76, 35, 36, 79, 80, nil, nil, nil, - nil, nil, 84, 33, 32, 115, 114, 116, 117, nil, - nil, 255, nil, nil, nil, nil, nil, nil, 53, nil, - nil, 119, 118, 120, 111, 64, 109, 108, 112, nil, - 110, 121, 122, nil, 104, 105, 49, 50, 48, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 246, nil, - nil, 254, nil, nil, 66, 67, nil, nil, 68, nil, - nil, nil, nil, nil, 52, nil, nil, nil, nil, nil, - nil, nil, nil, 251, nil, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, 81, 82, 83, 85, - 65, 92, 106, 107, 71, 72, 46, 47, nil, 75, - nil, 73, 74, 76, 35, 36, 79, 80, nil, nil, - nil, nil, nil, 84, 33, 32, 115, 114, 116, 117, - nil, nil, 255, nil, nil, nil, nil, nil, nil, 53, - nil, nil, 119, 118, 120, 111, 64, 109, 108, 112, - nil, 110, 121, 122, nil, 104, 105, 49, 50, 48, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 246, - nil, nil, 254, nil, nil, 66, 67, nil, nil, 68, - nil, nil, nil, nil, nil, 52, nil, nil, nil, nil, - nil, nil, nil, nil, 251, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, 81, 82, 83, - 85, 65, 92, 106, 107, 71, 72, 46, 47, nil, - 75, nil, 73, 74, 76, 356, 357, 79, 80, nil, - nil, nil, nil, nil, 84, 351, 359, 115, 114, 116, - 117, nil, nil, 255, nil, nil, nil, nil, nil, nil, - 53, nil, nil, 119, 118, 120, 111, 64, 109, 108, - 112, nil, 110, 121, 122, nil, 104, 105, 49, 50, - 48, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 246, nil, nil, 254, nil, nil, 66, 67, nil, nil, - 68, nil, 438, nil, nil, nil, 52, nil, nil, nil, - nil, nil, nil, nil, nil, 251, nil, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, 81, 82, - 83, 85, 65, 92, 106, 107, 71, 72, 46, 47, - nil, 75, nil, 73, 74, 76, 356, 357, 79, 80, - nil, nil, nil, nil, nil, 84, 351, 359, 115, 114, - 116, 117, nil, nil, 255, nil, nil, nil, nil, nil, - nil, 53, nil, nil, 119, 118, 120, 111, 64, 109, - 108, 112, nil, 110, 121, 122, nil, 104, 105, 49, - 50, 48, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 246, nil, nil, 254, nil, nil, 66, 67, nil, - nil, 68, nil, nil, nil, nil, nil, 52, nil, nil, - nil, nil, nil, nil, nil, nil, 251, nil, nil, nil, - nil, 102, 90, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, 81, - 82, 83, 85, 65, 92, 106, 107, 71, 72, 46, - 47, nil, 75, nil, 73, 74, 76, 356, 357, 79, - 80, nil, nil, nil, nil, nil, 84, 351, 359, 115, - 114, 116, 117, nil, nil, 889, nil, nil, nil, nil, - nil, nil, 53, nil, nil, 119, 118, 120, 111, 64, - 109, 108, 112, nil, 110, 121, 122, nil, 104, 105, - 49, 50, 48, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 246, nil, nil, 254, nil, nil, 66, 67, - nil, nil, 68, nil, nil, nil, nil, nil, 52, nil, - nil, nil, nil, nil, nil, nil, nil, 251, nil, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - 81, 82, 83, 85, 65, 92, 106, 107, 71, 72, - 46, 47, nil, 75, nil, 73, 74, 76, 356, 357, - 79, 80, nil, nil, nil, nil, nil, 84, 351, 359, - 115, 114, 116, 117, nil, nil, 889, nil, nil, nil, - nil, nil, nil, 53, nil, nil, 119, 118, 120, 111, - 64, 109, 108, 112, nil, 110, 121, 122, nil, 104, - 105, 49, 50, 48, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 246, nil, nil, 254, nil, nil, 66, - 67, nil, nil, 68, nil, nil, nil, nil, nil, 52, - nil, nil, nil, nil, nil, nil, nil, nil, 251, nil, - nil, nil, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, 81, 82, 83, 85, 65, 92, 106, 107, 71, - 72, 46, 47, nil, 75, nil, 73, 74, 76, 356, - 357, 79, 80, nil, nil, nil, nil, nil, 84, 351, - 359, 115, 114, 116, 117, nil, nil, 255, nil, nil, - nil, nil, nil, nil, 53, nil, nil, 119, 118, 120, - 111, 64, 109, 108, 112, 329, 110, 121, 122, nil, - 104, 105, 49, 50, 48, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 246, nil, nil, 254, nil, nil, - 66, 67, nil, nil, 68, nil, 326, nil, 323, nil, - 52, nil, nil, 330, nil, nil, nil, nil, nil, 251, - nil, nil, nil, nil, 102, 327, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - nil, nil, 81, 82, 83, 85, 65, 92, 106, 107, - 71, 72, 46, 564, nil, 75, nil, 73, 74, 76, - 356, 357, 79, 80, nil, nil, nil, nil, nil, 84, - 351, 359, 115, 114, 116, 117, nil, nil, 255, nil, - nil, nil, nil, nil, nil, 53, nil, nil, 119, 118, - 120, 111, 64, 109, 108, 112, nil, 110, 121, 122, - nil, 104, 105, 49, 50, 48, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 246, nil, nil, 254, nil, - nil, 66, 67, nil, nil, 68, nil, nil, nil, nil, - nil, 52, nil, nil, nil, nil, nil, nil, nil, nil, - 251, nil, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, 81, 82, 83, 85, 65, 92, 106, - 107, 71, 72, 46, 47, nil, 75, nil, 73, 74, - 76, 35, 36, 79, 80, nil, nil, nil, nil, nil, - 84, 33, 32, 115, 114, 116, 117, nil, nil, 23, - nil, nil, nil, nil, nil, nil, 53, nil, nil, 119, - 118, 120, 111, 64, 109, 108, 112, nil, 110, 121, - 122, nil, 104, 105, 49, 50, 48, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 246, nil, nil, 254, - nil, nil, 66, 67, nil, nil, 68, nil, nil, nil, - nil, nil, 52, nil, nil, nil, nil, nil, nil, nil, - nil, 24, nil, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 81, 82, 83, 85, 65, 92, - 106, 107, 71, 72, 46, 47, nil, 75, nil, 73, - 74, 76, 35, 36, 79, 80, nil, nil, nil, nil, - nil, 84, 33, 32, 115, 114, 116, 117, nil, nil, - 23, nil, nil, nil, nil, nil, nil, 53, nil, nil, - 119, 118, 120, 111, 64, 109, 108, 112, nil, 110, - 121, 122, nil, 104, 105, 49, 50, 48, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 246, nil, nil, - 254, nil, nil, 66, 67, nil, nil, 68, nil, nil, - nil, nil, nil, 52, nil, nil, nil, nil, nil, nil, - nil, nil, 24, nil, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 81, 82, 83, 85, 65, - 92, 106, 107, 71, 72, 46, 47, nil, 75, nil, - 73, 74, 76, 356, 357, 79, 80, nil, nil, nil, - nil, nil, 84, 351, 359, 115, 114, 116, 117, nil, - nil, 255, nil, nil, nil, nil, nil, nil, 53, nil, - nil, 119, 118, 120, 111, 64, 109, 108, 112, nil, - 110, 121, 122, nil, 104, 105, 49, 50, 48, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 246, nil, - nil, 254, nil, nil, 66, 67, nil, nil, 68, nil, - nil, nil, nil, nil, 52, nil, nil, nil, nil, nil, - nil, nil, nil, 251, nil, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, 81, 82, 83, 85, - 65, 92, 106, 107, 71, 72, 46, 47, nil, 75, - nil, 73, 74, 76, 35, 36, 79, 80, nil, nil, - nil, nil, nil, 84, 33, 32, 115, 114, 116, 117, - nil, nil, 255, nil, nil, nil, nil, nil, nil, 53, - nil, nil, 119, 118, 120, 111, 64, 109, 108, 112, - nil, 110, 121, 122, nil, 104, 105, 49, 50, 48, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 246, - nil, nil, 254, nil, nil, 66, 67, nil, nil, 68, - nil, nil, nil, nil, nil, 52, nil, nil, nil, nil, - nil, nil, nil, nil, 251, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, 81, 82, 83, - 85, 65, 92, 106, 107, 71, 72, 46, 47, nil, - 75, nil, 73, 74, 76, 356, 357, 79, 80, nil, - nil, nil, nil, nil, 84, 351, 359, 115, 114, 116, - 117, nil, nil, 255, nil, nil, nil, nil, nil, nil, - 53, nil, nil, 119, 118, 120, 111, 64, 109, 108, - 112, nil, 110, 121, 122, nil, 104, 105, 49, 50, - 48, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 246, nil, nil, 254, nil, nil, 66, 67, nil, nil, - 68, nil, nil, nil, nil, nil, 52, nil, nil, nil, - nil, nil, nil, nil, nil, 251, nil, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, 81, 82, - 83, 85, 65, 92, 106, 107, 71, 72, 46, 47, - nil, 75, nil, 73, 74, 76, 35, 36, 79, 80, - nil, nil, nil, nil, nil, 84, 33, 32, 115, 114, - 116, 117, nil, nil, 698, nil, nil, nil, nil, nil, - nil, 53, nil, nil, 119, 118, 120, 111, 64, 109, - 108, 112, nil, 110, 121, 122, nil, 104, 105, 49, - 50, 48, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 246, nil, nil, 254, nil, nil, 66, 67, nil, - nil, 68, nil, nil, nil, nil, nil, 52, nil, nil, - nil, nil, nil, nil, nil, nil, 251, nil, nil, nil, - nil, 102, 90, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, 81, - 82, 83, 85, 65, 92, 106, 107, 71, 72, 46, - 47, nil, 75, nil, 73, 74, 76, 356, 357, 79, - 80, nil, nil, nil, nil, nil, 84, 351, 359, 115, - 114, 116, 117, nil, nil, 255, nil, nil, nil, nil, - nil, nil, 53, nil, nil, 119, 118, 120, 111, 64, - 109, 108, 112, nil, 110, 121, 122, nil, 104, 105, - 49, 50, 48, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 246, nil, nil, 254, nil, nil, 66, 67, - nil, nil, 68, nil, nil, nil, nil, nil, 52, nil, - nil, nil, nil, nil, nil, nil, nil, 251, nil, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - 81, 82, 83, 85, 65, 92, 106, 107, 71, 72, - 46, 47, nil, 75, nil, 73, 74, 76, 356, 357, - 79, 80, nil, nil, nil, nil, nil, 84, 351, 359, - 115, 114, 116, 117, nil, nil, 255, nil, nil, nil, - nil, nil, nil, 53, nil, nil, 119, 118, 120, 111, - 64, 109, 108, 112, nil, 110, 121, 122, nil, 104, - 105, 49, 50, 48, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 246, nil, nil, 254, nil, nil, 66, - 67, nil, nil, 68, nil, nil, nil, nil, nil, 52, - nil, nil, nil, nil, nil, nil, nil, nil, 251, nil, - nil, nil, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, 81, 82, 83, 85, 65, 92, 106, 107, 71, - 72, 46, 47, nil, 75, nil, 73, 74, 76, 356, - 357, 79, 80, nil, nil, nil, nil, nil, 84, 351, - 359, 115, 114, 116, 117, nil, nil, 255, nil, nil, - nil, nil, nil, nil, 53, nil, nil, 119, 118, 120, - 111, 64, 109, 108, 112, nil, 110, 121, 122, nil, - 104, 105, 49, 50, 48, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 246, nil, nil, 254, nil, nil, - 66, 67, nil, nil, 68, nil, nil, nil, nil, nil, - 52, nil, nil, nil, nil, nil, nil, nil, nil, 251, - nil, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - nil, nil, 81, 82, 83, 85, 65, 92, 106, 107, - 71, 72, 46, 47, nil, 75, nil, 73, 74, 76, - 356, 357, 79, 80, nil, nil, nil, nil, nil, 84, - 351, 359, 115, 114, 116, 117, nil, nil, 255, nil, - nil, nil, nil, nil, nil, 53, nil, nil, 119, 118, - 120, 111, 64, 109, 108, 112, nil, 110, 121, 122, - nil, 104, 105, 49, 50, 48, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 246, nil, nil, 254, nil, - nil, 66, 67, nil, nil, 68, nil, nil, nil, nil, - nil, 52, nil, nil, nil, nil, nil, nil, nil, nil, - 251, nil, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, 81, 82, 83, 85, 65, 92, 106, - 107, 71, 72, 46, 47, nil, 75, nil, 73, 74, - 76, 356, 357, 79, 80, nil, nil, nil, nil, nil, - 84, 351, 359, 115, 114, 116, 117, nil, nil, 255, - nil, nil, nil, nil, nil, nil, 53, nil, nil, 119, - 118, 120, 111, 64, 109, 108, 112, nil, 110, 121, - 122, nil, 104, 105, 49, 50, 48, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 246, nil, nil, 254, - nil, nil, 66, 67, nil, nil, 68, nil, nil, nil, - nil, nil, 52, nil, nil, nil, nil, nil, nil, nil, - nil, 251, nil, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 81, 82, 83, 85, 65, 92, - 106, 107, 71, 72, 46, 47, nil, 75, nil, 73, - 74, 76, 356, 357, 79, 80, nil, nil, nil, nil, - nil, 84, 351, 359, 115, 114, 116, 117, nil, nil, - 255, nil, nil, nil, nil, nil, nil, 53, nil, nil, - 119, 118, 120, 111, 64, 109, 108, 112, nil, 110, - 121, 122, nil, 104, 105, 49, 50, 48, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 246, nil, nil, - 254, nil, nil, 66, 67, nil, nil, 68, nil, nil, - nil, nil, nil, 52, nil, nil, nil, nil, nil, nil, - nil, nil, 251, nil, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 81, 82, 83, 85, 65, - 92, 106, 107, 71, 72, 46, 47, nil, 75, nil, - 73, 74, 76, 35, 36, 79, 80, nil, nil, nil, - nil, nil, 84, 33, 32, 115, 114, 116, 117, nil, - nil, 23, nil, nil, nil, nil, nil, nil, 53, nil, - nil, 119, 118, 120, 111, 64, 109, 108, 112, nil, - 110, 121, 122, nil, 104, 105, 49, 50, 48, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 246, nil, - nil, 254, nil, nil, 66, 67, nil, nil, 68, nil, - nil, nil, nil, nil, 52, nil, nil, nil, nil, nil, - nil, nil, nil, 24, nil, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, 81, 82, 83, 85, - 65, 92, 106, 107, 71, 72, 46, 47, nil, 75, - nil, 73, 74, 76, 356, 357, 79, 80, nil, nil, - nil, nil, nil, 84, 351, 359, 115, 114, 116, 117, - nil, nil, 255, nil, nil, nil, nil, nil, nil, 53, - nil, nil, 119, 118, 120, 111, 64, 109, 108, 112, - nil, 110, 121, 122, nil, 104, 105, 49, 50, 48, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 246, - nil, nil, 254, nil, nil, 66, 67, nil, nil, 68, - nil, 326, nil, nil, nil, 52, nil, nil, nil, nil, - nil, nil, nil, nil, 251, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, 81, 82, 83, - 85, 65, 92, 106, 107, 71, 72, 46, 47, nil, - 75, nil, 73, 74, 76, 356, 357, 79, 80, nil, - nil, nil, nil, nil, 84, 351, 359, 115, 114, 116, - 117, nil, nil, 255, nil, nil, nil, nil, nil, nil, - 53, nil, nil, 119, 118, 120, 111, 64, 109, 108, - 112, 329, 110, 121, 122, nil, 104, 105, 49, 50, - 48, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 246, nil, nil, 254, nil, nil, 66, 67, nil, nil, - 68, nil, nil, nil, 323, nil, 52, nil, nil, 330, - nil, nil, nil, nil, nil, 251, nil, nil, nil, nil, - 102, 327, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, 81, 82, - 83, 85, 65, 92, 106, 107, 71, 72, 46, 47, - nil, 75, nil, 73, 74, 76, 356, 357, 79, 80, - nil, nil, nil, nil, nil, 84, 351, 359, 115, 114, - 116, 117, nil, nil, 255, nil, nil, nil, nil, nil, - nil, 53, nil, nil, 119, 118, 120, 111, 64, 109, - 108, 112, nil, 110, 121, 122, nil, 104, 105, 49, - 50, 48, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 246, nil, nil, 254, nil, nil, 66, 67, nil, - nil, 68, nil, nil, nil, nil, nil, 52, nil, nil, - nil, nil, nil, nil, nil, nil, 251, nil, nil, nil, - nil, 102, 90, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, 81, - 82, 83, 85, 65, 92, 106, 107, 71, 72, 46, - 47, nil, 75, nil, 73, 74, 76, 356, 357, 79, - 80, nil, nil, nil, nil, nil, 84, 351, 359, 115, - 114, 116, 117, nil, nil, 889, nil, nil, nil, nil, - nil, nil, 53, nil, nil, 119, 118, 120, 111, 64, - 109, 108, 112, nil, 110, 121, 122, nil, 104, 105, - 49, 50, 48, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 246, nil, nil, 254, nil, nil, 66, 67, - nil, nil, 68, nil, nil, nil, nil, nil, 52, nil, - nil, nil, nil, nil, nil, nil, nil, 251, nil, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - 81, 82, 83, 85, 65, 92, 106, 107, 71, 72, - 46, 47, nil, 75, nil, 73, 74, 76, 35, 36, - 79, 80, nil, nil, nil, nil, nil, 84, 33, 32, - 115, 114, 116, 117, nil, nil, 23, nil, nil, nil, - nil, nil, nil, 53, nil, nil, 119, 118, 120, 111, - 64, 109, 108, 112, nil, 110, 121, 122, nil, 104, - 105, 49, 50, 48, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 246, nil, nil, 254, nil, nil, 66, - 67, nil, nil, 68, nil, nil, nil, nil, nil, 52, - nil, nil, nil, nil, nil, nil, nil, nil, 24, nil, - nil, nil, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, 81, 82, 83, 85, 65, 92, 106, 107, 71, - 72, 46, 47, nil, 75, nil, 73, 74, 76, 35, - 36, 79, 80, nil, nil, nil, nil, nil, 84, 33, - 32, 115, 114, 116, 117, nil, nil, 255, nil, nil, - nil, nil, nil, nil, 53, nil, nil, 119, 118, 120, - 111, 64, 109, 108, 112, 329, 110, 121, 122, nil, - 104, 105, 49, 50, 48, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 246, nil, nil, 254, nil, nil, - 66, 67, nil, nil, 68, nil, 326, nil, 323, nil, - 52, nil, nil, 330, nil, nil, nil, nil, nil, 251, - nil, nil, nil, nil, 102, 327, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - nil, nil, 81, 82, 83, 85, 65, 92, 106, 107, - 71, 72, 46, 47, nil, 75, nil, 73, 74, 76, - 35, 36, 79, 80, nil, nil, nil, nil, nil, 84, - 33, 32, 115, 114, 116, 117, nil, nil, 23, nil, - nil, nil, nil, nil, nil, 53, nil, nil, 119, 118, - 120, 111, 64, 109, 108, 112, nil, 110, 121, 122, - nil, 104, 105, 49, 50, 48, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 246, nil, nil, 254, nil, - nil, 66, 67, nil, nil, 68, nil, nil, nil, nil, - nil, 52, nil, nil, nil, nil, nil, nil, nil, nil, - 24, nil, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, 81, 82, 83, 85, 65, 92, 106, - 107, 71, 72, 46, 47, nil, 75, nil, 73, 74, - 76, 35, 36, 79, 80, nil, nil, nil, nil, nil, - 84, 33, 32, 115, 114, 116, 117, nil, nil, 23, - nil, nil, nil, nil, nil, nil, 53, nil, nil, 119, - 118, 120, 111, 64, 109, 108, 112, nil, 110, 121, - 122, nil, 104, 105, 49, 50, 48, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 246, nil, nil, 254, - nil, nil, 66, 67, nil, nil, 68, nil, nil, nil, - nil, nil, 52, nil, nil, nil, nil, nil, nil, nil, - nil, 24, nil, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 81, 82, 83, 85, 65, 92, - 106, 107, 71, 72, 46, 47, nil, 75, nil, 73, - 74, 76, 356, 357, 79, 80, nil, nil, nil, nil, - nil, 84, 351, 359, 115, 114, 116, 117, nil, nil, - 255, nil, nil, nil, nil, nil, nil, 352, nil, nil, - 119, 118, 120, 111, 64, 109, 108, 112, nil, 110, - 121, 122, nil, 104, 105, nil, nil, 360, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 348, nil, nil, - 344, nil, nil, 66, 67, nil, nil, 68, nil, 343, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 81, 82, 83, 85, 65, - 92, 106, 107, 71, 72, nil, nil, nil, 75, nil, - 73, 74, 76, 356, 357, 79, 80, nil, nil, nil, - nil, nil, 84, 351, 359, 115, 114, 116, 117, nil, - nil, 255, nil, nil, nil, nil, nil, nil, 352, nil, - nil, 119, 118, 120, 111, 64, 109, 108, 112, nil, - 110, 121, 122, nil, 104, 105, nil, nil, 360, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 348, nil, - nil, 254, nil, nil, 66, 67, nil, nil, 68, nil, - nil, 494, nil, 491, 490, 489, 499, 492, nil, nil, - nil, nil, nil, nil, nil, nil, 502, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, 362, nil, 497, 85, - nil, 92, 106, 107, 81, 82, 83, nil, 65, 510, - 509, nil, 71, 72, 503, nil, nil, 75, nil, 73, - 74, 76, 356, 357, 79, 80, nil, nil, nil, nil, - nil, 84, 351, 359, 115, 114, 116, 117, nil, nil, - 255, nil, nil, nil, nil, nil, nil, 352, nil, nil, - 119, 118, 120, 111, 64, 109, 108, 112, nil, 110, - 121, 122, nil, 104, 105, nil, nil, 360, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 396, nil, nil, - 38, nil, nil, 66, 67, nil, nil, 68, nil, 40, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 81, 82, 83, 85, 65, - 92, 106, 107, 71, 72, nil, nil, nil, 75, nil, - 73, 74, 76, 356, 357, 79, 80, nil, nil, nil, - nil, nil, 84, 351, 359, 115, 114, 116, 117, nil, - nil, 255, nil, nil, nil, nil, nil, nil, 352, nil, - nil, 119, 118, 120, 401, 64, 109, 108, 402, nil, - 110, 121, 122, nil, 104, 105, nil, nil, 360, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 408, nil, nil, 403, nil, - nil, 254, nil, nil, 66, 67, nil, nil, 68, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, 81, 82, 83, 85, - 65, 92, 106, 107, 71, 72, nil, nil, nil, 75, - nil, 73, 74, 76, 356, 357, 79, 80, nil, nil, - nil, nil, nil, 84, 351, 359, 115, 114, 116, 117, - nil, nil, 255, nil, nil, nil, nil, nil, nil, 352, - nil, nil, 119, 118, 120, 401, 64, 109, 108, 402, - nil, 110, 121, 122, nil, 104, 105, nil, nil, 360, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 403, - nil, nil, 254, nil, nil, 66, 67, nil, nil, 68, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, 81, 82, 83, - 85, 65, 92, 106, 107, 71, 72, nil, nil, nil, - 75, nil, 73, 74, 76, 356, 357, 79, 80, nil, - nil, nil, nil, nil, 84, 351, 359, 115, 114, 116, - 117, nil, nil, 255, nil, nil, nil, nil, nil, nil, - 352, nil, nil, 119, 118, 120, 111, 64, 109, 108, - 112, nil, 110, 121, 122, nil, 104, 105, nil, nil, - 360, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 348, nil, nil, 254, nil, nil, 66, 67, nil, nil, - 68, nil, nil, 494, nil, 491, 490, 489, 499, 492, - nil, nil, nil, nil, nil, nil, nil, nil, 502, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, 592, nil, - 497, 85, nil, 92, 106, 107, 81, 82, 83, nil, - 65, 510, 509, nil, 71, 72, 503, nil, nil, 75, - nil, 73, 74, 76, 356, 357, 79, 80, nil, nil, - nil, nil, nil, 84, 351, 359, 115, 114, 116, 117, - nil, nil, 255, nil, nil, nil, nil, nil, nil, 352, - nil, nil, 119, 118, 120, 111, 64, 109, 108, 112, - nil, 110, 121, 122, nil, 104, 105, nil, nil, 360, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 348, - nil, nil, 344, nil, nil, 66, 67, nil, nil, 68, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, 81, 82, 83, - 85, 65, 92, 106, 107, 71, 72, nil, nil, nil, - 75, nil, 73, 74, 76, 356, 357, 79, 80, nil, - nil, nil, nil, nil, 84, 351, 359, 115, 114, 116, - 117, nil, nil, 255, nil, nil, nil, nil, nil, nil, - 352, nil, nil, 119, 118, 120, 111, 64, 109, 108, - 112, nil, 110, 121, 122, nil, 104, 105, nil, nil, - 360, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 348, nil, nil, 344, nil, nil, 66, 67, nil, nil, - 68, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, 81, 82, - 83, 85, 65, 92, 106, 107, 71, 72, nil, nil, - nil, 75, nil, 73, 74, 76, 356, 357, 79, 80, - nil, nil, nil, nil, nil, 84, 351, 359, 115, 114, - 116, 117, nil, nil, 255, nil, nil, nil, nil, nil, - nil, 352, nil, nil, 119, 118, 120, 111, 64, 109, - 108, 112, nil, 110, 121, 122, nil, 104, 105, nil, - nil, 360, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 348, nil, nil, 344, nil, nil, 66, 67, nil, - nil, 68, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 102, 90, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, 81, - 82, 83, 85, 65, 92, 106, 107, 71, 72, nil, - nil, nil, 75, nil, 73, 74, 76, 356, 357, 79, - 80, nil, nil, nil, nil, nil, 84, 351, 359, 115, - 114, 116, 117, nil, nil, 255, nil, nil, nil, nil, - nil, nil, 352, nil, nil, 119, 118, 120, 111, 64, - 109, 108, 112, nil, 110, 121, 122, nil, 104, 105, - nil, nil, 360, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 348, nil, nil, 344, nil, nil, 66, 67, - nil, nil, 68, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - 81, 82, 83, 85, 65, 92, 106, 107, 71, 72, - nil, nil, nil, 75, nil, 73, 74, 76, 356, 357, - 79, 80, nil, nil, nil, nil, nil, 84, 351, 359, - 115, 114, 116, 117, nil, nil, 255, nil, nil, nil, - nil, nil, nil, 352, nil, nil, 119, 118, 120, 111, - 64, 109, 108, 112, nil, 110, 121, 122, nil, 104, - 105, nil, nil, 360, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 348, nil, nil, 344, nil, nil, 66, - 67, nil, nil, 68, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, 81, 82, 83, 85, 65, 92, 106, 107, 71, - 72, nil, nil, nil, 75, nil, 73, 74, 76, 356, - 357, 79, 80, nil, nil, nil, nil, nil, 84, 351, - 359, 115, 114, 116, 117, nil, nil, 255, nil, nil, - nil, nil, nil, nil, 352, nil, nil, 119, 118, 120, - 111, 64, 109, 108, 112, nil, 110, 121, 122, nil, - 104, 105, nil, nil, 360, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 1054, nil, nil, 254, nil, nil, - 66, 67, nil, nil, 68, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - nil, nil, 81, 82, 83, 85, 65, 92, 106, 107, - 71, 72, nil, nil, nil, 75, nil, 73, 74, 76, - 356, 357, 79, 80, nil, nil, nil, nil, nil, 84, - 351, 359, 115, 114, 116, 117, nil, nil, 255, nil, - nil, nil, nil, nil, nil, 352, nil, nil, 119, 118, - 120, 111, 64, 109, 108, 112, nil, 110, 121, 122, - nil, 104, 105, nil, nil, 360, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 1112, nil, nil, 254, nil, - nil, 66, 67, nil, nil, 68, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, 81, 82, 83, 85, 65, 92, 106, - 107, 71, 72, nil, nil, nil, 75, nil, 73, 74, - 76, 356, 357, 79, 80, nil, nil, nil, nil, nil, - 84, 351, 359, 115, 114, 116, 117, nil, nil, 255, - nil, nil, nil, nil, nil, nil, 352, nil, nil, 119, - 118, 120, 111, 64, 109, 108, 112, nil, 110, 121, - 122, nil, 104, 105, nil, nil, 360, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 1112, nil, nil, 254, - nil, nil, 66, 67, nil, nil, 68, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, nil, nil, nil, 85, nil, 92, - 106, 107, 186, 197, 187, 210, 183, 203, 193, 192, - 213, 214, 208, 191, 190, 185, 211, 215, 216, 195, - 184, 198, 202, 204, 196, 189, nil, nil, nil, 205, - 212, 207, 206, 199, 209, 194, 182, 201, 200, nil, - nil, nil, nil, nil, 181, 188, 179, 180, 176, 177, - 178, 139, 141, 138, nil, 140, nil, nil, nil, nil, - nil, nil, nil, 170, 171, nil, 167, 149, 150, 151, - 158, 155, 157, nil, nil, 152, 153, nil, nil, nil, - 172, 173, 159, 160, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 164, 163, nil, - 148, 169, 166, 165, 174, 161, 162, 156, 154, 146, - 168, 147, nil, nil, 175, 102, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 101, - 186, 197, 187, 210, 183, 203, 193, 192, 213, 214, - 208, 191, 190, 185, 211, 215, 216, 195, 184, 198, - 202, 204, 196, 189, nil, nil, nil, 205, 212, 207, - 206, 199, 209, 194, 182, 201, 200, nil, nil, nil, - nil, nil, 181, 188, 179, 180, 176, 177, 178, 139, - 141, nil, nil, 140, nil, nil, nil, nil, nil, nil, - nil, 170, 171, nil, 167, 149, 150, 151, 158, 155, - 157, nil, nil, 152, 153, nil, nil, nil, 172, 173, - 159, 160, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 164, 163, nil, 148, 169, - 166, 165, 174, 161, 162, 156, 154, 146, 168, 147, - nil, nil, 175, 102, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 101, 186, 197, - 187, 210, 183, 203, 193, 192, 213, 214, 208, 191, - 190, 185, 211, 215, 216, 195, 184, 198, 202, 204, - 196, 189, nil, nil, nil, 205, 212, 207, 206, 199, - 209, 194, 182, 201, 200, nil, nil, nil, nil, nil, - 181, 188, 179, 180, 176, 177, 178, 139, 141, nil, - nil, 140, nil, nil, nil, nil, nil, nil, nil, 170, - 171, nil, 167, 149, 150, 151, 158, 155, 157, nil, - nil, 152, 153, nil, nil, nil, 172, 173, 159, 160, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 164, 163, nil, 148, 169, 166, 165, - 174, 161, 162, 156, 154, 146, 168, 147, nil, nil, - 175, 102, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 101, 186, 197, 187, 210, - 183, 203, 193, 192, 213, 214, 208, 191, 190, 185, - 211, 215, 216, 195, 184, 198, 202, 204, 196, 189, - nil, nil, nil, 205, 212, 207, 206, 199, 209, 194, - 182, 201, 200, nil, nil, nil, nil, nil, 181, 188, - 179, 180, 176, 177, 178, 139, 141, nil, nil, 140, - nil, nil, nil, nil, nil, nil, nil, 170, 171, nil, - 167, 149, 150, 151, 158, 155, 157, nil, nil, 152, - 153, nil, nil, nil, 172, 173, 159, 160, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 164, 163, nil, 148, 169, 166, 165, 174, 161, - 162, 156, 154, 146, 168, 147, nil, nil, 175, 102, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 101, 186, 197, 187, 210, 183, 203, - 193, 192, 213, 214, 208, 191, 190, 185, 211, 215, - 216, 195, 184, 198, 202, 204, 196, 189, nil, nil, - nil, 205, 212, 207, 295, 294, 296, 293, 182, 201, - 200, nil, nil, nil, nil, nil, 181, 188, 179, 180, - 290, 291, 292, 288, 141, 109, 108, 289, nil, 110, - nil, nil, nil, nil, nil, 170, 171, nil, 167, 149, - 150, 151, 158, 155, 157, nil, nil, 152, 153, nil, - nil, nil, 172, 173, 159, 160, nil, nil, nil, nil, - nil, 300, nil, nil, nil, nil, nil, nil, nil, 164, - 163, nil, 148, 169, 166, 165, 174, 161, 162, 156, - 154, 146, 168, 147, nil, nil, 175, 186, 197, 187, - 210, 183, 203, 193, 192, 213, 214, 208, 191, 190, - 185, 211, 215, 216, 195, 184, 198, 202, 204, 196, - 189, nil, nil, nil, 205, 212, 207, 206, 199, 209, - 194, 182, 201, 200, nil, nil, nil, nil, nil, 181, - 188, 179, 180, 176, 177, 178, 139, 141, nil, nil, - 140, nil, nil, nil, nil, nil, nil, nil, 170, 171, - nil, 167, 149, 150, 151, 158, 155, 157, nil, nil, - 152, 153, nil, nil, nil, 172, 173, 159, 160, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 164, 163, nil, 148, 169, 166, 165, 174, - 161, 162, 156, 154, 146, 168, 147, nil, nil, 175, - 115, 114, 116, 117, nil, nil, 494, nil, 491, 490, - 489, 499, 492, nil, nil, nil, 119, 118, 120, 1009, - nil, 502, nil, 1012, 989, nil, nil, nil, nil, 104, - 105, nil, nil, 360, 502, nil, nil, nil, nil, nil, - nil, nil, nil, 497, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 1011, 510, 509, 982, nil, nil, 503, - 980, nil, nil, 981, nil, 984, nil, nil, nil, nil, - nil, nil, 503, nil, nil, nil, nil, nil, nil, 1010, - nil, nil, nil, 102, 990, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, 115, 114, - 116, 117, nil, nil, 85, nil, 92, 106, 107, nil, - nil, 997, 998, nil, 119, 118, 120, 1009, nil, nil, - nil, 1012, 989, nil, nil, nil, nil, 104, 105, nil, - nil, 360, 502, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 1011, nil, nil, 982, nil, nil, nil, 980, nil, - nil, 981, nil, 984, nil, nil, nil, nil, nil, nil, - 503, nil, nil, nil, nil, nil, nil, 1010, nil, nil, - nil, 102, 990, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, 115, 114, 116, 117, - nil, nil, 85, nil, 92, 106, 107, nil, nil, 997, - 998, nil, 119, 118, 120, 1009, nil, nil, nil, 1012, - nil, nil, nil, nil, nil, 104, 105, nil, nil, 360, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 1011, - nil, nil, 982, nil, nil, nil, 980, nil, nil, 981, - nil, 984, nil, nil, nil, nil, nil, nil, 494, nil, - 491, 490, 489, 499, 492, 1010, nil, nil, nil, 102, - 90, 93, 94, 502, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, 241, 115, 114, 116, 117, nil, - 85, nil, 92, 106, 107, 497, nil, 997, 998, nil, - nil, 119, 118, 120, 1009, nil, 510, 509, 1012, nil, - nil, 503, nil, nil, 104, 105, nil, nil, 360, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 1011, nil, - nil, 982, nil, nil, nil, 980, nil, nil, 981, nil, - nil, 488, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 1010, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, 115, 114, 116, 117, nil, nil, 85, - nil, 92, 106, 107, nil, nil, 997, 998, nil, 119, - 118, 120, 1009, nil, nil, 494, 1012, 491, 490, 489, - 499, 492, 104, 105, nil, nil, 360, nil, nil, nil, - 502, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 1011, nil, nil, 982, - nil, nil, 497, 980, nil, nil, 981, nil, 984, nil, - nil, 507, 506, 510, 509, nil, nil, nil, 503, nil, - nil, nil, 1010, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, 115, 114, 116, 117, nil, nil, 85, nil, 92, - 106, 107, nil, nil, 997, 998, nil, 119, 118, 120, - 1009, nil, nil, 494, 1012, 491, 490, 489, 499, 492, - 104, 105, nil, nil, 360, nil, nil, nil, 502, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 1011, nil, nil, 982, nil, nil, - 497, 980, nil, nil, 981, nil, nil, nil, nil, 507, - 506, 510, 509, nil, nil, nil, 503, nil, nil, nil, - 1010, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, 115, - 114, 116, 117, nil, nil, 85, nil, 92, 106, 107, - nil, nil, 997, 998, nil, 119, 118, 120, 1009, nil, - nil, nil, 1012, 989, nil, nil, nil, nil, 104, 105, - nil, nil, 360, 502, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 1011, nil, nil, 982, nil, nil, nil, 980, - nil, nil, 981, nil, 984, nil, nil, nil, nil, nil, - nil, 503, nil, nil, nil, nil, nil, nil, 1010, nil, - nil, nil, 102, 990, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, 115, 114, 116, - 117, nil, nil, 85, nil, 92, 106, 107, nil, nil, - 997, 998, nil, 119, 118, 120, 1009, nil, nil, nil, - 1012, 989, nil, nil, nil, nil, 104, 105, nil, nil, - 360, 502, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 1011, nil, nil, 982, nil, nil, nil, 980, nil, nil, - 981, nil, 984, nil, nil, nil, nil, nil, nil, 503, - nil, nil, nil, nil, nil, nil, 1010, nil, nil, nil, - 102, 990, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, 115, 114, 116, 117, nil, - nil, 85, nil, 92, 106, 107, nil, nil, 997, 998, - nil, 119, 118, 120, 1009, nil, nil, 494, 1012, 491, - 490, 489, 499, 492, 104, 105, nil, nil, 360, nil, - nil, nil, 502, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 1011, nil, - nil, 982, nil, nil, 497, 980, nil, nil, 981, nil, - 984, nil, nil, nil, nil, 510, 509, nil, nil, nil, - 503, nil, nil, nil, 1010, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, 115, 114, 116, 117, nil, nil, 85, - nil, 92, 106, 107, nil, nil, 997, 998, nil, 119, - 118, 120, 1009, nil, nil, nil, 1012, nil, nil, nil, - nil, nil, 104, 105, nil, nil, 360, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 1011, nil, nil, 982, - nil, nil, nil, 980, nil, nil, 981, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 1010, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, 115, 114, 116, 117, nil, nil, 85, nil, 92, - 106, 107, nil, nil, 997, 998, nil, 119, 118, 120, - 1009, nil, nil, nil, 1012, nil, nil, nil, nil, nil, - 104, 105, nil, nil, 360, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 1011, nil, nil, 982, nil, nil, - nil, 980, nil, nil, 981, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 1010, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, 115, - 114, 116, 117, nil, nil, 85, nil, 92, 106, 107, - nil, nil, 997, 998, nil, 119, 118, 120, 1009, nil, - nil, nil, 1012, 989, nil, nil, nil, nil, 104, 105, - nil, nil, 360, 502, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 1011, nil, nil, 982, nil, nil, nil, 980, - nil, nil, 981, nil, 984, nil, nil, nil, nil, nil, - nil, 503, nil, nil, nil, nil, nil, nil, 1010, nil, - nil, nil, 102, 990, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, 115, 114, 116, - 117, nil, nil, 85, nil, 92, 106, 107, nil, nil, - 997, 998, nil, 119, 118, 120, 1009, nil, nil, nil, - 1012, nil, nil, nil, nil, nil, 104, 105, nil, nil, - 360, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 1011, nil, nil, 982, nil, nil, nil, 980, nil, nil, - 981, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 1010, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, 115, 114, 116, 117, nil, - nil, 85, nil, 92, 106, 107, nil, nil, 997, 998, - nil, 119, 118, 120, 1009, nil, nil, nil, 1012, nil, - nil, nil, nil, nil, 104, 105, nil, nil, 360, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 1011, nil, - nil, 982, nil, nil, nil, 980, nil, nil, 981, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 1010, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, 115, 114, 116, 117, nil, nil, 85, - nil, 92, 106, 107, nil, nil, 997, 998, nil, 119, - 118, 120, 1009, nil, nil, nil, 1012, nil, nil, nil, - nil, nil, 104, 105, nil, nil, 360, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 1011, nil, nil, 982, - nil, nil, nil, 980, nil, nil, 981, nil, 984, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 1010, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, 115, 114, 116, 117, nil, nil, 85, nil, 92, - 106, 107, nil, nil, 997, 998, nil, 119, 118, 120, - 1009, nil, nil, nil, 1012, nil, nil, nil, nil, nil, - 104, 105, nil, nil, 360, nil, nil, nil, nil, nil, - nil, nil, 115, 114, 116, 117, nil, nil, nil, nil, - nil, nil, nil, nil, 1011, nil, nil, 982, 119, 118, - 120, 980, nil, nil, 981, nil, nil, nil, nil, nil, - nil, 104, 105, nil, nil, 360, nil, nil, nil, nil, - 1010, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - nil, nil, nil, nil, nil, 85, nil, 92, 106, 107, - nil, nil, 997, 998, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - 115, 114, 116, 117, nil, nil, 85, nil, 92, 106, - 107, nil, nil, nil, nil, nil, 119, 118, 120, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 104, - 105, nil, nil, 360, 115, 114, 116, 117, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 119, 118, 120, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 104, 105, nil, nil, 360, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, nil, nil, nil, 85, nil, 92, 106, 107, nil, - nil, nil, nil, nil, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, 115, 114, 116, 117, nil, nil, 85, nil, - 92, 106, 107, nil, nil, nil, nil, nil, 119, 118, - 120, 494, nil, 491, 490, 489, 499, 492, nil, nil, - nil, 104, 105, nil, nil, 360, 502, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 497, nil, - nil, nil, nil, nil, nil, nil, nil, 507, 506, 510, - 509, nil, nil, nil, 503, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, nil, nil, nil, 85, nil, 92, 106, - 107, nil, nil, 494, 488, 491, 490, 489, 499, 492, - nil, 494, nil, 491, 490, 489, 499, 492, 502, nil, - nil, nil, nil, nil, nil, nil, 502, nil, 494, nil, - 491, 490, 489, 499, 492, nil, nil, nil, nil, nil, - 497, nil, nil, 502, nil, nil, nil, nil, 497, 507, - 506, 510, 509, nil, nil, nil, 503, 507, 506, 510, - 509, nil, nil, nil, 503, 497, nil, nil, nil, nil, - nil, nil, nil, nil, 507, 506, 510, 509, nil, nil, - 494, 503, 491, 490, 489, 499, 492, 494, nil, 491, - 490, 489, 499, 492, nil, 502, 488, nil, nil, nil, - nil, nil, 502, nil, 488, 494, nil, 491, 490, 489, - 499, 492, nil, nil, nil, nil, nil, 497, nil, nil, - 502, 488, nil, nil, 497, nil, nil, nil, 510, 509, - nil, nil, nil, 503, nil, 510, 509, nil, nil, nil, - 503, 494, 497, 491, 490, 489, 499, 492, nil, nil, - nil, nil, nil, 510, 509, nil, 502, nil, 503, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 488, nil, nil, nil, nil, 497, nil, - 488, nil, nil, nil, nil, nil, nil, nil, nil, 510, - 509, 459, 463, nil, 503, 460, nil, nil, 488, nil, - nil, nil, nil, 170, 171, nil, 167, 149, 150, 151, - 158, 155, 157, nil, nil, 152, 153, nil, nil, nil, - 172, 173, 159, 160, nil, nil, nil, nil, nil, 307, - nil, nil, nil, nil, 488, nil, nil, 164, 163, nil, - 148, 169, 166, 165, 174, 161, 162, 156, 154, 146, - 168, 147, 467, 471, 175, nil, 466, nil, nil, nil, - nil, nil, nil, nil, 170, 171, nil, 167, 149, 150, - 151, 158, 155, 157, nil, nil, 152, 153, nil, nil, - nil, 172, 173, 159, 160, nil, nil, nil, nil, nil, - 307, nil, nil, nil, nil, nil, nil, nil, 164, 163, - nil, 148, 169, 166, 165, 174, 161, 162, 156, 154, - 146, 168, 147, 560, 463, 175, nil, 561, nil, nil, - nil, nil, nil, nil, nil, 170, 171, nil, 167, 149, - 150, 151, 158, 155, 157, nil, nil, 152, 153, nil, - nil, nil, 172, 173, 159, 160, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 164, - 163, nil, 148, 169, 166, 165, 174, 161, 162, 156, - 154, 146, 168, 147, 735, 463, 175, nil, 736, nil, - nil, nil, nil, nil, nil, nil, 170, 171, nil, 167, - 149, 150, 151, 158, 155, 157, nil, nil, 152, 153, - nil, nil, nil, 172, 173, 159, 160, nil, nil, nil, - nil, nil, 307, nil, nil, nil, nil, nil, nil, nil, - 164, 163, nil, 148, 169, 166, 165, 174, 161, 162, - 156, 154, 146, 168, 147, 738, 471, 175, nil, 737, - nil, nil, nil, nil, nil, nil, nil, 170, 171, nil, - 167, 149, 150, 151, 158, 155, 157, nil, nil, 152, - 153, nil, nil, nil, 172, 173, 159, 160, nil, nil, - nil, nil, nil, 307, nil, nil, nil, nil, nil, nil, - nil, 164, 163, nil, 148, 169, 166, 165, 174, 161, - 162, 156, 154, 146, 168, 147, 773, 463, 175, nil, - 774, nil, nil, nil, nil, nil, nil, nil, 170, 171, - nil, 167, 149, 150, 151, 158, 155, 157, nil, nil, - 152, 153, nil, nil, nil, 172, 173, 159, 160, nil, - nil, nil, nil, nil, 307, nil, nil, nil, nil, nil, - nil, nil, 164, 163, nil, 148, 169, 166, 165, 174, - 161, 162, 156, 154, 146, 168, 147, 776, 471, 175, - nil, 777, nil, nil, nil, nil, nil, nil, nil, 170, - 171, nil, 167, 149, 150, 151, 158, 155, 157, nil, - nil, 152, 153, nil, nil, nil, 172, 173, 159, 160, - nil, nil, nil, nil, nil, 307, nil, nil, nil, nil, - nil, nil, nil, 164, 163, nil, 148, 169, 166, 165, - 174, 161, 162, 156, 154, 146, 168, 147, 735, 463, - 175, nil, 736, nil, nil, nil, nil, nil, nil, nil, - 170, 171, nil, 167, 149, 150, 151, 158, 155, 157, - nil, nil, 152, 153, nil, nil, nil, 172, 173, 159, - 160, nil, nil, nil, nil, nil, 307, nil, nil, nil, - nil, nil, nil, nil, 164, 163, nil, 148, 169, 166, - 165, 174, 161, 162, 156, 154, 146, 168, 147, 738, - 471, 175, nil, 782, nil, nil, nil, nil, nil, nil, - nil, 170, 171, nil, 167, 149, 150, 151, 158, 155, - 157, nil, nil, 152, 153, nil, nil, nil, 172, 173, - 159, 160, nil, nil, nil, nil, nil, 307, nil, nil, - nil, nil, nil, nil, nil, 164, 163, nil, 148, 169, - 166, 165, 174, 161, 162, 156, 154, 146, 168, 147, - 803, 463, 175, nil, 804, nil, nil, nil, nil, nil, - nil, nil, 170, 171, nil, 167, 149, 150, 151, 158, - 155, 157, nil, nil, 152, 153, nil, nil, nil, 172, - 173, 159, 160, nil, nil, nil, nil, nil, 307, nil, - nil, nil, nil, nil, nil, nil, 164, 163, nil, 148, - 169, 166, 165, 174, 161, 162, 156, 154, 146, 168, - 147, 805, 471, 175, nil, 806, nil, nil, nil, nil, - nil, nil, nil, 170, 171, nil, 167, 149, 150, 151, - 158, 155, 157, nil, nil, 152, 153, nil, nil, nil, - 172, 173, 159, 160, nil, nil, nil, nil, nil, 307, - nil, nil, nil, nil, nil, nil, nil, 164, 163, nil, - 148, 169, 166, 165, 174, 161, 162, 156, 154, 146, - 168, 147, 808, 471, 175, nil, 809, nil, nil, nil, - nil, nil, nil, nil, 170, 171, nil, 167, 149, 150, - 151, 158, 155, 157, nil, nil, 152, 153, nil, nil, - nil, 172, 173, 159, 160, nil, nil, nil, nil, nil, - 307, nil, nil, nil, nil, nil, nil, nil, 164, 163, - nil, 148, 169, 166, 165, 174, 161, 162, 156, 154, - 146, 168, 147, 560, 463, 175, nil, 561, nil, nil, - nil, nil, nil, nil, nil, 170, 171, nil, 167, 149, - 150, 151, 158, 155, 157, nil, nil, 152, 153, nil, - nil, nil, 172, 173, 159, 160, nil, nil, nil, nil, - nil, 307, nil, nil, nil, nil, nil, nil, nil, 164, - 163, nil, 148, 169, 166, 165, 174, 161, 162, 156, - 154, 146, 168, 147, 834, 463, 175, nil, 835, nil, - nil, nil, nil, nil, nil, nil, 170, 171, nil, 167, - 149, 150, 151, 158, 155, 157, nil, nil, 152, 153, - nil, nil, nil, 172, 173, 159, 160, nil, nil, nil, - nil, nil, 307, nil, nil, nil, nil, nil, nil, nil, - 164, 163, nil, 148, 169, 166, 165, 174, 161, 162, - 156, 154, 146, 168, 147, 837, 471, 175, nil, 836, - nil, nil, nil, nil, nil, nil, nil, 170, 171, nil, - 167, 149, 150, 151, 158, 155, 157, nil, nil, 152, - 153, nil, nil, nil, 172, 173, 159, 160, nil, nil, - nil, nil, nil, 307, nil, nil, nil, nil, nil, nil, - nil, 164, 163, nil, 148, 169, 166, 165, 174, 161, - 162, 156, 154, 146, 168, 147, 1189, 463, 175, nil, - 1190, nil, nil, nil, nil, nil, nil, nil, 170, 171, - nil, 167, 149, 150, 151, 158, 155, 157, nil, nil, - 152, 153, nil, nil, nil, 172, 173, 159, 160, nil, - nil, nil, nil, nil, 307, nil, nil, nil, nil, nil, - nil, nil, 164, 163, nil, 148, 169, 166, 165, 174, - 161, 162, 156, 154, 146, 168, 147, 1191, 471, 175, - nil, 1192, nil, nil, nil, nil, nil, nil, nil, 170, - 171, nil, 167, 149, 150, 151, 158, 155, 157, nil, - nil, 152, 153, nil, nil, nil, 172, 173, 159, 160, - nil, nil, nil, nil, nil, 307, nil, nil, nil, nil, - nil, nil, nil, 164, 163, nil, 148, 169, 166, 165, - 174, 161, 162, 156, 154, 146, 168, 147, 1219, 471, - 175, nil, 1218, nil, nil, nil, nil, nil, nil, nil, - 170, 171, nil, 167, 149, 150, 151, 158, 155, 157, - nil, nil, 152, 153, nil, nil, nil, 172, 173, 159, - 160, nil, nil, nil, nil, nil, 307, nil, nil, nil, - nil, nil, nil, nil, 164, 163, nil, 148, 169, 166, - 165, 174, 161, 162, 156, 154, 146, 168, 147, nil, - nil, 175 ] - -racc_action_check = [ - 111, 244, 69, 518, 518, 751, 393, 111, 111, 111, - 970, 385, 111, 111, 111, 18, 111, 31, 1158, 417, - 5, 23, 18, 386, 111, 5, 111, 111, 111, 557, - 557, 18, 478, 418, 394, 397, 111, 111, 801, 111, - 111, 111, 111, 111, 950, 1034, 1051, 1052, 1055, 1244, - 478, 635, 1, 333, 1129, 1071, 970, 245, 333, 1244, - 244, 1158, 23, 247, 803, 804, 111, 111, 111, 111, - 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, - 18, 31, 111, 111, 111, 417, 111, 111, 626, 69, - 111, 816, 751, 111, 111, 922, 111, 518, 111, 418, - 111, 1071, 111, 111, 31, 111, 111, 111, 111, 111, - 1181, 111, 112, 111, 1189, 393, 245, 911, 911, 112, - 112, 112, 247, 557, 112, 112, 112, 111, 112, 385, - 111, 111, 111, 111, 385, 111, 112, 111, 112, 112, - 112, 386, 111, 394, 397, 111, 386, 19, 112, 112, - 1190, 112, 112, 112, 112, 112, 801, 1191, 1225, 801, - 635, 801, 950, 1034, 1051, 1052, 1055, 950, 1034, 1051, - 1052, 1055, 1129, 803, 804, 805, 1066, 1129, 112, 112, - 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, - 112, 112, 626, 1192, 112, 112, 112, 626, 112, 112, - 816, 806, 112, 19, 922, 112, 112, 1038, 112, 1038, - 112, 911, 112, 20, 112, 112, 1066, 112, 112, 112, - 112, 112, 466, 112, 21, 112, 444, 524, 1181, 466, - 466, 466, 1189, 1181, 1191, 466, 466, 1189, 466, 112, - 805, 773, 112, 112, 112, 112, 466, 112, 29, 112, - 353, 1067, 629, 412, 112, 29, 3, 112, 466, 466, - 629, 466, 466, 466, 466, 466, 806, 768, 1190, 20, - 1192, 21, 774, 1190, 776, 1191, 1225, 580, 909, 768, - 1191, 1225, 9, 21, 805, 444, 524, 1067, 466, 466, - 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, - 466, 466, 12, 252, 466, 466, 466, 773, 466, 466, - 806, 1192, 466, 29, 353, 466, 1192, 412, 412, 412, - 466, 14, 466, 735, 466, 466, 1086, 466, 466, 466, - 466, 466, 253, 466, 466, 466, 15, 353, 774, 776, - 776, 580, 580, 580, 909, 17, 1078, 773, 698, 466, - 773, 88, 466, 466, 413, 466, 1078, 466, 580, 252, - 390, 467, 773, 88, 466, 390, 736, 466, 467, 467, - 467, 48, 48, 88, 467, 467, 27, 467, 774, 981, - 776, 774, 735, 776, 909, 467, 467, 909, 253, 698, - 1086, 1086, 1086, 774, 1078, 776, 981, 467, 467, 909, - 467, 467, 467, 467, 467, 377, 1078, 1086, 377, 234, - 54, 234, 234, 234, 234, 234, 287, 54, 413, 413, - 413, 360, 360, 287, 234, 736, 54, 467, 467, 467, - 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, - 467, 889, 43, 467, 467, 467, 234, 467, 467, 48, - 48, 467, 1204, 42, 467, 234, 234, 234, 234, 467, - 660, 467, 234, 467, 467, 414, 467, 467, 467, 467, - 467, 737, 467, 467, 467, 54, 834, 835, 737, 737, - 737, 287, 889, 737, 737, 737, 288, 737, 467, 43, - 45, 467, 467, 288, 467, 737, 467, 737, 737, 360, - 360, 43, 234, 467, 401, 53, 467, 737, 737, 991, - 737, 737, 737, 737, 737, 512, 1204, 1204, 16, 16, - 512, 662, 888, 415, 660, 660, 217, 991, 416, 414, - 414, 414, 230, 1204, 660, 834, 835, 737, 737, 737, - 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, - 737, 288, 44, 737, 737, 737, 401, 737, 737, 378, - 232, 737, 378, 401, 737, 737, 419, 737, 401, 737, - 937, 737, 401, 737, 737, 236, 737, 737, 737, 737, - 737, 888, 737, 737, 737, 662, 662, 415, 415, 415, - 289, 401, 416, 416, 416, 662, 243, 289, 737, 44, - 290, 737, 737, 243, 737, 246, 737, 290, 291, 364, - 738, 44, 243, 737, 248, 291, 737, 738, 738, 738, - 645, 401, 738, 738, 738, 645, 738, 51, 51, 937, - 419, 419, 419, 292, 738, 738, 738, 738, 738, 979, - 292, 403, 384, 384, 979, 403, 738, 738, 979, 738, - 738, 738, 738, 738, 1011, 289, 364, 926, 1011, 293, - 294, 243, 926, 51, 51, 290, 293, 294, 364, 381, - 249, 782, 381, 291, 782, 255, 738, 738, 738, 738, - 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, - 306, 1084, 738, 738, 738, 320, 738, 738, 292, 459, - 738, 1084, 295, 738, 738, 321, 738, 296, 738, 295, - 738, 324, 738, 738, 296, 738, 738, 738, 738, 738, - 836, 738, 738, 738, 293, 294, 138, 836, 836, 836, - 782, 138, 138, 836, 836, 337, 836, 738, 535, 1084, - 738, 738, 738, 738, 836, 738, 459, 738, 710, 710, - 1070, 1084, 738, 402, 1070, 738, 836, 836, 459, 836, - 836, 836, 836, 836, 338, 788, 340, 295, 788, 345, - 535, 707, 296, 341, 535, 535, 345, 460, 653, 653, - 342, 707, 653, 653, 653, 345, 836, 836, 836, 836, - 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, - 348, 682, 836, 836, 836, 402, 836, 836, 1121, 351, - 836, 1121, 402, 836, 707, 707, 352, 402, 836, 707, - 836, 402, 836, 836, 460, 836, 836, 836, 836, 836, - 354, 836, 836, 836, 345, 355, 460, 789, 789, 903, - 402, 903, 903, 903, 903, 903, 359, 836, 682, 361, - 836, 836, 808, 836, 903, 836, 368, 536, 370, 837, - 682, 373, 836, 994, 994, 836, 837, 837, 837, 1098, - 402, 379, 837, 837, 380, 837, 903, 1180, 1180, 1098, - 1182, 1182, 382, 837, 837, 903, 903, 903, 903, 536, - 346, 391, 903, 536, 536, 837, 837, 346, 837, 837, - 837, 837, 837, 392, 808, 396, 346, 398, 347, 407, - 427, 808, 1098, 1098, 433, 347, 808, 1098, 903, 435, - 808, 436, 437, 441, 347, 837, 837, 837, 837, 837, - 837, 837, 837, 837, 837, 837, 837, 837, 837, 808, - 445, 837, 837, 837, 455, 837, 837, 349, 457, 837, - 458, 468, 837, 474, 349, 346, 475, 837, 479, 837, - 480, 837, 837, 349, 837, 837, 837, 837, 837, 808, - 837, 837, 837, 347, 481, 365, 484, 485, 486, 496, - 395, 405, 365, 508, 511, 514, 837, 395, 405, 837, - 837, 365, 837, 520, 837, 443, 395, 405, 528, 529, - 537, 837, 443, 538, 837, 2, 2, 2, 2, 2, - 2, 443, 349, 539, 2, 2, 540, 565, 566, 2, - 567, 2, 2, 2, 2, 2, 2, 2, 25, 571, - 587, 588, 591, 2, 2, 2, 2, 2, 2, 2, - 365, 593, 2, 598, 602, 395, 405, 612, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 443, 2, 2, 2, 613, 2, 2, 2, 2, 2, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 597, 25, 25, 623, 627, 25, 25, 597, 2, - 628, 25, 2, 630, 657, 2, 2, 597, 665, 2, - 667, 2, 25, 675, 25, 2, 25, 25, 683, 25, - 25, 25, 25, 25, 2, 25, 688, 694, 696, 2, - 2, 2, 2, 638, 2, 2, 2, 2, 700, 701, - 638, 717, 2, 2, 722, 25, 723, 725, 730, 638, - 2, 731, 2, 2, 2, 739, 597, 2, 2, 38, - 38, 38, 38, 38, 38, 745, 748, 750, 38, 38, - 756, 757, 758, 38, 760, 38, 38, 38, 38, 38, - 38, 38, 8, 8, 8, 8, 8, 38, 38, 38, - 38, 38, 38, 38, 762, 770, 38, 772, 638, 775, - 778, 448, 38, 38, 38, 38, 38, 38, 38, 38, - 38, 38, 38, 38, 779, 38, 38, 38, 783, 38, - 38, 38, 38, 38, 448, 448, 448, 448, 448, 448, - 448, 448, 448, 448, 448, 777, 448, 448, 791, 797, - 448, 448, 777, 38, 798, 802, 38, 777, 811, 38, - 38, 777, 815, 38, 817, 38, 448, 824, 448, 38, - 448, 448, 826, 448, 448, 448, 448, 448, 38, 448, - 827, 828, 831, 38, 38, 38, 38, 1053, 38, 38, - 38, 38, 833, 842, 1053, 850, 38, 38, 857, 448, - 860, 448, 861, 1053, 38, 864, 38, 38, 38, 866, - 777, 38, 38, 66, 66, 66, 66, 66, 66, 869, - 870, 872, 66, 66, 873, 875, 879, 66, 896, 66, - 66, 66, 66, 66, 66, 66, 336, 336, 336, 336, - 336, 66, 66, 66, 66, 66, 66, 66, 899, 900, - 66, 908, 1053, 913, 916, 454, 66, 66, 66, 66, - 66, 66, 66, 66, 66, 66, 66, 66, 923, 66, - 66, 66, 925, 66, 66, 66, 66, 66, 454, 454, - 454, 454, 454, 454, 454, 454, 454, 454, 454, 809, - 454, 454, 932, 933, 454, 454, 809, 66, 934, 936, - 66, 809, 943, 66, 66, 809, 944, 66, 965, 66, - 454, 966, 454, 66, 454, 454, 975, 454, 454, 454, - 454, 454, 66, 454, 983, 984, 985, 66, 66, 66, - 66, 1111, 66, 66, 66, 66, 1018, 1019, 1111, 1021, - 66, 66, 1022, 454, 1023, 1025, 1026, 1111, 66, 1027, - 66, 66, 66, 1042, 809, 66, 66, 136, 136, 136, - 136, 136, 136, 1054, 1057, 1058, 136, 136, 1059, 1060, - 1064, 136, 1072, 136, 136, 136, 136, 136, 136, 136, - 585, 585, 585, 585, 585, 136, 136, 136, 136, 136, - 136, 136, 1073, 1077, 136, 1080, 1111, 1085, 1109, 1112, - 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, - 136, 136, 1119, 136, 136, 136, 1120, 136, 136, 136, - 136, 136, 318, 318, 318, 318, 318, 318, 318, 318, - 318, 318, 318, 1177, 318, 318, 1125, 1135, 318, 318, - 1177, 136, 1137, 1142, 136, 1143, 1144, 136, 136, 1177, - 1145, 136, 1146, 136, 318, 1147, 318, 136, 318, 318, - 1151, 318, 318, 318, 318, 318, 136, 318, 1152, 1153, - 1155, 136, 136, 136, 136, 1159, 136, 136, 136, 136, - 1166, 1167, 1170, 1171, 136, 136, 1172, 318, 1173, 1175, - 1188, 1193, 136, 1218, 136, 136, 136, 1219, 1177, 136, - 136, 219, 219, 219, 219, 219, 219, 1227, 1228, 1231, - 219, 219, 1232, 1233, 1234, 219, 1245, 219, 219, 219, - 219, 219, 219, 219, nil, nil, nil, nil, nil, 219, - 219, 219, 219, 219, 219, 219, nil, 724, 219, 724, - 724, 724, nil, 724, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, nil, 219, 219, 219, - nil, 219, 219, 219, 219, 219, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, nil, 554, 554, - nil, nil, 554, 554, nil, 219, nil, 1010, 219, 1010, - 1010, 219, 219, 1010, nil, 219, nil, 219, 554, nil, - 554, 219, 554, 554, nil, 554, 554, 554, 554, 554, - 219, 554, nil, nil, nil, 219, 219, 219, 219, nil, - 219, 219, 219, 219, 1010, nil, nil, nil, 219, 219, - 554, 554, nil, nil, nil, nil, 219, nil, 219, 219, - 219, nil, nil, 219, 219, 231, 231, 231, 231, 231, - 231, nil, nil, nil, 231, 231, nil, nil, nil, 231, - nil, 231, 231, 231, 231, 231, 231, 231, nil, nil, - nil, nil, nil, 231, 231, 231, 231, 231, 231, 231, - nil, 1045, 231, 1045, 1045, 1045, nil, 1045, 231, 231, - 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, - nil, 231, 231, 231, nil, 231, 231, 231, 231, 231, - 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, - 699, nil, 699, 699, nil, nil, 699, 699, nil, 231, - nil, nil, 231, nil, nil, 231, 231, nil, nil, 231, - nil, 231, 699, nil, 699, 231, 699, 699, nil, 699, - 699, 699, 699, 699, 231, 699, nil, nil, nil, 231, - 231, 231, 231, nil, 231, 231, 231, 231, nil, nil, - nil, nil, 231, 231, nil, 699, nil, nil, nil, nil, - 231, nil, 231, 231, 231, nil, nil, 231, 231, 237, - 237, 237, 237, 237, 237, nil, nil, nil, 237, 237, - nil, nil, nil, 237, nil, 237, 237, 237, 237, 237, - 237, 237, nil, nil, nil, nil, nil, 237, 237, 237, - 237, 237, 237, 237, nil, 1186, 237, 1186, 1186, 1186, - nil, 1186, 237, 237, 237, 237, 237, 237, 237, 237, - 237, 237, 237, 237, nil, 237, 237, 237, nil, 237, - 237, 237, 237, 237, 784, 784, 784, 784, 784, 784, - 784, 784, 784, 784, 784, nil, 784, 784, nil, nil, - 784, 784, nil, 237, nil, nil, 237, nil, nil, 237, - 237, nil, nil, 237, nil, 237, 784, nil, 784, 237, - 784, 784, nil, 784, 784, 784, 784, 784, 237, 784, - nil, nil, nil, 237, 237, 237, 237, nil, 237, 237, - 237, 237, nil, nil, nil, nil, 237, 237, nil, 784, - nil, nil, nil, nil, 237, nil, 237, 237, 237, nil, - nil, 237, 237, 254, 254, 254, 254, 254, 254, nil, - nil, nil, 254, 254, nil, nil, nil, 254, nil, 254, - 254, 254, 254, 254, 254, 254, nil, nil, nil, nil, - nil, 254, 254, 254, 254, 254, 254, 254, nil, nil, - 254, nil, nil, nil, nil, nil, 254, 254, 254, 254, - 254, 254, 254, 254, 254, 254, 254, 254, nil, 254, - 254, 254, nil, 254, 254, 254, 254, 254, 839, 839, - 839, 839, 839, 839, 839, 839, 839, 839, 839, nil, - 839, 839, nil, nil, 839, 839, nil, 254, nil, nil, - 254, nil, nil, 254, 254, nil, nil, 254, nil, 254, - 839, nil, 839, 254, 839, 839, nil, 839, 839, 839, - 839, 839, 254, 839, nil, nil, nil, 254, 254, 254, - 254, nil, 254, 254, 254, 254, nil, nil, nil, nil, - 254, 254, nil, 839, nil, nil, nil, nil, 254, nil, - 254, 254, 254, nil, nil, 254, 254, 339, 339, 339, - 339, 339, 339, nil, nil, nil, 339, 339, nil, nil, - nil, 339, nil, 339, 339, 339, 339, 339, 339, 339, - nil, nil, nil, nil, nil, 339, 339, 339, 339, 339, - 339, 339, nil, nil, 339, nil, nil, nil, nil, nil, - 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - 339, 339, nil, 339, 339, 339, nil, 339, 339, 339, - 339, 339, 942, 942, 942, 942, 942, 942, 942, 942, - 942, 942, 942, nil, 942, 942, nil, nil, 942, 942, - nil, 339, nil, nil, 339, nil, nil, 339, 339, nil, - nil, 339, nil, 339, 942, nil, 942, 339, 942, 942, - nil, 942, 942, 942, 942, 942, 339, 942, nil, nil, - nil, 339, 339, 339, 339, nil, 339, 339, 339, 339, - nil, nil, nil, nil, 339, 339, nil, 942, nil, nil, - nil, nil, 339, nil, 339, 339, 339, nil, nil, 339, - 339, 344, 344, 344, 344, 344, 344, nil, nil, nil, - 344, 344, nil, nil, nil, 344, nil, 344, 344, 344, - 344, 344, 344, 344, nil, nil, nil, nil, nil, 344, - 344, 344, 344, 344, 344, 344, nil, nil, 344, nil, - nil, nil, nil, nil, 344, 344, 344, 344, 344, 344, - 344, 344, 344, 344, 344, 344, nil, 344, 344, 344, - nil, 344, 344, 344, 344, 344, 945, 945, 945, 945, - 945, 945, 945, 945, 945, 945, 945, nil, 945, 945, - nil, nil, 945, 945, nil, 344, nil, nil, 344, nil, - nil, 344, 344, nil, nil, 344, nil, 344, 945, nil, - 945, 344, 945, 945, nil, 945, 945, 945, 945, 945, - 344, 945, nil, nil, nil, 344, 344, 344, 344, nil, - 344, 344, 344, 344, nil, nil, nil, nil, 344, 344, - nil, 945, nil, nil, nil, nil, 344, nil, 344, 344, - 344, nil, nil, 344, 344, 374, 374, 374, 374, 374, - 374, nil, nil, nil, 374, 374, nil, nil, nil, 374, - nil, 374, 374, 374, 374, 374, 374, 374, nil, nil, - nil, nil, nil, 374, 374, 374, 374, 374, 374, 374, - nil, nil, 374, nil, nil, nil, nil, nil, 374, 374, - 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, - nil, 374, 374, 374, nil, 374, 374, 374, 374, 374, - 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, - 1014, nil, 1014, 1014, nil, nil, 1014, 1014, nil, 374, - nil, nil, 374, nil, nil, 374, 374, nil, nil, 374, - nil, 374, 1014, nil, 1014, 374, 1014, 1014, nil, 1014, - 1014, 1014, 1014, 1014, 374, 1014, nil, nil, nil, 374, - 374, 374, 374, nil, 374, 374, 374, 374, nil, nil, - nil, nil, 374, 374, nil, 1014, nil, nil, nil, nil, - 374, nil, 374, 374, 374, nil, nil, 374, 374, 388, - 388, 388, 388, 388, 388, nil, nil, nil, 388, 388, - nil, nil, nil, 388, nil, 388, 388, 388, 388, 388, - 388, 388, nil, nil, nil, nil, nil, 388, 388, 388, - 388, 388, 388, 388, nil, 497, 388, 497, 497, 497, - nil, 497, 388, 388, 388, 388, 388, 388, 388, 388, - 388, 388, 388, 388, nil, 388, 388, 388, nil, 388, - 388, 388, 388, 388, 720, nil, 720, 720, 720, nil, - 720, nil, 497, nil, 881, nil, 881, 881, 881, nil, - 881, 497, nil, 388, nil, nil, 388, nil, nil, 388, - 388, nil, nil, 388, 880, 388, 880, 880, 880, 388, - 880, 720, nil, nil, nil, nil, nil, nil, 388, nil, - 720, 881, nil, 388, 388, 388, 388, nil, 388, 388, - 388, 388, nil, nil, nil, nil, 388, 388, nil, nil, - nil, 880, nil, nil, 388, nil, 388, 388, 388, nil, - 880, 388, 388, 389, 389, 389, 389, 389, 389, nil, - nil, nil, 389, 389, nil, nil, nil, 389, nil, 389, - 389, 389, 389, 389, 389, 389, nil, nil, nil, nil, - nil, 389, 389, 389, 389, 389, 389, 389, nil, nil, - 389, nil, nil, nil, nil, nil, 389, 389, 389, 389, - 389, 389, 389, 389, 389, 389, 389, 389, nil, 389, - 389, 389, nil, 389, 389, 389, 389, 389, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, nil, - 366, 366, nil, nil, 366, 366, nil, 389, nil, nil, - 389, nil, nil, 389, 389, nil, 550, 389, nil, 389, - 366, nil, 366, 389, 366, 366, nil, 366, 366, 366, - 366, 366, 389, 366, nil, nil, nil, 389, 389, 389, - 389, nil, 389, 389, 389, 389, nil, nil, 550, nil, - 389, 389, 550, 550, nil, 550, 550, nil, 389, nil, - 389, 389, 389, nil, nil, 389, 389, 622, 622, 622, - 622, 622, 622, nil, nil, nil, 622, 622, nil, nil, - nil, 622, nil, 622, 622, 622, 622, 622, 622, 622, - nil, nil, nil, nil, nil, 622, 622, 622, 622, 622, - 622, 622, nil, nil, 622, nil, nil, nil, nil, nil, - 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, - 622, 622, nil, 622, 622, 622, nil, 622, 622, 622, - 622, 622, 367, 367, 367, 367, 367, 367, 367, 367, - 367, 367, 367, nil, 367, 367, nil, nil, 367, 367, - nil, 622, nil, nil, 622, nil, nil, 622, 622, nil, - 551, 622, nil, 622, 367, nil, 367, 622, 367, 367, - nil, 367, 367, 367, 367, 367, 622, 367, nil, nil, - nil, 622, 622, 622, 622, nil, 622, 622, 622, 622, - nil, nil, 551, nil, 622, 622, 551, 551, nil, 551, - 551, nil, 622, nil, 622, 622, 622, nil, nil, 622, - 622, 625, 625, 625, 625, 625, 625, nil, nil, nil, - 625, 625, nil, nil, nil, 625, nil, 625, 625, 625, - 625, 625, 625, 625, nil, nil, nil, nil, nil, 625, - 625, 625, 625, 625, 625, 625, nil, nil, 625, nil, - nil, nil, nil, nil, 625, 625, 625, 625, 625, 625, - 625, 625, 625, 625, 625, 625, nil, 625, 625, 625, - nil, 625, 625, 625, 625, 625, 533, 533, 533, 533, - 533, 533, 533, 533, 533, 533, 533, nil, 533, 533, - nil, nil, 533, 533, nil, 625, nil, nil, 625, nil, - nil, 625, 625, nil, nil, 625, nil, 625, 533, nil, - 533, 625, 533, 533, nil, 533, 533, 533, 533, 533, - 625, 533, nil, nil, nil, 625, 625, 625, 625, nil, - 625, 625, 625, 625, nil, nil, nil, nil, 625, 625, - nil, 1061, nil, 1061, 1061, 1061, 625, 1061, 625, 625, - 625, nil, nil, 625, 625, 646, 646, 646, 646, 646, - 646, nil, nil, nil, 646, 646, nil, nil, nil, 646, - nil, 646, 646, 646, 646, 646, 646, 646, 1061, nil, - nil, nil, nil, 646, 646, 646, 646, 646, 646, 646, - nil, nil, 646, nil, nil, nil, nil, nil, 646, 646, - 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, - nil, 646, 646, 646, nil, 646, 646, 646, 646, 646, - 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, - 534, nil, 534, 534, nil, nil, 534, 534, nil, 646, - nil, nil, 646, nil, nil, 646, 646, nil, nil, 646, - nil, 646, 534, nil, 534, 646, 534, 534, nil, 534, - 534, 534, 534, 534, 646, 534, nil, nil, nil, 646, - 646, 646, 646, nil, 646, 646, 646, 646, nil, nil, - nil, nil, 646, 646, nil, 1062, nil, 1062, 1062, 1062, - 646, 1062, 646, 646, 646, nil, nil, 646, 646, 807, - 807, 807, 807, 807, 807, nil, nil, nil, 807, 807, - nil, nil, nil, 807, nil, 807, 807, 807, 807, 807, - 807, 807, 1062, nil, nil, nil, nil, 807, 807, 807, - 807, 807, 807, 807, nil, nil, 807, nil, nil, nil, - nil, nil, 807, 807, 807, 807, 807, 807, 807, 807, - 807, 807, 807, 807, nil, 807, 807, 807, nil, 807, - 807, 807, 807, 807, 544, 544, 544, 544, 544, 544, - 544, nil, nil, 544, 544, nil, nil, nil, nil, nil, - 544, 544, nil, 807, nil, nil, 807, nil, nil, 807, - 807, nil, nil, 807, nil, 807, 544, nil, 544, 807, - 544, 544, nil, 544, 544, 544, 544, 544, 807, 544, - nil, nil, nil, 807, 807, 807, 807, nil, 807, 807, - 807, 807, nil, nil, nil, nil, 807, 807, nil, nil, - nil, nil, nil, nil, 807, nil, 807, 807, 807, nil, - nil, 807, 807, 812, 812, 812, 812, 812, 812, nil, - nil, nil, 812, 812, nil, nil, nil, 812, nil, 812, - 812, 812, 812, 812, 812, 812, nil, nil, nil, nil, - nil, 812, 812, 812, 812, 812, 812, 812, nil, nil, - 812, nil, nil, nil, nil, nil, 812, 812, 812, 812, - 812, 812, 812, 812, 812, 812, 812, 812, nil, 812, - 812, 812, nil, 812, 812, 812, 812, 812, 545, 545, - 545, 545, 545, 545, 545, nil, nil, 545, 545, nil, - nil, nil, nil, nil, 545, 545, nil, 812, nil, nil, - 812, nil, nil, 812, 812, nil, nil, 812, nil, 812, - 545, nil, 545, 812, 545, 545, nil, 545, 545, 545, - 545, 545, 812, 545, nil, nil, nil, 812, 812, 812, - 812, nil, 812, 812, 812, 812, nil, nil, nil, nil, - 812, 812, nil, nil, nil, nil, nil, nil, 812, nil, - 812, 812, 812, nil, nil, 812, 812, 821, 821, 821, - 821, 821, 821, nil, nil, nil, 821, 821, nil, nil, - nil, 821, nil, 821, 821, 821, 821, 821, 821, 821, - nil, nil, nil, nil, nil, 821, 821, 821, 821, 821, - 821, 821, nil, nil, 821, nil, nil, nil, nil, nil, - 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, - 821, 821, nil, 821, 821, 821, nil, 821, 821, 821, - 821, 821, 546, 546, 546, 546, 546, 546, 546, nil, - nil, 546, 546, nil, nil, nil, nil, nil, 546, 546, - nil, 821, nil, nil, 821, nil, nil, 821, 821, nil, - nil, 821, nil, 821, 546, nil, 546, 821, 546, 546, - nil, 546, 546, 546, 546, 546, 821, 546, nil, nil, - nil, 821, 821, 821, 821, nil, 821, 821, 821, 821, - nil, nil, nil, nil, 821, 821, nil, nil, nil, nil, - nil, nil, 821, nil, 821, 821, 821, nil, nil, 821, - 821, 859, 859, 859, 859, 859, 859, nil, nil, nil, - 859, 859, nil, nil, nil, 859, nil, 859, 859, 859, - 859, 859, 859, 859, nil, nil, nil, nil, nil, 859, - 859, 859, 859, 859, 859, 859, nil, nil, 859, nil, - nil, nil, nil, nil, 859, 859, 859, 859, 859, 859, - 859, 859, 859, 859, 859, 859, nil, 859, 859, 859, - nil, 859, 859, 859, 859, 859, 547, 547, 547, 547, - 547, 547, 547, nil, nil, 547, 547, nil, nil, nil, - nil, nil, 547, 547, nil, 859, nil, nil, 859, nil, - nil, 859, 859, nil, nil, 859, nil, 859, 547, nil, - 547, 859, 547, 547, nil, 547, 547, 547, 547, 547, - 859, 547, nil, nil, nil, 859, 859, 859, 859, nil, - 859, 859, 859, 859, nil, nil, nil, nil, 859, 859, - nil, nil, nil, nil, nil, nil, 859, nil, 859, 859, - 859, nil, nil, 859, 859, 904, 904, 904, 904, 904, - 904, nil, nil, nil, 904, 904, nil, nil, nil, 904, - nil, 904, 904, 904, 904, 904, 904, 904, nil, nil, - nil, nil, nil, 904, 904, 904, 904, 904, 904, 904, - nil, nil, 904, nil, nil, nil, nil, nil, 904, 904, - 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, - nil, 904, 904, 904, nil, 904, 904, 904, 904, 904, - 548, 548, 548, 548, 548, 548, 548, nil, nil, 548, - 548, nil, nil, nil, nil, nil, 548, 548, nil, 904, - nil, nil, 904, nil, nil, 904, 904, nil, nil, 904, - nil, 904, 548, nil, 548, 904, 548, 548, nil, 548, - 548, 548, 548, 548, 904, 548, nil, nil, nil, 904, - 904, 904, 904, nil, 904, 904, 904, 904, nil, nil, - nil, nil, 904, 904, nil, nil, nil, nil, nil, nil, - 904, nil, 904, 904, 904, nil, nil, 904, 904, 921, - 921, 921, 921, 921, 921, nil, nil, nil, 921, 921, - nil, nil, nil, 921, nil, 921, 921, 921, 921, 921, - 921, 921, nil, nil, nil, nil, nil, 921, 921, 921, - 921, 921, 921, 921, nil, nil, 921, nil, nil, nil, - nil, nil, 921, 921, 921, 921, 921, 921, 921, 921, - 921, 921, 921, 921, nil, 921, 921, 921, nil, 921, - 921, 921, 921, 921, 549, 549, 549, 549, 549, 549, - 549, nil, nil, 549, 549, nil, nil, nil, nil, nil, - 549, 549, nil, 921, nil, nil, 921, nil, nil, 921, - 921, nil, nil, 921, nil, 921, 549, nil, 549, 921, - 549, 549, nil, 549, 549, 549, 549, 549, 921, 549, - nil, nil, nil, 921, 921, 921, 921, nil, 921, 921, - 921, 921, nil, nil, nil, nil, 921, 921, nil, nil, - nil, nil, nil, nil, 921, nil, 921, 921, 921, nil, - nil, 921, 921, 927, 927, 927, 927, 927, 927, nil, - nil, nil, 927, 927, nil, nil, nil, 927, nil, 927, - 927, 927, 927, 927, 927, 927, nil, nil, nil, nil, - nil, 927, 927, 927, 927, 927, 927, 927, nil, nil, - 927, nil, nil, nil, nil, nil, 927, 927, 927, 927, - 927, 927, 927, 927, 927, 927, 927, 927, nil, 927, - 927, 927, nil, 927, 927, 927, 927, 927, 552, 552, - 552, 552, 552, 552, 552, nil, nil, 552, 552, nil, - nil, nil, nil, nil, 552, 552, nil, 927, nil, nil, - 927, nil, nil, 927, 927, nil, nil, 927, nil, 927, - 552, nil, 552, 927, 552, 552, nil, 552, 552, 552, - 552, 552, 927, 552, nil, nil, nil, 927, 927, 927, - 927, nil, 927, 927, 927, 927, nil, nil, nil, nil, - 927, 927, nil, nil, nil, nil, nil, nil, 927, nil, - 927, 927, 927, nil, nil, 927, 927, 947, 947, 947, - 947, 947, 947, nil, nil, nil, 947, 947, nil, nil, - nil, 947, nil, 947, 947, 947, 947, 947, 947, 947, - nil, nil, nil, nil, nil, 947, 947, 947, 947, 947, - 947, 947, nil, nil, 947, nil, nil, nil, nil, nil, - 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, - 947, 947, nil, 947, 947, 947, nil, 947, 947, 947, - 947, 947, 553, 553, 553, 553, 553, 553, 553, 553, - nil, 553, 553, nil, nil, nil, nil, nil, 553, 553, - nil, 947, nil, nil, 947, nil, nil, 947, 947, nil, - nil, 947, nil, 947, 553, nil, 553, 947, 553, 553, - nil, 553, 553, 553, 553, 553, 947, 553, nil, nil, - nil, 947, 947, 947, 947, nil, 947, 947, 947, 947, - nil, nil, nil, nil, 947, 947, nil, nil, nil, nil, - nil, nil, 947, nil, 947, 947, 947, nil, nil, 947, - 947, 1015, 1015, 1015, 1015, 1015, 1015, nil, nil, nil, - 1015, 1015, nil, nil, nil, 1015, nil, 1015, 1015, 1015, - 1015, 1015, 1015, 1015, nil, nil, nil, nil, nil, 1015, - 1015, 1015, 1015, 1015, 1015, 1015, nil, nil, 1015, nil, - nil, nil, nil, nil, 1015, 1015, 1015, 1015, 1015, 1015, - 1015, 1015, 1015, 1015, 1015, 1015, nil, 1015, 1015, 1015, - nil, 1015, 1015, 1015, 1015, 1015, 555, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 555, 555, nil, 1015, nil, nil, 1015, nil, - nil, 1015, 1015, nil, nil, 1015, nil, 1015, 555, nil, - 555, 1015, 555, 555, nil, 555, 555, nil, nil, 555, - 1015, 555, nil, nil, nil, 1015, 1015, 1015, 1015, nil, - 1015, 1015, 1015, 1015, nil, nil, nil, nil, 1015, 1015, - nil, nil, nil, nil, nil, nil, 1015, nil, 1015, 1015, - 1015, nil, nil, 1015, 1015, 1043, 1043, 1043, 1043, 1043, - 1043, nil, nil, nil, 1043, 1043, nil, nil, nil, 1043, - nil, 1043, 1043, 1043, 1043, 1043, 1043, 1043, nil, nil, - nil, nil, nil, 1043, 1043, 1043, 1043, 1043, 1043, 1043, - nil, nil, 1043, nil, nil, nil, nil, nil, 1043, 1043, - 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043, - nil, 1043, 1043, 1043, nil, 1043, 1043, 1043, 1043, 1043, - 608, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 608, 608, nil, 1043, - nil, nil, 1043, nil, nil, 1043, 1043, nil, nil, 1043, - nil, 1043, 608, nil, 608, 1043, 608, 608, nil, 608, - 608, nil, nil, 608, 1043, 608, nil, nil, nil, 1043, - 1043, 1043, 1043, nil, 1043, 1043, 1043, 1043, nil, nil, - nil, nil, 1043, 1043, nil, nil, nil, nil, nil, nil, - 1043, nil, 1043, 1043, 1043, nil, nil, 1043, 1043, 1044, - 1044, 1044, 1044, 1044, 1044, nil, nil, nil, 1044, 1044, - nil, nil, nil, 1044, nil, 1044, 1044, 1044, 1044, 1044, - 1044, 1044, nil, nil, nil, nil, nil, 1044, 1044, 1044, - 1044, 1044, 1044, 1044, nil, nil, 1044, nil, nil, nil, - nil, nil, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, - 1044, 1044, 1044, 1044, nil, 1044, 1044, 1044, nil, 1044, - 1044, 1044, 1044, 1044, 541, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 541, 541, nil, 1044, nil, nil, 1044, nil, nil, 1044, - 1044, nil, nil, 1044, nil, 1044, 541, nil, 541, 1044, - 541, 541, nil, 541, 541, nil, nil, nil, 1044, nil, - nil, nil, nil, 1044, 1044, 1044, 1044, nil, 1044, 1044, - 1044, 1044, nil, nil, nil, nil, 1044, 1044, nil, nil, - nil, nil, nil, nil, 1044, nil, 1044, 1044, 1044, nil, - nil, 1044, 1044, 1050, 1050, 1050, 1050, 1050, 1050, nil, - nil, nil, 1050, 1050, nil, nil, nil, 1050, nil, 1050, - 1050, 1050, 1050, 1050, 1050, 1050, nil, nil, nil, nil, - nil, 1050, 1050, 1050, 1050, 1050, 1050, 1050, nil, nil, - 1050, nil, nil, nil, nil, nil, 1050, 1050, 1050, 1050, - 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, nil, 1050, - 1050, 1050, nil, 1050, 1050, 1050, 1050, 1050, 542, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 542, 542, nil, 1050, nil, nil, - 1050, nil, nil, 1050, 1050, nil, nil, 1050, nil, 1050, - 542, nil, 542, 1050, 542, 542, nil, 542, 542, nil, - nil, nil, 1050, nil, nil, nil, nil, 1050, 1050, 1050, - 1050, nil, 1050, 1050, 1050, 1050, nil, nil, nil, nil, - 1050, 1050, nil, nil, nil, nil, nil, nil, 1050, nil, - 1050, 1050, 1050, nil, nil, 1050, 1050, 1113, 1113, 1113, - 1113, 1113, 1113, nil, nil, nil, 1113, 1113, nil, nil, - nil, 1113, nil, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - nil, nil, nil, nil, nil, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, nil, nil, 1113, nil, nil, nil, nil, nil, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, nil, 1113, 1113, 1113, nil, 1113, 1113, 1113, - 1113, 1113, 543, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 543, 543, - nil, 1113, nil, nil, 1113, nil, nil, 1113, 1113, nil, - nil, 1113, nil, 1113, 543, nil, nil, 1113, 543, 543, - nil, 543, 543, nil, nil, nil, 1113, nil, nil, nil, - nil, 1113, 1113, 1113, 1113, nil, 1113, 1113, 1113, 1113, - nil, nil, nil, nil, 1113, 1113, nil, nil, nil, nil, - nil, nil, 1113, nil, 1113, 1113, 1113, nil, nil, 1113, - 1113, 1235, 1235, 1235, 1235, 1235, 1235, nil, nil, nil, - 1235, 1235, nil, nil, nil, 1235, nil, 1235, 1235, 1235, - 1235, 1235, 1235, 1235, nil, nil, nil, nil, nil, 1235, - 1235, 1235, 1235, 1235, 1235, 1235, nil, nil, 1235, nil, - nil, nil, nil, nil, 1235, 1235, 1235, 1235, 1235, 1235, - 1235, 1235, 1235, 1235, 1235, 1235, nil, 1235, 1235, 1235, - nil, 1235, 1235, 1235, 1235, 1235, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 1235, nil, nil, 1235, nil, - nil, 1235, 1235, nil, nil, 1235, nil, 1235, nil, nil, - nil, 1235, nil, nil, nil, nil, nil, nil, nil, nil, - 1235, nil, nil, nil, nil, 1235, 1235, 1235, 1235, nil, - 1235, 1235, 1235, 1235, nil, nil, nil, nil, 1235, 1235, - nil, nil, nil, nil, nil, nil, 1235, nil, 1235, 1235, - 1235, nil, nil, 1235, 1235, 7, 7, 7, 7, 7, - nil, nil, nil, 7, 7, nil, nil, nil, 7, nil, - 7, 7, 7, 7, 7, 7, 7, nil, nil, nil, - nil, nil, 7, 7, 7, 7, 7, 7, 7, nil, - nil, 7, nil, nil, nil, nil, nil, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, nil, - 7, 7, 7, nil, 7, 7, 7, 7, 7, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 7, nil, - nil, 7, nil, nil, 7, 7, nil, nil, 7, nil, - 7, nil, nil, nil, 7, nil, nil, nil, nil, nil, - nil, nil, nil, 7, nil, nil, nil, nil, 7, 7, - 7, 7, nil, 7, 7, 7, 7, nil, nil, nil, - nil, 7, 7, nil, nil, nil, 24, 24, 24, 7, - 24, 7, 7, 7, 24, 24, 7, 7, nil, 24, - nil, 24, 24, 24, 24, 24, 24, 24, nil, nil, - nil, nil, nil, 24, 24, 24, 24, 24, 24, 24, - nil, nil, 24, nil, nil, nil, nil, nil, nil, 24, - nil, nil, 24, 24, 24, 24, 24, 24, 24, 24, - nil, 24, 24, 24, nil, 24, 24, 24, 24, 24, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 24, - nil, nil, 24, nil, nil, 24, 24, nil, nil, 24, - nil, nil, nil, nil, nil, 24, nil, nil, nil, nil, - nil, nil, nil, nil, 24, nil, nil, nil, nil, 24, - 24, 24, 24, nil, 24, 24, 24, 24, nil, nil, - nil, nil, 24, 24, nil, nil, nil, nil, nil, nil, - 24, nil, 24, 24, 24, 32, nil, 24, 24, nil, - nil, nil, 32, 32, 32, nil, nil, 32, 32, 32, - nil, 32, nil, nil, nil, nil, nil, nil, nil, 32, - 32, 32, 32, nil, nil, nil, nil, nil, nil, nil, - nil, 32, 32, nil, 32, 32, 32, 32, 32, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, nil, nil, 32, 32, 32, - nil, nil, 32, nil, 32, 32, nil, nil, 32, 32, - nil, 32, nil, 32, nil, 32, nil, 32, 32, nil, - 32, 32, 32, 32, 32, 33, 32, 32, 32, nil, - nil, nil, 33, 33, 33, nil, nil, 33, 33, 33, - nil, 33, 32, nil, nil, 32, 32, nil, 32, 33, - 32, 33, 33, nil, nil, nil, nil, 32, nil, nil, - nil, 33, 33, nil, 33, 33, 33, 33, 33, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 33, 33, 33, 33, 33, 33, 33, 33, 33, - 33, 33, 33, 33, 33, nil, nil, 33, 33, 33, - nil, nil, 33, nil, 33, 33, nil, nil, 33, 33, - nil, 33, nil, 33, nil, 33, nil, 33, 33, nil, - 33, 33, 33, 33, 33, nil, 33, nil, 33, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 33, nil, nil, 33, 33, nil, 33, nil, - 33, 34, 34, 34, nil, 34, nil, 33, nil, 34, - 34, nil, nil, nil, 34, nil, 34, 34, 34, 34, - 34, 34, 34, nil, nil, nil, nil, nil, 34, 34, - 34, 34, 34, 34, 34, nil, nil, 34, nil, nil, - nil, nil, nil, nil, 34, nil, nil, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, nil, - 34, 34, 34, 34, 34, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 34, nil, nil, 34, nil, nil, - 34, 34, nil, nil, 34, nil, 34, nil, 34, nil, - 34, nil, nil, 34, nil, nil, nil, nil, nil, 34, - nil, nil, nil, nil, 34, 34, 34, 34, nil, 34, - 34, 34, 34, nil, nil, nil, nil, 34, 34, nil, - nil, nil, 35, 35, 35, 34, 35, 34, 34, 34, - 35, 35, 34, 34, nil, 35, nil, 35, 35, 35, - 35, 35, 35, 35, nil, nil, nil, nil, nil, 35, - 35, 35, 35, 35, 35, 35, nil, nil, 35, nil, - nil, nil, nil, nil, nil, 35, nil, nil, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - nil, 35, 35, 35, 35, 35, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 35, nil, nil, 35, nil, - nil, 35, 35, nil, nil, 35, nil, 35, nil, 35, - nil, 35, nil, nil, 35, nil, nil, nil, nil, nil, - 35, nil, nil, nil, nil, 35, 35, 35, 35, nil, - 35, 35, 35, 35, nil, nil, nil, nil, 35, 35, - nil, nil, nil, 36, 36, 36, 35, 36, 35, 35, - 35, 36, 36, 35, 35, nil, 36, nil, 36, 36, - 36, 36, 36, 36, 36, nil, nil, nil, nil, nil, - 36, 36, 36, 36, 36, 36, 36, nil, nil, 36, - nil, nil, nil, nil, nil, nil, 36, nil, nil, 36, - 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, - 36, nil, 36, 36, 36, 36, 36, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 36, nil, nil, 36, - nil, nil, 36, 36, nil, nil, 36, nil, 36, nil, - 36, nil, 36, nil, nil, 36, nil, nil, nil, nil, - nil, 36, nil, nil, nil, nil, 36, 36, 36, 36, - nil, 36, 36, 36, 36, nil, nil, nil, nil, 36, - 36, nil, nil, nil, 46, 46, 46, 36, 46, 36, - 36, 36, 46, 46, 36, 36, nil, 46, nil, 46, - 46, 46, 46, 46, 46, 46, nil, nil, nil, nil, - nil, 46, 46, 46, 46, 46, 46, 46, nil, nil, - 46, nil, nil, nil, nil, nil, nil, 46, nil, nil, - 46, 46, 46, 46, 46, 46, 46, 46, nil, 46, - 46, 46, nil, 46, 46, 46, 46, 46, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 46, nil, nil, - 46, nil, nil, 46, 46, nil, nil, 46, nil, nil, - nil, nil, nil, 46, nil, nil, nil, nil, nil, nil, - nil, nil, 46, nil, nil, nil, nil, 46, 46, 46, - 46, nil, 46, 46, 46, 46, nil, nil, nil, nil, - 46, 46, nil, nil, nil, 47, 47, 47, 46, 47, - 46, 46, 46, 47, 47, 46, 46, nil, 47, nil, - 47, 47, 47, 47, 47, 47, 47, nil, nil, nil, - nil, nil, 47, 47, 47, 47, 47, 47, 47, nil, - nil, 47, nil, nil, nil, nil, nil, nil, 47, nil, - nil, 47, 47, 47, 47, 47, 47, 47, 47, nil, - 47, 47, 47, nil, 47, 47, 47, 47, 47, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 47, nil, - nil, 47, nil, nil, 47, 47, nil, nil, 47, nil, - nil, nil, nil, nil, 47, nil, nil, nil, nil, nil, - nil, nil, nil, 47, nil, nil, nil, nil, 47, 47, - 47, 47, nil, 47, 47, 47, 47, nil, nil, nil, - nil, 47, 47, nil, nil, nil, 49, 49, 49, 47, - 49, 47, 47, 47, 49, 49, 47, 47, nil, 49, - nil, 49, 49, 49, 49, 49, 49, 49, nil, nil, - nil, nil, nil, 49, 49, 49, 49, 49, 49, 49, - nil, nil, 49, nil, nil, nil, nil, nil, nil, 49, - nil, nil, 49, 49, 49, 49, 49, 49, 49, 49, - nil, 49, 49, 49, nil, 49, 49, 49, 49, 49, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 49, - nil, nil, 49, nil, nil, 49, 49, nil, nil, 49, - nil, nil, nil, nil, nil, 49, nil, nil, nil, nil, - nil, nil, nil, nil, 49, nil, nil, nil, nil, 49, - 49, 49, 49, nil, 49, 49, 49, 49, nil, nil, - nil, nil, 49, 49, nil, nil, nil, 50, 50, 50, - 49, 50, 49, 49, 49, 50, 50, 49, 49, nil, - 50, nil, 50, 50, 50, 50, 50, 50, 50, nil, - nil, nil, nil, nil, 50, 50, 50, 50, 50, 50, - 50, nil, nil, 50, nil, nil, nil, nil, nil, nil, - 50, nil, nil, 50, 50, 50, 50, 50, 50, 50, - 50, nil, 50, 50, 50, nil, 50, 50, 50, 50, - 50, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 50, nil, nil, 50, nil, nil, 50, 50, nil, nil, - 50, nil, nil, nil, nil, nil, 50, nil, nil, nil, - nil, nil, nil, nil, nil, 50, nil, nil, nil, nil, - 50, 50, 50, 50, nil, 50, 50, 50, 50, nil, - nil, nil, nil, 50, 50, nil, nil, nil, 52, 52, - 52, 50, 52, 50, 50, 50, 52, 52, 50, 50, - nil, 52, nil, 52, 52, 52, 52, 52, 52, 52, - nil, nil, nil, nil, nil, 52, 52, 52, 52, 52, - 52, 52, nil, nil, 52, nil, nil, nil, nil, nil, - nil, 52, nil, nil, 52, 52, 52, 52, 52, 52, - 52, 52, nil, 52, 52, 52, nil, 52, 52, 52, - 52, 52, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 52, nil, nil, 52, nil, nil, 52, 52, nil, - nil, 52, nil, nil, nil, nil, nil, 52, nil, nil, - nil, nil, nil, nil, nil, nil, 52, nil, nil, nil, - nil, 52, 52, 52, 52, nil, 52, 52, 52, 52, - nil, nil, nil, nil, 52, 52, nil, nil, nil, nil, - nil, nil, 52, nil, 52, 52, 52, 64, nil, 52, - 52, nil, nil, nil, 64, 64, 64, nil, nil, 64, - 64, 64, nil, 64, nil, nil, nil, nil, nil, nil, - nil, 64, nil, 64, 64, 64, nil, nil, nil, nil, - nil, nil, nil, 64, 64, nil, 64, 64, 64, 64, - 64, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, nil, nil, 64, - 64, 64, nil, nil, 64, nil, nil, 64, nil, nil, - 64, 64, nil, 64, nil, 64, nil, 64, nil, 64, - 64, nil, 64, 64, 64, 64, 64, nil, 64, nil, - 64, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 64, nil, nil, 64, 64, 64, - 64, nil, 64, nil, 64, nil, 67, 67, 67, 64, - 67, nil, nil, nil, 67, 67, nil, nil, nil, 67, - nil, 67, 67, 67, 67, 67, 67, 67, nil, nil, - nil, nil, nil, 67, 67, 67, 67, 67, 67, 67, - nil, nil, 67, nil, nil, nil, nil, nil, nil, 67, - nil, nil, 67, 67, 67, 67, 67, 67, 67, 67, - 67, 67, 67, 67, nil, 67, 67, 67, 67, 67, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 67, - nil, nil, 67, nil, nil, 67, 67, nil, nil, 67, - nil, 67, nil, nil, nil, 67, nil, nil, 67, nil, - nil, nil, nil, nil, 67, nil, nil, nil, nil, 67, - 67, 67, 67, nil, 67, 67, 67, 67, nil, nil, - nil, nil, 67, 67, nil, nil, nil, 68, 68, 68, - 67, 68, 67, 67, 67, 68, 68, 67, 67, nil, - 68, nil, 68, 68, 68, 68, 68, 68, 68, nil, - nil, nil, nil, nil, 68, 68, 68, 68, 68, 68, - 68, nil, nil, 68, nil, nil, nil, nil, nil, nil, - 68, nil, nil, 68, 68, 68, 68, 68, 68, 68, - 68, 68, 68, 68, 68, nil, 68, 68, 68, 68, - 68, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 68, nil, nil, 68, nil, nil, 68, 68, nil, nil, - 68, nil, nil, nil, nil, nil, 68, nil, nil, 68, - nil, nil, nil, nil, nil, 68, nil, nil, nil, nil, - 68, 68, 68, 68, nil, 68, 68, 68, 68, nil, - nil, nil, nil, 68, 68, nil, nil, nil, 71, 71, - 71, 68, 71, 68, 68, 68, 71, 71, 68, 68, - nil, 71, nil, 71, 71, 71, 71, 71, 71, 71, - nil, nil, nil, nil, nil, 71, 71, 71, 71, 71, - 71, 71, nil, nil, 71, nil, nil, nil, nil, nil, - nil, 71, nil, nil, 71, 71, 71, 71, 71, 71, - 71, 71, nil, 71, 71, 71, nil, 71, 71, 71, - 71, 71, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 71, nil, nil, 71, nil, nil, 71, 71, nil, - nil, 71, nil, nil, nil, nil, nil, 71, nil, nil, - nil, nil, nil, nil, nil, nil, 71, nil, nil, nil, - nil, 71, 71, 71, 71, nil, 71, 71, 71, 71, - nil, nil, nil, nil, 71, 71, nil, nil, nil, 72, - 72, 72, 71, 72, 71, 71, 71, 72, 72, 71, - 71, nil, 72, nil, 72, 72, 72, 72, 72, 72, - 72, nil, nil, nil, nil, nil, 72, 72, 72, 72, - 72, 72, 72, nil, nil, 72, nil, nil, nil, nil, - nil, nil, 72, nil, nil, 72, 72, 72, 72, 72, - 72, 72, 72, nil, 72, 72, 72, nil, 72, 72, - 72, 72, 72, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 72, nil, nil, 72, nil, nil, 72, 72, - nil, nil, 72, nil, nil, nil, nil, nil, 72, nil, - nil, nil, nil, nil, nil, nil, nil, 72, nil, nil, - nil, nil, 72, 72, 72, 72, nil, 72, 72, 72, - 72, nil, nil, nil, nil, 72, 72, nil, nil, nil, - 75, 75, 75, 72, 75, 72, 72, 72, 75, 75, - 72, 72, nil, 75, nil, 75, 75, 75, 75, 75, - 75, 75, nil, nil, nil, nil, nil, 75, 75, 75, - 75, 75, 75, 75, nil, nil, 75, nil, nil, nil, - nil, nil, nil, 75, nil, nil, 75, 75, 75, 75, - 75, 75, 75, 75, nil, 75, 75, 75, nil, 75, - 75, 75, 75, 75, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 75, nil, nil, 75, nil, nil, 75, - 75, nil, nil, 75, nil, nil, nil, nil, nil, 75, - nil, nil, nil, nil, nil, nil, nil, nil, 75, nil, - nil, nil, nil, 75, 75, 75, 75, nil, 75, 75, - 75, 75, nil, nil, nil, nil, 75, 75, 75, nil, - nil, nil, nil, 75, 75, nil, 75, 75, 75, nil, - nil, 75, 75, 125, 125, 125, 125, 125, nil, nil, - nil, 125, 125, nil, nil, nil, 125, nil, 125, 125, - 125, 125, 125, 125, 125, nil, nil, nil, nil, nil, - 125, 125, 125, 125, 125, 125, 125, nil, nil, 125, - nil, nil, nil, nil, nil, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, nil, 125, 125, - 125, nil, 125, 125, 125, 125, 125, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 125, nil, nil, 125, - nil, nil, 125, 125, nil, nil, 125, nil, 125, nil, - nil, nil, 125, nil, nil, nil, nil, nil, nil, nil, - nil, 125, nil, nil, nil, nil, 125, 125, 125, 125, - nil, 125, 125, 125, 125, nil, nil, nil, nil, 125, - 125, nil, nil, nil, nil, nil, 125, 125, nil, 125, - 125, 125, nil, nil, 125, 125, 130, 130, 130, nil, - 130, nil, nil, nil, 130, 130, nil, nil, nil, 130, - nil, 130, 130, 130, 130, 130, 130, 130, nil, nil, - nil, nil, nil, 130, 130, 130, 130, 130, 130, 130, - nil, nil, 130, nil, nil, nil, nil, nil, nil, 130, - nil, nil, 130, 130, 130, 130, 130, 130, 130, 130, - nil, 130, 130, 130, nil, 130, 130, 130, 130, 130, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 130, - nil, nil, 130, nil, nil, 130, 130, nil, nil, 130, - nil, nil, nil, nil, nil, 130, nil, nil, nil, nil, - nil, nil, nil, nil, 130, nil, nil, nil, nil, 130, - 130, 130, 130, nil, 130, 130, 130, 130, nil, nil, - nil, nil, 130, 130, nil, nil, nil, 131, 131, 131, - 130, 131, 130, 130, 130, 131, 131, 130, 130, nil, - 131, nil, 131, 131, 131, 131, 131, 131, 131, nil, - nil, nil, nil, nil, 131, 131, 131, 131, 131, 131, - 131, nil, nil, 131, nil, nil, nil, nil, nil, nil, - 131, nil, nil, 131, 131, 131, 131, 131, 131, 131, - 131, nil, 131, 131, 131, nil, 131, 131, 131, 131, - 131, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 131, nil, nil, 131, nil, nil, 131, 131, nil, nil, - 131, nil, nil, nil, nil, nil, 131, nil, nil, nil, - nil, nil, nil, nil, nil, 131, nil, nil, nil, nil, - 131, 131, 131, 131, nil, 131, 131, 131, 131, nil, - nil, nil, nil, 131, 131, nil, nil, nil, 132, 132, - 132, 131, 132, 131, 131, 131, 132, 132, 131, 131, - nil, 132, nil, 132, 132, 132, 132, 132, 132, 132, - nil, nil, nil, nil, nil, 132, 132, 132, 132, 132, - 132, 132, nil, nil, 132, nil, nil, nil, nil, nil, - nil, 132, nil, nil, 132, 132, 132, 132, 132, 132, - 132, 132, nil, 132, 132, 132, nil, 132, 132, 132, - 132, 132, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 132, nil, nil, 132, nil, nil, 132, 132, nil, - nil, 132, nil, nil, nil, nil, nil, 132, nil, nil, - nil, nil, nil, nil, nil, nil, 132, nil, nil, nil, - nil, 132, 132, 132, 132, nil, 132, 132, 132, 132, - nil, nil, nil, nil, 132, 132, nil, nil, nil, 133, - 133, 133, 132, 133, 132, 132, 132, 133, 133, 132, - 132, nil, 133, nil, 133, 133, 133, 133, 133, 133, - 133, nil, nil, nil, nil, nil, 133, 133, 133, 133, - 133, 133, 133, nil, nil, 133, nil, nil, nil, nil, - nil, nil, 133, nil, nil, 133, 133, 133, 133, 133, - 133, 133, 133, nil, 133, 133, 133, nil, 133, 133, - 133, 133, 133, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 133, nil, nil, 133, nil, nil, 133, 133, - nil, nil, 133, nil, nil, nil, nil, nil, 133, nil, - nil, nil, nil, nil, nil, nil, nil, 133, nil, nil, - nil, nil, 133, 133, 133, 133, nil, 133, 133, 133, - 133, nil, nil, nil, nil, 133, 133, nil, nil, nil, - nil, nil, nil, 133, nil, 133, 133, 133, nil, nil, - 133, 133, 134, 134, 134, 134, 134, nil, nil, nil, - 134, 134, nil, nil, nil, 134, nil, 134, 134, 134, - 134, 134, 134, 134, nil, nil, nil, nil, nil, 134, - 134, 134, 134, 134, 134, 134, nil, nil, 134, nil, - nil, nil, nil, nil, 134, 134, nil, 134, 134, 134, - 134, 134, 134, 134, 134, 134, nil, 134, 134, 134, - nil, 134, 134, 134, 134, 134, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 134, nil, nil, 134, nil, - nil, 134, 134, nil, nil, 134, nil, 134, nil, nil, - nil, 134, nil, nil, nil, nil, nil, nil, nil, nil, - 134, nil, nil, nil, nil, 134, 134, 134, 134, nil, - 134, 134, 134, 134, nil, nil, nil, nil, 134, 134, - nil, nil, nil, 220, 220, 220, 134, 220, 134, 134, - 134, 220, 220, 134, 134, nil, 220, nil, 220, 220, - 220, 220, 220, 220, 220, nil, nil, nil, nil, nil, - 220, 220, 220, 220, 220, 220, 220, nil, nil, 220, - nil, nil, nil, nil, nil, nil, 220, nil, nil, 220, - 220, 220, 220, 220, 220, 220, 220, nil, 220, 220, - 220, nil, 220, 220, 220, 220, 220, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 220, nil, nil, 220, - nil, nil, 220, 220, nil, nil, 220, nil, 220, nil, - nil, nil, 220, nil, nil, nil, nil, nil, nil, nil, - nil, 220, nil, nil, nil, nil, 220, 220, 220, 220, - nil, 220, 220, 220, 220, nil, nil, nil, nil, 220, - 220, nil, nil, nil, 221, 221, 221, 220, 221, 220, - 220, 220, 221, 221, 220, 220, nil, 221, nil, 221, - 221, 221, 221, 221, 221, 221, nil, nil, nil, nil, - nil, 221, 221, 221, 221, 221, 221, 221, nil, nil, - 221, nil, nil, nil, nil, nil, nil, 221, nil, nil, - 221, 221, 221, 221, 221, 221, 221, 221, nil, 221, - 221, 221, nil, 221, 221, 221, 221, 221, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 221, nil, nil, - 221, nil, nil, 221, 221, nil, nil, 221, nil, 221, - nil, nil, nil, 221, nil, nil, nil, nil, nil, nil, - nil, nil, 221, nil, nil, nil, nil, 221, 221, 221, - 221, nil, 221, 221, 221, 221, nil, nil, nil, nil, - 221, 221, nil, nil, nil, 222, 222, 222, 221, 222, - 221, 221, 221, 222, 222, 221, 221, nil, 222, nil, - 222, 222, 222, 222, 222, 222, 222, nil, nil, nil, - nil, nil, 222, 222, 222, 222, 222, 222, 222, nil, - nil, 222, nil, nil, nil, nil, nil, nil, 222, nil, - nil, 222, 222, 222, 222, 222, 222, 222, 222, nil, - 222, 222, 222, nil, 222, 222, 222, 222, 222, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 222, nil, - nil, 222, nil, nil, 222, 222, nil, nil, 222, nil, - nil, nil, nil, nil, 222, nil, nil, nil, nil, nil, - nil, nil, nil, 222, nil, nil, nil, nil, 222, 222, - 222, 222, nil, 222, 222, 222, 222, nil, nil, nil, - nil, 222, 222, nil, nil, nil, 223, 223, 223, 222, - 223, 222, 222, 222, 223, 223, 222, 222, nil, 223, - nil, 223, 223, 223, 223, 223, 223, 223, nil, nil, - nil, nil, nil, 223, 223, 223, 223, 223, 223, 223, - nil, nil, 223, nil, nil, nil, nil, nil, nil, 223, - nil, nil, 223, 223, 223, 223, 223, 223, 223, 223, - nil, 223, 223, 223, nil, 223, 223, 223, 223, 223, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 223, - nil, nil, 223, nil, nil, 223, 223, nil, nil, 223, - nil, nil, nil, nil, nil, 223, nil, nil, nil, nil, - nil, nil, nil, nil, 223, nil, nil, nil, nil, 223, - 223, 223, 223, nil, 223, 223, 223, 223, nil, nil, - nil, nil, 223, 223, nil, nil, nil, 224, 224, 224, - 223, 224, 223, 223, 223, 224, 224, 223, 223, nil, - 224, nil, 224, 224, 224, 224, 224, 224, 224, nil, - nil, nil, nil, nil, 224, 224, 224, 224, 224, 224, - 224, nil, nil, 224, nil, nil, nil, nil, nil, nil, - 224, nil, nil, 224, 224, 224, 224, 224, 224, 224, - 224, nil, 224, 224, 224, nil, 224, 224, 224, 224, - 224, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 224, nil, nil, 224, nil, nil, 224, 224, nil, nil, - 224, nil, nil, nil, nil, nil, 224, nil, nil, nil, - nil, nil, nil, nil, nil, 224, nil, nil, nil, nil, - 224, 224, 224, 224, nil, 224, 224, 224, 224, nil, - nil, nil, nil, 224, 224, nil, nil, nil, 225, 225, - 225, 224, 225, 224, 224, 224, 225, 225, 224, 224, - nil, 225, nil, 225, 225, 225, 225, 225, 225, 225, - nil, nil, nil, nil, nil, 225, 225, 225, 225, 225, - 225, 225, nil, nil, 225, nil, nil, nil, nil, nil, - nil, 225, nil, nil, 225, 225, 225, 225, 225, 225, - 225, 225, 225, 225, 225, 225, nil, 225, 225, 225, - 225, 225, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 225, nil, nil, 225, nil, nil, 225, 225, nil, - nil, 225, nil, 225, nil, 225, nil, 225, nil, nil, - 225, nil, nil, nil, nil, nil, 225, nil, nil, nil, - nil, 225, 225, 225, 225, nil, 225, 225, 225, 225, - nil, nil, nil, nil, 225, 225, nil, nil, nil, 238, - 238, 238, 225, 238, 225, 225, 225, 238, 238, 225, - 225, nil, 238, nil, 238, 238, 238, 238, 238, 238, - 238, nil, nil, nil, nil, nil, 238, 238, 238, 238, - 238, 238, 238, nil, nil, 238, nil, nil, nil, nil, - nil, nil, 238, nil, nil, 238, 238, 238, 238, 238, - 238, 238, 238, nil, 238, 238, 238, nil, 238, 238, - 238, 238, 238, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 238, nil, nil, 238, nil, nil, 238, 238, - nil, nil, 238, nil, nil, nil, nil, nil, 238, nil, - nil, nil, nil, nil, nil, nil, nil, 238, nil, nil, - nil, nil, 238, 238, 238, 238, nil, 238, 238, 238, - 238, nil, nil, nil, nil, 238, 238, nil, nil, nil, - 239, 239, 239, 238, 239, 238, 238, 238, 239, 239, - 238, 238, nil, 239, nil, 239, 239, 239, 239, 239, - 239, 239, nil, nil, nil, nil, nil, 239, 239, 239, - 239, 239, 239, 239, nil, nil, 239, nil, nil, nil, - nil, nil, nil, 239, nil, nil, 239, 239, 239, 239, - 239, 239, 239, 239, nil, 239, 239, 239, nil, 239, - 239, 239, 239, 239, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 239, nil, nil, 239, nil, nil, 239, - 239, nil, nil, 239, nil, nil, nil, nil, nil, 239, - nil, nil, nil, nil, nil, nil, nil, nil, 239, nil, - nil, nil, nil, 239, 239, 239, 239, nil, 239, 239, - 239, 239, nil, nil, nil, nil, 239, 239, nil, nil, - nil, 240, 240, 240, 239, 240, 239, 239, 239, 240, - 240, 239, 239, nil, 240, nil, 240, 240, 240, 240, - 240, 240, 240, nil, nil, nil, nil, nil, 240, 240, - 240, 240, 240, 240, 240, nil, nil, 240, nil, nil, - nil, nil, nil, nil, 240, nil, nil, 240, 240, 240, - 240, 240, 240, 240, 240, nil, 240, 240, 240, nil, - 240, 240, 240, 240, 240, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 240, nil, nil, 240, nil, nil, - 240, 240, nil, nil, 240, nil, nil, nil, nil, nil, - 240, nil, nil, nil, nil, nil, nil, nil, nil, 240, - nil, nil, nil, nil, 240, 240, 240, 240, nil, 240, - 240, 240, 240, nil, nil, nil, nil, 240, 240, 240, - nil, nil, 251, 251, 251, 240, 251, 240, 240, 240, - 251, 251, 240, 240, nil, 251, nil, 251, 251, 251, - 251, 251, 251, 251, nil, nil, nil, nil, nil, 251, - 251, 251, 251, 251, 251, 251, nil, nil, 251, nil, - nil, nil, nil, nil, nil, 251, nil, nil, 251, 251, - 251, 251, 251, 251, 251, 251, nil, 251, 251, 251, - nil, 251, 251, 251, 251, 251, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 251, nil, nil, 251, nil, - nil, 251, 251, nil, nil, 251, nil, nil, nil, nil, - nil, 251, nil, nil, nil, nil, nil, nil, nil, nil, - 251, nil, nil, nil, nil, 251, 251, 251, 251, nil, - 251, 251, 251, 251, nil, nil, nil, nil, 251, 251, - nil, nil, nil, 258, 258, 258, 251, 258, 251, 251, - 251, 258, 258, 251, 251, nil, 258, nil, 258, 258, - 258, 258, 258, 258, 258, nil, nil, nil, nil, nil, - 258, 258, 258, 258, 258, 258, 258, nil, nil, 258, - nil, nil, nil, nil, nil, nil, 258, nil, nil, 258, - 258, 258, 258, 258, 258, 258, 258, nil, 258, 258, - 258, nil, 258, 258, 258, 258, 258, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 258, nil, nil, 258, - nil, nil, 258, 258, nil, nil, 258, nil, nil, nil, - nil, nil, 258, nil, nil, nil, nil, nil, nil, nil, - nil, 258, nil, nil, nil, nil, 258, 258, 258, 258, - nil, 258, 258, 258, 258, nil, nil, nil, nil, 258, - 258, nil, nil, nil, 259, 259, 259, 258, 259, 258, - 258, 258, 259, 259, 258, 258, nil, 259, nil, 259, - 259, 259, 259, 259, 259, 259, nil, nil, nil, nil, - nil, 259, 259, 259, 259, 259, 259, 259, nil, nil, - 259, nil, nil, nil, nil, nil, nil, 259, nil, nil, - 259, 259, 259, 259, 259, 259, 259, 259, nil, 259, - 259, 259, nil, 259, 259, 259, 259, 259, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 259, nil, nil, - 259, nil, nil, 259, 259, nil, nil, 259, nil, nil, - nil, nil, nil, 259, nil, nil, nil, nil, nil, nil, - nil, nil, 259, nil, nil, nil, nil, 259, 259, 259, - 259, nil, 259, 259, 259, 259, nil, nil, nil, nil, - 259, 259, nil, nil, nil, 260, 260, 260, 259, 260, - 259, 259, 259, 260, 260, 259, 259, nil, 260, nil, - 260, 260, 260, 260, 260, 260, 260, nil, nil, nil, - nil, nil, 260, 260, 260, 260, 260, 260, 260, nil, - nil, 260, nil, nil, nil, nil, nil, nil, 260, nil, - nil, 260, 260, 260, 260, 260, 260, 260, 260, nil, - 260, 260, 260, nil, 260, 260, 260, 260, 260, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 260, nil, - nil, 260, nil, nil, 260, 260, nil, nil, 260, nil, - nil, nil, nil, nil, 260, nil, nil, nil, nil, nil, - nil, nil, nil, 260, nil, nil, nil, nil, 260, 260, - 260, 260, nil, 260, 260, 260, 260, nil, nil, nil, - nil, 260, 260, nil, nil, nil, 261, 261, 261, 260, - 261, 260, 260, 260, 261, 261, 260, 260, nil, 261, - nil, 261, 261, 261, 261, 261, 261, 261, nil, nil, - nil, nil, nil, 261, 261, 261, 261, 261, 261, 261, - nil, nil, 261, nil, nil, nil, nil, nil, nil, 261, - nil, nil, 261, 261, 261, 261, 261, 261, 261, 261, - nil, 261, 261, 261, nil, 261, 261, 261, 261, 261, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 261, - nil, nil, 261, nil, nil, 261, 261, nil, nil, 261, - nil, nil, nil, nil, nil, 261, nil, nil, nil, nil, - nil, nil, nil, nil, 261, nil, nil, nil, nil, 261, - 261, 261, 261, nil, 261, 261, 261, 261, nil, nil, - nil, nil, 261, 261, nil, nil, nil, 262, 262, 262, - 261, 262, 261, 261, 261, 262, 262, 261, 261, nil, - 262, nil, 262, 262, 262, 262, 262, 262, 262, nil, - nil, nil, nil, nil, 262, 262, 262, 262, 262, 262, - 262, nil, nil, 262, nil, nil, nil, nil, nil, nil, - 262, nil, nil, 262, 262, 262, 262, 262, 262, 262, - 262, nil, 262, 262, 262, nil, 262, 262, 262, 262, - 262, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 262, nil, nil, 262, nil, nil, 262, 262, nil, nil, - 262, nil, nil, nil, nil, nil, 262, nil, nil, nil, - nil, nil, nil, nil, nil, 262, nil, nil, nil, nil, - 262, 262, 262, 262, nil, 262, 262, 262, 262, nil, - nil, nil, nil, 262, 262, nil, nil, nil, 263, 263, - 263, 262, 263, 262, 262, 262, 263, 263, 262, 262, - nil, 263, nil, 263, 263, 263, 263, 263, 263, 263, - nil, nil, nil, nil, nil, 263, 263, 263, 263, 263, - 263, 263, nil, nil, 263, nil, nil, nil, nil, nil, - nil, 263, nil, nil, 263, 263, 263, 263, 263, 263, - 263, 263, nil, 263, 263, 263, nil, 263, 263, 263, - 263, 263, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 263, nil, nil, 263, nil, nil, 263, 263, nil, - nil, 263, nil, nil, nil, nil, nil, 263, nil, nil, - nil, nil, nil, nil, nil, nil, 263, nil, nil, nil, - nil, 263, 263, 263, 263, nil, 263, 263, 263, 263, - nil, nil, nil, nil, 263, 263, nil, nil, nil, 264, - 264, 264, 263, 264, 263, 263, 263, 264, 264, 263, - 263, nil, 264, nil, 264, 264, 264, 264, 264, 264, - 264, nil, nil, nil, nil, nil, 264, 264, 264, 264, - 264, 264, 264, nil, nil, 264, nil, nil, nil, nil, - nil, nil, 264, nil, nil, 264, 264, 264, 264, 264, - 264, 264, 264, nil, 264, 264, 264, nil, 264, 264, - 264, 264, 264, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 264, nil, nil, 264, nil, nil, 264, 264, - nil, nil, 264, nil, nil, nil, nil, nil, 264, nil, - nil, nil, nil, nil, nil, nil, nil, 264, nil, nil, - nil, nil, 264, 264, 264, 264, nil, 264, 264, 264, - 264, nil, nil, nil, nil, 264, 264, nil, nil, nil, - 265, 265, 265, 264, 265, 264, 264, 264, 265, 265, - 264, 264, nil, 265, nil, 265, 265, 265, 265, 265, - 265, 265, nil, nil, nil, nil, nil, 265, 265, 265, - 265, 265, 265, 265, nil, nil, 265, nil, nil, nil, - nil, nil, nil, 265, nil, nil, 265, 265, 265, 265, - 265, 265, 265, 265, nil, 265, 265, 265, nil, 265, - 265, 265, 265, 265, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 265, nil, nil, 265, nil, nil, 265, - 265, nil, nil, 265, nil, nil, nil, nil, nil, 265, - nil, nil, nil, nil, nil, nil, nil, nil, 265, nil, - nil, nil, nil, 265, 265, 265, 265, nil, 265, 265, - 265, 265, nil, nil, nil, nil, 265, 265, nil, nil, - nil, 266, 266, 266, 265, 266, 265, 265, 265, 266, - 266, 265, 265, nil, 266, nil, 266, 266, 266, 266, - 266, 266, 266, nil, nil, nil, nil, nil, 266, 266, - 266, 266, 266, 266, 266, nil, nil, 266, nil, nil, - nil, nil, nil, nil, 266, nil, nil, 266, 266, 266, - 266, 266, 266, 266, 266, nil, 266, 266, 266, nil, - 266, 266, 266, 266, 266, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 266, nil, nil, 266, nil, nil, - 266, 266, nil, nil, 266, nil, nil, nil, nil, nil, - 266, nil, nil, nil, nil, nil, nil, nil, nil, 266, - nil, nil, nil, nil, 266, 266, 266, 266, nil, 266, - 266, 266, 266, nil, nil, nil, nil, 266, 266, nil, - nil, nil, 267, 267, 267, 266, 267, 266, 266, 266, - 267, 267, 266, 266, nil, 267, nil, 267, 267, 267, - 267, 267, 267, 267, nil, nil, nil, nil, nil, 267, - 267, 267, 267, 267, 267, 267, nil, nil, 267, nil, - nil, nil, nil, nil, nil, 267, nil, nil, 267, 267, - 267, 267, 267, 267, 267, 267, nil, 267, 267, 267, - nil, 267, 267, 267, 267, 267, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 267, nil, nil, 267, nil, - nil, 267, 267, nil, nil, 267, nil, nil, nil, nil, - nil, 267, nil, nil, nil, nil, nil, nil, nil, nil, - 267, nil, nil, nil, nil, 267, 267, 267, 267, nil, - 267, 267, 267, 267, nil, nil, nil, nil, 267, 267, - nil, nil, nil, 268, 268, 268, 267, 268, 267, 267, - 267, 268, 268, 267, 267, nil, 268, nil, 268, 268, - 268, 268, 268, 268, 268, nil, nil, nil, nil, nil, - 268, 268, 268, 268, 268, 268, 268, nil, nil, 268, - nil, nil, nil, nil, nil, nil, 268, nil, nil, 268, - 268, 268, 268, 268, 268, 268, 268, nil, 268, 268, - 268, nil, 268, 268, 268, 268, 268, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 268, nil, nil, 268, - nil, nil, 268, 268, nil, nil, 268, nil, nil, nil, - nil, nil, 268, nil, nil, nil, nil, nil, nil, nil, - nil, 268, nil, nil, nil, nil, 268, 268, 268, 268, - nil, 268, 268, 268, 268, nil, nil, nil, nil, 268, - 268, nil, nil, nil, 269, 269, 269, 268, 269, 268, - 268, 268, 269, 269, 268, 268, nil, 269, nil, 269, - 269, 269, 269, 269, 269, 269, nil, nil, nil, nil, - nil, 269, 269, 269, 269, 269, 269, 269, nil, nil, - 269, nil, nil, nil, nil, nil, nil, 269, nil, nil, - 269, 269, 269, 269, 269, 269, 269, 269, nil, 269, - 269, 269, nil, 269, 269, 269, 269, 269, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 269, nil, nil, - 269, nil, nil, 269, 269, nil, nil, 269, nil, nil, - nil, nil, nil, 269, nil, nil, nil, nil, nil, nil, - nil, nil, 269, nil, nil, nil, nil, 269, 269, 269, - 269, nil, 269, 269, 269, 269, nil, nil, nil, nil, - 269, 269, nil, nil, nil, 270, 270, 270, 269, 270, - 269, 269, 269, 270, 270, 269, 269, nil, 270, nil, - 270, 270, 270, 270, 270, 270, 270, nil, nil, nil, - nil, nil, 270, 270, 270, 270, 270, 270, 270, nil, - nil, 270, nil, nil, nil, nil, nil, nil, 270, nil, - nil, 270, 270, 270, 270, 270, 270, 270, 270, nil, - 270, 270, 270, nil, 270, 270, 270, 270, 270, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 270, nil, - nil, 270, nil, nil, 270, 270, nil, nil, 270, nil, - nil, nil, nil, nil, 270, nil, nil, nil, nil, nil, - nil, nil, nil, 270, nil, nil, nil, nil, 270, 270, - 270, 270, nil, 270, 270, 270, 270, nil, nil, nil, - nil, 270, 270, nil, nil, nil, 271, 271, 271, 270, - 271, 270, 270, 270, 271, 271, 270, 270, nil, 271, - nil, 271, 271, 271, 271, 271, 271, 271, nil, nil, - nil, nil, nil, 271, 271, 271, 271, 271, 271, 271, - nil, nil, 271, nil, nil, nil, nil, nil, nil, 271, - nil, nil, 271, 271, 271, 271, 271, 271, 271, 271, - nil, 271, 271, 271, nil, 271, 271, 271, 271, 271, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 271, - nil, nil, 271, nil, nil, 271, 271, nil, nil, 271, - nil, nil, nil, nil, nil, 271, nil, nil, nil, nil, - nil, nil, nil, nil, 271, nil, nil, nil, nil, 271, - 271, 271, 271, nil, 271, 271, 271, 271, nil, nil, - nil, nil, 271, 271, nil, nil, nil, 272, 272, 272, - 271, 272, 271, 271, 271, 272, 272, 271, 271, nil, - 272, nil, 272, 272, 272, 272, 272, 272, 272, nil, - nil, nil, nil, nil, 272, 272, 272, 272, 272, 272, - 272, nil, nil, 272, nil, nil, nil, nil, nil, nil, - 272, nil, nil, 272, 272, 272, 272, 272, 272, 272, - 272, nil, 272, 272, 272, nil, 272, 272, 272, 272, - 272, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 272, nil, nil, 272, nil, nil, 272, 272, nil, nil, - 272, nil, nil, nil, nil, nil, 272, nil, nil, nil, - nil, nil, nil, nil, nil, 272, nil, nil, nil, nil, - 272, 272, 272, 272, nil, 272, 272, 272, 272, nil, - nil, nil, nil, 272, 272, nil, nil, nil, 273, 273, - 273, 272, 273, 272, 272, 272, 273, 273, 272, 272, - nil, 273, nil, 273, 273, 273, 273, 273, 273, 273, - nil, nil, nil, nil, nil, 273, 273, 273, 273, 273, - 273, 273, nil, nil, 273, nil, nil, nil, nil, nil, - nil, 273, nil, nil, 273, 273, 273, 273, 273, 273, - 273, 273, nil, 273, 273, 273, nil, 273, 273, 273, - 273, 273, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 273, nil, nil, 273, nil, nil, 273, 273, nil, - nil, 273, nil, nil, nil, nil, nil, 273, nil, nil, - nil, nil, nil, nil, nil, nil, 273, nil, nil, nil, - nil, 273, 273, 273, 273, nil, 273, 273, 273, 273, - nil, nil, nil, nil, 273, 273, nil, nil, nil, 274, - 274, 274, 273, 274, 273, 273, 273, 274, 274, 273, - 273, nil, 274, nil, 274, 274, 274, 274, 274, 274, - 274, nil, nil, nil, nil, nil, 274, 274, 274, 274, - 274, 274, 274, nil, nil, 274, nil, nil, nil, nil, - nil, nil, 274, nil, nil, 274, 274, 274, 274, 274, - 274, 274, 274, nil, 274, 274, 274, nil, 274, 274, - 274, 274, 274, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 274, nil, nil, 274, nil, nil, 274, 274, - nil, nil, 274, nil, nil, nil, nil, nil, 274, nil, - nil, nil, nil, nil, nil, nil, nil, 274, nil, nil, - nil, nil, 274, 274, 274, 274, nil, 274, 274, 274, - 274, nil, nil, nil, nil, 274, 274, nil, nil, nil, - 275, 275, 275, 274, 275, 274, 274, 274, 275, 275, - 274, 274, nil, 275, nil, 275, 275, 275, 275, 275, - 275, 275, nil, nil, nil, nil, nil, 275, 275, 275, - 275, 275, 275, 275, nil, nil, 275, nil, nil, nil, - nil, nil, nil, 275, nil, nil, 275, 275, 275, 275, - 275, 275, 275, 275, nil, 275, 275, 275, nil, 275, - 275, 275, 275, 275, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 275, nil, nil, 275, nil, nil, 275, - 275, nil, nil, 275, nil, nil, nil, nil, nil, 275, - nil, nil, nil, nil, nil, nil, nil, nil, 275, nil, - nil, nil, nil, 275, 275, 275, 275, nil, 275, 275, - 275, 275, nil, nil, nil, nil, 275, 275, nil, nil, - nil, 276, 276, 276, 275, 276, 275, 275, 275, 276, - 276, 275, 275, nil, 276, nil, 276, 276, 276, 276, - 276, 276, 276, nil, nil, nil, nil, nil, 276, 276, - 276, 276, 276, 276, 276, nil, nil, 276, nil, nil, - nil, nil, nil, nil, 276, nil, nil, 276, 276, 276, - 276, 276, 276, 276, 276, nil, 276, 276, 276, nil, - 276, 276, 276, 276, 276, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 276, nil, nil, 276, nil, nil, - 276, 276, nil, nil, 276, nil, nil, nil, nil, nil, - 276, nil, nil, nil, nil, nil, nil, nil, nil, 276, - nil, nil, nil, nil, 276, 276, 276, 276, nil, 276, - 276, 276, 276, nil, nil, nil, nil, 276, 276, nil, - nil, nil, 277, 277, 277, 276, 277, 276, 276, 276, - 277, 277, 276, 276, nil, 277, nil, 277, 277, 277, - 277, 277, 277, 277, nil, nil, nil, nil, nil, 277, - 277, 277, 277, 277, 277, 277, nil, nil, 277, nil, - nil, nil, nil, nil, nil, 277, nil, nil, 277, 277, - 277, 277, 277, 277, 277, 277, nil, 277, 277, 277, - nil, 277, 277, 277, 277, 277, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 277, nil, nil, 277, nil, - nil, 277, 277, nil, nil, 277, nil, nil, nil, nil, - nil, 277, nil, nil, nil, nil, nil, nil, nil, nil, - 277, nil, nil, nil, nil, 277, 277, 277, 277, nil, - 277, 277, 277, 277, nil, nil, nil, nil, 277, 277, - nil, nil, nil, 278, 278, 278, 277, 278, 277, 277, - 277, 278, 278, 277, 277, nil, 278, nil, 278, 278, - 278, 278, 278, 278, 278, nil, nil, nil, nil, nil, - 278, 278, 278, 278, 278, 278, 278, nil, nil, 278, - nil, nil, nil, nil, nil, nil, 278, nil, nil, 278, - 278, 278, 278, 278, 278, 278, 278, nil, 278, 278, - 278, nil, 278, 278, 278, 278, 278, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 278, nil, nil, 278, - nil, nil, 278, 278, nil, nil, 278, nil, nil, nil, - nil, nil, 278, nil, nil, nil, nil, nil, nil, nil, - nil, 278, nil, nil, nil, nil, 278, 278, 278, 278, - nil, 278, 278, 278, 278, nil, nil, nil, nil, 278, - 278, nil, nil, nil, 279, 279, 279, 278, 279, 278, - 278, 278, 279, 279, 278, 278, nil, 279, nil, 279, - 279, 279, 279, 279, 279, 279, nil, nil, nil, nil, - nil, 279, 279, 279, 279, 279, 279, 279, nil, nil, - 279, nil, nil, nil, nil, nil, nil, 279, nil, nil, - 279, 279, 279, 279, 279, 279, 279, 279, nil, 279, - 279, 279, nil, 279, 279, 279, 279, 279, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 279, nil, nil, - 279, nil, nil, 279, 279, nil, nil, 279, nil, nil, - nil, nil, nil, 279, nil, nil, nil, nil, nil, nil, - nil, nil, 279, nil, nil, nil, nil, 279, 279, 279, - 279, nil, 279, 279, 279, 279, nil, nil, nil, nil, - 279, 279, nil, nil, nil, 284, 284, 284, 279, 284, - 279, 279, 279, 284, 284, 279, 279, nil, 284, nil, - 284, 284, 284, 284, 284, 284, 284, nil, nil, nil, - nil, nil, 284, 284, 284, 284, 284, 284, 284, nil, - nil, 284, nil, nil, nil, nil, nil, nil, 284, nil, - nil, 284, 284, 284, 284, 284, 284, 284, 284, nil, - 284, 284, 284, nil, 284, 284, 284, 284, 284, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 284, nil, - nil, 284, nil, nil, 284, 284, nil, nil, 284, nil, - nil, nil, nil, nil, 284, nil, nil, nil, nil, nil, - nil, nil, nil, 284, nil, nil, nil, nil, 284, 284, - 284, 284, nil, 284, 284, 284, 284, nil, nil, nil, - nil, 284, 284, nil, nil, nil, 300, 300, 300, 284, - 300, 284, 284, 284, 300, 300, 284, 284, nil, 300, - nil, 300, 300, 300, 300, 300, 300, 300, nil, nil, - nil, nil, nil, 300, 300, 300, 300, 300, 300, 300, - nil, nil, 300, nil, nil, nil, nil, nil, nil, 300, - nil, nil, 300, 300, 300, 300, 300, 300, 300, 300, - nil, 300, 300, 300, nil, 300, 300, 300, 300, 300, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 300, - nil, nil, 300, nil, nil, 300, 300, nil, nil, 300, - nil, nil, nil, nil, nil, 300, nil, nil, nil, nil, - nil, nil, nil, nil, 300, nil, nil, nil, nil, 300, - 300, 300, 300, nil, 300, 300, 300, 300, nil, nil, - nil, nil, 300, 300, nil, nil, nil, 307, 307, 307, - 300, 307, 300, 300, 300, 307, 307, 300, 300, nil, - 307, nil, 307, 307, 307, 307, 307, 307, 307, nil, - nil, nil, nil, nil, 307, 307, 307, 307, 307, 307, - 307, nil, nil, 307, nil, nil, nil, nil, nil, nil, - 307, nil, nil, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, nil, 307, 307, 307, 307, - 307, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 307, nil, nil, 307, nil, nil, 307, 307, nil, nil, - 307, nil, 307, nil, 307, nil, 307, nil, nil, 307, - nil, nil, nil, nil, nil, 307, nil, nil, nil, nil, - 307, 307, 307, 307, nil, 307, 307, 307, 307, nil, - nil, nil, nil, 307, 307, nil, nil, nil, 308, 308, - 308, 307, 308, 307, 307, 307, 308, 308, 307, 307, - nil, 308, nil, 308, 308, 308, 308, 308, 308, 308, - nil, nil, nil, nil, nil, 308, 308, 308, 308, 308, - 308, 308, nil, nil, 308, nil, nil, nil, nil, nil, - nil, 308, nil, nil, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, nil, 308, 308, 308, - 308, 308, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 308, nil, nil, 308, nil, nil, 308, 308, nil, - nil, 308, nil, 308, nil, 308, nil, 308, nil, nil, - 308, nil, nil, nil, nil, nil, 308, nil, nil, nil, - nil, 308, 308, 308, 308, nil, 308, 308, 308, 308, - nil, nil, nil, nil, 308, 308, nil, nil, nil, 316, - 316, 316, 308, 316, 308, 308, 308, 316, 316, 308, - 308, nil, 316, nil, 316, 316, 316, 316, 316, 316, - 316, nil, nil, nil, nil, nil, 316, 316, 316, 316, - 316, 316, 316, nil, nil, 316, nil, nil, nil, nil, - nil, nil, 316, nil, nil, 316, 316, 316, 316, 316, - 316, 316, 316, 316, 316, 316, 316, nil, 316, 316, - 316, 316, 316, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 316, nil, nil, 316, nil, nil, 316, 316, - nil, nil, 316, nil, 316, nil, 316, nil, 316, nil, - nil, 316, nil, nil, nil, nil, nil, 316, nil, nil, - nil, nil, 316, 316, 316, 316, nil, 316, 316, 316, - 316, nil, nil, nil, nil, 316, 316, 316, nil, nil, - 323, 323, 323, 316, 323, 316, 316, 316, 323, 323, - 316, 316, nil, 323, nil, 323, 323, 323, 323, 323, - 323, 323, nil, nil, nil, nil, nil, 323, 323, 323, - 323, 323, 323, 323, nil, nil, 323, nil, nil, nil, - nil, nil, nil, 323, nil, nil, 323, 323, 323, 323, - 323, 323, 323, 323, nil, 323, 323, 323, nil, 323, - 323, 323, 323, 323, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 323, nil, nil, 323, nil, nil, 323, - 323, nil, nil, 323, nil, nil, nil, nil, nil, 323, - nil, nil, nil, nil, nil, nil, nil, nil, 323, nil, - nil, nil, nil, 323, 323, 323, 323, nil, 323, 323, - 323, 323, nil, nil, nil, nil, 323, 323, nil, nil, - nil, 326, 326, 326, 323, 326, 323, 323, 323, 326, - 326, 323, 323, nil, 326, nil, 326, 326, 326, 326, - 326, 326, 326, nil, nil, nil, nil, nil, 326, 326, - 326, 326, 326, 326, 326, nil, nil, 326, nil, nil, - nil, nil, nil, nil, 326, nil, nil, 326, 326, 326, - 326, 326, 326, 326, 326, nil, 326, 326, 326, nil, - 326, 326, 326, 326, 326, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 326, nil, nil, 326, nil, nil, - 326, 326, nil, nil, 326, nil, nil, nil, nil, nil, - 326, nil, nil, nil, nil, nil, nil, nil, nil, 326, - nil, nil, nil, nil, 326, 326, 326, 326, nil, 326, - 326, 326, 326, nil, nil, nil, nil, 326, 326, nil, - nil, nil, 329, 329, 329, 326, 329, 326, 326, 326, - 329, 329, 326, 326, nil, 329, nil, 329, 329, 329, - 329, 329, 329, 329, nil, nil, nil, nil, nil, 329, - 329, 329, 329, 329, 329, 329, nil, nil, 329, nil, - nil, nil, nil, nil, nil, 329, nil, nil, 329, 329, - 329, 329, 329, 329, 329, 329, nil, 329, 329, 329, - nil, 329, 329, 329, 329, 329, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 329, nil, nil, 329, nil, - nil, 329, 329, nil, nil, 329, nil, nil, nil, nil, - nil, 329, nil, nil, nil, nil, nil, nil, nil, nil, - 329, nil, nil, nil, nil, 329, 329, 329, 329, nil, - 329, 329, 329, 329, nil, nil, nil, nil, 329, 329, - nil, nil, nil, 330, 330, 330, 329, 330, 329, 329, - 329, 330, 330, 329, 329, nil, 330, nil, 330, 330, - 330, 330, 330, 330, 330, nil, nil, nil, nil, nil, - 330, 330, 330, 330, 330, 330, 330, nil, nil, 330, - nil, nil, nil, nil, nil, nil, 330, nil, nil, 330, - 330, 330, 330, 330, 330, 330, 330, nil, 330, 330, - 330, nil, 330, 330, 330, 330, 330, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 330, nil, nil, 330, - nil, nil, 330, 330, nil, nil, 330, nil, nil, nil, - nil, nil, 330, nil, nil, nil, nil, nil, nil, nil, - nil, 330, nil, nil, nil, nil, 330, 330, 330, 330, - nil, 330, 330, 330, 330, nil, nil, nil, nil, 330, - 330, nil, nil, nil, nil, nil, nil, 330, nil, 330, - 330, 330, nil, nil, 330, 330, 335, 335, 335, 335, - 335, nil, nil, nil, 335, 335, nil, nil, nil, 335, - nil, 335, 335, 335, 335, 335, 335, 335, nil, nil, - nil, nil, nil, 335, 335, 335, 335, 335, 335, 335, - nil, nil, 335, nil, nil, nil, nil, nil, 335, 335, - nil, 335, 335, 335, 335, 335, 335, 335, 335, 335, - nil, 335, 335, 335, nil, 335, 335, 335, 335, 335, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 335, - nil, nil, 335, nil, nil, 335, 335, nil, nil, 335, - nil, 335, nil, nil, nil, 335, nil, nil, nil, nil, - nil, nil, nil, nil, 335, nil, nil, nil, nil, 335, - 335, 335, 335, nil, 335, 335, 335, 335, nil, nil, - nil, nil, 335, 335, nil, nil, nil, 371, 371, 371, - 335, 371, 335, 335, 335, 371, 371, 335, 335, nil, - 371, nil, 371, 371, 371, 371, 371, 371, 371, nil, - nil, nil, nil, nil, 371, 371, 371, 371, 371, 371, - 371, nil, nil, 371, nil, nil, nil, nil, nil, nil, - 371, nil, nil, 371, 371, 371, 371, 371, 371, 371, - 371, nil, 371, 371, 371, nil, 371, 371, 371, 371, - 371, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 371, nil, nil, 371, nil, nil, 371, 371, nil, nil, - 371, nil, nil, nil, nil, nil, 371, nil, nil, nil, - nil, nil, nil, nil, nil, 371, nil, nil, nil, nil, - 371, 371, 371, 371, nil, 371, 371, 371, 371, nil, - nil, nil, nil, 371, 371, nil, nil, nil, 387, 387, - 387, 371, 387, 371, 371, 371, 387, 387, 371, 371, - nil, 387, nil, 387, 387, 387, 387, 387, 387, 387, - nil, nil, nil, nil, nil, 387, 387, 387, 387, 387, - 387, 387, nil, nil, 387, nil, nil, nil, nil, nil, - nil, 387, nil, nil, 387, 387, 387, 387, 387, 387, - 387, 387, nil, 387, 387, 387, nil, 387, 387, 387, - 387, 387, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 387, nil, nil, 387, nil, nil, 387, 387, nil, - nil, 387, nil, nil, nil, nil, nil, 387, nil, nil, - nil, nil, nil, nil, nil, nil, 387, nil, nil, nil, - nil, 387, 387, 387, 387, nil, 387, 387, 387, 387, - nil, nil, nil, nil, 387, 387, nil, nil, nil, 408, - 408, 408, 387, 408, 387, 387, 387, 408, 408, 387, - 387, nil, 408, nil, 408, 408, 408, 408, 408, 408, - 408, nil, nil, nil, nil, nil, 408, 408, 408, 408, - 408, 408, 408, nil, nil, 408, nil, nil, nil, nil, - nil, nil, 408, nil, nil, 408, 408, 408, 408, 408, - 408, 408, 408, nil, 408, 408, 408, nil, 408, 408, - 408, 408, 408, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 408, nil, nil, 408, nil, nil, 408, 408, - nil, nil, 408, nil, nil, nil, nil, nil, 408, nil, - nil, nil, nil, nil, nil, nil, nil, 408, nil, nil, - nil, nil, 408, 408, 408, 408, nil, 408, 408, 408, - 408, nil, nil, nil, nil, 408, 408, nil, nil, nil, - 438, 438, 438, 408, 438, 408, 408, 408, 438, 438, - 408, 408, nil, 438, nil, 438, 438, 438, 438, 438, - 438, 438, nil, nil, nil, nil, nil, 438, 438, 438, - 438, 438, 438, 438, nil, nil, 438, nil, nil, nil, - nil, nil, nil, 438, nil, nil, 438, 438, 438, 438, - 438, 438, 438, 438, nil, 438, 438, 438, nil, 438, - 438, 438, 438, 438, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 438, nil, nil, 438, nil, nil, 438, - 438, nil, nil, 438, nil, nil, nil, nil, nil, 438, - nil, nil, nil, nil, nil, nil, nil, nil, 438, nil, - nil, nil, nil, 438, 438, 438, 438, nil, 438, 438, - 438, 438, nil, nil, nil, nil, 438, 438, nil, nil, - nil, nil, nil, nil, 438, nil, 438, 438, 438, 461, - nil, 438, 438, nil, nil, nil, 461, 461, 461, nil, - nil, 461, 461, 461, nil, 461, nil, nil, nil, nil, - nil, nil, nil, 461, 461, 461, 461, nil, nil, nil, - nil, nil, nil, nil, nil, 461, 461, nil, 461, 461, - 461, 461, 461, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 461, 461, 461, 461, 461, - 461, 461, 461, 461, 461, 461, 461, 461, 461, nil, - nil, 461, 461, 461, nil, nil, 461, nil, 461, 461, - nil, nil, 461, 461, nil, 461, nil, 461, nil, 461, - nil, 461, 461, nil, 461, 461, 461, 461, 461, nil, - 461, 461, 461, 1106, nil, 1106, 1106, 1106, 1106, 1106, - nil, nil, nil, nil, nil, nil, 461, nil, 1106, 461, - 461, 471, 461, nil, 461, nil, nil, nil, 471, 471, - 471, 461, nil, 471, 471, 471, nil, 471, nil, nil, - 1106, nil, nil, nil, nil, 471, 471, 471, 471, 471, - nil, 1106, 1106, nil, nil, nil, 1106, 471, 471, nil, - 471, 471, 471, 471, 471, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 471, 471, 471, - 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, - 471, nil, nil, 471, 471, 471, nil, nil, 471, nil, - nil, 471, nil, nil, 471, 471, nil, 471, nil, 471, - nil, 471, nil, 471, 471, nil, 471, 471, 471, 471, - 471, nil, 471, 471, 471, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 471, nil, - nil, 471, 471, 471, 471, nil, 471, 472, 471, nil, - nil, nil, nil, 471, 472, 472, 472, nil, nil, 472, - 472, 472, nil, 472, nil, nil, nil, nil, nil, nil, - nil, 472, 472, 472, 472, 472, nil, nil, nil, nil, - nil, nil, nil, 472, 472, nil, 472, 472, 472, 472, - 472, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 472, 472, 472, 472, 472, 472, 472, - 472, 472, 472, 472, 472, 472, 472, nil, nil, 472, - 472, 472, nil, nil, 472, nil, nil, 472, nil, nil, - 472, 472, nil, 472, nil, 472, nil, 472, nil, 472, - 472, nil, 472, 472, 472, 472, 472, nil, 472, 472, - 472, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 472, nil, nil, 472, 472, 472, - 472, nil, 472, nil, 472, nil, 473, 473, 473, 472, - 473, nil, nil, nil, 473, 473, nil, nil, nil, 473, - nil, 473, 473, 473, 473, 473, 473, 473, nil, nil, - nil, nil, nil, 473, 473, 473, 473, 473, 473, 473, - nil, nil, 473, nil, nil, nil, nil, nil, nil, 473, - nil, nil, 473, 473, 473, 473, 473, 473, 473, 473, - nil, 473, 473, 473, nil, 473, 473, 473, 473, 473, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 473, - nil, nil, 473, nil, nil, 473, 473, nil, nil, 473, - nil, nil, nil, nil, nil, 473, nil, nil, nil, nil, - nil, nil, nil, nil, 473, nil, nil, nil, nil, 473, - 473, 473, 473, nil, 473, 473, 473, 473, nil, nil, - nil, nil, 473, 473, nil, nil, nil, 500, 500, 500, - 473, 500, 473, 473, 473, 500, 500, 473, 473, nil, - 500, nil, 500, 500, 500, 500, 500, 500, 500, nil, - nil, nil, nil, nil, 500, 500, 500, 500, 500, 500, - 500, nil, nil, 500, nil, nil, nil, nil, nil, nil, - 500, nil, nil, 500, 500, 500, 500, 500, 500, 500, - 500, nil, 500, 500, 500, nil, 500, 500, 500, 500, - 500, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 500, nil, nil, 500, nil, nil, 500, 500, nil, nil, - 500, nil, nil, nil, nil, nil, 500, nil, nil, nil, - nil, nil, nil, nil, nil, 500, nil, nil, nil, nil, - 500, 500, 500, 500, nil, 500, 500, 500, 500, nil, - nil, nil, nil, 500, 500, nil, nil, nil, 513, 513, - 513, 500, 513, 500, 500, 500, 513, 513, 500, 500, - nil, 513, nil, 513, 513, 513, 513, 513, 513, 513, - nil, nil, nil, nil, nil, 513, 513, 513, 513, 513, - 513, 513, nil, nil, 513, nil, nil, nil, nil, nil, - nil, 513, nil, nil, 513, 513, 513, 513, 513, 513, - 513, 513, nil, 513, 513, 513, nil, 513, 513, 513, - 513, 513, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 513, nil, nil, 513, nil, nil, 513, 513, nil, - nil, 513, nil, nil, nil, nil, nil, 513, nil, nil, - nil, nil, nil, nil, nil, nil, 513, nil, nil, nil, - nil, 513, 513, 513, 513, nil, 513, 513, 513, 513, - nil, nil, nil, nil, 513, 513, nil, nil, nil, 523, - 523, 523, 513, 523, 513, 513, 513, 523, 523, 513, - 513, nil, 523, nil, 523, 523, 523, 523, 523, 523, - 523, nil, nil, nil, nil, nil, 523, 523, 523, 523, - 523, 523, 523, nil, nil, 523, nil, nil, nil, nil, - nil, nil, 523, nil, nil, 523, 523, 523, 523, 523, - 523, 523, 523, 523, 523, 523, 523, nil, 523, 523, - 523, 523, 523, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 523, nil, nil, 523, nil, nil, 523, 523, - nil, nil, 523, nil, 523, nil, 523, nil, 523, nil, - nil, 523, nil, nil, nil, nil, nil, 523, nil, nil, - nil, nil, 523, 523, 523, 523, nil, 523, 523, 523, - 523, nil, nil, nil, nil, 523, 523, nil, nil, nil, - 525, 525, 525, 523, 525, 523, 523, 523, 525, 525, - 523, 523, nil, 525, nil, 525, 525, 525, 525, 525, - 525, 525, nil, nil, nil, nil, nil, 525, 525, 525, - 525, 525, 525, 525, nil, nil, 525, nil, nil, nil, - nil, nil, nil, 525, nil, nil, 525, 525, 525, 525, - 525, 525, 525, 525, nil, 525, 525, 525, nil, 525, - 525, 525, 525, 525, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 525, nil, nil, 525, nil, nil, 525, - 525, nil, nil, 525, nil, nil, nil, nil, nil, 525, - nil, nil, nil, nil, nil, nil, nil, nil, 525, nil, - nil, nil, nil, 525, 525, 525, 525, nil, 525, 525, - 525, 525, nil, nil, nil, nil, 525, 525, nil, nil, - nil, 526, 526, 526, 525, 526, 525, 525, 525, 526, - 526, 525, 525, nil, 526, nil, 526, 526, 526, 526, - 526, 526, 526, nil, nil, nil, nil, nil, 526, 526, - 526, 526, 526, 526, 526, nil, nil, 526, nil, nil, - nil, nil, nil, nil, 526, nil, nil, 526, 526, 526, - 526, 526, 526, 526, 526, nil, 526, 526, 526, nil, - 526, 526, 526, 526, 526, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 526, nil, nil, 526, nil, nil, - 526, 526, nil, nil, 526, nil, nil, nil, nil, nil, - 526, nil, nil, nil, nil, nil, nil, nil, nil, 526, - nil, nil, nil, nil, 526, 526, 526, 526, nil, 526, - 526, 526, 526, nil, nil, nil, nil, 526, 526, nil, - nil, nil, 527, 527, 527, 526, 527, 526, 526, 526, - 527, 527, 526, 526, nil, 527, nil, 527, 527, 527, - 527, 527, 527, 527, nil, nil, nil, nil, nil, 527, - 527, 527, 527, 527, 527, 527, nil, nil, 527, nil, - nil, nil, nil, nil, nil, 527, nil, nil, 527, 527, - 527, 527, 527, 527, 527, 527, nil, 527, 527, 527, - nil, 527, 527, 527, 527, 527, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 527, nil, nil, 527, nil, - nil, 527, 527, nil, nil, 527, nil, nil, nil, nil, - nil, 527, nil, nil, nil, nil, nil, nil, nil, nil, - 527, nil, nil, nil, nil, 527, 527, 527, 527, nil, - 527, 527, 527, 527, nil, nil, nil, nil, 527, 527, - nil, nil, nil, nil, nil, nil, 527, nil, 527, 527, - 527, 559, nil, 527, 527, nil, nil, nil, 559, 559, - 559, nil, nil, 559, 559, 559, 235, 559, 235, 235, - 235, 235, 235, nil, nil, 559, 559, 559, nil, nil, - nil, 235, nil, nil, nil, nil, nil, 559, 559, nil, - 559, 559, 559, 559, 559, nil, 410, nil, 410, 410, - 410, 410, 410, 235, nil, nil, nil, nil, nil, nil, - nil, 410, 235, 235, 235, 235, nil, nil, nil, 235, - nil, 1101, nil, 1101, 1101, 1101, 1101, 1101, 559, nil, - nil, nil, nil, 410, 410, 559, 1101, nil, nil, nil, - 559, 559, 410, 410, 410, 410, nil, nil, nil, 410, - nil, nil, nil, nil, nil, nil, nil, nil, 1101, 235, - nil, nil, nil, 559, 559, nil, nil, 1101, 1101, 1101, - 1101, nil, nil, nil, 1101, nil, nil, nil, 559, nil, - nil, 559, nil, 564, 564, 564, 559, 564, nil, 410, - nil, 564, 564, 559, nil, nil, 564, nil, 564, 564, - 564, 564, 564, 564, 564, nil, nil, nil, nil, nil, - 564, 564, 564, 564, 564, 564, 564, nil, nil, 564, - nil, nil, nil, nil, nil, nil, 564, nil, nil, 564, - 564, 564, 564, 564, 564, 564, 564, nil, 564, 564, - 564, nil, 564, 564, 564, 564, 564, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 564, nil, nil, 564, - nil, nil, 564, 564, nil, nil, 564, nil, nil, nil, - nil, nil, 564, nil, nil, nil, nil, nil, nil, nil, - nil, 564, nil, nil, nil, nil, 564, 564, 564, 564, - nil, 564, 564, 564, 564, nil, nil, nil, nil, 564, - 564, nil, nil, nil, 574, 574, 574, 564, 574, 564, - 564, 564, 574, 574, 564, 564, nil, 574, nil, 574, - 574, 574, 574, 574, 574, 574, nil, nil, nil, nil, - nil, 574, 574, 574, 574, 574, 574, 574, nil, nil, - 574, nil, nil, nil, nil, nil, nil, 574, nil, nil, - 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, - 574, 574, nil, 574, 574, 574, 574, 574, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 574, nil, nil, - 574, nil, nil, 574, 574, nil, nil, 574, nil, 574, - nil, 574, nil, 574, nil, nil, 574, nil, nil, nil, - nil, nil, 574, nil, nil, nil, nil, 574, 574, 574, - 574, nil, 574, 574, 574, 574, nil, nil, nil, nil, - 574, 574, nil, nil, nil, 576, 576, 576, 574, 576, - 574, 574, 574, 576, 576, 574, 574, nil, 576, nil, - 576, 576, 576, 576, 576, 576, 576, nil, nil, nil, - nil, nil, 576, 576, 576, 576, 576, 576, 576, nil, - nil, 576, nil, nil, nil, nil, nil, nil, 576, nil, - nil, 576, 576, 576, 576, 576, 576, 576, 576, 576, - 576, 576, 576, nil, 576, 576, 576, 576, 576, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 576, nil, - nil, 576, nil, nil, 576, 576, nil, nil, 576, nil, - nil, nil, 576, nil, 576, nil, nil, 576, nil, nil, - nil, nil, nil, 576, nil, nil, nil, nil, 576, 576, - 576, 576, nil, 576, 576, 576, 576, nil, nil, nil, - nil, 576, 576, nil, nil, nil, 578, 578, 578, 576, - 578, 576, 576, 576, 578, 578, 576, 576, nil, 578, - nil, 578, 578, 578, 578, 578, 578, 578, nil, nil, - nil, nil, nil, 578, 578, 578, 578, 578, 578, 578, - nil, nil, 578, nil, nil, nil, nil, nil, nil, 578, - nil, nil, 578, 578, 578, 578, 578, 578, 578, 578, - nil, 578, 578, 578, nil, 578, 578, 578, 578, 578, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 578, - nil, nil, 578, nil, nil, 578, 578, nil, nil, 578, - nil, nil, nil, nil, nil, 578, nil, nil, nil, nil, - nil, nil, nil, nil, 578, nil, nil, nil, nil, 578, - 578, 578, 578, nil, 578, 578, 578, 578, nil, nil, - nil, nil, 578, 578, nil, nil, nil, nil, nil, nil, - 578, nil, 578, 578, 578, nil, nil, 578, 578, 584, - 584, 584, 584, 584, nil, nil, nil, 584, 584, nil, - nil, nil, 584, nil, 584, 584, 584, 584, 584, 584, - 584, nil, nil, nil, nil, nil, 584, 584, 584, 584, - 584, 584, 584, nil, nil, 584, nil, nil, nil, nil, - nil, 584, 584, 584, 584, 584, 584, 584, 584, 584, - 584, 584, 584, nil, 584, 584, 584, nil, 584, 584, - 584, 584, 584, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 584, nil, nil, 584, nil, nil, 584, 584, - nil, nil, 584, nil, 584, nil, nil, nil, 584, nil, - nil, nil, nil, nil, nil, nil, nil, 584, nil, nil, - nil, nil, 584, 584, 584, 584, nil, 584, 584, 584, - 584, nil, nil, nil, nil, 584, 584, nil, nil, nil, - nil, nil, 584, 584, nil, 584, 584, 584, nil, nil, - 584, 584, 594, 594, 594, nil, 594, nil, nil, nil, - 594, 594, nil, nil, nil, 594, nil, 594, 594, 594, - 594, 594, 594, 594, nil, nil, nil, nil, nil, 594, - 594, 594, 594, 594, 594, 594, nil, nil, 594, nil, - nil, nil, nil, nil, nil, 594, nil, nil, 594, 594, - 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, - nil, 594, 594, 594, 594, 594, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 594, nil, nil, 594, nil, - nil, 594, 594, nil, nil, 594, nil, 594, nil, 594, - nil, 594, nil, nil, 594, nil, nil, nil, nil, nil, - 594, nil, nil, nil, nil, 594, 594, 594, 594, nil, - 594, 594, 594, 594, nil, nil, nil, nil, 594, 594, - nil, nil, nil, 604, 604, 604, 594, 604, 594, 594, - 594, 604, 604, 594, 594, nil, 604, nil, 604, 604, - 604, 604, 604, 604, 604, nil, nil, nil, nil, nil, - 604, 604, 604, 604, 604, 604, 604, nil, nil, 604, - nil, nil, nil, nil, nil, nil, 604, nil, nil, 604, - 604, 604, 604, 604, 604, 604, 604, nil, 604, 604, - 604, nil, 604, 604, 604, 604, 604, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 604, nil, nil, 604, - nil, nil, 604, 604, nil, nil, 604, nil, nil, nil, - nil, nil, 604, nil, nil, nil, nil, nil, nil, nil, - nil, 604, nil, nil, nil, nil, 604, 604, 604, 604, - nil, 604, 604, 604, 604, nil, nil, nil, nil, 604, - 604, nil, nil, nil, 607, 607, 607, 604, 607, 604, - 604, 604, 607, 607, 604, 604, nil, 607, nil, 607, - 607, 607, 607, 607, 607, 607, nil, nil, nil, nil, - nil, 607, 607, 607, 607, 607, 607, 607, nil, nil, - 607, nil, nil, nil, nil, nil, nil, 607, nil, nil, - 607, 607, 607, 607, 607, 607, 607, 607, nil, 607, - 607, 607, nil, 607, 607, 607, 607, 607, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 607, nil, nil, - 607, nil, nil, 607, 607, nil, nil, 607, nil, nil, - nil, nil, nil, 607, nil, nil, nil, nil, nil, nil, - nil, nil, 607, nil, nil, nil, nil, 607, 607, 607, - 607, nil, 607, 607, 607, 607, nil, nil, nil, nil, - 607, 607, nil, nil, nil, 609, 609, 609, 607, 609, - 607, 607, 607, 609, 609, 607, 607, nil, 609, nil, - 609, 609, 609, 609, 609, 609, 609, nil, nil, nil, - nil, nil, 609, 609, 609, 609, 609, 609, 609, nil, - nil, 609, nil, nil, nil, nil, nil, nil, 609, nil, - nil, 609, 609, 609, 609, 609, 609, 609, 609, nil, - 609, 609, 609, nil, 609, 609, 609, 609, 609, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 609, nil, - nil, 609, nil, nil, 609, 609, nil, nil, 609, nil, - nil, nil, nil, nil, 609, nil, nil, nil, nil, nil, - nil, nil, nil, 609, nil, nil, nil, nil, 609, 609, - 609, 609, nil, 609, 609, 609, 609, nil, nil, nil, - nil, 609, 609, nil, nil, nil, 615, 615, 615, 609, - 615, 609, 609, 609, 615, 615, 609, 609, nil, 615, - nil, 615, 615, 615, 615, 615, 615, 615, nil, nil, - nil, nil, nil, 615, 615, 615, 615, 615, 615, 615, - nil, nil, 615, nil, nil, nil, nil, nil, nil, 615, - nil, nil, 615, 615, 615, 615, 615, 615, 615, 615, - 615, 615, 615, 615, nil, 615, 615, 615, 615, 615, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 615, - nil, nil, 615, nil, nil, 615, 615, nil, nil, 615, - nil, 615, nil, nil, nil, 615, nil, nil, 615, nil, - nil, nil, nil, nil, 615, nil, nil, nil, nil, 615, - 615, 615, 615, nil, 615, 615, 615, 615, nil, nil, - nil, nil, 615, 615, nil, nil, nil, 618, 618, 618, - 615, 618, 615, 615, 615, 618, 618, 615, 615, nil, - 618, nil, 618, 618, 618, 618, 618, 618, 618, nil, - nil, nil, nil, nil, 618, 618, 618, 618, 618, 618, - 618, nil, nil, 618, nil, nil, nil, nil, nil, nil, - 618, nil, nil, 618, 618, 618, 618, 618, 618, 618, - 618, 618, 618, 618, 618, nil, 618, 618, 618, 618, - 618, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 618, nil, nil, 618, nil, nil, 618, 618, nil, nil, - 618, nil, nil, nil, nil, nil, 618, nil, nil, 618, - nil, nil, nil, nil, nil, 618, nil, nil, nil, nil, - 618, 618, 618, 618, nil, 618, 618, 618, 618, nil, - nil, nil, nil, 618, 618, nil, nil, nil, 631, 631, - 631, 618, 631, 618, 618, 618, 631, 631, 618, 618, - nil, 631, nil, 631, 631, 631, 631, 631, 631, 631, - nil, nil, nil, nil, nil, 631, 631, 631, 631, 631, - 631, 631, nil, nil, 631, nil, nil, nil, nil, nil, - nil, 631, nil, nil, 631, 631, 631, 631, 631, 631, - 631, 631, nil, 631, 631, 631, nil, 631, 631, 631, - 631, 631, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 631, nil, nil, 631, nil, nil, 631, 631, nil, - nil, 631, nil, 631, nil, nil, nil, 631, nil, nil, - nil, nil, nil, nil, nil, nil, 631, nil, nil, nil, - nil, 631, 631, 631, 631, nil, 631, 631, 631, 631, - nil, nil, nil, nil, 631, 631, nil, nil, nil, 632, - 632, 632, 631, 632, 631, 631, 631, 632, 632, 631, - 631, nil, 632, nil, 632, 632, 632, 632, 632, 632, - 632, nil, nil, nil, nil, nil, 632, 632, 632, 632, - 632, 632, 632, nil, nil, 632, nil, nil, nil, nil, - nil, nil, 632, nil, nil, 632, 632, 632, 632, 632, - 632, 632, 632, 632, 632, 632, 632, nil, 632, 632, - 632, 632, 632, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 632, nil, nil, 632, nil, nil, 632, 632, - nil, nil, 632, nil, 632, nil, 632, nil, 632, nil, - nil, 632, nil, nil, nil, nil, nil, 632, nil, nil, - nil, nil, 632, 632, 632, 632, nil, 632, 632, 632, - 632, nil, nil, nil, nil, 632, 632, nil, nil, nil, - 642, 642, 642, 632, 642, 632, 632, 632, 642, 642, - 632, 632, nil, 642, nil, 642, 642, 642, 642, 642, - 642, 642, nil, nil, nil, nil, nil, 642, 642, 642, - 642, 642, 642, 642, nil, nil, 642, nil, nil, nil, - nil, nil, nil, 642, nil, nil, 642, 642, 642, 642, - 642, 642, 642, 642, 642, 642, 642, 642, nil, 642, - 642, 642, 642, 642, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 642, nil, nil, 642, nil, nil, 642, - 642, nil, nil, 642, nil, 642, nil, 642, nil, 642, - nil, nil, 642, nil, nil, nil, nil, nil, 642, nil, - nil, nil, nil, 642, 642, 642, 642, nil, 642, 642, - 642, 642, nil, nil, nil, nil, 642, 642, nil, nil, - nil, nil, nil, nil, 642, nil, 642, 642, 642, nil, - nil, 642, 642, 673, 673, 673, 673, 673, nil, nil, - nil, 673, 673, nil, nil, nil, 673, nil, 673, 673, - 673, 673, 673, 673, 673, nil, nil, nil, nil, nil, - 673, 673, 673, 673, 673, 673, 673, nil, nil, 673, - nil, nil, nil, nil, nil, 673, 673, nil, 673, 673, - 673, 673, 673, 673, 673, 673, 673, nil, 673, 673, - 673, nil, 673, 673, 673, 673, 673, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 673, nil, nil, 673, - nil, nil, 673, 673, nil, nil, 673, nil, 673, nil, - nil, nil, 673, nil, nil, nil, nil, nil, nil, nil, - nil, 673, nil, nil, nil, nil, 673, 673, 673, 673, - nil, 673, 673, 673, 673, nil, nil, nil, nil, 673, - 673, nil, nil, nil, 674, 674, 674, 673, 674, 673, - 673, 673, 674, 674, 673, 673, nil, 674, nil, 674, - 674, 674, 674, 674, 674, 674, nil, nil, nil, nil, - nil, 674, 674, 674, 674, 674, 674, 674, nil, nil, - 674, nil, nil, nil, nil, nil, nil, 674, nil, nil, - 674, 674, 674, 674, 674, 674, 674, 674, nil, 674, - 674, 674, nil, 674, 674, 674, 674, 674, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 674, nil, nil, - 674, nil, nil, 674, 674, nil, nil, 674, nil, 674, - nil, nil, nil, 674, nil, nil, nil, nil, nil, nil, - nil, nil, 674, nil, nil, nil, nil, 674, 674, 674, - 674, nil, 674, 674, 674, 674, nil, nil, nil, nil, - 674, 674, nil, nil, nil, 676, 676, 676, 674, 676, - 674, 674, 674, 676, 676, 674, 674, nil, 676, nil, - 676, 676, 676, 676, 676, 676, 676, nil, nil, nil, - nil, nil, 676, 676, 676, 676, 676, 676, 676, nil, - nil, 676, nil, nil, nil, nil, nil, nil, 676, nil, - nil, 676, 676, 676, 676, 676, 676, 676, 676, nil, - 676, 676, 676, nil, 676, 676, 676, 676, 676, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 676, nil, - nil, 676, nil, nil, 676, 676, nil, nil, 676, nil, - nil, nil, nil, nil, 676, nil, nil, nil, nil, nil, - nil, nil, nil, 676, nil, nil, nil, nil, 676, 676, - 676, 676, nil, 676, 676, 676, 676, nil, nil, nil, - nil, 676, 676, nil, nil, nil, 677, 677, 677, 676, - 677, 676, 676, 676, 677, 677, 676, 676, nil, 677, - nil, 677, 677, 677, 677, 677, 677, 677, nil, nil, - nil, nil, nil, 677, 677, 677, 677, 677, 677, 677, - nil, nil, 677, nil, nil, nil, nil, nil, nil, 677, - nil, nil, 677, 677, 677, 677, 677, 677, 677, 677, - 677, 677, 677, 677, nil, 677, 677, 677, 677, 677, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 677, - nil, nil, 677, nil, nil, 677, 677, nil, nil, 677, - nil, 677, nil, 677, nil, 677, nil, nil, 677, nil, - nil, nil, nil, nil, 677, nil, nil, nil, nil, 677, - 677, 677, 677, nil, 677, 677, 677, 677, nil, nil, - nil, nil, 677, 677, nil, nil, nil, nil, nil, nil, - 677, nil, 677, 677, 677, nil, nil, 677, 677, 680, - 680, 680, 680, 680, nil, nil, nil, 680, 680, nil, - nil, nil, 680, nil, 680, 680, 680, 680, 680, 680, - 680, nil, nil, nil, nil, nil, 680, 680, 680, 680, - 680, 680, 680, nil, nil, 680, nil, nil, nil, nil, - nil, 680, 680, nil, 680, 680, 680, 680, 680, 680, - 680, 680, 680, nil, 680, 680, 680, nil, 680, 680, - 680, 680, 680, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 680, nil, nil, 680, nil, nil, 680, 680, - nil, nil, 680, nil, 680, nil, nil, nil, 680, nil, - nil, nil, nil, nil, nil, nil, nil, 680, nil, nil, - nil, nil, 680, 680, 680, 680, nil, 680, 680, 680, - 680, nil, nil, nil, nil, 680, 680, nil, nil, nil, - 681, 681, 681, 680, 681, 680, 680, 680, 681, 681, - 680, 680, nil, 681, nil, 681, 681, 681, 681, 681, - 681, 681, nil, nil, nil, nil, nil, 681, 681, 681, - 681, 681, 681, 681, nil, nil, 681, nil, nil, nil, - nil, nil, nil, 681, nil, nil, 681, 681, 681, 681, - 681, 681, 681, 681, nil, 681, 681, 681, nil, 681, - 681, 681, 681, 681, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 681, nil, nil, 681, nil, nil, 681, - 681, nil, nil, 681, nil, nil, nil, nil, nil, 681, - nil, nil, nil, nil, nil, nil, nil, nil, 681, nil, - nil, nil, nil, 681, 681, 681, 681, nil, 681, 681, - 681, 681, nil, nil, nil, nil, 681, 681, nil, nil, - nil, 684, 684, 684, 681, 684, 681, 681, 681, 684, - 684, 681, 681, nil, 684, nil, 684, 684, 684, 684, - 684, 684, 684, nil, nil, nil, nil, nil, 684, 684, - 684, 684, 684, 684, 684, nil, nil, 684, nil, nil, - nil, nil, nil, nil, 684, nil, nil, 684, 684, 684, - 684, 684, 684, 684, 684, 684, 684, 684, 684, nil, - 684, 684, 684, 684, 684, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 684, nil, nil, 684, nil, nil, - 684, 684, nil, nil, 684, nil, 684, nil, 684, nil, - 684, nil, nil, 684, nil, nil, nil, nil, nil, 684, - nil, nil, nil, nil, 684, 684, 684, 684, nil, 684, - 684, 684, 684, nil, nil, nil, nil, 684, 684, nil, - nil, nil, 685, 685, 685, 684, 685, 684, 684, 684, - 685, 685, 684, 684, nil, 685, nil, 685, 685, 685, - 685, 685, 685, 685, nil, nil, nil, nil, nil, 685, - 685, 685, 685, 685, 685, 685, nil, nil, 685, nil, - nil, nil, nil, nil, nil, 685, nil, nil, 685, 685, - 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, - nil, 685, 685, 685, 685, 685, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 685, nil, nil, 685, nil, - nil, 685, 685, nil, nil, 685, nil, nil, nil, 685, - nil, 685, nil, nil, 685, nil, nil, nil, nil, nil, - 685, nil, nil, nil, nil, 685, 685, 685, 685, nil, - 685, 685, 685, 685, nil, nil, nil, nil, 685, 685, - nil, nil, nil, 686, 686, 686, 685, 686, 685, 685, - 685, 686, 686, 685, 685, nil, 686, nil, 686, 686, - 686, 686, 686, 686, 686, nil, nil, nil, nil, nil, - 686, 686, 686, 686, 686, 686, 686, nil, nil, 686, - nil, nil, nil, nil, nil, nil, 686, nil, nil, 686, - 686, 686, 686, 686, 686, 686, 686, nil, 686, 686, - 686, nil, 686, 686, 686, 686, 686, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 686, nil, nil, 686, - nil, nil, 686, 686, nil, nil, 686, nil, nil, nil, - nil, nil, 686, nil, nil, nil, nil, nil, nil, nil, - nil, 686, nil, nil, nil, nil, 686, 686, 686, 686, - nil, 686, 686, 686, 686, nil, nil, nil, nil, 686, - 686, nil, nil, nil, 687, 687, 687, 686, 687, 686, - 686, 686, 687, 687, 686, 686, nil, 687, nil, 687, - 687, 687, 687, 687, 687, 687, nil, nil, nil, nil, - nil, 687, 687, 687, 687, 687, 687, 687, nil, nil, - 687, nil, nil, nil, nil, nil, nil, 687, nil, nil, - 687, 687, 687, 687, 687, 687, 687, 687, nil, 687, - 687, 687, nil, 687, 687, 687, 687, 687, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 687, nil, nil, - 687, nil, nil, 687, 687, nil, nil, 687, nil, nil, - nil, nil, nil, 687, nil, nil, nil, nil, nil, nil, - nil, nil, 687, nil, nil, nil, nil, 687, 687, 687, - 687, nil, 687, 687, 687, 687, nil, nil, nil, nil, - 687, 687, nil, nil, nil, 691, 691, 691, 687, 691, - 687, 687, 687, 691, 691, 687, 687, nil, 691, nil, - 691, 691, 691, 691, 691, 691, 691, nil, nil, nil, - nil, nil, 691, 691, 691, 691, 691, 691, 691, nil, - nil, 691, nil, nil, nil, nil, nil, nil, 691, nil, - nil, 691, 691, 691, 691, 691, 691, 691, 691, nil, - 691, 691, 691, nil, 691, 691, 691, 691, 691, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 691, nil, - nil, 691, nil, nil, 691, 691, nil, nil, 691, nil, - nil, nil, nil, nil, 691, nil, nil, nil, nil, nil, - nil, nil, nil, 691, nil, nil, nil, nil, 691, 691, - 691, 691, nil, 691, 691, 691, 691, nil, nil, nil, - nil, 691, 691, nil, nil, nil, 693, 693, 693, 691, - 693, 691, 691, 691, 693, 693, 691, 691, nil, 693, - nil, 693, 693, 693, 693, 693, 693, 693, nil, nil, - nil, nil, nil, 693, 693, 693, 693, 693, 693, 693, - nil, nil, 693, nil, nil, nil, nil, nil, nil, 693, - nil, nil, 693, 693, 693, 693, 693, 693, 693, 693, - nil, 693, 693, 693, nil, 693, 693, 693, 693, 693, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 693, - nil, nil, 693, nil, nil, 693, 693, nil, nil, 693, - nil, nil, nil, nil, nil, 693, nil, nil, nil, nil, - nil, nil, nil, nil, 693, nil, nil, nil, nil, 693, - 693, 693, 693, nil, 693, 693, 693, 693, nil, nil, - nil, nil, 693, 693, nil, nil, nil, 702, 702, 702, - 693, 702, 693, 693, 693, 702, 702, 693, 693, nil, - 702, nil, 702, 702, 702, 702, 702, 702, 702, nil, - nil, nil, nil, nil, 702, 702, 702, 702, 702, 702, - 702, nil, nil, 702, nil, nil, nil, nil, nil, nil, - 702, nil, nil, 702, 702, 702, 702, 702, 702, 702, - 702, nil, 702, 702, 702, nil, 702, 702, 702, 702, - 702, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 702, nil, nil, 702, nil, nil, 702, 702, nil, nil, - 702, nil, 702, nil, nil, nil, 702, nil, nil, nil, - nil, nil, nil, nil, nil, 702, nil, nil, nil, nil, - 702, 702, 702, 702, nil, 702, 702, 702, 702, nil, - nil, nil, nil, 702, 702, nil, nil, nil, 718, 718, - 718, 702, 718, 702, 702, 702, 718, 718, 702, 702, - nil, 718, nil, 718, 718, 718, 718, 718, 718, 718, - nil, nil, nil, nil, nil, 718, 718, 718, 718, 718, - 718, 718, nil, nil, 718, nil, nil, nil, nil, nil, - nil, 718, nil, nil, 718, 718, 718, 718, 718, 718, - 718, 718, nil, 718, 718, 718, nil, 718, 718, 718, - 718, 718, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 718, nil, nil, 718, nil, nil, 718, 718, nil, - nil, 718, nil, nil, nil, nil, nil, 718, nil, nil, - nil, nil, nil, nil, nil, nil, 718, nil, nil, nil, - nil, 718, 718, 718, 718, nil, 718, 718, 718, 718, - nil, nil, nil, nil, 718, 718, nil, nil, nil, 740, - 740, 740, 718, 740, 718, 718, 718, 740, 740, 718, - 718, nil, 740, nil, 740, 740, 740, 740, 740, 740, - 740, nil, nil, nil, nil, nil, 740, 740, 740, 740, - 740, 740, 740, nil, nil, 740, nil, nil, nil, nil, - nil, nil, 740, nil, nil, 740, 740, 740, 740, 740, - 740, 740, 740, nil, 740, 740, 740, nil, 740, 740, - 740, 740, 740, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 740, nil, nil, 740, nil, nil, 740, 740, - nil, nil, 740, nil, nil, nil, nil, nil, 740, nil, - nil, nil, nil, nil, nil, nil, nil, 740, nil, nil, - nil, nil, 740, 740, 740, 740, nil, 740, 740, 740, - 740, nil, nil, nil, nil, 740, 740, nil, nil, nil, - 741, 741, 741, 740, 741, 740, 740, 740, 741, 741, - 740, 740, nil, 741, nil, 741, 741, 741, 741, 741, - 741, 741, nil, nil, nil, nil, nil, 741, 741, 741, - 741, 741, 741, 741, nil, nil, 741, nil, nil, nil, - nil, nil, nil, 741, nil, nil, 741, 741, 741, 741, - 741, 741, 741, 741, nil, 741, 741, 741, nil, 741, - 741, 741, 741, 741, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 741, nil, nil, 741, nil, nil, 741, - 741, nil, nil, 741, nil, nil, nil, nil, nil, 741, - nil, nil, nil, nil, nil, nil, nil, nil, 741, nil, - nil, nil, nil, 741, 741, 741, 741, nil, 741, 741, - 741, 741, nil, nil, nil, nil, 741, 741, nil, nil, - nil, 754, 754, 754, 741, 754, 741, 741, 741, 754, - 754, 741, 741, nil, 754, nil, 754, 754, 754, 754, - 754, 754, 754, nil, nil, nil, nil, nil, 754, 754, - 754, 754, 754, 754, 754, nil, nil, 754, nil, nil, - nil, nil, nil, nil, 754, nil, nil, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, 754, nil, - 754, 754, 754, 754, 754, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 754, nil, nil, 754, nil, nil, - 754, 754, nil, nil, 754, nil, 754, nil, 754, nil, - 754, nil, nil, 754, nil, nil, nil, nil, nil, 754, - nil, nil, nil, nil, 754, 754, 754, 754, nil, 754, - 754, 754, 754, nil, nil, nil, nil, 754, 754, nil, - nil, nil, 766, 766, 766, 754, 766, 754, 754, 754, - 766, 766, 754, 754, nil, 766, nil, 766, 766, 766, - 766, 766, 766, 766, nil, nil, nil, nil, nil, 766, - 766, 766, 766, 766, 766, 766, nil, nil, 766, nil, - nil, nil, nil, nil, nil, 766, nil, nil, 766, 766, - 766, 766, 766, 766, 766, 766, nil, 766, 766, 766, - nil, 766, 766, 766, 766, 766, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 766, nil, nil, 766, nil, - nil, 766, 766, nil, nil, 766, nil, nil, nil, nil, - nil, 766, nil, nil, nil, nil, nil, nil, nil, nil, - 766, nil, nil, nil, nil, 766, 766, 766, 766, nil, - 766, 766, 766, 766, nil, nil, nil, nil, 766, 766, - nil, nil, nil, 785, 785, 785, 766, 785, 766, 766, - 766, 785, 785, 766, 766, nil, 785, nil, 785, 785, - 785, 785, 785, 785, 785, nil, nil, nil, nil, nil, - 785, 785, 785, 785, 785, 785, 785, nil, nil, 785, - nil, nil, nil, nil, nil, nil, 785, nil, nil, 785, - 785, 785, 785, 785, 785, 785, 785, nil, 785, 785, - 785, nil, 785, 785, 785, 785, 785, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 785, nil, nil, 785, - nil, nil, 785, 785, nil, nil, 785, nil, nil, nil, - nil, nil, 785, nil, nil, nil, nil, nil, nil, nil, - nil, 785, nil, nil, nil, nil, 785, 785, 785, 785, - nil, 785, 785, 785, 785, nil, nil, nil, nil, 785, - 785, nil, nil, nil, 813, 813, 813, 785, 813, 785, - 785, 785, 813, 813, 785, 785, nil, 813, nil, 813, - 813, 813, 813, 813, 813, 813, nil, nil, nil, nil, - nil, 813, 813, 813, 813, 813, 813, 813, nil, nil, - 813, nil, nil, nil, nil, nil, nil, 813, nil, nil, - 813, 813, 813, 813, 813, 813, 813, 813, nil, 813, - 813, 813, nil, 813, 813, 813, 813, 813, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 813, nil, nil, - 813, nil, nil, 813, 813, nil, nil, 813, nil, nil, - nil, nil, nil, 813, nil, nil, nil, nil, nil, nil, - nil, nil, 813, nil, nil, nil, nil, 813, 813, 813, - 813, nil, 813, 813, 813, 813, nil, nil, nil, nil, - 813, 813, nil, nil, nil, 832, 832, 832, 813, 832, - 813, 813, 813, 832, 832, 813, 813, nil, 832, nil, - 832, 832, 832, 832, 832, 832, 832, nil, nil, nil, - nil, nil, 832, 832, 832, 832, 832, 832, 832, nil, - nil, 832, nil, nil, nil, nil, nil, nil, 832, nil, - nil, 832, 832, 832, 832, 832, 832, 832, 832, nil, - 832, 832, 832, nil, 832, 832, 832, 832, 832, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 832, nil, - nil, 832, nil, nil, 832, 832, nil, nil, 832, nil, - nil, nil, nil, nil, 832, nil, nil, nil, nil, nil, - nil, nil, nil, 832, nil, nil, nil, nil, 832, 832, - 832, 832, nil, 832, 832, 832, 832, nil, nil, nil, - nil, 832, 832, nil, nil, nil, 840, 840, 840, 832, - 840, 832, 832, 832, 840, 840, 832, 832, nil, 840, - nil, 840, 840, 840, 840, 840, 840, 840, nil, nil, - nil, nil, nil, 840, 840, 840, 840, 840, 840, 840, - nil, nil, 840, nil, nil, nil, nil, nil, nil, 840, - nil, nil, 840, 840, 840, 840, 840, 840, 840, 840, - nil, 840, 840, 840, nil, 840, 840, 840, 840, 840, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 840, - nil, nil, 840, nil, nil, 840, 840, nil, nil, 840, - nil, nil, nil, nil, nil, 840, nil, nil, nil, nil, - nil, nil, nil, nil, 840, nil, nil, nil, nil, 840, - 840, 840, 840, nil, 840, 840, 840, 840, nil, nil, - nil, nil, 840, 840, nil, nil, nil, 854, 854, 854, - 840, 854, 840, 840, 840, 854, 854, 840, 840, nil, - 854, nil, 854, 854, 854, 854, 854, 854, 854, nil, - nil, nil, nil, nil, 854, 854, 854, 854, 854, 854, - 854, nil, nil, 854, nil, nil, nil, nil, nil, nil, - 854, nil, nil, 854, 854, 854, 854, 854, 854, 854, - 854, nil, 854, 854, 854, nil, 854, 854, 854, 854, - 854, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 854, nil, nil, 854, nil, nil, 854, 854, nil, nil, - 854, nil, nil, nil, nil, nil, 854, nil, nil, nil, - nil, nil, nil, nil, nil, 854, nil, nil, nil, nil, - 854, 854, 854, 854, nil, 854, 854, 854, 854, nil, - nil, nil, nil, 854, 854, nil, nil, nil, 855, 855, - 855, 854, 855, 854, 854, 854, 855, 855, 854, 854, - nil, 855, nil, 855, 855, 855, 855, 855, 855, 855, - nil, nil, nil, nil, nil, 855, 855, 855, 855, 855, - 855, 855, nil, nil, 855, nil, nil, nil, nil, nil, - nil, 855, nil, nil, 855, 855, 855, 855, 855, 855, - 855, 855, nil, 855, 855, 855, nil, 855, 855, 855, - 855, 855, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 855, nil, nil, 855, nil, nil, 855, 855, nil, - nil, 855, nil, nil, nil, nil, nil, 855, nil, nil, - nil, nil, nil, nil, nil, nil, 855, nil, nil, nil, - nil, 855, 855, 855, 855, nil, 855, 855, 855, 855, - nil, nil, nil, nil, 855, 855, nil, nil, nil, 856, - 856, 856, 855, 856, 855, 855, 855, 856, 856, 855, - 855, nil, 856, nil, 856, 856, 856, 856, 856, 856, - 856, nil, nil, nil, nil, nil, 856, 856, 856, 856, - 856, 856, 856, nil, nil, 856, nil, nil, nil, nil, - nil, nil, 856, nil, nil, 856, 856, 856, 856, 856, - 856, 856, 856, nil, 856, 856, 856, nil, 856, 856, - 856, 856, 856, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 856, nil, nil, 856, nil, nil, 856, 856, - nil, nil, 856, nil, nil, nil, nil, nil, 856, nil, - nil, nil, nil, nil, nil, nil, nil, 856, nil, nil, - nil, nil, 856, 856, 856, 856, nil, 856, 856, 856, - 856, nil, nil, nil, nil, 856, 856, nil, nil, nil, - 884, 884, 884, 856, 884, 856, 856, 856, 884, 884, - 856, 856, nil, 884, nil, 884, 884, 884, 884, 884, - 884, 884, nil, nil, nil, nil, nil, 884, 884, 884, - 884, 884, 884, 884, nil, nil, 884, nil, nil, nil, - nil, nil, nil, 884, nil, nil, 884, 884, 884, 884, - 884, 884, 884, 884, nil, 884, 884, 884, nil, 884, - 884, 884, 884, 884, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 884, nil, nil, 884, nil, nil, 884, - 884, nil, nil, 884, nil, nil, nil, nil, nil, 884, - nil, nil, nil, nil, nil, nil, nil, nil, 884, nil, - nil, nil, nil, 884, 884, 884, 884, nil, 884, 884, - 884, 884, nil, nil, nil, nil, 884, 884, nil, nil, - nil, 885, 885, 885, 884, 885, 884, 884, 884, 885, - 885, 884, 884, nil, 885, nil, 885, 885, 885, 885, - 885, 885, 885, nil, nil, nil, nil, nil, 885, 885, - 885, 885, 885, 885, 885, nil, nil, 885, nil, nil, - nil, nil, nil, nil, 885, nil, nil, 885, 885, 885, - 885, 885, 885, 885, 885, nil, 885, 885, 885, nil, - 885, 885, 885, 885, 885, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 885, nil, nil, 885, nil, nil, - 885, 885, nil, nil, 885, nil, nil, nil, nil, nil, - 885, nil, nil, nil, nil, nil, nil, nil, nil, 885, - nil, nil, nil, nil, 885, 885, 885, 885, nil, 885, - 885, 885, 885, nil, nil, nil, nil, 885, 885, nil, - nil, nil, 886, 886, 886, 885, 886, 885, 885, 885, - 886, 886, 885, 885, nil, 886, nil, 886, 886, 886, - 886, 886, 886, 886, nil, nil, nil, nil, nil, 886, - 886, 886, 886, 886, 886, 886, nil, nil, 886, nil, - nil, nil, nil, nil, nil, 886, nil, nil, 886, 886, - 886, 886, 886, 886, 886, 886, nil, 886, 886, 886, - nil, 886, 886, 886, 886, 886, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 886, nil, nil, 886, nil, - nil, 886, 886, nil, nil, 886, nil, nil, nil, nil, - nil, 886, nil, nil, nil, nil, nil, nil, nil, nil, - 886, nil, nil, nil, nil, 886, 886, 886, 886, nil, - 886, 886, 886, 886, nil, nil, nil, nil, 886, 886, - nil, nil, nil, 887, 887, 887, 886, 887, 886, 886, - 886, 887, 887, 886, 886, nil, 887, nil, 887, 887, - 887, 887, 887, 887, 887, nil, nil, nil, nil, nil, - 887, 887, 887, 887, 887, 887, 887, nil, nil, 887, - nil, nil, nil, nil, nil, nil, 887, nil, nil, 887, - 887, 887, 887, 887, 887, 887, 887, nil, 887, 887, - 887, nil, 887, 887, 887, 887, 887, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 887, nil, nil, 887, - nil, nil, 887, 887, nil, nil, 887, nil, nil, nil, - nil, nil, 887, nil, nil, nil, nil, nil, nil, nil, - nil, 887, nil, nil, nil, nil, 887, 887, 887, 887, - nil, 887, 887, 887, 887, nil, nil, nil, nil, 887, - 887, nil, nil, nil, 893, 893, 893, 887, 893, 887, - 887, 887, 893, 893, 887, 887, nil, 893, nil, 893, - 893, 893, 893, 893, 893, 893, nil, nil, nil, nil, - nil, 893, 893, 893, 893, 893, 893, 893, nil, nil, - 893, nil, nil, nil, nil, nil, nil, 893, nil, nil, - 893, 893, 893, 893, 893, 893, 893, 893, nil, 893, - 893, 893, nil, 893, 893, 893, 893, 893, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 893, nil, nil, - 893, nil, nil, 893, 893, nil, nil, 893, nil, nil, - nil, nil, nil, 893, nil, nil, nil, nil, nil, nil, - nil, nil, 893, nil, nil, nil, nil, 893, 893, 893, - 893, nil, 893, 893, 893, 893, nil, nil, nil, nil, - 893, 893, nil, nil, nil, 915, 915, 915, 893, 915, - 893, 893, 893, 915, 915, 893, 893, nil, 915, nil, - 915, 915, 915, 915, 915, 915, 915, nil, nil, nil, - nil, nil, 915, 915, 915, 915, 915, 915, 915, nil, - nil, 915, nil, nil, nil, nil, nil, nil, 915, nil, - nil, 915, 915, 915, 915, 915, 915, 915, 915, nil, - 915, 915, 915, nil, 915, 915, 915, 915, 915, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 915, nil, - nil, 915, nil, nil, 915, 915, nil, nil, 915, nil, - nil, nil, nil, nil, 915, nil, nil, nil, nil, nil, - nil, nil, nil, 915, nil, nil, nil, nil, 915, 915, - 915, 915, nil, 915, 915, 915, 915, nil, nil, nil, - nil, 915, 915, nil, nil, nil, 920, 920, 920, 915, - 920, 915, 915, 915, 920, 920, 915, 915, nil, 920, - nil, 920, 920, 920, 920, 920, 920, 920, nil, nil, - nil, nil, nil, 920, 920, 920, 920, 920, 920, 920, - nil, nil, 920, nil, nil, nil, nil, nil, nil, 920, - nil, nil, 920, 920, 920, 920, 920, 920, 920, 920, - nil, 920, 920, 920, nil, 920, 920, 920, 920, 920, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 920, - nil, nil, 920, nil, nil, 920, 920, nil, nil, 920, - nil, 920, nil, nil, nil, 920, nil, nil, nil, nil, - nil, nil, nil, nil, 920, nil, nil, nil, nil, 920, - 920, 920, 920, nil, 920, 920, 920, 920, nil, nil, - nil, nil, 920, 920, nil, nil, nil, 940, 940, 940, - 920, 940, 920, 920, 920, 940, 940, 920, 920, nil, - 940, nil, 940, 940, 940, 940, 940, 940, 940, nil, - nil, nil, nil, nil, 940, 940, 940, 940, 940, 940, - 940, nil, nil, 940, nil, nil, nil, nil, nil, nil, - 940, nil, nil, 940, 940, 940, 940, 940, 940, 940, - 940, 940, 940, 940, 940, nil, 940, 940, 940, 940, - 940, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 940, nil, nil, 940, nil, nil, 940, 940, nil, nil, - 940, nil, nil, nil, 940, nil, 940, nil, nil, 940, - nil, nil, nil, nil, nil, 940, nil, nil, nil, nil, - 940, 940, 940, 940, nil, 940, 940, 940, 940, nil, - nil, nil, nil, 940, 940, nil, nil, nil, 967, 967, - 967, 940, 967, 940, 940, 940, 967, 967, 940, 940, - nil, 967, nil, 967, 967, 967, 967, 967, 967, 967, - nil, nil, nil, nil, nil, 967, 967, 967, 967, 967, - 967, 967, nil, nil, 967, nil, nil, nil, nil, nil, - nil, 967, nil, nil, 967, 967, 967, 967, 967, 967, - 967, 967, nil, 967, 967, 967, nil, 967, 967, 967, - 967, 967, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 967, nil, nil, 967, nil, nil, 967, 967, nil, - nil, 967, nil, nil, nil, nil, nil, 967, nil, nil, - nil, nil, nil, nil, nil, nil, 967, nil, nil, nil, - nil, 967, 967, 967, 967, nil, 967, 967, 967, 967, - nil, nil, nil, nil, 967, 967, nil, nil, nil, 968, - 968, 968, 967, 968, 967, 967, 967, 968, 968, 967, - 967, nil, 968, nil, 968, 968, 968, 968, 968, 968, - 968, nil, nil, nil, nil, nil, 968, 968, 968, 968, - 968, 968, 968, nil, nil, 968, nil, nil, nil, nil, - nil, nil, 968, nil, nil, 968, 968, 968, 968, 968, - 968, 968, 968, nil, 968, 968, 968, nil, 968, 968, - 968, 968, 968, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 968, nil, nil, 968, nil, nil, 968, 968, - nil, nil, 968, nil, nil, nil, nil, nil, 968, nil, - nil, nil, nil, nil, nil, nil, nil, 968, nil, nil, - nil, nil, 968, 968, 968, 968, nil, 968, 968, 968, - 968, nil, nil, nil, nil, 968, 968, nil, nil, nil, - 1094, 1094, 1094, 968, 1094, 968, 968, 968, 1094, 1094, - 968, 968, nil, 1094, nil, 1094, 1094, 1094, 1094, 1094, - 1094, 1094, nil, nil, nil, nil, nil, 1094, 1094, 1094, - 1094, 1094, 1094, 1094, nil, nil, 1094, nil, nil, nil, - nil, nil, nil, 1094, nil, nil, 1094, 1094, 1094, 1094, - 1094, 1094, 1094, 1094, nil, 1094, 1094, 1094, nil, 1094, - 1094, 1094, 1094, 1094, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 1094, nil, nil, 1094, nil, nil, 1094, - 1094, nil, nil, 1094, nil, nil, nil, nil, nil, 1094, - nil, nil, nil, nil, nil, nil, nil, nil, 1094, nil, - nil, nil, nil, 1094, 1094, 1094, 1094, nil, 1094, 1094, - 1094, 1094, nil, nil, nil, nil, 1094, 1094, nil, nil, - nil, 1126, 1126, 1126, 1094, 1126, 1094, 1094, 1094, 1126, - 1126, 1094, 1094, nil, 1126, nil, 1126, 1126, 1126, 1126, - 1126, 1126, 1126, nil, nil, nil, nil, nil, 1126, 1126, - 1126, 1126, 1126, 1126, 1126, nil, nil, 1126, nil, nil, - nil, nil, nil, nil, 1126, nil, nil, 1126, 1126, 1126, - 1126, 1126, 1126, 1126, 1126, 1126, 1126, 1126, 1126, nil, - 1126, 1126, 1126, 1126, 1126, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 1126, nil, nil, 1126, nil, nil, - 1126, 1126, nil, nil, 1126, nil, 1126, nil, 1126, nil, - 1126, nil, nil, 1126, nil, nil, nil, nil, nil, 1126, - nil, nil, nil, nil, 1126, 1126, 1126, 1126, nil, 1126, - 1126, 1126, 1126, nil, nil, nil, nil, 1126, 1126, nil, - nil, nil, 1222, 1222, 1222, 1126, 1222, 1126, 1126, 1126, - 1222, 1222, 1126, 1126, nil, 1222, nil, 1222, 1222, 1222, - 1222, 1222, 1222, 1222, nil, nil, nil, nil, nil, 1222, - 1222, 1222, 1222, 1222, 1222, 1222, nil, nil, 1222, nil, - nil, nil, nil, nil, nil, 1222, nil, nil, 1222, 1222, - 1222, 1222, 1222, 1222, 1222, 1222, nil, 1222, 1222, 1222, - nil, 1222, 1222, 1222, 1222, 1222, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 1222, nil, nil, 1222, nil, - nil, 1222, 1222, nil, nil, 1222, nil, nil, nil, nil, - nil, 1222, nil, nil, nil, nil, nil, nil, nil, nil, - 1222, nil, nil, nil, nil, 1222, 1222, 1222, 1222, nil, - 1222, 1222, 1222, 1222, nil, nil, nil, nil, 1222, 1222, - nil, nil, nil, 1223, 1223, 1223, 1222, 1223, 1222, 1222, - 1222, 1223, 1223, 1222, 1222, nil, 1223, nil, 1223, 1223, - 1223, 1223, 1223, 1223, 1223, nil, nil, nil, nil, nil, - 1223, 1223, 1223, 1223, 1223, 1223, 1223, nil, nil, 1223, - nil, nil, nil, nil, nil, nil, 1223, nil, nil, 1223, - 1223, 1223, 1223, 1223, 1223, 1223, 1223, nil, 1223, 1223, - 1223, nil, 1223, 1223, 1223, 1223, 1223, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 1223, nil, nil, 1223, - nil, nil, 1223, 1223, nil, nil, 1223, nil, nil, nil, - nil, nil, 1223, nil, nil, nil, nil, nil, nil, nil, - nil, 1223, nil, nil, nil, nil, 1223, 1223, 1223, 1223, - nil, 1223, 1223, 1223, 1223, nil, nil, nil, nil, 1223, - 1223, nil, nil, nil, 39, 39, 39, 1223, 39, 1223, - 1223, 1223, 39, 39, 1223, 1223, nil, 39, nil, 39, - 39, 39, 39, 39, 39, 39, nil, nil, nil, nil, - nil, 39, 39, 39, 39, 39, 39, 39, nil, nil, - 39, nil, nil, nil, nil, nil, nil, 39, nil, nil, - 39, 39, 39, 39, 39, 39, 39, 39, nil, 39, - 39, 39, nil, 39, 39, nil, nil, 39, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 39, nil, nil, - 39, nil, nil, 39, 39, nil, nil, 39, nil, 39, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 39, 39, 39, - 39, nil, 39, 39, 39, 39, nil, nil, nil, nil, - 39, 39, nil, nil, nil, 40, 40, 40, 39, 40, - 39, 39, 39, 40, 40, nil, nil, nil, 40, nil, - 40, 40, 40, 40, 40, 40, 40, nil, nil, nil, - nil, nil, 40, 40, 40, 40, 40, 40, 40, nil, - nil, 40, nil, nil, nil, nil, nil, nil, 40, nil, - nil, 40, 40, 40, 40, 40, 40, 40, 40, nil, - 40, 40, 40, nil, 40, 40, nil, nil, 40, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 40, nil, - nil, 40, nil, nil, 40, 40, nil, nil, 40, nil, - nil, 1211, nil, 1211, 1211, 1211, 1211, 1211, nil, nil, - nil, nil, nil, nil, nil, nil, 1211, nil, 40, 40, - 40, 40, nil, 40, 40, 40, 40, nil, nil, nil, - nil, 40, 40, nil, nil, nil, 40, nil, 1211, 40, - nil, 40, 40, 40, 76, 76, 76, nil, 76, 1211, - 1211, nil, 76, 76, 1211, nil, nil, 76, nil, 76, - 76, 76, 76, 76, 76, 76, nil, nil, nil, nil, - nil, 76, 76, 76, 76, 76, 76, 76, nil, nil, - 76, nil, nil, nil, nil, nil, nil, 76, nil, nil, - 76, 76, 76, 76, 76, 76, 76, 76, nil, 76, - 76, 76, nil, 76, 76, nil, nil, 76, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 76, nil, nil, - 76, nil, nil, 76, 76, nil, nil, 76, nil, 76, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 76, 76, 76, - 76, nil, 76, 76, 76, 76, nil, nil, nil, nil, - 76, 76, nil, nil, nil, 77, 77, 77, 76, 77, - 76, 76, 76, 77, 77, nil, nil, nil, 77, nil, - 77, 77, 77, 77, 77, 77, 77, nil, nil, nil, - nil, nil, 77, 77, 77, 77, 77, 77, 77, nil, - nil, 77, nil, nil, nil, nil, nil, nil, 77, nil, - nil, 77, 77, 77, 77, 77, 77, 77, 77, nil, - 77, 77, 77, nil, 77, 77, nil, nil, 77, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 77, nil, nil, 77, nil, - nil, 77, nil, nil, 77, 77, nil, nil, 77, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 77, 77, - 77, 77, nil, 77, 77, 77, 77, nil, nil, nil, - nil, 77, 77, nil, nil, nil, 78, 78, 78, 77, - 78, 77, 77, 77, 78, 78, nil, nil, nil, 78, - nil, 78, 78, 78, 78, 78, 78, 78, nil, nil, - nil, nil, nil, 78, 78, 78, 78, 78, 78, 78, - nil, nil, 78, nil, nil, nil, nil, nil, nil, 78, - nil, nil, 78, 78, 78, 78, 78, 78, 78, 78, - nil, 78, 78, 78, nil, 78, 78, nil, nil, 78, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 78, - nil, nil, 78, nil, nil, 78, 78, nil, nil, 78, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 78, - 78, 78, 78, nil, 78, 78, 78, 78, nil, nil, - nil, nil, 78, 78, nil, nil, nil, 343, 343, 343, - 78, 343, 78, 78, 78, 343, 343, nil, nil, nil, - 343, nil, 343, 343, 343, 343, 343, 343, 343, nil, - nil, nil, nil, nil, 343, 343, 343, 343, 343, 343, - 343, nil, nil, 343, nil, nil, nil, nil, nil, nil, - 343, nil, nil, 343, 343, 343, 343, 343, 343, 343, - 343, nil, 343, 343, 343, nil, 343, 343, nil, nil, - 343, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 343, nil, nil, 343, nil, nil, 343, 343, nil, nil, - 343, nil, nil, 1213, nil, 1213, 1213, 1213, 1213, 1213, - nil, nil, nil, nil, nil, nil, nil, nil, 1213, nil, - 343, 343, 343, 343, nil, 343, 343, 343, 343, nil, - nil, nil, nil, 343, 343, nil, nil, nil, 343, nil, - 1213, 343, nil, 343, 343, 343, 362, 362, 362, nil, - 362, 1213, 1213, nil, 362, 362, 1213, nil, nil, 362, - nil, 362, 362, 362, 362, 362, 362, 362, nil, nil, - nil, nil, nil, 362, 362, 362, 362, 362, 362, 362, - nil, nil, 362, nil, nil, nil, nil, nil, nil, 362, - nil, nil, 362, 362, 362, 362, 362, 362, 362, 362, - nil, 362, 362, 362, nil, 362, 362, nil, nil, 362, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 362, - nil, nil, 362, nil, nil, 362, 362, nil, nil, 362, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 362, - 362, 362, 362, nil, 362, 362, 362, 362, nil, nil, - nil, nil, 362, 362, nil, nil, nil, 592, 592, 592, - 362, 592, 362, 362, 362, 592, 592, nil, nil, nil, - 592, nil, 592, 592, 592, 592, 592, 592, 592, nil, - nil, nil, nil, nil, 592, 592, 592, 592, 592, 592, - 592, nil, nil, 592, nil, nil, nil, nil, nil, nil, - 592, nil, nil, 592, 592, 592, 592, 592, 592, 592, - 592, nil, 592, 592, 592, nil, 592, 592, nil, nil, - 592, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 592, nil, nil, 592, nil, nil, 592, 592, nil, nil, - 592, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 592, 592, 592, 592, nil, 592, 592, 592, 592, nil, - nil, nil, nil, 592, 592, nil, nil, nil, 601, 601, - 601, 592, 601, 592, 592, 592, 601, 601, nil, nil, - nil, 601, nil, 601, 601, 601, 601, 601, 601, 601, - nil, nil, nil, nil, nil, 601, 601, 601, 601, 601, - 601, 601, nil, nil, 601, nil, nil, nil, nil, nil, - nil, 601, nil, nil, 601, 601, 601, 601, 601, 601, - 601, 601, nil, 601, 601, 601, nil, 601, 601, nil, - nil, 601, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 601, nil, nil, 601, nil, nil, 601, 601, nil, - nil, 601, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 601, 601, 601, 601, nil, 601, 601, 601, 601, - nil, nil, nil, nil, 601, 601, nil, nil, nil, 769, - 769, 769, 601, 769, 601, 601, 601, 769, 769, nil, - nil, nil, 769, nil, 769, 769, 769, 769, 769, 769, - 769, nil, nil, nil, nil, nil, 769, 769, 769, 769, - 769, 769, 769, nil, nil, 769, nil, nil, nil, nil, - nil, nil, 769, nil, nil, 769, 769, 769, 769, 769, - 769, 769, 769, nil, 769, 769, 769, nil, 769, 769, - nil, nil, 769, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 769, nil, nil, 769, nil, nil, 769, 769, - nil, nil, 769, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 769, 769, 769, 769, nil, 769, 769, 769, - 769, nil, nil, nil, nil, 769, 769, nil, nil, nil, - 780, 780, 780, 769, 780, 769, 769, 769, 780, 780, - nil, nil, nil, 780, nil, 780, 780, 780, 780, 780, - 780, 780, nil, nil, nil, nil, nil, 780, 780, 780, - 780, 780, 780, 780, nil, nil, 780, nil, nil, nil, - nil, nil, nil, 780, nil, nil, 780, 780, 780, 780, - 780, 780, 780, 780, nil, 780, 780, 780, nil, 780, - 780, nil, nil, 780, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 780, nil, nil, 780, nil, nil, 780, - 780, nil, nil, 780, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 780, 780, 780, 780, nil, 780, 780, - 780, 780, nil, nil, nil, nil, 780, 780, nil, nil, - nil, 951, 951, 951, 780, 951, 780, 780, 780, 951, - 951, nil, nil, nil, 951, nil, 951, 951, 951, 951, - 951, 951, 951, nil, nil, nil, nil, nil, 951, 951, - 951, 951, 951, 951, 951, nil, nil, 951, nil, nil, - nil, nil, nil, nil, 951, nil, nil, 951, 951, 951, - 951, 951, 951, 951, 951, nil, 951, 951, 951, nil, - 951, 951, nil, nil, 951, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 951, nil, nil, 951, nil, nil, - 951, 951, nil, nil, 951, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 951, 951, 951, 951, nil, 951, - 951, 951, 951, nil, nil, nil, nil, 951, 951, nil, - nil, nil, 1028, 1028, 1028, 951, 1028, 951, 951, 951, - 1028, 1028, nil, nil, nil, 1028, nil, 1028, 1028, 1028, - 1028, 1028, 1028, 1028, nil, nil, nil, nil, nil, 1028, - 1028, 1028, 1028, 1028, 1028, 1028, nil, nil, 1028, nil, - nil, nil, nil, nil, nil, 1028, nil, nil, 1028, 1028, - 1028, 1028, 1028, 1028, 1028, 1028, nil, 1028, 1028, 1028, - nil, 1028, 1028, nil, nil, 1028, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 1028, nil, nil, 1028, nil, - nil, 1028, 1028, nil, nil, 1028, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 1028, 1028, 1028, 1028, nil, - 1028, 1028, 1028, 1028, nil, nil, nil, nil, 1028, 1028, - nil, nil, nil, 1110, 1110, 1110, 1028, 1110, 1028, 1028, - 1028, 1110, 1110, nil, nil, nil, 1110, nil, 1110, 1110, - 1110, 1110, 1110, 1110, 1110, nil, nil, nil, nil, nil, - 1110, 1110, 1110, 1110, 1110, 1110, 1110, nil, nil, 1110, - nil, nil, nil, nil, nil, nil, 1110, nil, nil, 1110, - 1110, 1110, 1110, 1110, 1110, 1110, 1110, nil, 1110, 1110, - 1110, nil, 1110, 1110, nil, nil, 1110, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 1110, nil, nil, 1110, - nil, nil, 1110, 1110, nil, nil, 1110, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 1110, 1110, 1110, 1110, - nil, 1110, 1110, 1110, 1110, nil, nil, nil, nil, 1110, - 1110, nil, nil, nil, nil, nil, nil, 1110, nil, 1110, - 1110, 1110, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, nil, nil, nil, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, nil, - nil, nil, nil, nil, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, nil, 10, nil, nil, nil, nil, - nil, nil, nil, 10, 10, nil, 10, 10, 10, 10, - 10, 10, 10, nil, nil, 10, 10, nil, nil, nil, - 10, 10, 10, 10, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 10, 10, nil, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, nil, nil, 10, 10, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 10, - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 11, nil, nil, nil, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 11, nil, nil, nil, - nil, nil, 11, 11, 11, 11, 11, 11, 11, 11, - 11, nil, nil, 11, nil, nil, nil, nil, nil, nil, - nil, 11, 11, nil, 11, 11, 11, 11, 11, 11, - 11, nil, nil, 11, 11, nil, nil, nil, 11, 11, - 11, 11, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 11, 11, nil, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, - nil, nil, 11, 11, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 11, 428, 428, - 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, - 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, - 428, 428, nil, nil, nil, 428, 428, 428, 428, 428, - 428, 428, 428, 428, 428, nil, nil, nil, nil, nil, - 428, 428, 428, 428, 428, 428, 428, 428, 428, nil, - nil, 428, nil, nil, nil, nil, nil, nil, nil, 428, - 428, nil, 428, 428, 428, 428, 428, 428, 428, nil, - nil, 428, 428, nil, nil, nil, 428, 428, 428, 428, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 428, 428, nil, 428, 428, 428, 428, - 428, 428, 428, 428, 428, 428, 428, 428, nil, nil, - 428, 428, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 428, 671, 671, 671, 671, - 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, - 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, - nil, nil, nil, 671, 671, 671, 671, 671, 671, 671, - 671, 671, 671, nil, nil, nil, nil, nil, 671, 671, - 671, 671, 671, 671, 671, 671, 671, nil, nil, 671, - nil, nil, nil, nil, nil, nil, nil, 671, 671, nil, - 671, 671, 671, 671, 671, 671, 671, nil, nil, 671, - 671, nil, nil, nil, 671, 671, 671, 671, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 671, 671, nil, 671, 671, 671, 671, 671, 671, - 671, 671, 671, 671, 671, 671, nil, nil, 671, 671, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 671, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, nil, nil, - nil, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, nil, nil, nil, nil, nil, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, nil, 26, - nil, nil, nil, nil, nil, 26, 26, nil, 26, 26, - 26, 26, 26, 26, 26, nil, nil, 26, 26, nil, - nil, nil, 26, 26, 26, 26, nil, nil, nil, nil, - nil, 26, nil, nil, nil, nil, nil, nil, nil, 26, - 26, nil, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, nil, nil, 26, 746, 746, 746, - 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, - 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, - 746, nil, nil, nil, 746, 746, 746, 746, 746, 746, - 746, 746, 746, 746, nil, nil, nil, nil, nil, 746, - 746, 746, 746, 746, 746, 746, 746, 746, nil, nil, - 746, nil, nil, nil, nil, nil, nil, nil, 746, 746, - nil, 746, 746, 746, 746, 746, 746, 746, nil, nil, - 746, 746, nil, nil, nil, 746, 746, 746, 746, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 746, 746, nil, 746, 746, 746, 746, 746, - 746, 746, 746, 746, 746, 746, 746, nil, nil, 746, - 890, 890, 890, 890, nil, nil, 1215, nil, 1215, 1215, - 1215, 1215, 1215, nil, nil, nil, 890, 890, 890, 890, - nil, 1215, nil, 890, 890, nil, nil, nil, nil, 890, - 890, nil, nil, 890, 890, nil, nil, nil, nil, nil, - nil, nil, nil, 1215, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 890, 1215, 1215, 890, nil, nil, 1215, - 890, nil, nil, 890, nil, 890, nil, nil, nil, nil, - nil, nil, 890, nil, nil, nil, nil, nil, nil, 890, - nil, nil, nil, 890, 890, 890, 890, nil, 890, 890, - 890, 890, nil, nil, nil, nil, 890, 890, 892, 892, - 892, 892, nil, nil, 890, nil, 890, 890, 890, nil, - nil, 890, 890, nil, 892, 892, 892, 892, nil, nil, - nil, 892, 892, nil, nil, nil, nil, 892, 892, nil, - nil, 892, 892, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 892, nil, nil, 892, nil, nil, nil, 892, nil, - nil, 892, nil, 892, nil, nil, nil, nil, nil, nil, - 892, nil, nil, nil, nil, nil, nil, 892, nil, nil, - nil, 892, 892, 892, 892, nil, 892, 892, 892, 892, - nil, nil, nil, nil, 892, 892, 980, 980, 980, 980, - nil, nil, 892, nil, 892, 892, 892, nil, nil, 892, - 892, nil, 980, 980, 980, 980, nil, nil, nil, 980, - nil, nil, nil, nil, nil, 980, 980, nil, nil, 980, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 980, - nil, nil, 980, nil, nil, nil, 980, nil, nil, 980, - nil, 980, nil, nil, nil, nil, nil, nil, 715, nil, - 715, 715, 715, 715, 715, 980, nil, nil, nil, 980, - 980, 980, 980, 715, 980, 980, 980, 980, nil, nil, - nil, nil, 980, 980, 980, 988, 988, 988, 988, nil, - 980, nil, 980, 980, 980, 715, nil, 980, 980, nil, - nil, 988, 988, 988, 988, nil, 715, 715, 988, nil, - nil, 715, nil, nil, 988, 988, nil, nil, 988, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 988, nil, - nil, 988, nil, nil, nil, 988, nil, nil, 988, nil, - nil, 715, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 988, nil, nil, nil, 988, 988, - 988, 988, nil, 988, 988, 988, 988, nil, nil, nil, - nil, 988, 988, 1063, 1063, 1063, 1063, nil, nil, 988, - nil, 988, 988, 988, nil, nil, 988, 988, nil, 1063, - 1063, 1063, 1063, nil, nil, 1104, 1063, 1104, 1104, 1104, - 1104, 1104, 1063, 1063, nil, nil, 1063, nil, nil, nil, - 1104, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 1063, nil, nil, 1063, - nil, nil, 1104, 1063, nil, nil, 1063, nil, 1063, nil, - nil, 1104, 1104, 1104, 1104, nil, nil, nil, 1104, nil, - nil, nil, 1063, nil, nil, nil, 1063, 1063, 1063, 1063, - nil, 1063, 1063, 1063, 1063, nil, nil, nil, nil, 1063, - 1063, 1065, 1065, 1065, 1065, nil, nil, 1063, nil, 1063, - 1063, 1063, nil, nil, 1063, 1063, nil, 1065, 1065, 1065, - 1065, nil, nil, 1209, 1065, 1209, 1209, 1209, 1209, 1209, - 1065, 1065, nil, nil, 1065, nil, nil, nil, 1209, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 1065, nil, nil, 1065, nil, nil, - 1209, 1065, nil, nil, 1065, nil, nil, nil, nil, 1209, - 1209, 1209, 1209, nil, nil, nil, 1209, nil, nil, nil, - 1065, nil, nil, nil, 1065, 1065, 1065, 1065, nil, 1065, - 1065, 1065, 1065, nil, nil, nil, nil, 1065, 1065, 1068, - 1068, 1068, 1068, nil, nil, 1065, nil, 1065, 1065, 1065, - nil, nil, 1065, 1065, nil, 1068, 1068, 1068, 1068, nil, - nil, nil, 1068, 1068, nil, nil, nil, nil, 1068, 1068, - nil, nil, 1068, 1068, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 1068, nil, nil, 1068, nil, nil, nil, 1068, - nil, nil, 1068, nil, 1068, nil, nil, nil, nil, nil, - nil, 1068, nil, nil, nil, nil, nil, nil, 1068, nil, - nil, nil, 1068, 1068, 1068, 1068, nil, 1068, 1068, 1068, - 1068, nil, nil, nil, nil, 1068, 1068, 1069, 1069, 1069, - 1069, nil, nil, 1068, nil, 1068, 1068, 1068, nil, nil, - 1068, 1068, nil, 1069, 1069, 1069, 1069, nil, nil, nil, - 1069, 1069, nil, nil, nil, nil, 1069, 1069, nil, nil, - 1069, 1069, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 1069, nil, nil, 1069, nil, nil, nil, 1069, nil, nil, - 1069, nil, 1069, nil, nil, nil, nil, nil, nil, 1069, - nil, nil, nil, nil, nil, nil, 1069, nil, nil, nil, - 1069, 1069, 1069, 1069, nil, 1069, 1069, 1069, 1069, nil, - nil, nil, nil, 1069, 1069, 1075, 1075, 1075, 1075, nil, - nil, 1069, nil, 1069, 1069, 1069, nil, nil, 1069, 1069, - nil, 1075, 1075, 1075, 1075, nil, nil, 1239, 1075, 1239, - 1239, 1239, 1239, 1239, 1075, 1075, nil, nil, 1075, nil, - nil, nil, 1239, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 1075, nil, - nil, 1075, nil, nil, 1239, 1075, nil, nil, 1075, nil, - 1075, nil, nil, nil, nil, 1239, 1239, nil, nil, nil, - 1239, nil, nil, nil, 1075, nil, nil, nil, 1075, 1075, - 1075, 1075, nil, 1075, 1075, 1075, 1075, nil, nil, nil, - nil, 1075, 1075, 1081, 1081, 1081, 1081, nil, nil, 1075, - nil, 1075, 1075, 1075, nil, nil, 1075, 1075, nil, 1081, - 1081, 1081, 1081, nil, nil, nil, 1081, nil, nil, nil, - nil, nil, 1081, 1081, nil, nil, 1081, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 1081, nil, nil, 1081, - nil, nil, nil, 1081, nil, nil, 1081, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 1081, nil, nil, nil, 1081, 1081, 1081, 1081, - nil, 1081, 1081, 1081, 1081, nil, nil, nil, nil, 1081, - 1081, 1082, 1082, 1082, 1082, nil, nil, 1081, nil, 1081, - 1081, 1081, nil, nil, 1081, 1081, nil, 1082, 1082, 1082, - 1082, nil, nil, nil, 1082, nil, nil, nil, nil, nil, - 1082, 1082, nil, nil, 1082, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 1082, nil, nil, 1082, nil, nil, - nil, 1082, nil, nil, 1082, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 1082, nil, nil, nil, 1082, 1082, 1082, 1082, nil, 1082, - 1082, 1082, 1082, nil, nil, nil, nil, 1082, 1082, 1114, - 1114, 1114, 1114, nil, nil, 1082, nil, 1082, 1082, 1082, - nil, nil, 1082, 1082, nil, 1114, 1114, 1114, 1114, nil, - nil, nil, 1114, 1114, nil, nil, nil, nil, 1114, 1114, - nil, nil, 1114, 1114, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 1114, nil, nil, 1114, nil, nil, nil, 1114, - nil, nil, 1114, nil, 1114, nil, nil, nil, nil, nil, - nil, 1114, nil, nil, nil, nil, nil, nil, 1114, nil, - nil, nil, 1114, 1114, 1114, 1114, nil, 1114, 1114, 1114, - 1114, nil, nil, nil, nil, 1114, 1114, 1194, 1194, 1194, - 1194, nil, nil, 1114, nil, 1114, 1114, 1114, nil, nil, - 1114, 1114, nil, 1194, 1194, 1194, 1194, nil, nil, nil, - 1194, nil, nil, nil, nil, nil, 1194, 1194, nil, nil, - 1194, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 1194, nil, nil, 1194, nil, nil, nil, 1194, nil, nil, - 1194, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 1194, nil, nil, nil, - 1194, 1194, 1194, 1194, nil, 1194, 1194, 1194, 1194, nil, - nil, nil, nil, 1194, 1194, 1202, 1202, 1202, 1202, nil, - nil, 1194, nil, 1194, 1194, 1194, nil, nil, 1194, 1194, - nil, 1202, 1202, 1202, 1202, nil, nil, nil, 1202, nil, - nil, nil, nil, nil, 1202, 1202, nil, nil, 1202, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 1202, nil, - nil, 1202, nil, nil, nil, 1202, nil, nil, 1202, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 1202, nil, nil, nil, 1202, 1202, - 1202, 1202, nil, 1202, 1202, 1202, 1202, nil, nil, nil, - nil, 1202, 1202, 1206, 1206, 1206, 1206, nil, nil, 1202, - nil, 1202, 1202, 1202, nil, nil, 1202, 1202, nil, 1206, - 1206, 1206, 1206, nil, nil, nil, 1206, nil, nil, nil, - nil, nil, 1206, 1206, nil, nil, 1206, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 1206, nil, nil, 1206, - nil, nil, nil, 1206, nil, nil, 1206, nil, 1206, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 1206, nil, nil, nil, 1206, 1206, 1206, 1206, - nil, 1206, 1206, 1206, 1206, nil, nil, nil, nil, 1206, - 1206, 1238, 1238, 1238, 1238, nil, nil, 1206, nil, 1206, - 1206, 1206, nil, nil, 1206, 1206, nil, 1238, 1238, 1238, - 1238, nil, nil, nil, 1238, nil, nil, nil, nil, nil, - 1238, 1238, nil, nil, 1238, nil, nil, nil, nil, nil, - nil, nil, 997, 997, 997, 997, nil, nil, nil, nil, - nil, nil, nil, nil, 1238, nil, nil, 1238, 997, 997, - 997, 1238, nil, nil, 1238, nil, nil, nil, nil, nil, - nil, 997, 997, nil, nil, 997, nil, nil, nil, nil, - 1238, nil, nil, nil, 1238, 1238, 1238, 1238, nil, 1238, - 1238, 1238, 1238, nil, nil, nil, nil, 1238, 1238, nil, - nil, nil, nil, nil, nil, 1238, nil, 1238, 1238, 1238, - nil, nil, 1238, 1238, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 997, 997, 997, 997, nil, - 997, 997, 997, 997, nil, nil, nil, nil, 997, 997, - 998, 998, 998, 998, nil, nil, 997, nil, 997, 997, - 997, nil, nil, nil, nil, nil, 998, 998, 998, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 998, - 998, nil, nil, 998, 1088, 1088, 1088, 1088, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 1088, 1088, 1088, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 1088, 1088, nil, nil, 1088, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 998, 998, 998, 998, nil, 998, 998, - 998, 998, nil, nil, nil, nil, 998, 998, nil, nil, - nil, nil, nil, nil, 998, nil, 998, 998, 998, nil, - nil, nil, nil, nil, nil, nil, nil, 1088, 1088, 1088, - 1088, nil, 1088, 1088, 1088, 1088, nil, nil, nil, nil, - 1088, 1088, 1089, 1089, 1089, 1089, nil, nil, 1088, nil, - 1088, 1088, 1088, nil, nil, nil, nil, nil, 1089, 1089, - 1089, 648, nil, 648, 648, 648, 648, 648, nil, nil, - nil, 1089, 1089, nil, nil, 1089, 648, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 648, nil, - nil, nil, nil, nil, nil, nil, nil, 648, 648, 648, - 648, nil, nil, nil, 648, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 1089, 1089, 1089, 1089, nil, - 1089, 1089, 1089, 1089, nil, nil, nil, nil, 1089, 1089, - nil, nil, nil, nil, nil, nil, 1089, nil, 1089, 1089, - 1089, nil, nil, 711, 648, 711, 711, 711, 711, 711, - nil, 713, nil, 713, 713, 713, 713, 713, 711, nil, - nil, nil, nil, nil, nil, nil, 713, nil, 954, nil, - 954, 954, 954, 954, 954, nil, nil, nil, nil, nil, - 711, nil, nil, 954, nil, nil, nil, nil, 713, 711, - 711, 711, 711, nil, nil, nil, 711, 713, 713, 713, - 713, nil, nil, nil, 713, 954, nil, nil, nil, nil, - nil, nil, nil, nil, 954, 954, 954, 954, nil, nil, - 956, 954, 956, 956, 956, 956, 956, 958, nil, 958, - 958, 958, 958, 958, nil, 956, 711, nil, nil, nil, - nil, nil, 958, nil, 713, 960, nil, 960, 960, 960, - 960, 960, nil, nil, nil, nil, nil, 956, nil, nil, - 960, 954, nil, nil, 958, nil, nil, nil, 956, 956, - nil, nil, nil, 956, nil, 958, 958, nil, nil, nil, - 958, 1130, 960, 1130, 1130, 1130, 1130, 1130, nil, nil, - nil, nil, nil, 960, 960, nil, 1130, nil, 960, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 956, nil, nil, nil, nil, 1130, nil, - 958, nil, nil, nil, nil, nil, nil, nil, nil, 1130, - 1130, 226, 226, nil, 1130, 226, nil, nil, 960, nil, - nil, nil, nil, 226, 226, nil, 226, 226, 226, 226, - 226, 226, 226, nil, nil, 226, 226, nil, nil, nil, - 226, 226, 226, 226, nil, nil, nil, nil, nil, 226, - nil, nil, nil, nil, 1130, nil, nil, 226, 226, nil, - 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, - 226, 226, 227, 227, 226, nil, 227, nil, nil, nil, - nil, nil, nil, nil, 227, 227, nil, 227, 227, 227, - 227, 227, 227, 227, nil, nil, 227, 227, nil, nil, - nil, 227, 227, 227, 227, nil, nil, nil, nil, nil, - 227, nil, nil, nil, nil, nil, nil, nil, 227, 227, - nil, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 303, 303, 227, nil, 303, nil, nil, - nil, nil, nil, nil, nil, 303, 303, nil, 303, 303, - 303, 303, 303, 303, 303, nil, nil, 303, 303, nil, - nil, nil, 303, 303, 303, 303, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 303, - 303, nil, 303, 303, 303, 303, 303, 303, 303, 303, - 303, 303, 303, 303, 521, 521, 303, nil, 521, nil, - nil, nil, nil, nil, nil, nil, 521, 521, nil, 521, - 521, 521, 521, 521, 521, 521, nil, nil, 521, 521, - nil, nil, nil, 521, 521, 521, 521, nil, nil, nil, - nil, nil, 521, nil, nil, nil, nil, nil, nil, nil, - 521, 521, nil, 521, 521, 521, 521, 521, 521, 521, - 521, 521, 521, 521, 521, 522, 522, 521, nil, 522, - nil, nil, nil, nil, nil, nil, nil, 522, 522, nil, - 522, 522, 522, 522, 522, 522, 522, nil, nil, 522, - 522, nil, nil, nil, 522, 522, 522, 522, nil, nil, - nil, nil, nil, 522, nil, nil, nil, nil, nil, nil, - nil, 522, 522, nil, 522, 522, 522, 522, 522, 522, - 522, 522, 522, 522, 522, 522, 595, 595, 522, nil, - 595, nil, nil, nil, nil, nil, nil, nil, 595, 595, - nil, 595, 595, 595, 595, 595, 595, 595, nil, nil, - 595, 595, nil, nil, nil, 595, 595, 595, 595, nil, - nil, nil, nil, nil, 595, nil, nil, nil, nil, nil, - nil, nil, 595, 595, nil, 595, 595, 595, 595, 595, - 595, 595, 595, 595, 595, 595, 595, 596, 596, 595, - nil, 596, nil, nil, nil, nil, nil, nil, nil, 596, - 596, nil, 596, 596, 596, 596, 596, 596, 596, nil, - nil, 596, 596, nil, nil, nil, 596, 596, 596, 596, - nil, nil, nil, nil, nil, 596, nil, nil, nil, nil, - nil, nil, nil, 596, 596, nil, 596, 596, 596, 596, - 596, 596, 596, 596, 596, 596, 596, 596, 605, 605, - 596, nil, 605, nil, nil, nil, nil, nil, nil, nil, - 605, 605, nil, 605, 605, 605, 605, 605, 605, 605, - nil, nil, 605, 605, nil, nil, nil, 605, 605, 605, - 605, nil, nil, nil, nil, nil, 605, nil, nil, nil, - nil, nil, nil, nil, 605, 605, nil, 605, 605, 605, - 605, 605, 605, 605, 605, 605, 605, 605, 605, 606, - 606, 605, nil, 606, nil, nil, nil, nil, nil, nil, - nil, 606, 606, nil, 606, 606, 606, 606, 606, 606, - 606, nil, nil, 606, 606, nil, nil, nil, 606, 606, - 606, 606, nil, nil, nil, nil, nil, 606, nil, nil, - nil, nil, nil, nil, nil, 606, 606, nil, 606, 606, - 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, - 633, 633, 606, nil, 633, nil, nil, nil, nil, nil, - nil, nil, 633, 633, nil, 633, 633, 633, 633, 633, - 633, 633, nil, nil, 633, 633, nil, nil, nil, 633, - 633, 633, 633, nil, nil, nil, nil, nil, 633, nil, - nil, nil, nil, nil, nil, nil, 633, 633, nil, 633, - 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, - 633, 634, 634, 633, nil, 634, nil, nil, nil, nil, - nil, nil, nil, 634, 634, nil, 634, 634, 634, 634, - 634, 634, 634, nil, nil, 634, 634, nil, nil, nil, - 634, 634, 634, 634, nil, nil, nil, nil, nil, 634, - nil, nil, nil, nil, nil, nil, nil, 634, 634, nil, - 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, - 634, 634, 640, 640, 634, nil, 640, nil, nil, nil, - nil, nil, nil, nil, 640, 640, nil, 640, 640, 640, - 640, 640, 640, 640, nil, nil, 640, 640, nil, nil, - nil, 640, 640, 640, 640, nil, nil, nil, nil, nil, - 640, nil, nil, nil, nil, nil, nil, nil, 640, 640, - nil, 640, 640, 640, 640, 640, 640, 640, 640, 640, - 640, 640, 640, 641, 641, 640, nil, 641, nil, nil, - nil, nil, nil, nil, nil, 641, 641, nil, 641, 641, - 641, 641, 641, 641, 641, nil, nil, 641, 641, nil, - nil, nil, 641, 641, 641, 641, nil, nil, nil, nil, - nil, 641, nil, nil, nil, nil, nil, nil, nil, 641, - 641, nil, 641, 641, 641, 641, 641, 641, 641, 641, - 641, 641, 641, 641, 678, 678, 641, nil, 678, nil, - nil, nil, nil, nil, nil, nil, 678, 678, nil, 678, - 678, 678, 678, 678, 678, 678, nil, nil, 678, 678, - nil, nil, nil, 678, 678, 678, 678, nil, nil, nil, - nil, nil, 678, nil, nil, nil, nil, nil, nil, nil, - 678, 678, nil, 678, 678, 678, 678, 678, 678, 678, - 678, 678, 678, 678, 678, 679, 679, 678, nil, 679, - nil, nil, nil, nil, nil, nil, nil, 679, 679, nil, - 679, 679, 679, 679, 679, 679, 679, nil, nil, 679, - 679, nil, nil, nil, 679, 679, 679, 679, nil, nil, - nil, nil, nil, 679, nil, nil, nil, nil, nil, nil, - nil, 679, 679, nil, 679, 679, 679, 679, 679, 679, - 679, 679, 679, 679, 679, 679, 1127, 1127, 679, nil, - 1127, nil, nil, nil, nil, nil, nil, nil, 1127, 1127, - nil, 1127, 1127, 1127, 1127, 1127, 1127, 1127, nil, nil, - 1127, 1127, nil, nil, nil, 1127, 1127, 1127, 1127, nil, - nil, nil, nil, nil, 1127, nil, nil, nil, nil, nil, - nil, nil, 1127, 1127, nil, 1127, 1127, 1127, 1127, 1127, - 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1128, 1128, 1127, - nil, 1128, nil, nil, nil, nil, nil, nil, nil, 1128, - 1128, nil, 1128, 1128, 1128, 1128, 1128, 1128, 1128, nil, - nil, 1128, 1128, nil, nil, nil, 1128, 1128, 1128, 1128, - nil, nil, nil, nil, nil, 1128, nil, nil, nil, nil, - nil, nil, nil, 1128, 1128, nil, 1128, 1128, 1128, 1128, - 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1178, 1178, - 1128, nil, 1178, nil, nil, nil, nil, nil, nil, nil, - 1178, 1178, nil, 1178, 1178, 1178, 1178, 1178, 1178, 1178, - nil, nil, 1178, 1178, nil, nil, nil, 1178, 1178, 1178, - 1178, nil, nil, nil, nil, nil, 1178, nil, nil, nil, - nil, nil, nil, nil, 1178, 1178, nil, 1178, 1178, 1178, - 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, nil, - nil, 1178 ] - -racc_action_pointer = [ - nil, 52, 1004, 256, nil, -110, nil, 5323, 1133, 170, - 24870, 24998, 190, nil, 176, 191, 482, 259, -62, 58, - 124, 138, nil, -68, 5454, 1004, 25382, 349, nil, 171, - nil, -8, 5595, 5705, 5839, 5970, 6101, nil, 1148, 23012, - 23143, nil, 320, 356, 466, 435, 6232, 6363, 310, 6494, - 6625, 556, 6756, 375, 333, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 6897, nil, 1292, 7034, 7165, -23, - nil, 7296, 7427, nil, nil, 7558, 23282, 23413, 23544, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 235, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 0, 112, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 7701, nil, nil, nil, nil, - 7844, 7975, 8106, 8237, 8380, nil, 1436, nil, 673, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 393, nil, 1580, - 8511, 8642, 8773, 8904, 9035, 9166, 27600, 27661, nil, nil, - 387, 1724, 415, nil, 358, 15855, 430, 1868, 9297, 9428, - 9559, nil, nil, 519, -85, -29, 550, -23, 469, 584, - nil, 9690, 214, 243, 2012, 586, nil, nil, 9821, 9952, - 10083, 10214, 10345, 10476, 10607, 10738, 10869, 11000, 11131, 11262, - 11393, 11524, 11655, 11786, 11917, 12048, 12179, 12310, 12441, 12572, - nil, nil, nil, nil, 12703, nil, nil, 339, 409, 513, - 523, 531, 556, 582, 583, 625, 630, nil, nil, nil, - 12834, nil, nil, 27722, nil, nil, 594, 12965, 13096, nil, - nil, nil, nil, nil, nil, nil, 13227, nil, 1436, nil, - 562, 572, nil, 13358, 624, nil, 13489, nil, nil, 13620, - 13751, nil, nil, -77, nil, 13894, 1277, 623, 619, 2156, - 636, 683, 647, 23675, 2300, 692, 813, 831, 745, 870, - nil, 720, 686, 225, 741, 746, nil, nil, nil, 757, - 360, 716, 23814, nil, 523, 898, 2732, 2876, 790, nil, - 792, 14025, nil, 772, 2444, nil, nil, 275, 429, 777, - 761, 539, 795, nil, 606, -1, 11, 14156, 2588, 2732, - 230, 875, 768, -18, 10, 903, 850, 11, 883, nil, - nil, 479, 728, 590, nil, 904, nil, 802, 14287, nil, - 15885, nil, 193, 294, 405, 463, 468, -41, -27, 506, - nil, nil, nil, nil, nil, nil, nil, 797, 25126, nil, - nil, nil, nil, 801, nil, 876, 788, 789, 14418, nil, - nil, 778, nil, 918, 140, 897, nil, nil, 1148, nil, - nil, nil, nil, nil, 1292, 814, nil, 815, 817, 613, - 691, 14559, nil, nil, nil, nil, 222, 361, 862, nil, - nil, 14691, 14827, 14964, 946, 947, nil, nil, -1, 828, - 827, 841, nil, nil, 843, 844, 845, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 834, 2574, nil, nil, - 15095, nil, nil, nil, nil, nil, nil, nil, 932, nil, - nil, 933, 385, 15226, 976, nil, nil, nil, -33, nil, - 903, 27783, 27844, 15357, 141, 15488, 15619, 15750, 853, 854, - nil, nil, nil, 3020, 3164, 672, 791, 934, 937, 947, - 950, 4748, 4892, 5036, 3308, 3452, 3596, 3740, 3884, 4028, - 2760, 2904, 4172, 4316, 1580, 4460, nil, -7, nil, 15891, - nil, nil, nil, nil, 16021, 887, 885, 890, nil, nil, - nil, 899, nil, nil, 16152, nil, 16283, nil, 16414, nil, - 217, nil, nil, nil, 16557, 1421, nil, 900, 898, nil, - nil, 899, 23945, 911, 16700, 27905, 27966, 1004, 954, nil, - nil, 24076, 911, nil, 16831, 28027, 28088, 16962, 4604, 17093, - nil, nil, 1038, 974, nil, 17224, nil, nil, 17355, nil, - nil, nil, 2876, 1072, nil, 3020, 62, 1076, 1081, 236, - 1084, 17486, 17617, 28149, 28210, 27, nil, nil, 1046, nil, - 28271, 28332, 17748, nil, nil, 490, 3164, nil, 27320, nil, - nil, nil, nil, 725, nil, nil, nil, 975, nil, nil, - 400, nil, 461, nil, nil, 964, nil, 966, nil, nil, - nil, 25254, nil, 17891, 18022, 970, 18153, 18284, 28393, 28454, - 18427, 18558, 715, 1014, 18689, 18820, 18951, 19082, 1020, nil, - nil, 19213, nil, 19344, 1021, nil, 1075, nil, 259, 1724, - 1085, 1115, 19475, nil, nil, nil, nil, 715, nil, nil, - 649, 27412, nil, 27420, nil, 25827, nil, 986, 19606, nil, - 2603, nil, 1001, 1003, 1566, 1007, nil, nil, nil, nil, - 1095, 1098, nil, nil, nil, 237, 280, 471, 610, 1015, - 19737, 19868, nil, nil, nil, 1023, 25495, nil, 1147, nil, - 1130, -20, nil, nil, 19999, nil, 1047, 1052, 1153, nil, - 1031, nil, 1097, nil, nil, nil, 20130, nil, 134, 24207, - 1052, nil, 1057, 217, 248, 1100, 250, 1148, 1101, 1071, - 24338, nil, 585, 1142, 1868, 20261, nil, nil, 635, 824, - nil, 1214, nil, nil, nil, nil, nil, 1220, 1225, nil, - nil, 26, 1105, 40, 41, 151, 177, 3308, 827, 1292, - nil, 1108, 3452, 20392, nil, 1233, 63, 1114, nil, nil, - nil, 3596, nil, nil, 1113, nil, 1118, 1126, 1127, nil, - nil, 1129, 20523, 1142, 390, 391, 720, 859, nil, 2012, - 20654, nil, 1140, nil, nil, nil, nil, nil, nil, nil, - 1162, nil, nil, nil, 20785, 20916, 21047, 1270, nil, 3740, - 1147, 1195, nil, nil, 1152, nil, 1238, nil, nil, 1166, - 1167, nil, 1168, 1171, nil, 1172, nil, nil, nil, 1176, - 2633, 2613, nil, nil, 21178, 21309, 21440, 21571, 436, 352, - 25578, nil, 25676, 21702, nil, nil, 1199, nil, nil, 1215, - 1199, nil, nil, 788, 3884, nil, nil, nil, 1198, 254, - nil, 81, nil, 1324, nil, 21833, 1325, nil, nil, nil, - 21964, 4028, 71, 1339, nil, 1343, 527, 4172, nil, nil, - nil, nil, 1237, 1283, 1251, nil, 1246, 484, nil, nil, - 22095, nil, 2156, 1339, 1343, 2300, nil, 4316, nil, nil, - 32, 24469, nil, nil, 27437, nil, 27489, nil, 27496, nil, - 27514, nil, nil, nil, nil, 1255, 1258, 22226, 22357, nil, - -77, nil, nil, nil, nil, 1287, nil, nil, nil, 555, - 25774, 266, nil, 1271, 1354, 1273, nil, nil, 25873, nil, - nil, 476, nil, nil, 785, nil, nil, 27090, 27188, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 1616, 603, nil, nil, 2444, 4460, nil, nil, 1283, 1284, - nil, 1286, 1289, 1291, nil, 1316, 1296, 1284, 24600, nil, - nil, nil, nil, nil, 33, nil, nil, nil, 193, nil, - nil, nil, 1424, 4604, 4748, 1710, nil, nil, nil, nil, - 4892, 34, 35, 1190, 1388, 36, nil, 1311, 1312, 1315, - 1316, 3100, 3244, 25971, 1399, 26069, 86, 157, 26167, 26265, - 699, -32, 1322, 1342, nil, 26363, nil, 1340, 290, nil, - 1362, 26461, 26559, nil, 635, 1390, 266, nil, 27222, 27320, - nil, nil, nil, nil, 22488, nil, nil, nil, 813, nil, - nil, 15910, nil, nil, 25974, nil, 14622, nil, nil, 1369, - 24731, 1334, 1424, 5036, 26657, nil, nil, nil, nil, 1379, - 1487, 678, nil, nil, nil, 1509, 22619, 28515, 28576, 42, - 27550, nil, nil, nil, nil, 1384, nil, 1389, nil, nil, - nil, nil, 1393, 1395, 1396, 1400, 1402, 1405, nil, nil, - nil, 1453, 1415, 1416, nil, 1420, nil, nil, -69, 1422, - nil, nil, nil, nil, nil, nil, 1430, 1428, nil, nil, - 1429, 1430, 1433, 1435, nil, 1436, nil, 1436, 28637, nil, - 864, 98, 841, nil, nil, nil, 1854, nil, 1440, 102, - 138, 145, 181, 1438, 26755, nil, nil, nil, nil, nil, - nil, nil, 26853, nil, 392, nil, 26951, nil, nil, 26072, - nil, 23190, nil, 23722, nil, 25565, nil, nil, 1484, 1488, - nil, nil, 22750, 22881, nil, 146, nil, 1454, 1455, nil, - nil, 1456, 1459, 1460, 1461, 5180, nil, nil, 27049, 26366, - nil, nil, nil, nil, 35, 1463, nil, nil, nil, nil ] - -racc_action_default = [ - -1, -742, -4, -742, -2, -728, -5, -742, -8, -742, - -742, -742, -742, -31, -742, -742, -36, -742, -742, -638, - -638, -314, -53, -730, -742, -60, -742, -68, -69, -70, - -74, -288, -288, -288, -325, -352, -353, -87, -13, -91, - -99, -101, -742, -625, -626, -742, -742, -742, -742, -742, - -742, -239, -742, -730, -255, -305, -306, -307, -308, -309, - -310, -311, -312, -313, -718, -316, -13, -741, -706, -333, - -335, -742, -742, -62, -62, -728, -742, -742, -742, -354, - -355, -357, -358, -359, -360, -419, -563, -564, -565, -566, - -589, -569, -570, -591, -593, -576, -581, -585, -587, -602, - -603, -604, -589, -606, -608, -609, -610, -611, -612, -613, - -614, -716, -717, -617, -618, -619, -620, -621, -622, -623, - -624, -629, -630, 1250, -3, -729, -737, -738, -739, -7, - -742, -742, -742, -742, -742, -9, -4, -19, -742, -130, - -131, -132, -133, -134, -135, -136, -140, -141, -142, -143, - -144, -145, -146, -147, -148, -149, -150, -151, -152, -153, - -154, -155, -156, -157, -158, -159, -160, -161, -162, -163, - -164, -165, -166, -167, -168, -169, -170, -171, -172, -173, - -174, -175, -176, -177, -178, -179, -180, -181, -182, -183, - -184, -185, -186, -187, -188, -189, -190, -191, -192, -193, - -194, -195, -196, -197, -198, -199, -200, -201, -202, -203, - -204, -205, -206, -207, -208, -209, -210, -24, -137, -13, - -742, -742, -742, -742, -742, -278, -742, -742, -726, -727, - -742, -13, -637, -635, -661, -661, -742, -13, -742, -742, - -730, -731, -57, -742, -625, -626, -742, -314, -742, -742, - -245, -742, -638, -638, -13, -742, -741, -741, -222, -223, - -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, - -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, - -259, -260, -261, -262, -742, -64, -65, -742, -130, -131, - -170, -171, -172, -188, -193, -200, -203, -625, -626, -704, - -742, -428, -430, -742, -724, -725, -75, -278, -742, -332, - -434, -443, -445, -82, -440, -83, -730, -84, -266, -283, - -293, -293, -287, -291, -294, -295, -299, -589, -708, -712, - -715, -85, -86, -728, -14, -742, -17, -742, -89, -13, - -730, -742, -92, -95, -13, -107, -108, -742, -742, -115, - -325, -328, -730, -742, -638, -638, -352, -353, -356, -441, - -742, -97, -742, -103, -322, -742, -224, -225, -607, -233, - -234, -742, -246, -741, -13, -318, -267, -730, -730, -742, - -742, -730, -742, -334, -61, -742, -742, -742, -13, -13, - -728, -742, -729, -625, -626, -742, -742, -314, -742, -370, - -371, -125, -126, -742, -128, -742, -314, -633, -742, -348, - -661, -567, -742, -742, -742, -742, -742, -742, -742, -742, - -6, -740, -25, -26, -27, -28, -29, -742, -742, -21, - -22, -23, -138, -742, -32, -35, -301, -742, -299, -300, - -33, -742, -37, -742, -314, -50, -52, -211, -271, -294, - -54, -55, -38, -212, -271, -730, -279, -293, -293, -716, - -717, -288, -438, -718, -719, -720, -717, -716, -288, -437, - -439, -718, -720, -742, -555, -742, -383, -384, -687, -730, - -703, -703, -643, -644, -646, -646, -646, -660, -662, -663, - -664, -665, -666, -667, -668, -669, -670, -742, -672, -674, - -676, -681, -683, -684, -685, -692, -694, -695, -697, -698, - -699, -701, -742, -742, -742, -46, -219, -56, -730, -331, - -742, -742, -742, -278, -322, -742, -742, -742, -742, -742, - -741, -457, -741, -220, -221, -226, -227, -228, -229, -230, - -231, -235, -236, -237, -238, -240, -241, -242, -243, -244, - -247, -248, -249, -250, -730, -263, -66, -730, -449, -288, - -716, -717, -72, -76, -662, -730, -293, -730, -289, -447, - -449, -730, -327, -284, -742, -285, -742, -290, -742, -298, - -742, -711, -714, -12, -729, -16, -18, -730, -88, -320, - -104, -93, -742, -730, -278, -742, -742, -114, -742, -637, - -607, -742, -100, -105, -742, -742, -742, -742, -264, -742, - -265, -741, -742, -742, -268, -736, -735, -270, -736, -323, - -324, -707, -13, -361, -362, -13, -742, -742, -742, -742, - -742, -742, -278, -742, -742, -322, -62, -125, -126, -127, - -742, -742, -278, -344, -631, -742, -13, -420, -661, -423, - -568, -590, -595, -742, -597, -571, -592, -742, -594, -575, - -742, -578, -742, -580, -583, -742, -584, -742, -605, -10, - -20, -742, -30, -742, -742, -304, -742, -278, -742, -742, - -742, -742, -442, -742, -280, -282, -742, -742, -77, -277, - -435, -742, -447, -742, -79, -436, -44, -47, -730, -256, - -253, -741, -741, -350, -524, -686, -636, -742, -641, -642, - -742, -742, -653, -742, -656, -742, -658, -742, -742, -372, - -742, -374, -376, -379, -382, -730, -675, -696, -700, -639, - -45, -254, -351, -330, -732, -716, -717, -717, -716, -730, - -742, -742, -741, -455, -741, -742, -742, -705, -742, -450, - -71, -431, -447, -273, -280, -275, -742, -409, -742, -326, - -293, -292, -296, -297, -709, -710, -742, -15, -90, -742, - -96, -102, -730, -716, -717, -276, -721, -113, -742, -98, - -742, -218, -321, -232, -251, -742, -317, -319, -730, -741, - -363, -741, -63, -364, -365, -338, -339, -742, -742, -741, - -341, -742, -730, -716, -717, -721, -321, -13, -125, -126, - -129, -730, -13, -742, -346, -742, -742, -730, -596, -600, - -601, -13, -572, -573, -577, -579, -582, -586, -588, -139, - -34, -302, -299, -730, -716, -717, -717, -716, -51, -272, - -742, -733, -293, -40, -214, -41, -215, -78, -42, -217, - -742, -43, -216, -80, -742, -742, -742, -741, -368, -13, - -556, -741, -557, -558, -703, -682, -687, -702, -645, -646, - -646, -673, -646, -646, -693, -646, -670, -386, -688, -730, - -742, -742, -381, -671, -742, -742, -742, -742, -442, -730, - -742, -456, -742, -742, -67, -429, -409, -433, -432, -742, - -730, -444, -410, -730, -13, -446, -286, -713, -94, -442, - -106, -730, -269, -742, -366, -742, -742, -340, -342, -741, - -742, -13, -442, -742, -442, -742, -742, -13, -349, -421, - -424, -426, -413, -742, -742, -574, -303, -442, -39, -213, - -281, -81, -48, -49, -258, -257, -11, -13, -562, -369, - -742, -742, -560, -640, -742, -649, -742, -651, -742, -654, - -742, -657, -659, -373, -375, -377, -380, -742, -742, -58, - -465, -468, -469, -470, -471, -473, -475, -478, -479, -534, - -730, -491, -494, -504, -508, -513, -515, -516, -519, -520, - -589, -523, -525, -526, -527, -532, -533, -742, -742, -537, - -538, -539, -540, -541, -542, -543, -544, -545, -546, -547, - -742, -742, -553, -59, -252, -13, -73, -274, -703, -703, - -390, -392, -392, -392, -408, -742, -730, -670, -678, -679, - -690, -448, -329, -336, -742, -337, -741, -296, -741, -343, - -345, -632, -742, -13, -13, -742, -422, -598, -599, -561, - -13, -625, -626, -742, -742, -314, -559, -646, -646, -646, - -646, -742, -742, -466, -742, -742, -476, -477, -742, -742, - -742, -496, -730, -730, -490, -497, -501, -742, -742, -493, - -742, -742, -742, -507, -514, -518, -742, -522, -530, -531, - -535, -536, -548, -549, -742, -126, -551, -451, -742, -388, - -389, -393, -399, -401, -742, -404, -742, -406, -411, -742, - -742, -677, -742, -13, -742, -452, -453, -454, -347, -742, - -742, -730, -415, -417, -418, -555, -278, -742, -742, -322, - -742, -647, -650, -652, -655, -378, -467, -504, -472, -474, - -483, -487, -730, -730, -730, -730, -730, -730, -552, -488, - -489, -511, -498, -499, -502, -730, -589, -734, -730, -505, - -509, -512, -517, -521, -528, -529, -730, -703, -680, -391, - -392, -392, -392, -392, -691, -392, -412, -689, -742, -322, - -741, -742, -462, -425, -427, -414, -742, -554, -730, -716, - -717, -721, -321, -646, -742, -480, -481, -482, -484, -485, - -486, -503, -742, -492, -742, -495, -742, -550, -387, -742, - -396, -742, -398, -742, -402, -742, -405, -407, -321, -721, - -367, -458, -742, -742, -416, -442, -648, -505, -500, -506, - -510, -392, -392, -392, -392, -13, -463, -464, -742, -742, - -394, -397, -400, -403, -741, -392, -459, -460, -461, -395 ] - -racc_goto_table = [ - 44, 302, 310, 314, 412, 44, 142, 142, 455, 385, - 386, 798, 286, 390, 383, 567, 419, 319, 319, 319, - 622, 625, 142, 226, 298, 242, 128, 384, 384, 475, - 701, 384, 285, 639, 304, 514, 44, 346, 346, 718, - 496, 496, 15, 342, 358, 358, 857, 15, 630, 708, - 709, 388, 389, 137, 218, 871, 145, 145, 530, 532, - 439, 440, 575, 742, 44, 744, 819, 731, 422, 423, - 424, 425, 913, 563, 394, 298, 298, 453, 15, 17, - 125, 358, 358, 358, 17, 864, 384, 384, 384, 384, - 565, 516, 135, 870, 368, 872, 128, 303, 461, 468, - 464, 464, 446, 124, 338, 446, 15, 237, 321, 321, - 321, 306, 313, 315, 602, 17, 399, 682, 874, 446, - 696, 479, 512, 44, 361, 320, 320, 320, 725, 487, - 487, 452, 44, 761, 44, 761, 916, 340, 609, 4, - 933, 378, 381, 17, 756, 515, 764, 614, 617, 1022, - 964, 621, 890, 1174, 892, 230, 236, 969, 377, 1013, - 730, 972, 1122, 972, 1079, 15, 1124, 317, 331, 332, - 966, 129, 612, 391, 15, 559, 15, 464, 450, 451, - 1072, 904, 748, 763, 1090, 1091, 1137, 8, 764, 1, - 1144, 1147, 8, 2, 758, 517, 518, 462, 1153, 575, - 1155, 946, 17, 407, 409, 767, 1159, 824, 319, 826, - 341, 17, 827, 17, 828, 217, 496, 44, 660, 662, - 400, 434, 445, 472, 763, 445, 1025, 435, 1073, 44, - 599, 599, 428, 792, 287, 44, 746, 752, 375, 445, - 671, 580, 371, 761, 761, 379, 751, 299, 521, 712, - 714, 716, 44, 380, 398, 764, 557, 643, 1174, 15, - 374, 441, 719, 1136, 441, 613, 812, 850, 1142, 1145, - 810, 15, 927, 427, 646, 1164, 1165, 15, 441, 656, - 658, 661, 661, 763, 965, 1023, 797, 1024, 1102, 420, - 319, 319, 304, 763, 15, 731, 17, 649, 17, 319, - 1026, 17, 1121, 1224, 871, 487, 739, 1124, 17, 647, - 8, 437, 437, 761, 17, 17, 1143, 1146, 1227, 426, - 1015, 8, 929, 410, 310, 626, 1228, 899, 816, 1229, - 314, 17, 964, 44, 1043, 1044, 1057, 44, 1203, 558, - 237, 346, 44, 384, 770, 569, 645, 1170, 358, 1109, - 1135, 879, 595, 779, 128, 556, 570, 896, 1115, 874, - 346, 1181, 1246, 763, 384, 1235, 603, 358, 1138, 1139, - 605, 1068, 44, 1069, 1078, 15, 785, 772, 516, 15, - 453, 1182, 321, 1116, 15, 972, 44, 44, 528, 529, - 321, 433, 1081, 461, 468, 464, 464, 1161, 566, 320, - 633, 888, 1162, 861, 950, 338, 600, 320, 584, 944, - 338, 128, 17, 411, 15, 802, 17, 413, 414, 415, - 586, 17, 416, 1093, 142, 811, 341, 591, 15, 15, - 417, 583, 689, 953, 909, 418, 921, 818, 587, 695, - 1047, 568, 237, 593, 815, 871, 1114, 821, 678, 571, - 813, 17, 1036, 869, 496, 847, 697, 781, 865, 1168, - 833, 853, 900, 1220, 922, 17, 17, 775, nil, 464, - 464, 670, nil, 924, 145, nil, 1167, 775, nil, 464, - 464, nil, nil, 1171, nil, 719, 1172, nil, 629, 882, - 1152, nil, 462, nil, nil, 937, 697, 1160, nil, 761, - nil, 906, 943, nil, nil, 775, 319, 464, 464, nil, - 764, 341, nil, 775, 464, 464, 341, 496, 472, 496, - 585, 908, 944, nil, nil, nil, 825, nil, 825, 763, - 689, nil, nil, 729, nil, 817, nil, nil, nil, 844, - 846, 688, 862, 487, 849, nil, 852, nil, 694, nil, - 461, 468, 464, 464, nil, nil, nil, 446, 912, 871, - 627, 628, nil, nil, nil, nil, 462, 446, 446, nil, - 1110, nil, 446, nil, 446, nil, 462, 319, nil, nil, - nil, nil, 44, 906, nil, 1050, nil, 1099, 1100, 1247, - 346, 1231, 472, 843, 845, nil, 603, 358, 848, 346, - 851, 919, 472, 866, 462, 603, 358, nil, nil, 1160, - 925, nil, 462, nil, 807, 319, nil, 1160, nil, nil, - 44, 1230, nil, 44, 15, 319, 1248, nil, nil, nil, - 472, nil, nil, nil, 955, 957, 472, 959, 961, 750, - 962, 1096, 1074, nil, 44, 719, 719, 793, 760, 462, - nil, nil, nil, 1230, nil, nil, nil, nil, nil, nil, - 319, 17, 15, nil, nil, 15, 814, 142, nil, 1113, - nil, 44, nil, nil, nil, 472, nil, 445, 44, nil, - nil, 1187, nil, nil, nil, nil, 15, 445, 445, 788, - nil, nil, 445, 939, 445, 1117, 898, nil, nil, 17, - 1148, nil, 17, nil, nil, nil, nil, nil, nil, 1027, - nil, nil, nil, 15, 829, nil, 441, 145, nil, nil, - 15, 446, 801, 17, 897, 1042, 441, 441, nil, 1141, - nil, 441, 894, 441, 1149, 1150, 1208, 844, 846, 849, - 852, 911, 142, nil, nil, nil, 689, 938, nil, 695, - 17, 926, 285, 17, nil, nil, nil, 17, 842, nil, - 496, nil, nil, 17, 17, nil, nil, 346, 17, 384, - 17, nil, nil, 603, 358, nil, nil, nil, 346, nil, - nil, 993, nil, 993, 910, 358, 991, nil, 991, nil, - nil, nil, nil, 437, 789, nil, nil, 791, nil, 18, - nil, nil, nil, nil, 18, 44, nil, 1198, 1199, 1200, - 44, nil, nil, 1097, nil, 867, 1221, nil, 867, 44, - 939, 243, 1131, 1132, 1133, 1134, 719, 719, 842, nil, - nil, 243, 243, 243, nil, 18, 347, 347, 697, nil, - nil, 445, 1120, nil, nil, nil, nil, 15, nil, nil, - 1225, nil, 15, 1034, nil, nil, nil, 44, 830, nil, - nil, 15, nil, 18, nil, 838, nil, nil, 243, 243, - nil, 384, 243, 395, 405, 405, nil, nil, nil, nil, - 441, nil, nil, nil, 17, nil, nil, nil, 1007, 17, - 1007, nil, nil, nil, nil, nil, nil, nil, 17, 15, - nil, nil, 44, nil, 1086, nil, nil, 1027, nil, 1188, - 1027, nil, nil, nil, nil, nil, nil, 17, nil, 44, - nil, nil, 18, nil, nil, 44, nil, 243, 243, 243, - 243, 18, nil, 18, nil, nil, 17, nil, nil, nil, - nil, nil, nil, nil, 15, 44, 1019, 1041, nil, 1052, - nil, nil, nil, nil, nil, nil, 358, nil, 1226, 993, - 993, 15, nil, nil, 991, 991, nil, 15, nil, 993, - nil, nil, nil, nil, 991, 993, nil, nil, 1007, 923, - 991, 17, nil, nil, nil, nil, 1007, 15, nil, nil, - nil, 1056, nil, 934, 866, 1007, 1007, nil, 17, 775, - nil, 464, 464, nil, 17, 993, nil, nil, nil, nil, - 991, 1020, nil, 44, nil, 1027, 18, 243, 443, 243, - 243, 443, 243, 873, 17, 875, 298, nil, 18, nil, - nil, 949, 1166, 358, 18, 443, 243, 243, nil, nil, - nil, 44, 44, nil, nil, nil, nil, 970, 44, 970, - 384, 18, 464, nil, nil, 15, nil, nil, 1127, nil, - nil, 1007, nil, 1007, nil, nil, 1007, 1007, nil, nil, - 1204, nil, nil, 1007, nil, nil, 1031, nil, nil, 1007, - 1007, nil, nil, 15, 15, nil, 1007, 1007, nil, nil, - 15, nil, 17, 1038, 1103, 1105, 1107, 243, 462, nil, - nil, nil, nil, nil, 243, 243, 233, 233, 298, 319, - nil, 44, 1007, 243, nil, 358, nil, nil, nil, 1049, - 17, 17, nil, nil, 472, nil, nil, 17, nil, nil, - nil, nil, 18, nil, nil, nil, 18, 1071, nil, nil, - 347, 18, nil, nil, 1019, 1085, nil, 1019, nil, 1019, - nil, nil, nil, 15, 376, nil, nil, 1028, nil, 347, - 1236, 1237, nil, nil, nil, 19, nil, nil, nil, nil, - 19, 18, nil, nil, 472, nil, nil, nil, 384, 384, - nil, nil, nil, nil, 243, 18, 18, nil, nil, nil, - 17, nil, 1007, nil, nil, nil, nil, nil, nil, nil, - 1007, 19, 354, 354, 1007, 243, 867, nil, nil, 1020, - nil, nil, 1020, 1021, 1020, 1119, nil, nil, nil, nil, - 1071, nil, 1125, nil, nil, 1071, 1071, nil, nil, 19, - nil, nil, nil, 44, nil, nil, 1007, nil, 1158, 354, - 354, 354, nil, 1210, 1212, 1214, 1216, 239, 1217, nil, - nil, nil, 1019, nil, 1019, nil, 1019, nil, 1019, nil, - nil, nil, nil, 999, 1058, 999, 1059, nil, 1060, nil, - 243, 970, nil, nil, nil, 15, nil, 373, nil, nil, - nil, nil, 1019, nil, nil, 1180, nil, nil, 19, nil, - nil, nil, nil, nil, nil, nil, nil, 19, 20, 19, - nil, nil, nil, 20, 1240, 1241, 1242, 1243, nil, nil, - 243, nil, 17, nil, nil, nil, nil, 1020, 1249, 1020, - 243, 1020, nil, 1020, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 20, 355, 355, nil, nil, 233, - 233, nil, nil, 531, 531, nil, nil, 1020, nil, nil, - nil, nil, 1028, 999, nil, 1028, nil, nil, 1028, nil, - 1028, 999, 20, nil, nil, nil, nil, nil, nil, nil, - 999, 999, 355, 355, 355, nil, nil, nil, nil, nil, - nil, 18, 19, nil, 19, nil, nil, 19, nil, 347, - nil, 243, nil, nil, 19, nil, nil, nil, 347, nil, - 19, 19, nil, nil, nil, nil, nil, 1244, nil, nil, - 519, nil, nil, nil, 1173, nil, 1175, 19, nil, 18, - nil, 20, 18, nil, nil, nil, nil, nil, nil, 243, - 20, nil, 20, nil, nil, nil, 999, nil, 999, 243, - 1193, 999, 999, 18, nil, nil, nil, nil, 999, nil, - nil, nil, nil, nil, 999, 999, nil, nil, nil, nil, - 610, 999, 999, 1028, nil, 1028, nil, 1028, nil, 1028, - 18, nil, nil, 443, 243, nil, nil, 18, nil, nil, - nil, nil, nil, 443, 443, nil, 572, 999, 443, nil, - 443, nil, nil, 1028, nil, nil, nil, nil, 19, nil, - nil, nil, 19, nil, nil, nil, 354, 19, nil, nil, - 588, nil, nil, nil, nil, 20, nil, 20, nil, 1232, - 20, 1233, nil, 1234, nil, 354, nil, 20, nil, nil, - nil, nil, nil, 20, 20, nil, nil, 19, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 21, 1245, - 20, 19, 19, 21, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 347, 999, nil, nil, - nil, nil, nil, nil, nil, 999, 598, 347, nil, 999, - nil, nil, 243, nil, 21, 349, 349, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 616, 616, nil, 18, 616, nil, nil, nil, 18, - 243, 999, 21, nil, nil, nil, nil, 743, 18, 743, - nil, nil, 397, 406, 406, nil, nil, nil, nil, nil, - nil, 20, nil, nil, nil, 20, nil, 443, nil, 355, - 20, nil, nil, nil, nil, nil, nil, nil, nil, 706, - nil, nil, 243, nil, nil, nil, 18, nil, 355, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 20, 21, nil, nil, nil, nil, nil, nil, nil, 683, - 21, nil, 21, nil, 20, 20, nil, nil, 733, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 610, nil, - nil, 18, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 243, nil, nil, nil, nil, nil, 18, nil, - nil, nil, nil, nil, 18, nil, nil, 747, nil, nil, - nil, nil, nil, nil, nil, 753, nil, 755, nil, nil, - nil, 759, nil, nil, 18, nil, nil, 19, 1053, nil, - nil, nil, nil, nil, nil, 354, nil, 768, nil, nil, - nil, nil, nil, 771, 354, 21, nil, 444, nil, nil, - 444, nil, nil, nil, nil, nil, nil, 21, 745, nil, - nil, nil, nil, 21, 444, 19, nil, nil, 19, 863, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 21, nil, nil, nil, nil, nil, nil, nil, nil, 19, - nil, nil, 18, 382, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 1111, nil, nil, nil, 891, - nil, 891, nil, nil, nil, nil, 19, nil, nil, 19, - 18, 18, nil, 19, nil, nil, nil, 18, nil, 19, - 19, nil, nil, nil, 19, nil, 19, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 20, 21, nil, nil, nil, 21, 531, nil, 355, 349, - 21, 243, nil, nil, nil, 883, nil, 355, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 1177, 349, nil, - 18, nil, nil, nil, nil, nil, nil, nil, 20, nil, - 21, 20, 855, 243, nil, nil, nil, nil, nil, nil, - nil, nil, 354, nil, 21, 21, nil, nil, nil, nil, - nil, nil, 20, 354, 948, nil, nil, nil, 952, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 683, nil, 436, 449, nil, nil, 20, - 19, nil, 20, nil, nil, 19, 20, nil, nil, nil, - nil, nil, 20, 20, 19, nil, nil, 20, nil, 20, - nil, nil, nil, nil, nil, nil, 683, nil, nil, nil, - nil, nil, nil, 19, nil, nil, 743, nil, nil, nil, - nil, nil, 616, nil, nil, nil, nil, nil, nil, 243, - 243, nil, 19, nil, nil, nil, 683, nil, nil, nil, - nil, nil, 18, nil, nil, 683, nil, nil, nil, nil, - nil, 932, nil, nil, nil, nil, nil, nil, nil, 963, - nil, nil, nil, nil, nil, nil, nil, 683, nil, nil, - nil, nil, nil, nil, nil, 355, nil, 19, 577, nil, - 1017, 579, nil, nil, 581, 582, 355, nil, nil, nil, - nil, 1032, nil, nil, 19, nil, nil, nil, nil, nil, - 19, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 20, nil, nil, nil, nil, 20, nil, - 19, nil, nil, 968, 354, nil, nil, 20, nil, nil, - nil, nil, nil, 891, nil, nil, nil, 932, nil, nil, - 21, nil, nil, nil, nil, nil, 20, nil, 349, nil, - nil, nil, nil, nil, nil, nil, nil, 349, nil, nil, - nil, nil, nil, nil, nil, 20, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 21, nil, - nil, 21, nil, nil, nil, nil, nil, nil, 19, nil, - nil, nil, nil, 675, nil, nil, nil, nil, nil, nil, - nil, 354, 21, nil, nil, nil, nil, nil, nil, 820, - 20, nil, nil, nil, 683, 1080, 19, 19, nil, nil, - nil, nil, nil, 19, nil, nil, nil, 20, nil, 21, - 31, nil, 444, 20, nil, 31, 21, nil, nil, nil, - nil, nil, 444, 444, nil, nil, 1140, 444, nil, 444, - nil, nil, 31, 20, nil, 726, nil, 355, nil, nil, - 932, nil, 31, 31, 31, nil, 31, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 354, nil, nil, 19, nil, nil, nil, - nil, nil, nil, nil, 31, nil, nil, nil, nil, 31, - 31, 683, nil, 31, nil, nil, 683, 683, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 20, 1195, 1196, 1197, 349, nil, nil, nil, 762, - nil, 382, nil, 765, 355, 1000, 349, 1000, 1205, nil, - nil, nil, nil, nil, nil, nil, 1207, nil, nil, 20, - 20, nil, nil, 31, nil, 1185, 20, nil, 31, 31, - 31, 31, 31, 21, 31, nil, nil, nil, 21, nil, - 762, nil, nil, 382, nil, nil, nil, 21, nil, 683, - 683, 683, nil, nil, nil, nil, 449, nil, nil, 1080, - nil, nil, nil, nil, nil, nil, 444, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 19, nil, - nil, nil, nil, nil, nil, 21, 355, nil, nil, 20, - nil, nil, 683, nil, nil, 1000, nil, nil, nil, 831, - nil, nil, nil, 1000, nil, nil, nil, nil, nil, 762, - 382, nil, 1000, 1000, nil, nil, nil, 31, 31, 31, - 31, 31, 31, 31, nil, nil, nil, 860, nil, 31, - 21, nil, nil, nil, nil, 31, 31, 31, 31, nil, - nil, nil, nil, 878, nil, nil, nil, 21, nil, nil, - nil, nil, 31, 21, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 21, nil, nil, nil, 1055, 1000, 762, - 1000, nil, nil, 1000, 1000, nil, nil, nil, nil, nil, - 1000, 907, nil, nil, nil, nil, 1000, 1000, 31, nil, - nil, nil, nil, 1000, 1000, 31, 31, nil, nil, nil, - nil, 20, nil, nil, 31, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 1000, - nil, nil, nil, 31, nil, nil, nil, 31, nil, nil, - nil, 21, 31, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 406, nil, 1001, 936, 1001, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 21, - 21, nil, 31, nil, nil, nil, 21, nil, nil, nil, - nil, nil, nil, nil, nil, 31, 31, 31, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 31, nil, nil, 1000, - nil, nil, nil, nil, nil, nil, nil, 1000, nil, nil, - nil, 1000, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 406, nil, nil, 21, - nil, nil, nil, nil, 34, 1037, 1001, nil, nil, 34, - nil, nil, nil, 1000, 1001, nil, nil, nil, nil, nil, - nil, nil, nil, 1001, 1001, 382, 34, nil, nil, nil, - nil, 31, nil, nil, nil, nil, 34, 34, 34, nil, - 34, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 34, nil, - nil, 31, nil, 34, 34, nil, nil, 34, nil, nil, - nil, 31, 43, nil, 1002, nil, 1002, 43, nil, 1001, - nil, 1001, nil, nil, 1001, 1001, nil, nil, nil, nil, - nil, 1001, nil, nil, nil, nil, 297, 1001, 1001, nil, - nil, nil, nil, nil, 1001, 1001, nil, nil, 43, 345, - 345, 21, nil, nil, nil, nil, nil, 34, nil, nil, - nil, nil, 34, 34, 34, 34, 34, nil, 34, nil, - 1001, nil, 31, nil, nil, nil, 43, nil, nil, nil, - nil, nil, 31, nil, nil, nil, 393, 297, 297, nil, - 1003, nil, 1003, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 1002, nil, nil, nil, nil, nil, - 31, nil, 1002, 31, nil, nil, nil, nil, nil, nil, - 31, 1002, 1002, nil, nil, nil, nil, nil, nil, nil, - 31, nil, nil, nil, 31, 43, nil, nil, nil, nil, - nil, nil, nil, nil, 43, nil, 43, nil, nil, nil, - 1001, 34, 34, 34, 34, 34, 34, 34, 1001, nil, - nil, 31, 1001, 34, 31, 31, nil, nil, 31, 34, - 34, 34, 34, nil, 31, 31, nil, nil, nil, 31, - 1003, 31, nil, nil, nil, nil, 34, 1002, 1003, 1002, - nil, nil, 1002, 1002, 1001, nil, nil, 1003, 1003, 1002, - nil, nil, nil, nil, nil, 1002, 1002, nil, nil, nil, - nil, nil, 1002, 1002, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 43, - nil, nil, 34, nil, nil, nil, nil, nil, 1002, 34, - 34, 43, nil, nil, nil, nil, nil, 43, 34, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 1003, 43, 1003, nil, 34, 1003, 1003, - nil, 34, nil, 31, nil, 1003, 34, nil, nil, nil, - nil, 1003, 1003, 1004, nil, 1004, nil, nil, 1003, 1003, - nil, nil, nil, nil, nil, 31, nil, nil, nil, nil, - 31, 31, nil, nil, nil, nil, 34, nil, nil, 31, - nil, nil, nil, nil, 1003, nil, nil, nil, 1002, 34, - 34, 34, nil, nil, nil, nil, 1002, nil, 31, nil, - 1002, nil, nil, nil, nil, nil, 1005, nil, 1005, nil, - 34, nil, nil, 31, nil, 43, nil, 31, nil, 43, - nil, nil, nil, 345, 43, nil, nil, nil, nil, nil, - nil, nil, 1002, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 345, 1004, nil, nil, nil, nil, nil, nil, - nil, 1004, nil, nil, 43, nil, nil, nil, nil, nil, - 1004, 1004, 31, nil, 1003, nil, nil, nil, 43, 43, - nil, nil, 1003, 31, nil, 34, 1003, nil, nil, 31, - nil, nil, nil, nil, nil, 31, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 1005, nil, nil, nil, - nil, nil, nil, nil, 1005, 31, nil, nil, 1003, nil, - nil, nil, nil, 1005, 1005, 34, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 34, 1004, nil, 1004, nil, - nil, 1004, 1004, nil, nil, nil, nil, nil, 1004, nil, - nil, nil, nil, nil, 1004, 1004, nil, nil, nil, nil, - nil, 1004, 1004, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 31, nil, nil, nil, 1004, nil, 1005, - nil, 1005, nil, nil, 1005, 1005, 34, nil, nil, nil, - nil, 1005, nil, nil, nil, nil, 34, 1005, 1005, nil, - nil, 31, 31, nil, 1005, 1005, nil, nil, 31, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 34, nil, nil, 34, nil, nil, - 1005, nil, nil, nil, 34, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 34, nil, nil, nil, 34, nil, - nil, nil, 31, nil, nil, nil, nil, 1004, nil, nil, - nil, nil, nil, nil, 43, 1004, nil, nil, nil, 1004, - nil, 31, 345, nil, nil, 34, nil, nil, 34, 34, - nil, 345, 34, nil, 31, nil, nil, nil, 34, 34, - nil, nil, nil, 34, nil, 34, nil, nil, nil, nil, - nil, 1004, 43, nil, nil, 43, nil, nil, nil, nil, - 1005, nil, nil, nil, nil, nil, nil, nil, 1005, 250, - nil, nil, 1005, nil, nil, nil, 43, nil, nil, 318, - 318, 318, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 366, 367, nil, 369, 370, nil, 372, nil, nil, - nil, nil, nil, 43, 1005, nil, nil, nil, nil, nil, - 43, nil, 318, 318, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 31, 31, nil, nil, nil, nil, nil, 34, nil, nil, - nil, nil, nil, 31, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 34, - nil, nil, nil, nil, 34, 34, nil, nil, nil, nil, - nil, nil, nil, 34, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 1006, nil, 1006, - nil, nil, 34, nil, nil, nil, nil, nil, nil, 345, - nil, nil, nil, nil, nil, nil, nil, 34, nil, nil, - 345, 34, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 43, nil, nil, - nil, nil, 43, nil, nil, nil, nil, nil, nil, nil, - nil, 43, nil, nil, nil, nil, 34, nil, nil, nil, - nil, nil, nil, nil, nil, 318, 448, 34, nil, 454, - 318, nil, nil, 34, nil, nil, nil, 1006, nil, 34, - nil, nil, nil, 454, nil, 1006, nil, nil, nil, 43, - nil, nil, nil, nil, 1006, 1006, 250, nil, nil, 34, - nil, nil, nil, 533, 534, 535, 536, 537, 538, 539, - 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, - 550, 551, 552, 553, 554, nil, nil, nil, nil, 555, - nil, 1008, nil, 1008, 43, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 43, 318, 318, nil, nil, nil, 43, nil, nil, - 1006, 318, 1006, nil, nil, 1006, 1006, 34, 318, nil, - nil, 318, 1006, nil, 318, 318, nil, 43, 1006, 1006, - nil, 1051, nil, nil, nil, 1006, 1006, nil, nil, nil, - nil, nil, nil, nil, nil, 34, 34, nil, nil, nil, - nil, nil, 34, nil, nil, nil, nil, nil, nil, nil, - nil, 1006, nil, nil, nil, nil, 608, nil, nil, nil, - nil, 1008, nil, nil, nil, nil, nil, nil, nil, 1008, - nil, nil, nil, nil, nil, nil, nil, nil, 1008, 1008, - nil, nil, nil, nil, nil, 43, 34, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 297, nil, - nil, nil, nil, nil, nil, 34, nil, nil, nil, nil, - nil, nil, nil, 43, 43, nil, nil, nil, 34, nil, - 43, nil, nil, 318, nil, nil, nil, nil, nil, nil, - nil, 1006, nil, nil, nil, nil, nil, nil, nil, 1006, - nil, nil, nil, 1006, 1008, nil, 1008, nil, nil, 1008, - 1008, nil, nil, nil, nil, nil, 1008, nil, 699, nil, - nil, nil, 1008, 1008, nil, nil, nil, nil, nil, 1008, - 1008, nil, nil, nil, nil, 1006, nil, nil, nil, nil, - 297, nil, nil, 43, nil, 318, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 1008, nil, nil, 699, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 318, nil, - 454, 454, 454, nil, 34, 34, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 34, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 367, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 318, - nil, 318, nil, 318, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 1008, nil, nil, nil, 318, - nil, nil, nil, 1008, nil, nil, nil, 1008, nil, 454, - nil, nil, 783, nil, 784, nil, nil, nil, nil, nil, - 318, nil, nil, 318, nil, 43, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 318, 318, nil, 1008, - nil, nil, nil, nil, nil, nil, nil, 318, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 318, - nil, 454, 318, nil, nil, nil, 839, nil, nil, 318, - 318, 454, 454, nil, nil, nil, 454, nil, 454, nil, - nil, nil, nil, nil, nil, nil, nil, 318, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 318, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 699, 699, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 318, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 318, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 318, nil, nil, - nil, nil, nil, nil, nil, 454, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 942, - 699, 945, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 454, - 454, 454, 454, nil, nil, nil, nil, nil, 1014, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 318, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 318, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 454, 699, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 318 ] - -racc_goto_check = [ - 74, 160, 94, 94, 199, 74, 77, 77, 31, 19, - 19, 117, 48, 19, 111, 95, 199, 39, 39, 39, - 114, 114, 77, 33, 74, 22, 121, 26, 26, 10, - 12, 26, 50, 75, 33, 10, 74, 74, 74, 137, - 233, 233, 23, 70, 86, 86, 13, 23, 116, 141, - 141, 46, 46, 17, 17, 234, 79, 79, 42, 42, - 24, 24, 97, 43, 74, 43, 206, 85, 19, 19, - 19, 19, 115, 59, 74, 74, 74, 81, 23, 29, - 7, 86, 86, 86, 29, 135, 26, 26, 26, 26, - 31, 81, 9, 148, 82, 148, 121, 53, 57, 57, - 63, 63, 20, 5, 66, 20, 23, 123, 93, 93, - 93, 58, 58, 58, 72, 29, 23, 32, 238, 20, - 36, 159, 159, 74, 71, 91, 91, 91, 131, 228, - 228, 28, 74, 98, 74, 98, 13, 67, 84, 2, - 151, 93, 93, 29, 60, 28, 242, 92, 92, 147, - 129, 92, 44, 239, 44, 35, 35, 45, 91, 45, - 36, 178, 153, 178, 188, 23, 154, 65, 65, 65, - 132, 6, 10, 5, 23, 57, 23, 63, 26, 26, - 176, 149, 163, 100, 203, 203, 193, 8, 242, 1, - 179, 179, 8, 3, 163, 26, 26, 94, 193, 97, - 179, 14, 29, 76, 76, 16, 194, 214, 39, 214, - 11, 29, 214, 29, 214, 18, 233, 74, 216, 216, - 21, 22, 22, 77, 100, 22, 151, 25, 177, 74, - 227, 227, 27, 47, 52, 74, 54, 62, 11, 22, - 80, 199, 87, 98, 98, 90, 96, 109, 33, 231, - 231, 231, 74, 110, 118, 242, 26, 120, 239, 23, - 124, 23, 130, 176, 23, 125, 126, 60, 176, 176, - 75, 23, 127, 2, 128, 203, 203, 23, 23, 217, - 217, 217, 217, 100, 133, 148, 116, 138, 144, 6, - 39, 39, 33, 100, 23, 85, 29, 159, 29, 39, - 145, 29, 152, 153, 234, 228, 31, 154, 29, 155, - 8, 91, 91, 98, 29, 29, 177, 177, 194, 8, - 149, 8, 156, 157, 94, 19, 194, 60, 158, 193, - 94, 29, 129, 74, 161, 162, 148, 74, 188, 164, - 123, 74, 74, 26, 72, 166, 19, 147, 86, 151, - 132, 131, 33, 72, 121, 53, 167, 170, 171, 238, - 74, 172, 173, 100, 26, 174, 70, 86, 181, 183, - 33, 184, 74, 185, 189, 23, 84, 31, 81, 23, - 81, 45, 93, 13, 23, 178, 74, 74, 35, 35, - 93, 11, 190, 57, 57, 63, 63, 196, 91, 91, - 33, 32, 197, 207, 208, 66, 82, 91, 7, 85, - 66, 121, 29, 211, 23, 31, 29, 212, 213, 215, - 9, 29, 218, 206, 77, 31, 11, 71, 23, 23, - 219, 5, 94, 141, 32, 220, 114, 221, 67, 94, - 222, 65, 123, 67, 10, 234, 44, 223, 33, 65, - 226, 29, 43, 232, 233, 59, 39, 81, 236, 237, - 31, 59, 95, 115, 32, 29, 29, 57, nil, 63, - 63, 17, nil, 32, 79, nil, 135, 57, nil, 63, - 63, nil, nil, 148, nil, 130, 148, nil, 5, 130, - 192, nil, 94, nil, nil, 32, 39, 192, nil, 98, - nil, 97, 36, nil, nil, 57, 39, 63, 63, nil, - 242, 11, nil, 57, 63, 63, 11, 233, 77, 233, - 8, 72, 85, nil, nil, nil, 217, nil, 217, 100, - 94, nil, nil, 121, nil, 159, nil, nil, nil, 81, - 81, 58, 24, 228, 81, nil, 81, nil, 58, nil, - 57, 57, 63, 63, nil, nil, nil, 20, 92, 234, - 11, 11, nil, nil, nil, nil, 94, 20, 20, nil, - 137, nil, 20, nil, 20, nil, 94, 39, nil, nil, - nil, nil, 74, 97, nil, 114, nil, 141, 141, 13, - 74, 148, 77, 28, 28, nil, 70, 86, 28, 74, - 28, 42, 77, 201, 94, 70, 86, nil, nil, 192, - 10, nil, 94, nil, 46, 39, nil, 192, nil, nil, - 74, 192, nil, 74, 23, 39, 117, nil, nil, nil, - 77, nil, nil, nil, 231, 231, 77, 231, 231, 58, - 231, 75, 32, nil, 74, 130, 130, 121, 93, 94, - nil, nil, nil, 192, nil, nil, nil, nil, nil, nil, - 39, 29, 23, nil, nil, 23, 121, 77, nil, 114, - nil, 74, nil, nil, nil, 77, nil, 22, 74, nil, - nil, 12, nil, nil, nil, nil, 23, 22, 22, 93, - nil, nil, 22, 81, 22, 116, 111, nil, nil, 29, - 75, nil, 29, nil, nil, nil, nil, nil, nil, 233, - nil, nil, nil, 23, 17, nil, 23, 79, nil, nil, - 23, 20, 91, 29, 160, 10, 23, 23, nil, 32, - nil, 23, 48, 23, 32, 32, 141, 81, 81, 81, - 81, 26, 77, nil, nil, nil, 94, 28, nil, 94, - 29, 19, 50, 29, nil, nil, nil, 29, 93, nil, - 233, nil, nil, 29, 29, nil, nil, 74, 29, 26, - 29, nil, nil, 70, 86, nil, nil, nil, 74, nil, - nil, 202, nil, 202, 70, 86, 201, nil, 201, nil, - nil, nil, nil, 91, 11, nil, nil, 11, nil, 30, - nil, nil, nil, nil, 30, 74, nil, 32, 32, 32, - 74, nil, nil, 10, nil, 142, 114, nil, 142, 74, - 81, 30, 231, 231, 231, 231, 130, 130, 93, nil, - nil, 30, 30, 30, nil, 30, 30, 30, 39, nil, - nil, 22, 10, nil, nil, nil, nil, 23, nil, nil, - 32, nil, 23, 19, nil, nil, nil, 74, 8, nil, - nil, 23, nil, 30, nil, 8, nil, nil, 30, 30, - nil, 26, 30, 30, 30, 30, nil, nil, nil, nil, - 23, nil, nil, nil, 29, nil, nil, nil, 74, 29, - 74, nil, nil, nil, nil, nil, nil, nil, 29, 23, - nil, nil, 74, nil, 199, nil, nil, 233, nil, 31, - 233, nil, nil, nil, nil, nil, nil, 29, nil, 74, - nil, nil, 30, nil, nil, 74, nil, 30, 30, 30, - 30, 30, nil, 30, nil, nil, 29, nil, nil, nil, - nil, nil, nil, nil, 23, 74, 134, 121, nil, 74, - nil, nil, nil, nil, nil, nil, 86, nil, 231, 202, - 202, 23, nil, nil, 201, 201, nil, 23, nil, 202, - nil, nil, nil, nil, 201, 202, nil, nil, 74, 11, - 201, 29, nil, nil, nil, nil, 74, 23, nil, nil, - nil, 23, nil, 11, 201, 74, 74, nil, 29, 57, - nil, 63, 63, nil, 29, 202, nil, nil, nil, nil, - 201, 142, nil, 74, nil, 233, 30, 30, 30, 30, - 30, 30, 30, 146, 29, 146, 74, nil, 30, nil, - nil, 11, 19, 86, 30, 30, 30, 30, nil, nil, - nil, 74, 74, nil, nil, nil, nil, 175, 74, 175, - 26, 30, 63, nil, nil, 23, nil, nil, 33, nil, - nil, 74, nil, 74, nil, nil, 74, 74, nil, nil, - 199, nil, nil, 74, nil, nil, 11, nil, nil, 74, - 74, nil, nil, 23, 23, nil, 74, 74, nil, nil, - 23, nil, 29, 11, 143, 143, 143, 30, 94, nil, - nil, nil, nil, nil, 30, 30, 88, 88, 74, 39, - nil, 74, 74, 30, nil, 86, nil, nil, nil, 11, - 29, 29, nil, nil, 77, nil, nil, 29, nil, nil, - nil, nil, 30, nil, nil, nil, 30, 175, nil, nil, - 30, 30, nil, nil, 134, 175, nil, 134, nil, 134, - nil, nil, nil, 23, 88, nil, nil, 235, nil, 30, - 19, 19, nil, nil, nil, 34, nil, nil, nil, nil, - 34, 30, nil, nil, 77, nil, nil, nil, 26, 26, - nil, nil, nil, nil, 30, 30, 30, nil, nil, nil, - 29, nil, 74, nil, nil, nil, nil, nil, nil, nil, - 74, 34, 34, 34, 74, 30, 142, nil, nil, 142, - nil, nil, 142, 146, 142, 11, nil, nil, nil, nil, - 175, nil, 11, nil, nil, 175, 175, nil, nil, 34, - nil, nil, nil, 74, nil, nil, 74, nil, 175, 34, - 34, 34, nil, 143, 143, 143, 143, 41, 143, nil, - nil, nil, 134, nil, 134, nil, 134, nil, 134, nil, - nil, nil, nil, 101, 146, 101, 146, nil, 146, nil, - 30, 175, nil, nil, nil, 23, nil, 41, nil, nil, - nil, nil, 134, nil, nil, 11, nil, nil, 34, nil, - nil, nil, nil, nil, nil, nil, nil, 34, 37, 34, - nil, nil, nil, 37, 143, 143, 143, 143, nil, nil, - 30, nil, 29, nil, nil, nil, nil, 142, 143, 142, - 30, 142, nil, 142, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 37, 37, 37, nil, nil, 88, - 88, nil, nil, 88, 88, nil, nil, 142, nil, nil, - nil, nil, 235, 101, nil, 235, nil, nil, 235, nil, - 235, 101, 37, nil, nil, nil, nil, nil, nil, nil, - 101, 101, 37, 37, 37, nil, nil, nil, nil, nil, - nil, 30, 34, nil, 34, nil, nil, 34, nil, 30, - nil, 30, nil, nil, 34, nil, nil, nil, 30, nil, - 34, 34, nil, nil, nil, nil, nil, 11, nil, nil, - 68, nil, nil, nil, 146, nil, 146, 34, nil, 30, - nil, 37, 30, nil, nil, nil, nil, nil, nil, 30, - 37, nil, 37, nil, nil, nil, 101, nil, 101, 30, - 146, 101, 101, 30, nil, nil, nil, nil, 101, nil, - nil, nil, nil, nil, 101, 101, nil, nil, nil, nil, - 88, 101, 101, 235, nil, 235, nil, 235, nil, 235, - 30, nil, nil, 30, 30, nil, nil, 30, nil, nil, - nil, nil, nil, 30, 30, nil, 68, 101, 30, nil, - 30, nil, nil, 235, nil, nil, nil, nil, 34, nil, - nil, nil, 34, nil, nil, nil, 34, 34, nil, nil, - 68, nil, nil, nil, nil, 37, nil, 37, nil, 146, - 37, 146, nil, 146, nil, 34, nil, 37, nil, nil, - nil, nil, nil, 37, 37, nil, nil, 34, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 38, 146, - 37, 34, 34, 38, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 30, 101, nil, nil, - nil, nil, nil, nil, nil, 101, 41, 30, nil, 101, - nil, nil, 30, nil, 38, 38, 38, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 41, 41, nil, 30, 41, nil, nil, nil, 30, - 30, 101, 38, nil, nil, nil, nil, 88, 30, 88, - nil, nil, 38, 38, 38, nil, nil, nil, nil, nil, - nil, 37, nil, nil, nil, 37, nil, 30, nil, 37, - 37, nil, nil, nil, nil, nil, nil, nil, nil, 68, - nil, nil, 30, nil, nil, nil, 30, nil, 37, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 37, 38, nil, nil, nil, nil, nil, nil, nil, 41, - 38, nil, 38, nil, 37, 37, nil, nil, 68, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 88, nil, - nil, 30, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 30, nil, nil, nil, nil, nil, 30, nil, - nil, nil, nil, nil, 30, nil, nil, 68, nil, nil, - nil, nil, nil, nil, nil, 68, nil, 68, nil, nil, - nil, 68, nil, nil, 30, nil, nil, 34, 30, nil, - nil, nil, nil, nil, nil, 34, nil, 68, nil, nil, - nil, nil, nil, 68, 34, 38, nil, 38, nil, nil, - 38, nil, nil, nil, nil, nil, nil, 38, 41, nil, - nil, nil, nil, 38, 38, 34, nil, nil, 34, 88, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 38, nil, nil, nil, nil, nil, nil, nil, nil, 34, - nil, nil, 30, 89, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 30, nil, nil, nil, 88, - nil, 88, nil, nil, nil, nil, 34, nil, nil, 34, - 30, 30, nil, 34, nil, nil, nil, 30, nil, 34, - 34, nil, nil, nil, 34, nil, 34, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 37, 38, nil, nil, nil, 38, 88, nil, 37, 38, - 38, 30, nil, nil, nil, 68, nil, 37, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 30, 38, nil, - 30, nil, nil, nil, nil, nil, nil, nil, 37, nil, - 38, 37, 41, 30, nil, nil, nil, nil, nil, nil, - nil, nil, 34, nil, 38, 38, nil, nil, nil, nil, - nil, nil, 37, 34, 88, nil, nil, nil, 88, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 41, nil, 89, 89, nil, nil, 37, - 34, nil, 37, nil, nil, 34, 37, nil, nil, nil, - nil, nil, 37, 37, 34, nil, nil, 37, nil, 37, - nil, nil, nil, nil, nil, nil, 41, nil, nil, nil, - nil, nil, nil, 34, nil, nil, 88, nil, nil, nil, - nil, nil, 41, nil, nil, nil, nil, nil, nil, 30, - 30, nil, 34, nil, nil, nil, 41, nil, nil, nil, - nil, nil, 30, nil, nil, 41, nil, nil, nil, nil, - nil, 41, nil, nil, nil, nil, nil, nil, nil, 68, - nil, nil, nil, nil, nil, nil, nil, 41, nil, nil, - nil, nil, nil, nil, nil, 37, nil, 34, 89, nil, - 68, 89, nil, nil, 89, 89, 37, nil, nil, nil, - nil, 68, nil, nil, 34, nil, nil, nil, nil, nil, - 34, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 37, nil, nil, nil, nil, 37, nil, - 34, nil, nil, 41, 34, nil, nil, 37, nil, nil, - nil, nil, nil, 88, nil, nil, nil, 41, nil, nil, - 38, nil, nil, nil, nil, nil, 37, nil, 38, nil, - nil, nil, nil, nil, nil, nil, nil, 38, nil, nil, - nil, nil, nil, nil, nil, 37, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 38, nil, - nil, 38, nil, nil, nil, nil, nil, nil, 34, nil, - nil, nil, nil, 89, nil, nil, nil, nil, nil, nil, - nil, 34, 38, nil, nil, nil, nil, nil, nil, 38, - 37, nil, nil, nil, 41, 41, 34, 34, nil, nil, - nil, nil, nil, 34, nil, nil, nil, 37, nil, 38, - 61, nil, 38, 37, nil, 61, 38, nil, nil, nil, - nil, nil, 38, 38, nil, nil, 68, 38, nil, 38, - nil, nil, 61, 37, nil, 89, nil, 37, nil, nil, - 41, nil, 61, 61, 61, nil, 61, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 34, nil, nil, 34, nil, nil, nil, - nil, nil, nil, nil, 61, nil, nil, nil, nil, 61, - 61, 41, nil, 61, nil, nil, 41, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 37, 68, 68, 68, 38, nil, nil, nil, 89, - nil, 89, nil, 89, 37, 102, 38, 102, 68, nil, - nil, nil, nil, nil, nil, nil, 68, nil, nil, 37, - 37, nil, nil, 61, nil, 41, 37, nil, 61, 61, - 61, 61, 61, 38, 61, nil, nil, nil, 38, nil, - 89, nil, nil, 89, nil, nil, nil, 38, nil, 41, - 41, 41, nil, nil, nil, nil, 89, nil, nil, 41, - nil, nil, nil, nil, nil, nil, 38, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 34, nil, - nil, nil, nil, nil, nil, 38, 37, nil, nil, 37, - nil, nil, 41, nil, nil, 102, nil, nil, nil, 89, - nil, nil, nil, 102, nil, nil, nil, nil, nil, 89, - 89, nil, 102, 102, nil, nil, nil, 61, 61, 61, - 61, 61, 61, 61, nil, nil, nil, 89, nil, 61, - 38, nil, nil, nil, nil, 61, 61, 61, 61, nil, - nil, nil, nil, 89, nil, nil, nil, 38, nil, nil, - nil, nil, 61, 38, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 38, nil, nil, nil, 38, 102, 89, - 102, nil, nil, 102, 102, nil, nil, nil, nil, nil, - 102, 89, nil, nil, nil, nil, 102, 102, 61, nil, - nil, nil, nil, 102, 102, 61, 61, nil, nil, nil, - nil, 37, nil, nil, 61, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 102, - nil, nil, nil, 61, nil, nil, nil, 61, nil, nil, - nil, 38, 61, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 38, nil, 103, 89, 103, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 38, - 38, nil, 61, nil, nil, nil, 38, nil, nil, nil, - nil, nil, nil, nil, nil, 61, 61, 61, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 61, nil, nil, 102, - nil, nil, nil, nil, nil, nil, nil, 102, nil, nil, - nil, 102, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 38, nil, nil, 38, - nil, nil, nil, nil, 64, 89, 103, nil, nil, 64, - nil, nil, nil, 102, 103, nil, nil, nil, nil, nil, - nil, nil, nil, 103, 103, 89, 64, nil, nil, nil, - nil, 61, nil, nil, nil, nil, 64, 64, 64, nil, - 64, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 64, nil, - nil, 61, nil, 64, 64, nil, nil, 64, nil, nil, - nil, 61, 73, nil, 104, nil, 104, 73, nil, 103, - nil, 103, nil, nil, 103, 103, nil, nil, nil, nil, - nil, 103, nil, nil, nil, nil, 73, 103, 103, nil, - nil, nil, nil, nil, 103, 103, nil, nil, 73, 73, - 73, 38, nil, nil, nil, nil, nil, 64, nil, nil, - nil, nil, 64, 64, 64, 64, 64, nil, 64, nil, - 103, nil, 61, nil, nil, nil, 73, nil, nil, nil, - nil, nil, 61, nil, nil, nil, 73, 73, 73, nil, - 105, nil, 105, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 104, nil, nil, nil, nil, nil, - 61, nil, 104, 61, nil, nil, nil, nil, nil, nil, - 61, 104, 104, nil, nil, nil, nil, nil, nil, nil, - 61, nil, nil, nil, 61, 73, nil, nil, nil, nil, - nil, nil, nil, nil, 73, nil, 73, nil, nil, nil, - 103, 64, 64, 64, 64, 64, 64, 64, 103, nil, - nil, 61, 103, 64, 61, 61, nil, nil, 61, 64, - 64, 64, 64, nil, 61, 61, nil, nil, nil, 61, - 105, 61, nil, nil, nil, nil, 64, 104, 105, 104, - nil, nil, 104, 104, 103, nil, nil, 105, 105, 104, - nil, nil, nil, nil, nil, 104, 104, nil, nil, nil, - nil, nil, 104, 104, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 73, - nil, nil, 64, nil, nil, nil, nil, nil, 104, 64, - 64, 73, nil, nil, nil, nil, nil, 73, 64, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 105, 73, 105, nil, 64, 105, 105, - nil, 64, nil, 61, nil, 105, 64, nil, nil, nil, - nil, 105, 105, 106, nil, 106, nil, nil, 105, 105, - nil, nil, nil, nil, nil, 61, nil, nil, nil, nil, - 61, 61, nil, nil, nil, nil, 64, nil, nil, 61, - nil, nil, nil, nil, 105, nil, nil, nil, 104, 64, - 64, 64, nil, nil, nil, nil, 104, nil, 61, nil, - 104, nil, nil, nil, nil, nil, 107, nil, 107, nil, - 64, nil, nil, 61, nil, 73, nil, 61, nil, 73, - nil, nil, nil, 73, 73, nil, nil, nil, nil, nil, - nil, nil, 104, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 73, 106, nil, nil, nil, nil, nil, nil, - nil, 106, nil, nil, 73, nil, nil, nil, nil, nil, - 106, 106, 61, nil, 105, nil, nil, nil, 73, 73, - nil, nil, 105, 61, nil, 64, 105, nil, nil, 61, - nil, nil, nil, nil, nil, 61, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 107, nil, nil, nil, - nil, nil, nil, nil, 107, 61, nil, nil, 105, nil, - nil, nil, nil, 107, 107, 64, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 64, 106, nil, 106, nil, - nil, 106, 106, nil, nil, nil, nil, nil, 106, nil, - nil, nil, nil, nil, 106, 106, nil, nil, nil, nil, - nil, 106, 106, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 61, nil, nil, nil, 106, nil, 107, - nil, 107, nil, nil, 107, 107, 64, nil, nil, nil, - nil, 107, nil, nil, nil, nil, 64, 107, 107, nil, - nil, 61, 61, nil, 107, 107, nil, nil, 61, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 64, nil, nil, 64, nil, nil, - 107, nil, nil, nil, 64, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 64, nil, nil, nil, 64, nil, - nil, nil, 61, nil, nil, nil, nil, 106, nil, nil, - nil, nil, nil, nil, 73, 106, nil, nil, nil, 106, - nil, 61, 73, nil, nil, 64, nil, nil, 64, 64, - nil, 73, 64, nil, 61, nil, nil, nil, 64, 64, - nil, nil, nil, 64, nil, 64, nil, nil, nil, nil, - nil, 106, 73, nil, nil, 73, nil, nil, nil, nil, - 107, nil, nil, nil, nil, nil, nil, nil, 107, 40, - nil, nil, 107, nil, nil, nil, 73, nil, nil, 40, - 40, 40, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 40, 40, nil, 40, 40, nil, 40, nil, nil, - nil, nil, nil, 73, 107, nil, nil, nil, nil, nil, - 73, nil, 40, 40, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 61, 61, nil, nil, nil, nil, nil, 64, nil, nil, - nil, nil, nil, 61, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 64, - nil, nil, nil, nil, 64, 64, nil, nil, nil, nil, - nil, nil, nil, 64, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 108, nil, 108, - nil, nil, 64, nil, nil, nil, nil, nil, nil, 73, - nil, nil, nil, nil, nil, nil, nil, 64, nil, nil, - 73, 64, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 73, nil, nil, - nil, nil, 73, nil, nil, nil, nil, nil, nil, nil, - nil, 73, nil, nil, nil, nil, 64, nil, nil, nil, - nil, nil, nil, nil, nil, 40, 40, 64, nil, 40, - 40, nil, nil, 64, nil, nil, nil, 108, nil, 64, - nil, nil, nil, 40, nil, 108, nil, nil, nil, 73, - nil, nil, nil, nil, 108, 108, 40, nil, nil, 64, - nil, nil, nil, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, nil, nil, nil, nil, 40, - nil, 113, nil, 113, 73, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 73, 40, 40, nil, nil, nil, 73, nil, nil, - 108, 40, 108, nil, nil, 108, 108, 64, 40, nil, - nil, 40, 108, nil, 40, 40, nil, 73, 108, 108, - nil, 73, nil, nil, nil, 108, 108, nil, nil, nil, - nil, nil, nil, nil, nil, 64, 64, nil, nil, nil, - nil, nil, 64, nil, nil, nil, nil, nil, nil, nil, - nil, 108, nil, nil, nil, nil, 40, nil, nil, nil, - nil, 113, nil, nil, nil, nil, nil, nil, nil, 113, - nil, nil, nil, nil, nil, nil, nil, nil, 113, 113, - nil, nil, nil, nil, nil, 73, 64, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 73, nil, - nil, nil, nil, nil, nil, 64, nil, nil, nil, nil, - nil, nil, nil, 73, 73, nil, nil, nil, 64, nil, - 73, nil, nil, 40, nil, nil, nil, nil, nil, nil, - nil, 108, nil, nil, nil, nil, nil, nil, nil, 108, - nil, nil, nil, 108, 113, nil, 113, nil, nil, 113, - 113, nil, nil, nil, nil, nil, 113, nil, 40, nil, - nil, nil, 113, 113, nil, nil, nil, nil, nil, 113, - 113, nil, nil, nil, nil, 108, nil, nil, nil, nil, - 73, nil, nil, 73, nil, 40, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 113, nil, nil, 40, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 40, nil, - 40, 40, 40, nil, 64, 64, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 64, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 40, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 40, - nil, 40, nil, 40, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 113, nil, nil, nil, 40, - nil, nil, nil, 113, nil, nil, nil, 113, nil, 40, - nil, nil, 40, nil, 40, nil, nil, nil, nil, nil, - 40, nil, nil, 40, nil, 73, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 40, 40, nil, 113, - nil, nil, nil, nil, nil, nil, nil, 40, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 40, - nil, 40, 40, nil, nil, nil, 40, nil, nil, 40, - 40, 40, 40, nil, nil, nil, 40, nil, 40, nil, - nil, nil, nil, nil, nil, nil, nil, 40, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 40, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 40, 40, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 40, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 40, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 40, nil, nil, - nil, nil, nil, nil, nil, 40, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 40, - 40, 40, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 40, - 40, 40, 40, nil, nil, nil, nil, nil, 40, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 40, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 40, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 40, 40, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 40 ] - -racc_goto_pointer = [ - nil, 189, 137, 193, nil, 98, 164, 75, 185, 83, - -202, 172, -444, -655, -656, nil, -379, 43, 204, -62, - -119, 144, 1, 40, -160, 7, -44, 95, -93, 77, - 797, -217, -338, 5, 1163, 136, -353, 1296, 1546, -17, - 3355, 1224, -198, -467, -590, -733, -22, -393, -14, nil, - 6, nil, 208, 68, -320, nil, nil, -128, 80, -233, - -425, 2218, -325, -126, 2662, 133, 66, 99, 1170, nil, - 4, 84, -248, 2740, -2, -370, 126, -4, nil, 46, - -192, -147, 46, nil, -235, -446, 5, 191, 1087, 1745, - 178, 91, -230, 74, -29, -292, -313, -259, -441, nil, - -391, 373, 1435, 1686, 1854, 1930, 2123, 2176, 2607, 221, - 185, -55, nil, 2751, -365, -717, -343, -618, 178, nil, - -150, 21, nil, 87, 195, -110, -377, -542, -135, -730, - -235, -369, -711, -596, 43, -622, nil, -457, -616, nil, - nil, -431, 108, 73, -733, -603, 310, -754, -618, -576, - nil, -677, -743, -883, -879, -101, -494, 238, -319, -113, - -26, -596, -596, -376, 38, nil, 34, 44, nil, nil, - -392, -680, -753, -882, -856, 157, -800, -752, -729, -878, - nil, -696, nil, -696, -608, -606, nil, nil, -817, -607, - -590, nil, -585, -877, -876, nil, -687, -682, nil, -86, - nil, -104, -109, -813, nil, nil, -587, -299, -457, nil, - nil, 325, 324, 324, -453, 324, -197, -134, 326, 333, - 337, -216, -494, -207, nil, nil, -194, -124, -105, nil, - nil, -235, -258, -194, -656, 254, -249, -639, -595, -951, - nil, nil, -430 ] - -racc_goto_default = [ - nil, nil, nil, nil, 5, nil, 6, 392, 336, nil, - nil, 474, nil, 914, nil, 333, 334, nil, nil, nil, - 13, 14, 22, 248, nil, nil, 16, nil, 442, 249, - 365, nil, nil, 641, 252, nil, nil, 253, 247, 27, - 25, 520, nil, nil, nil, nil, nil, nil, nil, 387, - 144, 26, nil, nil, nil, 28, 29, 778, nil, nil, - nil, 353, nil, 30, 350, 456, 37, nil, nil, 39, - 42, 41, nil, 244, 245, 404, nil, 465, 143, 87, - nil, 447, 103, 51, nil, 700, 54, 284, 858, 324, - nil, 457, nil, 458, 470, 483, 690, 573, 322, 308, - 325, 55, 56, 57, 58, 59, 60, 61, 62, 63, - nil, 309, 69, 70, nil, nil, nil, nil, nil, 77, - nil, 623, 78, 231, nil, nil, nil, nil, nil, 721, - 495, nil, 722, 723, 481, 476, 477, nil, 1169, 717, - 1018, nil, 482, nil, nil, nil, 484, nil, 486, nil, - 902, nil, nil, nil, 493, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 469, nil, nil, 757, 749, - nil, nil, nil, nil, nil, 1151, nil, 971, 1076, 973, - 974, 978, 975, 976, nil, nil, 977, 979, nil, nil, - nil, 1075, 1077, 983, nil, 985, 986, 987, 988, nil, - 992, 478, 504, 994, 995, 996, 113, nil, nil, 86, - 88, 89, nil, nil, nil, nil, nil, 651, nil, nil, - nil, nil, nil, nil, 99, 100, nil, 232, 868, 235, - 480, nil, 485, 876, 498, 500, 501, 1029, 505, 1030, - 508, 511, 328 ] - -racc_reduce_table = [ - 0, 0, :racc_error, - 0, 150, :_reduce_1, - 2, 148, :_reduce_2, - 2, 149, :_reduce_3, - 0, 151, :_reduce_4, - 1, 151, :_reduce_5, - 3, 151, :_reduce_6, - 2, 151, :_reduce_7, - 1, 153, :_reduce_none, - 2, 153, :_reduce_9, - 3, 156, :_reduce_10, - 4, 157, :_reduce_11, - 2, 158, :_reduce_12, - 0, 162, :_reduce_13, - 1, 162, :_reduce_14, - 3, 162, :_reduce_15, - 2, 162, :_reduce_16, - 1, 163, :_reduce_none, - 2, 163, :_reduce_18, - 0, 174, :_reduce_19, - 4, 155, :_reduce_20, - 3, 155, :_reduce_21, - 3, 155, :_reduce_22, - 3, 155, :_reduce_23, - 2, 155, :_reduce_24, - 3, 155, :_reduce_25, - 3, 155, :_reduce_26, - 3, 155, :_reduce_27, - 3, 155, :_reduce_28, - 3, 155, :_reduce_29, - 4, 155, :_reduce_30, - 1, 155, :_reduce_none, - 3, 155, :_reduce_32, - 3, 155, :_reduce_33, - 5, 155, :_reduce_34, - 3, 155, :_reduce_35, - 1, 155, :_reduce_none, - 3, 167, :_reduce_37, - 3, 167, :_reduce_38, - 6, 167, :_reduce_39, - 5, 167, :_reduce_40, - 5, 167, :_reduce_41, - 5, 167, :_reduce_42, - 5, 167, :_reduce_43, - 4, 167, :_reduce_44, - 4, 167, :_reduce_45, - 3, 167, :_reduce_46, - 1, 183, :_reduce_none, - 3, 183, :_reduce_48, - 3, 183, :_reduce_49, - 1, 175, :_reduce_none, - 3, 175, :_reduce_51, - 1, 175, :_reduce_none, - 1, 173, :_reduce_none, - 3, 173, :_reduce_54, - 3, 173, :_reduce_55, - 3, 173, :_reduce_56, - 2, 173, :_reduce_57, - 6, 173, :_reduce_58, - 6, 173, :_reduce_59, - 1, 173, :_reduce_none, - 1, 166, :_reduce_none, - 0, 196, :_reduce_62, - 3, 193, :_reduce_63, - 1, 195, :_reduce_64, - 2, 181, :_reduce_65, - 0, 201, :_reduce_66, - 5, 184, :_reduce_67, - 1, 169, :_reduce_none, - 1, 169, :_reduce_none, - 1, 202, :_reduce_none, - 4, 202, :_reduce_71, - 0, 209, :_reduce_72, - 4, 206, :_reduce_73, - 1, 208, :_reduce_none, - 2, 186, :_reduce_75, - 3, 186, :_reduce_76, - 4, 186, :_reduce_77, - 5, 186, :_reduce_78, - 4, 186, :_reduce_79, - 5, 186, :_reduce_80, - 6, 186, :_reduce_81, - 2, 186, :_reduce_82, - 2, 186, :_reduce_83, - 2, 186, :_reduce_84, - 2, 186, :_reduce_85, - 2, 186, :_reduce_86, - 1, 168, :_reduce_87, - 3, 168, :_reduce_88, - 1, 214, :_reduce_89, - 3, 214, :_reduce_90, - 1, 213, :_reduce_none, - 2, 213, :_reduce_92, - 3, 213, :_reduce_93, - 5, 213, :_reduce_94, - 2, 213, :_reduce_95, - 4, 213, :_reduce_96, - 2, 213, :_reduce_97, - 4, 213, :_reduce_98, - 1, 213, :_reduce_99, - 3, 213, :_reduce_100, - 1, 217, :_reduce_none, - 3, 217, :_reduce_102, - 2, 216, :_reduce_103, - 3, 216, :_reduce_104, - 1, 219, :_reduce_105, - 3, 219, :_reduce_106, - 1, 218, :_reduce_107, - 1, 218, :_reduce_108, - 4, 218, :_reduce_109, - 3, 218, :_reduce_110, - 3, 218, :_reduce_111, - 3, 218, :_reduce_112, - 3, 218, :_reduce_113, - 2, 218, :_reduce_114, - 1, 218, :_reduce_115, - 1, 170, :_reduce_116, - 1, 170, :_reduce_117, - 4, 170, :_reduce_118, - 3, 170, :_reduce_119, - 3, 170, :_reduce_120, - 3, 170, :_reduce_121, - 3, 170, :_reduce_122, - 2, 170, :_reduce_123, - 1, 170, :_reduce_124, - 1, 222, :_reduce_125, - 1, 222, :_reduce_none, - 2, 223, :_reduce_127, - 1, 223, :_reduce_128, - 3, 223, :_reduce_129, - 1, 197, :_reduce_none, - 1, 197, :_reduce_none, - 1, 197, :_reduce_none, - 1, 197, :_reduce_none, - 1, 197, :_reduce_none, - 1, 164, :_reduce_135, - 1, 164, :_reduce_none, - 1, 165, :_reduce_137, - 0, 227, :_reduce_138, - 4, 165, :_reduce_139, - 1, 224, :_reduce_none, - 1, 224, :_reduce_none, - 1, 224, :_reduce_none, - 1, 224, :_reduce_none, - 1, 224, :_reduce_none, - 1, 224, :_reduce_none, - 1, 224, :_reduce_none, - 1, 224, :_reduce_none, - 1, 224, :_reduce_none, - 1, 224, :_reduce_none, - 1, 224, :_reduce_none, - 1, 224, :_reduce_none, - 1, 224, :_reduce_none, - 1, 224, :_reduce_none, - 1, 224, :_reduce_none, - 1, 224, :_reduce_none, - 1, 224, :_reduce_none, - 1, 224, :_reduce_none, - 1, 224, :_reduce_none, - 1, 224, :_reduce_none, - 1, 224, :_reduce_none, - 1, 224, :_reduce_none, - 1, 224, :_reduce_none, - 1, 224, :_reduce_none, - 1, 224, :_reduce_none, - 1, 224, :_reduce_none, - 1, 224, :_reduce_none, - 1, 224, :_reduce_none, - 1, 224, :_reduce_none, - 1, 224, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 3, 187, :_reduce_211, - 3, 187, :_reduce_212, - 6, 187, :_reduce_213, - 5, 187, :_reduce_214, - 5, 187, :_reduce_215, - 5, 187, :_reduce_216, - 5, 187, :_reduce_217, - 4, 187, :_reduce_218, - 3, 187, :_reduce_219, - 3, 187, :_reduce_220, - 3, 187, :_reduce_221, - 2, 187, :_reduce_222, - 2, 187, :_reduce_223, - 2, 187, :_reduce_224, - 2, 187, :_reduce_225, - 3, 187, :_reduce_226, - 3, 187, :_reduce_227, - 3, 187, :_reduce_228, - 3, 187, :_reduce_229, - 3, 187, :_reduce_230, - 3, 187, :_reduce_231, - 4, 187, :_reduce_232, - 2, 187, :_reduce_233, - 2, 187, :_reduce_234, - 3, 187, :_reduce_235, - 3, 187, :_reduce_236, - 3, 187, :_reduce_237, - 3, 187, :_reduce_238, - 1, 187, :_reduce_none, - 3, 187, :_reduce_240, - 3, 187, :_reduce_241, - 3, 187, :_reduce_242, - 3, 187, :_reduce_243, - 3, 187, :_reduce_244, - 2, 187, :_reduce_245, - 2, 187, :_reduce_246, - 3, 187, :_reduce_247, - 3, 187, :_reduce_248, - 3, 187, :_reduce_249, - 3, 187, :_reduce_250, - 4, 187, :_reduce_251, - 6, 187, :_reduce_252, - 4, 187, :_reduce_253, - 4, 187, :_reduce_254, - 1, 187, :_reduce_none, - 1, 232, :_reduce_none, - 3, 232, :_reduce_257, - 3, 232, :_reduce_258, - 1, 234, :_reduce_none, - 1, 234, :_reduce_none, - 1, 234, :_reduce_none, - 1, 234, :_reduce_none, - 3, 230, :_reduce_263, - 3, 230, :_reduce_264, - 1, 231, :_reduce_265, - 1, 236, :_reduce_none, - 1, 237, :_reduce_none, - 2, 237, :_reduce_none, - 4, 237, :_reduce_269, - 2, 237, :_reduce_270, - 1, 228, :_reduce_none, - 3, 228, :_reduce_272, - 3, 241, :_reduce_273, - 5, 241, :_reduce_274, - 3, 241, :_reduce_275, - 0, 243, :_reduce_276, - 1, 243, :_reduce_none, - 0, 178, :_reduce_278, - 1, 178, :_reduce_none, - 2, 178, :_reduce_none, - 4, 178, :_reduce_281, - 2, 178, :_reduce_282, - 1, 212, :_reduce_283, - 2, 212, :_reduce_284, - 2, 212, :_reduce_285, - 4, 212, :_reduce_286, - 1, 212, :_reduce_287, - 0, 246, :_reduce_288, - 2, 205, :_reduce_289, - 2, 245, :_reduce_290, - 1, 245, :_reduce_291, - 2, 244, :_reduce_292, - 0, 244, :_reduce_293, - 1, 238, :_reduce_294, - 1, 238, :_reduce_none, - 3, 238, :_reduce_296, - 3, 238, :_reduce_297, - 2, 247, :_reduce_298, - 1, 247, :_reduce_299, - 1, 172, :_reduce_300, - 1, 172, :_reduce_none, - 3, 171, :_reduce_302, - 4, 171, :_reduce_303, - 2, 171, :_reduce_304, - 1, 233, :_reduce_none, - 1, 233, :_reduce_none, - 1, 233, :_reduce_none, - 1, 233, :_reduce_none, - 1, 233, :_reduce_none, - 1, 233, :_reduce_none, - 1, 233, :_reduce_none, - 1, 233, :_reduce_none, - 1, 233, :_reduce_none, - 1, 233, :_reduce_none, - 1, 233, :_reduce_315, - 0, 271, :_reduce_316, - 4, 233, :_reduce_317, - 0, 272, :_reduce_318, - 4, 233, :_reduce_319, - 3, 233, :_reduce_320, - 3, 233, :_reduce_321, - 2, 233, :_reduce_322, - 3, 233, :_reduce_323, - 3, 233, :_reduce_324, - 1, 233, :_reduce_325, - 4, 233, :_reduce_326, - 3, 233, :_reduce_327, - 1, 233, :_reduce_328, - 6, 233, :_reduce_329, - 4, 233, :_reduce_330, - 3, 233, :_reduce_331, - 2, 233, :_reduce_332, - 1, 233, :_reduce_none, - 2, 233, :_reduce_334, - 1, 233, :_reduce_none, - 6, 233, :_reduce_336, - 6, 233, :_reduce_337, - 4, 233, :_reduce_338, - 4, 233, :_reduce_339, - 5, 233, :_reduce_340, - 4, 233, :_reduce_341, - 5, 233, :_reduce_342, - 6, 233, :_reduce_343, - 0, 273, :_reduce_344, - 6, 233, :_reduce_345, - 0, 274, :_reduce_346, - 7, 233, :_reduce_347, - 0, 275, :_reduce_348, - 5, 233, :_reduce_349, - 4, 233, :_reduce_350, - 4, 233, :_reduce_351, - 1, 233, :_reduce_352, - 1, 233, :_reduce_353, - 1, 233, :_reduce_354, - 1, 233, :_reduce_355, - 1, 177, :_reduce_none, - 1, 266, :_reduce_357, - 1, 269, :_reduce_358, - 1, 198, :_reduce_359, - 1, 211, :_reduce_360, - 1, 261, :_reduce_none, - 1, 261, :_reduce_none, - 2, 261, :_reduce_363, - 1, 194, :_reduce_none, - 1, 194, :_reduce_none, - 1, 262, :_reduce_none, - 5, 262, :_reduce_367, - 1, 160, :_reduce_none, - 2, 160, :_reduce_369, - 1, 265, :_reduce_none, - 1, 265, :_reduce_none, - 1, 276, :_reduce_372, - 3, 276, :_reduce_373, - 1, 279, :_reduce_374, - 3, 279, :_reduce_375, - 1, 278, :_reduce_none, - 3, 278, :_reduce_377, - 5, 278, :_reduce_378, - 1, 278, :_reduce_379, - 3, 278, :_reduce_380, - 2, 280, :_reduce_381, - 1, 280, :_reduce_382, - 1, 281, :_reduce_none, - 1, 281, :_reduce_none, - 0, 286, :_reduce_385, - 2, 284, :_reduce_386, - 4, 285, :_reduce_387, - 2, 285, :_reduce_388, - 2, 285, :_reduce_389, - 1, 285, :_reduce_390, - 2, 290, :_reduce_391, - 0, 290, :_reduce_392, - 1, 291, :_reduce_none, - 6, 292, :_reduce_394, - 8, 292, :_reduce_395, - 4, 292, :_reduce_396, - 6, 292, :_reduce_397, - 4, 292, :_reduce_398, - 2, 292, :_reduce_none, - 6, 292, :_reduce_400, - 2, 292, :_reduce_401, - 4, 292, :_reduce_402, - 6, 292, :_reduce_403, - 2, 292, :_reduce_404, - 4, 292, :_reduce_405, - 2, 292, :_reduce_406, - 4, 292, :_reduce_407, - 1, 292, :_reduce_none, - 0, 296, :_reduce_409, - 1, 296, :_reduce_410, - 3, 297, :_reduce_411, - 4, 297, :_reduce_412, - 1, 298, :_reduce_413, - 4, 298, :_reduce_414, - 1, 299, :_reduce_415, - 3, 299, :_reduce_416, - 1, 300, :_reduce_417, - 1, 300, :_reduce_none, - 0, 304, :_reduce_419, - 0, 305, :_reduce_420, - 5, 260, :_reduce_421, - 4, 302, :_reduce_422, - 1, 302, :_reduce_423, - 0, 308, :_reduce_424, - 4, 303, :_reduce_425, - 0, 309, :_reduce_426, - 4, 303, :_reduce_427, - 0, 311, :_reduce_428, - 4, 307, :_reduce_429, - 2, 203, :_reduce_430, - 4, 203, :_reduce_431, - 5, 203, :_reduce_432, - 5, 203, :_reduce_433, - 2, 259, :_reduce_434, - 4, 259, :_reduce_435, - 4, 259, :_reduce_436, - 3, 259, :_reduce_437, - 3, 259, :_reduce_438, - 3, 259, :_reduce_439, - 2, 259, :_reduce_440, - 1, 259, :_reduce_441, - 4, 259, :_reduce_442, - 0, 313, :_reduce_443, - 4, 258, :_reduce_444, - 0, 314, :_reduce_445, - 4, 258, :_reduce_446, - 0, 315, :_reduce_447, - 3, 207, :_reduce_448, - 0, 316, :_reduce_449, - 0, 317, :_reduce_450, - 4, 310, :_reduce_451, - 5, 263, :_reduce_452, - 1, 318, :_reduce_453, - 1, 318, :_reduce_none, - 1, 190, :_reduce_455, - 1, 191, :_reduce_456, - 1, 189, :_reduce_457, - 0, 321, :_reduce_458, - 9, 264, :_reduce_459, - 1, 320, :_reduce_460, - 1, 320, :_reduce_none, - 1, 319, :_reduce_462, - 3, 319, :_reduce_463, - 3, 319, :_reduce_464, - 1, 192, :_reduce_none, - 2, 192, :_reduce_466, - 3, 192, :_reduce_467, - 1, 192, :_reduce_468, - 1, 192, :_reduce_469, - 1, 192, :_reduce_470, - 1, 322, :_reduce_none, - 3, 327, :_reduce_472, - 1, 327, :_reduce_none, - 3, 329, :_reduce_474, - 1, 329, :_reduce_none, - 1, 331, :_reduce_476, - 1, 332, :_reduce_477, - 1, 330, :_reduce_none, - 1, 330, :_reduce_none, - 4, 330, :_reduce_480, - 4, 330, :_reduce_481, - 4, 330, :_reduce_482, - 3, 330, :_reduce_483, - 4, 330, :_reduce_484, - 4, 330, :_reduce_485, - 4, 330, :_reduce_486, - 3, 330, :_reduce_487, - 3, 330, :_reduce_488, - 3, 330, :_reduce_489, - 2, 330, :_reduce_490, - 0, 336, :_reduce_491, - 4, 330, :_reduce_492, - 2, 330, :_reduce_493, - 0, 337, :_reduce_494, - 4, 330, :_reduce_495, - 1, 323, :_reduce_496, - 1, 323, :_reduce_497, - 2, 323, :_reduce_498, - 2, 323, :_reduce_499, - 4, 323, :_reduce_500, - 1, 323, :_reduce_none, - 2, 338, :_reduce_502, - 3, 338, :_reduce_503, - 1, 325, :_reduce_504, - 3, 325, :_reduce_505, - 5, 324, :_reduce_506, - 2, 340, :_reduce_507, - 1, 340, :_reduce_508, - 1, 341, :_reduce_509, - 3, 341, :_reduce_510, - 1, 339, :_reduce_none, - 3, 326, :_reduce_512, - 1, 326, :_reduce_513, - 2, 326, :_reduce_514, - 1, 326, :_reduce_515, - 1, 342, :_reduce_516, - 3, 342, :_reduce_517, - 2, 344, :_reduce_518, - 1, 344, :_reduce_519, - 1, 345, :_reduce_520, - 3, 345, :_reduce_521, - 2, 347, :_reduce_522, - 1, 347, :_reduce_523, - 2, 349, :_reduce_524, - 1, 343, :_reduce_none, - 1, 343, :_reduce_526, - 1, 333, :_reduce_none, - 3, 333, :_reduce_528, - 3, 333, :_reduce_529, - 2, 333, :_reduce_530, - 2, 333, :_reduce_531, - 1, 333, :_reduce_none, - 1, 333, :_reduce_none, - 1, 333, :_reduce_none, - 2, 333, :_reduce_535, - 2, 333, :_reduce_536, - 1, 350, :_reduce_none, - 1, 350, :_reduce_none, - 1, 350, :_reduce_none, - 1, 350, :_reduce_none, - 1, 350, :_reduce_none, - 1, 350, :_reduce_none, - 1, 350, :_reduce_none, - 1, 350, :_reduce_none, - 1, 350, :_reduce_545, - 1, 350, :_reduce_none, - 1, 328, :_reduce_547, - 2, 351, :_reduce_548, - 2, 351, :_reduce_549, - 4, 352, :_reduce_550, - 2, 334, :_reduce_551, - 3, 334, :_reduce_552, - 1, 334, :_reduce_553, - 6, 159, :_reduce_554, - 0, 159, :_reduce_555, - 1, 354, :_reduce_556, - 1, 354, :_reduce_none, - 1, 354, :_reduce_none, - 2, 355, :_reduce_559, - 1, 355, :_reduce_none, - 2, 161, :_reduce_561, - 1, 161, :_reduce_none, - 1, 248, :_reduce_none, - 1, 248, :_reduce_none, - 1, 249, :_reduce_565, - 1, 357, :_reduce_566, - 2, 357, :_reduce_567, - 3, 358, :_reduce_568, - 1, 358, :_reduce_569, - 1, 358, :_reduce_570, - 3, 250, :_reduce_571, - 4, 251, :_reduce_572, - 1, 361, :_reduce_none, - 2, 361, :_reduce_none, - 3, 252, :_reduce_575, - 0, 362, :_reduce_576, - 3, 362, :_reduce_577, - 1, 363, :_reduce_578, - 2, 363, :_reduce_579, - 3, 254, :_reduce_580, - 0, 365, :_reduce_581, - 3, 365, :_reduce_582, - 3, 253, :_reduce_583, - 3, 255, :_reduce_584, - 0, 366, :_reduce_585, - 3, 366, :_reduce_586, - 0, 367, :_reduce_587, - 3, 367, :_reduce_588, - 0, 346, :_reduce_589, - 2, 346, :_reduce_590, - 0, 359, :_reduce_591, - 2, 359, :_reduce_592, - 0, 360, :_reduce_593, - 2, 360, :_reduce_594, - 1, 364, :_reduce_595, - 2, 364, :_reduce_596, - 0, 370, :_reduce_597, - 4, 364, :_reduce_598, - 1, 369, :_reduce_none, - 1, 368, :_reduce_600, - 1, 368, :_reduce_none, - 1, 226, :_reduce_none, - 1, 226, :_reduce_none, - 1, 371, :_reduce_604, - 3, 372, :_reduce_605, - 1, 356, :_reduce_606, - 2, 356, :_reduce_607, - 1, 229, :_reduce_608, - 1, 229, :_reduce_609, - 1, 229, :_reduce_610, - 1, 229, :_reduce_611, - 1, 353, :_reduce_612, - 1, 353, :_reduce_613, - 1, 353, :_reduce_614, - 1, 220, :_reduce_615, - 1, 220, :_reduce_616, - 1, 220, :_reduce_none, - 1, 221, :_reduce_618, - 1, 221, :_reduce_619, - 1, 221, :_reduce_620, - 1, 221, :_reduce_621, - 1, 221, :_reduce_622, - 1, 221, :_reduce_623, - 1, 221, :_reduce_624, - 1, 256, :_reduce_625, - 1, 256, :_reduce_626, - 1, 176, :_reduce_627, - 1, 176, :_reduce_628, - 1, 185, :_reduce_629, - 1, 185, :_reduce_630, - 0, 373, :_reduce_631, - 4, 267, :_reduce_632, - 0, 267, :_reduce_633, - 1, 182, :_reduce_none, - 1, 182, :_reduce_635, - 3, 374, :_reduce_636, - 1, 270, :_reduce_none, - 0, 376, :_reduce_638, - 3, 270, :_reduce_639, - 4, 375, :_reduce_640, - 2, 375, :_reduce_641, - 2, 375, :_reduce_642, - 1, 375, :_reduce_643, - 1, 375, :_reduce_644, - 2, 378, :_reduce_645, - 0, 378, :_reduce_646, - 6, 306, :_reduce_647, - 8, 306, :_reduce_648, - 4, 306, :_reduce_649, - 6, 306, :_reduce_650, - 4, 306, :_reduce_651, - 6, 306, :_reduce_652, - 2, 306, :_reduce_653, - 4, 306, :_reduce_654, - 6, 306, :_reduce_655, - 2, 306, :_reduce_656, - 4, 306, :_reduce_657, - 2, 306, :_reduce_658, - 4, 306, :_reduce_659, - 1, 306, :_reduce_660, - 0, 306, :_reduce_661, - 1, 242, :_reduce_662, - 1, 301, :_reduce_663, - 1, 301, :_reduce_664, - 1, 301, :_reduce_665, - 1, 301, :_reduce_666, - 1, 277, :_reduce_none, - 1, 277, :_reduce_668, - 1, 380, :_reduce_669, - 1, 381, :_reduce_670, - 3, 381, :_reduce_671, - 1, 293, :_reduce_672, - 3, 293, :_reduce_673, - 1, 382, :_reduce_674, - 2, 383, :_reduce_675, - 1, 383, :_reduce_676, - 2, 384, :_reduce_677, - 1, 384, :_reduce_678, - 1, 287, :_reduce_679, - 3, 287, :_reduce_680, - 1, 377, :_reduce_681, - 3, 377, :_reduce_682, - 1, 348, :_reduce_none, - 1, 348, :_reduce_none, - 1, 283, :_reduce_685, - 2, 282, :_reduce_686, - 1, 282, :_reduce_687, - 3, 385, :_reduce_688, - 3, 386, :_reduce_689, - 1, 294, :_reduce_690, - 3, 294, :_reduce_691, - 1, 379, :_reduce_692, - 3, 379, :_reduce_693, - 1, 387, :_reduce_none, - 1, 387, :_reduce_none, - 2, 295, :_reduce_696, - 1, 295, :_reduce_697, - 1, 388, :_reduce_none, - 1, 388, :_reduce_none, - 2, 289, :_reduce_700, - 1, 289, :_reduce_701, - 2, 288, :_reduce_702, - 0, 288, :_reduce_703, - 1, 199, :_reduce_none, - 3, 199, :_reduce_705, - 0, 257, :_reduce_706, - 2, 257, :_reduce_none, - 1, 240, :_reduce_708, - 3, 240, :_reduce_709, - 3, 389, :_reduce_710, - 2, 389, :_reduce_711, - 1, 389, :_reduce_712, - 4, 389, :_reduce_713, - 2, 389, :_reduce_714, - 1, 389, :_reduce_715, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 312, :_reduce_none, - 1, 312, :_reduce_none, - 1, 312, :_reduce_none, - 1, 200, :_reduce_none, - 1, 200, :_reduce_none, - 1, 180, :_reduce_726, - 1, 180, :_reduce_727, - 0, 152, :_reduce_none, - 1, 152, :_reduce_none, - 0, 188, :_reduce_none, - 1, 188, :_reduce_none, - 2, 215, :_reduce_732, - 2, 179, :_reduce_733, - 2, 335, :_reduce_734, - 1, 239, :_reduce_none, - 1, 239, :_reduce_none, - 1, 268, :_reduce_737, - 1, 268, :_reduce_none, - 1, 154, :_reduce_none, - 2, 154, :_reduce_none, - 0, 235, :_reduce_741 ] - -racc_reduce_n = 742 - -racc_shift_n = 1250 - -racc_token_table = { - false => 0, - :error => 1, - :kCLASS => 2, - :kMODULE => 3, - :kDEF => 4, - :kUNDEF => 5, - :kBEGIN => 6, - :kRESCUE => 7, - :kENSURE => 8, - :kEND => 9, - :kIF => 10, - :kUNLESS => 11, - :kTHEN => 12, - :kELSIF => 13, - :kELSE => 14, - :kCASE => 15, - :kWHEN => 16, - :kWHILE => 17, - :kUNTIL => 18, - :kFOR => 19, - :kBREAK => 20, - :kNEXT => 21, - :kREDO => 22, - :kRETRY => 23, - :kIN => 24, - :kDO => 25, - :kDO_COND => 26, - :kDO_BLOCK => 27, - :kDO_LAMBDA => 28, - :kRETURN => 29, - :kYIELD => 30, - :kSUPER => 31, - :kSELF => 32, - :kNIL => 33, - :kTRUE => 34, - :kFALSE => 35, - :kAND => 36, - :kOR => 37, - :kNOT => 38, - :kIF_MOD => 39, - :kUNLESS_MOD => 40, - :kWHILE_MOD => 41, - :kUNTIL_MOD => 42, - :kRESCUE_MOD => 43, - :kALIAS => 44, - :kDEFINED => 45, - :klBEGIN => 46, - :klEND => 47, - :k__LINE__ => 48, - :k__FILE__ => 49, - :k__ENCODING__ => 50, - :tIDENTIFIER => 51, - :tFID => 52, - :tGVAR => 53, - :tIVAR => 54, - :tCONSTANT => 55, - :tLABEL => 56, - :tCVAR => 57, - :tNTH_REF => 58, - :tBACK_REF => 59, - :tSTRING_CONTENT => 60, - :tINTEGER => 61, - :tFLOAT => 62, - :tUPLUS => 63, - :tUMINUS => 64, - :tUNARY_NUM => 65, - :tPOW => 66, - :tCMP => 67, - :tEQ => 68, - :tEQQ => 69, - :tNEQ => 70, - :tGEQ => 71, - :tLEQ => 72, - :tANDOP => 73, - :tOROP => 74, - :tMATCH => 75, - :tNMATCH => 76, - :tDOT => 77, - :tDOT2 => 78, - :tDOT3 => 79, - :tAREF => 80, - :tASET => 81, - :tLSHFT => 82, - :tRSHFT => 83, - :tCOLON2 => 84, - :tCOLON3 => 85, - :tOP_ASGN => 86, - :tASSOC => 87, - :tLPAREN => 88, - :tLPAREN2 => 89, - :tRPAREN => 90, - :tLPAREN_ARG => 91, - :tLBRACK => 92, - :tLBRACK2 => 93, - :tRBRACK => 94, - :tLBRACE => 95, - :tLBRACE_ARG => 96, - :tSTAR => 97, - :tSTAR2 => 98, - :tAMPER => 99, - :tAMPER2 => 100, - :tTILDE => 101, - :tPERCENT => 102, - :tDIVIDE => 103, - :tDSTAR => 104, - :tPLUS => 105, - :tMINUS => 106, - :tLT => 107, - :tGT => 108, - :tPIPE => 109, - :tBANG => 110, - :tCARET => 111, - :tLCURLY => 112, - :tRCURLY => 113, - :tBACK_REF2 => 114, - :tSYMBEG => 115, - :tSTRING_BEG => 116, - :tXSTRING_BEG => 117, - :tREGEXP_BEG => 118, - :tREGEXP_OPT => 119, - :tWORDS_BEG => 120, - :tQWORDS_BEG => 121, - :tSYMBOLS_BEG => 122, - :tQSYMBOLS_BEG => 123, - :tSTRING_DBEG => 124, - :tSTRING_DVAR => 125, - :tSTRING_END => 126, - :tSTRING_DEND => 127, - :tSTRING => 128, - :tSYMBOL => 129, - :tNL => 130, - :tEH => 131, - :tCOLON => 132, - :tCOMMA => 133, - :tSPACE => 134, - :tSEMI => 135, - :tLAMBDA => 136, - :tLAMBEG => 137, - :tCHARACTER => 138, - :tRATIONAL => 139, - :tIMAGINARY => 140, - :tLABEL_END => 141, - :tANDDOT => 142, - :tBDOT2 => 143, - :tBDOT3 => 144, - :tEQL => 145, - :tLOWEST => 146 } - -racc_nt_base = 147 - -racc_use_result_var = true - -Racc_arg = [ - racc_action_table, - racc_action_check, - racc_action_default, - racc_action_pointer, - racc_goto_table, - racc_goto_check, - racc_goto_default, - racc_goto_pointer, - racc_nt_base, - racc_reduce_table, - racc_token_table, - racc_shift_n, - racc_reduce_n, - racc_use_result_var ] -Ractor.make_shareable(Racc_arg) if defined?(Ractor) - -Racc_token_to_s_table = [ - "$end", - "error", - "kCLASS", - "kMODULE", - "kDEF", - "kUNDEF", - "kBEGIN", - "kRESCUE", - "kENSURE", - "kEND", - "kIF", - "kUNLESS", - "kTHEN", - "kELSIF", - "kELSE", - "kCASE", - "kWHEN", - "kWHILE", - "kUNTIL", - "kFOR", - "kBREAK", - "kNEXT", - "kREDO", - "kRETRY", - "kIN", - "kDO", - "kDO_COND", - "kDO_BLOCK", - "kDO_LAMBDA", - "kRETURN", - "kYIELD", - "kSUPER", - "kSELF", - "kNIL", - "kTRUE", - "kFALSE", - "kAND", - "kOR", - "kNOT", - "kIF_MOD", - "kUNLESS_MOD", - "kWHILE_MOD", - "kUNTIL_MOD", - "kRESCUE_MOD", - "kALIAS", - "kDEFINED", - "klBEGIN", - "klEND", - "k__LINE__", - "k__FILE__", - "k__ENCODING__", - "tIDENTIFIER", - "tFID", - "tGVAR", - "tIVAR", - "tCONSTANT", - "tLABEL", - "tCVAR", - "tNTH_REF", - "tBACK_REF", - "tSTRING_CONTENT", - "tINTEGER", - "tFLOAT", - "tUPLUS", - "tUMINUS", - "tUNARY_NUM", - "tPOW", - "tCMP", - "tEQ", - "tEQQ", - "tNEQ", - "tGEQ", - "tLEQ", - "tANDOP", - "tOROP", - "tMATCH", - "tNMATCH", - "tDOT", - "tDOT2", - "tDOT3", - "tAREF", - "tASET", - "tLSHFT", - "tRSHFT", - "tCOLON2", - "tCOLON3", - "tOP_ASGN", - "tASSOC", - "tLPAREN", - "tLPAREN2", - "tRPAREN", - "tLPAREN_ARG", - "tLBRACK", - "tLBRACK2", - "tRBRACK", - "tLBRACE", - "tLBRACE_ARG", - "tSTAR", - "tSTAR2", - "tAMPER", - "tAMPER2", - "tTILDE", - "tPERCENT", - "tDIVIDE", - "tDSTAR", - "tPLUS", - "tMINUS", - "tLT", - "tGT", - "tPIPE", - "tBANG", - "tCARET", - "tLCURLY", - "tRCURLY", - "tBACK_REF2", - "tSYMBEG", - "tSTRING_BEG", - "tXSTRING_BEG", - "tREGEXP_BEG", - "tREGEXP_OPT", - "tWORDS_BEG", - "tQWORDS_BEG", - "tSYMBOLS_BEG", - "tQSYMBOLS_BEG", - "tSTRING_DBEG", - "tSTRING_DVAR", - "tSTRING_END", - "tSTRING_DEND", - "tSTRING", - "tSYMBOL", - "tNL", - "tEH", - "tCOLON", - "tCOMMA", - "tSPACE", - "tSEMI", - "tLAMBDA", - "tLAMBEG", - "tCHARACTER", - "tRATIONAL", - "tIMAGINARY", - "tLABEL_END", - "tANDDOT", - "tBDOT2", - "tBDOT3", - "tEQL", - "tLOWEST", - "$start", - "program", - "top_compstmt", - "@1", - "top_stmts", - "opt_terms", - "top_stmt", - "terms", - "stmt", - "begin_block", - "bodystmt", - "compstmt", - "opt_rescue", - "opt_else", - "opt_ensure", - "stmts", - "stmt_or_begin", - "fitem", - "undef_list", - "expr_value", - "command_asgn", - "mlhs", - "command_call", - "lhs", - "mrhs", - "mrhs_arg", - "expr", - "@2", - "command_rhs", - "var_lhs", - "primary_value", - "opt_call_args", - "rbracket", - "call_op", - "defn_head", - "f_opt_paren_args", - "endless_command", - "defs_head", - "backref", - "command", - "arg", - "opt_nl", - "p_in_kwarg", - "p_pvtbl", - "p_pktbl", - "p_top_expr_body", - "expr_value_do", - "do", - "def_name", - "@3", - "fname", - "k_def", - "singleton", - "dot_or_colon", - "@4", - "block_command", - "block_call", - "operation2", - "command_args", - "cmd_brace_block", - "brace_body", - "fcall", - "@5", - "operation", - "k_return", - "call_args", - "mlhs_basic", - "mlhs_inner", - "rparen", - "mlhs_head", - "mlhs_item", - "mlhs_node", - "mlhs_post", - "user_variable", - "keyword_variable", - "cname", - "cpath", - "op", - "reswords", - "symbol", - "@6", - "arg_rhs", - "simple_numeric", - "rel_expr", - "begin_defined", - "endless_arg", - "primary", - "relop", - "none", - "arg_value", - "aref_args", - "args", - "trailer", - "assocs", - "paren_args", - "args_forward", - "opt_paren_args", - "opt_block_arg", - "block_arg", - "@7", - "arg_splat", - "literal", - "strings", - "xstring", - "regexp", - "words", - "qwords", - "symbols", - "qsymbols", - "var_ref", - "assoc_list", - "brace_block", - "method_call", - "lambda", - "then", - "if_tail", - "case_body", - "p_case_body", - "for_var", - "k_class", - "superclass", - "term", - "k_module", - "f_arglist", - "@8", - "@9", - "@10", - "@11", - "@12", - "f_marg", - "f_norm_arg", - "f_margs", - "f_marg_list", - "f_rest_marg", - "f_any_kwrest", - "f_kwrest", - "f_no_kwarg", - "f_eq", - "block_args_tail", - "@13", - "f_block_kwarg", - "opt_f_block_arg", - "f_block_arg", - "opt_block_args_tail", - "excessed_comma", - "block_param", - "f_arg", - "f_block_optarg", - "f_rest_arg", - "opt_block_param", - "block_param_def", - "opt_bv_decl", - "bv_decls", - "bvar", - "f_bad_arg", - "f_larglist", - "lambda_body", - "@14", - "@15", - "f_args", - "do_block", - "@16", - "@17", - "do_body", - "@18", - "operation3", - "@19", - "@20", - "@21", - "@22", - "@23", - "cases", - "p_top_expr", - "p_cases", - "@24", - "p_expr", - "p_args", - "p_find", - "p_args_tail", - "p_kwargs", - "p_as", - "p_variable", - "p_alt", - "p_expr_basic", - "p_lparen", - "p_lbracket", - "p_value", - "p_const", - "rbrace", - "@25", - "@26", - "p_args_head", - "p_arg", - "p_rest", - "p_args_post", - "p_kwarg", - "p_any_kwrest", - "p_kw", - "p_kw_label", - "string_contents", - "p_kwrest", - "kwrest_mark", - "p_kwnorest", - "p_primitive", - "p_var_ref", - "p_expr_ref", - "nonlocal_var", - "exc_list", - "exc_var", - "numeric", - "string", - "string1", - "xstring_contents", - "regexp_contents", - "words_sep", - "word_list", - "word", - "string_content", - "symbol_list", - "qword_list", - "qsym_list", - "string_dvar", - "string_dend", - "@27", - "ssym", - "dsym", - "@28", - "f_paren_args", - "args_tail", - "@29", - "f_kwarg", - "opt_args_tail", - "f_optarg", - "f_arg_asgn", - "f_arg_item", - "f_label", - "f_kw", - "f_block_kw", - "f_opt", - "f_block_opt", - "restarg_mark", - "blkarg_mark", - "assoc" ] -Ractor.make_shareable(Racc_token_to_s_table) if defined?(Ractor) - -Racc_debug_parser = false - -##### State transition tables end ##### - -# reduce 0 omitted - -def _reduce_1(val, _values, result) - @current_arg_stack.push(nil) - @max_numparam_stack.push(static: true) - - result -end - -def _reduce_2(val, _values, result) - result = val[1] - - @current_arg_stack.pop - @max_numparam_stack.pop - - result -end - -def _reduce_3(val, _values, result) - result = @builder.compstmt(val[0]) - - result -end - -def _reduce_4(val, _values, result) - result = [] - - result -end - -def _reduce_5(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_6(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_7(val, _values, result) - result = [ val[1] ] - - result -end - -# reduce 8 omitted - -def _reduce_9(val, _values, result) - result = @builder.preexe(val[0], *val[1]) - - result -end - -def _reduce_10(val, _values, result) - result = val - - result -end - -def _reduce_11(val, _values, result) - rescue_bodies = val[1] - else_t, else_ = val[2] - ensure_t, ensure_ = val[3] - - if rescue_bodies.empty? && !else_t.nil? - diagnostic :error, :useless_else, nil, else_t - end - - result = @builder.begin_body(val[0], - rescue_bodies, - else_t, else_, - ensure_t, ensure_) - - result -end - -def _reduce_12(val, _values, result) - result = @builder.compstmt(val[0]) - - result -end - -def _reduce_13(val, _values, result) - result = [] - - result -end - -def _reduce_14(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_15(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_16(val, _values, result) - result = [ val[1] ] - - result -end - -# reduce 17 omitted - -def _reduce_18(val, _values, result) - diagnostic :error, :begin_in_method, nil, val[0] - - result -end - -def _reduce_19(val, _values, result) - @lexer.state = :expr_fname - - result -end - -def _reduce_20(val, _values, result) - result = @builder.alias(val[0], val[1], val[3]) - - result -end - -def _reduce_21(val, _values, result) - result = @builder.alias(val[0], - @builder.gvar(val[1]), - @builder.gvar(val[2])) - - result -end - -def _reduce_22(val, _values, result) - result = @builder.alias(val[0], - @builder.gvar(val[1]), - @builder.back_ref(val[2])) - - result -end - -def _reduce_23(val, _values, result) - diagnostic :error, :nth_ref_alias, nil, val[2] - - result -end - -def _reduce_24(val, _values, result) - result = @builder.undef_method(val[0], val[1]) - - result -end - -def _reduce_25(val, _values, result) - result = @builder.condition_mod(val[0], nil, - val[1], val[2]) - - result -end - -def _reduce_26(val, _values, result) - result = @builder.condition_mod(nil, val[0], - val[1], val[2]) - - result -end - -def _reduce_27(val, _values, result) - result = @builder.loop_mod(:while, val[0], val[1], val[2]) - - result -end - -def _reduce_28(val, _values, result) - result = @builder.loop_mod(:until, val[0], val[1], val[2]) - - result -end - -def _reduce_29(val, _values, result) - rescue_body = @builder.rescue_body(val[1], - nil, nil, nil, - nil, val[2]) - - result = @builder.begin_body(val[0], [ rescue_body ]) - - result -end - -def _reduce_30(val, _values, result) - result = @builder.postexe(val[0], val[1], val[2], val[3]) - - result -end - -# reduce 31 omitted - -def _reduce_32(val, _values, result) - result = @builder.multi_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_33(val, _values, result) - result = @builder.assign(val[0], val[1], - @builder.array(nil, val[2], nil)) - - result -end - -def _reduce_34(val, _values, result) - rescue_body = @builder.rescue_body(val[3], - nil, nil, nil, - nil, val[4]) - begin_body = @builder.begin_body(val[2], [ rescue_body ]) - - result = @builder.multi_assign(val[0], val[1], begin_body) - - result -end - -def _reduce_35(val, _values, result) - result = @builder.multi_assign(val[0], val[1], val[2]) - - result -end - -# reduce 36 omitted - -def _reduce_37(val, _values, result) - result = @builder.assign(val[0], val[1], val[2]) - - result -end - -def _reduce_38(val, _values, result) - result = @builder.op_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_39(val, _values, result) - result = @builder.op_assign( - @builder.index( - val[0], val[1], val[2], val[3]), - val[4], val[5]) - - result -end - -def _reduce_40(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_41(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_42(val, _values, result) - const = @builder.const_op_assignable( - @builder.const_fetch(val[0], val[1], val[2])) - result = @builder.op_assign(const, val[3], val[4]) - - result -end - -def _reduce_43(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_44(val, _values, result) - def_t, (name_t, ctx) = val[0] - endless_method_name(name_t) - - result = @builder.def_endless_method(def_t, name_t, - val[1], val[2], val[3]) - - local_pop - @current_arg_stack.pop - @context.in_def = ctx.in_def - - result -end - -def _reduce_45(val, _values, result) - def_t, recv, dot_t, (name_t, ctx) = val[0] - endless_method_name(name_t) - - result = @builder.def_endless_singleton(def_t, recv, dot_t, name_t, - val[1], val[2], val[3]) - - local_pop - @current_arg_stack.pop - @context.in_def = ctx.in_def - - result -end - -def _reduce_46(val, _values, result) - @builder.op_assign(val[0], val[1], val[2]) - - result -end - -# reduce 47 omitted - -def _reduce_48(val, _values, result) - rescue_body = @builder.rescue_body(val[1], - nil, nil, nil, - nil, val[2]) - - result = @builder.begin_body(val[0], [ rescue_body ]) - - result -end - -def _reduce_49(val, _values, result) - result = @builder.not_op(val[0], nil, val[2], nil) - - result -end - -# reduce 50 omitted - -def _reduce_51(val, _values, result) - rescue_body = @builder.rescue_body(val[1], - nil, nil, nil, - nil, val[2]) - - result = @builder.begin_body(val[0], [ rescue_body ]) - - result -end - -# reduce 52 omitted - -# reduce 53 omitted - -def _reduce_54(val, _values, result) - result = @builder.logical_op(:and, val[0], val[1], val[2]) - - result -end - -def _reduce_55(val, _values, result) - result = @builder.logical_op(:or, val[0], val[1], val[2]) - - result -end - -def _reduce_56(val, _values, result) - result = @builder.not_op(val[0], nil, val[2], nil) - - result -end - -def _reduce_57(val, _values, result) - result = @builder.not_op(val[0], nil, val[1], nil) - - result -end - -def _reduce_58(val, _values, result) - @pattern_variables.pop - @pattern_hash_keys.pop - @context.in_kwarg = val[2] - result = @builder.match_pattern(val[0], val[1], val[5]) - - result -end - -def _reduce_59(val, _values, result) - @pattern_variables.pop - @pattern_hash_keys.pop - @context.in_kwarg = val[2] - result = @builder.match_pattern_p(val[0], val[1], val[5]) - - result -end - -# reduce 60 omitted - -# reduce 61 omitted - -def _reduce_62(val, _values, result) - @lexer.cond.push(true) - - result -end - -def _reduce_63(val, _values, result) - @lexer.cond.pop - result = [ val[1], val[2] ] - - result -end - -def _reduce_64(val, _values, result) - local_push - @current_arg_stack.push(nil) - - result = [ val[0], @context.dup ] - @context.in_def = true - - result -end - -def _reduce_65(val, _values, result) - result = [ val[0], val[1] ] - - result -end - -def _reduce_66(val, _values, result) - @lexer.state = :expr_fname - @context.in_argdef = true - - result -end - -def _reduce_67(val, _values, result) - result = [ val[0], val[1], val[2], val[4] ] - - result -end - -# reduce 68 omitted - -# reduce 69 omitted - -# reduce 70 omitted - -def _reduce_71(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - result -end - -def _reduce_72(val, _values, result) - result = @context.dup - @context.in_block = true - - result -end - -def _reduce_73(val, _values, result) - @context.in_block = val[1].in_block - result = [ val[0], *val[2], val[3] ] - - result -end - -# reduce 74 omitted - -def _reduce_75(val, _values, result) - result = @builder.call_method(nil, nil, val[0], - nil, val[1], nil) - - result -end - -def _reduce_76(val, _values, result) - method_call = @builder.call_method(nil, nil, val[0], - nil, val[1], nil) - - begin_t, args, body, end_t = val[2] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_77(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - result -end - -def _reduce_78(val, _values, result) - method_call = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - begin_t, args, body, end_t = val[4] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_79(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - result -end - -def _reduce_80(val, _values, result) - method_call = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - begin_t, args, body, end_t = val[4] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_81(val, _values, result) - method_call = @builder.call_method(val[0], val[1], val[2], - nil, [], nil) - - args, body = val[4] - result = @builder.block(method_call, val[3], args, body, val[5]) - - result -end - -def _reduce_82(val, _values, result) - result = @builder.keyword_cmd(:super, val[0], - nil, val[1], nil) - - result -end - -def _reduce_83(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0], - nil, val[1], nil) - - result -end - -def _reduce_84(val, _values, result) - result = @builder.keyword_cmd(:return, val[0], - nil, val[1], nil) - - result -end - -def _reduce_85(val, _values, result) - result = @builder.keyword_cmd(:break, val[0], - nil, val[1], nil) - - result -end - -def _reduce_86(val, _values, result) - result = @builder.keyword_cmd(:next, val[0], - nil, val[1], nil) - - result -end - -def _reduce_87(val, _values, result) - result = @builder.multi_lhs(nil, val[0], nil) - - result -end - -def _reduce_88(val, _values, result) - result = @builder.begin(val[0], val[1], val[2]) - - result -end - -def _reduce_89(val, _values, result) - result = @builder.multi_lhs(nil, val[0], nil) - - result -end - -def _reduce_90(val, _values, result) - result = @builder.multi_lhs(val[0], val[1], val[2]) - - result -end - -# reduce 91 omitted - -def _reduce_92(val, _values, result) - result = val[0]. - push(val[1]) - - result -end - -def _reduce_93(val, _values, result) - result = val[0]. - push(@builder.splat(val[1], val[2])) - - result -end - -def _reduce_94(val, _values, result) - result = val[0]. - push(@builder.splat(val[1], val[2])). - concat(val[4]) - - result -end - -def _reduce_95(val, _values, result) - result = val[0]. - push(@builder.splat(val[1])) - - result -end - -def _reduce_96(val, _values, result) - result = val[0]. - push(@builder.splat(val[1])). - concat(val[3]) - - result -end - -def _reduce_97(val, _values, result) - result = [ @builder.splat(val[0], val[1]) ] - - result -end - -def _reduce_98(val, _values, result) - result = [ @builder.splat(val[0], val[1]), - *val[3] ] - - result -end - -def _reduce_99(val, _values, result) - result = [ @builder.splat(val[0]) ] - - result -end - -def _reduce_100(val, _values, result) - result = [ @builder.splat(val[0]), - *val[2] ] - - result -end - -# reduce 101 omitted - -def _reduce_102(val, _values, result) - result = @builder.begin(val[0], val[1], val[2]) - - result -end - -def _reduce_103(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_104(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_105(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_106(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_107(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_108(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_109(val, _values, result) - result = @builder.index_asgn(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_110(val, _values, result) - if (val[1][0] == :anddot) - diagnostic :error, :csend_in_lhs_of_masgn, nil, val[1] - end - - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_111(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_112(val, _values, result) - if (val[1][0] == :anddot) - diagnostic :error, :csend_in_lhs_of_masgn, nil, val[1] - end - - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_113(val, _values, result) - result = @builder.assignable( - @builder.const_fetch(val[0], val[1], val[2])) - - result -end - -def _reduce_114(val, _values, result) - result = @builder.assignable( - @builder.const_global(val[0], val[1])) - - result -end - -def _reduce_115(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_116(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_117(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_118(val, _values, result) - result = @builder.index_asgn(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_119(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_120(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_121(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_122(val, _values, result) - result = @builder.assignable( - @builder.const_fetch(val[0], val[1], val[2])) - - result -end - -def _reduce_123(val, _values, result) - result = @builder.assignable( - @builder.const_global(val[0], val[1])) - - result -end - -def _reduce_124(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_125(val, _values, result) - diagnostic :error, :module_name_const, nil, val[0] - - result -end - -# reduce 126 omitted - -def _reduce_127(val, _values, result) - result = @builder.const_global(val[0], val[1]) - - result -end - -def _reduce_128(val, _values, result) - result = @builder.const(val[0]) - - result -end - -def _reduce_129(val, _values, result) - result = @builder.const_fetch(val[0], val[1], val[2]) - - result -end - -# reduce 130 omitted - -# reduce 131 omitted - -# reduce 132 omitted - -# reduce 133 omitted - -# reduce 134 omitted - -def _reduce_135(val, _values, result) - result = @builder.symbol_internal(val[0]) - - result -end - -# reduce 136 omitted - -def _reduce_137(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_138(val, _values, result) - @lexer.state = :expr_fname - - result -end - -def _reduce_139(val, _values, result) - result = val[0] << val[3] - - result -end - -# reduce 140 omitted - -# reduce 141 omitted - -# reduce 142 omitted - -# reduce 143 omitted - -# reduce 144 omitted - -# reduce 145 omitted - -# reduce 146 omitted - -# reduce 147 omitted - -# reduce 148 omitted - -# reduce 149 omitted - -# reduce 150 omitted - -# reduce 151 omitted - -# reduce 152 omitted - -# reduce 153 omitted - -# reduce 154 omitted - -# reduce 155 omitted - -# reduce 156 omitted - -# reduce 157 omitted - -# reduce 158 omitted - -# reduce 159 omitted - -# reduce 160 omitted - -# reduce 161 omitted - -# reduce 162 omitted - -# reduce 163 omitted - -# reduce 164 omitted - -# reduce 165 omitted - -# reduce 166 omitted - -# reduce 167 omitted - -# reduce 168 omitted - -# reduce 169 omitted - -# reduce 170 omitted - -# reduce 171 omitted - -# reduce 172 omitted - -# reduce 173 omitted - -# reduce 174 omitted - -# reduce 175 omitted - -# reduce 176 omitted - -# reduce 177 omitted - -# reduce 178 omitted - -# reduce 179 omitted - -# reduce 180 omitted - -# reduce 181 omitted - -# reduce 182 omitted - -# reduce 183 omitted - -# reduce 184 omitted - -# reduce 185 omitted - -# reduce 186 omitted - -# reduce 187 omitted - -# reduce 188 omitted - -# reduce 189 omitted - -# reduce 190 omitted - -# reduce 191 omitted - -# reduce 192 omitted - -# reduce 193 omitted - -# reduce 194 omitted - -# reduce 195 omitted - -# reduce 196 omitted - -# reduce 197 omitted - -# reduce 198 omitted - -# reduce 199 omitted - -# reduce 200 omitted - -# reduce 201 omitted - -# reduce 202 omitted - -# reduce 203 omitted - -# reduce 204 omitted - -# reduce 205 omitted - -# reduce 206 omitted - -# reduce 207 omitted - -# reduce 208 omitted - -# reduce 209 omitted - -# reduce 210 omitted - -def _reduce_211(val, _values, result) - result = @builder.assign(val[0], val[1], val[2]) - - result -end - -def _reduce_212(val, _values, result) - result = @builder.op_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_213(val, _values, result) - result = @builder.op_assign( - @builder.index( - val[0], val[1], val[2], val[3]), - val[4], val[5]) - - result -end - -def _reduce_214(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_215(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_216(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_217(val, _values, result) - const = @builder.const_op_assignable( - @builder.const_fetch(val[0], val[1], val[2])) - result = @builder.op_assign(const, val[3], val[4]) - - result -end - -def _reduce_218(val, _values, result) - const = @builder.const_op_assignable( - @builder.const_global(val[0], val[1])) - result = @builder.op_assign(const, val[2], val[3]) - - result -end - -def _reduce_219(val, _values, result) - result = @builder.op_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_220(val, _values, result) - result = @builder.range_inclusive(val[0], val[1], val[2]) - - result -end - -def _reduce_221(val, _values, result) - result = @builder.range_exclusive(val[0], val[1], val[2]) - - result -end - -def _reduce_222(val, _values, result) - result = @builder.range_inclusive(val[0], val[1], nil) - - result -end - -def _reduce_223(val, _values, result) - result = @builder.range_exclusive(val[0], val[1], nil) - - result -end - -def _reduce_224(val, _values, result) - result = @builder.range_inclusive(nil, val[0], val[1]) - - result -end - -def _reduce_225(val, _values, result) - result = @builder.range_exclusive(nil, val[0], val[1]) - - result -end - -def _reduce_226(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_227(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_228(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_229(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_230(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_231(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_232(val, _values, result) - result = @builder.unary_op(val[0], - @builder.binary_op( - val[1], val[2], val[3])) - - result -end - -def _reduce_233(val, _values, result) - result = @builder.unary_op(val[0], val[1]) - - result -end - -def _reduce_234(val, _values, result) - result = @builder.unary_op(val[0], val[1]) - - result -end - -def _reduce_235(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_236(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_237(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_238(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -# reduce 239 omitted - -def _reduce_240(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_241(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_242(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_243(val, _values, result) - result = @builder.match_op(val[0], val[1], val[2]) - - result -end - -def _reduce_244(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_245(val, _values, result) - result = @builder.not_op(val[0], nil, val[1], nil) - - result -end - -def _reduce_246(val, _values, result) - result = @builder.unary_op(val[0], val[1]) - - result -end - -def _reduce_247(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_248(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_249(val, _values, result) - result = @builder.logical_op(:and, val[0], val[1], val[2]) - - result -end - -def _reduce_250(val, _values, result) - result = @builder.logical_op(:or, val[0], val[1], val[2]) - - result -end - -def _reduce_251(val, _values, result) - @context.in_defined = val[2].in_defined - result = @builder.keyword_cmd(:defined?, val[0], nil, [ val[3] ], nil) - - result -end - -def _reduce_252(val, _values, result) - result = @builder.ternary(val[0], val[1], - val[2], val[4], val[5]) - - result -end - -def _reduce_253(val, _values, result) - def_t, (name_t, ctx) = val[0] - endless_method_name(name_t) - - result = @builder.def_endless_method(def_t, name_t, - val[1], val[2], val[3]) - - local_pop - @current_arg_stack.pop - @context.in_def = ctx.in_def - - result -end - -def _reduce_254(val, _values, result) - def_t, recv, dot_t, (name_t, ctx) = val[0] - endless_method_name(name_t) - - result = @builder.def_endless_singleton(def_t, recv, dot_t, name_t, - val[1], val[2], val[3]) - - local_pop - @current_arg_stack.pop - @context.in_def = ctx.in_def - - result -end - -# reduce 255 omitted - -# reduce 256 omitted - -def _reduce_257(val, _values, result) - rescue_body = @builder.rescue_body(val[1], - nil, nil, nil, - nil, val[2]) - - result = @builder.begin_body(val[0], [ rescue_body ]) - - result -end - -def _reduce_258(val, _values, result) - result = @builder.not_op(val[0], nil, val[2], nil) - - result -end - -# reduce 259 omitted - -# reduce 260 omitted - -# reduce 261 omitted - -# reduce 262 omitted - -def _reduce_263(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_264(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_265(val, _values, result) - result = @context.dup - - result -end - -# reduce 266 omitted - -# reduce 267 omitted - -# reduce 268 omitted - -def _reduce_269(val, _values, result) - result = val[0] << @builder.associate(nil, val[2], nil) - - result -end - -def _reduce_270(val, _values, result) - result = [ @builder.associate(nil, val[0], nil) ] - - result -end - -# reduce 271 omitted - -def _reduce_272(val, _values, result) - rescue_body = @builder.rescue_body(val[1], - nil, nil, nil, - nil, val[2]) - - result = @builder.begin_body(val[0], [ rescue_body ]) - - result -end - -def _reduce_273(val, _values, result) - result = val - - result -end - -def _reduce_274(val, _values, result) - unless @static_env.declared_forward_args? - diagnostic :error, :unexpected_token, { :token => 'tBDOT3' } , val[3] - end - - result = [val[0], [*val[1], @builder.forwarded_args(val[3])], val[4]] - - result -end - -def _reduce_275(val, _values, result) - unless @static_env.declared_forward_args? - diagnostic :error, :unexpected_token, { :token => 'tBDOT3' } , val[1] - end - - result = [val[0], [@builder.forwarded_args(val[1])], val[2]] - - result -end - -def _reduce_276(val, _values, result) - result = [ nil, [], nil ] - - result -end - -# reduce 277 omitted - -def _reduce_278(val, _values, result) - result = [] - - result -end - -# reduce 279 omitted - -# reduce 280 omitted - -def _reduce_281(val, _values, result) - result = val[0] << @builder.associate(nil, val[2], nil) - - result -end - -def _reduce_282(val, _values, result) - result = [ @builder.associate(nil, val[0], nil) ] - - result -end - -def _reduce_283(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_284(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_285(val, _values, result) - result = [ @builder.associate(nil, val[0], nil) ] - result.concat(val[1]) - - result -end - -def _reduce_286(val, _values, result) - assocs = @builder.associate(nil, val[2], nil) - result = val[0] << assocs - result.concat(val[3]) - - result -end - -def _reduce_287(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_288(val, _values, result) - # When branch gets invoked by RACC's lookahead - # and command args start with '[' or '(' - # we need to put `true` to the cmdarg stack - # **before** `false` pushed by lexer - # m [], n - # ^ - # Right here we have cmdarg [...0] because - # lexer pushed it on '[' - # We need to modify cmdarg stack to [...10] - # - # For all other cases (like `m n` or `m n, []`) we simply put 1 to the stack - # and later lexer pushes corresponding bits on top of it. - last_token = @last_token[0] - lookahead = last_token == :tLBRACK || last_token == :tLPAREN_ARG - - if lookahead - top = @lexer.cmdarg.pop - @lexer.cmdarg.push(true) - @lexer.cmdarg.push(top) - else - @lexer.cmdarg.push(true) - end - - result -end - -def _reduce_289(val, _values, result) - # call_args can be followed by tLBRACE_ARG (that does cmdarg.push(0) in the lexer) - # but the push must be done after cmdarg.pop() in the parser. - # So this code does cmdarg.pop() to pop 0 pushed by tLBRACE_ARG, - # cmdarg.pop() to pop 1 pushed by command_args, - # and cmdarg.push(0) to restore back the flag set by tLBRACE_ARG. - last_token = @last_token[0] - lookahead = last_token == :tLBRACE_ARG - if lookahead - top = @lexer.cmdarg.pop - @lexer.cmdarg.pop - @lexer.cmdarg.push(top) - else - @lexer.cmdarg.pop - end - - result = val[1] - - result -end - -def _reduce_290(val, _values, result) - result = @builder.block_pass(val[0], val[1]) - - result -end - -def _reduce_291(val, _values, result) - if !@static_env.declared_anonymous_blockarg? - diagnostic :error, :no_anonymous_blockarg, nil, val[0] - end - - if @context.in_dynamic_block? && context.in_def && - @static_env.declared_anonymous_blockarg? && @static_env.parent_has_anonymous_blockarg? - diagnostic :error, :ambiguous_anonymous_blockarg, nil, val[0] - end - - result = @builder.block_pass(val[0], nil) - - result -end - -def _reduce_292(val, _values, result) - result = [ val[1] ] - - result -end - -def _reduce_293(val, _values, result) - result = [] - - result -end - -def _reduce_294(val, _values, result) - result = [ val[0] ] - - result -end - -# reduce 295 omitted - -def _reduce_296(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_297(val, _values, result) - result = val[0].concat(val[2]) - - result -end - -def _reduce_298(val, _values, result) - result = [ @builder.splat(val[0], val[1]) ] - - result -end - -def _reduce_299(val, _values, result) - if !@static_env.declared_anonymous_restarg? - diagnostic :error, :no_anonymous_restarg, nil, val[0] - end - - if @context.in_dynamic_block? && context.in_def && - @static_env.declared_anonymous_restarg? && @static_env.parent_has_anonymous_restarg? - diagnostic :error, :ambiguous_anonymous_restarg, nil, val[0] - end - - result = [ @builder.forwarded_restarg(val[0]) ] - - result -end - -def _reduce_300(val, _values, result) - result = @builder.array(nil, val[0], nil) - - result -end - -# reduce 301 omitted - -def _reduce_302(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_303(val, _values, result) - result = val[0] << @builder.splat(val[2], val[3]) - - result -end - -def _reduce_304(val, _values, result) - result = [ @builder.splat(val[0], val[1]) ] - - result -end - -# reduce 305 omitted - -# reduce 306 omitted - -# reduce 307 omitted - -# reduce 308 omitted - -# reduce 309 omitted - -# reduce 310 omitted - -# reduce 311 omitted - -# reduce 312 omitted - -# reduce 313 omitted - -# reduce 314 omitted - -def _reduce_315(val, _values, result) - result = @builder.call_method(nil, nil, val[0]) - - result -end - -def _reduce_316(val, _values, result) - @lexer.cmdarg.push(false) - - result -end - -def _reduce_317(val, _values, result) - @lexer.cmdarg.pop - - result = @builder.begin_keyword(val[0], val[2], val[3]) - - result -end - -def _reduce_318(val, _values, result) - @lexer.state = :expr_endarg - - result -end - -def _reduce_319(val, _values, result) - result = @builder.begin(val[0], val[1], val[3]) - - result -end - -def _reduce_320(val, _values, result) - result = @builder.begin(val[0], val[1], val[2]) - - result -end - -def _reduce_321(val, _values, result) - result = @builder.const_fetch(val[0], val[1], val[2]) - - result -end - -def _reduce_322(val, _values, result) - result = @builder.const_global(val[0], val[1]) - - result -end - -def _reduce_323(val, _values, result) - result = @builder.array(val[0], val[1], val[2]) - - result -end - -def _reduce_324(val, _values, result) - result = @builder.associate(val[0], val[1], val[2]) - - result -end - -def _reduce_325(val, _values, result) - result = @builder.keyword_cmd(:return, val[0]) - - result -end - -def _reduce_326(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_327(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0], val[1], [], val[2]) - - result -end - -def _reduce_328(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0]) - - result -end - -def _reduce_329(val, _values, result) - @context.in_defined = val[3].in_defined - result = @builder.keyword_cmd(:defined?, val[0], - val[2], [ val[4] ], val[5]) - - result -end - -def _reduce_330(val, _values, result) - result = @builder.not_op(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_331(val, _values, result) - result = @builder.not_op(val[0], val[1], nil, val[2]) - - result -end - -def _reduce_332(val, _values, result) - method_call = @builder.call_method(nil, nil, val[0]) - - begin_t, args, body, end_t = val[1] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -# reduce 333 omitted - -def _reduce_334(val, _values, result) - begin_t, args, body, end_t = val[1] - result = @builder.block(val[0], - begin_t, args, body, end_t) - - result -end - -# reduce 335 omitted - -def _reduce_336(val, _values, result) - else_t, else_ = val[4] - result = @builder.condition(val[0], val[1], val[2], - val[3], else_t, - else_, val[5]) - - result -end - -def _reduce_337(val, _values, result) - else_t, else_ = val[4] - result = @builder.condition(val[0], val[1], val[2], - else_, else_t, - val[3], val[5]) - - result -end - -def _reduce_338(val, _values, result) - result = @builder.loop(:while, val[0], *val[1], val[2], val[3]) - - result -end - -def _reduce_339(val, _values, result) - result = @builder.loop(:until, val[0], *val[1], val[2], val[3]) - - result -end - -def _reduce_340(val, _values, result) - *when_bodies, (else_t, else_body) = *val[3] - - result = @builder.case(val[0], val[1], - when_bodies, else_t, else_body, - val[4]) - - result -end - -def _reduce_341(val, _values, result) - *when_bodies, (else_t, else_body) = *val[2] - - result = @builder.case(val[0], nil, - when_bodies, else_t, else_body, - val[3]) - - result -end - -def _reduce_342(val, _values, result) - *in_bodies, (else_t, else_body) = *val[3] - - result = @builder.case_match(val[0], val[1], - in_bodies, else_t, else_body, - val[4]) - - result -end - -def _reduce_343(val, _values, result) - result = @builder.for(val[0], val[1], val[2], *val[3], val[4], val[5]) - - result -end - -def _reduce_344(val, _values, result) - @context.in_class = true - local_push - - result -end - -def _reduce_345(val, _values, result) - k_class, ctx = val[0] - if @context.in_def - diagnostic :error, :class_in_def, nil, k_class - end - lt_t, superclass = val[2] - result = @builder.def_class(k_class, val[1], - lt_t, superclass, - val[4], val[5]) - - local_pop - @context.in_class = ctx.in_class - - result -end - -def _reduce_346(val, _values, result) - @context.in_def = false - @context.in_class = false - local_push - - result -end - -def _reduce_347(val, _values, result) - k_class, ctx = val[0] - result = @builder.def_sclass(k_class, val[1], val[2], - val[5], val[6]) - - local_pop - @context.in_def = ctx.in_def - @context.in_class = ctx.in_class - - result -end - -def _reduce_348(val, _values, result) - @context.in_class = true - local_push - - result -end - -def _reduce_349(val, _values, result) - k_mod, ctx = val[0] - if @context.in_def - diagnostic :error, :module_in_def, nil, k_mod - end - result = @builder.def_module(k_mod, val[1], - val[3], val[4]) - - local_pop - @context.in_class = ctx.in_class - - result -end - -def _reduce_350(val, _values, result) - def_t, (name_t, ctx) = val[0] - result = @builder.def_method(def_t, name_t, val[1], - val[2], val[3]) - - local_pop - @current_arg_stack.pop - @context.in_def = ctx.in_def - - result -end - -def _reduce_351(val, _values, result) - def_t, recv, dot_t, (name_t, ctx) = val[0] - result = @builder.def_singleton(def_t, recv, dot_t, name_t, val[1], - val[2], val[3]) - - local_pop - @current_arg_stack.pop - @context.in_def = ctx.in_def - - result -end - -def _reduce_352(val, _values, result) - result = @builder.keyword_cmd(:break, val[0]) - - result -end - -def _reduce_353(val, _values, result) - result = @builder.keyword_cmd(:next, val[0]) - - result -end - -def _reduce_354(val, _values, result) - result = @builder.keyword_cmd(:redo, val[0]) - - result -end - -def _reduce_355(val, _values, result) - result = @builder.keyword_cmd(:retry, val[0]) - - result -end - -# reduce 356 omitted - -def _reduce_357(val, _values, result) - result = [ val[0], @context.dup ] - - result -end - -def _reduce_358(val, _values, result) - result = [ val[0], @context.dup ] - - result -end - -def _reduce_359(val, _values, result) - result = val[0] - @context.in_argdef = true - - result -end - -def _reduce_360(val, _values, result) - if @context.in_class && !@context.in_def && !(context.in_block || context.in_lambda) - diagnostic :error, :invalid_return, nil, val[0] - end - - result -end - -# reduce 361 omitted - -# reduce 362 omitted - -def _reduce_363(val, _values, result) - result = val[1] - - result -end - -# reduce 364 omitted - -# reduce 365 omitted - -# reduce 366 omitted - -def _reduce_367(val, _values, result) - else_t, else_ = val[4] - result = [ val[0], - @builder.condition(val[0], val[1], val[2], - val[3], else_t, - else_, nil), - ] - - result -end - -# reduce 368 omitted - -def _reduce_369(val, _values, result) - result = val - - result -end - -# reduce 370 omitted - -# reduce 371 omitted - -def _reduce_372(val, _values, result) - result = @builder.arg(val[0]) - - result -end - -def _reduce_373(val, _values, result) - result = @builder.multi_lhs(val[0], val[1], val[2]) - - result -end - -def _reduce_374(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_375(val, _values, result) - result = val[0] << val[2] - - result -end - -# reduce 376 omitted - -def _reduce_377(val, _values, result) - result = val[0]. - push(val[2]) - - result -end - -def _reduce_378(val, _values, result) - result = val[0]. - push(val[2]). - concat(val[4]) - - result -end - -def _reduce_379(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_380(val, _values, result) - result = [ val[0], *val[2] ] - - result -end - -def _reduce_381(val, _values, result) - result = @builder.restarg(val[0], val[1]) - - result -end - -def _reduce_382(val, _values, result) - result = @builder.restarg(val[0]) - - result -end - -# reduce 383 omitted - -# reduce 384 omitted - -def _reduce_385(val, _values, result) - @context.in_argdef = false - - result -end - -def _reduce_386(val, _values, result) - result = val[1] - - result -end - -def _reduce_387(val, _values, result) - result = val[0].concat(val[2]).concat(val[3]) - - result -end - -def _reduce_388(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_389(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_390(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_391(val, _values, result) - result = val[1] - - result -end - -def _reduce_392(val, _values, result) - result = [] - - result -end - -# reduce 393 omitted - -def _reduce_394(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_395(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[6]). - concat(val[7]) - - result -end - -def _reduce_396(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_397(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_398(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -# reduce 399 omitted - -def _reduce_400(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_401(val, _values, result) - if val[1].empty? && val[0].size == 1 - result = [@builder.procarg0(val[0][0])] - else - result = val[0].concat(val[1]) - end - - result -end - -def _reduce_402(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_403(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_404(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_405(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_406(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_407(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -# reduce 408 omitted - -def _reduce_409(val, _values, result) - result = @builder.args(nil, [], nil) - - result -end - -def _reduce_410(val, _values, result) - @lexer.state = :expr_value - - result -end - -def _reduce_411(val, _values, result) - @max_numparam_stack.has_ordinary_params! - @current_arg_stack.set(nil) - @context.in_argdef = false - result = @builder.args(val[0], val[1], val[2]) - - result -end - -def _reduce_412(val, _values, result) - @max_numparam_stack.has_ordinary_params! - @current_arg_stack.set(nil) - @context.in_argdef = false - result = @builder.args(val[0], val[1].concat(val[2]), val[3]) - - result -end - -def _reduce_413(val, _values, result) - result = [] - - result -end - -def _reduce_414(val, _values, result) - result = val[2] - - result -end - -def _reduce_415(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_416(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_417(val, _values, result) - @static_env.declare val[0][0] - result = @builder.shadowarg(val[0]) - - result -end - -# reduce 418 omitted - -def _reduce_419(val, _values, result) - @static_env.extend_dynamic - @max_numparam_stack.push(static: false) - result = @context.dup - @context.in_lambda = true - - result -end - -def _reduce_420(val, _values, result) - @lexer.cmdarg.push(false) - - result -end - -def _reduce_421(val, _values, result) - lambda_call = @builder.call_lambda(val[0]) - args = @max_numparam_stack.has_numparams? ? @builder.numargs(@max_numparam_stack.top) : val[2] - begin_t, body, end_t = val[4] - - @max_numparam_stack.pop - @static_env.unextend - @lexer.cmdarg.pop - @context.in_lambda = val[1].in_lambda - - result = @builder.block(lambda_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_422(val, _values, result) - @context.in_argdef = false - @max_numparam_stack.has_ordinary_params! - result = @builder.args(val[0], val[1].concat(val[2]), val[3]) - - result -end - -def _reduce_423(val, _values, result) - @context.in_argdef = false - if val[0].any? - @max_numparam_stack.has_ordinary_params! - end - result = @builder.args(nil, val[0], nil) - - result -end - -def _reduce_424(val, _values, result) - result = @context.dup - @context.in_lambda = true - - result -end - -def _reduce_425(val, _values, result) - @context.in_lambda = val[1].in_lambda - result = [ val[0], val[2], val[3] ] - - result -end - -def _reduce_426(val, _values, result) - result = @context.dup - @context.in_lambda = true - - result -end - -def _reduce_427(val, _values, result) - @context.in_lambda = val[1].in_lambda - result = [ val[0], val[2], val[3] ] - - result -end - -def _reduce_428(val, _values, result) - result = @context.dup - @context.in_block = true - - result -end - -def _reduce_429(val, _values, result) - @context.in_block = val[1].in_block - result = [ val[0], *val[2], val[3] ] - - result -end - -def _reduce_430(val, _values, result) - begin_t, block_args, body, end_t = val[1] - result = @builder.block(val[0], - begin_t, block_args, body, end_t) - - result -end - -def _reduce_431(val, _values, result) - lparen_t, args, rparen_t = val[3] - result = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - result -end - -def _reduce_432(val, _values, result) - lparen_t, args, rparen_t = val[3] - method_call = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - begin_t, args, body, end_t = val[4] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_433(val, _values, result) - method_call = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - begin_t, args, body, end_t = val[4] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_434(val, _values, result) - lparen_t, args, rparen_t = val[1] - result = @builder.call_method(nil, nil, val[0], - lparen_t, args, rparen_t) - - result -end - -def _reduce_435(val, _values, result) - lparen_t, args, rparen_t = val[3] - result = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - result -end - -def _reduce_436(val, _values, result) - lparen_t, args, rparen_t = val[3] - result = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - result -end - -def _reduce_437(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2]) - - result -end - -def _reduce_438(val, _values, result) - lparen_t, args, rparen_t = val[2] - result = @builder.call_method(val[0], val[1], nil, - lparen_t, args, rparen_t) - - result -end - -def _reduce_439(val, _values, result) - lparen_t, args, rparen_t = val[2] - result = @builder.call_method(val[0], val[1], nil, - lparen_t, args, rparen_t) - - result -end - -def _reduce_440(val, _values, result) - lparen_t, args, rparen_t = val[1] - result = @builder.keyword_cmd(:super, val[0], - lparen_t, args, rparen_t) - - result -end - -def _reduce_441(val, _values, result) - result = @builder.keyword_cmd(:zsuper, val[0]) - - result -end - -def _reduce_442(val, _values, result) - result = @builder.index(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_443(val, _values, result) - result = @context.dup - @context.in_block = true - - result -end - -def _reduce_444(val, _values, result) - @context.in_block = val[1].in_block - result = [ val[0], *val[2], val[3] ] - - result -end - -def _reduce_445(val, _values, result) - result = @context.dup - @context.in_block = true - - result -end - -def _reduce_446(val, _values, result) - @context.in_block = val[1].in_block - result = [ val[0], *val[2], val[3] ] - - result -end - -def _reduce_447(val, _values, result) - @static_env.extend_dynamic - @max_numparam_stack.push(static: false) - - result -end - -def _reduce_448(val, _values, result) - args = @max_numparam_stack.has_numparams? ? @builder.numargs(@max_numparam_stack.top) : val[1] - result = [ args, val[2] ] - - @max_numparam_stack.pop - @static_env.unextend - - result -end - -def _reduce_449(val, _values, result) - @static_env.extend_dynamic - @max_numparam_stack.push(static: false) - - result -end - -def _reduce_450(val, _values, result) - @lexer.cmdarg.push(false) - - result -end - -def _reduce_451(val, _values, result) - args = @max_numparam_stack.has_numparams? ? @builder.numargs(@max_numparam_stack.top) : val[2] - result = [ args, val[3] ] - - @max_numparam_stack.pop - @static_env.unextend - @lexer.cmdarg.pop - - result -end - -def _reduce_452(val, _values, result) - result = [ @builder.when(val[0], val[1], val[2], val[3]), - *val[4] ] - - result -end - -def _reduce_453(val, _values, result) - result = [ val[0] ] - - result -end - -# reduce 454 omitted - -def _reduce_455(val, _values, result) - @pattern_variables.push - - result -end - -def _reduce_456(val, _values, result) - @pattern_hash_keys.push - - result -end - -def _reduce_457(val, _values, result) - result = @context.in_kwarg - - @lexer.state = :expr_beg - @lexer.command_start = false - @context.in_kwarg = true - - result -end - -def _reduce_458(val, _values, result) - @pattern_variables.pop - @pattern_hash_keys.pop - @context.in_kwarg = val[1] - - result -end - -def _reduce_459(val, _values, result) - result = [ @builder.in_pattern(val[0], *val[4], val[5], val[7]), - *val[8] ] - - result -end - -def _reduce_460(val, _values, result) - result = [ val[0] ] - - result -end - -# reduce 461 omitted - -def _reduce_462(val, _values, result) - result = [ val[0], nil ] - - result -end - -def _reduce_463(val, _values, result) - result = [ val[0], @builder.if_guard(val[1], val[2]) ] - - result -end - -def _reduce_464(val, _values, result) - result = [ val[0], @builder.unless_guard(val[1], val[2]) ] - - result -end - -# reduce 465 omitted - -def _reduce_466(val, _values, result) - # array patterns that end with comma - # like 1, 2, - # must be emitted as `array_pattern_with_tail` - item = @builder.match_with_trailing_comma(val[0], val[1]) - result = @builder.array_pattern(nil, [ item ], nil) - - result -end - -def _reduce_467(val, _values, result) - result = @builder.array_pattern(nil, [val[0]].concat(val[2]), nil) - - result -end - -def _reduce_468(val, _values, result) - result = @builder.find_pattern(nil, val[0], nil) - - result -end - -def _reduce_469(val, _values, result) - result = @builder.array_pattern(nil, val[0], nil) - - result -end - -def _reduce_470(val, _values, result) - result = @builder.hash_pattern(nil, val[0], nil) - - result -end - -# reduce 471 omitted - -def _reduce_472(val, _values, result) - result = @builder.match_as(val[0], val[1], val[2]) - - result -end - -# reduce 473 omitted - -def _reduce_474(val, _values, result) - result = @builder.match_alt(val[0], val[1], val[2]) - - result -end - -# reduce 475 omitted - -def _reduce_476(val, _values, result) - result = val[0] - @pattern_hash_keys.push - - result -end - -def _reduce_477(val, _values, result) - result = val[0] - @pattern_hash_keys.push - - result -end - -# reduce 478 omitted - -# reduce 479 omitted - -def _reduce_480(val, _values, result) - @pattern_hash_keys.pop - pattern = @builder.array_pattern(nil, val[2], nil) - result = @builder.const_pattern(val[0], val[1], pattern, val[3]) - - result -end - -def _reduce_481(val, _values, result) - @pattern_hash_keys.pop - pattern = @builder.find_pattern(nil, val[2], nil) - result = @builder.const_pattern(val[0], val[1], pattern, val[3]) - - result -end - -def _reduce_482(val, _values, result) - @pattern_hash_keys.pop - pattern = @builder.hash_pattern(nil, val[2], nil) - result = @builder.const_pattern(val[0], val[1], pattern, val[3]) - - result -end - -def _reduce_483(val, _values, result) - pattern = @builder.array_pattern(val[1], nil, val[2]) - result = @builder.const_pattern(val[0], val[1], pattern, val[2]) - - result -end - -def _reduce_484(val, _values, result) - @pattern_hash_keys.pop - pattern = @builder.array_pattern(nil, val[2], nil) - result = @builder.const_pattern(val[0], val[1], pattern, val[3]) - - result -end - -def _reduce_485(val, _values, result) - @pattern_hash_keys.pop - pattern = @builder.find_pattern(nil, val[2], nil) - result = @builder.const_pattern(val[0], val[1], pattern, val[3]) - - result -end - -def _reduce_486(val, _values, result) - @pattern_hash_keys.pop - pattern = @builder.hash_pattern(nil, val[2], nil) - result = @builder.const_pattern(val[0], val[1], pattern, val[3]) - - result -end - -def _reduce_487(val, _values, result) - pattern = @builder.array_pattern(val[1], nil, val[2]) - result = @builder.const_pattern(val[0], val[1], pattern, val[2]) - - result -end - -def _reduce_488(val, _values, result) - result = @builder.array_pattern(val[0], val[1], val[2]) - - result -end - -def _reduce_489(val, _values, result) - result = @builder.find_pattern(val[0], val[1], val[2]) - - result -end - -def _reduce_490(val, _values, result) - result = @builder.array_pattern(val[0], [], val[1]) - - result -end - -def _reduce_491(val, _values, result) - @pattern_hash_keys.push - result = @context.in_kwarg - @context.in_kwarg = false - - result -end - -def _reduce_492(val, _values, result) - @pattern_hash_keys.pop - @context.in_kwarg = val[1] - result = @builder.hash_pattern(val[0], val[2], val[3]) - - result -end - -def _reduce_493(val, _values, result) - result = @builder.hash_pattern(val[0], [], val[1]) - - result -end - -def _reduce_494(val, _values, result) - @pattern_hash_keys.push - - result -end - -def _reduce_495(val, _values, result) - @pattern_hash_keys.pop - result = @builder.begin(val[0], val[2], val[3]) - - result -end - -def _reduce_496(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_497(val, _values, result) - result = val[0] - - result -end - -def _reduce_498(val, _values, result) - result = [ *val[0], val[1] ] - - result -end - -def _reduce_499(val, _values, result) - result = [ *val[0], val[1] ] - - result -end - -def _reduce_500(val, _values, result) - result = [ *val[0], val[1], *val[3] ] - - result -end - -# reduce 501 omitted - -def _reduce_502(val, _values, result) - # array patterns that end with comma - # like [1, 2,] - # must be emitted as `array_pattern_with_tail` - item = @builder.match_with_trailing_comma(val[0], val[1]) - result = [ item ] - - result -end - -def _reduce_503(val, _values, result) - # array patterns that end with comma - # like [1, 2,] - # must be emitted as `array_pattern_with_tail` - last_item = @builder.match_with_trailing_comma(val[1], val[2]) - result = [ *val[0], last_item ] - - result -end - -def _reduce_504(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_505(val, _values, result) - result = [ val[0], *val[2] ] - - result -end - -def _reduce_506(val, _values, result) - result = [ val[0], *val[2], val[4] ] - - result -end - -def _reduce_507(val, _values, result) - result = @builder.match_rest(val[0], val[1]) - - result -end - -def _reduce_508(val, _values, result) - result = @builder.match_rest(val[0]) - - result -end - -def _reduce_509(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_510(val, _values, result) - result = [ *val[0], val[2] ] - - result -end - -# reduce 511 omitted - -def _reduce_512(val, _values, result) - result = [ *val[0], *val[2] ] - - result -end - -def _reduce_513(val, _values, result) - result = val[0] - - result -end - -def _reduce_514(val, _values, result) - result = val[0] - - result -end - -def _reduce_515(val, _values, result) - result = val[0] - - result -end - -def _reduce_516(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_517(val, _values, result) - result = [ *val[0], val[2] ] - - result -end - -def _reduce_518(val, _values, result) - result = @builder.match_pair(*val[0], val[1]) - - result -end - -def _reduce_519(val, _values, result) - result = @builder.match_label(*val[0]) - - result -end - -def _reduce_520(val, _values, result) - result = [:label, val[0]] - - result -end - -def _reduce_521(val, _values, result) - result = [:quoted, [val[0], val[1], val[2]]] - - result -end - -def _reduce_522(val, _values, result) - result = [ @builder.match_rest(val[0], val[1]) ] - - result -end - -def _reduce_523(val, _values, result) - result = [ @builder.match_rest(val[0], nil) ] - - result -end - -def _reduce_524(val, _values, result) - result = val - - result -end - -# reduce 525 omitted - -def _reduce_526(val, _values, result) - result = [ @builder.match_nil_pattern(val[0][0], val[0][1]) ] - - result -end - -# reduce 527 omitted - -def _reduce_528(val, _values, result) - result = @builder.range_inclusive(val[0], val[1], val[2]) - - result -end - -def _reduce_529(val, _values, result) - result = @builder.range_exclusive(val[0], val[1], val[2]) - - result -end - -def _reduce_530(val, _values, result) - result = @builder.range_inclusive(val[0], val[1], nil) - - result -end - -def _reduce_531(val, _values, result) - result = @builder.range_exclusive(val[0], val[1], nil) - - result -end - -# reduce 532 omitted - -# reduce 533 omitted - -# reduce 534 omitted - -def _reduce_535(val, _values, result) - result = @builder.range_inclusive(nil, val[0], val[1]) - - result -end - -def _reduce_536(val, _values, result) - result = @builder.range_exclusive(nil, val[0], val[1]) - - result -end - -# reduce 537 omitted - -# reduce 538 omitted - -# reduce 539 omitted - -# reduce 540 omitted - -# reduce 541 omitted - -# reduce 542 omitted - -# reduce 543 omitted - -# reduce 544 omitted - -def _reduce_545(val, _values, result) - result = @builder.accessible(val[0]) - - result -end - -# reduce 546 omitted - -def _reduce_547(val, _values, result) - result = @builder.assignable(@builder.match_var(val[0])) - - result -end - -def _reduce_548(val, _values, result) - name = val[1][0] - unless static_env.declared?(name) - diagnostic :error, :undefined_lvar, { :name => name }, val[1] - end - - lvar = @builder.accessible(@builder.ident(val[1])) - result = @builder.pin(val[0], lvar) - - result -end - -def _reduce_549(val, _values, result) - non_lvar = @builder.accessible(val[1]) - result = @builder.pin(val[0], non_lvar) - - result -end - -def _reduce_550(val, _values, result) - expr = @builder.begin(val[1], val[2], val[3]) - result = @builder.pin(val[0], expr) - - result -end - -def _reduce_551(val, _values, result) - result = @builder.const_global(val[0], val[1]) - - result -end - -def _reduce_552(val, _values, result) - result = @builder.const_fetch(val[0], val[1], val[2]) - - result -end - -def _reduce_553(val, _values, result) - result = @builder.const(val[0]) - - result -end - -def _reduce_554(val, _values, result) - assoc_t, exc_var = val[2] - - if val[1] - exc_list = @builder.array(nil, val[1], nil) - end - - result = [ @builder.rescue_body(val[0], - exc_list, assoc_t, exc_var, - val[3], val[4]), - *val[5] ] - - result -end - -def _reduce_555(val, _values, result) - result = [] - - result -end - -def _reduce_556(val, _values, result) - result = [ val[0] ] - - result -end - -# reduce 557 omitted - -# reduce 558 omitted - -def _reduce_559(val, _values, result) - result = [ val[0], val[1] ] - - result -end - -# reduce 560 omitted - -def _reduce_561(val, _values, result) - result = [ val[0], val[1] ] - - result -end - -# reduce 562 omitted - -# reduce 563 omitted - -# reduce 564 omitted - -def _reduce_565(val, _values, result) - result = @builder.string_compose(nil, val[0], nil) - - result -end - -def _reduce_566(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_567(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_568(val, _values, result) - string = @builder.string_compose(val[0], val[1], val[2]) - result = @builder.dedent_string(string, @lexer.dedent_level) - - result -end - -def _reduce_569(val, _values, result) - string = @builder.string(val[0]) - result = @builder.dedent_string(string, @lexer.dedent_level) - - result -end - -def _reduce_570(val, _values, result) - result = @builder.character(val[0]) - - result -end - -def _reduce_571(val, _values, result) - string = @builder.xstring_compose(val[0], val[1], val[2]) - result = @builder.dedent_string(string, @lexer.dedent_level) - - result -end - -def _reduce_572(val, _values, result) - opts = @builder.regexp_options(val[3]) - result = @builder.regexp_compose(val[0], val[1], val[2], opts) - - result -end - -# reduce 573 omitted - -# reduce 574 omitted - -def _reduce_575(val, _values, result) - result = @builder.words_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_576(val, _values, result) - result = [] - - result -end - -def _reduce_577(val, _values, result) - result = val[0] << @builder.word(val[1]) - - result -end - -def _reduce_578(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_579(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_580(val, _values, result) - result = @builder.symbols_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_581(val, _values, result) - result = [] - - result -end - -def _reduce_582(val, _values, result) - result = val[0] << @builder.word(val[1]) - - result -end - -def _reduce_583(val, _values, result) - result = @builder.words_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_584(val, _values, result) - result = @builder.symbols_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_585(val, _values, result) - result = [] - - result -end - -def _reduce_586(val, _values, result) - result = val[0] << @builder.string_internal(val[1]) - - result -end - -def _reduce_587(val, _values, result) - result = [] - - result -end - -def _reduce_588(val, _values, result) - result = val[0] << @builder.symbol_internal(val[1]) - - result -end - -def _reduce_589(val, _values, result) - result = [] - - result -end - -def _reduce_590(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_591(val, _values, result) - result = [] - - result -end - -def _reduce_592(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_593(val, _values, result) - result = [] - - result -end - -def _reduce_594(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_595(val, _values, result) - result = @builder.string_internal(val[0]) - - result -end - -def _reduce_596(val, _values, result) - result = val[1] - - result -end - -def _reduce_597(val, _values, result) - @lexer.cmdarg.push(false) - @lexer.cond.push(false) - - result -end - -def _reduce_598(val, _values, result) - @lexer.cmdarg.pop - @lexer.cond.pop - - result = @builder.begin(val[0], val[2], val[3]) - - result -end - -# reduce 599 omitted - -def _reduce_600(val, _values, result) - result = @builder.accessible(val[0]) - - result -end - -# reduce 601 omitted - -# reduce 602 omitted - -# reduce 603 omitted - -def _reduce_604(val, _values, result) - @lexer.state = :expr_end - result = @builder.symbol(val[0]) - - result -end - -def _reduce_605(val, _values, result) - @lexer.state = :expr_end - result = @builder.symbol_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_606(val, _values, result) - result = val[0] - - result -end - -def _reduce_607(val, _values, result) - if @builder.respond_to? :negate - # AST builder interface compatibility - result = @builder.negate(val[0], val[1]) - else - result = @builder.unary_num(val[0], val[1]) - end - - result -end - -def _reduce_608(val, _values, result) - @lexer.state = :expr_end - result = @builder.integer(val[0]) - - result -end - -def _reduce_609(val, _values, result) - @lexer.state = :expr_end - result = @builder.float(val[0]) - - result -end - -def _reduce_610(val, _values, result) - @lexer.state = :expr_end - result = @builder.rational(val[0]) - - result -end - -def _reduce_611(val, _values, result) - @lexer.state = :expr_end - result = @builder.complex(val[0]) - - result -end - -def _reduce_612(val, _values, result) - result = @builder.ivar(val[0]) - - result -end - -def _reduce_613(val, _values, result) - result = @builder.gvar(val[0]) - - result -end - -def _reduce_614(val, _values, result) - result = @builder.cvar(val[0]) - - result -end - -def _reduce_615(val, _values, result) - result = @builder.ident(val[0]) - - result -end - -def _reduce_616(val, _values, result) - result = @builder.const(val[0]) - - result -end - -# reduce 617 omitted - -def _reduce_618(val, _values, result) - result = @builder.nil(val[0]) - - result -end - -def _reduce_619(val, _values, result) - result = @builder.self(val[0]) - - result -end - -def _reduce_620(val, _values, result) - result = @builder.true(val[0]) - - result -end - -def _reduce_621(val, _values, result) - result = @builder.false(val[0]) - - result -end - -def _reduce_622(val, _values, result) - result = @builder.__FILE__(val[0]) - - result -end - -def _reduce_623(val, _values, result) - result = @builder.__LINE__(val[0]) - - result -end - -def _reduce_624(val, _values, result) - result = @builder.__ENCODING__(val[0]) - - result -end - -def _reduce_625(val, _values, result) - result = @builder.accessible(val[0]) - - result -end - -def _reduce_626(val, _values, result) - result = @builder.accessible(val[0]) - - result -end - -def _reduce_627(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_628(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_629(val, _values, result) - result = @builder.nth_ref(val[0]) - - result -end - -def _reduce_630(val, _values, result) - result = @builder.back_ref(val[0]) - - result -end - -def _reduce_631(val, _values, result) - @lexer.state = :expr_value - - result -end - -def _reduce_632(val, _values, result) - result = [ val[0], val[2] ] - - result -end - -def _reduce_633(val, _values, result) - result = nil - - result -end - -# reduce 634 omitted - -def _reduce_635(val, _values, result) - @context.in_argdef = false - result = @builder.args(nil, [], nil) - - result -end - -def _reduce_636(val, _values, result) - result = @builder.args(val[0], val[1], val[2]) - - @lexer.state = :expr_value - @context.in_argdef = false - - result -end - -# reduce 637 omitted - -def _reduce_638(val, _values, result) - result = @context.dup - @context.in_kwarg = true - @context.in_argdef = true - - result -end - -def _reduce_639(val, _values, result) - @context.in_kwarg = val[0].in_kwarg - @context.in_argdef = false - result = @builder.args(nil, val[1], nil) - - result -end - -def _reduce_640(val, _values, result) - result = val[0].concat(val[2]).concat(val[3]) - - result -end - -def _reduce_641(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_642(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_643(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_644(val, _values, result) - @static_env.declare_forward_args - result = [ @builder.forward_arg(val[0]) ] - - result -end - -def _reduce_645(val, _values, result) - result = val[1] - - result -end - -def _reduce_646(val, _values, result) - result = [] - - result -end - -def _reduce_647(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_648(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[6]). - concat(val[7]) - - result -end - -def _reduce_649(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_650(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_651(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_652(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_653(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_654(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_655(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_656(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_657(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_658(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_659(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_660(val, _values, result) - result = val[0] - - result -end - -def _reduce_661(val, _values, result) - result = [] - - result -end - -def _reduce_662(val, _values, result) - result = val[0] - - result -end - -def _reduce_663(val, _values, result) - diagnostic :error, :argument_const, nil, val[0] - - result -end - -def _reduce_664(val, _values, result) - diagnostic :error, :argument_ivar, nil, val[0] - - result -end - -def _reduce_665(val, _values, result) - diagnostic :error, :argument_gvar, nil, val[0] - - result -end - -def _reduce_666(val, _values, result) - diagnostic :error, :argument_cvar, nil, val[0] - - result -end - -# reduce 667 omitted - -def _reduce_668(val, _values, result) - @static_env.declare val[0][0] - - @max_numparam_stack.has_ordinary_params! - - result = val[0] - - result -end - -def _reduce_669(val, _values, result) - @current_arg_stack.set(val[0][0]) - result = val[0] - - result -end - -def _reduce_670(val, _values, result) - @current_arg_stack.set(0) - result = @builder.arg(val[0]) - - result -end - -def _reduce_671(val, _values, result) - result = @builder.multi_lhs(val[0], val[1], val[2]) - - result -end - -def _reduce_672(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_673(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_674(val, _values, result) - check_kwarg_name(val[0]) - - @static_env.declare val[0][0] - - @max_numparam_stack.has_ordinary_params! - - @current_arg_stack.set(val[0][0]) - @context.in_argdef = false - - result = val[0] - - result -end - -def _reduce_675(val, _values, result) - @current_arg_stack.set(nil) - @context.in_argdef = true - result = @builder.kwoptarg(val[0], val[1]) - - result -end - -def _reduce_676(val, _values, result) - @current_arg_stack.set(nil) - @context.in_argdef = true - result = @builder.kwarg(val[0]) - - result -end - -def _reduce_677(val, _values, result) - @context.in_argdef = true - result = @builder.kwoptarg(val[0], val[1]) - - result -end - -def _reduce_678(val, _values, result) - @context.in_argdef = true - result = @builder.kwarg(val[0]) - - result -end - -def _reduce_679(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_680(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_681(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_682(val, _values, result) - result = val[0] << val[2] - - result -end - -# reduce 683 omitted - -# reduce 684 omitted - -def _reduce_685(val, _values, result) - result = [ @builder.kwnilarg(val[0][0], val[0][1]) ] - - result -end - -def _reduce_686(val, _values, result) - @static_env.declare val[1][0] - - result = [ @builder.kwrestarg(val[0], val[1]) ] - - result -end - -def _reduce_687(val, _values, result) - @static_env.declare_anonymous_kwrestarg - - result = [ @builder.kwrestarg(val[0]) ] - - result -end - -def _reduce_688(val, _values, result) - @current_arg_stack.set(0) - @context.in_argdef = true - result = @builder.optarg(val[0], val[1], val[2]) - - result -end - -def _reduce_689(val, _values, result) - @current_arg_stack.set(0) - @context.in_argdef = true - result = @builder.optarg(val[0], val[1], val[2]) - - result -end - -def _reduce_690(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_691(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_692(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_693(val, _values, result) - result = val[0] << val[2] - - result -end - -# reduce 694 omitted - -# reduce 695 omitted - -def _reduce_696(val, _values, result) - @static_env.declare val[1][0] - - result = [ @builder.restarg(val[0], val[1]) ] - - result -end - -def _reduce_697(val, _values, result) - @static_env.declare_anonymous_restarg - - result = [ @builder.restarg(val[0]) ] - - result -end - -# reduce 698 omitted - -# reduce 699 omitted - -def _reduce_700(val, _values, result) - @static_env.declare val[1][0] - - result = @builder.blockarg(val[0], val[1]) - - result -end - -def _reduce_701(val, _values, result) - @static_env.declare_anonymous_blockarg - - result = @builder.blockarg(val[0], nil) - - result -end - -def _reduce_702(val, _values, result) - result = [ val[1] ] - - result -end - -def _reduce_703(val, _values, result) - result = [] - - result -end - -# reduce 704 omitted - -def _reduce_705(val, _values, result) - result = val[1] - - result -end - -def _reduce_706(val, _values, result) - result = [] - - result -end - -# reduce 707 omitted - -def _reduce_708(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_709(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_710(val, _values, result) - result = @builder.pair(val[0], val[1], val[2]) - - result -end - -def _reduce_711(val, _values, result) - result = @builder.pair_keyword(val[0], val[1]) - - result -end - -def _reduce_712(val, _values, result) - result = @builder.pair_label(val[0]) - - result -end - -def _reduce_713(val, _values, result) - result = @builder.pair_quoted(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_714(val, _values, result) - result = @builder.kwsplat(val[0], val[1]) - - result -end - -def _reduce_715(val, _values, result) - if !@static_env.declared_anonymous_kwrestarg? - diagnostic :error, :no_anonymous_kwrestarg, nil, val[0] - end - - if @context.in_dynamic_block? && context.in_def && - @static_env.declared_anonymous_kwrestarg? && @static_env.parent_has_anonymous_kwrestarg? - diagnostic :error, :ambiguous_anonymous_kwrestarg, nil, val[0] - end - - result = @builder.forwarded_kwrestarg(val[0]) - - result -end - -# reduce 716 omitted - -# reduce 717 omitted - -# reduce 718 omitted - -# reduce 719 omitted - -# reduce 720 omitted - -# reduce 721 omitted - -# reduce 722 omitted - -# reduce 723 omitted - -# reduce 724 omitted - -# reduce 725 omitted - -def _reduce_726(val, _values, result) - result = [:dot, val[0][1]] - - result -end - -def _reduce_727(val, _values, result) - result = [:anddot, val[0][1]] - - result -end - -# reduce 728 omitted - -# reduce 729 omitted - -# reduce 730 omitted - -# reduce 731 omitted - -def _reduce_732(val, _values, result) - result = val[1] - - result -end - -def _reduce_733(val, _values, result) - result = val[1] - - result -end - -def _reduce_734(val, _values, result) - result = val[1] - - result -end - -# reduce 735 omitted - -# reduce 736 omitted - -def _reduce_737(val, _values, result) - yyerrok - - result -end - -# reduce 738 omitted - -# reduce 739 omitted - -# reduce 740 omitted - -def _reduce_741(val, _values, result) - result = nil - - result -end - -def _reduce_none(val, _values, result) - val[0] -end - - end # class Ruby33 -end # module Parser diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ruby34.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ruby34.rb deleted file mode 100644 index 775ef480..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/ruby34.rb +++ /dev/null @@ -1,12589 +0,0 @@ -# -*- encoding:utf-8; warn-indent:false; frozen_string_literal: true -*- -# -# DO NOT MODIFY!!!! -# This file is automatically generated by Racc 1.7.3 -# from Racc grammar file "ruby34.y". -# - -require 'racc/parser.rb' - - -require 'parser' - -module Parser - class Ruby34 < Parser::Base - - - def version - 34 - end - - def default_encoding - Encoding::UTF_8 - end - - def endless_method_name(name_t) - if !%w[=== == != <= >=].include?(name_t[0]) && name_t[0].end_with?('=') - diagnostic :error, :endless_setter, nil, name_t - end - end - - def local_push - @static_env.extend_static - @lexer.cmdarg.push(false) - @lexer.cond.push(false) - @max_numparam_stack.push(static: true) - end - - def local_pop - @static_env.unextend - @lexer.cmdarg.pop - @lexer.cond.pop - @max_numparam_stack.pop - end - - def try_declare_numparam(node) - name = node.children[0] - - if name =~ /\A_[1-9]\z/ && !static_env.declared?(name) && @context.in_dynamic_block? - # definitely an implicit param - location = node.loc.expression - - if max_numparam_stack.has_ordinary_params? - diagnostic :error, :ordinary_param_defined, nil, [nil, location] - end - - raw_max_numparam_stack = max_numparam_stack.stack.dup - # ignore current block scope - raw_max_numparam_stack.pop - - raw_max_numparam_stack.reverse_each do |outer_scope| - if outer_scope[:static] - # found an outer scope that can't have numparams - # like def/class/etc - break - else - outer_scope_has_numparams = outer_scope[:value] > 0 - - if outer_scope_has_numparams - diagnostic :error, :numparam_used_in_outer_scope, nil, [nil, location] - else - # for now it's ok, but an outer scope can also be a block - # like proc { _1; proc { proc { proc { _2 }} }} - # with numparams, so we need to continue - end - end - end - - static_env.declare(name) - max_numparam_stack.register(name[1].to_i) - - true - else - false - end - end -##### State transition tables begin ### - -racc_action_table = [ - -615, -627, 312, 222, 223, 312, -116, -615, -615, -615, - 1064, 624, -615, -615, -615, 228, -615, 312, 1064, 665, - 127, 240, 227, 624, -615, 126, -615, -615, -615, 222, - 223, 225, 704, 667, -117, -124, -615, -615, 624, -615, - -615, -615, -615, -615, 624, 624, -116, -117, -124, 859, - 705, -123, 3, 127, -123, 1064, 1063, -628, 126, 799, - -116, 241, 241, 525, -119, -121, -615, -615, -615, -615, - -615, -615, -615, -615, -615, -615, -615, -615, -615, -615, - 229, 307, -615, -615, -615, 664, -615, -615, 794, 311, - -615, 931, 311, -615, -615, -118, -615, 241, -615, 666, - -615, -511, -615, -615, 311, -615, -615, -615, -615, -615, - 624, -615, -616, -615, -119, -107, -117, 222, 223, -616, - -616, -616, -124, 241, -616, -616, -616, -615, -616, 127, - -615, -615, -615, -615, 126, -615, -616, -615, -616, -616, - -616, 127, -615, -108, -115, -615, 126, 234, -616, -616, - -121, -616, -616, -616, -616, -616, 127, -120, -118, 920, - -114, 126, 127, 127, -116, -117, -124, 126, 126, -116, - -117, -124, -123, -110, -112, -120, -730, -123, -616, -616, - -616, -616, -616, -616, -616, -616, -616, -616, -616, -616, - -616, -616, 127, -122, -616, -616, -616, 126, -616, -616, - 930, -122, -616, -741, -109, -616, -616, 859, -616, 631, - -616, 241, -616, 234, -616, -616, 241, -616, -616, -616, - -616, -616, -321, -616, 238, -616, 238, 604, 127, -321, - -321, -321, -119, 126, -716, -321, -321, -119, -321, -616, - -716, -110, -616, -616, -616, -616, -321, -616, 228, -616, - 312, -730, 631, 652, -616, 305, 123, -616, -321, -321, - 799, -321, -321, -321, -321, -321, -717, -102, -121, -741, - -717, -115, -112, -121, -111, -120, -118, 652, -109, -88, - -120, -118, 136, -124, -111, -124, -123, 241, -321, -321, - -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, - -321, -321, 219, 234, -321, -321, -321, -110, 691, -321, - -113, -122, -321, 229, 307, -321, -122, 654, 653, 650, - -321, 220, -321, 884, -321, -321, 652, -321, -321, -321, - -321, -321, 234, -321, 692, -321, 221, 311, -112, -716, - -111, 654, 653, 650, -109, 224, 989, -110, 240, -321, - -110, 90, -321, -321, 652, -113, 502, -321, 766, -741, - 127, -721, -110, 91, -321, 126, 885, -122, -721, -721, - -721, 104, 105, 92, -721, -721, 301, -721, -112, -730, - -111, -112, -119, -111, -109, -721, -721, -109, -741, 241, - 654, 653, 650, -112, 503, -111, 241, -721, -721, -109, - -721, -721, -721, -721, -721, 241, 1156, 1163, 615, 494, - -356, 491, 490, 489, 499, 492, 228, -356, 654, 653, - 655, 104, 105, 305, 502, -121, -356, -721, -721, -721, - -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, - -721, 240, -627, -721, -721, -721, 497, 693, -721, 106, - 107, -721, 652, 363, -721, 507, 506, 510, 509, -721, - 652, -721, 503, -721, -721, 652, -721, -721, -721, -721, - -721, -321, -721, -721, -721, -356, 686, 687, -321, -321, - -321, 229, 241, -321, -321, -321, -615, -321, -721, -107, - 364, -721, -721, -615, -111, -321, -721, -321, -321, 106, - 107, -116, 488, -721, -716, 241, -120, -321, -321, 704, - -321, -321, -321, -321, -321, 127, 654, 653, 222, 223, - 126, 652, 967, 652, 654, 653, 432, 1087, 652, 654, - 653, 657, 473, 1163, 823, -119, -121, -321, -321, -321, - -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, - -321, -615, -628, -321, -321, -321, -615, 886, -321, 241, - -634, -321, 618, -615, -321, -321, 652, -321, -716, -321, - 840, -321, -615, -321, -321, 513, -321, -321, -321, -321, - -321, -118, -321, 692, -321, 654, 653, 654, 653, 659, - -616, -716, 654, 653, 663, 823, 228, -616, -321, -108, - -623, -321, -321, 522, -321, 524, -321, -623, -622, 604, - -721, -117, 523, -321, 526, -622, -122, -721, -721, -721, - 127, -615, -721, -721, -721, 126, -721, 282, 283, -118, - 654, 653, 668, -624, -721, -721, -721, -721, -721, 1070, - -624, 637, 222, 223, 1066, 638, -721, -721, 1067, -721, - -721, -721, -721, -721, 637, -616, -114, 127, 1095, -621, - -618, 229, 126, 281, 280, -623, -621, -618, -123, 241, - 527, 886, 618, -622, -717, 240, -721, -721, -721, -721, - -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, - 562, 989, -721, -721, -721, 574, 887, -721, -624, 686, - -721, 502, -619, -721, -721, 576, -721, -620, -721, -619, - -721, 578, -721, -721, -620, -721, -721, -721, -721, -721, - -321, -721, -721, -721, -621, -618, 429, -321, -321, -321, - -122, 431, 430, -321, -321, 136, -321, -721, 265, 503, - -721, -721, -721, -721, -321, -721, -110, -721, 510, 509, - 637, 1156, -721, -717, 1095, -120, -321, -321, -119, -321, - -321, -321, -321, -321, -87, 241, 241, -619, 618, -625, - 262, 499, -620, 589, 264, 263, -625, 687, 109, 108, - 590, 502, 110, 121, 122, -625, -321, -321, -321, -321, - -321, -321, -321, -321, -321, -321, -321, -321, -321, -321, - 597, 840, -321, -321, -321, -616, 691, -321, 241, 316, - -321, 1186, -616, -321, 510, 509, 241, -717, -321, 503, - -321, -616, -321, -321, -112, -321, -321, -321, -321, -321, - 234, -321, 692, -321, -625, 234, -121, 915, 859, 494, - -717, 491, 490, 489, 499, 492, 307, -321, -109, 601, - -321, -321, -721, -321, 502, -321, 607, 265, 265, -721, - -118, 611, -321, 1088, 1089, -122, -721, -721, -721, 499, - -616, 619, -721, -721, 620, -721, 497, 915, 859, 502, - 1222, 1223, 578, -721, -721, 507, 506, 510, 509, 262, - -626, 631, 503, 264, 263, -721, -721, -626, -721, -721, - -721, -721, -721, 421, -721, 635, -626, 636, 228, 644, - 669, -721, 510, 509, 672, 596, -716, 503, 241, 673, - -721, -294, 674, 676, 594, -721, -721, -721, -721, -721, - -721, -721, -721, -721, -721, -721, -721, -721, -721, -721, - 680, -721, -721, -721, 241, 693, -721, -314, 684, -721, - 685, 307, -721, 702, -314, -626, 703, -721, 241, -721, - 707, -721, -721, -314, -721, -721, -721, -721, -721, -721, - -721, -721, -721, 229, 710, 228, 711, 713, 715, -385, - 228, 228, 606, 727, 728, 732, -721, 634, 640, -721, - -721, 523, -721, 734, -721, 228, 632, 642, 740, 741, - 265, -721, 679, 265, -120, 7, 81, 82, 83, 11, - 65, 677, -314, 265, 71, 72, 265, 241, 754, 75, - 241, 73, 74, 76, 35, 36, 79, 80, 257, 241, - 241, -102, 769, 84, 33, 32, 115, 114, 116, 117, - 229, 241, 23, 611, 780, 229, 229, 786, 10, 53, - 9, 12, 119, 118, 120, 111, 64, 109, 108, 112, - 229, 110, 121, 122, 787, 104, 105, 49, 50, 48, - 265, 269, 270, 271, 272, 282, 283, 277, 278, 273, - 274, -322, 258, 259, 790, 795, 275, 276, -322, 45, - 796, 256, 38, 800, 822, 66, 67, -322, 823, 68, - 823, 40, 262, -298, 268, 52, 264, 263, 841, 260, - 261, 281, 280, 266, 24, 267, 562, 562, 854, 102, - 90, 93, 94, -322, 95, 97, 96, 98, 856, 859, - -322, 877, 91, 101, 880, 279, 881, 241, 854, -322, - 85, 856, 92, 106, 107, 241, -322, 46, 47, 335, - 81, 82, 83, 11, 65, 893, 895, 301, 71, 72, - 901, 903, 905, 75, 576, 73, 74, 76, 35, 36, - 79, 80, 130, 131, 132, 133, 134, 84, 33, 32, - 115, 114, 116, 117, 578, 780, 23, 241, -322, 307, - 307, 681, 10, 53, 337, 12, 119, 118, 120, 111, - 64, 109, 108, 112, 780, 110, 121, 122, 265, 104, - 105, 49, 50, 48, 265, 269, 270, 271, 272, 282, - 283, 277, 278, 273, 274, -321, 258, 259, 859, 917, - 275, 276, -321, 45, 918, 241, 339, -717, 241, 66, - 67, -321, 928, 68, 241, 40, 262, 935, 268, 52, - 264, 263, 935, 260, 261, 281, 280, 266, 24, 267, - 935, 935, -296, 102, 90, 93, 94, 228, 95, 97, - 96, 98, 241, 940, 1128, 941, 91, 101, 947, 279, - -294, -266, 951, 1126, 85, 710, 92, 106, 107, 705, - -321, 46, 47, 335, 81, 82, 83, 11, 65, 954, - 956, 958, 71, 72, 960, 960, 241, 75, 903, 73, - 74, 76, 35, 36, 79, 80, 130, 131, 132, 133, - 134, 84, 33, 32, 115, 114, 116, 117, 1016, 241, - 23, 780, 229, 1033, 1035, 681, 10, 53, 337, 12, - 119, 118, 120, 111, 64, 109, 108, 112, 1039, 110, - 121, 122, 1040, 104, 105, 49, 50, 48, 265, 269, - 270, 271, 272, 282, 283, 277, 278, 273, 274, -321, - 258, 259, 1045, 1046, 275, 276, -321, 45, 1048, -298, - 38, -717, 854, 66, 67, -321, 856, 68, 1061, 40, - 262, 1062, 268, 52, 264, 263, 1065, 260, 261, 281, - 280, 266, 24, 267, 1082, 1083, 1084, 102, 90, 93, - 94, 228, 95, 97, 96, 98, 1098, 710, 1178, 1101, - 91, 101, 1104, 279, 1106, 1108, 241, 642, 85, -385, - 92, 106, 107, 1118, -321, 46, 47, 7, 81, 82, - 83, 11, 65, 1129, 1130, 960, 71, 72, 960, 960, - 1009, 75, 241, 73, 74, 76, 35, 36, 79, 80, - 130, 131, 132, 133, 134, 84, 33, 32, 115, 114, - 116, 117, 241, 1154, 23, 1157, 229, 1064, 1176, 1179, - 10, 53, 9, 12, 119, 118, 120, 111, 64, 109, - 108, 112, 1183, 110, 121, 122, 1184, 104, 105, 49, - 50, 48, 265, 269, 270, 271, 272, 282, 283, 277, - 278, 273, 274, 228, 258, 259, 702, 1062, 275, 276, - 1178, 45, 1194, 241, 38, 241, 241, 66, 67, 642, - 241, 68, 241, 40, 262, 241, 268, 52, 264, 263, - 1064, 260, 261, 281, 280, 266, 24, 267, 1201, 1202, - 241, 102, 90, 93, 94, 1206, 95, 97, 96, 98, - 241, 710, 1209, 1211, 91, 101, 1213, 279, 1215, 1215, - 241, 960, 85, -717, 92, 106, 107, -716, 229, 46, - 47, 335, 81, 82, 83, 11, 65, 1238, 1238, 1239, - 71, 72, 1215, 1215, 1215, 75, 1215, 73, 74, 76, - 35, 36, 79, 80, nil, nil, nil, nil, nil, 84, - 33, 32, 115, 114, 116, 117, nil, 494, 23, 491, - 490, 489, nil, 492, 10, 53, 337, 12, 119, 118, - 120, 111, 64, 109, 108, 112, nil, 110, 121, 122, - nil, 104, 105, 49, 50, 48, 265, 269, 270, 271, - 272, 282, 283, 277, 278, 273, 274, nil, 258, 259, - nil, nil, 275, 276, nil, 45, nil, 1092, 38, 109, - 108, 66, 67, 110, nil, 68, nil, 40, 262, nil, - 268, 52, 264, 263, nil, 260, 261, 281, 280, 266, - 24, 267, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, 1094, nil, nil, nil, 91, 101, - 241, 279, nil, nil, nil, nil, 85, nil, 92, 106, - 107, nil, nil, 46, 47, 335, 81, 82, 83, 11, - 65, nil, nil, nil, 71, 72, nil, nil, nil, 75, - nil, 73, 74, 76, 35, 36, 79, 80, nil, nil, - nil, nil, nil, 84, 33, 32, 115, 114, 116, 117, - nil, 1123, 23, 491, 490, 489, nil, 492, 10, 53, - 337, 12, 119, 118, 120, 111, 64, 109, 108, 112, - nil, 110, 121, 122, nil, 104, 105, 49, 50, 48, - 265, 269, 270, 271, 272, 282, 283, 277, 278, 273, - 274, nil, 258, 259, nil, nil, 275, 276, nil, 45, - nil, nil, 38, nil, nil, 66, 67, nil, nil, 68, - nil, 40, 262, nil, 268, 52, 264, 263, nil, 260, - 261, 281, 280, 266, 24, 267, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, 279, nil, nil, nil, nil, - 85, nil, 92, 106, 107, nil, nil, 46, 47, 335, - 81, 82, 83, 11, 65, nil, nil, nil, 71, 72, - nil, nil, nil, 75, nil, 73, 74, 76, 35, 36, - 79, 80, nil, nil, nil, nil, nil, 84, 33, 32, - 115, 114, 116, 117, nil, 1123, 23, 491, 490, 489, - nil, 492, 10, 53, 337, 12, 119, 118, 120, 111, - 64, 109, 108, 112, nil, 110, 121, 122, nil, 104, - 105, 49, 50, 48, 265, 269, 270, 271, 272, 282, - 283, 277, 278, 273, 274, nil, 258, 259, nil, nil, - 275, 276, nil, 45, nil, nil, 38, nil, nil, 66, - 67, nil, nil, 68, nil, 40, 262, nil, 268, 52, - 264, 263, nil, 260, 261, 281, 280, 266, 24, 267, - nil, nil, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, 279, - nil, nil, nil, nil, 85, nil, 92, 106, 107, nil, - nil, 46, 47, 335, 81, 82, 83, 11, 65, nil, - nil, nil, 71, 72, nil, nil, nil, 75, nil, 73, - 74, 76, 35, 36, 79, 80, nil, nil, nil, nil, - nil, 84, 33, 32, 115, 114, 116, 117, nil, nil, - 23, nil, nil, nil, nil, nil, 10, 53, 337, 12, - 119, 118, 120, 111, 64, 109, 108, 112, nil, 110, - 121, 122, nil, 104, 105, 49, 50, 48, 265, 269, - 270, 271, 272, 282, 283, 277, 278, 273, 274, nil, - 258, 259, nil, nil, 275, 276, nil, 45, nil, nil, - 38, nil, nil, 66, 67, nil, nil, 68, nil, 40, - 262, nil, 268, 52, 264, 263, nil, 260, 261, 281, - 280, 266, 24, 267, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, 279, nil, nil, nil, nil, 85, nil, - 92, 106, 107, nil, nil, 46, 47, 335, 81, 82, - 83, 11, 65, nil, nil, nil, 71, 72, nil, nil, - nil, 75, nil, 73, 74, 76, 35, 36, 79, 80, - nil, nil, nil, nil, nil, 84, 33, 32, 115, 114, - 116, 117, nil, nil, 23, nil, nil, nil, nil, nil, - 10, 53, 337, 12, 119, 118, 120, 111, 64, 109, - 108, 112, nil, 110, 121, 122, nil, 104, 105, 49, - 50, 48, 265, 269, 270, 271, 272, 282, 283, 277, - 278, 273, 274, nil, 258, 259, nil, nil, 275, 276, - nil, 45, nil, nil, 339, nil, nil, 66, 67, nil, - nil, 68, nil, 40, 262, nil, 268, 52, 264, 263, - nil, 260, 261, 281, 280, 266, 24, 267, nil, nil, - nil, 102, 90, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, 279, nil, nil, - nil, nil, 85, nil, 92, 106, 107, nil, nil, 46, - 47, 335, 81, 82, 83, 11, 65, nil, nil, nil, - 71, 72, nil, nil, nil, 75, nil, 73, 74, 76, - 35, 36, 79, 80, nil, nil, nil, nil, nil, 84, - 33, 32, 115, 114, 116, 117, nil, nil, 23, nil, - nil, nil, nil, nil, 10, 53, 337, 12, 119, 118, - 120, 111, 64, 109, 108, 112, nil, 110, 121, 122, - nil, 104, 105, 49, 50, 48, 265, 269, 270, 271, - 272, 282, 283, 277, 278, 273, 274, nil, 258, 259, - nil, nil, 275, 276, nil, 45, nil, nil, 339, nil, - nil, 66, 67, nil, nil, 68, nil, 40, 262, nil, - 268, 52, 264, 263, nil, 260, 261, 281, 280, 266, - 24, 267, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, 279, nil, nil, nil, nil, 85, nil, 92, 106, - 107, nil, nil, 46, 47, 335, 81, 82, 83, 11, - 65, nil, nil, nil, 71, 72, nil, nil, nil, 75, - nil, 73, 74, 76, 35, 36, 79, 80, nil, nil, - nil, nil, nil, 84, 33, 32, 115, 114, 116, 117, - nil, nil, 23, nil, nil, nil, nil, nil, 10, 53, - 337, 12, 119, 118, 120, 111, 64, 109, 108, 112, - nil, 110, 121, 122, nil, 104, 105, 49, 50, 48, - 265, 269, 270, 271, 272, 282, 283, 277, 278, 273, - 274, nil, 258, 259, nil, nil, 275, 276, nil, 45, - nil, nil, 38, nil, nil, 66, 67, nil, nil, 68, - nil, 40, 262, nil, 268, 52, 264, 263, nil, 260, - 261, 281, 280, 266, 24, 267, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, 279, nil, nil, nil, nil, - 85, nil, 92, 106, 107, nil, nil, 46, 47, 335, - 81, 82, 83, 11, 65, nil, nil, nil, 71, 72, - nil, nil, nil, 75, nil, 73, 74, 76, 35, 36, - 79, 80, nil, nil, nil, nil, nil, 84, 33, 32, - 115, 114, 116, 117, nil, 494, 23, 491, 490, 489, - nil, 492, 10, 53, 337, 12, 119, 118, 120, 111, - 64, 109, 108, 112, nil, 110, 121, 122, nil, 104, - 105, 49, 50, 48, 494, nil, 491, 490, 489, nil, - 492, nil, 720, nil, 494, nil, 491, 490, 489, nil, - 492, 724, nil, 45, nil, nil, 38, nil, nil, 66, - 67, nil, nil, 68, 494, 40, 491, 490, 489, 52, - 492, 720, nil, nil, nil, nil, nil, nil, 24, nil, - 724, 720, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, 720, nil, nil, 85, nil, 92, 106, 107, nil, - 724, 46, 47, 335, 81, 82, 83, 11, 65, nil, - nil, nil, 71, 72, nil, nil, nil, 75, nil, 73, - 74, 76, 35, 36, 79, 80, nil, nil, nil, nil, - nil, 84, 33, 32, 115, 114, 116, 117, nil, nil, - 23, nil, nil, nil, nil, nil, 10, 53, 337, 12, - 119, 118, 120, 111, 64, 109, 108, 112, nil, 110, - 121, 122, nil, 104, 105, 49, 50, 48, 265, 269, - 270, 271, 272, 282, 283, 277, 278, 273, 274, nil, - -742, -742, nil, nil, 275, 276, nil, 45, nil, nil, - 38, nil, nil, 66, 67, nil, 265, 68, nil, 40, - 262, nil, 268, 52, 264, 263, nil, 260, 261, 281, - 280, 266, 24, 267, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, 262, nil, - 91, 101, 264, 263, nil, 260, 261, nil, 85, nil, - 92, 106, 107, nil, nil, 46, 47, 335, 81, 82, - 83, 11, 65, nil, nil, nil, 71, 72, nil, nil, - nil, 75, nil, 73, 74, 76, 35, 36, 79, 80, - nil, nil, nil, nil, nil, 84, 33, 32, 115, 114, - 116, 117, nil, nil, 23, nil, nil, nil, nil, nil, - 10, 53, 337, 12, 119, 118, 120, 111, 64, 109, - 108, 112, nil, 110, 121, 122, nil, 104, 105, 49, - 50, 48, 265, 269, 270, 271, 272, 282, 283, 277, - 278, 273, 274, nil, -742, -742, nil, nil, 275, 276, - nil, 45, nil, nil, 38, nil, nil, 66, 67, nil, - 265, 68, nil, 40, 262, nil, 268, 52, 264, 263, - nil, 260, 261, 281, 280, 266, 24, 267, nil, nil, - nil, 102, 90, 93, 94, nil, 95, 97, 96, 98, - nil, nil, 262, nil, 91, 101, 264, 263, nil, 260, - 261, nil, 85, nil, 92, 106, 107, nil, nil, 46, - 47, 335, 81, 82, 83, 11, 65, nil, nil, nil, - 71, 72, nil, nil, nil, 75, nil, 73, 74, 76, - 35, 36, 79, 80, nil, nil, nil, nil, nil, 84, - 33, 32, 115, 114, 116, 117, nil, nil, 23, nil, - nil, nil, nil, nil, 10, 53, 337, 12, 119, 118, - 120, 111, 64, 109, 108, 112, nil, 110, 121, 122, - nil, 104, 105, 49, 50, 48, 265, 269, 270, 271, - 272, 282, 283, 277, 278, 273, 274, nil, -742, -742, - nil, nil, 275, 276, nil, 45, nil, nil, 38, nil, - nil, 66, 67, nil, nil, 68, nil, 40, 262, nil, - 268, 52, 264, 263, nil, 260, 261, 281, 280, 266, - 24, 267, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, 494, nil, 491, 490, 489, 85, 492, 92, 106, - 107, nil, nil, 46, 47, 335, 81, 82, 83, 11, - 65, nil, nil, nil, 71, 72, nil, nil, nil, 75, - nil, 73, 74, 76, 35, 36, 79, 80, 720, nil, - nil, nil, nil, 84, 33, 32, 115, 114, 116, 117, - nil, nil, 23, nil, nil, nil, nil, nil, 10, 53, - 337, 12, 119, 118, 120, 111, 64, 109, 108, 112, - nil, 110, 121, 122, nil, 104, 105, 49, 50, 48, - 265, 269, 270, 271, 272, 282, 283, 277, 278, 273, - 274, nil, -742, -742, nil, nil, 275, 276, nil, 45, - nil, nil, 38, nil, nil, 66, 67, nil, nil, 68, - nil, 40, 262, nil, 268, 52, 264, 263, nil, 260, - 261, 281, 280, 266, 24, 267, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, 494, nil, 491, 490, 489, - 85, 492, 92, 106, 107, nil, nil, 46, 47, 335, - 81, 82, 83, 11, 65, nil, nil, nil, 71, 72, - nil, nil, nil, 75, nil, 73, 74, 76, 35, 36, - 79, 80, 720, nil, nil, nil, nil, 84, 33, 32, - 115, 114, 116, 117, nil, nil, 23, nil, nil, nil, - nil, nil, 10, 53, 337, 12, 119, 118, 120, 111, - 64, 109, 108, 112, nil, 110, 121, 122, nil, 104, - 105, 49, 50, 48, 265, -742, -742, -742, -742, 282, - 283, nil, nil, -742, -742, nil, nil, nil, nil, nil, - 275, 276, nil, 45, nil, nil, 38, nil, nil, 66, - 67, nil, nil, 68, nil, 40, 262, nil, 268, 52, - 264, 263, nil, 260, 261, 281, 280, 266, 24, 267, - nil, nil, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, nil, nil, nil, 85, nil, 92, 106, 107, nil, - nil, 46, 47, 335, 81, 82, 83, 11, 65, nil, - nil, nil, 71, 72, nil, nil, nil, 75, nil, 73, - 74, 76, 35, 36, 79, 80, nil, nil, nil, nil, - nil, 84, 33, 32, 115, 114, 116, 117, nil, nil, - 23, nil, nil, nil, nil, nil, 10, 53, 337, 12, - 119, 118, 120, 111, 64, 109, 108, 112, nil, 110, - 121, 122, nil, 104, 105, 49, 50, 48, 265, -742, - -742, -742, -742, 282, 283, nil, nil, -742, -742, nil, - nil, nil, nil, nil, 275, 276, nil, 45, nil, nil, - 38, nil, nil, 66, 67, nil, nil, 68, nil, 40, - 262, nil, 268, 52, 264, 263, nil, 260, 261, 281, - 280, 266, 24, 267, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, nil, nil, nil, 85, nil, - 92, 106, 107, nil, nil, 46, 47, 335, 81, 82, - 83, 11, 65, nil, nil, nil, 71, 72, nil, nil, - nil, 75, nil, 73, 74, 76, 35, 36, 79, 80, - nil, nil, nil, nil, nil, 84, 33, 32, 115, 114, - 116, 117, nil, nil, 23, nil, nil, nil, nil, nil, - 10, 53, 337, 12, 119, 118, 120, 111, 64, 109, - 108, 112, nil, 110, 121, 122, nil, 104, 105, 49, - 50, 48, 265, -742, -742, -742, -742, 282, 283, nil, - nil, -742, -742, nil, nil, nil, nil, nil, 275, 276, - nil, 45, nil, nil, 38, nil, nil, 66, 67, nil, - nil, 68, nil, 40, 262, nil, 268, 52, 264, 263, - nil, 260, 261, 281, 280, 266, 24, 267, nil, nil, - nil, 102, 90, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, nil, - nil, nil, 85, nil, 92, 106, 107, nil, nil, 46, - 47, 335, 81, 82, 83, 11, 65, nil, nil, nil, - 71, 72, nil, nil, nil, 75, nil, 73, 74, 76, - 35, 36, 79, 80, nil, nil, nil, nil, nil, 84, - 33, 32, 115, 114, 116, 117, nil, nil, 23, nil, - nil, nil, nil, nil, 10, 53, 337, 12, 119, 118, - 120, 111, 64, 109, 108, 112, nil, 110, 121, 122, - nil, 104, 105, 49, 50, 48, 265, -742, -742, -742, - -742, 282, 283, nil, nil, -742, -742, nil, nil, nil, - nil, nil, 275, 276, nil, 45, nil, nil, 38, nil, - nil, 66, 67, nil, nil, 68, nil, 40, 262, nil, - 268, 52, 264, 263, nil, 260, 261, 281, 280, 266, - 24, 267, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, nil, nil, nil, 85, nil, 92, 106, - 107, nil, nil, 46, 47, 335, 81, 82, 83, 11, - 65, nil, nil, nil, 71, 72, nil, nil, nil, 75, - nil, 73, 74, 76, 35, 36, 79, 80, nil, nil, - nil, nil, nil, 84, 33, 32, 115, 114, 116, 117, - nil, nil, 23, nil, nil, nil, nil, nil, 10, 53, - 337, 12, 119, 118, 120, 111, 64, 109, 108, 112, - nil, 110, 121, 122, nil, 104, 105, 49, 50, 48, - 265, -742, -742, -742, -742, 282, 283, nil, nil, -742, - -742, nil, nil, nil, nil, nil, 275, 276, nil, 45, - nil, nil, 38, nil, nil, 66, 67, nil, nil, 68, - nil, 40, 262, nil, 268, 52, 264, 263, nil, 260, - 261, 281, 280, 266, 24, 267, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, nil, nil, nil, - 85, nil, 92, 106, 107, nil, nil, 46, 47, 335, - 81, 82, 83, 11, 65, nil, nil, nil, 71, 72, - nil, nil, nil, 75, nil, 73, 74, 76, 35, 36, - 79, 80, nil, nil, nil, nil, nil, 84, 33, 32, - 115, 114, 116, 117, nil, nil, 23, nil, nil, nil, - nil, nil, 10, 53, 337, 12, 119, 118, 120, 111, - 64, 109, 108, 112, nil, 110, 121, 122, nil, 104, - 105, 49, 50, 48, 265, -742, -742, -742, -742, 282, - 283, nil, nil, -742, -742, nil, nil, nil, nil, nil, - 275, 276, nil, 45, nil, nil, 38, nil, nil, 66, - 67, nil, nil, 68, nil, 40, 262, nil, 268, 52, - 264, 263, nil, 260, 261, 281, 280, 266, 24, 267, - nil, nil, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, nil, nil, nil, 85, nil, 92, 106, 107, nil, - nil, 46, 47, 335, 81, 82, 83, 11, 65, nil, - nil, nil, 71, 72, nil, nil, nil, 75, nil, 73, - 74, 76, 35, 36, 79, 80, nil, nil, nil, nil, - nil, 84, 33, 32, 115, 114, 116, 117, nil, nil, - 23, nil, nil, nil, nil, nil, 10, 53, 337, 12, - 119, 118, 120, 111, 64, 109, 108, 112, nil, 110, - 121, 122, nil, 104, 105, 49, 50, 48, 265, 269, - 270, 271, 272, 282, 283, nil, nil, 273, 274, nil, - nil, nil, nil, nil, 275, 276, nil, 45, nil, nil, - 38, nil, nil, 66, 67, nil, nil, 68, nil, 40, - 262, nil, 268, 52, 264, 263, nil, 260, 261, 281, - 280, 266, 24, 267, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, nil, nil, nil, 85, nil, - 92, 106, 107, nil, nil, 46, 47, 335, 81, 82, - 83, 11, 65, nil, nil, nil, 71, 72, nil, nil, - nil, 75, nil, 73, 74, 76, 35, 36, 79, 80, - nil, nil, nil, nil, nil, 84, 33, 32, 115, 114, - 116, 117, nil, nil, 23, nil, nil, nil, nil, nil, - 10, 53, 337, 12, 119, 118, 120, 111, 64, 109, - 108, 112, nil, 110, 121, 122, nil, 104, 105, 49, - 50, 48, 265, 269, 270, 271, 272, 282, 283, 277, - nil, 273, 274, nil, nil, nil, nil, nil, 275, 276, - nil, 45, nil, nil, 38, nil, nil, 66, 67, nil, - nil, 68, nil, 40, 262, nil, 268, 52, 264, 263, - nil, 260, 261, 281, 280, 266, 24, 267, nil, nil, - nil, 102, 90, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, nil, - nil, nil, 85, nil, 92, 106, 107, nil, nil, 46, - 47, 335, 81, 82, 83, 11, 65, nil, nil, nil, - 71, 72, nil, nil, nil, 75, nil, 73, 74, 76, - 35, 36, 79, 80, nil, nil, nil, nil, nil, 84, - 33, 32, 115, 114, 116, 117, nil, nil, 23, nil, - nil, nil, nil, nil, 10, 53, 337, 12, 119, 118, - 120, 111, 64, 109, 108, 112, nil, 110, 121, 122, - nil, 104, 105, 49, 50, 48, 265, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 275, 276, nil, 45, nil, nil, 38, nil, - nil, 66, 67, nil, nil, 68, nil, 40, 262, nil, - 268, 52, 264, 263, nil, 260, 261, nil, nil, 266, - 24, 267, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, nil, nil, nil, 85, nil, 92, 106, - 107, nil, nil, 46, 47, 335, 81, 82, 83, 11, - 65, nil, nil, nil, 71, 72, nil, nil, nil, 75, - nil, 73, 74, 76, 35, 36, 79, 80, nil, nil, - nil, nil, nil, 84, 33, 32, 115, 114, 116, 117, - nil, nil, 23, nil, nil, nil, nil, nil, 10, 53, - 337, 12, 119, 118, 120, 111, 64, 109, 108, 112, - nil, 110, 121, 122, nil, 104, 105, 49, 50, 48, - 265, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 275, 276, nil, 45, - nil, nil, 38, nil, nil, 66, 67, nil, nil, 68, - nil, 40, 262, nil, 268, 52, 264, 263, nil, 260, - 261, nil, nil, 266, 24, 267, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, nil, nil, nil, - 85, nil, 92, 106, 107, nil, nil, 46, 47, 335, - 81, 82, 83, 11, 65, nil, nil, nil, 71, 72, - nil, nil, nil, 75, nil, 73, 74, 76, 35, 36, - 79, 80, nil, nil, nil, nil, nil, 84, 33, 32, - 115, 114, 116, 117, nil, nil, 23, nil, nil, nil, - nil, nil, 10, 53, 337, 12, 119, 118, 120, 111, - 64, 109, 108, 112, nil, 110, 121, 122, nil, 104, - 105, 49, 50, 48, 265, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 275, 276, nil, 45, nil, nil, 38, nil, nil, 66, - 67, nil, nil, 68, nil, 40, 262, nil, 268, 52, - 264, 263, nil, 260, 261, nil, nil, nil, 24, nil, - nil, nil, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, nil, nil, nil, 85, nil, 92, 106, 107, nil, - nil, 46, 47, 335, 81, 82, 83, 11, 65, nil, - nil, nil, 71, 72, nil, nil, nil, 75, nil, 73, - 74, 76, 35, 36, 79, 80, nil, nil, nil, nil, - nil, 84, 33, 32, 115, 114, 116, 117, nil, nil, - 23, nil, nil, nil, nil, nil, 10, 53, 337, 12, - 119, 118, 120, 111, 64, 109, 108, 112, nil, 110, - 121, 122, nil, 104, 105, 49, 50, 48, 265, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 275, 276, nil, 45, nil, nil, - 38, nil, nil, 66, 67, nil, nil, 68, nil, 40, - 262, nil, 268, 52, 264, 263, nil, 260, 261, nil, - nil, nil, 24, nil, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, nil, nil, nil, 85, nil, - 92, 106, 107, nil, nil, 46, 47, 335, 81, 82, - 83, 11, 65, nil, nil, nil, 71, 72, nil, nil, - nil, 75, nil, 73, 74, 76, 35, 36, 79, 80, - nil, nil, nil, nil, nil, 84, 33, 32, 115, 114, - 116, 117, nil, nil, 23, nil, nil, nil, nil, nil, - 10, 53, 337, 12, 119, 118, 120, 111, 64, 109, - 108, 112, nil, 110, 121, 122, nil, 104, 105, 49, - 50, 48, 265, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 275, 276, - nil, 45, nil, nil, 38, nil, nil, 66, 67, nil, - nil, 68, nil, 40, 262, nil, nil, 52, 264, 263, - nil, 260, 261, nil, nil, nil, 24, nil, nil, nil, - nil, 102, 90, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, nil, - nil, nil, 85, nil, 92, 106, 107, nil, nil, 46, - 47, 335, 81, 82, 83, 11, 65, nil, nil, nil, - 71, 72, nil, nil, nil, 75, nil, 73, 74, 76, - 35, 36, 79, 80, nil, nil, nil, nil, nil, 84, - 33, 32, 115, 114, 116, 117, nil, nil, 23, nil, - nil, nil, nil, nil, 10, 53, 337, 12, 119, 118, - 120, 111, 64, 109, 108, 112, nil, 110, 121, 122, - nil, 104, 105, 49, 50, 48, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 45, nil, nil, 38, nil, - nil, 66, 67, nil, nil, 68, nil, 40, nil, nil, - nil, 52, nil, nil, nil, nil, nil, nil, nil, nil, - 24, nil, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, nil, nil, nil, 85, nil, 92, 106, - 107, nil, nil, 46, 47, 81, 82, 83, 11, 65, - nil, nil, nil, 71, 72, nil, nil, nil, 75, nil, - 73, 74, 76, 35, 36, 79, 80, nil, nil, nil, - nil, nil, 84, 33, 32, 115, 114, 116, 117, nil, - nil, 23, nil, nil, nil, nil, nil, 10, 53, 9, - 12, 119, 118, 120, 111, 64, 109, 108, 112, nil, - 110, 121, 122, nil, 104, 105, 49, 50, 48, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 45, nil, - nil, 38, nil, nil, 66, 67, nil, nil, 68, nil, - 40, nil, nil, nil, 52, nil, nil, nil, nil, nil, - nil, nil, nil, 24, nil, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, 81, 82, 83, 85, - 65, 92, 106, 107, 71, 72, 46, 47, nil, 75, - nil, 73, 74, 76, 35, 36, 79, 80, nil, nil, - nil, nil, nil, 84, 33, 32, 115, 114, 116, 117, - nil, nil, 255, nil, nil, nil, nil, nil, nil, 53, - nil, nil, 119, 118, 120, 111, 64, 109, 108, 112, - nil, 110, 121, 122, nil, 104, 105, 49, 50, 48, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 246, - nil, nil, 254, nil, nil, 66, 67, nil, nil, 68, - nil, nil, nil, nil, nil, 52, nil, nil, nil, nil, - nil, nil, nil, nil, 251, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, nil, nil, nil, - 85, nil, 92, 106, 107, -441, nil, 46, 47, nil, - nil, nil, -441, -441, -441, nil, nil, -441, -441, -441, - nil, -441, nil, nil, nil, nil, nil, nil, nil, -441, - -441, -441, -441, nil, nil, nil, nil, nil, nil, nil, - nil, -441, -441, nil, -441, -441, -441, -441, -441, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, -441, -441, -441, -441, -441, -441, -441, -441, -441, - -441, -441, -441, -441, -441, nil, nil, -441, -441, -441, - nil, nil, -441, nil, 307, -441, nil, nil, -441, -441, - nil, -441, nil, -441, nil, -441, nil, -441, -441, nil, - -441, -441, -441, -441, -441, -328, -441, -441, -441, nil, - nil, nil, -328, -328, -328, nil, nil, -328, -328, -328, - nil, -328, -441, nil, nil, -441, -441, nil, -441, -328, - -441, -328, -328, nil, nil, nil, nil, -441, nil, nil, - nil, -328, -328, nil, -328, -328, -328, -328, -328, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, -328, -328, -328, -328, -328, -328, -328, -328, -328, - -328, -328, -328, -328, -328, nil, nil, -328, -328, -328, - nil, nil, -328, nil, 316, -328, nil, nil, -328, -328, - nil, -328, nil, -328, nil, -328, nil, -328, -328, nil, - -328, -328, -328, -328, -328, nil, -328, nil, -328, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, -328, nil, nil, -328, -328, nil, -328, nil, - -328, 81, 82, 83, nil, 65, nil, -328, nil, 71, - 72, nil, nil, nil, 75, nil, 73, 74, 76, 35, - 36, 79, 80, nil, nil, nil, nil, nil, 84, 33, - 32, 115, 114, 116, 117, nil, nil, 255, nil, nil, - nil, nil, nil, nil, 53, nil, nil, 119, 118, 120, - 111, 64, 109, 108, 112, 329, 110, 121, 122, nil, - 104, 105, 49, 50, 48, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 246, nil, nil, 254, nil, nil, - 66, 67, nil, nil, 68, nil, 326, nil, 323, nil, - 52, nil, nil, 330, nil, nil, nil, nil, nil, 251, - nil, nil, nil, nil, 102, 327, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - nil, nil, 81, 82, 83, 85, 65, 92, 106, 107, - 71, 72, 46, 47, nil, 75, nil, 73, 74, 76, - 35, 36, 79, 80, nil, nil, nil, nil, nil, 84, - 33, 32, 115, 114, 116, 117, nil, nil, 255, nil, - nil, nil, nil, nil, nil, 53, nil, nil, 119, 118, - 120, 111, 64, 109, 108, 112, 329, 110, 121, 122, - nil, 104, 105, 49, 50, 48, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 246, nil, nil, 254, nil, - nil, 66, 67, nil, nil, 68, nil, 326, nil, 323, - nil, 52, nil, nil, 330, nil, nil, nil, nil, nil, - 251, nil, nil, nil, nil, 102, 327, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, 81, 82, 83, 85, 65, 92, 106, - 107, 71, 72, 46, 47, nil, 75, nil, 73, 74, - 76, 35, 36, 79, 80, nil, nil, nil, nil, nil, - 84, 33, 32, 115, 114, 116, 117, nil, nil, 255, - nil, nil, nil, nil, nil, nil, 53, nil, nil, 119, - 118, 120, 111, 64, 109, 108, 112, 329, 110, 121, - 122, nil, 104, 105, 49, 50, 48, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 246, nil, nil, 254, - nil, nil, 66, 67, nil, nil, 68, nil, 326, nil, - 323, nil, 52, nil, nil, 330, nil, nil, nil, nil, - nil, 251, nil, nil, nil, nil, 102, 327, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 81, 82, 83, 85, 65, 92, - 106, 107, 71, 72, 46, 47, nil, 75, nil, 73, - 74, 76, 356, 357, 79, 80, nil, nil, nil, nil, - nil, 84, 351, 359, 115, 114, 116, 117, nil, nil, - 255, nil, nil, nil, nil, nil, nil, 53, nil, nil, - 119, 118, 120, 111, 64, 109, 108, 112, nil, 110, - 121, 122, nil, 104, 105, 49, 50, 48, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 246, nil, nil, - 254, nil, nil, 66, 67, nil, nil, 68, nil, nil, - nil, nil, nil, 52, nil, nil, nil, nil, nil, nil, - nil, nil, 251, nil, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 81, 82, 83, 85, 65, - 92, 106, 107, 71, 72, 46, 47, nil, 75, nil, - 73, 74, 76, 356, 357, 79, 80, nil, nil, nil, - nil, nil, 84, 351, 359, 115, 114, 116, 117, nil, - nil, 255, nil, nil, nil, nil, nil, nil, 53, nil, - nil, 119, 118, 120, 111, 64, 109, 108, 112, nil, - 110, 121, 122, nil, 104, 105, 49, 50, 48, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 246, nil, - nil, 254, nil, nil, 66, 67, nil, nil, 68, nil, - nil, nil, nil, nil, 52, nil, nil, nil, nil, nil, - nil, nil, nil, 251, nil, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, 81, 82, 83, 85, - 65, 92, 106, 107, 71, 72, 46, 47, nil, 75, - nil, 73, 74, 76, 356, 357, 79, 80, nil, nil, - nil, nil, nil, 84, 351, 359, 115, 114, 116, 117, - nil, nil, 255, nil, nil, nil, nil, nil, nil, 53, - nil, nil, 119, 118, 120, 111, 64, 109, 108, 112, - nil, 110, 121, 122, nil, 104, 105, 49, 50, 48, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 246, - nil, nil, 254, nil, nil, 66, 67, nil, nil, 68, - nil, nil, nil, nil, nil, 52, nil, nil, nil, nil, - nil, nil, nil, nil, 251, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, 81, 82, 83, - 85, 65, 92, 106, 107, 71, 72, 46, 47, nil, - 75, nil, 73, 74, 76, 356, 357, 79, 80, nil, - nil, nil, nil, nil, 84, 351, 359, 115, 114, 116, - 117, nil, nil, 255, nil, nil, nil, nil, nil, nil, - 53, nil, nil, 119, 118, 120, 111, 64, 109, 108, - 112, nil, 110, 121, 122, nil, 104, 105, 49, 50, - 48, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 246, nil, nil, 254, nil, nil, 66, 67, nil, nil, - 68, nil, nil, nil, nil, nil, 52, nil, nil, nil, - nil, nil, nil, nil, nil, 251, nil, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, 81, 82, - 83, 85, 65, 92, 106, 107, 71, 72, 46, 47, - nil, 75, nil, 73, 74, 76, 356, 357, 79, 80, - nil, nil, nil, nil, nil, 84, 351, 359, 115, 114, - 116, 117, nil, nil, 255, nil, nil, nil, nil, nil, - nil, 53, nil, nil, 119, 118, 120, 111, 64, 109, - 108, 112, nil, 110, 121, 122, nil, 104, 105, 49, - 50, 48, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 246, nil, nil, 254, nil, nil, 66, 67, nil, - nil, 68, nil, nil, nil, nil, nil, 52, nil, nil, - nil, nil, nil, nil, nil, nil, 251, nil, nil, nil, - nil, 102, 90, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, nil, - nil, nil, 85, nil, 92, 106, 107, -315, nil, 46, - 47, nil, nil, nil, -315, -315, -315, nil, nil, -315, - -315, -315, nil, -315, nil, nil, nil, nil, nil, nil, - nil, -315, nil, -315, -315, -315, nil, nil, nil, nil, - nil, nil, nil, -315, -315, nil, -315, -315, -315, -315, - -315, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, -315, -315, -315, -315, -315, -315, -315, - -315, -315, -315, -315, -315, -315, -315, nil, nil, -315, - -315, -315, nil, nil, -315, nil, nil, -315, nil, nil, - -315, -315, nil, -315, nil, -315, nil, -315, nil, -315, - -315, nil, -315, -315, -315, -315, -315, nil, -315, nil, - -315, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, -315, nil, nil, -315, -315, -315, - -315, nil, -315, nil, -315, nil, 81, 82, 83, -315, - 65, nil, nil, nil, 71, 72, nil, nil, nil, 75, - nil, 73, 74, 76, 356, 357, 79, 80, nil, nil, - nil, nil, nil, 84, 351, 359, 115, 114, 116, 117, - nil, nil, 255, nil, nil, nil, nil, nil, nil, 53, - nil, nil, 119, 118, 120, 111, 64, 109, 108, 112, - 329, 110, 121, 122, nil, 104, 105, 49, 50, 48, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 246, - nil, nil, 254, nil, nil, 66, 67, nil, nil, 68, - nil, 326, nil, nil, nil, 52, nil, nil, 330, nil, - nil, nil, nil, nil, 251, nil, nil, nil, nil, 102, - 327, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, 81, 82, 83, - 85, 65, 92, 106, 107, 71, 72, 46, 47, nil, - 75, nil, 73, 74, 76, 356, 357, 79, 80, nil, - nil, nil, nil, nil, 84, 351, 359, 115, 114, 116, - 117, nil, nil, 255, nil, nil, nil, nil, nil, nil, - 53, nil, nil, 119, 118, 120, 111, 64, 109, 108, - 112, 329, 110, 121, 122, nil, 104, 105, 49, 50, - 48, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 246, nil, nil, 254, nil, nil, 66, 67, nil, nil, - 68, nil, nil, nil, nil, nil, 52, nil, nil, 330, - nil, nil, nil, nil, nil, 251, nil, nil, nil, nil, - 102, 327, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, 81, 82, - 83, 85, 65, 92, 106, 107, 71, 72, 46, 47, - nil, 75, nil, 73, 74, 76, 35, 36, 79, 80, - nil, nil, nil, nil, nil, 84, 33, 32, 115, 114, - 116, 117, nil, nil, 23, nil, nil, nil, nil, nil, - nil, 53, nil, nil, 119, 118, 120, 111, 64, 109, - 108, 112, nil, 110, 121, 122, nil, 104, 105, 49, - 50, 48, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 246, nil, nil, 254, nil, nil, 66, 67, nil, - nil, 68, nil, nil, nil, nil, nil, 52, nil, nil, - nil, nil, nil, nil, nil, nil, 24, nil, nil, nil, - nil, 102, 90, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, 81, - 82, 83, 85, 65, 92, 106, 107, 71, 72, 46, - 47, nil, 75, nil, 73, 74, 76, 35, 36, 79, - 80, nil, nil, nil, nil, nil, 84, 33, 32, 115, - 114, 116, 117, nil, nil, 23, nil, nil, nil, nil, - nil, nil, 53, nil, nil, 119, 118, 120, 111, 64, - 109, 108, 112, nil, 110, 121, 122, nil, 104, 105, - 49, 50, 48, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 246, nil, nil, 254, nil, nil, 66, 67, - nil, nil, 68, nil, nil, nil, nil, nil, 52, nil, - nil, nil, nil, nil, nil, nil, nil, 24, nil, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - 81, 82, 83, 85, 65, 92, 106, 107, 71, 72, - 46, 47, nil, 75, nil, 73, 74, 76, 35, 36, - 79, 80, nil, nil, nil, nil, nil, 84, 33, 32, - 115, 114, 116, 117, nil, nil, 23, nil, nil, nil, - nil, nil, nil, 53, nil, nil, 119, 118, 120, 111, - 64, 109, 108, 112, nil, 110, 121, 122, nil, 104, - 105, 49, 50, 48, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 246, nil, nil, 254, nil, nil, 66, - 67, nil, nil, 68, nil, nil, nil, nil, nil, 52, - nil, nil, nil, nil, nil, nil, nil, nil, 24, nil, - nil, nil, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, 127, nil, - nil, nil, nil, 126, 85, nil, 92, 106, 107, nil, - nil, 46, 47, 81, 82, 83, 11, 65, nil, nil, - nil, 71, 72, nil, nil, nil, 75, nil, 73, 74, - 76, 35, 36, 79, 80, nil, nil, nil, nil, nil, - 84, 33, 32, 115, 114, 116, 117, nil, nil, 23, - nil, nil, nil, nil, nil, 10, 53, 9, 12, 119, - 118, 120, 111, 64, 109, 108, 112, nil, 110, 121, - 122, nil, 104, 105, 49, 50, 48, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 45, nil, nil, 38, - nil, nil, 66, 67, nil, nil, 68, nil, 40, nil, - nil, nil, 52, nil, nil, nil, nil, nil, nil, nil, - nil, 24, nil, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, nil, nil, 421, 85, nil, 92, - 106, 107, nil, nil, 46, 47, 81, 82, 83, nil, - 65, nil, nil, nil, 71, 72, nil, nil, nil, 75, - nil, 73, 74, 76, 35, 36, 79, 80, nil, nil, - nil, nil, nil, 84, 33, 32, 115, 114, 116, 117, - nil, nil, 23, nil, nil, nil, nil, nil, nil, 53, - nil, nil, 119, 118, 120, 111, 64, 109, 108, 112, - nil, 110, 121, 122, nil, 104, 105, 49, 50, 48, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 246, - nil, nil, 254, nil, nil, 66, 67, nil, nil, 68, - nil, nil, nil, nil, nil, 52, nil, nil, nil, nil, - nil, nil, nil, nil, 24, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, 81, 82, 83, - 85, 65, 92, 106, 107, 71, 72, 46, 47, nil, - 75, nil, 73, 74, 76, 35, 36, 79, 80, nil, - nil, nil, nil, nil, 84, 33, 32, 115, 114, 116, - 117, nil, nil, 23, nil, nil, nil, nil, nil, nil, - 53, nil, nil, 119, 118, 120, 111, 64, 109, 108, - 112, nil, 110, 121, 122, nil, 104, 105, 49, 50, - 48, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 246, nil, nil, 254, nil, nil, 66, 67, nil, nil, - 68, nil, nil, nil, nil, nil, 52, nil, nil, nil, - nil, nil, nil, nil, nil, 24, nil, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, 81, 82, - 83, 85, 65, 92, 106, 107, 71, 72, 46, 47, - nil, 75, nil, 73, 74, 76, 35, 36, 79, 80, - nil, nil, nil, nil, nil, 84, 33, 32, 115, 114, - 116, 117, nil, nil, 23, nil, nil, nil, nil, nil, - nil, 53, nil, nil, 119, 118, 120, 111, 64, 109, - 108, 112, nil, 110, 121, 122, nil, 104, 105, 49, - 50, 48, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 246, nil, nil, 254, nil, nil, 66, 67, nil, - nil, 68, nil, nil, nil, nil, nil, 52, nil, nil, - nil, nil, nil, nil, nil, nil, 24, nil, nil, nil, - nil, 102, 90, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, 81, - 82, 83, 85, 65, 92, 106, 107, 71, 72, 46, - 47, nil, 75, nil, 73, 74, 76, 35, 36, 79, - 80, nil, nil, nil, nil, nil, 84, 33, 32, 115, - 114, 116, 117, nil, nil, 23, nil, nil, nil, nil, - nil, nil, 53, nil, nil, 119, 118, 120, 111, 64, - 109, 108, 112, nil, 110, 121, 122, nil, 104, 105, - 49, 50, 48, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 246, nil, nil, 254, nil, nil, 66, 67, - nil, nil, 68, nil, nil, nil, nil, nil, 52, nil, - nil, nil, nil, nil, nil, nil, nil, 24, nil, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - nil, nil, nil, 85, nil, 92, 106, 107, nil, nil, - 46, 47, 81, 82, 83, 11, 65, nil, nil, nil, - 71, 72, nil, nil, nil, 75, nil, 73, 74, 76, - 35, 36, 79, 80, nil, nil, nil, nil, nil, 84, - 33, 32, 115, 114, 116, 117, nil, nil, 23, nil, - nil, nil, nil, nil, 10, 53, nil, 12, 119, 118, - 120, 111, 64, 109, 108, 112, nil, 110, 121, 122, - nil, 104, 105, 49, 50, 48, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 45, nil, nil, 38, nil, - nil, 66, 67, nil, nil, 68, nil, 40, nil, nil, - nil, 52, nil, nil, nil, nil, nil, nil, nil, nil, - 24, nil, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, 81, 82, 83, 85, 65, 92, 106, - 107, 71, 72, 46, 47, nil, 75, nil, 73, 74, - 76, 35, 36, 79, 80, nil, nil, nil, nil, nil, - 84, 33, 32, 115, 114, 116, 117, nil, nil, 255, - nil, nil, nil, nil, nil, nil, 53, nil, nil, 119, - 118, 120, 111, 64, 109, 108, 112, nil, 110, 121, - 122, nil, 104, 105, 49, 50, 48, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 246, nil, nil, 254, - nil, nil, 66, 67, nil, nil, 68, nil, 438, nil, - nil, nil, 52, nil, nil, nil, nil, nil, nil, nil, - nil, 251, nil, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 81, 82, 83, 85, 65, 92, - 106, 107, 71, 72, 46, 47, nil, 75, nil, 73, - 74, 76, 35, 36, 79, 80, nil, nil, nil, nil, - nil, 84, 33, 32, 115, 114, 116, 117, nil, nil, - 255, nil, nil, nil, nil, nil, nil, 53, nil, nil, - 119, 118, 120, 111, 64, 109, 108, 112, nil, 110, - 121, 122, nil, 104, 105, 49, 50, 48, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 246, nil, nil, - 254, nil, nil, 66, 67, nil, nil, 68, nil, 438, - nil, nil, nil, 52, nil, nil, nil, nil, nil, nil, - nil, nil, 251, nil, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 81, 82, 83, 85, 65, - 92, 106, 107, 71, 72, 46, 47, nil, 75, nil, - 73, 74, 76, 35, 36, 79, 80, nil, nil, nil, - nil, nil, 84, 33, 32, 115, 114, 116, 117, nil, - nil, 23, nil, nil, nil, nil, nil, nil, 53, nil, - nil, 119, 118, 120, 111, 64, 109, 108, 112, nil, - 110, 121, 122, nil, 104, 105, 49, 50, 48, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 246, nil, - nil, 254, nil, nil, 66, 67, nil, nil, 68, nil, - nil, nil, nil, nil, 52, nil, nil, nil, nil, nil, - nil, nil, nil, 24, nil, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, 81, 82, 83, 85, - 65, 92, 106, 107, 71, 72, 46, 47, nil, 75, - nil, 73, 74, 76, 35, 36, 79, 80, nil, nil, - nil, nil, nil, 84, 33, 32, 115, 114, 116, 117, - nil, nil, 23, nil, nil, nil, nil, nil, nil, 53, - nil, nil, 119, 118, 120, 111, 64, 109, 108, 112, - nil, 110, 121, 122, nil, 104, 105, 49, 50, 48, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 246, - nil, nil, 254, nil, nil, 66, 67, nil, nil, 68, - nil, nil, nil, nil, nil, 52, nil, nil, nil, nil, - nil, nil, nil, nil, 24, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, 81, 82, 83, - 85, 65, 92, 106, 107, 71, 72, 46, 47, nil, - 75, nil, 73, 74, 76, 35, 36, 79, 80, nil, - nil, nil, nil, nil, 84, 33, 32, 115, 114, 116, - 117, nil, nil, 255, nil, nil, nil, nil, nil, nil, - 53, nil, nil, 119, 118, 120, 111, 64, 109, 108, - 112, nil, 110, 121, 122, nil, 104, 105, 49, 50, - 48, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 246, nil, nil, 254, nil, nil, 66, 67, nil, nil, - 68, nil, nil, nil, nil, nil, 52, nil, nil, nil, - nil, nil, nil, nil, nil, 251, nil, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, 81, 82, - 83, 85, 65, 92, 106, 107, 71, 72, 46, 47, - nil, 75, nil, 73, 74, 76, 35, 36, 79, 80, - nil, nil, nil, nil, nil, 84, 33, 32, 115, 114, - 116, 117, nil, nil, 255, nil, nil, nil, nil, nil, - nil, 53, nil, nil, 119, 118, 120, 111, 64, 109, - 108, 112, 329, 110, 121, 122, nil, 104, 105, 49, - 50, 48, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 246, nil, nil, 254, nil, nil, 66, 67, nil, - nil, 68, nil, 326, nil, 323, nil, 52, nil, nil, - 330, nil, nil, nil, nil, nil, 251, nil, nil, nil, - nil, 102, 327, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, 81, - 82, 83, 85, 65, 92, 106, 107, 71, 72, 46, - 47, nil, 75, nil, 73, 74, 76, 35, 36, 79, - 80, nil, nil, nil, nil, nil, 84, 33, 32, 115, - 114, 116, 117, nil, nil, 255, nil, nil, nil, nil, - nil, nil, 53, nil, nil, 119, 118, 120, 111, 64, - 109, 108, 112, nil, 110, 121, 122, nil, 104, 105, - 49, 50, 48, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 246, nil, nil, 254, nil, nil, 66, 67, - nil, nil, 68, nil, nil, nil, nil, nil, 52, nil, - nil, nil, nil, nil, nil, nil, nil, 251, nil, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - 81, 82, 83, 85, 65, 92, 106, 107, 71, 72, - 46, 47, nil, 75, nil, 73, 74, 76, 35, 36, - 79, 80, nil, nil, nil, nil, nil, 84, 33, 32, - 115, 114, 116, 117, nil, nil, 23, nil, nil, nil, - nil, nil, nil, 53, nil, nil, 119, 118, 120, 111, - 64, 109, 108, 112, nil, 110, 121, 122, nil, 104, - 105, 49, 50, 48, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 246, nil, nil, 254, nil, nil, 66, - 67, nil, nil, 68, nil, nil, nil, nil, nil, 52, - nil, nil, nil, nil, nil, nil, nil, nil, 24, nil, - nil, nil, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, 81, 82, 83, 85, 65, 92, 106, 107, 71, - 72, 46, 47, nil, 75, nil, 73, 74, 76, 35, - 36, 79, 80, nil, nil, nil, nil, nil, 84, 33, - 32, 115, 114, 116, 117, nil, nil, 23, nil, nil, - nil, nil, nil, nil, 53, nil, nil, 119, 118, 120, - 111, 64, 109, 108, 112, nil, 110, 121, 122, nil, - 104, 105, 49, 50, 48, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 246, nil, nil, 254, nil, nil, - 66, 67, nil, nil, 68, nil, nil, nil, nil, nil, - 52, nil, nil, nil, nil, nil, nil, nil, nil, 24, - nil, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, 241, - nil, nil, 81, 82, 83, 85, 65, 92, 106, 107, - 71, 72, 46, 47, nil, 75, nil, 73, 74, 76, - 356, 357, 79, 80, nil, nil, nil, nil, nil, 84, - 351, 359, 115, 114, 116, 117, nil, nil, 255, nil, - nil, nil, nil, nil, nil, 53, nil, nil, 119, 118, - 120, 111, 64, 109, 108, 112, nil, 110, 121, 122, - nil, 104, 105, 49, 50, 48, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 246, nil, nil, 254, nil, - nil, 66, 67, nil, nil, 68, nil, nil, nil, nil, - nil, 52, nil, nil, nil, nil, nil, nil, nil, nil, - 251, nil, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, 81, 82, 83, 85, 65, 92, 106, - 107, 71, 72, 46, 47, nil, 75, nil, 73, 74, - 76, 356, 357, 79, 80, nil, nil, nil, nil, nil, - 84, 351, 359, 115, 114, 116, 117, nil, nil, 255, - nil, nil, nil, nil, nil, nil, 53, nil, nil, 119, - 118, 120, 111, 64, 109, 108, 112, nil, 110, 121, - 122, nil, 104, 105, 49, 50, 48, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 246, nil, nil, 254, - nil, nil, 66, 67, nil, nil, 68, nil, nil, nil, - nil, nil, 52, nil, nil, nil, nil, nil, nil, nil, - nil, 251, nil, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 81, 82, 83, 85, 65, 92, - 106, 107, 71, 72, 46, 47, nil, 75, nil, 73, - 74, 76, 356, 357, 79, 80, nil, nil, nil, nil, - nil, 84, 351, 359, 115, 114, 116, 117, nil, nil, - 255, nil, nil, nil, nil, nil, nil, 53, nil, nil, - 119, 118, 120, 111, 64, 109, 108, 112, nil, 110, - 121, 122, nil, 104, 105, 49, 50, 48, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 246, nil, nil, - 254, nil, nil, 66, 67, nil, nil, 68, nil, nil, - nil, nil, nil, 52, nil, nil, nil, nil, nil, nil, - nil, nil, 251, nil, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 81, 82, 83, 85, 65, - 92, 106, 107, 71, 72, 46, 47, nil, 75, nil, - 73, 74, 76, 356, 357, 79, 80, nil, nil, nil, - nil, nil, 84, 351, 359, 115, 114, 116, 117, nil, - nil, 255, nil, nil, nil, nil, nil, nil, 53, nil, - nil, 119, 118, 120, 111, 64, 109, 108, 112, nil, - 110, 121, 122, nil, 104, 105, 49, 50, 48, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 246, nil, - nil, 254, nil, nil, 66, 67, nil, nil, 68, nil, - nil, nil, nil, nil, 52, nil, nil, nil, nil, nil, - nil, nil, nil, 251, nil, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, 81, 82, 83, 85, - 65, 92, 106, 107, 71, 72, 46, 47, nil, 75, - nil, 73, 74, 76, 356, 357, 79, 80, nil, nil, - nil, nil, nil, 84, 351, 359, 115, 114, 116, 117, - nil, nil, 255, nil, nil, nil, nil, nil, nil, 53, - nil, nil, 119, 118, 120, 111, 64, 109, 108, 112, - nil, 110, 121, 122, nil, 104, 105, 49, 50, 48, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 246, - nil, nil, 254, nil, nil, 66, 67, nil, nil, 68, - nil, nil, nil, nil, nil, 52, nil, nil, nil, nil, - nil, nil, nil, nil, 251, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, 81, 82, 83, - 85, 65, 92, 106, 107, 71, 72, 46, 47, nil, - 75, nil, 73, 74, 76, 356, 357, 79, 80, nil, - nil, nil, nil, nil, 84, 351, 359, 115, 114, 116, - 117, nil, nil, 255, nil, nil, nil, nil, nil, nil, - 53, nil, nil, 119, 118, 120, 111, 64, 109, 108, - 112, nil, 110, 121, 122, nil, 104, 105, 49, 50, - 48, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 246, nil, nil, 254, nil, nil, 66, 67, nil, nil, - 68, nil, nil, nil, nil, nil, 52, nil, nil, nil, - nil, nil, nil, nil, nil, 251, nil, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, 81, 82, - 83, 85, 65, 92, 106, 107, 71, 72, 46, 47, - nil, 75, nil, 73, 74, 76, 356, 357, 79, 80, - nil, nil, nil, nil, nil, 84, 351, 359, 115, 114, - 116, 117, nil, nil, 255, nil, nil, nil, nil, nil, - nil, 53, nil, nil, 119, 118, 120, 111, 64, 109, - 108, 112, nil, 110, 121, 122, nil, 104, 105, 49, - 50, 48, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 246, nil, nil, 254, nil, nil, 66, 67, nil, - nil, 68, nil, nil, nil, nil, nil, 52, nil, nil, - nil, nil, nil, nil, nil, nil, 251, nil, nil, nil, - nil, 102, 90, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, 81, - 82, 83, 85, 65, 92, 106, 107, 71, 72, 46, - 47, nil, 75, nil, 73, 74, 76, 356, 357, 79, - 80, nil, nil, nil, nil, nil, 84, 351, 359, 115, - 114, 116, 117, nil, nil, 255, nil, nil, nil, nil, - nil, nil, 53, nil, nil, 119, 118, 120, 111, 64, - 109, 108, 112, nil, 110, 121, 122, nil, 104, 105, - 49, 50, 48, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 246, nil, nil, 254, nil, nil, 66, 67, - nil, nil, 68, nil, nil, nil, nil, nil, 52, nil, - nil, nil, nil, nil, nil, nil, nil, 251, nil, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - 81, 82, 83, 85, 65, 92, 106, 107, 71, 72, - 46, 47, nil, 75, nil, 73, 74, 76, 356, 357, - 79, 80, nil, nil, nil, nil, nil, 84, 351, 359, - 115, 114, 116, 117, nil, nil, 255, nil, nil, nil, - nil, nil, nil, 53, nil, nil, 119, 118, 120, 111, - 64, 109, 108, 112, nil, 110, 121, 122, nil, 104, - 105, 49, 50, 48, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 246, nil, nil, 254, nil, nil, 66, - 67, nil, nil, 68, nil, nil, nil, nil, nil, 52, - nil, nil, nil, nil, nil, nil, nil, nil, 251, nil, - nil, nil, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, 81, 82, 83, 85, 65, 92, 106, 107, 71, - 72, 46, 47, nil, 75, nil, 73, 74, 76, 356, - 357, 79, 80, nil, nil, nil, nil, nil, 84, 351, - 359, 115, 114, 116, 117, nil, nil, 255, nil, nil, - nil, nil, nil, nil, 53, nil, nil, 119, 118, 120, - 111, 64, 109, 108, 112, nil, 110, 121, 122, nil, - 104, 105, 49, 50, 48, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 246, nil, nil, 254, nil, nil, - 66, 67, nil, nil, 68, nil, nil, nil, nil, nil, - 52, nil, nil, nil, nil, nil, nil, nil, nil, 251, - nil, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - nil, nil, 81, 82, 83, 85, 65, 92, 106, 107, - 71, 72, 46, 47, nil, 75, nil, 73, 74, 76, - 356, 357, 79, 80, nil, nil, nil, nil, nil, 84, - 351, 359, 115, 114, 116, 117, nil, nil, 255, nil, - nil, nil, nil, nil, nil, 53, nil, nil, 119, 118, - 120, 111, 64, 109, 108, 112, nil, 110, 121, 122, - nil, 104, 105, 49, 50, 48, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 246, nil, nil, 254, nil, - nil, 66, 67, nil, nil, 68, nil, nil, nil, nil, - nil, 52, nil, nil, nil, nil, nil, nil, nil, nil, - 251, nil, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, 81, 82, 83, 85, 65, 92, 106, - 107, 71, 72, 46, 47, nil, 75, nil, 73, 74, - 76, 356, 357, 79, 80, nil, nil, nil, nil, nil, - 84, 351, 359, 115, 114, 116, 117, nil, nil, 255, - nil, nil, nil, nil, nil, nil, 53, nil, nil, 119, - 118, 120, 111, 64, 109, 108, 112, nil, 110, 121, - 122, nil, 104, 105, 49, 50, 48, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 246, nil, nil, 254, - nil, nil, 66, 67, nil, nil, 68, nil, nil, nil, - nil, nil, 52, nil, nil, nil, nil, nil, nil, nil, - nil, 251, nil, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 81, 82, 83, 85, 65, 92, - 106, 107, 71, 72, 46, 47, nil, 75, nil, 73, - 74, 76, 356, 357, 79, 80, nil, nil, nil, nil, - nil, 84, 351, 359, 115, 114, 116, 117, nil, nil, - 255, nil, nil, nil, nil, nil, nil, 53, nil, nil, - 119, 118, 120, 111, 64, 109, 108, 112, nil, 110, - 121, 122, nil, 104, 105, 49, 50, 48, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 246, nil, nil, - 254, nil, nil, 66, 67, nil, nil, 68, nil, nil, - nil, nil, nil, 52, nil, nil, nil, nil, nil, nil, - nil, nil, 251, nil, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 81, 82, 83, 85, 65, - 92, 106, 107, 71, 72, 46, 47, nil, 75, nil, - 73, 74, 76, 356, 357, 79, 80, nil, nil, nil, - nil, nil, 84, 351, 359, 115, 114, 116, 117, nil, - nil, 255, nil, nil, nil, nil, nil, nil, 53, nil, - nil, 119, 118, 120, 111, 64, 109, 108, 112, nil, - 110, 121, 122, nil, 104, 105, 49, 50, 48, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 246, nil, - nil, 254, nil, nil, 66, 67, nil, nil, 68, nil, - nil, nil, nil, nil, 52, nil, nil, nil, nil, nil, - nil, nil, nil, 251, nil, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, 81, 82, 83, 85, - 65, 92, 106, 107, 71, 72, 46, 47, nil, 75, - nil, 73, 74, 76, 356, 357, 79, 80, nil, nil, - nil, nil, nil, 84, 351, 359, 115, 114, 116, 117, - nil, nil, 255, nil, nil, nil, nil, nil, nil, 53, - nil, nil, 119, 118, 120, 111, 64, 109, 108, 112, - nil, 110, 121, 122, nil, 104, 105, 49, 50, 48, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 246, - nil, nil, 254, nil, nil, 66, 67, nil, nil, 68, - nil, nil, nil, nil, nil, 52, nil, nil, nil, nil, - nil, nil, nil, nil, 251, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, 81, 82, 83, - 85, 65, 92, 106, 107, 71, 72, 46, 47, nil, - 75, nil, 73, 74, 76, 356, 357, 79, 80, nil, - nil, nil, nil, nil, 84, 351, 359, 115, 114, 116, - 117, nil, nil, 255, nil, nil, nil, nil, nil, nil, - 53, nil, nil, 119, 118, 120, 111, 64, 109, 108, - 112, nil, 110, 121, 122, nil, 104, 105, 49, 50, - 48, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 246, nil, nil, 254, nil, nil, 66, 67, nil, nil, - 68, nil, nil, nil, nil, nil, 52, nil, nil, nil, - nil, nil, nil, nil, nil, 251, nil, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, 81, 82, - 83, 85, 65, 92, 106, 107, 71, 72, 46, 47, - nil, 75, nil, 73, 74, 76, 356, 357, 79, 80, - nil, nil, nil, nil, nil, 84, 351, 359, 115, 114, - 116, 117, nil, nil, 255, nil, nil, nil, nil, nil, - nil, 53, nil, nil, 119, 118, 120, 111, 64, 109, - 108, 112, nil, 110, 121, 122, nil, 104, 105, 49, - 50, 48, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 246, nil, nil, 254, nil, nil, 66, 67, nil, - nil, 68, nil, nil, nil, nil, nil, 52, nil, nil, - nil, nil, nil, nil, nil, nil, 251, nil, nil, nil, - nil, 102, 90, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, 81, - 82, 83, 85, 65, 92, 106, 107, 71, 72, 46, - 47, nil, 75, nil, 73, 74, 76, 356, 357, 79, - 80, nil, nil, nil, nil, nil, 84, 351, 359, 115, - 114, 116, 117, nil, nil, 255, nil, nil, nil, nil, - nil, nil, 53, nil, nil, 119, 118, 120, 111, 64, - 109, 108, 112, nil, 110, 121, 122, nil, 104, 105, - 49, 50, 48, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 246, nil, nil, 254, nil, nil, 66, 67, - nil, nil, 68, nil, nil, nil, nil, nil, 52, nil, - nil, nil, nil, nil, nil, nil, nil, 251, nil, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - 81, 82, 83, 85, 65, 92, 106, 107, 71, 72, - 46, 47, nil, 75, nil, 73, 74, 76, 356, 357, - 79, 80, nil, nil, nil, nil, nil, 84, 351, 359, - 115, 114, 116, 117, nil, nil, 255, nil, nil, nil, - nil, nil, nil, 53, nil, nil, 119, 118, 120, 111, - 64, 109, 108, 112, nil, 110, 121, 122, nil, 104, - 105, 49, 50, 48, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 246, nil, nil, 254, nil, nil, 66, - 67, nil, nil, 68, nil, nil, nil, nil, nil, 52, - nil, nil, nil, nil, nil, nil, nil, nil, 251, nil, - nil, nil, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, 81, 82, 83, 85, 65, 92, 106, 107, 71, - 72, 46, 47, nil, 75, nil, 73, 74, 76, 356, - 357, 79, 80, nil, nil, nil, nil, nil, 84, 351, - 359, 115, 114, 116, 117, nil, nil, 255, nil, nil, - nil, nil, nil, nil, 53, nil, nil, 119, 118, 120, - 111, 64, 109, 108, 112, nil, 110, 121, 122, nil, - 104, 105, 49, 50, 48, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 246, nil, nil, 254, nil, nil, - 66, 67, nil, nil, 68, nil, nil, nil, nil, nil, - 52, nil, nil, nil, nil, nil, nil, nil, nil, 251, - nil, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - nil, nil, 81, 82, 83, 85, 65, 92, 106, 107, - 71, 72, 46, 47, nil, 75, nil, 73, 74, 76, - 356, 357, 79, 80, nil, nil, nil, nil, nil, 84, - 351, 359, 115, 114, 116, 117, nil, nil, 255, nil, - nil, nil, nil, nil, nil, 53, nil, nil, 119, 118, - 120, 111, 64, 109, 108, 112, nil, 110, 121, 122, - nil, 104, 105, 49, 50, 48, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 246, nil, nil, 254, nil, - nil, 66, 67, nil, nil, 68, nil, nil, nil, nil, - nil, 52, nil, nil, nil, nil, nil, nil, nil, nil, - 251, nil, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, 81, 82, 83, 85, 65, 92, 106, - 107, 71, 72, 46, 47, nil, 75, nil, 73, 74, - 76, 356, 357, 79, 80, nil, nil, nil, nil, nil, - 84, 351, 359, 115, 114, 116, 117, nil, nil, 255, - nil, nil, nil, nil, nil, nil, 53, nil, nil, 119, - 118, 120, 111, 64, 109, 108, 112, nil, 110, 121, - 122, nil, 104, 105, 49, 50, 48, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 246, nil, nil, 254, - nil, nil, 66, 67, nil, nil, 68, nil, nil, nil, - nil, nil, 52, nil, nil, nil, nil, nil, nil, nil, - nil, 251, nil, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 81, 82, 83, 85, 65, 92, - 106, 107, 71, 72, 46, 47, nil, 75, nil, 73, - 74, 76, 356, 357, 79, 80, nil, nil, nil, nil, - nil, 84, 351, 359, 115, 114, 116, 117, nil, nil, - 255, nil, nil, nil, nil, nil, nil, 53, nil, nil, - 119, 118, 120, 111, 64, 109, 108, 112, nil, 110, - 121, 122, nil, 104, 105, 49, 50, 48, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 246, nil, nil, - 254, nil, nil, 66, 67, nil, nil, 68, nil, nil, - nil, nil, nil, 52, nil, nil, nil, nil, nil, nil, - nil, nil, 251, nil, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 81, 82, 83, 85, 65, - 92, 106, 107, 71, 72, 46, 47, nil, 75, nil, - 73, 74, 76, 356, 357, 79, 80, nil, nil, nil, - nil, nil, 84, 351, 359, 115, 114, 116, 117, nil, - nil, 255, nil, nil, nil, nil, nil, nil, 53, nil, - nil, 119, 118, 120, 111, 64, 109, 108, 112, nil, - 110, 121, 122, nil, 104, 105, 49, 50, 48, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 246, nil, - nil, 254, nil, nil, 66, 67, nil, nil, 68, nil, - nil, nil, nil, nil, 52, nil, nil, nil, nil, nil, - nil, nil, nil, 251, nil, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, 81, 82, 83, 85, - 65, 92, 106, 107, 71, 72, 46, 47, nil, 75, - nil, 73, 74, 76, 35, 36, 79, 80, nil, nil, - nil, nil, nil, 84, 33, 32, 115, 114, 116, 117, - nil, nil, 23, nil, nil, nil, nil, nil, nil, 53, - nil, nil, 119, 118, 120, 111, 64, 109, 108, 112, - nil, 110, 121, 122, nil, 104, 105, 49, 50, 48, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 246, - nil, nil, 254, nil, nil, 66, 67, nil, nil, 68, - nil, nil, nil, nil, nil, 52, nil, nil, nil, nil, - nil, nil, nil, nil, 24, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, 81, 82, 83, - 85, 65, 92, 106, 107, 71, 72, 46, 47, nil, - 75, nil, 73, 74, 76, 35, 36, 79, 80, nil, - nil, nil, nil, nil, 84, 33, 32, 115, 114, 116, - 117, nil, nil, 255, nil, nil, nil, nil, nil, nil, - 53, nil, nil, 119, 118, 120, 111, 64, 109, 108, - 112, 329, 110, 121, 122, nil, 104, 105, 49, 50, - 48, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 246, nil, nil, 254, nil, nil, 66, 67, nil, nil, - 68, nil, 326, nil, 323, nil, 52, nil, nil, 330, - nil, nil, nil, nil, nil, 251, nil, nil, nil, nil, - 102, 327, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, 81, 82, - 83, 85, 65, 92, 106, 107, 71, 72, 46, 564, - nil, 75, nil, 73, 74, 76, 35, 36, 79, 80, - nil, nil, nil, nil, nil, 84, 33, 32, 115, 114, - 116, 117, nil, nil, 255, nil, nil, nil, nil, nil, - nil, 53, nil, nil, 119, 118, 120, 111, 64, 109, - 108, 112, 329, 110, 121, 122, nil, 104, 105, 49, - 50, 48, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 246, nil, nil, 254, nil, nil, 66, 67, nil, - nil, 68, nil, 326, nil, 323, nil, 52, nil, nil, - 330, nil, nil, nil, nil, nil, 251, nil, nil, nil, - nil, 102, 327, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, 81, - 82, 83, 85, 65, 92, 106, 107, 71, 72, 46, - 47, nil, 75, nil, 73, 74, 76, 35, 36, 79, - 80, nil, nil, nil, nil, nil, 84, 33, 32, 115, - 114, 116, 117, nil, nil, 255, nil, nil, nil, nil, - nil, nil, 53, nil, nil, 119, 118, 120, 111, 64, - 109, 108, 112, 329, 110, 121, 122, nil, 104, 105, - 49, 50, 48, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 246, nil, nil, 254, nil, nil, 66, 67, - nil, nil, 68, nil, 326, nil, 323, nil, 52, nil, - nil, 330, nil, nil, nil, nil, nil, 251, nil, nil, - nil, nil, 102, 327, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, 241, nil, nil, - 81, 82, 83, 85, 65, 92, 106, 107, 71, 72, - 46, 47, nil, 75, nil, 73, 74, 76, 356, 357, - 79, 80, nil, nil, nil, nil, nil, 84, 351, 359, - 115, 114, 116, 117, nil, nil, 255, nil, nil, nil, - nil, nil, nil, 53, nil, nil, 119, 118, 120, 111, - 64, 109, 108, 112, nil, 110, 121, 122, nil, 104, - 105, 49, 50, 48, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 246, nil, nil, 254, nil, nil, 66, - 67, nil, nil, 68, nil, nil, nil, nil, nil, 52, - nil, nil, nil, nil, nil, nil, nil, nil, 251, nil, - nil, nil, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, 81, 82, 83, 85, 65, 92, 106, 107, 71, - 72, 46, 47, nil, 75, nil, 73, 74, 76, 356, - 357, 79, 80, nil, nil, nil, nil, nil, 84, 351, - 359, 115, 114, 116, 117, nil, nil, 255, nil, nil, - nil, nil, nil, nil, 53, nil, nil, 119, 118, 120, - 111, 64, 109, 108, 112, nil, 110, 121, 122, nil, - 104, 105, 49, 50, 48, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 246, nil, nil, 254, nil, nil, - 66, 67, nil, nil, 68, nil, nil, nil, nil, nil, - 52, nil, nil, nil, nil, nil, nil, nil, nil, 251, - nil, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - nil, nil, 81, 82, 83, 85, 65, 92, 106, 107, - 71, 72, 46, 47, nil, 75, nil, 73, 74, 76, - 356, 357, 79, 80, nil, nil, nil, nil, nil, 84, - 351, 359, 115, 114, 116, 117, nil, nil, 255, nil, - nil, nil, nil, nil, nil, 53, nil, nil, 119, 118, - 120, 111, 64, 109, 108, 112, nil, 110, 121, 122, - nil, 104, 105, 49, 50, 48, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 246, nil, nil, 254, nil, - nil, 66, 67, nil, nil, 68, nil, nil, nil, nil, - nil, 52, nil, nil, nil, nil, nil, nil, nil, nil, - 251, nil, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, 81, 82, 83, 85, 65, 92, 106, - 107, 71, 72, 46, 47, nil, 75, nil, 73, 74, - 76, 356, 357, 79, 80, nil, nil, nil, nil, nil, - 84, 351, 359, 115, 114, 116, 117, nil, nil, 255, - nil, nil, nil, nil, nil, nil, 53, nil, nil, 119, - 118, 120, 111, 64, 109, 108, 112, nil, 110, 121, - 122, nil, 104, 105, 49, 50, 48, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 246, nil, nil, 254, - nil, nil, 66, 67, nil, nil, 68, nil, nil, nil, - nil, nil, 52, nil, nil, nil, nil, nil, nil, nil, - nil, 251, nil, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, nil, nil, nil, 85, nil, 92, - 106, 107, nil, nil, 46, 47, 81, 82, 83, 11, - 65, nil, nil, nil, 71, 72, nil, nil, nil, 75, - nil, 73, 74, 76, 35, 36, 79, 80, nil, nil, - nil, nil, nil, 84, 33, 32, 115, 114, 116, 117, - nil, nil, 23, nil, nil, nil, nil, nil, 10, 53, - nil, 12, 119, 118, 120, 111, 64, 109, 108, 112, - nil, 110, 121, 122, nil, 104, 105, 49, 50, 48, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 45, - nil, nil, 38, nil, nil, 66, 67, nil, nil, 68, - nil, 40, nil, nil, nil, 52, nil, nil, nil, nil, - nil, nil, nil, nil, 24, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, 81, 82, 83, - 85, 65, 92, 106, 107, 71, 72, 46, 47, nil, - 75, nil, 73, 74, 76, 356, 357, 79, 80, nil, - nil, nil, nil, nil, 84, 351, 359, 115, 114, 116, - 117, nil, nil, 255, nil, nil, nil, nil, nil, nil, - 53, nil, nil, 119, 118, 120, 111, 64, 109, 108, - 112, nil, 110, 121, 122, nil, 104, 105, 49, 50, - 48, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 246, nil, nil, 254, nil, nil, 66, 67, nil, nil, - 68, nil, nil, nil, nil, nil, 52, nil, nil, nil, - nil, nil, nil, nil, nil, 251, nil, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, 81, 82, - 83, 85, 65, 92, 106, 107, 71, 72, 46, 47, - nil, 75, nil, 73, 74, 76, 35, 36, 79, 80, - nil, nil, nil, nil, nil, 84, 33, 32, 115, 114, - 116, 117, nil, nil, 23, nil, nil, nil, nil, nil, - nil, 53, nil, nil, 119, 118, 120, 111, 64, 109, - 108, 112, nil, 110, 121, 122, nil, 104, 105, 49, - 50, 48, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 246, nil, nil, 254, nil, nil, 66, 67, nil, - nil, 68, nil, nil, nil, nil, nil, 52, nil, nil, - nil, nil, nil, nil, nil, nil, 24, nil, nil, nil, - nil, 102, 90, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, 81, - 82, 83, 85, 65, 92, 106, 107, 71, 72, 46, - 47, nil, 75, nil, 73, 74, 76, 35, 36, 79, - 80, nil, nil, nil, nil, nil, 84, 33, 32, 115, - 114, 116, 117, nil, nil, 23, nil, nil, nil, nil, - nil, nil, 53, nil, nil, 119, 118, 120, 111, 64, - 109, 108, 112, nil, 110, 121, 122, nil, 104, 105, - 49, 50, 48, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 246, nil, nil, 254, nil, nil, 66, 67, - nil, nil, 68, nil, nil, nil, nil, nil, 52, nil, - nil, nil, nil, nil, nil, nil, nil, 24, nil, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - 81, 82, 83, 85, 65, 92, 106, 107, 71, 72, - 46, 47, nil, 75, nil, 73, 74, 76, 356, 357, - 79, 80, nil, nil, nil, nil, nil, 84, 351, 359, - 115, 114, 116, 117, nil, nil, 255, nil, nil, nil, - nil, nil, nil, 53, nil, nil, 119, 118, 120, 111, - 64, 109, 108, 112, nil, 110, 121, 122, nil, 104, - 105, 49, 50, 48, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 246, nil, nil, 254, nil, nil, 66, - 67, nil, nil, 68, nil, nil, nil, nil, nil, 52, - nil, nil, nil, nil, nil, nil, nil, nil, 251, nil, - nil, nil, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, nil, nil, nil, 85, nil, 92, 106, 107, -276, - nil, 46, 47, nil, nil, nil, -276, -276, -276, nil, - nil, -276, -276, -276, nil, -276, nil, nil, nil, nil, - nil, nil, nil, -276, -276, -276, -276, nil, nil, nil, - nil, nil, nil, nil, nil, -276, -276, nil, -276, -276, - -276, -276, -276, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, -276, -276, -276, -276, -276, - -276, -276, -276, -276, -276, -276, -276, -276, -276, nil, - nil, -276, -276, -276, nil, nil, -276, nil, 307, -276, - nil, nil, -276, -276, nil, -276, nil, -276, nil, -276, - nil, -276, -276, nil, -276, -276, -276, -276, -276, nil, - -276, -276, -276, 494, nil, 491, 490, 489, 499, 492, - nil, nil, nil, nil, nil, nil, -276, nil, 502, -276, - -276, -722, -276, nil, -276, nil, nil, nil, -722, -722, - -722, -276, nil, -722, -722, -722, nil, -722, nil, nil, - 497, nil, nil, nil, nil, -722, -722, -722, -722, -722, - nil, 510, 509, nil, nil, nil, 503, -722, -722, nil, - -722, -722, -722, -722, -722, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, -722, -722, -722, - -722, -722, -722, -722, -722, -722, -722, -722, -722, -722, - -722, nil, nil, -722, -722, -722, nil, nil, -722, nil, - nil, -722, nil, nil, -722, -722, nil, -722, nil, -722, - nil, -722, nil, -722, -722, nil, -722, -722, -722, -722, - -722, nil, -722, -722, -722, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, -722, nil, - nil, -722, -722, -722, -722, nil, -722, -723, -722, nil, - nil, nil, nil, -722, -723, -723, -723, nil, nil, -723, - -723, -723, nil, -723, nil, nil, nil, nil, nil, nil, - nil, -723, -723, -723, -723, -723, nil, nil, nil, nil, - nil, nil, nil, -723, -723, nil, -723, -723, -723, -723, - -723, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, -723, -723, -723, -723, -723, -723, -723, - -723, -723, -723, -723, -723, -723, -723, nil, nil, -723, - -723, -723, nil, nil, -723, nil, nil, -723, nil, nil, - -723, -723, nil, -723, nil, -723, nil, -723, nil, -723, - -723, nil, -723, -723, -723, -723, -723, nil, -723, -723, - -723, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, -723, nil, nil, -723, -723, -723, - -723, nil, -723, nil, -723, nil, 81, 82, 83, -723, - 65, nil, nil, nil, 71, 72, nil, nil, nil, 75, - nil, 73, 74, 76, 35, 36, 79, 80, nil, nil, - nil, nil, nil, 84, 33, 32, 115, 114, 116, 117, - nil, nil, 698, nil, nil, nil, nil, nil, nil, 53, - nil, nil, 119, 118, 120, 111, 64, 109, 108, 112, - nil, 110, 121, 122, nil, 104, 105, 49, 50, 48, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 246, - nil, nil, 254, nil, nil, 66, 67, nil, nil, 68, - nil, nil, nil, nil, nil, 52, nil, nil, nil, nil, - nil, nil, nil, nil, 251, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, 81, 82, 83, - 85, 65, 92, 106, 107, 71, 72, 46, 47, nil, - 75, nil, 73, 74, 76, 356, 357, 79, 80, nil, - nil, nil, nil, nil, 84, 351, 359, 115, 114, 116, - 117, nil, nil, 255, nil, nil, nil, nil, nil, nil, - 53, nil, nil, 119, 118, 120, 111, 64, 109, 108, - 112, nil, 110, 121, 122, nil, 104, 105, 49, 50, - 48, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 246, nil, nil, 254, nil, nil, 66, 67, nil, nil, - 68, nil, nil, nil, nil, nil, 52, nil, nil, nil, - nil, nil, nil, nil, nil, 251, nil, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, 81, 82, - 83, 85, 65, 92, 106, 107, 71, 72, 46, 47, - nil, 75, nil, 73, 74, 76, 35, 36, 79, 80, - nil, nil, nil, nil, nil, 84, 33, 32, 115, 114, - 116, 117, nil, nil, 698, nil, nil, nil, nil, nil, - nil, 53, nil, nil, 119, 118, 120, 111, 64, 109, - 108, 112, nil, 110, 121, 122, nil, 104, 105, 49, - 50, 48, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 246, nil, nil, 254, nil, nil, 66, 67, nil, - nil, 68, nil, nil, nil, nil, nil, 52, nil, nil, - nil, nil, nil, nil, nil, nil, 251, nil, nil, nil, - nil, 102, 90, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, 81, - 82, 83, 85, 65, 92, 106, 107, 71, 72, 46, - 47, nil, 75, nil, 73, 74, 76, 35, 36, 79, - 80, nil, nil, nil, nil, nil, 84, 33, 32, 115, - 114, 116, 117, nil, nil, 255, nil, nil, nil, nil, - nil, nil, 53, nil, nil, 119, 118, 120, 111, 64, - 109, 108, 112, 329, 110, 121, 122, nil, 104, 105, - 49, 50, 48, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 246, nil, nil, 254, nil, nil, 66, 67, - nil, nil, 68, nil, 326, nil, 323, nil, 52, nil, - nil, 330, nil, nil, nil, nil, nil, 251, nil, nil, - nil, nil, 102, 327, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - 81, 82, 83, 85, 65, 92, 106, 107, 71, 72, - 46, 47, nil, 75, nil, 73, 74, 76, 356, 357, - 79, 80, nil, nil, nil, nil, nil, 84, 351, 359, - 115, 114, 116, 117, nil, nil, 255, nil, nil, nil, - nil, nil, nil, 53, nil, nil, 119, 118, 120, 111, - 64, 109, 108, 112, nil, 110, 121, 122, nil, 104, - 105, 49, 50, 48, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 246, nil, nil, 254, nil, nil, 66, - 67, nil, nil, 68, nil, nil, nil, nil, nil, 52, - nil, nil, nil, nil, nil, nil, nil, nil, 251, nil, - nil, nil, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, 81, 82, 83, 85, 65, 92, 106, 107, 71, - 72, 46, 47, nil, 75, nil, 73, 74, 76, 356, - 357, 79, 80, nil, nil, nil, nil, nil, 84, 351, - 359, 115, 114, 116, 117, nil, nil, 255, nil, nil, - nil, nil, nil, nil, 53, nil, nil, 119, 118, 120, - 111, 64, 109, 108, 112, nil, 110, 121, 122, nil, - 104, 105, 49, 50, 48, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 246, nil, nil, 254, nil, nil, - 66, 67, nil, nil, 68, nil, nil, nil, nil, nil, - 52, nil, nil, nil, nil, nil, nil, nil, nil, 251, - nil, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - nil, nil, 81, 82, 83, 85, 65, 92, 106, 107, - 71, 72, 46, 47, nil, 75, nil, 73, 74, 76, - 356, 357, 79, 80, nil, nil, nil, nil, nil, 84, - 351, 359, 115, 114, 116, 117, nil, nil, 255, nil, - nil, nil, nil, nil, nil, 53, nil, nil, 119, 118, - 120, 111, 64, 109, 108, 112, nil, 110, 121, 122, - nil, 104, 105, 49, 50, 48, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 246, nil, nil, 254, nil, - nil, 66, 67, nil, nil, 68, nil, nil, nil, nil, - nil, 52, nil, nil, nil, nil, nil, nil, nil, nil, - 251, nil, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, nil, nil, nil, 85, nil, 92, 106, - 107, -276, nil, 46, 47, nil, nil, nil, -276, -276, - -276, nil, nil, -276, -276, -276, 494, -276, 491, 490, - 489, 499, 492, nil, nil, -276, -276, -276, nil, nil, - nil, 502, nil, nil, nil, nil, nil, -276, -276, nil, - -276, -276, -276, -276, -276, nil, 494, nil, 491, 490, - 489, 499, 492, 497, nil, nil, nil, nil, nil, nil, - nil, 502, 507, 506, 510, 509, nil, nil, nil, 503, - nil, 494, nil, 491, 490, 489, 499, 492, -276, nil, - nil, nil, nil, 497, 648, -276, 502, nil, nil, nil, - 307, -276, 507, 506, 510, 509, nil, nil, nil, 503, - nil, nil, nil, nil, nil, nil, nil, nil, 497, 488, - nil, nil, nil, -276, -276, nil, nil, 507, 506, 510, - 509, nil, nil, nil, 503, nil, nil, nil, -276, nil, - nil, -276, nil, 81, 82, 83, -276, 65, nil, 488, - nil, 71, 72, -276, nil, nil, 75, nil, 73, 74, - 76, 356, 357, 79, 80, nil, nil, nil, nil, nil, - 84, 351, 359, 115, 114, 116, 117, nil, nil, 255, - nil, nil, nil, nil, nil, nil, 53, nil, nil, 119, - 118, 120, 111, 64, 109, 108, 112, nil, 110, 121, - 122, nil, 104, 105, 49, 50, 48, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 246, nil, nil, 254, - nil, nil, 66, 67, nil, nil, 68, nil, nil, nil, - nil, nil, 52, nil, nil, nil, nil, nil, nil, nil, - nil, 251, nil, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 81, 82, 83, 85, 65, 92, - 106, 107, 71, 72, 46, 47, nil, 75, nil, 73, - 74, 76, 356, 357, 79, 80, nil, nil, nil, nil, - nil, 84, 351, 359, 115, 114, 116, 117, nil, nil, - 255, nil, nil, nil, nil, nil, nil, 53, nil, nil, - 119, 118, 120, 111, 64, 109, 108, 112, 329, 110, - 121, 122, nil, 104, 105, 49, 50, 48, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 246, nil, nil, - 254, nil, nil, 66, 67, nil, nil, 68, nil, 326, - nil, 323, nil, 52, nil, nil, 330, nil, nil, nil, - nil, nil, 251, nil, nil, nil, nil, 102, 327, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 81, 82, 83, 85, 65, - 92, 106, 107, 71, 72, 46, 47, nil, 75, nil, - 73, 74, 76, 356, 357, 79, 80, nil, nil, nil, - nil, nil, 84, 351, 359, 115, 114, 116, 117, nil, - nil, 255, nil, nil, nil, nil, nil, nil, 53, nil, - nil, 119, 118, 120, 111, 64, 109, 108, 112, 329, - 110, 121, 122, nil, 104, 105, 49, 50, 48, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 246, nil, - nil, 254, nil, nil, 66, 67, nil, nil, 68, nil, - nil, nil, 323, nil, 52, nil, nil, 330, nil, nil, - nil, nil, nil, 251, nil, nil, nil, nil, 102, 327, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, 81, 82, 83, 85, - 65, 92, 106, 107, 71, 72, 46, 47, nil, 75, - nil, 73, 74, 76, 356, 357, 79, 80, nil, nil, - nil, nil, nil, 84, 351, 359, 115, 114, 116, 117, - nil, nil, 255, nil, nil, nil, nil, nil, nil, 53, - nil, nil, 119, 118, 120, 111, 64, 109, 108, 112, - nil, 110, 121, 122, nil, 104, 105, 49, 50, 48, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 246, - nil, nil, 254, nil, nil, 66, 67, nil, nil, 68, - nil, nil, nil, nil, nil, 52, nil, nil, nil, nil, - nil, nil, nil, nil, 251, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, nil, nil, nil, - 85, nil, 92, 106, 107, nil, nil, 46, 47, 81, - 82, 83, 11, 65, nil, nil, nil, 71, 72, nil, - nil, nil, 75, nil, 73, 74, 76, 35, 36, 79, - 80, nil, nil, nil, nil, nil, 84, 33, 32, 115, - 114, 116, 117, nil, nil, 23, nil, nil, nil, nil, - nil, 10, 53, 337, 12, 119, 118, 120, 111, 64, - 109, 108, 112, nil, 110, 121, 122, nil, 104, 105, - 49, 50, 48, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 45, nil, nil, 38, nil, nil, 66, 67, - nil, nil, 68, nil, 40, nil, nil, nil, 52, nil, - nil, nil, nil, nil, nil, nil, nil, 24, nil, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - nil, nil, 421, 85, nil, 92, 106, 107, nil, nil, - 46, 47, 81, 82, 83, nil, 65, nil, nil, nil, - 71, 72, nil, nil, nil, 75, nil, 73, 74, 76, - 35, 36, 79, 80, nil, nil, nil, nil, nil, 84, - 33, 32, 115, 114, 116, 117, nil, nil, 255, nil, - nil, nil, nil, nil, nil, 53, nil, nil, 119, 118, - 120, 111, 64, 109, 108, 112, 329, 110, 121, 122, - nil, 104, 105, 49, 50, 48, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 246, nil, nil, 254, nil, - nil, 66, 67, nil, nil, 68, nil, 326, nil, 323, - nil, 52, nil, nil, 330, nil, nil, nil, nil, nil, - 251, nil, nil, nil, nil, 102, 327, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, 81, 82, 83, 85, 65, 92, 106, - 107, 71, 72, 46, 47, nil, 75, nil, 73, 74, - 76, 356, 357, 79, 80, nil, nil, nil, nil, nil, - 84, 351, 359, 115, 114, 116, 117, nil, nil, 255, - nil, nil, nil, nil, nil, nil, 53, nil, nil, 119, - 118, 120, 111, 64, 109, 108, 112, nil, 110, 121, - 122, nil, 104, 105, 49, 50, 48, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 246, nil, nil, 254, - nil, nil, 66, 67, nil, nil, 68, nil, nil, nil, - nil, nil, 52, nil, nil, nil, nil, nil, nil, nil, - nil, 251, nil, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 81, 82, 83, 85, 65, 92, - 106, 107, 71, 72, 46, 47, nil, 75, nil, 73, - 74, 76, 356, 357, 79, 80, nil, nil, nil, nil, - nil, 84, 351, 359, 115, 114, 116, 117, nil, nil, - 255, nil, nil, nil, nil, nil, nil, 53, nil, nil, - 119, 118, 120, 111, 64, 109, 108, 112, nil, 110, - 121, 122, nil, 104, 105, 49, 50, 48, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 246, nil, nil, - 254, nil, nil, 66, 67, nil, nil, 68, nil, nil, - nil, nil, nil, 52, nil, nil, nil, nil, nil, nil, - nil, nil, 251, nil, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 81, 82, 83, 85, 65, - 92, 106, 107, 71, 72, 46, 47, nil, 75, nil, - 73, 74, 76, 356, 357, 79, 80, nil, nil, nil, - nil, nil, 84, 351, 359, 115, 114, 116, 117, nil, - nil, 255, nil, nil, nil, nil, nil, nil, 53, nil, - nil, 119, 118, 120, 111, 64, 109, 108, 112, nil, - 110, 121, 122, nil, 104, 105, 49, 50, 48, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 246, nil, - nil, 254, nil, nil, 66, 67, nil, nil, 68, nil, - nil, nil, nil, nil, 52, nil, nil, nil, nil, nil, - nil, nil, nil, 251, nil, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, 81, 82, 83, 85, - 65, 92, 106, 107, 71, 72, 46, 47, nil, 75, - nil, 73, 74, 76, 356, 357, 79, 80, nil, nil, - nil, nil, nil, 84, 351, 359, 115, 114, 116, 117, - nil, nil, 255, nil, nil, nil, nil, nil, nil, 53, - nil, nil, 119, 118, 120, 111, 64, 109, 108, 112, - 329, 110, 121, 122, nil, 104, 105, 49, 50, 48, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 246, - nil, nil, 254, nil, nil, 66, 67, nil, nil, 68, - nil, 326, nil, nil, nil, 52, nil, nil, 330, nil, - nil, nil, nil, nil, 251, nil, nil, nil, nil, 102, - 327, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, 81, 82, 83, - 85, 65, 92, 106, 107, 71, 72, 46, 47, nil, - 75, nil, 73, 74, 76, 356, 357, 79, 80, nil, - nil, nil, nil, nil, 84, 351, 359, 115, 114, 116, - 117, nil, nil, 255, nil, nil, nil, nil, nil, nil, - 53, nil, nil, 119, 118, 120, 111, 64, 109, 108, - 112, 329, 110, 121, 122, nil, 104, 105, 49, 50, - 48, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 246, nil, nil, 254, nil, nil, 66, 67, nil, nil, - 68, nil, nil, nil, nil, nil, 52, nil, nil, 330, - nil, nil, nil, nil, nil, 251, nil, nil, nil, nil, - 102, 327, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, 81, 82, - 83, 85, 65, 92, 106, 107, 71, 72, 46, 47, - nil, 75, nil, 73, 74, 76, 356, 357, 79, 80, - nil, nil, nil, nil, nil, 84, 351, 359, 115, 114, - 116, 117, nil, nil, 255, nil, nil, nil, nil, nil, - nil, 53, nil, nil, 119, 118, 120, 111, 64, 109, - 108, 112, nil, 110, 121, 122, nil, 104, 105, 49, - 50, 48, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 246, nil, nil, 254, nil, nil, 66, 67, nil, - nil, 68, nil, 326, nil, nil, nil, 52, nil, nil, - nil, nil, nil, nil, nil, nil, 251, nil, nil, nil, - nil, 102, 90, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, 81, - 82, 83, 85, 65, 92, 106, 107, 71, 72, 46, - 47, nil, 75, nil, 73, 74, 76, 35, 36, 79, - 80, nil, nil, nil, nil, nil, 84, 33, 32, 115, - 114, 116, 117, nil, nil, 255, nil, nil, nil, nil, - nil, nil, 53, nil, nil, 119, 118, 120, 111, 64, - 109, 108, 112, 329, 110, 121, 122, nil, 104, 105, - 49, 50, 48, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 246, nil, nil, 254, nil, nil, 66, 67, - nil, nil, 68, nil, 326, nil, 323, nil, 52, nil, - nil, 330, nil, nil, nil, nil, nil, 251, nil, nil, - nil, nil, 102, 327, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - 81, 82, 83, 85, 65, 92, 106, 107, 71, 72, - 46, 47, nil, 75, nil, 73, 74, 76, 35, 36, - 79, 80, nil, nil, nil, nil, nil, 84, 33, 32, - 115, 114, 116, 117, nil, nil, 255, nil, nil, nil, - nil, nil, nil, 53, nil, nil, 119, 118, 120, 111, - 64, 109, 108, 112, 329, 110, 121, 122, nil, 104, - 105, 49, 50, 48, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 246, nil, nil, 254, nil, nil, 66, - 67, nil, nil, 68, nil, 326, nil, 323, nil, 52, - nil, nil, 330, nil, nil, nil, nil, nil, 251, nil, - nil, nil, nil, 102, 327, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, nil, nil, nil, 85, nil, 92, 106, 107, nil, - nil, 46, 47, 81, 82, 83, 11, 65, nil, nil, - nil, 71, 72, nil, nil, nil, 75, nil, 73, 74, - 76, 35, 36, 79, 80, nil, nil, nil, nil, nil, - 84, 33, 32, 115, 114, 116, 117, nil, nil, 23, - nil, nil, nil, nil, nil, 10, 53, nil, 12, 119, - 118, 120, 111, 64, 109, 108, 112, nil, 110, 121, - 122, nil, 104, 105, 49, 50, 48, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 45, nil, nil, 38, - nil, nil, 66, 67, nil, nil, 68, nil, 40, nil, - nil, nil, 52, nil, nil, nil, nil, nil, nil, nil, - nil, 24, nil, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 81, 82, 83, 85, 65, 92, - 106, 107, 71, 72, 46, 47, nil, 75, nil, 73, - 74, 76, 356, 357, 79, 80, nil, nil, nil, nil, - nil, 84, 351, 359, 115, 114, 116, 117, nil, nil, - 255, nil, nil, nil, nil, nil, nil, 53, nil, nil, - 119, 118, 120, 111, 64, 109, 108, 112, nil, 110, - 121, 122, nil, 104, 105, 49, 50, 48, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 246, nil, nil, - 254, nil, nil, 66, 67, nil, nil, 68, nil, 832, - nil, nil, nil, 52, nil, nil, nil, nil, nil, nil, - nil, nil, 251, nil, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 81, 82, 83, 85, 65, - 92, 106, 107, 71, 72, 46, 47, nil, 75, nil, - 73, 74, 76, 35, 36, 79, 80, nil, nil, nil, - nil, nil, 84, 33, 32, 115, 114, 116, 117, nil, - nil, 255, nil, nil, nil, nil, nil, nil, 53, nil, - nil, 119, 118, 120, 111, 64, 109, 108, 112, nil, - 110, 121, 122, nil, 104, 105, 49, 50, 48, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 246, nil, - nil, 254, nil, nil, 66, 67, nil, nil, 68, nil, - nil, nil, nil, nil, 52, nil, nil, nil, nil, nil, - nil, nil, nil, 251, nil, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, 81, 82, 83, 85, - 65, 92, 106, 107, 71, 72, 46, 47, nil, 75, - nil, 73, 74, 76, 35, 36, 79, 80, nil, nil, - nil, nil, nil, 84, 33, 32, 115, 114, 116, 117, - nil, nil, 255, nil, nil, nil, nil, nil, nil, 53, - nil, nil, 119, 118, 120, 111, 64, 109, 108, 112, - 329, 110, 121, 122, nil, 104, 105, 49, 50, 48, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 246, - nil, nil, 254, nil, nil, 66, 67, nil, nil, 68, - nil, 326, nil, 323, nil, 52, nil, nil, 330, nil, - nil, nil, nil, nil, 251, nil, nil, nil, nil, 102, - 327, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, nil, nil, nil, - 85, nil, 92, 106, 107, nil, nil, 46, 47, 81, - 82, 83, 11, 65, nil, nil, nil, 71, 72, nil, - nil, nil, 75, nil, 73, 74, 76, 35, 36, 79, - 80, nil, nil, nil, nil, nil, 84, 33, 32, 115, - 114, 116, 117, nil, nil, 23, nil, nil, nil, nil, - nil, 10, 53, nil, 12, 119, 118, 120, 111, 64, - 109, 108, 112, nil, 110, 121, 122, nil, 104, 105, - 49, 50, 48, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 45, nil, nil, 38, nil, nil, 66, 67, - nil, nil, 68, nil, 40, nil, nil, nil, 52, nil, - nil, nil, nil, nil, nil, nil, nil, 24, nil, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - 81, 82, 83, 85, 65, 92, 106, 107, 71, 72, - 46, 47, nil, 75, nil, 73, 74, 76, 356, 357, - 79, 80, nil, nil, nil, nil, nil, 84, 351, 359, - 115, 114, 116, 117, nil, nil, 255, nil, nil, nil, - nil, nil, nil, 53, nil, nil, 119, 118, 120, 111, - 64, 109, 108, 112, nil, 110, 121, 122, nil, 104, - 105, 49, 50, 48, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 246, nil, nil, 254, nil, nil, 66, - 67, nil, nil, 68, nil, nil, nil, nil, nil, 52, - nil, nil, nil, nil, nil, nil, nil, nil, 251, nil, - nil, nil, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, 81, 82, 83, 85, 65, 92, 106, 107, 71, - 72, 46, 47, nil, 75, nil, 73, 74, 76, 356, - 357, 79, 80, nil, nil, nil, nil, nil, 84, 351, - 359, 115, 114, 116, 117, nil, nil, 255, nil, nil, - nil, nil, nil, nil, 53, nil, nil, 119, 118, 120, - 111, 64, 109, 108, 112, 329, 110, 121, 122, nil, - 104, 105, 49, 50, 48, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 246, nil, nil, 254, nil, nil, - 66, 67, nil, nil, 68, nil, 326, nil, 323, nil, - 52, nil, nil, 330, nil, nil, nil, nil, nil, 251, - nil, nil, nil, nil, 102, 327, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - nil, nil, 81, 82, 83, 85, 65, 92, 106, 107, - 71, 72, 46, 47, nil, 75, nil, 73, 74, 76, - 356, 357, 79, 80, nil, nil, nil, nil, nil, 84, - 351, 359, 115, 114, 116, 117, nil, nil, 255, nil, - nil, nil, nil, nil, nil, 53, nil, nil, 119, 118, - 120, 111, 64, 109, 108, 112, 329, 110, 121, 122, - nil, 104, 105, 49, 50, 48, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 246, nil, nil, 254, nil, - nil, 66, 67, nil, nil, 68, nil, nil, nil, 323, - nil, 52, nil, nil, 330, nil, nil, nil, nil, nil, - 251, nil, nil, nil, nil, 102, 327, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, 81, 82, 83, 85, 65, 92, 106, - 107, 71, 72, 46, 47, nil, 75, nil, 73, 74, - 76, 35, 36, 79, 80, nil, nil, nil, nil, nil, - 84, 33, 32, 115, 114, 116, 117, nil, nil, 255, - nil, nil, nil, nil, nil, nil, 53, nil, nil, 119, - 118, 120, 111, 64, 109, 108, 112, nil, 110, 121, - 122, nil, 104, 105, 49, 50, 48, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 246, nil, nil, 254, - nil, nil, 66, 67, nil, nil, 68, nil, nil, nil, - nil, nil, 52, nil, nil, nil, nil, nil, nil, nil, - nil, 251, nil, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 81, 82, 83, 85, 65, 92, - 106, 107, 71, 72, 46, 47, nil, 75, nil, 73, - 74, 76, 35, 36, 79, 80, nil, nil, nil, nil, - nil, 84, 33, 32, 115, 114, 116, 117, nil, nil, - 255, nil, nil, nil, nil, nil, nil, 53, nil, nil, - 119, 118, 120, 111, 64, 109, 108, 112, nil, 110, - 121, 122, nil, 104, 105, 49, 50, 48, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 246, nil, nil, - 254, nil, nil, 66, 67, nil, nil, 68, nil, nil, - nil, nil, nil, 52, nil, nil, nil, nil, nil, nil, - nil, nil, 251, nil, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 81, 82, 83, 85, 65, - 92, 106, 107, 71, 72, 46, 47, nil, 75, nil, - 73, 74, 76, 35, 36, 79, 80, nil, nil, nil, - nil, nil, 84, 33, 32, 115, 114, 116, 117, nil, - nil, 255, nil, nil, nil, nil, nil, nil, 53, nil, - nil, 119, 118, 120, 111, 64, 109, 108, 112, nil, - 110, 121, 122, nil, 104, 105, 49, 50, 48, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 246, nil, - nil, 254, nil, nil, 66, 67, nil, nil, 68, nil, - nil, nil, nil, nil, 52, nil, nil, nil, nil, nil, - nil, nil, nil, 251, nil, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, 81, 82, 83, 85, - 65, 92, 106, 107, 71, 72, 46, 47, nil, 75, - nil, 73, 74, 76, 35, 36, 79, 80, nil, nil, - nil, nil, nil, 84, 33, 32, 115, 114, 116, 117, - nil, nil, 255, nil, nil, nil, nil, nil, nil, 53, - nil, nil, 119, 118, 120, 111, 64, 109, 108, 112, - nil, 110, 121, 122, nil, 104, 105, 49, 50, 48, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 246, - nil, nil, 254, nil, nil, 66, 67, nil, nil, 68, - nil, nil, nil, nil, nil, 52, nil, nil, nil, nil, - nil, nil, nil, nil, 251, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, 81, 82, 83, - 85, 65, 92, 106, 107, 71, 72, 46, 47, nil, - 75, nil, 73, 74, 76, 356, 357, 79, 80, nil, - nil, nil, nil, nil, 84, 351, 359, 115, 114, 116, - 117, nil, nil, 255, nil, nil, nil, nil, nil, nil, - 53, nil, nil, 119, 118, 120, 111, 64, 109, 108, - 112, nil, 110, 121, 122, nil, 104, 105, 49, 50, - 48, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 246, nil, nil, 254, nil, nil, 66, 67, nil, nil, - 68, nil, 438, nil, nil, nil, 52, nil, nil, nil, - nil, nil, nil, nil, nil, 251, nil, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, 81, 82, - 83, 85, 65, 92, 106, 107, 71, 72, 46, 47, - nil, 75, nil, 73, 74, 76, 356, 357, 79, 80, - nil, nil, nil, nil, nil, 84, 351, 359, 115, 114, - 116, 117, nil, nil, 255, nil, nil, nil, nil, nil, - nil, 53, nil, nil, 119, 118, 120, 111, 64, 109, - 108, 112, nil, 110, 121, 122, nil, 104, 105, 49, - 50, 48, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 246, nil, nil, 254, nil, nil, 66, 67, nil, - nil, 68, nil, nil, nil, nil, nil, 52, nil, nil, - nil, nil, nil, nil, nil, nil, 251, nil, nil, nil, - nil, 102, 90, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, 81, - 82, 83, 85, 65, 92, 106, 107, 71, 72, 46, - 47, nil, 75, nil, 73, 74, 76, 356, 357, 79, - 80, nil, nil, nil, nil, nil, 84, 351, 359, 115, - 114, 116, 117, nil, nil, 889, nil, nil, nil, nil, - nil, nil, 53, nil, nil, 119, 118, 120, 111, 64, - 109, 108, 112, nil, 110, 121, 122, nil, 104, 105, - 49, 50, 48, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 246, nil, nil, 254, nil, nil, 66, 67, - nil, nil, 68, nil, nil, nil, nil, nil, 52, nil, - nil, nil, nil, nil, nil, nil, nil, 251, nil, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - 81, 82, 83, 85, 65, 92, 106, 107, 71, 72, - 46, 47, nil, 75, nil, 73, 74, 76, 356, 357, - 79, 80, nil, nil, nil, nil, nil, 84, 351, 359, - 115, 114, 116, 117, nil, nil, 889, nil, nil, nil, - nil, nil, nil, 53, nil, nil, 119, 118, 120, 111, - 64, 109, 108, 112, nil, 110, 121, 122, nil, 104, - 105, 49, 50, 48, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 246, nil, nil, 254, nil, nil, 66, - 67, nil, nil, 68, nil, nil, nil, nil, nil, 52, - nil, nil, nil, nil, nil, nil, nil, nil, 251, nil, - nil, nil, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, 81, 82, 83, 85, 65, 92, 106, 107, 71, - 72, 46, 47, nil, 75, nil, 73, 74, 76, 356, - 357, 79, 80, nil, nil, nil, nil, nil, 84, 351, - 359, 115, 114, 116, 117, nil, nil, 255, nil, nil, - nil, nil, nil, nil, 53, nil, nil, 119, 118, 120, - 111, 64, 109, 108, 112, 329, 110, 121, 122, nil, - 104, 105, 49, 50, 48, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 246, nil, nil, 254, nil, nil, - 66, 67, nil, nil, 68, nil, 326, nil, 323, nil, - 52, nil, nil, 330, nil, nil, nil, nil, nil, 251, - nil, nil, nil, nil, 102, 327, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - nil, nil, 81, 82, 83, 85, 65, 92, 106, 107, - 71, 72, 46, 564, nil, 75, nil, 73, 74, 76, - 356, 357, 79, 80, nil, nil, nil, nil, nil, 84, - 351, 359, 115, 114, 116, 117, nil, nil, 255, nil, - nil, nil, nil, nil, nil, 53, nil, nil, 119, 118, - 120, 111, 64, 109, 108, 112, nil, 110, 121, 122, - nil, 104, 105, 49, 50, 48, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 246, nil, nil, 254, nil, - nil, 66, 67, nil, nil, 68, nil, nil, nil, nil, - nil, 52, nil, nil, nil, nil, nil, nil, nil, nil, - 251, nil, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, 81, 82, 83, 85, 65, 92, 106, - 107, 71, 72, 46, 47, nil, 75, nil, 73, 74, - 76, 35, 36, 79, 80, nil, nil, nil, nil, nil, - 84, 33, 32, 115, 114, 116, 117, nil, nil, 23, - nil, nil, nil, nil, nil, nil, 53, nil, nil, 119, - 118, 120, 111, 64, 109, 108, 112, nil, 110, 121, - 122, nil, 104, 105, 49, 50, 48, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 246, nil, nil, 254, - nil, nil, 66, 67, nil, nil, 68, nil, nil, nil, - nil, nil, 52, nil, nil, nil, nil, nil, nil, nil, - nil, 24, nil, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 81, 82, 83, 85, 65, 92, - 106, 107, 71, 72, 46, 47, nil, 75, nil, 73, - 74, 76, 35, 36, 79, 80, nil, nil, nil, nil, - nil, 84, 33, 32, 115, 114, 116, 117, nil, nil, - 23, nil, nil, nil, nil, nil, nil, 53, nil, nil, - 119, 118, 120, 111, 64, 109, 108, 112, nil, 110, - 121, 122, nil, 104, 105, 49, 50, 48, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 246, nil, nil, - 254, nil, nil, 66, 67, nil, nil, 68, nil, nil, - nil, nil, nil, 52, nil, nil, nil, nil, nil, nil, - nil, nil, 24, nil, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 81, 82, 83, 85, 65, - 92, 106, 107, 71, 72, 46, 47, nil, 75, nil, - 73, 74, 76, 356, 357, 79, 80, nil, nil, nil, - nil, nil, 84, 351, 359, 115, 114, 116, 117, nil, - nil, 255, nil, nil, nil, nil, nil, nil, 53, nil, - nil, 119, 118, 120, 111, 64, 109, 108, 112, nil, - 110, 121, 122, nil, 104, 105, 49, 50, 48, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 246, nil, - nil, 254, nil, nil, 66, 67, nil, nil, 68, nil, - nil, nil, nil, nil, 52, nil, nil, nil, nil, nil, - nil, nil, nil, 251, nil, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, 81, 82, 83, 85, - 65, 92, 106, 107, 71, 72, 46, 47, nil, 75, - nil, 73, 74, 76, 35, 36, 79, 80, nil, nil, - nil, nil, nil, 84, 33, 32, 115, 114, 116, 117, - nil, nil, 255, nil, nil, nil, nil, nil, nil, 53, - nil, nil, 119, 118, 120, 111, 64, 109, 108, 112, - nil, 110, 121, 122, nil, 104, 105, 49, 50, 48, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 246, - nil, nil, 254, nil, nil, 66, 67, nil, nil, 68, - nil, nil, nil, nil, nil, 52, nil, nil, nil, nil, - nil, nil, nil, nil, 251, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, 81, 82, 83, - 85, 65, 92, 106, 107, 71, 72, 46, 47, nil, - 75, nil, 73, 74, 76, 356, 357, 79, 80, nil, - nil, nil, nil, nil, 84, 351, 359, 115, 114, 116, - 117, nil, nil, 255, nil, nil, nil, nil, nil, nil, - 53, nil, nil, 119, 118, 120, 111, 64, 109, 108, - 112, nil, 110, 121, 122, nil, 104, 105, 49, 50, - 48, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 246, nil, nil, 254, nil, nil, 66, 67, nil, nil, - 68, nil, nil, nil, nil, nil, 52, nil, nil, nil, - nil, nil, nil, nil, nil, 251, nil, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, 81, 82, - 83, 85, 65, 92, 106, 107, 71, 72, 46, 47, - nil, 75, nil, 73, 74, 76, 35, 36, 79, 80, - nil, nil, nil, nil, nil, 84, 33, 32, 115, 114, - 116, 117, nil, nil, 698, nil, nil, nil, nil, nil, - nil, 53, nil, nil, 119, 118, 120, 111, 64, 109, - 108, 112, nil, 110, 121, 122, nil, 104, 105, 49, - 50, 48, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 246, nil, nil, 254, nil, nil, 66, 67, nil, - nil, 68, nil, nil, nil, nil, nil, 52, nil, nil, - nil, nil, nil, nil, nil, nil, 251, nil, nil, nil, - nil, 102, 90, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, 81, - 82, 83, 85, 65, 92, 106, 107, 71, 72, 46, - 47, nil, 75, nil, 73, 74, 76, 356, 357, 79, - 80, nil, nil, nil, nil, nil, 84, 351, 359, 115, - 114, 116, 117, nil, nil, 255, nil, nil, nil, nil, - nil, nil, 53, nil, nil, 119, 118, 120, 111, 64, - 109, 108, 112, nil, 110, 121, 122, nil, 104, 105, - 49, 50, 48, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 246, nil, nil, 254, nil, nil, 66, 67, - nil, nil, 68, nil, nil, nil, nil, nil, 52, nil, - nil, nil, nil, nil, nil, nil, nil, 251, nil, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - 81, 82, 83, 85, 65, 92, 106, 107, 71, 72, - 46, 47, nil, 75, nil, 73, 74, 76, 356, 357, - 79, 80, nil, nil, nil, nil, nil, 84, 351, 359, - 115, 114, 116, 117, nil, nil, 255, nil, nil, nil, - nil, nil, nil, 53, nil, nil, 119, 118, 120, 111, - 64, 109, 108, 112, nil, 110, 121, 122, nil, 104, - 105, 49, 50, 48, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 246, nil, nil, 254, nil, nil, 66, - 67, nil, nil, 68, nil, nil, nil, nil, nil, 52, - nil, nil, nil, nil, nil, nil, nil, nil, 251, nil, - nil, nil, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, 81, 82, 83, 85, 65, 92, 106, 107, 71, - 72, 46, 47, nil, 75, nil, 73, 74, 76, 356, - 357, 79, 80, nil, nil, nil, nil, nil, 84, 351, - 359, 115, 114, 116, 117, nil, nil, 255, nil, nil, - nil, nil, nil, nil, 53, nil, nil, 119, 118, 120, - 111, 64, 109, 108, 112, nil, 110, 121, 122, nil, - 104, 105, 49, 50, 48, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 246, nil, nil, 254, nil, nil, - 66, 67, nil, nil, 68, nil, nil, nil, nil, nil, - 52, nil, nil, nil, nil, nil, nil, nil, nil, 251, - nil, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - nil, nil, 81, 82, 83, 85, 65, 92, 106, 107, - 71, 72, 46, 47, nil, 75, nil, 73, 74, 76, - 356, 357, 79, 80, nil, nil, nil, nil, nil, 84, - 351, 359, 115, 114, 116, 117, nil, nil, 255, nil, - nil, nil, nil, nil, nil, 53, nil, nil, 119, 118, - 120, 111, 64, 109, 108, 112, nil, 110, 121, 122, - nil, 104, 105, 49, 50, 48, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 246, nil, nil, 254, nil, - nil, 66, 67, nil, nil, 68, nil, nil, nil, nil, - nil, 52, nil, nil, nil, nil, nil, nil, nil, nil, - 251, nil, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, 81, 82, 83, 85, 65, 92, 106, - 107, 71, 72, 46, 47, nil, 75, nil, 73, 74, - 76, 356, 357, 79, 80, nil, nil, nil, nil, nil, - 84, 351, 359, 115, 114, 116, 117, nil, nil, 255, - nil, nil, nil, nil, nil, nil, 53, nil, nil, 119, - 118, 120, 111, 64, 109, 108, 112, nil, 110, 121, - 122, nil, 104, 105, 49, 50, 48, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 246, nil, nil, 254, - nil, nil, 66, 67, nil, nil, 68, nil, nil, nil, - nil, nil, 52, nil, nil, nil, nil, nil, nil, nil, - nil, 251, nil, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 81, 82, 83, 85, 65, 92, - 106, 107, 71, 72, 46, 47, nil, 75, nil, 73, - 74, 76, 356, 357, 79, 80, nil, nil, nil, nil, - nil, 84, 351, 359, 115, 114, 116, 117, nil, nil, - 255, nil, nil, nil, nil, nil, nil, 53, nil, nil, - 119, 118, 120, 111, 64, 109, 108, 112, nil, 110, - 121, 122, nil, 104, 105, 49, 50, 48, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 246, nil, nil, - 254, nil, nil, 66, 67, nil, nil, 68, nil, nil, - nil, nil, nil, 52, nil, nil, nil, nil, nil, nil, - nil, nil, 251, nil, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 81, 82, 83, 85, 65, - 92, 106, 107, 71, 72, 46, 47, nil, 75, nil, - 73, 74, 76, 35, 36, 79, 80, nil, nil, nil, - nil, nil, 84, 33, 32, 115, 114, 116, 117, nil, - nil, 23, nil, nil, nil, nil, nil, nil, 53, nil, - nil, 119, 118, 120, 111, 64, 109, 108, 112, nil, - 110, 121, 122, nil, 104, 105, 49, 50, 48, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 246, nil, - nil, 254, nil, nil, 66, 67, nil, nil, 68, nil, - nil, nil, nil, nil, 52, nil, nil, nil, nil, nil, - nil, nil, nil, 24, nil, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, 81, 82, 83, 85, - 65, 92, 106, 107, 71, 72, 46, 47, nil, 75, - nil, 73, 74, 76, 356, 357, 79, 80, nil, nil, - nil, nil, nil, 84, 351, 359, 115, 114, 116, 117, - nil, nil, 255, nil, nil, nil, nil, nil, nil, 53, - nil, nil, 119, 118, 120, 111, 64, 109, 108, 112, - nil, 110, 121, 122, nil, 104, 105, 49, 50, 48, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 246, - nil, nil, 254, nil, nil, 66, 67, nil, nil, 68, - nil, 326, nil, nil, nil, 52, nil, nil, nil, nil, - nil, nil, nil, nil, 251, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, 81, 82, 83, - 85, 65, 92, 106, 107, 71, 72, 46, 47, nil, - 75, nil, 73, 74, 76, 356, 357, 79, 80, nil, - nil, nil, nil, nil, 84, 351, 359, 115, 114, 116, - 117, nil, nil, 255, nil, nil, nil, nil, nil, nil, - 53, nil, nil, 119, 118, 120, 111, 64, 109, 108, - 112, 329, 110, 121, 122, nil, 104, 105, 49, 50, - 48, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 246, nil, nil, 254, nil, nil, 66, 67, nil, nil, - 68, nil, nil, nil, 323, nil, 52, nil, nil, 330, - nil, nil, nil, nil, nil, 251, nil, nil, nil, nil, - 102, 327, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, 81, 82, - 83, 85, 65, 92, 106, 107, 71, 72, 46, 47, - nil, 75, nil, 73, 74, 76, 356, 357, 79, 80, - nil, nil, nil, nil, nil, 84, 351, 359, 115, 114, - 116, 117, nil, nil, 255, nil, nil, nil, nil, nil, - nil, 53, nil, nil, 119, 118, 120, 111, 64, 109, - 108, 112, nil, 110, 121, 122, nil, 104, 105, 49, - 50, 48, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 246, nil, nil, 254, nil, nil, 66, 67, nil, - nil, 68, nil, nil, nil, nil, nil, 52, nil, nil, - nil, nil, nil, nil, nil, nil, 251, nil, nil, nil, - nil, 102, 90, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, 81, - 82, 83, 85, 65, 92, 106, 107, 71, 72, 46, - 47, nil, 75, nil, 73, 74, 76, 356, 357, 79, - 80, nil, nil, nil, nil, nil, 84, 351, 359, 115, - 114, 116, 117, nil, nil, 889, nil, nil, nil, nil, - nil, nil, 53, nil, nil, 119, 118, 120, 111, 64, - 109, 108, 112, nil, 110, 121, 122, nil, 104, 105, - 49, 50, 48, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 246, nil, nil, 254, nil, nil, 66, 67, - nil, nil, 68, nil, nil, nil, nil, nil, 52, nil, - nil, nil, nil, nil, nil, nil, nil, 251, nil, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - 81, 82, 83, 85, 65, 92, 106, 107, 71, 72, - 46, 47, nil, 75, nil, 73, 74, 76, 35, 36, - 79, 80, nil, nil, nil, nil, nil, 84, 33, 32, - 115, 114, 116, 117, nil, nil, 23, nil, nil, nil, - nil, nil, nil, 53, nil, nil, 119, 118, 120, 111, - 64, 109, 108, 112, nil, 110, 121, 122, nil, 104, - 105, 49, 50, 48, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 246, nil, nil, 254, nil, nil, 66, - 67, nil, nil, 68, nil, nil, nil, nil, nil, 52, - nil, nil, nil, nil, nil, nil, nil, nil, 24, nil, - nil, nil, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, 81, 82, 83, 85, 65, 92, 106, 107, 71, - 72, 46, 47, nil, 75, nil, 73, 74, 76, 35, - 36, 79, 80, nil, nil, nil, nil, nil, 84, 33, - 32, 115, 114, 116, 117, nil, nil, 255, nil, nil, - nil, nil, nil, nil, 53, nil, nil, 119, 118, 120, - 111, 64, 109, 108, 112, 329, 110, 121, 122, nil, - 104, 105, 49, 50, 48, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 246, nil, nil, 254, nil, nil, - 66, 67, nil, nil, 68, nil, 326, nil, 323, nil, - 52, nil, nil, 330, nil, nil, nil, nil, nil, 251, - nil, nil, nil, nil, 102, 327, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - nil, nil, 81, 82, 83, 85, 65, 92, 106, 107, - 71, 72, 46, 47, nil, 75, nil, 73, 74, 76, - 35, 36, 79, 80, nil, nil, nil, nil, nil, 84, - 33, 32, 115, 114, 116, 117, nil, nil, 23, nil, - nil, nil, nil, nil, nil, 53, nil, nil, 119, 118, - 120, 111, 64, 109, 108, 112, nil, 110, 121, 122, - nil, 104, 105, 49, 50, 48, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 246, nil, nil, 254, nil, - nil, 66, 67, nil, nil, 68, nil, nil, nil, nil, - nil, 52, nil, nil, nil, nil, nil, nil, nil, nil, - 24, nil, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, 81, 82, 83, 85, 65, 92, 106, - 107, 71, 72, 46, 47, nil, 75, nil, 73, 74, - 76, 35, 36, 79, 80, nil, nil, nil, nil, nil, - 84, 33, 32, 115, 114, 116, 117, nil, nil, 23, - nil, nil, nil, nil, nil, nil, 53, nil, nil, 119, - 118, 120, 111, 64, 109, 108, 112, nil, 110, 121, - 122, nil, 104, 105, 49, 50, 48, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 246, nil, nil, 254, - nil, nil, 66, 67, nil, nil, 68, nil, nil, nil, - nil, nil, 52, nil, nil, nil, nil, nil, nil, nil, - nil, 24, nil, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, 81, 82, 83, 85, 65, 92, - 106, 107, 71, 72, 46, 47, nil, 75, nil, 73, - 74, 76, 356, 357, 79, 80, nil, nil, nil, nil, - nil, 84, 351, 359, 115, 114, 116, 117, nil, nil, - 255, nil, nil, nil, nil, nil, nil, 352, nil, nil, - 119, 118, 120, 111, 64, 109, 108, 112, nil, 110, - 121, 122, nil, 104, 105, nil, nil, 360, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 348, nil, nil, - 344, nil, nil, 66, 67, nil, nil, 68, nil, 343, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 81, 82, 83, 85, 65, - 92, 106, 107, 71, 72, nil, nil, nil, 75, nil, - 73, 74, 76, 356, 357, 79, 80, nil, nil, nil, - nil, nil, 84, 351, 359, 115, 114, 116, 117, nil, - nil, 255, nil, nil, nil, nil, nil, nil, 352, nil, - nil, 119, 118, 120, 111, 64, 109, 108, 112, nil, - 110, 121, 122, nil, 104, 105, nil, nil, 360, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 348, nil, - nil, 254, nil, nil, 66, 67, nil, nil, 68, nil, - nil, 494, nil, 491, 490, 489, 499, 492, nil, nil, - nil, nil, nil, nil, nil, nil, 502, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, 362, nil, 497, 85, - nil, 92, 106, 107, 81, 82, 83, nil, 65, 510, - 509, nil, 71, 72, 503, nil, nil, 75, nil, 73, - 74, 76, 356, 357, 79, 80, nil, nil, nil, nil, - nil, 84, 351, 359, 115, 114, 116, 117, nil, nil, - 255, nil, nil, nil, nil, nil, nil, 352, nil, nil, - 119, 118, 120, 111, 64, 109, 108, 112, nil, 110, - 121, 122, nil, 104, 105, nil, nil, 360, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 396, nil, nil, - 38, nil, nil, 66, 67, nil, nil, 68, nil, 40, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, nil, nil, nil, 81, 82, 83, 85, 65, - 92, 106, 107, 71, 72, nil, nil, nil, 75, nil, - 73, 74, 76, 356, 357, 79, 80, nil, nil, nil, - nil, nil, 84, 351, 359, 115, 114, 116, 117, nil, - nil, 255, nil, nil, nil, nil, nil, nil, 352, nil, - nil, 119, 118, 120, 401, 64, 109, 108, 402, nil, - 110, 121, 122, nil, 104, 105, nil, nil, 360, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 408, nil, nil, 403, nil, - nil, 254, nil, nil, 66, 67, nil, nil, 68, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, nil, nil, nil, 81, 82, 83, 85, - 65, 92, 106, 107, 71, 72, nil, nil, nil, 75, - nil, 73, 74, 76, 356, 357, 79, 80, nil, nil, - nil, nil, nil, 84, 351, 359, 115, 114, 116, 117, - nil, nil, 255, nil, nil, nil, nil, nil, nil, 352, - nil, nil, 119, 118, 120, 401, 64, 109, 108, 402, - nil, 110, 121, 122, nil, 104, 105, nil, nil, 360, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 403, - nil, nil, 254, nil, nil, 66, 67, nil, nil, 68, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, 81, 82, 83, - 85, 65, 92, 106, 107, 71, 72, nil, nil, nil, - 75, nil, 73, 74, 76, 356, 357, 79, 80, nil, - nil, nil, nil, nil, 84, 351, 359, 115, 114, 116, - 117, nil, nil, 255, nil, nil, nil, nil, nil, nil, - 352, nil, nil, 119, 118, 120, 111, 64, 109, 108, - 112, nil, 110, 121, 122, nil, 104, 105, nil, nil, - 360, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 348, nil, nil, 254, nil, nil, 66, 67, nil, nil, - 68, nil, nil, 494, nil, 491, 490, 489, 499, 492, - nil, nil, nil, nil, nil, nil, nil, nil, 502, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, 592, nil, - 497, 85, nil, 92, 106, 107, 81, 82, 83, nil, - 65, 510, 509, nil, 71, 72, 503, nil, nil, 75, - nil, 73, 74, 76, 356, 357, 79, 80, nil, nil, - nil, nil, nil, 84, 351, 359, 115, 114, 116, 117, - nil, nil, 255, nil, nil, nil, nil, nil, nil, 352, - nil, nil, 119, 118, 120, 111, 64, 109, 108, 112, - nil, 110, 121, 122, nil, 104, 105, nil, nil, 360, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 348, - nil, nil, 344, nil, nil, 66, 67, nil, nil, 68, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 102, - 90, 93, 94, nil, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, nil, nil, nil, 81, 82, 83, - 85, 65, 92, 106, 107, 71, 72, nil, nil, nil, - 75, nil, 73, 74, 76, 356, 357, 79, 80, nil, - nil, nil, nil, nil, 84, 351, 359, 115, 114, 116, - 117, nil, nil, 255, nil, nil, nil, nil, nil, nil, - 352, nil, nil, 119, 118, 120, 111, 64, 109, 108, - 112, nil, 110, 121, 122, nil, 104, 105, nil, nil, - 360, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 348, nil, nil, 344, nil, nil, 66, 67, nil, nil, - 68, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, nil, nil, nil, 81, 82, - 83, 85, 65, 92, 106, 107, 71, 72, nil, nil, - nil, 75, nil, 73, 74, 76, 356, 357, 79, 80, - nil, nil, nil, nil, nil, 84, 351, 359, 115, 114, - 116, 117, nil, nil, 255, nil, nil, nil, nil, nil, - nil, 352, nil, nil, 119, 118, 120, 111, 64, 109, - 108, 112, nil, 110, 121, 122, nil, 104, 105, nil, - nil, 360, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 348, nil, nil, 344, nil, nil, 66, 67, nil, - nil, 68, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 102, 90, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, nil, nil, nil, 81, - 82, 83, 85, 65, 92, 106, 107, 71, 72, nil, - nil, nil, 75, nil, 73, 74, 76, 356, 357, 79, - 80, nil, nil, nil, nil, nil, 84, 351, 359, 115, - 114, 116, 117, nil, nil, 255, nil, nil, nil, nil, - nil, nil, 352, nil, nil, 119, 118, 120, 111, 64, - 109, 108, 112, nil, 110, 121, 122, nil, 104, 105, - nil, nil, 360, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 348, nil, nil, 344, nil, nil, 66, 67, - nil, nil, 68, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 102, 90, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, nil, nil, nil, - 81, 82, 83, 85, 65, 92, 106, 107, 71, 72, - nil, nil, nil, 75, nil, 73, 74, 76, 356, 357, - 79, 80, nil, nil, nil, nil, nil, 84, 351, 359, - 115, 114, 116, 117, nil, nil, 255, nil, nil, nil, - nil, nil, nil, 352, nil, nil, 119, 118, 120, 111, - 64, 109, 108, 112, nil, 110, 121, 122, nil, 104, - 105, nil, nil, 360, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 348, nil, nil, 344, nil, nil, 66, - 67, nil, nil, 68, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, 81, 82, 83, 85, 65, 92, 106, 107, 71, - 72, nil, nil, nil, 75, nil, 73, 74, 76, 356, - 357, 79, 80, nil, nil, nil, nil, nil, 84, 351, - 359, 115, 114, 116, 117, nil, nil, 255, nil, nil, - nil, nil, nil, nil, 352, nil, nil, 119, 118, 120, - 111, 64, 109, 108, 112, nil, 110, 121, 122, nil, - 104, 105, nil, nil, 360, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 1054, nil, nil, 254, nil, nil, - 66, 67, nil, nil, 68, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - nil, nil, 81, 82, 83, 85, 65, 92, 106, 107, - 71, 72, nil, nil, nil, 75, nil, 73, 74, 76, - 356, 357, 79, 80, nil, nil, nil, nil, nil, 84, - 351, 359, 115, 114, 116, 117, nil, nil, 255, nil, - nil, nil, nil, nil, nil, 352, nil, nil, 119, 118, - 120, 111, 64, 109, 108, 112, nil, 110, 121, 122, - nil, 104, 105, nil, nil, 360, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 1112, nil, nil, 254, nil, - nil, 66, 67, nil, nil, 68, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, 81, 82, 83, 85, 65, 92, 106, - 107, 71, 72, nil, nil, nil, 75, nil, 73, 74, - 76, 356, 357, 79, 80, nil, nil, nil, nil, nil, - 84, 351, 359, 115, 114, 116, 117, nil, nil, 255, - nil, nil, nil, nil, nil, nil, 352, nil, nil, 119, - 118, 120, 111, 64, 109, 108, 112, nil, 110, 121, - 122, nil, 104, 105, nil, nil, 360, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 1112, nil, nil, 254, - nil, nil, 66, 67, nil, nil, 68, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, nil, nil, nil, nil, nil, nil, 85, nil, 92, - 106, 107, 186, 197, 187, 210, 183, 203, 193, 192, - 213, 214, 208, 191, 190, 185, 211, 215, 216, 195, - 184, 198, 202, 204, 196, 189, nil, nil, nil, 205, - 212, 207, 206, 199, 209, 194, 182, 201, 200, nil, - nil, nil, nil, nil, 181, 188, 179, 180, 176, 177, - 178, 139, 141, 138, nil, 140, nil, nil, nil, nil, - nil, nil, nil, 170, 171, nil, 167, 149, 150, 151, - 158, 155, 157, nil, nil, 152, 153, nil, nil, nil, - 172, 173, 159, 160, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 164, 163, nil, - 148, 169, 166, 165, 174, 161, 162, 156, 154, 146, - 168, 147, nil, nil, 175, 102, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 101, - 186, 197, 187, 210, 183, 203, 193, 192, 213, 214, - 208, 191, 190, 185, 211, 215, 216, 195, 184, 198, - 202, 204, 196, 189, nil, nil, nil, 205, 212, 207, - 206, 199, 209, 194, 182, 201, 200, nil, nil, nil, - nil, nil, 181, 188, 179, 180, 176, 177, 178, 139, - 141, nil, nil, 140, nil, nil, nil, nil, nil, nil, - nil, 170, 171, nil, 167, 149, 150, 151, 158, 155, - 157, nil, nil, 152, 153, nil, nil, nil, 172, 173, - 159, 160, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 164, 163, nil, 148, 169, - 166, 165, 174, 161, 162, 156, 154, 146, 168, 147, - nil, nil, 175, 102, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 101, 186, 197, - 187, 210, 183, 203, 193, 192, 213, 214, 208, 191, - 190, 185, 211, 215, 216, 195, 184, 198, 202, 204, - 196, 189, nil, nil, nil, 205, 212, 207, 206, 199, - 209, 194, 182, 201, 200, nil, nil, nil, nil, nil, - 181, 188, 179, 180, 176, 177, 178, 139, 141, nil, - nil, 140, nil, nil, nil, nil, nil, nil, nil, 170, - 171, nil, 167, 149, 150, 151, 158, 155, 157, nil, - nil, 152, 153, nil, nil, nil, 172, 173, 159, 160, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 164, 163, nil, 148, 169, 166, 165, - 174, 161, 162, 156, 154, 146, 168, 147, nil, nil, - 175, 102, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 101, 186, 197, 187, 210, - 183, 203, 193, 192, 213, 214, 208, 191, 190, 185, - 211, 215, 216, 195, 184, 198, 202, 204, 196, 189, - nil, nil, nil, 205, 212, 207, 206, 199, 209, 194, - 182, 201, 200, nil, nil, nil, nil, nil, 181, 188, - 179, 180, 176, 177, 178, 139, 141, nil, nil, 140, - nil, nil, nil, nil, nil, nil, nil, 170, 171, nil, - 167, 149, 150, 151, 158, 155, 157, nil, nil, 152, - 153, nil, nil, nil, 172, 173, 159, 160, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 164, 163, nil, 148, 169, 166, 165, 174, 161, - 162, 156, 154, 146, 168, 147, nil, nil, 175, 102, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 101, 186, 197, 187, 210, 183, 203, - 193, 192, 213, 214, 208, 191, 190, 185, 211, 215, - 216, 195, 184, 198, 202, 204, 196, 189, nil, nil, - nil, 205, 212, 207, 295, 294, 296, 293, 182, 201, - 200, nil, nil, nil, nil, nil, 181, 188, 179, 180, - 290, 291, 292, 288, 141, 109, 108, 289, nil, 110, - nil, nil, nil, nil, nil, 170, 171, nil, 167, 149, - 150, 151, 158, 155, 157, nil, nil, 152, 153, nil, - nil, nil, 172, 173, 159, 160, nil, nil, nil, nil, - nil, 300, nil, nil, nil, nil, nil, nil, nil, 164, - 163, nil, 148, 169, 166, 165, 174, 161, 162, 156, - 154, 146, 168, 147, nil, nil, 175, 186, 197, 187, - 210, 183, 203, 193, 192, 213, 214, 208, 191, 190, - 185, 211, 215, 216, 195, 184, 198, 202, 204, 196, - 189, nil, nil, nil, 205, 212, 207, 206, 199, 209, - 194, 182, 201, 200, nil, nil, nil, nil, nil, 181, - 188, 179, 180, 176, 177, 178, 139, 141, nil, nil, - 140, nil, nil, nil, nil, nil, nil, nil, 170, 171, - nil, 167, 149, 150, 151, 158, 155, 157, nil, nil, - 152, 153, nil, nil, nil, 172, 173, 159, 160, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 164, 163, nil, 148, 169, 166, 165, 174, - 161, 162, 156, 154, 146, 168, 147, nil, nil, 175, - 115, 114, 116, 117, nil, nil, 494, nil, 491, 490, - 489, 499, 492, nil, nil, nil, 119, 118, 120, 1009, - nil, 502, nil, 1012, 989, nil, nil, nil, nil, 104, - 105, nil, nil, 360, 502, nil, nil, nil, nil, nil, - nil, nil, nil, 497, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 1011, 510, 509, 982, nil, nil, 503, - 980, nil, nil, 981, nil, 984, nil, nil, nil, nil, - nil, nil, 503, nil, nil, nil, nil, nil, nil, 1010, - nil, nil, nil, 102, 990, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, 115, 114, - 116, 117, nil, nil, 85, nil, 92, 106, 107, nil, - nil, 997, 998, nil, 119, 118, 120, 1009, nil, nil, - nil, 1012, 989, nil, nil, nil, nil, 104, 105, nil, - nil, 360, 502, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 1011, nil, nil, 982, nil, nil, nil, 980, nil, - nil, 981, nil, 984, nil, nil, nil, nil, nil, nil, - 503, nil, nil, nil, nil, nil, nil, 1010, nil, nil, - nil, 102, 990, 93, 94, nil, 95, 97, 96, 98, - nil, nil, nil, nil, 91, 101, 115, 114, 116, 117, - nil, nil, 85, nil, 92, 106, 107, nil, nil, 997, - 998, nil, 119, 118, 120, 1009, nil, nil, nil, 1012, - nil, nil, nil, nil, nil, 104, 105, nil, nil, 360, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 1011, - nil, nil, 982, nil, nil, nil, 980, nil, nil, 981, - nil, 984, nil, nil, nil, nil, nil, nil, 494, nil, - 491, 490, 489, 499, 492, 1010, nil, nil, nil, 102, - 90, 93, 94, 502, 95, 97, 96, 98, nil, nil, - nil, nil, 91, 101, 241, 115, 114, 116, 117, nil, - 85, nil, 92, 106, 107, 497, nil, 997, 998, nil, - nil, 119, 118, 120, 1009, nil, 510, 509, 1012, nil, - nil, 503, nil, nil, 104, 105, nil, nil, 360, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 1011, nil, - nil, 982, nil, nil, nil, 980, nil, nil, 981, nil, - nil, 488, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 1010, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, 115, 114, 116, 117, nil, nil, 85, - nil, 92, 106, 107, nil, nil, 997, 998, nil, 119, - 118, 120, 1009, nil, nil, 494, 1012, 491, 490, 489, - 499, 492, 104, 105, nil, nil, 360, nil, nil, nil, - 502, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 1011, nil, nil, 982, - nil, nil, 497, 980, nil, nil, 981, nil, 984, nil, - nil, 507, 506, 510, 509, nil, nil, nil, 503, nil, - nil, nil, 1010, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, 115, 114, 116, 117, nil, nil, 85, nil, 92, - 106, 107, nil, nil, 997, 998, nil, 119, 118, 120, - 1009, nil, nil, 494, 1012, 491, 490, 489, 499, 492, - 104, 105, nil, nil, 360, nil, nil, nil, 502, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 1011, nil, nil, 982, nil, nil, - 497, 980, nil, nil, 981, nil, nil, nil, nil, 507, - 506, 510, 509, nil, nil, nil, 503, nil, nil, nil, - 1010, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, 115, - 114, 116, 117, nil, nil, 85, nil, 92, 106, 107, - nil, nil, 997, 998, nil, 119, 118, 120, 1009, nil, - nil, nil, 1012, 989, nil, nil, nil, nil, 104, 105, - nil, nil, 360, 502, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 1011, nil, nil, 982, nil, nil, nil, 980, - nil, nil, 981, nil, 984, nil, nil, nil, nil, nil, - nil, 503, nil, nil, nil, nil, nil, nil, 1010, nil, - nil, nil, 102, 990, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, 115, 114, 116, - 117, nil, nil, 85, nil, 92, 106, 107, nil, nil, - 997, 998, nil, 119, 118, 120, 1009, nil, nil, nil, - 1012, 989, nil, nil, nil, nil, 104, 105, nil, nil, - 360, 502, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 1011, nil, nil, 982, nil, nil, nil, 980, nil, nil, - 981, nil, 984, nil, nil, nil, nil, nil, nil, 503, - nil, nil, nil, nil, nil, nil, 1010, nil, nil, nil, - 102, 990, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, 115, 114, 116, 117, nil, - nil, 85, nil, 92, 106, 107, nil, nil, 997, 998, - nil, 119, 118, 120, 1009, nil, nil, 494, 1012, 491, - 490, 489, 499, 492, 104, 105, nil, nil, 360, nil, - nil, nil, 502, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 1011, nil, - nil, 982, nil, nil, 497, 980, nil, nil, 981, nil, - 984, nil, nil, nil, nil, 510, 509, nil, nil, nil, - 503, nil, nil, nil, 1010, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, 115, 114, 116, 117, nil, nil, 85, - nil, 92, 106, 107, nil, nil, 997, 998, nil, 119, - 118, 120, 1009, nil, nil, nil, 1012, nil, nil, nil, - nil, nil, 104, 105, nil, nil, 360, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 1011, nil, nil, 982, - nil, nil, nil, 980, nil, nil, 981, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 1010, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, 115, 114, 116, 117, nil, nil, 85, nil, 92, - 106, 107, nil, nil, 997, 998, nil, 119, 118, 120, - 1009, nil, nil, nil, 1012, nil, nil, nil, nil, nil, - 104, 105, nil, nil, 360, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 1011, nil, nil, 982, nil, nil, - nil, 980, nil, nil, 981, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 1010, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, 115, - 114, 116, 117, nil, nil, 85, nil, 92, 106, 107, - nil, nil, 997, 998, nil, 119, 118, 120, 1009, nil, - nil, nil, 1012, 989, nil, nil, nil, nil, 104, 105, - nil, nil, 360, 502, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 1011, nil, nil, 982, nil, nil, nil, 980, - nil, nil, 981, nil, 984, nil, nil, nil, nil, nil, - nil, 503, nil, nil, nil, nil, nil, nil, 1010, nil, - nil, nil, 102, 990, 93, 94, nil, 95, 97, 96, - 98, nil, nil, nil, nil, 91, 101, 115, 114, 116, - 117, nil, nil, 85, nil, 92, 106, 107, nil, nil, - 997, 998, nil, 119, 118, 120, 1009, nil, nil, nil, - 1012, nil, nil, nil, nil, nil, 104, 105, nil, nil, - 360, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 1011, nil, nil, 982, nil, nil, nil, 980, nil, nil, - 981, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 1010, nil, nil, nil, - 102, 90, 93, 94, nil, 95, 97, 96, 98, nil, - nil, nil, nil, 91, 101, 115, 114, 116, 117, nil, - nil, 85, nil, 92, 106, 107, nil, nil, 997, 998, - nil, 119, 118, 120, 1009, nil, nil, nil, 1012, nil, - nil, nil, nil, nil, 104, 105, nil, nil, 360, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 1011, nil, - nil, 982, nil, nil, nil, 980, nil, nil, 981, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 1010, nil, nil, nil, 102, 90, - 93, 94, nil, 95, 97, 96, 98, nil, nil, nil, - nil, 91, 101, 115, 114, 116, 117, nil, nil, 85, - nil, 92, 106, 107, nil, nil, 997, 998, nil, 119, - 118, 120, 1009, nil, nil, nil, 1012, nil, nil, nil, - nil, nil, 104, 105, nil, nil, 360, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 1011, nil, nil, 982, - nil, nil, nil, 980, nil, nil, 981, nil, 984, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 1010, nil, nil, nil, 102, 90, 93, 94, - nil, 95, 97, 96, 98, nil, nil, nil, nil, 91, - 101, 115, 114, 116, 117, nil, nil, 85, nil, 92, - 106, 107, nil, nil, 997, 998, nil, 119, 118, 120, - 1009, nil, nil, nil, 1012, nil, nil, nil, nil, nil, - 104, 105, nil, nil, 360, nil, nil, nil, nil, nil, - nil, nil, 115, 114, 116, 117, nil, nil, nil, nil, - nil, nil, nil, nil, 1011, nil, nil, 982, 119, 118, - 120, 980, nil, nil, 981, nil, nil, nil, nil, nil, - nil, 104, 105, nil, nil, 360, nil, nil, nil, nil, - 1010, nil, nil, nil, 102, 90, 93, 94, nil, 95, - 97, 96, 98, nil, nil, nil, nil, 91, 101, nil, - nil, nil, nil, nil, nil, 85, nil, 92, 106, 107, - nil, nil, 997, 998, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - 115, 114, 116, 117, nil, nil, 85, nil, 92, 106, - 107, nil, nil, nil, nil, nil, 119, 118, 120, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 104, - 105, nil, nil, 360, 115, 114, 116, 117, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 119, 118, 120, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 104, 105, nil, nil, 360, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 102, 90, 93, 94, nil, 95, 97, - 96, 98, nil, nil, nil, nil, 91, 101, nil, nil, - nil, nil, nil, nil, 85, nil, 92, 106, 107, nil, - nil, nil, nil, nil, nil, nil, nil, 102, 90, 93, - 94, nil, 95, 97, 96, 98, nil, nil, nil, nil, - 91, 101, 115, 114, 116, 117, nil, nil, 85, nil, - 92, 106, 107, nil, nil, nil, nil, nil, 119, 118, - 120, 494, nil, 491, 490, 489, 499, 492, nil, nil, - nil, 104, 105, nil, nil, 360, 502, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 497, nil, - nil, nil, nil, nil, nil, nil, nil, 507, 506, 510, - 509, nil, nil, nil, 503, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 102, 90, 93, 94, nil, - 95, 97, 96, 98, nil, nil, nil, nil, 91, 101, - nil, nil, nil, nil, nil, nil, 85, nil, 92, 106, - 107, nil, nil, 494, 488, 491, 490, 489, 499, 492, - nil, 494, nil, 491, 490, 489, 499, 492, 502, nil, - nil, nil, nil, nil, nil, nil, 502, nil, 494, nil, - 491, 490, 489, 499, 492, nil, nil, nil, nil, nil, - 497, nil, nil, 502, nil, nil, nil, nil, 497, 507, - 506, 510, 509, nil, nil, nil, 503, 507, 506, 510, - 509, nil, nil, nil, 503, 497, nil, nil, nil, nil, - nil, nil, nil, nil, 507, 506, 510, 509, nil, nil, - 494, 503, 491, 490, 489, 499, 492, 494, nil, 491, - 490, 489, 499, 492, nil, 502, 488, nil, nil, nil, - nil, nil, 502, nil, 488, 494, nil, 491, 490, 489, - 499, 492, nil, nil, nil, nil, nil, 497, nil, nil, - 502, 488, nil, nil, 497, nil, nil, nil, 510, 509, - nil, nil, nil, 503, nil, 510, 509, nil, nil, nil, - 503, 494, 497, 491, 490, 489, 499, 492, nil, nil, - nil, nil, nil, 510, 509, nil, 502, nil, 503, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 488, nil, nil, nil, nil, 497, nil, - 488, nil, nil, nil, nil, nil, nil, nil, nil, 510, - 509, 459, 463, nil, 503, 460, nil, nil, 488, nil, - nil, nil, nil, 170, 171, nil, 167, 149, 150, 151, - 158, 155, 157, nil, nil, 152, 153, nil, nil, nil, - 172, 173, 159, 160, nil, nil, nil, nil, nil, 307, - nil, nil, nil, nil, 488, nil, nil, 164, 163, nil, - 148, 169, 166, 165, 174, 161, 162, 156, 154, 146, - 168, 147, 467, 471, 175, nil, 466, nil, nil, nil, - nil, nil, nil, nil, 170, 171, nil, 167, 149, 150, - 151, 158, 155, 157, nil, nil, 152, 153, nil, nil, - nil, 172, 173, 159, 160, nil, nil, nil, nil, nil, - 307, nil, nil, nil, nil, nil, nil, nil, 164, 163, - nil, 148, 169, 166, 165, 174, 161, 162, 156, 154, - 146, 168, 147, 560, 463, 175, nil, 561, nil, nil, - nil, nil, nil, nil, nil, 170, 171, nil, 167, 149, - 150, 151, 158, 155, 157, nil, nil, 152, 153, nil, - nil, nil, 172, 173, 159, 160, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 164, - 163, nil, 148, 169, 166, 165, 174, 161, 162, 156, - 154, 146, 168, 147, 735, 463, 175, nil, 736, nil, - nil, nil, nil, nil, nil, nil, 170, 171, nil, 167, - 149, 150, 151, 158, 155, 157, nil, nil, 152, 153, - nil, nil, nil, 172, 173, 159, 160, nil, nil, nil, - nil, nil, 307, nil, nil, nil, nil, nil, nil, nil, - 164, 163, nil, 148, 169, 166, 165, 174, 161, 162, - 156, 154, 146, 168, 147, 738, 471, 175, nil, 737, - nil, nil, nil, nil, nil, nil, nil, 170, 171, nil, - 167, 149, 150, 151, 158, 155, 157, nil, nil, 152, - 153, nil, nil, nil, 172, 173, 159, 160, nil, nil, - nil, nil, nil, 307, nil, nil, nil, nil, nil, nil, - nil, 164, 163, nil, 148, 169, 166, 165, 174, 161, - 162, 156, 154, 146, 168, 147, 773, 463, 175, nil, - 774, nil, nil, nil, nil, nil, nil, nil, 170, 171, - nil, 167, 149, 150, 151, 158, 155, 157, nil, nil, - 152, 153, nil, nil, nil, 172, 173, 159, 160, nil, - nil, nil, nil, nil, 307, nil, nil, nil, nil, nil, - nil, nil, 164, 163, nil, 148, 169, 166, 165, 174, - 161, 162, 156, 154, 146, 168, 147, 776, 471, 175, - nil, 777, nil, nil, nil, nil, nil, nil, nil, 170, - 171, nil, 167, 149, 150, 151, 158, 155, 157, nil, - nil, 152, 153, nil, nil, nil, 172, 173, 159, 160, - nil, nil, nil, nil, nil, 307, nil, nil, nil, nil, - nil, nil, nil, 164, 163, nil, 148, 169, 166, 165, - 174, 161, 162, 156, 154, 146, 168, 147, 735, 463, - 175, nil, 736, nil, nil, nil, nil, nil, nil, nil, - 170, 171, nil, 167, 149, 150, 151, 158, 155, 157, - nil, nil, 152, 153, nil, nil, nil, 172, 173, 159, - 160, nil, nil, nil, nil, nil, 307, nil, nil, nil, - nil, nil, nil, nil, 164, 163, nil, 148, 169, 166, - 165, 174, 161, 162, 156, 154, 146, 168, 147, 738, - 471, 175, nil, 782, nil, nil, nil, nil, nil, nil, - nil, 170, 171, nil, 167, 149, 150, 151, 158, 155, - 157, nil, nil, 152, 153, nil, nil, nil, 172, 173, - 159, 160, nil, nil, nil, nil, nil, 307, nil, nil, - nil, nil, nil, nil, nil, 164, 163, nil, 148, 169, - 166, 165, 174, 161, 162, 156, 154, 146, 168, 147, - 803, 463, 175, nil, 804, nil, nil, nil, nil, nil, - nil, nil, 170, 171, nil, 167, 149, 150, 151, 158, - 155, 157, nil, nil, 152, 153, nil, nil, nil, 172, - 173, 159, 160, nil, nil, nil, nil, nil, 307, nil, - nil, nil, nil, nil, nil, nil, 164, 163, nil, 148, - 169, 166, 165, 174, 161, 162, 156, 154, 146, 168, - 147, 805, 471, 175, nil, 806, nil, nil, nil, nil, - nil, nil, nil, 170, 171, nil, 167, 149, 150, 151, - 158, 155, 157, nil, nil, 152, 153, nil, nil, nil, - 172, 173, 159, 160, nil, nil, nil, nil, nil, 307, - nil, nil, nil, nil, nil, nil, nil, 164, 163, nil, - 148, 169, 166, 165, 174, 161, 162, 156, 154, 146, - 168, 147, 808, 471, 175, nil, 809, nil, nil, nil, - nil, nil, nil, nil, 170, 171, nil, 167, 149, 150, - 151, 158, 155, 157, nil, nil, 152, 153, nil, nil, - nil, 172, 173, 159, 160, nil, nil, nil, nil, nil, - 307, nil, nil, nil, nil, nil, nil, nil, 164, 163, - nil, 148, 169, 166, 165, 174, 161, 162, 156, 154, - 146, 168, 147, 560, 463, 175, nil, 561, nil, nil, - nil, nil, nil, nil, nil, 170, 171, nil, 167, 149, - 150, 151, 158, 155, 157, nil, nil, 152, 153, nil, - nil, nil, 172, 173, 159, 160, nil, nil, nil, nil, - nil, 307, nil, nil, nil, nil, nil, nil, nil, 164, - 163, nil, 148, 169, 166, 165, 174, 161, 162, 156, - 154, 146, 168, 147, 834, 463, 175, nil, 835, nil, - nil, nil, nil, nil, nil, nil, 170, 171, nil, 167, - 149, 150, 151, 158, 155, 157, nil, nil, 152, 153, - nil, nil, nil, 172, 173, 159, 160, nil, nil, nil, - nil, nil, 307, nil, nil, nil, nil, nil, nil, nil, - 164, 163, nil, 148, 169, 166, 165, 174, 161, 162, - 156, 154, 146, 168, 147, 837, 471, 175, nil, 836, - nil, nil, nil, nil, nil, nil, nil, 170, 171, nil, - 167, 149, 150, 151, 158, 155, 157, nil, nil, 152, - 153, nil, nil, nil, 172, 173, 159, 160, nil, nil, - nil, nil, nil, 307, nil, nil, nil, nil, nil, nil, - nil, 164, 163, nil, 148, 169, 166, 165, 174, 161, - 162, 156, 154, 146, 168, 147, 1189, 463, 175, nil, - 1190, nil, nil, nil, nil, nil, nil, nil, 170, 171, - nil, 167, 149, 150, 151, 158, 155, 157, nil, nil, - 152, 153, nil, nil, nil, 172, 173, 159, 160, nil, - nil, nil, nil, nil, 307, nil, nil, nil, nil, nil, - nil, nil, 164, 163, nil, 148, 169, 166, 165, 174, - 161, 162, 156, 154, 146, 168, 147, 1191, 471, 175, - nil, 1192, nil, nil, nil, nil, nil, nil, nil, 170, - 171, nil, 167, 149, 150, 151, 158, 155, 157, nil, - nil, 152, 153, nil, nil, nil, 172, 173, 159, 160, - nil, nil, nil, nil, nil, 307, nil, nil, nil, nil, - nil, nil, nil, 164, 163, nil, 148, 169, 166, 165, - 174, 161, 162, 156, 154, 146, 168, 147, 1219, 471, - 175, nil, 1218, nil, nil, nil, nil, nil, nil, nil, - 170, 171, nil, 167, 149, 150, 151, 158, 155, 157, - nil, nil, 152, 153, nil, nil, nil, 172, 173, 159, - 160, nil, nil, nil, nil, nil, 307, nil, nil, nil, - nil, nil, nil, nil, 164, 163, nil, 148, 169, 166, - 165, 174, 161, 162, 156, 154, 146, 168, 147, nil, - nil, 175 ] - -racc_action_check = [ - 111, 244, 69, 518, 518, 751, 393, 111, 111, 111, - 970, 385, 111, 111, 111, 18, 111, 31, 1158, 417, - 5, 23, 18, 386, 111, 5, 111, 111, 111, 557, - 557, 18, 478, 418, 394, 397, 111, 111, 801, 111, - 111, 111, 111, 111, 950, 1034, 1051, 1052, 1055, 1244, - 478, 635, 1, 333, 1129, 1071, 970, 245, 333, 1244, - 244, 1158, 23, 247, 803, 804, 111, 111, 111, 111, - 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, - 18, 31, 111, 111, 111, 417, 111, 111, 626, 69, - 111, 816, 751, 111, 111, 922, 111, 518, 111, 418, - 111, 1071, 111, 111, 31, 111, 111, 111, 111, 111, - 1181, 111, 112, 111, 1189, 393, 245, 911, 911, 112, - 112, 112, 247, 557, 112, 112, 112, 111, 112, 385, - 111, 111, 111, 111, 385, 111, 112, 111, 112, 112, - 112, 386, 111, 394, 397, 111, 386, 19, 112, 112, - 1190, 112, 112, 112, 112, 112, 801, 1191, 1225, 801, - 635, 801, 950, 1034, 1051, 1052, 1055, 950, 1034, 1051, - 1052, 1055, 1129, 803, 804, 805, 1066, 1129, 112, 112, - 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, - 112, 112, 626, 1192, 112, 112, 112, 626, 112, 112, - 816, 806, 112, 19, 922, 112, 112, 1038, 112, 1038, - 112, 911, 112, 20, 112, 112, 1066, 112, 112, 112, - 112, 112, 466, 112, 21, 112, 444, 524, 1181, 466, - 466, 466, 1189, 1181, 1191, 466, 466, 1189, 466, 112, - 805, 773, 112, 112, 112, 112, 466, 112, 29, 112, - 353, 1067, 629, 412, 112, 29, 3, 112, 466, 466, - 629, 466, 466, 466, 466, 466, 806, 768, 1190, 20, - 1192, 21, 774, 1190, 776, 1191, 1225, 580, 909, 768, - 1191, 1225, 9, 21, 805, 444, 524, 1067, 466, 466, - 466, 466, 466, 466, 466, 466, 466, 466, 466, 466, - 466, 466, 12, 252, 466, 466, 466, 773, 466, 466, - 806, 1192, 466, 29, 353, 466, 1192, 412, 412, 412, - 466, 14, 466, 735, 466, 466, 1086, 466, 466, 466, - 466, 466, 253, 466, 466, 466, 15, 353, 774, 776, - 776, 580, 580, 580, 909, 17, 1078, 773, 698, 466, - 773, 88, 466, 466, 413, 466, 1078, 466, 580, 252, - 390, 467, 773, 88, 466, 390, 736, 466, 467, 467, - 467, 48, 48, 88, 467, 467, 27, 467, 774, 981, - 776, 774, 735, 776, 909, 467, 467, 909, 253, 698, - 1086, 1086, 1086, 774, 1078, 776, 981, 467, 467, 909, - 467, 467, 467, 467, 467, 377, 1078, 1086, 377, 234, - 54, 234, 234, 234, 234, 234, 287, 54, 413, 413, - 413, 360, 360, 287, 234, 736, 54, 467, 467, 467, - 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, - 467, 889, 43, 467, 467, 467, 234, 467, 467, 48, - 48, 467, 1204, 42, 467, 234, 234, 234, 234, 467, - 660, 467, 234, 467, 467, 414, 467, 467, 467, 467, - 467, 737, 467, 467, 467, 54, 834, 835, 737, 737, - 737, 287, 889, 737, 737, 737, 288, 737, 467, 43, - 45, 467, 467, 288, 467, 737, 467, 737, 737, 360, - 360, 43, 234, 467, 401, 53, 467, 737, 737, 991, - 737, 737, 737, 737, 737, 512, 1204, 1204, 16, 16, - 512, 662, 888, 415, 660, 660, 217, 991, 416, 414, - 414, 414, 230, 1204, 660, 834, 835, 737, 737, 737, - 737, 737, 737, 737, 737, 737, 737, 737, 737, 737, - 737, 288, 44, 737, 737, 737, 401, 737, 737, 378, - 232, 737, 378, 401, 737, 737, 419, 737, 401, 737, - 937, 737, 401, 737, 737, 236, 737, 737, 737, 737, - 737, 888, 737, 737, 737, 662, 662, 415, 415, 415, - 289, 401, 416, 416, 416, 662, 243, 289, 737, 44, - 290, 737, 737, 243, 737, 246, 737, 290, 291, 364, - 738, 44, 243, 737, 248, 291, 737, 738, 738, 738, - 645, 401, 738, 738, 738, 645, 738, 51, 51, 937, - 419, 419, 419, 292, 738, 738, 738, 738, 738, 979, - 292, 403, 384, 384, 979, 403, 738, 738, 979, 738, - 738, 738, 738, 738, 1011, 289, 364, 926, 1011, 293, - 294, 243, 926, 51, 51, 290, 293, 294, 364, 381, - 249, 782, 381, 291, 782, 255, 738, 738, 738, 738, - 738, 738, 738, 738, 738, 738, 738, 738, 738, 738, - 306, 1084, 738, 738, 738, 320, 738, 738, 292, 459, - 738, 1084, 295, 738, 738, 321, 738, 296, 738, 295, - 738, 324, 738, 738, 296, 738, 738, 738, 738, 738, - 836, 738, 738, 738, 293, 294, 138, 836, 836, 836, - 782, 138, 138, 836, 836, 337, 836, 738, 535, 1084, - 738, 738, 738, 738, 836, 738, 459, 738, 710, 710, - 1070, 1084, 738, 402, 1070, 738, 836, 836, 459, 836, - 836, 836, 836, 836, 338, 788, 340, 295, 788, 345, - 535, 707, 296, 341, 535, 535, 345, 460, 653, 653, - 342, 707, 653, 653, 653, 345, 836, 836, 836, 836, - 836, 836, 836, 836, 836, 836, 836, 836, 836, 836, - 348, 682, 836, 836, 836, 402, 836, 836, 1121, 351, - 836, 1121, 402, 836, 707, 707, 352, 402, 836, 707, - 836, 402, 836, 836, 460, 836, 836, 836, 836, 836, - 354, 836, 836, 836, 345, 355, 460, 789, 789, 903, - 402, 903, 903, 903, 903, 903, 359, 836, 682, 361, - 836, 836, 808, 836, 903, 836, 368, 536, 370, 837, - 682, 373, 836, 994, 994, 836, 837, 837, 837, 1098, - 402, 379, 837, 837, 380, 837, 903, 1180, 1180, 1098, - 1182, 1182, 382, 837, 837, 903, 903, 903, 903, 536, - 346, 391, 903, 536, 536, 837, 837, 346, 837, 837, - 837, 837, 837, 392, 808, 396, 346, 398, 347, 407, - 427, 808, 1098, 1098, 433, 347, 808, 1098, 903, 435, - 808, 436, 437, 441, 347, 837, 837, 837, 837, 837, - 837, 837, 837, 837, 837, 837, 837, 837, 837, 808, - 445, 837, 837, 837, 455, 837, 837, 349, 457, 837, - 458, 468, 837, 474, 349, 346, 475, 837, 479, 837, - 480, 837, 837, 349, 837, 837, 837, 837, 837, 808, - 837, 837, 837, 347, 481, 365, 484, 485, 486, 496, - 395, 405, 365, 508, 511, 514, 837, 395, 405, 837, - 837, 365, 837, 520, 837, 443, 395, 405, 528, 529, - 537, 837, 443, 538, 837, 2, 2, 2, 2, 2, - 2, 443, 349, 539, 2, 2, 540, 565, 566, 2, - 567, 2, 2, 2, 2, 2, 2, 2, 25, 571, - 587, 588, 591, 2, 2, 2, 2, 2, 2, 2, - 365, 593, 2, 598, 602, 395, 405, 612, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 443, 2, 2, 2, 613, 2, 2, 2, 2, 2, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 597, 25, 25, 623, 627, 25, 25, 597, 2, - 628, 25, 2, 630, 657, 2, 2, 597, 665, 2, - 667, 2, 25, 675, 25, 2, 25, 25, 683, 25, - 25, 25, 25, 25, 2, 25, 688, 694, 696, 2, - 2, 2, 2, 638, 2, 2, 2, 2, 700, 701, - 638, 717, 2, 2, 722, 25, 723, 725, 730, 638, - 2, 731, 2, 2, 2, 739, 597, 2, 2, 38, - 38, 38, 38, 38, 38, 745, 748, 750, 38, 38, - 756, 757, 758, 38, 760, 38, 38, 38, 38, 38, - 38, 38, 8, 8, 8, 8, 8, 38, 38, 38, - 38, 38, 38, 38, 762, 770, 38, 772, 638, 775, - 778, 448, 38, 38, 38, 38, 38, 38, 38, 38, - 38, 38, 38, 38, 779, 38, 38, 38, 783, 38, - 38, 38, 38, 38, 448, 448, 448, 448, 448, 448, - 448, 448, 448, 448, 448, 777, 448, 448, 791, 797, - 448, 448, 777, 38, 798, 802, 38, 777, 811, 38, - 38, 777, 815, 38, 817, 38, 448, 824, 448, 38, - 448, 448, 826, 448, 448, 448, 448, 448, 38, 448, - 827, 828, 831, 38, 38, 38, 38, 1053, 38, 38, - 38, 38, 833, 842, 1053, 850, 38, 38, 857, 448, - 860, 448, 861, 1053, 38, 864, 38, 38, 38, 866, - 777, 38, 38, 66, 66, 66, 66, 66, 66, 869, - 870, 872, 66, 66, 873, 875, 879, 66, 896, 66, - 66, 66, 66, 66, 66, 66, 336, 336, 336, 336, - 336, 66, 66, 66, 66, 66, 66, 66, 899, 900, - 66, 908, 1053, 913, 916, 454, 66, 66, 66, 66, - 66, 66, 66, 66, 66, 66, 66, 66, 923, 66, - 66, 66, 925, 66, 66, 66, 66, 66, 454, 454, - 454, 454, 454, 454, 454, 454, 454, 454, 454, 809, - 454, 454, 932, 933, 454, 454, 809, 66, 934, 936, - 66, 809, 943, 66, 66, 809, 944, 66, 965, 66, - 454, 966, 454, 66, 454, 454, 975, 454, 454, 454, - 454, 454, 66, 454, 983, 984, 985, 66, 66, 66, - 66, 1111, 66, 66, 66, 66, 1018, 1019, 1111, 1021, - 66, 66, 1022, 454, 1023, 1025, 1026, 1111, 66, 1027, - 66, 66, 66, 1042, 809, 66, 66, 136, 136, 136, - 136, 136, 136, 1054, 1057, 1058, 136, 136, 1059, 1060, - 1064, 136, 1072, 136, 136, 136, 136, 136, 136, 136, - 585, 585, 585, 585, 585, 136, 136, 136, 136, 136, - 136, 136, 1073, 1077, 136, 1080, 1111, 1085, 1109, 1112, - 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, - 136, 136, 1119, 136, 136, 136, 1120, 136, 136, 136, - 136, 136, 318, 318, 318, 318, 318, 318, 318, 318, - 318, 318, 318, 1177, 318, 318, 1125, 1135, 318, 318, - 1177, 136, 1137, 1142, 136, 1143, 1144, 136, 136, 1177, - 1145, 136, 1146, 136, 318, 1147, 318, 136, 318, 318, - 1151, 318, 318, 318, 318, 318, 136, 318, 1152, 1153, - 1155, 136, 136, 136, 136, 1159, 136, 136, 136, 136, - 1166, 1167, 1170, 1171, 136, 136, 1172, 318, 1173, 1175, - 1188, 1193, 136, 1218, 136, 136, 136, 1219, 1177, 136, - 136, 219, 219, 219, 219, 219, 219, 1227, 1228, 1231, - 219, 219, 1232, 1233, 1234, 219, 1245, 219, 219, 219, - 219, 219, 219, 219, nil, nil, nil, nil, nil, 219, - 219, 219, 219, 219, 219, 219, nil, 724, 219, 724, - 724, 724, nil, 724, 219, 219, 219, 219, 219, 219, - 219, 219, 219, 219, 219, 219, nil, 219, 219, 219, - nil, 219, 219, 219, 219, 219, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, nil, 554, 554, - nil, nil, 554, 554, nil, 219, nil, 1010, 219, 1010, - 1010, 219, 219, 1010, nil, 219, nil, 219, 554, nil, - 554, 219, 554, 554, nil, 554, 554, 554, 554, 554, - 219, 554, nil, nil, nil, 219, 219, 219, 219, nil, - 219, 219, 219, 219, 1010, nil, nil, nil, 219, 219, - 554, 554, nil, nil, nil, nil, 219, nil, 219, 219, - 219, nil, nil, 219, 219, 231, 231, 231, 231, 231, - 231, nil, nil, nil, 231, 231, nil, nil, nil, 231, - nil, 231, 231, 231, 231, 231, 231, 231, nil, nil, - nil, nil, nil, 231, 231, 231, 231, 231, 231, 231, - nil, 1045, 231, 1045, 1045, 1045, nil, 1045, 231, 231, - 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, - nil, 231, 231, 231, nil, 231, 231, 231, 231, 231, - 699, 699, 699, 699, 699, 699, 699, 699, 699, 699, - 699, nil, 699, 699, nil, nil, 699, 699, nil, 231, - nil, nil, 231, nil, nil, 231, 231, nil, nil, 231, - nil, 231, 699, nil, 699, 231, 699, 699, nil, 699, - 699, 699, 699, 699, 231, 699, nil, nil, nil, 231, - 231, 231, 231, nil, 231, 231, 231, 231, nil, nil, - nil, nil, 231, 231, nil, 699, nil, nil, nil, nil, - 231, nil, 231, 231, 231, nil, nil, 231, 231, 237, - 237, 237, 237, 237, 237, nil, nil, nil, 237, 237, - nil, nil, nil, 237, nil, 237, 237, 237, 237, 237, - 237, 237, nil, nil, nil, nil, nil, 237, 237, 237, - 237, 237, 237, 237, nil, 1186, 237, 1186, 1186, 1186, - nil, 1186, 237, 237, 237, 237, 237, 237, 237, 237, - 237, 237, 237, 237, nil, 237, 237, 237, nil, 237, - 237, 237, 237, 237, 784, 784, 784, 784, 784, 784, - 784, 784, 784, 784, 784, nil, 784, 784, nil, nil, - 784, 784, nil, 237, nil, nil, 237, nil, nil, 237, - 237, nil, nil, 237, nil, 237, 784, nil, 784, 237, - 784, 784, nil, 784, 784, 784, 784, 784, 237, 784, - nil, nil, nil, 237, 237, 237, 237, nil, 237, 237, - 237, 237, nil, nil, nil, nil, 237, 237, nil, 784, - nil, nil, nil, nil, 237, nil, 237, 237, 237, nil, - nil, 237, 237, 254, 254, 254, 254, 254, 254, nil, - nil, nil, 254, 254, nil, nil, nil, 254, nil, 254, - 254, 254, 254, 254, 254, 254, nil, nil, nil, nil, - nil, 254, 254, 254, 254, 254, 254, 254, nil, nil, - 254, nil, nil, nil, nil, nil, 254, 254, 254, 254, - 254, 254, 254, 254, 254, 254, 254, 254, nil, 254, - 254, 254, nil, 254, 254, 254, 254, 254, 839, 839, - 839, 839, 839, 839, 839, 839, 839, 839, 839, nil, - 839, 839, nil, nil, 839, 839, nil, 254, nil, nil, - 254, nil, nil, 254, 254, nil, nil, 254, nil, 254, - 839, nil, 839, 254, 839, 839, nil, 839, 839, 839, - 839, 839, 254, 839, nil, nil, nil, 254, 254, 254, - 254, nil, 254, 254, 254, 254, nil, nil, nil, nil, - 254, 254, nil, 839, nil, nil, nil, nil, 254, nil, - 254, 254, 254, nil, nil, 254, 254, 339, 339, 339, - 339, 339, 339, nil, nil, nil, 339, 339, nil, nil, - nil, 339, nil, 339, 339, 339, 339, 339, 339, 339, - nil, nil, nil, nil, nil, 339, 339, 339, 339, 339, - 339, 339, nil, nil, 339, nil, nil, nil, nil, nil, - 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, - 339, 339, nil, 339, 339, 339, nil, 339, 339, 339, - 339, 339, 942, 942, 942, 942, 942, 942, 942, 942, - 942, 942, 942, nil, 942, 942, nil, nil, 942, 942, - nil, 339, nil, nil, 339, nil, nil, 339, 339, nil, - nil, 339, nil, 339, 942, nil, 942, 339, 942, 942, - nil, 942, 942, 942, 942, 942, 339, 942, nil, nil, - nil, 339, 339, 339, 339, nil, 339, 339, 339, 339, - nil, nil, nil, nil, 339, 339, nil, 942, nil, nil, - nil, nil, 339, nil, 339, 339, 339, nil, nil, 339, - 339, 344, 344, 344, 344, 344, 344, nil, nil, nil, - 344, 344, nil, nil, nil, 344, nil, 344, 344, 344, - 344, 344, 344, 344, nil, nil, nil, nil, nil, 344, - 344, 344, 344, 344, 344, 344, nil, nil, 344, nil, - nil, nil, nil, nil, 344, 344, 344, 344, 344, 344, - 344, 344, 344, 344, 344, 344, nil, 344, 344, 344, - nil, 344, 344, 344, 344, 344, 945, 945, 945, 945, - 945, 945, 945, 945, 945, 945, 945, nil, 945, 945, - nil, nil, 945, 945, nil, 344, nil, nil, 344, nil, - nil, 344, 344, nil, nil, 344, nil, 344, 945, nil, - 945, 344, 945, 945, nil, 945, 945, 945, 945, 945, - 344, 945, nil, nil, nil, 344, 344, 344, 344, nil, - 344, 344, 344, 344, nil, nil, nil, nil, 344, 344, - nil, 945, nil, nil, nil, nil, 344, nil, 344, 344, - 344, nil, nil, 344, 344, 374, 374, 374, 374, 374, - 374, nil, nil, nil, 374, 374, nil, nil, nil, 374, - nil, 374, 374, 374, 374, 374, 374, 374, nil, nil, - nil, nil, nil, 374, 374, 374, 374, 374, 374, 374, - nil, nil, 374, nil, nil, nil, nil, nil, 374, 374, - 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, - nil, 374, 374, 374, nil, 374, 374, 374, 374, 374, - 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, - 1014, nil, 1014, 1014, nil, nil, 1014, 1014, nil, 374, - nil, nil, 374, nil, nil, 374, 374, nil, nil, 374, - nil, 374, 1014, nil, 1014, 374, 1014, 1014, nil, 1014, - 1014, 1014, 1014, 1014, 374, 1014, nil, nil, nil, 374, - 374, 374, 374, nil, 374, 374, 374, 374, nil, nil, - nil, nil, 374, 374, nil, 1014, nil, nil, nil, nil, - 374, nil, 374, 374, 374, nil, nil, 374, 374, 388, - 388, 388, 388, 388, 388, nil, nil, nil, 388, 388, - nil, nil, nil, 388, nil, 388, 388, 388, 388, 388, - 388, 388, nil, nil, nil, nil, nil, 388, 388, 388, - 388, 388, 388, 388, nil, 497, 388, 497, 497, 497, - nil, 497, 388, 388, 388, 388, 388, 388, 388, 388, - 388, 388, 388, 388, nil, 388, 388, 388, nil, 388, - 388, 388, 388, 388, 720, nil, 720, 720, 720, nil, - 720, nil, 497, nil, 881, nil, 881, 881, 881, nil, - 881, 497, nil, 388, nil, nil, 388, nil, nil, 388, - 388, nil, nil, 388, 880, 388, 880, 880, 880, 388, - 880, 720, nil, nil, nil, nil, nil, nil, 388, nil, - 720, 881, nil, 388, 388, 388, 388, nil, 388, 388, - 388, 388, nil, nil, nil, nil, 388, 388, nil, nil, - nil, 880, nil, nil, 388, nil, 388, 388, 388, nil, - 880, 388, 388, 389, 389, 389, 389, 389, 389, nil, - nil, nil, 389, 389, nil, nil, nil, 389, nil, 389, - 389, 389, 389, 389, 389, 389, nil, nil, nil, nil, - nil, 389, 389, 389, 389, 389, 389, 389, nil, nil, - 389, nil, nil, nil, nil, nil, 389, 389, 389, 389, - 389, 389, 389, 389, 389, 389, 389, 389, nil, 389, - 389, 389, nil, 389, 389, 389, 389, 389, 366, 366, - 366, 366, 366, 366, 366, 366, 366, 366, 366, nil, - 366, 366, nil, nil, 366, 366, nil, 389, nil, nil, - 389, nil, nil, 389, 389, nil, 550, 389, nil, 389, - 366, nil, 366, 389, 366, 366, nil, 366, 366, 366, - 366, 366, 389, 366, nil, nil, nil, 389, 389, 389, - 389, nil, 389, 389, 389, 389, nil, nil, 550, nil, - 389, 389, 550, 550, nil, 550, 550, nil, 389, nil, - 389, 389, 389, nil, nil, 389, 389, 622, 622, 622, - 622, 622, 622, nil, nil, nil, 622, 622, nil, nil, - nil, 622, nil, 622, 622, 622, 622, 622, 622, 622, - nil, nil, nil, nil, nil, 622, 622, 622, 622, 622, - 622, 622, nil, nil, 622, nil, nil, nil, nil, nil, - 622, 622, 622, 622, 622, 622, 622, 622, 622, 622, - 622, 622, nil, 622, 622, 622, nil, 622, 622, 622, - 622, 622, 367, 367, 367, 367, 367, 367, 367, 367, - 367, 367, 367, nil, 367, 367, nil, nil, 367, 367, - nil, 622, nil, nil, 622, nil, nil, 622, 622, nil, - 551, 622, nil, 622, 367, nil, 367, 622, 367, 367, - nil, 367, 367, 367, 367, 367, 622, 367, nil, nil, - nil, 622, 622, 622, 622, nil, 622, 622, 622, 622, - nil, nil, 551, nil, 622, 622, 551, 551, nil, 551, - 551, nil, 622, nil, 622, 622, 622, nil, nil, 622, - 622, 625, 625, 625, 625, 625, 625, nil, nil, nil, - 625, 625, nil, nil, nil, 625, nil, 625, 625, 625, - 625, 625, 625, 625, nil, nil, nil, nil, nil, 625, - 625, 625, 625, 625, 625, 625, nil, nil, 625, nil, - nil, nil, nil, nil, 625, 625, 625, 625, 625, 625, - 625, 625, 625, 625, 625, 625, nil, 625, 625, 625, - nil, 625, 625, 625, 625, 625, 533, 533, 533, 533, - 533, 533, 533, 533, 533, 533, 533, nil, 533, 533, - nil, nil, 533, 533, nil, 625, nil, nil, 625, nil, - nil, 625, 625, nil, nil, 625, nil, 625, 533, nil, - 533, 625, 533, 533, nil, 533, 533, 533, 533, 533, - 625, 533, nil, nil, nil, 625, 625, 625, 625, nil, - 625, 625, 625, 625, nil, nil, nil, nil, 625, 625, - nil, 1061, nil, 1061, 1061, 1061, 625, 1061, 625, 625, - 625, nil, nil, 625, 625, 646, 646, 646, 646, 646, - 646, nil, nil, nil, 646, 646, nil, nil, nil, 646, - nil, 646, 646, 646, 646, 646, 646, 646, 1061, nil, - nil, nil, nil, 646, 646, 646, 646, 646, 646, 646, - nil, nil, 646, nil, nil, nil, nil, nil, 646, 646, - 646, 646, 646, 646, 646, 646, 646, 646, 646, 646, - nil, 646, 646, 646, nil, 646, 646, 646, 646, 646, - 534, 534, 534, 534, 534, 534, 534, 534, 534, 534, - 534, nil, 534, 534, nil, nil, 534, 534, nil, 646, - nil, nil, 646, nil, nil, 646, 646, nil, nil, 646, - nil, 646, 534, nil, 534, 646, 534, 534, nil, 534, - 534, 534, 534, 534, 646, 534, nil, nil, nil, 646, - 646, 646, 646, nil, 646, 646, 646, 646, nil, nil, - nil, nil, 646, 646, nil, 1062, nil, 1062, 1062, 1062, - 646, 1062, 646, 646, 646, nil, nil, 646, 646, 807, - 807, 807, 807, 807, 807, nil, nil, nil, 807, 807, - nil, nil, nil, 807, nil, 807, 807, 807, 807, 807, - 807, 807, 1062, nil, nil, nil, nil, 807, 807, 807, - 807, 807, 807, 807, nil, nil, 807, nil, nil, nil, - nil, nil, 807, 807, 807, 807, 807, 807, 807, 807, - 807, 807, 807, 807, nil, 807, 807, 807, nil, 807, - 807, 807, 807, 807, 544, 544, 544, 544, 544, 544, - 544, nil, nil, 544, 544, nil, nil, nil, nil, nil, - 544, 544, nil, 807, nil, nil, 807, nil, nil, 807, - 807, nil, nil, 807, nil, 807, 544, nil, 544, 807, - 544, 544, nil, 544, 544, 544, 544, 544, 807, 544, - nil, nil, nil, 807, 807, 807, 807, nil, 807, 807, - 807, 807, nil, nil, nil, nil, 807, 807, nil, nil, - nil, nil, nil, nil, 807, nil, 807, 807, 807, nil, - nil, 807, 807, 812, 812, 812, 812, 812, 812, nil, - nil, nil, 812, 812, nil, nil, nil, 812, nil, 812, - 812, 812, 812, 812, 812, 812, nil, nil, nil, nil, - nil, 812, 812, 812, 812, 812, 812, 812, nil, nil, - 812, nil, nil, nil, nil, nil, 812, 812, 812, 812, - 812, 812, 812, 812, 812, 812, 812, 812, nil, 812, - 812, 812, nil, 812, 812, 812, 812, 812, 545, 545, - 545, 545, 545, 545, 545, nil, nil, 545, 545, nil, - nil, nil, nil, nil, 545, 545, nil, 812, nil, nil, - 812, nil, nil, 812, 812, nil, nil, 812, nil, 812, - 545, nil, 545, 812, 545, 545, nil, 545, 545, 545, - 545, 545, 812, 545, nil, nil, nil, 812, 812, 812, - 812, nil, 812, 812, 812, 812, nil, nil, nil, nil, - 812, 812, nil, nil, nil, nil, nil, nil, 812, nil, - 812, 812, 812, nil, nil, 812, 812, 821, 821, 821, - 821, 821, 821, nil, nil, nil, 821, 821, nil, nil, - nil, 821, nil, 821, 821, 821, 821, 821, 821, 821, - nil, nil, nil, nil, nil, 821, 821, 821, 821, 821, - 821, 821, nil, nil, 821, nil, nil, nil, nil, nil, - 821, 821, 821, 821, 821, 821, 821, 821, 821, 821, - 821, 821, nil, 821, 821, 821, nil, 821, 821, 821, - 821, 821, 546, 546, 546, 546, 546, 546, 546, nil, - nil, 546, 546, nil, nil, nil, nil, nil, 546, 546, - nil, 821, nil, nil, 821, nil, nil, 821, 821, nil, - nil, 821, nil, 821, 546, nil, 546, 821, 546, 546, - nil, 546, 546, 546, 546, 546, 821, 546, nil, nil, - nil, 821, 821, 821, 821, nil, 821, 821, 821, 821, - nil, nil, nil, nil, 821, 821, nil, nil, nil, nil, - nil, nil, 821, nil, 821, 821, 821, nil, nil, 821, - 821, 859, 859, 859, 859, 859, 859, nil, nil, nil, - 859, 859, nil, nil, nil, 859, nil, 859, 859, 859, - 859, 859, 859, 859, nil, nil, nil, nil, nil, 859, - 859, 859, 859, 859, 859, 859, nil, nil, 859, nil, - nil, nil, nil, nil, 859, 859, 859, 859, 859, 859, - 859, 859, 859, 859, 859, 859, nil, 859, 859, 859, - nil, 859, 859, 859, 859, 859, 547, 547, 547, 547, - 547, 547, 547, nil, nil, 547, 547, nil, nil, nil, - nil, nil, 547, 547, nil, 859, nil, nil, 859, nil, - nil, 859, 859, nil, nil, 859, nil, 859, 547, nil, - 547, 859, 547, 547, nil, 547, 547, 547, 547, 547, - 859, 547, nil, nil, nil, 859, 859, 859, 859, nil, - 859, 859, 859, 859, nil, nil, nil, nil, 859, 859, - nil, nil, nil, nil, nil, nil, 859, nil, 859, 859, - 859, nil, nil, 859, 859, 904, 904, 904, 904, 904, - 904, nil, nil, nil, 904, 904, nil, nil, nil, 904, - nil, 904, 904, 904, 904, 904, 904, 904, nil, nil, - nil, nil, nil, 904, 904, 904, 904, 904, 904, 904, - nil, nil, 904, nil, nil, nil, nil, nil, 904, 904, - 904, 904, 904, 904, 904, 904, 904, 904, 904, 904, - nil, 904, 904, 904, nil, 904, 904, 904, 904, 904, - 548, 548, 548, 548, 548, 548, 548, nil, nil, 548, - 548, nil, nil, nil, nil, nil, 548, 548, nil, 904, - nil, nil, 904, nil, nil, 904, 904, nil, nil, 904, - nil, 904, 548, nil, 548, 904, 548, 548, nil, 548, - 548, 548, 548, 548, 904, 548, nil, nil, nil, 904, - 904, 904, 904, nil, 904, 904, 904, 904, nil, nil, - nil, nil, 904, 904, nil, nil, nil, nil, nil, nil, - 904, nil, 904, 904, 904, nil, nil, 904, 904, 921, - 921, 921, 921, 921, 921, nil, nil, nil, 921, 921, - nil, nil, nil, 921, nil, 921, 921, 921, 921, 921, - 921, 921, nil, nil, nil, nil, nil, 921, 921, 921, - 921, 921, 921, 921, nil, nil, 921, nil, nil, nil, - nil, nil, 921, 921, 921, 921, 921, 921, 921, 921, - 921, 921, 921, 921, nil, 921, 921, 921, nil, 921, - 921, 921, 921, 921, 549, 549, 549, 549, 549, 549, - 549, nil, nil, 549, 549, nil, nil, nil, nil, nil, - 549, 549, nil, 921, nil, nil, 921, nil, nil, 921, - 921, nil, nil, 921, nil, 921, 549, nil, 549, 921, - 549, 549, nil, 549, 549, 549, 549, 549, 921, 549, - nil, nil, nil, 921, 921, 921, 921, nil, 921, 921, - 921, 921, nil, nil, nil, nil, 921, 921, nil, nil, - nil, nil, nil, nil, 921, nil, 921, 921, 921, nil, - nil, 921, 921, 927, 927, 927, 927, 927, 927, nil, - nil, nil, 927, 927, nil, nil, nil, 927, nil, 927, - 927, 927, 927, 927, 927, 927, nil, nil, nil, nil, - nil, 927, 927, 927, 927, 927, 927, 927, nil, nil, - 927, nil, nil, nil, nil, nil, 927, 927, 927, 927, - 927, 927, 927, 927, 927, 927, 927, 927, nil, 927, - 927, 927, nil, 927, 927, 927, 927, 927, 552, 552, - 552, 552, 552, 552, 552, nil, nil, 552, 552, nil, - nil, nil, nil, nil, 552, 552, nil, 927, nil, nil, - 927, nil, nil, 927, 927, nil, nil, 927, nil, 927, - 552, nil, 552, 927, 552, 552, nil, 552, 552, 552, - 552, 552, 927, 552, nil, nil, nil, 927, 927, 927, - 927, nil, 927, 927, 927, 927, nil, nil, nil, nil, - 927, 927, nil, nil, nil, nil, nil, nil, 927, nil, - 927, 927, 927, nil, nil, 927, 927, 947, 947, 947, - 947, 947, 947, nil, nil, nil, 947, 947, nil, nil, - nil, 947, nil, 947, 947, 947, 947, 947, 947, 947, - nil, nil, nil, nil, nil, 947, 947, 947, 947, 947, - 947, 947, nil, nil, 947, nil, nil, nil, nil, nil, - 947, 947, 947, 947, 947, 947, 947, 947, 947, 947, - 947, 947, nil, 947, 947, 947, nil, 947, 947, 947, - 947, 947, 553, 553, 553, 553, 553, 553, 553, 553, - nil, 553, 553, nil, nil, nil, nil, nil, 553, 553, - nil, 947, nil, nil, 947, nil, nil, 947, 947, nil, - nil, 947, nil, 947, 553, nil, 553, 947, 553, 553, - nil, 553, 553, 553, 553, 553, 947, 553, nil, nil, - nil, 947, 947, 947, 947, nil, 947, 947, 947, 947, - nil, nil, nil, nil, 947, 947, nil, nil, nil, nil, - nil, nil, 947, nil, 947, 947, 947, nil, nil, 947, - 947, 1015, 1015, 1015, 1015, 1015, 1015, nil, nil, nil, - 1015, 1015, nil, nil, nil, 1015, nil, 1015, 1015, 1015, - 1015, 1015, 1015, 1015, nil, nil, nil, nil, nil, 1015, - 1015, 1015, 1015, 1015, 1015, 1015, nil, nil, 1015, nil, - nil, nil, nil, nil, 1015, 1015, 1015, 1015, 1015, 1015, - 1015, 1015, 1015, 1015, 1015, 1015, nil, 1015, 1015, 1015, - nil, 1015, 1015, 1015, 1015, 1015, 555, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 555, 555, nil, 1015, nil, nil, 1015, nil, - nil, 1015, 1015, nil, nil, 1015, nil, 1015, 555, nil, - 555, 1015, 555, 555, nil, 555, 555, nil, nil, 555, - 1015, 555, nil, nil, nil, 1015, 1015, 1015, 1015, nil, - 1015, 1015, 1015, 1015, nil, nil, nil, nil, 1015, 1015, - nil, nil, nil, nil, nil, nil, 1015, nil, 1015, 1015, - 1015, nil, nil, 1015, 1015, 1043, 1043, 1043, 1043, 1043, - 1043, nil, nil, nil, 1043, 1043, nil, nil, nil, 1043, - nil, 1043, 1043, 1043, 1043, 1043, 1043, 1043, nil, nil, - nil, nil, nil, 1043, 1043, 1043, 1043, 1043, 1043, 1043, - nil, nil, 1043, nil, nil, nil, nil, nil, 1043, 1043, - 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043, - nil, 1043, 1043, 1043, nil, 1043, 1043, 1043, 1043, 1043, - 608, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 608, 608, nil, 1043, - nil, nil, 1043, nil, nil, 1043, 1043, nil, nil, 1043, - nil, 1043, 608, nil, 608, 1043, 608, 608, nil, 608, - 608, nil, nil, 608, 1043, 608, nil, nil, nil, 1043, - 1043, 1043, 1043, nil, 1043, 1043, 1043, 1043, nil, nil, - nil, nil, 1043, 1043, nil, nil, nil, nil, nil, nil, - 1043, nil, 1043, 1043, 1043, nil, nil, 1043, 1043, 1044, - 1044, 1044, 1044, 1044, 1044, nil, nil, nil, 1044, 1044, - nil, nil, nil, 1044, nil, 1044, 1044, 1044, 1044, 1044, - 1044, 1044, nil, nil, nil, nil, nil, 1044, 1044, 1044, - 1044, 1044, 1044, 1044, nil, nil, 1044, nil, nil, nil, - nil, nil, 1044, 1044, 1044, 1044, 1044, 1044, 1044, 1044, - 1044, 1044, 1044, 1044, nil, 1044, 1044, 1044, nil, 1044, - 1044, 1044, 1044, 1044, 541, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 541, 541, nil, 1044, nil, nil, 1044, nil, nil, 1044, - 1044, nil, nil, 1044, nil, 1044, 541, nil, 541, 1044, - 541, 541, nil, 541, 541, nil, nil, nil, 1044, nil, - nil, nil, nil, 1044, 1044, 1044, 1044, nil, 1044, 1044, - 1044, 1044, nil, nil, nil, nil, 1044, 1044, nil, nil, - nil, nil, nil, nil, 1044, nil, 1044, 1044, 1044, nil, - nil, 1044, 1044, 1050, 1050, 1050, 1050, 1050, 1050, nil, - nil, nil, 1050, 1050, nil, nil, nil, 1050, nil, 1050, - 1050, 1050, 1050, 1050, 1050, 1050, nil, nil, nil, nil, - nil, 1050, 1050, 1050, 1050, 1050, 1050, 1050, nil, nil, - 1050, nil, nil, nil, nil, nil, 1050, 1050, 1050, 1050, - 1050, 1050, 1050, 1050, 1050, 1050, 1050, 1050, nil, 1050, - 1050, 1050, nil, 1050, 1050, 1050, 1050, 1050, 542, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 542, 542, nil, 1050, nil, nil, - 1050, nil, nil, 1050, 1050, nil, nil, 1050, nil, 1050, - 542, nil, 542, 1050, 542, 542, nil, 542, 542, nil, - nil, nil, 1050, nil, nil, nil, nil, 1050, 1050, 1050, - 1050, nil, 1050, 1050, 1050, 1050, nil, nil, nil, nil, - 1050, 1050, nil, nil, nil, nil, nil, nil, 1050, nil, - 1050, 1050, 1050, nil, nil, 1050, 1050, 1113, 1113, 1113, - 1113, 1113, 1113, nil, nil, nil, 1113, 1113, nil, nil, - nil, 1113, nil, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - nil, nil, nil, nil, nil, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, nil, nil, 1113, nil, nil, nil, nil, nil, - 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, - 1113, 1113, nil, 1113, 1113, 1113, nil, 1113, 1113, 1113, - 1113, 1113, 543, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 543, 543, - nil, 1113, nil, nil, 1113, nil, nil, 1113, 1113, nil, - nil, 1113, nil, 1113, 543, nil, nil, 1113, 543, 543, - nil, 543, 543, nil, nil, nil, 1113, nil, nil, nil, - nil, 1113, 1113, 1113, 1113, nil, 1113, 1113, 1113, 1113, - nil, nil, nil, nil, 1113, 1113, nil, nil, nil, nil, - nil, nil, 1113, nil, 1113, 1113, 1113, nil, nil, 1113, - 1113, 1235, 1235, 1235, 1235, 1235, 1235, nil, nil, nil, - 1235, 1235, nil, nil, nil, 1235, nil, 1235, 1235, 1235, - 1235, 1235, 1235, 1235, nil, nil, nil, nil, nil, 1235, - 1235, 1235, 1235, 1235, 1235, 1235, nil, nil, 1235, nil, - nil, nil, nil, nil, 1235, 1235, 1235, 1235, 1235, 1235, - 1235, 1235, 1235, 1235, 1235, 1235, nil, 1235, 1235, 1235, - nil, 1235, 1235, 1235, 1235, 1235, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 1235, nil, nil, 1235, nil, - nil, 1235, 1235, nil, nil, 1235, nil, 1235, nil, nil, - nil, 1235, nil, nil, nil, nil, nil, nil, nil, nil, - 1235, nil, nil, nil, nil, 1235, 1235, 1235, 1235, nil, - 1235, 1235, 1235, 1235, nil, nil, nil, nil, 1235, 1235, - nil, nil, nil, nil, nil, nil, 1235, nil, 1235, 1235, - 1235, nil, nil, 1235, 1235, 7, 7, 7, 7, 7, - nil, nil, nil, 7, 7, nil, nil, nil, 7, nil, - 7, 7, 7, 7, 7, 7, 7, nil, nil, nil, - nil, nil, 7, 7, 7, 7, 7, 7, 7, nil, - nil, 7, nil, nil, nil, nil, nil, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, nil, - 7, 7, 7, nil, 7, 7, 7, 7, 7, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 7, nil, - nil, 7, nil, nil, 7, 7, nil, nil, 7, nil, - 7, nil, nil, nil, 7, nil, nil, nil, nil, nil, - nil, nil, nil, 7, nil, nil, nil, nil, 7, 7, - 7, 7, nil, 7, 7, 7, 7, nil, nil, nil, - nil, 7, 7, nil, nil, nil, 24, 24, 24, 7, - 24, 7, 7, 7, 24, 24, 7, 7, nil, 24, - nil, 24, 24, 24, 24, 24, 24, 24, nil, nil, - nil, nil, nil, 24, 24, 24, 24, 24, 24, 24, - nil, nil, 24, nil, nil, nil, nil, nil, nil, 24, - nil, nil, 24, 24, 24, 24, 24, 24, 24, 24, - nil, 24, 24, 24, nil, 24, 24, 24, 24, 24, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 24, - nil, nil, 24, nil, nil, 24, 24, nil, nil, 24, - nil, nil, nil, nil, nil, 24, nil, nil, nil, nil, - nil, nil, nil, nil, 24, nil, nil, nil, nil, 24, - 24, 24, 24, nil, 24, 24, 24, 24, nil, nil, - nil, nil, 24, 24, nil, nil, nil, nil, nil, nil, - 24, nil, 24, 24, 24, 32, nil, 24, 24, nil, - nil, nil, 32, 32, 32, nil, nil, 32, 32, 32, - nil, 32, nil, nil, nil, nil, nil, nil, nil, 32, - 32, 32, 32, nil, nil, nil, nil, nil, nil, nil, - nil, 32, 32, nil, 32, 32, 32, 32, 32, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, nil, nil, 32, 32, 32, - nil, nil, 32, nil, 32, 32, nil, nil, 32, 32, - nil, 32, nil, 32, nil, 32, nil, 32, 32, nil, - 32, 32, 32, 32, 32, 33, 32, 32, 32, nil, - nil, nil, 33, 33, 33, nil, nil, 33, 33, 33, - nil, 33, 32, nil, nil, 32, 32, nil, 32, 33, - 32, 33, 33, nil, nil, nil, nil, 32, nil, nil, - nil, 33, 33, nil, 33, 33, 33, 33, 33, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 33, 33, 33, 33, 33, 33, 33, 33, 33, - 33, 33, 33, 33, 33, nil, nil, 33, 33, 33, - nil, nil, 33, nil, 33, 33, nil, nil, 33, 33, - nil, 33, nil, 33, nil, 33, nil, 33, 33, nil, - 33, 33, 33, 33, 33, nil, 33, nil, 33, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 33, nil, nil, 33, 33, nil, 33, nil, - 33, 34, 34, 34, nil, 34, nil, 33, nil, 34, - 34, nil, nil, nil, 34, nil, 34, 34, 34, 34, - 34, 34, 34, nil, nil, nil, nil, nil, 34, 34, - 34, 34, 34, 34, 34, nil, nil, 34, nil, nil, - nil, nil, nil, nil, 34, nil, nil, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, nil, - 34, 34, 34, 34, 34, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 34, nil, nil, 34, nil, nil, - 34, 34, nil, nil, 34, nil, 34, nil, 34, nil, - 34, nil, nil, 34, nil, nil, nil, nil, nil, 34, - nil, nil, nil, nil, 34, 34, 34, 34, nil, 34, - 34, 34, 34, nil, nil, nil, nil, 34, 34, nil, - nil, nil, 35, 35, 35, 34, 35, 34, 34, 34, - 35, 35, 34, 34, nil, 35, nil, 35, 35, 35, - 35, 35, 35, 35, nil, nil, nil, nil, nil, 35, - 35, 35, 35, 35, 35, 35, nil, nil, 35, nil, - nil, nil, nil, nil, nil, 35, nil, nil, 35, 35, - 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, - nil, 35, 35, 35, 35, 35, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 35, nil, nil, 35, nil, - nil, 35, 35, nil, nil, 35, nil, 35, nil, 35, - nil, 35, nil, nil, 35, nil, nil, nil, nil, nil, - 35, nil, nil, nil, nil, 35, 35, 35, 35, nil, - 35, 35, 35, 35, nil, nil, nil, nil, 35, 35, - nil, nil, nil, 36, 36, 36, 35, 36, 35, 35, - 35, 36, 36, 35, 35, nil, 36, nil, 36, 36, - 36, 36, 36, 36, 36, nil, nil, nil, nil, nil, - 36, 36, 36, 36, 36, 36, 36, nil, nil, 36, - nil, nil, nil, nil, nil, nil, 36, nil, nil, 36, - 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, - 36, nil, 36, 36, 36, 36, 36, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 36, nil, nil, 36, - nil, nil, 36, 36, nil, nil, 36, nil, 36, nil, - 36, nil, 36, nil, nil, 36, nil, nil, nil, nil, - nil, 36, nil, nil, nil, nil, 36, 36, 36, 36, - nil, 36, 36, 36, 36, nil, nil, nil, nil, 36, - 36, nil, nil, nil, 46, 46, 46, 36, 46, 36, - 36, 36, 46, 46, 36, 36, nil, 46, nil, 46, - 46, 46, 46, 46, 46, 46, nil, nil, nil, nil, - nil, 46, 46, 46, 46, 46, 46, 46, nil, nil, - 46, nil, nil, nil, nil, nil, nil, 46, nil, nil, - 46, 46, 46, 46, 46, 46, 46, 46, nil, 46, - 46, 46, nil, 46, 46, 46, 46, 46, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 46, nil, nil, - 46, nil, nil, 46, 46, nil, nil, 46, nil, nil, - nil, nil, nil, 46, nil, nil, nil, nil, nil, nil, - nil, nil, 46, nil, nil, nil, nil, 46, 46, 46, - 46, nil, 46, 46, 46, 46, nil, nil, nil, nil, - 46, 46, nil, nil, nil, 47, 47, 47, 46, 47, - 46, 46, 46, 47, 47, 46, 46, nil, 47, nil, - 47, 47, 47, 47, 47, 47, 47, nil, nil, nil, - nil, nil, 47, 47, 47, 47, 47, 47, 47, nil, - nil, 47, nil, nil, nil, nil, nil, nil, 47, nil, - nil, 47, 47, 47, 47, 47, 47, 47, 47, nil, - 47, 47, 47, nil, 47, 47, 47, 47, 47, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 47, nil, - nil, 47, nil, nil, 47, 47, nil, nil, 47, nil, - nil, nil, nil, nil, 47, nil, nil, nil, nil, nil, - nil, nil, nil, 47, nil, nil, nil, nil, 47, 47, - 47, 47, nil, 47, 47, 47, 47, nil, nil, nil, - nil, 47, 47, nil, nil, nil, 49, 49, 49, 47, - 49, 47, 47, 47, 49, 49, 47, 47, nil, 49, - nil, 49, 49, 49, 49, 49, 49, 49, nil, nil, - nil, nil, nil, 49, 49, 49, 49, 49, 49, 49, - nil, nil, 49, nil, nil, nil, nil, nil, nil, 49, - nil, nil, 49, 49, 49, 49, 49, 49, 49, 49, - nil, 49, 49, 49, nil, 49, 49, 49, 49, 49, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 49, - nil, nil, 49, nil, nil, 49, 49, nil, nil, 49, - nil, nil, nil, nil, nil, 49, nil, nil, nil, nil, - nil, nil, nil, nil, 49, nil, nil, nil, nil, 49, - 49, 49, 49, nil, 49, 49, 49, 49, nil, nil, - nil, nil, 49, 49, nil, nil, nil, 50, 50, 50, - 49, 50, 49, 49, 49, 50, 50, 49, 49, nil, - 50, nil, 50, 50, 50, 50, 50, 50, 50, nil, - nil, nil, nil, nil, 50, 50, 50, 50, 50, 50, - 50, nil, nil, 50, nil, nil, nil, nil, nil, nil, - 50, nil, nil, 50, 50, 50, 50, 50, 50, 50, - 50, nil, 50, 50, 50, nil, 50, 50, 50, 50, - 50, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 50, nil, nil, 50, nil, nil, 50, 50, nil, nil, - 50, nil, nil, nil, nil, nil, 50, nil, nil, nil, - nil, nil, nil, nil, nil, 50, nil, nil, nil, nil, - 50, 50, 50, 50, nil, 50, 50, 50, 50, nil, - nil, nil, nil, 50, 50, nil, nil, nil, 52, 52, - 52, 50, 52, 50, 50, 50, 52, 52, 50, 50, - nil, 52, nil, 52, 52, 52, 52, 52, 52, 52, - nil, nil, nil, nil, nil, 52, 52, 52, 52, 52, - 52, 52, nil, nil, 52, nil, nil, nil, nil, nil, - nil, 52, nil, nil, 52, 52, 52, 52, 52, 52, - 52, 52, nil, 52, 52, 52, nil, 52, 52, 52, - 52, 52, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 52, nil, nil, 52, nil, nil, 52, 52, nil, - nil, 52, nil, nil, nil, nil, nil, 52, nil, nil, - nil, nil, nil, nil, nil, nil, 52, nil, nil, nil, - nil, 52, 52, 52, 52, nil, 52, 52, 52, 52, - nil, nil, nil, nil, 52, 52, nil, nil, nil, nil, - nil, nil, 52, nil, 52, 52, 52, 64, nil, 52, - 52, nil, nil, nil, 64, 64, 64, nil, nil, 64, - 64, 64, nil, 64, nil, nil, nil, nil, nil, nil, - nil, 64, nil, 64, 64, 64, nil, nil, nil, nil, - nil, nil, nil, 64, 64, nil, 64, 64, 64, 64, - 64, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, nil, nil, 64, - 64, 64, nil, nil, 64, nil, nil, 64, nil, nil, - 64, 64, nil, 64, nil, 64, nil, 64, nil, 64, - 64, nil, 64, 64, 64, 64, 64, nil, 64, nil, - 64, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 64, nil, nil, 64, 64, 64, - 64, nil, 64, nil, 64, nil, 67, 67, 67, 64, - 67, nil, nil, nil, 67, 67, nil, nil, nil, 67, - nil, 67, 67, 67, 67, 67, 67, 67, nil, nil, - nil, nil, nil, 67, 67, 67, 67, 67, 67, 67, - nil, nil, 67, nil, nil, nil, nil, nil, nil, 67, - nil, nil, 67, 67, 67, 67, 67, 67, 67, 67, - 67, 67, 67, 67, nil, 67, 67, 67, 67, 67, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 67, - nil, nil, 67, nil, nil, 67, 67, nil, nil, 67, - nil, 67, nil, nil, nil, 67, nil, nil, 67, nil, - nil, nil, nil, nil, 67, nil, nil, nil, nil, 67, - 67, 67, 67, nil, 67, 67, 67, 67, nil, nil, - nil, nil, 67, 67, nil, nil, nil, 68, 68, 68, - 67, 68, 67, 67, 67, 68, 68, 67, 67, nil, - 68, nil, 68, 68, 68, 68, 68, 68, 68, nil, - nil, nil, nil, nil, 68, 68, 68, 68, 68, 68, - 68, nil, nil, 68, nil, nil, nil, nil, nil, nil, - 68, nil, nil, 68, 68, 68, 68, 68, 68, 68, - 68, 68, 68, 68, 68, nil, 68, 68, 68, 68, - 68, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 68, nil, nil, 68, nil, nil, 68, 68, nil, nil, - 68, nil, nil, nil, nil, nil, 68, nil, nil, 68, - nil, nil, nil, nil, nil, 68, nil, nil, nil, nil, - 68, 68, 68, 68, nil, 68, 68, 68, 68, nil, - nil, nil, nil, 68, 68, nil, nil, nil, 71, 71, - 71, 68, 71, 68, 68, 68, 71, 71, 68, 68, - nil, 71, nil, 71, 71, 71, 71, 71, 71, 71, - nil, nil, nil, nil, nil, 71, 71, 71, 71, 71, - 71, 71, nil, nil, 71, nil, nil, nil, nil, nil, - nil, 71, nil, nil, 71, 71, 71, 71, 71, 71, - 71, 71, nil, 71, 71, 71, nil, 71, 71, 71, - 71, 71, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 71, nil, nil, 71, nil, nil, 71, 71, nil, - nil, 71, nil, nil, nil, nil, nil, 71, nil, nil, - nil, nil, nil, nil, nil, nil, 71, nil, nil, nil, - nil, 71, 71, 71, 71, nil, 71, 71, 71, 71, - nil, nil, nil, nil, 71, 71, nil, nil, nil, 72, - 72, 72, 71, 72, 71, 71, 71, 72, 72, 71, - 71, nil, 72, nil, 72, 72, 72, 72, 72, 72, - 72, nil, nil, nil, nil, nil, 72, 72, 72, 72, - 72, 72, 72, nil, nil, 72, nil, nil, nil, nil, - nil, nil, 72, nil, nil, 72, 72, 72, 72, 72, - 72, 72, 72, nil, 72, 72, 72, nil, 72, 72, - 72, 72, 72, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 72, nil, nil, 72, nil, nil, 72, 72, - nil, nil, 72, nil, nil, nil, nil, nil, 72, nil, - nil, nil, nil, nil, nil, nil, nil, 72, nil, nil, - nil, nil, 72, 72, 72, 72, nil, 72, 72, 72, - 72, nil, nil, nil, nil, 72, 72, nil, nil, nil, - 75, 75, 75, 72, 75, 72, 72, 72, 75, 75, - 72, 72, nil, 75, nil, 75, 75, 75, 75, 75, - 75, 75, nil, nil, nil, nil, nil, 75, 75, 75, - 75, 75, 75, 75, nil, nil, 75, nil, nil, nil, - nil, nil, nil, 75, nil, nil, 75, 75, 75, 75, - 75, 75, 75, 75, nil, 75, 75, 75, nil, 75, - 75, 75, 75, 75, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 75, nil, nil, 75, nil, nil, 75, - 75, nil, nil, 75, nil, nil, nil, nil, nil, 75, - nil, nil, nil, nil, nil, nil, nil, nil, 75, nil, - nil, nil, nil, 75, 75, 75, 75, nil, 75, 75, - 75, 75, nil, nil, nil, nil, 75, 75, 75, nil, - nil, nil, nil, 75, 75, nil, 75, 75, 75, nil, - nil, 75, 75, 125, 125, 125, 125, 125, nil, nil, - nil, 125, 125, nil, nil, nil, 125, nil, 125, 125, - 125, 125, 125, 125, 125, nil, nil, nil, nil, nil, - 125, 125, 125, 125, 125, 125, 125, nil, nil, 125, - nil, nil, nil, nil, nil, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, nil, 125, 125, - 125, nil, 125, 125, 125, 125, 125, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 125, nil, nil, 125, - nil, nil, 125, 125, nil, nil, 125, nil, 125, nil, - nil, nil, 125, nil, nil, nil, nil, nil, nil, nil, - nil, 125, nil, nil, nil, nil, 125, 125, 125, 125, - nil, 125, 125, 125, 125, nil, nil, nil, nil, 125, - 125, nil, nil, nil, nil, nil, 125, 125, nil, 125, - 125, 125, nil, nil, 125, 125, 130, 130, 130, nil, - 130, nil, nil, nil, 130, 130, nil, nil, nil, 130, - nil, 130, 130, 130, 130, 130, 130, 130, nil, nil, - nil, nil, nil, 130, 130, 130, 130, 130, 130, 130, - nil, nil, 130, nil, nil, nil, nil, nil, nil, 130, - nil, nil, 130, 130, 130, 130, 130, 130, 130, 130, - nil, 130, 130, 130, nil, 130, 130, 130, 130, 130, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 130, - nil, nil, 130, nil, nil, 130, 130, nil, nil, 130, - nil, nil, nil, nil, nil, 130, nil, nil, nil, nil, - nil, nil, nil, nil, 130, nil, nil, nil, nil, 130, - 130, 130, 130, nil, 130, 130, 130, 130, nil, nil, - nil, nil, 130, 130, nil, nil, nil, 131, 131, 131, - 130, 131, 130, 130, 130, 131, 131, 130, 130, nil, - 131, nil, 131, 131, 131, 131, 131, 131, 131, nil, - nil, nil, nil, nil, 131, 131, 131, 131, 131, 131, - 131, nil, nil, 131, nil, nil, nil, nil, nil, nil, - 131, nil, nil, 131, 131, 131, 131, 131, 131, 131, - 131, nil, 131, 131, 131, nil, 131, 131, 131, 131, - 131, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 131, nil, nil, 131, nil, nil, 131, 131, nil, nil, - 131, nil, nil, nil, nil, nil, 131, nil, nil, nil, - nil, nil, nil, nil, nil, 131, nil, nil, nil, nil, - 131, 131, 131, 131, nil, 131, 131, 131, 131, nil, - nil, nil, nil, 131, 131, nil, nil, nil, 132, 132, - 132, 131, 132, 131, 131, 131, 132, 132, 131, 131, - nil, 132, nil, 132, 132, 132, 132, 132, 132, 132, - nil, nil, nil, nil, nil, 132, 132, 132, 132, 132, - 132, 132, nil, nil, 132, nil, nil, nil, nil, nil, - nil, 132, nil, nil, 132, 132, 132, 132, 132, 132, - 132, 132, nil, 132, 132, 132, nil, 132, 132, 132, - 132, 132, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 132, nil, nil, 132, nil, nil, 132, 132, nil, - nil, 132, nil, nil, nil, nil, nil, 132, nil, nil, - nil, nil, nil, nil, nil, nil, 132, nil, nil, nil, - nil, 132, 132, 132, 132, nil, 132, 132, 132, 132, - nil, nil, nil, nil, 132, 132, nil, nil, nil, 133, - 133, 133, 132, 133, 132, 132, 132, 133, 133, 132, - 132, nil, 133, nil, 133, 133, 133, 133, 133, 133, - 133, nil, nil, nil, nil, nil, 133, 133, 133, 133, - 133, 133, 133, nil, nil, 133, nil, nil, nil, nil, - nil, nil, 133, nil, nil, 133, 133, 133, 133, 133, - 133, 133, 133, nil, 133, 133, 133, nil, 133, 133, - 133, 133, 133, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 133, nil, nil, 133, nil, nil, 133, 133, - nil, nil, 133, nil, nil, nil, nil, nil, 133, nil, - nil, nil, nil, nil, nil, nil, nil, 133, nil, nil, - nil, nil, 133, 133, 133, 133, nil, 133, 133, 133, - 133, nil, nil, nil, nil, 133, 133, nil, nil, nil, - nil, nil, nil, 133, nil, 133, 133, 133, nil, nil, - 133, 133, 134, 134, 134, 134, 134, nil, nil, nil, - 134, 134, nil, nil, nil, 134, nil, 134, 134, 134, - 134, 134, 134, 134, nil, nil, nil, nil, nil, 134, - 134, 134, 134, 134, 134, 134, nil, nil, 134, nil, - nil, nil, nil, nil, 134, 134, nil, 134, 134, 134, - 134, 134, 134, 134, 134, 134, nil, 134, 134, 134, - nil, 134, 134, 134, 134, 134, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 134, nil, nil, 134, nil, - nil, 134, 134, nil, nil, 134, nil, 134, nil, nil, - nil, 134, nil, nil, nil, nil, nil, nil, nil, nil, - 134, nil, nil, nil, nil, 134, 134, 134, 134, nil, - 134, 134, 134, 134, nil, nil, nil, nil, 134, 134, - nil, nil, nil, 220, 220, 220, 134, 220, 134, 134, - 134, 220, 220, 134, 134, nil, 220, nil, 220, 220, - 220, 220, 220, 220, 220, nil, nil, nil, nil, nil, - 220, 220, 220, 220, 220, 220, 220, nil, nil, 220, - nil, nil, nil, nil, nil, nil, 220, nil, nil, 220, - 220, 220, 220, 220, 220, 220, 220, nil, 220, 220, - 220, nil, 220, 220, 220, 220, 220, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 220, nil, nil, 220, - nil, nil, 220, 220, nil, nil, 220, nil, 220, nil, - nil, nil, 220, nil, nil, nil, nil, nil, nil, nil, - nil, 220, nil, nil, nil, nil, 220, 220, 220, 220, - nil, 220, 220, 220, 220, nil, nil, nil, nil, 220, - 220, nil, nil, nil, 221, 221, 221, 220, 221, 220, - 220, 220, 221, 221, 220, 220, nil, 221, nil, 221, - 221, 221, 221, 221, 221, 221, nil, nil, nil, nil, - nil, 221, 221, 221, 221, 221, 221, 221, nil, nil, - 221, nil, nil, nil, nil, nil, nil, 221, nil, nil, - 221, 221, 221, 221, 221, 221, 221, 221, nil, 221, - 221, 221, nil, 221, 221, 221, 221, 221, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 221, nil, nil, - 221, nil, nil, 221, 221, nil, nil, 221, nil, 221, - nil, nil, nil, 221, nil, nil, nil, nil, nil, nil, - nil, nil, 221, nil, nil, nil, nil, 221, 221, 221, - 221, nil, 221, 221, 221, 221, nil, nil, nil, nil, - 221, 221, nil, nil, nil, 222, 222, 222, 221, 222, - 221, 221, 221, 222, 222, 221, 221, nil, 222, nil, - 222, 222, 222, 222, 222, 222, 222, nil, nil, nil, - nil, nil, 222, 222, 222, 222, 222, 222, 222, nil, - nil, 222, nil, nil, nil, nil, nil, nil, 222, nil, - nil, 222, 222, 222, 222, 222, 222, 222, 222, nil, - 222, 222, 222, nil, 222, 222, 222, 222, 222, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 222, nil, - nil, 222, nil, nil, 222, 222, nil, nil, 222, nil, - nil, nil, nil, nil, 222, nil, nil, nil, nil, nil, - nil, nil, nil, 222, nil, nil, nil, nil, 222, 222, - 222, 222, nil, 222, 222, 222, 222, nil, nil, nil, - nil, 222, 222, nil, nil, nil, 223, 223, 223, 222, - 223, 222, 222, 222, 223, 223, 222, 222, nil, 223, - nil, 223, 223, 223, 223, 223, 223, 223, nil, nil, - nil, nil, nil, 223, 223, 223, 223, 223, 223, 223, - nil, nil, 223, nil, nil, nil, nil, nil, nil, 223, - nil, nil, 223, 223, 223, 223, 223, 223, 223, 223, - nil, 223, 223, 223, nil, 223, 223, 223, 223, 223, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 223, - nil, nil, 223, nil, nil, 223, 223, nil, nil, 223, - nil, nil, nil, nil, nil, 223, nil, nil, nil, nil, - nil, nil, nil, nil, 223, nil, nil, nil, nil, 223, - 223, 223, 223, nil, 223, 223, 223, 223, nil, nil, - nil, nil, 223, 223, nil, nil, nil, 224, 224, 224, - 223, 224, 223, 223, 223, 224, 224, 223, 223, nil, - 224, nil, 224, 224, 224, 224, 224, 224, 224, nil, - nil, nil, nil, nil, 224, 224, 224, 224, 224, 224, - 224, nil, nil, 224, nil, nil, nil, nil, nil, nil, - 224, nil, nil, 224, 224, 224, 224, 224, 224, 224, - 224, nil, 224, 224, 224, nil, 224, 224, 224, 224, - 224, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 224, nil, nil, 224, nil, nil, 224, 224, nil, nil, - 224, nil, nil, nil, nil, nil, 224, nil, nil, nil, - nil, nil, nil, nil, nil, 224, nil, nil, nil, nil, - 224, 224, 224, 224, nil, 224, 224, 224, 224, nil, - nil, nil, nil, 224, 224, nil, nil, nil, 225, 225, - 225, 224, 225, 224, 224, 224, 225, 225, 224, 224, - nil, 225, nil, 225, 225, 225, 225, 225, 225, 225, - nil, nil, nil, nil, nil, 225, 225, 225, 225, 225, - 225, 225, nil, nil, 225, nil, nil, nil, nil, nil, - nil, 225, nil, nil, 225, 225, 225, 225, 225, 225, - 225, 225, 225, 225, 225, 225, nil, 225, 225, 225, - 225, 225, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 225, nil, nil, 225, nil, nil, 225, 225, nil, - nil, 225, nil, 225, nil, 225, nil, 225, nil, nil, - 225, nil, nil, nil, nil, nil, 225, nil, nil, nil, - nil, 225, 225, 225, 225, nil, 225, 225, 225, 225, - nil, nil, nil, nil, 225, 225, nil, nil, nil, 238, - 238, 238, 225, 238, 225, 225, 225, 238, 238, 225, - 225, nil, 238, nil, 238, 238, 238, 238, 238, 238, - 238, nil, nil, nil, nil, nil, 238, 238, 238, 238, - 238, 238, 238, nil, nil, 238, nil, nil, nil, nil, - nil, nil, 238, nil, nil, 238, 238, 238, 238, 238, - 238, 238, 238, nil, 238, 238, 238, nil, 238, 238, - 238, 238, 238, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 238, nil, nil, 238, nil, nil, 238, 238, - nil, nil, 238, nil, nil, nil, nil, nil, 238, nil, - nil, nil, nil, nil, nil, nil, nil, 238, nil, nil, - nil, nil, 238, 238, 238, 238, nil, 238, 238, 238, - 238, nil, nil, nil, nil, 238, 238, nil, nil, nil, - 239, 239, 239, 238, 239, 238, 238, 238, 239, 239, - 238, 238, nil, 239, nil, 239, 239, 239, 239, 239, - 239, 239, nil, nil, nil, nil, nil, 239, 239, 239, - 239, 239, 239, 239, nil, nil, 239, nil, nil, nil, - nil, nil, nil, 239, nil, nil, 239, 239, 239, 239, - 239, 239, 239, 239, nil, 239, 239, 239, nil, 239, - 239, 239, 239, 239, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 239, nil, nil, 239, nil, nil, 239, - 239, nil, nil, 239, nil, nil, nil, nil, nil, 239, - nil, nil, nil, nil, nil, nil, nil, nil, 239, nil, - nil, nil, nil, 239, 239, 239, 239, nil, 239, 239, - 239, 239, nil, nil, nil, nil, 239, 239, nil, nil, - nil, 240, 240, 240, 239, 240, 239, 239, 239, 240, - 240, 239, 239, nil, 240, nil, 240, 240, 240, 240, - 240, 240, 240, nil, nil, nil, nil, nil, 240, 240, - 240, 240, 240, 240, 240, nil, nil, 240, nil, nil, - nil, nil, nil, nil, 240, nil, nil, 240, 240, 240, - 240, 240, 240, 240, 240, nil, 240, 240, 240, nil, - 240, 240, 240, 240, 240, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 240, nil, nil, 240, nil, nil, - 240, 240, nil, nil, 240, nil, nil, nil, nil, nil, - 240, nil, nil, nil, nil, nil, nil, nil, nil, 240, - nil, nil, nil, nil, 240, 240, 240, 240, nil, 240, - 240, 240, 240, nil, nil, nil, nil, 240, 240, 240, - nil, nil, 251, 251, 251, 240, 251, 240, 240, 240, - 251, 251, 240, 240, nil, 251, nil, 251, 251, 251, - 251, 251, 251, 251, nil, nil, nil, nil, nil, 251, - 251, 251, 251, 251, 251, 251, nil, nil, 251, nil, - nil, nil, nil, nil, nil, 251, nil, nil, 251, 251, - 251, 251, 251, 251, 251, 251, nil, 251, 251, 251, - nil, 251, 251, 251, 251, 251, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 251, nil, nil, 251, nil, - nil, 251, 251, nil, nil, 251, nil, nil, nil, nil, - nil, 251, nil, nil, nil, nil, nil, nil, nil, nil, - 251, nil, nil, nil, nil, 251, 251, 251, 251, nil, - 251, 251, 251, 251, nil, nil, nil, nil, 251, 251, - nil, nil, nil, 258, 258, 258, 251, 258, 251, 251, - 251, 258, 258, 251, 251, nil, 258, nil, 258, 258, - 258, 258, 258, 258, 258, nil, nil, nil, nil, nil, - 258, 258, 258, 258, 258, 258, 258, nil, nil, 258, - nil, nil, nil, nil, nil, nil, 258, nil, nil, 258, - 258, 258, 258, 258, 258, 258, 258, nil, 258, 258, - 258, nil, 258, 258, 258, 258, 258, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 258, nil, nil, 258, - nil, nil, 258, 258, nil, nil, 258, nil, nil, nil, - nil, nil, 258, nil, nil, nil, nil, nil, nil, nil, - nil, 258, nil, nil, nil, nil, 258, 258, 258, 258, - nil, 258, 258, 258, 258, nil, nil, nil, nil, 258, - 258, nil, nil, nil, 259, 259, 259, 258, 259, 258, - 258, 258, 259, 259, 258, 258, nil, 259, nil, 259, - 259, 259, 259, 259, 259, 259, nil, nil, nil, nil, - nil, 259, 259, 259, 259, 259, 259, 259, nil, nil, - 259, nil, nil, nil, nil, nil, nil, 259, nil, nil, - 259, 259, 259, 259, 259, 259, 259, 259, nil, 259, - 259, 259, nil, 259, 259, 259, 259, 259, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 259, nil, nil, - 259, nil, nil, 259, 259, nil, nil, 259, nil, nil, - nil, nil, nil, 259, nil, nil, nil, nil, nil, nil, - nil, nil, 259, nil, nil, nil, nil, 259, 259, 259, - 259, nil, 259, 259, 259, 259, nil, nil, nil, nil, - 259, 259, nil, nil, nil, 260, 260, 260, 259, 260, - 259, 259, 259, 260, 260, 259, 259, nil, 260, nil, - 260, 260, 260, 260, 260, 260, 260, nil, nil, nil, - nil, nil, 260, 260, 260, 260, 260, 260, 260, nil, - nil, 260, nil, nil, nil, nil, nil, nil, 260, nil, - nil, 260, 260, 260, 260, 260, 260, 260, 260, nil, - 260, 260, 260, nil, 260, 260, 260, 260, 260, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 260, nil, - nil, 260, nil, nil, 260, 260, nil, nil, 260, nil, - nil, nil, nil, nil, 260, nil, nil, nil, nil, nil, - nil, nil, nil, 260, nil, nil, nil, nil, 260, 260, - 260, 260, nil, 260, 260, 260, 260, nil, nil, nil, - nil, 260, 260, nil, nil, nil, 261, 261, 261, 260, - 261, 260, 260, 260, 261, 261, 260, 260, nil, 261, - nil, 261, 261, 261, 261, 261, 261, 261, nil, nil, - nil, nil, nil, 261, 261, 261, 261, 261, 261, 261, - nil, nil, 261, nil, nil, nil, nil, nil, nil, 261, - nil, nil, 261, 261, 261, 261, 261, 261, 261, 261, - nil, 261, 261, 261, nil, 261, 261, 261, 261, 261, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 261, - nil, nil, 261, nil, nil, 261, 261, nil, nil, 261, - nil, nil, nil, nil, nil, 261, nil, nil, nil, nil, - nil, nil, nil, nil, 261, nil, nil, nil, nil, 261, - 261, 261, 261, nil, 261, 261, 261, 261, nil, nil, - nil, nil, 261, 261, nil, nil, nil, 262, 262, 262, - 261, 262, 261, 261, 261, 262, 262, 261, 261, nil, - 262, nil, 262, 262, 262, 262, 262, 262, 262, nil, - nil, nil, nil, nil, 262, 262, 262, 262, 262, 262, - 262, nil, nil, 262, nil, nil, nil, nil, nil, nil, - 262, nil, nil, 262, 262, 262, 262, 262, 262, 262, - 262, nil, 262, 262, 262, nil, 262, 262, 262, 262, - 262, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 262, nil, nil, 262, nil, nil, 262, 262, nil, nil, - 262, nil, nil, nil, nil, nil, 262, nil, nil, nil, - nil, nil, nil, nil, nil, 262, nil, nil, nil, nil, - 262, 262, 262, 262, nil, 262, 262, 262, 262, nil, - nil, nil, nil, 262, 262, nil, nil, nil, 263, 263, - 263, 262, 263, 262, 262, 262, 263, 263, 262, 262, - nil, 263, nil, 263, 263, 263, 263, 263, 263, 263, - nil, nil, nil, nil, nil, 263, 263, 263, 263, 263, - 263, 263, nil, nil, 263, nil, nil, nil, nil, nil, - nil, 263, nil, nil, 263, 263, 263, 263, 263, 263, - 263, 263, nil, 263, 263, 263, nil, 263, 263, 263, - 263, 263, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 263, nil, nil, 263, nil, nil, 263, 263, nil, - nil, 263, nil, nil, nil, nil, nil, 263, nil, nil, - nil, nil, nil, nil, nil, nil, 263, nil, nil, nil, - nil, 263, 263, 263, 263, nil, 263, 263, 263, 263, - nil, nil, nil, nil, 263, 263, nil, nil, nil, 264, - 264, 264, 263, 264, 263, 263, 263, 264, 264, 263, - 263, nil, 264, nil, 264, 264, 264, 264, 264, 264, - 264, nil, nil, nil, nil, nil, 264, 264, 264, 264, - 264, 264, 264, nil, nil, 264, nil, nil, nil, nil, - nil, nil, 264, nil, nil, 264, 264, 264, 264, 264, - 264, 264, 264, nil, 264, 264, 264, nil, 264, 264, - 264, 264, 264, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 264, nil, nil, 264, nil, nil, 264, 264, - nil, nil, 264, nil, nil, nil, nil, nil, 264, nil, - nil, nil, nil, nil, nil, nil, nil, 264, nil, nil, - nil, nil, 264, 264, 264, 264, nil, 264, 264, 264, - 264, nil, nil, nil, nil, 264, 264, nil, nil, nil, - 265, 265, 265, 264, 265, 264, 264, 264, 265, 265, - 264, 264, nil, 265, nil, 265, 265, 265, 265, 265, - 265, 265, nil, nil, nil, nil, nil, 265, 265, 265, - 265, 265, 265, 265, nil, nil, 265, nil, nil, nil, - nil, nil, nil, 265, nil, nil, 265, 265, 265, 265, - 265, 265, 265, 265, nil, 265, 265, 265, nil, 265, - 265, 265, 265, 265, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 265, nil, nil, 265, nil, nil, 265, - 265, nil, nil, 265, nil, nil, nil, nil, nil, 265, - nil, nil, nil, nil, nil, nil, nil, nil, 265, nil, - nil, nil, nil, 265, 265, 265, 265, nil, 265, 265, - 265, 265, nil, nil, nil, nil, 265, 265, nil, nil, - nil, 266, 266, 266, 265, 266, 265, 265, 265, 266, - 266, 265, 265, nil, 266, nil, 266, 266, 266, 266, - 266, 266, 266, nil, nil, nil, nil, nil, 266, 266, - 266, 266, 266, 266, 266, nil, nil, 266, nil, nil, - nil, nil, nil, nil, 266, nil, nil, 266, 266, 266, - 266, 266, 266, 266, 266, nil, 266, 266, 266, nil, - 266, 266, 266, 266, 266, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 266, nil, nil, 266, nil, nil, - 266, 266, nil, nil, 266, nil, nil, nil, nil, nil, - 266, nil, nil, nil, nil, nil, nil, nil, nil, 266, - nil, nil, nil, nil, 266, 266, 266, 266, nil, 266, - 266, 266, 266, nil, nil, nil, nil, 266, 266, nil, - nil, nil, 267, 267, 267, 266, 267, 266, 266, 266, - 267, 267, 266, 266, nil, 267, nil, 267, 267, 267, - 267, 267, 267, 267, nil, nil, nil, nil, nil, 267, - 267, 267, 267, 267, 267, 267, nil, nil, 267, nil, - nil, nil, nil, nil, nil, 267, nil, nil, 267, 267, - 267, 267, 267, 267, 267, 267, nil, 267, 267, 267, - nil, 267, 267, 267, 267, 267, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 267, nil, nil, 267, nil, - nil, 267, 267, nil, nil, 267, nil, nil, nil, nil, - nil, 267, nil, nil, nil, nil, nil, nil, nil, nil, - 267, nil, nil, nil, nil, 267, 267, 267, 267, nil, - 267, 267, 267, 267, nil, nil, nil, nil, 267, 267, - nil, nil, nil, 268, 268, 268, 267, 268, 267, 267, - 267, 268, 268, 267, 267, nil, 268, nil, 268, 268, - 268, 268, 268, 268, 268, nil, nil, nil, nil, nil, - 268, 268, 268, 268, 268, 268, 268, nil, nil, 268, - nil, nil, nil, nil, nil, nil, 268, nil, nil, 268, - 268, 268, 268, 268, 268, 268, 268, nil, 268, 268, - 268, nil, 268, 268, 268, 268, 268, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 268, nil, nil, 268, - nil, nil, 268, 268, nil, nil, 268, nil, nil, nil, - nil, nil, 268, nil, nil, nil, nil, nil, nil, nil, - nil, 268, nil, nil, nil, nil, 268, 268, 268, 268, - nil, 268, 268, 268, 268, nil, nil, nil, nil, 268, - 268, nil, nil, nil, 269, 269, 269, 268, 269, 268, - 268, 268, 269, 269, 268, 268, nil, 269, nil, 269, - 269, 269, 269, 269, 269, 269, nil, nil, nil, nil, - nil, 269, 269, 269, 269, 269, 269, 269, nil, nil, - 269, nil, nil, nil, nil, nil, nil, 269, nil, nil, - 269, 269, 269, 269, 269, 269, 269, 269, nil, 269, - 269, 269, nil, 269, 269, 269, 269, 269, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 269, nil, nil, - 269, nil, nil, 269, 269, nil, nil, 269, nil, nil, - nil, nil, nil, 269, nil, nil, nil, nil, nil, nil, - nil, nil, 269, nil, nil, nil, nil, 269, 269, 269, - 269, nil, 269, 269, 269, 269, nil, nil, nil, nil, - 269, 269, nil, nil, nil, 270, 270, 270, 269, 270, - 269, 269, 269, 270, 270, 269, 269, nil, 270, nil, - 270, 270, 270, 270, 270, 270, 270, nil, nil, nil, - nil, nil, 270, 270, 270, 270, 270, 270, 270, nil, - nil, 270, nil, nil, nil, nil, nil, nil, 270, nil, - nil, 270, 270, 270, 270, 270, 270, 270, 270, nil, - 270, 270, 270, nil, 270, 270, 270, 270, 270, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 270, nil, - nil, 270, nil, nil, 270, 270, nil, nil, 270, nil, - nil, nil, nil, nil, 270, nil, nil, nil, nil, nil, - nil, nil, nil, 270, nil, nil, nil, nil, 270, 270, - 270, 270, nil, 270, 270, 270, 270, nil, nil, nil, - nil, 270, 270, nil, nil, nil, 271, 271, 271, 270, - 271, 270, 270, 270, 271, 271, 270, 270, nil, 271, - nil, 271, 271, 271, 271, 271, 271, 271, nil, nil, - nil, nil, nil, 271, 271, 271, 271, 271, 271, 271, - nil, nil, 271, nil, nil, nil, nil, nil, nil, 271, - nil, nil, 271, 271, 271, 271, 271, 271, 271, 271, - nil, 271, 271, 271, nil, 271, 271, 271, 271, 271, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 271, - nil, nil, 271, nil, nil, 271, 271, nil, nil, 271, - nil, nil, nil, nil, nil, 271, nil, nil, nil, nil, - nil, nil, nil, nil, 271, nil, nil, nil, nil, 271, - 271, 271, 271, nil, 271, 271, 271, 271, nil, nil, - nil, nil, 271, 271, nil, nil, nil, 272, 272, 272, - 271, 272, 271, 271, 271, 272, 272, 271, 271, nil, - 272, nil, 272, 272, 272, 272, 272, 272, 272, nil, - nil, nil, nil, nil, 272, 272, 272, 272, 272, 272, - 272, nil, nil, 272, nil, nil, nil, nil, nil, nil, - 272, nil, nil, 272, 272, 272, 272, 272, 272, 272, - 272, nil, 272, 272, 272, nil, 272, 272, 272, 272, - 272, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 272, nil, nil, 272, nil, nil, 272, 272, nil, nil, - 272, nil, nil, nil, nil, nil, 272, nil, nil, nil, - nil, nil, nil, nil, nil, 272, nil, nil, nil, nil, - 272, 272, 272, 272, nil, 272, 272, 272, 272, nil, - nil, nil, nil, 272, 272, nil, nil, nil, 273, 273, - 273, 272, 273, 272, 272, 272, 273, 273, 272, 272, - nil, 273, nil, 273, 273, 273, 273, 273, 273, 273, - nil, nil, nil, nil, nil, 273, 273, 273, 273, 273, - 273, 273, nil, nil, 273, nil, nil, nil, nil, nil, - nil, 273, nil, nil, 273, 273, 273, 273, 273, 273, - 273, 273, nil, 273, 273, 273, nil, 273, 273, 273, - 273, 273, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 273, nil, nil, 273, nil, nil, 273, 273, nil, - nil, 273, nil, nil, nil, nil, nil, 273, nil, nil, - nil, nil, nil, nil, nil, nil, 273, nil, nil, nil, - nil, 273, 273, 273, 273, nil, 273, 273, 273, 273, - nil, nil, nil, nil, 273, 273, nil, nil, nil, 274, - 274, 274, 273, 274, 273, 273, 273, 274, 274, 273, - 273, nil, 274, nil, 274, 274, 274, 274, 274, 274, - 274, nil, nil, nil, nil, nil, 274, 274, 274, 274, - 274, 274, 274, nil, nil, 274, nil, nil, nil, nil, - nil, nil, 274, nil, nil, 274, 274, 274, 274, 274, - 274, 274, 274, nil, 274, 274, 274, nil, 274, 274, - 274, 274, 274, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 274, nil, nil, 274, nil, nil, 274, 274, - nil, nil, 274, nil, nil, nil, nil, nil, 274, nil, - nil, nil, nil, nil, nil, nil, nil, 274, nil, nil, - nil, nil, 274, 274, 274, 274, nil, 274, 274, 274, - 274, nil, nil, nil, nil, 274, 274, nil, nil, nil, - 275, 275, 275, 274, 275, 274, 274, 274, 275, 275, - 274, 274, nil, 275, nil, 275, 275, 275, 275, 275, - 275, 275, nil, nil, nil, nil, nil, 275, 275, 275, - 275, 275, 275, 275, nil, nil, 275, nil, nil, nil, - nil, nil, nil, 275, nil, nil, 275, 275, 275, 275, - 275, 275, 275, 275, nil, 275, 275, 275, nil, 275, - 275, 275, 275, 275, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 275, nil, nil, 275, nil, nil, 275, - 275, nil, nil, 275, nil, nil, nil, nil, nil, 275, - nil, nil, nil, nil, nil, nil, nil, nil, 275, nil, - nil, nil, nil, 275, 275, 275, 275, nil, 275, 275, - 275, 275, nil, nil, nil, nil, 275, 275, nil, nil, - nil, 276, 276, 276, 275, 276, 275, 275, 275, 276, - 276, 275, 275, nil, 276, nil, 276, 276, 276, 276, - 276, 276, 276, nil, nil, nil, nil, nil, 276, 276, - 276, 276, 276, 276, 276, nil, nil, 276, nil, nil, - nil, nil, nil, nil, 276, nil, nil, 276, 276, 276, - 276, 276, 276, 276, 276, nil, 276, 276, 276, nil, - 276, 276, 276, 276, 276, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 276, nil, nil, 276, nil, nil, - 276, 276, nil, nil, 276, nil, nil, nil, nil, nil, - 276, nil, nil, nil, nil, nil, nil, nil, nil, 276, - nil, nil, nil, nil, 276, 276, 276, 276, nil, 276, - 276, 276, 276, nil, nil, nil, nil, 276, 276, nil, - nil, nil, 277, 277, 277, 276, 277, 276, 276, 276, - 277, 277, 276, 276, nil, 277, nil, 277, 277, 277, - 277, 277, 277, 277, nil, nil, nil, nil, nil, 277, - 277, 277, 277, 277, 277, 277, nil, nil, 277, nil, - nil, nil, nil, nil, nil, 277, nil, nil, 277, 277, - 277, 277, 277, 277, 277, 277, nil, 277, 277, 277, - nil, 277, 277, 277, 277, 277, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 277, nil, nil, 277, nil, - nil, 277, 277, nil, nil, 277, nil, nil, nil, nil, - nil, 277, nil, nil, nil, nil, nil, nil, nil, nil, - 277, nil, nil, nil, nil, 277, 277, 277, 277, nil, - 277, 277, 277, 277, nil, nil, nil, nil, 277, 277, - nil, nil, nil, 278, 278, 278, 277, 278, 277, 277, - 277, 278, 278, 277, 277, nil, 278, nil, 278, 278, - 278, 278, 278, 278, 278, nil, nil, nil, nil, nil, - 278, 278, 278, 278, 278, 278, 278, nil, nil, 278, - nil, nil, nil, nil, nil, nil, 278, nil, nil, 278, - 278, 278, 278, 278, 278, 278, 278, nil, 278, 278, - 278, nil, 278, 278, 278, 278, 278, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 278, nil, nil, 278, - nil, nil, 278, 278, nil, nil, 278, nil, nil, nil, - nil, nil, 278, nil, nil, nil, nil, nil, nil, nil, - nil, 278, nil, nil, nil, nil, 278, 278, 278, 278, - nil, 278, 278, 278, 278, nil, nil, nil, nil, 278, - 278, nil, nil, nil, 279, 279, 279, 278, 279, 278, - 278, 278, 279, 279, 278, 278, nil, 279, nil, 279, - 279, 279, 279, 279, 279, 279, nil, nil, nil, nil, - nil, 279, 279, 279, 279, 279, 279, 279, nil, nil, - 279, nil, nil, nil, nil, nil, nil, 279, nil, nil, - 279, 279, 279, 279, 279, 279, 279, 279, nil, 279, - 279, 279, nil, 279, 279, 279, 279, 279, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 279, nil, nil, - 279, nil, nil, 279, 279, nil, nil, 279, nil, nil, - nil, nil, nil, 279, nil, nil, nil, nil, nil, nil, - nil, nil, 279, nil, nil, nil, nil, 279, 279, 279, - 279, nil, 279, 279, 279, 279, nil, nil, nil, nil, - 279, 279, nil, nil, nil, 284, 284, 284, 279, 284, - 279, 279, 279, 284, 284, 279, 279, nil, 284, nil, - 284, 284, 284, 284, 284, 284, 284, nil, nil, nil, - nil, nil, 284, 284, 284, 284, 284, 284, 284, nil, - nil, 284, nil, nil, nil, nil, nil, nil, 284, nil, - nil, 284, 284, 284, 284, 284, 284, 284, 284, nil, - 284, 284, 284, nil, 284, 284, 284, 284, 284, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 284, nil, - nil, 284, nil, nil, 284, 284, nil, nil, 284, nil, - nil, nil, nil, nil, 284, nil, nil, nil, nil, nil, - nil, nil, nil, 284, nil, nil, nil, nil, 284, 284, - 284, 284, nil, 284, 284, 284, 284, nil, nil, nil, - nil, 284, 284, nil, nil, nil, 300, 300, 300, 284, - 300, 284, 284, 284, 300, 300, 284, 284, nil, 300, - nil, 300, 300, 300, 300, 300, 300, 300, nil, nil, - nil, nil, nil, 300, 300, 300, 300, 300, 300, 300, - nil, nil, 300, nil, nil, nil, nil, nil, nil, 300, - nil, nil, 300, 300, 300, 300, 300, 300, 300, 300, - nil, 300, 300, 300, nil, 300, 300, 300, 300, 300, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 300, - nil, nil, 300, nil, nil, 300, 300, nil, nil, 300, - nil, nil, nil, nil, nil, 300, nil, nil, nil, nil, - nil, nil, nil, nil, 300, nil, nil, nil, nil, 300, - 300, 300, 300, nil, 300, 300, 300, 300, nil, nil, - nil, nil, 300, 300, nil, nil, nil, 307, 307, 307, - 300, 307, 300, 300, 300, 307, 307, 300, 300, nil, - 307, nil, 307, 307, 307, 307, 307, 307, 307, nil, - nil, nil, nil, nil, 307, 307, 307, 307, 307, 307, - 307, nil, nil, 307, nil, nil, nil, nil, nil, nil, - 307, nil, nil, 307, 307, 307, 307, 307, 307, 307, - 307, 307, 307, 307, 307, nil, 307, 307, 307, 307, - 307, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 307, nil, nil, 307, nil, nil, 307, 307, nil, nil, - 307, nil, 307, nil, 307, nil, 307, nil, nil, 307, - nil, nil, nil, nil, nil, 307, nil, nil, nil, nil, - 307, 307, 307, 307, nil, 307, 307, 307, 307, nil, - nil, nil, nil, 307, 307, nil, nil, nil, 308, 308, - 308, 307, 308, 307, 307, 307, 308, 308, 307, 307, - nil, 308, nil, 308, 308, 308, 308, 308, 308, 308, - nil, nil, nil, nil, nil, 308, 308, 308, 308, 308, - 308, 308, nil, nil, 308, nil, nil, nil, nil, nil, - nil, 308, nil, nil, 308, 308, 308, 308, 308, 308, - 308, 308, 308, 308, 308, 308, nil, 308, 308, 308, - 308, 308, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 308, nil, nil, 308, nil, nil, 308, 308, nil, - nil, 308, nil, 308, nil, 308, nil, 308, nil, nil, - 308, nil, nil, nil, nil, nil, 308, nil, nil, nil, - nil, 308, 308, 308, 308, nil, 308, 308, 308, 308, - nil, nil, nil, nil, 308, 308, nil, nil, nil, 316, - 316, 316, 308, 316, 308, 308, 308, 316, 316, 308, - 308, nil, 316, nil, 316, 316, 316, 316, 316, 316, - 316, nil, nil, nil, nil, nil, 316, 316, 316, 316, - 316, 316, 316, nil, nil, 316, nil, nil, nil, nil, - nil, nil, 316, nil, nil, 316, 316, 316, 316, 316, - 316, 316, 316, 316, 316, 316, 316, nil, 316, 316, - 316, 316, 316, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 316, nil, nil, 316, nil, nil, 316, 316, - nil, nil, 316, nil, 316, nil, 316, nil, 316, nil, - nil, 316, nil, nil, nil, nil, nil, 316, nil, nil, - nil, nil, 316, 316, 316, 316, nil, 316, 316, 316, - 316, nil, nil, nil, nil, 316, 316, 316, nil, nil, - 323, 323, 323, 316, 323, 316, 316, 316, 323, 323, - 316, 316, nil, 323, nil, 323, 323, 323, 323, 323, - 323, 323, nil, nil, nil, nil, nil, 323, 323, 323, - 323, 323, 323, 323, nil, nil, 323, nil, nil, nil, - nil, nil, nil, 323, nil, nil, 323, 323, 323, 323, - 323, 323, 323, 323, nil, 323, 323, 323, nil, 323, - 323, 323, 323, 323, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 323, nil, nil, 323, nil, nil, 323, - 323, nil, nil, 323, nil, nil, nil, nil, nil, 323, - nil, nil, nil, nil, nil, nil, nil, nil, 323, nil, - nil, nil, nil, 323, 323, 323, 323, nil, 323, 323, - 323, 323, nil, nil, nil, nil, 323, 323, nil, nil, - nil, 326, 326, 326, 323, 326, 323, 323, 323, 326, - 326, 323, 323, nil, 326, nil, 326, 326, 326, 326, - 326, 326, 326, nil, nil, nil, nil, nil, 326, 326, - 326, 326, 326, 326, 326, nil, nil, 326, nil, nil, - nil, nil, nil, nil, 326, nil, nil, 326, 326, 326, - 326, 326, 326, 326, 326, nil, 326, 326, 326, nil, - 326, 326, 326, 326, 326, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 326, nil, nil, 326, nil, nil, - 326, 326, nil, nil, 326, nil, nil, nil, nil, nil, - 326, nil, nil, nil, nil, nil, nil, nil, nil, 326, - nil, nil, nil, nil, 326, 326, 326, 326, nil, 326, - 326, 326, 326, nil, nil, nil, nil, 326, 326, nil, - nil, nil, 329, 329, 329, 326, 329, 326, 326, 326, - 329, 329, 326, 326, nil, 329, nil, 329, 329, 329, - 329, 329, 329, 329, nil, nil, nil, nil, nil, 329, - 329, 329, 329, 329, 329, 329, nil, nil, 329, nil, - nil, nil, nil, nil, nil, 329, nil, nil, 329, 329, - 329, 329, 329, 329, 329, 329, nil, 329, 329, 329, - nil, 329, 329, 329, 329, 329, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 329, nil, nil, 329, nil, - nil, 329, 329, nil, nil, 329, nil, nil, nil, nil, - nil, 329, nil, nil, nil, nil, nil, nil, nil, nil, - 329, nil, nil, nil, nil, 329, 329, 329, 329, nil, - 329, 329, 329, 329, nil, nil, nil, nil, 329, 329, - nil, nil, nil, 330, 330, 330, 329, 330, 329, 329, - 329, 330, 330, 329, 329, nil, 330, nil, 330, 330, - 330, 330, 330, 330, 330, nil, nil, nil, nil, nil, - 330, 330, 330, 330, 330, 330, 330, nil, nil, 330, - nil, nil, nil, nil, nil, nil, 330, nil, nil, 330, - 330, 330, 330, 330, 330, 330, 330, nil, 330, 330, - 330, nil, 330, 330, 330, 330, 330, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 330, nil, nil, 330, - nil, nil, 330, 330, nil, nil, 330, nil, nil, nil, - nil, nil, 330, nil, nil, nil, nil, nil, nil, nil, - nil, 330, nil, nil, nil, nil, 330, 330, 330, 330, - nil, 330, 330, 330, 330, nil, nil, nil, nil, 330, - 330, nil, nil, nil, nil, nil, nil, 330, nil, 330, - 330, 330, nil, nil, 330, 330, 335, 335, 335, 335, - 335, nil, nil, nil, 335, 335, nil, nil, nil, 335, - nil, 335, 335, 335, 335, 335, 335, 335, nil, nil, - nil, nil, nil, 335, 335, 335, 335, 335, 335, 335, - nil, nil, 335, nil, nil, nil, nil, nil, 335, 335, - nil, 335, 335, 335, 335, 335, 335, 335, 335, 335, - nil, 335, 335, 335, nil, 335, 335, 335, 335, 335, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 335, - nil, nil, 335, nil, nil, 335, 335, nil, nil, 335, - nil, 335, nil, nil, nil, 335, nil, nil, nil, nil, - nil, nil, nil, nil, 335, nil, nil, nil, nil, 335, - 335, 335, 335, nil, 335, 335, 335, 335, nil, nil, - nil, nil, 335, 335, nil, nil, nil, 371, 371, 371, - 335, 371, 335, 335, 335, 371, 371, 335, 335, nil, - 371, nil, 371, 371, 371, 371, 371, 371, 371, nil, - nil, nil, nil, nil, 371, 371, 371, 371, 371, 371, - 371, nil, nil, 371, nil, nil, nil, nil, nil, nil, - 371, nil, nil, 371, 371, 371, 371, 371, 371, 371, - 371, nil, 371, 371, 371, nil, 371, 371, 371, 371, - 371, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 371, nil, nil, 371, nil, nil, 371, 371, nil, nil, - 371, nil, nil, nil, nil, nil, 371, nil, nil, nil, - nil, nil, nil, nil, nil, 371, nil, nil, nil, nil, - 371, 371, 371, 371, nil, 371, 371, 371, 371, nil, - nil, nil, nil, 371, 371, nil, nil, nil, 387, 387, - 387, 371, 387, 371, 371, 371, 387, 387, 371, 371, - nil, 387, nil, 387, 387, 387, 387, 387, 387, 387, - nil, nil, nil, nil, nil, 387, 387, 387, 387, 387, - 387, 387, nil, nil, 387, nil, nil, nil, nil, nil, - nil, 387, nil, nil, 387, 387, 387, 387, 387, 387, - 387, 387, nil, 387, 387, 387, nil, 387, 387, 387, - 387, 387, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 387, nil, nil, 387, nil, nil, 387, 387, nil, - nil, 387, nil, nil, nil, nil, nil, 387, nil, nil, - nil, nil, nil, nil, nil, nil, 387, nil, nil, nil, - nil, 387, 387, 387, 387, nil, 387, 387, 387, 387, - nil, nil, nil, nil, 387, 387, nil, nil, nil, 408, - 408, 408, 387, 408, 387, 387, 387, 408, 408, 387, - 387, nil, 408, nil, 408, 408, 408, 408, 408, 408, - 408, nil, nil, nil, nil, nil, 408, 408, 408, 408, - 408, 408, 408, nil, nil, 408, nil, nil, nil, nil, - nil, nil, 408, nil, nil, 408, 408, 408, 408, 408, - 408, 408, 408, nil, 408, 408, 408, nil, 408, 408, - 408, 408, 408, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 408, nil, nil, 408, nil, nil, 408, 408, - nil, nil, 408, nil, nil, nil, nil, nil, 408, nil, - nil, nil, nil, nil, nil, nil, nil, 408, nil, nil, - nil, nil, 408, 408, 408, 408, nil, 408, 408, 408, - 408, nil, nil, nil, nil, 408, 408, nil, nil, nil, - 438, 438, 438, 408, 438, 408, 408, 408, 438, 438, - 408, 408, nil, 438, nil, 438, 438, 438, 438, 438, - 438, 438, nil, nil, nil, nil, nil, 438, 438, 438, - 438, 438, 438, 438, nil, nil, 438, nil, nil, nil, - nil, nil, nil, 438, nil, nil, 438, 438, 438, 438, - 438, 438, 438, 438, nil, 438, 438, 438, nil, 438, - 438, 438, 438, 438, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 438, nil, nil, 438, nil, nil, 438, - 438, nil, nil, 438, nil, nil, nil, nil, nil, 438, - nil, nil, nil, nil, nil, nil, nil, nil, 438, nil, - nil, nil, nil, 438, 438, 438, 438, nil, 438, 438, - 438, 438, nil, nil, nil, nil, 438, 438, nil, nil, - nil, nil, nil, nil, 438, nil, 438, 438, 438, 461, - nil, 438, 438, nil, nil, nil, 461, 461, 461, nil, - nil, 461, 461, 461, nil, 461, nil, nil, nil, nil, - nil, nil, nil, 461, 461, 461, 461, nil, nil, nil, - nil, nil, nil, nil, nil, 461, 461, nil, 461, 461, - 461, 461, 461, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 461, 461, 461, 461, 461, - 461, 461, 461, 461, 461, 461, 461, 461, 461, nil, - nil, 461, 461, 461, nil, nil, 461, nil, 461, 461, - nil, nil, 461, 461, nil, 461, nil, 461, nil, 461, - nil, 461, 461, nil, 461, 461, 461, 461, 461, nil, - 461, 461, 461, 1106, nil, 1106, 1106, 1106, 1106, 1106, - nil, nil, nil, nil, nil, nil, 461, nil, 1106, 461, - 461, 471, 461, nil, 461, nil, nil, nil, 471, 471, - 471, 461, nil, 471, 471, 471, nil, 471, nil, nil, - 1106, nil, nil, nil, nil, 471, 471, 471, 471, 471, - nil, 1106, 1106, nil, nil, nil, 1106, 471, 471, nil, - 471, 471, 471, 471, 471, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 471, 471, 471, - 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, - 471, nil, nil, 471, 471, 471, nil, nil, 471, nil, - nil, 471, nil, nil, 471, 471, nil, 471, nil, 471, - nil, 471, nil, 471, 471, nil, 471, 471, 471, 471, - 471, nil, 471, 471, 471, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 471, nil, - nil, 471, 471, 471, 471, nil, 471, 472, 471, nil, - nil, nil, nil, 471, 472, 472, 472, nil, nil, 472, - 472, 472, nil, 472, nil, nil, nil, nil, nil, nil, - nil, 472, 472, 472, 472, 472, nil, nil, nil, nil, - nil, nil, nil, 472, 472, nil, 472, 472, 472, 472, - 472, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 472, 472, 472, 472, 472, 472, 472, - 472, 472, 472, 472, 472, 472, 472, nil, nil, 472, - 472, 472, nil, nil, 472, nil, nil, 472, nil, nil, - 472, 472, nil, 472, nil, 472, nil, 472, nil, 472, - 472, nil, 472, 472, 472, 472, 472, nil, 472, 472, - 472, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 472, nil, nil, 472, 472, 472, - 472, nil, 472, nil, 472, nil, 473, 473, 473, 472, - 473, nil, nil, nil, 473, 473, nil, nil, nil, 473, - nil, 473, 473, 473, 473, 473, 473, 473, nil, nil, - nil, nil, nil, 473, 473, 473, 473, 473, 473, 473, - nil, nil, 473, nil, nil, nil, nil, nil, nil, 473, - nil, nil, 473, 473, 473, 473, 473, 473, 473, 473, - nil, 473, 473, 473, nil, 473, 473, 473, 473, 473, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 473, - nil, nil, 473, nil, nil, 473, 473, nil, nil, 473, - nil, nil, nil, nil, nil, 473, nil, nil, nil, nil, - nil, nil, nil, nil, 473, nil, nil, nil, nil, 473, - 473, 473, 473, nil, 473, 473, 473, 473, nil, nil, - nil, nil, 473, 473, nil, nil, nil, 500, 500, 500, - 473, 500, 473, 473, 473, 500, 500, 473, 473, nil, - 500, nil, 500, 500, 500, 500, 500, 500, 500, nil, - nil, nil, nil, nil, 500, 500, 500, 500, 500, 500, - 500, nil, nil, 500, nil, nil, nil, nil, nil, nil, - 500, nil, nil, 500, 500, 500, 500, 500, 500, 500, - 500, nil, 500, 500, 500, nil, 500, 500, 500, 500, - 500, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 500, nil, nil, 500, nil, nil, 500, 500, nil, nil, - 500, nil, nil, nil, nil, nil, 500, nil, nil, nil, - nil, nil, nil, nil, nil, 500, nil, nil, nil, nil, - 500, 500, 500, 500, nil, 500, 500, 500, 500, nil, - nil, nil, nil, 500, 500, nil, nil, nil, 513, 513, - 513, 500, 513, 500, 500, 500, 513, 513, 500, 500, - nil, 513, nil, 513, 513, 513, 513, 513, 513, 513, - nil, nil, nil, nil, nil, 513, 513, 513, 513, 513, - 513, 513, nil, nil, 513, nil, nil, nil, nil, nil, - nil, 513, nil, nil, 513, 513, 513, 513, 513, 513, - 513, 513, nil, 513, 513, 513, nil, 513, 513, 513, - 513, 513, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 513, nil, nil, 513, nil, nil, 513, 513, nil, - nil, 513, nil, nil, nil, nil, nil, 513, nil, nil, - nil, nil, nil, nil, nil, nil, 513, nil, nil, nil, - nil, 513, 513, 513, 513, nil, 513, 513, 513, 513, - nil, nil, nil, nil, 513, 513, nil, nil, nil, 523, - 523, 523, 513, 523, 513, 513, 513, 523, 523, 513, - 513, nil, 523, nil, 523, 523, 523, 523, 523, 523, - 523, nil, nil, nil, nil, nil, 523, 523, 523, 523, - 523, 523, 523, nil, nil, 523, nil, nil, nil, nil, - nil, nil, 523, nil, nil, 523, 523, 523, 523, 523, - 523, 523, 523, 523, 523, 523, 523, nil, 523, 523, - 523, 523, 523, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 523, nil, nil, 523, nil, nil, 523, 523, - nil, nil, 523, nil, 523, nil, 523, nil, 523, nil, - nil, 523, nil, nil, nil, nil, nil, 523, nil, nil, - nil, nil, 523, 523, 523, 523, nil, 523, 523, 523, - 523, nil, nil, nil, nil, 523, 523, nil, nil, nil, - 525, 525, 525, 523, 525, 523, 523, 523, 525, 525, - 523, 523, nil, 525, nil, 525, 525, 525, 525, 525, - 525, 525, nil, nil, nil, nil, nil, 525, 525, 525, - 525, 525, 525, 525, nil, nil, 525, nil, nil, nil, - nil, nil, nil, 525, nil, nil, 525, 525, 525, 525, - 525, 525, 525, 525, nil, 525, 525, 525, nil, 525, - 525, 525, 525, 525, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 525, nil, nil, 525, nil, nil, 525, - 525, nil, nil, 525, nil, nil, nil, nil, nil, 525, - nil, nil, nil, nil, nil, nil, nil, nil, 525, nil, - nil, nil, nil, 525, 525, 525, 525, nil, 525, 525, - 525, 525, nil, nil, nil, nil, 525, 525, nil, nil, - nil, 526, 526, 526, 525, 526, 525, 525, 525, 526, - 526, 525, 525, nil, 526, nil, 526, 526, 526, 526, - 526, 526, 526, nil, nil, nil, nil, nil, 526, 526, - 526, 526, 526, 526, 526, nil, nil, 526, nil, nil, - nil, nil, nil, nil, 526, nil, nil, 526, 526, 526, - 526, 526, 526, 526, 526, nil, 526, 526, 526, nil, - 526, 526, 526, 526, 526, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 526, nil, nil, 526, nil, nil, - 526, 526, nil, nil, 526, nil, nil, nil, nil, nil, - 526, nil, nil, nil, nil, nil, nil, nil, nil, 526, - nil, nil, nil, nil, 526, 526, 526, 526, nil, 526, - 526, 526, 526, nil, nil, nil, nil, 526, 526, nil, - nil, nil, 527, 527, 527, 526, 527, 526, 526, 526, - 527, 527, 526, 526, nil, 527, nil, 527, 527, 527, - 527, 527, 527, 527, nil, nil, nil, nil, nil, 527, - 527, 527, 527, 527, 527, 527, nil, nil, 527, nil, - nil, nil, nil, nil, nil, 527, nil, nil, 527, 527, - 527, 527, 527, 527, 527, 527, nil, 527, 527, 527, - nil, 527, 527, 527, 527, 527, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 527, nil, nil, 527, nil, - nil, 527, 527, nil, nil, 527, nil, nil, nil, nil, - nil, 527, nil, nil, nil, nil, nil, nil, nil, nil, - 527, nil, nil, nil, nil, 527, 527, 527, 527, nil, - 527, 527, 527, 527, nil, nil, nil, nil, 527, 527, - nil, nil, nil, nil, nil, nil, 527, nil, 527, 527, - 527, 559, nil, 527, 527, nil, nil, nil, 559, 559, - 559, nil, nil, 559, 559, 559, 235, 559, 235, 235, - 235, 235, 235, nil, nil, 559, 559, 559, nil, nil, - nil, 235, nil, nil, nil, nil, nil, 559, 559, nil, - 559, 559, 559, 559, 559, nil, 410, nil, 410, 410, - 410, 410, 410, 235, nil, nil, nil, nil, nil, nil, - nil, 410, 235, 235, 235, 235, nil, nil, nil, 235, - nil, 1101, nil, 1101, 1101, 1101, 1101, 1101, 559, nil, - nil, nil, nil, 410, 410, 559, 1101, nil, nil, nil, - 559, 559, 410, 410, 410, 410, nil, nil, nil, 410, - nil, nil, nil, nil, nil, nil, nil, nil, 1101, 235, - nil, nil, nil, 559, 559, nil, nil, 1101, 1101, 1101, - 1101, nil, nil, nil, 1101, nil, nil, nil, 559, nil, - nil, 559, nil, 564, 564, 564, 559, 564, nil, 410, - nil, 564, 564, 559, nil, nil, 564, nil, 564, 564, - 564, 564, 564, 564, 564, nil, nil, nil, nil, nil, - 564, 564, 564, 564, 564, 564, 564, nil, nil, 564, - nil, nil, nil, nil, nil, nil, 564, nil, nil, 564, - 564, 564, 564, 564, 564, 564, 564, nil, 564, 564, - 564, nil, 564, 564, 564, 564, 564, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 564, nil, nil, 564, - nil, nil, 564, 564, nil, nil, 564, nil, nil, nil, - nil, nil, 564, nil, nil, nil, nil, nil, nil, nil, - nil, 564, nil, nil, nil, nil, 564, 564, 564, 564, - nil, 564, 564, 564, 564, nil, nil, nil, nil, 564, - 564, nil, nil, nil, 574, 574, 574, 564, 574, 564, - 564, 564, 574, 574, 564, 564, nil, 574, nil, 574, - 574, 574, 574, 574, 574, 574, nil, nil, nil, nil, - nil, 574, 574, 574, 574, 574, 574, 574, nil, nil, - 574, nil, nil, nil, nil, nil, nil, 574, nil, nil, - 574, 574, 574, 574, 574, 574, 574, 574, 574, 574, - 574, 574, nil, 574, 574, 574, 574, 574, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 574, nil, nil, - 574, nil, nil, 574, 574, nil, nil, 574, nil, 574, - nil, 574, nil, 574, nil, nil, 574, nil, nil, nil, - nil, nil, 574, nil, nil, nil, nil, 574, 574, 574, - 574, nil, 574, 574, 574, 574, nil, nil, nil, nil, - 574, 574, nil, nil, nil, 576, 576, 576, 574, 576, - 574, 574, 574, 576, 576, 574, 574, nil, 576, nil, - 576, 576, 576, 576, 576, 576, 576, nil, nil, nil, - nil, nil, 576, 576, 576, 576, 576, 576, 576, nil, - nil, 576, nil, nil, nil, nil, nil, nil, 576, nil, - nil, 576, 576, 576, 576, 576, 576, 576, 576, 576, - 576, 576, 576, nil, 576, 576, 576, 576, 576, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 576, nil, - nil, 576, nil, nil, 576, 576, nil, nil, 576, nil, - nil, nil, 576, nil, 576, nil, nil, 576, nil, nil, - nil, nil, nil, 576, nil, nil, nil, nil, 576, 576, - 576, 576, nil, 576, 576, 576, 576, nil, nil, nil, - nil, 576, 576, nil, nil, nil, 578, 578, 578, 576, - 578, 576, 576, 576, 578, 578, 576, 576, nil, 578, - nil, 578, 578, 578, 578, 578, 578, 578, nil, nil, - nil, nil, nil, 578, 578, 578, 578, 578, 578, 578, - nil, nil, 578, nil, nil, nil, nil, nil, nil, 578, - nil, nil, 578, 578, 578, 578, 578, 578, 578, 578, - nil, 578, 578, 578, nil, 578, 578, 578, 578, 578, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 578, - nil, nil, 578, nil, nil, 578, 578, nil, nil, 578, - nil, nil, nil, nil, nil, 578, nil, nil, nil, nil, - nil, nil, nil, nil, 578, nil, nil, nil, nil, 578, - 578, 578, 578, nil, 578, 578, 578, 578, nil, nil, - nil, nil, 578, 578, nil, nil, nil, nil, nil, nil, - 578, nil, 578, 578, 578, nil, nil, 578, 578, 584, - 584, 584, 584, 584, nil, nil, nil, 584, 584, nil, - nil, nil, 584, nil, 584, 584, 584, 584, 584, 584, - 584, nil, nil, nil, nil, nil, 584, 584, 584, 584, - 584, 584, 584, nil, nil, 584, nil, nil, nil, nil, - nil, 584, 584, 584, 584, 584, 584, 584, 584, 584, - 584, 584, 584, nil, 584, 584, 584, nil, 584, 584, - 584, 584, 584, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 584, nil, nil, 584, nil, nil, 584, 584, - nil, nil, 584, nil, 584, nil, nil, nil, 584, nil, - nil, nil, nil, nil, nil, nil, nil, 584, nil, nil, - nil, nil, 584, 584, 584, 584, nil, 584, 584, 584, - 584, nil, nil, nil, nil, 584, 584, nil, nil, nil, - nil, nil, 584, 584, nil, 584, 584, 584, nil, nil, - 584, 584, 594, 594, 594, nil, 594, nil, nil, nil, - 594, 594, nil, nil, nil, 594, nil, 594, 594, 594, - 594, 594, 594, 594, nil, nil, nil, nil, nil, 594, - 594, 594, 594, 594, 594, 594, nil, nil, 594, nil, - nil, nil, nil, nil, nil, 594, nil, nil, 594, 594, - 594, 594, 594, 594, 594, 594, 594, 594, 594, 594, - nil, 594, 594, 594, 594, 594, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 594, nil, nil, 594, nil, - nil, 594, 594, nil, nil, 594, nil, 594, nil, 594, - nil, 594, nil, nil, 594, nil, nil, nil, nil, nil, - 594, nil, nil, nil, nil, 594, 594, 594, 594, nil, - 594, 594, 594, 594, nil, nil, nil, nil, 594, 594, - nil, nil, nil, 604, 604, 604, 594, 604, 594, 594, - 594, 604, 604, 594, 594, nil, 604, nil, 604, 604, - 604, 604, 604, 604, 604, nil, nil, nil, nil, nil, - 604, 604, 604, 604, 604, 604, 604, nil, nil, 604, - nil, nil, nil, nil, nil, nil, 604, nil, nil, 604, - 604, 604, 604, 604, 604, 604, 604, nil, 604, 604, - 604, nil, 604, 604, 604, 604, 604, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 604, nil, nil, 604, - nil, nil, 604, 604, nil, nil, 604, nil, nil, nil, - nil, nil, 604, nil, nil, nil, nil, nil, nil, nil, - nil, 604, nil, nil, nil, nil, 604, 604, 604, 604, - nil, 604, 604, 604, 604, nil, nil, nil, nil, 604, - 604, nil, nil, nil, 607, 607, 607, 604, 607, 604, - 604, 604, 607, 607, 604, 604, nil, 607, nil, 607, - 607, 607, 607, 607, 607, 607, nil, nil, nil, nil, - nil, 607, 607, 607, 607, 607, 607, 607, nil, nil, - 607, nil, nil, nil, nil, nil, nil, 607, nil, nil, - 607, 607, 607, 607, 607, 607, 607, 607, nil, 607, - 607, 607, nil, 607, 607, 607, 607, 607, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 607, nil, nil, - 607, nil, nil, 607, 607, nil, nil, 607, nil, nil, - nil, nil, nil, 607, nil, nil, nil, nil, nil, nil, - nil, nil, 607, nil, nil, nil, nil, 607, 607, 607, - 607, nil, 607, 607, 607, 607, nil, nil, nil, nil, - 607, 607, nil, nil, nil, 609, 609, 609, 607, 609, - 607, 607, 607, 609, 609, 607, 607, nil, 609, nil, - 609, 609, 609, 609, 609, 609, 609, nil, nil, nil, - nil, nil, 609, 609, 609, 609, 609, 609, 609, nil, - nil, 609, nil, nil, nil, nil, nil, nil, 609, nil, - nil, 609, 609, 609, 609, 609, 609, 609, 609, nil, - 609, 609, 609, nil, 609, 609, 609, 609, 609, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 609, nil, - nil, 609, nil, nil, 609, 609, nil, nil, 609, nil, - nil, nil, nil, nil, 609, nil, nil, nil, nil, nil, - nil, nil, nil, 609, nil, nil, nil, nil, 609, 609, - 609, 609, nil, 609, 609, 609, 609, nil, nil, nil, - nil, 609, 609, nil, nil, nil, 615, 615, 615, 609, - 615, 609, 609, 609, 615, 615, 609, 609, nil, 615, - nil, 615, 615, 615, 615, 615, 615, 615, nil, nil, - nil, nil, nil, 615, 615, 615, 615, 615, 615, 615, - nil, nil, 615, nil, nil, nil, nil, nil, nil, 615, - nil, nil, 615, 615, 615, 615, 615, 615, 615, 615, - 615, 615, 615, 615, nil, 615, 615, 615, 615, 615, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 615, - nil, nil, 615, nil, nil, 615, 615, nil, nil, 615, - nil, 615, nil, nil, nil, 615, nil, nil, 615, nil, - nil, nil, nil, nil, 615, nil, nil, nil, nil, 615, - 615, 615, 615, nil, 615, 615, 615, 615, nil, nil, - nil, nil, 615, 615, nil, nil, nil, 618, 618, 618, - 615, 618, 615, 615, 615, 618, 618, 615, 615, nil, - 618, nil, 618, 618, 618, 618, 618, 618, 618, nil, - nil, nil, nil, nil, 618, 618, 618, 618, 618, 618, - 618, nil, nil, 618, nil, nil, nil, nil, nil, nil, - 618, nil, nil, 618, 618, 618, 618, 618, 618, 618, - 618, 618, 618, 618, 618, nil, 618, 618, 618, 618, - 618, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 618, nil, nil, 618, nil, nil, 618, 618, nil, nil, - 618, nil, nil, nil, nil, nil, 618, nil, nil, 618, - nil, nil, nil, nil, nil, 618, nil, nil, nil, nil, - 618, 618, 618, 618, nil, 618, 618, 618, 618, nil, - nil, nil, nil, 618, 618, nil, nil, nil, 631, 631, - 631, 618, 631, 618, 618, 618, 631, 631, 618, 618, - nil, 631, nil, 631, 631, 631, 631, 631, 631, 631, - nil, nil, nil, nil, nil, 631, 631, 631, 631, 631, - 631, 631, nil, nil, 631, nil, nil, nil, nil, nil, - nil, 631, nil, nil, 631, 631, 631, 631, 631, 631, - 631, 631, nil, 631, 631, 631, nil, 631, 631, 631, - 631, 631, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 631, nil, nil, 631, nil, nil, 631, 631, nil, - nil, 631, nil, 631, nil, nil, nil, 631, nil, nil, - nil, nil, nil, nil, nil, nil, 631, nil, nil, nil, - nil, 631, 631, 631, 631, nil, 631, 631, 631, 631, - nil, nil, nil, nil, 631, 631, nil, nil, nil, 632, - 632, 632, 631, 632, 631, 631, 631, 632, 632, 631, - 631, nil, 632, nil, 632, 632, 632, 632, 632, 632, - 632, nil, nil, nil, nil, nil, 632, 632, 632, 632, - 632, 632, 632, nil, nil, 632, nil, nil, nil, nil, - nil, nil, 632, nil, nil, 632, 632, 632, 632, 632, - 632, 632, 632, 632, 632, 632, 632, nil, 632, 632, - 632, 632, 632, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 632, nil, nil, 632, nil, nil, 632, 632, - nil, nil, 632, nil, 632, nil, 632, nil, 632, nil, - nil, 632, nil, nil, nil, nil, nil, 632, nil, nil, - nil, nil, 632, 632, 632, 632, nil, 632, 632, 632, - 632, nil, nil, nil, nil, 632, 632, nil, nil, nil, - 642, 642, 642, 632, 642, 632, 632, 632, 642, 642, - 632, 632, nil, 642, nil, 642, 642, 642, 642, 642, - 642, 642, nil, nil, nil, nil, nil, 642, 642, 642, - 642, 642, 642, 642, nil, nil, 642, nil, nil, nil, - nil, nil, nil, 642, nil, nil, 642, 642, 642, 642, - 642, 642, 642, 642, 642, 642, 642, 642, nil, 642, - 642, 642, 642, 642, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 642, nil, nil, 642, nil, nil, 642, - 642, nil, nil, 642, nil, 642, nil, 642, nil, 642, - nil, nil, 642, nil, nil, nil, nil, nil, 642, nil, - nil, nil, nil, 642, 642, 642, 642, nil, 642, 642, - 642, 642, nil, nil, nil, nil, 642, 642, nil, nil, - nil, nil, nil, nil, 642, nil, 642, 642, 642, nil, - nil, 642, 642, 673, 673, 673, 673, 673, nil, nil, - nil, 673, 673, nil, nil, nil, 673, nil, 673, 673, - 673, 673, 673, 673, 673, nil, nil, nil, nil, nil, - 673, 673, 673, 673, 673, 673, 673, nil, nil, 673, - nil, nil, nil, nil, nil, 673, 673, nil, 673, 673, - 673, 673, 673, 673, 673, 673, 673, nil, 673, 673, - 673, nil, 673, 673, 673, 673, 673, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 673, nil, nil, 673, - nil, nil, 673, 673, nil, nil, 673, nil, 673, nil, - nil, nil, 673, nil, nil, nil, nil, nil, nil, nil, - nil, 673, nil, nil, nil, nil, 673, 673, 673, 673, - nil, 673, 673, 673, 673, nil, nil, nil, nil, 673, - 673, nil, nil, nil, 674, 674, 674, 673, 674, 673, - 673, 673, 674, 674, 673, 673, nil, 674, nil, 674, - 674, 674, 674, 674, 674, 674, nil, nil, nil, nil, - nil, 674, 674, 674, 674, 674, 674, 674, nil, nil, - 674, nil, nil, nil, nil, nil, nil, 674, nil, nil, - 674, 674, 674, 674, 674, 674, 674, 674, nil, 674, - 674, 674, nil, 674, 674, 674, 674, 674, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 674, nil, nil, - 674, nil, nil, 674, 674, nil, nil, 674, nil, 674, - nil, nil, nil, 674, nil, nil, nil, nil, nil, nil, - nil, nil, 674, nil, nil, nil, nil, 674, 674, 674, - 674, nil, 674, 674, 674, 674, nil, nil, nil, nil, - 674, 674, nil, nil, nil, 676, 676, 676, 674, 676, - 674, 674, 674, 676, 676, 674, 674, nil, 676, nil, - 676, 676, 676, 676, 676, 676, 676, nil, nil, nil, - nil, nil, 676, 676, 676, 676, 676, 676, 676, nil, - nil, 676, nil, nil, nil, nil, nil, nil, 676, nil, - nil, 676, 676, 676, 676, 676, 676, 676, 676, nil, - 676, 676, 676, nil, 676, 676, 676, 676, 676, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 676, nil, - nil, 676, nil, nil, 676, 676, nil, nil, 676, nil, - nil, nil, nil, nil, 676, nil, nil, nil, nil, nil, - nil, nil, nil, 676, nil, nil, nil, nil, 676, 676, - 676, 676, nil, 676, 676, 676, 676, nil, nil, nil, - nil, 676, 676, nil, nil, nil, 677, 677, 677, 676, - 677, 676, 676, 676, 677, 677, 676, 676, nil, 677, - nil, 677, 677, 677, 677, 677, 677, 677, nil, nil, - nil, nil, nil, 677, 677, 677, 677, 677, 677, 677, - nil, nil, 677, nil, nil, nil, nil, nil, nil, 677, - nil, nil, 677, 677, 677, 677, 677, 677, 677, 677, - 677, 677, 677, 677, nil, 677, 677, 677, 677, 677, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 677, - nil, nil, 677, nil, nil, 677, 677, nil, nil, 677, - nil, 677, nil, 677, nil, 677, nil, nil, 677, nil, - nil, nil, nil, nil, 677, nil, nil, nil, nil, 677, - 677, 677, 677, nil, 677, 677, 677, 677, nil, nil, - nil, nil, 677, 677, nil, nil, nil, nil, nil, nil, - 677, nil, 677, 677, 677, nil, nil, 677, 677, 680, - 680, 680, 680, 680, nil, nil, nil, 680, 680, nil, - nil, nil, 680, nil, 680, 680, 680, 680, 680, 680, - 680, nil, nil, nil, nil, nil, 680, 680, 680, 680, - 680, 680, 680, nil, nil, 680, nil, nil, nil, nil, - nil, 680, 680, nil, 680, 680, 680, 680, 680, 680, - 680, 680, 680, nil, 680, 680, 680, nil, 680, 680, - 680, 680, 680, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 680, nil, nil, 680, nil, nil, 680, 680, - nil, nil, 680, nil, 680, nil, nil, nil, 680, nil, - nil, nil, nil, nil, nil, nil, nil, 680, nil, nil, - nil, nil, 680, 680, 680, 680, nil, 680, 680, 680, - 680, nil, nil, nil, nil, 680, 680, nil, nil, nil, - 681, 681, 681, 680, 681, 680, 680, 680, 681, 681, - 680, 680, nil, 681, nil, 681, 681, 681, 681, 681, - 681, 681, nil, nil, nil, nil, nil, 681, 681, 681, - 681, 681, 681, 681, nil, nil, 681, nil, nil, nil, - nil, nil, nil, 681, nil, nil, 681, 681, 681, 681, - 681, 681, 681, 681, nil, 681, 681, 681, nil, 681, - 681, 681, 681, 681, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 681, nil, nil, 681, nil, nil, 681, - 681, nil, nil, 681, nil, nil, nil, nil, nil, 681, - nil, nil, nil, nil, nil, nil, nil, nil, 681, nil, - nil, nil, nil, 681, 681, 681, 681, nil, 681, 681, - 681, 681, nil, nil, nil, nil, 681, 681, nil, nil, - nil, 684, 684, 684, 681, 684, 681, 681, 681, 684, - 684, 681, 681, nil, 684, nil, 684, 684, 684, 684, - 684, 684, 684, nil, nil, nil, nil, nil, 684, 684, - 684, 684, 684, 684, 684, nil, nil, 684, nil, nil, - nil, nil, nil, nil, 684, nil, nil, 684, 684, 684, - 684, 684, 684, 684, 684, 684, 684, 684, 684, nil, - 684, 684, 684, 684, 684, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 684, nil, nil, 684, nil, nil, - 684, 684, nil, nil, 684, nil, 684, nil, 684, nil, - 684, nil, nil, 684, nil, nil, nil, nil, nil, 684, - nil, nil, nil, nil, 684, 684, 684, 684, nil, 684, - 684, 684, 684, nil, nil, nil, nil, 684, 684, nil, - nil, nil, 685, 685, 685, 684, 685, 684, 684, 684, - 685, 685, 684, 684, nil, 685, nil, 685, 685, 685, - 685, 685, 685, 685, nil, nil, nil, nil, nil, 685, - 685, 685, 685, 685, 685, 685, nil, nil, 685, nil, - nil, nil, nil, nil, nil, 685, nil, nil, 685, 685, - 685, 685, 685, 685, 685, 685, 685, 685, 685, 685, - nil, 685, 685, 685, 685, 685, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 685, nil, nil, 685, nil, - nil, 685, 685, nil, nil, 685, nil, nil, nil, 685, - nil, 685, nil, nil, 685, nil, nil, nil, nil, nil, - 685, nil, nil, nil, nil, 685, 685, 685, 685, nil, - 685, 685, 685, 685, nil, nil, nil, nil, 685, 685, - nil, nil, nil, 686, 686, 686, 685, 686, 685, 685, - 685, 686, 686, 685, 685, nil, 686, nil, 686, 686, - 686, 686, 686, 686, 686, nil, nil, nil, nil, nil, - 686, 686, 686, 686, 686, 686, 686, nil, nil, 686, - nil, nil, nil, nil, nil, nil, 686, nil, nil, 686, - 686, 686, 686, 686, 686, 686, 686, nil, 686, 686, - 686, nil, 686, 686, 686, 686, 686, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 686, nil, nil, 686, - nil, nil, 686, 686, nil, nil, 686, nil, nil, nil, - nil, nil, 686, nil, nil, nil, nil, nil, nil, nil, - nil, 686, nil, nil, nil, nil, 686, 686, 686, 686, - nil, 686, 686, 686, 686, nil, nil, nil, nil, 686, - 686, nil, nil, nil, 687, 687, 687, 686, 687, 686, - 686, 686, 687, 687, 686, 686, nil, 687, nil, 687, - 687, 687, 687, 687, 687, 687, nil, nil, nil, nil, - nil, 687, 687, 687, 687, 687, 687, 687, nil, nil, - 687, nil, nil, nil, nil, nil, nil, 687, nil, nil, - 687, 687, 687, 687, 687, 687, 687, 687, nil, 687, - 687, 687, nil, 687, 687, 687, 687, 687, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 687, nil, nil, - 687, nil, nil, 687, 687, nil, nil, 687, nil, nil, - nil, nil, nil, 687, nil, nil, nil, nil, nil, nil, - nil, nil, 687, nil, nil, nil, nil, 687, 687, 687, - 687, nil, 687, 687, 687, 687, nil, nil, nil, nil, - 687, 687, nil, nil, nil, 691, 691, 691, 687, 691, - 687, 687, 687, 691, 691, 687, 687, nil, 691, nil, - 691, 691, 691, 691, 691, 691, 691, nil, nil, nil, - nil, nil, 691, 691, 691, 691, 691, 691, 691, nil, - nil, 691, nil, nil, nil, nil, nil, nil, 691, nil, - nil, 691, 691, 691, 691, 691, 691, 691, 691, nil, - 691, 691, 691, nil, 691, 691, 691, 691, 691, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 691, nil, - nil, 691, nil, nil, 691, 691, nil, nil, 691, nil, - nil, nil, nil, nil, 691, nil, nil, nil, nil, nil, - nil, nil, nil, 691, nil, nil, nil, nil, 691, 691, - 691, 691, nil, 691, 691, 691, 691, nil, nil, nil, - nil, 691, 691, nil, nil, nil, 693, 693, 693, 691, - 693, 691, 691, 691, 693, 693, 691, 691, nil, 693, - nil, 693, 693, 693, 693, 693, 693, 693, nil, nil, - nil, nil, nil, 693, 693, 693, 693, 693, 693, 693, - nil, nil, 693, nil, nil, nil, nil, nil, nil, 693, - nil, nil, 693, 693, 693, 693, 693, 693, 693, 693, - nil, 693, 693, 693, nil, 693, 693, 693, 693, 693, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 693, - nil, nil, 693, nil, nil, 693, 693, nil, nil, 693, - nil, nil, nil, nil, nil, 693, nil, nil, nil, nil, - nil, nil, nil, nil, 693, nil, nil, nil, nil, 693, - 693, 693, 693, nil, 693, 693, 693, 693, nil, nil, - nil, nil, 693, 693, nil, nil, nil, 702, 702, 702, - 693, 702, 693, 693, 693, 702, 702, 693, 693, nil, - 702, nil, 702, 702, 702, 702, 702, 702, 702, nil, - nil, nil, nil, nil, 702, 702, 702, 702, 702, 702, - 702, nil, nil, 702, nil, nil, nil, nil, nil, nil, - 702, nil, nil, 702, 702, 702, 702, 702, 702, 702, - 702, nil, 702, 702, 702, nil, 702, 702, 702, 702, - 702, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 702, nil, nil, 702, nil, nil, 702, 702, nil, nil, - 702, nil, 702, nil, nil, nil, 702, nil, nil, nil, - nil, nil, nil, nil, nil, 702, nil, nil, nil, nil, - 702, 702, 702, 702, nil, 702, 702, 702, 702, nil, - nil, nil, nil, 702, 702, nil, nil, nil, 718, 718, - 718, 702, 718, 702, 702, 702, 718, 718, 702, 702, - nil, 718, nil, 718, 718, 718, 718, 718, 718, 718, - nil, nil, nil, nil, nil, 718, 718, 718, 718, 718, - 718, 718, nil, nil, 718, nil, nil, nil, nil, nil, - nil, 718, nil, nil, 718, 718, 718, 718, 718, 718, - 718, 718, nil, 718, 718, 718, nil, 718, 718, 718, - 718, 718, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 718, nil, nil, 718, nil, nil, 718, 718, nil, - nil, 718, nil, nil, nil, nil, nil, 718, nil, nil, - nil, nil, nil, nil, nil, nil, 718, nil, nil, nil, - nil, 718, 718, 718, 718, nil, 718, 718, 718, 718, - nil, nil, nil, nil, 718, 718, nil, nil, nil, 740, - 740, 740, 718, 740, 718, 718, 718, 740, 740, 718, - 718, nil, 740, nil, 740, 740, 740, 740, 740, 740, - 740, nil, nil, nil, nil, nil, 740, 740, 740, 740, - 740, 740, 740, nil, nil, 740, nil, nil, nil, nil, - nil, nil, 740, nil, nil, 740, 740, 740, 740, 740, - 740, 740, 740, nil, 740, 740, 740, nil, 740, 740, - 740, 740, 740, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 740, nil, nil, 740, nil, nil, 740, 740, - nil, nil, 740, nil, nil, nil, nil, nil, 740, nil, - nil, nil, nil, nil, nil, nil, nil, 740, nil, nil, - nil, nil, 740, 740, 740, 740, nil, 740, 740, 740, - 740, nil, nil, nil, nil, 740, 740, nil, nil, nil, - 741, 741, 741, 740, 741, 740, 740, 740, 741, 741, - 740, 740, nil, 741, nil, 741, 741, 741, 741, 741, - 741, 741, nil, nil, nil, nil, nil, 741, 741, 741, - 741, 741, 741, 741, nil, nil, 741, nil, nil, nil, - nil, nil, nil, 741, nil, nil, 741, 741, 741, 741, - 741, 741, 741, 741, nil, 741, 741, 741, nil, 741, - 741, 741, 741, 741, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 741, nil, nil, 741, nil, nil, 741, - 741, nil, nil, 741, nil, nil, nil, nil, nil, 741, - nil, nil, nil, nil, nil, nil, nil, nil, 741, nil, - nil, nil, nil, 741, 741, 741, 741, nil, 741, 741, - 741, 741, nil, nil, nil, nil, 741, 741, nil, nil, - nil, 754, 754, 754, 741, 754, 741, 741, 741, 754, - 754, 741, 741, nil, 754, nil, 754, 754, 754, 754, - 754, 754, 754, nil, nil, nil, nil, nil, 754, 754, - 754, 754, 754, 754, 754, nil, nil, 754, nil, nil, - nil, nil, nil, nil, 754, nil, nil, 754, 754, 754, - 754, 754, 754, 754, 754, 754, 754, 754, 754, nil, - 754, 754, 754, 754, 754, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 754, nil, nil, 754, nil, nil, - 754, 754, nil, nil, 754, nil, 754, nil, 754, nil, - 754, nil, nil, 754, nil, nil, nil, nil, nil, 754, - nil, nil, nil, nil, 754, 754, 754, 754, nil, 754, - 754, 754, 754, nil, nil, nil, nil, 754, 754, nil, - nil, nil, 766, 766, 766, 754, 766, 754, 754, 754, - 766, 766, 754, 754, nil, 766, nil, 766, 766, 766, - 766, 766, 766, 766, nil, nil, nil, nil, nil, 766, - 766, 766, 766, 766, 766, 766, nil, nil, 766, nil, - nil, nil, nil, nil, nil, 766, nil, nil, 766, 766, - 766, 766, 766, 766, 766, 766, nil, 766, 766, 766, - nil, 766, 766, 766, 766, 766, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 766, nil, nil, 766, nil, - nil, 766, 766, nil, nil, 766, nil, nil, nil, nil, - nil, 766, nil, nil, nil, nil, nil, nil, nil, nil, - 766, nil, nil, nil, nil, 766, 766, 766, 766, nil, - 766, 766, 766, 766, nil, nil, nil, nil, 766, 766, - nil, nil, nil, 785, 785, 785, 766, 785, 766, 766, - 766, 785, 785, 766, 766, nil, 785, nil, 785, 785, - 785, 785, 785, 785, 785, nil, nil, nil, nil, nil, - 785, 785, 785, 785, 785, 785, 785, nil, nil, 785, - nil, nil, nil, nil, nil, nil, 785, nil, nil, 785, - 785, 785, 785, 785, 785, 785, 785, nil, 785, 785, - 785, nil, 785, 785, 785, 785, 785, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 785, nil, nil, 785, - nil, nil, 785, 785, nil, nil, 785, nil, nil, nil, - nil, nil, 785, nil, nil, nil, nil, nil, nil, nil, - nil, 785, nil, nil, nil, nil, 785, 785, 785, 785, - nil, 785, 785, 785, 785, nil, nil, nil, nil, 785, - 785, nil, nil, nil, 813, 813, 813, 785, 813, 785, - 785, 785, 813, 813, 785, 785, nil, 813, nil, 813, - 813, 813, 813, 813, 813, 813, nil, nil, nil, nil, - nil, 813, 813, 813, 813, 813, 813, 813, nil, nil, - 813, nil, nil, nil, nil, nil, nil, 813, nil, nil, - 813, 813, 813, 813, 813, 813, 813, 813, nil, 813, - 813, 813, nil, 813, 813, 813, 813, 813, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 813, nil, nil, - 813, nil, nil, 813, 813, nil, nil, 813, nil, nil, - nil, nil, nil, 813, nil, nil, nil, nil, nil, nil, - nil, nil, 813, nil, nil, nil, nil, 813, 813, 813, - 813, nil, 813, 813, 813, 813, nil, nil, nil, nil, - 813, 813, nil, nil, nil, 832, 832, 832, 813, 832, - 813, 813, 813, 832, 832, 813, 813, nil, 832, nil, - 832, 832, 832, 832, 832, 832, 832, nil, nil, nil, - nil, nil, 832, 832, 832, 832, 832, 832, 832, nil, - nil, 832, nil, nil, nil, nil, nil, nil, 832, nil, - nil, 832, 832, 832, 832, 832, 832, 832, 832, nil, - 832, 832, 832, nil, 832, 832, 832, 832, 832, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 832, nil, - nil, 832, nil, nil, 832, 832, nil, nil, 832, nil, - nil, nil, nil, nil, 832, nil, nil, nil, nil, nil, - nil, nil, nil, 832, nil, nil, nil, nil, 832, 832, - 832, 832, nil, 832, 832, 832, 832, nil, nil, nil, - nil, 832, 832, nil, nil, nil, 840, 840, 840, 832, - 840, 832, 832, 832, 840, 840, 832, 832, nil, 840, - nil, 840, 840, 840, 840, 840, 840, 840, nil, nil, - nil, nil, nil, 840, 840, 840, 840, 840, 840, 840, - nil, nil, 840, nil, nil, nil, nil, nil, nil, 840, - nil, nil, 840, 840, 840, 840, 840, 840, 840, 840, - nil, 840, 840, 840, nil, 840, 840, 840, 840, 840, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 840, - nil, nil, 840, nil, nil, 840, 840, nil, nil, 840, - nil, nil, nil, nil, nil, 840, nil, nil, nil, nil, - nil, nil, nil, nil, 840, nil, nil, nil, nil, 840, - 840, 840, 840, nil, 840, 840, 840, 840, nil, nil, - nil, nil, 840, 840, nil, nil, nil, 854, 854, 854, - 840, 854, 840, 840, 840, 854, 854, 840, 840, nil, - 854, nil, 854, 854, 854, 854, 854, 854, 854, nil, - nil, nil, nil, nil, 854, 854, 854, 854, 854, 854, - 854, nil, nil, 854, nil, nil, nil, nil, nil, nil, - 854, nil, nil, 854, 854, 854, 854, 854, 854, 854, - 854, nil, 854, 854, 854, nil, 854, 854, 854, 854, - 854, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 854, nil, nil, 854, nil, nil, 854, 854, nil, nil, - 854, nil, nil, nil, nil, nil, 854, nil, nil, nil, - nil, nil, nil, nil, nil, 854, nil, nil, nil, nil, - 854, 854, 854, 854, nil, 854, 854, 854, 854, nil, - nil, nil, nil, 854, 854, nil, nil, nil, 855, 855, - 855, 854, 855, 854, 854, 854, 855, 855, 854, 854, - nil, 855, nil, 855, 855, 855, 855, 855, 855, 855, - nil, nil, nil, nil, nil, 855, 855, 855, 855, 855, - 855, 855, nil, nil, 855, nil, nil, nil, nil, nil, - nil, 855, nil, nil, 855, 855, 855, 855, 855, 855, - 855, 855, nil, 855, 855, 855, nil, 855, 855, 855, - 855, 855, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 855, nil, nil, 855, nil, nil, 855, 855, nil, - nil, 855, nil, nil, nil, nil, nil, 855, nil, nil, - nil, nil, nil, nil, nil, nil, 855, nil, nil, nil, - nil, 855, 855, 855, 855, nil, 855, 855, 855, 855, - nil, nil, nil, nil, 855, 855, nil, nil, nil, 856, - 856, 856, 855, 856, 855, 855, 855, 856, 856, 855, - 855, nil, 856, nil, 856, 856, 856, 856, 856, 856, - 856, nil, nil, nil, nil, nil, 856, 856, 856, 856, - 856, 856, 856, nil, nil, 856, nil, nil, nil, nil, - nil, nil, 856, nil, nil, 856, 856, 856, 856, 856, - 856, 856, 856, nil, 856, 856, 856, nil, 856, 856, - 856, 856, 856, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 856, nil, nil, 856, nil, nil, 856, 856, - nil, nil, 856, nil, nil, nil, nil, nil, 856, nil, - nil, nil, nil, nil, nil, nil, nil, 856, nil, nil, - nil, nil, 856, 856, 856, 856, nil, 856, 856, 856, - 856, nil, nil, nil, nil, 856, 856, nil, nil, nil, - 884, 884, 884, 856, 884, 856, 856, 856, 884, 884, - 856, 856, nil, 884, nil, 884, 884, 884, 884, 884, - 884, 884, nil, nil, nil, nil, nil, 884, 884, 884, - 884, 884, 884, 884, nil, nil, 884, nil, nil, nil, - nil, nil, nil, 884, nil, nil, 884, 884, 884, 884, - 884, 884, 884, 884, nil, 884, 884, 884, nil, 884, - 884, 884, 884, 884, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 884, nil, nil, 884, nil, nil, 884, - 884, nil, nil, 884, nil, nil, nil, nil, nil, 884, - nil, nil, nil, nil, nil, nil, nil, nil, 884, nil, - nil, nil, nil, 884, 884, 884, 884, nil, 884, 884, - 884, 884, nil, nil, nil, nil, 884, 884, nil, nil, - nil, 885, 885, 885, 884, 885, 884, 884, 884, 885, - 885, 884, 884, nil, 885, nil, 885, 885, 885, 885, - 885, 885, 885, nil, nil, nil, nil, nil, 885, 885, - 885, 885, 885, 885, 885, nil, nil, 885, nil, nil, - nil, nil, nil, nil, 885, nil, nil, 885, 885, 885, - 885, 885, 885, 885, 885, nil, 885, 885, 885, nil, - 885, 885, 885, 885, 885, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 885, nil, nil, 885, nil, nil, - 885, 885, nil, nil, 885, nil, nil, nil, nil, nil, - 885, nil, nil, nil, nil, nil, nil, nil, nil, 885, - nil, nil, nil, nil, 885, 885, 885, 885, nil, 885, - 885, 885, 885, nil, nil, nil, nil, 885, 885, nil, - nil, nil, 886, 886, 886, 885, 886, 885, 885, 885, - 886, 886, 885, 885, nil, 886, nil, 886, 886, 886, - 886, 886, 886, 886, nil, nil, nil, nil, nil, 886, - 886, 886, 886, 886, 886, 886, nil, nil, 886, nil, - nil, nil, nil, nil, nil, 886, nil, nil, 886, 886, - 886, 886, 886, 886, 886, 886, nil, 886, 886, 886, - nil, 886, 886, 886, 886, 886, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 886, nil, nil, 886, nil, - nil, 886, 886, nil, nil, 886, nil, nil, nil, nil, - nil, 886, nil, nil, nil, nil, nil, nil, nil, nil, - 886, nil, nil, nil, nil, 886, 886, 886, 886, nil, - 886, 886, 886, 886, nil, nil, nil, nil, 886, 886, - nil, nil, nil, 887, 887, 887, 886, 887, 886, 886, - 886, 887, 887, 886, 886, nil, 887, nil, 887, 887, - 887, 887, 887, 887, 887, nil, nil, nil, nil, nil, - 887, 887, 887, 887, 887, 887, 887, nil, nil, 887, - nil, nil, nil, nil, nil, nil, 887, nil, nil, 887, - 887, 887, 887, 887, 887, 887, 887, nil, 887, 887, - 887, nil, 887, 887, 887, 887, 887, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 887, nil, nil, 887, - nil, nil, 887, 887, nil, nil, 887, nil, nil, nil, - nil, nil, 887, nil, nil, nil, nil, nil, nil, nil, - nil, 887, nil, nil, nil, nil, 887, 887, 887, 887, - nil, 887, 887, 887, 887, nil, nil, nil, nil, 887, - 887, nil, nil, nil, 893, 893, 893, 887, 893, 887, - 887, 887, 893, 893, 887, 887, nil, 893, nil, 893, - 893, 893, 893, 893, 893, 893, nil, nil, nil, nil, - nil, 893, 893, 893, 893, 893, 893, 893, nil, nil, - 893, nil, nil, nil, nil, nil, nil, 893, nil, nil, - 893, 893, 893, 893, 893, 893, 893, 893, nil, 893, - 893, 893, nil, 893, 893, 893, 893, 893, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 893, nil, nil, - 893, nil, nil, 893, 893, nil, nil, 893, nil, nil, - nil, nil, nil, 893, nil, nil, nil, nil, nil, nil, - nil, nil, 893, nil, nil, nil, nil, 893, 893, 893, - 893, nil, 893, 893, 893, 893, nil, nil, nil, nil, - 893, 893, nil, nil, nil, 915, 915, 915, 893, 915, - 893, 893, 893, 915, 915, 893, 893, nil, 915, nil, - 915, 915, 915, 915, 915, 915, 915, nil, nil, nil, - nil, nil, 915, 915, 915, 915, 915, 915, 915, nil, - nil, 915, nil, nil, nil, nil, nil, nil, 915, nil, - nil, 915, 915, 915, 915, 915, 915, 915, 915, nil, - 915, 915, 915, nil, 915, 915, 915, 915, 915, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 915, nil, - nil, 915, nil, nil, 915, 915, nil, nil, 915, nil, - nil, nil, nil, nil, 915, nil, nil, nil, nil, nil, - nil, nil, nil, 915, nil, nil, nil, nil, 915, 915, - 915, 915, nil, 915, 915, 915, 915, nil, nil, nil, - nil, 915, 915, nil, nil, nil, 920, 920, 920, 915, - 920, 915, 915, 915, 920, 920, 915, 915, nil, 920, - nil, 920, 920, 920, 920, 920, 920, 920, nil, nil, - nil, nil, nil, 920, 920, 920, 920, 920, 920, 920, - nil, nil, 920, nil, nil, nil, nil, nil, nil, 920, - nil, nil, 920, 920, 920, 920, 920, 920, 920, 920, - nil, 920, 920, 920, nil, 920, 920, 920, 920, 920, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 920, - nil, nil, 920, nil, nil, 920, 920, nil, nil, 920, - nil, 920, nil, nil, nil, 920, nil, nil, nil, nil, - nil, nil, nil, nil, 920, nil, nil, nil, nil, 920, - 920, 920, 920, nil, 920, 920, 920, 920, nil, nil, - nil, nil, 920, 920, nil, nil, nil, 940, 940, 940, - 920, 940, 920, 920, 920, 940, 940, 920, 920, nil, - 940, nil, 940, 940, 940, 940, 940, 940, 940, nil, - nil, nil, nil, nil, 940, 940, 940, 940, 940, 940, - 940, nil, nil, 940, nil, nil, nil, nil, nil, nil, - 940, nil, nil, 940, 940, 940, 940, 940, 940, 940, - 940, 940, 940, 940, 940, nil, 940, 940, 940, 940, - 940, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 940, nil, nil, 940, nil, nil, 940, 940, nil, nil, - 940, nil, nil, nil, 940, nil, 940, nil, nil, 940, - nil, nil, nil, nil, nil, 940, nil, nil, nil, nil, - 940, 940, 940, 940, nil, 940, 940, 940, 940, nil, - nil, nil, nil, 940, 940, nil, nil, nil, 967, 967, - 967, 940, 967, 940, 940, 940, 967, 967, 940, 940, - nil, 967, nil, 967, 967, 967, 967, 967, 967, 967, - nil, nil, nil, nil, nil, 967, 967, 967, 967, 967, - 967, 967, nil, nil, 967, nil, nil, nil, nil, nil, - nil, 967, nil, nil, 967, 967, 967, 967, 967, 967, - 967, 967, nil, 967, 967, 967, nil, 967, 967, 967, - 967, 967, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 967, nil, nil, 967, nil, nil, 967, 967, nil, - nil, 967, nil, nil, nil, nil, nil, 967, nil, nil, - nil, nil, nil, nil, nil, nil, 967, nil, nil, nil, - nil, 967, 967, 967, 967, nil, 967, 967, 967, 967, - nil, nil, nil, nil, 967, 967, nil, nil, nil, 968, - 968, 968, 967, 968, 967, 967, 967, 968, 968, 967, - 967, nil, 968, nil, 968, 968, 968, 968, 968, 968, - 968, nil, nil, nil, nil, nil, 968, 968, 968, 968, - 968, 968, 968, nil, nil, 968, nil, nil, nil, nil, - nil, nil, 968, nil, nil, 968, 968, 968, 968, 968, - 968, 968, 968, nil, 968, 968, 968, nil, 968, 968, - 968, 968, 968, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 968, nil, nil, 968, nil, nil, 968, 968, - nil, nil, 968, nil, nil, nil, nil, nil, 968, nil, - nil, nil, nil, nil, nil, nil, nil, 968, nil, nil, - nil, nil, 968, 968, 968, 968, nil, 968, 968, 968, - 968, nil, nil, nil, nil, 968, 968, nil, nil, nil, - 1094, 1094, 1094, 968, 1094, 968, 968, 968, 1094, 1094, - 968, 968, nil, 1094, nil, 1094, 1094, 1094, 1094, 1094, - 1094, 1094, nil, nil, nil, nil, nil, 1094, 1094, 1094, - 1094, 1094, 1094, 1094, nil, nil, 1094, nil, nil, nil, - nil, nil, nil, 1094, nil, nil, 1094, 1094, 1094, 1094, - 1094, 1094, 1094, 1094, nil, 1094, 1094, 1094, nil, 1094, - 1094, 1094, 1094, 1094, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 1094, nil, nil, 1094, nil, nil, 1094, - 1094, nil, nil, 1094, nil, nil, nil, nil, nil, 1094, - nil, nil, nil, nil, nil, nil, nil, nil, 1094, nil, - nil, nil, nil, 1094, 1094, 1094, 1094, nil, 1094, 1094, - 1094, 1094, nil, nil, nil, nil, 1094, 1094, nil, nil, - nil, 1126, 1126, 1126, 1094, 1126, 1094, 1094, 1094, 1126, - 1126, 1094, 1094, nil, 1126, nil, 1126, 1126, 1126, 1126, - 1126, 1126, 1126, nil, nil, nil, nil, nil, 1126, 1126, - 1126, 1126, 1126, 1126, 1126, nil, nil, 1126, nil, nil, - nil, nil, nil, nil, 1126, nil, nil, 1126, 1126, 1126, - 1126, 1126, 1126, 1126, 1126, 1126, 1126, 1126, 1126, nil, - 1126, 1126, 1126, 1126, 1126, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 1126, nil, nil, 1126, nil, nil, - 1126, 1126, nil, nil, 1126, nil, 1126, nil, 1126, nil, - 1126, nil, nil, 1126, nil, nil, nil, nil, nil, 1126, - nil, nil, nil, nil, 1126, 1126, 1126, 1126, nil, 1126, - 1126, 1126, 1126, nil, nil, nil, nil, 1126, 1126, nil, - nil, nil, 1222, 1222, 1222, 1126, 1222, 1126, 1126, 1126, - 1222, 1222, 1126, 1126, nil, 1222, nil, 1222, 1222, 1222, - 1222, 1222, 1222, 1222, nil, nil, nil, nil, nil, 1222, - 1222, 1222, 1222, 1222, 1222, 1222, nil, nil, 1222, nil, - nil, nil, nil, nil, nil, 1222, nil, nil, 1222, 1222, - 1222, 1222, 1222, 1222, 1222, 1222, nil, 1222, 1222, 1222, - nil, 1222, 1222, 1222, 1222, 1222, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 1222, nil, nil, 1222, nil, - nil, 1222, 1222, nil, nil, 1222, nil, nil, nil, nil, - nil, 1222, nil, nil, nil, nil, nil, nil, nil, nil, - 1222, nil, nil, nil, nil, 1222, 1222, 1222, 1222, nil, - 1222, 1222, 1222, 1222, nil, nil, nil, nil, 1222, 1222, - nil, nil, nil, 1223, 1223, 1223, 1222, 1223, 1222, 1222, - 1222, 1223, 1223, 1222, 1222, nil, 1223, nil, 1223, 1223, - 1223, 1223, 1223, 1223, 1223, nil, nil, nil, nil, nil, - 1223, 1223, 1223, 1223, 1223, 1223, 1223, nil, nil, 1223, - nil, nil, nil, nil, nil, nil, 1223, nil, nil, 1223, - 1223, 1223, 1223, 1223, 1223, 1223, 1223, nil, 1223, 1223, - 1223, nil, 1223, 1223, 1223, 1223, 1223, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 1223, nil, nil, 1223, - nil, nil, 1223, 1223, nil, nil, 1223, nil, nil, nil, - nil, nil, 1223, nil, nil, nil, nil, nil, nil, nil, - nil, 1223, nil, nil, nil, nil, 1223, 1223, 1223, 1223, - nil, 1223, 1223, 1223, 1223, nil, nil, nil, nil, 1223, - 1223, nil, nil, nil, 39, 39, 39, 1223, 39, 1223, - 1223, 1223, 39, 39, 1223, 1223, nil, 39, nil, 39, - 39, 39, 39, 39, 39, 39, nil, nil, nil, nil, - nil, 39, 39, 39, 39, 39, 39, 39, nil, nil, - 39, nil, nil, nil, nil, nil, nil, 39, nil, nil, - 39, 39, 39, 39, 39, 39, 39, 39, nil, 39, - 39, 39, nil, 39, 39, nil, nil, 39, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 39, nil, nil, - 39, nil, nil, 39, 39, nil, nil, 39, nil, 39, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 39, 39, 39, - 39, nil, 39, 39, 39, 39, nil, nil, nil, nil, - 39, 39, nil, nil, nil, 40, 40, 40, 39, 40, - 39, 39, 39, 40, 40, nil, nil, nil, 40, nil, - 40, 40, 40, 40, 40, 40, 40, nil, nil, nil, - nil, nil, 40, 40, 40, 40, 40, 40, 40, nil, - nil, 40, nil, nil, nil, nil, nil, nil, 40, nil, - nil, 40, 40, 40, 40, 40, 40, 40, 40, nil, - 40, 40, 40, nil, 40, 40, nil, nil, 40, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 40, nil, - nil, 40, nil, nil, 40, 40, nil, nil, 40, nil, - nil, 1211, nil, 1211, 1211, 1211, 1211, 1211, nil, nil, - nil, nil, nil, nil, nil, nil, 1211, nil, 40, 40, - 40, 40, nil, 40, 40, 40, 40, nil, nil, nil, - nil, 40, 40, nil, nil, nil, 40, nil, 1211, 40, - nil, 40, 40, 40, 76, 76, 76, nil, 76, 1211, - 1211, nil, 76, 76, 1211, nil, nil, 76, nil, 76, - 76, 76, 76, 76, 76, 76, nil, nil, nil, nil, - nil, 76, 76, 76, 76, 76, 76, 76, nil, nil, - 76, nil, nil, nil, nil, nil, nil, 76, nil, nil, - 76, 76, 76, 76, 76, 76, 76, 76, nil, 76, - 76, 76, nil, 76, 76, nil, nil, 76, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 76, nil, nil, - 76, nil, nil, 76, 76, nil, nil, 76, nil, 76, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 76, 76, 76, - 76, nil, 76, 76, 76, 76, nil, nil, nil, nil, - 76, 76, nil, nil, nil, 77, 77, 77, 76, 77, - 76, 76, 76, 77, 77, nil, nil, nil, 77, nil, - 77, 77, 77, 77, 77, 77, 77, nil, nil, nil, - nil, nil, 77, 77, 77, 77, 77, 77, 77, nil, - nil, 77, nil, nil, nil, nil, nil, nil, 77, nil, - nil, 77, 77, 77, 77, 77, 77, 77, 77, nil, - 77, 77, 77, nil, 77, 77, nil, nil, 77, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 77, nil, nil, 77, nil, - nil, 77, nil, nil, 77, 77, nil, nil, 77, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 77, 77, - 77, 77, nil, 77, 77, 77, 77, nil, nil, nil, - nil, 77, 77, nil, nil, nil, 78, 78, 78, 77, - 78, 77, 77, 77, 78, 78, nil, nil, nil, 78, - nil, 78, 78, 78, 78, 78, 78, 78, nil, nil, - nil, nil, nil, 78, 78, 78, 78, 78, 78, 78, - nil, nil, 78, nil, nil, nil, nil, nil, nil, 78, - nil, nil, 78, 78, 78, 78, 78, 78, 78, 78, - nil, 78, 78, 78, nil, 78, 78, nil, nil, 78, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 78, - nil, nil, 78, nil, nil, 78, 78, nil, nil, 78, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 78, - 78, 78, 78, nil, 78, 78, 78, 78, nil, nil, - nil, nil, 78, 78, nil, nil, nil, 343, 343, 343, - 78, 343, 78, 78, 78, 343, 343, nil, nil, nil, - 343, nil, 343, 343, 343, 343, 343, 343, 343, nil, - nil, nil, nil, nil, 343, 343, 343, 343, 343, 343, - 343, nil, nil, 343, nil, nil, nil, nil, nil, nil, - 343, nil, nil, 343, 343, 343, 343, 343, 343, 343, - 343, nil, 343, 343, 343, nil, 343, 343, nil, nil, - 343, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 343, nil, nil, 343, nil, nil, 343, 343, nil, nil, - 343, nil, nil, 1213, nil, 1213, 1213, 1213, 1213, 1213, - nil, nil, nil, nil, nil, nil, nil, nil, 1213, nil, - 343, 343, 343, 343, nil, 343, 343, 343, 343, nil, - nil, nil, nil, 343, 343, nil, nil, nil, 343, nil, - 1213, 343, nil, 343, 343, 343, 362, 362, 362, nil, - 362, 1213, 1213, nil, 362, 362, 1213, nil, nil, 362, - nil, 362, 362, 362, 362, 362, 362, 362, nil, nil, - nil, nil, nil, 362, 362, 362, 362, 362, 362, 362, - nil, nil, 362, nil, nil, nil, nil, nil, nil, 362, - nil, nil, 362, 362, 362, 362, 362, 362, 362, 362, - nil, 362, 362, 362, nil, 362, 362, nil, nil, 362, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 362, - nil, nil, 362, nil, nil, 362, 362, nil, nil, 362, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 362, - 362, 362, 362, nil, 362, 362, 362, 362, nil, nil, - nil, nil, 362, 362, nil, nil, nil, 592, 592, 592, - 362, 592, 362, 362, 362, 592, 592, nil, nil, nil, - 592, nil, 592, 592, 592, 592, 592, 592, 592, nil, - nil, nil, nil, nil, 592, 592, 592, 592, 592, 592, - 592, nil, nil, 592, nil, nil, nil, nil, nil, nil, - 592, nil, nil, 592, 592, 592, 592, 592, 592, 592, - 592, nil, 592, 592, 592, nil, 592, 592, nil, nil, - 592, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 592, nil, nil, 592, nil, nil, 592, 592, nil, nil, - 592, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 592, 592, 592, 592, nil, 592, 592, 592, 592, nil, - nil, nil, nil, 592, 592, nil, nil, nil, 601, 601, - 601, 592, 601, 592, 592, 592, 601, 601, nil, nil, - nil, 601, nil, 601, 601, 601, 601, 601, 601, 601, - nil, nil, nil, nil, nil, 601, 601, 601, 601, 601, - 601, 601, nil, nil, 601, nil, nil, nil, nil, nil, - nil, 601, nil, nil, 601, 601, 601, 601, 601, 601, - 601, 601, nil, 601, 601, 601, nil, 601, 601, nil, - nil, 601, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 601, nil, nil, 601, nil, nil, 601, 601, nil, - nil, 601, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 601, 601, 601, 601, nil, 601, 601, 601, 601, - nil, nil, nil, nil, 601, 601, nil, nil, nil, 769, - 769, 769, 601, 769, 601, 601, 601, 769, 769, nil, - nil, nil, 769, nil, 769, 769, 769, 769, 769, 769, - 769, nil, nil, nil, nil, nil, 769, 769, 769, 769, - 769, 769, 769, nil, nil, 769, nil, nil, nil, nil, - nil, nil, 769, nil, nil, 769, 769, 769, 769, 769, - 769, 769, 769, nil, 769, 769, 769, nil, 769, 769, - nil, nil, 769, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 769, nil, nil, 769, nil, nil, 769, 769, - nil, nil, 769, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 769, 769, 769, 769, nil, 769, 769, 769, - 769, nil, nil, nil, nil, 769, 769, nil, nil, nil, - 780, 780, 780, 769, 780, 769, 769, 769, 780, 780, - nil, nil, nil, 780, nil, 780, 780, 780, 780, 780, - 780, 780, nil, nil, nil, nil, nil, 780, 780, 780, - 780, 780, 780, 780, nil, nil, 780, nil, nil, nil, - nil, nil, nil, 780, nil, nil, 780, 780, 780, 780, - 780, 780, 780, 780, nil, 780, 780, 780, nil, 780, - 780, nil, nil, 780, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 780, nil, nil, 780, nil, nil, 780, - 780, nil, nil, 780, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 780, 780, 780, 780, nil, 780, 780, - 780, 780, nil, nil, nil, nil, 780, 780, nil, nil, - nil, 951, 951, 951, 780, 951, 780, 780, 780, 951, - 951, nil, nil, nil, 951, nil, 951, 951, 951, 951, - 951, 951, 951, nil, nil, nil, nil, nil, 951, 951, - 951, 951, 951, 951, 951, nil, nil, 951, nil, nil, - nil, nil, nil, nil, 951, nil, nil, 951, 951, 951, - 951, 951, 951, 951, 951, nil, 951, 951, 951, nil, - 951, 951, nil, nil, 951, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 951, nil, nil, 951, nil, nil, - 951, 951, nil, nil, 951, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 951, 951, 951, 951, nil, 951, - 951, 951, 951, nil, nil, nil, nil, 951, 951, nil, - nil, nil, 1028, 1028, 1028, 951, 1028, 951, 951, 951, - 1028, 1028, nil, nil, nil, 1028, nil, 1028, 1028, 1028, - 1028, 1028, 1028, 1028, nil, nil, nil, nil, nil, 1028, - 1028, 1028, 1028, 1028, 1028, 1028, nil, nil, 1028, nil, - nil, nil, nil, nil, nil, 1028, nil, nil, 1028, 1028, - 1028, 1028, 1028, 1028, 1028, 1028, nil, 1028, 1028, 1028, - nil, 1028, 1028, nil, nil, 1028, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 1028, nil, nil, 1028, nil, - nil, 1028, 1028, nil, nil, 1028, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 1028, 1028, 1028, 1028, nil, - 1028, 1028, 1028, 1028, nil, nil, nil, nil, 1028, 1028, - nil, nil, nil, 1110, 1110, 1110, 1028, 1110, 1028, 1028, - 1028, 1110, 1110, nil, nil, nil, 1110, nil, 1110, 1110, - 1110, 1110, 1110, 1110, 1110, nil, nil, nil, nil, nil, - 1110, 1110, 1110, 1110, 1110, 1110, 1110, nil, nil, 1110, - nil, nil, nil, nil, nil, nil, 1110, nil, nil, 1110, - 1110, 1110, 1110, 1110, 1110, 1110, 1110, nil, 1110, 1110, - 1110, nil, 1110, 1110, nil, nil, 1110, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 1110, nil, nil, 1110, - nil, nil, 1110, 1110, nil, nil, 1110, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 1110, 1110, 1110, 1110, - nil, 1110, 1110, 1110, 1110, nil, nil, nil, nil, 1110, - 1110, nil, nil, nil, nil, nil, nil, 1110, nil, 1110, - 1110, 1110, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, nil, nil, nil, 10, - 10, 10, 10, 10, 10, 10, 10, 10, 10, nil, - nil, nil, nil, nil, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, nil, 10, nil, nil, nil, nil, - nil, nil, nil, 10, 10, nil, 10, 10, 10, 10, - 10, 10, 10, nil, nil, 10, 10, nil, nil, nil, - 10, 10, 10, 10, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 10, 10, nil, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, nil, nil, 10, 10, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 10, - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, - 11, 11, 11, 11, nil, nil, nil, 11, 11, 11, - 11, 11, 11, 11, 11, 11, 11, nil, nil, nil, - nil, nil, 11, 11, 11, 11, 11, 11, 11, 11, - 11, nil, nil, 11, nil, nil, nil, nil, nil, nil, - nil, 11, 11, nil, 11, 11, 11, 11, 11, 11, - 11, nil, nil, 11, 11, nil, nil, nil, 11, 11, - 11, 11, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 11, 11, nil, 11, 11, - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, - nil, nil, 11, 11, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 11, 428, 428, - 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, - 428, 428, 428, 428, 428, 428, 428, 428, 428, 428, - 428, 428, nil, nil, nil, 428, 428, 428, 428, 428, - 428, 428, 428, 428, 428, nil, nil, nil, nil, nil, - 428, 428, 428, 428, 428, 428, 428, 428, 428, nil, - nil, 428, nil, nil, nil, nil, nil, nil, nil, 428, - 428, nil, 428, 428, 428, 428, 428, 428, 428, nil, - nil, 428, 428, nil, nil, nil, 428, 428, 428, 428, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 428, 428, nil, 428, 428, 428, 428, - 428, 428, 428, 428, 428, 428, 428, 428, nil, nil, - 428, 428, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 428, 671, 671, 671, 671, - 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, - 671, 671, 671, 671, 671, 671, 671, 671, 671, 671, - nil, nil, nil, 671, 671, 671, 671, 671, 671, 671, - 671, 671, 671, nil, nil, nil, nil, nil, 671, 671, - 671, 671, 671, 671, 671, 671, 671, nil, nil, 671, - nil, nil, nil, nil, nil, nil, nil, 671, 671, nil, - 671, 671, 671, 671, 671, 671, 671, nil, nil, 671, - 671, nil, nil, nil, 671, 671, 671, 671, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 671, 671, nil, 671, 671, 671, 671, 671, 671, - 671, 671, 671, 671, 671, 671, nil, nil, 671, 671, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 671, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, nil, nil, - nil, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, nil, nil, nil, nil, nil, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, nil, 26, - nil, nil, nil, nil, nil, 26, 26, nil, 26, 26, - 26, 26, 26, 26, 26, nil, nil, 26, 26, nil, - nil, nil, 26, 26, 26, 26, nil, nil, nil, nil, - nil, 26, nil, nil, nil, nil, nil, nil, nil, 26, - 26, nil, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, nil, nil, 26, 746, 746, 746, - 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, - 746, 746, 746, 746, 746, 746, 746, 746, 746, 746, - 746, nil, nil, nil, 746, 746, 746, 746, 746, 746, - 746, 746, 746, 746, nil, nil, nil, nil, nil, 746, - 746, 746, 746, 746, 746, 746, 746, 746, nil, nil, - 746, nil, nil, nil, nil, nil, nil, nil, 746, 746, - nil, 746, 746, 746, 746, 746, 746, 746, nil, nil, - 746, 746, nil, nil, nil, 746, 746, 746, 746, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 746, 746, nil, 746, 746, 746, 746, 746, - 746, 746, 746, 746, 746, 746, 746, nil, nil, 746, - 890, 890, 890, 890, nil, nil, 1215, nil, 1215, 1215, - 1215, 1215, 1215, nil, nil, nil, 890, 890, 890, 890, - nil, 1215, nil, 890, 890, nil, nil, nil, nil, 890, - 890, nil, nil, 890, 890, nil, nil, nil, nil, nil, - nil, nil, nil, 1215, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 890, 1215, 1215, 890, nil, nil, 1215, - 890, nil, nil, 890, nil, 890, nil, nil, nil, nil, - nil, nil, 890, nil, nil, nil, nil, nil, nil, 890, - nil, nil, nil, 890, 890, 890, 890, nil, 890, 890, - 890, 890, nil, nil, nil, nil, 890, 890, 892, 892, - 892, 892, nil, nil, 890, nil, 890, 890, 890, nil, - nil, 890, 890, nil, 892, 892, 892, 892, nil, nil, - nil, 892, 892, nil, nil, nil, nil, 892, 892, nil, - nil, 892, 892, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 892, nil, nil, 892, nil, nil, nil, 892, nil, - nil, 892, nil, 892, nil, nil, nil, nil, nil, nil, - 892, nil, nil, nil, nil, nil, nil, 892, nil, nil, - nil, 892, 892, 892, 892, nil, 892, 892, 892, 892, - nil, nil, nil, nil, 892, 892, 980, 980, 980, 980, - nil, nil, 892, nil, 892, 892, 892, nil, nil, 892, - 892, nil, 980, 980, 980, 980, nil, nil, nil, 980, - nil, nil, nil, nil, nil, 980, 980, nil, nil, 980, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 980, - nil, nil, 980, nil, nil, nil, 980, nil, nil, 980, - nil, 980, nil, nil, nil, nil, nil, nil, 715, nil, - 715, 715, 715, 715, 715, 980, nil, nil, nil, 980, - 980, 980, 980, 715, 980, 980, 980, 980, nil, nil, - nil, nil, 980, 980, 980, 988, 988, 988, 988, nil, - 980, nil, 980, 980, 980, 715, nil, 980, 980, nil, - nil, 988, 988, 988, 988, nil, 715, 715, 988, nil, - nil, 715, nil, nil, 988, 988, nil, nil, 988, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 988, nil, - nil, 988, nil, nil, nil, 988, nil, nil, 988, nil, - nil, 715, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 988, nil, nil, nil, 988, 988, - 988, 988, nil, 988, 988, 988, 988, nil, nil, nil, - nil, 988, 988, 1063, 1063, 1063, 1063, nil, nil, 988, - nil, 988, 988, 988, nil, nil, 988, 988, nil, 1063, - 1063, 1063, 1063, nil, nil, 1104, 1063, 1104, 1104, 1104, - 1104, 1104, 1063, 1063, nil, nil, 1063, nil, nil, nil, - 1104, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 1063, nil, nil, 1063, - nil, nil, 1104, 1063, nil, nil, 1063, nil, 1063, nil, - nil, 1104, 1104, 1104, 1104, nil, nil, nil, 1104, nil, - nil, nil, 1063, nil, nil, nil, 1063, 1063, 1063, 1063, - nil, 1063, 1063, 1063, 1063, nil, nil, nil, nil, 1063, - 1063, 1065, 1065, 1065, 1065, nil, nil, 1063, nil, 1063, - 1063, 1063, nil, nil, 1063, 1063, nil, 1065, 1065, 1065, - 1065, nil, nil, 1209, 1065, 1209, 1209, 1209, 1209, 1209, - 1065, 1065, nil, nil, 1065, nil, nil, nil, 1209, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 1065, nil, nil, 1065, nil, nil, - 1209, 1065, nil, nil, 1065, nil, nil, nil, nil, 1209, - 1209, 1209, 1209, nil, nil, nil, 1209, nil, nil, nil, - 1065, nil, nil, nil, 1065, 1065, 1065, 1065, nil, 1065, - 1065, 1065, 1065, nil, nil, nil, nil, 1065, 1065, 1068, - 1068, 1068, 1068, nil, nil, 1065, nil, 1065, 1065, 1065, - nil, nil, 1065, 1065, nil, 1068, 1068, 1068, 1068, nil, - nil, nil, 1068, 1068, nil, nil, nil, nil, 1068, 1068, - nil, nil, 1068, 1068, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 1068, nil, nil, 1068, nil, nil, nil, 1068, - nil, nil, 1068, nil, 1068, nil, nil, nil, nil, nil, - nil, 1068, nil, nil, nil, nil, nil, nil, 1068, nil, - nil, nil, 1068, 1068, 1068, 1068, nil, 1068, 1068, 1068, - 1068, nil, nil, nil, nil, 1068, 1068, 1069, 1069, 1069, - 1069, nil, nil, 1068, nil, 1068, 1068, 1068, nil, nil, - 1068, 1068, nil, 1069, 1069, 1069, 1069, nil, nil, nil, - 1069, 1069, nil, nil, nil, nil, 1069, 1069, nil, nil, - 1069, 1069, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 1069, nil, nil, 1069, nil, nil, nil, 1069, nil, nil, - 1069, nil, 1069, nil, nil, nil, nil, nil, nil, 1069, - nil, nil, nil, nil, nil, nil, 1069, nil, nil, nil, - 1069, 1069, 1069, 1069, nil, 1069, 1069, 1069, 1069, nil, - nil, nil, nil, 1069, 1069, 1075, 1075, 1075, 1075, nil, - nil, 1069, nil, 1069, 1069, 1069, nil, nil, 1069, 1069, - nil, 1075, 1075, 1075, 1075, nil, nil, 1239, 1075, 1239, - 1239, 1239, 1239, 1239, 1075, 1075, nil, nil, 1075, nil, - nil, nil, 1239, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 1075, nil, - nil, 1075, nil, nil, 1239, 1075, nil, nil, 1075, nil, - 1075, nil, nil, nil, nil, 1239, 1239, nil, nil, nil, - 1239, nil, nil, nil, 1075, nil, nil, nil, 1075, 1075, - 1075, 1075, nil, 1075, 1075, 1075, 1075, nil, nil, nil, - nil, 1075, 1075, 1081, 1081, 1081, 1081, nil, nil, 1075, - nil, 1075, 1075, 1075, nil, nil, 1075, 1075, nil, 1081, - 1081, 1081, 1081, nil, nil, nil, 1081, nil, nil, nil, - nil, nil, 1081, 1081, nil, nil, 1081, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 1081, nil, nil, 1081, - nil, nil, nil, 1081, nil, nil, 1081, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 1081, nil, nil, nil, 1081, 1081, 1081, 1081, - nil, 1081, 1081, 1081, 1081, nil, nil, nil, nil, 1081, - 1081, 1082, 1082, 1082, 1082, nil, nil, 1081, nil, 1081, - 1081, 1081, nil, nil, 1081, 1081, nil, 1082, 1082, 1082, - 1082, nil, nil, nil, 1082, nil, nil, nil, nil, nil, - 1082, 1082, nil, nil, 1082, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 1082, nil, nil, 1082, nil, nil, - nil, 1082, nil, nil, 1082, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 1082, nil, nil, nil, 1082, 1082, 1082, 1082, nil, 1082, - 1082, 1082, 1082, nil, nil, nil, nil, 1082, 1082, 1114, - 1114, 1114, 1114, nil, nil, 1082, nil, 1082, 1082, 1082, - nil, nil, 1082, 1082, nil, 1114, 1114, 1114, 1114, nil, - nil, nil, 1114, 1114, nil, nil, nil, nil, 1114, 1114, - nil, nil, 1114, 1114, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 1114, nil, nil, 1114, nil, nil, nil, 1114, - nil, nil, 1114, nil, 1114, nil, nil, nil, nil, nil, - nil, 1114, nil, nil, nil, nil, nil, nil, 1114, nil, - nil, nil, 1114, 1114, 1114, 1114, nil, 1114, 1114, 1114, - 1114, nil, nil, nil, nil, 1114, 1114, 1194, 1194, 1194, - 1194, nil, nil, 1114, nil, 1114, 1114, 1114, nil, nil, - 1114, 1114, nil, 1194, 1194, 1194, 1194, nil, nil, nil, - 1194, nil, nil, nil, nil, nil, 1194, 1194, nil, nil, - 1194, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 1194, nil, nil, 1194, nil, nil, nil, 1194, nil, nil, - 1194, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 1194, nil, nil, nil, - 1194, 1194, 1194, 1194, nil, 1194, 1194, 1194, 1194, nil, - nil, nil, nil, 1194, 1194, 1202, 1202, 1202, 1202, nil, - nil, 1194, nil, 1194, 1194, 1194, nil, nil, 1194, 1194, - nil, 1202, 1202, 1202, 1202, nil, nil, nil, 1202, nil, - nil, nil, nil, nil, 1202, 1202, nil, nil, 1202, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 1202, nil, - nil, 1202, nil, nil, nil, 1202, nil, nil, 1202, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 1202, nil, nil, nil, 1202, 1202, - 1202, 1202, nil, 1202, 1202, 1202, 1202, nil, nil, nil, - nil, 1202, 1202, 1206, 1206, 1206, 1206, nil, nil, 1202, - nil, 1202, 1202, 1202, nil, nil, 1202, 1202, nil, 1206, - 1206, 1206, 1206, nil, nil, nil, 1206, nil, nil, nil, - nil, nil, 1206, 1206, nil, nil, 1206, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 1206, nil, nil, 1206, - nil, nil, nil, 1206, nil, nil, 1206, nil, 1206, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 1206, nil, nil, nil, 1206, 1206, 1206, 1206, - nil, 1206, 1206, 1206, 1206, nil, nil, nil, nil, 1206, - 1206, 1238, 1238, 1238, 1238, nil, nil, 1206, nil, 1206, - 1206, 1206, nil, nil, 1206, 1206, nil, 1238, 1238, 1238, - 1238, nil, nil, nil, 1238, nil, nil, nil, nil, nil, - 1238, 1238, nil, nil, 1238, nil, nil, nil, nil, nil, - nil, nil, 997, 997, 997, 997, nil, nil, nil, nil, - nil, nil, nil, nil, 1238, nil, nil, 1238, 997, 997, - 997, 1238, nil, nil, 1238, nil, nil, nil, nil, nil, - nil, 997, 997, nil, nil, 997, nil, nil, nil, nil, - 1238, nil, nil, nil, 1238, 1238, 1238, 1238, nil, 1238, - 1238, 1238, 1238, nil, nil, nil, nil, 1238, 1238, nil, - nil, nil, nil, nil, nil, 1238, nil, 1238, 1238, 1238, - nil, nil, 1238, 1238, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 997, 997, 997, 997, nil, - 997, 997, 997, 997, nil, nil, nil, nil, 997, 997, - 998, 998, 998, 998, nil, nil, 997, nil, 997, 997, - 997, nil, nil, nil, nil, nil, 998, 998, 998, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 998, - 998, nil, nil, 998, 1088, 1088, 1088, 1088, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 1088, 1088, 1088, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 1088, 1088, nil, nil, 1088, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 998, 998, 998, 998, nil, 998, 998, - 998, 998, nil, nil, nil, nil, 998, 998, nil, nil, - nil, nil, nil, nil, 998, nil, 998, 998, 998, nil, - nil, nil, nil, nil, nil, nil, nil, 1088, 1088, 1088, - 1088, nil, 1088, 1088, 1088, 1088, nil, nil, nil, nil, - 1088, 1088, 1089, 1089, 1089, 1089, nil, nil, 1088, nil, - 1088, 1088, 1088, nil, nil, nil, nil, nil, 1089, 1089, - 1089, 648, nil, 648, 648, 648, 648, 648, nil, nil, - nil, 1089, 1089, nil, nil, 1089, 648, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 648, nil, - nil, nil, nil, nil, nil, nil, nil, 648, 648, 648, - 648, nil, nil, nil, 648, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 1089, 1089, 1089, 1089, nil, - 1089, 1089, 1089, 1089, nil, nil, nil, nil, 1089, 1089, - nil, nil, nil, nil, nil, nil, 1089, nil, 1089, 1089, - 1089, nil, nil, 711, 648, 711, 711, 711, 711, 711, - nil, 713, nil, 713, 713, 713, 713, 713, 711, nil, - nil, nil, nil, nil, nil, nil, 713, nil, 954, nil, - 954, 954, 954, 954, 954, nil, nil, nil, nil, nil, - 711, nil, nil, 954, nil, nil, nil, nil, 713, 711, - 711, 711, 711, nil, nil, nil, 711, 713, 713, 713, - 713, nil, nil, nil, 713, 954, nil, nil, nil, nil, - nil, nil, nil, nil, 954, 954, 954, 954, nil, nil, - 956, 954, 956, 956, 956, 956, 956, 958, nil, 958, - 958, 958, 958, 958, nil, 956, 711, nil, nil, nil, - nil, nil, 958, nil, 713, 960, nil, 960, 960, 960, - 960, 960, nil, nil, nil, nil, nil, 956, nil, nil, - 960, 954, nil, nil, 958, nil, nil, nil, 956, 956, - nil, nil, nil, 956, nil, 958, 958, nil, nil, nil, - 958, 1130, 960, 1130, 1130, 1130, 1130, 1130, nil, nil, - nil, nil, nil, 960, 960, nil, 1130, nil, 960, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 956, nil, nil, nil, nil, 1130, nil, - 958, nil, nil, nil, nil, nil, nil, nil, nil, 1130, - 1130, 226, 226, nil, 1130, 226, nil, nil, 960, nil, - nil, nil, nil, 226, 226, nil, 226, 226, 226, 226, - 226, 226, 226, nil, nil, 226, 226, nil, nil, nil, - 226, 226, 226, 226, nil, nil, nil, nil, nil, 226, - nil, nil, nil, nil, 1130, nil, nil, 226, 226, nil, - 226, 226, 226, 226, 226, 226, 226, 226, 226, 226, - 226, 226, 227, 227, 226, nil, 227, nil, nil, nil, - nil, nil, nil, nil, 227, 227, nil, 227, 227, 227, - 227, 227, 227, 227, nil, nil, 227, 227, nil, nil, - nil, 227, 227, 227, 227, nil, nil, nil, nil, nil, - 227, nil, nil, nil, nil, nil, nil, nil, 227, 227, - nil, 227, 227, 227, 227, 227, 227, 227, 227, 227, - 227, 227, 227, 303, 303, 227, nil, 303, nil, nil, - nil, nil, nil, nil, nil, 303, 303, nil, 303, 303, - 303, 303, 303, 303, 303, nil, nil, 303, 303, nil, - nil, nil, 303, 303, 303, 303, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 303, - 303, nil, 303, 303, 303, 303, 303, 303, 303, 303, - 303, 303, 303, 303, 521, 521, 303, nil, 521, nil, - nil, nil, nil, nil, nil, nil, 521, 521, nil, 521, - 521, 521, 521, 521, 521, 521, nil, nil, 521, 521, - nil, nil, nil, 521, 521, 521, 521, nil, nil, nil, - nil, nil, 521, nil, nil, nil, nil, nil, nil, nil, - 521, 521, nil, 521, 521, 521, 521, 521, 521, 521, - 521, 521, 521, 521, 521, 522, 522, 521, nil, 522, - nil, nil, nil, nil, nil, nil, nil, 522, 522, nil, - 522, 522, 522, 522, 522, 522, 522, nil, nil, 522, - 522, nil, nil, nil, 522, 522, 522, 522, nil, nil, - nil, nil, nil, 522, nil, nil, nil, nil, nil, nil, - nil, 522, 522, nil, 522, 522, 522, 522, 522, 522, - 522, 522, 522, 522, 522, 522, 595, 595, 522, nil, - 595, nil, nil, nil, nil, nil, nil, nil, 595, 595, - nil, 595, 595, 595, 595, 595, 595, 595, nil, nil, - 595, 595, nil, nil, nil, 595, 595, 595, 595, nil, - nil, nil, nil, nil, 595, nil, nil, nil, nil, nil, - nil, nil, 595, 595, nil, 595, 595, 595, 595, 595, - 595, 595, 595, 595, 595, 595, 595, 596, 596, 595, - nil, 596, nil, nil, nil, nil, nil, nil, nil, 596, - 596, nil, 596, 596, 596, 596, 596, 596, 596, nil, - nil, 596, 596, nil, nil, nil, 596, 596, 596, 596, - nil, nil, nil, nil, nil, 596, nil, nil, nil, nil, - nil, nil, nil, 596, 596, nil, 596, 596, 596, 596, - 596, 596, 596, 596, 596, 596, 596, 596, 605, 605, - 596, nil, 605, nil, nil, nil, nil, nil, nil, nil, - 605, 605, nil, 605, 605, 605, 605, 605, 605, 605, - nil, nil, 605, 605, nil, nil, nil, 605, 605, 605, - 605, nil, nil, nil, nil, nil, 605, nil, nil, nil, - nil, nil, nil, nil, 605, 605, nil, 605, 605, 605, - 605, 605, 605, 605, 605, 605, 605, 605, 605, 606, - 606, 605, nil, 606, nil, nil, nil, nil, nil, nil, - nil, 606, 606, nil, 606, 606, 606, 606, 606, 606, - 606, nil, nil, 606, 606, nil, nil, nil, 606, 606, - 606, 606, nil, nil, nil, nil, nil, 606, nil, nil, - nil, nil, nil, nil, nil, 606, 606, nil, 606, 606, - 606, 606, 606, 606, 606, 606, 606, 606, 606, 606, - 633, 633, 606, nil, 633, nil, nil, nil, nil, nil, - nil, nil, 633, 633, nil, 633, 633, 633, 633, 633, - 633, 633, nil, nil, 633, 633, nil, nil, nil, 633, - 633, 633, 633, nil, nil, nil, nil, nil, 633, nil, - nil, nil, nil, nil, nil, nil, 633, 633, nil, 633, - 633, 633, 633, 633, 633, 633, 633, 633, 633, 633, - 633, 634, 634, 633, nil, 634, nil, nil, nil, nil, - nil, nil, nil, 634, 634, nil, 634, 634, 634, 634, - 634, 634, 634, nil, nil, 634, 634, nil, nil, nil, - 634, 634, 634, 634, nil, nil, nil, nil, nil, 634, - nil, nil, nil, nil, nil, nil, nil, 634, 634, nil, - 634, 634, 634, 634, 634, 634, 634, 634, 634, 634, - 634, 634, 640, 640, 634, nil, 640, nil, nil, nil, - nil, nil, nil, nil, 640, 640, nil, 640, 640, 640, - 640, 640, 640, 640, nil, nil, 640, 640, nil, nil, - nil, 640, 640, 640, 640, nil, nil, nil, nil, nil, - 640, nil, nil, nil, nil, nil, nil, nil, 640, 640, - nil, 640, 640, 640, 640, 640, 640, 640, 640, 640, - 640, 640, 640, 641, 641, 640, nil, 641, nil, nil, - nil, nil, nil, nil, nil, 641, 641, nil, 641, 641, - 641, 641, 641, 641, 641, nil, nil, 641, 641, nil, - nil, nil, 641, 641, 641, 641, nil, nil, nil, nil, - nil, 641, nil, nil, nil, nil, nil, nil, nil, 641, - 641, nil, 641, 641, 641, 641, 641, 641, 641, 641, - 641, 641, 641, 641, 678, 678, 641, nil, 678, nil, - nil, nil, nil, nil, nil, nil, 678, 678, nil, 678, - 678, 678, 678, 678, 678, 678, nil, nil, 678, 678, - nil, nil, nil, 678, 678, 678, 678, nil, nil, nil, - nil, nil, 678, nil, nil, nil, nil, nil, nil, nil, - 678, 678, nil, 678, 678, 678, 678, 678, 678, 678, - 678, 678, 678, 678, 678, 679, 679, 678, nil, 679, - nil, nil, nil, nil, nil, nil, nil, 679, 679, nil, - 679, 679, 679, 679, 679, 679, 679, nil, nil, 679, - 679, nil, nil, nil, 679, 679, 679, 679, nil, nil, - nil, nil, nil, 679, nil, nil, nil, nil, nil, nil, - nil, 679, 679, nil, 679, 679, 679, 679, 679, 679, - 679, 679, 679, 679, 679, 679, 1127, 1127, 679, nil, - 1127, nil, nil, nil, nil, nil, nil, nil, 1127, 1127, - nil, 1127, 1127, 1127, 1127, 1127, 1127, 1127, nil, nil, - 1127, 1127, nil, nil, nil, 1127, 1127, 1127, 1127, nil, - nil, nil, nil, nil, 1127, nil, nil, nil, nil, nil, - nil, nil, 1127, 1127, nil, 1127, 1127, 1127, 1127, 1127, - 1127, 1127, 1127, 1127, 1127, 1127, 1127, 1128, 1128, 1127, - nil, 1128, nil, nil, nil, nil, nil, nil, nil, 1128, - 1128, nil, 1128, 1128, 1128, 1128, 1128, 1128, 1128, nil, - nil, 1128, 1128, nil, nil, nil, 1128, 1128, 1128, 1128, - nil, nil, nil, nil, nil, 1128, nil, nil, nil, nil, - nil, nil, nil, 1128, 1128, nil, 1128, 1128, 1128, 1128, - 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1128, 1178, 1178, - 1128, nil, 1178, nil, nil, nil, nil, nil, nil, nil, - 1178, 1178, nil, 1178, 1178, 1178, 1178, 1178, 1178, 1178, - nil, nil, 1178, 1178, nil, nil, nil, 1178, 1178, 1178, - 1178, nil, nil, nil, nil, nil, 1178, nil, nil, nil, - nil, nil, nil, nil, 1178, 1178, nil, 1178, 1178, 1178, - 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, 1178, nil, - nil, 1178 ] - -racc_action_pointer = [ - nil, 52, 1004, 256, nil, -110, nil, 5323, 1133, 170, - 24870, 24998, 190, nil, 176, 191, 482, 259, -62, 58, - 124, 138, nil, -68, 5454, 1004, 25382, 349, nil, 171, - nil, -8, 5595, 5705, 5839, 5970, 6101, nil, 1148, 23012, - 23143, nil, 320, 356, 466, 435, 6232, 6363, 310, 6494, - 6625, 556, 6756, 375, 333, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 6897, nil, 1292, 7034, 7165, -23, - nil, 7296, 7427, nil, nil, 7558, 23282, 23413, 23544, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 235, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 0, 112, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 7701, nil, nil, nil, nil, - 7844, 7975, 8106, 8237, 8380, nil, 1436, nil, 673, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 393, nil, 1580, - 8511, 8642, 8773, 8904, 9035, 9166, 27600, 27661, nil, nil, - 387, 1724, 415, nil, 358, 15855, 430, 1868, 9297, 9428, - 9559, nil, nil, 519, -85, -29, 550, -23, 469, 584, - nil, 9690, 214, 243, 2012, 586, nil, nil, 9821, 9952, - 10083, 10214, 10345, 10476, 10607, 10738, 10869, 11000, 11131, 11262, - 11393, 11524, 11655, 11786, 11917, 12048, 12179, 12310, 12441, 12572, - nil, nil, nil, nil, 12703, nil, nil, 339, 409, 513, - 523, 531, 556, 582, 583, 625, 630, nil, nil, nil, - 12834, nil, nil, 27722, nil, nil, 594, 12965, 13096, nil, - nil, nil, nil, nil, nil, nil, 13227, nil, 1436, nil, - 562, 572, nil, 13358, 624, nil, 13489, nil, nil, 13620, - 13751, nil, nil, -77, nil, 13894, 1277, 623, 619, 2156, - 636, 683, 647, 23675, 2300, 692, 813, 831, 745, 870, - nil, 720, 686, 225, 741, 746, nil, nil, nil, 757, - 360, 716, 23814, nil, 523, 898, 2732, 2876, 790, nil, - 792, 14025, nil, 772, 2444, nil, nil, 275, 429, 777, - 761, 539, 795, nil, 606, -1, 11, 14156, 2588, 2732, - 230, 875, 768, -18, 10, 903, 850, 11, 883, nil, - nil, 479, 728, 590, nil, 904, nil, 802, 14287, nil, - 15885, nil, 193, 294, 405, 463, 468, -41, -27, 506, - nil, nil, nil, nil, nil, nil, nil, 797, 25126, nil, - nil, nil, nil, 801, nil, 876, 788, 789, 14418, nil, - nil, 778, nil, 918, 140, 897, nil, nil, 1148, nil, - nil, nil, nil, nil, 1292, 814, nil, 815, 817, 613, - 691, 14559, nil, nil, nil, nil, 222, 361, 862, nil, - nil, 14691, 14827, 14964, 946, 947, nil, nil, -1, 828, - 827, 841, nil, nil, 843, 844, 845, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 834, 2574, nil, nil, - 15095, nil, nil, nil, nil, nil, nil, nil, 932, nil, - nil, 933, 385, 15226, 976, nil, nil, nil, -33, nil, - 903, 27783, 27844, 15357, 141, 15488, 15619, 15750, 853, 854, - nil, nil, nil, 3020, 3164, 672, 791, 934, 937, 947, - 950, 4748, 4892, 5036, 3308, 3452, 3596, 3740, 3884, 4028, - 2760, 2904, 4172, 4316, 1580, 4460, nil, -7, nil, 15891, - nil, nil, nil, nil, 16021, 887, 885, 890, nil, nil, - nil, 899, nil, nil, 16152, nil, 16283, nil, 16414, nil, - 217, nil, nil, nil, 16557, 1421, nil, 900, 898, nil, - nil, 899, 23945, 911, 16700, 27905, 27966, 1004, 954, nil, - nil, 24076, 911, nil, 16831, 28027, 28088, 16962, 4604, 17093, - nil, nil, 1038, 974, nil, 17224, nil, nil, 17355, nil, - nil, nil, 2876, 1072, nil, 3020, 62, 1076, 1081, 236, - 1084, 17486, 17617, 28149, 28210, 27, nil, nil, 1046, nil, - 28271, 28332, 17748, nil, nil, 490, 3164, nil, 27320, nil, - nil, nil, nil, 725, nil, nil, nil, 975, nil, nil, - 400, nil, 461, nil, nil, 964, nil, 966, nil, nil, - nil, 25254, nil, 17891, 18022, 970, 18153, 18284, 28393, 28454, - 18427, 18558, 715, 1014, 18689, 18820, 18951, 19082, 1020, nil, - nil, 19213, nil, 19344, 1021, nil, 1075, nil, 259, 1724, - 1085, 1115, 19475, nil, nil, nil, nil, 715, nil, nil, - 649, 27412, nil, 27420, nil, 25827, nil, 986, 19606, nil, - 2603, nil, 1001, 1003, 1566, 1007, nil, nil, nil, nil, - 1095, 1098, nil, nil, nil, 237, 280, 471, 610, 1015, - 19737, 19868, nil, nil, nil, 1023, 25495, nil, 1147, nil, - 1130, -20, nil, nil, 19999, nil, 1047, 1052, 1153, nil, - 1031, nil, 1097, nil, nil, nil, 20130, nil, 134, 24207, - 1052, nil, 1057, 217, 248, 1100, 250, 1148, 1101, 1071, - 24338, nil, 585, 1142, 1868, 20261, nil, nil, 635, 824, - nil, 1214, nil, nil, nil, nil, nil, 1220, 1225, nil, - nil, 26, 1105, 40, 41, 151, 177, 3308, 827, 1292, - nil, 1108, 3452, 20392, nil, 1233, 63, 1114, nil, nil, - nil, 3596, nil, nil, 1113, nil, 1118, 1126, 1127, nil, - nil, 1129, 20523, 1142, 390, 391, 720, 859, nil, 2012, - 20654, nil, 1140, nil, nil, nil, nil, nil, nil, nil, - 1162, nil, nil, nil, 20785, 20916, 21047, 1270, nil, 3740, - 1147, 1195, nil, nil, 1152, nil, 1238, nil, nil, 1166, - 1167, nil, 1168, 1171, nil, 1172, nil, nil, nil, 1176, - 2633, 2613, nil, nil, 21178, 21309, 21440, 21571, 436, 352, - 25578, nil, 25676, 21702, nil, nil, 1199, nil, nil, 1215, - 1199, nil, nil, 788, 3884, nil, nil, nil, 1198, 254, - nil, 81, nil, 1324, nil, 21833, 1325, nil, nil, nil, - 21964, 4028, 71, 1339, nil, 1343, 527, 4172, nil, nil, - nil, nil, 1237, 1283, 1251, nil, 1246, 484, nil, nil, - 22095, nil, 2156, 1339, 1343, 2300, nil, 4316, nil, nil, - 32, 24469, nil, nil, 27437, nil, 27489, nil, 27496, nil, - 27514, nil, nil, nil, nil, 1255, 1258, 22226, 22357, nil, - -77, nil, nil, nil, nil, 1287, nil, nil, nil, 555, - 25774, 266, nil, 1271, 1354, 1273, nil, nil, 25873, nil, - nil, 476, nil, nil, 785, nil, nil, 27090, 27188, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 1616, 603, nil, nil, 2444, 4460, nil, nil, 1283, 1284, - nil, 1286, 1289, 1291, nil, 1316, 1296, 1284, 24600, nil, - nil, nil, nil, nil, 33, nil, nil, nil, 193, nil, - nil, nil, 1424, 4604, 4748, 1710, nil, nil, nil, nil, - 4892, 34, 35, 1190, 1388, 36, nil, 1311, 1312, 1315, - 1316, 3100, 3244, 25971, 1399, 26069, 86, 157, 26167, 26265, - 699, -32, 1322, 1342, nil, 26363, nil, 1340, 290, nil, - 1362, 26461, 26559, nil, 635, 1390, 266, nil, 27222, 27320, - nil, nil, nil, nil, 22488, nil, nil, nil, 813, nil, - nil, 15910, nil, nil, 25974, nil, 14622, nil, nil, 1369, - 24731, 1334, 1424, 5036, 26657, nil, nil, nil, nil, 1379, - 1487, 678, nil, nil, nil, 1509, 22619, 28515, 28576, 42, - 27550, nil, nil, nil, nil, 1384, nil, 1389, nil, nil, - nil, nil, 1393, 1395, 1396, 1400, 1402, 1405, nil, nil, - nil, 1453, 1415, 1416, nil, 1420, nil, nil, -69, 1422, - nil, nil, nil, nil, nil, nil, 1430, 1428, nil, nil, - 1429, 1430, 1433, 1435, nil, 1436, nil, 1436, 28637, nil, - 864, 98, 841, nil, nil, nil, 1854, nil, 1440, 102, - 138, 145, 181, 1438, 26755, nil, nil, nil, nil, nil, - nil, nil, 26853, nil, 392, nil, 26951, nil, nil, 26072, - nil, 23190, nil, 23722, nil, 25565, nil, nil, 1484, 1488, - nil, nil, 22750, 22881, nil, 146, nil, 1454, 1455, nil, - nil, 1456, 1459, 1460, 1461, 5180, nil, nil, 27049, 26366, - nil, nil, nil, nil, 35, 1463, nil, nil, nil, nil ] - -racc_action_default = [ - -1, -742, -4, -742, -2, -728, -5, -742, -8, -742, - -742, -742, -742, -31, -742, -742, -36, -742, -742, -638, - -638, -314, -53, -730, -742, -60, -742, -68, -69, -70, - -74, -288, -288, -288, -325, -352, -353, -87, -13, -91, - -99, -101, -742, -625, -626, -742, -742, -742, -742, -742, - -742, -239, -742, -730, -255, -305, -306, -307, -308, -309, - -310, -311, -312, -313, -718, -316, -13, -741, -706, -333, - -335, -742, -742, -62, -62, -728, -742, -742, -742, -354, - -355, -357, -358, -359, -360, -419, -563, -564, -565, -566, - -589, -569, -570, -591, -593, -576, -581, -585, -587, -602, - -603, -604, -589, -606, -608, -609, -610, -611, -612, -613, - -614, -716, -717, -617, -618, -619, -620, -621, -622, -623, - -624, -629, -630, 1250, -3, -729, -737, -738, -739, -7, - -742, -742, -742, -742, -742, -9, -4, -19, -742, -130, - -131, -132, -133, -134, -135, -136, -140, -141, -142, -143, - -144, -145, -146, -147, -148, -149, -150, -151, -152, -153, - -154, -155, -156, -157, -158, -159, -160, -161, -162, -163, - -164, -165, -166, -167, -168, -169, -170, -171, -172, -173, - -174, -175, -176, -177, -178, -179, -180, -181, -182, -183, - -184, -185, -186, -187, -188, -189, -190, -191, -192, -193, - -194, -195, -196, -197, -198, -199, -200, -201, -202, -203, - -204, -205, -206, -207, -208, -209, -210, -24, -137, -13, - -742, -742, -742, -742, -742, -278, -742, -742, -726, -727, - -742, -13, -637, -635, -661, -661, -742, -13, -742, -742, - -730, -731, -57, -742, -625, -626, -742, -314, -742, -742, - -245, -742, -638, -638, -13, -742, -741, -741, -222, -223, - -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, - -742, -742, -742, -742, -742, -742, -742, -742, -742, -742, - -259, -260, -261, -262, -742, -64, -65, -742, -130, -131, - -170, -171, -172, -188, -193, -200, -203, -625, -626, -704, - -742, -428, -430, -742, -724, -725, -75, -278, -742, -332, - -434, -443, -445, -82, -440, -83, -730, -84, -266, -283, - -293, -293, -287, -291, -294, -295, -299, -589, -708, -712, - -715, -85, -86, -728, -14, -742, -17, -742, -89, -13, - -730, -742, -92, -95, -13, -107, -108, -742, -742, -115, - -325, -328, -730, -742, -638, -638, -352, -353, -356, -441, - -742, -97, -742, -103, -322, -742, -224, -225, -607, -233, - -234, -742, -246, -741, -13, -318, -267, -730, -730, -742, - -742, -730, -742, -334, -61, -742, -742, -742, -13, -13, - -728, -742, -729, -625, -626, -742, -742, -314, -742, -370, - -371, -125, -126, -742, -128, -742, -314, -633, -742, -348, - -661, -567, -742, -742, -742, -742, -742, -742, -742, -742, - -6, -740, -25, -26, -27, -28, -29, -742, -742, -21, - -22, -23, -138, -742, -32, -35, -301, -742, -299, -300, - -33, -742, -37, -742, -314, -50, -52, -211, -271, -294, - -54, -55, -38, -212, -271, -730, -279, -293, -293, -716, - -717, -288, -438, -718, -719, -720, -717, -716, -288, -437, - -439, -718, -720, -742, -555, -742, -383, -384, -687, -730, - -703, -703, -643, -644, -646, -646, -646, -660, -662, -663, - -664, -665, -666, -667, -668, -669, -670, -742, -672, -674, - -676, -681, -683, -684, -685, -692, -694, -695, -697, -698, - -699, -701, -742, -742, -742, -46, -219, -56, -730, -331, - -742, -742, -742, -278, -322, -742, -742, -742, -742, -742, - -741, -457, -741, -220, -221, -226, -227, -228, -229, -230, - -231, -235, -236, -237, -238, -240, -241, -242, -243, -244, - -247, -248, -249, -250, -730, -263, -66, -730, -449, -288, - -716, -717, -72, -76, -662, -730, -293, -730, -289, -447, - -449, -730, -327, -284, -742, -285, -742, -290, -742, -298, - -742, -711, -714, -12, -729, -16, -18, -730, -88, -320, - -104, -93, -742, -730, -278, -742, -742, -114, -742, -637, - -607, -742, -100, -105, -742, -742, -742, -742, -264, -742, - -265, -741, -742, -742, -268, -736, -735, -270, -736, -323, - -324, -707, -13, -361, -362, -13, -742, -742, -742, -742, - -742, -742, -278, -742, -742, -322, -62, -125, -126, -127, - -742, -742, -278, -344, -631, -742, -13, -420, -661, -423, - -568, -590, -595, -742, -597, -571, -592, -742, -594, -575, - -742, -578, -742, -580, -583, -742, -584, -742, -605, -10, - -20, -742, -30, -742, -742, -304, -742, -278, -742, -742, - -742, -742, -442, -742, -280, -282, -742, -742, -77, -277, - -435, -742, -447, -742, -79, -436, -44, -47, -730, -256, - -253, -741, -741, -350, -524, -686, -636, -742, -641, -642, - -742, -742, -653, -742, -656, -742, -658, -742, -742, -372, - -742, -374, -376, -379, -382, -730, -675, -696, -700, -639, - -45, -254, -351, -330, -732, -716, -717, -717, -716, -730, - -742, -742, -741, -455, -741, -742, -742, -705, -742, -450, - -71, -431, -447, -273, -280, -275, -742, -409, -742, -326, - -293, -292, -296, -297, -709, -710, -742, -15, -90, -742, - -96, -102, -730, -716, -717, -276, -721, -113, -742, -98, - -742, -218, -321, -232, -251, -742, -317, -319, -730, -741, - -363, -741, -63, -364, -365, -338, -339, -742, -742, -741, - -341, -742, -730, -716, -717, -721, -321, -13, -125, -126, - -129, -730, -13, -742, -346, -742, -742, -730, -596, -600, - -601, -13, -572, -573, -577, -579, -582, -586, -588, -139, - -34, -302, -299, -730, -716, -717, -717, -716, -51, -272, - -742, -733, -293, -40, -214, -41, -215, -78, -42, -217, - -742, -43, -216, -80, -742, -742, -742, -741, -368, -13, - -556, -741, -557, -558, -703, -682, -687, -702, -645, -646, - -646, -673, -646, -646, -693, -646, -670, -386, -688, -730, - -742, -742, -381, -671, -742, -742, -742, -742, -442, -730, - -742, -456, -742, -742, -67, -429, -409, -433, -432, -742, - -730, -444, -410, -730, -13, -446, -286, -713, -94, -442, - -106, -730, -269, -742, -366, -742, -742, -340, -342, -741, - -742, -13, -442, -742, -442, -742, -742, -13, -349, -421, - -424, -426, -413, -742, -742, -574, -303, -442, -39, -213, - -281, -81, -48, -49, -258, -257, -11, -13, -562, -369, - -742, -742, -560, -640, -742, -649, -742, -651, -742, -654, - -742, -657, -659, -373, -375, -377, -380, -742, -742, -58, - -465, -468, -469, -470, -471, -473, -475, -478, -479, -534, - -730, -491, -494, -504, -508, -513, -515, -516, -519, -520, - -589, -523, -525, -526, -527, -532, -533, -742, -742, -537, - -538, -539, -540, -541, -542, -543, -544, -545, -546, -547, - -742, -742, -553, -59, -252, -13, -73, -274, -703, -703, - -390, -392, -392, -392, -408, -742, -730, -670, -678, -679, - -690, -448, -329, -336, -742, -337, -741, -296, -741, -343, - -345, -632, -742, -13, -13, -742, -422, -598, -599, -561, - -13, -625, -626, -742, -742, -314, -559, -646, -646, -646, - -646, -742, -742, -466, -742, -742, -476, -477, -742, -742, - -742, -496, -730, -730, -490, -497, -501, -742, -742, -493, - -742, -742, -742, -507, -514, -518, -742, -522, -530, -531, - -535, -536, -548, -549, -742, -126, -551, -451, -742, -388, - -389, -393, -399, -401, -742, -404, -742, -406, -411, -742, - -742, -677, -742, -13, -742, -452, -453, -454, -347, -742, - -742, -730, -415, -417, -418, -555, -278, -742, -742, -322, - -742, -647, -650, -652, -655, -378, -467, -504, -472, -474, - -483, -487, -730, -730, -730, -730, -730, -730, -552, -488, - -489, -511, -498, -499, -502, -730, -589, -734, -730, -505, - -509, -512, -517, -521, -528, -529, -730, -703, -680, -391, - -392, -392, -392, -392, -691, -392, -412, -689, -742, -322, - -741, -742, -462, -425, -427, -414, -742, -554, -730, -716, - -717, -721, -321, -646, -742, -480, -481, -482, -484, -485, - -486, -503, -742, -492, -742, -495, -742, -550, -387, -742, - -396, -742, -398, -742, -402, -742, -405, -407, -321, -721, - -367, -458, -742, -742, -416, -442, -648, -505, -500, -506, - -510, -392, -392, -392, -392, -13, -463, -464, -742, -742, - -394, -397, -400, -403, -741, -392, -459, -460, -461, -395 ] - -racc_goto_table = [ - 44, 302, 310, 314, 412, 44, 142, 142, 455, 385, - 386, 798, 286, 390, 383, 567, 419, 319, 319, 319, - 622, 625, 142, 226, 298, 242, 128, 384, 384, 475, - 701, 384, 285, 639, 304, 514, 44, 346, 346, 718, - 496, 496, 15, 342, 358, 358, 857, 15, 630, 708, - 709, 388, 389, 137, 218, 871, 145, 145, 530, 532, - 439, 440, 575, 742, 44, 744, 819, 731, 422, 423, - 424, 425, 913, 563, 394, 298, 298, 453, 15, 17, - 125, 358, 358, 358, 17, 864, 384, 384, 384, 384, - 565, 516, 135, 870, 368, 872, 128, 303, 461, 468, - 464, 464, 446, 124, 338, 446, 15, 237, 321, 321, - 321, 306, 313, 315, 602, 17, 399, 682, 874, 446, - 696, 479, 512, 44, 361, 320, 320, 320, 725, 487, - 487, 452, 44, 761, 44, 761, 916, 340, 609, 4, - 933, 378, 381, 17, 756, 515, 764, 614, 617, 1022, - 964, 621, 890, 1174, 892, 230, 236, 969, 377, 1013, - 730, 972, 1122, 972, 1079, 15, 1124, 317, 331, 332, - 966, 129, 612, 391, 15, 559, 15, 464, 450, 451, - 1072, 904, 748, 763, 1090, 1091, 1137, 8, 764, 1, - 1144, 1147, 8, 2, 758, 517, 518, 462, 1153, 575, - 1155, 946, 17, 407, 409, 767, 1159, 824, 319, 826, - 341, 17, 827, 17, 828, 217, 496, 44, 660, 662, - 400, 434, 445, 472, 763, 445, 1025, 435, 1073, 44, - 599, 599, 428, 792, 287, 44, 746, 752, 375, 445, - 671, 580, 371, 761, 761, 379, 751, 299, 521, 712, - 714, 716, 44, 380, 398, 764, 557, 643, 1174, 15, - 374, 441, 719, 1136, 441, 613, 812, 850, 1142, 1145, - 810, 15, 927, 427, 646, 1164, 1165, 15, 441, 656, - 658, 661, 661, 763, 965, 1023, 797, 1024, 1102, 420, - 319, 319, 304, 763, 15, 731, 17, 649, 17, 319, - 1026, 17, 1121, 1224, 871, 487, 739, 1124, 17, 647, - 8, 437, 437, 761, 17, 17, 1143, 1146, 1227, 426, - 1015, 8, 929, 410, 310, 626, 1228, 899, 816, 1229, - 314, 17, 964, 44, 1043, 1044, 1057, 44, 1203, 558, - 237, 346, 44, 384, 770, 569, 645, 1170, 358, 1109, - 1135, 879, 595, 779, 128, 556, 570, 896, 1115, 874, - 346, 1181, 1246, 763, 384, 1235, 603, 358, 1138, 1139, - 605, 1068, 44, 1069, 1078, 15, 785, 772, 516, 15, - 453, 1182, 321, 1116, 15, 972, 44, 44, 528, 529, - 321, 433, 1081, 461, 468, 464, 464, 1161, 566, 320, - 633, 888, 1162, 861, 950, 338, 600, 320, 584, 944, - 338, 128, 17, 411, 15, 802, 17, 413, 414, 415, - 586, 17, 416, 1093, 142, 811, 341, 591, 15, 15, - 417, 583, 689, 953, 909, 418, 921, 818, 587, 695, - 1047, 568, 237, 593, 815, 871, 1114, 821, 678, 571, - 813, 17, 1036, 869, 496, 847, 697, 781, 865, 1168, - 833, 853, 900, 1220, 922, 17, 17, 775, nil, 464, - 464, 670, nil, 924, 145, nil, 1167, 775, nil, 464, - 464, nil, nil, 1171, nil, 719, 1172, nil, 629, 882, - 1152, nil, 462, nil, nil, 937, 697, 1160, nil, 761, - nil, 906, 943, nil, nil, 775, 319, 464, 464, nil, - 764, 341, nil, 775, 464, 464, 341, 496, 472, 496, - 585, 908, 944, nil, nil, nil, 825, nil, 825, 763, - 689, nil, nil, 729, nil, 817, nil, nil, nil, 844, - 846, 688, 862, 487, 849, nil, 852, nil, 694, nil, - 461, 468, 464, 464, nil, nil, nil, 446, 912, 871, - 627, 628, nil, nil, nil, nil, 462, 446, 446, nil, - 1110, nil, 446, nil, 446, nil, 462, 319, nil, nil, - nil, nil, 44, 906, nil, 1050, nil, 1099, 1100, 1247, - 346, 1231, 472, 843, 845, nil, 603, 358, 848, 346, - 851, 919, 472, 866, 462, 603, 358, nil, nil, 1160, - 925, nil, 462, nil, 807, 319, nil, 1160, nil, nil, - 44, 1230, nil, 44, 15, 319, 1248, nil, nil, nil, - 472, nil, nil, nil, 955, 957, 472, 959, 961, 750, - 962, 1096, 1074, nil, 44, 719, 719, 793, 760, 462, - nil, nil, nil, 1230, nil, nil, nil, nil, nil, nil, - 319, 17, 15, nil, nil, 15, 814, 142, nil, 1113, - nil, 44, nil, nil, nil, 472, nil, 445, 44, nil, - nil, 1187, nil, nil, nil, nil, 15, 445, 445, 788, - nil, nil, 445, 939, 445, 1117, 898, nil, nil, 17, - 1148, nil, 17, nil, nil, nil, nil, nil, nil, 1027, - nil, nil, nil, 15, 829, nil, 441, 145, nil, nil, - 15, 446, 801, 17, 897, 1042, 441, 441, nil, 1141, - nil, 441, 894, 441, 1149, 1150, 1208, 844, 846, 849, - 852, 911, 142, nil, nil, nil, 689, 938, nil, 695, - 17, 926, 285, 17, nil, nil, nil, 17, 842, nil, - 496, nil, nil, 17, 17, nil, nil, 346, 17, 384, - 17, nil, nil, 603, 358, nil, nil, nil, 346, nil, - nil, 993, nil, 993, 910, 358, 991, nil, 991, nil, - nil, nil, nil, 437, 789, nil, nil, 791, nil, 18, - nil, nil, nil, nil, 18, 44, nil, 1198, 1199, 1200, - 44, nil, nil, 1097, nil, 867, 1221, nil, 867, 44, - 939, 243, 1131, 1132, 1133, 1134, 719, 719, 842, nil, - nil, 243, 243, 243, nil, 18, 347, 347, 697, nil, - nil, 445, 1120, nil, nil, nil, nil, 15, nil, nil, - 1225, nil, 15, 1034, nil, nil, nil, 44, 830, nil, - nil, 15, nil, 18, nil, 838, nil, nil, 243, 243, - nil, 384, 243, 395, 405, 405, nil, nil, nil, nil, - 441, nil, nil, nil, 17, nil, nil, nil, 1007, 17, - 1007, nil, nil, nil, nil, nil, nil, nil, 17, 15, - nil, nil, 44, nil, 1086, nil, nil, 1027, nil, 1188, - 1027, nil, nil, nil, nil, nil, nil, 17, nil, 44, - nil, nil, 18, nil, nil, 44, nil, 243, 243, 243, - 243, 18, nil, 18, nil, nil, 17, nil, nil, nil, - nil, nil, nil, nil, 15, 44, 1019, 1041, nil, 1052, - nil, nil, nil, nil, nil, nil, 358, nil, 1226, 993, - 993, 15, nil, nil, 991, 991, nil, 15, nil, 993, - nil, nil, nil, nil, 991, 993, nil, nil, 1007, 923, - 991, 17, nil, nil, nil, nil, 1007, 15, nil, nil, - nil, 1056, nil, 934, 866, 1007, 1007, nil, 17, 775, - nil, 464, 464, nil, 17, 993, nil, nil, nil, nil, - 991, 1020, nil, 44, nil, 1027, 18, 243, 443, 243, - 243, 443, 243, 873, 17, 875, 298, nil, 18, nil, - nil, 949, 1166, 358, 18, 443, 243, 243, nil, nil, - nil, 44, 44, nil, nil, nil, nil, 970, 44, 970, - 384, 18, 464, nil, nil, 15, nil, nil, 1127, nil, - nil, 1007, nil, 1007, nil, nil, 1007, 1007, nil, nil, - 1204, nil, nil, 1007, nil, nil, 1031, nil, nil, 1007, - 1007, nil, nil, 15, 15, nil, 1007, 1007, nil, nil, - 15, nil, 17, 1038, 1103, 1105, 1107, 243, 462, nil, - nil, nil, nil, nil, 243, 243, 233, 233, 298, 319, - nil, 44, 1007, 243, nil, 358, nil, nil, nil, 1049, - 17, 17, nil, nil, 472, nil, nil, 17, nil, nil, - nil, nil, 18, nil, nil, nil, 18, 1071, nil, nil, - 347, 18, nil, nil, 1019, 1085, nil, 1019, nil, 1019, - nil, nil, nil, 15, 376, nil, nil, 1028, nil, 347, - 1236, 1237, nil, nil, nil, 19, nil, nil, nil, nil, - 19, 18, nil, nil, 472, nil, nil, nil, 384, 384, - nil, nil, nil, nil, 243, 18, 18, nil, nil, nil, - 17, nil, 1007, nil, nil, nil, nil, nil, nil, nil, - 1007, 19, 354, 354, 1007, 243, 867, nil, nil, 1020, - nil, nil, 1020, 1021, 1020, 1119, nil, nil, nil, nil, - 1071, nil, 1125, nil, nil, 1071, 1071, nil, nil, 19, - nil, nil, nil, 44, nil, nil, 1007, nil, 1158, 354, - 354, 354, nil, 1210, 1212, 1214, 1216, 239, 1217, nil, - nil, nil, 1019, nil, 1019, nil, 1019, nil, 1019, nil, - nil, nil, nil, 999, 1058, 999, 1059, nil, 1060, nil, - 243, 970, nil, nil, nil, 15, nil, 373, nil, nil, - nil, nil, 1019, nil, nil, 1180, nil, nil, 19, nil, - nil, nil, nil, nil, nil, nil, nil, 19, 20, 19, - nil, nil, nil, 20, 1240, 1241, 1242, 1243, nil, nil, - 243, nil, 17, nil, nil, nil, nil, 1020, 1249, 1020, - 243, 1020, nil, 1020, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 20, 355, 355, nil, nil, 233, - 233, nil, nil, 531, 531, nil, nil, 1020, nil, nil, - nil, nil, 1028, 999, nil, 1028, nil, nil, 1028, nil, - 1028, 999, 20, nil, nil, nil, nil, nil, nil, nil, - 999, 999, 355, 355, 355, nil, nil, nil, nil, nil, - nil, 18, 19, nil, 19, nil, nil, 19, nil, 347, - nil, 243, nil, nil, 19, nil, nil, nil, 347, nil, - 19, 19, nil, nil, nil, nil, nil, 1244, nil, nil, - 519, nil, nil, nil, 1173, nil, 1175, 19, nil, 18, - nil, 20, 18, nil, nil, nil, nil, nil, nil, 243, - 20, nil, 20, nil, nil, nil, 999, nil, 999, 243, - 1193, 999, 999, 18, nil, nil, nil, nil, 999, nil, - nil, nil, nil, nil, 999, 999, nil, nil, nil, nil, - 610, 999, 999, 1028, nil, 1028, nil, 1028, nil, 1028, - 18, nil, nil, 443, 243, nil, nil, 18, nil, nil, - nil, nil, nil, 443, 443, nil, 572, 999, 443, nil, - 443, nil, nil, 1028, nil, nil, nil, nil, 19, nil, - nil, nil, 19, nil, nil, nil, 354, 19, nil, nil, - 588, nil, nil, nil, nil, 20, nil, 20, nil, 1232, - 20, 1233, nil, 1234, nil, 354, nil, 20, nil, nil, - nil, nil, nil, 20, 20, nil, nil, 19, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 21, 1245, - 20, 19, 19, 21, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 347, 999, nil, nil, - nil, nil, nil, nil, nil, 999, 598, 347, nil, 999, - nil, nil, 243, nil, 21, 349, 349, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 616, 616, nil, 18, 616, nil, nil, nil, 18, - 243, 999, 21, nil, nil, nil, nil, 743, 18, 743, - nil, nil, 397, 406, 406, nil, nil, nil, nil, nil, - nil, 20, nil, nil, nil, 20, nil, 443, nil, 355, - 20, nil, nil, nil, nil, nil, nil, nil, nil, 706, - nil, nil, 243, nil, nil, nil, 18, nil, 355, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 20, 21, nil, nil, nil, nil, nil, nil, nil, 683, - 21, nil, 21, nil, 20, 20, nil, nil, 733, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 610, nil, - nil, 18, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 243, nil, nil, nil, nil, nil, 18, nil, - nil, nil, nil, nil, 18, nil, nil, 747, nil, nil, - nil, nil, nil, nil, nil, 753, nil, 755, nil, nil, - nil, 759, nil, nil, 18, nil, nil, 19, 1053, nil, - nil, nil, nil, nil, nil, 354, nil, 768, nil, nil, - nil, nil, nil, 771, 354, 21, nil, 444, nil, nil, - 444, nil, nil, nil, nil, nil, nil, 21, 745, nil, - nil, nil, nil, 21, 444, 19, nil, nil, 19, 863, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 21, nil, nil, nil, nil, nil, nil, nil, nil, 19, - nil, nil, 18, 382, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 1111, nil, nil, nil, 891, - nil, 891, nil, nil, nil, nil, 19, nil, nil, 19, - 18, 18, nil, 19, nil, nil, nil, 18, nil, 19, - 19, nil, nil, nil, 19, nil, 19, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 20, 21, nil, nil, nil, 21, 531, nil, 355, 349, - 21, 243, nil, nil, nil, 883, nil, 355, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 1177, 349, nil, - 18, nil, nil, nil, nil, nil, nil, nil, 20, nil, - 21, 20, 855, 243, nil, nil, nil, nil, nil, nil, - nil, nil, 354, nil, 21, 21, nil, nil, nil, nil, - nil, nil, 20, 354, 948, nil, nil, nil, 952, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 683, nil, 436, 449, nil, nil, 20, - 19, nil, 20, nil, nil, 19, 20, nil, nil, nil, - nil, nil, 20, 20, 19, nil, nil, 20, nil, 20, - nil, nil, nil, nil, nil, nil, 683, nil, nil, nil, - nil, nil, nil, 19, nil, nil, 743, nil, nil, nil, - nil, nil, 616, nil, nil, nil, nil, nil, nil, 243, - 243, nil, 19, nil, nil, nil, 683, nil, nil, nil, - nil, nil, 18, nil, nil, 683, nil, nil, nil, nil, - nil, 932, nil, nil, nil, nil, nil, nil, nil, 963, - nil, nil, nil, nil, nil, nil, nil, 683, nil, nil, - nil, nil, nil, nil, nil, 355, nil, 19, 577, nil, - 1017, 579, nil, nil, 581, 582, 355, nil, nil, nil, - nil, 1032, nil, nil, 19, nil, nil, nil, nil, nil, - 19, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 20, nil, nil, nil, nil, 20, nil, - 19, nil, nil, 968, 354, nil, nil, 20, nil, nil, - nil, nil, nil, 891, nil, nil, nil, 932, nil, nil, - 21, nil, nil, nil, nil, nil, 20, nil, 349, nil, - nil, nil, nil, nil, nil, nil, nil, 349, nil, nil, - nil, nil, nil, nil, nil, 20, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 21, nil, - nil, 21, nil, nil, nil, nil, nil, nil, 19, nil, - nil, nil, nil, 675, nil, nil, nil, nil, nil, nil, - nil, 354, 21, nil, nil, nil, nil, nil, nil, 820, - 20, nil, nil, nil, 683, 1080, 19, 19, nil, nil, - nil, nil, nil, 19, nil, nil, nil, 20, nil, 21, - 31, nil, 444, 20, nil, 31, 21, nil, nil, nil, - nil, nil, 444, 444, nil, nil, 1140, 444, nil, 444, - nil, nil, 31, 20, nil, 726, nil, 355, nil, nil, - 932, nil, 31, 31, 31, nil, 31, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 354, nil, nil, 19, nil, nil, nil, - nil, nil, nil, nil, 31, nil, nil, nil, nil, 31, - 31, 683, nil, 31, nil, nil, 683, 683, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 20, 1195, 1196, 1197, 349, nil, nil, nil, 762, - nil, 382, nil, 765, 355, 1000, 349, 1000, 1205, nil, - nil, nil, nil, nil, nil, nil, 1207, nil, nil, 20, - 20, nil, nil, 31, nil, 1185, 20, nil, 31, 31, - 31, 31, 31, 21, 31, nil, nil, nil, 21, nil, - 762, nil, nil, 382, nil, nil, nil, 21, nil, 683, - 683, 683, nil, nil, nil, nil, 449, nil, nil, 1080, - nil, nil, nil, nil, nil, nil, 444, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 19, nil, - nil, nil, nil, nil, nil, 21, 355, nil, nil, 20, - nil, nil, 683, nil, nil, 1000, nil, nil, nil, 831, - nil, nil, nil, 1000, nil, nil, nil, nil, nil, 762, - 382, nil, 1000, 1000, nil, nil, nil, 31, 31, 31, - 31, 31, 31, 31, nil, nil, nil, 860, nil, 31, - 21, nil, nil, nil, nil, 31, 31, 31, 31, nil, - nil, nil, nil, 878, nil, nil, nil, 21, nil, nil, - nil, nil, 31, 21, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 21, nil, nil, nil, 1055, 1000, 762, - 1000, nil, nil, 1000, 1000, nil, nil, nil, nil, nil, - 1000, 907, nil, nil, nil, nil, 1000, 1000, 31, nil, - nil, nil, nil, 1000, 1000, 31, 31, nil, nil, nil, - nil, 20, nil, nil, 31, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 1000, - nil, nil, nil, 31, nil, nil, nil, 31, nil, nil, - nil, 21, 31, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 406, nil, 1001, 936, 1001, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 21, - 21, nil, 31, nil, nil, nil, 21, nil, nil, nil, - nil, nil, nil, nil, nil, 31, 31, 31, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 31, nil, nil, 1000, - nil, nil, nil, nil, nil, nil, nil, 1000, nil, nil, - nil, 1000, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 406, nil, nil, 21, - nil, nil, nil, nil, 34, 1037, 1001, nil, nil, 34, - nil, nil, nil, 1000, 1001, nil, nil, nil, nil, nil, - nil, nil, nil, 1001, 1001, 382, 34, nil, nil, nil, - nil, 31, nil, nil, nil, nil, 34, 34, 34, nil, - 34, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 34, nil, - nil, 31, nil, 34, 34, nil, nil, 34, nil, nil, - nil, 31, 43, nil, 1002, nil, 1002, 43, nil, 1001, - nil, 1001, nil, nil, 1001, 1001, nil, nil, nil, nil, - nil, 1001, nil, nil, nil, nil, 297, 1001, 1001, nil, - nil, nil, nil, nil, 1001, 1001, nil, nil, 43, 345, - 345, 21, nil, nil, nil, nil, nil, 34, nil, nil, - nil, nil, 34, 34, 34, 34, 34, nil, 34, nil, - 1001, nil, 31, nil, nil, nil, 43, nil, nil, nil, - nil, nil, 31, nil, nil, nil, 393, 297, 297, nil, - 1003, nil, 1003, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 1002, nil, nil, nil, nil, nil, - 31, nil, 1002, 31, nil, nil, nil, nil, nil, nil, - 31, 1002, 1002, nil, nil, nil, nil, nil, nil, nil, - 31, nil, nil, nil, 31, 43, nil, nil, nil, nil, - nil, nil, nil, nil, 43, nil, 43, nil, nil, nil, - 1001, 34, 34, 34, 34, 34, 34, 34, 1001, nil, - nil, 31, 1001, 34, 31, 31, nil, nil, 31, 34, - 34, 34, 34, nil, 31, 31, nil, nil, nil, 31, - 1003, 31, nil, nil, nil, nil, 34, 1002, 1003, 1002, - nil, nil, 1002, 1002, 1001, nil, nil, 1003, 1003, 1002, - nil, nil, nil, nil, nil, 1002, 1002, nil, nil, nil, - nil, nil, 1002, 1002, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 43, - nil, nil, 34, nil, nil, nil, nil, nil, 1002, 34, - 34, 43, nil, nil, nil, nil, nil, 43, 34, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 1003, 43, 1003, nil, 34, 1003, 1003, - nil, 34, nil, 31, nil, 1003, 34, nil, nil, nil, - nil, 1003, 1003, 1004, nil, 1004, nil, nil, 1003, 1003, - nil, nil, nil, nil, nil, 31, nil, nil, nil, nil, - 31, 31, nil, nil, nil, nil, 34, nil, nil, 31, - nil, nil, nil, nil, 1003, nil, nil, nil, 1002, 34, - 34, 34, nil, nil, nil, nil, 1002, nil, 31, nil, - 1002, nil, nil, nil, nil, nil, 1005, nil, 1005, nil, - 34, nil, nil, 31, nil, 43, nil, 31, nil, 43, - nil, nil, nil, 345, 43, nil, nil, nil, nil, nil, - nil, nil, 1002, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 345, 1004, nil, nil, nil, nil, nil, nil, - nil, 1004, nil, nil, 43, nil, nil, nil, nil, nil, - 1004, 1004, 31, nil, 1003, nil, nil, nil, 43, 43, - nil, nil, 1003, 31, nil, 34, 1003, nil, nil, 31, - nil, nil, nil, nil, nil, 31, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 1005, nil, nil, nil, - nil, nil, nil, nil, 1005, 31, nil, nil, 1003, nil, - nil, nil, nil, 1005, 1005, 34, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 34, 1004, nil, 1004, nil, - nil, 1004, 1004, nil, nil, nil, nil, nil, 1004, nil, - nil, nil, nil, nil, 1004, 1004, nil, nil, nil, nil, - nil, 1004, 1004, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 31, nil, nil, nil, 1004, nil, 1005, - nil, 1005, nil, nil, 1005, 1005, 34, nil, nil, nil, - nil, 1005, nil, nil, nil, nil, 34, 1005, 1005, nil, - nil, 31, 31, nil, 1005, 1005, nil, nil, 31, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 34, nil, nil, 34, nil, nil, - 1005, nil, nil, nil, 34, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 34, nil, nil, nil, 34, nil, - nil, nil, 31, nil, nil, nil, nil, 1004, nil, nil, - nil, nil, nil, nil, 43, 1004, nil, nil, nil, 1004, - nil, 31, 345, nil, nil, 34, nil, nil, 34, 34, - nil, 345, 34, nil, 31, nil, nil, nil, 34, 34, - nil, nil, nil, 34, nil, 34, nil, nil, nil, nil, - nil, 1004, 43, nil, nil, 43, nil, nil, nil, nil, - 1005, nil, nil, nil, nil, nil, nil, nil, 1005, 250, - nil, nil, 1005, nil, nil, nil, 43, nil, nil, 318, - 318, 318, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 366, 367, nil, 369, 370, nil, 372, nil, nil, - nil, nil, nil, 43, 1005, nil, nil, nil, nil, nil, - 43, nil, 318, 318, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 31, 31, nil, nil, nil, nil, nil, 34, nil, nil, - nil, nil, nil, 31, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 34, - nil, nil, nil, nil, 34, 34, nil, nil, nil, nil, - nil, nil, nil, 34, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 1006, nil, 1006, - nil, nil, 34, nil, nil, nil, nil, nil, nil, 345, - nil, nil, nil, nil, nil, nil, nil, 34, nil, nil, - 345, 34, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 43, nil, nil, - nil, nil, 43, nil, nil, nil, nil, nil, nil, nil, - nil, 43, nil, nil, nil, nil, 34, nil, nil, nil, - nil, nil, nil, nil, nil, 318, 448, 34, nil, 454, - 318, nil, nil, 34, nil, nil, nil, 1006, nil, 34, - nil, nil, nil, 454, nil, 1006, nil, nil, nil, 43, - nil, nil, nil, nil, 1006, 1006, 250, nil, nil, 34, - nil, nil, nil, 533, 534, 535, 536, 537, 538, 539, - 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, - 550, 551, 552, 553, 554, nil, nil, nil, nil, 555, - nil, 1008, nil, 1008, 43, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 43, 318, 318, nil, nil, nil, 43, nil, nil, - 1006, 318, 1006, nil, nil, 1006, 1006, 34, 318, nil, - nil, 318, 1006, nil, 318, 318, nil, 43, 1006, 1006, - nil, 1051, nil, nil, nil, 1006, 1006, nil, nil, nil, - nil, nil, nil, nil, nil, 34, 34, nil, nil, nil, - nil, nil, 34, nil, nil, nil, nil, nil, nil, nil, - nil, 1006, nil, nil, nil, nil, 608, nil, nil, nil, - nil, 1008, nil, nil, nil, nil, nil, nil, nil, 1008, - nil, nil, nil, nil, nil, nil, nil, nil, 1008, 1008, - nil, nil, nil, nil, nil, 43, 34, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 297, nil, - nil, nil, nil, nil, nil, 34, nil, nil, nil, nil, - nil, nil, nil, 43, 43, nil, nil, nil, 34, nil, - 43, nil, nil, 318, nil, nil, nil, nil, nil, nil, - nil, 1006, nil, nil, nil, nil, nil, nil, nil, 1006, - nil, nil, nil, 1006, 1008, nil, 1008, nil, nil, 1008, - 1008, nil, nil, nil, nil, nil, 1008, nil, 699, nil, - nil, nil, 1008, 1008, nil, nil, nil, nil, nil, 1008, - 1008, nil, nil, nil, nil, 1006, nil, nil, nil, nil, - 297, nil, nil, 43, nil, 318, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 1008, nil, nil, 699, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 318, nil, - 454, 454, 454, nil, 34, 34, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 34, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 367, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 318, - nil, 318, nil, 318, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 1008, nil, nil, nil, 318, - nil, nil, nil, 1008, nil, nil, nil, 1008, nil, 454, - nil, nil, 783, nil, 784, nil, nil, nil, nil, nil, - 318, nil, nil, 318, nil, 43, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 318, 318, nil, 1008, - nil, nil, nil, nil, nil, nil, nil, 318, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 318, - nil, 454, 318, nil, nil, nil, 839, nil, nil, 318, - 318, 454, 454, nil, nil, nil, 454, nil, 454, nil, - nil, nil, nil, nil, nil, nil, nil, 318, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 318, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 699, 699, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 318, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 318, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 318, nil, nil, - nil, nil, nil, nil, nil, 454, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 942, - 699, 945, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 454, - 454, 454, 454, nil, nil, nil, nil, nil, 1014, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 318, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 318, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 454, 699, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 318 ] - -racc_goto_check = [ - 74, 160, 94, 94, 199, 74, 77, 77, 31, 19, - 19, 117, 48, 19, 111, 95, 199, 39, 39, 39, - 114, 114, 77, 33, 74, 22, 121, 26, 26, 10, - 12, 26, 50, 75, 33, 10, 74, 74, 74, 137, - 233, 233, 23, 70, 86, 86, 13, 23, 116, 141, - 141, 46, 46, 17, 17, 234, 79, 79, 42, 42, - 24, 24, 97, 43, 74, 43, 206, 85, 19, 19, - 19, 19, 115, 59, 74, 74, 74, 81, 23, 29, - 7, 86, 86, 86, 29, 135, 26, 26, 26, 26, - 31, 81, 9, 148, 82, 148, 121, 53, 57, 57, - 63, 63, 20, 5, 66, 20, 23, 123, 93, 93, - 93, 58, 58, 58, 72, 29, 23, 32, 238, 20, - 36, 159, 159, 74, 71, 91, 91, 91, 131, 228, - 228, 28, 74, 98, 74, 98, 13, 67, 84, 2, - 151, 93, 93, 29, 60, 28, 242, 92, 92, 147, - 129, 92, 44, 239, 44, 35, 35, 45, 91, 45, - 36, 178, 153, 178, 188, 23, 154, 65, 65, 65, - 132, 6, 10, 5, 23, 57, 23, 63, 26, 26, - 176, 149, 163, 100, 203, 203, 193, 8, 242, 1, - 179, 179, 8, 3, 163, 26, 26, 94, 193, 97, - 179, 14, 29, 76, 76, 16, 194, 214, 39, 214, - 11, 29, 214, 29, 214, 18, 233, 74, 216, 216, - 21, 22, 22, 77, 100, 22, 151, 25, 177, 74, - 227, 227, 27, 47, 52, 74, 54, 62, 11, 22, - 80, 199, 87, 98, 98, 90, 96, 109, 33, 231, - 231, 231, 74, 110, 118, 242, 26, 120, 239, 23, - 124, 23, 130, 176, 23, 125, 126, 60, 176, 176, - 75, 23, 127, 2, 128, 203, 203, 23, 23, 217, - 217, 217, 217, 100, 133, 148, 116, 138, 144, 6, - 39, 39, 33, 100, 23, 85, 29, 159, 29, 39, - 145, 29, 152, 153, 234, 228, 31, 154, 29, 155, - 8, 91, 91, 98, 29, 29, 177, 177, 194, 8, - 149, 8, 156, 157, 94, 19, 194, 60, 158, 193, - 94, 29, 129, 74, 161, 162, 148, 74, 188, 164, - 123, 74, 74, 26, 72, 166, 19, 147, 86, 151, - 132, 131, 33, 72, 121, 53, 167, 170, 171, 238, - 74, 172, 173, 100, 26, 174, 70, 86, 181, 183, - 33, 184, 74, 185, 189, 23, 84, 31, 81, 23, - 81, 45, 93, 13, 23, 178, 74, 74, 35, 35, - 93, 11, 190, 57, 57, 63, 63, 196, 91, 91, - 33, 32, 197, 207, 208, 66, 82, 91, 7, 85, - 66, 121, 29, 211, 23, 31, 29, 212, 213, 215, - 9, 29, 218, 206, 77, 31, 11, 71, 23, 23, - 219, 5, 94, 141, 32, 220, 114, 221, 67, 94, - 222, 65, 123, 67, 10, 234, 44, 223, 33, 65, - 226, 29, 43, 232, 233, 59, 39, 81, 236, 237, - 31, 59, 95, 115, 32, 29, 29, 57, nil, 63, - 63, 17, nil, 32, 79, nil, 135, 57, nil, 63, - 63, nil, nil, 148, nil, 130, 148, nil, 5, 130, - 192, nil, 94, nil, nil, 32, 39, 192, nil, 98, - nil, 97, 36, nil, nil, 57, 39, 63, 63, nil, - 242, 11, nil, 57, 63, 63, 11, 233, 77, 233, - 8, 72, 85, nil, nil, nil, 217, nil, 217, 100, - 94, nil, nil, 121, nil, 159, nil, nil, nil, 81, - 81, 58, 24, 228, 81, nil, 81, nil, 58, nil, - 57, 57, 63, 63, nil, nil, nil, 20, 92, 234, - 11, 11, nil, nil, nil, nil, 94, 20, 20, nil, - 137, nil, 20, nil, 20, nil, 94, 39, nil, nil, - nil, nil, 74, 97, nil, 114, nil, 141, 141, 13, - 74, 148, 77, 28, 28, nil, 70, 86, 28, 74, - 28, 42, 77, 201, 94, 70, 86, nil, nil, 192, - 10, nil, 94, nil, 46, 39, nil, 192, nil, nil, - 74, 192, nil, 74, 23, 39, 117, nil, nil, nil, - 77, nil, nil, nil, 231, 231, 77, 231, 231, 58, - 231, 75, 32, nil, 74, 130, 130, 121, 93, 94, - nil, nil, nil, 192, nil, nil, nil, nil, nil, nil, - 39, 29, 23, nil, nil, 23, 121, 77, nil, 114, - nil, 74, nil, nil, nil, 77, nil, 22, 74, nil, - nil, 12, nil, nil, nil, nil, 23, 22, 22, 93, - nil, nil, 22, 81, 22, 116, 111, nil, nil, 29, - 75, nil, 29, nil, nil, nil, nil, nil, nil, 233, - nil, nil, nil, 23, 17, nil, 23, 79, nil, nil, - 23, 20, 91, 29, 160, 10, 23, 23, nil, 32, - nil, 23, 48, 23, 32, 32, 141, 81, 81, 81, - 81, 26, 77, nil, nil, nil, 94, 28, nil, 94, - 29, 19, 50, 29, nil, nil, nil, 29, 93, nil, - 233, nil, nil, 29, 29, nil, nil, 74, 29, 26, - 29, nil, nil, 70, 86, nil, nil, nil, 74, nil, - nil, 202, nil, 202, 70, 86, 201, nil, 201, nil, - nil, nil, nil, 91, 11, nil, nil, 11, nil, 30, - nil, nil, nil, nil, 30, 74, nil, 32, 32, 32, - 74, nil, nil, 10, nil, 142, 114, nil, 142, 74, - 81, 30, 231, 231, 231, 231, 130, 130, 93, nil, - nil, 30, 30, 30, nil, 30, 30, 30, 39, nil, - nil, 22, 10, nil, nil, nil, nil, 23, nil, nil, - 32, nil, 23, 19, nil, nil, nil, 74, 8, nil, - nil, 23, nil, 30, nil, 8, nil, nil, 30, 30, - nil, 26, 30, 30, 30, 30, nil, nil, nil, nil, - 23, nil, nil, nil, 29, nil, nil, nil, 74, 29, - 74, nil, nil, nil, nil, nil, nil, nil, 29, 23, - nil, nil, 74, nil, 199, nil, nil, 233, nil, 31, - 233, nil, nil, nil, nil, nil, nil, 29, nil, 74, - nil, nil, 30, nil, nil, 74, nil, 30, 30, 30, - 30, 30, nil, 30, nil, nil, 29, nil, nil, nil, - nil, nil, nil, nil, 23, 74, 134, 121, nil, 74, - nil, nil, nil, nil, nil, nil, 86, nil, 231, 202, - 202, 23, nil, nil, 201, 201, nil, 23, nil, 202, - nil, nil, nil, nil, 201, 202, nil, nil, 74, 11, - 201, 29, nil, nil, nil, nil, 74, 23, nil, nil, - nil, 23, nil, 11, 201, 74, 74, nil, 29, 57, - nil, 63, 63, nil, 29, 202, nil, nil, nil, nil, - 201, 142, nil, 74, nil, 233, 30, 30, 30, 30, - 30, 30, 30, 146, 29, 146, 74, nil, 30, nil, - nil, 11, 19, 86, 30, 30, 30, 30, nil, nil, - nil, 74, 74, nil, nil, nil, nil, 175, 74, 175, - 26, 30, 63, nil, nil, 23, nil, nil, 33, nil, - nil, 74, nil, 74, nil, nil, 74, 74, nil, nil, - 199, nil, nil, 74, nil, nil, 11, nil, nil, 74, - 74, nil, nil, 23, 23, nil, 74, 74, nil, nil, - 23, nil, 29, 11, 143, 143, 143, 30, 94, nil, - nil, nil, nil, nil, 30, 30, 88, 88, 74, 39, - nil, 74, 74, 30, nil, 86, nil, nil, nil, 11, - 29, 29, nil, nil, 77, nil, nil, 29, nil, nil, - nil, nil, 30, nil, nil, nil, 30, 175, nil, nil, - 30, 30, nil, nil, 134, 175, nil, 134, nil, 134, - nil, nil, nil, 23, 88, nil, nil, 235, nil, 30, - 19, 19, nil, nil, nil, 34, nil, nil, nil, nil, - 34, 30, nil, nil, 77, nil, nil, nil, 26, 26, - nil, nil, nil, nil, 30, 30, 30, nil, nil, nil, - 29, nil, 74, nil, nil, nil, nil, nil, nil, nil, - 74, 34, 34, 34, 74, 30, 142, nil, nil, 142, - nil, nil, 142, 146, 142, 11, nil, nil, nil, nil, - 175, nil, 11, nil, nil, 175, 175, nil, nil, 34, - nil, nil, nil, 74, nil, nil, 74, nil, 175, 34, - 34, 34, nil, 143, 143, 143, 143, 41, 143, nil, - nil, nil, 134, nil, 134, nil, 134, nil, 134, nil, - nil, nil, nil, 101, 146, 101, 146, nil, 146, nil, - 30, 175, nil, nil, nil, 23, nil, 41, nil, nil, - nil, nil, 134, nil, nil, 11, nil, nil, 34, nil, - nil, nil, nil, nil, nil, nil, nil, 34, 37, 34, - nil, nil, nil, 37, 143, 143, 143, 143, nil, nil, - 30, nil, 29, nil, nil, nil, nil, 142, 143, 142, - 30, 142, nil, 142, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 37, 37, 37, nil, nil, 88, - 88, nil, nil, 88, 88, nil, nil, 142, nil, nil, - nil, nil, 235, 101, nil, 235, nil, nil, 235, nil, - 235, 101, 37, nil, nil, nil, nil, nil, nil, nil, - 101, 101, 37, 37, 37, nil, nil, nil, nil, nil, - nil, 30, 34, nil, 34, nil, nil, 34, nil, 30, - nil, 30, nil, nil, 34, nil, nil, nil, 30, nil, - 34, 34, nil, nil, nil, nil, nil, 11, nil, nil, - 68, nil, nil, nil, 146, nil, 146, 34, nil, 30, - nil, 37, 30, nil, nil, nil, nil, nil, nil, 30, - 37, nil, 37, nil, nil, nil, 101, nil, 101, 30, - 146, 101, 101, 30, nil, nil, nil, nil, 101, nil, - nil, nil, nil, nil, 101, 101, nil, nil, nil, nil, - 88, 101, 101, 235, nil, 235, nil, 235, nil, 235, - 30, nil, nil, 30, 30, nil, nil, 30, nil, nil, - nil, nil, nil, 30, 30, nil, 68, 101, 30, nil, - 30, nil, nil, 235, nil, nil, nil, nil, 34, nil, - nil, nil, 34, nil, nil, nil, 34, 34, nil, nil, - 68, nil, nil, nil, nil, 37, nil, 37, nil, 146, - 37, 146, nil, 146, nil, 34, nil, 37, nil, nil, - nil, nil, nil, 37, 37, nil, nil, 34, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 38, 146, - 37, 34, 34, 38, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 30, 101, nil, nil, - nil, nil, nil, nil, nil, 101, 41, 30, nil, 101, - nil, nil, 30, nil, 38, 38, 38, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 41, 41, nil, 30, 41, nil, nil, nil, 30, - 30, 101, 38, nil, nil, nil, nil, 88, 30, 88, - nil, nil, 38, 38, 38, nil, nil, nil, nil, nil, - nil, 37, nil, nil, nil, 37, nil, 30, nil, 37, - 37, nil, nil, nil, nil, nil, nil, nil, nil, 68, - nil, nil, 30, nil, nil, nil, 30, nil, 37, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 37, 38, nil, nil, nil, nil, nil, nil, nil, 41, - 38, nil, 38, nil, 37, 37, nil, nil, 68, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 88, nil, - nil, 30, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 30, nil, nil, nil, nil, nil, 30, nil, - nil, nil, nil, nil, 30, nil, nil, 68, nil, nil, - nil, nil, nil, nil, nil, 68, nil, 68, nil, nil, - nil, 68, nil, nil, 30, nil, nil, 34, 30, nil, - nil, nil, nil, nil, nil, 34, nil, 68, nil, nil, - nil, nil, nil, 68, 34, 38, nil, 38, nil, nil, - 38, nil, nil, nil, nil, nil, nil, 38, 41, nil, - nil, nil, nil, 38, 38, 34, nil, nil, 34, 88, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 38, nil, nil, nil, nil, nil, nil, nil, nil, 34, - nil, nil, 30, 89, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 30, nil, nil, nil, 88, - nil, 88, nil, nil, nil, nil, 34, nil, nil, 34, - 30, 30, nil, 34, nil, nil, nil, 30, nil, 34, - 34, nil, nil, nil, 34, nil, 34, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 37, 38, nil, nil, nil, 38, 88, nil, 37, 38, - 38, 30, nil, nil, nil, 68, nil, 37, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 30, 38, nil, - 30, nil, nil, nil, nil, nil, nil, nil, 37, nil, - 38, 37, 41, 30, nil, nil, nil, nil, nil, nil, - nil, nil, 34, nil, 38, 38, nil, nil, nil, nil, - nil, nil, 37, 34, 88, nil, nil, nil, 88, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 41, nil, 89, 89, nil, nil, 37, - 34, nil, 37, nil, nil, 34, 37, nil, nil, nil, - nil, nil, 37, 37, 34, nil, nil, 37, nil, 37, - nil, nil, nil, nil, nil, nil, 41, nil, nil, nil, - nil, nil, nil, 34, nil, nil, 88, nil, nil, nil, - nil, nil, 41, nil, nil, nil, nil, nil, nil, 30, - 30, nil, 34, nil, nil, nil, 41, nil, nil, nil, - nil, nil, 30, nil, nil, 41, nil, nil, nil, nil, - nil, 41, nil, nil, nil, nil, nil, nil, nil, 68, - nil, nil, nil, nil, nil, nil, nil, 41, nil, nil, - nil, nil, nil, nil, nil, 37, nil, 34, 89, nil, - 68, 89, nil, nil, 89, 89, 37, nil, nil, nil, - nil, 68, nil, nil, 34, nil, nil, nil, nil, nil, - 34, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 37, nil, nil, nil, nil, 37, nil, - 34, nil, nil, 41, 34, nil, nil, 37, nil, nil, - nil, nil, nil, 88, nil, nil, nil, 41, nil, nil, - 38, nil, nil, nil, nil, nil, 37, nil, 38, nil, - nil, nil, nil, nil, nil, nil, nil, 38, nil, nil, - nil, nil, nil, nil, nil, 37, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 38, nil, - nil, 38, nil, nil, nil, nil, nil, nil, 34, nil, - nil, nil, nil, 89, nil, nil, nil, nil, nil, nil, - nil, 34, 38, nil, nil, nil, nil, nil, nil, 38, - 37, nil, nil, nil, 41, 41, 34, 34, nil, nil, - nil, nil, nil, 34, nil, nil, nil, 37, nil, 38, - 61, nil, 38, 37, nil, 61, 38, nil, nil, nil, - nil, nil, 38, 38, nil, nil, 68, 38, nil, 38, - nil, nil, 61, 37, nil, 89, nil, 37, nil, nil, - 41, nil, 61, 61, 61, nil, 61, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 34, nil, nil, 34, nil, nil, nil, - nil, nil, nil, nil, 61, nil, nil, nil, nil, 61, - 61, 41, nil, 61, nil, nil, 41, 41, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 37, 68, 68, 68, 38, nil, nil, nil, 89, - nil, 89, nil, 89, 37, 102, 38, 102, 68, nil, - nil, nil, nil, nil, nil, nil, 68, nil, nil, 37, - 37, nil, nil, 61, nil, 41, 37, nil, 61, 61, - 61, 61, 61, 38, 61, nil, nil, nil, 38, nil, - 89, nil, nil, 89, nil, nil, nil, 38, nil, 41, - 41, 41, nil, nil, nil, nil, 89, nil, nil, 41, - nil, nil, nil, nil, nil, nil, 38, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 34, nil, - nil, nil, nil, nil, nil, 38, 37, nil, nil, 37, - nil, nil, 41, nil, nil, 102, nil, nil, nil, 89, - nil, nil, nil, 102, nil, nil, nil, nil, nil, 89, - 89, nil, 102, 102, nil, nil, nil, 61, 61, 61, - 61, 61, 61, 61, nil, nil, nil, 89, nil, 61, - 38, nil, nil, nil, nil, 61, 61, 61, 61, nil, - nil, nil, nil, 89, nil, nil, nil, 38, nil, nil, - nil, nil, 61, 38, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 38, nil, nil, nil, 38, 102, 89, - 102, nil, nil, 102, 102, nil, nil, nil, nil, nil, - 102, 89, nil, nil, nil, nil, 102, 102, 61, nil, - nil, nil, nil, 102, 102, 61, 61, nil, nil, nil, - nil, 37, nil, nil, 61, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 102, - nil, nil, nil, 61, nil, nil, nil, 61, nil, nil, - nil, 38, 61, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 38, nil, 103, 89, 103, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 38, - 38, nil, 61, nil, nil, nil, 38, nil, nil, nil, - nil, nil, nil, nil, nil, 61, 61, 61, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 61, nil, nil, 102, - nil, nil, nil, nil, nil, nil, nil, 102, nil, nil, - nil, 102, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 38, nil, nil, 38, - nil, nil, nil, nil, 64, 89, 103, nil, nil, 64, - nil, nil, nil, 102, 103, nil, nil, nil, nil, nil, - nil, nil, nil, 103, 103, 89, 64, nil, nil, nil, - nil, 61, nil, nil, nil, nil, 64, 64, 64, nil, - 64, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 64, nil, - nil, 61, nil, 64, 64, nil, nil, 64, nil, nil, - nil, 61, 73, nil, 104, nil, 104, 73, nil, 103, - nil, 103, nil, nil, 103, 103, nil, nil, nil, nil, - nil, 103, nil, nil, nil, nil, 73, 103, 103, nil, - nil, nil, nil, nil, 103, 103, nil, nil, 73, 73, - 73, 38, nil, nil, nil, nil, nil, 64, nil, nil, - nil, nil, 64, 64, 64, 64, 64, nil, 64, nil, - 103, nil, 61, nil, nil, nil, 73, nil, nil, nil, - nil, nil, 61, nil, nil, nil, 73, 73, 73, nil, - 105, nil, 105, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 104, nil, nil, nil, nil, nil, - 61, nil, 104, 61, nil, nil, nil, nil, nil, nil, - 61, 104, 104, nil, nil, nil, nil, nil, nil, nil, - 61, nil, nil, nil, 61, 73, nil, nil, nil, nil, - nil, nil, nil, nil, 73, nil, 73, nil, nil, nil, - 103, 64, 64, 64, 64, 64, 64, 64, 103, nil, - nil, 61, 103, 64, 61, 61, nil, nil, 61, 64, - 64, 64, 64, nil, 61, 61, nil, nil, nil, 61, - 105, 61, nil, nil, nil, nil, 64, 104, 105, 104, - nil, nil, 104, 104, 103, nil, nil, 105, 105, 104, - nil, nil, nil, nil, nil, 104, 104, nil, nil, nil, - nil, nil, 104, 104, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 73, - nil, nil, 64, nil, nil, nil, nil, nil, 104, 64, - 64, 73, nil, nil, nil, nil, nil, 73, 64, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 105, 73, 105, nil, 64, 105, 105, - nil, 64, nil, 61, nil, 105, 64, nil, nil, nil, - nil, 105, 105, 106, nil, 106, nil, nil, 105, 105, - nil, nil, nil, nil, nil, 61, nil, nil, nil, nil, - 61, 61, nil, nil, nil, nil, 64, nil, nil, 61, - nil, nil, nil, nil, 105, nil, nil, nil, 104, 64, - 64, 64, nil, nil, nil, nil, 104, nil, 61, nil, - 104, nil, nil, nil, nil, nil, 107, nil, 107, nil, - 64, nil, nil, 61, nil, 73, nil, 61, nil, 73, - nil, nil, nil, 73, 73, nil, nil, nil, nil, nil, - nil, nil, 104, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 73, 106, nil, nil, nil, nil, nil, nil, - nil, 106, nil, nil, 73, nil, nil, nil, nil, nil, - 106, 106, 61, nil, 105, nil, nil, nil, 73, 73, - nil, nil, 105, 61, nil, 64, 105, nil, nil, 61, - nil, nil, nil, nil, nil, 61, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 107, nil, nil, nil, - nil, nil, nil, nil, 107, 61, nil, nil, 105, nil, - nil, nil, nil, 107, 107, 64, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 64, 106, nil, 106, nil, - nil, 106, 106, nil, nil, nil, nil, nil, 106, nil, - nil, nil, nil, nil, 106, 106, nil, nil, nil, nil, - nil, 106, 106, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 61, nil, nil, nil, 106, nil, 107, - nil, 107, nil, nil, 107, 107, 64, nil, nil, nil, - nil, 107, nil, nil, nil, nil, 64, 107, 107, nil, - nil, 61, 61, nil, 107, 107, nil, nil, 61, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 64, nil, nil, 64, nil, nil, - 107, nil, nil, nil, 64, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 64, nil, nil, nil, 64, nil, - nil, nil, 61, nil, nil, nil, nil, 106, nil, nil, - nil, nil, nil, nil, 73, 106, nil, nil, nil, 106, - nil, 61, 73, nil, nil, 64, nil, nil, 64, 64, - nil, 73, 64, nil, 61, nil, nil, nil, 64, 64, - nil, nil, nil, 64, nil, 64, nil, nil, nil, nil, - nil, 106, 73, nil, nil, 73, nil, nil, nil, nil, - 107, nil, nil, nil, nil, nil, nil, nil, 107, 40, - nil, nil, 107, nil, nil, nil, 73, nil, nil, 40, - 40, 40, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 40, 40, nil, 40, 40, nil, 40, nil, nil, - nil, nil, nil, 73, 107, nil, nil, nil, nil, nil, - 73, nil, 40, 40, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 61, 61, nil, nil, nil, nil, nil, 64, nil, nil, - nil, nil, nil, 61, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 64, - nil, nil, nil, nil, 64, 64, nil, nil, nil, nil, - nil, nil, nil, 64, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 108, nil, 108, - nil, nil, 64, nil, nil, nil, nil, nil, nil, 73, - nil, nil, nil, nil, nil, nil, nil, 64, nil, nil, - 73, 64, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 73, nil, nil, - nil, nil, 73, nil, nil, nil, nil, nil, nil, nil, - nil, 73, nil, nil, nil, nil, 64, nil, nil, nil, - nil, nil, nil, nil, nil, 40, 40, 64, nil, 40, - 40, nil, nil, 64, nil, nil, nil, 108, nil, 64, - nil, nil, nil, 40, nil, 108, nil, nil, nil, 73, - nil, nil, nil, nil, 108, 108, 40, nil, nil, 64, - nil, nil, nil, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, - 40, 40, 40, 40, 40, nil, nil, nil, nil, 40, - nil, 113, nil, 113, 73, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 73, 40, 40, nil, nil, nil, 73, nil, nil, - 108, 40, 108, nil, nil, 108, 108, 64, 40, nil, - nil, 40, 108, nil, 40, 40, nil, 73, 108, 108, - nil, 73, nil, nil, nil, 108, 108, nil, nil, nil, - nil, nil, nil, nil, nil, 64, 64, nil, nil, nil, - nil, nil, 64, nil, nil, nil, nil, nil, nil, nil, - nil, 108, nil, nil, nil, nil, 40, nil, nil, nil, - nil, 113, nil, nil, nil, nil, nil, nil, nil, 113, - nil, nil, nil, nil, nil, nil, nil, nil, 113, 113, - nil, nil, nil, nil, nil, 73, 64, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 73, nil, - nil, nil, nil, nil, nil, 64, nil, nil, nil, nil, - nil, nil, nil, 73, 73, nil, nil, nil, 64, nil, - 73, nil, nil, 40, nil, nil, nil, nil, nil, nil, - nil, 108, nil, nil, nil, nil, nil, nil, nil, 108, - nil, nil, nil, 108, 113, nil, 113, nil, nil, 113, - 113, nil, nil, nil, nil, nil, 113, nil, 40, nil, - nil, nil, 113, 113, nil, nil, nil, nil, nil, 113, - 113, nil, nil, nil, nil, 108, nil, nil, nil, nil, - 73, nil, nil, 73, nil, 40, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 113, nil, nil, 40, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 40, nil, - 40, 40, 40, nil, 64, 64, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 64, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 40, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 40, - nil, 40, nil, 40, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 113, nil, nil, nil, 40, - nil, nil, nil, 113, nil, nil, nil, 113, nil, 40, - nil, nil, 40, nil, 40, nil, nil, nil, nil, nil, - 40, nil, nil, 40, nil, 73, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 40, 40, nil, 113, - nil, nil, nil, nil, nil, nil, nil, 40, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 40, - nil, 40, 40, nil, nil, nil, 40, nil, nil, 40, - 40, 40, 40, nil, nil, nil, 40, nil, 40, nil, - nil, nil, nil, nil, nil, nil, nil, 40, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 40, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 40, 40, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 40, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 40, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 40, nil, nil, - nil, nil, nil, nil, nil, 40, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 40, - 40, 40, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 40, - 40, 40, 40, nil, nil, nil, nil, nil, 40, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 40, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 40, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 40, 40, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 40 ] - -racc_goto_pointer = [ - nil, 189, 137, 193, nil, 98, 164, 75, 185, 83, - -202, 172, -444, -655, -656, nil, -379, 43, 204, -62, - -119, 144, 1, 40, -160, 7, -44, 95, -93, 77, - 797, -217, -338, 5, 1163, 136, -353, 1296, 1546, -17, - 3355, 1224, -198, -467, -590, -733, -22, -393, -14, nil, - 6, nil, 208, 68, -320, nil, nil, -128, 80, -233, - -425, 2218, -325, -126, 2662, 133, 66, 99, 1170, nil, - 4, 84, -248, 2740, -2, -370, 126, -4, nil, 46, - -192, -147, 46, nil, -235, -446, 5, 191, 1087, 1745, - 178, 91, -230, 74, -29, -292, -313, -259, -441, nil, - -391, 373, 1435, 1686, 1854, 1930, 2123, 2176, 2607, 221, - 185, -55, nil, 2751, -365, -717, -343, -618, 178, nil, - -150, 21, nil, 87, 195, -110, -377, -542, -135, -730, - -235, -369, -711, -596, 43, -622, nil, -457, -616, nil, - nil, -431, 108, 73, -733, -603, 310, -754, -618, -576, - nil, -677, -743, -883, -879, -101, -494, 238, -319, -113, - -26, -596, -596, -376, 38, nil, 34, 44, nil, nil, - -392, -680, -753, -882, -856, 157, -800, -752, -729, -878, - nil, -696, nil, -696, -608, -606, nil, nil, -817, -607, - -590, nil, -585, -877, -876, nil, -687, -682, nil, -86, - nil, -104, -109, -813, nil, nil, -587, -299, -457, nil, - nil, 325, 324, 324, -453, 324, -197, -134, 326, 333, - 337, -216, -494, -207, nil, nil, -194, -124, -105, nil, - nil, -235, -258, -194, -656, 254, -249, -639, -595, -951, - nil, nil, -430 ] - -racc_goto_default = [ - nil, nil, nil, nil, 5, nil, 6, 392, 336, nil, - nil, 474, nil, 914, nil, 333, 334, nil, nil, nil, - 13, 14, 22, 248, nil, nil, 16, nil, 442, 249, - 365, nil, nil, 641, 252, nil, nil, 253, 247, 27, - 25, 520, nil, nil, nil, nil, nil, nil, nil, 387, - 144, 26, nil, nil, nil, 28, 29, 778, nil, nil, - nil, 353, nil, 30, 350, 456, 37, nil, nil, 39, - 42, 41, nil, 244, 245, 404, nil, 465, 143, 87, - nil, 447, 103, 51, nil, 700, 54, 284, 858, 324, - nil, 457, nil, 458, 470, 483, 690, 573, 322, 308, - 325, 55, 56, 57, 58, 59, 60, 61, 62, 63, - nil, 309, 69, 70, nil, nil, nil, nil, nil, 77, - nil, 623, 78, 231, nil, nil, nil, nil, nil, 721, - 495, nil, 722, 723, 481, 476, 477, nil, 1169, 717, - 1018, nil, 482, nil, nil, nil, 484, nil, 486, nil, - 902, nil, nil, nil, 493, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 469, nil, nil, 757, 749, - nil, nil, nil, nil, nil, 1151, nil, 971, 1076, 973, - 974, 978, 975, 976, nil, nil, 977, 979, nil, nil, - nil, 1075, 1077, 983, nil, 985, 986, 987, 988, nil, - 992, 478, 504, 994, 995, 996, 113, nil, nil, 86, - 88, 89, nil, nil, nil, nil, nil, 651, nil, nil, - nil, nil, nil, nil, 99, 100, nil, 232, 868, 235, - 480, nil, 485, 876, 498, 500, 501, 1029, 505, 1030, - 508, 511, 328 ] - -racc_reduce_table = [ - 0, 0, :racc_error, - 0, 150, :_reduce_1, - 2, 148, :_reduce_2, - 2, 149, :_reduce_3, - 0, 151, :_reduce_4, - 1, 151, :_reduce_5, - 3, 151, :_reduce_6, - 2, 151, :_reduce_7, - 1, 153, :_reduce_none, - 2, 153, :_reduce_9, - 3, 156, :_reduce_10, - 4, 157, :_reduce_11, - 2, 158, :_reduce_12, - 0, 162, :_reduce_13, - 1, 162, :_reduce_14, - 3, 162, :_reduce_15, - 2, 162, :_reduce_16, - 1, 163, :_reduce_none, - 2, 163, :_reduce_18, - 0, 174, :_reduce_19, - 4, 155, :_reduce_20, - 3, 155, :_reduce_21, - 3, 155, :_reduce_22, - 3, 155, :_reduce_23, - 2, 155, :_reduce_24, - 3, 155, :_reduce_25, - 3, 155, :_reduce_26, - 3, 155, :_reduce_27, - 3, 155, :_reduce_28, - 3, 155, :_reduce_29, - 4, 155, :_reduce_30, - 1, 155, :_reduce_none, - 3, 155, :_reduce_32, - 3, 155, :_reduce_33, - 5, 155, :_reduce_34, - 3, 155, :_reduce_35, - 1, 155, :_reduce_none, - 3, 167, :_reduce_37, - 3, 167, :_reduce_38, - 6, 167, :_reduce_39, - 5, 167, :_reduce_40, - 5, 167, :_reduce_41, - 5, 167, :_reduce_42, - 5, 167, :_reduce_43, - 4, 167, :_reduce_44, - 4, 167, :_reduce_45, - 3, 167, :_reduce_46, - 1, 183, :_reduce_none, - 3, 183, :_reduce_48, - 3, 183, :_reduce_49, - 1, 175, :_reduce_none, - 3, 175, :_reduce_51, - 1, 175, :_reduce_none, - 1, 173, :_reduce_none, - 3, 173, :_reduce_54, - 3, 173, :_reduce_55, - 3, 173, :_reduce_56, - 2, 173, :_reduce_57, - 6, 173, :_reduce_58, - 6, 173, :_reduce_59, - 1, 173, :_reduce_none, - 1, 166, :_reduce_none, - 0, 196, :_reduce_62, - 3, 193, :_reduce_63, - 1, 195, :_reduce_64, - 2, 181, :_reduce_65, - 0, 201, :_reduce_66, - 5, 184, :_reduce_67, - 1, 169, :_reduce_none, - 1, 169, :_reduce_none, - 1, 202, :_reduce_none, - 4, 202, :_reduce_71, - 0, 209, :_reduce_72, - 4, 206, :_reduce_73, - 1, 208, :_reduce_none, - 2, 186, :_reduce_75, - 3, 186, :_reduce_76, - 4, 186, :_reduce_77, - 5, 186, :_reduce_78, - 4, 186, :_reduce_79, - 5, 186, :_reduce_80, - 6, 186, :_reduce_81, - 2, 186, :_reduce_82, - 2, 186, :_reduce_83, - 2, 186, :_reduce_84, - 2, 186, :_reduce_85, - 2, 186, :_reduce_86, - 1, 168, :_reduce_87, - 3, 168, :_reduce_88, - 1, 214, :_reduce_89, - 3, 214, :_reduce_90, - 1, 213, :_reduce_none, - 2, 213, :_reduce_92, - 3, 213, :_reduce_93, - 5, 213, :_reduce_94, - 2, 213, :_reduce_95, - 4, 213, :_reduce_96, - 2, 213, :_reduce_97, - 4, 213, :_reduce_98, - 1, 213, :_reduce_99, - 3, 213, :_reduce_100, - 1, 217, :_reduce_none, - 3, 217, :_reduce_102, - 2, 216, :_reduce_103, - 3, 216, :_reduce_104, - 1, 219, :_reduce_105, - 3, 219, :_reduce_106, - 1, 218, :_reduce_107, - 1, 218, :_reduce_108, - 4, 218, :_reduce_109, - 3, 218, :_reduce_110, - 3, 218, :_reduce_111, - 3, 218, :_reduce_112, - 3, 218, :_reduce_113, - 2, 218, :_reduce_114, - 1, 218, :_reduce_115, - 1, 170, :_reduce_116, - 1, 170, :_reduce_117, - 4, 170, :_reduce_118, - 3, 170, :_reduce_119, - 3, 170, :_reduce_120, - 3, 170, :_reduce_121, - 3, 170, :_reduce_122, - 2, 170, :_reduce_123, - 1, 170, :_reduce_124, - 1, 222, :_reduce_125, - 1, 222, :_reduce_none, - 2, 223, :_reduce_127, - 1, 223, :_reduce_128, - 3, 223, :_reduce_129, - 1, 197, :_reduce_none, - 1, 197, :_reduce_none, - 1, 197, :_reduce_none, - 1, 197, :_reduce_none, - 1, 197, :_reduce_none, - 1, 164, :_reduce_135, - 1, 164, :_reduce_none, - 1, 165, :_reduce_137, - 0, 227, :_reduce_138, - 4, 165, :_reduce_139, - 1, 224, :_reduce_none, - 1, 224, :_reduce_none, - 1, 224, :_reduce_none, - 1, 224, :_reduce_none, - 1, 224, :_reduce_none, - 1, 224, :_reduce_none, - 1, 224, :_reduce_none, - 1, 224, :_reduce_none, - 1, 224, :_reduce_none, - 1, 224, :_reduce_none, - 1, 224, :_reduce_none, - 1, 224, :_reduce_none, - 1, 224, :_reduce_none, - 1, 224, :_reduce_none, - 1, 224, :_reduce_none, - 1, 224, :_reduce_none, - 1, 224, :_reduce_none, - 1, 224, :_reduce_none, - 1, 224, :_reduce_none, - 1, 224, :_reduce_none, - 1, 224, :_reduce_none, - 1, 224, :_reduce_none, - 1, 224, :_reduce_none, - 1, 224, :_reduce_none, - 1, 224, :_reduce_none, - 1, 224, :_reduce_none, - 1, 224, :_reduce_none, - 1, 224, :_reduce_none, - 1, 224, :_reduce_none, - 1, 224, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 1, 225, :_reduce_none, - 3, 187, :_reduce_211, - 3, 187, :_reduce_212, - 6, 187, :_reduce_213, - 5, 187, :_reduce_214, - 5, 187, :_reduce_215, - 5, 187, :_reduce_216, - 5, 187, :_reduce_217, - 4, 187, :_reduce_218, - 3, 187, :_reduce_219, - 3, 187, :_reduce_220, - 3, 187, :_reduce_221, - 2, 187, :_reduce_222, - 2, 187, :_reduce_223, - 2, 187, :_reduce_224, - 2, 187, :_reduce_225, - 3, 187, :_reduce_226, - 3, 187, :_reduce_227, - 3, 187, :_reduce_228, - 3, 187, :_reduce_229, - 3, 187, :_reduce_230, - 3, 187, :_reduce_231, - 4, 187, :_reduce_232, - 2, 187, :_reduce_233, - 2, 187, :_reduce_234, - 3, 187, :_reduce_235, - 3, 187, :_reduce_236, - 3, 187, :_reduce_237, - 3, 187, :_reduce_238, - 1, 187, :_reduce_none, - 3, 187, :_reduce_240, - 3, 187, :_reduce_241, - 3, 187, :_reduce_242, - 3, 187, :_reduce_243, - 3, 187, :_reduce_244, - 2, 187, :_reduce_245, - 2, 187, :_reduce_246, - 3, 187, :_reduce_247, - 3, 187, :_reduce_248, - 3, 187, :_reduce_249, - 3, 187, :_reduce_250, - 4, 187, :_reduce_251, - 6, 187, :_reduce_252, - 4, 187, :_reduce_253, - 4, 187, :_reduce_254, - 1, 187, :_reduce_none, - 1, 232, :_reduce_none, - 3, 232, :_reduce_257, - 3, 232, :_reduce_258, - 1, 234, :_reduce_none, - 1, 234, :_reduce_none, - 1, 234, :_reduce_none, - 1, 234, :_reduce_none, - 3, 230, :_reduce_263, - 3, 230, :_reduce_264, - 1, 231, :_reduce_265, - 1, 236, :_reduce_none, - 1, 237, :_reduce_none, - 2, 237, :_reduce_none, - 4, 237, :_reduce_269, - 2, 237, :_reduce_270, - 1, 228, :_reduce_none, - 3, 228, :_reduce_272, - 3, 241, :_reduce_273, - 5, 241, :_reduce_274, - 3, 241, :_reduce_275, - 0, 243, :_reduce_276, - 1, 243, :_reduce_none, - 0, 178, :_reduce_278, - 1, 178, :_reduce_none, - 2, 178, :_reduce_none, - 4, 178, :_reduce_281, - 2, 178, :_reduce_282, - 1, 212, :_reduce_283, - 2, 212, :_reduce_284, - 2, 212, :_reduce_285, - 4, 212, :_reduce_286, - 1, 212, :_reduce_287, - 0, 246, :_reduce_288, - 2, 205, :_reduce_289, - 2, 245, :_reduce_290, - 1, 245, :_reduce_291, - 2, 244, :_reduce_292, - 0, 244, :_reduce_293, - 1, 238, :_reduce_294, - 1, 238, :_reduce_none, - 3, 238, :_reduce_296, - 3, 238, :_reduce_297, - 2, 247, :_reduce_298, - 1, 247, :_reduce_299, - 1, 172, :_reduce_300, - 1, 172, :_reduce_none, - 3, 171, :_reduce_302, - 4, 171, :_reduce_303, - 2, 171, :_reduce_304, - 1, 233, :_reduce_none, - 1, 233, :_reduce_none, - 1, 233, :_reduce_none, - 1, 233, :_reduce_none, - 1, 233, :_reduce_none, - 1, 233, :_reduce_none, - 1, 233, :_reduce_none, - 1, 233, :_reduce_none, - 1, 233, :_reduce_none, - 1, 233, :_reduce_none, - 1, 233, :_reduce_315, - 0, 271, :_reduce_316, - 4, 233, :_reduce_317, - 0, 272, :_reduce_318, - 4, 233, :_reduce_319, - 3, 233, :_reduce_320, - 3, 233, :_reduce_321, - 2, 233, :_reduce_322, - 3, 233, :_reduce_323, - 3, 233, :_reduce_324, - 1, 233, :_reduce_325, - 4, 233, :_reduce_326, - 3, 233, :_reduce_327, - 1, 233, :_reduce_328, - 6, 233, :_reduce_329, - 4, 233, :_reduce_330, - 3, 233, :_reduce_331, - 2, 233, :_reduce_332, - 1, 233, :_reduce_none, - 2, 233, :_reduce_334, - 1, 233, :_reduce_none, - 6, 233, :_reduce_336, - 6, 233, :_reduce_337, - 4, 233, :_reduce_338, - 4, 233, :_reduce_339, - 5, 233, :_reduce_340, - 4, 233, :_reduce_341, - 5, 233, :_reduce_342, - 6, 233, :_reduce_343, - 0, 273, :_reduce_344, - 6, 233, :_reduce_345, - 0, 274, :_reduce_346, - 7, 233, :_reduce_347, - 0, 275, :_reduce_348, - 5, 233, :_reduce_349, - 4, 233, :_reduce_350, - 4, 233, :_reduce_351, - 1, 233, :_reduce_352, - 1, 233, :_reduce_353, - 1, 233, :_reduce_354, - 1, 233, :_reduce_355, - 1, 177, :_reduce_none, - 1, 266, :_reduce_357, - 1, 269, :_reduce_358, - 1, 198, :_reduce_359, - 1, 211, :_reduce_360, - 1, 261, :_reduce_none, - 1, 261, :_reduce_none, - 2, 261, :_reduce_363, - 1, 194, :_reduce_none, - 1, 194, :_reduce_none, - 1, 262, :_reduce_none, - 5, 262, :_reduce_367, - 1, 160, :_reduce_none, - 2, 160, :_reduce_369, - 1, 265, :_reduce_none, - 1, 265, :_reduce_none, - 1, 276, :_reduce_372, - 3, 276, :_reduce_373, - 1, 279, :_reduce_374, - 3, 279, :_reduce_375, - 1, 278, :_reduce_none, - 3, 278, :_reduce_377, - 5, 278, :_reduce_378, - 1, 278, :_reduce_379, - 3, 278, :_reduce_380, - 2, 280, :_reduce_381, - 1, 280, :_reduce_382, - 1, 281, :_reduce_none, - 1, 281, :_reduce_none, - 0, 286, :_reduce_385, - 2, 284, :_reduce_386, - 4, 285, :_reduce_387, - 2, 285, :_reduce_388, - 2, 285, :_reduce_389, - 1, 285, :_reduce_390, - 2, 290, :_reduce_391, - 0, 290, :_reduce_392, - 1, 291, :_reduce_none, - 6, 292, :_reduce_394, - 8, 292, :_reduce_395, - 4, 292, :_reduce_396, - 6, 292, :_reduce_397, - 4, 292, :_reduce_398, - 2, 292, :_reduce_none, - 6, 292, :_reduce_400, - 2, 292, :_reduce_401, - 4, 292, :_reduce_402, - 6, 292, :_reduce_403, - 2, 292, :_reduce_404, - 4, 292, :_reduce_405, - 2, 292, :_reduce_406, - 4, 292, :_reduce_407, - 1, 292, :_reduce_none, - 0, 296, :_reduce_409, - 1, 296, :_reduce_410, - 3, 297, :_reduce_411, - 4, 297, :_reduce_412, - 1, 298, :_reduce_413, - 4, 298, :_reduce_414, - 1, 299, :_reduce_415, - 3, 299, :_reduce_416, - 1, 300, :_reduce_417, - 1, 300, :_reduce_none, - 0, 304, :_reduce_419, - 0, 305, :_reduce_420, - 5, 260, :_reduce_421, - 4, 302, :_reduce_422, - 1, 302, :_reduce_423, - 0, 308, :_reduce_424, - 4, 303, :_reduce_425, - 0, 309, :_reduce_426, - 4, 303, :_reduce_427, - 0, 311, :_reduce_428, - 4, 307, :_reduce_429, - 2, 203, :_reduce_430, - 4, 203, :_reduce_431, - 5, 203, :_reduce_432, - 5, 203, :_reduce_433, - 2, 259, :_reduce_434, - 4, 259, :_reduce_435, - 4, 259, :_reduce_436, - 3, 259, :_reduce_437, - 3, 259, :_reduce_438, - 3, 259, :_reduce_439, - 2, 259, :_reduce_440, - 1, 259, :_reduce_441, - 4, 259, :_reduce_442, - 0, 313, :_reduce_443, - 4, 258, :_reduce_444, - 0, 314, :_reduce_445, - 4, 258, :_reduce_446, - 0, 315, :_reduce_447, - 3, 207, :_reduce_448, - 0, 316, :_reduce_449, - 0, 317, :_reduce_450, - 4, 310, :_reduce_451, - 5, 263, :_reduce_452, - 1, 318, :_reduce_453, - 1, 318, :_reduce_none, - 1, 190, :_reduce_455, - 1, 191, :_reduce_456, - 1, 189, :_reduce_457, - 0, 321, :_reduce_458, - 9, 264, :_reduce_459, - 1, 320, :_reduce_460, - 1, 320, :_reduce_none, - 1, 319, :_reduce_462, - 3, 319, :_reduce_463, - 3, 319, :_reduce_464, - 1, 192, :_reduce_none, - 2, 192, :_reduce_466, - 3, 192, :_reduce_467, - 1, 192, :_reduce_468, - 1, 192, :_reduce_469, - 1, 192, :_reduce_470, - 1, 322, :_reduce_none, - 3, 327, :_reduce_472, - 1, 327, :_reduce_none, - 3, 329, :_reduce_474, - 1, 329, :_reduce_none, - 1, 331, :_reduce_476, - 1, 332, :_reduce_477, - 1, 330, :_reduce_none, - 1, 330, :_reduce_none, - 4, 330, :_reduce_480, - 4, 330, :_reduce_481, - 4, 330, :_reduce_482, - 3, 330, :_reduce_483, - 4, 330, :_reduce_484, - 4, 330, :_reduce_485, - 4, 330, :_reduce_486, - 3, 330, :_reduce_487, - 3, 330, :_reduce_488, - 3, 330, :_reduce_489, - 2, 330, :_reduce_490, - 0, 336, :_reduce_491, - 4, 330, :_reduce_492, - 2, 330, :_reduce_493, - 0, 337, :_reduce_494, - 4, 330, :_reduce_495, - 1, 323, :_reduce_496, - 1, 323, :_reduce_497, - 2, 323, :_reduce_498, - 2, 323, :_reduce_499, - 4, 323, :_reduce_500, - 1, 323, :_reduce_none, - 2, 338, :_reduce_502, - 3, 338, :_reduce_503, - 1, 325, :_reduce_504, - 3, 325, :_reduce_505, - 5, 324, :_reduce_506, - 2, 340, :_reduce_507, - 1, 340, :_reduce_508, - 1, 341, :_reduce_509, - 3, 341, :_reduce_510, - 1, 339, :_reduce_none, - 3, 326, :_reduce_512, - 1, 326, :_reduce_513, - 2, 326, :_reduce_514, - 1, 326, :_reduce_515, - 1, 342, :_reduce_516, - 3, 342, :_reduce_517, - 2, 344, :_reduce_518, - 1, 344, :_reduce_519, - 1, 345, :_reduce_520, - 3, 345, :_reduce_521, - 2, 347, :_reduce_522, - 1, 347, :_reduce_523, - 2, 349, :_reduce_524, - 1, 343, :_reduce_none, - 1, 343, :_reduce_526, - 1, 333, :_reduce_none, - 3, 333, :_reduce_528, - 3, 333, :_reduce_529, - 2, 333, :_reduce_530, - 2, 333, :_reduce_531, - 1, 333, :_reduce_none, - 1, 333, :_reduce_none, - 1, 333, :_reduce_none, - 2, 333, :_reduce_535, - 2, 333, :_reduce_536, - 1, 350, :_reduce_none, - 1, 350, :_reduce_none, - 1, 350, :_reduce_none, - 1, 350, :_reduce_none, - 1, 350, :_reduce_none, - 1, 350, :_reduce_none, - 1, 350, :_reduce_none, - 1, 350, :_reduce_none, - 1, 350, :_reduce_545, - 1, 350, :_reduce_none, - 1, 328, :_reduce_547, - 2, 351, :_reduce_548, - 2, 351, :_reduce_549, - 4, 352, :_reduce_550, - 2, 334, :_reduce_551, - 3, 334, :_reduce_552, - 1, 334, :_reduce_553, - 6, 159, :_reduce_554, - 0, 159, :_reduce_555, - 1, 354, :_reduce_556, - 1, 354, :_reduce_none, - 1, 354, :_reduce_none, - 2, 355, :_reduce_559, - 1, 355, :_reduce_none, - 2, 161, :_reduce_561, - 1, 161, :_reduce_none, - 1, 248, :_reduce_none, - 1, 248, :_reduce_none, - 1, 249, :_reduce_565, - 1, 357, :_reduce_566, - 2, 357, :_reduce_567, - 3, 358, :_reduce_568, - 1, 358, :_reduce_569, - 1, 358, :_reduce_570, - 3, 250, :_reduce_571, - 4, 251, :_reduce_572, - 1, 361, :_reduce_none, - 2, 361, :_reduce_none, - 3, 252, :_reduce_575, - 0, 362, :_reduce_576, - 3, 362, :_reduce_577, - 1, 363, :_reduce_578, - 2, 363, :_reduce_579, - 3, 254, :_reduce_580, - 0, 365, :_reduce_581, - 3, 365, :_reduce_582, - 3, 253, :_reduce_583, - 3, 255, :_reduce_584, - 0, 366, :_reduce_585, - 3, 366, :_reduce_586, - 0, 367, :_reduce_587, - 3, 367, :_reduce_588, - 0, 346, :_reduce_589, - 2, 346, :_reduce_590, - 0, 359, :_reduce_591, - 2, 359, :_reduce_592, - 0, 360, :_reduce_593, - 2, 360, :_reduce_594, - 1, 364, :_reduce_595, - 2, 364, :_reduce_596, - 0, 370, :_reduce_597, - 4, 364, :_reduce_598, - 1, 369, :_reduce_none, - 1, 368, :_reduce_600, - 1, 368, :_reduce_none, - 1, 226, :_reduce_none, - 1, 226, :_reduce_none, - 1, 371, :_reduce_604, - 3, 372, :_reduce_605, - 1, 356, :_reduce_606, - 2, 356, :_reduce_607, - 1, 229, :_reduce_608, - 1, 229, :_reduce_609, - 1, 229, :_reduce_610, - 1, 229, :_reduce_611, - 1, 353, :_reduce_612, - 1, 353, :_reduce_613, - 1, 353, :_reduce_614, - 1, 220, :_reduce_615, - 1, 220, :_reduce_616, - 1, 220, :_reduce_none, - 1, 221, :_reduce_618, - 1, 221, :_reduce_619, - 1, 221, :_reduce_620, - 1, 221, :_reduce_621, - 1, 221, :_reduce_622, - 1, 221, :_reduce_623, - 1, 221, :_reduce_624, - 1, 256, :_reduce_625, - 1, 256, :_reduce_626, - 1, 176, :_reduce_627, - 1, 176, :_reduce_628, - 1, 185, :_reduce_629, - 1, 185, :_reduce_630, - 0, 373, :_reduce_631, - 4, 267, :_reduce_632, - 0, 267, :_reduce_633, - 1, 182, :_reduce_none, - 1, 182, :_reduce_635, - 3, 374, :_reduce_636, - 1, 270, :_reduce_none, - 0, 376, :_reduce_638, - 3, 270, :_reduce_639, - 4, 375, :_reduce_640, - 2, 375, :_reduce_641, - 2, 375, :_reduce_642, - 1, 375, :_reduce_643, - 1, 375, :_reduce_644, - 2, 378, :_reduce_645, - 0, 378, :_reduce_646, - 6, 306, :_reduce_647, - 8, 306, :_reduce_648, - 4, 306, :_reduce_649, - 6, 306, :_reduce_650, - 4, 306, :_reduce_651, - 6, 306, :_reduce_652, - 2, 306, :_reduce_653, - 4, 306, :_reduce_654, - 6, 306, :_reduce_655, - 2, 306, :_reduce_656, - 4, 306, :_reduce_657, - 2, 306, :_reduce_658, - 4, 306, :_reduce_659, - 1, 306, :_reduce_660, - 0, 306, :_reduce_661, - 1, 242, :_reduce_662, - 1, 301, :_reduce_663, - 1, 301, :_reduce_664, - 1, 301, :_reduce_665, - 1, 301, :_reduce_666, - 1, 277, :_reduce_none, - 1, 277, :_reduce_668, - 1, 380, :_reduce_669, - 1, 381, :_reduce_670, - 3, 381, :_reduce_671, - 1, 293, :_reduce_672, - 3, 293, :_reduce_673, - 1, 382, :_reduce_674, - 2, 383, :_reduce_675, - 1, 383, :_reduce_676, - 2, 384, :_reduce_677, - 1, 384, :_reduce_678, - 1, 287, :_reduce_679, - 3, 287, :_reduce_680, - 1, 377, :_reduce_681, - 3, 377, :_reduce_682, - 1, 348, :_reduce_none, - 1, 348, :_reduce_none, - 1, 283, :_reduce_685, - 2, 282, :_reduce_686, - 1, 282, :_reduce_687, - 3, 385, :_reduce_688, - 3, 386, :_reduce_689, - 1, 294, :_reduce_690, - 3, 294, :_reduce_691, - 1, 379, :_reduce_692, - 3, 379, :_reduce_693, - 1, 387, :_reduce_none, - 1, 387, :_reduce_none, - 2, 295, :_reduce_696, - 1, 295, :_reduce_697, - 1, 388, :_reduce_none, - 1, 388, :_reduce_none, - 2, 289, :_reduce_700, - 1, 289, :_reduce_701, - 2, 288, :_reduce_702, - 0, 288, :_reduce_703, - 1, 199, :_reduce_none, - 3, 199, :_reduce_705, - 0, 257, :_reduce_706, - 2, 257, :_reduce_none, - 1, 240, :_reduce_708, - 3, 240, :_reduce_709, - 3, 389, :_reduce_710, - 2, 389, :_reduce_711, - 1, 389, :_reduce_712, - 4, 389, :_reduce_713, - 2, 389, :_reduce_714, - 1, 389, :_reduce_715, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 210, :_reduce_none, - 1, 204, :_reduce_none, - 1, 204, :_reduce_none, - 1, 312, :_reduce_none, - 1, 312, :_reduce_none, - 1, 312, :_reduce_none, - 1, 200, :_reduce_none, - 1, 200, :_reduce_none, - 1, 180, :_reduce_726, - 1, 180, :_reduce_727, - 0, 152, :_reduce_none, - 1, 152, :_reduce_none, - 0, 188, :_reduce_none, - 1, 188, :_reduce_none, - 2, 215, :_reduce_732, - 2, 179, :_reduce_733, - 2, 335, :_reduce_734, - 1, 239, :_reduce_none, - 1, 239, :_reduce_none, - 1, 268, :_reduce_737, - 1, 268, :_reduce_none, - 1, 154, :_reduce_none, - 2, 154, :_reduce_none, - 0, 235, :_reduce_741 ] - -racc_reduce_n = 742 - -racc_shift_n = 1250 - -racc_token_table = { - false => 0, - :error => 1, - :kCLASS => 2, - :kMODULE => 3, - :kDEF => 4, - :kUNDEF => 5, - :kBEGIN => 6, - :kRESCUE => 7, - :kENSURE => 8, - :kEND => 9, - :kIF => 10, - :kUNLESS => 11, - :kTHEN => 12, - :kELSIF => 13, - :kELSE => 14, - :kCASE => 15, - :kWHEN => 16, - :kWHILE => 17, - :kUNTIL => 18, - :kFOR => 19, - :kBREAK => 20, - :kNEXT => 21, - :kREDO => 22, - :kRETRY => 23, - :kIN => 24, - :kDO => 25, - :kDO_COND => 26, - :kDO_BLOCK => 27, - :kDO_LAMBDA => 28, - :kRETURN => 29, - :kYIELD => 30, - :kSUPER => 31, - :kSELF => 32, - :kNIL => 33, - :kTRUE => 34, - :kFALSE => 35, - :kAND => 36, - :kOR => 37, - :kNOT => 38, - :kIF_MOD => 39, - :kUNLESS_MOD => 40, - :kWHILE_MOD => 41, - :kUNTIL_MOD => 42, - :kRESCUE_MOD => 43, - :kALIAS => 44, - :kDEFINED => 45, - :klBEGIN => 46, - :klEND => 47, - :k__LINE__ => 48, - :k__FILE__ => 49, - :k__ENCODING__ => 50, - :tIDENTIFIER => 51, - :tFID => 52, - :tGVAR => 53, - :tIVAR => 54, - :tCONSTANT => 55, - :tLABEL => 56, - :tCVAR => 57, - :tNTH_REF => 58, - :tBACK_REF => 59, - :tSTRING_CONTENT => 60, - :tINTEGER => 61, - :tFLOAT => 62, - :tUPLUS => 63, - :tUMINUS => 64, - :tUNARY_NUM => 65, - :tPOW => 66, - :tCMP => 67, - :tEQ => 68, - :tEQQ => 69, - :tNEQ => 70, - :tGEQ => 71, - :tLEQ => 72, - :tANDOP => 73, - :tOROP => 74, - :tMATCH => 75, - :tNMATCH => 76, - :tDOT => 77, - :tDOT2 => 78, - :tDOT3 => 79, - :tAREF => 80, - :tASET => 81, - :tLSHFT => 82, - :tRSHFT => 83, - :tCOLON2 => 84, - :tCOLON3 => 85, - :tOP_ASGN => 86, - :tASSOC => 87, - :tLPAREN => 88, - :tLPAREN2 => 89, - :tRPAREN => 90, - :tLPAREN_ARG => 91, - :tLBRACK => 92, - :tLBRACK2 => 93, - :tRBRACK => 94, - :tLBRACE => 95, - :tLBRACE_ARG => 96, - :tSTAR => 97, - :tSTAR2 => 98, - :tAMPER => 99, - :tAMPER2 => 100, - :tTILDE => 101, - :tPERCENT => 102, - :tDIVIDE => 103, - :tDSTAR => 104, - :tPLUS => 105, - :tMINUS => 106, - :tLT => 107, - :tGT => 108, - :tPIPE => 109, - :tBANG => 110, - :tCARET => 111, - :tLCURLY => 112, - :tRCURLY => 113, - :tBACK_REF2 => 114, - :tSYMBEG => 115, - :tSTRING_BEG => 116, - :tXSTRING_BEG => 117, - :tREGEXP_BEG => 118, - :tREGEXP_OPT => 119, - :tWORDS_BEG => 120, - :tQWORDS_BEG => 121, - :tSYMBOLS_BEG => 122, - :tQSYMBOLS_BEG => 123, - :tSTRING_DBEG => 124, - :tSTRING_DVAR => 125, - :tSTRING_END => 126, - :tSTRING_DEND => 127, - :tSTRING => 128, - :tSYMBOL => 129, - :tNL => 130, - :tEH => 131, - :tCOLON => 132, - :tCOMMA => 133, - :tSPACE => 134, - :tSEMI => 135, - :tLAMBDA => 136, - :tLAMBEG => 137, - :tCHARACTER => 138, - :tRATIONAL => 139, - :tIMAGINARY => 140, - :tLABEL_END => 141, - :tANDDOT => 142, - :tBDOT2 => 143, - :tBDOT3 => 144, - :tEQL => 145, - :tLOWEST => 146 } - -racc_nt_base = 147 - -racc_use_result_var = true - -Racc_arg = [ - racc_action_table, - racc_action_check, - racc_action_default, - racc_action_pointer, - racc_goto_table, - racc_goto_check, - racc_goto_default, - racc_goto_pointer, - racc_nt_base, - racc_reduce_table, - racc_token_table, - racc_shift_n, - racc_reduce_n, - racc_use_result_var ] -Ractor.make_shareable(Racc_arg) if defined?(Ractor) - -Racc_token_to_s_table = [ - "$end", - "error", - "kCLASS", - "kMODULE", - "kDEF", - "kUNDEF", - "kBEGIN", - "kRESCUE", - "kENSURE", - "kEND", - "kIF", - "kUNLESS", - "kTHEN", - "kELSIF", - "kELSE", - "kCASE", - "kWHEN", - "kWHILE", - "kUNTIL", - "kFOR", - "kBREAK", - "kNEXT", - "kREDO", - "kRETRY", - "kIN", - "kDO", - "kDO_COND", - "kDO_BLOCK", - "kDO_LAMBDA", - "kRETURN", - "kYIELD", - "kSUPER", - "kSELF", - "kNIL", - "kTRUE", - "kFALSE", - "kAND", - "kOR", - "kNOT", - "kIF_MOD", - "kUNLESS_MOD", - "kWHILE_MOD", - "kUNTIL_MOD", - "kRESCUE_MOD", - "kALIAS", - "kDEFINED", - "klBEGIN", - "klEND", - "k__LINE__", - "k__FILE__", - "k__ENCODING__", - "tIDENTIFIER", - "tFID", - "tGVAR", - "tIVAR", - "tCONSTANT", - "tLABEL", - "tCVAR", - "tNTH_REF", - "tBACK_REF", - "tSTRING_CONTENT", - "tINTEGER", - "tFLOAT", - "tUPLUS", - "tUMINUS", - "tUNARY_NUM", - "tPOW", - "tCMP", - "tEQ", - "tEQQ", - "tNEQ", - "tGEQ", - "tLEQ", - "tANDOP", - "tOROP", - "tMATCH", - "tNMATCH", - "tDOT", - "tDOT2", - "tDOT3", - "tAREF", - "tASET", - "tLSHFT", - "tRSHFT", - "tCOLON2", - "tCOLON3", - "tOP_ASGN", - "tASSOC", - "tLPAREN", - "tLPAREN2", - "tRPAREN", - "tLPAREN_ARG", - "tLBRACK", - "tLBRACK2", - "tRBRACK", - "tLBRACE", - "tLBRACE_ARG", - "tSTAR", - "tSTAR2", - "tAMPER", - "tAMPER2", - "tTILDE", - "tPERCENT", - "tDIVIDE", - "tDSTAR", - "tPLUS", - "tMINUS", - "tLT", - "tGT", - "tPIPE", - "tBANG", - "tCARET", - "tLCURLY", - "tRCURLY", - "tBACK_REF2", - "tSYMBEG", - "tSTRING_BEG", - "tXSTRING_BEG", - "tREGEXP_BEG", - "tREGEXP_OPT", - "tWORDS_BEG", - "tQWORDS_BEG", - "tSYMBOLS_BEG", - "tQSYMBOLS_BEG", - "tSTRING_DBEG", - "tSTRING_DVAR", - "tSTRING_END", - "tSTRING_DEND", - "tSTRING", - "tSYMBOL", - "tNL", - "tEH", - "tCOLON", - "tCOMMA", - "tSPACE", - "tSEMI", - "tLAMBDA", - "tLAMBEG", - "tCHARACTER", - "tRATIONAL", - "tIMAGINARY", - "tLABEL_END", - "tANDDOT", - "tBDOT2", - "tBDOT3", - "tEQL", - "tLOWEST", - "$start", - "program", - "top_compstmt", - "@1", - "top_stmts", - "opt_terms", - "top_stmt", - "terms", - "stmt", - "begin_block", - "bodystmt", - "compstmt", - "opt_rescue", - "opt_else", - "opt_ensure", - "stmts", - "stmt_or_begin", - "fitem", - "undef_list", - "expr_value", - "command_asgn", - "mlhs", - "command_call", - "lhs", - "mrhs", - "mrhs_arg", - "expr", - "@2", - "command_rhs", - "var_lhs", - "primary_value", - "opt_call_args", - "rbracket", - "call_op", - "defn_head", - "f_opt_paren_args", - "endless_command", - "defs_head", - "backref", - "command", - "arg", - "opt_nl", - "p_in_kwarg", - "p_pvtbl", - "p_pktbl", - "p_top_expr_body", - "expr_value_do", - "do", - "def_name", - "@3", - "fname", - "k_def", - "singleton", - "dot_or_colon", - "@4", - "block_command", - "block_call", - "operation2", - "command_args", - "cmd_brace_block", - "brace_body", - "fcall", - "@5", - "operation", - "k_return", - "call_args", - "mlhs_basic", - "mlhs_inner", - "rparen", - "mlhs_head", - "mlhs_item", - "mlhs_node", - "mlhs_post", - "user_variable", - "keyword_variable", - "cname", - "cpath", - "op", - "reswords", - "symbol", - "@6", - "arg_rhs", - "simple_numeric", - "rel_expr", - "begin_defined", - "endless_arg", - "primary", - "relop", - "none", - "arg_value", - "aref_args", - "args", - "trailer", - "assocs", - "paren_args", - "args_forward", - "opt_paren_args", - "opt_block_arg", - "block_arg", - "@7", - "arg_splat", - "literal", - "strings", - "xstring", - "regexp", - "words", - "qwords", - "symbols", - "qsymbols", - "var_ref", - "assoc_list", - "brace_block", - "method_call", - "lambda", - "then", - "if_tail", - "case_body", - "p_case_body", - "for_var", - "k_class", - "superclass", - "term", - "k_module", - "f_arglist", - "@8", - "@9", - "@10", - "@11", - "@12", - "f_marg", - "f_norm_arg", - "f_margs", - "f_marg_list", - "f_rest_marg", - "f_any_kwrest", - "f_kwrest", - "f_no_kwarg", - "f_eq", - "block_args_tail", - "@13", - "f_block_kwarg", - "opt_f_block_arg", - "f_block_arg", - "opt_block_args_tail", - "excessed_comma", - "block_param", - "f_arg", - "f_block_optarg", - "f_rest_arg", - "opt_block_param", - "block_param_def", - "opt_bv_decl", - "bv_decls", - "bvar", - "f_bad_arg", - "f_larglist", - "lambda_body", - "@14", - "@15", - "f_args", - "do_block", - "@16", - "@17", - "do_body", - "@18", - "operation3", - "@19", - "@20", - "@21", - "@22", - "@23", - "cases", - "p_top_expr", - "p_cases", - "@24", - "p_expr", - "p_args", - "p_find", - "p_args_tail", - "p_kwargs", - "p_as", - "p_variable", - "p_alt", - "p_expr_basic", - "p_lparen", - "p_lbracket", - "p_value", - "p_const", - "rbrace", - "@25", - "@26", - "p_args_head", - "p_arg", - "p_rest", - "p_args_post", - "p_kwarg", - "p_any_kwrest", - "p_kw", - "p_kw_label", - "string_contents", - "p_kwrest", - "kwrest_mark", - "p_kwnorest", - "p_primitive", - "p_var_ref", - "p_expr_ref", - "nonlocal_var", - "exc_list", - "exc_var", - "numeric", - "string", - "string1", - "xstring_contents", - "regexp_contents", - "words_sep", - "word_list", - "word", - "string_content", - "symbol_list", - "qword_list", - "qsym_list", - "string_dvar", - "string_dend", - "@27", - "ssym", - "dsym", - "@28", - "f_paren_args", - "args_tail", - "@29", - "f_kwarg", - "opt_args_tail", - "f_optarg", - "f_arg_asgn", - "f_arg_item", - "f_label", - "f_kw", - "f_block_kw", - "f_opt", - "f_block_opt", - "restarg_mark", - "blkarg_mark", - "assoc" ] -Ractor.make_shareable(Racc_token_to_s_table) if defined?(Ractor) - -Racc_debug_parser = false - -##### State transition tables end ##### - -# reduce 0 omitted - -def _reduce_1(val, _values, result) - @current_arg_stack.push(nil) - @max_numparam_stack.push(static: true) - - result -end - -def _reduce_2(val, _values, result) - result = val[1] - - @current_arg_stack.pop - @max_numparam_stack.pop - - result -end - -def _reduce_3(val, _values, result) - result = @builder.compstmt(val[0]) - - result -end - -def _reduce_4(val, _values, result) - result = [] - - result -end - -def _reduce_5(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_6(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_7(val, _values, result) - result = [ val[1] ] - - result -end - -# reduce 8 omitted - -def _reduce_9(val, _values, result) - result = @builder.preexe(val[0], *val[1]) - - result -end - -def _reduce_10(val, _values, result) - result = val - - result -end - -def _reduce_11(val, _values, result) - rescue_bodies = val[1] - else_t, else_ = val[2] - ensure_t, ensure_ = val[3] - - if rescue_bodies.empty? && !else_t.nil? - diagnostic :error, :useless_else, nil, else_t - end - - result = @builder.begin_body(val[0], - rescue_bodies, - else_t, else_, - ensure_t, ensure_) - - result -end - -def _reduce_12(val, _values, result) - result = @builder.compstmt(val[0]) - - result -end - -def _reduce_13(val, _values, result) - result = [] - - result -end - -def _reduce_14(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_15(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_16(val, _values, result) - result = [ val[1] ] - - result -end - -# reduce 17 omitted - -def _reduce_18(val, _values, result) - diagnostic :error, :begin_in_method, nil, val[0] - - result -end - -def _reduce_19(val, _values, result) - @lexer.state = :expr_fname - - result -end - -def _reduce_20(val, _values, result) - result = @builder.alias(val[0], val[1], val[3]) - - result -end - -def _reduce_21(val, _values, result) - result = @builder.alias(val[0], - @builder.gvar(val[1]), - @builder.gvar(val[2])) - - result -end - -def _reduce_22(val, _values, result) - result = @builder.alias(val[0], - @builder.gvar(val[1]), - @builder.back_ref(val[2])) - - result -end - -def _reduce_23(val, _values, result) - diagnostic :error, :nth_ref_alias, nil, val[2] - - result -end - -def _reduce_24(val, _values, result) - result = @builder.undef_method(val[0], val[1]) - - result -end - -def _reduce_25(val, _values, result) - result = @builder.condition_mod(val[0], nil, - val[1], val[2]) - - result -end - -def _reduce_26(val, _values, result) - result = @builder.condition_mod(nil, val[0], - val[1], val[2]) - - result -end - -def _reduce_27(val, _values, result) - result = @builder.loop_mod(:while, val[0], val[1], val[2]) - - result -end - -def _reduce_28(val, _values, result) - result = @builder.loop_mod(:until, val[0], val[1], val[2]) - - result -end - -def _reduce_29(val, _values, result) - rescue_body = @builder.rescue_body(val[1], - nil, nil, nil, - nil, val[2]) - - result = @builder.begin_body(val[0], [ rescue_body ]) - - result -end - -def _reduce_30(val, _values, result) - result = @builder.postexe(val[0], val[1], val[2], val[3]) - - result -end - -# reduce 31 omitted - -def _reduce_32(val, _values, result) - result = @builder.multi_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_33(val, _values, result) - result = @builder.assign(val[0], val[1], - @builder.array(nil, val[2], nil)) - - result -end - -def _reduce_34(val, _values, result) - rescue_body = @builder.rescue_body(val[3], - nil, nil, nil, - nil, val[4]) - begin_body = @builder.begin_body(val[2], [ rescue_body ]) - - result = @builder.multi_assign(val[0], val[1], begin_body) - - result -end - -def _reduce_35(val, _values, result) - result = @builder.multi_assign(val[0], val[1], val[2]) - - result -end - -# reduce 36 omitted - -def _reduce_37(val, _values, result) - result = @builder.assign(val[0], val[1], val[2]) - - result -end - -def _reduce_38(val, _values, result) - result = @builder.op_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_39(val, _values, result) - result = @builder.op_assign( - @builder.index( - val[0], val[1], val[2], val[3]), - val[4], val[5]) - - result -end - -def _reduce_40(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_41(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_42(val, _values, result) - const = @builder.const_op_assignable( - @builder.const_fetch(val[0], val[1], val[2])) - result = @builder.op_assign(const, val[3], val[4]) - - result -end - -def _reduce_43(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_44(val, _values, result) - def_t, (name_t, ctx) = val[0] - endless_method_name(name_t) - - result = @builder.def_endless_method(def_t, name_t, - val[1], val[2], val[3]) - - local_pop - @current_arg_stack.pop - @context.in_def = ctx.in_def - - result -end - -def _reduce_45(val, _values, result) - def_t, recv, dot_t, (name_t, ctx) = val[0] - endless_method_name(name_t) - - result = @builder.def_endless_singleton(def_t, recv, dot_t, name_t, - val[1], val[2], val[3]) - - local_pop - @current_arg_stack.pop - @context.in_def = ctx.in_def - - result -end - -def _reduce_46(val, _values, result) - @builder.op_assign(val[0], val[1], val[2]) - - result -end - -# reduce 47 omitted - -def _reduce_48(val, _values, result) - rescue_body = @builder.rescue_body(val[1], - nil, nil, nil, - nil, val[2]) - - result = @builder.begin_body(val[0], [ rescue_body ]) - - result -end - -def _reduce_49(val, _values, result) - result = @builder.not_op(val[0], nil, val[2], nil) - - result -end - -# reduce 50 omitted - -def _reduce_51(val, _values, result) - rescue_body = @builder.rescue_body(val[1], - nil, nil, nil, - nil, val[2]) - - result = @builder.begin_body(val[0], [ rescue_body ]) - - result -end - -# reduce 52 omitted - -# reduce 53 omitted - -def _reduce_54(val, _values, result) - result = @builder.logical_op(:and, val[0], val[1], val[2]) - - result -end - -def _reduce_55(val, _values, result) - result = @builder.logical_op(:or, val[0], val[1], val[2]) - - result -end - -def _reduce_56(val, _values, result) - result = @builder.not_op(val[0], nil, val[2], nil) - - result -end - -def _reduce_57(val, _values, result) - result = @builder.not_op(val[0], nil, val[1], nil) - - result -end - -def _reduce_58(val, _values, result) - @pattern_variables.pop - @pattern_hash_keys.pop - @context.in_kwarg = val[2] - result = @builder.match_pattern(val[0], val[1], val[5]) - - result -end - -def _reduce_59(val, _values, result) - @pattern_variables.pop - @pattern_hash_keys.pop - @context.in_kwarg = val[2] - result = @builder.match_pattern_p(val[0], val[1], val[5]) - - result -end - -# reduce 60 omitted - -# reduce 61 omitted - -def _reduce_62(val, _values, result) - @lexer.cond.push(true) - - result -end - -def _reduce_63(val, _values, result) - @lexer.cond.pop - result = [ val[1], val[2] ] - - result -end - -def _reduce_64(val, _values, result) - local_push - @current_arg_stack.push(nil) - - result = [ val[0], @context.dup ] - @context.in_def = true - - result -end - -def _reduce_65(val, _values, result) - result = [ val[0], val[1] ] - - result -end - -def _reduce_66(val, _values, result) - @lexer.state = :expr_fname - @context.in_argdef = true - - result -end - -def _reduce_67(val, _values, result) - result = [ val[0], val[1], val[2], val[4] ] - - result -end - -# reduce 68 omitted - -# reduce 69 omitted - -# reduce 70 omitted - -def _reduce_71(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - result -end - -def _reduce_72(val, _values, result) - result = @context.dup - @context.in_block = true - - result -end - -def _reduce_73(val, _values, result) - @context.in_block = val[1].in_block - result = [ val[0], *val[2], val[3] ] - - result -end - -# reduce 74 omitted - -def _reduce_75(val, _values, result) - result = @builder.call_method(nil, nil, val[0], - nil, val[1], nil) - - result -end - -def _reduce_76(val, _values, result) - method_call = @builder.call_method(nil, nil, val[0], - nil, val[1], nil) - - begin_t, args, body, end_t = val[2] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_77(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - result -end - -def _reduce_78(val, _values, result) - method_call = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - begin_t, args, body, end_t = val[4] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_79(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - result -end - -def _reduce_80(val, _values, result) - method_call = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - begin_t, args, body, end_t = val[4] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_81(val, _values, result) - method_call = @builder.call_method(val[0], val[1], val[2], - nil, [], nil) - - args, body = val[4] - result = @builder.block(method_call, val[3], args, body, val[5]) - - result -end - -def _reduce_82(val, _values, result) - result = @builder.keyword_cmd(:super, val[0], - nil, val[1], nil) - - result -end - -def _reduce_83(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0], - nil, val[1], nil) - - result -end - -def _reduce_84(val, _values, result) - result = @builder.keyword_cmd(:return, val[0], - nil, val[1], nil) - - result -end - -def _reduce_85(val, _values, result) - result = @builder.keyword_cmd(:break, val[0], - nil, val[1], nil) - - result -end - -def _reduce_86(val, _values, result) - result = @builder.keyword_cmd(:next, val[0], - nil, val[1], nil) - - result -end - -def _reduce_87(val, _values, result) - result = @builder.multi_lhs(nil, val[0], nil) - - result -end - -def _reduce_88(val, _values, result) - result = @builder.begin(val[0], val[1], val[2]) - - result -end - -def _reduce_89(val, _values, result) - result = @builder.multi_lhs(nil, val[0], nil) - - result -end - -def _reduce_90(val, _values, result) - result = @builder.multi_lhs(val[0], val[1], val[2]) - - result -end - -# reduce 91 omitted - -def _reduce_92(val, _values, result) - result = val[0]. - push(val[1]) - - result -end - -def _reduce_93(val, _values, result) - result = val[0]. - push(@builder.splat(val[1], val[2])) - - result -end - -def _reduce_94(val, _values, result) - result = val[0]. - push(@builder.splat(val[1], val[2])). - concat(val[4]) - - result -end - -def _reduce_95(val, _values, result) - result = val[0]. - push(@builder.splat(val[1])) - - result -end - -def _reduce_96(val, _values, result) - result = val[0]. - push(@builder.splat(val[1])). - concat(val[3]) - - result -end - -def _reduce_97(val, _values, result) - result = [ @builder.splat(val[0], val[1]) ] - - result -end - -def _reduce_98(val, _values, result) - result = [ @builder.splat(val[0], val[1]), - *val[3] ] - - result -end - -def _reduce_99(val, _values, result) - result = [ @builder.splat(val[0]) ] - - result -end - -def _reduce_100(val, _values, result) - result = [ @builder.splat(val[0]), - *val[2] ] - - result -end - -# reduce 101 omitted - -def _reduce_102(val, _values, result) - result = @builder.begin(val[0], val[1], val[2]) - - result -end - -def _reduce_103(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_104(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_105(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_106(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_107(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_108(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_109(val, _values, result) - result = @builder.index_asgn(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_110(val, _values, result) - if (val[1][0] == :anddot) - diagnostic :error, :csend_in_lhs_of_masgn, nil, val[1] - end - - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_111(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_112(val, _values, result) - if (val[1][0] == :anddot) - diagnostic :error, :csend_in_lhs_of_masgn, nil, val[1] - end - - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_113(val, _values, result) - result = @builder.assignable( - @builder.const_fetch(val[0], val[1], val[2])) - - result -end - -def _reduce_114(val, _values, result) - result = @builder.assignable( - @builder.const_global(val[0], val[1])) - - result -end - -def _reduce_115(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_116(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_117(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_118(val, _values, result) - result = @builder.index_asgn(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_119(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_120(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_121(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_122(val, _values, result) - result = @builder.assignable( - @builder.const_fetch(val[0], val[1], val[2])) - - result -end - -def _reduce_123(val, _values, result) - result = @builder.assignable( - @builder.const_global(val[0], val[1])) - - result -end - -def _reduce_124(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_125(val, _values, result) - diagnostic :error, :module_name_const, nil, val[0] - - result -end - -# reduce 126 omitted - -def _reduce_127(val, _values, result) - result = @builder.const_global(val[0], val[1]) - - result -end - -def _reduce_128(val, _values, result) - result = @builder.const(val[0]) - - result -end - -def _reduce_129(val, _values, result) - result = @builder.const_fetch(val[0], val[1], val[2]) - - result -end - -# reduce 130 omitted - -# reduce 131 omitted - -# reduce 132 omitted - -# reduce 133 omitted - -# reduce 134 omitted - -def _reduce_135(val, _values, result) - result = @builder.symbol_internal(val[0]) - - result -end - -# reduce 136 omitted - -def _reduce_137(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_138(val, _values, result) - @lexer.state = :expr_fname - - result -end - -def _reduce_139(val, _values, result) - result = val[0] << val[3] - - result -end - -# reduce 140 omitted - -# reduce 141 omitted - -# reduce 142 omitted - -# reduce 143 omitted - -# reduce 144 omitted - -# reduce 145 omitted - -# reduce 146 omitted - -# reduce 147 omitted - -# reduce 148 omitted - -# reduce 149 omitted - -# reduce 150 omitted - -# reduce 151 omitted - -# reduce 152 omitted - -# reduce 153 omitted - -# reduce 154 omitted - -# reduce 155 omitted - -# reduce 156 omitted - -# reduce 157 omitted - -# reduce 158 omitted - -# reduce 159 omitted - -# reduce 160 omitted - -# reduce 161 omitted - -# reduce 162 omitted - -# reduce 163 omitted - -# reduce 164 omitted - -# reduce 165 omitted - -# reduce 166 omitted - -# reduce 167 omitted - -# reduce 168 omitted - -# reduce 169 omitted - -# reduce 170 omitted - -# reduce 171 omitted - -# reduce 172 omitted - -# reduce 173 omitted - -# reduce 174 omitted - -# reduce 175 omitted - -# reduce 176 omitted - -# reduce 177 omitted - -# reduce 178 omitted - -# reduce 179 omitted - -# reduce 180 omitted - -# reduce 181 omitted - -# reduce 182 omitted - -# reduce 183 omitted - -# reduce 184 omitted - -# reduce 185 omitted - -# reduce 186 omitted - -# reduce 187 omitted - -# reduce 188 omitted - -# reduce 189 omitted - -# reduce 190 omitted - -# reduce 191 omitted - -# reduce 192 omitted - -# reduce 193 omitted - -# reduce 194 omitted - -# reduce 195 omitted - -# reduce 196 omitted - -# reduce 197 omitted - -# reduce 198 omitted - -# reduce 199 omitted - -# reduce 200 omitted - -# reduce 201 omitted - -# reduce 202 omitted - -# reduce 203 omitted - -# reduce 204 omitted - -# reduce 205 omitted - -# reduce 206 omitted - -# reduce 207 omitted - -# reduce 208 omitted - -# reduce 209 omitted - -# reduce 210 omitted - -def _reduce_211(val, _values, result) - result = @builder.assign(val[0], val[1], val[2]) - - result -end - -def _reduce_212(val, _values, result) - result = @builder.op_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_213(val, _values, result) - result = @builder.op_assign( - @builder.index( - val[0], val[1], val[2], val[3]), - val[4], val[5]) - - result -end - -def _reduce_214(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_215(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_216(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_217(val, _values, result) - const = @builder.const_op_assignable( - @builder.const_fetch(val[0], val[1], val[2])) - result = @builder.op_assign(const, val[3], val[4]) - - result -end - -def _reduce_218(val, _values, result) - const = @builder.const_op_assignable( - @builder.const_global(val[0], val[1])) - result = @builder.op_assign(const, val[2], val[3]) - - result -end - -def _reduce_219(val, _values, result) - result = @builder.op_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_220(val, _values, result) - result = @builder.range_inclusive(val[0], val[1], val[2]) - - result -end - -def _reduce_221(val, _values, result) - result = @builder.range_exclusive(val[0], val[1], val[2]) - - result -end - -def _reduce_222(val, _values, result) - result = @builder.range_inclusive(val[0], val[1], nil) - - result -end - -def _reduce_223(val, _values, result) - result = @builder.range_exclusive(val[0], val[1], nil) - - result -end - -def _reduce_224(val, _values, result) - result = @builder.range_inclusive(nil, val[0], val[1]) - - result -end - -def _reduce_225(val, _values, result) - result = @builder.range_exclusive(nil, val[0], val[1]) - - result -end - -def _reduce_226(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_227(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_228(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_229(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_230(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_231(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_232(val, _values, result) - result = @builder.unary_op(val[0], - @builder.binary_op( - val[1], val[2], val[3])) - - result -end - -def _reduce_233(val, _values, result) - result = @builder.unary_op(val[0], val[1]) - - result -end - -def _reduce_234(val, _values, result) - result = @builder.unary_op(val[0], val[1]) - - result -end - -def _reduce_235(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_236(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_237(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_238(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -# reduce 239 omitted - -def _reduce_240(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_241(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_242(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_243(val, _values, result) - result = @builder.match_op(val[0], val[1], val[2]) - - result -end - -def _reduce_244(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_245(val, _values, result) - result = @builder.not_op(val[0], nil, val[1], nil) - - result -end - -def _reduce_246(val, _values, result) - result = @builder.unary_op(val[0], val[1]) - - result -end - -def _reduce_247(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_248(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_249(val, _values, result) - result = @builder.logical_op(:and, val[0], val[1], val[2]) - - result -end - -def _reduce_250(val, _values, result) - result = @builder.logical_op(:or, val[0], val[1], val[2]) - - result -end - -def _reduce_251(val, _values, result) - @context.in_defined = val[2].in_defined - result = @builder.keyword_cmd(:defined?, val[0], nil, [ val[3] ], nil) - - result -end - -def _reduce_252(val, _values, result) - result = @builder.ternary(val[0], val[1], - val[2], val[4], val[5]) - - result -end - -def _reduce_253(val, _values, result) - def_t, (name_t, ctx) = val[0] - endless_method_name(name_t) - - result = @builder.def_endless_method(def_t, name_t, - val[1], val[2], val[3]) - - local_pop - @current_arg_stack.pop - @context.in_def = ctx.in_def - - result -end - -def _reduce_254(val, _values, result) - def_t, recv, dot_t, (name_t, ctx) = val[0] - endless_method_name(name_t) - - result = @builder.def_endless_singleton(def_t, recv, dot_t, name_t, - val[1], val[2], val[3]) - - local_pop - @current_arg_stack.pop - @context.in_def = ctx.in_def - - result -end - -# reduce 255 omitted - -# reduce 256 omitted - -def _reduce_257(val, _values, result) - rescue_body = @builder.rescue_body(val[1], - nil, nil, nil, - nil, val[2]) - - result = @builder.begin_body(val[0], [ rescue_body ]) - - result -end - -def _reduce_258(val, _values, result) - result = @builder.not_op(val[0], nil, val[2], nil) - - result -end - -# reduce 259 omitted - -# reduce 260 omitted - -# reduce 261 omitted - -# reduce 262 omitted - -def _reduce_263(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_264(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_265(val, _values, result) - result = @context.dup - - result -end - -# reduce 266 omitted - -# reduce 267 omitted - -# reduce 268 omitted - -def _reduce_269(val, _values, result) - result = val[0] << @builder.associate(nil, val[2], nil) - - result -end - -def _reduce_270(val, _values, result) - result = [ @builder.associate(nil, val[0], nil) ] - - result -end - -# reduce 271 omitted - -def _reduce_272(val, _values, result) - rescue_body = @builder.rescue_body(val[1], - nil, nil, nil, - nil, val[2]) - - result = @builder.begin_body(val[0], [ rescue_body ]) - - result -end - -def _reduce_273(val, _values, result) - result = val - - result -end - -def _reduce_274(val, _values, result) - unless @static_env.declared_forward_args? - diagnostic :error, :unexpected_token, { :token => 'tBDOT3' } , val[3] - end - - result = [val[0], [*val[1], @builder.forwarded_args(val[3])], val[4]] - - result -end - -def _reduce_275(val, _values, result) - unless @static_env.declared_forward_args? - diagnostic :error, :unexpected_token, { :token => 'tBDOT3' } , val[1] - end - - result = [val[0], [@builder.forwarded_args(val[1])], val[2]] - - result -end - -def _reduce_276(val, _values, result) - result = [ nil, [], nil ] - - result -end - -# reduce 277 omitted - -def _reduce_278(val, _values, result) - result = [] - - result -end - -# reduce 279 omitted - -# reduce 280 omitted - -def _reduce_281(val, _values, result) - result = val[0] << @builder.associate(nil, val[2], nil) - - result -end - -def _reduce_282(val, _values, result) - result = [ @builder.associate(nil, val[0], nil) ] - - result -end - -def _reduce_283(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_284(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_285(val, _values, result) - result = [ @builder.associate(nil, val[0], nil) ] - result.concat(val[1]) - - result -end - -def _reduce_286(val, _values, result) - assocs = @builder.associate(nil, val[2], nil) - result = val[0] << assocs - result.concat(val[3]) - - result -end - -def _reduce_287(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_288(val, _values, result) - # When branch gets invoked by RACC's lookahead - # and command args start with '[' or '(' - # we need to put `true` to the cmdarg stack - # **before** `false` pushed by lexer - # m [], n - # ^ - # Right here we have cmdarg [...0] because - # lexer pushed it on '[' - # We need to modify cmdarg stack to [...10] - # - # For all other cases (like `m n` or `m n, []`) we simply put 1 to the stack - # and later lexer pushes corresponding bits on top of it. - last_token = @last_token[0] - lookahead = last_token == :tLBRACK || last_token == :tLPAREN_ARG - - if lookahead - top = @lexer.cmdarg.pop - @lexer.cmdarg.push(true) - @lexer.cmdarg.push(top) - else - @lexer.cmdarg.push(true) - end - - result -end - -def _reduce_289(val, _values, result) - # call_args can be followed by tLBRACE_ARG (that does cmdarg.push(0) in the lexer) - # but the push must be done after cmdarg.pop() in the parser. - # So this code does cmdarg.pop() to pop 0 pushed by tLBRACE_ARG, - # cmdarg.pop() to pop 1 pushed by command_args, - # and cmdarg.push(0) to restore back the flag set by tLBRACE_ARG. - last_token = @last_token[0] - lookahead = last_token == :tLBRACE_ARG - if lookahead - top = @lexer.cmdarg.pop - @lexer.cmdarg.pop - @lexer.cmdarg.push(top) - else - @lexer.cmdarg.pop - end - - result = val[1] - - result -end - -def _reduce_290(val, _values, result) - result = @builder.block_pass(val[0], val[1]) - - result -end - -def _reduce_291(val, _values, result) - if !@static_env.declared_anonymous_blockarg? - diagnostic :error, :no_anonymous_blockarg, nil, val[0] - end - - if @context.in_dynamic_block? && context.in_def && - @static_env.declared_anonymous_blockarg? && @static_env.parent_has_anonymous_blockarg? - diagnostic :error, :ambiguous_anonymous_blockarg, nil, val[0] - end - - result = @builder.block_pass(val[0], nil) - - result -end - -def _reduce_292(val, _values, result) - result = [ val[1] ] - - result -end - -def _reduce_293(val, _values, result) - result = [] - - result -end - -def _reduce_294(val, _values, result) - result = [ val[0] ] - - result -end - -# reduce 295 omitted - -def _reduce_296(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_297(val, _values, result) - result = val[0].concat(val[2]) - - result -end - -def _reduce_298(val, _values, result) - result = [ @builder.splat(val[0], val[1]) ] - - result -end - -def _reduce_299(val, _values, result) - if !@static_env.declared_anonymous_restarg? - diagnostic :error, :no_anonymous_restarg, nil, val[0] - end - - if @context.in_dynamic_block? && context.in_def && - @static_env.declared_anonymous_restarg? && @static_env.parent_has_anonymous_restarg? - diagnostic :error, :ambiguous_anonymous_restarg, nil, val[0] - end - - result = [ @builder.forwarded_restarg(val[0]) ] - - result -end - -def _reduce_300(val, _values, result) - result = @builder.array(nil, val[0], nil) - - result -end - -# reduce 301 omitted - -def _reduce_302(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_303(val, _values, result) - result = val[0] << @builder.splat(val[2], val[3]) - - result -end - -def _reduce_304(val, _values, result) - result = [ @builder.splat(val[0], val[1]) ] - - result -end - -# reduce 305 omitted - -# reduce 306 omitted - -# reduce 307 omitted - -# reduce 308 omitted - -# reduce 309 omitted - -# reduce 310 omitted - -# reduce 311 omitted - -# reduce 312 omitted - -# reduce 313 omitted - -# reduce 314 omitted - -def _reduce_315(val, _values, result) - result = @builder.call_method(nil, nil, val[0]) - - result -end - -def _reduce_316(val, _values, result) - @lexer.cmdarg.push(false) - - result -end - -def _reduce_317(val, _values, result) - @lexer.cmdarg.pop - - result = @builder.begin_keyword(val[0], val[2], val[3]) - - result -end - -def _reduce_318(val, _values, result) - @lexer.state = :expr_endarg - - result -end - -def _reduce_319(val, _values, result) - result = @builder.begin(val[0], val[1], val[3]) - - result -end - -def _reduce_320(val, _values, result) - result = @builder.begin(val[0], val[1], val[2]) - - result -end - -def _reduce_321(val, _values, result) - result = @builder.const_fetch(val[0], val[1], val[2]) - - result -end - -def _reduce_322(val, _values, result) - result = @builder.const_global(val[0], val[1]) - - result -end - -def _reduce_323(val, _values, result) - result = @builder.array(val[0], val[1], val[2]) - - result -end - -def _reduce_324(val, _values, result) - result = @builder.associate(val[0], val[1], val[2]) - - result -end - -def _reduce_325(val, _values, result) - result = @builder.keyword_cmd(:return, val[0]) - - result -end - -def _reduce_326(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_327(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0], val[1], [], val[2]) - - result -end - -def _reduce_328(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0]) - - result -end - -def _reduce_329(val, _values, result) - @context.in_defined = val[3].in_defined - result = @builder.keyword_cmd(:defined?, val[0], - val[2], [ val[4] ], val[5]) - - result -end - -def _reduce_330(val, _values, result) - result = @builder.not_op(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_331(val, _values, result) - result = @builder.not_op(val[0], val[1], nil, val[2]) - - result -end - -def _reduce_332(val, _values, result) - method_call = @builder.call_method(nil, nil, val[0]) - - begin_t, args, body, end_t = val[1] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -# reduce 333 omitted - -def _reduce_334(val, _values, result) - begin_t, args, body, end_t = val[1] - result = @builder.block(val[0], - begin_t, args, body, end_t) - - result -end - -# reduce 335 omitted - -def _reduce_336(val, _values, result) - else_t, else_ = val[4] - result = @builder.condition(val[0], val[1], val[2], - val[3], else_t, - else_, val[5]) - - result -end - -def _reduce_337(val, _values, result) - else_t, else_ = val[4] - result = @builder.condition(val[0], val[1], val[2], - else_, else_t, - val[3], val[5]) - - result -end - -def _reduce_338(val, _values, result) - result = @builder.loop(:while, val[0], *val[1], val[2], val[3]) - - result -end - -def _reduce_339(val, _values, result) - result = @builder.loop(:until, val[0], *val[1], val[2], val[3]) - - result -end - -def _reduce_340(val, _values, result) - *when_bodies, (else_t, else_body) = *val[3] - - result = @builder.case(val[0], val[1], - when_bodies, else_t, else_body, - val[4]) - - result -end - -def _reduce_341(val, _values, result) - *when_bodies, (else_t, else_body) = *val[2] - - result = @builder.case(val[0], nil, - when_bodies, else_t, else_body, - val[3]) - - result -end - -def _reduce_342(val, _values, result) - *in_bodies, (else_t, else_body) = *val[3] - - result = @builder.case_match(val[0], val[1], - in_bodies, else_t, else_body, - val[4]) - - result -end - -def _reduce_343(val, _values, result) - result = @builder.for(val[0], val[1], val[2], *val[3], val[4], val[5]) - - result -end - -def _reduce_344(val, _values, result) - @context.in_class = true - local_push - - result -end - -def _reduce_345(val, _values, result) - k_class, ctx = val[0] - if @context.in_def - diagnostic :error, :class_in_def, nil, k_class - end - lt_t, superclass = val[2] - result = @builder.def_class(k_class, val[1], - lt_t, superclass, - val[4], val[5]) - - local_pop - @context.in_class = ctx.in_class - - result -end - -def _reduce_346(val, _values, result) - @context.in_def = false - @context.in_class = false - local_push - - result -end - -def _reduce_347(val, _values, result) - k_class, ctx = val[0] - result = @builder.def_sclass(k_class, val[1], val[2], - val[5], val[6]) - - local_pop - @context.in_def = ctx.in_def - @context.in_class = ctx.in_class - - result -end - -def _reduce_348(val, _values, result) - @context.in_class = true - local_push - - result -end - -def _reduce_349(val, _values, result) - k_mod, ctx = val[0] - if @context.in_def - diagnostic :error, :module_in_def, nil, k_mod - end - result = @builder.def_module(k_mod, val[1], - val[3], val[4]) - - local_pop - @context.in_class = ctx.in_class - - result -end - -def _reduce_350(val, _values, result) - def_t, (name_t, ctx) = val[0] - result = @builder.def_method(def_t, name_t, val[1], - val[2], val[3]) - - local_pop - @current_arg_stack.pop - @context.in_def = ctx.in_def - - result -end - -def _reduce_351(val, _values, result) - def_t, recv, dot_t, (name_t, ctx) = val[0] - result = @builder.def_singleton(def_t, recv, dot_t, name_t, val[1], - val[2], val[3]) - - local_pop - @current_arg_stack.pop - @context.in_def = ctx.in_def - - result -end - -def _reduce_352(val, _values, result) - result = @builder.keyword_cmd(:break, val[0]) - - result -end - -def _reduce_353(val, _values, result) - result = @builder.keyword_cmd(:next, val[0]) - - result -end - -def _reduce_354(val, _values, result) - result = @builder.keyword_cmd(:redo, val[0]) - - result -end - -def _reduce_355(val, _values, result) - result = @builder.keyword_cmd(:retry, val[0]) - - result -end - -# reduce 356 omitted - -def _reduce_357(val, _values, result) - result = [ val[0], @context.dup ] - - result -end - -def _reduce_358(val, _values, result) - result = [ val[0], @context.dup ] - - result -end - -def _reduce_359(val, _values, result) - result = val[0] - @context.in_argdef = true - - result -end - -def _reduce_360(val, _values, result) - if @context.in_class && !@context.in_def && !(context.in_block || context.in_lambda) - diagnostic :error, :invalid_return, nil, val[0] - end - - result -end - -# reduce 361 omitted - -# reduce 362 omitted - -def _reduce_363(val, _values, result) - result = val[1] - - result -end - -# reduce 364 omitted - -# reduce 365 omitted - -# reduce 366 omitted - -def _reduce_367(val, _values, result) - else_t, else_ = val[4] - result = [ val[0], - @builder.condition(val[0], val[1], val[2], - val[3], else_t, - else_, nil), - ] - - result -end - -# reduce 368 omitted - -def _reduce_369(val, _values, result) - result = val - - result -end - -# reduce 370 omitted - -# reduce 371 omitted - -def _reduce_372(val, _values, result) - result = @builder.arg(val[0]) - - result -end - -def _reduce_373(val, _values, result) - result = @builder.multi_lhs(val[0], val[1], val[2]) - - result -end - -def _reduce_374(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_375(val, _values, result) - result = val[0] << val[2] - - result -end - -# reduce 376 omitted - -def _reduce_377(val, _values, result) - result = val[0]. - push(val[2]) - - result -end - -def _reduce_378(val, _values, result) - result = val[0]. - push(val[2]). - concat(val[4]) - - result -end - -def _reduce_379(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_380(val, _values, result) - result = [ val[0], *val[2] ] - - result -end - -def _reduce_381(val, _values, result) - result = @builder.restarg(val[0], val[1]) - - result -end - -def _reduce_382(val, _values, result) - result = @builder.restarg(val[0]) - - result -end - -# reduce 383 omitted - -# reduce 384 omitted - -def _reduce_385(val, _values, result) - @context.in_argdef = false - - result -end - -def _reduce_386(val, _values, result) - result = val[1] - - result -end - -def _reduce_387(val, _values, result) - result = val[0].concat(val[2]).concat(val[3]) - - result -end - -def _reduce_388(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_389(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_390(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_391(val, _values, result) - result = val[1] - - result -end - -def _reduce_392(val, _values, result) - result = [] - - result -end - -# reduce 393 omitted - -def _reduce_394(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_395(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[6]). - concat(val[7]) - - result -end - -def _reduce_396(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_397(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_398(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -# reduce 399 omitted - -def _reduce_400(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_401(val, _values, result) - if val[1].empty? && val[0].size == 1 - result = [@builder.procarg0(val[0][0])] - else - result = val[0].concat(val[1]) - end - - result -end - -def _reduce_402(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_403(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_404(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_405(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_406(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_407(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -# reduce 408 omitted - -def _reduce_409(val, _values, result) - result = @builder.args(nil, [], nil) - - result -end - -def _reduce_410(val, _values, result) - @lexer.state = :expr_value - - result -end - -def _reduce_411(val, _values, result) - @max_numparam_stack.has_ordinary_params! - @current_arg_stack.set(nil) - @context.in_argdef = false - result = @builder.args(val[0], val[1], val[2]) - - result -end - -def _reduce_412(val, _values, result) - @max_numparam_stack.has_ordinary_params! - @current_arg_stack.set(nil) - @context.in_argdef = false - result = @builder.args(val[0], val[1].concat(val[2]), val[3]) - - result -end - -def _reduce_413(val, _values, result) - result = [] - - result -end - -def _reduce_414(val, _values, result) - result = val[2] - - result -end - -def _reduce_415(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_416(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_417(val, _values, result) - @static_env.declare val[0][0] - result = @builder.shadowarg(val[0]) - - result -end - -# reduce 418 omitted - -def _reduce_419(val, _values, result) - @static_env.extend_dynamic - @max_numparam_stack.push(static: false) - result = @context.dup - @context.in_lambda = true - - result -end - -def _reduce_420(val, _values, result) - @lexer.cmdarg.push(false) - - result -end - -def _reduce_421(val, _values, result) - lambda_call = @builder.call_lambda(val[0]) - args = @max_numparam_stack.has_numparams? ? @builder.numargs(@max_numparam_stack.top) : val[2] - begin_t, body, end_t = val[4] - - @max_numparam_stack.pop - @static_env.unextend - @lexer.cmdarg.pop - @context.in_lambda = val[1].in_lambda - - result = @builder.block(lambda_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_422(val, _values, result) - @context.in_argdef = false - @max_numparam_stack.has_ordinary_params! - result = @builder.args(val[0], val[1].concat(val[2]), val[3]) - - result -end - -def _reduce_423(val, _values, result) - @context.in_argdef = false - if val[0].any? - @max_numparam_stack.has_ordinary_params! - end - result = @builder.args(nil, val[0], nil) - - result -end - -def _reduce_424(val, _values, result) - result = @context.dup - @context.in_lambda = true - - result -end - -def _reduce_425(val, _values, result) - @context.in_lambda = val[1].in_lambda - result = [ val[0], val[2], val[3] ] - - result -end - -def _reduce_426(val, _values, result) - result = @context.dup - @context.in_lambda = true - - result -end - -def _reduce_427(val, _values, result) - @context.in_lambda = val[1].in_lambda - result = [ val[0], val[2], val[3] ] - - result -end - -def _reduce_428(val, _values, result) - result = @context.dup - @context.in_block = true - - result -end - -def _reduce_429(val, _values, result) - @context.in_block = val[1].in_block - result = [ val[0], *val[2], val[3] ] - - result -end - -def _reduce_430(val, _values, result) - begin_t, block_args, body, end_t = val[1] - result = @builder.block(val[0], - begin_t, block_args, body, end_t) - - result -end - -def _reduce_431(val, _values, result) - lparen_t, args, rparen_t = val[3] - result = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - result -end - -def _reduce_432(val, _values, result) - lparen_t, args, rparen_t = val[3] - method_call = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - begin_t, args, body, end_t = val[4] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_433(val, _values, result) - method_call = @builder.call_method(val[0], val[1], val[2], - nil, val[3], nil) - - begin_t, args, body, end_t = val[4] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_434(val, _values, result) - lparen_t, args, rparen_t = val[1] - result = @builder.call_method(nil, nil, val[0], - lparen_t, args, rparen_t) - - result -end - -def _reduce_435(val, _values, result) - lparen_t, args, rparen_t = val[3] - result = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - result -end - -def _reduce_436(val, _values, result) - lparen_t, args, rparen_t = val[3] - result = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - result -end - -def _reduce_437(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2]) - - result -end - -def _reduce_438(val, _values, result) - lparen_t, args, rparen_t = val[2] - result = @builder.call_method(val[0], val[1], nil, - lparen_t, args, rparen_t) - - result -end - -def _reduce_439(val, _values, result) - lparen_t, args, rparen_t = val[2] - result = @builder.call_method(val[0], val[1], nil, - lparen_t, args, rparen_t) - - result -end - -def _reduce_440(val, _values, result) - lparen_t, args, rparen_t = val[1] - result = @builder.keyword_cmd(:super, val[0], - lparen_t, args, rparen_t) - - result -end - -def _reduce_441(val, _values, result) - result = @builder.keyword_cmd(:zsuper, val[0]) - - result -end - -def _reduce_442(val, _values, result) - result = @builder.index(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_443(val, _values, result) - result = @context.dup - @context.in_block = true - - result -end - -def _reduce_444(val, _values, result) - @context.in_block = val[1].in_block - result = [ val[0], *val[2], val[3] ] - - result -end - -def _reduce_445(val, _values, result) - result = @context.dup - @context.in_block = true - - result -end - -def _reduce_446(val, _values, result) - @context.in_block = val[1].in_block - result = [ val[0], *val[2], val[3] ] - - result -end - -def _reduce_447(val, _values, result) - @static_env.extend_dynamic - @max_numparam_stack.push(static: false) - - result -end - -def _reduce_448(val, _values, result) - args = @max_numparam_stack.has_numparams? ? @builder.numargs(@max_numparam_stack.top) : val[1] - result = [ args, val[2] ] - - @max_numparam_stack.pop - @static_env.unextend - - result -end - -def _reduce_449(val, _values, result) - @static_env.extend_dynamic - @max_numparam_stack.push(static: false) - - result -end - -def _reduce_450(val, _values, result) - @lexer.cmdarg.push(false) - - result -end - -def _reduce_451(val, _values, result) - args = @max_numparam_stack.has_numparams? ? @builder.numargs(@max_numparam_stack.top) : val[2] - result = [ args, val[3] ] - - @max_numparam_stack.pop - @static_env.unextend - @lexer.cmdarg.pop - - result -end - -def _reduce_452(val, _values, result) - result = [ @builder.when(val[0], val[1], val[2], val[3]), - *val[4] ] - - result -end - -def _reduce_453(val, _values, result) - result = [ val[0] ] - - result -end - -# reduce 454 omitted - -def _reduce_455(val, _values, result) - @pattern_variables.push - - result -end - -def _reduce_456(val, _values, result) - @pattern_hash_keys.push - - result -end - -def _reduce_457(val, _values, result) - result = @context.in_kwarg - - @lexer.state = :expr_beg - @lexer.command_start = false - @context.in_kwarg = true - - result -end - -def _reduce_458(val, _values, result) - @pattern_variables.pop - @pattern_hash_keys.pop - @context.in_kwarg = val[1] - - result -end - -def _reduce_459(val, _values, result) - result = [ @builder.in_pattern(val[0], *val[4], val[5], val[7]), - *val[8] ] - - result -end - -def _reduce_460(val, _values, result) - result = [ val[0] ] - - result -end - -# reduce 461 omitted - -def _reduce_462(val, _values, result) - result = [ val[0], nil ] - - result -end - -def _reduce_463(val, _values, result) - result = [ val[0], @builder.if_guard(val[1], val[2]) ] - - result -end - -def _reduce_464(val, _values, result) - result = [ val[0], @builder.unless_guard(val[1], val[2]) ] - - result -end - -# reduce 465 omitted - -def _reduce_466(val, _values, result) - # array patterns that end with comma - # like 1, 2, - # must be emitted as `array_pattern_with_tail` - item = @builder.match_with_trailing_comma(val[0], val[1]) - result = @builder.array_pattern(nil, [ item ], nil) - - result -end - -def _reduce_467(val, _values, result) - result = @builder.array_pattern(nil, [val[0]].concat(val[2]), nil) - - result -end - -def _reduce_468(val, _values, result) - result = @builder.find_pattern(nil, val[0], nil) - - result -end - -def _reduce_469(val, _values, result) - result = @builder.array_pattern(nil, val[0], nil) - - result -end - -def _reduce_470(val, _values, result) - result = @builder.hash_pattern(nil, val[0], nil) - - result -end - -# reduce 471 omitted - -def _reduce_472(val, _values, result) - result = @builder.match_as(val[0], val[1], val[2]) - - result -end - -# reduce 473 omitted - -def _reduce_474(val, _values, result) - result = @builder.match_alt(val[0], val[1], val[2]) - - result -end - -# reduce 475 omitted - -def _reduce_476(val, _values, result) - result = val[0] - @pattern_hash_keys.push - - result -end - -def _reduce_477(val, _values, result) - result = val[0] - @pattern_hash_keys.push - - result -end - -# reduce 478 omitted - -# reduce 479 omitted - -def _reduce_480(val, _values, result) - @pattern_hash_keys.pop - pattern = @builder.array_pattern(nil, val[2], nil) - result = @builder.const_pattern(val[0], val[1], pattern, val[3]) - - result -end - -def _reduce_481(val, _values, result) - @pattern_hash_keys.pop - pattern = @builder.find_pattern(nil, val[2], nil) - result = @builder.const_pattern(val[0], val[1], pattern, val[3]) - - result -end - -def _reduce_482(val, _values, result) - @pattern_hash_keys.pop - pattern = @builder.hash_pattern(nil, val[2], nil) - result = @builder.const_pattern(val[0], val[1], pattern, val[3]) - - result -end - -def _reduce_483(val, _values, result) - pattern = @builder.array_pattern(val[1], nil, val[2]) - result = @builder.const_pattern(val[0], val[1], pattern, val[2]) - - result -end - -def _reduce_484(val, _values, result) - @pattern_hash_keys.pop - pattern = @builder.array_pattern(nil, val[2], nil) - result = @builder.const_pattern(val[0], val[1], pattern, val[3]) - - result -end - -def _reduce_485(val, _values, result) - @pattern_hash_keys.pop - pattern = @builder.find_pattern(nil, val[2], nil) - result = @builder.const_pattern(val[0], val[1], pattern, val[3]) - - result -end - -def _reduce_486(val, _values, result) - @pattern_hash_keys.pop - pattern = @builder.hash_pattern(nil, val[2], nil) - result = @builder.const_pattern(val[0], val[1], pattern, val[3]) - - result -end - -def _reduce_487(val, _values, result) - pattern = @builder.array_pattern(val[1], nil, val[2]) - result = @builder.const_pattern(val[0], val[1], pattern, val[2]) - - result -end - -def _reduce_488(val, _values, result) - result = @builder.array_pattern(val[0], val[1], val[2]) - - result -end - -def _reduce_489(val, _values, result) - result = @builder.find_pattern(val[0], val[1], val[2]) - - result -end - -def _reduce_490(val, _values, result) - result = @builder.array_pattern(val[0], [], val[1]) - - result -end - -def _reduce_491(val, _values, result) - @pattern_hash_keys.push - result = @context.in_kwarg - @context.in_kwarg = false - - result -end - -def _reduce_492(val, _values, result) - @pattern_hash_keys.pop - @context.in_kwarg = val[1] - result = @builder.hash_pattern(val[0], val[2], val[3]) - - result -end - -def _reduce_493(val, _values, result) - result = @builder.hash_pattern(val[0], [], val[1]) - - result -end - -def _reduce_494(val, _values, result) - @pattern_hash_keys.push - - result -end - -def _reduce_495(val, _values, result) - @pattern_hash_keys.pop - result = @builder.begin(val[0], val[2], val[3]) - - result -end - -def _reduce_496(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_497(val, _values, result) - result = val[0] - - result -end - -def _reduce_498(val, _values, result) - result = [ *val[0], val[1] ] - - result -end - -def _reduce_499(val, _values, result) - result = [ *val[0], val[1] ] - - result -end - -def _reduce_500(val, _values, result) - result = [ *val[0], val[1], *val[3] ] - - result -end - -# reduce 501 omitted - -def _reduce_502(val, _values, result) - # array patterns that end with comma - # like [1, 2,] - # must be emitted as `array_pattern_with_tail` - item = @builder.match_with_trailing_comma(val[0], val[1]) - result = [ item ] - - result -end - -def _reduce_503(val, _values, result) - # array patterns that end with comma - # like [1, 2,] - # must be emitted as `array_pattern_with_tail` - last_item = @builder.match_with_trailing_comma(val[1], val[2]) - result = [ *val[0], last_item ] - - result -end - -def _reduce_504(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_505(val, _values, result) - result = [ val[0], *val[2] ] - - result -end - -def _reduce_506(val, _values, result) - result = [ val[0], *val[2], val[4] ] - - result -end - -def _reduce_507(val, _values, result) - result = @builder.match_rest(val[0], val[1]) - - result -end - -def _reduce_508(val, _values, result) - result = @builder.match_rest(val[0]) - - result -end - -def _reduce_509(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_510(val, _values, result) - result = [ *val[0], val[2] ] - - result -end - -# reduce 511 omitted - -def _reduce_512(val, _values, result) - result = [ *val[0], *val[2] ] - - result -end - -def _reduce_513(val, _values, result) - result = val[0] - - result -end - -def _reduce_514(val, _values, result) - result = val[0] - - result -end - -def _reduce_515(val, _values, result) - result = val[0] - - result -end - -def _reduce_516(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_517(val, _values, result) - result = [ *val[0], val[2] ] - - result -end - -def _reduce_518(val, _values, result) - result = @builder.match_pair(*val[0], val[1]) - - result -end - -def _reduce_519(val, _values, result) - result = @builder.match_label(*val[0]) - - result -end - -def _reduce_520(val, _values, result) - result = [:label, val[0]] - - result -end - -def _reduce_521(val, _values, result) - result = [:quoted, [val[0], val[1], val[2]]] - - result -end - -def _reduce_522(val, _values, result) - result = [ @builder.match_rest(val[0], val[1]) ] - - result -end - -def _reduce_523(val, _values, result) - result = [ @builder.match_rest(val[0], nil) ] - - result -end - -def _reduce_524(val, _values, result) - result = val - - result -end - -# reduce 525 omitted - -def _reduce_526(val, _values, result) - result = [ @builder.match_nil_pattern(val[0][0], val[0][1]) ] - - result -end - -# reduce 527 omitted - -def _reduce_528(val, _values, result) - result = @builder.range_inclusive(val[0], val[1], val[2]) - - result -end - -def _reduce_529(val, _values, result) - result = @builder.range_exclusive(val[0], val[1], val[2]) - - result -end - -def _reduce_530(val, _values, result) - result = @builder.range_inclusive(val[0], val[1], nil) - - result -end - -def _reduce_531(val, _values, result) - result = @builder.range_exclusive(val[0], val[1], nil) - - result -end - -# reduce 532 omitted - -# reduce 533 omitted - -# reduce 534 omitted - -def _reduce_535(val, _values, result) - result = @builder.range_inclusive(nil, val[0], val[1]) - - result -end - -def _reduce_536(val, _values, result) - result = @builder.range_exclusive(nil, val[0], val[1]) - - result -end - -# reduce 537 omitted - -# reduce 538 omitted - -# reduce 539 omitted - -# reduce 540 omitted - -# reduce 541 omitted - -# reduce 542 omitted - -# reduce 543 omitted - -# reduce 544 omitted - -def _reduce_545(val, _values, result) - result = @builder.accessible(val[0]) - - result -end - -# reduce 546 omitted - -def _reduce_547(val, _values, result) - result = @builder.assignable(@builder.match_var(val[0])) - - result -end - -def _reduce_548(val, _values, result) - name = val[1][0] - unless static_env.declared?(name) - diagnostic :error, :undefined_lvar, { :name => name }, val[1] - end - - lvar = @builder.accessible(@builder.ident(val[1])) - result = @builder.pin(val[0], lvar) - - result -end - -def _reduce_549(val, _values, result) - non_lvar = @builder.accessible(val[1]) - result = @builder.pin(val[0], non_lvar) - - result -end - -def _reduce_550(val, _values, result) - expr = @builder.begin(val[1], val[2], val[3]) - result = @builder.pin(val[0], expr) - - result -end - -def _reduce_551(val, _values, result) - result = @builder.const_global(val[0], val[1]) - - result -end - -def _reduce_552(val, _values, result) - result = @builder.const_fetch(val[0], val[1], val[2]) - - result -end - -def _reduce_553(val, _values, result) - result = @builder.const(val[0]) - - result -end - -def _reduce_554(val, _values, result) - assoc_t, exc_var = val[2] - - if val[1] - exc_list = @builder.array(nil, val[1], nil) - end - - result = [ @builder.rescue_body(val[0], - exc_list, assoc_t, exc_var, - val[3], val[4]), - *val[5] ] - - result -end - -def _reduce_555(val, _values, result) - result = [] - - result -end - -def _reduce_556(val, _values, result) - result = [ val[0] ] - - result -end - -# reduce 557 omitted - -# reduce 558 omitted - -def _reduce_559(val, _values, result) - result = [ val[0], val[1] ] - - result -end - -# reduce 560 omitted - -def _reduce_561(val, _values, result) - result = [ val[0], val[1] ] - - result -end - -# reduce 562 omitted - -# reduce 563 omitted - -# reduce 564 omitted - -def _reduce_565(val, _values, result) - result = @builder.string_compose(nil, val[0], nil) - - result -end - -def _reduce_566(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_567(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_568(val, _values, result) - string = @builder.string_compose(val[0], val[1], val[2]) - result = @builder.dedent_string(string, @lexer.dedent_level) - - result -end - -def _reduce_569(val, _values, result) - string = @builder.string(val[0]) - result = @builder.dedent_string(string, @lexer.dedent_level) - - result -end - -def _reduce_570(val, _values, result) - result = @builder.character(val[0]) - - result -end - -def _reduce_571(val, _values, result) - string = @builder.xstring_compose(val[0], val[1], val[2]) - result = @builder.dedent_string(string, @lexer.dedent_level) - - result -end - -def _reduce_572(val, _values, result) - opts = @builder.regexp_options(val[3]) - result = @builder.regexp_compose(val[0], val[1], val[2], opts) - - result -end - -# reduce 573 omitted - -# reduce 574 omitted - -def _reduce_575(val, _values, result) - result = @builder.words_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_576(val, _values, result) - result = [] - - result -end - -def _reduce_577(val, _values, result) - result = val[0] << @builder.word(val[1]) - - result -end - -def _reduce_578(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_579(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_580(val, _values, result) - result = @builder.symbols_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_581(val, _values, result) - result = [] - - result -end - -def _reduce_582(val, _values, result) - result = val[0] << @builder.word(val[1]) - - result -end - -def _reduce_583(val, _values, result) - result = @builder.words_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_584(val, _values, result) - result = @builder.symbols_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_585(val, _values, result) - result = [] - - result -end - -def _reduce_586(val, _values, result) - result = val[0] << @builder.string_internal(val[1]) - - result -end - -def _reduce_587(val, _values, result) - result = [] - - result -end - -def _reduce_588(val, _values, result) - result = val[0] << @builder.symbol_internal(val[1]) - - result -end - -def _reduce_589(val, _values, result) - result = [] - - result -end - -def _reduce_590(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_591(val, _values, result) - result = [] - - result -end - -def _reduce_592(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_593(val, _values, result) - result = [] - - result -end - -def _reduce_594(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_595(val, _values, result) - result = @builder.string_internal(val[0]) - - result -end - -def _reduce_596(val, _values, result) - result = val[1] - - result -end - -def _reduce_597(val, _values, result) - @lexer.cmdarg.push(false) - @lexer.cond.push(false) - - result -end - -def _reduce_598(val, _values, result) - @lexer.cmdarg.pop - @lexer.cond.pop - - result = @builder.begin(val[0], val[2], val[3]) - - result -end - -# reduce 599 omitted - -def _reduce_600(val, _values, result) - result = @builder.accessible(val[0]) - - result -end - -# reduce 601 omitted - -# reduce 602 omitted - -# reduce 603 omitted - -def _reduce_604(val, _values, result) - @lexer.state = :expr_end - result = @builder.symbol(val[0]) - - result -end - -def _reduce_605(val, _values, result) - @lexer.state = :expr_end - result = @builder.symbol_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_606(val, _values, result) - result = val[0] - - result -end - -def _reduce_607(val, _values, result) - if @builder.respond_to? :negate - # AST builder interface compatibility - result = @builder.negate(val[0], val[1]) - else - result = @builder.unary_num(val[0], val[1]) - end - - result -end - -def _reduce_608(val, _values, result) - @lexer.state = :expr_end - result = @builder.integer(val[0]) - - result -end - -def _reduce_609(val, _values, result) - @lexer.state = :expr_end - result = @builder.float(val[0]) - - result -end - -def _reduce_610(val, _values, result) - @lexer.state = :expr_end - result = @builder.rational(val[0]) - - result -end - -def _reduce_611(val, _values, result) - @lexer.state = :expr_end - result = @builder.complex(val[0]) - - result -end - -def _reduce_612(val, _values, result) - result = @builder.ivar(val[0]) - - result -end - -def _reduce_613(val, _values, result) - result = @builder.gvar(val[0]) - - result -end - -def _reduce_614(val, _values, result) - result = @builder.cvar(val[0]) - - result -end - -def _reduce_615(val, _values, result) - result = @builder.ident(val[0]) - - result -end - -def _reduce_616(val, _values, result) - result = @builder.const(val[0]) - - result -end - -# reduce 617 omitted - -def _reduce_618(val, _values, result) - result = @builder.nil(val[0]) - - result -end - -def _reduce_619(val, _values, result) - result = @builder.self(val[0]) - - result -end - -def _reduce_620(val, _values, result) - result = @builder.true(val[0]) - - result -end - -def _reduce_621(val, _values, result) - result = @builder.false(val[0]) - - result -end - -def _reduce_622(val, _values, result) - result = @builder.__FILE__(val[0]) - - result -end - -def _reduce_623(val, _values, result) - result = @builder.__LINE__(val[0]) - - result -end - -def _reduce_624(val, _values, result) - result = @builder.__ENCODING__(val[0]) - - result -end - -def _reduce_625(val, _values, result) - result = @builder.accessible(val[0]) - - result -end - -def _reduce_626(val, _values, result) - result = @builder.accessible(val[0]) - - result -end - -def _reduce_627(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_628(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_629(val, _values, result) - result = @builder.nth_ref(val[0]) - - result -end - -def _reduce_630(val, _values, result) - result = @builder.back_ref(val[0]) - - result -end - -def _reduce_631(val, _values, result) - @lexer.state = :expr_value - - result -end - -def _reduce_632(val, _values, result) - result = [ val[0], val[2] ] - - result -end - -def _reduce_633(val, _values, result) - result = nil - - result -end - -# reduce 634 omitted - -def _reduce_635(val, _values, result) - @context.in_argdef = false - result = @builder.args(nil, [], nil) - - result -end - -def _reduce_636(val, _values, result) - result = @builder.args(val[0], val[1], val[2]) - - @lexer.state = :expr_value - @context.in_argdef = false - - result -end - -# reduce 637 omitted - -def _reduce_638(val, _values, result) - result = @context.dup - @context.in_kwarg = true - @context.in_argdef = true - - result -end - -def _reduce_639(val, _values, result) - @context.in_kwarg = val[0].in_kwarg - @context.in_argdef = false - result = @builder.args(nil, val[1], nil) - - result -end - -def _reduce_640(val, _values, result) - result = val[0].concat(val[2]).concat(val[3]) - - result -end - -def _reduce_641(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_642(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_643(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_644(val, _values, result) - @static_env.declare_forward_args - result = [ @builder.forward_arg(val[0]) ] - - result -end - -def _reduce_645(val, _values, result) - result = val[1] - - result -end - -def _reduce_646(val, _values, result) - result = [] - - result -end - -def _reduce_647(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_648(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[6]). - concat(val[7]) - - result -end - -def _reduce_649(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_650(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_651(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_652(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_653(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_654(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_655(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_656(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_657(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_658(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_659(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_660(val, _values, result) - result = val[0] - - result -end - -def _reduce_661(val, _values, result) - result = [] - - result -end - -def _reduce_662(val, _values, result) - result = val[0] - - result -end - -def _reduce_663(val, _values, result) - diagnostic :error, :argument_const, nil, val[0] - - result -end - -def _reduce_664(val, _values, result) - diagnostic :error, :argument_ivar, nil, val[0] - - result -end - -def _reduce_665(val, _values, result) - diagnostic :error, :argument_gvar, nil, val[0] - - result -end - -def _reduce_666(val, _values, result) - diagnostic :error, :argument_cvar, nil, val[0] - - result -end - -# reduce 667 omitted - -def _reduce_668(val, _values, result) - @static_env.declare val[0][0] - - @max_numparam_stack.has_ordinary_params! - - result = val[0] - - result -end - -def _reduce_669(val, _values, result) - @current_arg_stack.set(val[0][0]) - result = val[0] - - result -end - -def _reduce_670(val, _values, result) - @current_arg_stack.set(0) - result = @builder.arg(val[0]) - - result -end - -def _reduce_671(val, _values, result) - result = @builder.multi_lhs(val[0], val[1], val[2]) - - result -end - -def _reduce_672(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_673(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_674(val, _values, result) - check_kwarg_name(val[0]) - - @static_env.declare val[0][0] - - @max_numparam_stack.has_ordinary_params! - - @current_arg_stack.set(val[0][0]) - @context.in_argdef = false - - result = val[0] - - result -end - -def _reduce_675(val, _values, result) - @current_arg_stack.set(nil) - @context.in_argdef = true - result = @builder.kwoptarg(val[0], val[1]) - - result -end - -def _reduce_676(val, _values, result) - @current_arg_stack.set(nil) - @context.in_argdef = true - result = @builder.kwarg(val[0]) - - result -end - -def _reduce_677(val, _values, result) - @context.in_argdef = true - result = @builder.kwoptarg(val[0], val[1]) - - result -end - -def _reduce_678(val, _values, result) - @context.in_argdef = true - result = @builder.kwarg(val[0]) - - result -end - -def _reduce_679(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_680(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_681(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_682(val, _values, result) - result = val[0] << val[2] - - result -end - -# reduce 683 omitted - -# reduce 684 omitted - -def _reduce_685(val, _values, result) - result = [ @builder.kwnilarg(val[0][0], val[0][1]) ] - - result -end - -def _reduce_686(val, _values, result) - @static_env.declare val[1][0] - - result = [ @builder.kwrestarg(val[0], val[1]) ] - - result -end - -def _reduce_687(val, _values, result) - @static_env.declare_anonymous_kwrestarg - - result = [ @builder.kwrestarg(val[0]) ] - - result -end - -def _reduce_688(val, _values, result) - @current_arg_stack.set(0) - @context.in_argdef = true - result = @builder.optarg(val[0], val[1], val[2]) - - result -end - -def _reduce_689(val, _values, result) - @current_arg_stack.set(0) - @context.in_argdef = true - result = @builder.optarg(val[0], val[1], val[2]) - - result -end - -def _reduce_690(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_691(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_692(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_693(val, _values, result) - result = val[0] << val[2] - - result -end - -# reduce 694 omitted - -# reduce 695 omitted - -def _reduce_696(val, _values, result) - @static_env.declare val[1][0] - - result = [ @builder.restarg(val[0], val[1]) ] - - result -end - -def _reduce_697(val, _values, result) - @static_env.declare_anonymous_restarg - - result = [ @builder.restarg(val[0]) ] - - result -end - -# reduce 698 omitted - -# reduce 699 omitted - -def _reduce_700(val, _values, result) - @static_env.declare val[1][0] - - result = @builder.blockarg(val[0], val[1]) - - result -end - -def _reduce_701(val, _values, result) - @static_env.declare_anonymous_blockarg - - result = @builder.blockarg(val[0], nil) - - result -end - -def _reduce_702(val, _values, result) - result = [ val[1] ] - - result -end - -def _reduce_703(val, _values, result) - result = [] - - result -end - -# reduce 704 omitted - -def _reduce_705(val, _values, result) - result = val[1] - - result -end - -def _reduce_706(val, _values, result) - result = [] - - result -end - -# reduce 707 omitted - -def _reduce_708(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_709(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_710(val, _values, result) - result = @builder.pair(val[0], val[1], val[2]) - - result -end - -def _reduce_711(val, _values, result) - result = @builder.pair_keyword(val[0], val[1]) - - result -end - -def _reduce_712(val, _values, result) - result = @builder.pair_label(val[0]) - - result -end - -def _reduce_713(val, _values, result) - result = @builder.pair_quoted(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_714(val, _values, result) - result = @builder.kwsplat(val[0], val[1]) - - result -end - -def _reduce_715(val, _values, result) - if !@static_env.declared_anonymous_kwrestarg? - diagnostic :error, :no_anonymous_kwrestarg, nil, val[0] - end - - if @context.in_dynamic_block? && context.in_def && - @static_env.declared_anonymous_kwrestarg? && @static_env.parent_has_anonymous_kwrestarg? - diagnostic :error, :ambiguous_anonymous_kwrestarg, nil, val[0] - end - - result = @builder.forwarded_kwrestarg(val[0]) - - result -end - -# reduce 716 omitted - -# reduce 717 omitted - -# reduce 718 omitted - -# reduce 719 omitted - -# reduce 720 omitted - -# reduce 721 omitted - -# reduce 722 omitted - -# reduce 723 omitted - -# reduce 724 omitted - -# reduce 725 omitted - -def _reduce_726(val, _values, result) - result = [:dot, val[0][1]] - - result -end - -def _reduce_727(val, _values, result) - result = [:anddot, val[0][1]] - - result -end - -# reduce 728 omitted - -# reduce 729 omitted - -# reduce 730 omitted - -# reduce 731 omitted - -def _reduce_732(val, _values, result) - result = val[1] - - result -end - -def _reduce_733(val, _values, result) - result = val[1] - - result -end - -def _reduce_734(val, _values, result) - result = val[1] - - result -end - -# reduce 735 omitted - -# reduce 736 omitted - -def _reduce_737(val, _values, result) - yyerrok - - result -end - -# reduce 738 omitted - -# reduce 739 omitted - -# reduce 740 omitted - -def _reduce_741(val, _values, result) - result = nil - - result -end - -def _reduce_none(val, _values, result) - val[0] -end - - end # class Ruby34 -end # module Parser diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/rubymotion.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/rubymotion.rb deleted file mode 100644 index 266883ad..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/rubymotion.rb +++ /dev/null @@ -1,9515 +0,0 @@ -# -*- encoding:utf-8; warn-indent:false; frozen_string_literal: true -*- -# -# DO NOT MODIFY!!!! -# This file is automatically generated by Racc 1.7.3 -# from Racc grammar file "rubymotion.y". -# - -require 'racc/parser.rb' - - -require 'parser' - -module Parser - class RubyMotion < Parser::Base - - - def version - 19 # closest released match: v1_9_0_2 - end - - def default_encoding - Encoding::BINARY - end - - def local_push - @static_env.extend_static - @lexer.cmdarg.push(false) - @lexer.cond.push(false) - end - - def local_pop - @static_env.unextend - @lexer.cmdarg.pop - @lexer.cond.pop - end -##### State transition tables begin ### - -racc_action_table = [ - -453, 5, 68, 69, 65, 7, 51, -453, -453, -453, - 57, 58, -453, -453, -453, 61, -453, 59, 60, 62, - 23, 24, 66, 67, -453, 274, -453, -453, -453, 22, - 28, 27, 92, 91, 93, 94, -453, -453, 17, -453, - -453, -453, -453, -453, 6, 41, 8, 9, 96, 95, - 97, 86, 50, 88, 87, 89, 530, 90, 98, 99, - 509, 84, 85, 38, 39, 37, -453, -453, -453, -453, - -453, -453, -453, -453, -453, -453, -453, -453, -453, -453, - 100, 452, -453, -453, -453, 36, -453, -453, 30, -86, - -453, 52, 53, -453, -453, 54, -453, 32, -453, 551, - -453, 40, -453, -453, -453, -453, -453, -453, -453, 18, - -453, 273, -453, -93, 83, 75, 78, 79, 195, 80, - 81, 540, -92, 731, 76, 82, -453, -453, -453, -453, - -456, -453, 56, -453, 77, -453, -453, -456, -456, -456, - -466, 196, -456, -456, -456, 661, -456, 197, 509, 661, - 209, 206, 207, 203, -456, 509, -456, -456, -456, 104, - 267, 529, 550, 751, 103, -88, -456, -456, -90, -456, - -456, -456, -456, -456, 104, 509, -86, -93, 509, 103, - -87, 104, 542, 541, -92, -88, 103, 210, 521, 198, - -86, 693, 522, 417, -78, -89, -456, -456, -456, -456, - -456, -456, -456, -456, -456, -456, -456, -456, -456, -456, - 104, 204, -456, -456, -456, 103, -456, -456, -85, -90, - -456, -87, -80, -456, -456, 199, -456, -84, -456, 625, - -456, 515, -456, -456, -456, -456, -456, -456, -456, -531, - -456, 210, -456, -93, -453, 104, -531, -531, -531, 104, - 103, -453, -531, -531, 103, -531, -456, -456, -456, -456, - -527, -456, 104, -456, -531, -456, -456, 103, 750, 104, - -80, -91, 779, -82, 103, -531, -531, 661, -531, -531, - -531, -531, -531, -89, 499, -79, -91, 498, -80, 104, - -86, -93, 104, 248, 103, -86, -93, 103, -92, -88, - -81, -82, -453, -92, -88, -531, -531, -531, -531, -531, - -531, -531, -531, -531, -531, -531, -531, -531, -531, 206, - 207, -531, -531, -531, -80, 568, 298, -80, 486, -531, - 760, 540, -531, -90, -80, -87, -528, -531, -90, -531, - -87, -531, -531, -531, -531, -531, -531, -531, -279, -531, - -531, -531, 206, 207, 712, -279, -279, -279, 713, 299, - -527, -279, -279, -528, -279, -531, -531, -82, -81, 210, - -531, 206, 207, 274, -531, -89, -83, 104, -92, 761, - 274, -524, 103, 364, -279, -279, 205, -279, -279, -279, - -279, -279, 542, 541, 538, 499, 499, -89, 501, 501, - -91, 540, -89, -82, -88, -91, -82, 540, -90, 210, - 206, 207, 376, -82, -279, -279, -279, -279, -279, -279, - -279, -279, -279, -279, -279, -279, -279, -279, -466, -85, - -279, -279, -279, -453, 571, 416, -93, 269, -279, 418, - -453, -279, 104, -525, 269, -524, -279, 103, -279, -453, - -279, -279, -279, -279, -279, -279, -279, 540, -279, 273, - -279, 210, 542, 541, 543, 540, 273, -524, 542, 541, - 545, -78, 583, -531, -279, -279, 760, -83, -86, -279, - -531, -531, -531, -279, -91, -531, -531, -531, 796, -531, - -73, -453, 300, 301, 419, -456, -456, -59, -531, -531, - -531, -531, -456, -456, 209, 499, 582, -525, 501, -531, - -531, -456, -531, -531, -531, -531, -531, 448, 542, 541, - 547, -81, -79, 450, -463, 810, 542, 541, 552, -525, - 583, -463, 104, 452, 583, 481, 482, 103, -87, -531, - -531, -531, -531, -531, -531, -531, -531, -531, -531, -531, - -531, -531, -531, -456, -456, -531, -531, -531, 459, 714, - -531, -58, 583, -531, 582, 210, -531, -531, 582, -531, - 486, -531, 471, -531, 472, -531, -531, -531, -531, -531, - -531, -531, -463, -531, -531, -531, -527, -81, -79, 768, - -462, 641, 640, 639, 645, 642, 582, -462, 203, -531, - -531, -531, -531, -279, -531, 202, -531, 479, -531, -89, - -279, -279, -279, -84, 200, -279, -279, -279, 278, -279, - -92, 206, 207, -81, -79, -323, -81, -79, 229, -279, - -279, -279, -323, -81, -79, 206, 207, 774, 625, -279, - -279, -323, -279, -279, -279, -279, -279, 768, -462, 641, - 640, 639, 645, 642, -464, 210, 204, 373, 269, -461, - 226, -464, 375, 374, 228, 227, -461, 843, 483, -279, - -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, - -279, -279, -279, -323, 487, -279, -279, -279, 488, 571, - -279, 774, 625, -279, 229, 75, -279, -279, 494, -279, - 563, -279, 495, -279, 76, -279, -279, -279, -279, -279, - -279, -279, -464, -279, 77, -279, 724, -461, 641, 640, - 639, 645, 642, 502, 503, 931, 452, 515, 203, -279, - -279, -279, -279, -396, -279, 414, -279, 564, -279, -91, - -396, -396, -396, -80, 415, -396, -396, -396, 366, -396, - -88, 104, 519, 647, 520, 555, 103, 229, -396, -396, - -396, -465, 651, 650, 654, 653, -531, 556, -465, -396, - -396, 559, -396, -396, -396, -396, -396, -465, -259, 808, - -82, 641, 640, 639, -458, 642, 204, -90, -459, 226, - -460, -458, 210, 228, 227, -459, 723, -460, 269, -396, - -396, -396, -396, -396, -396, -396, -396, -396, -396, -396, - -396, -396, -396, 573, 229, -396, -396, -396, -531, -465, - -396, 203, 269, -396, 229, -531, -396, -396, 536, -396, - -527, -396, 701, -396, -531, -396, -396, -396, -396, -396, - -396, -396, -458, -396, -396, -396, -459, 203, -460, 229, - 104, 229, -531, 210, 478, 103, 210, 210, -286, -396, - -396, -73, -396, 476, -396, -286, -286, -286, -396, 607, - -286, -286, -286, 210, -286, -79, -531, 492, 618, 204, - -273, 625, -87, 210, -286, -286, 203, -273, 106, 107, - 108, 109, 110, 490, -286, -286, -273, -286, -286, -286, - -286, -286, 415, 657, 808, 204, 641, 640, 639, 768, - 642, 641, 640, 639, 645, 642, 768, 515, 641, 640, - 639, 645, 642, 664, -286, -286, -286, -286, -286, -286, - -286, -286, -286, -286, -286, -286, -286, -286, -273, 692, - -286, -286, -286, 203, 204, -286, 764, 278, -286, 695, - 518, -286, -286, 764, -286, 767, -286, -260, -286, 516, - -286, -286, -286, -286, -286, -286, -286, 702, -286, 459, - -286, 768, 203, 641, 640, 639, 645, 642, 459, 524, - 210, 716, 728, -274, -286, -286, 452, -286, 526, -286, - -274, -274, -274, -286, 450, -274, -274, -274, 210, -274, - 618, 204, 210, 269, 269, -280, 618, 229, 764, -274, - -274, -274, -280, 229, 229, 742, -259, 767, 746, -274, - -274, -280, -274, -274, -274, -274, -274, 723, 754, 756, - 204, 759, 768, 762, 641, 640, 639, 645, 642, 226, - 770, 771, 625, 228, 227, 224, 225, 778, 210, -274, - -274, -274, -274, -274, -274, -274, -274, -274, -274, -274, - -274, -274, -274, -280, 210, -274, -274, -274, 787, 764, - -274, -261, 798, -274, 800, 803, -274, -274, 894, -274, - 804, -274, 723, -274, 811, -274, -274, -274, -274, -274, - -274, -274, 210, -274, 818, -274, 819, 618, 723, -280, - 838, 203, 841, 760, 210, 845, -280, 847, 878, -274, - -274, -274, -274, -232, -274, -280, -274, 876, -274, 853, - -232, -232, -232, 855, 210, -232, -232, -232, 644, -232, - 641, 640, 639, 645, 642, -279, 858, -262, -232, -232, - -232, 865, -279, 866, 870, 871, 873, -528, 450, -232, - -232, -279, -232, -232, -232, -232, -232, -280, 879, 204, - 106, 107, 108, 109, 110, 647, 633, 768, 210, 641, - 640, 639, 645, 642, 651, 650, 654, 653, 883, -232, - -232, -232, -232, -232, -232, -232, -232, -232, -232, -232, - -232, -232, -232, -279, 229, -232, -232, -232, -279, 886, - -232, 888, 269, -232, 764, -279, -232, -232, 890, -232, - -528, -232, 890, -232, -279, -232, -232, -232, -232, -232, - -232, -232, 210, -232, -232, -232, 226, 203, 895, 898, - 228, 227, 224, 225, 915, 899, 904, 906, -532, -232, - -232, 909, -232, 526, -232, -532, -532, -532, -232, 911, - -532, -532, -532, 890, -532, 229, -279, 106, 107, 108, - 109, 110, 890, -532, -532, -532, -532, 916, 494, 924, - 925, 243, 244, 933, -532, -532, 450, -532, -532, -532, - -532, -532, 210, 946, 890, 204, 890, 226, 890, 232, - 950, 228, 227, 224, 225, 933, 953, 230, 954, 231, - 956, 890, 890, 890, -532, -532, -532, -532, -532, -532, - -532, -532, -532, -532, -532, -532, -532, -532, -528, -527, - -532, -532, -532, 933, 890, -532, 933, 890, -532, nil, - nil, -532, -532, nil, -532, nil, -532, nil, -532, nil, - -532, -532, -532, -532, -532, -532, -532, nil, -532, -532, - -532, 644, nil, 641, 640, 639, 645, 642, nil, nil, - nil, nil, nil, nil, -532, -532, -532, -532, -533, -532, - nil, -532, nil, -532, nil, -533, -533, -533, nil, nil, - -533, -533, -533, nil, -533, 229, 687, 688, 647, 682, - 689, 98, 99, -533, -533, -533, -533, 651, 650, 654, - 653, 243, 244, nil, -533, -533, nil, -533, -533, -533, - -533, -533, nil, nil, nil, nil, nil, 226, nil, 232, - nil, 228, 227, 224, 225, nil, nil, 230, nil, 231, - nil, nil, nil, nil, -533, -533, -533, -533, -533, -533, - -533, -533, -533, -533, -533, -533, -533, -533, nil, nil, - -533, -533, -533, nil, nil, -533, nil, nil, -533, nil, - nil, -533, -533, nil, -533, nil, -533, nil, -533, nil, - -533, -533, -533, -533, -533, -533, -533, nil, -533, -533, - -533, 644, nil, 641, 640, 639, 645, 642, nil, nil, - nil, nil, nil, nil, -533, -533, -533, -533, -232, -533, - nil, -533, nil, -533, nil, -232, -232, -232, nil, nil, - -232, -232, -232, nil, -232, nil, nil, 768, 647, 641, - 640, 639, 645, 642, -232, nil, nil, 651, 650, 654, - 653, nil, nil, nil, -232, -232, nil, -232, -232, -232, - -232, -232, nil, 768, nil, 641, 640, 639, 645, 642, - nil, nil, nil, -232, 764, nil, nil, nil, nil, nil, - -232, -232, -232, nil, nil, -232, -232, -232, 644, -232, - 641, 640, 639, 645, 642, -232, nil, nil, nil, -232, - 764, nil, -232, nil, nil, nil, nil, 269, -232, -232, - -232, nil, -232, -232, -232, -232, -232, nil, 644, nil, - 641, 640, 639, 645, 642, 647, nil, nil, nil, nil, - -232, nil, nil, nil, 651, 650, 654, 653, nil, nil, - nil, nil, nil, 229, -232, nil, nil, nil, nil, -232, - -232, nil, nil, -232, nil, 647, nil, -232, nil, 243, - 244, nil, 269, -232, 651, 650, 654, 653, 768, nil, - 641, 640, 639, 645, 642, 226, nil, 232, nil, 228, - 227, 224, 225, nil, nil, -232, nil, nil, nil, nil, - nil, nil, nil, 5, 68, 69, 65, 7, 51, -232, - nil, nil, 57, 58, -232, 647, nil, 61, -232, 59, - 60, 62, 23, 24, 66, 67, 654, 653, nil, nil, - nil, 22, 28, 27, 92, 91, 93, 94, nil, 768, - 17, 641, 640, 639, 645, 642, 6, 41, 8, 9, - 96, 95, 97, 86, 50, 88, 87, 89, nil, 90, - 98, 99, nil, 84, 85, 38, 39, 37, nil, nil, - nil, nil, nil, nil, nil, 768, 764, 641, 640, 639, - 645, 642, nil, nil, nil, nil, nil, 36, nil, nil, - 280, nil, nil, 52, 53, nil, nil, 54, nil, 32, - nil, nil, nil, 40, 768, nil, 641, 640, 639, 645, - 642, 18, 647, nil, nil, nil, 83, 75, 78, 79, - nil, 80, 81, 654, 653, nil, 76, 82, 5, 68, - 69, 65, 7, 51, 56, nil, 77, 57, 58, nil, - nil, 647, 61, nil, 59, 60, 62, 23, 24, 66, - 67, nil, 654, 653, nil, nil, 22, 28, 27, 92, - 91, 93, 94, nil, nil, 17, nil, nil, nil, nil, - nil, 6, 41, 8, 9, 96, 95, 97, 86, 50, - 88, 87, 89, nil, 90, 98, 99, nil, 84, 85, - 38, 39, 37, nil, nil, nil, nil, nil, nil, nil, - 768, nil, 641, 640, 639, 645, 642, nil, nil, nil, - nil, nil, 36, nil, nil, 30, nil, nil, 52, 53, - nil, nil, 54, nil, 32, nil, nil, nil, 40, 768, - nil, 641, 640, 639, 645, 642, 18, 647, nil, nil, - nil, 83, 75, 78, 79, nil, 80, 81, 654, 653, - nil, 76, 82, 5, 68, 69, 65, 7, 51, 56, - nil, 77, 57, 58, nil, nil, 647, 61, nil, 59, - 60, 62, 23, 24, 66, 67, nil, 654, 653, nil, - nil, 22, 28, 27, 92, 91, 93, 94, nil, nil, - 17, nil, nil, nil, nil, nil, 6, 41, 8, 9, - 96, 95, 97, 86, 50, 88, 87, 89, nil, 90, - 98, 99, nil, 84, 85, 38, 39, 37, nil, nil, - nil, nil, nil, nil, nil, 768, nil, 641, 640, 639, - 645, 642, nil, nil, nil, nil, nil, 36, nil, nil, - 30, nil, nil, 52, 53, nil, nil, 54, nil, 32, - nil, nil, nil, 40, 768, nil, 641, 640, 639, 645, - 642, 18, 647, nil, nil, nil, 83, 75, 78, 79, - nil, 80, 81, 654, 653, nil, 76, 82, 5, 68, - 69, 65, 7, 51, 56, nil, 77, 57, 58, nil, - nil, 647, 61, nil, 59, 60, 62, 23, 24, 66, - 67, nil, 654, 653, nil, nil, 22, 28, 27, 92, - 91, 93, 94, nil, nil, 17, nil, nil, nil, nil, - nil, 6, 41, 8, 9, 96, 95, 97, 86, 50, - 88, 87, 89, nil, 90, 98, 99, nil, 84, 85, - 38, 39, 37, nil, nil, nil, nil, nil, nil, nil, - 768, nil, 641, 640, 639, 645, 642, nil, nil, nil, - nil, nil, 36, nil, nil, 30, nil, nil, 52, 53, - nil, nil, 54, nil, 32, nil, nil, nil, 40, 768, - nil, 641, 640, 639, 645, 642, 18, 647, nil, nil, - nil, 83, 75, 78, 79, nil, 80, 81, 654, 653, - nil, 76, 82, 5, 68, 69, 65, 7, 51, 56, - nil, 77, 57, 58, nil, nil, 647, 61, nil, 59, - 60, 62, 23, 24, 66, 67, nil, 654, 653, nil, - nil, 22, 28, 27, 92, 91, 93, 94, nil, nil, - 17, nil, nil, nil, nil, nil, 6, 41, 8, 9, - 96, 95, 97, 86, 50, 88, 87, 89, nil, 90, - 98, 99, nil, 84, 85, 38, 39, 37, 229, 233, - 238, 239, 240, 235, 237, 245, 246, 241, 242, nil, - -552, -552, nil, nil, 243, 244, nil, 36, nil, nil, - 30, nil, nil, 52, 53, nil, nil, 54, nil, 32, - 226, nil, 232, 40, 228, 227, 224, 225, 236, 234, - 230, 18, 231, nil, nil, nil, 83, 75, 78, 79, - nil, 80, 81, nil, nil, nil, 76, 82, 5, 68, - 69, 65, 7, 51, 56, nil, 77, 57, 58, nil, - nil, nil, 61, nil, 59, 60, 62, 23, 24, 66, - 67, nil, nil, nil, nil, nil, 22, 28, 27, 92, - 91, 93, 94, nil, nil, 17, nil, nil, nil, nil, - nil, 6, 41, 8, 9, 96, 95, 97, 86, 50, - 88, 87, 89, nil, 90, 98, 99, nil, 84, 85, - 38, 39, 37, 229, 233, 238, 239, 240, 235, 237, - 245, 246, 241, 242, nil, -552, -552, nil, nil, 243, - 244, nil, 36, nil, nil, 280, nil, nil, 52, 53, - nil, nil, 54, nil, 32, 226, nil, 232, 40, 228, - 227, 224, 225, 236, 234, 230, 18, 231, nil, nil, - nil, 83, 75, 78, 79, nil, 80, 81, nil, nil, - nil, 76, 82, 5, 68, 69, 65, 7, 51, 56, - nil, 77, 57, 58, nil, nil, nil, 61, nil, 59, - 60, 62, 23, 24, 66, 67, nil, nil, nil, nil, - nil, 22, 28, 27, 92, 91, 93, 94, nil, nil, - 17, nil, nil, nil, nil, nil, 6, 41, 8, 9, - 96, 95, 97, 86, 50, 88, 87, 89, nil, 90, - 98, 99, nil, 84, 85, 38, 39, 37, 229, -552, - -552, -552, -552, 235, 237, nil, nil, -552, -552, nil, - nil, nil, nil, nil, 243, 244, nil, 36, nil, nil, - 280, nil, nil, 52, 53, nil, nil, 54, nil, 32, - 226, nil, 232, 40, 228, 227, 224, 225, 236, 234, - 230, 18, 231, nil, nil, nil, 83, 75, 78, 79, - nil, 80, 81, nil, nil, nil, 76, 82, 5, 68, - 69, 65, 7, 51, 56, nil, 77, 57, 58, nil, - nil, nil, 61, nil, 59, 60, 62, 23, 24, 66, - 67, nil, nil, nil, nil, nil, 22, 28, 27, 92, - 91, 93, 94, nil, nil, 17, nil, nil, nil, nil, - nil, 6, 41, 8, 9, 96, 95, 97, 86, 50, - 88, 87, 89, nil, 90, 98, 99, nil, 84, 85, - 38, 39, 37, 229, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 243, - 244, nil, 36, nil, nil, 30, nil, nil, 52, 53, - nil, nil, 54, nil, 32, 226, nil, 232, 40, 228, - 227, 224, 225, nil, nil, 230, 18, 231, nil, nil, - nil, 83, 75, 78, 79, nil, 80, 81, nil, nil, - nil, 76, 82, 5, 68, 69, 65, 7, 51, 56, - nil, 77, 57, 58, nil, nil, nil, 61, nil, 59, - 60, 62, 23, 24, 66, 67, nil, nil, nil, nil, - nil, 22, 28, 27, 92, 91, 93, 94, nil, nil, - 17, nil, nil, nil, nil, nil, 6, 41, 8, 9, - 96, 95, 97, 86, 50, 88, 87, 89, nil, 90, - 98, 99, nil, 84, 85, 38, 39, 37, 229, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 243, 244, nil, 36, nil, nil, - 30, nil, nil, 52, 53, nil, nil, 54, nil, 32, - 226, nil, 232, 40, 228, 227, 224, 225, nil, nil, - 230, 18, 231, nil, nil, nil, 83, 75, 78, 79, - nil, 80, 81, nil, nil, nil, 76, 82, 5, 68, - 69, 65, 7, 51, 56, nil, 77, 57, 58, nil, - nil, nil, 61, nil, 59, 60, 62, 23, 24, 66, - 67, nil, nil, nil, nil, nil, 22, 28, 27, 92, - 91, 93, 94, nil, nil, 17, nil, nil, nil, nil, - nil, 6, 41, 8, 9, 96, 95, 97, 86, 50, - 88, 87, 89, nil, 90, 98, 99, nil, 84, 85, - 38, 39, 37, 229, -552, -552, -552, -552, 235, 237, - nil, nil, -552, -552, nil, nil, nil, nil, nil, 243, - 244, nil, 36, nil, nil, 30, nil, nil, 52, 53, - nil, nil, 54, nil, 32, 226, nil, 232, 40, 228, - 227, 224, 225, 236, 234, 230, 18, 231, nil, nil, - nil, 83, 75, 78, 79, nil, 80, 81, nil, nil, - nil, 76, 82, 5, 68, 69, 65, 7, 51, 56, - nil, 77, 57, 58, nil, nil, nil, 61, nil, 59, - 60, 62, 23, 24, 66, 67, nil, nil, nil, nil, - nil, 22, 28, 27, 92, 91, 93, 94, nil, nil, - 17, nil, nil, nil, nil, nil, 6, 41, 8, 9, - 96, 95, 97, 86, 50, 88, 87, 89, nil, 90, - 98, 99, nil, 84, 85, 38, 39, 37, 229, -552, - -552, -552, -552, 235, 237, nil, nil, -552, -552, nil, - nil, nil, nil, nil, 243, 244, nil, 36, nil, nil, - 30, nil, nil, 52, 53, nil, nil, 54, nil, 32, - 226, nil, 232, 40, 228, 227, 224, 225, 236, 234, - 230, 18, 231, nil, nil, nil, 83, 75, 78, 79, - nil, 80, 81, nil, nil, nil, 76, 82, 5, 68, - 69, 65, 7, 51, 56, nil, 77, 57, 58, nil, - nil, nil, 61, nil, 59, 60, 62, 23, 24, 66, - 67, nil, nil, nil, nil, nil, 22, 28, 27, 92, - 91, 93, 94, nil, nil, 17, nil, nil, nil, nil, - nil, 6, 41, 8, 9, 96, 95, 97, 86, 50, - 88, 87, 89, nil, 90, 98, 99, nil, 84, 85, - 38, 39, 37, 229, -552, -552, -552, -552, 235, 237, - nil, nil, -552, -552, nil, nil, nil, nil, nil, 243, - 244, nil, 36, nil, nil, 30, nil, nil, 52, 53, - nil, nil, 54, nil, 32, 226, nil, 232, 40, 228, - 227, 224, 225, 236, 234, 230, 18, 231, nil, nil, - nil, 83, 75, 78, 79, nil, 80, 81, nil, nil, - nil, 76, 82, 5, 68, 69, 65, 7, 51, 56, - nil, 77, 57, 58, nil, nil, nil, 61, nil, 59, - 60, 62, 23, 24, 66, 67, nil, nil, nil, nil, - nil, 22, 28, 27, 92, 91, 93, 94, nil, nil, - 17, nil, nil, nil, nil, nil, 6, 41, 8, 9, - 96, 95, 97, 86, 50, 88, 87, 89, nil, 90, - 98, 99, nil, 84, 85, 38, 39, 37, 229, -552, - -552, -552, -552, 235, 237, nil, nil, -552, -552, nil, - nil, nil, nil, nil, 243, 244, nil, 36, nil, nil, - 30, nil, nil, 52, 53, nil, nil, 54, nil, 32, - 226, nil, 232, 40, 228, 227, 224, 225, 236, 234, - 230, 18, 231, nil, nil, nil, 83, 75, 78, 79, - nil, 80, 81, nil, nil, nil, 76, 82, 5, 68, - 69, 65, 7, 51, 56, nil, 77, 57, 58, nil, - nil, nil, 61, nil, 59, 60, 62, 23, 24, 66, - 67, nil, nil, nil, nil, nil, 22, 28, 27, 92, - 91, 93, 94, nil, nil, 17, nil, nil, nil, nil, - nil, 6, 41, 8, 9, 96, 95, 97, 86, 50, - 88, 87, 89, nil, 90, 98, 99, nil, 84, 85, - 38, 39, 37, 229, -552, -552, -552, -552, 235, 237, - nil, nil, -552, -552, nil, nil, nil, nil, nil, 243, - 244, nil, 36, nil, nil, 30, nil, nil, 52, 53, - nil, nil, 54, nil, 32, 226, nil, 232, 40, 228, - 227, 224, 225, 236, 234, 230, 18, 231, nil, nil, - nil, 83, 75, 78, 79, nil, 80, 81, nil, nil, - nil, 76, 82, 5, 68, 69, 65, 7, 51, 56, - nil, 77, 57, 58, nil, nil, nil, 61, nil, 59, - 60, 62, 23, 24, 66, 67, nil, nil, nil, nil, - nil, 22, 28, 27, 92, 91, 93, 94, nil, nil, - 17, nil, nil, nil, nil, nil, 6, 41, 8, 9, - 96, 95, 97, 86, 50, 88, 87, 89, nil, 90, - 98, 99, nil, 84, 85, 38, 39, 37, 229, 233, - 238, 239, 240, 235, 237, nil, nil, 241, 242, nil, - nil, nil, nil, nil, 243, 244, nil, 36, nil, nil, - 30, nil, nil, 52, 53, nil, nil, 54, nil, 32, - 226, nil, 232, 40, 228, 227, 224, 225, 236, 234, - 230, 18, 231, nil, nil, nil, 83, 75, 78, 79, - nil, 80, 81, nil, nil, nil, 76, 82, 5, 68, - 69, 65, 7, 51, 56, nil, 77, 57, 58, nil, - nil, nil, 61, nil, 59, 60, 62, 23, 24, 66, - 67, nil, nil, nil, nil, nil, 22, 28, 27, 92, - 91, 93, 94, nil, nil, 17, nil, nil, nil, nil, - nil, 6, 41, 8, 9, 96, 95, 97, 86, 50, - 88, 87, 89, nil, 90, 98, 99, nil, 84, 85, - 38, 39, 37, 229, 233, 238, 239, 240, 235, 237, - 245, nil, 241, 242, nil, nil, nil, nil, nil, 243, - 244, nil, 36, nil, nil, 30, nil, nil, 52, 53, - nil, nil, 54, nil, 32, 226, nil, 232, 40, 228, - 227, 224, 225, 236, 234, 230, 18, 231, nil, nil, - nil, 83, 75, 78, 79, nil, 80, 81, nil, nil, - nil, 76, 82, 5, 68, 69, 65, 7, 51, 56, - nil, 77, 57, 58, nil, nil, nil, 61, nil, 59, - 60, 62, 23, 24, 66, 67, nil, nil, nil, nil, - nil, 22, 28, 27, 92, 91, 93, 94, nil, nil, - 17, nil, nil, nil, nil, nil, 6, 41, 8, 9, - 96, 95, 97, 86, 50, 88, 87, 89, nil, 90, - 98, 99, nil, 84, 85, 38, 39, 37, 229, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 243, 244, nil, 36, nil, nil, - 30, nil, nil, 52, 53, nil, nil, 54, nil, 32, - 226, nil, 232, 40, 228, 227, 224, 225, nil, nil, - nil, 18, nil, nil, nil, nil, 83, 75, 78, 79, - nil, 80, 81, nil, nil, nil, 76, 82, 5, 68, - 69, 65, 7, 51, 56, nil, 77, 57, 58, nil, - nil, nil, 61, nil, 59, 60, 62, 23, 24, 66, - 67, nil, nil, nil, nil, nil, 22, 28, 27, 92, - 91, 93, 94, nil, nil, 17, nil, nil, nil, nil, - nil, 6, 41, 8, 9, 96, 95, 97, 86, 50, - 88, 87, 89, nil, 90, 98, 99, nil, 84, 85, - 38, 39, 37, 229, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 243, - 244, nil, 36, nil, nil, 30, nil, nil, 52, 53, - nil, nil, 54, nil, 32, 226, nil, nil, 40, 228, - 227, 224, 225, nil, nil, nil, 18, nil, nil, nil, - nil, 83, 75, 78, 79, nil, 80, 81, nil, nil, - nil, 76, 82, 5, 68, 69, 65, 7, 51, 56, - nil, 77, 57, 58, nil, nil, nil, 61, nil, 59, - 60, 62, 23, 24, 66, 67, nil, nil, nil, nil, - nil, 22, 28, 27, 92, 91, 93, 94, nil, nil, - 17, nil, nil, nil, nil, nil, 6, 41, 8, 9, - 96, 95, 97, 86, 50, 88, 87, 89, nil, 90, - 98, 99, nil, 84, 85, 38, 39, 37, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 36, nil, nil, - 30, nil, nil, 52, 53, nil, nil, 54, nil, 32, - nil, nil, nil, 40, nil, nil, nil, nil, nil, nil, - nil, 18, nil, nil, nil, nil, 83, 75, 78, 79, - nil, 80, 81, nil, nil, nil, 76, 82, 5, 68, - 69, 65, 7, 51, 56, nil, 77, 57, 58, nil, - nil, nil, 61, nil, 59, 60, 62, 23, 24, 66, - 67, nil, nil, nil, nil, nil, 22, 28, 27, 92, - 91, 93, 94, nil, nil, 17, nil, nil, nil, nil, - nil, 6, 41, 8, 9, 96, 95, 97, 86, 50, - 88, 87, 89, nil, 90, 98, 99, nil, 84, 85, - 38, 39, 37, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 36, nil, nil, 30, nil, nil, 52, 53, - nil, nil, 54, nil, 32, nil, nil, nil, 40, nil, - nil, nil, nil, nil, nil, nil, 18, nil, nil, nil, - nil, 83, 75, 78, 79, nil, 80, 81, nil, nil, - nil, 76, 82, 5, 68, 69, 65, 7, 51, 56, - nil, 77, 57, 58, nil, nil, nil, 61, nil, 59, - 60, 62, 23, 24, 66, 67, nil, nil, nil, nil, - nil, 22, 28, 27, 92, 91, 93, 94, nil, nil, - 17, nil, nil, nil, nil, nil, 6, 41, 8, 9, - 96, 95, 97, 86, 50, 88, 87, 89, nil, 90, - 98, 99, nil, 84, 85, 38, 39, 37, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 36, nil, nil, - 30, nil, nil, 52, 53, nil, nil, 54, nil, 32, - nil, nil, nil, 40, nil, nil, nil, nil, nil, nil, - nil, 18, nil, nil, nil, nil, 83, 75, 78, 79, - nil, 80, 81, nil, nil, nil, 76, 82, 5, 68, - 69, 65, 7, 51, 56, nil, 77, 57, 58, nil, - nil, nil, 61, nil, 59, 60, 62, 23, 24, 66, - 67, nil, nil, nil, nil, nil, 22, 28, 27, 92, - 91, 93, 94, nil, nil, 17, nil, nil, nil, nil, - nil, 6, 41, 8, 9, 96, 95, 97, 86, 50, - 88, 87, 89, nil, 90, 98, 99, nil, 84, 85, - 38, 39, 37, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 36, nil, nil, 30, nil, nil, 52, 53, - nil, nil, 54, nil, 32, nil, nil, nil, 40, nil, - nil, nil, nil, nil, nil, nil, 18, nil, nil, nil, - nil, 83, 75, 78, 79, nil, 80, 81, nil, nil, - nil, 76, 82, 5, 68, 69, 65, 7, 51, 56, - nil, 77, 57, 58, nil, nil, nil, 61, nil, 59, - 60, 62, 23, 24, 66, 67, nil, nil, nil, nil, - nil, 22, 28, 27, 92, 91, 93, 94, nil, nil, - 17, nil, nil, nil, nil, nil, 6, 41, 8, 9, - 96, 95, 97, 86, 50, 88, 87, 89, nil, 90, - 98, 99, nil, 84, 85, 38, 39, 37, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 36, nil, nil, - 30, nil, nil, 52, 53, nil, nil, 54, nil, 32, - nil, nil, nil, 40, nil, nil, nil, nil, nil, nil, - nil, 18, nil, nil, nil, nil, 83, 75, 78, 79, - nil, 80, 81, nil, nil, nil, 76, 82, 5, 68, - 69, 65, 7, 51, 56, nil, 77, 57, 58, nil, - nil, nil, 61, nil, 59, 60, 62, 23, 24, 66, - 67, nil, nil, nil, nil, nil, 22, 28, 27, 92, - 91, 93, 94, nil, nil, 17, nil, nil, nil, nil, - nil, 6, 41, 8, 9, 96, 95, 97, 86, 50, - 88, 87, 89, nil, 90, 98, 99, nil, 84, 85, - 38, 39, 37, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 36, nil, nil, 30, nil, nil, 52, 53, - nil, nil, 54, nil, 32, nil, nil, nil, 40, nil, - nil, nil, nil, nil, nil, nil, 18, nil, nil, nil, - nil, 83, 75, 78, 79, nil, 80, 81, nil, nil, - nil, 76, 82, 5, 68, 69, 65, 7, 51, 56, - nil, 77, 57, 58, nil, nil, nil, 61, nil, 59, - 60, 62, 23, 24, 66, 67, nil, nil, nil, nil, - nil, 22, 28, 27, 92, 91, 93, 94, nil, nil, - 17, nil, nil, nil, nil, nil, 6, 41, 8, 9, - 96, 95, 97, 86, 50, 88, 87, 89, nil, 90, - 98, 99, nil, 84, 85, 38, 39, 37, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 36, nil, nil, - 30, nil, nil, 52, 53, nil, nil, 54, nil, 32, - nil, nil, nil, 40, nil, nil, nil, nil, nil, nil, - nil, 18, nil, nil, nil, nil, 83, 75, 78, 79, - nil, 80, 81, nil, nil, nil, 76, 82, 5, 68, - 69, 65, 7, 51, 56, nil, 77, 57, 58, nil, - nil, nil, 61, nil, 59, 60, 62, 23, 24, 66, - 67, nil, nil, nil, nil, nil, 22, 28, 27, 92, - 91, 93, 94, nil, nil, 17, nil, nil, nil, nil, - nil, 6, 41, 8, 9, 96, 95, 97, 86, 50, - 88, 87, 89, nil, 90, 98, 99, nil, 84, 85, - 38, 39, 37, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 36, nil, nil, 30, nil, nil, 52, 53, - nil, nil, 54, nil, 32, nil, nil, nil, 40, nil, - nil, nil, nil, nil, nil, nil, 18, nil, nil, nil, - nil, 83, 75, 78, 79, nil, 80, 81, nil, nil, - nil, 76, 82, 5, 68, 69, 65, 7, 51, 56, - nil, 77, 57, 58, nil, nil, nil, 61, nil, 59, - 60, 62, 23, 24, 66, 67, nil, nil, nil, nil, - nil, 22, 28, 27, 92, 91, 93, 94, nil, nil, - 17, nil, nil, nil, nil, nil, 6, 41, 8, 9, - 96, 95, 97, 86, 50, 88, 87, 89, nil, 90, - 98, 99, nil, 84, 85, 38, 39, 37, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 36, nil, nil, - 30, nil, nil, 52, 53, nil, nil, 54, nil, 32, - nil, nil, nil, 40, nil, nil, nil, nil, nil, nil, - nil, 18, nil, nil, nil, nil, 83, 75, 78, 79, - nil, 80, 81, nil, nil, nil, 76, 82, 5, 68, - 69, 65, 7, 51, 56, nil, 77, 57, 58, nil, - nil, nil, 61, nil, 59, 60, 62, 23, 24, 66, - 67, nil, nil, nil, nil, nil, 22, 28, 27, 92, - 91, 93, 94, nil, nil, 17, nil, nil, nil, nil, - nil, 6, 41, 8, 9, 96, 95, 97, 86, 50, - 88, 87, 89, nil, 90, 98, 99, nil, 84, 85, - 38, 39, 37, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 36, nil, nil, 30, nil, nil, 52, 53, - nil, nil, 54, nil, 32, nil, nil, nil, 40, nil, - nil, nil, nil, nil, nil, nil, 18, nil, nil, nil, - nil, 83, 75, 78, 79, nil, 80, 81, nil, nil, - nil, 76, 82, 5, 68, 69, 65, 7, 51, 56, - nil, 77, 57, 58, nil, nil, nil, 61, nil, 59, - 60, 62, 23, 24, 66, 67, nil, nil, nil, nil, - nil, 22, 28, 27, 92, 91, 93, 94, nil, nil, - 17, nil, nil, nil, nil, nil, 6, 41, 8, 9, - 96, 95, 97, 86, 50, 88, 87, 89, nil, 90, - 98, 99, nil, 84, 85, 38, 39, 37, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 36, nil, nil, - 30, nil, nil, 52, 53, nil, nil, 54, nil, 32, - nil, nil, nil, 40, nil, nil, nil, nil, nil, nil, - nil, 18, nil, nil, nil, nil, 83, 75, 78, 79, - nil, 80, 81, nil, nil, nil, 76, 82, nil, 68, - 69, 65, 7, 51, 56, nil, 77, 57, 58, nil, - nil, nil, 61, nil, 59, 60, 62, 23, 24, 66, - 67, nil, nil, nil, nil, nil, 22, 28, 27, 92, - 91, 93, 94, nil, nil, 17, nil, nil, nil, nil, - nil, 6, 41, 8, 9, 96, 95, 97, 86, 50, - 88, 87, 89, nil, 90, 98, 99, nil, 84, 85, - 38, 39, 37, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 36, nil, nil, 30, nil, nil, 52, 53, - nil, nil, 54, nil, 32, nil, nil, nil, 40, nil, - nil, nil, nil, nil, nil, nil, 18, nil, nil, nil, - nil, 83, 75, 78, 79, nil, 80, 81, nil, nil, - nil, 76, 82, nil, 68, 69, 65, nil, 51, 56, - nil, 77, 57, 58, nil, nil, nil, 61, nil, 59, - 60, 62, 23, 24, 66, 67, nil, nil, nil, nil, - nil, 22, 28, 27, 92, 91, 93, 94, nil, nil, - 221, nil, nil, nil, nil, nil, nil, 41, nil, nil, - 96, 95, 97, 86, 50, 88, 87, 89, nil, 90, - 98, 99, nil, 84, 85, 38, 39, 37, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 214, nil, nil, - 220, nil, nil, 52, 53, nil, nil, 54, nil, nil, - nil, nil, nil, 40, nil, nil, nil, nil, nil, nil, - nil, 219, nil, nil, nil, nil, 83, 75, 78, 79, - nil, 80, 81, nil, nil, nil, 76, 82, nil, 68, - 69, 65, nil, 51, 56, nil, 77, 57, 58, nil, - nil, nil, 61, nil, 59, 60, 62, 260, 261, 66, - 67, nil, nil, nil, nil, nil, 259, 28, 27, 92, - 91, 93, 94, nil, nil, 221, nil, nil, nil, nil, - nil, nil, 41, nil, nil, 96, 95, 97, 86, 50, - 88, 87, 89, 263, 90, 98, 99, nil, 84, 85, - 38, 39, 37, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 214, nil, nil, 220, nil, nil, 52, 53, - nil, nil, 54, nil, 258, nil, 256, nil, 40, nil, - nil, nil, nil, nil, nil, nil, 219, nil, nil, nil, - nil, 83, 75, 78, 79, nil, 80, 81, nil, nil, - nil, 76, 82, nil, 68, 69, 65, nil, 51, 56, - nil, 77, 57, 58, nil, nil, nil, 61, nil, 59, - 60, 62, 260, 261, 66, 67, nil, nil, nil, nil, - nil, 259, 28, 27, 92, 91, 93, 94, nil, nil, - 221, nil, nil, nil, nil, nil, nil, 41, nil, nil, - 96, 95, 97, 86, 50, 88, 87, 89, 263, 90, - 98, 99, nil, 84, 85, 38, 39, 37, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 214, nil, nil, - 220, nil, nil, 52, 53, nil, nil, 54, nil, 258, - nil, 256, nil, 40, nil, nil, nil, nil, nil, nil, - nil, 219, nil, nil, nil, nil, 83, 75, 78, 79, - nil, 80, 81, nil, nil, nil, 76, 82, nil, 68, - 69, 65, nil, 51, 56, nil, 77, 57, 58, nil, - nil, nil, 61, nil, 59, 60, 62, 260, 261, 66, - 67, nil, nil, nil, nil, nil, 259, 28, 27, 92, - 91, 93, 94, nil, nil, 221, nil, nil, nil, nil, - nil, nil, 41, nil, nil, 96, 95, 97, 86, 50, - 88, 87, 89, 263, 90, 98, 99, nil, 84, 85, - 38, 39, 37, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 214, nil, nil, 220, nil, nil, 52, 53, - nil, nil, 54, nil, 258, nil, 256, nil, 40, nil, - nil, nil, nil, nil, nil, nil, 219, nil, nil, nil, - nil, 83, 75, 78, 79, nil, 80, 81, nil, nil, - nil, 76, 82, nil, 68, 69, 65, nil, 51, 56, - nil, 77, 57, 58, nil, nil, nil, 61, nil, 59, - 60, 62, 260, 261, 66, 67, nil, nil, nil, nil, - nil, 259, 290, 294, 92, 91, 93, 94, nil, nil, - 221, nil, nil, nil, nil, nil, nil, 291, nil, nil, - 96, 95, 97, 86, 50, 88, 87, 89, nil, 90, - 98, 99, nil, 84, 85, nil, 644, 295, 641, 640, - 639, 645, 642, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 288, nil, nil, - 285, nil, nil, 52, 53, nil, nil, 54, nil, 284, - nil, nil, nil, 647, nil, nil, nil, nil, nil, nil, - nil, nil, 651, 650, 654, 653, 83, 75, 78, 79, - nil, 80, 81, nil, nil, nil, 76, 82, nil, 68, - 69, 65, nil, 51, 56, nil, 77, 57, 58, nil, - nil, nil, 61, nil, 59, 60, 62, 260, 261, 66, - 67, nil, nil, nil, nil, nil, 259, 290, 294, 92, - 91, 93, 94, nil, nil, 221, nil, nil, nil, nil, - nil, 557, 291, nil, nil, 96, 95, 97, 86, 50, - 88, 87, 89, nil, 90, 98, 99, nil, 84, 85, - nil, nil, 295, nil, 229, 233, 238, 239, 240, 235, - 237, 245, 246, 241, 242, nil, 222, 223, nil, nil, - 243, 244, 288, nil, nil, 220, nil, nil, 52, 53, - nil, nil, 54, nil, nil, nil, 226, nil, 232, nil, - 228, 227, 224, 225, 236, 234, 230, nil, 231, nil, - nil, 83, 75, 78, 79, nil, 80, 81, nil, nil, - nil, 76, 82, nil, nil, 247, 297, -226, nil, 56, - nil, 77, 68, 69, 65, nil, 51, nil, nil, nil, - 57, 58, nil, nil, nil, 61, nil, 59, 60, 62, - 260, 261, 66, 67, nil, nil, nil, nil, nil, 259, - 290, 294, 92, 91, 93, 94, nil, nil, 221, nil, - nil, nil, nil, nil, nil, 41, nil, nil, 96, 95, - 97, 86, 50, 88, 87, 89, nil, 90, 98, 99, - nil, 84, 85, 38, 39, 37, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 214, nil, nil, 220, nil, - nil, 52, 53, nil, nil, 54, nil, nil, nil, nil, - nil, 40, nil, nil, nil, nil, nil, nil, nil, 219, - nil, nil, nil, nil, 83, 75, 78, 79, nil, 80, - 81, nil, nil, nil, 76, 82, nil, 68, 69, 65, - nil, 51, 56, nil, 77, 57, 58, nil, nil, nil, - 61, nil, 59, 60, 62, 260, 261, 66, 67, nil, - nil, nil, nil, nil, 259, 290, 294, 92, 91, 93, - 94, nil, nil, 221, nil, nil, nil, nil, nil, nil, - 41, nil, nil, 96, 95, 97, 86, 50, 88, 87, - 89, nil, 90, 98, 99, nil, 84, 85, 38, 39, - 37, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 214, nil, nil, 220, nil, nil, 52, 53, nil, nil, - 54, nil, nil, nil, nil, nil, 40, nil, nil, nil, - nil, nil, nil, nil, 219, nil, nil, nil, nil, 83, - 75, 78, 79, nil, 80, 81, nil, nil, nil, 76, - 82, nil, 68, 69, 65, nil, 51, 56, nil, 77, - 57, 58, nil, nil, nil, 61, nil, 59, 60, 62, - 260, 261, 66, 67, nil, nil, nil, nil, nil, 259, - 290, 294, 92, 91, 93, 94, nil, nil, 221, nil, - nil, nil, nil, nil, nil, 41, nil, nil, 96, 95, - 97, 86, 50, 88, 87, 89, nil, 90, 98, 99, - nil, 84, 85, 38, 39, 37, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 214, nil, nil, 220, nil, - nil, 52, 53, nil, nil, 54, nil, nil, nil, nil, - nil, 40, nil, nil, nil, nil, nil, nil, nil, 219, - nil, nil, nil, nil, 83, 75, 78, 79, nil, 80, - 81, nil, nil, nil, 76, 82, nil, 68, 69, 65, - nil, 51, 56, nil, 77, 57, 58, nil, nil, nil, - 61, nil, 59, 60, 62, 23, 24, 66, 67, nil, - nil, nil, nil, nil, 22, 28, 27, 92, 91, 93, - 94, nil, nil, 17, nil, nil, nil, nil, nil, nil, - 41, nil, nil, 96, 95, 97, 86, 50, 88, 87, - 89, nil, 90, 98, 99, nil, 84, 85, 38, 39, - 37, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 214, nil, nil, 220, nil, nil, 52, 53, nil, nil, - 54, nil, nil, nil, nil, nil, 40, nil, nil, nil, - nil, nil, nil, nil, 18, nil, nil, nil, nil, 83, - 75, 78, 79, nil, 80, 81, nil, nil, nil, 76, - 82, nil, 68, 69, 65, nil, 51, 56, nil, 77, - 57, 58, nil, nil, nil, 61, nil, 59, 60, 62, - 260, 261, 66, 67, nil, nil, nil, nil, nil, 259, - 290, 294, 92, 91, 93, 94, nil, nil, 221, nil, - nil, nil, nil, nil, nil, 41, nil, nil, 96, 95, - 97, 86, 50, 88, 87, 89, 263, 90, 98, 99, - nil, 84, 85, 38, 39, 37, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 214, nil, nil, 220, nil, - nil, 52, 53, nil, nil, 54, nil, 258, nil, nil, - nil, 40, nil, nil, nil, nil, nil, nil, nil, 219, - nil, nil, nil, nil, 83, 75, 78, 79, nil, 80, - 81, nil, nil, nil, 76, 82, nil, 68, 69, 65, - nil, 51, 56, nil, 77, 57, 58, nil, nil, nil, - 61, nil, 59, 60, 62, 260, 261, 66, 67, nil, - nil, nil, nil, nil, 259, 290, 294, 92, 91, 93, - 94, nil, nil, 221, nil, nil, nil, nil, nil, nil, - 41, nil, nil, 96, 95, 97, 86, 50, 88, 87, - 89, 263, 90, 98, 99, nil, 84, 85, 38, 39, - 37, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 214, nil, nil, 220, nil, nil, 52, 53, nil, nil, - 54, nil, nil, nil, nil, nil, 40, nil, nil, nil, - nil, nil, nil, nil, 219, nil, nil, nil, nil, 83, - 75, 78, 79, nil, 80, 81, nil, nil, nil, 76, - 82, nil, 68, 69, 65, nil, 51, 56, nil, 77, - 57, 58, nil, nil, nil, 61, nil, 59, 60, 62, - 23, 24, 66, 67, nil, nil, nil, nil, nil, 22, - 28, 27, 92, 91, 93, 94, nil, nil, 17, nil, - nil, nil, nil, nil, nil, 41, nil, nil, 96, 95, - 97, 86, 50, 88, 87, 89, nil, 90, 98, 99, - nil, 84, 85, 38, 39, 37, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 214, nil, nil, 220, nil, - nil, 52, 53, nil, nil, 54, nil, nil, nil, nil, - nil, 40, nil, nil, nil, nil, nil, nil, nil, 18, - nil, nil, nil, nil, 83, 75, 78, 79, nil, 80, - 81, nil, nil, nil, 76, 82, nil, 68, 69, 65, - nil, 51, 56, nil, 77, 57, 58, nil, nil, nil, - 61, nil, 59, 60, 62, 23, 24, 66, 67, nil, - nil, nil, nil, nil, 22, 28, 27, 92, 91, 93, - 94, nil, nil, 17, nil, nil, nil, nil, nil, nil, - 41, nil, nil, 96, 95, 97, 86, 50, 88, 87, - 89, nil, 90, 98, 99, nil, 84, 85, 38, 39, - 37, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 214, nil, nil, 220, nil, nil, 52, 53, nil, nil, - 54, nil, nil, nil, nil, nil, 40, nil, nil, nil, - nil, nil, nil, nil, 18, nil, nil, nil, nil, 83, - 75, 78, 79, nil, 80, 81, nil, nil, nil, 76, - 82, nil, 68, 69, 65, nil, 51, 56, nil, 77, - 57, 58, nil, nil, nil, 61, nil, 59, 60, 62, - 23, 24, 66, 67, nil, nil, nil, nil, nil, 22, - 28, 27, 92, 91, 93, 94, nil, nil, 17, nil, - nil, nil, nil, 560, nil, 41, nil, nil, 96, 95, - 97, 86, 50, 88, 87, 89, nil, 90, 98, 99, - nil, 84, 85, 38, 39, 37, 229, 233, 238, 239, - 240, 235, 237, 245, 246, 241, 242, nil, 222, 223, - nil, nil, 243, 244, nil, 214, nil, nil, 220, nil, - nil, 52, 53, nil, nil, 54, nil, nil, 226, nil, - 232, 40, 228, 227, 224, 225, 236, 234, 230, 18, - 231, nil, nil, nil, 83, 75, 78, 79, nil, 80, - 81, nil, nil, nil, 76, 82, 104, 247, nil, nil, - nil, 103, 56, nil, 77, 68, 69, 65, nil, 51, - nil, nil, nil, 57, 58, nil, nil, nil, 61, nil, - 59, 60, 62, 260, 261, 66, 67, nil, nil, nil, - nil, nil, 259, 290, 294, 92, 91, 93, 94, nil, - nil, 221, nil, nil, nil, nil, nil, nil, 291, nil, - nil, 96, 95, 97, 86, 50, 88, 87, 89, nil, - 90, 98, 99, nil, 84, 85, nil, 724, 295, 641, - 640, 639, 645, 642, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 329, nil, - nil, 30, nil, nil, 52, 53, nil, nil, 54, nil, - 32, nil, nil, nil, 647, nil, nil, nil, nil, nil, - nil, nil, nil, 651, 650, 654, 653, 83, 75, 78, - 79, nil, 80, 81, nil, nil, nil, 76, 82, nil, - 68, 69, 65, nil, 51, 56, nil, 77, 57, 58, - nil, nil, nil, 61, nil, 59, 60, 62, 260, 261, - 66, 67, nil, nil, nil, nil, nil, 259, 290, 294, - 92, 91, 93, 94, nil, nil, 221, nil, nil, nil, - nil, nil, nil, 291, nil, nil, 96, 95, 97, 334, - 50, 88, 87, 335, nil, 90, 98, 99, nil, 84, - 85, nil, 724, 295, 641, 640, 639, 645, 642, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 341, nil, nil, 336, nil, nil, 220, nil, nil, 52, - 53, nil, nil, 54, nil, nil, nil, nil, nil, 647, - nil, nil, nil, nil, nil, nil, nil, nil, 651, 650, - 654, 653, 83, 75, 78, 79, nil, 80, 81, nil, - nil, nil, 76, 82, nil, 68, 69, 65, nil, 51, - 56, nil, 77, 57, 58, nil, nil, nil, 61, nil, - 59, 60, 62, 260, 261, 66, 67, nil, nil, nil, - nil, nil, 259, 290, 294, 92, 91, 93, 94, nil, - nil, 221, nil, nil, nil, nil, nil, nil, 291, nil, - nil, 96, 95, 97, 334, 50, 88, 87, 335, nil, - 90, 98, 99, nil, 84, 85, nil, 644, 295, 641, - 640, 639, 645, 642, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 336, nil, - nil, 220, nil, nil, 52, 53, nil, nil, 54, nil, - nil, nil, nil, nil, 647, 682, nil, nil, nil, nil, - nil, nil, nil, 651, 650, 654, 653, 83, 75, 78, - 79, nil, 80, 81, nil, nil, nil, 76, 82, nil, - 68, 69, 65, 7, 51, 56, nil, 77, 57, 58, - nil, nil, nil, 61, nil, 59, 60, 62, 23, 24, - 66, 67, nil, nil, nil, nil, nil, 22, 28, 27, - 92, 91, 93, 94, nil, nil, 17, nil, nil, nil, - nil, 557, 6, 41, 8, 9, 96, 95, 97, 86, - 50, 88, 87, 89, nil, 90, 98, 99, nil, 84, - 85, 38, 39, 37, 229, 233, 238, 239, 240, 235, - 237, 245, 246, 241, 242, nil, 222, 223, nil, nil, - 243, 244, nil, 36, nil, nil, 30, nil, nil, 52, - 53, nil, nil, 54, nil, 32, 226, nil, 232, 40, - 228, 227, 224, 225, 236, 234, 230, 18, 231, nil, - nil, nil, 83, 75, 78, 79, nil, 80, 81, nil, - nil, nil, 76, 82, nil, 247, nil, nil, nil, 366, - 56, nil, 77, 68, 69, 65, nil, 51, nil, nil, - nil, 57, 58, nil, nil, nil, 61, nil, 59, 60, - 62, 23, 24, 66, 67, nil, nil, nil, nil, nil, - 22, 28, 27, 92, 91, 93, 94, nil, nil, 17, - nil, nil, nil, nil, nil, nil, 41, nil, nil, 96, - 95, 97, 86, 50, 88, 87, 89, nil, 90, 98, - 99, nil, 84, 85, 38, 39, 37, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 214, nil, nil, 220, - nil, nil, 52, 53, nil, nil, 54, nil, nil, nil, - nil, nil, 40, nil, nil, nil, nil, nil, nil, nil, - 18, nil, nil, nil, nil, 83, 75, 78, 79, nil, - 80, 81, nil, nil, nil, 76, 82, nil, 68, 69, - 65, nil, 51, 56, nil, 77, 57, 58, nil, nil, - nil, 61, nil, 59, 60, 62, 23, 24, 66, 67, - nil, nil, nil, nil, nil, 22, 28, 27, 92, 91, - 93, 94, nil, nil, 17, nil, nil, nil, nil, nil, - nil, 41, nil, nil, 96, 95, 97, 86, 50, 88, - 87, 89, nil, 90, 98, 99, nil, 84, 85, 38, - 39, 37, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 214, nil, nil, 220, nil, nil, 52, 53, nil, - nil, 54, nil, nil, nil, nil, nil, 40, nil, nil, - nil, nil, nil, nil, nil, 18, nil, nil, nil, nil, - 83, 75, 78, 79, nil, 80, 81, nil, nil, nil, - 76, 82, nil, 68, 69, 65, nil, 51, 56, nil, - 77, 57, 58, nil, nil, nil, 61, nil, 59, 60, - 62, 23, 24, 66, 67, nil, nil, nil, nil, nil, - 22, 28, 27, 92, 91, 93, 94, nil, nil, 17, - nil, nil, nil, nil, nil, nil, 41, nil, nil, 96, - 95, 97, 86, 50, 88, 87, 89, nil, 90, 98, - 99, nil, 84, 85, 38, 39, 37, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 214, nil, nil, 220, - nil, nil, 52, 53, nil, nil, 54, nil, nil, nil, - nil, nil, 40, nil, nil, nil, nil, nil, nil, nil, - 18, nil, nil, nil, nil, 83, 75, 78, 79, nil, - 80, 81, nil, nil, nil, 76, 82, nil, 68, 69, - 65, nil, 51, 56, nil, 77, 57, 58, nil, nil, - nil, 61, nil, 59, 60, 62, 23, 24, 66, 67, - nil, nil, nil, nil, nil, 22, 28, 27, 92, 91, - 93, 94, nil, nil, 17, nil, nil, nil, nil, nil, - nil, 41, nil, nil, 96, 95, 97, 86, 50, 88, - 87, 89, nil, 90, 98, 99, nil, 84, 85, 38, - 39, 37, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 214, nil, nil, 220, nil, nil, 52, 53, nil, - nil, 54, nil, nil, nil, nil, nil, 40, nil, nil, - nil, nil, nil, nil, nil, 18, nil, nil, nil, nil, - 83, 75, 78, 79, nil, 80, 81, nil, nil, nil, - 76, 82, nil, 68, 69, 65, 7, 51, 56, nil, - 77, 57, 58, nil, nil, nil, 61, nil, 59, 60, - 62, 23, 24, 66, 67, nil, nil, nil, nil, nil, - 22, 28, 27, 92, 91, 93, 94, nil, nil, 17, - nil, nil, nil, nil, nil, 6, 41, 8, 9, 96, - 95, 97, 86, 50, 88, 87, 89, nil, 90, 98, - 99, nil, 84, 85, 38, 39, 37, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 36, nil, nil, 30, - nil, nil, 52, 53, nil, nil, 54, nil, 32, nil, - nil, nil, 40, nil, nil, nil, nil, nil, nil, nil, - 18, nil, nil, nil, nil, 83, 75, 78, 79, nil, - 80, 81, nil, nil, nil, 76, 82, nil, 68, 69, - 65, nil, 51, 56, nil, 77, 57, 58, nil, nil, - nil, 61, nil, 59, 60, 62, 23, 24, 66, 67, - nil, nil, nil, nil, nil, 22, 28, 27, 92, 91, - 93, 94, nil, nil, 221, nil, nil, nil, nil, nil, - nil, 41, nil, nil, 96, 95, 97, 86, 50, 88, - 87, 89, nil, 90, 98, 99, nil, 84, 85, 38, - 39, 37, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 214, nil, nil, 220, nil, nil, 52, 53, nil, - nil, 54, nil, 383, nil, nil, nil, 40, nil, nil, - nil, nil, nil, nil, nil, 219, nil, nil, nil, nil, - 83, 75, 78, 79, nil, 80, 81, nil, nil, nil, - 76, 82, nil, 68, 69, 65, nil, 51, 56, nil, - 77, 57, 58, nil, nil, nil, 61, nil, 59, 60, - 62, 23, 24, 66, 67, nil, nil, nil, nil, nil, - 22, 28, 27, 92, 91, 93, 94, nil, nil, 221, - nil, nil, nil, nil, nil, nil, 41, nil, nil, 96, - 95, 97, 86, 50, 88, 87, 89, nil, 90, 98, - 99, nil, 84, 85, 38, 39, 37, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 214, nil, nil, 220, - nil, nil, 52, 53, nil, nil, 54, nil, 383, nil, - nil, nil, 40, nil, nil, nil, nil, nil, nil, nil, - 219, nil, nil, nil, nil, 83, 75, 78, 79, nil, - 80, 81, nil, nil, nil, 76, 82, nil, 68, 69, - 65, nil, 51, 56, nil, 77, 57, 58, nil, nil, - nil, 61, nil, 59, 60, 62, 23, 24, 66, 67, - nil, nil, nil, nil, nil, 22, 28, 27, 92, 91, - 93, 94, nil, nil, 221, nil, nil, nil, nil, nil, - nil, 41, nil, nil, 96, 95, 97, 86, 50, 88, - 87, 89, nil, 90, 98, 99, nil, 84, 85, 38, - 39, 37, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 214, nil, nil, 220, nil, nil, 52, 53, nil, - nil, 54, nil, nil, nil, nil, nil, 40, nil, nil, - nil, nil, nil, nil, nil, 219, nil, nil, nil, nil, - 83, 75, 78, 79, nil, 80, 81, nil, nil, nil, - 76, 82, nil, 68, 69, 65, nil, 51, 56, nil, - 77, 57, 58, nil, nil, nil, 61, nil, 59, 60, - 62, 260, 261, 66, 67, nil, nil, nil, nil, nil, - 259, 28, 27, 92, 91, 93, 94, nil, nil, 221, - nil, nil, nil, nil, nil, nil, 41, nil, nil, 96, - 95, 97, 86, 50, 88, 87, 89, 263, 90, 98, - 99, nil, 84, 85, 38, 39, 37, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 214, nil, nil, 220, - nil, nil, 52, 53, nil, nil, 54, nil, 258, nil, - 256, nil, 40, nil, nil, nil, nil, nil, nil, nil, - 219, nil, nil, nil, nil, 83, 75, 78, 79, nil, - 80, 81, nil, nil, nil, 76, 82, nil, 68, 69, - 65, nil, 51, 56, nil, 77, 57, 58, nil, nil, - nil, 61, nil, 59, 60, 62, 23, 24, 66, 67, - nil, nil, nil, nil, nil, 22, 28, 27, 92, 91, - 93, 94, nil, nil, 221, nil, nil, nil, nil, nil, - nil, 41, nil, nil, 96, 95, 97, 86, 50, 88, - 87, 89, nil, 90, 98, 99, nil, 84, 85, 38, - 39, 37, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 214, nil, nil, 220, nil, nil, 52, 53, nil, - nil, 54, nil, nil, nil, nil, nil, 40, nil, nil, - nil, nil, nil, nil, nil, 219, nil, nil, nil, nil, - 83, 75, 78, 79, nil, 80, 81, nil, nil, nil, - 76, 82, nil, 68, 69, 65, nil, 51, 56, nil, - 77, 57, 58, nil, nil, nil, 61, nil, 59, 60, - 62, 23, 24, 66, 67, nil, nil, nil, nil, nil, - 22, 28, 27, 92, 91, 93, 94, nil, nil, 17, - nil, nil, nil, nil, nil, nil, 41, nil, nil, 96, - 95, 97, 86, 50, 88, 87, 89, nil, 90, 98, - 99, nil, 84, 85, 38, 39, 37, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 214, nil, nil, 220, - nil, nil, 52, 53, nil, nil, 54, nil, nil, nil, - nil, nil, 40, nil, nil, nil, nil, nil, nil, nil, - 18, nil, nil, nil, nil, 83, 75, 78, 79, nil, - 80, 81, nil, nil, nil, 76, 82, nil, 68, 69, - 65, nil, 51, 56, nil, 77, 57, 58, nil, nil, - nil, 61, nil, 59, 60, 62, 23, 24, 66, 67, - nil, nil, nil, nil, nil, 22, 28, 27, 92, 91, - 93, 94, nil, nil, 17, nil, nil, nil, nil, nil, - nil, 41, nil, nil, 96, 95, 97, 86, 50, 88, - 87, 89, nil, 90, 98, 99, nil, 84, 85, 38, - 39, 37, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 214, nil, nil, 220, nil, nil, 52, 53, nil, - nil, 54, nil, nil, nil, nil, nil, 40, nil, nil, - nil, nil, nil, nil, nil, 18, nil, nil, nil, nil, - 83, 75, 78, 79, nil, 80, 81, nil, nil, nil, - 76, 82, nil, 68, 69, 65, nil, 51, 56, nil, - 77, 57, 58, nil, nil, nil, 61, nil, 59, 60, - 62, 23, 24, 66, 67, nil, nil, nil, nil, nil, - 22, 28, 27, 92, 91, 93, 94, nil, nil, 17, - nil, nil, nil, nil, nil, nil, 41, nil, nil, 96, - 95, 97, 86, 50, 88, 87, 89, nil, 90, 98, - 99, nil, 84, 85, 38, 39, 37, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 214, nil, nil, 220, - nil, nil, 52, 53, nil, nil, 54, nil, nil, nil, - nil, nil, 40, nil, nil, nil, nil, nil, nil, nil, - 18, nil, nil, nil, nil, 83, 75, 78, 79, nil, - 80, 81, nil, nil, nil, 76, 82, nil, 68, 69, - 65, nil, 51, 56, nil, 77, 57, 58, nil, nil, - nil, 61, nil, 59, 60, 62, 23, 24, 66, 67, - nil, nil, nil, nil, nil, 22, 28, 27, 92, 91, - 93, 94, nil, nil, 17, nil, nil, nil, nil, nil, - nil, 41, nil, nil, 96, 95, 97, 86, 50, 88, - 87, 89, nil, 90, 98, 99, nil, 84, 85, 38, - 39, 37, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 214, nil, nil, 220, nil, nil, 52, 53, nil, - nil, 54, nil, nil, nil, nil, nil, 40, nil, nil, - nil, nil, nil, nil, nil, 18, nil, nil, nil, nil, - 83, 75, 78, 79, nil, 80, 81, nil, nil, nil, - 76, 82, 210, 68, 69, 65, nil, 51, 56, nil, - 77, 57, 58, nil, nil, nil, 61, nil, 59, 60, - 62, 260, 261, 66, 67, nil, nil, nil, nil, nil, - 259, 290, 294, 92, 91, 93, 94, nil, nil, 221, - nil, nil, nil, nil, nil, nil, 41, nil, nil, 96, - 95, 97, 86, 50, 88, 87, 89, nil, 90, 98, - 99, nil, 84, 85, 38, 39, 37, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 214, nil, nil, 220, - nil, nil, 52, 53, nil, nil, 54, nil, nil, nil, - nil, nil, 40, nil, nil, nil, nil, nil, nil, nil, - 219, nil, nil, nil, nil, 83, 75, 78, 79, nil, - 80, 81, nil, nil, nil, 76, 82, nil, 68, 69, - 65, nil, 51, 56, nil, 77, 57, 58, nil, nil, - nil, 61, nil, 59, 60, 62, 260, 261, 66, 67, - nil, nil, nil, nil, nil, 259, 290, 294, 92, 91, - 93, 94, nil, nil, 221, nil, nil, nil, nil, nil, - nil, 41, nil, nil, 96, 95, 97, 86, 50, 88, - 87, 89, nil, 90, 98, 99, nil, 84, 85, 38, - 39, 37, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 214, nil, nil, 220, nil, nil, 52, 53, nil, - nil, 54, nil, nil, nil, nil, nil, 40, nil, nil, - nil, nil, nil, nil, nil, 219, nil, nil, nil, nil, - 83, 75, 78, 79, nil, 80, 81, nil, nil, nil, - 76, 82, nil, 68, 69, 65, nil, 51, 56, nil, - 77, 57, 58, nil, nil, nil, 61, nil, 59, 60, - 62, 260, 261, 66, 67, nil, nil, nil, nil, nil, - 259, 290, 294, 92, 91, 93, 94, nil, nil, 221, - nil, nil, nil, nil, nil, nil, 41, nil, nil, 96, - 95, 97, 86, 50, 88, 87, 89, nil, 90, 98, - 99, nil, 84, 85, 38, 39, 37, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 214, nil, nil, 220, - nil, nil, 52, 53, nil, nil, 54, nil, nil, nil, - nil, nil, 40, nil, nil, nil, nil, nil, nil, nil, - 219, nil, nil, nil, nil, 83, 75, 78, 79, nil, - 80, 81, nil, nil, nil, 76, 82, nil, 68, 69, - 65, nil, 51, 56, nil, 77, 57, 58, nil, nil, - nil, 61, nil, 59, 60, 62, 260, 261, 66, 67, - nil, nil, nil, nil, nil, 259, 290, 294, 92, 91, - 93, 94, nil, nil, 221, nil, nil, nil, nil, nil, - nil, 41, nil, nil, 96, 95, 97, 86, 50, 88, - 87, 89, nil, 90, 98, 99, nil, 84, 85, 38, - 39, 37, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 214, nil, nil, 220, nil, nil, 52, 53, nil, - nil, 54, nil, nil, nil, nil, nil, 40, nil, nil, - nil, nil, nil, nil, nil, 219, nil, nil, nil, nil, - 83, 75, 78, 79, nil, 80, 81, nil, nil, nil, - 76, 82, nil, 68, 69, 65, nil, 51, 56, nil, - 77, 57, 58, nil, nil, nil, 61, nil, 59, 60, - 62, 260, 261, 66, 67, nil, nil, nil, nil, nil, - 259, 290, 294, 92, 91, 93, 94, nil, nil, 221, - nil, nil, nil, nil, nil, nil, 41, nil, nil, 96, - 95, 97, 86, 50, 88, 87, 89, nil, 90, 98, - 99, nil, 84, 85, 38, 39, 37, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 214, nil, nil, 220, - nil, nil, 52, 53, nil, nil, 54, nil, nil, nil, - nil, nil, 40, nil, nil, nil, nil, nil, nil, nil, - 219, nil, nil, nil, nil, 83, 75, 78, 79, nil, - 80, 81, nil, nil, nil, 76, 82, nil, 68, 69, - 65, nil, 51, 56, nil, 77, 57, 58, nil, nil, - nil, 61, nil, 59, 60, 62, 260, 261, 66, 67, - nil, nil, nil, nil, nil, 259, 290, 294, 92, 91, - 93, 94, nil, nil, 221, nil, nil, nil, nil, nil, - nil, 41, nil, nil, 96, 95, 97, 86, 50, 88, - 87, 89, nil, 90, 98, 99, nil, 84, 85, 38, - 39, 37, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 214, nil, nil, 220, nil, nil, 52, 53, nil, - nil, 54, nil, nil, nil, nil, nil, 40, nil, nil, - nil, nil, nil, nil, nil, 219, nil, nil, nil, nil, - 83, 75, 78, 79, nil, 80, 81, nil, nil, nil, - 76, 82, nil, 68, 69, 65, nil, 51, 56, nil, - 77, 57, 58, nil, nil, nil, 61, nil, 59, 60, - 62, 260, 261, 66, 67, nil, nil, nil, nil, nil, - 259, 290, 294, 92, 91, 93, 94, nil, nil, 221, - nil, nil, nil, nil, nil, nil, 41, nil, nil, 96, - 95, 97, 86, 50, 88, 87, 89, nil, 90, 98, - 99, nil, 84, 85, 38, 39, 37, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 214, nil, nil, 220, - nil, nil, 52, 53, nil, nil, 54, nil, nil, nil, - nil, nil, 40, nil, nil, nil, nil, nil, nil, nil, - 219, nil, nil, nil, nil, 83, 75, 78, 79, nil, - 80, 81, nil, nil, nil, 76, 82, nil, 68, 69, - 65, nil, 51, 56, nil, 77, 57, 58, nil, nil, - nil, 61, nil, 59, 60, 62, 260, 261, 66, 67, - nil, nil, nil, nil, nil, 259, 290, 294, 92, 91, - 93, 94, nil, nil, 221, nil, nil, nil, nil, nil, - nil, 41, nil, nil, 96, 95, 97, 86, 50, 88, - 87, 89, nil, 90, 98, 99, nil, 84, 85, 38, - 39, 37, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 214, nil, nil, 220, nil, nil, 52, 53, nil, - nil, 54, nil, nil, nil, nil, nil, 40, nil, nil, - nil, nil, nil, nil, nil, 219, nil, nil, nil, nil, - 83, 75, 78, 79, nil, 80, 81, nil, nil, nil, - 76, 82, nil, 68, 69, 65, nil, 51, 56, nil, - 77, 57, 58, nil, nil, nil, 61, nil, 59, 60, - 62, 260, 261, 66, 67, nil, nil, nil, nil, nil, - 259, 290, 294, 92, 91, 93, 94, nil, nil, 221, - nil, nil, nil, nil, nil, nil, 41, nil, nil, 96, - 95, 97, 86, 50, 88, 87, 89, nil, 90, 98, - 99, nil, 84, 85, 38, 39, 37, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 214, nil, nil, 220, - nil, nil, 52, 53, nil, nil, 54, nil, nil, nil, - nil, nil, 40, nil, nil, nil, nil, nil, nil, nil, - 219, nil, nil, nil, nil, 83, 75, 78, 79, nil, - 80, 81, nil, nil, nil, 76, 82, nil, 68, 69, - 65, nil, 51, 56, nil, 77, 57, 58, nil, nil, - nil, 61, nil, 59, 60, 62, 260, 261, 66, 67, - nil, nil, nil, nil, nil, 259, 290, 294, 92, 91, - 93, 94, nil, nil, 221, nil, nil, nil, nil, nil, - nil, 41, nil, nil, 96, 95, 97, 86, 50, 88, - 87, 89, nil, 90, 98, 99, nil, 84, 85, 38, - 39, 37, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 214, nil, nil, 220, nil, nil, 52, 53, nil, - nil, 54, nil, nil, nil, nil, nil, 40, nil, nil, - nil, nil, nil, nil, nil, 219, nil, nil, nil, nil, - 83, 75, 78, 79, nil, 80, 81, nil, nil, nil, - 76, 82, nil, 68, 69, 65, nil, 51, 56, nil, - 77, 57, 58, nil, nil, nil, 61, nil, 59, 60, - 62, 260, 261, 66, 67, nil, nil, nil, nil, nil, - 259, 290, 294, 92, 91, 93, 94, nil, nil, 221, - nil, nil, nil, nil, nil, nil, 41, nil, nil, 96, - 95, 97, 86, 50, 88, 87, 89, nil, 90, 98, - 99, nil, 84, 85, 38, 39, 37, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 214, nil, nil, 220, - nil, nil, 52, 53, nil, nil, 54, nil, nil, nil, - nil, nil, 40, nil, nil, nil, nil, nil, nil, nil, - 219, nil, nil, nil, nil, 83, 75, 78, 79, nil, - 80, 81, nil, nil, nil, 76, 82, nil, 68, 69, - 65, nil, 51, 56, nil, 77, 57, 58, nil, nil, - nil, 61, nil, 59, 60, 62, 260, 261, 66, 67, - nil, nil, nil, nil, nil, 259, 290, 294, 92, 91, - 93, 94, nil, nil, 221, nil, nil, nil, nil, nil, - nil, 41, nil, nil, 96, 95, 97, 86, 50, 88, - 87, 89, nil, 90, 98, 99, nil, 84, 85, 38, - 39, 37, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 214, nil, nil, 220, nil, nil, 52, 53, nil, - nil, 54, nil, nil, nil, nil, nil, 40, nil, nil, - nil, nil, nil, nil, nil, 219, nil, nil, nil, nil, - 83, 75, 78, 79, nil, 80, 81, nil, nil, nil, - 76, 82, nil, 68, 69, 65, nil, 51, 56, nil, - 77, 57, 58, nil, nil, nil, 61, nil, 59, 60, - 62, 260, 261, 66, 67, nil, nil, nil, nil, nil, - 259, 290, 294, 92, 91, 93, 94, nil, nil, 221, - nil, nil, nil, nil, nil, nil, 41, nil, nil, 96, - 95, 97, 86, 50, 88, 87, 89, nil, 90, 98, - 99, nil, 84, 85, 38, 39, 37, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 214, nil, nil, 220, - nil, nil, 52, 53, nil, nil, 54, nil, nil, nil, - nil, nil, 40, nil, nil, nil, nil, nil, nil, nil, - 219, nil, nil, nil, nil, 83, 75, 78, 79, nil, - 80, 81, nil, nil, nil, 76, 82, nil, 68, 69, - 65, nil, 51, 56, nil, 77, 57, 58, nil, nil, - nil, 61, nil, 59, 60, 62, 260, 261, 66, 67, - nil, nil, nil, nil, nil, 259, 290, 294, 92, 91, - 93, 94, nil, nil, 221, nil, nil, nil, nil, nil, - nil, 41, nil, nil, 96, 95, 97, 86, 50, 88, - 87, 89, nil, 90, 98, 99, nil, 84, 85, 38, - 39, 37, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 214, nil, nil, 220, nil, nil, 52, 53, nil, - nil, 54, nil, nil, nil, nil, nil, 40, nil, nil, - nil, nil, nil, nil, nil, 219, nil, nil, nil, nil, - 83, 75, 78, 79, nil, 80, 81, nil, nil, nil, - 76, 82, nil, 68, 69, 65, nil, 51, 56, nil, - 77, 57, 58, nil, nil, nil, 61, nil, 59, 60, - 62, 260, 261, 66, 67, nil, nil, nil, nil, nil, - 259, 290, 294, 92, 91, 93, 94, nil, nil, 221, - nil, nil, nil, nil, nil, nil, 41, nil, nil, 96, - 95, 97, 86, 50, 88, 87, 89, nil, 90, 98, - 99, nil, 84, 85, 38, 39, 37, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 214, nil, nil, 220, - nil, nil, 52, 53, nil, nil, 54, nil, nil, nil, - nil, nil, 40, nil, nil, nil, nil, nil, nil, nil, - 219, nil, nil, nil, nil, 83, 75, 78, 79, nil, - 80, 81, nil, nil, nil, 76, 82, nil, 68, 69, - 65, nil, 51, 56, nil, 77, 57, 58, nil, nil, - nil, 61, nil, 59, 60, 62, 260, 261, 66, 67, - nil, nil, nil, nil, nil, 259, 290, 294, 92, 91, - 93, 94, nil, nil, 221, nil, nil, nil, nil, nil, - nil, 41, nil, nil, 96, 95, 97, 86, 50, 88, - 87, 89, nil, 90, 98, 99, nil, 84, 85, 38, - 39, 37, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 214, nil, nil, 220, nil, nil, 52, 53, nil, - nil, 54, nil, nil, nil, nil, nil, 40, nil, nil, - nil, nil, nil, nil, nil, 219, nil, nil, nil, nil, - 83, 75, 78, 79, nil, 80, 81, nil, nil, nil, - 76, 82, nil, 68, 69, 65, nil, 51, 56, nil, - 77, 57, 58, nil, nil, nil, 61, nil, 59, 60, - 62, 260, 261, 66, 67, nil, nil, nil, nil, nil, - 259, 290, 294, 92, 91, 93, 94, nil, nil, 221, - nil, nil, nil, nil, nil, nil, 41, nil, nil, 96, - 95, 97, 86, 50, 88, 87, 89, nil, 90, 98, - 99, nil, 84, 85, 38, 39, 37, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 214, nil, nil, 220, - nil, nil, 52, 53, nil, nil, 54, nil, nil, nil, - nil, nil, 40, nil, nil, nil, nil, nil, nil, nil, - 219, nil, nil, nil, nil, 83, 75, 78, 79, nil, - 80, 81, nil, nil, nil, 76, 82, nil, 68, 69, - 65, nil, 51, 56, nil, 77, 57, 58, nil, nil, - nil, 61, nil, 59, 60, 62, 260, 261, 66, 67, - nil, nil, nil, nil, nil, 259, 290, 294, 92, 91, - 93, 94, nil, nil, 221, nil, nil, nil, nil, nil, - nil, 41, nil, nil, 96, 95, 97, 86, 50, 88, - 87, 89, nil, 90, 98, 99, nil, 84, 85, 38, - 39, 37, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 214, nil, nil, 220, nil, nil, 52, 53, nil, - nil, 54, nil, nil, nil, nil, nil, 40, nil, nil, - nil, nil, nil, nil, nil, 219, nil, nil, nil, nil, - 83, 75, 78, 79, nil, 80, 81, nil, nil, nil, - 76, 82, nil, 68, 69, 65, nil, 51, 56, nil, - 77, 57, 58, nil, nil, nil, 61, nil, 59, 60, - 62, 260, 261, 66, 67, nil, nil, nil, nil, nil, - 259, 290, 294, 92, 91, 93, 94, nil, nil, 221, - nil, nil, nil, nil, nil, nil, 41, nil, nil, 96, - 95, 97, 86, 50, 88, 87, 89, nil, 90, 98, - 99, nil, 84, 85, 38, 39, 37, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 214, nil, nil, 220, - nil, nil, 52, 53, nil, nil, 54, nil, nil, nil, - nil, nil, 40, nil, nil, nil, nil, nil, nil, nil, - 219, nil, nil, nil, nil, 83, 75, 78, 79, nil, - 80, 81, nil, nil, nil, 76, 82, nil, 68, 69, - 65, nil, 51, 56, nil, 77, 57, 58, nil, nil, - nil, 61, nil, 59, 60, 62, 260, 261, 66, 67, - nil, nil, nil, nil, nil, 259, 290, 294, 92, 91, - 93, 94, nil, nil, 221, nil, nil, nil, nil, nil, - nil, 41, nil, nil, 96, 95, 97, 86, 50, 88, - 87, 89, nil, 90, 98, 99, nil, 84, 85, 38, - 39, 37, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 214, nil, nil, 220, nil, nil, 52, 53, nil, - nil, 54, nil, nil, nil, nil, nil, 40, nil, nil, - nil, nil, nil, nil, nil, 219, nil, nil, nil, nil, - 83, 75, 78, 79, nil, 80, 81, nil, nil, nil, - 76, 82, nil, 68, 69, 65, nil, 51, 56, nil, - 77, 57, 58, nil, nil, nil, 61, nil, 59, 60, - 62, 260, 261, 66, 67, nil, nil, nil, nil, nil, - 259, 290, 294, 92, 91, 93, 94, nil, nil, 221, - nil, nil, nil, nil, nil, nil, 41, nil, nil, 96, - 95, 97, 86, 50, 88, 87, 89, nil, 90, 98, - 99, nil, 84, 85, 38, 39, 37, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 214, nil, nil, 220, - nil, nil, 52, 53, nil, nil, 54, nil, nil, nil, - nil, nil, 40, nil, nil, nil, nil, nil, nil, nil, - 219, nil, nil, nil, nil, 83, 75, 78, 79, nil, - 80, 81, nil, nil, nil, 76, 82, nil, 68, 69, - 65, nil, 51, 56, nil, 77, 57, 58, nil, nil, - nil, 61, nil, 59, 60, 62, 260, 261, 66, 67, - nil, nil, nil, nil, nil, 259, 290, 294, 92, 91, - 93, 94, nil, nil, 221, nil, nil, nil, nil, nil, - nil, 41, nil, nil, 96, 95, 97, 86, 50, 88, - 87, 89, nil, 90, 98, 99, nil, 84, 85, 38, - 39, 37, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 214, nil, nil, 220, nil, nil, 52, 53, nil, - nil, 54, nil, nil, nil, nil, nil, 40, nil, nil, - nil, nil, nil, nil, nil, 219, nil, nil, nil, nil, - 83, 75, 78, 79, nil, 80, 81, nil, nil, nil, - 76, 82, nil, 68, 69, 65, nil, 51, 56, nil, - 77, 57, 58, nil, nil, nil, 61, nil, 59, 60, - 62, 260, 261, 66, 67, nil, nil, nil, nil, nil, - 259, 290, 294, 92, 91, 93, 94, nil, nil, 221, - nil, nil, nil, nil, nil, nil, 41, nil, nil, 96, - 95, 97, 86, 50, 88, 87, 89, nil, 90, 98, - 99, nil, 84, 85, 38, 39, 37, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 214, nil, nil, 220, - nil, nil, 52, 53, nil, nil, 54, nil, nil, nil, - nil, nil, 40, nil, nil, nil, nil, nil, nil, nil, - 219, nil, nil, nil, nil, 83, 75, 78, 79, nil, - 80, 81, nil, nil, nil, 76, 82, nil, 68, 69, - 65, nil, 51, 56, nil, 77, 57, 58, nil, nil, - nil, 61, nil, 59, 60, 62, 260, 261, 66, 67, - nil, nil, nil, nil, nil, 259, 290, 294, 92, 91, - 93, 94, nil, nil, 221, nil, nil, nil, nil, nil, - nil, 41, nil, nil, 96, 95, 97, 86, 50, 88, - 87, 89, nil, 90, 98, 99, nil, 84, 85, 38, - 39, 37, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 214, nil, nil, 220, nil, nil, 52, 53, nil, - nil, 54, nil, nil, nil, nil, nil, 40, nil, nil, - nil, nil, nil, nil, nil, 219, nil, nil, nil, nil, - 83, 75, 78, 79, nil, 80, 81, nil, nil, nil, - 76, 82, nil, 68, 69, 65, nil, 51, 56, nil, - 77, 57, 58, nil, nil, nil, 61, nil, 59, 60, - 62, 260, 261, 66, 67, nil, nil, nil, nil, nil, - 259, 290, 294, 92, 91, 93, 94, nil, nil, 221, - nil, nil, nil, nil, nil, nil, 41, nil, nil, 96, - 95, 97, 86, 50, 88, 87, 89, nil, 90, 98, - 99, nil, 84, 85, 38, 39, 37, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 214, nil, nil, 220, - nil, nil, 52, 53, nil, nil, 54, nil, nil, nil, - nil, nil, 40, nil, nil, nil, nil, nil, nil, nil, - 219, nil, nil, nil, nil, 83, 75, 78, 79, nil, - 80, 81, nil, nil, nil, 76, 82, nil, 68, 69, - 65, nil, 51, 56, nil, 77, 57, 58, nil, nil, - nil, 61, nil, 59, 60, 62, 260, 261, 66, 67, - nil, nil, nil, nil, nil, 259, 290, 294, 92, 91, - 93, 94, nil, nil, 221, nil, nil, nil, nil, nil, - nil, 41, nil, nil, 96, 95, 97, 86, 50, 88, - 87, 89, nil, 90, 98, 99, nil, 84, 85, 38, - 39, 37, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 214, nil, nil, 220, nil, nil, 52, 53, nil, - nil, 54, nil, nil, nil, nil, nil, 40, nil, nil, - nil, nil, nil, nil, nil, 219, nil, nil, nil, nil, - 83, 75, 78, 79, nil, 80, 81, nil, nil, nil, - 76, 82, nil, 68, 69, 65, nil, 51, 56, nil, - 77, 57, 58, nil, nil, nil, 61, nil, 59, 60, - 62, 260, 261, 66, 67, nil, nil, nil, nil, nil, - 259, 290, 294, 92, 91, 93, 94, nil, nil, 221, - nil, nil, nil, nil, nil, nil, 41, nil, nil, 96, - 95, 97, 86, 50, 88, 87, 89, nil, 90, 98, - 99, nil, 84, 85, 38, 39, 37, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 214, nil, nil, 220, - nil, nil, 52, 53, nil, nil, 54, nil, nil, nil, - nil, nil, 40, nil, nil, nil, nil, nil, nil, nil, - 219, nil, nil, nil, nil, 83, 75, 78, 79, nil, - 80, 81, nil, nil, nil, 76, 82, nil, 68, 69, - 65, nil, 51, 56, nil, 77, 57, 58, nil, nil, - nil, 61, nil, 59, 60, 62, 260, 261, 66, 67, - nil, nil, nil, nil, nil, 259, 290, 294, 92, 91, - 93, 94, nil, nil, 221, nil, nil, nil, nil, nil, - nil, 41, nil, nil, 96, 95, 97, 86, 50, 88, - 87, 89, nil, 90, 98, 99, nil, 84, 85, 38, - 39, 37, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 214, nil, nil, 220, nil, nil, 52, 53, nil, - nil, 54, nil, nil, nil, nil, nil, 40, nil, nil, - nil, nil, nil, nil, nil, 219, nil, nil, nil, nil, - 83, 75, 78, 79, nil, 80, 81, nil, nil, nil, - 76, 82, nil, 68, 69, 65, nil, 51, 56, nil, - 77, 57, 58, nil, nil, nil, 61, nil, 59, 60, - 62, 260, 261, 66, 67, nil, nil, nil, nil, nil, - 259, 290, 294, 92, 91, 93, 94, nil, nil, 221, - nil, nil, nil, nil, nil, nil, 41, nil, nil, 96, - 95, 97, 86, 50, 88, 87, 89, nil, 90, 98, - 99, nil, 84, 85, 38, 39, 37, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 214, nil, nil, 220, - nil, nil, 52, 53, nil, nil, 54, nil, nil, nil, - nil, nil, 40, nil, nil, nil, nil, nil, nil, nil, - 219, nil, nil, nil, nil, 83, 75, 78, 79, nil, - 80, 81, nil, nil, nil, 76, 82, nil, 68, 69, - 65, nil, 51, 56, nil, 77, 57, 58, nil, nil, - nil, 61, nil, 59, 60, 62, 260, 261, 66, 67, - nil, nil, nil, nil, nil, 259, 290, 294, 92, 91, - 93, 94, nil, nil, 221, nil, nil, nil, nil, nil, - nil, 41, nil, nil, 96, 95, 97, 86, 50, 88, - 87, 89, nil, 90, 98, 99, nil, 84, 85, 38, - 39, 37, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 214, nil, nil, 220, nil, nil, 52, 53, nil, - nil, 54, nil, nil, nil, nil, nil, 40, nil, nil, - nil, nil, nil, nil, nil, 219, nil, nil, nil, nil, - 83, 75, 78, 79, nil, 80, 81, nil, nil, nil, - 76, 82, nil, 68, 69, 65, nil, 51, 56, nil, - 77, 57, 58, nil, nil, nil, 61, nil, 59, 60, - 62, 260, 261, 66, 67, nil, nil, nil, nil, nil, - 259, 28, 27, 92, 91, 93, 94, nil, nil, 221, - nil, nil, nil, nil, nil, nil, 41, nil, nil, 96, - 95, 97, 86, 50, 88, 87, 89, 263, 90, 98, - 99, nil, 84, 85, 38, 39, 37, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 214, nil, nil, 220, - nil, nil, 52, 53, nil, nil, 54, nil, 258, nil, - 256, nil, 40, nil, nil, nil, nil, nil, nil, nil, - 219, nil, nil, nil, nil, 83, 75, 78, 79, nil, - 80, 81, nil, nil, nil, 76, 82, nil, 68, 69, - 65, nil, 51, 56, nil, 77, 57, 58, nil, nil, - nil, 61, nil, 59, 60, 62, 260, 261, 66, 67, - nil, nil, nil, nil, nil, 259, 28, 27, 92, 91, - 93, 94, nil, nil, 221, nil, nil, nil, nil, nil, - nil, 41, nil, nil, 96, 95, 97, 86, 50, 88, - 87, 89, 263, 90, 98, 99, nil, 84, 85, 38, - 39, 37, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 214, nil, nil, 220, nil, nil, 464, 53, nil, - nil, 54, nil, 258, nil, 256, nil, 40, nil, nil, - nil, nil, nil, nil, nil, 219, nil, nil, nil, nil, - 83, 75, 78, 79, nil, 80, 81, nil, nil, nil, - 76, 82, nil, 68, 69, 65, nil, 51, 56, nil, - 77, 57, 58, nil, nil, nil, 61, nil, 59, 60, - 62, 260, 261, 66, 67, nil, nil, nil, nil, nil, - 259, 28, 27, 92, 91, 93, 94, nil, nil, 221, - nil, nil, nil, nil, nil, nil, 41, nil, nil, 96, - 95, 97, 86, 50, 88, 87, 89, 263, 90, 98, - 99, nil, 84, 85, 38, 39, 37, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 214, nil, nil, 220, - nil, nil, 52, 53, nil, nil, 54, nil, 258, nil, - 256, nil, 40, nil, nil, nil, nil, nil, nil, nil, - 219, nil, nil, nil, nil, 83, 75, 78, 79, nil, - 80, 81, nil, nil, nil, 76, 82, 210, 68, 69, - 65, nil, 51, 56, nil, 77, 57, 58, nil, nil, - nil, 61, nil, 59, 60, 62, 260, 261, 66, 67, - nil, nil, nil, nil, nil, 259, 290, 294, 92, 91, - 93, 94, nil, nil, 221, nil, nil, nil, nil, nil, - nil, 291, nil, nil, 96, 95, 97, 86, 50, 88, - 87, 89, nil, 90, 98, 99, nil, 84, 85, nil, - nil, 295, 229, 233, 238, 239, 240, 235, 237, 245, - 246, 241, 242, nil, 222, 223, nil, nil, 243, 244, - nil, 288, nil, nil, 220, nil, nil, 52, 53, nil, - nil, 54, nil, nil, 226, nil, 232, nil, 228, 227, - 224, 225, 236, 234, 230, nil, 231, nil, nil, nil, - 83, 75, 78, 79, nil, 80, 81, nil, nil, nil, - 76, 82, nil, 247, nil, 474, nil, nil, 56, nil, - 77, 68, 69, 65, nil, 51, nil, nil, nil, 57, - 58, nil, nil, nil, 61, nil, 59, 60, 62, 260, - 261, 66, 67, nil, nil, nil, nil, nil, 259, 290, - 294, 92, 91, 93, 94, nil, nil, 221, nil, nil, - nil, nil, nil, nil, 291, nil, nil, 96, 95, 97, - 86, 50, 88, 87, 89, nil, 90, 98, 99, nil, - 84, 85, nil, 644, 295, 641, 640, 639, 645, 642, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 288, nil, nil, 285, nil, nil, - 52, 53, nil, nil, 54, nil, nil, nil, nil, nil, - 647, nil, nil, nil, nil, nil, nil, nil, nil, 651, - 650, 654, 653, 83, 75, 78, 79, nil, 80, 81, - nil, nil, nil, 76, 82, nil, 68, 69, 65, nil, - 51, 56, nil, 77, 57, 58, nil, nil, nil, 61, - nil, 59, 60, 62, 260, 261, 66, 67, nil, nil, - nil, nil, nil, 259, 290, 294, 92, 91, 93, 94, - nil, nil, 221, nil, nil, nil, nil, nil, nil, 41, - nil, nil, 96, 95, 97, 86, 50, 88, 87, 89, - nil, 90, 98, 99, nil, 84, 85, 38, 39, 37, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 214, - nil, nil, 220, 492, nil, 52, 53, nil, nil, 54, - nil, nil, nil, nil, nil, 40, nil, nil, nil, nil, - nil, nil, nil, 219, nil, nil, nil, nil, 83, 75, - 78, 79, nil, 80, 81, nil, nil, nil, 76, 82, - nil, 68, 69, 65, nil, 51, 56, nil, 77, 57, - 58, nil, nil, nil, 61, nil, 59, 60, 62, 23, - 24, 66, 67, nil, nil, nil, nil, nil, 22, 28, - 27, 92, 91, 93, 94, nil, nil, 17, nil, nil, - nil, nil, nil, nil, 41, nil, nil, 96, 95, 97, - 86, 50, 88, 87, 89, nil, 90, 98, 99, nil, - 84, 85, 38, 39, 37, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 214, nil, nil, 220, nil, nil, - 52, 53, nil, nil, 54, nil, nil, nil, nil, nil, - 40, nil, nil, nil, nil, nil, nil, nil, 18, nil, - nil, nil, nil, 83, 75, 78, 79, nil, 80, 81, - nil, nil, nil, 76, 82, nil, 68, 69, 65, nil, - 51, 56, nil, 77, 57, 58, nil, nil, nil, 61, - nil, 59, 60, 62, 23, 24, 66, 67, nil, nil, - nil, nil, nil, 22, 28, 27, 92, 91, 93, 94, - nil, nil, 17, nil, nil, nil, nil, nil, nil, 41, - nil, nil, 96, 95, 97, 86, 50, 88, 87, 89, - nil, 90, 98, 99, nil, 84, 85, 38, 39, 37, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 214, - nil, nil, 220, nil, nil, 52, 53, nil, nil, 54, - nil, nil, nil, nil, nil, 40, nil, nil, nil, nil, - nil, nil, nil, 18, nil, nil, nil, nil, 83, 75, - 78, 79, nil, 80, 81, nil, nil, nil, 76, 82, - nil, 68, 69, 65, nil, 51, 56, nil, 77, 57, - 58, nil, nil, nil, 61, nil, 59, 60, 62, 23, - 24, 66, 67, nil, nil, nil, nil, nil, 22, 28, - 27, 92, 91, 93, 94, nil, nil, 17, nil, nil, - nil, nil, nil, nil, 41, nil, nil, 96, 95, 97, - 86, 50, 88, 87, 89, nil, 90, 98, 99, nil, - 84, 85, 38, 39, 37, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 214, nil, nil, 220, nil, nil, - 52, 53, nil, nil, 54, nil, nil, nil, nil, nil, - 40, nil, nil, nil, nil, nil, nil, nil, 18, nil, - nil, nil, nil, 83, 75, 78, 79, nil, 80, 81, - nil, nil, nil, 76, 82, nil, 68, 69, 65, nil, - 51, 56, nil, 77, 57, 58, nil, nil, nil, 61, - nil, 59, 60, 62, 23, 24, 66, 67, nil, nil, - nil, nil, nil, 22, 28, 27, 92, 91, 93, 94, - nil, nil, 17, nil, nil, nil, nil, nil, nil, 41, - nil, nil, 96, 95, 97, 86, 50, 88, 87, 89, - nil, 90, 98, 99, nil, 84, 85, 38, 39, 37, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 214, - nil, nil, 220, nil, nil, 52, 53, nil, nil, 54, - nil, nil, nil, nil, nil, 40, nil, nil, nil, nil, - nil, nil, nil, 18, nil, nil, nil, nil, 83, 75, - 78, 79, nil, 80, 81, nil, nil, nil, 76, 82, - nil, 68, 69, 65, nil, 51, 56, nil, 77, 57, - 58, nil, nil, nil, 61, nil, 59, 60, 62, 260, - 261, 66, 67, nil, nil, nil, nil, nil, 259, 290, - 294, 92, 91, 93, 94, nil, nil, 221, nil, nil, - nil, nil, nil, nil, 41, nil, nil, 96, 95, 97, - 86, 50, 88, 87, 89, nil, 90, 98, 99, nil, - 84, 85, 38, 39, 37, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 214, nil, nil, 220, nil, nil, - 52, 53, nil, nil, 54, nil, nil, nil, nil, nil, - 40, nil, nil, nil, nil, nil, nil, nil, 219, nil, - nil, nil, nil, 83, 75, 78, 79, nil, 80, 81, - nil, nil, nil, 76, 82, nil, 68, 69, 65, nil, - 51, 56, nil, 77, 57, 58, nil, nil, nil, 61, - nil, 59, 60, 62, 260, 261, 66, 67, nil, nil, - nil, nil, nil, 259, 28, 27, 92, 91, 93, 94, - nil, nil, 221, nil, nil, nil, nil, nil, nil, 41, - nil, nil, 96, 95, 97, 86, 50, 88, 87, 89, - 263, 90, 98, 99, nil, 84, 85, 38, 39, 37, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 214, - nil, nil, 220, nil, nil, 52, 53, nil, nil, 54, - nil, 258, nil, 256, nil, 40, nil, nil, nil, nil, - nil, nil, nil, 219, nil, nil, nil, nil, 83, 75, - 78, 79, nil, 80, 81, nil, nil, nil, 76, 82, - nil, 68, 69, 65, nil, 51, 56, nil, 77, 57, - 58, nil, nil, nil, 61, nil, 59, 60, 62, 260, - 261, 66, 67, nil, nil, nil, nil, nil, 259, 290, - 294, 92, 91, 93, 94, nil, nil, 221, nil, nil, - nil, nil, nil, nil, 41, nil, nil, 96, 95, 97, - 86, 50, 88, 87, 89, nil, 90, 98, 99, nil, - 84, 85, 38, 39, 37, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 214, nil, nil, 220, nil, nil, - 52, 53, nil, nil, 54, nil, nil, nil, nil, nil, - 40, nil, nil, nil, nil, nil, nil, nil, 219, nil, - nil, nil, nil, 83, 75, 78, 79, nil, 80, 81, - nil, nil, nil, 76, 82, nil, 68, 69, 65, nil, - 51, 56, nil, 77, 57, 58, nil, nil, nil, 61, - nil, 59, 60, 62, 260, 261, 66, 67, nil, nil, - nil, nil, nil, 259, 290, 294, 92, 91, 93, 94, - nil, nil, 221, nil, nil, nil, nil, nil, nil, 41, - nil, nil, 96, 95, 97, 86, 50, 88, 87, 89, - nil, 90, 98, 99, nil, 84, 85, 38, 39, 37, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 214, - nil, nil, 220, nil, nil, 52, 53, nil, nil, 54, - nil, nil, nil, nil, nil, 40, nil, nil, nil, nil, - nil, nil, nil, 219, nil, nil, nil, nil, 83, 75, - 78, 79, nil, 80, 81, nil, nil, nil, 76, 82, - nil, 68, 69, 65, nil, 51, 56, nil, 77, 57, - 58, nil, nil, nil, 61, nil, 59, 60, 62, 260, - 261, 66, 67, nil, nil, nil, nil, nil, 259, 290, - 294, 92, 91, 93, 94, nil, nil, 221, nil, nil, - nil, nil, nil, nil, 41, nil, nil, 96, 95, 97, - 86, 50, 88, 87, 89, nil, 90, 98, 99, nil, - 84, 85, 38, 39, 37, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 214, nil, nil, 220, nil, nil, - 52, 53, nil, nil, 54, nil, nil, nil, nil, nil, - 40, nil, nil, nil, nil, nil, nil, nil, 219, nil, - nil, nil, nil, 83, 75, 78, 79, nil, 80, 81, - nil, nil, nil, 76, 82, nil, 68, 69, 65, nil, - 51, 56, nil, 77, 57, 58, nil, nil, nil, 61, - nil, 59, 60, 62, 260, 261, 66, 67, nil, nil, - nil, nil, nil, 259, 290, 294, 92, 91, 93, 94, - nil, nil, 221, nil, nil, nil, nil, nil, nil, 41, - nil, nil, 96, 95, 97, 86, 50, 88, 87, 89, - 263, 90, 98, 99, nil, 84, 85, 38, 39, 37, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 214, - nil, nil, 220, nil, nil, 52, 53, nil, nil, 54, - nil, 588, nil, 256, nil, 40, nil, nil, nil, nil, - nil, nil, nil, 219, nil, nil, nil, nil, 83, 75, - 78, 79, nil, 80, 81, nil, nil, nil, 76, 82, - nil, 68, 69, 65, nil, 51, 56, nil, 77, 57, - 58, nil, nil, nil, 61, nil, 59, 60, 62, 260, - 261, 66, 67, nil, nil, nil, nil, nil, 259, 290, - 294, 92, 91, 93, 94, nil, nil, 221, nil, nil, - nil, nil, nil, nil, 41, nil, nil, 96, 95, 97, - 86, 50, 88, 87, 89, 263, 90, 98, 99, nil, - 84, 85, 38, 39, 37, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 214, nil, nil, 220, nil, nil, - 52, 53, nil, nil, 54, nil, nil, nil, 256, nil, - 40, nil, nil, nil, nil, nil, nil, nil, 219, nil, - nil, nil, nil, 83, 75, 78, 79, nil, 80, 81, - nil, nil, nil, 76, 82, nil, 68, 69, 65, nil, - 51, 56, nil, 77, 57, 58, nil, nil, nil, 61, - nil, 59, 60, 62, 260, 261, 66, 67, nil, nil, - nil, nil, nil, 259, 290, 294, 92, 91, 93, 94, - nil, nil, 221, nil, nil, nil, nil, nil, nil, 41, - nil, nil, 96, 95, 97, 86, 50, 88, 87, 89, - nil, 90, 98, 99, nil, 84, 85, 38, 39, 37, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 214, - nil, nil, 220, nil, nil, 52, 53, nil, nil, 54, - nil, nil, nil, nil, nil, 40, nil, nil, nil, nil, - nil, nil, nil, 219, nil, nil, nil, nil, 83, 75, - 78, 79, nil, 80, 81, nil, nil, nil, 76, 82, - nil, 68, 69, 65, nil, 51, 56, nil, 77, 57, - 58, nil, nil, nil, 61, nil, 59, 60, 62, 23, - 24, 66, 67, nil, nil, nil, nil, nil, 22, 28, - 27, 92, 91, 93, 94, nil, nil, 17, nil, nil, - nil, nil, nil, nil, 41, nil, nil, 96, 95, 97, - 86, 50, 88, 87, 89, 263, 90, 98, 99, nil, - 84, 85, 38, 39, 37, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 214, nil, nil, 220, nil, nil, - 52, 53, nil, nil, 54, nil, nil, nil, 256, nil, - 40, nil, nil, nil, nil, nil, nil, nil, 18, nil, - nil, nil, nil, 83, 75, 78, 79, nil, 80, 81, - nil, nil, nil, 76, 82, nil, 68, 69, 65, nil, - 51, 56, nil, 77, 57, 58, nil, nil, nil, 61, - nil, 59, 60, 62, 260, 261, 66, 67, nil, nil, - nil, nil, nil, 259, 290, 294, 92, 91, 93, 94, - nil, nil, 221, nil, nil, nil, nil, nil, nil, 291, - nil, nil, 96, 95, 97, 86, 50, 88, 87, 89, - nil, 90, 98, 99, nil, 84, 85, nil, 724, 295, - 641, 640, 639, 645, 642, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 288, - nil, nil, 285, nil, nil, 52, 53, nil, nil, 54, - nil, nil, nil, nil, nil, 647, nil, nil, nil, nil, - nil, nil, nil, nil, 651, 650, 654, 653, 83, 75, - 78, 79, nil, 80, 81, nil, nil, nil, 76, 82, - nil, 68, 69, 65, nil, 51, 56, nil, 77, 57, - 58, nil, nil, nil, 61, nil, 59, 60, 62, 260, - 261, 66, 67, nil, nil, nil, nil, nil, 259, 28, - 27, 92, 91, 93, 94, nil, nil, 221, nil, nil, - nil, nil, nil, nil, 41, nil, nil, 96, 95, 97, - 86, 50, 88, 87, 89, 263, 90, 98, 99, nil, - 84, 85, 38, 39, 37, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 214, nil, nil, 220, nil, nil, - 52, 53, nil, nil, 54, nil, 258, nil, 256, nil, - 40, nil, nil, nil, nil, nil, nil, nil, 219, nil, - nil, nil, nil, 83, 75, 78, 79, nil, 80, 81, - nil, nil, nil, 76, 82, nil, 68, 69, 65, nil, - 51, 56, nil, 77, 57, 58, nil, nil, nil, 61, - nil, 59, 60, 62, 260, 261, 66, 67, nil, nil, - nil, nil, nil, 259, 290, 294, 92, 91, 93, 94, - nil, nil, 221, nil, nil, nil, nil, nil, nil, 291, - nil, nil, 96, 95, 97, 86, 50, 88, 87, 89, - nil, 90, 98, 99, nil, 84, 85, nil, nil, 295, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 288, - nil, nil, 285, nil, nil, 52, 53, nil, nil, 54, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 83, 75, - 78, 79, nil, 80, 81, nil, nil, nil, 76, 82, - nil, 68, 69, 65, nil, 51, 56, nil, 77, 57, - 58, nil, nil, nil, 61, nil, 59, 60, 62, 260, - 261, 66, 67, nil, nil, nil, nil, nil, 259, 290, - 294, 92, 91, 93, 94, nil, nil, 221, nil, nil, - nil, nil, nil, nil, 41, nil, nil, 96, 95, 97, - 86, 50, 88, 87, 89, nil, 90, 98, 99, nil, - 84, 85, 38, 39, 37, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 214, nil, nil, 220, nil, nil, - 52, 53, nil, nil, 54, nil, nil, nil, nil, nil, - 40, nil, nil, nil, nil, nil, nil, nil, 219, nil, - nil, nil, nil, 83, 75, 78, 79, nil, 80, 81, - nil, nil, nil, 76, 82, nil, 68, 69, 65, nil, - 51, 56, nil, 77, 57, 58, nil, nil, nil, 61, - nil, 59, 60, 62, 260, 261, 66, 67, nil, nil, - nil, nil, nil, 259, 290, 294, 92, 91, 93, 94, - nil, nil, 221, nil, nil, nil, nil, nil, nil, 41, - nil, nil, 96, 95, 97, 86, 50, 88, 87, 89, - nil, 90, 98, 99, nil, 84, 85, 38, 39, 37, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 214, - nil, nil, 220, nil, nil, 52, 53, nil, nil, 54, - nil, nil, nil, nil, nil, 40, nil, nil, nil, nil, - nil, nil, nil, 219, nil, nil, nil, nil, 83, 75, - 78, 79, nil, 80, 81, nil, nil, nil, 76, 82, - nil, 68, 69, 65, nil, 51, 56, nil, 77, 57, - 58, nil, nil, nil, 61, nil, 59, 60, 62, 260, - 261, 66, 67, nil, nil, nil, nil, nil, 259, 290, - 294, 92, 91, 93, 94, nil, nil, 221, nil, nil, - nil, nil, nil, nil, 41, nil, nil, 96, 95, 97, - 86, 50, 88, 87, 89, nil, 90, 98, 99, nil, - 84, 85, 38, 39, 37, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 214, nil, nil, 220, nil, nil, - 52, 53, nil, nil, 54, nil, nil, nil, nil, nil, - 40, nil, nil, nil, nil, nil, nil, nil, 219, nil, - nil, nil, nil, 83, 75, 78, 79, nil, 80, 81, - nil, nil, nil, 76, 82, nil, 68, 69, 65, nil, - 51, 56, nil, 77, 57, 58, nil, nil, nil, 61, - nil, 59, 60, 62, 23, 24, 66, 67, nil, nil, - nil, nil, nil, 22, 28, 27, 92, 91, 93, 94, - nil, nil, 17, nil, nil, nil, nil, nil, nil, 41, - nil, nil, 96, 95, 97, 86, 50, 88, 87, 89, - nil, 90, 98, 99, nil, 84, 85, 38, 39, 37, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 214, - nil, nil, 220, nil, nil, 52, 53, nil, nil, 54, - nil, nil, nil, nil, nil, 40, nil, nil, nil, nil, - nil, nil, nil, 18, nil, nil, nil, nil, 83, 75, - 78, 79, nil, 80, 81, nil, nil, nil, 76, 82, - nil, 68, 69, 65, nil, 51, 56, nil, 77, 57, - 58, nil, nil, nil, 61, nil, 59, 60, 62, 260, - 261, 66, 67, nil, nil, nil, nil, nil, 259, 290, - 294, 92, 91, 93, 94, nil, nil, 221, nil, nil, - nil, nil, nil, nil, 41, nil, nil, 96, 95, 97, - 86, 50, 88, 87, 89, nil, 90, 98, 99, nil, - 84, 85, 38, 39, 37, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 214, nil, nil, 220, nil, nil, - 52, 53, nil, nil, 54, nil, 383, nil, nil, nil, - 40, nil, nil, nil, nil, nil, nil, nil, 219, nil, - nil, nil, nil, 83, 75, 78, 79, nil, 80, 81, - nil, nil, nil, 76, 82, nil, 68, 69, 65, nil, - 51, 56, nil, 77, 57, 58, nil, nil, nil, 61, - nil, 59, 60, 62, 260, 261, 66, 67, nil, nil, - nil, nil, nil, 259, 290, 294, 92, 91, 93, 94, - nil, nil, 221, nil, nil, nil, nil, nil, nil, 41, - nil, nil, 96, 95, 97, 86, 50, 88, 87, 89, - 263, 90, 98, 99, nil, 84, 85, 38, 39, 37, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 214, - nil, nil, 220, nil, nil, 52, 53, nil, nil, 54, - nil, 588, nil, nil, nil, 40, nil, nil, nil, nil, - nil, nil, nil, 219, nil, nil, nil, nil, 83, 75, - 78, 79, nil, 80, 81, nil, nil, nil, 76, 82, - nil, 68, 69, 65, nil, 51, 56, nil, 77, 57, - 58, nil, nil, nil, 61, nil, 59, 60, 62, 260, - 261, 66, 67, nil, nil, nil, nil, nil, 259, 290, - 294, 92, 91, 93, 94, nil, nil, 221, nil, nil, - nil, nil, nil, nil, 41, nil, nil, 96, 95, 97, - 86, 50, 88, 87, 89, 263, 90, 98, 99, nil, - 84, 85, 38, 39, 37, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 214, nil, nil, 220, nil, nil, - 52, 53, nil, nil, 54, nil, nil, nil, nil, nil, - 40, nil, nil, nil, nil, nil, nil, nil, 219, nil, - nil, nil, nil, 83, 75, 78, 79, nil, 80, 81, - nil, nil, nil, 76, 82, nil, 68, 69, 65, nil, - 51, 56, nil, 77, 57, 58, nil, nil, nil, 61, - nil, 59, 60, 62, 260, 261, 66, 67, nil, nil, - nil, nil, nil, 259, 290, 294, 92, 91, 93, 94, - nil, nil, 221, nil, nil, nil, nil, nil, nil, 41, - nil, nil, 96, 95, 97, 86, 50, 88, 87, 89, - nil, 90, 98, 99, nil, 84, 85, 38, 39, 37, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 214, - nil, nil, 220, nil, nil, 52, 53, nil, nil, 54, - nil, 258, nil, nil, nil, 40, nil, nil, nil, nil, - nil, nil, nil, 219, nil, nil, nil, nil, 83, 75, - 78, 79, nil, 80, 81, nil, nil, nil, 76, 82, - nil, 68, 69, 65, nil, 51, 56, nil, 77, 57, - 58, nil, nil, nil, 61, nil, 59, 60, 62, 260, - 261, 66, 67, nil, nil, nil, nil, nil, 259, 28, - 27, 92, 91, 93, 94, nil, nil, 221, nil, nil, - nil, nil, nil, nil, 41, nil, nil, 96, 95, 97, - 86, 50, 88, 87, 89, 263, 90, 98, 99, nil, - 84, 85, 38, 39, 37, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 214, nil, nil, 220, nil, nil, - 52, 53, nil, nil, 54, nil, 258, nil, 256, nil, - 40, nil, nil, nil, nil, nil, nil, nil, 219, nil, - nil, nil, nil, 83, 75, 78, 79, nil, 80, 81, - nil, nil, nil, 76, 82, nil, 68, 69, 65, nil, - 51, 56, nil, 77, 57, 58, nil, nil, nil, 61, - nil, 59, 60, 62, 260, 261, 66, 67, nil, nil, - nil, nil, nil, 259, 28, 27, 92, 91, 93, 94, - nil, nil, 221, nil, nil, nil, nil, nil, nil, 41, - nil, nil, 96, 95, 97, 86, 50, 88, 87, 89, - 263, 90, 98, 99, nil, 84, 85, 38, 39, 37, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 214, - nil, nil, 220, nil, nil, 52, 53, nil, nil, 54, - nil, 258, nil, 256, nil, 40, nil, nil, nil, nil, - nil, nil, nil, 219, nil, nil, nil, nil, 83, 75, - 78, 79, nil, 80, 81, nil, nil, nil, 76, 82, - nil, 68, 69, 65, nil, 51, 56, nil, 77, 57, - 58, nil, nil, nil, 61, nil, 59, 60, 62, 23, - 24, 66, 67, nil, nil, nil, nil, nil, 22, 28, - 27, 92, 91, 93, 94, nil, nil, 17, nil, nil, - nil, nil, nil, nil, 41, nil, nil, 96, 95, 97, - 86, 50, 88, 87, 89, nil, 90, 98, 99, nil, - 84, 85, 38, 39, 37, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 214, nil, nil, 220, nil, nil, - 52, 53, nil, nil, 54, nil, nil, nil, nil, nil, - 40, nil, nil, nil, nil, nil, nil, nil, 18, nil, - nil, nil, nil, 83, 75, 78, 79, nil, 80, 81, - nil, nil, nil, 76, 82, nil, 68, 69, 65, nil, - 51, 56, nil, 77, 57, 58, nil, nil, nil, 61, - nil, 59, 60, 62, 260, 261, 66, 67, nil, nil, - nil, nil, nil, 259, 290, 294, 92, 91, 93, 94, - nil, nil, 221, nil, nil, nil, nil, nil, nil, 41, - nil, nil, 96, 95, 97, 86, 50, 88, 87, 89, - nil, 90, 98, 99, nil, 84, 85, 38, 39, 37, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 214, - nil, nil, 220, nil, nil, 52, 53, nil, nil, 54, - nil, nil, nil, nil, nil, 40, nil, nil, nil, nil, - nil, nil, nil, 219, nil, nil, nil, nil, 83, 75, - 78, 79, nil, 80, 81, nil, nil, nil, 76, 82, - nil, 68, 69, 65, nil, 51, 56, nil, 77, 57, - 58, nil, nil, nil, 61, nil, 59, 60, 62, 260, - 261, 66, 67, nil, nil, nil, nil, nil, 259, 290, - 294, 92, 91, 93, 94, nil, nil, 221, nil, nil, - nil, nil, nil, nil, 41, nil, nil, 96, 95, 97, - 86, 50, 88, 87, 89, nil, 90, 98, 99, nil, - 84, 85, 38, 39, 37, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 214, nil, nil, 220, nil, nil, - 52, 53, nil, nil, 54, nil, 699, nil, nil, nil, - 40, nil, nil, nil, nil, nil, nil, nil, 219, nil, - nil, nil, nil, 83, 75, 78, 79, nil, 80, 81, - nil, nil, nil, 76, 82, nil, 68, 69, 65, nil, - 51, 56, nil, 77, 57, 58, nil, nil, nil, 61, - nil, 59, 60, 62, 260, 261, 66, 67, nil, nil, - nil, nil, nil, 259, 290, 294, 92, 91, 93, 94, - nil, nil, 221, nil, nil, nil, nil, nil, nil, 41, - nil, nil, 96, 95, 97, 86, 50, 88, 87, 89, - nil, 90, 98, 99, nil, 84, 85, 38, 39, 37, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 214, - nil, nil, 220, nil, nil, 52, 53, nil, nil, 54, - nil, nil, nil, nil, nil, 40, nil, nil, nil, nil, - nil, nil, nil, 219, nil, nil, nil, nil, 83, 75, - 78, 79, nil, 80, 81, nil, nil, nil, 76, 82, - nil, 68, 69, 65, nil, 51, 56, nil, 77, 57, - 58, nil, nil, nil, 61, nil, 59, 60, 62, 23, - 24, 66, 67, nil, nil, nil, nil, nil, 22, 28, - 27, 92, 91, 93, 94, nil, nil, 221, nil, nil, - nil, nil, nil, nil, 41, nil, nil, 96, 95, 97, - 86, 50, 88, 87, 89, nil, 90, 98, 99, nil, - 84, 85, 38, 39, 37, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 214, nil, nil, 220, nil, nil, - 52, 53, nil, nil, 54, nil, nil, nil, nil, nil, - 40, nil, nil, nil, nil, nil, nil, nil, 219, nil, - nil, nil, nil, 83, 75, 78, 79, nil, 80, 81, - nil, nil, nil, 76, 82, nil, 68, 69, 65, nil, - 51, 56, nil, 77, 57, 58, nil, nil, nil, 61, - nil, 59, 60, 62, 23, 24, 66, 67, nil, nil, - nil, nil, nil, 22, 28, 27, 92, 91, 93, 94, - nil, nil, 221, nil, nil, nil, nil, nil, nil, 41, - nil, nil, 96, 95, 97, 86, 50, 88, 87, 89, - nil, 90, 98, 99, nil, 84, 85, 38, 39, 37, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 214, - nil, nil, 220, nil, nil, 52, 53, nil, nil, 54, - nil, nil, nil, nil, nil, 40, nil, nil, nil, nil, - nil, nil, nil, 219, nil, nil, nil, nil, 83, 75, - 78, 79, nil, 80, 81, nil, nil, nil, 76, 82, - nil, 68, 69, 65, nil, 51, 56, nil, 77, 57, - 58, nil, nil, nil, 61, nil, 59, 60, 62, 23, - 24, 66, 67, nil, nil, nil, nil, nil, 22, 28, - 27, 92, 91, 93, 94, nil, nil, 221, nil, nil, - nil, nil, nil, nil, 41, nil, nil, 96, 95, 97, - 86, 50, 88, 87, 89, nil, 90, 98, 99, nil, - 84, 85, 38, 39, 37, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 214, nil, nil, 220, nil, nil, - 52, 53, nil, nil, 54, nil, nil, nil, nil, nil, - 40, nil, nil, nil, nil, nil, nil, nil, 219, nil, - nil, nil, nil, 83, 75, 78, 79, nil, 80, 81, - nil, nil, nil, 76, 82, nil, 68, 69, 65, nil, - 51, 56, nil, 77, 57, 58, nil, nil, nil, 61, - nil, 59, 60, 62, 260, 261, 66, 67, nil, nil, - nil, nil, nil, 259, 290, 294, 92, 91, 93, 94, - nil, nil, 221, nil, nil, nil, nil, nil, nil, 41, - nil, nil, 96, 95, 97, 86, 50, 88, 87, 89, - nil, 90, 98, 99, nil, 84, 85, 38, 39, 37, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 214, - nil, nil, 220, nil, nil, 52, 53, nil, nil, 54, - nil, nil, nil, nil, nil, 40, nil, nil, nil, nil, - nil, nil, nil, 219, nil, nil, nil, nil, 83, 75, - 78, 79, nil, 80, 81, nil, nil, nil, 76, 82, - nil, 68, 69, 65, nil, 51, 56, nil, 77, 57, - 58, nil, nil, nil, 61, nil, 59, 60, 62, 260, - 261, 66, 67, nil, nil, nil, nil, nil, 259, 290, - 294, 92, 91, 93, 94, nil, nil, 221, nil, nil, - nil, nil, nil, nil, 41, nil, nil, 96, 95, 97, - 86, 50, 88, 87, 89, nil, 90, 98, 99, nil, - 84, 85, 38, 39, 37, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 214, nil, nil, 220, nil, nil, - 52, 53, nil, nil, 54, nil, nil, nil, nil, nil, - 40, nil, nil, nil, nil, nil, nil, nil, 219, nil, - nil, nil, nil, 83, 75, 78, 79, nil, 80, 81, - nil, nil, nil, 76, 82, nil, 68, 69, 65, nil, - 51, 56, nil, 77, 57, 58, nil, nil, nil, 61, - nil, 59, 60, 62, 260, 261, 66, 67, nil, nil, - nil, nil, nil, 259, 290, 294, 92, 91, 93, 94, - nil, nil, 221, nil, nil, nil, nil, nil, nil, 291, - nil, nil, 96, 95, 97, 86, 50, 88, 87, 89, - nil, 90, 98, 99, nil, 84, 85, nil, nil, 295, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 288, - nil, nil, 285, nil, nil, 52, 53, nil, nil, 54, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 83, 75, - 78, 79, nil, 80, 81, nil, nil, nil, 76, 82, - nil, 68, 69, 65, nil, 51, 56, nil, 77, 57, - 58, nil, nil, nil, 61, nil, 59, 60, 62, 260, - 261, 66, 67, nil, nil, nil, nil, nil, 259, 290, - 294, 92, 91, 93, 94, nil, nil, 221, nil, nil, - nil, nil, nil, nil, 291, nil, nil, 96, 95, 97, - 86, 50, 88, 87, 89, nil, 90, 98, 99, nil, - 84, 85, nil, nil, 295, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 288, nil, nil, 285, nil, nil, - 52, 53, nil, nil, 54, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 83, 75, 78, 79, nil, 80, 81, - nil, nil, nil, 76, 82, nil, 68, 69, 65, nil, - 51, 56, nil, 77, 57, 58, nil, nil, nil, 61, - nil, 59, 60, 62, 23, 24, 66, 67, nil, nil, - nil, nil, nil, 22, 28, 27, 92, 91, 93, 94, - nil, nil, 17, nil, nil, nil, nil, nil, nil, 41, - nil, nil, 96, 95, 97, 86, 50, 88, 87, 89, - nil, 90, 98, 99, nil, 84, 85, 38, 39, 37, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 214, - nil, nil, 220, nil, nil, 52, 53, nil, nil, 54, - nil, nil, nil, nil, nil, 40, nil, nil, nil, nil, - nil, nil, nil, 18, nil, nil, nil, nil, 83, 75, - 78, 79, nil, 80, 81, nil, nil, nil, 76, 82, - nil, 68, 69, 65, nil, 51, 56, nil, 77, 57, - 58, nil, nil, nil, 61, nil, 59, 60, 62, 260, - 261, 66, 67, nil, nil, nil, nil, nil, 259, 290, - 294, 92, 91, 93, 94, nil, nil, 221, nil, nil, - nil, nil, nil, nil, 41, nil, nil, 96, 95, 97, - 86, 50, 88, 87, 89, nil, 90, 98, 99, nil, - 84, 85, 38, 39, 37, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 214, nil, nil, 220, nil, nil, - 52, 53, nil, nil, 54, nil, nil, nil, nil, nil, - 40, nil, nil, nil, nil, nil, nil, nil, 219, nil, - nil, nil, nil, 83, 75, 78, 79, nil, 80, 81, - nil, nil, nil, 76, 82, nil, 68, 69, 65, nil, - 51, 56, nil, 77, 57, 58, nil, nil, nil, 61, - nil, 59, 60, 62, 23, 24, 66, 67, nil, nil, - nil, nil, nil, 22, 28, 27, 92, 91, 93, 94, - nil, nil, 221, nil, nil, nil, nil, nil, nil, 41, - nil, nil, 96, 95, 97, 86, 50, 88, 87, 89, - nil, 90, 98, 99, nil, 84, 85, 38, 39, 37, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 214, - nil, nil, 220, nil, nil, 52, 53, nil, nil, 54, - nil, nil, nil, nil, nil, 40, nil, nil, nil, nil, - nil, nil, nil, 219, nil, nil, nil, nil, 83, 75, - 78, 79, nil, 80, 81, nil, nil, nil, 76, 82, - nil, 68, 69, 65, nil, 51, 56, nil, 77, 57, - 58, nil, nil, nil, 61, nil, 59, 60, 62, 260, - 261, 66, 67, nil, nil, nil, nil, nil, 259, 290, - 294, 92, 91, 93, 94, nil, nil, 221, nil, nil, - nil, nil, nil, nil, 41, nil, nil, 96, 95, 97, - 86, 50, 88, 87, 89, nil, 90, 98, 99, nil, - 84, 85, 38, 39, 37, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 214, nil, nil, 220, nil, nil, - 52, 53, nil, nil, 54, nil, nil, nil, nil, nil, - 40, nil, nil, nil, nil, nil, nil, nil, 219, nil, - nil, nil, nil, 83, 75, 78, 79, nil, 80, 81, - nil, nil, nil, 76, 82, nil, 68, 69, 65, nil, - 51, 56, nil, 77, 57, 58, nil, nil, nil, 61, - nil, 59, 60, 62, 260, 261, 66, 67, nil, nil, - nil, nil, nil, 259, 290, 294, 92, 91, 93, 94, - nil, nil, 221, nil, nil, nil, nil, nil, nil, 41, - nil, nil, 96, 95, 97, 86, 50, 88, 87, 89, - nil, 90, 98, 99, nil, 84, 85, 38, 39, 37, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 214, - nil, nil, 220, nil, nil, 52, 53, nil, nil, 54, - nil, nil, nil, nil, nil, 40, nil, nil, nil, nil, - nil, nil, nil, 219, nil, nil, nil, nil, 83, 75, - 78, 79, nil, 80, 81, nil, nil, nil, 76, 82, - nil, 68, 69, 65, nil, 51, 56, nil, 77, 57, - 58, nil, nil, nil, 61, nil, 59, 60, 62, 260, - 261, 66, 67, nil, nil, nil, nil, nil, 259, 290, - 294, 92, 91, 93, 94, nil, nil, 221, nil, nil, - nil, nil, nil, nil, 41, nil, nil, 96, 95, 97, - 86, 50, 88, 87, 89, nil, 90, 98, 99, nil, - 84, 85, 38, 39, 37, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 214, nil, nil, 220, nil, nil, - 52, 53, nil, nil, 54, nil, nil, nil, nil, nil, - 40, nil, nil, nil, nil, nil, nil, nil, 219, nil, - nil, nil, nil, 83, 75, 78, 79, nil, 80, 81, - nil, nil, nil, 76, 82, nil, 68, 69, 65, nil, - 51, 56, nil, 77, 57, 58, nil, nil, nil, 61, - nil, 59, 60, 62, 260, 261, 66, 67, nil, nil, - nil, nil, nil, 259, 290, 294, 92, 91, 93, 94, - nil, nil, 221, nil, nil, nil, nil, nil, nil, 41, - nil, nil, 96, 95, 97, 86, 50, 88, 87, 89, - nil, 90, 98, 99, nil, 84, 85, 38, 39, 37, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 214, - nil, nil, 220, nil, nil, 52, 53, nil, nil, 54, - nil, nil, nil, nil, nil, 40, nil, nil, nil, nil, - nil, nil, nil, 219, nil, nil, nil, nil, 83, 75, - 78, 79, nil, 80, 81, nil, nil, nil, 76, 82, - nil, 68, 69, 65, nil, 51, 56, nil, 77, 57, - 58, nil, nil, nil, 61, nil, 59, 60, 62, 260, - 261, 66, 67, nil, nil, nil, nil, nil, 259, 290, - 294, 92, 91, 93, 94, nil, nil, 221, nil, nil, - nil, nil, nil, nil, 41, nil, nil, 96, 95, 97, - 86, 50, 88, 87, 89, 263, 90, 98, 99, nil, - 84, 85, 38, 39, 37, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 214, nil, nil, 220, nil, nil, - 52, 53, nil, nil, 54, nil, 258, nil, 256, nil, - 40, nil, nil, nil, nil, nil, nil, nil, 219, nil, - nil, nil, nil, 83, 75, 78, 79, nil, 80, 81, - nil, nil, nil, 76, 82, nil, 68, 69, 65, nil, - 51, 56, nil, 77, 57, 58, nil, nil, nil, 61, - nil, 59, 60, 62, 260, 261, 66, 67, nil, nil, - nil, nil, nil, 259, 290, 294, 92, 91, 93, 94, - nil, nil, 221, nil, nil, nil, nil, nil, nil, 41, - nil, nil, 96, 95, 97, 86, 50, 88, 87, 89, - 263, 90, 98, 99, nil, 84, 85, 38, 39, 37, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 214, - nil, nil, 220, nil, nil, 52, 53, nil, nil, 54, - nil, 258, nil, 256, nil, 40, nil, nil, nil, nil, - nil, nil, nil, 219, nil, nil, nil, nil, 83, 75, - 78, 79, nil, 80, 81, nil, nil, nil, 76, 82, - nil, 68, 69, 65, nil, 51, 56, nil, 77, 57, - 58, nil, nil, nil, 61, nil, 59, 60, 62, 260, - 261, 66, 67, nil, nil, nil, nil, nil, 259, 290, - 294, 92, 91, 93, 94, nil, nil, 221, nil, nil, - nil, nil, nil, nil, 291, nil, nil, 96, 95, 97, - 86, 50, 88, 87, 89, nil, 90, 98, 99, nil, - 84, 85, nil, nil, 295, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 824, nil, nil, 220, nil, nil, - 52, 53, nil, nil, 54, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 83, 75, 78, 79, nil, 80, 81, - nil, nil, nil, 76, 82, nil, 68, 69, 65, nil, - 51, 56, nil, 77, 57, 58, nil, nil, nil, 61, - nil, 59, 60, 62, 260, 261, 66, 67, nil, nil, - nil, nil, nil, 259, 290, 294, 92, 91, 93, 94, - nil, nil, 221, nil, nil, nil, nil, nil, nil, 41, - nil, nil, 96, 95, 97, 86, 50, 88, 87, 89, - nil, 90, 98, 99, nil, 84, 85, 38, 39, 37, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 214, - nil, nil, 220, nil, nil, 52, 53, nil, nil, 54, - nil, nil, nil, nil, nil, 40, nil, nil, nil, nil, - nil, nil, nil, 219, nil, nil, nil, nil, 83, 75, - 78, 79, nil, 80, 81, nil, nil, nil, 76, 82, - nil, 68, 69, 65, nil, 51, 56, nil, 77, 57, - 58, nil, nil, nil, 61, nil, 59, 60, 62, 23, - 24, 66, 67, nil, nil, nil, nil, nil, 22, 28, - 27, 92, 91, 93, 94, nil, nil, 17, nil, nil, - nil, nil, nil, nil, 41, nil, nil, 96, 95, 97, - 86, 50, 88, 87, 89, nil, 90, 98, 99, nil, - 84, 85, 38, 39, 37, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 214, nil, nil, 220, nil, nil, - 52, 53, nil, nil, 54, nil, nil, nil, nil, nil, - 40, nil, nil, nil, nil, nil, nil, nil, 18, nil, - nil, nil, nil, 83, 75, 78, 79, nil, 80, 81, - nil, nil, nil, 76, 82, nil, 68, 69, 65, nil, - 51, 56, nil, 77, 57, 58, nil, nil, nil, 61, - nil, 59, 60, 62, 260, 261, 66, 67, nil, nil, - nil, nil, nil, 259, 290, 294, 92, 91, 93, 94, - nil, nil, 221, nil, nil, nil, nil, nil, nil, 41, - nil, nil, 96, 95, 97, 86, 50, 88, 87, 89, - nil, 90, 98, 99, nil, 84, 85, 38, 39, 37, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 214, - nil, nil, 220, nil, nil, 52, 53, nil, nil, 54, - nil, 588, nil, nil, nil, 40, nil, nil, nil, nil, - nil, nil, nil, 219, nil, nil, nil, nil, 83, 75, - 78, 79, nil, 80, 81, nil, nil, nil, 76, 82, - nil, 68, 69, 65, nil, 51, 56, nil, 77, 57, - 58, nil, nil, nil, 61, nil, 59, 60, 62, 260, - 261, 66, 67, nil, nil, nil, nil, nil, 259, 290, - 294, 92, 91, 93, 94, nil, nil, 221, nil, nil, - nil, nil, nil, nil, 41, nil, nil, 96, 95, 97, - 86, 50, 88, 87, 89, nil, 90, 98, 99, nil, - 84, 85, 38, 39, 37, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 214, nil, nil, 220, nil, nil, - 52, 53, nil, nil, 54, nil, nil, nil, nil, nil, - 40, nil, nil, nil, nil, nil, nil, nil, 219, nil, - nil, nil, nil, 83, 75, 78, 79, nil, 80, 81, - nil, nil, nil, 76, 82, nil, 68, 69, 65, nil, - 51, 56, nil, 77, 57, 58, nil, nil, nil, 61, - nil, 59, 60, 62, 260, 261, 66, 67, nil, nil, - nil, nil, nil, 259, 290, 294, 92, 91, 93, 94, - nil, nil, 221, nil, nil, nil, nil, nil, nil, 291, - nil, nil, 96, 95, 97, 86, 50, 88, 87, 89, - nil, 90, 98, 99, nil, 84, 85, nil, nil, 295, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 868, - nil, nil, 220, nil, nil, 52, 53, nil, nil, 54, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 83, 75, - 78, 79, nil, 80, 81, nil, nil, nil, 76, 82, - nil, 68, 69, 65, nil, 51, 56, nil, 77, 57, - 58, nil, nil, nil, 61, nil, 59, 60, 62, 260, - 261, 66, 67, nil, nil, nil, nil, nil, 259, 290, - 294, 92, 91, 93, 94, nil, nil, 221, nil, nil, - nil, nil, nil, nil, 41, nil, nil, 96, 95, 97, - 86, 50, 88, 87, 89, nil, 90, 98, 99, nil, - 84, 85, 38, 39, 37, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 214, nil, nil, 220, nil, nil, - 52, 53, nil, nil, 54, nil, 588, nil, 256, nil, - 40, nil, nil, nil, nil, nil, nil, nil, 219, nil, - nil, nil, nil, 83, 75, 78, 79, nil, 80, 81, - nil, nil, nil, 76, 82, nil, 68, 69, 65, nil, - 51, 56, nil, 77, 57, 58, nil, nil, nil, 61, - nil, 59, 60, 62, 260, 261, 66, 67, nil, nil, - nil, nil, nil, 259, 290, 294, 92, 91, 93, 94, - nil, nil, 221, nil, nil, nil, nil, nil, nil, 41, - nil, nil, 96, 95, 97, 86, 50, 88, 87, 89, - 263, 90, 98, 99, nil, 84, 85, 38, 39, 37, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 214, - nil, nil, 220, nil, nil, 52, 53, nil, nil, 54, - nil, 588, nil, 256, nil, 40, nil, nil, nil, nil, - nil, nil, nil, 219, nil, nil, nil, nil, 83, 75, - 78, 79, nil, 80, 81, nil, nil, nil, 76, 82, - nil, 68, 69, 65, nil, 51, 56, nil, 77, 57, - 58, nil, nil, nil, 61, nil, 59, 60, 62, 260, - 261, 66, 67, nil, nil, nil, nil, nil, 259, 28, - 27, 92, 91, 93, 94, nil, nil, 221, nil, nil, - nil, nil, nil, nil, 41, nil, nil, 96, 95, 97, - 86, 50, 88, 87, 89, 263, 90, 98, 99, nil, - 84, 85, 38, 39, 37, 229, 233, 238, 239, 240, - 235, 237, 245, 246, 241, 242, nil, 222, 223, nil, - nil, 243, 244, nil, 214, nil, -226, 220, nil, nil, - 52, 53, nil, nil, 54, nil, 258, 226, 256, 232, - 40, 228, 227, 224, 225, 236, 234, 230, 219, 231, - nil, nil, nil, 83, 75, 78, 79, nil, 80, 81, - nil, nil, nil, 76, 82, nil, 247, nil, -226, nil, - nil, 56, nil, 77, 162, 173, 163, 186, 159, 179, - 169, 168, 189, 190, 184, 167, 166, 161, 187, 191, - 192, 171, 160, 174, 178, 180, 172, 165, nil, nil, - nil, 181, 188, 183, 182, 175, 185, 170, 158, 177, - 176, nil, nil, nil, nil, nil, 157, 164, 155, 156, - 152, 153, 154, 114, 116, 113, nil, 115, nil, nil, - nil, nil, nil, nil, nil, 147, 148, nil, 144, 126, - 127, 128, 135, 132, 134, nil, nil, 129, 130, nil, - nil, nil, 149, 150, 136, 137, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 141, - 140, nil, 125, 146, 143, 142, 138, 139, 133, 131, - 123, 145, 124, nil, nil, 151, 83, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 82, 162, 173, - 163, 186, 159, 179, 169, 168, 189, 190, 184, 167, - 166, 161, 187, 191, 192, 171, 160, 174, 178, 180, - 172, 165, nil, nil, nil, 181, 188, 183, 182, 175, - 185, 170, 158, 177, 176, nil, nil, nil, nil, nil, - 157, 164, 155, 156, 152, 153, 154, 114, 116, nil, - nil, 115, nil, nil, nil, nil, nil, nil, nil, 147, - 148, nil, 144, 126, 127, 128, 135, 132, 134, nil, - nil, 129, 130, nil, nil, nil, 149, 150, 136, 137, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 141, 140, nil, 125, 146, 143, 142, - 138, 139, 133, 131, 123, 145, 124, nil, nil, 151, - 83, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 82, 162, 173, 163, 186, 159, 179, 169, 168, - 189, 190, 184, 167, 166, 161, 187, 191, 192, 171, - 160, 174, 178, 180, 172, 165, nil, nil, nil, 181, - 188, 183, 182, 175, 185, 170, 158, 177, 176, nil, - nil, nil, nil, nil, 157, 164, 155, 156, 152, 153, - 154, 114, 116, nil, nil, 115, nil, nil, nil, nil, - nil, nil, nil, 147, 148, nil, 144, 126, 127, 128, - 135, 132, 134, nil, nil, 129, 130, nil, nil, nil, - 149, 150, 136, 137, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 141, 140, nil, - 125, 146, 143, 142, 138, 139, 133, 131, 123, 145, - 124, nil, nil, 151, 83, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 82, 162, 173, 163, 186, - 159, 179, 169, 168, 189, 190, 184, 167, 166, 161, - 187, 191, 192, 171, 160, 174, 178, 180, 172, 165, - nil, nil, nil, 181, 188, 183, 182, 175, 185, 170, - 158, 177, 176, nil, nil, nil, nil, nil, 157, 164, - 155, 156, 152, 153, 154, 114, 116, nil, nil, 115, - nil, nil, nil, nil, nil, nil, nil, 147, 148, nil, - 144, 126, 127, 128, 135, 132, 134, nil, nil, 129, - 130, nil, nil, nil, 149, 150, 136, 137, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 141, 140, nil, 125, 146, 143, 142, 138, 139, - 133, 131, 123, 145, 124, nil, nil, 151, 83, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 82, - 162, 173, 163, 186, 159, 179, 169, 168, 189, 190, - 184, 167, 166, 161, 187, 191, 192, 171, 160, 174, - 178, 180, 172, 165, nil, nil, nil, 181, 188, 183, - 351, 350, 352, 349, 158, 177, 176, nil, nil, nil, - nil, nil, 157, 164, 155, 156, 346, 347, 348, 344, - 116, 88, 87, 345, nil, 90, nil, nil, nil, nil, - nil, 147, 148, nil, 144, 126, 127, 128, 135, 132, - 134, nil, nil, 129, 130, nil, nil, nil, 149, 150, - 136, 137, nil, nil, nil, nil, nil, 356, nil, nil, - nil, nil, nil, nil, nil, 141, 140, nil, 125, 146, - 143, 142, 138, 139, 133, 131, 123, 145, 124, nil, - nil, 151, 162, 173, 163, 186, 159, 179, 169, 168, - 189, 190, 184, 167, 166, 161, 187, 191, 192, 171, - 160, 174, 178, 180, 172, 165, nil, nil, nil, 181, - 188, 183, 182, 175, 185, 170, 158, 177, 176, nil, - nil, nil, nil, nil, 157, 164, 155, 156, 152, 153, - 154, 114, 116, nil, nil, 115, nil, nil, nil, nil, - nil, nil, nil, 147, 148, nil, 144, 126, 127, 128, - 135, 132, 134, nil, nil, 129, 130, nil, nil, nil, - 149, 150, 136, 137, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 141, 140, nil, - 125, 146, 143, 142, 138, 139, 133, 131, 123, 145, - 124, 392, 396, 151, nil, 393, nil, nil, nil, nil, - nil, nil, nil, 147, 148, nil, 144, 126, 127, 128, - 135, 132, 134, nil, nil, 129, 130, nil, nil, nil, - 149, 150, 136, 137, nil, nil, nil, nil, nil, 269, - nil, nil, nil, nil, nil, nil, nil, 141, 140, nil, - 125, 146, 143, 142, 138, 139, 133, 131, 123, 145, - 124, 398, 403, 151, nil, 400, nil, nil, nil, nil, - nil, nil, nil, 147, 148, nil, 144, 126, 127, 128, - 135, 132, 134, nil, nil, 129, 130, nil, nil, nil, - 149, 150, 136, 137, nil, nil, nil, nil, nil, 269, - nil, nil, nil, nil, nil, nil, nil, 141, 140, nil, - 125, 146, 143, 142, 138, 139, 133, 131, 123, 145, - 124, 456, 396, 151, nil, 457, nil, nil, nil, nil, - nil, nil, nil, 147, 148, nil, 144, 126, 127, 128, - 135, 132, 134, nil, nil, 129, 130, nil, nil, nil, - 149, 150, 136, 137, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 141, 140, nil, - 125, 146, 143, 142, 138, 139, 133, 131, 123, 145, - 124, 456, 396, 151, nil, 457, nil, nil, nil, nil, - nil, nil, nil, 147, 148, nil, 144, 126, 127, 128, - 135, 132, 134, nil, nil, 129, 130, nil, nil, nil, - 149, 150, 136, 137, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 141, 140, nil, - 125, 146, 143, 142, 138, 139, 133, 131, 123, 145, - 124, 574, 396, 151, nil, 575, nil, nil, nil, nil, - nil, nil, nil, 147, 148, nil, 144, 126, 127, 128, - 135, 132, 134, nil, nil, 129, 130, nil, nil, nil, - 149, 150, 136, 137, nil, nil, nil, nil, nil, 269, - nil, nil, nil, nil, nil, nil, nil, 141, 140, nil, - 125, 146, 143, 142, 138, 139, 133, 131, 123, 145, - 124, 576, 403, 151, nil, 577, nil, nil, nil, nil, - nil, nil, nil, 147, 148, nil, 144, 126, 127, 128, - 135, 132, 134, nil, nil, 129, 130, nil, nil, nil, - 149, 150, 136, 137, nil, nil, nil, nil, nil, 269, - nil, nil, nil, nil, nil, nil, nil, 141, 140, nil, - 125, 146, 143, 142, 138, 139, 133, 131, 123, 145, - 124, 611, 396, 151, nil, 612, nil, nil, nil, nil, - nil, nil, nil, 147, 148, nil, 144, 126, 127, 128, - 135, 132, 134, nil, nil, 129, 130, nil, nil, nil, - 149, 150, 136, 137, nil, nil, nil, nil, nil, 269, - nil, nil, nil, nil, nil, nil, nil, 141, 140, nil, - 125, 146, 143, 142, 138, 139, 133, 131, 123, 145, - 124, 614, 403, 151, nil, 615, nil, nil, nil, nil, - nil, nil, nil, 147, 148, nil, 144, 126, 127, 128, - 135, 132, 134, nil, nil, 129, 130, nil, nil, nil, - 149, 150, 136, 137, nil, nil, nil, nil, nil, 269, - nil, nil, nil, nil, nil, nil, nil, 141, 140, nil, - 125, 146, 143, 142, 138, 139, 133, 131, 123, 145, - 124, 574, 396, 151, nil, 575, nil, nil, nil, nil, - nil, nil, nil, 147, 148, nil, 144, 126, 127, 128, - 135, 132, 134, nil, nil, 129, 130, nil, nil, nil, - 149, 150, 136, 137, nil, nil, nil, nil, nil, 269, - nil, nil, nil, nil, nil, nil, nil, 141, 140, nil, - 125, 146, 143, 142, 138, 139, 133, 131, 123, 145, - 124, 576, 403, 151, nil, 577, nil, nil, nil, nil, - nil, nil, nil, 147, 148, nil, 144, 126, 127, 128, - 135, 132, 134, nil, nil, 129, 130, nil, nil, nil, - 149, 150, 136, 137, nil, nil, nil, nil, nil, 269, - nil, nil, nil, nil, nil, nil, nil, 141, 140, nil, - 125, 146, 143, 142, 138, 139, 133, 131, 123, 145, - 124, 667, 396, 151, nil, 668, nil, nil, nil, nil, - nil, nil, nil, 147, 148, nil, 144, 126, 127, 128, - 135, 132, 134, nil, nil, 129, 130, nil, nil, nil, - 149, 150, 136, 137, nil, nil, nil, nil, nil, 269, - nil, nil, nil, nil, nil, nil, nil, 141, 140, nil, - 125, 146, 143, 142, 138, 139, 133, 131, 123, 145, - 124, 669, 403, 151, nil, 670, nil, nil, nil, nil, - nil, nil, nil, 147, 148, nil, 144, 126, 127, 128, - 135, 132, 134, nil, nil, 129, 130, nil, nil, nil, - 149, 150, 136, 137, nil, nil, nil, nil, nil, 269, - nil, nil, nil, nil, nil, nil, nil, 141, 140, nil, - 125, 146, 143, 142, 138, 139, 133, 131, 123, 145, - 124, 672, 403, 151, nil, 673, nil, nil, nil, nil, - nil, nil, nil, 147, 148, nil, 144, 126, 127, 128, - 135, 132, 134, nil, nil, 129, 130, nil, nil, nil, - 149, 150, 136, 137, nil, nil, nil, nil, nil, 269, - nil, nil, nil, nil, nil, nil, nil, 141, 140, nil, - 125, 146, 143, 142, 138, 139, 133, 131, 123, 145, - 124, 456, 396, 151, nil, 457, nil, nil, nil, nil, - nil, nil, nil, 147, 148, nil, 144, 126, 127, 128, - 135, 132, 134, nil, nil, 129, 130, nil, nil, nil, - 149, 150, 136, 137, nil, nil, nil, nil, nil, 269, - nil, nil, nil, nil, nil, nil, nil, 141, 140, nil, - 125, 146, 143, 142, 138, 139, 133, 131, 123, 145, - 124, 920, 396, 151, nil, 921, nil, nil, nil, nil, - nil, nil, nil, 147, 148, nil, 144, 126, 127, 128, - 135, 132, 134, nil, nil, 129, 130, nil, nil, nil, - 149, 150, 136, 137, nil, nil, nil, nil, nil, 269, - nil, nil, nil, nil, nil, nil, nil, 141, 140, nil, - 125, 146, 143, 142, 138, 139, 133, 131, 123, 145, - 124, 922, 403, 151, nil, 923, nil, nil, nil, nil, - nil, nil, nil, 147, 148, nil, 144, 126, 127, 128, - 135, 132, 134, nil, nil, 129, 130, nil, nil, nil, - 149, 150, 136, 137, nil, nil, nil, nil, nil, 269, - nil, nil, nil, nil, nil, nil, nil, 141, 140, nil, - 125, 146, 143, 142, 138, 139, 133, 131, 123, 145, - 124, 942, 403, 151, nil, 941, nil, nil, nil, nil, - nil, nil, nil, 147, 148, nil, 144, 126, 127, 128, - 135, 132, 134, nil, nil, 129, 130, nil, nil, nil, - 149, 150, 136, 137, nil, nil, nil, nil, nil, 269, - nil, nil, nil, nil, nil, nil, nil, 141, 140, nil, - 125, 146, 143, 142, 138, 139, 133, 131, 123, 145, - 124, nil, nil, 151, 229, 233, 238, 239, 240, 235, - 237, 245, 246, 241, 242, nil, 222, 223, nil, nil, - 243, 244, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 226, nil, 232, nil, - 228, 227, 224, 225, 236, 234, 230, nil, 231, nil, - 229, 233, 238, 239, 240, 235, 237, 245, 246, 241, - 242, nil, 222, 223, nil, 247, 243, 244, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 226, nil, 232, nil, 228, 227, 224, 225, - 236, 234, 230, nil, 231, nil, 229, 233, 238, 239, - 240, 235, 237, 245, 246, 241, 242, nil, 222, 223, - nil, 247, 243, 244, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 226, nil, - 232, nil, 228, 227, 224, 225, 236, 234, 230, nil, - 231, nil, 229, 233, 238, 239, 240, 235, 237, 245, - 246, 241, 242, nil, 222, 223, 210, 247, 243, 244, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 226, nil, 232, nil, 228, 227, - 224, 225, 236, 234, 230, nil, 231, nil, 229, 233, - 238, 239, 240, 235, 237, 245, 246, 241, 242, nil, - 222, 223, nil, 247, 243, 244, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 226, nil, 232, nil, 228, 227, 224, 225, 236, 234, - 230, nil, 231, nil, 229, 233, 238, 239, 240, 235, - 237, 245, 246, 241, 242, nil, 222, 223, nil, 247, - 243, 244, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 226, nil, 232, nil, - 228, 227, 224, 225, 236, 234, 230, nil, 231, nil, - 229, 233, 238, 239, 240, 235, 237, 245, 246, 241, - 242, nil, 222, 223, nil, 247, 243, 244, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 226, nil, 232, nil, 228, 227, 224, 225, - 236, 234, 230, nil, 231, nil, 229, 233, 238, 239, - 240, 235, 237, 245, 246, 241, 242, nil, 222, 223, - nil, 247, 243, 244, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 226, nil, - 232, nil, 228, 227, 224, 225, 236, 234, 230, nil, - 231, nil, 229, 233, 238, 239, 240, 235, 237, 245, - 246, 241, 242, nil, 222, 223, nil, 247, 243, 244, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 226, nil, 232, nil, 228, 227, - 224, 225, 236, 234, 230, nil, 231, nil, 229, 233, - 238, 239, 240, 235, 237, 245, 246, 241, 242, nil, - 222, 223, nil, 247, 243, 244, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 226, nil, 232, nil, 228, 227, 224, 225, 236, 234, - 230, nil, 231, nil, 229, 233, 238, 239, 240, 235, - 237, 245, 246, 241, 242, nil, 222, 223, nil, 247, - 243, 244, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 226, nil, 232, nil, - 228, 227, 224, 225, 236, 234, 230, nil, 231, nil, - 229, 233, 238, 239, 240, 235, 237, 245, 246, 241, - 242, nil, 222, 223, nil, 247, 243, 244, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 226, nil, 232, nil, 228, 227, 224, 225, - 236, 234, 230, nil, 231, nil, 229, 233, 238, 239, - 240, 235, 237, 245, 246, 241, 242, nil, 222, 223, - nil, 247, 243, 244, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 226, nil, - 232, nil, 228, 227, 224, 225, 236, 234, 230, nil, - 231, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 247 ] - -racc_action_check = [ - 86, 0, 0, 0, 0, 0, 0, 86, 86, 86, - 0, 0, 86, 86, 86, 0, 86, 0, 0, 0, - 0, 0, 0, 0, 86, 55, 86, 86, 86, 0, - 0, 0, 0, 0, 0, 0, 86, 86, 0, 86, - 86, 86, 86, 86, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 340, 0, 0, 0, - 320, 0, 0, 0, 0, 0, 86, 86, 86, 86, - 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, - 1, 598, 86, 86, 86, 0, 86, 86, 0, 327, - 86, 0, 0, 86, 86, 0, 86, 0, 86, 362, - 86, 0, 86, 86, 86, 86, 86, 86, 86, 0, - 86, 55, 86, 330, 0, 0, 0, 0, 8, 0, - 0, 548, 519, 598, 0, 0, 86, 86, 86, 86, - 89, 86, 0, 86, 0, 86, 86, 89, 89, 89, - 213, 9, 89, 89, 89, 511, 89, 10, 321, 512, - 17, 410, 410, 25, 89, 665, 89, 89, 89, 3, - 25, 340, 362, 632, 3, 667, 89, 89, 668, 89, - 89, 89, 89, 89, 320, 745, 822, 825, 846, 320, - 781, 340, 548, 548, 879, 920, 340, 17, 336, 11, - 213, 548, 336, 215, 327, 669, 89, 89, 89, 89, - 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, - 324, 25, 89, 89, 89, 324, 89, 89, 330, 921, - 89, 944, 611, 89, 89, 12, 89, 519, 89, 851, - 89, 851, 89, 89, 89, 89, 89, 89, 89, 398, - 89, 410, 89, 215, 344, 511, 398, 398, 398, 512, - 511, 344, 398, 398, 512, 398, 89, 89, 89, 89, - 669, 89, 321, 89, 398, 89, 89, 321, 632, 665, - 667, 670, 665, 668, 665, 398, 398, 782, 398, 398, - 398, 398, 398, 922, 311, 781, 923, 311, 611, 745, - 822, 825, 846, 20, 745, 822, 825, 846, 879, 920, - 669, 612, 344, 879, 920, 398, 398, 398, 398, 398, - 398, 398, 398, 398, 398, 398, 398, 398, 398, 537, - 537, 398, 398, 398, 611, 398, 34, 611, 416, 398, - 644, 358, 398, 921, 611, 944, 670, 398, 921, 398, - 944, 398, 398, 398, 398, 398, 398, 398, 400, 398, - 398, 398, 531, 531, 574, 400, 400, 400, 575, 36, - 922, 400, 400, 923, 400, 398, 398, 612, 398, 41, - 398, 622, 622, 26, 398, 398, 670, 782, 416, 644, - 292, 334, 782, 100, 400, 400, 14, 400, 400, 400, - 400, 400, 358, 358, 358, 312, 315, 922, 312, 315, - 923, 359, 922, 612, 574, 923, 612, 360, 575, 537, - 15, 15, 193, 612, 400, 400, 400, 400, 400, 400, - 400, 400, 400, 400, 400, 400, 400, 400, 35, 14, - 400, 400, 400, 334, 400, 214, 14, 26, 400, 216, - 334, 400, 531, 335, 292, 334, 400, 531, 400, 334, - 400, 400, 400, 400, 400, 400, 400, 361, 400, 26, - 400, 622, 359, 359, 359, 363, 292, 334, 360, 360, - 360, 35, 446, 576, 400, 400, 724, 400, 35, 400, - 576, 576, 576, 400, 400, 576, 576, 576, 715, 576, - 606, 334, 37, 37, 217, 335, 345, 606, 576, 576, - 576, 576, 335, 345, 221, 631, 446, 335, 631, 576, - 576, 335, 576, 576, 576, 576, 576, 253, 361, 361, - 361, 614, 738, 254, 346, 724, 363, 363, 363, 335, - 465, 346, 530, 257, 466, 295, 295, 530, 715, 576, - 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, - 576, 576, 576, 335, 345, 576, 576, 576, 268, 576, - 576, 279, 595, 576, 465, 281, 576, 576, 466, 576, - 299, 576, 282, 576, 283, 576, 576, 576, 576, 576, - 576, 576, 346, 576, 576, 576, 614, 614, 738, 767, - 347, 767, 767, 767, 767, 767, 595, 347, 13, 576, - 576, 576, 576, 577, 576, 13, 576, 288, 576, 576, - 577, 577, 577, 299, 13, 577, 577, 577, 290, 577, - 299, 309, 309, 614, 738, 42, 614, 738, 422, 577, - 577, 577, 42, 614, 738, 319, 319, 656, 656, 577, - 577, 42, 577, 577, 577, 577, 577, 894, 347, 894, - 894, 894, 894, 894, 348, 291, 13, 113, 294, 349, - 422, 348, 113, 113, 422, 422, 349, 767, 296, 577, - 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, - 577, 577, 577, 42, 300, 577, 577, 577, 301, 577, - 577, 934, 934, 577, 304, 73, 577, 577, 307, 577, - 392, 577, 308, 577, 73, 577, 577, 577, 577, 577, - 577, 577, 348, 577, 73, 577, 582, 349, 582, 582, - 582, 582, 582, 313, 314, 894, 316, 325, 212, 577, - 577, 577, 577, 27, 577, 212, 577, 393, 577, 577, - 27, 27, 27, 392, 212, 27, 27, 27, 326, 27, - 392, 677, 329, 582, 331, 377, 677, 423, 27, 27, - 27, 286, 582, 582, 582, 582, 672, 378, 286, 27, - 27, 384, 27, 27, 27, 27, 27, 286, 386, 723, - 393, 723, 723, 723, 350, 723, 212, 393, 351, 423, - 352, 350, 390, 423, 423, 351, 582, 352, 399, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 412, 424, 27, 27, 27, 672, 286, - 27, 354, 27, 27, 425, 672, 27, 27, 354, 27, - 672, 27, 561, 27, 672, 27, 27, 27, 27, 27, - 27, 27, 350, 27, 27, 27, 351, 287, 352, 426, - 683, 427, 672, 461, 287, 683, 467, 469, 28, 27, - 27, 470, 27, 287, 27, 28, 28, 28, 27, 473, - 28, 28, 28, 475, 28, 561, 672, 480, 484, 354, - 289, 493, 561, 496, 28, 28, 302, 289, 4, 4, - 4, 4, 4, 302, 28, 28, 289, 28, 28, 28, - 28, 28, 302, 508, 866, 287, 866, 866, 866, 647, - 866, 647, 647, 647, 647, 647, 843, 513, 843, 843, - 843, 843, 843, 514, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, 289, 545, - 28, 28, 28, 328, 302, 28, 647, 28, 28, 551, - 328, 28, 28, 843, 28, 647, 28, 558, 28, 328, - 28, 28, 28, 28, 28, 28, 28, 562, 28, 565, - 28, 764, 338, 764, 764, 764, 764, 764, 569, 338, - 578, 580, 585, 50, 28, 28, 587, 28, 338, 28, - 50, 50, 50, 28, 599, 50, 50, 50, 601, 50, - 608, 328, 610, 613, 616, 479, 617, 441, 764, 50, - 50, 50, 479, 620, 621, 623, 626, 764, 627, 50, - 50, 479, 50, 50, 50, 50, 50, 634, 635, 636, - 338, 637, 841, 645, 841, 841, 841, 841, 841, 441, - 652, 655, 658, 441, 441, 441, 441, 663, 666, 50, - 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, - 50, 50, 50, 479, 675, 50, 50, 50, 680, 841, - 50, 698, 717, 50, 718, 719, 50, 50, 841, 50, - 721, 50, 722, 50, 726, 50, 50, 50, 50, 50, - 50, 50, 734, 50, 735, 50, 736, 737, 752, 522, - 760, 823, 766, 768, 769, 772, 522, 775, 823, 50, - 50, 50, 50, 394, 50, 522, 50, 823, 50, 784, - 394, 394, 394, 788, 789, 394, 394, 394, 506, 394, - 506, 506, 506, 506, 506, 615, 792, 793, 394, 394, - 394, 805, 615, 806, 812, 813, 814, 615, 816, 394, - 394, 615, 394, 394, 394, 394, 394, 522, 824, 823, - 111, 111, 111, 111, 111, 506, 506, 895, 829, 895, - 895, 895, 895, 895, 506, 506, 506, 506, 830, 394, - 394, 394, 394, 394, 394, 394, 394, 394, 394, 394, - 394, 394, 394, 615, 442, 394, 394, 394, 673, 831, - 394, 834, 394, 394, 895, 673, 394, 394, 835, 394, - 673, 394, 837, 394, 673, 394, 394, 394, 394, 394, - 394, 394, 840, 394, 394, 394, 442, 867, 842, 848, - 442, 442, 442, 442, 867, 849, 854, 859, 403, 394, - 394, 860, 394, 867, 394, 403, 403, 403, 394, 861, - 403, 403, 403, 862, 403, 432, 673, 365, 365, 365, - 365, 365, 864, 403, 403, 403, 403, 868, 875, 880, - 881, 432, 432, 896, 403, 403, 917, 403, 403, 403, - 403, 403, 919, 926, 927, 867, 928, 432, 929, 432, - 930, 432, 432, 432, 432, 932, 935, 432, 936, 432, - 937, 938, 939, 940, 403, 403, 403, 403, 403, 403, - 403, 403, 403, 403, 403, 403, 403, 403, 941, 942, - 403, 403, 403, 951, 960, 403, 961, 962, 403, nil, - nil, 403, 403, nil, 403, nil, 403, nil, 403, nil, - 403, 403, 403, 403, 403, 403, 403, nil, 403, 403, - 403, 533, nil, 533, 533, 533, 533, 533, nil, nil, - nil, nil, nil, nil, 403, 403, 403, 403, 404, 403, - nil, 403, nil, 403, nil, 404, 404, 404, nil, nil, - 404, 404, 404, nil, 404, 433, 541, 541, 533, 533, - 541, 541, 541, 404, 404, 404, 404, 533, 533, 533, - 533, 433, 433, nil, 404, 404, nil, 404, 404, 404, - 404, 404, nil, nil, nil, nil, nil, 433, nil, 433, - nil, 433, 433, 433, 433, nil, nil, 433, nil, 433, - nil, nil, nil, nil, 404, 404, 404, 404, 404, 404, - 404, 404, 404, 404, 404, 404, 404, 404, nil, nil, - 404, 404, 404, nil, nil, 404, nil, nil, 404, nil, - nil, 404, 404, nil, 404, nil, 404, nil, 404, nil, - 404, 404, 404, 404, 404, 404, 404, nil, 404, 404, - 404, 633, nil, 633, 633, 633, 633, 633, nil, nil, - nil, nil, nil, nil, 404, 404, 404, 404, 455, 404, - nil, 404, nil, 404, nil, 455, 455, 455, nil, nil, - 455, 455, 455, nil, 455, nil, nil, 931, 633, 931, - 931, 931, 931, 931, 455, nil, nil, 633, 633, 633, - 633, nil, nil, nil, 455, 455, nil, 455, 455, 455, - 455, 455, nil, 933, nil, 933, 933, 933, 933, 933, - nil, nil, nil, 458, 931, nil, nil, nil, nil, nil, - 458, 458, 458, nil, nil, 458, 458, 458, 682, 458, - 682, 682, 682, 682, 682, 455, nil, nil, nil, 458, - 933, nil, 455, nil, nil, nil, nil, 455, 455, 458, - 458, nil, 458, 458, 458, 458, 458, nil, 754, nil, - 754, 754, 754, 754, 754, 682, nil, nil, nil, nil, - 455, nil, nil, nil, 682, 682, 682, 682, nil, nil, - nil, nil, nil, 428, 455, nil, nil, nil, nil, 455, - 458, nil, nil, 455, nil, 754, nil, 458, nil, 428, - 428, nil, 458, 458, 754, 754, 754, 754, 759, nil, - 759, 759, 759, 759, 759, 428, nil, 428, nil, 428, - 428, 428, 428, nil, nil, 458, nil, nil, nil, nil, - nil, nil, nil, 30, 30, 30, 30, 30, 30, 458, - nil, nil, 30, 30, 458, 759, nil, 30, 458, 30, - 30, 30, 30, 30, 30, 30, 759, 759, nil, nil, - nil, 30, 30, 30, 30, 30, 30, 30, nil, 950, - 30, 950, 950, 950, 950, 950, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, nil, 30, - 30, 30, nil, 30, 30, 30, 30, 30, nil, nil, - nil, nil, nil, nil, nil, 803, 950, 803, 803, 803, - 803, 803, nil, nil, nil, nil, nil, 30, nil, nil, - 30, nil, nil, 30, 30, nil, nil, 30, nil, 30, - nil, nil, nil, 30, 886, nil, 886, 886, 886, 886, - 886, 30, 803, nil, nil, nil, 30, 30, 30, 30, - nil, 30, 30, 803, 803, nil, 30, 30, 51, 51, - 51, 51, 51, 51, 30, nil, 30, 51, 51, nil, - nil, 886, 51, nil, 51, 51, 51, 51, 51, 51, - 51, nil, 886, 886, nil, nil, 51, 51, 51, 51, - 51, 51, 51, nil, nil, 51, nil, nil, nil, nil, - nil, 51, 51, 51, 51, 51, 51, 51, 51, 51, - 51, 51, 51, nil, 51, 51, 51, nil, 51, 51, - 51, 51, 51, nil, nil, nil, nil, nil, nil, nil, - 888, nil, 888, 888, 888, 888, 888, nil, nil, nil, - nil, nil, 51, nil, nil, 51, nil, nil, 51, 51, - nil, nil, 51, nil, 51, nil, nil, nil, 51, 890, - nil, 890, 890, 890, 890, 890, 51, 888, nil, nil, - nil, 51, 51, 51, 51, nil, 51, 51, 888, 888, - nil, 51, 51, 195, 195, 195, 195, 195, 195, 51, - nil, 51, 195, 195, nil, nil, 890, 195, nil, 195, - 195, 195, 195, 195, 195, 195, nil, 890, 890, nil, - nil, 195, 195, 195, 195, 195, 195, 195, nil, nil, - 195, nil, nil, nil, nil, nil, 195, 195, 195, 195, - 195, 195, 195, 195, 195, 195, 195, 195, nil, 195, - 195, 195, nil, 195, 195, 195, 195, 195, nil, nil, - nil, nil, nil, nil, nil, 909, nil, 909, 909, 909, - 909, 909, nil, nil, nil, nil, nil, 195, nil, nil, - 195, nil, nil, 195, 195, nil, nil, 195, nil, 195, - nil, nil, nil, 195, 911, nil, 911, 911, 911, 911, - 911, 195, 909, nil, nil, nil, 195, 195, 195, 195, - nil, 195, 195, 909, 909, nil, 195, 195, 196, 196, - 196, 196, 196, 196, 195, nil, 195, 196, 196, nil, - nil, 911, 196, nil, 196, 196, 196, 196, 196, 196, - 196, nil, 911, 911, nil, nil, 196, 196, 196, 196, - 196, 196, 196, nil, nil, 196, nil, nil, nil, nil, - nil, 196, 196, 196, 196, 196, 196, 196, 196, 196, - 196, 196, 196, nil, 196, 196, 196, nil, 196, 196, - 196, 196, 196, nil, nil, nil, nil, nil, nil, nil, - 946, nil, 946, 946, 946, 946, 946, nil, nil, nil, - nil, nil, 196, nil, nil, 196, nil, nil, 196, 196, - nil, nil, 196, nil, 196, nil, nil, nil, 196, 956, - nil, 956, 956, 956, 956, 956, 196, 946, nil, nil, - nil, 196, 196, 196, 196, nil, 196, 196, 946, 946, - nil, 196, 196, 220, 220, 220, 220, 220, 220, 196, - nil, 196, 220, 220, nil, nil, 956, 220, nil, 220, - 220, 220, 220, 220, 220, 220, nil, 956, 956, nil, - nil, 220, 220, 220, 220, 220, 220, 220, nil, nil, - 220, nil, nil, nil, nil, nil, 220, 220, 220, 220, - 220, 220, 220, 220, 220, 220, 220, 220, nil, 220, - 220, 220, nil, 220, 220, 220, 220, 220, 420, 420, - 420, 420, 420, 420, 420, 420, 420, 420, 420, nil, - 420, 420, nil, nil, 420, 420, nil, 220, nil, nil, - 220, nil, nil, 220, 220, nil, nil, 220, nil, 220, - 420, nil, 420, 220, 420, 420, 420, 420, 420, 420, - 420, 220, 420, nil, nil, nil, 220, 220, 220, 220, - nil, 220, 220, nil, nil, nil, 220, 220, 280, 280, - 280, 280, 280, 280, 220, nil, 220, 280, 280, nil, - nil, nil, 280, nil, 280, 280, 280, 280, 280, 280, - 280, nil, nil, nil, nil, nil, 280, 280, 280, 280, - 280, 280, 280, nil, nil, 280, nil, nil, nil, nil, - nil, 280, 280, 280, 280, 280, 280, 280, 280, 280, - 280, 280, 280, nil, 280, 280, 280, nil, 280, 280, - 280, 280, 280, 421, 421, 421, 421, 421, 421, 421, - 421, 421, 421, 421, nil, 421, 421, nil, nil, 421, - 421, nil, 280, nil, nil, 280, nil, nil, 280, 280, - nil, nil, 280, nil, 280, 421, nil, 421, 280, 421, - 421, 421, 421, 421, 421, 421, 280, 421, nil, nil, - nil, 280, 280, 280, 280, nil, 280, 280, nil, nil, - nil, 280, 280, 285, 285, 285, 285, 285, 285, 280, - nil, 280, 285, 285, nil, nil, nil, 285, nil, 285, - 285, 285, 285, 285, 285, 285, nil, nil, nil, nil, - nil, 285, 285, 285, 285, 285, 285, 285, nil, nil, - 285, nil, nil, nil, nil, nil, 285, 285, 285, 285, - 285, 285, 285, 285, 285, 285, 285, 285, nil, 285, - 285, 285, nil, 285, 285, 285, 285, 285, 431, 431, - 431, 431, 431, 431, 431, nil, nil, 431, 431, nil, - nil, nil, nil, nil, 431, 431, nil, 285, nil, nil, - 285, nil, nil, 285, 285, nil, nil, 285, nil, 285, - 431, nil, 431, 285, 431, 431, 431, 431, 431, 431, - 431, 285, 431, nil, nil, nil, 285, 285, 285, 285, - nil, 285, 285, nil, nil, nil, 285, 285, 507, 507, - 507, 507, 507, 507, 285, nil, 285, 507, 507, nil, - nil, nil, 507, nil, 507, 507, 507, 507, 507, 507, - 507, nil, nil, nil, nil, nil, 507, 507, 507, 507, - 507, 507, 507, nil, nil, 507, nil, nil, nil, nil, - nil, 507, 507, 507, 507, 507, 507, 507, 507, 507, - 507, 507, 507, nil, 507, 507, 507, nil, 507, 507, - 507, 507, 507, 434, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 434, - 434, nil, 507, nil, nil, 507, nil, nil, 507, 507, - nil, nil, 507, nil, 507, 434, nil, 434, 507, 434, - 434, 434, 434, nil, nil, 434, 507, 434, nil, nil, - nil, 507, 507, 507, 507, nil, 507, 507, nil, nil, - nil, 507, 507, 510, 510, 510, 510, 510, 510, 507, - nil, 507, 510, 510, nil, nil, nil, 510, nil, 510, - 510, 510, 510, 510, 510, 510, nil, nil, nil, nil, - nil, 510, 510, 510, 510, 510, 510, 510, nil, nil, - 510, nil, nil, nil, nil, nil, 510, 510, 510, 510, - 510, 510, 510, 510, 510, 510, 510, 510, nil, 510, - 510, 510, nil, 510, 510, 510, 510, 510, 435, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 435, 435, nil, 510, nil, nil, - 510, nil, nil, 510, 510, nil, nil, 510, nil, 510, - 435, nil, 435, 510, 435, 435, 435, 435, nil, nil, - 435, 510, 435, nil, nil, nil, 510, 510, 510, 510, - nil, 510, 510, nil, nil, nil, 510, 510, 532, 532, - 532, 532, 532, 532, 510, nil, 510, 532, 532, nil, - nil, nil, 532, nil, 532, 532, 532, 532, 532, 532, - 532, nil, nil, nil, nil, nil, 532, 532, 532, 532, - 532, 532, 532, nil, nil, 532, nil, nil, nil, nil, - nil, 532, 532, 532, 532, 532, 532, 532, 532, 532, - 532, 532, 532, nil, 532, 532, 532, nil, 532, 532, - 532, 532, 532, 436, 436, 436, 436, 436, 436, 436, - nil, nil, 436, 436, nil, nil, nil, nil, nil, 436, - 436, nil, 532, nil, nil, 532, nil, nil, 532, 532, - nil, nil, 532, nil, 532, 436, nil, 436, 532, 436, - 436, 436, 436, 436, 436, 436, 532, 436, nil, nil, - nil, 532, 532, 532, 532, nil, 532, 532, nil, nil, - nil, 532, 532, 584, 584, 584, 584, 584, 584, 532, - nil, 532, 584, 584, nil, nil, nil, 584, nil, 584, - 584, 584, 584, 584, 584, 584, nil, nil, nil, nil, - nil, 584, 584, 584, 584, 584, 584, 584, nil, nil, - 584, nil, nil, nil, nil, nil, 584, 584, 584, 584, - 584, 584, 584, 584, 584, 584, 584, 584, nil, 584, - 584, 584, nil, 584, 584, 584, 584, 584, 437, 437, - 437, 437, 437, 437, 437, nil, nil, 437, 437, nil, - nil, nil, nil, nil, 437, 437, nil, 584, nil, nil, - 584, nil, nil, 584, 584, nil, nil, 584, nil, 584, - 437, nil, 437, 584, 437, 437, 437, 437, 437, 437, - 437, 584, 437, nil, nil, nil, 584, 584, 584, 584, - nil, 584, 584, nil, nil, nil, 584, 584, 603, 603, - 603, 603, 603, 603, 584, nil, 584, 603, 603, nil, - nil, nil, 603, nil, 603, 603, 603, 603, 603, 603, - 603, nil, nil, nil, nil, nil, 603, 603, 603, 603, - 603, 603, 603, nil, nil, 603, nil, nil, nil, nil, - nil, 603, 603, 603, 603, 603, 603, 603, 603, 603, - 603, 603, 603, nil, 603, 603, 603, nil, 603, 603, - 603, 603, 603, 438, 438, 438, 438, 438, 438, 438, - nil, nil, 438, 438, nil, nil, nil, nil, nil, 438, - 438, nil, 603, nil, nil, 603, nil, nil, 603, 603, - nil, nil, 603, nil, 603, 438, nil, 438, 603, 438, - 438, 438, 438, 438, 438, 438, 603, 438, nil, nil, - nil, 603, 603, 603, 603, nil, 603, 603, nil, nil, - nil, 603, 603, 604, 604, 604, 604, 604, 604, 603, - nil, 603, 604, 604, nil, nil, nil, 604, nil, 604, - 604, 604, 604, 604, 604, 604, nil, nil, nil, nil, - nil, 604, 604, 604, 604, 604, 604, 604, nil, nil, - 604, nil, nil, nil, nil, nil, 604, 604, 604, 604, - 604, 604, 604, 604, 604, 604, 604, 604, nil, 604, - 604, 604, nil, 604, 604, 604, 604, 604, 439, 439, - 439, 439, 439, 439, 439, nil, nil, 439, 439, nil, - nil, nil, nil, nil, 439, 439, nil, 604, nil, nil, - 604, nil, nil, 604, 604, nil, nil, 604, nil, 604, - 439, nil, 439, 604, 439, 439, 439, 439, 439, 439, - 439, 604, 439, nil, nil, nil, 604, 604, 604, 604, - nil, 604, 604, nil, nil, nil, 604, 604, 625, 625, - 625, 625, 625, 625, 604, nil, 604, 625, 625, nil, - nil, nil, 625, nil, 625, 625, 625, 625, 625, 625, - 625, nil, nil, nil, nil, nil, 625, 625, 625, 625, - 625, 625, 625, nil, nil, 625, nil, nil, nil, nil, - nil, 625, 625, 625, 625, 625, 625, 625, 625, 625, - 625, 625, 625, nil, 625, 625, 625, nil, 625, 625, - 625, 625, 625, 440, 440, 440, 440, 440, 440, 440, - nil, nil, 440, 440, nil, nil, nil, nil, nil, 440, - 440, nil, 625, nil, nil, 625, nil, nil, 625, 625, - nil, nil, 625, nil, 625, 440, nil, 440, 625, 440, - 440, 440, 440, 440, 440, 440, 625, 440, nil, nil, - nil, 625, 625, 625, 625, nil, 625, 625, nil, nil, - nil, 625, 625, 676, 676, 676, 676, 676, 676, 625, - nil, 625, 676, 676, nil, nil, nil, 676, nil, 676, - 676, 676, 676, 676, 676, 676, nil, nil, nil, nil, - nil, 676, 676, 676, 676, 676, 676, 676, nil, nil, - 676, nil, nil, nil, nil, nil, 676, 676, 676, 676, - 676, 676, 676, 676, 676, 676, 676, 676, nil, 676, - 676, 676, nil, 676, 676, 676, 676, 676, 443, 443, - 443, 443, 443, 443, 443, nil, nil, 443, 443, nil, - nil, nil, nil, nil, 443, 443, nil, 676, nil, nil, - 676, nil, nil, 676, 676, nil, nil, 676, nil, 676, - 443, nil, 443, 676, 443, 443, 443, 443, 443, 443, - 443, 676, 443, nil, nil, nil, 676, 676, 676, 676, - nil, 676, 676, nil, nil, nil, 676, 676, 681, 681, - 681, 681, 681, 681, 676, nil, 676, 681, 681, nil, - nil, nil, 681, nil, 681, 681, 681, 681, 681, 681, - 681, nil, nil, nil, nil, nil, 681, 681, 681, 681, - 681, 681, 681, nil, nil, 681, nil, nil, nil, nil, - nil, 681, 681, 681, 681, 681, 681, 681, 681, 681, - 681, 681, 681, nil, 681, 681, 681, nil, 681, 681, - 681, 681, 681, 444, 444, 444, 444, 444, 444, 444, - 444, nil, 444, 444, nil, nil, nil, nil, nil, 444, - 444, nil, 681, nil, nil, 681, nil, nil, 681, 681, - nil, nil, 681, nil, 681, 444, nil, 444, 681, 444, - 444, 444, 444, 444, 444, 444, 681, 444, nil, nil, - nil, 681, 681, 681, 681, nil, 681, 681, nil, nil, - nil, 681, 681, 691, 691, 691, 691, 691, 691, 681, - nil, 681, 691, 691, nil, nil, nil, 691, nil, 691, - 691, 691, 691, 691, 691, 691, nil, nil, nil, nil, - nil, 691, 691, 691, 691, 691, 691, 691, nil, nil, - 691, nil, nil, nil, nil, nil, 691, 691, 691, 691, - 691, 691, 691, 691, 691, 691, 691, 691, nil, 691, - 691, 691, nil, 691, 691, 691, 691, 691, 429, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 429, 429, nil, 691, nil, nil, - 691, nil, nil, 691, 691, nil, nil, 691, nil, 691, - 429, nil, 429, 691, 429, 429, 429, 429, nil, nil, - nil, 691, nil, nil, nil, nil, 691, 691, 691, 691, - nil, 691, 691, nil, nil, nil, 691, 691, 730, 730, - 730, 730, 730, 730, 691, nil, 691, 730, 730, nil, - nil, nil, 730, nil, 730, 730, 730, 730, 730, 730, - 730, nil, nil, nil, nil, nil, 730, 730, 730, 730, - 730, 730, 730, nil, nil, 730, nil, nil, nil, nil, - nil, 730, 730, 730, 730, 730, 730, 730, 730, 730, - 730, 730, 730, nil, 730, 730, 730, nil, 730, 730, - 730, 730, 730, 430, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 430, - 430, nil, 730, nil, nil, 730, nil, nil, 730, 730, - nil, nil, 730, nil, 730, 430, nil, nil, 730, 430, - 430, 430, 430, nil, nil, nil, 730, nil, nil, nil, - nil, 730, 730, 730, 730, nil, 730, 730, nil, nil, - nil, 730, 730, 742, 742, 742, 742, 742, 742, 730, - nil, 730, 742, 742, nil, nil, nil, 742, nil, 742, - 742, 742, 742, 742, 742, 742, nil, nil, nil, nil, - nil, 742, 742, 742, 742, 742, 742, 742, nil, nil, - 742, nil, nil, nil, nil, nil, 742, 742, 742, 742, - 742, 742, 742, 742, 742, 742, 742, 742, nil, 742, - 742, 742, nil, 742, 742, 742, 742, 742, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 742, nil, nil, - 742, nil, nil, 742, 742, nil, nil, 742, nil, 742, - nil, nil, nil, 742, nil, nil, nil, nil, nil, nil, - nil, 742, nil, nil, nil, nil, 742, 742, 742, 742, - nil, 742, 742, nil, nil, nil, 742, 742, 776, 776, - 776, 776, 776, 776, 742, nil, 742, 776, 776, nil, - nil, nil, 776, nil, 776, 776, 776, 776, 776, 776, - 776, nil, nil, nil, nil, nil, 776, 776, 776, 776, - 776, 776, 776, nil, nil, 776, nil, nil, nil, nil, - nil, 776, 776, 776, 776, 776, 776, 776, 776, 776, - 776, 776, 776, nil, 776, 776, 776, nil, 776, 776, - 776, 776, 776, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 776, nil, nil, 776, nil, nil, 776, 776, - nil, nil, 776, nil, 776, nil, nil, nil, 776, nil, - nil, nil, nil, nil, nil, nil, 776, nil, nil, nil, - nil, 776, 776, 776, 776, nil, 776, 776, nil, nil, - nil, 776, 776, 777, 777, 777, 777, 777, 777, 776, - nil, 776, 777, 777, nil, nil, nil, 777, nil, 777, - 777, 777, 777, 777, 777, 777, nil, nil, nil, nil, - nil, 777, 777, 777, 777, 777, 777, 777, nil, nil, - 777, nil, nil, nil, nil, nil, 777, 777, 777, 777, - 777, 777, 777, 777, 777, 777, 777, 777, nil, 777, - 777, 777, nil, 777, 777, 777, 777, 777, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 777, nil, nil, - 777, nil, nil, 777, 777, nil, nil, 777, nil, 777, - nil, nil, nil, 777, nil, nil, nil, nil, nil, nil, - nil, 777, nil, nil, nil, nil, 777, 777, 777, 777, - nil, 777, 777, nil, nil, nil, 777, 777, 780, 780, - 780, 780, 780, 780, 777, nil, 777, 780, 780, nil, - nil, nil, 780, nil, 780, 780, 780, 780, 780, 780, - 780, nil, nil, nil, nil, nil, 780, 780, 780, 780, - 780, 780, 780, nil, nil, 780, nil, nil, nil, nil, - nil, 780, 780, 780, 780, 780, 780, 780, 780, 780, - 780, 780, 780, nil, 780, 780, 780, nil, 780, 780, - 780, 780, 780, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 780, nil, nil, 780, nil, nil, 780, 780, - nil, nil, 780, nil, 780, nil, nil, nil, 780, nil, - nil, nil, nil, nil, nil, nil, 780, nil, nil, nil, - nil, 780, 780, 780, 780, nil, 780, 780, nil, nil, - nil, 780, 780, 786, 786, 786, 786, 786, 786, 780, - nil, 780, 786, 786, nil, nil, nil, 786, nil, 786, - 786, 786, 786, 786, 786, 786, nil, nil, nil, nil, - nil, 786, 786, 786, 786, 786, 786, 786, nil, nil, - 786, nil, nil, nil, nil, nil, 786, 786, 786, 786, - 786, 786, 786, 786, 786, 786, 786, 786, nil, 786, - 786, 786, nil, 786, 786, 786, 786, 786, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 786, nil, nil, - 786, nil, nil, 786, 786, nil, nil, 786, nil, 786, - nil, nil, nil, 786, nil, nil, nil, nil, nil, nil, - nil, 786, nil, nil, nil, nil, 786, 786, 786, 786, - nil, 786, 786, nil, nil, nil, 786, 786, 821, 821, - 821, 821, 821, 821, 786, nil, 786, 821, 821, nil, - nil, nil, 821, nil, 821, 821, 821, 821, 821, 821, - 821, nil, nil, nil, nil, nil, 821, 821, 821, 821, - 821, 821, 821, nil, nil, 821, nil, nil, nil, nil, - nil, 821, 821, 821, 821, 821, 821, 821, 821, 821, - 821, 821, 821, nil, 821, 821, 821, nil, 821, 821, - 821, 821, 821, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 821, nil, nil, 821, nil, nil, 821, 821, - nil, nil, 821, nil, 821, nil, nil, nil, 821, nil, - nil, nil, nil, nil, nil, nil, 821, nil, nil, nil, - nil, 821, 821, 821, 821, nil, 821, 821, nil, nil, - nil, 821, 821, 827, 827, 827, 827, 827, 827, 821, - nil, 821, 827, 827, nil, nil, nil, 827, nil, 827, - 827, 827, 827, 827, 827, 827, nil, nil, nil, nil, - nil, 827, 827, 827, 827, 827, 827, 827, nil, nil, - 827, nil, nil, nil, nil, nil, 827, 827, 827, 827, - 827, 827, 827, 827, 827, 827, 827, 827, nil, 827, - 827, 827, nil, 827, 827, 827, 827, 827, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 827, nil, nil, - 827, nil, nil, 827, 827, nil, nil, 827, nil, 827, - nil, nil, nil, 827, nil, nil, nil, nil, nil, nil, - nil, 827, nil, nil, nil, nil, 827, 827, 827, 827, - nil, 827, 827, nil, nil, nil, 827, 827, 828, 828, - 828, 828, 828, 828, 827, nil, 827, 828, 828, nil, - nil, nil, 828, nil, 828, 828, 828, 828, 828, 828, - 828, nil, nil, nil, nil, nil, 828, 828, 828, 828, - 828, 828, 828, nil, nil, 828, nil, nil, nil, nil, - nil, 828, 828, 828, 828, 828, 828, 828, 828, 828, - 828, 828, 828, nil, 828, 828, 828, nil, 828, 828, - 828, 828, 828, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 828, nil, nil, 828, nil, nil, 828, 828, - nil, nil, 828, nil, 828, nil, nil, nil, 828, nil, - nil, nil, nil, nil, nil, nil, 828, nil, nil, nil, - nil, 828, 828, 828, 828, nil, 828, 828, nil, nil, - nil, 828, 828, 897, 897, 897, 897, 897, 897, 828, - nil, 828, 897, 897, nil, nil, nil, 897, nil, 897, - 897, 897, 897, 897, 897, 897, nil, nil, nil, nil, - nil, 897, 897, 897, 897, 897, 897, 897, nil, nil, - 897, nil, nil, nil, nil, nil, 897, 897, 897, 897, - 897, 897, 897, 897, 897, 897, 897, 897, nil, 897, - 897, 897, nil, 897, 897, 897, 897, 897, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 897, nil, nil, - 897, nil, nil, 897, 897, nil, nil, 897, nil, 897, - nil, nil, nil, 897, nil, nil, nil, nil, nil, nil, - nil, 897, nil, nil, nil, nil, 897, 897, 897, 897, - nil, 897, 897, nil, nil, nil, 897, 897, 903, 903, - 903, 903, 903, 903, 897, nil, 897, 903, 903, nil, - nil, nil, 903, nil, 903, 903, 903, 903, 903, 903, - 903, nil, nil, nil, nil, nil, 903, 903, 903, 903, - 903, 903, 903, nil, nil, 903, nil, nil, nil, nil, - nil, 903, 903, 903, 903, 903, 903, 903, 903, 903, - 903, 903, 903, nil, 903, 903, 903, nil, 903, 903, - 903, 903, 903, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 903, nil, nil, 903, nil, nil, 903, 903, - nil, nil, 903, nil, 903, nil, nil, nil, 903, nil, - nil, nil, nil, nil, nil, nil, 903, nil, nil, nil, - nil, 903, 903, 903, 903, nil, 903, 903, nil, nil, - nil, 903, 903, 905, 905, 905, 905, 905, 905, 903, - nil, 903, 905, 905, nil, nil, nil, 905, nil, 905, - 905, 905, 905, 905, 905, 905, nil, nil, nil, nil, - nil, 905, 905, 905, 905, 905, 905, 905, nil, nil, - 905, nil, nil, nil, nil, nil, 905, 905, 905, 905, - 905, 905, 905, 905, 905, 905, 905, 905, nil, 905, - 905, 905, nil, 905, 905, 905, 905, 905, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 905, nil, nil, - 905, nil, nil, 905, 905, nil, nil, 905, nil, 905, - nil, nil, nil, 905, nil, nil, nil, nil, nil, nil, - nil, 905, nil, nil, nil, nil, 905, 905, 905, 905, - nil, 905, 905, nil, nil, nil, 905, 905, nil, 5, - 5, 5, 5, 5, 905, nil, 905, 5, 5, nil, - nil, nil, 5, nil, 5, 5, 5, 5, 5, 5, - 5, nil, nil, nil, nil, nil, 5, 5, 5, 5, - 5, 5, 5, nil, nil, 5, nil, nil, nil, nil, - nil, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, nil, 5, 5, 5, nil, 5, 5, - 5, 5, 5, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 5, nil, nil, 5, nil, nil, 5, 5, - nil, nil, 5, nil, 5, nil, nil, nil, 5, nil, - nil, nil, nil, nil, nil, nil, 5, nil, nil, nil, - nil, 5, 5, 5, 5, nil, 5, 5, nil, nil, - nil, 5, 5, nil, 18, 18, 18, nil, 18, 5, - nil, 5, 18, 18, nil, nil, nil, 18, nil, 18, - 18, 18, 18, 18, 18, 18, nil, nil, nil, nil, - nil, 18, 18, 18, 18, 18, 18, 18, nil, nil, - 18, nil, nil, nil, nil, nil, nil, 18, nil, nil, - 18, 18, 18, 18, 18, 18, 18, 18, nil, 18, - 18, 18, nil, 18, 18, 18, 18, 18, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 18, nil, nil, - 18, nil, nil, 18, 18, nil, nil, 18, nil, nil, - nil, nil, nil, 18, nil, nil, nil, nil, nil, nil, - nil, 18, nil, nil, nil, nil, 18, 18, 18, 18, - nil, 18, 18, nil, nil, nil, 18, 18, nil, 22, - 22, 22, nil, 22, 18, nil, 18, 22, 22, nil, - nil, nil, 22, nil, 22, 22, 22, 22, 22, 22, - 22, nil, nil, nil, nil, nil, 22, 22, 22, 22, - 22, 22, 22, nil, nil, 22, nil, nil, nil, nil, - nil, nil, 22, nil, nil, 22, 22, 22, 22, 22, - 22, 22, 22, 22, 22, 22, 22, nil, 22, 22, - 22, 22, 22, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 22, nil, nil, 22, nil, nil, 22, 22, - nil, nil, 22, nil, 22, nil, 22, nil, 22, nil, - nil, nil, nil, nil, nil, nil, 22, nil, nil, nil, - nil, 22, 22, 22, 22, nil, 22, 22, nil, nil, - nil, 22, 22, nil, 23, 23, 23, nil, 23, 22, - nil, 22, 23, 23, nil, nil, nil, 23, nil, 23, - 23, 23, 23, 23, 23, 23, nil, nil, nil, nil, - nil, 23, 23, 23, 23, 23, 23, 23, nil, nil, - 23, nil, nil, nil, nil, nil, nil, 23, nil, nil, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, nil, 23, 23, 23, 23, 23, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 23, nil, nil, - 23, nil, nil, 23, 23, nil, nil, 23, nil, 23, - nil, 23, nil, 23, nil, nil, nil, nil, nil, nil, - nil, 23, nil, nil, nil, nil, 23, 23, 23, 23, - nil, 23, 23, nil, nil, nil, 23, 23, nil, 24, - 24, 24, nil, 24, 23, nil, 23, 24, 24, nil, - nil, nil, 24, nil, 24, 24, 24, 24, 24, 24, - 24, nil, nil, nil, nil, nil, 24, 24, 24, 24, - 24, 24, 24, nil, nil, 24, nil, nil, nil, nil, - nil, nil, 24, nil, nil, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, nil, 24, 24, - 24, 24, 24, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 24, nil, nil, 24, nil, nil, 24, 24, - nil, nil, 24, nil, 24, nil, 24, nil, 24, nil, - nil, nil, nil, nil, nil, nil, 24, nil, nil, nil, - nil, 24, 24, 24, 24, nil, 24, 24, nil, nil, - nil, 24, 24, nil, 31, 31, 31, nil, 31, 24, - nil, 24, 31, 31, nil, nil, nil, 31, nil, 31, - 31, 31, 31, 31, 31, 31, nil, nil, nil, nil, - nil, 31, 31, 31, 31, 31, 31, 31, nil, nil, - 31, nil, nil, nil, nil, nil, nil, 31, nil, nil, - 31, 31, 31, 31, 31, 31, 31, 31, nil, 31, - 31, 31, nil, 31, 31, nil, 756, 31, 756, 756, - 756, 756, 756, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 31, nil, nil, - 31, nil, nil, 31, 31, nil, nil, 31, nil, 31, - nil, nil, nil, 756, nil, nil, nil, nil, nil, nil, - nil, nil, 756, 756, 756, 756, 31, 31, 31, 31, - nil, 31, 31, nil, nil, nil, 31, 31, nil, 32, - 32, 32, nil, 32, 31, nil, 31, 32, 32, nil, - nil, nil, 32, nil, 32, 32, 32, 32, 32, 32, - 32, nil, nil, nil, nil, nil, 32, 32, 32, 32, - 32, 32, 32, nil, nil, 32, nil, nil, nil, nil, - nil, 381, 32, nil, nil, 32, 32, 32, 32, 32, - 32, 32, 32, nil, 32, 32, 32, nil, 32, 32, - nil, nil, 32, nil, 381, 381, 381, 381, 381, 381, - 381, 381, 381, 381, 381, nil, 381, 381, nil, nil, - 381, 381, 32, nil, nil, 32, nil, nil, 32, 32, - nil, nil, 32, nil, nil, nil, 381, nil, 381, nil, - 381, 381, 381, 381, 381, 381, 381, nil, 381, nil, - nil, 32, 32, 32, 32, nil, 32, 32, nil, nil, - nil, 32, 32, nil, nil, 381, 32, 381, nil, 32, - nil, 32, 38, 38, 38, nil, 38, nil, nil, nil, - 38, 38, nil, nil, nil, 38, nil, 38, 38, 38, - 38, 38, 38, 38, nil, nil, nil, nil, nil, 38, - 38, 38, 38, 38, 38, 38, nil, nil, 38, nil, - nil, nil, nil, nil, nil, 38, nil, nil, 38, 38, - 38, 38, 38, 38, 38, 38, nil, 38, 38, 38, - nil, 38, 38, 38, 38, 38, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 38, nil, nil, 38, nil, - nil, 38, 38, nil, nil, 38, nil, nil, nil, nil, - nil, 38, nil, nil, nil, nil, nil, nil, nil, 38, - nil, nil, nil, nil, 38, 38, 38, 38, nil, 38, - 38, nil, nil, nil, 38, 38, nil, 39, 39, 39, - nil, 39, 38, nil, 38, 39, 39, nil, nil, nil, - 39, nil, 39, 39, 39, 39, 39, 39, 39, nil, - nil, nil, nil, nil, 39, 39, 39, 39, 39, 39, - 39, nil, nil, 39, nil, nil, nil, nil, nil, nil, - 39, nil, nil, 39, 39, 39, 39, 39, 39, 39, - 39, nil, 39, 39, 39, nil, 39, 39, 39, 39, - 39, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 39, nil, nil, 39, nil, nil, 39, 39, nil, nil, - 39, nil, nil, nil, nil, nil, 39, nil, nil, nil, - nil, nil, nil, nil, 39, nil, nil, nil, nil, 39, - 39, 39, 39, nil, 39, 39, nil, nil, nil, 39, - 39, nil, 40, 40, 40, nil, 40, 39, nil, 39, - 40, 40, nil, nil, nil, 40, nil, 40, 40, 40, - 40, 40, 40, 40, nil, nil, nil, nil, nil, 40, - 40, 40, 40, 40, 40, 40, nil, nil, 40, nil, - nil, nil, nil, nil, nil, 40, nil, nil, 40, 40, - 40, 40, 40, 40, 40, 40, nil, 40, 40, 40, - nil, 40, 40, 40, 40, 40, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 40, nil, nil, 40, nil, - nil, 40, 40, nil, nil, 40, nil, nil, nil, nil, - nil, 40, nil, nil, nil, nil, nil, nil, nil, 40, - nil, nil, nil, nil, 40, 40, 40, 40, nil, 40, - 40, nil, nil, nil, 40, 40, nil, 52, 52, 52, - nil, 52, 40, nil, 40, 52, 52, nil, nil, nil, - 52, nil, 52, 52, 52, 52, 52, 52, 52, nil, - nil, nil, nil, nil, 52, 52, 52, 52, 52, 52, - 52, nil, nil, 52, nil, nil, nil, nil, nil, nil, - 52, nil, nil, 52, 52, 52, 52, 52, 52, 52, - 52, nil, 52, 52, 52, nil, 52, 52, 52, 52, - 52, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 52, nil, nil, 52, nil, nil, 52, 52, nil, nil, - 52, nil, nil, nil, nil, nil, 52, nil, nil, nil, - nil, nil, nil, nil, 52, nil, nil, nil, nil, 52, - 52, 52, 52, nil, 52, 52, nil, nil, nil, 52, - 52, nil, 53, 53, 53, nil, 53, 52, nil, 52, - 53, 53, nil, nil, nil, 53, nil, 53, 53, 53, - 53, 53, 53, 53, nil, nil, nil, nil, nil, 53, - 53, 53, 53, 53, 53, 53, nil, nil, 53, nil, - nil, nil, nil, nil, nil, 53, nil, nil, 53, 53, - 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, - nil, 53, 53, 53, 53, 53, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 53, nil, nil, 53, nil, - nil, 53, 53, nil, nil, 53, nil, 53, nil, nil, - nil, 53, nil, nil, nil, nil, nil, nil, nil, 53, - nil, nil, nil, nil, 53, 53, 53, 53, nil, 53, - 53, nil, nil, nil, 53, 53, nil, 54, 54, 54, - nil, 54, 53, nil, 53, 54, 54, nil, nil, nil, - 54, nil, 54, 54, 54, 54, 54, 54, 54, nil, - nil, nil, nil, nil, 54, 54, 54, 54, 54, 54, - 54, nil, nil, 54, nil, nil, nil, nil, nil, nil, - 54, nil, nil, 54, 54, 54, 54, 54, 54, 54, - 54, 54, 54, 54, 54, nil, 54, 54, 54, 54, - 54, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 54, nil, nil, 54, nil, nil, 54, 54, nil, nil, - 54, nil, nil, nil, nil, nil, 54, nil, nil, nil, - nil, nil, nil, nil, 54, nil, nil, nil, nil, 54, - 54, 54, 54, nil, 54, 54, nil, nil, nil, 54, - 54, nil, 57, 57, 57, nil, 57, 54, nil, 54, - 57, 57, nil, nil, nil, 57, nil, 57, 57, 57, - 57, 57, 57, 57, nil, nil, nil, nil, nil, 57, - 57, 57, 57, 57, 57, 57, nil, nil, 57, nil, - nil, nil, nil, nil, nil, 57, nil, nil, 57, 57, - 57, 57, 57, 57, 57, 57, nil, 57, 57, 57, - nil, 57, 57, 57, 57, 57, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 57, nil, nil, 57, nil, - nil, 57, 57, nil, nil, 57, nil, nil, nil, nil, - nil, 57, nil, nil, nil, nil, nil, nil, nil, 57, - nil, nil, nil, nil, 57, 57, 57, 57, nil, 57, - 57, nil, nil, nil, 57, 57, nil, 58, 58, 58, - nil, 58, 57, nil, 57, 58, 58, nil, nil, nil, - 58, nil, 58, 58, 58, 58, 58, 58, 58, nil, - nil, nil, nil, nil, 58, 58, 58, 58, 58, 58, - 58, nil, nil, 58, nil, nil, nil, nil, nil, nil, - 58, nil, nil, 58, 58, 58, 58, 58, 58, 58, - 58, nil, 58, 58, 58, nil, 58, 58, 58, 58, - 58, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 58, nil, nil, 58, nil, nil, 58, 58, nil, nil, - 58, nil, nil, nil, nil, nil, 58, nil, nil, nil, - nil, nil, nil, nil, 58, nil, nil, nil, nil, 58, - 58, 58, 58, nil, 58, 58, nil, nil, nil, 58, - 58, nil, 61, 61, 61, nil, 61, 58, nil, 58, - 61, 61, nil, nil, nil, 61, nil, 61, 61, 61, - 61, 61, 61, 61, nil, nil, nil, nil, nil, 61, - 61, 61, 61, 61, 61, 61, nil, nil, 61, nil, - nil, nil, nil, 389, nil, 61, nil, nil, 61, 61, - 61, 61, 61, 61, 61, 61, nil, 61, 61, 61, - nil, 61, 61, 61, 61, 61, 389, 389, 389, 389, - 389, 389, 389, 389, 389, 389, 389, nil, 389, 389, - nil, nil, 389, 389, nil, 61, nil, nil, 61, nil, - nil, 61, 61, nil, nil, 61, nil, nil, 389, nil, - 389, 61, 389, 389, 389, 389, 389, 389, 389, 61, - 389, nil, nil, nil, 61, 61, 61, 61, nil, 61, - 61, nil, nil, nil, 61, 61, 61, 389, nil, nil, - nil, 61, 61, nil, 61, 62, 62, 62, nil, 62, - nil, nil, nil, 62, 62, nil, nil, nil, 62, nil, - 62, 62, 62, 62, 62, 62, 62, nil, nil, nil, - nil, nil, 62, 62, 62, 62, 62, 62, 62, nil, - nil, 62, nil, nil, nil, nil, nil, nil, 62, nil, - nil, 62, 62, 62, 62, 62, 62, 62, 62, nil, - 62, 62, 62, nil, 62, 62, nil, 798, 62, 798, - 798, 798, 798, 798, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 62, nil, - nil, 62, nil, nil, 62, 62, nil, nil, 62, nil, - 62, nil, nil, nil, 798, nil, nil, nil, nil, nil, - nil, nil, nil, 798, 798, 798, 798, 62, 62, 62, - 62, nil, 62, 62, nil, nil, nil, 62, 62, nil, - 63, 63, 63, nil, 63, 62, nil, 62, 63, 63, - nil, nil, nil, 63, nil, 63, 63, 63, 63, 63, - 63, 63, nil, nil, nil, nil, nil, 63, 63, 63, - 63, 63, 63, 63, nil, nil, 63, nil, nil, nil, - nil, nil, nil, 63, nil, nil, 63, 63, 63, 63, - 63, 63, 63, 63, nil, 63, 63, 63, nil, 63, - 63, nil, 800, 63, 800, 800, 800, 800, 800, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 63, nil, nil, 63, nil, nil, 63, nil, nil, 63, - 63, nil, nil, 63, nil, nil, nil, nil, nil, 800, - nil, nil, nil, nil, nil, nil, nil, nil, 800, 800, - 800, 800, 63, 63, 63, 63, nil, 63, 63, nil, - nil, nil, 63, 63, nil, 64, 64, 64, nil, 64, - 63, nil, 63, 64, 64, nil, nil, nil, 64, nil, - 64, 64, 64, 64, 64, 64, 64, nil, nil, nil, - nil, nil, 64, 64, 64, 64, 64, 64, 64, nil, - nil, 64, nil, nil, nil, nil, nil, nil, 64, nil, - nil, 64, 64, 64, 64, 64, 64, 64, 64, nil, - 64, 64, 64, nil, 64, 64, nil, 857, 64, 857, - 857, 857, 857, 857, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 64, nil, - nil, 64, nil, nil, 64, 64, nil, nil, 64, nil, - nil, nil, nil, nil, 857, 857, nil, nil, nil, nil, - nil, nil, nil, 857, 857, 857, 857, 64, 64, 64, - 64, nil, 64, 64, nil, nil, nil, 64, 64, nil, - 102, 102, 102, 102, 102, 64, nil, 64, 102, 102, - nil, nil, nil, 102, nil, 102, 102, 102, 102, 102, - 102, 102, nil, nil, nil, nil, nil, 102, 102, 102, - 102, 102, 102, 102, nil, nil, 102, nil, nil, nil, - nil, 579, 102, 102, 102, 102, 102, 102, 102, 102, - 102, 102, 102, 102, nil, 102, 102, 102, nil, 102, - 102, 102, 102, 102, 579, 579, 579, 579, 579, 579, - 579, 579, 579, 579, 579, nil, 579, 579, nil, nil, - 579, 579, nil, 102, nil, nil, 102, nil, nil, 102, - 102, nil, nil, 102, nil, 102, 579, nil, 579, 102, - 579, 579, 579, 579, 579, 579, 579, 102, 579, nil, - nil, nil, 102, 102, 102, 102, nil, 102, 102, nil, - nil, nil, 102, 102, nil, 579, nil, nil, nil, 102, - 102, nil, 102, 106, 106, 106, nil, 106, nil, nil, - nil, 106, 106, nil, nil, nil, 106, nil, 106, 106, - 106, 106, 106, 106, 106, nil, nil, nil, nil, nil, - 106, 106, 106, 106, 106, 106, 106, nil, nil, 106, - nil, nil, nil, nil, nil, nil, 106, nil, nil, 106, - 106, 106, 106, 106, 106, 106, 106, nil, 106, 106, - 106, nil, 106, 106, 106, 106, 106, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 106, nil, nil, 106, - nil, nil, 106, 106, nil, nil, 106, nil, nil, nil, - nil, nil, 106, nil, nil, nil, nil, nil, nil, nil, - 106, nil, nil, nil, nil, 106, 106, 106, 106, nil, - 106, 106, nil, nil, nil, 106, 106, nil, 107, 107, - 107, nil, 107, 106, nil, 106, 107, 107, nil, nil, - nil, 107, nil, 107, 107, 107, 107, 107, 107, 107, - nil, nil, nil, nil, nil, 107, 107, 107, 107, 107, - 107, 107, nil, nil, 107, nil, nil, nil, nil, nil, - nil, 107, nil, nil, 107, 107, 107, 107, 107, 107, - 107, 107, nil, 107, 107, 107, nil, 107, 107, 107, - 107, 107, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 107, nil, nil, 107, nil, nil, 107, 107, nil, - nil, 107, nil, nil, nil, nil, nil, 107, nil, nil, - nil, nil, nil, nil, nil, 107, nil, nil, nil, nil, - 107, 107, 107, 107, nil, 107, 107, nil, nil, nil, - 107, 107, nil, 108, 108, 108, nil, 108, 107, nil, - 107, 108, 108, nil, nil, nil, 108, nil, 108, 108, - 108, 108, 108, 108, 108, nil, nil, nil, nil, nil, - 108, 108, 108, 108, 108, 108, 108, nil, nil, 108, - nil, nil, nil, nil, nil, nil, 108, nil, nil, 108, - 108, 108, 108, 108, 108, 108, 108, nil, 108, 108, - 108, nil, 108, 108, 108, 108, 108, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 108, nil, nil, 108, - nil, nil, 108, 108, nil, nil, 108, nil, nil, nil, - nil, nil, 108, nil, nil, nil, nil, nil, nil, nil, - 108, nil, nil, nil, nil, 108, 108, 108, 108, nil, - 108, 108, nil, nil, nil, 108, 108, nil, 109, 109, - 109, nil, 109, 108, nil, 108, 109, 109, nil, nil, - nil, 109, nil, 109, 109, 109, 109, 109, 109, 109, - nil, nil, nil, nil, nil, 109, 109, 109, 109, 109, - 109, 109, nil, nil, 109, nil, nil, nil, nil, nil, - nil, 109, nil, nil, 109, 109, 109, 109, 109, 109, - 109, 109, nil, 109, 109, 109, nil, 109, 109, 109, - 109, 109, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 109, nil, nil, 109, nil, nil, 109, 109, nil, - nil, 109, nil, nil, nil, nil, nil, 109, nil, nil, - nil, nil, nil, nil, nil, 109, nil, nil, nil, nil, - 109, 109, 109, 109, nil, 109, 109, nil, nil, nil, - 109, 109, nil, 110, 110, 110, 110, 110, 109, nil, - 109, 110, 110, nil, nil, nil, 110, nil, 110, 110, - 110, 110, 110, 110, 110, nil, nil, nil, nil, nil, - 110, 110, 110, 110, 110, 110, 110, nil, nil, 110, - nil, nil, nil, nil, nil, 110, 110, 110, 110, 110, - 110, 110, 110, 110, 110, 110, 110, nil, 110, 110, - 110, nil, 110, 110, 110, 110, 110, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 110, nil, nil, 110, - nil, nil, 110, 110, nil, nil, 110, nil, 110, nil, - nil, nil, 110, nil, nil, nil, nil, nil, nil, nil, - 110, nil, nil, nil, nil, 110, 110, 110, 110, nil, - 110, 110, nil, nil, nil, 110, 110, nil, 197, 197, - 197, nil, 197, 110, nil, 110, 197, 197, nil, nil, - nil, 197, nil, 197, 197, 197, 197, 197, 197, 197, - nil, nil, nil, nil, nil, 197, 197, 197, 197, 197, - 197, 197, nil, nil, 197, nil, nil, nil, nil, nil, - nil, 197, nil, nil, 197, 197, 197, 197, 197, 197, - 197, 197, nil, 197, 197, 197, nil, 197, 197, 197, - 197, 197, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 197, nil, nil, 197, nil, nil, 197, 197, nil, - nil, 197, nil, 197, nil, nil, nil, 197, nil, nil, - nil, nil, nil, nil, nil, 197, nil, nil, nil, nil, - 197, 197, 197, 197, nil, 197, 197, nil, nil, nil, - 197, 197, nil, 198, 198, 198, nil, 198, 197, nil, - 197, 198, 198, nil, nil, nil, 198, nil, 198, 198, - 198, 198, 198, 198, 198, nil, nil, nil, nil, nil, - 198, 198, 198, 198, 198, 198, 198, nil, nil, 198, - nil, nil, nil, nil, nil, nil, 198, nil, nil, 198, - 198, 198, 198, 198, 198, 198, 198, nil, 198, 198, - 198, nil, 198, 198, 198, 198, 198, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 198, nil, nil, 198, - nil, nil, 198, 198, nil, nil, 198, nil, 198, nil, - nil, nil, 198, nil, nil, nil, nil, nil, nil, nil, - 198, nil, nil, nil, nil, 198, 198, 198, 198, nil, - 198, 198, nil, nil, nil, 198, 198, nil, 199, 199, - 199, nil, 199, 198, nil, 198, 199, 199, nil, nil, - nil, 199, nil, 199, 199, 199, 199, 199, 199, 199, - nil, nil, nil, nil, nil, 199, 199, 199, 199, 199, - 199, 199, nil, nil, 199, nil, nil, nil, nil, nil, - nil, 199, nil, nil, 199, 199, 199, 199, 199, 199, - 199, 199, nil, 199, 199, 199, nil, 199, 199, 199, - 199, 199, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 199, nil, nil, 199, nil, nil, 199, 199, nil, - nil, 199, nil, nil, nil, nil, nil, 199, nil, nil, - nil, nil, nil, nil, nil, 199, nil, nil, nil, nil, - 199, 199, 199, 199, nil, 199, 199, nil, nil, nil, - 199, 199, nil, 200, 200, 200, nil, 200, 199, nil, - 199, 200, 200, nil, nil, nil, 200, nil, 200, 200, - 200, 200, 200, 200, 200, nil, nil, nil, nil, nil, - 200, 200, 200, 200, 200, 200, 200, nil, nil, 200, - nil, nil, nil, nil, nil, nil, 200, nil, nil, 200, - 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, - 200, nil, 200, 200, 200, 200, 200, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 200, nil, nil, 200, - nil, nil, 200, 200, nil, nil, 200, nil, 200, nil, - 200, nil, 200, nil, nil, nil, nil, nil, nil, nil, - 200, nil, nil, nil, nil, 200, 200, 200, 200, nil, - 200, 200, nil, nil, nil, 200, 200, nil, 205, 205, - 205, nil, 205, 200, nil, 200, 205, 205, nil, nil, - nil, 205, nil, 205, 205, 205, 205, 205, 205, 205, - nil, nil, nil, nil, nil, 205, 205, 205, 205, 205, - 205, 205, nil, nil, 205, nil, nil, nil, nil, nil, - nil, 205, nil, nil, 205, 205, 205, 205, 205, 205, - 205, 205, nil, 205, 205, 205, nil, 205, 205, 205, - 205, 205, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 205, nil, nil, 205, nil, nil, 205, 205, nil, - nil, 205, nil, nil, nil, nil, nil, 205, nil, nil, - nil, nil, nil, nil, nil, 205, nil, nil, nil, nil, - 205, 205, 205, 205, nil, 205, 205, nil, nil, nil, - 205, 205, nil, 206, 206, 206, nil, 206, 205, nil, - 205, 206, 206, nil, nil, nil, 206, nil, 206, 206, - 206, 206, 206, 206, 206, nil, nil, nil, nil, nil, - 206, 206, 206, 206, 206, 206, 206, nil, nil, 206, - nil, nil, nil, nil, nil, nil, 206, nil, nil, 206, - 206, 206, 206, 206, 206, 206, 206, nil, 206, 206, - 206, nil, 206, 206, 206, 206, 206, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 206, nil, nil, 206, - nil, nil, 206, 206, nil, nil, 206, nil, nil, nil, - nil, nil, 206, nil, nil, nil, nil, nil, nil, nil, - 206, nil, nil, nil, nil, 206, 206, 206, 206, nil, - 206, 206, nil, nil, nil, 206, 206, nil, 207, 207, - 207, nil, 207, 206, nil, 206, 207, 207, nil, nil, - nil, 207, nil, 207, 207, 207, 207, 207, 207, 207, - nil, nil, nil, nil, nil, 207, 207, 207, 207, 207, - 207, 207, nil, nil, 207, nil, nil, nil, nil, nil, - nil, 207, nil, nil, 207, 207, 207, 207, 207, 207, - 207, 207, nil, 207, 207, 207, nil, 207, 207, 207, - 207, 207, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 207, nil, nil, 207, nil, nil, 207, 207, nil, - nil, 207, nil, nil, nil, nil, nil, 207, nil, nil, - nil, nil, nil, nil, nil, 207, nil, nil, nil, nil, - 207, 207, 207, 207, nil, 207, 207, nil, nil, nil, - 207, 207, nil, 208, 208, 208, nil, 208, 207, nil, - 207, 208, 208, nil, nil, nil, 208, nil, 208, 208, - 208, 208, 208, 208, 208, nil, nil, nil, nil, nil, - 208, 208, 208, 208, 208, 208, 208, nil, nil, 208, - nil, nil, nil, nil, nil, nil, 208, nil, nil, 208, - 208, 208, 208, 208, 208, 208, 208, nil, 208, 208, - 208, nil, 208, 208, 208, 208, 208, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 208, nil, nil, 208, - nil, nil, 208, 208, nil, nil, 208, nil, nil, nil, - nil, nil, 208, nil, nil, nil, nil, nil, nil, nil, - 208, nil, nil, nil, nil, 208, 208, 208, 208, nil, - 208, 208, nil, nil, nil, 208, 208, nil, 209, 209, - 209, nil, 209, 208, nil, 208, 209, 209, nil, nil, - nil, 209, nil, 209, 209, 209, 209, 209, 209, 209, - nil, nil, nil, nil, nil, 209, 209, 209, 209, 209, - 209, 209, nil, nil, 209, nil, nil, nil, nil, nil, - nil, 209, nil, nil, 209, 209, 209, 209, 209, 209, - 209, 209, nil, 209, 209, 209, nil, 209, 209, 209, - 209, 209, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 209, nil, nil, 209, nil, nil, 209, 209, nil, - nil, 209, nil, nil, nil, nil, nil, 209, nil, nil, - nil, nil, nil, nil, nil, 209, nil, nil, nil, nil, - 209, 209, 209, 209, nil, 209, 209, nil, nil, nil, - 209, 209, 209, 219, 219, 219, nil, 219, 209, nil, - 209, 219, 219, nil, nil, nil, 219, nil, 219, 219, - 219, 219, 219, 219, 219, nil, nil, nil, nil, nil, - 219, 219, 219, 219, 219, 219, 219, nil, nil, 219, - nil, nil, nil, nil, nil, nil, 219, nil, nil, 219, - 219, 219, 219, 219, 219, 219, 219, nil, 219, 219, - 219, nil, 219, 219, 219, 219, 219, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 219, nil, nil, 219, - nil, nil, 219, 219, nil, nil, 219, nil, nil, nil, - nil, nil, 219, nil, nil, nil, nil, nil, nil, nil, - 219, nil, nil, nil, nil, 219, 219, 219, 219, nil, - 219, 219, nil, nil, nil, 219, 219, nil, 222, 222, - 222, nil, 222, 219, nil, 219, 222, 222, nil, nil, - nil, 222, nil, 222, 222, 222, 222, 222, 222, 222, - nil, nil, nil, nil, nil, 222, 222, 222, 222, 222, - 222, 222, nil, nil, 222, nil, nil, nil, nil, nil, - nil, 222, nil, nil, 222, 222, 222, 222, 222, 222, - 222, 222, nil, 222, 222, 222, nil, 222, 222, 222, - 222, 222, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 222, nil, nil, 222, nil, nil, 222, 222, nil, - nil, 222, nil, nil, nil, nil, nil, 222, nil, nil, - nil, nil, nil, nil, nil, 222, nil, nil, nil, nil, - 222, 222, 222, 222, nil, 222, 222, nil, nil, nil, - 222, 222, nil, 223, 223, 223, nil, 223, 222, nil, - 222, 223, 223, nil, nil, nil, 223, nil, 223, 223, - 223, 223, 223, 223, 223, nil, nil, nil, nil, nil, - 223, 223, 223, 223, 223, 223, 223, nil, nil, 223, - nil, nil, nil, nil, nil, nil, 223, nil, nil, 223, - 223, 223, 223, 223, 223, 223, 223, nil, 223, 223, - 223, nil, 223, 223, 223, 223, 223, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 223, nil, nil, 223, - nil, nil, 223, 223, nil, nil, 223, nil, nil, nil, - nil, nil, 223, nil, nil, nil, nil, nil, nil, nil, - 223, nil, nil, nil, nil, 223, 223, 223, 223, nil, - 223, 223, nil, nil, nil, 223, 223, nil, 224, 224, - 224, nil, 224, 223, nil, 223, 224, 224, nil, nil, - nil, 224, nil, 224, 224, 224, 224, 224, 224, 224, - nil, nil, nil, nil, nil, 224, 224, 224, 224, 224, - 224, 224, nil, nil, 224, nil, nil, nil, nil, nil, - nil, 224, nil, nil, 224, 224, 224, 224, 224, 224, - 224, 224, nil, 224, 224, 224, nil, 224, 224, 224, - 224, 224, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 224, nil, nil, 224, nil, nil, 224, 224, nil, - nil, 224, nil, nil, nil, nil, nil, 224, nil, nil, - nil, nil, nil, nil, nil, 224, nil, nil, nil, nil, - 224, 224, 224, 224, nil, 224, 224, nil, nil, nil, - 224, 224, nil, 225, 225, 225, nil, 225, 224, nil, - 224, 225, 225, nil, nil, nil, 225, nil, 225, 225, - 225, 225, 225, 225, 225, nil, nil, nil, nil, nil, - 225, 225, 225, 225, 225, 225, 225, nil, nil, 225, - nil, nil, nil, nil, nil, nil, 225, nil, nil, 225, - 225, 225, 225, 225, 225, 225, 225, nil, 225, 225, - 225, nil, 225, 225, 225, 225, 225, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 225, nil, nil, 225, - nil, nil, 225, 225, nil, nil, 225, nil, nil, nil, - nil, nil, 225, nil, nil, nil, nil, nil, nil, nil, - 225, nil, nil, nil, nil, 225, 225, 225, 225, nil, - 225, 225, nil, nil, nil, 225, 225, nil, 226, 226, - 226, nil, 226, 225, nil, 225, 226, 226, nil, nil, - nil, 226, nil, 226, 226, 226, 226, 226, 226, 226, - nil, nil, nil, nil, nil, 226, 226, 226, 226, 226, - 226, 226, nil, nil, 226, nil, nil, nil, nil, nil, - nil, 226, nil, nil, 226, 226, 226, 226, 226, 226, - 226, 226, nil, 226, 226, 226, nil, 226, 226, 226, - 226, 226, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 226, nil, nil, 226, nil, nil, 226, 226, nil, - nil, 226, nil, nil, nil, nil, nil, 226, nil, nil, - nil, nil, nil, nil, nil, 226, nil, nil, nil, nil, - 226, 226, 226, 226, nil, 226, 226, nil, nil, nil, - 226, 226, nil, 227, 227, 227, nil, 227, 226, nil, - 226, 227, 227, nil, nil, nil, 227, nil, 227, 227, - 227, 227, 227, 227, 227, nil, nil, nil, nil, nil, - 227, 227, 227, 227, 227, 227, 227, nil, nil, 227, - nil, nil, nil, nil, nil, nil, 227, nil, nil, 227, - 227, 227, 227, 227, 227, 227, 227, nil, 227, 227, - 227, nil, 227, 227, 227, 227, 227, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 227, nil, nil, 227, - nil, nil, 227, 227, nil, nil, 227, nil, nil, nil, - nil, nil, 227, nil, nil, nil, nil, nil, nil, nil, - 227, nil, nil, nil, nil, 227, 227, 227, 227, nil, - 227, 227, nil, nil, nil, 227, 227, nil, 228, 228, - 228, nil, 228, 227, nil, 227, 228, 228, nil, nil, - nil, 228, nil, 228, 228, 228, 228, 228, 228, 228, - nil, nil, nil, nil, nil, 228, 228, 228, 228, 228, - 228, 228, nil, nil, 228, nil, nil, nil, nil, nil, - nil, 228, nil, nil, 228, 228, 228, 228, 228, 228, - 228, 228, nil, 228, 228, 228, nil, 228, 228, 228, - 228, 228, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 228, nil, nil, 228, nil, nil, 228, 228, nil, - nil, 228, nil, nil, nil, nil, nil, 228, nil, nil, - nil, nil, nil, nil, nil, 228, nil, nil, nil, nil, - 228, 228, 228, 228, nil, 228, 228, nil, nil, nil, - 228, 228, nil, 229, 229, 229, nil, 229, 228, nil, - 228, 229, 229, nil, nil, nil, 229, nil, 229, 229, - 229, 229, 229, 229, 229, nil, nil, nil, nil, nil, - 229, 229, 229, 229, 229, 229, 229, nil, nil, 229, - nil, nil, nil, nil, nil, nil, 229, nil, nil, 229, - 229, 229, 229, 229, 229, 229, 229, nil, 229, 229, - 229, nil, 229, 229, 229, 229, 229, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 229, nil, nil, 229, - nil, nil, 229, 229, nil, nil, 229, nil, nil, nil, - nil, nil, 229, nil, nil, nil, nil, nil, nil, nil, - 229, nil, nil, nil, nil, 229, 229, 229, 229, nil, - 229, 229, nil, nil, nil, 229, 229, nil, 230, 230, - 230, nil, 230, 229, nil, 229, 230, 230, nil, nil, - nil, 230, nil, 230, 230, 230, 230, 230, 230, 230, - nil, nil, nil, nil, nil, 230, 230, 230, 230, 230, - 230, 230, nil, nil, 230, nil, nil, nil, nil, nil, - nil, 230, nil, nil, 230, 230, 230, 230, 230, 230, - 230, 230, nil, 230, 230, 230, nil, 230, 230, 230, - 230, 230, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 230, nil, nil, 230, nil, nil, 230, 230, nil, - nil, 230, nil, nil, nil, nil, nil, 230, nil, nil, - nil, nil, nil, nil, nil, 230, nil, nil, nil, nil, - 230, 230, 230, 230, nil, 230, 230, nil, nil, nil, - 230, 230, nil, 231, 231, 231, nil, 231, 230, nil, - 230, 231, 231, nil, nil, nil, 231, nil, 231, 231, - 231, 231, 231, 231, 231, nil, nil, nil, nil, nil, - 231, 231, 231, 231, 231, 231, 231, nil, nil, 231, - nil, nil, nil, nil, nil, nil, 231, nil, nil, 231, - 231, 231, 231, 231, 231, 231, 231, nil, 231, 231, - 231, nil, 231, 231, 231, 231, 231, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 231, nil, nil, 231, - nil, nil, 231, 231, nil, nil, 231, nil, nil, nil, - nil, nil, 231, nil, nil, nil, nil, nil, nil, nil, - 231, nil, nil, nil, nil, 231, 231, 231, 231, nil, - 231, 231, nil, nil, nil, 231, 231, nil, 232, 232, - 232, nil, 232, 231, nil, 231, 232, 232, nil, nil, - nil, 232, nil, 232, 232, 232, 232, 232, 232, 232, - nil, nil, nil, nil, nil, 232, 232, 232, 232, 232, - 232, 232, nil, nil, 232, nil, nil, nil, nil, nil, - nil, 232, nil, nil, 232, 232, 232, 232, 232, 232, - 232, 232, nil, 232, 232, 232, nil, 232, 232, 232, - 232, 232, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 232, nil, nil, 232, nil, nil, 232, 232, nil, - nil, 232, nil, nil, nil, nil, nil, 232, nil, nil, - nil, nil, nil, nil, nil, 232, nil, nil, nil, nil, - 232, 232, 232, 232, nil, 232, 232, nil, nil, nil, - 232, 232, nil, 233, 233, 233, nil, 233, 232, nil, - 232, 233, 233, nil, nil, nil, 233, nil, 233, 233, - 233, 233, 233, 233, 233, nil, nil, nil, nil, nil, - 233, 233, 233, 233, 233, 233, 233, nil, nil, 233, - nil, nil, nil, nil, nil, nil, 233, nil, nil, 233, - 233, 233, 233, 233, 233, 233, 233, nil, 233, 233, - 233, nil, 233, 233, 233, 233, 233, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 233, nil, nil, 233, - nil, nil, 233, 233, nil, nil, 233, nil, nil, nil, - nil, nil, 233, nil, nil, nil, nil, nil, nil, nil, - 233, nil, nil, nil, nil, 233, 233, 233, 233, nil, - 233, 233, nil, nil, nil, 233, 233, nil, 234, 234, - 234, nil, 234, 233, nil, 233, 234, 234, nil, nil, - nil, 234, nil, 234, 234, 234, 234, 234, 234, 234, - nil, nil, nil, nil, nil, 234, 234, 234, 234, 234, - 234, 234, nil, nil, 234, nil, nil, nil, nil, nil, - nil, 234, nil, nil, 234, 234, 234, 234, 234, 234, - 234, 234, nil, 234, 234, 234, nil, 234, 234, 234, - 234, 234, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 234, nil, nil, 234, nil, nil, 234, 234, nil, - nil, 234, nil, nil, nil, nil, nil, 234, nil, nil, - nil, nil, nil, nil, nil, 234, nil, nil, nil, nil, - 234, 234, 234, 234, nil, 234, 234, nil, nil, nil, - 234, 234, nil, 235, 235, 235, nil, 235, 234, nil, - 234, 235, 235, nil, nil, nil, 235, nil, 235, 235, - 235, 235, 235, 235, 235, nil, nil, nil, nil, nil, - 235, 235, 235, 235, 235, 235, 235, nil, nil, 235, - nil, nil, nil, nil, nil, nil, 235, nil, nil, 235, - 235, 235, 235, 235, 235, 235, 235, nil, 235, 235, - 235, nil, 235, 235, 235, 235, 235, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 235, nil, nil, 235, - nil, nil, 235, 235, nil, nil, 235, nil, nil, nil, - nil, nil, 235, nil, nil, nil, nil, nil, nil, nil, - 235, nil, nil, nil, nil, 235, 235, 235, 235, nil, - 235, 235, nil, nil, nil, 235, 235, nil, 236, 236, - 236, nil, 236, 235, nil, 235, 236, 236, nil, nil, - nil, 236, nil, 236, 236, 236, 236, 236, 236, 236, - nil, nil, nil, nil, nil, 236, 236, 236, 236, 236, - 236, 236, nil, nil, 236, nil, nil, nil, nil, nil, - nil, 236, nil, nil, 236, 236, 236, 236, 236, 236, - 236, 236, nil, 236, 236, 236, nil, 236, 236, 236, - 236, 236, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 236, nil, nil, 236, nil, nil, 236, 236, nil, - nil, 236, nil, nil, nil, nil, nil, 236, nil, nil, - nil, nil, nil, nil, nil, 236, nil, nil, nil, nil, - 236, 236, 236, 236, nil, 236, 236, nil, nil, nil, - 236, 236, nil, 237, 237, 237, nil, 237, 236, nil, - 236, 237, 237, nil, nil, nil, 237, nil, 237, 237, - 237, 237, 237, 237, 237, nil, nil, nil, nil, nil, - 237, 237, 237, 237, 237, 237, 237, nil, nil, 237, - nil, nil, nil, nil, nil, nil, 237, nil, nil, 237, - 237, 237, 237, 237, 237, 237, 237, nil, 237, 237, - 237, nil, 237, 237, 237, 237, 237, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 237, nil, nil, 237, - nil, nil, 237, 237, nil, nil, 237, nil, nil, nil, - nil, nil, 237, nil, nil, nil, nil, nil, nil, nil, - 237, nil, nil, nil, nil, 237, 237, 237, 237, nil, - 237, 237, nil, nil, nil, 237, 237, nil, 238, 238, - 238, nil, 238, 237, nil, 237, 238, 238, nil, nil, - nil, 238, nil, 238, 238, 238, 238, 238, 238, 238, - nil, nil, nil, nil, nil, 238, 238, 238, 238, 238, - 238, 238, nil, nil, 238, nil, nil, nil, nil, nil, - nil, 238, nil, nil, 238, 238, 238, 238, 238, 238, - 238, 238, nil, 238, 238, 238, nil, 238, 238, 238, - 238, 238, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 238, nil, nil, 238, nil, nil, 238, 238, nil, - nil, 238, nil, nil, nil, nil, nil, 238, nil, nil, - nil, nil, nil, nil, nil, 238, nil, nil, nil, nil, - 238, 238, 238, 238, nil, 238, 238, nil, nil, nil, - 238, 238, nil, 239, 239, 239, nil, 239, 238, nil, - 238, 239, 239, nil, nil, nil, 239, nil, 239, 239, - 239, 239, 239, 239, 239, nil, nil, nil, nil, nil, - 239, 239, 239, 239, 239, 239, 239, nil, nil, 239, - nil, nil, nil, nil, nil, nil, 239, nil, nil, 239, - 239, 239, 239, 239, 239, 239, 239, nil, 239, 239, - 239, nil, 239, 239, 239, 239, 239, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 239, nil, nil, 239, - nil, nil, 239, 239, nil, nil, 239, nil, nil, nil, - nil, nil, 239, nil, nil, nil, nil, nil, nil, nil, - 239, nil, nil, nil, nil, 239, 239, 239, 239, nil, - 239, 239, nil, nil, nil, 239, 239, nil, 240, 240, - 240, nil, 240, 239, nil, 239, 240, 240, nil, nil, - nil, 240, nil, 240, 240, 240, 240, 240, 240, 240, - nil, nil, nil, nil, nil, 240, 240, 240, 240, 240, - 240, 240, nil, nil, 240, nil, nil, nil, nil, nil, - nil, 240, nil, nil, 240, 240, 240, 240, 240, 240, - 240, 240, nil, 240, 240, 240, nil, 240, 240, 240, - 240, 240, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 240, nil, nil, 240, nil, nil, 240, 240, nil, - nil, 240, nil, nil, nil, nil, nil, 240, nil, nil, - nil, nil, nil, nil, nil, 240, nil, nil, nil, nil, - 240, 240, 240, 240, nil, 240, 240, nil, nil, nil, - 240, 240, nil, 241, 241, 241, nil, 241, 240, nil, - 240, 241, 241, nil, nil, nil, 241, nil, 241, 241, - 241, 241, 241, 241, 241, nil, nil, nil, nil, nil, - 241, 241, 241, 241, 241, 241, 241, nil, nil, 241, - nil, nil, nil, nil, nil, nil, 241, nil, nil, 241, - 241, 241, 241, 241, 241, 241, 241, nil, 241, 241, - 241, nil, 241, 241, 241, 241, 241, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 241, nil, nil, 241, - nil, nil, 241, 241, nil, nil, 241, nil, nil, nil, - nil, nil, 241, nil, nil, nil, nil, nil, nil, nil, - 241, nil, nil, nil, nil, 241, 241, 241, 241, nil, - 241, 241, nil, nil, nil, 241, 241, nil, 242, 242, - 242, nil, 242, 241, nil, 241, 242, 242, nil, nil, - nil, 242, nil, 242, 242, 242, 242, 242, 242, 242, - nil, nil, nil, nil, nil, 242, 242, 242, 242, 242, - 242, 242, nil, nil, 242, nil, nil, nil, nil, nil, - nil, 242, nil, nil, 242, 242, 242, 242, 242, 242, - 242, 242, nil, 242, 242, 242, nil, 242, 242, 242, - 242, 242, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 242, nil, nil, 242, nil, nil, 242, 242, nil, - nil, 242, nil, nil, nil, nil, nil, 242, nil, nil, - nil, nil, nil, nil, nil, 242, nil, nil, nil, nil, - 242, 242, 242, 242, nil, 242, 242, nil, nil, nil, - 242, 242, nil, 243, 243, 243, nil, 243, 242, nil, - 242, 243, 243, nil, nil, nil, 243, nil, 243, 243, - 243, 243, 243, 243, 243, nil, nil, nil, nil, nil, - 243, 243, 243, 243, 243, 243, 243, nil, nil, 243, - nil, nil, nil, nil, nil, nil, 243, nil, nil, 243, - 243, 243, 243, 243, 243, 243, 243, nil, 243, 243, - 243, nil, 243, 243, 243, 243, 243, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 243, nil, nil, 243, - nil, nil, 243, 243, nil, nil, 243, nil, nil, nil, - nil, nil, 243, nil, nil, nil, nil, nil, nil, nil, - 243, nil, nil, nil, nil, 243, 243, 243, 243, nil, - 243, 243, nil, nil, nil, 243, 243, nil, 244, 244, - 244, nil, 244, 243, nil, 243, 244, 244, nil, nil, - nil, 244, nil, 244, 244, 244, 244, 244, 244, 244, - nil, nil, nil, nil, nil, 244, 244, 244, 244, 244, - 244, 244, nil, nil, 244, nil, nil, nil, nil, nil, - nil, 244, nil, nil, 244, 244, 244, 244, 244, 244, - 244, 244, nil, 244, 244, 244, nil, 244, 244, 244, - 244, 244, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 244, nil, nil, 244, nil, nil, 244, 244, nil, - nil, 244, nil, nil, nil, nil, nil, 244, nil, nil, - nil, nil, nil, nil, nil, 244, nil, nil, nil, nil, - 244, 244, 244, 244, nil, 244, 244, nil, nil, nil, - 244, 244, nil, 245, 245, 245, nil, 245, 244, nil, - 244, 245, 245, nil, nil, nil, 245, nil, 245, 245, - 245, 245, 245, 245, 245, nil, nil, nil, nil, nil, - 245, 245, 245, 245, 245, 245, 245, nil, nil, 245, - nil, nil, nil, nil, nil, nil, 245, nil, nil, 245, - 245, 245, 245, 245, 245, 245, 245, nil, 245, 245, - 245, nil, 245, 245, 245, 245, 245, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 245, nil, nil, 245, - nil, nil, 245, 245, nil, nil, 245, nil, nil, nil, - nil, nil, 245, nil, nil, nil, nil, nil, nil, nil, - 245, nil, nil, nil, nil, 245, 245, 245, 245, nil, - 245, 245, nil, nil, nil, 245, 245, nil, 246, 246, - 246, nil, 246, 245, nil, 245, 246, 246, nil, nil, - nil, 246, nil, 246, 246, 246, 246, 246, 246, 246, - nil, nil, nil, nil, nil, 246, 246, 246, 246, 246, - 246, 246, nil, nil, 246, nil, nil, nil, nil, nil, - nil, 246, nil, nil, 246, 246, 246, 246, 246, 246, - 246, 246, nil, 246, 246, 246, nil, 246, 246, 246, - 246, 246, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 246, nil, nil, 246, nil, nil, 246, 246, nil, - nil, 246, nil, nil, nil, nil, nil, 246, nil, nil, - nil, nil, nil, nil, nil, 246, nil, nil, nil, nil, - 246, 246, 246, 246, nil, 246, 246, nil, nil, nil, - 246, 246, nil, 247, 247, 247, nil, 247, 246, nil, - 246, 247, 247, nil, nil, nil, 247, nil, 247, 247, - 247, 247, 247, 247, 247, nil, nil, nil, nil, nil, - 247, 247, 247, 247, 247, 247, 247, nil, nil, 247, - nil, nil, nil, nil, nil, nil, 247, nil, nil, 247, - 247, 247, 247, 247, 247, 247, 247, nil, 247, 247, - 247, nil, 247, 247, 247, 247, 247, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 247, nil, nil, 247, - nil, nil, 247, 247, nil, nil, 247, nil, nil, nil, - nil, nil, 247, nil, nil, nil, nil, nil, nil, nil, - 247, nil, nil, nil, nil, 247, 247, 247, 247, nil, - 247, 247, nil, nil, nil, 247, 247, nil, 256, 256, - 256, nil, 256, 247, nil, 247, 256, 256, nil, nil, - nil, 256, nil, 256, 256, 256, 256, 256, 256, 256, - nil, nil, nil, nil, nil, 256, 256, 256, 256, 256, - 256, 256, nil, nil, 256, nil, nil, nil, nil, nil, - nil, 256, nil, nil, 256, 256, 256, 256, 256, 256, - 256, 256, nil, 256, 256, 256, nil, 256, 256, 256, - 256, 256, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 256, nil, nil, 256, nil, nil, 256, 256, nil, - nil, 256, nil, nil, nil, nil, nil, 256, nil, nil, - nil, nil, nil, nil, nil, 256, nil, nil, nil, nil, - 256, 256, 256, 256, nil, 256, 256, nil, nil, nil, - 256, 256, nil, 258, 258, 258, nil, 258, 256, nil, - 256, 258, 258, nil, nil, nil, 258, nil, 258, 258, - 258, 258, 258, 258, 258, nil, nil, nil, nil, nil, - 258, 258, 258, 258, 258, 258, 258, nil, nil, 258, - nil, nil, nil, nil, nil, nil, 258, nil, nil, 258, - 258, 258, 258, 258, 258, 258, 258, nil, 258, 258, - 258, nil, 258, 258, 258, 258, 258, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 258, nil, nil, 258, - nil, nil, 258, 258, nil, nil, 258, nil, nil, nil, - nil, nil, 258, nil, nil, nil, nil, nil, nil, nil, - 258, nil, nil, nil, nil, 258, 258, 258, 258, nil, - 258, 258, nil, nil, nil, 258, 258, nil, 263, 263, - 263, nil, 263, 258, nil, 258, 263, 263, nil, nil, - nil, 263, nil, 263, 263, 263, 263, 263, 263, 263, - nil, nil, nil, nil, nil, 263, 263, 263, 263, 263, - 263, 263, nil, nil, 263, nil, nil, nil, nil, nil, - nil, 263, nil, nil, 263, 263, 263, 263, 263, 263, - 263, 263, nil, 263, 263, 263, nil, 263, 263, 263, - 263, 263, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 263, nil, nil, 263, nil, nil, 263, 263, nil, - nil, 263, nil, nil, nil, nil, nil, 263, nil, nil, - nil, nil, nil, nil, nil, 263, nil, nil, nil, nil, - 263, 263, 263, 263, nil, 263, 263, nil, nil, nil, - 263, 263, nil, 269, 269, 269, nil, 269, 263, nil, - 263, 269, 269, nil, nil, nil, 269, nil, 269, 269, - 269, 269, 269, 269, 269, nil, nil, nil, nil, nil, - 269, 269, 269, 269, 269, 269, 269, nil, nil, 269, - nil, nil, nil, nil, nil, nil, 269, nil, nil, 269, - 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, - 269, nil, 269, 269, 269, 269, 269, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 269, nil, nil, 269, - nil, nil, 269, 269, nil, nil, 269, nil, 269, nil, - 269, nil, 269, nil, nil, nil, nil, nil, nil, nil, - 269, nil, nil, nil, nil, 269, 269, 269, 269, nil, - 269, 269, nil, nil, nil, 269, 269, nil, 270, 270, - 270, nil, 270, 269, nil, 269, 270, 270, nil, nil, - nil, 270, nil, 270, 270, 270, 270, 270, 270, 270, - nil, nil, nil, nil, nil, 270, 270, 270, 270, 270, - 270, 270, nil, nil, 270, nil, nil, nil, nil, nil, - nil, 270, nil, nil, 270, 270, 270, 270, 270, 270, - 270, 270, 270, 270, 270, 270, nil, 270, 270, 270, - 270, 270, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 270, nil, nil, 270, nil, nil, 270, 270, nil, - nil, 270, nil, 270, nil, 270, nil, 270, nil, nil, - nil, nil, nil, nil, nil, 270, nil, nil, nil, nil, - 270, 270, 270, 270, nil, 270, 270, nil, nil, nil, - 270, 270, nil, 278, 278, 278, nil, 278, 270, nil, - 270, 278, 278, nil, nil, nil, 278, nil, 278, 278, - 278, 278, 278, 278, 278, nil, nil, nil, nil, nil, - 278, 278, 278, 278, 278, 278, 278, nil, nil, 278, - nil, nil, nil, nil, nil, nil, 278, nil, nil, 278, - 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, - 278, nil, 278, 278, 278, 278, 278, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 278, nil, nil, 278, - nil, nil, 278, 278, nil, nil, 278, nil, 278, nil, - 278, nil, 278, nil, nil, nil, nil, nil, nil, nil, - 278, nil, nil, nil, nil, 278, 278, 278, 278, nil, - 278, 278, nil, nil, nil, 278, 278, 278, 284, 284, - 284, nil, 284, 278, nil, 278, 284, 284, nil, nil, - nil, 284, nil, 284, 284, 284, 284, 284, 284, 284, - nil, nil, nil, nil, nil, 284, 284, 284, 284, 284, - 284, 284, nil, nil, 284, nil, nil, nil, nil, nil, - nil, 284, nil, nil, 284, 284, 284, 284, 284, 284, - 284, 284, nil, 284, 284, 284, nil, 284, 284, nil, - nil, 284, 19, 19, 19, 19, 19, 19, 19, 19, - 19, 19, 19, nil, 19, 19, nil, nil, 19, 19, - nil, 284, nil, nil, 284, nil, nil, 284, 284, nil, - nil, 284, nil, nil, 19, nil, 19, nil, 19, 19, - 19, 19, 19, 19, 19, nil, 19, nil, nil, nil, - 284, 284, 284, 284, nil, 284, 284, nil, nil, nil, - 284, 284, nil, 19, nil, 284, nil, nil, 284, nil, - 284, 297, 297, 297, nil, 297, nil, nil, nil, 297, - 297, nil, nil, nil, 297, nil, 297, 297, 297, 297, - 297, 297, 297, nil, nil, nil, nil, nil, 297, 297, - 297, 297, 297, 297, 297, nil, nil, 297, nil, nil, - nil, nil, nil, nil, 297, nil, nil, 297, 297, 297, - 297, 297, 297, 297, 297, nil, 297, 297, 297, nil, - 297, 297, nil, 883, 297, 883, 883, 883, 883, 883, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 297, nil, nil, 297, nil, nil, - 297, 297, nil, nil, 297, nil, nil, nil, nil, nil, - 883, nil, nil, nil, nil, nil, nil, nil, nil, 883, - 883, 883, 883, 297, 297, 297, 297, nil, 297, 297, - nil, nil, nil, 297, 297, nil, 306, 306, 306, nil, - 306, 297, nil, 297, 306, 306, nil, nil, nil, 306, - nil, 306, 306, 306, 306, 306, 306, 306, nil, nil, - nil, nil, nil, 306, 306, 306, 306, 306, 306, 306, - nil, nil, 306, nil, nil, nil, nil, nil, nil, 306, - nil, nil, 306, 306, 306, 306, 306, 306, 306, 306, - nil, 306, 306, 306, nil, 306, 306, 306, 306, 306, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 306, - nil, nil, 306, 306, nil, 306, 306, nil, nil, 306, - nil, nil, nil, nil, nil, 306, nil, nil, nil, nil, - nil, nil, nil, 306, nil, nil, nil, nil, 306, 306, - 306, 306, nil, 306, 306, nil, nil, nil, 306, 306, - nil, 322, 322, 322, nil, 322, 306, nil, 306, 322, - 322, nil, nil, nil, 322, nil, 322, 322, 322, 322, - 322, 322, 322, nil, nil, nil, nil, nil, 322, 322, - 322, 322, 322, 322, 322, nil, nil, 322, nil, nil, - nil, nil, nil, nil, 322, nil, nil, 322, 322, 322, - 322, 322, 322, 322, 322, nil, 322, 322, 322, nil, - 322, 322, 322, 322, 322, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 322, nil, nil, 322, nil, nil, - 322, 322, nil, nil, 322, nil, nil, nil, nil, nil, - 322, nil, nil, nil, nil, nil, nil, nil, 322, nil, - nil, nil, nil, 322, 322, 322, 322, nil, 322, 322, - nil, nil, nil, 322, 322, nil, 323, 323, 323, nil, - 323, 322, nil, 322, 323, 323, nil, nil, nil, 323, - nil, 323, 323, 323, 323, 323, 323, 323, nil, nil, - nil, nil, nil, 323, 323, 323, 323, 323, 323, 323, - nil, nil, 323, nil, nil, nil, nil, nil, nil, 323, - nil, nil, 323, 323, 323, 323, 323, 323, 323, 323, - nil, 323, 323, 323, nil, 323, 323, 323, 323, 323, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 323, - nil, nil, 323, nil, nil, 323, 323, nil, nil, 323, - nil, nil, nil, nil, nil, 323, nil, nil, nil, nil, - nil, nil, nil, 323, nil, nil, nil, nil, 323, 323, - 323, 323, nil, 323, 323, nil, nil, nil, 323, 323, - nil, 341, 341, 341, nil, 341, 323, nil, 323, 341, - 341, nil, nil, nil, 341, nil, 341, 341, 341, 341, - 341, 341, 341, nil, nil, nil, nil, nil, 341, 341, - 341, 341, 341, 341, 341, nil, nil, 341, nil, nil, - nil, nil, nil, nil, 341, nil, nil, 341, 341, 341, - 341, 341, 341, 341, 341, nil, 341, 341, 341, nil, - 341, 341, 341, 341, 341, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 341, nil, nil, 341, nil, nil, - 341, 341, nil, nil, 341, nil, nil, nil, nil, nil, - 341, nil, nil, nil, nil, nil, nil, nil, 341, nil, - nil, nil, nil, 341, 341, 341, 341, nil, 341, 341, - nil, nil, nil, 341, 341, nil, 356, 356, 356, nil, - 356, 341, nil, 341, 356, 356, nil, nil, nil, 356, - nil, 356, 356, 356, 356, 356, 356, 356, nil, nil, - nil, nil, nil, 356, 356, 356, 356, 356, 356, 356, - nil, nil, 356, nil, nil, nil, nil, nil, nil, 356, - nil, nil, 356, 356, 356, 356, 356, 356, 356, 356, - nil, 356, 356, 356, nil, 356, 356, 356, 356, 356, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 356, - nil, nil, 356, nil, nil, 356, 356, nil, nil, 356, - nil, nil, nil, nil, nil, 356, nil, nil, nil, nil, - nil, nil, nil, 356, nil, nil, nil, nil, 356, 356, - 356, 356, nil, 356, 356, nil, nil, nil, 356, 356, - nil, 383, 383, 383, nil, 383, 356, nil, 356, 383, - 383, nil, nil, nil, 383, nil, 383, 383, 383, 383, - 383, 383, 383, nil, nil, nil, nil, nil, 383, 383, - 383, 383, 383, 383, 383, nil, nil, 383, nil, nil, - nil, nil, nil, nil, 383, nil, nil, 383, 383, 383, - 383, 383, 383, 383, 383, nil, 383, 383, 383, nil, - 383, 383, 383, 383, 383, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 383, nil, nil, 383, nil, nil, - 383, 383, nil, nil, 383, nil, nil, nil, nil, nil, - 383, nil, nil, nil, nil, nil, nil, nil, 383, nil, - nil, nil, nil, 383, 383, 383, 383, nil, 383, 383, - nil, nil, nil, 383, 383, nil, 415, 415, 415, nil, - 415, 383, nil, 383, 415, 415, nil, nil, nil, 415, - nil, 415, 415, 415, 415, 415, 415, 415, nil, nil, - nil, nil, nil, 415, 415, 415, 415, 415, 415, 415, - nil, nil, 415, nil, nil, nil, nil, nil, nil, 415, - nil, nil, 415, 415, 415, 415, 415, 415, 415, 415, - 415, 415, 415, 415, nil, 415, 415, 415, 415, 415, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 415, - nil, nil, 415, nil, nil, 415, 415, nil, nil, 415, - nil, 415, nil, 415, nil, 415, nil, nil, nil, nil, - nil, nil, nil, 415, nil, nil, nil, nil, 415, 415, - 415, 415, nil, 415, 415, nil, nil, nil, 415, 415, - nil, 417, 417, 417, nil, 417, 415, nil, 415, 417, - 417, nil, nil, nil, 417, nil, 417, 417, 417, 417, - 417, 417, 417, nil, nil, nil, nil, nil, 417, 417, - 417, 417, 417, 417, 417, nil, nil, 417, nil, nil, - nil, nil, nil, nil, 417, nil, nil, 417, 417, 417, - 417, 417, 417, 417, 417, nil, 417, 417, 417, nil, - 417, 417, 417, 417, 417, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 417, nil, nil, 417, nil, nil, - 417, 417, nil, nil, 417, nil, nil, nil, nil, nil, - 417, nil, nil, nil, nil, nil, nil, nil, 417, nil, - nil, nil, nil, 417, 417, 417, 417, nil, 417, 417, - nil, nil, nil, 417, 417, nil, 418, 418, 418, nil, - 418, 417, nil, 417, 418, 418, nil, nil, nil, 418, - nil, 418, 418, 418, 418, 418, 418, 418, nil, nil, - nil, nil, nil, 418, 418, 418, 418, 418, 418, 418, - nil, nil, 418, nil, nil, nil, nil, nil, nil, 418, - nil, nil, 418, 418, 418, 418, 418, 418, 418, 418, - nil, 418, 418, 418, nil, 418, 418, 418, 418, 418, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 418, - nil, nil, 418, nil, nil, 418, 418, nil, nil, 418, - nil, nil, nil, nil, nil, 418, nil, nil, nil, nil, - nil, nil, nil, 418, nil, nil, nil, nil, 418, 418, - 418, 418, nil, 418, 418, nil, nil, nil, 418, 418, - nil, 419, 419, 419, nil, 419, 418, nil, 418, 419, - 419, nil, nil, nil, 419, nil, 419, 419, 419, 419, - 419, 419, 419, nil, nil, nil, nil, nil, 419, 419, - 419, 419, 419, 419, 419, nil, nil, 419, nil, nil, - nil, nil, nil, nil, 419, nil, nil, 419, 419, 419, - 419, 419, 419, 419, 419, nil, 419, 419, 419, nil, - 419, 419, 419, 419, 419, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 419, nil, nil, 419, nil, nil, - 419, 419, nil, nil, 419, nil, nil, nil, nil, nil, - 419, nil, nil, nil, nil, nil, nil, nil, 419, nil, - nil, nil, nil, 419, 419, 419, 419, nil, 419, 419, - nil, nil, nil, 419, 419, nil, 448, 448, 448, nil, - 448, 419, nil, 419, 448, 448, nil, nil, nil, 448, - nil, 448, 448, 448, 448, 448, 448, 448, nil, nil, - nil, nil, nil, 448, 448, 448, 448, 448, 448, 448, - nil, nil, 448, nil, nil, nil, nil, nil, nil, 448, - nil, nil, 448, 448, 448, 448, 448, 448, 448, 448, - 448, 448, 448, 448, nil, 448, 448, 448, 448, 448, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 448, - nil, nil, 448, nil, nil, 448, 448, nil, nil, 448, - nil, 448, nil, 448, nil, 448, nil, nil, nil, nil, - nil, nil, nil, 448, nil, nil, nil, nil, 448, 448, - 448, 448, nil, 448, 448, nil, nil, nil, 448, 448, - nil, 450, 450, 450, nil, 450, 448, nil, 448, 450, - 450, nil, nil, nil, 450, nil, 450, 450, 450, 450, - 450, 450, 450, nil, nil, nil, nil, nil, 450, 450, - 450, 450, 450, 450, 450, nil, nil, 450, nil, nil, - nil, nil, nil, nil, 450, nil, nil, 450, 450, 450, - 450, 450, 450, 450, 450, 450, 450, 450, 450, nil, - 450, 450, 450, 450, 450, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 450, nil, nil, 450, nil, nil, - 450, 450, nil, nil, 450, nil, nil, nil, 450, nil, - 450, nil, nil, nil, nil, nil, nil, nil, 450, nil, - nil, nil, nil, 450, 450, 450, 450, nil, 450, 450, - nil, nil, nil, 450, 450, nil, 452, 452, 452, nil, - 452, 450, nil, 450, 452, 452, nil, nil, nil, 452, - nil, 452, 452, 452, 452, 452, 452, 452, nil, nil, - nil, nil, nil, 452, 452, 452, 452, 452, 452, 452, - nil, nil, 452, nil, nil, nil, nil, nil, nil, 452, - nil, nil, 452, 452, 452, 452, 452, 452, 452, 452, - nil, 452, 452, 452, nil, 452, 452, 452, 452, 452, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 452, - nil, nil, 452, nil, nil, 452, 452, nil, nil, 452, - nil, nil, nil, nil, nil, 452, nil, nil, nil, nil, - nil, nil, nil, 452, nil, nil, nil, nil, 452, 452, - 452, 452, nil, 452, 452, nil, nil, nil, 452, 452, - nil, 464, 464, 464, nil, 464, 452, nil, 452, 464, - 464, nil, nil, nil, 464, nil, 464, 464, 464, 464, - 464, 464, 464, nil, nil, nil, nil, nil, 464, 464, - 464, 464, 464, 464, 464, nil, nil, 464, nil, nil, - nil, nil, nil, nil, 464, nil, nil, 464, 464, 464, - 464, 464, 464, 464, 464, 464, 464, 464, 464, nil, - 464, 464, 464, 464, 464, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 464, nil, nil, 464, nil, nil, - 464, 464, nil, nil, 464, nil, nil, nil, 464, nil, - 464, nil, nil, nil, nil, nil, nil, nil, 464, nil, - nil, nil, nil, 464, 464, 464, 464, nil, 464, 464, - nil, nil, nil, 464, 464, nil, 474, 474, 474, nil, - 474, 464, nil, 464, 474, 474, nil, nil, nil, 474, - nil, 474, 474, 474, 474, 474, 474, 474, nil, nil, - nil, nil, nil, 474, 474, 474, 474, 474, 474, 474, - nil, nil, 474, nil, nil, nil, nil, nil, nil, 474, - nil, nil, 474, 474, 474, 474, 474, 474, 474, 474, - nil, 474, 474, 474, nil, 474, 474, nil, 906, 474, - 906, 906, 906, 906, 906, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 474, - nil, nil, 474, nil, nil, 474, 474, nil, nil, 474, - nil, nil, nil, nil, nil, 906, nil, nil, nil, nil, - nil, nil, nil, nil, 906, 906, 906, 906, 474, 474, - 474, 474, nil, 474, 474, nil, nil, nil, 474, 474, - nil, 476, 476, 476, nil, 476, 474, nil, 474, 476, - 476, nil, nil, nil, 476, nil, 476, 476, 476, 476, - 476, 476, 476, nil, nil, nil, nil, nil, 476, 476, - 476, 476, 476, 476, 476, nil, nil, 476, nil, nil, - nil, nil, nil, nil, 476, nil, nil, 476, 476, 476, - 476, 476, 476, 476, 476, 476, 476, 476, 476, nil, - 476, 476, 476, 476, 476, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 476, nil, nil, 476, nil, nil, - 476, 476, nil, nil, 476, nil, 476, nil, 476, nil, - 476, nil, nil, nil, nil, nil, nil, nil, 476, nil, - nil, nil, nil, 476, 476, 476, 476, nil, 476, 476, - nil, nil, nil, 476, 476, nil, 483, 483, 483, nil, - 483, 476, nil, 476, 483, 483, nil, nil, nil, 483, - nil, 483, 483, 483, 483, 483, 483, 483, nil, nil, - nil, nil, nil, 483, 483, 483, 483, 483, 483, 483, - nil, nil, 483, nil, nil, nil, nil, nil, nil, 483, - nil, nil, 483, 483, 483, 483, 483, 483, 483, 483, - nil, 483, 483, 483, nil, 483, 483, nil, nil, 483, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 483, - nil, nil, 483, nil, nil, 483, 483, nil, nil, 483, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 483, 483, - 483, 483, nil, 483, 483, nil, nil, nil, 483, 483, - nil, 486, 486, 486, nil, 486, 483, nil, 483, 486, - 486, nil, nil, nil, 486, nil, 486, 486, 486, 486, - 486, 486, 486, nil, nil, nil, nil, nil, 486, 486, - 486, 486, 486, 486, 486, nil, nil, 486, nil, nil, - nil, nil, nil, nil, 486, nil, nil, 486, 486, 486, - 486, 486, 486, 486, 486, nil, 486, 486, 486, nil, - 486, 486, 486, 486, 486, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 486, nil, nil, 486, nil, nil, - 486, 486, nil, nil, 486, nil, nil, nil, nil, nil, - 486, nil, nil, nil, nil, nil, nil, nil, 486, nil, - nil, nil, nil, 486, 486, 486, 486, nil, 486, 486, - nil, nil, nil, 486, 486, nil, 487, 487, 487, nil, - 487, 486, nil, 486, 487, 487, nil, nil, nil, 487, - nil, 487, 487, 487, 487, 487, 487, 487, nil, nil, - nil, nil, nil, 487, 487, 487, 487, 487, 487, 487, - nil, nil, 487, nil, nil, nil, nil, nil, nil, 487, - nil, nil, 487, 487, 487, 487, 487, 487, 487, 487, - nil, 487, 487, 487, nil, 487, 487, 487, 487, 487, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 487, - nil, nil, 487, nil, nil, 487, 487, nil, nil, 487, - nil, nil, nil, nil, nil, 487, nil, nil, nil, nil, - nil, nil, nil, 487, nil, nil, nil, nil, 487, 487, - 487, 487, nil, 487, 487, nil, nil, nil, 487, 487, - nil, 488, 488, 488, nil, 488, 487, nil, 487, 488, - 488, nil, nil, nil, 488, nil, 488, 488, 488, 488, - 488, 488, 488, nil, nil, nil, nil, nil, 488, 488, - 488, 488, 488, 488, 488, nil, nil, 488, nil, nil, - nil, nil, nil, nil, 488, nil, nil, 488, 488, 488, - 488, 488, 488, 488, 488, nil, 488, 488, 488, nil, - 488, 488, 488, 488, 488, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 488, nil, nil, 488, nil, nil, - 488, 488, nil, nil, 488, nil, nil, nil, nil, nil, - 488, nil, nil, nil, nil, nil, nil, nil, 488, nil, - nil, nil, nil, 488, 488, 488, 488, nil, 488, 488, - nil, nil, nil, 488, 488, nil, 492, 492, 492, nil, - 492, 488, nil, 488, 492, 492, nil, nil, nil, 492, - nil, 492, 492, 492, 492, 492, 492, 492, nil, nil, - nil, nil, nil, 492, 492, 492, 492, 492, 492, 492, - nil, nil, 492, nil, nil, nil, nil, nil, nil, 492, - nil, nil, 492, 492, 492, 492, 492, 492, 492, 492, - nil, 492, 492, 492, nil, 492, 492, 492, 492, 492, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 492, - nil, nil, 492, nil, nil, 492, 492, nil, nil, 492, - nil, nil, nil, nil, nil, 492, nil, nil, nil, nil, - nil, nil, nil, 492, nil, nil, nil, nil, 492, 492, - 492, 492, nil, 492, 492, nil, nil, nil, 492, 492, - nil, 494, 494, 494, nil, 494, 492, nil, 492, 494, - 494, nil, nil, nil, 494, nil, 494, 494, 494, 494, - 494, 494, 494, nil, nil, nil, nil, nil, 494, 494, - 494, 494, 494, 494, 494, nil, nil, 494, nil, nil, - nil, nil, nil, nil, 494, nil, nil, 494, 494, 494, - 494, 494, 494, 494, 494, nil, 494, 494, 494, nil, - 494, 494, 494, 494, 494, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 494, nil, nil, 494, nil, nil, - 494, 494, nil, nil, 494, nil, 494, nil, nil, nil, - 494, nil, nil, nil, nil, nil, nil, nil, 494, nil, - nil, nil, nil, 494, 494, 494, 494, nil, 494, 494, - nil, nil, nil, 494, 494, nil, 498, 498, 498, nil, - 498, 494, nil, 494, 498, 498, nil, nil, nil, 498, - nil, 498, 498, 498, 498, 498, 498, 498, nil, nil, - nil, nil, nil, 498, 498, 498, 498, 498, 498, 498, - nil, nil, 498, nil, nil, nil, nil, nil, nil, 498, - nil, nil, 498, 498, 498, 498, 498, 498, 498, 498, - 498, 498, 498, 498, nil, 498, 498, 498, 498, 498, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 498, - nil, nil, 498, nil, nil, 498, 498, nil, nil, 498, - nil, 498, nil, nil, nil, 498, nil, nil, nil, nil, - nil, nil, nil, 498, nil, nil, nil, nil, 498, 498, - 498, 498, nil, 498, 498, nil, nil, nil, 498, 498, - nil, 501, 501, 501, nil, 501, 498, nil, 498, 501, - 501, nil, nil, nil, 501, nil, 501, 501, 501, 501, - 501, 501, 501, nil, nil, nil, nil, nil, 501, 501, - 501, 501, 501, 501, 501, nil, nil, 501, nil, nil, - nil, nil, nil, nil, 501, nil, nil, 501, 501, 501, - 501, 501, 501, 501, 501, 501, 501, 501, 501, nil, - 501, 501, 501, 501, 501, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 501, nil, nil, 501, nil, nil, - 501, 501, nil, nil, 501, nil, nil, nil, nil, nil, - 501, nil, nil, nil, nil, nil, nil, nil, 501, nil, - nil, nil, nil, 501, 501, 501, 501, nil, 501, 501, - nil, nil, nil, 501, 501, nil, 515, 515, 515, nil, - 515, 501, nil, 501, 515, 515, nil, nil, nil, 515, - nil, 515, 515, 515, 515, 515, 515, 515, nil, nil, - nil, nil, nil, 515, 515, 515, 515, 515, 515, 515, - nil, nil, 515, nil, nil, nil, nil, nil, nil, 515, - nil, nil, 515, 515, 515, 515, 515, 515, 515, 515, - nil, 515, 515, 515, nil, 515, 515, 515, 515, 515, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 515, - nil, nil, 515, nil, nil, 515, 515, nil, nil, 515, - nil, 515, nil, nil, nil, 515, nil, nil, nil, nil, - nil, nil, nil, 515, nil, nil, nil, nil, 515, 515, - 515, 515, nil, 515, 515, nil, nil, nil, 515, 515, - nil, 516, 516, 516, nil, 516, 515, nil, 515, 516, - 516, nil, nil, nil, 516, nil, 516, 516, 516, 516, - 516, 516, 516, nil, nil, nil, nil, nil, 516, 516, - 516, 516, 516, 516, 516, nil, nil, 516, nil, nil, - nil, nil, nil, nil, 516, nil, nil, 516, 516, 516, - 516, 516, 516, 516, 516, 516, 516, 516, 516, nil, - 516, 516, 516, 516, 516, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 516, nil, nil, 516, nil, nil, - 516, 516, nil, nil, 516, nil, 516, nil, 516, nil, - 516, nil, nil, nil, nil, nil, nil, nil, 516, nil, - nil, nil, nil, 516, 516, 516, 516, nil, 516, 516, - nil, nil, nil, 516, 516, nil, 526, 526, 526, nil, - 526, 516, nil, 516, 526, 526, nil, nil, nil, 526, - nil, 526, 526, 526, 526, 526, 526, 526, nil, nil, - nil, nil, nil, 526, 526, 526, 526, 526, 526, 526, - nil, nil, 526, nil, nil, nil, nil, nil, nil, 526, - nil, nil, 526, 526, 526, 526, 526, 526, 526, 526, - 526, 526, 526, 526, nil, 526, 526, 526, 526, 526, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 526, - nil, nil, 526, nil, nil, 526, 526, nil, nil, 526, - nil, 526, nil, 526, nil, 526, nil, nil, nil, nil, - nil, nil, nil, 526, nil, nil, nil, nil, 526, 526, - 526, 526, nil, 526, 526, nil, nil, nil, 526, 526, - nil, 529, 529, 529, nil, 529, 526, nil, 526, 529, - 529, nil, nil, nil, 529, nil, 529, 529, 529, 529, - 529, 529, 529, nil, nil, nil, nil, nil, 529, 529, - 529, 529, 529, 529, 529, nil, nil, 529, nil, nil, - nil, nil, nil, nil, 529, nil, nil, 529, 529, 529, - 529, 529, 529, 529, 529, nil, 529, 529, 529, nil, - 529, 529, 529, 529, 529, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 529, nil, nil, 529, nil, nil, - 529, 529, nil, nil, 529, nil, nil, nil, nil, nil, - 529, nil, nil, nil, nil, nil, nil, nil, 529, nil, - nil, nil, nil, 529, 529, 529, 529, nil, 529, 529, - nil, nil, nil, 529, 529, nil, 557, 557, 557, nil, - 557, 529, nil, 529, 557, 557, nil, nil, nil, 557, - nil, 557, 557, 557, 557, 557, 557, 557, nil, nil, - nil, nil, nil, 557, 557, 557, 557, 557, 557, 557, - nil, nil, 557, nil, nil, nil, nil, nil, nil, 557, - nil, nil, 557, 557, 557, 557, 557, 557, 557, 557, - nil, 557, 557, 557, nil, 557, 557, 557, 557, 557, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 557, - nil, nil, 557, nil, nil, 557, 557, nil, nil, 557, - nil, nil, nil, nil, nil, 557, nil, nil, nil, nil, - nil, nil, nil, 557, nil, nil, nil, nil, 557, 557, - 557, 557, nil, 557, 557, nil, nil, nil, 557, 557, - nil, 559, 559, 559, nil, 559, 557, nil, 557, 559, - 559, nil, nil, nil, 559, nil, 559, 559, 559, 559, - 559, 559, 559, nil, nil, nil, nil, nil, 559, 559, - 559, 559, 559, 559, 559, nil, nil, 559, nil, nil, - nil, nil, nil, nil, 559, nil, nil, 559, 559, 559, - 559, 559, 559, 559, 559, nil, 559, 559, 559, nil, - 559, 559, 559, 559, 559, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 559, nil, nil, 559, nil, nil, - 559, 559, nil, nil, 559, nil, 559, nil, nil, nil, - 559, nil, nil, nil, nil, nil, nil, nil, 559, nil, - nil, nil, nil, 559, 559, 559, 559, nil, 559, 559, - nil, nil, nil, 559, 559, nil, 560, 560, 560, nil, - 560, 559, nil, 559, 560, 560, nil, nil, nil, 560, - nil, 560, 560, 560, 560, 560, 560, 560, nil, nil, - nil, nil, nil, 560, 560, 560, 560, 560, 560, 560, - nil, nil, 560, nil, nil, nil, nil, nil, nil, 560, - nil, nil, 560, 560, 560, 560, 560, 560, 560, 560, - nil, 560, 560, 560, nil, 560, 560, 560, 560, 560, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 560, - nil, nil, 560, nil, nil, 560, 560, nil, nil, 560, - nil, nil, nil, nil, nil, 560, nil, nil, nil, nil, - nil, nil, nil, 560, nil, nil, nil, nil, 560, 560, - 560, 560, nil, 560, 560, nil, nil, nil, 560, 560, - nil, 563, 563, 563, nil, 563, 560, nil, 560, 563, - 563, nil, nil, nil, 563, nil, 563, 563, 563, 563, - 563, 563, 563, nil, nil, nil, nil, nil, 563, 563, - 563, 563, 563, 563, 563, nil, nil, 563, nil, nil, - nil, nil, nil, nil, 563, nil, nil, 563, 563, 563, - 563, 563, 563, 563, 563, nil, 563, 563, 563, nil, - 563, 563, 563, 563, 563, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 563, nil, nil, 563, nil, nil, - 563, 563, nil, nil, 563, nil, nil, nil, nil, nil, - 563, nil, nil, nil, nil, nil, nil, nil, 563, nil, - nil, nil, nil, 563, 563, 563, 563, nil, 563, 563, - nil, nil, nil, 563, 563, nil, 564, 564, 564, nil, - 564, 563, nil, 563, 564, 564, nil, nil, nil, 564, - nil, 564, 564, 564, 564, 564, 564, 564, nil, nil, - nil, nil, nil, 564, 564, 564, 564, 564, 564, 564, - nil, nil, 564, nil, nil, nil, nil, nil, nil, 564, - nil, nil, 564, 564, 564, 564, 564, 564, 564, 564, - nil, 564, 564, 564, nil, 564, 564, 564, 564, 564, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 564, - nil, nil, 564, nil, nil, 564, 564, nil, nil, 564, - nil, nil, nil, nil, nil, 564, nil, nil, nil, nil, - nil, nil, nil, 564, nil, nil, nil, nil, 564, 564, - 564, 564, nil, 564, 564, nil, nil, nil, 564, 564, - nil, 568, 568, 568, nil, 568, 564, nil, 564, 568, - 568, nil, nil, nil, 568, nil, 568, 568, 568, 568, - 568, 568, 568, nil, nil, nil, nil, nil, 568, 568, - 568, 568, 568, 568, 568, nil, nil, 568, nil, nil, - nil, nil, nil, nil, 568, nil, nil, 568, 568, 568, - 568, 568, 568, 568, 568, nil, 568, 568, 568, nil, - 568, 568, 568, 568, 568, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 568, nil, nil, 568, nil, nil, - 568, 568, nil, nil, 568, nil, nil, nil, nil, nil, - 568, nil, nil, nil, nil, nil, nil, nil, 568, nil, - nil, nil, nil, 568, 568, 568, 568, nil, 568, 568, - nil, nil, nil, 568, 568, nil, 571, 571, 571, nil, - 571, 568, nil, 568, 571, 571, nil, nil, nil, 571, - nil, 571, 571, 571, 571, 571, 571, 571, nil, nil, - nil, nil, nil, 571, 571, 571, 571, 571, 571, 571, - nil, nil, 571, nil, nil, nil, nil, nil, nil, 571, - nil, nil, 571, 571, 571, 571, 571, 571, 571, 571, - nil, 571, 571, 571, nil, 571, 571, 571, 571, 571, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 571, - nil, nil, 571, nil, nil, 571, 571, nil, nil, 571, - nil, nil, nil, nil, nil, 571, nil, nil, nil, nil, - nil, nil, nil, 571, nil, nil, nil, nil, 571, 571, - 571, 571, nil, 571, 571, nil, nil, nil, 571, 571, - nil, 588, 588, 588, nil, 588, 571, nil, 571, 588, - 588, nil, nil, nil, 588, nil, 588, 588, 588, 588, - 588, 588, 588, nil, nil, nil, nil, nil, 588, 588, - 588, 588, 588, 588, 588, nil, nil, 588, nil, nil, - nil, nil, nil, nil, 588, nil, nil, 588, 588, 588, - 588, 588, 588, 588, 588, nil, 588, 588, 588, nil, - 588, 588, 588, 588, 588, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 588, nil, nil, 588, nil, nil, - 588, 588, nil, nil, 588, nil, nil, nil, nil, nil, - 588, nil, nil, nil, nil, nil, nil, nil, 588, nil, - nil, nil, nil, 588, 588, 588, 588, nil, 588, 588, - nil, nil, nil, 588, 588, nil, 607, 607, 607, nil, - 607, 588, nil, 588, 607, 607, nil, nil, nil, 607, - nil, 607, 607, 607, 607, 607, 607, 607, nil, nil, - nil, nil, nil, 607, 607, 607, 607, 607, 607, 607, - nil, nil, 607, nil, nil, nil, nil, nil, nil, 607, - nil, nil, 607, 607, 607, 607, 607, 607, 607, 607, - nil, 607, 607, 607, nil, 607, 607, nil, nil, 607, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 607, - nil, nil, 607, nil, nil, 607, 607, nil, nil, 607, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 607, 607, - 607, 607, nil, 607, 607, nil, nil, nil, 607, 607, - nil, 618, 618, 618, nil, 618, 607, nil, 607, 618, - 618, nil, nil, nil, 618, nil, 618, 618, 618, 618, - 618, 618, 618, nil, nil, nil, nil, nil, 618, 618, - 618, 618, 618, 618, 618, nil, nil, 618, nil, nil, - nil, nil, nil, nil, 618, nil, nil, 618, 618, 618, - 618, 618, 618, 618, 618, nil, 618, 618, 618, nil, - 618, 618, nil, nil, 618, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 618, nil, nil, 618, nil, nil, - 618, 618, nil, nil, 618, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 618, 618, 618, 618, nil, 618, 618, - nil, nil, nil, 618, 618, nil, 671, 671, 671, nil, - 671, 618, nil, 618, 671, 671, nil, nil, nil, 671, - nil, 671, 671, 671, 671, 671, 671, 671, nil, nil, - nil, nil, nil, 671, 671, 671, 671, 671, 671, 671, - nil, nil, 671, nil, nil, nil, nil, nil, nil, 671, - nil, nil, 671, 671, 671, 671, 671, 671, 671, 671, - nil, 671, 671, 671, nil, 671, 671, 671, 671, 671, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 671, - nil, nil, 671, nil, nil, 671, 671, nil, nil, 671, - nil, nil, nil, nil, nil, 671, nil, nil, nil, nil, - nil, nil, nil, 671, nil, nil, nil, nil, 671, 671, - 671, 671, nil, 671, 671, nil, nil, nil, 671, 671, - nil, 699, 699, 699, nil, 699, 671, nil, 671, 699, - 699, nil, nil, nil, 699, nil, 699, 699, 699, 699, - 699, 699, 699, nil, nil, nil, nil, nil, 699, 699, - 699, 699, 699, 699, 699, nil, nil, 699, nil, nil, - nil, nil, nil, nil, 699, nil, nil, 699, 699, 699, - 699, 699, 699, 699, 699, nil, 699, 699, 699, nil, - 699, 699, 699, 699, 699, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 699, nil, nil, 699, nil, nil, - 699, 699, nil, nil, 699, nil, nil, nil, nil, nil, - 699, nil, nil, nil, nil, nil, nil, nil, 699, nil, - nil, nil, nil, 699, 699, 699, 699, nil, 699, 699, - nil, nil, nil, 699, 699, nil, 701, 701, 701, nil, - 701, 699, nil, 699, 701, 701, nil, nil, nil, 701, - nil, 701, 701, 701, 701, 701, 701, 701, nil, nil, - nil, nil, nil, 701, 701, 701, 701, 701, 701, 701, - nil, nil, 701, nil, nil, nil, nil, nil, nil, 701, - nil, nil, 701, 701, 701, 701, 701, 701, 701, 701, - nil, 701, 701, 701, nil, 701, 701, 701, 701, 701, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 701, - nil, nil, 701, nil, nil, 701, 701, nil, nil, 701, - nil, nil, nil, nil, nil, 701, nil, nil, nil, nil, - nil, nil, nil, 701, nil, nil, nil, nil, 701, 701, - 701, 701, nil, 701, 701, nil, nil, nil, 701, 701, - nil, 712, 712, 712, nil, 712, 701, nil, 701, 712, - 712, nil, nil, nil, 712, nil, 712, 712, 712, 712, - 712, 712, 712, nil, nil, nil, nil, nil, 712, 712, - 712, 712, 712, 712, 712, nil, nil, 712, nil, nil, - nil, nil, nil, nil, 712, nil, nil, 712, 712, 712, - 712, 712, 712, 712, 712, nil, 712, 712, 712, nil, - 712, 712, 712, 712, 712, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 712, nil, nil, 712, nil, nil, - 712, 712, nil, nil, 712, nil, nil, nil, nil, nil, - 712, nil, nil, nil, nil, nil, nil, nil, 712, nil, - nil, nil, nil, 712, 712, 712, 712, nil, 712, 712, - nil, nil, nil, 712, 712, nil, 713, 713, 713, nil, - 713, 712, nil, 712, 713, 713, nil, nil, nil, 713, - nil, 713, 713, 713, 713, 713, 713, 713, nil, nil, - nil, nil, nil, 713, 713, 713, 713, 713, 713, 713, - nil, nil, 713, nil, nil, nil, nil, nil, nil, 713, - nil, nil, 713, 713, 713, 713, 713, 713, 713, 713, - nil, 713, 713, 713, nil, 713, 713, 713, 713, 713, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 713, - nil, nil, 713, nil, nil, 713, 713, nil, nil, 713, - nil, nil, nil, nil, nil, 713, nil, nil, nil, nil, - nil, nil, nil, 713, nil, nil, nil, nil, 713, 713, - 713, 713, nil, 713, 713, nil, nil, nil, 713, 713, - nil, 714, 714, 714, nil, 714, 713, nil, 713, 714, - 714, nil, nil, nil, 714, nil, 714, 714, 714, 714, - 714, 714, 714, nil, nil, nil, nil, nil, 714, 714, - 714, 714, 714, 714, 714, nil, nil, 714, nil, nil, - nil, nil, nil, nil, 714, nil, nil, 714, 714, 714, - 714, 714, 714, 714, 714, nil, 714, 714, 714, nil, - 714, 714, 714, 714, 714, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 714, nil, nil, 714, nil, nil, - 714, 714, nil, nil, 714, nil, nil, nil, nil, nil, - 714, nil, nil, nil, nil, nil, nil, nil, 714, nil, - nil, nil, nil, 714, 714, 714, 714, nil, 714, 714, - nil, nil, nil, 714, 714, nil, 716, 716, 716, nil, - 716, 714, nil, 714, 716, 716, nil, nil, nil, 716, - nil, 716, 716, 716, 716, 716, 716, 716, nil, nil, - nil, nil, nil, 716, 716, 716, 716, 716, 716, 716, - nil, nil, 716, nil, nil, nil, nil, nil, nil, 716, - nil, nil, 716, 716, 716, 716, 716, 716, 716, 716, - nil, 716, 716, 716, nil, 716, 716, 716, 716, 716, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 716, - nil, nil, 716, nil, nil, 716, 716, nil, nil, 716, - nil, nil, nil, nil, nil, 716, nil, nil, nil, nil, - nil, nil, nil, 716, nil, nil, nil, nil, 716, 716, - 716, 716, nil, 716, 716, nil, nil, nil, 716, 716, - nil, 728, 728, 728, nil, 728, 716, nil, 716, 728, - 728, nil, nil, nil, 728, nil, 728, 728, 728, 728, - 728, 728, 728, nil, nil, nil, nil, nil, 728, 728, - 728, 728, 728, 728, 728, nil, nil, 728, nil, nil, - nil, nil, nil, nil, 728, nil, nil, 728, 728, 728, - 728, 728, 728, 728, 728, 728, 728, 728, 728, nil, - 728, 728, 728, 728, 728, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 728, nil, nil, 728, nil, nil, - 728, 728, nil, nil, 728, nil, 728, nil, 728, nil, - 728, nil, nil, nil, nil, nil, nil, nil, 728, nil, - nil, nil, nil, 728, 728, 728, 728, nil, 728, 728, - nil, nil, nil, 728, 728, nil, 731, 731, 731, nil, - 731, 728, nil, 728, 731, 731, nil, nil, nil, 731, - nil, 731, 731, 731, 731, 731, 731, 731, nil, nil, - nil, nil, nil, 731, 731, 731, 731, 731, 731, 731, - nil, nil, 731, nil, nil, nil, nil, nil, nil, 731, - nil, nil, 731, 731, 731, 731, 731, 731, 731, 731, - 731, 731, 731, 731, nil, 731, 731, 731, 731, 731, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 731, - nil, nil, 731, nil, nil, 731, 731, nil, nil, 731, - nil, 731, nil, 731, nil, 731, nil, nil, nil, nil, - nil, nil, nil, 731, nil, nil, nil, nil, 731, 731, - 731, 731, nil, 731, 731, nil, nil, nil, 731, 731, - nil, 746, 746, 746, nil, 746, 731, nil, 731, 746, - 746, nil, nil, nil, 746, nil, 746, 746, 746, 746, - 746, 746, 746, nil, nil, nil, nil, nil, 746, 746, - 746, 746, 746, 746, 746, nil, nil, 746, nil, nil, - nil, nil, nil, nil, 746, nil, nil, 746, 746, 746, - 746, 746, 746, 746, 746, nil, 746, 746, 746, nil, - 746, 746, nil, nil, 746, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 746, nil, nil, 746, nil, nil, - 746, 746, nil, nil, 746, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 746, 746, 746, 746, nil, 746, 746, - nil, nil, nil, 746, 746, nil, 761, 761, 761, nil, - 761, 746, nil, 746, 761, 761, nil, nil, nil, 761, - nil, 761, 761, 761, 761, 761, 761, 761, nil, nil, - nil, nil, nil, 761, 761, 761, 761, 761, 761, 761, - nil, nil, 761, nil, nil, nil, nil, nil, nil, 761, - nil, nil, 761, 761, 761, 761, 761, 761, 761, 761, - nil, 761, 761, 761, nil, 761, 761, 761, 761, 761, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 761, - nil, nil, 761, nil, nil, 761, 761, nil, nil, 761, - nil, nil, nil, nil, nil, 761, nil, nil, nil, nil, - nil, nil, nil, 761, nil, nil, nil, nil, 761, 761, - 761, 761, nil, 761, 761, nil, nil, nil, 761, 761, - nil, 774, 774, 774, nil, 774, 761, nil, 761, 774, - 774, nil, nil, nil, 774, nil, 774, 774, 774, 774, - 774, 774, 774, nil, nil, nil, nil, nil, 774, 774, - 774, 774, 774, 774, 774, nil, nil, 774, nil, nil, - nil, nil, nil, nil, 774, nil, nil, 774, 774, 774, - 774, 774, 774, 774, 774, nil, 774, 774, 774, nil, - 774, 774, 774, 774, 774, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 774, nil, nil, 774, nil, nil, - 774, 774, nil, nil, 774, nil, nil, nil, nil, nil, - 774, nil, nil, nil, nil, nil, nil, nil, 774, nil, - nil, nil, nil, 774, 774, 774, 774, nil, 774, 774, - nil, nil, nil, 774, 774, nil, 779, 779, 779, nil, - 779, 774, nil, 774, 779, 779, nil, nil, nil, 779, - nil, 779, 779, 779, 779, 779, 779, 779, nil, nil, - nil, nil, nil, 779, 779, 779, 779, 779, 779, 779, - nil, nil, 779, nil, nil, nil, nil, nil, nil, 779, - nil, nil, 779, 779, 779, 779, 779, 779, 779, 779, - nil, 779, 779, 779, nil, 779, 779, 779, 779, 779, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 779, - nil, nil, 779, nil, nil, 779, 779, nil, nil, 779, - nil, 779, nil, nil, nil, 779, nil, nil, nil, nil, - nil, nil, nil, 779, nil, nil, nil, nil, 779, 779, - 779, 779, nil, 779, 779, nil, nil, nil, 779, 779, - nil, 796, 796, 796, nil, 796, 779, nil, 779, 796, - 796, nil, nil, nil, 796, nil, 796, 796, 796, 796, - 796, 796, 796, nil, nil, nil, nil, nil, 796, 796, - 796, 796, 796, 796, 796, nil, nil, 796, nil, nil, - nil, nil, nil, nil, 796, nil, nil, 796, 796, 796, - 796, 796, 796, 796, 796, nil, 796, 796, 796, nil, - 796, 796, 796, 796, 796, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 796, nil, nil, 796, nil, nil, - 796, 796, nil, nil, 796, nil, nil, nil, nil, nil, - 796, nil, nil, nil, nil, nil, nil, nil, 796, nil, - nil, nil, nil, 796, 796, 796, 796, nil, 796, 796, - nil, nil, nil, 796, 796, nil, 810, 810, 810, nil, - 810, 796, nil, 796, 810, 810, nil, nil, nil, 810, - nil, 810, 810, 810, 810, 810, 810, 810, nil, nil, - nil, nil, nil, 810, 810, 810, 810, 810, 810, 810, - nil, nil, 810, nil, nil, nil, nil, nil, nil, 810, - nil, nil, 810, 810, 810, 810, 810, 810, 810, 810, - nil, 810, 810, 810, nil, 810, 810, nil, nil, 810, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 810, - nil, nil, 810, nil, nil, 810, 810, nil, nil, 810, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 810, 810, - 810, 810, nil, 810, 810, nil, nil, nil, 810, 810, - nil, 870, 870, 870, nil, 870, 810, nil, 810, 870, - 870, nil, nil, nil, 870, nil, 870, 870, 870, 870, - 870, 870, 870, nil, nil, nil, nil, nil, 870, 870, - 870, 870, 870, 870, 870, nil, nil, 870, nil, nil, - nil, nil, nil, nil, 870, nil, nil, 870, 870, 870, - 870, 870, 870, 870, 870, nil, 870, 870, 870, nil, - 870, 870, 870, 870, 870, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 870, nil, nil, 870, nil, nil, - 870, 870, nil, nil, 870, nil, 870, nil, 870, nil, - 870, nil, nil, nil, nil, nil, nil, nil, 870, nil, - nil, nil, nil, 870, 870, 870, 870, nil, 870, 870, - nil, nil, nil, 870, 870, nil, 873, 873, 873, nil, - 873, 870, nil, 870, 873, 873, nil, nil, nil, 873, - nil, 873, 873, 873, 873, 873, 873, 873, nil, nil, - nil, nil, nil, 873, 873, 873, 873, 873, 873, 873, - nil, nil, 873, nil, nil, nil, nil, nil, nil, 873, - nil, nil, 873, 873, 873, 873, 873, 873, 873, 873, - 873, 873, 873, 873, nil, 873, 873, 873, 873, 873, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 873, - nil, nil, 873, nil, nil, 873, 873, nil, nil, 873, - nil, 873, nil, 873, nil, 873, nil, nil, nil, nil, - nil, nil, nil, 873, nil, nil, nil, nil, 873, 873, - 873, 873, nil, 873, 873, nil, nil, nil, 873, 873, - nil, 876, 876, 876, nil, 876, 873, nil, 873, 876, - 876, nil, nil, nil, 876, nil, 876, 876, 876, 876, - 876, 876, 876, nil, nil, nil, nil, nil, 876, 876, - 876, 876, 876, 876, 876, nil, nil, 876, nil, nil, - nil, nil, nil, nil, 876, nil, nil, 876, 876, 876, - 876, 876, 876, 876, 876, 876, 876, 876, 876, nil, - 876, 876, 876, 876, 876, 597, 597, 597, 597, 597, - 597, 597, 597, 597, 597, 597, nil, 597, 597, nil, - nil, 597, 597, nil, 876, nil, 597, 876, nil, nil, - 876, 876, nil, nil, 876, nil, 876, 597, 876, 597, - 876, 597, 597, 597, 597, 597, 597, 597, 876, 597, - nil, nil, nil, 876, 876, 876, 876, nil, 876, 876, - nil, nil, nil, 876, 876, nil, 597, nil, 597, nil, - nil, 876, nil, 876, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, nil, nil, - nil, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, nil, nil, nil, nil, nil, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, nil, 6, nil, nil, - nil, nil, nil, nil, nil, 6, 6, nil, 6, 6, - 6, 6, 6, 6, 6, nil, nil, 6, 6, nil, - nil, nil, 6, 6, 6, 6, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 6, - 6, nil, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, nil, nil, 6, 6, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 6, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, nil, nil, nil, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, nil, nil, nil, nil, nil, - 7, 7, 7, 7, 7, 7, 7, 7, 7, nil, - nil, 7, nil, nil, nil, nil, nil, nil, nil, 7, - 7, nil, 7, 7, 7, 7, 7, 7, 7, nil, - nil, 7, 7, nil, nil, nil, 7, 7, 7, 7, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 7, 7, nil, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, nil, nil, 7, - 7, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 7, 372, 372, 372, 372, 372, 372, 372, 372, - 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, - 372, 372, 372, 372, 372, 372, nil, nil, nil, 372, - 372, 372, 372, 372, 372, 372, 372, 372, 372, nil, - nil, nil, nil, nil, 372, 372, 372, 372, 372, 372, - 372, 372, 372, nil, nil, 372, nil, nil, nil, nil, - nil, nil, nil, 372, 372, nil, 372, 372, 372, 372, - 372, 372, 372, nil, nil, 372, 372, nil, nil, nil, - 372, 372, 372, 372, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 372, 372, nil, - 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, - 372, nil, nil, 372, 372, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 372, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, 554, 554, 554, 554, 554, - nil, nil, nil, 554, 554, 554, 554, 554, 554, 554, - 554, 554, 554, nil, nil, nil, nil, nil, 554, 554, - 554, 554, 554, 554, 554, 554, 554, nil, nil, 554, - nil, nil, nil, nil, nil, nil, nil, 554, 554, nil, - 554, 554, 554, 554, 554, 554, 554, nil, nil, 554, - 554, nil, nil, nil, 554, 554, 554, 554, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 554, 554, nil, 554, 554, 554, 554, 554, 554, - 554, 554, 554, 554, 554, nil, nil, 554, 554, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 554, - 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, - 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, - 65, 65, 65, 65, nil, nil, nil, 65, 65, 65, - 65, 65, 65, 65, 65, 65, 65, nil, nil, nil, - nil, nil, 65, 65, 65, 65, 65, 65, 65, 65, - 65, 65, 65, 65, nil, 65, nil, nil, nil, nil, - nil, 65, 65, nil, 65, 65, 65, 65, 65, 65, - 65, nil, nil, 65, 65, nil, nil, nil, 65, 65, - 65, 65, nil, nil, nil, nil, nil, 65, nil, nil, - nil, nil, nil, nil, nil, 65, 65, nil, 65, 65, - 65, 65, 65, 65, 65, 65, 65, 65, 65, nil, - nil, 65, 684, 684, 684, 684, 684, 684, 684, 684, - 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, - 684, 684, 684, 684, 684, 684, nil, nil, nil, 684, - 684, 684, 684, 684, 684, 684, 684, 684, 684, nil, - nil, nil, nil, nil, 684, 684, 684, 684, 684, 684, - 684, 684, 684, nil, nil, 684, nil, nil, nil, nil, - nil, nil, nil, 684, 684, nil, 684, 684, 684, 684, - 684, 684, 684, nil, nil, 684, 684, nil, nil, nil, - 684, 684, 684, 684, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 684, 684, nil, - 684, 684, 684, 684, 684, 684, 684, 684, 684, 684, - 684, 201, 201, 684, nil, 201, nil, nil, nil, nil, - nil, nil, nil, 201, 201, nil, 201, 201, 201, 201, - 201, 201, 201, nil, nil, 201, 201, nil, nil, nil, - 201, 201, 201, 201, nil, nil, nil, nil, nil, 201, - nil, nil, nil, nil, nil, nil, nil, 201, 201, nil, - 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, - 201, 202, 202, 201, nil, 202, nil, nil, nil, nil, - nil, nil, nil, 202, 202, nil, 202, 202, 202, 202, - 202, 202, 202, nil, nil, 202, 202, nil, nil, nil, - 202, 202, 202, 202, nil, nil, nil, nil, nil, 202, - nil, nil, nil, nil, nil, nil, nil, 202, 202, nil, - 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, - 202, 266, 266, 202, nil, 266, nil, nil, nil, nil, - nil, nil, nil, 266, 266, nil, 266, 266, 266, 266, - 266, 266, 266, nil, nil, 266, 266, nil, nil, nil, - 266, 266, 266, 266, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 266, 266, nil, - 266, 266, 266, 266, 266, 266, 266, 266, 266, 266, - 266, 267, 267, 266, nil, 267, nil, nil, nil, nil, - nil, nil, nil, 267, 267, nil, 267, 267, 267, 267, - 267, 267, 267, nil, nil, 267, 267, nil, nil, nil, - 267, 267, 267, 267, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 267, 267, nil, - 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, - 267, 413, 413, 267, nil, 413, nil, nil, nil, nil, - nil, nil, nil, 413, 413, nil, 413, 413, 413, 413, - 413, 413, 413, nil, nil, 413, 413, nil, nil, nil, - 413, 413, 413, 413, nil, nil, nil, nil, nil, 413, - nil, nil, nil, nil, nil, nil, nil, 413, 413, nil, - 413, 413, 413, 413, 413, 413, 413, 413, 413, 413, - 413, 414, 414, 413, nil, 414, nil, nil, nil, nil, - nil, nil, nil, 414, 414, nil, 414, 414, 414, 414, - 414, 414, 414, nil, nil, 414, 414, nil, nil, nil, - 414, 414, 414, 414, nil, nil, nil, nil, nil, 414, - nil, nil, nil, nil, nil, nil, nil, 414, 414, nil, - 414, 414, 414, 414, 414, 414, 414, 414, 414, 414, - 414, 477, 477, 414, nil, 477, nil, nil, nil, nil, - nil, nil, nil, 477, 477, nil, 477, 477, 477, 477, - 477, 477, 477, nil, nil, 477, 477, nil, nil, nil, - 477, 477, 477, 477, nil, nil, nil, nil, nil, 477, - nil, nil, nil, nil, nil, nil, nil, 477, 477, nil, - 477, 477, 477, 477, 477, 477, 477, 477, 477, 477, - 477, 478, 478, 477, nil, 478, nil, nil, nil, nil, - nil, nil, nil, 478, 478, nil, 478, 478, 478, 478, - 478, 478, 478, nil, nil, 478, 478, nil, nil, nil, - 478, 478, 478, 478, nil, nil, nil, nil, nil, 478, - nil, nil, nil, nil, nil, nil, nil, 478, 478, nil, - 478, 478, 478, 478, 478, 478, 478, 478, 478, 478, - 478, 489, 489, 478, nil, 489, nil, nil, nil, nil, - nil, nil, nil, 489, 489, nil, 489, 489, 489, 489, - 489, 489, 489, nil, nil, 489, 489, nil, nil, nil, - 489, 489, 489, 489, nil, nil, nil, nil, nil, 489, - nil, nil, nil, nil, nil, nil, nil, 489, 489, nil, - 489, 489, 489, 489, 489, 489, 489, 489, 489, 489, - 489, 490, 490, 489, nil, 490, nil, nil, nil, nil, - nil, nil, nil, 490, 490, nil, 490, 490, 490, 490, - 490, 490, 490, nil, nil, 490, 490, nil, nil, nil, - 490, 490, 490, 490, nil, nil, nil, nil, nil, 490, - nil, nil, nil, nil, nil, nil, nil, 490, 490, nil, - 490, 490, 490, 490, 490, 490, 490, 490, 490, 490, - 490, 517, 517, 490, nil, 517, nil, nil, nil, nil, - nil, nil, nil, 517, 517, nil, 517, 517, 517, 517, - 517, 517, 517, nil, nil, 517, 517, nil, nil, nil, - 517, 517, 517, 517, nil, nil, nil, nil, nil, 517, - nil, nil, nil, nil, nil, nil, nil, 517, 517, nil, - 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, - 517, 518, 518, 517, nil, 518, nil, nil, nil, nil, - nil, nil, nil, 518, 518, nil, 518, 518, 518, 518, - 518, 518, 518, nil, nil, 518, 518, nil, nil, nil, - 518, 518, 518, 518, nil, nil, nil, nil, nil, 518, - nil, nil, nil, nil, nil, nil, nil, 518, 518, nil, - 518, 518, 518, 518, 518, 518, 518, 518, 518, 518, - 518, 524, 524, 518, nil, 524, nil, nil, nil, nil, - nil, nil, nil, 524, 524, nil, 524, 524, 524, 524, - 524, 524, 524, nil, nil, 524, 524, nil, nil, nil, - 524, 524, 524, 524, nil, nil, nil, nil, nil, 524, - nil, nil, nil, nil, nil, nil, nil, 524, 524, nil, - 524, 524, 524, 524, 524, 524, 524, 524, 524, 524, - 524, 525, 525, 524, nil, 525, nil, nil, nil, nil, - nil, nil, nil, 525, 525, nil, 525, 525, 525, 525, - 525, 525, 525, nil, nil, 525, 525, nil, nil, nil, - 525, 525, 525, 525, nil, nil, nil, nil, nil, 525, - nil, nil, nil, nil, nil, nil, nil, 525, 525, nil, - 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, - 525, 877, 877, 525, nil, 877, nil, nil, nil, nil, - nil, nil, nil, 877, 877, nil, 877, 877, 877, 877, - 877, 877, 877, nil, nil, 877, 877, nil, nil, nil, - 877, 877, 877, 877, nil, nil, nil, nil, nil, 877, - nil, nil, nil, nil, nil, nil, nil, 877, 877, nil, - 877, 877, 877, 877, 877, 877, 877, 877, 877, 877, - 877, 878, 878, 877, nil, 878, nil, nil, nil, nil, - nil, nil, nil, 878, 878, nil, 878, 878, 878, 878, - 878, 878, 878, nil, nil, 878, 878, nil, nil, nil, - 878, 878, 878, 878, nil, nil, nil, nil, nil, 878, - nil, nil, nil, nil, nil, nil, nil, 878, 878, nil, - 878, 878, 878, 878, 878, 878, 878, 878, 878, 878, - 878, 915, 915, 878, nil, 915, nil, nil, nil, nil, - nil, nil, nil, 915, 915, nil, 915, 915, 915, 915, - 915, 915, 915, nil, nil, 915, 915, nil, nil, nil, - 915, 915, 915, 915, nil, nil, nil, nil, nil, 915, - nil, nil, nil, nil, nil, nil, nil, 915, 915, nil, - 915, 915, 915, 915, 915, 915, 915, 915, 915, 915, - 915, nil, nil, 915, 251, 251, 251, 251, 251, 251, - 251, 251, 251, 251, 251, nil, 251, 251, nil, nil, - 251, 251, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 251, nil, 251, nil, - 251, 251, 251, 251, 251, 251, 251, nil, 251, nil, - 406, 406, 406, 406, 406, 406, 406, 406, 406, 406, - 406, nil, 406, 406, nil, 251, 406, 406, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 406, nil, 406, nil, 406, 406, 406, 406, - 406, 406, 406, nil, 406, nil, 445, 445, 445, 445, - 445, 445, 445, 445, 445, 445, 445, nil, 445, 445, - nil, 406, 445, 445, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 445, nil, - 445, nil, 445, 445, 445, 445, 445, 445, 445, nil, - 445, nil, 491, 491, 491, 491, 491, 491, 491, 491, - 491, 491, 491, nil, 491, 491, 445, 445, 491, 491, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 491, nil, 491, nil, 491, 491, - 491, 491, 491, 491, 491, nil, 491, nil, 619, 619, - 619, 619, 619, 619, 619, 619, 619, 619, 619, nil, - 619, 619, nil, 491, 619, 619, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 619, nil, 619, nil, 619, 619, 619, 619, 619, 619, - 619, nil, 619, nil, 697, 697, 697, 697, 697, 697, - 697, 697, 697, 697, 697, nil, 697, 697, nil, 619, - 697, 697, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 697, nil, 697, nil, - 697, 697, 697, 697, 697, 697, 697, nil, 697, nil, - 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, - 700, nil, 700, 700, nil, 697, 700, 700, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 700, nil, 700, nil, 700, 700, 700, 700, - 700, 700, 700, nil, 700, nil, 704, 704, 704, 704, - 704, 704, 704, 704, 704, 704, 704, nil, 704, 704, - nil, 700, 704, 704, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 704, nil, - 704, nil, 704, 704, 704, 704, 704, 704, 704, nil, - 704, nil, 706, 706, 706, 706, 706, 706, 706, 706, - 706, 706, 706, nil, 706, 706, nil, 704, 706, 706, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 706, nil, 706, nil, 706, 706, - 706, 706, 706, 706, 706, nil, 706, nil, 709, 709, - 709, 709, 709, 709, 709, 709, 709, 709, 709, nil, - 709, 709, nil, 706, 709, 709, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 709, nil, 709, nil, 709, 709, 709, 709, 709, 709, - 709, nil, 709, nil, 711, 711, 711, 711, 711, 711, - 711, 711, 711, 711, 711, nil, 711, 711, nil, 709, - 711, 711, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 711, nil, 711, nil, - 711, 711, 711, 711, 711, 711, 711, nil, 711, nil, - 795, 795, 795, 795, 795, 795, 795, 795, 795, 795, - 795, nil, 795, 795, nil, 711, 795, 795, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 795, nil, 795, nil, 795, 795, 795, 795, - 795, 795, 795, nil, 795, nil, 797, 797, 797, 797, - 797, 797, 797, 797, 797, 797, 797, nil, 797, 797, - nil, 795, 797, 797, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 797, nil, - 797, nil, 797, 797, 797, 797, 797, 797, 797, nil, - 797, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 797 ] - -racc_action_pointer = [ - 0, 80, nil, 33, 849, 5297, 20962, 21086, 7, 30, - 11, 53, 139, 521, 300, 374, nil, 61, 5422, 13696, - 266, nil, 5547, 5672, 5797, 76, 348, 733, 858, nil, - 1672, 5922, 6047, nil, 197, 342, 304, 431, 6180, 6305, - 6430, 243, 548, nil, nil, nil, nil, nil, nil, nil, - 983, 1797, 6555, 6680, 6805, 0, nil, 6930, 7055, nil, - nil, 7180, 7313, 7438, 7563, 21458, nil, nil, nil, nil, - nil, nil, nil, 580, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 0, nil, nil, 130, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 383, nil, 7688, nil, nil, nil, 7821, 7946, 8071, 8196, - 8321, 1121, nil, 604, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 283, nil, 1922, 2047, 8446, 8571, 8696, - 8821, 21630, 21690, nil, nil, 8946, 9071, 9196, 9321, 9446, - nil, nil, 651, 54, 380, 107, 303, 408, nil, 9571, - 2172, 415, 9696, 9821, 9946, 10071, 10196, 10321, 10446, 10571, - 10696, 10821, 10946, 11071, 11196, 11321, 11446, 11571, 11696, 11821, - 11946, 12071, 12196, 12321, 12446, 12571, 12696, 12821, nil, nil, - nil, 22638, nil, 388, 394, nil, 12946, 446, 13071, nil, - nil, nil, nil, 13196, nil, nil, 21750, 21810, 462, 13321, - 13446, nil, nil, nil, nil, nil, nil, nil, 13571, 425, - 2297, 439, 482, 445, 13696, 2422, 684, 770, 552, 803, - 529, 529, 355, nil, 569, 474, 539, 13829, nil, 484, - 618, 622, 809, nil, 628, nil, 13954, 691, 693, 585, - nil, 158, 269, 629, 612, 270, 639, nil, nil, 599, - 48, 136, 14079, 14204, 84, 711, 617, 65, 866, 697, - 89, 730, nil, nil, 356, 418, 137, nil, 895, nil, - 55, 14329, nil, nil, 167, 419, 447, 513, 577, 582, - 707, 711, 713, nil, 744, nil, 14454, nil, 271, 341, - 347, 397, 39, 405, nil, 1218, nil, nil, nil, nil, - nil, nil, 21210, nil, nil, nil, nil, 643, 655, nil, - nil, 6048, nil, 14579, 642, nil, 649, nil, nil, 7180, - 666, nil, 614, 651, 1113, nil, nil, nil, 239, 709, - 348, nil, nil, 1238, 1368, nil, 22684, nil, nil, nil, - 115, nil, 723, 21870, 21930, 14704, 242, 14829, 14954, 15079, - 2172, 2297, 562, 691, 748, 758, 783, 785, 1557, 3672, - 3797, 2422, 1189, 1319, 2547, 2672, 2797, 2922, 3047, 3172, - 3297, 941, 1128, 3422, 3547, 22730, 398, nil, 15204, nil, - 15329, nil, 15454, nil, nil, 1498, nil, nil, 1553, nil, - nil, 727, nil, nil, 15579, 456, 460, 730, nil, 731, - 732, nil, nil, 740, 15704, 747, 15829, 21990, 22050, 928, - 788, nil, nil, 15954, 749, nil, 16079, 16204, 16329, 22110, - 22170, 22776, 16454, 867, 16579, nil, 757, nil, 16704, nil, - nil, 16829, nil, nil, nil, nil, 1077, 2547, 891, nil, - 2672, 119, 123, 901, 914, 16954, 17079, 22230, 22290, 98, - nil, nil, 1022, nil, 22350, 22410, 17204, nil, nil, 17329, - 406, 316, 2797, 1300, nil, nil, nil, 283, nil, nil, - nil, 1333, nil, nil, nil, 821, nil, nil, 61, nil, - nil, 819, nil, nil, 21334, nil, nil, 17454, 828, 17579, - 17704, 746, 873, 17829, 17954, 873, nil, nil, 18079, 882, - nil, 18204, nil, nil, 268, 272, 473, 603, 854, 7688, - 853, nil, 665, nil, 2922, 853, nil, 899, 18329, nil, - nil, nil, nil, nil, nil, 488, nil, 20829, -6, 865, - nil, 872, nil, 3047, 3172, nil, 361, 18454, 871, nil, - 876, 198, 277, 914, 497, 1058, 915, 877, 18579, 22822, - 947, 948, 335, 1007, nil, 3297, 887, 931, nil, nil, - nil, 379, 135, 1430, 896, 899, 900, 902, nil, nil, - nil, nil, nil, nil, 243, 982, nil, 858, nil, nil, - nil, nil, 989, nil, nil, 990, 624, nil, 1028, nil, - nil, nil, nil, 1038, nil, 143, 922, 141, 144, 171, - 247, 18704, 741, 1121, nil, 938, 3422, 625, nil, nil, - 1059, 3547, 1517, 724, 21570, nil, nil, nil, nil, nil, - nil, 3672, nil, nil, nil, nil, nil, 22868, 942, 18829, - 22914, 18954, nil, nil, 22960, nil, 23006, nil, nil, 23052, - nil, 23098, 19079, 19204, 19329, 402, 19454, 943, 945, 946, - nil, 972, 951, 728, 389, nil, 1075, nil, 19579, nil, - 3797, 19704, nil, nil, 966, 982, 1087, 968, 498, nil, - nil, nil, 3922, nil, nil, 163, 19829, nil, nil, nil, - nil, nil, 967, nil, 1547, nil, 5935, nil, nil, 1597, - 1049, 19954, nil, nil, 920, nil, 973, 538, 1016, 978, - nil, nil, 1096, nil, 20079, 1098, 4047, 4172, nil, 20204, - 4297, 156, 251, nil, 1110, nil, 4422, nil, 1114, 998, - nil, nil, 1024, 1008, nil, 23144, 20329, 23190, 7326, nil, - 7451, nil, nil, 1694, nil, 1033, 1014, nil, nil, nil, - 20454, nil, 1015, 1033, 1017, nil, 1019, nil, nil, nil, - nil, 4547, 164, 1024, 1103, 165, nil, 4672, 4797, 1042, - 1049, 1070, nil, nil, 1072, 1079, nil, 1083, nil, nil, - 1096, 981, 1099, 865, nil, nil, 166, nil, 1220, 1226, - nil, 215, nil, nil, 1227, nil, nil, 7576, nil, 1108, - 1112, 1120, 1124, nil, 1133, nil, 853, 1150, 1212, nil, - 20579, nil, nil, 20704, nil, 1261, 20829, 22470, 22530, 172, - 1157, 1261, nil, 13842, nil, nil, 1723, nil, 1819, nil, - 1848, nil, nil, nil, 596, 1116, 1144, 4922, nil, nil, - nil, nil, nil, 5047, nil, 5172, 15717, nil, nil, 1944, - nil, 1973, nil, nil, nil, 22590, nil, 1147, nil, 1156, - 173, 207, 271, 274, nil, nil, 1154, 1155, 1157, 1159, - 1161, 1466, 1166, 1492, 678, 1287, 1289, 1171, 1172, 1173, - 1174, 1229, 1230, nil, 209, nil, 2069, nil, nil, nil, - 1658, 1194, nil, nil, nil, nil, 2098, nil, nil, nil, - 1195, 1197, 1198, nil, nil ] - -racc_action_default = [ - -4, -552, -1, -538, -5, -552, -552, -552, -552, -552, - -552, -552, -552, -552, -273, -32, -33, -540, -552, -38, - -40, -41, -283, -319, -320, -45, -248, -248, -248, -58, - -4, -62, -70, -72, -552, -465, -552, -552, -552, -552, - -552, -540, -225, -266, -267, -268, -269, -270, -271, -272, - -526, -4, -552, -551, -518, -291, -293, -552, -552, -297, - -300, -538, -552, -552, -552, -552, -321, -322, -324, -325, - -414, -415, -416, -417, -418, -433, -421, -422, -435, -437, - -426, -431, -447, -435, -449, -450, -524, -454, -455, -525, - -457, -458, -459, -460, -461, -462, -463, -464, -467, -468, - -552, -3, -539, -547, -548, -549, -552, -552, -552, -552, - -552, -7, -8, -552, -99, -100, -101, -102, -103, -104, - -105, -106, -107, -111, -112, -113, -114, -115, -116, -117, - -118, -119, -120, -121, -122, -123, -124, -125, -126, -127, - -128, -129, -130, -131, -132, -133, -134, -135, -136, -137, - -138, -139, -140, -141, -142, -143, -144, -145, -146, -147, - -148, -149, -150, -151, -152, -153, -154, -155, -156, -157, - -158, -159, -160, -161, -162, -163, -164, -165, -166, -167, - -168, -169, -170, -171, -172, -173, -174, -175, -176, -177, - -178, -179, -180, -13, -108, -4, -4, -552, -552, -552, - -234, -552, -552, -536, -537, -552, -552, -552, -552, -540, - -541, -37, -552, -465, -552, -273, -552, -552, -217, -552, - -4, -552, -552, -552, -552, -552, -552, -552, -552, -552, - -552, -552, -552, -552, -552, -552, -552, -552, -552, -552, - -552, -552, -552, -552, -552, -552, -552, -552, -384, -386, - -42, -226, -236, -258, -258, -241, -552, -259, -552, -283, - -319, -320, -520, -552, -43, -44, -552, -552, -50, -234, - -552, -290, -389, -398, -400, -56, -395, -57, -540, -60, - -4, -540, -552, -63, -66, -4, -78, -552, -552, -85, - -286, -540, -552, -323, -396, -552, -68, -552, -74, -280, - -451, -452, -552, -202, -203, -218, -552, -406, -552, -276, - -227, -544, -544, -552, -552, -544, -552, -292, -376, -39, - -552, -552, -552, -552, -538, -552, -539, -465, -552, -552, - -273, -552, -335, -336, -94, -95, -552, -97, -552, -273, - -552, -552, -465, -312, -99, -100, -140, -141, -142, -158, - -163, -170, -173, -314, -552, -516, -552, -419, -552, -552, - -552, -552, -552, -552, 965, -6, -550, -14, -15, -16, - -17, -18, -552, -10, -11, -12, -109, -552, -552, -21, - -29, -181, -259, -552, -552, -22, -30, -31, -23, -183, - -540, -235, -527, -528, -248, -393, -529, -530, -527, -248, - -528, -392, -394, -529, -530, -28, -191, -34, -35, -36, - -540, -289, -552, -552, -552, -234, -280, -552, -552, -552, - -192, -193, -194, -195, -196, -197, -198, -199, -204, -205, - -206, -207, -208, -209, -210, -211, -212, -213, -214, -215, - -216, -219, -220, -221, -222, -540, -365, -237, -257, -238, - -257, -255, -552, -260, -523, -248, -527, -528, -248, -48, - -51, -540, -249, -250, -251, -365, -365, -540, -285, -540, - -59, -278, -75, -64, -552, -540, -234, -552, -552, -84, - -552, -451, -452, -552, -71, -76, -552, -552, -552, -552, - -552, -223, -552, -551, -551, -275, -540, -228, -546, -545, - -230, -546, -281, -282, -519, -294, -488, -4, -326, -327, - -4, -552, -552, -552, -552, -552, -234, -552, -552, -280, - -305, -94, -95, -96, -552, -552, -234, -308, -469, -552, - -552, -552, -4, -488, -316, -534, -535, -540, -420, -434, - -439, -552, -441, -423, -436, -552, -438, -425, -552, -428, - -430, -552, -448, -9, -552, -19, -20, -552, -265, -552, - -552, -397, -552, -552, -552, -52, -233, -390, -552, -54, - -391, -552, -288, -542, -527, -528, -527, -528, -540, -181, - -552, -366, -370, -368, -4, -258, -256, -261, -552, -521, - -522, -46, -387, -47, -388, -365, -231, -38, -552, -258, - -247, -540, -253, -4, -4, -284, -61, -552, -67, -73, - -540, -527, -528, -232, -531, -83, -552, -69, -552, -190, - -200, -201, -540, -551, -333, -4, -407, -551, -408, -409, - -277, -544, -552, -488, -370, -515, -515, -515, -487, -489, - -490, -491, -492, -493, -494, -552, -497, -552, -499, -505, - -507, -508, -510, -511, -512, -552, -551, -328, -551, -298, - -329, -330, -301, -552, -304, -552, -540, -527, -528, -531, - -279, -552, -94, -95, -98, -540, -4, -552, -471, -310, - -552, -4, -488, -552, -552, -517, -440, -443, -444, -445, - -446, -4, -424, -427, -429, -432, -110, -182, -263, -552, - -184, -552, -543, -25, -186, -26, -187, -53, -27, -188, - -55, -189, -552, -552, -552, -397, -552, -515, -515, -515, - -364, -552, -370, -552, -494, -503, -552, -239, -257, -262, - -4, -552, -244, -252, -540, -552, -552, -65, -397, -77, - -287, -2, -4, -413, -334, -552, -552, -411, -229, -377, - -380, -382, -370, -379, -552, -480, -552, -483, -485, -552, - -552, -552, -496, -337, -552, -339, -341, -348, -494, -540, - -509, -513, -552, -331, -552, -552, -4, -4, -303, -552, - -4, -397, -552, -397, -552, -470, -4, -313, -552, -540, - -473, -317, -552, -264, -24, -185, -552, -224, -355, -357, - -552, -360, -362, -552, -367, -552, -371, -372, -374, -375, - -552, -385, -258, -552, -258, -243, -258, -254, -399, -401, - -412, -4, -465, -552, -552, -273, -410, -4, -4, -540, - -515, -515, -500, -514, -515, -515, -506, -515, -495, -501, - -540, -552, -346, -552, -498, -295, -552, -296, -552, -552, - -261, -551, -306, -309, -552, -315, -472, -488, -442, -515, - -515, -515, -515, -504, -515, -369, -552, -502, -552, -240, - -257, -49, -242, -257, -245, -406, -234, -552, -552, -280, - -552, -552, -378, -552, -476, -478, -552, -481, -552, -484, - -552, -486, -338, -340, -344, -552, -349, -4, -299, -302, - -402, -403, -404, -4, -311, -4, -552, -352, -354, -552, - -358, -552, -361, -363, -373, -552, -280, -258, -405, -540, - -527, -528, -531, -279, -381, -383, -515, -515, -515, -515, - -342, -552, -347, -552, -551, -552, -552, -515, -515, -515, - -515, -279, -531, -246, -397, -474, -552, -477, -479, -482, - -552, -345, -332, -307, -318, -350, -552, -353, -356, -359, - -515, -343, -515, -475, -351 ] - -racc_goto_table = [ - 117, 117, 208, 10, 201, 312, 315, 308, 10, 493, - 310, 390, 717, 293, 293, 353, 266, 12, 283, 507, - 510, 311, 12, 623, 320, 321, 306, 681, 324, 514, - 772, 105, 101, 10, 394, 399, 380, 387, 252, 252, - 252, 718, 589, 296, 293, 293, 293, 12, 112, 194, - 561, 523, 447, 449, 10, 120, 120, 807, 638, 117, - 460, 122, 122, 809, 634, 332, 272, 276, 12, 896, - 268, 275, 277, 367, 368, 369, 370, 659, 662, 586, - 461, 586, 250, 264, 265, 638, 832, 497, 500, 105, - 325, 504, 721, 589, 211, 600, 584, 836, 863, 455, - 458, 769, 359, 893, 111, 10, 592, 363, 1, 594, - 279, 340, 343, 10, 484, 603, 604, 281, 741, 12, - 102, 932, 193, 333, 719, 372, 595, 12, 554, 313, - 832, 602, 462, 539, 720, 546, 549, 601, 734, 355, - 314, 317, 505, 331, 753, 527, 354, 534, 496, 318, - 322, 776, 323, 777, 671, 903, 676, 951, 786, 532, - 533, 684, 857, 722, 806, 384, 384, 632, 749, 506, - 249, 827, 828, 446, 465, 466, 961, 900, 627, 745, - 357, 358, 360, 361, 548, 638, 835, 362, 775, 837, - 686, 752, 691, 830, 763, 893, 404, 13, 10, 10, - 914, 365, 13, 413, 863, nil, 809, nil, nil, 371, - nil, nil, 12, 12, nil, 212, 252, 663, 840, 212, - 212, 212, 832, 10, 836, nil, 578, 13, 287, 287, - 862, nil, 805, 864, 638, nil, nil, 12, 715, 674, - 789, 395, nil, nil, nil, 730, 394, 399, 13, 212, - nil, nil, nil, nil, 212, 212, nil, 859, 212, 328, - 338, 338, 829, nil, nil, nil, 293, nil, nil, nil, - 738, nil, nil, 379, 385, 388, 480, nil, 477, 293, - nil, 405, nil, 10, 485, 252, 252, 610, 10, 511, - 512, 608, nil, 489, 252, 473, 831, 12, 834, 13, - 617, nil, 12, 212, 212, 212, 212, 13, 952, nil, - 613, 763, nil, 927, 842, nil, 928, nil, 929, 517, - 589, nil, 613, 694, nil, nil, 781, 666, nil, nil, - 463, nil, 272, 628, 276, 783, 938, 675, 467, 939, - 860, 940, 861, nil, nil, 535, nil, nil, 852, nil, - 613, 905, 105, 513, nil, nil, nil, 707, 613, 586, - 279, 710, 815, nil, 780, 279, 117, 469, 528, nil, - nil, nil, 475, nil, nil, 562, 960, nil, nil, nil, - nil, 901, nil, nil, 727, nil, 962, nil, 763, nil, - 763, nil, 13, 13, 212, 212, 212, 212, 732, nil, - 585, nil, 212, 212, 212, 212, 212, 748, 404, 638, - nil, nil, nil, nil, 553, nil, 599, 13, nil, nil, - nil, 120, nil, nil, 737, 926, nil, 122, nil, nil, - 580, 252, nil, nil, 566, nil, nil, nil, 565, 570, - nil, 930, 763, 569, 821, nil, nil, nil, 937, nil, - 631, 629, nil, 395, nil, nil, 293, nil, nil, nil, - nil, 485, 384, nil, nil, 293, 212, 212, nil, nil, - 485, nil, 404, nil, nil, 212, nil, 13, 763, nil, - 763, 287, 13, 665, 404, nil, nil, nil, 680, nil, - nil, nil, 252, nil, 287, 566, 677, 763, 566, 591, - nil, 586, 593, nil, 586, nil, nil, nil, nil, nil, - 10, nil, 404, 10, nil, nil, nil, 395, 404, 212, - 212, nil, nil, nil, 12, nil, nil, 12, nil, 395, - nil, nil, 252, nil, nil, 10, nil, nil, 212, 660, - 660, nil, 252, nil, nil, 897, nil, nil, 117, 12, - nil, nil, nil, 212, nil, 902, nil, 395, 678, 679, - nil, nil, nil, 562, nil, 395, nil, 14, nil, nil, - nil, nil, 14, nil, nil, nil, nil, 918, 2, 944, - 743, nil, nil, nil, 747, nil, nil, 10, nil, 293, - nil, nil, nil, nil, 485, 562, 696, 14, 289, 289, - 293, 12, nil, 120, nil, 739, 10, 10, 282, 122, - nil, 869, 212, 872, nil, 874, nil, nil, 14, nil, - 12, 12, nil, nil, nil, nil, nil, nil, 10, 330, - 339, 339, 784, nil, 791, nil, nil, 788, 782, 703, - 705, nil, 12, nil, 708, nil, nil, nil, nil, nil, - nil, 562, nil, 566, nil, nil, 570, nil, nil, nil, - 562, 212, nil, nil, nil, nil, nil, nil, nil, 14, - nil, 287, nil, 212, nil, nil, nil, 14, 117, 10, - 287, nil, nil, 816, 10, nil, nil, 919, nil, 212, - nil, nil, nil, 12, 10, nil, 812, nil, 12, 814, - nil, nil, nil, nil, 13, 785, nil, 13, 12, nil, - 613, 790, nil, 212, nil, nil, 943, nil, nil, nil, - nil, nil, nil, 212, nil, nil, 212, nil, 293, 13, - nil, nil, nil, 10, nil, nil, nil, nil, nil, 411, - nil, 846, 854, nil, nil, 10, nil, 12, nil, 826, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 12, - 212, 212, 14, 14, nil, 212, nil, nil, nil, nil, - nil, nil, nil, 377, 378, nil, nil, 794, nil, 10, - 10, 13, nil, 10, nil, nil, nil, 14, nil, 10, - nil, nil, 293, 12, 12, nil, nil, 12, 282, nil, - 13, 13, nil, 12, 287, nil, nil, nil, 468, nil, - 660, 470, nil, nil, 877, 287, nil, nil, nil, nil, - nil, nil, 13, nil, 10, 917, nil, nil, nil, nil, - 10, 10, nil, nil, nil, nil, nil, nil, 12, nil, - nil, nil, nil, nil, 12, 12, nil, 14, nil, nil, - nil, 289, 14, nil, nil, nil, nil, nil, 282, nil, - nil, 936, nil, 282, 289, nil, nil, nil, 212, nil, - nil, nil, 404, 13, nil, nil, nil, nil, 13, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 13, nil, - nil, nil, 252, nil, nil, nil, nil, nil, 212, nil, - 10, nil, nil, nil, 562, nil, 10, nil, 10, 404, - nil, nil, nil, nil, 12, nil, nil, 395, nil, nil, - 12, nil, 12, nil, nil, nil, nil, 13, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 26, nil, 13, - 572, nil, 26, 823, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 26, nil, nil, nil, 26, - 26, 26, nil, nil, nil, nil, nil, 26, nil, nil, - nil, 212, nil, 13, 13, nil, nil, 13, nil, nil, - nil, nil, nil, 13, nil, nil, nil, nil, 26, 26, - nil, 596, nil, nil, 26, 26, nil, 605, 26, 606, - nil, nil, nil, nil, nil, 609, nil, 867, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 13, nil, - nil, nil, nil, nil, 13, 13, 630, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 26, - nil, 289, nil, 26, 26, 26, 26, 26, nil, nil, - 289, nil, nil, nil, nil, nil, 309, nil, nil, nil, - nil, 319, 319, nil, nil, 319, nil, 685, nil, nil, - nil, nil, nil, 212, 14, nil, nil, 14, nil, nil, - nil, nil, nil, nil, nil, 656, nil, nil, 658, nil, - nil, nil, nil, nil, 13, nil, nil, nil, nil, 14, - 13, nil, 13, nil, nil, nil, nil, nil, 690, nil, - 319, 319, 319, 319, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 316, nil, - nil, 733, 26, 26, 26, 26, 26, 26, nil, nil, - nil, nil, 26, 26, 26, 26, 26, nil, nil, nil, - nil, 14, 740, nil, nil, nil, nil, 26, nil, nil, - nil, nil, 726, nil, nil, nil, nil, nil, nil, nil, - 14, 14, nil, nil, 289, nil, nil, nil, nil, nil, - nil, 735, 736, nil, nil, 289, nil, nil, nil, nil, - nil, nil, 14, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 744, nil, nil, 26, 26, nil, nil, - 407, 408, 409, 410, nil, 26, nil, 26, nil, 35, - nil, nil, 26, nil, 35, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 14, nil, nil, nil, nil, 14, 35, - 286, 286, nil, nil, nil, nil, nil, nil, 14, 26, - 26, nil, nil, nil, 817, nil, nil, nil, nil, 792, - 35, 382, 386, nil, nil, nil, nil, nil, 26, nil, - nil, 327, 342, 342, 342, nil, nil, nil, nil, nil, - nil, nil, nil, 26, nil, nil, nil, 14, nil, 844, - nil, nil, nil, nil, nil, nil, nil, nil, 813, 14, - nil, nil, nil, 825, nil, nil, nil, nil, nil, 856, - 820, 35, nil, nil, nil, nil, 319, 319, nil, 35, - 451, nil, 453, nil, nil, nil, nil, 454, nil, nil, - nil, nil, nil, 14, 14, 531, nil, 14, nil, nil, - nil, nil, 26, 14, 848, 849, nil, nil, 851, 882, - 537, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 892, nil, nil, nil, nil, nil, nil, 339, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 14, nil, - nil, nil, nil, nil, 14, 14, nil, nil, nil, 875, - nil, 26, nil, nil, nil, 880, 881, nil, nil, nil, - nil, nil, nil, 26, 35, 35, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 26, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 35, - nil, nil, nil, nil, 26, nil, nil, 26, nil, nil, - nil, nil, nil, 26, nil, nil, nil, 558, nil, nil, - nil, nil, nil, 26, 14, nil, 26, nil, 309, 26, - 14, nil, 14, nil, nil, 934, nil, nil, nil, nil, - nil, 935, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 622, nil, nil, 35, - 26, 26, nil, 286, 35, 26, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 286, nil, nil, nil, - nil, 26, 587, nil, 316, nil, 590, nil, nil, nil, - nil, nil, nil, 319, nil, nil, nil, nil, 598, nil, - 26, 26, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 26, nil, nil, nil, nil, nil, 626, nil, - nil, nil, 587, nil, nil, 316, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 382, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 26, nil, - nil, nil, nil, 26, nil, nil, nil, nil, 26, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 26, nil, - nil, nil, nil, 698, nil, nil, nil, nil, 26, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 218, nil, nil, nil, 251, 251, 251, nil, nil, - nil, nil, 729, nil, nil, nil, nil, 26, nil, nil, - nil, 303, 304, 305, nil, 319, nil, nil, nil, 26, - nil, nil, nil, nil, nil, nil, 251, 251, 755, 757, - 758, nil, nil, 286, nil, nil, nil, nil, nil, nil, - nil, nil, 286, nil, nil, nil, nil, nil, nil, nil, - nil, 26, nil, 26, 26, nil, nil, 26, nil, nil, - nil, nil, nil, 26, nil, nil, 35, nil, nil, 35, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 35, nil, nil, nil, nil, nil, nil, 26, nil, - nil, nil, nil, nil, 26, 26, nil, nil, nil, nil, - 799, 801, 802, 793, nil, nil, nil, nil, 319, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 35, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 26, nil, nil, nil, nil, nil, nil, - nil, nil, 35, 35, nil, nil, 286, nil, nil, nil, - 381, 251, 389, 251, 26, 839, nil, 286, 406, nil, - 26, nil, 26, nil, 35, nil, nil, nil, nil, nil, - nil, nil, 218, 850, nil, 420, 421, 422, 423, 424, - 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, - 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, - 445, nil, nil, 884, 885, nil, nil, 887, 889, 251, - 891, 251, nil, nil, nil, 35, 251, nil, nil, nil, - 35, nil, 251, 251, nil, nil, nil, nil, nil, nil, - 35, 251, 907, 908, 910, 912, nil, 913, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 491, - nil, nil, nil, nil, 850, nil, nil, 587, nil, 35, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 35, nil, nil, nil, 822, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 945, - 947, 948, 949, nil, nil, nil, nil, nil, nil, nil, - 955, 957, 958, 959, nil, 35, 35, nil, nil, 35, - nil, nil, nil, nil, nil, 35, nil, nil, nil, nil, - nil, nil, nil, 963, nil, 964, 251, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 342, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 35, nil, nil, nil, nil, nil, 35, 35, 251, nil, - 406, 579, 389, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 251, nil, 251, nil, 251, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 597, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 251, - nil, nil, nil, nil, nil, nil, 35, nil, nil, 619, - 620, 621, 35, nil, 35, nil, nil, 251, nil, nil, - nil, 251, nil, nil, 251, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 251, 251, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 251, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 697, nil, 251, 700, nil, nil, 704, 706, nil, nil, - nil, 709, nil, nil, 711, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 251, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 251, nil, 795, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 704, 706, 709, nil, 797, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 251, nil, nil, 251, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 251, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 251, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 795, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 251, nil, nil, 251, nil, nil, 251 ] - -racc_goto_check = [ - 50, 50, 27, 14, 21, 61, 61, 3, 14, 4, - 58, 19, 113, 56, 56, 49, 21, 17, 43, 82, - 82, 59, 17, 5, 13, 13, 27, 91, 13, 85, - 83, 89, 8, 14, 33, 33, 23, 23, 29, 29, - 29, 114, 155, 44, 56, 56, 56, 17, 11, 11, - 20, 47, 64, 64, 14, 53, 53, 121, 117, 50, - 35, 54, 54, 122, 126, 14, 62, 62, 17, 111, - 34, 34, 34, 13, 13, 13, 13, 84, 84, 65, - 19, 65, 31, 31, 31, 117, 150, 60, 60, 89, - 8, 60, 119, 155, 15, 65, 36, 151, 152, 33, - 33, 110, 141, 108, 9, 14, 63, 141, 1, 63, - 39, 48, 48, 14, 45, 36, 36, 40, 6, 17, - 10, 111, 12, 16, 115, 26, 37, 17, 55, 57, - 150, 66, 67, 145, 117, 145, 145, 69, 70, 77, - 78, 79, 81, 86, 119, 88, 92, 93, 94, 95, - 96, 97, 98, 99, 100, 101, 102, 111, 103, 104, - 105, 106, 107, 112, 120, 59, 59, 123, 124, 125, - 127, 128, 129, 130, 132, 133, 111, 134, 135, 136, - 139, 140, 142, 143, 144, 117, 113, 146, 5, 113, - 147, 126, 148, 149, 109, 108, 50, 18, 14, 14, - 121, 9, 18, 21, 152, nil, 122, nil, nil, 9, - nil, nil, 17, 17, nil, 18, 29, 85, 110, 18, - 18, 18, 150, 14, 151, nil, 19, 18, 18, 18, - 113, nil, 119, 113, 117, nil, nil, 17, 20, 47, - 126, 62, nil, nil, nil, 36, 33, 33, 18, 18, - nil, nil, nil, nil, 18, 18, nil, 114, 18, 18, - 18, 18, 119, nil, nil, nil, 56, nil, nil, nil, - 20, nil, nil, 15, 15, 15, 27, nil, 21, 56, - nil, 15, nil, 14, 43, 29, 29, 19, 14, 13, - 13, 45, nil, 21, 29, 44, 115, 17, 115, 18, - 45, nil, 17, 18, 18, 18, 18, 18, 83, nil, - 33, 109, nil, 113, 109, nil, 113, nil, 113, 21, - 155, nil, 33, 145, nil, nil, 20, 19, nil, nil, - 31, nil, 62, 23, 62, 20, 113, 19, 31, 113, - 115, 113, 115, nil, nil, 21, nil, nil, 84, nil, - 33, 91, 89, 8, nil, nil, nil, 35, 33, 65, - 39, 35, 65, nil, 82, 39, 50, 40, 89, nil, - nil, nil, 40, nil, nil, 27, 113, nil, nil, nil, - nil, 5, nil, nil, 64, nil, 113, nil, 109, nil, - 109, nil, 18, 18, 18, 18, 18, 18, 64, nil, - 61, nil, 18, 18, 18, 18, 18, 60, 50, 117, - nil, nil, nil, nil, 11, nil, 61, 18, nil, nil, - nil, 53, nil, nil, 45, 115, nil, 54, nil, nil, - 27, 29, nil, nil, 62, nil, nil, nil, 34, 62, - nil, 109, 109, 34, 82, nil, nil, nil, 115, nil, - 61, 58, nil, 62, nil, nil, 56, nil, nil, nil, - nil, 43, 59, nil, nil, 56, 18, 18, nil, nil, - 43, nil, 50, nil, nil, 18, nil, 18, 109, nil, - 109, 18, 18, 59, 50, nil, nil, nil, 3, nil, - nil, nil, 29, nil, 18, 62, 13, 109, 62, 34, - nil, 65, 34, nil, 65, nil, nil, nil, nil, nil, - 14, nil, 50, 14, nil, nil, nil, 62, 50, 18, - 18, nil, nil, nil, 17, nil, nil, 17, nil, 62, - nil, nil, 29, nil, nil, 14, nil, nil, 18, 89, - 89, nil, 29, nil, nil, 82, nil, nil, 50, 17, - nil, nil, nil, 18, nil, 85, nil, 62, 89, 89, - nil, nil, nil, 27, nil, 62, nil, 22, nil, nil, - nil, nil, 22, nil, nil, nil, nil, 4, 2, 20, - 58, nil, nil, nil, 58, nil, nil, 14, nil, 56, - nil, nil, nil, nil, 43, 27, 11, 22, 22, 22, - 56, 17, nil, 53, nil, 43, 14, 14, 2, 54, - nil, 64, 18, 64, nil, 64, nil, nil, 22, nil, - 17, 17, nil, nil, nil, nil, nil, nil, 14, 22, - 22, 22, 3, nil, 49, nil, nil, 3, 13, 15, - 15, nil, 17, nil, 15, nil, nil, nil, nil, nil, - nil, 27, nil, 62, nil, nil, 62, nil, nil, nil, - 27, 18, nil, nil, nil, nil, nil, nil, nil, 22, - nil, 18, nil, 18, nil, nil, nil, 22, 50, 14, - 18, nil, nil, 61, 14, nil, nil, 19, nil, 18, - nil, nil, nil, 17, 14, nil, 59, nil, 17, 59, - nil, nil, nil, nil, 18, 89, nil, 18, 17, nil, - 33, 89, nil, 18, nil, nil, 64, nil, nil, nil, - nil, nil, nil, 18, nil, nil, 18, nil, 56, 18, - nil, nil, nil, 14, nil, nil, nil, nil, nil, 41, - nil, 13, 3, nil, nil, 14, nil, 17, nil, 14, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 17, - 18, 18, 22, 22, nil, 18, nil, nil, nil, nil, - nil, nil, nil, 2, 2, nil, nil, 15, nil, 14, - 14, 18, nil, 14, nil, nil, nil, 22, nil, 14, - nil, nil, 56, 17, 17, nil, nil, 17, 2, nil, - 18, 18, nil, 17, 18, nil, nil, nil, 41, nil, - 89, 41, nil, nil, 21, 18, nil, nil, nil, nil, - nil, nil, 18, nil, 14, 61, nil, nil, nil, nil, - 14, 14, nil, nil, nil, nil, nil, nil, 17, nil, - nil, nil, nil, nil, 17, 17, nil, 22, nil, nil, - nil, 22, 22, nil, nil, nil, nil, nil, 2, nil, - nil, 3, nil, 2, 22, nil, nil, nil, 18, nil, - nil, nil, 50, 18, nil, nil, nil, nil, 18, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 18, nil, - nil, nil, 29, nil, nil, nil, nil, nil, 18, nil, - 14, nil, nil, nil, 27, nil, 14, nil, 14, 50, - nil, nil, nil, nil, 17, nil, nil, 62, nil, nil, - 17, nil, 17, nil, nil, nil, nil, 18, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 38, nil, 18, - 41, nil, 38, 18, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 38, nil, nil, nil, 38, - 38, 38, nil, nil, nil, nil, nil, 38, nil, nil, - nil, 18, nil, 18, 18, nil, nil, 18, nil, nil, - nil, nil, nil, 18, nil, nil, nil, nil, 38, 38, - nil, 41, nil, nil, 38, 38, nil, 41, 38, 41, - nil, nil, nil, nil, nil, 41, nil, 18, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 18, nil, - nil, nil, nil, nil, 18, 18, 41, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 38, - nil, 22, nil, 38, 38, 38, 38, 38, nil, nil, - 22, nil, nil, nil, nil, nil, 25, nil, nil, nil, - nil, 25, 25, nil, nil, 25, nil, 41, nil, nil, - nil, nil, nil, 18, 22, nil, nil, 22, nil, nil, - nil, nil, nil, nil, nil, 2, nil, nil, 2, nil, - nil, nil, nil, nil, 18, nil, nil, nil, nil, 22, - 18, nil, 18, nil, nil, nil, nil, nil, 22, nil, - 25, 25, 25, 25, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 24, nil, - nil, 41, 38, 38, 38, 38, 38, 38, nil, nil, - nil, nil, 38, 38, 38, 38, 38, nil, nil, nil, - nil, 22, 41, nil, nil, nil, nil, 38, nil, nil, - nil, nil, 2, nil, nil, nil, nil, nil, nil, nil, - 22, 22, nil, nil, 22, nil, nil, nil, nil, nil, - nil, 2, 2, nil, nil, 22, nil, nil, nil, nil, - nil, nil, 22, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 2, nil, nil, 38, 38, nil, nil, - 25, 25, 25, 25, nil, 38, nil, 38, nil, 46, - nil, nil, 38, nil, 46, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 22, nil, nil, nil, nil, 22, 46, - 46, 46, nil, nil, nil, nil, nil, nil, 22, 38, - 38, nil, nil, nil, 41, nil, nil, nil, nil, 2, - 46, 24, 24, nil, nil, nil, nil, nil, 38, nil, - nil, 46, 46, 46, 46, nil, nil, nil, nil, nil, - nil, nil, nil, 38, nil, nil, nil, 22, nil, 41, - nil, nil, nil, nil, nil, nil, nil, nil, 2, 22, - nil, nil, nil, 22, nil, nil, nil, nil, nil, 41, - 2, 46, nil, nil, nil, nil, 25, 25, nil, 46, - 24, nil, 24, nil, nil, nil, nil, 24, nil, nil, - nil, nil, nil, 22, 22, 25, nil, 22, nil, nil, - nil, nil, 38, 22, 2, 2, nil, nil, 2, 41, - 25, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 41, nil, nil, nil, nil, nil, nil, 22, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 22, nil, - nil, nil, nil, nil, 22, 22, nil, nil, nil, 2, - nil, 38, nil, nil, nil, 2, 2, nil, nil, nil, - nil, nil, nil, 38, 46, 46, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 38, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 46, - nil, nil, nil, nil, 38, nil, nil, 38, nil, nil, - nil, nil, nil, 38, nil, nil, nil, 24, nil, nil, - nil, nil, nil, 38, 22, nil, 38, nil, 25, 38, - 22, nil, 22, nil, nil, 2, nil, nil, nil, nil, - nil, 2, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 25, nil, nil, 46, - 38, 38, nil, 46, 46, 38, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, 46, nil, nil, nil, - nil, 38, 24, nil, 24, nil, 24, nil, nil, nil, - nil, nil, nil, 25, nil, nil, nil, nil, 24, nil, - 38, 38, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 38, nil, nil, nil, nil, nil, 24, nil, - nil, nil, 24, nil, nil, 24, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 24, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 38, nil, - nil, nil, nil, 38, nil, nil, nil, nil, 38, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 38, nil, - nil, nil, nil, 24, nil, nil, nil, nil, 38, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 28, nil, nil, nil, 28, 28, 28, nil, nil, - nil, nil, 24, nil, nil, nil, nil, 38, nil, nil, - nil, 28, 28, 28, nil, 25, nil, nil, nil, 38, - nil, nil, nil, nil, nil, nil, 28, 28, 116, 116, - 116, nil, nil, 46, nil, nil, nil, nil, nil, nil, - nil, nil, 46, nil, nil, nil, nil, nil, nil, nil, - nil, 38, nil, 38, 38, nil, nil, 38, nil, nil, - nil, nil, nil, 38, nil, nil, 46, nil, nil, 46, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 46, nil, nil, nil, nil, nil, nil, 38, nil, - nil, nil, nil, nil, 38, 38, nil, nil, nil, nil, - 116, 116, 116, 24, nil, nil, nil, nil, 25, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 46, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 38, nil, nil, nil, nil, nil, nil, - nil, nil, 46, 46, nil, nil, 46, nil, nil, nil, - 28, 28, 28, 28, 38, 24, nil, 46, 28, nil, - 38, nil, 38, nil, 46, nil, nil, nil, nil, nil, - nil, nil, 28, 24, nil, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, - 28, nil, nil, 116, 116, nil, nil, 116, 116, 28, - 116, 28, nil, nil, nil, 46, 28, nil, nil, nil, - 46, nil, 28, 28, nil, nil, nil, nil, nil, nil, - 46, 28, 116, 116, 116, 116, nil, 116, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 28, - nil, nil, nil, nil, 24, nil, nil, 24, nil, 46, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 46, nil, nil, nil, 46, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 116, - 116, 116, 116, nil, nil, nil, nil, nil, nil, nil, - 116, 116, 116, 116, nil, 46, 46, nil, nil, 46, - nil, nil, nil, nil, nil, 46, nil, nil, nil, nil, - nil, nil, nil, 116, nil, 116, 28, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 46, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 46, nil, nil, nil, nil, nil, 46, 46, 28, nil, - 28, 28, 28, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 28, nil, 28, nil, 28, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, 28, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 28, - nil, nil, nil, nil, nil, nil, 46, nil, nil, 28, - 28, 28, 46, nil, 46, nil, nil, 28, nil, nil, - nil, 28, nil, nil, 28, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 28, 28, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 28, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - 28, nil, 28, 28, nil, nil, 28, 28, nil, nil, - nil, 28, nil, nil, 28, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 28, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 28, nil, 28, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, 28, 28, 28, nil, 28, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, 28, nil, nil, 28, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, 28, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, 28, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, 28, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, 28, nil, nil, 28, nil, nil, 28 ] - -racc_goto_pointer = [ - nil, 108, 578, -44, -298, -470, -505, nil, 29, 99, - 117, 42, 115, -33, 3, 76, 61, 17, 197, -189, - -340, -9, 567, -161, 1074, 1004, 13, -15, 1633, 16, - nil, 60, nil, -167, 44, -208, -350, -333, 937, 80, - 87, 530, nil, -13, 11, -183, 1219, -285, 48, -50, - -6, nil, nil, 49, 55, -248, -18, 76, -43, -32, - -224, -48, 40, -349, -201, -369, -333, -138, nil, -327, - -464, nil, nil, nil, nil, nil, nil, 74, 86, 86, - nil, -176, -301, -626, -434, -296, 81, nil, -195, 28, - nil, -506, 81, -207, -161, 93, 91, -508, 92, -509, - -366, -697, -371, -521, -184, -193, -373, -629, -738, -453, - -546, -774, -419, -570, -541, -458, 1053, -448, nil, -490, - -559, -666, -660, -339, -464, -149, -442, 150, -579, -579, - -75, nil, -99, -99, -674, -316, -448, nil, nil, 107, - 106, 24, 103, 103, -177, -225, 106, -351, -350, -561, - -668, -659, -702, nil, nil, -408 ] - -racc_goto_default = [ - nil, nil, 307, nil, nil, 773, nil, 3, nil, 4, - 326, nil, nil, nil, 216, 16, 11, 217, 302, nil, - nil, 525, 215, nil, 257, 15, nil, 412, 19, 20, - 21, 391, 25, 616, nil, nil, nil, nil, 292, 29, - nil, nil, 31, 34, 33, nil, 213, 337, nil, 119, - 397, 118, 121, 71, 72, nil, 42, nil, 624, 253, - nil, 254, 402, 567, nil, 255, nil, nil, 270, nil, - nil, 43, 44, 45, 46, 47, 48, 49, nil, 271, - 55, nil, nil, nil, nil, nil, nil, 63, nil, 508, - 64, nil, nil, nil, nil, nil, nil, nil, nil, nil, - nil, nil, nil, nil, nil, nil, nil, nil, 765, 646, - nil, 766, nil, 635, nil, 637, nil, 833, 581, nil, - nil, nil, 643, nil, nil, nil, 683, nil, nil, nil, - nil, 401, nil, nil, nil, nil, nil, 70, 73, 74, - nil, nil, nil, nil, nil, 544, nil, nil, nil, 636, - 648, 649, 725, 652, 655, 262 ] - -racc_reduce_table = [ - 0, 0, :racc_error, - 1, 139, :_reduce_none, - 4, 141, :_reduce_2, - 2, 140, :_reduce_3, - 0, 145, :_reduce_4, - 1, 145, :_reduce_5, - 3, 145, :_reduce_6, - 2, 145, :_reduce_7, - 0, 164, :_reduce_8, - 4, 147, :_reduce_9, - 3, 147, :_reduce_10, - 3, 147, :_reduce_11, - 3, 147, :_reduce_12, - 2, 147, :_reduce_13, - 3, 147, :_reduce_14, - 3, 147, :_reduce_15, - 3, 147, :_reduce_16, - 3, 147, :_reduce_17, - 3, 147, :_reduce_18, - 4, 147, :_reduce_19, - 4, 147, :_reduce_20, - 3, 147, :_reduce_21, - 3, 147, :_reduce_22, - 3, 147, :_reduce_23, - 6, 147, :_reduce_24, - 5, 147, :_reduce_25, - 5, 147, :_reduce_26, - 5, 147, :_reduce_27, - 3, 147, :_reduce_28, - 3, 147, :_reduce_29, - 3, 147, :_reduce_30, - 3, 147, :_reduce_31, - 1, 147, :_reduce_none, - 1, 163, :_reduce_none, - 3, 163, :_reduce_34, - 3, 163, :_reduce_35, - 3, 163, :_reduce_36, - 2, 163, :_reduce_37, - 1, 163, :_reduce_none, - 1, 151, :_reduce_none, - 1, 153, :_reduce_none, - 1, 153, :_reduce_none, - 2, 153, :_reduce_42, - 2, 153, :_reduce_43, - 2, 153, :_reduce_44, - 1, 168, :_reduce_none, - 4, 168, :_reduce_46, - 4, 168, :_reduce_47, - 0, 175, :_reduce_48, - 5, 173, :_reduce_49, - 2, 167, :_reduce_50, - 3, 167, :_reduce_51, - 4, 167, :_reduce_52, - 5, 167, :_reduce_53, - 4, 167, :_reduce_54, - 5, 167, :_reduce_55, - 2, 167, :_reduce_56, - 2, 167, :_reduce_57, - 1, 154, :_reduce_58, - 3, 154, :_reduce_59, - 1, 178, :_reduce_60, - 3, 178, :_reduce_61, - 1, 177, :_reduce_none, - 2, 177, :_reduce_63, - 3, 177, :_reduce_64, - 5, 177, :_reduce_65, - 2, 177, :_reduce_66, - 4, 177, :_reduce_67, - 2, 177, :_reduce_68, - 4, 177, :_reduce_69, - 1, 177, :_reduce_70, - 3, 177, :_reduce_71, - 1, 181, :_reduce_none, - 3, 181, :_reduce_73, - 2, 180, :_reduce_74, - 3, 180, :_reduce_75, - 1, 183, :_reduce_76, - 3, 183, :_reduce_77, - 1, 182, :_reduce_78, - 4, 182, :_reduce_79, - 3, 182, :_reduce_80, - 3, 182, :_reduce_81, - 3, 182, :_reduce_82, - 3, 182, :_reduce_83, - 2, 182, :_reduce_84, - 1, 182, :_reduce_85, - 1, 152, :_reduce_86, - 4, 152, :_reduce_87, - 3, 152, :_reduce_88, - 3, 152, :_reduce_89, - 3, 152, :_reduce_90, - 3, 152, :_reduce_91, - 2, 152, :_reduce_92, - 1, 152, :_reduce_93, - 1, 185, :_reduce_94, - 1, 185, :_reduce_none, - 2, 186, :_reduce_96, - 1, 186, :_reduce_97, - 3, 186, :_reduce_98, - 1, 187, :_reduce_none, - 1, 187, :_reduce_none, - 1, 187, :_reduce_none, - 1, 187, :_reduce_none, - 1, 187, :_reduce_none, - 1, 190, :_reduce_104, - 1, 190, :_reduce_none, - 1, 149, :_reduce_none, - 1, 149, :_reduce_none, - 1, 150, :_reduce_108, - 0, 193, :_reduce_109, - 4, 150, :_reduce_110, - 1, 188, :_reduce_none, - 1, 188, :_reduce_none, - 1, 188, :_reduce_none, - 1, 188, :_reduce_none, - 1, 188, :_reduce_none, - 1, 188, :_reduce_none, - 1, 188, :_reduce_none, - 1, 188, :_reduce_none, - 1, 188, :_reduce_none, - 1, 188, :_reduce_none, - 1, 188, :_reduce_none, - 1, 188, :_reduce_none, - 1, 188, :_reduce_none, - 1, 188, :_reduce_none, - 1, 188, :_reduce_none, - 1, 188, :_reduce_none, - 1, 188, :_reduce_none, - 1, 188, :_reduce_none, - 1, 188, :_reduce_none, - 1, 188, :_reduce_none, - 1, 188, :_reduce_none, - 1, 188, :_reduce_none, - 1, 188, :_reduce_none, - 1, 188, :_reduce_none, - 1, 188, :_reduce_none, - 1, 188, :_reduce_none, - 1, 188, :_reduce_none, - 1, 188, :_reduce_none, - 1, 188, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 1, 189, :_reduce_none, - 3, 166, :_reduce_181, - 5, 166, :_reduce_182, - 3, 166, :_reduce_183, - 5, 166, :_reduce_184, - 6, 166, :_reduce_185, - 5, 166, :_reduce_186, - 5, 166, :_reduce_187, - 5, 166, :_reduce_188, - 5, 166, :_reduce_189, - 4, 166, :_reduce_190, - 3, 166, :_reduce_191, - 3, 166, :_reduce_192, - 3, 166, :_reduce_193, - 3, 166, :_reduce_194, - 3, 166, :_reduce_195, - 3, 166, :_reduce_196, - 3, 166, :_reduce_197, - 3, 166, :_reduce_198, - 3, 166, :_reduce_199, - 4, 166, :_reduce_200, - 4, 166, :_reduce_201, - 2, 166, :_reduce_202, - 2, 166, :_reduce_203, - 3, 166, :_reduce_204, - 3, 166, :_reduce_205, - 3, 166, :_reduce_206, - 3, 166, :_reduce_207, - 3, 166, :_reduce_208, - 3, 166, :_reduce_209, - 3, 166, :_reduce_210, - 3, 166, :_reduce_211, - 3, 166, :_reduce_212, - 3, 166, :_reduce_213, - 3, 166, :_reduce_214, - 3, 166, :_reduce_215, - 3, 166, :_reduce_216, - 2, 166, :_reduce_217, - 2, 166, :_reduce_218, - 3, 166, :_reduce_219, - 3, 166, :_reduce_220, - 3, 166, :_reduce_221, - 3, 166, :_reduce_222, - 3, 166, :_reduce_223, - 6, 166, :_reduce_224, - 1, 166, :_reduce_none, - 1, 162, :_reduce_none, - 1, 195, :_reduce_none, - 2, 195, :_reduce_none, - 4, 195, :_reduce_229, - 2, 195, :_reduce_230, - 3, 200, :_reduce_231, - 0, 201, :_reduce_232, - 1, 201, :_reduce_none, - 0, 157, :_reduce_234, - 1, 157, :_reduce_none, - 1, 169, :_reduce_236, - 2, 169, :_reduce_237, - 2, 169, :_reduce_238, - 4, 169, :_reduce_239, - 6, 169, :_reduce_240, - 1, 169, :_reduce_241, - 4, 204, :_reduce_242, - 3, 204, :_reduce_243, - 2, 204, :_reduce_244, - 4, 204, :_reduce_245, - 6, 204, :_reduce_246, - 1, 204, :_reduce_247, - 0, 206, :_reduce_248, - 2, 172, :_reduce_249, - 1, 205, :_reduce_250, - 0, 207, :_reduce_251, - 3, 205, :_reduce_252, - 0, 208, :_reduce_253, - 4, 205, :_reduce_254, - 2, 203, :_reduce_255, - 2, 202, :_reduce_256, - 1, 202, :_reduce_257, - 0, 202, :_reduce_258, - 1, 197, :_reduce_259, - 2, 197, :_reduce_260, - 3, 197, :_reduce_261, - 4, 197, :_reduce_262, - 3, 161, :_reduce_263, - 4, 161, :_reduce_264, - 2, 161, :_reduce_265, - 1, 194, :_reduce_none, - 1, 194, :_reduce_none, - 1, 194, :_reduce_none, - 1, 194, :_reduce_none, - 1, 194, :_reduce_none, - 1, 194, :_reduce_none, - 1, 194, :_reduce_none, - 1, 194, :_reduce_none, - 1, 194, :_reduce_274, - 3, 194, :_reduce_275, - 0, 232, :_reduce_276, - 4, 194, :_reduce_277, - 3, 194, :_reduce_278, - 3, 194, :_reduce_279, - 2, 194, :_reduce_280, - 3, 194, :_reduce_281, - 3, 194, :_reduce_282, - 1, 194, :_reduce_283, - 4, 194, :_reduce_284, - 3, 194, :_reduce_285, - 1, 194, :_reduce_286, - 5, 194, :_reduce_287, - 4, 194, :_reduce_288, - 3, 194, :_reduce_289, - 2, 194, :_reduce_290, - 1, 194, :_reduce_none, - 2, 194, :_reduce_292, - 0, 233, :_reduce_293, - 3, 194, :_reduce_294, - 6, 194, :_reduce_295, - 6, 194, :_reduce_296, - 0, 234, :_reduce_297, - 0, 235, :_reduce_298, - 7, 194, :_reduce_299, - 0, 236, :_reduce_300, - 0, 237, :_reduce_301, - 7, 194, :_reduce_302, - 5, 194, :_reduce_303, - 4, 194, :_reduce_304, - 0, 238, :_reduce_305, - 0, 239, :_reduce_306, - 9, 194, :_reduce_307, - 0, 240, :_reduce_308, - 6, 194, :_reduce_309, - 0, 241, :_reduce_310, - 7, 194, :_reduce_311, - 0, 242, :_reduce_312, - 5, 194, :_reduce_313, - 0, 243, :_reduce_314, - 6, 194, :_reduce_315, - 0, 244, :_reduce_316, - 0, 245, :_reduce_317, - 9, 194, :_reduce_318, - 1, 194, :_reduce_319, - 1, 194, :_reduce_320, - 1, 194, :_reduce_321, - 1, 194, :_reduce_322, - 1, 156, :_reduce_none, - 1, 225, :_reduce_324, - 1, 228, :_reduce_325, - 1, 220, :_reduce_none, - 1, 220, :_reduce_none, - 2, 220, :_reduce_328, - 1, 222, :_reduce_none, - 1, 222, :_reduce_none, - 1, 221, :_reduce_none, - 5, 221, :_reduce_332, - 1, 143, :_reduce_none, - 2, 143, :_reduce_334, - 1, 224, :_reduce_none, - 1, 224, :_reduce_none, - 1, 246, :_reduce_none, - 3, 246, :_reduce_338, - 1, 249, :_reduce_339, - 3, 249, :_reduce_340, - 1, 248, :_reduce_none, - 4, 248, :_reduce_342, - 6, 248, :_reduce_343, - 3, 248, :_reduce_344, - 5, 248, :_reduce_345, - 2, 248, :_reduce_346, - 4, 248, :_reduce_347, - 1, 248, :_reduce_348, - 3, 248, :_reduce_349, - 6, 250, :_reduce_350, - 8, 250, :_reduce_351, - 4, 250, :_reduce_352, - 6, 250, :_reduce_353, - 4, 250, :_reduce_354, - 2, 250, :_reduce_none, - 6, 250, :_reduce_356, - 2, 250, :_reduce_357, - 4, 250, :_reduce_358, - 6, 250, :_reduce_359, - 2, 250, :_reduce_360, - 4, 250, :_reduce_361, - 2, 250, :_reduce_362, - 4, 250, :_reduce_363, - 1, 250, :_reduce_364, - 0, 174, :_reduce_365, - 1, 174, :_reduce_366, - 3, 256, :_reduce_367, - 1, 256, :_reduce_368, - 4, 256, :_reduce_369, - 0, 257, :_reduce_370, - 2, 257, :_reduce_371, - 1, 258, :_reduce_372, - 3, 258, :_reduce_373, - 1, 259, :_reduce_374, - 1, 259, :_reduce_none, - 0, 263, :_reduce_376, - 3, 219, :_reduce_377, - 4, 261, :_reduce_378, - 2, 261, :_reduce_379, - 0, 266, :_reduce_380, - 4, 262, :_reduce_381, - 0, 267, :_reduce_382, - 4, 262, :_reduce_383, - 0, 268, :_reduce_384, - 5, 265, :_reduce_385, - 2, 170, :_reduce_386, - 4, 170, :_reduce_387, - 4, 170, :_reduce_388, - 2, 218, :_reduce_389, - 4, 218, :_reduce_390, - 4, 218, :_reduce_391, - 3, 218, :_reduce_392, - 3, 218, :_reduce_393, - 3, 218, :_reduce_394, - 2, 218, :_reduce_395, - 1, 218, :_reduce_396, - 4, 218, :_reduce_397, - 0, 270, :_reduce_398, - 5, 217, :_reduce_399, - 0, 271, :_reduce_400, - 5, 217, :_reduce_401, - 5, 223, :_reduce_402, - 1, 272, :_reduce_403, - 1, 272, :_reduce_none, - 6, 142, :_reduce_405, - 0, 142, :_reduce_406, - 1, 273, :_reduce_407, - 1, 273, :_reduce_none, - 1, 273, :_reduce_none, - 2, 274, :_reduce_410, - 1, 274, :_reduce_none, - 2, 144, :_reduce_412, - 1, 144, :_reduce_none, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 209, :_reduce_none, - 1, 210, :_reduce_417, - 1, 276, :_reduce_418, - 2, 276, :_reduce_419, - 3, 277, :_reduce_420, - 1, 277, :_reduce_421, - 1, 277, :_reduce_422, - 3, 211, :_reduce_423, - 4, 212, :_reduce_424, - 3, 213, :_reduce_425, - 0, 281, :_reduce_426, - 3, 281, :_reduce_427, - 1, 282, :_reduce_428, - 2, 282, :_reduce_429, - 3, 214, :_reduce_430, - 0, 284, :_reduce_431, - 3, 284, :_reduce_432, - 0, 278, :_reduce_433, - 2, 278, :_reduce_434, - 0, 279, :_reduce_435, - 2, 279, :_reduce_436, - 0, 280, :_reduce_437, - 2, 280, :_reduce_438, - 1, 283, :_reduce_439, - 2, 283, :_reduce_440, - 0, 286, :_reduce_441, - 4, 283, :_reduce_442, - 1, 285, :_reduce_443, - 1, 285, :_reduce_444, - 1, 285, :_reduce_445, - 1, 285, :_reduce_none, - 1, 191, :_reduce_447, - 3, 192, :_reduce_448, - 1, 275, :_reduce_449, - 1, 275, :_reduce_450, - 2, 275, :_reduce_451, - 2, 275, :_reduce_452, - 1, 184, :_reduce_453, - 1, 184, :_reduce_454, - 1, 184, :_reduce_455, - 1, 184, :_reduce_456, - 1, 184, :_reduce_457, - 1, 184, :_reduce_458, - 1, 184, :_reduce_459, - 1, 184, :_reduce_460, - 1, 184, :_reduce_461, - 1, 184, :_reduce_462, - 1, 184, :_reduce_463, - 1, 184, :_reduce_464, - 1, 215, :_reduce_465, - 1, 155, :_reduce_466, - 1, 160, :_reduce_467, - 1, 160, :_reduce_468, - 1, 226, :_reduce_469, - 3, 226, :_reduce_470, - 2, 226, :_reduce_471, - 3, 229, :_reduce_472, - 2, 229, :_reduce_473, - 6, 264, :_reduce_474, - 8, 264, :_reduce_475, - 4, 264, :_reduce_476, - 6, 264, :_reduce_477, - 4, 264, :_reduce_478, - 6, 264, :_reduce_479, - 2, 264, :_reduce_480, - 4, 264, :_reduce_481, - 6, 264, :_reduce_482, - 2, 264, :_reduce_483, - 4, 264, :_reduce_484, - 2, 264, :_reduce_485, - 4, 264, :_reduce_486, - 1, 264, :_reduce_487, - 0, 264, :_reduce_488, - 1, 260, :_reduce_489, - 1, 260, :_reduce_490, - 1, 260, :_reduce_491, - 1, 260, :_reduce_492, - 1, 247, :_reduce_none, - 1, 247, :_reduce_494, - 3, 247, :_reduce_495, - 2, 247, :_reduce_496, - 1, 288, :_reduce_none, - 3, 288, :_reduce_498, - 1, 251, :_reduce_499, - 3, 251, :_reduce_500, - 3, 289, :_reduce_501, - 3, 290, :_reduce_502, - 1, 252, :_reduce_503, - 3, 252, :_reduce_504, - 1, 287, :_reduce_505, - 3, 287, :_reduce_506, - 1, 291, :_reduce_none, - 1, 291, :_reduce_none, - 2, 253, :_reduce_509, - 1, 253, :_reduce_510, - 1, 292, :_reduce_none, - 1, 292, :_reduce_none, - 2, 255, :_reduce_513, - 2, 254, :_reduce_514, - 0, 254, :_reduce_515, - 1, 230, :_reduce_none, - 3, 230, :_reduce_517, - 0, 216, :_reduce_518, - 2, 216, :_reduce_none, - 1, 199, :_reduce_520, - 3, 199, :_reduce_521, - 3, 293, :_reduce_522, - 2, 293, :_reduce_523, - 1, 176, :_reduce_none, - 1, 176, :_reduce_none, - 1, 176, :_reduce_none, - 1, 171, :_reduce_none, - 1, 171, :_reduce_none, - 1, 171, :_reduce_none, - 1, 171, :_reduce_none, - 1, 269, :_reduce_none, - 1, 269, :_reduce_none, - 1, 269, :_reduce_none, - 1, 231, :_reduce_none, - 1, 231, :_reduce_none, - 1, 159, :_reduce_536, - 1, 159, :_reduce_537, - 0, 146, :_reduce_none, - 1, 146, :_reduce_none, - 0, 165, :_reduce_none, - 1, 165, :_reduce_none, - 2, 179, :_reduce_542, - 2, 158, :_reduce_543, - 0, 198, :_reduce_none, - 1, 198, :_reduce_none, - 1, 198, :_reduce_none, - 1, 227, :_reduce_547, - 1, 227, :_reduce_none, - 1, 148, :_reduce_none, - 2, 148, :_reduce_none, - 0, 196, :_reduce_551 ] - -racc_reduce_n = 552 - -racc_shift_n = 965 - -racc_token_table = { - false => 0, - :error => 1, - :kCLASS => 2, - :kMODULE => 3, - :kDEF => 4, - :kUNDEF => 5, - :kBEGIN => 6, - :kRESCUE => 7, - :kENSURE => 8, - :kEND => 9, - :kIF => 10, - :kUNLESS => 11, - :kTHEN => 12, - :kELSIF => 13, - :kELSE => 14, - :kCASE => 15, - :kWHEN => 16, - :kWHILE => 17, - :kUNTIL => 18, - :kFOR => 19, - :kBREAK => 20, - :kNEXT => 21, - :kREDO => 22, - :kRETRY => 23, - :kIN => 24, - :kDO => 25, - :kDO_COND => 26, - :kDO_BLOCK => 27, - :kDO_LAMBDA => 28, - :kRETURN => 29, - :kYIELD => 30, - :kSUPER => 31, - :kSELF => 32, - :kNIL => 33, - :kTRUE => 34, - :kFALSE => 35, - :kAND => 36, - :kOR => 37, - :kNOT => 38, - :kIF_MOD => 39, - :kUNLESS_MOD => 40, - :kWHILE_MOD => 41, - :kUNTIL_MOD => 42, - :kRESCUE_MOD => 43, - :kALIAS => 44, - :kDEFINED => 45, - :klBEGIN => 46, - :klEND => 47, - :k__LINE__ => 48, - :k__FILE__ => 49, - :k__ENCODING__ => 50, - :tIDENTIFIER => 51, - :tFID => 52, - :tGVAR => 53, - :tIVAR => 54, - :tCONSTANT => 55, - :tLABEL => 56, - :tCVAR => 57, - :tNTH_REF => 58, - :tBACK_REF => 59, - :tSTRING_CONTENT => 60, - :tINTEGER => 61, - :tFLOAT => 62, - :tUPLUS => 63, - :tUMINUS => 64, - :tUNARY_NUM => 65, - :tPOW => 66, - :tCMP => 67, - :tEQ => 68, - :tEQQ => 69, - :tNEQ => 70, - :tGEQ => 71, - :tLEQ => 72, - :tANDOP => 73, - :tOROP => 74, - :tMATCH => 75, - :tNMATCH => 76, - :tDOT => 77, - :tDOT2 => 78, - :tDOT3 => 79, - :tAREF => 80, - :tASET => 81, - :tLSHFT => 82, - :tRSHFT => 83, - :tCOLON2 => 84, - :tCOLON3 => 85, - :tOP_ASGN => 86, - :tASSOC => 87, - :tLPAREN => 88, - :tLPAREN2 => 89, - :tRPAREN => 90, - :tLPAREN_ARG => 91, - :tLBRACK => 92, - :tLBRACK2 => 93, - :tRBRACK => 94, - :tLBRACE => 95, - :tLBRACE_ARG => 96, - :tSTAR => 97, - :tSTAR2 => 98, - :tAMPER => 99, - :tAMPER2 => 100, - :tTILDE => 101, - :tPERCENT => 102, - :tDIVIDE => 103, - :tPLUS => 104, - :tMINUS => 105, - :tLT => 106, - :tGT => 107, - :tPIPE => 108, - :tBANG => 109, - :tCARET => 110, - :tLCURLY => 111, - :tRCURLY => 112, - :tBACK_REF2 => 113, - :tSYMBEG => 114, - :tSTRING_BEG => 115, - :tXSTRING_BEG => 116, - :tREGEXP_BEG => 117, - :tREGEXP_OPT => 118, - :tWORDS_BEG => 119, - :tQWORDS_BEG => 120, - :tSTRING_DBEG => 121, - :tSTRING_DVAR => 122, - :tSTRING_END => 123, - :tSTRING => 124, - :tSYMBOL => 125, - :tNL => 126, - :tEH => 127, - :tCOLON => 128, - :tCOMMA => 129, - :tSPACE => 130, - :tSEMI => 131, - :tLAMBDA => 132, - :tLAMBEG => 133, - :tCHARACTER => 134, - :tANDDOT => 135, - :tEQL => 136, - :tLOWEST => 137 } - -racc_nt_base = 138 - -racc_use_result_var = true - -Racc_arg = [ - racc_action_table, - racc_action_check, - racc_action_default, - racc_action_pointer, - racc_goto_table, - racc_goto_check, - racc_goto_default, - racc_goto_pointer, - racc_nt_base, - racc_reduce_table, - racc_token_table, - racc_shift_n, - racc_reduce_n, - racc_use_result_var ] -Ractor.make_shareable(Racc_arg) if defined?(Ractor) - -Racc_token_to_s_table = [ - "$end", - "error", - "kCLASS", - "kMODULE", - "kDEF", - "kUNDEF", - "kBEGIN", - "kRESCUE", - "kENSURE", - "kEND", - "kIF", - "kUNLESS", - "kTHEN", - "kELSIF", - "kELSE", - "kCASE", - "kWHEN", - "kWHILE", - "kUNTIL", - "kFOR", - "kBREAK", - "kNEXT", - "kREDO", - "kRETRY", - "kIN", - "kDO", - "kDO_COND", - "kDO_BLOCK", - "kDO_LAMBDA", - "kRETURN", - "kYIELD", - "kSUPER", - "kSELF", - "kNIL", - "kTRUE", - "kFALSE", - "kAND", - "kOR", - "kNOT", - "kIF_MOD", - "kUNLESS_MOD", - "kWHILE_MOD", - "kUNTIL_MOD", - "kRESCUE_MOD", - "kALIAS", - "kDEFINED", - "klBEGIN", - "klEND", - "k__LINE__", - "k__FILE__", - "k__ENCODING__", - "tIDENTIFIER", - "tFID", - "tGVAR", - "tIVAR", - "tCONSTANT", - "tLABEL", - "tCVAR", - "tNTH_REF", - "tBACK_REF", - "tSTRING_CONTENT", - "tINTEGER", - "tFLOAT", - "tUPLUS", - "tUMINUS", - "tUNARY_NUM", - "tPOW", - "tCMP", - "tEQ", - "tEQQ", - "tNEQ", - "tGEQ", - "tLEQ", - "tANDOP", - "tOROP", - "tMATCH", - "tNMATCH", - "tDOT", - "tDOT2", - "tDOT3", - "tAREF", - "tASET", - "tLSHFT", - "tRSHFT", - "tCOLON2", - "tCOLON3", - "tOP_ASGN", - "tASSOC", - "tLPAREN", - "tLPAREN2", - "tRPAREN", - "tLPAREN_ARG", - "tLBRACK", - "tLBRACK2", - "tRBRACK", - "tLBRACE", - "tLBRACE_ARG", - "tSTAR", - "tSTAR2", - "tAMPER", - "tAMPER2", - "tTILDE", - "tPERCENT", - "tDIVIDE", - "tPLUS", - "tMINUS", - "tLT", - "tGT", - "tPIPE", - "tBANG", - "tCARET", - "tLCURLY", - "tRCURLY", - "tBACK_REF2", - "tSYMBEG", - "tSTRING_BEG", - "tXSTRING_BEG", - "tREGEXP_BEG", - "tREGEXP_OPT", - "tWORDS_BEG", - "tQWORDS_BEG", - "tSTRING_DBEG", - "tSTRING_DVAR", - "tSTRING_END", - "tSTRING", - "tSYMBOL", - "tNL", - "tEH", - "tCOLON", - "tCOMMA", - "tSPACE", - "tSEMI", - "tLAMBDA", - "tLAMBEG", - "tCHARACTER", - "tANDDOT", - "tEQL", - "tLOWEST", - "$start", - "program", - "compstmt", - "bodystmt", - "opt_rescue", - "opt_else", - "opt_ensure", - "stmts", - "opt_terms", - "stmt", - "terms", - "fitem", - "undef_list", - "expr_value", - "lhs", - "command_call", - "mlhs", - "var_lhs", - "primary_value", - "opt_call_args", - "rbracket", - "call_op", - "backref", - "mrhs", - "arg_value", - "expr", - "@1", - "opt_nl", - "arg", - "command", - "block_command", - "call_args", - "block_call", - "operation2", - "command_args", - "cmd_brace_block", - "opt_block_param", - "@2", - "operation", - "mlhs_basic", - "mlhs_inner", - "rparen", - "mlhs_head", - "mlhs_item", - "mlhs_node", - "mlhs_post", - "variable", - "cname", - "cpath", - "fname", - "op", - "reswords", - "fsym", - "symbol", - "dsym", - "@3", - "primary", - "aref_args", - "none", - "args", - "trailer", - "assocs", - "paren_args", - "opt_paren_args", - "opt_block_arg", - "block_arg", - "call_args2", - "open_args", - "@4", - "@5", - "@6", - "literal", - "strings", - "xstring", - "regexp", - "words", - "qwords", - "var_ref", - "assoc_list", - "brace_block", - "method_call", - "lambda", - "then", - "if_tail", - "do", - "case_body", - "for_var", - "k_class", - "superclass", - "term", - "k_module", - "f_arglist", - "singleton", - "dot_or_colon", - "@7", - "@8", - "@9", - "@10", - "@11", - "@12", - "@13", - "@14", - "@15", - "@16", - "@17", - "@18", - "@19", - "@20", - "f_marg", - "f_norm_arg", - "f_margs", - "f_marg_list", - "block_param", - "f_arg", - "f_block_optarg", - "f_rest_arg", - "opt_f_block_arg", - "f_block_arg", - "block_param_def", - "opt_bv_decl", - "bv_decls", - "bvar", - "f_bad_arg", - "f_larglist", - "lambda_body", - "@21", - "f_args", - "do_block", - "@22", - "@23", - "@24", - "operation3", - "@25", - "@26", - "cases", - "exc_list", - "exc_var", - "numeric", - "string", - "string1", - "string_contents", - "xstring_contents", - "regexp_contents", - "word_list", - "word", - "string_content", - "qword_list", - "string_dvar", - "@27", - "f_optarg", - "f_arg_item", - "f_opt", - "f_block_opt", - "restarg_mark", - "blkarg_mark", - "assoc" ] -Ractor.make_shareable(Racc_token_to_s_table) if defined?(Ractor) - -Racc_debug_parser = false - -##### State transition tables end ##### - -# reduce 0 omitted - -# reduce 1 omitted - -def _reduce_2(val, _values, result) - rescue_bodies = val[1] - else_t, else_ = val[2] - ensure_t, ensure_ = val[3] - - if rescue_bodies.empty? && !else_t.nil? - diagnostic :warning, :useless_else, nil, else_t - end - - result = @builder.begin_body(val[0], - rescue_bodies, - else_t, else_, - ensure_t, ensure_) - - result -end - -def _reduce_3(val, _values, result) - result = @builder.compstmt(val[0]) - - result -end - -def _reduce_4(val, _values, result) - result = [] - - result -end - -def _reduce_5(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_6(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_7(val, _values, result) - result = [ val[1] ] - - result -end - -def _reduce_8(val, _values, result) - @lexer.state = :expr_fname - - result -end - -def _reduce_9(val, _values, result) - result = @builder.alias(val[0], val[1], val[3]) - - result -end - -def _reduce_10(val, _values, result) - result = @builder.alias(val[0], - @builder.gvar(val[1]), - @builder.gvar(val[2])) - - result -end - -def _reduce_11(val, _values, result) - result = @builder.alias(val[0], - @builder.gvar(val[1]), - @builder.back_ref(val[2])) - - result -end - -def _reduce_12(val, _values, result) - diagnostic :error, :nth_ref_alias, nil, val[2] - - result -end - -def _reduce_13(val, _values, result) - result = @builder.undef_method(val[0], val[1]) - - result -end - -def _reduce_14(val, _values, result) - result = @builder.condition_mod(val[0], nil, - val[1], val[2]) - - result -end - -def _reduce_15(val, _values, result) - result = @builder.condition_mod(nil, val[0], - val[1], val[2]) - - result -end - -def _reduce_16(val, _values, result) - result = @builder.loop_mod(:while, val[0], val[1], val[2]) - - result -end - -def _reduce_17(val, _values, result) - result = @builder.loop_mod(:until, val[0], val[1], val[2]) - - result -end - -def _reduce_18(val, _values, result) - rescue_body = @builder.rescue_body(val[1], - nil, nil, nil, - nil, val[2]) - - result = @builder.begin_body(val[0], [ rescue_body ]) - - result -end - -def _reduce_19(val, _values, result) - if @context.in_def - diagnostic :error, :begin_in_method, nil, val[0] - end - - result = @builder.preexe(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_20(val, _values, result) - result = @builder.postexe(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_21(val, _values, result) - result = @builder.assign(val[0], val[1], val[2]) - - result -end - -def _reduce_22(val, _values, result) - result = @builder.multi_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_23(val, _values, result) - result = @builder.op_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_24(val, _values, result) - result = @builder.op_assign( - @builder.index( - val[0], val[1], val[2], val[3]), - val[4], val[5]) - - result -end - -def _reduce_25(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_26(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_27(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_28(val, _values, result) - @builder.op_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_29(val, _values, result) - result = @builder.assign(val[0], val[1], - @builder.array(nil, val[2], nil)) - - result -end - -def _reduce_30(val, _values, result) - result = @builder.multi_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_31(val, _values, result) - result = @builder.multi_assign(val[0], val[1], - @builder.array(nil, val[2], nil)) - - result -end - -# reduce 32 omitted - -# reduce 33 omitted - -def _reduce_34(val, _values, result) - result = @builder.logical_op(:and, val[0], val[1], val[2]) - - result -end - -def _reduce_35(val, _values, result) - result = @builder.logical_op(:or, val[0], val[1], val[2]) - - result -end - -def _reduce_36(val, _values, result) - result = @builder.not_op(val[0], nil, val[2], nil) - - result -end - -def _reduce_37(val, _values, result) - result = @builder.not_op(val[0], nil, val[1], nil) - - result -end - -# reduce 38 omitted - -# reduce 39 omitted - -# reduce 40 omitted - -# reduce 41 omitted - -def _reduce_42(val, _values, result) - result = @builder.keyword_cmd(:return, val[0], - nil, val[1], nil) - - result -end - -def _reduce_43(val, _values, result) - result = @builder.keyword_cmd(:break, val[0], - nil, val[1], nil) - - result -end - -def _reduce_44(val, _values, result) - result = @builder.keyword_cmd(:next, val[0], - nil, val[1], nil) - - result -end - -# reduce 45 omitted - -def _reduce_46(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2], - *val[3]) - - result -end - -def _reduce_47(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2], - *val[3]) - - result -end - -def _reduce_48(val, _values, result) - @static_env.extend_dynamic - result = @context.dup - @context.in_block = true - - result -end - -def _reduce_49(val, _values, result) - result = [ val[0], val[2], val[3], val[4] ] - - @static_env.unextend - @context.in_block = val[1].in_block - - result -end - -def _reduce_50(val, _values, result) - result = @builder.call_method(nil, nil, val[0], - *val[1]) - - result -end - -def _reduce_51(val, _values, result) - method_call = @builder.call_method(nil, nil, val[0], - *val[1]) - - begin_t, args, body, end_t = val[2] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_52(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2], - *val[3]) - - result -end - -def _reduce_53(val, _values, result) - method_call = @builder.call_method(val[0], val[1], val[2], - *val[3]) - - begin_t, args, body, end_t = val[4] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_54(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2], - *val[3]) - - result -end - -def _reduce_55(val, _values, result) - method_call = @builder.call_method(val[0], val[1], val[2], - *val[3]) - - begin_t, args, body, end_t = val[4] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -def _reduce_56(val, _values, result) - result = @builder.keyword_cmd(:super, val[0], - *val[1]) - - result -end - -def _reduce_57(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0], - *val[1]) - - result -end - -def _reduce_58(val, _values, result) - result = @builder.multi_lhs(nil, val[0], nil) - - result -end - -def _reduce_59(val, _values, result) - result = @builder.begin(val[0], val[1], val[2]) - - result -end - -def _reduce_60(val, _values, result) - result = @builder.multi_lhs(nil, val[0], nil) - - result -end - -def _reduce_61(val, _values, result) - result = @builder.multi_lhs(val[0], val[1], val[2]) - - result -end - -# reduce 62 omitted - -def _reduce_63(val, _values, result) - result = val[0]. - push(val[1]) - - result -end - -def _reduce_64(val, _values, result) - result = val[0]. - push(@builder.splat(val[1], val[2])) - - result -end - -def _reduce_65(val, _values, result) - result = val[0]. - push(@builder.splat(val[1], val[2])). - concat(val[4]) - - result -end - -def _reduce_66(val, _values, result) - result = val[0]. - push(@builder.splat(val[1])) - - result -end - -def _reduce_67(val, _values, result) - result = val[0]. - push(@builder.splat(val[1])). - concat(val[3]) - - result -end - -def _reduce_68(val, _values, result) - result = [ @builder.splat(val[0], val[1]) ] - - result -end - -def _reduce_69(val, _values, result) - result = [ @builder.splat(val[0], val[1]), - *val[3] ] - - result -end - -def _reduce_70(val, _values, result) - result = [ @builder.splat(val[0]) ] - - result -end - -def _reduce_71(val, _values, result) - result = [ @builder.splat(val[0]), - *val[2] ] - - result -end - -# reduce 72 omitted - -def _reduce_73(val, _values, result) - result = @builder.begin(val[0], val[1], val[2]) - - result -end - -def _reduce_74(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_75(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_76(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_77(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_78(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_79(val, _values, result) - result = @builder.index_asgn(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_80(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_81(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_82(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_83(val, _values, result) - result = @builder.assignable( - @builder.const_fetch(val[0], val[1], val[2])) - - result -end - -def _reduce_84(val, _values, result) - result = @builder.assignable( - @builder.const_global(val[0], val[1])) - - result -end - -def _reduce_85(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_86(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_87(val, _values, result) - result = @builder.index_asgn(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_88(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_89(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_90(val, _values, result) - result = @builder.attr_asgn(val[0], val[1], val[2]) - - result -end - -def _reduce_91(val, _values, result) - result = @builder.assignable( - @builder.const_fetch(val[0], val[1], val[2])) - - result -end - -def _reduce_92(val, _values, result) - result = @builder.assignable( - @builder.const_global(val[0], val[1])) - - result -end - -def _reduce_93(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_94(val, _values, result) - diagnostic :error, :module_name_const, nil, val[0] - - result -end - -# reduce 95 omitted - -def _reduce_96(val, _values, result) - result = @builder.const_global(val[0], val[1]) - - result -end - -def _reduce_97(val, _values, result) - result = @builder.const(val[0]) - - result -end - -def _reduce_98(val, _values, result) - result = @builder.const_fetch(val[0], val[1], val[2]) - - result -end - -# reduce 99 omitted - -# reduce 100 omitted - -# reduce 101 omitted - -# reduce 102 omitted - -# reduce 103 omitted - -def _reduce_104(val, _values, result) - result = @builder.symbol_internal(val[0]) - - result -end - -# reduce 105 omitted - -# reduce 106 omitted - -# reduce 107 omitted - -def _reduce_108(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_109(val, _values, result) - @lexer.state = :expr_fname - - result -end - -def _reduce_110(val, _values, result) - result = val[0] << val[3] - - result -end - -# reduce 111 omitted - -# reduce 112 omitted - -# reduce 113 omitted - -# reduce 114 omitted - -# reduce 115 omitted - -# reduce 116 omitted - -# reduce 117 omitted - -# reduce 118 omitted - -# reduce 119 omitted - -# reduce 120 omitted - -# reduce 121 omitted - -# reduce 122 omitted - -# reduce 123 omitted - -# reduce 124 omitted - -# reduce 125 omitted - -# reduce 126 omitted - -# reduce 127 omitted - -# reduce 128 omitted - -# reduce 129 omitted - -# reduce 130 omitted - -# reduce 131 omitted - -# reduce 132 omitted - -# reduce 133 omitted - -# reduce 134 omitted - -# reduce 135 omitted - -# reduce 136 omitted - -# reduce 137 omitted - -# reduce 138 omitted - -# reduce 139 omitted - -# reduce 140 omitted - -# reduce 141 omitted - -# reduce 142 omitted - -# reduce 143 omitted - -# reduce 144 omitted - -# reduce 145 omitted - -# reduce 146 omitted - -# reduce 147 omitted - -# reduce 148 omitted - -# reduce 149 omitted - -# reduce 150 omitted - -# reduce 151 omitted - -# reduce 152 omitted - -# reduce 153 omitted - -# reduce 154 omitted - -# reduce 155 omitted - -# reduce 156 omitted - -# reduce 157 omitted - -# reduce 158 omitted - -# reduce 159 omitted - -# reduce 160 omitted - -# reduce 161 omitted - -# reduce 162 omitted - -# reduce 163 omitted - -# reduce 164 omitted - -# reduce 165 omitted - -# reduce 166 omitted - -# reduce 167 omitted - -# reduce 168 omitted - -# reduce 169 omitted - -# reduce 170 omitted - -# reduce 171 omitted - -# reduce 172 omitted - -# reduce 173 omitted - -# reduce 174 omitted - -# reduce 175 omitted - -# reduce 176 omitted - -# reduce 177 omitted - -# reduce 178 omitted - -# reduce 179 omitted - -# reduce 180 omitted - -def _reduce_181(val, _values, result) - result = @builder.assign(val[0], val[1], val[2]) - - result -end - -def _reduce_182(val, _values, result) - rescue_body = @builder.rescue_body(val[3], - nil, nil, nil, - nil, val[4]) - - rescue_ = @builder.begin_body(val[2], [ rescue_body ]) - - result = @builder.assign(val[0], val[1], rescue_) - - result -end - -def _reduce_183(val, _values, result) - result = @builder.op_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_184(val, _values, result) - rescue_body = @builder.rescue_body(val[3], - nil, nil, nil, - nil, val[4]) - - rescue_ = @builder.begin_body(val[2], [ rescue_body ]) - - result = @builder.op_assign(val[0], val[1], rescue_) - - result -end - -def _reduce_185(val, _values, result) - result = @builder.op_assign( - @builder.index( - val[0], val[1], val[2], val[3]), - val[4], val[5]) - - result -end - -def _reduce_186(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_187(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_188(val, _values, result) - result = @builder.op_assign( - @builder.call_method( - val[0], val[1], val[2]), - val[3], val[4]) - - result -end - -def _reduce_189(val, _values, result) - diagnostic :error, :dynamic_const, nil, val[2], [ val[3] ] - - result -end - -def _reduce_190(val, _values, result) - diagnostic :error, :dynamic_const, nil, val[1], [ val[2] ] - - result -end - -def _reduce_191(val, _values, result) - result = @builder.op_assign(val[0], val[1], val[2]) - - result -end - -def _reduce_192(val, _values, result) - result = @builder.range_inclusive(val[0], val[1], val[2]) - - result -end - -def _reduce_193(val, _values, result) - result = @builder.range_exclusive(val[0], val[1], val[2]) - - result -end - -def _reduce_194(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_195(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_196(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_197(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_198(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_199(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_200(val, _values, result) - result = @builder.unary_op(val[0], - @builder.binary_op( - @builder.integer(val[1]), - val[2], val[3])) - - result -end - -def _reduce_201(val, _values, result) - result = @builder.unary_op(val[0], - @builder.binary_op( - @builder.float(val[1]), - val[2], val[3])) - - result -end - -def _reduce_202(val, _values, result) - result = @builder.unary_op(val[0], val[1]) - - result -end - -def _reduce_203(val, _values, result) - result = @builder.unary_op(val[0], val[1]) - - result -end - -def _reduce_204(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_205(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_206(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_207(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_208(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_209(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_210(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_211(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_212(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_213(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_214(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_215(val, _values, result) - result = @builder.match_op(val[0], val[1], val[2]) - - result -end - -def _reduce_216(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_217(val, _values, result) - result = @builder.not_op(val[0], nil, val[1], nil) - - result -end - -def _reduce_218(val, _values, result) - result = @builder.unary_op(val[0], val[1]) - - result -end - -def _reduce_219(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_220(val, _values, result) - result = @builder.binary_op(val[0], val[1], val[2]) - - result -end - -def _reduce_221(val, _values, result) - result = @builder.logical_op(:and, val[0], val[1], val[2]) - - result -end - -def _reduce_222(val, _values, result) - result = @builder.logical_op(:or, val[0], val[1], val[2]) - - result -end - -def _reduce_223(val, _values, result) - result = @builder.keyword_cmd(:defined?, val[0], nil, [ val[2] ], nil) - - result -end - -def _reduce_224(val, _values, result) - result = @builder.ternary(val[0], val[1], - val[2], val[4], val[5]) - - result -end - -# reduce 225 omitted - -# reduce 226 omitted - -# reduce 227 omitted - -# reduce 228 omitted - -def _reduce_229(val, _values, result) - result = val[0] << @builder.associate(nil, val[2], nil) - - result -end - -def _reduce_230(val, _values, result) - result = [ @builder.associate(nil, val[0], nil) ] - - result -end - -def _reduce_231(val, _values, result) - result = val - - result -end - -def _reduce_232(val, _values, result) - result = [ nil, [], nil ] - - result -end - -# reduce 233 omitted - -def _reduce_234(val, _values, result) - result = [] - - result -end - -# reduce 235 omitted - -def _reduce_236(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_237(val, _values, result) - result = val[0].concat(val[1]) - - result -end - -def _reduce_238(val, _values, result) - result = [ @builder.associate(nil, val[0], nil) ] - result.concat(val[1]) - - result -end - -def _reduce_239(val, _values, result) - assocs = @builder.associate(nil, val[2], nil) - result = val[0] << assocs - result.concat(val[3]) - - result -end - -def _reduce_240(val, _values, result) - val[2][-1] = @builder.objc_varargs(val[2][-1], val[4]) - assocs = @builder.associate(nil, val[2], nil) - result = val[0] << assocs - result.concat(val[5]) - - result -end - -def _reduce_241(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_242(val, _values, result) - result = [ val[0], *val[2].concat(val[3]) ] - - result -end - -def _reduce_243(val, _values, result) - result = [ val[0], val[2] ] - - result -end - -def _reduce_244(val, _values, result) - result = [ @builder.associate(nil, val[0], nil), - *val[1] ] - - result -end - -def _reduce_245(val, _values, result) - result = [ val[0], - @builder.associate(nil, val[2], nil), - *val[3] ] - - result -end - -def _reduce_246(val, _values, result) - result = [ val[0], - *val[2]. - push(@builder.associate(nil, val[4], nil)). - concat(val[5]) ] - - result -end - -def _reduce_247(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_248(val, _values, result) - result = @lexer.cmdarg.dup - @lexer.cmdarg.push(true) - - result -end - -def _reduce_249(val, _values, result) - @lexer.cmdarg = val[0] - - result = val[1] - - result -end - -def _reduce_250(val, _values, result) - result = [ nil, val[0], nil ] - - result -end - -def _reduce_251(val, _values, result) - @lexer.state = :expr_endarg - - result -end - -def _reduce_252(val, _values, result) - result = [ val[0], [], val[2] ] - - result -end - -def _reduce_253(val, _values, result) - @lexer.state = :expr_endarg - - result -end - -def _reduce_254(val, _values, result) - result = [ val[0], val[1], val[3] ] - - result -end - -def _reduce_255(val, _values, result) - result = @builder.block_pass(val[0], val[1]) - - result -end - -def _reduce_256(val, _values, result) - result = [ val[1] ] - - result -end - -def _reduce_257(val, _values, result) - result = [] - - result -end - -def _reduce_258(val, _values, result) - result = [] - - result -end - -def _reduce_259(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_260(val, _values, result) - result = [ @builder.splat(val[0], val[1]) ] - - result -end - -def _reduce_261(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_262(val, _values, result) - result = val[0] << @builder.splat(val[2], val[3]) - - result -end - -def _reduce_263(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_264(val, _values, result) - result = val[0] << @builder.splat(val[2], val[3]) - - result -end - -def _reduce_265(val, _values, result) - result = [ @builder.splat(val[0], val[1]) ] - - result -end - -# reduce 266 omitted - -# reduce 267 omitted - -# reduce 268 omitted - -# reduce 269 omitted - -# reduce 270 omitted - -# reduce 271 omitted - -# reduce 272 omitted - -# reduce 273 omitted - -def _reduce_274(val, _values, result) - result = @builder.call_method(nil, nil, val[0]) - - result -end - -def _reduce_275(val, _values, result) - result = @builder.begin_keyword(val[0], val[1], val[2]) - - result -end - -def _reduce_276(val, _values, result) - @lexer.state = :expr_endarg - - result -end - -def _reduce_277(val, _values, result) - result = @builder.begin(val[0], val[1], val[3]) - - result -end - -def _reduce_278(val, _values, result) - result = @builder.begin(val[0], val[1], val[2]) - - result -end - -def _reduce_279(val, _values, result) - result = @builder.const_fetch(val[0], val[1], val[2]) - - result -end - -def _reduce_280(val, _values, result) - result = @builder.const_global(val[0], val[1]) - - result -end - -def _reduce_281(val, _values, result) - result = @builder.array(val[0], val[1], val[2]) - - result -end - -def _reduce_282(val, _values, result) - result = @builder.associate(val[0], val[1], val[2]) - - result -end - -def _reduce_283(val, _values, result) - result = @builder.keyword_cmd(:return, val[0]) - - result -end - -def _reduce_284(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_285(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0], val[1], [], val[2]) - - result -end - -def _reduce_286(val, _values, result) - result = @builder.keyword_cmd(:yield, val[0]) - - result -end - -def _reduce_287(val, _values, result) - result = @builder.keyword_cmd(:defined?, val[0], - val[2], [ val[3] ], val[4]) - - result -end - -def _reduce_288(val, _values, result) - result = @builder.not_op(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_289(val, _values, result) - result = @builder.not_op(val[0], val[1], nil, val[2]) - - result -end - -def _reduce_290(val, _values, result) - method_call = @builder.call_method(nil, nil, val[0]) - - begin_t, args, body, end_t = val[1] - result = @builder.block(method_call, - begin_t, args, body, end_t) - - result -end - -# reduce 291 omitted - -def _reduce_292(val, _values, result) - begin_t, args, body, end_t = val[1] - result = @builder.block(val[0], - begin_t, args, body, end_t) - - result -end - -def _reduce_293(val, _values, result) - result = @context.dup - @context.in_lambda = true - - result -end - -def _reduce_294(val, _values, result) - lambda_call = @builder.call_lambda(val[0]) - - args, (begin_t, body, end_t) = val[2] - result = @builder.block(lambda_call, - begin_t, args, body, end_t) - - @context.in_lambda = val[1].in_lambda - - result -end - -def _reduce_295(val, _values, result) - else_t, else_ = val[4] - result = @builder.condition(val[0], val[1], val[2], - val[3], else_t, - else_, val[5]) - - result -end - -def _reduce_296(val, _values, result) - else_t, else_ = val[4] - result = @builder.condition(val[0], val[1], val[2], - else_, else_t, - val[3], val[5]) - - result -end - -def _reduce_297(val, _values, result) - @lexer.cond.push(true) - - result -end - -def _reduce_298(val, _values, result) - @lexer.cond.pop - - result -end - -def _reduce_299(val, _values, result) - result = @builder.loop(:while, val[0], val[2], val[3], - val[5], val[6]) - - result -end - -def _reduce_300(val, _values, result) - @lexer.cond.push(true) - - result -end - -def _reduce_301(val, _values, result) - @lexer.cond.pop - - result -end - -def _reduce_302(val, _values, result) - result = @builder.loop(:until, val[0], val[2], val[3], - val[5], val[6]) - - result -end - -def _reduce_303(val, _values, result) - *when_bodies, (else_t, else_body) = *val[3] - - result = @builder.case(val[0], val[1], - when_bodies, else_t, else_body, - val[4]) - - result -end - -def _reduce_304(val, _values, result) - *when_bodies, (else_t, else_body) = *val[2] - - result = @builder.case(val[0], nil, - when_bodies, else_t, else_body, - val[3]) - - result -end - -def _reduce_305(val, _values, result) - @lexer.cond.push(true) - - result -end - -def _reduce_306(val, _values, result) - @lexer.cond.pop - - result -end - -def _reduce_307(val, _values, result) - result = @builder.for(val[0], val[1], - val[2], val[4], - val[5], val[7], val[8]) - - result -end - -def _reduce_308(val, _values, result) - local_push - @context.in_class = true - - result -end - -def _reduce_309(val, _values, result) - k_class, ctx = val[0] - if @context.in_def - diagnostic :error, :class_in_def, nil, k_class - end - - lt_t, superclass = val[2] - result = @builder.def_class(k_class, val[1], - lt_t, superclass, - val[4], val[5]) - - local_pop - @context.in_class = ctx.in_class - - result -end - -def _reduce_310(val, _values, result) - @context.in_def = false - @context.in_class = false - local_push - - result -end - -def _reduce_311(val, _values, result) - k_class, ctx = val[0] - result = @builder.def_sclass(k_class, val[1], val[2], - val[5], val[6]) - - local_pop - @context.in_def = ctx.in_def - @context.in_class = ctx.in_class - - result -end - -def _reduce_312(val, _values, result) - @context.in_class = true - local_push - - result -end - -def _reduce_313(val, _values, result) - k_mod, ctx = val[0] - if @context.in_def - diagnostic :error, :module_in_def, nil, k_mod - end - - result = @builder.def_module(k_mod, val[1], - val[3], val[4]) - - local_pop - @context.in_class = ctx.in_class - - result -end - -def _reduce_314(val, _values, result) - local_push - result = context.dup - @context.in_def = true - - result -end - -def _reduce_315(val, _values, result) - result = @builder.def_method(val[0], val[1], - val[3], val[4], val[5]) - - local_pop - @context.in_def = val[2].in_def - - result -end - -def _reduce_316(val, _values, result) - @lexer.state = :expr_fname - - result -end - -def _reduce_317(val, _values, result) - local_push - result = context.dup - @context.in_def = true - - result -end - -def _reduce_318(val, _values, result) - result = @builder.def_singleton(val[0], val[1], val[2], - val[4], val[6], val[7], val[8]) - - local_pop - @context.in_def = val[5].in_def - - result -end - -def _reduce_319(val, _values, result) - result = @builder.keyword_cmd(:break, val[0]) - - result -end - -def _reduce_320(val, _values, result) - result = @builder.keyword_cmd(:next, val[0]) - - result -end - -def _reduce_321(val, _values, result) - result = @builder.keyword_cmd(:redo, val[0]) - - result -end - -def _reduce_322(val, _values, result) - result = @builder.keyword_cmd(:retry, val[0]) - - result -end - -# reduce 323 omitted - -def _reduce_324(val, _values, result) - result = [ val[0], @context.dup ] - - result -end - -def _reduce_325(val, _values, result) - result = [ val[0], @context.dup ] - - result -end - -# reduce 326 omitted - -# reduce 327 omitted - -def _reduce_328(val, _values, result) - result = val[1] - - result -end - -# reduce 329 omitted - -# reduce 330 omitted - -# reduce 331 omitted - -def _reduce_332(val, _values, result) - else_t, else_ = val[4] - result = [ val[0], - @builder.condition(val[0], val[1], val[2], - val[3], else_t, - else_, nil), - ] - - result -end - -# reduce 333 omitted - -def _reduce_334(val, _values, result) - result = val - - result -end - -# reduce 335 omitted - -# reduce 336 omitted - -# reduce 337 omitted - -def _reduce_338(val, _values, result) - result = @builder.multi_lhs(val[0], val[1], val[2]) - - result -end - -def _reduce_339(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_340(val, _values, result) - result = val[0] << val[2] - - result -end - -# reduce 341 omitted - -def _reduce_342(val, _values, result) - result = val[0]. - push(@builder.objc_restarg(val[2], val[3])) - - result -end - -def _reduce_343(val, _values, result) - result = val[0]. - push(@builder.objc_restarg(val[2], val[3])). - concat(val[5]) - - result -end - -def _reduce_344(val, _values, result) - result = val[0]. - push(@builder.objc_restarg(val[2])) - - result -end - -def _reduce_345(val, _values, result) - result = val[0]. - push(@builder.objc_restarg(val[2])). - concat(val[4]) - - result -end - -def _reduce_346(val, _values, result) - result = [ @builder.objc_restarg(val[0], val[1]) ] - - result -end - -def _reduce_347(val, _values, result) - result = [ @builder.objc_restarg(val[0], val[1]), - *val[3] ] - - result -end - -def _reduce_348(val, _values, result) - result = [ @builder.objc_restarg(val[0]) ] - - result -end - -def _reduce_349(val, _values, result) - result = [ @builder.objc_restarg(val[0]), - *val[2] ] - - result -end - -def _reduce_350(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_351(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[6]). - concat(val[7]) - - result -end - -def _reduce_352(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_353(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_354(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -# reduce 355 omitted - -def _reduce_356(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_357(val, _values, result) - if val[1].empty? && val[0].size == 1 - result = [@builder.procarg0(val[0][0])] - else - result = val[0].concat(val[1]) - end - - result -end - -def _reduce_358(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_359(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_360(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_361(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_362(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_363(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_364(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_365(val, _values, result) - result = @builder.args(nil, [], nil) - - result -end - -def _reduce_366(val, _values, result) - @lexer.state = :expr_value - - result -end - -def _reduce_367(val, _values, result) - result = @builder.args(val[0], val[1], val[2]) - - result -end - -def _reduce_368(val, _values, result) - result = @builder.args(val[0], [], val[0]) - - result -end - -def _reduce_369(val, _values, result) - result = @builder.args(val[0], val[1].concat(val[2]), val[3]) - - result -end - -def _reduce_370(val, _values, result) - result = [] - - result -end - -def _reduce_371(val, _values, result) - result = val[1] - - result -end - -def _reduce_372(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_373(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_374(val, _values, result) - @static_env.declare val[0][0] - result = @builder.shadowarg(val[0]) - - result -end - -# reduce 375 omitted - -def _reduce_376(val, _values, result) - @static_env.extend_dynamic - - result -end - -def _reduce_377(val, _values, result) - result = [ val[1], val[2] ] - - @static_env.unextend - - result -end - -def _reduce_378(val, _values, result) - result = @builder.args(val[0], val[1].concat(val[2]), val[3]) - - result -end - -def _reduce_379(val, _values, result) - result = @builder.args(nil, val[0].concat(val[1]), nil) - - result -end - -def _reduce_380(val, _values, result) - result = @context.dup - @context.in_lambda = true - - result -end - -def _reduce_381(val, _values, result) - result = [ val[0], val[2], val[3] ] - @context.in_lambda = val[1].in_lambda - - result -end - -def _reduce_382(val, _values, result) - result = @context.dup - @context.in_lambda = true - - result -end - -def _reduce_383(val, _values, result) - result = [ val[0], val[2], val[3] ] - @context.in_lambda = val[1].in_lambda - - result -end - -def _reduce_384(val, _values, result) - @static_env.extend_dynamic - result = @context.dup - @context.in_block = true - - result -end - -def _reduce_385(val, _values, result) - result = [ val[0], val[2], val[3], val[4] ] - - @static_env.unextend - @context.in_block = val[1].in_block - - result -end - -def _reduce_386(val, _values, result) - begin_t, block_args, body, end_t = val[1] - result = @builder.block(val[0], - begin_t, block_args, body, end_t) - - result -end - -def _reduce_387(val, _values, result) - lparen_t, args, rparen_t = val[3] - result = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - result -end - -def _reduce_388(val, _values, result) - lparen_t, args, rparen_t = val[3] - result = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - result -end - -def _reduce_389(val, _values, result) - lparen_t, args, rparen_t = val[1] - result = @builder.call_method(nil, nil, val[0], - lparen_t, args, rparen_t) - - result -end - -def _reduce_390(val, _values, result) - lparen_t, args, rparen_t = val[3] - result = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - result -end - -def _reduce_391(val, _values, result) - lparen_t, args, rparen_t = val[3] - result = @builder.call_method(val[0], val[1], val[2], - lparen_t, args, rparen_t) - - result -end - -def _reduce_392(val, _values, result) - result = @builder.call_method(val[0], val[1], val[2]) - - result -end - -def _reduce_393(val, _values, result) - lparen_t, args, rparen_t = val[2] - result = @builder.call_method(val[0], val[1], nil, - lparen_t, args, rparen_t) - - result -end - -def _reduce_394(val, _values, result) - lparen_t, args, rparen_t = val[2] - result = @builder.call_method(val[0], val[1], nil, - lparen_t, args, rparen_t) - - result -end - -def _reduce_395(val, _values, result) - lparen_t, args, rparen_t = val[1] - result = @builder.keyword_cmd(:super, val[0], - lparen_t, args, rparen_t) - - result -end - -def _reduce_396(val, _values, result) - result = @builder.keyword_cmd(:zsuper, val[0]) - - result -end - -def _reduce_397(val, _values, result) - result = @builder.index(val[0], val[1], val[2], val[3]) - - result -end - -def _reduce_398(val, _values, result) - @static_env.extend_dynamic - result = @context.dup - @context.in_block = true - - result -end - -def _reduce_399(val, _values, result) - result = [ val[0], val[2], val[3], val[4] ] - - @static_env.unextend - @context.in_block = val[1].in_block - - result -end - -def _reduce_400(val, _values, result) - @static_env.extend_dynamic - result = @context.dup - @context.in_block = true - - result -end - -def _reduce_401(val, _values, result) - result = [ val[0], val[2], val[3], val[4] ] - - @static_env.unextend - @context.in_block = val[1].in_block - - result -end - -def _reduce_402(val, _values, result) - result = [ @builder.when(val[0], val[1], val[2], val[3]), - *val[4] ] - - result -end - -def _reduce_403(val, _values, result) - result = [ val[0] ] - - result -end - -# reduce 404 omitted - -def _reduce_405(val, _values, result) - assoc_t, exc_var = val[2] - - if val[1] - exc_list = @builder.array(nil, val[1], nil) - end - - result = [ @builder.rescue_body(val[0], - exc_list, assoc_t, exc_var, - val[3], val[4]), - *val[5] ] - - result -end - -def _reduce_406(val, _values, result) - result = [] - - result -end - -def _reduce_407(val, _values, result) - result = [ val[0] ] - - result -end - -# reduce 408 omitted - -# reduce 409 omitted - -def _reduce_410(val, _values, result) - result = [ val[0], val[1] ] - - result -end - -# reduce 411 omitted - -def _reduce_412(val, _values, result) - result = [ val[0], val[1] ] - - result -end - -# reduce 413 omitted - -# reduce 414 omitted - -# reduce 415 omitted - -# reduce 416 omitted - -def _reduce_417(val, _values, result) - result = @builder.string_compose(nil, val[0], nil) - - result -end - -def _reduce_418(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_419(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_420(val, _values, result) - result = @builder.string_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_421(val, _values, result) - result = @builder.string(val[0]) - - result -end - -def _reduce_422(val, _values, result) - result = @builder.character(val[0]) - - result -end - -def _reduce_423(val, _values, result) - result = @builder.xstring_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_424(val, _values, result) - opts = @builder.regexp_options(val[3]) - result = @builder.regexp_compose(val[0], val[1], val[2], opts) - - result -end - -def _reduce_425(val, _values, result) - result = @builder.words_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_426(val, _values, result) - result = [] - - result -end - -def _reduce_427(val, _values, result) - result = val[0] << @builder.word(val[1]) - - result -end - -def _reduce_428(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_429(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_430(val, _values, result) - result = @builder.words_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_431(val, _values, result) - result = [] - - result -end - -def _reduce_432(val, _values, result) - result = val[0] << @builder.string_internal(val[1]) - - result -end - -def _reduce_433(val, _values, result) - result = [] - - result -end - -def _reduce_434(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_435(val, _values, result) - result = [] - - result -end - -def _reduce_436(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_437(val, _values, result) - result = [] - - result -end - -def _reduce_438(val, _values, result) - result = val[0] << val[1] - - result -end - -def _reduce_439(val, _values, result) - result = @builder.string_internal(val[0]) - - result -end - -def _reduce_440(val, _values, result) - result = val[1] - - result -end - -def _reduce_441(val, _values, result) - @lexer.cond.push(false) - @lexer.cmdarg.push(false) - - result -end - -def _reduce_442(val, _values, result) - @lexer.cond.lexpop - @lexer.cmdarg.lexpop - - result = @builder.begin(val[0], val[2], val[3]) - - result -end - -def _reduce_443(val, _values, result) - result = @builder.gvar(val[0]) - - result -end - -def _reduce_444(val, _values, result) - result = @builder.ivar(val[0]) - - result -end - -def _reduce_445(val, _values, result) - result = @builder.cvar(val[0]) - - result -end - -# reduce 446 omitted - -def _reduce_447(val, _values, result) - result = @builder.symbol(val[0]) - - result -end - -def _reduce_448(val, _values, result) - result = @builder.symbol_compose(val[0], val[1], val[2]) - - result -end - -def _reduce_449(val, _values, result) - result = @builder.integer(val[0]) - - result -end - -def _reduce_450(val, _values, result) - result = @builder.float(val[0]) - - result -end - -def _reduce_451(val, _values, result) - num = @builder.integer(val[1]) - if @builder.respond_to? :negate - # AST builder interface compatibility - result = @builder.negate(val[0], num) - else - result = @builder.unary_num(val[0], num) - end - - result -end - -def _reduce_452(val, _values, result) - num = @builder.float(val[1]) - if @builder.respond_to? :negate - # AST builder interface compatibility - result = @builder.negate(val[0], num) - else - result = @builder.unary_num(val[0], num) - end - - result -end - -def _reduce_453(val, _values, result) - result = @builder.ident(val[0]) - - result -end - -def _reduce_454(val, _values, result) - result = @builder.ivar(val[0]) - - result -end - -def _reduce_455(val, _values, result) - result = @builder.gvar(val[0]) - - result -end - -def _reduce_456(val, _values, result) - result = @builder.const(val[0]) - - result -end - -def _reduce_457(val, _values, result) - result = @builder.cvar(val[0]) - - result -end - -def _reduce_458(val, _values, result) - result = @builder.nil(val[0]) - - result -end - -def _reduce_459(val, _values, result) - result = @builder.self(val[0]) - - result -end - -def _reduce_460(val, _values, result) - result = @builder.true(val[0]) - - result -end - -def _reduce_461(val, _values, result) - result = @builder.false(val[0]) - - result -end - -def _reduce_462(val, _values, result) - result = @builder.__FILE__(val[0]) - - result -end - -def _reduce_463(val, _values, result) - result = @builder.__LINE__(val[0]) - - result -end - -def _reduce_464(val, _values, result) - result = @builder.__ENCODING__(val[0]) - - result -end - -def _reduce_465(val, _values, result) - result = @builder.accessible(val[0]) - - result -end - -def _reduce_466(val, _values, result) - result = @builder.assignable(val[0]) - - result -end - -def _reduce_467(val, _values, result) - result = @builder.nth_ref(val[0]) - - result -end - -def _reduce_468(val, _values, result) - result = @builder.back_ref(val[0]) - - result -end - -def _reduce_469(val, _values, result) - result = nil - - result -end - -def _reduce_470(val, _values, result) - result = [ val[0], val[1] ] - - result -end - -def _reduce_471(val, _values, result) - yyerrok - result = nil - - result -end - -def _reduce_472(val, _values, result) - result = @builder.args(val[0], val[1], val[2]) - - @lexer.state = :expr_value - - result -end - -def _reduce_473(val, _values, result) - result = @builder.args(nil, val[0], nil) - - result -end - -def _reduce_474(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_475(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[6]). - concat(val[7]) - - result -end - -def _reduce_476(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_477(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_478(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_479(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_480(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_481(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_482(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[4]). - concat(val[5]) - - result -end - -def _reduce_483(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_484(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_485(val, _values, result) - result = val[0]. - concat(val[1]) - - result -end - -def _reduce_486(val, _values, result) - result = val[0]. - concat(val[2]). - concat(val[3]) - - result -end - -def _reduce_487(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_488(val, _values, result) - result = [] - - result -end - -def _reduce_489(val, _values, result) - diagnostic :error, :argument_const, nil, val[0] - - result -end - -def _reduce_490(val, _values, result) - diagnostic :error, :argument_ivar, nil, val[0] - - result -end - -def _reduce_491(val, _values, result) - diagnostic :error, :argument_gvar, nil, val[0] - - result -end - -def _reduce_492(val, _values, result) - diagnostic :error, :argument_cvar, nil, val[0] - - result -end - -# reduce 493 omitted - -def _reduce_494(val, _values, result) - @static_env.declare val[0][0] - - result = @builder.arg(val[0]) - - result -end - -def _reduce_495(val, _values, result) - @static_env.declare val[2][0] - - result = @builder.objc_kwarg(val[0], val[1], val[2]) - - result -end - -def _reduce_496(val, _values, result) - @static_env.declare val[1][0] - - result = @builder.objc_kwarg(val[0], nil, val[1]) - - result -end - -# reduce 497 omitted - -def _reduce_498(val, _values, result) - result = @builder.multi_lhs(val[0], val[1], val[2]) - - result -end - -def _reduce_499(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_500(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_501(val, _values, result) - @static_env.declare val[0][0] - - result = @builder.optarg(val[0], val[1], val[2]) - - result -end - -def _reduce_502(val, _values, result) - @static_env.declare val[0][0] - - result = @builder.optarg(val[0], val[1], val[2]) - - result -end - -def _reduce_503(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_504(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_505(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_506(val, _values, result) - result = val[0] << val[2] - - result -end - -# reduce 507 omitted - -# reduce 508 omitted - -def _reduce_509(val, _values, result) - @static_env.declare val[1][0] - - result = [ @builder.restarg(val[0], val[1]) ] - - result -end - -def _reduce_510(val, _values, result) - result = [ @builder.restarg(val[0]) ] - - result -end - -# reduce 511 omitted - -# reduce 512 omitted - -def _reduce_513(val, _values, result) - @static_env.declare val[1][0] - - result = @builder.blockarg(val[0], val[1]) - - result -end - -def _reduce_514(val, _values, result) - result = [ val[1] ] - - result -end - -def _reduce_515(val, _values, result) - result = [] - - result -end - -# reduce 516 omitted - -def _reduce_517(val, _values, result) - result = val[1] - - result -end - -def _reduce_518(val, _values, result) - result = [] - - result -end - -# reduce 519 omitted - -def _reduce_520(val, _values, result) - result = [ val[0] ] - - result -end - -def _reduce_521(val, _values, result) - result = val[0] << val[2] - - result -end - -def _reduce_522(val, _values, result) - result = @builder.pair(val[0], val[1], val[2]) - - result -end - -def _reduce_523(val, _values, result) - result = @builder.pair_keyword(val[0], val[1]) - - result -end - -# reduce 524 omitted - -# reduce 525 omitted - -# reduce 526 omitted - -# reduce 527 omitted - -# reduce 528 omitted - -# reduce 529 omitted - -# reduce 530 omitted - -# reduce 531 omitted - -# reduce 532 omitted - -# reduce 533 omitted - -# reduce 534 omitted - -# reduce 535 omitted - -def _reduce_536(val, _values, result) - result = [:dot, val[0][1]] - - result -end - -def _reduce_537(val, _values, result) - result = [:anddot, val[0][1]] - - result -end - -# reduce 538 omitted - -# reduce 539 omitted - -# reduce 540 omitted - -# reduce 541 omitted - -def _reduce_542(val, _values, result) - result = val[1] - - result -end - -def _reduce_543(val, _values, result) - result = val[1] - - result -end - -# reduce 544 omitted - -# reduce 545 omitted - -# reduce 546 omitted - -def _reduce_547(val, _values, result) - yyerrok - - result -end - -# reduce 548 omitted - -# reduce 549 omitted - -# reduce 550 omitted - -def _reduce_551(val, _values, result) - result = nil - - result -end - -def _reduce_none(val, _values, result) - val[0] -end - - end # class RubyMotion -end # module Parser diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/runner.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/runner.rb deleted file mode 100644 index 47ed4136..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/runner.rb +++ /dev/null @@ -1,298 +0,0 @@ -# frozen_string_literal: true - -require 'benchmark' -require 'find' -require 'optparse' - -require 'parser' - -module Parser - - class Runner - def self.go(options) - new.execute(options) - end - - def initialize - @option_parser = OptionParser.new { |opts| setup_option_parsing(opts) } - @legacy = {} - @parser_class = nil - @parser = nil - @files = [] - @fragments = [] - @warnings = false - @benchmark = false - - @source_count = 0 - @source_size = 0 - end - - def execute(options) - parse_options(options) - setup_builder_default - prepare_parser - - process_all_input - end - - private - - LEGACY_MODES = %i[lambda procarg0 encoding index arg_inside_procarg0 forward_arg kwargs match_pattern].freeze - - def runner_name - raise NotImplementedError, "implement #{self.class}##{__callee__}" - end - - def setup_option_parsing(opts) - opts.banner = "Usage: #{runner_name} [options] FILE|DIRECTORY..." - - opts.on_tail '-h', '--help', 'Display this help message and exit' do - puts opts.help - puts <<-HELP - - If you specify a DIRECTORY, then all *.rb files are fetched - from it recursively and appended to the file list. - - The default parsing mode is for current Ruby (#{RUBY_VERSION}). - HELP - exit - end - - opts.on_tail '-V', '--version', 'Output version information and exit' do - puts "#{runner_name} based on parser version #{Parser::VERSION}" - exit - end - - opts.on '--18', 'Parse as Ruby 1.8.7 would' do - require 'parser/ruby18' - @parser_class = Parser::Ruby18 - end - - opts.on '--19', 'Parse as Ruby 1.9.3 would' do - require 'parser/ruby19' - @parser_class = Parser::Ruby19 - end - - opts.on '--20', 'Parse as Ruby 2.0 would' do - require 'parser/ruby20' - @parser_class = Parser::Ruby20 - end - - opts.on '--21', 'Parse as Ruby 2.1 would' do - require 'parser/ruby21' - @parser_class = Parser::Ruby21 - end - - opts.on '--22', 'Parse as Ruby 2.2 would' do - require 'parser/ruby22' - @parser_class = Parser::Ruby22 - end - - opts.on '--23', 'Parse as Ruby 2.3 would' do - require 'parser/ruby23' - @parser_class = Parser::Ruby23 - end - - opts.on '--24', 'Parse as Ruby 2.4 would' do - require 'parser/ruby24' - @parser_class = Parser::Ruby24 - end - - opts.on '--25', 'Parse as Ruby 2.5 would' do - require 'parser/ruby25' - @parser_class = Parser::Ruby25 - end - - opts.on '--26', 'Parse as Ruby 2.6 would' do - require 'parser/ruby26' - @parser_class = Parser::Ruby26 - end - - opts.on '--27', 'Parse as Ruby 2.7 would' do - require 'parser/ruby27' - @parser_class = Parser::Ruby27 - end - - opts.on '--30', 'Parse as Ruby 3.0 would' do - require 'parser/ruby30' - @parser_class = Parser::Ruby30 - end - - opts.on '--31', 'Parse as Ruby 3.1 would' do - require 'parser/ruby31' - @parser_class = Parser::Ruby31 - end - - opts.on '--32', 'Parse as Ruby 3.2 would' do - require 'parser/ruby32' - @parser_class = Parser::Ruby32 - end - - opts.on '--33', 'Parse as Ruby 3.3 would' do - require 'parser/ruby33' - @parser_class = Parser::Ruby33 - end - - opts.on '--34', 'Parse as Ruby 3.4 would' do - require 'parser/ruby34' - @parser_class = Parser::Ruby34 - end - - opts.on '--mac', 'Parse as MacRuby 0.12 would' do - require 'parser/macruby' - @parser_class = Parser::MacRuby - end - - opts.on '--ios', 'Parse as mid-2015 RubyMotion would' do - require 'parser/rubymotion' - @parser_class = Parser::RubyMotion - end - - opts.on '--legacy', "Parse with all legacy modes" do - @legacy = Hash.new(true) - end - - LEGACY_MODES.each do |mode| - opt_name = "--legacy-#{mode.to_s.gsub('_', '-')}" - opts.on opt_name, "Parse with legacy mode for emit_#{mode}" do - @legacy[mode] = true - end - end - - opts.on '-w', '--warnings', 'Enable warnings' do |w| - @warnings = w - end - - opts.on '-B', '--benchmark', 'Benchmark the processor' do |b| - @benchmark = b - end - - opts.on '-e fragment', 'Process a fragment of Ruby code' do |fragment| - @fragments << fragment - end - end - - def parse_options(options) - @option_parser.parse!(options) - - # Slop has just removed recognized options from `options`. - @fragments << $stdin.read if options.delete('-') - options.each do |file_or_dir| - if File.directory?(file_or_dir) - Find.find(file_or_dir) do |path| - @files << path if path.end_with? '.rb' - end - else - @files << file_or_dir - end - end - - if @files.empty? && @fragments.empty? - $stderr.puts 'Need something to parse!' - exit 1 - end - - if @parser_class.nil? - require 'parser/current' - @parser_class = Parser::CurrentRuby - end - end - - def setup_builder_default - LEGACY_MODES.each do |mode| - Parser::Builders::Default.send(:"emit_#{mode}=", !@legacy[mode]) - end - end - - def prepare_parser - @parser = @parser_class.new - - @parser.diagnostics.all_errors_are_fatal = true - @parser.diagnostics.ignore_warnings = !@warnings - - @parser.diagnostics.consumer = lambda do |diagnostic| - puts(diagnostic.render) - end - end - - def input_size - @files.size + @fragments.size - end - - def process_all_input - parsing_time = - Benchmark.measure do - process_fragments - process_files - end - - if @benchmark - report_with_time(parsing_time) - end - end - - def process_fragments - @fragments.each_with_index do |fragment, index| - fragment = fragment.dup.force_encoding(@parser.default_encoding) - - buffer = Source::Buffer.new("(fragment:#{index})") - buffer.source = fragment - - process_buffer(buffer) - end - end - - def process_files - @files.each do |filename| - source = File.read(filename).force_encoding(@parser.default_encoding) - - buffer = Parser::Source::Buffer.new(filename) - - if @parser.class.name == 'Parser::Ruby18' - buffer.raw_source = source - else - buffer.source = source - end - - process_buffer(buffer) - end - end - - def process_buffer(buffer) - @parser.reset - - process(buffer) - - @source_count += 1 - @source_size += buffer.source.size - - rescue Parser::SyntaxError - # skip - - rescue StandardError - $stderr.puts("Failed on: #{buffer.name}") - raise - end - - def process(buffer) - raise NotImplementedError, "implement #{self.class}##{__callee__}" - end - - def report_with_time(parsing_time) - cpu_time = parsing_time.utime - - speed = '%.3f' % (@source_size / cpu_time / 1000) - puts "Parsed #{@source_count} files (#{@source_size} characters)" \ - " in #{'%.2f' % cpu_time} seconds (#{speed} kchars/s)." - - if defined?(RUBY_ENGINE) - engine = RUBY_ENGINE - else - engine = 'ruby' - end - - puts "Running on #{engine} #{RUBY_VERSION}." - end - end - -end diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/runner/ruby_parse.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/runner/ruby_parse.rb deleted file mode 100644 index aa96c804..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/runner/ruby_parse.rb +++ /dev/null @@ -1,157 +0,0 @@ -# frozen_string_literal: true - -require 'parser/runner' -require 'parser/color' -require 'parser/lexer/explanation' -require 'json' - -module Parser - - class Runner::RubyParse < Parser::Runner - - class LocationProcessor < Parser::AST::Processor - def process(node) - if node - p node - - source_line_no = nil - source_line = '' - hilight_line = '' - - print_line = lambda do - unless hilight_line.empty? - puts hilight_line. - gsub(/[a-z_]+/) { |m| Color.yellow(m, bold: true) }. - gsub(/[~.]+/) { |m| Color.magenta(m, bold: true) } - hilight_line = '' - end - end - - print_source = lambda do |range| - source_line = range.source_line - puts Color.green(source_line) - source_line - end - - (node.loc || {}).to_hash. - sort_by do |name, range| - [(range ? range.line : 0), - (name == :expression ? 1 : 0)] - end. - each do |name, range| - next if range.nil? - - if source_line_no != range.line - print_line.call() - source_line = print_source.call(range) - source_line_no = range.line - end - - beg_col = range.begin.column - - if beg_col + range.length > source_line.length - multiline = true - range_length = source_line.length - beg_col + 3 - else - multiline = false - range_length = range.length - end - - length = range_length + 1 + name.length - end_col = beg_col + length - - if beg_col > 0 - col_range = (beg_col - 1)...end_col - else - col_range = beg_col...end_col - end - - if hilight_line.length < end_col - hilight_line = hilight_line.ljust(end_col) - end - - if hilight_line[col_range] =~ /^\s*$/ - if multiline - tail = ('~' * (source_line.length - beg_col)) + '...' - else - tail = '~' * range_length - end - - tail = ' ' + tail if beg_col > 0 - - hilight_line[col_range] = tail + " #{name}" - else - print_line.call - redo - end - end - - print_line.call - end - - super - end - end - - def initialize - super - - @locate = false - @emit_ruby = false - @emit_json = false - end - - private - - def runner_name - 'ruby-parse' - end - - def setup_option_parsing(opts) - super(opts) - - opts.on '-L', '--locate', 'Explain how source maps for AST nodes are laid out' do |v| - @locate = v - end - - opts.on '-E', '--explain', 'Explain how the source is tokenized' do - ENV['RACC_DEBUG'] = '1' - - Lexer.send :include, Lexer::Explanation - end - - opts.on '--emit-ruby', 'Emit S-expressions as valid Ruby code' do - @emit_ruby = true - end - - opts.on '--emit-json', 'Emit S-expressions as valid JSON' do - @emit_json = true - end - end - - def process_all_input - if input_size > 1 - puts "Using #{@parser_class} to parse #{input_size} files." - end - - super - end - - def process(buffer) - ast = @parser.parse(buffer) - - if @locate - LocationProcessor.new.process(ast) - elsif !@benchmark - if @emit_ruby - puts ast.inspect - elsif @emit_json - puts(ast ? JSON.generate(ast.to_sexp_array) : nil) - else - puts ast.to_s - end - end - end - end - -end diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/runner/ruby_rewrite.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/runner/ruby_rewrite.rb deleted file mode 100644 index 05bd8271..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/runner/ruby_rewrite.rb +++ /dev/null @@ -1,101 +0,0 @@ -# frozen_string_literal: true - -require 'parser/runner' -require 'tempfile' - -module Parser - - class Runner::RubyRewrite < Runner - def initialize - super - - @rewriters = [] - @modify = false - end - - private - - def runner_name - 'ruby-rewrite' - end - - def setup_option_parsing(opts) - super(opts) - - opts.on '-l file', '--load', 'Load a rewriter' do |file| - load_and_discover(file) - end - - opts.on '-m', '--modify', 'Assume rewriters normally modify AST' do - @modify = true - end - end - - def load_and_discover(file) - load file - - const_name = File.basename(file). - sub(/\.rb$/, ''). - gsub(/(^|_)([a-z])/) do |m| - "#{$2.upcase}" - end - - @rewriters << Object.const_get(const_name) - end - - def process(initial_buffer) - buffer = initial_buffer - original_name = buffer.name - - @rewriters.each do |rewriter_class| - @parser.reset - ast = @parser.parse(buffer) - - rewriter = rewriter_class.new - new_source = rewriter.rewrite(buffer, ast) - - new_buffer = Source::Buffer.new(initial_buffer.name + - '|after ' + rewriter_class.name, - source: new_source) - - @parser.reset - new_ast = @parser.parse(new_buffer) - - if !@modify && ast != new_ast - $stderr.puts 'ASTs do not match:' - - old = Tempfile.new('old') - old.write ast.inspect + "\n"; old.flush - - new = Tempfile.new('new') - new.write new_ast.inspect + "\n"; new.flush - - IO.popen("diff -u #{old.path} #{new.path}") do |io| - diff = io.read. - sub(/^---.*/, "--- #{buffer.name}"). - sub(/^\+\+\+.*/, "+++ #{new_buffer.name}") - - $stderr.write diff - end - - exit 1 - end - - buffer = new_buffer - end - - if File.exist?(original_name) - File.open(original_name, 'w') do |file| - file.write buffer.source - end - else - if input_size > 1 - puts "Rewritten content of #{buffer.name}:" - end - - puts buffer.source - end - end - end - -end diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/buffer.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/buffer.rb deleted file mode 100644 index e5ff351f..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/buffer.rb +++ /dev/null @@ -1,364 +0,0 @@ -# encoding: ascii-8bit -# frozen_string_literal: true - -module Parser - module Source - - ## - # A buffer with source code. {Buffer} contains the source code itself, - # associated location information (name and first line), and takes care - # of encoding. - # - # A source buffer is immutable once populated. - # - # @!attribute [r] name - # Buffer name. If the buffer was created from a file, the name corresponds - # to relative path to the file. - # @return [String] buffer name - # - # @!attribute [r] first_line - # First line of the buffer, 1 by default. - # @return [Integer] first line - # - # @api public - # - class Buffer - attr_reader :name, :first_line - - ## - # @api private - # - ENCODING_RE = - /[\s#](en)?coding\s*[:=]\s* - ( - # Special-case: there's a UTF8-MAC encoding. - (utf8-mac) - | - # Chew the suffix; it's there for emacs compat. - ([A-Za-z0-9_-]+?)(-unix|-dos|-mac) - | - ([A-Za-z0-9_-]+) - ) - /x - - ## - # Try to recognize encoding of `string` as Ruby would, i.e. by looking for - # magic encoding comment or UTF-8 BOM. `string` can be in any encoding. - # - # @param [String] string - # @return [String, nil] encoding name, if recognized - # - def self.recognize_encoding(string) - return if string.empty? - - # extract the first two lines in an efficient way - string =~ /\A(.*)\n?(.*\n)?/ - first_line, second_line = $1, $2 - - if first_line.start_with?("\xef\xbb\xbf".freeze) # BOM - return Encoding::UTF_8 - elsif first_line[0, 2] == '#!'.freeze - encoding_line = second_line - else - encoding_line = first_line - end - - return nil if encoding_line.nil? || encoding_line[0] != '#' - - if (result = ENCODING_RE.match(encoding_line)) - Encoding.find(result[3] || result[4] || result[6]) - else - nil - end - end - - ## - # Recognize encoding of `input` and process it so it could be lexed. - # - # * If `input` does not contain BOM or magic encoding comment, it is - # kept in the original encoding. - # * If the detected encoding is binary, `input` is kept in binary. - # * Otherwise, `input` is re-encoded into UTF-8 and returned as a - # new string. - # - # This method mutates the encoding of `input`, but not its content. - # - # @param [String] input - # @return [String] - # @raise [EncodingError] - # - def self.reencode_string(input) - original_encoding = input.encoding - detected_encoding = recognize_encoding(input.force_encoding(Encoding::BINARY)) - - if detected_encoding.nil? - input.force_encoding(original_encoding) - elsif detected_encoding == Encoding::BINARY - input - else - input. - force_encoding(detected_encoding). - encode(Encoding::UTF_8) - end - end - - def initialize(name, first_line = 1, source: nil) - @name = name.to_s - @source = nil - @first_line = first_line - - @lines = nil - @line_begins = nil - - # UTF-32-reencoded source for O(1) slicing - @slice_source = nil - - # Cache for fast lookup - @line_index_for_position = {} - - self.source = source if source - end - - ## - # Populate this buffer from correspondingly named file. - # - # @example - # Parser::Source::Buffer.new('foo/bar.rb').read - # - # @return [Buffer] self - # @raise [ArgumentError] if already populated - # - def read - File.open(@name, 'rb') do |io| - self.source = io.read - end - - self - end - - ## - # Source code contained in this buffer. - # - # @return [String] source code - # @raise [RuntimeError] if buffer is not populated yet - # - def source - if @source.nil? - raise RuntimeError, 'Cannot extract source from uninitialized Source::Buffer' - end - - @source - end - - ## - # Populate this buffer from a string with encoding autodetection. - # `input` is mutated if not frozen. - # - # @param [String] input - # @raise [ArgumentError] if already populated - # @raise [EncodingError] if `input` includes invalid byte sequence for the encoding - # @return [String] - # - def source=(input) - input = input.dup if input.frozen? - input = self.class.reencode_string(input) - - unless input.valid_encoding? - raise EncodingError, "invalid byte sequence in #{input.encoding.name}" - end - - self.raw_source = input - end - - ## - # Populate this buffer from a string without encoding autodetection. - # - # @param [String] input - # @raise [ArgumentError] if already populated - # @return [String] - # - def raw_source=(input) - if @source - raise ArgumentError, 'Source::Buffer is immutable' - end - - @source = input.gsub("\r\n".freeze, "\n".freeze).freeze - - if !@source.ascii_only? && - @source.encoding != Encoding::UTF_32LE && - @source.encoding != Encoding::BINARY - @slice_source = @source.encode(Encoding::UTF_32LE) - end - end - - def slice(start, length = nil) - if length.nil? - if start.is_a?(::Range) - length = start.size - start = start.begin - else - length = 1 - end - end - - if @slice_source.nil? - @source[start, length] - else - @slice_source[start, length].encode(@source.encoding) - end - end - - ## - # Convert a character index into the source to a `[line, column]` tuple. - # - # @param [Integer] position - # @return [[Integer, Integer]] `[line, column]` - # - def decompose_position(position) - line_index = line_index_for_position(position) - line_begin = line_begins[line_index] - - [ @first_line + line_index , position - line_begin ] - end - - ## - # Convert a character index into the source to a line number. - # - # @param [Integer] position - # @return [Integer] line - # @api private - # - def line_for_position(position) - line_index_for_position(position) + @first_line - end - - ## - # Convert a character index into the source to a column number. - # - # @param [Integer] position - # @return [Integer] column - # @api private - # - def column_for_position(position) - line_index = line_index_for_position(position) - position - line_begins[line_index] - end - - ## - # Return an `Array` of source code lines. - # - # @return [Array] - # - def source_lines - @lines ||= begin - lines = @source.lines.to_a - lines << ''.dup if @source.end_with?("\n".freeze) - - lines.each do |line| - line.chomp!("\n".freeze) - line.freeze - end - - lines.freeze - end - end - - ## - # Extract line `lineno` from source, taking `first_line` into account. - # - # @param [Integer] lineno - # @return [String] - # @raise [IndexError] if `lineno` is out of bounds - # - def source_line(lineno) - source_lines.fetch(lineno - @first_line).dup - end - - ## - # Extract line `lineno` as a new `Range`, taking `first_line` into account. - # - # @param [Integer] lineno - # @return [Range] - # @raise [IndexError] if `lineno` is out of bounds - # - def line_range(lineno) - index = lineno - @first_line - if index < 0 || index + 1 >= line_begins.size - raise IndexError, 'Parser::Source::Buffer: range for line ' \ - "#{lineno} requested, valid line numbers are #{@first_line}.." \ - "#{@first_line + line_begins.size - 2}" - else - Range.new(self, line_begins[index], line_begins[index + 1] - 1) - end - end - - ## - # @return [Range] A range covering the whole source - # - def source_range - @source_range ||= Range.new(self, 0, source.size) - end - - ## - # Number of last line in the buffer - # - # @return [Integer] - # - def last_line - line_begins.size + @first_line - 2 - end - - # :nodoc: - def freeze - source_lines; line_begins; source_range # build cache - super - end - - # :nodoc: - def inspect - "#<#{self.class} #{name}>" - end - - private - - # @returns [0, line_begin_of_line_1, ..., source.size + 1] - def line_begins - @line_begins ||= begin - begins = [0] - index = 0 - while index = @source.index("\n".freeze, index) - index += 1 - begins << index - end - begins << @source.size + 1 - begins - end - end - - # @returns 0-based line index of position - def line_index_for_position(position) - @line_index_for_position[position] || begin - index = bsearch(line_begins, position) - 1 - @line_index_for_position[position] = index unless @line_index_for_position.frozen? - index - end - end - - if Array.method_defined?(:bsearch_index) # RUBY_VERSION >= 2.3 - def bsearch(line_begins, position) - line_begins.bsearch_index do |line_begin| - position < line_begin - end || line_begins.size - 1 # || only for out of bound values - end - else - def bsearch(line_begins, position) - @line_range ||= 0...line_begins.size - @line_range.bsearch do |i| - position < line_begins[i] - end || line_begins.size - 1 # || only for out of bound values - end - end - end - - end -end diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/comment.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/comment.rb deleted file mode 100644 index 411d9872..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/comment.rb +++ /dev/null @@ -1,134 +0,0 @@ -# frozen_string_literal: true - -module Parser - module Source - - ## - # A comment in the source code. - # - # @!attribute [r] text - # @return [String] - # - # @!attribute [r] location - # @return [Parser::Source::Range] - # - # @api public - # - class Comment - attr_reader :text - - attr_reader :location - alias_method :loc, :location - - ## - # Associate `comments` with `ast` nodes by their corresponding node. - # - # @param [Parser::AST::Node] ast - # @param [Array] comments - # @return [Hash>] - # @see Parser::Source::Comment::Associator#associate - # @deprecated Use {associate_locations}. - # - def self.associate(ast, comments) - associator = Associator.new(ast, comments) - associator.associate - end - - ## - # Associate `comments` with `ast` nodes by their location in the - # source. - # - # @param [Parser::AST::Node] ast - # @param [Array] comments - # @return [Hash>] - # @see Parser::Source::Comment::Associator#associate_locations - # - def self.associate_locations(ast, comments) - associator = Associator.new(ast, comments) - associator.associate_locations - end - - ## - # Associate `comments` with `ast` nodes using identity. - # - # @param [Parser::AST::Node] ast - # @param [Array] comments - # @return [Hash>] - # @see Parser::Source::Comment::Associator#associate_by_identity - # - def self.associate_by_identity(ast, comments) - associator = Associator.new(ast, comments) - associator.associate_by_identity - end - - ## - # @param [Parser::Source::Range] range - # - def initialize(range) - @location = Parser::Source::Map.new(range) - @text = range.source.freeze - - freeze - end - - ## - # Type of this comment. - # - # * Inline comments correspond to `:inline`: - # - # # whatever - # - # * Block comments correspond to `:document`: - # - # =begin - # hi i am a document - # =end - # - # @return [Symbol] - # - def type - if text.start_with?("#".freeze) - :inline - elsif text.start_with?("=begin".freeze) - :document - end - end - - ## - # @see #type - # @return [Boolean] true if this is an inline comment. - # - def inline? - type == :inline - end - - ## - # @see #type - # @return [Boolean] true if this is a block comment. - # - def document? - type == :document - end - - ## - # Compares comments. Two comments are equal if they - # correspond to the same source range. - # - # @param [Object] other - # @return [Boolean] - # - def ==(other) - other.is_a?(Source::Comment) && - @location == other.location - end - - ## - # @return [String] a human-readable representation of this comment - # - def inspect - "#" - end - end - - end -end diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/comment/associator.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/comment/associator.rb deleted file mode 100644 index b81d4959..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/comment/associator.rb +++ /dev/null @@ -1,233 +0,0 @@ -# frozen_string_literal: true - -module Parser - module Source - - ## - # A processor which associates AST nodes with comments based on their - # location in source code. It may be used, for example, to implement - # rdoc-style processing. - # - # @example - # require 'parser/current' - # - # ast, comments = Parser::CurrentRuby.parse_with_comments(<<-CODE) - # # Class stuff - # class Foo - # # Attr stuff - # # @see bar - # attr_accessor :foo - # end - # CODE - # - # p Parser::Source::Comment.associate(ast, comments) - # # => { - # # (class (const nil :Foo) ...) => - # # [#], - # # (send nil :attr_accessor (sym :foo)) => - # # [#, - # # #] - # # } - # - # @see {associate} - # - # @!attribute skip_directives - # Skip file processing directives disguised as comments. - # Namely: - # - # * Shebang line, - # * Magic encoding comment. - # - # @return [Boolean] - # - # @api public - # - class Comment::Associator - attr_accessor :skip_directives - - ## - # @param [Parser::AST::Node] ast - # @param [Array] comments - def initialize(ast, comments) - @ast = ast - @comments = comments - - @skip_directives = true - end - - ## - # Compute a mapping between AST nodes and comments. Comment is - # associated with the node, if it is one of the following types: - # - # - preceding comment, it ends before the node start - # - sparse comment, it is located inside the node, after all child nodes - # - decorating comment, it starts at the same line, where the node ends - # - # This rule is unambiguous and produces the result - # one could reasonably expect; for example, this code - # - # # foo - # hoge # bar - # + fuga - # - # will result in the following association: - # - # { - # (send (lvar :hoge) :+ (lvar :fuga)) => - # [#], - # (lvar :fuga) => - # [#] - # } - # - # Note that comments after the end of the end of a passed tree range are - # ignored (except root decorating comment). - # - # Note that {associate} produces unexpected result for nodes which are - # equal but have distinct locations; comments for these nodes are merged. - # You may prefer using {associate_by_identity} or {associate_locations}. - # - # @return [Hash>] - # @deprecated Use {associate_locations}. - # - def associate - @map_using = :eql - do_associate - end - - ## - # Same as {associate}, but uses `node.loc` instead of `node` as - # the hash key, thus producing an unambiguous result even in presence - # of equal nodes. - # - # @return [Hash>] - # - def associate_locations - @map_using = :location - do_associate - end - - ## - # Same as {associate}, but compares by identity, thus producing an unambiguous - # result even in presence of equal nodes. - # - # @return [Hash>] - # - def associate_by_identity - @map_using = :identity - do_associate - end - - private - - POSTFIX_TYPES = Set[:if, :while, :while_post, :until, :until_post, :masgn].freeze - def children_in_source_order(node) - if POSTFIX_TYPES.include?(node.type) - # All these types have either nodes with expressions, or `nil` - # so a compact will do, but they need to be sorted. - node.children.compact.sort_by { |child| child.loc.expression.begin_pos } - else - node.children.select do |child| - child.is_a?(AST::Node) && child.loc && child.loc.expression - end - end - end - - def do_associate - @mapping = Hash.new { |h, k| h[k] = [] } - @mapping.compare_by_identity if @map_using == :identity - @comment_num = -1 - advance_comment - - advance_through_directives if @skip_directives - - visit(@ast) if @ast - - @mapping - end - - def visit(node) - process_leading_comments(node) - - return unless @current_comment - - # If the next comment is beyond the last line of this node, we don't - # need to iterate over its subnodes - # (Unless this node is a heredoc... there could be a comment in its body, - # inside an interpolation) - node_loc = node.location - if @current_comment.location.line <= node_loc.last_line || - node_loc.is_a?(Map::Heredoc) - children_in_source_order(node).each { |child| visit(child) } - - process_trailing_comments(node) - end - end - - def process_leading_comments(node) - return if node.type == :begin - while current_comment_before?(node) # preceding comment - associate_and_advance_comment(node) - end - end - - def process_trailing_comments(node) - while current_comment_before_end?(node) - associate_and_advance_comment(node) # sparse comment - end - while current_comment_decorates?(node) - associate_and_advance_comment(node) # decorating comment - end - end - - def advance_comment - @comment_num += 1 - @current_comment = @comments[@comment_num] - end - - def current_comment_before?(node) - return false if !@current_comment - comment_loc = @current_comment.location.expression - node_loc = node.location.expression - comment_loc.end_pos <= node_loc.begin_pos - end - - def current_comment_before_end?(node) - return false if !@current_comment - comment_loc = @current_comment.location.expression - node_loc = node.location.expression - comment_loc.end_pos <= node_loc.end_pos - end - - def current_comment_decorates?(node) - return false if !@current_comment - @current_comment.location.line == node.location.last_line - end - - def associate_and_advance_comment(node) - key = @map_using == :location ? node.location : node - @mapping[key] << @current_comment - advance_comment - end - - MAGIC_COMMENT_RE = /^#\s*(-\*-|)\s*(frozen_string_literal|warn_indent|warn_past_scope):.*\1$/ - - def advance_through_directives - # Skip shebang. - if @current_comment && @current_comment.text.start_with?('#!'.freeze) - advance_comment - end - - # Skip magic comments. - if @current_comment && @current_comment.text =~ MAGIC_COMMENT_RE - advance_comment - end - - # Skip encoding line. - if @current_comment && @current_comment.text =~ Buffer::ENCODING_RE - advance_comment - end - end - end - - end -end diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/map.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/map.rb deleted file mode 100644 index 456e11f8..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/map.rb +++ /dev/null @@ -1,186 +0,0 @@ -# frozen_string_literal: true - -module Parser - module Source - - ## - # {Map} relates AST nodes to the source code they were parsed from. - # More specifically, a {Map} or its subclass contains a set of ranges: - # - # * `expression`: smallest range which includes all source corresponding - # to the node and all `expression` ranges of its children. - # * other ranges (`begin`, `end`, `operator`, ...): node-specific ranges - # pointing to various interesting tokens corresponding to the node. - # - # Note that the {Map::Heredoc} map is the only one whose `expression` does - # not include other ranges. It only covers the heredoc marker (`< 2]').children[0].loc - # # => > - # - # The {file:doc/AST_FORMAT.md} document describes how ranges associated to source - # code tokens. For example, the entry - # - # (array (int 1) (int 2)) - # - # "[1, 2]" - # ^ begin - # ^ end - # ~~~~~~ expression - # - # means that if `node` is an {Parser::AST::Node} `(array (int 1) (int 2))`, - # then `node.loc` responds to `begin`, `end` and `expression`, and - # `node.loc.begin` returns a range pointing at the opening bracket, and so on. - # - # If you want to write code polymorphic by the source map (i.e. accepting - # several subclasses of {Map}), use `respond_to?` instead of `is_a?` to - # check whether the map features the range you need. Concrete {Map} - # subclasses may not be preserved between versions, but their interfaces - # will be kept compatible. - # - # You can visualize the source maps with `ruby-parse -E` command-line tool. - # - # @example - # require 'parser/current' - # - # p Parser::CurrentRuby.parse('[1, 2]').loc - # # => #, - # # @begin=#, - # # @expression=#> - # - # @!attribute [r] node - # The node that is described by this map. Nodes and maps have 1:1 correspondence. - # @return [Parser::AST::Node] - # - # @!attribute [r] expression - # @return [Range] - # - # @api public - # - class Map - attr_reader :node - attr_reader :expression - - ## - # @param [Range] expression - def initialize(expression) - @expression = expression - end - - ## - # @api private - def initialize_copy(other) - super - @node = nil - end - - ## - # @api private - def node=(node) - @node = node - freeze - @node - end - - ## - # A shortcut for `self.expression.line`. - # @return [Integer] - # - def line - @expression.line - end - - alias_method :first_line, :line - - ## - # A shortcut for `self.expression.column`. - # @return [Integer] - # - def column - @expression.column - end - - ## - # A shortcut for `self.expression.last_line`. - # @return [Integer] - # - def last_line - @expression.last_line - end - - ## - # A shortcut for `self.expression.last_column`. - # @return [Integer] - # - def last_column - @expression.last_column - end - - ## - # @api private - # - def with_expression(expression_l) - with { |map| map.update_expression(expression_l) } - end - - ## - # Compares source maps. - # @return [Boolean] - # - def ==(other) - other.class == self.class && - instance_variables.map do |ivar| - instance_variable_get(ivar) == - other.send(:instance_variable_get, ivar) - end.reduce(:&) - end - - ## - # Converts this source map to a hash with keys corresponding to - # ranges. For example, if called on an instance of {Collection}, - # which adds the `begin` and `end` ranges, the resulting hash - # will contain keys `:expression`, `:begin` and `:end`. - # - # @example - # require 'parser/current' - # - # p Parser::CurrentRuby.parse('[1, 2]').loc.to_hash - # # => { - # # :begin => #, - # # :end => #, - # # :expression => # - # # } - # - # @return [Hash] - # - def to_hash - instance_variables.inject({}) do |hash, ivar| - next hash if ivar.to_sym == :@node - hash[ivar[1..-1].to_sym] = instance_variable_get(ivar) - hash - end - end - - protected - - def with(&block) - dup.tap(&block) - end - - def update_expression(expression_l) - @expression = expression_l - end - end - - end -end diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/map/collection.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/map/collection.rb deleted file mode 100644 index 1bf1f970..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/map/collection.rb +++ /dev/null @@ -1,18 +0,0 @@ -# frozen_string_literal: true - -module Parser - module Source - - class Map::Collection < Map - attr_reader :begin - attr_reader :end - - def initialize(begin_l, end_l, expression_l) - @begin, @end = begin_l, end_l - - super(expression_l) - end - end - - end -end diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/map/condition.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/map/condition.rb deleted file mode 100644 index 07a6f6f9..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/map/condition.rb +++ /dev/null @@ -1,21 +0,0 @@ -# frozen_string_literal: true - -module Parser - module Source - - class Map::Condition < Map - attr_reader :keyword - attr_reader :begin - attr_reader :else - attr_reader :end - - def initialize(keyword_l, begin_l, else_l, end_l, expression_l) - @keyword = keyword_l - @begin, @else, @end = begin_l, else_l, end_l - - super(expression_l) - end - end - - end -end diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/map/constant.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/map/constant.rb deleted file mode 100644 index d22b3451..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/map/constant.rb +++ /dev/null @@ -1,32 +0,0 @@ -# frozen_string_literal: true - -module Parser - module Source - - class Map::Constant < Map - attr_reader :double_colon - attr_reader :name - attr_reader :operator - - def initialize(double_colon, name, expression) - @double_colon, @name = double_colon, name - - super(expression) - end - - ## - # @api private - # - def with_operator(operator_l) - with { |map| map.update_operator(operator_l) } - end - - protected - - def update_operator(operator_l) - @operator = operator_l - end - end - - end -end diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/map/definition.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/map/definition.rb deleted file mode 100644 index 2260192a..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/map/definition.rb +++ /dev/null @@ -1,23 +0,0 @@ -# frozen_string_literal: true - -module Parser - module Source - - class Map::Definition < Map - attr_reader :keyword - attr_reader :operator - attr_reader :name - attr_reader :end - - def initialize(keyword_l, operator_l, name_l, end_l) - @keyword = keyword_l - @operator = operator_l - @name = name_l - @end = end_l - - super(@keyword.join(@end)) - end - end - - end -end diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/map/for.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/map/for.rb deleted file mode 100644 index 7eec546a..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/map/for.rb +++ /dev/null @@ -1,19 +0,0 @@ -# frozen_string_literal: true - -module Parser - module Source - - class Map::For < Map - attr_reader :keyword, :in - attr_reader :begin, :end - - def initialize(keyword_l, in_l, begin_l, end_l, expression_l) - @keyword, @in = keyword_l, in_l - @begin, @end = begin_l, end_l - - super(expression_l) - end - end - - end -end diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/map/heredoc.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/map/heredoc.rb deleted file mode 100644 index 7e5db343..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/map/heredoc.rb +++ /dev/null @@ -1,19 +0,0 @@ -# frozen_string_literal: true - -module Parser - module Source - - class Map::Heredoc < Map - attr_reader :heredoc_body - attr_reader :heredoc_end - - def initialize(begin_l, body_l, end_l) - @heredoc_body = body_l - @heredoc_end = end_l - - super(begin_l) - end - end - - end -end diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/map/index.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/map/index.rb deleted file mode 100644 index 62cf9b0f..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/map/index.rb +++ /dev/null @@ -1,33 +0,0 @@ -# frozen_string_literal: true - -module Parser - module Source - - class Map::Index < Map - attr_reader :begin - attr_reader :end - attr_reader :operator - - def initialize(begin_l, end_l, expression_l) - @begin, @end = begin_l, end_l - @operator = nil - - super(expression_l) - end - - ## - # @api private - # - def with_operator(operator_l) - with { |map| map.update_operator(operator_l) } - end - - protected - - def update_operator(operator_l) - @operator = operator_l - end - end - - end -end diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/map/keyword.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/map/keyword.rb deleted file mode 100644 index 15bf1e4e..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/map/keyword.rb +++ /dev/null @@ -1,20 +0,0 @@ -# frozen_string_literal: true - -module Parser - module Source - - class Map::Keyword < Map - attr_reader :keyword - attr_reader :begin - attr_reader :end - - def initialize(keyword_l, begin_l, end_l, expression_l) - @keyword = keyword_l - @begin, @end = begin_l, end_l - - super(expression_l) - end - end - - end -end diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/map/method_definition.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/map/method_definition.rb deleted file mode 100644 index 12f6b9f1..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/map/method_definition.rb +++ /dev/null @@ -1,25 +0,0 @@ -# frozen_string_literal: true - -module Parser - module Source - - class Map::MethodDefinition < Map - attr_reader :keyword - attr_reader :operator - attr_reader :name - attr_reader :end - attr_reader :assignment - - def initialize(keyword_l, operator_l, name_l, end_l, assignment_l, body_l) - @keyword = keyword_l - @operator = operator_l - @name = name_l - @end = end_l - @assignment = assignment_l - - super(@keyword.join(end_l || body_l)) - end - end - - end -end diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/map/objc_kwarg.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/map/objc_kwarg.rb deleted file mode 100644 index 33bd6a8b..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/map/objc_kwarg.rb +++ /dev/null @@ -1,19 +0,0 @@ -# frozen_string_literal: true - -module Parser - module Source - - class Map::ObjcKwarg < Map - attr_reader :keyword - attr_reader :operator - attr_reader :argument - - def initialize(keyword_l, operator_l, argument_l, expression_l) - @keyword, @operator, @argument = keyword_l, operator_l, argument_l - - super(expression_l) - end - end - - end -end diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/map/operator.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/map/operator.rb deleted file mode 100644 index c54e6182..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/map/operator.rb +++ /dev/null @@ -1,17 +0,0 @@ -# frozen_string_literal: true - -module Parser - module Source - - class Map::Operator < Map - attr_reader :operator - - def initialize(operator, expression) - @operator = operator - - super(expression) - end - end - - end -end diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/map/rescue_body.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/map/rescue_body.rb deleted file mode 100644 index 92edd890..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/map/rescue_body.rb +++ /dev/null @@ -1,21 +0,0 @@ -# frozen_string_literal: true - -module Parser - module Source - - class Map::RescueBody < Map - attr_reader :keyword - attr_reader :assoc - attr_reader :begin - - def initialize(keyword_l, assoc_l, begin_l, expression_l) - @keyword = keyword_l - @assoc = assoc_l - @begin = begin_l - - super(expression_l) - end - end - - end -end diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/map/send.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/map/send.rb deleted file mode 100644 index 659d6d48..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/map/send.rb +++ /dev/null @@ -1,36 +0,0 @@ -# frozen_string_literal: true - -module Parser - module Source - - class Map::Send < Map - attr_reader :dot - attr_reader :selector - attr_reader :operator - attr_reader :begin - attr_reader :end - - def initialize(dot_l, selector_l, begin_l, end_l, expression_l) - @dot = dot_l - @selector = selector_l - @begin, @end = begin_l, end_l - - super(expression_l) - end - - ## - # @api private - # - def with_operator(operator_l) - with { |map| map.update_operator(operator_l) } - end - - protected - - def update_operator(operator_l) - @operator = operator_l - end - end - - end -end diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/map/ternary.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/map/ternary.rb deleted file mode 100644 index 312d8c73..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/map/ternary.rb +++ /dev/null @@ -1,18 +0,0 @@ -# frozen_string_literal: true - -module Parser - module Source - - class Map::Ternary < Map - attr_reader :question - attr_reader :colon - - def initialize(question_l, colon_l, expression_l) - @question, @colon = question_l, colon_l - - super(expression_l) - end - end - - end -end diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/map/variable.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/map/variable.rb deleted file mode 100644 index 479f7049..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/map/variable.rb +++ /dev/null @@ -1,31 +0,0 @@ -# frozen_string_literal: true - -module Parser - module Source - - class Map::Variable < Map - attr_reader :name - attr_reader :operator - - def initialize(name_l, expression_l=name_l) - @name = name_l - - super(expression_l) - end - - ## - # @api private - # - def with_operator(operator_l) - with { |map| map.update_operator(operator_l) } - end - - protected - - def update_operator(operator_l) - @operator = operator_l - end - end - - end -end diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/range.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/range.rb deleted file mode 100644 index 60264b1c..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/range.rb +++ /dev/null @@ -1,326 +0,0 @@ -# frozen_string_literal: true - -module Parser - module Source - - ## - # A range of characters in a particular source buffer. - # - # The range is always exclusive, i.e. a range with `begin_pos` of 3 and - # `end_pos` of 5 will contain the following characters: - # - # example - # ^^ - # - # @!attribute [r] source_buffer - # @return [Parser::Source::Buffer] - # - # @!attribute [r] begin_pos - # @return [Integer] index of the first character in the range - # - # @!attribute [r] end_pos - # @return [Integer] index of the character after the last character in the range - # - # @api public - # - class Range - include Comparable - - attr_reader :source_buffer - attr_reader :begin_pos, :end_pos - - ## - # @param [Buffer] source_buffer - # @param [Integer] begin_pos - # @param [Integer] end_pos - # - def initialize(source_buffer, begin_pos, end_pos) - if end_pos < begin_pos - raise ArgumentError, 'Parser::Source::Range: end_pos must not be less than begin_pos' - end - if source_buffer.nil? - raise ArgumentError, 'Parser::Source::Range: source_buffer must not be nil' - end - - @source_buffer = source_buffer - @begin_pos, @end_pos = begin_pos, end_pos - - freeze - end - - ## - # @return [Range] a zero-length range located just before the beginning - # of this range. - # - def begin - with(end_pos: @begin_pos) - end - - ## - # @return [Range] a zero-length range located just after the end - # of this range. - # - def end - with(begin_pos: @end_pos) - end - - ## - # @return [Integer] amount of characters included in this range. - # - def size - @end_pos - @begin_pos - end - - alias length size - - ## - # Line number of the beginning of this range. By default, the first line - # of a buffer is 1; as such, line numbers are most commonly one-based. - # - # @see Buffer - # @return [Integer] line number of the beginning of this range. - # - def line - @source_buffer.line_for_position(@begin_pos) - end - - alias_method :first_line, :line - - ## - # @return [Integer] zero-based column number of the beginning of this range. - # - def column - @source_buffer.column_for_position(@begin_pos) - end - - ## - # @return [Integer] line number of the end of this range. - # - def last_line - @source_buffer.line_for_position(@end_pos) - end - - ## - # @return [Integer] zero-based column number of the end of this range. - # - def last_column - @source_buffer.column_for_position(@end_pos) - end - - ## - # @return [::Range] a range of columns spanned by this range. - # @raise RangeError - # - def column_range - if line != last_line - raise RangeError, "#{self.inspect} spans more than one line" - end - - column...last_column - end - - ## - # @return [String] a line of source code containing the beginning of this range. - # - def source_line - @source_buffer.source_line(line) - end - - ## - # @return [String] all source code covered by this range. - # - def source - @source_buffer.slice(@begin_pos, @end_pos - @begin_pos) - end - - ## - # `is?` provides a concise way to compare the source corresponding to this range. - # For example, `r.source == '(' || r.source == 'begin'` is equivalent to - # `r.is?('(', 'begin')`. - # - def is?(*what) - what.include?(source) - end - - ## - # @return [Array] a set of character indexes contained in this range. - # - def to_a - (@begin_pos...@end_pos).to_a - end - - ## - # @return [Range] a Ruby range with the same `begin_pos` and `end_pos` - # - def to_range - self.begin_pos...self.end_pos - end - - ## - # Composes a GNU/Clang-style string representation of the beginning of this - # range. - # - # For example, for the following range in file `foo.rb`, - # - # def foo - # ^^^ - # - # `to_s` will return `foo.rb:1:5`. - # Note that the column index is one-based. - # - # @return [String] - # - def to_s - line, column = @source_buffer.decompose_position(@begin_pos) - - [@source_buffer.name, line, column + 1].join(':') - end - - ## - # @param [Hash] Endpoint(s) to change, any combination of :begin_pos or :end_pos - # @return [Range] the same range as this range but with the given end point(s) changed - # to the given value(s). - # - def with(begin_pos: @begin_pos, end_pos: @end_pos) - Range.new(@source_buffer, begin_pos, end_pos) - end - - ## - # @param [Hash] Endpoint(s) to change, any combination of :begin_pos or :end_pos - # @return [Range] the same range as this range but with the given end point(s) adjusted - # by the given amount(s) - # - def adjust(begin_pos: 0, end_pos: 0) - Range.new(@source_buffer, @begin_pos + begin_pos, @end_pos + end_pos) - end - - ## - # @param [Integer] new_size - # @return [Range] a range beginning at the same point as this range and length `new_size`. - # - def resize(new_size) - with(end_pos: @begin_pos + new_size) - end - - ## - # @param [Range] other - # @return [Range] smallest possible range spanning both this range and `other`. - # - def join(other) - Range.new(@source_buffer, - [@begin_pos, other.begin_pos].min, - [@end_pos, other.end_pos].max) - end - - ## - # @param [Range] other - # @return [Range] overlapping region of this range and `other`, or `nil` - # if they do not overlap - # - def intersect(other) - unless disjoint?(other) - Range.new(@source_buffer, - [@begin_pos, other.begin_pos].max, - [@end_pos, other.end_pos].min) - end - end - - ## - # Return `true` iff this range and `other` are disjoint. - # - # Two ranges must be one and only one of ==, disjoint?, contains?, contained? or crossing? - # - # @param [Range] other - # @return [Boolean] - # - def disjoint?(other) - if empty? && other.empty? - @begin_pos != other.begin_pos - else - @begin_pos >= other.end_pos || other.begin_pos >= @end_pos - end - end - - ## - # Return `true` iff this range is not disjoint from `other`. - # - # @param [Range] other - # @return [Boolean] `true` if this range and `other` overlap - # - def overlaps?(other) - !disjoint?(other) - end - - ## - # Returns true iff this range contains (strictly) `other`. - # - # Two ranges must be one and only one of ==, disjoint?, contains?, contained? or crossing? - # - # @param [Range] other - # @return [Boolean] - # - def contains?(other) - (other.begin_pos <=> @begin_pos) + (@end_pos <=> other.end_pos) >= (other.empty? ? 2 : 1) - end - - ## - # Return `other.contains?(self)` - # - # Two ranges must be one and only one of ==, disjoint?, contains?, contained? or crossing? - # - # @param [Range] other - # @return [Boolean] - # - def contained?(other) - other.contains?(self) - end - - ## - # Returns true iff both ranges intersect and also have different elements from one another. - # - # Two ranges must be one and only one of ==, disjoint?, contains?, contained? or crossing? - # - # @param [Range] other - # @return [Boolean] - # - def crossing?(other) - return false unless overlaps?(other) - (@begin_pos <=> other.begin_pos) * (@end_pos <=> other.end_pos) == 1 - end - - ## - # Checks if a range is empty; if it contains no characters - # @return [Boolean] - def empty? - @begin_pos == @end_pos - end - - ## - # Compare ranges, first by begin_pos, then by end_pos. - # - def <=>(other) - return nil unless other.is_a?(::Parser::Source::Range) && - @source_buffer == other.source_buffer - (@begin_pos <=> other.begin_pos).nonzero? || - (@end_pos <=> other.end_pos) - end - - alias_method :eql?, :== - - ## - # Support for Ranges be used in as Hash indices and in Sets. - # - def hash - [@source_buffer, @begin_pos, @end_pos].hash - end - - ## - # @return [String] a human-readable representation of this range. - # - def inspect - "#" - end - end - - end -end diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/rewriter.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/rewriter.rb deleted file mode 100644 index 23a6fb99..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/rewriter.rb +++ /dev/null @@ -1,513 +0,0 @@ -# frozen_string_literal: true - -module Parser - module Source - - ## - # {Rewriter} is deprecated. Use {TreeRewriter} instead. - # - # TreeRewriter has simplified semantics, and customizable policies - # with regards to clobbering. Please read the documentation. - # - # Keep in mind: - # - Rewriter was discarding the `end_pos` of the given range for `insert_before`, - # and the `begin_pos` for `insert_after`. These are meaningful in TreeRewriter. - # - TreeRewriter's wrap/insert_before/insert_after are multiple by default, while - # Rewriter would raise clobbering errors if the non '_multi' version was called. - # - The TreeRewriter policy closest to Rewriter's behavior is: - # different_replacements: :raise, - # swallowed_insertions: :raise, - # crossing_deletions: :accept - # - # @!attribute [r] source_buffer - # @return [Source::Buffer] - # - # @!attribute [r] diagnostics - # @return [Diagnostic::Engine] - # - # @api public - # @deprecated Use {TreeRewriter} - # - class Rewriter - attr_reader :source_buffer - attr_reader :diagnostics - - ## - # @param [Source::Buffer] source_buffer - # @deprecated Use {TreeRewriter} - # - def initialize(source_buffer) - self.class.warn_of_deprecation - @diagnostics = Diagnostic::Engine.new - @diagnostics.consumer = lambda do |diag| - $stderr.puts diag.render - end - - @source_buffer = source_buffer - @queue = [] - @clobber = 0 - @insertions = 0 # clobbered zero-length positions; index 0 is the far left - - @insert_before_multi_order = 0 - @insert_after_multi_order = 0 - - @pending_queue = nil - @pending_clobber = nil - @pending_insertions = nil - end - - ## - # Removes the source range. - # - # @param [Range] range - # @return [Rewriter] self - # @raise [ClobberingError] when clobbering is detected - # @deprecated Use {TreeRewriter#remove} - # - def remove(range) - append Rewriter::Action.new(range, ''.freeze) - end - - ## - # Inserts new code before the given source range. - # - # @param [Range] range - # @param [String] content - # @return [Rewriter] self - # @raise [ClobberingError] when clobbering is detected - # @deprecated Use {TreeRewriter#insert_before} - # - def insert_before(range, content) - append Rewriter::Action.new(range.begin, content) - end - - ## - # Inserts new code before and after the given source range. - # - # @param [Range] range - # @param [String] before - # @param [String] after - # @return [Rewriter] self - # @raise [ClobberingError] when clobbering is detected - # @deprecated Use {TreeRewriter#wrap} - # - def wrap(range, before, after) - append Rewriter::Action.new(range.begin, before) - append Rewriter::Action.new(range.end, after) - end - - ## - # Inserts new code before the given source range by allowing other - # insertions at the same position. - # Note that an insertion with latter invocation comes _before_ earlier - # insertion at the same position in the rewritten source. - # - # @example Inserting '[(' - # rewriter. - # insert_before_multi(range, '('). - # insert_before_multi(range, '['). - # process - # - # @param [Range] range - # @param [String] content - # @return [Rewriter] self - # @raise [ClobberingError] when clobbering is detected - # @deprecated Use {TreeRewriter#insert_before} - # - def insert_before_multi(range, content) - @insert_before_multi_order -= 1 - append Rewriter::Action.new(range.begin, content, true, @insert_before_multi_order) - end - - ## - # Inserts new code after the given source range. - # - # @param [Range] range - # @param [String] content - # @return [Rewriter] self - # @raise [ClobberingError] when clobbering is detected - # @deprecated Use {TreeRewriter#insert_after} - # - def insert_after(range, content) - append Rewriter::Action.new(range.end, content) - end - - ## - # Inserts new code after the given source range by allowing other - # insertions at the same position. - # Note that an insertion with latter invocation comes _after_ earlier - # insertion at the same position in the rewritten source. - # - # @example Inserting ')]' - # rewriter. - # insert_after_multi(range, ')'). - # insert_after_multi(range, ']'). - # process - # - # @param [Range] range - # @param [String] content - # @return [Rewriter] self - # @raise [ClobberingError] when clobbering is detected - # @deprecated Use {TreeRewriter#insert_after} - # - def insert_after_multi(range, content) - @insert_after_multi_order += 1 - append Rewriter::Action.new(range.end, content, true, @insert_after_multi_order) - end - - ## - # Replaces the code of the source range `range` with `content`. - # - # @param [Range] range - # @param [String] content - # @return [Rewriter] self - # @raise [ClobberingError] when clobbering is detected - # @deprecated Use {TreeRewriter#replace} - # - def replace(range, content) - append Rewriter::Action.new(range, content) - end - - ## - # Applies all scheduled changes to the `source_buffer` and returns - # modified source as a new string. - # - # @return [String] - # @deprecated Use {TreeRewriter#process} - # - def process - if in_transaction? - raise "Do not call #{self.class}##{__method__} inside a transaction" - end - - adjustment = 0 - source = @source_buffer.source.dup - - @queue.sort.each do |action| - begin_pos = action.range.begin_pos + adjustment - end_pos = begin_pos + action.range.length - - source[begin_pos...end_pos] = action.replacement - - adjustment += (action.replacement.length - action.range.length) - end - - source - end - - ## - # Provides a protected block where a sequence of multiple rewrite actions - # are handled atomically. If any of the actions failed by clobbering, - # all the actions are rolled back. - # - # @example - # begin - # rewriter.transaction do - # rewriter.insert_before(range_of_something, '(') - # rewriter.insert_after(range_of_something, ')') - # end - # rescue Parser::ClobberingError - # end - # - # @raise [RuntimeError] when no block is passed - # @raise [RuntimeError] when already in a transaction - # @deprecated Use {TreeRewriter#transaction} - # - def transaction - unless block_given? - raise "#{self.class}##{__method__} requires block" - end - - if in_transaction? - raise 'Nested transaction is not supported' - end - - @pending_queue = @queue.dup - @pending_clobber = @clobber - @pending_insertions = @insertions - - yield - - @queue = @pending_queue - @clobber = @pending_clobber - @insertions = @pending_insertions - - self - ensure - @pending_queue = nil - @pending_clobber = nil - @pending_insertions = nil - end - - private - - # Schedule a code update. If it overlaps with another update, check - # whether they conflict, and raise a clobbering error if they do. - # (As a special case, zero-length ranges at the same position are - # considered to "overlap".) Otherwise, merge them. - # - # Updates which are adjacent to each other, but do not overlap, are also - # merged. - # - # RULES: - # - # - Insertion ("replacing" a zero-length range): - # - Two insertions at the same point conflict. This is true even - # if the earlier insertion has already been merged with an adjacent - # update, and even if they are both inserting the same text. - # - An insertion never conflicts with a replace or remove operation - # on its right or left side, which does not overlap it (in other - # words, which does not update BOTH its right and left sides). - # - An insertion always conflicts with a remove operation which spans - # both its sides. - # - An insertion conflicts with a replace operation which spans both its - # sides, unless the replacement text is longer than the replaced text - # by the size of the insertion (or more), and the portion of - # replacement text immediately after the insertion position is - # identical to the inserted text. - # - # - Removal operations never conflict with each other. - # - # - Replacement operations: - # - Take the portion of each replacement text which falls within: - # - The other operation's replaced region - # - The other operation's replacement text, if it extends past the - # end of its own replaced region (in other words, if the replacement - # text is longer than the text it replaces) - # - If and only if the taken texts are identical for both operations, - # they do not conflict. - # - def append(action) - range = action.range - - # Is this an insertion? - if range.empty? - # Replacing nothing with... nothing? - return self if action.replacement.empty? - - if !action.allow_multiple_insertions? && (conflicting = clobbered_insertion?(range)) - raise_clobber_error(action, [conflicting]) - end - - record_insertion(range) - - if (adjacent = adjacent_updates?(range)) - conflicting = adjacent.find do |a| - a.range.overlaps?(range) && - !replace_compatible_with_insertion?(a, action) - end - raise_clobber_error(action, [conflicting]) if conflicting - - merge_actions!(action, adjacent) - else - active_queue << action - end - else - # It's a replace or remove operation. - if (insertions = adjacent_insertions?(range)) - insertions.each do |insertion| - if range.overlaps?(insertion.range) && - !replace_compatible_with_insertion?(action, insertion) - raise_clobber_error(action, [insertion]) - else - action = merge_actions(action, [insertion]) - active_queue.delete(insertion) - end - end - end - - if (adjacent = adjacent_updates?(range)) - if can_merge?(action, adjacent) - record_replace(range) - merge_actions!(action, adjacent) - else - raise_clobber_error(action, adjacent) - end - else - record_replace(range) - active_queue << action - end - end - - self - end - - def record_insertion(range) - self.active_insertions = active_insertions | (1 << range.begin_pos) - end - - def record_replace(range) - self.active_clobber = active_clobber | clobbered_position_mask(range) - end - - def clobbered_position_mask(range) - ((1 << range.size) - 1) << range.begin_pos - end - - def adjacent_position_mask(range) - ((1 << (range.size + 2)) - 1) << (range.begin_pos - 1) - end - - def adjacent_insertion_mask(range) - ((1 << (range.size + 1)) - 1) << range.begin_pos - end - - def clobbered_insertion?(insertion) - insertion_pos = insertion.begin_pos - if active_insertions & (1 << insertion_pos) != 0 - # The clobbered insertion may have already been merged with other - # updates, so it won't necessarily have the same begin_pos. - active_queue.find do |a| - a.range.begin_pos <= insertion_pos && insertion_pos <= a.range.end_pos - end - end - end - - def adjacent_insertions?(range) - # Just retrieve insertions which have not been merged with an adjacent - # remove or replace. - if active_insertions & adjacent_insertion_mask(range) != 0 - result = active_queue.select do |a| - a.range.empty? && adjacent?(range, a.range) - end - result.empty? ? nil : result - end - end - - def adjacent_updates?(range) - if active_clobber & adjacent_position_mask(range) != 0 - active_queue.select { |a| adjacent?(range, a.range) } - end - end - - def replace_compatible_with_insertion?(replace, insertion) - (replace.replacement.length - replace.range.size) >= insertion.range.size && - (offset = insertion.range.begin_pos - replace.range.begin_pos) && - replace.replacement[offset, insertion.replacement.length] == insertion.replacement - end - - def can_merge?(action, existing) - # Compare 2 replace/remove operations (neither is an insertion) - range = action.range - - existing.all? do |other| - overlap = range.intersect(other.range) - next true if overlap.nil? # adjacent, not overlapping - - repl1_offset = overlap.begin_pos - range.begin_pos - repl2_offset = overlap.begin_pos - other.range.begin_pos - repl1_length = [other.range.length - repl2_offset, - other.replacement.length - repl2_offset].max - repl2_length = [range.length - repl1_offset, - action.replacement.length - repl1_offset].max - - replacement1 = action.replacement[repl1_offset, repl1_length] || ''.freeze - replacement2 = other.replacement[repl2_offset, repl2_length] || ''.freeze - replacement1 == replacement2 - end - end - - def merge_actions(action, existing) - actions = existing.push(action).sort_by do |a| - [a.range.begin_pos, a.range.end_pos] - end - range = actions.first.range.join(actions.max_by { |a| a.range.end_pos }.range) - - Rewriter::Action.new(range, merge_replacements(actions)) - end - - def merge_actions!(action, existing) - new_action = merge_actions(action, existing) - active_queue.delete(action) - replace_actions(existing, new_action) - end - - def merge_replacements(actions) - result = ''.dup - prev_act = nil - - actions.each do |act| - if !prev_act || act.range.disjoint?(prev_act.range) - result << act.replacement - else - prev_end = [prev_act.range.begin_pos + prev_act.replacement.length, - prev_act.range.end_pos].max - offset = prev_end - act.range.begin_pos - result << act.replacement[offset..-1] if offset < act.replacement.size - end - - prev_act = act - end - - result - end - - def replace_actions(old, updated) - old.each { |act| active_queue.delete(act) } - active_queue << updated - end - - def raise_clobber_error(action, existing) - # cannot replace 3 characters with "foobar" - diagnostic = Diagnostic.new(:error, - :invalid_action, - { :action => action }, - action.range) - @diagnostics.process(diagnostic) - - # clobbered by: remove 3 characters - diagnostic = Diagnostic.new(:note, - :clobbered, - { :action => existing[0] }, - existing[0].range) - @diagnostics.process(diagnostic) - - raise ClobberingError, "Parser::Source::Rewriter detected clobbering" - end - - def in_transaction? - !@pending_queue.nil? - end - - def active_queue - @pending_queue || @queue - end - - def active_clobber - @pending_clobber || @clobber - end - - def active_insertions - @pending_insertions || @insertions - end - - def active_clobber=(value) - if @pending_clobber - @pending_clobber = value - else - @clobber = value - end - end - - def active_insertions=(value) - if @pending_insertions - @pending_insertions = value - else - @insertions = value - end - end - - def adjacent?(range1, range2) - range1.begin_pos <= range2.end_pos && range2.begin_pos <= range1.end_pos - end - - DEPRECATION_WARNING = [ - 'Parser::Source::Rewriter is deprecated.', - 'Please update your code to use Parser::Source::TreeRewriter instead' - ].join("\n").freeze - - extend Deprecation - end - - end -end diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/rewriter/action.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/rewriter/action.rb deleted file mode 100644 index 908e6d10..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/rewriter/action.rb +++ /dev/null @@ -1,44 +0,0 @@ -# frozen_string_literal: true - -module Parser - module Source - - ## - # @api private - # - class Rewriter::Action - include Comparable - - attr_reader :range, :replacement, :allow_multiple_insertions, :order - alias_method :allow_multiple_insertions?, :allow_multiple_insertions - - def initialize(range, replacement='', allow_multiple_insertions = false, order = 0) - @range = range - @replacement = replacement - @allow_multiple_insertions = allow_multiple_insertions - @order = order - - freeze - end - - def <=>(other) - result = range.begin_pos <=> other.range.begin_pos - return result unless result.zero? - order <=> other.order - end - - def to_s - if @range.length == 0 && @replacement.empty? - 'do nothing' - elsif @range.length == 0 - "insert #{@replacement.inspect}" - elsif @replacement.empty? - "remove #{@range.length} character(s)" - else - "replace #{@range.length} character(s) with #{@replacement.inspect}" - end - end - end - - end -end diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/tree_rewriter.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/tree_rewriter.rb deleted file mode 100644 index 2bbff582..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/tree_rewriter.rb +++ /dev/null @@ -1,431 +0,0 @@ -# frozen_string_literal: true - -module Parser - module Source - - ## - # {TreeRewriter} performs the heavy lifting in the source rewriting process. - # It schedules code updates to be performed in the correct order. - # - # For simple cases, the resulting source will be obvious. - # - # Examples for more complex cases follow. Assume these examples are acting on - # the source `'puts(:hello, :world)`. The methods #wrap, #remove, etc. - # receive a Range as first argument; for clarity, examples below use english - # sentences and a string of raw code instead. - # - # ## Overlapping ranges: - # - # Any two rewriting actions on overlapping ranges will fail and raise - # a `ClobberingError`, unless they are both deletions (covered next). - # - # * wrap ':hello, ' with '(' and ')' - # * wrap ', :world' with '(' and ')' - # => CloberringError - # - # ## Overlapping deletions: - # - # * remove ':hello, ' - # * remove ', :world' - # - # The overlapping ranges are merged and `':hello, :world'` will be removed. - # This policy can be changed. `:crossing_deletions` defaults to `:accept` - # but can be set to `:warn` or `:raise`. - # - # ## Multiple actions at the same end points: - # - # Results will always be independent on the order they were given. - # Exception: rewriting actions done on exactly the same range (covered next). - # - # Example: - # * replace ', ' by ' => ' - # * wrap ':hello, :world' with '{' and '}' - # * replace ':world' with ':everybody' - # * wrap ':world' with '[', ']' - # - # The resulting string will be `'puts({:hello => [:everybody]})'` - # and this result is independent on the order the instructions were given in. - # - # Note that if the two "replace" were given as a single replacement of ', :world' - # for ' => :everybody', the result would be a `ClobberingError` because of the wrap - # in square brackets. - # - # ## Multiple wraps on same range: - # * wrap ':hello' with '(' and ')' - # * wrap ':hello' with '[' and ']' - # - # The wraps are combined in order given and results would be `'puts([(:hello)], :world)'`. - # - # ## Multiple replacements on same range: - # * replace ':hello' by ':hi', then - # * replace ':hello' by ':hey' - # - # The replacements are made in the order given, so the latter replacement - # supersedes the former and ':hello' will be replaced by ':hey'. - # - # This policy can be changed. `:different_replacements` defaults to `:accept` - # but can be set to `:warn` or `:raise`. - # - # ## Swallowed insertions: - # wrap 'world' by '__', '__' - # replace ':hello, :world' with ':hi' - # - # A containing replacement will swallow the contained rewriting actions - # and `':hello, :world'` will be replaced by `':hi'`. - # - # This policy can be changed for swallowed insertions. `:swallowed_insertions` - # defaults to `:accept` but can be set to `:warn` or `:raise` - # - # ## Implementation - # The updates are organized in a tree, according to the ranges they act on - # (where children are strictly contained by their parent), hence the name. - # - # @!attribute [r] source_buffer - # @return [Source::Buffer] - # - # @!attribute [r] diagnostics - # @return [Diagnostic::Engine] - # - # @api public - # - class TreeRewriter - attr_reader :source_buffer - attr_reader :diagnostics - - ## - # @param [Source::Buffer] source_buffer - # - def initialize(source_buffer, - crossing_deletions: :accept, - different_replacements: :accept, - swallowed_insertions: :accept) - @diagnostics = Diagnostic::Engine.new - @diagnostics.consumer = -> diag { $stderr.puts diag.render } - - @source_buffer = source_buffer - @in_transaction = false - - @policy = {crossing_deletions: crossing_deletions, - different_replacements: different_replacements, - swallowed_insertions: swallowed_insertions}.freeze - check_policy_validity - - @enforcer = method(:enforce_policy) - # We need a range that would be jugded as containing all other ranges, - # including 0...0 and size...size: - all_encompassing_range = @source_buffer.source_range.adjust(begin_pos: -1, end_pos: +1) - @action_root = TreeRewriter::Action.new(all_encompassing_range, @enforcer) - end - - ## - # Returns true iff no (non trivial) update has been recorded - # - # @return [Boolean] - # - def empty? - @action_root.empty? - end - - ## - # Merges the updates of argument with the receiver. - # Policies of the receiver are used. - # This action is atomic in that it won't change the receiver - # unless it succeeds. - # - # @param [Rewriter] with - # @return [Rewriter] self - # @raise [ClobberingError] when clobbering is detected - # - def merge!(with) - raise 'TreeRewriter are not for the same source_buffer' unless - source_buffer == with.source_buffer - - @action_root = @action_root.combine(with.action_root) - self - end - - ## - # Returns a new rewriter that consists of the updates of the received - # and the given argument. Policies of the receiver are used. - # - # @param [Rewriter] with - # @return [Rewriter] merge of receiver and argument - # @raise [ClobberingError] when clobbering is detected - # - def merge(with) - dup.merge!(with) - end - - ## - # For special cases where one needs to merge a rewriter attached to a different source_buffer - # or that needs to be offset. Policies of the receiver are used. - # - # @param [TreeRewriter] rewriter from different source_buffer - # @param [Integer] offset - # @return [Rewriter] self - # @raise [IndexError] if action ranges (once offset) don't fit the current buffer - # - def import!(foreign_rewriter, offset: 0) - return self if foreign_rewriter.empty? - - contracted = foreign_rewriter.action_root.contract - merge_effective_range = ::Parser::Source::Range.new( - @source_buffer, - contracted.range.begin_pos + offset, - contracted.range.end_pos + offset, - ) - check_range_validity(merge_effective_range) - - merge_with = contracted.moved(@source_buffer, offset) - - @action_root = @action_root.combine(merge_with) - self - end - - ## - # Replaces the code of the source range `range` with `content`. - # - # @param [Range] range - # @param [String] content - # @return [Rewriter] self - # @raise [ClobberingError] when clobbering is detected - # - def replace(range, content) - combine(range, replacement: content) - end - - ## - # Inserts the given strings before and after the given range. - # - # @param [Range] range - # @param [String, nil] insert_before - # @param [String, nil] insert_after - # @return [Rewriter] self - # @raise [ClobberingError] when clobbering is detected - # - def wrap(range, insert_before, insert_after) - combine(range, insert_before: insert_before.to_s, insert_after: insert_after.to_s) - end - - ## - # Shortcut for `replace(range, '')` - # - # @param [Range] range - # @return [Rewriter] self - # @raise [ClobberingError] when clobbering is detected - # - def remove(range) - replace(range, ''.freeze) - end - - - ## - # Shortcut for `wrap(range, content, nil)` - # - # @param [Range] range - # @param [String] content - # @return [Rewriter] self - # @raise [ClobberingError] when clobbering is detected - # - def insert_before(range, content) - wrap(range, content, nil) - end - - ## - # Shortcut for `wrap(range, nil, content)` - # - # @param [Range] range - # @param [String] content - # @return [Rewriter] self - # @raise [ClobberingError] when clobbering is detected - # - def insert_after(range, content) - wrap(range, nil, content) - end - - ## - # Applies all scheduled changes to the `source_buffer` and returns - # modified source as a new string. - # - # @return [String] - # - def process - source = @source_buffer.source - - chunks = [] - last_end = 0 - @action_root.ordered_replacements.each do |range, replacement| - chunks << source[last_end...range.begin_pos] << replacement - last_end = range.end_pos - end - chunks << source[last_end...source.length] - chunks.join - end - - ## - # Returns a representation of the rewriter as an ordered list of replacements. - # - # rewriter.as_replacements # => [ [1...1, '('], - # [2...4, 'foo'], - # [5...6, ''], - # [6...6, '!'], - # [10...10, ')'], - # ] - # - # This representation is sufficient to recreate the result of `process` but it is - # not sufficient to recreate completely the rewriter for further merging/actions. - # See `as_nested_actions` - # - # @return [Array] an ordered list of pairs of range & replacement - # - def as_replacements - @action_root.ordered_replacements - end - - ## - # Returns a representation of the rewriter as nested insertions (:wrap) and replacements. - # - # rewriter.as_actions # =>[ [:wrap, 1...10, '(', ')'], - # [:wrap, 2...6, '', '!'], # aka "insert_after" - # [:replace, 2...4, 'foo'], - # [:replace, 5...6, ''], # aka "removal" - # ], - # - # Contrary to `as_replacements`, this representation is sufficient to recreate exactly - # the rewriter. - # - # @return [Array<(Symbol, Range, String{, String})>] - # - def as_nested_actions - @action_root.nested_actions - end - - ## - # Provides a protected block where a sequence of multiple rewrite actions - # are handled atomically. If any of the actions failed by clobbering, - # all the actions are rolled back. Transactions can be nested. - # - # @raise [RuntimeError] when no block is passed - # - def transaction - unless block_given? - raise "#{self.class}##{__method__} requires block" - end - - previous = @in_transaction - @in_transaction = true - restore_root = @action_root - - yield - - restore_root = nil - - self - ensure - @action_root = restore_root if restore_root - @in_transaction = previous - end - - def in_transaction? - @in_transaction - end - - # :nodoc: - def inspect - "#<#{self.class} #{source_buffer.name}: #{action_summary}>" - end - - ## - # @api private - # @deprecated Use insert_after or wrap - # - def insert_before_multi(range, text) - self.class.warn_of_deprecation - insert_before(range, text) - end - - ## - # @api private - # @deprecated Use insert_after or wrap - # - def insert_after_multi(range, text) - self.class.warn_of_deprecation - insert_after(range, text) - end - - DEPRECATION_WARNING = [ - 'TreeRewriter#insert_before_multi and insert_before_multi exist only for legacy compatibility.', - 'Please update your code to use `wrap`, `insert_before` or `insert_after` instead.' - ].join("\n").freeze - - extend Deprecation - - protected - - attr_reader :action_root - - private - - def action_summary - replacements = as_replacements - case replacements.size - when 0 then return 'empty' - when 1..3 then #ok - else - replacements = replacements.first(3) - suffix = '…' - end - parts = replacements.map do |(range, str)| - if str.empty? # is this a deletion? - "-#{range.to_range}" - elsif range.size == 0 # is this an insertion? - "+#{str.inspect}@#{range.begin_pos}" - else # it is a replacement - "^#{str.inspect}@#{range.to_range}" - end - end - parts << suffix if suffix - parts.join(', ') - end - - ACTIONS = %i[accept warn raise].freeze - def check_policy_validity - invalid = @policy.values - ACTIONS - raise ArgumentError, "Invalid policy: #{invalid.join(', ')}" unless invalid.empty? - end - - def combine(range, attributes) - range = check_range_validity(range) - action = TreeRewriter::Action.new(range, @enforcer, **attributes) - @action_root = @action_root.combine(action) - self - end - - def check_range_validity(range) - if range.begin_pos < 0 || range.end_pos > @source_buffer.source.size - raise IndexError, "The range #{range.to_range} is outside the bounds of the source" - end - range - end - - def enforce_policy(event) - return if @policy[event] == :accept - return unless (values = yield) - trigger_policy(event, **values) - end - - POLICY_TO_LEVEL = {warn: :warning, raise: :error}.freeze - def trigger_policy(event, range: raise, conflict: nil, **arguments) - action = @policy[event] || :raise - diag = Parser::Diagnostic.new(POLICY_TO_LEVEL[action], event, arguments, range) - @diagnostics.process(diag) - if conflict - range, *highlights = conflict - diag = Parser::Diagnostic.new(POLICY_TO_LEVEL[action], :"#{event}_conflict", arguments, range, highlights) - @diagnostics.process(diag) - end - raise Parser::ClobberingError, "Parser::Source::TreeRewriter detected clobbering" if action == :raise - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/tree_rewriter/action.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/tree_rewriter/action.rb deleted file mode 100644 index 26cc0260..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/source/tree_rewriter/action.rb +++ /dev/null @@ -1,242 +0,0 @@ -# frozen_string_literal: true - -module Parser - module Source - ## - # @api private - # - # Actions are arranged in a tree and get combined so that: - # children are strictly contained by their parent - # sibblings all disjoint from one another and ordered - # only actions with replacement==nil may have children - # - class TreeRewriter::Action - attr_reader :range, :replacement, :insert_before, :insert_after - - def initialize(range, enforcer, - insert_before: '', - replacement: nil, - insert_after: '', - children: [] - ) - @range, @enforcer, @children, @insert_before, @replacement, @insert_after = - range, enforcer, children.freeze, insert_before.freeze, replacement, insert_after.freeze - - freeze - end - - def combine(action) - return self if action.empty? # Ignore empty action - do_combine(action) - end - - def empty? - @insert_before.empty? && - @insert_after.empty? && - @children.empty? && - (@replacement == nil || (@replacement.empty? && @range.empty?)) - end - - def ordered_replacements - reps = [] - reps << [@range.begin, @insert_before] unless @insert_before.empty? - reps << [@range, @replacement] if @replacement - reps.concat(@children.flat_map(&:ordered_replacements)) - reps << [@range.end, @insert_after] unless @insert_after.empty? - reps - end - - def nested_actions - actions = [] - actions << [:wrap, @range, @insert_before, @insert_after] if !@insert_before.empty? || - !@insert_after.empty? - actions << [:replace, @range, @replacement] if @replacement - actions.concat(@children.flat_map(&:nested_actions)) - end - - def insertion? - !insert_before.empty? || !insert_after.empty? || (replacement && !replacement.empty?) - end - - ## - # A root action has its range set to the whole source range, even - # though it typically do not act on that range. - # This method returns the action as if it was a child action with - # its range contracted. - # @return [Action] - def contract - raise 'Empty actions can not be contracted' if empty? - return self if insertion? - range = @range.with( - begin_pos: children.first.range.begin_pos, - end_pos: children.last.range.end_pos, - ) - with(range: range) - end - - ## - # @return [Action] that has been moved to the given source_buffer and with the given offset - # No check is done on validity of resulting range. - def moved(source_buffer, offset) - moved_range = ::Parser::Source::Range.new( - source_buffer, - @range.begin_pos + offset, - @range.end_pos + offset - ) - with( - range: moved_range, - children: children.map { |child| child.moved(source_buffer, offset) } - ) - end - - protected - - attr_reader :children - - def with(range: @range, enforcer: @enforcer, children: @children, insert_before: @insert_before, replacement: @replacement, insert_after: @insert_after) - children = swallow(children) if replacement - self.class.new(range, enforcer, children: children, insert_before: insert_before, replacement: replacement, insert_after: insert_after) - end - - # Assumes range.contains?(action.range) && action.children.empty? - def do_combine(action) - if action.range == @range - merge(action) - else - place_in_hierarchy(action) - end - end - - def place_in_hierarchy(action) - family = analyse_hierarchy(action) - - if family[:fusible] - fuse_deletions(action, family[:fusible], [*family[:sibbling_left], *family[:child], *family[:sibbling_right]]) - else - extra_sibbling = if family[:parent] # action should be a descendant of one of the children - family[:parent].do_combine(action) - elsif family[:child] # or it should become the parent of some of the children, - action.with(children: family[:child], enforcer: @enforcer) - .combine_children(action.children) - else # or else it should become an additional child - action - end - with(children: [*family[:sibbling_left], extra_sibbling, *family[:sibbling_right]]) - end - end - - # Assumes `more_children` all contained within `@range` - def combine_children(more_children) - more_children.inject(self) do |parent, new_child| - parent.place_in_hierarchy(new_child) - end - end - - def fuse_deletions(action, fusible, other_sibblings) - without_fusible = with(children: other_sibblings) - fused_range = [action, *fusible].map(&:range).inject(:join) - fused_deletion = action.with(range: fused_range) - without_fusible.do_combine(fused_deletion) - end - - # Similar to @children.bsearch_index || size - # except allows for a starting point - # and `bsearch_index` is only Ruby 2.3+ - def bsearch_child_index(from = 0) - size = @children.size - (from...size).bsearch { |i| yield @children[i] } || size - end - - # Returns the children in a hierarchy with respect to `action`: - # :sibbling_left, sibbling_right (for those that are disjoint from `action`) - # :parent (in case one of our children contains `action`) - # :child (in case `action` strictly contains some of our children) - # :fusible (in case `action` overlaps some children but they can be fused in one deletion) - # or raises a `CloberingError` - # In case a child has equal range to `action`, it is returned as `:parent` - # Reminder: an empty range 1...1 is considered disjoint from 1...10 - def analyse_hierarchy(action) - r = action.range - # left_index is the index of the first child that isn't completely to the left of action - left_index = bsearch_child_index { |child| child.range.end_pos > r.begin_pos } - # right_index is the index of the first child that is completely on the right of action - start = left_index == 0 ? 0 : left_index - 1 # See "corner case" below for reason of -1 - right_index = bsearch_child_index(start) { |child| child.range.begin_pos >= r.end_pos } - center = right_index - left_index - case center - when 0 - # All children are disjoint from action, nothing else to do - when -1 - # Corner case: if a child has empty range == action's range - # then it will appear to be both disjoint and to the left of action, - # as well as disjoint and to the right of action. - # Since ranges are equal, we return it as parent - left_index -= 1 # Fix indices, as otherwise this child would be - right_index += 1 # considered as a sibbling (both left and right!) - parent = @children[left_index] - else - overlap_left = @children[left_index].range.begin_pos <=> r.begin_pos - overlap_right = @children[right_index-1].range.end_pos <=> r.end_pos - - # For one child to be the parent of action, we must have: - if center == 1 && overlap_left <= 0 && overlap_right >= 0 - parent = @children[left_index] - else - # Otherwise consider all non disjoint elements (center) to be contained... - contained = @children[left_index...right_index] - fusible = check_fusible(action, - (contained.shift if overlap_left < 0), # ... but check first and last one - (contained.pop if overlap_right > 0) # ... for overlaps - ) - end - end - - { - parent: parent, - sibbling_left: @children[0...left_index], - sibbling_right: @children[right_index...@children.size], - fusible: fusible, - child: contained, - } - end - - # @param [Array(Action | nil)] fusible - def check_fusible(action, *fusible) - fusible.compact! - return if fusible.empty? - fusible.each do |child| - kind = action.insertion? || child.insertion? ? :crossing_insertions : :crossing_deletions - @enforcer.call(kind) { {range: action.range, conflict: child.range} } - end - fusible - end - - # Assumes action.range == range && action.children.empty? - def merge(action) - call_enforcer_for_merge(action) - with( - insert_before: "#{action.insert_before}#{insert_before}", - replacement: action.replacement || @replacement, - insert_after: "#{insert_after}#{action.insert_after}", - ).combine_children(action.children) - end - - def call_enforcer_for_merge(action) - @enforcer.call(:different_replacements) do - if @replacement && action.replacement && @replacement != action.replacement - {range: @range, replacement: action.replacement, other_replacement: @replacement} - end - end - end - - def swallow(children) - @enforcer.call(:swallowed_insertions) do - insertions = children.select(&:insertion?) - - {range: @range, conflict: insertions.map(&:range)} unless insertions.empty? - end - [] - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/static_environment.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/static_environment.rb deleted file mode 100644 index 44e2f1a7..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/static_environment.rb +++ /dev/null @@ -1,99 +0,0 @@ -# frozen_string_literal: true - -module Parser - - class StaticEnvironment - FORWARD_ARGS = :FORWARD_ARGS - ANONYMOUS_BLOCKARG = :ANONYMOUS_BLOCKARG - ANONYMOUS_RESTARG = :ANONYMOUS_RESTARG - ANONYMOUS_KWRESTARG = :ANONYMOUS_KWRESTARG - - def initialize - reset - end - - def reset - @variables = Set[] - @stack = [] - end - - def extend_static - @stack.push(@variables) - @variables = Set[] - - self - end - - def extend_dynamic - @stack.push(@variables) - @variables = @variables.dup - - self - end - - def unextend - @variables = @stack.pop - - self - end - - def declare(name) - @variables.add(name.to_sym) - - self - end - - def declared?(name) - @variables.include?(name.to_sym) - end - - def declare_forward_args - declare(FORWARD_ARGS) - end - - def declared_forward_args? - declared?(FORWARD_ARGS) - end - - def declare_anonymous_blockarg - declare(ANONYMOUS_BLOCKARG) - end - - def declared_anonymous_blockarg? - declared?(ANONYMOUS_BLOCKARG) - end - - def parent_has_anonymous_blockarg? - @stack.any? { |variables| variables.include?(ANONYMOUS_BLOCKARG) } - end - - def declare_anonymous_restarg - declare(ANONYMOUS_RESTARG) - end - - def declared_anonymous_restarg? - declared?(ANONYMOUS_RESTARG) - end - - def parent_has_anonymous_restarg? - @stack.any? { |variables| variables.include?(ANONYMOUS_RESTARG) } - end - - def declare_anonymous_kwrestarg - declare(ANONYMOUS_KWRESTARG) - end - - def declared_anonymous_kwrestarg? - declared?(ANONYMOUS_KWRESTARG) - end - - def parent_has_anonymous_kwrestarg? - @stack.any? { |variables| variables.include?(ANONYMOUS_KWRESTARG) } - end - - def empty? - @stack.empty? - end - end - -end diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/syntax_error.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/syntax_error.rb deleted file mode 100644 index 0ac867de..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/syntax_error.rb +++ /dev/null @@ -1,21 +0,0 @@ -# frozen_string_literal: true - -module Parser - ## - # {Parser::SyntaxError} is raised whenever parser detects a syntax error, - # similar to the standard SyntaxError class. - # - # @api public - # - # @!attribute [r] diagnostic - # @return [Parser::Diagnostic] - # - class SyntaxError < StandardError - attr_reader :diagnostic - - def initialize(diagnostic) - @diagnostic = diagnostic - super(diagnostic.message) - end - end -end diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/tree_rewriter.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/tree_rewriter.rb deleted file mode 100644 index a84d882b..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/tree_rewriter.rb +++ /dev/null @@ -1,133 +0,0 @@ -# frozen_string_literal: true - -module Parser - - ## - # {Parser::TreeRewriter} offers a basic API that makes it easy to rewrite - # existing ASTs. It's built on top of {Parser::AST::Processor} and - # {Parser::Source::TreeRewriter} - # - # For example, assume you want to remove `do` tokens from a while statement. - # You can do this as following: - # - # require 'parser/current' - # - # class RemoveDo < Parser::TreeRewriter - # def on_while(node) - # # Check if the statement starts with "do" - # if node.location.begin.is?('do') - # remove(node.location.begin) - # end - # end - # end - # - # code = <<-EOF - # while true do - # puts 'hello' - # end - # EOF - # - # ast = Parser::CurrentRuby.parse code - # buffer = Parser::Source::Buffer.new('(example)', source: code) - # rewriter = RemoveDo.new - # - # # Rewrite the AST, returns a String with the new form. - # puts rewriter.rewrite(buffer, ast) - # - # This would result in the following Ruby code: - # - # while true - # puts 'hello' - # end - # - # Keep in mind that {Parser::TreeRewriter} does not take care of indentation when - # inserting/replacing code so you'll have to do this yourself. - # - # See also [a blog entry](http://whitequark.org/blog/2013/04/26/lets-play-with-ruby-code/) - # describing rewriters in greater detail. - # - # @api public - # - class TreeRewriter < Parser::AST::Processor - ## - # Rewrites the AST/source buffer and returns a String containing the new - # version. - # - # @param [Parser::Source::Buffer] source_buffer - # @param [Parser::AST::Node] ast - # @param [Symbol] crossing_deletions:, different_replacements:, swallowed_insertions: - # policy arguments for TreeRewriter (optional) - # @return [String] - # - def rewrite(source_buffer, - ast, - **policy) - @source_rewriter = Parser::Source::TreeRewriter.new(source_buffer, **policy) - - process(ast) - - @source_rewriter.process - end - - ## - # Returns `true` if the specified node is an assignment node, returns false - # otherwise. - # - # @param [Parser::AST::Node] node - # @return [Boolean] - # - def assignment?(node) - [:lvasgn, :ivasgn, :gvasgn, :cvasgn, :casgn].include?(node.type) - end - - ## - # Removes the source range. - # - # @param [Parser::Source::Range] range - # - def remove(range) - @source_rewriter.remove(range) - end - - ## - # Wraps the given source range with the given values. - # - # @param [Parser::Source::Range] range - # @param [String] content - # - def wrap(range, before, after) - @source_rewriter.wrap(range, before, after) - end - - ## - # Inserts new code before the given source range. - # - # @param [Parser::Source::Range] range - # @param [String] content - # - def insert_before(range, content) - @source_rewriter.insert_before(range, content) - end - - ## - # Inserts new code after the given source range. - # - # @param [Parser::Source::Range] range - # @param [String] content - # - def insert_after(range, content) - @source_rewriter.insert_after(range, content) - end - - ## - # Replaces the code of the source range `range` with `content`. - # - # @param [Parser::Source::Range] range - # @param [String] content - # - def replace(range, content) - @source_rewriter.replace(range, content) - end - end - -end diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/variables_stack.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/variables_stack.rb deleted file mode 100644 index 2e27bf42..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/variables_stack.rb +++ /dev/null @@ -1,36 +0,0 @@ -# frozen_string_literal: true - -module Parser - - class VariablesStack - def initialize - @stack = [] - push - end - - def empty? - @stack.empty? - end - - def push - @stack << Set.new - end - - def pop - @stack.pop - end - - def reset - @stack.clear - end - - def declare(name) - @stack.last << name.to_sym - end - - def declared?(name) - @stack.last.include?(name.to_sym) - end - end - -end diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/version.rb b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/version.rb deleted file mode 100644 index a7dd256d..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/lib/parser/version.rb +++ /dev/null @@ -1,5 +0,0 @@ -# frozen_string_literal: true - -module Parser - VERSION = '3.3.0.5' -end diff --git a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/parser.gemspec b/bundle/ruby/3.2.0/gems/parser-3.3.0.5/parser.gemspec deleted file mode 100644 index 3c5bd3ec..00000000 --- a/bundle/ruby/3.2.0/gems/parser-3.3.0.5/parser.gemspec +++ /dev/null @@ -1,43 +0,0 @@ -# encoding: utf-8 -# frozen_string_literal: true - -require File.expand_path('../lib/parser/version', __FILE__) - -Gem::Specification.new do |spec| - spec.name = 'parser' - spec.version = Parser::VERSION - spec.authors = ['whitequark'] - spec.email = ['whitequark@whitequark.org'] - spec.description = 'A Ruby parser written in pure Ruby.' - spec.summary = spec.description - spec.homepage = 'https://github.com/whitequark/parser' - spec.license = 'MIT' - - spec.metadata = { - 'bug_tracker_uri' => 'https://github.com/whitequark/parser/issues', - 'changelog_uri' => "https://github.com/whitequark/parser/blob/v#{spec.version}/CHANGELOG.md", - 'documentation_uri' => "https://www.rubydoc.info/gems/parser/#{spec.version}", - 'source_code_uri' => "https://github.com/whitequark/parser/tree/v#{spec.version}" - } - - spec.files = Dir['bin/*', 'lib/**/*.rb', 'parser.gemspec', 'LICENSE.txt'] - spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) } - spec.require_paths = ['lib'] - - spec.required_ruby_version = '>= 2.0.0' - - spec.add_dependency 'ast', '~> 2.4.1' - spec.add_dependency 'racc' - - spec.add_development_dependency 'bundler', '>= 1.15', '< 3.0.0' - spec.add_development_dependency 'rake', '~> 13.0.1' - spec.add_development_dependency 'cliver', '~> 0.3.2' - - spec.add_development_dependency 'yard' - spec.add_development_dependency 'kramdown' - - spec.add_development_dependency 'minitest', '~> 5.10' - spec.add_development_dependency 'simplecov', '~> 0.15.1' - - spec.add_development_dependency 'gauntlet' -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/CHANGELOG.md b/bundle/ruby/3.2.0/gems/pry-0.14.2/CHANGELOG.md deleted file mode 100644 index 25ac0f98..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/CHANGELOG.md +++ /dev/null @@ -1,1141 +0,0 @@ -### master - -### [v0.14.2][v0.14.2] (January 9, 2023) - -#### Features - -* Configure `code` as a supported editor on Pry::Editor - ([#2236](https://github.com/pry/pry/pull/2236)) -* Added support for Ruby 3.2 - ([#2263](https://github.com/pry/pry/pull/2263)) -* Added support for Ruby 3.1 - ([#2228](https://github.com/pry/pry/pull/2228)) - -#### Bug fixes - -* Short circuit eval regexes in finding module definition - ([#2253](https://github.com/pry/pry/pull/2253)) -* Revert "Escape non-printing characters" - ([#2235](https://github.com/pry/pry/pull/2235)) -* Fixed bug where WeirdMethodLocator would fail to find the source of a method breaking whereami - ([#2244](https://github.com/pry/pry/pull/2244)) -* Fixed bug where pry would throw an FrozenError when dealing with incomplete tokens - ([#2136](https://github.com/pry/pry/pull/2136)) -* Restore --no-history CLI flag functionality - ([#2196](https://github.com/pry/pry/pull/2196)) -* Fixed bug where reading from the `_out_` sticky local variable could return - wrong results ([#2201](https://github.com/pry/pry/pull/2201)) - -#### Breaking Changes - -* Remove support for Ruby 1.9 and JRuby < 9.0 - ([#2239](https://github.com/pry/pry/pull/2239)) - -### [v0.14.1][v0.14.1] (April 12, 2021) - -#### Bug fixes - -* Fixed bad coloring of some RDoc-style docs - ([#2182](https://github.com/pry/pry/pull/2182)) -* Fixed broken `--plugins` option. It shows a warning now - ([#2180](https://github.com/pry/pry/pull/2180)) -* Fixed bad output on printing non-visible characters with color codes - ([#2154](https://github.com/pry/pry/pull/2154)) -* Fixed bad output when colors are disabled and a string with color codes is - printed ([#2158](https://github.com/pry/pry/pull/2158)) - -### [v0.14.0][v0.14.0] (February 8, 2021) - -#### Features - -* Made `?` an alias to `show-source -d` - ([#2133](https://github.com/pry/pry/pull/2133)) -* Added support for Ruby 3.0 - -#### Breaking changes - -* Deleted support for plugin autoloading - ([#2119](https://github.com/pry/pry/pull/2119)). In order to load a Pry plugin - you must `require` it from your `pryrc` or add it to your Gemfile. - - ```rb - # ~/.pryrc - require 'pryrc' - ``` - -### [v0.13.1][v0.13.1] (April 12, 2020) - -#### Bug fixes - -* Fixed bug where on invalid input only the last syntax error is displayed - (instead of all of them) ([#2117](https://github.com/pry/pry/pull/2117)) -* Fixed `Pry::Config` raising `NoMethodError` on undefined option instead of - returning `nil` (usually invoked via `Pry.config.foo_option` calls) - ([#2126](https://github.com/pry/pry/pull/2126)) -* Fixed `help` command not displaying regexp aliases properly - ([#2120](https://github.com/pry/pry/pull/2120)) -* Fixed `pry-backtrace` not working ([#2122](https://github.com/pry/pry/pull/2122)) - -### [v0.13.0][v0.13.0] (March 21, 2020) - -#### Features - -* Added metadata to the gem (such as changelog URI, source code URI & bug - tracker URI), so it shows on https://rubygems.org/gems/pry - ([#1869](https://github.com/pry/pry/pull/1869)) -* Added ability to forward ARGV to a Pry session via `--` (or `-`) when - launching Pry from shell - ([#1902](https://github.com/pry/pry/commit/5cd65d3c0eb053f6edcdf571eea5d0cd990626ed)) -* Added `Pry::Config::LazyValue` & `Pry::Config::MemoizedValue`, which allow - storing callable procs in the config - ([#2024](https://github.com/pry/pry/pull/2024)) -* Added the `rc_file` config option that tells Pry the path to `pryrc` - ([#2027](https://github.com/pry/pry/pull/2027)) -* Added the `--code` flag to the `wtf` command, which shows code for each - backtrace frame ([#2037](https://github.com/pry/pry/pull/2037)) -* Added the ability to paste method call chains with leading dots - ([#2060](https://github.com/pry/pry/pull/2060)) - -#### API changes - -* `Pry::Prompt` is a class now and it can be instantiated to create new prompts - on the fly that are not registered with `Pry::Prompt#add`. Learn more about - its API in the docs ([#1877](https://github.com/pry/pry/pull/1877)) - -#### Deprecations - -* Deprecated `Pry.config.exception_whitelist` in favor of - `Pry.config.unrescued_exceptions` - ([#1874](https://github.com/pry/pry/pull/1874)) -* Deprecated `Pry.config.prompt = Pry::Prompt[:simple][:value]` in favor of - `Pry.config.prompt = Pry::Prompt[:simple]` when setting Pry prompt via - `pryrc`. `Pry::Prompt[:simple]` would return an instance of `Pry::Prompt` - instead of `Hash` ([#1877](https://github.com/pry/pry/pull/1877)) -* Deprecated setting prompt via an array of two procs: - ([#1877](https://github.com/pry/pry/pull/1877)) - - ```ruby - # Deprecated, emits a warning. - Pry.config.prompt = [proc {}, proc {}] - ``` - - This will be removed in the next release. -* Deprecated the `show-doc` command. The `show-source -d` is the new recommended - way of reading docs ([#1934](https://github.com/pry/pry/pull/1934)) -* Deprecated `Pry::Command#_pry_`. Use `Pry::Command#pry_instance` instead - ([#1989](https://github.com/pry/pry/pull/1989)) - -#### Breaking changes - -* Deleted deprecated `Pry::Platform` - ([#1863](https://github.com/pry/pry/pull/1863)) -* Deleted deprecated `Pry#{input/output}_array` - ([#1884](https://github.com/pry/pry/pull/1864)) -* Deleted deprecated `Pry::Prompt::MAP` - ([#1866](https://github.com/pry/pry/pull/1866)) -* Deleted deprecated methods of `Pry::Helpers::BaseHelpers` such as `mac_osx?`, - `linux?`, `windows?`, `windows_ansi?`, `jruby?`, `jruby_19?`, `mri?`, - `mri_19?`, `mri_2?` ([#1867](https://github.com/pry/pry/pull/1867)) -* Deleted deprecated `Pry::Command#text` - ([#1865](https://github.com/pry/pry/pull/1865)) -* Deleted deprecated `Pry::Method#all_from_common` - ([#1868](https://github.com/pry/pry/pull/1868)) -* Deleted `install-command` ([#1979](https://github.com/pry/pry/pull/1979)) -* Deleted `Pry::Helpers::BaseHelpers#command_dependencies_met?` - ([#1979](https://github.com/pry/pry/pull/1979)) -* Deleted commands: `gem-cd`, `gem-install`, `gem-list`, `gem-open`, - `gem-readme`, `gem-search`, `gem-stats` - ([#1981](https://github.com/pry/pry/pull/1981)) -* Deleted deprecated commands: `edit-method` and `show-command` - ([#2001](https://github.com/pry/pry/pull/2001)) -* Deleted `Pry::Command#disabled_commands` - ([#2001](https://github.com/pry/pry/pull/2001)) -* Deleted `Pry::BlockCommand#opts` (use `#context` instead) - ([#2003](https://github.com/pry/pry/pull/2003)) -* Deleted `Pry.lazy` (use `Pry::Config::LazyValue` instead) - ([#2024](https://github.com/pry/pry/pull/2024)) - -#### Bug fixes - -* Fixed bug where using `Pry.config.prompt_name` can return a - `Pry::Config::Lazy` instead of expected instance of `String` - ([#1890](https://github.com/pry/pry/commit/c8f23b3464d596c08922dc923c64bb57488e6227)) -* Fixed `LoadError` being raised when using auto completions and Bundler - ([#1896](https://github.com/pry/pry/commit/85850f47e074fe01f93e5cb7d561e7c2de7aede9)) -* Fixed bug where `Pry.input_ring` doesn't append duplicate elements - ([#1898](https://github.com/pry/pry/pull/1898)) -* Fixed Ruby 2.6 warning about `Binding#source_location` - ([#1904](https://github.com/pry/pry/pull/1904)) -* Fixed wrong `winsize` when custom `output` is passed to Pry - ([#2045](https://github.com/pry/pry/pull/2045)) -* Fixed `XDG_CONFIG_HOME` & `XDG_DATA_HOME` precedence. When these env variables - are set, Pry no longer uses traditional files like `~/.pryrc` & - `~/.pry_history`. Instead, the env variable paths are loaded first - ([#2056](https://github.com/pry/pry/pull/2056)) -* Fixed the `$SAFE will become a normal global variable in Ruby 3.0` warning on - Ruby 2.7 ([#2107](https://github.com/pry/pry/pull/2107)) -* Fixed bug when `whereami -c` cannot show beginning of the class, which is on - the same line as another expression - ([#2098](https://github.com/pry/pry/pull/2098)) -* Fixed bug when `Object#owner` is defined, which results into somewhat broken - method introspection ([#2113](https://github.com/pry/pry/pull/2113)) -* Fixed bug when indentation leaves parts of input after pressing enter when - Readline is enabled with mode indicators for vi mode. This was supposed to be - fixed in v0.12.2 but it regressed - ([#2114](https://github.com/pry/pry/pull/2114)) - -### [v0.12.2][v0.12.2] (November 12, 2018) - -#### Bug fixes - -* Restore removed deprecations, which were removed by accident due to a bad - rebase. - -### [v0.12.1][v0.12.1] (November 12, 2018) - -#### Bug fixes - -* Stopped creating a new hash each time `Pry::Prompt#[]` is invoked - ([#1855](https://github.com/pry/pry/pull/1855)) -* Fixed `less` pager not working when it's available - ([#1861](https://github.com/pry/pry/pull/1861)) - -### [v0.12.0][v0.12.0] (November 5, 2018) - -#### Major changes - -* Dropped support for Rubinius ([#1785](https://github.com/pry/pry/pull/1785)) - -#### Features - -* Added a new command, `clear-screen`, that clears the content of the screen Pry - is running in regardless of platform (Windows or UNIX-like) - ([#1723](https://github.com/pry/pry/pull/1723)) -* Added a new command, `gem-stat`, that prints gem statistics such as gem - dependencies and downloads ([#1707](https://github.com/pry/pry/pull/1707)) -* Added support for nested exceptions for the `wtf` command - ([#1791](https://github.com/pry/pry/pull/1791)) -* Added support for dynamic prompt names - ([#1833](https://github.com/pry/pry/pull/1833)) - - ```rb - # pryrc - Pry.config.prompt_name = Pry.lazy { rand(100) } - - # Session - [1] 80(main)> - [2] 87(main)> - [3] 30(main)> - ``` -* Added support for XDG Base Directory Specification - ([#1609](https://github.com/pry/pry/pull/1609), - [#1844](https://github.com/pry/pry/pull/1844), - ([#1848](https://github.com/pry/pry/pull/1848))) -* Removed the `simple-prompt`. Use `change-prompt simple` instead. The - `list-prompt` command was removed and embedded as `change-prompt --list` - ([#1849](https://github.com/pry/pry/pull/1849)) - -#### API changes - -* The following methods started accepting the new optional `config` parameter - ([#1809](https://github.com/pry/pry/pull/1809)): - * `Pry::Helpers.tablify(things, line_length, config = Pry.config)` - * `Pry::Helpers.tablify_or_one_line(heading, things, config = Pry.config)` - * `Pry::Helpers.tablify_to_screen_width(things, options, config = Pry.config)` - * `Pry::Helpers::Table.new(items, args, config = Pry.config)` - - You are expected to pass a session-local `_pry_.config` instead of the global - one. - -* Added new method `Pry::Config.assign`, for creating a Config non-recursively - ([#1725](https://github.com/pry/pry/issues/1725)) -* Added `Pry.lazy`, which is a helper method for values that need to be - calculated dynamically. Currently, only `config.prompt_name` supports it - ([#1833](https://github.com/pry/pry/pull/1833)) -* `Pry::Prompt` responds to `.[]`, `.all` & `.add` now. The `Pry::Prompt.add` - method must be used for implementing custom prompts. See the API in the - documentation for the class ([#1846](https://github.com/pry/pry/pull/1846)) - -#### Breaking changes - -* Deleted the `Pry::Helpers::Text.bright_default` alias for - `Pry::Helpers::Text.bold` ([#1795](https://github.com/pry/pry/pull/1795)) -* `Pry::Helpers.tablify_to_screen_width(things, options, config = Pry.config)` - requires `options` or `nil` in place of them. -* `Pry::Helpers::Table.new(items, args, config = Pry.config)` requires `args` - or `nil` in place of them. -* Completely revamped `Pry::HistoryArray` - ([#1818](https://github.com/pry/pry/pull/1818)). - * It's been renamed to `Pry::Ring` - ([#1817](https://github.com/pry/pry/pull/1817)) - * The implementation has changed and as result, the following methods were - removed: - * `Pry::Ring#length` (use `Pry::Ring#count` instead) - * `#empty?`, `#each`, `#inspect`, `#pop!`, `#to_h` - * To access old Enumerable methods convert the ring to Array with `#to_a` - * Fixed indexing for elements (e.g. `_pry_.input_ring[0]` always return some - element and not `nil`) -* Renamed `Pry.config.prompt_safe_objects` to `Pry.config.prompt_safe_contexts` -* Removed deprecated `Pry::CommandSet#before_command` & - `Pry::CommandSet#after_command` ([#1838](https://github.com/pry/pry/pull/1838)) - -#### Deprecations - -* Deprecated `_pry_.input_array` & `_pry_.output_array` in favour of - `_pry_.input_ring` & `_pry_.output_ring` respectively - ([#1814](https://github.com/pry/pry/pull/1814)) -* Deprecated `Pry::Command#text`. Please use `#black`, `#white`, etc. directly - instead (as you would with helper functions from `BaseHelpers` and - `CommandHelpers`) ([#1701](https://github.com/pry/pry/pull/1701)) -* Deprecated `_pry_.input_array` & `_pry_.output_array` in favour of - `_pry_.input_ring` and `_pry_.output_ring` respectively - ([#1817](https://github.com/pry/pry/pull/1817)) -* Deprecated `Pry::Platform`. Use `Pry::Helpers::Platform` instead. Note that - `Pry::Helpers::BaseHelpers` still includes the `Platform` methods but emits a - warning. You must switch to `Pry::Helpers::Platform` in your code - ([#1838](https://github.com/pry/pry/pull/1838), - ([#1845](https://github.com/pry/pry/pull/1845))) -* Deprecated `Pry::Prompt::MAP`. You should use `Pry::Prompt.all` instead to - access the same map ([#1846](https://github.com/pry/pry/pull/1846)) - -#### Bug fixes - -* Fixed a bug where `cd Hash.new` reported `self` as an instance of Pry::Config - in the prompt ([#1725](https://github.com/pry/pry/pull/1725)) -* Silenced the `Could not find files for the given pattern(s)` error message - coming from `where` on Windows, when `less` or another pager is not installed - ([#1767](https://github.com/pry/pry/pull/1767)) -* Fixed possible double loading of Pry plugins' `cli.rb` on Ruby (>= 2.4) due to - [the `realpath` changes while invoking - `require`](https://bugs.ruby-lang.org/issues/10222) - ([#1762](https://github.com/pry/pry/pull/1762), - [#1774](https://github.com/pry/pry/pull/1762)) -* Fixed `NoMethodError` on code objects that have a comment but no source when - invoking `show-source` ([#1779](https://github.com/pry/pry/pull/1779)) -* Fixed `negative argument (ArgumentError)` upon pasting code with tabs, which - used to confuse automatic indentation - ([#1771](https://github.com/pry/pry/pull/1771)) -* Fixed Pry not being able to load history on Ruby 2.4.4+ when it contains the - null character ([#1789](https://github.com/pry/pry/pull/1789)) -* Fixed Pry raising errors on `cd`'ing into some objects that redefine - `method_missing` and `respond_to?` - ([#1811](https://github.com/pry/pry/pull/1811)) -* Fixed bug when indentation leaves parts of input after pressing enter when - Readline is enabled with mode indicators for vi mode - ([#1813](https://github.com/pry/pry/pull/1813), - [#1820](https://github.com/pry/pry/pull/1820), - [#1825](https://github.com/pry/pry/pull/1825)) -* Fixed `edit` not writing to history - ([#1749](https://github.com/pry/pry/issues/1749)) - -#### Other changes - -* Deprecated the `Data` constant to match Ruby 2.5 in the `ls` command - ([#1731](https://github.com/pry/pry/pull/1731)) - -### 0.11.3 - -#### Features - -* Add Pry::Testable, an improved modular replacement for PryTestHelpers. - **breaking change**. - -See pull request [#1679](https://github.com/pry/pry/pull/1679). - -* Add a new category module: "Pry::Platform". Loosely related to #1668 below. - -See pull request [#1670](https://github.com/pry/pry/pull/1670) - -* Add `mac_osx?` and `linux?` utility functions to Pry::Helpers::BaseHelpers. - -See pull request [#1668](https://github.com/pry/pry/pull/1668). - -* Add utility functions for drawing colorised text on a colorised background. - -See pull request [#1673](https://github.com/pry/pry/pull/1673). - -#### Bug fixes - -* Fix a case of infinite recursion in `Pry::Method::WeirdMethodLocator#find_method_in_superclass` - that users of the [Hanami](http://hanamirb.org/) web framework experienced and - reported since 2015. - -See pull request [#1689](https://github.com/pry/pry/pull/1689). - -* Fix a bug where Method objects were not returned for setters inherited - from a default (Pry::Config::Default). Eg, this is no longer an error: - - pry(main)> d = Pry::Config.from_hash({}, Pry::Config::Default.new) - pry(main)> d.method(:exception_whitelist=) # Error - -See pull request [#1688](https://github.com/pry/pry/pull/1688). - -* Do not capture unused Proc objects in Text helper methods `no_color` and `no_paging`, - for performance reasons. Improve the documentation of both methods. - -See pull request [#1691](https://github.com/pry/pry/pull/1691). - -* Fix `String#pp` output color. - -See pull request [#1674](https://github.com/pry/pry/pull/1674). - - -### 0.11.0 - -* Add alias 'whereami[?!]+' for 'whereami' command. ([#1597](https://github.com/pry/pry/pull/1597)) -* Improve Ruby 2.4 support ([#1611](https://github.com/pry/pry/pull/1611)): - * Deprecated constants are hidden from `ls` output by default, use the `-d` switch to see them. - * Fix warnings that originate in Pry while using the repl. -* Improve completion speed in large applications. ([#1588](https://github.com/pry/pry/pull/1588)) -* Pry::ColorPrinter.pp: add `newline` argument and pass it on to PP. ([#1603](https://github.com/pry/pry/pull/1603)) -* Use `less` or system pager pager on MS Windows if it is available. ([#1512](https://github.com/pry/pry/pull/1512)) -* Add `Pry.configure` as an alternative to the current way of changing configuration options in `.pryrc` files. ([#1502](https://github.com/pry/pry/pull/1502)) -* Add `Pry::Config::Behavior#eager_load!` to add a possible workaround for issues like ([#1501](https://github.com/pry/pry/issues/1501)) -* Remove Slop as a runtime dependency by vendoring v3.4 as Pry::Slop. - People can depend on Slop v4 and Pry at the same time without running into version conflicts. ([#1497](https://github.com/pry/pry/issues/1497)) -* Fix auto-indentation of code that uses a single-line rescue ([#1450](https://github.com/pry/pry/issues/1450)) -* Remove "Pry::Config#refresh", please use "Pry::Config#clear" instead. -* Defining a method called "ls" no longer breaks the "ls" command ([#1407](https://github.com/pry/pry/issues/1407)) -* Don't raise when directory permissions don't allow file expansion ([#1432](https://github.com/pry/pry/issues/1432)) -* Syntax highlight <tt> tags in documentation output. -* Add support for BasicObject subclasses who implement their own #inspect (#1341) -* Fix 'include RSpec::Matchers' at the top-level (#1277) -* Add 'gem-readme' command, prints the README file bundled with a rubygem -* Add 'gem-search' command, searches for a gem with the rubygems.org HTTP API -* Fixed bug in the `cat` command where it was impossible to use line numbers with files ([#1349](https://github.com/pry/pry/issues/1349)) -* Fixed uncaught Errno::EOPNOTSUPP exception when $stdout is a socket ([#1352](https://github.com/pry/pry/issues/1352)) -* Display a warning when you cd'ed inside a C object and executed 'show-source' without arguments ([#691](https://github.com/pry/pry/issues/691)) -* Make the stagger_output method more reliable by reusing possibly available Pry instance ([#1364](https://github.com/pry/pry/pull/1364)) -* Make the 'gem-install' message less confusing by removing backticks ([#1350](https://github.com/pry/pry/pull/1350)) -* Fixed error when Pry was trying to load incompatible versions of plugins ([#1312](https://github.com/pry/pry/issues/1312)) -* Fixed bug when `hist --clear` led to ArgumentError ([#1340](https://github.com/pry/pry/pull/1340)) -* Fixed the "uninitialized constant Pry::ObjectPath::StringScanner" exception during autocomplete ([#1330](https://github.com/pry/pry/issues/1330)) -* Secured usage of colours with special characters (RL_PROMPT_START_IGNORE and RL_PROMPT_END_IGNORE) in Pry::Helpers::Text ([#493](https://github.com/pry/pry/issues/493#issuecomment-39232771)) -* Fixed regression with `pry -e` when it messes the terminal ([#1387](https://github.com/pry/pry/issues/1387)) -* Fixed regression with space prefixes of expressions ([#1369](https://github.com/pry/pry/issues/1369)) -* Introduced the new way to define hooks for commands (with `Pry.hooks.add_hook("{before,after}_commandName")`). The old way is deprecated, but still supported (with `Pry.commands.{before,after}_command`) ([#651](https://github.com/pry/pry/issues/651)) -* Removed old API's using `Pry::Hooks.from_hash` altogether -* Removed hints on Foreman support (see [this](https://github.com/ddollar/foreman/pull/536)) -* Fixed support for the tee command ([#1334](https://github.com/pry/pry/issues/1334)) -* Implemented support for CDPATH for ShellCommand ([#1433](https://github.com/pry/pry/issues/1433), [#1434](https://github.com/pry/pry/issues/1434)) -* `Pry::CLI.parse_options` does not start Pry anymore ([#1393](https://github.com/pry/pry/pull/1393)) -* The gem uses CPU-less platforms for Windows now ([#1410](https://github.com/pry/pry/pull/1410)) -* Add `Pry::Config::Memoization` to make it easier to implement your own `Pry::Config::Default` class.([#1503](https://github.com/pry/pry/pull/1503/)) -* Lazy load the config defaults for `Pry.config.history` and `Pry.config.gist`. - -### 0.10.1 - -* Fix bugs with jruby -* Move to rspec for testing (from bacon) -* Clean up ruby warnings - -### 0.10.0 - -#### Features -* Added a `watch` command that lets you see how values change over time. -* Added an experimental `Pry.auto_resize!` method - * Makes Pry notice that your window has resized and tell Readline about it - * Fixes various bugs with command history after a window resize - * Off by default, but can be called from your `.pryrc` if you're brave -* `play` now has an `-e`/`--expression` flag - * Evaluates until the end of the first valid expression -* History gets appended to `~/.pry_history` after every input, not just at quit -* Return values render with more accurate syntax highlighting -* Return values start rendering immediately and stream into the pager -* User can override `.pryrc` location by setting `$PRYRC` env var (#893) -* User can whitelist objects whose inspect output should appear in prompt (#885) - * See `Pry.config.prompt_safe_objects` -* `whereami` is now aliased to `@` -* Added arguments to `whereami`: - * `-m` shows the surrounding method - * `-c` shows the surrounding class - * `-f` shows the entire file -* Lazy load configuration values (Pry.config). (#1096) -* Defer requiring `readline` until Pry is started for the first time. (#1117) -* Add option to disable input completer through `_pry_.config.completer = nil` -* Add `list-prompts` command. (#1175) - * Lists the available prompts available for use. -* Add `change-prompt` command. (#1175) - * Switches the current prompt, by name. -* Add `list-inspectors` command. (#1176) - * Lists the inspectors available to print Ruby return values. -* Add `change-inspector` command. (#1176) - * Switches the current inspector, by name. -* Add `show-source -e`. (#1185) - * Evaluate the given Ruby expression and show the source of its return value. -* Add `Pry.config.windows_console_warning`(#1218) - * Windows JRuby users who don't want warnings about ansicon can set - `Pry.config.windows_console_warning = false`. -* Add arguments to `play` command. - * `-p` prints the code before playing it. - * `-e` allows you to play expressions from your session. -* Add `cd -` to switch to the previous binding. -* Allow prying into frozen objects. - -#### Dependency changes - -* Remove dependency on `ffi` gem on JRuby ([#1158](https://github.com/pry/pry/issues/1158)) -* Remove optional dependency on Bond ([#1166](https://github.com/pry/pry/issues/1166)) - * Bond support has been extracted to the `pry-bond` plugin -* Remove dependency on `openstruct` ([#1096](https://github.com/pry/pry/issues/1096)) -* Drop support for Ruby 1.8.7 (0.9.12.x will continue to be available) -* Add support for Ruby 2.1 -* Require Coderay `~> 1.1.0` -* Remove deprecated hooks API ([#1209](https://github.com/pry/pry/pull/1209)) -* Add 64-bit windows support. - -#### Bug fixes, etc. -* The `gem-install` command can require gems like `net-ssh` thanks to better - logic for guessing what path to require. (#1188) -* `toggle-color` command toggles the local `_pry_.color` setting instead of the - global `Pry.color`. -* Update `Pry::CLIPPED_PRINT` to include a hex representation of object ID when - printing a return value. (#1162) -* Wrap exceptions in a proxy instead of adding singleton methods. (#1145) - * `Pry#last_exception=` now supports exception objects that have been frozen. -* `binding.pry` inside `.pryrc` file now works, with some limitations (@richo / #1118) -* Add support for BasicObjects to `ls` (#984) -* Allow `ls -c ` (#891) -* Fix indentation not working if the `mathn` stdlib was loaded (#872) -* Fix `hist`'s `--exclude-pry` switch (#874) -* Fix `gem-install` on JRuby (#870) -* Fix source lookup for instrumented classes (#923) -* Improved thread safety when multiple instances are running (#944) -* Make `edit` ignore `-n`/`--no-reload` flag and `disable_auto_reload` config - in cases where the user was editing a tempfile -* Make `gem-cd` use the most recent gem, not the oldest -* Make `install-command` honor `.gemrc` switches (#666) -* Make `hist` with no parameters show just the current session's history (#205) - * `hist --all` shows older history -* Make `-s`/`--super` flag of `show-source`/`show-doc` work when method name is - being inferred from context (#877) -* Rename `--installed-plugins` flag to `--plugins` -* Strip ANSI codes from prompt before measuring length for indentation (#493) -* Fix bug in `edit` regarding recognition of file names without suffix. -* Reduced download size by removing tests etc. from distributed gem. - -#### Dev-facing changes -* `CommandSet#commands`, sometimes referenced through `Pry.commands.commands`, - renamed to `CommandSet#to_hash`. It returns a duplicate of the internal hash - a CommandSet uses. -* `CommandSet#keys` is now an alias of `CommandSet#list_commands`. -* All commands should now reference configuration values via `_pry_.config` - (local) and not `Pry.config` (global). (#1096) - * This change improves support for concurrent environments and - context-specific Pry sessions. `_pry_.config` inherits default values from - `Pry.config` but can override them locally. -* `rake pry` now accepts switches prefixed with `_` (e.g., `rake pry _v`) -* Pagers now act like `IO`s and accept streaming output - * See `_pry_.pager.page` and `_pry_.pager.open`. -* The `Pry` class has been broken up into two smaller classes. - * `Pry` represents non-UI-specific session state, including the eval string - * `Pry::REPL` controls the user-facing interface - * This should make it easier to drive Pry from alternative interfaces - * `Pry.start` now has a `:driver` option that defaults to `Pry::REPL` - * This involved a lot of refactoring and may break plugins that depend on - the old layout -* Add `ColorPrinter` subclass of `PP` for colorized object inspection -* Add `[]` and `[]=` methods to `CommandSet`, which find and replace commands - * Example: `Pry.commands["help"] = MyHelpCommand` -* The completion API has been refactored (see fdb703a8de4ef3) -* `Pry.config.input_stack` (and the input stack concept in general) no longer - exists -* There's a new `Pry::Terminal` class that implements a number of different - methods of determining the terminal's dimensions -* Add `ReplTester` class for high-level simulation of Pry sessions in tests -* Add `Pry.main`. Returns the special instance of Object referenced by self of - `TOPLEVEL_BINDING`: "main". -* Changed second argument of `Pry.view_clip()` from Fixnum to Hash to support - returning a string with or without a hex representation of object ID. (#1162) -* The `output` and `pager` objects will now strip color-codes, so commands should - always print in color. -* Commands now have a `state` hash that is persistent across invocations of the command - in the same pry session. - -### 0.9.12.6 (2014/01/28) -* Don't fail if Bond is not installed (#1106) - -### 0.9.12.5 (2014/01/27) -* Fix early readline errors by deferring require of readline (#1081, #1095) - -### 0.9.12.4 (2013/11/23) -* Fix issue with Coderay colors being black, even when on a black background (#1016) - -### 0.9.12.3 (2013/09/11) -* Bump Coderay dependency (#987) -* Fix consecutive newlines in heredocs being collapsed (#962) -* Fix pager not working in JRuby > 1.7.5 (#992) - -### 0.9.12.2 (2013/05/10) -* Make `reload-code` with no args reload "current" file (#920) - -### 0.9.12.1 (2013/04/21) -* Add workaround for JRuby crashing bug (#890) - * Related to http://jira.codehaus.org/browse/JRUBY-7114 - -### 0.9.12 (2013/02/12) -#### Features -* `pry --gem` (see 19bfc13aa) -* `show-source` now works on commands created with `create_command` -* `whereami` now has `-m` (method), `-c` (class), and `-f` (file) options -* `show-source` now falls back to superclass (and displays warning) if it - can't find class code -* `show-source`/`show-doc` now indicate when `-a` option is available - -#### Bug fixes, etc. -* Fix commands breaking due to Slop looking at `ARGV` instead of command - parameters (#828) -* Fix pager breaking in some situations (#845) -* Fix broken rendering of some docs (#795) -* Silence warnings during failed tab-completion attempts -* Fix broken prompt when prompt is colored (#822 / #823) -* Added `reload-method` as alias for `reload-code` (for backwards - compatibility) -* Reopen `Readline.output` if it is not a tty (see 1538bc0990) - -### 0.9.11.4 (2013/01/20) -* Fix pager not rendering color codes in some circumstances -* Add `Pry.last_internal_error`, useful for devs debugging commands - -### 0.9.11.3 (2013/01/17) -* Fix `Pry.run_command` -* Improve `ls` output -* Add `:requires_gem => "jist"` to `gist` command (so dependencies can be - installed via `install-command`) -* Improve help for `edit` command - -### 0.9.11.2 (2013/01/16) -* Fix minor bug in `gist` on Windows: rescue `Jist::ClipboardError` rather - than letting the scary error spill out to users and potentially having them - think the gist didn't post. - -### 0.9.11.1 (2013/01/16) -* Fix minor bug in `gist` command where I neglected to remove - a call to a non-existent method (`no_arg`) which was called when - `gist` is invoked with no parameters - -### 0.9.11 (2013/01/16) -#### Dependency changes -* Upgrade `slop` to `~> 3.4` -* New optional dependency: `bond` - * You'll need to perform `gem install bond` - * It improves autocompletion if you use Readline - * Does not work for libedit - (More info: https://github.com/pry/pry/wiki/FAQ#wiki-readline) - * Big thanks to cldwalker - -#### Features -* Basic Ruby 2.0 support (#738) -* JRuby 1.7.0+ support (#732) -* New `reload-code` command - * Reload code for methods, classes, commands, objects and so on - * Examples: `reload-code MyClass`, `reload-code my_method`, - `reload-code my_obj` -* Bond tab completion (see "Dependency changes") -* Consolidate "show" commands into `show-source` - * `show-source` can now extract source for: - * Classes - * Methods - * Procs - * Pry commands - * Arbitrary objects (it shows the source for the class of the object) - * As a result, `show-command` is now removed -* `gist`, `play`, and `save-file` now infer object type without requiring flags - * Examples: `play MyClass`, `play my_file.rb`, `play my_method` -* Consolidate editing commands into `edit` - * `edit` can now edit: - * Files - * Methods - * Classes - * Pry commands - * As a result, `edit-method` is now removed - * Examples: `edit MyClass`, `edit my_file.rb`, `edit my_method` -* `amend-line` and `play` now properly indent code added to input buffer -* Support for multiple require switches (`pry -rubygems -r./a.rb`) (#674) -* Support for multiple exec switches (`pry -e ':one' -e ':two'`) -* Ability to customize the name displayed in the prompt (#695) -* `--patch` switch for `edit --ex` command (#716) -* Respect the `$PAGER` environment variable (#736) -* `disable-pry` command (#497) -* Two new hooks, `before_eval` and `after_eval` -* Tab completion for `Array#` in `show-source` and `show-doc` -* `gem-install` immediately requires gems -* `-l` switch for `ls` command (displays local variables) -* `gem-open` command -* `fix-indent` command -* Subcommands API -* Public test API for plugin writers (see d1489a) -* Tabular `ls` output -* `--no-line-numbers` switch for `whereami` command -* `--lines` switch for `play` command - -#### Bug fixes, etc. -* Use single escape instead of double in `find-method` (#652) -* Fix blank string delimiters (#657) -* Fix unwanted `binding_impl_method` local in scratch bindings (#622) -* Fix `edit-method -p` changing constant lookup (#645) -* Fix `.pryrc` loading twice when invoked from `$HOME` directory (#682) -* Fix Pry not remembering initial `pwd` (#675) -* Fix multiline object coloring (#717) -* Fix `show-method` not supporting `String::new` notation (#719) -* Fix `whereami` command not showing correct line numbers (#754) -* Fix buggy Cucumber AST output (#751) -* Fix `while/until do` loops indentation (#787) -* Fix `--no-plugins` switch (#526) -* Ensure all errors go to the error handler (#774) -* Fix `.pryrc` loading with wrong `__FILE__` -* Fix pager not working if `less` is not available -* Fix `^D` in nested REPL -* Many small improvements to error message clarity and documentation formatting - -### 0.9.10 (2012/07/04) -#### Dependency changes -* Upgrade `slop` to version 3 (#561) -* Switch from `gist` gem to `jist` (#590) -* Upgrade `method_source` to 0.8 - -#### Features -* Add `--hist`, `-o` and `-k` flags to `gist` command (#572) -* Support `show-source`/`show-doc` on methods defined in `class_eval` (#584) -* Support `show-source`/`show-doc` on gem methods defined in C (#585) -* Add `--disable-plugin` and `--select-plugin` options (#596) -* Allow `cd -` to switch between bindings (#597) -* Add `Pry.config.should_load_local_rc` to turn off `./.pryrc` (#612) -* Allow running a file of Pry input with `pry ` -* Support colours in `ri` command -* Add `before_eval` hook -* The prompt proc now gets a lot more data when its arity is 1 - -#### Bug fixes, etc. -* Removed the `req` command (#554) -* Fix rendering bugs when starting Pry (#567) -* Fix `Array#pretty_print` on Jruby (#568) -* Fix `edit` on Windows (#575) -* Fix `find-method` in the presence of badly behaved objects (#576) -* Fix `whereami` in ERb files on Rails (#580) -* Raise fewer exceptions while tab completing (#632) -* Don't immediately quit Pry when an error happens in Readline (#605) -* Support for `ansicon` to give JRuby Windows users colour (#606) -* Massive speed improvements to `show-source` for modules (#613) -* Improve `whereami` command when not in a `binding.pry` (#620) -* Support embedded documents (`=begin` ... `=end`) (#622) -* Support editing files with spaces in the name (#627) -* Renamed `__binding_impl__` to `__pry__` -* Support for absolute paths in `$EDITOR` -* Fix `cat` command on files with unknown extensions -* Many, many internal refactorings and tidyings - -### 0.9.9.6 (2012/05/09) -* Fix `ZeroDivisionError` in `correct_indentation` (#558) - -### 0.9.9.5 (2012/05/09) -* Fix `ZeroDivisionError` in `correct_indentation` (#558) -* Fix double highlighting in RDoc (#562) -* Automatically create configuration for plugins (#548) - -### 0.9.9.4 (2012/04/26) -* Fix `NoMethodError: undefined method `winsize' for #>` (#549) -* Fixes for JRuby -* Fix syntax error on `exit` (550) -* Heredoc content no longer auto-indented - -### 0.9.9.3 (2012/04/19) -* Fix `show-doc` failing on some core classes, like `Bignum` - -### 0.9.9.2 (2012/04/18) -* Make `correct_indentation`'s auto-colorization respect `Pry.color` - -### 0.9.9.1 (2012/04/18) -* Clear up confusion in `show-source`/`show-doc` docs - * `-a` switch applies to classes as well as modules - -### 0.9.9 (2012/04/18) -#### New features -* Lines of input are syntax highlighted upon Enter keypress -* `show-source` command can now show class/module source code - * Use `-a` to see all monkeypatches - * Hard dependency on `ruby18_source_location` gem in MRI 1.8 -* `show-doc` command can now show class/module docs - * Use `-a` to see docs for all monkeypatches - * Hard dependency on `ruby18_source_location` gem in MRI 1.8 -* New `find-method` command - * Performs a recursive search in a namespace for the existence of methods - * Can find methods whose names match a regex or methods which contain - provided code - * This command is like a ruby-aware `grep`, very cool (thanks swarley) -* [`pry-coolline`](https://github.com/pry/pry-coolline) now works properly -* `alias_command` method now much more powerful - * Example: `alias_command "lM", "ls -M"` -* `whereami` is now more intelligent - * Automatically shows entire source code of current method if current - context is a method (thanks robgleeson) -* New `raise-up` command - * Allows you to raise an exception that will bubble out of pry (ending the - session) and escape into enclosing program - -#### Bug fixes, etc. -* Fixed crash when paging under Windows -* Lines ending with `\` are incomplete (kudos to fowl) -* `edit-method -n` no longer blocks (thanks misfo) -* Show instance methods of modules by default in `ls` -* Docs for REPL-defined methods can now be displayed using `show-doc` -* Autoload `ruby18_source_location` on MRI 1.8, when available - * See https://github.com/conradirwin/ruby18_source_location -* Tab completion should work on first line now (historic bug fixed) -* `:quiet => true` option added to `Pry.start`, turns off `whereami` -* Another easter egg added -* Show unloaded constants in yellow for `ls` -* Improved documentation for `Pry.config` options -* Improved auto-indentation -* JRuby: heuristics used to clean up `ls` output - * Fewer internal methods polluting output - -### 0.9.8.4 (2012/6/3) -* ~/.pry_history wasn't being created (if it did not exist)! FIXED -* `hist --save` saved colors! FIXED -* added Pry#add_sticky_local API for adding sticky locals to individual pry instances - -### 0.9.8.3 (2012/3/2) -* various tweaks to improve rbx support -* commands now support optional block arguments -* much improved help command -* updated method_source dependency -* added wtf command -* jruby should now work in windows (though without color) - -### 0.9.8.2 (2012/2/9) -* fixed bugs related to --super -* upgraded slop dependency -* added edit -c (edit current line) -* edit now respects Pry.config.disable_autoreload option - -### 0.9.8.1 (2012/1/30) -* fixed broken --no-plugins option -* Ensure ARGV is not mutated during option parsing. -* Use a more rbx-friendly test for unicodeness -* Use rbx-{18,19}mode as indicated http://about.travis-ci.org/docs/user/languages/ruby/ -* Don't explode in gem-list [Fixes #453, #454] -* Check for command-name collision on assignment [Fixes #450] - -### 0.9.8 (2012/1/25) - -MAJOR NEW FEATURES -- upgraded command api, https://github.com/pry/pry/wiki/Custom-commands -- added a system of hooks for customizing pry behaviour -- changed syntax checking to use eval() for improved accuracy -- added save-file command -- added gist command (removed gist-method, new gist command is more general) - -complete CHANGELOG: -* CommandError's no longer cause the current input to be discarded -* Better syntax highlighting for rbx code code -* added cat --in to show pry input history -* prefixed temporary file names with 'pry' -* show-doc now supports -l and -b options (line numbers) -* play now supports -i and -d options -* moved UserCommandAPI command-set to pry-developer_tools plugin -* added :when_started event for hooks, called in Pry.start -* added a man page -* added rename method to Pry::CommandSet (commands can be renamed) -* added CommandSet#{before_command,after_command} for enhancing builtin commands -* added checking for namespace collisions with pry commands, set Pry.config.collision_warning -* work around namespace collisions by ensuring lines starting with a space are executed as -* ruby.work around namespace collisions by pressuring lines starting with a space are executed as ruby -* added handlers for Ctrl+C (SIGINT) on jruby, these are now caught as in other ruby versions -* removed dependency on ruby_parser -* prevented colours leaking across the pry prompt -* fixed edge cases in Pry::Method, for methods with crazy names and methods that have been 'undef'd -* refactored history handling code for clarity and correctness -* added Pry::WrappedModule as a counterpart to Pry::Method -* made a trailing , cause pry to wait for further input -* removed gist-method command, added gist command -* added pry-backtrace command to show history of current session -* fixed whereami within 'super' methods -* replaced inline version guards by Pry::Helpers::BaseHelpers.{rbx?,jruby?,windows?} etc. -* removed the CommandProcessor, its functionality is part of the new Command class -* changed cd .. at the top level so it doesn't quit pry. -* changed edit-command to no-longer need a command set argument -* fixed empty lines so that they don't replace _ by nil -* fixed SyntaxErrors at the REPL level so they don't replace _ex_. - -### 0.9.7.4 (2011/11/5) -* ls -M now works in modules (bugfix) -* added exception message for bad cd object/path -* no longer die when encounter exceptions in .pryrc -* baked in CoolLine support -* Pry.config.input in .pryrc now respected - -### 0.9.7.3 (2011/10/28) -* really fixed indentation for 'super if' and friends -* Fixed indentation for tmux -* added Pry.config.correct_indent option (to toggle whether indentation -* corrected optional param behaviour for method signatures: e.g Signature meth(param1=?, param2=?) - -### 0.9.7.2 (2011/10/27) -* fixed indentation for 'super if' and 'ensure', 'next if', etc -* refactored Pry#run_command so it can accept an eval_string parameter (so amend-line and so on can work with it) -* changed ^D so it no longer resets indent level automatically - -### 0.9.7.1 (2011/10/26) -* fixed gem dependency issues - -### 0.9.7 (2011/10/25) - -MAJOR NEW FEATURES: -- upgraded ls command to have a more intuitive interface -- added automatic indentation (thanks YorickPeterse!) -- added Pry::Method wrapper class to encapsulate method-related functionality - -complete CHANGELOG: -* fixed syntax highlighting for object literals -* fixed ActiveSupport method-naming conflict with "in?" -* added --super option to edit-method, show-method, and friends - making it easier to operate on superclass methods -* officially added edit --in to open previous expressions in an editor -* whereami now works for REPL-defined code -* started using JRuby parser for input validation in JRuby (thanks pangloss!) -* fixed bug where ~/.pryrc could be loaded more than once (thanks kelseyjudson!) -* added parse_options! helper to pull option parsing out of commands -* Pry now respects the terminal's input encoding -* moved some requires out of the startup process for improved speed -* added input_array info to DEFAULT_PROMPT, e.g [1] pry(main)> -* added --no-history option to pry binary (prevent history being LOADED, history will still be saved) - -### 0.9.6.2 (2011/9/27) -* downgrading to CodeRay 0.9.8 due to problems with 1.0 and rails (autoloading problem) see #280 on pry and #6 on CodeRay -* also added (as a minor feature) cirwin's implementation of edit --in -* added early break/exit for objectpath errors (the 'cd 34/@hello/bad_path/23') - -### 0.9.6 (2011/9/19) -* restored previous behavior of command-line switches (allowing "-rfilename") -* removed -p option (--play) from edit command -* `edit` with no arguments now edits the current or most recent expression -* `edit` auto-reloads .rb files (need to specify -n to suppress) -* added -p option (--patch) to edit-method command, which allows - monkeypatching methods without touching the original file -* edit-method can now edit REPL-defined methods -* cat --ex now works on exceptions in REPL-defined code -* play -m now uses eval_string.replace() -* play -m --open uses show-input to show play'd code -* added "unindent" helper to make adding help to commands easier -* local ./.pryrc now loaded after ~/.pryrc if it exists -* cat --ex N and edit --ex N now can navigate through backtrace, where cat --ex (with no args) moves through successive levels of the backtrace automatically with state stored on the exception object itself -* new option Pry.config.exception_window_size determines window size for cat --ex -* input_stack now implemented - pushing objects onto a pry instance's input_stack causes the instance to read from those objects in turn as it encounters EOF on the previous object. On finishing the input_stack the input object for the pry instance is set back to Pry.config.input, if this fails, pry breaks out of the REPL (throw(:breakout)) with an error message -* Pry.config.system() defines how pry runs system commands -* now injecting target_self method into command scope -* play now performs 'show-input' always unless eval_string contains a valid expression (i.e it's about to be eval'd) -* play and hist --replay now push the current input object onto the input_stack before redirecting input to a StringIO (works much better with pry-remote now) - -### 0.9.5 (2011/9/8) - -MAJOR NEW FEATURES: -- JRuby support, including show-method/edit-method and editor integration on both 1.8 and 1.9 versions -- extended cd syntax: cd ../@x/y -- play command now works much better with _in_ array (this is a very powerful feature, esp with Pry::NAV_PROMPT) -- history saving/loading is now lightning fast -- 'edit' (entered by itself) now opens current lines in input buffer in an editor, and evals on exit -- 'edit' command is also, in general more intelligent -- ls output no longer in array format, and colors can be configured, e.g: Pry.config.ls.ivar_color = :bright_blue -- new switch-to command for moving around the binding stack without exiting out of sessions -- more sophisticated prompts, Pry::NAV_PROMPT to ease deep spelunking of code -- major bug fix for windows systems -- much better support for huge objects, should no longer hang pry (see #245) -- cat --ex and edit --ex now work better - -complete CHANGELOG: -* tempfile should end in .rb (for edit -t) -* ls output should not be in array format -* fix history saving (should not save all of Readline::HISTORY, but only what changed) -* prevent blank lines going to Readline::HISTORY (thanks cirwin!) -* ensure that cat --ex emulates the `whereami` format - includes line numbers and formatted the same, etc -* fixed bug #200 ( https://github.com/pry/pry/issues/200 )- string interpolation bug (thanks to ryanf) -* show-doc and stat now display method visibility (update WIKI) -* got rid of warnings caused by stricter ruby 1.9.3 rules -* remove interpolation of command names and fix interpolation error message (update WIKI) (thanks ryanf!) -* 'nested sessions' now use binding stacks (so each instance manages its own collection of bindings without spawning other instances) -* 'cd ..' just pops a binding off the binding_stack with special behaviour when only one binding in stack - it breaks out of the repl loop -* added switch-to command (like jump-to but doesn't unwind the stack) -* show-method and show-doc now accept multiple method names -* control_d hook added (Pry.config.control_d_handler) -* behaviour of ^d is now to break out of current expr if in multi-line expr, or break out of current context if nested, or break out of pry repl loop if at top-level -* can no longer interpolate command name itself e.g #{x}-#{y} where x = "show" and y = "doc" -* ^C no longer captured -* got rid of Pry.active_instance, Pry.last_exception and friends. -* also special locals now shared among bindings in a pry instance (i.e _ex_ (and friends) re-injected into new binding entered with 'cd') -* renamed inp and out to _in_ and _out_ (to avoid collisions with actual locals in debugging scope) -* added third parameter to prompts, the pry instance itself (_pry) see https://github.com/pry/pry/issues/233 for why it's important -* cd behaviour when no args performs the same as `cd /` -* commands with keep_retval can now return nil (to suppress output now return 'void' instead) -* Pry::CommandProcessor::Result introduced -* Pry.view_clip() modified to be more robust and properly display Class#name -* edit command when invoked with no args now works like edit -t -* when edit is invoked (with no args or with -t) inside a multi-line expression input buffer, it dumps that buffer into a temp file and takes you to it -* got rid of Pry#null_input? since all that was needed was eval_string.empty? -* cd command now supports complex syntax: cd ../@y/y/../z -* JRuby is no longer a 2nd class citizen, almost full JRuby support, passing 100% tests -* added Pry::NAV_PROMPT (great new navigation prompt, per robgleeson) and Pry::SIMPLE_PRINT for simple (IRB-style) print output (just using inspect) -* _pry_ now passed as 3rd parameter to :before_session hook -* ls colors now configurable via Pry.config.ls.local_var_color = :bright_red etc -* ls separator configurable via, e.g Pry.config.ls.separator = " " -* Pry.view_clip() now only calls inspect on a few immediates, otherwise uses the #<> syntax, which has been truncated further to exclude teh mem address, again related to #245 - -### 0.9.3 (2011/7/27) -* cat --ex (cats 5 lines above and below line in file where exception was raised) -* edit --ex (edits line in file where exception was raised) -* edit -t (opens a temporary file and evals it in current context when closed) -* `pry -r` requires now happen after plugin loading (so as not to interfere with -* new Pry.config.disable_auto_reload option, for turning off auto reloading by edit-method and related (thanks ryanf) -* add better error messages for `cd` command -* fixed exotic object regression - BasicObject.new etc now return "=> unknown" -* added reload-method command (reloads the associated file of a method) -* converted: import => import-set, version => pry-version, install => install-command -* Pry.config.command_prefix support (thanks ryanf!) -* fixed indentation for simple-prompt -* hist command now excludes last line of input (the command invocation itself) -* hist now has `history` alias -* missing plugins no longer raise exception, just print a warning to $stderr -* fixed jedit editor support - -### 0.9.2 (2011/6/21) -* fixed string interpolation bug (caused valid ruby code not to execute, sorry!) -* fixed `ls` command, so it can properly display members of Object and classes, and BasicObject, etc -* added a few git related commands to experimental command set, blame and diff - -### 0.9.0 (2011/6/17) -* plugin system -* regex commands -* show-method works on methods defined in REPL -* new command system/API -* rubinius core support -* more backports to ruby 1.8 -* inp/out special locals -* _ex_ backtrace navigation object (_ex_.line, _ex_.file) -* readline history saving/loading -* prompt stack -* more hooks -* amend-line -* play -* show-input -* edit -* much more comprehensive test suite -* support for new and old rubygems API -* changed -s behaviour of ls (now excludes Object methods) -* removed eval-file, lls, lcd, and a few other commands - - -### 0.7.6.1 (2011/3/26) -* added slightly better support for YARD -* now @param and @return tags are colored green and markdown `code` is syntax highlighted using coderay - -### 0.7.6 (2011/3/26) -* `whereami` command now accepts parameter AROUND, to display AROUND lines on eitherside of invocation line. -* made it so `whereami` is invoked even if no method exists in current context (i.e in rspec tests) -* added rubinius support for `whereami` invocation in HOOKS by checking for __unknown__.rb rather than just
    - -### 0.7.0 (2011/3/15) -* add pry-doc support with syntax highlighting for docs -* add 'mj' option to ls (restrict to singleton methods) -* add _ex_ local to hold last exception raised in an exception - -### 0.6.8 (2011/3/6) -* add whereami command, a la the `ir_b` gem -* make whereami run at the start of every session -* make .pryrc be loaded by run-time pry sessions - -### 0.6.7 (2011/3/4) -* color support -* --simple-prompt for pry commandline -* -I mode for pry commandline -* --color mode for pry commandline -* clean up requires (put them all in one place) -* simple-prompt command and toggle-color command. - -### 0.6.3 (2011/2/28) -* Using MethodSource 0.3.4 so 1.8 show-method support provided -* `Set` class added to list of classes that are inspected - -### 0.6.1 (2011/2/26) -* !@ command alias for exit_all -* `cd /` for breaking out to pry top level (jump-to 0) -* made `-e` option work in a more effective way for `pry` command line invocation -* exit and exit-all commands now accept a parameter, this parameter becomes the return value of repl() -* `command` method from CommandBase now accepts a :keep_retval arg that determines if command value is returned to pry session or just `nil` (`nil` was old behaviour) -* tests for new :keep_retval and exit-all/exit behaviour; :keep_retval will remain undocumented. - -### 0.5.8 (2011/2/22) -* Added -c (context) option to show-doc, show-methods and eval-file -* Fixed up ordering issue of -c and -r parameters to command line pry - -### 0.5.7 (2011/2/21) -* Added pry executable, auto-loads .pryrc in user's home directory, if it - exists. - -### 0.5.5 (2011/2/19) -* Added Pry.run_command -* More useful error messages -* Easter eggs (game and cohen-poem) - -### 0.5.0 (2011/2/17) -* Use clipped version of Pry.view() for large objects -* Exit Pry session on ^d -* Use Shellwords for breaking up parameters to pry commands -* Use OptionParser to parse options for default pry commands -* Add version command -* Refactor 'status' command: add current method info -* Add meth_name_from_binding utility lambda to commands.rb -* Add -M, -m, -v(erbose), -a(ll), -s(uper), -l(ocals), -i(ivars), -k(klass - vars), etc options to ls -* add -M(instance method) options to show-method and show-doc -* add --help option to most commands -* Get rid of ls_method and ls_imethods (subsumed by more powerful ls) -* Get rid of show_idoc and show_imethod -* Add special eval-file command that evals target file in current context - -### 0.4.5 (2011/1/27) -* fixed show_method (though fragile as it references __binding_impl__ - directly, making a name change to that method difficult - -### 0.4.4 (2011/1/27) -* oops, added examples/ directory - -### 0.4.3 (2011/1/26) -* added alias_command and desc methods to Pry::CommandBase -* changed behaviour of ls_methods and ls_imethods to return sorted lists - of methods - -### 0.4.1 (2011/1/23) -* made it so a 'def meth;end' in an object Pry session defines singleton - methods, not methods on the class (except in the case of - immediates) -* reorganized documentation, moving customization to a separate wiki file -* storing wiki in a nested git repo, as github wiki pages have their own - repo -* added more tests for new method definition behaviour - -### 0.4.0 (2011/1/21) -* added command API -* added many new commands, i.e ls_methods and friends -* modified other commands -* now accepts greater customization, can modify: input, output, hooks, - prompt, print object -* added tab completion (even completes commands) -* added extensive tests -* added examples -* many more changes - -### 0.1.3 (2010/12/9) -* Got rid of rubygems dependency, refactored some code. - -### 0.1.2 (2010/12/8) -* now rescuing SyntaxError as well as Racc::Parser error in valid_expression? - -### 0.1.0 (2010/12/8) -* release! - -[v0.12.0]: https://github.com/pry/pry/releases/tag/v0.12.0 -[v0.12.1]: https://github.com/pry/pry/releases/tag/v0.12.1 -[v0.12.2]: https://github.com/pry/pry/releases/tag/v0.12.2 -[v0.13.0]: https://github.com/pry/pry/releases/tag/v0.13.0 -[v0.13.1]: https://github.com/pry/pry/releases/tag/v0.13.1 -[v0.14.0]: https://github.com/pry/pry/releases/tag/v0.14.0 -[v0.14.1]: https://github.com/pry/pry/releases/tag/v0.14.1 diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/LICENSE b/bundle/ruby/3.2.0/gems/pry-0.14.2/LICENSE deleted file mode 100644 index efe99bbf..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/LICENSE +++ /dev/null @@ -1,25 +0,0 @@ -License -------- - -(The MIT License) - -Copyright (c) 2018 John Mair (banisterfiend) - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/README.md b/bundle/ruby/3.2.0/gems/pry-0.14.2/README.md deleted file mode 100644 index ac04ea9d..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/README.md +++ /dev/null @@ -1,466 +0,0 @@ -Pry -=== - -[![Pry Build Status](https://github.com/pry/pry/workflows/pry/badge.svg)](https://github.com/pry/pry/actions) -[![Code Climate](https://codeclimate.com/github/pry/pry.svg)](https://codeclimate.com/github/pry/pry) -[![Gem Version](https://badge.fury.io/rb/pry.svg)](https://badge.fury.io/rb/pry) -[![Documentation Status](https://inch-ci.org/github/pry/pry.svg?branch=master)](https://inch-ci.org/github/pry/pry) -[![Downloads](https://img.shields.io/gem/dt/pry.svg?style=flat)](https://rubygems.org/gems/pry) - -![Pry logo](https://www.dropbox.com/s/zp8o63kquby2rln/pry_logo_350.png?raw=1) - -© John Mair ([banisterfiend](https://twitter.com/banisterfiend)) 2018
    (Creator) - -© Kyrylo Silin ([kyrylosilin](https://twitter.com/kyrylosilin)) 2018
    (Maintainer) - -**Alumni:** - -* Conrad Irwin -* Ryan Fitzgerald -* Robert Gleeson - -**Links:** - -* https://pry.github.io/ -* [YARD API documentation](https://www.rubydoc.info/gems/pry) -* [Wiki](https://github.com/pry/pry/wiki) - -Table of Contents -================= - -* [Introduction](#introduction) -* [Key features](#key-features) -* [Installation](#installation) -* [Overview](#overview) - * [Commands](#commands) - * [Navigating around state](#navigating-around-state) - * [Runtime invocation](#runtime-invocation) - * [Command Shell Integration](#command-shell-integration) - * [Code Browsing](#code-browsing) - * [Documentation Browsing](#documentation-browsing) - * [Edit methods](#edit-methods) - * [Live Help System](#live-help-system) - * [Use Pry as your Rails Console](#use-pry-as-your-rails-console) - * [Syntax Highlighting](#syntax-highlighting) -* [Supported Rubies](#supported-rubies) -* [Contact](#contact) -* [License](#license) -* [Contributors](#contributors) - -Introduction ------------- - -Pry is a runtime developer console and IRB alternative with powerful -introspection capabilities. Pry aims to be more than an IRB replacement. It is -an attempt to bring REPL driven programming to the Ruby language. - -Key features ------------- - -* Source code browsing (including core C source with the pry-doc gem) -* Documentation browsing -* Live help system -* Open methods in editors (`edit Class#method`) -* Syntax highlighting -* Command shell integration (start editors, run git, and rake from within Pry) -* Gist integration -* Navigation around state (`cd`, `ls` and friends) -* Runtime invocation (use Pry as a developer console or debugger) -* Exotic object support (BasicObject instances, IClasses, ...) -* A powerful and flexible command system -* Ability to view and replay history -* Many convenience commands inspired by IPython, Smalltalk and other advanced - REPLs -* A wide-range number of - [plugins](https://github.com/pry/pry/wiki/Available-plugins) that provide - remote sessions, full debugging functionality, and more. - -Installation ------------- - -### Bundler - -```ruby -gem 'pry', '~> 0.13.1' -``` - -### Manual - -```sh -gem install pry -``` - -Overview --------- - -Pry is fairly flexible and allows significant user -[customization](https://github.com/pry/pry/wiki/Customization-and-configuration). -It is trivial to read from any object that has a `readline` method and -write to any object that has a `puts` method. Many other aspects of Pry are -also configurable, making it a good choice for implementing custom shells. - -Pry comes with an executable so it can be invoked at the command line. Just -enter `pry` to start. A `pryrc` file in `$XDG_CONFIG_HOME/pry/` or the user's -home directory will be loaded if it exists. Type `pry --help` at the command -line for more information. - -### Commands - -Nearly every piece of functionality in a Pry session is implemented as a -command. Commands are not methods and must start at the beginning of a line, -with no whitespace in between. Commands support a flexible syntax and allow -'options' in the same way as shell commands, for example the following Pry -command will show a list of all private instance methods (in scope) that begin -with 'pa' - -```ruby -pry(YARD::Parser::SourceParser):5> ls -Mp --grep ^pa -YARD::Parser::SourceParser#methods: parse parser_class parser_type parser_type= parser_type_for_filename -``` - -### Navigating around state - -Pry allows us to pop in and out of different scopes (objects) using the `cd` -command. This enables us to explore the run-time view of a program or -library. To view which variables and methods are available within a particular -scope we use the versatile [ls -command.](https://gist.github.com/c0fc686ef923c8b87715) - -Here we will begin Pry at top-level, then Pry on a class and then on an instance -variable inside that class: - -```ruby -pry(main)> class Hello -pry(main)* @x = 20 -pry(main)* end -=> 20 -pry(main)> cd Hello -pry(Hello):1> ls -i -instance variables: @x -pry(Hello):1> cd @x -pry(20):2> self + 10 -=> 30 -pry(20):2> cd .. -pry(Hello):1> cd .. -pry(main)> cd .. -``` - -The number after the `:` in the pry prompt indicates the nesting level. To -display more information about nesting, use the `nesting` command. E.g - -```ruby -pry("friend"):3> nesting -Nesting status: -0. main (Pry top level) -1. Hello -2. 100 -3. "friend" -=> nil -``` - -We can then jump back to any of the previous nesting levels by using the -`jump-to` command: - -```ruby -pry("friend"):3> jump-to 1 -=> 100 -pry(Hello):1> -``` - -### Runtime invocation - -Pry can be invoked in the middle of a running program. It opens a Pry session at -the point it's called and makes all program state at that point available. It -can be invoked on any object using the `my_object.pry` syntax or on the current -binding (or any binding) using `binding.pry`. The Pry session will then begin -within the scope of the object (or binding). When the session ends the program -continues with any modifications you made to it. - -This functionality can be used for such things as: debugging, implementing -developer consoles and applying hot patches. - -code: - -```ruby -# test.rb -require 'pry' - -class A - def hello() puts "hello world!" end -end - -a = A.new - -# start a REPL session -binding.pry - -# program resumes here (after pry session) -puts "program resumes here." -``` - -Pry session: - -```ruby -pry(main)> a.hello -hello world! -=> nil -pry(main)> def a.goodbye -pry(main)* puts "goodbye cruel world!" -pry(main)* end -=> :goodbye -pry(main)> a.goodbye -goodbye cruel world! -=> nil -pry(main)> exit - -program resumes here. -``` - -### Command Shell Integration - -A line of input that begins with a '.' will be forwarded to the command -shell. This enables us to navigate the file system, spawn editors, and run git -and rake directly from within Pry. - -Further, we can use the `shell-mode` command to incorporate the present working -directory into the Pry prompt and bring in (limited at this stage, sorry) file -name completion. We can also interpolate Ruby code directly into the shell by -using the normal `#{}` string interpolation syntax. - -In the code below we're going to switch to `shell-mode` and edit the `pryrc` -file. We'll then cat its contents and reload the file. - -```ruby -pry(main)> shell-mode -pry main:/home/john/ruby/projects/pry $ .cd ~ -pry main:/home/john $ .emacsclient .pryrc -pry main:/home/john $ .cat .pryrc -def hello_world - puts "hello world!" -end -pry main:/home/john $ load ".pryrc" -=> true -pry main:/home/john $ hello_world -hello world! -``` - -We can also interpolate Ruby code into the shell. In the example below we use -the shell command `cat` on a random file from the current directory and count -the number of lines in that file with `wc`: - -```ruby -pry main:/home/john $ .cat #{Dir['*.*'].sample} | wc -l -44 -``` - -### Code Browsing - -You can browse method source code with the `show-source` command. Nearly all -Ruby methods (and some C methods, with the pry-doc gem) can have their source -viewed. Code that is longer than a page is sent through a pager (such as less), -and all code is properly syntax highlighted (even C code). - -The `show-source` command accepts two syntaxes, the typical ri `Class#method` -syntax and also simply the name of a method that's in scope. You can optionally -pass the `-l` option to `show-source` to include line numbers in the output. - -In the following example we will enter the `Pry` class, list the instance -methods beginning with 'se' and display the source code for the `set_last_result` method: - -```ruby -pry(main)> cd Pry -pry(Pry):1> ls -M --grep se -Pry#methods: raise_up raise_up! raise_up_common reset_eval_string select_prompt set_last_result -pry(Pry):1> show-source set_last_result -l - -From: /home/john/ruby/projects/pry/lib/pry/pry_instance.rb:405: -Owner: Pry -Visibility: public -Signature: set_last_result(result, code=?) -Number of lines: 6 - -405: def set_last_result(result, code = "") -406: @last_result_is_exception = false -407: @output_ring << result -408: -409: self.last_result = result unless code =~ /\A\s*\z/ -410: end -``` - -Note that we can also view C methods (from Ruby Core) using the -`pry-doc` plugin; we also show off the alternate syntax for -`show-source`: - -```ruby -pry(main)> show-source Array#select - -From: array.c in Ruby Core (C Method): -Number of lines: 15 - -static VALUE -rb_ary_select(VALUE ary) -{ - VALUE result; - long i; - - RETURN_ENUMERATOR(ary, 0, 0); - result = rb_ary_new2(RARRAY_LEN(ary)); - for (i = 0; i < RARRAY_LEN(ary); i++) { - if (RTEST(rb_yield(RARRAY_PTR(ary)[i]))) { - rb_ary_push(result, rb_ary_elt(ary, i)); - } - } - return result; -} -``` - -### Documentation Browsing - -One use-case for Pry is to explore a program at run-time by `cd`-ing in and out -of objects and viewing and invoking methods. In the course of exploring it may -be useful to read the documentation for a specific method that you come -across. `show-source` command supports two syntaxes - the -normal `ri` syntax as well as accepting the name of any method that is currently -in scope. - -The Pry documentation system does not rely on pre-generated `rdoc` or `ri`, -instead it grabs the comments directly above the method on demand. This results -in speedier documentation retrieval and allows the Pry system to retrieve -documentation for methods that would not be picked up by `rdoc`. Pry also has a -basic understanding of both the rdoc and yard formats and will attempt to syntax -highlight the documentation appropriately. - -Nonetheless, the `ri` functionality is very good and has an advantage over Pry's -system in that it allows documentation lookup for classes as well as -methods. Pry therefore has good integration with `ri` through the `ri` -command. The syntax for the command is exactly as it would be in command-line - -so it is not necessary to quote strings. - -In our example we will enter the `Gem` class and view the documentation for the -`try_activate` method: - -```ruby -pry(main)> cd Gem -pry(Gem):1> show-source try_activate -d - -From: /Users/john/rbenv/versions/2.7.1/lib/ruby/2.7.0/rubygems.rb:194: -Owner: # -Visibility: public -Signature: try_activate(path) -Number of lines: 28 - -Try to activate a gem containing path. Returns true if -activation succeeded or wasn't needed because it was already -activated. Returns false if it can't find the path in a gem. - -def self.try_activate(path) - # finds the _latest_ version... regardless of loaded specs and their deps - # if another gem had a requirement that would mean we shouldn't - # activate the latest version, then either it would already be activated - # or if it was ambiguous (and thus unresolved) the code in our custom - # require will try to activate the more specific version. - - spec = Gem::Specification.find_by_path path -pry(Gem):1> -``` - -We can also use `ri` in the normal way: - -```ruby -pry(main) ri Array#each ------------------------------------------------------------ Array#each - array.each {|item| block } -> array ------------------------------------------------------------------------- - Calls _block_ once for each element in _self_, passing that element - as a parameter. - - a = [ "a", "b", "c" ] - a.each {|x| print x, " -- " } - - produces: - - a -- b -- c -- -``` - -### Edit methods - -You can use `edit Class#method` or `edit my_method` (if the method is in scope) -to open a method for editing directly in your favorite editor. Pry has knowledge -of a few different editors and will attempt to open the file at the line the -method is defined. - -You can set the editor to use by assigning to the `Pry.editor` -accessor. `Pry.editor` will default to `$EDITOR` or failing that will use `nano` -as the backup default. The file that is edited will be automatically reloaded -after exiting the editor - reloading can be suppressed by passing the -`--no-reload` option to `edit` - -In the example below we will set our default editor to "emacsclient" and open -the `Pry#repl` method for editing: - -```ruby -pry(main)> Pry.editor = "emacsclient" -pry(main)> edit Pry#repl -``` - -### Live Help System - -Many other commands are available in Pry; to see the full list type `help` at -the prompt. A short description of each command is provided with basic -instructions for use; some commands have a more extensive help that can be -accessed via typing `command_name --help`. A command will typically say in its -description if the `--help` option is available. - -### Use Pry as your Rails Console - -The recommended way to use Pry as your Rails console is to add [the `pry-rails` -gem](https://github.com/rweng/pry-rails) to your Gemfile. This replaces the -default console with Pry, in addition to loading the Rails console helpers and -adding some useful Rails-specific commands. - -If you don't want to change your Gemfile, you can still run a Pry console in -your app's environment using Pry's `-r` flag: - -```sh -pry -r ./config/environment -``` - -Also check out the -[wiki](https://github.com/pry/pry/wiki/Setting-up-Rails-or-Heroku-to-use-Pry) -for more information about integrating Pry with Rails. - -### Syntax Highlighting - -Syntax highlighting is on by default in Pry. If you want to change the colors, -check out the [pry-theme](https://github.com/kyrylo/pry-theme) gem. - -You can toggle the syntax highlighting on and off in a session by using the -`toggle-color` command. Alternatively, you can turn it off permanently by -putting the line `Pry.color = false` in your `pryrc` file. - -Supported Rubies ----------------- - -* CRuby >= 2.0.0 -* JRuby >= 9.0 - -Contact -------- - -In case you have a problem, question or a bug report, feel free to: - -* ask a question on IRC (#pry on Freenode) -* [file an issue](https://github.com/pry/pry/issues) -* [tweet at us](https://twitter.com/pryruby) - -License -------- - -The project uses the MIT License. See LICENSE.md for details. - -Contributors ------------- - -Pry is primarily the work of [John Mair (banisterfiend)](https://github.com/banister), for full list -of contributors see the -[contributors graph](https://github.com/pry/pry/graphs/contributors). diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/bin/pry b/bundle/ruby/3.2.0/gems/pry-0.14.2/bin/pry deleted file mode 100755 index 7cd68cb0..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/bin/pry +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: true - -# (C) John Mair (banisterfiend) -# MIT license - -$0 = 'pry' - -require 'pry' - -# Process command line options and run Pry -opts = Pry::CLI.parse_options -Pry::CLI.start(opts) diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry.rb deleted file mode 100644 index 7ead087b..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry.rb +++ /dev/null @@ -1,145 +0,0 @@ -# frozen_string_literal: true - -# (C) John Mair (banisterfiend) 2016 -# MIT License - -require 'pry/version' -require 'pry/last_exception' -require 'pry/forwardable' - -require 'pry/helpers/base_helpers' -require 'pry/helpers/documentation_helpers' -require 'pry/helpers' - -require 'pry/basic_object' -require 'pry/prompt' -require 'pry/code_object' -require 'pry/exceptions' -require 'pry/hooks' -require 'pry/input_completer' -require 'pry/command' -require 'pry/class_command' -require 'pry/block_command' -require 'pry/command_set' -require 'pry/syntax_highlighter' -require 'pry/editor' -require 'pry/history' -require 'pry/color_printer' -require 'pry/exception_handler' -require 'pry/system_command_handler' -require 'pry/control_d_handler' -require 'pry/command_state' -require 'pry/warning' -require 'pry/env' - -Pry::Commands = Pry::CommandSet.new unless defined?(Pry::Commands) - -require 'pry/commands/ls/jruby_hacks' -require 'pry/commands/ls/methods_helper' -require 'pry/commands/ls/interrogatable' -require 'pry/commands/ls/grep' -require 'pry/commands/ls/formatter' -require 'pry/commands/ls/globals' -require 'pry/commands/ls/constants' -require 'pry/commands/ls/methods' -require 'pry/commands/ls/self_methods' -require 'pry/commands/ls/instance_vars' -require 'pry/commands/ls/local_names' -require 'pry/commands/ls/local_vars' -require 'pry/commands/ls/interrogatable' -require 'pry/commands/ls/ls_entity' -require 'pry/commands/ls/methods_helper' -require 'pry/commands/ls' - -require 'pry/config/attributable' -require 'pry/config/value' -require 'pry/config/memoized_value' -require 'pry/config/lazy_value' -require 'pry/config' - -require 'pry/pry_class' -require 'pry/pry_instance' -require 'pry/inspector' -require 'pry/pager' -require 'pry/indent' -require 'pry/object_path' -require 'pry/output' -require 'pry/input_lock' -require 'pry/repl' -require 'pry/code' -require 'pry/ring' -require 'pry/method' - -require 'pry/wrapped_module' -require 'pry/wrapped_module/candidate' - -require 'pry/slop' -require 'pry/cli' -require 'pry/core_extensions' -require 'pry/repl_file_loader' - -require 'pry/code/loc' -require 'pry/code/code_range' -require 'pry/code/code_file' - -require 'pry/method/weird_method_locator' -require 'pry/method/disowned' -require 'pry/method/patcher' - -require 'pry/commands/amend_line' -require 'pry/commands/bang' -require 'pry/commands/bang_pry' - -require 'pry/commands/cat' -require 'pry/commands/cat/abstract_formatter.rb' -require 'pry/commands/cat/input_expression_formatter.rb' -require 'pry/commands/cat/exception_formatter.rb' -require 'pry/commands/cat/file_formatter.rb' - -require 'pry/commands/cd' -require 'pry/commands/change_inspector' -require 'pry/commands/change_prompt' -require 'pry/commands/clear_screen' -require 'pry/commands/code_collector' -require 'pry/commands/disable_pry' -require 'pry/commands/easter_eggs' - -require 'pry/commands/edit' -require 'pry/commands/edit/exception_patcher' -require 'pry/commands/edit/file_and_line_locator' - -require 'pry/commands/exit' -require 'pry/commands/exit_all' -require 'pry/commands/exit_program' -require 'pry/commands/find_method' -require 'pry/commands/fix_indent' -require 'pry/commands/help' -require 'pry/commands/hist' -require 'pry/commands/import_set' -require 'pry/commands/jump_to' -require 'pry/commands/list_inspectors' - -require 'pry/commands/nesting' -require 'pry/commands/play' -require 'pry/commands/pry_backtrace' -require 'pry/commands/pry_version' -require 'pry/commands/raise_up' -require 'pry/commands/reload_code' -require 'pry/commands/reset' -require 'pry/commands/ri' -require 'pry/commands/save_file' -require 'pry/commands/shell_command' -require 'pry/commands/shell_mode' -require 'pry/commands/show_info' -require 'pry/commands/show_doc' -require 'pry/commands/show_input' -require 'pry/commands/show_source' -require 'pry/commands/stat' -require 'pry/commands/switch_to' -require 'pry/commands/toggle_color' - -require 'pry/commands/watch_expression' -require 'pry/commands/watch_expression/expression.rb' - -require 'pry/commands/whereami' -require 'pry/commands/wtf' diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/basic_object.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/basic_object.rb deleted file mode 100644 index fca81d86..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/basic_object.rb +++ /dev/null @@ -1,10 +0,0 @@ -# frozen_string_literal: true - -class Pry - class BasicObject < BasicObject - %i[Kernel File Dir LoadError ENV Pry].each do |constant| - const_set constant, ::Object.const_get(constant) - end - include Kernel - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/block_command.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/block_command.rb deleted file mode 100644 index bf74955f..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/block_command.rb +++ /dev/null @@ -1,22 +0,0 @@ -# frozen_string_literal: true - -class Pry - # A super-class for Commands that are created with a single block. - # - # This class ensures that the block is called with the correct number of - # arguments and the right context. - # - # Create subclasses using {Pry::CommandSet#command}. - class BlockCommand < Command - # Call the block that was registered with this command. - # @param [Array] args The arguments passed - # @return [Object] The return value of the block - def call(*args) - instance_exec(*normalize_method_args(block, args), &block) - end - - def help - "#{command_options[:listing].to_s.ljust(18)} #{description}" - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/class_command.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/class_command.rb deleted file mode 100644 index d8a4c6fc..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/class_command.rb +++ /dev/null @@ -1,194 +0,0 @@ -# frozen_string_literal: true - -class Pry - # A super-class of Commands with structure. - # - # This class implements the bare-minimum functionality that a command should - # have, namely a --help switch, and then delegates actual processing to its - # subclasses. - # - # Create subclasses using {Pry::CommandSet#create_command}, and override the - # `options(opt)` method to set up an instance of Pry::Slop, and the `process` - # method to actually run the command. If necessary, you can also override - # `setup` which will be called before `options`, for example to require any - # gems your command needs to run, or to set up state. - class ClassCommand < Command - class << self - # Ensure that subclasses inherit the options, description and - # match from a ClassCommand super class. - def inherited(klass) - klass.match match - klass.description description - klass.command_options options - end - - def source - source_object.source - end - - def doc - new.help - end - - def source_location - source_object.source_location - end - - def source_file - source_object.source_file - end - alias file source_file - - def source_line - source_object.source_line - end - alias line source_line - - private - - # The object used to extract the source for the command. - # - # This should be a `Pry::Method(block)` for a command made with `create_command` - # and a `Pry::WrappedModule(self)` for a command that's a standard class. - # @return [Pry::WrappedModule, Pry::Method] - def source_object - @source_object ||= if name =~ /^[A-Z]/ - Pry::WrappedModule(self) - else - Pry::Method(block) - end - end - end - - attr_accessor :opts - attr_accessor :args - - # Set up `opts` and `args`, and then call `process`. - # - # This method will display help if necessary. - # - # @param [Array] args The arguments passed - # @return [Object] The return value of `process` or VOID_VALUE - def call(*args) - setup - - self.opts = slop - self.args = opts.parse!(args) - - if opts.present?(:help) - output.puts slop.help - void - else - process(*normalize_method_args(method(:process), args)) - end - end - - # Return the help generated by Pry::Slop for this command. - def help - slop.help - end - - # Return an instance of Pry::Slop that can parse either subcommands or the - # options that this command accepts. - def slop - Pry::Slop.new do |opt| - opt.banner(unindent(self.class.banner)) - subcommands(opt) - options(opt) - opt.on :h, :help, 'Show this message.' - end - end - - # Generate shell completions - # @param [String] search The line typed so far - # @return [Array] the words to complete - def complete(search) - slop.flat_map do |opt| - [opt.long && "--#{opt.long} " || opt.short && "-#{opt.short}"] - end.compact + super - end - - # A method called just before `options(opt)` as part of `call`. - # - # This method can be used to set up any context your command needs to run, - # for example requiring gems, or setting default values for options. - # - # @example - # def setup - # require 'gist' - # @action = :method - # end - def setup; end - - # A method to setup Pry::Slop commands so it can parse the subcommands your - # command expects. If you need to set up default values, use `setup` - # instead. - # - # @example A minimal example - # def subcommands(cmd) - # cmd.command :download do |opt| - # description 'Downloads a content from a server' - # - # opt.on :verbose, 'Use verbose output' - # - # run do |options, arguments| - # ContentDownloader.download(options, arguments) - # end - # end - # end - # - # @example Define the invokation block anywhere you want - # def subcommands(cmd) - # cmd.command :download do |opt| - # description 'Downloads a content from a server' - # - # opt.on :verbose, 'Use verbose output' - # end - # end - # - # def process - # # Perform calculations... - # opts.fetch_command(:download).run do |options, arguments| - # ContentDownloader.download(options, arguments) - # end - # # More calculations... - # end - def subcommands(cmd); end - - # A method to setup Pry::Slop so it can parse the options your command expects. - # - # @note Please don't do anything side-effecty in the main part of this - # method, as it may be called by Pry at any time for introspection reasons. - # If you need to set up default values, use `setup` instead. - # - # @example - # def options(opt) - # opt.banner "Gists methods or classes" - # opt.on(:c, :class, "gist a class") do - # @action = :class - # end - # end - def options(opt); end - - # The actual body of your command should go here. - # - # The `opts` mehod can be called to get the options that Pry::Slop has passed, - # and `args` gives the remaining, unparsed arguments. - # - # The return value of this method is discarded unless the command was - # created with `:keep_retval => true`, in which case it is returned to the - # repl. - # - # @example - # def process - # if opts.present?(:class) - # gist_class - # else - # gist_method - # end - # end - def process - raise CommandError, "command '#{command_name}' not implemented" - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/cli.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/cli.rb deleted file mode 100644 index f20c10fa..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/cli.rb +++ /dev/null @@ -1,207 +0,0 @@ -# frozen_string_literal: true - -require 'stringio' - -class Pry - # Manage the processing of command line options - class CLI - NoOptionsError = Class.new(StandardError) - - class << self - # @return [Proc] The Proc defining the valid command line options. - attr_accessor :options - - # @return [Array] The Procs that process the parsed options. Plugins can - # utilize this facility in order to add and process their own Pry - # options. - attr_accessor :option_processors - - # @return [Array] The input array of strings to process - # as CLI options. - attr_accessor :input_args - - # Add another set of CLI options (a Pry::Slop block) - def add_options(&block) - if options - old_options = options - self.options = proc do - instance_exec(&old_options) - instance_exec(&block) - end - else - self.options = block - end - - self - end - - # Add a block responsible for processing parsed options. - def add_option_processor(&block) - self.option_processors ||= [] - option_processors << block - - self - end - - # Clear `options` and `option_processors` - def reset - self.options = nil - self.option_processors = nil - end - - def parse_options(args = ARGV) - unless options - raise NoOptionsError, - "No command line options defined! Use Pry::CLI.add_options to " \ - "add command line options." - end - - @pass_argv = args.index { |cli_arg| %w[- --].include?(cli_arg) } - if @pass_argv - slop_args = args[0...@pass_argv] - self.input_args = args.replace(args[@pass_argv + 1..-1]) - else - self.input_args = slop_args = args - end - - begin - opts = Pry::Slop.parse!( - slop_args, - help: true, - multiple_switches: false, - strict: true, - &options - ) - rescue Pry::Slop::InvalidOptionError - # Display help message on unknown switches and exit. - puts Pry::Slop.new(&options) - Kernel.exit - end - - Pry.initial_session_setup - Pry.final_session_setup - - # Option processors are optional. - option_processors.each { |processor| processor.call(opts) } if option_processors - - opts - end - - def start(opts) - Kernel.exit if opts.help? - - # invoked via cli - Pry.cli = true - - # create the actual context - if opts[:context] - Pry.initial_session_setup - context = Pry.binding_for(eval(opts[:context])) # rubocop:disable Security/Eval - Pry.final_session_setup - else - context = Pry.toplevel_binding - end - - if !@pass_argv && Pry::CLI.input_args.any? && Pry::CLI.input_args != ["pry"] - full_name = File.expand_path(Pry::CLI.input_args.first) - Pry.load_file_through_repl(full_name) - Kernel.exit - end - - # Start the session (running any code passed with -e, if there is any) - Pry.start(context, input: StringIO.new(Pry.config.exec_string)) - end - end - - reset - end -end - -# The default Pry command line options (before plugin options are included) -Pry::CLI.add_options do - banner( - "Usage: pry [OPTIONS]\n" \ - "Start a Pry session.\n" \ - "See http://pry.github.io/ for more information.\n" \ - "Copyright (c) 2016 John Mair (banisterfiend)" \ - ) - - on( - :e, :exec=, "A line of code to execute in context before the session starts" - ) do |input| - Pry.config.exec_string += "\n" unless Pry.config.exec_string.empty? - Pry.config.exec_string += input - end - - on "no-pager", "Disable pager for long output" do - Pry.config.pager = false - end - - on "no-history", "Disable history loading" do - Pry.config.history_load = false - end - - on "no-color", "Disable syntax highlighting for session" do - Pry.config.color = false - end - - on :f, "Suppress loading of pryrc" do - Pry.config.should_load_rc = false - Pry.config.should_load_local_rc = false - end - - on :s, "select-plugin=", "Only load specified plugin (and no others)." do |_plugin_name| - warn "The --select-plugin option is deprecated and has no effect" - end - - on :d, "disable-plugin=", "Disable a specific plugin." do |_plugin_name| - warn "The --disable-plugin option is deprecated and has no effect" - end - - on "no-plugins", "Suppress loading of plugins." do - warn "The --no-plugins option is deprecated and has no effect" - end - - on "plugins", "List installed plugins." do - warn "The --plugins option is deprecated and has no effect" - warn "Try using `gem list pry-`" - Kernel.exit - end - - on "simple-prompt", "Enable simple prompt mode" do - Pry.config.prompt = Pry::Prompt[:simple] - end - - on "noprompt", "No prompt mode" do - Pry.config.prompt = Pry::Prompt[:none] - end - - on :r, :require=, "`require` a Ruby script at startup" do |file| - Pry.config.requires << file - end - - on(:I=, "Add a path to the $LOAD_PATH", as: Array, delimiter: ":") do |load_path| - load_path.map! do |path| - %r{\A\./} =~ path ? path : File.expand_path(path) - end - - $LOAD_PATH.unshift(*load_path) - end - - on "gem", "Shorthand for -I./lib -rgemname" do |_load_path| - $LOAD_PATH.unshift("./lib") - Dir["./lib/*.rb"].each do |file| - Pry.config.requires << file - end - end - - on :v, :version, "Display the Pry version" do - puts "Pry version #{Pry::VERSION} on Ruby #{RUBY_VERSION}" - Kernel.exit - end - - on :c, :context=, - "Start the session in the specified context. Equivalent to " \ - "`context.pry` in a session.", - default: "Pry.toplevel_binding" -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/code.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/code.rb deleted file mode 100644 index 3f3f9238..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/code.rb +++ /dev/null @@ -1,357 +0,0 @@ -# frozen_string_literal: true - -require 'method_source' - -class Pry - class << self - # Convert the given object into an instance of `Pry::Code`, if it isn't - # already one. - # - # @param [Code, Method, UnboundMethod, Proc, Pry::Method, String, Array, - # IO] obj - def Code(obj) - case obj - when Code - obj - when ::Method, UnboundMethod, Proc, Pry::Method - Code.from_method(obj) - else - Code.new(obj) - end - end - end - - # `Pry::Code` is a class that encapsulates lines of source code and their - # line numbers and formats them for terminal output. It can read from a file - # or method definition or be instantiated with a `String` or an `Array`. - # - # In general, the formatting methods in `Code` return a new `Code` object - # which will format the text as specified when `#to_s` is called. This allows - # arbitrary chaining of formatting methods without mutating the original - # object. - class Code - class << self - include MethodSource::CodeHelpers - - # Instantiate a `Code` object containing code loaded from a file or - # Pry's line buffer. - # - # @param [String] filename The name of a file, or "(pry)". - # @param [Symbol] code_type The type of code the file contains. - # @return [Code] - def from_file(filename, code_type = nil) - code_file = CodeFile.new(filename, code_type) - new(code_file.code, 1, code_file.code_type) - end - - # Instantiate a `Code` object containing code extracted from a - # `::Method`, `UnboundMethod`, `Proc`, or `Pry::Method` object. - # - # @param [::Method, UnboundMethod, Proc, Pry::Method] meth The method - # object. - # @param [Integer, nil] start_line The line number to start on, or nil to - # use the method's original line numbers. - # @return [Code] - def from_method(meth, start_line = nil) - meth = Pry::Method(meth) - start_line ||= meth.source_line || 1 - new(meth.source, start_line, meth.source_type) - end - - # Attempt to extract the source code for module (or class) `mod`. - # - # @param [Module, Class] mod The module (or class) of interest. - # @param [Integer] candidate_rank The module candidate (by rank) - # to use (see `Pry::WrappedModule::Candidate` for more information). - # @param [Integer, nil] start_line The line number to start on, or nil to - # use the method's original line numbers. - # @return [Code] - def from_module(mod, candidate_rank = 0, start_line = nil) - candidate = Pry::WrappedModule(mod).candidate(candidate_rank) - start_line ||= candidate.line - new(candidate.source, start_line, :ruby) - end - end - - # @return [Symbol] The type of code stored in this wrapper. - attr_accessor :code_type - - # Instantiate a `Code` object containing code from the given `Array`, - # `String`, or `IO`. The first line will be line 1 unless specified - # otherwise. If you need non-contiguous line numbers, you can create an - # empty `Code` object and then use `#push` to insert the lines. - # - # @param [Array, String, IO] lines - # @param [Integer?] start_line - # @param [Symbol?] code_type - def initialize(lines = [], start_line = 1, code_type = :ruby) - lines = lines.lines if lines.is_a? String - @lines = lines.each_with_index.map do |line, lineno| - LOC.new(line, lineno + start_line.to_i) - end - @code_type = code_type - - @with_marker = @with_indentation = @with_line_numbers = nil - end - - # Append the given line. +lineno+ is one more than the last existing - # line, unless specified otherwise. - # - # @param [String] line - # @return [void] - def push(line) - line_number = @lines.any? ? @lines.last.lineno + 1 : 1 - @lines.push(LOC.new(line, line_number)) - end - alias << push - - # Filter the lines using the given block. - # - # @yield [LOC] - # @return [Code] - def select(&block) - alter do - @lines = @lines.select(&block) - end - end - - # Filter the lines using the given block. - # - # @yield [LOC] - # @return [Code] - def reject(&block) - alter do - @lines = @lines.reject(&block) - end - end - - # Remove all lines that aren't in the given range, expressed either as a - # `Range` object or a first and last line number (inclusive). Negative - # indices count from the end of the array of lines. - # - # @param [Range, Integer] start_line - # @param [Integer?] end_line - # @return [Code] - def between(start_line, end_line = nil) - return self unless start_line - - code_range = CodeRange.new(start_line, end_line) - - alter do - @lines = @lines[code_range.indices_range(@lines)] || [] - end - end - - # Take `num_lines` from `start_line`, forward or backwards. - # - # @param [Integer] start_line - # @param [Integer] num_lines - # @return [Code] - def take_lines(start_line, num_lines) - start_idx = - if start_line >= 0 - @lines.index { |loc| loc.lineno >= start_line } || @lines.length - else - [@lines.length + start_line, 0].max - end - - alter do - @lines = @lines.slice(start_idx, num_lines) - end - end - - # Remove all lines except for the +lines+ up to and excluding +lineno+. - # - # @param [Integer] lineno - # @param [Integer] lines - # @return [Code] - def before(lineno, lines = 1) - return self unless lineno - - select do |loc| - loc.lineno >= lineno - lines && loc.lineno < lineno - end - end - - # Remove all lines except for the +lines+ on either side of and including - # +lineno+. - # - # @param [Integer] lineno - # @param [Integer] lines - # @return [Code] - def around(lineno, lines = 1) - return self unless lineno - - select do |loc| - loc.lineno >= lineno - lines && loc.lineno <= lineno + lines - end - end - - # Remove all lines except for the +lines+ after and excluding +lineno+. - # - # @param [Integer] lineno - # @param [Integer] lines - # @return [Code] - def after(lineno, lines = 1) - return self unless lineno - - select do |loc| - loc.lineno > lineno && loc.lineno <= lineno + lines - end - end - - # Remove all lines that don't match the given `pattern`. - # - # @param [Regexp] pattern - # @return [Code] - def grep(pattern) - return self unless pattern - - pattern = Regexp.new(pattern) - - select do |loc| - loc.line =~ pattern - end - end - - # Format output with line numbers next to it, unless `y_n` is falsy. - # - # @param [Boolean?] y_n - # @return [Code] - def with_line_numbers(y_n = true) - alter do - @with_line_numbers = y_n - end - end - - # Format output with a marker next to the given +lineno+, unless +lineno+ is - # falsy. - # - # @param [Integer?] lineno - # @return [Code] - def with_marker(lineno = 1) - alter do - @with_marker = !!lineno - @marker_lineno = lineno - end - end - - # Format output with the specified number of spaces in front of every line, - # unless `spaces` is falsy. - # - # @param [Integer?] spaces - # @return [Code] - def with_indentation(spaces = 0) - alter do - @with_indentation = !!spaces - @indentation_num = spaces - end - end - - # @return [Integer] the number of digits in the last line. - def max_lineno_width - !@lines.empty? ? @lines.last.lineno.to_s.length : 0 - end - - # @return [String] a formatted representation (based on the configuration of - # the object). - def to_s - print_to_output(''.dup, false) - end - - # @return [String] a (possibly highlighted) copy of the source code. - def highlighted - print_to_output(''.dup, true) - end - - # Writes a formatted representation (based on the configuration of the - # object) to the given output, which must respond to `#<<`. - def print_to_output(output, color = false) - @lines.each do |loc| - loc = loc.dup - loc.colorize(@code_type) if color - loc.add_line_number(max_lineno_width, color) if @with_line_numbers - loc.add_marker(@marker_lineno) if @with_marker - loc.indent(@indentation_num) if @with_indentation - output << loc.line - output << "\n" - end - output - end - - # Get the comment that describes the expression on the given line number. - # - # @param [Integer] line_number (1-based) - # @return [String] the code. - def comment_describing(line_number) - self.class.comment_describing(raw, line_number) - end - - # Get the multiline expression that starts on the given line number. - # - # @param [Integer] line_number (1-based) - # @return [String] the code. - def expression_at(line_number, consume = 0) - self.class.expression_at(raw, line_number, consume: consume) - end - - # Get the (approximate) Module.nesting at the give line number. - # - # @param [Integer] line_number line number starting from 1 - # @return [Array] a list of open modules. - def nesting_at(line_number) - Pry::Indent.nesting_at(raw, line_number) - end - - # Return an unformatted String of the code. - # - # @return [String] - def raw - @lines.map(&:line).join("\n") << "\n" - end - - # Return the number of lines stored. - # - # @return [Integer] - def length - @lines ? @lines.length : 0 - end - - # Two `Code` objects are equal if they contain the same lines with the same - # numbers. Otherwise, call `to_s` and `chomp` and compare as Strings. - # - # @param [Code, Object] other - # @return [Boolean] - def ==(other) - if other.is_a?(Code) - other_lines = other.instance_variable_get(:@lines) - @lines.each_with_index.all? { |loc, i| loc == other_lines[i] } - else - to_s.chomp == other.to_s.chomp - end - end - - # Forward any missing methods to the output of `#to_s`. - def method_missing(method_name, *args, &block) - if (string = to_s).respond_to?(method_name) - string.__send__(method_name, *args, &block) - else - super - end - end - undef =~ if method_defined?(:=~) - - # Check whether String responds to missing methods. - def respond_to_missing?(method_name, include_private = false) - ''.respond_to?(method_name, include_private) || super - end - - protected - - # An abstraction of the `dup.instance_eval` pattern used throughout this - # class. - def alter(&block) - dup.tap { |o| o.instance_eval(&block) } - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/code/code_file.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/code/code_file.rb deleted file mode 100644 index c079ce7d..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/code/code_file.rb +++ /dev/null @@ -1,114 +0,0 @@ -# frozen_string_literal: true - -require 'method_source' - -class Pry - class CodeFile - DEFAULT_EXT = '.rb'.freeze - - # List of all supported languages. - # @return [Hash] - EXTENSIONS = { - %w[.py] => :python, - %w[.js] => :javascript, - %w[.css] => :css, - %w[.xml] => :xml, - %w[.php] => :php, - %w[.html] => :html, - %w[.diff] => :diff, - %w[.java] => :java, - %w[.json] => :json, - %w[.c .h] => :c, - %w[.rhtml] => :rhtml, - %w[.yaml .yml] => :yaml, - %w[.cpp .hpp .cc .h .cxx] => :cpp, - %w[.rb .ru .irbrc .gemspec .pryrc .rake] => :ruby - }.freeze - - FILES = { - %w[Gemfile Rakefile Guardfile Capfile] => :ruby - }.freeze - - # Store the current working directory. This allows show-source etc. to work if - # your process has changed directory since boot. [Issue #675] - INITIAL_PWD = Dir.pwd - - # @return [Symbol] The type of code stored in this wrapper. - attr_reader :code_type - - # @param [String] filename The name of a file with code to be detected - # @param [Symbol] code_type The type of code the `filename` contains - def initialize(filename, code_type = type_from_filename(filename)) - @filename = filename - @code_type = code_type - end - - # @return [String] The code contained in the current `@filename`. - def code - if @filename == Pry.eval_path - Pry.line_buffer.drop(1) - elsif Pry::Method::Patcher.code_for(@filename) - Pry::Method::Patcher.code_for(@filename) - else - path = abs_path - @code_type = type_from_filename(path) - File.read(path) - end - end - - private - - # @raise [MethodSource::SourceNotFoundError] if the `filename` is not - # readable for some reason. - # @return [String] absolute path for the given `filename`. - def abs_path - code_path.detect { |path| readable?(path) } || - raise(MethodSource::SourceNotFoundError, - "Cannot open #{@filename.inspect} for reading.") - end - - # @param [String] path - # @return [Boolean] if the path, with or without the default ext, - # is a readable file then `true`, otherwise `false`. - def readable?(path) - File.readable?(path) && !File.directory?(path) || - File.readable?(path << DEFAULT_EXT) - end - - # @return [Array] All the paths that contain code that Pry can use for its - # API's. Skips directories. - def code_path - [from_pwd, from_pry_init_pwd, *from_load_path] - end - - # @param [String] filename - # @param [Symbol] default (:unknown) the file type to assume if none could be - # detected. - # @return [Symbol, nil] The SyntaxHighlighter type of a file from its - # extension, or `nil` if `:unknown`. - def type_from_filename(filename, default = :unknown) - _, @code_type = EXTENSIONS.find do |k, _| - k.any? { |ext| ext == File.extname(filename) } - end || FILES.find do |k, _| - k.any? { |file_name| file_name == File.basename(filename) } - end - - code_type || default - end - - # @return [String] - def from_pwd - File.expand_path(@filename, Dir.pwd) - end - - # @return [String] - def from_pry_init_pwd - File.expand_path(@filename, INITIAL_PWD) - end - - # @return [String] - def from_load_path - $LOAD_PATH.map { |path| File.expand_path(@filename, path) } - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/code/code_range.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/code/code_range.rb deleted file mode 100644 index 83f7b777..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/code/code_range.rb +++ /dev/null @@ -1,73 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Code - # Represents a range of lines in a code listing. - # - # @api private - class CodeRange - # @param [Integer] start_line - # @param [Integer?] end_line - def initialize(start_line, end_line = nil) - @start_line = start_line - @end_line = end_line - force_set_end_line - end - - # @param [Array] lines - # @return [Range] - def indices_range(lines) - Range.new(*indices(lines)) - end - - private - - attr_reader :start_line - - attr_reader :end_line - - # If `end_line` is equal to `nil`, then calculate it from the first - # parameter, `start_line`. Otherwise, leave it as it is. - # @return [void] - def force_set_end_line - if start_line.is_a?(Range) - set_end_line_from_range - else - @end_line ||= start_line - end - end - - # Finds indices of `start_line` and `end_line` in the given Array of - # +lines+. - # - # @param [Array] lines - # @return [Array] - def indices(lines) - [find_start_index(lines), find_end_index(lines)] - end - - # @return [Integer] - def find_start_index(lines) - return start_line if start_line < 0 - - lines.index { |loc| loc.lineno >= start_line } || lines.length - end - - # @return [Integer] - def find_end_index(lines) - return end_line if end_line < 0 - - (lines.index { |loc| loc.lineno > end_line } || 0) - 1 - end - - # For example, if the range is 4..10, then `start_line` would be equal to - # 4 and `end_line` to 10. - # @return [void] - def set_end_line_from_range - @end_line = start_line.last - @end_line -= 1 if start_line.exclude_end? - @start_line = start_line.first - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/code/loc.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/code/loc.rb deleted file mode 100644 index 8cb3d8fe..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/code/loc.rb +++ /dev/null @@ -1,105 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Code - # Represents a line of code (which may, in fact, contain multiple lines if - # the entirety was eval'd as a single unit following the `edit` command). - # - # A line of code is a tuple, which consists of a line and a line number. A - # `LOC` object's state (namely, the line parameter) can be changed via - # instance methods. `Pry::Code` heavily uses this class. - # - # @api private - # @example - # loc = LOC.new("def example\n :example\nend", 1) - # puts loc.line - # def example - # :example - # end - # #=> nil - # - # loc.indent(3) - # loc.line #=> " def example\n :example\nend" - class LOC - # @return [Array] - attr_reader :tuple - - # @param [String] line The line of code. - # @param [Integer] lineno The position of the +line+. - def initialize(line, lineno) - @tuple = [line.chomp, lineno.to_i] - end - - # @return [Boolean] - def ==(other) - other.tuple == tuple - end - - def dup - self.class.new(line, lineno) - end - - # @return [String] - def line - tuple.first - end - - # @return [Integer] - def lineno - tuple.last - end - - # Paints the `line` of code. - # - # @param [Symbol] code_type - # @return [void] - def colorize(code_type) - tuple[0] = SyntaxHighlighter.highlight(line, code_type) - end - - # Prepends the line number `lineno` to the `line`. - # - # @param [Integer] max_width - # @return [void] - def add_line_number(max_width = 0, color = false) - padded = lineno.to_s.rjust(max_width) - colorized_lineno = - if color - Pry::Helpers::BaseHelpers.colorize_code(padded) - else - padded - end - properly_padded_line = handle_multiline_entries_from_edit_command(line, max_width) - tuple[0] = "#{colorized_lineno}: #{properly_padded_line}" - end - - # Prepends a marker "=>" or an empty marker to the +line+. - # - # @param [Integer] marker_lineno If it is equal to the `lineno`, then - # prepend a hashrocket. Otherwise, an empty marker. - # @return [void] - def add_marker(marker_lineno) - tuple[0] = - if lineno == marker_lineno - " => #{line}" - else - " #{line}" - end - end - - # Indents the `line` with +distance+ spaces. - # - # @param [Integer] distance - # @return [void] - def indent(distance) - tuple[0] = "#{' ' * distance}#{line}" - end - - def handle_multiline_entries_from_edit_command(line, max_width) - line.split("\n").map.with_index do |inner_line, i| - i.zero? ? inner_line : "#{' ' * (max_width + 2)}#{inner_line}" - end.join("\n") - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/code_object.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/code_object.rb deleted file mode 100644 index 931e28d6..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/code_object.rb +++ /dev/null @@ -1,197 +0,0 @@ -# frozen_string_literal: true - -class Pry - # This class is responsible for taking a string (identifying a - # command/class/method/etc) and returning the relevant type of object. - # For example, if the user looks up "show-source" then a - # `Pry::Command` will be returned. Alternatively, if the user passes in "Pry#repl" then - # a `Pry::Method` object will be returned. - # - # The `CodeObject.lookup` method is responsible for 1. figuring out what kind of - # object the user wants (applying precedence rules in doing so -- i.e methods - # get precedence over commands with the same name) and 2. Returning - # the appropriate object. If the user fails to provide a string - # identifer for the object (i.e they pass in `nil` or "") then the - # object looked up will be the 'current method' or 'current class' - # associated with the Binding. - # - # TODO: This class is a clusterfuck. We need a much more robust - # concept of what a "Code Object" really is. Currently - # commands/classes/candidates/methods and so on just share a very - # ill-defined interface. - class CodeObject - module Helpers - # we need this helper as some Pry::Method objects can wrap Procs - # @return [Boolean] - def real_method_object? - is_a?(::Method) || is_a?(::UnboundMethod) - end - - def c_method? - real_method_object? && source_type == :c - end - - def module_with_yard_docs? - is_a?(WrappedModule) && yard_docs? - end - - def command? - is_a?(Module) && self <= Pry::Command - end - - # @return [Boolean] `true` if this module was defined by means of the C API, - # `false` if it's a Ruby module. - # @note If a module defined by C was extended with a lot of methods written - # in Ruby, this method would fail. - def c_module? - return unless is_a?(WrappedModule) - - method_locations = wrapped.methods(false).map do |m| - wrapped.method(m).source_location - end - - method_locations.concat( - wrapped.instance_methods(false).map do |m| - wrapped.instance_method(m).source_location - end - ) - - c_methods = method_locations.grep(nil).count - ruby_methods = method_locations.count - c_methods - - c_methods > ruby_methods - end - end - - include Pry::Helpers::CommandHelpers - - class << self - def lookup(str, pry_instance, options = {}) - co = new(str, pry_instance, options) - - co.default_lookup || co.method_or_class_lookup || - co.command_lookup || co.empty_lookup - end - end - - attr_accessor :str - attr_accessor :target - attr_accessor :pry_instance - attr_accessor :super_level - - def initialize(str, pry_instance, options = {}) - options = { - super: 0 - }.merge!(options) - - @str = str - @pry_instance = pry_instance - @target = pry_instance.current_context - @super_level = options[:super] - end - - # TODO: just make it so find_command_by_match_or_listing doesn't raise? - def command_lookup - pry_instance.commands.find_command_by_match_or_listing(str) - rescue StandardError - nil - end - - # when no paramter is given (i.e CodeObject.lookup(nil)), then we - # lookup the 'current object' from the binding. - def empty_lookup - return nil if str && !str.empty? - - obj = if internal_binding?(target) - mod = target_self.is_a?(Module) ? target_self : target_self.class - Pry::WrappedModule(mod) - else - Pry::Method.from_binding(target) - end - - # respect the super level (i.e user might have specified a - # --super flag to show-source) - lookup_super(obj, super_level) - end - - # lookup variables and constants and `self` that are not modules - def default_lookup - # we skip instance methods as we want those to fall through to - # method_or_class_lookup() - if safe_to_evaluate?(str) && !looks_like_an_instance_method?(str) - obj = target.eval(str) - - # restrict to only objects we KNOW for sure support the full API - # Do NOT support just any object that responds to source_location - if sourcable_object?(obj) - Pry::Method(obj) - elsif !obj.is_a?(Module) - Pry::WrappedModule(obj.class) - end - end - rescue Pry::RescuableException - nil - end - - def method_or_class_lookup - obj = - case str - when /\S+\(\)\z/ - Pry::Method.from_str(str.sub(/\(\)\z/, ''), target) || - Pry::WrappedModule.from_str(str, target) - else - Pry::WrappedModule.from_str(str, target) || - Pry::Method.from_str(str, target) - end - - lookup_super(obj, super_level) - end - - private - - def sourcable_object?(obj) - [::Proc, ::Method, ::UnboundMethod].any? { |o| obj.is_a?(o) } - end - - # Returns true if `str` looks like a method, i.e Klass#method - # We need to consider this case because method lookups should fall - # through to the `method_or_class_lookup()` method but a - # defined?() on a "Klass#method` string will see the `#` as a - # comment and only evaluate the `Klass` part. - # @param [String] str - # @return [Boolean] Whether the string looks like an instance method. - def looks_like_an_instance_method?(str) - str =~ /\S#\S/ - end - - # We use this method to decide whether code is safe to eval. Method's are - # generally not, but everything else is. - # TODO: is just checking != "method" enough?? - # TODO: see duplication of this method in Pry::WrappedModule - # @param [String] str The string to lookup - # @return [Boolean] - def safe_to_evaluate?(str) - return true if str.strip == "self" - return false if str =~ /%/ - - kind = target.eval("defined?(#{str})") - kind =~ /variable|constant/ - end - - def target_self - target.eval('self') - end - - # grab the nth (`super_level`) super of `obj - # @param [Object] obj - # @param [Fixnum] super_level How far up the super chain to ascend. - def lookup_super(obj, super_level) - return unless obj - - sup = obj.super(super_level) - raise Pry::CommandError, "No superclass found for #{obj.wrapped}" unless sup - - sup - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/color_printer.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/color_printer.rb deleted file mode 100644 index 8e7a14d0..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/color_printer.rb +++ /dev/null @@ -1,66 +0,0 @@ -# frozen_string_literal: true - -require 'pp' -require 'English' - -class Pry - # PP subclass for streaming inspect output in color. - class ColorPrinter < ::PP - Pry::SyntaxHighlighter.overwrite_coderay_comment_token! - - def self.default(_output, value, pry_instance) - pry_instance.pager.open do |pager| - pager.print pry_instance.config.output_prefix - pp(value, pager, pry_instance.output.width - 1) - end - end - - def self.pp(obj, output = $DEFAULT_OUTPUT, max_width = 79) - queue = ColorPrinter.new(output, max_width, "\n") - queue.guard_inspect_key { queue.pp(obj) } - queue.flush - output << "\n" - end - - def pp(object) - return super unless object.is_a?(String) - - # Avoid calling Ruby 2.4+ String#pretty_print that prints multiline - # Strings prettier - text(object.inspect) - rescue StandardError => exception - raise if exception.is_a?(Pry::Pager::StopPaging) - - text(highlight_object_literal(inspect_object(object))) - end - - def text(str, max_width = str.length) - if str.include?("\e[") - super("#{str}\e[0m", max_width) - elsif str.start_with?('#<') || %w[= >].include?(str) - super(highlight_object_literal(str), max_width) - else - super(SyntaxHighlighter.highlight(str), max_width) - end - end - - private - - def highlight_object_literal(object_literal) - code = Pry::SyntaxHighlighter.keyword_token_color - obj_color = code.start_with?("\e") ? code : "\e[0m\e[0;#{code}m" - "#{obj_color}#{object_literal}\e[0m" - end - - def inspect_object(object) - object.inspect - rescue StandardError - # Read the class name off of the singleton class to provide a default - # inspect. - singleton = class << object; self; end - ancestors = Pry::Method.safe_send(singleton, :ancestors) - klass = ancestors.find { |k| k != singleton } - "#<#{klass}:0x#{object.__id__.to_s(16)}>" - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/command.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/command.rb deleted file mode 100644 index 4e213f39..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/command.rb +++ /dev/null @@ -1,520 +0,0 @@ -# frozen_string_literal: true - -require 'delegate' -require 'shellwords' - -class Pry - # The super-class of all commands, new commands should be created by calling - # {Pry::CommandSet#command} which creates a BlockCommand or - # {Pry::CommandSet#create_command} which creates a ClassCommand. Please don't - # use this class directly. - class Command - extend Helpers::DocumentationHelpers - extend CodeObject::Helpers - - include Pry::Helpers::BaseHelpers - include Pry::Helpers::CommandHelpers - include Pry::Helpers::Text - - # represents a void return value for a command - VOID_VALUE = Object.new - - # give it a nice inspect - def VOID_VALUE.inspect - "void" - end - - # Properties of the command itself (as passed as arguments to - # {CommandSet#command} or {CommandSet#create_command}). - class << self - attr_writer :block - attr_writer :description - attr_writer :command_options - attr_writer :match - - def match(arg = nil) - if arg - @command_options ||= default_options(arg) - @command_options[:listing] = arg.is_a?(String) ? arg : arg.inspect - @match = arg - end - @match ||= nil - end - - # Define or get the command's description - def description(arg = nil) - @description = arg if arg - @description ||= nil - end - - # Define or get the command's options - def command_options(arg = nil) - @command_options ||= default_options(match) - @command_options.merge!(arg) if arg - @command_options - end - # backward compatibility - alias options command_options - alias options= command_options= - - # Define or get the command's banner - def banner(arg = nil) - @banner = arg if arg - @banner ||= description - end - - def block - @block || instance_method(:process) - end - - def source - file, line = block.source_location - strip_leading_whitespace(Pry::Code.from_file(file).expression_at(line)) - end - - def doc - new.help - end - - def source_file - Array(block.source_location).first - end - alias file source_file - - def source_line - Array(block.source_location).last - end - alias line source_line - - def default_options(match) - { - keep_retval: false, - argument_required: false, - interpolate: true, - shellwords: true, - listing: (match.is_a?(String) ? match : match.inspect), - use_prefix: true, - takes_block: false - } - end - - def name - super.to_s == "" ? "#" : super - end - - def inspect - name - end - - def command_name - options[:listing] - end - - # Create a new command with the given properties. - # @param [String, Regex] match The thing that triggers this command - # @param [String] description The description to appear in `help` - # @param [Hash] options Behavioral options (see {Pry::CommandSet#command}) - # @param [Module] helpers A module of helper functions to be included. - # @yield optional, used for BlockCommands - # @return [Class] (a subclass of {Pry::Command}) - def subclass(match, description, options, helpers, &block) - klass = Class.new(self) - klass.send(:include, helpers) - klass.match = match - klass.description = description - klass.command_options = options - klass.block = block - klass - end - - # Should this command be called for the given line? - # @param [String] val A line input at the REPL - # @return [Boolean] - def matches?(val) - command_regex =~ val - end - - # How well does this command match the given line? - # - # Higher scores are better because they imply that this command matches - # the line more closely. - # - # The score is calculated by taking the number of characters at the start - # of the string that are used only to identify the command, not as part of - # the arguments. - # - # @example - # /\.(.*)/.match_score(".foo") #=> 1 - # /\.*(.*)/.match_score("...foo") #=> 3 - # 'hi'.match_score("hi there") #=> 2 - # - # @param [String] val A line input at the REPL - # @return [Fixnum] - def match_score(val) - if command_regex =~ val - if Regexp.last_match.size > 1 - Regexp.last_match.begin(1) - else - Regexp.last_match.end(0) - end - else - -1 - end - end - - def command_regex - prefix = convert_to_regex(Pry.config.command_prefix) - prefix = "(?:#{prefix})?" unless options[:use_prefix] - - /\A#{prefix}#{convert_to_regex(match)}(?!\S)/ - end - - def convert_to_regex(obj) - case obj - when String - Regexp.escape(obj) - else - obj - end - end - - # The group in which the command should be displayed in "help" output. - # This is usually auto-generated from directory naming, but it can be - # manually overridden if necessary. - # Group should not be changed once it is initialized. - def group(name = nil) - @group ||= begin - name || case Pry::Method(block).source_file - when %r{/pry/.*_commands/(.*).rb} - Regexp.last_match(1).capitalize.tr('_', " ") - when /(pry-\w+)-([\d\.]+([\w\.]+)?)/ - name = Regexp.last_match(1) - version = Regexp.last_match(2) - "#{name} (v#{version})" - when /pryrc/ - "pryrc" - else - "(other)" - end - end - end - - def state - Pry::CommandState.default.state_for(match) - end - end - - # Properties of one execution of a command (passed by {Pry#run_command} as a hash of - # context and expanded in `#initialize` - attr_accessor :output - attr_accessor :target - attr_accessor :captures - attr_accessor :eval_string - attr_accessor :arg_string - attr_accessor :context - attr_accessor :command_set - attr_accessor :hooks - attr_accessor :pry_instance - alias _pry_= pry_instance= - - # The block we pass *into* a command so long as `:takes_block` is - # not equal to `false` - # @example - # my-command | do - # puts "block content" - # end - attr_accessor :command_block - - # Instantiate a command, in preparation for calling it. - # @param [Hash] context The runtime context to use with this command. - def initialize(context = {}) - self.context = context - self.target = context[:target] - self.output = context[:output] - self.eval_string = context[:eval_string] - self.command_set = context[:command_set] - self.hooks = context[:hooks] - self.pry_instance = context[:pry_instance] - end - - # Make those properties accessible to instances - def name - self.class.name - end - - def match - self.class.match - end - - def description - self.class.description - end - - def block - self.class.block - end - - def command_options - self.class.options - end - - def command_name - self.class.command_name - end - - def source - self.class.source - end - - # Run a command from another command. - # @param [String] command_string The string that invokes the command - # @param [Array] args Further arguments to pass to the command - # @example - # run "show-input" - # @example - # run ".ls" - # @example - # run "amend-line", "5", 'puts "hello world"' - def run(command_string, *args) - command_string = pry_instance.config.command_prefix.to_s + command_string - complete_string = "#{command_string} #{args.join(' ')}".rstrip - command_set.process_line(complete_string, context) - end - - def commands - command_set.to_hash - end - - def void - VOID_VALUE - end - - def _pry_ - Pry::Warning.warn('_pry_ is deprecated, use pry_instance instead') - pry_instance - end - - # @return [Object] The value of `self` inside the `target` binding. - def target_self - target.eval('self') - end - - # @return [Hash] Pry commands can store arbitrary state - # here. This state persists between subsequent command invocations. - # All state saved here is unique to the command, it does not - # need to be namespaced. - # @example - # state.my_state = "my state" # this will not conflict with any - # # `state.my_state` used in another command. - def state - self.class.state - end - - # Revaluate the string (str) and perform interpolation. - # @param [String] str The string to reevaluate with interpolation. - # - # @return [String] The reevaluated string with interpolations - # applied (if any). - def interpolate_string(str) - dumped_str = str.dump - if dumped_str.gsub!(/\\\#\{/, '#{') - target.eval(dumped_str) - else - str - end - end - - # Display a warning if a command collides with a local/method in - # the current scope. - def check_for_command_collision(command_match, arg_string) - collision_type = target.eval("defined?(#{command_match})") - collision_type ||= 'local-variable' if arg_string =~ %r{\A\s*[-+*/%&|^]*=} - - if collision_type - output.puts( - "#{Helpers::Text.bold('WARNING:')} Calling Pry command '#{command_match}', " \ - "which conflicts with a #{collision_type}.\n\n" - ) - end - rescue Pry::RescuableException # rubocop:disable Lint/HandleExceptions - end - - # Extract necessary information from a line that Command.matches? this - # command. - # - # Returns an array of four elements: - # - # ``` - # [String] the portion of the line that matched with the Command match - # [String] a string of all the arguments (i.e. everything but the match) - # [Array] the captures caught by the command_regex - # [Array] the arguments obtained by splitting the arg_string - # ``` - # - # @param [String] val The line of input - # @return [Array] - def tokenize(val) - val = interpolate_string(val) if command_options[:interpolate] - - self.class.command_regex =~ val - - # please call Command.matches? before Command#call_safely - unless Regexp.last_match - raise CommandError, "fatal: called a command which didn't match?!" - end - - captures = Regexp.last_match.captures - pos = Regexp.last_match.end(0) - - arg_string = val[pos..-1] - - # remove the one leading space if it exists - arg_string.slice!(0) if arg_string.start_with?(" ") - - # process and pass a block if one is found - pass_block(arg_string) if command_options[:takes_block] - - args = - if arg_string - if command_options[:shellwords] - Shellwords.shellwords(arg_string) - else - arg_string.split(" ") - end - else - [] - end - - [val[0..pos].rstrip, arg_string, captures, args] - end - - # Process a line that Command.matches? this command. - # @param [String] line The line to process - # @return [Object, Command::VOID_VALUE] - def process_line(line) - command_match, arg_string, captures, args = tokenize(line) - - if Pry.config.collision_warning - check_for_command_collision(command_match, arg_string) - end - - self.arg_string = arg_string - self.captures = captures - - call_safely(*(captures + args)) - end - - # Generate completions for this command - # - # @param [String] _search The line typed so far - # @return [Array] Completion words - def complete(_search) - [] - end - - private - - # Run the command with the given `args`. - # - # This is a public wrapper around `#call` which ensures all preconditions - # are met. - # - # @param [Array] args The arguments to pass to this command. - # @return [Object] The return value of the `#call` method, or - # {Command::VOID_VALUE}. - def call_safely(*args) - if command_options[:argument_required] && args.empty? - raise CommandError, "The command '#{command_name}' requires an argument." - end - - ret = use_unpatched_symbol do - call_with_hooks(*args) - end - command_options[:keep_retval] ? ret : void - end - - def use_unpatched_symbol - call_method = Symbol.method_defined?(:call) && Symbol.instance_method(:call) - Symbol.class_eval { undef :call } if call_method - yield - ensure - Symbol.instance_eval { define_method(:call, call_method) } if call_method - end - - # Pass a block argument to a command. - # @param [String] arg_string The arguments (as a string) passed to the command. - # We inspect these for a '| do' or a '| {' and if we find it we use it - # to start a block input sequence. Once we have a complete - # block, we save it to an accessor that can be retrieved from the command context. - # Note that if we find the '| do' or '| {' we delete this and the - # elements following it from `arg_string`. - def pass_block(arg_string) - # Workaround for weird JRuby bug where rindex in this case can return nil - # even when there's a match. - arg_string.scan(/\| *(?:do|\{)/) - block_index = $LAST_MATCH_INFO && $LAST_MATCH_INFO.offset(0)[0] - - return unless block_index - - block_init_string = arg_string.slice!(block_index..-1)[1..-1] - prime_string = "proc #{block_init_string}\n" - - block_string = - if !Pry::Code.complete_expression?(prime_string) - pry_instance.r(target, prime_string) - else - prime_string - end - - begin - self.command_block = target.eval(block_string) - rescue Pry::RescuableException - raise CommandError, "Incomplete block definition." - end - end - - def find_hooks(event) - event_name = "#{event}_#{command_name}" - (hooks || Pry.hooks || self.class.hooks).get_hooks(event_name).values - end - - def before_hooks - find_hooks('before') - end - - def after_hooks - find_hooks('after') - end - - # Run the `#call` method and all the registered hooks. - # @param [Array] args The arguments to `#call` - # @return [Object] The return value from `#call` - def call_with_hooks(*args) - before_hooks.each { |block| instance_exec(*args, &block) } - - ret = call(*args) - - after_hooks.each do |block| - ret = instance_exec(*args, &block) - end - - ret - end - - # Normalize method arguments according to its arity. - # - # @param [Integer] method - # @param [Array] args - # @return [Array] a (possibly shorter) array of the arguments to pass - def normalize_method_args(method, args) - case method.arity - when -1 - args - when 0 - [] - else - args.values_at(*(0..(method.arity - 1)).to_a) - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/command_set.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/command_set.rb deleted file mode 100644 index 339e6424..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/command_set.rb +++ /dev/null @@ -1,418 +0,0 @@ -# frozen_string_literal: true - -class Pry - class NoCommandError < StandardError - def initialize(match, owner) - super "Command '#{match}' not found in command set #{owner}" - end - end - - # This class is used to create sets of commands. Commands can be imported from - # different sets, aliased, removed, etc. - class CommandSet - include Enumerable - include Pry::Helpers::BaseHelpers - attr_reader :helper_module - - # @param [Array] imported_sets - # Sets which will be imported automatically - # @yield Optional block run to define commands - def initialize(*imported_sets, &block) - @commands = {} - @helper_module = Module.new - import(*imported_sets) - instance_eval(&block) if block - end - - # Defines a new Pry command. - # @param [String, Regexp] match The start of invocations of this command. - # @param [String] description A description of the command. - # @param [Hash] options The optional configuration parameters. - # @option options [Boolean] :keep_retval Whether or not to use return value - # of the block for return of `command` or just to return `nil` - # (the default). - # @option options [Boolean] :interpolate Whether string #{} based - # interpolation is applied to the command arguments before - # executing the command. Defaults to true. - # @option options [String] :listing The listing name of the - # command. That is the name by which the command is looked up by - # help and by show-source. Necessary for commands with regex matches. - # @option options [Boolean] :use_prefix Whether the command uses - # `Pry.config.command_prefix` prefix (if one is defined). Defaults - # to true. - # @option options [Boolean] :shellwords Whether the command's arguments - # should be split using Shellwords instead of just split on spaces. - # Defaults to true. - # @yield The action to perform. The parameters in the block - # determines the parameters the command will receive. All - # parameters passed into the block will be strings. Successive - # command parameters are separated by whitespace at the Pry prompt. - # @example - # MyCommands = Pry::CommandSet.new do - # command "greet", "Greet somebody" do |name| - # puts "Good afternoon #{name.capitalize}!" - # end - # end - # - # # From pry: - # # pry(main)> pry_instance.commands = MyCommands - # # pry(main)> greet john - # # Good afternoon John! - # # pry(main)> help greet - # # Greet somebody - # @example Regexp command - # MyCommands = Pry::CommandSet.new do - # command( - # /number-(\d+)/, "number-N regex command", :listing => "number" - # ) do |num, name| - # puts "hello #{name}, nice number: #{num}" - # end - # end - # - # # From pry: - # # pry(main)> pry_instance.commands = MyCommands - # # pry(main)> number-10 john - # # hello john, nice number: 10 - # # pry(main)> help number - # # number-N regex command - def block_command(match, description = "No description.", options = {}, &block) - if description.is_a?(Hash) - options = description - description = "No description." - end - options = Pry::Command.default_options(match).merge!(options) - - @commands[match] = Pry::BlockCommand.subclass( - match, description, options, helper_module, &block - ) - end - alias command block_command - - # Defines a new Pry command class. - # - # @param [String, Regexp] match The start of invocations of this command. - # @param [String] description A description of the command. - # @param [Hash] options The optional configuration parameters, see {#command} - # @yield The class body's definition. - # - # @example - # Pry::Commands.create_command "echo", "echo's the input", :shellwords => false do - # def options(opt) - # opt.banner "Usage: echo [-u | -d] " - # opt.on :u, :upcase, "ensure the output is all upper-case" - # opt.on :d, :downcase, "ensure the output is all lower-case" - # end - # - # def process - # if opts.present?(:u) && opts.present?(:d) - # raise Pry::CommandError, "-u and -d makes no sense" - # end - # result = args.join(" ") - # result.downcase! if opts.present?(:downcase) - # result.upcase! if opts.present?(:upcase) - # output.puts result - # end - # end - # - def create_command(match, description = "No description.", options = {}, &block) - if description.is_a?(Hash) - options = description - description = "No description." - end - options = Pry::Command.default_options(match).merge!(options) - - @commands[match] = Pry::ClassCommand.subclass( - match, description, options, helper_module, &block - ) - @commands[match].class_eval(&block) - @commands[match] - end - - def each(&block) - @commands.each(&block) - end - - # Removes some commands from the set - # @param [Array] searches the matches or listings of the commands - # to remove - def delete(*searches) - searches.each do |search| - cmd = find_command_by_match_or_listing(search) - @commands.delete cmd.match - end - end - - # Imports all the commands from one or more sets. - # @param [Array] sets Command sets, all of the commands of which - # will be imported. - # @return [Pry::CommandSet] Returns the reciever (a command set). - def import(*sets) - sets.each do |set| - @commands.merge! set.to_hash - helper_module.send :include, set.helper_module - end - self - end - - # Imports some commands from a set - # @param [CommandSet] set Set to import commands from - # @param [Array] matches Commands to import - # @return [Pry::CommandSet] Returns the reciever (a command set). - def import_from(set, *matches) - helper_module.send :include, set.helper_module - matches.each do |match| - cmd = set.find_command_by_match_or_listing(match) - @commands[cmd.match] = cmd - end - self - end - - # @param [String, Regexp] match_or_listing The match or listing of a command. - # of the command to retrieve. - # @return [Command] The command object matched. - def find_command_by_match_or_listing(match_or_listing) - cmd = (@commands[match_or_listing] || - Pry::Helpers::BaseHelpers.find_command(match_or_listing, @commands)) - cmd || raise(ArgumentError, "cannot find a command: '#{match_or_listing}'") - end - - # Aliases a command - # @param [String, Regex] match The match of the alias (can be a regex). - # @param [String] action The action to be performed (typically - # another command). - # @param [Hash] options The optional configuration parameters, - # accepts the same as the `command` method, but also allows the - # command description to be passed this way too as `:desc` - # @example Creating an alias for `ls -M` - # Pry.config.commands.alias_command "lM", "ls -M" - # @example Pass explicit description (overriding default). - # Pry.config.commands.alias_command "lM", "ls -M", :desc => "cutiepie" - def alias_command(match, action, options = {}) - (cmd = find_command(action)) || raise("command: '#{action}' not found") - original_options = cmd.options.dup - - options = original_options.merge!( - desc: "Alias for `#{action}`", - listing: match.is_a?(String) ? match : match.inspect - ).merge!(options) - - # ensure default description is used if desc is nil - desc = options.delete(:desc).to_s - - c = block_command match, desc, options do |*args| - run action, *args - end - - # TODO: untested. What's this about? - c.class_eval do - define_method(:complete) do |input| - cmd.new(context).complete(input) - end - end - - c.group "Aliases" - - c - end - - # Rename a command. Accepts either match or listing for the search. - # - # @param [String, Regexp] new_match The new match for the command. - # @param [String, Regexp] search The command's current match or listing. - # @param [Hash] options The optional configuration parameters, - # accepts the same as the `command` method, but also allows the - # command description to be passed this way too. - # @example Renaming the `ls` command and changing its description. - # Pry.config.commands.rename "dir", "ls", :description => "DOS friendly ls" - def rename_command(new_match, search, options = {}) - cmd = find_command_by_match_or_listing(search) - - options = { - listing: new_match, - description: cmd.description - }.merge!(options) - - @commands[new_match] = cmd.dup - @commands[new_match].match = new_match - @commands[new_match].description = options.delete(:description) - @commands[new_match].options.merge!(options) - @commands.delete(cmd.match) - end - - # Sets or gets the description for a command (replacing the old - # description). Returns current description if no description - # parameter provided. - # @param [String, Regexp] search The command match. - # @param [String?] description (nil) The command description. - # @example Setting - # MyCommands = Pry::CommandSet.new do - # desc "help", "help description" - # end - # @example Getting - # Pry.config.commands.desc "amend-line" - def desc(search, description = nil) - cmd = find_command_by_match_or_listing(search) - return cmd.description unless description - - cmd.description = description - end - - # @return [Array] - # The list of commands provided by the command set. - def list_commands - @commands.keys - end - alias keys list_commands - - def to_hash - @commands.dup - end - alias to_h to_hash - - # Find a command that matches the given line - # @param [String] pattern The line that might be a command invocation - # @return [Pry::Command, nil] - def [](pattern) - commands = @commands.values.select do |command| - command.matches?(pattern) - end - commands.max_by { |command| command.match_score(pattern) } - end - alias find_command [] - - # - # Re-assign the command found at _pattern_ with _command_. - # - # @param [Regexp, String] pattern - # The command to add or replace(found at _pattern_). - # - # @param [Pry::Command] command - # The command to add. - # - # @return [Pry::Command] - # Returns the new command (matched with "pattern".) - # - # @example - # Pry.config.commands["help"] = MyHelpCommand - # - def []=(pattern, command) - if command.equal?(nil) - @commands.delete(pattern) - return - end - - unless command.is_a?(Class) && command < Pry::Command - raise TypeError, "command is not a subclass of Pry::Command" - end - - bind_command_to_pattern = pattern != command.match - if bind_command_to_pattern - command_copy = command.dup - command_copy.match = pattern - @commands[pattern] = command_copy - else - @commands[pattern] = command - end - end - - # - # Add a command to set. - # - # @param [Command] command - # a subclass of Pry::Command. - # - def add_command(command) - self[command.match] = command - end - - # Find the command that the user might be trying to refer to. - # @param [String] search The user's search. - # @return [Pry::Command?] - def find_command_for_help(search) - find_command(search) || - (begin - find_command_by_match_or_listing(search) - rescue ArgumentError - nil - end) - end - - # Is the given line a command invocation? - # @param [String] val - # @return [Boolean] - def valid_command?(val) - !!find_command(val) - end - - # Process the given line to see whether it needs executing as a command. - # @param [String] val The line to execute - # @param [Hash] context The context to execute the commands with - # @return [CommandSet::Result] - def process_line(val, context = {}) - if (command = find_command(val)) - context = context.merge(command_set: self) - retval = command.new(context).process_line(val) - Result.new(true, retval) - else - Result.new(false) - end - end - - # Generate completions for the user's search. - # @param [String] search The line to search for - # @param [Hash] context The context to create the command with - # @return [Array] - def complete(search, context = {}) - if (command = find_command(search)) - command.new(context).complete(search) - else - keys = @commands.keys.select do |key| - key.is_a?(String) && key.start_with?(search) - end - keys.map { |key| key + " " } - end - end - - private - - # Defines helpers methods for this command sets. - # Those helpers are only defined in this command set. - # - # @yield A block defining helper methods - # @example - # helpers do - # def hello - # puts "Hello!" - # end - # - # include OtherModule - # end - def helpers(&block) - helper_module.class_eval(&block) - end - end - - # Wraps the return result of process_commands, indicates if the - # result IS a command and what kind of command (e.g void) - class Result - attr_reader :retval - - def initialize(is_command, retval = nil) - @is_command = is_command - @retval = retval - end - - # Is the result a command? - # @return [Boolean] - def command? - @is_command - end - - # Is the result a command and if it is, is it a void command? - # (one that does not return a value) - # @return [Boolean] - def void_command? - retval == Command::VOID_VALUE - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/command_state.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/command_state.rb deleted file mode 100644 index fa98d515..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/command_state.rb +++ /dev/null @@ -1,31 +0,0 @@ -# frozen_string_literal: true - -require 'ostruct' - -class Pry - # CommandState is a data structure to hold per-command state. - # - # Pry commands can store arbitrary state here. This state persists between - # subsequent command invocations. All state saved here is unique to the - # command. - # - # @since v0.13.0 - # @api private - class CommandState - def self.default - @default ||= new - end - - def initialize - @command_state = {} - end - - def state_for(command_name) - @command_state[command_name] ||= OpenStruct.new - end - - def reset(command_name) - @command_state[command_name] = OpenStruct.new - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/amend_line.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/amend_line.rb deleted file mode 100644 index 002d4713..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/amend_line.rb +++ /dev/null @@ -1,103 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Command - class AmendLine < Pry::ClassCommand - match(/amend-line(?: (-?\d+)(?:\.\.(-?\d+))?)?/) - group 'Editing' - description 'Amend a line of input in multi-line mode.' - command_options interpolate: false, listing: 'amend-line' - - banner <<-'BANNER' - Amend a line of input in multi-line mode. `amend-line N`, where the N represents - line to replace. Can also specify a range of lines using `amend-line N..M` - syntax. Passing "!" as replacement content deletes the line(s) instead. - - amend-line 1 puts 'new' # replace line 1 - amend-line 1..4 ! # delete lines 1..4 - amend-line 3 >puts 'bye' # insert before line 3 - amend-line puts 'appended' # no line number modifies immediately preceding line - BANNER - - def process - raise CommandError, "No input to amend." if eval_string.empty? - - eval_string.replace(amend_input) - run "fix-indent" - run "show-input" - end - - private - - # @return [String] A new string with the amendments applied to it. - def amend_input - input_array = eval_string.each_line.to_a - - if arg_string == "!" - delete_from_array(input_array, line_range) - elsif arg_string.start_with?(">") - insert_into_array(input_array, line_range) - else - replace_in_array(input_array, line_range) - end - - input_array.join - end - - def delete_from_array(array, range) - array.slice!(range) - end - - def insert_into_array(array, range) - insert_slot = Array(range).first - array.insert(insert_slot, arg_string[1..-1] << "\n") - end - - def replace_in_array(array, range) - array[range] = arg_string + "\n" - end - - # @return [Fixnum] The number of lines currently in `eval_string` (the - # input buffer) - def line_count - eval_string.lines.count - end - - # Returns the (one-indexed) start and end lines given by the user. - # The lines in this range will be affected by the `amend-line`. - # Returns `nil` if no lines were specified by the user. - # @return [Array, nil] - def start_and_end_line_number - start_line_number, end_line_number = args - end_line_number ||= start_line_number.to_i - - [start_line_number.to_i, end_line_number.to_i] if start_line_number - end - - # Takes two numbers that are 1-indexed, and returns a range (or - # number) that is 0-indexed. 1-indexed means the first element is - # indentified by 1 rather than by 0 (as is the case for Ruby arrays). - # @param [Fixnum] start_line_number One-indexed number. - # @param [Fixnum] end_line_number One-indexed number. - # @return [Range] The zero-indexed range. - def zero_indexed_range_from_one_indexed_numbers(start_line_number, end_line_number) - # FIXME: one_index_number is a horrible name for this method - one_index_number(start_line_number)..one_index_number(end_line_number) - end - - # The lines (or line) that will be modified by the `amend-line`. - # @return [Range, Fixnum] The lines or line. - def line_range - start_line_number, end_line_number = start_and_end_line_number - if start_line_number - zero_indexed_range_from_one_indexed_numbers(start_line_number, - end_line_number) - else - line_count - 1 - end - end - end - - Pry::Commands.add_command(Pry::Command::AmendLine) - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/bang.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/bang.rb deleted file mode 100644 index 1879c64e..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/bang.rb +++ /dev/null @@ -1,24 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Command - class Bang < Pry::ClassCommand - match(/^\s*!\s*$/) - group 'Editing' - description 'Clear the input buffer.' - command_options use_prefix: false, listing: '!' - - banner <<-'BANNER' - Clear the input buffer. Useful if the parsing process goes wrong and you get - stuck in the read loop. - BANNER - - def process - output.puts 'Input buffer cleared!' - eval_string.replace('') - end - end - - Pry::Commands.add_command(Pry::Command::Bang) - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/bang_pry.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/bang_pry.rb deleted file mode 100644 index 39c148ea..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/bang_pry.rb +++ /dev/null @@ -1,21 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Command - class BangPry < Pry::ClassCommand - match '!pry' - group 'Navigating Pry' - description 'Start a Pry session on current self.' - - banner <<-'BANNER' - Start a Pry session on current self. Also works mid multi-line expression. - BANNER - - def process - target.pry - end - end - - Pry::Commands.add_command(Pry::Command::BangPry) - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/cat.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/cat.rb deleted file mode 100644 index 49dca46a..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/cat.rb +++ /dev/null @@ -1,70 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Command - class Cat < Pry::ClassCommand - match 'cat' - group 'Input and Output' - description "Show code from a file, Pry's input buffer, or the last exception." - - banner <<-'BANNER' - Usage: cat FILE - cat --ex [STACK_INDEX] - cat --in [INPUT_INDEX_OR_RANGE] - - `cat` is capable of showing part or all of a source file, the context of the - last exception, or an expression from Pry's input history. - - `cat --ex` defaults to showing the lines surrounding the location of the last - exception. Invoking it more than once travels up the exception's backtrace, and - providing a number shows the context of the given index of the backtrace. - BANNER - - def options(opt) - opt.on :ex, "Show the context of the last exception", - optional_argument: true, as: Integer - opt.on :i, :in, "Show one or more entries from Pry's expression history", - optional_argument: true, as: Range, default: -5..-1 - opt.on :s, :start, "Starting line (defaults to the first line)", - optional_argument: true, as: Integer - opt.on :e, :end, "Ending line (defaults to the last line)", - optional_argument: true, as: Integer - opt.on :l, :'line-numbers', "Show line numbers" - opt.on :t, :type, "The file type for syntax highlighting " \ - "(e.g., 'ruby' or 'python')", - argument: true, as: Symbol - end - - def process - output = - if opts.present?(:ex) - ExceptionFormatter.new( - pry_instance.last_exception, pry_instance, opts - ).format - elsif opts.present?(:in) - InputExpressionFormatter.new(pry_instance.input_ring, opts).format - else - FileFormatter.new(args.first, pry_instance, opts).format - end - - pry_instance.pager.page output - end - - def complete(search) - super | load_path_completions - end - - def load_path_completions - $LOAD_PATH.flat_map do |path| - Dir[path + '/**/*'].map do |f| - next if File.directory?(f) - - f.sub!(path + '/', '') - end - end - end - end - - Pry::Commands.add_command(Pry::Command::Cat) - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/cat/abstract_formatter.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/cat/abstract_formatter.rb deleted file mode 100644 index 013869e1..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/cat/abstract_formatter.rb +++ /dev/null @@ -1,32 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Command - class Cat - class AbstractFormatter - include Pry::Helpers::CommandHelpers - include Pry::Helpers::BaseHelpers - - private - - def decorate(content) - content.code_type = code_type - content.between(*between_lines) - .with_line_numbers(use_line_numbers?).highlighted - end - - def code_type - opts[:type] || :ruby - end - - def use_line_numbers? - opts.present?(:'line-numbers') || opts.present?(:ex) - end - - def between_lines - [opts[:start] || 1, opts[:end] || -1] - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/cat/exception_formatter.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/cat/exception_formatter.rb deleted file mode 100644 index c6d3b68a..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/cat/exception_formatter.rb +++ /dev/null @@ -1,90 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Command - class Cat - class ExceptionFormatter < AbstractFormatter - attr_reader :ex - attr_reader :opts - attr_reader :pry_instance - include Pry::Helpers::Text - - def initialize(exception, pry_instance, opts) - @ex = exception - @opts = opts - @pry_instance = pry_instance - end - - def format - check_for_errors - set_file_and_dir_locals( - backtrace_file, pry_instance, pry_instance.current_context - ) - code = decorate( - Pry::Code.from_file(backtrace_file) - .between(*start_and_end_line_for_code_window) - .with_marker(backtrace_line) - ) - "#{header}#{code}" - end - - private - - def code_window_size - pry_instance.config.default_window_size || 5 - end - - def backtrace_level - @backtrace_level ||= - begin - bl = - if opts[:ex].nil? - ex.bt_index - else - ex.bt_index = absolute_index_number(opts[:ex], ex.backtrace.size) - end - - increment_backtrace_level - bl - end - end - - def increment_backtrace_level - ex.inc_bt_index - end - - def backtrace_file - Array(ex.bt_source_location_for(backtrace_level)).first - end - - def backtrace_line - Array(ex.bt_source_location_for(backtrace_level)).last - end - - def check_for_errors - raise CommandError, "No exception found." unless ex - return if backtrace_file - - raise CommandError, "The given backtrace level is out of bounds." - end - - def start_and_end_line_for_code_window - start_line = backtrace_line - code_window_size - start_line = 1 if start_line < 1 - - [start_line, backtrace_line + code_window_size] - end - - def header - unindent( - "#{bold 'Exception:'} #{ex.class}: #{ex.message}\n" \ - "--\n" \ - "#{bold('From:')} #{backtrace_file}:#{backtrace_line} @ " \ - "#{bold("level: #{backtrace_level}")} of backtrace " \ - "(of #{ex.backtrace.size - 1}).\n\n" - ) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/cat/file_formatter.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/cat/file_formatter.rb deleted file mode 100644 index e8f1927b..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/cat/file_formatter.rb +++ /dev/null @@ -1,77 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Command - class Cat - class FileFormatter < AbstractFormatter - attr_reader :file_with_embedded_line - attr_reader :opts - attr_reader :pry_instance - - def initialize(file_with_embedded_line, pry_instance, opts) - unless file_with_embedded_line - raise CommandError, "Must provide a filename, --in, or --ex." - end - - @file_with_embedded_line = file_with_embedded_line - @opts = opts - @pry_instance = pry_instance - @code_from_file = Pry::Code.from_file(file_name) - end - - def format - set_file_and_dir_locals(file_name, pry_instance, pry_instance.current_context) - decorate(@code_from_file) - end - - def file_and_line - file_name, line_num = file_with_embedded_line.split(%r{:(?!/|\\)}) - - [file_name, line_num ? line_num.to_i : nil] - end - - private - - def file_name - file_and_line.first - end - - def line_number - file_and_line.last - end - - def code_window_size - pry_instance.config.default_window_size || 7 - end - - def decorate(content) - if line_number - super(content.around(line_number, code_window_size)) - else - super - end - end - - def code_type - opts[:type] || detect_code_type_from_file(file_name) - end - - def detect_code_type_from_file(file_name) - code_type = @code_from_file.code_type - - if code_type == :unknown - name = File.basename(file_name).split('.', 2).first - case name - when "Rakefile", "Gemfile" - :ruby - else - :text - end - else - code_type - end - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/cat/input_expression_formatter.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/cat/input_expression_formatter.rb deleted file mode 100644 index 2f491406..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/cat/input_expression_formatter.rb +++ /dev/null @@ -1,48 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Command - class Cat - class InputExpressionFormatter < AbstractFormatter - attr_accessor :input_expressions - attr_accessor :opts - - def initialize(input_expressions, opts) - @input_expressions = input_expressions - @opts = opts - end - - def format - raise CommandError, "No input expressions!" if numbered_input_items.empty? - - if numbered_input_items.length > 1 - content = '' - numbered_input_items.each do |i, s| - content += "#{Helpers::Text.bold(i.to_s)}:\n" - content += decorate(Pry::Code(s).with_indentation(2)).to_s - end - - content - else - decorate(Pry::Code(selected_input_items.first)) - end - end - - private - - def selected_input_items - input_expressions[normalized_expression_range] || [] - end - - def numbered_input_items - @numbered_input_items ||= normalized_expression_range.zip(selected_input_items) - .reject { |_, s| s.nil? || s == "" } - end - - def normalized_expression_range - absolute_index_range(opts[:i], input_expressions.count) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/cd.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/cd.rb deleted file mode 100644 index d698e0a0..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/cd.rb +++ /dev/null @@ -1,46 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Command - class Cd < Pry::ClassCommand - match 'cd' - group 'Context' - description 'Move into a new context (object or scope).' - - banner <<-'BANNER' - Usage: cd [OPTIONS] [--help] - - Move into new context (object or scope). As in UNIX shells use `cd ..` to go - back, `cd /` to return to Pry top-level and `cd -` to toggle between last two - scopes. Complex syntax (e.g `cd ../@x/@y`) also supported. - - cd @x - cd .. - cd / - cd - - - https://github.com/pry/pry/wiki/State-navigation#wiki-Changing_scope - BANNER - - def process - state.old_stack ||= [] - - if arg_string.strip == "-" - unless state.old_stack.empty? - pry_instance.binding_stack, state.old_stack = - state.old_stack, pry_instance.binding_stack - end - else - stack = ObjectPath.new(arg_string, pry_instance.binding_stack).resolve - - if stack && stack != pry_instance.binding_stack - state.old_stack = pry_instance.binding_stack - pry_instance.binding_stack = stack - end - end - end - end - - Pry::Commands.add_command(Pry::Command::Cd) - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/change_inspector.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/change_inspector.rb deleted file mode 100644 index ea221f9f..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/change_inspector.rb +++ /dev/null @@ -1,34 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Command - class ChangeInspector < Pry::ClassCommand - match 'change-inspector' - group 'Input and Output' - description 'Change the current inspector proc.' - command_options argument_required: true - banner <<-BANNER - Usage: change-inspector NAME - - Change the proc used to print return values. See list-inspectors for a list - of available procs and a short description of what each one does. - BANNER - - def process(inspector) - unless inspector_map.key?(inspector) - raise Pry::CommandError, "'#{inspector}' isn't a known inspector!" - end - - pry_instance.print = inspector_map[inspector][:value] - output.puts "Switched to the '#{inspector}' inspector!" - end - - private - - def inspector_map - Pry::Inspector::MAP - end - Pry::Commands.add_command(self) - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/change_prompt.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/change_prompt.rb deleted file mode 100644 index 89e85196..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/change_prompt.rb +++ /dev/null @@ -1,51 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Command - class ChangePrompt < Pry::ClassCommand - match 'change-prompt' - group 'Input and Output' - description 'Change the current prompt.' - command_options argument_required: true - banner <<-BANNER - Usage: change-prompt [OPTIONS] [NAME] - - Change the current prompt. - BANNER - - def options(opt) - opt.on(:l, :list, 'List the available prompts') - end - - def process(prompt) - if opts.present?(:l) - list_prompts - else - change_prompt(prompt) - end - end - - private - - def list_prompts - prompts = Pry::Prompt.all.map do |name, prompt| - "#{bold(name)}#{red(' (selected)') if pry_instance.prompt == prompt}\n" + - prompt.description - end - output.puts(prompts.join("\n" * 2)) - end - - def change_prompt(prompt) - if Pry::Prompt[prompt] - pry_instance.prompt = Pry::Prompt[prompt] - else - raise Pry::CommandError, - "'#{prompt}' isn't a known prompt. Run `change-prompt --list` " \ - "to see the list of known prompts." - end - end - - Pry::Commands.add_command(self) - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/clear_screen.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/clear_screen.rb deleted file mode 100644 index c0b78127..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/clear_screen.rb +++ /dev/null @@ -1,20 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Command - class ClearScreen < Pry::ClassCommand - match 'clear-screen' - group 'Input and Output' - description 'Clear the contents of the screen/window Pry is running in.' - - def process - if Pry::Helpers::Platform.windows? - pry_instance.config.system.call(pry_instance.output, 'cls', pry_instance) - else - pry_instance.config.system.call(pry_instance.output, 'clear', pry_instance) - end - end - Pry::Commands.add_command(self) - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/code_collector.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/code_collector.rb deleted file mode 100644 index 5ca385f5..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/code_collector.rb +++ /dev/null @@ -1,182 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Command - class CodeCollector - include Helpers::CommandHelpers - - attr_reader :args - attr_reader :opts - attr_reader :pry_instance - - # The name of the explicitly given file (if any). - attr_accessor :file - - class << self - attr_accessor :input_expression_ranges - attr_accessor :output_result_ranges - end - - @input_expression_ranges = [] - @output_result_ranges = [] - - def initialize(args, opts, pry_instance) - @args = args - @opts = opts - @pry_instance = pry_instance - end - - # Add the `--lines`, `-o`, `-i`, `-s`, `-d` options. - def self.inject_options(opt) - @input_expression_ranges = [] - @output_result_ranges = [] - - opt.on :l, :lines, "Restrict to a subset of lines. Takes a line number " \ - "or range", - optional_argument: true, as: Range, default: 1..-1 - opt.on :o, :out, "Select lines from Pry's output result history. " \ - "Takes an index or range", - optional_argument: true, as: Range, default: -5..-1 do |r| - output_result_ranges << (r || (-5..-1)) - end - opt.on :i, :in, "Select lines from Pry's input expression history. " \ - "Takes an index or range", - optional_argument: true, as: Range, default: -5..-1 do |r| - input_expression_ranges << (r || (-5..-1)) - end - opt.on :s, :super, "Select the 'super' method. Can be repeated to " \ - "traverse the ancestors", - as: :count - opt.on :d, :doc, "Select lines from the code object's documentation" - end - - # The content (i.e code/docs) for the selected object. - # If the user provided a bare code object, it returns the source. - # If the user provided the `-i` or `-o` switches, it returns the - # selected input/output lines joined as a string. If the user used - # `-d CODE_OBJECT` it returns the docs for that code object. - # - # @return [String] - def content - @content ||= - begin - if bad_option_combination? - raise CommandError, - "Only one of --out, --in, --doc and CODE_OBJECT may " \ - "be specified." - end - - content = if opts.present?(:o) - pry_output_content - elsif opts.present?(:i) - pry_input_content - elsif opts.present?(:d) - code_object_doc - else - code_object_source_or_file - end - - restrict_to_lines(content, line_range) - end - end - - # The code object - # - # @return [Pry::WrappedModule, Pry::Method, Pry::Command] - def code_object - Pry::CodeObject.lookup(obj_name, pry_instance, super: opts[:super]) - end - - # Given a string and a range, return the `range` lines of that - # string. - # - # @param [String] content - # @param [Range, Fixnum] range - # @return [String] The string restricted to the given range - def restrict_to_lines(content, range) - Array(content.lines.to_a[range]).join - end - - # The selected `pry_instance.output_ring` as a string, as specified by - # the `-o` switch. - # - # @return [String] - def pry_output_content - pry_array_content_as_string( - pry_instance.output_ring, - self.class.output_result_ranges, - &:pretty_inspect - ) - end - - # The selected `pry_instance.input_ring` as a string, as specified by - # the `-i` switch. - # - # @return [String] - def pry_input_content - pry_array_content_as_string( - pry_instance.input_ring, self.class.input_expression_ranges - ) { |v| v } - end - - # The line range passed to `--lines`, converted to a 0-indexed range. - def line_range - opts.present?(:lines) ? one_index_range_or_number(opts[:lines]) : 0..-1 - end - - # Name of the object argument - def obj_name - @obj_name ||= args.empty? ? "" : args.join(" ") - end - - private - - def bad_option_combination? - [opts.present?(:in), opts.present?(:out), - !args.empty?].count(true) > 1 - end - - def pry_array_content_as_string(array, ranges) - all = '' - ranges.each do |range| - if convert_to_range(range).first == 0 - raise CommandError, "Minimum value for range is 1, not 0." - end - - ranged_array = Array(array[range]) || [] - ranged_array.compact.each { |v| all += yield(v) } - end - - all - end - - def code_object_doc - (code_object && code_object.doc) || could_not_locate(obj_name) - end - - def code_object_source_or_file - (code_object && code_object.source) || file_content - end - - def file_content - if File.exist?(obj_name) - # Set the file accessor. - self.file = obj_name - File.read(obj_name) - else - could_not_locate(obj_name) - end - end - - def could_not_locate(name) - raise CommandError, "Cannot locate: #{name}!" - end - - def convert_to_range(range) - return range if range.is_a?(Range) - - (range..range) - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/disable_pry.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/disable_pry.rb deleted file mode 100644 index 0c597242..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/disable_pry.rb +++ /dev/null @@ -1,31 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Command - class DisablePry < Pry::ClassCommand - match 'disable-pry' - group 'Navigating Pry' - description 'Stops all future calls to pry and exits the current session.' - - banner <<-'BANNER' - Usage: disable-pry - - After this command is run any further calls to pry will immediately return `nil` - without interrupting the flow of your program. This is particularly useful when - you've debugged the problem you were having, and now wish the program to run to - the end. - - As alternatives, consider using `exit!` to force the current Ruby process - to quit immediately; or using `edit -p` to remove the `binding.pry` - from the code. - BANNER - - def process - ENV['DISABLE_PRY'] = 'true' - pry_instance.run_command "exit" - end - end - - Pry::Commands.add_command(Pry::Command::DisablePry) - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/easter_eggs.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/easter_eggs.rb deleted file mode 100644 index 7a2e3520..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/easter_eggs.rb +++ /dev/null @@ -1,101 +0,0 @@ -# frozen_string_literal: true - -class Pry - Pry::Commands.instance_eval do - command(%r{!s/(.*?)/(.*?)}, "") do |source, dest| - eval_string.gsub!(/#{source}/) { dest } - run "show-input" - end - - command "east-coker", "" do - txt = %( - -- - Now the light falls - Across the open field, leaving the deep lane - Shuttered with branches, dark in the afternoon, - Where you lean against a bank while a van passes, - And the deep lane insists on the direction - Into the village, in the electric heat - Hypnotised. In a warm haze the sultry light - Is absorbed, not refracted, by grey stone. - The dahlias sleep in the empty silence. - Wait for the early owl. - -- T.S Eliot - ) - output.puts txt - txt - end - - command "cohen-poem", "" do - txt = %( - -- - When this American woman, - whose thighs are bound in casual red cloth, - comes thundering past my sitting place - like a forest-burning Mongol tribe, - the city is ravished - and brittle buildings of a hundred years - splash into the street; - and my eyes are burnt - for the embroidered Chinese girls, - already old, - and so small between the thin pines - on these enormous landscapes, - that if you turn your head - they are lost for hours. - -- Leonard Cohen - ) - output.puts txt - txt - end - - command "pessoa-poem", "" do - output.puts <<-TEXT - -- - I've gone to bed with every feeling, - I've been the pimp of every emotion, - All felt sensations have bought me drinks, - I've traded glances with every motive for every act, - I've held hands with every urge to depart, - .. - Rage, foam, the vastness that doesn't fit in my handkerchief, - The dog in heat howling in the night, - The pond from the farm going in circles around my insomnia, - The woods as they were, on our late-afternoon walks, the rose, - The indifferent tuft of hair, the moss, the pines, - The rage of not containing all this, not retaining all this, - O abstract hunger for things, impotent libido for moments, - Intellectual orgy of feeling life! - -- Fernando Pessoa - TEXT - end - - command "test-ansi", "" do - prev_color = pry_instance.config.color - pry_instance.config.color = true - - picture = unindent <<-'OUTPUT'.gsub(/[[:alpha:]!]/) { |s| red(s) } - ____ _______________________ - / \ | A W G | - / O O \ | N I O N ! | - | | | S S R I ! | - \ \__/ / __| I K ! | - \____/ \________________________| - OUTPUT - - move_up = - if Helpers::Platform.windows_ansi? - proc { |n| "\e[#{n}F" } - else - proc { |n| "\e[#{n}A\e[0G" } - end - - output.puts "\n" * 6 - output.puts picture.lines.map(&:chomp).reverse.join(move_up[1]) - output.puts "\n" * 6 - output.puts "** ENV['TERM'] is #{ENV['TERM']} **\n\n" - - pry_instance.config.color = prev_color - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/edit.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/edit.rb deleted file mode 100644 index 4c31e089..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/edit.rb +++ /dev/null @@ -1,223 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Command - class Edit < Pry::ClassCommand - match 'edit' - group 'Editing' - description 'Invoke the default editor on a file.' - - banner <<-'BANNER' - Usage: edit [--no-reload|--reload|--patch] [--line LINE] [--temp|--ex|FILE[:LINE]|OBJECT|--in N] - - Open a text editor. When no FILE is given, edits the pry input buffer. - When a method/module/command is given, the code is opened in an editor. - Ensure `Pry.config.editor` or `pry_instance.config.editor` is set to your editor of choice. - - edit sample.rb edit -p MyClass#my_method - edit sample.rb --line 105 edit MyClass - edit MyClass#my_method edit --ex - edit --method edit --ex -p - - https://github.com/pry/pry/wiki/Editor-integration#wiki-Edit_command - BANNER - - def options(opt) - opt.on :e, :ex, "Open the file that raised the most recent exception " \ - "(_ex_.file)", - optional_argument: true, as: Integer - opt.on :i, :in, "Open a temporary file containing the Nth input " \ - "expression. N may be a range", - optional_argument: true, as: Range, default: -1..-1 - opt.on :t, :temp, "Open an empty temporary file" - opt.on :l, :line, "Jump to this line in the opened file", - argument: true, as: Integer - opt.on :n, :"no-reload", "Don't automatically reload the edited file" - opt.on :c, :current, "Open the current __FILE__ and at __LINE__ (as " \ - "returned by `whereami`)" - opt.on :r, :reload, "Reload the edited code immediately (default for " \ - "ruby files)" - opt.on :p, :patch, "Instead of editing the object's file, try to edit " \ - "in a tempfile and apply as a monkey patch" - opt.on :m, :method, "Explicitly edit the _current_ method (when " \ - "inside a method context)." - end - - def process - if bad_option_combination? - raise CommandError, "Only one of --ex, --temp, --in, --method and " \ - "FILE may be specified." - end - - if repl_edit? - # code defined in pry, eval'd within pry. - repl_edit - elsif runtime_patch? - # patch code without persisting changes, implies future changes are patches - apply_runtime_patch - else - # code stored in actual files, eval'd at top-level - file_edit - end - end - - def repl_edit? - !opts.present?(:ex) && !opts.present?(:current) && !opts.present?(:method) && - filename_argument.empty? - end - - def repl_edit - content = Pry::Editor.new(pry_instance).edit_tempfile_with_content( - initial_temp_file_content, - initial_temp_file_content.lines.count - ) - pry_instance.eval_string = content - Pry.history.push(content) - end - - def file_based_exception? - opts.present?(:ex) && !opts.present?(:patch) - end - - def runtime_patch? - !file_based_exception? && - (opts.present?(:patch) || - previously_patched?(code_object) || - pry_method?(code_object)) - end - - def apply_runtime_patch - if patch_exception? - ExceptionPatcher.new( - pry_instance, state, file_and_line_for_current_exception - ).perform_patch - elsif code_object.is_a?(Pry::Method) - code_object.redefine( - Pry::Editor.new(pry_instance).edit_tempfile_with_content( - code_object.source - ) - ) - else - raise NotImplementedError, "Cannot yet patch #{code_object} objects!" - end - end - - def ensure_file_name_is_valid(file_name) - unless file_name - raise CommandError, "Cannot find a valid file for #{filename_argument}" - end - - return unless not_a_real_file?(file_name) - - raise CommandError, "#{file_name} is not a valid file name, cannot edit!" - end - - def file_and_line_for_current_exception - FileAndLineLocator.from_exception(pry_instance.last_exception, opts[:ex].to_i) - end - - def file_and_line - file_name, line = - if opts.present?(:current) - FileAndLineLocator.from_binding(target) - elsif opts.present?(:ex) - file_and_line_for_current_exception - elsif code_object - FileAndLineLocator.from_code_object(code_object, filename_argument) - else - # when file and line are passed as a single arg, e.g my_file.rb:30 - FileAndLineLocator.from_filename_argument(filename_argument) - end - - [file_name, opts.present?(:line) ? opts[:l].to_i : line] - end - - def file_edit - file_name, line = file_and_line - - ensure_file_name_is_valid(file_name) - - Pry::Editor.new(pry_instance).invoke_editor(file_name, line, reload?(file_name)) - set_file_and_dir_locals(file_name) - - return unless reload?(file_name) - - silence_warnings { load(file_name) } - end - - def filename_argument - args.join(' ') - end - - def code_object - @code_object ||= - !probably_a_file?(filename_argument) && - Pry::CodeObject.lookup(filename_argument, pry_instance) - end - - def pry_method?(code_object) - code_object.is_a?(Pry::Method) && - code_object.pry_method? - end - - def previously_patched?(code_object) - code_object.is_a?(Pry::Method) && - Pry::Method::Patcher.code_for(code_object.source_location.first) - end - - def patch_exception? - opts.present?(:ex) && opts.present?(:patch) - end - - def bad_option_combination? - [ - opts.present?(:ex), opts.present?(:temp), - opts.present?(:in), opts.present?(:method), - !filename_argument.empty? - ].count(true) > 1 - end - - def input_expression - case opts[:i] - when Range - (pry_instance.input_ring[opts[:i]] || []).join - when Integer - pry_instance.input_ring[opts[:i]] || "" - else - raise Pry::CommandError, "Not a valid range: #{opts[:i]}" - end - end - - def reloadable? - opts.present?(:reload) || opts.present?(:ex) - end - - def never_reload? - opts.present?(:'no-reload') || pry_instance.config.disable_auto_reload - end - - def reload?(file_name = "") - (reloadable? || file_name.end_with?(".rb")) && !never_reload? - end - - def initial_temp_file_content - if opts.present?(:temp) - "" - elsif opts.present?(:in) - input_expression - elsif eval_string.strip != "" - eval_string - else - pry_instance.input_ring.to_a.reverse_each.find { |x| x && x.strip != "" } || "" - end - end - - def probably_a_file?(str) - [".rb", ".c", ".py", ".yml", ".gemspec"].include?(File.extname(str)) || - str =~ %r{/|\\} - end - end - - Pry::Commands.add_command(Pry::Command::Edit) - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/edit/exception_patcher.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/edit/exception_patcher.rb deleted file mode 100644 index 6465d597..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/edit/exception_patcher.rb +++ /dev/null @@ -1,29 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Command - class Edit - class ExceptionPatcher - attr_accessor :pry_instance - attr_accessor :state - attr_accessor :file_and_line - - def initialize(pry_instance, state, exception_file_and_line) - @pry_instance = pry_instance - @state = state - @file_and_line = exception_file_and_line - end - - # perform the patch - def perform_patch - file_name, = file_and_line - lines = state.dynamical_ex_file || File.read(file_name) - - source = Pry::Editor.new(pry_instance).edit_tempfile_with_content(lines) - pry_instance.evaluate_ruby source - state.dynamical_ex_file = source.split("\n") - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/edit/file_and_line_locator.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/edit/file_and_line_locator.rb deleted file mode 100644 index 2d0f7713..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/edit/file_and_line_locator.rb +++ /dev/null @@ -1,47 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Command - class Edit - module FileAndLineLocator - class << self - def from_binding(target) - if target.respond_to?(:source_location) - target.source_location - else - target.eval("[__FILE__, __LINE__]") - end - end - - def from_code_object(code_object, filename_argument) - unless File.exist?(code_object.source_file.to_s) - raise CommandError, "Cannot find a file for #{filename_argument}!" - end - - [code_object.source_file, code_object.source_line] - end - - def from_exception(exception, backtrace_level) - raise CommandError, "No exception found." if exception.nil? - - file_name, line = exception.bt_source_location_for(backtrace_level) - raise CommandError, "Exception has no associated file." if file_name.nil? - - if Pry.eval_path == file_name - raise CommandError, "Cannot edit exceptions raised in REPL." - end - - [file_name, line] - end - - # when file and line are passed as a single arg, e.g my_file.rb:30 - def from_filename_argument(filename_argument) - f = File.expand_path(filename_argument) - l = f.sub!(/:(\d+)$/, "") ? Regexp.last_match(1).to_i : 1 - [f, l] - end - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/exit.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/exit.rb deleted file mode 100644 index bbd67dd7..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/exit.rb +++ /dev/null @@ -1,47 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Command - class Exit < Pry::ClassCommand - match 'exit' - group 'Navigating Pry' - description 'Pop the previous binding.' - command_options keep_retval: true - - banner <<-'BANNER' - Usage: exit [OPTIONS] [--help] - Aliases: quit - - Pop the previous binding (does NOT exit program). It can be useful to exit a - context with a user-provided value. For instance an exit value can be used to - determine program flow. - - exit "pry this" - exit - - https://github.com/pry/pry/wiki/State-navigation#wiki-Exit_with_value - BANNER - - def process - if pry_instance.binding_stack.one? - pry_instance.run_command "exit-all #{arg_string}" - else - # otherwise just pop a binding and return user supplied value - process_pop_and_return - end - end - - def process_pop_and_return - popped_object = pry_instance.binding_stack.pop.eval('self') - - # return a user-specified value if given otherwise return the object - return target.eval(arg_string) unless arg_string.empty? - - popped_object - end - end - - Pry::Commands.add_command(Pry::Command::Exit) - Pry::Commands.alias_command 'quit', 'exit' - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/exit_all.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/exit_all.rb deleted file mode 100644 index e30373b4..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/exit_all.rb +++ /dev/null @@ -1,33 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Command - class ExitAll < Pry::ClassCommand - match 'exit-all' - group 'Navigating Pry' - description 'End the current Pry session.' - - banner <<-'BANNER' - Usage: exit-all [--help] - Aliases: !!@ - - End the current Pry session (popping all bindings and returning to caller). - Accepts optional return value. - BANNER - - def process - # calculate user-given value - exit_value = target.eval(arg_string) - - # clear the binding stack - pry_instance.binding_stack.clear - - # break out of the repl loop - throw(:breakout, exit_value) - end - end - - Pry::Commands.add_command(Pry::Command::ExitAll) - Pry::Commands.alias_command '!!@', 'exit-all' - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/exit_program.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/exit_program.rb deleted file mode 100644 index 3b52438a..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/exit_program.rb +++ /dev/null @@ -1,27 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Command - class ExitProgram < Pry::ClassCommand - match 'exit-program' - group 'Navigating Pry' - description 'End the current program.' - - banner <<-'BANNER' - Usage: exit-program [--help] - Aliases: quit-program - !!! - - End the current program. - BANNER - - def process - Kernel.exit target.eval(arg_string).to_i - end - end - - Pry::Commands.add_command(Pry::Command::ExitProgram) - Pry::Commands.alias_command 'quit-program', 'exit-program' - Pry::Commands.alias_command '!!!', 'exit-program' - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/find_method.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/find_method.rb deleted file mode 100644 index 6afced3c..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/find_method.rb +++ /dev/null @@ -1,199 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Command - class FindMethod < Pry::ClassCommand - extend Pry::Helpers::BaseHelpers - - match 'find-method' - group 'Context' - description 'Recursively search for a method within a Class/Module or ' \ - 'the current namespace.' - command_options shellwords: false - - banner <<-'BANNER' - Usage: find-method [-n|-c] METHOD [NAMESPACE] - - Recursively search for a method within a Class/Module or the current namespace. - Use the `-n` switch (the default) to search for methods whose name matches the - given regex. Use the `-c` switch to search for methods that contain the given - code. - - # Find all methods whose name match /re/ inside - # the Pry namespace. Matches Pry#repl, etc. - find-method re Pry - - # Find all methods that contain the code: - # output.puts inside the Pry namespace. - find-method -c 'output.puts' Pry - BANNER - - def options(opt) - opt.on :n, :name, "Search for a method by name" - opt.on :c, :content, "Search for a method based on content in Regex form" - end - - def process - return if args.empty? - - klass = search_class - - matches = opts.content? ? content_search(klass) : name_search(klass) - show_search_results(matches) - end - - private - - # @return [Regexp] The pattern to search for. - def pattern - @pattern ||= ::Regexp.new args[0] - end - - # Output the result of the search. - # - # @param [Array] matches - def show_search_results(matches) - if matches.empty? - output.puts bold("No Methods Matched") - else - print_matches(matches) - end - end - - # The class to search for methods. - # We only search classes, so if the search object is an - # instance, return its class. If no search object is given - # search `target_self`. - def search_class - klass = if args[1] - target.eval(args[1]) - else - target_self - end - - klass.is_a?(Module) ? klass : klass.class - end - - # pretty-print a list of matching methods. - # - # @param [Array] matches - def print_matches(matches) - grouped = matches.group_by(&:owner) - order = grouped.keys.sort_by { |x| x.name || x.to_s } - - order.each do |klass| - print_matches_for_class(klass, grouped) - end - end - - # Print matched methods for a class - def print_matches_for_class(klass, grouped) - output.puts bold(klass.name) - grouped[klass].each do |method| - header = method.name_with_owner - output.puts header + additional_info(header, method) - end - end - - # Return the matched lines of method source if `-c` is given or "" - # if `-c` was not given - def additional_info(header, method) - if opts.content? - ': ' + colorize_code(matched_method_lines(header, method)) - else - "" - end - end - - def matched_method_lines(header, method) - method.source.split(/\n/).select { |x| x =~ pattern }.join( - "\n#{' ' * header.length}" - ) - end - - # Run the given block against every constant in the provided namespace. - # - # @param [Module] klass The namespace in which to start the search. - # @param [Hash] done The namespaces we've already visited (private) - # @yieldparam klass Each class/module in the namespace. - # - def recurse_namespace(klass, done = {}, &block) - return if !klass.is_a?(Module) || done[klass] - - done[klass] = true - - yield klass - - klass.constants.each do |name| - next if klass.autoload?(name) - - begin - const = klass.const_get(name) - rescue RescuableException # rubocop:disable Lint/HandleExceptions - # constant loading is an inexact science at the best of times, - # this often happens when a constant was .autoload? but someone - # tried to load it. It's now not .autoload? but will still raise - # a NameError when you access it. - else - recurse_namespace(const, done, &block) - end - end - end - - # Gather all the methods in a namespace that pass the given block. - # - # @param [Module] namespace The namespace in which to search. - # @yieldparam [Method] method The method to test - # @yieldreturn [Boolean] - # @return [Array] - # - def search_all_methods(namespace) - done = Hash.new { |h, k| h[k] = {} } - matches = [] - - recurse_namespace(namespace) do |klass| - methods = Pry::Method.all_from_class(klass) + Pry::Method.all_from_obj(klass) - methods.each do |method| - next if done[method.owner][method.name] - - done[method.owner][method.name] = true - - matches << method if yield method - end - end - - matches - end - - # Search for all methods with a name that matches the given regex - # within a namespace. - # - # @param [Module] namespace The namespace to search - # @return [Array] - # - def name_search(namespace) - search_all_methods(namespace) do |meth| - meth.name =~ pattern - end - end - - # Search for all methods who's implementation matches the given regex - # within a namespace. - # - # @param [Module] namespace The namespace to search - # @return [Array] - # - def content_search(namespace) - search_all_methods(namespace) do |meth| - begin - meth.source =~ pattern - rescue RescuableException - false - end - end - end - end - - Pry::Commands.add_command(Pry::Command::FindMethod) - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/fix_indent.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/fix_indent.rb deleted file mode 100644 index 4974acb4..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/fix_indent.rb +++ /dev/null @@ -1,23 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Command - class FixIndent < Pry::ClassCommand - match 'fix-indent' - group 'Input and Output' - - description "Correct the indentation for contents of the input buffer" - - banner <<-USAGE - Usage: fix-indent - USAGE - - def process - indented_str = Pry::Indent.indent(eval_string) - pry_instance.eval_string = indented_str - end - end - - Pry::Commands.add_command(Pry::Command::FixIndent) - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/help.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/help.rb deleted file mode 100644 index 1dee2c64..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/help.rb +++ /dev/null @@ -1,171 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Command - class Help < Pry::ClassCommand - match 'help' - group 'Help' - description 'Show a list of commands or information about a specific command.' - - banner <<-'BANNER' - Usage: help [COMMAND] - - With no arguments, help lists all the available commands along with their - descriptions. When given a command name as an argument, shows the help - for that command. - BANNER - - # We only want to show commands that have descriptions, so that the - # easter eggs don't show up. - def visible_commands - visible = {} - commands.each do |key, command| - visible[key] = command if command.description && !command.description.empty? - end - visible - end - - # Get a hash of available commands grouped by the "group" name. - def command_groups - visible_commands.values.group_by(&:group) - end - - def process - if args.empty? - display_index(command_groups) - else - display_search(args.first) - end - end - - # Display the index view, with headings and short descriptions per command. - # - # @param [Hash>] groups - def display_index(groups) - help_text = [] - - sorted_group_names(groups).each do |group_name| - commands = sorted_commands(groups[group_name]) - - help_text << help_text_for_commands(group_name, commands) if commands.any? - end - - pry_instance.pager.page help_text.join("\n\n") - end - - # Given a group name and an array of commands, - # return the help string for those commands. - # - # @param [String] name The group name. - # @param [Array] commands - # @return [String] The generated help string. - def help_text_for_commands(name, commands) - "#{bold(name.capitalize)}\n" + commands.map do |command| - " #{command.options[:listing].to_s.ljust(18)} " \ - "#{command.description.capitalize}" - end.join("\n") - end - - # @param [Hash] groups - # @return [Array] An array of sorted group names. - def sorted_group_names(groups) - groups.keys.sort_by(&method(:group_sort_key)) - end - - # Sort an array of commands by their `listing` name. - # - # @param [Array] commands The commands to sort - # @return [Array] commands sorted by listing name. - def sorted_commands(commands) - commands.sort_by { |command| command.options[:listing].to_s } - end - - # Display help for an individual command or group. - # - # @param [String] search The string to search for. - def display_search(search) - if (command = command_set.find_command_for_help(search)) - display_command(command) - else - display_filtered_search_results(search) - end - end - - # Display help for a searched item, filtered first by group - # and if that fails, filtered by command name. - # - # @param [String] search The string to search for. - def display_filtered_search_results(search) - groups = search_hash(search, command_groups) - - if !groups.empty? - display_index(groups) - else - display_filtered_commands(search) - end - end - - # Display help for a searched item, filtered by group - # - # @param [String] search The string to search for. - def display_filtered_commands(search) - filtered = search_hash(search, visible_commands) - raise CommandError, "No help found for '#{args.first}'" if filtered.empty? - - if filtered.size == 1 - display_command(filtered.values.first) - else - display_index("'#{search}' commands" => filtered.values) - end - end - - # Display help for an individual command. - # - # @param [Pry::Command] command - def display_command(command) - pry_instance.pager.page command.new.help - end - - # Find a subset of a hash that matches the user's search term. - # - # If there's an exact match a Hash of one element will be returned, - # otherwise a sub-Hash with every key that matches the search will - # be returned. - # - # @param [String] search the search term - # @param [Hash] hash the hash to search - def search_hash(search, hash) - matching = {} - - hash.each_pair do |key, value| - next unless key.is_a?(String) - return { key => value } if normalize(key) == normalize(search) - next unless normalize(key).start_with?(normalize(search)) - - matching[key] = value - end - - matching - end - - # Clean search terms to make it easier to search group names - # - # @param [String] key - # @return [String] - def normalize(key) - key.downcase.gsub(/pry\W+/, '') - end - - def group_sort_key(group_name) - [ - %w[ - Help Context Editing Introspection Input_and_output Navigating_pry - Gems Basic Commands - ].index(group_name.tr(' ', '_')) || 99, group_name - ] - end - end - - Pry::Commands.add_command(Pry::Command::Help) - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/hist.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/hist.rb deleted file mode 100644 index 332176d2..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/hist.rb +++ /dev/null @@ -1,182 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Command - class Hist < Pry::ClassCommand - match 'hist' - group 'Editing' - description 'Show and replay Readline history.' - - banner <<-'BANNER' - Usage: hist [--head|--tail] - hist --all - hist --head N - hist --tail N - hist --show START..END - hist --grep PATTERN - hist --clear - hist --replay START..END - hist --save [START..END] FILE - Aliases: history - - Show and replay Readline history. - BANNER - - def options(opt) - opt.on :a, :all, "Display all history" - opt.on :H, :head, "Display the first N items", - optional_argument: true, as: Integer - opt.on :T, :tail, "Display the last N items", - optional_argument: true, as: Integer - opt.on :s, :show, "Show the given range of lines", - optional_argument: true, as: Range - opt.on :G, :grep, "Show lines matching the given pattern", - argument: true, as: String - opt.on :c, :clear, "Clear the current session's history" - opt.on :r, :replay, "Replay a line or range of lines", - argument: true, as: Range - opt.on :save, "Save history to a file", argument: true, as: Range - opt.on :e, :'exclude-pry', "Exclude Pry commands from the history" - opt.on :n, :'no-numbers', "Omit line numbers" - end - - def process - @history = find_history - - @history = @history.between(opts[:show]) if opts.present?(:show) - - @history = @history.grep(opts[:grep]) if opts.present?(:grep) - - @history = - if opts.present?(:head) - @history.take_lines(1, opts[:head] || 10) - elsif opts.present?(:tail) - @history.take_lines(-(opts[:tail] || 10), opts[:tail] || 10) - else - @history - end - - if opts.present?(:'exclude-pry') - @history = @history.reject do |loc| - command_set.valid_command?(loc.line) - end - end - - if opts.present?(:save) - process_save - elsif opts.present?(:clear) - process_clear - elsif opts.present?(:replay) - process_replay - else - process_display - end - end - - private - - def process_display - @history = @history.with_line_numbers unless opts.present?(:'no-numbers') - - pry_instance.pager.open do |pager| - @history.print_to_output(pager, true) - end - end - - def process_save - case opts[:save] - when Range - @history = @history.between(opts[:save]) - - raise CommandError, "Must provide a file name." unless args.first - - file_name = File.expand_path(args.first) - when String - file_name = File.expand_path(opts[:save]) - end - - output.puts "Saving history in #{file_name}..." - - File.open(file_name, 'w') { |f| f.write(@history.raw) } - - output.puts "History saved." - end - - def process_clear - Pry.history.clear - output.puts "History cleared." - end - - def process_replay - @history = @history.between(opts[:r]) - replay_sequence = @history.raw - - # If we met follow-up "hist" call, check for the "--replay" option - # presence. If "hist" command is called with other options, proceed - # further. - check_for_juxtaposed_replay(replay_sequence) - - replay_sequence.lines.each do |line| - pry_instance.eval line, generated: true - end - end - - # Checks +replay_sequence+ for the presence of neighboring replay calls. - # @example - # [1] pry(main)> hist --show 46894 - # 46894: hist --replay 46675..46677 - # [2] pry(main)> hist --show 46675..46677 - # 46675: 1+1 - # 46676: a = 100 - # 46677: hist --tail - # [3] pry(main)> hist --replay 46894 - # Error: Replay index 46894 points out to another replay call: - # `hist -r 46675..46677` - # [4] pry(main)> - # - # @raise [Pry::CommandError] If +replay_sequence+ contains another - # "hist --replay" call - # @param [String] replay_sequence The sequence of commands to be replayed - # (per saltum) - # @return [Boolean] `false` if +replay_sequence+ does not contain another - # "hist --replay" call - def check_for_juxtaposed_replay(replay_sequence) - if replay_sequence =~ /\Ahist(?:ory)?\b/ - # Create *fresh* instance of Options for parsing of "hist" command. - slop_instance = slop - slop_instance.parse(replay_sequence.split(' ')[1..-1]) - - if slop_instance.present?(:r) - replay_sequence = replay_sequence.split("\n").join('; ') - index = opts[:r] - index = index.min if index.min == index.max || index.max.nil? - - raise CommandError, - "Replay index #{index} points out to another replay call: " \ - "`#{replay_sequence}`" - end - else - false - end - end - - # Finds history depending on the given switch. - # - # @return [Pry::Code] if it finds `--all` (or `-a`) switch, returns all - # entries in history. Without the switch returns only the entries from the - # current Pry session. - def find_history - h = if opts.present?(:all) - Pry.history.to_a - else - Pry.history.to_a.last(Pry.history.session_line_count) - end - - Pry::Code(Pry.history.filter(h[0..-2])) - end - end - - Pry::Commands.add_command(Pry::Command::Hist) - Pry::Commands.alias_command 'history', 'hist' - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/import_set.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/import_set.rb deleted file mode 100644 index 6d09fd8f..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/import_set.rb +++ /dev/null @@ -1,27 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Command - class ImportSet < Pry::ClassCommand - match 'import-set' - group 'Commands' - # TODO: Provide a better description with examples and a general conception - # of this command. - description 'Import a Pry command set.' - - banner <<-'BANNER' - Import a Pry command set. - BANNER - - # TODO: resolve unused parameter. - def process(_command_set_name) - raise CommandError, "Provide a command set name" if command_set.nil? - - set = target.eval(arg_string) - pry_instance.commands.import set - end - end - - Pry::Commands.add_command(Pry::Command::ImportSet) - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/jump_to.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/jump_to.rb deleted file mode 100644 index eca7a988..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/jump_to.rb +++ /dev/null @@ -1,33 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Command - class JumpTo < Pry::ClassCommand - match 'jump-to' - group 'Navigating Pry' - description 'Jump to a binding further up the stack.' - - banner <<-'BANNER' - Jump to a binding further up the stack, popping all bindings below. - BANNER - - def process(break_level) - break_level = break_level.to_i - nesting_level = pry_instance.binding_stack.size - 1 - max_nest_level = nesting_level - 1 - - case break_level - when nesting_level - output.puts "Already at nesting level #{nesting_level}" - when 0..max_nest_level - pry_instance.binding_stack = pry_instance.binding_stack[0..break_level] - else - output.puts "Invalid nest level. Must be between 0 and " \ - "#{max_nest_level}. Got #{break_level}." - end - end - end - - Pry::Commands.add_command(Pry::Command::JumpTo) - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/list_inspectors.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/list_inspectors.rb deleted file mode 100644 index eefab994..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/list_inspectors.rb +++ /dev/null @@ -1,42 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Command - class ListInspectors < Pry::ClassCommand - match 'list-inspectors' - group 'Input and Output' - description 'List the inspector procs available for use.' - banner <<-BANNER - Usage: list-inspectors - - List the inspector procs available to print return values. You can use - change-inspector to switch between them. - BANNER - - def process - output.puts heading("Available inspectors") + "\n" - inspector_map.each do |name, inspector| - output.write "Name: #{bold(name)}" - output.puts selected_inspector?(inspector) ? selected_text : "" - output.puts inspector[:description] - output.puts - end - end - - private - - def inspector_map - Pry::Inspector::MAP - end - - def selected_text - red " (selected) " - end - - def selected_inspector?(inspector) - pry_instance.print == inspector[:value] - end - Pry::Commands.add_command(self) - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/ls.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/ls.rb deleted file mode 100644 index 1a03db15..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/ls.rb +++ /dev/null @@ -1,135 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Command - class Ls < Pry::ClassCommand - DEFAULT_OPTIONS = { - heading_color: :bright_blue, - public_method_color: :default, - private_method_color: :blue, - protected_method_color: :blue, - method_missing_color: :bright_red, - local_var_color: :yellow, - pry_var_color: :default, # e.g. _, pry_instance, _file_ - instance_var_color: :blue, # e.g. @foo - class_var_color: :bright_blue, # e.g. @@foo - global_var_color: :default, # e.g. $CODERAY_DEBUG, $eventmachine_library - builtin_global_color: :cyan, # e.g. $stdin, $-w, $PID - pseudo_global_color: :cyan, # e.g. $~, $1..$9, $LAST_MATCH_INFO - constant_color: :default, # e.g. VERSION, ARGF - class_constant_color: :blue, # e.g. Object, Kernel - exception_constant_color: :magenta, # e.g. Exception, RuntimeError - unloaded_constant_color: :yellow, # Any constant that is still in .autoload? state - separator: " ", - ceiling: [Object, Module, Class] - }.freeze - - match 'ls' - group 'Context' - description 'Show the list of vars and methods in the current scope.' - command_options shellwords: false, interpolate: false - - banner <<-'BANNER' - Usage: ls [-m|-M|-p|-pM] [-q|-v] [-c|-i] [Object] - ls [-g] [-l] - - ls shows you which methods, constants and variables are accessible to Pry. By - default it shows you the local variables defined in the current shell, and any - public methods or instance variables defined on the current object. - - The colours used are configurable using Pry.config.ls.*_color, and the separator - is Pry.config.ls.separator. - - Pry.config.ls.ceiling is used to hide methods defined higher up in the - inheritance chain, this is by default set to [Object, Module, Class] so that - methods defined on all Objects are omitted. The -v flag can be used to ignore - this setting and show all methods, while the -q can be used to set the ceiling - much lower and show only methods defined on the object or its direct class. - - Also check out `find-method` command (run `help find-method`). - BANNER - - def options(opt) - opt.on :m, :methods, "Show public methods defined on the Object" - opt.on :M, "instance-methods", "Show public methods defined in a " \ - "Module or Class" - opt.on :p, :ppp, "Show public, protected (in yellow) and private " \ - "(in green) methods" - opt.on :q, :quiet, "Show only methods defined on object.singleton_class " \ - "and object.class" - opt.on :v, :verbose, "Show methods and constants on all super-classes " \ - "(ignores Pry.config.ls.ceiling)" - opt.on :g, :globals, "Show global variables, including those builtin to " \ - "Ruby (in cyan)" - opt.on :l, :locals, "Show hash of local vars, sorted by descending size" - opt.on :c, :constants, "Show constants, highlighting classes (in blue), " \ - "and exceptions (in purple).\n" \ - "#{' ' * 32}Constants that are pending autoload? " \ - "are also shown (in yellow)" - opt.on :i, :ivars, "Show instance variables (in blue) and class " \ - "variables (in bright blue)" - opt.on :G, :grep, "Filter output by regular expression", argument: true - - if Object.respond_to?(:deprecate_constant) - opt.on :d, :dconstants, "Show deprecated constants" - end - - return unless Helpers::Platform.jruby? - - opt.on :J, "all-java", "Show all the aliases for methods from java " \ - "(default is to show only prettiest)" - end - - # Exclude -q, -v and --grep because they, - # don't specify what the user wants to see. - def no_user_opts? - !(opts[:methods] || opts['instance-methods'] || opts[:ppp] || - opts[:globals] || opts[:locals] || opts[:constants] || opts[:ivars]) - end - - def process - @interrogatee = args.empty? ? target_self : target.eval(args.join(' ')) - raise_errors_if_arguments_are_weird - ls_entity = LsEntity.new( - interrogatee: @interrogatee, - no_user_opts: no_user_opts?, - opts: opts, - args: args, - pry_instance: pry_instance - ) - - pry_instance.pager.page ls_entity.entities_table - end - - private - - def error_list - any_args = args.any? - # rubocop:disable Style/CaseEquality - non_mod_interrogatee = !(Module === @interrogatee) - # rubocop:enable Style/CaseEquality - [ - ['-l does not make sense with a specified Object', :locals, any_args], - ['-g does not make sense with a specified Object', :globals, any_args], - ['-q does not make sense with -v', :quiet, opts.present?(:verbose)], - [ - '-M only makes sense with a Module or a Class', 'instance-methods', - non_mod_interrogatee - ], - [ - '-c only makes sense with a Module or a Class', :constants, - any_args && non_mod_interrogatee - ] - ] - end - - def raise_errors_if_arguments_are_weird - error_list.each do |message, option, invalid_expr| - raise Pry::CommandError, message if opts.present?(option) && invalid_expr - end - end - end - - Pry::Commands.add_command(Pry::Command::Ls) - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/ls/constants.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/ls/constants.rb deleted file mode 100644 index b70a12df..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/ls/constants.rb +++ /dev/null @@ -1,75 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Command - class Ls < Pry::ClassCommand - class Constants < Pry::Command::Ls::Formatter - DEPRECATED_CONSTANTS = %i[ - Data Fixnum Bignum TimeoutError NIL FALSE TRUE - ].tap do |constants| - constants << :JavaPackageModuleTemplate if Helpers::Platform.jruby? - end - include Pry::Command::Ls::Interrogatable - - def initialize(interrogatee, no_user_opts, opts, pry_instance) - super(pry_instance) - @interrogatee = interrogatee - @no_user_opts = no_user_opts - @default_switch = opts[:constants] - @verbose_switch = opts[:verbose] - @dconstants = opts.dconstants? - end - - def correct_opts? - super || (@no_user_opts && interrogating_a_module?) - end - - def output_self - mod = interrogatee_mod - constants = WrappedModule.new(mod).constants(@verbose_switch) - output_section('constants', grep.regexp[format(mod, constants)]) - end - - private - - def show_deprecated_constants? - @dconstants == true - end - - def format(mod, constants) - constants.sort_by(&:downcase).map do |name| - if Object.respond_to?(:deprecate_constant) && - DEPRECATED_CONSTANTS.include?(name) && - !show_deprecated_constants? - next - end - - if (const = (begin - !mod.autoload?(name) && (mod.const_get(name) || true) - rescue StandardError - nil - end)) - if begin - const < Exception - rescue StandardError - false - end - color(:exception_constant, name) - elsif begin - mod.const_get(name).is_a?(Module) - rescue StandardError - false - end - color(:class_constant, name) - else - color(:constant, name) - end - else - color(:unloaded_constant, name) - end - end - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/ls/formatter.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/ls/formatter.rb deleted file mode 100644 index 04baee60..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/ls/formatter.rb +++ /dev/null @@ -1,55 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Command - class Ls < Pry::ClassCommand - class Formatter - attr_writer :grep - attr_reader :pry_instance - - def initialize(pry_instance) - @pry_instance = pry_instance - @target = pry_instance.current_context - @default_switch = nil - end - - def write_out - return false unless correct_opts? - - output_self - end - - private - - def color(type, str) - Pry::Helpers::Text.send pry_instance.config.ls.send("#{type}_color"), str - end - - # Add a new section to the output. - # Outputs nothing if the section would be empty. - def output_section(heading, body) - return '' if body.compact.empty? - - fancy_heading = Pry::Helpers::Text.bold(color(:heading, heading)) - Pry::Helpers.tablify_or_one_line(fancy_heading, body, @pry_instance) - end - - def format_value(value) - Pry::ColorPrinter.pp(value, ''.dup) - end - - def correct_opts? - @default_switch - end - - def output_self - raise NotImplementedError - end - - def grep - @grep || proc { |x| x } - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/ls/globals.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/ls/globals.rb deleted file mode 100644 index ab5c979d..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/ls/globals.rb +++ /dev/null @@ -1,50 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Command - class Ls < Pry::ClassCommand - class Globals < Pry::Command::Ls::Formatter - # Taken from "puts global_variables.inspect". - BUILTIN_GLOBALS = - %w[$" $$ $* $, $-0 $-F $-I $-K $-W $-a $-d $-i $-l $-p $-v $-w $. $/ $\\ - $: $; $< $= $> $0 $ARGV $CONSOLE $DEBUG $DEFAULT_INPUT $DEFAULT_OUTPUT - $FIELD_SEPARATOR $FILENAME $FS $IGNORECASE $INPUT_LINE_NUMBER - $INPUT_RECORD_SEPARATOR $KCODE $LOADED_FEATURES $LOAD_PATH $NR $OFS - $ORS $OUTPUT_FIELD_SEPARATOR $OUTPUT_RECORD_SEPARATOR $PID $PROCESS_ID - $PROGRAM_NAME $RS $VERBOSE $deferr $defout $stderr $stdin $stdout].freeze - - # `$SAFE` and `$?` are thread-local, the exception stuff only works in a - # rescue clause, everything else is basically a local variable with a `$` - # in its name. - PSEUDO_GLOBALS = - %w[$! $' $& $` $@ $? $+ $_ $~ $1 $2 $3 $4 $5 $6 $7 $8 $9 - $CHILD_STATUS $SAFE $ERROR_INFO $ERROR_POSITION $LAST_MATCH_INFO - $LAST_PAREN_MATCH $LAST_READ_LINE $MATCH $POSTMATCH $PREMATCH].freeze - - def initialize(opts, pry_instance) - super(pry_instance) - @default_switch = opts[:globals] - end - - def output_self - variables = format(@target.eval('global_variables')) - output_section('global variables', grep.regexp[variables]) - end - - private - - def format(globals) - globals.map(&:to_s).sort_by(&:downcase).map do |name| - if PSEUDO_GLOBALS.include?(name) - color(:pseudo_global, name) - elsif BUILTIN_GLOBALS.include?(name) - color(:builtin_global, name) - else - color(:global_var, name) - end - end - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/ls/grep.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/ls/grep.rb deleted file mode 100644 index 425670e4..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/ls/grep.rb +++ /dev/null @@ -1,23 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Command - class Ls < Pry::ClassCommand - class Grep - def initialize(grep_regexp) - @grep_regexp = grep_regexp - end - - def regexp - proc { |x| - if x.instance_of?(Array) - x.grep(@grep_regexp) - else - x =~ @grep_regexp - end - } - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/ls/instance_vars.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/ls/instance_vars.rb deleted file mode 100644 index 9a35a359..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/ls/instance_vars.rb +++ /dev/null @@ -1,40 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Command - class Ls < Pry::ClassCommand - class InstanceVars < Pry::Command::Ls::Formatter - include Pry::Command::Ls::Interrogatable - - def initialize(interrogatee, no_user_opts, opts, pry_instance) - super(pry_instance) - @interrogatee = interrogatee - @no_user_opts = no_user_opts - @default_switch = opts[:ivars] - end - - def correct_opts? - super || @no_user_opts - end - - def output_self - ivars = if Object === @interrogatee # rubocop:disable Style/CaseEquality - Pry::Method.safe_send(@interrogatee, :instance_variables) - else - [] # TODO: BasicObject support - end - kvars = Pry::Method.safe_send(interrogatee_mod, :class_variables) - ivars_out = output_section('instance variables', format(:instance_var, ivars)) - kvars_out = output_section('class variables', format(:class_var, kvars)) - ivars_out + kvars_out - end - - private - - def format(type, vars) - vars.sort_by { |var| var.to_s.downcase }.map { |var| color(type, var) } - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/ls/interrogatable.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/ls/interrogatable.rb deleted file mode 100644 index 390cfd11..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/ls/interrogatable.rb +++ /dev/null @@ -1,24 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Command - class Ls < Pry::ClassCommand - module Interrogatable - private - - def interrogating_a_module? - Module === @interrogatee # rubocop:disable Style/CaseEquality - end - - def interrogatee_mod - if interrogating_a_module? - @interrogatee - else - singleton = Pry::Method.singleton_class_of(@interrogatee) - singleton.ancestors.grep(::Class).reject { |c| c == singleton }.first - end - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/ls/jruby_hacks.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/ls/jruby_hacks.rb deleted file mode 100644 index b631dbb4..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/ls/jruby_hacks.rb +++ /dev/null @@ -1,55 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Command - class Ls < Pry::ClassCommand - module JRubyHacks - private - - # JRuby creates lots of aliases for methods imported from java in an attempt - # to make life easier for ruby programmers. (e.g. getFooBar becomes - # get_foo_bar and foo_bar, and maybe foo_bar? if it returns a Boolean). The - # full transformations are in the assignAliases method of: - # https://github.com/jruby/jruby/blob/master/src/org/jruby/javasupport/JavaClass.java - # - # This has the unfortunate side-effect of making the output of ls even more - # incredibly verbose than it normally would be for these objects; and so we - # filter out all but the nicest of these aliases here. - # - # TODO: This is a little bit vague, better heuristics could be used. - # JRuby also has a lot of scala-specific logic, which we don't copy. - def trim_jruby_aliases(methods) - grouped = methods.group_by do |m| - m.name.sub(/\A(is|get|set)(?=[A-Z_])/, '').gsub(/[_?=]/, '').downcase - end - - grouped.flat_map do |_key, values| - values = values.sort_by do |m| - rubbishness(m.name) - end - - found = [] - values.select do |x| - (found.none? { |y| x == y }) && found << x - end - end - end - - # When removing jruby aliases, we want to keep the alias that is - # "least rubbish" according to this metric. - def rubbishness(name) - name.each_char.map do |x| - case x - when /[A-Z]/ - 1 - when '?', '=', '!' - -2 - else - 0 - end - end.inject(&:+) + (name.size / 100.0) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/ls/local_names.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/ls/local_names.rb deleted file mode 100644 index 3f7c5faf..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/ls/local_names.rb +++ /dev/null @@ -1,37 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Command - class Ls < Pry::ClassCommand - class LocalNames < Pry::Command::Ls::Formatter - def initialize(no_user_opts, args, pry_instance) - super(pry_instance) - @no_user_opts = no_user_opts - @args = args - @sticky_locals = pry_instance.sticky_locals - end - - def correct_opts? - super || (@no_user_opts && @args.empty?) - end - - def output_self - local_vars = grep.regexp[@target.eval('local_variables')] - output_section('locals', format(local_vars)) - end - - private - - def format(locals) - locals.sort_by(&:downcase).map do |name| - if @sticky_locals.include?(name.to_sym) - color(:pry_var, name) - else - color(:local_var, name) - end - end - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/ls/local_vars.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/ls/local_vars.rb deleted file mode 100644 index 45605e69..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/ls/local_vars.rb +++ /dev/null @@ -1,47 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Command - class Ls < Pry::ClassCommand - class LocalVars < Pry::Command::Ls::Formatter - def initialize(opts, pry_instance) - super(pry_instance) - @default_switch = opts[:locals] - @sticky_locals = pry_instance.sticky_locals - end - - def output_self - locals = @target.eval('local_variables').reject do |e| - @sticky_locals.key?(e.to_sym) - end - name_value_pairs = locals.map do |name| - [name, @target.eval(name.to_s)] - end - format(name_value_pairs).join('') - end - - private - - def format(name_value_pairs) - sorted = name_value_pairs.sort_by do |_name, value| - value.to_s.size - end - sorted.reverse.map do |name, value| - colorized_assignment_style(name, format_value(value)) - end - end - - def colorized_assignment_style(lhs, rhs, desired_width = 7) - colorized_lhs = color(:local_var, lhs) - color_escape_padding = colorized_lhs.size - lhs.size - pad = desired_width + color_escape_padding - Kernel.format( - "%-#{pad}s = %s", - name: color(:local_var, colorized_lhs), - value: rhs - ) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/ls/ls_entity.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/ls/ls_entity.rb deleted file mode 100644 index 197070a1..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/ls/ls_entity.rb +++ /dev/null @@ -1,65 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Command - class Ls < Pry::ClassCommand - class LsEntity - attr_reader :pry_instance - - def initialize(opts) - @interrogatee = opts[:interrogatee] - @no_user_opts = opts[:no_user_opts] - @opts = opts[:opts] - @args = opts[:args] - @grep = Grep.new(Regexp.new(opts[:opts][:G] || '.')) - @pry_instance = opts.delete(:pry_instance) - end - - def entities_table - entities.map(&:write_out).select { |o| o }.join('') - end - - private - - def grep(entity) - entity.tap { |o| o.grep = @grep } - end - - def globals - grep Globals.new(@opts, pry_instance) - end - - def constants - grep Constants.new(@interrogatee, @no_user_opts, @opts, pry_instance) - end - - def methods - grep(Methods.new(@interrogatee, @no_user_opts, @opts, pry_instance)) - end - - def self_methods - grep SelfMethods.new(@interrogatee, @no_user_opts, @opts, pry_instance) - end - - def instance_vars - grep InstanceVars.new(@interrogatee, @no_user_opts, @opts, pry_instance) - end - - def local_names - grep LocalNames.new(@no_user_opts, @args, pry_instance) - end - - def local_vars - LocalVars.new(@opts, pry_instance) - end - - def entities - [ - globals, constants, methods, self_methods, instance_vars, local_names, - local_vars - ] - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/ls/methods.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/ls/methods.rb deleted file mode 100644 index 484f6647..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/ls/methods.rb +++ /dev/null @@ -1,55 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Command - class Ls < Pry::ClassCommand - class Methods < Pry::Command::Ls::Formatter - include Pry::Command::Ls::Interrogatable - include Pry::Command::Ls::MethodsHelper - - def initialize(interrogatee, no_user_opts, opts, pry_instance) - super(pry_instance) - @interrogatee = interrogatee - @no_user_opts = no_user_opts - @default_switch = opts[:methods] - @instance_methods_switch = opts['instance-methods'] - @ppp_switch = opts[:ppp] - @jruby_switch = opts['all-java'] - @quiet_switch = opts[:quiet] - @verbose_switch = opts[:verbose] - end - - def output_self - methods = all_methods.group_by(&:owner) - # Reverse the resolution order so that the most useful information - # appears right by the prompt. - resolution_order.take_while(&below_ceiling).reverse.map do |klass| - methods_here = (methods[klass] || []).select { |m| grep.regexp[m.name] } - heading = "#{Pry::WrappedModule.new(klass).method_prefix}methods" - output_section(heading, format(methods_here)) - end.join('') - end - - private - - def correct_opts? - super || @instance_methods_switch || @ppp_switch || @no_user_opts - end - - # Get a lambda that can be used with `take_while` to prevent over-eager - # traversal of the Object's ancestry graph. - def below_ceiling - ceiling = if @quiet_switch - [Pry::Method.safe_send(interrogatee_mod, :ancestors)[1]] + - pry_instance.config.ls.ceiling - elsif @verbose_switch - [] - else - pry_instance.config.ls.ceiling.dup - end - ->(klass) { !ceiling.include?(klass) } - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/ls/methods_helper.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/ls/methods_helper.rb deleted file mode 100644 index 635cd214..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/ls/methods_helper.rb +++ /dev/null @@ -1,50 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Command - class Ls < Pry::ClassCommand - module MethodsHelper - include Pry::Command::Ls::JRubyHacks - - private - - # Get all the methods that we'll want to output. - def all_methods(instance_methods = false) - methods = if instance_methods || @instance_methods_switch - Pry::Method.all_from_class(@interrogatee) - else - Pry::Method.all_from_obj(@interrogatee) - end - - if Pry::Helpers::Platform.jruby? && !@jruby_switch - methods = trim_jruby_aliases(methods) - end - - methods.select { |method| @ppp_switch || method.visibility == :public } - end - - def resolution_order - if @instance_methods_switch - Pry::Method.instance_resolution_order(@interrogatee) - else - Pry::Method.resolution_order(@interrogatee) - end - end - - def format(methods) - methods.sort_by(&:name).map do |method| - if method.name == 'method_missing' - color(:method_missing, 'method_missing') - elsif method.visibility == :private - color(:private_method, method.name) - elsif method.visibility == :protected - color(:protected_method, method.name) - else - color(:public_method, method.name) - end - end - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/ls/self_methods.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/ls/self_methods.rb deleted file mode 100644 index a8bf8a4a..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/ls/self_methods.rb +++ /dev/null @@ -1,34 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Command - class Ls < Pry::ClassCommand - class SelfMethods < Pry::Command::Ls::Formatter - include Pry::Command::Ls::Interrogatable - include Pry::Command::Ls::MethodsHelper - - def initialize(interrogatee, no_user_opts, opts, pry_instance) - super(pry_instance) - @interrogatee = interrogatee - @no_user_opts = no_user_opts - @ppp_switch = opts[:ppp] - @jruby_switch = opts['all-java'] - end - - def output_self - methods = all_methods(true).select do |m| - m.owner == @interrogatee && grep.regexp[m.name] - end - heading = "#{Pry::WrappedModule.new(@interrogatee).method_prefix}methods" - output_section(heading, format(methods)) - end - - private - - def correct_opts? - @no_user_opts && interrogating_a_module? - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/nesting.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/nesting.rb deleted file mode 100644 index 93da1572..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/nesting.rb +++ /dev/null @@ -1,29 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Command - class Nesting < Pry::ClassCommand - match 'nesting' - group 'Navigating Pry' - description 'Show nesting information.' - - banner <<-'BANNER' - Show nesting information. - BANNER - - def process - output.puts 'Nesting status:' - output.puts '--' - pry_instance.binding_stack.each_with_index do |obj, level| - if level == 0 - output.puts "#{level}. #{Pry.view_clip(obj.eval('self'))} (Pry top level)" - else - output.puts "#{level}. #{Pry.view_clip(obj.eval('self'))}" - end - end - end - end - - Pry::Commands.add_command(Pry::Command::Nesting) - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/play.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/play.rb deleted file mode 100644 index e68b2e15..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/play.rb +++ /dev/null @@ -1,113 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Command - class Play < Pry::ClassCommand - match 'play' - group 'Editing' - description 'Playback a string variable, method, line, or file as input.' - - banner <<-'BANNER' - Usage: play [OPTIONS] [--help] - - The play command enables you to replay code from files and methods as if they - were entered directly in the Pry REPL. - - play --lines 149..153 # assumes current context - play -i 20 --lines 1..3 # assumes lines of the input expression at 20 - play -o 4 # the output of an expression at 4 - play Pry#repl -l 1..-1 # play the contents of Pry#repl method - play -e 2 # play from specified line until end of valid expression - play hello.rb # play a file - play Rakefile -l 5 # play line 5 of a file - play -d hi # play documentation of hi method - play hi --open # play hi method and leave it open - - https://github.com/pry/pry/wiki/User-Input#wiki-Play - BANNER - - def options(opt) - CodeCollector.inject_options(opt) - - opt.on :open, 'Plays the selected content except the last line. Useful' \ - ' for replaying methods and leaving the method definition' \ - ' "open". `amend-line` can then be used to' \ - ' modify the method.' - - opt.on :e, :expression=, 'Executes until end of valid expression', as: Integer - opt.on :p, :print, 'Prints executed code' - end - - def process - @cc = CodeCollector.new(args, opts, pry_instance) - - perform_play - show_input - end - - def perform_play - eval_string << content_after_options - run "fix-indent" - end - - def show_input - return unless opts.present?(:print) - return unless Pry::Code.complete_expression?(eval_string) - - run 'show-input' - end - - def content_after_options - if opts.present?(:open) - restrict_to_lines(content, (0..-2)) - elsif opts.present?(:expression) - content_at_expression - else - content - end - end - - def content_at_expression - code_object.expression_at(opts[:expression]) - end - - def code_object - Pry::Code.new(content) - end - - def should_use_default_file? - !args.first && !opts.present?(:in) && !opts.present?(:out) - end - - def content - if should_use_default_file? - file_content - else - @cc.content - end - end - - # The file to play from when no code object is specified. - # e.g `play --lines 4..10` - def default_file - file = - if target.respond_to?(:source_location) - target.source_location.first - else - target.eval("__FILE__") - end - file && File.expand_path(file) - end - - def file_content - if !default_file || !File.exist?(default_file) - raise CommandError, "File does not exist! File was: #{default_file.inspect}" - end - - @cc.restrict_to_lines(File.read(default_file), @cc.line_range) - end - end - - Pry::Commands.add_command(Pry::Command::Play) - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/pry_backtrace.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/pry_backtrace.rb deleted file mode 100644 index d3a1b86c..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/pry_backtrace.rb +++ /dev/null @@ -1,30 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Command - class PryBacktrace < Pry::ClassCommand - match 'pry-backtrace' - group 'Context' - description 'Show the backtrace for the Pry session.' - - banner <<-BANNER - Usage: pry-backtrace [OPTIONS] [--help] - - Show the backtrace for the position in the code where Pry was started. This can - be used to infer the behavior of the program immediately before it entered Pry, - just like the backtrace property of an exception. - - NOTE: if you are looking for the backtrace of the most recent exception raised, - just type: `_ex_.backtrace` instead. - See: https://github.com/pry/pry/wiki/Special-Locals - BANNER - - def process - text = "#{bold('Backtrace:')}\n--\n#{pry_instance.backtrace.join("\n")}" - pry_instance.pager.page(text) - end - end - - Pry::Commands.add_command(Pry::Command::PryBacktrace) - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/pry_version.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/pry_version.rb deleted file mode 100644 index 40408733..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/pry_version.rb +++ /dev/null @@ -1,21 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Command - class Version < Pry::ClassCommand - match 'pry-version' - group 'Misc' - description 'Show Pry version.' - - banner <<-'BANNER' - Show Pry version. - BANNER - - def process - output.puts "Pry version: #{Pry::VERSION} on Ruby #{RUBY_VERSION}." - end - end - - Pry::Commands.add_command(Pry::Command::Version) - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/raise_up.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/raise_up.rb deleted file mode 100644 index f002636e..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/raise_up.rb +++ /dev/null @@ -1,38 +0,0 @@ -# frozen_string_literal: true - -class Pry - # N.B. using a regular expresion here so that "raise-up 'foo'" does the right thing. - class Command - class RaiseUp < Pry::ClassCommand - match(/raise-up(!?\b.*)/) - group 'Context' - description 'Raise an exception out of the current pry instance.' - command_options listing: 'raise-up' - - banner <<-BANNER - Raise up, like exit, allows you to quit pry. Instead of returning a value - however, it raises an exception. If you don't provide the exception to be - raised, it will use the most recent exception (in pry `_ex_`). - - When called as raise-up! (with an exclamation mark), this command raises the - exception through any nested prys you have created by "cd"ing into objects. - - raise-up "get-me-out-of-here" - - # This is equivalent to the command above. - raise "get-me-out-of-here" - raise-up - BANNER - - def process - return _pry.pager.page help if captures[0] =~ /(-h|--help)\b/ - - # Handle 'raise-up', 'raise-up "foo"', 'raise-up RuntimeError, 'farble' - # in a rubyesque manner - target.eval("pry_instance.raise_up#{captures[0]}") - end - end - - Pry::Commands.add_command(Pry::Command::RaiseUp) - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/reload_code.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/reload_code.rb deleted file mode 100644 index 85f4260d..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/reload_code.rb +++ /dev/null @@ -1,74 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Command - class ReloadCode < Pry::ClassCommand - match 'reload-code' - group 'Misc' - description 'Reload the source file that contains the specified code object.' - - banner <<-'BANNER' - Reload the source file that contains the specified code object. - - e.g reload-code MyClass#my_method #=> reload a method - reload-code MyClass #=> reload a class - reload-code my-command #=> reload a pry command - reload-code self #=> reload the current object - reload-code #=> reload the current file or object - BANNER - - def process - if !args.empty? - reload_object(args.join(" ")) - elsif internal_binding?(target) - reload_object("self") - else - reload_current_file - end - end - - private - - def current_file - file = - if target.respond_to?(:source_location) - target.source_location.first - else - target.eval("__FILE__") - end - File.expand_path file - end - - def reload_current_file - unless File.exist?(current_file) - raise CommandError, "Current file: #{current_file} cannot be found on disk!" - end - - load current_file - output.puts "The current file: #{current_file} was reloaded!" - end - - def reload_object(identifier) - code_object = Pry::CodeObject.lookup(identifier, pry_instance) - check_for_reloadability(code_object, identifier) - load code_object.source_file - output.puts "#{identifier} was reloaded!" - end - - def check_for_reloadability(code_object, identifier) - if !code_object || !code_object.source_file - raise CommandError, "Cannot locate #{identifier}!" - end - - return if File.exist?(code_object.source_file) - - raise CommandError, - "Cannot reload #{identifier} as it has no associated file on disk. " \ - "File found was: #{code_object.source_file}" - end - end - - Pry::Commands.add_command(Pry::Command::ReloadCode) - Pry::Commands.alias_command 'reload-method', 'reload-code' - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/reset.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/reset.rb deleted file mode 100644 index e668e59f..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/reset.rb +++ /dev/null @@ -1,22 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Command - class Reset < Pry::ClassCommand - match 'reset' - group 'Context' - description 'Reset the REPL to a clean state.' - - banner <<-'BANNER' - Reset the REPL to a clean state. - BANNER - - def process - output.puts 'Pry reset.' - exec 'pry' - end - end - - Pry::Commands.add_command(Pry::Command::Reset) - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/ri.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/ri.rb deleted file mode 100644 index b9cb5907..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/ri.rb +++ /dev/null @@ -1,75 +0,0 @@ -# frozen_string_literal: true - -require 'stringio' - -class Pry - class Command - class Ri < Pry::ClassCommand - match 'ri' - group 'Introspection' - description 'View ri documentation.' - - banner <<-'BANNER' - Usage: ri [spec] - - View ri documentation. Relies on the "rdoc" gem being installed. - See also "show-doc" command. - - ri Array#each - BANNER - - def process(spec) - unless spec - return output.puts( - "Please provide a class, module, or method name (e.g: ri Array#push)" - ) - end - - # Lazily load RI - require 'rdoc/ri/driver' - - unless defined? RDoc::RI::PryDriver - - # Subclass RI so that it formats its output nicely, and uses `lesspipe`. - subclass = Class.new(RDoc::RI::Driver) # the hard way. - - subclass.class_eval do - def initialize(pager, opts) - @pager = pager - super opts - end - - def page - paging_text = StringIO.new - yield paging_text - @pager.page(paging_text.string) - end - - def formatter(_io) - if @formatter_klass - @formatter_klass.new - else - RDoc::Markup::ToAnsi.new - end - end - end - - RDoc::RI.const_set :PryDriver, subclass # hook it up! - end - - # Spin-up an RI insance. - ri = RDoc::RI::PryDriver.new( - pry_instance.pager, use_stdout: true, interactive: false - ) - - begin - ri.display_names [spec] # Get the documentation (finally!) - rescue RDoc::RI::Driver::NotFoundError => e - output.puts "error: '#{e.name}' not found" - end - end - end - - Pry::Commands.add_command(Pry::Command::Ri) - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/save_file.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/save_file.rb deleted file mode 100644 index 3a6ecd5d..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/save_file.rb +++ /dev/null @@ -1,63 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Command - class SaveFile < Pry::ClassCommand - match 'save-file' - group 'Input and Output' - description 'Export to a file using content from the REPL.' - - banner <<-'BANNER' - Usage: save-file [OPTIONS] --to [FILE] - - Export to a file using content from the REPL. - - save-file my_method --to hello.rb - save-file -i 1..10 --to hello.rb --append - save-file show-method --to my_command.rb - save-file sample_file.rb --lines 2..10 --to output_file.rb - BANNER - - def options(opt) - CodeCollector.inject_options(opt) - - opt.on :to=, "Specify the output file path" - opt.on :a, :append, "Append output to file" - end - - def process - @cc = CodeCollector.new(args, opts, pry_instance) - raise CommandError, "Found no code to save." if @cc.content.empty? - - if !file_name - display_content - else - save_file - end - end - - def file_name - opts[:to] || nil - end - - def save_file - File.open(file_name, mode) do |f| - f.puts @cc.content - end - output.puts "#{file_name} successfully saved" - end - - def display_content - output.puts @cc.content - output.puts "\n\n--\nPlease use `--to FILE` to export to a file." - output.puts "No file saved!\n--" - end - - def mode - opts.present?(:append) ? "a" : "w" - end - end - - Pry::Commands.add_command(Pry::Command::SaveFile) - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/shell_command.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/shell_command.rb deleted file mode 100644 index 6069a882..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/shell_command.rb +++ /dev/null @@ -1,75 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Command - class ShellCommand < Pry::ClassCommand - match(/\.(.*)/) - group 'Input and Output' - description "All text following a '.' is forwarded to the shell." - command_options listing: '.', use_prefix: false, - takes_block: true - - banner <<-'BANNER' - Usage: .COMMAND_NAME - - All text following a "." is forwarded to the shell. - - .ls -aF - .uname - BANNER - - def process(cmd) - if cmd =~ /^cd\s*(.*)/i - process_cd parse_destination(Regexp.last_match(1)) - else - pass_block(cmd) - if command_block - command_block.call `#{cmd}` - else - pry_instance.config.system.call(output, cmd, pry_instance) - end - end - end - - private - - def parse_destination(dest) - return "~" if dest.empty? - return dest unless dest == "-" - - state.old_pwd || raise(CommandError, "No prior directory available") - end - - def process_cd(dest) - state.old_pwd = Dir.pwd - Dir.chdir(File.expand_path(path_from_cd_path(dest) || dest)) - rescue Errno::ENOENT - raise CommandError, "No such directory: #{dest}" - end - - def cd_path_env - Pry::Env['CDPATH'] - end - - def cd_path_exists? - cd_path_env && cd_path_env.length.nonzero? - end - - def path_from_cd_path(dest) - return if !(dest && cd_path_exists?) || special_case_path?(dest) - - cd_path_env.split(File::PATH_SEPARATOR).each do |path| - return path if File.directory?(path) && path.split(File::SEPARATOR).last == dest - end - - nil - end - - def special_case_path?(dest) - ['.', '..', '-'].include?(dest) || dest =~ /\A[#{File::PATH_SEPARATOR}~]/ - end - end - - Pry::Commands.add_command(Pry::Command::ShellCommand) - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/shell_mode.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/shell_mode.rb deleted file mode 100644 index a71adb94..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/shell_mode.rb +++ /dev/null @@ -1,29 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Command - class ShellMode < Pry::ClassCommand - match 'shell-mode' - group 'Input and Output' - description 'Toggle shell mode. Bring in pwd prompt and file completion.' - - banner <<-'BANNER' - Toggle shell mode. Bring in pwd prompt and file completion. - BANNER - - def process - state.disabled ^= true - - if state.disabled - state.prev_prompt = pry_instance.prompt - pry_instance.prompt = Pry::Prompt[:shell] - else - pry_instance.prompt = state.prev_prompt - end - end - end - - Pry::Commands.add_command(Pry::Command::ShellMode) - Pry::Commands.alias_command 'file-mode', 'shell-mode' - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/show_doc.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/show_doc.rb deleted file mode 100644 index 3742348a..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/show_doc.rb +++ /dev/null @@ -1,93 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Command - class ShowDoc < Command::ShowInfo - include Pry::Helpers::DocumentationHelpers - - match 'show-doc' - group 'Introspection' - description 'Show the documentation for a method or class.' - - banner <<-BANNER - Usage: show-doc [OPTIONS] [METH] - Aliases: ? - - Show the documentation for a method or class. Tries instance methods first and - then methods by default. - - show-doc hi_method # docs for hi_method - show-doc Pry # for Pry class - show-doc Pry -a # for all definitions of Pry class (all monkey patches) - BANNER - - def process - super - - output.puts( - "\nWARNING: the show-doc command is deprecated. It will be removed " \ - "from future Pry versions.\nPlease use 'show-source' with the -d " \ - "(or --doc) switch instead\nExample: show-source #{obj_name} -d" - ) - end - - # The docs for code_object prepared for display. - def content_for(code_object) - Code.new( - render_doc_markup_for(code_object), - start_line_for(code_object), - :text - ).with_line_numbers(use_line_numbers?).to_s - end - - # process the markup (if necessary) and apply colors - def render_doc_markup_for(code_object) - docs = docs_for(code_object) - - if code_object.command? - # command '--help' shouldn't use markup highlighting - docs - else - if docs.empty? - raise CommandError, "No docs found for: #{obj_name || 'current context'}" - end - - process_comment_markup(docs) - end - end - - # Return docs for the code_object, adjusting for whether the code_object - # has yard docs available, in which case it returns those. - # (note we only have to check yard docs for modules since they can - # have multiple docs, but methods can only be doc'd once so we - # dont need to check them) - def docs_for(code_object) - if code_object.module_with_yard_docs? - # yard docs - code_object.yard_doc - else - # normal docs (i.e comments above method/module/command) - code_object.doc - end - end - - # Which sections to include in the 'header', can toggle: :owner, - # :signature and visibility. - def header_options - super.merge signature: true - end - - # figure out start line of docs by back-calculating based on - # number of lines in the comment and the start line of the code_object - # @return [Fixnum] start line of docs - def start_line_for(code_object) - return 1 if code_object.command? || opts.present?(:'base-one') - return 1 unless code_object.source_line - - code_object.source_line - code_object.doc.lines.count - end - end - - Pry::Commands.add_command(Pry::Command::ShowDoc) - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/show_info.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/show_info.rb deleted file mode 100644 index 9037cc1f..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/show_info.rb +++ /dev/null @@ -1,234 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Command - class ShowInfo < Pry::ClassCommand - extend Pry::Helpers::BaseHelpers - - command_options shellwords: false, interpolate: false - - def initialize(*) - super - - @used_super = nil - end - - def options(opt) - opt.on :s, :super, "Select the 'super' method. Can be repeated to " \ - "traverse the ancestors", as: :count - opt.on :l, "line-numbers", "Show line numbers" - opt.on :b, "base-one", "Show line numbers but start numbering at 1 " \ - "(useful for `amend-line` and `play` commands)" - opt.on :a, :all, "Show all definitions and monkeypatches of the " \ - "module/class" - end - - def process - code_object = Pry::CodeObject.lookup(obj_name, pry_instance, super: opts[:super]) - raise CommandError, no_definition_message unless code_object - - @original_code_object = code_object - - if !obj_name && code_object.c_module? && !opts[:all] - result = "You're inside an object, whose class is defined by means of " \ - "the C Ruby API.\nPry cannot display the information for this " \ - "class." - if code_object.candidates.any? - result += "\nHowever, you can view monkey-patches applied to this " \ - "class.\n.Just execute the same command with the '--all' " \ - "switch." - end - elsif show_all_modules?(code_object) - # show all monkey patches for a module - - result = content_and_headers_for_all_module_candidates(code_object) - else - # show a specific code object - co = code_object_with_accessible_source(code_object) - result = content_and_header_for_code_object(co) - end - - set_file_and_dir_locals(code_object.source_file) - pry_instance.pager.page result - end - - # This method checks whether the `code_object` is a WrappedModule, if it - # is, then it returns the first candidate (monkeypatch) with accessible - # source (or docs). If `code_object` is not a WrappedModule (i.e a method - # or a command) then the `code_object` itself is just returned. - # - # @return [Pry::WrappedModule, Pry::Method, Pry::Command] - def code_object_with_accessible_source(code_object) - return code_object unless code_object.is_a?(WrappedModule) - - candidate = code_object.candidates.find(&:source) - return candidate if candidate - - raise CommandError, no_definition_message unless valid_superclass?(code_object) - - @used_super = true - code_object_with_accessible_source(code_object.super) - end - - def valid_superclass?(code_object) - code_object.super && code_object.super.wrapped != Object - end - - def content_and_header_for_code_object(code_object) - header(code_object) + content_for(code_object) - end - - def content_and_headers_for_all_module_candidates(mod) - result = "Found #{mod.number_of_candidates} candidates for " \ - "`#{mod.name}` definition:\n" - mod.number_of_candidates.times do |v| - candidate = mod.candidate(v) - begin - result += "\nCandidate #{v + 1}/#{mod.number_of_candidates}: " \ - "#{candidate.source_file}:#{candidate.source_line}\n" - content = content_for(candidate) - - result += "Number of lines: #{content.lines.count}\n\n" + content - rescue Pry::RescuableException - result += "\nNo content found.\n" - next - end - end - result - end - - def no_definition_message - "Couldn't locate a definition for #{obj_name}" - end - - # Generate a header (meta-data information) for all the code - # object types: methods, modules, commands, procs... - def header(code_object) - file_name, line_num = file_and_line_for(code_object) - content = content_for(code_object) - - h = "\n#{bold('From:')} #{file_name}" - h += code_object_header(code_object, line_num) - h += "\n#{bold('Number of lines:')} " + "#{content.lines.count}\n\n" - if @used_super - h += bold('** Warning:') - h += " Cannot find code for #{@original_code_object.nonblank_name}. " \ - "Showing superclass #{code_object.nonblank_name} instead. **\n\n" - end - - if content.lines.none? - h += bold('** Warning:') - h += " Cannot find code for '#{code_object.name}' (source_location is nil)" - end - - h - end - - def code_object_header(code_object, line_num) - if code_object.real_method_object? - method_header(code_object, line_num) - - # It sucks we have to test for both Pry::WrappedModule and - # WrappedModule::Candidate, probably indicates a deep refactor needs - # to happen in those classes. - elsif code_object.is_a?(Pry::WrappedModule) || - code_object.is_a?(Pry::WrappedModule::Candidate) - module_header(code_object, line_num) - else - "" - end - end - - def method_header(code_object, line_num) - h = "" - h += (code_object.c_method? ? ' (C Method):' : ":#{line_num}:") - h += method_sections(code_object)[:owner] - h += method_sections(code_object)[:visibility] - h += method_sections(code_object)[:signature] - h - end - - def module_header(code_object, line_num) - h = "" - h += ":#{line_num}\n" - h += bold(code_object.module? ? "Module" : "Class") - h += " #{bold('name:')} #{code_object.nonblank_name}" - - if code_object.number_of_candidates > 1 - h += bold("\nNumber of monkeypatches: ") - h += code_object.number_of_candidates.to_s - h += ". Use the `-a` option to display all available monkeypatches" - end - h - end - - def method_sections(code_object) - { - owner: "\n#{bold('Owner:')} #{code_object.owner || 'N/A'}\n", - visibility: "#{bold('Visibility:')} #{code_object.visibility}", - signature: "\n#{bold('Signature:')} #{code_object.signature}" - }.merge(header_options) { |_key, old, new| (new && old).to_s } - end - - def header_options - { - owner: true, - visibility: true, - signature: nil - } - end - - def show_all_modules?(code_object) - code_object.is_a?(Pry::WrappedModule) && opts.present?(:all) - end - - def obj_name - @obj_name ||= args.empty? ? nil : args.join(' ') - end - - def use_line_numbers? - opts.present?(:b) || opts.present?(:l) - end - - def start_line_for(code_object) - if opts.present?(:'base-one') - 1 - else - code_object.source_line || 1 - end - end - - # takes into account possible yard docs, and returns yard_file / yard_line - # Also adjusts for start line of comments (using start_line_for), which it - # has to infer by subtracting number of lines of comment from start line - # of code_object - def file_and_line_for(code_object) - if code_object.module_with_yard_docs? - [code_object.yard_file, code_object.yard_line] - else - [code_object.source_file, start_line_for(code_object)] - end - end - - def complete(input) - if input =~ /([^ ]*)#([a-z0-9_]*)\z/ - prefix = Regexp.last_match(1) - search = Regexp.last_match(2) - methods = - begin - # rubocop:disable Security/Eval - Pry::Method.all_from_class(binding.eval(prefix)) - # rubocop:enable Security/Eval - rescue RescuableException - return super - end - methods.map do |method| - [prefix, method.name].join('#') if method.name.start_with?(search) - end.compact - else - super - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/show_input.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/show_input.rb deleted file mode 100644 index bc44806f..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/show_input.rb +++ /dev/null @@ -1,22 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Command - class ShowInput < Pry::ClassCommand - match 'show-input' - group 'Editing' - description 'Show the contents of the input buffer for the current ' \ - 'multi-line expression.' - - banner <<-'BANNER' - Show the contents of the input buffer for the current multi-line expression. - BANNER - - def process - output.puts Code.new(eval_string).with_line_numbers - end - end - - Pry::Commands.add_command(Pry::Command::ShowInput) - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/show_source.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/show_source.rb deleted file mode 100644 index 1a020349..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/show_source.rb +++ /dev/null @@ -1,118 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Command - class ShowSource < Command::ShowInfo - include Pry::Helpers::DocumentationHelpers - - match 'show-source' - group 'Introspection' - description 'Show the source for a method or class.' - - banner <<-'BANNER' - Usage: show-source [OPTIONS] [METH|CLASS] - Aliases: $, show-method - - Show the source for a method or class. Tries instance methods first and then - methods by default. - - show-source hi_method - show-source hi_method - show-source Pry#rep # source for Pry#rep method - show-source Pry # for Pry class - show-source Pry -a # for all Pry class definitions (all monkey patches) - show-source Pry.foo -e # for class of the return value of expression `Pry.foo` - show-source Pry --super # for superclass of Pry (Object class) - show-source Pry -d # include documentation - - https://github.com/pry/pry/wiki/Source-browsing#wiki-Show_method - BANNER - - def options(opt) - opt.on :e, :eval, "evaluate the command's argument as a ruby " \ - "expression and show the class its return value" - opt.on :d, :doc, 'include documentation in the output' - super(opt) - end - - def process - if opts.present?(:e) - obj = target.eval(args.first) - self.args = Array.new(1) { obj.is_a?(Module) ? obj.name : obj.class.name } - end - - super - end - - # The source for code_object prepared for display. - def content_for(code_object) - content = '' - if opts.present?(:d) - code = Code.new( - render_doc_markup_for(code_object), start_line_for(code_object), :text - ) - content += code.with_line_numbers(use_line_numbers?).to_s - content += "\n" - end - - code = Code.new( - code_object.source || [], start_line_for(code_object) - ) - content += code.with_line_numbers(use_line_numbers?).highlighted - content - end - - # process the markup (if necessary) and apply colors - def render_doc_markup_for(code_object) - docs = docs_for(code_object) - - if code_object.command? - # command '--help' shouldn't use markup highlighting - docs - else - if docs.empty? - raise CommandError, "No docs found for: #{obj_name || 'current context'}" - end - - process_comment_markup(docs) - end - end - - # Return docs for the code_object, adjusting for whether the code_object - # has yard docs available, in which case it returns those. - # (note we only have to check yard docs for modules since they can - # have multiple docs, but methods can only be doc'd once so we - # dont need to check them) - def docs_for(code_object) - if code_object.module_with_yard_docs? - # yard docs - code_object.yard_doc - else - # normal docs (i.e comments above method/module/command) - code_object.doc - end - end - - # Which sections to include in the 'header', can toggle: :owner, - # :signature and visibility. - def header_options - super.merge signature: true - end - - # figure out start line of docs by back-calculating based on - # number of lines in the comment and the start line of the code_object - # @return [Fixnum] start line of docs - def start_line_for(code_object) - return 1 if code_object.command? || opts.present?(:'base-one') - return 1 unless code_object.source_line - - code_object.source_line - code_object.doc.lines.count - end - end - - Pry::Commands.add_command(Pry::Command::ShowSource) - Pry::Commands.alias_command 'show-method', 'show-source' - Pry::Commands.alias_command '$', 'show-source' - Pry::Commands.alias_command '?', 'show-source -d' - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/stat.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/stat.rb deleted file mode 100644 index 055242a5..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/stat.rb +++ /dev/null @@ -1,44 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Command - class Stat < Pry::ClassCommand - match 'stat' - group 'Introspection' - description 'View method information and set _file_ and _dir_ locals.' - command_options shellwords: false - - banner <<-'BANNER' - Usage: stat [OPTIONS] [METH] - - Show method information for method METH and set _file_ and _dir_ locals. - - stat hello_method - BANNER - - def options(opt) - method_options(opt) - end - - def process - meth = method_object - aliases = meth.aliases - - output.puts(unindent(<<-OUTPUT)) - Method Information: - -- - Name: #{meth.name} - Alias#{'es' if aliases.length > 1}: #{aliases.any? ? aliases.join(', ') : 'None.'} - Owner: #{meth.owner || 'Unknown'} - Visibility: #{meth.visibility} - Type: #{meth.is_a?(::Method) ? 'Bound' : 'Unbound'} - Arity: #{meth.arity} - Method Signature: #{meth.signature} - Source Location: #{meth.source_location ? meth.source_location.join(':') : 'Not found.'} - OUTPUT - end - end - - Pry::Commands.add_command(Pry::Command::Stat) - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/switch_to.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/switch_to.rb deleted file mode 100644 index 448f2cd3..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/switch_to.rb +++ /dev/null @@ -1,29 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Command - class SwitchTo < Pry::ClassCommand - match 'switch-to' - group 'Navigating Pry' - description 'Start a new subsession on a binding in the current stack.' - - banner <<-'BANNER' - Start a new subsession on a binding in the current stack (numbered by nesting). - BANNER - - def process(selection) - selection = selection.to_i - - if selection < 0 || selection > pry_instance.binding_stack.size - 1 - raise CommandError, - "Invalid binding index #{selection} - use `nesting` command " \ - "to view valid indices." - else - Pry.start(pry_instance.binding_stack[selection]) - end - end - end - - Pry::Commands.add_command(Pry::Command::SwitchTo) - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/toggle_color.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/toggle_color.rb deleted file mode 100644 index 67d8a8ca..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/toggle_color.rb +++ /dev/null @@ -1,28 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Command - class ToggleColor < Pry::ClassCommand - match 'toggle-color' - group 'Misc' - description 'Toggle syntax highlighting.' - - banner <<-'BANNER' - Usage: toggle-color - - Toggle syntax highlighting. - BANNER - - def process - pry_instance.color = color_toggle - output.puts "Syntax highlighting #{pry_instance.color ? 'on' : 'off'}" - end - - def color_toggle - !pry_instance.color - end - - Pry::Commands.add_command(self) - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/watch_expression.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/watch_expression.rb deleted file mode 100644 index 3bdb3998..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/watch_expression.rb +++ /dev/null @@ -1,110 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Command - class WatchExpression < Pry::ClassCommand - match 'watch' - group 'Context' - description 'Watch the value of an expression and print a notification ' \ - 'whenever it changes.' - command_options use_prefix: false - - banner <<-'BANNER' - Usage: watch [EXPRESSION] - watch - watch --delete [INDEX] - - watch [EXPRESSION] adds an expression to the list of those being watched. - It will be re-evaluated every time you hit enter in pry. If its value has - changed, the new value will be printed to the console. - - This is useful if you are step-through debugging and want to see how - something changes over time. It's also useful if you're trying to write - a method inside pry and want to check that it gives the right answers - every time you redefine it. - - watch on its own displays all the currently watched expressions and their - values, and watch --delete [INDEX] allows you to delete expressions from - the list being watched. - BANNER - - def options(opt) - opt.on :d, :delete, - "Delete the watch expression with the given index. If no index " \ - "is given; clear all watch expressions.", - optional_argument: true, as: Integer - opt.on :l, :list, - "Show all current watch expressions and their values. Calling " \ - "watch with no expressions or options will also show the watch " \ - "expressions." - end - - def process - if opts.present?(:delete) - delete opts[:delete] - elsif opts.present?(:list) || args.empty? - list - else - add_hook - add_expression(args) - end - end - - private - - def expressions - state.watch_expressions ||= [] - end - - def delete(index) - if index - output.puts "Deleting watch expression ##{index}: #{expressions[index - 1]}" - expressions.delete_at(index - 1) - else - output.puts "Deleting all watched expressions" - expressions.clear - end - end - - def list - if expressions.empty? - output.puts "No watched expressions" - else - pry_instance.pager.open do |pager| - pager.puts "Listing all watched expressions:" - pager.puts "" - expressions.each_with_index do |expr, index| - pager.print with_line_numbers(expr.to_s, index + 1) - end - pager.puts "" - end - end - end - - def eval_and_print_changed(output) - expressions.each do |expr| - expr.eval! - output.puts "#{blue 'watch'}: #{expr}" if expr.changed? - end - end - - # TODO: fix arguments. - # https://github.com/pry/pry/commit/b031df2f2f5850ee6e9018f33d35f3485a9b0423 - def add_expression(_arguments) - expressions << Expression.new(pry_instance, target, arg_string) - output.puts "Watching #{Code.new(arg_string).highlighted}" - end - - def add_hook - hook = %i[after_eval watch_expression] - return if pry_instance.hooks.hook_exists?(*hook) - - pry_instance.hooks.add_hook(*hook) do |_, pry_instance| - eval_and_print_changed pry_instance.output - end - end - end - - Pry::Commands.add_command(Pry::Command::WatchExpression) - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/watch_expression/expression.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/watch_expression/expression.rb deleted file mode 100644 index 2214b875..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/watch_expression/expression.rb +++ /dev/null @@ -1,43 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Command - class WatchExpression - class Expression - attr_reader :target, :source, :value, :previous_value, :pry_instance - - def initialize(pry_instance, target, source) - @pry_instance = pry_instance - @target = target - @source = Code.new(source).strip - end - - def eval! - @previous_value = value - @value = Pry::ColorPrinter.pp(target_eval(target, source), ''.dup) - end - - def to_s - "#{Code.new(source).highlighted.strip} => #{value}" - end - - # Has the value of the expression changed? - # - # We use the pretty-printed string represenation to detect differences - # as this avoids problems with dup (causes too many differences) and == - # (causes too few) - def changed? - (value != previous_value) - end - - private - - def target_eval(target, source) - target.eval(source) - rescue StandardError => e - e - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/whereami.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/whereami.rb deleted file mode 100644 index f18026e4..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/whereami.rb +++ /dev/null @@ -1,205 +0,0 @@ -# frozen_string_literal: true - -require 'method_source' - -class Pry - class Command - class Whereami < Pry::ClassCommand - def initialize(*) - super - - @method_code = nil - end - - class << self - attr_accessor :method_size_cutoff - end - - @method_size_cutoff = 30 - - match 'whereami' - description 'Show code surrounding the current context.' - group 'Context' - - banner <<-'BANNER' - Usage: whereami [-qn] [LINES] - - Describe the current location. If you use `binding.pry` inside a method then - whereami will print out the source for that method. - - If a number is passed, then LINES lines before and after the current line will be - shown instead of the method itself. - - The `-q` flag can be used to suppress error messages in the case that there's - no code to show. This is used by pry in the default before_session hook to show - you when you arrive at a `binding.pry`. - - The `-n` flag can be used to hide line numbers so that code can be copy/pasted - effectively. - - When pry was started on an Object and there is no associated method, whereami - will instead output a brief description of the current object. - BANNER - - def setup - if target.respond_to?(:source_location) - file, @line = target.source_location - @file = expand_path(file) - else - @file = expand_path(target.eval('__FILE__')) - @line = target.eval('__LINE__') - end - @method = Pry::Method.from_binding(target) - end - - def options(opt) - opt.on :q, :quiet, "Don't display anything in case of an error" - opt.on :n, :"no-line-numbers", "Do not display line numbers" - opt.on :m, :method, "Show the complete source for the current method." - opt.on :c, :class, "Show the complete source for the current class or module." - opt.on :f, :file, "Show the complete source for the current file." - end - - def code - @code ||= if opts.present?(:m) - method_code || raise(CommandError, "Cannot find method code.") - elsif opts.present?(:c) - class_code || raise(CommandError, "Cannot find class code.") - elsif opts.present?(:f) - Pry::Code.from_file(@file) - elsif args.any? - code_window - else - default_code - end - end - - def code? - !!code - rescue MethodSource::SourceNotFoundError - false - end - - def bad_option_combination? - [opts.present?(:m), opts.present?(:f), - opts.present?(:c), args.any?].count(true) > 1 - end - - def location - "#{@file}:#{@line} #{@method && @method.name_with_owner}" - end - - def process - if bad_option_combination? - raise CommandError, "Only one of -m, -c, -f, and LINES may be specified." - end - - return if nothing_to_do? - - if internal_binding?(target) - handle_internal_binding - return - end - - set_file_and_dir_locals(@file) - - pretty_code = code.with_line_numbers(use_line_numbers?) - .with_marker(marker) - .highlighted - pry_instance.pager.page( - "\n#{bold('From:')} #{location}:\n\n" + pretty_code + "\n" - ) - end - - private - - def nothing_to_do? - opts.quiet? && (internal_binding?(target) || !code?) - end - - def use_line_numbers? - !opts.present?(:n) - end - - def marker - !opts.present?(:n) && @line - end - - def top_level? - target_self == Pry.main - end - - def handle_internal_binding - if top_level? - output.puts "At the top level." - else - output.puts "Inside #{Pry.view_clip(target_self)}." - end - end - - def small_method? - @method.source_range.count < self.class.method_size_cutoff - end - - def default_code - if method_code && small_method? - method_code - else - code_window - end - end - - def code_window - Pry::Code.from_file(@file).around(@line, window_size) - end - - def method_code - return @method_code if @method_code - - @method_code = Pry::Code.from_method(@method) if valid_method? - end - - # This either returns the `target_self` - # or it returns the class of `target_self` if `target_self` is not a class. - # @return [Pry::WrappedModule] - def target_class - return Pry::WrappedModule(target_self) if target_self.is_a?(Module) - - Pry::WrappedModule(target_self.class) - end - - def class_code - @class_code ||= - begin - mod = @method ? Pry::WrappedModule(@method.owner) : target_class - idx = mod.candidates.find_index { |v| expand_path(v.source_file) == @file } - idx && Pry::Code.from_module(mod, idx) - end - end - - def valid_method? - @method && @method.source? && expand_path(@method.source_file) == @file && - @method.source_range.include?(@line) - end - - def expand_path(filename) - return unless filename - return filename if Pry.eval_path == filename - - File.expand_path(filename) - end - - def window_size - if args.empty? - pry_instance.config.default_window_size - else - args.first.to_i - end - end - end - - Pry::Commands.add_command(Pry::Command::Whereami) - Pry::Commands.alias_command '@', 'whereami' - Pry::Commands.alias_command(/whereami[!?]+/, 'whereami') - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/wtf.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/wtf.rb deleted file mode 100644 index c3eec669..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/commands/wtf.rb +++ /dev/null @@ -1,95 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Command - class Wtf < Pry::ClassCommand - match(/wtf([?!]*)/) - group 'Context' - description 'Show the backtrace of the most recent exception.' - options listing: 'wtf?' - - banner <<-'BANNER' - Usage: wtf[?|!] - - Shows a few lines of the backtrace of the most recent exception (also available - as `_ex_.backtrace`). If you want to see more lines, add more question marks or - exclamation marks. - - wtf? - wtf?!???!?!? - - # To see the entire backtrace, pass the `-v` or `--verbose` flag. - wtf -v - BANNER - - RUBY_FRAME_PATTERN = /\A(?(.+)):(?(\d+))/.freeze - - def options(opt) - opt.on :v, :verbose, "Show the full backtrace" - opt.on :c, :code, "Show code corresponding to the backtrace frame" - end - - def process - unless pry_instance.last_exception - raise Pry::CommandError, "No most-recent exception" - end - - text = ''.dup - unwind_exceptions.each_with_index do |exception, i| - title = (i == 0 ? 'Exception' : 'Caused by') - text << format_header(title, exception) - text << format_backtrace(exception.backtrace) - end - output.puts(text) - end - - private - - def unwind_exceptions - exception_list = [] - exception = pry_instance.last_exception - - while exception - exception_list << exception - exception = (exception.cause if exception.respond_to?(:cause)) - end - - exception_list - end - - def format_header(title, exception) - "#{bold(title + ':')} #{exception.class}: #{exception}\n--\n" - end - - def format_backtrace(backtrace) - lines = trim_backtrace(backtrace).map do |frame| - next frame unless opts.code? - - match = frame.match(RUBY_FRAME_PATTERN) - code = read_line(match[:file], match[:line].to_i) - [bold(frame), code].join("\n") - end - - Pry::Code.new(lines.compact, 0, :text).with_line_numbers.to_s - end - - def trim_backtrace(backtrace) - return backtrace if opts.verbose? - - size_of_backtrace = [captures[0].size, 0.5].max * 10 - backtrace.first(size_of_backtrace) - end - - def read_line(file, line) - File.open(file, 'r') do |f| - (line - 1).times { f.gets } - f.gets - end - rescue Errno::ENOENT - nil - end - end - - Pry::Commands.add_command(Pry::Command::Wtf) - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/config.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/config.rb deleted file mode 100644 index 0c6a0edc..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/config.rb +++ /dev/null @@ -1,314 +0,0 @@ -# frozen_string_literal: true - -require 'ostruct' - -class Pry - # @api private - class Config - extend Attributable - - # @return [IO, #readline] he object from which Pry retrieves its lines of - # input - attribute :input - - # @return [IO, #puts] where Pry should output results provided by {input} - attribute :output - - # @return [Pry::CommandSet] - attribute :commands - - # @return [Proc] the printer for Ruby expressions (not commands) - attribute :print - - # @return [Proc] the printer for exceptions - attribute :exception_handler - - # @return [Array] Exception that Pry shouldn't rescue - attribute :unrescued_exceptions - - # @deprecated - # @return [Array] Exception that Pry shouldn't rescue - attribute :exception_whitelist - - # @return [Integer] The number of lines of context to show before and after - # exceptions - attribute :default_window_size - - # @return [Pry::Hooks] - attribute :hooks - - # @return [Pry::Prompt] - attribute :prompt - - # @return [String] The display name that is part of the prompt - attribute :prompt_name - - # @return [Array] the list of objects that are known to have a - # 1-line #inspect output suitable for prompt - attribute :prompt_safe_contexts - - # If it is a String, then that String is used as the shell - # command to invoke the editor. - # - # If it responds to #call is callable then `file`, `line`, and `reloading` - # are passed to it. `reloading` indicates whether Pry will be reloading code - # after the shell command returns. All parameters are optional. - # @return [String, #call] - attribute :editor - - # A string that must precede all commands. For example, if is is - # set to "%", the "cd" command must be invoked as "%cd"). - # @return [String] - attribute :command_prefix - - # @return [Boolean] - attribute :color - - # @return [Boolean] - attribute :pager - - # @return [Boolean] whether the global ~/.pryrc should be loaded - attribute :should_load_rc - - # @return [Boolean] whether the local ./.pryrc should be loaded - attribute :should_load_local_rc - - # @return [Boolean] whether to load files specified with the -r flag - attribute :should_load_requires - - # @return [Boolean] whether to disable edit-method's auto-reloading behavior - attribute :disable_auto_reload - - # Whether Pry should trap SIGINT and cause it to raise an Interrupt - # exception. This is only useful on JRuby, MRI does this for us. - # @return [Boolean] - attribute :should_trap_interrupts - - # @return [Pry::History] - attribute :history - - # @return [Boolean] - attribute :history_save - - # @return [Boolean] - attribute :history_load - - # @return [String] - attribute :history_file - - # @return [Array] - attribute :history_ignorelist - - # @return [Array] Ruby files to be required - attribute :requires - - # @return [Integer] how many input/output lines to keep in memory - attribute :memory_size - - # @return [Proc] The proc that runs system commands - attribute :system - - # @return [Boolean] - attribute :auto_indent - - # @return [Boolean] - attribute :correct_indent - - # @return [Boolean] whether or not display a warning when a command name - # collides with a method/local in the current context. - attribute :collision_warning - - # @return [Hash{Symbol=>Proc}] - attribute :extra_sticky_locals - - # @return [#build_completion_proc] a completer to use - attribute :completer - - # @return [Boolean] suppresses whereami output on `binding.pry` - attribute :quiet - - # @return [Boolean] displays a warning about experience improvement on - # Windows - attribute :windows_console_warning - - # @return [Proc] - attribute :command_completions - - # @return [Proc] - attribute :file_completions - - # @return [Hash] - attribute :ls - - # @return [String] a line of code to execute in context before the session - # starts - attribute :exec_string - - # @return [String] - attribute :output_prefix - - # @return [String] - # @since v0.13.0 - attribute :rc_file - - def initialize - merge!( - input: MemoizedValue.new { lazy_readline }, - output: $stdout.tap { |out| out.sync = true }, - commands: Pry::Commands, - prompt_name: 'pry', - prompt: Pry::Prompt[:default], - prompt_safe_contexts: [String, Numeric, Symbol, nil, true, false], - print: Pry::ColorPrinter.method(:default), - quiet: false, - exception_handler: Pry::ExceptionHandler.method(:handle_exception), - - unrescued_exceptions: [ - ::SystemExit, ::SignalException, Pry::TooSafeException - ], - - exception_whitelist: MemoizedValue.new do - output.puts( - '[warning] Pry.config.exception_whitelist is deprecated, ' \ - 'please use Pry.config.unrescued_exceptions instead.' - ) - unrescued_exceptions - end, - - hooks: Pry::Hooks.default, - pager: true, - system: Pry::SystemCommandHandler.method(:default), - color: Pry::Helpers::BaseHelpers.use_ansi_codes?, - default_window_size: 5, - editor: Pry::Editor.default, - rc_file: default_rc_file, - should_load_rc: true, - should_load_local_rc: true, - should_trap_interrupts: Pry::Helpers::Platform.jruby?, - disable_auto_reload: false, - command_prefix: '', - auto_indent: Pry::Helpers::BaseHelpers.use_ansi_codes?, - correct_indent: true, - collision_warning: false, - output_prefix: '=> ', - requires: [], - should_load_requires: true, - windows_console_warning: true, - control_d_handler: Pry::ControlDHandler.method(:default), - memory_size: 100, - extra_sticky_locals: {}, - command_completions: proc { commands.keys }, - file_completions: proc { Dir['.'] }, - ls: OpenStruct.new(Pry::Command::Ls::DEFAULT_OPTIONS), - completer: Pry::InputCompleter, - history_save: true, - history_load: true, - history_file: Pry::History.default_file, - history_ignorelist: [], - history: MemoizedValue.new do - if defined?(input::HISTORY) - Pry::History.new(history: input::HISTORY) - else - Pry::History.new - end - end, - exec_string: '' - ) - - @custom_attrs = {} - end - - def merge!(config_hash) - config_hash.each_pair { |attr, value| __send__("#{attr}=", value) } - self - end - - def merge(config_hash) - dup.merge!(config_hash) - end - - def []=(attr, value) - @custom_attrs[attr.to_s] = Config::Value.new(value) - end - - def [](attr) - @custom_attrs[attr.to_s].call - end - - # rubocop:disable Style/MethodMissingSuper - def method_missing(method_name, *args, &_block) - name = method_name.to_s - - if name.end_with?('=') - self[name[0..-2]] = args.first - elsif @custom_attrs.key?(name) - self[name] - end - end - # rubocop:enable Style/MethodMissingSuper - - def respond_to_missing?(method_name, include_all = false) - @custom_attrs.key?(method_name.to_s.tr('=', '')) || super - end - - def initialize_dup(other) - super - @custom_attrs = @custom_attrs.dup - end - - attr_reader :control_d_handler - def control_d_handler=(value) - proxy_proc = - if value.arity == 2 - Pry::Warning.warn( - "control_d_handler's arity of 2 parameters was deprecated " \ - '(eval_string, pry_instance). Now it gets passed just 1 ' \ - 'parameter (pry_instance)' - ) - proc do |*args| - if args.size == 2 - value.call(args.first, args[1]) - else - value.call(args.first.eval_string, args.first) - end - end - else - proc do |*args| - if args.size == 2 - value.call(args[1]) - else - value.call(args.first) - end - end - end - @control_d_handler = proxy_proc - end - - private - - def lazy_readline - require 'readline' - ::Readline - rescue LoadError - output.puts( - "Sorry, you can't use Pry without Readline or a compatible library. \n" \ - "Possible solutions: \n" \ - " * Rebuild Ruby with Readline support using `--with-readline` \n" \ - " * Use the rb-readline gem, which is a pure-Ruby port of Readline \n" \ - " * Use the pry-coolline gem, a pure-ruby alternative to Readline" - ) - raise - end - - def default_rc_file - [Pry::Env['PRYRC'], - # See XDG Base Directory Specification at - # https://specifications.freedesktop.org/basedir-spec/latest/ - "#{Pry::Env['XDG_CONFIG_HOME']}/pry/pryrc", - File.expand_path('~/.pryrc'), - File.expand_path('~/.config/pry/pryrc')] - .compact - .find { |file| File.exist?(file) } - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/config/attributable.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/config/attributable.rb deleted file mode 100644 index 1cac89ed..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/config/attributable.rb +++ /dev/null @@ -1,22 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Config - # Attributable provides the ability to create "attribute" - # accessors. Attribute accessors create a standard "attr_writer" and a - # customised "attr_reader". This reader is Proc-aware (lazy). - # - # @since v0.13.0 - # @api private - module Attributable - def attribute(attr_name) - define_method(attr_name) do - value = Config::Value.new(instance_variable_get("@#{attr_name}")) - value.call - end - - attr_writer(attr_name) - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/config/lazy_value.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/config/lazy_value.rb deleted file mode 100644 index 5df18915..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/config/lazy_value.rb +++ /dev/null @@ -1,29 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Config - # LazyValue is a Proc (block) wrapper. It is meant to be used as a - # configuration value. Subsequent `#call` calls always evaluate the given - # block. - # - # @example - # num = 19 - # value = Pry::Config::LazyValue.new { num += 1 } - # value.foo # => 20 - # value.foo # => 21 - # value.foo # => 22 - # - # @api private - # @since v0.13.0 - # @see Pry::Config::MemoizedValue - class LazyValue - def initialize(&block) - @block = block - end - - def call - @block.call - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/config/memoized_value.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/config/memoized_value.rb deleted file mode 100644 index 9e2ff46a..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/config/memoized_value.rb +++ /dev/null @@ -1,34 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Config - # MemoizedValue is a Proc (block) wrapper. It is meant to be used as a - # configuration value. Subsequent `#call` calls return the same memoized - # result. - # - # @example - # num = 19 - # value = Pry::Config::MemoizedValue.new { num += 1 } - # value.call # => 20 - # value.call # => 20 - # value.call # => 20 - # - # @api private - # @since v0.13.0 - # @see Pry::Config::LazyValue - class MemoizedValue - def initialize(&block) - @block = block - @called = false - @call = nil - end - - def call - return @call if @called - - @called = true - @call = @block.call - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/config/value.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/config/value.rb deleted file mode 100644 index b32a196e..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/config/value.rb +++ /dev/null @@ -1,24 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Config - # Value holds a value for the given attribute and decides how it should - # be read. Procs get called, other values are returned as is. - # - # @since v0.13.0 - # @api private - class Value - def initialize(value) - @value = value - end - - def call - unless [Config::MemoizedValue, Config::LazyValue].include?(@value.class) - return @value - end - - @value.call - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/control_d_handler.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/control_d_handler.rb deleted file mode 100644 index 1d3386d6..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/control_d_handler.rb +++ /dev/null @@ -1,28 +0,0 @@ -# frozen_string_literal: true - -class Pry - # @api private - # @since v0.13.0 - module ControlDHandler - # Deal with the ^D key being pressed. Different behaviour in different - # cases: - # 1. In an expression behave like `!` command. - # 2. At top-level session behave like `exit` command. - # 3. In a nested session behave like `cd ..`. - def self.default(pry_instance) - if !pry_instance.eval_string.empty? - # Clear input buffer. - pry_instance.eval_string = '' - elsif pry_instance.binding_stack.one? - pry_instance.binding_stack.clear - throw(:breakout) - else - # Otherwise, saves current binding stack as old stack and pops last - # binding out of binding stack (the old stack still has that binding). - cd_state = Pry::CommandState.default.state_for('cd') - cd_state.old_stack = pry_instance.binding_stack.dup - pry_instance.binding_stack.pop - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/core_extensions.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/core_extensions.rb deleted file mode 100644 index c109e95a..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/core_extensions.rb +++ /dev/null @@ -1,144 +0,0 @@ -# frozen_string_literal: true - -class Pry - # @return [Array] Code of the method used when implementing Pry's - # __binding__, along with line indication to be used with instance_eval (and - # friends). - # - # @see Object#__binding__ - BINDING_METHOD_IMPL = [<<-METHOD, __FILE__, __LINE__ + 1].freeze - # Get a binding with 'self' set to self, and no locals. - # - # The default definee is determined by the context in which the - # definition is eval'd. - # - # Please don't call this method directly, see {__binding__}. - # - # @return [Binding] - def __pry__ - binding - end - METHOD -end - -class Object - # Start a Pry REPL on self. - # - # If `self` is a Binding then that will be used to evaluate expressions; - # otherwise a new binding will be created. - # - # @param [Object] object the object or binding to pry - # (__deprecated__, use `object.pry`) - # @param [Hash] hash the options hash - # @example With a binding - # binding.pry - # @example On any object - # "dummy".pry - # @example With options - # def my_method - # binding.pry :quiet => true - # end - # my_method() - # @see Pry.start - def pry(object = nil, hash = {}) - if object.nil? || Hash === object # rubocop:disable Style/CaseEquality - Pry.start(self, object || {}) - else - Pry.start(object, hash) - end - end - - # Return a binding object for the receiver. - # - # The `self` of the binding is set to the current object, and it contains no - # local variables. - # - # The default definee (http://yugui.jp/articles/846) is set such that: - # - # * If `self` is a class or module, then new methods created in the binding - # will be defined in that class or module (as in `class Foo; end`). - # * If `self` is a normal object, then new methods created in the binding will - # be defined on its singleton class (as in `class << self; end`). - # * If `self` doesn't have a real singleton class (i.e. it is a Fixnum, Float, - # Symbol, nil, true, or false), then new methods will be created on the - # object's class (as in `self.class.class_eval{ }`) - # - # Newly created constants, including classes and modules, will also be added - # to the default definee. - # - # @return [Binding] - def __binding__ - # If you ever feel like changing this method, be careful about variables - # that you use. They shouldn't be inserted into the binding that will - # eventually be returned. - - # When you're cd'd into a class, methods you define should be added to it. - if is_a?(Module) - # A special case, for JRuby. - # Module.new.class_eval("binding") has different behaviour than CRuby, - # where this is not needed: class_eval("binding") vs class_eval{binding}. - # Using a block works around the difference of behaviour on JRuby. - # The scope is clear of local variables. Don't add any. - # - # This fixes the following two spec failures, at https://travis-ci.org/pry/pry/jobs/274470002 - # 1) ./spec/pry_spec.rb:360:in `block in (root)' - # 2) ./spec/pry_spec.rb:366:in `block in (root)' - return class_eval { binding } if Pry::Helpers::Platform.jruby? && name.nil? - - # class_eval sets both self and the default definee to this class. - return class_eval("binding", __FILE__, __LINE__) - end - - unless self.class.method_defined?(:__pry__) - # The easiest way to check whether an object has a working singleton class - # is to try and define a method on it. (just checking for the presence of - # the singleton class gives false positives for `true` and `false`). - # __pry__ is just the closest method we have to hand, and using - # it has the nice property that we can memoize this check. - begin - # instance_eval sets the default definee to the object's singleton class - instance_eval(*Pry::BINDING_METHOD_IMPL) - - # If we can't define methods on the Object's singleton_class. Then we fall - # back to setting the default definee to be the Object's class. That seems - # nicer than having a REPL in which you can't define methods. - rescue TypeError, Pry::FrozenObjectException - # class_eval sets the default definee to self.class - self.class.class_eval(*Pry::BINDING_METHOD_IMPL) - end - end - - __pry__ - end -end - -class BasicObject - # Return a binding object for the receiver. - # - # The `self` of the binding is set to the current object, and it contains no - # local variables. - # - # The default definee (http://yugui.jp/articles/846) is set such that new - # methods defined will be added to the singleton class of the BasicObject. - # - # @return [Binding] - def __binding__ - # BasicObjects don't have respond_to?, so we just define the method - # every time. As they also don't have `.freeze`, this call won't - # fail as it can for normal Objects. - (class << self; self; end).class_eval(<<-METHOD, __FILE__, __LINE__ + 1) - # Get a binding with 'self' set to self, and no locals. - # - # The default definee is determined by the context in which the - # definition is eval'd. - # - # Please don't call this method directly, see {__binding__}. - # - # @return [Binding] - def __pry__ - ::Kernel.binding - end - METHOD - __pry__ - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/editor.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/editor.rb deleted file mode 100644 index d6d72a0d..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/editor.rb +++ /dev/null @@ -1,157 +0,0 @@ -# frozen_string_literal: true - -require 'shellwords' - -class Pry - class Editor - def self.default - if (visual = Pry::Env['VISUAL']) - return visual - end - - if (editor = Pry::Env['EDITOR']) - return editor - end - - return 'notepad' if Helpers::Platform.windows? - - %w[editor nano vi].find do |editor_exe| - Kernel.system("which #{editor_exe} > /dev/null 2>&1") - end - end - - include Pry::Helpers::CommandHelpers - - attr_reader :pry_instance - - def initialize(pry_instance) - @pry_instance = pry_instance - end - - def edit_tempfile_with_content(initial_content, line = 1) - temp_file do |f| - f.puts(initial_content) - f.flush - f.close(false) - invoke_editor(f.path, line, true) - File.read(f.path) - end - end - - def invoke_editor(file, line, blocking = true) - unless pry_instance.config.editor - raise CommandError, - "Please set Pry.config.editor or export $VISUAL or $EDITOR" - end - - editor_invocation = build_editor_invocation_string(file, line, blocking) - return nil unless editor_invocation - - if Helpers::Platform.jruby? - open_editor_on_jruby(editor_invocation) - else - open_editor(editor_invocation) - end - end - - # Generate the string that's used to start the editor. This includes - # all the flags we want as well as the file and line number we - # want to open at. - def build_editor_invocation_string(file, line, blocking) - if pry_instance.config.editor.respond_to?(:call) - args = [file, line, blocking][0...(pry_instance.config.editor.arity)] - pry_instance.config.editor.call(*args) - else - sanitized_file = Helpers::Platform.windows? ? file : Shellwords.escape(file) - editor = pry_instance.config.editor - flag = blocking_flag_for_editor(blocking) - start_line = start_line_syntax_for_editor(sanitized_file, line) - "#{editor} #{flag} #{start_line}" - end - end - - private - - # Start the editor running, using the calculated invocation string - def open_editor(editor_invocation) - # Note we dont want to use Pry.config.system here as that - # may be invoked non-interactively (i.e via Open4), whereas we want to - # ensure the editor is always interactive - system(*Shellwords.split(editor_invocation)) || - raise( - CommandError, - "`#{editor_invocation}` gave exit status: #{$CHILD_STATUS.exitstatus}" - ) - end - - # We need JRuby specific code here cos just shelling out using - # system() appears to be pretty broken :/ - def open_editor_on_jruby(editor_invocation) - require 'spoon' - pid = Spoon.spawnp(*Shellwords.split(editor_invocation)) - Process.waitpid(pid) - rescue FFI::NotFoundError - system(editor_invocation) - end - - # Some editors that run outside the terminal allow you to control whether or - # not to block the process from which they were launched (in this case, Pry). - # For those editors, return the flag that produces the desired behavior. - def blocking_flag_for_editor(blocking) - case editor_name - when /^emacsclient/ - '--no-wait' unless blocking - when /^[gm]vim/ - '--nofork' if blocking - when /^jedit/ - '-wait' if blocking - when /^mate/, /^subl/, /^redcar/, /^code/ - '-w' if blocking - end - end - - # Return the syntax for a given editor for starting the editor - # and moving to a particular line within that file - def start_line_syntax_for_editor(file_name, line_number) - # special case for 1st line - return file_name if line_number <= 1 - - case editor_name - when /^[gm]?vi/, /^emacs/, /^nano/, /^pico/, /^gedit/, /^kate/ - "+#{line_number} #{file_name}" - when /^mate/, /^geany/ - "-l #{line_number} #{file_name}" - when /^code/ - "-g #{file_name}:#{line_number}" - when /^subl/ - "#{file_name}:#{line_number}" - when /^uedit32/ - "#{file_name}/#{line_number}" - when /^jedit/ - "#{file_name} +line:#{line_number}" - when /^redcar/ - "-l#{line_number} #{file_name}" - else - if Helpers::Platform.windows? - file_name.to_s - else - "+#{line_number} #{file_name}" - end - end - end - - # Get the name of the binary that Pry.config.editor points to. - # - # This is useful for deciding which flags we pass to the editor as - # we can just use the program's name and ignore any absolute paths. - # - # @example - # Pry.config.editor="/home/conrad/bin/textmate -w" - # editor_name - # # => textmate - # - def editor_name - File.basename(pry_instance.config.editor).split(" ").first - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/env.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/env.rb deleted file mode 100644 index 30ef79cb..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/env.rb +++ /dev/null @@ -1,18 +0,0 @@ -# frozen_string_literal: true - -class Pry - # Env is a helper module to work with environment variables. - # - # @since v0.13.0 - # @api private - module Env - def self.[](key) - return unless ENV.key?(key) - - value = ENV[key] - return if value == '' - - value - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/exception_handler.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/exception_handler.rb deleted file mode 100644 index d7f3b862..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/exception_handler.rb +++ /dev/null @@ -1,43 +0,0 @@ -# frozen_string_literal: true - -class Pry - # @api private - # @since v0.13.0 - module ExceptionHandler - class << self - # Will only show the first line of the backtrace. - def handle_exception(output, exception, _pry_instance) - if exception.is_a?(UserError) && exception.is_a?(SyntaxError) - output.puts "SyntaxError: #{exception.message.sub(/.*syntax error, */m, '')}" - else - output.puts standard_error_text_for(exception) - end - end - - private - - def standard_error_text_for(exception) - text = exception_text(exception) - return text unless exception.respond_to?(:cause) - - cause = exception.cause - while cause - text += cause_text(cause) - cause = cause.cause - end - - text - end - - def exception_text(exception) - "#{exception.class}: #{exception.message}\n" \ - "from #{exception.backtrace.first}\n" - end - - def cause_text(cause) - "Caused by #{cause.class}: #{cause}\n" \ - "from #{cause.backtrace.first}\n" - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/exceptions.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/exceptions.rb deleted file mode 100644 index ee31e6c4..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/exceptions.rb +++ /dev/null @@ -1,73 +0,0 @@ -# frozen_string_literal: true - -class Pry - # As a REPL, we often want to catch any unexpected exceptions that may have - # been raised; however we don't want to go overboard and prevent the user - # from exiting Pry when they want to. - module RescuableException - def self.===(exception) - case exception - # Catch when the user hits ^C (Interrupt < SignalException), and assume - # that they just wanted to stop the in-progress command (just like bash - # etc.) - when Interrupt - true - # Don't catch signals (particularly not SIGTERM) as these are unlikely - # to be intended for pry itself. We should also make sure that - # Kernel#exit works. - when *Pry.config.unrescued_exceptions - false - # All other exceptions will be caught. - else - true - end - end - end - - # Catches SecurityErrors if $SAFE is set - module TooSafeException - def self.===(exception) - if Pry::HAS_SAFE_LEVEL - $SAFE > 0 && exception.is_a?(SecurityError) - else - exception.is_a?(SecurityError) - end - end - end - - # An Exception Tag (cf. Exceptional Ruby) that instructs Pry to show the error - # in a more user-friendly manner. This should be used when the exception - # happens within Pry itself as a direct consequence of the user typing - # something wrong. - # - # This allows us to distinguish between the user typing: - # - # pry(main)> def ) - # SyntaxError: unexpected ) - # - # pry(main)> method_that_evals("def )") - # SyntaxError: (eval):1: syntax error, unexpected ')' - # from ./a.rb:2 in `eval' - module UserError; end - - # When we try to get a binding for an object, we try to define a method on - # that Object's singleton class. This doesn't work for "frozen" Object's, and - # the exception is just a vanilla RuntimeError. - module FrozenObjectException - def self.===(exception) - [ - "can't modify frozen class/module", - "can't modify frozen Class", - "can't modify frozen object" - ].include?(exception.message) - end - end - - # CommandErrors are caught by the REPL loop and displayed to the user. They - # indicate an exceptional condition that's fatal to the current command. - class CommandError < StandardError; end - class MethodNotFound < CommandError; end - - # indicates obsolete API - class ObsoleteError < StandardError; end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/forwardable.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/forwardable.rb deleted file mode 100644 index 3ae59a89..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/forwardable.rb +++ /dev/null @@ -1,27 +0,0 @@ -# frozen_string_literal: true - -class Pry - module Forwardable - require 'forwardable' - include ::Forwardable - - # - # Since Ruby 2.4, Forwardable will print a warning when - # calling a method that is private on a delegate, and - # in the future it could be an error: https://bugs.ruby-lang.org/issues/12782#note-3 - # - # That's why we revert to a custom implementation for delegating one - # private method to another. - # - def def_private_delegators(target, *private_delegates) - private_delegates.each do |private_delegate| - define_method(private_delegate) do |*a, &b| - instance_variable_get(target).__send__(private_delegate, *a, &b) - end - end - class_eval do - private(*private_delegates) # rubocop:disable Style/AccessModifierDeclarations - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/helpers.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/helpers.rb deleted file mode 100644 index 4bbbaafc..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/helpers.rb +++ /dev/null @@ -1,8 +0,0 @@ -# frozen_string_literal: true - -require "pry/helpers/base_helpers" -require "pry/helpers/options_helpers" -require "pry/helpers/command_helpers" -require "pry/helpers/text" -require "pry/helpers/table" -require "pry/helpers/platform" diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/helpers/base_helpers.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/helpers/base_helpers.rb deleted file mode 100644 index b47fbdf3..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/helpers/base_helpers.rb +++ /dev/null @@ -1,71 +0,0 @@ -# frozen_string_literal: true - -class Pry - module Helpers - module BaseHelpers - extend self - - def silence_warnings - old_verbose = $VERBOSE - $VERBOSE = nil - begin - yield - ensure - $VERBOSE = old_verbose - end - end - - # Acts like send but ignores any methods defined below Object or Class in the - # inheritance hierarchy. - # This is required to introspect methods on objects like Net::HTTP::Get that - # have overridden the `method` method. - def safe_send(obj, method, *args, &block) - (obj.is_a?(Module) ? Module : Object).instance_method(method) - .bind(obj).call(*args, &block) - end - - def find_command(name, set = Pry::Commands) - command_match = set.find do |_, command| - (listing = command.options[:listing]) == name && !listing.nil? - end - command_match.last if command_match - end - - def not_a_real_file?(file) - file =~ /^(\(.*\))$|^<.*>$/ || file =~ /__unknown__/ || file == "" || file == "-e" - end - - def use_ansi_codes? - Pry::Helpers::Platform.windows_ansi? || - ((term = Pry::Env['TERM']) && term != "dumb") - end - - def colorize_code(code) - SyntaxHighlighter.highlight(code) - end - - def highlight(string, regexp, highlight_color = :bright_yellow) - string.gsub(regexp) do |match| - "<#{highlight_color}>#{match}" - end - end - - # formatting - def heading(text) - text = "#{text}\n--" - "\e[1m#{text}\e[0m" - end - - # Send the given text through the best available pager (if Pry.config.pager is - # enabled). Infers where to send the output if used as a mixin. - # DEPRECATED. - def stagger_output(text, _out = nil) - if defined?(pry_instance) && pry_instance - pry_instance.pager.page text - else - Pry.new.pager.page text - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/helpers/command_helpers.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/helpers/command_helpers.rb deleted file mode 100644 index 374f6b20..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/helpers/command_helpers.rb +++ /dev/null @@ -1,146 +0,0 @@ -# frozen_string_literal: true - -require 'tempfile' - -class Pry - module Helpers - module CommandHelpers - include OptionsHelpers - - extend self - - # Open a temp file and yield it to the block, closing it after - # @return [String] The path of the temp file - def temp_file(ext = '.rb') - file = Tempfile.new(['pry', ext]) - yield(file) - ensure - file.close(true) - end - - def internal_binding?(context) - method_name = context.eval("::Kernel.__method__").to_s - # class_eval is here because of http://jira.codehaus.org/browse/JRUBY-6753 - %w[__binding__ __pry__ class_eval].include?(method_name) - # TODO: codehaus is dead, there was no test for this and the - # description for the commit doesn't exist. Probably a candidate for - # removal so we have a chance to introduce a regression and document it - # properly. - end - - def get_method_or_raise(method_name, context, opts = {}) - method = Pry::Method.from_str(method_name, context, opts) - if !method && method_name - raise Pry::MethodNotFound, "method '#{method_name}' could not be found." - end - - (opts[:super] || 0).times do - if method.super - method = method.super - else - raise Pry::MethodNotFound, - "'#{method.name_with_owner}' has no super method" - end - end - - if !method || (!method_name && internal_binding?(context)) - raise Pry::MethodNotFound, - 'no method name given, and context is not a method' - end - - set_file_and_dir_locals(method.source_file) - method - end - - # Remove any common leading whitespace from every line in `text`. This - # can be used to make a HEREDOC line up with the left margin, without - # sacrificing the indentation level of the source code. - # - # @example - # opt.banner(unindent(<<-USAGE)) - # Lorem ipsum dolor sit amet, consectetur adipisicing elit, - # sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. - # "Ut enim ad minim veniam." - # USAGE - # - # @param [String] dirty_text The text from which to remove indentation - # @return [String] the text with indentation stripped - def unindent(dirty_text, left_padding = 0) - text = dirty_text.sub(/\A[ \t]+\z/, '') # Empty blank lines. - - # Find the longest common whitespace to all indented lines. Ignore lines - # containing just -- or ++ as these seem to be used by comment authors - # as delimeters. - scanned_text = text.scan(/^[ \t]*(?!--\n|\+\+\n)(?=[^ \t\n])/) - margin = scanned_text.inject do |current_margin, next_indent| - if next_indent.start_with?(current_margin) - current_margin - elsif current_margin.start_with?(next_indent) - next_indent - else - '' - end - end - - text.gsub(/^#{margin}/, ' ' * left_padding) - end - - # Restrict a string to the given range of lines (1-indexed) - # @param [String] content The string. - # @param [Range, Integer] lines The line(s) to restrict it to. - # @return [String] The resulting string. - def restrict_to_lines(content, lines) - line_range = one_index_range_or_number(lines) - Array(content.lines.to_a[line_range]).join - end - - def one_index_number(line_number) - line_number > 0 ? line_number - 1 : line_number - end - - # convert a 1-index range to a 0-indexed one - def one_index_range(range) - Range.new(one_index_number(range.begin), one_index_number(range.end)) - end - - def one_index_range_or_number(range_or_number) - case range_or_number - when Range - one_index_range(range_or_number) - else - one_index_number(range_or_number) - end - end - - def absolute_index_number(line_number, array_length) - if line_number >= 0 - line_number - else - [array_length + line_number, 0].max - end - end - - def absolute_index_range(range_or_number, array_length) - case range_or_number - when Range - a = absolute_index_number(range_or_number.begin, array_length) - b = absolute_index_number(range_or_number.end, array_length) - else - a = b = absolute_index_number(range_or_number, array_length) - end - - Range.new(a, b) - end - - def set_file_and_dir_locals(file_name, pry = pry_instance, ctx = target) - return if !ctx || !file_name - - pry.last_file = File.expand_path(file_name) - pry.inject_local("_file_", pry.last_file, ctx) - - pry.last_dir = File.dirname(pry.last_file) - pry.inject_local("_dir_", pry.last_dir, ctx) - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/helpers/documentation_helpers.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/helpers/documentation_helpers.rb deleted file mode 100644 index 024e1477..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/helpers/documentation_helpers.rb +++ /dev/null @@ -1,84 +0,0 @@ -# frozen_string_literal: true - -class Pry - module Helpers - # This class contains methods useful for extracting - # documentation from methods and classes. - module DocumentationHelpers - YARD_TAGS = %w[ - param return option yield attr attr_reader attr_writer deprecate example - raise - ].freeze - - module_function - - def process_rdoc(comment) - comment = comment.dup - last_match_ruby = proc do - SyntaxHighlighter.highlight(Regexp.last_match(1)) - end - - comment.gsub(%r{(?:\s*\n)?(.*?)\s*}m, &last_match_ruby) - .gsub(%r{(?:\s*\n)?(.*?)\s*}m) { "\e[1m#{Regexp.last_match(1)}\e[0m" } - .gsub(%r{(?:\s*\n)?(.*?)\s*}m) { "\e[1m#{Regexp.last_match(1)}\e[0m" } - .gsub(%r{(?:\s*\n)?(.*?)\s*}m, &last_match_ruby) - .gsub(/\B\+(\w+?)\+\B/) { "\e[32m#{Regexp.last_match(1)}\e[0m" } - .gsub(/((?:^[ \t]+(?:(?!.+\e\[)).+(?:\n+|\Z))+)/, &last_match_ruby) - .gsub(/`(?:\s*\n)?([^\e]*?)\s*`/) { "`#{last_match_ruby.call}`" } - end - - def process_yardoc_tag(comment, tag) - in_tag_block = nil - comment.lines.map do |v| - if in_tag_block && v !~ /^\S/ - Pry::Helpers::Text.strip_color Pry::Helpers::Text.strip_color(v) - elsif in_tag_block - in_tag_block = false - v - else - in_tag_block = true if v =~ /^@#{tag}/ - v - end - end.join - end - - def process_yardoc(comment) - (YARD_TAGS - %w[example]) - .inject(comment) { |a, v| process_yardoc_tag(a, v) } - .gsub(/^@(#{YARD_TAGS.join("|")})/) { "\e[33m#{Regexp.last_match(1)}\e[0m" } - end - - def process_comment_markup(comment) - process_yardoc process_rdoc(comment) - end - - # @param [String] code - # @return [String] - def strip_comments_from_c_code(code) - code.sub(%r{\A\s*/\*.*?\*/\s*}m, '') - end - - # Given a string that makes up a comment in a source-code file parse out the content - # that the user is intended to read. (i.e. without leading indentation, #-characters - # or shebangs) - # - # @param [String] comment - # @return [String] - def get_comment_content(comment) - comment = comment.dup - # Remove #!/usr/bin/ruby - comment.gsub!(/\A\#!.*$/, '') - # Remove leading empty comment lines - comment.gsub!(/\A\#+?$/, '') - comment.gsub!(/^\s*#/, '') - strip_leading_whitespace(comment) - end - - # @param [String] text - # @return [String] - def strip_leading_whitespace(text) - Pry::Helpers::CommandHelpers.unindent(text) - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/helpers/options_helpers.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/helpers/options_helpers.rb deleted file mode 100644 index 1f93c8db..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/helpers/options_helpers.rb +++ /dev/null @@ -1,34 +0,0 @@ -# frozen_string_literal: true - -class Pry - module Helpers - module OptionsHelpers - module_function - - # Add method options to the Pry::Slop instance - def method_options(opt) - @method_target = target - opt.on :M, "instance-methods", "Operate on instance methods." - opt.on :m, :methods, "Operate on methods." - opt.on :s, :super, "Select the 'super' method. Can be repeated to " \ - "traverse the ancestors.", as: :count - opt.on( - :c, :context, "Select object context to run under.", argument: true - ) do |context| - @method_target = Pry.binding_for(target.eval(context)) - end - end - - # Get the method object parsed by the slop instance - def method_object - @method_object ||= get_method_or_raise( - args.empty? ? nil : args.join(" "), - @method_target, - super: opts[:super], - instance: opts.present?(:'instance-methods') && !opts.present?(:methods), - methods: opts.present?(:methods) && !opts.present?(:'instance-methods') - ) - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/helpers/platform.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/helpers/platform.rb deleted file mode 100644 index 632e71d4..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/helpers/platform.rb +++ /dev/null @@ -1,55 +0,0 @@ -# frozen_string_literal: true - -require 'rbconfig' - -class Pry - module Helpers - # Contains methods for querying the platform that Pry is running on - # @api public - # @since v0.12.0 - module Platform - # @return [Boolean] - def self.mac_osx? - !!(RbConfig::CONFIG['host_os'] =~ /\Adarwin/i) - end - - # @return [Boolean] - def self.linux? - !!(RbConfig::CONFIG['host_os'] =~ /linux/i) - end - - # @return [Boolean] true when Pry is running on Windows with ANSI support, - # false otherwise - def self.windows? - !!(RbConfig::CONFIG['host_os'] =~ /mswin|mingw/) - end - - # @return [Boolean] - def self.windows_ansi? - return false unless windows? - - !!(defined?(Win32::Console) || Pry::Env['ANSICON'] || mri?) - end - - # @return [Boolean] - def self.jruby? - RbConfig::CONFIG['ruby_install_name'] == 'jruby' - end - - # @return [Boolean] - def self.jruby_19? - jruby? && RbConfig::CONFIG['ruby_version'] == '1.9' - end - - # @return [Boolean] - def self.mri? - RbConfig::CONFIG['ruby_install_name'] == 'ruby' - end - - # @return [Boolean] - def self.mri_2? - mri? && RUBY_VERSION.start_with?('2') - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/helpers/table.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/helpers/table.rb deleted file mode 100644 index 23f98d05..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/helpers/table.rb +++ /dev/null @@ -1,121 +0,0 @@ -# frozen_string_literal: true - -class Pry - module Helpers - def self.tablify_or_one_line(heading, things, pry_instance = Pry.new) - plain_heading = Pry::Helpers::Text.strip_color(heading) - attempt = Table.new(things, column_count: things.size) - if attempt.fits_on_line?(pry_instance.output.width - plain_heading.size - 2) - "#{heading}: #{attempt}\n" - else - content = tablify_to_screen_width(things, { indent: ' ' }, pry_instance) - "#{heading}: \n#{content}\n" - end - end - - def self.tablify_to_screen_width(things, options, pry_instance = Pry.new) - options ||= {} - things = things.compact - if (indent = options[:indent]) - usable_width = pry_instance.output.width - indent.size - tablify(things, usable_width, pry_instance).to_s.gsub(/^/, indent) - else - tablify(things, pry_instance.output.width, pry_instance).to_s - end - end - - def self.tablify(things, line_length, pry_instance = Pry.new) - table = Table.new(things, { column_count: things.size }, pry_instance) - until (table.column_count == 1) || table.fits_on_line?(line_length) - table.column_count -= 1 - end - table - end - - class Table - attr_reader :items, :column_count - def initialize(items, args, pry_instance = Pry.new) - @column_count = args[:column_count] - @config = pry_instance.config - self.items = items - end - - def to_s - rows_to_s.join("\n") - end - - def rows_to_s(style = :color_on) - widths = columns.map { |e| _max_width(e) } - @rows_without_colors.map do |r| - padded = [] - r.each_with_index do |e, i| - next unless e - - item = e.ljust(widths[i]) - item.sub! e, _recall_color_for(e) if style == :color_on - padded << item - end - padded.join(@config.ls.separator) - end - end - - def items=(items) - @items = items - _rebuild_colorless_cache - _recolumn - end - - def column_count=(count) - @column_count = count - _recolumn - end - - def fits_on_line?(line_length) - _max_width(rows_to_s(:no_color)) <= line_length - end - - def columns - @rows_without_colors.transpose - end - - def ==(other) - items == other.to_a - end - - def to_a - items.to_a - end - - private - - def _max_width(things) - things.compact.map(&:size).max || 0 - end - - def _rebuild_colorless_cache - @colorless_cache = {} - @plain_items = [] - items.map do |e| - plain = Pry::Helpers::Text.strip_color(e) - @colorless_cache[plain] = e - @plain_items << plain - end - end - - def _recolumn - @rows_without_colors = [] - return if items.size.zero? - - row_count = (items.size.to_f / column_count).ceil - row_count.times do |i| - row_indices = (0...column_count).map { |e| row_count * e + i } - @rows_without_colors << row_indices.map { |e| @plain_items[e] } - end - end - - def _recall_color_for(thing) - @colorless_cache[thing] - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/helpers/text.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/helpers/text.rb deleted file mode 100644 index 4ccedf83..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/helpers/text.rb +++ /dev/null @@ -1,118 +0,0 @@ -# frozen_string_literal: true - -class Pry - module Helpers - # The methods defined on {Text} are available to custom commands via - # {Pry::Command#text}. - module Text - extend self - - COLORS = { - "black" => 0, - "red" => 1, - "green" => 2, - "yellow" => 3, - "blue" => 4, - "purple" => 5, - "magenta" => 5, - "cyan" => 6, - "white" => 7 - }.freeze - - COLORS.each_pair do |color, value| - define_method color do |text| - "\033[0;#{30 + value}m#{text}\033[0m" - end - - define_method "bright_#{color}" do |text| - "\033[1;#{30 + value}m#{text}\033[0m" - end - - COLORS.each_pair do |bg_color, bg_value| - define_method "#{color}_on_#{bg_color}" do |text| - "\033[0;#{30 + value};#{40 + bg_value}m#{text}\033[0m" - end - - define_method "bright_#{color}_on_#{bg_color}" do |text| - "\033[1;#{30 + value};#{40 + bg_value}m#{text}\033[0m" - end - end - end - - # Remove any color codes from _text_. - # - # @param [String, #to_s] text - # @return [String] _text_ stripped of any color codes. - def strip_color(text) - text.to_s.gsub(/(\001)?(\e\[(\d[;\d]?)*m)(\002)?/, '') - end - - # Returns _text_ as bold text for use on a terminal. - # - # @param [String, #to_s] text - # @return [String] _text_ - def bold(text) - "\e[1m#{text}\e[0m" - end - - # Returns `text` in the default foreground colour. - # Use this instead of "black" or "white" when you mean absence of colour. - # - # @param [String, #to_s] text - # @return [String] - def default(text) - text.to_s - end - - # - # @yield - # Yields a block with color turned off. - # - # @return [void] - # - def no_color - boolean = Pry.config.color - Pry.config.color = false - yield - ensure - Pry.config.color = boolean - end - - # - # @yield - # Yields a block with paging turned off. - # - # @return [void] - # - def no_pager - boolean = Pry.config.pager - Pry.config.pager = false - yield - ensure - Pry.config.pager = boolean - end - - # Returns _text_ in a numbered list, beginning at _offset_. - # - # @param [#each_line] text - # @param [Fixnum] offset - # @return [String] - def with_line_numbers(text, offset, color = :blue) - lines = text.each_line.to_a - max_width = (offset + lines.count).to_s.length - lines.each_with_index.map do |line, index| - adjusted_index = (index + offset).to_s.rjust(max_width) - "#{send(color, adjusted_index)}: #{line}" - end.join - end - - # Returns _text_ indented by _chars_ spaces. - # - # @param [String] text - # @param [Fixnum] chars - def indent(text, chars) - text.lines.map { |l| "#{' ' * chars}#{l}" }.join - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/history.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/history.rb deleted file mode 100644 index 15da2e2e..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/history.rb +++ /dev/null @@ -1,153 +0,0 @@ -# frozen_string_literal: true - -class Pry - # The History class is responsible for maintaining the user's input history, - # both internally and within Readline. - class History - def self.default_file - history_file = - if (xdg_home = Pry::Env['XDG_DATA_HOME']) - # See XDG Base Directory Specification at - # https://standards.freedesktop.org/basedir-spec/basedir-spec-0.8.html - xdg_home + '/pry/pry_history' - elsif File.exist?(File.expand_path('~/.pry_history')) - '~/.pry_history' - else - '~/.local/share/pry/pry_history' - end - File.expand_path(history_file) - end - - attr_accessor :loader, :saver - - # @return [Fixnum] Number of lines in history when Pry first loaded. - attr_reader :original_lines - - # @return [Integer] total number of lines, including original lines - attr_reader :history_line_count - - def initialize(options = {}) - @history = options[:history] || [] - @history_line_count = @history.count - @file_path = options[:file_path] - @original_lines = 0 - @loader = method(:read_from_file) - @saver = method(:save_to_file) - end - - # Load the input history using `History.loader`. - # @return [Integer] The number of lines loaded - def load - @loader.call do |line| - next if invalid_readline_line?(line) - - @history << line.chomp - @original_lines += 1 - @history_line_count += 1 - end - end - - # Add a line to the input history, ignoring blank and duplicate lines. - # @param [String] line - # @return [String] The same line that was passed in - def push(line) - return line if line.empty? || invalid_readline_line?(line) - - begin - last_line = @history[-1] - rescue IndexError - last_line = nil - end - - return line if line == last_line - - @history << line - @history_line_count += 1 - @saver.call(line) if !should_ignore?(line) && Pry.config.history_save - - line - end - alias << push - - # Clear this session's history. This won't affect the contents of the - # history file. - def clear - @history.clear - @history_line_count = 0 - @original_lines = 0 - end - - # @return [Fixnum] The number of lines in history from just this session. - def session_line_count - @history_line_count - @original_lines - end - - # Return an Array containing all stored history. - # @return [Array] An Array containing all lines of history loaded - # or entered by the user in the current session. - def to_a - @history.to_a - end - - # Filter the history with the histignore options - # @return [Array] An array containing all the lines that are not - # included in the histignore. - def filter(history) - history.select { |l| l unless should_ignore?(l) } - end - - private - - # Check if the line match any option in the histignore - # [Pry.config.history_ignorelist] - # @return [Boolean] a boolean that notifies if the line was found in the - # histignore array. - def should_ignore?(line) - hist_ignore = Pry.config.history_ignorelist - return false if hist_ignore.nil? || hist_ignore.empty? - - hist_ignore.any? { |p| line.to_s.match(p) } - end - - # The default loader. Yields lines from `Pry.config.history_file`. - def read_from_file - path = history_file_path - - File.foreach(path) { |line| yield(line) } if File.exist?(path) - rescue SystemCallError => error - warn "Unable to read history file: #{error.message}" - end - - # The default saver. Appends the given line to `Pry.config.history_file`. - def save_to_file(line) - history_file.puts line if history_file - end - - # The history file, opened for appending. - def history_file - if defined?(@history_file) - @history_file - else - unless File.exist?(history_file_path) - FileUtils.mkdir_p(File.dirname(history_file_path)) - end - @history_file = File.open(history_file_path, 'a', 0o600).tap do |file| - file.sync = true - end - end - rescue SystemCallError => error - warn "Unable to write history file: #{error.message}" - @history_file = false - end - - def history_file_path - File.expand_path(@file_path || Pry.config.history_file) - end - - def invalid_readline_line?(line) - # `Readline::HISTORY << line` raises an `ArgumentError` if `line` - # includes a null byte - line.include?("\0") - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/hooks.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/hooks.rb deleted file mode 100644 index 47ffd97f..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/hooks.rb +++ /dev/null @@ -1,180 +0,0 @@ -# frozen_string_literal: true - -class Pry - # Implements a hooks system for Pry. A hook is a callable that is associated - # with an event. A number of events are currently provided by Pry, these - # include: `:when_started`, `:before_session`, `:after_session`. A hook must - # have a name, and is connected with an event by the `Pry::Hooks#add_hook` - # method. - # - # @example Adding a hook for the `:before_session` event. - # Pry.config.hooks.add_hook(:before_session, :say_hi) do - # puts "hello" - # end - class Hooks - def self.default - hooks = new - hooks.add_hook(:before_session, :default) do |_out, _target, pry_instance| - next if pry_instance.quiet? - - pry_instance.run_command('whereami --quiet') - end - hooks - end - - def initialize - @hooks = Hash.new { |h, k| h[k] = [] } - end - - # Ensure that duplicates have their @hooks object. - def initialize_copy(_orig) - hooks_dup = @hooks.dup - @hooks.each do |k, v| - hooks_dup[k] = v.dup - end - - @hooks = hooks_dup - end - - def errors - @errors ||= [] - end - - # Destructively merge the contents of two `Pry:Hooks` instances. - # - # @param [Pry::Hooks] other The `Pry::Hooks` instance to merge - # @return [Pry:Hooks] The receiver. - # @see #merge - def merge!(other) - @hooks.merge!(other.dup.hooks) do |_key, array, other_array| - temp_hash = {} - output = [] - - (array + other_array).reverse_each do |pair| - temp_hash[pair.first] ||= output.unshift(pair) - end - - output - end - - self - end - - # @example - # hooks = Pry::Hooks.new.add_hook(:before_session, :say_hi) { puts "hi!" } - # Pry::Hooks.new.merge(hooks) - # @param [Pry::Hooks] other The `Pry::Hooks` instance to merge - # @return [Pry::Hooks] a new `Pry::Hooks` instance containing a merge of the - # contents of two `Pry:Hooks` instances. - def merge(other) - dup.tap do |v| - v.merge!(other) - end - end - - # Add a new hook to be executed for the `event_name` event. - # @param [Symbol] event_name The name of the event. - # @param [Symbol] hook_name The name of the hook. - # @param [#call] callable The callable. - # @yield The block to use as the callable (if no `callable` provided). - # @return [Pry:Hooks] The receiver. - def add_hook(event_name, hook_name, callable = nil, &block) - event_name = event_name.to_s - - # do not allow duplicates, but allow multiple `nil` hooks - # (anonymous hooks) - if hook_exists?(event_name, hook_name) && !hook_name.nil? - raise ArgumentError, "Hook with name '#{hook_name}' already defined!" - end - - raise ArgumentError, "Must provide a block or callable." if !block && !callable - - # ensure we only have one anonymous hook - @hooks[event_name].delete_if { |h, _k| h.nil? } if hook_name.nil? - - if block - @hooks[event_name] << [hook_name, block] - elsif callable - @hooks[event_name] << [hook_name, callable] - end - - self - end - - # Execute the list of hooks for the `event_name` event. - # @param [Symbol] event_name The name of the event. - # @param [Array] args The arguments to pass to each hook function. - # @return [Object] The return value of the last executed hook. - def exec_hook(event_name, *args, &block) - @hooks[event_name.to_s].map do |_hook_name, callable| - begin - callable.call(*args, &block) - rescue RescuableException => e - errors << e - e - end - end.last - end - - # @param [Symbol] event_name The name of the event. - # @return [Fixnum] The number of hook functions for `event_name`. - def hook_count(event_name) - @hooks[event_name.to_s].size - end - - # @param [Symbol] event_name The name of the event. - # @param [Symbol] hook_name The name of the hook - # @return [#call] a specific hook for a given event. - def get_hook(event_name, hook_name) - hook = @hooks[event_name.to_s].find do |current_hook_name, _callable| - current_hook_name == hook_name - end - hook.last if hook - end - - # @param [Symbol] event_name The name of the event. - # @return [Hash] The hash of hook names / hook functions. - # @note Modifying the returned hash does not alter the hooks, use - # `add_hook`/`delete_hook` for that. - def get_hooks(event_name) - Hash[@hooks[event_name.to_s]] - end - - # @param [Symbol] event_name The name of the event. - # @param [Symbol] hook_name The name of the hook. - # to delete. - # @return [#call] The deleted hook. - def delete_hook(event_name, hook_name) - deleted_callable = nil - - @hooks[event_name.to_s].delete_if do |current_hook_name, callable| - if current_hook_name == hook_name - deleted_callable = callable - true - else - false - end - end - deleted_callable - end - - # Clear all hooks functions for a given event. - # - # @param [String] event_name The name of the event. - # @return [void] - def clear_event_hooks(event_name) - @hooks[event_name.to_s] = [] - end - - # @param [Symbol] event_name Name of the event. - # @param [Symbol] hook_name Name of the hook. - # @return [Boolean] Whether the hook by the name `hook_name`. - def hook_exists?(event_name, hook_name) - @hooks[event_name.to_s].map(&:first).include?(hook_name) - end - - protected - - attr_reader :hooks - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/indent.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/indent.rb deleted file mode 100644 index 7ef284a7..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/indent.rb +++ /dev/null @@ -1,412 +0,0 @@ -# frozen_string_literal: true - -class Pry - ## - # Pry::Indent is a class that can be used to indent a number of lines - # containing Ruby code similar as to how IRB does it (but better). The class - # works by tokenizing a string using CodeRay and then looping over those - # tokens. Based on the tokens in a line of code that line (or the next one) - # will be indented or un-indented by correctly. - # - class Indent - include Helpers::BaseHelpers - - # Raised if {#module_nesting} would not work. - class UnparseableNestingError < StandardError; end - - # @return [String] String containing the spaces to be inserted before the next line. - attr_reader :indent_level - - # @return [Array] The stack of open tokens. - attr_reader :stack - - # The amount of spaces to insert for each indent level. - SPACES = ' '.freeze - - # Hash containing all the tokens that should increase the indentation - # level. The keys of this hash are open tokens, the values the matching - # tokens that should prevent a line from being indented if they appear on - # the same line. - OPEN_TOKENS = { - 'def' => 'end', - 'class' => 'end', - 'module' => 'end', - 'do' => 'end', - 'if' => 'end', - 'unless' => 'end', - 'while' => 'end', - 'until' => 'end', - 'for' => 'end', - 'case' => 'end', - 'begin' => 'end', - '[' => ']', - '{' => '}', - '(' => ')' - }.freeze - - # Which tokens can either be open tokens, or appear as modifiers on - # a single-line. - SINGLELINE_TOKENS = %w[if while until unless rescue].freeze - - # Which tokens can be followed by an optional "do" keyword. - OPTIONAL_DO_TOKENS = %w[for while until].freeze - - # Collection of token types that should be ignored. Without this list - # keywords such as "class" inside strings would cause the code to be - # indented incorrectly. - # - # :pre_constant and :preserved_constant are the CodeRay 0.9.8 and 1.0.0 - # classifications of "true", "false", and "nil". - IGNORE_TOKENS = %i[space content string method ident - constant pre_constant predefined_constant].freeze - - # Tokens that indicate the end of a statement (i.e. that, if they appear - # directly before an "if" indicates that that if applies to the same line, - # not the next line) - # - # :reserved and :keywords are the CodeRay 0.9.8 and 1.0.0 respectively - # classifications of "super", "next", "return", etc. - STATEMENT_END_TOKENS = IGNORE_TOKENS + %i[regexp integer float - keyword delimiter reserved - instance_variable - class_variable global_variable] - - # Collection of tokens that should appear dedented even though they - # don't affect the surrounding code. - MIDWAY_TOKENS = %w[when else elsif ensure rescue].freeze - - # Clean the indentation of a fragment of ruby. - # - # @param [String] str - # @return [String] - def self.indent(str) - new.indent(str) - end - - # Get the module nesting at the given point in the given string. - # - # NOTE If the line specified contains a method definition, then the nesting - # at the start of the method definition is used. Otherwise the nesting from - # the end of the line is used. - # - # @param [String] str The ruby code to analyze - # @param [Fixnum] line_number The line number (starting from 1) - # @return [Array] - def self.nesting_at(str, line_number) - indent = new - lines = str.split("\n") - n = line_number - 1 - to_indent = lines[0...n] << (lines[n] || "").split("def").first(1) - indent.indent(to_indent.join("\n") << "\n") - indent.module_nesting - end - - def initialize(pry_instance = Pry.new) - @pry_instance = pry_instance - reset - end - - # reset internal state - def reset - @stack = [] - @indent_level = String.new # rubocop:disable Style/EmptyLiteral - @heredoc_queue = [] - @close_heredocs = {} - @string_start = nil - @awaiting_class = false - @module_nesting = [] - self - end - - # Indents a string and returns it. This string can either be a single line - # or multiple ones. - # - # @example - # str = <] - def module_nesting - @module_nesting.map do |(kind, token)| - raise UnparseableNestingError, @module_nesting.inspect if token.nil? - - "#{kind} #{token}" - end - end - - # Return a string which, when printed, will rewrite the previous line with - # the correct indentation. Mostly useful for fixing 'end'. - # - # @param [String] prompt The user's prompt - # @param [String] code The code the user just typed in - # @param [Integer] overhang The number of characters to erase afterwards (the - # the difference in length between the old line and the new one) - # - # @return [String] correctly indented line - def correct_indentation(prompt, code, overhang = 0) - prompt = prompt.delete("\001\002") - line_to_measure = Pry::Helpers::Text.strip_color(prompt) << code - whitespace = ' ' * overhang - - cols = @pry_instance.output.width - lines = cols == 0 ? 1 : (line_to_measure.length / cols + 1).to_i - - if Helpers::Platform.windows_ansi? - move_up = "\e[#{lines}F" - move_down = "\e[#{lines}E" - else - move_up = "\e[#{lines}A\e[0G" - move_down = "\e[#{lines}B\e[0G" - end - - "#{move_up}#{prompt}#{colorize_code(code)}#{whitespace}#{move_down}" - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/input_completer.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/input_completer.rb deleted file mode 100644 index 3059d4b6..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/input_completer.rb +++ /dev/null @@ -1,283 +0,0 @@ -# frozen_string_literal: true - -# taken from irb -# Implements tab completion for Readline in Pry -class Pry - class InputCompleter - NUMERIC_REGEXP = /^(-?(0[dbo])?[0-9_]+(\.[0-9_]+)?([eE]-?[0-9]+)?)\.([^.]*)$/.freeze - ARRAY_REGEXP = /^([^\]]*\])\.([^.]*)$/.freeze - SYMBOL_REGEXP = /^(:[^:.]*)$/.freeze - SYMBOL_METHOD_CALL_REGEXP = /^(:[^:.]+)\.([^.]*)$/.freeze - REGEX_REGEXP = %r{^(/[^/]*/)\.([^.]*)$}.freeze - PROC_OR_HASH_REGEXP = /^([^\}]*\})\.([^.]*)$/.freeze - TOPLEVEL_LOOKUP_REGEXP = /^::([A-Z][^:\.\(]*)$/.freeze - CONSTANT_REGEXP = /^([A-Z][A-Za-z0-9]*)$/.freeze - CONSTANT_OR_METHOD_REGEXP = /^([A-Z].*)::([^:.]*)$/.freeze - HEX_REGEXP = /^(-?0x[0-9a-fA-F_]+)\.([^.]*)$/.freeze - GLOBALVARIABLE_REGEXP = /^(\$[^.]*)$/.freeze - VARIABLE_REGEXP = /^([^."].*)\.([^.]*)$/.freeze - - RESERVED_WORDS = %w[ - BEGIN END - alias and - begin break - case class - def defined do - else elsif end ensure - false for - if in - module - next nil not - or - redo rescue retry return - self super - then true - undef unless until - when while - yield - ].freeze - - WORD_ESCAPE_STR = " \t\n\"\\'`><=;|&{(".freeze - - def initialize(input, pry = nil) - @pry = pry - @input = input - if @input.respond_to?(:basic_word_break_characters=) - @input.basic_word_break_characters = WORD_ESCAPE_STR - end - - return unless @input.respond_to?(:completion_append_character=) - - @input.completion_append_character = nil - end - - # Return a new completion proc for use by Readline. - # rubocop:disable Metrics/AbcSize, Metrics/MethodLength - def call(str, options = {}) - custom_completions = options[:custom_completions] || [] - # if there are multiple contexts e.g. cd 1/2/3 - # get new target for 1/2 and find candidates for 3 - path, input = build_path(str) - - if path.call.empty? - target = options[:target] - else - # Assume the user is tab-completing the 'cd' command - begin - target = Pry::ObjectPath.new(path.call, @pry.binding_stack).resolve.last - # but if that doesn't work, assume they're doing division with no spaces - rescue Pry::CommandError - target = options[:target] - end - end - - begin - bind = target - # Complete stdlib symbols - case input - when REGEX_REGEXP # Regexp - receiver = Regexp.last_match(1) - message = Regexp.quote(Regexp.last_match(2)) - candidates = Regexp.instance_methods.collect(&:to_s) - select_message(path, receiver, message, candidates) - when ARRAY_REGEXP # Array - receiver = Regexp.last_match(1) - message = Regexp.quote(Regexp.last_match(2)) - candidates = Array.instance_methods.collect(&:to_s) - select_message(path, receiver, message, candidates) - when PROC_OR_HASH_REGEXP # Proc or Hash - receiver = Regexp.last_match(1) - message = Regexp.quote(Regexp.last_match(2)) - candidates = Proc.instance_methods.collect(&:to_s) - candidates |= Hash.instance_methods.collect(&:to_s) - select_message(path, receiver, message, candidates) - when SYMBOL_REGEXP # Symbol - if Symbol.respond_to?(:all_symbols) - sym = Regexp.quote(Regexp.last_match(1)) - candidates = Symbol.all_symbols.collect { |s| ":" + s.id2name } - candidates.grep(/^#{sym}/) - else - [] - end - when TOPLEVEL_LOOKUP_REGEXP # Absolute Constant or class methods - receiver = Regexp.last_match(1) - candidates = Object.constants.collect(&:to_s) - candidates.grep(/^#{receiver}/).collect { |e| "::" + e } - when CONSTANT_REGEXP # Constant - message = Regexp.last_match(1) - begin - context = target.eval("self") - context = context.class unless context.respond_to? :constants - candidates = context.constants.collect(&:to_s) - rescue StandardError - candidates = [] - end - candidates = candidates.grep(/^#{message}/).collect(&path) - when CONSTANT_OR_METHOD_REGEXP # Constant or class methods - receiver = Regexp.last_match(1) - message = Regexp.quote(Regexp.last_match(2)) - begin - candidates = eval( # rubocop:disable Security/Eval - "#{receiver}.constants.collect(&:to_s)", bind, __FILE__, __LINE__ - ) - candidates |= eval( # rubocop:disable Security/Eval - "#{receiver}.methods.collect(&:to_s)", bind, __FILE__, __LINE__ - ) - rescue Pry::RescuableException - candidates = [] - end - candidates.grep(/^#{message}/).collect { |e| receiver + "::" + e } - when SYMBOL_METHOD_CALL_REGEXP # method call on a Symbol - receiver = Regexp.last_match(1) - message = Regexp.quote(Regexp.last_match(2)) - candidates = Symbol.instance_methods.collect(&:to_s) - select_message(path, receiver, message, candidates) - when NUMERIC_REGEXP - # Numeric - receiver = Regexp.last_match(1) - message = Regexp.quote(Regexp.last_match(5)) - begin - # rubocop:disable Security/Eval - candidates = eval(receiver, bind).methods.collect(&:to_s) - # rubocop:enable Security/Eval - rescue Pry::RescuableException - candidates = [] - end - select_message(path, receiver, message, candidates) - when HEX_REGEXP - # Numeric(0xFFFF) - receiver = Regexp.last_match(1) - message = Regexp.quote(Regexp.last_match(2)) - begin - # rubocop:disable Security/Eval - candidates = eval(receiver, bind).methods.collect(&:to_s) - # rubocop:enable Security/Eval - rescue Pry::RescuableException - candidates = [] - end - select_message(path, receiver, message, candidates) - when GLOBALVARIABLE_REGEXP # global - regmessage = Regexp.new(Regexp.quote(Regexp.last_match(1))) - candidates = global_variables.collect(&:to_s).grep(regmessage) - when VARIABLE_REGEXP # variable - receiver = Regexp.last_match(1) - message = Regexp.quote(Regexp.last_match(2)) - - gv = eval("global_variables", bind, __FILE__, __LINE__).collect(&:to_s) - lv = eval("local_variables", bind, __FILE__, __LINE__).collect(&:to_s) - cv = eval("self.class.constants", bind, __FILE__, __LINE__).collect(&:to_s) - - if (gv | lv | cv).include?(receiver) || /^[A-Z]/ =~ receiver && /\./ !~ receiver - # foo.func and foo is local var. OR - # Foo::Bar.func - begin - candidates = eval( # rubocop:disable Security/Eval - "#{receiver}.methods", bind, __FILE__, __LINE__ - ).collect(&:to_s) - rescue Pry::RescuableException - candidates = [] - end - else - # func1.func2 - require 'set' - candidates = Set.new - to_ignore = ignored_modules - ObjectSpace.each_object(Module) do |m| - next if begin - to_ignore.include?(m) - rescue StandardError - true - end - - # jruby doesn't always provide #instance_methods() on each - # object. - if m.respond_to?(:instance_methods) - candidates.merge m.instance_methods(false).collect(&:to_s) - end - end - end - select_message(path, receiver, message, candidates.sort) - when /^\.([^.]*)$/ - # Unknown(maybe String) - receiver = "" - message = Regexp.quote(Regexp.last_match(1)) - candidates = String.instance_methods(true).collect(&:to_s) - select_message(path, receiver, message, candidates) - else - candidates = eval( - "methods | private_methods | local_variables | " \ - "self.class.constants | instance_variables", - bind, __FILE__, __LINE__ - 2 - ).collect(&:to_s) - - if eval("respond_to?(:class_variables)", bind, __FILE__, __LINE__) - candidates += eval( - "class_variables", bind, __FILE__, __LINE__ - ).collect(&:to_s) - end - candidates = - (candidates | RESERVED_WORDS | custom_completions) - .grep(/^#{Regexp.quote(input)}/) - candidates.collect(&path) - end - rescue Pry::RescuableException - [] - end - end - # rubocop:enable Metrics/AbcSize, Metrics/MethodLength - - def select_message(path, receiver, message, candidates) - candidates.grep(/^#{message}/).collect do |e| - next unless e =~ /^[a-zA-Z_]/ - - path.call(receiver + "." + e) - end.compact - end - - # build_path seperates the input into two parts: path and input. - # input is the partial string that should be completed - # path is a proc that takes an input and builds a full path. - def build_path(input) - # check to see if the input is a regex - return proc { |i| i.to_s }, input if input[%r{/\.}] - - trailing_slash = input.end_with?('/') - contexts = input.chomp('/').split(%r{/}) - input = contexts[-1] - path = proc do |i| - p = contexts[0..-2].push(i).join('/') - p += '/' if trailing_slash && !i.nil? - p - end - [path, input] - end - - def ignored_modules - # We could cache the result, but IRB is not loaded by default. - # And this is very fast anyway. - # By using this approach, we avoid Module#name calls, which are - # relatively slow when there are a lot of anonymous modules defined. - s = Set.new - - scanner = lambda do |m| - next if s.include?(m) # IRB::ExtendCommandBundle::EXCB recurses. - - s << m - m.constants(false).each do |c| - value = m.const_get(c) - scanner.call(value) if value.is_a?(Module) - end - end - - # FIXME: Add Pry here as well? - %i[IRB SLex RubyLex RubyToken].each do |module_name| - next unless Object.const_defined?(module_name) - - scanner.call(Object.const_get(module_name)) - end - - s.delete(IRB::Context) if defined?(IRB::Context) - s - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/input_lock.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/input_lock.rb deleted file mode 100644 index 806dd53e..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/input_lock.rb +++ /dev/null @@ -1,129 +0,0 @@ -# frozen_string_literal: true - -class Pry - # There is one InputLock per input (such as STDIN) as two REPLs on the same - # input makes things delirious. InputLock serializes accesses to the input so - # that threads to not conflict with each other. The latest thread to request - # ownership of the input wins. - class InputLock - class Interrupt < Exception; end # rubocop:disable Lint/InheritException - - class << self - attr_accessor :input_locks - attr_accessor :global_lock - end - - self.input_locks = {} - self.global_lock = Mutex.new - - def self.for(input) - # XXX This method leaks memory, as we never unregister an input once we - # are done with it. Fortunately, the leak is tiny (or so we hope). In - # usual scenarios, we would leak the StringIO that is passed to be - # evaluated from the command line. - global_lock.synchronize do - input_locks[input] ||= Pry::InputLock.new - end - end - - def initialize - @mutex = Mutex.new - @cond = ConditionVariable.new - @owners = [] - @interruptible = false - end - - # Adds ourselves to the ownership list. The last one in the list may access - # the input through interruptible_region(). - def __with_ownership - @mutex.synchronize do - # Three cases: - # 1) There are no owners, in this case we are good to go. - # 2) The current owner of the input is not reading the input (it might - # just be evaluating some ruby that the user typed). - # The current owner will figure out that it cannot go back to reading - # the input since we are adding ourselves to the @owners list, which - # in turns makes us the current owner. - # 3) The owner of the input is in the interruptible region, reading from - # the input. It's safe to send an Interrupt exception to interrupt - # the owner. It will then proceed like in case 2). - # We wait until the owner sets the interruptible flag back - # to false, meaning that he's out of the interruptible region. - # Note that the owner may receive multiple interrupts since, but that - # should be okay (and trying to avoid it is futile anyway). - while @interruptible - @owners.last.raise Interrupt - @cond.wait(@mutex) - end - @owners << Thread.current - end - - yield - ensure - @mutex.synchronize do - # We are releasing any desire to have the input ownership by removing - # ourselves from the list. - @owners.delete(Thread.current) - - # We need to wake up the thread at the end of the @owners list, but - # sadly Ruby doesn't allow us to choose which one we wake up, so we wake - # them all up. - @cond.broadcast - end - end - - def with_ownership(&block) - # If we are in a nested with_ownership() call (nested pry context), we do nothing. - nested = @mutex.synchronize { @owners.include?(Thread.current) } - nested ? yield : __with_ownership(&block) - end - - def enter_interruptible_region - @mutex.synchronize do - # We patiently wait until we are the owner. This may happen as another - # thread calls with_ownership() because of a binding.pry happening in - # another thread. - @cond.wait(@mutex) until @owners.last == Thread.current - - # We are the legitimate owner of the input. We mark ourselves as - # interruptible, so other threads can send us an Interrupt exception - # while we are blocking from reading the input. - @interruptible = true - end - end - - def leave_interruptible_region - @mutex.synchronize do - # We check if we are still the owner, because we could have received an - # Interrupt right after the following @cond.broadcast, making us retry. - @interruptible = false if @owners.last == Thread.current - @cond.broadcast - end - rescue Interrupt - # We need to guard against a spurious interrupt delivered while we are - # trying to acquire the lock (the rescue block is no longer in our scope). - retry - end - - def interruptible_region - enter_interruptible_region - - # XXX Note that there is a chance that we get the interrupt right after - # the readline call succeeded, but we'll never know, and we will retry the - # call, discarding that piece of input. - yield - rescue Interrupt - # We were asked to back off. The one requesting the interrupt will be - # waiting on the conditional for the interruptible flag to change to false. - # Note that there can be some inefficiency, as we could immediately - # succeed in enter_interruptible_region(), even before the one requesting - # the ownership has the chance to register itself as an owner. - # To mitigate the issue, we sleep a little bit. - leave_interruptible_region - sleep 0.01 - retry - ensure - leave_interruptible_region - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/inspector.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/inspector.rb deleted file mode 100644 index 6e8a692c..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/inspector.rb +++ /dev/null @@ -1,39 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Inspector - MAP = { - "default" => { - value: Pry.config.print, - description: <<-DESCRIPTION.each_line.map(&:lstrip!) - The default Pry inspector. It has paging and color support, and uses - pretty_inspect when printing an object. - DESCRIPTION - }, - - "simple" => { - value: proc do |output, value| - begin - output.puts value.inspect - rescue RescuableException - output.puts "unknown" - end - end, - description: <<-DESCRIPTION.each_line.map(&:lstrip) - A simple inspector that uses #puts and #inspect when printing an - object. It has no pager, color, or pretty_inspect support. - DESCRIPTION - }, - - "clipped" => { - value: proc do |output, value| - output.puts Pry.view_clip(value, id: true) - end, - description: <<-DESCRIPTION.each_line.map(&:lstrip) - The clipped inspector has the same features as the 'simple' inspector - but prints large objects as a smaller string. - DESCRIPTION - } - }.freeze - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/last_exception.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/last_exception.rb deleted file mode 100644 index 4cc0f56b..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/last_exception.rb +++ /dev/null @@ -1,61 +0,0 @@ -# frozen_string_literal: true - -# -# {Pry::LastException} is a proxy class who wraps an Exception object for -# {Pry#last_exception}. it extends the exception object with methods that -# help pry commands be useful. -# -# the original exception object is not modified and method calls are forwarded -# to the wrapped exception object. -# -class Pry - class LastException < BasicObject - attr_accessor :bt_index - - def initialize(exception) - @exception = exception - @bt_index = 0 - @file, @line = bt_source_location_for(0) - end - - def method_missing(name, *args, &block) - if @exception.respond_to?(name) - @exception.public_send(name, *args, &block) - else - super - end - end - - def respond_to_missing?(name, include_all = false) - @exception.respond_to?(name, include_all) - end - - # - # @return [String] - # returns the path to a file for the current backtrace. see {#bt_index}. - # - attr_reader :file - - # - # @return [Fixnum] - # returns the line for the current backtrace. see {#bt_index}. - # - attr_reader :line - - # @return [Exception] - # returns the wrapped exception - # - def wrapped_exception - @exception - end - - def bt_source_location_for(index) - backtrace[index] =~ /(.*):(\d+)/ - [::Regexp.last_match(1), ::Regexp.last_match(2).to_i] - end - - def inc_bt_index - @bt_index = (@bt_index + 1) % backtrace.size - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/method.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/method.rb deleted file mode 100644 index c82ae355..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/method.rb +++ /dev/null @@ -1,600 +0,0 @@ -# frozen_string_literal: true - -require 'method_source' - -class Pry - class << self - # If the given object is a `Pry::Method`, return it unaltered. If it's - # anything else, return it wrapped in a `Pry::Method` instance. - def Method(obj) - if obj.is_a? Pry::Method - obj - else - Pry::Method.new(obj) - end - end - end - - # This class wraps the normal `Method` and `UnboundMethod` classes - # to provide extra functionality useful to Pry. - class Method # rubocop:disable Metrics/ClassLength - extend Helpers::BaseHelpers - extend Forwardable - - include Helpers::BaseHelpers - include Helpers::DocumentationHelpers - include CodeObject::Helpers - - class << self - # Given a string representing a method name and optionally a binding to - # search in, find and return the requested method wrapped in a - # `Pry::Method` instance. - # - # @param [String] name The name of the method to retrieve. - # @param [Binding] target The context in which to search for the method. - # @param [Hash] options - # @option options [Boolean] :instance Look for an instance method if - # `name` doesn't contain any context. - # @option options [Boolean] :methods Look for a bound/singleton method if - # `name` doesn't contain any context. - # @return [Pry::Method, nil] A `Pry::Method` instance containing the - # requested method, or `nil` if name is `nil` or no method could be - # located matching the parameters. - def from_str(name, target = TOPLEVEL_BINDING, options = {}) - if name.nil? - nil - elsif name.to_s =~ /(.+)\#(\S+)\Z/ - context = Regexp.last_match(1) - meth_name = Regexp.last_match(2) - from_module(target.eval(context), meth_name, target) - elsif name.to_s =~ /(.+)(\[\])\Z/ - context = Regexp.last_match(1) - meth_name = Regexp.last_match(2) - from_obj(target.eval(context), meth_name, target) - elsif name.to_s =~ /(.+)(\.|::)(\S+)\Z/ - context = Regexp.last_match(1) - meth_name = Regexp.last_match(3) - from_obj(target.eval(context), meth_name, target) - elsif options[:instance] - from_module(target.eval("self"), name, target) - elsif options[:methods] - from_obj(target.eval("self"), name, target) - else - from_str(name, target, instance: true) || - from_str(name, target, methods: true) - end - rescue Pry::RescuableException - nil - end - - # Given a `Binding`, try to extract the `::Method` it originated from and - # use it to instantiate a `Pry::Method`. Return `nil` if this isn't - # possible. - # - # @param [Binding] binding - # @return [Pry::Method, nil] - # - def from_binding(binding) - meth_name = binding.eval('::Kernel.__method__') - if [:__script__, nil].include?(meth_name) - nil - else - method = - begin - if Object === binding.eval('self') # rubocop:disable Style/CaseEquality - new( - Kernel.instance_method(:method) - .bind(binding.eval("self")) - .call(meth_name) - ) - else - str = 'class << self; self; end' \ - '.instance_method(::Kernel.__method__).bind(self)' - new(binding.eval(str)) - end - rescue NameError, NoMethodError # rubocop:disable Lint/ShadowedException - Disowned.new(binding.eval('self'), meth_name.to_s) - end - - if WeirdMethodLocator.weird_method?(method, binding) - WeirdMethodLocator.new(method, binding).find_method || method - else - method - end - end - end - - # In order to support 2.0 Refinements we need to look up methods - # inside the relevant Binding. - # @param [Object] obj The owner/receiver of the method. - # @param [Symbol] method_name The name of the method. - # @param [Symbol] method_type The type of method: :method or :instance_method - # @param [Binding] target The binding where the method is looked up. - # @return [Method, UnboundMethod] The 'refined' method object. - def lookup_method_via_binding( - obj, method_name, method_type, target = TOPLEVEL_BINDING - ) - Pry.current[:obj] = obj - Pry.current[:name] = method_name - receiver = obj.is_a?(Module) ? "Module" : "Kernel" - target.eval( - "::#{receiver}.instance_method(:#{method_type})" \ - ".bind(Pry.current[:obj]).call(Pry.current[:name])" - ) - ensure - Pry.current[:obj] = Pry.current[:name] = nil - end - - # Given a `Class` or `Module` and the name of a method, try to - # instantiate a `Pry::Method` containing the instance method of - # that name. Return `nil` if no such method exists. - # - # @param [Class, Module] klass - # @param [String] name - # @param [Binding] target The binding where the method is looked up. - # @return [Pry::Method, nil] - def from_class(klass, name, target = TOPLEVEL_BINDING) - new(lookup_method_via_binding(klass, name, :instance_method, target)) - rescue StandardError - nil - end - alias from_module from_class - - # Given an object and the name of a method, try to instantiate - # a `Pry::Method` containing the method of that name bound to - # that object. Return `nil` if no such method exists. - # - # @param [Object] obj - # @param [String] name - # @param [Binding] target The binding where the method is looked up. - # @return [Pry::Method, nil] - def from_obj(obj, name, target = TOPLEVEL_BINDING) - new(lookup_method_via_binding(obj, name, :method, target)) - rescue StandardError - nil - end - - # Get all of the instance methods of a `Class` or `Module` - # @param [Class,Module] klass - # @param [Boolean] include_super Whether to include methods from ancestors. - # @return [Array[Pry::Method]] - def all_from_class(klass, include_super = true) - %w[public protected private].flat_map do |visibility| - safe_send( - klass, :"#{visibility}_instance_methods", include_super - ).map do |method_name| - new( - safe_send(klass, :instance_method, method_name), - visibility: visibility.to_sym - ) - end - end - end - - # - # Get all of the methods on an `Object` - # - # @param [Object] obj - # - # @param [Boolean] include_super - # indicates whether or not to include methods from ancestors. - # - # @return [Array[Pry::Method]] - # - def all_from_obj(obj, include_super = true) - all_from_class(singleton_class_of(obj), include_super) - end - - # Get every `Class` and `Module`, in order, that will be checked when looking - # for an instance method to call on this object. - # @param [Object] obj - # @return [Array[Class, Module]] - def resolution_order(obj) - if Class === obj # rubocop:disable Style/CaseEquality - singleton_class_resolution_order(obj) + instance_resolution_order(Class) - else - klass = begin - singleton_class_of(obj) - rescue StandardError - obj.class - end - instance_resolution_order(klass) - end - end - - # Get every `Class` and `Module`, in order, that will be checked when looking - # for methods on instances of the given `Class` or `Module`. - # This does not treat singleton classes of classes specially. - # @param [Class, Module] klass - # @return [Array[Class, Module]] - def instance_resolution_order(klass) - # include klass in case it is a singleton class, - ([klass] + Pry::Method.safe_send(klass, :ancestors)).uniq - end - - def method_definition?(name, definition_line) - singleton_method_definition?(name, definition_line) || - instance_method_definition?(name, definition_line) - end - - def singleton_method_definition?(name, definition_line) - regexp = - /^define_singleton_method\(?\s*[:\"\']#{Regexp.escape(name)}| - ^def\s*self\.#{Regexp.escape(name)}/x - regexp =~ definition_line.strip - end - - def instance_method_definition?(name, definition_line) - regexp = - /^define_method\(?\s*[:\"\']#{Regexp.escape(name)}| - ^def\s*#{Regexp.escape(name)}/x - regexp =~ definition_line.strip - end - - # Get the singleton classes of superclasses that could define methods on - # the given class object, and any modules they include. - # If a module is included at multiple points in the ancestry, only - # the lowest copy will be returned. - def singleton_class_resolution_order(klass) - ancestors = Pry::Method.safe_send(klass, :ancestors) - resolution_order = ancestors.grep(Class).flat_map do |anc| - [singleton_class_of(anc), *singleton_class_of(anc).included_modules] - end - - resolution_order.reverse.uniq.reverse - Class.included_modules - end - - def singleton_class_of(obj) - class << obj; self; end - rescue TypeError # can't define singleton. Fixnum, Symbol, Float, ... - obj.class - end - end - - # Workaround for https://github.com/pry/pry/pull/2086 - def_delegators :@method, :owner, :parameters, :receiver - - # A new instance of `Pry::Method` wrapping the given `::Method`, - # `UnboundMethod`, or `Proc`. - # - # @param [::Method, UnboundMethod, Proc] method - # @param [Hash] known_info Can be used to pre-cache expensive to compute stuff. - # @return [Pry::Method] - def initialize(method, known_info = {}) - @method = method - @visibility = known_info[:visibility] - end - - # Get the name of the method as a String, regardless of the underlying - # Method#name type. - # - # @return [String] - def name - @method.name.to_s - end - - # Get the owner of the method as a Pry::Module - # @return [Pry::Module] - def wrapped_owner - @wrapped_owner ||= Pry::WrappedModule.new(owner) - end - - # Get underlying object wrapped by this Pry::Method instance - # @return [Method, UnboundMethod, Proc] - def wrapped - @method - end - - # Is the method undefined? (aka `Disowned`) - # @return [Boolean] false - def undefined? - false - end - - # Get the name of the method including the class on which it was defined. - # @example - # method(:puts).method_name - # => "Kernel.puts" - # @return [String] - def name_with_owner - "#{wrapped_owner.method_prefix}#{name}" - end - - # @return [String, nil] The source code of the method, or `nil` if it's unavailable. - def source - @source ||= case source_type - when :c - c_source - when :ruby - ruby_source - end - end - - # Update the live copy of the method's source. - def redefine(source) - Patcher.new(self).patch_in_ram source - Pry::Method(owner.instance_method(name)) - end - - # Can we get the source code for this method? - # @return [Boolean] - def source? - !!source - rescue MethodSource::SourceNotFoundError - false - end - - # @return [String, nil] The documentation for the method, or `nil` if it's - # unavailable. - def doc - @doc ||= - case source_type - when :c - info = pry_doc_info - info.docstring if info - when :ruby - get_comment_content(comment) - end - end - - # @return [Symbol] The source type of the method. The options are - # `:ruby` for Ruby methods or `:c` for methods written in C. - def source_type - source_location.nil? ? :c : :ruby - end - - # @return [String, nil] The name of the file the method is defined in, or - # `nil` if the filename is unavailable. - def source_file - if source_location.nil? - if source_type == :c - info = pry_doc_info - info.file if info - end - else - source_location.first - end - end - - # @return [Fixnum, nil] The line of code in `source_file` which begins - # the method's definition, or `nil` if that information is unavailable. - def source_line - source_location.nil? ? nil : source_location.last - end - - # @return [Range, nil] The range of lines in `source_file` which contain - # the method's definition, or `nil` if that information is unavailable. - def source_range - source_location.nil? ? nil : (source_line)..(source_line + source.lines.count - 1) - end - - # @return [Symbol] The visibility of the method. May be `:public`, - # `:protected`, or `:private`. - def visibility - @visibility ||= - if owner.public_instance_methods.any? { |m| m.to_s == name } - :public - elsif owner.protected_instance_methods.any? { |m| m.to_s == name } - :protected - elsif owner.private_instance_methods.any? { |m| m.to_s == name } - :private - else - :none - end - end - - # @return [String] A representation of the method's signature, including its - # name and parameters. Optional and "rest" parameters are marked with `*` - # and block parameters with `&`. Keyword arguments are shown with `:` - # If the parameter names are unavailable, they're given numbered names instead. - # Paraphrased from `awesome_print` gem. - def signature - if respond_to?(:parameters) - args = parameters.inject([]) do |args_array, (arg_type, name)| - name ||= (arg_type == :block ? 'block' : "arg#{args_array.size + 1}") - args_array.push( - case arg_type - when :req then name.to_s - when :opt then "#{name}=?" - when :rest then "*#{name}" - when :block then "&#{name}" - when :key then "#{name}:?" - when :keyreq then "#{name}:" - else '?' - end - ) - end - else - args = (1..arity.abs).map { |i| "arg#{i}" } - args[-1] = "*#{args[-1]}" if arity < 0 - end - - "#{name}(#{args.join(', ')})" - end - - # @return [Pry::Method, nil] The wrapped method that is called when you - # use "super" in the body of this method. - def super(times = 1) - if @method.is_a?(UnboundMethod) - sup = super_using_ancestors(Pry::Method.instance_resolution_order(owner), times) - else - sup = super_using_ancestors(Pry::Method.resolution_order(receiver), times) - sup &&= sup.bind(receiver) - end - Pry::Method.new(sup) if sup - end - - # @return [String, nil] The original name the method was defined under, - # before any aliasing, or `nil` if it can't be determined. - def original_name - return nil if source_type != :ruby - - method_name_from_first_line(source.lines.first) - end - - # @return [Boolean] Was the method defined outside a source file? - def dynamically_defined? - !!(source_file && source_file =~ /(\(.*\))|<.*>/) - end - - # @return [Boolean] Whether the method is unbound. - def unbound_method? - is_a?(::UnboundMethod) - end - - # @return [Boolean] Whether the method is bound. - def bound_method? - is_a?(::Method) - end - - # @return [Boolean] Whether the method is a singleton method. - def singleton_method? - wrapped_owner.singleton_class? - end - - # @return [Boolean] Was the method defined within the Pry REPL? - def pry_method? - source_file == Pry.eval_path - end - - # @return [Array] All known aliases for the method. - def aliases - owner = @method.owner - # Avoid using `to_sym` on {Method#name}, which returns a `String`, because - # it won't be garbage collected. - name = @method.name - - all_methods_to_compare = owner.instance_methods | owner.private_instance_methods - alias_list = all_methods_to_compare.combination(2).select do |pair| - pair.include?(name) && - owner.instance_method(pair.first) == owner.instance_method(pair.last) - end.flatten - alias_list.delete(name) - - alias_list.map(&:to_s) - end - - # @return [Boolean] Is the method definitely an alias? - def alias? - name != original_name - end - - # @return [Boolean] - def ==(other) - return other == @method if other.is_a?(Pry::Method) - - @method == other - end - - # @param [Class] klass - # @return [Boolean] - def is_a?(klass) - (klass == Pry::Method) || @method.is_a?(klass) - end - alias kind_of? is_a? - - # @param [String, Symbol] method_name - # @return [Boolean] - def respond_to?(method_name, include_all = false) - super || @method.respond_to?(method_name, include_all) - end - - # Delegate any unknown calls to the wrapped method. - def method_missing(method_name, *args, &block) - if @method.respond_to?(method_name) - @method.__send__(method_name, *args, &block) - else - super - end - end - - def respond_to_missing?(method_name, include_private = false) - @method.respond_to?(method_name) || super - end - - def comment - Pry::Code.from_file(source_file).comment_describing(source_line) - end - - private - - # @return [YARD::CodeObjects::MethodObject] - # @raise [CommandError] when the method can't be found or `pry-doc` isn't installed. - def pry_doc_info - if defined?(PryDoc) - Pry::MethodInfo.info_for(@method) || - raise( - CommandError, - "Cannot locate this method: #{name}. (source_location returns nil)" - ) - else - fail_msg = "Cannot locate this method: #{name}." - if Helpers::Platform.mri? - fail_msg += " Run `gem install pry-doc` to install" \ - " Ruby Core documentation," \ - " and `require 'pry-doc'` to load it.\n" - end - raise CommandError, fail_msg - end - end - - # @param [Class, Module] ancestors The ancestors to investigate - # @return [Method] The unwrapped super-method - def super_using_ancestors(ancestors, times = 1) - next_owner = owner - times.times do - i = ancestors.index(next_owner) + 1 - while ancestors[i] && - !(ancestors[i].method_defined?(name) || - ancestors[i].private_method_defined?(name)) - i += 1 - end - (next_owner = ancestors[i]) || (return nil) - end - - begin - safe_send(next_owner, :instance_method, name) - rescue StandardError - nil - end - end - - # @param [String] first_ln The first line of a method definition. - # @return [String, nil] - def method_name_from_first_line(first_ln) - return nil if first_ln.strip !~ /^def / - - tokens = SyntaxHighlighter.tokenize(first_ln) - tokens = tokens.tokens.each_slice(2) if tokens.respond_to?(:tokens) - tokens.each_cons(2) do |t1, t2| - if t2.last == :method || t2.last == :ident && t1 == [".", :operator] - return t2.first - end - end - - nil - end - - def c_source - info = pry_doc_info - strip_comments_from_c_code(info.source) if info && info.source - end - - def ruby_source - # Clone of `MethodSource.source_helper` that knows to use our - # hacked version of `source_location` for our input buffer for methods - # defined in `(pry)`. - file, line = *source_location - unless file - raise SourceNotFoundError, "Could not locate source for #{name_with_owner}!" - end - - begin - code = Pry::Code.from_file(file).expression_at(line) - rescue SyntaxError => e - raise MethodSource::SourceNotFoundError, e.message - end - strip_leading_whitespace(code) - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/method/disowned.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/method/disowned.rb deleted file mode 100644 index 477e596a..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/method/disowned.rb +++ /dev/null @@ -1,67 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Method - # A Disowned Method is one that's been removed from the class on which it was defined. - # - # e.g. - # class C - # def foo - # C.send(:undefine_method, :foo) - # Pry::Method.from_binding(binding) - # end - # end - # - # In this case we assume that the "owner" is the singleton class of the receiver. - # - # This occurs mainly in Sinatra applications. - class Disowned < Method - attr_reader :receiver, :name - - # Create a new Disowned method. - # - # @param [Object] receiver - # @param [String] method_name - def initialize(receiver, method_name) - @receiver = receiver - @name = method_name - @method = nil - end - - # Is the method undefined? (aka `Disowned`) - # @return [Boolean] true - def undefined? - true - end - - # Can we get the source for this method? - # @return [Boolean] false - def source? - false - end - - # Get the hypothesized owner of the method. - # - # @return [Object] - def owner - class << receiver; self; end - end - - # Raise a more useful error message instead of trying to forward to nil. - # rubocop:disable Style/MethodMissingSuper - def method_missing(method_name, *args, &block) - if method(:name).respond_to?(method_name) - raise "Cannot call '#{method_name}' on an undef'd method." - end - - method = Object.instance_method(:method_missing).bind(self) - method.call(method_name, *args, &block) - end - # rubocop:enable Style/MethodMissingSuper - - def respond_to_missing?(method_name, include_private = false) - !method(:name).respond_to?(method_name) || super - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/method/patcher.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/method/patcher.rb deleted file mode 100644 index 656039d0..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/method/patcher.rb +++ /dev/null @@ -1,131 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Method - class Patcher - attr_accessor :method - - # rubocop:disable Style/ClassVars - @@source_cache = {} - # rubocop:enable Style/ClassVars - - def initialize(method) - @method = method - end - - def self.code_for(filename) - @@source_cache[filename] - end - - # perform the patch - def patch_in_ram(source) - if method.alias? - with_method_transaction do - redefine source - end - else - redefine source - end - end - - private - - def redefine(source) - @@source_cache[cache_key] = source - TOPLEVEL_BINDING.eval wrap(source), cache_key - end - - def cache_key - "pry-redefined(0x#{method.owner.object_id.to_s(16)}##{method.name})" - end - - # Run some code ensuring that at the end target#meth_name will not have changed. - # - # When we're redefining aliased methods we will overwrite the method at the - # unaliased name (so that super continues to work). By wrapping that code in a - # transation we make that not happen, which means that alias_method_chains, etc. - # continue to work. - # - def with_method_transaction - temp_name = "__pry_#{method.original_name}__" - method = self.method - method.owner.class_eval do - alias_method temp_name, method.original_name - yield - alias_method method.name, method.original_name - alias_method method.original_name, temp_name - end - ensure - begin - method.send(:remove_method, temp_name) - rescue StandardError - nil - end - end - - # Update the definition line so that it can be eval'd directly on the Method's - # owner instead of from the original context. - # - # In particular this takes `def self.foo` and turns it into `def foo` so that we - # don't end up creating the method on the singleton class of the singleton class - # by accident. - # - # This is necessarily done by String manipulation because we can't find out what - # syntax is needed for the argument list by ruby-level introspection. - # - # @param [String] line The original definition line. e.g. def self.foo(bar, baz=1) - # @return [String] The new definition line. e.g. def foo(bar, baz=1) - def definition_for_owner(line) - if line =~ /\Adef (?:.*?\.)?#{Regexp.escape(method.original_name)}(?=[\(\s;]|$)/ - "def #{method.original_name}#{$'}" - else - raise CommandError, - "Could not find original `def #{method.original_name}` line " \ - "to patch." - end - end - - # Apply wrap_for_owner and wrap_for_nesting successively to `source` - # @param [String] source - # @return [String] The wrapped source. - def wrap(source) - wrap_for_nesting(wrap_for_owner(source)) - end - - # Update the source code so that when it has the right owner when eval'd. - # - # This (combined with definition_for_owner) is backup for the case that - # wrap_for_nesting fails, to ensure that the method will stil be defined in - # the correct place. - # - # @param [String] source The source to wrap - # @return [String] - def wrap_for_owner(source) - Pry.current[:pry_owner] = method.owner - owner_source = definition_for_owner(source) - visibility_fix = "#{method.visibility} #{method.name.to_sym.inspect}" - "Pry.current[:pry_owner].class_eval do; #{owner_source}\n#{visibility_fix}\nend" - end - - # Update the new source code to have the correct Module.nesting. - # - # This method uses syntactic analysis of the original source file to determine - # the new nesting, so that we can tell the difference between: - # - # class A; def self.b; end; end - # class << A; def b; end; end - # - # The resulting code should be evaluated in the TOPLEVEL_BINDING. - # - # @param [String] source The source to wrap. - # @return [String] - def wrap_for_nesting(source) - nesting = Pry::Code.from_file(method.source_file).nesting_at(method.source_line) - - (nesting + [source] + nesting.map { "end" } + [""]).join(";") - rescue Pry::Indent::UnparseableNestingError - source - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/method/weird_method_locator.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/method/weird_method_locator.rb deleted file mode 100644 index 85614aec..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/method/weird_method_locator.rb +++ /dev/null @@ -1,222 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Method - # This class is responsible for locating the *real* `Pry::Method` - # object captured by a binding. - # - # Given a `Binding` from inside a method and a 'seed' Pry::Method object, - # there are primarily two situations where the seed method doesn't match - # the Binding: - # 1. The Pry::Method is from a subclass - # 2. The Pry::Method represents a method of the same name while the original - # was renamed to something else. For 1. we search vertically up the - # inheritance chain, and for 2. we search laterally along the object's - # method table. - # - # When we locate the method that matches the Binding we wrap it in - # Pry::Method and return it, or return nil if we fail. - class WeirdMethodLocator - class << self - # Whether the given method object matches the associated binding. - # If the method object does not match the binding, then it's - # most likely not the method captured by the binding, and we - # must commence a search. - # - # @param [Pry::Method] method - # @param [Binding] binding - # @return [Boolean] - def normal_method?(method, binding) - if method && method.source_file && method.source_range - if binding.respond_to?(:source_location) - binding_file, binding_line = binding.source_location - else - binding_file = binding.eval('__FILE__') - binding_line = binding.eval('__LINE__') - end - (File.expand_path(method.source_file) == File.expand_path(binding_file)) && - method.source_range.include?(binding_line) - end - rescue StandardError - false - end - - def weird_method?(method, binding) - !normal_method?(method, binding) - end - end - - attr_accessor :method - attr_accessor :target - - # @param [Pry::Method] method The seed method. - # @param [Binding] target The Binding that captures the method - # we want to locate. - def initialize(method, target) - @method = method - @target = target - end - - # @return [Pry::Method, nil] The Pry::Method that matches the - # given binding. - def find_method - find_method_in_superclass || find_renamed_method - end - - # @return [Boolean] Whether the Pry::Method is unrecoverable - # This usually happens when the method captured by the Binding - # has been subsequently deleted. - def lost_method? - !!(find_method.nil? && renamed_method_source_location) - end - - private - - def skip_superclass_search? - target_mod = @target.eval('self').class - target_mod.ancestors.take_while { |mod| mod != target_mod }.any? - end - - def normal_method?(method) - self.class.normal_method?(method, target) - end - - def target_self - target.eval('self') - end - - def target_file - file = - if target.respond_to?(:source_location) - target.source_location.first - else - target.eval('__FILE__') - end - pry_file? ? file : File.expand_path(file) - end - - def target_line - if target.respond_to?(:source_location) - target.source_location.last - else - target.eval('__LINE__') - end - end - - def pry_file? - file = - if target.respond_to?(:source_location) - target.source_location.first - else - target.eval('__FILE__') - end - Pry.eval_path == file - end - - # it's possible in some cases that the method we find by this approach is - # a sub-method of the one we're currently in, consider: - # - # class A; def b; binding.pry; end; end - # class B < A; def b; super; end; end - # - # Given that we can normally find the source_range of methods, and that we - # know which __FILE__ and __LINE__ the binding is at, we can hope to - # disambiguate these cases. - # - # This obviously won't work if the source is unavaiable for some reason, - # or if both methods have the same __FILE__ and __LINE__. - # - # @return [Pry::Method, nil] The Pry::Method representing the - # superclass method. - def find_method_in_superclass - guess = method - return guess if skip_superclass_search? - - while guess - # needs rescue if this is a Disowned method or a C method or something... - # TODO: Fix up the exception handling so we don't need a bare rescue - return guess if normal_method?(guess) - break if guess == guess.super - - guess = guess.super - end - - # Uhoh... none of the methods in the chain had the right `__FILE__` and - # `__LINE__` due to unknown circumstances. - # TODO: we should warn the user when this happens. - nil - end - - # This is the case where the name of a method has changed - # (via alias_method) so we locate the Method object for the - # renamed method. - # - # @return [Pry::Method, nil] The Pry::Method representing the - # renamed method - def find_renamed_method - return unless valid_file?(target_file) - - alias_name = all_methods_for(target_self).find do |v| - location = target_self.method(v).source_location - location && expanded_source_location(location) == renamed_method_source_location - end - - alias_name && Pry::Method(target_self.method(alias_name)) - end - - def expanded_source_location(source_location) - return unless source_location - - if pry_file? - source_location - else - [File.expand_path(source_location.first), source_location.last] - end - end - - # Use static analysis to locate the start of the method definition. - # We have the `__FILE__` and `__LINE__` from the binding and the - # original name of the method so we search up until we find a - # def/define_method, etc defining a method of the appropriate name. - # - # @return [Array] The `source_location` of the - # renamed method - def renamed_method_source_location - if defined?(@original_method_source_location) - return @original_method_source_location - end - - source_index = lines_for_file(target_file)[0..(target_line - 1)].rindex do |v| - Pry::Method.method_definition?(method.name, v) - end - - @original_method_source_location = - source_index && [target_file, index_to_line_number(source_index)] - end - - def index_to_line_number(index) - # Pry.line_buffer is 0-indexed - pry_file? ? index : index + 1 - end - - def valid_file?(file) - (File.exist?(file) && !File.directory?(file)) || Pry.eval_path == file - end - - def lines_for_file(file) - @lines_for_file ||= {} - @lines_for_file[file] ||= if Pry.eval_path == file - Pry.line_buffer - else - File.readlines(file) - end - end - - def all_methods_for(obj) - obj.public_methods(false) + - obj.private_methods(false) + - obj.protected_methods(false) - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/object_path.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/object_path.rb deleted file mode 100644 index 28895a34..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/object_path.rb +++ /dev/null @@ -1,91 +0,0 @@ -# frozen_string_literal: true - -require 'strscan' - -class Pry - # `ObjectPath` implements the resolution of "object paths", which are strings - # that are similar to filesystem paths but meant for traversing Ruby objects. - # Examples of valid object paths include: - # - # x - # @foo/@bar - # "string"/upcase - # Pry/Method - # - # Object paths are mostly relevant in the context of the `cd` command. - # @see https://github.com/pry/pry/wiki/State-navigation - class ObjectPath - SPECIAL_TERMS = ["", "::", ".", ".."].freeze - - # @param [String] path_string The object path expressed as a string. - # @param [Array] current_stack The current state of the binding - # stack. - def initialize(path_string, current_stack) - @path_string = path_string - @current_stack = current_stack - end - - # @return [Array] a new stack resulting from applying the given - # path to the current stack. - def resolve - scanner = StringScanner.new(@path_string.strip) - stack = @current_stack.dup - - loop do - begin - next_segment = "" - - loop do - # Scan for as long as we don't see a slash - next_segment += scanner.scan(%r{[^/]*}) - - if complete?(next_segment) || scanner.eos? - scanner.getch # consume the slash - break - else - next_segment += scanner.getch # append the slash - end - end - - case next_segment.chomp - when "" - stack = [stack.first] - when "::" - stack.push(TOPLEVEL_BINDING) - when "." - next - when ".." - stack.pop unless stack.size == 1 - else - stack.push(Pry.binding_for(stack.last.eval(next_segment))) - end - rescue RescuableException => e - return handle_failure(next_segment, e) - end - - break if scanner.eos? - end - - stack - end - - private - - def complete?(segment) - SPECIAL_TERMS.include?(segment) || Pry::Code.complete_expression?(segment) - end - - def handle_failure(context, err) - msg = [ - "Bad object path: #{@path_string.inspect}", - "Failed trying to resolve: #{context.inspect}", - "Exception: #{err.inspect}" - ].join("\n") - - command_error = CommandError.new(msg) - command_error.set_backtrace(err.backtrace) - - raise command_error - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/output.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/output.rb deleted file mode 100644 index 46fb11dc..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/output.rb +++ /dev/null @@ -1,136 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Output - # @return [Array] default terminal screen size [rows, cols] - DEFAULT_SIZE = [27, 80].freeze - - attr_reader :pry_instance - - def initialize(pry_instance) - @output = pry_instance.config.output - @color = pry_instance.config.color - end - - def puts(*objs) - return print "\n" if objs.empty? - - objs.each do |obj| - if (ary = Array.try_convert(obj)) - puts(*ary) - else - print "#{obj.to_s.chomp}\n" - end - end - nil - end - - def print(*objs) - objs.each do |obj| - @output.print decolorize_maybe(obj.to_s) - end - nil - end - alias << print - alias write print - - def tty? - @output.respond_to?(:tty?) && @output.tty? - end - - def method_missing(method_name, *args, &block) - if @output.respond_to?(method_name) - @output.__send__(method_name, *args, &block) - else - super - end - end - - def respond_to_missing?(method_name, include_private = false) - @output.respond_to?(method_name, include_private) - end - - def decolorize_maybe(str) - return str if @color - - Pry::Helpers::Text.strip_color(str) - end - - # @return [Array] a pair of [rows, columns] which gives the size of - # the window. If the window size cannot be determined, the default value. - def size - rows, cols = actual_screen_size - return [rows.to_i, cols.to_i] if rows.to_i != 0 && cols.to_i != 0 - - DEFAULT_SIZE - end - - # Return a screen width or the default if that fails. - def width - size.last - end - - # Return a screen height or the default if that fails. - def height - size.first - end - - private - - def actual_screen_size - # The best way, if possible (requires non-jruby >=1.9 or io-console gem). - io_console_size || - # Fall back to the old standby, though it might be stale. - env_size || - # Fall further back, though this one is also out of date without - # something calling Readline.set_screen_size. - readline_size || - # Windows users can otherwise run ansicon and get a decent answer. - ansicon_env_size - end - - def io_console_size - return if Pry::Helpers::Platform.jruby? - - begin - require 'io/console' - - begin - @output.winsize if tty? && @output.respond_to?(:winsize) - rescue Errno::EOPNOTSUPP # rubocop:disable Lint/HandleExceptions - # Output is probably a socket, which doesn't support #winsize. - end - rescue LoadError # rubocop:disable Lint/HandleExceptions - # They probably don't have the io/console stdlib or the io-console gem. - # We'll keep trying. - end - end - - def env_size - size = [Pry::Env['LINES'] || Pry::Env['ROWS'], Pry::Env['COLUMNS']] - size if nonzero_column?(size) - end - - def readline_size - return unless defined?(Readline) && Readline.respond_to?(:get_screen_size) - - size = Readline.get_screen_size - size if nonzero_column?(size) - rescue Java::JavaLang::NullPointerException - # This rescue won't happen on jrubies later than: - # https://github.com/jruby/jruby/pull/436 - nil - end - - def ansicon_env_size - return unless Pry::Env['ANSICON'] =~ /\((.*)x(.*)\)/ - - size = [Regexp.last_match(2), Regexp.last_match(1)] - size if nonzero_column?(size) - end - - def nonzero_column?(size) - size[1].to_i > 0 - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/pager.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/pager.rb deleted file mode 100644 index e6e40898..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/pager.rb +++ /dev/null @@ -1,249 +0,0 @@ -# frozen_string_literal: true - -# A pager is an `IO`-like object that accepts text and either prints it -# immediately, prints it one page at a time, or streams it to an external -# program to print one page at a time. -class Pry - class Pager - class StopPaging < StandardError - end - - attr_reader :pry_instance - - def initialize(pry_instance) - @pry_instance = pry_instance - end - - # Send the given text through the best available pager (if - # `Pry.config.pager` is enabled). If you want to send text through in - # chunks as you generate it, use `open` to get a writable object - # instead. - # - # @param [String] text - # Text to run through a pager. - # - def page(text) - open do |pager| - pager << text - end - end - - # Yields a pager object (`NullPager`, `SimplePager`, or `SystemPager`). - # All pagers accept output with `#puts`, `#print`, `#write`, and `#<<`. - def open - pager = best_available - yield pager - rescue StopPaging # rubocop:disable Lint/HandleExceptions - ensure - pager.close if pager - end - - private - - def enabled? - !!@enabled - end - - attr_reader :output - - # Return an instance of the "best" available pager class -- - # `SystemPager` if possible, `SimplePager` if `SystemPager` isn't - # available, and `NullPager` if the user has disabled paging. All - # pagers accept output with `#puts`, `#print`, `#write`, and `#<<`. You - # must call `#close` when you're done writing output to a pager, and - # you must rescue `Pry::Pager::StopPaging`. These requirements can be - # avoided by using `.open` instead. - def best_available - if !pry_instance.config.pager - NullPager.new(pry_instance.output) - elsif !SystemPager.available? || Helpers::Platform.jruby? - SimplePager.new(pry_instance.output) - else - SystemPager.new(pry_instance.output) - end - end - - # `NullPager` is a "pager" that actually just prints all output as it - # comes in. Used when `Pry.config.pager` is false. - class NullPager - def initialize(out) - @out = out - end - - def puts(str) - print "#{str.chomp}\n" - end - - def print(str) - write str - end - alias << print - - def write(str) - @out.write str - end - - def close; end - - private - - def height - @height ||= @out.height - end - - def width - @width ||= @out.width - end - end - - # `SimplePager` is a straightforward pure-Ruby pager. We use it on - # JRuby and when we can't find a usable external pager. - class SimplePager < NullPager - def initialize(*) - super - @tracker = PageTracker.new(height - 3, width) - end - - def write(str) - str.lines.each do |line| - @out.print line - @tracker.record line - - next unless @tracker.page? - - @out.print "\n" - @out.print "\e[0m" - @out.print " --- Press enter to continue " \ - "( q to break ) --- \n" - raise StopPaging if Readline.readline("").chomp == "q" - - @tracker.reset - end - end - end - - # `SystemPager` buffers output until we're pretty sure it's at least a - # page long, then invokes an external pager and starts streaming output - # to it. If `#close` is called before then, it just prints out the - # buffered content. - class SystemPager < NullPager - def self.default_pager - pager = Pry::Env['PAGER'] || '' - - # Default to less, and make sure less is being passed the correct - # options - pager = "less -R -F -X" if pager.strip.empty? || pager =~ /^less\b/ - - pager - end - - @system_pager = nil - - def self.available? - if @system_pager.nil? - @system_pager = - begin - pager_executable = default_pager.split(' ').first - if Helpers::Platform.windows? || Helpers::Platform.windows_ansi? - `where /Q #{pager_executable}` - else - `which #{pager_executable}` - end - $CHILD_STATUS.success? - rescue StandardError - false - end - else - @system_pager - end - end - - def initialize(*) - super - @tracker = PageTracker.new(height, width) - @buffer = "" - @pager = nil - end - - def write(str) - if invoked_pager? - write_to_pager str - else - @tracker.record str - @buffer += str - - write_to_pager @buffer if @tracker.page? - end - rescue Errno::EPIPE - raise StopPaging - end - - def close - if invoked_pager? - pager.close - else - @out.puts @buffer - end - end - - private - - def write_to_pager(text) - pager.write @out.decolorize_maybe(text) - end - - def invoked_pager? - @pager - end - - def pager - @pager ||= IO.popen(self.class.default_pager, 'w') - end - end - - # `PageTracker` tracks output to determine whether it's likely to take - # up a whole page. This doesn't need to be super precise, but we can - # use it for `SimplePager` and to avoid invoking the system pager - # unnecessarily. - # - # One simplifying assumption is that we don't need `#page?` to return - # `true` on the basis of an incomplete line. Long lines should be - # counted as multiple lines, but we don't have to transition from - # `false` to `true` until we see a newline. - class PageTracker - def initialize(rows, cols) - @rows = rows - @cols = cols - reset - end - - def record(str) - str.lines.each do |line| - if line.end_with? "\n" - @row += ((@col + line_length(line) - 1) / @cols) + 1 - @col = 0 - else - @col += line_length(line) - end - end - end - - def page? - @row >= @rows - end - - def reset - @row = 0 - @col = 0 - end - - private - - # Approximation of the printable length of a given line, without the - # newline and without ANSI color codes. - def line_length(line) - line.chomp.gsub(/\e\[[\d;]*m/, '').length - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/prompt.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/prompt.rb deleted file mode 100644 index 656e4e2e..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/prompt.rb +++ /dev/null @@ -1,214 +0,0 @@ -# frozen_string_literal: true - -class Pry - # Prompt represents the Pry prompt, which can be used with Readline-like - # libraries. It defines a few default prompts (default prompt, simple prompt, - # etc) and also provides an API for adding and implementing custom prompts. - # - # @example Registering a new Pry prompt - # Pry::Prompt.add( - # :ipython, - # 'IPython-like prompt', [':', '...:'] - # ) do |_context, _nesting, pry_instance, sep| - # sep == ':' ? "In [#{pry_instance.input_ring.count}]: " : ' ...: ' - # end - # - # # Produces: - # # In [3]: def foo - # # ...: puts 'foo' - # # ...: end - # # => :foo - # # In [4]: - # - # @example Manually instantiating the Prompt class - # prompt_procs = [ - # proc { '#{rand(1)}>" }, - # proc { "#{('a'..'z').to_a.sample}*" } - # ] - # prompt = Pry::Prompt.new( - # :random, - # 'Random number or letter prompt.', - # prompt_procs - # ) - # prompt.wait_proc.call(...) #=> - # prompt.incomplete_proc.call(...) - # - # @since v0.11.0 - # @api public - class Prompt - # A Hash that holds all prompts. The keys of the Hash are prompt - # names, the values are Hash instances of the format {:description, :value}. - @prompts = {} - - class << self - # Retrieves a prompt. - # - # @example - # Prompt[:my_prompt] - # - # @param [Symbol] name The name of the prompt you want to access - # @return [Hash{Symbol=>Object}] - # @since v0.12.0 - def [](name) - @prompts[name.to_s] - end - - # @return [Hash{Symbol=>Hash}] the duplicate of the internal prompts hash - # @note Use this for read-only operations - # @since v0.12.0 - def all - @prompts.dup - end - - # Adds a new prompt to the prompt hash. - # - # @param [Symbol] name - # @param [String] description - # @param [Array] separators The separators to differentiate - # between prompt modes (default mode and class/method definition mode). - # The Array *must* have a size of 2. - # @yield [context, nesting, pry_instance, sep] - # @yieldparam context [Object] the context where Pry is currently in - # @yieldparam nesting [Integer] whether the context is nested - # @yieldparam pry_instance [Pry] the Pry instance - # @yieldparam separator [String] separator string - # @return [nil] - # @raise [ArgumentError] if the size of `separators` is not 2 - # @raise [ArgumentError] if `prompt_name` is already occupied - # @since v0.12.0 - def add(name, description = '', separators = %w[> *]) - name = name.to_s - - unless separators.size == 2 - raise ArgumentError, "separators size must be 2, given #{separators.size}" - end - - if @prompts.key?(name) - raise ArgumentError, "the '#{name}' prompt was already added" - end - - @prompts[name] = new( - name, - description, - separators.map do |sep| - proc do |context, nesting, pry_instance| - yield(context, nesting, pry_instance, sep) - end - end - ) - - nil - end - end - - # @return [String] - attr_reader :name - - # @return [String] - attr_reader :description - - # @return [Array] the array of procs that hold - # `[wait_proc, incomplete_proc]` - attr_reader :prompt_procs - - # @param [String] name - # @param [String] description - # @param [Array] prompt_procs - def initialize(name, description, prompt_procs) - @name = name - @description = description - @prompt_procs = prompt_procs - end - - # @return [Proc] the proc which builds the wait prompt (`>`) - def wait_proc - @prompt_procs.first - end - - # @return [Proc] the proc which builds the prompt when in the middle of an - # expression such as open method, etc. (`*`) - def incomplete_proc - @prompt_procs.last - end - - # @deprecated Use a `Pry::Prompt` instance directly - def [](key) - key = key.to_s - if %w[name description].include?(key) - Pry::Warning.warn( - "`Pry::Prompt[:#{@name}][:#{key}]` is deprecated. " \ - "Use `#{self.class}##{key}` instead" - ) - public_send(key) - elsif key.to_s == 'value' - Pry::Warning.warn( - "`#{self.class}[:#{@name}][:value]` is deprecated. Use " \ - "`#{self.class}#prompt_procs` instead or an instance of " \ - "`#{self.class}` directly" - ) - @prompt_procs - end - end - - add( - :default, - "The default Pry prompt. Includes information about the current expression \n" \ - "number, evaluation context, and nesting level, plus a reminder that you're \n" \ - 'using Pry.' - ) do |context, nesting, pry_instance, sep| - format( - "[%s] %s(%s)%s%s ", - in_count: pry_instance.input_ring.count, - name: pry_instance.config.prompt_name, - context: Pry.view_clip(context), - nesting: (nesting > 0 ? ":#{nesting}" : ''), - separator: sep - ) - end - - add( - :simple, - "A simple `>>`.", - ['>> ', ' | '] - ) do |_, _, _, sep| - sep - end - - add( - :nav, - "A prompt that displays the binding stack as a path and includes information \n" \ - "about #{Helpers::Text.bold('_in_')} and #{Helpers::Text.bold('_out_')}.", - %w[> *] - ) do |_context, _nesting, pry_instance, sep| - tree = pry_instance.binding_stack.map { |b| Pry.view_clip(b.eval('self')) } - format( - "[%s] (%s) %s: %s%s ", - in_count: pry_instance.input_ring.count, - name: pry_instance.config.prompt_name, - tree: tree.join(' / '), - stack_size: pry_instance.binding_stack.size - 1, - separator: sep - ) - end - - add( - :shell, - 'A prompt that displays `$PWD` as you change it.', - %w[$ *] - ) do |context, _nesting, pry_instance, sep| - format( - "%s %s:%s %s ", - name: pry_instance.config.prompt_name, - context: Pry.view_clip(context), - pwd: Dir.pwd, - separator: sep - ) - end - - add( - :none, - 'Wave goodbye to the Pry prompt.', - Array.new(2) - ) { '' } - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/pry_class.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/pry_class.rb deleted file mode 100644 index f5f8db6a..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/pry_class.rb +++ /dev/null @@ -1,396 +0,0 @@ -# frozen_string_literal: true - -require 'stringio' -require 'pathname' - -class Pry - LOCAL_RC_FILE = "./.pryrc".freeze - - # @return [Boolean] true if this Ruby supports safe levels and tainting, - # to guard against using deprecated or unsupported features - HAS_SAFE_LEVEL = ( - RUBY_ENGINE == 'ruby' && - Gem::Version.new(RUBY_VERSION) < Gem::Version.new('2.7') - ) - - class << self - extend Pry::Forwardable - attr_accessor :custom_completions - attr_accessor :current_line - attr_accessor :line_buffer - attr_accessor :eval_path - attr_accessor :cli - attr_accessor :quiet - attr_accessor :last_internal_error - attr_accessor :config - - def_delegators( - :@config, :input, :input=, :output, :output=, :commands, - :commands=, :print, :print=, :exception_handler, :exception_handler=, - :hooks, :hooks=, :color, :color=, :pager, :pager=, :editor, :editor=, - :memory_size, :memory_size=, :extra_sticky_locals, :extra_sticky_locals=, - :prompt, :prompt=, :history, :history= - ) - - # - # @example - # Pry.configure do |config| - # config.eager_load! # optional - # config.input = # .. - # config.foo = 2 - # end - # - # @yield [config] - # Yields a block with {Pry.config} as its argument. - # - def configure - yield config - end - end - - # - # @return [main] - # returns the special instance of Object, "main". - # - def self.main - @main ||= TOPLEVEL_BINDING.eval "self" - end - - # - # @return [Pry::Config] - # Returns a value store for an instance of Pry running on the current thread. - # - def self.current - Thread.current[:__pry__] ||= {} - end - - # Load the given file in the context of `Pry.toplevel_binding` - # @param [String] file The unexpanded file path. - def self.load_file_at_toplevel(file) - toplevel_binding.eval(File.read(file), file) - rescue RescuableException => e - puts "Error loading #{file}: #{e}\n#{e.backtrace.first}" - end - - # Load RC files if appropriate This method can also be used to reload the - # files if they have changed. - def self.load_rc_files - rc_files_to_load.each do |file| - critical_section do - load_file_at_toplevel(file) - end - end - end - - # Load the local RC file (./.pryrc) - def self.rc_files_to_load - files = [] - files << Pry.config.rc_file if Pry.config.rc_file && Pry.config.should_load_rc - files << LOCAL_RC_FILE if Pry.config.should_load_local_rc - files.map { |file| real_path_to(file) }.compact.uniq - end - - # Expand a file to its canonical name (following symlinks as appropriate) - def self.real_path_to(file) - Pathname.new(File.expand_path(file)).realpath.to_s - rescue Errno::ENOENT, Errno::EACCES - nil - end - - # Load any Ruby files specified with the -r flag on the command line. - def self.load_requires - Pry.config.requires.each do |file| - require file - end - end - - # Trap interrupts on jruby, and make them behave like MRI so we can - # catch them. - def self.load_traps - trap('INT') { raise Interrupt } - end - - def self.load_win32console - require 'win32console' - # The mswin and mingw versions of pry require win32console, so this should - # only fail on jruby (where win32console doesn't work). - # Instead we'll recommend ansicon, which does. - rescue LoadError - warn <<-WARNING if Pry.config.windows_console_warning -For a better Pry experience on Windows, please use ansicon: - https://github.com/adoxa/ansicon -If you use an alternative to ansicon and don't want to see this warning again, -you can add "Pry.config.windows_console_warning = false" to your pryrc. - WARNING - end - - # Do basic setup for initial session including: loading pryrc, plugins, - # requires, and history. - def self.initial_session_setup - return unless initial_session? - - @initial_session = false - - # note these have to be loaded here rather than in _pry_ as - # we only want them loaded once per entire Pry lifetime. - load_rc_files - end - - def self.final_session_setup - return if @session_finalized - - @session_finalized = true - load_requires if Pry.config.should_load_requires - load_history if Pry.config.history_load - load_traps if Pry.config.should_trap_interrupts - load_win32console if Helpers::Platform.windows? && !Helpers::Platform.windows_ansi? - end - - # Start a Pry REPL. - # This method also loads `pryrc` as necessary the first time it is invoked. - # @param [Object, Binding] target The receiver of the Pry session - # @param [Hash] options - # @option options (see Pry#initialize) - # @example - # Pry.start(Object.new, :input => MyInput.new) - def self.start(target = nil, options = {}) - return if Pry::Env['DISABLE_PRY'] - if Pry::Env['FAIL_PRY'] - raise 'You have FAIL_PRY set to true, which results in Pry calls failing' - end - - options = options.to_hash - - if in_critical_section? - output.puts "ERROR: Pry started inside Pry." - output.puts "This can happen if you have a binding.pry inside a #to_s " \ - "or #inspect function." - return - end - - unless mutex_available? - output.puts "ERROR: Unable to obtain mutex lock." - output.puts "This can happen if binding.pry is called from a signal handler" - return - end - - options[:target] = Pry.binding_for(target || toplevel_binding) - initial_session_setup - final_session_setup - - # Unless we were given a backtrace, save the current one - if options[:backtrace].nil? - options[:backtrace] = caller - - # If Pry was started via `binding.pry`, elide that from the backtrace - if options[:backtrace].first =~ /pry.*core_extensions.*pry/ - options[:backtrace].shift - end - end - - driver = options[:driver] || Pry::REPL - - # Enter the matrix - driver.start(options) - rescue Pry::TooSafeException - puts "ERROR: Pry cannot work with $SAFE > 0" - raise - end - - # Execute the file through the REPL loop, non-interactively. - # @param [String] file_name File name to load through the REPL. - def self.load_file_through_repl(file_name) - REPLFileLoader.new(file_name).load - end - - # - # An inspector that clips the output to `max_length` chars. - # In case of > `max_length` chars the `# notation is used. - # - # @param [Object] obj - # The object to view. - # - # @param [Hash] options - # @option options [Integer] :max_length (60) - # The maximum number of chars before clipping occurs. - # - # @option options [Boolean] :id (false) - # Boolean to indicate whether or not a hex reprsentation of the object ID - # is attached to the return value when the length of inspect is greater than - # value of `:max_length`. - # - # @return [String] - # The string representation of `obj`. - # - def self.view_clip(obj, options = {}) - max = options.fetch :max_length, 60 - id = options.fetch :id, false - if obj.is_a?(Module) && obj.name.to_s != "" && obj.name.to_s.length <= max - obj.name.to_s - elsif Pry.main == obj - # Special-case to support jruby. Fixed as of: - # https://github.com/jruby/jruby/commit/d365ebd309cf9df3dde28f5eb36ea97056e0c039 - # we can drop in the future. - obj.to_s - # rubocop:disable Style/CaseEquality - elsif Pry.config.prompt_safe_contexts.any? { |v| v === obj } && - obj.inspect.length <= max - # rubocop:enable Style/CaseEquality - - obj.inspect - elsif id - format("#<#{obj.class}:0x%x>", id: obj.object_id << 1) - else - "#<#{obj.class}>" - end - rescue RescuableException - "unknown" - end - - # Load Readline history if required. - def self.load_history - Pry.history.load - end - - # @return [Boolean] Whether this is the first time a Pry session has - # been started since loading the Pry class. - def self.initial_session? - @initial_session - end - - # Run a Pry command from outside a session. The commands available are - # those referenced by `Pry.config.commands` (the default command set). - # @param [String] command_string The Pry command (including arguments, - # if any). - # @param [Hash] options Optional named parameters. - # @return [nil] - # @option options [Object, Binding] :target The object to run the - # command under. Defaults to `TOPLEVEL_BINDING` (main). - # @option options [Boolean] :show_output Whether to show command - # output. Defaults to true. - # @example Run at top-level with no output. - # Pry.run_command "ls" - # @example Run under Pry class, returning only public methods. - # Pry.run_command "ls -m", :target => Pry - # @example Display command output. - # Pry.run_command "ls -av", :show_output => true - def self.run_command(command_string, options = {}) - options = { - target: TOPLEVEL_BINDING, - show_output: true, - output: Pry.config.output, - commands: Pry.config.commands - }.merge!(options) - - # :context for compatibility with <= 0.9.11.4 - target = options[:context] || options[:target] - output = options[:show_output] ? options[:output] : StringIO.new - - pry = Pry.new(output: output, target: target, commands: options[:commands]) - pry.eval command_string - nil - end - - def self.auto_resize! - Pry.config.input # by default, load Readline - - if !defined?(Readline) || Pry.config.input != Readline - warn "Sorry, you must be using Readline for Pry.auto_resize! to work." - return - end - - if Readline::VERSION =~ /edit/i - warn(<<-WARN) -Readline version #{Readline::VERSION} detected - will not auto_resize! correctly. - For the fix, use GNU Readline instead: - https://github.com/guard/guard/wiki/Add-Readline-support-to-Ruby-on-Mac-OS-X - WARN - return - end - - trap :WINCH do - begin - Readline.set_screen_size(*output.size) - rescue StandardError => e - warn "\nPry.auto_resize!'s Readline.set_screen_size failed: #{e}" - end - begin - Readline.refresh_line - rescue StandardError => e - warn "\nPry.auto_resize!'s Readline.refresh_line failed: #{e}" - end - end - end - - # Set all the configurable options back to their default values - def self.reset_defaults - @initial_session = true - @session_finalized = nil - - self.config = Pry::Config.new - self.cli = false - self.current_line = 1 - self.line_buffer = [""] - self.eval_path = "(pry)" - end - - # Basic initialization. - def self.init - reset_defaults - end - - # Return a `Binding` object for `target` or return `target` if it is - # already a `Binding`. - # In the case where `target` is top-level then return `TOPLEVEL_BINDING` - # @param [Object] target The object to get a `Binding` object for. - # @return [Binding] The `Binding` object. - def self.binding_for(target) - return target if Binding === target # rubocop:disable Style/CaseEquality - return TOPLEVEL_BINDING if Pry.main == target - - target.__binding__ - end - - def self.toplevel_binding - unless defined?(@toplevel_binding) && @toplevel_binding - # Grab a copy of the TOPLEVEL_BINDING without any local variables. - # This binding has a default definee of Object, and new methods are - # private (just as in TOPLEVEL_BINDING). - TOPLEVEL_BINDING.eval <<-RUBY - def self.__pry__ - binding - end - Pry.toplevel_binding = __pry__ - class << self; undef __pry__; end - RUBY - end - @toplevel_binding.eval('private') - @toplevel_binding - end - - class << self - attr_writer :toplevel_binding - end - - def self.in_critical_section? - Thread.current[:pry_critical_section] ||= 0 - Thread.current[:pry_critical_section] > 0 - end - - def self.critical_section - Thread.current[:pry_critical_section] ||= 0 - Thread.current[:pry_critical_section] += 1 - yield - ensure - Thread.current[:pry_critical_section] -= 1 - end - - def self.mutex_available? - Mutex.new.synchronize { true } - rescue ThreadError - false - end - private_class_method :mutex_available? -end - -Pry.init diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/pry_instance.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/pry_instance.rb deleted file mode 100644 index c66c607e..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/pry_instance.rb +++ /dev/null @@ -1,701 +0,0 @@ -# frozen_string_literal: true - -require 'method_source' -require 'ostruct' - -## -# Pry is a powerful alternative to the standard IRB shell for Ruby. It -# features syntax highlighting, a flexible plugin architecture, runtime -# invocation and source and documentation browsing. -# -# Pry can be started similar to other command line utilities by simply running -# the following command: -# -# pry -# -# Once inside Pry you can invoke the help message: -# -# help -# -# This will show a list of available commands and their usage. For more -# information about Pry you can refer to the following resources: -# -# * https://pry.github.io -# * https://github.com/pry/pry -# * the IRC channel, which is #pry on the Freenode network -# - -# rubocop:disable Metrics/ClassLength -class Pry - extend Pry::Forwardable - - attr_accessor :binding_stack - attr_accessor :custom_completions - attr_accessor :eval_string - attr_accessor :backtrace - attr_accessor :suppress_output - attr_accessor :last_result - attr_accessor :last_file - attr_accessor :last_dir - - attr_reader :last_exception - attr_reader :exit_value - - # @since v0.12.0 - attr_reader :input_ring - - # @since v0.12.0 - attr_reader :output_ring - - attr_reader :config - - def_delegators( - :@config, :input, :input=, :output, :output=, :commands, - :commands=, :print, :print=, :exception_handler, :exception_handler=, - :hooks, :hooks=, :color, :color=, :pager, :pager=, :editor, :editor=, - :memory_size, :memory_size=, :extra_sticky_locals, :extra_sticky_locals= - ) - - EMPTY_COMPLETIONS = [].freeze - - # Create a new {Pry} instance. - # @param [Hash] options - # @option options [#readline] :input - # The object to use for input. - # @option options [#puts] :output - # The object to use for output. - # @option options [Pry::CommandBase] :commands - # The object to use for commands. - # @option options [Hash] :hooks - # The defined hook Procs. - # @option options [Pry::Prompt] :prompt - # The array of Procs to use for prompts. - # @option options [Proc] :print - # The Proc to use for printing return values. - # @option options [Boolean] :quiet - # Omit the `whereami` banner when starting. - # @option options [Array] :backtrace - # The backtrace of the session's `binding.pry` line, if applicable. - # @option options [Object] :target - # The initial context for this session. - def initialize(options = {}) - @binding_stack = [] - @indent = Pry::Indent.new(self) - @eval_string = ''.dup - @backtrace = options.delete(:backtrace) || caller - target = options.delete(:target) - @config = self.class.config.merge(options) - push_prompt(config.prompt) - @input_ring = Pry::Ring.new(config.memory_size) - @output_ring = Pry::Ring.new(config.memory_size) - @custom_completions = config.command_completions - set_last_result nil - @input_ring << nil - push_initial_binding(target) - exec_hook(:when_started, target, options, self) - @prompt_warn = false - end - - # This is the prompt at the top of the prompt stack. - # @return [Pry::Prompt] the current prompt - def prompt - prompt_stack.last - end - - # Sets the Pry prompt. - # @param [Pry::Prompt] new_prompt - # @return [void] - def prompt=(new_prompt) - if prompt_stack.empty? - push_prompt new_prompt - else - prompt_stack[-1] = new_prompt - end - end - - # Initialize this instance by pushing its initial context into the binding - # stack. If no target is given, start at the top level. - def push_initial_binding(target = nil) - push_binding(target || Pry.toplevel_binding) - end - - # The currently active `Binding`. - # @return [Binding] The currently active `Binding` for the session. - def current_binding - binding_stack.last - end - alias current_context current_binding # support previous API - - # Push a binding for the given object onto the stack. If this instance is - # currently stopped, mark it as usable again. - def push_binding(object) - @stopped = false - binding_stack << Pry.binding_for(object) - end - - # - # Generate completions. - # - # @param [String] str - # What the user has typed so far - # - # @return [Array] - # Possible completions - # - def complete(str) - return EMPTY_COMPLETIONS unless config.completer - - Pry.critical_section do - completer = config.completer.new(config.input, self) - completer.call( - str, - target: current_binding, - custom_completions: custom_completions.call.push(*sticky_locals.keys) - ) - end - end - - # - # Injects a local variable into the provided binding. - # - # @param [String] name - # The name of the local to inject. - # - # @param [Object] value - # The value to set the local to. - # - # @param [Binding] binding - # The binding to set the local on. - # - # @return [Object] - # The value the local was set to. - # - def inject_local(name, value, binding) - value = value.is_a?(Proc) ? value.call : value - if binding.respond_to?(:local_variable_set) - binding.local_variable_set name, value - else # < 2.1 - begin - Pry.current[:pry_local] = value - binding.eval "#{name} = ::Pry.current[:pry_local]" - ensure - Pry.current[:pry_local] = nil - end - end - end - - undef :memory_size if method_defined? :memory_size - # @return [Integer] The maximum amount of objects remembered by the inp and - # out arrays. Defaults to 100. - def memory_size - @output_ring.max_size - end - - undef :memory_size= if method_defined? :memory_size= - def memory_size=(size) - @input_ring = Pry::Ring.new(size) - @output_ring = Pry::Ring.new(size) - end - - # Inject all the sticky locals into the current binding. - def inject_sticky_locals! - sticky_locals.each_pair do |name, value| - inject_local(name, value, current_binding) - end - end - - # Add a sticky local to this Pry instance. - # A sticky local is a local that persists between all bindings in a session. - # @param [Symbol] name The name of the sticky local. - # @yield The block that defines the content of the local. The local - # will be refreshed at each tick of the repl loop. - def add_sticky_local(name, &block) - config.extra_sticky_locals[name] = block - end - - def sticky_locals - { - _in_: input_ring, - _out_: output_ring, - pry_instance: self, - _ex_: last_exception && last_exception.wrapped_exception, - _file_: last_file, - _dir_: last_dir, - _: proc { last_result }, - __: proc { output_ring[-2] } - }.merge(config.extra_sticky_locals) - end - - # Reset the current eval string. If the user has entered part of a multiline - # expression, this discards that input. - def reset_eval_string - @eval_string = ''.dup - end - - # Pass a line of input to Pry. - # - # This is the equivalent of `Binding#eval` but with extra Pry! - # - # In particular: - # 1. Pry commands will be executed immediately if the line matches. - # 2. Partial lines of input will be queued up until a complete expression has - # been accepted. - # 3. Output is written to `#output` in pretty colours, not returned. - # - # Once this method has raised an exception or returned false, this instance - # is no longer usable. {#exit_value} will return the session's breakout - # value if applicable. - # - # @param [String?] line The line of input; `nil` if the user types `` - # @option options [Boolean] :generated Whether this line was generated automatically. - # Generated lines are not stored in history. - # @return [Boolean] Is Pry ready to accept more input? - # @raise [Exception] If the user uses the `raise-up` command, this method - # will raise that exception. - def eval(line, options = {}) - return false if @stopped - - exit_value = nil - exception = catch(:raise_up) do - exit_value = catch(:breakout) do - handle_line(line, options) - # We use 'return !@stopped' here instead of 'return true' so that if - # handle_line has stopped this pry instance (e.g. by opening pry_instance.repl and - # then popping all the bindings) we still exit immediately. - return !@stopped - end - exception = false - end - - @stopped = true - @exit_value = exit_value - - # TODO: make this configurable? - raise exception if exception - - false - end - - # Potentially deprecated. Use `Pry::REPL.new(pry, :target => target).start` - # (If nested sessions are going to exist, this method is fine, but a goal is - # to come up with an alternative to nested sessions altogether.) - def repl(target = nil) - Pry::REPL.new(self, target: target).start - end - - def evaluate_ruby(code) - inject_sticky_locals! - exec_hook :before_eval, code, self - - result = current_binding.eval(code, Pry.eval_path, Pry.current_line) - set_last_result(result, code) - ensure - update_input_history(code) - exec_hook :after_eval, result, self - end - - # Output the result or pass to an exception handler (if result is an exception). - def show_result(result) - if last_result_is_exception? - exception_handler.call(output, result, self) - elsif should_print? - print.call(output, result, self) - end - rescue RescuableException => e - # Being uber-paranoid here, given that this exception arose because we couldn't - # serialize something in the user's program, let's not assume we can serialize - # the exception either. - begin - output.puts "(pry) output error: #{e.inspect}\n#{e.backtrace.join("\n")}" - rescue RescuableException - if last_result_is_exception? - output.puts "(pry) output error: failed to show exception" - else - output.puts "(pry) output error: failed to show result" - end - end - ensure - output.flush if output.respond_to?(:flush) - end - - # If the given line is a valid command, process it in the context of the - # current `eval_string` and binding. - # @param [String] val The line to process. - # @return [Boolean] `true` if `val` is a command, `false` otherwise - def process_command(val) - val = val.lstrip if /^\s\S/ !~ val - val = val.chomp - result = commands.process_line( - val, - target: current_binding, - output: output, - eval_string: @eval_string, - pry_instance: self, - hooks: hooks - ) - - # set a temporary (just so we can inject the value we want into eval_string) - Pry.current[:pry_cmd_result] = result - - # note that `result` wraps the result of command processing; if a - # command was matched and invoked then `result.command?` returns true, - # otherwise it returns false. - if result.command? - unless result.void_command? - # the command that was invoked was non-void (had a return value) and so we make - # the value of the current expression equal to the return value - # of the command. - @eval_string = "::Pry.current[:pry_cmd_result].retval\n" - end - true - else - false - end - end - - # Same as process_command, but outputs exceptions to `#output` instead of - # raising. - # @param [String] val The line to process. - # @return [Boolean] `true` if `val` is a command, `false` otherwise - def process_command_safely(val) - process_command(val) - rescue CommandError, - Pry::Slop::InvalidOptionError, - MethodSource::SourceNotFoundError => e - Pry.last_internal_error = e - output.puts "Error: #{e.message}" - true - end - - # Run the specified command. - # @param [String] val The command (and its params) to execute. - # @return [Pry::Command::VOID_VALUE] - # @example - # pry_instance.run_command("ls -m") - def run_command(val) - commands.process_line( - val, - eval_string: @eval_string, - target: current_binding, - pry_instance: self, - output: output - ) - Pry::Command::VOID_VALUE - end - - # Execute the specified hook. - # @param [Symbol] name The hook name to execute - # @param [*Object] args The arguments to pass to the hook - # @return [Object, Exception] The return value of the hook or the exception raised - # - # If executing a hook raises an exception, we log that and then continue sucessfully. - # To debug such errors, use the global variable $pry_hook_error, which is set as a - # result. - def exec_hook(name, *args, &block) - e_before = hooks.errors.size - hooks.exec_hook(name, *args, &block).tap do - hooks.errors[e_before..-1].each do |e| - output.puts "#{name} hook failed: #{e.class}: #{e.message}" - output.puts e.backtrace.first.to_s - output.puts "(see pry_instance.hooks.errors to debug)" - end - end - end - - # Set the last result of an eval. - # This method should not need to be invoked directly. - # @param [Object] result The result. - # @param [String] code The code that was run. - def set_last_result(result, code = "") - @last_result_is_exception = false - @output_ring << result - - self.last_result = result unless code =~ /\A\s*\z/ - end - - # Set the last exception for a session. - # @param [Exception] exception The last exception. - def last_exception=(exception) - @last_result_is_exception = true - last_exception = Pry::LastException.new(exception) - @output_ring << last_exception - @last_exception = last_exception - end - - # Update Pry's internal state after evalling code. - # This method should not need to be invoked directly. - # @param [String] code The code we just eval'd - def update_input_history(code) - # Always push to the @input_ring as the @output_ring is always pushed to. - @input_ring << code - return unless code - - Pry.line_buffer.push(*code.each_line) - Pry.current_line += code.lines.count - end - - # @return [Boolean] True if the last result is an exception that was raised, - # as opposed to simply an instance of Exception (like the result of - # Exception.new) - def last_result_is_exception? - @last_result_is_exception - end - - # Whether the print proc should be invoked. - # Currently only invoked if the output is not suppressed. - # @return [Boolean] Whether the print proc should be invoked. - def should_print? - !@suppress_output - end - - # Returns the appropriate prompt to use. - # @return [String] The prompt. - def select_prompt - object = current_binding.eval('self') - open_token = @indent.open_delimiters.last || @indent.stack.last - - c = OpenStruct.new( - object: object, - nesting_level: binding_stack.size - 1, - open_token: open_token, - session_line: Pry.history.session_line_count + 1, - history_line: Pry.history.history_line_count + 1, - expr_number: input_ring.count, - pry_instance: self, - binding_stack: binding_stack, - input_ring: input_ring, - eval_string: @eval_string, - cont: !@eval_string.empty? - ) - - Pry.critical_section do - # If input buffer is empty, then use normal prompt. Otherwise use the wait - # prompt (indicating multi-line expression). - if prompt.is_a?(Pry::Prompt) - prompt_proc = eval_string.empty? ? prompt.wait_proc : prompt.incomplete_proc - return prompt_proc.call(c.object, c.nesting_level, c.pry_instance) - end - - unless @prompt_warn - @prompt_warn = true - Kernel.warn( - "warning: setting prompt with help of " \ - "`Pry.config.prompt = [proc {}, proc {}]` is deprecated. " \ - "Use Pry::Prompt API instead" - ) - end - - # If input buffer is empty then use normal prompt - if eval_string.empty? - generate_prompt(Array(prompt).first, c) - # Otherwise use the wait prompt (indicating multi-line expression) - else - generate_prompt(Array(prompt).last, c) - end - end - end - - # Pushes the current prompt onto a stack that it can be restored from later. - # Use this if you wish to temporarily change the prompt. - # - # @example - # push_prompt(Pry::Prompt[:my_prompt]) - # - # @param [Pry::Prompt] new_prompt - # @return [Pry::Prompt] new_prompt - def push_prompt(new_prompt) - prompt_stack.push new_prompt - end - - # Pops the current prompt off of the prompt stack. If the prompt you are - # popping is the last prompt, it will not be popped. Use this to restore the - # previous prompt. - # - # @example - # pry = Pry.new(prompt: Pry::Prompt[:my_prompt1]) - # pry.push_prompt(Pry::Prompt[:my_prompt2]) - # pry.pop_prompt # => prompt2 - # pry.pop_prompt # => prompt1 - # pry.pop_prompt # => prompt1 - # - # @return [Pry::Prompt] the prompt being popped - def pop_prompt - prompt_stack.size > 1 ? prompt_stack.pop : prompt - end - - undef :pager if method_defined? :pager - # Returns the currently configured pager - # @example - # pry_instance.pager.page text - def pager - Pry::Pager.new(self) - end - - undef :output if method_defined? :output - # Returns an output device - # @example - # pry_instance.output.puts "ohai!" - def output - Pry::Output.new(self) - end - - # Raise an exception out of Pry. - # - # See Kernel#raise for documentation of parameters. - # See rb_make_exception for the inbuilt implementation. - # - # This is necessary so that the raise-up command can tell the - # difference between an exception the user has decided to raise, - # and a mistake in specifying that exception. - # - # (i.e. raise-up RunThymeError.new should not be the same as - # raise-up NameError, "unititialized constant RunThymeError") - # - def raise_up_common(force, *args) - exception = if args == [] - last_exception || RuntimeError.new - elsif args.length == 1 && args.first.is_a?(String) - RuntimeError.new(args.first) - elsif args.length > 3 - raise ArgumentError, "wrong number of arguments" - elsif !args.first.respond_to?(:exception) - raise TypeError, "exception class/object expected" - elsif args.size == 1 - args.first.exception - else - args.first.exception(args[1]) - end - - raise TypeError, "exception object expected" unless exception.is_a? Exception - - exception.set_backtrace(args.size == 3 ? args[2] : caller(1)) - - if force || binding_stack.one? - binding_stack.clear - throw :raise_up, exception - else - binding_stack.pop - raise exception - end - end - - def raise_up(*args) - raise_up_common(false, *args) - end - - def raise_up!(*args) - raise_up_common(true, *args) - end - - # Convenience accessor for the `quiet` config key. - # @return [Boolean] - def quiet? - config.quiet - end - - private - - def handle_line(line, options) - if line.nil? - config.control_d_handler.call(self) - return - end - - ensure_correct_encoding!(line) - Pry.history << line unless options[:generated] - - @suppress_output = false - inject_sticky_locals! - begin - unless process_command_safely(line) - @eval_string += "#{line.chomp}\n" if !line.empty? || !@eval_string.empty? - end - rescue RescuableException => e - self.last_exception = e - result = e - - Pry.critical_section do - show_result(result) - end - return - end - - # This hook is supposed to be executed after each line of ruby code - # has been read (regardless of whether eval_string is yet a complete expression) - exec_hook :after_read, eval_string, self - - begin - complete_expr = Pry::Code.complete_expression?(@eval_string) - rescue SyntaxError => e - output.puts e.message.gsub(/^.*syntax error, */, "SyntaxError: ") - reset_eval_string - end - - if complete_expr - if @eval_string =~ /;\Z/ || @eval_string.empty? || @eval_string =~ /\A *#.*\n\z/ - @suppress_output = true - end - - # A bug in jruby makes java.lang.Exception not rescued by - # `rescue Pry::RescuableException` clause. - # - # * https://github.com/pry/pry/issues/854 - # * https://jira.codehaus.org/browse/JRUBY-7100 - # - # Until that gets fixed upstream, treat java.lang.Exception - # as an additional exception to be rescued explicitly. - # - # This workaround has a side effect: java exceptions specified - # in `Pry.config.unrescued_exceptions` are ignored. - jruby_exceptions = [] - jruby_exceptions << Java::JavaLang::Exception if Helpers::Platform.jruby? - - begin - # Reset eval string, in case we're evaluating Ruby that does something - # like open a nested REPL on this instance. - eval_string = @eval_string - reset_eval_string - - result = evaluate_ruby(eval_string) - rescue RescuableException, *jruby_exceptions => e - # Eliminate following warning: - # warning: singleton on non-persistent Java type X - # (http://wiki.jruby.org/Persistence) - if Helpers::Platform.jruby? && e.class.respond_to?('__persistent__') - e.class.__persistent__ = true - end - self.last_exception = e - result = e - end - - Pry.critical_section do - show_result(result) - end - end - - throw(:breakout) if current_binding.nil? - end - - # Force `eval_string` into the encoding of `val`. [Issue #284] - def ensure_correct_encoding!(val) - if @eval_string.empty? && - val.respond_to?(:encoding) && - val.encoding != @eval_string.encoding - @eval_string.force_encoding(val.encoding) - end - end - - def generate_prompt(prompt_proc, conf) - if prompt_proc.arity == 1 - prompt_proc.call(conf) - else - prompt_proc.call(conf.object, conf.nesting_level, conf.pry_instance) - end - end - - # the array that the prompt stack is stored in - def prompt_stack - @prompt_stack ||= [] - end -end -# rubocop:enable Metrics/ClassLength diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/repl.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/repl.rb deleted file mode 100644 index 9a58b827..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/repl.rb +++ /dev/null @@ -1,256 +0,0 @@ -# frozen_string_literal: true - -class Pry - class REPL - extend Pry::Forwardable - def_delegators :@pry, :input, :output - - # @return [Pry] The instance of {Pry} that the user is controlling. - attr_accessor :pry - - # Instantiate a new {Pry} instance with the given options, then start a - # {REPL} instance wrapping it. - # @option options See {Pry#initialize} - def self.start(options) - new(Pry.new(options)).start - end - - # Create an instance of {REPL} wrapping the given {Pry}. - # @param [Pry] pry The instance of {Pry} that this {REPL} will control. - # @param [Hash] options Options for this {REPL} instance. - # @option options [Object] :target The initial target of the session. - def initialize(pry, options = {}) - @pry = pry - @indent = Pry::Indent.new(pry) - - @readline_output = nil - - @pry.push_binding options[:target] if options[:target] - end - - # Start the read-eval-print loop. - # @return [Object?] If the session throws `:breakout`, return the value - # thrown with it. - # @raise [Exception] If the session throws `:raise_up`, raise the exception - # thrown with it. - def start - prologue - Pry::InputLock.for(:all).with_ownership { repl } - ensure - epilogue - end - - private - - # Set up the repl session. - # @return [void] - def prologue - pry.exec_hook :before_session, pry.output, pry.current_binding, pry - - return unless pry.config.correct_indent - - # Clear the line before starting Pry. This fixes issue #566. - output.print(Helpers::Platform.windows_ansi? ? "\e[0F" : "\e[0G") - end - - # The actual read-eval-print loop. - # - # The {REPL} instance is responsible for reading and looping, whereas the - # {Pry} instance is responsible for evaluating user input and printing - # return values and command output. - # - # @return [Object?] If the session throws `:breakout`, return the value - # thrown with it. - # @raise [Exception] If the session throws `:raise_up`, raise the exception - # thrown with it. - def repl - loop do - case val = read - when :control_c - output.puts "" - pry.reset_eval_string - when :no_more_input - output.puts "" if output.tty? - break - else - output.puts "" if val.nil? && output.tty? - return pry.exit_value unless pry.eval(val) - end - end - end - - # Clean up after the repl session. - # @return [void] - def epilogue - pry.exec_hook :after_session, pry.output, pry.current_binding, pry - end - - # Read a line of input from the user. - # @return [String] The line entered by the user. - # @return [nil] On ``. - # @return [:control_c] On ``. - # @return [:no_more_input] On EOF. - def read - @indent.reset if pry.eval_string.empty? - current_prompt = pry.select_prompt - indentation = pry.config.auto_indent ? @indent.current_prefix : '' - - val = read_line("#{current_prompt}#{indentation}") - - # Return nil for EOF, :no_more_input for error, or :control_c for - return val unless val.is_a?(String) - - if pry.config.auto_indent - original_val = "#{indentation}#{val}" - indented_val = @indent.indent(val) - - if output.tty? && - pry.config.correct_indent && - Pry::Helpers::BaseHelpers.use_ansi_codes? - output.print @indent.correct_indentation( - current_prompt, - indented_val, - calculate_overhang(current_prompt, original_val, indented_val) - ) - output.flush - end - else - indented_val = val - end - - indented_val - end - - # Manage switching of input objects on encountering `EOFError`s. - # @return [Object] Whatever the given block returns. - # @return [:no_more_input] Indicates that no more input can be read. - def handle_read_errors - should_retry = true - exception_count = 0 - - begin - yield - rescue EOFError - pry.config.input = Pry.config.input - unless should_retry - output.puts "Error: Pry ran out of things to read from! " \ - "Attempting to break out of REPL." - return :no_more_input - end - should_retry = false - retry - - # Handle like Bash: empty the current input buffer, but don't - # quit. - rescue Interrupt - return :control_c - - # If we get a random error when trying to read a line we don't want to - # automatically retry, as the user will see a lot of error messages - # scroll past and be unable to do anything about it. - rescue RescuableException => e - puts "Error: #{e.message}" - output.puts e.backtrace - exception_count += 1 - retry if exception_count < 5 - puts "FATAL: Pry failed to get user input using `#{input}`." - puts "To fix this you may be able to pass input and output file " \ - "descriptors to pry directly. e.g." - puts " Pry.config.input = STDIN" - puts " Pry.config.output = STDOUT" - puts " binding.pry" - return :no_more_input - end - end - - # Returns the next line of input to be sent to the {Pry} instance. - # @param [String] current_prompt The prompt to use for input. - # @return [String?] The next line of input, or `nil` on . - def read_line(current_prompt) - handle_read_errors do - if coolline_available? - input.completion_proc = proc do |cool| - completions = @pry.complete cool.completed_word - completions.compact - end - elsif input.respond_to? :completion_proc= - input.completion_proc = proc do |inp| - @pry.complete inp - end - end - - if readline_available? - set_readline_output - input_readline(current_prompt, false) # false since we'll add it manually - elsif coolline_available? - input_readline(current_prompt) - elsif input.method(:readline).arity == 1 - input_readline(current_prompt) - else - input_readline - end - end - end - - def input_readline(*args) - Pry::InputLock.for(:all).interruptible_region do - input.readline(*args) - end - end - - def readline_available? - defined?(Readline) && input == Readline - end - - def coolline_available? - defined?(Coolline) && input.is_a?(Coolline) - end - - # If `$stdout` is not a tty, it's probably a pipe. - # @example - # # `piping?` returns `false` - # % pry - # [1] pry(main) - # - # # `piping?` returns `true` - # % pry | tee log - def piping? - return false unless $stdout.respond_to?(:tty?) - - !$stdout.tty? && $stdin.tty? && !Helpers::Platform.windows? - end - - # @return [void] - def set_readline_output - return if @readline_output - - @readline_output = (Readline.output = Pry.config.output) if piping? - end - - # Calculates correct overhang for current line. Supports vi Readline - # mode and its indicators such as "(ins)" or "(cmd)". - # - # @return [Integer] - # @note This doesn't calculate overhang for Readline's emacs mode with an - # indicator because emacs is the default mode and it doesn't use - # indicators in 99% of cases. - def calculate_overhang(current_prompt, original_val, indented_val) - overhang = original_val.length - indented_val.length - - if readline_available? && Readline.respond_to?(:vi_editing_mode?) - begin - # rb-readline doesn't support this method: - # https://github.com/ConnorAtherton/rb-readline/issues/152 - if Readline.vi_editing_mode? - overhang = output.width - current_prompt.size - indented_val.size - end - rescue NotImplementedError - # VI editing mode is unsupported on JRuby. - # https://github.com/pry/pry/issues/1840 - nil - end - end - [0, overhang].max - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/repl_file_loader.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/repl_file_loader.rb deleted file mode 100644 index 3a06fe7a..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/repl_file_loader.rb +++ /dev/null @@ -1,79 +0,0 @@ -# frozen_string_literal: true - -class Pry - # A class to manage the loading of files through the REPL loop. - # This is an interesting trick as it processes your file as if it - # was user input in an interactive session. As a result, all Pry - # commands are available, and they are executed non-interactively. Furthermore - # the session becomes interactive when the repl loop processes a - # 'make-interactive' command in the file. The session also becomes - # interactive when an exception is encountered, enabling you to fix - # the error before returning to non-interactive processing with the - # 'make-non-interactive' command. - - class REPLFileLoader - def initialize(file_name) - full_name = File.expand_path(file_name) - raise "No such file: #{full_name}" unless File.exist?(full_name) - - define_additional_commands - @content = File.read(full_name) - end - - # Switch to interactive mode, i.e take input from the user - # and use the regular print and exception handlers. - # @param [Pry] pry_instance the Pry instance to make interactive. - def interactive_mode(pry_instance) - pry_instance.config.input = Pry.config.input - pry_instance.config.print = Pry.config.print - pry_instance.config.exception_handler = Pry.config.exception_handler - Pry::REPL.new(pry_instance).start - end - - # Switch to non-interactive mode. Essentially - # this means there is no result output - # and that the session becomes interactive when an exception is encountered. - # @param [Pry] pry_instance the Pry instance to make non-interactive. - def non_interactive_mode(pry_instance, content) - pry_instance.print = proc {} - pry_instance.exception_handler = proc do |o, _e, p| - p.run_command "cat --ex" - o.puts "...exception encountered, going interactive!" - interactive_mode(pry_instance) - end - - content.lines.each do |line| - break unless pry_instance.eval line, generated: true - end - - return if pry_instance.eval_string.empty? - - pry_instance.output.puts( - "#{pry_instance.eval_string}...exception encountered, going interactive!" - ) - interactive_mode(pry_instance) - end - - # Define a few extra commands useful for flipping back & forth - # between interactive/non-interactive modes - def define_additional_commands - s = self - - Pry::Commands.command "make-interactive", "Make the session interactive" do - s.interactive_mode(pry_instance) - end - - Pry::Commands.command( - "load-file", "Load another file through the repl" - ) do |file_name| - s.non_interactive_mode(pry_instance, File.read(File.expand_path(file_name))) - end - end - - # Actually load the file through the REPL by setting file content - # as the REPL input stream. - def load - non_interactive_mode(Pry.new, @content) - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/ring.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/ring.rb deleted file mode 100644 index 653ffb59..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/ring.rb +++ /dev/null @@ -1,89 +0,0 @@ -# frozen_string_literal: true - -class Pry - # A ring is a thread-safe fixed-capacity array to which you can only add - # elements. Older entries are overwritten as you add new elements, so that the - # ring can never contain more than `max_size` elemens. - # - # @example - # ring = Pry::Ring.new(3) - # ring << 1 << 2 << 3 - # ring.to_a #=> [1, 2, 3] - # ring << 4 - # ring.to_a #=> [2, 3, 4] - # - # ring[0] #=> 2 - # ring[-1] #=> 4 - # ring.clear - # ring[0] #=> nil - # - # @api public - # @since v0.12.0 - class Ring - # @return [Integer] maximum buffer size - attr_reader :max_size - - # @return [Integer] how many objects were added during the lifetime of the - # ring - attr_reader :count - alias size count - - # @param [Integer] max_size Maximum buffer size. The buffer will start - # overwriting elements once its reaches its maximum capacity - def initialize(max_size) - @max_size = max_size - @mutex = Mutex.new - clear - end - - # Push `value` to the current index. - # - # @param [Object] value - # @return [self] - def <<(value) - @mutex.synchronize do - @buffer[count % max_size] = value - @count += 1 - self - end - end - - # Read the value stored at `index`. - # - # @param [Integer, Range] index The element (if Integer) or elements - # (if Range) associated with `index` - # @return [Object, Array, nil] element(s) at `index`, `nil` if none - # exist - def [](index) - @mutex.synchronize do - return @buffer[index] if count <= max_size - return @buffer[(count + index) % max_size] if index.is_a?(Integer) - - transpose_buffer_tail[index] - end - end - - # @return [Array] the buffer as unwinded array - def to_a - return @buffer.dup if count <= max_size - - transpose_buffer_tail - end - - # Clear the buffer and reset count. - # @return [void] - def clear - @mutex.synchronize do - @buffer = [] - @count = 0 - end - end - - private - - def transpose_buffer_tail - tail = @buffer.slice(count % max_size, @buffer.size) - tail.concat @buffer.slice(0, count % max_size) - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/slop.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/slop.rb deleted file mode 100644 index 99c48f4b..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/slop.rb +++ /dev/null @@ -1,672 +0,0 @@ -# frozen_string_literal: true - -class Pry - # rubocop:disable Metrics/ClassLength - class Slop - require_relative 'slop/option' - require_relative 'slop/commands' - include Enumerable - VERSION = '3.4.0'.freeze - - # The main Error class, all Exception classes inherit from this class. - class Error < StandardError; end - - # Raised when an option argument is expected but none are given. - class MissingArgumentError < Error; end - - # Raised when an option is expected/required but not present. - class MissingOptionError < Error; end - - # Raised when an argument does not match its intended match constraint. - class InvalidArgumentError < Error; end - - # Raised when an invalid option is found and the strict flag is enabled. - class InvalidOptionError < Error; end - - # Raised when an invalid command is found and the strict flag is enabled. - class InvalidCommandError < Error; end - - # Returns a default Hash of configuration options this Slop instance uses. - DEFAULT_OPTIONS = { - strict: false, - help: false, - banner: nil, - ignore_case: false, - autocreate: false, - arguments: false, - optional_arguments: false, - multiple_switches: true, - longest_flag: 0 - }.freeze - - class << self - # items - The Array of items to extract options from (default: ARGV). - # config - The Hash of configuration options to send to Slop.new(). - # block - An optional block used to add options. - # - # Examples: - # - # Slop.parse(ARGV, :help => true) do - # on '-n', '--name', 'Your username', :argument => true - # end - # - # Returns a new instance of Slop. - def parse(items = ARGV, config = {}, &block) - parse! items.dup, config, &block - end - - # items - The Array of items to extract options from (default: ARGV). - # config - The Hash of configuration options to send to Slop.new(). - # block - An optional block used to add options. - # - # Returns a new instance of Slop. - def parse!(items = ARGV, config = {}, &block) - if items.is_a?(Hash) && config.empty? - config = items - items = ARGV - end - slop = Pry::Slop.new config, &block - slop.parse! items - slop - end - - # Build a Slop object from a option specification. - # - # This allows you to design your options via a simple String rather - # than programatically. Do note though that with this method, you're - # unable to pass any advanced options to the on() method when creating - # options. - # - # string - The optspec String - # config - A Hash of configuration options to pass to Slop.new - # - # Examples: - # - # opts = Slop.optspec(<<-SPEC) - # ruby foo.rb [options] - # --- - # n,name= Your name - # a,age= Your age - # A,auth Sign in with auth - # p,passcode= Your secret pass code - # SPEC - # - # opts.fetch_option(:name).description #=> "Your name" - # - # Returns a new instance of Slop. - def optspec(string, config = {}) - config[:banner], optspec = string.split(/^--+$/, 2) if string[/^--+$/] - lines = optspec.split("\n").reject(&:empty?) - opts = Slop.new(config) - - lines.each do |line| - opt, description = line.split(' ', 2) - short, long = opt.split(',').map { |s| s.sub(/\A--?/, '') } - opt = opts.on(short, long, description) - - if long && long.end_with?('=') - long.sub!(/\=$/, '') - opt.config[:argument] = true - end - end - - opts - end - end - - # The Hash of configuration options for this Slop instance. - attr_reader :config - - # The Array of Slop::Option objects tied to this Slop instance. - attr_reader :options - - # Create a new instance of Slop and optionally build options via a block. - # - # config - A Hash of configuration options. - # block - An optional block used to specify options. - def initialize(config = {}, &block) - @config = DEFAULT_OPTIONS.merge(config) - @options = [] - @commands = {} - @trash = [] - @triggered_options = [] - @unknown_options = [] - @callbacks = {} - @separators = {} - @runner = nil - - if block_given? - block.arity == 1 ? yield(self) : instance_eval(&block) - end - - return unless config[:help] - - on('-h', '--help', 'Display this help message.', tail: true) do - warn help - end - end - - # Is strict mode enabled? - # - # Returns true if strict mode is enabled, false otherwise. - def strict? - config[:strict] - end - - # Set the banner. - # - # banner - The String to set the banner. - def banner=(banner) - config[:banner] = banner - end - - # Get or set the banner. - # - # banner - The String to set the banner. - # - # Returns the banner String. - def banner(banner = nil) - config[:banner] = banner if banner - config[:banner] - end - - # Set the description (used for commands). - # - # desc - The String to set the description. - def description=(desc) - config[:description] = desc - end - - # Get or set the description (used for commands). - # - # desc - The String to set the description. - # - # Returns the description String. - def description(desc = nil) - config[:description] = desc if desc - config[:description] - end - - # Add a new command. - # - # command - The Symbol or String used to identify this command. - # options - A Hash of configuration options (see Slop::new) - # - # Returns a new instance of Slop mapped to this command. - def command(command, options = {}, &block) - @commands[command.to_s] = Pry::Slop.new(options, &block) - end - - # Parse a list of items, executing and gathering options along the way. - # - # items - The Array of items to extract options from (default: ARGV). - # block - An optional block which when used will yield non options. - # - # Returns an Array of original items. - def parse(items = ARGV, &block) - parse! items.dup, &block - items - end - - # Parse a list of items, executing and gathering options along the way. - # unlike parse() this method will remove any options and option arguments - # from the original Array. - # - # items - The Array of items to extract options from (default: ARGV). - # block - An optional block which when used will yield non options. - # - # Returns an Array of original items with options removed. - def parse!(items = ARGV, &block) - if items.empty? && @callbacks[:empty] - @callbacks[:empty].each { |cb| cb.call(self) } - return items - end - - if (cmd = @commands[items[0]]) - return cmd.parse! items[1..-1] - end - - items.each_with_index do |item, index| - @trash << index && break if item == '--' - autocreate(items, index) if config[:autocreate] - process_item(items, index, &block) unless @trash.include?(index) - end - items.reject!.with_index { |_item, index| @trash.include?(index) } - - missing_options = options.select { |opt| opt.required? && opt.count < 1 } - if missing_options.any? - raise MissingOptionError, - "Missing required option(s): #{missing_options.map(&:key).join(', ')}" - end - - if @unknown_options.any? - raise InvalidOptionError, "Unknown options #{@unknown_options.join(', ')}" - end - - if @triggered_options.empty? && @callbacks[:no_options] - @callbacks[:no_options].each { |cb| cb.call(self) } - end - - @runner.call(self, items) if @runner.respond_to?(:call) - - items - end - - # Add an Option. - # - # objects - An Array with an optional Hash as the last element. - # - # Examples: - # - # on '-u', '--username=', 'Your username' - # on :v, :verbose, 'Enable verbose mode' - # - # Returns the created instance of Slop::Option. - def on(*objects, &block) - option = build_option(objects, &block) - options << option - option - end - alias option on - alias opt on - - # Fetch an options argument value. - # - # key - The Symbol or String option short or long flag. - # - # Returns the Object value for this option, or nil. - def [](key) - option = fetch_option(key) - option.value if option - end - alias get [] - - # Returns a new Hash with option flags as keys and option values as values. - # - # include_commands - If true, merge options from all sub-commands. - def to_hash(include_commands = false) - hash = Hash[options.map { |opt| [opt.key.to_sym, opt.value] }] - if include_commands - @commands.each { |cmd, opts| hash.merge!(cmd.to_sym => opts.to_hash) } - end - hash - end - alias to_h to_hash - - # Enumerable interface. Yields each Slop::Option. - def each(&block) - options.each(&block) - end - - # Specify code to be executed when these options are parsed. - # - # callable - An object responding to a call method. - # - # yields - The instance of Slop parsing these options - # An Array of unparsed arguments - # - # Example: - # - # Slop.parse do - # on :v, :verbose - # - # run do |opts, args| - # puts "Arguments: #{args.inspect}" if opts.verbose? - # end - # end - def run(callable = nil, &block) - @runner = callable || block - return if @runner.respond_to?(:call) - - raise ArgumentError, "You must specify a callable object or a block to #run" - end - - # Check for an options presence. - # - # Examples: - # - # opts.parse %w( --foo ) - # opts.present?(:foo) #=> true - # opts.present?(:bar) #=> false - # - # Returns true if all of the keys are present in the parsed arguments. - def present?(*keys) - keys.all? { |key| (opt = fetch_option(key)) && opt.count > 0 } - end - - # Override this method so we can check if an option? method exists. - # - # Returns true if this option key exists in our list of options. - def respond_to_missing?(method_name, include_all = false) - options.any? { |o| o.key == method_name.to_s.chop } || super - end - - # Fetch a list of options which were missing from the parsed list. - # - # Examples: - # - # opts = Slop.new do - # on :n, :name= - # on :p, :password= - # end - # - # opts.parse %w[ --name Lee ] - # opts.missing #=> ['password'] - # - # Returns an Array of Strings representing missing options. - def missing - (options - @triggered_options).map(&:key) - end - - # Fetch a Slop::Option object. - # - # key - The Symbol or String option key. - # - # Examples: - # - # opts.on(:foo, 'Something fooey', :argument => :optional) - # opt = opts.fetch_option(:foo) - # opt.class #=> Slop::Option - # opt.accepts_optional_argument? #=> true - # - # Returns an Option or nil if none were found. - def fetch_option(key) - options.find { |option| [option.long, option.short].include?(clean(key)) } - end - - # Fetch a Slop object associated with this command. - # - # command - The String or Symbol name of the command. - # - # Examples: - # - # opts.command :foo do - # on :v, :verbose, 'Enable verbose mode' - # end - # - # # ruby run.rb foo -v - # opts.fetch_command(:foo).verbose? #=> true - def fetch_command(command) - @commands[command.to_s] - end - - # Add a callback. - # - # label - The Symbol identifier to attach this callback. - # - # Returns nothing. - def add_callback(label, &block) - (@callbacks[label] ||= []) << block - end - - # Add string separators between options. - # - # text - The String text to print. - def separator(text) - if @separators[options.size] - @separators[options.size] << "\n#{text}" - else - @separators[options.size] = text - end - end - - # Print a handy Slop help string. - # - # Returns the banner followed by available option help strings. - def to_s - heads = options.reject(&:tail?) - tails = (options - heads) - opts = (heads + tails).select(&:help).map(&:to_s) - optstr = opts.each_with_index.map do |o, i| - (str = @separators[i + 1]) ? [o, str].join("\n") : o - end.join("\n") - - if @commands.any? - optstr << "\n" unless optstr.empty? - optstr << "\nAvailable commands:\n\n" - optstr << commands_to_help - optstr << "\n\nSee ` --help` for more information on a specific command." - end - - banner = config[:banner] - banner ||= "Usage: #{File.basename($PROGRAM_NAME, '.*')}" \ - "#{' [command]' if @commands.any?} [options]" - if banner - "#{banner}\n#{@separators[0] ? "#{@separators[0]}\n" : ''}#{optstr}" - else - optstr - end - end - alias help to_s - - private - - # Convenience method for present?(:option). - # - # Examples: - # - # opts.parse %( --verbose ) - # opts.verbose? #=> true - # opts.other? #=> false - # - # Returns true if this option is present. If this method does not end - # with a ? character it will instead call super(). - def method_missing(method, *args, &block) - meth = method.to_s - if meth.end_with?('?') - meth = meth.chop - present?(meth) || present?(meth.tr('_', '-')) - else - super - end - end - - # Process a list item, figure out if it's an option, execute any - # callbacks, assign any option arguments, and do some sanity checks. - # - # items - The Array of items to process. - # index - The current Integer index of the item we want to process. - # block - An optional block which when passed will yield non options. - # - # Returns nothing. - def process_item(items, index, &block) - return unless (item = items[index]) - - option, argument = extract_option(item) if item.start_with?('-') - - if option - option.count += 1 unless item.start_with?('--no-') - option.count += 1 if option.key[0, 3] == "no-" - @trash << index - @triggered_options << option - - if option.expects_argument? - argument ||= items.at(index + 1) - - if !argument || argument =~ /\A--?[a-zA-Z][a-zA-Z0-9_-]*\z/ - raise MissingArgumentError, "#{option.key} expects an argument" - end - - execute_option(option, argument, index, item) - elsif option.accepts_optional_argument? - argument ||= items.at(index + 1) - - if argument && argument =~ /\A([^\-?]|-\d)+/ - execute_option(option, argument, index, item) - else - option.call(nil) - end - elsif config[:multiple_switches] && argument - execute_multiple_switches(option, argument, index) - else - option.value = option.count > 0 - option.call(nil) - end - else - @unknown_options << item if strict? && item =~ /\A--?/ - yield(item) if block && !@trash.include?(index) - end - end - - # Execute an option, firing off callbacks and assigning arguments. - # - # option - The Slop::Option object found by #process_item. - # argument - The argument Object to assign to this option. - # index - The current Integer index of the object we're processing. - # item - The optional String item we're processing. - # - # Returns nothing. - def execute_option(option, argument, index, item = nil) - unless option - if config[:multiple_switches] && strict? - raise InvalidOptionError, "Unknown option -#{item}" - end - - return - end - - if argument - unless item && item.end_with?("=#{argument}") - @trash << index + 1 unless option.argument_in_value - end - option.value = argument - else - option.value = option.count > 0 - end - - if option.match? && !argument.match(option.config[:match]) - raise InvalidArgumentError, "#{argument} is an invalid argument" - end - - option.call(option.value) - end - - # Execute a `-abc` type option where a, b and c are all options. This - # method is only executed if the multiple_switches argument is true. - # - # option - The first Option object. - # argument - The argument to this option. (Split into multiple Options). - # index - The index of the current item being processed. - # - # Returns nothing. - def execute_multiple_switches(option, argument, index) - execute_option(option, nil, index) - argument.split('').each do |key| - next unless (opt = fetch_option(key)) - - opt.count += 1 - execute_option(opt, nil, index, key) - end - end - - # Extract an option from a flag. - # - # flag - The flag key used to extract an option. - # - # Returns an Array of [option, argument]. - def extract_option(flag) - option = fetch_option(flag) - option ||= fetch_option(flag.downcase) if config[:ignore_case] - option ||= fetch_option(flag.gsub(/([^-])-/, '\1_')) - - unless option - case flag - when /\A--?([^=]+)=(.+)\z/, /\A-([a-zA-Z])(.+)\z/, /\A--no-(.+)\z/ - option = fetch_option(Regexp.last_match(1)) - argument = Regexp.last_match(2) || false - option.argument_in_value = true if option - end - end - - [option, argument] - end - - # Autocreate an option on the fly. See the :autocreate Slop config option. - # - # items - The Array of items we're parsing. - # index - The current Integer index for the item we're processing. - # - # Returns nothing. - def autocreate(items, index) - flag = items[index] - return if fetch_option(flag) || @trash.include?(index) - - option = build_option(Array(flag)) - argument = items[index + 1] - option.config[:argument] = (argument && argument !~ /\A--?/) - option.config[:autocreated] = true - options << option - end - - # Build an option from a list of objects. - # - # objects - An Array of objects used to build this option. - # - # Returns a new instance of Slop::Option. - def build_option(objects, &block) - config = {} - config[:argument] = true if @config[:arguments] - config[:optional_argument] = true if @config[:optional_arguments] - - if objects.last.is_a?(Hash) - config.merge!(objects.last) - objects.pop - end - short = extract_short_flag(objects, config) - long = extract_long_flag(objects, config) - desc = objects[0].respond_to?(:to_str) ? objects.shift : nil - - Option.new(self, short, long, desc, config, &block) - end - - # Extract the short flag from an item. - # - # objects - The Array of objects passed from #build_option. - # config - The Hash of configuration options built in #build_option. - def extract_short_flag(objects, config) - flag = clean(objects.first) - - if flag.size == 2 && flag.end_with?('=') - config[:argument] ||= true - flag.chop! - end - - return unless flag.size == 1 - - objects.shift - flag - end - - # Extract the long flag from an item. - # - # objects - The Array of objects passed from #build_option. - # config - The Hash of configuration options built in #build_option. - def extract_long_flag(objects, config) - flag = objects.first.to_s - return unless flag =~ /\A(?:--?)?[a-zA-Z][a-zA-Z0-9_-]+\=?\??\z/ - - config[:argument] ||= true if flag.end_with?('=') - config[:optional_argument] = true if flag.end_with?('=?') - objects.shift - clean(flag).sub(/\=\??\z/, '') - end - - # Remove any leading -- characters from a string. - # - # object - The Object we want to cast to a String and clean. - # - # Returns the newly cleaned String with leading -- characters removed. - def clean(object) - object.to_s.sub(/\A--?/, '') - end - - def commands_to_help - padding = 0 - @commands.each { |c, _| padding = c.size if c.size > padding } - @commands.map do |cmd, opts| - " #{cmd}#{' ' * (padding - cmd.size)} #{opts.description}" - end.join("\n") - end - end - # rubocop:enable Metrics/ClassLength -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/slop/LICENSE b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/slop/LICENSE deleted file mode 100644 index ab47fd75..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/slop/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -Copyright (c) 2012 Lee Jarvis - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/slop/commands.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/slop/commands.rb deleted file mode 100644 index 4c254270..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/slop/commands.rb +++ /dev/null @@ -1,190 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Slop - class Commands - include Enumerable - - attr_reader :config, :commands, :arguments - attr_writer :banner - - # Create a new instance of Slop::Commands and optionally build - # Slop instances via a block. Any configuration options used in - # this method will be the default configuration options sent to - # each Slop object created. - # - # config - An optional configuration Hash. - # block - Optional block used to define commands. - # - # Examples: - # - # commands = Slop::Commands.new do - # on :new do - # on '-o', '--outdir=', 'The output directory' - # on '-v', '--verbose', 'Enable verbose mode' - # end - # - # on :generate do - # on '--assets', 'Generate assets', :default => true - # end - # - # global do - # on '-D', '--debug', 'Enable debug mode', :default => false - # end - # end - # - # commands[:new].class #=> Slop - # commands.parse - # - def initialize(config = {}, &block) - @config = config - @commands = {} - @banner = nil - @triggered_command = nil - - warn "[DEPRECATED] Slop::Commands is deprecated and will be removed in "\ - "Slop version 4. Check out http://injekt.github.com/slop/#commands for "\ - "a new implementation of commands." - - return unless block_given? - - block.arity == 1 ? yield(self) : instance_eval(&block) - end - - # Optionally set the banner for this command help output. - # - # banner - The String text to set the banner. - # - # Returns the String banner if one is set. - def banner(banner = nil) - @banner = banner if banner - @banner - end - - # Add a Slop instance for a specific command. - # - # command - A String or Symbol key used to identify this command. - # config - A Hash of configuration options to pass to Slop. - # block - An optional block used to pass options to Slop. - # - # Returns the newly created Slop instance mapped to command. - def on(command, config = {}, &block) - commands[command.to_s] = Slop.new(@config.merge(config), &block) - end - - # Add a Slop instance used when no other commands exist. - # - # config - A Hash of configuration options to pass to Slop. - # block - An optional block used to pass options to Slop. - # - # Returns the newly created Slop instance mapped to default. - def default(config = {}, &block) - on('default', config, &block) - end - - # Add a global Slop instance. - # - # config - A Hash of configuration options to pass to Slop. - # block - An optional block used to pass options to Slop. - # - # Returns the newly created Slop instance mapped to global. - def global(config = {}, &block) - on('global', config, &block) - end - - # Fetch the instance of Slop tied to a command. - # - # key - The String or Symbol key used to locate this command. - # - # Returns the Slop instance if this key is found, nil otherwise. - def [](key) - commands[key.to_s] - end - alias get [] - - # Check for a command presence. - # - # Examples: - # - # cmds.parse %w( foo ) - # cmds.present?(:foo) #=> true - # cmds.present?(:bar) #=> false - # - # Returns true if the given key is present in the parsed arguments. - def present?(key) - key.to_s == @triggered_command - end - - # Enumerable interface. - def each(&block) - @commands.each(&block) - end - - # Parse a list of items. - # - # items - The Array of items to parse. - # - # Returns the original Array of items. - def parse(items = ARGV) - parse! items.dup - items - end - - # Parse a list of items, removing any options or option arguments found. - # - # items - The Array of items to parse. - # - # Returns the original Array of items with options removed. - def parse!(items = ARGV) - if (opts = commands[items[0].to_s]) - @triggered_command = items.shift - execute_arguments! items - opts.parse! items - elsif (opts = commands['default']) - opts.parse! items - elsif config[:strict] && items[0] - raise InvalidCommandError, "Unknown command `#{items[0]}`" - end - execute_global_opts! items - items - end - - # Returns a nested Hash with Slop options and values. See Slop#to_hash. - def to_hash - Hash[commands.map { |k, v| [k.to_sym, v.to_hash] }] - end - - # Returns the help String. - def to_s - defaults = commands.delete('default') - globals = commands.delete('global') - helps = commands.reject { |_, v| v.options.none? } - helps['Global options'] = globals.to_s if globals && globals.options.any? - helps['Other options'] = defaults.to_s if defaults && defaults.options.any? - banner = @banner ? "#{@banner}\n" : "" - banner + helps.map { |key, opts| " #{key}\n#{opts}" }.join("\n\n") - end - alias help to_s - - # Returns the inspection String. - def inspect - "#" - end - - private - - # Returns nothing. - def execute_arguments!(items) - @arguments = items.take_while { |arg| !arg.start_with?('-') } - items.shift @arguments.size - end - - # Returns nothing. - def execute_global_opts!(items) - return unless (global_opts = commands['global']) - - global_opts.parse!(items) - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/slop/option.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/slop/option.rb deleted file mode 100644 index d39998b8..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/slop/option.rb +++ /dev/null @@ -1,210 +0,0 @@ -# frozen_string_literal: true - -class Pry - class Slop - class Option - # The default Hash of configuration options this class uses. - DEFAULT_OPTIONS = { - argument: false, - optional_argument: false, - tail: false, - default: nil, - callback: nil, - delimiter: ',', - limit: 0, - match: nil, - optional: true, - required: false, - as: String, - autocreated: false - }.freeze - - attr_reader :short, :long, :description, :config, :types - attr_accessor :count, :argument_in_value - - # Incapsulate internal option information, mainly used to store - # option specific configuration data, most of the meat of this - # class is found in the #value method. - # - # slop - The instance of Slop tied to this Option. - # short - The String or Symbol short flag. - # long - The String or Symbol long flag. - # description - The String description text. - # config - A Hash of configuration options. - # block - An optional block used as a callback. - def initialize(slop, short, long, description, config = {}, &block) - @slop = slop - @short = short - @long = long - @description = description - @config = DEFAULT_OPTIONS.merge(config) - @count = 0 - @callback = block_given? ? block : config[:callback] - @value = nil - - @types = { - string: proc { |v| v.to_s }, - symbol: proc { |v| v.to_sym }, - integer: proc { |v| value_to_integer(v) }, - float: proc { |v| value_to_float(v) }, - range: proc { |v| value_to_range(v) }, - count: proc { @count } - } - - if long && long.size > @slop.config[:longest_flag] - @slop.config[:longest_flag] = long.size - end - - @config.each_key do |key| - predicate = :"#{key}?" - unless self.class.method_defined?(predicate) - self.class.__send__(:define_method, predicate) { !@config.key?(key) } - end - end - end - - # Returns true if this option expects an argument. - def expects_argument? - config[:argument] && config[:argument] != :optional - end - - # Returns true if this option accepts an optional argument. - def accepts_optional_argument? - config[:optional_argument] || config[:argument] == :optional - end - - # Returns the String flag of this option. Preferring the long flag. - def key - long || short - end - - # Call this options callback if one exists, and it responds to call(). - # - # Returns nothing. - def call(*objects) - @callback.call(*objects) if @callback.respond_to?(:call) - end - - # Set the new argument value for this option. - # - # We use this setter method to handle concatenating lists. That is, - # when an array type is specified and used more than once, values from - # both options will be grouped together and flattened into a single array. - def value=(new_value) - if config[:as].to_s.casecmp('array') == 0 - @value ||= [] - - if new_value.respond_to?(:split) - @value.concat new_value.split(config[:delimiter], config[:limit]) - end - else - @value = new_value - end - end - - # Fetch the argument value for this option. - # - # Returns the Object once any type conversions have taken place. - def value - value = @value.nil? ? config[:default] : @value - - return value if [true, false, nil].include?(value) && config[:as].to_s != 'count' - - type = config[:as] - if type.respond_to?(:call) - type.call(value) - elsif (callable = types[type.to_s.downcase.to_sym]) - callable.call(value) - else - value - end - end - - # Returns the help String for this option. - def to_s - return config[:help] if config[:help].respond_to?(:to_str) - - out = " #{short ? "-#{short}, " : ' ' * 4}" - - if long - out += "--#{long}" - size = long.size - diff = @slop.config[:longest_flag] - size - out += (' ' * (diff + 6)) - else - out += (' ' * (@slop.config[:longest_flag] + 8)) - end - - "#{out}#{description}" - end - alias help to_s - - # Returns the String inspection text. - def inspect - "# exception - @pry.output.puts( - "SyntaxError: #{exception.message.sub(/.*syntax error, */m, '')}" - ) - end - @pry.evaluate_ruby(str) if complete_expr - end - end - - result - end - - def push(*lines) - Array(lines).flatten.each do |line| - @pry.eval(line) - end - end - - def push_binding(context) - @pry.push_binding context - end - - def last_output - @out.string if @out - end - - def process_command(command_str) - @pry.process_command(command_str) || raise("Not a valid command") - last_command_result_or_output - end - - def last_command_result - result = Pry.current[:pry_cmd_result] - result.retval if result - end - - protected - - def last_command_result_or_output - result = last_command_result - if result != Pry::Command::VOID_VALUE - result - else - last_output - end - end - - def reset_output - @out = StringIO.new - @pry.output = @out - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/testable/utility.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/testable/utility.rb deleted file mode 100644 index 4c358c88..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/testable/utility.rb +++ /dev/null @@ -1,34 +0,0 @@ -# frozen_string_literal: true - -require 'tempfile' - -class Pry - module Testable - module Utility - # - # Creates a Tempfile then unlinks it after the block has yielded. - # - # @yieldparam [String] file - # The path of the temp file - # - # @return [void] - # - def temp_file(ext = '.rb') - file = Tempfile.open(['pry', ext]) - yield file - ensure - file.close(true) if file - end - - def unindent(*args) - Pry::Helpers::CommandHelpers.unindent(*args) - end - - def inner_scope - catch(:inner_scope) do - yield -> { throw(:inner_scope, self) } - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/testable/variables.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/testable/variables.rb deleted file mode 100644 index deb156b6..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/testable/variables.rb +++ /dev/null @@ -1,52 +0,0 @@ -# frozen_string_literal: true - -class Pry - module Testable - module Variables - # - # @example - # temporary_constants(:Foo, :Bar) do - # Foo = Class.new(RuntimeError) - # Bar = Class.new(RuntimeError) - # end - # Foo # => NameError - # Bar # => NameError - # - # @param [Array] names - # An array of constant names that be defined by a block, - # and removed by this method afterwards. - # - # @return [void] - # - def temporary_constants(*names) - names.each do |name| - Object.remove_const name if Object.const_defined?(name) - end - yield - ensure - names.each do |name| - Object.remove_const name if Object.const_defined?(name) - end - end - - # - # @param [String] name - # The name of a variable. - # - # @param [String] value - # Its value. - # - # @param [Binding] binding - # The binding object to insert a variable into. - # - # @return [void] - # - def insert_variable(name, value, binding) - Pry.current[:pry_local] = value - binding.eval("#{name} = ::Pry.current[:pry_local]") - ensure - Pry.current[:pry_local] = nil - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/version.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/version.rb deleted file mode 100644 index edbbd531..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/version.rb +++ /dev/null @@ -1,5 +0,0 @@ -# frozen_string_literal: true - -class Pry - VERSION = '0.14.2'.freeze -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/warning.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/warning.rb deleted file mode 100644 index c65279f7..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/warning.rb +++ /dev/null @@ -1,20 +0,0 @@ -# frozen_string_literal: true - -class Pry - # @api private - # @since v0.13.0 - module Warning - # Prints a warning message with exact file and line location, similar to how - # Ruby's -W prints warnings. - # - # @param [String] message - # @return [void] - def self.warn(message) - location = caller_locations(2..2).first - path = location.path - lineno = location.lineno - - Kernel.warn("#{path}:#{lineno}: warning: #{message}") - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/wrapped_module.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/wrapped_module.rb deleted file mode 100644 index 89173dcd..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/wrapped_module.rb +++ /dev/null @@ -1,382 +0,0 @@ -# frozen_string_literal: true - -class Pry - class << self - # If the given object is a `Pry::WrappedModule`, return it unaltered. If it's - # anything else, return it wrapped in a `Pry::WrappedModule` instance. - def WrappedModule(obj) - if obj.is_a? Pry::WrappedModule - obj - else - Pry::WrappedModule.new(obj) - end - end - end - - class WrappedModule - include Helpers::BaseHelpers - include CodeObject::Helpers - - attr_reader :wrapped - - # Convert a string to a module. - # - # @param [String] mod_name - # @param [Binding] target The binding where the lookup takes place. - # @return [Module, nil] The module or `nil` (if conversion failed). - # @example - # Pry::WrappedModule.from_str("Pry::Code") - def self.from_str(mod_name, target = TOPLEVEL_BINDING) - Pry::WrappedModule.new(target.eval(mod_name)) if safe_to_evaluate?(mod_name, target) - rescue RescuableException - nil - end - - class << self - private - - # We use this method to decide whether code is safe to eval. Method's are - # generally not, but everything else is. - # TODO: is just checking != "method" enough?? - # TODO: see duplication of this method in Pry::CodeObject - # @param [String] str The string to lookup. - # @param [Binding] target Where the lookup takes place. - # @return [Boolean] - def safe_to_evaluate?(str, target) - return true if str.strip == "self" - return false if str =~ /%/ - - kind = target.eval("defined?(#{str})") - kind =~ /variable|constant/ - end - end - - # @raise [ArgumentError] if the argument is not a `Module` - # @param [Module] mod - def initialize(mod) - unless mod.is_a?(Module) - raise ArgumentError, "Tried to initialize a WrappedModule with a " \ - "non-module #{mod.inspect}" - end - - @wrapped = mod - @memoized_candidates = [] - @host_file_lines = nil - @source = nil - @source_location = nil - @doc = nil - @all_source_locations_by_popularity = nil - end - - # Returns an array of the names of the constants accessible in the wrapped - # module. This avoids the problem of accidentally calling the singleton - # method `Module.constants`. - # @param [Boolean] inherit Include the names of constants from included - # modules? - def constants(inherit = true) - Module.instance_method(:constants).bind(@wrapped).call(inherit) - end - - # The prefix that would appear before methods defined on this class. - # - # i.e. the "String." or "String#" in String.new and String#initialize. - # - # @return String - def method_prefix - if singleton_class? - if Module === singleton_instance # rubocop:disable Style/CaseEquality - "#{WrappedModule.new(singleton_instance).nonblank_name}." - else - "self." - end - else - "#{nonblank_name}#" - end - end - - # The name of the Module if it has one, otherwise #. - # - # @return [String] - def nonblank_name - if name.to_s == "" - wrapped.inspect - else - name - end - end - - # Is this a singleton class? - # @return [Boolean] - def singleton_class? - if Pry::Method.safe_send(wrapped, :respond_to?, :singleton_class?) - Pry::Method.safe_send(wrapped, :singleton_class?) - else - wrapped != Pry::Method.safe_send(wrapped, :ancestors).first - end - end - - # Is this strictly a module? (does not match classes) - # @return [Boolean] - def module? - wrapped.instance_of?(Module) - end - - # Is this strictly a class? - # @return [Boolean] - def class? - wrapped.instance_of?(Class) - end - - # Get the instance associated with this singleton class. - # - # @raise ArgumentError: tried to get instance of non singleton class - # - # @return [Object] - def singleton_instance - unless singleton_class? - raise ArgumentError, "tried to get instance of non singleton class" - end - - if Helpers::Platform.jruby? - wrapped.to_java.attached - else - @singleton_instance ||= ObjectSpace.each_object(wrapped).detect do |x| - (class << x; self; end) == wrapped - end - end - end - - # Forward method invocations to the wrapped module - def method_missing(method_name, *args, &block) - if wrapped.respond_to?(method_name) - wrapped.send(method_name, *args, &block) - else - super - end - end - - def respond_to_missing?(method_name, include_private = false) - wrapped.respond_to?(method_name, include_private) || super - end - - # Retrieve the source location of a module. Return value is in same - # format as Method#source_location. If the source location - # cannot be found this method returns `nil`. - # - # @return [Array, nil] The source location of the - # module (or class), or `nil` if no source location found. - def source_location - @source_location ||= primary_candidate.source_location - rescue Pry::RescuableException - nil - end - - # @return [String, nil] The associated file for the module (i.e - # the primary candidate: highest ranked monkeypatch). - def file - Array(source_location).first - end - alias source_file file - - # @return [Fixnum, nil] The associated line for the module (i.e - # the primary candidate: highest ranked monkeypatch). - def line - Array(source_location).last - end - alias source_line line - - # Returns documentation for the module. - # This documentation is for the primary candidate, if - # you would like documentation for other candidates use - # `WrappedModule#candidate` to select the candidate you're - # interested in. - # @raise [Pry::CommandError] If documentation cannot be found. - # @return [String] The documentation for the module. - def doc - @doc ||= primary_candidate.doc - end - - # Returns the source for the module. - # This source is for the primary candidate, if - # you would like source for other candidates use - # `WrappedModule#candidate` to select the candidate you're - # interested in. - # @raise [Pry::CommandError] If source cannot be found. - # @return [String] The source for the module. - def source - @source ||= primary_candidate.source - end - - # @return [String] Return the associated file for the - # module from YARD, if one exists. - def yard_file - YARD::Registry.at(name).file if yard_docs? - end - - # @return [Fixnum] Return the associated line for the - # module from YARD, if one exists. - def yard_line - YARD::Registry.at(name).line if yard_docs? - end - - # @return [String] Return the YARD docs for this module. - def yard_doc - YARD::Registry.at(name).docstring.to_s if yard_docs? - end - - # Return a candidate for this module of specified rank. A `rank` - # of 0 is equivalent to the 'primary candidate', which is the - # module definition with the highest number of methods. A `rank` - # of 1 is the module definition with the second highest number of - # methods, and so on. Module candidates are necessary as modules - # can be reopened multiple times and in multiple places in Ruby, - # the candidate API gives you access to the module definition - # representing each of those reopenings. - # @raise [Pry::CommandError] If the `rank` is out of range. That - # is greater than `number_of_candidates - 1`. - # @param [Fixnum] rank - # @return [Pry::WrappedModule::Candidate] - def candidate(rank) - @memoized_candidates[rank] ||= WrappedModule::Candidate.new(self, rank) - end - - # @return [Fixnum] The number of candidate definitions for the - # current module. - def number_of_candidates - method_candidates.count - end - - # @return [Array] - def candidates - enum = Enumerator.new do |y| - (0...number_of_candidates).each do |num| - y.yield candidate(num) - end - end - enum - end - - # @return [Boolean] Whether YARD docs are available for this module. - def yard_docs? - !!(defined?(YARD) && YARD::Registry.at(name)) - end - - # @param [Fixnum] times How far to travel up the ancestor chain. - # @return [Pry::WrappedModule, nil] The wrapped module that is the - # superclass. - # When `self` is a `Module` then return the - # nth ancestor, otherwise (in the case of classes) return the - # nth ancestor that is a class. - def super(times = 1) - return self if times.zero? - - sup = - if wrapped.is_a?(Class) - ancestors.select { |v| v.is_a?(Class) }[times] - else - ancestors[times] - end - - Pry::WrappedModule(sup) if sup - end - - private - - # @return [Pry::WrappedModule::Candidate] The candidate with the - # highest rank, that is the 'monkey patch' of this module with the - # highest number of methods, which contains a source code line that - # defines the module. It is considered the 'canonical' definition - # for the module. In the absense of a suitable candidate, the - # candidate of rank 0 will be returned, or a CommandError raised if - # there are no candidates at all. - def primary_candidate - @primary_candidate ||= candidates.find(&:file) || candidate(0) - end - - # @return [Array>] The array of `Pry::Method` objects, - # there are two associated with each candidate. The first is the 'base - # method' for a candidate and it serves as the start point for - # the search in uncovering the module definition. The second is - # the last method defined for that candidate and it is used to - # speed up source code extraction. - def method_candidates - @method_candidates ||= all_source_locations_by_popularity.map do |group| - methods_sorted_by_source_line = group.last.sort_by(&:source_line) - [methods_sorted_by_source_line.first, methods_sorted_by_source_line.last] - end - end - - # A helper method. - def all_source_locations_by_popularity - return @all_source_locations_by_popularity if @all_source_locations_by_popularity - - ims = all_relevant_methods_for(wrapped).group_by do |v| - Array(v.source_location).first - end - - @all_source_locations_by_popularity = ims.sort_by do |path, methods| - expanded = File.expand_path(path) - load_order = $LOADED_FEATURES.index { |file| expanded.end_with?(file) } - - [-methods.size, load_order || (1.0 / 0.0)] - end - end - - # We only want methods that have a non-nil `source_location`. We also - # skip some spooky internal methods. - # - # @return [Array] - def all_relevant_methods_for(mod) - methods = all_methods_for(mod).select(&:source_location) - .reject { |x| method_defined_by_forwardable_module?(x) } - - return methods unless methods.empty? - - safe_send(mod, :constants).flat_map do |const_name| - if (const = nested_module?(mod, const_name)) - all_relevant_methods_for(const) - else - [] - end - end - end - - # Return all methods (instance methods and class methods) for a - # given module. - # @return [Array] - def all_methods_for(mod) - Pry::Method.all_from_obj(mod, false) + Pry::Method.all_from_class(mod, false) - end - - def nested_module?(parent, name) - return if safe_send(parent, :autoload?, name) - - child = safe_send(parent, :const_get, name) - return unless child.is_a?(Module) - return unless safe_send(child, :name) == "#{safe_send(parent, :name)}::#{name}" - - child - end - - # Detect methods that are defined with `def_delegator` from the Forwardable - # module. We want to reject these methods as they screw up module - # extraction since the `source_location` for such methods points at forwardable.rb - # TODO: make this more robust as valid user-defined files called - # forwardable.rb are also skipped. - def method_defined_by_forwardable_module?(method) - method.source_location.first =~ /forwardable\.rb/ - end - - # memoized lines for file - def lines_for_file(file) - @lines_for_file ||= {} - - @lines_for_file[file] ||= - if file == Pry.eval_path - Pry.line_buffer.drop(1) - else - File.readlines(file) - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/wrapped_module/candidate.rb b/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/wrapped_module/candidate.rb deleted file mode 100644 index c333e8e6..00000000 --- a/bundle/ruby/3.2.0/gems/pry-0.14.2/lib/pry/wrapped_module/candidate.rb +++ /dev/null @@ -1,139 +0,0 @@ -# frozen_string_literal: true - -class Pry - class WrappedModule - # This class represents a single candidate for a module/class definition. - # It provides access to the source, documentation, line and file - # for a monkeypatch (reopening) of a class/module. - class Candidate - include Pry::Helpers::DocumentationHelpers - include Pry::CodeObject::Helpers - extend Pry::Forwardable - - # @return [String] The file where the module definition is located. - attr_reader :file - alias source_file file - - # @return [Fixnum] The line where the module definition is located. - attr_reader :line - alias source_line line - - # Methods to delegate to associated `Pry::WrappedModule - # instance`. - private_delegates = %i[lines_for_file method_candidates yard_docs? name] - public_delegates = %i[wrapped module? class? nonblank_name - number_of_candidates] - - def_delegators :@wrapper, *public_delegates - def_private_delegators :@wrapper, *private_delegates - - # @raise [Pry::CommandError] If `rank` is out of bounds. - # @param [Pry::WrappedModule] wrapper The associated - # `Pry::WrappedModule` instance that owns the candidates. - # @param [Fixnum] rank The rank of the candidate to - # retrieve. Passing 0 returns 'primary candidate' (the candidate with largest - # number of methods), passing 1 retrieves candidate with - # second largest number of methods, and so on, up to - # `Pry::WrappedModule#number_of_candidates() - 1` - def initialize(wrapper, rank) - @wrapper = wrapper - - if number_of_candidates <= 0 - raise CommandError, "Cannot find a definition for #{name} module!" - end - - if rank > (number_of_candidates - 1) - raise CommandError, - "No such module candidate. Allowed candidates range is " \ - "from 0 to #{number_of_candidates - 1}" - end - - @source = @source_location = nil - @rank = rank - @file, @line = source_location - end - - # @raise [Pry::CommandError] If source code cannot be found. - # @return [String] The source for the candidate, i.e the - # complete module/class definition. - def source - return nil if file.nil? - return @source if @source - - @source ||= strip_leading_whitespace( - Pry::Code.from_file(file).expression_at(line, number_of_lines_in_first_chunk) - ) - end - - # @raise [Pry::CommandError] If documentation cannot be found. - # @return [String] The documentation for the candidate. - def doc - return nil if file.nil? - - @doc ||= get_comment_content(Pry::Code.from_file(file).comment_describing(line)) - end - - # @return [Array, nil] A `[String, Fixnum]` pair representing the - # source location (file and line) for the candidate or `nil` - # if no source location found. - def source_location - return @source_location if @source_location - - file, line = first_method_source_location - return nil unless file.is_a?(String) - - @source_location = [file, first_line_of_module_definition(file, line)] - rescue Pry::RescuableException - nil - end - - private - - # Locate the first line of the module definition. - # @param [String] file The file that contains the module - # definition (somewhere). - # @param [Fixnum] line The module definition should appear - # before this line (if it exists). - # @return [Fixnum] The line where the module is defined. This - # line number is one-indexed. - def first_line_of_module_definition(file, line) - searchable_lines = lines_for_file(file)[0..(line - 2)] - searchable_lines.rindex { |v| module_definition_first_line?(v) } + 1 - end - - def module_definition_first_line?(line) - mod_type_string = wrapped.class.to_s.downcase - wrapped_name_last = wrapped.name.split(/::/).last - /(^|=)\s*#{mod_type_string}\s+(?:(?:\w*)::)*?#{wrapped_name_last}/ =~ line || - /^\s*(::)?#{wrapped_name_last}\s*?=\s*?#{wrapped.class}/ =~ line || - /^\s*(::)?#{wrapped_name_last}\.(class|instance)_eval/ =~ line - end - - # This method is used by `Candidate#source_location` as a - # starting point for the search for the candidate's definition. - # @return [Array] The source location of the base method used to - # calculate the source location of the candidate. - def first_method_source_location - @first_method_source_location ||= method_candidates[@rank].first.source_location - end - - # @return [Array] The source location of the last method in this - # candidate's module definition. - def last_method_source_location - @last_method_source_location ||= method_candidates[@rank].last.source_location - end - - # Return the number of lines between the start of the class definition and - # the start of the last method. We use this value so we can quickly grab - # these lines from the file (without having to check each intervening line - # for validity, which is expensive) speeding up source extraction. - # - # @return [Integer] number of lines. - def number_of_lines_in_first_chunk - end_method_line = last_method_source_location.last - - end_method_line - line - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/public_suffix-5.0.4/.yardopts b/bundle/ruby/3.2.0/gems/public_suffix-5.0.4/.yardopts deleted file mode 100644 index 0a782de2..00000000 --- a/bundle/ruby/3.2.0/gems/public_suffix-5.0.4/.yardopts +++ /dev/null @@ -1 +0,0 @@ ---title 'Ruby Public Suffix API Documentation' diff --git a/bundle/ruby/3.2.0/gems/public_suffix-5.0.4/2.0-Upgrade.md b/bundle/ruby/3.2.0/gems/public_suffix-5.0.4/2.0-Upgrade.md deleted file mode 100644 index 1a10bfb3..00000000 --- a/bundle/ruby/3.2.0/gems/public_suffix-5.0.4/2.0-Upgrade.md +++ /dev/null @@ -1,52 +0,0 @@ -# Welcome to PublicSuffix 2.0! - -PublicSuffix 2.0 contains a rewritten internal representation and comparison logic, that drastically increases the lookup performance. The new version also changes several internal and external API. - -This document documents the most relevant changes to help you upgrading from PublicSuffix 1.0 to 2.0. - -## What's New - -- The library is now 100% compliants with the official PublicSuffix tests. The major breaking change you may experience, is that if a domain passed as input doesn't match any rule, the rule `*` is assumed. You can override this behavior by passing a custom default rule with the `default_rule` option. The old behavior can be restored by passing `default_rule: nil`. -- `PublicSuffix.domain` is a new method that parses the input and returns the domain (combination of second level domain + suffix). This is a convenient helper to parse a domain name, for example when you need to determine the cookie or SSL scope. -- Added the ability to disable the use of private domains either at runtime, in addition to the ability to not load the private domains section when reading the list (`private_domains: false`). This feature also superseded the `private_domains` class-level attribute, that is no longer available. - -## Upgrade - -When upgrading, here's the most relevant changes to keep an eye on: - -- Several futile utility helpers were removed, such as `Domain#rule`, `Domain#is_a_domain?`, `Domain#is_a_subdomain?`, `Domain#valid?`. You can easily obtain the same result by having a custom method that reconstructs the logic, and/or calling `PublicSuffix.{domain|parse}(domain.to_s)`. -- `PublicSuffix::List.private_domains` is no longer available. Instead, you now have two ways to enable/disable the private domains: - - 1. At runtime, by using the `ignore_private` option - - ```ruby - PublicSuffix.domain("something.blogspot.com", ignore_private: true) - ``` - - 1. Loading a filtered list: - - ```ruby - # Disable support for private TLDs - PublicSuffix::List.default = PublicSuffix::List.parse(File.read(PublicSuffix::List::DEFAULT_LIST_PATH), private_domains: false) - # => "blogspot.com" - PublicSuffix.domain("something.blogspot.com") - # => "blogspot.com" - ``` -- Now that the library is 100% compliant with the official PublicSuffix algorithm, if a domain passed as input doesn't match any rule, the wildcard rule `*` is assumed. This means that unlisted TLDs will be considered valid by default, when they would have been invalid in 1.x. However, you can override this behavior to emulate the 1.x behavior if needed: - - ```ruby - # 1.x: - - PublicSuffix.valid?("google.commm") - # => false - - # 2.x: - - PublicSuffix.valid?("google.commm") - # => true - - # Overriding 2.x behavior if needed: - - PublicSuffix.valid?("google.commm", default_rule: nil) - # => false - ```` diff --git a/bundle/ruby/3.2.0/gems/public_suffix-5.0.4/CHANGELOG.md b/bundle/ruby/3.2.0/gems/public_suffix-5.0.4/CHANGELOG.md deleted file mode 100644 index 34a4e678..00000000 --- a/bundle/ruby/3.2.0/gems/public_suffix-5.0.4/CHANGELOG.md +++ /dev/null @@ -1,451 +0,0 @@ -# Changelog - -This project uses [Semantic Versioning 2.0.0](https://semver.org/). - -## 5.0.4 - -### Changed - -- Reduced .gem file size (GH-259). [Thanks @ybiquitous] -- Updated definitions. - -## 5.0.3 - -### Fixed - -- Fixed automated release workflow. - -## 5.0.2 - -### Changed - -- Updated definitions. - -## 5.0.1 - -### Changed - -- Updated definitions. - - -## 5.0.0 - -### Changed - -- Minimum Ruby version is 2.6 - -- Updated definitions. - - -## 4.0.7 - -### Fixes - -- Fixed YARD rake task (GH-179) - -### Changed - -- Updated definitions. - - -## 4.0.6 - -### Changed - -- Updated definitions. - - -## 4.0.5 - -### Changed - -- Updated definitions. - - -## 4.0.4 - -### Changed - -- Updated definitions. - - -## 4.0.3 - -### Fixed - -- Fixed 2.7 deprecations and warnings (GH-167). [Thanks @BrianHawley] - - -## 4.0.2 - -### Changed - -- Updated definitions. - - -## 4.0.1 - -### Changed - -- Updated definitions. - - -## 4.0.0 - -### Changed - -- Minimum Ruby version is 2.3 - - -## Release 3.1.1 - -- CHANGED: Updated definitions. -- CHANGED: Rolled back support for Ruby 2.3 (GH-161, GH-162) - -IMPORTANT: 3.x is the latest version compatible with Ruby 2.1 and Ruby 2.2. - - -## Release 3.1.0 - -- CHANGED: Updated definitions. -- CHANGED: Minimum Ruby version is 2.3 -- CHANGED: Upgraded to Bundler 2.x - - -## Release 3.0.3 - -- CHANGED: Updated definitions. - - -## Release 3.0.2 - -- CHANGED: Updated definitions. - - -## Release 3.0.1 - -- CHANGED: Updated definitions. -- CHANGED: Improve performance and avoid allocation (GH-146). [Thanks @robholland] - - -## Release 3.0.0 - -This new version includes a major redesign of the library internals, with the goal to drastically -improve the lookup time while reducing storage space. - -For this reason, several public methods that are no longer applicable have been deprecated -and/or removed. You can find more information at GH-133. - -- CHANGED: Updated definitions. -- CHANGED: Dropped support for Ruby < 2.1 -- CHANGED: `PublicSuffix::List#rules` is now protected. You should not rely on it as the internal rule representation is subject to change to optimize performances. -- CHANGED: Removed `PublicSuffix::List.clear`, it was an unnecessary accessor method. Use `PublicSuffix::List.default = nil` if you **really** need to reset the default list. You shouldn't. -- CHANGED: `PublicSuffix::List#select` is now private. You should not use it, instead use `PublicSuffix::List#find`. -- CHANGED: `PublicSuffix::List` no longer implements Enumerable. Instead, use `#each` to loop over, or get an Enumerator. -- CHANGED: Redesigned internal list storage and lookup algorithm to achieve O(1) lookup time (see GH-133). - - -## Release 2.0.5 - -- CHANGED: Updated definitions. -- CHANGED: Initialization performance improvements (GH-128). [Thanks @casperisfine] - - -## Release 2.0.4 - -- FIXED: Fix a bug that caused the GEM to be published with the wrong version number in the gemspec (GH-121). - -- CHANGED: Updated definitions. - - -## Release 2.0.3 - -- CHANGED: Updated definitions. - - -## Release 2.0.2 - -- CHANGED: Updated definitions. - - -## Release 2.0.1 - -- FIXED: Fix bug that prevented .valid? to reset the default rule - - -## Release 2.0.0 - -- NEW: Added PublicSuffix.domain # => sld.tld -- NEW: Added the ability to disable the use of private domains either at runtime, in addition to the ability to not load the private domains section when reading the list (`private_domains: false`). This feature also superseded the `private_domains` class-level attribute, that is no longer available. - -- CHANGED: Considerable performance improvements (GH-92) -- CHANGED: Updated definitions. -- CHANGED: Removed deprecated PublicSuffix::InvalidDomain exception -- CHANGED: If the suffix is now listed, then the prevaling rule is "*" as defined by the PSL algorithm (GH-91) -- CHANGED: Input validation is performed only if you call `PublicSuffix.parse` or `PublicSuffix.list` -- CHANGED: Input with leading dot is invalid per PSL acceptance tests -- CHANGED: Removed `private_domains` class-level attribute. It is replaced by the `private_domains: false` option in the list parse method. -- CHANGED: The default list now assumes you use UTF-8 for reading the input (GH-94), - -- REMOVED: Removed futile utility helpers such as `Domain#rule`, `Domain#is_a_domain?`, `Domain#is_a_subdomain?`, `Domain#valid?`. You can easily obtain the same result by having a custom method that reconstructs the logic, and/or calling `PublicSuffix.{domain|parse}(domain.to_s)`. - - -## Release 1.5.3 - -- FIXED: Don't duplicate rule indices when creating index (GH-77). [Thanks @ags] - -- CHANGED: Updated definitions. - - -## Release 1.5.2 - -- CHANGED: Updated definitions. - - -## Release 1.5.1 - -- FIXED: Ignore case for parsing and validating (GH-62) - -- CHANGED: Updated definitions. - - -## Release 1.5.0 - -- CHANGED: Dropped support for Ruby < 2.0 - -- CHANGED: Updated definitions. - - -## Release 1.4.6 - -- CHANGED: Updated definitions. - - -## Release 1.4.5 - -- CHANGED: Updated definitions. - - -## Release 1.4.4 - -- CHANGED: Updated definitions. - - -## Release 1.4.3 - -- CHANGED: Updated definitions. - - -## Release 1.4.2 - -- CHANGED: Updated definitions. - - -## Release 1.4.1 - -- CHANGED: Updated definitions. - - -## Release 1.4.0 - -- CHANGED: Moved the definitions in the lib folder. - -- CHANGED: Updated definitions. - - -## Release 1.3.3 - -- CHANGED: Updated definitions. - - -## Release 1.3.2 - -- CHANGED: Updated definitions. - - -## Release 1.3.1 - -- CHANGED: Updated definitions. - - -## Release 1.3.0 - -- NEW: Ability to skip Private Domains (GH-28). [Thanks @rb2k] - -- CHANGED: Updated definitions. - - -## Release 1.2.1 - -- CHANGED: Updated definitions. - - -## Release 1.2.0 - -- NEW: Allow a custom List on `PublicSuffix.parse` (GH-26). [Thanks @itspriddle] - -- FIXED: PublicSuffix.parse and PublicSuffix.valid? crashes when input is nil (GH-20). - -- CHANGED: Updated definitions. - - -## Release 1.1.3 - -- CHANGED: Updated definitions. - - -## Release 1.1.2 - -- CHANGED: Updated definitions. - - -## Release 1.1.1 - -- CHANGED: Updated definitions. - - -## Release 1.1.0 - -- FIXED: #valid? and #parse consider URIs as valid domains (GH-15) - -- CHANGED: Updated definitions. - -- CHANGED: Removed deprecatd PublicSuffixService::RuleList. - - -## Release 1.0.0 - -- CHANGED: Updated definitions. - - -## Release 1.0.0.rc1 - -The library is now known as PublicSuffix. - - -## Release 0.9.1 - -- CHANGED: Renamed PublicSuffixService::RuleList to PublicSuffixService::List. - -- CHANGED: Renamed PublicSuffixService::List#list to PublicSuffixService::List#rules. - -- CHANGED: Renamed PublicSuffixService to PublicSuffix. - -- CHANGED: Updated definitions. - - -## Release 0.9.0 - -- CHANGED: Minimum Ruby version increased to Ruby 1.8.7. - -- CHANGED: rake/gempackagetask is deprecated. Use rubygems/package_task instead. - - -## Release 0.8.4 - -- FIXED: Reverted bugfix for issue #12 for Ruby 1.8.6. - This is the latest version compatible with Ruby 1.8.6. - - -## Release 0.8.3 - -- FIXED: Fixed ArgumentError: invalid byte sequence in US-ASCII with Ruby 1.9.2 (#12). - -- CHANGED: Updated definitions (#11). - -- CHANGED: Renamed definitions.txt to definitions.dat. - - -## Release 0.8.2 - -- NEW: Added support for rubygems-test. - -- CHANGED: Integrated Bundler. - -- CHANGED: Updated definitions. - - -## Release 0.8.1 - -- FIXED: The files in the release 0.8.0 have wrong permission 600 and can't be loaded (#10). - - -## Release 0.8.0 - -- CHANGED: Update public suffix list to d1a5599b49fa 2010-10-25 15:10 +0100 (#9) - -- NEW: Add support for Fully Qualified Domain Names (#7) - - -## Release 0.7.0 - -- CHANGED: Using YARD to document the code instead of RDoc. - -- FIXED: RuleList cache is not recreated when a new rule is appended to the list (#6) - -- FIXED: PublicSuffixService.valid? should return false if the domain is not defined or not allowed (#4, #5) - - -## Release 0.6.0 - -- NEW: PublicSuffixService.parse raises DomainNotAllowed when trying to parse a domain name - which exists, but is not allowed by the current definition list (#3) - - PublicSuffixService.parse("nic.do") - # => PublicSuffixService::DomainNotAllowed - -- CHANGED: Renamed PublicSuffixService::InvalidDomain to PublicSuffixService::DomainInvalid - - -## Release 0.5.2 - -- CHANGED: Update public suffix list to 248ea690d671 2010-09-16 18:02 +0100 - - -## Release 0.5.1 - -- CHANGED: Update public suffix list to 14dc66dd53c1 2010-09-15 17:09 +0100 - - -## Release 0.5.0 - -- CHANGED: Improve documentation for Domain#domain and Domain#subdomain (#1). - -- CHANGED: Performance improvements (#2). - - -## Release 0.4.0 - -- CHANGED: Rename library from DomainName to PublicSuffixService to reduce the probability of name conflicts. - - -## Release 0.3.1 - -- Deprecated DomainName library. - - -## Release 0.3.0 - -- CHANGED: DomainName#domain and DomainName#subdomain are no longer alias of Domain#sld and Domain#tld. - -- CHANGED: Removed DomainName#labels and decoupled Rule from DomainName. - -- CHANGED: DomainName#valid? no longer instantiates new DomainName objects. This means less overhead. - -- CHANGED: Refactoring the entire DomainName API. Removed the internal on-the-fly parsing. Added a bunch of new methods to check and validate the DomainName. - - -## Release 0.2.0 - -- NEW: DomainName#valid? - -- NEW: DomainName#parse and DomainName#parse! - -- NEW: DomainName#valid_domain? and DomainName#valid_subdomain? - -- CHANGED: Make sure RuleList lookup is only performed once. - - -## Release 0.1.0 - -- Initial version diff --git a/bundle/ruby/3.2.0/gems/public_suffix-5.0.4/LICENSE.txt b/bundle/ruby/3.2.0/gems/public_suffix-5.0.4/LICENSE.txt deleted file mode 100644 index 0909dd41..00000000 --- a/bundle/ruby/3.2.0/gems/public_suffix-5.0.4/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2009-2023 Simone Carletti - -MIT License - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/bundle/ruby/3.2.0/gems/public_suffix-5.0.4/README.md b/bundle/ruby/3.2.0/gems/public_suffix-5.0.4/README.md deleted file mode 100644 index dc611d34..00000000 --- a/bundle/ruby/3.2.0/gems/public_suffix-5.0.4/README.md +++ /dev/null @@ -1,224 +0,0 @@ -# Public Suffix for Ruby - -PublicSuffix is a Ruby domain name parser based on the [Public Suffix List](https://publicsuffix.org/). - -[![Build Status](https://github.com/weppos/publicsuffix-ruby/actions/workflows/tests.yml/badge.svg)](https://github.com/weppos/publicsuffix-ruby/actions/workflows/tests.yml) -[![Tidelift dependencies](https://tidelift.com/badges/package/rubygems/public_suffix)](https://tidelift.com/subscription/pkg/rubygems-public-suffix?utm_source=rubygems-public-suffix&utm_medium=referral&utm_campaign=enterprise) - - -## Links - -- [Homepage](https://simonecarletti.com/code/publicsuffix-ruby) -- [Repository](https://github.com/weppos/publicsuffix-ruby) -- [API Documentation](https://rubydoc.info/gems/public_suffix) -- [Introducing the Public Suffix List library for Ruby](https://simonecarletti.com/blog/2010/06/public-suffix-list-library-for-ruby/) - - -## Requirements - -PublicSuffix requires **Ruby >= 2.6**. For an older versions of Ruby use a previous release. - - -## Installation - -You can install the gem manually: - -```shell -gem install public_suffix -``` - -Or use Bundler and define it as a dependency in your `Gemfile`: - -```ruby -gem 'public_suffix' -``` - -If you are upgrading to 2.0, see [2.0-Upgrade.md](2.0-Upgrade.md). - -## Usage - -Extract the domain out from a name: - -```ruby -PublicSuffix.domain("google.com") -# => "google.com" -PublicSuffix.domain("www.google.com") -# => "google.com" -PublicSuffix.domain("www.google.co.uk") -# => "google.co.uk" -``` - -Parse a domain without subdomains: - -```ruby -domain = PublicSuffix.parse("google.com") -# => # -domain.tld -# => "com" -domain.sld -# => "google" -domain.trd -# => nil -domain.domain -# => "google.com" -domain.subdomain -# => nil -``` - -Parse a domain with subdomains: - -```ruby -domain = PublicSuffix.parse("www.google.com") -# => # -domain.tld -# => "com" -domain.sld -# => "google" -domain.trd -# => "www" -domain.domain -# => "google.com" -domain.subdomain -# => "www.google.com" -``` - -Simple validation example: - -```ruby -PublicSuffix.valid?("google.com") -# => true - -PublicSuffix.valid?("www.google.com") -# => true - -# Explicitly forbidden, it is listed as a private domain -PublicSuffix.valid?("blogspot.com") -# => false - -# Unknown/not-listed TLD domains are valid by default -PublicSuffix.valid?("example.tldnotlisted") -# => true -``` - -Strict validation (without applying the default * rule): - -```ruby -PublicSuffix.valid?("example.tldnotlisted", default_rule: nil) -# => false -``` - - -## Fully Qualified Domain Names - -This library automatically recognizes Fully Qualified Domain Names. A FQDN is a domain name that end with a trailing dot. - -```ruby -# Parse a standard domain name -PublicSuffix.domain("www.google.com") -# => "google.com" - -# Parse a fully qualified domain name -PublicSuffix.domain("www.google.com.") -# => "google.com" -``` - -## Private domains - -This library has support for switching off support for private (non-ICANN). - -```ruby -# Extract a domain including private domains (by default) -PublicSuffix.domain("something.blogspot.com") -# => "something.blogspot.com" - -# Extract a domain excluding private domains -PublicSuffix.domain("something.blogspot.com", ignore_private: true) -# => "blogspot.com" - -# It also works for #parse and #valid? -PublicSuffix.parse("something.blogspot.com", ignore_private: true) -PublicSuffix.valid?("something.blogspot.com", ignore_private: true) -``` - -If you don't care about private domains at all, it's more efficient to exclude them when the list is parsed: - -```ruby -# Disable support for private TLDs -PublicSuffix::List.default = PublicSuffix::List.parse(File.read(PublicSuffix::List::DEFAULT_LIST_PATH), private_domains: false) -# => "blogspot.com" -PublicSuffix.domain("something.blogspot.com") -# => "blogspot.com" -``` - -## Add domain to list - -If you want to manually add a domain to the list just run: - -```ruby -PublicSuffix::List.default << PublicSuffix::Rule.factory('onmicrosoft.com') -``` - -## What is the Public Suffix List? - -The [Public Suffix List](https://publicsuffix.org) is a cross-vendor initiative to provide an accurate list of domain name suffixes. - -The Public Suffix List is an initiative of the Mozilla Project, but is maintained as a community resource. It is available for use in any software, but was originally created to meet the needs of browser manufacturers. - -A "public suffix" is one under which Internet users can directly register names. Some examples of public suffixes are ".com", ".co.uk" and "pvt.k12.wy.us". The Public Suffix List is a list of all known public suffixes. - - -## Why the Public Suffix List is better than any available Regular Expression parser? - -Previously, browsers used an algorithm which basically only denied setting wide-ranging cookies for top-level domains with no dots (e.g. com or org). However, this did not work for top-level domains where only third-level registrations are allowed (e.g. co.uk). In these cases, websites could set a cookie for co.uk which will be passed onto every website registered under co.uk. - -Clearly, this was a security risk as it allowed websites other than the one setting the cookie to read it, and therefore potentially extract sensitive information. - -Since there is no algorithmic method of finding the highest level at which a domain may be registered for a particular top-level domain (the policies differ with each registry), the only method is to create a list of all top-level domains and the level at which domains can be registered. This is the aim of the effective TLD list. - -As well as being used to prevent cookies from being set where they shouldn't be, the list can also potentially be used for other applications where the registry controlled and privately controlled parts of a domain name need to be known, for example when grouping by top-level domains. - -Source: https://wiki.mozilla.org/Public_Suffix_List - -Not convinced yet? Check out [this real world example](https://stackoverflow.com/q/288810/123527). - - -## Does PublicSuffix make requests to Public Suffix List website? - -No. PublicSuffix comes with a bundled list. It does not make any HTTP requests to parse or validate a domain. - - -## Support - -Library documentation is auto-generated from the [README](https://github.com/weppos/publicsuffix-ruby/blob/master/README.md) and the source code, and it's available at https://rubydoc.info/gems/public_suffix. - -- The PublicSuffix bug tracker is here: https://github.com/weppos/publicsuffix-ruby/issues -- The PublicSuffix code repository is here: https://github.com/weppos/publicsuffix-ruby. Contributions are welcome! Please include tests and/or feature coverage for every patch, and create a topic branch for every separate change you make. - -[Consider subscribing to Tidelift which provides Enterprise support for this project](https://tidelift.com/subscription/pkg/rubygems-public-suffix?utm_source=rubygems-public-suffix&utm_medium=referral&utm_campaign=readme) as part of the Tidelift Subscription. Tidelift subscriptions also help the maintainers by funding the project, which in turn allows us to ship releases, bugfixes, and security updates more often. - - -## Security and Vulnerability Reporting - -Full information and description of our security policy please visit [`SECURITY.md`](SECURITY.md) - - -## Changelog - -See the [CHANGELOG.md](CHANGELOG.md) file for details. - - -## License - -Copyright (c) 2009-2023 Simone Carletti. This is Free Software distributed under the MIT license. - -The [Public Suffix List source](https://publicsuffix.org/list/) is subject to the terms of the Mozilla Public License, v. 2.0. - -## Definitions - -tld = Top level domain, this is in reference to the last segment of a domain, sometimes the part that is directly after the "dot" symbol. For example, `mozilla.org`, the `.org` portion is the tld. - -sld = Second level domain, a domain that is directly below a top-level domain. For example, in `https://www.mozilla.org/en-US/`, `mozilla` is the second-level domain of the .org tld. - -trd = Transit routing domain, or known as a subdomain. This is the part of the domain that is before the sld or root domain. For example, in `https://www.mozilla.org/en-US/`, `www` is the trd. - -FQDN = Fully Qualified Domain Names, are domain names that are written with the hostname and the domain name, and include the top-level domain, the format looks like `[hostname].[domain].[tld].` for ex. `[www].[mozilla].[org]`. diff --git a/bundle/ruby/3.2.0/gems/public_suffix-5.0.4/SECURITY.md b/bundle/ruby/3.2.0/gems/public_suffix-5.0.4/SECURITY.md deleted file mode 100644 index 5cbbec71..00000000 --- a/bundle/ruby/3.2.0/gems/public_suffix-5.0.4/SECURITY.md +++ /dev/null @@ -1,25 +0,0 @@ -# Security Policy - -## Supported Versions - -Security updates are provided only for the current minor version. - -If you are using a previous minor version, we recommend to upgrade to the current minor version. -This project uses [semantic versioning](https://semver.org/), therefore you can upgrade to a more recent minor version without incurring into breaking changes. - -Exceptionally, we may support previous minor versions upon request if there are significant reasons preventing to immediately switch the latest minor version. - -Older major versions are no longer supported. - - -## Reporting a Vulnerability - -To make a report, please email weppos@weppos.net. - -> [!IMPORTANT] -> Please consider encrypting your report with GPG using the key [0x420da82a989398df](https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x420da82a989398df). - - -## Tracking Security Updates - -Information about security vulnerabilities are published in the [Security Advisories](https://github.com/weppos/publicsuffix-ruby/security/advisories) page. diff --git a/bundle/ruby/3.2.0/gems/public_suffix-5.0.4/data/list.txt b/bundle/ruby/3.2.0/gems/public_suffix-5.0.4/data/list.txt deleted file mode 100644 index fff6e9a4..00000000 --- a/bundle/ruby/3.2.0/gems/public_suffix-5.0.4/data/list.txt +++ /dev/null @@ -1,15431 +0,0 @@ -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this -// file, You can obtain one at https://mozilla.org/MPL/2.0/. - -// Please pull this list from, and only from https://publicsuffix.org/list/public_suffix_list.dat, -// rather than any other VCS sites. Pulling from any other URL is not guaranteed to be supported. - -// Instructions on pulling and using this list can be found at https://publicsuffix.org/list/. - -// ===BEGIN ICANN DOMAINS=== - -// ac : http://nic.ac/rules.htm -ac -com.ac -edu.ac -gov.ac -net.ac -mil.ac -org.ac - -// ad : https://en.wikipedia.org/wiki/.ad -ad -nom.ad - -// ae : https://tdra.gov.ae/en/aeda/ae-policies -ae -co.ae -net.ae -org.ae -sch.ae -ac.ae -gov.ae -mil.ae - -// aero : see https://www.information.aero/index.php?id=66 -aero -accident-investigation.aero -accident-prevention.aero -aerobatic.aero -aeroclub.aero -aerodrome.aero -agents.aero -aircraft.aero -airline.aero -airport.aero -air-surveillance.aero -airtraffic.aero -air-traffic-control.aero -ambulance.aero -amusement.aero -association.aero -author.aero -ballooning.aero -broker.aero -caa.aero -cargo.aero -catering.aero -certification.aero -championship.aero -charter.aero -civilaviation.aero -club.aero -conference.aero -consultant.aero -consulting.aero -control.aero -council.aero -crew.aero -design.aero -dgca.aero -educator.aero -emergency.aero -engine.aero -engineer.aero -entertainment.aero -equipment.aero -exchange.aero -express.aero -federation.aero -flight.aero -fuel.aero -gliding.aero -government.aero -groundhandling.aero -group.aero -hanggliding.aero -homebuilt.aero -insurance.aero -journal.aero -journalist.aero -leasing.aero -logistics.aero -magazine.aero -maintenance.aero -media.aero -microlight.aero -modelling.aero -navigation.aero -parachuting.aero -paragliding.aero -passenger-association.aero -pilot.aero -press.aero -production.aero -recreation.aero -repbody.aero -res.aero -research.aero -rotorcraft.aero -safety.aero -scientist.aero -services.aero -show.aero -skydiving.aero -software.aero -student.aero -trader.aero -trading.aero -trainer.aero -union.aero -workinggroup.aero -works.aero - -// af : http://www.nic.af/help.jsp -af -gov.af -com.af -org.af -net.af -edu.af - -// ag : http://www.nic.ag/prices.htm -ag -com.ag -org.ag -net.ag -co.ag -nom.ag - -// ai : http://nic.com.ai/ -ai -off.ai -com.ai -net.ai -org.ai - -// al : http://www.ert.gov.al/ert_alb/faq_det.html?Id=31 -al -com.al -edu.al -gov.al -mil.al -net.al -org.al - -// am : https://www.amnic.net/policy/en/Policy_EN.pdf -am -co.am -com.am -commune.am -net.am -org.am - -// ao : https://en.wikipedia.org/wiki/.ao -// http://www.dns.ao/REGISTR.DOC -ao -ed.ao -gv.ao -og.ao -co.ao -pb.ao -it.ao - -// aq : https://en.wikipedia.org/wiki/.aq -aq - -// ar : https://nic.ar/es/nic-argentina/normativa -ar -bet.ar -com.ar -coop.ar -edu.ar -gob.ar -gov.ar -int.ar -mil.ar -musica.ar -mutual.ar -net.ar -org.ar -senasa.ar -tur.ar - -// arpa : https://en.wikipedia.org/wiki/.arpa -// Confirmed by registry 2008-06-18 -arpa -e164.arpa -in-addr.arpa -ip6.arpa -iris.arpa -uri.arpa -urn.arpa - -// as : https://en.wikipedia.org/wiki/.as -as -gov.as - -// asia : https://en.wikipedia.org/wiki/.asia -asia - -// at : https://en.wikipedia.org/wiki/.at -// Confirmed by registry 2008-06-17 -at -ac.at -co.at -gv.at -or.at -sth.ac.at - -// au : https://en.wikipedia.org/wiki/.au -// http://www.auda.org.au/ -au -// 2LDs -com.au -net.au -org.au -edu.au -gov.au -asn.au -id.au -// Historic 2LDs (closed to new registration, but sites still exist) -info.au -conf.au -oz.au -// CGDNs - http://www.cgdn.org.au/ -act.au -nsw.au -nt.au -qld.au -sa.au -tas.au -vic.au -wa.au -// 3LDs -act.edu.au -catholic.edu.au -// eq.edu.au - Removed at the request of the Queensland Department of Education -nsw.edu.au -nt.edu.au -qld.edu.au -sa.edu.au -tas.edu.au -vic.edu.au -wa.edu.au -// act.gov.au Bug 984824 - Removed at request of Greg Tankard -// nsw.gov.au Bug 547985 - Removed at request of -// nt.gov.au Bug 940478 - Removed at request of Greg Connors -qld.gov.au -sa.gov.au -tas.gov.au -vic.gov.au -wa.gov.au -// 4LDs -// education.tas.edu.au - Removed at the request of the Department of Education Tasmania -schools.nsw.edu.au - -// aw : https://en.wikipedia.org/wiki/.aw -aw -com.aw - -// ax : https://en.wikipedia.org/wiki/.ax -ax - -// az : https://en.wikipedia.org/wiki/.az -az -com.az -net.az -int.az -gov.az -org.az -edu.az -info.az -pp.az -mil.az -name.az -pro.az -biz.az - -// ba : http://nic.ba/users_data/files/pravilnik_o_registraciji.pdf -ba -com.ba -edu.ba -gov.ba -mil.ba -net.ba -org.ba - -// bb : https://en.wikipedia.org/wiki/.bb -bb -biz.bb -co.bb -com.bb -edu.bb -gov.bb -info.bb -net.bb -org.bb -store.bb -tv.bb - -// bd : https://en.wikipedia.org/wiki/.bd -*.bd - -// be : https://en.wikipedia.org/wiki/.be -// Confirmed by registry 2008-06-08 -be -ac.be - -// bf : https://en.wikipedia.org/wiki/.bf -bf -gov.bf - -// bg : https://en.wikipedia.org/wiki/.bg -// https://www.register.bg/user/static/rules/en/index.html -bg -a.bg -b.bg -c.bg -d.bg -e.bg -f.bg -g.bg -h.bg -i.bg -j.bg -k.bg -l.bg -m.bg -n.bg -o.bg -p.bg -q.bg -r.bg -s.bg -t.bg -u.bg -v.bg -w.bg -x.bg -y.bg -z.bg -0.bg -1.bg -2.bg -3.bg -4.bg -5.bg -6.bg -7.bg -8.bg -9.bg - -// bh : https://en.wikipedia.org/wiki/.bh -bh -com.bh -edu.bh -net.bh -org.bh -gov.bh - -// bi : https://en.wikipedia.org/wiki/.bi -// http://whois.nic.bi/ -bi -co.bi -com.bi -edu.bi -or.bi -org.bi - -// biz : https://en.wikipedia.org/wiki/.biz -biz - -// bj : https://nic.bj/bj-suffixes.txt -// submitted by registry -bj -africa.bj -agro.bj -architectes.bj -assur.bj -avocats.bj -co.bj -com.bj -eco.bj -econo.bj -edu.bj -info.bj -loisirs.bj -money.bj -net.bj -org.bj -ote.bj -resto.bj -restaurant.bj -tourism.bj -univ.bj - -// bm : http://www.bermudanic.bm/dnr-text.txt -bm -com.bm -edu.bm -gov.bm -net.bm -org.bm - -// bn : http://www.bnnic.bn/faqs -bn -com.bn -edu.bn -gov.bn -net.bn -org.bn - -// bo : https://nic.bo/delegacion2015.php#h-1.10 -bo -com.bo -edu.bo -gob.bo -int.bo -org.bo -net.bo -mil.bo -tv.bo -web.bo -// Social Domains -academia.bo -agro.bo -arte.bo -blog.bo -bolivia.bo -ciencia.bo -cooperativa.bo -democracia.bo -deporte.bo -ecologia.bo -economia.bo -empresa.bo -indigena.bo -industria.bo -info.bo -medicina.bo -movimiento.bo -musica.bo -natural.bo -nombre.bo -noticias.bo -patria.bo -politica.bo -profesional.bo -plurinacional.bo -pueblo.bo -revista.bo -salud.bo -tecnologia.bo -tksat.bo -transporte.bo -wiki.bo - -// br : http://registro.br/dominio/categoria.html -// Submitted by registry -br -9guacu.br -abc.br -adm.br -adv.br -agr.br -aju.br -am.br -anani.br -aparecida.br -app.br -arq.br -art.br -ato.br -b.br -barueri.br -belem.br -bhz.br -bib.br -bio.br -blog.br -bmd.br -boavista.br -bsb.br -campinagrande.br -campinas.br -caxias.br -cim.br -cng.br -cnt.br -com.br -contagem.br -coop.br -coz.br -cri.br -cuiaba.br -curitiba.br -def.br -des.br -det.br -dev.br -ecn.br -eco.br -edu.br -emp.br -enf.br -eng.br -esp.br -etc.br -eti.br -far.br -feira.br -flog.br -floripa.br -fm.br -fnd.br -fortal.br -fot.br -foz.br -fst.br -g12.br -geo.br -ggf.br -goiania.br -gov.br -// gov.br 26 states + df https://en.wikipedia.org/wiki/States_of_Brazil -ac.gov.br -al.gov.br -am.gov.br -ap.gov.br -ba.gov.br -ce.gov.br -df.gov.br -es.gov.br -go.gov.br -ma.gov.br -mg.gov.br -ms.gov.br -mt.gov.br -pa.gov.br -pb.gov.br -pe.gov.br -pi.gov.br -pr.gov.br -rj.gov.br -rn.gov.br -ro.gov.br -rr.gov.br -rs.gov.br -sc.gov.br -se.gov.br -sp.gov.br -to.gov.br -gru.br -imb.br -ind.br -inf.br -jab.br -jampa.br -jdf.br -joinville.br -jor.br -jus.br -leg.br -lel.br -log.br -londrina.br -macapa.br -maceio.br -manaus.br -maringa.br -mat.br -med.br -mil.br -morena.br -mp.br -mus.br -natal.br -net.br -niteroi.br -*.nom.br -not.br -ntr.br -odo.br -ong.br -org.br -osasco.br -palmas.br -poa.br -ppg.br -pro.br -psc.br -psi.br -pvh.br -qsl.br -radio.br -rec.br -recife.br -rep.br -ribeirao.br -rio.br -riobranco.br -riopreto.br -salvador.br -sampa.br -santamaria.br -santoandre.br -saobernardo.br -saogonca.br -seg.br -sjc.br -slg.br -slz.br -sorocaba.br -srv.br -taxi.br -tc.br -tec.br -teo.br -the.br -tmp.br -trd.br -tur.br -tv.br -udi.br -vet.br -vix.br -vlog.br -wiki.br -zlg.br - -// bs : http://www.nic.bs/rules.html -bs -com.bs -net.bs -org.bs -edu.bs -gov.bs - -// bt : https://en.wikipedia.org/wiki/.bt -bt -com.bt -edu.bt -gov.bt -net.bt -org.bt - -// bv : No registrations at this time. -// Submitted by registry -bv - -// bw : https://en.wikipedia.org/wiki/.bw -// http://www.gobin.info/domainname/bw.doc -// list of other 2nd level tlds ? -bw -co.bw -org.bw - -// by : https://en.wikipedia.org/wiki/.by -// http://tld.by/rules_2006_en.html -// list of other 2nd level tlds ? -by -gov.by -mil.by -// Official information does not indicate that com.by is a reserved -// second-level domain, but it's being used as one (see www.google.com.by and -// www.yahoo.com.by, for example), so we list it here for safety's sake. -com.by - -// http://hoster.by/ -of.by - -// bz : https://en.wikipedia.org/wiki/.bz -// http://www.belizenic.bz/ -bz -com.bz -net.bz -org.bz -edu.bz -gov.bz - -// ca : https://en.wikipedia.org/wiki/.ca -ca -// ca geographical names -ab.ca -bc.ca -mb.ca -nb.ca -nf.ca -nl.ca -ns.ca -nt.ca -nu.ca -on.ca -pe.ca -qc.ca -sk.ca -yk.ca -// gc.ca: https://en.wikipedia.org/wiki/.gc.ca -// see also: http://registry.gc.ca/en/SubdomainFAQ -gc.ca - -// cat : https://en.wikipedia.org/wiki/.cat -cat - -// cc : https://en.wikipedia.org/wiki/.cc -cc - -// cd : https://en.wikipedia.org/wiki/.cd -// see also: https://www.nic.cd/domain/insertDomain_2.jsp?act=1 -cd -gov.cd - -// cf : https://en.wikipedia.org/wiki/.cf -cf - -// cg : https://en.wikipedia.org/wiki/.cg -cg - -// ch : https://en.wikipedia.org/wiki/.ch -ch - -// ci : https://en.wikipedia.org/wiki/.ci -// http://www.nic.ci/index.php?page=charte -ci -org.ci -or.ci -com.ci -co.ci -edu.ci -ed.ci -ac.ci -net.ci -go.ci -asso.ci -aéroport.ci -int.ci -presse.ci -md.ci -gouv.ci - -// ck : https://en.wikipedia.org/wiki/.ck -*.ck -!www.ck - -// cl : https://www.nic.cl -// Confirmed by .CL registry -cl -co.cl -gob.cl -gov.cl -mil.cl - -// cm : https://en.wikipedia.org/wiki/.cm plus bug 981927 -cm -co.cm -com.cm -gov.cm -net.cm - -// cn : https://en.wikipedia.org/wiki/.cn -// Submitted by registry -cn -ac.cn -com.cn -edu.cn -gov.cn -net.cn -org.cn -mil.cn -公司.cn -网络.cn -網絡.cn -// cn geographic names -ah.cn -bj.cn -cq.cn -fj.cn -gd.cn -gs.cn -gz.cn -gx.cn -ha.cn -hb.cn -he.cn -hi.cn -hl.cn -hn.cn -jl.cn -js.cn -jx.cn -ln.cn -nm.cn -nx.cn -qh.cn -sc.cn -sd.cn -sh.cn -sn.cn -sx.cn -tj.cn -xj.cn -xz.cn -yn.cn -zj.cn -hk.cn -mo.cn -tw.cn - -// co : https://en.wikipedia.org/wiki/.co -// Submitted by registry -co -arts.co -com.co -edu.co -firm.co -gov.co -info.co -int.co -mil.co -net.co -nom.co -org.co -rec.co -web.co - -// com : https://en.wikipedia.org/wiki/.com -com - -// coop : https://en.wikipedia.org/wiki/.coop -coop - -// cr : http://www.nic.cr/niccr_publico/showRegistroDominiosScreen.do -cr -ac.cr -co.cr -ed.cr -fi.cr -go.cr -or.cr -sa.cr - -// cu : https://en.wikipedia.org/wiki/.cu -cu -com.cu -edu.cu -org.cu -net.cu -gov.cu -inf.cu - -// cv : https://en.wikipedia.org/wiki/.cv -// cv : http://www.dns.cv/tldcv_portal/do?com=DS;5446457100;111;+PAGE(4000018)+K-CAT-CODIGO(RDOM)+RCNT(100); <- registration rules -cv -com.cv -edu.cv -int.cv -nome.cv -org.cv - -// cw : http://www.una.cw/cw_registry/ -// Confirmed by registry 2013-03-26 -cw -com.cw -edu.cw -net.cw -org.cw - -// cx : https://en.wikipedia.org/wiki/.cx -// list of other 2nd level tlds ? -cx -gov.cx - -// cy : http://www.nic.cy/ -// Submitted by registry Panayiotou Fotia -// namespace policies URL https://www.nic.cy/portal//sites/default/files/symfonia_gia_eggrafi.pdf -cy -ac.cy -biz.cy -com.cy -ekloges.cy -gov.cy -ltd.cy -mil.cy -net.cy -org.cy -press.cy -pro.cy -tm.cy - -// cz : https://en.wikipedia.org/wiki/.cz -cz - -// de : https://en.wikipedia.org/wiki/.de -// Confirmed by registry (with technical -// reservations) 2008-07-01 -de - -// dj : https://en.wikipedia.org/wiki/.dj -dj - -// dk : https://en.wikipedia.org/wiki/.dk -// Confirmed by registry 2008-06-17 -dk - -// dm : https://en.wikipedia.org/wiki/.dm -dm -com.dm -net.dm -org.dm -edu.dm -gov.dm - -// do : https://en.wikipedia.org/wiki/.do -do -art.do -com.do -edu.do -gob.do -gov.do -mil.do -net.do -org.do -sld.do -web.do - -// dz : http://www.nic.dz/images/pdf_nic/charte.pdf -dz -art.dz -asso.dz -com.dz -edu.dz -gov.dz -org.dz -net.dz -pol.dz -soc.dz -tm.dz - -// ec : http://www.nic.ec/reg/paso1.asp -// Submitted by registry -ec -com.ec -info.ec -net.ec -fin.ec -k12.ec -med.ec -pro.ec -org.ec -edu.ec -gov.ec -gob.ec -mil.ec - -// edu : https://en.wikipedia.org/wiki/.edu -edu - -// ee : http://www.eenet.ee/EENet/dom_reeglid.html#lisa_B -ee -edu.ee -gov.ee -riik.ee -lib.ee -med.ee -com.ee -pri.ee -aip.ee -org.ee -fie.ee - -// eg : https://en.wikipedia.org/wiki/.eg -eg -com.eg -edu.eg -eun.eg -gov.eg -mil.eg -name.eg -net.eg -org.eg -sci.eg - -// er : https://en.wikipedia.org/wiki/.er -*.er - -// es : https://www.nic.es/site_ingles/ingles/dominios/index.html -es -com.es -nom.es -org.es -gob.es -edu.es - -// et : https://en.wikipedia.org/wiki/.et -et -com.et -gov.et -org.et -edu.et -biz.et -name.et -info.et -net.et - -// eu : https://en.wikipedia.org/wiki/.eu -eu - -// fi : https://en.wikipedia.org/wiki/.fi -fi -// aland.fi : https://en.wikipedia.org/wiki/.ax -// This domain is being phased out in favor of .ax. As there are still many -// domains under aland.fi, we still keep it on the list until aland.fi is -// completely removed. -// TODO: Check for updates (expected to be phased out around Q1/2009) -aland.fi - -// fj : http://domains.fj/ -// Submitted by registry 2020-02-11 -fj -ac.fj -biz.fj -com.fj -gov.fj -info.fj -mil.fj -name.fj -net.fj -org.fj -pro.fj - -// fk : https://en.wikipedia.org/wiki/.fk -*.fk - -// fm : https://en.wikipedia.org/wiki/.fm -com.fm -edu.fm -net.fm -org.fm -fm - -// fo : https://en.wikipedia.org/wiki/.fo -fo - -// fr : https://www.afnic.fr/ https://www.afnic.fr/wp-media/uploads/2022/12/afnic-naming-policy-2023-01-01.pdf -fr -asso.fr -com.fr -gouv.fr -nom.fr -prd.fr -tm.fr -// Other SLDs now selfmanaged out of AFNIC range. Former "domaines sectoriels", still registration suffixes -avoues.fr -cci.fr -greta.fr -huissier-justice.fr - -// ga : https://en.wikipedia.org/wiki/.ga -ga - -// gb : This registry is effectively dormant -// Submitted by registry -gb - -// gd : https://en.wikipedia.org/wiki/.gd -edu.gd -gov.gd -gd - -// ge : http://www.nic.net.ge/policy_en.pdf -ge -com.ge -edu.ge -gov.ge -org.ge -mil.ge -net.ge -pvt.ge - -// gf : https://en.wikipedia.org/wiki/.gf -gf - -// gg : http://www.channelisles.net/register-domains/ -// Confirmed by registry 2013-11-28 -gg -co.gg -net.gg -org.gg - -// gh : https://en.wikipedia.org/wiki/.gh -// see also: http://www.nic.gh/reg_now.php -// Although domains directly at second level are not possible at the moment, -// they have been possible for some time and may come back. -gh -com.gh -edu.gh -gov.gh -org.gh -mil.gh - -// gi : http://www.nic.gi/rules.html -gi -com.gi -ltd.gi -gov.gi -mod.gi -edu.gi -org.gi - -// gl : https://en.wikipedia.org/wiki/.gl -// http://nic.gl -gl -co.gl -com.gl -edu.gl -net.gl -org.gl - -// gm : http://www.nic.gm/htmlpages%5Cgm-policy.htm -gm - -// gn : http://psg.com/dns/gn/gn.txt -// Submitted by registry -gn -ac.gn -com.gn -edu.gn -gov.gn -org.gn -net.gn - -// gov : https://en.wikipedia.org/wiki/.gov -gov - -// gp : http://www.nic.gp/index.php?lang=en -gp -com.gp -net.gp -mobi.gp -edu.gp -org.gp -asso.gp - -// gq : https://en.wikipedia.org/wiki/.gq -gq - -// gr : https://grweb.ics.forth.gr/english/1617-B-2005.html -// Submitted by registry -gr -com.gr -edu.gr -net.gr -org.gr -gov.gr - -// gs : https://en.wikipedia.org/wiki/.gs -gs - -// gt : https://www.gt/sitio/registration_policy.php?lang=en -gt -com.gt -edu.gt -gob.gt -ind.gt -mil.gt -net.gt -org.gt - -// gu : http://gadao.gov.gu/register.html -// University of Guam : https://www.uog.edu -// Submitted by uognoc@triton.uog.edu -gu -com.gu -edu.gu -gov.gu -guam.gu -info.gu -net.gu -org.gu -web.gu - -// gw : https://en.wikipedia.org/wiki/.gw -// gw : https://nic.gw/regras/ -gw - -// gy : https://en.wikipedia.org/wiki/.gy -// http://registry.gy/ -gy -co.gy -com.gy -edu.gy -gov.gy -net.gy -org.gy - -// hk : https://www.hkirc.hk -// Submitted by registry -hk -com.hk -edu.hk -gov.hk -idv.hk -net.hk -org.hk -公司.hk -教育.hk -敎育.hk -政府.hk -個人.hk -个人.hk -箇人.hk -網络.hk -网络.hk -组織.hk -網絡.hk -网絡.hk -组织.hk -組織.hk -組织.hk - -// hm : https://en.wikipedia.org/wiki/.hm -hm - -// hn : http://www.nic.hn/politicas/ps02,,05.html -hn -com.hn -edu.hn -org.hn -net.hn -mil.hn -gob.hn - -// hr : http://www.dns.hr/documents/pdf/HRTLD-regulations.pdf -hr -iz.hr -from.hr -name.hr -com.hr - -// ht : http://www.nic.ht/info/charte.cfm -ht -com.ht -shop.ht -firm.ht -info.ht -adult.ht -net.ht -pro.ht -org.ht -med.ht -art.ht -coop.ht -pol.ht -asso.ht -edu.ht -rel.ht -gouv.ht -perso.ht - -// hu : http://www.domain.hu/domain/English/sld.html -// Confirmed by registry 2008-06-12 -hu -co.hu -info.hu -org.hu -priv.hu -sport.hu -tm.hu -2000.hu -agrar.hu -bolt.hu -casino.hu -city.hu -erotica.hu -erotika.hu -film.hu -forum.hu -games.hu -hotel.hu -ingatlan.hu -jogasz.hu -konyvelo.hu -lakas.hu -media.hu -news.hu -reklam.hu -sex.hu -shop.hu -suli.hu -szex.hu -tozsde.hu -utazas.hu -video.hu - -// id : https://pandi.id/en/domain/registration-requirements/ -id -ac.id -biz.id -co.id -desa.id -go.id -mil.id -my.id -net.id -or.id -ponpes.id -sch.id -web.id - -// ie : https://en.wikipedia.org/wiki/.ie -ie -gov.ie - -// il : http://www.isoc.org.il/domains/ -// see also: https://en.isoc.org.il/il-cctld/registration-rules -// ISOC-IL (operated by .il Registry) -il -ac.il -co.il -gov.il -idf.il -k12.il -muni.il -net.il -org.il -// xn--4dbrk0ce ("Israel", Hebrew) : IL -ישראל -// xn--4dbgdty6c.xn--4dbrk0ce. -אקדמיה.ישראל -// xn--5dbhl8d.xn--4dbrk0ce. -ישוב.ישראל -// xn--8dbq2a.xn--4dbrk0ce. -צהל.ישראל -// xn--hebda8b.xn--4dbrk0ce. -ממשל.ישראל - -// im : https://www.nic.im/ -// Submitted by registry -im -ac.im -co.im -com.im -ltd.co.im -net.im -org.im -plc.co.im -tt.im -tv.im - -// in : https://en.wikipedia.org/wiki/.in -// see also: https://registry.in/policies -// Please note, that nic.in is not an official eTLD, but used by most -// government institutions. -in -5g.in -6g.in -ac.in -ai.in -am.in -bihar.in -biz.in -business.in -ca.in -cn.in -co.in -com.in -coop.in -cs.in -delhi.in -dr.in -edu.in -er.in -firm.in -gen.in -gov.in -gujarat.in -ind.in -info.in -int.in -internet.in -io.in -me.in -mil.in -net.in -nic.in -org.in -pg.in -post.in -pro.in -res.in -travel.in -tv.in -uk.in -up.in -us.in - -// info : https://en.wikipedia.org/wiki/.info -info - -// int : https://en.wikipedia.org/wiki/.int -// Confirmed by registry 2008-06-18 -int -eu.int - -// io : http://www.nic.io/rules.htm -// list of other 2nd level tlds ? -io -com.io - -// iq : http://www.cmc.iq/english/iq/iqregister1.htm -iq -gov.iq -edu.iq -mil.iq -com.iq -org.iq -net.iq - -// ir : http://www.nic.ir/Terms_and_Conditions_ir,_Appendix_1_Domain_Rules -// Also see http://www.nic.ir/Internationalized_Domain_Names -// Two .ir entries added at request of , 2010-04-16 -ir -ac.ir -co.ir -gov.ir -id.ir -net.ir -org.ir -sch.ir -// xn--mgba3a4f16a.ir (.ir, Persian YEH) -ایران.ir -// xn--mgba3a4fra.ir (.ir, Arabic YEH) -ايران.ir - -// is : http://www.isnic.is/domain/rules.php -// Confirmed by registry 2008-12-06 -is -net.is -com.is -edu.is -gov.is -org.is -int.is - -// it : https://en.wikipedia.org/wiki/.it -it -gov.it -edu.it -// Reserved geo-names (regions and provinces): -// https://www.nic.it/sites/default/files/archivio/docs/Regulation_assignation_v7.1.pdf -// Regions -abr.it -abruzzo.it -aosta-valley.it -aostavalley.it -bas.it -basilicata.it -cal.it -calabria.it -cam.it -campania.it -emilia-romagna.it -emiliaromagna.it -emr.it -friuli-v-giulia.it -friuli-ve-giulia.it -friuli-vegiulia.it -friuli-venezia-giulia.it -friuli-veneziagiulia.it -friuli-vgiulia.it -friuliv-giulia.it -friulive-giulia.it -friulivegiulia.it -friulivenezia-giulia.it -friuliveneziagiulia.it -friulivgiulia.it -fvg.it -laz.it -lazio.it -lig.it -liguria.it -lom.it -lombardia.it -lombardy.it -lucania.it -mar.it -marche.it -mol.it -molise.it -piedmont.it -piemonte.it -pmn.it -pug.it -puglia.it -sar.it -sardegna.it -sardinia.it -sic.it -sicilia.it -sicily.it -taa.it -tos.it -toscana.it -trentin-sud-tirol.it -trentin-süd-tirol.it -trentin-sudtirol.it -trentin-südtirol.it -trentin-sued-tirol.it -trentin-suedtirol.it -trentino-a-adige.it -trentino-aadige.it -trentino-alto-adige.it -trentino-altoadige.it -trentino-s-tirol.it -trentino-stirol.it -trentino-sud-tirol.it -trentino-süd-tirol.it -trentino-sudtirol.it -trentino-südtirol.it -trentino-sued-tirol.it -trentino-suedtirol.it -trentino.it -trentinoa-adige.it -trentinoaadige.it -trentinoalto-adige.it -trentinoaltoadige.it -trentinos-tirol.it -trentinostirol.it -trentinosud-tirol.it -trentinosüd-tirol.it -trentinosudtirol.it -trentinosüdtirol.it -trentinosued-tirol.it -trentinosuedtirol.it -trentinsud-tirol.it -trentinsüd-tirol.it -trentinsudtirol.it -trentinsüdtirol.it -trentinsued-tirol.it -trentinsuedtirol.it -tuscany.it -umb.it -umbria.it -val-d-aosta.it -val-daosta.it -vald-aosta.it -valdaosta.it -valle-aosta.it -valle-d-aosta.it -valle-daosta.it -valleaosta.it -valled-aosta.it -valledaosta.it -vallee-aoste.it -vallée-aoste.it -vallee-d-aoste.it -vallée-d-aoste.it -valleeaoste.it -valléeaoste.it -valleedaoste.it -valléedaoste.it -vao.it -vda.it -ven.it -veneto.it -// Provinces -ag.it -agrigento.it -al.it -alessandria.it -alto-adige.it -altoadige.it -an.it -ancona.it -andria-barletta-trani.it -andria-trani-barletta.it -andriabarlettatrani.it -andriatranibarletta.it -ao.it -aosta.it -aoste.it -ap.it -aq.it -aquila.it -ar.it -arezzo.it -ascoli-piceno.it -ascolipiceno.it -asti.it -at.it -av.it -avellino.it -ba.it -balsan-sudtirol.it -balsan-südtirol.it -balsan-suedtirol.it -balsan.it -bari.it -barletta-trani-andria.it -barlettatraniandria.it -belluno.it -benevento.it -bergamo.it -bg.it -bi.it -biella.it -bl.it -bn.it -bo.it -bologna.it -bolzano-altoadige.it -bolzano.it -bozen-sudtirol.it -bozen-südtirol.it -bozen-suedtirol.it -bozen.it -br.it -brescia.it -brindisi.it -bs.it -bt.it -bulsan-sudtirol.it -bulsan-südtirol.it -bulsan-suedtirol.it -bulsan.it -bz.it -ca.it -cagliari.it -caltanissetta.it -campidano-medio.it -campidanomedio.it -campobasso.it -carbonia-iglesias.it -carboniaiglesias.it -carrara-massa.it -carraramassa.it -caserta.it -catania.it -catanzaro.it -cb.it -ce.it -cesena-forli.it -cesena-forlì.it -cesenaforli.it -cesenaforlì.it -ch.it -chieti.it -ci.it -cl.it -cn.it -co.it -como.it -cosenza.it -cr.it -cremona.it -crotone.it -cs.it -ct.it -cuneo.it -cz.it -dell-ogliastra.it -dellogliastra.it -en.it -enna.it -fc.it -fe.it -fermo.it -ferrara.it -fg.it -fi.it -firenze.it -florence.it -fm.it -foggia.it -forli-cesena.it -forlì-cesena.it -forlicesena.it -forlìcesena.it -fr.it -frosinone.it -ge.it -genoa.it -genova.it -go.it -gorizia.it -gr.it -grosseto.it -iglesias-carbonia.it -iglesiascarbonia.it -im.it -imperia.it -is.it -isernia.it -kr.it -la-spezia.it -laquila.it -laspezia.it -latina.it -lc.it -le.it -lecce.it -lecco.it -li.it -livorno.it -lo.it -lodi.it -lt.it -lu.it -lucca.it -macerata.it -mantova.it -massa-carrara.it -massacarrara.it -matera.it -mb.it -mc.it -me.it -medio-campidano.it -mediocampidano.it -messina.it -mi.it -milan.it -milano.it -mn.it -mo.it -modena.it -monza-brianza.it -monza-e-della-brianza.it -monza.it -monzabrianza.it -monzaebrianza.it -monzaedellabrianza.it -ms.it -mt.it -na.it -naples.it -napoli.it -no.it -novara.it -nu.it -nuoro.it -og.it -ogliastra.it -olbia-tempio.it -olbiatempio.it -or.it -oristano.it -ot.it -pa.it -padova.it -padua.it -palermo.it -parma.it -pavia.it -pc.it -pd.it -pe.it -perugia.it -pesaro-urbino.it -pesarourbino.it -pescara.it -pg.it -pi.it -piacenza.it -pisa.it -pistoia.it -pn.it -po.it -pordenone.it -potenza.it -pr.it -prato.it -pt.it -pu.it -pv.it -pz.it -ra.it -ragusa.it -ravenna.it -rc.it -re.it -reggio-calabria.it -reggio-emilia.it -reggiocalabria.it -reggioemilia.it -rg.it -ri.it -rieti.it -rimini.it -rm.it -rn.it -ro.it -roma.it -rome.it -rovigo.it -sa.it -salerno.it -sassari.it -savona.it -si.it -siena.it -siracusa.it -so.it -sondrio.it -sp.it -sr.it -ss.it -suedtirol.it -südtirol.it -sv.it -ta.it -taranto.it -te.it -tempio-olbia.it -tempioolbia.it -teramo.it -terni.it -tn.it -to.it -torino.it -tp.it -tr.it -trani-andria-barletta.it -trani-barletta-andria.it -traniandriabarletta.it -tranibarlettaandria.it -trapani.it -trento.it -treviso.it -trieste.it -ts.it -turin.it -tv.it -ud.it -udine.it -urbino-pesaro.it -urbinopesaro.it -va.it -varese.it -vb.it -vc.it -ve.it -venezia.it -venice.it -verbania.it -vercelli.it -verona.it -vi.it -vibo-valentia.it -vibovalentia.it -vicenza.it -viterbo.it -vr.it -vs.it -vt.it -vv.it - -// je : http://www.channelisles.net/register-domains/ -// Confirmed by registry 2013-11-28 -je -co.je -net.je -org.je - -// jm : http://www.com.jm/register.html -*.jm - -// jo : http://www.dns.jo/Registration_policy.aspx -jo -com.jo -org.jo -net.jo -edu.jo -sch.jo -gov.jo -mil.jo -name.jo - -// jobs : https://en.wikipedia.org/wiki/.jobs -jobs - -// jp : https://en.wikipedia.org/wiki/.jp -// http://jprs.co.jp/en/jpdomain.html -// Submitted by registry -jp -// jp organizational type names -ac.jp -ad.jp -co.jp -ed.jp -go.jp -gr.jp -lg.jp -ne.jp -or.jp -// jp prefecture type names -aichi.jp -akita.jp -aomori.jp -chiba.jp -ehime.jp -fukui.jp -fukuoka.jp -fukushima.jp -gifu.jp -gunma.jp -hiroshima.jp -hokkaido.jp -hyogo.jp -ibaraki.jp -ishikawa.jp -iwate.jp -kagawa.jp -kagoshima.jp -kanagawa.jp -kochi.jp -kumamoto.jp -kyoto.jp -mie.jp -miyagi.jp -miyazaki.jp -nagano.jp -nagasaki.jp -nara.jp -niigata.jp -oita.jp -okayama.jp -okinawa.jp -osaka.jp -saga.jp -saitama.jp -shiga.jp -shimane.jp -shizuoka.jp -tochigi.jp -tokushima.jp -tokyo.jp -tottori.jp -toyama.jp -wakayama.jp -yamagata.jp -yamaguchi.jp -yamanashi.jp -栃木.jp -愛知.jp -愛媛.jp -兵庫.jp -熊本.jp -茨城.jp -北海道.jp -千葉.jp -和歌山.jp -長崎.jp -長野.jp -新潟.jp -青森.jp -静岡.jp -東京.jp -石川.jp -埼玉.jp -三重.jp -京都.jp -佐賀.jp -大分.jp -大阪.jp -奈良.jp -宮城.jp -宮崎.jp -富山.jp -山口.jp -山形.jp -山梨.jp -岩手.jp -岐阜.jp -岡山.jp -島根.jp -広島.jp -徳島.jp -沖縄.jp -滋賀.jp -神奈川.jp -福井.jp -福岡.jp -福島.jp -秋田.jp -群馬.jp -香川.jp -高知.jp -鳥取.jp -鹿児島.jp -// jp geographic type names -// http://jprs.jp/doc/rule/saisoku-1.html -*.kawasaki.jp -*.kitakyushu.jp -*.kobe.jp -*.nagoya.jp -*.sapporo.jp -*.sendai.jp -*.yokohama.jp -!city.kawasaki.jp -!city.kitakyushu.jp -!city.kobe.jp -!city.nagoya.jp -!city.sapporo.jp -!city.sendai.jp -!city.yokohama.jp -// 4th level registration -aisai.aichi.jp -ama.aichi.jp -anjo.aichi.jp -asuke.aichi.jp -chiryu.aichi.jp -chita.aichi.jp -fuso.aichi.jp -gamagori.aichi.jp -handa.aichi.jp -hazu.aichi.jp -hekinan.aichi.jp -higashiura.aichi.jp -ichinomiya.aichi.jp -inazawa.aichi.jp -inuyama.aichi.jp -isshiki.aichi.jp -iwakura.aichi.jp -kanie.aichi.jp -kariya.aichi.jp -kasugai.aichi.jp -kira.aichi.jp -kiyosu.aichi.jp -komaki.aichi.jp -konan.aichi.jp -kota.aichi.jp -mihama.aichi.jp -miyoshi.aichi.jp -nishio.aichi.jp -nisshin.aichi.jp -obu.aichi.jp -oguchi.aichi.jp -oharu.aichi.jp -okazaki.aichi.jp -owariasahi.aichi.jp -seto.aichi.jp -shikatsu.aichi.jp -shinshiro.aichi.jp -shitara.aichi.jp -tahara.aichi.jp -takahama.aichi.jp -tobishima.aichi.jp -toei.aichi.jp -togo.aichi.jp -tokai.aichi.jp -tokoname.aichi.jp -toyoake.aichi.jp -toyohashi.aichi.jp -toyokawa.aichi.jp -toyone.aichi.jp -toyota.aichi.jp -tsushima.aichi.jp -yatomi.aichi.jp -akita.akita.jp -daisen.akita.jp -fujisato.akita.jp -gojome.akita.jp -hachirogata.akita.jp -happou.akita.jp -higashinaruse.akita.jp -honjo.akita.jp -honjyo.akita.jp -ikawa.akita.jp -kamikoani.akita.jp -kamioka.akita.jp -katagami.akita.jp -kazuno.akita.jp -kitaakita.akita.jp -kosaka.akita.jp -kyowa.akita.jp -misato.akita.jp -mitane.akita.jp -moriyoshi.akita.jp -nikaho.akita.jp -noshiro.akita.jp -odate.akita.jp -oga.akita.jp -ogata.akita.jp -semboku.akita.jp -yokote.akita.jp -yurihonjo.akita.jp -aomori.aomori.jp -gonohe.aomori.jp -hachinohe.aomori.jp -hashikami.aomori.jp -hiranai.aomori.jp -hirosaki.aomori.jp -itayanagi.aomori.jp -kuroishi.aomori.jp -misawa.aomori.jp -mutsu.aomori.jp -nakadomari.aomori.jp -noheji.aomori.jp -oirase.aomori.jp -owani.aomori.jp -rokunohe.aomori.jp -sannohe.aomori.jp -shichinohe.aomori.jp -shingo.aomori.jp -takko.aomori.jp -towada.aomori.jp -tsugaru.aomori.jp -tsuruta.aomori.jp -abiko.chiba.jp -asahi.chiba.jp -chonan.chiba.jp -chosei.chiba.jp -choshi.chiba.jp -chuo.chiba.jp -funabashi.chiba.jp -futtsu.chiba.jp -hanamigawa.chiba.jp -ichihara.chiba.jp -ichikawa.chiba.jp -ichinomiya.chiba.jp -inzai.chiba.jp -isumi.chiba.jp -kamagaya.chiba.jp -kamogawa.chiba.jp -kashiwa.chiba.jp -katori.chiba.jp -katsuura.chiba.jp -kimitsu.chiba.jp -kisarazu.chiba.jp -kozaki.chiba.jp -kujukuri.chiba.jp -kyonan.chiba.jp -matsudo.chiba.jp -midori.chiba.jp -mihama.chiba.jp -minamiboso.chiba.jp -mobara.chiba.jp -mutsuzawa.chiba.jp -nagara.chiba.jp -nagareyama.chiba.jp -narashino.chiba.jp -narita.chiba.jp -noda.chiba.jp -oamishirasato.chiba.jp -omigawa.chiba.jp -onjuku.chiba.jp -otaki.chiba.jp -sakae.chiba.jp -sakura.chiba.jp -shimofusa.chiba.jp -shirako.chiba.jp -shiroi.chiba.jp -shisui.chiba.jp -sodegaura.chiba.jp -sosa.chiba.jp -tako.chiba.jp -tateyama.chiba.jp -togane.chiba.jp -tohnosho.chiba.jp -tomisato.chiba.jp -urayasu.chiba.jp -yachimata.chiba.jp -yachiyo.chiba.jp -yokaichiba.chiba.jp -yokoshibahikari.chiba.jp -yotsukaido.chiba.jp -ainan.ehime.jp -honai.ehime.jp -ikata.ehime.jp -imabari.ehime.jp -iyo.ehime.jp -kamijima.ehime.jp -kihoku.ehime.jp -kumakogen.ehime.jp -masaki.ehime.jp -matsuno.ehime.jp -matsuyama.ehime.jp -namikata.ehime.jp -niihama.ehime.jp -ozu.ehime.jp -saijo.ehime.jp -seiyo.ehime.jp -shikokuchuo.ehime.jp -tobe.ehime.jp -toon.ehime.jp -uchiko.ehime.jp -uwajima.ehime.jp -yawatahama.ehime.jp -echizen.fukui.jp -eiheiji.fukui.jp -fukui.fukui.jp -ikeda.fukui.jp -katsuyama.fukui.jp -mihama.fukui.jp -minamiechizen.fukui.jp -obama.fukui.jp -ohi.fukui.jp -ono.fukui.jp -sabae.fukui.jp -sakai.fukui.jp -takahama.fukui.jp -tsuruga.fukui.jp -wakasa.fukui.jp -ashiya.fukuoka.jp -buzen.fukuoka.jp -chikugo.fukuoka.jp -chikuho.fukuoka.jp -chikujo.fukuoka.jp -chikushino.fukuoka.jp -chikuzen.fukuoka.jp -chuo.fukuoka.jp -dazaifu.fukuoka.jp -fukuchi.fukuoka.jp -hakata.fukuoka.jp -higashi.fukuoka.jp -hirokawa.fukuoka.jp -hisayama.fukuoka.jp -iizuka.fukuoka.jp -inatsuki.fukuoka.jp -kaho.fukuoka.jp -kasuga.fukuoka.jp -kasuya.fukuoka.jp -kawara.fukuoka.jp -keisen.fukuoka.jp -koga.fukuoka.jp -kurate.fukuoka.jp -kurogi.fukuoka.jp -kurume.fukuoka.jp -minami.fukuoka.jp -miyako.fukuoka.jp -miyama.fukuoka.jp -miyawaka.fukuoka.jp -mizumaki.fukuoka.jp -munakata.fukuoka.jp -nakagawa.fukuoka.jp -nakama.fukuoka.jp -nishi.fukuoka.jp -nogata.fukuoka.jp -ogori.fukuoka.jp -okagaki.fukuoka.jp -okawa.fukuoka.jp -oki.fukuoka.jp -omuta.fukuoka.jp -onga.fukuoka.jp -onojo.fukuoka.jp -oto.fukuoka.jp -saigawa.fukuoka.jp -sasaguri.fukuoka.jp -shingu.fukuoka.jp -shinyoshitomi.fukuoka.jp -shonai.fukuoka.jp -soeda.fukuoka.jp -sue.fukuoka.jp -tachiarai.fukuoka.jp -tagawa.fukuoka.jp -takata.fukuoka.jp -toho.fukuoka.jp -toyotsu.fukuoka.jp -tsuiki.fukuoka.jp -ukiha.fukuoka.jp -umi.fukuoka.jp -usui.fukuoka.jp -yamada.fukuoka.jp -yame.fukuoka.jp -yanagawa.fukuoka.jp -yukuhashi.fukuoka.jp -aizubange.fukushima.jp -aizumisato.fukushima.jp -aizuwakamatsu.fukushima.jp -asakawa.fukushima.jp -bandai.fukushima.jp -date.fukushima.jp -fukushima.fukushima.jp -furudono.fukushima.jp -futaba.fukushima.jp -hanawa.fukushima.jp -higashi.fukushima.jp -hirata.fukushima.jp -hirono.fukushima.jp -iitate.fukushima.jp -inawashiro.fukushima.jp -ishikawa.fukushima.jp -iwaki.fukushima.jp -izumizaki.fukushima.jp -kagamiishi.fukushima.jp -kaneyama.fukushima.jp -kawamata.fukushima.jp -kitakata.fukushima.jp -kitashiobara.fukushima.jp -koori.fukushima.jp -koriyama.fukushima.jp -kunimi.fukushima.jp -miharu.fukushima.jp -mishima.fukushima.jp -namie.fukushima.jp -nango.fukushima.jp -nishiaizu.fukushima.jp -nishigo.fukushima.jp -okuma.fukushima.jp -omotego.fukushima.jp -ono.fukushima.jp -otama.fukushima.jp -samegawa.fukushima.jp -shimogo.fukushima.jp -shirakawa.fukushima.jp -showa.fukushima.jp -soma.fukushima.jp -sukagawa.fukushima.jp -taishin.fukushima.jp -tamakawa.fukushima.jp -tanagura.fukushima.jp -tenei.fukushima.jp -yabuki.fukushima.jp -yamato.fukushima.jp -yamatsuri.fukushima.jp -yanaizu.fukushima.jp -yugawa.fukushima.jp -anpachi.gifu.jp -ena.gifu.jp -gifu.gifu.jp -ginan.gifu.jp -godo.gifu.jp -gujo.gifu.jp -hashima.gifu.jp -hichiso.gifu.jp -hida.gifu.jp -higashishirakawa.gifu.jp -ibigawa.gifu.jp -ikeda.gifu.jp -kakamigahara.gifu.jp -kani.gifu.jp -kasahara.gifu.jp -kasamatsu.gifu.jp -kawaue.gifu.jp -kitagata.gifu.jp -mino.gifu.jp -minokamo.gifu.jp -mitake.gifu.jp -mizunami.gifu.jp -motosu.gifu.jp -nakatsugawa.gifu.jp -ogaki.gifu.jp -sakahogi.gifu.jp -seki.gifu.jp -sekigahara.gifu.jp -shirakawa.gifu.jp -tajimi.gifu.jp -takayama.gifu.jp -tarui.gifu.jp -toki.gifu.jp -tomika.gifu.jp -wanouchi.gifu.jp -yamagata.gifu.jp -yaotsu.gifu.jp -yoro.gifu.jp -annaka.gunma.jp -chiyoda.gunma.jp -fujioka.gunma.jp -higashiagatsuma.gunma.jp -isesaki.gunma.jp -itakura.gunma.jp -kanna.gunma.jp -kanra.gunma.jp -katashina.gunma.jp -kawaba.gunma.jp -kiryu.gunma.jp -kusatsu.gunma.jp -maebashi.gunma.jp -meiwa.gunma.jp -midori.gunma.jp -minakami.gunma.jp -naganohara.gunma.jp -nakanojo.gunma.jp -nanmoku.gunma.jp -numata.gunma.jp -oizumi.gunma.jp -ora.gunma.jp -ota.gunma.jp -shibukawa.gunma.jp -shimonita.gunma.jp -shinto.gunma.jp -showa.gunma.jp -takasaki.gunma.jp -takayama.gunma.jp -tamamura.gunma.jp -tatebayashi.gunma.jp -tomioka.gunma.jp -tsukiyono.gunma.jp -tsumagoi.gunma.jp -ueno.gunma.jp -yoshioka.gunma.jp -asaminami.hiroshima.jp -daiwa.hiroshima.jp -etajima.hiroshima.jp -fuchu.hiroshima.jp -fukuyama.hiroshima.jp -hatsukaichi.hiroshima.jp -higashihiroshima.hiroshima.jp -hongo.hiroshima.jp -jinsekikogen.hiroshima.jp -kaita.hiroshima.jp -kui.hiroshima.jp -kumano.hiroshima.jp -kure.hiroshima.jp -mihara.hiroshima.jp -miyoshi.hiroshima.jp -naka.hiroshima.jp -onomichi.hiroshima.jp -osakikamijima.hiroshima.jp -otake.hiroshima.jp -saka.hiroshima.jp -sera.hiroshima.jp -seranishi.hiroshima.jp -shinichi.hiroshima.jp -shobara.hiroshima.jp -takehara.hiroshima.jp -abashiri.hokkaido.jp -abira.hokkaido.jp -aibetsu.hokkaido.jp -akabira.hokkaido.jp -akkeshi.hokkaido.jp -asahikawa.hokkaido.jp -ashibetsu.hokkaido.jp -ashoro.hokkaido.jp -assabu.hokkaido.jp -atsuma.hokkaido.jp -bibai.hokkaido.jp -biei.hokkaido.jp -bifuka.hokkaido.jp -bihoro.hokkaido.jp -biratori.hokkaido.jp -chippubetsu.hokkaido.jp -chitose.hokkaido.jp -date.hokkaido.jp -ebetsu.hokkaido.jp -embetsu.hokkaido.jp -eniwa.hokkaido.jp -erimo.hokkaido.jp -esan.hokkaido.jp -esashi.hokkaido.jp -fukagawa.hokkaido.jp -fukushima.hokkaido.jp -furano.hokkaido.jp -furubira.hokkaido.jp -haboro.hokkaido.jp -hakodate.hokkaido.jp -hamatonbetsu.hokkaido.jp -hidaka.hokkaido.jp -higashikagura.hokkaido.jp -higashikawa.hokkaido.jp -hiroo.hokkaido.jp -hokuryu.hokkaido.jp -hokuto.hokkaido.jp -honbetsu.hokkaido.jp -horokanai.hokkaido.jp -horonobe.hokkaido.jp -ikeda.hokkaido.jp -imakane.hokkaido.jp -ishikari.hokkaido.jp -iwamizawa.hokkaido.jp -iwanai.hokkaido.jp -kamifurano.hokkaido.jp -kamikawa.hokkaido.jp -kamishihoro.hokkaido.jp -kamisunagawa.hokkaido.jp -kamoenai.hokkaido.jp -kayabe.hokkaido.jp -kembuchi.hokkaido.jp -kikonai.hokkaido.jp -kimobetsu.hokkaido.jp -kitahiroshima.hokkaido.jp -kitami.hokkaido.jp -kiyosato.hokkaido.jp -koshimizu.hokkaido.jp -kunneppu.hokkaido.jp -kuriyama.hokkaido.jp -kuromatsunai.hokkaido.jp -kushiro.hokkaido.jp -kutchan.hokkaido.jp -kyowa.hokkaido.jp -mashike.hokkaido.jp -matsumae.hokkaido.jp -mikasa.hokkaido.jp -minamifurano.hokkaido.jp -mombetsu.hokkaido.jp -moseushi.hokkaido.jp -mukawa.hokkaido.jp -muroran.hokkaido.jp -naie.hokkaido.jp -nakagawa.hokkaido.jp -nakasatsunai.hokkaido.jp -nakatombetsu.hokkaido.jp -nanae.hokkaido.jp -nanporo.hokkaido.jp -nayoro.hokkaido.jp -nemuro.hokkaido.jp -niikappu.hokkaido.jp -niki.hokkaido.jp -nishiokoppe.hokkaido.jp -noboribetsu.hokkaido.jp -numata.hokkaido.jp -obihiro.hokkaido.jp -obira.hokkaido.jp -oketo.hokkaido.jp -okoppe.hokkaido.jp -otaru.hokkaido.jp -otobe.hokkaido.jp -otofuke.hokkaido.jp -otoineppu.hokkaido.jp -oumu.hokkaido.jp -ozora.hokkaido.jp -pippu.hokkaido.jp -rankoshi.hokkaido.jp -rebun.hokkaido.jp -rikubetsu.hokkaido.jp -rishiri.hokkaido.jp -rishirifuji.hokkaido.jp -saroma.hokkaido.jp -sarufutsu.hokkaido.jp -shakotan.hokkaido.jp -shari.hokkaido.jp -shibecha.hokkaido.jp -shibetsu.hokkaido.jp -shikabe.hokkaido.jp -shikaoi.hokkaido.jp -shimamaki.hokkaido.jp -shimizu.hokkaido.jp -shimokawa.hokkaido.jp -shinshinotsu.hokkaido.jp -shintoku.hokkaido.jp -shiranuka.hokkaido.jp -shiraoi.hokkaido.jp -shiriuchi.hokkaido.jp -sobetsu.hokkaido.jp -sunagawa.hokkaido.jp -taiki.hokkaido.jp -takasu.hokkaido.jp -takikawa.hokkaido.jp -takinoue.hokkaido.jp -teshikaga.hokkaido.jp -tobetsu.hokkaido.jp -tohma.hokkaido.jp -tomakomai.hokkaido.jp -tomari.hokkaido.jp -toya.hokkaido.jp -toyako.hokkaido.jp -toyotomi.hokkaido.jp -toyoura.hokkaido.jp -tsubetsu.hokkaido.jp -tsukigata.hokkaido.jp -urakawa.hokkaido.jp -urausu.hokkaido.jp -uryu.hokkaido.jp -utashinai.hokkaido.jp -wakkanai.hokkaido.jp -wassamu.hokkaido.jp -yakumo.hokkaido.jp -yoichi.hokkaido.jp -aioi.hyogo.jp -akashi.hyogo.jp -ako.hyogo.jp -amagasaki.hyogo.jp -aogaki.hyogo.jp -asago.hyogo.jp -ashiya.hyogo.jp -awaji.hyogo.jp -fukusaki.hyogo.jp -goshiki.hyogo.jp -harima.hyogo.jp -himeji.hyogo.jp -ichikawa.hyogo.jp -inagawa.hyogo.jp -itami.hyogo.jp -kakogawa.hyogo.jp -kamigori.hyogo.jp -kamikawa.hyogo.jp -kasai.hyogo.jp -kasuga.hyogo.jp -kawanishi.hyogo.jp -miki.hyogo.jp -minamiawaji.hyogo.jp -nishinomiya.hyogo.jp -nishiwaki.hyogo.jp -ono.hyogo.jp -sanda.hyogo.jp -sannan.hyogo.jp -sasayama.hyogo.jp -sayo.hyogo.jp -shingu.hyogo.jp -shinonsen.hyogo.jp -shiso.hyogo.jp -sumoto.hyogo.jp -taishi.hyogo.jp -taka.hyogo.jp -takarazuka.hyogo.jp -takasago.hyogo.jp -takino.hyogo.jp -tamba.hyogo.jp -tatsuno.hyogo.jp -toyooka.hyogo.jp -yabu.hyogo.jp -yashiro.hyogo.jp -yoka.hyogo.jp -yokawa.hyogo.jp -ami.ibaraki.jp -asahi.ibaraki.jp -bando.ibaraki.jp -chikusei.ibaraki.jp -daigo.ibaraki.jp -fujishiro.ibaraki.jp -hitachi.ibaraki.jp -hitachinaka.ibaraki.jp -hitachiomiya.ibaraki.jp -hitachiota.ibaraki.jp -ibaraki.ibaraki.jp -ina.ibaraki.jp -inashiki.ibaraki.jp -itako.ibaraki.jp -iwama.ibaraki.jp -joso.ibaraki.jp -kamisu.ibaraki.jp -kasama.ibaraki.jp -kashima.ibaraki.jp -kasumigaura.ibaraki.jp -koga.ibaraki.jp -miho.ibaraki.jp -mito.ibaraki.jp -moriya.ibaraki.jp -naka.ibaraki.jp -namegata.ibaraki.jp -oarai.ibaraki.jp -ogawa.ibaraki.jp -omitama.ibaraki.jp -ryugasaki.ibaraki.jp -sakai.ibaraki.jp -sakuragawa.ibaraki.jp -shimodate.ibaraki.jp -shimotsuma.ibaraki.jp -shirosato.ibaraki.jp -sowa.ibaraki.jp -suifu.ibaraki.jp -takahagi.ibaraki.jp -tamatsukuri.ibaraki.jp -tokai.ibaraki.jp -tomobe.ibaraki.jp -tone.ibaraki.jp -toride.ibaraki.jp -tsuchiura.ibaraki.jp -tsukuba.ibaraki.jp -uchihara.ibaraki.jp -ushiku.ibaraki.jp -yachiyo.ibaraki.jp -yamagata.ibaraki.jp -yawara.ibaraki.jp -yuki.ibaraki.jp -anamizu.ishikawa.jp -hakui.ishikawa.jp -hakusan.ishikawa.jp -kaga.ishikawa.jp -kahoku.ishikawa.jp -kanazawa.ishikawa.jp -kawakita.ishikawa.jp -komatsu.ishikawa.jp -nakanoto.ishikawa.jp -nanao.ishikawa.jp -nomi.ishikawa.jp -nonoichi.ishikawa.jp -noto.ishikawa.jp -shika.ishikawa.jp -suzu.ishikawa.jp -tsubata.ishikawa.jp -tsurugi.ishikawa.jp -uchinada.ishikawa.jp -wajima.ishikawa.jp -fudai.iwate.jp -fujisawa.iwate.jp -hanamaki.iwate.jp -hiraizumi.iwate.jp -hirono.iwate.jp -ichinohe.iwate.jp -ichinoseki.iwate.jp -iwaizumi.iwate.jp -iwate.iwate.jp -joboji.iwate.jp -kamaishi.iwate.jp -kanegasaki.iwate.jp -karumai.iwate.jp -kawai.iwate.jp -kitakami.iwate.jp -kuji.iwate.jp -kunohe.iwate.jp -kuzumaki.iwate.jp -miyako.iwate.jp -mizusawa.iwate.jp -morioka.iwate.jp -ninohe.iwate.jp -noda.iwate.jp -ofunato.iwate.jp -oshu.iwate.jp -otsuchi.iwate.jp -rikuzentakata.iwate.jp -shiwa.iwate.jp -shizukuishi.iwate.jp -sumita.iwate.jp -tanohata.iwate.jp -tono.iwate.jp -yahaba.iwate.jp -yamada.iwate.jp -ayagawa.kagawa.jp -higashikagawa.kagawa.jp -kanonji.kagawa.jp -kotohira.kagawa.jp -manno.kagawa.jp -marugame.kagawa.jp -mitoyo.kagawa.jp -naoshima.kagawa.jp -sanuki.kagawa.jp -tadotsu.kagawa.jp -takamatsu.kagawa.jp -tonosho.kagawa.jp -uchinomi.kagawa.jp -utazu.kagawa.jp -zentsuji.kagawa.jp -akune.kagoshima.jp -amami.kagoshima.jp -hioki.kagoshima.jp -isa.kagoshima.jp -isen.kagoshima.jp -izumi.kagoshima.jp -kagoshima.kagoshima.jp -kanoya.kagoshima.jp -kawanabe.kagoshima.jp -kinko.kagoshima.jp -kouyama.kagoshima.jp -makurazaki.kagoshima.jp -matsumoto.kagoshima.jp -minamitane.kagoshima.jp -nakatane.kagoshima.jp -nishinoomote.kagoshima.jp -satsumasendai.kagoshima.jp -soo.kagoshima.jp -tarumizu.kagoshima.jp -yusui.kagoshima.jp -aikawa.kanagawa.jp -atsugi.kanagawa.jp -ayase.kanagawa.jp -chigasaki.kanagawa.jp -ebina.kanagawa.jp -fujisawa.kanagawa.jp -hadano.kanagawa.jp -hakone.kanagawa.jp -hiratsuka.kanagawa.jp -isehara.kanagawa.jp -kaisei.kanagawa.jp -kamakura.kanagawa.jp -kiyokawa.kanagawa.jp -matsuda.kanagawa.jp -minamiashigara.kanagawa.jp -miura.kanagawa.jp -nakai.kanagawa.jp -ninomiya.kanagawa.jp -odawara.kanagawa.jp -oi.kanagawa.jp -oiso.kanagawa.jp -sagamihara.kanagawa.jp -samukawa.kanagawa.jp -tsukui.kanagawa.jp -yamakita.kanagawa.jp -yamato.kanagawa.jp -yokosuka.kanagawa.jp -yugawara.kanagawa.jp -zama.kanagawa.jp -zushi.kanagawa.jp -aki.kochi.jp -geisei.kochi.jp -hidaka.kochi.jp -higashitsuno.kochi.jp -ino.kochi.jp -kagami.kochi.jp -kami.kochi.jp -kitagawa.kochi.jp -kochi.kochi.jp -mihara.kochi.jp -motoyama.kochi.jp -muroto.kochi.jp -nahari.kochi.jp -nakamura.kochi.jp -nankoku.kochi.jp -nishitosa.kochi.jp -niyodogawa.kochi.jp -ochi.kochi.jp -okawa.kochi.jp -otoyo.kochi.jp -otsuki.kochi.jp -sakawa.kochi.jp -sukumo.kochi.jp -susaki.kochi.jp -tosa.kochi.jp -tosashimizu.kochi.jp -toyo.kochi.jp -tsuno.kochi.jp -umaji.kochi.jp -yasuda.kochi.jp -yusuhara.kochi.jp -amakusa.kumamoto.jp -arao.kumamoto.jp -aso.kumamoto.jp -choyo.kumamoto.jp -gyokuto.kumamoto.jp -kamiamakusa.kumamoto.jp -kikuchi.kumamoto.jp -kumamoto.kumamoto.jp -mashiki.kumamoto.jp -mifune.kumamoto.jp -minamata.kumamoto.jp -minamioguni.kumamoto.jp -nagasu.kumamoto.jp -nishihara.kumamoto.jp -oguni.kumamoto.jp -ozu.kumamoto.jp -sumoto.kumamoto.jp -takamori.kumamoto.jp -uki.kumamoto.jp -uto.kumamoto.jp -yamaga.kumamoto.jp -yamato.kumamoto.jp -yatsushiro.kumamoto.jp -ayabe.kyoto.jp -fukuchiyama.kyoto.jp -higashiyama.kyoto.jp -ide.kyoto.jp -ine.kyoto.jp -joyo.kyoto.jp -kameoka.kyoto.jp -kamo.kyoto.jp -kita.kyoto.jp -kizu.kyoto.jp -kumiyama.kyoto.jp -kyotamba.kyoto.jp -kyotanabe.kyoto.jp -kyotango.kyoto.jp -maizuru.kyoto.jp -minami.kyoto.jp -minamiyamashiro.kyoto.jp -miyazu.kyoto.jp -muko.kyoto.jp -nagaokakyo.kyoto.jp -nakagyo.kyoto.jp -nantan.kyoto.jp -oyamazaki.kyoto.jp -sakyo.kyoto.jp -seika.kyoto.jp -tanabe.kyoto.jp -uji.kyoto.jp -ujitawara.kyoto.jp -wazuka.kyoto.jp -yamashina.kyoto.jp -yawata.kyoto.jp -asahi.mie.jp -inabe.mie.jp -ise.mie.jp -kameyama.mie.jp -kawagoe.mie.jp -kiho.mie.jp -kisosaki.mie.jp -kiwa.mie.jp -komono.mie.jp -kumano.mie.jp -kuwana.mie.jp -matsusaka.mie.jp -meiwa.mie.jp -mihama.mie.jp -minamiise.mie.jp -misugi.mie.jp -miyama.mie.jp -nabari.mie.jp -shima.mie.jp -suzuka.mie.jp -tado.mie.jp -taiki.mie.jp -taki.mie.jp -tamaki.mie.jp -toba.mie.jp -tsu.mie.jp -udono.mie.jp -ureshino.mie.jp -watarai.mie.jp -yokkaichi.mie.jp -furukawa.miyagi.jp -higashimatsushima.miyagi.jp -ishinomaki.miyagi.jp -iwanuma.miyagi.jp -kakuda.miyagi.jp -kami.miyagi.jp -kawasaki.miyagi.jp -marumori.miyagi.jp -matsushima.miyagi.jp -minamisanriku.miyagi.jp -misato.miyagi.jp -murata.miyagi.jp -natori.miyagi.jp -ogawara.miyagi.jp -ohira.miyagi.jp -onagawa.miyagi.jp -osaki.miyagi.jp -rifu.miyagi.jp -semine.miyagi.jp -shibata.miyagi.jp -shichikashuku.miyagi.jp -shikama.miyagi.jp -shiogama.miyagi.jp -shiroishi.miyagi.jp -tagajo.miyagi.jp -taiwa.miyagi.jp -tome.miyagi.jp -tomiya.miyagi.jp -wakuya.miyagi.jp -watari.miyagi.jp -yamamoto.miyagi.jp -zao.miyagi.jp -aya.miyazaki.jp -ebino.miyazaki.jp -gokase.miyazaki.jp -hyuga.miyazaki.jp -kadogawa.miyazaki.jp -kawaminami.miyazaki.jp -kijo.miyazaki.jp -kitagawa.miyazaki.jp -kitakata.miyazaki.jp -kitaura.miyazaki.jp -kobayashi.miyazaki.jp -kunitomi.miyazaki.jp -kushima.miyazaki.jp -mimata.miyazaki.jp -miyakonojo.miyazaki.jp -miyazaki.miyazaki.jp -morotsuka.miyazaki.jp -nichinan.miyazaki.jp -nishimera.miyazaki.jp -nobeoka.miyazaki.jp -saito.miyazaki.jp -shiiba.miyazaki.jp -shintomi.miyazaki.jp -takaharu.miyazaki.jp -takanabe.miyazaki.jp -takazaki.miyazaki.jp -tsuno.miyazaki.jp -achi.nagano.jp -agematsu.nagano.jp -anan.nagano.jp -aoki.nagano.jp -asahi.nagano.jp -azumino.nagano.jp -chikuhoku.nagano.jp -chikuma.nagano.jp -chino.nagano.jp -fujimi.nagano.jp -hakuba.nagano.jp -hara.nagano.jp -hiraya.nagano.jp -iida.nagano.jp -iijima.nagano.jp -iiyama.nagano.jp -iizuna.nagano.jp -ikeda.nagano.jp -ikusaka.nagano.jp -ina.nagano.jp -karuizawa.nagano.jp -kawakami.nagano.jp -kiso.nagano.jp -kisofukushima.nagano.jp -kitaaiki.nagano.jp -komagane.nagano.jp -komoro.nagano.jp -matsukawa.nagano.jp -matsumoto.nagano.jp -miasa.nagano.jp -minamiaiki.nagano.jp -minamimaki.nagano.jp -minamiminowa.nagano.jp -minowa.nagano.jp -miyada.nagano.jp -miyota.nagano.jp -mochizuki.nagano.jp -nagano.nagano.jp -nagawa.nagano.jp -nagiso.nagano.jp -nakagawa.nagano.jp -nakano.nagano.jp -nozawaonsen.nagano.jp -obuse.nagano.jp -ogawa.nagano.jp -okaya.nagano.jp -omachi.nagano.jp -omi.nagano.jp -ookuwa.nagano.jp -ooshika.nagano.jp -otaki.nagano.jp -otari.nagano.jp -sakae.nagano.jp -sakaki.nagano.jp -saku.nagano.jp -sakuho.nagano.jp -shimosuwa.nagano.jp -shinanomachi.nagano.jp -shiojiri.nagano.jp -suwa.nagano.jp -suzaka.nagano.jp -takagi.nagano.jp -takamori.nagano.jp -takayama.nagano.jp -tateshina.nagano.jp -tatsuno.nagano.jp -togakushi.nagano.jp -togura.nagano.jp -tomi.nagano.jp -ueda.nagano.jp -wada.nagano.jp -yamagata.nagano.jp -yamanouchi.nagano.jp -yasaka.nagano.jp -yasuoka.nagano.jp -chijiwa.nagasaki.jp -futsu.nagasaki.jp -goto.nagasaki.jp -hasami.nagasaki.jp -hirado.nagasaki.jp -iki.nagasaki.jp -isahaya.nagasaki.jp -kawatana.nagasaki.jp -kuchinotsu.nagasaki.jp -matsuura.nagasaki.jp -nagasaki.nagasaki.jp -obama.nagasaki.jp -omura.nagasaki.jp -oseto.nagasaki.jp -saikai.nagasaki.jp -sasebo.nagasaki.jp -seihi.nagasaki.jp -shimabara.nagasaki.jp -shinkamigoto.nagasaki.jp -togitsu.nagasaki.jp -tsushima.nagasaki.jp -unzen.nagasaki.jp -ando.nara.jp -gose.nara.jp -heguri.nara.jp -higashiyoshino.nara.jp -ikaruga.nara.jp -ikoma.nara.jp -kamikitayama.nara.jp -kanmaki.nara.jp -kashiba.nara.jp -kashihara.nara.jp -katsuragi.nara.jp -kawai.nara.jp -kawakami.nara.jp -kawanishi.nara.jp -koryo.nara.jp -kurotaki.nara.jp -mitsue.nara.jp -miyake.nara.jp -nara.nara.jp -nosegawa.nara.jp -oji.nara.jp -ouda.nara.jp -oyodo.nara.jp -sakurai.nara.jp -sango.nara.jp -shimoichi.nara.jp -shimokitayama.nara.jp -shinjo.nara.jp -soni.nara.jp -takatori.nara.jp -tawaramoto.nara.jp -tenkawa.nara.jp -tenri.nara.jp -uda.nara.jp -yamatokoriyama.nara.jp -yamatotakada.nara.jp -yamazoe.nara.jp -yoshino.nara.jp -aga.niigata.jp -agano.niigata.jp -gosen.niigata.jp -itoigawa.niigata.jp -izumozaki.niigata.jp -joetsu.niigata.jp -kamo.niigata.jp -kariwa.niigata.jp -kashiwazaki.niigata.jp -minamiuonuma.niigata.jp -mitsuke.niigata.jp -muika.niigata.jp -murakami.niigata.jp -myoko.niigata.jp -nagaoka.niigata.jp -niigata.niigata.jp -ojiya.niigata.jp -omi.niigata.jp -sado.niigata.jp -sanjo.niigata.jp -seiro.niigata.jp -seirou.niigata.jp -sekikawa.niigata.jp -shibata.niigata.jp -tagami.niigata.jp -tainai.niigata.jp -tochio.niigata.jp -tokamachi.niigata.jp -tsubame.niigata.jp -tsunan.niigata.jp -uonuma.niigata.jp -yahiko.niigata.jp -yoita.niigata.jp -yuzawa.niigata.jp -beppu.oita.jp -bungoono.oita.jp -bungotakada.oita.jp -hasama.oita.jp -hiji.oita.jp -himeshima.oita.jp -hita.oita.jp -kamitsue.oita.jp -kokonoe.oita.jp -kuju.oita.jp -kunisaki.oita.jp -kusu.oita.jp -oita.oita.jp -saiki.oita.jp -taketa.oita.jp -tsukumi.oita.jp -usa.oita.jp -usuki.oita.jp -yufu.oita.jp -akaiwa.okayama.jp -asakuchi.okayama.jp -bizen.okayama.jp -hayashima.okayama.jp -ibara.okayama.jp -kagamino.okayama.jp -kasaoka.okayama.jp -kibichuo.okayama.jp -kumenan.okayama.jp -kurashiki.okayama.jp -maniwa.okayama.jp -misaki.okayama.jp -nagi.okayama.jp -niimi.okayama.jp -nishiawakura.okayama.jp -okayama.okayama.jp -satosho.okayama.jp -setouchi.okayama.jp -shinjo.okayama.jp -shoo.okayama.jp -soja.okayama.jp -takahashi.okayama.jp -tamano.okayama.jp -tsuyama.okayama.jp -wake.okayama.jp -yakage.okayama.jp -aguni.okinawa.jp -ginowan.okinawa.jp -ginoza.okinawa.jp -gushikami.okinawa.jp -haebaru.okinawa.jp -higashi.okinawa.jp -hirara.okinawa.jp -iheya.okinawa.jp -ishigaki.okinawa.jp -ishikawa.okinawa.jp -itoman.okinawa.jp -izena.okinawa.jp -kadena.okinawa.jp -kin.okinawa.jp -kitadaito.okinawa.jp -kitanakagusuku.okinawa.jp -kumejima.okinawa.jp -kunigami.okinawa.jp -minamidaito.okinawa.jp -motobu.okinawa.jp -nago.okinawa.jp -naha.okinawa.jp -nakagusuku.okinawa.jp -nakijin.okinawa.jp -nanjo.okinawa.jp -nishihara.okinawa.jp -ogimi.okinawa.jp -okinawa.okinawa.jp -onna.okinawa.jp -shimoji.okinawa.jp -taketomi.okinawa.jp -tarama.okinawa.jp -tokashiki.okinawa.jp -tomigusuku.okinawa.jp -tonaki.okinawa.jp -urasoe.okinawa.jp -uruma.okinawa.jp -yaese.okinawa.jp -yomitan.okinawa.jp -yonabaru.okinawa.jp -yonaguni.okinawa.jp -zamami.okinawa.jp -abeno.osaka.jp -chihayaakasaka.osaka.jp -chuo.osaka.jp -daito.osaka.jp -fujiidera.osaka.jp -habikino.osaka.jp -hannan.osaka.jp -higashiosaka.osaka.jp -higashisumiyoshi.osaka.jp -higashiyodogawa.osaka.jp -hirakata.osaka.jp -ibaraki.osaka.jp -ikeda.osaka.jp -izumi.osaka.jp -izumiotsu.osaka.jp -izumisano.osaka.jp -kadoma.osaka.jp -kaizuka.osaka.jp -kanan.osaka.jp -kashiwara.osaka.jp -katano.osaka.jp -kawachinagano.osaka.jp -kishiwada.osaka.jp -kita.osaka.jp -kumatori.osaka.jp -matsubara.osaka.jp -minato.osaka.jp -minoh.osaka.jp -misaki.osaka.jp -moriguchi.osaka.jp -neyagawa.osaka.jp -nishi.osaka.jp -nose.osaka.jp -osakasayama.osaka.jp -sakai.osaka.jp -sayama.osaka.jp -sennan.osaka.jp -settsu.osaka.jp -shijonawate.osaka.jp -shimamoto.osaka.jp -suita.osaka.jp -tadaoka.osaka.jp -taishi.osaka.jp -tajiri.osaka.jp -takaishi.osaka.jp -takatsuki.osaka.jp -tondabayashi.osaka.jp -toyonaka.osaka.jp -toyono.osaka.jp -yao.osaka.jp -ariake.saga.jp -arita.saga.jp -fukudomi.saga.jp -genkai.saga.jp -hamatama.saga.jp -hizen.saga.jp -imari.saga.jp -kamimine.saga.jp -kanzaki.saga.jp -karatsu.saga.jp -kashima.saga.jp -kitagata.saga.jp -kitahata.saga.jp -kiyama.saga.jp -kouhoku.saga.jp -kyuragi.saga.jp -nishiarita.saga.jp -ogi.saga.jp -omachi.saga.jp -ouchi.saga.jp -saga.saga.jp -shiroishi.saga.jp -taku.saga.jp -tara.saga.jp -tosu.saga.jp -yoshinogari.saga.jp -arakawa.saitama.jp -asaka.saitama.jp -chichibu.saitama.jp -fujimi.saitama.jp -fujimino.saitama.jp -fukaya.saitama.jp -hanno.saitama.jp -hanyu.saitama.jp -hasuda.saitama.jp -hatogaya.saitama.jp -hatoyama.saitama.jp -hidaka.saitama.jp -higashichichibu.saitama.jp -higashimatsuyama.saitama.jp -honjo.saitama.jp -ina.saitama.jp -iruma.saitama.jp -iwatsuki.saitama.jp -kamiizumi.saitama.jp -kamikawa.saitama.jp -kamisato.saitama.jp -kasukabe.saitama.jp -kawagoe.saitama.jp -kawaguchi.saitama.jp -kawajima.saitama.jp -kazo.saitama.jp -kitamoto.saitama.jp -koshigaya.saitama.jp -kounosu.saitama.jp -kuki.saitama.jp -kumagaya.saitama.jp -matsubushi.saitama.jp -minano.saitama.jp -misato.saitama.jp -miyashiro.saitama.jp -miyoshi.saitama.jp -moroyama.saitama.jp -nagatoro.saitama.jp -namegawa.saitama.jp -niiza.saitama.jp -ogano.saitama.jp -ogawa.saitama.jp -ogose.saitama.jp -okegawa.saitama.jp -omiya.saitama.jp -otaki.saitama.jp -ranzan.saitama.jp -ryokami.saitama.jp -saitama.saitama.jp -sakado.saitama.jp -satte.saitama.jp -sayama.saitama.jp -shiki.saitama.jp -shiraoka.saitama.jp -soka.saitama.jp -sugito.saitama.jp -toda.saitama.jp -tokigawa.saitama.jp -tokorozawa.saitama.jp -tsurugashima.saitama.jp -urawa.saitama.jp -warabi.saitama.jp -yashio.saitama.jp -yokoze.saitama.jp -yono.saitama.jp -yorii.saitama.jp -yoshida.saitama.jp -yoshikawa.saitama.jp -yoshimi.saitama.jp -aisho.shiga.jp -gamo.shiga.jp -higashiomi.shiga.jp -hikone.shiga.jp -koka.shiga.jp -konan.shiga.jp -kosei.shiga.jp -koto.shiga.jp -kusatsu.shiga.jp -maibara.shiga.jp -moriyama.shiga.jp -nagahama.shiga.jp -nishiazai.shiga.jp -notogawa.shiga.jp -omihachiman.shiga.jp -otsu.shiga.jp -ritto.shiga.jp -ryuoh.shiga.jp -takashima.shiga.jp -takatsuki.shiga.jp -torahime.shiga.jp -toyosato.shiga.jp -yasu.shiga.jp -akagi.shimane.jp -ama.shimane.jp -gotsu.shimane.jp -hamada.shimane.jp -higashiizumo.shimane.jp -hikawa.shimane.jp -hikimi.shimane.jp -izumo.shimane.jp -kakinoki.shimane.jp -masuda.shimane.jp -matsue.shimane.jp -misato.shimane.jp -nishinoshima.shimane.jp -ohda.shimane.jp -okinoshima.shimane.jp -okuizumo.shimane.jp -shimane.shimane.jp -tamayu.shimane.jp -tsuwano.shimane.jp -unnan.shimane.jp -yakumo.shimane.jp -yasugi.shimane.jp -yatsuka.shimane.jp -arai.shizuoka.jp -atami.shizuoka.jp -fuji.shizuoka.jp -fujieda.shizuoka.jp -fujikawa.shizuoka.jp -fujinomiya.shizuoka.jp -fukuroi.shizuoka.jp -gotemba.shizuoka.jp -haibara.shizuoka.jp -hamamatsu.shizuoka.jp -higashiizu.shizuoka.jp -ito.shizuoka.jp -iwata.shizuoka.jp -izu.shizuoka.jp -izunokuni.shizuoka.jp -kakegawa.shizuoka.jp -kannami.shizuoka.jp -kawanehon.shizuoka.jp -kawazu.shizuoka.jp -kikugawa.shizuoka.jp -kosai.shizuoka.jp -makinohara.shizuoka.jp -matsuzaki.shizuoka.jp -minamiizu.shizuoka.jp -mishima.shizuoka.jp -morimachi.shizuoka.jp -nishiizu.shizuoka.jp -numazu.shizuoka.jp -omaezaki.shizuoka.jp -shimada.shizuoka.jp -shimizu.shizuoka.jp -shimoda.shizuoka.jp -shizuoka.shizuoka.jp -susono.shizuoka.jp -yaizu.shizuoka.jp -yoshida.shizuoka.jp -ashikaga.tochigi.jp -bato.tochigi.jp -haga.tochigi.jp -ichikai.tochigi.jp -iwafune.tochigi.jp -kaminokawa.tochigi.jp -kanuma.tochigi.jp -karasuyama.tochigi.jp -kuroiso.tochigi.jp -mashiko.tochigi.jp -mibu.tochigi.jp -moka.tochigi.jp -motegi.tochigi.jp -nasu.tochigi.jp -nasushiobara.tochigi.jp -nikko.tochigi.jp -nishikata.tochigi.jp -nogi.tochigi.jp -ohira.tochigi.jp -ohtawara.tochigi.jp -oyama.tochigi.jp -sakura.tochigi.jp -sano.tochigi.jp -shimotsuke.tochigi.jp -shioya.tochigi.jp -takanezawa.tochigi.jp -tochigi.tochigi.jp -tsuga.tochigi.jp -ujiie.tochigi.jp -utsunomiya.tochigi.jp -yaita.tochigi.jp -aizumi.tokushima.jp -anan.tokushima.jp -ichiba.tokushima.jp -itano.tokushima.jp -kainan.tokushima.jp -komatsushima.tokushima.jp -matsushige.tokushima.jp -mima.tokushima.jp -minami.tokushima.jp -miyoshi.tokushima.jp -mugi.tokushima.jp -nakagawa.tokushima.jp -naruto.tokushima.jp -sanagochi.tokushima.jp -shishikui.tokushima.jp -tokushima.tokushima.jp -wajiki.tokushima.jp -adachi.tokyo.jp -akiruno.tokyo.jp -akishima.tokyo.jp -aogashima.tokyo.jp -arakawa.tokyo.jp -bunkyo.tokyo.jp -chiyoda.tokyo.jp -chofu.tokyo.jp -chuo.tokyo.jp -edogawa.tokyo.jp -fuchu.tokyo.jp -fussa.tokyo.jp -hachijo.tokyo.jp -hachioji.tokyo.jp -hamura.tokyo.jp -higashikurume.tokyo.jp -higashimurayama.tokyo.jp -higashiyamato.tokyo.jp -hino.tokyo.jp -hinode.tokyo.jp -hinohara.tokyo.jp -inagi.tokyo.jp -itabashi.tokyo.jp -katsushika.tokyo.jp -kita.tokyo.jp -kiyose.tokyo.jp -kodaira.tokyo.jp -koganei.tokyo.jp -kokubunji.tokyo.jp -komae.tokyo.jp -koto.tokyo.jp -kouzushima.tokyo.jp -kunitachi.tokyo.jp -machida.tokyo.jp -meguro.tokyo.jp -minato.tokyo.jp -mitaka.tokyo.jp -mizuho.tokyo.jp -musashimurayama.tokyo.jp -musashino.tokyo.jp -nakano.tokyo.jp -nerima.tokyo.jp -ogasawara.tokyo.jp -okutama.tokyo.jp -ome.tokyo.jp -oshima.tokyo.jp -ota.tokyo.jp -setagaya.tokyo.jp -shibuya.tokyo.jp -shinagawa.tokyo.jp -shinjuku.tokyo.jp -suginami.tokyo.jp -sumida.tokyo.jp -tachikawa.tokyo.jp -taito.tokyo.jp -tama.tokyo.jp -toshima.tokyo.jp -chizu.tottori.jp -hino.tottori.jp -kawahara.tottori.jp -koge.tottori.jp -kotoura.tottori.jp -misasa.tottori.jp -nanbu.tottori.jp -nichinan.tottori.jp -sakaiminato.tottori.jp -tottori.tottori.jp -wakasa.tottori.jp -yazu.tottori.jp -yonago.tottori.jp -asahi.toyama.jp -fuchu.toyama.jp -fukumitsu.toyama.jp -funahashi.toyama.jp -himi.toyama.jp -imizu.toyama.jp -inami.toyama.jp -johana.toyama.jp -kamiichi.toyama.jp -kurobe.toyama.jp -nakaniikawa.toyama.jp -namerikawa.toyama.jp -nanto.toyama.jp -nyuzen.toyama.jp -oyabe.toyama.jp -taira.toyama.jp -takaoka.toyama.jp -tateyama.toyama.jp -toga.toyama.jp -tonami.toyama.jp -toyama.toyama.jp -unazuki.toyama.jp -uozu.toyama.jp -yamada.toyama.jp -arida.wakayama.jp -aridagawa.wakayama.jp -gobo.wakayama.jp -hashimoto.wakayama.jp -hidaka.wakayama.jp -hirogawa.wakayama.jp -inami.wakayama.jp -iwade.wakayama.jp -kainan.wakayama.jp -kamitonda.wakayama.jp -katsuragi.wakayama.jp -kimino.wakayama.jp -kinokawa.wakayama.jp -kitayama.wakayama.jp -koya.wakayama.jp -koza.wakayama.jp -kozagawa.wakayama.jp -kudoyama.wakayama.jp -kushimoto.wakayama.jp -mihama.wakayama.jp -misato.wakayama.jp -nachikatsuura.wakayama.jp -shingu.wakayama.jp -shirahama.wakayama.jp -taiji.wakayama.jp -tanabe.wakayama.jp -wakayama.wakayama.jp -yuasa.wakayama.jp -yura.wakayama.jp -asahi.yamagata.jp -funagata.yamagata.jp -higashine.yamagata.jp -iide.yamagata.jp -kahoku.yamagata.jp -kaminoyama.yamagata.jp -kaneyama.yamagata.jp -kawanishi.yamagata.jp -mamurogawa.yamagata.jp -mikawa.yamagata.jp -murayama.yamagata.jp -nagai.yamagata.jp -nakayama.yamagata.jp -nanyo.yamagata.jp -nishikawa.yamagata.jp -obanazawa.yamagata.jp -oe.yamagata.jp -oguni.yamagata.jp -ohkura.yamagata.jp -oishida.yamagata.jp -sagae.yamagata.jp -sakata.yamagata.jp -sakegawa.yamagata.jp -shinjo.yamagata.jp -shirataka.yamagata.jp -shonai.yamagata.jp -takahata.yamagata.jp -tendo.yamagata.jp -tozawa.yamagata.jp -tsuruoka.yamagata.jp -yamagata.yamagata.jp -yamanobe.yamagata.jp -yonezawa.yamagata.jp -yuza.yamagata.jp -abu.yamaguchi.jp -hagi.yamaguchi.jp -hikari.yamaguchi.jp -hofu.yamaguchi.jp -iwakuni.yamaguchi.jp -kudamatsu.yamaguchi.jp -mitou.yamaguchi.jp -nagato.yamaguchi.jp -oshima.yamaguchi.jp -shimonoseki.yamaguchi.jp -shunan.yamaguchi.jp -tabuse.yamaguchi.jp -tokuyama.yamaguchi.jp -toyota.yamaguchi.jp -ube.yamaguchi.jp -yuu.yamaguchi.jp -chuo.yamanashi.jp -doshi.yamanashi.jp -fuefuki.yamanashi.jp -fujikawa.yamanashi.jp -fujikawaguchiko.yamanashi.jp -fujiyoshida.yamanashi.jp -hayakawa.yamanashi.jp -hokuto.yamanashi.jp -ichikawamisato.yamanashi.jp -kai.yamanashi.jp -kofu.yamanashi.jp -koshu.yamanashi.jp -kosuge.yamanashi.jp -minami-alps.yamanashi.jp -minobu.yamanashi.jp -nakamichi.yamanashi.jp -nanbu.yamanashi.jp -narusawa.yamanashi.jp -nirasaki.yamanashi.jp -nishikatsura.yamanashi.jp -oshino.yamanashi.jp -otsuki.yamanashi.jp -showa.yamanashi.jp -tabayama.yamanashi.jp -tsuru.yamanashi.jp -uenohara.yamanashi.jp -yamanakako.yamanashi.jp -yamanashi.yamanashi.jp - -// ke : http://www.kenic.or.ke/index.php/en/ke-domains/ke-domains -ke -ac.ke -co.ke -go.ke -info.ke -me.ke -mobi.ke -ne.ke -or.ke -sc.ke - -// kg : http://www.domain.kg/dmn_n.html -kg -org.kg -net.kg -com.kg -edu.kg -gov.kg -mil.kg - -// kh : http://www.mptc.gov.kh/dns_registration.htm -*.kh - -// ki : http://www.ki/dns/index.html -ki -edu.ki -biz.ki -net.ki -org.ki -gov.ki -info.ki -com.ki - -// km : https://en.wikipedia.org/wiki/.km -// http://www.domaine.km/documents/charte.doc -km -org.km -nom.km -gov.km -prd.km -tm.km -edu.km -mil.km -ass.km -com.km -// These are only mentioned as proposed suggestions at domaine.km, but -// https://en.wikipedia.org/wiki/.km says they're available for registration: -coop.km -asso.km -presse.km -medecin.km -notaires.km -pharmaciens.km -veterinaire.km -gouv.km - -// kn : https://en.wikipedia.org/wiki/.kn -// http://www.dot.kn/domainRules.html -kn -net.kn -org.kn -edu.kn -gov.kn - -// kp : http://www.kcce.kp/en_index.php -kp -com.kp -edu.kp -gov.kp -org.kp -rep.kp -tra.kp - -// kr : https://en.wikipedia.org/wiki/.kr -// see also: http://domain.nida.or.kr/eng/registration.jsp -kr -ac.kr -co.kr -es.kr -go.kr -hs.kr -kg.kr -mil.kr -ms.kr -ne.kr -or.kr -pe.kr -re.kr -sc.kr -// kr geographical names -busan.kr -chungbuk.kr -chungnam.kr -daegu.kr -daejeon.kr -gangwon.kr -gwangju.kr -gyeongbuk.kr -gyeonggi.kr -gyeongnam.kr -incheon.kr -jeju.kr -jeonbuk.kr -jeonnam.kr -seoul.kr -ulsan.kr - -// kw : https://www.nic.kw/policies/ -// Confirmed by registry -kw -com.kw -edu.kw -emb.kw -gov.kw -ind.kw -net.kw -org.kw - -// ky : http://www.icta.ky/da_ky_reg_dom.php -// Confirmed by registry 2008-06-17 -ky -com.ky -edu.ky -net.ky -org.ky - -// kz : https://en.wikipedia.org/wiki/.kz -// see also: http://www.nic.kz/rules/index.jsp -kz -org.kz -edu.kz -net.kz -gov.kz -mil.kz -com.kz - -// la : https://en.wikipedia.org/wiki/.la -// Submitted by registry -la -int.la -net.la -info.la -edu.la -gov.la -per.la -com.la -org.la - -// lb : https://en.wikipedia.org/wiki/.lb -// Submitted by registry -lb -com.lb -edu.lb -gov.lb -net.lb -org.lb - -// lc : https://en.wikipedia.org/wiki/.lc -// see also: http://www.nic.lc/rules.htm -lc -com.lc -net.lc -co.lc -org.lc -edu.lc -gov.lc - -// li : https://en.wikipedia.org/wiki/.li -li - -// lk : https://www.nic.lk/index.php/domain-registration/lk-domain-naming-structure -lk -gov.lk -sch.lk -net.lk -int.lk -com.lk -org.lk -edu.lk -ngo.lk -soc.lk -web.lk -ltd.lk -assn.lk -grp.lk -hotel.lk -ac.lk - -// lr : http://psg.com/dns/lr/lr.txt -// Submitted by registry -lr -com.lr -edu.lr -gov.lr -org.lr -net.lr - -// ls : http://www.nic.ls/ -// Confirmed by registry -ls -ac.ls -biz.ls -co.ls -edu.ls -gov.ls -info.ls -net.ls -org.ls -sc.ls - -// lt : https://en.wikipedia.org/wiki/.lt -lt -// gov.lt : http://www.gov.lt/index_en.php -gov.lt - -// lu : http://www.dns.lu/en/ -lu - -// lv : http://www.nic.lv/DNS/En/generic.php -lv -com.lv -edu.lv -gov.lv -org.lv -mil.lv -id.lv -net.lv -asn.lv -conf.lv - -// ly : http://www.nic.ly/regulations.php -ly -com.ly -net.ly -gov.ly -plc.ly -edu.ly -sch.ly -med.ly -org.ly -id.ly - -// ma : https://en.wikipedia.org/wiki/.ma -// http://www.anrt.ma/fr/admin/download/upload/file_fr782.pdf -ma -co.ma -net.ma -gov.ma -org.ma -ac.ma -press.ma - -// mc : http://www.nic.mc/ -mc -tm.mc -asso.mc - -// md : https://en.wikipedia.org/wiki/.md -md - -// me : https://en.wikipedia.org/wiki/.me -me -co.me -net.me -org.me -edu.me -ac.me -gov.me -its.me -priv.me - -// mg : http://nic.mg/nicmg/?page_id=39 -mg -org.mg -nom.mg -gov.mg -prd.mg -tm.mg -edu.mg -mil.mg -com.mg -co.mg - -// mh : https://en.wikipedia.org/wiki/.mh -mh - -// mil : https://en.wikipedia.org/wiki/.mil -mil - -// mk : https://en.wikipedia.org/wiki/.mk -// see also: http://dns.marnet.net.mk/postapka.php -mk -com.mk -org.mk -net.mk -edu.mk -gov.mk -inf.mk -name.mk - -// ml : http://www.gobin.info/domainname/ml-template.doc -// see also: https://en.wikipedia.org/wiki/.ml -ml -com.ml -edu.ml -gouv.ml -gov.ml -net.ml -org.ml -presse.ml - -// mm : https://en.wikipedia.org/wiki/.mm -*.mm - -// mn : https://en.wikipedia.org/wiki/.mn -mn -gov.mn -edu.mn -org.mn - -// mo : http://www.monic.net.mo/ -mo -com.mo -net.mo -org.mo -edu.mo -gov.mo - -// mobi : https://en.wikipedia.org/wiki/.mobi -mobi - -// mp : http://www.dot.mp/ -// Confirmed by registry 2008-06-17 -mp - -// mq : https://en.wikipedia.org/wiki/.mq -mq - -// mr : https://en.wikipedia.org/wiki/.mr -mr -gov.mr - -// ms : http://www.nic.ms/pdf/MS_Domain_Name_Rules.pdf -ms -com.ms -edu.ms -gov.ms -net.ms -org.ms - -// mt : https://www.nic.org.mt/go/policy -// Submitted by registry -mt -com.mt -edu.mt -net.mt -org.mt - -// mu : https://en.wikipedia.org/wiki/.mu -mu -com.mu -net.mu -org.mu -gov.mu -ac.mu -co.mu -or.mu - -// museum : https://welcome.museum/wp-content/uploads/2018/05/20180525-Registration-Policy-MUSEUM-EN_VF-2.pdf https://welcome.museum/buy-your-dot-museum-2/ -museum - -// mv : https://en.wikipedia.org/wiki/.mv -// "mv" included because, contra Wikipedia, google.mv exists. -mv -aero.mv -biz.mv -com.mv -coop.mv -edu.mv -gov.mv -info.mv -int.mv -mil.mv -museum.mv -name.mv -net.mv -org.mv -pro.mv - -// mw : http://www.registrar.mw/ -mw -ac.mw -biz.mw -co.mw -com.mw -coop.mw -edu.mw -gov.mw -int.mw -museum.mw -net.mw -org.mw - -// mx : http://www.nic.mx/ -// Submitted by registry -mx -com.mx -org.mx -gob.mx -edu.mx -net.mx - -// my : http://www.mynic.my/ -// Available strings: https://mynic.my/resources/domains/buying-a-domain/ -my -biz.my -com.my -edu.my -gov.my -mil.my -name.my -net.my -org.my - -// mz : http://www.uem.mz/ -// Submitted by registry -mz -ac.mz -adv.mz -co.mz -edu.mz -gov.mz -mil.mz -net.mz -org.mz - -// na : http://www.na-nic.com.na/ -// http://www.info.na/domain/ -na -info.na -pro.na -name.na -school.na -or.na -dr.na -us.na -mx.na -ca.na -in.na -cc.na -tv.na -ws.na -mobi.na -co.na -com.na -org.na - -// name : has 2nd-level tlds, but there's no list of them -name - -// nc : http://www.cctld.nc/ -nc -asso.nc -nom.nc - -// ne : https://en.wikipedia.org/wiki/.ne -ne - -// net : https://en.wikipedia.org/wiki/.net -net - -// nf : https://en.wikipedia.org/wiki/.nf -nf -com.nf -net.nf -per.nf -rec.nf -web.nf -arts.nf -firm.nf -info.nf -other.nf -store.nf - -// ng : http://www.nira.org.ng/index.php/join-us/register-ng-domain/189-nira-slds -ng -com.ng -edu.ng -gov.ng -i.ng -mil.ng -mobi.ng -name.ng -net.ng -org.ng -sch.ng - -// ni : http://www.nic.ni/ -ni -ac.ni -biz.ni -co.ni -com.ni -edu.ni -gob.ni -in.ni -info.ni -int.ni -mil.ni -net.ni -nom.ni -org.ni -web.ni - -// nl : https://en.wikipedia.org/wiki/.nl -// https://www.sidn.nl/ -// ccTLD for the Netherlands -nl - -// no : https://www.norid.no/en/om-domenenavn/regelverk-for-no/ -// Norid geographical second level domains : https://www.norid.no/en/om-domenenavn/regelverk-for-no/vedlegg-b/ -// Norid category second level domains : https://www.norid.no/en/om-domenenavn/regelverk-for-no/vedlegg-c/ -// Norid category second-level domains managed by parties other than Norid : https://www.norid.no/en/om-domenenavn/regelverk-for-no/vedlegg-d/ -// RSS feed: https://teknisk.norid.no/en/feed/ -no -// Norid category second level domains : https://www.norid.no/en/om-domenenavn/regelverk-for-no/vedlegg-c/ -fhs.no -vgs.no -fylkesbibl.no -folkebibl.no -museum.no -idrett.no -priv.no -// Norid category second-level domains managed by parties other than Norid : https://www.norid.no/en/om-domenenavn/regelverk-for-no/vedlegg-d/ -mil.no -stat.no -dep.no -kommune.no -herad.no -// Norid geographical second level domains : https://www.norid.no/en/om-domenenavn/regelverk-for-no/vedlegg-b/ -// counties -aa.no -ah.no -bu.no -fm.no -hl.no -hm.no -jan-mayen.no -mr.no -nl.no -nt.no -of.no -ol.no -oslo.no -rl.no -sf.no -st.no -svalbard.no -tm.no -tr.no -va.no -vf.no -// primary and lower secondary schools per county -gs.aa.no -gs.ah.no -gs.bu.no -gs.fm.no -gs.hl.no -gs.hm.no -gs.jan-mayen.no -gs.mr.no -gs.nl.no -gs.nt.no -gs.of.no -gs.ol.no -gs.oslo.no -gs.rl.no -gs.sf.no -gs.st.no -gs.svalbard.no -gs.tm.no -gs.tr.no -gs.va.no -gs.vf.no -// cities -akrehamn.no -åkrehamn.no -algard.no -ålgård.no -arna.no -brumunddal.no -bryne.no -bronnoysund.no -brønnøysund.no -drobak.no -drøbak.no -egersund.no -fetsund.no -floro.no -florø.no -fredrikstad.no -hokksund.no -honefoss.no -hønefoss.no -jessheim.no -jorpeland.no -jørpeland.no -kirkenes.no -kopervik.no -krokstadelva.no -langevag.no -langevåg.no -leirvik.no -mjondalen.no -mjøndalen.no -mo-i-rana.no -mosjoen.no -mosjøen.no -nesoddtangen.no -orkanger.no -osoyro.no -osøyro.no -raholt.no -råholt.no -sandnessjoen.no -sandnessjøen.no -skedsmokorset.no -slattum.no -spjelkavik.no -stathelle.no -stavern.no -stjordalshalsen.no -stjørdalshalsen.no -tananger.no -tranby.no -vossevangen.no -// communities -afjord.no -åfjord.no -agdenes.no -al.no -ål.no -alesund.no -ålesund.no -alstahaug.no -alta.no -áltá.no -alaheadju.no -álaheadju.no -alvdal.no -amli.no -åmli.no -amot.no -åmot.no -andebu.no -andoy.no -andøy.no -andasuolo.no -ardal.no -årdal.no -aremark.no -arendal.no -ås.no -aseral.no -åseral.no -asker.no -askim.no -askvoll.no -askoy.no -askøy.no -asnes.no -åsnes.no -audnedaln.no -aukra.no -aure.no -aurland.no -aurskog-holand.no -aurskog-høland.no -austevoll.no -austrheim.no -averoy.no -averøy.no -balestrand.no -ballangen.no -balat.no -bálát.no -balsfjord.no -bahccavuotna.no -báhccavuotna.no -bamble.no -bardu.no -beardu.no -beiarn.no -bajddar.no -bájddar.no -baidar.no -báidár.no -berg.no -bergen.no -berlevag.no -berlevåg.no -bearalvahki.no -bearalváhki.no -bindal.no -birkenes.no -bjarkoy.no -bjarkøy.no -bjerkreim.no -bjugn.no -bodo.no -bodø.no -badaddja.no -bådåddjå.no -budejju.no -bokn.no -bremanger.no -bronnoy.no -brønnøy.no -bygland.no -bykle.no -barum.no -bærum.no -bo.telemark.no -bø.telemark.no -bo.nordland.no -bø.nordland.no -bievat.no -bievát.no -bomlo.no -bømlo.no -batsfjord.no -båtsfjord.no -bahcavuotna.no -báhcavuotna.no -dovre.no -drammen.no -drangedal.no -dyroy.no -dyrøy.no -donna.no -dønna.no -eid.no -eidfjord.no -eidsberg.no -eidskog.no -eidsvoll.no -eigersund.no -elverum.no -enebakk.no -engerdal.no -etne.no -etnedal.no -evenes.no -evenassi.no -evenášši.no -evje-og-hornnes.no -farsund.no -fauske.no -fuossko.no -fuoisku.no -fedje.no -fet.no -finnoy.no -finnøy.no -fitjar.no -fjaler.no -fjell.no -flakstad.no -flatanger.no -flekkefjord.no -flesberg.no -flora.no -fla.no -flå.no -folldal.no -forsand.no -fosnes.no -frei.no -frogn.no -froland.no -frosta.no -frana.no -fræna.no -froya.no -frøya.no -fusa.no -fyresdal.no -forde.no -førde.no -gamvik.no -gangaviika.no -gáŋgaviika.no -gaular.no -gausdal.no -gildeskal.no -gildeskål.no -giske.no -gjemnes.no -gjerdrum.no -gjerstad.no -gjesdal.no -gjovik.no -gjøvik.no -gloppen.no -gol.no -gran.no -grane.no -granvin.no -gratangen.no -grimstad.no -grong.no -kraanghke.no -kråanghke.no -grue.no -gulen.no -hadsel.no -halden.no -halsa.no -hamar.no -hamaroy.no -habmer.no -hábmer.no -hapmir.no -hápmir.no -hammerfest.no -hammarfeasta.no -hámmárfeasta.no -haram.no -hareid.no -harstad.no -hasvik.no -aknoluokta.no -ákŋoluokta.no -hattfjelldal.no -aarborte.no -haugesund.no -hemne.no -hemnes.no -hemsedal.no -heroy.more-og-romsdal.no -herøy.møre-og-romsdal.no -heroy.nordland.no -herøy.nordland.no -hitra.no -hjartdal.no -hjelmeland.no -hobol.no -hobøl.no -hof.no -hol.no -hole.no -holmestrand.no -holtalen.no -holtålen.no -hornindal.no -horten.no -hurdal.no -hurum.no -hvaler.no -hyllestad.no -hagebostad.no -hægebostad.no -hoyanger.no -høyanger.no -hoylandet.no -høylandet.no -ha.no -hå.no -ibestad.no -inderoy.no -inderøy.no -iveland.no -jevnaker.no -jondal.no -jolster.no -jølster.no -karasjok.no -karasjohka.no -kárášjohka.no -karlsoy.no -galsa.no -gálsá.no -karmoy.no -karmøy.no -kautokeino.no -guovdageaidnu.no -klepp.no -klabu.no -klæbu.no -kongsberg.no -kongsvinger.no -kragero.no -kragerø.no -kristiansand.no -kristiansund.no -krodsherad.no -krødsherad.no -kvalsund.no -rahkkeravju.no -ráhkkerávju.no -kvam.no -kvinesdal.no -kvinnherad.no -kviteseid.no -kvitsoy.no -kvitsøy.no -kvafjord.no -kvæfjord.no -giehtavuoatna.no -kvanangen.no -kvænangen.no -navuotna.no -návuotna.no -kafjord.no -kåfjord.no -gaivuotna.no -gáivuotna.no -larvik.no -lavangen.no -lavagis.no -loabat.no -loabát.no -lebesby.no -davvesiida.no -leikanger.no -leirfjord.no -leka.no -leksvik.no -lenvik.no -leangaviika.no -leaŋgaviika.no -lesja.no -levanger.no -lier.no -lierne.no -lillehammer.no -lillesand.no -lindesnes.no -lindas.no -lindås.no -lom.no -loppa.no -lahppi.no -láhppi.no -lund.no -lunner.no -luroy.no -lurøy.no -luster.no -lyngdal.no -lyngen.no -ivgu.no -lardal.no -lerdal.no -lærdal.no -lodingen.no -lødingen.no -lorenskog.no -lørenskog.no -loten.no -løten.no -malvik.no -masoy.no -måsøy.no -muosat.no -muosát.no -mandal.no -marker.no -marnardal.no -masfjorden.no -meland.no -meldal.no -melhus.no -meloy.no -meløy.no -meraker.no -meråker.no -moareke.no -moåreke.no -midsund.no -midtre-gauldal.no -modalen.no -modum.no -molde.no -moskenes.no -moss.no -mosvik.no -malselv.no -målselv.no -malatvuopmi.no -málatvuopmi.no -namdalseid.no -aejrie.no -namsos.no -namsskogan.no -naamesjevuemie.no -nååmesjevuemie.no -laakesvuemie.no -nannestad.no -narvik.no -narviika.no -naustdal.no -nedre-eiker.no -nes.akershus.no -nes.buskerud.no -nesna.no -nesodden.no -nesseby.no -unjarga.no -unjárga.no -nesset.no -nissedal.no -nittedal.no -nord-aurdal.no -nord-fron.no -nord-odal.no -norddal.no -nordkapp.no -davvenjarga.no -davvenjárga.no -nordre-land.no -nordreisa.no -raisa.no -ráisa.no -nore-og-uvdal.no -notodden.no -naroy.no -nærøy.no -notteroy.no -nøtterøy.no -odda.no -oksnes.no -øksnes.no -oppdal.no -oppegard.no -oppegård.no -orkdal.no -orland.no -ørland.no -orskog.no -ørskog.no -orsta.no -ørsta.no -os.hedmark.no -os.hordaland.no -osen.no -osteroy.no -osterøy.no -ostre-toten.no -østre-toten.no -overhalla.no -ovre-eiker.no -øvre-eiker.no -oyer.no -øyer.no -oygarden.no -øygarden.no -oystre-slidre.no -øystre-slidre.no -porsanger.no -porsangu.no -porsáŋgu.no -porsgrunn.no -radoy.no -radøy.no -rakkestad.no -rana.no -ruovat.no -randaberg.no -rauma.no -rendalen.no -rennebu.no -rennesoy.no -rennesøy.no -rindal.no -ringebu.no -ringerike.no -ringsaker.no -rissa.no -risor.no -risør.no -roan.no -rollag.no -rygge.no -ralingen.no -rælingen.no -rodoy.no -rødøy.no -romskog.no -rømskog.no -roros.no -røros.no -rost.no -røst.no -royken.no -røyken.no -royrvik.no -røyrvik.no -rade.no -råde.no -salangen.no -siellak.no -saltdal.no -salat.no -sálát.no -sálat.no -samnanger.no -sande.more-og-romsdal.no -sande.møre-og-romsdal.no -sande.vestfold.no -sandefjord.no -sandnes.no -sandoy.no -sandøy.no -sarpsborg.no -sauda.no -sauherad.no -sel.no -selbu.no -selje.no -seljord.no -sigdal.no -siljan.no -sirdal.no -skaun.no -skedsmo.no -ski.no -skien.no -skiptvet.no -skjervoy.no -skjervøy.no -skierva.no -skiervá.no -skjak.no -skjåk.no -skodje.no -skanland.no -skånland.no -skanit.no -skánit.no -smola.no -smøla.no -snillfjord.no -snasa.no -snåsa.no -snoasa.no -snaase.no -snåase.no -sogndal.no -sokndal.no -sola.no -solund.no -songdalen.no -sortland.no -spydeberg.no -stange.no -stavanger.no -steigen.no -steinkjer.no -stjordal.no -stjørdal.no -stokke.no -stor-elvdal.no -stord.no -stordal.no -storfjord.no -omasvuotna.no -strand.no -stranda.no -stryn.no -sula.no -suldal.no -sund.no -sunndal.no -surnadal.no -sveio.no -svelvik.no -sykkylven.no -sogne.no -søgne.no -somna.no -sømna.no -sondre-land.no -søndre-land.no -sor-aurdal.no -sør-aurdal.no -sor-fron.no -sør-fron.no -sor-odal.no -sør-odal.no -sor-varanger.no -sør-varanger.no -matta-varjjat.no -mátta-várjjat.no -sorfold.no -sørfold.no -sorreisa.no -sørreisa.no -sorum.no -sørum.no -tana.no -deatnu.no -time.no -tingvoll.no -tinn.no -tjeldsund.no -dielddanuorri.no -tjome.no -tjøme.no -tokke.no -tolga.no -torsken.no -tranoy.no -tranøy.no -tromso.no -tromsø.no -tromsa.no -romsa.no -trondheim.no -troandin.no -trysil.no -trana.no -træna.no -trogstad.no -trøgstad.no -tvedestrand.no -tydal.no -tynset.no -tysfjord.no -divtasvuodna.no -divttasvuotna.no -tysnes.no -tysvar.no -tysvær.no -tonsberg.no -tønsberg.no -ullensaker.no -ullensvang.no -ulvik.no -utsira.no -vadso.no -vadsø.no -cahcesuolo.no -čáhcesuolo.no -vaksdal.no -valle.no -vang.no -vanylven.no -vardo.no -vardø.no -varggat.no -várggát.no -vefsn.no -vaapste.no -vega.no -vegarshei.no -vegårshei.no -vennesla.no -verdal.no -verran.no -vestby.no -vestnes.no -vestre-slidre.no -vestre-toten.no -vestvagoy.no -vestvågøy.no -vevelstad.no -vik.no -vikna.no -vindafjord.no -volda.no -voss.no -varoy.no -værøy.no -vagan.no -vågan.no -voagat.no -vagsoy.no -vågsøy.no -vaga.no -vågå.no -valer.ostfold.no -våler.østfold.no -valer.hedmark.no -våler.hedmark.no - -// np : http://www.mos.com.np/register.html -*.np - -// nr : http://cenpac.net.nr/dns/index.html -// Submitted by registry -nr -biz.nr -info.nr -gov.nr -edu.nr -org.nr -net.nr -com.nr - -// nu : https://en.wikipedia.org/wiki/.nu -nu - -// nz : https://en.wikipedia.org/wiki/.nz -// Submitted by registry -nz -ac.nz -co.nz -cri.nz -geek.nz -gen.nz -govt.nz -health.nz -iwi.nz -kiwi.nz -maori.nz -mil.nz -māori.nz -net.nz -org.nz -parliament.nz -school.nz - -// om : https://en.wikipedia.org/wiki/.om -om -co.om -com.om -edu.om -gov.om -med.om -museum.om -net.om -org.om -pro.om - -// onion : https://tools.ietf.org/html/rfc7686 -onion - -// org : https://en.wikipedia.org/wiki/.org -org - -// pa : http://www.nic.pa/ -// Some additional second level "domains" resolve directly as hostnames, such as -// pannet.pa, so we add a rule for "pa". -pa -ac.pa -gob.pa -com.pa -org.pa -sld.pa -edu.pa -net.pa -ing.pa -abo.pa -med.pa -nom.pa - -// pe : https://www.nic.pe/InformeFinalComision.pdf -pe -edu.pe -gob.pe -nom.pe -mil.pe -org.pe -com.pe -net.pe - -// pf : http://www.gobin.info/domainname/formulaire-pf.pdf -pf -com.pf -org.pf -edu.pf - -// pg : https://en.wikipedia.org/wiki/.pg -*.pg - -// ph : http://www.domains.ph/FAQ2.asp -// Submitted by registry -ph -com.ph -net.ph -org.ph -gov.ph -edu.ph -ngo.ph -mil.ph -i.ph - -// pk : http://pk5.pknic.net.pk/pk5/msgNamepk.PK -pk -com.pk -net.pk -edu.pk -org.pk -fam.pk -biz.pk -web.pk -gov.pk -gob.pk -gok.pk -gon.pk -gop.pk -gos.pk -info.pk - -// pl http://www.dns.pl/english/index.html -// Submitted by registry -pl -com.pl -net.pl -org.pl -// pl functional domains (http://www.dns.pl/english/index.html) -aid.pl -agro.pl -atm.pl -auto.pl -biz.pl -edu.pl -gmina.pl -gsm.pl -info.pl -mail.pl -miasta.pl -media.pl -mil.pl -nieruchomosci.pl -nom.pl -pc.pl -powiat.pl -priv.pl -realestate.pl -rel.pl -sex.pl -shop.pl -sklep.pl -sos.pl -szkola.pl -targi.pl -tm.pl -tourism.pl -travel.pl -turystyka.pl -// Government domains -gov.pl -ap.gov.pl -griw.gov.pl -ic.gov.pl -is.gov.pl -kmpsp.gov.pl -konsulat.gov.pl -kppsp.gov.pl -kwp.gov.pl -kwpsp.gov.pl -mup.gov.pl -mw.gov.pl -oia.gov.pl -oirm.gov.pl -oke.gov.pl -oow.gov.pl -oschr.gov.pl -oum.gov.pl -pa.gov.pl -pinb.gov.pl -piw.gov.pl -po.gov.pl -pr.gov.pl -psp.gov.pl -psse.gov.pl -pup.gov.pl -rzgw.gov.pl -sa.gov.pl -sdn.gov.pl -sko.gov.pl -so.gov.pl -sr.gov.pl -starostwo.gov.pl -ug.gov.pl -ugim.gov.pl -um.gov.pl -umig.gov.pl -upow.gov.pl -uppo.gov.pl -us.gov.pl -uw.gov.pl -uzs.gov.pl -wif.gov.pl -wiih.gov.pl -winb.gov.pl -wios.gov.pl -witd.gov.pl -wiw.gov.pl -wkz.gov.pl -wsa.gov.pl -wskr.gov.pl -wsse.gov.pl -wuoz.gov.pl -wzmiuw.gov.pl -zp.gov.pl -zpisdn.gov.pl -// pl regional domains (http://www.dns.pl/english/index.html) -augustow.pl -babia-gora.pl -bedzin.pl -beskidy.pl -bialowieza.pl -bialystok.pl -bielawa.pl -bieszczady.pl -boleslawiec.pl -bydgoszcz.pl -bytom.pl -cieszyn.pl -czeladz.pl -czest.pl -dlugoleka.pl -elblag.pl -elk.pl -glogow.pl -gniezno.pl -gorlice.pl -grajewo.pl -ilawa.pl -jaworzno.pl -jelenia-gora.pl -jgora.pl -kalisz.pl -kazimierz-dolny.pl -karpacz.pl -kartuzy.pl -kaszuby.pl -katowice.pl -kepno.pl -ketrzyn.pl -klodzko.pl -kobierzyce.pl -kolobrzeg.pl -konin.pl -konskowola.pl -kutno.pl -lapy.pl -lebork.pl -legnica.pl -lezajsk.pl -limanowa.pl -lomza.pl -lowicz.pl -lubin.pl -lukow.pl -malbork.pl -malopolska.pl -mazowsze.pl -mazury.pl -mielec.pl -mielno.pl -mragowo.pl -naklo.pl -nowaruda.pl -nysa.pl -olawa.pl -olecko.pl -olkusz.pl -olsztyn.pl -opoczno.pl -opole.pl -ostroda.pl -ostroleka.pl -ostrowiec.pl -ostrowwlkp.pl -pila.pl -pisz.pl -podhale.pl -podlasie.pl -polkowice.pl -pomorze.pl -pomorskie.pl -prochowice.pl -pruszkow.pl -przeworsk.pl -pulawy.pl -radom.pl -rawa-maz.pl -rybnik.pl -rzeszow.pl -sanok.pl -sejny.pl -slask.pl -slupsk.pl -sosnowiec.pl -stalowa-wola.pl -skoczow.pl -starachowice.pl -stargard.pl -suwalki.pl -swidnica.pl -swiebodzin.pl -swinoujscie.pl -szczecin.pl -szczytno.pl -tarnobrzeg.pl -tgory.pl -turek.pl -tychy.pl -ustka.pl -walbrzych.pl -warmia.pl -warszawa.pl -waw.pl -wegrow.pl -wielun.pl -wlocl.pl -wloclawek.pl -wodzislaw.pl -wolomin.pl -wroclaw.pl -zachpomor.pl -zagan.pl -zarow.pl -zgora.pl -zgorzelec.pl - -// pm : https://www.afnic.fr/wp-media/uploads/2022/12/afnic-naming-policy-2023-01-01.pdf -pm - -// pn : http://www.government.pn/PnRegistry/policies.htm -pn -gov.pn -co.pn -org.pn -edu.pn -net.pn - -// post : https://en.wikipedia.org/wiki/.post -post - -// pr : http://www.nic.pr/index.asp?f=1 -pr -com.pr -net.pr -org.pr -gov.pr -edu.pr -isla.pr -pro.pr -biz.pr -info.pr -name.pr -// these aren't mentioned on nic.pr, but on https://en.wikipedia.org/wiki/.pr -est.pr -prof.pr -ac.pr - -// pro : http://registry.pro/get-pro -pro -aaa.pro -aca.pro -acct.pro -avocat.pro -bar.pro -cpa.pro -eng.pro -jur.pro -law.pro -med.pro -recht.pro - -// ps : https://en.wikipedia.org/wiki/.ps -// http://www.nic.ps/registration/policy.html#reg -ps -edu.ps -gov.ps -sec.ps -plo.ps -com.ps -org.ps -net.ps - -// pt : https://www.dns.pt/en/domain/pt-terms-and-conditions-registration-rules/ -pt -net.pt -gov.pt -org.pt -edu.pt -int.pt -publ.pt -com.pt -nome.pt - -// pw : https://en.wikipedia.org/wiki/.pw -pw -co.pw -ne.pw -or.pw -ed.pw -go.pw -belau.pw - -// py : http://www.nic.py/pautas.html#seccion_9 -// Submitted by registry -py -com.py -coop.py -edu.py -gov.py -mil.py -net.py -org.py - -// qa : http://domains.qa/en/ -qa -com.qa -edu.qa -gov.qa -mil.qa -name.qa -net.qa -org.qa -sch.qa - -// re : https://www.afnic.fr/wp-media/uploads/2022/12/afnic-naming-policy-2023-01-01.pdf -re -asso.re -com.re -nom.re - -// ro : http://www.rotld.ro/ -ro -arts.ro -com.ro -firm.ro -info.ro -nom.ro -nt.ro -org.ro -rec.ro -store.ro -tm.ro -www.ro - -// rs : https://www.rnids.rs/en/domains/national-domains -rs -ac.rs -co.rs -edu.rs -gov.rs -in.rs -org.rs - -// ru : https://cctld.ru/files/pdf/docs/en/rules_ru-rf.pdf -// Submitted by George Georgievsky -ru - -// rw : https://www.ricta.org.rw/sites/default/files/resources/registry_registrar_contract_0.pdf -rw -ac.rw -co.rw -coop.rw -gov.rw -mil.rw -net.rw -org.rw - -// sa : http://www.nic.net.sa/ -sa -com.sa -net.sa -org.sa -gov.sa -med.sa -pub.sa -edu.sa -sch.sa - -// sb : http://www.sbnic.net.sb/ -// Submitted by registry -sb -com.sb -edu.sb -gov.sb -net.sb -org.sb - -// sc : http://www.nic.sc/ -sc -com.sc -gov.sc -net.sc -org.sc -edu.sc - -// sd : http://www.isoc.sd/sudanic.isoc.sd/billing_pricing.htm -// Submitted by registry -sd -com.sd -net.sd -org.sd -edu.sd -med.sd -tv.sd -gov.sd -info.sd - -// se : https://en.wikipedia.org/wiki/.se -// Submitted by registry -se -a.se -ac.se -b.se -bd.se -brand.se -c.se -d.se -e.se -f.se -fh.se -fhsk.se -fhv.se -g.se -h.se -i.se -k.se -komforb.se -kommunalforbund.se -komvux.se -l.se -lanbib.se -m.se -n.se -naturbruksgymn.se -o.se -org.se -p.se -parti.se -pp.se -press.se -r.se -s.se -t.se -tm.se -u.se -w.se -x.se -y.se -z.se - -// sg : http://www.nic.net.sg/page/registration-policies-procedures-and-guidelines -sg -com.sg -net.sg -org.sg -gov.sg -edu.sg -per.sg - -// sh : http://nic.sh/rules.htm -sh -com.sh -net.sh -gov.sh -org.sh -mil.sh - -// si : https://en.wikipedia.org/wiki/.si -si - -// sj : No registrations at this time. -// Submitted by registry -sj - -// sk : https://en.wikipedia.org/wiki/.sk -// list of 2nd level domains ? -sk - -// sl : http://www.nic.sl -// Submitted by registry -sl -com.sl -net.sl -edu.sl -gov.sl -org.sl - -// sm : https://en.wikipedia.org/wiki/.sm -sm - -// sn : https://en.wikipedia.org/wiki/.sn -sn -art.sn -com.sn -edu.sn -gouv.sn -org.sn -perso.sn -univ.sn - -// so : http://sonic.so/policies/ -so -com.so -edu.so -gov.so -me.so -net.so -org.so - -// sr : https://en.wikipedia.org/wiki/.sr -sr - -// ss : https://registry.nic.ss/ -// Submitted by registry -ss -biz.ss -com.ss -edu.ss -gov.ss -me.ss -net.ss -org.ss -sch.ss - -// st : http://www.nic.st/html/policyrules/ -st -co.st -com.st -consulado.st -edu.st -embaixada.st -mil.st -net.st -org.st -principe.st -saotome.st -store.st - -// su : https://en.wikipedia.org/wiki/.su -su - -// sv : http://www.svnet.org.sv/niveldos.pdf -sv -com.sv -edu.sv -gob.sv -org.sv -red.sv - -// sx : https://en.wikipedia.org/wiki/.sx -// Submitted by registry -sx -gov.sx - -// sy : https://en.wikipedia.org/wiki/.sy -// see also: http://www.gobin.info/domainname/sy.doc -sy -edu.sy -gov.sy -net.sy -mil.sy -com.sy -org.sy - -// sz : https://en.wikipedia.org/wiki/.sz -// http://www.sispa.org.sz/ -sz -co.sz -ac.sz -org.sz - -// tc : https://en.wikipedia.org/wiki/.tc -tc - -// td : https://en.wikipedia.org/wiki/.td -td - -// tel: https://en.wikipedia.org/wiki/.tel -// http://www.telnic.org/ -tel - -// tf : https://www.afnic.fr/wp-media/uploads/2022/12/afnic-naming-policy-2023-01-01.pdf -tf - -// tg : https://en.wikipedia.org/wiki/.tg -// http://www.nic.tg/ -tg - -// th : https://en.wikipedia.org/wiki/.th -// Submitted by registry -th -ac.th -co.th -go.th -in.th -mi.th -net.th -or.th - -// tj : http://www.nic.tj/policy.html -tj -ac.tj -biz.tj -co.tj -com.tj -edu.tj -go.tj -gov.tj -int.tj -mil.tj -name.tj -net.tj -nic.tj -org.tj -test.tj -web.tj - -// tk : https://en.wikipedia.org/wiki/.tk -tk - -// tl : https://en.wikipedia.org/wiki/.tl -tl -gov.tl - -// tm : http://www.nic.tm/local.html -tm -com.tm -co.tm -org.tm -net.tm -nom.tm -gov.tm -mil.tm -edu.tm - -// tn : http://www.registre.tn/fr/ -// https://whois.ati.tn/ -tn -com.tn -ens.tn -fin.tn -gov.tn -ind.tn -info.tn -intl.tn -mincom.tn -nat.tn -net.tn -org.tn -perso.tn -tourism.tn - -// to : https://en.wikipedia.org/wiki/.to -// Submitted by registry -to -com.to -gov.to -net.to -org.to -edu.to -mil.to - -// tr : https://nic.tr/ -// https://nic.tr/forms/eng/policies.pdf -// https://nic.tr/index.php?USRACTN=PRICELST -tr -av.tr -bbs.tr -bel.tr -biz.tr -com.tr -dr.tr -edu.tr -gen.tr -gov.tr -info.tr -mil.tr -k12.tr -kep.tr -name.tr -net.tr -org.tr -pol.tr -tel.tr -tsk.tr -tv.tr -web.tr -// Used by Northern Cyprus -nc.tr -// Used by government agencies of Northern Cyprus -gov.nc.tr - -// tt : http://www.nic.tt/ -tt -co.tt -com.tt -org.tt -net.tt -biz.tt -info.tt -pro.tt -int.tt -coop.tt -jobs.tt -mobi.tt -travel.tt -museum.tt -aero.tt -name.tt -gov.tt -edu.tt - -// tv : https://en.wikipedia.org/wiki/.tv -// Not listing any 2LDs as reserved since none seem to exist in practice, -// Wikipedia notwithstanding. -tv - -// tw : https://en.wikipedia.org/wiki/.tw -tw -edu.tw -gov.tw -mil.tw -com.tw -net.tw -org.tw -idv.tw -game.tw -ebiz.tw -club.tw -網路.tw -組織.tw -商業.tw - -// tz : http://www.tznic.or.tz/index.php/domains -// Submitted by registry -tz -ac.tz -co.tz -go.tz -hotel.tz -info.tz -me.tz -mil.tz -mobi.tz -ne.tz -or.tz -sc.tz -tv.tz - -// ua : https://hostmaster.ua/policy/?ua -// Submitted by registry -ua -// ua 2LD -com.ua -edu.ua -gov.ua -in.ua -net.ua -org.ua -// ua geographic names -// https://hostmaster.ua/2ld/ -cherkassy.ua -cherkasy.ua -chernigov.ua -chernihiv.ua -chernivtsi.ua -chernovtsy.ua -ck.ua -cn.ua -cr.ua -crimea.ua -cv.ua -dn.ua -dnepropetrovsk.ua -dnipropetrovsk.ua -donetsk.ua -dp.ua -if.ua -ivano-frankivsk.ua -kh.ua -kharkiv.ua -kharkov.ua -kherson.ua -khmelnitskiy.ua -khmelnytskyi.ua -kiev.ua -kirovograd.ua -km.ua -kr.ua -kropyvnytskyi.ua -krym.ua -ks.ua -kv.ua -kyiv.ua -lg.ua -lt.ua -lugansk.ua -luhansk.ua -lutsk.ua -lv.ua -lviv.ua -mk.ua -mykolaiv.ua -nikolaev.ua -od.ua -odesa.ua -odessa.ua -pl.ua -poltava.ua -rivne.ua -rovno.ua -rv.ua -sb.ua -sebastopol.ua -sevastopol.ua -sm.ua -sumy.ua -te.ua -ternopil.ua -uz.ua -uzhgorod.ua -uzhhorod.ua -vinnica.ua -vinnytsia.ua -vn.ua -volyn.ua -yalta.ua -zakarpattia.ua -zaporizhzhe.ua -zaporizhzhia.ua -zhitomir.ua -zhytomyr.ua -zp.ua -zt.ua - -// ug : https://www.registry.co.ug/ -ug -co.ug -or.ug -ac.ug -sc.ug -go.ug -ne.ug -com.ug -org.ug - -// uk : https://en.wikipedia.org/wiki/.uk -// Submitted by registry -uk -ac.uk -co.uk -gov.uk -ltd.uk -me.uk -net.uk -nhs.uk -org.uk -plc.uk -police.uk -*.sch.uk - -// us : https://en.wikipedia.org/wiki/.us -us -dni.us -fed.us -isa.us -kids.us -nsn.us -// us geographic names -ak.us -al.us -ar.us -as.us -az.us -ca.us -co.us -ct.us -dc.us -de.us -fl.us -ga.us -gu.us -hi.us -ia.us -id.us -il.us -in.us -ks.us -ky.us -la.us -ma.us -md.us -me.us -mi.us -mn.us -mo.us -ms.us -mt.us -nc.us -nd.us -ne.us -nh.us -nj.us -nm.us -nv.us -ny.us -oh.us -ok.us -or.us -pa.us -pr.us -ri.us -sc.us -sd.us -tn.us -tx.us -ut.us -vi.us -vt.us -va.us -wa.us -wi.us -wv.us -wy.us -// The registrar notes several more specific domains available in each state, -// such as state.*.us, dst.*.us, etc., but resolution of these is somewhat -// haphazard; in some states these domains resolve as addresses, while in others -// only subdomains are available, or even nothing at all. We include the -// most common ones where it's clear that different sites are different -// entities. -k12.ak.us -k12.al.us -k12.ar.us -k12.as.us -k12.az.us -k12.ca.us -k12.co.us -k12.ct.us -k12.dc.us -k12.fl.us -k12.ga.us -k12.gu.us -// k12.hi.us Bug 614565 - Hawaii has a state-wide DOE login -k12.ia.us -k12.id.us -k12.il.us -k12.in.us -k12.ks.us -k12.ky.us -k12.la.us -k12.ma.us -k12.md.us -k12.me.us -k12.mi.us -k12.mn.us -k12.mo.us -k12.ms.us -k12.mt.us -k12.nc.us -// k12.nd.us Bug 1028347 - Removed at request of Travis Rosso -k12.ne.us -k12.nh.us -k12.nj.us -k12.nm.us -k12.nv.us -k12.ny.us -k12.oh.us -k12.ok.us -k12.or.us -k12.pa.us -k12.pr.us -// k12.ri.us Removed at request of Kim Cournoyer -k12.sc.us -// k12.sd.us Bug 934131 - Removed at request of James Booze -k12.tn.us -k12.tx.us -k12.ut.us -k12.vi.us -k12.vt.us -k12.va.us -k12.wa.us -k12.wi.us -// k12.wv.us Bug 947705 - Removed at request of Verne Britton -k12.wy.us -cc.ak.us -cc.al.us -cc.ar.us -cc.as.us -cc.az.us -cc.ca.us -cc.co.us -cc.ct.us -cc.dc.us -cc.de.us -cc.fl.us -cc.ga.us -cc.gu.us -cc.hi.us -cc.ia.us -cc.id.us -cc.il.us -cc.in.us -cc.ks.us -cc.ky.us -cc.la.us -cc.ma.us -cc.md.us -cc.me.us -cc.mi.us -cc.mn.us -cc.mo.us -cc.ms.us -cc.mt.us -cc.nc.us -cc.nd.us -cc.ne.us -cc.nh.us -cc.nj.us -cc.nm.us -cc.nv.us -cc.ny.us -cc.oh.us -cc.ok.us -cc.or.us -cc.pa.us -cc.pr.us -cc.ri.us -cc.sc.us -cc.sd.us -cc.tn.us -cc.tx.us -cc.ut.us -cc.vi.us -cc.vt.us -cc.va.us -cc.wa.us -cc.wi.us -cc.wv.us -cc.wy.us -lib.ak.us -lib.al.us -lib.ar.us -lib.as.us -lib.az.us -lib.ca.us -lib.co.us -lib.ct.us -lib.dc.us -// lib.de.us Issue #243 - Moved to Private section at request of Ed Moore -lib.fl.us -lib.ga.us -lib.gu.us -lib.hi.us -lib.ia.us -lib.id.us -lib.il.us -lib.in.us -lib.ks.us -lib.ky.us -lib.la.us -lib.ma.us -lib.md.us -lib.me.us -lib.mi.us -lib.mn.us -lib.mo.us -lib.ms.us -lib.mt.us -lib.nc.us -lib.nd.us -lib.ne.us -lib.nh.us -lib.nj.us -lib.nm.us -lib.nv.us -lib.ny.us -lib.oh.us -lib.ok.us -lib.or.us -lib.pa.us -lib.pr.us -lib.ri.us -lib.sc.us -lib.sd.us -lib.tn.us -lib.tx.us -lib.ut.us -lib.vi.us -lib.vt.us -lib.va.us -lib.wa.us -lib.wi.us -// lib.wv.us Bug 941670 - Removed at request of Larry W Arnold -lib.wy.us -// k12.ma.us contains school districts in Massachusetts. The 4LDs are -// managed independently except for private (PVT), charter (CHTR) and -// parochial (PAROCH) schools. Those are delegated directly to the -// 5LD operators. -pvt.k12.ma.us -chtr.k12.ma.us -paroch.k12.ma.us -// Merit Network, Inc. maintains the registry for =~ /(k12|cc|lib).mi.us/ and the following -// see also: http://domreg.merit.edu -// see also: whois -h whois.domreg.merit.edu help -ann-arbor.mi.us -cog.mi.us -dst.mi.us -eaton.mi.us -gen.mi.us -mus.mi.us -tec.mi.us -washtenaw.mi.us - -// uy : http://www.nic.org.uy/ -uy -com.uy -edu.uy -gub.uy -mil.uy -net.uy -org.uy - -// uz : http://www.reg.uz/ -uz -co.uz -com.uz -net.uz -org.uz - -// va : https://en.wikipedia.org/wiki/.va -va - -// vc : https://en.wikipedia.org/wiki/.vc -// Submitted by registry -vc -com.vc -net.vc -org.vc -gov.vc -mil.vc -edu.vc - -// ve : https://registro.nic.ve/ -// Submitted by registry nic@nic.ve and nicve@conatel.gob.ve -ve -arts.ve -bib.ve -co.ve -com.ve -e12.ve -edu.ve -firm.ve -gob.ve -gov.ve -info.ve -int.ve -mil.ve -net.ve -nom.ve -org.ve -rar.ve -rec.ve -store.ve -tec.ve -web.ve - -// vg : https://en.wikipedia.org/wiki/.vg -vg - -// vi : http://www.nic.vi/newdomainform.htm -// http://www.nic.vi/Domain_Rules/body_domain_rules.html indicates some other -// TLDs are "reserved", such as edu.vi and gov.vi, but doesn't actually say they -// are available for registration (which they do not seem to be). -vi -co.vi -com.vi -k12.vi -net.vi -org.vi - -// vn : https://www.vnnic.vn/en/domain/cctld-vn -// https://vnnic.vn/sites/default/files/tailieu/vn.cctld.domains.txt -vn -ac.vn -ai.vn -biz.vn -com.vn -edu.vn -gov.vn -health.vn -id.vn -info.vn -int.vn -io.vn -name.vn -net.vn -org.vn -pro.vn - -// vn geographical names -angiang.vn -bacgiang.vn -backan.vn -baclieu.vn -bacninh.vn -baria-vungtau.vn -bentre.vn -binhdinh.vn -binhduong.vn -binhphuoc.vn -binhthuan.vn -camau.vn -cantho.vn -caobang.vn -daklak.vn -daknong.vn -danang.vn -dienbien.vn -dongnai.vn -dongthap.vn -gialai.vn -hagiang.vn -haiduong.vn -haiphong.vn -hanam.vn -hanoi.vn -hatinh.vn -haugiang.vn -hoabinh.vn -hungyen.vn -khanhhoa.vn -kiengiang.vn -kontum.vn -laichau.vn -lamdong.vn -langson.vn -laocai.vn -longan.vn -namdinh.vn -nghean.vn -ninhbinh.vn -ninhthuan.vn -phutho.vn -phuyen.vn -quangbinh.vn -quangnam.vn -quangngai.vn -quangninh.vn -quangtri.vn -soctrang.vn -sonla.vn -tayninh.vn -thaibinh.vn -thainguyen.vn -thanhhoa.vn -thanhphohochiminh.vn -thuathienhue.vn -tiengiang.vn -travinh.vn -tuyenquang.vn -vinhlong.vn -vinhphuc.vn -yenbai.vn - -// vu : https://en.wikipedia.org/wiki/.vu -// http://www.vunic.vu/ -vu -com.vu -edu.vu -net.vu -org.vu - -// wf : https://www.afnic.fr/wp-media/uploads/2022/12/afnic-naming-policy-2023-01-01.pdf -wf - -// ws : https://en.wikipedia.org/wiki/.ws -// http://samoanic.ws/index.dhtml -ws -com.ws -net.ws -org.ws -gov.ws -edu.ws - -// yt : https://www.afnic.fr/wp-media/uploads/2022/12/afnic-naming-policy-2023-01-01.pdf -yt - -// IDN ccTLDs -// When submitting patches, please maintain a sort by ISO 3166 ccTLD, then -// U-label, and follow this format: -// // A-Label ("", [, variant info]) : -// // [sponsoring org] -// U-Label - -// xn--mgbaam7a8h ("Emerat", Arabic) : AE -// http://nic.ae/english/arabicdomain/rules.jsp -امارات - -// xn--y9a3aq ("hye", Armenian) : AM -// ISOC AM (operated by .am Registry) -հայ - -// xn--54b7fta0cc ("Bangla", Bangla) : BD -বাংলা - -// xn--90ae ("bg", Bulgarian) : BG -бг - -// xn--mgbcpq6gpa1a ("albahrain", Arabic) : BH -البحرين - -// xn--90ais ("bel", Belarusian/Russian Cyrillic) : BY -// Operated by .by registry -бел - -// xn--fiqs8s ("Zhongguo/China", Chinese, Simplified) : CN -// CNNIC -// http://cnnic.cn/html/Dir/2005/10/11/3218.htm -中国 - -// xn--fiqz9s ("Zhongguo/China", Chinese, Traditional) : CN -// CNNIC -// http://cnnic.cn/html/Dir/2005/10/11/3218.htm -中國 - -// xn--lgbbat1ad8j ("Algeria/Al Jazair", Arabic) : DZ -الجزائر - -// xn--wgbh1c ("Egypt/Masr", Arabic) : EG -// http://www.dotmasr.eg/ -مصر - -// xn--e1a4c ("eu", Cyrillic) : EU -// https://eurid.eu -ею - -// xn--qxa6a ("eu", Greek) : EU -// https://eurid.eu -ευ - -// xn--mgbah1a3hjkrd ("Mauritania", Arabic) : MR -موريتانيا - -// xn--node ("ge", Georgian Mkhedruli) : GE -გე - -// xn--qxam ("el", Greek) : GR -// Hellenic Ministry of Infrastructure, Transport, and Networks -ελ - -// xn--j6w193g ("Hong Kong", Chinese) : HK -// https://www.hkirc.hk -// Submitted by registry -// https://www.hkirc.hk/content.jsp?id=30#!/34 -香港 -公司.香港 -教育.香港 -政府.香港 -個人.香港 -網絡.香港 -組織.香港 - -// xn--2scrj9c ("Bharat", Kannada) : IN -// India -ಭಾರತ - -// xn--3hcrj9c ("Bharat", Oriya) : IN -// India -ଭାରତ - -// xn--45br5cyl ("Bharatam", Assamese) : IN -// India -ভাৰত - -// xn--h2breg3eve ("Bharatam", Sanskrit) : IN -// India -भारतम् - -// xn--h2brj9c8c ("Bharot", Santali) : IN -// India -भारोत - -// xn--mgbgu82a ("Bharat", Sindhi) : IN -// India -ڀارت - -// xn--rvc1e0am3e ("Bharatam", Malayalam) : IN -// India -ഭാരതം - -// xn--h2brj9c ("Bharat", Devanagari) : IN -// India -भारत - -// xn--mgbbh1a ("Bharat", Kashmiri) : IN -// India -بارت - -// xn--mgbbh1a71e ("Bharat", Arabic) : IN -// India -بھارت - -// xn--fpcrj9c3d ("Bharat", Telugu) : IN -// India -భారత్ - -// xn--gecrj9c ("Bharat", Gujarati) : IN -// India -ભારત - -// xn--s9brj9c ("Bharat", Gurmukhi) : IN -// India -ਭਾਰਤ - -// xn--45brj9c ("Bharat", Bengali) : IN -// India -ভারত - -// xn--xkc2dl3a5ee0h ("India", Tamil) : IN -// India -இந்தியா - -// xn--mgba3a4f16a ("Iran", Persian) : IR -ایران - -// xn--mgba3a4fra ("Iran", Arabic) : IR -ايران - -// xn--mgbtx2b ("Iraq", Arabic) : IQ -// Communications and Media Commission -عراق - -// xn--mgbayh7gpa ("al-Ordon", Arabic) : JO -// National Information Technology Center (NITC) -// Royal Scientific Society, Al-Jubeiha -الاردن - -// xn--3e0b707e ("Republic of Korea", Hangul) : KR -한국 - -// xn--80ao21a ("Kaz", Kazakh) : KZ -қаз - -// xn--q7ce6a ("Lao", Lao) : LA -ລາວ - -// xn--fzc2c9e2c ("Lanka", Sinhalese-Sinhala) : LK -// https://nic.lk -ලංකා - -// xn--xkc2al3hye2a ("Ilangai", Tamil) : LK -// https://nic.lk -இலங்கை - -// xn--mgbc0a9azcg ("Morocco/al-Maghrib", Arabic) : MA -المغرب - -// xn--d1alf ("mkd", Macedonian) : MK -// MARnet -мкд - -// xn--l1acc ("mon", Mongolian) : MN -мон - -// xn--mix891f ("Macao", Chinese, Traditional) : MO -// MONIC / HNET Asia (Registry Operator for .mo) -澳門 - -// xn--mix082f ("Macao", Chinese, Simplified) : MO -澳门 - -// xn--mgbx4cd0ab ("Malaysia", Malay) : MY -مليسيا - -// xn--mgb9awbf ("Oman", Arabic) : OM -عمان - -// xn--mgbai9azgqp6j ("Pakistan", Urdu/Arabic) : PK -پاکستان - -// xn--mgbai9a5eva00b ("Pakistan", Urdu/Arabic, variant) : PK -پاكستان - -// xn--ygbi2ammx ("Falasteen", Arabic) : PS -// The Palestinian National Internet Naming Authority (PNINA) -// http://www.pnina.ps -فلسطين - -// xn--90a3ac ("srb", Cyrillic) : RS -// https://www.rnids.rs/en/domains/national-domains -срб -пр.срб -орг.срб -обр.срб -од.срб -упр.срб -ак.срб - -// xn--p1ai ("rf", Russian-Cyrillic) : RU -// https://cctld.ru/files/pdf/docs/en/rules_ru-rf.pdf -// Submitted by George Georgievsky -рф - -// xn--wgbl6a ("Qatar", Arabic) : QA -// http://www.ict.gov.qa/ -قطر - -// xn--mgberp4a5d4ar ("AlSaudiah", Arabic) : SA -// http://www.nic.net.sa/ -السعودية - -// xn--mgberp4a5d4a87g ("AlSaudiah", Arabic, variant) : SA -السعودیة - -// xn--mgbqly7c0a67fbc ("AlSaudiah", Arabic, variant) : SA -السعودیۃ - -// xn--mgbqly7cvafr ("AlSaudiah", Arabic, variant) : SA -السعوديه - -// xn--mgbpl2fh ("sudan", Arabic) : SD -// Operated by .sd registry -سودان - -// xn--yfro4i67o Singapore ("Singapore", Chinese) : SG -新加坡 - -// xn--clchc0ea0b2g2a9gcd ("Singapore", Tamil) : SG -சிங்கப்பூர் - -// xn--ogbpf8fl ("Syria", Arabic) : SY -سورية - -// xn--mgbtf8fl ("Syria", Arabic, variant) : SY -سوريا - -// xn--o3cw4h ("Thai", Thai) : TH -// http://www.thnic.co.th -ไทย -ศึกษา.ไทย -ธุรกิจ.ไทย -รัฐบาล.ไทย -ทหาร.ไทย -เน็ต.ไทย -องค์กร.ไทย - -// xn--pgbs0dh ("Tunisia", Arabic) : TN -// http://nic.tn -تونس - -// xn--kpry57d ("Taiwan", Chinese, Traditional) : TW -// http://www.twnic.net/english/dn/dn_07a.htm -台灣 - -// xn--kprw13d ("Taiwan", Chinese, Simplified) : TW -// http://www.twnic.net/english/dn/dn_07a.htm -台湾 - -// xn--nnx388a ("Taiwan", Chinese, variant) : TW -臺灣 - -// xn--j1amh ("ukr", Cyrillic) : UA -укр - -// xn--mgb2ddes ("AlYemen", Arabic) : YE -اليمن - -// xxx : http://icmregistry.com -xxx - -// ye : http://www.y.net.ye/services/domain_name.htm -ye -com.ye -edu.ye -gov.ye -net.ye -mil.ye -org.ye - -// za : https://www.zadna.org.za/content/page/domain-information/ -ac.za -agric.za -alt.za -co.za -edu.za -gov.za -grondar.za -law.za -mil.za -net.za -ngo.za -nic.za -nis.za -nom.za -org.za -school.za -tm.za -web.za - -// zm : https://zicta.zm/ -// Submitted by registry -zm -ac.zm -biz.zm -co.zm -com.zm -edu.zm -gov.zm -info.zm -mil.zm -net.zm -org.zm -sch.zm - -// zw : https://www.potraz.gov.zw/ -// Confirmed by registry 2017-01-25 -zw -ac.zw -co.zw -gov.zw -mil.zw -org.zw - - -// newGTLDs - -// List of new gTLDs imported from https://www.icann.org/resources/registries/gtlds/v2/gtlds.json on 2023-11-03T15:13:18Z -// This list is auto-generated, don't edit it manually. -// aaa : American Automobile Association, Inc. -// https://www.iana.org/domains/root/db/aaa.html -aaa - -// aarp : AARP -// https://www.iana.org/domains/root/db/aarp.html -aarp - -// abb : ABB Ltd -// https://www.iana.org/domains/root/db/abb.html -abb - -// abbott : Abbott Laboratories, Inc. -// https://www.iana.org/domains/root/db/abbott.html -abbott - -// abbvie : AbbVie Inc. -// https://www.iana.org/domains/root/db/abbvie.html -abbvie - -// abc : Disney Enterprises, Inc. -// https://www.iana.org/domains/root/db/abc.html -abc - -// able : Able Inc. -// https://www.iana.org/domains/root/db/able.html -able - -// abogado : Registry Services, LLC -// https://www.iana.org/domains/root/db/abogado.html -abogado - -// abudhabi : Abu Dhabi Systems and Information Centre -// https://www.iana.org/domains/root/db/abudhabi.html -abudhabi - -// academy : Binky Moon, LLC -// https://www.iana.org/domains/root/db/academy.html -academy - -// accenture : Accenture plc -// https://www.iana.org/domains/root/db/accenture.html -accenture - -// accountant : dot Accountant Limited -// https://www.iana.org/domains/root/db/accountant.html -accountant - -// accountants : Binky Moon, LLC -// https://www.iana.org/domains/root/db/accountants.html -accountants - -// aco : ACO Severin Ahlmann GmbH & Co. KG -// https://www.iana.org/domains/root/db/aco.html -aco - -// actor : Dog Beach, LLC -// https://www.iana.org/domains/root/db/actor.html -actor - -// ads : Charleston Road Registry Inc. -// https://www.iana.org/domains/root/db/ads.html -ads - -// adult : ICM Registry AD LLC -// https://www.iana.org/domains/root/db/adult.html -adult - -// aeg : Aktiebolaget Electrolux -// https://www.iana.org/domains/root/db/aeg.html -aeg - -// aetna : Aetna Life Insurance Company -// https://www.iana.org/domains/root/db/aetna.html -aetna - -// afl : Australian Football League -// https://www.iana.org/domains/root/db/afl.html -afl - -// africa : ZA Central Registry NPC trading as Registry.Africa -// https://www.iana.org/domains/root/db/africa.html -africa - -// agakhan : Fondation Aga Khan (Aga Khan Foundation) -// https://www.iana.org/domains/root/db/agakhan.html -agakhan - -// agency : Binky Moon, LLC -// https://www.iana.org/domains/root/db/agency.html -agency - -// aig : American International Group, Inc. -// https://www.iana.org/domains/root/db/aig.html -aig - -// airbus : Airbus S.A.S. -// https://www.iana.org/domains/root/db/airbus.html -airbus - -// airforce : Dog Beach, LLC -// https://www.iana.org/domains/root/db/airforce.html -airforce - -// airtel : Bharti Airtel Limited -// https://www.iana.org/domains/root/db/airtel.html -airtel - -// akdn : Fondation Aga Khan (Aga Khan Foundation) -// https://www.iana.org/domains/root/db/akdn.html -akdn - -// alibaba : Alibaba Group Holding Limited -// https://www.iana.org/domains/root/db/alibaba.html -alibaba - -// alipay : Alibaba Group Holding Limited -// https://www.iana.org/domains/root/db/alipay.html -alipay - -// allfinanz : Allfinanz Deutsche Vermögensberatung Aktiengesellschaft -// https://www.iana.org/domains/root/db/allfinanz.html -allfinanz - -// allstate : Allstate Fire and Casualty Insurance Company -// https://www.iana.org/domains/root/db/allstate.html -allstate - -// ally : Ally Financial Inc. -// https://www.iana.org/domains/root/db/ally.html -ally - -// alsace : Region Grand Est -// https://www.iana.org/domains/root/db/alsace.html -alsace - -// alstom : ALSTOM -// https://www.iana.org/domains/root/db/alstom.html -alstom - -// amazon : Amazon Registry Services, Inc. -// https://www.iana.org/domains/root/db/amazon.html -amazon - -// americanexpress : American Express Travel Related Services Company, Inc. -// https://www.iana.org/domains/root/db/americanexpress.html -americanexpress - -// americanfamily : AmFam, Inc. -// https://www.iana.org/domains/root/db/americanfamily.html -americanfamily - -// amex : American Express Travel Related Services Company, Inc. -// https://www.iana.org/domains/root/db/amex.html -amex - -// amfam : AmFam, Inc. -// https://www.iana.org/domains/root/db/amfam.html -amfam - -// amica : Amica Mutual Insurance Company -// https://www.iana.org/domains/root/db/amica.html -amica - -// amsterdam : Gemeente Amsterdam -// https://www.iana.org/domains/root/db/amsterdam.html -amsterdam - -// analytics : Campus IP LLC -// https://www.iana.org/domains/root/db/analytics.html -analytics - -// android : Charleston Road Registry Inc. -// https://www.iana.org/domains/root/db/android.html -android - -// anquan : Beijing Qihu Keji Co., Ltd. -// https://www.iana.org/domains/root/db/anquan.html -anquan - -// anz : Australia and New Zealand Banking Group Limited -// https://www.iana.org/domains/root/db/anz.html -anz - -// aol : Oath Inc. -// https://www.iana.org/domains/root/db/aol.html -aol - -// apartments : Binky Moon, LLC -// https://www.iana.org/domains/root/db/apartments.html -apartments - -// app : Charleston Road Registry Inc. -// https://www.iana.org/domains/root/db/app.html -app - -// apple : Apple Inc. -// https://www.iana.org/domains/root/db/apple.html -apple - -// aquarelle : Aquarelle.com -// https://www.iana.org/domains/root/db/aquarelle.html -aquarelle - -// arab : League of Arab States -// https://www.iana.org/domains/root/db/arab.html -arab - -// aramco : Aramco Services Company -// https://www.iana.org/domains/root/db/aramco.html -aramco - -// archi : Identity Digital Limited -// https://www.iana.org/domains/root/db/archi.html -archi - -// army : Dog Beach, LLC -// https://www.iana.org/domains/root/db/army.html -army - -// art : UK Creative Ideas Limited -// https://www.iana.org/domains/root/db/art.html -art - -// arte : Association Relative à la Télévision Européenne G.E.I.E. -// https://www.iana.org/domains/root/db/arte.html -arte - -// asda : Wal-Mart Stores, Inc. -// https://www.iana.org/domains/root/db/asda.html -asda - -// associates : Binky Moon, LLC -// https://www.iana.org/domains/root/db/associates.html -associates - -// athleta : The Gap, Inc. -// https://www.iana.org/domains/root/db/athleta.html -athleta - -// attorney : Dog Beach, LLC -// https://www.iana.org/domains/root/db/attorney.html -attorney - -// auction : Dog Beach, LLC -// https://www.iana.org/domains/root/db/auction.html -auction - -// audi : AUDI Aktiengesellschaft -// https://www.iana.org/domains/root/db/audi.html -audi - -// audible : Amazon Registry Services, Inc. -// https://www.iana.org/domains/root/db/audible.html -audible - -// audio : XYZ.COM LLC -// https://www.iana.org/domains/root/db/audio.html -audio - -// auspost : Australian Postal Corporation -// https://www.iana.org/domains/root/db/auspost.html -auspost - -// author : Amazon Registry Services, Inc. -// https://www.iana.org/domains/root/db/author.html -author - -// auto : XYZ.COM LLC -// https://www.iana.org/domains/root/db/auto.html -auto - -// autos : XYZ.COM LLC -// https://www.iana.org/domains/root/db/autos.html -autos - -// avianca : Avianca Inc. -// https://www.iana.org/domains/root/db/avianca.html -avianca - -// aws : AWS Registry LLC -// https://www.iana.org/domains/root/db/aws.html -aws - -// axa : AXA Group Operations SAS -// https://www.iana.org/domains/root/db/axa.html -axa - -// azure : Microsoft Corporation -// https://www.iana.org/domains/root/db/azure.html -azure - -// baby : XYZ.COM LLC -// https://www.iana.org/domains/root/db/baby.html -baby - -// baidu : Baidu, Inc. -// https://www.iana.org/domains/root/db/baidu.html -baidu - -// banamex : Citigroup Inc. -// https://www.iana.org/domains/root/db/banamex.html -banamex - -// bananarepublic : The Gap, Inc. -// https://www.iana.org/domains/root/db/bananarepublic.html -bananarepublic - -// band : Dog Beach, LLC -// https://www.iana.org/domains/root/db/band.html -band - -// bank : fTLD Registry Services LLC -// https://www.iana.org/domains/root/db/bank.html -bank - -// bar : Punto 2012 Sociedad Anonima Promotora de Inversion de Capital Variable -// https://www.iana.org/domains/root/db/bar.html -bar - -// barcelona : Municipi de Barcelona -// https://www.iana.org/domains/root/db/barcelona.html -barcelona - -// barclaycard : Barclays Bank PLC -// https://www.iana.org/domains/root/db/barclaycard.html -barclaycard - -// barclays : Barclays Bank PLC -// https://www.iana.org/domains/root/db/barclays.html -barclays - -// barefoot : Gallo Vineyards, Inc. -// https://www.iana.org/domains/root/db/barefoot.html -barefoot - -// bargains : Binky Moon, LLC -// https://www.iana.org/domains/root/db/bargains.html -bargains - -// baseball : MLB Advanced Media DH, LLC -// https://www.iana.org/domains/root/db/baseball.html -baseball - -// basketball : Fédération Internationale de Basketball (FIBA) -// https://www.iana.org/domains/root/db/basketball.html -basketball - -// bauhaus : Werkhaus GmbH -// https://www.iana.org/domains/root/db/bauhaus.html -bauhaus - -// bayern : Bayern Connect GmbH -// https://www.iana.org/domains/root/db/bayern.html -bayern - -// bbc : British Broadcasting Corporation -// https://www.iana.org/domains/root/db/bbc.html -bbc - -// bbt : BB&T Corporation -// https://www.iana.org/domains/root/db/bbt.html -bbt - -// bbva : BANCO BILBAO VIZCAYA ARGENTARIA, S.A. -// https://www.iana.org/domains/root/db/bbva.html -bbva - -// bcg : The Boston Consulting Group, Inc. -// https://www.iana.org/domains/root/db/bcg.html -bcg - -// bcn : Municipi de Barcelona -// https://www.iana.org/domains/root/db/bcn.html -bcn - -// beats : Beats Electronics, LLC -// https://www.iana.org/domains/root/db/beats.html -beats - -// beauty : XYZ.COM LLC -// https://www.iana.org/domains/root/db/beauty.html -beauty - -// beer : Registry Services, LLC -// https://www.iana.org/domains/root/db/beer.html -beer - -// bentley : Bentley Motors Limited -// https://www.iana.org/domains/root/db/bentley.html -bentley - -// berlin : dotBERLIN GmbH & Co. KG -// https://www.iana.org/domains/root/db/berlin.html -berlin - -// best : BestTLD Pty Ltd -// https://www.iana.org/domains/root/db/best.html -best - -// bestbuy : BBY Solutions, Inc. -// https://www.iana.org/domains/root/db/bestbuy.html -bestbuy - -// bet : Identity Digital Limited -// https://www.iana.org/domains/root/db/bet.html -bet - -// bharti : Bharti Enterprises (Holding) Private Limited -// https://www.iana.org/domains/root/db/bharti.html -bharti - -// bible : American Bible Society -// https://www.iana.org/domains/root/db/bible.html -bible - -// bid : dot Bid Limited -// https://www.iana.org/domains/root/db/bid.html -bid - -// bike : Binky Moon, LLC -// https://www.iana.org/domains/root/db/bike.html -bike - -// bing : Microsoft Corporation -// https://www.iana.org/domains/root/db/bing.html -bing - -// bingo : Binky Moon, LLC -// https://www.iana.org/domains/root/db/bingo.html -bingo - -// bio : Identity Digital Limited -// https://www.iana.org/domains/root/db/bio.html -bio - -// black : Identity Digital Limited -// https://www.iana.org/domains/root/db/black.html -black - -// blackfriday : Registry Services, LLC -// https://www.iana.org/domains/root/db/blackfriday.html -blackfriday - -// blockbuster : Dish DBS Corporation -// https://www.iana.org/domains/root/db/blockbuster.html -blockbuster - -// blog : Knock Knock WHOIS There, LLC -// https://www.iana.org/domains/root/db/blog.html -blog - -// bloomberg : Bloomberg IP Holdings LLC -// https://www.iana.org/domains/root/db/bloomberg.html -bloomberg - -// blue : Identity Digital Limited -// https://www.iana.org/domains/root/db/blue.html -blue - -// bms : Bristol-Myers Squibb Company -// https://www.iana.org/domains/root/db/bms.html -bms - -// bmw : Bayerische Motoren Werke Aktiengesellschaft -// https://www.iana.org/domains/root/db/bmw.html -bmw - -// bnpparibas : BNP Paribas -// https://www.iana.org/domains/root/db/bnpparibas.html -bnpparibas - -// boats : XYZ.COM LLC -// https://www.iana.org/domains/root/db/boats.html -boats - -// boehringer : Boehringer Ingelheim International GmbH -// https://www.iana.org/domains/root/db/boehringer.html -boehringer - -// bofa : Bank of America Corporation -// https://www.iana.org/domains/root/db/bofa.html -bofa - -// bom : Núcleo de Informação e Coordenação do Ponto BR - NIC.br -// https://www.iana.org/domains/root/db/bom.html -bom - -// bond : ShortDot SA -// https://www.iana.org/domains/root/db/bond.html -bond - -// boo : Charleston Road Registry Inc. -// https://www.iana.org/domains/root/db/boo.html -boo - -// book : Amazon Registry Services, Inc. -// https://www.iana.org/domains/root/db/book.html -book - -// booking : Booking.com B.V. -// https://www.iana.org/domains/root/db/booking.html -booking - -// bosch : Robert Bosch GMBH -// https://www.iana.org/domains/root/db/bosch.html -bosch - -// bostik : Bostik SA -// https://www.iana.org/domains/root/db/bostik.html -bostik - -// boston : Registry Services, LLC -// https://www.iana.org/domains/root/db/boston.html -boston - -// bot : Amazon Registry Services, Inc. -// https://www.iana.org/domains/root/db/bot.html -bot - -// boutique : Binky Moon, LLC -// https://www.iana.org/domains/root/db/boutique.html -boutique - -// box : Intercap Registry Inc. -// https://www.iana.org/domains/root/db/box.html -box - -// bradesco : Banco Bradesco S.A. -// https://www.iana.org/domains/root/db/bradesco.html -bradesco - -// bridgestone : Bridgestone Corporation -// https://www.iana.org/domains/root/db/bridgestone.html -bridgestone - -// broadway : Celebrate Broadway, Inc. -// https://www.iana.org/domains/root/db/broadway.html -broadway - -// broker : Dog Beach, LLC -// https://www.iana.org/domains/root/db/broker.html -broker - -// brother : Brother Industries, Ltd. -// https://www.iana.org/domains/root/db/brother.html -brother - -// brussels : DNS.be vzw -// https://www.iana.org/domains/root/db/brussels.html -brussels - -// build : Plan Bee LLC -// https://www.iana.org/domains/root/db/build.html -build - -// builders : Binky Moon, LLC -// https://www.iana.org/domains/root/db/builders.html -builders - -// business : Binky Moon, LLC -// https://www.iana.org/domains/root/db/business.html -business - -// buy : Amazon Registry Services, Inc. -// https://www.iana.org/domains/root/db/buy.html -buy - -// buzz : DOTSTRATEGY CO. -// https://www.iana.org/domains/root/db/buzz.html -buzz - -// bzh : Association www.bzh -// https://www.iana.org/domains/root/db/bzh.html -bzh - -// cab : Binky Moon, LLC -// https://www.iana.org/domains/root/db/cab.html -cab - -// cafe : Binky Moon, LLC -// https://www.iana.org/domains/root/db/cafe.html -cafe - -// cal : Charleston Road Registry Inc. -// https://www.iana.org/domains/root/db/cal.html -cal - -// call : Amazon Registry Services, Inc. -// https://www.iana.org/domains/root/db/call.html -call - -// calvinklein : PVH gTLD Holdings LLC -// https://www.iana.org/domains/root/db/calvinklein.html -calvinklein - -// cam : Cam Connecting SARL -// https://www.iana.org/domains/root/db/cam.html -cam - -// camera : Binky Moon, LLC -// https://www.iana.org/domains/root/db/camera.html -camera - -// camp : Binky Moon, LLC -// https://www.iana.org/domains/root/db/camp.html -camp - -// canon : Canon Inc. -// https://www.iana.org/domains/root/db/canon.html -canon - -// capetown : ZA Central Registry NPC trading as ZA Central Registry -// https://www.iana.org/domains/root/db/capetown.html -capetown - -// capital : Binky Moon, LLC -// https://www.iana.org/domains/root/db/capital.html -capital - -// capitalone : Capital One Financial Corporation -// https://www.iana.org/domains/root/db/capitalone.html -capitalone - -// car : XYZ.COM LLC -// https://www.iana.org/domains/root/db/car.html -car - -// caravan : Caravan International, Inc. -// https://www.iana.org/domains/root/db/caravan.html -caravan - -// cards : Binky Moon, LLC -// https://www.iana.org/domains/root/db/cards.html -cards - -// care : Binky Moon, LLC -// https://www.iana.org/domains/root/db/care.html -care - -// career : dotCareer LLC -// https://www.iana.org/domains/root/db/career.html -career - -// careers : Binky Moon, LLC -// https://www.iana.org/domains/root/db/careers.html -careers - -// cars : XYZ.COM LLC -// https://www.iana.org/domains/root/db/cars.html -cars - -// casa : Registry Services, LLC -// https://www.iana.org/domains/root/db/casa.html -casa - -// case : Digity, LLC -// https://www.iana.org/domains/root/db/case.html -case - -// cash : Binky Moon, LLC -// https://www.iana.org/domains/root/db/cash.html -cash - -// casino : Binky Moon, LLC -// https://www.iana.org/domains/root/db/casino.html -casino - -// catering : Binky Moon, LLC -// https://www.iana.org/domains/root/db/catering.html -catering - -// catholic : Pontificium Consilium de Comunicationibus Socialibus (PCCS) (Pontifical Council for Social Communication) -// https://www.iana.org/domains/root/db/catholic.html -catholic - -// cba : COMMONWEALTH BANK OF AUSTRALIA -// https://www.iana.org/domains/root/db/cba.html -cba - -// cbn : The Christian Broadcasting Network, Inc. -// https://www.iana.org/domains/root/db/cbn.html -cbn - -// cbre : CBRE, Inc. -// https://www.iana.org/domains/root/db/cbre.html -cbre - -// center : Binky Moon, LLC -// https://www.iana.org/domains/root/db/center.html -center - -// ceo : XYZ.COM LLC -// https://www.iana.org/domains/root/db/ceo.html -ceo - -// cern : European Organization for Nuclear Research ("CERN") -// https://www.iana.org/domains/root/db/cern.html -cern - -// cfa : CFA Institute -// https://www.iana.org/domains/root/db/cfa.html -cfa - -// cfd : ShortDot SA -// https://www.iana.org/domains/root/db/cfd.html -cfd - -// chanel : Chanel International B.V. -// https://www.iana.org/domains/root/db/chanel.html -chanel - -// channel : Charleston Road Registry Inc. -// https://www.iana.org/domains/root/db/channel.html -channel - -// charity : Public Interest Registry -// https://www.iana.org/domains/root/db/charity.html -charity - -// chase : JPMorgan Chase Bank, National Association -// https://www.iana.org/domains/root/db/chase.html -chase - -// chat : Binky Moon, LLC -// https://www.iana.org/domains/root/db/chat.html -chat - -// cheap : Binky Moon, LLC -// https://www.iana.org/domains/root/db/cheap.html -cheap - -// chintai : CHINTAI Corporation -// https://www.iana.org/domains/root/db/chintai.html -chintai - -// christmas : XYZ.COM LLC -// https://www.iana.org/domains/root/db/christmas.html -christmas - -// chrome : Charleston Road Registry Inc. -// https://www.iana.org/domains/root/db/chrome.html -chrome - -// church : Binky Moon, LLC -// https://www.iana.org/domains/root/db/church.html -church - -// cipriani : Hotel Cipriani Srl -// https://www.iana.org/domains/root/db/cipriani.html -cipriani - -// circle : Amazon Registry Services, Inc. -// https://www.iana.org/domains/root/db/circle.html -circle - -// cisco : Cisco Technology, Inc. -// https://www.iana.org/domains/root/db/cisco.html -cisco - -// citadel : Citadel Domain LLC -// https://www.iana.org/domains/root/db/citadel.html -citadel - -// citi : Citigroup Inc. -// https://www.iana.org/domains/root/db/citi.html -citi - -// citic : CITIC Group Corporation -// https://www.iana.org/domains/root/db/citic.html -citic - -// city : Binky Moon, LLC -// https://www.iana.org/domains/root/db/city.html -city - -// claims : Binky Moon, LLC -// https://www.iana.org/domains/root/db/claims.html -claims - -// cleaning : Binky Moon, LLC -// https://www.iana.org/domains/root/db/cleaning.html -cleaning - -// click : Internet Naming Company LLC -// https://www.iana.org/domains/root/db/click.html -click - -// clinic : Binky Moon, LLC -// https://www.iana.org/domains/root/db/clinic.html -clinic - -// clinique : The Estée Lauder Companies Inc. -// https://www.iana.org/domains/root/db/clinique.html -clinique - -// clothing : Binky Moon, LLC -// https://www.iana.org/domains/root/db/clothing.html -clothing - -// cloud : Aruba PEC S.p.A. -// https://www.iana.org/domains/root/db/cloud.html -cloud - -// club : Registry Services, LLC -// https://www.iana.org/domains/root/db/club.html -club - -// clubmed : Club Méditerranée S.A. -// https://www.iana.org/domains/root/db/clubmed.html -clubmed - -// coach : Binky Moon, LLC -// https://www.iana.org/domains/root/db/coach.html -coach - -// codes : Binky Moon, LLC -// https://www.iana.org/domains/root/db/codes.html -codes - -// coffee : Binky Moon, LLC -// https://www.iana.org/domains/root/db/coffee.html -coffee - -// college : XYZ.COM LLC -// https://www.iana.org/domains/root/db/college.html -college - -// cologne : dotKoeln GmbH -// https://www.iana.org/domains/root/db/cologne.html -cologne - -// comcast : Comcast IP Holdings I, LLC -// https://www.iana.org/domains/root/db/comcast.html -comcast - -// commbank : COMMONWEALTH BANK OF AUSTRALIA -// https://www.iana.org/domains/root/db/commbank.html -commbank - -// community : Binky Moon, LLC -// https://www.iana.org/domains/root/db/community.html -community - -// company : Binky Moon, LLC -// https://www.iana.org/domains/root/db/company.html -company - -// compare : Registry Services, LLC -// https://www.iana.org/domains/root/db/compare.html -compare - -// computer : Binky Moon, LLC -// https://www.iana.org/domains/root/db/computer.html -computer - -// comsec : VeriSign, Inc. -// https://www.iana.org/domains/root/db/comsec.html -comsec - -// condos : Binky Moon, LLC -// https://www.iana.org/domains/root/db/condos.html -condos - -// construction : Binky Moon, LLC -// https://www.iana.org/domains/root/db/construction.html -construction - -// consulting : Dog Beach, LLC -// https://www.iana.org/domains/root/db/consulting.html -consulting - -// contact : Dog Beach, LLC -// https://www.iana.org/domains/root/db/contact.html -contact - -// contractors : Binky Moon, LLC -// https://www.iana.org/domains/root/db/contractors.html -contractors - -// cooking : Registry Services, LLC -// https://www.iana.org/domains/root/db/cooking.html -cooking - -// cool : Binky Moon, LLC -// https://www.iana.org/domains/root/db/cool.html -cool - -// corsica : Collectivité de Corse -// https://www.iana.org/domains/root/db/corsica.html -corsica - -// country : Internet Naming Company LLC -// https://www.iana.org/domains/root/db/country.html -country - -// coupon : Amazon Registry Services, Inc. -// https://www.iana.org/domains/root/db/coupon.html -coupon - -// coupons : Binky Moon, LLC -// https://www.iana.org/domains/root/db/coupons.html -coupons - -// courses : Registry Services, LLC -// https://www.iana.org/domains/root/db/courses.html -courses - -// cpa : American Institute of Certified Public Accountants -// https://www.iana.org/domains/root/db/cpa.html -cpa - -// credit : Binky Moon, LLC -// https://www.iana.org/domains/root/db/credit.html -credit - -// creditcard : Binky Moon, LLC -// https://www.iana.org/domains/root/db/creditcard.html -creditcard - -// creditunion : DotCooperation LLC -// https://www.iana.org/domains/root/db/creditunion.html -creditunion - -// cricket : dot Cricket Limited -// https://www.iana.org/domains/root/db/cricket.html -cricket - -// crown : Crown Equipment Corporation -// https://www.iana.org/domains/root/db/crown.html -crown - -// crs : Federated Co-operatives Limited -// https://www.iana.org/domains/root/db/crs.html -crs - -// cruise : Viking River Cruises (Bermuda) Ltd. -// https://www.iana.org/domains/root/db/cruise.html -cruise - -// cruises : Binky Moon, LLC -// https://www.iana.org/domains/root/db/cruises.html -cruises - -// cuisinella : SCHMIDT GROUPE S.A.S. -// https://www.iana.org/domains/root/db/cuisinella.html -cuisinella - -// cymru : Nominet UK -// https://www.iana.org/domains/root/db/cymru.html -cymru - -// cyou : ShortDot SA -// https://www.iana.org/domains/root/db/cyou.html -cyou - -// dabur : Dabur India Limited -// https://www.iana.org/domains/root/db/dabur.html -dabur - -// dad : Charleston Road Registry Inc. -// https://www.iana.org/domains/root/db/dad.html -dad - -// dance : Dog Beach, LLC -// https://www.iana.org/domains/root/db/dance.html -dance - -// data : Dish DBS Corporation -// https://www.iana.org/domains/root/db/data.html -data - -// date : dot Date Limited -// https://www.iana.org/domains/root/db/date.html -date - -// dating : Binky Moon, LLC -// https://www.iana.org/domains/root/db/dating.html -dating - -// datsun : NISSAN MOTOR CO., LTD. -// https://www.iana.org/domains/root/db/datsun.html -datsun - -// day : Charleston Road Registry Inc. -// https://www.iana.org/domains/root/db/day.html -day - -// dclk : Charleston Road Registry Inc. -// https://www.iana.org/domains/root/db/dclk.html -dclk - -// dds : Registry Services, LLC -// https://www.iana.org/domains/root/db/dds.html -dds - -// deal : Amazon Registry Services, Inc. -// https://www.iana.org/domains/root/db/deal.html -deal - -// dealer : Intercap Registry Inc. -// https://www.iana.org/domains/root/db/dealer.html -dealer - -// deals : Binky Moon, LLC -// https://www.iana.org/domains/root/db/deals.html -deals - -// degree : Dog Beach, LLC -// https://www.iana.org/domains/root/db/degree.html -degree - -// delivery : Binky Moon, LLC -// https://www.iana.org/domains/root/db/delivery.html -delivery - -// dell : Dell Inc. -// https://www.iana.org/domains/root/db/dell.html -dell - -// deloitte : Deloitte Touche Tohmatsu -// https://www.iana.org/domains/root/db/deloitte.html -deloitte - -// delta : Delta Air Lines, Inc. -// https://www.iana.org/domains/root/db/delta.html -delta - -// democrat : Dog Beach, LLC -// https://www.iana.org/domains/root/db/democrat.html -democrat - -// dental : Binky Moon, LLC -// https://www.iana.org/domains/root/db/dental.html -dental - -// dentist : Dog Beach, LLC -// https://www.iana.org/domains/root/db/dentist.html -dentist - -// design : Registry Services, LLC -// https://www.iana.org/domains/root/db/design.html -design - -// dev : Charleston Road Registry Inc. -// https://www.iana.org/domains/root/db/dev.html -dev - -// dhl : Deutsche Post AG -// https://www.iana.org/domains/root/db/dhl.html -dhl - -// diamonds : Binky Moon, LLC -// https://www.iana.org/domains/root/db/diamonds.html -diamonds - -// diet : XYZ.COM LLC -// https://www.iana.org/domains/root/db/diet.html -diet - -// digital : Binky Moon, LLC -// https://www.iana.org/domains/root/db/digital.html -digital - -// direct : Binky Moon, LLC -// https://www.iana.org/domains/root/db/direct.html -direct - -// directory : Binky Moon, LLC -// https://www.iana.org/domains/root/db/directory.html -directory - -// discount : Binky Moon, LLC -// https://www.iana.org/domains/root/db/discount.html -discount - -// discover : Discover Financial Services -// https://www.iana.org/domains/root/db/discover.html -discover - -// dish : Dish DBS Corporation -// https://www.iana.org/domains/root/db/dish.html -dish - -// diy : Lifestyle Domain Holdings, Inc. -// https://www.iana.org/domains/root/db/diy.html -diy - -// dnp : Dai Nippon Printing Co., Ltd. -// https://www.iana.org/domains/root/db/dnp.html -dnp - -// docs : Charleston Road Registry Inc. -// https://www.iana.org/domains/root/db/docs.html -docs - -// doctor : Binky Moon, LLC -// https://www.iana.org/domains/root/db/doctor.html -doctor - -// dog : Binky Moon, LLC -// https://www.iana.org/domains/root/db/dog.html -dog - -// domains : Binky Moon, LLC -// https://www.iana.org/domains/root/db/domains.html -domains - -// dot : Dish DBS Corporation -// https://www.iana.org/domains/root/db/dot.html -dot - -// download : dot Support Limited -// https://www.iana.org/domains/root/db/download.html -download - -// drive : Charleston Road Registry Inc. -// https://www.iana.org/domains/root/db/drive.html -drive - -// dtv : Dish DBS Corporation -// https://www.iana.org/domains/root/db/dtv.html -dtv - -// dubai : Dubai Smart Government Department -// https://www.iana.org/domains/root/db/dubai.html -dubai - -// dunlop : The Goodyear Tire & Rubber Company -// https://www.iana.org/domains/root/db/dunlop.html -dunlop - -// dupont : DuPont Specialty Products USA, LLC -// https://www.iana.org/domains/root/db/dupont.html -dupont - -// durban : ZA Central Registry NPC trading as ZA Central Registry -// https://www.iana.org/domains/root/db/durban.html -durban - -// dvag : Deutsche Vermögensberatung Aktiengesellschaft DVAG -// https://www.iana.org/domains/root/db/dvag.html -dvag - -// dvr : DISH Technologies L.L.C. -// https://www.iana.org/domains/root/db/dvr.html -dvr - -// earth : Interlink Systems Innovation Institute K.K. -// https://www.iana.org/domains/root/db/earth.html -earth - -// eat : Charleston Road Registry Inc. -// https://www.iana.org/domains/root/db/eat.html -eat - -// eco : Big Room Inc. -// https://www.iana.org/domains/root/db/eco.html -eco - -// edeka : EDEKA Verband kaufmännischer Genossenschaften e.V. -// https://www.iana.org/domains/root/db/edeka.html -edeka - -// education : Binky Moon, LLC -// https://www.iana.org/domains/root/db/education.html -education - -// email : Binky Moon, LLC -// https://www.iana.org/domains/root/db/email.html -email - -// emerck : Merck KGaA -// https://www.iana.org/domains/root/db/emerck.html -emerck - -// energy : Binky Moon, LLC -// https://www.iana.org/domains/root/db/energy.html -energy - -// engineer : Dog Beach, LLC -// https://www.iana.org/domains/root/db/engineer.html -engineer - -// engineering : Binky Moon, LLC -// https://www.iana.org/domains/root/db/engineering.html -engineering - -// enterprises : Binky Moon, LLC -// https://www.iana.org/domains/root/db/enterprises.html -enterprises - -// epson : Seiko Epson Corporation -// https://www.iana.org/domains/root/db/epson.html -epson - -// equipment : Binky Moon, LLC -// https://www.iana.org/domains/root/db/equipment.html -equipment - -// ericsson : Telefonaktiebolaget L M Ericsson -// https://www.iana.org/domains/root/db/ericsson.html -ericsson - -// erni : ERNI Group Holding AG -// https://www.iana.org/domains/root/db/erni.html -erni - -// esq : Charleston Road Registry Inc. -// https://www.iana.org/domains/root/db/esq.html -esq - -// estate : Binky Moon, LLC -// https://www.iana.org/domains/root/db/estate.html -estate - -// etisalat : Emirates Telecommunications Corporation (trading as Etisalat) -// https://www.iana.org/domains/root/db/etisalat.html -etisalat - -// eurovision : European Broadcasting Union (EBU) -// https://www.iana.org/domains/root/db/eurovision.html -eurovision - -// eus : Puntueus Fundazioa -// https://www.iana.org/domains/root/db/eus.html -eus - -// events : Binky Moon, LLC -// https://www.iana.org/domains/root/db/events.html -events - -// exchange : Binky Moon, LLC -// https://www.iana.org/domains/root/db/exchange.html -exchange - -// expert : Binky Moon, LLC -// https://www.iana.org/domains/root/db/expert.html -expert - -// exposed : Binky Moon, LLC -// https://www.iana.org/domains/root/db/exposed.html -exposed - -// express : Binky Moon, LLC -// https://www.iana.org/domains/root/db/express.html -express - -// extraspace : Extra Space Storage LLC -// https://www.iana.org/domains/root/db/extraspace.html -extraspace - -// fage : Fage International S.A. -// https://www.iana.org/domains/root/db/fage.html -fage - -// fail : Binky Moon, LLC -// https://www.iana.org/domains/root/db/fail.html -fail - -// fairwinds : FairWinds Partners, LLC -// https://www.iana.org/domains/root/db/fairwinds.html -fairwinds - -// faith : dot Faith Limited -// https://www.iana.org/domains/root/db/faith.html -faith - -// family : Dog Beach, LLC -// https://www.iana.org/domains/root/db/family.html -family - -// fan : Dog Beach, LLC -// https://www.iana.org/domains/root/db/fan.html -fan - -// fans : ZDNS International Limited -// https://www.iana.org/domains/root/db/fans.html -fans - -// farm : Binky Moon, LLC -// https://www.iana.org/domains/root/db/farm.html -farm - -// farmers : Farmers Insurance Exchange -// https://www.iana.org/domains/root/db/farmers.html -farmers - -// fashion : Registry Services, LLC -// https://www.iana.org/domains/root/db/fashion.html -fashion - -// fast : Amazon Registry Services, Inc. -// https://www.iana.org/domains/root/db/fast.html -fast - -// fedex : Federal Express Corporation -// https://www.iana.org/domains/root/db/fedex.html -fedex - -// feedback : Top Level Spectrum, Inc. -// https://www.iana.org/domains/root/db/feedback.html -feedback - -// ferrari : Fiat Chrysler Automobiles N.V. -// https://www.iana.org/domains/root/db/ferrari.html -ferrari - -// ferrero : Ferrero Trading Lux S.A. -// https://www.iana.org/domains/root/db/ferrero.html -ferrero - -// fidelity : Fidelity Brokerage Services LLC -// https://www.iana.org/domains/root/db/fidelity.html -fidelity - -// fido : Rogers Communications Canada Inc. -// https://www.iana.org/domains/root/db/fido.html -fido - -// film : Motion Picture Domain Registry Pty Ltd -// https://www.iana.org/domains/root/db/film.html -film - -// final : Núcleo de Informação e Coordenação do Ponto BR - NIC.br -// https://www.iana.org/domains/root/db/final.html -final - -// finance : Binky Moon, LLC -// https://www.iana.org/domains/root/db/finance.html -finance - -// financial : Binky Moon, LLC -// https://www.iana.org/domains/root/db/financial.html -financial - -// fire : Amazon Registry Services, Inc. -// https://www.iana.org/domains/root/db/fire.html -fire - -// firestone : Bridgestone Licensing Services, Inc -// https://www.iana.org/domains/root/db/firestone.html -firestone - -// firmdale : Firmdale Holdings Limited -// https://www.iana.org/domains/root/db/firmdale.html -firmdale - -// fish : Binky Moon, LLC -// https://www.iana.org/domains/root/db/fish.html -fish - -// fishing : Registry Services, LLC -// https://www.iana.org/domains/root/db/fishing.html -fishing - -// fit : Registry Services, LLC -// https://www.iana.org/domains/root/db/fit.html -fit - -// fitness : Binky Moon, LLC -// https://www.iana.org/domains/root/db/fitness.html -fitness - -// flickr : Flickr, Inc. -// https://www.iana.org/domains/root/db/flickr.html -flickr - -// flights : Binky Moon, LLC -// https://www.iana.org/domains/root/db/flights.html -flights - -// flir : FLIR Systems, Inc. -// https://www.iana.org/domains/root/db/flir.html -flir - -// florist : Binky Moon, LLC -// https://www.iana.org/domains/root/db/florist.html -florist - -// flowers : XYZ.COM LLC -// https://www.iana.org/domains/root/db/flowers.html -flowers - -// fly : Charleston Road Registry Inc. -// https://www.iana.org/domains/root/db/fly.html -fly - -// foo : Charleston Road Registry Inc. -// https://www.iana.org/domains/root/db/foo.html -foo - -// food : Lifestyle Domain Holdings, Inc. -// https://www.iana.org/domains/root/db/food.html -food - -// football : Binky Moon, LLC -// https://www.iana.org/domains/root/db/football.html -football - -// ford : Ford Motor Company -// https://www.iana.org/domains/root/db/ford.html -ford - -// forex : Dog Beach, LLC -// https://www.iana.org/domains/root/db/forex.html -forex - -// forsale : Dog Beach, LLC -// https://www.iana.org/domains/root/db/forsale.html -forsale - -// forum : Fegistry, LLC -// https://www.iana.org/domains/root/db/forum.html -forum - -// foundation : Public Interest Registry -// https://www.iana.org/domains/root/db/foundation.html -foundation - -// fox : FOX Registry, LLC -// https://www.iana.org/domains/root/db/fox.html -fox - -// free : Amazon Registry Services, Inc. -// https://www.iana.org/domains/root/db/free.html -free - -// fresenius : Fresenius Immobilien-Verwaltungs-GmbH -// https://www.iana.org/domains/root/db/fresenius.html -fresenius - -// frl : FRLregistry B.V. -// https://www.iana.org/domains/root/db/frl.html -frl - -// frogans : OP3FT -// https://www.iana.org/domains/root/db/frogans.html -frogans - -// frontier : Frontier Communications Corporation -// https://www.iana.org/domains/root/db/frontier.html -frontier - -// ftr : Frontier Communications Corporation -// https://www.iana.org/domains/root/db/ftr.html -ftr - -// fujitsu : Fujitsu Limited -// https://www.iana.org/domains/root/db/fujitsu.html -fujitsu - -// fun : Radix FZC DMCC -// https://www.iana.org/domains/root/db/fun.html -fun - -// fund : Binky Moon, LLC -// https://www.iana.org/domains/root/db/fund.html -fund - -// furniture : Binky Moon, LLC -// https://www.iana.org/domains/root/db/furniture.html -furniture - -// futbol : Dog Beach, LLC -// https://www.iana.org/domains/root/db/futbol.html -futbol - -// fyi : Binky Moon, LLC -// https://www.iana.org/domains/root/db/fyi.html -fyi - -// gal : Asociación puntoGAL -// https://www.iana.org/domains/root/db/gal.html -gal - -// gallery : Binky Moon, LLC -// https://www.iana.org/domains/root/db/gallery.html -gallery - -// gallo : Gallo Vineyards, Inc. -// https://www.iana.org/domains/root/db/gallo.html -gallo - -// gallup : Gallup, Inc. -// https://www.iana.org/domains/root/db/gallup.html -gallup - -// game : XYZ.COM LLC -// https://www.iana.org/domains/root/db/game.html -game - -// games : Dog Beach, LLC -// https://www.iana.org/domains/root/db/games.html -games - -// gap : The Gap, Inc. -// https://www.iana.org/domains/root/db/gap.html -gap - -// garden : Registry Services, LLC -// https://www.iana.org/domains/root/db/garden.html -garden - -// gay : Registry Services, LLC -// https://www.iana.org/domains/root/db/gay.html -gay - -// gbiz : Charleston Road Registry Inc. -// https://www.iana.org/domains/root/db/gbiz.html -gbiz - -// gdn : Joint Stock Company "Navigation-information systems" -// https://www.iana.org/domains/root/db/gdn.html -gdn - -// gea : GEA Group Aktiengesellschaft -// https://www.iana.org/domains/root/db/gea.html -gea - -// gent : Easyhost BV -// https://www.iana.org/domains/root/db/gent.html -gent - -// genting : Resorts World Inc Pte. Ltd. -// https://www.iana.org/domains/root/db/genting.html -genting - -// george : Wal-Mart Stores, Inc. -// https://www.iana.org/domains/root/db/george.html -george - -// ggee : GMO Internet, Inc. -// https://www.iana.org/domains/root/db/ggee.html -ggee - -// gift : DotGift, LLC -// https://www.iana.org/domains/root/db/gift.html -gift - -// gifts : Binky Moon, LLC -// https://www.iana.org/domains/root/db/gifts.html -gifts - -// gives : Public Interest Registry -// https://www.iana.org/domains/root/db/gives.html -gives - -// giving : Public Interest Registry -// https://www.iana.org/domains/root/db/giving.html -giving - -// glass : Binky Moon, LLC -// https://www.iana.org/domains/root/db/glass.html -glass - -// gle : Charleston Road Registry Inc. -// https://www.iana.org/domains/root/db/gle.html -gle - -// global : Identity Digital Limited -// https://www.iana.org/domains/root/db/global.html -global - -// globo : Globo Comunicação e Participações S.A -// https://www.iana.org/domains/root/db/globo.html -globo - -// gmail : Charleston Road Registry Inc. -// https://www.iana.org/domains/root/db/gmail.html -gmail - -// gmbh : Binky Moon, LLC -// https://www.iana.org/domains/root/db/gmbh.html -gmbh - -// gmo : GMO Internet, Inc. -// https://www.iana.org/domains/root/db/gmo.html -gmo - -// gmx : 1&1 Mail & Media GmbH -// https://www.iana.org/domains/root/db/gmx.html -gmx - -// godaddy : Go Daddy East, LLC -// https://www.iana.org/domains/root/db/godaddy.html -godaddy - -// gold : Binky Moon, LLC -// https://www.iana.org/domains/root/db/gold.html -gold - -// goldpoint : YODOBASHI CAMERA CO.,LTD. -// https://www.iana.org/domains/root/db/goldpoint.html -goldpoint - -// golf : Binky Moon, LLC -// https://www.iana.org/domains/root/db/golf.html -golf - -// goo : NTT Resonant Inc. -// https://www.iana.org/domains/root/db/goo.html -goo - -// goodyear : The Goodyear Tire & Rubber Company -// https://www.iana.org/domains/root/db/goodyear.html -goodyear - -// goog : Charleston Road Registry Inc. -// https://www.iana.org/domains/root/db/goog.html -goog - -// google : Charleston Road Registry Inc. -// https://www.iana.org/domains/root/db/google.html -google - -// gop : Republican State Leadership Committee, Inc. -// https://www.iana.org/domains/root/db/gop.html -gop - -// got : Amazon Registry Services, Inc. -// https://www.iana.org/domains/root/db/got.html -got - -// grainger : Grainger Registry Services, LLC -// https://www.iana.org/domains/root/db/grainger.html -grainger - -// graphics : Binky Moon, LLC -// https://www.iana.org/domains/root/db/graphics.html -graphics - -// gratis : Binky Moon, LLC -// https://www.iana.org/domains/root/db/gratis.html -gratis - -// green : Identity Digital Limited -// https://www.iana.org/domains/root/db/green.html -green - -// gripe : Binky Moon, LLC -// https://www.iana.org/domains/root/db/gripe.html -gripe - -// grocery : Wal-Mart Stores, Inc. -// https://www.iana.org/domains/root/db/grocery.html -grocery - -// group : Binky Moon, LLC -// https://www.iana.org/domains/root/db/group.html -group - -// guardian : The Guardian Life Insurance Company of America -// https://www.iana.org/domains/root/db/guardian.html -guardian - -// gucci : Guccio Gucci S.p.a. -// https://www.iana.org/domains/root/db/gucci.html -gucci - -// guge : Charleston Road Registry Inc. -// https://www.iana.org/domains/root/db/guge.html -guge - -// guide : Binky Moon, LLC -// https://www.iana.org/domains/root/db/guide.html -guide - -// guitars : XYZ.COM LLC -// https://www.iana.org/domains/root/db/guitars.html -guitars - -// guru : Binky Moon, LLC -// https://www.iana.org/domains/root/db/guru.html -guru - -// hair : XYZ.COM LLC -// https://www.iana.org/domains/root/db/hair.html -hair - -// hamburg : Hamburg Top-Level-Domain GmbH -// https://www.iana.org/domains/root/db/hamburg.html -hamburg - -// hangout : Charleston Road Registry Inc. -// https://www.iana.org/domains/root/db/hangout.html -hangout - -// haus : Dog Beach, LLC -// https://www.iana.org/domains/root/db/haus.html -haus - -// hbo : HBO Registry Services, Inc. -// https://www.iana.org/domains/root/db/hbo.html -hbo - -// hdfc : HOUSING DEVELOPMENT FINANCE CORPORATION LIMITED -// https://www.iana.org/domains/root/db/hdfc.html -hdfc - -// hdfcbank : HDFC Bank Limited -// https://www.iana.org/domains/root/db/hdfcbank.html -hdfcbank - -// health : Registry Services, LLC -// https://www.iana.org/domains/root/db/health.html -health - -// healthcare : Binky Moon, LLC -// https://www.iana.org/domains/root/db/healthcare.html -healthcare - -// help : Innovation service Limited -// https://www.iana.org/domains/root/db/help.html -help - -// helsinki : City of Helsinki -// https://www.iana.org/domains/root/db/helsinki.html -helsinki - -// here : Charleston Road Registry Inc. -// https://www.iana.org/domains/root/db/here.html -here - -// hermes : HERMES INTERNATIONAL -// https://www.iana.org/domains/root/db/hermes.html -hermes - -// hiphop : Dot Hip Hop, LLC -// https://www.iana.org/domains/root/db/hiphop.html -hiphop - -// hisamitsu : Hisamitsu Pharmaceutical Co.,Inc. -// https://www.iana.org/domains/root/db/hisamitsu.html -hisamitsu - -// hitachi : Hitachi, Ltd. -// https://www.iana.org/domains/root/db/hitachi.html -hitachi - -// hiv : Internet Naming Company LLC -// https://www.iana.org/domains/root/db/hiv.html -hiv - -// hkt : PCCW-HKT DataCom Services Limited -// https://www.iana.org/domains/root/db/hkt.html -hkt - -// hockey : Binky Moon, LLC -// https://www.iana.org/domains/root/db/hockey.html -hockey - -// holdings : Binky Moon, LLC -// https://www.iana.org/domains/root/db/holdings.html -holdings - -// holiday : Binky Moon, LLC -// https://www.iana.org/domains/root/db/holiday.html -holiday - -// homedepot : Home Depot Product Authority, LLC -// https://www.iana.org/domains/root/db/homedepot.html -homedepot - -// homegoods : The TJX Companies, Inc. -// https://www.iana.org/domains/root/db/homegoods.html -homegoods - -// homes : XYZ.COM LLC -// https://www.iana.org/domains/root/db/homes.html -homes - -// homesense : The TJX Companies, Inc. -// https://www.iana.org/domains/root/db/homesense.html -homesense - -// honda : Honda Motor Co., Ltd. -// https://www.iana.org/domains/root/db/honda.html -honda - -// horse : Registry Services, LLC -// https://www.iana.org/domains/root/db/horse.html -horse - -// hospital : Binky Moon, LLC -// https://www.iana.org/domains/root/db/hospital.html -hospital - -// host : Radix FZC DMCC -// https://www.iana.org/domains/root/db/host.html -host - -// hosting : XYZ.COM LLC -// https://www.iana.org/domains/root/db/hosting.html -hosting - -// hot : Amazon Registry Services, Inc. -// https://www.iana.org/domains/root/db/hot.html -hot - -// hotels : Booking.com B.V. -// https://www.iana.org/domains/root/db/hotels.html -hotels - -// hotmail : Microsoft Corporation -// https://www.iana.org/domains/root/db/hotmail.html -hotmail - -// house : Binky Moon, LLC -// https://www.iana.org/domains/root/db/house.html -house - -// how : Charleston Road Registry Inc. -// https://www.iana.org/domains/root/db/how.html -how - -// hsbc : HSBC Global Services (UK) Limited -// https://www.iana.org/domains/root/db/hsbc.html -hsbc - -// hughes : Hughes Satellite Systems Corporation -// https://www.iana.org/domains/root/db/hughes.html -hughes - -// hyatt : Hyatt GTLD, L.L.C. -// https://www.iana.org/domains/root/db/hyatt.html -hyatt - -// hyundai : Hyundai Motor Company -// https://www.iana.org/domains/root/db/hyundai.html -hyundai - -// ibm : International Business Machines Corporation -// https://www.iana.org/domains/root/db/ibm.html -ibm - -// icbc : Industrial and Commercial Bank of China Limited -// https://www.iana.org/domains/root/db/icbc.html -icbc - -// ice : IntercontinentalExchange, Inc. -// https://www.iana.org/domains/root/db/ice.html -ice - -// icu : ShortDot SA -// https://www.iana.org/domains/root/db/icu.html -icu - -// ieee : IEEE Global LLC -// https://www.iana.org/domains/root/db/ieee.html -ieee - -// ifm : ifm electronic gmbh -// https://www.iana.org/domains/root/db/ifm.html -ifm - -// ikano : Ikano S.A. -// https://www.iana.org/domains/root/db/ikano.html -ikano - -// imamat : Fondation Aga Khan (Aga Khan Foundation) -// https://www.iana.org/domains/root/db/imamat.html -imamat - -// imdb : Amazon Registry Services, Inc. -// https://www.iana.org/domains/root/db/imdb.html -imdb - -// immo : Binky Moon, LLC -// https://www.iana.org/domains/root/db/immo.html -immo - -// immobilien : Dog Beach, LLC -// https://www.iana.org/domains/root/db/immobilien.html -immobilien - -// inc : Intercap Registry Inc. -// https://www.iana.org/domains/root/db/inc.html -inc - -// industries : Binky Moon, LLC -// https://www.iana.org/domains/root/db/industries.html -industries - -// infiniti : NISSAN MOTOR CO., LTD. -// https://www.iana.org/domains/root/db/infiniti.html -infiniti - -// ing : Charleston Road Registry Inc. -// https://www.iana.org/domains/root/db/ing.html -ing - -// ink : Registry Services, LLC -// https://www.iana.org/domains/root/db/ink.html -ink - -// institute : Binky Moon, LLC -// https://www.iana.org/domains/root/db/institute.html -institute - -// insurance : fTLD Registry Services LLC -// https://www.iana.org/domains/root/db/insurance.html -insurance - -// insure : Binky Moon, LLC -// https://www.iana.org/domains/root/db/insure.html -insure - -// international : Binky Moon, LLC -// https://www.iana.org/domains/root/db/international.html -international - -// intuit : Intuit Administrative Services, Inc. -// https://www.iana.org/domains/root/db/intuit.html -intuit - -// investments : Binky Moon, LLC -// https://www.iana.org/domains/root/db/investments.html -investments - -// ipiranga : Ipiranga Produtos de Petroleo S.A. -// https://www.iana.org/domains/root/db/ipiranga.html -ipiranga - -// irish : Binky Moon, LLC -// https://www.iana.org/domains/root/db/irish.html -irish - -// ismaili : Fondation Aga Khan (Aga Khan Foundation) -// https://www.iana.org/domains/root/db/ismaili.html -ismaili - -// ist : Istanbul Metropolitan Municipality -// https://www.iana.org/domains/root/db/ist.html -ist - -// istanbul : Istanbul Metropolitan Municipality -// https://www.iana.org/domains/root/db/istanbul.html -istanbul - -// itau : Itau Unibanco Holding S.A. -// https://www.iana.org/domains/root/db/itau.html -itau - -// itv : ITV Services Limited -// https://www.iana.org/domains/root/db/itv.html -itv - -// jaguar : Jaguar Land Rover Ltd -// https://www.iana.org/domains/root/db/jaguar.html -jaguar - -// java : Oracle Corporation -// https://www.iana.org/domains/root/db/java.html -java - -// jcb : JCB Co., Ltd. -// https://www.iana.org/domains/root/db/jcb.html -jcb - -// jeep : FCA US LLC. -// https://www.iana.org/domains/root/db/jeep.html -jeep - -// jetzt : Binky Moon, LLC -// https://www.iana.org/domains/root/db/jetzt.html -jetzt - -// jewelry : Binky Moon, LLC -// https://www.iana.org/domains/root/db/jewelry.html -jewelry - -// jio : Reliance Industries Limited -// https://www.iana.org/domains/root/db/jio.html -jio - -// jll : Jones Lang LaSalle Incorporated -// https://www.iana.org/domains/root/db/jll.html -jll - -// jmp : Matrix IP LLC -// https://www.iana.org/domains/root/db/jmp.html -jmp - -// jnj : Johnson & Johnson Services, Inc. -// https://www.iana.org/domains/root/db/jnj.html -jnj - -// joburg : ZA Central Registry NPC trading as ZA Central Registry -// https://www.iana.org/domains/root/db/joburg.html -joburg - -// jot : Amazon Registry Services, Inc. -// https://www.iana.org/domains/root/db/jot.html -jot - -// joy : Amazon Registry Services, Inc. -// https://www.iana.org/domains/root/db/joy.html -joy - -// jpmorgan : JPMorgan Chase Bank, National Association -// https://www.iana.org/domains/root/db/jpmorgan.html -jpmorgan - -// jprs : Japan Registry Services Co., Ltd. -// https://www.iana.org/domains/root/db/jprs.html -jprs - -// juegos : Internet Naming Company LLC -// https://www.iana.org/domains/root/db/juegos.html -juegos - -// juniper : JUNIPER NETWORKS, INC. -// https://www.iana.org/domains/root/db/juniper.html -juniper - -// kaufen : Dog Beach, LLC -// https://www.iana.org/domains/root/db/kaufen.html -kaufen - -// kddi : KDDI CORPORATION -// https://www.iana.org/domains/root/db/kddi.html -kddi - -// kerryhotels : Kerry Trading Co. Limited -// https://www.iana.org/domains/root/db/kerryhotels.html -kerryhotels - -// kerrylogistics : Kerry Trading Co. Limited -// https://www.iana.org/domains/root/db/kerrylogistics.html -kerrylogistics - -// kerryproperties : Kerry Trading Co. Limited -// https://www.iana.org/domains/root/db/kerryproperties.html -kerryproperties - -// kfh : Kuwait Finance House -// https://www.iana.org/domains/root/db/kfh.html -kfh - -// kia : KIA MOTORS CORPORATION -// https://www.iana.org/domains/root/db/kia.html -kia - -// kids : DotKids Foundation Limited -// https://www.iana.org/domains/root/db/kids.html -kids - -// kim : Identity Digital Limited -// https://www.iana.org/domains/root/db/kim.html -kim - -// kindle : Amazon Registry Services, Inc. -// https://www.iana.org/domains/root/db/kindle.html -kindle - -// kitchen : Binky Moon, LLC -// https://www.iana.org/domains/root/db/kitchen.html -kitchen - -// kiwi : DOT KIWI LIMITED -// https://www.iana.org/domains/root/db/kiwi.html -kiwi - -// koeln : dotKoeln GmbH -// https://www.iana.org/domains/root/db/koeln.html -koeln - -// komatsu : Komatsu Ltd. -// https://www.iana.org/domains/root/db/komatsu.html -komatsu - -// kosher : Kosher Marketing Assets LLC -// https://www.iana.org/domains/root/db/kosher.html -kosher - -// kpmg : KPMG International Cooperative (KPMG International Genossenschaft) -// https://www.iana.org/domains/root/db/kpmg.html -kpmg - -// kpn : Koninklijke KPN N.V. -// https://www.iana.org/domains/root/db/kpn.html -kpn - -// krd : KRG Department of Information Technology -// https://www.iana.org/domains/root/db/krd.html -krd - -// kred : KredTLD Pty Ltd -// https://www.iana.org/domains/root/db/kred.html -kred - -// kuokgroup : Kerry Trading Co. Limited -// https://www.iana.org/domains/root/db/kuokgroup.html -kuokgroup - -// kyoto : Academic Institution: Kyoto Jyoho Gakuen -// https://www.iana.org/domains/root/db/kyoto.html -kyoto - -// lacaixa : Fundación Bancaria Caixa d’Estalvis i Pensions de Barcelona, “la Caixa” -// https://www.iana.org/domains/root/db/lacaixa.html -lacaixa - -// lamborghini : Automobili Lamborghini S.p.A. -// https://www.iana.org/domains/root/db/lamborghini.html -lamborghini - -// lamer : The Estée Lauder Companies Inc. -// https://www.iana.org/domains/root/db/lamer.html -lamer - -// lancaster : LANCASTER -// https://www.iana.org/domains/root/db/lancaster.html -lancaster - -// land : Binky Moon, LLC -// https://www.iana.org/domains/root/db/land.html -land - -// landrover : Jaguar Land Rover Ltd -// https://www.iana.org/domains/root/db/landrover.html -landrover - -// lanxess : LANXESS Corporation -// https://www.iana.org/domains/root/db/lanxess.html -lanxess - -// lasalle : Jones Lang LaSalle Incorporated -// https://www.iana.org/domains/root/db/lasalle.html -lasalle - -// lat : XYZ.COM LLC -// https://www.iana.org/domains/root/db/lat.html -lat - -// latino : Dish DBS Corporation -// https://www.iana.org/domains/root/db/latino.html -latino - -// latrobe : La Trobe University -// https://www.iana.org/domains/root/db/latrobe.html -latrobe - -// law : Registry Services, LLC -// https://www.iana.org/domains/root/db/law.html -law - -// lawyer : Dog Beach, LLC -// https://www.iana.org/domains/root/db/lawyer.html -lawyer - -// lds : IRI Domain Management, LLC -// https://www.iana.org/domains/root/db/lds.html -lds - -// lease : Binky Moon, LLC -// https://www.iana.org/domains/root/db/lease.html -lease - -// leclerc : A.C.D. LEC Association des Centres Distributeurs Edouard Leclerc -// https://www.iana.org/domains/root/db/leclerc.html -leclerc - -// lefrak : LeFrak Organization, Inc. -// https://www.iana.org/domains/root/db/lefrak.html -lefrak - -// legal : Binky Moon, LLC -// https://www.iana.org/domains/root/db/legal.html -legal - -// lego : LEGO Juris A/S -// https://www.iana.org/domains/root/db/lego.html -lego - -// lexus : TOYOTA MOTOR CORPORATION -// https://www.iana.org/domains/root/db/lexus.html -lexus - -// lgbt : Identity Digital Limited -// https://www.iana.org/domains/root/db/lgbt.html -lgbt - -// lidl : Schwarz Domains und Services GmbH & Co. KG -// https://www.iana.org/domains/root/db/lidl.html -lidl - -// life : Binky Moon, LLC -// https://www.iana.org/domains/root/db/life.html -life - -// lifeinsurance : American Council of Life Insurers -// https://www.iana.org/domains/root/db/lifeinsurance.html -lifeinsurance - -// lifestyle : Lifestyle Domain Holdings, Inc. -// https://www.iana.org/domains/root/db/lifestyle.html -lifestyle - -// lighting : Binky Moon, LLC -// https://www.iana.org/domains/root/db/lighting.html -lighting - -// like : Amazon Registry Services, Inc. -// https://www.iana.org/domains/root/db/like.html -like - -// lilly : Eli Lilly and Company -// https://www.iana.org/domains/root/db/lilly.html -lilly - -// limited : Binky Moon, LLC -// https://www.iana.org/domains/root/db/limited.html -limited - -// limo : Binky Moon, LLC -// https://www.iana.org/domains/root/db/limo.html -limo - -// lincoln : Ford Motor Company -// https://www.iana.org/domains/root/db/lincoln.html -lincoln - -// link : Nova Registry Ltd -// https://www.iana.org/domains/root/db/link.html -link - -// lipsy : Lipsy Ltd -// https://www.iana.org/domains/root/db/lipsy.html -lipsy - -// live : Dog Beach, LLC -// https://www.iana.org/domains/root/db/live.html -live - -// living : Lifestyle Domain Holdings, Inc. -// https://www.iana.org/domains/root/db/living.html -living - -// llc : Identity Digital Limited -// https://www.iana.org/domains/root/db/llc.html -llc - -// llp : Intercap Registry Inc. -// https://www.iana.org/domains/root/db/llp.html -llp - -// loan : dot Loan Limited -// https://www.iana.org/domains/root/db/loan.html -loan - -// loans : Binky Moon, LLC -// https://www.iana.org/domains/root/db/loans.html -loans - -// locker : Orange Domains LLC -// https://www.iana.org/domains/root/db/locker.html -locker - -// locus : Locus Analytics LLC -// https://www.iana.org/domains/root/db/locus.html -locus - -// lol : XYZ.COM LLC -// https://www.iana.org/domains/root/db/lol.html -lol - -// london : Dot London Domains Limited -// https://www.iana.org/domains/root/db/london.html -london - -// lotte : Lotte Holdings Co., Ltd. -// https://www.iana.org/domains/root/db/lotte.html -lotte - -// lotto : Identity Digital Limited -// https://www.iana.org/domains/root/db/lotto.html -lotto - -// love : Merchant Law Group LLP -// https://www.iana.org/domains/root/db/love.html -love - -// lpl : LPL Holdings, Inc. -// https://www.iana.org/domains/root/db/lpl.html -lpl - -// lplfinancial : LPL Holdings, Inc. -// https://www.iana.org/domains/root/db/lplfinancial.html -lplfinancial - -// ltd : Binky Moon, LLC -// https://www.iana.org/domains/root/db/ltd.html -ltd - -// ltda : InterNetX, Corp -// https://www.iana.org/domains/root/db/ltda.html -ltda - -// lundbeck : H. Lundbeck A/S -// https://www.iana.org/domains/root/db/lundbeck.html -lundbeck - -// luxe : Registry Services, LLC -// https://www.iana.org/domains/root/db/luxe.html -luxe - -// luxury : Luxury Partners, LLC -// https://www.iana.org/domains/root/db/luxury.html -luxury - -// madrid : Comunidad de Madrid -// https://www.iana.org/domains/root/db/madrid.html -madrid - -// maif : Mutuelle Assurance Instituteur France (MAIF) -// https://www.iana.org/domains/root/db/maif.html -maif - -// maison : Binky Moon, LLC -// https://www.iana.org/domains/root/db/maison.html -maison - -// makeup : XYZ.COM LLC -// https://www.iana.org/domains/root/db/makeup.html -makeup - -// man : MAN SE -// https://www.iana.org/domains/root/db/man.html -man - -// management : Binky Moon, LLC -// https://www.iana.org/domains/root/db/management.html -management - -// mango : PUNTO FA S.L. -// https://www.iana.org/domains/root/db/mango.html -mango - -// map : Charleston Road Registry Inc. -// https://www.iana.org/domains/root/db/map.html -map - -// market : Dog Beach, LLC -// https://www.iana.org/domains/root/db/market.html -market - -// marketing : Binky Moon, LLC -// https://www.iana.org/domains/root/db/marketing.html -marketing - -// markets : Dog Beach, LLC -// https://www.iana.org/domains/root/db/markets.html -markets - -// marriott : Marriott Worldwide Corporation -// https://www.iana.org/domains/root/db/marriott.html -marriott - -// marshalls : The TJX Companies, Inc. -// https://www.iana.org/domains/root/db/marshalls.html -marshalls - -// mattel : Mattel Sites, Inc. -// https://www.iana.org/domains/root/db/mattel.html -mattel - -// mba : Binky Moon, LLC -// https://www.iana.org/domains/root/db/mba.html -mba - -// mckinsey : McKinsey Holdings, Inc. -// https://www.iana.org/domains/root/db/mckinsey.html -mckinsey - -// med : Medistry LLC -// https://www.iana.org/domains/root/db/med.html -med - -// media : Binky Moon, LLC -// https://www.iana.org/domains/root/db/media.html -media - -// meet : Charleston Road Registry Inc. -// https://www.iana.org/domains/root/db/meet.html -meet - -// melbourne : The Crown in right of the State of Victoria, represented by its Department of State Development, Business and Innovation -// https://www.iana.org/domains/root/db/melbourne.html -melbourne - -// meme : Charleston Road Registry Inc. -// https://www.iana.org/domains/root/db/meme.html -meme - -// memorial : Dog Beach, LLC -// https://www.iana.org/domains/root/db/memorial.html -memorial - -// men : Exclusive Registry Limited -// https://www.iana.org/domains/root/db/men.html -men - -// menu : Dot Menu Registry, LLC -// https://www.iana.org/domains/root/db/menu.html -menu - -// merckmsd : MSD Registry Holdings, Inc. -// https://www.iana.org/domains/root/db/merckmsd.html -merckmsd - -// miami : Registry Services, LLC -// https://www.iana.org/domains/root/db/miami.html -miami - -// microsoft : Microsoft Corporation -// https://www.iana.org/domains/root/db/microsoft.html -microsoft - -// mini : Bayerische Motoren Werke Aktiengesellschaft -// https://www.iana.org/domains/root/db/mini.html -mini - -// mint : Intuit Administrative Services, Inc. -// https://www.iana.org/domains/root/db/mint.html -mint - -// mit : Massachusetts Institute of Technology -// https://www.iana.org/domains/root/db/mit.html -mit - -// mitsubishi : Mitsubishi Corporation -// https://www.iana.org/domains/root/db/mitsubishi.html -mitsubishi - -// mlb : MLB Advanced Media DH, LLC -// https://www.iana.org/domains/root/db/mlb.html -mlb - -// mls : The Canadian Real Estate Association -// https://www.iana.org/domains/root/db/mls.html -mls - -// mma : MMA IARD -// https://www.iana.org/domains/root/db/mma.html -mma - -// mobile : Dish DBS Corporation -// https://www.iana.org/domains/root/db/mobile.html -mobile - -// moda : Dog Beach, LLC -// https://www.iana.org/domains/root/db/moda.html -moda - -// moe : Interlink Systems Innovation Institute K.K. -// https://www.iana.org/domains/root/db/moe.html -moe - -// moi : Amazon Registry Services, Inc. -// https://www.iana.org/domains/root/db/moi.html -moi - -// mom : XYZ.COM LLC -// https://www.iana.org/domains/root/db/mom.html -mom - -// monash : Monash University -// https://www.iana.org/domains/root/db/monash.html -monash - -// money : Binky Moon, LLC -// https://www.iana.org/domains/root/db/money.html -money - -// monster : XYZ.COM LLC -// https://www.iana.org/domains/root/db/monster.html -monster - -// mormon : IRI Domain Management, LLC -// https://www.iana.org/domains/root/db/mormon.html -mormon - -// mortgage : Dog Beach, LLC -// https://www.iana.org/domains/root/db/mortgage.html -mortgage - -// moscow : Foundation for Assistance for Internet Technologies and Infrastructure Development (FAITID) -// https://www.iana.org/domains/root/db/moscow.html -moscow - -// moto : Motorola Trademark Holdings, LLC -// https://www.iana.org/domains/root/db/moto.html -moto - -// motorcycles : XYZ.COM LLC -// https://www.iana.org/domains/root/db/motorcycles.html -motorcycles - -// mov : Charleston Road Registry Inc. -// https://www.iana.org/domains/root/db/mov.html -mov - -// movie : Binky Moon, LLC -// https://www.iana.org/domains/root/db/movie.html -movie - -// msd : MSD Registry Holdings, Inc. -// https://www.iana.org/domains/root/db/msd.html -msd - -// mtn : MTN Dubai Limited -// https://www.iana.org/domains/root/db/mtn.html -mtn - -// mtr : MTR Corporation Limited -// https://www.iana.org/domains/root/db/mtr.html -mtr - -// music : DotMusic Limited -// https://www.iana.org/domains/root/db/music.html -music - -// nab : National Australia Bank Limited -// https://www.iana.org/domains/root/db/nab.html -nab - -// nagoya : GMO Registry, Inc. -// https://www.iana.org/domains/root/db/nagoya.html -nagoya - -// natura : NATURA COSMÉTICOS S.A. -// https://www.iana.org/domains/root/db/natura.html -natura - -// navy : Dog Beach, LLC -// https://www.iana.org/domains/root/db/navy.html -navy - -// nba : NBA REGISTRY, LLC -// https://www.iana.org/domains/root/db/nba.html -nba - -// nec : NEC Corporation -// https://www.iana.org/domains/root/db/nec.html -nec - -// netbank : COMMONWEALTH BANK OF AUSTRALIA -// https://www.iana.org/domains/root/db/netbank.html -netbank - -// netflix : Netflix, Inc. -// https://www.iana.org/domains/root/db/netflix.html -netflix - -// network : Binky Moon, LLC -// https://www.iana.org/domains/root/db/network.html -network - -// neustar : NeuStar, Inc. -// https://www.iana.org/domains/root/db/neustar.html -neustar - -// new : Charleston Road Registry Inc. -// https://www.iana.org/domains/root/db/new.html -new - -// news : Dog Beach, LLC -// https://www.iana.org/domains/root/db/news.html -news - -// next : Next plc -// https://www.iana.org/domains/root/db/next.html -next - -// nextdirect : Next plc -// https://www.iana.org/domains/root/db/nextdirect.html -nextdirect - -// nexus : Charleston Road Registry Inc. -// https://www.iana.org/domains/root/db/nexus.html -nexus - -// nfl : NFL Reg Ops LLC -// https://www.iana.org/domains/root/db/nfl.html -nfl - -// ngo : Public Interest Registry -// https://www.iana.org/domains/root/db/ngo.html -ngo - -// nhk : Japan Broadcasting Corporation (NHK) -// https://www.iana.org/domains/root/db/nhk.html -nhk - -// nico : DWANGO Co., Ltd. -// https://www.iana.org/domains/root/db/nico.html -nico - -// nike : NIKE, Inc. -// https://www.iana.org/domains/root/db/nike.html -nike - -// nikon : NIKON CORPORATION -// https://www.iana.org/domains/root/db/nikon.html -nikon - -// ninja : Dog Beach, LLC -// https://www.iana.org/domains/root/db/ninja.html -ninja - -// nissan : NISSAN MOTOR CO., LTD. -// https://www.iana.org/domains/root/db/nissan.html -nissan - -// nissay : Nippon Life Insurance Company -// https://www.iana.org/domains/root/db/nissay.html -nissay - -// nokia : Nokia Corporation -// https://www.iana.org/domains/root/db/nokia.html -nokia - -// norton : NortonLifeLock Inc. -// https://www.iana.org/domains/root/db/norton.html -norton - -// now : Amazon Registry Services, Inc. -// https://www.iana.org/domains/root/db/now.html -now - -// nowruz : Asia Green IT System Bilgisayar San. ve Tic. Ltd. Sti. -// https://www.iana.org/domains/root/db/nowruz.html -nowruz - -// nowtv : Starbucks (HK) Limited -// https://www.iana.org/domains/root/db/nowtv.html -nowtv - -// nra : NRA Holdings Company, INC. -// https://www.iana.org/domains/root/db/nra.html -nra - -// nrw : Minds + Machines GmbH -// https://www.iana.org/domains/root/db/nrw.html -nrw - -// ntt : NIPPON TELEGRAPH AND TELEPHONE CORPORATION -// https://www.iana.org/domains/root/db/ntt.html -ntt - -// nyc : The City of New York by and through the New York City Department of Information Technology & Telecommunications -// https://www.iana.org/domains/root/db/nyc.html -nyc - -// obi : OBI Group Holding SE & Co. KGaA -// https://www.iana.org/domains/root/db/obi.html -obi - -// observer : Fegistry, LLC -// https://www.iana.org/domains/root/db/observer.html -observer - -// office : Microsoft Corporation -// https://www.iana.org/domains/root/db/office.html -office - -// okinawa : BRregistry, Inc. -// https://www.iana.org/domains/root/db/okinawa.html -okinawa - -// olayan : Competrol (Luxembourg) Sarl -// https://www.iana.org/domains/root/db/olayan.html -olayan - -// olayangroup : Competrol (Luxembourg) Sarl -// https://www.iana.org/domains/root/db/olayangroup.html -olayangroup - -// oldnavy : The Gap, Inc. -// https://www.iana.org/domains/root/db/oldnavy.html -oldnavy - -// ollo : Dish DBS Corporation -// https://www.iana.org/domains/root/db/ollo.html -ollo - -// omega : The Swatch Group Ltd -// https://www.iana.org/domains/root/db/omega.html -omega - -// one : One.com A/S -// https://www.iana.org/domains/root/db/one.html -one - -// ong : Public Interest Registry -// https://www.iana.org/domains/root/db/ong.html -ong - -// onl : iRegistry GmbH -// https://www.iana.org/domains/root/db/onl.html -onl - -// online : Radix FZC DMCC -// https://www.iana.org/domains/root/db/online.html -online - -// ooo : INFIBEAM AVENUES LIMITED -// https://www.iana.org/domains/root/db/ooo.html -ooo - -// open : American Express Travel Related Services Company, Inc. -// https://www.iana.org/domains/root/db/open.html -open - -// oracle : Oracle Corporation -// https://www.iana.org/domains/root/db/oracle.html -oracle - -// orange : Orange Brand Services Limited -// https://www.iana.org/domains/root/db/orange.html -orange - -// organic : Identity Digital Limited -// https://www.iana.org/domains/root/db/organic.html -organic - -// origins : The Estée Lauder Companies Inc. -// https://www.iana.org/domains/root/db/origins.html -origins - -// osaka : Osaka Registry Co., Ltd. -// https://www.iana.org/domains/root/db/osaka.html -osaka - -// otsuka : Otsuka Holdings Co., Ltd. -// https://www.iana.org/domains/root/db/otsuka.html -otsuka - -// ott : Dish DBS Corporation -// https://www.iana.org/domains/root/db/ott.html -ott - -// ovh : MédiaBC -// https://www.iana.org/domains/root/db/ovh.html -ovh - -// page : Charleston Road Registry Inc. -// https://www.iana.org/domains/root/db/page.html -page - -// panasonic : Panasonic Holdings Corporation -// https://www.iana.org/domains/root/db/panasonic.html -panasonic - -// paris : City of Paris -// https://www.iana.org/domains/root/db/paris.html -paris - -// pars : Asia Green IT System Bilgisayar San. ve Tic. Ltd. Sti. -// https://www.iana.org/domains/root/db/pars.html -pars - -// partners : Binky Moon, LLC -// https://www.iana.org/domains/root/db/partners.html -partners - -// parts : Binky Moon, LLC -// https://www.iana.org/domains/root/db/parts.html -parts - -// party : Blue Sky Registry Limited -// https://www.iana.org/domains/root/db/party.html -party - -// pay : Amazon Registry Services, Inc. -// https://www.iana.org/domains/root/db/pay.html -pay - -// pccw : PCCW Enterprises Limited -// https://www.iana.org/domains/root/db/pccw.html -pccw - -// pet : Identity Digital Limited -// https://www.iana.org/domains/root/db/pet.html -pet - -// pfizer : Pfizer Inc. -// https://www.iana.org/domains/root/db/pfizer.html -pfizer - -// pharmacy : National Association of Boards of Pharmacy -// https://www.iana.org/domains/root/db/pharmacy.html -pharmacy - -// phd : Charleston Road Registry Inc. -// https://www.iana.org/domains/root/db/phd.html -phd - -// philips : Koninklijke Philips N.V. -// https://www.iana.org/domains/root/db/philips.html -philips - -// phone : Dish DBS Corporation -// https://www.iana.org/domains/root/db/phone.html -phone - -// photo : Registry Services, LLC -// https://www.iana.org/domains/root/db/photo.html -photo - -// photography : Binky Moon, LLC -// https://www.iana.org/domains/root/db/photography.html -photography - -// photos : Binky Moon, LLC -// https://www.iana.org/domains/root/db/photos.html -photos - -// physio : PhysBiz Pty Ltd -// https://www.iana.org/domains/root/db/physio.html -physio - -// pics : XYZ.COM LLC -// https://www.iana.org/domains/root/db/pics.html -pics - -// pictet : Pictet Europe S.A. -// https://www.iana.org/domains/root/db/pictet.html -pictet - -// pictures : Binky Moon, LLC -// https://www.iana.org/domains/root/db/pictures.html -pictures - -// pid : Top Level Spectrum, Inc. -// https://www.iana.org/domains/root/db/pid.html -pid - -// pin : Amazon Registry Services, Inc. -// https://www.iana.org/domains/root/db/pin.html -pin - -// ping : Ping Registry Provider, Inc. -// https://www.iana.org/domains/root/db/ping.html -ping - -// pink : Identity Digital Limited -// https://www.iana.org/domains/root/db/pink.html -pink - -// pioneer : Pioneer Corporation -// https://www.iana.org/domains/root/db/pioneer.html -pioneer - -// pizza : Binky Moon, LLC -// https://www.iana.org/domains/root/db/pizza.html -pizza - -// place : Binky Moon, LLC -// https://www.iana.org/domains/root/db/place.html -place - -// play : Charleston Road Registry Inc. -// https://www.iana.org/domains/root/db/play.html -play - -// playstation : Sony Interactive Entertainment Inc. -// https://www.iana.org/domains/root/db/playstation.html -playstation - -// plumbing : Binky Moon, LLC -// https://www.iana.org/domains/root/db/plumbing.html -plumbing - -// plus : Binky Moon, LLC -// https://www.iana.org/domains/root/db/plus.html -plus - -// pnc : PNC Domain Co., LLC -// https://www.iana.org/domains/root/db/pnc.html -pnc - -// pohl : Deutsche Vermögensberatung Aktiengesellschaft DVAG -// https://www.iana.org/domains/root/db/pohl.html -pohl - -// poker : Identity Digital Limited -// https://www.iana.org/domains/root/db/poker.html -poker - -// politie : Politie Nederland -// https://www.iana.org/domains/root/db/politie.html -politie - -// porn : ICM Registry PN LLC -// https://www.iana.org/domains/root/db/porn.html -porn - -// pramerica : Prudential Financial, Inc. -// https://www.iana.org/domains/root/db/pramerica.html -pramerica - -// praxi : Praxi S.p.A. -// https://www.iana.org/domains/root/db/praxi.html -praxi - -// press : Radix FZC DMCC -// https://www.iana.org/domains/root/db/press.html -press - -// prime : Amazon Registry Services, Inc. -// https://www.iana.org/domains/root/db/prime.html -prime - -// prod : Charleston Road Registry Inc. -// https://www.iana.org/domains/root/db/prod.html -prod - -// productions : Binky Moon, LLC -// https://www.iana.org/domains/root/db/productions.html -productions - -// prof : Charleston Road Registry Inc. -// https://www.iana.org/domains/root/db/prof.html -prof - -// progressive : Progressive Casualty Insurance Company -// https://www.iana.org/domains/root/db/progressive.html -progressive - -// promo : Identity Digital Limited -// https://www.iana.org/domains/root/db/promo.html -promo - -// properties : Binky Moon, LLC -// https://www.iana.org/domains/root/db/properties.html -properties - -// property : Digital Property Infrastructure Limited -// https://www.iana.org/domains/root/db/property.html -property - -// protection : XYZ.COM LLC -// https://www.iana.org/domains/root/db/protection.html -protection - -// pru : Prudential Financial, Inc. -// https://www.iana.org/domains/root/db/pru.html -pru - -// prudential : Prudential Financial, Inc. -// https://www.iana.org/domains/root/db/prudential.html -prudential - -// pub : Dog Beach, LLC -// https://www.iana.org/domains/root/db/pub.html -pub - -// pwc : PricewaterhouseCoopers LLP -// https://www.iana.org/domains/root/db/pwc.html -pwc - -// qpon : dotQPON LLC -// https://www.iana.org/domains/root/db/qpon.html -qpon - -// quebec : PointQuébec Inc -// https://www.iana.org/domains/root/db/quebec.html -quebec - -// quest : XYZ.COM LLC -// https://www.iana.org/domains/root/db/quest.html -quest - -// racing : Premier Registry Limited -// https://www.iana.org/domains/root/db/racing.html -racing - -// radio : European Broadcasting Union (EBU) -// https://www.iana.org/domains/root/db/radio.html -radio - -// read : Amazon Registry Services, Inc. -// https://www.iana.org/domains/root/db/read.html -read - -// realestate : dotRealEstate LLC -// https://www.iana.org/domains/root/db/realestate.html -realestate - -// realtor : Real Estate Domains LLC -// https://www.iana.org/domains/root/db/realtor.html -realtor - -// realty : Internet Naming Company LLC -// https://www.iana.org/domains/root/db/realty.html -realty - -// recipes : Binky Moon, LLC -// https://www.iana.org/domains/root/db/recipes.html -recipes - -// red : Identity Digital Limited -// https://www.iana.org/domains/root/db/red.html -red - -// redstone : Redstone Haute Couture Co., Ltd. -// https://www.iana.org/domains/root/db/redstone.html -redstone - -// redumbrella : Travelers TLD, LLC -// https://www.iana.org/domains/root/db/redumbrella.html -redumbrella - -// rehab : Dog Beach, LLC -// https://www.iana.org/domains/root/db/rehab.html -rehab - -// reise : Binky Moon, LLC -// https://www.iana.org/domains/root/db/reise.html -reise - -// reisen : Binky Moon, LLC -// https://www.iana.org/domains/root/db/reisen.html -reisen - -// reit : National Association of Real Estate Investment Trusts, Inc. -// https://www.iana.org/domains/root/db/reit.html -reit - -// reliance : Reliance Industries Limited -// https://www.iana.org/domains/root/db/reliance.html -reliance - -// ren : ZDNS International Limited -// https://www.iana.org/domains/root/db/ren.html -ren - -// rent : XYZ.COM LLC -// https://www.iana.org/domains/root/db/rent.html -rent - -// rentals : Binky Moon, LLC -// https://www.iana.org/domains/root/db/rentals.html -rentals - -// repair : Binky Moon, LLC -// https://www.iana.org/domains/root/db/repair.html -repair - -// report : Binky Moon, LLC -// https://www.iana.org/domains/root/db/report.html -report - -// republican : Dog Beach, LLC -// https://www.iana.org/domains/root/db/republican.html -republican - -// rest : Punto 2012 Sociedad Anonima Promotora de Inversion de Capital Variable -// https://www.iana.org/domains/root/db/rest.html -rest - -// restaurant : Binky Moon, LLC -// https://www.iana.org/domains/root/db/restaurant.html -restaurant - -// review : dot Review Limited -// https://www.iana.org/domains/root/db/review.html -review - -// reviews : Dog Beach, LLC -// https://www.iana.org/domains/root/db/reviews.html -reviews - -// rexroth : Robert Bosch GMBH -// https://www.iana.org/domains/root/db/rexroth.html -rexroth - -// rich : iRegistry GmbH -// https://www.iana.org/domains/root/db/rich.html -rich - -// richardli : Pacific Century Asset Management (HK) Limited -// https://www.iana.org/domains/root/db/richardli.html -richardli - -// ricoh : Ricoh Company, Ltd. -// https://www.iana.org/domains/root/db/ricoh.html -ricoh - -// ril : Reliance Industries Limited -// https://www.iana.org/domains/root/db/ril.html -ril - -// rio : Empresa Municipal de Informática SA - IPLANRIO -// https://www.iana.org/domains/root/db/rio.html -rio - -// rip : Dog Beach, LLC -// https://www.iana.org/domains/root/db/rip.html -rip - -// rocks : Dog Beach, LLC -// https://www.iana.org/domains/root/db/rocks.html -rocks - -// rodeo : Registry Services, LLC -// https://www.iana.org/domains/root/db/rodeo.html -rodeo - -// rogers : Rogers Communications Canada Inc. -// https://www.iana.org/domains/root/db/rogers.html -rogers - -// room : Amazon Registry Services, Inc. -// https://www.iana.org/domains/root/db/room.html -room - -// rsvp : Charleston Road Registry Inc. -// https://www.iana.org/domains/root/db/rsvp.html -rsvp - -// rugby : World Rugby Strategic Developments Limited -// https://www.iana.org/domains/root/db/rugby.html -rugby - -// ruhr : dotSaarland GmbH -// https://www.iana.org/domains/root/db/ruhr.html -ruhr - -// run : Binky Moon, LLC -// https://www.iana.org/domains/root/db/run.html -run - -// rwe : RWE AG -// https://www.iana.org/domains/root/db/rwe.html -rwe - -// ryukyu : BRregistry, Inc. -// https://www.iana.org/domains/root/db/ryukyu.html -ryukyu - -// saarland : dotSaarland GmbH -// https://www.iana.org/domains/root/db/saarland.html -saarland - -// safe : Amazon Registry Services, Inc. -// https://www.iana.org/domains/root/db/safe.html -safe - -// safety : Safety Registry Services, LLC. -// https://www.iana.org/domains/root/db/safety.html -safety - -// sakura : SAKURA Internet Inc. -// https://www.iana.org/domains/root/db/sakura.html -sakura - -// sale : Dog Beach, LLC -// https://www.iana.org/domains/root/db/sale.html -sale - -// salon : Binky Moon, LLC -// https://www.iana.org/domains/root/db/salon.html -salon - -// samsclub : Wal-Mart Stores, Inc. -// https://www.iana.org/domains/root/db/samsclub.html -samsclub - -// samsung : SAMSUNG SDS CO., LTD -// https://www.iana.org/domains/root/db/samsung.html -samsung - -// sandvik : Sandvik AB -// https://www.iana.org/domains/root/db/sandvik.html -sandvik - -// sandvikcoromant : Sandvik AB -// https://www.iana.org/domains/root/db/sandvikcoromant.html -sandvikcoromant - -// sanofi : Sanofi -// https://www.iana.org/domains/root/db/sanofi.html -sanofi - -// sap : SAP AG -// https://www.iana.org/domains/root/db/sap.html -sap - -// sarl : Binky Moon, LLC -// https://www.iana.org/domains/root/db/sarl.html -sarl - -// sas : Research IP LLC -// https://www.iana.org/domains/root/db/sas.html -sas - -// save : Amazon Registry Services, Inc. -// https://www.iana.org/domains/root/db/save.html -save - -// saxo : Saxo Bank A/S -// https://www.iana.org/domains/root/db/saxo.html -saxo - -// sbi : STATE BANK OF INDIA -// https://www.iana.org/domains/root/db/sbi.html -sbi - -// sbs : ShortDot SA -// https://www.iana.org/domains/root/db/sbs.html -sbs - -// sca : SVENSKA CELLULOSA AKTIEBOLAGET SCA (publ) -// https://www.iana.org/domains/root/db/sca.html -sca - -// scb : The Siam Commercial Bank Public Company Limited ("SCB") -// https://www.iana.org/domains/root/db/scb.html -scb - -// schaeffler : Schaeffler Technologies AG & Co. KG -// https://www.iana.org/domains/root/db/schaeffler.html -schaeffler - -// schmidt : SCHMIDT GROUPE S.A.S. -// https://www.iana.org/domains/root/db/schmidt.html -schmidt - -// scholarships : Scholarships.com, LLC -// https://www.iana.org/domains/root/db/scholarships.html -scholarships - -// school : Binky Moon, LLC -// https://www.iana.org/domains/root/db/school.html -school - -// schule : Binky Moon, LLC -// https://www.iana.org/domains/root/db/schule.html -schule - -// schwarz : Schwarz Domains und Services GmbH & Co. KG -// https://www.iana.org/domains/root/db/schwarz.html -schwarz - -// science : dot Science Limited -// https://www.iana.org/domains/root/db/science.html -science - -// scot : Dot Scot Registry Limited -// https://www.iana.org/domains/root/db/scot.html -scot - -// search : Charleston Road Registry Inc. -// https://www.iana.org/domains/root/db/search.html -search - -// seat : SEAT, S.A. (Sociedad Unipersonal) -// https://www.iana.org/domains/root/db/seat.html -seat - -// secure : Amazon Registry Services, Inc. -// https://www.iana.org/domains/root/db/secure.html -secure - -// security : XYZ.COM LLC -// https://www.iana.org/domains/root/db/security.html -security - -// seek : Seek Limited -// https://www.iana.org/domains/root/db/seek.html -seek - -// select : Registry Services, LLC -// https://www.iana.org/domains/root/db/select.html -select - -// sener : Sener Ingeniería y Sistemas, S.A. -// https://www.iana.org/domains/root/db/sener.html -sener - -// services : Binky Moon, LLC -// https://www.iana.org/domains/root/db/services.html -services - -// seven : Seven West Media Ltd -// https://www.iana.org/domains/root/db/seven.html -seven - -// sew : SEW-EURODRIVE GmbH & Co KG -// https://www.iana.org/domains/root/db/sew.html -sew - -// sex : ICM Registry SX LLC -// https://www.iana.org/domains/root/db/sex.html -sex - -// sexy : Internet Naming Company LLC -// https://www.iana.org/domains/root/db/sexy.html -sexy - -// sfr : Societe Francaise du Radiotelephone - SFR -// https://www.iana.org/domains/root/db/sfr.html -sfr - -// shangrila : Shangri‐La International Hotel Management Limited -// https://www.iana.org/domains/root/db/shangrila.html -shangrila - -// sharp : Sharp Corporation -// https://www.iana.org/domains/root/db/sharp.html -sharp - -// shaw : Shaw Cablesystems G.P. -// https://www.iana.org/domains/root/db/shaw.html -shaw - -// shell : Shell Information Technology International Inc -// https://www.iana.org/domains/root/db/shell.html -shell - -// shia : Asia Green IT System Bilgisayar San. ve Tic. Ltd. Sti. -// https://www.iana.org/domains/root/db/shia.html -shia - -// shiksha : Identity Digital Limited -// https://www.iana.org/domains/root/db/shiksha.html -shiksha - -// shoes : Binky Moon, LLC -// https://www.iana.org/domains/root/db/shoes.html -shoes - -// shop : GMO Registry, Inc. -// https://www.iana.org/domains/root/db/shop.html -shop - -// shopping : Binky Moon, LLC -// https://www.iana.org/domains/root/db/shopping.html -shopping - -// shouji : Beijing Qihu Keji Co., Ltd. -// https://www.iana.org/domains/root/db/shouji.html -shouji - -// show : Binky Moon, LLC -// https://www.iana.org/domains/root/db/show.html -show - -// silk : Amazon Registry Services, Inc. -// https://www.iana.org/domains/root/db/silk.html -silk - -// sina : Sina Corporation -// https://www.iana.org/domains/root/db/sina.html -sina - -// singles : Binky Moon, LLC -// https://www.iana.org/domains/root/db/singles.html -singles - -// site : Radix FZC DMCC -// https://www.iana.org/domains/root/db/site.html -site - -// ski : Identity Digital Limited -// https://www.iana.org/domains/root/db/ski.html -ski - -// skin : XYZ.COM LLC -// https://www.iana.org/domains/root/db/skin.html -skin - -// sky : Sky International AG -// https://www.iana.org/domains/root/db/sky.html -sky - -// skype : Microsoft Corporation -// https://www.iana.org/domains/root/db/skype.html -skype - -// sling : DISH Technologies L.L.C. -// https://www.iana.org/domains/root/db/sling.html -sling - -// smart : Smart Communications, Inc. (SMART) -// https://www.iana.org/domains/root/db/smart.html -smart - -// smile : Amazon Registry Services, Inc. -// https://www.iana.org/domains/root/db/smile.html -smile - -// sncf : Société Nationale SNCF -// https://www.iana.org/domains/root/db/sncf.html -sncf - -// soccer : Binky Moon, LLC -// https://www.iana.org/domains/root/db/soccer.html -soccer - -// social : Dog Beach, LLC -// https://www.iana.org/domains/root/db/social.html -social - -// softbank : SoftBank Group Corp. -// https://www.iana.org/domains/root/db/softbank.html -softbank - -// software : Dog Beach, LLC -// https://www.iana.org/domains/root/db/software.html -software - -// sohu : Sohu.com Limited -// https://www.iana.org/domains/root/db/sohu.html -sohu - -// solar : Binky Moon, LLC -// https://www.iana.org/domains/root/db/solar.html -solar - -// solutions : Binky Moon, LLC -// https://www.iana.org/domains/root/db/solutions.html -solutions - -// song : Amazon Registry Services, Inc. -// https://www.iana.org/domains/root/db/song.html -song - -// sony : Sony Corporation -// https://www.iana.org/domains/root/db/sony.html -sony - -// soy : Charleston Road Registry Inc. -// https://www.iana.org/domains/root/db/soy.html -soy - -// spa : Asia Spa and Wellness Promotion Council Limited -// https://www.iana.org/domains/root/db/spa.html -spa - -// space : Radix FZC DMCC -// https://www.iana.org/domains/root/db/space.html -space - -// sport : SportAccord -// https://www.iana.org/domains/root/db/sport.html -sport - -// spot : Amazon Registry Services, Inc. -// https://www.iana.org/domains/root/db/spot.html -spot - -// srl : InterNetX, Corp -// https://www.iana.org/domains/root/db/srl.html -srl - -// stada : STADA Arzneimittel AG -// https://www.iana.org/domains/root/db/stada.html -stada - -// staples : Staples, Inc. -// https://www.iana.org/domains/root/db/staples.html -staples - -// star : Star India Private Limited -// https://www.iana.org/domains/root/db/star.html -star - -// statebank : STATE BANK OF INDIA -// https://www.iana.org/domains/root/db/statebank.html -statebank - -// statefarm : State Farm Mutual Automobile Insurance Company -// https://www.iana.org/domains/root/db/statefarm.html -statefarm - -// stc : Saudi Telecom Company -// https://www.iana.org/domains/root/db/stc.html -stc - -// stcgroup : Saudi Telecom Company -// https://www.iana.org/domains/root/db/stcgroup.html -stcgroup - -// stockholm : Stockholms kommun -// https://www.iana.org/domains/root/db/stockholm.html -stockholm - -// storage : XYZ.COM LLC -// https://www.iana.org/domains/root/db/storage.html -storage - -// store : Radix FZC DMCC -// https://www.iana.org/domains/root/db/store.html -store - -// stream : dot Stream Limited -// https://www.iana.org/domains/root/db/stream.html -stream - -// studio : Dog Beach, LLC -// https://www.iana.org/domains/root/db/studio.html -studio - -// study : Registry Services, LLC -// https://www.iana.org/domains/root/db/study.html -study - -// style : Binky Moon, LLC -// https://www.iana.org/domains/root/db/style.html -style - -// sucks : Vox Populi Registry Ltd. -// https://www.iana.org/domains/root/db/sucks.html -sucks - -// supplies : Binky Moon, LLC -// https://www.iana.org/domains/root/db/supplies.html -supplies - -// supply : Binky Moon, LLC -// https://www.iana.org/domains/root/db/supply.html -supply - -// support : Binky Moon, LLC -// https://www.iana.org/domains/root/db/support.html -support - -// surf : Registry Services, LLC -// https://www.iana.org/domains/root/db/surf.html -surf - -// surgery : Binky Moon, LLC -// https://www.iana.org/domains/root/db/surgery.html -surgery - -// suzuki : SUZUKI MOTOR CORPORATION -// https://www.iana.org/domains/root/db/suzuki.html -suzuki - -// swatch : The Swatch Group Ltd -// https://www.iana.org/domains/root/db/swatch.html -swatch - -// swiss : Swiss Confederation -// https://www.iana.org/domains/root/db/swiss.html -swiss - -// sydney : State of New South Wales, Department of Premier and Cabinet -// https://www.iana.org/domains/root/db/sydney.html -sydney - -// systems : Binky Moon, LLC -// https://www.iana.org/domains/root/db/systems.html -systems - -// tab : Tabcorp Holdings Limited -// https://www.iana.org/domains/root/db/tab.html -tab - -// taipei : Taipei City Government -// https://www.iana.org/domains/root/db/taipei.html -taipei - -// talk : Amazon Registry Services, Inc. -// https://www.iana.org/domains/root/db/talk.html -talk - -// taobao : Alibaba Group Holding Limited -// https://www.iana.org/domains/root/db/taobao.html -taobao - -// target : Target Domain Holdings, LLC -// https://www.iana.org/domains/root/db/target.html -target - -// tatamotors : Tata Motors Ltd -// https://www.iana.org/domains/root/db/tatamotors.html -tatamotors - -// tatar : Limited Liability Company "Coordination Center of Regional Domain of Tatarstan Republic" -// https://www.iana.org/domains/root/db/tatar.html -tatar - -// tattoo : Registry Services, LLC -// https://www.iana.org/domains/root/db/tattoo.html -tattoo - -// tax : Binky Moon, LLC -// https://www.iana.org/domains/root/db/tax.html -tax - -// taxi : Binky Moon, LLC -// https://www.iana.org/domains/root/db/taxi.html -taxi - -// tci : Asia Green IT System Bilgisayar San. ve Tic. Ltd. Sti. -// https://www.iana.org/domains/root/db/tci.html -tci - -// tdk : TDK Corporation -// https://www.iana.org/domains/root/db/tdk.html -tdk - -// team : Binky Moon, LLC -// https://www.iana.org/domains/root/db/team.html -team - -// tech : Radix FZC DMCC -// https://www.iana.org/domains/root/db/tech.html -tech - -// technology : Binky Moon, LLC -// https://www.iana.org/domains/root/db/technology.html -technology - -// temasek : Temasek Holdings (Private) Limited -// https://www.iana.org/domains/root/db/temasek.html -temasek - -// tennis : Binky Moon, LLC -// https://www.iana.org/domains/root/db/tennis.html -tennis - -// teva : Teva Pharmaceutical Industries Limited -// https://www.iana.org/domains/root/db/teva.html -teva - -// thd : Home Depot Product Authority, LLC -// https://www.iana.org/domains/root/db/thd.html -thd - -// theater : Binky Moon, LLC -// https://www.iana.org/domains/root/db/theater.html -theater - -// theatre : XYZ.COM LLC -// https://www.iana.org/domains/root/db/theatre.html -theatre - -// tiaa : Teachers Insurance and Annuity Association of America -// https://www.iana.org/domains/root/db/tiaa.html -tiaa - -// tickets : XYZ.COM LLC -// https://www.iana.org/domains/root/db/tickets.html -tickets - -// tienda : Binky Moon, LLC -// https://www.iana.org/domains/root/db/tienda.html -tienda - -// tips : Binky Moon, LLC -// https://www.iana.org/domains/root/db/tips.html -tips - -// tires : Binky Moon, LLC -// https://www.iana.org/domains/root/db/tires.html -tires - -// tirol : punkt Tirol GmbH -// https://www.iana.org/domains/root/db/tirol.html -tirol - -// tjmaxx : The TJX Companies, Inc. -// https://www.iana.org/domains/root/db/tjmaxx.html -tjmaxx - -// tjx : The TJX Companies, Inc. -// https://www.iana.org/domains/root/db/tjx.html -tjx - -// tkmaxx : The TJX Companies, Inc. -// https://www.iana.org/domains/root/db/tkmaxx.html -tkmaxx - -// tmall : Alibaba Group Holding Limited -// https://www.iana.org/domains/root/db/tmall.html -tmall - -// today : Binky Moon, LLC -// https://www.iana.org/domains/root/db/today.html -today - -// tokyo : GMO Registry, Inc. -// https://www.iana.org/domains/root/db/tokyo.html -tokyo - -// tools : Binky Moon, LLC -// https://www.iana.org/domains/root/db/tools.html -tools - -// top : .TOP Registry -// https://www.iana.org/domains/root/db/top.html -top - -// toray : Toray Industries, Inc. -// https://www.iana.org/domains/root/db/toray.html -toray - -// toshiba : TOSHIBA Corporation -// https://www.iana.org/domains/root/db/toshiba.html -toshiba - -// total : TotalEnergies SE -// https://www.iana.org/domains/root/db/total.html -total - -// tours : Binky Moon, LLC -// https://www.iana.org/domains/root/db/tours.html -tours - -// town : Binky Moon, LLC -// https://www.iana.org/domains/root/db/town.html -town - -// toyota : TOYOTA MOTOR CORPORATION -// https://www.iana.org/domains/root/db/toyota.html -toyota - -// toys : Binky Moon, LLC -// https://www.iana.org/domains/root/db/toys.html -toys - -// trade : Elite Registry Limited -// https://www.iana.org/domains/root/db/trade.html -trade - -// trading : Dog Beach, LLC -// https://www.iana.org/domains/root/db/trading.html -trading - -// training : Binky Moon, LLC -// https://www.iana.org/domains/root/db/training.html -training - -// travel : Dog Beach, LLC -// https://www.iana.org/domains/root/db/travel.html -travel - -// travelers : Travelers TLD, LLC -// https://www.iana.org/domains/root/db/travelers.html -travelers - -// travelersinsurance : Travelers TLD, LLC -// https://www.iana.org/domains/root/db/travelersinsurance.html -travelersinsurance - -// trust : Internet Naming Company LLC -// https://www.iana.org/domains/root/db/trust.html -trust - -// trv : Travelers TLD, LLC -// https://www.iana.org/domains/root/db/trv.html -trv - -// tube : Latin American Telecom LLC -// https://www.iana.org/domains/root/db/tube.html -tube - -// tui : TUI AG -// https://www.iana.org/domains/root/db/tui.html -tui - -// tunes : Amazon Registry Services, Inc. -// https://www.iana.org/domains/root/db/tunes.html -tunes - -// tushu : Amazon Registry Services, Inc. -// https://www.iana.org/domains/root/db/tushu.html -tushu - -// tvs : T V SUNDRAM IYENGAR & SONS LIMITED -// https://www.iana.org/domains/root/db/tvs.html -tvs - -// ubank : National Australia Bank Limited -// https://www.iana.org/domains/root/db/ubank.html -ubank - -// ubs : UBS AG -// https://www.iana.org/domains/root/db/ubs.html -ubs - -// unicom : China United Network Communications Corporation Limited -// https://www.iana.org/domains/root/db/unicom.html -unicom - -// university : Binky Moon, LLC -// https://www.iana.org/domains/root/db/university.html -university - -// uno : Radix FZC DMCC -// https://www.iana.org/domains/root/db/uno.html -uno - -// uol : UBN INTERNET LTDA. -// https://www.iana.org/domains/root/db/uol.html -uol - -// ups : UPS Market Driver, Inc. -// https://www.iana.org/domains/root/db/ups.html -ups - -// vacations : Binky Moon, LLC -// https://www.iana.org/domains/root/db/vacations.html -vacations - -// vana : Lifestyle Domain Holdings, Inc. -// https://www.iana.org/domains/root/db/vana.html -vana - -// vanguard : The Vanguard Group, Inc. -// https://www.iana.org/domains/root/db/vanguard.html -vanguard - -// vegas : Dot Vegas, Inc. -// https://www.iana.org/domains/root/db/vegas.html -vegas - -// ventures : Binky Moon, LLC -// https://www.iana.org/domains/root/db/ventures.html -ventures - -// verisign : VeriSign, Inc. -// https://www.iana.org/domains/root/db/verisign.html -verisign - -// versicherung : tldbox GmbH -// https://www.iana.org/domains/root/db/versicherung.html -versicherung - -// vet : Dog Beach, LLC -// https://www.iana.org/domains/root/db/vet.html -vet - -// viajes : Binky Moon, LLC -// https://www.iana.org/domains/root/db/viajes.html -viajes - -// video : Dog Beach, LLC -// https://www.iana.org/domains/root/db/video.html -video - -// vig : VIENNA INSURANCE GROUP AG Wiener Versicherung Gruppe -// https://www.iana.org/domains/root/db/vig.html -vig - -// viking : Viking River Cruises (Bermuda) Ltd. -// https://www.iana.org/domains/root/db/viking.html -viking - -// villas : Binky Moon, LLC -// https://www.iana.org/domains/root/db/villas.html -villas - -// vin : Binky Moon, LLC -// https://www.iana.org/domains/root/db/vin.html -vin - -// vip : Registry Services, LLC -// https://www.iana.org/domains/root/db/vip.html -vip - -// virgin : Virgin Enterprises Limited -// https://www.iana.org/domains/root/db/virgin.html -virgin - -// visa : Visa Worldwide Pte. Limited -// https://www.iana.org/domains/root/db/visa.html -visa - -// vision : Binky Moon, LLC -// https://www.iana.org/domains/root/db/vision.html -vision - -// viva : Saudi Telecom Company -// https://www.iana.org/domains/root/db/viva.html -viva - -// vivo : Telefonica Brasil S.A. -// https://www.iana.org/domains/root/db/vivo.html -vivo - -// vlaanderen : DNS.be vzw -// https://www.iana.org/domains/root/db/vlaanderen.html -vlaanderen - -// vodka : Registry Services, LLC -// https://www.iana.org/domains/root/db/vodka.html -vodka - -// volkswagen : Volkswagen Group of America Inc. -// https://www.iana.org/domains/root/db/volkswagen.html -volkswagen - -// volvo : Volvo Holding Sverige Aktiebolag -// https://www.iana.org/domains/root/db/volvo.html -volvo - -// vote : Monolith Registry LLC -// https://www.iana.org/domains/root/db/vote.html -vote - -// voting : Valuetainment Corp. -// https://www.iana.org/domains/root/db/voting.html -voting - -// voto : Monolith Registry LLC -// https://www.iana.org/domains/root/db/voto.html -voto - -// voyage : Binky Moon, LLC -// https://www.iana.org/domains/root/db/voyage.html -voyage - -// wales : Nominet UK -// https://www.iana.org/domains/root/db/wales.html -wales - -// walmart : Wal-Mart Stores, Inc. -// https://www.iana.org/domains/root/db/walmart.html -walmart - -// walter : Sandvik AB -// https://www.iana.org/domains/root/db/walter.html -walter - -// wang : Zodiac Wang Limited -// https://www.iana.org/domains/root/db/wang.html -wang - -// wanggou : Amazon Registry Services, Inc. -// https://www.iana.org/domains/root/db/wanggou.html -wanggou - -// watch : Binky Moon, LLC -// https://www.iana.org/domains/root/db/watch.html -watch - -// watches : Identity Digital Limited -// https://www.iana.org/domains/root/db/watches.html -watches - -// weather : International Business Machines Corporation -// https://www.iana.org/domains/root/db/weather.html -weather - -// weatherchannel : International Business Machines Corporation -// https://www.iana.org/domains/root/db/weatherchannel.html -weatherchannel - -// webcam : dot Webcam Limited -// https://www.iana.org/domains/root/db/webcam.html -webcam - -// weber : Saint-Gobain Weber SA -// https://www.iana.org/domains/root/db/weber.html -weber - -// website : Radix FZC DMCC -// https://www.iana.org/domains/root/db/website.html -website - -// wedding : Registry Services, LLC -// https://www.iana.org/domains/root/db/wedding.html -wedding - -// weibo : Sina Corporation -// https://www.iana.org/domains/root/db/weibo.html -weibo - -// weir : Weir Group IP Limited -// https://www.iana.org/domains/root/db/weir.html -weir - -// whoswho : Who's Who Registry -// https://www.iana.org/domains/root/db/whoswho.html -whoswho - -// wien : punkt.wien GmbH -// https://www.iana.org/domains/root/db/wien.html -wien - -// wiki : Registry Services, LLC -// https://www.iana.org/domains/root/db/wiki.html -wiki - -// williamhill : William Hill Organization Limited -// https://www.iana.org/domains/root/db/williamhill.html -williamhill - -// win : First Registry Limited -// https://www.iana.org/domains/root/db/win.html -win - -// windows : Microsoft Corporation -// https://www.iana.org/domains/root/db/windows.html -windows - -// wine : Binky Moon, LLC -// https://www.iana.org/domains/root/db/wine.html -wine - -// winners : The TJX Companies, Inc. -// https://www.iana.org/domains/root/db/winners.html -winners - -// wme : William Morris Endeavor Entertainment, LLC -// https://www.iana.org/domains/root/db/wme.html -wme - -// wolterskluwer : Wolters Kluwer N.V. -// https://www.iana.org/domains/root/db/wolterskluwer.html -wolterskluwer - -// woodside : Woodside Petroleum Limited -// https://www.iana.org/domains/root/db/woodside.html -woodside - -// work : Registry Services, LLC -// https://www.iana.org/domains/root/db/work.html -work - -// works : Binky Moon, LLC -// https://www.iana.org/domains/root/db/works.html -works - -// world : Binky Moon, LLC -// https://www.iana.org/domains/root/db/world.html -world - -// wow : Amazon Registry Services, Inc. -// https://www.iana.org/domains/root/db/wow.html -wow - -// wtc : World Trade Centers Association, Inc. -// https://www.iana.org/domains/root/db/wtc.html -wtc - -// wtf : Binky Moon, LLC -// https://www.iana.org/domains/root/db/wtf.html -wtf - -// xbox : Microsoft Corporation -// https://www.iana.org/domains/root/db/xbox.html -xbox - -// xerox : Xerox DNHC LLC -// https://www.iana.org/domains/root/db/xerox.html -xerox - -// xfinity : Comcast IP Holdings I, LLC -// https://www.iana.org/domains/root/db/xfinity.html -xfinity - -// xihuan : Beijing Qihu Keji Co., Ltd. -// https://www.iana.org/domains/root/db/xihuan.html -xihuan - -// xin : Elegant Leader Limited -// https://www.iana.org/domains/root/db/xin.html -xin - -// xn--11b4c3d : VeriSign Sarl -// https://www.iana.org/domains/root/db/xn--11b4c3d.html -कॉम - -// xn--1ck2e1b : Amazon Registry Services, Inc. -// https://www.iana.org/domains/root/db/xn--1ck2e1b.html -セール - -// xn--1qqw23a : Guangzhou YU Wei Information Technology Co., Ltd. -// https://www.iana.org/domains/root/db/xn--1qqw23a.html -佛山 - -// xn--30rr7y : Excellent First Limited -// https://www.iana.org/domains/root/db/xn--30rr7y.html -慈善 - -// xn--3bst00m : Eagle Horizon Limited -// https://www.iana.org/domains/root/db/xn--3bst00m.html -集团 - -// xn--3ds443g : TLD REGISTRY LIMITED OY -// https://www.iana.org/domains/root/db/xn--3ds443g.html -在线 - -// xn--3pxu8k : VeriSign Sarl -// https://www.iana.org/domains/root/db/xn--3pxu8k.html -点看 - -// xn--42c2d9a : VeriSign Sarl -// https://www.iana.org/domains/root/db/xn--42c2d9a.html -คอม - -// xn--45q11c : Zodiac Gemini Ltd -// https://www.iana.org/domains/root/db/xn--45q11c.html -八卦 - -// xn--4gbrim : Helium TLDs Ltd -// https://www.iana.org/domains/root/db/xn--4gbrim.html -موقع - -// xn--55qw42g : China Organizational Name Administration Center -// https://www.iana.org/domains/root/db/xn--55qw42g.html -公益 - -// xn--55qx5d : China Internet Network Information Center (CNNIC) -// https://www.iana.org/domains/root/db/xn--55qx5d.html -公司 - -// xn--5su34j936bgsg : Shangri‐La International Hotel Management Limited -// https://www.iana.org/domains/root/db/xn--5su34j936bgsg.html -香格里拉 - -// xn--5tzm5g : Global Website TLD Asia Limited -// https://www.iana.org/domains/root/db/xn--5tzm5g.html -网站 - -// xn--6frz82g : Identity Digital Limited -// https://www.iana.org/domains/root/db/xn--6frz82g.html -移动 - -// xn--6qq986b3xl : Tycoon Treasure Limited -// https://www.iana.org/domains/root/db/xn--6qq986b3xl.html -我爱你 - -// xn--80adxhks : Foundation for Assistance for Internet Technologies and Infrastructure Development (FAITID) -// https://www.iana.org/domains/root/db/xn--80adxhks.html -москва - -// xn--80aqecdr1a : Pontificium Consilium de Comunicationibus Socialibus (PCCS) (Pontifical Council for Social Communication) -// https://www.iana.org/domains/root/db/xn--80aqecdr1a.html -католик - -// xn--80asehdb : CORE Association -// https://www.iana.org/domains/root/db/xn--80asehdb.html -онлайн - -// xn--80aswg : CORE Association -// https://www.iana.org/domains/root/db/xn--80aswg.html -сайт - -// xn--8y0a063a : China United Network Communications Corporation Limited -// https://www.iana.org/domains/root/db/xn--8y0a063a.html -联通 - -// xn--9dbq2a : VeriSign Sarl -// https://www.iana.org/domains/root/db/xn--9dbq2a.html -קום - -// xn--9et52u : RISE VICTORY LIMITED -// https://www.iana.org/domains/root/db/xn--9et52u.html -时尚 - -// xn--9krt00a : Sina Corporation -// https://www.iana.org/domains/root/db/xn--9krt00a.html -微博 - -// xn--b4w605ferd : Temasek Holdings (Private) Limited -// https://www.iana.org/domains/root/db/xn--b4w605ferd.html -淡马锡 - -// xn--bck1b9a5dre4c : Amazon Registry Services, Inc. -// https://www.iana.org/domains/root/db/xn--bck1b9a5dre4c.html -ファッション - -// xn--c1avg : Public Interest Registry -// https://www.iana.org/domains/root/db/xn--c1avg.html -орг - -// xn--c2br7g : VeriSign Sarl -// https://www.iana.org/domains/root/db/xn--c2br7g.html -नेट - -// xn--cck2b3b : Amazon Registry Services, Inc. -// https://www.iana.org/domains/root/db/xn--cck2b3b.html -ストア - -// xn--cckwcxetd : Amazon Registry Services, Inc. -// https://www.iana.org/domains/root/db/xn--cckwcxetd.html -アマゾン - -// xn--cg4bki : SAMSUNG SDS CO., LTD -// https://www.iana.org/domains/root/db/xn--cg4bki.html -삼성 - -// xn--czr694b : Internet DotTrademark Organisation Limited -// https://www.iana.org/domains/root/db/xn--czr694b.html -商标 - -// xn--czrs0t : Binky Moon, LLC -// https://www.iana.org/domains/root/db/xn--czrs0t.html -商店 - -// xn--czru2d : Zodiac Aquarius Limited -// https://www.iana.org/domains/root/db/xn--czru2d.html -商城 - -// xn--d1acj3b : The Foundation for Network Initiatives “The Smart Internet” -// https://www.iana.org/domains/root/db/xn--d1acj3b.html -дети - -// xn--eckvdtc9d : Amazon Registry Services, Inc. -// https://www.iana.org/domains/root/db/xn--eckvdtc9d.html -ポイント - -// xn--efvy88h : Guangzhou YU Wei Information Technology Co., Ltd. -// https://www.iana.org/domains/root/db/xn--efvy88h.html -新闻 - -// xn--fct429k : Amazon Registry Services, Inc. -// https://www.iana.org/domains/root/db/xn--fct429k.html -家電 - -// xn--fhbei : VeriSign Sarl -// https://www.iana.org/domains/root/db/xn--fhbei.html -كوم - -// xn--fiq228c5hs : TLD REGISTRY LIMITED OY -// https://www.iana.org/domains/root/db/xn--fiq228c5hs.html -中文网 - -// xn--fiq64b : CITIC Group Corporation -// https://www.iana.org/domains/root/db/xn--fiq64b.html -中信 - -// xn--fjq720a : Binky Moon, LLC -// https://www.iana.org/domains/root/db/xn--fjq720a.html -娱乐 - -// xn--flw351e : Charleston Road Registry Inc. -// https://www.iana.org/domains/root/db/xn--flw351e.html -谷歌 - -// xn--fzys8d69uvgm : PCCW Enterprises Limited -// https://www.iana.org/domains/root/db/xn--fzys8d69uvgm.html -電訊盈科 - -// xn--g2xx48c : Nawang Heli(Xiamen) Network Service Co., LTD. -// https://www.iana.org/domains/root/db/xn--g2xx48c.html -购物 - -// xn--gckr3f0f : Amazon Registry Services, Inc. -// https://www.iana.org/domains/root/db/xn--gckr3f0f.html -クラウド - -// xn--gk3at1e : Amazon Registry Services, Inc. -// https://www.iana.org/domains/root/db/xn--gk3at1e.html -通販 - -// xn--hxt814e : Zodiac Taurus Limited -// https://www.iana.org/domains/root/db/xn--hxt814e.html -网店 - -// xn--i1b6b1a6a2e : Public Interest Registry -// https://www.iana.org/domains/root/db/xn--i1b6b1a6a2e.html -संगठन - -// xn--imr513n : Internet DotTrademark Organisation Limited -// https://www.iana.org/domains/root/db/xn--imr513n.html -餐厅 - -// xn--io0a7i : China Internet Network Information Center (CNNIC) -// https://www.iana.org/domains/root/db/xn--io0a7i.html -网络 - -// xn--j1aef : VeriSign Sarl -// https://www.iana.org/domains/root/db/xn--j1aef.html -ком - -// xn--jlq480n2rg : Amazon Registry Services, Inc. -// https://www.iana.org/domains/root/db/xn--jlq480n2rg.html -亚马逊 - -// xn--jvr189m : Amazon Registry Services, Inc. -// https://www.iana.org/domains/root/db/xn--jvr189m.html -食品 - -// xn--kcrx77d1x4a : Koninklijke Philips N.V. -// https://www.iana.org/domains/root/db/xn--kcrx77d1x4a.html -飞利浦 - -// xn--kput3i : Beijing RITT-Net Technology Development Co., Ltd -// https://www.iana.org/domains/root/db/xn--kput3i.html -手机 - -// xn--mgba3a3ejt : Aramco Services Company -// https://www.iana.org/domains/root/db/xn--mgba3a3ejt.html -ارامكو - -// xn--mgba7c0bbn0a : Competrol (Luxembourg) Sarl -// https://www.iana.org/domains/root/db/xn--mgba7c0bbn0a.html -العليان - -// xn--mgbaakc7dvf : Emirates Telecommunications Corporation (trading as Etisalat) -// https://www.iana.org/domains/root/db/xn--mgbaakc7dvf.html -اتصالات - -// xn--mgbab2bd : CORE Association -// https://www.iana.org/domains/root/db/xn--mgbab2bd.html -بازار - -// xn--mgbca7dzdo : Abu Dhabi Systems and Information Centre -// https://www.iana.org/domains/root/db/xn--mgbca7dzdo.html -ابوظبي - -// xn--mgbi4ecexp : Pontificium Consilium de Comunicationibus Socialibus (PCCS) (Pontifical Council for Social Communication) -// https://www.iana.org/domains/root/db/xn--mgbi4ecexp.html -كاثوليك - -// xn--mgbt3dhd : Asia Green IT System Bilgisayar San. ve Tic. Ltd. Sti. -// https://www.iana.org/domains/root/db/xn--mgbt3dhd.html -همراه - -// xn--mk1bu44c : VeriSign Sarl -// https://www.iana.org/domains/root/db/xn--mk1bu44c.html -닷컴 - -// xn--mxtq1m : Net-Chinese Co., Ltd. -// https://www.iana.org/domains/root/db/xn--mxtq1m.html -政府 - -// xn--ngbc5azd : International Domain Registry Pty. Ltd. -// https://www.iana.org/domains/root/db/xn--ngbc5azd.html -شبكة - -// xn--ngbe9e0a : Kuwait Finance House -// https://www.iana.org/domains/root/db/xn--ngbe9e0a.html -بيتك - -// xn--ngbrx : League of Arab States -// https://www.iana.org/domains/root/db/xn--ngbrx.html -عرب - -// xn--nqv7f : Public Interest Registry -// https://www.iana.org/domains/root/db/xn--nqv7f.html -机构 - -// xn--nqv7fs00ema : Public Interest Registry -// https://www.iana.org/domains/root/db/xn--nqv7fs00ema.html -组织机构 - -// xn--nyqy26a : Stable Tone Limited -// https://www.iana.org/domains/root/db/xn--nyqy26a.html -健康 - -// xn--otu796d : Jiang Yu Liang Cai Technology Company Limited -// https://www.iana.org/domains/root/db/xn--otu796d.html -招聘 - -// xn--p1acf : Rusnames Limited -// https://www.iana.org/domains/root/db/xn--p1acf.html -рус - -// xn--pssy2u : VeriSign Sarl -// https://www.iana.org/domains/root/db/xn--pssy2u.html -大拿 - -// xn--q9jyb4c : Charleston Road Registry Inc. -// https://www.iana.org/domains/root/db/xn--q9jyb4c.html -みんな - -// xn--qcka1pmc : Charleston Road Registry Inc. -// https://www.iana.org/domains/root/db/xn--qcka1pmc.html -グーグル - -// xn--rhqv96g : Stable Tone Limited -// https://www.iana.org/domains/root/db/xn--rhqv96g.html -世界 - -// xn--rovu88b : Amazon Registry Services, Inc. -// https://www.iana.org/domains/root/db/xn--rovu88b.html -書籍 - -// xn--ses554g : KNET Co., Ltd. -// https://www.iana.org/domains/root/db/xn--ses554g.html -网址 - -// xn--t60b56a : VeriSign Sarl -// https://www.iana.org/domains/root/db/xn--t60b56a.html -닷넷 - -// xn--tckwe : VeriSign Sarl -// https://www.iana.org/domains/root/db/xn--tckwe.html -コム - -// xn--tiq49xqyj : Pontificium Consilium de Comunicationibus Socialibus (PCCS) (Pontifical Council for Social Communication) -// https://www.iana.org/domains/root/db/xn--tiq49xqyj.html -天主教 - -// xn--unup4y : Binky Moon, LLC -// https://www.iana.org/domains/root/db/xn--unup4y.html -游戏 - -// xn--vermgensberater-ctb : Deutsche Vermögensberatung Aktiengesellschaft DVAG -// https://www.iana.org/domains/root/db/xn--vermgensberater-ctb.html -vermögensberater - -// xn--vermgensberatung-pwb : Deutsche Vermögensberatung Aktiengesellschaft DVAG -// https://www.iana.org/domains/root/db/xn--vermgensberatung-pwb.html -vermögensberatung - -// xn--vhquv : Binky Moon, LLC -// https://www.iana.org/domains/root/db/xn--vhquv.html -企业 - -// xn--vuq861b : Beijing Tele-info Technology Co., Ltd. -// https://www.iana.org/domains/root/db/xn--vuq861b.html -信息 - -// xn--w4r85el8fhu5dnra : Kerry Trading Co. Limited -// https://www.iana.org/domains/root/db/xn--w4r85el8fhu5dnra.html -嘉里大酒店 - -// xn--w4rs40l : Kerry Trading Co. Limited -// https://www.iana.org/domains/root/db/xn--w4rs40l.html -嘉里 - -// xn--xhq521b : Guangzhou YU Wei Information Technology Co., Ltd. -// https://www.iana.org/domains/root/db/xn--xhq521b.html -广东 - -// xn--zfr164b : China Organizational Name Administration Center -// https://www.iana.org/domains/root/db/xn--zfr164b.html -政务 - -// xyz : XYZ.COM LLC -// https://www.iana.org/domains/root/db/xyz.html -xyz - -// yachts : XYZ.COM LLC -// https://www.iana.org/domains/root/db/yachts.html -yachts - -// yahoo : Oath Inc. -// https://www.iana.org/domains/root/db/yahoo.html -yahoo - -// yamaxun : Amazon Registry Services, Inc. -// https://www.iana.org/domains/root/db/yamaxun.html -yamaxun - -// yandex : Yandex Europe B.V. -// https://www.iana.org/domains/root/db/yandex.html -yandex - -// yodobashi : YODOBASHI CAMERA CO.,LTD. -// https://www.iana.org/domains/root/db/yodobashi.html -yodobashi - -// yoga : Registry Services, LLC -// https://www.iana.org/domains/root/db/yoga.html -yoga - -// yokohama : GMO Registry, Inc. -// https://www.iana.org/domains/root/db/yokohama.html -yokohama - -// you : Amazon Registry Services, Inc. -// https://www.iana.org/domains/root/db/you.html -you - -// youtube : Charleston Road Registry Inc. -// https://www.iana.org/domains/root/db/youtube.html -youtube - -// yun : Beijing Qihu Keji Co., Ltd. -// https://www.iana.org/domains/root/db/yun.html -yun - -// zappos : Amazon Registry Services, Inc. -// https://www.iana.org/domains/root/db/zappos.html -zappos - -// zara : Industria de Diseño Textil, S.A. (INDITEX, S.A.) -// https://www.iana.org/domains/root/db/zara.html -zara - -// zero : Amazon Registry Services, Inc. -// https://www.iana.org/domains/root/db/zero.html -zero - -// zip : Charleston Road Registry Inc. -// https://www.iana.org/domains/root/db/zip.html -zip - -// zone : Binky Moon, LLC -// https://www.iana.org/domains/root/db/zone.html -zone - -// zuerich : Kanton Zürich (Canton of Zurich) -// https://www.iana.org/domains/root/db/zuerich.html -zuerich - - -// ===END ICANN DOMAINS=== -// ===BEGIN PRIVATE DOMAINS=== -// (Note: these are in alphabetical order by company name) - -// 1GB LLC : https://www.1gb.ua/ -// Submitted by 1GB LLC -cc.ua -inf.ua -ltd.ua - -// 611coin : https://611project.org/ -611.to - -// Aaron Marais' Gitlab pages: https://lab.aaronleem.co.za -// Submitted by Aaron Marais -graphox.us - -// accesso Technology Group, plc. : https://accesso.com/ -// Submitted by accesso Team -*.devcdnaccesso.com - -// Acorn Labs : https://acorn.io -// Submitted by Craig Jellick -*.on-acorn.io - -// ActiveTrail: https://www.activetrail.biz/ -// Submitted by Ofer Kalaora -activetrail.biz - -// Adobe : https://www.adobe.com/ -// Submitted by Ian Boston and Lars Trieloff -adobeaemcloud.com -*.dev.adobeaemcloud.com -hlx.live -adobeaemcloud.net -hlx.page -hlx3.page - -// Adobe Developer Platform : https://developer.adobe.com -// Submitted by Jesse MacFadyen -adobeio-static.net -adobeioruntime.net - -// Agnat sp. z o.o. : https://domena.pl -// Submitted by Przemyslaw Plewa -beep.pl - -// Airkit : https://www.airkit.com/ -// Submitted by Grant Cooksey -airkitapps.com -airkitapps-au.com -airkitapps.eu - -// Aiven: https://aiven.io/ -// Submitted by Etienne Stalmans -aivencloud.com - -// Akamai : https://www.akamai.com/ -// Submitted by Akamai Team -akadns.net -akamai.net -akamai-staging.net -akamaiedge.net -akamaiedge-staging.net -akamaihd.net -akamaihd-staging.net -akamaiorigin.net -akamaiorigin-staging.net -akamaized.net -akamaized-staging.net -edgekey.net -edgekey-staging.net -edgesuite.net -edgesuite-staging.net - -// alboto.ca : http://alboto.ca -// Submitted by Anton Avramov -barsy.ca - -// Alces Software Ltd : http://alces-software.com -// Submitted by Mark J. Titorenko -*.compute.estate -*.alces.network - -// all-inkl.com : https://all-inkl.com -// Submitted by Werner Kaltofen -kasserver.com - -// Altervista: https://www.altervista.org -// Submitted by Carlo Cannas -altervista.org - -// alwaysdata : https://www.alwaysdata.com -// Submitted by Cyril -alwaysdata.net - -// Amaze Software : https://amaze.co -// Submitted by Domain Admin -myamaze.net - -// Amazon : https://www.amazon.com/ -// Submitted by AWS Security -// Subsections of Amazon/subsidiaries will appear until "concludes" tag - -// Amazon API Gateway -// Submitted by AWS Security -// Reference: 4d863337-ff98-4501-a6f2-361eba8445d6 -execute-api.cn-north-1.amazonaws.com.cn -execute-api.cn-northwest-1.amazonaws.com.cn -execute-api.af-south-1.amazonaws.com -execute-api.ap-east-1.amazonaws.com -execute-api.ap-northeast-1.amazonaws.com -execute-api.ap-northeast-2.amazonaws.com -execute-api.ap-northeast-3.amazonaws.com -execute-api.ap-south-1.amazonaws.com -execute-api.ap-south-2.amazonaws.com -execute-api.ap-southeast-1.amazonaws.com -execute-api.ap-southeast-2.amazonaws.com -execute-api.ap-southeast-3.amazonaws.com -execute-api.ap-southeast-4.amazonaws.com -execute-api.ca-central-1.amazonaws.com -execute-api.eu-central-1.amazonaws.com -execute-api.eu-central-2.amazonaws.com -execute-api.eu-north-1.amazonaws.com -execute-api.eu-south-1.amazonaws.com -execute-api.eu-south-2.amazonaws.com -execute-api.eu-west-1.amazonaws.com -execute-api.eu-west-2.amazonaws.com -execute-api.eu-west-3.amazonaws.com -execute-api.il-central-1.amazonaws.com -execute-api.me-central-1.amazonaws.com -execute-api.me-south-1.amazonaws.com -execute-api.sa-east-1.amazonaws.com -execute-api.us-east-1.amazonaws.com -execute-api.us-east-2.amazonaws.com -execute-api.us-gov-east-1.amazonaws.com -execute-api.us-gov-west-1.amazonaws.com -execute-api.us-west-1.amazonaws.com -execute-api.us-west-2.amazonaws.com - -// Amazon CloudFront -// Submitted by Donavan Miller -// Reference: 54144616-fd49-4435-8535-19c6a601bdb3 -cloudfront.net - -// Amazon Cognito -// Submitted by AWS Security -// Reference: 7bee1013-f456-47df-bfe8-03c78d946d61 -auth.af-south-1.amazoncognito.com -auth.ap-northeast-1.amazoncognito.com -auth.ap-northeast-2.amazoncognito.com -auth.ap-northeast-3.amazoncognito.com -auth.ap-south-1.amazoncognito.com -auth.ap-southeast-1.amazoncognito.com -auth.ap-southeast-2.amazoncognito.com -auth.ap-southeast-3.amazoncognito.com -auth.ca-central-1.amazoncognito.com -auth.eu-central-1.amazoncognito.com -auth.eu-north-1.amazoncognito.com -auth.eu-south-1.amazoncognito.com -auth.eu-west-1.amazoncognito.com -auth.eu-west-2.amazoncognito.com -auth.eu-west-3.amazoncognito.com -auth.il-central-1.amazoncognito.com -auth.me-south-1.amazoncognito.com -auth.sa-east-1.amazoncognito.com -auth.us-east-1.amazoncognito.com -auth-fips.us-east-1.amazoncognito.com -auth.us-east-2.amazoncognito.com -auth-fips.us-east-2.amazoncognito.com -auth-fips.us-gov-west-1.amazoncognito.com -auth.us-west-1.amazoncognito.com -auth-fips.us-west-1.amazoncognito.com -auth.us-west-2.amazoncognito.com -auth-fips.us-west-2.amazoncognito.com - -// Amazon EC2 -// Submitted by Luke Wells -// Reference: 4c38fa71-58ac-4768-99e5-689c1767e537 -*.compute.amazonaws.com -*.compute-1.amazonaws.com -*.compute.amazonaws.com.cn -us-east-1.amazonaws.com - -// Amazon EMR -// Submitted by AWS Security -// Reference: 597f3f8e-9283-4e48-8e32-7ee25a1ff6ab -emrappui-prod.cn-north-1.amazonaws.com.cn -emrnotebooks-prod.cn-north-1.amazonaws.com.cn -emrstudio-prod.cn-north-1.amazonaws.com.cn -emrappui-prod.cn-northwest-1.amazonaws.com.cn -emrnotebooks-prod.cn-northwest-1.amazonaws.com.cn -emrstudio-prod.cn-northwest-1.amazonaws.com.cn -emrappui-prod.af-south-1.amazonaws.com -emrnotebooks-prod.af-south-1.amazonaws.com -emrstudio-prod.af-south-1.amazonaws.com -emrappui-prod.ap-east-1.amazonaws.com -emrnotebooks-prod.ap-east-1.amazonaws.com -emrstudio-prod.ap-east-1.amazonaws.com -emrappui-prod.ap-northeast-1.amazonaws.com -emrnotebooks-prod.ap-northeast-1.amazonaws.com -emrstudio-prod.ap-northeast-1.amazonaws.com -emrappui-prod.ap-northeast-2.amazonaws.com -emrnotebooks-prod.ap-northeast-2.amazonaws.com -emrstudio-prod.ap-northeast-2.amazonaws.com -emrappui-prod.ap-northeast-3.amazonaws.com -emrnotebooks-prod.ap-northeast-3.amazonaws.com -emrstudio-prod.ap-northeast-3.amazonaws.com -emrappui-prod.ap-south-1.amazonaws.com -emrnotebooks-prod.ap-south-1.amazonaws.com -emrstudio-prod.ap-south-1.amazonaws.com -emrappui-prod.ap-southeast-1.amazonaws.com -emrnotebooks-prod.ap-southeast-1.amazonaws.com -emrstudio-prod.ap-southeast-1.amazonaws.com -emrappui-prod.ap-southeast-2.amazonaws.com -emrnotebooks-prod.ap-southeast-2.amazonaws.com -emrstudio-prod.ap-southeast-2.amazonaws.com -emrappui-prod.ap-southeast-3.amazonaws.com -emrnotebooks-prod.ap-southeast-3.amazonaws.com -emrstudio-prod.ap-southeast-3.amazonaws.com -emrappui-prod.ca-central-1.amazonaws.com -emrnotebooks-prod.ca-central-1.amazonaws.com -emrstudio-prod.ca-central-1.amazonaws.com -emrappui-prod.eu-central-1.amazonaws.com -emrnotebooks-prod.eu-central-1.amazonaws.com -emrstudio-prod.eu-central-1.amazonaws.com -emrappui-prod.eu-north-1.amazonaws.com -emrnotebooks-prod.eu-north-1.amazonaws.com -emrstudio-prod.eu-north-1.amazonaws.com -emrappui-prod.eu-south-1.amazonaws.com -emrnotebooks-prod.eu-south-1.amazonaws.com -emrstudio-prod.eu-south-1.amazonaws.com -emrappui-prod.eu-west-1.amazonaws.com -emrnotebooks-prod.eu-west-1.amazonaws.com -emrstudio-prod.eu-west-1.amazonaws.com -emrappui-prod.eu-west-2.amazonaws.com -emrnotebooks-prod.eu-west-2.amazonaws.com -emrstudio-prod.eu-west-2.amazonaws.com -emrappui-prod.eu-west-3.amazonaws.com -emrnotebooks-prod.eu-west-3.amazonaws.com -emrstudio-prod.eu-west-3.amazonaws.com -emrappui-prod.me-central-1.amazonaws.com -emrnotebooks-prod.me-central-1.amazonaws.com -emrstudio-prod.me-central-1.amazonaws.com -emrappui-prod.me-south-1.amazonaws.com -emrnotebooks-prod.me-south-1.amazonaws.com -emrstudio-prod.me-south-1.amazonaws.com -emrappui-prod.sa-east-1.amazonaws.com -emrnotebooks-prod.sa-east-1.amazonaws.com -emrstudio-prod.sa-east-1.amazonaws.com -emrappui-prod.us-east-1.amazonaws.com -emrnotebooks-prod.us-east-1.amazonaws.com -emrstudio-prod.us-east-1.amazonaws.com -emrappui-prod.us-east-2.amazonaws.com -emrnotebooks-prod.us-east-2.amazonaws.com -emrstudio-prod.us-east-2.amazonaws.com -emrappui-prod.us-gov-east-1.amazonaws.com -emrnotebooks-prod.us-gov-east-1.amazonaws.com -emrstudio-prod.us-gov-east-1.amazonaws.com -emrappui-prod.us-gov-west-1.amazonaws.com -emrnotebooks-prod.us-gov-west-1.amazonaws.com -emrstudio-prod.us-gov-west-1.amazonaws.com -emrappui-prod.us-west-1.amazonaws.com -emrnotebooks-prod.us-west-1.amazonaws.com -emrstudio-prod.us-west-1.amazonaws.com -emrappui-prod.us-west-2.amazonaws.com -emrnotebooks-prod.us-west-2.amazonaws.com -emrstudio-prod.us-west-2.amazonaws.com - -// Amazon Managed Workflows for Apache Airflow -// Submitted by AWS Security -// Reference: 4ab55e6f-90c0-4a8d-b6a0-52ca5dbb1c2e -*.cn-north-1.airflow.amazonaws.com.cn -*.cn-northwest-1.airflow.amazonaws.com.cn -*.ap-northeast-1.airflow.amazonaws.com -*.ap-northeast-2.airflow.amazonaws.com -*.ap-south-1.airflow.amazonaws.com -*.ap-southeast-1.airflow.amazonaws.com -*.ap-southeast-2.airflow.amazonaws.com -*.ca-central-1.airflow.amazonaws.com -*.eu-central-1.airflow.amazonaws.com -*.eu-north-1.airflow.amazonaws.com -*.eu-west-1.airflow.amazonaws.com -*.eu-west-2.airflow.amazonaws.com -*.eu-west-3.airflow.amazonaws.com -*.sa-east-1.airflow.amazonaws.com -*.us-east-1.airflow.amazonaws.com -*.us-east-2.airflow.amazonaws.com -*.us-west-2.airflow.amazonaws.com - -// Amazon S3 -// Submitted by AWS Security -// Reference: 0e801048-08f2-4064-9cb8-e7373e0b57f4 -s3.dualstack.cn-north-1.amazonaws.com.cn -s3-accesspoint.dualstack.cn-north-1.amazonaws.com.cn -s3-website.dualstack.cn-north-1.amazonaws.com.cn -s3.cn-north-1.amazonaws.com.cn -s3-accesspoint.cn-north-1.amazonaws.com.cn -s3-deprecated.cn-north-1.amazonaws.com.cn -s3-object-lambda.cn-north-1.amazonaws.com.cn -s3-website.cn-north-1.amazonaws.com.cn -s3.dualstack.cn-northwest-1.amazonaws.com.cn -s3-accesspoint.dualstack.cn-northwest-1.amazonaws.com.cn -s3.cn-northwest-1.amazonaws.com.cn -s3-accesspoint.cn-northwest-1.amazonaws.com.cn -s3-object-lambda.cn-northwest-1.amazonaws.com.cn -s3-website.cn-northwest-1.amazonaws.com.cn -s3.dualstack.af-south-1.amazonaws.com -s3-accesspoint.dualstack.af-south-1.amazonaws.com -s3-website.dualstack.af-south-1.amazonaws.com -s3.af-south-1.amazonaws.com -s3-accesspoint.af-south-1.amazonaws.com -s3-object-lambda.af-south-1.amazonaws.com -s3-website.af-south-1.amazonaws.com -s3.dualstack.ap-east-1.amazonaws.com -s3-accesspoint.dualstack.ap-east-1.amazonaws.com -s3.ap-east-1.amazonaws.com -s3-accesspoint.ap-east-1.amazonaws.com -s3-object-lambda.ap-east-1.amazonaws.com -s3-website.ap-east-1.amazonaws.com -s3.dualstack.ap-northeast-1.amazonaws.com -s3-accesspoint.dualstack.ap-northeast-1.amazonaws.com -s3-website.dualstack.ap-northeast-1.amazonaws.com -s3.ap-northeast-1.amazonaws.com -s3-accesspoint.ap-northeast-1.amazonaws.com -s3-object-lambda.ap-northeast-1.amazonaws.com -s3-website.ap-northeast-1.amazonaws.com -s3.dualstack.ap-northeast-2.amazonaws.com -s3-accesspoint.dualstack.ap-northeast-2.amazonaws.com -s3-website.dualstack.ap-northeast-2.amazonaws.com -s3.ap-northeast-2.amazonaws.com -s3-accesspoint.ap-northeast-2.amazonaws.com -s3-object-lambda.ap-northeast-2.amazonaws.com -s3-website.ap-northeast-2.amazonaws.com -s3.dualstack.ap-northeast-3.amazonaws.com -s3-accesspoint.dualstack.ap-northeast-3.amazonaws.com -s3-website.dualstack.ap-northeast-3.amazonaws.com -s3.ap-northeast-3.amazonaws.com -s3-accesspoint.ap-northeast-3.amazonaws.com -s3-object-lambda.ap-northeast-3.amazonaws.com -s3-website.ap-northeast-3.amazonaws.com -s3.dualstack.ap-south-1.amazonaws.com -s3-accesspoint.dualstack.ap-south-1.amazonaws.com -s3-website.dualstack.ap-south-1.amazonaws.com -s3.ap-south-1.amazonaws.com -s3-accesspoint.ap-south-1.amazonaws.com -s3-object-lambda.ap-south-1.amazonaws.com -s3-website.ap-south-1.amazonaws.com -s3.dualstack.ap-south-2.amazonaws.com -s3-accesspoint.dualstack.ap-south-2.amazonaws.com -s3.ap-south-2.amazonaws.com -s3-accesspoint.ap-south-2.amazonaws.com -s3-object-lambda.ap-south-2.amazonaws.com -s3-website.ap-south-2.amazonaws.com -s3.dualstack.ap-southeast-1.amazonaws.com -s3-accesspoint.dualstack.ap-southeast-1.amazonaws.com -s3-website.dualstack.ap-southeast-1.amazonaws.com -s3.ap-southeast-1.amazonaws.com -s3-accesspoint.ap-southeast-1.amazonaws.com -s3-object-lambda.ap-southeast-1.amazonaws.com -s3-website.ap-southeast-1.amazonaws.com -s3.dualstack.ap-southeast-2.amazonaws.com -s3-accesspoint.dualstack.ap-southeast-2.amazonaws.com -s3-website.dualstack.ap-southeast-2.amazonaws.com -s3.ap-southeast-2.amazonaws.com -s3-accesspoint.ap-southeast-2.amazonaws.com -s3-object-lambda.ap-southeast-2.amazonaws.com -s3-website.ap-southeast-2.amazonaws.com -s3.dualstack.ap-southeast-3.amazonaws.com -s3-accesspoint.dualstack.ap-southeast-3.amazonaws.com -s3.ap-southeast-3.amazonaws.com -s3-accesspoint.ap-southeast-3.amazonaws.com -s3-object-lambda.ap-southeast-3.amazonaws.com -s3-website.ap-southeast-3.amazonaws.com -s3.dualstack.ap-southeast-4.amazonaws.com -s3-accesspoint.dualstack.ap-southeast-4.amazonaws.com -s3.ap-southeast-4.amazonaws.com -s3-accesspoint.ap-southeast-4.amazonaws.com -s3-object-lambda.ap-southeast-4.amazonaws.com -s3-website.ap-southeast-4.amazonaws.com -s3.dualstack.ca-central-1.amazonaws.com -s3-accesspoint.dualstack.ca-central-1.amazonaws.com -s3-accesspoint-fips.dualstack.ca-central-1.amazonaws.com -s3-fips.dualstack.ca-central-1.amazonaws.com -s3-website.dualstack.ca-central-1.amazonaws.com -s3.ca-central-1.amazonaws.com -s3-accesspoint.ca-central-1.amazonaws.com -s3-accesspoint-fips.ca-central-1.amazonaws.com -s3-fips.ca-central-1.amazonaws.com -s3-object-lambda.ca-central-1.amazonaws.com -s3-website.ca-central-1.amazonaws.com -s3.dualstack.eu-central-1.amazonaws.com -s3-accesspoint.dualstack.eu-central-1.amazonaws.com -s3-website.dualstack.eu-central-1.amazonaws.com -s3.eu-central-1.amazonaws.com -s3-accesspoint.eu-central-1.amazonaws.com -s3-object-lambda.eu-central-1.amazonaws.com -s3-website.eu-central-1.amazonaws.com -s3.dualstack.eu-central-2.amazonaws.com -s3-accesspoint.dualstack.eu-central-2.amazonaws.com -s3.eu-central-2.amazonaws.com -s3-accesspoint.eu-central-2.amazonaws.com -s3-object-lambda.eu-central-2.amazonaws.com -s3-website.eu-central-2.amazonaws.com -s3.dualstack.eu-north-1.amazonaws.com -s3-accesspoint.dualstack.eu-north-1.amazonaws.com -s3.eu-north-1.amazonaws.com -s3-accesspoint.eu-north-1.amazonaws.com -s3-object-lambda.eu-north-1.amazonaws.com -s3-website.eu-north-1.amazonaws.com -s3.dualstack.eu-south-1.amazonaws.com -s3-accesspoint.dualstack.eu-south-1.amazonaws.com -s3-website.dualstack.eu-south-1.amazonaws.com -s3.eu-south-1.amazonaws.com -s3-accesspoint.eu-south-1.amazonaws.com -s3-object-lambda.eu-south-1.amazonaws.com -s3-website.eu-south-1.amazonaws.com -s3.dualstack.eu-south-2.amazonaws.com -s3-accesspoint.dualstack.eu-south-2.amazonaws.com -s3.eu-south-2.amazonaws.com -s3-accesspoint.eu-south-2.amazonaws.com -s3-object-lambda.eu-south-2.amazonaws.com -s3-website.eu-south-2.amazonaws.com -s3.dualstack.eu-west-1.amazonaws.com -s3-accesspoint.dualstack.eu-west-1.amazonaws.com -s3-website.dualstack.eu-west-1.amazonaws.com -s3.eu-west-1.amazonaws.com -s3-accesspoint.eu-west-1.amazonaws.com -s3-deprecated.eu-west-1.amazonaws.com -s3-object-lambda.eu-west-1.amazonaws.com -s3-website.eu-west-1.amazonaws.com -s3.dualstack.eu-west-2.amazonaws.com -s3-accesspoint.dualstack.eu-west-2.amazonaws.com -s3.eu-west-2.amazonaws.com -s3-accesspoint.eu-west-2.amazonaws.com -s3-object-lambda.eu-west-2.amazonaws.com -s3-website.eu-west-2.amazonaws.com -s3.dualstack.eu-west-3.amazonaws.com -s3-accesspoint.dualstack.eu-west-3.amazonaws.com -s3-website.dualstack.eu-west-3.amazonaws.com -s3.eu-west-3.amazonaws.com -s3-accesspoint.eu-west-3.amazonaws.com -s3-object-lambda.eu-west-3.amazonaws.com -s3-website.eu-west-3.amazonaws.com -s3.dualstack.il-central-1.amazonaws.com -s3-accesspoint.dualstack.il-central-1.amazonaws.com -s3.il-central-1.amazonaws.com -s3-accesspoint.il-central-1.amazonaws.com -s3-object-lambda.il-central-1.amazonaws.com -s3-website.il-central-1.amazonaws.com -s3.dualstack.me-central-1.amazonaws.com -s3-accesspoint.dualstack.me-central-1.amazonaws.com -s3.me-central-1.amazonaws.com -s3-accesspoint.me-central-1.amazonaws.com -s3-object-lambda.me-central-1.amazonaws.com -s3-website.me-central-1.amazonaws.com -s3.dualstack.me-south-1.amazonaws.com -s3-accesspoint.dualstack.me-south-1.amazonaws.com -s3.me-south-1.amazonaws.com -s3-accesspoint.me-south-1.amazonaws.com -s3-object-lambda.me-south-1.amazonaws.com -s3-website.me-south-1.amazonaws.com -s3.amazonaws.com -s3-1.amazonaws.com -s3-ap-east-1.amazonaws.com -s3-ap-northeast-1.amazonaws.com -s3-ap-northeast-2.amazonaws.com -s3-ap-northeast-3.amazonaws.com -s3-ap-south-1.amazonaws.com -s3-ap-southeast-1.amazonaws.com -s3-ap-southeast-2.amazonaws.com -s3-ca-central-1.amazonaws.com -s3-eu-central-1.amazonaws.com -s3-eu-north-1.amazonaws.com -s3-eu-west-1.amazonaws.com -s3-eu-west-2.amazonaws.com -s3-eu-west-3.amazonaws.com -s3-external-1.amazonaws.com -s3-fips-us-gov-east-1.amazonaws.com -s3-fips-us-gov-west-1.amazonaws.com -mrap.accesspoint.s3-global.amazonaws.com -s3-me-south-1.amazonaws.com -s3-sa-east-1.amazonaws.com -s3-us-east-2.amazonaws.com -s3-us-gov-east-1.amazonaws.com -s3-us-gov-west-1.amazonaws.com -s3-us-west-1.amazonaws.com -s3-us-west-2.amazonaws.com -s3-website-ap-northeast-1.amazonaws.com -s3-website-ap-southeast-1.amazonaws.com -s3-website-ap-southeast-2.amazonaws.com -s3-website-eu-west-1.amazonaws.com -s3-website-sa-east-1.amazonaws.com -s3-website-us-east-1.amazonaws.com -s3-website-us-gov-west-1.amazonaws.com -s3-website-us-west-1.amazonaws.com -s3-website-us-west-2.amazonaws.com -s3.dualstack.sa-east-1.amazonaws.com -s3-accesspoint.dualstack.sa-east-1.amazonaws.com -s3-website.dualstack.sa-east-1.amazonaws.com -s3.sa-east-1.amazonaws.com -s3-accesspoint.sa-east-1.amazonaws.com -s3-object-lambda.sa-east-1.amazonaws.com -s3-website.sa-east-1.amazonaws.com -s3.dualstack.us-east-1.amazonaws.com -s3-accesspoint.dualstack.us-east-1.amazonaws.com -s3-accesspoint-fips.dualstack.us-east-1.amazonaws.com -s3-fips.dualstack.us-east-1.amazonaws.com -s3-website.dualstack.us-east-1.amazonaws.com -s3.us-east-1.amazonaws.com -s3-accesspoint.us-east-1.amazonaws.com -s3-accesspoint-fips.us-east-1.amazonaws.com -s3-deprecated.us-east-1.amazonaws.com -s3-fips.us-east-1.amazonaws.com -s3-object-lambda.us-east-1.amazonaws.com -s3-website.us-east-1.amazonaws.com -s3.dualstack.us-east-2.amazonaws.com -s3-accesspoint.dualstack.us-east-2.amazonaws.com -s3-accesspoint-fips.dualstack.us-east-2.amazonaws.com -s3-fips.dualstack.us-east-2.amazonaws.com -s3.us-east-2.amazonaws.com -s3-accesspoint.us-east-2.amazonaws.com -s3-accesspoint-fips.us-east-2.amazonaws.com -s3-deprecated.us-east-2.amazonaws.com -s3-fips.us-east-2.amazonaws.com -s3-object-lambda.us-east-2.amazonaws.com -s3-website.us-east-2.amazonaws.com -s3.dualstack.us-gov-east-1.amazonaws.com -s3-accesspoint.dualstack.us-gov-east-1.amazonaws.com -s3-accesspoint-fips.dualstack.us-gov-east-1.amazonaws.com -s3-fips.dualstack.us-gov-east-1.amazonaws.com -s3.us-gov-east-1.amazonaws.com -s3-accesspoint.us-gov-east-1.amazonaws.com -s3-accesspoint-fips.us-gov-east-1.amazonaws.com -s3-fips.us-gov-east-1.amazonaws.com -s3-object-lambda.us-gov-east-1.amazonaws.com -s3-website.us-gov-east-1.amazonaws.com -s3.dualstack.us-gov-west-1.amazonaws.com -s3-accesspoint.dualstack.us-gov-west-1.amazonaws.com -s3-accesspoint-fips.dualstack.us-gov-west-1.amazonaws.com -s3-fips.dualstack.us-gov-west-1.amazonaws.com -s3.us-gov-west-1.amazonaws.com -s3-accesspoint.us-gov-west-1.amazonaws.com -s3-accesspoint-fips.us-gov-west-1.amazonaws.com -s3-fips.us-gov-west-1.amazonaws.com -s3-object-lambda.us-gov-west-1.amazonaws.com -s3-website.us-gov-west-1.amazonaws.com -s3.dualstack.us-west-1.amazonaws.com -s3-accesspoint.dualstack.us-west-1.amazonaws.com -s3-accesspoint-fips.dualstack.us-west-1.amazonaws.com -s3-fips.dualstack.us-west-1.amazonaws.com -s3-website.dualstack.us-west-1.amazonaws.com -s3.us-west-1.amazonaws.com -s3-accesspoint.us-west-1.amazonaws.com -s3-accesspoint-fips.us-west-1.amazonaws.com -s3-fips.us-west-1.amazonaws.com -s3-object-lambda.us-west-1.amazonaws.com -s3-website.us-west-1.amazonaws.com -s3.dualstack.us-west-2.amazonaws.com -s3-accesspoint.dualstack.us-west-2.amazonaws.com -s3-accesspoint-fips.dualstack.us-west-2.amazonaws.com -s3-fips.dualstack.us-west-2.amazonaws.com -s3-website.dualstack.us-west-2.amazonaws.com -s3.us-west-2.amazonaws.com -s3-accesspoint.us-west-2.amazonaws.com -s3-accesspoint-fips.us-west-2.amazonaws.com -s3-deprecated.us-west-2.amazonaws.com -s3-fips.us-west-2.amazonaws.com -s3-object-lambda.us-west-2.amazonaws.com -s3-website.us-west-2.amazonaws.com - -// Amazon SageMaker Notebook Instances -// Submitted by AWS Security -// Reference: fe8c9e94-5a22-486d-8750-991a3a9b13c6 -notebook.af-south-1.sagemaker.aws -notebook.ap-east-1.sagemaker.aws -notebook.ap-northeast-1.sagemaker.aws -notebook.ap-northeast-2.sagemaker.aws -notebook.ap-northeast-3.sagemaker.aws -notebook.ap-south-1.sagemaker.aws -notebook.ap-south-2.sagemaker.aws -notebook.ap-southeast-1.sagemaker.aws -notebook.ap-southeast-2.sagemaker.aws -notebook.ap-southeast-3.sagemaker.aws -notebook.ap-southeast-4.sagemaker.aws -notebook.ca-central-1.sagemaker.aws -notebook.eu-central-1.sagemaker.aws -notebook.eu-central-2.sagemaker.aws -notebook.eu-north-1.sagemaker.aws -notebook.eu-south-1.sagemaker.aws -notebook.eu-south-2.sagemaker.aws -notebook.eu-west-1.sagemaker.aws -notebook.eu-west-2.sagemaker.aws -notebook.eu-west-3.sagemaker.aws -notebook.il-central-1.sagemaker.aws -notebook.me-central-1.sagemaker.aws -notebook.me-south-1.sagemaker.aws -notebook.sa-east-1.sagemaker.aws -notebook.us-east-1.sagemaker.aws -notebook-fips.us-east-1.sagemaker.aws -notebook.us-east-2.sagemaker.aws -notebook-fips.us-east-2.sagemaker.aws -notebook.us-gov-east-1.sagemaker.aws -notebook-fips.us-gov-east-1.sagemaker.aws -notebook.us-gov-west-1.sagemaker.aws -notebook-fips.us-gov-west-1.sagemaker.aws -notebook.us-west-1.sagemaker.aws -notebook.us-west-2.sagemaker.aws -notebook-fips.us-west-2.sagemaker.aws -notebook.cn-north-1.sagemaker.com.cn -notebook.cn-northwest-1.sagemaker.com.cn - -// Amazon SageMaker Studio -// Submitted by AWS Security -// Reference: 057ee397-6bf8-4f20-b807-d7bc145ac980 -studio.af-south-1.sagemaker.aws -studio.ap-east-1.sagemaker.aws -studio.ap-northeast-1.sagemaker.aws -studio.ap-northeast-2.sagemaker.aws -studio.ap-northeast-3.sagemaker.aws -studio.ap-south-1.sagemaker.aws -studio.ap-southeast-1.sagemaker.aws -studio.ap-southeast-2.sagemaker.aws -studio.ap-southeast-3.sagemaker.aws -studio.ca-central-1.sagemaker.aws -studio.eu-central-1.sagemaker.aws -studio.eu-north-1.sagemaker.aws -studio.eu-south-1.sagemaker.aws -studio.eu-west-1.sagemaker.aws -studio.eu-west-2.sagemaker.aws -studio.eu-west-3.sagemaker.aws -studio.il-central-1.sagemaker.aws -studio.me-central-1.sagemaker.aws -studio.me-south-1.sagemaker.aws -studio.sa-east-1.sagemaker.aws -studio.us-east-1.sagemaker.aws -studio.us-east-2.sagemaker.aws -studio.us-gov-east-1.sagemaker.aws -studio-fips.us-gov-east-1.sagemaker.aws -studio.us-gov-west-1.sagemaker.aws -studio-fips.us-gov-west-1.sagemaker.aws -studio.us-west-1.sagemaker.aws -studio.us-west-2.sagemaker.aws -studio.cn-north-1.sagemaker.com.cn -studio.cn-northwest-1.sagemaker.com.cn - -// Analytics on AWS -// Submitted by AWS Security -// Reference: 955f9f40-a495-4e73-ae85-67b77ac9cadd -analytics-gateway.ap-northeast-1.amazonaws.com -analytics-gateway.ap-northeast-2.amazonaws.com -analytics-gateway.ap-south-1.amazonaws.com -analytics-gateway.ap-southeast-1.amazonaws.com -analytics-gateway.ap-southeast-2.amazonaws.com -analytics-gateway.eu-central-1.amazonaws.com -analytics-gateway.eu-west-1.amazonaws.com -analytics-gateway.us-east-1.amazonaws.com -analytics-gateway.us-east-2.amazonaws.com -analytics-gateway.us-west-2.amazonaws.com - -// AWS Amplify -// Submitted by AWS Security -// Reference: 5ecce854-c033-4fc4-a755-1a9916d9a9bb -*.amplifyapp.com - -// AWS App Runner -// Submitted by AWS Security -// Reference: 6828c008-ba5d-442f-ade5-48da4e7c2316 -*.awsapprunner.com - -// AWS Cloud9 -// Submitted by: AWS Security -// Reference: 05c44955-977c-4b57-938a-f2af92733f9f -webview-assets.aws-cloud9.af-south-1.amazonaws.com -vfs.cloud9.af-south-1.amazonaws.com -webview-assets.cloud9.af-south-1.amazonaws.com -webview-assets.aws-cloud9.ap-east-1.amazonaws.com -vfs.cloud9.ap-east-1.amazonaws.com -webview-assets.cloud9.ap-east-1.amazonaws.com -webview-assets.aws-cloud9.ap-northeast-1.amazonaws.com -vfs.cloud9.ap-northeast-1.amazonaws.com -webview-assets.cloud9.ap-northeast-1.amazonaws.com -webview-assets.aws-cloud9.ap-northeast-2.amazonaws.com -vfs.cloud9.ap-northeast-2.amazonaws.com -webview-assets.cloud9.ap-northeast-2.amazonaws.com -webview-assets.aws-cloud9.ap-northeast-3.amazonaws.com -vfs.cloud9.ap-northeast-3.amazonaws.com -webview-assets.cloud9.ap-northeast-3.amazonaws.com -webview-assets.aws-cloud9.ap-south-1.amazonaws.com -vfs.cloud9.ap-south-1.amazonaws.com -webview-assets.cloud9.ap-south-1.amazonaws.com -webview-assets.aws-cloud9.ap-southeast-1.amazonaws.com -vfs.cloud9.ap-southeast-1.amazonaws.com -webview-assets.cloud9.ap-southeast-1.amazonaws.com -webview-assets.aws-cloud9.ap-southeast-2.amazonaws.com -vfs.cloud9.ap-southeast-2.amazonaws.com -webview-assets.cloud9.ap-southeast-2.amazonaws.com -webview-assets.aws-cloud9.ca-central-1.amazonaws.com -vfs.cloud9.ca-central-1.amazonaws.com -webview-assets.cloud9.ca-central-1.amazonaws.com -webview-assets.aws-cloud9.eu-central-1.amazonaws.com -vfs.cloud9.eu-central-1.amazonaws.com -webview-assets.cloud9.eu-central-1.amazonaws.com -webview-assets.aws-cloud9.eu-north-1.amazonaws.com -vfs.cloud9.eu-north-1.amazonaws.com -webview-assets.cloud9.eu-north-1.amazonaws.com -webview-assets.aws-cloud9.eu-south-1.amazonaws.com -vfs.cloud9.eu-south-1.amazonaws.com -webview-assets.cloud9.eu-south-1.amazonaws.com -webview-assets.aws-cloud9.eu-west-1.amazonaws.com -vfs.cloud9.eu-west-1.amazonaws.com -webview-assets.cloud9.eu-west-1.amazonaws.com -webview-assets.aws-cloud9.eu-west-2.amazonaws.com -vfs.cloud9.eu-west-2.amazonaws.com -webview-assets.cloud9.eu-west-2.amazonaws.com -webview-assets.aws-cloud9.eu-west-3.amazonaws.com -vfs.cloud9.eu-west-3.amazonaws.com -webview-assets.cloud9.eu-west-3.amazonaws.com -webview-assets.aws-cloud9.me-south-1.amazonaws.com -vfs.cloud9.me-south-1.amazonaws.com -webview-assets.cloud9.me-south-1.amazonaws.com -webview-assets.aws-cloud9.sa-east-1.amazonaws.com -vfs.cloud9.sa-east-1.amazonaws.com -webview-assets.cloud9.sa-east-1.amazonaws.com -webview-assets.aws-cloud9.us-east-1.amazonaws.com -vfs.cloud9.us-east-1.amazonaws.com -webview-assets.cloud9.us-east-1.amazonaws.com -webview-assets.aws-cloud9.us-east-2.amazonaws.com -vfs.cloud9.us-east-2.amazonaws.com -webview-assets.cloud9.us-east-2.amazonaws.com -webview-assets.aws-cloud9.us-west-1.amazonaws.com -vfs.cloud9.us-west-1.amazonaws.com -webview-assets.cloud9.us-west-1.amazonaws.com -webview-assets.aws-cloud9.us-west-2.amazonaws.com -vfs.cloud9.us-west-2.amazonaws.com -webview-assets.cloud9.us-west-2.amazonaws.com - -// AWS Elastic Beanstalk -// Submitted by AWS Security -// Reference: bb5a965c-dec3-4967-aa22-e306ad064797 -cn-north-1.eb.amazonaws.com.cn -cn-northwest-1.eb.amazonaws.com.cn -elasticbeanstalk.com -af-south-1.elasticbeanstalk.com -ap-east-1.elasticbeanstalk.com -ap-northeast-1.elasticbeanstalk.com -ap-northeast-2.elasticbeanstalk.com -ap-northeast-3.elasticbeanstalk.com -ap-south-1.elasticbeanstalk.com -ap-southeast-1.elasticbeanstalk.com -ap-southeast-2.elasticbeanstalk.com -ap-southeast-3.elasticbeanstalk.com -ca-central-1.elasticbeanstalk.com -eu-central-1.elasticbeanstalk.com -eu-north-1.elasticbeanstalk.com -eu-south-1.elasticbeanstalk.com -eu-west-1.elasticbeanstalk.com -eu-west-2.elasticbeanstalk.com -eu-west-3.elasticbeanstalk.com -il-central-1.elasticbeanstalk.com -me-south-1.elasticbeanstalk.com -sa-east-1.elasticbeanstalk.com -us-east-1.elasticbeanstalk.com -us-east-2.elasticbeanstalk.com -us-gov-east-1.elasticbeanstalk.com -us-gov-west-1.elasticbeanstalk.com -us-west-1.elasticbeanstalk.com -us-west-2.elasticbeanstalk.com - -// (AWS) Elastic Load Balancing -// Submitted by Luke Wells -// Reference: 12a3d528-1bac-4433-a359-a395867ffed2 -*.elb.amazonaws.com.cn -*.elb.amazonaws.com - -// AWS Global Accelerator -// Submitted by Daniel Massaguer -// Reference: d916759d-a08b-4241-b536-4db887383a6a -awsglobalaccelerator.com - -// eero -// Submitted by Yue Kang -// Reference: 264afe70-f62c-4c02-8ab9-b5281ed24461 -eero.online -eero-stage.online - -// concludes Amazon - -// Amune : https://amune.org/ -// Submitted by Team Amune -t3l3p0rt.net -tele.amune.org - -// Apigee : https://apigee.com/ -// Submitted by Apigee Security Team -apigee.io - -// Apphud : https://apphud.com -// Submitted by Alexander Selivanov -siiites.com - -// Appspace : https://www.appspace.com -// Submitted by Appspace Security Team -appspacehosted.com -appspaceusercontent.com - -// Appudo UG (haftungsbeschränkt) : https://www.appudo.com -// Submitted by Alexander Hochbaum -appudo.net - -// Aptible : https://www.aptible.com/ -// Submitted by Thomas Orozco -on-aptible.com - -// ASEINet : https://www.aseinet.com/ -// Submitted by Asei SEKIGUCHI -user.aseinet.ne.jp -gv.vc -d.gv.vc - -// Asociación Amigos de la Informática "Euskalamiga" : http://encounter.eus/ -// Submitted by Hector Martin -user.party.eus - -// Association potager.org : https://potager.org/ -// Submitted by Lunar -pimienta.org -poivron.org -potager.org -sweetpepper.org - -// ASUSTOR Inc. : http://www.asustor.com -// Submitted by Vincent Tseng -myasustor.com - -// Atlassian : https://atlassian.com -// Submitted by Sam Smyth -cdn.prod.atlassian-dev.net - -// Authentick UG (haftungsbeschränkt) : https://authentick.net -// Submitted by Lukas Reschke -translated.page - -// Autocode : https://autocode.com -// Submitted by Jacob Lee -autocode.dev - -// AVM : https://avm.de -// Submitted by Andreas Weise -myfritz.net - -// AVStack Pte. Ltd. : https://avstack.io -// Submitted by Jasper Hugo -onavstack.net - -// AW AdvisorWebsites.com Software Inc : https://advisorwebsites.com -// Submitted by James Kennedy -*.awdev.ca -*.advisor.ws - -// AZ.pl sp. z.o.o: https://az.pl -// Submitted by Krzysztof Wolski -ecommerce-shop.pl - -// b-data GmbH : https://www.b-data.io -// Submitted by Olivier Benz -b-data.io - -// backplane : https://www.backplane.io -// Submitted by Anthony Voutas -backplaneapp.io - -// Balena : https://www.balena.io -// Submitted by Petros Angelatos -balena-devices.com - -// University of Banja Luka : https://unibl.org -// Domains for Republic of Srpska administrative entity. -// Submitted by Marko Ivanovic -rs.ba - -// Banzai Cloud -// Submitted by Janos Matyas -*.banzai.cloud -app.banzaicloud.io -*.backyards.banzaicloud.io - -// BASE, Inc. : https://binc.jp -// Submitted by Yuya NAGASAWA -base.ec -official.ec -buyshop.jp -fashionstore.jp -handcrafted.jp -kawaiishop.jp -supersale.jp -theshop.jp -shopselect.net -base.shop - -// BeagleBoard.org Foundation : https://beagleboard.org -// Submitted by Jason Kridner -beagleboard.io - -// Beget Ltd -// Submitted by Lev Nekrasov -*.beget.app - -// BetaInABox -// Submitted by Adrian -betainabox.com - -// BinaryLane : http://www.binarylane.com -// Submitted by Nathan O'Sullivan -bnr.la - -// Bitbucket : http://bitbucket.org -// Submitted by Andy Ortlieb -bitbucket.io - -// Blackbaud, Inc. : https://www.blackbaud.com -// Submitted by Paul Crowder -blackbaudcdn.net - -// Blatech : http://www.blatech.net -// Submitted by Luke Bratch -of.je - -// Blue Bite, LLC : https://bluebite.com -// Submitted by Joshua Weiss -bluebite.io - -// Boomla : https://boomla.com -// Submitted by Tibor Halter -boomla.net - -// Boutir : https://www.boutir.com -// Submitted by Eric Ng Ka Ka -boutir.com - -// Boxfuse : https://boxfuse.com -// Submitted by Axel Fontaine -boxfuse.io - -// bplaced : https://www.bplaced.net/ -// Submitted by Miroslav Bozic -square7.ch -bplaced.com -bplaced.de -square7.de -bplaced.net -square7.net - -// Brendly : https://brendly.rs -// Submitted by Dusan Radovanovic -shop.brendly.rs - -// BrowserSafetyMark -// Submitted by Dave Tharp -browsersafetymark.io - -// Bytemark Hosting : https://www.bytemark.co.uk -// Submitted by Paul Cammish -uk0.bigv.io -dh.bytemark.co.uk -vm.bytemark.co.uk - -// Caf.js Labs LLC : https://www.cafjs.com -// Submitted by Antonio Lain -cafjs.com - -// callidomus : https://www.callidomus.com/ -// Submitted by Marcus Popp -mycd.eu - -// Canva Pty Ltd : https://canva.com/ -// Submitted by Joel Aquilina -canva-apps.cn -canva-apps.com - -// Carrd : https://carrd.co -// Submitted by AJ -drr.ac -uwu.ai -carrd.co -crd.co -ju.mp - -// CentralNic : http://www.centralnic.com/names/domains -// Submitted by registry -ae.org -br.com -cn.com -com.de -com.se -de.com -eu.com -gb.net -hu.net -jp.net -jpn.com -mex.com -ru.com -sa.com -se.net -uk.com -uk.net -us.com -za.bz -za.com - -// No longer operated by CentralNic, these entries should be adopted and/or removed by current operators -// Submitted by Gavin Brown -ar.com -hu.com -kr.com -no.com -qc.com -uy.com - -// Africa.com Web Solutions Ltd : https://registry.africa.com -// Submitted by Gavin Brown -africa.com - -// iDOT Services Limited : http://www.domain.gr.com -// Submitted by Gavin Brown -gr.com - -// Radix FZC : http://domains.in.net -// Submitted by Gavin Brown -in.net -web.in - -// US REGISTRY LLC : http://us.org -// Submitted by Gavin Brown -us.org - -// co.com Registry, LLC : https://registry.co.com -// Submitted by Gavin Brown -co.com - -// Roar Domains LLC : https://roar.basketball/ -// Submitted by Gavin Brown -aus.basketball -nz.basketball - -// BRS Media : https://brsmedia.com/ -// Submitted by Gavin Brown -radio.am -radio.fm - -// c.la : http://www.c.la/ -c.la - -// certmgr.org : https://certmgr.org -// Submitted by B. Blechschmidt -certmgr.org - -// Cityhost LLC : https://cityhost.ua -// Submitted by Maksym Rivtin -cx.ua - -// Civilized Discourse Construction Kit, Inc. : https://www.discourse.org/ -// Submitted by Rishabh Nambiar & Michael Brown -discourse.group -discourse.team - -// Clever Cloud : https://www.clever-cloud.com/ -// Submitted by Quentin Adam -cleverapps.io - -// Clerk : https://www.clerk.dev -// Submitted by Colin Sidoti -clerk.app -clerkstage.app -*.lcl.dev -*.lclstage.dev -*.stg.dev -*.stgstage.dev - -// ClickRising : https://clickrising.com/ -// Submitted by Umut Gumeli -clickrising.net - -// Cloud66 : https://www.cloud66.com/ -// Submitted by Khash Sajadi -c66.me -cloud66.ws -cloud66.zone - -// CloudAccess.net : https://www.cloudaccess.net/ -// Submitted by Pawel Panek -jdevcloud.com -wpdevcloud.com -cloudaccess.host -freesite.host -cloudaccess.net - -// cloudControl : https://www.cloudcontrol.com/ -// Submitted by Tobias Wilken -cloudcontrolled.com -cloudcontrolapp.com - -// Cloudera, Inc. : https://www.cloudera.com/ -// Submitted by Kedarnath Waikar -*.cloudera.site - -// Cloudflare, Inc. : https://www.cloudflare.com/ -// Submitted by Cloudflare Team -cf-ipfs.com -cloudflare-ipfs.com -trycloudflare.com -pages.dev -r2.dev -workers.dev - -// Clovyr : https://clovyr.io -// Submitted by Patrick Nielsen -wnext.app - -// co.ca : http://registry.co.ca/ -co.ca - -// Co & Co : https://co-co.nl/ -// Submitted by Govert Versluis -*.otap.co - -// i-registry s.r.o. : http://www.i-registry.cz/ -// Submitted by Martin Semrad -co.cz - -// CDN77.com : http://www.cdn77.com -// Submitted by Jan Krpes -c.cdn77.org -cdn77-ssl.net -r.cdn77.net -rsc.cdn77.org -ssl.origin.cdn77-secure.org - -// Cloud DNS Ltd : http://www.cloudns.net -// Submitted by Aleksander Hristov -cloudns.asia -cloudns.biz -cloudns.club -cloudns.cc -cloudns.eu -cloudns.in -cloudns.info -cloudns.org -cloudns.pro -cloudns.pw -cloudns.us - -// CNPY : https://cnpy.gdn -// Submitted by Angelo Gladding -cnpy.gdn - -// Codeberg e. V. : https://codeberg.org -// Submitted by Moritz Marquardt -codeberg.page - -// CoDNS B.V. -co.nl -co.no - -// Combell.com : https://www.combell.com -// Submitted by Thomas Wouters -webhosting.be -hosting-cluster.nl - -// Coordination Center for TLD RU and XN--P1AI : https://cctld.ru/en/domains/domens_ru/reserved/ -// Submitted by George Georgievsky -ac.ru -edu.ru -gov.ru -int.ru -mil.ru -test.ru - -// COSIMO GmbH : http://www.cosimo.de -// Submitted by Rene Marticke -dyn.cosidns.de -dynamisches-dns.de -dnsupdater.de -internet-dns.de -l-o-g-i-n.de -dynamic-dns.info -feste-ip.net -knx-server.net -static-access.net - -// Craynic, s.r.o. : http://www.craynic.com/ -// Submitted by Ales Krajnik -realm.cz - -// Cryptonomic : https://cryptonomic.net/ -// Submitted by Andrew Cady -*.cryptonomic.net - -// Cupcake : https://cupcake.io/ -// Submitted by Jonathan Rudenberg -cupcake.is - -// Curv UG : https://curv-labs.de/ -// Submitted by Marvin Wiesner -curv.dev - -// Customer OCI - Oracle Dyn https://cloud.oracle.com/home https://dyn.com/dns/ -// Submitted by Gregory Drake -// Note: This is intended to also include customer-oci.com due to wildcards implicitly including the current label -*.customer-oci.com -*.oci.customer-oci.com -*.ocp.customer-oci.com -*.ocs.customer-oci.com - -// cyon GmbH : https://www.cyon.ch/ -// Submitted by Dominic Luechinger -cyon.link -cyon.site - -// Danger Science Group: https://dangerscience.com/ -// Submitted by Skylar MacDonald -fnwk.site -folionetwork.site -platform0.app - -// Daplie, Inc : https://daplie.com -// Submitted by AJ ONeal -daplie.me -localhost.daplie.me - -// Datto, Inc. : https://www.datto.com/ -// Submitted by Philipp Heckel -dattolocal.com -dattorelay.com -dattoweb.com -mydatto.com -dattolocal.net -mydatto.net - -// Dansk.net : http://www.dansk.net/ -// Submitted by Anani Voule -biz.dk -co.dk -firm.dk -reg.dk -store.dk - -// dappnode.io : https://dappnode.io/ -// Submitted by Abel Boldu / DAppNode Team -dyndns.dappnode.io - -// dapps.earth : https://dapps.earth/ -// Submitted by Daniil Burdakov -*.dapps.earth -*.bzz.dapps.earth - -// Dark, Inc. : https://darklang.com -// Submitted by Paul Biggar -builtwithdark.com - -// DataDetect, LLC. : https://datadetect.com -// Submitted by Andrew Banchich -demo.datadetect.com -instance.datadetect.com - -// Datawire, Inc : https://www.datawire.io -// Submitted by Richard Li -edgestack.me - -// DDNS5 : https://ddns5.com -// Submitted by Cameron Elliott -ddns5.com - -// Debian : https://www.debian.org/ -// Submitted by Peter Palfrader / Debian Sysadmin Team -debian.net - -// Deno Land Inc : https://deno.com/ -// Submitted by Luca Casonato -deno.dev -deno-staging.dev - -// deSEC : https://desec.io/ -// Submitted by Peter Thomassen -dedyn.io - -// Deta: https://www.deta.sh/ -// Submitted by Aavash Shrestha -deta.app -deta.dev - -// Diher Solutions : https://diher.solutions -// Submitted by Didi Hermawan -*.rss.my.id -*.diher.solutions - -// Discord Inc : https://discord.com -// Submitted by Sahn Lam -discordsays.com -discordsez.com - -// DNS Africa Ltd https://dns.business -// Submitted by Calvin Browne -jozi.biz - -// DNShome : https://www.dnshome.de/ -// Submitted by Norbert Auler -dnshome.de - -// DotArai : https://www.dotarai.com/ -// Submitted by Atsadawat Netcharadsang -online.th -shop.th - -// DrayTek Corp. : https://www.draytek.com/ -// Submitted by Paul Fang -drayddns.com - -// DreamCommerce : https://shoper.pl/ -// Submitted by Konrad Kotarba -shoparena.pl - -// DreamHost : http://www.dreamhost.com/ -// Submitted by Andrew Farmer -dreamhosters.com - -// Drobo : http://www.drobo.com/ -// Submitted by Ricardo Padilha -mydrobo.com - -// Drud Holdings, LLC. : https://www.drud.com/ -// Submitted by Kevin Bridges -drud.io -drud.us - -// DuckDNS : http://www.duckdns.org/ -// Submitted by Richard Harper -duckdns.org - -// Bip : https://bip.sh -// Submitted by Joel Kennedy -bip.sh - -// bitbridge.net : Submitted by Craig Welch, abeliidev@gmail.com -bitbridge.net - -// dy.fi : http://dy.fi/ -// Submitted by Heikki Hannikainen -dy.fi -tunk.org - -// DynDNS.com : http://www.dyndns.com/services/dns/dyndns/ -dyndns-at-home.com -dyndns-at-work.com -dyndns-blog.com -dyndns-free.com -dyndns-home.com -dyndns-ip.com -dyndns-mail.com -dyndns-office.com -dyndns-pics.com -dyndns-remote.com -dyndns-server.com -dyndns-web.com -dyndns-wiki.com -dyndns-work.com -dyndns.biz -dyndns.info -dyndns.org -dyndns.tv -at-band-camp.net -ath.cx -barrel-of-knowledge.info -barrell-of-knowledge.info -better-than.tv -blogdns.com -blogdns.net -blogdns.org -blogsite.org -boldlygoingnowhere.org -broke-it.net -buyshouses.net -cechire.com -dnsalias.com -dnsalias.net -dnsalias.org -dnsdojo.com -dnsdojo.net -dnsdojo.org -does-it.net -doesntexist.com -doesntexist.org -dontexist.com -dontexist.net -dontexist.org -doomdns.com -doomdns.org -dvrdns.org -dyn-o-saur.com -dynalias.com -dynalias.net -dynalias.org -dynathome.net -dyndns.ws -endofinternet.net -endofinternet.org -endoftheinternet.org -est-a-la-maison.com -est-a-la-masion.com -est-le-patron.com -est-mon-blogueur.com -for-better.biz -for-more.biz -for-our.info -for-some.biz -for-the.biz -forgot.her.name -forgot.his.name -from-ak.com -from-al.com -from-ar.com -from-az.net -from-ca.com -from-co.net -from-ct.com -from-dc.com -from-de.com -from-fl.com -from-ga.com -from-hi.com -from-ia.com -from-id.com -from-il.com -from-in.com -from-ks.com -from-ky.com -from-la.net -from-ma.com -from-md.com -from-me.org -from-mi.com -from-mn.com -from-mo.com -from-ms.com -from-mt.com -from-nc.com -from-nd.com -from-ne.com -from-nh.com -from-nj.com -from-nm.com -from-nv.com -from-ny.net -from-oh.com -from-ok.com -from-or.com -from-pa.com -from-pr.com -from-ri.com -from-sc.com -from-sd.com -from-tn.com -from-tx.com -from-ut.com -from-va.com -from-vt.com -from-wa.com -from-wi.com -from-wv.com -from-wy.com -ftpaccess.cc -fuettertdasnetz.de -game-host.org -game-server.cc -getmyip.com -gets-it.net -go.dyndns.org -gotdns.com -gotdns.org -groks-the.info -groks-this.info -ham-radio-op.net -here-for-more.info -hobby-site.com -hobby-site.org -home.dyndns.org -homedns.org -homeftp.net -homeftp.org -homeip.net -homelinux.com -homelinux.net -homelinux.org -homeunix.com -homeunix.net -homeunix.org -iamallama.com -in-the-band.net -is-a-anarchist.com -is-a-blogger.com -is-a-bookkeeper.com -is-a-bruinsfan.org -is-a-bulls-fan.com -is-a-candidate.org -is-a-caterer.com -is-a-celticsfan.org -is-a-chef.com -is-a-chef.net -is-a-chef.org -is-a-conservative.com -is-a-cpa.com -is-a-cubicle-slave.com -is-a-democrat.com -is-a-designer.com -is-a-doctor.com -is-a-financialadvisor.com -is-a-geek.com -is-a-geek.net -is-a-geek.org -is-a-green.com -is-a-guru.com -is-a-hard-worker.com -is-a-hunter.com -is-a-knight.org -is-a-landscaper.com -is-a-lawyer.com -is-a-liberal.com -is-a-libertarian.com -is-a-linux-user.org -is-a-llama.com -is-a-musician.com -is-a-nascarfan.com -is-a-nurse.com -is-a-painter.com -is-a-patsfan.org -is-a-personaltrainer.com -is-a-photographer.com -is-a-player.com -is-a-republican.com -is-a-rockstar.com -is-a-socialist.com -is-a-soxfan.org -is-a-student.com -is-a-teacher.com -is-a-techie.com -is-a-therapist.com -is-an-accountant.com -is-an-actor.com -is-an-actress.com -is-an-anarchist.com -is-an-artist.com -is-an-engineer.com -is-an-entertainer.com -is-by.us -is-certified.com -is-found.org -is-gone.com -is-into-anime.com -is-into-cars.com -is-into-cartoons.com -is-into-games.com -is-leet.com -is-lost.org -is-not-certified.com -is-saved.org -is-slick.com -is-uberleet.com -is-very-bad.org -is-very-evil.org -is-very-good.org -is-very-nice.org -is-very-sweet.org -is-with-theband.com -isa-geek.com -isa-geek.net -isa-geek.org -isa-hockeynut.com -issmarterthanyou.com -isteingeek.de -istmein.de -kicks-ass.net -kicks-ass.org -knowsitall.info -land-4-sale.us -lebtimnetz.de -leitungsen.de -likes-pie.com -likescandy.com -merseine.nu -mine.nu -misconfused.org -mypets.ws -myphotos.cc -neat-url.com -office-on-the.net -on-the-web.tv -podzone.net -podzone.org -readmyblog.org -saves-the-whales.com -scrapper-site.net -scrapping.cc -selfip.biz -selfip.com -selfip.info -selfip.net -selfip.org -sells-for-less.com -sells-for-u.com -sells-it.net -sellsyourhome.org -servebbs.com -servebbs.net -servebbs.org -serveftp.net -serveftp.org -servegame.org -shacknet.nu -simple-url.com -space-to-rent.com -stuff-4-sale.org -stuff-4-sale.us -teaches-yoga.com -thruhere.net -traeumtgerade.de -webhop.biz -webhop.info -webhop.net -webhop.org -worse-than.tv -writesthisblog.com - -// ddnss.de : https://www.ddnss.de/ -// Submitted by Robert Niedziela -ddnss.de -dyn.ddnss.de -dyndns.ddnss.de -dyndns1.de -dyn-ip24.de -home-webserver.de -dyn.home-webserver.de -myhome-server.de -ddnss.org - -// Definima : http://www.definima.com/ -// Submitted by Maxence Bitterli -definima.net -definima.io - -// DigitalOcean App Platform : https://www.digitalocean.com/products/app-platform/ -// Submitted by Braxton Huggins -ondigitalocean.app - -// DigitalOcean Spaces : https://www.digitalocean.com/products/spaces/ -// Submitted by Robin H. Johnson -*.digitaloceanspaces.com - -// dnstrace.pro : https://dnstrace.pro/ -// Submitted by Chris Partridge -bci.dnstrace.pro - -// Dynu.com : https://www.dynu.com/ -// Submitted by Sue Ye -ddnsfree.com -ddnsgeek.com -giize.com -gleeze.com -kozow.com -loseyourip.com -ooguy.com -theworkpc.com -casacam.net -dynu.net -accesscam.org -camdvr.org -freeddns.org -mywire.org -webredirect.org -myddns.rocks -blogsite.xyz - -// dynv6 : https://dynv6.com -// Submitted by Dominik Menke -dynv6.net - -// E4YOU spol. s.r.o. : https://e4you.cz/ -// Submitted by Vladimir Dudr -e4.cz - -// Easypanel : https://easypanel.io -// Submitted by Andrei Canta -easypanel.app -easypanel.host - -// Elementor : Elementor Ltd. -// Submitted by Anton Barkan -elementor.cloud -elementor.cool - -// En root‽ : https://en-root.org -// Submitted by Emmanuel Raviart -en-root.fr - -// Enalean SAS: https://www.enalean.com -// Submitted by Thomas Cottier -mytuleap.com -tuleap-partners.com - -// Encoretivity AB: https://encore.dev -// Submitted by André Eriksson -encr.app -encoreapi.com - -// ECG Robotics, Inc: https://ecgrobotics.org -// Submitted by -onred.one -staging.onred.one - -// encoway GmbH : https://www.encoway.de -// Submitted by Marcel Daus -eu.encoway.cloud - -// EU.org https://eu.org/ -// Submitted by Pierre Beyssac -eu.org -al.eu.org -asso.eu.org -at.eu.org -au.eu.org -be.eu.org -bg.eu.org -ca.eu.org -cd.eu.org -ch.eu.org -cn.eu.org -cy.eu.org -cz.eu.org -de.eu.org -dk.eu.org -edu.eu.org -ee.eu.org -es.eu.org -fi.eu.org -fr.eu.org -gr.eu.org -hr.eu.org -hu.eu.org -ie.eu.org -il.eu.org -in.eu.org -int.eu.org -is.eu.org -it.eu.org -jp.eu.org -kr.eu.org -lt.eu.org -lu.eu.org -lv.eu.org -mc.eu.org -me.eu.org -mk.eu.org -mt.eu.org -my.eu.org -net.eu.org -ng.eu.org -nl.eu.org -no.eu.org -nz.eu.org -paris.eu.org -pl.eu.org -pt.eu.org -q-a.eu.org -ro.eu.org -ru.eu.org -se.eu.org -si.eu.org -sk.eu.org -tr.eu.org -uk.eu.org -us.eu.org - -// Eurobyte : https://eurobyte.ru -// Submitted by Evgeniy Subbotin -eurodir.ru - -// Evennode : http://www.evennode.com/ -// Submitted by Michal Kralik -eu-1.evennode.com -eu-2.evennode.com -eu-3.evennode.com -eu-4.evennode.com -us-1.evennode.com -us-2.evennode.com -us-3.evennode.com -us-4.evennode.com - -// eDirect Corp. : https://hosting.url.com.tw/ -// Submitted by C.S. chang -twmail.cc -twmail.net -twmail.org -mymailer.com.tw -url.tw - -// Fabrica Technologies, Inc. : https://www.fabrica.dev/ -// Submitted by Eric Jiang -onfabrica.com - -// Facebook, Inc. -// Submitted by Peter Ruibal -apps.fbsbx.com - -// FAITID : https://faitid.org/ -// Submitted by Maxim Alzoba -// https://www.flexireg.net/stat_info -ru.net -adygeya.ru -bashkiria.ru -bir.ru -cbg.ru -com.ru -dagestan.ru -grozny.ru -kalmykia.ru -kustanai.ru -marine.ru -mordovia.ru -msk.ru -mytis.ru -nalchik.ru -nov.ru -pyatigorsk.ru -spb.ru -vladikavkaz.ru -vladimir.ru -abkhazia.su -adygeya.su -aktyubinsk.su -arkhangelsk.su -armenia.su -ashgabad.su -azerbaijan.su -balashov.su -bashkiria.su -bryansk.su -bukhara.su -chimkent.su -dagestan.su -east-kazakhstan.su -exnet.su -georgia.su -grozny.su -ivanovo.su -jambyl.su -kalmykia.su -kaluga.su -karacol.su -karaganda.su -karelia.su -khakassia.su -krasnodar.su -kurgan.su -kustanai.su -lenug.su -mangyshlak.su -mordovia.su -msk.su -murmansk.su -nalchik.su -navoi.su -north-kazakhstan.su -nov.su -obninsk.su -penza.su -pokrovsk.su -sochi.su -spb.su -tashkent.su -termez.su -togliatti.su -troitsk.su -tselinograd.su -tula.su -tuva.su -vladikavkaz.su -vladimir.su -vologda.su - -// Fancy Bits, LLC : http://getchannels.com -// Submitted by Aman Gupta -channelsdvr.net -u.channelsdvr.net - -// Fastly Inc. : http://www.fastly.com/ -// Submitted by Fastly Security -edgecompute.app -fastly-edge.com -fastly-terrarium.com -fastlylb.net -map.fastlylb.net -freetls.fastly.net -map.fastly.net -a.prod.fastly.net -global.prod.fastly.net -a.ssl.fastly.net -b.ssl.fastly.net -global.ssl.fastly.net - -// Fastmail : https://www.fastmail.com/ -// Submitted by Marc Bradshaw -*.user.fm - -// FASTVPS EESTI OU : https://fastvps.ru/ -// Submitted by Likhachev Vasiliy -fastvps-server.com -fastvps.host -myfast.host -fastvps.site -myfast.space - -// Fedora : https://fedoraproject.org/ -// submitted by Patrick Uiterwijk -fedorainfracloud.org -fedorapeople.org -cloud.fedoraproject.org -app.os.fedoraproject.org -app.os.stg.fedoraproject.org - -// FearWorks Media Ltd. : https://fearworksmedia.co.uk -// submitted by Keith Fairley -conn.uk -copro.uk -hosp.uk - -// Fermax : https://fermax.com/ -// submitted by Koen Van Isterdael -mydobiss.com - -// FH Muenster : https://www.fh-muenster.de -// Submitted by Robin Naundorf -fh-muenster.io - -// Filegear Inc. : https://www.filegear.com -// Submitted by Jason Zhu -filegear.me -filegear-au.me -filegear-de.me -filegear-gb.me -filegear-ie.me -filegear-jp.me -filegear-sg.me - -// Firebase, Inc. -// Submitted by Chris Raynor -firebaseapp.com - -// Firewebkit : https://www.firewebkit.com -// Submitted by Majid Qureshi -fireweb.app - -// FLAP : https://www.flap.cloud -// Submitted by Louis Chemineau -flap.id - -// FlashDrive : https://flashdrive.io -// Submitted by Eric Chan -onflashdrive.app -fldrv.com - -// fly.io: https://fly.io -// Submitted by Kurt Mackey -fly.dev -edgeapp.net -shw.io - -// Flynn : https://flynn.io -// Submitted by Jonathan Rudenberg -flynnhosting.net - -// Forgerock : https://www.forgerock.com -// Submitted by Roderick Parr -forgeblocks.com -id.forgerock.io - -// Framer : https://www.framer.com -// Submitted by Koen Rouwhorst -framer.app -framercanvas.com -framer.media -framer.photos -framer.website -framer.wiki - -// Frusky MEDIA&PR : https://www.frusky.de -// Submitted by Victor Pupynin -*.frusky.de - -// RavPage : https://www.ravpage.co.il -// Submitted by Roni Horowitz -ravpage.co.il - -// Frederik Braun https://frederik-braun.com -// Submitted by Frederik Braun -0e.vc - -// Freebox : http://www.freebox.fr -// Submitted by Romain Fliedel -freebox-os.com -freeboxos.com -fbx-os.fr -fbxos.fr -freebox-os.fr -freeboxos.fr - -// freedesktop.org : https://www.freedesktop.org -// Submitted by Daniel Stone -freedesktop.org - -// freemyip.com : https://freemyip.com -// Submitted by Cadence -freemyip.com - -// FunkFeuer - Verein zur Förderung freier Netze : https://www.funkfeuer.at -// Submitted by Daniel A. Maierhofer -wien.funkfeuer.at - -// Futureweb GmbH : https://www.futureweb.at -// Submitted by Andreas Schnederle-Wagner -*.futurecms.at -*.ex.futurecms.at -*.in.futurecms.at -futurehosting.at -futuremailing.at -*.ex.ortsinfo.at -*.kunden.ortsinfo.at -*.statics.cloud - -// GDS : https://www.gov.uk/service-manual/technology/managing-domain-names -// Submitted by Stephen Ford -independent-commission.uk -independent-inquest.uk -independent-inquiry.uk -independent-panel.uk -independent-review.uk -public-inquiry.uk -royal-commission.uk -campaign.gov.uk -service.gov.uk - -// CDDO : https://www.gov.uk/guidance/get-an-api-domain-on-govuk -// Submitted by Jamie Tanna -api.gov.uk - -// Gehirn Inc. : https://www.gehirn.co.jp/ -// Submitted by Kohei YOSHIDA -gehirn.ne.jp -usercontent.jp - -// Gentlent, Inc. : https://www.gentlent.com -// Submitted by Tom Klein -gentapps.com -gentlentapis.com -lab.ms -cdn-edges.net - -// Ghost Foundation : https://ghost.org -// Submitted by Matt Hanley -ghost.io - -// GignoSystemJapan: http://gsj.bz -// Submitted by GignoSystemJapan -gsj.bz - -// GitHub, Inc. -// Submitted by Patrick Toomey -githubusercontent.com -githubpreview.dev -github.io - -// GitLab, Inc. -// Submitted by Alex Hanselka -gitlab.io - -// Gitplac.si - https://gitplac.si -// Submitted by Aljaž Starc -gitapp.si -gitpage.si - -// Glitch, Inc : https://glitch.com -// Submitted by Mads Hartmann -glitch.me - -// Global NOG Alliance : https://nogalliance.org/ -// Submitted by Sander Steffann -nog.community - -// Globe Hosting SRL : https://www.globehosting.com/ -// Submitted by Gavin Brown -co.ro -shop.ro - -// GMO Pepabo, Inc. : https://pepabo.com/ -// Submitted by Hosting Div -lolipop.io -angry.jp -babyblue.jp -babymilk.jp -backdrop.jp -bambina.jp -bitter.jp -blush.jp -boo.jp -boy.jp -boyfriend.jp -but.jp -candypop.jp -capoo.jp -catfood.jp -cheap.jp -chicappa.jp -chillout.jp -chips.jp -chowder.jp -chu.jp -ciao.jp -cocotte.jp -coolblog.jp -cranky.jp -cutegirl.jp -daa.jp -deca.jp -deci.jp -digick.jp -egoism.jp -fakefur.jp -fem.jp -flier.jp -floppy.jp -fool.jp -frenchkiss.jp -girlfriend.jp -girly.jp -gloomy.jp -gonna.jp -greater.jp -hacca.jp -heavy.jp -her.jp -hiho.jp -hippy.jp -holy.jp -hungry.jp -icurus.jp -itigo.jp -jellybean.jp -kikirara.jp -kill.jp -kilo.jp -kuron.jp -littlestar.jp -lolipopmc.jp -lolitapunk.jp -lomo.jp -lovepop.jp -lovesick.jp -main.jp -mods.jp -mond.jp -mongolian.jp -moo.jp -namaste.jp -nikita.jp -nobushi.jp -noor.jp -oops.jp -parallel.jp -parasite.jp -pecori.jp -peewee.jp -penne.jp -pepper.jp -perma.jp -pigboat.jp -pinoko.jp -punyu.jp -pupu.jp -pussycat.jp -pya.jp -raindrop.jp -readymade.jp -sadist.jp -schoolbus.jp -secret.jp -staba.jp -stripper.jp -sub.jp -sunnyday.jp -thick.jp -tonkotsu.jp -under.jp -upper.jp -velvet.jp -verse.jp -versus.jp -vivian.jp -watson.jp -weblike.jp -whitesnow.jp -zombie.jp -heteml.net - -// GOV.UK Platform as a Service : https://www.cloud.service.gov.uk/ -// Submitted by Tom Whitwell -cloudapps.digital -london.cloudapps.digital - -// GOV.UK Pay : https://www.payments.service.gov.uk/ -// Submitted by Richard Baker -pymnt.uk - -// UKHomeOffice : https://www.gov.uk/government/organisations/home-office -// Submitted by Jon Shanks -homeoffice.gov.uk - -// GlobeHosting, Inc. -// Submitted by Zoltan Egresi -ro.im - -// GoIP DNS Services : http://www.goip.de -// Submitted by Christian Poulter -goip.de - -// Google, Inc. -// Submitted by Eduardo Vela -run.app -a.run.app -web.app -*.0emm.com -appspot.com -*.r.appspot.com -codespot.com -googleapis.com -googlecode.com -pagespeedmobilizer.com -publishproxy.com -withgoogle.com -withyoutube.com -*.gateway.dev -cloud.goog -translate.goog -*.usercontent.goog -cloudfunctions.net -blogspot.ae -blogspot.al -blogspot.am -blogspot.ba -blogspot.be -blogspot.bg -blogspot.bj -blogspot.ca -blogspot.cf -blogspot.ch -blogspot.cl -blogspot.co.at -blogspot.co.id -blogspot.co.il -blogspot.co.ke -blogspot.co.nz -blogspot.co.uk -blogspot.co.za -blogspot.com -blogspot.com.ar -blogspot.com.au -blogspot.com.br -blogspot.com.by -blogspot.com.co -blogspot.com.cy -blogspot.com.ee -blogspot.com.eg -blogspot.com.es -blogspot.com.mt -blogspot.com.ng -blogspot.com.tr -blogspot.com.uy -blogspot.cv -blogspot.cz -blogspot.de -blogspot.dk -blogspot.fi -blogspot.fr -blogspot.gr -blogspot.hk -blogspot.hr -blogspot.hu -blogspot.ie -blogspot.in -blogspot.is -blogspot.it -blogspot.jp -blogspot.kr -blogspot.li -blogspot.lt -blogspot.lu -blogspot.md -blogspot.mk -blogspot.mr -blogspot.mx -blogspot.my -blogspot.nl -blogspot.no -blogspot.pe -blogspot.pt -blogspot.qa -blogspot.re -blogspot.ro -blogspot.rs -blogspot.ru -blogspot.se -blogspot.sg -blogspot.si -blogspot.sk -blogspot.sn -blogspot.td -blogspot.tw -blogspot.ug -blogspot.vn - -// Goupile : https://goupile.fr -// Submitted by Niels Martignene -goupile.fr - -// Government of the Netherlands: https://www.government.nl -// Submitted by -gov.nl - -// Group 53, LLC : https://www.group53.com -// Submitted by Tyler Todd -awsmppl.com - -// GünstigBestellen : https://günstigbestellen.de -// Submitted by Furkan Akkoc -günstigbestellen.de -günstigliefern.de - -// Hakaran group: http://hakaran.cz -// Submitted by Arseniy Sokolov -fin.ci -free.hr -caa.li -ua.rs -conf.se - -// Handshake : https://handshake.org -// Submitted by Mike Damm -hs.zone -hs.run - -// Hashbang : https://hashbang.sh -hashbang.sh - -// Hasura : https://hasura.io -// Submitted by Shahidh K Muhammed -hasura.app -hasura-app.io - -// Heilbronn University of Applied Sciences - Faculty Informatics (GitLab Pages): https://www.hs-heilbronn.de -// Submitted by Richard Zowalla -pages.it.hs-heilbronn.de - -// Hepforge : https://www.hepforge.org -// Submitted by David Grellscheid -hepforge.org - -// Heroku : https://www.heroku.com/ -// Submitted by Tom Maher -herokuapp.com -herokussl.com - -// Hibernating Rhinos -// Submitted by Oren Eini -ravendb.cloud -ravendb.community -ravendb.me -development.run -ravendb.run - -// home.pl S.A.: https://home.pl -// Submitted by Krzysztof Wolski -homesklep.pl - -// Hong Kong Productivity Council: https://www.hkpc.org/ -// Submitted by SECaaS Team -secaas.hk - -// Hoplix : https://www.hoplix.com -// Submitted by Danilo De Franco -hoplix.shop - - -// HOSTBIP REGISTRY : https://www.hostbip.com/ -// Submitted by Atanunu Igbunuroghene -orx.biz -biz.gl -col.ng -firm.ng -gen.ng -ltd.ng -ngo.ng -edu.scot -sch.so - -// HostFly : https://www.ie.ua -// Submitted by Bohdan Dub -ie.ua - -// HostyHosting (hostyhosting.com) -hostyhosting.io - -// Häkkinen.fi -// Submitted by Eero Häkkinen -häkkinen.fi - -// Ici la Lune : http://www.icilalune.com/ -// Submitted by Simon Morvan -*.moonscale.io -moonscale.net - -// iki.fi -// Submitted by Hannu Aronsson -iki.fi - -// iliad italia: https://www.iliad.it -// Submitted by Marios Makassikis -ibxos.it -iliadboxos.it - -// Impertrix Solutions : -// Submitted by Zhixiang Zhao -impertrixcdn.com -impertrix.com - -// Incsub, LLC: https://incsub.com/ -// Submitted by Aaron Edwards -smushcdn.com -wphostedmail.com -wpmucdn.com -tempurl.host -wpmudev.host - -// Individual Network Berlin e.V. : https://www.in-berlin.de/ -// Submitted by Christian Seitz -dyn-berlin.de -in-berlin.de -in-brb.de -in-butter.de -in-dsl.de -in-dsl.net -in-dsl.org -in-vpn.de -in-vpn.net -in-vpn.org - -// info.at : http://www.info.at/ -biz.at -info.at - -// info.cx : http://info.cx -// Submitted by Jacob Slater -info.cx - -// Interlegis : http://www.interlegis.leg.br -// Submitted by Gabriel Ferreira -ac.leg.br -al.leg.br -am.leg.br -ap.leg.br -ba.leg.br -ce.leg.br -df.leg.br -es.leg.br -go.leg.br -ma.leg.br -mg.leg.br -ms.leg.br -mt.leg.br -pa.leg.br -pb.leg.br -pe.leg.br -pi.leg.br -pr.leg.br -rj.leg.br -rn.leg.br -ro.leg.br -rr.leg.br -rs.leg.br -sc.leg.br -se.leg.br -sp.leg.br -to.leg.br - -// intermetrics GmbH : https://pixolino.com/ -// Submitted by Wolfgang Schwarz -pixolino.com - -// Internet-Pro, LLP: https://netangels.ru/ -// Submitted by Vasiliy Sheredeko -na4u.ru - -// iopsys software solutions AB : https://iopsys.eu/ -// Submitted by Roman Azarenko -iopsys.se - -// IPiFony Systems, Inc. : https://www.ipifony.com/ -// Submitted by Matthew Hardeman -ipifony.net - -// IServ GmbH : https://iserv.de -// Submitted by Mario Hoberg -iservschule.de -mein-iserv.de -schulplattform.de -schulserver.de -test-iserv.de -iserv.dev - -// I-O DATA DEVICE, INC. : http://www.iodata.com/ -// Submitted by Yuji Minagawa -iobb.net - -// Jelastic, Inc. : https://jelastic.com/ -// Submitted by Ihor Kolodyuk -mel.cloudlets.com.au -cloud.interhostsolutions.be -mycloud.by -alp1.ae.flow.ch -appengine.flow.ch -es-1.axarnet.cloud -diadem.cloud -vip.jelastic.cloud -jele.cloud -it1.eur.aruba.jenv-aruba.cloud -it1.jenv-aruba.cloud -keliweb.cloud -cs.keliweb.cloud -oxa.cloud -tn.oxa.cloud -uk.oxa.cloud -primetel.cloud -uk.primetel.cloud -ca.reclaim.cloud -uk.reclaim.cloud -us.reclaim.cloud -ch.trendhosting.cloud -de.trendhosting.cloud -jele.club -amscompute.com -dopaas.com -paas.hosted-by-previder.com -rag-cloud.hosteur.com -rag-cloud-ch.hosteur.com -jcloud.ik-server.com -jcloud-ver-jpc.ik-server.com -demo.jelastic.com -kilatiron.com -paas.massivegrid.com -jed.wafaicloud.com -lon.wafaicloud.com -ryd.wafaicloud.com -j.scaleforce.com.cy -jelastic.dogado.eu -fi.cloudplatform.fi -demo.datacenter.fi -paas.datacenter.fi -jele.host -mircloud.host -paas.beebyte.io -sekd1.beebyteapp.io -jele.io -cloud-fr1.unispace.io -jc.neen.it -cloud.jelastic.open.tim.it -jcloud.kz -upaas.kazteleport.kz -cloudjiffy.net -fra1-de.cloudjiffy.net -west1-us.cloudjiffy.net -jls-sto1.elastx.net -jls-sto2.elastx.net -jls-sto3.elastx.net -faststacks.net -fr-1.paas.massivegrid.net -lon-1.paas.massivegrid.net -lon-2.paas.massivegrid.net -ny-1.paas.massivegrid.net -ny-2.paas.massivegrid.net -sg-1.paas.massivegrid.net -jelastic.saveincloud.net -nordeste-idc.saveincloud.net -j.scaleforce.net -jelastic.tsukaeru.net -sdscloud.pl -unicloud.pl -mircloud.ru -jelastic.regruhosting.ru -enscaled.sg -jele.site -jelastic.team -orangecloud.tn -j.layershift.co.uk -phx.enscaled.us -mircloud.us - -// Jino : https://www.jino.ru -// Submitted by Sergey Ulyashin -myjino.ru -*.hosting.myjino.ru -*.landing.myjino.ru -*.spectrum.myjino.ru -*.vps.myjino.ru - -// Jotelulu S.L. : https://jotelulu.com -// Submitted by Daniel Fariña -jotelulu.cloud - -// Joyent : https://www.joyent.com/ -// Submitted by Brian Bennett -*.triton.zone -*.cns.joyent.com - -// JS.ORG : http://dns.js.org -// Submitted by Stefan Keim -js.org - -// KaasHosting : http://www.kaashosting.nl/ -// Submitted by Wouter Bakker -kaas.gg -khplay.nl - -// Kakao : https://www.kakaocorp.com/ -// Submitted by JaeYoong Lee -ktistory.com - -// Kapsi : https://kapsi.fi -// Submitted by Tomi Juntunen -kapsi.fi - -// Keyweb AG : https://www.keyweb.de -// Submitted by Martin Dannehl -keymachine.de - -// KingHost : https://king.host -// Submitted by Felipe Keller Braz -kinghost.net -uni5.net - -// KnightPoint Systems, LLC : http://www.knightpoint.com/ -// Submitted by Roy Keene -knightpoint.systems - -// KoobinEvent, SL: https://www.koobin.com -// Submitted by Iván Oliva -koobin.events - -// KUROKU LTD : https://kuroku.ltd/ -// Submitted by DisposaBoy -oya.to - -// Katholieke Universiteit Leuven: https://www.kuleuven.be -// Submitted by Abuse KU Leuven -kuleuven.cloud -ezproxy.kuleuven.be - -// .KRD : http://nic.krd/data/krd/Registration%20Policy.pdf -co.krd -edu.krd - -// Krellian Ltd. : https://krellian.com -// Submitted by Ben Francis -krellian.net -webthings.io - -// LCube - Professional hosting e.K. : https://www.lcube-webhosting.de -// Submitted by Lars Laehn -git-repos.de -lcube-server.de -svn-repos.de - -// Leadpages : https://www.leadpages.net -// Submitted by Greg Dallavalle -leadpages.co -lpages.co -lpusercontent.com - -// Lelux.fi : https://lelux.fi/ -// Submitted by Lelux Admin -lelux.site - -// Lifetime Hosting : https://Lifetime.Hosting/ -// Submitted by Mike Fillator -co.business -co.education -co.events -co.financial -co.network -co.place -co.technology - -// Lightmaker Property Manager, Inc. : https://app.lmpm.com/ -// Submitted by Greg Holland -app.lmpm.com - -// linkyard ldt: https://www.linkyard.ch/ -// Submitted by Mario Siegenthaler -linkyard.cloud -linkyard-cloud.ch - -// Linode : https://linode.com -// Submitted by -members.linode.com -*.nodebalancer.linode.com -*.linodeobjects.com -ip.linodeusercontent.com - -// LiquidNet Ltd : http://www.liquidnetlimited.com/ -// Submitted by Victor Velchev -we.bs - -// Localcert : https://localcert.dev -// Submitted by Lann Martin -*.user.localcert.dev - -// localzone.xyz -// Submitted by Kenny Niehage -localzone.xyz - -// Log'in Line : https://www.loginline.com/ -// Submitted by Rémi Mach -loginline.app -loginline.dev -loginline.io -loginline.services -loginline.site - -// Lokalized : https://lokalized.nl -// Submitted by Noah Taheij -servers.run - -// Lõhmus Family, The -// Submitted by Heiki Lõhmus -lohmus.me - -// LubMAN UMCS Sp. z o.o : https://lubman.pl/ -// Submitted by Ireneusz Maliszewski -krasnik.pl -leczna.pl -lubartow.pl -lublin.pl -poniatowa.pl -swidnik.pl - -// Lug.org.uk : https://lug.org.uk -// Submitted by Jon Spriggs -glug.org.uk -lug.org.uk -lugs.org.uk - -// Lukanet Ltd : https://lukanet.com -// Submitted by Anton Avramov -barsy.bg -barsy.co.uk -barsyonline.co.uk -barsycenter.com -barsyonline.com -barsy.club -barsy.de -barsy.eu -barsy.in -barsy.info -barsy.io -barsy.me -barsy.menu -barsy.mobi -barsy.net -barsy.online -barsy.org -barsy.pro -barsy.pub -barsy.ro -barsy.shop -barsy.site -barsy.support -barsy.uk - -// Magento Commerce -// Submitted by Damien Tournoud -*.magentosite.cloud - -// May First - People Link : https://mayfirst.org/ -// Submitted by Jamie McClelland -mayfirst.info -mayfirst.org - -// Mail.Ru Group : https://hb.cldmail.ru -// Submitted by Ilya Zaretskiy -hb.cldmail.ru - -// Mail Transfer Platform : https://www.neupeer.com -// Submitted by Li Hui -cn.vu - -// Maze Play: https://www.mazeplay.com -// Submitted by Adam Humpherys -mazeplay.com - -// mcpe.me : https://mcpe.me -// Submitted by Noa Heyl -mcpe.me - -// McHost : https://mchost.ru -// Submitted by Evgeniy Subbotin -mcdir.me -mcdir.ru -mcpre.ru -vps.mcdir.ru - -// Mediatech : https://mediatech.by -// Submitted by Evgeniy Kozhuhovskiy -mediatech.by -mediatech.dev - -// Medicom Health : https://medicomhealth.com -// Submitted by Michael Olson -hra.health - -// Memset hosting : https://www.memset.com -// Submitted by Tom Whitwell -miniserver.com -memset.net - -// Messerli Informatik AG : https://www.messerli.ch/ -// Submitted by Ruben Schmidmeister -messerli.app - -// MetaCentrum, CESNET z.s.p.o. : https://www.metacentrum.cz/en/ -// Submitted by Zdeněk Šustr -*.cloud.metacentrum.cz -custom.metacentrum.cz - -// MetaCentrum, CESNET z.s.p.o. : https://www.metacentrum.cz/en/ -// Submitted by Radim Janča -flt.cloud.muni.cz -usr.cloud.muni.cz - -// Meteor Development Group : https://www.meteor.com/hosting -// Submitted by Pierre Carrier -meteorapp.com -eu.meteorapp.com - -// Michau Enterprises Limited : http://www.co.pl/ -co.pl - -// Microsoft Corporation : http://microsoft.com -// Submitted by Public Suffix List Admin -*.azurecontainer.io -azurewebsites.net -azure-mobile.net -cloudapp.net -azurestaticapps.net -1.azurestaticapps.net -2.azurestaticapps.net -3.azurestaticapps.net -4.azurestaticapps.net -5.azurestaticapps.net -6.azurestaticapps.net -7.azurestaticapps.net -centralus.azurestaticapps.net -eastasia.azurestaticapps.net -eastus2.azurestaticapps.net -westeurope.azurestaticapps.net -westus2.azurestaticapps.net - -// minion.systems : http://minion.systems -// Submitted by Robert Böttinger -csx.cc - -// Mintere : https://mintere.com/ -// Submitted by Ben Aubin -mintere.site - -// MobileEducation, LLC : https://joinforte.com -// Submitted by Grayson Martin -forte.id - -// Mozilla Corporation : https://mozilla.com -// Submitted by Ben Francis -mozilla-iot.org - -// Mozilla Foundation : https://mozilla.org/ -// Submitted by glob -bmoattachments.org - -// MSK-IX : https://www.msk-ix.ru/ -// Submitted by Khannanov Roman -net.ru -org.ru -pp.ru - -// Mythic Beasts : https://www.mythic-beasts.com -// Submitted by Paul Cammish -hostedpi.com -customer.mythic-beasts.com -caracal.mythic-beasts.com -fentiger.mythic-beasts.com -lynx.mythic-beasts.com -ocelot.mythic-beasts.com -oncilla.mythic-beasts.com -onza.mythic-beasts.com -sphinx.mythic-beasts.com -vs.mythic-beasts.com -x.mythic-beasts.com -yali.mythic-beasts.com -cust.retrosnub.co.uk - -// Nabu Casa : https://www.nabucasa.com -// Submitted by Paulus Schoutsen -ui.nabu.casa - -// Net at Work Gmbh : https://www.netatwork.de -// Submitted by Jan Jaeschke -cloud.nospamproxy.com - -// Netlify : https://www.netlify.com -// Submitted by Jessica Parsons -netlify.app - -// Neustar Inc. -// Submitted by Trung Tran -4u.com - -// ngrok : https://ngrok.com/ -// Submitted by Alan Shreve -ngrok.app -ngrok-free.app -ngrok.dev -ngrok-free.dev -ngrok.io -ap.ngrok.io -au.ngrok.io -eu.ngrok.io -in.ngrok.io -jp.ngrok.io -sa.ngrok.io -us.ngrok.io -ngrok.pizza - -// Nicolaus Copernicus University in Torun - MSK TORMAN (https://www.man.torun.pl) -torun.pl - -// Nimbus Hosting Ltd. : https://www.nimbushosting.co.uk/ -// Submitted by Nicholas Ford -nh-serv.co.uk - -// NFSN, Inc. : https://www.NearlyFreeSpeech.NET/ -// Submitted by Jeff Wheelhouse -nfshost.com - -// Noop : https://noop.app -// Submitted by Nathaniel Schweinberg -*.developer.app -noop.app - -// Northflank Ltd. : https://northflank.com/ -// Submitted by Marco Suter -*.northflank.app -*.build.run -*.code.run -*.database.run -*.migration.run - -// Noticeable : https://noticeable.io -// Submitted by Laurent Pellegrino -noticeable.news - -// Now-DNS : https://now-dns.com -// Submitted by Steve Russell -dnsking.ch -mypi.co -n4t.co -001www.com -ddnslive.com -myiphost.com -forumz.info -16-b.it -32-b.it -64-b.it -soundcast.me -tcp4.me -dnsup.net -hicam.net -now-dns.net -ownip.net -vpndns.net -dynserv.org -now-dns.org -x443.pw -now-dns.top -ntdll.top -freeddns.us -crafting.xyz -zapto.xyz - -// nsupdate.info : https://www.nsupdate.info/ -// Submitted by Thomas Waldmann -nsupdate.info -nerdpol.ovh - -// No-IP.com : https://noip.com/ -// Submitted by Deven Reza -blogsyte.com -brasilia.me -cable-modem.org -ciscofreak.com -collegefan.org -couchpotatofries.org -damnserver.com -ddns.me -ditchyourip.com -dnsfor.me -dnsiskinky.com -dvrcam.info -dynns.com -eating-organic.net -fantasyleague.cc -geekgalaxy.com -golffan.us -health-carereform.com -homesecuritymac.com -homesecuritypc.com -hopto.me -ilovecollege.info -loginto.me -mlbfan.org -mmafan.biz -myactivedirectory.com -mydissent.net -myeffect.net -mymediapc.net -mypsx.net -mysecuritycamera.com -mysecuritycamera.net -mysecuritycamera.org -net-freaks.com -nflfan.org -nhlfan.net -no-ip.ca -no-ip.co.uk -no-ip.net -noip.us -onthewifi.com -pgafan.net -point2this.com -pointto.us -privatizehealthinsurance.net -quicksytes.com -read-books.org -securitytactics.com -serveexchange.com -servehumour.com -servep2p.com -servesarcasm.com -stufftoread.com -ufcfan.org -unusualperson.com -workisboring.com -3utilities.com -bounceme.net -ddns.net -ddnsking.com -gotdns.ch -hopto.org -myftp.biz -myftp.org -myvnc.com -no-ip.biz -no-ip.info -no-ip.org -noip.me -redirectme.net -servebeer.com -serveblog.net -servecounterstrike.com -serveftp.com -servegame.com -servehalflife.com -servehttp.com -serveirc.com -serveminecraft.net -servemp3.com -servepics.com -servequake.com -sytes.net -webhop.me -zapto.org - -// NodeArt : https://nodeart.io -// Submitted by Konstantin Nosov -stage.nodeart.io - -// Nucleos Inc. : https://nucleos.com -// Submitted by Piotr Zduniak -pcloud.host - -// NYC.mn : http://www.information.nyc.mn -// Submitted by Matthew Brown -nyc.mn - -// Observable, Inc. : https://observablehq.com -// Submitted by Mike Bostock -static.observableusercontent.com - -// Octopodal Solutions, LLC. : https://ulterius.io/ -// Submitted by Andrew Sampson -cya.gg - -// OMG.LOL : -// Submitted by Adam Newbold -omg.lol - -// Omnibond Systems, LLC. : https://www.omnibond.com -// Submitted by Cole Estep -cloudycluster.net - -// OmniWe Limited: https://omniwe.com -// Submitted by Vicary Archangel -omniwe.site - -// One.com: https://www.one.com/ -// Submitted by Jacob Bunk Nielsen -123hjemmeside.dk -123hjemmeside.no -123homepage.it -123kotisivu.fi -123minsida.se -123miweb.es -123paginaweb.pt -123sait.ru -123siteweb.fr -123webseite.at -123webseite.de -123website.be -123website.ch -123website.lu -123website.nl -service.one -simplesite.com -simplesite.com.br -simplesite.gr -simplesite.pl - -// One Fold Media : http://www.onefoldmedia.com/ -// Submitted by Eddie Jones -nid.io - -// Open Social : https://www.getopensocial.com/ -// Submitted by Alexander Varwijk -opensocial.site - -// OpenCraft GmbH : http://opencraft.com/ -// Submitted by Sven Marnach -opencraft.hosting - -// OpenResearch GmbH: https://openresearch.com/ -// Submitted by Philipp Schmid -orsites.com - -// Opera Software, A.S.A. -// Submitted by Yngve Pettersen -operaunite.com - -// Orange : https://www.orange.com -// Submitted by Alexandre Linte -tech.orange - -// Oursky Limited : https://authgear.com/, https://skygear.io/ -// Submitted by Authgear Team , Skygear Developer -authgear-staging.com -authgearapps.com -skygearapp.com - -// OutSystems -// Submitted by Duarte Santos -outsystemscloud.com - -// OVHcloud: https://ovhcloud.com -// Submitted by Vincent Cassé -*.webpaas.ovh.net -*.hosting.ovh.net - -// OwnProvider GmbH: http://www.ownprovider.com -// Submitted by Jan Moennich -ownprovider.com -own.pm - -// OwO : https://whats-th.is/ -// Submitted by Dean Sheather -*.owo.codes - -// OX : http://www.ox.rs -// Submitted by Adam Grand -ox.rs - -// oy.lc -// Submitted by Charly Coste -oy.lc - -// Pagefog : https://pagefog.com/ -// Submitted by Derek Myers -pgfog.com - -// Pagefront : https://www.pagefronthq.com/ -// Submitted by Jason Kriss -pagefrontapp.com - -// PageXL : https://pagexl.com -// Submitted by Yann Guichard -pagexl.com - -// Paywhirl, Inc : https://paywhirl.com/ -// Submitted by Daniel Netzer -*.paywhirl.com - -// pcarrier.ca Software Inc: https://pcarrier.ca/ -// Submitted by Pierre Carrier -bar0.net -bar1.net -bar2.net -rdv.to - -// .pl domains (grandfathered) -art.pl -gliwice.pl -krakow.pl -poznan.pl -wroc.pl -zakopane.pl - -// Pantheon Systems, Inc. : https://pantheon.io/ -// Submitted by Gary Dylina -pantheonsite.io -gotpantheon.com - -// Peplink | Pepwave : http://peplink.com/ -// Submitted by Steve Leung -mypep.link - -// Perspecta : https://perspecta.com/ -// Submitted by Kenneth Van Alstyne -perspecta.cloud - -// PE Ulyanov Kirill Sergeevich : https://airy.host -// Submitted by Kirill Ulyanov -lk3.ru - -// Planet-Work : https://www.planet-work.com/ -// Submitted by Frédéric VANNIÈRE -on-web.fr - -// Platform.sh : https://platform.sh -// Submitted by Nikola Kotur -bc.platform.sh -ent.platform.sh -eu.platform.sh -us.platform.sh -*.platformsh.site -*.tst.site - -// Platter: https://platter.dev -// Submitted by Patrick Flor -platter-app.com -platter-app.dev -platterp.us - -// Plesk : https://www.plesk.com/ -// Submitted by Anton Akhtyamov -pdns.page -plesk.page -pleskns.com - -// Port53 : https://port53.io/ -// Submitted by Maximilian Schieder -dyn53.io - -// Porter : https://porter.run/ -// Submitted by Rudraksh MK -onporter.run - -// Positive Codes Technology Company : http://co.bn/faq.html -// Submitted by Zulfais -co.bn - -// Postman, Inc : https://postman.com -// Submitted by Rahul Dhawan -postman-echo.com -pstmn.io -mock.pstmn.io -httpbin.org - -//prequalifyme.today : https://prequalifyme.today -//Submitted by DeepakTiwari deepak@ivylead.io -prequalifyme.today - -// prgmr.com : https://prgmr.com/ -// Submitted by Sarah Newman -xen.prgmr.com - -// priv.at : http://www.nic.priv.at/ -// Submitted by registry -priv.at - -// privacytools.io : https://www.privacytools.io/ -// Submitted by Jonah Aragon -prvcy.page - -// Protocol Labs : https://protocol.ai/ -// Submitted by Michael Burns -*.dweb.link - -// Protonet GmbH : http://protonet.io -// Submitted by Martin Meier -protonet.io - -// Publication Presse Communication SARL : https://ppcom.fr -// Submitted by Yaacov Akiba Slama -chirurgiens-dentistes-en-france.fr -byen.site - -// pubtls.org: https://www.pubtls.org -// Submitted by Kor Nielsen -pubtls.org - -// PythonAnywhere LLP: https://www.pythonanywhere.com -// Submitted by Giles Thomas -pythonanywhere.com -eu.pythonanywhere.com - -// QOTO, Org. -// Submitted by Jeffrey Phillips Freeman -qoto.io - -// Qualifio : https://qualifio.com/ -// Submitted by Xavier De Cock -qualifioapp.com - -// Quality Unit: https://qualityunit.com -// Submitted by Vasyl Tsalko -ladesk.com - -// QuickBackend: https://www.quickbackend.com -// Submitted by Dani Biro -qbuser.com - -// Rad Web Hosting: https://radwebhosting.com -// Submitted by Scott Claeys -cloudsite.builders - -// Redgate Software: https://red-gate.com -// Submitted by Andrew Farries -instances.spawn.cc - -// Redstar Consultants : https://www.redstarconsultants.com/ -// Submitted by Jons Slemmer -instantcloud.cn - -// Russian Academy of Sciences -// Submitted by Tech Support -ras.ru - -// QA2 -// Submitted by Daniel Dent (https://www.danieldent.com/) -qa2.com - -// QCX -// Submitted by Cassandra Beelen -qcx.io -*.sys.qcx.io - -// QNAP System Inc : https://www.qnap.com -// Submitted by Nick Chang -dev-myqnapcloud.com -alpha-myqnapcloud.com -myqnapcloud.com - -// Quip : https://quip.com -// Submitted by Patrick Linehan -*.quipelements.com - -// Qutheory LLC : http://qutheory.io -// Submitted by Jonas Schwartz -vapor.cloud -vaporcloud.io - -// Rackmaze LLC : https://www.rackmaze.com -// Submitted by Kirill Pertsev -rackmaze.com -rackmaze.net - -// Rakuten Games, Inc : https://dev.viberplay.io -// Submitted by Joshua Zhang -g.vbrplsbx.io - -// Rancher Labs, Inc : https://rancher.com -// Submitted by Vincent Fiduccia -*.on-k3s.io -*.on-rancher.cloud -*.on-rio.io - -// Read The Docs, Inc : https://www.readthedocs.org -// Submitted by David Fischer -readthedocs.io - -// Red Hat, Inc. OpenShift : https://openshift.redhat.com/ -// Submitted by Tim Kramer -rhcloud.com - -// Render : https://render.com -// Submitted by Anurag Goel -app.render.com -onrender.com - -// Repl.it : https://repl.it -// Submitted by Lincoln Bergeson -firewalledreplit.co -id.firewalledreplit.co -repl.co -id.repl.co -repl.run - -// Resin.io : https://resin.io -// Submitted by Tim Perry -resindevice.io -devices.resinstaging.io - -// RethinkDB : https://www.rethinkdb.com/ -// Submitted by Chris Kastorff -hzc.io - -// Revitalised Limited : http://www.revitalised.co.uk -// Submitted by Jack Price -wellbeingzone.eu -wellbeingzone.co.uk - -// Rico Developments Limited : https://adimo.co -// Submitted by Colin Brown -adimo.co.uk - -// Riseup Networks : https://riseup.net -// Submitted by Micah Anderson -itcouldbewor.se - -// Rochester Institute of Technology : http://www.rit.edu/ -// Submitted by Jennifer Herting -git-pages.rit.edu - -// Rocky Enterprise Software Foundation : https://resf.org -// Submitted by Neil Hanlon -rocky.page - -// Rusnames Limited: http://rusnames.ru/ -// Submitted by Sergey Zotov -биз.рус -ком.рус -крым.рус -мир.рус -мск.рус -орг.рус -самара.рус -сочи.рус -спб.рус -я.рус - -// SAKURA Internet Inc. : https://www.sakura.ad.jp/ -// Submitted by Internet Service Department -180r.com -dojin.com -sakuratan.com -sakuraweb.com -x0.com -2-d.jp -bona.jp -crap.jp -daynight.jp -eek.jp -flop.jp -halfmoon.jp -jeez.jp -matrix.jp -mimoza.jp -ivory.ne.jp -mail-box.ne.jp -mints.ne.jp -mokuren.ne.jp -opal.ne.jp -sakura.ne.jp -sumomo.ne.jp -topaz.ne.jp -netgamers.jp -nyanta.jp -o0o0.jp -rdy.jp -rgr.jp -rulez.jp -s3.isk01.sakurastorage.jp -s3.isk02.sakurastorage.jp -saloon.jp -sblo.jp -skr.jp -tank.jp -uh-oh.jp -undo.jp -rs.webaccel.jp -user.webaccel.jp -websozai.jp -xii.jp -squares.net -jpn.org -kirara.st -x0.to -from.tv -sakura.tv - -// Salesforce.com, Inc. https://salesforce.com/ -// Submitted by Michael Biven -*.builder.code.com -*.dev-builder.code.com -*.stg-builder.code.com - -// Sandstorm Development Group, Inc. : https://sandcats.io/ -// Submitted by Asheesh Laroia -sandcats.io - -// SBE network solutions GmbH : https://www.sbe.de/ -// Submitted by Norman Meilick -logoip.de -logoip.com - -// Scaleway : https://www.scaleway.com/ -// Submitted by Rémy Léone -fr-par-1.baremetal.scw.cloud -fr-par-2.baremetal.scw.cloud -nl-ams-1.baremetal.scw.cloud -fnc.fr-par.scw.cloud -functions.fnc.fr-par.scw.cloud -k8s.fr-par.scw.cloud -nodes.k8s.fr-par.scw.cloud -s3.fr-par.scw.cloud -s3-website.fr-par.scw.cloud -whm.fr-par.scw.cloud -priv.instances.scw.cloud -pub.instances.scw.cloud -k8s.scw.cloud -k8s.nl-ams.scw.cloud -nodes.k8s.nl-ams.scw.cloud -s3.nl-ams.scw.cloud -s3-website.nl-ams.scw.cloud -whm.nl-ams.scw.cloud -k8s.pl-waw.scw.cloud -nodes.k8s.pl-waw.scw.cloud -s3.pl-waw.scw.cloud -s3-website.pl-waw.scw.cloud -scalebook.scw.cloud -smartlabeling.scw.cloud -dedibox.fr - -// schokokeks.org GbR : https://schokokeks.org/ -// Submitted by Hanno Böck -schokokeks.net - -// Scottish Government: https://www.gov.scot -// Submitted by Martin Ellis -gov.scot -service.gov.scot - -// Scry Security : http://www.scrysec.com -// Submitted by Shante Adam -scrysec.com - -// Securepoint GmbH : https://www.securepoint.de -// Submitted by Erik Anders -firewall-gateway.com -firewall-gateway.de -my-gateway.de -my-router.de -spdns.de -spdns.eu -firewall-gateway.net -my-firewall.org -myfirewall.org -spdns.org - -// Seidat : https://www.seidat.com -// Submitted by Artem Kondratev -seidat.net - -// Sellfy : https://sellfy.com -// Submitted by Yuriy Romadin -sellfy.store - -// Senseering GmbH : https://www.senseering.de -// Submitted by Felix Mönckemeyer -senseering.net - -// Sendmsg: https://www.sendmsg.co.il -// Submitted by Assaf Stern -minisite.ms - -// Service Magnet : https://myservicemagnet.com -// Submitted by Dave Sanders -magnet.page - -// Service Online LLC : http://drs.ua/ -// Submitted by Serhii Bulakh -biz.ua -co.ua -pp.ua - -// Shift Crypto AG : https://shiftcrypto.ch -// Submitted by alex -shiftcrypto.dev -shiftcrypto.io - -// ShiftEdit : https://shiftedit.net/ -// Submitted by Adam Jimenez -shiftedit.io - -// Shopblocks : http://www.shopblocks.com/ -// Submitted by Alex Bowers -myshopblocks.com - -// Shopify : https://www.shopify.com -// Submitted by Alex Richter -myshopify.com - -// Shopit : https://www.shopitcommerce.com/ -// Submitted by Craig McMahon -shopitsite.com - -// shopware AG : https://shopware.com -// Submitted by Jens Küper -shopware.store - -// Siemens Mobility GmbH -// Submitted by Oliver Graebner -mo-siemens.io - -// SinaAppEngine : http://sae.sina.com.cn/ -// Submitted by SinaAppEngine -1kapp.com -appchizi.com -applinzi.com -sinaapp.com -vipsinaapp.com - -// Siteleaf : https://www.siteleaf.com/ -// Submitted by Skylar Challand -siteleaf.net - -// Skyhat : http://www.skyhat.io -// Submitted by Shante Adam -bounty-full.com -alpha.bounty-full.com -beta.bounty-full.com - -// Smallregistry by Promopixel SARL: https://www.smallregistry.net -// Former AFNIC's SLDs -// Submitted by Jérôme Lipowicz -aeroport.fr -avocat.fr -chambagri.fr -chirurgiens-dentistes.fr -experts-comptables.fr -medecin.fr -notaires.fr -pharmacien.fr -port.fr -veterinaire.fr - -// Small Technology Foundation : https://small-tech.org -// Submitted by Aral Balkan -small-web.org - -// Smoove.io : https://www.smoove.io/ -// Submitted by Dan Kozak -vp4.me - -// Snowflake Inc : https://www.snowflake.com/ -// Submitted by Faith Olapade -snowflake.app -privatelink.snowflake.app -streamlit.app -streamlitapp.com - -// Snowplow Analytics : https://snowplowanalytics.com/ -// Submitted by Ian Streeter -try-snowplow.com - -// SourceHut : https://sourcehut.org -// Submitted by Drew DeVault -srht.site - -// Stackhero : https://www.stackhero.io -// Submitted by Adrien Gillon -stackhero-network.com - -// Staclar : https://staclar.com -// Submitted by Q Misell -musician.io -// Submitted by Matthias Merkel -novecore.site - -// staticland : https://static.land -// Submitted by Seth Vincent -static.land -dev.static.land -sites.static.land - -// Storebase : https://www.storebase.io -// Submitted by Tony Schirmer -storebase.store - -// Strategic System Consulting (eApps Hosting): https://www.eapps.com/ -// Submitted by Alex Oancea -vps-host.net -atl.jelastic.vps-host.net -njs.jelastic.vps-host.net -ric.jelastic.vps-host.net - -// Sony Interactive Entertainment LLC : https://sie.com/ -// Submitted by David Coles -playstation-cloud.com - -// SourceLair PC : https://www.sourcelair.com -// Submitted by Antonis Kalipetis -apps.lair.io -*.stolos.io - -// SpaceKit : https://www.spacekit.io/ -// Submitted by Reza Akhavan -spacekit.io - -// SpeedPartner GmbH: https://www.speedpartner.de/ -// Submitted by Stefan Neufeind -customer.speedpartner.de - -// Spreadshop (sprd.net AG) : https://www.spreadshop.com/ -// Submitted by Martin Breest -myspreadshop.at -myspreadshop.com.au -myspreadshop.be -myspreadshop.ca -myspreadshop.ch -myspreadshop.com -myspreadshop.de -myspreadshop.dk -myspreadshop.es -myspreadshop.fi -myspreadshop.fr -myspreadshop.ie -myspreadshop.it -myspreadshop.net -myspreadshop.nl -myspreadshop.no -myspreadshop.pl -myspreadshop.se -myspreadshop.co.uk - -// Standard Library : https://stdlib.com -// Submitted by Jacob Lee -api.stdlib.com - -// Storipress : https://storipress.com -// Submitted by Benno Liu -storipress.app - -// Storj Labs Inc. : https://storj.io/ -// Submitted by Philip Hutchins -storj.farm - -// Studenten Net Twente : http://www.snt.utwente.nl/ -// Submitted by Silke Hofstra -utwente.io - -// Student-Run Computing Facility : https://www.srcf.net/ -// Submitted by Edwin Balani -soc.srcf.net -user.srcf.net - -// Sub 6 Limited: http://www.sub6.com -// Submitted by Dan Miller -temp-dns.com - -// Supabase : https://supabase.io -// Submitted by Inian Parameshwaran -supabase.co -supabase.in -supabase.net -su.paba.se - -// Symfony, SAS : https://symfony.com/ -// Submitted by Fabien Potencier -*.s5y.io -*.sensiosite.cloud - -// Syncloud : https://syncloud.org -// Submitted by Boris Rybalkin -syncloud.it - -// Synology, Inc. : https://www.synology.com/ -// Submitted by Rony Weng -dscloud.biz -direct.quickconnect.cn -dsmynas.com -familyds.com -diskstation.me -dscloud.me -i234.me -myds.me -synology.me -dscloud.mobi -dsmynas.net -familyds.net -dsmynas.org -familyds.org -vpnplus.to -direct.quickconnect.to - -// Tabit Technologies Ltd. : https://tabit.cloud/ -// Submitted by Oren Agiv -tabitorder.co.il -mytabit.co.il -mytabit.com - -// TAIFUN Software AG : http://taifun-software.de -// Submitted by Bjoern Henke -taifun-dns.de - -// Tailscale Inc. : https://www.tailscale.com -// Submitted by David Anderson -beta.tailscale.net -ts.net - -// TASK geographical domains (www.task.gda.pl/uslugi/dns) -gda.pl -gdansk.pl -gdynia.pl -med.pl -sopot.pl - -// team.blue https://team.blue -// Submitted by Cedric Dubois -site.tb-hosting.com - -// Teckids e.V. : https://www.teckids.org -// Submitted by Dominik George -edugit.io -s3.teckids.org - -// Telebit : https://telebit.cloud -// Submitted by AJ ONeal -telebit.app -telebit.io -*.telebit.xyz - -// Thingdust AG : https://thingdust.com/ -// Submitted by Adrian Imboden -*.firenet.ch -*.svc.firenet.ch -reservd.com -thingdustdata.com -cust.dev.thingdust.io -cust.disrec.thingdust.io -cust.prod.thingdust.io -cust.testing.thingdust.io -reservd.dev.thingdust.io -reservd.disrec.thingdust.io -reservd.testing.thingdust.io - -// ticket i/O GmbH : https://ticket.io -// Submitted by Christian Franke -tickets.io - -// Tlon.io : https://tlon.io -// Submitted by Mark Staarink -arvo.network -azimuth.network -tlon.network - -// Tor Project, Inc. : https://torproject.org -// Submitted by Antoine Beaupré -bloxcms.com -townnews-staging.com - -// TrafficPlex GmbH : https://www.trafficplex.de/ -// Submitted by Phillipp Röll -12hp.at -2ix.at -4lima.at -lima-city.at -12hp.ch -2ix.ch -4lima.ch -lima-city.ch -trafficplex.cloud -de.cool -12hp.de -2ix.de -4lima.de -lima-city.de -1337.pictures -clan.rip -lima-city.rocks -webspace.rocks -lima.zone - -// TransIP : https://www.transip.nl -// Submitted by Rory Breuk -*.transurl.be -*.transurl.eu -*.transurl.nl - -// TransIP: https://www.transip.nl -// Submitted by Cedric Dubois -site.transip.me - -// TuxFamily : http://tuxfamily.org -// Submitted by TuxFamily administrators -tuxfamily.org - -// TwoDNS : https://www.twodns.de/ -// Submitted by TwoDNS-Support -dd-dns.de -diskstation.eu -diskstation.org -dray-dns.de -draydns.de -dyn-vpn.de -dynvpn.de -mein-vigor.de -my-vigor.de -my-wan.de -syno-ds.de -synology-diskstation.de -synology-ds.de - -// Typedream : https://typedream.com -// Submitted by Putri Karunia -typedream.app - -// Typeform : https://www.typeform.com -// Submitted by Sergi Ferriz -pro.typeform.com - -// Uberspace : https://uberspace.de -// Submitted by Moritz Werner -uber.space -*.uberspace.de - -// UDR Limited : http://www.udr.hk.com -// Submitted by registry -hk.com -hk.org -ltd.hk -inc.hk - -// UK Intis Telecom LTD : https://it.com -// Submitted by ITComdomains -it.com - -// UNIVERSAL DOMAIN REGISTRY : https://www.udr.org.yt/ -// see also: whois -h whois.udr.org.yt help -// Submitted by Atanunu Igbunuroghene -name.pm -sch.tf -biz.wf -sch.wf -org.yt - -// United Gameserver GmbH : https://united-gameserver.de -// Submitted by Stefan Schwarz -virtualuser.de -virtual-user.de - -// Upli : https://upli.io -// Submitted by Lenny Bakkalian -upli.io - -// urown.net : https://urown.net -// Submitted by Hostmaster -urown.cloud -dnsupdate.info - -// .US -// Submitted by Ed Moore -lib.de.us - -// VeryPositive SIA : http://very.lv -// Submitted by Danko Aleksejevs -2038.io - -// Vercel, Inc : https://vercel.com/ -// Submitted by Connor Davis -vercel.app -vercel.dev -now.sh - -// Viprinet Europe GmbH : http://www.viprinet.com -// Submitted by Simon Kissel -router.management - -// Virtual-Info : https://www.virtual-info.info/ -// Submitted by Adnan RIHAN -v-info.info - -// Voorloper.com: https://voorloper.com -// Submitted by Nathan van Bakel -voorloper.cloud - -// Voxel.sh DNS : https://voxel.sh/dns/ -// Submitted by Mia Rehlinger -neko.am -nyaa.am -be.ax -cat.ax -es.ax -eu.ax -gg.ax -mc.ax -us.ax -xy.ax -nl.ci -xx.gl -app.gp -blog.gt -de.gt -to.gt -be.gy -cc.hn -blog.kg -io.kg -jp.kg -tv.kg -uk.kg -us.kg -de.ls -at.md -de.md -jp.md -to.md -indie.porn -vxl.sh -ch.tc -me.tc -we.tc -nyan.to -at.vg -blog.vu -dev.vu -me.vu - -// V.UA Domain Administrator : https://domain.v.ua/ -// Submitted by Serhii Rostilo -v.ua - -// Vultr Objects : https://www.vultr.com/products/object-storage/ -// Submitted by Niels Maumenee -*.vultrobjects.com - -// Waffle Computer Inc., Ltd. : https://docs.waffleinfo.com -// Submitted by Masayuki Note -wafflecell.com - -// WebHare bv: https://www.webhare.com/ -// Submitted by Arnold Hendriks -*.webhare.dev - -// WebHotelier Technologies Ltd: https://www.webhotelier.net/ -// Submitted by Apostolos Tsakpinis -reserve-online.net -reserve-online.com -bookonline.app -hotelwithflight.com - -// WeDeploy by Liferay, Inc. : https://www.wedeploy.com -// Submitted by Henrique Vicente -wedeploy.io -wedeploy.me -wedeploy.sh - -// Western Digital Technologies, Inc : https://www.wdc.com -// Submitted by Jung Jin -remotewd.com - -// WIARD Enterprises : https://wiardweb.com -// Submitted by Kidd Hustle -pages.wiardweb.com - -// Wikimedia Labs : https://wikitech.wikimedia.org -// Submitted by Arturo Borrero Gonzalez -wmflabs.org -toolforge.org -wmcloud.org - -// WISP : https://wisp.gg -// Submitted by Stepan Fedotov -panel.gg -daemon.panel.gg - -// Wizard Zines : https://wizardzines.com -// Submitted by Julia Evans -messwithdns.com - -// WoltLab GmbH : https://www.woltlab.com -// Submitted by Tim Düsterhus -woltlab-demo.com -myforum.community -community-pro.de -diskussionsbereich.de -community-pro.net -meinforum.net - -// Woods Valldata : https://www.woodsvalldata.co.uk/ -// Submitted by Chris Whittle -affinitylottery.org.uk -raffleentry.org.uk -weeklylottery.org.uk - -// WP Engine : https://wpengine.com/ -// Submitted by Michael Smith -// Submitted by Brandon DuRette -wpenginepowered.com -js.wpenginepowered.com - -// Wix.com, Inc. : https://www.wix.com -// Submitted by Shahar Talmi -wixsite.com -editorx.io -wixstudio.io -wix.run - -// XenonCloud GbR: https://xenoncloud.net -// Submitted by Julian Uphoff -half.host - -// XnBay Technology : http://www.xnbay.com/ -// Submitted by XnBay Developer -xnbay.com -u2.xnbay.com -u2-local.xnbay.com - -// XS4ALL Internet bv : https://www.xs4all.nl/ -// Submitted by Daniel Mostertman -cistron.nl -demon.nl -xs4all.space - -// Yandex.Cloud LLC: https://cloud.yandex.com -// Submitted by Alexander Lodin -yandexcloud.net -storage.yandexcloud.net -website.yandexcloud.net - -// YesCourse Pty Ltd : https://yescourse.com -// Submitted by Atul Bhouraskar -official.academy - -// Yola : https://www.yola.com/ -// Submitted by Stefano Rivera -yolasite.com - -// Yombo : https://yombo.net -// Submitted by Mitch Schwenk -ybo.faith -yombo.me -homelink.one -ybo.party -ybo.review -ybo.science -ybo.trade - -// Yunohost : https://yunohost.org -// Submitted by Valentin Grimaud -ynh.fr -nohost.me -noho.st - -// ZaNiC : http://www.za.net/ -// Submitted by registry -za.net -za.org - -// Zine EOOD : https://zine.bg/ -// Submitted by Martin Angelov -bss.design - -// Zitcom A/S : https://www.zitcom.dk -// Submitted by Emil Stahl -basicserver.io -virtualserver.io -enterprisecloud.nu - -// ===END PRIVATE DOMAINS=== diff --git a/bundle/ruby/3.2.0/gems/public_suffix-5.0.4/lib/public_suffix.rb b/bundle/ruby/3.2.0/gems/public_suffix-5.0.4/lib/public_suffix.rb deleted file mode 100644 index b36dfbe7..00000000 --- a/bundle/ruby/3.2.0/gems/public_suffix-5.0.4/lib/public_suffix.rb +++ /dev/null @@ -1,177 +0,0 @@ -# frozen_string_literal: true - -# = Public Suffix -# -# Domain name parser based on the Public Suffix List. -# -# Copyright (c) 2009-2023 Simone Carletti - -require_relative "public_suffix/domain" -require_relative "public_suffix/version" -require_relative "public_suffix/errors" -require_relative "public_suffix/rule" -require_relative "public_suffix/list" - -# PublicSuffix is a Ruby domain name parser based on the Public Suffix List. -# -# The [Public Suffix List](https://publicsuffix.org) is a cross-vendor initiative -# to provide an accurate list of domain name suffixes. -# -# The Public Suffix List is an initiative of the Mozilla Project, -# but is maintained as a community resource. It is available for use in any software, -# but was originally created to meet the needs of browser manufacturers. -module PublicSuffix - - DOT = "." - BANG = "!" - STAR = "*" - - # Parses +name+ and returns the {PublicSuffix::Domain} instance. - # - # @example Parse a valid domain - # PublicSuffix.parse("google.com") - # # => # - # - # @example Parse a valid subdomain - # PublicSuffix.parse("www.google.com") - # # => # - # - # @example Parse a fully qualified domain - # PublicSuffix.parse("google.com.") - # # => # - # - # @example Parse a fully qualified domain (subdomain) - # PublicSuffix.parse("www.google.com.") - # # => # - # - # @example Parse an invalid (unlisted) domain - # PublicSuffix.parse("x.yz") - # # => # - # - # @example Parse an invalid (unlisted) domain with strict checking (without applying the default * rule) - # PublicSuffix.parse("x.yz", default_rule: nil) - # # => PublicSuffix::DomainInvalid: `x.yz` is not a valid domain - # - # @example Parse an URL (not supported, only domains) - # PublicSuffix.parse("http://www.google.com") - # # => PublicSuffix::DomainInvalid: http://www.google.com is not expected to contain a scheme - # - # - # @param name [#to_s] The domain name or fully qualified domain name to parse. - # @param list [PublicSuffix::List] The rule list to search, defaults to the default {PublicSuffix::List} - # @param ignore_private [Boolean] - # @return [PublicSuffix::Domain] - # - # @raise [PublicSuffix::DomainInvalid] If domain is not a valid domain. - # @raise [PublicSuffix::DomainNotAllowed] If a rule for +domain+ is found, but the rule doesn't allow +domain+. - def self.parse(name, list: List.default, default_rule: list.default_rule, ignore_private: false) - what = normalize(name) - raise what if what.is_a?(DomainInvalid) - - rule = list.find(what, default: default_rule, ignore_private: ignore_private) - - # rubocop:disable Style/IfUnlessModifier - if rule.nil? - raise DomainInvalid, "`#{what}` is not a valid domain" - end - if rule.decompose(what).last.nil? - raise DomainNotAllowed, "`#{what}` is not allowed according to Registry policy" - end - - # rubocop:enable Style/IfUnlessModifier - - decompose(what, rule) - end - - # Checks whether +domain+ is assigned and allowed, without actually parsing it. - # - # This method doesn't care whether domain is a domain or subdomain. - # The validation is performed using the default {PublicSuffix::List}. - # - # @example Validate a valid domain - # PublicSuffix.valid?("example.com") - # # => true - # - # @example Validate a valid subdomain - # PublicSuffix.valid?("www.example.com") - # # => true - # - # @example Validate a not-listed domain - # PublicSuffix.valid?("example.tldnotlisted") - # # => true - # - # @example Validate a not-listed domain with strict checking (without applying the default * rule) - # PublicSuffix.valid?("example.tldnotlisted") - # # => true - # PublicSuffix.valid?("example.tldnotlisted", default_rule: nil) - # # => false - # - # @example Validate a fully qualified domain - # PublicSuffix.valid?("google.com.") - # # => true - # PublicSuffix.valid?("www.google.com.") - # # => true - # - # @example Check an URL (which is not a valid domain) - # PublicSuffix.valid?("http://www.example.com") - # # => false - # - # - # @param name [#to_s] The domain name or fully qualified domain name to validate. - # @param ignore_private [Boolean] - # @return [Boolean] - def self.valid?(name, list: List.default, default_rule: list.default_rule, ignore_private: false) - what = normalize(name) - return false if what.is_a?(DomainInvalid) - - rule = list.find(what, default: default_rule, ignore_private: ignore_private) - - !rule.nil? && !rule.decompose(what).last.nil? - end - - # Attempt to parse the name and returns the domain, if valid. - # - # This method doesn't raise. Instead, it returns nil if the domain is not valid for whatever reason. - # - # @param name [#to_s] The domain name or fully qualified domain name to parse. - # @param list [PublicSuffix::List] The rule list to search, defaults to the default {PublicSuffix::List} - # @param ignore_private [Boolean] - # @return [String] - def self.domain(name, **options) - parse(name, **options).domain - rescue PublicSuffix::Error - nil - end - - - # private - - def self.decompose(name, rule) - left, right = rule.decompose(name) - - parts = left.split(DOT) - # If we have 0 parts left, there is just a tld and no domain or subdomain - # If we have 1 part left, there is just a tld, domain and not subdomain - # If we have 2 parts left, the last part is the domain, the other parts (combined) are the subdomain - tld = right - sld = parts.empty? ? nil : parts.pop - trd = parts.empty? ? nil : parts.join(DOT) - - Domain.new(tld, sld, trd) - end - - # Pretend we know how to deal with user input. - def self.normalize(name) - name = name.to_s.dup - name.strip! - name.chomp!(DOT) - name.downcase! - - return DomainInvalid.new("Name is blank") if name.empty? - return DomainInvalid.new("Name starts with a dot") if name.start_with?(DOT) - return DomainInvalid.new(format("%s is not expected to contain a scheme", name)) if name.include?("://") - - name - end - -end diff --git a/bundle/ruby/3.2.0/gems/public_suffix-5.0.4/lib/public_suffix/domain.rb b/bundle/ruby/3.2.0/gems/public_suffix-5.0.4/lib/public_suffix/domain.rb deleted file mode 100644 index 5cfb06a3..00000000 --- a/bundle/ruby/3.2.0/gems/public_suffix-5.0.4/lib/public_suffix/domain.rb +++ /dev/null @@ -1,235 +0,0 @@ -# frozen_string_literal: true - -# = Public Suffix -# -# Domain name parser based on the Public Suffix List. -# -# Copyright (c) 2009-2023 Simone Carletti - -module PublicSuffix - - # Domain represents a domain name, composed by a TLD, SLD and TRD. - class Domain - - # Splits a string into the labels, that is the dot-separated parts. - # - # The input is not validated, but it is assumed to be a valid domain name. - # - # @example - # - # name_to_labels('example.com') - # # => ['example', 'com'] - # - # name_to_labels('example.co.uk') - # # => ['example', 'co', 'uk'] - # - # @param name [String, #to_s] The domain name to split. - # @return [Array] - def self.name_to_labels(name) - name.to_s.split(DOT) - end - - - attr_reader :tld, :sld, :trd - - # Creates and returns a new {PublicSuffix::Domain} instance. - # - # @overload initialize(tld) - # Initializes with a +tld+. - # @param [String] tld The TLD (extension) - # @overload initialize(tld, sld) - # Initializes with a +tld+ and +sld+. - # @param [String] tld The TLD (extension) - # @param [String] sld The TRD (domain) - # @overload initialize(tld, sld, trd) - # Initializes with a +tld+, +sld+ and +trd+. - # @param [String] tld The TLD (extension) - # @param [String] sld The SLD (domain) - # @param [String] trd The TRD (subdomain) - # - # @yield [self] Yields on self. - # @yieldparam [PublicSuffix::Domain] self The newly creates instance - # - # @example Initialize with a TLD - # PublicSuffix::Domain.new("com") - # # => # - # - # @example Initialize with a TLD and SLD - # PublicSuffix::Domain.new("com", "example") - # # => # - # - # @example Initialize with a TLD, SLD and TRD - # PublicSuffix::Domain.new("com", "example", "wwww") - # # => # - # - def initialize(*args) - @tld, @sld, @trd = args - yield(self) if block_given? - end - - # Returns a string representation of this object. - # - # @return [String] - def to_s - name - end - - # Returns an array containing the domain parts. - # - # @return [Array] - # - # @example - # - # PublicSuffix::Domain.new("google.com").to_a - # # => [nil, "google", "com"] - # - # PublicSuffix::Domain.new("www.google.com").to_a - # # => [nil, "google", "com"] - # - def to_a - [@trd, @sld, @tld] - end - - # Returns the full domain name. - # - # @return [String] - # - # @example Gets the domain name of a domain - # PublicSuffix::Domain.new("com", "google").name - # # => "google.com" - # - # @example Gets the domain name of a subdomain - # PublicSuffix::Domain.new("com", "google", "www").name - # # => "www.google.com" - # - def name - [@trd, @sld, @tld].compact.join(DOT) - end - - # Returns a domain-like representation of this object - # if the object is a {#domain?}, nil otherwise. - # - # PublicSuffix::Domain.new("com").domain - # # => nil - # - # PublicSuffix::Domain.new("com", "google").domain - # # => "google.com" - # - # PublicSuffix::Domain.new("com", "google", "www").domain - # # => "www.google.com" - # - # This method doesn't validate the input. It handles the domain - # as a valid domain name and simply applies the necessary transformations. - # - # This method returns a FQD, not just the domain part. - # To get the domain part, use #sld (aka second level domain). - # - # PublicSuffix::Domain.new("com", "google", "www").domain - # # => "google.com" - # - # PublicSuffix::Domain.new("com", "google", "www").sld - # # => "google" - # - # @see #domain? - # @see #subdomain - # - # @return [String] - def domain - [@sld, @tld].join(DOT) if domain? - end - - # Returns a subdomain-like representation of this object - # if the object is a {#subdomain?}, nil otherwise. - # - # PublicSuffix::Domain.new("com").subdomain - # # => nil - # - # PublicSuffix::Domain.new("com", "google").subdomain - # # => nil - # - # PublicSuffix::Domain.new("com", "google", "www").subdomain - # # => "www.google.com" - # - # This method doesn't validate the input. It handles the domain - # as a valid domain name and simply applies the necessary transformations. - # - # This method returns a FQD, not just the subdomain part. - # To get the subdomain part, use #trd (aka third level domain). - # - # PublicSuffix::Domain.new("com", "google", "www").subdomain - # # => "www.google.com" - # - # PublicSuffix::Domain.new("com", "google", "www").trd - # # => "www" - # - # @see #subdomain? - # @see #domain - # - # @return [String] - def subdomain - [@trd, @sld, @tld].join(DOT) if subdomain? - end - - # Checks whether self looks like a domain. - # - # This method doesn't actually validate the domain. - # It only checks whether the instance contains - # a value for the {#tld} and {#sld} attributes. - # - # @example - # - # PublicSuffix::Domain.new("com").domain? - # # => false - # - # PublicSuffix::Domain.new("com", "google").domain? - # # => true - # - # PublicSuffix::Domain.new("com", "google", "www").domain? - # # => true - # - # # This is an invalid domain, but returns true - # # because this method doesn't validate the content. - # PublicSuffix::Domain.new("com", nil).domain? - # # => true - # - # @see #subdomain? - # - # @return [Boolean] - def domain? - !(@tld.nil? || @sld.nil?) - end - - # Checks whether self looks like a subdomain. - # - # This method doesn't actually validate the subdomain. - # It only checks whether the instance contains - # a value for the {#tld}, {#sld} and {#trd} attributes. - # If you also want to validate the domain, - # use {#valid_subdomain?} instead. - # - # @example - # - # PublicSuffix::Domain.new("com").subdomain? - # # => false - # - # PublicSuffix::Domain.new("com", "google").subdomain? - # # => false - # - # PublicSuffix::Domain.new("com", "google", "www").subdomain? - # # => true - # - # # This is an invalid domain, but returns true - # # because this method doesn't validate the content. - # PublicSuffix::Domain.new("com", "example", nil).subdomain? - # # => true - # - # @see #domain? - # - # @return [Boolean] - def subdomain? - !(@tld.nil? || @sld.nil? || @trd.nil?) - end - - end - -end diff --git a/bundle/ruby/3.2.0/gems/public_suffix-5.0.4/lib/public_suffix/errors.rb b/bundle/ruby/3.2.0/gems/public_suffix-5.0.4/lib/public_suffix/errors.rb deleted file mode 100644 index 7414ffd4..00000000 --- a/bundle/ruby/3.2.0/gems/public_suffix-5.0.4/lib/public_suffix/errors.rb +++ /dev/null @@ -1,41 +0,0 @@ -# frozen_string_literal: true - -# = Public Suffix -# -# Domain name parser based on the Public Suffix List. -# -# Copyright (c) 2009-2023 Simone Carletti - -module PublicSuffix - - class Error < StandardError - end - - # Raised when trying to parse an invalid name. - # A name is considered invalid when no rule is found in the definition list. - # - # @example - # - # PublicSuffix.parse("nic.test") - # # => PublicSuffix::DomainInvalid - # - # PublicSuffix.parse("http://www.nic.it") - # # => PublicSuffix::DomainInvalid - # - class DomainInvalid < Error - end - - # Raised when trying to parse a name that matches a suffix. - # - # @example - # - # PublicSuffix.parse("nic.do") - # # => PublicSuffix::DomainNotAllowed - # - # PublicSuffix.parse("www.nic.do") - # # => PublicSuffix::Domain - # - class DomainNotAllowed < DomainInvalid - end - -end diff --git a/bundle/ruby/3.2.0/gems/public_suffix-5.0.4/lib/public_suffix/list.rb b/bundle/ruby/3.2.0/gems/public_suffix-5.0.4/lib/public_suffix/list.rb deleted file mode 100644 index 4bb4f1bd..00000000 --- a/bundle/ruby/3.2.0/gems/public_suffix-5.0.4/lib/public_suffix/list.rb +++ /dev/null @@ -1,247 +0,0 @@ -# frozen_string_literal: true - -# = Public Suffix -# -# Domain name parser based on the Public Suffix List. -# -# Copyright (c) 2009-2023 Simone Carletti - -module PublicSuffix - - # A {PublicSuffix::List} is a collection of one - # or more {PublicSuffix::Rule}. - # - # Given a {PublicSuffix::List}, - # you can add or remove {PublicSuffix::Rule}, - # iterate all items in the list or search for the first rule - # which matches a specific domain name. - # - # # Create a new list - # list = PublicSuffix::List.new - # - # # Push two rules to the list - # list << PublicSuffix::Rule.factory("it") - # list << PublicSuffix::Rule.factory("com") - # - # # Get the size of the list - # list.size - # # => 2 - # - # # Search for the rule matching given domain - # list.find("example.com") - # # => # - # list.find("example.org") - # # => nil - # - # You can create as many {PublicSuffix::List} you want. - # The {PublicSuffix::List.default} rule list is used - # to tokenize and validate a domain. - # - class List - - DEFAULT_LIST_PATH = File.expand_path("../../data/list.txt", __dir__) - - # Gets the default rule list. - # - # Initializes a new {PublicSuffix::List} parsing the content - # of {PublicSuffix::List.default_list_content}, if required. - # - # @return [PublicSuffix::List] - def self.default(**options) - @default ||= parse(File.read(DEFAULT_LIST_PATH), **options) - end - - # Sets the default rule list to +value+. - # - # @param value [PublicSuffix::List] the new list - # @return [PublicSuffix::List] - def self.default=(value) - @default = value - end - - # Parse given +input+ treating the content as Public Suffix List. - # - # See http://publicsuffix.org/format/ for more details about input format. - # - # @param input [#each_line] the list to parse - # @param private_domains [Boolean] whether to ignore the private domains section - # @return [PublicSuffix::List] - def self.parse(input, private_domains: true) - comment_token = "//" - private_token = "===BEGIN PRIVATE DOMAINS===" - section = nil # 1 == ICANN, 2 == PRIVATE - - new do |list| - input.each_line do |line| - line.strip! - case # rubocop:disable Style/EmptyCaseCondition - - # skip blank lines - when line.empty? - next - - # include private domains or stop scanner - when line.include?(private_token) - break if !private_domains - - section = 2 - - # skip comments - when line.start_with?(comment_token) # rubocop:disable Lint/DuplicateBranch - next - - else - list.add(Rule.factory(line, private: section == 2)) - - end - end - end - end - - - # Initializes an empty {PublicSuffix::List}. - # - # @yield [self] Yields on self. - # @yieldparam [PublicSuffix::List] self The newly created instance. - def initialize - @rules = {} - yield(self) if block_given? - end - - - # Checks whether two lists are equal. - # - # List one is equal to two, if two is an instance of - # {PublicSuffix::List} and each +PublicSuffix::Rule::*+ - # in list one is available in list two, in the same order. - # - # @param other [PublicSuffix::List] the List to compare - # @return [Boolean] - def ==(other) - return false unless other.is_a?(List) - - equal?(other) || @rules == other.rules - end - alias eql? == - - # Iterates each rule in the list. - def each(&block) - Enumerator.new do |y| - @rules.each do |key, node| - y << entry_to_rule(node, key) - end - end.each(&block) - end - - - # Adds the given object to the list and optionally refreshes the rule index. - # - # @param rule [PublicSuffix::Rule::*] the rule to add to the list - # @return [self] - def add(rule) - @rules[rule.value] = rule_to_entry(rule) - self - end - alias << add - - # Gets the number of rules in the list. - # - # @return [Integer] - def size - @rules.size - end - - # Checks whether the list is empty. - # - # @return [Boolean] - def empty? - @rules.empty? - end - - # Removes all rules. - # - # @return [self] - def clear - @rules.clear - self - end - - # Finds and returns the rule corresponding to the longest public suffix for the hostname. - # - # @param name [#to_s] the hostname - # @param default [PublicSuffix::Rule::*] the default rule to return in case no rule matches - # @return [PublicSuffix::Rule::*] - def find(name, default: default_rule, **options) - rule = select(name, **options).inject do |l, r| - return r if r.instance_of?(Rule::Exception) - - l.length > r.length ? l : r - end - rule || default - end - - # Selects all the rules matching given hostame. - # - # If `ignore_private` is set to true, the algorithm will skip the rules that are flagged as - # private domain. Note that the rules will still be part of the loop. - # If you frequently need to access lists ignoring the private domains, - # you should create a list that doesn't include these domains setting the - # `private_domains: false` option when calling {.parse}. - # - # Note that this method is currently private, as you should not rely on it. Instead, - # the public interface is {#find}. The current internal algorithm allows to return all - # matching rules, but different data structures may not be able to do it, and instead would - # return only the match. For this reason, you should rely on {#find}. - # - # @param name [#to_s] the hostname - # @param ignore_private [Boolean] - # @return [Array] - def select(name, ignore_private: false) - name = name.to_s - - parts = name.split(DOT).reverse! - index = 0 - query = parts[index] - rules = [] - - loop do - match = @rules[query] - rules << entry_to_rule(match, query) if !match.nil? && (ignore_private == false || match.private == false) - - index += 1 - break if index >= parts.size - - query = parts[index] + DOT + query - end - - rules - end - private :select - - # Gets the default rule. - # - # @see PublicSuffix::Rule.default_rule - # - # @return [PublicSuffix::Rule::*] - def default_rule - PublicSuffix::Rule.default - end - - - protected - - attr_reader :rules - - - private - - def entry_to_rule(entry, value) - entry.type.new(value: value, length: entry.length, private: entry.private) - end - - def rule_to_entry(rule) - Rule::Entry.new(rule.class, rule.length, rule.private) - end - - end -end diff --git a/bundle/ruby/3.2.0/gems/public_suffix-5.0.4/lib/public_suffix/rule.rb b/bundle/ruby/3.2.0/gems/public_suffix-5.0.4/lib/public_suffix/rule.rb deleted file mode 100644 index 520e08c2..00000000 --- a/bundle/ruby/3.2.0/gems/public_suffix-5.0.4/lib/public_suffix/rule.rb +++ /dev/null @@ -1,350 +0,0 @@ -# frozen_string_literal: true - -# = Public Suffix -# -# Domain name parser based on the Public Suffix List. -# -# Copyright (c) 2009-2023 Simone Carletti - -module PublicSuffix - - # A Rule is a special object which holds a single definition - # of the Public Suffix List. - # - # There are 3 types of rules, each one represented by a specific - # subclass within the +PublicSuffix::Rule+ namespace. - # - # To create a new Rule, use the {PublicSuffix::Rule#factory} method. - # - # PublicSuffix::Rule.factory("ar") - # # => # - # - module Rule - - # @api internal - Entry = Struct.new(:type, :length, :private) # rubocop:disable Lint/StructNewOverride - - # = Abstract rule class - # - # This represent the base class for a Rule definition - # in the {Public Suffix List}[https://publicsuffix.org]. - # - # This is intended to be an Abstract class - # and you shouldn't create a direct instance. The only purpose - # of this class is to expose a common interface - # for all the available subclasses. - # - # * {PublicSuffix::Rule::Normal} - # * {PublicSuffix::Rule::Exception} - # * {PublicSuffix::Rule::Wildcard} - # - # ## Properties - # - # A rule is composed by 4 properties: - # - # value - A normalized version of the rule name. - # The normalization process depends on rule tpe. - # - # Here's an example - # - # PublicSuffix::Rule.factory("*.google.com") - # # - # - # ## Rule Creation - # - # The best way to create a new rule is passing the rule name - # to the PublicSuffix::Rule.factory method. - # - # PublicSuffix::Rule.factory("com") - # # => PublicSuffix::Rule::Normal - # - # PublicSuffix::Rule.factory("*.com") - # # => PublicSuffix::Rule::Wildcard - # - # This method will detect the rule type and create an instance - # from the proper rule class. - # - # ## Rule Usage - # - # A rule describes the composition of a domain name and explains how to tokenize - # the name into tld, sld and trd. - # - # To use a rule, you first need to be sure the name you want to tokenize - # can be handled by the current rule. - # You can use the #match? method. - # - # rule = PublicSuffix::Rule.factory("com") - # - # rule.match?("google.com") - # # => true - # - # rule.match?("google.com") - # # => false - # - # Rule order is significant. A name can match more than one rule. - # See the {Public Suffix Documentation}[http://publicsuffix.org/format/] - # to learn more about rule priority. - # - # When you have the right rule, you can use it to tokenize the domain name. - # - # rule = PublicSuffix::Rule.factory("com") - # - # rule.decompose("google.com") - # # => ["google", "com"] - # - # rule.decompose("www.google.com") - # # => ["www.google", "com"] - # - # @abstract - # - class Base - - # @return [String] the rule definition - attr_reader :value - - # @return [String] the length of the rule - attr_reader :length - - # @return [Boolean] true if the rule is a private domain - attr_reader :private - - - # Initializes a new rule from the content. - # - # @param content [String] the content of the rule - # @param private [Boolean] - def self.build(content, private: false) - new(value: content, private: private) - end - - # Initializes a new rule. - # - # @param value [String] - # @param private [Boolean] - def initialize(value:, length: nil, private: false) - @value = value.to_s - @length = length || (@value.count(DOT) + 1) - @private = private - end - - # Checks whether this rule is equal to other. - # - # @param other [PublicSuffix::Rule::*] The rule to compare - # @return [Boolean] true if this rule and other are instances of the same class - # and has the same value, false otherwise. - def ==(other) - equal?(other) || (self.class == other.class && value == other.value) - end - alias eql? == - - # Checks if this rule matches +name+. - # - # A domain name is said to match a rule if and only if - # all of the following conditions are met: - # - # - When the domain and rule are split into corresponding labels, - # that the domain contains as many or more labels than the rule. - # - Beginning with the right-most labels of both the domain and the rule, - # and continuing for all labels in the rule, one finds that for every pair, - # either they are identical, or that the label from the rule is "*". - # - # @see https://publicsuffix.org/list/ - # - # @example - # PublicSuffix::Rule.factory("com").match?("example.com") - # # => true - # PublicSuffix::Rule.factory("com").match?("example.net") - # # => false - # - # @param name [String] the domain name to check - # @return [Boolean] - def match?(name) - # NOTE: it works because of the assumption there are no - # rules like foo.*.com. If the assumption is incorrect, - # we need to properly walk the input and skip parts according - # to wildcard component. - diff = name.chomp(value) - diff.empty? || diff.end_with?(DOT) - end - - # @abstract - def parts - raise NotImplementedError - end - - # @abstract - # @param domain [#to_s] The domain name to decompose - # @return [Array] - def decompose(*) - raise NotImplementedError - end - - end - - # Normal represents a standard rule (e.g. com). - class Normal < Base - - # Gets the original rule definition. - # - # @return [String] The rule definition. - def rule - value - end - - # Decomposes the domain name according to rule properties. - # - # @param domain [#to_s] The domain name to decompose - # @return [Array] The array with [trd + sld, tld]. - def decompose(domain) - suffix = parts.join('\.') - matches = domain.to_s.match(/^(.*)\.(#{suffix})$/) - matches ? matches[1..2] : [nil, nil] - end - - # dot-split rule value and returns all rule parts - # in the order they appear in the value. - # - # @return [Array] - def parts - @value.split(DOT) - end - - end - - # Wildcard represents a wildcard rule (e.g. *.co.uk). - class Wildcard < Base - - # Initializes a new rule from the content. - # - # @param content [String] the content of the rule - # @param private [Boolean] - def self.build(content, private: false) - new(value: content.to_s[2..], private: private) - end - - # Initializes a new rule. - # - # @param value [String] - # @param length [Integer] - # @param private [Boolean] - def initialize(value:, length: nil, private: false) - super(value: value, length: length, private: private) - length or @length += 1 # * counts as 1 - end - - # Gets the original rule definition. - # - # @return [String] The rule definition. - def rule - value == "" ? STAR : STAR + DOT + value - end - - # Decomposes the domain name according to rule properties. - # - # @param domain [#to_s] The domain name to decompose - # @return [Array] The array with [trd + sld, tld]. - def decompose(domain) - suffix = ([".*?"] + parts).join('\.') - matches = domain.to_s.match(/^(.*)\.(#{suffix})$/) - matches ? matches[1..2] : [nil, nil] - end - - # dot-split rule value and returns all rule parts - # in the order they appear in the value. - # - # @return [Array] - def parts - @value.split(DOT) - end - - end - - # Exception represents an exception rule (e.g. !parliament.uk). - class Exception < Base - - # Initializes a new rule from the content. - # - # @param content [#to_s] the content of the rule - # @param private [Boolean] - def self.build(content, private: false) - new(value: content.to_s[1..], private: private) - end - - # Gets the original rule definition. - # - # @return [String] The rule definition. - def rule - BANG + value - end - - # Decomposes the domain name according to rule properties. - # - # @param domain [#to_s] The domain name to decompose - # @return [Array] The array with [trd + sld, tld]. - def decompose(domain) - suffix = parts.join('\.') - matches = domain.to_s.match(/^(.*)\.(#{suffix})$/) - matches ? matches[1..2] : [nil, nil] - end - - # dot-split rule value and returns all rule parts - # in the order they appear in the value. - # The leftmost label is not considered a label. - # - # See http://publicsuffix.org/format/: - # If the prevailing rule is a exception rule, - # modify it by removing the leftmost label. - # - # @return [Array] - def parts - @value.split(DOT)[1..] - end - - end - - - # Takes the +name+ of the rule, detects the specific rule class - # and creates a new instance of that class. - # The +name+ becomes the rule +value+. - # - # @example Creates a Normal rule - # PublicSuffix::Rule.factory("ar") - # # => # - # - # @example Creates a Wildcard rule - # PublicSuffix::Rule.factory("*.ar") - # # => # - # - # @example Creates an Exception rule - # PublicSuffix::Rule.factory("!congresodelalengua3.ar") - # # => # - # - # @param content [#to_s] the content of the rule - # @return [PublicSuffix::Rule::*] A rule instance. - def self.factory(content, private: false) - case content.to_s[0, 1] - when STAR - Wildcard - when BANG - Exception - else - Normal - end.build(content, private: private) - end - - # The default rule to use if no rule match. - # - # The default rule is "*". From https://publicsuffix.org/list/: - # - # > If no rules match, the prevailing rule is "*". - # - # @return [PublicSuffix::Rule::Wildcard] The default rule. - def self.default - factory(STAR) - end - - end - -end diff --git a/bundle/ruby/3.2.0/gems/public_suffix-5.0.4/lib/public_suffix/version.rb b/bundle/ruby/3.2.0/gems/public_suffix-5.0.4/lib/public_suffix/version.rb deleted file mode 100644 index a819359f..00000000 --- a/bundle/ruby/3.2.0/gems/public_suffix-5.0.4/lib/public_suffix/version.rb +++ /dev/null @@ -1,14 +0,0 @@ -# frozen_string_literal: true - -# = Public Suffix -# -# Domain name parser based on the Public Suffix List. -# -# Copyright (c) 2009-2023 Simone Carletti - -module PublicSuffix - - # @return [String] the current library version - VERSION = "5.0.4" - -end diff --git a/bundle/ruby/3.2.0/gems/racc-1.7.3/COPYING b/bundle/ruby/3.2.0/gems/racc-1.7.3/COPYING deleted file mode 100644 index 00e3e0db..00000000 --- a/bundle/ruby/3.2.0/gems/racc-1.7.3/COPYING +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (C) 2019 Yukihiro Matsumoto. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: -1. Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright -notice, this list of conditions and the following disclaimer in the -documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -SUCH DAMAGE. diff --git a/bundle/ruby/3.2.0/gems/racc-1.7.3/ChangeLog b/bundle/ruby/3.2.0/gems/racc-1.7.3/ChangeLog deleted file mode 100644 index 762b5ee7..00000000 --- a/bundle/ruby/3.2.0/gems/racc-1.7.3/ChangeLog +++ /dev/null @@ -1,846 +0,0 @@ -Tue Feb 20 18:45:45 2007 Minero Aoki - - * lib/racc/grammar.rb (separated_by): last commit was wrong. use - optional default return value of #option. - -Tue Feb 20 18:27:48 2007 Minero Aoki - - * lib/racc/grammar.rb (separated_by): return [] for empty list. - -Tue Nov 7 07:13:47 2006 Minero Aoki - - * lib/racc/grammar.rb (Rule#prec): rule.prec{...} should set - action. - -Tue Nov 7 06:38:57 2006 Minero Aoki - - * lib/racc/grammar.rb: system call error on writing log file - should be ignored. - - * lib/racc/grammar.rb: never define lvar which have same name with - block local variable. - - * lib/racc/iset.rb: ditto. - - * lib/racc/logfilegenerator.rb: ditto. - - * lib/racc/parser.rb: ditto. - - * lib/racc/state.rb: ditto. - - * lib/racc/statetransitiontable.rb: ditto. - - * test/test.rb: racc -c is obsolete, use --line-convert-all. - -Sun Oct 29 13:27:30 2006 Minero Aoki - - * lib/racc/grammarfileparser.rb: use String#lines instead of - #to_a. - - * lib/racc/parserfilegenerator.rb: ditto. - - * lib/racc/compat.rb: provide Object#__send. - - * lib/racc/compat.rb: provide Object#__send!. - - * lib/racc/compat.rb: provide String#lines. - -Thu Aug 24 23:14:16 2006 Minero Aoki - - * lib/racc/grammar.rb: report conflicts/useless if $DEBUG. - - * lib/racc/statetransitiontable.rb: remove code for Ruby 1.4 - compatibility. - -Fri Aug 4 01:02:36 2006 Minero Aoki - - * lib/racc/grammar.rb: #should_terminal should be called in - #check_terminals. - -Fri Aug 4 00:44:56 2006 Minero Aoki - - * bin/racc: getopts -> optparse. - - * lib/racc/grammar.rb: value of error symbol is :error. - - * lib/racc/grammar.rb (check_terminals): string symbols are - terminal. - - * lib/racc/grammarfileparser.rb (add_rule_block): specified-prec - did not work. - -Fri Aug 4 00:29:53 2006 Minero Aoki - - * lib/racc/parserfilegenerator.rb - (serialize_integer_list_compressed): fix typo. - -Thu Aug 3 22:20:34 2006 Minero Aoki - - * bin/y2racc: fix filename. - -Thu Aug 3 21:10:48 2006 Minero Aoki - - * bin/y2racc: getopts -> optparse. - -Thu Aug 3 19:35:34 2006 Minero Aoki - - * setup.rb: updated. - -Thu Aug 3 19:34:55 2006 Minero Aoki - - * bin/racc2y: getopts -> optparse. - - * bin/racc2y: rewrite code for new generator. - - * lib/racc/grammar.rb (_regist): did not check @delayed rules (it - causes registering same dummy rules many times). - - * lib/racc/grammarfileparser.rb: refactoring: simplify syntax. - - * lib/racc/grammarfileparser.rb: new method - GrammarFileParser.parse. - - * lib/racc/grammarfileparser.rb: new method - GrammarFileParser.parse_file. - -Sat Jul 29 04:51:42 2006 Minero Aoki - - * lib/racc/pre-setup: We need not make grammarfileparser.rb. - -Sat Jul 29 04:30:33 2006 Minero Aoki - - * lib/racc/grammar.rb: allow '|' operation with meta rules - (many, option...). - -Sat Jul 29 03:17:20 2006 Minero Aoki - - * lib/racc/grammar.rb (Grammar#parser_class): write log file when - $DEBUG=true. - - * lib/racc/grammar.rb (Grammar.define): run block on a - Racc::Grammar::DefinitionEnv object, instead of a Racc::Grammar - object. - - * lib/racc/grammar.rb (DefinitionEnv): new method #null. - - * lib/racc/grammar.rb (DefinitionEnv): new method #many. - - * lib/racc/grammar.rb (DefinitionEnv): new method #many1. - - * lib/racc/grammar.rb (DefinitionEnv): new method #option. - - * lib/racc/grammar.rb (DefinitionEnv): new method #seperated_by. - - * lib/racc/grammar.rb (DefinitionEnv): new method #seperated_by1. - - * lib/racc/grammar.rb (DefinitionEnv): new method #action. - -Sat Jul 29 03:13:22 2006 Minero Aoki - - * lib/racc/compat.rb: reduce warning. - -Sun Jul 16 05:07:12 2006 Minero Aoki - - * lib/racc/compat.rb: implement Enumerable#each_slice for Ruby - 1.8. - - * lib/racc/parserfilegenerator.rb: better output. - - * ext/racc/cparse/cparse.c: always use VALUE instead of struct - cparse_params. - - * ext/racc/cparse/cparse.c: mark params->value_v. - -Thu Jul 6 20:44:48 2006 Minero Aoki - - * lib/racc/grammar.rb: on-the-fly generator implemented. - - * lib/racc/generator.rb -> statetransitiontable.rb, - parserfilegenerator.rb, logfilegenerator.rb. - - * lib/racc/statetransitiontable.rb: new file. - - * lib/racc/parserfilegenerator.rb: new file. - - * lib/racc/logfilegenerator.rb: new file. - - * lib/racc/grammarfileparser.rb.in: removed. - - * lib/racc/grammarfileparser.rb: new file. uses on-the-fly - generator. - - * misc/boot.rb: removed. - - * lib/racc/static.rb: new file, to import static generator - (lib/racc.rb provides dynamic generator). - - * lib/racc/grammar.rb: grand refactoring. - - * lib/racc/sourcetext.rb: new method #to_s, #location. - - * lib/racc/state.rb: compute NFA/DFA on demand. - - * bin/racc: follow these changes. - -Thu Jul 6 20:39:42 2006 Minero Aoki - - * ext/racc/cparse/cparse.so: should mark VALUEs in cparse_params. - -Tue Jul 4 02:24:27 2006 Minero Aoki - - * bin/racc: simplify report code. - - * lib/racc/grammar.rb: introduce new methods for racc command. - - * lib/racc/states.rb: ditto. - - * lib/racc/generator.rb: class CodeGenerator -> - ParserFileGenerator. - - * lib/racc/generator.rb: new class ParserFileGenerator::Params. - - * bin/racc: ditto. - - * misc/boot.rb: ditto. - - * lib/racc/grammarfileparser.rb.in: ditto. - - * lib/racc/grammarfileparser.rb.in: merge grammarfilescanner.rb. - - * lib/racc/grammarfilescanner.rb: removed. - - * lib/racc/grammarfileparser.rb.in: parses user code blocks. - - * lib/racc/usercodeparser.rb: removed. - - * lib/racc/generator.rb: remove user code parsing code. - - * lib/racc/grammarfileparser.rb.in: passes user code block by a - SourceText object. - - * lib/racc/generator.rb: ditto. - - * lib/racc/sourcetext.rb: new file. - - * lib/racc/generator.rb: introduce DSL to describe file contents. - -Tue Jul 4 02:15:36 2006 Minero Aoki - - * lib/racc/debugflags.rb: remove unused class GenerationOptions. - -Tue Jul 4 02:14:48 2006 Minero Aoki - - * lib/racc/compat.rb: update coding style. - -Mon Jul 3 04:34:32 2006 Minero Aoki - - * lib/racc/compiler.rb: do not export Grammar/SymbolTable/States. - - * lib/racc/compiler.rb: make a new class for debug flags - (Racc::DebugFlags). - - * lib/racc/compiler.rb: removed. - - * bin/racc: eliminate Racc::Compiler class. - - * bin/racc: refactor profiling code. - - * bin/racc: move file generation code to racc/generator.rb. - - * misc/boot.rb: does not emulate Racc::Compiler interface. - - * lib/racc.rb: new file to require whole generator. - - * lib/racc/grammar.rb: class RuleTable -> Grammar. - - * lib/racc/grammar.rb: Grammar.new does not acccept a Compiler. - - * lib/racc/grammar.rb: refactoring. - - * lib/racc/grammarfileparser.rb.in: GrammarFileParser.new does not - accept a Compiler. - - * lib/racc/grammarfileparser.rb.in: #parser takes more 2 args, a - filename and a base line number. - - * lib/racc/grammarfileparser.rb.in: refactoring. - - * lib/racc/output.rb -> generate.rb - - * lib/racc/generate.rb: class Formatter -> CodeGenerator. - - * lib/racc/generate.rb: CodeGenerator.new does not accept a - Compiler. - - * lib/racc/generate.rb: a CodeGenerator got many parameters via - setter method. - - * lib/racc/generate.rb: class VerboseOutputter -> - LogFileGenerator. - - * lib/racc/generate.rb: LogFileGenerator.new does not accept a - Compiler. - - * lib/racc/generate.rb: refactoring. - - * lib/racc/state.rb: class StateTable -> States. - - * lib/racc/state.rb: States.new does not acccept a Compiler. - - * lib/racc/state.rb: refactoring. - - * test/test.rb: -Da is obsolete (I forgot what this flag is). - - * test/test.rb: allow replacing racc via environment variable - $RACC. - -Mon Jul 3 04:18:49 2006 Minero Aoki - - * Makefile: new task bootstrap-force. - -Sun Jul 2 19:46:58 2006 Minero Aoki - - * test/ichk.y: update coding style. - -Sun Jul 2 19:01:55 2006 Minero Aoki - - * ext/racc/cparse/cparse.c: must require version.h to get - RUBY_VERSION_CODE. - -Sun Jul 2 18:33:32 2006 Minero Aoki - - * ext/racc/cparse/cparse.c: do not use rb_iterate to give a block - to the method, use rb_block_call instead. [ruby-dev:28445] - -Mon Jun 19 02:38:18 2006 Minero Aoki - - * bin/racc: -g option is now -t. -g option is obsolete and is an - alias of -t. - -Mon Jun 19 02:35:59 2006 Minero Aoki - - * ext/racc/cparse/cparse.c: K&R -> ANSI C. - -Mon Nov 21 02:37:10 2005 Minero Aoki - - * version 1.4.5 released. - -Mon Nov 21 02:31:18 2005 Minero Aoki - - * bin/racc: shebang line should include file extension. - - * lib/racc/compat.rb: method removed: bug!. - - * lib/racc/*.rb: racc compiler should not depend on - Racc::ParseError. - - * lib/racc/*.rb: update copyright year. - - * lib/racc/*.rb: update coding style. - - * lib/racc/exception.rb: new file. - -Mon Nov 21 00:49:18 2005 Minero Aoki - - * Makefile: remove useless target `import'. - - * Makefile: generate parser-text.rb. - - * misc/dist.sh: setup.rb and COPYING is now in repository. - - * misc/dist.sh: generate parser-text.rb. - -Mon Nov 21 00:14:21 2005 Minero Aoki - - * bin/racc: read racc/parser.rb from parser-text.rb. - - * lib/racc/rubyloader.rb: no longer needed. - - * lib/racc/pre-setup: new file. - - * lib/racc/pre-setup: generate parser-text.rb. - - * lib/racc/pre-setup: generate grammarfileparser.rb. - - * misc/boot.rb: new method BootstrapCompiler.main. - - * misc/boot.rb: new method BootstrapCompiler.generate, which is - used from pre-setup. - -Mon Nov 21 00:09:04 2005 Minero Aoki - - * bin/racc2y: refactoring. - - * bin/y2racc: refactoring. - -Sun Nov 20 23:46:42 2005 Minero Aoki - - * lib/racc/pre-setup: new file. - -Sun Nov 20 22:46:21 2005 Minero Aoki - - * COPYING: new file. - -Sun Nov 20 22:25:15 2005 Minero Aoki - - * setup.rb: import setup.rb 3.4.1. - -Thu Sep 29 02:51:56 2005 Minero Aoki - - * Makefile (clean): invoke `make clean' in ext. - -Thu Sep 29 02:50:56 2005 Minero Aoki - - * lib/racc/.cvsignore: removed. - -Thu Sep 29 02:46:30 2005 Minero Aoki - - * Makefile: use .makeparams system. - - * Makefile: unify lib/racc/Makefile. - - * Makefile: new target lib/racc/grammarfileparser.rb. - - * lib/racc/Makefile: unified by ./Makefile. - - * lib/racc/boot: removed (moved under misc). - - * misc/boot.rb: new file. - -Thu Sep 29 02:43:30 2005 Minero Aoki - - * setup.rb: new file. - -Tue Jul 26 23:37:46 2005 Minero Aoki - - * bin/racc: --no-omit-actions did not work (This patch is - contributed by OHKUBO Takuya). - -Sun Jan 2 11:48:19 2005 Minero Aoki - - * lib/racc/grammer.rb (once_writer): bug! needs argument. - -Mon Feb 16 16:14:16 2004 Minero Aoki - - * test/echk.y: fix typo. - - * test/ichk.y: does not use amstd. - - * test/opt.y: untabify. - -Mon Feb 16 16:10:46 2004 Minero Aoki - - * lib/racc/boot: update coding style. - - * lib/racc/compat.rb: ditto. - - * lib/racc/compiler.rb: ditto. - - * lib/racc/grammar.rb: ditto. - - * lib/racc/grammarfileparser.rb.in: ditto. - - * lib/racc/grammarfilescanner.rb: ditto. - - * lib/racc/info.rb: ditto. - - * lib/racc/iset.rb: ditto. - - * lib/racc/output.rb: ditto. - - * lib/racc/parser.rb: ditto. - - * lib/racc/state.rb: ditto. - - * lib/racc/usercodeparser.rb: ditto. - -Mon Feb 16 16:01:34 2004 Minero Aoki - - * lib/racc/rubyloader.rb: imported rev1.6. - -Fri Dec 12 01:57:47 2003 Minero Aoki - - * sample/hash.y: use no_result_var option. - - * sample/array.y: use latest (my) coding style. - - * sample/array2.y: ditto. - - * sample/hash.y: ditto. - - * sample/lists.y: ditto. - -Wed Nov 5 19:50:35 2003 Minero Aoki - - * test/bench.y: remove dependency on amstd. - - * test/chk.y: ditto. - - * test/echk.y: ditto. - - * test/ichk.y: ditto. - - * test/intp.y: ditto. - - * test/opt.y: ditto. - - * test/percent.y: ditto. - -Wed Nov 5 19:11:15 2003 Minero Aoki - - * bin/racc (get_options): remove --no-extensions option; - racc/parser is preloaded, Racc_No_Extension does not work. - -Mon Nov 3 22:41:42 2003 Minero Aoki - - * bin/racc: apply latest coding style. - - * lib/racc/parser.rb: ditto. - - * lib/racc/compat.rb: add File.read. - -Mon Nov 3 21:20:25 2003 Minero Aoki - - * ext/racc/cparse/cparse.c (parse_main): abort if length of state - stack <=1, not ==0. - - * lib/racc/parser.rb: use <=1, not <2. - - * ext/racc/cparse/cparse.c: check_*() -> assert_*() - - * ext/racc/cparse/cparse.c (racc_cparse): define lvar `v' for - debugging. - - * ext/racc/cparse/cparse.c (racc_yyparse): ditto. - -Mon Nov 3 17:21:55 2003 Minero Aoki - - * Makefile (all): make cparse.so. - -Mon Nov 3 17:19:26 2003 Minero Aoki - - * lib/racc/parser.rb: update version. - - * ext/racc/cparse/cparse.c: update version. - -Mon Nov 3 17:19:01 2003 Minero Aoki - - * Makefile: update version in parser.rb, cparse.c. - -Sun Oct 12 23:49:58 2003 Minero Aoki - - * version 1.4.4. - -Sun Oct 12 23:49:40 2003 Minero Aoki - - * bin/y2racc: did not work. - - * bin/y2racc: -u options did not work. - -Sun Oct 12 23:41:46 2003 Minero Aoki - - * misc/dist.sh: cd before make. - -Sun Oct 12 23:38:04 2003 Minero Aoki - - * Makefile (site): create $siteroot/{ja,en}/man/racc/*.html. - -Sun Oct 12 23:37:18 2003 Minero Aoki - - * doc/parser.rrd.m: missing 'j'. - -Sun Oct 12 23:29:11 2003 Minero Aoki - - * Makefile: new target `doc'. - - * Makefile: new target `clean'. - - * lib/racc/Makefile: new target `clean'. - - * misc/dist.sh: create documents before pack. - -Sun Oct 12 23:27:58 2003 Minero Aoki - - * doc/debug.rd.m: junk char was inserted. - - * doc/index.html.m: en/ja text were mixed. - - * doc/parser.rrd.m: add return values. - - * doc/usage.html.m: fix hyper link. - -Sun Oct 12 22:57:28 2003 Minero Aoki - - * doc.en/changes.html, doc.ja/changes.html -> doc/NEWS.rd.m - - * doc.en/command.html, doc.ja/command.html -> doc/command.html.m - - * doc.en/debug.html, doc.ja/debug.html -> doc/debug.rd.m - - * doc.en/grammar.html, doc.ja/grammar.html -> doc/grammar.rd.m - - * doc.en/index.html, doc.ja/index.html -> doc/index.html.m - - * doc.en/parser.html, doc.ja/parser.html -> doc/parser.rrd.m - - * doc.en/usage.html, doc.ja/usage.html -> doc/usage.html.m - -Sun Oct 12 18:46:21 2003 Minero Aoki - - * web/racc.ja.html: update descriptions. - - * web/racc.en.html: ditto. - -Sun Oct 12 18:43:45 2003 Minero Aoki - - * misc/dist.sh: remove web/ directory before distribute. - -Sun Oct 12 18:37:29 2003 Minero Aoki - - * Makefile: new target `site'. - - * web/racc.ja.html: new file. - - * web/racc.en.html: new file. - -Sun Oct 12 18:30:55 2003 Minero Aoki - - * misc/dist.sh: forgot to remove tmp comment out. - -Sun Oct 12 18:12:09 2003 Minero Aoki - - * lib/racc/info.rb: version 1.4.4. - -Sun Oct 12 18:11:42 2003 Minero Aoki - - * Makefile (dist): split out misc/dist.sh. - - * misc/dist.sh: new file. - -Sun Oct 12 17:18:47 2003 Minero Aoki - - * README.en: update documents. - - * README.ja: ditto. - - * doc.en/changes.html: ditto. - - * doc.en/command.html: ditto. - - * doc.en/debug.html: ditto. - - * doc.en/grammar.html: ditto. - - * doc.en/index.html: ditto. - - * doc.en/parser.html: ditto. - - * doc.en/usage.html: ditto. - - * doc.ja/changes.html: ditto. - - * doc.ja/command.html: ditto. - - * doc.ja/debug.html: ditto. - - * doc.ja/index.html: ditto. - - * doc.ja/parser.html: ditto. - - * doc.ja/usage.html: ditto. - -Sun Oct 12 16:24:46 2003 Minero Aoki - - * sameple/calc-ja.y: simplify. - -Sun Oct 12 16:24:16 2003 Minero Aoki - - * misc/y2racc -> bin/y2racc - - * misc/racc2y -> bin/racc2y - -Sun Oct 12 15:56:30 2003 Minero Aoki - - * bin/racc: follow method name change. - -Sun Oct 12 15:34:14 2003 Minero Aoki - - * Makefile: new target `test'. - - * Makefile: missing $datadir. - -Sun Oct 12 15:33:02 2003 Minero Aoki - - * README.ja: update description. - - * README.en: ditto. - -Sun Oct 12 15:25:23 2003 Minero Aoki - - * lib/racc/compiler.rb: adjust file names. - - * lib/racc/grammarfileparser.rb.in: ditto. - - * lib/racc/grammarfilescanner.rb: ditto. - -Sun Oct 12 15:24:53 2003 Minero Aoki - - * Makefile: new file. - -Sun Oct 12 15:19:57 2003 Minero Aoki - - * BUGS.en: removed. - - * BUGS.ja: removed. - -Sun Oct 12 15:10:38 2003 Minero Aoki - - * racc -> bin/racc - - * .cvsignore -> lib/racc/.cvsignore - - * lib/racc/Makefile: new file. - - * boot.rb -> lib/racc/boot - - * compat.rb -> lib/racc/compat.rb - - * compiler.rb -> lib/racc/compiler.rb - - * grammar.rb -> lib/racc/grammar.rb - - * in.raccp.rb -> lib/racc/grammarfileparser.rb.in - - * raccs.rb -> lib/racc/grammarfilescanner.rb - - * info.rb -> lib/racc/info.rb - - * iset.rb -> lib/racc/iset.rb - - * outpur.rb -> lib/racc/output.rb - - * parser.rb -> lib/racc/parser.rb - - * rubyloader.rb -> lib/racc/rubyloader.rb - - * state.rb -> lib/racc/state.rb - - * ucodep.rb -> lib/racc/usercodeparser.rb - - * cparse/MANIFEST -> ext/racc/cparse/MANIFEST - - * cparse/cparse.c -> ext/racc/cparse/cparse.c - - * cparse/depend -> ext/racc/cparse/depend - - * cparse/extconf.rb -> ext/racc/cparse/extconf.rb - - * cparse/.cvsignore -> ext/racc/cparse/.cvsignore - -Sun Oct 12 15:10:13 2003 Minero Aoki - - * test/test.rb: use /bin/rm if exists. - -Sun Oct 12 14:33:29 2003 Minero Aoki - - * rubyloader.rb: imported from amstd, rev 1.5. - -Sun Oct 12 14:24:47 2003 Minero Aoki - - * boot.rb: reformat only. - - * compiler.rb: ditto. - - * grammar.rb: ditto. - - * in.raccp.rb: ditto. - - * iset.rb: ditto. - - * output.rb: ditto. - - * raccs.rb: ditto. - - * state.rb: ditto. - -Sun Oct 12 14:17:22 2003 Minero Aoki - - * test/test.rb: refactoring. - -Tue Jun 24 03:14:01 2003 Minero Aoki - - * ucodep.rb: typo: Grammer -> Grammar - -Mon May 26 23:06:58 2003 Minero Aoki - - * compiler.rb: update copyright year. - - * grammar.rb: ditto. - - * in.raccp.rb: ditto. - - * info.rb: ditto. - - * iset.rb: ditto. - - * output.rb: ditto. - - * parser.rb: ditto. - - * raccs.rb: ditto. - - * state.rb: ditto. - - * ucodep.rb: ditto. - -Sun May 25 13:21:27 2003 Minero Aoki - - * raccs.rb: update coding style. - -Fri Nov 15 17:53:12 2002 Minero Aoki - - * racc: changes style. - - * parser.rb: ditto. - -Fri Nov 15 17:11:52 2002 Minero Aoki - - version 1.4.3. - -Fri Nov 15 17:08:01 2002 Minero Aoki - - * boot.rb, compiler.rb, grammar.rb, in.raccp.rb, iset.rb, - output.rb, parser.rb, racc, raccs.rb, state.rb, ucodep.rb, - misc/racc2y, misc/y2racc: follows (my) latest coding styles. - -Thu Nov 14 14:39:53 2002 Minero Aoki - - * raccs.rb: explicit method call for VCALL. - -Wed Oct 16 15:45:11 2002 Minero Aoki - - * parser.rb: reformat. - -Fri Aug 9 18:21:01 2002 Minero Aoki - - * cparse/cparse.c: use better variable/macro names. - -Wed Aug 7 08:39:19 2002 Minero Aoki - - * cparse/cparse.c: goto label requires stmt. - -Mon Aug 5 21:53:07 2002 Minero Aoki - - * cparse/cparse.c: grand refine. - - * cparse/depend: re-added from ruby/ext/racc/cparse. - -Tue Jun 4 00:15:28 2002 Minero Aoki - - * boot.rb: allow to omit last 'end'. - -Mon Jun 3 23:29:45 2002 Minero Aoki - - * racc (write_table_file): shebang must placed on first line. - (reported by Hiroyuki Sato) - diff --git a/bundle/ruby/3.2.0/gems/racc-1.7.3/README.ja.rdoc b/bundle/ruby/3.2.0/gems/racc-1.7.3/README.ja.rdoc deleted file mode 100644 index 835f7a2d..00000000 --- a/bundle/ruby/3.2.0/gems/racc-1.7.3/README.ja.rdoc +++ /dev/null @@ -1,66 +0,0 @@ -= Racc - -* http://i.loveruby.net/en/projects/racc/ - -== DESCRIPTION: - - Racc は LALR(1) パーサジェネレータです。 - yacc の Ruby 版に相当します。 - - NOTE: - Ruby 1.8.0 からは Racc のランタイムが標準添付されているので、 - Racc で生成したパーサを安心して配布できます。また Ruby 1.6 系に - 対応させたい場合は racc -E で生成してください。 - - -== 必要環境 - - * Ruby 1.8 以降 - (*) C コンパイラと make - - -== インストール - - gem インストール: - - $ gem install racc - -== テスト - - sample/ 以下にいくつか Racc の文法ファイルのサンプルが用意 - してあります。動くのも動かないのもありますが、少なくとも - calc-ja.y は動くのでこれを処理してみましょう。Racc をインス - トールしたあと - - $ racc -ocalc.rb calc-ja.y - - として下さい。処理は一瞬から数秒で終わるので、 - - $ ruby calc.rb - - を実行してください。ちゃんと動いてますか? - - Racc の文法など詳しいことは doc.ja/ ディレクトリ以下の HTML を - 見てください。 - - -== ライセンス - - このパッケージに付属するファイルの著作権は青木峰郎が保持します。 - ライセンスは Ruby ライセンスです。ただしユーザが書いた規則 - ファイルや、Racc がそこから生成した Ruby スクリプトはその対象 - 外です。好きなライセンスで配布してください。 - - -== バグなど - - Racc を使っていてバグらしき現象に遭遇したら、下記のアドレスまで - メールをください。作者にはバグを修正する義務はありませんがその - 意思はあります。また、そのときはできるだけバグを再現できる文法 - ファイルを付けてください。 - - - 青木峰郎(あおきみねろう) - aamine@loveruby.net - http://i.loveruby.net - diff --git a/bundle/ruby/3.2.0/gems/racc-1.7.3/README.rdoc b/bundle/ruby/3.2.0/gems/racc-1.7.3/README.rdoc deleted file mode 100644 index 1bd45f6c..00000000 --- a/bundle/ruby/3.2.0/gems/racc-1.7.3/README.rdoc +++ /dev/null @@ -1,60 +0,0 @@ -= Racc - -* https://github.com/ruby/racc - -== DESCRIPTION: - - Racc is a LALR(1) parser generator. - It is written in Ruby itself, and generates Ruby program. - -== Requirement - - * Ruby 2.5 or later. - -== Installation - - gem install: - - $ gem install racc - -== Testing Racc - - Racc comes with simple calculator. To compile this, on shell: - - $ racc -o calc calc.y - - This process costs few seconds (or less). Then type: - - $ ruby calc - - ... Does it work? - For details of Racc, see HTML documents placed under 'doc/en/' - and sample grammar files under 'sample/'. - -== Release flow - -* Update VERSION number of these files - * RACC_VERSION in "ext/racc/com/headius/racc/Cparse.java" - * VERSION in "lib/racc/info.rb" -* Release as a gem by rake release with CRuby and JRuby because Racc gem provides 2 packages -* Create new release on {GitHub}[https://github.com/ruby/racc/releases] - -== License - - Racc is distributed under the same terms of ruby. - (see the file COPYING). Note that you do NOT need to follow - ruby license for your own parser (racc outputs). - You can distribute those files under any licenses you want. - - -== Bug Reports - - Any kind of bug report is welcome. - If you find a bug of Racc, please report an issue at - https://github.com/ruby/racc/issues. Your grammar file, - debug output generated by "racc -g", are helpful. - - - Minero Aoki - aamine@loveruby.net - http://i.loveruby.net diff --git a/bundle/ruby/3.2.0/gems/racc-1.7.3/TODO b/bundle/ruby/3.2.0/gems/racc-1.7.3/TODO deleted file mode 100644 index 22ffd7fc..00000000 --- a/bundle/ruby/3.2.0/gems/racc-1.7.3/TODO +++ /dev/null @@ -1,5 +0,0 @@ -* check 'error' token handling. -* interactive transition table monitor. -* support backtracking. -* output Ruby extension library? -* LL(k)? (But it should not be called Racc) diff --git a/bundle/ruby/3.2.0/gems/racc-1.7.3/bin/racc b/bundle/ruby/3.2.0/gems/racc-1.7.3/bin/racc deleted file mode 100755 index 717c9307..00000000 --- a/bundle/ruby/3.2.0/gems/racc-1.7.3/bin/racc +++ /dev/null @@ -1,326 +0,0 @@ -#!/usr/bin/env ruby -# -# -# -# Copyright (c) 1999-2006 Minero Aoki -# -# This program is free software. -# You can distribute/modify this program under the same terms of ruby. -# see the file "COPYING". - -require 'racc/static' -require 'optparse' - -def main - output = nil - debug_parser = false - make_logfile = false - logfilename = nil - make_executable = false - rubypath = nil - embed_runtime = false - frozen_strings = false - debug_flags = Racc::DebugFlags.new - line_convert = true - line_convert_all = false - omit_action_call = true - superclass = nil - check_only = false - verbose = false - profiler = RaccProfiler.new(false) - - parser = OptionParser.new - parser.banner = "Usage: #{File.basename($0)} [options] " - parser.on('-o', '--output-file=PATH', - 'output file name [.tab.rb]') {|name| - output = name - } - parser.on('-t', '--debug', 'Outputs debugging parser.') {|fl| - debug_parser = fl - } - parser.on('-g', 'Equivalent to -t (obsolete).') {|fl| - $stderr.puts "racc -g is obsolete. Use racc -t instead." if $VERBOSE - debug_parser = fl - } - parser.on('-v', '--verbose', - 'Creates .output log file.') {|fl| - make_logfile = fl - } - parser.on('-O', '--log-file=PATH', - 'Log file name [.output]') {|path| - make_logfile = true - logfilename = path - } - parser.on('-e', '--executable [RUBYPATH]', 'Makes executable parser.') {|path| - make_executable = true - rubypath = (path == 'ruby' ? nil : path) - } - parser.on('-E', '--embedded', "Embeds Racc runtime in output.") { - embed_runtime = true - } - parser.on('-F', '--frozen', "Add frozen_string_literals: true.") { - frozen_strings = true - } - parser.on('--line-convert-all', 'Converts line numbers of user codes.') { - line_convert_all = true - } - parser.on('-l', '--no-line-convert', 'Never convert line numbers.') { - line_convert = false - line_convert_all = false - } - parser.on('-a', '--no-omit-actions', 'Never omit actions.') { - omit_action_call = false - } - parser.on('--superclass=CLASSNAME', - 'Uses CLASSNAME instead of Racc::Parser.') {|name| - superclass = name - } - parser.on('-C', '--check-only', 'Checks syntax and quit immediately.') {|fl| - check_only = fl - } - parser.on('-S', '--output-status', 'Outputs internal status time to time.') { - verbose = true - } - parser.on('-P', 'Enables generator profile') { - profiler = RaccProfiler.new(true) - } - parser.on('-D flags', "Flags for Racc debugging (do not use).") {|flags| - debug_flags = Racc::DebugFlags.parse_option_string(flags) - } - #parser.on('--no-extensions', 'Run Racc without any Ruby extension.') { - # Racc.const_set :Racc_No_Extensions, true - #} - parser.on('--version', 'Prints version and quit.') { - puts "racc version #{Racc::Version}" - exit 0 - } - parser.on('--runtime-version', 'Prints runtime version and quit.') { - printf "racc runtime version %s; %s\n", - Racc::Parser::Racc_Runtime_Version, - if Racc::Parser.racc_runtime_type == 'ruby' - sprintf('ruby core version %s', - Racc::Parser::Racc_Runtime_Core_Version_R) - else - sprintf('c core version %s', - Racc::Parser::Racc_Runtime_Core_Version_C) - end - exit 0 - } - parser.on('--copyright', 'Prints copyright and quit.') { - puts Racc::Copyright - exit 0 - } - parser.on('--help', 'Prints this message and quit.') { - puts parser.help - exit 1 - } - begin - parser.parse! - rescue OptionParser::ParseError => err - $stderr.puts err.message - $stderr.puts parser.help - exit 1 - end - if ARGV.empty? - $stderr.puts 'no input' - exit 1 - end - if ARGV.size > 1 - $stderr.puts 'too many input' - exit 1 - end - input = ARGV[0] - - begin - $stderr.puts 'Parsing grammar file...' if verbose - result = profiler.section('parse') { - parser = Racc::GrammarFileParser.new(debug_flags) - parser.parse(File.read(input), File.basename(input)) - } - if check_only - $stderr.puts 'syntax ok' - exit 0 - end - - $stderr.puts 'Generating LALR states...' if verbose - states = profiler.section('nfa') { - Racc::States.new(result.grammar).nfa - } - - $stderr.puts "Resolving #{states.size} states..." if verbose - profiler.section('dfa') { - states.dfa - } - - $stderr.puts 'Creating parser file...' if verbose - params = result.params.dup - params.filename = File.basename(input) - # Overwrites parameters given by a grammar file with command line options. - params.superclass = superclass if superclass - params.omit_action_call = true if omit_action_call - # From command line option - if make_executable - params.make_executable = true - params.interpreter = rubypath - end - params.debug_parser = debug_parser - params.convert_line = line_convert - params.convert_line_all = line_convert_all - params.embed_runtime = embed_runtime - params.frozen_strings = frozen_strings - profiler.section('generation') { - generator = Racc::ParserFileGenerator.new(states, params) - generator.generate_parser_file(output || make_filename(input, '.tab.rb')) - } - - if make_logfile - profiler.section('logging') { - $stderr.puts 'Creating log file...' if verbose - logfilename ||= make_filename(output || File.basename(input), '.output') - File.open(logfilename, 'w') {|f| - Racc::LogFileGenerator.new(states, debug_flags).output f - } - } - end - if debug_flags.status_logging - log_useless states.grammar - log_conflict states - else - has_useless = report_useless states.grammar - has_conflicts = report_conflict states - if has_useless || has_conflicts - preamble = make_logfile ? 'C' : 'Turn on logging with "-v" and c' - $stderr.puts %Q{#{preamble}heck ".output" file for details} - end - end - - profiler.report - rescue Racc::Error, Errno::ENOENT, Errno::EPERM => err - raise if $DEBUG or debug_flags.any? - lineno = err.message.slice(/\A\d+:/).to_s - $stderr.puts "#{File.basename $0}: #{input}:#{lineno} #{err.message.strip}" - exit 1 - end -end - -def make_filename(path, suffix) - path.sub(/(?:\..*?)?\z/, suffix) -end - -LIST_LIMIT = 10 -def report_list(enum, label) - c = enum.count - if c > 0 - $stderr.puts "#{c} #{label}:" - enum.first(LIST_LIMIT).each do |item| - $stderr.puts " #{yield item}" - end - $stderr.puts " ..." if c > LIST_LIMIT - end -end - -# @return [Boolean] if anything was reported -def report_conflict(states) - if states.should_report_srconflict? - reported = true - $stderr.puts "#{states.n_srconflicts} shift/reduce conflicts" - end - if states.rrconflict_exist? - reported = true - $stderr.puts "#{states.n_rrconflicts} reduce/reduce conflicts" - end - reported -end - -def log_conflict(states) - logging('w') {|f| - f.puts "ex#{states.grammar.n_expected_srconflicts}" - if states.should_report_srconflict? - f.puts "sr#{states.n_srconflicts}" - end - if states.rrconflict_exist? - f.puts "rr#{states.n_rrconflicts}" - end - } -end - -# @return [Boolean] if anything was reported -def report_useless(grammar) - reported = report_list(grammar.each_useless_nonterminal, 'useless nonterminals', &:to_s) - - reported ||= report_list(grammar.each_useless_rule, 'useless rules') { |r| "##{r.ident} (#{r.target})" } - - if grammar.start.useless? - $stderr.puts 'fatal: start symbol does not derive any sentence' - reported = true - end - reported -end - -def log_useless(grammar) - logging('a') {|f| - if grammar.useless_nonterminal_exist? - f.puts "un#{grammar.n_useless_nonterminals}" - end - if grammar.useless_rule_exist? - f.puts "ur#{grammar.n_useless_rules}" - end - } -end - -def logging(mode, &block) - File.open("log/#{File.basename(ARGV[0])}", mode, &block) -end - -class RaccProfiler - def initialize(really) - @really = really - @log = [] - unless ::Process.respond_to?(:times) - # Ruby 1.6 - @class = ::Time - else - @class = ::Process - end - end - - def section(name) - if @really - t1 = @class.times.utime - result = yield - t2 = @class.times.utime - @log.push [name, t2 - t1] - result - else - yield - end - end - - def report - return unless @really - f = $stderr - total = cumulative_time() - f.puts '--task-----------+--sec------+---%-' - @log.each do |name, time| - f.printf "%-19s %s %3d%%\n", name, pjust(time,4,4), (time/total*100).to_i - end - f.puts '-----------------+-----------+-----' - f.printf "%-20s%s\n", 'total', pjust(total,4,4) - end - - private - - def cumulative_time - t = @log.inject(0) {|sum, (name, time)| sum + time } - t == 0 ? 0.01 : t - end - - def pjust(num, i, j) - m = /(\d+)(\.\d+)?/.match(num.to_s) - str = m[1].rjust(i) - str.concat m[2].ljust(j+1)[0,j+1] if m[2] - str - end -end - -main diff --git a/bundle/ruby/3.2.0/gems/racc-1.7.3/doc/en/grammar.en.rdoc b/bundle/ruby/3.2.0/gems/racc-1.7.3/doc/en/grammar.en.rdoc deleted file mode 100644 index def15b11..00000000 --- a/bundle/ruby/3.2.0/gems/racc-1.7.3/doc/en/grammar.en.rdoc +++ /dev/null @@ -1,226 +0,0 @@ -= Racc Grammar File Reference - -== Global Structure - -== Class Block and User Code Block - -There are two top-level blocks: the 'class' block, and the 'user code' -block. The 'user code' block MUST be after the 'class' block. - -== Comment - -Comments can be added about everywhere. Two comment styles are -supported: Ruby style (`# ...`) and C style (`/* ... */`). - -== Class Block - -The class block is formed like this: --- -class CLASS_NAME - [precedence table] - [token declarations] - [expected number of S/R conflict] - [options] - [semantic value conversion] - [start rule] -rule - GRAMMARS --- -CLASS_NAME is a name of parser class. -This is the name of generating parser class. - -If CLASS_NAME includes '::', Racc outputs module clause. -For example, writing "class M::C" causes creating the code bellow: --- -module M - class C - : - : - end -end --- - -== Grammar Block - -The grammar block describes the grammar -to be understood by parser. Syntax is: --- -(token): (token) (token) (token).... (action) - -(token): (token) (token) (token).... (action) - | (token) (token) (token).... (action) - | (token) (token) (token).... (action) --- -(action) is an action which is executed when its (token)s are found. -(action) is a ruby code block, which is surrounded by braces: --- -{ print val[0] - puts val[1] } --- -Note that you cannot use '%' string, here document, '%r' regexp in action. - -Actions can be omitted. -When it is omitted, '' (empty string) is used. - -A return value of action is a value of left side value ($$). -It is value of result, or returned value by "return" statement. - -Here is an example of whole grammar block. --- -rule - goal: definition rules source { result = val } - - definition: /* none */ { result = [] } - | definition startdesig { result[0] = val[1] } - | definition - precrule # this line continue from upper line - { - result[1] = val[1] - } - - startdesig: START TOKEN --- -You can use following special local variables in action. - - * result ($$) - -The value of left-hand side (lhs). A default value is val[0]. - - * val ($1,$2,$3...) - -An array of value of right-hand side (rhs). - - * _values (...$-2,$-1,$0) - -A stack of values. -DO NOT MODIFY this stack unless you know what you are doing. - -== Operator Precedence - -This function is equal to '%prec' in yacc. -To designate this block: --- -prechigh - nonassoc '++' - left '*' '/' - left '+' '-' - right '=' -preclow --- -`right' is yacc's %right, `left' is yacc's %left. - -`=' + (symbol) means yacc's %prec: --- -prechigh - nonassoc UMINUS - left '*' '/' - left '+' '-' -preclow - -rule - exp: exp '*' exp - | exp '-' exp - | '-' exp =UMINUS # equals to "%prec UMINUS" - : - : --- - -== expect - -Racc supports Bison's "expect" directive to declare the expected -number of shift/reduce conflicts. --- -class MyParser - expect 3 -rule - : - : --- -Then warnings are issued only when the effective number of conflicts differs. - - -== Declaring Tokens - -Declaring tokens avoids many bugs. - -Racc outputs warnings for declared tokens that do not exist, or existing tokens not declared. -The syntax is: --- -token TOKEN_NAME AND_IS_THIS - ALSO_THIS_IS AGAIN_AND_AGAIN THIS_IS_LAST --- - -== Options - -You can write options for racc command in your racc file. --- -options OPTION OPTION ... --- -Options are: - - * omit_action_call - -omit empty action call or not. - - * result_var - -use/does not use local variable "result" - -You can use 'no_' prefix to invert its meanings. - -== Converting Token Symbol - -Token symbols are, as default, - - * naked token strings in racc file (TOK, XFILE, this_is_token, ...) - --> symbol (:TOK, :XFILE, :this_is_token, ...) - * quoted strings (':', '.', '(', ...) - --> same string (':', '.', '(', ...) - -You can change this default using a "convert" block. -Here is an example: --- -convert - PLUS 'PlusClass' # We use PlusClass for symbol of `PLUS' - MIN 'MinusClass' # We use MinusClass for symbol of `MIN' -end --- -We can use almost all ruby value can be used by token symbol, -except 'false' and 'nil'. These are causes unexpected parse error. - -If you want to use String as token symbol, special care is required. -For example: --- -convert - class '"cls"' # in code, "cls" - PLUS '"plus\n"' # in code, "plus\n" - MIN "\"minus#{val}\"" # in code, \"minus#{val}\" -end --- - -== Start Rule - -'%start' in yacc. This changes the start symbol. --- -start real_target --- - - -== User Code Block - -A "User Code Block" is a piece of Ruby source code copied in the output. -There are three user code blocks, "header" "inner" and "footer". - -User code blocks are introduced by four '-' at the beginning of a line, -followed by a single-word name: --- ----- header - ruby statement - ruby statement - ruby statement - ----- inner - ruby statement - : - : --- diff --git a/bundle/ruby/3.2.0/gems/racc-1.7.3/doc/en/grammar2.en.rdoc b/bundle/ruby/3.2.0/gems/racc-1.7.3/doc/en/grammar2.en.rdoc deleted file mode 100644 index 8e9b9ddf..00000000 --- a/bundle/ruby/3.2.0/gems/racc-1.7.3/doc/en/grammar2.en.rdoc +++ /dev/null @@ -1,219 +0,0 @@ -= Racc Grammar File Reference - -== Global Structure - -== Class Block and User Code Block - -There are two blocks on the toplevel. One is the 'class' block, the other is the 'user code' -block. The 'user code' block MUST be placed after the 'class' block. - -== Comments - -You can insert comments about all places. Two styles of comments can be used, Ruby style '#.....' and C style '/\*......*\/'. - -== Class Block - -The class block is formed like this: - - class CLASS_NAME - [precedence table] - [token declarations] - [expected number of S/R conflicts] - [options] - [semantic value conversion] - [start rule] - rule - GRAMMARS - -CLASS_NAME is a name of the parser class. This is the name of the generating parser -class. - -If CLASS_NAME includes '::', Racc outputs the module clause. For example, writing -"class M::C" causes the code below to be created: - - module M - class C - : - : - end - end - -== Grammar Block - -The grammar block describes grammar which is able to be understood by the parser. -Syntax is: - - (token): (token) (token) (token).... (action) - - (token): (token) (token) (token).... (action) - | (token) (token) (token).... (action) - | (token) (token) (token).... (action) - -(action) is an action which is executed when its (token)s are found. -(action) is a ruby code block, which is surrounded by braces: - - { print val[0] - puts val[1] } - -Note that you cannot use '%' string, here document, '%r' regexp in action. - -Actions can be omitted. When it is omitted, '' (empty string) is used. - -A return value of action is a value of the left side value ($$). It is the value of the -result, or the returned value by `return` statement. - -Here is an example of the whole grammar block. - - rule - goal: definition rules source { result = val } - - definition: /* none */ { result = [] } - | definition startdesig { result[0] = val[1] } - | definition - precrule # this line continues from upper line - { - result[1] = val[1] - } - - startdesig: START TOKEN - -You can use the following special local variables in action: - -* result ($$) - -The value of the left-hand side (lhs). A default value is val[0]. - -* val ($1,$2,$3...) - -An array of value of the right-hand side (rhs). - -* _values (...$-2,$-1,$0) - -A stack of values. DO NOT MODIFY this stack unless you know what you are doing. - -== Operator Precedence - -This function is equal to '%prec' in yacc. -To designate this block: - - prechigh - nonassoc '++' - left '*' '/' - left '+' '-' - right '=' - preclow - -`right` is yacc's %right, `left` is yacc's %left. - -`=` + (symbol) means yacc's %prec: - - prechigh - nonassoc UMINUS - left '*' '/' - left '+' '-' - preclow - - rule - exp: exp '*' exp - | exp '-' exp - | '-' exp =UMINUS # equals to "%prec UMINUS" - : - : - -== expect - -Racc has bison's "expect" directive. - - # Example - - class MyParser - expect 3 - rule - : - : - -This directive declares "expected" number of shift/reduce conflicts. If -"expected" number is equal to real number of conflicts, Racc does not print -conflict warning message. - -== Declaring Tokens - -By declaring tokens, you can avoid many meaningless bugs. If declared token -does not exist or existing token does not decleared, Racc output warnings. -Declaration syntax is: - - token TOKEN_NAME AND_IS_THIS - ALSO_THIS_IS AGAIN_AND_AGAIN THIS_IS_LAST - -== Options - -You can write options for Racc command in your Racc file. - - options OPTION OPTION ... - -Options are: - -* omit_action_call - -omits empty action call or not. - -* result_var - -uses local variable "result" or not. - -You can use 'no_' prefix to invert their meanings. - -== Converting Token Symbol - -Token symbols are, as default, - - * naked token string in Racc file (TOK, XFILE, this_is_token, ...) - --> symbol (:TOK, :XFILE, :this_is_token, ...) - * quoted string (':', '.', '(', ...) - --> same string (':', '.', '(', ...) - -You can change this default by "convert" block. -Here is an example: - - convert - PLUS 'PlusClass' # We use PlusClass for symbol of `PLUS' - MIN 'MinusClass' # We use MinusClass for symbol of `MIN' - end - -We can use almost all ruby value can be used by token symbol, -except 'false' and 'nil'. These cause unexpected parse error. - -If you want to use String as token symbol, special care is required. -For example: - - convert - class '"cls"' # in code, "cls" - PLUS '"plus\n"' # in code, "plus\n" - MIN "\"minus#{val}\"" # in code, \"minus#{val}\" - end - -== Start Rule - -'%start' in yacc. This changes start rule. - - start real_target - -== User Code Block - -"User Code Block" is a Ruby source code which is copied to output. There are -three user code blocks, "header" "inner" and "footer". - -Format of user code is like this: - - ---- header - ruby statement - ruby statement - ruby statement - - ---- inner - ruby statement - : - : - -If four '-' exist on the line head, Racc treats it as the beginning of the -user code block. The name of the user code block must be one word. diff --git a/bundle/ruby/3.2.0/gems/racc-1.7.3/doc/ja/command.ja.html b/bundle/ruby/3.2.0/gems/racc-1.7.3/doc/ja/command.ja.html deleted file mode 100644 index 52eccfd4..00000000 --- a/bundle/ruby/3.2.0/gems/racc-1.7.3/doc/ja/command.ja.html +++ /dev/null @@ -1,99 +0,0 @@ -

    Raccコマンドリファレンス

    -

    -racc [-ofilename] [--output-file=filename] - [-erubypath] [--executable=rubypath] - [-v] [--verbose] - [-Ofilename] [--log-file=filename] - [-g] [--debug] - [-E] [--embedded] - [-F] [--frozen] - [-l] [--no-line-convert] - [-c] [--line-convert-all] - [-a] [--no-omit-actions] - [-C] [--check-only] - [-S] [--output-status] - [--version] [--copyright] [--help] grammarfile -

    - -
    -
    filename -
    -Raccの文法ファイルを指定します。拡張子には特に制限はありません。 -
    -
    -ooutfile, --output-file=outfile -
    -作成するクラスをかきこむファイル名を指定します。デフォルトは.tab.rbです。 -
    -
    -Ofilename, --log-file=filename -
    --v オプションをつけた時に生成するログファイルの名前を -filename に変更します。 -デフォルトは filename.output です。 -
    -
    -erubypath, --executable=rubypath -
    -実行可能ファイルを生成します。rubypathは Ruby 本体のパスです。 -rubypathを単に 'ruby' にした時には Racc が動作している -Ruby のパスを使用します。 -
    -
    -v, --verbose -
    -ファイル "filename".output に詳細な解析情報を出力します。 -
    -
    -g, --debug -
    -出力するコードにデバッグ用コードを加えます。-g をつけて生成したパーサで -@yydebug を true にセットすると、デバッグ用のコードが出力されます。
    --g をつけるだけでは何もおこりませんので注意してください。 -
    -
    -E, --embedded -
    -ランタイムルーチンをすべて含んだコードを生成します。 -つまり、このオプションをつけて生成したコードは Ruby さえあれば動きます。 -
    -
    -F, --frozen -
    -Add frozen_string_literals: true. -
    -
    -C, --check-only -
    -(文法ファイルの) 文法のチェックだけをして終了します。 -
    -
    -S, --output-status -
    -進行状況を逐一報告します。 -
    -
    -l, --no-line-convert -
    -

    -Ruby では例外が発生した時のファイル名や行番号を表示してくれますが、 -Racc の生成したパーサは、デフォルトではこの場合のファイル名・行番号を -文法ファイルでのものに置きかえます。このフラグはその機能をオフにします。 -

    -

    -ruby 1.4.3 以前のバージョンではバグのために定数の参照に失敗する -場合があるので、定数参照に関してなにかおかしいことがおこったらこのフラグを -試してみてください。 -

    -
    -
    -c, --line-convert-all -
    -アクションと inner に加え header footer の行番号も変換します。 -header と footer がつながっているような場合には使わないでください。 -
    -a, --no-omit-actions -
    -全てのアクションに対応するメソッド定義と呼び出しを行います。 -例えアクションが省略されていても空のメソッドを生成します。 -
    -
    --version -
    -Racc のバージョンを出力して終了します。 -
    -
    --copyright -
    -著作権表示を出力して終了します。 -
    --help -
    -オプションの簡単な説明を出力して終了します。 -
    -
    diff --git a/bundle/ruby/3.2.0/gems/racc-1.7.3/doc/ja/debug.ja.rdoc b/bundle/ruby/3.2.0/gems/racc-1.7.3/doc/ja/debug.ja.rdoc deleted file mode 100644 index 90f70f68..00000000 --- a/bundle/ruby/3.2.0/gems/racc-1.7.3/doc/ja/debug.ja.rdoc +++ /dev/null @@ -1,36 +0,0 @@ -= パーサのデバッグ - -ここでは、Racc を使っていくうえで遭遇しそうな問題について書きます。 - -== 文法ファイルがパースエラーになる - -エラーメッセージに出ている行番号のあたりを見て間違いを -探してください。ブロックを閉じる行でエラーになる場合は、 -どこかで開き括弧などを増やしてしまっている可能性が高いです。 - -== なんたら conflict って言われた - -一番ありがちで一番面倒な問題は衝突 (conflict) でしょう。 -文法中に衝突があると、racc はコンパイル後に -「5 shift/reduce conflict」のようなメッセージを表示します。 --v をつけると出力される .output ファイルからはさらに詳しい情報が得られます。 -それをどう使うか、とかそういうことに関しては、それなりの本を読んでください。 -とてもここに書けるような単純な話ではありません。 -当然ながら『Ruby を 256 倍使うための本 無道編』(青木峰郎著)がお勧めです。 - -== パーサは問題なく生成できたけど予想どおりに動かない - -racc に -g オプションをつけてパーサを出力すると、デバッグ用のコードが -付加されます。ここで、パーサクラスのインスタンス変数 @yydebug を true に -しておいてから do_parse/yyparse を呼ぶと、デバッグ用メッセージが出力 -されます。パーサが動作する様子が直接見えますので、完全に現在の状態を -把握できます。これを見てどこがおかしいのかわかったらあとは直すだけ。 - -== next_token に関して - -いまだ自分でも忘れることが多いのが -「送るトークンが尽きたら [false,なにか] を送る」ということです。 -ちなみに Racc 0.10.2 以降では一度 [false,なにか] を受け取ったら -それ以上 next_token は呼ばないことが保証されています。 - -追記: 最近は [false,なにか] ではなく nil でもよいことになった。 diff --git a/bundle/ruby/3.2.0/gems/racc-1.7.3/doc/ja/grammar.ja.rdoc b/bundle/ruby/3.2.0/gems/racc-1.7.3/doc/ja/grammar.ja.rdoc deleted file mode 100644 index fd414a05..00000000 --- a/bundle/ruby/3.2.0/gems/racc-1.7.3/doc/ja/grammar.ja.rdoc +++ /dev/null @@ -1,348 +0,0 @@ -= 規則ファイル文法リファレンス - -== 文法に関する前バージョンとの非互換 - - * (1.2.5) ユーザーコードを連結する時、外部ファイルよりも - 埋めこんであるコードを先に連結します。 - * (1.1.6) 新しいディレクティブ options が追加されました。 - * (1.1.5) 予約語 token の意味が変更になりました。 - * (0.14) ルールの最後のセミコロンが省略可能になりました。 - また、token prechigh などが予約語でなくなりました。 - * (10.2) prepare が header に driver が footer になりました。 - 今はそのままでも使えますが、2.0 からは対応しません。 - * (0.10) class に対応する end がなくなりました。 - * (0.9) ダサダサのピリオド方式をやめて { と } で囲むようにしました。 - -== 全体の構造 - -トップレベルは、規則部とユーザーコード部に分けられます。 -ユーザーコード部はクラス定義の後に来なければいけません。 - -=== コメント - -文法ファイルには、一部例外を除いて、ほとんどどこにでもコメントを -書くことができます。コメントは、Rubyの #.....(行末) スタイルと、 -Cの /*......*/ スタイルを使うことができます。 - -=== 規則部 - -規則部は以下のような形をしています。 --- -class クラス名 [< スーパークラス] - [演算子順位] - [トークン宣言] - [オプション] - [expect] - [トークンシンボル値おきかえ] - [スタート規則] -rule - 文法記述 --- -"クラス名"はここで定義するパーサクラスの名前です。 -これはそのままRubyのクラス名になります。 - -また M::C のように「::」を使った名前を使うと、クラス定義を -モジュール M の中にネストさせます。つまり class M::C ならば --- -module M - class C < Racc::Parser - いろいろ - end -end --- -のように出力します。 - -さらに、Ruby と同じ構文でスーパークラスを指定できます。 -ただしこの指定をするとパーサの動作に重大な影響を与えるので、 -特に必要がない限り指定してはいけません。これは将来の拡張の -ために用意したもので、現在指定する必然性はあまりありません。 - -=== 文法の記述 - -racc で生成するパーサが理解できる文法を記述します。 -文法は、予約語 rule と end の間に、以下のような書式で書きます。 --- -トークン: トークンの並び アクション - -トークン: トークンの並び アクション - | トークンの並び アクション - | トークンの並び アクション - (必要なだけ同じようにつづける) --- -アクションは { } で囲みます。アクションでは Ruby の文はほとんど -使えますが、一部だけは非対応です。対応していないものは以下のとおり。 - - * ヒアドキュメント - * =begin ... =end 型コメント - * スペースで始まる正規表現 - * ごくまれに % の演算。普通に演算子のまわりにスペースを入れていれば問題なし - -このあたりに関しては完全な対応はまず無理です。あきらめてください。 - -左辺の値($$)は、オプションによって返し方がかわります。まずデフォルトでは -ローカル変数 result (そのデフォルト値は val[0])が 左辺値を表し、アクション -ブロックを抜けた時の result の値が左辺値になります。または明示的に return -で返した場合もこの値になります。一方、options で no_result_var を指定した -場合、左辺値はアクションブロックの最後の文の値になります (Ruby のメソッドと -同じ)。 - -どちらの場合でもアクションは省略でき、省略した場合の左辺値は常に val[0] です。 - -以下に文法記述の全体の例をしめします。 --- -rule - goal: def ruls source - { - result = val - } - - def : /* none */ - { - result = [] - } - | def startdesig - { - result[0] = val[1] - } - | def - precrule # これは上の行の続き - { - result[1] = val[1] - } -(略) --- -アクション内では特別な意味をもった変数がいくつか使えます。 -そのような変数を以下に示します。括弧の中は yacc での表記です。 - - * result ($$) - -左辺の値。初期値は val[0] です。 - - * val ($1,$2,$3…) - -右辺の記号の値の配列。Ruby の配列なので当然インデックスはゼロから始まります。 -この配列は毎回作られるので自由に変更したり捨てたりして構いません。 - - * _values (...,$-2,$-1,$0) - -値スタック。Racc コアが使っているオブジェクトがそのまま渡されます。 -この変数の意味がわかる人以外は絶対に変更してはいけません。 - -またアクションの特別な形式に、埋めこみアクションというものがあります。 -これはトークン列の途中の好きなところに記述することができます。 -以下に埋めこみアクションの例を示します。 --- -target: A B { puts 'test test' } C D { normal action } --- -このように記述すると A B を検出した時点で puts が実行されます。 -また、埋めこみアクションはそれ自体が値を持ちます。つまり、以下の例において --- -target: A { result = 1 } B { p val[1] } --- -最後にある p val[1] は埋めこみアクションの値 1 を表示します。 -B の値ではありません。 - -意味的には、埋めこみアクションは空の規則を持つ非終端記号を追加することと -全く同じ働きをします。つまり、上の例は次のコードと完全に同じ意味です。 --- -target : A nonterm B { p val[1] } -nonterm : /* 空の規則 */ { result = 1 } --- - -=== 演算子優先順位 - -あるトークン上でシフト・還元衝突がおこったとき、そのトークンに -演算子優先順位が設定してあると衝突を解消できる場合があります。 -そのようなものとして特に有名なのは数式の演算子と if...else 構文です。 - -優先順位で解決できる文法は、うまく文法をくみかえてやれば -優先順位なしでも同じ効果を得ることができます。しかしたいていの -場合は優先順位を設定して解決するほうが文法を簡単にできます。 - -シフト・還元衝突がおこったとき、Racc はまずその規則に順位が設定 -されているか調べます。規則の順位は、その規則で一番うしろにある -終端トークンの優先順位です。たとえば --- -target: TERM_A nonterm_a TERM_B nonterm_b --- -のような規則の順位はTERM_Bの優先順位になります。もしTERM_Bに -優先順位が設定されていなかったら、優先順位で衝突を解決することは -できないと判断し、「Shift/Reduce conflict」を報告します。 - -演算子の優先順位はつぎのように書いて定義します。 --- -prechigh - nonassoc PLUSPLUS - left MULTI DIVIDE - left PLUS MINUS - right '=' -preclow --- -prechigh に近い行にあるほど優先順位の高いトークンです。上下をまるごと -さかさまにして preclow...prechigh の順番に書くこともできます。left -などは必ず行の最初になければいけません。 - -left right nonassoc はそれぞれ「結合性」を表します。結合性によって、 -同じ順位の演算子の規則が衝突した場合にシフト還元のどちらをとるかが -決まります。たとえば --- -a - b - c --- -が --- -(a - b) - c --- -になるのが左結合 (left) です。四則演算は普通これです。 -一方 --- -a - (b - c) --- -になるのが右結合 (right) です。代入のクオートは普通 right です。 -またこのように演算子が重なるのはエラーである場合、非結合 (nonassoc) です。 -C 言語の ++ や単項のマイナスなどがこれにあたります。 - -ところで、説明したとおり通常は還元する規則の最後のトークンが順位を -決めるのですが、ある規則に限ってそのトークンとは違う順位にしたいことも -あります。例えば符号反転のマイナスは引き算のマイナスより順位を高く -しないといけません。このような場合 yacc では %prec を使います。 -racc ではイコール記号を使って同じことをできます。 --- -prechigh - nonassoc UMINUS - left '*' '/' - left '+' '-' -preclow -(略) -exp: exp '*' exp - | exp '-' exp - | '-' exp = UMINUS # ここだけ順位を上げる --- -このように記述すると、'-' exp の規則の順位が UMINUS の順位になります。 -こうすることで符号反転の '-' は '*' よりも順位が高くなるので、 -意図どおりになります。 - -=== トークン宣言 - -トークン(終端記号)のつづりを間違えるというのはよくあることですが、 -発見するのはなかなか難しいものです。1.1.5 からはトークンを明示的に -宣言することで、宣言にないトークン / 宣言にだけあるトークンに対して -警告が出るようになりました。yacc の %token と似ていますが最大の違いは -racc では必須ではなく、しかもエラーにならず警告だけ、という点です。 - -トークン宣言は以下のように書きます。 --- -token A B C D - E F G H --- -トークンのリストを複数行にわたって書けることに注目してください。 -racc では一般に「予約語」は行の先頭に来た時だけ予約語とみなされるので -prechigh などもシンボルとして使えます。ただし深淵な理由から end だけは -どうやっても予約語になってしまいます。 - -=== オプション - -racc のコマンドラインオプションの一部をファイル中にデフォルト値 -として記述することができます。 --- -options オプション オプション … --- -現在ここで使えるのは - - * omit_action_call - -空のアクション呼び出しを省略する - - * result_var - -変数 result を使う - -です。 -それぞれ no_ を頭につけることで意味を反転できます。 - -=== expect - -実用になるパーサはたいてい無害な shift/reduce conflict を含みます。 -しかし文法ファイルを書いた本人はそれを知っているからいいですが、 -ユーザが文法ファイルを処理した時に「conflict」と表示されたら -不安に思うでしょう。そのような場合、以下のように書いておくと -shift/reduce conflict のメッセージを抑制できます。 --- -expect 3 --- -この場合 shift/reduce conflict はぴったり三つでなければいけません。 -三つでない場合はやはり表示が出ます (ゼロでも出ます)。 -また reduce/reduce conflict の表示は抑制できません。 - -=== トークンシンボル値の変更 - -トークンシンボルを表す値は、デフォルトでは - - * 文法中、引用符でかこまれていないもの (RULEとかXENDとか) - →その名前の文字列を intern して得られるシンボル (1.4 では Fixnum) - * 引用符でかこまれているもの(':'とか'.'とか) - →その文字列そのまま - -となっていますが、たとえば他の形式のスキャナがすでに存在する場合などは、 -これにあわせなければならず、このままでは不便です。このような場合には、 -convert 節を加えることで、トークンシンボルを表す値を変えることができます。 -以下がその例です。 --- -convert - PLUS 'PlusClass' #→ PlusClass - MIN 'MinusClass' #→ MinusClass -end --- -デフォルトではトークンシンボル PLUS に対してはトークンシンボル値は -:PLUS ですが、上のような記述がある場合は PlusClass になります。 -変換後の値は false・nil 以外ならなんでも使えます。 - -変換後の値として文字列を使うときは、次のように引用符を重ねる必要があります。 --- -convert - PLUS '"plus"' #→ "plus" -end --- -また、「'」を使っても生成された Ruby のコード上では「"」になるので -注意してください。バックスラッシュによるクオートは有効ですが、バック -スラッシュは消えずにそのまま残ります。 --- -PLUS '"plus\n"' #→ "plus\n" -MIN "\"minus#{val}\"" #→ \"minus#{val}\" --- - -=== スタート規則 - -パーサをつくるためには、どの規則が「最初の」規則か、ということを Racc におしえて -やらなければいけません。それを明示的に書くのがスタート規則です。スタート規則は -次のように書きます。 --- -start real_target --- -start は行の最初にこなければいけません。このように書くと、ファイルで -一番最初に出てくる real_target の規則をスタート規則として使います。 -省略した場合は、ファイルの最初の規則がスタート規則になります。普通は -最初の規則を一番上にかくほうが書きやすく、わかりやすくなりますから、 -この記法はあまりつかう必要はないでしょう。 - -=== ユーザーコード部 - -ユーザーコードは、パーサクラスが書きこまれるファイルに、 -アクションの他にもコードを含めたい時に使います。このようなものは -書きこまれる場所に応じて三つ存在し、パーサクラスの定義の前が -header、クラスの定義中(の冒頭)が inner、定義の後が footer です。 -ユーザコードとして書いたものは全く手を加えずにそのまま連結されます。 - -ユーザーコード部の書式は以下の通りです。 --- ----- 識別子 - ruby の文 - ruby の文 - ruby の文 - ----- 識別子 - ruby の文 - : --- -行の先頭から四つ以上連続した「-」(マイナス)があるとユーザーコードと -みなされます。識別子は一つの単語で、そのあとには「=」以外なら何を -書いてもかまいません。 diff --git a/bundle/ruby/3.2.0/gems/racc-1.7.3/doc/ja/index.ja.html b/bundle/ruby/3.2.0/gems/racc-1.7.3/doc/ja/index.ja.html deleted file mode 100644 index 29fd70f3..00000000 --- a/bundle/ruby/3.2.0/gems/racc-1.7.3/doc/ja/index.ja.html +++ /dev/null @@ -1,10 +0,0 @@ -

    Racc ユーザマニュアル

    -

    バージョン 1.4 対応

    - diff --git a/bundle/ruby/3.2.0/gems/racc-1.7.3/doc/ja/parser.ja.rdoc b/bundle/ruby/3.2.0/gems/racc-1.7.3/doc/ja/parser.ja.rdoc deleted file mode 100644 index 395047bf..00000000 --- a/bundle/ruby/3.2.0/gems/racc-1.7.3/doc/ja/parser.ja.rdoc +++ /dev/null @@ -1,125 +0,0 @@ -= class Racc::Parser -Racc の生成するパーサはすべて Racc::Parser クラスを継承します。 -Racc::Parser クラスにはパース中に使用するメソッドがいくつかあり、 -そのようなメソッドをオーバーロードすると、パーサを初期化したり -することができます。 - -== Super Class - -Object - -== Constants - -プリフィクス "Racc_" がついた定数はパーサの予約定数です。 -そのような定数は使わないでください。動作不可能になります。 -== Instance Methods -ここに載っているもののほか、プリフィクス "racc_" および "_racc_" が -ついたメソッドはパーサの予約名です。そのようなメソッドは使わないで -ください。 - -: do_parse -> Object - パースを開始します。 - また、トークンが必要になった時は #next_token を呼び出します。 - - -- - # Example - ---- inner - def parse - @q = [[1,1], - [2,2], - [3,3], - [false, '$']] - do_parse - end - - def next_token - @q.shift - end - -- - -: next_token -> [Symbol, Object] - [abstract method] - - パーサが次のトークンを読みこむ時に使います。 - [記号, その値] の形式の配列を返してください。 - 記号はデフォルトでは - - * 文法中、引用符でかこまれていないもの - → その名前の文字列のシンボル (例えば :ATOM ) - * 引用符でかこまれているもの
    - → その文字列そのまま (例えば '=' ) - - で表します。これを変更する方法については、 - 文法リファレンスを参照してください。 - - また、もう送るシンボルがなくなったときには - [false, なにか] または nil を返してください。 - - このメソッドは抽象メソッドなので、#do_parse を使う場合は - 必ずパーサクラス中で再定義する必要があります。 - 定義しないままパースを始めると例外 NotImplementedError が - 発生します。 - -: yyparse( receiver, method_id ) - パースを開始します。このメソッドでは始めてトークンが - 必要になった時点で receiver に対して method_id メソッドを - 呼び出してトークンを得ます。 - - receiver の method_id メソッドはトークンを yield しなければ - なりません。形式は #next_token と同じで [記号, 値] です。 - つまり、receiver の method_id メソッドの概形は以下のように - なるはずです。 - -- - def method_id - until end_of_file - : - yield 記号, 値 - : - end - end - -- - 少し注意が必要なのは、method_id が呼び出されるのは始めて - トークンが必要になった時点であるということです。method_id - メソッドが呼び出されたときは既にパースが進行中なので、 - アクション中で使う変数を method_id の冒頭で初期化すると - まず失敗します。 - - トークンの終端を示す [false, なにか] を渡したらそれ以上は - yield しないでください。その場合には例外が発生します。 - - 最後に、method_id メソッドからは必ず yield してください。 - しない場合は何が起きるかわかりません。 - -: on_error( error_token_id, error_value, value_stack ) - パーサコアが文法エラーを検出すると呼び出します (yacc の yyerror)。 - エラーメッセージを出すなり、例外を発生するなりしてください。 - このメソッドから正常に戻った場合、パーサはエラー回復モード - に移行します。 - - error_token_id はパースエラーを起こした記号の内部表現 (整数) です。 - #token_to_str で文法ファイル上の文字列表現に直せます。 - - error_value はその値です。 - - value_stack はエラーの時点での値スタックです。 - value_stack を変更してはいけません。 - - on_error のデフォルトの実装は例外 ParseError を発生します。 - -: token_to_str( t ) -> String - Racc トークンの内部表現 (整数) - を文法ファイル上の記号表現の文字列に変換します。 - - t が整数でない場合は TypeError を発生します。 - t が範囲外の整数だった場合は nil を返します。 - -: yyerror - エラー回復モードに入ります。このとき #on_error は呼ばれません。 - アクション以外からは呼び出さないでください。 - -: yyerrok - エラー回復モードから復帰します。 - アクション以外からは呼び出さないでください。 - -: yyaccept - すぐに値スタックの先頭の値を返して #do_parse、#yyparse を抜けます。 diff --git a/bundle/ruby/3.2.0/gems/racc-1.7.3/doc/ja/usage.ja.html b/bundle/ruby/3.2.0/gems/racc-1.7.3/doc/ja/usage.ja.html deleted file mode 100644 index 8884b8f6..00000000 --- a/bundle/ruby/3.2.0/gems/racc-1.7.3/doc/ja/usage.ja.html +++ /dev/null @@ -1,414 +0,0 @@ -

    Racc の使い方

    -

    -Racc は文法規則から Ruby で書かれたパーサを生成するパーサジェネレータです。 -パーサ生成アルゴリズムには yacc などと同じ LALR(1) を使用しています。 -

    -

    -yacc を知っている人は記述法の違いだけわかれば使えると思います。 -yacc を知らない人は -拙著『Ruby を 256 倍使うための本 無道編』(青木峰郎著、ASCII) -などを一読していただくのがよいかと思います。 -他の UNIX コマンドなどとは異なり、 -いきなり使うだけで Racc を理解するのはかなり困難です。 -

    - -

    Racc とはなにか

    -

    -Racc は文法を処理するツールです。 -文字列はただの文字の列で、コンピュータにとっては意味を持ちません。 -しかし人間はその文字の列の中になにか意味を見出すことができます。 -コンピュータにもそのようなことを、部分的にでも、させられたら便利でしょう。 -Racc はその手伝いをしてくれます。完全な自動化ではありませんが、 -人間が全部やるよりも遥かに簡単になります。 -

    -

    -Racc が自動化してくれる部分とは、文字列の含む「構造」の処理です。 -たとえば Ruby の if 文を考えてみると、次のように定式化できます。 -

    -
    -if 条件式 [then]
    -  文
    -  :
    -[elsif 条件式 [then]
    -  文
    -  :]
    -[else
    -  文
    -  :]
    -end
    -
    -

    -if 文では if という単語が最初になくてはならず、 -elsif 節は else 節より前になくてはいけません。 -このような配置の関係 (構造) が、Racc が処理する対象です。 -

    -

    -一方、Racc で処理できないのはどういうことでしょうか。それは、たとえば -if の条件式にあたる部分が「なんであるか」ということです。つまり、条件 -式が if の条件だということです。これは、こっちで条件として扱うコードを -書いてやらないといけません。 -

    -

    -と言っても、わかりにくいでしょう。こういう抽象的なものは実際にいじって -みるのが一番です。 -

    - -

    実際の話

    -

    -実際に Racc をどのように使うかという話をします。Racc には独自のソース -コードみたいなものがあって、この中に処理したい「構造」を記述しておきま -す。このソースファイルを「文法ファイル」と呼ぶことにしましょう。この文 -法ファイルの名前が parse.y と仮定すると、コマンドラインから以下のよう -に打ちこめば、その構造を処理するためのクラスを含んだファイルが得られま -す。 -

    -
    -$ racc parse.y
    -
    -

    -生成されるファイルはデフォルトでは "ファイル名.tab.rb" です。他の名前 -にしたいなら、-o オプションで変更できます。 -

    -
    -$ racc parse.y -o myparser.rb
    -
    -

    -このようにして作ったクラス、またはそのような処理を担当するパート、 -のことはパーサ (parser) と呼ぶことになっています。解析するヤツ、 -というくらいに適当にとらえてください。 -

    - -

    文法ファイルを書く

    -

    -Racc は文法ファイルから Ruby のクラスを生成するツールだと言いました。 -そのクラスは全て Racc::Parser の下位クラスで、名前は文法ファイル中で -指定します。以下、ここに書くべきことが「なんなのか」を説明します。 -ここでは内容に重点を置くので、文法ファイル自体の文法の詳細は -文法リファレンスを見てください。 -

    - -

    文法

    -

    -まずは、全体の概形です。 -

    -
    -class MyParser
    -rule
    -
    -  if_stmt: IF expr then stmt_list elsif else END
    -
    -  then   : THEN
    -         |
    -
    -  elsif  :
    -         | ELSIF stmt_list
    -
    -  else   :
    -         | ELSE stmt_list
    -
    -  expr   : NUMBER
    -         | IDENT
    -         | STRING
    -
    -  stmt_list : ふにゃふにゃ
    -
    -end
    -
    -

    -Ruby スクリプトのように class でパーサクラス名を指定し、rule ... end -の間にパーサに解析させたい文法を記述します。 -

    -

    -文法は、記号の並びでもって表します。rule ... end の間にあるコロンとバー -以外のもの、if_stmt IF expr then などが全て「記号」です。そしてコロン -が日本語で言う「〜は××だ」の「は」みたいなもんで、その左の記号が右の -記号の列と同じものを指す、というふうに定義します。また、バーは「または」 -を意味します。それと、単純にコロンの左の記号のことを左辺、右を右辺とも -言います。以下はこちらのほうを使って説明しましょう。 -

    -

    -少し注意が必要な点を述べます。まず、then の、バーのあとの定義 (規則) を -見てください。ここには何も書いていないので、これはその通り「無」であっ -てもいい、ということを表しています。つまり、then は記号 THEN 一個か、 -またはなにもなし(省略する)でよい、ということです。記号 then は実際の -Ruby のソースコードにある then とは切り離して考えましょう -(それは実は大文字の記号 THEN が表しています)。 -

    -

    -さて、そろそろ「記号」というものがなんなのか書きましょう。 -ただし順番に話をしないといけないので、まずは聞いていてください。 -この文章の最初に、パーサとは文字の列から構造を見出す部分だと言いました。 -しかし文字の列からいきなり構造を探すのは面倒なので、実際にはまず -文字の列を単語の列に分割します。その時点でスペースやコメントは捨てて -しまい、以降は純粋にプログラムの一部をなす部分だけを相手にします。 -たとえば文字列の入力が次のようだったとすると、 -

    -
    -if flag then   # item found.
    -  puts 'ok'
    -end
    -
    -

    -単語の列は次のようになります。 -

    -
    -if flag then puts 'ok' end
    -
    -

    -ここで、工夫が必要です。どうやら flag はローカル変数名だと思われますが、 -変数名というのは他にもいろいろあります。しかし名前が i だろうが a だろ -うが vvvvvvvvvvvv だろうが、「構造」は同じです。つまり同じ扱いをされる -べきです。変数 a を書ける場所なら b も書けなくてはいけません。だったら -一時的に同じ名前で読んでもいいじゃん。ということで、この単語の列を以下 -のように読みかえましょう。 -

    -
    -IF IDENT THEN IDENT STRING END
    -
    -

    -これが「記号」の列です。パーサではこの記号列のほうを扱い、構造を見付け -ていきます。 -

    -

    -さらに記号について見ていきましょう。 -記号は二種類に分けられます。「左辺にある記号」と「ない記号」です。 -左辺にある記号は「非終端」記号と言います。ないほうは「終端」記号と -言います。最初の例では終端記号はすべて大文字、非終端記号は小文字で -書いてあるので、もう一度戻って例の文法を見てください。 -

    -

    -なぜこの区分が重要かと言うと、入力の記号列はすべて終端記号だからです。 -一方、非終端記号はパーサの中でだけ、終端記号の列から「作りだす」ことに -よって始めて存在します。例えば次の規則をもう一度見てください。 -

    -
    -  expr   : NUMBER
    -         | IDENT
    -         | STRING
    -
    -

    -expr は NUMBER か IDENT か STRING だと言っています。逆に言うと、 -IDENT は expr に「なることができます」。文法上 expr が存在できる -場所に IDENT が来ると、それは expr になります。例えば if の条件式の -部分は expr ですから、ここに IDENT があると expr になります。その -ように文法的に「大きい」記号を作っていって、最終的に一個になると、 -その入力は文法を満たしていることになります。実際にさっきの入力で -試してみましょう。入力はこうでした。 -

    -
    -IF IDENT THEN IDENT STRING END
    -
    -

    -まず、IDENT が expr になります。 -

    -
    -IF expr THEN IDENT STRING END
    -
    -

    -次に THEN が then になります。 -

    -
    -IF expr then IDENT STRING END
    -
    -

    -IDENT STRING がメソッドコールになります。この定義はさきほどの例には -ないですが、実は省略されているんだと考えてください。そしていろいろな -過程を経て、最終的には stmt_list (文のリスト)になります。 -

    -
    -IF expr then stmt_list END
    -
    -

    -elsif と else は省略できる、つまり無から生成できます。 -

    -
    -IF expr then stmt_list elsif else END
    -
    -

    -最後に if_stmt を作ります。 -

    -
    -if_stmt
    -
    -

    -ということでひとつになりました。 -つまりこの入力は文法的に正しいということがわかりました。 -

    - -

    アクション

    -

    -ここまでで入力の文法が正しいかどうかを確認する方法はわかりましたが、 -これだけではなんにもなりません。最初に説明したように、ここまででは -構造が見えただけで、プログラムは「意味」を理解できません。そしてその -部分は Racc では自動処理できないので、人間が書く、とも言いました。 -それを書くのが以下に説明する「アクション」という部分です。 -

    -

    -前項で、記号の列がだんだんと大きな単位にまとめられていく過程を見ました。 -そのまとめる時に、同時になにかをやらせることができます。それが -アクションです。アクションは、文法ファイルで以下のように書きます。 -

    -
    -class MyParser
    -rule
    -
    -  if_stmt: IF expr then stmt_list elsif else END
    -             { puts 'if_stmt found' }
    -
    -  then   : THEN
    -             { puts 'then found' }
    -         |
    -             { puts 'then is omitted' }
    -
    -  elsif  :
    -             { puts 'elsif is omitted' }
    -         | ELSIF stmt_list
    -             { puts 'elsif found' }
    -
    -  else   :
    -             { puts 'else omitted' }
    -         | ELSE stmt_list
    -             { puts 'else found' }
    -
    -  expr   : NUMBER
    -             { puts 'expr found (NUMBER)' }
    -         | IDENT
    -             { puts 'expr found (IDENT)' }
    -         | STRING
    -             { puts 'expr found (STRING)' }
    -
    -  stmt_list : ふにゃふにゃ
    -
    -end
    -
    -

    -見てのとおり、規則のあとに { と } で囲んで書きます。 -アクションにはだいたい好きなように Ruby スクリプトが書けます。 -

    -

    -(この節、未完) -

    -
    - -

    -yacc での $$ は Racc ではローカル変数 result -で、$1,$2... は配列 valです。 -resultval[0] ($1) の値に初期化され、 -アクションを抜けたときの result の値が左辺値になります。 -Racc ではアクション中の return はアクションから抜けるだけで、 -パース自体は終わりません。アクション中からパースを終了するには、 -メソッド yyaccept を使ってください。 -

    -

    -演算子の優先順位、スタートルールなどの yacc の一般的な機能も用意されて -います。ただしこちらも少し文法が違います。 -

    -

    -yacc では生成されたコードに直接転写されるコードがありました。 -Racc でも同じように、ユーザ指定のコードが書けます。 -Racc ではクラスを生成するので、クラス定義の前/中/後の三個所があります。 -Racc ではそれを上から順番に header inner footer と呼んでいます。 -

    - -

    ユーザが用意すべきコード

    -

    -パースのエントリポイントとなるメソッドは二つあります。ひとつは -do_parseで、こちらはトークンを -Parser#next_token から得ます。もうひとつは -yyparse で、こちらはスキャナから yield され -ることによってトークンを得ます。ユーザ側ではこのどちらか(両方でもいい -けど)を起動する簡単なメソッドを inner に書いてください。これらメソッド -の引数など、詳しいことはリファレンスを見てください。 -

    - -

    -どちらのメソッドにも共通なのはトークンの形式です。必ずトークンシンボル -とその値の二要素を持つ配列を返すようにします。またスキャンが終了して、 -もう送るものがない場合は [false,なにか] を返し -てください。これは一回返せば十分です (逆に、yyparse を使 -う場合は二回以上 yield してはいけない)。 -

    -

    -パーサは別に文字列処理にだけ使われるものではありませんが、実際問題とし -て、パーサを作る場面ではたいてい文字列のスキャナとセットで使うことが多 -いでしょう。Ruby ならスキャナくらい楽勝で作れますが、高速なスキャナと -なると実は難しかったりします。そこで高速なスキャナを作成するためのライ -ブラリも作っています。詳しくは -「スキャナを作る」の項を見てください。 -

    -

    -Racc には error トークンを使ったエラー回復機能もあります。yacc の -yyerror() は Racc では -Racc::Parser#on_error -で、エラーが起きたトークンとその値、値スタック、の三つの引数をとります。 -on_error のデフォルトの実装は例外 -Racc::ParseError を発生します。 -

    -

    -ユーザがアクション中でパースエラーを発見した場合は、メソッド -yyerror -を呼べばパーサがエラー回復モードに入ります。 -ただしこのとき on_errorは呼ばれません。 -

    - -

    パーサを生成する

    -

    -これだけあればだいたい書けると思います。あとは、最初に示した方法で文法 -ファイルを処理し、Ruby スクリプトを得ます。 -

    -

    -うまくいけばいいのですが、大きいものだと最初からはうまくいかないでしょ -う。racc に -g オプションをつけてコンパイルし、@yydebug を true にする -とデバッグ用の出力が得られます。デバッグ出力はパーサの @racc_debug_out -に出力されます(デフォルトは stderr)。また、racc に -v オプションをつけ -ると、状態遷移表を読みやすい形で出力したファイル(*.output)が得られます。 -どちらもデバッグの参考になるでしょう。 -

    - - -

    作ったパーサを配布する

    -

    -Racc の生成したパーサは動作時にランタイムルーチンが必要です。 -具体的には parser.rb と cparse.so です。 -ただし cparse.so は単にパースを高速化するためのライブラリなので -必須ではありません。なくても動きます。 -

    -

    -まず Ruby 1.8.0 以降にはこのランタイムが標準添付されているので、 -Ruby 1.8 がある環境ならばランタイムについて考慮する必要はありません。 -Racc 1.4.x のランタイムと Ruby 1.8 に添付されているランタイムは -完全互換です。 -

    -

    -問題は Ruby 1.8 を仮定できない場合です。 -Racc をユーザみんなにインストールしてもらうのも一つの手ですが、 -これでは不親切です。そこでRacc では回避策を用意しました。 -

    -

    -racc に -E オプションをつけてコンパイルすると、 -パーサと racc/parser.rb を合体したファイルを出力できます。 -これならばファイルは一つだけなので簡単に扱えます。 -racc/parser.rb は擬似的に require したような扱いになるので、 -この形式のパーサが複数あったとしてもクラスやメソッドが衝突することもありません。 -ただし -E を使った場合は cparse.so が使えませんので、 -必然的にパーサの速度は落ちます。 -

    - - -

    おまけ: スキャナを書く

    -

    -パーサを使うときは、たいてい文字列をトークンに切りわけてくれるスキャナ -が必要になります。しかし実は Ruby は文字列の最初からトークンに切りわけ -ていくという作業があまり得意ではありません。 -正確に言うと、簡単にできるのですが、それなりのオーバーヘッドがかかります。 -

    -

    -そのオーバーヘッドを回避しつつ、 -手軽にスキャナを作れるように strscan というパッケージを作りました。 -Ruby 1.8 以降には標準添付されていますし、 -筆者のホームページには -単体パッケージがあります。 -

    diff --git a/bundle/ruby/3.2.0/gems/racc-1.7.3/ext/racc/cparse/Makefile b/bundle/ruby/3.2.0/gems/racc-1.7.3/ext/racc/cparse/Makefile deleted file mode 100644 index c6fe20ba..00000000 --- a/bundle/ruby/3.2.0/gems/racc-1.7.3/ext/racc/cparse/Makefile +++ /dev/null @@ -1,269 +0,0 @@ - -SHELL = /bin/sh - -# V=0 quiet, V=1 verbose. other values don't work. -V = 0 -V0 = $(V:0=) -Q1 = $(V:1=) -Q = $(Q1:0=@) -ECHO1 = $(V:1=@ :) -ECHO = $(ECHO1:0=@ echo) -NULLCMD = : - -#### Start of system configuration section. #### - -srcdir = . -topdir = /opt/hostedtoolcache/Ruby/3.2.3/x64/include/ruby-3.2.0 -hdrdir = $(topdir) -arch_hdrdir = /opt/hostedtoolcache/Ruby/3.2.3/x64/include/ruby-3.2.0/x86_64-linux -PATH_SEPARATOR = : -VPATH = $(srcdir):$(arch_hdrdir)/ruby:$(hdrdir)/ruby -prefix = $(DESTDIR)/opt/hostedtoolcache/Ruby/3.2.3/x64 -rubysitearchprefix = $(rubylibprefix)/$(sitearch) -rubyarchprefix = $(rubylibprefix)/$(arch) -rubylibprefix = $(libdir)/$(RUBY_BASE_NAME) -exec_prefix = $(prefix) -vendorarchhdrdir = $(vendorhdrdir)/$(sitearch) -sitearchhdrdir = $(sitehdrdir)/$(sitearch) -rubyarchhdrdir = $(rubyhdrdir)/$(arch) -vendorhdrdir = $(rubyhdrdir)/vendor_ruby -sitehdrdir = $(rubyhdrdir)/site_ruby -rubyhdrdir = $(includedir)/$(RUBY_VERSION_NAME) -vendorarchdir = $(vendorlibdir)/$(sitearch) -vendorlibdir = $(vendordir)/$(ruby_version) -vendordir = $(rubylibprefix)/vendor_ruby -sitearchdir = $(sitelibdir)/$(sitearch) -sitelibdir = $(sitedir)/$(ruby_version) -sitedir = $(rubylibprefix)/site_ruby -rubyarchdir = $(rubylibdir)/$(arch) -rubylibdir = $(rubylibprefix)/$(ruby_version) -sitearchincludedir = $(includedir)/$(sitearch) -archincludedir = $(includedir)/$(arch) -sitearchlibdir = $(libdir)/$(sitearch) -archlibdir = $(libdir)/$(arch) -ridir = $(datarootdir)/$(RI_BASE_NAME) -mandir = $(datarootdir)/man -localedir = $(datarootdir)/locale -libdir = $(exec_prefix)/lib -psdir = $(docdir) -pdfdir = $(docdir) -dvidir = $(docdir) -htmldir = $(docdir) -infodir = $(datarootdir)/info -docdir = $(datarootdir)/doc/$(PACKAGE) -oldincludedir = $(DESTDIR)/usr/include -includedir = $(prefix)/include -runstatedir = $(localstatedir)/run -localstatedir = $(prefix)/var -sharedstatedir = $(prefix)/com -sysconfdir = $(prefix)/etc -datadir = $(datarootdir) -datarootdir = $(prefix)/share -libexecdir = $(exec_prefix)/libexec -sbindir = $(exec_prefix)/sbin -bindir = $(exec_prefix)/bin -archdir = $(rubyarchdir) - - -CC_WRAPPER = -CC = gcc -CXX = g++ -LIBRUBY = $(LIBRUBY_SO) -LIBRUBY_A = lib$(RUBY_SO_NAME)-static.a -LIBRUBYARG_SHARED = -Wl,-rpath,$(libdir) -L$(libdir) -l$(RUBY_SO_NAME) -LIBRUBYARG_STATIC = -Wl,-rpath,$(libdir) -L$(libdir) -l$(RUBY_SO_NAME)-static $(MAINLIBS) -empty = -OUTFLAG = -o $(empty) -COUTFLAG = -o $(empty) -CSRCFLAG = $(empty) - -RUBY_EXTCONF_H = -cflags = $(optflags) $(debugflags) $(warnflags) -cxxflags = -optflags = -O3 -fno-fast-math -debugflags = -ggdb3 -warnflags = -Wall -Wextra -Wdeprecated-declarations -Wdiv-by-zero -Wduplicated-cond -Wimplicit-function-declaration -Wimplicit-int -Wmisleading-indentation -Wpointer-arith -Wwrite-strings -Wold-style-definition -Wimplicit-fallthrough=0 -Wmissing-noreturn -Wno-cast-function-type -Wno-constant-logical-operand -Wno-long-long -Wno-missing-field-initializers -Wno-overlength-strings -Wno-packed-bitfield-compat -Wno-parentheses-equality -Wno-self-assign -Wno-tautological-compare -Wno-unused-parameter -Wno-unused-value -Wsuggest-attribute=format -Wsuggest-attribute=noreturn -Wunused-variable -Wundef -cppflags = -CCDLFLAGS = -fPIC -CFLAGS = $(CCDLFLAGS) $(cflags) -fPIC $(ARCH_FLAG) -INCFLAGS = -I. -I$(arch_hdrdir) -I$(hdrdir)/ruby/backward -I$(hdrdir) -I$(srcdir) -DEFS = -CPPFLAGS = -DRACC_INFO_VERSION=1.7.3 -DENABLE_PATH_CHECK=0 $(DEFS) $(cppflags) -CXXFLAGS = $(CCDLFLAGS) $(ARCH_FLAG) -ldflags = -L. -fstack-protector-strong -rdynamic -Wl,-export-dynamic -Wl,--no-as-needed -dldflags = -Wl,--compress-debug-sections=zlib -ARCH_FLAG = -DLDFLAGS = $(ldflags) $(dldflags) $(ARCH_FLAG) -LDSHARED = $(CC) -shared -LDSHAREDXX = $(CXX) -shared -AR = gcc-ar -EXEEXT = - -RUBY_INSTALL_NAME = $(RUBY_BASE_NAME) -RUBY_SO_NAME = ruby -RUBYW_INSTALL_NAME = -RUBY_VERSION_NAME = $(RUBY_BASE_NAME)-$(ruby_version) -RUBYW_BASE_NAME = rubyw -RUBY_BASE_NAME = ruby - -arch = x86_64-linux -sitearch = $(arch) -ruby_version = 3.2.0 -ruby = $(bindir)/$(RUBY_BASE_NAME) -RUBY = $(ruby) -BUILTRUBY = $(bindir)/$(RUBY_BASE_NAME) -ruby_headers = $(hdrdir)/ruby.h $(hdrdir)/ruby/backward.h $(hdrdir)/ruby/ruby.h $(hdrdir)/ruby/defines.h $(hdrdir)/ruby/missing.h $(hdrdir)/ruby/intern.h $(hdrdir)/ruby/st.h $(hdrdir)/ruby/subst.h $(arch_hdrdir)/ruby/config.h - -RM = rm -f -RM_RF = rm -fr -RMDIRS = rmdir --ignore-fail-on-non-empty -p -MAKEDIRS = /usr/bin/mkdir -p -INSTALL = /usr/bin/install -c -INSTALL_PROG = $(INSTALL) -m 0755 -INSTALL_DATA = $(INSTALL) -m 644 -COPY = cp -TOUCH = exit > - -#### End of system configuration section. #### - -preload = -libpath = . $(libdir) -LIBPATH = -L. -L$(libdir) -Wl,-rpath,$(libdir) -DEFFILE = - -CLEANFILES = mkmf.log -DISTCLEANFILES = -DISTCLEANDIRS = - -extout = -extout_prefix = -target_prefix = /racc -LOCAL_LIBS = -LIBS = $(LIBRUBYARG_SHARED) -lm -lpthread -lc -ORIG_SRCS = cparse.c -SRCS = $(ORIG_SRCS) -OBJS = cparse.o -HDRS = -LOCAL_HDRS = -TARGET = cparse -TARGET_NAME = cparse -TARGET_ENTRY = Init_$(TARGET_NAME) -DLLIB = $(TARGET).so -EXTSTATIC = -STATIC_LIB = - -TIMESTAMP_DIR = . -BINDIR = $(bindir) -RUBYCOMMONDIR = $(sitedir)$(target_prefix) -RUBYLIBDIR = $(sitelibdir)$(target_prefix) -RUBYARCHDIR = $(sitearchdir)$(target_prefix) -HDRDIR = $(sitehdrdir)$(target_prefix) -ARCHHDRDIR = $(sitearchhdrdir)$(target_prefix) -TARGET_SO_DIR = -TARGET_SO = $(TARGET_SO_DIR)$(DLLIB) -CLEANLIBS = $(TARGET_SO) false -CLEANOBJS = $(OBJS) *.bak -TARGET_SO_DIR_TIMESTAMP = $(TIMESTAMP_DIR)/.sitearchdir.-.racc.time - -all: $(DLLIB) -static: $(STATIC_LIB) -.PHONY: all install static install-so install-rb -.PHONY: clean clean-so clean-static clean-rb - -clean-static:: -clean-rb-default:: -clean-rb:: -clean-so:: -clean: clean-so clean-static clean-rb-default clean-rb - -$(Q)$(RM_RF) $(CLEANLIBS) $(CLEANOBJS) $(CLEANFILES) .*.time - -distclean-rb-default:: -distclean-rb:: -distclean-so:: -distclean-static:: -distclean: clean distclean-so distclean-static distclean-rb-default distclean-rb - -$(Q)$(RM) Makefile $(RUBY_EXTCONF_H) conftest.* mkmf.log - -$(Q)$(RM) core ruby$(EXEEXT) *~ $(DISTCLEANFILES) - -$(Q)$(RMDIRS) $(DISTCLEANDIRS) 2> /dev/null || true - -realclean: distclean -install: install-so install-rb - -install-so: $(DLLIB) $(TARGET_SO_DIR_TIMESTAMP) - $(INSTALL_PROG) $(DLLIB) $(RUBYARCHDIR) -clean-static:: - -$(Q)$(RM) $(STATIC_LIB) -install-rb: pre-install-rb do-install-rb install-rb-default -install-rb-default: pre-install-rb-default do-install-rb-default -pre-install-rb: Makefile -pre-install-rb-default: Makefile -do-install-rb: -do-install-rb-default: -pre-install-rb-default: - @$(NULLCMD) -$(TARGET_SO_DIR_TIMESTAMP): - $(Q) $(MAKEDIRS) $(@D) $(RUBYARCHDIR) - $(Q) $(TOUCH) $@ - -site-install: site-install-so site-install-rb -site-install-so: install-so -site-install-rb: install-rb - -.SUFFIXES: .c .m .cc .mm .cxx .cpp .o .S - -.cc.o: - $(ECHO) compiling $(<) - $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$< - -.cc.S: - $(ECHO) translating $(<) - $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$< - -.mm.o: - $(ECHO) compiling $(<) - $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$< - -.mm.S: - $(ECHO) translating $(<) - $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$< - -.cxx.o: - $(ECHO) compiling $(<) - $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$< - -.cxx.S: - $(ECHO) translating $(<) - $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$< - -.cpp.o: - $(ECHO) compiling $(<) - $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$< - -.cpp.S: - $(ECHO) translating $(<) - $(Q) $(CXX) $(INCFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$< - -.c.o: - $(ECHO) compiling $(<) - $(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$< - -.c.S: - $(ECHO) translating $(<) - $(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$< - -.m.o: - $(ECHO) compiling $(<) - $(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -c $(CSRCFLAG)$< - -.m.S: - $(ECHO) translating $(<) - $(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -S $(CSRCFLAG)$< - -$(TARGET_SO): $(OBJS) Makefile - $(ECHO) linking shared-object racc/$(DLLIB) - -$(Q)$(RM) $(@) - $(Q) $(LDSHARED) -o $@ $(OBJS) $(LIBPATH) $(DLDFLAGS) $(LOCAL_LIBS) $(LIBS) - - - -$(OBJS): $(HDRS) $(ruby_headers) diff --git a/bundle/ruby/3.2.0/gems/racc-1.7.3/ext/racc/cparse/cparse.c b/bundle/ruby/3.2.0/gems/racc-1.7.3/ext/racc/cparse/cparse.c deleted file mode 100644 index 7d9319be..00000000 --- a/bundle/ruby/3.2.0/gems/racc-1.7.3/ext/racc/cparse/cparse.c +++ /dev/null @@ -1,840 +0,0 @@ -/* - - cparse.c -- Racc Runtime Core - - Copyright (c) 1999-2006 Minero Aoki - - This library is free software. - You can distribute/modify this program under the same terms of ruby. - -*/ - -#include - -#ifndef FALSE -#define FALSE 0 -#endif -#ifndef TRUE -#define TRUE 1 -#endif - -/* ----------------------------------------------------------------------- - Important Constants ------------------------------------------------------------------------ */ - -#define RACC_VERSION STRINGIZE(RACC_INFO_VERSION) - -#define DEFAULT_TOKEN -1 -#define ERROR_TOKEN 1 -#define FINAL_TOKEN 0 - -#define vDEFAULT_TOKEN INT2FIX(DEFAULT_TOKEN) -#define vERROR_TOKEN INT2FIX(ERROR_TOKEN) -#define vFINAL_TOKEN INT2FIX(FINAL_TOKEN) - -/* ----------------------------------------------------------------------- - File Local Variables ------------------------------------------------------------------------ */ - -static VALUE RaccBug; -static VALUE CparseParams; - -static ID id_yydebug; -static ID id_nexttoken; -static ID id_onerror; -static ID id_noreduce; -static ID id_errstatus; - -static ID id_d_shift; -static ID id_d_reduce; -static ID id_d_accept; -static ID id_d_read_token; -static ID id_d_next_state; -static ID id_d_e_pop; - -/* ----------------------------------------------------------------------- - Utils ------------------------------------------------------------------------ */ - -/* For backward compatibility */ -#ifndef ID2SYM -# define ID2SYM(i) ULONG2NUM(i) -#endif -#ifndef SYM2ID -# define SYM2ID(v) ((ID)NUM2ULONG(v)) -#endif -#ifndef SYMBOL_P -# define SYMBOL_P(v) FIXNUM_P(v) -#endif -#ifndef LONG2NUM -# define LONG2NUM(i) INT2NUM(i) -#endif - -static ID value_to_id(VALUE v); -static inline long num_to_long(VALUE n); - -static ID -value_to_id(VALUE v) -{ - if (! SYMBOL_P(v)) { - rb_raise(rb_eTypeError, "not symbol"); - } - return SYM2ID(v); -} - -static inline long -num_to_long(VALUE n) -{ - return NUM2LONG(n); -} - -#define AREF(s, idx) \ - ((0 <= idx && idx < RARRAY_LEN(s)) ? rb_ary_entry(s, idx) : Qnil) - -/* ----------------------------------------------------------------------- - Parser Stack Interfaces ------------------------------------------------------------------------ */ - -static VALUE get_stack_tail(VALUE stack, long len); -static void cut_stack_tail(VALUE stack, long len); - -static VALUE -get_stack_tail(VALUE stack, long len) -{ - if (len < 0) return Qnil; /* system error */ - if (len > RARRAY_LEN(stack)) len = RARRAY_LEN(stack); - return rb_ary_subseq(stack, RARRAY_LEN(stack) - len, len); -} - -static void -cut_stack_tail(VALUE stack, long len) -{ - while (len > 0) { - rb_ary_pop(stack); - len--; - } -} - -#define STACK_INIT_LEN 64 -#define NEW_STACK() rb_ary_new2(STACK_INIT_LEN) -#define PUSH(s, i) rb_ary_store(s, RARRAY_LEN(s), i) -#define POP(s) rb_ary_pop(s) -#define LAST_I(s) \ - ((RARRAY_LEN(s) > 0) ? rb_ary_entry(s, RARRAY_LEN(s) - 1) : Qnil) -#define GET_TAIL(s, len) get_stack_tail(s, len) -#define CUT_TAIL(s, len) cut_stack_tail(s, len) - -/* ----------------------------------------------------------------------- - struct cparse_params ------------------------------------------------------------------------ */ - -struct cparse_params { - VALUE value_v; /* VALUE version of this struct */ - - VALUE parser; /* parser object */ - - int lex_is_iterator; - VALUE lexer; /* scanner object */ - ID lexmid; /* name of scanner method (must be an iterator) */ - - /* State transition tables (immutable) - Data structure is from Dragon Book 4.9 */ - /* action table */ - VALUE action_table; - VALUE action_check; - VALUE action_default; - VALUE action_pointer; - /* goto table */ - VALUE goto_table; - VALUE goto_check; - VALUE goto_default; - VALUE goto_pointer; - - long nt_base; /* NonTerminal BASE index */ - VALUE reduce_table; /* reduce data table */ - VALUE token_table; /* token conversion table */ - - /* parser stacks and parameters */ - VALUE state; - long curstate; - VALUE vstack; - VALUE tstack; - VALUE t; - long shift_n; - long reduce_n; - long ruleno; - - long errstatus; /* nonzero in error recovering mode */ - long nerr; /* number of error */ - - int use_result_var; - - VALUE retval; /* return value of parser routine */ - long fin; /* parse result status */ -#define CP_FIN_ACCEPT 1 -#define CP_FIN_EOT 2 -#define CP_FIN_CANTPOP 3 - - int debug; /* user level debug */ - int sys_debug; /* system level debug */ - - long i; /* table index */ -}; - -/* ----------------------------------------------------------------------- - Parser Main Routines ------------------------------------------------------------------------ */ - -static VALUE racc_cparse(VALUE parser, VALUE arg, VALUE sysdebug); -static VALUE racc_yyparse(VALUE parser, VALUE lexer, VALUE lexmid, - VALUE arg, VALUE sysdebug); - -static void call_lexer(struct cparse_params *v); -static VALUE lexer_i(RB_BLOCK_CALL_FUNC_ARGLIST(block_args, data)); - -static VALUE assert_array(VALUE a); -static long assert_integer(VALUE n); -static VALUE assert_hash(VALUE h); -static VALUE initialize_params(VALUE vparams, VALUE parser, VALUE arg, - VALUE lexer, VALUE lexmid); -static void cparse_params_mark(void *ptr); -static size_t cparse_params_memsize(const void *ptr); - -static void parse_main(struct cparse_params *v, - VALUE tok, VALUE val, int resume); -static void extract_user_token(struct cparse_params *v, - VALUE block_args, VALUE *tok, VALUE *val); -static void shift(struct cparse_params* v, long act, VALUE tok, VALUE val); -static int reduce(struct cparse_params* v, long act); -static rb_block_call_func reduce0; - -#ifdef DEBUG -# define D_puts(msg) if (v->sys_debug) puts(msg) -# define D_printf(fmt,arg) if (v->sys_debug) printf(fmt,arg) -#else -# define D_puts(msg) -# define D_printf(fmt,arg) -#endif - -#undef RUBY_UNTYPED_DATA_WARNING -#define RUBY_UNTYPED_DATA_WARNING 1 - -static const rb_data_type_t cparse_params_type = { - "racc/cparse", - { - cparse_params_mark, - RUBY_TYPED_DEFAULT_FREE, - cparse_params_memsize, - }, -#ifdef RUBY_TYPED_FREE_IMMEDIATELY - 0, 0, - RUBY_TYPED_FREE_IMMEDIATELY, -#endif -}; - -static VALUE -racc_cparse(VALUE parser, VALUE arg, VALUE sysdebug) -{ - VALUE vparams; - struct cparse_params *v; - - vparams = TypedData_Make_Struct(CparseParams, struct cparse_params, - &cparse_params_type, v); - D_puts("starting cparse"); - v->sys_debug = RTEST(sysdebug); - vparams = initialize_params(vparams, parser, arg, Qnil, Qnil); - v->lex_is_iterator = FALSE; - parse_main(v, Qnil, Qnil, 0); - - RB_GC_GUARD(vparams); - return v->retval; -} - -static VALUE -racc_yyparse(VALUE parser, VALUE lexer, VALUE lexmid, VALUE arg, VALUE sysdebug) -{ - VALUE vparams; - struct cparse_params *v; - - vparams = TypedData_Make_Struct(CparseParams, struct cparse_params, - &cparse_params_type, v); - v->sys_debug = RTEST(sysdebug); - D_puts("start C yyparse"); - vparams = initialize_params(vparams, parser, arg, lexer, lexmid); - v->lex_is_iterator = TRUE; - D_puts("params initialized"); - parse_main(v, Qnil, Qnil, 0); - call_lexer(v); - if (!v->fin) { - rb_raise(rb_eArgError, "%s() is finished before EndOfToken", - rb_id2name(v->lexmid)); - } - - RB_GC_GUARD(vparams); - return v->retval; -} - -static void -call_lexer(struct cparse_params *v) -{ - rb_block_call(v->lexer, v->lexmid, 0, NULL, lexer_i, v->value_v); -} - -static VALUE -lexer_i(RB_BLOCK_CALL_FUNC_ARGLIST(block_args, data)) -{ - struct cparse_params *v = rb_check_typeddata(data, &cparse_params_type); - VALUE tok, val; - - if (v->fin) - rb_raise(rb_eArgError, "extra token after EndOfToken"); - extract_user_token(v, block_args, &tok, &val); - parse_main(v, tok, val, 1); - if (v->fin && v->fin != CP_FIN_ACCEPT) - rb_iter_break(); - return Qnil; -} - -static VALUE -assert_array(VALUE a) -{ - Check_Type(a, T_ARRAY); - return a; -} - -static VALUE -assert_hash(VALUE h) -{ - Check_Type(h, T_HASH); - return h; -} - -static long -assert_integer(VALUE n) -{ - return NUM2LONG(n); -} - -static VALUE -initialize_params(VALUE vparams, VALUE parser, VALUE arg, VALUE lexer, VALUE lexmid) -{ - struct cparse_params *v = rb_check_typeddata(vparams, &cparse_params_type); - - v->value_v = vparams; - v->parser = parser; - v->lexer = lexer; - if (! NIL_P(lexmid)) - v->lexmid = value_to_id(lexmid); - - v->debug = RTEST(rb_ivar_get(parser, id_yydebug)); - - Check_Type(arg, T_ARRAY); - if (!(13 <= RARRAY_LEN(arg) && RARRAY_LEN(arg) <= 14)) - rb_raise(RaccBug, "[Racc Bug] wrong arg.size %ld", RARRAY_LEN(arg)); - v->action_table = assert_array (rb_ary_entry(arg, 0)); - v->action_check = assert_array (rb_ary_entry(arg, 1)); - v->action_default = assert_array (rb_ary_entry(arg, 2)); - v->action_pointer = assert_array (rb_ary_entry(arg, 3)); - v->goto_table = assert_array (rb_ary_entry(arg, 4)); - v->goto_check = assert_array (rb_ary_entry(arg, 5)); - v->goto_default = assert_array (rb_ary_entry(arg, 6)); - v->goto_pointer = assert_array (rb_ary_entry(arg, 7)); - v->nt_base = assert_integer(rb_ary_entry(arg, 8)); - v->reduce_table = assert_array (rb_ary_entry(arg, 9)); - v->token_table = assert_hash (rb_ary_entry(arg, 10)); - v->shift_n = assert_integer(rb_ary_entry(arg, 11)); - v->reduce_n = assert_integer(rb_ary_entry(arg, 12)); - if (RARRAY_LEN(arg) > 13) { - v->use_result_var = RTEST(rb_ary_entry(arg, 13)); - } - else { - v->use_result_var = TRUE; - } - - v->tstack = v->debug ? NEW_STACK() : Qnil; - v->vstack = NEW_STACK(); - v->state = NEW_STACK(); - v->curstate = 0; - PUSH(v->state, INT2FIX(0)); - v->t = INT2FIX(FINAL_TOKEN + 1); /* must not init to FINAL_TOKEN */ - v->nerr = 0; - v->errstatus = 0; - rb_ivar_set(parser, id_errstatus, LONG2NUM(v->errstatus)); - - v->retval = Qnil; - v->fin = 0; - - v->lex_is_iterator = FALSE; - - rb_iv_set(parser, "@vstack", v->vstack); - if (v->debug) { - rb_iv_set(parser, "@tstack", v->tstack); - } - else { - rb_iv_set(parser, "@tstack", Qnil); - } - - return vparams; -} - -static void -cparse_params_mark(void *ptr) -{ - struct cparse_params *v = (struct cparse_params*)ptr; - - rb_gc_mark(v->value_v); - rb_gc_mark(v->parser); - rb_gc_mark(v->lexer); - rb_gc_mark(v->action_table); - rb_gc_mark(v->action_check); - rb_gc_mark(v->action_default); - rb_gc_mark(v->action_pointer); - rb_gc_mark(v->goto_table); - rb_gc_mark(v->goto_check); - rb_gc_mark(v->goto_default); - rb_gc_mark(v->goto_pointer); - rb_gc_mark(v->reduce_table); - rb_gc_mark(v->token_table); - rb_gc_mark(v->state); - rb_gc_mark(v->vstack); - rb_gc_mark(v->tstack); - rb_gc_mark(v->t); - rb_gc_mark(v->retval); -} - -static size_t -cparse_params_memsize(const void *ptr) -{ - return sizeof(struct cparse_params); -} - -static void -extract_user_token(struct cparse_params *v, VALUE block_args, - VALUE *tok, VALUE *val) -{ - if (NIL_P(block_args)) { - /* EOF */ - *tok = Qfalse; - *val = rb_str_new("$", 1); - return; - } - - if (!RB_TYPE_P(block_args, T_ARRAY)) { - rb_raise(rb_eTypeError, - "%s() %s %"PRIsVALUE" (must be Array[2])", - v->lex_is_iterator ? rb_id2name(v->lexmid) : "next_token", - v->lex_is_iterator ? "yielded" : "returned", - rb_obj_class(block_args)); - } - if (RARRAY_LEN(block_args) != 2) { - rb_raise(rb_eArgError, - "%s() %s wrong size of array (%ld for 2)", - v->lex_is_iterator ? rb_id2name(v->lexmid) : "next_token", - v->lex_is_iterator ? "yielded" : "returned", - RARRAY_LEN(block_args)); - } - *tok = AREF(block_args, 0); - *val = AREF(block_args, 1); -} - -#define SHIFT(v,act,tok,val) shift(v,act,tok,val) -#define REDUCE(v,act) do {\ - switch (reduce(v,act)) { \ - case 0: /* normal */ \ - break; \ - case 1: /* yyerror */ \ - goto user_yyerror; \ - case 2: /* yyaccept */ \ - D_puts("u accept"); \ - goto accept; \ - default: \ - break; \ - } \ -} while (0) - -static void -parse_main(struct cparse_params *v, VALUE tok, VALUE val, int resume) -{ - long i; /* table index */ - long act; /* action type */ - VALUE act_value; /* action type, VALUE version */ - int read_next = 1; /* true if we need to read next token */ - VALUE tmp; - - if (resume) - goto resume; - - while (1) { - D_puts(""); - D_puts("---- enter new loop ----"); - D_puts(""); - - D_printf("(act) k1=%ld\n", v->curstate); - tmp = AREF(v->action_pointer, v->curstate); - if (NIL_P(tmp)) goto notfound; - D_puts("(act) pointer[k1] ok"); - i = NUM2LONG(tmp); - - D_printf("read_next=%d\n", read_next); - if (read_next && (v->t != vFINAL_TOKEN)) { - if (v->lex_is_iterator) { - D_puts("resuming..."); - if (v->fin) rb_raise(rb_eArgError, "token given after EOF"); - v->i = i; /* save i */ - return; - resume: - D_puts("resumed"); - i = v->i; /* load i */ - } - else { - D_puts("next_token"); - tmp = rb_funcall(v->parser, id_nexttoken, 0); - extract_user_token(v, tmp, &tok, &val); - } - /* convert token */ - v->t = rb_hash_aref(v->token_table, tok); - if (NIL_P(v->t)) { - v->t = vERROR_TOKEN; - } - D_printf("(act) t(k2)=%ld\n", NUM2LONG(v->t)); - if (v->debug) { - rb_funcall(v->parser, id_d_read_token, - 3, v->t, tok, val); - } - } - read_next = 0; - - i += NUM2LONG(v->t); - D_printf("(act) i=%ld\n", i); - if (i < 0) goto notfound; - - act_value = AREF(v->action_table, i); - if (NIL_P(act_value)) goto notfound; - act = NUM2LONG(act_value); - D_printf("(act) table[i]=%ld\n", act); - - tmp = AREF(v->action_check, i); - if (NIL_P(tmp)) goto notfound; - if (NUM2LONG(tmp) != v->curstate) goto notfound; - D_printf("(act) check[i]=%ld\n", NUM2LONG(tmp)); - - D_puts("(act) found"); - act_fixed: - D_printf("act=%ld\n", act); - goto handle_act; - - notfound: - D_puts("(act) not found: use default"); - act_value = AREF(v->action_default, v->curstate); - act = NUM2LONG(act_value); - goto act_fixed; - - - handle_act: - if (act > 0 && act < v->shift_n) { - D_puts("shift"); - if (v->errstatus > 0) { - v->errstatus--; - rb_ivar_set(v->parser, id_errstatus, LONG2NUM(v->errstatus)); - } - SHIFT(v, act, v->t, val); - read_next = 1; - } - else if (act < 0 && act > -(v->reduce_n)) { - D_puts("reduce"); - REDUCE(v, act); - } - else if (act == -(v->reduce_n)) { - goto error; - error_recovered: - ; /* goto label requires stmt */ - } - else if (act == v->shift_n) { - D_puts("accept"); - goto accept; - } - else { - rb_raise(RaccBug, "[Racc Bug] unknown act value %ld", act); - } - - if (v->debug) { - rb_funcall(v->parser, id_d_next_state, - 2, LONG2NUM(v->curstate), v->state); - } - } - /* not reach */ - - - accept: - if (v->debug) rb_funcall(v->parser, id_d_accept, 0); - v->retval = rb_ary_entry(v->vstack, 0); - v->fin = CP_FIN_ACCEPT; - return; - - - error: - D_printf("error detected, status=%ld\n", v->errstatus); - if (v->errstatus == 0) { - v->nerr++; - rb_funcall(v->parser, id_onerror, - 3, v->t, val, v->vstack); - } - user_yyerror: - if (v->errstatus == 3) { - if (v->t == vFINAL_TOKEN) { - v->retval = Qnil; - v->fin = CP_FIN_EOT; - return; - } - read_next = 1; - } - v->errstatus = 3; - rb_ivar_set(v->parser, id_errstatus, LONG2NUM(v->errstatus)); - - /* check if we can shift/reduce error token */ - D_printf("(err) k1=%ld\n", v->curstate); - D_printf("(err) k2=%d (error)\n", ERROR_TOKEN); - while (1) { - tmp = AREF(v->action_pointer, v->curstate); - if (NIL_P(tmp)) goto error_pop; - D_puts("(err) pointer[k1] ok"); - - i = NUM2LONG(tmp) + ERROR_TOKEN; - D_printf("(err) i=%ld\n", i); - if (i < 0) goto error_pop; - - act_value = AREF(v->action_table, i); - if (NIL_P(act_value)) { - D_puts("(err) table[i] == nil"); - goto error_pop; - } - act = NUM2LONG(act_value); - D_printf("(err) table[i]=%ld\n", act); - - tmp = AREF(v->action_check, i); - if (NIL_P(tmp)) { - D_puts("(err) check[i] == nil"); - goto error_pop; - } - if (NUM2LONG(tmp) != v->curstate) { - D_puts("(err) check[i] != k1"); - goto error_pop; - } - - D_puts("(err) found: can handle error token"); - break; - - error_pop: - D_puts("(err) act not found: can't handle error token; pop"); - - if (RARRAY_LEN(v->state) <= 1) { - v->retval = Qnil; - v->fin = CP_FIN_CANTPOP; - return; - } - POP(v->state); - POP(v->vstack); - v->curstate = num_to_long(LAST_I(v->state)); - if (v->debug) { - POP(v->tstack); - rb_funcall(v->parser, id_d_e_pop, - 3, v->state, v->tstack, v->vstack); - } - } - - /* shift/reduce error token */ - if (act > 0 && act < v->shift_n) { - D_puts("e shift"); - SHIFT(v, act, ERROR_TOKEN, val); - } - else if (act < 0 && act > -(v->reduce_n)) { - D_puts("e reduce"); - REDUCE(v, act); - } - else if (act == v->shift_n) { - D_puts("e accept"); - goto accept; - } - else { - rb_raise(RaccBug, "[Racc Bug] unknown act value %ld", act); - } - goto error_recovered; -} - -static void -shift(struct cparse_params *v, long act, VALUE tok, VALUE val) -{ - PUSH(v->vstack, val); - if (v->debug) { - PUSH(v->tstack, tok); - rb_funcall(v->parser, id_d_shift, - 3, tok, v->tstack, v->vstack); - } - v->curstate = act; - PUSH(v->state, LONG2NUM(v->curstate)); -} - -static int -reduce(struct cparse_params *v, long act) -{ - VALUE code; - v->ruleno = -act * 3; - code = rb_catch("racc_jump", reduce0, v->value_v); - v->errstatus = num_to_long(rb_ivar_get(v->parser, id_errstatus)); - return NUM2INT(code); -} - -static VALUE -reduce0(RB_BLOCK_CALL_FUNC_ARGLIST(_, data)) -{ - struct cparse_params *v = rb_check_typeddata(data, &cparse_params_type); - VALUE reduce_to, reduce_len, method_id; - long len; - ID mid; - VALUE tmp, tmp_t = Qundef, tmp_v = Qundef; - long i, k1, k2; - VALUE goto_state; - - reduce_len = rb_ary_entry(v->reduce_table, v->ruleno); - reduce_to = rb_ary_entry(v->reduce_table, v->ruleno+1); - method_id = rb_ary_entry(v->reduce_table, v->ruleno+2); - len = NUM2LONG(reduce_len); - mid = value_to_id(method_id); - - /* call action */ - if (len == 0) { - tmp = Qnil; - if (mid != id_noreduce) - tmp_v = rb_ary_new(); - if (v->debug) - tmp_t = rb_ary_new(); - } - else { - if (mid != id_noreduce) { - tmp_v = GET_TAIL(v->vstack, len); - tmp = rb_ary_entry(tmp_v, 0); - } - else { - tmp = rb_ary_entry(v->vstack, RARRAY_LEN(v->vstack) - len); - } - CUT_TAIL(v->vstack, len); - if (v->debug) { - tmp_t = GET_TAIL(v->tstack, len); - CUT_TAIL(v->tstack, len); - } - CUT_TAIL(v->state, len); - } - if (mid != id_noreduce) { - if (v->use_result_var) { - tmp = rb_funcall(v->parser, mid, - 3, tmp_v, v->vstack, tmp); - } - else { - tmp = rb_funcall(v->parser, mid, - 2, tmp_v, v->vstack); - } - } - - /* then push result */ - PUSH(v->vstack, tmp); - if (v->debug) { - PUSH(v->tstack, reduce_to); - rb_funcall(v->parser, id_d_reduce, - 4, tmp_t, reduce_to, v->tstack, v->vstack); - } - - /* calculate transition state */ - if (RARRAY_LEN(v->state) == 0) - rb_raise(RaccBug, "state stack unexpectedly empty"); - k2 = num_to_long(LAST_I(v->state)); - k1 = num_to_long(reduce_to) - v->nt_base; - D_printf("(goto) k1=%ld\n", k1); - D_printf("(goto) k2=%ld\n", k2); - - tmp = AREF(v->goto_pointer, k1); - if (NIL_P(tmp)) goto notfound; - - i = NUM2LONG(tmp) + k2; - D_printf("(goto) i=%ld\n", i); - if (i < 0) goto notfound; - - goto_state = AREF(v->goto_table, i); - if (NIL_P(goto_state)) { - D_puts("(goto) table[i] == nil"); - goto notfound; - } - D_printf("(goto) table[i]=%ld (goto_state)\n", NUM2LONG(goto_state)); - - tmp = AREF(v->goto_check, i); - if (NIL_P(tmp)) { - D_puts("(goto) check[i] == nil"); - goto notfound; - } - if (tmp != LONG2NUM(k1)) { - D_puts("(goto) check[i] != table[i]"); - goto notfound; - } - D_printf("(goto) check[i]=%ld\n", NUM2LONG(tmp)); - - D_puts("(goto) found"); - transit: - PUSH(v->state, goto_state); - v->curstate = NUM2LONG(goto_state); - return INT2FIX(0); - - notfound: - D_puts("(goto) not found: use default"); - /* overwrite `goto-state' by default value */ - goto_state = AREF(v->goto_default, k1); - goto transit; -} - -/* ----------------------------------------------------------------------- - Ruby Interface ------------------------------------------------------------------------ */ - -void -Init_cparse(void) -{ -#ifdef HAVE_RB_EXT_RACTOR_SAFE - rb_ext_ractor_safe(true); -#endif - - VALUE Racc, Parser; - ID id_racc = rb_intern_const("Racc"); - - if (rb_const_defined(rb_cObject, id_racc)) { - Racc = rb_const_get(rb_cObject, id_racc); - Parser = rb_const_get_at(Racc, rb_intern_const("Parser")); - } - else { - Racc = rb_define_module("Racc"); - Parser = rb_define_class_under(Racc, "Parser", rb_cObject); - } - rb_define_private_method(Parser, "_racc_do_parse_c", racc_cparse, 2); - rb_define_private_method(Parser, "_racc_yyparse_c", racc_yyparse, 4); - rb_define_const(Parser, "Racc_Runtime_Core_Version_C", - rb_str_new2(RACC_VERSION)); - rb_define_const(Parser, "Racc_Runtime_Core_Id_C", - rb_str_new2("$originalId: cparse.c,v 1.8 2006/07/06 11:39:46 aamine Exp $")); - - CparseParams = rb_define_class_under(Racc, "CparseParams", rb_cObject); - rb_undef_alloc_func(CparseParams); - rb_undef_method(CparseParams, "initialize"); - rb_undef_method(CparseParams, "initialize_copy"); - - RaccBug = rb_eRuntimeError; - - id_yydebug = rb_intern_const("@yydebug"); - id_nexttoken = rb_intern_const("next_token"); - id_onerror = rb_intern_const("on_error"); - id_noreduce = rb_intern_const("_reduce_none"); - id_errstatus = rb_intern_const("@racc_error_status"); - - id_d_shift = rb_intern_const("racc_shift"); - id_d_reduce = rb_intern_const("racc_reduce"); - id_d_accept = rb_intern_const("racc_accept"); - id_d_read_token = rb_intern_const("racc_read_token"); - id_d_next_state = rb_intern_const("racc_next_state"); - id_d_e_pop = rb_intern_const("racc_e_pop"); -} diff --git a/bundle/ruby/3.2.0/gems/racc-1.7.3/ext/racc/cparse/extconf.rb b/bundle/ruby/3.2.0/gems/racc-1.7.3/ext/racc/cparse/extconf.rb deleted file mode 100644 index ffec1f9d..00000000 --- a/bundle/ruby/3.2.0/gems/racc-1.7.3/ext/racc/cparse/extconf.rb +++ /dev/null @@ -1,8 +0,0 @@ -# frozen_string_literal: true -# - -require 'mkmf' -require_relative '../../../lib/racc/info' - -$defs << "-D""RACC_INFO_VERSION=#{Racc::VERSION}" -create_makefile 'racc/cparse' diff --git a/bundle/ruby/3.2.0/gems/racc-1.7.3/lib/racc.rb b/bundle/ruby/3.2.0/gems/racc-1.7.3/lib/racc.rb deleted file mode 100644 index f6e4ac03..00000000 --- a/bundle/ruby/3.2.0/gems/racc-1.7.3/lib/racc.rb +++ /dev/null @@ -1,6 +0,0 @@ -require 'racc/compat' -require 'racc/debugflags' -require 'racc/grammar' -require 'racc/state' -require 'racc/exception' -require 'racc/info' diff --git a/bundle/ruby/3.2.0/gems/racc-1.7.3/lib/racc/compat.rb b/bundle/ruby/3.2.0/gems/racc-1.7.3/lib/racc/compat.rb deleted file mode 100644 index 62f4f630..00000000 --- a/bundle/ruby/3.2.0/gems/racc-1.7.3/lib/racc/compat.rb +++ /dev/null @@ -1,33 +0,0 @@ -#-- -# -# -# -# Copyright (c) 1999-2006 Minero Aoki -# -# This program is free software. -# You can distribute/modify this program under the same terms of ruby. -# see the file "COPYING". -# -#++ - -unless Object.method_defined?(:__send) - class Object - alias __send __send__ - end -end - -unless Object.method_defined?(:__send!) - class Object - alias __send! __send__ - end -end - -unless Array.method_defined?(:map!) - class Array - if Array.method_defined?(:collect!) - alias map! collect! - else - alias map! filter - end - end -end diff --git a/bundle/ruby/3.2.0/gems/racc-1.7.3/lib/racc/cparse.so b/bundle/ruby/3.2.0/gems/racc-1.7.3/lib/racc/cparse.so deleted file mode 100755 index 5b2dba8205bc25c84053f3899c27b56bb4e1d37f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 130000 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
    ' ->> using Rainbow -=> main ->> 'Hello, World!'.blue.bright.underline -=> "\e[34m\e[1m\e[4mHello, World!\e[0m" -``` - -### Color specification - -Both `color` and `background` accept color specified in any -of the following ways: - -* ANSI color number (where 0 is black, 1 is red, 2 is green and so on): - `Rainbow("hello").color(1)` - -* [ANSI color](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors) name or [X11 color](https://en.wikipedia.org/wiki/X11_color_names) name as a symbol: - `Rainbow("hello").color(:yellow)`. - This can be simplified to `Rainbow("hello").yellow` - - See [Color list](#user-content-color-list) for all available color names. - Note that ANSI colors can be changed in accordance with terminal setting. - But X11 color is just a syntax sugar for RGB triplet. So you always see what you specified. - -* RGB triplet as separate values in the range 0-255: - `Rainbow("hello").color(115, 23, 98)` - -* RGB triplet as a hex string: - `Rainbow("hello").color("FFC482")` or `Rainbow("hello").color("#FFC482")` - -When you specify a color with a RGB triplet rainbow finds the nearest match -from 256 colors palette. Note that it requires a 256-colors capable terminal to -display correctly. - -#### Example: Choose a random color - -You can pick a random color with Rainbow, it's a one-liner: - -```ruby -colors = Range.new(0,7).to_a -"whoop dee doop".chars.map { |char| Rainbow(char).color(colors.sample) }.join -# => "\e[36mw\e[0m\e[37mh\e[0m\e[34mo\e[0m\e[34mo\e[0m\e[37mp\e[0m\e[34m \e[0m\e[36md\e[0m\e[33me\e[0m\e[34me\e[0m\e[37m \e[0m\e[32md\e[0m\e[35mo\e[0m\e[33mo\e[0m\e[36mp\e[0m" - -colors = [:aliceblue, :antiquewhite, :aqua, :aquamarine, :azure, :beige, :bisque, :blanchedalmond, :blueviolet] -"whoop dee doop".chars.map { |char| Rainbow(char).color(colors.sample) }.join -# => "\e[38;5;135mw\e[0m\e[38;5;230mh\e[0m\e[38;5;231mo\e[0m\e[38;5;135mo\e[0m\e[38;5;231mp\e[0m\e[38;5;231m \e[0m\e[38;5;122md\e[0m\e[38;5;231me\e[0m\e[38;5;231me\e[0m\e[38;5;230m \e[0m\e[38;5;122md\e[0m\e[38;5;51mo\e[0m\e[38;5;51mo\e[0m\e[38;5;51mp\e[0m" -``` - -### Configuration - -Rainbow can be enabled/disabled globally by setting: - -```ruby -Rainbow.enabled = true/false -``` - -When disabled all the methods return an unmodified string -(`Rainbow("hello").red == "hello"`). - -It's enabled by default, unless STDOUT/STDERR is not a TTY or a terminal is -dumb. - -### Advanced usage - -`Rainbow()` and `Rainbow.enabled` operate on the global Rainbow wrapper -instance. If you would like to selectively enable/disable coloring in separate -parts of your application you can get a new Rainbow wrapper instance for each -of them and control the state of coloring during the runtime. - -```ruby -rainbow_one = Rainbow.new -rainbow_two = Rainbow.new - -rainbow_one.enabled = false - -Rainbow("hello").red # => "\e[31mhello\e[0m" ("hello" if not on TTY) -rainbow_one.wrap("hello").red # => "hello" -rainbow_two.wrap("hello").red # => "\e[31mhello\e[0m" ("hello" if not on TTY) -``` - -By default each new instance inherits enabled/disabled state from the global -`Rainbow.enabled`. - -This feature comes handy for example when you have multiple output formatters -in your application and some of them print to a terminal but others write to a -file. Normally rainbow would detect that STDIN/STDERR is a TTY and would -colorize all the strings, even the ones that go through file writing -formatters. You can easily solve that by disabling coloring for the Rainbow -instances that are used by formatters with file output. - -## Installation - -Add it to your Gemfile: - -```ruby -gem 'rainbow' -``` - -Or just install it via rubygems: - -```ruby -gem install rainbow -``` - -## Color list - -### ANSI colors - -`black`, `red`, `green`, `yellow`, `blue`, `magenta`, `cyan`, `white` - -### X11 colors - -`aliceblue`, `antiquewhite`, `aqua`, `aquamarine`, `azure`, `beige`, `bisque`, -`blanchedalmond`, `blueviolet`, `brown`, `burlywood`, `cadetblue`, `chartreuse`, -`chocolate`, `coral`, `cornflower`, `cornsilk`, `crimson`, `darkblue`, -`darkcyan`, `darkgoldenrod`, `darkgray`, `darkgreen`, `darkkhaki`, -`darkmagenta`, `darkolivegreen`, `darkorange`, `darkorchid`, `darkred`, -`darksalmon`, `darkseagreen`, `darkslateblue`, `darkslategray`, `darkturquoise`, -`darkviolet`, `deeppink`, `deepskyblue`, `dimgray`, `dodgerblue`, `firebrick`, -`floralwhite`, `forestgreen`, `fuchsia`, `gainsboro`, `ghostwhite`, `gold`, -`goldenrod`, `gray`, `greenyellow`, `honeydew`, `hotpink`, `indianred`, -`indigo`, `ivory`, `khaki`, `lavender`, `lavenderblush`, `lawngreen`, -`lemonchiffon`, `lightblue`, `lightcoral`, `lightcyan`, `lightgoldenrod`, -`lightgray`, `lightgreen`, `lightpink`, `lightsalmon`, `lightseagreen`, -`lightskyblue`, `lightslategray`, `lightsteelblue`, `lightyellow`, `lime`, -`limegreen`, `linen`, `maroon`, `mediumaquamarine`, `mediumblue`, -`mediumorchid`, `mediumpurple`, `mediumseagreen`, `mediumslateblue`, -`mediumspringgreen`, `mediumturquoise`, `mediumvioletred`, `midnightblue`, -`mintcream`, `mistyrose`, `moccasin`, `navajowhite`, `navyblue`, `oldlace`, -`olive`, `olivedrab`, `orange`, `orangered`, `orchid`, `palegoldenrod`, -`palegreen`, `paleturquoise`, `palevioletred`, `papayawhip`, `peachpuff`, -`peru`, `pink`, `plum`, `powderblue`, `purple`, `rebeccapurple`, `rosybrown`, -`royalblue`, `saddlebrown`, `salmon`, `sandybrown`, `seagreen`, `seashell`, -`sienna`, `silver`, `skyblue`, `slateblue`, `slategray`, `snow`, `springgreen`, -`steelblue`, `tan`, `teal`, `thistle`, `tomato`, `turquoise`, `violet`, -`webgray`, `webgreen`, `webmaroon`, `webpurple`, `wheat`, `whitesmoke`, -`yellowgreen` - -## Authors - -[Marcin Kulik](http://ku1ik.com/) and [great open-source contributors](https://github.com/sickill/rainbow/graphs/contributors). diff --git a/bundle/ruby/3.2.0/gems/rainbow-3.1.1/lib/rainbow.rb b/bundle/ruby/3.2.0/gems/rainbow-3.1.1/lib/rainbow.rb deleted file mode 100644 index 7fa371ff..00000000 --- a/bundle/ruby/3.2.0/gems/rainbow-3.1.1/lib/rainbow.rb +++ /dev/null @@ -1,13 +0,0 @@ -# frozen_string_literal: true - -require_relative 'rainbow/global' - -module Rainbow - def self.new - Wrapper.new(global.enabled) - end - - self.enabled = false unless STDOUT.tty? && STDERR.tty? - self.enabled = false if ENV['TERM'] == 'dumb' - self.enabled = true if ENV['CLICOLOR_FORCE'] == '1' -end diff --git a/bundle/ruby/3.2.0/gems/rainbow-3.1.1/lib/rainbow/color.rb b/bundle/ruby/3.2.0/gems/rainbow-3.1.1/lib/rainbow/color.rb deleted file mode 100644 index 74ec3e38..00000000 --- a/bundle/ruby/3.2.0/gems/rainbow-3.1.1/lib/rainbow/color.rb +++ /dev/null @@ -1,150 +0,0 @@ -# frozen_string_literal: true - -module Rainbow - class Color - attr_reader :ground - - def self.build(ground, values) - unless [1, 3].include?(values.size) - raise ArgumentError, - "Wrong number of arguments for color definition, should be 1 or 3" - end - - color = values.size == 1 ? values.first : values - - case color - # NOTE: Properly handle versions before/after Ruby 2.4.0. - # Ruby 2.4+ unifies Fixnum & Bignum into Integer. - # However previous versions would still use Fixnum. - # To avoid missing `Fixnum` input, call `0.class` which would - # return either `Integer` or `Fixnum`. - when 0.class - Indexed.new(ground, color) - when Symbol - if Named.color_names.include?(color) - Named.new(ground, color) - elsif X11Named.color_names.include?(color) - X11Named.new(ground, color) - else - raise ArgumentError, - "Unknown color name, valid names: " + - (Named.color_names + X11Named.color_names).join(', ') - end - when Array - RGB.new(ground, *color) - when String - RGB.new(ground, *parse_hex_color(color)) - end - end - - def self.parse_hex_color(hex) - unless hex =~ /^#?[a-f0-9]{6}/i - raise ArgumentError, - "Invalid hexadecimal RGB triplet. Valid format: /^#?[a-f0-9]{6}/i" - end - - hex = hex.sub(/^#/, '') - r = hex[0..1].to_i(16) - g = hex[2..3].to_i(16) - b = hex[4..5].to_i(16) - - [r, g, b] - end - - class Indexed < Color - attr_reader :num - - def initialize(ground, num) - @ground = ground - @num = num - end - - def codes - code = num + (ground == :foreground ? 30 : 40) - - [code] - end - end - - class Named < Indexed - NAMES = { - black: 0, - red: 1, - green: 2, - yellow: 3, - blue: 4, - magenta: 5, - cyan: 6, - white: 7, - default: 9 - }.freeze - - def self.color_names - NAMES.keys - end - - def self.valid_names - color_names.join(', ') - end - - def initialize(ground, name) - unless Named.color_names.include?(name) - raise ArgumentError, - "Unknown color name, valid names: #{self.class.valid_names}" - end - - super(ground, NAMES[name]) - end - end - - class RGB < Indexed - attr_reader :r, :g, :b - - def self.to_ansi_domain(value) - (6 * (value / 256.0)).to_i - end - - def initialize(ground, *values) - if values.min.negative? || values.max > 255 - raise ArgumentError, "RGB value outside 0-255 range" - end - - super(ground, 8) - @r, @g, @b = values - end - - def codes - super + [5, code_from_rgb] - end - - private - - def code_from_rgb - 16 + self.class.to_ansi_domain(r) * 36 + - self.class.to_ansi_domain(g) * 6 + - self.class.to_ansi_domain(b) - end - end - - class X11Named < RGB - include X11ColorNames - - def self.color_names - NAMES.keys - end - - def self.valid_names - color_names.join(', ') - end - - def initialize(ground, name) - unless X11Named.color_names.include?(name) - raise ArgumentError, - "Unknown color name, valid names: #{self.class.valid_names}" - end - - super(ground, *NAMES[name]) - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rainbow-3.1.1/lib/rainbow/ext/string.rb b/bundle/ruby/3.2.0/gems/rainbow-3.1.1/lib/rainbow/ext/string.rb deleted file mode 100644 index aee2fd6c..00000000 --- a/bundle/ruby/3.2.0/gems/rainbow-3.1.1/lib/rainbow/ext/string.rb +++ /dev/null @@ -1,64 +0,0 @@ -# frozen_string_literal: true - -require 'rainbow' - -module Rainbow - module Ext - module String - module InstanceMethods - def foreground(*color) - Rainbow(self).foreground(*color) - end - - alias color foreground - alias colour foreground - - def background(*color) - Rainbow(self).background(*color) - end - - def reset - Rainbow(self).reset - end - - def bright - Rainbow(self).bright - end - - def faint - Rainbow(self).faint - end - - def italic - Rainbow(self).italic - end - - def underline - Rainbow(self).underline - end - - def blink - Rainbow(self).blink - end - - def inverse - Rainbow(self).inverse - end - - def hide - Rainbow(self).hide - end - - def cross_out - Rainbow(self).cross_out - end - - alias strike cross_out - end - end - end -end - -class String - include Rainbow::Ext::String::InstanceMethods -end diff --git a/bundle/ruby/3.2.0/gems/rainbow-3.1.1/lib/rainbow/global.rb b/bundle/ruby/3.2.0/gems/rainbow-3.1.1/lib/rainbow/global.rb deleted file mode 100644 index 08599bfa..00000000 --- a/bundle/ruby/3.2.0/gems/rainbow-3.1.1/lib/rainbow/global.rb +++ /dev/null @@ -1,25 +0,0 @@ -# frozen_string_literal: true - -require_relative 'wrapper' - -module Rainbow - def self.global - @global ||= Wrapper.new - end - - def self.enabled - global.enabled - end - - def self.enabled=(value) - global.enabled = value - end - - def self.uncolor(string) - StringUtils.uncolor(string) - end -end - -def Rainbow(string) - Rainbow.global.wrap(string.to_s) -end diff --git a/bundle/ruby/3.2.0/gems/rainbow-3.1.1/lib/rainbow/null_presenter.rb b/bundle/ruby/3.2.0/gems/rainbow-3.1.1/lib/rainbow/null_presenter.rb deleted file mode 100644 index 104738f2..00000000 --- a/bundle/ruby/3.2.0/gems/rainbow-3.1.1/lib/rainbow/null_presenter.rb +++ /dev/null @@ -1,100 +0,0 @@ -# frozen_string_literal: true - -module Rainbow - class NullPresenter < ::String - def color(*_values) - self - end - - def background(*_values) - self - end - - def reset - self - end - - def bright - self - end - - def faint - self - end - - def italic - self - end - - def underline - self - end - - def blink - self - end - - def inverse - self - end - - def hide - self - end - - def cross_out - self - end - - def black - self - end - - def red - self - end - - def green - self - end - - def yellow - self - end - - def blue - self - end - - def magenta - self - end - - def cyan - self - end - - def white - self - end - - def method_missing(method_name, *args) - if Color::X11Named.color_names.include?(method_name) && args.empty? - self - else - super - end - end - - def respond_to_missing?(method_name, *args) - Color::X11Named.color_names.include?(method_name) && args.empty? || super - end - - alias foreground color - alias fg color - alias bg background - alias bold bright - alias dark faint - alias strike cross_out - end -end diff --git a/bundle/ruby/3.2.0/gems/rainbow-3.1.1/lib/rainbow/presenter.rb b/bundle/ruby/3.2.0/gems/rainbow-3.1.1/lib/rainbow/presenter.rb deleted file mode 100644 index 753f2736..00000000 --- a/bundle/ruby/3.2.0/gems/rainbow-3.1.1/lib/rainbow/presenter.rb +++ /dev/null @@ -1,144 +0,0 @@ -# frozen_string_literal: true - -require_relative 'string_utils' -require_relative 'x11_color_names' -require_relative 'color' - -module Rainbow - class Presenter < ::String - TERM_EFFECTS = { - reset: 0, - bright: 1, - faint: 2, - italic: 3, - underline: 4, - blink: 5, - inverse: 7, - hide: 8, - cross_out: 9 - }.freeze - - # Sets color of this text. - def color(*values) - wrap_with_sgr(Color.build(:foreground, values).codes) - end - - alias foreground color - alias fg color - - # Sets background color of this text. - def background(*values) - wrap_with_sgr(Color.build(:background, values).codes) - end - - alias bg background - - # Resets terminal to default colors/backgrounds. - # - # It shouldn't be needed to use this method because all methods - # append terminal reset code to end of string. - def reset - wrap_with_sgr(TERM_EFFECTS[:reset]) - end - - # Turns on bright/bold for this text. - def bright - wrap_with_sgr(TERM_EFFECTS[:bright]) - end - - alias bold bright - - # Turns on faint/dark for this text (not well supported by terminal - # emulators). - def faint - wrap_with_sgr(TERM_EFFECTS[:faint]) - end - - alias dark faint - - # Turns on italic style for this text (not well supported by terminal - # emulators). - def italic - wrap_with_sgr(TERM_EFFECTS[:italic]) - end - - # Turns on underline decoration for this text. - def underline - wrap_with_sgr(TERM_EFFECTS[:underline]) - end - - # Turns on blinking attribute for this text (not well supported by terminal - # emulators). - def blink - wrap_with_sgr(TERM_EFFECTS[:blink]) - end - - # Inverses current foreground/background colors. - def inverse - wrap_with_sgr(TERM_EFFECTS[:inverse]) - end - - # Hides this text (set its color to the same as background). - def hide - wrap_with_sgr(TERM_EFFECTS[:hide]) - end - - def cross_out - wrap_with_sgr(TERM_EFFECTS[:cross_out]) - end - - alias strike cross_out - - def black - color(:black) - end - - def red - color(:red) - end - - def green - color(:green) - end - - def yellow - color(:yellow) - end - - def blue - color(:blue) - end - - def magenta - color(:magenta) - end - - def cyan - color(:cyan) - end - - def white - color(:white) - end - - # We take care of X11 color method call here. - # Such as #aqua, #ghostwhite. - def method_missing(method_name, *args) - if Color::X11Named.color_names.include?(method_name) && args.empty? - color(method_name) - else - super - end - end - - def respond_to_missing?(method_name, *args) - Color::X11Named.color_names.include?(method_name) && args.empty? || super - end - - private - - def wrap_with_sgr(codes) #:nodoc: - self.class.new(StringUtils.wrap_with_sgr(self, [*codes])) - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rainbow-3.1.1/lib/rainbow/refinement.rb b/bundle/ruby/3.2.0/gems/rainbow-3.1.1/lib/rainbow/refinement.rb deleted file mode 100644 index cba942ba..00000000 --- a/bundle/ruby/3.2.0/gems/rainbow-3.1.1/lib/rainbow/refinement.rb +++ /dev/null @@ -1,14 +0,0 @@ -# frozen_string_literal: true - -require_relative 'presenter' -require_relative 'global' - -module Rainbow - refine String do - Presenter.instance_methods(false).each do |method_name| - define_method(method_name) do |*args| - ::Rainbow.global.wrap(self).send(method_name, *args) - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rainbow-3.1.1/lib/rainbow/string_utils.rb b/bundle/ruby/3.2.0/gems/rainbow-3.1.1/lib/rainbow/string_utils.rb deleted file mode 100644 index f9a4152e..00000000 --- a/bundle/ruby/3.2.0/gems/rainbow-3.1.1/lib/rainbow/string_utils.rb +++ /dev/null @@ -1,22 +0,0 @@ -# frozen_string_literal: true - -module Rainbow - class StringUtils - def self.wrap_with_sgr(string, codes) - return string if codes.empty? - - seq = "\e[" + codes.join(";") + "m" - - string = string.sub(/^(\e\[([\d;]+)m)*/) { |m| m + seq } - - return string if string.end_with? "\e[0m" - - string + "\e[0m" - end - - def self.uncolor(string) - # See http://www.commandlinefu.com/commands/view/3584/remove-color-codes-special-characters-with-sed - string.gsub(/\e\[[0-9;]*m/, '') - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rainbow-3.1.1/lib/rainbow/version.rb b/bundle/ruby/3.2.0/gems/rainbow-3.1.1/lib/rainbow/version.rb deleted file mode 100644 index 024d6e5a..00000000 --- a/bundle/ruby/3.2.0/gems/rainbow-3.1.1/lib/rainbow/version.rb +++ /dev/null @@ -1,5 +0,0 @@ -# frozen_string_literal: true - -module Rainbow - VERSION = "3.1.1" -end diff --git a/bundle/ruby/3.2.0/gems/rainbow-3.1.1/lib/rainbow/wrapper.rb b/bundle/ruby/3.2.0/gems/rainbow-3.1.1/lib/rainbow/wrapper.rb deleted file mode 100644 index 053d28ec..00000000 --- a/bundle/ruby/3.2.0/gems/rainbow-3.1.1/lib/rainbow/wrapper.rb +++ /dev/null @@ -1,22 +0,0 @@ -# frozen_string_literal: true - -require_relative 'presenter' -require_relative 'null_presenter' - -module Rainbow - class Wrapper - attr_accessor :enabled - - def initialize(enabled = true) - @enabled = enabled - end - - def wrap(string) - if enabled - Presenter.new(string.to_s) - else - NullPresenter.new(string.to_s) - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rainbow-3.1.1/lib/rainbow/x11_color_names.rb b/bundle/ruby/3.2.0/gems/rainbow-3.1.1/lib/rainbow/x11_color_names.rb deleted file mode 100644 index 1a5f78c6..00000000 --- a/bundle/ruby/3.2.0/gems/rainbow-3.1.1/lib/rainbow/x11_color_names.rb +++ /dev/null @@ -1,153 +0,0 @@ -# frozen_string_literal: true - -module Rainbow - module X11ColorNames - NAMES = { - aqua: [0, 255, 255], - aquamarine: [127, 255, 212], - mediumaquamarine: [102, 205, 170], - azure: [240, 255, 255], - beige: [245, 245, 220], - bisque: [255, 228, 196], - black: [0, 0, 0], - blanchedalmond: [255, 235, 205], - blue: [0, 0, 255], - darkblue: [0, 0, 139], - lightblue: [173, 216, 230], - mediumblue: [0, 0, 205], - aliceblue: [240, 248, 255], - cadetblue: [95, 158, 160], - dodgerblue: [30, 144, 255], - midnightblue: [25, 25, 112], - navyblue: [0, 0, 128], - powderblue: [176, 224, 230], - royalblue: [65, 105, 225], - skyblue: [135, 206, 235], - deepskyblue: [0, 191, 255], - lightskyblue: [135, 206, 250], - slateblue: [106, 90, 205], - darkslateblue: [72, 61, 139], - mediumslateblue: [123, 104, 238], - steelblue: [70, 130, 180], - lightsteelblue: [176, 196, 222], - brown: [165, 42, 42], - rosybrown: [188, 143, 143], - saddlebrown: [139, 69, 19], - sandybrown: [244, 164, 96], - burlywood: [222, 184, 135], - chartreuse: [127, 255, 0], - chocolate: [210, 105, 30], - coral: [255, 127, 80], - lightcoral: [240, 128, 128], - cornflower: [100, 149, 237], - cornsilk: [255, 248, 220], - crimson: [220, 20, 60], - cyan: [0, 255, 255], - darkcyan: [0, 139, 139], - lightcyan: [224, 255, 255], - firebrick: [178, 34, 34], - fuchsia: [255, 0, 255], - gainsboro: [220, 220, 220], - gold: [255, 215, 0], - goldenrod: [218, 165, 32], - darkgoldenrod: [184, 134, 11], - lightgoldenrod: [250, 250, 210], - palegoldenrod: [238, 232, 170], - gray: [190, 190, 190], - darkgray: [169, 169, 169], - dimgray: [105, 105, 105], - lightgray: [211, 211, 211], - slategray: [112, 128, 144], - lightslategray: [119, 136, 153], - webgray: [128, 128, 128], - green: [0, 255, 0], - darkgreen: [0, 100, 0], - lightgreen: [144, 238, 144], - palegreen: [152, 251, 152], - darkolivegreen: [85, 107, 47], - yellowgreen: [154, 205, 50], - forestgreen: [34, 139, 34], - lawngreen: [124, 252, 0], - limegreen: [50, 205, 50], - seagreen: [46, 139, 87], - darkseagreen: [143, 188, 143], - lightseagreen: [32, 178, 170], - mediumseagreen: [60, 179, 113], - springgreen: [0, 255, 127], - mediumspringgreen: [0, 250, 154], - webgreen: [0, 128, 0], - honeydew: [240, 255, 240], - indianred: [205, 92, 92], - indigo: [75, 0, 130], - ivory: [255, 255, 240], - khaki: [240, 230, 140], - darkkhaki: [189, 183, 107], - lavender: [230, 230, 250], - lavenderblush: [255, 240, 245], - lemonchiffon: [255, 250, 205], - lime: [0, 255, 0], - linen: [250, 240, 230], - magenta: [255, 0, 255], - darkmagenta: [139, 0, 139], - maroon: [176, 48, 96], - webmaroon: [127, 0, 0], - mintcream: [245, 255, 250], - mistyrose: [255, 228, 225], - moccasin: [255, 228, 181], - oldlace: [253, 245, 230], - olive: [128, 128, 0], - olivedrab: [107, 142, 35], - orange: [255, 165, 0], - darkorange: [255, 140, 0], - orchid: [218, 112, 214], - darkorchid: [153, 50, 204], - mediumorchid: [186, 85, 211], - papayawhip: [255, 239, 213], - peachpuff: [255, 218, 185], - peru: [205, 133, 63], - pink: [255, 192, 203], - deeppink: [255, 20, 147], - lightpink: [255, 182, 193], - hotpink: [255, 105, 180], - plum: [221, 160, 221], - purple: [160, 32, 240], - mediumpurple: [147, 112, 219], - rebeccapurple: [102, 51, 153], - webpurple: [127, 0, 127], - red: [255, 0, 0], - darkred: [139, 0, 0], - orangered: [255, 69, 0], - mediumvioletred: [199, 21, 133], - palevioletred: [219, 112, 147], - salmon: [250, 128, 114], - darksalmon: [233, 150, 122], - lightsalmon: [255, 160, 122], - seashell: [255, 245, 238], - sienna: [160, 82, 45], - silver: [192, 192, 192], - darkslategray: [47, 79, 79], - snow: [255, 250, 250], - tan: [210, 180, 140], - teal: [0, 128, 128], - thistle: [216, 191, 216], - tomato: [255, 99, 71], - turquoise: [64, 224, 208], - darkturquoise: [0, 206, 209], - mediumturquoise: [72, 209, 204], - paleturquoise: [175, 238, 238], - violet: [238, 130, 238], - darkviolet: [148, 0, 211], - blueviolet: [138, 43, 226], - wheat: [245, 222, 179], - white: [255, 255, 255], - antiquewhite: [250, 235, 215], - floralwhite: [255, 250, 240], - ghostwhite: [248, 248, 255], - navajowhite: [255, 222, 173], - whitesmoke: [245, 245, 245], - yellow: [255, 255, 0], - lightyellow: [255, 255, 224], - greenyellow: [173, 255, 47] - }.freeze - end -end diff --git a/bundle/ruby/3.2.0/gems/rake-13.1.0/History.rdoc b/bundle/ruby/3.2.0/gems/rake-13.1.0/History.rdoc deleted file mode 100644 index b8751f9b..00000000 --- a/bundle/ruby/3.2.0/gems/rake-13.1.0/History.rdoc +++ /dev/null @@ -1,2403 +0,0 @@ -=== 13.0.6 - -* Additional fix for #389 - Pull request #390 by hsbt - -=== 13.0.5 - -* Fixed the regression of #388 - Pull request #389 by hsbt - -=== 13.0.4 - -* Fix rake test loader swallowing useful error information. - Pull request #367 by deivid-rodriguez -* Add -C/--directory option the same as GNU make. - Pull request #376 by nobu - -=== 13.0.3 - -* Fix breaking change of execution order on TestTask. - Pull request #368 by ysakasin - -=== 13.0.2 - -==== Enhancements - -* Fix tests to work with current FileUtils - Pull Request #358 by jeremyevans -* Simplify default rake test loader - Pull Request #357 by deivid-rodriguez -* Update rdoc - Pull Request #366 by bahasalien -* Update broken links to rake articles from Avdi in README - Pull Request #360 by svl7 - -=== 13.0.1 - -==== Bug fixes - -* Fixed bug: Reenabled task raises previous exception on second invokation - Pull Request #271 by thorsteneckel -* Fix an incorrectly resolved arg pattern - Pull Request #327 by mjbellantoni - -=== 13.0.0 - -==== Enhancements - -* Follows recent changes on keyword arguments in ruby 2.7. - Pull Request #326 by nobu -* Make `PackageTask` be able to omit parent directory while packing files - Pull Request #310 by tonytonyjan -* Add order only dependency - Pull Request #269 by take-cheeze - -==== Compatibility changes - -* Drop old ruby versions(< 2.2) - -=== 12.3.3 - -==== Bug fixes - -* Use the application's name in error message if a task is not found. - Pull Request #303 by tmatilai - -==== Enhancements: - -* Use File.open explicitly. - -=== 12.3.2 - -==== Bug fixes - -* Fixed test fails caused by 2.6 warnings. - Pull Request #297 by hsbt - -==== Enhancements: - -* Rdoc improvements. - Pull Request #293 by colby-swandale -* Improve multitask performance. - Pull Request #273 by jsm -* Add alias `prereqs`. - Pull Request #268 by take-cheeze - -=== 12.3.1 - -==== Bug fixes - -* Support did_you_mean >= v1.2.0 which has a breaking change on formatters. - Pull request #262 by FUJI Goro. - -==== Enhancements: - -* Don't run task if it depends on already invoked but failed task. - Pull request #252 by Gonzalo Rodriguez. -* Make space trimming consistent for all task arguments. - Pull request #259 by Gonzalo Rodriguez. -* Removes duplicated inclusion of Rake::DSL in tests. - Pull request #254 by Gonzalo Rodriguez. -* Re-raise a LoadError that didn't come from require in the test loader. - Pull request #250 by Dylan Thacker-Smith. - -=== 12.3.0 - -==== Compatibility Changes - -* Bump `required_ruby_version` to Ruby 2.0.0. Rake has already - removed support for Ruby 1.9.x. - -==== Enhancements: - -* Support `test-bundled-gems` task on ruby core. - -=== 12.2.1 - -==== Bug fixes - -* Fixed to break Capistrano::Application on capistrano3. - -=== 12.2.0 - -==== Enhancements: - -* Make rake easier to use as a library - Pull request #211 by @drbrain -* Fix quadratic performance in FileTask#out_of_date? - Pull request #224 by @doudou -* Clarify output when printing nested exception traces - Pull request #232 by @urbanautomaton - -==== Bug fixes - -* Account for a file that match 2 or more patterns. - Pull request #231 by @styd - -=== 12.1.0 - -==== Enhancements: - -* Added did_you_mean feature for invalid rake task. - Pull request #221 by @xtina-starr -* Enabled to dependency chained by extensions. Pull request #39 by Petr Skocik. -* Make all of string literals to frozen objects on Ruby 2.4 or later. - -==== Bug fixes - -* Typo fixes in rakefile.rdoc. Pull request #180 by Yuta Kurotaki. -* Fix unexpected behavior of file task with dryrun option. - Pull request #183 by @aycabta. -* Make LoadError from running tests more obvious. Pull request #195 - by Eric Hodel. -* Fix unexpected TypeError with hash style option. Pull request #202 - by Kuniaki IGARASHI. - -=== 12.0.0 - -==== Compatibility Changes - -* Removed arguments on clear #157 by Jesse Bowes -* Removed `rake/contrib` packages. These are extracted to `rake-contrib` gem. -* Removed deprecated method named `last\_comment`. - -==== Enhancements: - -* Re-use trace option on `cleanup` task. #164 by Brian Henderson -* Actions adore keyword arguments #174 by Josh Cheek -* Rake::TaskArguments#key? alias of #has_key? #175 by Paul Annesley - -=== 11.3.0 / 2016-09-20 - -==== Enhancements: - -* Remove to reference `Fixnum` constant. Pull request #160 by nobu - -=== 11.2.2 / 2016-06-12 - -==== Bug fixes - -* Fix unexpected behavior with multiple dependencies on Rake::TestTask - -=== 11.2.1 / 2016-06-12 - -==== Bug fixes - -* Fix regression of dependencies handling on Rake::TestTask. Report #139 - -=== 11.2.0 / 2016-06-11 - -==== Bug fixes - -* Fix unexpected cut-out behavior on task description using triple dots - and exclamation. Report #106 from Stephan Kämper and Pull request #134 by Lee -* Fix empty argument assignment with `with_defaults` option. Pull request #135 - by bakunyo -* Ignore to use `hwprefs` on Darwin platform. Use sysctl now. Report #128 - -==== Enhancements - -* Spawn options for sh Pull equest #138 by Eric Hodel. -* Allow to specify dependencies(prerequisites) for Rake::TestTask - Pull request #117 by Tim Maslyuchenko -* Use Bundler task instead of hoe for gem release. -* Remove explicitly load to rubygems for Ruby 1.8. -* Unify to declare `Rake::VERSION`. -* Support xz format for PackageTask. - -=== 11.1.2 / 2016-03-28 - -==== Bug fixes - -* Remove `-W` option when Rake::TestTask#verbose enabled. It's misunderstanding - specification change with Rake 11. Partly revert #67 - -=== 11.1.1 / 2016-03-14 - -==== Bug fixes - -* Use `-W` instead of `--verbose` when Rake::TestTask#verbose enabled. - JRuby doesn't have `--verbose` option. - -=== 11.1.0 / 2016-03-11 - -==== Compatibility Changes - -* Revert to remove `last\_comment`. It will remove Rake 12. - -=== 11.0.1 / 2016-03-09 - -==== Bug fixes - -* Fixed packaging manifest. - -=== 11.0.0 / 2016-03-09 - -==== Bug fixes - -* Correctly handle bad encoding in exception messages. Pull request #113 - by Tomer Brisker -* Fix verbose option at TestTask. Pull request #67 by Mike Blumtritt - -==== Enhancements - -* Make FileList#exclude more analogous to FileList#include. -* Use IO.open instead of Open3.popen3 for CPU counter. -* Make Rake::Task#already_invoked publicly accessible. - Pull request #93 by Joe Rafaniello -* Lookup prerequisites with same name outside of scope instead of - matching self. Pull request #96 by Sandy Vanderbleek -* Make FileList#pathmap behave like String#pathmap. - Pull request #61 by Daniel Tamai -* Add fetch method to task arguments. - Pull request #12 by Chris Keathley -* Use ruby warnings by default. Pull request #97 by Harold Giménez - -==== Compatibility Changes - -* Removed to support Ruby 1.8.x -* Removed constant named `RAKEVERSION` -* Removed Rake::AltSystem -* Removed Rake::RubyForgePublisher -* Removed Rake::TaskManager#last\_comment. Use last\_description. -* Removed Rake::TaskLib#paste -* Removed Top-level SshDirPublisher, SshFreshDirPublisher, SshFilePublisher - and CompositePublisher from lib/rake/contrib/publisher.rb -* Removed "rake/runtest.rb" - -=== 10.5.0 / 2016-01-13 - -==== Enhancements - -* Removed monkey patching for Ruby 1.8. Pull request #46 by Pablo Herrero. -* Inheritance class of Rake::FileList returns always self class. - Pull request #74 by Thomas Scholz - -=== 10.4.2 / 2014-12-02 - -==== Bug fixes - -* Rake no longer edits ARGV. This allows you to re-exec rake from a rake - task. Pull requset #9 by Matt Palmer. -* Documented how Rake::DSL#desc handles sentences in task descriptions. - Issue #7 by Raza Sayed. -* Fixed test error on 1.9.3 with legacy RubyGems. Issue #8 by Matt Palmer. -* Deleted duplicated History entry. Pull request #10 by Yuji Yamamoto. - -=== 10.4.1 / 2014-12-01 - -==== Bug fixes - -* Reverted fix for #277 as it caused numerous issues for rake users. - rails/spring issue #366 by Gustavo Dutra. - -=== 10.4.0 / 2014-11-22 - -==== Enhancements - -* Upgraded to minitest 5. Pull request #292 by Teo Ljungberg. -* Added support for Pathname in rake tasks. Pull request #271 by Randy - Coulman. -* Rake now ignores falsy dependencies which allows for easier programmatic - creation of tasks. Pull request #273 by Manav. -* Rake no longer edits ARGV. This allows you to re-exec rake from a rake - task. Issue #277 by Matt Palmer. -* Etc.nprocessors is used for counting the number of CPUs. - -==== Bug fixes - -* Updated rake manpage. Issue #283 by Nathan Long, pull request #291 by - skittleys. -* Add Rake::LATE to allow rebuilding of files that depend on deleted files. - Bug #286, pull request #287 by David Grayson. -* Fix relinking of files when repackaging. Bug #276 by Muenze. -* Fixed some typos. Pull request #280 by Jed Northridge. -* Try counting CPUs via cpuinfo if host_os was not matched. Pull request - #282 by Edouard B. - -=== 10.3.2 / 2014-05-15 - -==== Bug fixes - -* Rake no longer infinitely loops when showing exception causes that refer to - each other. Bug #272 by Chris Bandy. -* Fixed documentation typos. Bug #275 by Jake Worth. - -=== 10.3.1 / 2014-04-17 - -==== Bug fixes - -* Really stop reporting an error when cleaning already-deleted files. Pull - request #269 by Randy Coulman -* Fixed infinite loop when cleaning already-deleted files on windows. - -=== 10.3 / 2014-04-15 - -==== Enhancements - -* Added --build-all option to rake which treats all file prerequisites as - out-of-date. Pull request #254 by Andrew Gilbert. -* Added Rake::NameSpace#scope. Issue #263 by Jon San Miguel. - -==== Bug fixes - -* Suppress org.jruby package files in rake error messages for JRuby users. - Issue #213 by Charles Nutter. -* Fixed typo, removed extra "h". Pull request #267 by Hsing-Hui Hsu. -* Rake no longer reports an error when cleaning already-deleted files. Pull - request #266 by Randy Coulman. -* Consume stderr while determining CPU count to avoid hang. Issue #268 by - Albert Sun. - -=== 10.2.2 / 2014-03-27 - -==== Bug fixes - -* Restored Ruby 1.8.7 compatibility - -=== 10.2.1 / 2014-03-25 - -==== Bug fixes - -* File tasks including a ':' are now top-level tasks again. Issue #262 by - Josh Holtrop. -* Use sysctl for CPU count for all BSDs. Pull request #261 by Joshua Stein. -* Fixed CPU detection for unknown platforms. - -=== 10.2.0 / 2014-03-24 - -==== Enhancements - -* Rake now requires Ruby 1.9 or newer. For me, this is a breaking change, but - it seems that Jim planned to release it with Rake 10.2. See also pull - request #247 by Philip Arndt. -* Rake now allows you to declare tasks under a namespace like: - - task 'a:b' do ... end - - Pull request #232 by Judson Lester. -* Task#source defaults to the first prerequisite in non-rule tasks. Pull - request #215 by Avdi Grimm. -* Rake now automatically rebuilds and reloads imported files. Pull request - #209 by Randy Coulman. -* The rake task arguments can contain escaped commas. Pull request #214 by - Filip Hrbek. -* Rake now prints the exception class on errors. Patch #251 by David Cornu. - -==== Bug fixes - -* Fixed typos. Pull request #256 by Valera Rozuvan, #250 via Jake Worth, #260 - by Zachary Scott. -* Fixed documentation for calling tasks with arguments. Pull request #235 by - John Varghese. -* Clarified `rake -f` usage message. Pull request #252 by Marco Pfatschbacher. -* Fixed a test failure on windows. Pull request #231 by Hiroshi Shirosaki. -* Fixed corrupted rake.1.gz. Pull request #225 by Michel Boaventura. -* Fixed bug in can\_detect\_signals? in test. Patch from #243 by Alexey - Borzenkov. - -=== 10.1.1 - -* Use http://github.com/jimweirich/rake instead of http://rake.rubyforge.org for - canonical project url. - -=== 10.1.0 - -==== Changes - -===== New Features - -* Add support for variable length task argument lists. If more actual - arguments are supplied than named arguments, then the extra - arguments values will be in args.extras. - -* Application name is not displayed in the help banner. (Previously - "rake" was hardcoded, now rake-based applications can display their - own names). - -===== Bug Fixes - -Bug fixes include: - -* Fix backtrace suppression issues. - -* Rules now explicit get task arguments passed to them. - -* Rename FileList#exclude? to FileList#exclude\_from\_list? to avoid - conflict with new Rails method. - -* Clean / Clobber tasks now report failure to remove files. - -* Plus heaps of internal code cleanup. - -==== Thanks - -As usual, it was input from users that drove a lot of these changes. -The following people contributed patches, made suggestions or made -otherwise helpful comments. Thanks to ... - -* Michael Nikitochkin (general code cleanup) -* Vipul A M (general code cleanup) -* Dennis Bell (variable length task argument lists) -* Jacob Swanner (rules arguments) -* Rafael Rosa Fu (documentation typo) -* Stuart Nelson (install.rb fixes) -* Lee Hambley (application name in help banner) - --- Jim Weirich - -=== 10.0.3 - - "Jim, when will Rake reach version 1.0?" - -Over the past several years I've been asked that question at -conferences, panels and over twitter. Due to historical reasons (or -maybe just plain laziness) Rake has (incorrectly) been treating the -second digit of the version as the major release number. So in my head -Rake was already at version 9. - -Well, it's time to fix things. This next version of Rake drops old, -crufty, backwards compatibility hacks such as top level constants, DSL -methods defined in Object and numerous other features that are just no -longer desired. It's also time to drop the leading zero from the -version number as well and call this new version of rake what it -really is: Version 10. - -So, welcome to Rake 10.0! - -Rake 10 is actually feature identical to the latest version of Rake 9 -(that would be the version spelled 0.9.3), *except* that Rake 10 drops -all the sundry deprecated features that have accumulated over the years. - -If your Rakefile is up to date and current with all the new features -of Rake 10, you are ready to go. If your Rakefile still uses a few -deprecated feeatures, feel free to use Rake 9 (0.9.3) with the same -feature set. Just be aware that future features will be in Rake 10 -family line. - -==== Changes - -As mentioned above, there are no new features in Rake 10. However, -there are a number of features missing: - -* Classic namespaces are now gone. Rake is no longer able to reflect - the options settings in the global variables ($rakefile, $show\_tasks, - $show\_prereqs, $trace, $dryrun and $silent). The - --classic-namespace option is no longer supported. - -* Global constants are no longer supported. This includes - Task, FileTask, FileCreationTask and - RakeApp). The constant missing hook to warn about using - global rake constants has been removed. - -* The Rake DSL methods (task, file, directory, etc) are in their own - module (Rake::DSL). The stub versions of these methods (that printed - warnings) in Object have been removed. However, the DSL methods are - added to the top-level main object. Since main is - not in the inheritance tree, the presence of the DSL methods in main - should be low impact on other libraries. - - If you want to use the Rake DSL commands from your own code, just - include Rake::DSL into your own classes and modules. - -* The deprecated syntax for task arguments (the one using - :needs) has been removed. - -* The --reduce-compat flag has been removed (it's not needed - anymore). - -* The deprecated rake/sys.rb library has been removed. - -* The deprecated rake/rdoctask.rb library has been removed. - RDoc supplies its own rake task now. - -* The deprecated rake/gempackagetask.rb library has been - removed. Gem supplies its own package task now. - -There is one small behavioral change: - -* Non-file tasks now always report the current time as their time - stamp. This is different from the previous behavior where non-file - tasks reported current time only if there were no prerequisites, and - the max prerequisite timestamp otherwise. This lead to inconsistent - and surprising behavior when adding prerequisites to tasks that in - turn were prequisites to file tasks. The new behavior is more - consistent and predictable. - -==== Changes (from 0.9.3, 0.9.4, 0.9.5) - -Since Rake 10 includes the changes from the last version of Rake 9, -we'll repeat the changes for versions 0.9.3 through 0.9.5 here. - -===== New Features (in 0.9.3) - -* Multitask tasks now use a thread pool. Use -j to limit the number of - available threads. - -* Use -m to turn regular tasks into multitasks (use at your own risk). - -* You can now do "Rake.add_rakelib 'dir'" in your Rakefile to - programatically add rake task libraries. - -* You can specific backtrace suppression patterns (see - --suppress-backtrace) - -* Directory tasks can now take prerequisites and actions - -* Use --backtrace to request a full backtrace without the task trace. - -* You can say "--backtrace=stdout" and "--trace=stdout" to route trace - output to standard output rather than standard error. - -* Optional 'phony' target (enable with 'require 'rake/phony'") for - special purpose builds. - -* Task#clear now clears task comments as well as actions and - prerequisites. Task#clear_comment will specifically target comments. - -* The --all option will force -T and -D to consider all the tasks, - with and without descriptions. - -===== Bug Fixes (in 0.9.3) - -* Semi-colons in windows rakefile paths now work. - -* Improved Control-C support when invoking multiple test suites. - -* egrep method now reads files in text mode (better support for - Windows) - -* Better deprecation line number reporting. - -* The -W option now works with all tasks, whether they have a - description or not. - -* File globs in rake should not be sorted alphabetically, independent - of file system and platform. - -* Numerous internal improvements. - -* Documentation typos and fixes. - -===== Bug Fixes (in 0.9.4) - -* Exit status with failing tests is not correctly set to non-zero. - -* Simplified syntax for phony task (for older versions of RDoc). - -* Stand alone FileList usage gets glob function (without loading in - extra dependencies) - -===== Bug Fixes (in 0.9.5) - -* --trace and --backtrace no longer swallow following task names. - -==== Thanks - -As usual, it was input from users that drove a lot of these changes. The -following people contributed patches, made suggestions or made -otherwise helpful comments. Thanks to ... - -* Aaron Patterson -* Dylan Smith -* Jo Liss -* Jonas Pfenniger -* Kazuki Tsujimoto -* Michael Bishop -* Michael Elufimov -* NAKAMURA Usaku -* Ryan Davis -* Sam Grönblom -* Sam Phippen -* Sergio Wong -* Tay Ray Chuan -* grosser -* quix - -Also, many thanks to Eric Hodel for assisting with getting this release -out the door. - --- Jim Weirich - -=== 10.0.2 - -==== Changes - -===== Bug Fixes - -* --trace and --backtrace no longer swallow following task names. - -==== Thanks - -As usual, it was input from users that drove a lot of these changes. The -following people contributed patches, made suggestions or made -otherwise helpful comments. Thanks to ... - -* Aaron Patterson -* Dylan Smith -* Jo Liss -* Jonas Pfenniger -* Kazuki Tsujimoto -* Michael Bishop -* Michael Elufimov -* NAKAMURA Usaku -* Ryan Davis -* Sam Grönblom -* Sam Phippen -* Sergio Wong -* Tay Ray Chuan -* grosser -* quix - -Also, many thanks to Eric Hodel for assisting with getting this release -out the door. - --- Jim Weirich - -=== 10.0.1 - -==== Changes - -===== Bug Fixes - -* Exit status with failing tests is not correctly set to non-zero. - -* Simplified syntax for phony task (for older versions of RDoc). - -* Stand alone FileList usage gets glob function (without loading in - extra dependencies) - -==== Thanks - -As usual, it was input from users that drove a lot of these changes. The -following people contributed patches, made suggestions or made -otherwise helpful comments. Thanks to ... - -* Aaron Patterson -* Dylan Smith -* Jo Liss -* Jonas Pfenniger -* Kazuki Tsujimoto -* Michael Bishop -* Michael Elufimov -* NAKAMURA Usaku -* Ryan Davis -* Sam Grönblom -* Sam Phippen -* Sergio Wong -* Tay Ray Chuan -* grosser -* quix - -Also, many thanks to Eric Hodel for assisting with getting this release -out the door. - --- Jim Weirich - -=== 10.0.0 - - "Jim, when will Rake reach version 1.0?" - -Over the past several years I've been asked that question at -conferences, panels and over twitter. Due to historical reasons (or -maybe just plain laziness) Rake has (incorrectly) been treating the -second digit of the version as the major release number. So in my head -Rake was already at version 9. - -Well, it's time to fix things. This next version of Rake drops old, -crufty, backwards compatibility hacks such as top level constants, DSL -methods defined in Object and numerous other features that are just no -longer desired. It's also time to drop the leading zero from the -version number as well and call this new version of rake what it -really is: Version 10. - -So, welcome to Rake 10.0! - -Rake 10 is actually feature identical to the latest version of Rake 9 -(that would be the version spelled 0.9.3), *except* that Rake 10 drops -all the sundry deprecated features that have accumulated over the years. - -If your Rakefile is up to date and current with all the new features -of Rake 10, you are ready to go. If your Rakefile still uses a few -deprecated feeatures, feel free to use Rake 9 (0.9.3) with the same -feature set. Just be aware that future features will be in Rake 10 -family line. - -==== Changes in 10.0 - -As mentioned above, there are no new features in Rake 10. However, -there are a number of features missing: - -* Classic namespaces are now gone. Rake is no longer able to reflect - the options settings in the global variables ($rakefile, $show\_tasks, - $show\_prereqs, $trace, $dryrun and $silent). The - --classic-namespace option is no longer supported. - -* Global constants are no longer supported. This includes - Task, FileTask, FileCreationTask and - RakeApp). The constant missing hook to warn about using - global rake constants has been removed. - -* The Rake DSL methods (task, file, directory, etc) are in their own - module (Rake::DSL). The stub versions of these methods (that printed - warnings) in Object have been removed. However, the DSL methods are - added to the top-level main object. Since main is - not in the inheritance tree, the presence of the DSL methods in main - should be low impact on other libraries. - - If you want to use the Rake DSL commands from your own code, just - include Rake::DSL into your own classes and modules. - -* The deprecated syntax for task arguments (the one using - :needs) has been removed. - -* The --reduce-compat flag has been removed (it's not needed - anymore). - -* The deprecated rake/sys.rb library has been removed. - -* The deprecated rake/rdoctask.rb library has been removed. - RDoc supplies its own rake task now. - -* The deprecated rake/gempackagetask.rb library has been - removed. Gem supplies its own package task now. - -There is one small behavioral change: - -* Non-file tasks now always report the current time as their time - stamp. This is different from the previous behavior where non-file - tasks reported current time only if there were no prerequisites, and - the max prerequisite timestamp otherwise. This lead to inconsistent - and surprising behavior when adding prerequisites to tasks that in - turn were prequisites to file tasks. The new behavior is more - consistent and predictable. - -==== Changes (from 0.9.3) - -Since Rake 10 includes the changes from the last version of Rake 9, -we'll repeat the changes for version 0.9.3 here. - -===== New Features - -* Multitask tasks now use a thread pool. Use -j to limit the number of - available threads. - -* Use -m to turn regular tasks into multitasks (use at your own risk). - -* You can now do "Rake.add_rakelib 'dir'" in your Rakefile to - programatically add rake task libraries. - -* You can specific backtrace suppression patterns (see - --suppress-backtrace) - -* Directory tasks can now take prerequisites and actions - -* Use --backtrace to request a full backtrace without the task trace. - -* You can say "--backtrace=stdout" and "--trace=stdout" to route trace - output to standard output rather than standard error. - -* Optional 'phony' target (enable with 'require 'rake/phony'") for - special purpose builds. - -* Task#clear now clears task comments as well as actions and - prerequisites. Task#clear_comment will specifically target comments. - -* The --all option will force -T and -D to consider all the tasks, - with and without descriptions. - -===== Bug Fixes - -* Semi-colons in windows rakefile paths now work. - -* Improved Control-C support when invoking multiple test suites. - -* egrep method now reads files in text mode (better support for - Windows) - -* Better deprecation line number reporting. - -* The -W option now works with all tasks, whether they have a - description or not. - -* File globs in rake should not be sorted alphabetically, independent - of file system and platform. - -* Numerous internal improvements. - -* Documentation typos and fixes. - - -==== Thanks - -As usual, it was input from users that drove a lot of these changes. The -following people contributed patches, made suggestions or made -otherwise helpful comments. Thanks to ... - -* Aaron Patterson -* Dylan Smith -* Jo Liss -* Jonas Pfenniger -* Kazuki Tsujimoto -* Michael Bishop -* Michael Elufimov -* NAKAMURA Usaku -* Ryan Davis -* Sam Grönblom -* Sam Phippen -* Sergio Wong -* Tay Ray Chuan -* grosser -* quix - -Also, many thanks to Eric Hodel for assisting with getting this release -out the door. - --- Jim Weirich - -=== 0.9.6 - -Rake version 0.9.6 contains a number of fixes mainly for merging -Rake into the Ruby source tree and fixing tests. - -==== Changes - -===== Bug Fixes (0.9.6) - -* Better trace output when using a multi-threaded Rakefile. -* Arg parsing is now consistent for tasks and multitasks. -* Skip exit code test in versions of Ruby that don't support it well. - -Changes for better integration with the Ruby source tree: - -* Fix version literal for Ruby source tree build. -* Better loading of libraries for testing in Ruby build. -* Use the ruby version provided by Ruby's tests. - -==== Thanks - -As usual, it was input from users that drove a alot of these changes. The -following people either contributed patches, made suggestions or made -otherwise helpful comments. Thanks to ... - -* Aaron Patterson -* Dylan Smith -* Jo Liss -* Jonas Pfenniger -* Kazuki Tsujimoto -* Michael Bishop -* Michael Elufimov -* NAKAMURA Usaku -* Ryan Davis -* Sam Grönblom -* Sam Phippen -* Sergio Wong -* Tay Ray Chuan -* grosser -* quix - -Also, many thanks to Eric Hodel for assisting with getting this release -out the door. - --- Jim Weirich - -=== 0.9.5 - -Rake version 0.9.5 contains a number of bug fixes. - -==== Changes - -===== Bug Fixes (0.9.5) - -* --trace and --backtrace no longer swallow following task names. - -==== Thanks - -As usual, it was input from users that drove a alot of these changes. The -following people either contributed patches, made suggestions or made -otherwise helpful comments. Thanks to ... - -* Aaron Patterson -* Dylan Smith -* Jo Liss -* Jonas Pfenniger -* Kazuki Tsujimoto -* Michael Bishop -* Michael Elufimov -* NAKAMURA Usaku -* Ryan Davis -* Sam Grönblom -* Sam Phippen -* Sergio Wong -* Tay Ray Chuan -* grosser -* quix - -Also, many thanks to Eric Hodel for assisting with getting this release -out the door. - --- Jim Weirich - -=== 0.9.4 - -Rake version 0.9.4 contains a number of bug fixes. - -==== Changes - -===== Bug Fixes (0.9.4) - -* Exit status with failing tests is not correctly set to non-zero. - -* Simplified syntax for phony task (for older versions of RDoc). - -* Stand alone FileList usage gets glob function (without loading in - extra dependencies) - -==== Thanks - -As usual, it was input from users that drove a alot of these changes. The -following people either contributed patches, made suggestions or made -otherwise helpful comments. Thanks to ... - -* Aaron Patterson -* Dylan Smith -* Jo Liss -* Jonas Pfenniger -* Kazuki Tsujimoto -* Michael Bishop -* Michael Elufimov -* NAKAMURA Usaku -* Ryan Davis -* Sam Grönblom -* Sam Phippen -* Sergio Wong -* Tay Ray Chuan -* grosser -* quix - -Also, many thanks to Eric Hodel for assisting with getting this release -out the door. - --- Jim Weirich - -=== 0.9.3 - -Rake version 0.9.3 contains some new, backwards compatible features and -a number of bug fixes. - -==== Changes - -===== New Features - -* Multitask tasks now use a thread pool. Use -j to limit the number of - available threads. - -* Use -m to turn regular tasks into multitasks (use at your own risk). - -* You can now do "Rake.add_rakelib 'dir'" in your Rakefile to - programatically add rake task libraries. - -* You can specific backtrace suppression patterns (see - --suppress-backtrace) - -* Directory tasks can now take prerequisites and actions - -* Use --backtrace to request a full backtrace without the task trace. - -* You can say "--backtrace=stdout" and "--trace=stdout" to route trace - output to standard output rather than standard error. - -* Optional 'phony' target (enable with 'require 'rake/phony'") for - special purpose builds. - -* Task#clear now clears task comments as well as actions and - prerequisites. Task#clear_comment will specifically target comments. - -* The --all option will force -T and -D to consider all the tasks, - with and without descriptions. - -===== Bug Fixes - -* Semi-colons in windows rakefile paths now work. - -* Improved Control-C support when invoking multiple test suites. - -* egrep method now reads files in text mode (better support for - Windows) - -* Better deprecation line number reporting. - -* The -W option now works with all tasks, whether they have a - description or not. - -* File globs in rake should not be sorted alphabetically, independent - of file system and platform. - -* Numerous internal improvements. - -* Documentation typos and fixes. - -==== Thanks - -As usual, it was input from users that drove a alot of these changes. The -following people either contributed patches, made suggestions or made -otherwise helpful comments. Thanks to ... - -* Aaron Patterson -* Dylan Smith -* Jo Liss -* Jonas Pfenniger -* Kazuki Tsujimoto -* Michael Bishop -* Michael Elufimov -* NAKAMURA Usaku -* Ryan Davis -* Sam Grönblom -* Sam Phippen -* Sergio Wong -* Tay Ray Chuan -* grosser -* quix - -Also, many thanks to Eric Hodel for assisting with getting this release -out the door. - --- Jim Weirich - -=== Rake 0.9.2.2 - -Rake version 0.9.2.2 is mainly bug fixes. - -==== Changes - -* The rake test loader now removes arguments it has processed. Issue #51 -* Rake::TaskArguments now responds to #values\_at -* RakeFileUtils.verbose_flag = nil silences output the same as 0.8.7 -* Rake tests are now directory-independent -* Rake tests are no longer require flexmock -* Commands constant is no longer polluting top level namespace. -* Show only the interesting portion of the backtrace by default (James M. Lawrence). -* Added --reduce-compat option to remove backward compatible DSL hacks (James M. Lawrence). - -==== Thanks - -As usual, it was input from users that drove a alot of these changes. The -following people either contributed patches, made suggestions or made -otherwise helpful comments. Thanks to ... - -* James M. Lawrence (quix) -* Roger Pack -* Cezary Baginski -* Sean Scot August Moon -* R.T. Lechow -* Alex Chaffee -* James Tucker -* Matthias Lüdtke -* Santiago Pastorino - -Also, bit thanks to Eric Hodel for assisting with getting this release -out the door (where "assisting" includes, but is not by any means -limited to, "pushing" me to get it done). - --- Jim Weirich - -=== 0.9.2 - -Rake version 0.9.2 has a few small fixes. See below for details. - -==== Changes - -* Support for Ruby 1.8.6 was fixed. -* Global DSL warnings now honor --no-deprecate - -==== Thanks - -As usual, it was input from users that drove a alot of these changes. The -following people either contributed patches, made suggestions or made -otherwise helpful comments. Thanks to ... - -* James M. Lawrence (quix) -* Roger Pack -* Cezary Baginski -* Sean Scot August Moon -* R.T. Lechow -* Alex Chaffee -* James Tucker -* Matthias Lüdtke -* Santiago Pastorino - -Also, bit thanks to Eric Hodel for assisting with getting this release -out the door (where "assisting" includes, but is not by any means -limited to, "pushing" me to get it done). - --- Jim Weirich - -=== 0.9.1 - -Rake version 0.9.1 has a number of bug fixes and enhancments (see -below for more details). Additionally, the internals have be slightly -restructured and improved. - -==== Changes - -Rake 0.9.1 adds back the global DSL methods, but with deprecation -messages. This allows Rake 0.9.1 to be used with older rakefiles with -warning messages. - -==== Thanks - -As usual, it was input from users that drove a alot of these changes. The -following people either contributed patches, made suggestions or made -otherwise helpful comments. Thanks to ... - -* James M. Lawrence (quix) -* Roger Pack -* Cezary Baginski -* Sean Scot August Moon -* R.T. Lechow -* Alex Chaffee -* James Tucker -* Matthias Lüdtke -* Santiago Pastorino - -Also, bit thanks to Eric Hodel for assisting with getting this release -out the door (where "assisting" includes, but is not by any means -limited to, "pushing" me to get it done). - --- Jim Weirich - -=== 0.9.0 - -Rake version 0.9.0 has a number of bug fixes and enhancments (see -below for more details). Additionally, the internals have be slightly -restructured and improved. - -==== Changes - -===== New Features / Enhancements / Bug Fixes in Version 0.9.0 - -* Rake now warns when the deprecated :needs syntax used (and suggests - the proper syntax in the warning). - -* Moved Rake DSL commands to top level ruby object 'main'. Rake DSL - commands are no longer private methods in Object. (Suggested by - James M. Lawrence/quix) - -* Rake now uses case-insensitive comparisons to find the Rakefile on Windows. - Based on patch by Roger Pack. - -* Rake now requires (instead of loads) files in the test task. Patch by Cezary - Baginski. - -* Fixed typos. Patches by Sean Scot August Moon and R.T. Lechow. - -* Rake now prints the Rakefile directory only when it's different from the - current directory. Patch by Alex Chaffee. - -* Improved rakefile_location discovery on Windows. Patch by James Tucker. - -* Rake now recognizes "Windows Server" as a windows system. Patch by Matthias - Lüdtke - -* Rake::RDocTask is deprecated. Use RDoc::Task from RDoc 2.4.2+ (require - 'rdoc/task') - -* Rake::GemPackageTask is deprecated. Use Gem::PackageTask (require - 'rubygems/package\_task') - -* Rake now outputs various messages to $stderr instead of $stdout. - -* Rake no longer emits warnings for Config. Patch by Santiago Pastorino. - -* Removed Rake's DSL methods from the top level scope. If you need to - call 'task :xzy' in your code, include Rake::DSL into your class, or - put the code in a Rake::DSL.environment do ... end block. - -* Split rake.rb into individual files. - -* Support for the --where (-W) flag for showing where a task is defined. - -* Fixed quoting in test task. - (http://onestepback.org/redmine/issues/show/44, - http://www.pivotaltracker.com/story/show/1223138) - -* Fixed the silent option parsing problem. - (http://onestepback.org/redmine/issues/show/47) - -* Fixed :verbose=>false flag on sh and ruby commands. - -* Rake command line options may be given by default in a RAKEOPT - environment variable. - -* Errors in Rake will now display the task invocation chain in effect - at the time of the error. - -* Accepted change by warnickr to not expand test patterns in shell - (allowing more files in the test suite). - -* Fixed that file tasks did not perform prereq lookups in scope - (Redmine #57). - -==== Thanks - -As usual, it was input from users that drove a alot of these changes. The -following people either contributed patches, made suggestions or made -otherwise helpful comments. Thanks to ... - -* James M. Lawrence (quix) -* Roger Pack -* Cezary Baginski -* Sean Scot August Moon -* R.T. Lechow -* Alex Chaffee -* James Tucker -* Matthias Lüdtke -* Santiago Pastorino - -Also, bit thanks to Eric Hodel for assisting with getting this release -out the door (where "assisting" includes, but is not by any means -limited to, "pushing" me to get it done). - --- Jim Weirich - - -=== 0.8.7 - -Rake version 0.8.5 introduced greatly improved support for executing -commands on Windows. The "sh" command now has the same semantics on -Windows that it has on Unix based platforms. - -Rake version 0.8.6 includes minor fixes the the RDoc generation. -Rake version 0.8.7 includes a minor fix for JRuby running on windows. - -==== Changes - -===== New Features / Enhancements in Version 0.8.5 - -* Improved implementation of the Rake system command for Windows. - (patch from James M. Lawrence/quix) - -* Support for Ruby 1.9's improved system command. (patch from James - M. Lawrence/quix) - -* Rake now includes the configured extension when invoking an - executable (Config::CONFIG['EXEEXT]) - -===== Bug Fixes in Version 0.8.5 - -* Environment variable keys are now correctly cased (it matters in - some implementations). - -==== Thanks - -As usual, it was input from users that drove a alot of these changes. The -following people either contributed patches, made suggestions or made -otherwise helpful comments. Thanks to ... - -* Charles Nutter - --- Jim Weirich - -=== 0.8.6 - -Rake version 0.8.5 introduced greatly improved support for executing -commands on Windows. The "sh" command now has the same semantics on -Windows that it has on Unix based platforms. - -Rake version 0.8.5 includes minor fixes the the RDoc generation. - -==== Thanks - -As usual, it was input from users that drove a alot of these changes. The -following people either contributed patches, made suggestions or made -otherwise helpful comments. Thanks to ... - -* James M. Lawrence/quix -* Luis Lavena - --- Jim Weirich - -=== 0.8.5 - -Rake version 0.8.5 is a new release of Rake with greatly improved -support for executing commands on Windows. The "sh" command now has -the same semantics on Windows that it has on Unix based platforms. - -==== Changes - -===== New Features / Enhancements in Version 0.8.5 - -* Improved implementation of the Rake system command for Windows. - (patch from James M. Lawrence/quix) - -* Support for Ruby 1.9's improved system command. (patch from James - M. Lawrence/quix) - -* Rake now includes the configured extension when invoking an - executable (Config::CONFIG['EXEEXT]) - -===== Bug Fixes in Version 0.8.5 - -* Environment variable keys are now correctly cased (it matters in - some implementations). - -==== Thanks - -As usual, it was input from users that drove a alot of these changes. The -following people either contributed patches, made suggestions or made -otherwise helpful comments. Thanks to ... - -* James M. Lawrence/quix -* Luis Lavena - --- Jim Weirich - -=== 0.8.4 - -Rake version 0.8.4 is a bug-fix release of rake. - -NOTE: The version of Rake that comes with Ruby 1.9 has diverged - slightly from the core Rake code base. Rake 0.8.4 will work - with Ruby 1.9, but is not a strict upgrade for the Rake that - comes with Ruby 1.9. A (near) future release of Rake will unify - those two codebases. - -==== Letter Writing Campaign - -Thanks to Aaron Patterson (@tenderlove) and Eric Hodel (@drbrain) for -their encouraging support in organizing a letter writing campaign to -lobby for the "Warning Free" release of rake 0.8.4. A special callout -goes to Jonathan D. Lord, Sr (Dr. Wingnut) whose postcard was the -first to actually reach me. (see -http://tenderlovemaking.com/2009/02/26/we-need-a-new-version-of-rake/ -for details) - -==== Changes - -===== New Features / Enhancements in Version 0.8.4 - -* Case is preserved on rakefile names. (patch from James - M. Lawrence/quix) - -* Improved Rakefile case insensitivity testing (patch from Luis - Lavena). - -* Windows system dir search order is now: HOME, HOMEDRIVE + HOMEPATH, - APPDATA, USERPROFILE (patch from Luis Lavena) - -* MingGW is now recognized as a windows platform. (patch from Luis - Lavena) - -===== Bug Fixes in Version 0.8.4 - -* Removed reference to manage_gem to fix the warning produced by the - gem package task. - -* Fixed stray ARGV option problem that was interfering with - Test::Unit::Runner. (patch from Pivotal Labs) - -===== Infrastructure Improvements in Version 0.8.4 - -* Numerous fixes to the windows test suite (patch from Luis Lavena). - -* Improved Rakefile case insensitivity testing (patch from Luis - Lavena). - -* Better support for windows paths in the test task (patch from Simon - Chiang/bahuvrihi) - -==== Thanks - -As usual, it was input from users that drove a alot of these changes. The -following people either contributed patches, made suggestions or made -otherwise helpful comments. Thanks to ... - -* James M. Lawrence/quix -* Luis Lavena -* Pivotal Labs -* Simon Chiang/bahuvrihi - --- Jim Weirich - -=== 0.8.3 - -Rake version 0.8.3 is a bug-fix release of rake. - -==== Changes - -===== Bug Fixes in Version 0.8.3 - -* Enhanced the system directory detection in windows. We now check - HOMEDRIVE/HOMEPATH and USERPROFILE if APPDATA isn't found. (Patch - supplied by James Tucker). Rake no long aborts if it can't find the - directory. - -* Added fix to handle ruby installations in directories with spaces in - their name. - -==== Thanks - -As usual, it was input from users that drove a alot of these changes. The -following people either contributed patches, made suggestions or made -otherwise helpful comments. Thanks to ... - -* Edwin Pratomo -* Gavin Stark -* Adam Q. Salter -* Adam Majer -* Emanuel Indermühle -* Ittay Dror -* Bheeshmar Redheendran (for spending an afternoon with me debugging - windows issues) - --- Jim Weirich - - -=== 0.8.2 - -Rake version 0.8.2 is a new release of rake that includes a number of -new features and numerous bug fixes. - -==== Changes - -===== New Features in Version 0.8.2 - -* Switched from getoptlong to optparse (patches supplied by Edwin - Pratomo). - -* The -T option will now attempt to dynamically sense the size of the - terminal. The -T output will only self-truncate if the output is a - tty. However, if RAKE_COLUMNS is explicitly set, it will be honored - in any case. (Patch provided by Gavin Stark). - -* The following public methods have been added to rake task objects: - - * task.clear -- Clear both the prerequisites and actions of the - target rake task. - * task.clear_prerequisites -- Clear all the existing prerequisites - from the target rake task. - * task.clear_actions -- Clear all the existing actions from the - target rake task. - * task.reenable -- Re-enable a task, allowing its actions to be - executed again if the task is invoked. - -* Changed RDoc test task to have no default template. This makes it - easier for the tempate to pick up the template from the environment. - -* Default values for task arguments can easily be specified with the - :with_defaults method. (Idea for default argument merging supplied - by (Adam Q. Salter) - -===== Bug Fixes in Version 0.8.2 - -* Fixed bug in package task so that it will include the subdir - directory in the package for testing. (Bug found by Adam Majer) - -* Fixed filename dependency order bug in test\_inspect\_pending and - test\_to\_s\_pending. (Bug found by Adam Majer) - -* Fixed check for file utils options to make them immune to the - symbol/string differences. (Patch supplied by Edwin Pratomo) - -* Fixed bug with rules involving multiple source, where only the first - dependency of a rule has any effect (Patch supplied by Emanuel - Indermühle) - -* FileList#clone and FileList#dup have better sematics w.r.t. taint - and freeze. - -* Changed from using Mutex to Monitor. Evidently Mutex causes thread - join errors when Ruby is compiled with -disable-pthreads. (Patch - supplied by Ittay Dror) - -* Fixed bug in makefile parser that had problems with extra spaces in - file task names. (Patch supplied by Ittay Dror) - -==== Other changes in Version 0.8.2 - -* Added ENV var to rake's own Rakefile to prevent OS X from including - extended attribute junk in the rake package tar file. (Bug found by - Adam Majer) - -* Added a performance patch for reading large makefile dependency - files. (Patch supplied by Ittay Dror) - -==== Task Argument Examples - -Prior to version 0.8.0, rake was only able to handle command line -arguments of the form NAME=VALUE that were passed into Rake via the -ENV hash. Many folks had asked for some kind of simple command line -arguments, perhaps using "--" to separate regular task names from -argument values on the command line. The problem is that there was no -easy way to associate positional arguments on the command line with -different tasks. Suppose both tasks :a and :b expect a command line -argument: does the first value go with :a? What if :b is run first? -Should it then get the first command line argument. - -Rake 0.8.0 solves this problem by explicitly passing values directly -to the tasks that need them. For example, if I had a release task -that required a version number, I could say: - - rake release[0.8.2] - -And the string "0.8.2" will be passed to the :release task. Multiple -arguments can be passed by separating them with a comma, for example: - - rake name[john,doe] - -Just a few words of caution. The rake task name and its arguments -need to be a single command line argument to rake. This generally -means no spaces. If spaces are needed, then the entire rake + -argument string should be quoted. Something like this: - - rake "name[billy bob, smith]" - -(Quoting rules vary between operating systems and shells, so make sure -you consult the proper docs for your OS/shell). - -===== Tasks that Expect Parameters - -Parameters are only given to tasks that are setup to expect them. In -order to handle named parameters, the task declaration syntax for -tasks has been extended slightly. - -For example, a task that needs a first name and last name might be -declared as: - - task :name, :first_name, :last_name - -The first argument is still the name of the task (:name in this case). -The next to argumements are the names of the parameters expected by -:name (:first_name and :last_name in the example). - -To access the values of the parameters, the block defining the task -behaviour can now accept a second parameter: - - task :name, :first_name, :last_name do |t, args| - puts "First name is #{args.first_name}" - puts "Last name is #{args.last_name}" - end - -The first argument of the block "t" is always bound to the current -task object. The second argument "args" is an open-struct like object -that allows access to the task arguments. Extra command line -arguments to a task are ignored. Missing command line arguments are -given the nil value. - -==== Thanks - -As usual, it was input from users that drove a alot of these changes. The -following people either contributed patches, made suggestions or made -otherwise helpful comments. Thanks to ... - -* Edwin Pratomo -* Gavin Stark -* Adam Q. Salter -* Adam Majer -* Emanuel Indermühle -* Ittay Dror -* Bheeshmar Redheendran (for spending an afternoon with me debugging - windows issues) - --- Jim Weirich - -=== 0.8.0/0.8.1 - -Rake version 0.8.0 is a new release of rake that includes serveral new -features. - -==== Changes - -===== New Features in Version 0.8.0 - -* Tasks can now receive command line parameters. See the examples - below for more details. - -* Comments are limited to 80 columns on output, but full comments can - be seen by using the -D parameter. (feature suggested by Jamis - Buck). - -* Explicit exit(n) calls will now set the exit status to n. (patch - provided by Stephen Touset). - -* Rake is now compatible with Ruby 1.9. - -Version 0.8.1 is a minor update that includes additional Ruby 1.9 -compatibility fixes. - -==== Task Argument Examples - -Prior to version 0.8.0, rake was only able to handle command line -arguments of the form NAME=VALUE that were passed into Rake via the -ENV hash. Many folks had asked for some kind of simple command line -arguments, perhaps using "--" to separate regular task names from -argument values on the command line. The problem is that there was no -easy way to associate positional arguments on the command line with -different tasks. Suppose both tasks :a and :b expect a command line -argument: does the first value go with :a? What if :b is run first? -Should it then get the first command line argument. - -Rake 0.8.0 solves this problem by explicitly passing values directly -to the tasks that need them. For example, if I had a release task -that required a version number, I could say: - - rake release[0.8.0] - -And the string "0.8.0" will be passed to the :release task. Multiple -arguments can be passed by separating them with a comma, for example: - - rake name[john,doe] - -Just a few words of caution. The rake task name and its arguments -need to be a single command line argument to rake. This generally -means no spaces. If spaces are needed, then the entire rake + -argument string should be quoted. Something like this: - - rake "name[billy bob, smith]" - -(Quoting rules vary between operating systems and shells, so make sure -you consult the proper docs for your OS/shell). - -===== Tasks that Expect Parameters - -Parameters are only given to tasks that are setup to expect them. In -order to handle named parameters, the task declaration syntax for -tasks has been extended slightly. - -For example, a task that needs a first name and last name might be -declared as: - - task :name, :first_name, :last_name - -The first argument is still the name of the task (:name in this case). -The next to argumements are the names of the parameters expected by -:name (:first_name and :last_name in the example). - -To access the values of the parameters, the block defining the task -behaviour can now accept a second parameter: - - task :name, :first_name, :last_name do |t, args| - puts "First name is #{args.first_name}" - puts "Last name is #{args.last_name}" - end - -The first argument of the block "t" is always bound to the current -task object. The second argument "args" is an open-struct like object -that allows access to the task arguments. Extra command line -arguments to a task are ignored. Missing command line arguments are -given the nil value. - -==== Thanks - -As usual, it was input from users that drove a alot of these changes. The -following people either contributed patches, made suggestions or made -otherwise helpful comments. Thanks to ... - -* Jamis Buck (for comment formatting suggestions) -* Stephen Touset (for exit status patch). - --- Jim Weirich - - -=== 0.7.3 - -Rake version 0.7.3 is a minor release that includes some refactoring to better -support custom Rake applications. - -==== Changes - -===== New Features in Version 0.7.3 - -* Added the +init+ and +top_level+ methods to make the creation of custom Rake applications a bit easier. E.g. - - gem 'rake', ">= 0.7.3" - require 'rake' - - Rake.application.init('myrake') - - task :default do - something_interesting - end - - Rake.application.top_level - -==== Thanks - -As usual, it was input from users that drove a alot of these changes. The -following people either contributed patches, made suggestions or made -otherwise helpful comments. Thanks to ... - --- Jim Weirich - - -=== 0.7.2 - - -Version 0.7.2 supplies a bug fix and a few minor enhancements. In -particular, the new version fixes an incompatibility with the soon to -be released Ruby 1.8.6. We strongly recommend upgrading to Rake 0.7.2 -in order to be compatible with the new version of Ruby. - -==== Changes - -===== Bug Fixes in 0.7.2 - -There are quite a number of bug fixes in the new 0.7.2 version of -Rake: - -* Removed dependency on internal fu_xxx functions from FileUtils. - -* Error messages are now send to stderr rather than stdout (from - Payton Quackenbush). - -* Better error handling on invalid command line arguments (from Payton - Quackenbush). - -* Fixed some bugs where the application object was going to the global - appliation instead of using its own data. - -* Fixed the method name leak from FileUtils (bug found by Glenn - Vanderburg). - -* Added test for noop, bad_option and verbose flags to sh command. - -* Added a description to the gem task in GemPackageTask. - -* Fixed a bug when rules have multiple prerequisites (patch by Joel - VanderWerf) - -* Added the handful of RakeFileUtils to the private method as well. - -===== New Features in 0.7.2 - -The following new features are available in Rake version 0.7.2: - -* Added square and curly bracket patterns to FileList#include (Tilman - Sauerbeck). - -* FileLists can now pass a block to FileList#exclude to exclude files - based on calculated values. - -* Added plain filename support to rule dependents (suggested by Nobu - Nakada). - -* Added pathmap support to rule dependents. In other words, if a - pathmap format (beginning with a '%') is given as a Rake rule - dependent, then the name of the depend will be the name of the - target with the pathmap format applied. - -* Added a 'tasks' method to a namespace to get a list of tasks - associated with the namespace. - -* Added tar_command and zip_command options to the Package task. - -* The clean task will no longer delete 'core' if it is a directory. - -===== Internal Rake Improvements - -The following changes will are mainly internal improvements and -refactorings and have little effect on the end user. But they may be -of interest to the general public. - -* Added rcov task and updated unit testing for better code coverage. - -* Added a 'shame' task to the Rakefile. - -* Added rake_extension to handle detection of extension collisions. - -* Added a protected 'require "rubygems"' to test/test_application to - unbreak cruisecontrol.rb. - -* Removed rake\_dup. Now we just simply rescue a bad dup. - -* Refactored the FileList reject logic to remove duplication. - -* Removed if \_\_FILE\_\_ at the end of the rake.rb file. - -==== Thanks - -As usual, it was input from users that drove a alot of these changes. -The following people either contributed patches, made suggestions or -made otherwise helpful comments. Thanks to ... - -* Payton Quackenbush -- For several error handling improvements. - -* Glenn Vanderburg -- For finding and fixing the method name leak from - FileUtils. - -* Joel VanderWerf -- for finding and fixing a bug in the handling of - multiple prerequisites. - -* Tilman Sauerbeck -- For some enhancing FileList to support more - advanced file globbing. - -* Nobu Nakada -- For suggesting plain file name support to rule dependents. - --- Jim Weirich - -=== 0.7.1 - -Version 0.7.1 supplies a bug fix and a few minor enhancements. - -==== Changes - -===== Bug Fixes in 0.7.1 - -* Changes in the exception reported for the FileUtils.ln caused - safe_ln to fail with a NotImplementedError. Rake 0.7.1 will now - catch that error or any StandardError and properly fall back to - using +cp+. - -===== New Features in 0.7.1 - -* You can filter the results of the --task option by supplying an - optional regular expression. This allows the user to easily find a - particular task name in a long list of possible names. - -* Transforming procs in a rule may now return a list of prerequisites. - This allows more flexible rule formation. - -* FileList and String now support a +pathmap+ melthod that makes the - transforming paths a bit easier. See the API docs for +pathmap+ for - details. - -* The -f option without a value will disable the search for a - Rakefile. This allows the Rakefile to be defined entirely in a - library (and loaded with the -r option). The current working - directory is not changed when this is done. - -==== Thanks - -As usual, it was input from users that drove a alot of these changes. -The following people either contributed patches, made suggestions or -made otherwise helpful comments. Thanks to ... - -* James Britt and Assaph Mehr for reporting and helping to debug the - safe_ln issue. - --- Jim Weirich - - -=== 0.7.0 - -These changes for Rake have been brewing for a long time. Here they -are, I hope you enjoy them. - -==== Changes - -===== New Features - -* Name space support for task names (see below). -* Prerequisites can be executed in parallel (see below). -* Added safe_ln support for openAFS (via Ludvig Omholt). -* RDoc defaults to internal (in-process) invocation. The old behavior - is still available by setting the +external+ flag to true. -* Rakefiles are now loaded with the expanded path to prevent - accidental pollution from the Ruby load path. -* Task objects my now be used in prerequisite lists directly. -* Task objects (in addition to task names) may now be included in the - prerequisite list of a task. -* Internals cleanup and refactoring. - -===== Bug Fixes - -* Compatibility fixes for Ruby 1.8.4 FileUtils changes. - -===== Namespaces - -Tasks can now be nested inside their own namespaces. Tasks within one -namespace will not accidentally interfer with tasks named in a different -namespace. - -For example: - - namespace "main" do - task :build do - # Build the main program - end - end - - namespace "samples" do - task :build do - # Build the sample programs - end - end - - task :build_all => ["main:build", "samples:build"] - -Even though both tasks are named :build, they are separate tasks in -their own namespaces. The :build_all task (defined in the toplevel -namespace) references both build tasks in its prerequisites. - -You may invoke each of the individual build tasks with the following -commands: - - rake main:build - rake samples:build - -Or invoke both via the :build_all command: - - rake build_all - -Namespaces may be nested arbitrarily. Since the name of file tasks -correspond to the name of a file in the external file system, -FileTasks are not affected by the namespaces. - -See the Rakefile format documentation (in the Rake API documents) for -more information. - -===== Parallel Tasks - -Sometimes you have several tasks that can be executed in parallel. By -specifying these tasks as prerequisites to a +multitask+ task. - -In the following example the tasks copy\_src, copy\_doc and copy\_bin -will all execute in parallel in their own thread. - - multitask :copy_files => [:copy_src, :copy_doc, :copy_bin] do - puts "All Copies Complete" - end - -==== Thanks - -As usual, it was input from users that drove a alot of these changes. -The following people either contributed patches, made suggestions or -made otherwise helpful comments. Thanks to ... - -* Doug Young (inspiration for the parallel task) -* David Heinemeier Hansson (for --trace message enhancement and for - pushing for namespace support). -* Ludvig Omholt (for the openAFS fix) - --- Jim Weirich - -=== 0.6.1 - -* Rebuilt 0.6.0 gem without signing. - -=== 0.6.0 - -Its time for some long requested enhancements and lots of bug fixes -... And a whole new web page. - -==== New Web Page - -The primary documentation for rake has moved from the RubyForge based -wiki to its own Hieraki based web site. Constant spam on the wiki -made it a difficult to keep clean. The new site will be easier to -update and organize. - -Check out the new documentation at: http://docs.rubyrake.org - -We will be adding new documentation to the site as time goes on. - -In addition to the new docs page, make sure you check out Martin -Fowlers article on rake at http://martinfowler.com/articles/rake.html - -==== Changes - -===== New Features - -* Multiple prerequisites on Rake rules now allowed. However, keep the - following in mind: - - 1. All the prerequisites of a rule must be available before a rule - is triggered, where "enabled" means (a) an existing file, (b) a - defined rule, or (c) another rule which also must be - trigger-able. - 2. Rules are checked in order of definition, so it is important to - order your rules properly. If a file can be created by two - different rules, put the more specific rule first (otherwise the - more general rule will trigger first and the specific one will - never be triggered). - 3. The source method now returns the name of the first - prerequisite listed in the rule. sources returns the - names of all the rule prerequisites, ordered as they are defined - in the rule. If the task has other prerequisites not defined in - the rule (but defined in an explicit task definition), then they - will _not_ be included in the sources list. - -* FileLists may now use the egrep command. This popular enhancement - is now a core part of the FileList object. If you want to get a - list of all your to-dos, fixmes and TBD comments, add the following - to your Rakefile. - - desc "Look for TODO and FIXME tags in the code" - task :todo do - FileList['**/*.rb'].egrep /#.*(FIXME|TODO|TBD)/ - end - -* The investigation method was added to task object to dump - out some important values. This makes it a bit easier to debug Rake - tasks. - - For example, if you are having problems with a particular task, just - print it out: - - task :huh do - puts Rake::Task['huh'].investigation - end - -* The Rake::TestTask class now supports a "ruby\_opts" option to pass - arbitrary ruby options to a test subprocess. - -===== Some Incompatibilities - -* When using the ruby command to start a Ruby subprocess, the - Ruby interpreter that is currently running rake is used by default. - This makes it easier to use rake in an environment with multiple - ruby installation. (Previously, the first ruby command found in the - PATH was used). - - If you wish to chose a different Ruby interpreter, you can - explicitly choose the interpreter via the sh command. - -* The major rake classes (Task, FileTask, FileCreationTask, RakeApp) - have been moved out of the toplevel scope and are now accessible as - Rake::Task, Rake::FileTask, Rake::FileCreationTask and - Rake::Application. If your Rakefile - directly references any one of these tasks, you may: - - 1. Update your Rakefile to use the new classnames - 2. Use the --classic-namespace option on the rake command to get the - old behavior, - 3. Add require 'rake/classic_namespace' to the - Rakefile to get the old behavior. - - rake will print a rather annoying warning whenever a - deprecated class name is referenced without enabling classic - namespace. - -===== Bug Fixes - -* Several unit tests and functional tests were fixed to run better - under windows. - -* Directory tasks are now a specialized version of a File task. A - directory task will only be triggered if it doesn't exist. It will - not be triggered if it is out of date w.r.t. any of its - prerequisites. - -* Fixed a bug in the Rake::GemPackageTask class so that the gem now - properly contains the platform name. - -* Fixed a bug where a prerequisite on a file task would cause - an exception if the prerequisite did not exist. - -==== Thanks - -As usual, it was input from users that drove a alot of these changes. -The following people either contributed patches, made suggestions or -made otherwise helpful comments. Thanks to ... - -* Greg Fast (better ruby_opt test options) -* Kelly Felkins (requested by better namespace support) -* Martin Fowler (suggested Task.investigation) -* Stuart Jansen (send initial patch for multiple prerequisites). -* Masao Mutch (better support for non-ruby Gem platforms) -* Philipp Neubeck (patch for file task exception fix) - --- Jim Weirich - -=== 0.5.4 - -Time for some minor bug fixes and small enhancements - -==== Changes - -Here are the changes for version 0.5.4 ... - -* Added double quotes to the test runner. This allows the location of - the tests (and runner) to be in a directory path that contains - spaces (e.g. "C:/Program Files/ruby/bin"). -* Added .svn to default ignore list. Now subversion project metadata - is automatically ignored by Rake's FileList. -* Updated FileList#include to support nested arrays and filelists. - FileLists are flat lists of file names. Using a FileList in an - include will flatten out the nested file names. - -== Thanks - -As usual, it was input from users that drove a alot of these changes. -Thanks to ... - -* Tilman Sauerbeck for the nested FileList suggestion. -* Josh Knowles for pointing out the spaces in directory name problem. - --- Jim Weirich - -=== 0.5.3 - -Although it has only been two weeks since the last release, we have -enough updates to the Rake program to make it time for another -release. - -==== Changes - -Here are the changes for version 0.5.3 ... - -* FileLists have been extensively changed so that they mimic the - behavior of real arrays even more closely. In particular, - operations on FileLists that return a new collection (e.g. collect, - reject) will now return a FileList rather than an array. In - addition, several places where FileLists were not properly expanded - before use have been fixed. -* A method (+ext+) to simplify the handling of file extensions was - added to String and to Array. -* The 'testrb' script in test/unit tends to silently swallow syntax - errors in test suites. Because of that, the default test loader is - now a rake-provided script. You can still use 'testrb' by setting - the loader flag in the test task to :testrb. (See the API documents - for TestTask for all the loader flag values). -* FileUtil methods (e.g. cp, mv, install) are now declared to be - private. This will cut down on the interference with user defined - methods of the same name. -* Fixed the verbose flag in the TestTask so that the test code is - controlled by the flag. Also shortened up some failure messages. - (Thanks to Tobias Luetke for the suggestion). -* Rules will now properly detect a task that can generate a source - file. Previously rules would only consider source files that were - already present. -* Added an +import+ command that allows Rake to dynamically import - dependendencies into a running Rake session. The +import+ command - can run tasks to update the dependency file before loading them. - Dependency files can be in rake or make format, allowing rake to - work with tools designed to generate dependencies for make. - -==== Thanks - -As usual, it was input from users that drove a alot of these changes. -Thanks to ... - -* Brian Gernhardt for the rules fix (especially for the patience to - explain the problem to me until I got what he was talking about). -* Stefan Lang for pointing out problems in the dark corners of the - FileList implementation. -* Alexey Verkhovsky pointing out the silently swallows syntax errors - in tests. -* Tobias Luetke for beautifying the test task output. -* Sam Roberts for some of the ideas behind dependency loading. - --- Jim Weirich - - -=== 0.5.0 - -It has been a long time in coming, but we finally have a new version -of Rake available. - -==== Changes - -* Fixed documentation that was lacking the Rake module name (Tilman - Sauerbeck). -* Added tar.gz and tar.bz2 support to package task (Tilman Sauerbeck). -* Recursive rules are now supported (Tilman Sauerbeck). -* Added warning option for the Test Task (requested by Eric Hodel). -* The jamis rdoc template is only used if it exists. -* Added fix for Ruby 1.8.2 test/unit and rails problem. -* Added contributed rake man file (Jani Monoses). -* Added Brian Candler's fix for problems in --trace and --dry-run - mode. - -==== Thanks - -Lots of people provided input to this release. Thanks to Tilman -Sauerbeck for numerous patches, documentation fixes and suggestions. -And for also pushing me to get this release out. Also, thanks to -Brian Candler for the finding and fixing --trace/dry-run fix. That -was an obscure bug. Also to Eric Hodel for some good suggestions. - --- Jim Weirich - -=== 0.4.15 - -==== Changes - -Version 0.4.15 is a bug fix update for the Ruby 1.8.2 compatibility -changes. This release includes: - -* Fixed a bug that prevented the TESTOPTS flag from working with the - revised for 1.8.2 test task. -* Updated the docs on --trace to indicate that it also enables a full - backtrace on errors. -* Several fixes for new warnings generated. - -==== Mini-Roadmap - -I will continue to issue Rake updates in the 0.4.xx series as new -Ruby-1.8.2 issues become manifest. Once the codebase stabilizes, I -will release a 0.5.0 version incorporating all the changes. If you -are not using Ruby-1.8.2 and wish to avoid version churn, I recommend -staying with a release prior to Rake-0.4.14. - -=== 0.4.14 - -Version 0.4.14 is a compatibility fix to allow Rake's test task to -work under Ruby 1.8.2. A change in the Test::Unit autorun feature -prevented Rake from running any tests. This release fixes the -problem. - -Rake 0.4.14 is the recommended release for anyone using Ruby 1.8.2. - -=== 0.4.13 - -* Fixed the dry-run flag so it is operating again. -* Multiple arguments to sh and ruby commands will not be interpreted - by the shell (patch provided by Jonathan Paisley). - -=== 0.4.12 - -* Added --silent (-s) to suppress the (in directory) rake message. - -=== 0.4.11 - -* Changed the "don't know how to rake" message (finally) -* Changes references to a literal "Rakefile" to reference the global - variable $rakefile (which contains the actual name of the rakefile). - -=== 0.4.10 - -* Added block support to the "sh" command, allowing users to take - special actions on the result of the system call. E.g. - - sh "shell_command" do |ok, res| - puts "Program returned #{res.exitstatus}" if ! ok - end - -=== 0.4.9 - -* Switched to Jamis Buck's RDoc template. -* Removed autorequire from Rake's gem spec. This prevents the Rake - libraries from loading while using rails. - -=== 0.4.8 - -* Added support for .rb versions of Rakefile. -* Removed \\\n's from test task. -* Fixed Ruby 1.9 compatibility issue with FileList. - -=== 0.4.7 - -* Fixed problem in FileList that caused Ruby 1.9 to go into infinite - recursion. Since to_a was removed from Object, it does not need to - added back into the list of methods to rewrite in FileList. (Thanks - to Kent Sibilev for pointing this out). - -=== 0.4.6 -* Removed test version of ln in FileUtils that prevented safe_ln from - using ln. - -=== 0.4.5 -* Upgraded comments in TestTask. -* FileList to_s and inspect now automatically resolve pending changes. -* FileList#exclude properly returns the FileList. - -=== 0.4.4 -* Fixed initialization problem with @comment. -* Now using multi -r technique in TestTask. Switch Rakefile back to - using the built-in test task macros because the rake runtime is no - longer needed. -* Added 'TEST=filename' and 'TESTOPTS=options' to the Test Task - macros. -* Allow a +test_files+ attribute in test tasks. This allows more - flexibility in specifying test files. - -=== 0.4.3 -* Fixed Comment leakage. - -=== 0.4.2 -* Added safe_ln that falls back to a copy if a file link is not supported. -* Package builder now uses safe\_ln. - -=== 0.4.1 -* Task comments are now additive, combined with "/". -* Works with (soon to be released) rubygems 0.6.2 (or 0.7.0) - -=== 0.4.0 -* FileList now uses deferred loading. The file system is not searched - until the first call that needs the file names. -* VAR=VALUE options are now accepted on the command line and are - treated like environment variables. The values may be tested in a - Rakefile by referencing ENV['VAR']. -* File.mtime is now used (instead of File.new().mtime). - -=== 0.3.2.x - -* Removed some hidden dependencies on rubygems. Tests now will test - gems only if they are installed. -* Removed Sys from some example files. I believe that is that last - reference to Sys outside of the contrib area. -* Updated all copyright notices to include 2004. - -=== 0.3.2 - -* GEM Installation now works with the application stub. - -=== 0.3.1 - -* FileLists now automatically ignore CVS, .bak, ! -* GEM Installation now works. - -=== 0.3.0 - -Promoted 0.2.10. - -=== 0.2.10 -General - -* Added title to Rake's rdocs -* Contrib packages are no longer included in the documentation. - -RDoc Issues - -* Removed default for the '--main' option -* Fixed rendering of the rdoc options -* Fixed clean/clobber confusion with rerdoc -* 'title' attribute added - -Package Task Library Issues - -* Version (or explicit :noversion) is required. -* +package_file+ attribute is now writable - -FileList Issues - -* Dropped bang version of exclude. Now using ant-like include/exclude semantics. -* Enabled the "yield self" idiom in FileList#initialize. - -=== 0.2.9 - -This version contains numerous changes as the RubyConf.new(2003) -presentation was being prepared. The changes include: - -* The monolithic rubyapp task library is in the process of being - dropped in favor of lighter weight task libraries. - -=== 0.2.7 - -* Added "desc" for task descriptions. -* -T will now display tasks with descriptions. -* -P will display tasks and prerequisites. -* Dropped the Sys module in favor of the 1.8.x FileUtils module. Sys - is still supported in the contrib area. - -=== 0.2.6 - -* Moved to RubyForge - -=== 0.2.5 - -* Switched to standard ruby app builder. -* Added no_match option to file matcher. - -=== 0.2.4 - -* Fixed indir, which neglected to actually change directories. - -=== 0.2.3 - -* Added rake module for a help target -* Added 'for\_files' to Sys -* Added a $rakefile constant -* Added test for selecting proper rule with multiple targets. diff --git a/bundle/ruby/3.2.0/gems/rake-13.1.0/MIT-LICENSE b/bundle/ruby/3.2.0/gems/rake-13.1.0/MIT-LICENSE deleted file mode 100644 index 4292f3b3..00000000 --- a/bundle/ruby/3.2.0/gems/rake-13.1.0/MIT-LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -Copyright (c) Jim Weirich - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - diff --git a/bundle/ruby/3.2.0/gems/rake-13.1.0/README.rdoc b/bundle/ruby/3.2.0/gems/rake-13.1.0/README.rdoc deleted file mode 100644 index 3fc72dbd..00000000 --- a/bundle/ruby/3.2.0/gems/rake-13.1.0/README.rdoc +++ /dev/null @@ -1,155 +0,0 @@ -= RAKE -- Ruby Make - -home :: https://github.com/ruby/rake -bugs :: https://github.com/ruby/rake/issues -docs :: https://ruby.github.io/rake - -== Description - -Rake is a Make-like program implemented in Ruby. Tasks and dependencies are -specified in standard Ruby syntax. - -Rake has the following features: - -* Rakefiles (rake's version of Makefiles) are completely defined in - standard Ruby syntax. No XML files to edit. No quirky Makefile - syntax to worry about (is that a tab or a space?) - -* Users can specify tasks with prerequisites. - -* Rake supports rule patterns to synthesize implicit tasks. - -* Flexible FileLists that act like arrays but know about manipulating - file names and paths. - -* A library of prepackaged tasks to make building rakefiles easier. For example, - tasks for building tarballs. (Formerly - tasks for building RDoc, Gems, and publishing to FTP were included in rake but they're now - available in RDoc, RubyGems, and rake-contrib respectively.) - -* Supports parallel execution of tasks. - -== Installation - -=== Gem Installation - -Download and install rake with the following. - - gem install rake - -== Usage - -=== Simple Example - -First, you must write a "Rakefile" file which contains the build rules. Here's -a simple example: - - task default: %w[test] - - task :test do - ruby "test/unittest.rb" - end - -This Rakefile has two tasks: - -* A task named "test", which -- upon invocation -- will run a unit test file - in Ruby. -* A task named "default". This task does nothing by itself, but it has exactly - one dependency, namely the "test" task. Invoking the "default" task will - cause Rake to invoke the "test" task as well. - -Running the "rake" command without any options will cause it to run the -"default" task in the Rakefile: - - % ls - Rakefile test/ - % rake - (in /home/some_user/Projects/rake) - ruby test/unittest.rb - ....unit test output here... - -Type "rake --help" for all available options. - -== Resources - -=== Rake Information - -* {Rake command-line}[link:doc/command_line_usage.rdoc] -* {Writing Rakefiles}[link:doc/rakefile.rdoc] -* The original {Rake announcement}[link:doc/rational.rdoc] -* Rake {glossary}[link:doc/glossary.rdoc] - -=== Presentations and Articles about Rake - -* Avdi Grimm's rake series: - 1. {Rake Basics}[https://avdi.codes/rake-part-1-basics/] - 2. {Rake File Lists}[https://avdi.codes/rake-part-2-file-lists-2/] - 3. {Rake Rules}[https://avdi.codes/rake-part-3-rules/] - 4. {Rake Pathmap}[https://avdi.codes/rake-part-4-pathmap/] - 5. {File Operations}[https://avdi.codes/rake-part-5-file-operations/] - 6. {Clean and Clobber}[https://avdi.codes/rake-part-6-clean-and-clobber/] - 7. {MultiTask}[https://avdi.codes/rake-part-7-multitask/] -* {Jim Weirich's 2003 RubyConf presentation}[https://web.archive.org/web/20140221123354/http://onestepback.org/articles/buildingwithrake/] -* Martin Fowler's article on Rake: https://martinfowler.com/articles/rake.html - -== Other Make Re-envisionings ... - -Rake is a late entry in the make replacement field. Here are links to -other projects with similar (and not so similar) goals. - -* https://directory.fsf.org/wiki/Bras -- Bras, one of earliest - implementations of "make in a scripting language". -* http://www.a-a-p.org -- Make in Python -* https://ant.apache.org -- The Ant project -* https://search.cpan.org/search?query=PerlBuildSystem -- The Perl Build System -* https://www.rubydoc.info/gems/rant/0.5.7/frames -- Rant, another Ruby make tool. - -== Credits - -[Jim Weirich] Who originally created Rake. - -[Ryan Dlugosz] For the initial conversation that sparked Rake. - -[Nobuyoshi Nakada ] For the initial patch for rule support. - -[Tilman Sauerbeck ] For the recursive rule patch. - -[Eric Hodel] For aid in maintaining rake. - -[Hiroshi SHIBATA] Maintainer of Rake 10 and later - -== License - -Rake is available under an MIT-style license. - -:include: MIT-LICENSE - ---- - -= Other stuff - -Author:: Jim Weirich -Requires:: Ruby 2.0.0 or later -License:: Copyright Jim Weirich. - Released under an MIT-style license. See the MIT-LICENSE - file included in the distribution. - -== Warranty - -This software is provided "as is" and without any express or implied -warranties, including, without limitation, the implied warranties of -merchantability and fitness for a particular purpose. - -== Historical - -Rake was originally created by Jim Weirich, who unfortunately passed away in -February 2014. This repository was originally hosted at -{github.com/jimweirich/rake}[https://github.com/jimweirich/rake/], however -with his passing, has been moved to {ruby/rake}[https://github.com/ruby/rake]. - -You can view Jim's last commit here: -https://github.com/jimweirich/rake/tree/336559f28f55bce418e2ebcc0a57548dcbac4025 - -You can {read more about Jim}[https://en.wikipedia.org/wiki/Jim_Weirich] at Wikipedia. - -Thank you for this great tool, Jim. We'll remember you. diff --git a/bundle/ruby/3.2.0/gems/rake-13.1.0/doc/command_line_usage.rdoc b/bundle/ruby/3.2.0/gems/rake-13.1.0/doc/command_line_usage.rdoc deleted file mode 100644 index 105d6c8e..00000000 --- a/bundle/ruby/3.2.0/gems/rake-13.1.0/doc/command_line_usage.rdoc +++ /dev/null @@ -1,158 +0,0 @@ -= Rake Command Line Usage - -Rake is invoked from the command line using: - - % rake [options ...] [VAR=VALUE ...] [targets ...] - -Options are: - -[name=value] - Set the environment variable name to value - during the execution of the rake command. You can access - the value by using ENV['name']. - -[--all (-A)] - Used in combination with the -T and -D options, will force - those options to show all the tasks, even the ones without comments. - -[--backtrace{=_output_} (-n)] - Enable a full backtrace (i.e. like --trace, but without the task - tracing details). The _output_ parameter is optional, but if - specified it controls where the backtrace output is sent. If - _output_ is stdout, then backtrace output is directed to - standard output. If _output_ is stderr, or if it is - missing, then the backtrace output is sent to standard error. - -[--comments] - Used in combination with the -W options to force the output to - contain commented options only. This is the reverse of - --all. - -[--describe _pattern_ (-D)] - Describe the tasks (matching optional PATTERN), then exit. - -[--dry-run (-n)] - Do a dry run. Print the tasks invoked and executed, but do not - actually execute any of the actions. - -[--execute _code_ (-e)] - Execute some Ruby code and exit. - -[--execute-print _code_ (-p)] - Execute some Ruby code, print the result, and exit. - -[--execute-continue _code_ (-E)] - Execute some Ruby code, then continue with normal task processing. - -[--help (-H)] - Display some help text and exit. - -[--jobs _number_ (-j)] - - Specifies the maximum number of concurrent threads allowed. Rake - will allocate threads as needed up to this maximum number. - - If omitted, Rake will attempt to estimate the number of CPUs on - the system and add 4 to that number. - - The concurrent threads are used to execute the multitask - prerequisites. Also see the -m option which turns all - tasks into multitasks. - - Sample values: - (no -j) : Allow up to (# of CPUs + 4) number of threads - --jobs : Allow unlimited number of threads - --jobs=1 : Allow only one thread (the main thread) - --jobs=16 : Allow up to 16 concurrent threads - -[--job-stats _level_] - - Display job statistics at the completion of the run. By default, - this will display the requested number of active threads (from the - -j options) and the maximum number of threads in play at any given - time. - - If the optional _level_ is history, then a complete trace - of task history will be displayed on standard output. - -[--libdir _directory_ (-I)] - Add _directory_ to the list of directories searched for require. - -[--multitask (-m)] - Treat all tasks as multitasks. ('make/drake' semantics) - -[--nosearch (-N)] - Do not search for a Rakefile in parent directories. - -[--prereqs (-P)] - Display a list of all tasks and their immediate prerequisites. - -[--quiet (-q)] - Do not echo commands from FileUtils. - -[--rakefile _filename_ (-f)] - Use _filename_ as the name of the rakefile. The default rakefile - names are +rakefile+ and +Rakefile+ (with +rakefile+ taking - precedence). If the rakefile is not found in the current - directory, +rake+ will search parent directories for a match. The - directory where the Rakefile is found will become the current - directory for the actions executed in the Rakefile. - -[--rakelibdir _rakelibdir_ (-R)] - Auto-import any .rake files in RAKELIBDIR. (default is 'rakelib') - -[--require _name_ (-r)] - Require _name_ before executing the Rakefile. - -[--rules] - Trace the rules resolution. - -[--silent (-s)] - Like --quiet, but also suppresses the 'in directory' announcement. - -[--suppress-backtrace _pattern_ ] - Line matching the regular expression _pattern_ will be removed - from the backtrace output. Note that the --backtrace option is the - full backtrace without these lines suppressed. - -[--system (-g)] - Use the system wide (global) rakefiles. The project Rakefile is - ignored. By default, the system wide rakefiles are used only if no - project Rakefile is found. On Unix-like system, the system wide - rake files are located in $HOME/.rake. On a windows system they - are stored in $APPDATA/Rake. - -[--no-system (-G)] - Use the project level Rakefile, ignoring the system-wide (global) - rakefiles. - -[--tasks pattern (-T)] - Display a list of the major tasks and their comments. Comments - are defined using the "desc" command. If a pattern is given, then - only tasks matching the pattern are displayed. - -[--trace{=_output_} (-t)] - Turn on invoke/execute tracing. Also enable full backtrace on - errors. The _output_ parameter is optional, but if specified it - controls where the trace output is sent. If _output_ is - stdout, then trace output is directed to standard output. - If _output_ is stderr, or if it is missing, then trace - output is sent to standard error. - -[--verbose (-v)] - Echo the Sys commands to standard output. - -[--version (-V)] - Display the program version and exit. - -[--where pattern (-W)] - Display tasks that match pattern and the file and line - number where the task is defined. By default this option will - display all tasks, not just the tasks that have descriptions. - -[--no-deprecation-warnings (-X)] - Do not display the deprecation warnings. - -In addition, any command line option of the form -VAR=VALUE will be added to the environment hash -ENV and may be tested in the Rakefile. diff --git a/bundle/ruby/3.2.0/gems/rake-13.1.0/doc/example/Rakefile1 b/bundle/ruby/3.2.0/gems/rake-13.1.0/doc/example/Rakefile1 deleted file mode 100644 index 39f8bcce..00000000 --- a/bundle/ruby/3.2.0/gems/rake-13.1.0/doc/example/Rakefile1 +++ /dev/null @@ -1,38 +0,0 @@ -# Example Rakefile -*- ruby -*- - -task :default => [:main] - -file "a.o" => ["a.c"] do |t| - src = t.name.sub(/\.o$/, '.c') - sh "gcc #{src} -c -o #{t.name}" -end - -file "b.o" => ["b.c"] do |t| - src = t.name.sub(/\.o$/, '.c') - sh "gcc #{src} -c -o #{t.name}" -end - -file "main.o" => ["main.c"] do |t| - src = t.name.sub(/\.o$/, '.c') - sh "gcc #{src} -c -o #{t.name}" -end - -OBJFILES = ["a.o", "b.o", "main.o"] -task :obj => OBJFILES - -file "main" => OBJFILES do |t| - sh "gcc -o #{t.name} main.o a.o b.o" -end - -task :clean do - rm_f FileList['*.o'] - Dir['*~'].each { |fn| rm_f fn } -end - -task :clobber => [:clean] do - rm_f "main" -end - -task :run => ["main"] do - sh "./main" -end diff --git a/bundle/ruby/3.2.0/gems/rake-13.1.0/doc/example/Rakefile2 b/bundle/ruby/3.2.0/gems/rake-13.1.0/doc/example/Rakefile2 deleted file mode 100644 index 35310ece..00000000 --- a/bundle/ruby/3.2.0/gems/rake-13.1.0/doc/example/Rakefile2 +++ /dev/null @@ -1,35 +0,0 @@ -# Example Rakefile -*- ruby -*- -# Using the power of Ruby - -task :default => [:main] - -def ext(fn, newext) - fn.sub(/\.[^.]+$/, newext) -end - -SRCFILES = Dir['*.c'] -OBJFILES = SRCFILES.collect { |fn| ext(fn,".o") } - -OBJFILES.each do |objfile| - srcfile = ext(objfile, ".c") - file objfile => [srcfile] do |t| - sh "gcc #{srcfile} -c -o #{t.name}" - end -end - -file "main" => OBJFILES do |t| - sh "gcc -o #{t.name} main.o a.o b.o" -end - -task :clean do - rm_f FileList['*.o'] - Dir['*~'].each { |fn| rm_f fn } -end - -task :clobber => [:clean] do - rm_f "main" -end - -task :run => ["main"] do - sh "./main" -end diff --git a/bundle/ruby/3.2.0/gems/rake-13.1.0/doc/example/a.c b/bundle/ruby/3.2.0/gems/rake-13.1.0/doc/example/a.c deleted file mode 100644 index 620e6f80..00000000 --- a/bundle/ruby/3.2.0/gems/rake-13.1.0/doc/example/a.c +++ /dev/null @@ -1,6 +0,0 @@ -#include - -void a() -{ - printf ("In function a\n"); -} diff --git a/bundle/ruby/3.2.0/gems/rake-13.1.0/doc/example/b.c b/bundle/ruby/3.2.0/gems/rake-13.1.0/doc/example/b.c deleted file mode 100644 index 9b24aa12..00000000 --- a/bundle/ruby/3.2.0/gems/rake-13.1.0/doc/example/b.c +++ /dev/null @@ -1,6 +0,0 @@ -#include - -void b() -{ - printf ("In function b\n"); -} diff --git a/bundle/ruby/3.2.0/gems/rake-13.1.0/doc/example/main.c b/bundle/ruby/3.2.0/gems/rake-13.1.0/doc/example/main.c deleted file mode 100644 index a04558a2..00000000 --- a/bundle/ruby/3.2.0/gems/rake-13.1.0/doc/example/main.c +++ /dev/null @@ -1,11 +0,0 @@ -#include - -extern void a(); -extern void b(); - -int main () -{ - a(); - b(); - return 0; -} diff --git a/bundle/ruby/3.2.0/gems/rake-13.1.0/doc/glossary.rdoc b/bundle/ruby/3.2.0/gems/rake-13.1.0/doc/glossary.rdoc deleted file mode 100644 index 9d592b02..00000000 --- a/bundle/ruby/3.2.0/gems/rake-13.1.0/doc/glossary.rdoc +++ /dev/null @@ -1,42 +0,0 @@ -= Glossary - -action :: - Code to be executed in order to perform a task. Actions in a Rakefile are - specified in a code block. (Usually delimited by +do+/+end+ pairs.) - -execute :: - When a task is executed, all of its actions are performed in the order they - were defined. Note that, unlike invoke, execute always - executes the actions (without invoking or executing the prerequisites). - -file task (Rake::FileTask) :: - A file task is a task whose purpose is to create a file (which has the same - name as the task). When invoked, a file task will only execute if one or - more of the following conditions are true. - - 1. The associated file does not exist. - 2. A prerequisite has a later time stamp than the existing file. - - Because normal Tasks always have the current time as timestamp, a FileTask - that has a normal Task prerequisite will always execute. - -invoke :: - When a task is invoked, first we check to see if it has been invoked before. - If it has been, then nothing else is done. If this is the first time it has - been invoked, then we invoke each of its prerequisites. Finally, we check - to see if we need to execute the actions of this task by calling - Rake::Task#needed?. If the task is needed, we execute its actions. - - NOTE: Prerequisites are still invoked even if the task is not needed. - -prerequisites :: - Every task has a (possibly empty) set of prerequisites. A prerequisite P to - Task T is itself a task that must be invoked before Task T. - -rule :: - A rule is a recipe for synthesizing a task when no task is explicitly - defined. Rules generally synthesize file tasks. - -task (Rake::Task) :: - The basic unit of work in a Rakefile. A task has a name, a set of - prerequisites, and a list of actions to be performed. diff --git a/bundle/ruby/3.2.0/gems/rake-13.1.0/doc/jamis.rb b/bundle/ruby/3.2.0/gems/rake-13.1.0/doc/jamis.rb deleted file mode 100644 index 531aa757..00000000 --- a/bundle/ruby/3.2.0/gems/rake-13.1.0/doc/jamis.rb +++ /dev/null @@ -1,592 +0,0 @@ -# frozen_string_literal: true -module RDoc -module Page - -FONTS = "\"Bitstream Vera Sans\", Verdana, Arial, Helvetica, sans-serif" - -STYLE = < pre { - padding: 0.5em; - border: 1px dotted black; - background: #FFE; -} - -CSS - -XHTML_PREAMBLE = %{ - -} - -HEADER = XHTML_PREAMBLE + < - - %title% - - - - - - - -ENDHEADER - -FILE_PAGE = < - - - - -
    File
    %short_name%
    - - - - - - - - - -
    Path:%full_path% -IF:cvsurl -  (CVS) -ENDIF:cvsurl -
    Modified:%dtm_modified%
    -
    - -
    -HTML - -################################################################### - -CLASS_PAGE = < - %classmod%
    %full_name% - - - - - - -IF:parent - - - - -ENDIF:parent -
    In: -START:infiles -HREF:full_path_url:full_path: -IF:cvsurl - (CVS) -ENDIF:cvsurl -END:infiles -
    Parent: -IF:par_url - -ENDIF:par_url -%parent% -IF:par_url - -ENDIF:par_url -
    - - - -HTML - -################################################################### - -METHOD_LIST = < -IF:diagram -
    - %diagram% -
    -ENDIF:diagram - -IF:description -
    %description%
    -ENDIF:description - -IF:requires -
    Required Files
    -
      -START:requires -
    • HREF:aref:name:
    • -END:requires -
    -ENDIF:requires - -IF:toc -
    Contents
    -
    -ENDIF:toc - -IF:methods -
    Methods
    -
      -START:methods -
    • HREF:aref:name:
    • -END:methods -
    -ENDIF:methods - -IF:includes -
    Included Modules
    -
      -START:includes -
    • HREF:aref:name:
    • -END:includes -
    -ENDIF:includes - -START:sections -IF:sectitle - -IF:seccomment -
    -%seccomment% -
    -ENDIF:seccomment -ENDIF:sectitle - -IF:classlist -
    Classes and Modules
    - %classlist% -ENDIF:classlist - -IF:constants -
    Constants
    - -START:constants - - - - - -IF:desc - - - - -ENDIF:desc -END:constants -
    %name%=%value%
     %desc%
    -ENDIF:constants - -IF:attributes -
    Attributes
    - -START:attributes - - - - - -END:attributes -
    -IF:rw -[%rw%] -ENDIF:rw - %name%%a_desc%
    -ENDIF:attributes - -IF:method_list -START:method_list -IF:methods -
    %type% %category% methods
    -START:methods -
    -
    -IF:callseq - %callseq% -ENDIF:callseq -IFNOT:callseq - %name%%params% -ENDIF:callseq -IF:codeurl -[ source ] -ENDIF:codeurl -
    -IF:m_desc -
    - %m_desc% -
    -ENDIF:m_desc -IF:aka -
    - This method is also aliased as -START:aka - %name% -END:aka -
    -ENDIF:aka -IF:sourcecode -
    - -
    -
    -%sourcecode%
    -
    -
    -
    -ENDIF:sourcecode -
    -END:methods -ENDIF:methods -END:method_list -ENDIF:method_list -END:sections - -HTML - -FOOTER = < - -ENDFOOTER - -BODY = HEADER + < - -
    - #{METHOD_LIST} -
    - - #{FOOTER} -ENDBODY - -########################## Source code ########################## - -SRC_PAGE = XHTML_PREAMBLE + < -%title% - - - - -
    %code%
    - - -HTML - -########################## Index ################################ - -FR_INDEX_BODY = < - - - - - - - -
    -START:entries -%name%
    -END:entries -
    - -HTML - -CLASS_INDEX = FILE_INDEX -METHOD_INDEX = FILE_INDEX - -INDEX = XHTML_PREAMBLE + < - - %title% - - - - - - - - - -IF:inline_source - -ENDIF:inline_source -IFNOT:inline_source - - - - -ENDIF:inline_source - - <body bgcolor="white"> - Click <a href="html/index.html">here</a> for a non-frames - version of this page. - </body> - - - - -HTML - -end -end - - diff --git a/bundle/ruby/3.2.0/gems/rake-13.1.0/doc/proto_rake.rdoc b/bundle/ruby/3.2.0/gems/rake-13.1.0/doc/proto_rake.rdoc deleted file mode 100644 index a9e33d11..00000000 --- a/bundle/ruby/3.2.0/gems/rake-13.1.0/doc/proto_rake.rdoc +++ /dev/null @@ -1,127 +0,0 @@ -= Original Prototype Rake - -This is the original 100 line prototype rake program. - ---- - #!/usr/bin/env ruby - - require 'ftools' - - class Task - TASKS = Hash.new - - attr_reader :prerequisites - - def initialize(task_name) - @name = task_name - @prerequisites = [] - @actions = [] - end - - def enhance(deps=nil, &block) - @prerequisites |= deps if deps - @actions << block if block_given? - self - end - - def name - @name.to_s - end - - def invoke - @prerequisites.each { |n| Task[n].invoke } - execute if needed? - end - - def execute - return if @triggered - @triggered = true - @actions.collect { |act| result = act.call(self) }.last - end - - def needed? - true - end - - def timestamp - Time.now - end - - class << self - def [](task_name) - TASKS[intern(task_name)] or fail "Don't know how to rake #{task_name}" - end - - def define_task(args, &block) - case args - when Hash - fail "Too Many Target Names: #{args.keys.join(' ')}" if args.size > 1 - fail "No Task Name Given" if args.size < 1 - task_name = args.keys[0] - deps = args[task_name] - else - task_name = args - deps = [] - end - deps = deps.collect {|d| intern(d) } - get(task_name).enhance(deps, &block) - end - - def get(task_name) - name = intern(task_name) - TASKS[name] ||= self.new(name) - end - - def intern(task_name) - (Symbol === task_name) ? task_name : task_name.intern - end - end - end - - class FileTask < Task - def needed? - return true unless File.exist?(name) - latest_prereq = @prerequisites.collect{|n| Task[n].timestamp}.max - return false if latest_prereq.nil? - timestamp < latest_prereq - end - - def timestamp - File.new(name.to_s).mtime - end - end - - def task(args, &block) - Task.define_task(args, &block) - end - - def file(args, &block) - FileTask.define_task(args, &block) - end - - def sys(cmd) - puts cmd - system(cmd) or fail "Command Failed: [#{cmd}]" - end - - def rake - begin - here = Dir.pwd - while ! File.exist?("Rakefile") - Dir.chdir("..") - fail "No Rakefile found" if Dir.pwd == here - here = Dir.pwd - end - puts "(in #{Dir.pwd})" - load "./Rakefile" - ARGV.push("default") if ARGV.size == 0 - ARGV.each { |task_name| Task[task_name].invoke } - rescue Exception => ex - puts "rake aborted ... #{ex.message}" - puts ex.backtrace.find {|str| str =~ /Rakefile/ } || "" - end - end - - if __FILE__ == $0 then - rake - end diff --git a/bundle/ruby/3.2.0/gems/rake-13.1.0/doc/rake.1 b/bundle/ruby/3.2.0/gems/rake-13.1.0/doc/rake.1 deleted file mode 100644 index c6bfa25c..00000000 --- a/bundle/ruby/3.2.0/gems/rake-13.1.0/doc/rake.1 +++ /dev/null @@ -1,156 +0,0 @@ -.Dd June 12, 2016 -.Dt RAKE 1 -.Os rake 11.2.2 -.Sh NAME -.Nm rake -.Nd make-like build utility for Ruby -.Sh SYNOPSIS -.Nm -.Op Fl f Ar rakefile -.Op Ar options -.Ar targets ... -.Sh DESCRIPTION -.Nm -is a -.Xr make 1 Ns -like -build utility for Ruby. -Tasks and dependencies are specified in standard Ruby syntax. -.Sh OPTIONS -.Bl -tag -width Ds -.It Fl m , Fl -multitask -Treat all tasks as multitasks. -.It Fl B , Fl -build-all -Build all prerequisites, including those which are up\-to\-date. -.It Fl j , Fl -jobs Ar num_jobs -Specifies the maximum number of tasks to execute in parallel (default is number of CPU cores + 4). -.El -.Ss Modules -.Bl -tag -width Ds -.It Fl I , Fl -libdir Ar libdir -Include -.Ar libdir -in the search path for required modules. -.It Fl r , Fl -require Ar module -Require -.Ar module -before executing -.Pa rakefile . -.El -.Ss Rakefile location -.Bl -tag -width Ds -.It Fl f , Fl -rakefile Ar filename -Use -.Ar filename -as the rakefile to search for. -.It Fl N , Fl -no-search , Fl -nosearch -Do not search parent directories for the Rakefile. -.It Fl G , Fl -no-system , Fl -nosystem -Use standard project Rakefile search paths, ignore system wide rakefiles. -.It Fl R , Fl -rakelib Ar rakelibdir , Fl -rakelibdir Ar rakelibdir -Auto-import any .rake files in -.Ar rakelibdir -(default is -.Sq rakelib ) -.It Fl g , Fl -system -Use system-wide (global) rakefiles (usually -.Pa ~/.rake/*.rake ) . -.El -.Ss Debugging -.Bl -tag -width Ds -.It Fl -backtrace Ns = Ns Ar out -Enable full backtrace. -.Ar out -can be -.Dv stderr -(default) or -.Dv stdout . -.It Fl t , Fl -trace Ns = Ns Ar out -Turn on invoke/execute tracing, enable full backtrace. -.Ar out -can be -.Dv stderr -(default) or -.Dv stdout . -.It Fl -suppress-backtrace Ar pattern -Suppress backtrace lines matching regexp -.Ar pattern . -Ignored if -.Fl -trace -is on. -.It Fl -rules -Trace the rules resolution. -.It Fl n , Fl -dry-run -Do a dry run without executing actions. -.It Fl T , Fl -tasks Op Ar pattern -Display the tasks (matching optional -.Ar pattern ) -with descriptions, then exit. -.It Fl D , Fl -describe Op Ar pattern -Describe the tasks (matching optional -.Ar pattern ) , -then exit. -.It Fl W , Fl -where Op Ar pattern -Describe the tasks (matching optional -.Ar pattern ) , -then exit. -.It Fl P , Fl -prereqs -Display the tasks and dependencies, then exit. -.It Fl e , Fl -execute Ar code -Execute some Ruby code and exit. -.It Fl p , Fl -execute-print Ar code -Execute some Ruby code, print the result, then exit. -.It Fl E , Fl -execute-continue Ar code -Execute some Ruby code, then continue with normal task processing. -.El -.Ss Information -.Bl -tag -width Ds -.It Fl v , Fl -verbose -Log message to standard output. -.It Fl q , Fl -quiet -Do not log messages to standard output. -.It Fl s , Fl -silent -Like -.Fl -quiet , -but also suppresses the -.Sq in directory -announcement. -.It Fl X , Fl -no-deprecation-warnings -Disable the deprecation warnings. -.It Fl -comments -Show commented tasks only -.It Fl A , Fl -all -Show all tasks, even uncommented ones (in combination with -.Fl T -or -.Fl D ) -.It Fl -job-stats Op Ar level -Display job statistics. -If -.Ar level -is -.Sq history , -displays a complete job list. -.It Fl V , Fl -version -Display the program version. -.It Fl h , Fl H , Fl -help -Display a help message. -.El -.Sh SEE ALSO -The complete documentation for -.Nm rake -has been installed at -.Pa /usr/share/doc/rake-doc/html/index.html . -It is also available online at -.Lk https://ruby.github.io/rake . -.Sh AUTHORS -.An -nosplit -.Nm -was written by -.An Jim Weirich Aq Mt jim@weirichhouse.org . -.Pp -This manual was created by -.An Caitlin Matos Aq Mt caitlin.matos@zoho.com -for the Debian project (but may be used by others). -It was inspired by the manual by -.An Jani Monoses Aq Mt jani@iv.ro -for the Ubuntu project. diff --git a/bundle/ruby/3.2.0/gems/rake-13.1.0/doc/rakefile.rdoc b/bundle/ruby/3.2.0/gems/rake-13.1.0/doc/rakefile.rdoc deleted file mode 100644 index 4014306a..00000000 --- a/bundle/ruby/3.2.0/gems/rake-13.1.0/doc/rakefile.rdoc +++ /dev/null @@ -1,622 +0,0 @@ -= Rakefile Format - -First of all, there is no special format for a Rakefile. A Rakefile -contains executable Ruby code. Anything legal in a ruby script is -allowed in a Rakefile. - -Now that we understand there is no special syntax in a Rakefile, there -are some conventions that are used in a Rakefile that are a little -unusual in a typical Ruby program. Since a Rakefile is tailored to -specifying tasks and actions, the idioms used in a Rakefile are -designed to support that. - -So, what goes into a Rakefile? - -== Tasks - -Tasks are the main unit of work in a Rakefile. Tasks have a name -(usually given as a symbol or a string), a list of prerequisites (more -symbols or strings) and a list of actions (given as a block). - -=== Simple Tasks - -A task is declared by using the +task+ method. +task+ takes a single -parameter that is the name of the task. - - task :name - -=== Tasks with Prerequisites - -Any prerequisites are given as a list (enclosed in square brackets) -following the name and an arrow (=>). - - task name: [:prereq1, :prereq2] - -*NOTE:* Although this syntax looks a little funky, it is legal -Ruby. We are constructing a hash where the key is :name and the value -for that key is the list of prerequisites. It is equivalent to the -following ... - - hash = Hash.new - hash[:name] = [:prereq1, :prereq2] - task(hash) - -You can also use strings for task names and prerequisites, rake doesn't care. -This is the same task definition: - - task 'name' => %w[prereq1 prereq2] - -As is this: - - task name: %w[prereq1 prereq2] - -We'll prefer this style for regular tasks with prerequisites throughout the -rest of the document. Using an array of strings for the prerequisites means -you will need to make fewer changes if you need to move tasks into namespaces -or perform other refactorings. - -=== Tasks with Actions - -Actions are defined by passing a block to the +task+ method. Any Ruby -code can be placed in the block. The block may reference the task -object via the block parameter. - - task name: [:prereq1, :prereq2] do |t| - # actions (may reference t) - end - -=== Multiple Definitions - -A task may be specified more than once. Each specification adds its -prerequisites and actions to the existing definition. This allows one -part of a rakefile to specify the actions and a different rakefile -(perhaps separately generated) to specify the dependencies. - -For example, the following is equivalent to the single task -specification given above. - - task :name - task name: :prereq1 - task name: %w[prereq2] - task :name do |t| - # actions - end - -== File Tasks - -Some tasks are designed to create a file from one or more other files. -Tasks that generate these files may be skipped if the file already -exists. File tasks are used to specify file creation tasks. - -File tasks are declared using the +file+ method (instead of the +task+ -method). In addition, file tasks are usually named with a string -rather than a symbol. - -The following file task creates a executable program (named +prog+) -given two object files named +a.o+ and +b.o+. The tasks -for creating +a.o+ and +b.o+ are not shown. - - file "prog" => ["a.o", "b.o"] do |t| - sh "cc -o #{t.name} #{t.prerequisites.join(' ')}" - end - -== Directory Tasks - -It is common to need to create directories upon demand. The -+directory+ convenience method is a short-hand for creating a FileTask -that creates the directory. For example, the following declaration -... - - directory "testdata/examples/doc" - -is equivalent to ... - - file "testdata" do |t| mkdir t.name end - file "testdata/examples" => ["testdata"] do |t| mkdir t.name end - file "testdata/examples/doc" => ["testdata/examples"] do |t| mkdir t.name end - -The +directory+ method does not accept prerequisites or actions, but -both prerequisites and actions can be added later. For example ... - - directory "testdata" - file "testdata" => ["otherdata"] - file "testdata" do - cp Dir["standard_data/*.data"], "testdata" - end - -== Tasks with Parallel Prerequisites - -Rake allows parallel execution of prerequisites using the following syntax: - - multitask copy_files: %w[copy_src copy_doc copy_bin] do - puts "All Copies Complete" - end - -In this example, +copy_files+ is a normal rake task. Its actions are -executed whenever all of its prerequisites are done. The big -difference is that the prerequisites (+copy_src+, +copy_bin+ and -+copy_doc+) are executed in parallel. Each of the prerequisites are -run in their own Ruby thread, possibly allowing faster overall runtime. - -=== Secondary Prerequisites - -If any of the primary prerequisites of a multitask have common secondary -prerequisites, all of the primary/parallel prerequisites will wait -until the common prerequisites have been run. - -For example, if the copy_xxx tasks have the -following prerequisites: - - task copy_src: :prep_for_copy - task copy_bin: :prep_for_copy - task copy_doc: :prep_for_copy - -Then the +prep_for_copy+ task is run before starting all the copies in -parallel. Once +prep_for_copy+ is complete, +copy_src+, +copy_bin+, -and +copy_doc+ are all run in parallel. Note that +prep_for_copy+ is -run only once, even though it is referenced in multiple threads. - -=== Thread Safety - -The Rake internal data structures are thread-safe with respect -to the multitask parallel execution, so there is no need for the user -to do extra synchronization for Rake's benefit. However, if there are -user data structures shared between the parallel prerequisites, the -user must do whatever is necessary to prevent race conditions. - -== Tasks with Arguments - -Prior to version 0.8.0, rake was only able to handle command line -arguments of the form NAME=VALUE that were passed into Rake via the -ENV hash. Many folks had asked for some kind of simple command line -arguments, perhaps using "--" to separate regular task names from -argument values on the command line. The problem is that there was no -easy way to associate positional arguments on the command line with -different tasks. Suppose both tasks :a and :b expect a command line -argument: does the first value go with :a? What if :b is run first? -Should it then get the first command line argument. - -Rake 0.8.0 solves this problem by explicitly passing values directly -to the tasks that need them. For example, if I had a release task -that required a version number, I could say: - - rake release[0.8.2] - -And the string "0.8.2" will be passed to the :release task. Multiple -arguments can be passed by separating them with a comma, for example: - - rake name[john,doe] - -Just a few words of caution. The rake task name and its arguments -need to be a single command line argument to rake. This generally -means no spaces. If spaces are needed, then the entire name + -argument string should be quoted. Something like this: - - rake "name[billy bob, smith]" - -(Quoting rules vary between operating systems and shells, so make sure -you consult the proper docs for your OS/shell). - -=== Tasks that Expect Parameters - -Parameters are only given to tasks that are setup to expect them. In -order to handle named parameters, the task declaration syntax for -tasks has been extended slightly. - -For example, a task that needs a first name and last name might be -declared as: - - task :name, [:first_name, :last_name] - -The first argument is still the name of the task (:name in this case). -The next two arguments are the names of the parameters expected by -:name in an array (:first_name and :last_name in the example). - -To access the values of the parameters, the block defining the task -behaviour can now accept a second parameter: - - task :name, [:first_name, :last_name] do |t, args| - puts "First name is #{args.first_name}" - puts "Last name is #{args.last_name}" - end - -The first argument of the block "t" is always bound to the current -task object. The second argument "args" is an open-struct like object -that allows access to the task arguments. Extra command line -arguments to a task are ignored. - -If you wish to specify default values for the arguments, you can use -the with_defaults method in the task body. Here is the above example -where we specify default values for the first and last names: - - task :name, [:first_name, :last_name] do |t, args| - args.with_defaults(:first_name => "John", :last_name => "Dough") - puts "First name is #{args.first_name}" - puts "Last name is #{args.last_name}" - end - -=== Tasks that Expect Parameters and Have Prerequisites - -Tasks that use parameters have a slightly different format for -prerequisites. Use the arrow notation to indicate the prerequisites -for tasks with arguments. For example: - - task :name, [:first_name, :last_name] => [:pre_name] do |t, args| - args.with_defaults(:first_name => "John", :last_name => "Dough") - puts "First name is #{args.first_name}" - puts "Last name is #{args.last_name}" - end - -=== Tasks that take Variable-length Parameters - -Tasks that need to handle a list of values as a parameter can use the -extras method of the args variable. This allows for tasks that can -loop over a variable number of values, and its compatible with named -parameters as well: - - task :email, [:message] do |t, args| - mail = Mail.new(args.message) - recipients = args.extras - recipients.each do |target| - mail.send_to(target) - end - end - -There is also the convenience method to_a that returns all parameters -in the sequential order they were given, including those associated -with named parameters. - -=== Deprecated Task Parameters Format - -There is an older format for declaring task parameters that omitted -the task argument array and used the :needs keyword to introduce the -dependencies. That format is still supported for compatibility, but -is not recommended for use. The older format may be dropped in future -versions of rake. - -== Accessing Task Programmatically - -Sometimes it is useful to manipulate tasks programmatically in a -Rakefile. To find a task object use Rake::Task.[]. - -=== Programmatic Task Example - -For example, the following Rakefile defines two tasks. The :doit task -simply prints a simple "DONE" message. The :dont class will lookup -the doit class and remove (clear) all of its prerequisites and -actions. - - task :doit do - puts "DONE" - end - - task :dont do - Rake::Task[:doit].clear - end - -Running this example: - - $ rake doit - (in /Users/jim/working/git/rake/x) - DONE - $ rake dont doit - (in /Users/jim/working/git/rake/x) - $ - -The ability to programmatically manipulate tasks gives rake very -powerful meta-programming capabilities w.r.t. task execution, but -should be used with caution. - -== Rules - -When a file is named as a prerequisite, but does not have a file task -defined for it, Rake will attempt to synthesize a task by looking at a -list of rules supplied in the Rakefile. - -Suppose we were trying to invoke task "mycode.o", but no task is -defined for it. But the rakefile has a rule that look like this ... - - rule '.o' => ['.c'] do |t| - sh "cc #{t.source} -c -o #{t.name}" - end - -This rule will synthesize any task that ends in ".o". It has a -prerequisite a source file with an extension of ".c" must exist. If -Rake is able to find a file named "mycode.c", it will automatically -create a task that builds "mycode.o" from "mycode.c". - -If the file "mycode.c" does not exist, rake will attempt -to recursively synthesize a rule for it. - -When a task is synthesized from a rule, the +source+ attribute of the -task is set to the matching source file. This allows us to write -rules with actions that reference the source file. - -=== Advanced Rules - -Any regular expression may be used as the rule pattern. Additionally, -a proc may be used to calculate the name of the source file. This -allows for complex patterns and sources. - -The following rule is equivalent to the example above. - - rule( /\.o$/ => [ - proc {|task_name| task_name.sub(/\.[^.]+$/, '.c') } - ]) do |t| - sh "cc #{t.source} -c -o #{t.name}" - end - -*NOTE:* Because of a _quirk_ in Ruby syntax, parenthesis are -required on *rule* when the first argument is a regular expression. - -The following rule might be used for Java files ... - - rule '.class' => [ - proc { |tn| tn.sub(/\.class$/, '.java').sub(/^classes\//, 'src/') } - ] do |t| - java_compile(t.source, t.name) - end - -*NOTE:* +java_compile+ is a hypothetical method that invokes the -java compiler. - -== Importing Dependencies - -Any ruby file (including other rakefiles) can be included with a -standard Ruby +require+ command. The rules and declarations in the -required file are just added to the definitions already accumulated. - -Because the files are loaded _before_ the rake targets are evaluated, -the loaded files must be "ready to go" when the rake command is -invoked. This makes generated dependency files difficult to use. By -the time rake gets around to updating the dependencies file, it is too -late to load it. - -The +import+ command addresses this by specifying a file to be loaded -_after_ the main rakefile is loaded, but _before_ any targets on the -command line are invoked. In addition, if the file name matches an -explicit task, that task is invoked before loading the file. This -allows dependency files to be generated and used in a single rake -command invocation. - -Example: - - require 'rake/loaders/makefile' - - file ".depends.mf" => [SRC_LIST] do |t| - sh "makedepend -f- -- #{CFLAGS} -- #{t.prerequisites} > #{t.name}" - end - - import ".depends.mf" - -If ".depends" does not exist, or is out of date w.r.t. the source -files, a new ".depends" file is generated using +makedepend+ before -loading. - -== Comments - -Standard Ruby comments (beginning with "#") can be used anywhere it is -legal in Ruby source code, including comments for tasks and rules. -However, if you wish a task to be described using the "-T" switch, -then you need to use the +desc+ command to describe the task. - -Example: - - desc "Create a distribution package" - task package: %w[ ... ] do ... end - -The "-T" switch (or "--tasks" if you like to spell things out) will -display a list of tasks that have a description. If you use +desc+ to -describe your major tasks, you have a semi-automatic way of generating -a summary of your Rake file. - - $ rake -T - (in /home/.../rake) - rake clean # Remove any temporary products. - rake clobber # Remove any generated file. - rake clobber_rdoc # Remove rdoc products - rake contrib_test # Run tests for contrib_test - rake default # Default Task - rake install # Install the application - rake lines # Count lines in the main rake file - rake rdoc # Build the rdoc HTML Files - rake rerdoc # Force a rebuild of the RDOC files - rake test # Run tests - rake testall # Run all test targets - -Only tasks with descriptions will be displayed with the "-T" switch. -Use "-P" (or "--prereqs") to get a list of all tasks and their -prerequisites. - -== Namespaces - -As projects grow (and along with it, the number of tasks), it is -common for task names to begin to clash. For example, if you might -have a main program and a set of sample programs built by a single -Rakefile. By placing the tasks related to the main program in one -namespace, and the tasks for building the sample programs in a -different namespace, the task names will not interfere with each other. - -For example: - - namespace "main" do - task :build do - # Build the main program - end - end - - namespace "samples" do - task :build do - # Build the sample programs - end - end - - task build: %w[main:build samples:build] - -Referencing a task in a separate namespace can be achieved by -prefixing the task name with the namespace and a colon -(e.g. "main:build" refers to the :build task in the +main+ namespace). -Nested namespaces are supported. - -Note that the name given in the +task+ command is always the unadorned -task name without any namespace prefixes. The +task+ command always -defines a task in the current namespace. - -=== FileTasks - -File task names are not scoped by the namespace command. Since the -name of a file task is the name of an actual file in the file system, -it makes little sense to include file task names in name space. -Directory tasks (created by the +directory+ command) are a type of -file task and are also not affected by namespaces. - -=== Name Resolution - -When looking up a task name, rake will start with the current -namespace and attempt to find the name there. If it fails to find a -name in the current namespace, it will search the parent namespaces -until a match is found (or an error occurs if there is no match). - -The "rake" namespace is a special implicit namespace that refers to -the toplevel names. - -If a task name begins with a "^" character, the name resolution will -start in the parent namespace. Multiple "^" characters are allowed. - -Here is an example file with multiple :run tasks and how various names -resolve in different locations. - - task :run - - namespace "one" do - task :run - - namespace "two" do - task :run - - # :run => "one:two:run" - # "two:run" => "one:two:run" - # "one:two:run" => "one:two:run" - # "one:run" => "one:run" - # "^run" => "one:run" - # "^^run" => "rake:run" (the top level task) - # "rake:run" => "rake:run" (the top level task) - end - - # :run => "one:run" - # "two:run" => "one:two:run" - # "^run" => "rake:run" - end - - # :run => "rake:run" - # "one:run" => "one:run" - # "one:two:run" => "one:two:run" - -== FileLists - -FileLists are the way Rake manages lists of files. You can treat a -FileList as an array of strings for the most part, but FileLists -support some additional operations. - -=== Creating a FileList - -Creating a file list is easy. Just give it the list of file names: - - fl = FileList['file1.rb', file2.rb'] - -Or give it a glob pattern: - - fl = FileList['*.rb'] - -== Odds and Ends - -=== do/end versus { } - -Blocks may be specified with either a +do+/+end+ pair, or with curly -braces in Ruby. We _strongly_ recommend using +do+/+end+ to specify the -actions for tasks and rules. Because the rakefile idiom tends to -leave off parentheses on the task/file/rule methods, unusual -ambiguities can arise when using curly braces. - -For example, suppose that the method +object_files+ returns a list of -object files in a project. Now we use +object_files+ as the -prerequisites in a rule specified with actions in curly braces. - - # DON'T DO THIS! - file "prog" => object_files { - # Actions are expected here (but it doesn't work)! - } - -Because curly braces have a higher precedence than +do+/+end+, the -block is associated with the +object_files+ method rather than the -+file+ method. - -This is the proper way to specify the task ... - - # THIS IS FINE - file "prog" => object_files do - # Actions go here - end - -== Rakefile Path - -When issuing the +rake+ command in a terminal, Rake will look -for a Rakefile in the current directory. If a Rakefile is not found, -it will search parent directories until one is found. - -For example, if a Rakefile resides in the +project/+ directory, -moving deeper into the project's directory tree will not have an adverse -effect on rake tasks: - - $ pwd - /home/user/project - - $ cd lib/foo/bar - $ pwd - /home/user/project/lib/foo/bar - - $ rake run_pwd - /home/user/project - -As far as rake is concerned, all tasks are run from the directory in -which the Rakefile resides. - -=== Multiple Rake Files - -Not all tasks need to be included in a single Rakefile. Additional -rake files (with the file extension "+.rake+") may be placed in -+rakelib+ directory located at the top level of a project (i.e. -the same directory that contains the main +Rakefile+). - -Also, rails projects may include additional rake files in the -+lib/tasks+ directory. - -=== Clean and Clobber Tasks - -Through require 'rake/clean' Rake provides +clean+ and +clobber+ -tasks: - -+clean+ :: - Clean up the project by deleting scratch files and backup files. Add files - to the +CLEAN+ FileList to have the +clean+ target handle them. - -+clobber+ :: - Clobber all generated and non-source files in a project. The task depends - on +clean+, so all the +CLEAN+ files will be deleted as well as files in the - +CLOBBER+ FileList. The intent of this task is to return a project to its - pristine, just unpacked state. - -You can add file names or glob patterns to both the +CLEAN+ and +CLOBBER+ -lists. - -=== Phony Task - -The phony task can be used as a dependency to allow file-based tasks to use -non-file-based-tasks as prerequisites without forcing them to rebuild. You -can require 'rake/phony' to add the +phony+ task. - ----- - -== See - -* README.rdoc -- Main documentation for Rake. diff --git a/bundle/ruby/3.2.0/gems/rake-13.1.0/doc/rational.rdoc b/bundle/ruby/3.2.0/gems/rake-13.1.0/doc/rational.rdoc deleted file mode 100644 index 0e1c3387..00000000 --- a/bundle/ruby/3.2.0/gems/rake-13.1.0/doc/rational.rdoc +++ /dev/null @@ -1,151 +0,0 @@ -= Why rake? - -Ok, let me state from the beginning that I never intended to write this -code. I'm not convinced it is useful, and I'm not convinced anyone -would even be interested in it. All I can say is that Why's onion truck -must by been passing through the Ohio valley. - -What am I talking about? ... A Ruby version of Make. - -See, I can sense you cringing already, and I agree. The world certainly -doesn't need yet another reworking of the "make" program. I mean, we -already have "ant". Isn't that enough? - -It started yesterday. I was helping a coworker fix a problem in one of -the Makefiles we use in our project. Not a particularly tough problem, -but during the course of the conversation I began lamenting some of the -shortcomings of make. In particular, in one of my makefiles I wanted to -determine the name of a file dynamically and had to resort to some -simple scripting (in Ruby) to make it work. "Wouldn't it be nice if you -could just use Ruby inside a Makefile" I said. - -My coworker (a recent convert to Ruby) agreed, but wondered what it -would look like. So I sketched the following on the whiteboard... - - "What if you could specify the make tasks in Ruby, like this ..." - - task "build" do - java_compile(...args, etc ...) - end - - "The task function would register "build" as a target to be made, - and the block would be the action executed whenever the build - system determined that it was time to do the build target." - -We agreed that would be cool, but writing make from scratch would be WAY -too much work. And that was the end of that! - -... Except I couldn't get the thought out of my head. What exactly -would be needed to make the about syntax work as a make file? Hmmm, you -would need to register the tasks, you need some way of specifying -dependencies between tasks, and some way of kicking off the process. -Hey! What if we did ... and fifteen minutes later I had a working -prototype of Ruby make, complete with dependencies and actions. - -I showed the code to my coworker and we had a good laugh. It was just -about a page worth of code that reproduced an amazing amount of the -functionality of make. We were both truly stunned with the power of -Ruby. - -But it didn't do everything make did. In particular, it didn't have -timestamp based file dependencies (where a file is rebuilt if any of its -prerequisite files have a later timestamp). Obviously THAT would be a -pain to add and so Ruby Make would remain an interesting experiment. - -... Except as I walked back to my desk, I started thinking about what -file based dependencies would really need. Rats! I was hooked again, -and by adding a new class and two new methods, file/timestamp -dependencies were implemented. - -Ok, now I was really hooked. Last night (during CSI!) I massaged the -code and cleaned it up a bit. The result is a bare-bones replacement -for make in exactly 100 lines of code. - -For the curious, you can see it at ... -* doc/proto_rake.rdoc - -Oh, about the name. When I wrote the example Ruby Make task on my -whiteboard, my coworker exclaimed "Oh! I have the perfect name: Rake ... -Get it? Ruby-Make. Rake!" He said he envisioned the tasks as leaves -and Rake would clean them up ... or something like that. Anyways, the -name stuck. - -Some quick examples ... - -A simple task to delete backup files ... - - task :clean do - Dir['*~'].each {|fn| rm fn rescue nil} - end - -Note that task names are symbols (they are slightly easier to type -than quoted strings ... but you may use quoted string if you would -rather). Rake makes the methods of the FileUtils module directly -available, so we take advantage of the rm command. Also note -the use of "rescue nil" to trap and ignore errors in the rm -command. - -To run it, just type "rake clean". Rake will automatically find a -Rakefile in the current directory (or above!) and will invoke the -targets named on the command line. If there are no targets explicitly -named, rake will invoke the task "default". - -Here's another task with dependencies ... - - task :clobber => [:clean] do - rm_r "tempdir" - end - -Task :clobber depends upon task :clean, so :clean will be run before -:clobber is executed. - -Files are specified by using the "file" command. It is similar to the -task command, except that the task name represents a file, and the task -will be run only if the file doesn't exist, or if its modification time -is earlier than any of its prerequisites. - -Here is a file based dependency that will compile "hello.cc" to -"hello.o". - - file "hello.cc" - file "hello.o" => ["hello.cc"] do |t| - srcfile = t.name.sub(/\.o$/, ".cc") - sh %{g++ #{srcfile} -c -o #{t.name}} - end - -I normally specify file tasks with string (rather than symbols). Some -file names can't be represented by symbols. Plus it makes the -distinction between them more clear to the casual reader. - -Currently writing a task for each and every file in the project would be -tedious at best. I envision a set of libraries to make this job -easier. For instance, perhaps something like this ... - - require 'rake/ctools' - Dir['*.c'].each do |fn| - c_source_file(fn) - end - -where "c_source_file" will create all the tasks need to compile all the -C source files in a directory. Any number of useful libraries could be -created for rake. - -That's it. There's no documentation (other than whats in this -message). Does this sound interesting to anyone? If so, I'll continue -to clean it up and write it up and publish it on RAA. Otherwise, I'll -leave it as an interesting exercise and a tribute to the power of Ruby. - -Why /might/ rake be interesting to Ruby programmers. I don't know, -perhaps ... - -* No weird make syntax (only weird Ruby syntax :-) -* No need to edit or read XML (a la ant) -* Platform independent build scripts. -* Will run anywhere Ruby exists, so no need to have "make" installed. - If you stay away from the "sys" command and use things like - 'ftools', you can have a perfectly platform independent - build script. Also rake is only 100 lines of code, so it can - easily be packaged along with the rest of your code. - -So ... Sorry for the long rambling message. Like I said, I never -intended to write this code at all. diff --git a/bundle/ruby/3.2.0/gems/rake-13.1.0/exe/rake b/bundle/ruby/3.2.0/gems/rake-13.1.0/exe/rake deleted file mode 100755 index a00975f3..00000000 --- a/bundle/ruby/3.2.0/gems/rake-13.1.0/exe/rake +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env ruby - -#-- -# Copyright (c) 2003, 2004, 2005, 2006, 2007 Jim Weirich -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to -# deal in the Software without restriction, including without limitation the -# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -# sell copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -# IN THE SOFTWARE. -#++ - -require "rake" - -Rake.application.run diff --git a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake.rb b/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake.rb deleted file mode 100644 index 0dfd0531..00000000 --- a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake.rb +++ /dev/null @@ -1,71 +0,0 @@ -# frozen_string_literal: true -#-- -# Copyright 2003-2010 by Jim Weirich (jim.weirich@gmail.com) -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to -# deal in the Software without restriction, including without limitation the -# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -# sell copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -# IN THE SOFTWARE. -#++ - -module Rake; end - -require "rake/version" - -require "rbconfig" -require "fileutils" -require "singleton" -require "monitor" -require "optparse" -require "ostruct" - -require "rake/ext/string" - -require "rake/win32" - -require "rake/linked_list" -require "rake/cpu_counter" -require "rake/scope" -require "rake/task_argument_error" -require "rake/rule_recursion_overflow_error" -require "rake/rake_module" -require "rake/trace_output" -require "rake/pseudo_status" -require "rake/task_arguments" -require "rake/invocation_chain" -require "rake/task" -require "rake/file_task" -require "rake/file_creation_task" -require "rake/multi_task" -require "rake/dsl_definition" -require "rake/file_utils_ext" -require "rake/file_list" -require "rake/default_loader" -require "rake/early_time" -require "rake/late_time" -require "rake/name_space" -require "rake/task_manager" -require "rake/application" -require "rake/backtrace" - -$trace = false - -# :stopdoc: -# -# Some top level Constants. - -FileList = Rake::FileList -RakeFileUtils = Rake::FileUtilsExt diff --git a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/application.rb b/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/application.rb deleted file mode 100644 index ac5714b1..00000000 --- a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/application.rb +++ /dev/null @@ -1,855 +0,0 @@ -# frozen_string_literal: true -require "optparse" - -require "rake/task_manager" -require "rake/file_list" -require "rake/thread_pool" -require "rake/thread_history_display" -require "rake/trace_output" -require "rake/win32" - -module Rake - - CommandLineOptionError = Class.new(StandardError) - - ## - # Rake main application object. When invoking +rake+ from the - # command line, a Rake::Application object is created and run. - - class Application - include TaskManager - include TraceOutput - - # The name of the application (typically 'rake') - attr_reader :name - - # The original directory where rake was invoked. - attr_reader :original_dir - - # Name of the actual rakefile used. - attr_reader :rakefile - - # Number of columns on the terminal - attr_accessor :terminal_columns - - # List of the top level task names (task names from the command line). - attr_reader :top_level_tasks - - # Override the detected TTY output state (mostly for testing) - attr_writer :tty_output - - DEFAULT_RAKEFILES = [ - "rakefile", - "Rakefile", - "rakefile.rb", - "Rakefile.rb" - ].freeze - - # Initialize a Rake::Application object. - def initialize - super - @name = "rake" - @rakefiles = DEFAULT_RAKEFILES.dup - @rakefile = nil - @pending_imports = [] - @imported = [] - @loaders = {} - @default_loader = Rake::DefaultLoader.new - @original_dir = Dir.pwd - @top_level_tasks = [] - add_loader("rb", DefaultLoader.new) - add_loader("rf", DefaultLoader.new) - add_loader("rake", DefaultLoader.new) - @tty_output = STDOUT.tty? - @terminal_columns = ENV["RAKE_COLUMNS"].to_i - - set_default_options - end - - # Run the Rake application. The run method performs the following - # three steps: - # - # * Initialize the command line options (+init+). - # * Define the tasks (+load_rakefile+). - # * Run the top level tasks (+top_level+). - # - # If you wish to build a custom rake command, you should call - # +init+ on your application. Then define any tasks. Finally, - # call +top_level+ to run your top level tasks. - def run(argv = ARGV) - standard_exception_handling do - init "rake", argv - load_rakefile - top_level - end - end - - # Initialize the command line parameters and app name. - def init(app_name="rake", argv = ARGV) - standard_exception_handling do - @name = app_name - begin - args = handle_options argv - rescue ArgumentError - # Backward compatibility for capistrano - args = handle_options - end - load_debug_at_stop_feature - collect_command_line_tasks(args) - end - end - - def load_debug_at_stop_feature - return unless ENV["RAKE_DEBUG"] - require "debug/session" - DEBUGGER__::start no_sigint_hook: true, nonstop: true - Rake::Task.prepend Module.new { - def execute(*) - exception = DEBUGGER__::SESSION.capture_exception_frames(/(exe|bin|lib)\/rake/) do - super - end - - if exception - STDERR.puts exception.message - DEBUGGER__::SESSION.enter_postmortem_session exception - raise exception - end - end - } - rescue LoadError - end - private :load_debug_at_stop_feature - - # Find the rakefile and then load it and any pending imports. - def load_rakefile - standard_exception_handling do - raw_load_rakefile - end - end - - # Run the top level tasks of a Rake application. - def top_level - run_with_threads do - if options.show_tasks - display_tasks_and_comments - elsif options.show_prereqs - display_prerequisites - else - top_level_tasks.each { |task_name| invoke_task(task_name) } - end - end - end - - # Run the given block with the thread startup and shutdown. - def run_with_threads - thread_pool.gather_history if options.job_stats == :history - - yield - - thread_pool.join if defined?(@thread_pool) - if options.job_stats - stats = thread_pool.statistics - puts "Maximum active threads: #{stats[:max_active_threads]} + main" - puts "Total threads in play: #{stats[:total_threads_in_play]} + main" - end - ThreadHistoryDisplay.new(thread_pool.history).show if - options.job_stats == :history - end - - # Add a loader to handle imported files ending in the extension - # +ext+. - def add_loader(ext, loader) - ext = ".#{ext}" unless ext =~ /^\./ - @loaders[ext] = loader - end - - # Application options from the command line - def options - @options ||= OpenStruct.new - end - - # Return the thread pool used for multithreaded processing. - def thread_pool # :nodoc: - @thread_pool ||= ThreadPool.new(options.thread_pool_size || Rake.suggested_thread_count-1) - end - - # internal ---------------------------------------------------------------- - - # Invokes a task with arguments that are extracted from +task_string+ - def invoke_task(task_string) # :nodoc: - name, args = parse_task_string(task_string) - t = self[name] - t.invoke(*args) - end - - def parse_task_string(string) # :nodoc: - /^([^\[]+)(?:\[(.*)\])$/ =~ string.to_s - - name = $1 - remaining_args = $2 - - return string, [] unless name - return name, [] if remaining_args.empty? - - args = [] - - begin - /\s*((?:[^\\,]|\\.)*?)\s*(?:,\s*(.*))?$/ =~ remaining_args - - remaining_args = $2 - args << $1.gsub(/\\(.)/, '\1') - end while remaining_args - - return name, args - end - - # Provide standard exception handling for the given block. - def standard_exception_handling # :nodoc: - yield - rescue SystemExit - # Exit silently with current status - raise - rescue OptionParser::InvalidOption => ex - $stderr.puts ex.message - exit(false) - rescue Exception => ex - # Exit with error message - display_error_message(ex) - exit_because_of_exception(ex) - end - - # Exit the program because of an unhandled exception. - # (may be overridden by subclasses) - def exit_because_of_exception(ex) # :nodoc: - exit(false) - end - - # Display the error message that caused the exception. - def display_error_message(ex) # :nodoc: - trace "#{name} aborted!" - display_exception_details(ex) - trace "Tasks: #{ex.chain}" if has_chain?(ex) - trace "(See full trace by running task with --trace)" unless - options.backtrace - end - - def display_exception_details(ex) # :nodoc: - display_exception_details_seen << ex - - display_exception_message_details(ex) - display_exception_backtrace(ex) - display_cause_details(ex.cause) if has_cause?(ex) - end - - def display_cause_details(ex) # :nodoc: - return if display_exception_details_seen.include? ex - - trace "\nCaused by:" - display_exception_details(ex) - end - - def display_exception_details_seen # :nodoc: - Thread.current[:rake_display_exception_details_seen] ||= [] - end - - def has_cause?(ex) # :nodoc: - ex.respond_to?(:cause) && ex.cause - end - - def display_exception_message_details(ex) # :nodoc: - if ex.instance_of?(RuntimeError) - trace ex.message - elsif ex.respond_to?(:detailed_message) - trace "#{ex.class.name}: #{ex.detailed_message(highlight: false)}" - else - trace "#{ex.class.name}: #{ex.message}" - end - end - - def display_exception_backtrace(ex) # :nodoc: - if options.backtrace - trace ex.backtrace.join("\n") - else - trace Backtrace.collapse(ex.backtrace).join("\n") - end - end - - # Warn about deprecated usage. - # - # Example: - # Rake.application.deprecate("import", "Rake.import", caller.first) - # - def deprecate(old_usage, new_usage, call_site) # :nodoc: - unless options.ignore_deprecate - $stderr.puts "WARNING: '#{old_usage}' is deprecated. " + - "Please use '#{new_usage}' instead.\n" + - " at #{call_site}" - end - end - - # Does the exception have a task invocation chain? - def has_chain?(exception) # :nodoc: - exception.respond_to?(:chain) && exception.chain - end - private :has_chain? - - # True if one of the files in RAKEFILES is in the current directory. - # If a match is found, it is copied into @rakefile. - def have_rakefile # :nodoc: - @rakefiles.each do |fn| - if File.exist?(fn) - others = FileList.glob(fn, File::FNM_CASEFOLD) - return others.size == 1 ? others.first : fn - elsif fn == "" - return fn - end - end - return nil - end - - # True if we are outputting to TTY, false otherwise - def tty_output? # :nodoc: - @tty_output - end - - # We will truncate output if we are outputting to a TTY or if we've been - # given an explicit column width to honor - def truncate_output? # :nodoc: - tty_output? || @terminal_columns.nonzero? - end - - # Display the tasks and comments. - def display_tasks_and_comments # :nodoc: - displayable_tasks = tasks.select { |t| - (options.show_all_tasks || t.comment) && - t.name =~ options.show_task_pattern - } - case options.show_tasks - when :tasks - width = displayable_tasks.map { |t| t.name_with_args.length }.max || 10 - if truncate_output? - max_column = terminal_width - name.size - width - 7 - else - max_column = nil - end - - displayable_tasks.each do |t| - printf("#{name} %-#{width}s # %s\n", - t.name_with_args, - max_column ? truncate(t.comment, max_column) : t.comment) - end - when :describe - displayable_tasks.each do |t| - puts "#{name} #{t.name_with_args}" - comment = t.full_comment || "" - comment.split("\n").each do |line| - puts " #{line}" - end - puts - end - when :lines - displayable_tasks.each do |t| - t.locations.each do |loc| - printf "#{name} %-30s %s\n", t.name_with_args, loc - end - end - else - fail "Unknown show task mode: '#{options.show_tasks}'" - end - end - - def terminal_width # :nodoc: - if @terminal_columns.nonzero? - result = @terminal_columns - else - result = unix? ? dynamic_width : 80 - end - (result < 10) ? 80 : result - rescue - 80 - end - - # Calculate the dynamic width of the - def dynamic_width # :nodoc: - @dynamic_width ||= (dynamic_width_stty.nonzero? || dynamic_width_tput) - end - - def dynamic_width_stty # :nodoc: - %x{stty size 2>/dev/null}.split[1].to_i - end - - def dynamic_width_tput # :nodoc: - %x{tput cols 2>/dev/null}.to_i - end - - def unix? # :nodoc: - RbConfig::CONFIG["host_os"] =~ - /(aix|darwin|linux|(net|free|open)bsd|cygwin|solaris|irix|hpux)/i - end - - def windows? # :nodoc: - Win32.windows? - end - - def truncate(string, width) # :nodoc: - if string.nil? - "" - elsif string.length <= width - string - else - (string[0, width - 3] || "") + "..." - end - end - - # Display the tasks and prerequisites - def display_prerequisites # :nodoc: - tasks.each do |t| - puts "#{name} #{t.name}" - t.prerequisites.each { |pre| puts " #{pre}" } - end - end - - def trace(*strings) # :nodoc: - options.trace_output ||= $stderr - trace_on(options.trace_output, *strings) - end - - def sort_options(options) # :nodoc: - options.sort_by { |opt| - opt.select { |o| o.is_a?(String) && o =~ /^-/ }.map(&:downcase).sort.reverse - } - end - private :sort_options - - # A list of all the standard options used in rake, suitable for - # passing to OptionParser. - def standard_rake_options # :nodoc: - sort_options( - [ - ["--all", "-A", - "Show all tasks, even uncommented ones (in combination with -T or -D)", - lambda { |value| - options.show_all_tasks = value - } - ], - ["--backtrace=[OUT]", - "Enable full backtrace. OUT can be stderr (default) or stdout.", - lambda { |value| - options.backtrace = true - select_trace_output(options, "backtrace", value) - } - ], - ["--build-all", "-B", - "Build all prerequisites, including those which are up-to-date.", - lambda { |value| - options.build_all = true - } - ], - ["--comments", - "Show commented tasks only", - lambda { |value| - options.show_all_tasks = !value - } - ], - ["--describe", "-D [PATTERN]", - "Describe the tasks (matching optional PATTERN), then exit.", - lambda { |value| - select_tasks_to_show(options, :describe, value) - } - ], - ["--directory", "-C [DIRECTORY]", - "Change to DIRECTORY before doing anything.", - lambda { |value| - Dir.chdir value - @original_dir = Dir.pwd - } - ], - ["--dry-run", "-n", - "Do a dry run without executing actions.", - lambda { |value| - Rake.verbose(true) - Rake.nowrite(true) - options.dryrun = true - options.trace = true - } - ], - ["--execute", "-e CODE", - "Execute some Ruby code and exit.", - lambda { |value| - eval(value) - exit - } - ], - ["--execute-print", "-p CODE", - "Execute some Ruby code, print the result, then exit.", - lambda { |value| - puts eval(value) - exit - } - ], - ["--execute-continue", "-E CODE", - "Execute some Ruby code, " + - "then continue with normal task processing.", - lambda { |value| eval(value) } - ], - ["--jobs", "-j [NUMBER]", - "Specifies the maximum number of tasks to execute in parallel. " + - "(default is number of CPU cores + 4)", - lambda { |value| - if value.nil? || value == "" - value = Float::INFINITY - elsif value =~ /^\d+$/ - value = value.to_i - else - value = Rake.suggested_thread_count - end - value = 1 if value < 1 - options.thread_pool_size = value - 1 - } - ], - ["--job-stats [LEVEL]", - "Display job statistics. " + - "LEVEL=history displays a complete job list", - lambda { |value| - if value =~ /^history/i - options.job_stats = :history - else - options.job_stats = true - end - } - ], - ["--libdir", "-I LIBDIR", - "Include LIBDIR in the search path for required modules.", - lambda { |value| $:.push(value) } - ], - ["--multitask", "-m", - "Treat all tasks as multitasks.", - lambda { |value| options.always_multitask = true } - ], - ["--no-search", "--nosearch", - "-N", "Do not search parent directories for the Rakefile.", - lambda { |value| options.nosearch = true } - ], - ["--prereqs", "-P", - "Display the tasks and dependencies, then exit.", - lambda { |value| options.show_prereqs = true } - ], - ["--quiet", "-q", - "Do not log messages to standard output.", - lambda { |value| Rake.verbose(false) } - ], - ["--rakefile", "-f [FILENAME]", - "Use FILENAME as the rakefile to search for.", - lambda { |value| - value ||= "" - @rakefiles.clear - @rakefiles << value - } - ], - ["--rakelibdir", "--rakelib", "-R RAKELIBDIR", - "Auto-import any .rake files in RAKELIBDIR. " + - "(default is 'rakelib')", - lambda { |value| - options.rakelib = value.split(File::PATH_SEPARATOR) - } - ], - ["--require", "-r MODULE", - "Require MODULE before executing rakefile.", - lambda { |value| - begin - require value - rescue LoadError => ex - begin - rake_require value - rescue LoadError - raise ex - end - end - } - ], - ["--rules", - "Trace the rules resolution.", - lambda { |value| options.trace_rules = true } - ], - ["--silent", "-s", - "Like --quiet, but also suppresses the " + - "'in directory' announcement.", - lambda { |value| - Rake.verbose(false) - options.silent = true - } - ], - ["--suppress-backtrace PATTERN", - "Suppress backtrace lines matching regexp PATTERN. " + - "Ignored if --trace is on.", - lambda { |value| - options.suppress_backtrace_pattern = Regexp.new(value) - } - ], - ["--system", "-g", - "Using system wide (global) rakefiles " + - "(usually '~/.rake/*.rake').", - lambda { |value| options.load_system = true } - ], - ["--no-system", "--nosystem", "-G", - "Use standard project Rakefile search paths, " + - "ignore system wide rakefiles.", - lambda { |value| options.ignore_system = true } - ], - ["--tasks", "-T [PATTERN]", - "Display the tasks (matching optional PATTERN) " + - "with descriptions, then exit. " + - "-AT combination displays all the tasks, including those without descriptions.", - lambda { |value| - select_tasks_to_show(options, :tasks, value) - } - ], - ["--trace=[OUT]", "-t", - "Turn on invoke/execute tracing, enable full backtrace. " + - "OUT can be stderr (default) or stdout.", - lambda { |value| - options.trace = true - options.backtrace = true - select_trace_output(options, "trace", value) - Rake.verbose(true) - } - ], - ["--verbose", "-v", - "Log message to standard output.", - lambda { |value| Rake.verbose(true) } - ], - ["--version", "-V", - "Display the program version.", - lambda { |value| - puts "rake, version #{Rake::VERSION}" - exit - } - ], - ["--where", "-W [PATTERN]", - "Describe the tasks (matching optional PATTERN), then exit.", - lambda { |value| - select_tasks_to_show(options, :lines, value) - options.show_all_tasks = true - } - ], - ["--no-deprecation-warnings", "-X", - "Disable the deprecation warnings.", - lambda { |value| - options.ignore_deprecate = true - } - ], - ]) - end - - def select_tasks_to_show(options, show_tasks, value) # :nodoc: - options.show_tasks = show_tasks - options.show_task_pattern = Regexp.new(value || "") - Rake::TaskManager.record_task_metadata = true - end - private :select_tasks_to_show - - def select_trace_output(options, trace_option, value) # :nodoc: - value = value.strip unless value.nil? - case value - when "stdout" - options.trace_output = $stdout - when "stderr", nil - options.trace_output = $stderr - else - fail CommandLineOptionError, - "Unrecognized --#{trace_option} option '#{value}'" - end - end - private :select_trace_output - - # Read and handle the command line options. Returns the command line - # arguments that we didn't understand, which should (in theory) be just - # task names and env vars. - def handle_options(argv) # :nodoc: - set_default_options - - OptionParser.new do |opts| - opts.banner = "#{Rake.application.name} [-f rakefile] {options} targets..." - opts.separator "" - opts.separator "Options are ..." - - opts.on_tail("-h", "--help", "-H", "Display this help message.") do - puts opts - exit - end - - standard_rake_options.each { |args| opts.on(*args) } - opts.environment("RAKEOPT") - end.parse(argv) - end - - # Similar to the regular Ruby +require+ command, but will check - # for *.rake files in addition to *.rb files. - def rake_require(file_name, paths=$LOAD_PATH, loaded=$") # :nodoc: - fn = file_name + ".rake" - return false if loaded.include?(fn) - paths.each do |path| - full_path = File.join(path, fn) - if File.exist?(full_path) - Rake.load_rakefile(full_path) - loaded << fn - return true - end - end - fail LoadError, "Can't find #{file_name}" - end - - def find_rakefile_location # :nodoc: - here = Dir.pwd - until (fn = have_rakefile) - Dir.chdir("..") - return nil if Dir.pwd == here || options.nosearch - here = Dir.pwd - end - [fn, here] - ensure - Dir.chdir(Rake.original_dir) - end - - def print_rakefile_directory(location) # :nodoc: - $stderr.puts "(in #{Dir.pwd})" unless - options.silent or original_dir == location - end - - def raw_load_rakefile # :nodoc: - rakefile, location = find_rakefile_location - if (!options.ignore_system) && - (options.load_system || rakefile.nil?) && - system_dir && File.directory?(system_dir) - print_rakefile_directory(location) - glob("#{system_dir}/*.rake") do |name| - add_import name - end - else - fail "No Rakefile found (looking for: #{@rakefiles.join(', ')})" if - rakefile.nil? - @rakefile = rakefile - Dir.chdir(location) - print_rakefile_directory(location) - Rake.load_rakefile(File.expand_path(@rakefile)) if - @rakefile && @rakefile != "" - options.rakelib.each do |rlib| - glob("#{rlib}/*.rake") do |name| - add_import name - end - end - end - load_imports - end - - def glob(path, &block) # :nodoc: - FileList.glob(path.tr("\\", "/")).each(&block) - end - private :glob - - # The directory path containing the system wide rakefiles. - def system_dir # :nodoc: - @system_dir ||= - begin - if ENV["RAKE_SYSTEM"] - ENV["RAKE_SYSTEM"] - else - standard_system_dir - end - end - end - - # The standard directory containing system wide rake files. - if Win32.windows? - def standard_system_dir #:nodoc: - Win32.win32_system_dir - end - else - def standard_system_dir #:nodoc: - File.join(File.expand_path("~"), ".rake") - end - end - private :standard_system_dir - - # Collect the list of tasks on the command line. If no tasks are - # given, return a list containing only the default task. - # Environmental assignments are processed at this time as well. - # - # `args` is the list of arguments to peruse to get the list of tasks. - # It should be the command line that was given to rake, less any - # recognised command-line options, which OptionParser.parse will - # have taken care of already. - def collect_command_line_tasks(args) # :nodoc: - @top_level_tasks = [] - args.each do |arg| - if arg =~ /^(\w+)=(.*)$/m - ENV[$1] = $2 - else - @top_level_tasks << arg unless arg =~ /^-/ - end - end - @top_level_tasks.push(default_task_name) if @top_level_tasks.empty? - end - - # Default task name ("default"). - # (May be overridden by subclasses) - def default_task_name # :nodoc: - "default" - end - - # Add a file to the list of files to be imported. - def add_import(fn) # :nodoc: - @pending_imports << fn - end - - # Load the pending list of imported files. - def load_imports # :nodoc: - while fn = @pending_imports.shift - next if @imported.member?(fn) - fn_task = lookup(fn) and fn_task.invoke - ext = File.extname(fn) - loader = @loaders[ext] || @default_loader - loader.load(fn) - if fn_task = lookup(fn) and fn_task.needed? - fn_task.reenable - fn_task.invoke - loader.load(fn) - end - @imported << fn - end - end - - def rakefile_location(backtrace=caller) # :nodoc: - backtrace.map { |t| t[/([^:]+):/, 1] } - - re = /^#{@rakefile}$/ - re = /#{re.source}/i if windows? - - backtrace.find { |str| str =~ re } || "" - end - - def set_default_options # :nodoc: - options.always_multitask = false - options.backtrace = false - options.build_all = false - options.dryrun = false - options.ignore_deprecate = false - options.ignore_system = false - options.job_stats = false - options.load_system = false - options.nosearch = false - options.rakelib = %w[rakelib] - options.show_all_tasks = false - options.show_prereqs = false - options.show_task_pattern = nil - options.show_tasks = nil - options.silent = false - options.suppress_backtrace_pattern = nil - options.thread_pool_size = Rake.suggested_thread_count - options.trace = false - options.trace_output = $stderr - options.trace_rules = false - end - - end -end diff --git a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/backtrace.rb b/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/backtrace.rb deleted file mode 100644 index 31ff0545..00000000 --- a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/backtrace.rb +++ /dev/null @@ -1,24 +0,0 @@ -# frozen_string_literal: true -module Rake - module Backtrace # :nodoc: all - SYS_KEYS = RbConfig::CONFIG.keys.grep(/(?:[a-z]prefix|libdir)\z/) - SYS_PATHS = RbConfig::CONFIG.values_at(*SYS_KEYS).uniq + - [ File.join(File.dirname(__FILE__), "..") ] - - SUPPRESSED_PATHS = SYS_PATHS. - map { |s| s.tr("\\", "/") }. - map { |f| File.expand_path(f) }. - reject { |s| s.nil? || s =~ /^ *$/ } - SUPPRESSED_PATHS_RE = SUPPRESSED_PATHS.map { |f| Regexp.quote(f) }.join("|") - SUPPRESSED_PATHS_RE << "|^org\\/jruby\\/\\w+\\.java" if - Object.const_defined?(:RUBY_ENGINE) and RUBY_ENGINE == "jruby" - - SUPPRESS_PATTERN = %r!(\A(#{SUPPRESSED_PATHS_RE})|bin/rake:\d+)!i - - def self.collapse(backtrace) - pattern = Rake.application.options.suppress_backtrace_pattern || - SUPPRESS_PATTERN - backtrace.reject { |elem| elem =~ pattern } - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/clean.rb b/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/clean.rb deleted file mode 100644 index b52e832a..00000000 --- a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/clean.rb +++ /dev/null @@ -1,78 +0,0 @@ -# frozen_string_literal: true -# The 'rake/clean' file defines two file lists (CLEAN and CLOBBER) and -# two rake tasks (:clean and :clobber). -# -# [:clean] Clean up the project by deleting scratch files and backup -# files. Add files to the CLEAN file list to have the :clean -# target handle them. -# -# [:clobber] Clobber all generated and non-source files in a project. -# The task depends on :clean, so all the clean files will -# be deleted as well as files in the CLOBBER file list. -# The intent of this task is to return a project to its -# pristine, just unpacked state. - -require "rake" - -# :stopdoc: - -module Rake - module Cleaner - extend FileUtils - - module_function - - def cleanup_files(file_names) - file_names.each do |file_name| - cleanup(file_name) - end - end - - def cleanup(file_name, **opts) - begin - opts = { verbose: Rake.application.options.trace }.merge(opts) - rm_r file_name, **opts - rescue StandardError => ex - puts "Failed to remove #{file_name}: #{ex}" unless file_already_gone?(file_name) - end - end - - def file_already_gone?(file_name) - return false if File.exist?(file_name) - - path = file_name - prev = nil - - while path = File.dirname(path) - return false if cant_be_deleted?(path) - break if [prev, "."].include?(path) - prev = path - end - true - end - private_class_method :file_already_gone? - - def cant_be_deleted?(path_name) - File.exist?(path_name) && - (!File.readable?(path_name) || !File.executable?(path_name)) - end - private_class_method :cant_be_deleted? - end -end - -CLEAN = ::Rake::FileList["**/*~", "**/*.bak", "**/core"] -CLEAN.clear_exclude.exclude { |fn| - fn.pathmap("%f").downcase == "core" && File.directory?(fn) -} - -desc "Remove any temporary products." -task :clean do - Rake::Cleaner.cleanup_files(CLEAN) -end - -CLOBBER = ::Rake::FileList.new - -desc "Remove any generated files." -task clobber: [:clean] do - Rake::Cleaner.cleanup_files(CLOBBER) -end diff --git a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/cloneable.rb b/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/cloneable.rb deleted file mode 100644 index eddb77e2..00000000 --- a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/cloneable.rb +++ /dev/null @@ -1,17 +0,0 @@ -# frozen_string_literal: true -module Rake - ## - # Mixin for creating easily cloned objects. - - module Cloneable # :nodoc: - # The hook that is invoked by 'clone' and 'dup' methods. - def initialize_copy(source) - super - source.instance_variables.each do |var| - src_value = source.instance_variable_get(var) - value = src_value.clone rescue src_value - instance_variable_set(var, value) - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/cpu_counter.rb b/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/cpu_counter.rb deleted file mode 100644 index 564a6285..00000000 --- a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/cpu_counter.rb +++ /dev/null @@ -1,107 +0,0 @@ -# frozen_string_literal: true -module Rake - - # Based on a script at: - # http://stackoverflow.com/questions/891537/ruby-detect-number-of-cpus-installed - class CpuCounter # :nodoc: all - def self.count - new.count_with_default - end - - def count_with_default(default=4) - count || default - rescue StandardError - default - end - - begin - require "etc" - rescue LoadError - else - if Etc.respond_to?(:nprocessors) - def count - return Etc.nprocessors - end - end - end - end -end - -unless Rake::CpuCounter.method_defined?(:count) - Rake::CpuCounter.class_eval <<-'end;', __FILE__, __LINE__+1 - require 'rbconfig' - - def count - if RUBY_PLATFORM == 'java' - count_via_java_runtime - else - case RbConfig::CONFIG['host_os'] - when /linux/ - count_via_cpuinfo - when /darwin|bsd/ - count_via_sysctl - when /mswin|mingw/ - count_via_win32 - else - # Try everything - count_via_win32 || - count_via_sysctl || - count_via_cpuinfo - end - end - end - - def count_via_java_runtime - Java::Java.lang.Runtime.getRuntime.availableProcessors - rescue StandardError - nil - end - - def count_via_win32 - require 'win32ole' - wmi = WIN32OLE.connect("winmgmts://") - cpu = wmi.ExecQuery("select NumberOfCores from Win32_Processor") # TODO count hyper-threaded in this - cpu.to_enum.first.NumberOfCores - rescue StandardError, LoadError - nil - end - - def count_via_cpuinfo - open('/proc/cpuinfo') { |f| f.readlines }.grep(/processor/).size - rescue StandardError - nil - end - - def count_via_sysctl - run 'sysctl', '-n', 'hw.ncpu' - end - - def run(command, *args) - cmd = resolve_command(command) - if cmd - IO.popen [cmd, *args] do |io| - io.read.to_i - end - else - nil - end - end - - def resolve_command(command) - look_for_command("/usr/sbin", command) || - look_for_command("/sbin", command) || - in_path_command(command) - end - - def look_for_command(dir, command) - path = File.join(dir, command) - File.exist?(path) ? path : nil - end - - def in_path_command(command) - IO.popen ['which', command] do |io| - io.eof? ? nil : command - end - end - end; -end diff --git a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/default_loader.rb b/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/default_loader.rb deleted file mode 100644 index d3b4650d..00000000 --- a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/default_loader.rb +++ /dev/null @@ -1,15 +0,0 @@ -# frozen_string_literal: true -module Rake - - # Default Rakefile loader used by +import+. - class DefaultLoader - - ## - # Loads a rakefile into the current application from +fn+ - - def load(fn) - Rake.load_rakefile(File.expand_path(fn)) - end - end - -end diff --git a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/dsl_definition.rb b/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/dsl_definition.rb deleted file mode 100644 index 27969d69..00000000 --- a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/dsl_definition.rb +++ /dev/null @@ -1,195 +0,0 @@ -# frozen_string_literal: true -# Rake DSL functions. -require "rake/file_utils_ext" - -module Rake - - ## - # DSL is a module that provides #task, #desc, #namespace, etc. Use this - # when you'd like to use rake outside the top level scope. - # - # For a Rakefile you run from the command line this module is automatically - # included. - - module DSL - - #-- - # Include the FileUtils file manipulation functions in the top - # level module, but mark them private so that they don't - # unintentionally define methods on other objects. - #++ - - include FileUtilsExt - private(*FileUtils.instance_methods(false)) - private(*FileUtilsExt.instance_methods(false)) - - private - - # :call-seq: - # task(task_name) - # task(task_name: dependencies) - # task(task_name, arguments => dependencies) - # - # Declare a basic task. The +task_name+ is always the first argument. If - # the task name contains a ":" it is defined in that namespace. - # - # The +dependencies+ may be a single task name or an Array of task names. - # The +argument+ (a single name) or +arguments+ (an Array of names) define - # the arguments provided to the task. - # - # The task, argument and dependency names may be either symbols or - # strings. - # - # A task with a single dependency: - # - # task clobber: %w[clean] do - # rm_rf "html" - # end - # - # A task with an argument and a dependency: - # - # task :package, [:version] => :test do |t, args| - # # ... - # end - # - # To invoke this task from the command line: - # - # $ rake package[1.2.3] - # - def task(*args, &block) # :doc: - Rake::Task.define_task(*args, &block) - end - - # Declare a file task. - # - # Example: - # file "config.cfg" => ["config.template"] do - # open("config.cfg", "w") do |outfile| - # open("config.template") do |infile| - # while line = infile.gets - # outfile.puts line - # end - # end - # end - # end - # - def file(*args, &block) # :doc: - Rake::FileTask.define_task(*args, &block) - end - - # Declare a file creation task. - # (Mainly used for the directory command). - def file_create(*args, &block) - Rake::FileCreationTask.define_task(*args, &block) - end - - # Declare a set of files tasks to create the given directories on - # demand. - # - # Example: - # directory "testdata/doc" - # - def directory(*args, &block) # :doc: - result = file_create(*args, &block) - dir, _ = *Rake.application.resolve_args(args) - dir = Rake.from_pathname(dir) - Rake.each_dir_parent(dir) do |d| - file_create d do |t| - mkdir_p t.name unless File.exist?(t.name) - end - end - result - end - - # Declare a task that performs its prerequisites in - # parallel. Multitasks does *not* guarantee that its prerequisites - # will execute in any given order (which is obvious when you think - # about it) - # - # Example: - # multitask deploy: %w[deploy_gem deploy_rdoc] - # - def multitask(*args, &block) # :doc: - Rake::MultiTask.define_task(*args, &block) - end - - # Create a new rake namespace and use it for evaluating the given - # block. Returns a NameSpace object that can be used to lookup - # tasks defined in the namespace. - # - # Example: - # - # ns = namespace "nested" do - # # the "nested:run" task - # task :run - # end - # task_run = ns[:run] # find :run in the given namespace. - # - # Tasks can also be defined in a namespace by using a ":" in the task - # name: - # - # task "nested:test" do - # # ... - # end - # - def namespace(name=nil, &block) # :doc: - name = name.to_s if name.kind_of?(Symbol) - name = name.to_str if name.respond_to?(:to_str) - unless name.kind_of?(String) || name.nil? - raise ArgumentError, "Expected a String or Symbol for a namespace name" - end - Rake.application.in_namespace(name, &block) - end - - # Declare a rule for auto-tasks. - # - # Example: - # rule '.o' => '.c' do |t| - # sh 'cc', '-o', t.name, t.source - # end - # - def rule(*args, &block) # :doc: - Rake::Task.create_rule(*args, &block) - end - - # Describes the next rake task. Duplicate descriptions are discarded. - # Descriptions are shown with rake -T (up to the first - # sentence) and rake -D (the entire description). - # - # Example: - # desc "Run the Unit Tests" - # task test: [:build] do - # # ... run tests - # end - # - def desc(description) # :doc: - Rake.application.last_description = description - end - - # Import the partial Rakefiles +fn+. Imported files are loaded - # _after_ the current file is completely loaded. This allows the - # import statement to appear anywhere in the importing file, and yet - # allowing the imported files to depend on objects defined in the - # importing file. - # - # A common use of the import statement is to include files - # containing dependency declarations. - # - # See also the --rakelibdir command line option. - # - # Example: - # import ".depend", "my_rules" - # - def import(*fns) # :doc: - fns.each do |fn| - Rake.application.add_import(fn) - end - end - end - extend FileUtilsExt -end - -# Extend the main object with the DSL commands. This allows top-level -# calls to task, etc. to work from a Rakefile without polluting the -# object inheritance tree. -self.extend Rake::DSL diff --git a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/early_time.rb b/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/early_time.rb deleted file mode 100644 index 80cc6bfa..00000000 --- a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/early_time.rb +++ /dev/null @@ -1,22 +0,0 @@ -# frozen_string_literal: true -module Rake - - # EarlyTime is a fake timestamp that occurs _before_ any other time value. - class EarlyTime - include Comparable - include Singleton - - ## - # The EarlyTime always comes before +other+! - - def <=>(other) - -1 - end - - def to_s # :nodoc: - "" - end - end - - EARLY = EarlyTime.instance -end diff --git a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/ext/core.rb b/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/ext/core.rb deleted file mode 100644 index 226f2125..00000000 --- a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/ext/core.rb +++ /dev/null @@ -1,26 +0,0 @@ -# frozen_string_literal: true -class Module - # Check for an existing method in the current class before extending. If - # the method already exists, then a warning is printed and the extension is - # not added. Otherwise the block is yielded and any definitions in the - # block will take effect. - # - # Usage: - # - # class String - # rake_extension("xyz") do - # def xyz - # ... - # end - # end - # end - # - def rake_extension(method) # :nodoc: - if method_defined?(method) - $stderr.puts "WARNING: Possible conflict with Rake extension: " + - "#{self}##{method} already exists" - else - yield - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/ext/string.rb b/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/ext/string.rb deleted file mode 100644 index c70236ae..00000000 --- a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/ext/string.rb +++ /dev/null @@ -1,176 +0,0 @@ -# frozen_string_literal: true -require "rake/ext/core" - -class String - - rake_extension("ext") do - # Replace the file extension with +newext+. If there is no extension on - # the string, append the new extension to the end. If the new extension - # is not given, or is the empty string, remove any existing extension. - # - # +ext+ is a user added method for the String class. - # - # This String extension comes from Rake - def ext(newext="") - return self.dup if [".", ".."].include? self - if newext != "" - newext = "." + newext unless newext =~ /^\./ - end - self.chomp(File.extname(self)) << newext - end - end - - rake_extension("pathmap") do - # Explode a path into individual components. Used by +pathmap+. - # - # This String extension comes from Rake - def pathmap_explode - head, tail = File.split(self) - return [self] if head == self - return [tail] if head == "." || tail == "/" - return [head, tail] if head == "/" - return head.pathmap_explode + [tail] - end - protected :pathmap_explode - - # Extract a partial path from the path. Include +n+ directories from the - # front end (left hand side) if +n+ is positive. Include |+n+| - # directories from the back end (right hand side) if +n+ is negative. - # - # This String extension comes from Rake - def pathmap_partial(n) - dirs = File.dirname(self).pathmap_explode - partial_dirs = - if n > 0 - dirs[0...n] - elsif n < 0 - dirs.reverse[0...-n].reverse - else - "." - end - File.join(partial_dirs) - end - protected :pathmap_partial - - # Perform the pathmap replacement operations on the given path. The - # patterns take the form 'pat1,rep1;pat2,rep2...'. - # - # This String extension comes from Rake - def pathmap_replace(patterns, &block) - result = self - patterns.split(";").each do |pair| - pattern, replacement = pair.split(",") - pattern = Regexp.new(pattern) - if replacement == "*" && block_given? - result = result.sub(pattern, &block) - elsif replacement - result = result.sub(pattern, replacement) - else - result = result.sub(pattern, "") - end - end - result - end - protected :pathmap_replace - - # Map the path according to the given specification. The specification - # controls the details of the mapping. The following special patterns are - # recognized: - # - # %p :: The complete path. - # %f :: The base file name of the path, with its file extension, - # but without any directories. - # %n :: The file name of the path without its file extension. - # %d :: The directory list of the path. - # %x :: The file extension of the path. An empty string if there - # is no extension. - # %X :: Everything *but* the file extension. - # %s :: The alternate file separator if defined, otherwise use # - # the standard file separator. - # %% :: A percent sign. - # - # The %d specifier can also have a numeric prefix (e.g. '%2d'). - # If the number is positive, only return (up to) +n+ directories in the - # path, starting from the left hand side. If +n+ is negative, return (up - # to) +n+ directories from the right hand side of the path. - # - # Examples: - # - # 'a/b/c/d/file.txt'.pathmap("%2d") => 'a/b' - # 'a/b/c/d/file.txt'.pathmap("%-2d") => 'c/d' - # - # Also the %d, %p, %f, %n, - # %x, and %X operators can take a pattern/replacement - # argument to perform simple string substitutions on a particular part of - # the path. The pattern and replacement are separated by a comma and are - # enclosed by curly braces. The replacement spec comes after the % - # character but before the operator letter. (e.g. "%{old,new}d"). - # Multiple replacement specs should be separated by semi-colons (e.g. - # "%{old,new;src,bin}d"). - # - # Regular expressions may be used for the pattern, and back refs may be - # used in the replacement text. Curly braces, commas and semi-colons are - # excluded from both the pattern and replacement text (let's keep parsing - # reasonable). - # - # For example: - # - # "src/org/onestepback/proj/A.java".pathmap("%{^src,class}X.class") - # - # returns: - # - # "class/org/onestepback/proj/A.class" - # - # If the replacement text is '*', then a block may be provided to perform - # some arbitrary calculation for the replacement. - # - # For example: - # - # "/path/to/file.TXT".pathmap("%X%{.*,*}x") { |ext| - # ext.downcase - # } - # - # Returns: - # - # "/path/to/file.txt" - # - # This String extension comes from Rake - def pathmap(spec=nil, &block) - return self if spec.nil? - result = "".dup - spec.scan(/%\{[^}]*\}-?\d*[sdpfnxX%]|%-?\d+d|%.|[^%]+/) do |frag| - case frag - when "%f" - result << File.basename(self) - when "%n" - result << File.basename(self).ext - when "%d" - result << File.dirname(self) - when "%x" - result << File.extname(self) - when "%X" - result << self.ext - when "%p" - result << self - when "%s" - result << (File::ALT_SEPARATOR || File::SEPARATOR) - when "%-" - # do nothing - when "%%" - result << "%" - when /%(-?\d+)d/ - result << pathmap_partial($1.to_i) - when /^%\{([^}]*)\}(\d*[dpfnxX])/ - patterns, operator = $1, $2 - result << pathmap("%" + operator).pathmap_replace(patterns, &block) - when /^%/ - fail ArgumentError, "Unknown pathmap specifier #{frag} in '#{spec}'" - else - result << frag - end - end - result - end - end - -end diff --git a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/file_creation_task.rb b/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/file_creation_task.rb deleted file mode 100644 index 5a4c6849..00000000 --- a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/file_creation_task.rb +++ /dev/null @@ -1,25 +0,0 @@ -# frozen_string_literal: true -require "rake/file_task" -require "rake/early_time" - -module Rake - - # A FileCreationTask is a file task that when used as a dependency will be - # needed if and only if the file has not been created. Once created, it is - # not re-triggered if any of its dependencies are newer, nor does trigger - # any rebuilds of tasks that depend on it whenever it is updated. - # - class FileCreationTask < FileTask - # Is this file task needed? Yes if it doesn't exist. - def needed? - !File.exist?(name) - end - - # Time stamp for file creation task. This time stamp is earlier - # than any other time stamp. - def timestamp - Rake::EARLY - end - end - -end diff --git a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/file_list.rb b/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/file_list.rb deleted file mode 100644 index 22c339f2..00000000 --- a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/file_list.rb +++ /dev/null @@ -1,435 +0,0 @@ -# frozen_string_literal: true -require "rake/cloneable" -require "rake/file_utils_ext" -require "rake/ext/string" - -module Rake - - ## - # A FileList is essentially an array with a few helper methods defined to - # make file manipulation a bit easier. - # - # FileLists are lazy. When given a list of glob patterns for possible files - # to be included in the file list, instead of searching the file structures - # to find the files, a FileList holds the pattern for latter use. - # - # This allows us to define a number of FileList to match any number of - # files, but only search out the actual files when then FileList itself is - # actually used. The key is that the first time an element of the - # FileList/Array is requested, the pending patterns are resolved into a real - # list of file names. - # - class FileList - - include Cloneable - - # == Method Delegation - # - # The lazy evaluation magic of FileLists happens by implementing all the - # array specific methods to call +resolve+ before delegating the heavy - # lifting to an embedded array object (@items). - # - # In addition, there are two kinds of delegation calls. The regular kind - # delegates to the @items array and returns the result directly. Well, - # almost directly. It checks if the returned value is the @items object - # itself, and if so will return the FileList object instead. - # - # The second kind of delegation call is used in methods that normally - # return a new Array object. We want to capture the return value of these - # methods and wrap them in a new FileList object. We enumerate these - # methods in the +SPECIAL_RETURN+ list below. - - # List of array methods (that are not in +Object+) that need to be - # delegated. - ARRAY_METHODS = (Array.instance_methods - Object.instance_methods).map(&:to_s) - - # List of additional methods that must be delegated. - MUST_DEFINE = %w[inspect <=>] - - # List of methods that should not be delegated here (we define special - # versions of them explicitly below). - MUST_NOT_DEFINE = %w[to_a to_ary partition * <<] - - # List of delegated methods that return new array values which need - # wrapping. - SPECIAL_RETURN = %w[ - map collect sort sort_by select find_all reject grep - compact flatten uniq values_at - + - & | - ] - - DELEGATING_METHODS = (ARRAY_METHODS + MUST_DEFINE - MUST_NOT_DEFINE).map(&:to_s).sort.uniq - - # Now do the delegation. - DELEGATING_METHODS.each do |sym| - if SPECIAL_RETURN.include?(sym) - ln = __LINE__ + 1 - class_eval %{ - def #{sym}(*args, &block) - resolve - result = @items.send(:#{sym}, *args, &block) - self.class.new.import(result) - end - }, __FILE__, ln - else - ln = __LINE__ + 1 - class_eval %{ - def #{sym}(*args, &block) - resolve - result = @items.send(:#{sym}, *args, &block) - result.object_id == @items.object_id ? self : result - end - }, __FILE__, ln - end - end - - GLOB_PATTERN = %r{[*?\[\{]} - - # Create a file list from the globbable patterns given. If you wish to - # perform multiple includes or excludes at object build time, use the - # "yield self" pattern. - # - # Example: - # file_list = FileList.new('lib/**/*.rb', 'test/test*.rb') - # - # pkg_files = FileList.new('lib/**/*') do |fl| - # fl.exclude(/\bCVS\b/) - # end - # - def initialize(*patterns) - @pending_add = [] - @pending = false - @exclude_patterns = DEFAULT_IGNORE_PATTERNS.dup - @exclude_procs = DEFAULT_IGNORE_PROCS.dup - @items = [] - patterns.each { |pattern| include(pattern) } - yield self if block_given? - end - - # Add file names defined by glob patterns to the file list. If an array - # is given, add each element of the array. - # - # Example: - # file_list.include("*.java", "*.cfg") - # file_list.include %w( math.c lib.h *.o ) - # - def include(*filenames) - # TODO: check for pending - filenames.each do |fn| - if fn.respond_to? :to_ary - include(*fn.to_ary) - else - @pending_add << Rake.from_pathname(fn) - end - end - @pending = true - self - end - alias :add :include - - # Register a list of file name patterns that should be excluded from the - # list. Patterns may be regular expressions, glob patterns or regular - # strings. In addition, a block given to exclude will remove entries that - # return true when given to the block. - # - # Note that glob patterns are expanded against the file system. If a file - # is explicitly added to a file list, but does not exist in the file - # system, then an glob pattern in the exclude list will not exclude the - # file. - # - # Examples: - # FileList['a.c', 'b.c'].exclude("a.c") => ['b.c'] - # FileList['a.c', 'b.c'].exclude(/^a/) => ['b.c'] - # - # If "a.c" is a file, then ... - # FileList['a.c', 'b.c'].exclude("a.*") => ['b.c'] - # - # If "a.c" is not a file, then ... - # FileList['a.c', 'b.c'].exclude("a.*") => ['a.c', 'b.c'] - # - def exclude(*patterns, &block) - patterns.each do |pat| - if pat.respond_to? :to_ary - exclude(*pat.to_ary) - else - @exclude_patterns << Rake.from_pathname(pat) - end - end - @exclude_procs << block if block_given? - resolve_exclude unless @pending - self - end - - # Clear all the exclude patterns so that we exclude nothing. - def clear_exclude - @exclude_patterns = [] - @exclude_procs = [] - self - end - - # A FileList is equal through array equality. - def ==(array) - to_ary == array - end - - # Return the internal array object. - def to_a - resolve - @items - end - - # Return the internal array object. - def to_ary - to_a - end - - # Lie about our class. - def is_a?(klass) - klass == Array || super(klass) - end - alias kind_of? is_a? - - # Redefine * to return either a string or a new file list. - def *(other) - result = @items * other - case result - when Array - self.class.new.import(result) - else - result - end - end - - def <<(obj) - resolve - @items << Rake.from_pathname(obj) - self - end - - # Resolve all the pending adds now. - def resolve - if @pending - @pending = false - @pending_add.each do |fn| resolve_add(fn) end - @pending_add = [] - resolve_exclude - end - self - end - - def resolve_add(fn) # :nodoc: - case fn - when GLOB_PATTERN - add_matching(fn) - else - self << fn - end - end - private :resolve_add - - def resolve_exclude # :nodoc: - reject! { |fn| excluded_from_list?(fn) } - self - end - private :resolve_exclude - - # Return a new FileList with the results of running +sub+ against each - # element of the original list. - # - # Example: - # FileList['a.c', 'b.c'].sub(/\.c$/, '.o') => ['a.o', 'b.o'] - # - def sub(pat, rep) - inject(self.class.new) { |res, fn| res << fn.sub(pat, rep) } - end - - # Return a new FileList with the results of running +gsub+ against each - # element of the original list. - # - # Example: - # FileList['lib/test/file', 'x/y'].gsub(/\//, "\\") - # => ['lib\\test\\file', 'x\\y'] - # - def gsub(pat, rep) - inject(self.class.new) { |res, fn| res << fn.gsub(pat, rep) } - end - - # Same as +sub+ except that the original file list is modified. - def sub!(pat, rep) - each_with_index { |fn, i| self[i] = fn.sub(pat, rep) } - self - end - - # Same as +gsub+ except that the original file list is modified. - def gsub!(pat, rep) - each_with_index { |fn, i| self[i] = fn.gsub(pat, rep) } - self - end - - # Apply the pathmap spec to each of the included file names, returning a - # new file list with the modified paths. (See String#pathmap for - # details.) - def pathmap(spec=nil, &block) - collect { |fn| fn.pathmap(spec, &block) } - end - - # Return a new FileList with String#ext method applied to - # each member of the array. - # - # This method is a shortcut for: - # - # array.collect { |item| item.ext(newext) } - # - # +ext+ is a user added method for the Array class. - def ext(newext="") - collect { |fn| fn.ext(newext) } - end - - # Grep each of the files in the filelist using the given pattern. If a - # block is given, call the block on each matching line, passing the file - # name, line number, and the matching line of text. If no block is given, - # a standard emacs style file:linenumber:line message will be printed to - # standard out. Returns the number of matched items. - def egrep(pattern, *options) - matched = 0 - each do |fn| - begin - File.open(fn, "r", *options) do |inf| - count = 0 - inf.each do |line| - count += 1 - if pattern.match(line) - matched += 1 - if block_given? - yield fn, count, line - else - puts "#{fn}:#{count}:#{line}" - end - end - end - end - rescue StandardError => ex - $stderr.puts "Error while processing '#{fn}': #{ex}" - end - end - matched - end - - # Return a new file list that only contains file names from the current - # file list that exist on the file system. - def existing - select { |fn| File.exist?(fn) }.uniq - end - - # Modify the current file list so that it contains only file name that - # exist on the file system. - def existing! - resolve - @items = @items.select { |fn| File.exist?(fn) }.uniq - self - end - - # FileList version of partition. Needed because the nested arrays should - # be FileLists in this version. - def partition(&block) # :nodoc: - resolve - result = @items.partition(&block) - [ - self.class.new.import(result[0]), - self.class.new.import(result[1]), - ] - end - - # Convert a FileList to a string by joining all elements with a space. - def to_s - resolve - self.join(" ") - end - - # Add matching glob patterns. - def add_matching(pattern) - self.class.glob(pattern).each do |fn| - self << fn unless excluded_from_list?(fn) - end - end - private :add_matching - - # Should the given file name be excluded from the list? - # - # NOTE: This method was formerly named "exclude?", but Rails - # introduced an exclude? method as an array method and setup a - # conflict with file list. We renamed the method to avoid - # confusion. If you were using "FileList#exclude?" in your user - # code, you will need to update. - def excluded_from_list?(fn) - return true if @exclude_patterns.any? do |pat| - case pat - when Regexp - fn =~ pat - when GLOB_PATTERN - flags = File::FNM_PATHNAME - # Ruby <= 1.9.3 does not support File::FNM_EXTGLOB - flags |= File::FNM_EXTGLOB if defined? File::FNM_EXTGLOB - File.fnmatch?(pat, fn, flags) - else - fn == pat - end - end - @exclude_procs.any? { |p| p.call(fn) } - end - - DEFAULT_IGNORE_PATTERNS = [ - /(^|[\/\\])CVS([\/\\]|$)/, - /(^|[\/\\])\.svn([\/\\]|$)/, - /\.bak$/, - /~$/ - ] - DEFAULT_IGNORE_PROCS = [ - proc { |fn| fn =~ /(^|[\/\\])core$/ && !File.directory?(fn) } - ] - - def import(array) # :nodoc: - @items = array - self - end - - class << self - # Create a new file list including the files listed. Similar to: - # - # FileList.new(*args) - def [](*args) - new(*args) - end - - # Get a sorted list of files matching the pattern. This method - # should be preferred to Dir[pattern] and Dir.glob(pattern) because - # the files returned are guaranteed to be sorted. - def glob(pattern, *args) - Dir.glob(pattern, *args).sort - end - end - end -end - -module Rake - class << self - - # Yield each file or directory component. - def each_dir_parent(dir) # :nodoc: - old_length = nil - while dir != "." && dir.length != old_length - yield(dir) - old_length = dir.length - dir = File.dirname(dir) - end - end - - # Convert Pathname and Pathname-like objects to strings; - # leave everything else alone - def from_pathname(path) # :nodoc: - path = path.to_path if path.respond_to?(:to_path) - path = path.to_str if path.respond_to?(:to_str) - path - end - end -end # module Rake diff --git a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/file_task.rb b/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/file_task.rb deleted file mode 100644 index c36b4969..00000000 --- a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/file_task.rb +++ /dev/null @@ -1,58 +0,0 @@ -# frozen_string_literal: true -require "rake/task" -require "rake/early_time" - -module Rake - - # A FileTask is a task that includes time based dependencies. If any of a - # FileTask's prerequisites have a timestamp that is later than the file - # represented by this task, then the file must be rebuilt (using the - # supplied actions). - # - class FileTask < Task - - # Is this file task needed? Yes if it doesn't exist, or if its time stamp - # is out of date. - def needed? - begin - out_of_date?(File.mtime(name)) || @application.options.build_all - rescue Errno::ENOENT - true - end - end - - # Time stamp for file task. - def timestamp - begin - File.mtime(name) - rescue Errno::ENOENT - Rake::LATE - end - end - - private - - # Are there any prerequisites with a later time than the given time stamp? - def out_of_date?(stamp) - all_prerequisite_tasks.any? { |prereq| - prereq_task = application[prereq, @scope] - if prereq_task.instance_of?(Rake::FileTask) - prereq_task.timestamp > stamp || @application.options.build_all - else - prereq_task.timestamp > stamp - end - } - end - - # ---------------------------------------------------------------- - # Task class methods. - # - class << self - # Apply the scope to the task name according to the rules for this kind - # of task. File based tasks ignore the scope when creating the name. - def scope_name(scope, task_name) - Rake.from_pathname(task_name) - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/file_utils.rb b/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/file_utils.rb deleted file mode 100644 index 1510d95c..00000000 --- a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/file_utils.rb +++ /dev/null @@ -1,132 +0,0 @@ -# frozen_string_literal: true -require "rbconfig" -require "fileutils" - -#-- -# This a FileUtils extension that defines several additional commands to be -# added to the FileUtils utility functions. -module FileUtils - # Path to the currently running Ruby program - RUBY = ENV["RUBY"] || File.join( - RbConfig::CONFIG["bindir"], - RbConfig::CONFIG["ruby_install_name"] + RbConfig::CONFIG["EXEEXT"]). - sub(/.*\s.*/m, '"\&"') - - # Run the system command +cmd+. If multiple arguments are given the command - # is run directly (without the shell, same semantics as Kernel::exec and - # Kernel::system). - # - # It is recommended you use the multiple argument form over interpolating - # user input for both usability and security reasons. With the multiple - # argument form you can easily process files with spaces or other shell - # reserved characters in them. With the multiple argument form your rake - # tasks are not vulnerable to users providing an argument like - # ; rm # -rf /. - # - # If a block is given, upon command completion the block is called with an - # OK flag (true on a zero exit status) and a Process::Status object. - # Without a block a RuntimeError is raised when the command exits non-zero. - # - # Examples: - # - # sh 'ls -ltr' - # - # sh 'ls', 'file with spaces' - # - # # check exit status after command runs - # sh %{grep pattern file} do |ok, res| - # if !ok - # puts "pattern not found (status = #{res.exitstatus})" - # end - # end - # - def sh(*cmd, &block) - options = (Hash === cmd.last) ? cmd.pop : {} - shell_runner = block_given? ? block : create_shell_runner(cmd) - - set_verbose_option(options) - verbose = options.delete :verbose - noop = options.delete(:noop) || Rake::FileUtilsExt.nowrite_flag - - Rake.rake_output_message sh_show_command cmd if verbose - - unless noop - res = (Hash === cmd.last) ? system(*cmd) : system(*cmd, options) - status = $? - status = Rake::PseudoStatus.new(1) if !res && status.nil? - shell_runner.call(res, status) - end - end - - def create_shell_runner(cmd) # :nodoc: - show_command = sh_show_command cmd - lambda do |ok, status| - ok or - fail "Command failed with status (#{status.exitstatus}): " + - "[#{show_command}]" - end - end - private :create_shell_runner - - def sh_show_command(cmd) # :nodoc: - cmd = cmd.dup - - if Hash === cmd.first - env = cmd.first - env = env.map { |name, value| "#{name}=#{value}" }.join " " - cmd[0] = env - end - - cmd.join " " - end - private :sh_show_command - - def set_verbose_option(options) # :nodoc: - unless options.key? :verbose - options[:verbose] = - (Rake::FileUtilsExt.verbose_flag == Rake::FileUtilsExt::DEFAULT) || - Rake::FileUtilsExt.verbose_flag - end - end - private :set_verbose_option - - # Run a Ruby interpreter with the given arguments. - # - # Example: - # ruby %{-pe '$_.upcase!' 1 - sh(RUBY, *args, **options, &block) - else - sh("#{RUBY} #{args.first}", **options, &block) - end - end - - LN_SUPPORTED = [true] - - # Attempt to do a normal file link, but fall back to a copy if the link - # fails. - def safe_ln(*args, **options) - if LN_SUPPORTED[0] - begin - return options.empty? ? ln(*args) : ln(*args, **options) - rescue StandardError, NotImplementedError - LN_SUPPORTED[0] = false - end - end - options.empty? ? cp(*args) : cp(*args, **options) - end - - # Split a file path into individual directory names. - # - # Example: - # split_all("a/b/c") => ['a', 'b', 'c'] - # - def split_all(path) - head, tail = File.split(path) - return [tail] if head == "." || tail == "/" - return [head, tail] if head == "/" - return split_all(head) + [tail] - end -end diff --git a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/file_utils_ext.rb b/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/file_utils_ext.rb deleted file mode 100644 index e91ad595..00000000 --- a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/file_utils_ext.rb +++ /dev/null @@ -1,134 +0,0 @@ -# frozen_string_literal: true -require "rake/file_utils" - -module Rake - # - # FileUtilsExt provides a custom version of the FileUtils methods - # that respond to the verbose and nowrite - # commands. - # - module FileUtilsExt - include FileUtils - - class << self - attr_accessor :verbose_flag, :nowrite_flag - end - - DEFAULT = Object.new - - FileUtilsExt.verbose_flag = DEFAULT - FileUtilsExt.nowrite_flag = false - - FileUtils.commands.each do |name| - opts = FileUtils.options_of name - default_options = [] - if opts.include?("verbose") - default_options << "verbose: FileUtilsExt.verbose_flag" - end - if opts.include?("noop") - default_options << "noop: FileUtilsExt.nowrite_flag" - end - - next if default_options.empty? - module_eval(<<-EOS, __FILE__, __LINE__ + 1) - def #{name}(*args, **options, &block) - super(*args, - #{default_options.join(', ')}, - **options, &block) - end - EOS - end - - # Get/set the verbose flag controlling output from the FileUtils - # utilities. If verbose is true, then the utility method is - # echoed to standard output. - # - # Examples: - # verbose # return the current value of the - # # verbose flag - # verbose(v) # set the verbose flag to _v_. - # verbose(v) { code } # Execute code with the verbose flag set - # # temporarily to _v_. Return to the - # # original value when code is done. - def verbose(value=nil) - oldvalue = FileUtilsExt.verbose_flag - FileUtilsExt.verbose_flag = value unless value.nil? - if block_given? - begin - yield - ensure - FileUtilsExt.verbose_flag = oldvalue - end - end - FileUtilsExt.verbose_flag - end - - # Get/set the nowrite flag controlling output from the FileUtils - # utilities. If verbose is true, then the utility method is - # echoed to standard output. - # - # Examples: - # nowrite # return the current value of the - # # nowrite flag - # nowrite(v) # set the nowrite flag to _v_. - # nowrite(v) { code } # Execute code with the nowrite flag set - # # temporarily to _v_. Return to the - # # original value when code is done. - def nowrite(value=nil) - oldvalue = FileUtilsExt.nowrite_flag - FileUtilsExt.nowrite_flag = value unless value.nil? - if block_given? - begin - yield - ensure - FileUtilsExt.nowrite_flag = oldvalue - end - end - oldvalue - end - - # Use this function to prevent potentially destructive ruby code - # from running when the :nowrite flag is set. - # - # Example: - # - # when_writing("Building Project") do - # project.build - # end - # - # The following code will build the project under normal - # conditions. If the nowrite(true) flag is set, then the example - # will print: - # - # DRYRUN: Building Project - # - # instead of actually building the project. - # - def when_writing(msg=nil) - if FileUtilsExt.nowrite_flag - $stderr.puts "DRYRUN: #{msg}" if msg - else - yield - end - end - - # Send the message to the default rake output (which is $stderr). - def rake_output_message(message) - $stderr.puts(message) - end - - # Check that the options do not contain options not listed in - # +optdecl+. An ArgumentError exception is thrown if non-declared - # options are found. - def rake_check_options(options, *optdecl) - h = options.dup - optdecl.each do |name| - h.delete name - end - raise ArgumentError, "no such option: #{h.keys.join(' ')}" unless - h.empty? - end - - extend self - end -end diff --git a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/invocation_chain.rb b/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/invocation_chain.rb deleted file mode 100644 index 44a99549..00000000 --- a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/invocation_chain.rb +++ /dev/null @@ -1,57 +0,0 @@ -# frozen_string_literal: true -module Rake - - # InvocationChain tracks the chain of task invocations to detect - # circular dependencies. - class InvocationChain < LinkedList - - # Is the invocation already in the chain? - def member?(invocation) - head == invocation || tail.member?(invocation) - end - - # Append an invocation to the chain of invocations. It is an error - # if the invocation already listed. - def append(invocation) - if member?(invocation) - fail RuntimeError, "Circular dependency detected: #{to_s} => #{invocation}" - end - conj(invocation) - end - - # Convert to string, ie: TOP => invocation => invocation - def to_s - "#{prefix}#{head}" - end - - # Class level append. - def self.append(invocation, chain) - chain.append(invocation) - end - - private - - def prefix - "#{tail} => " - end - - # Null object for an empty chain. - class EmptyInvocationChain < LinkedList::EmptyLinkedList - @parent = InvocationChain - - def member?(obj) - false - end - - def append(invocation) - conj(invocation) - end - - def to_s - "TOP" - end - end - - EMPTY = EmptyInvocationChain.new - end -end diff --git a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/invocation_exception_mixin.rb b/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/invocation_exception_mixin.rb deleted file mode 100644 index b0d307a4..00000000 --- a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/invocation_exception_mixin.rb +++ /dev/null @@ -1,17 +0,0 @@ -# frozen_string_literal: true -module Rake - module InvocationExceptionMixin - # Return the invocation chain (list of Rake tasks) that were in - # effect when this exception was detected by rake. May be null if - # no tasks were active. - def chain - @rake_invocation_chain ||= nil - end - - # Set the invocation chain in effect when this exception was - # detected. - def chain=(value) - @rake_invocation_chain = value - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/late_time.rb b/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/late_time.rb deleted file mode 100644 index 8fe02494..00000000 --- a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/late_time.rb +++ /dev/null @@ -1,18 +0,0 @@ -# frozen_string_literal: true -module Rake - # LateTime is a fake timestamp that occurs _after_ any other time value. - class LateTime - include Comparable - include Singleton - - def <=>(other) - 1 - end - - def to_s - "" - end - end - - LATE = LateTime.instance -end diff --git a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/linked_list.rb b/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/linked_list.rb deleted file mode 100644 index 11fa46f0..00000000 --- a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/linked_list.rb +++ /dev/null @@ -1,112 +0,0 @@ -# frozen_string_literal: true -module Rake - - # Polylithic linked list structure used to implement several data - # structures in Rake. - class LinkedList - include Enumerable - attr_reader :head, :tail - - # Polymorphically add a new element to the head of a list. The - # type of head node will be the same list type as the tail. - def conj(item) - self.class.cons(item, self) - end - - # Is the list empty? - # .make guards against a list being empty making any instantiated LinkedList - # object not empty by default - # You should consider overriding this method if you implement your own .make method - def empty? - false - end - - # Lists are structurally equivalent. - def ==(other) - current = self - while !current.empty? && !other.empty? - return false if current.head != other.head - current = current.tail - other = other.tail - end - current.empty? && other.empty? - end - - # Convert to string: LL(item, item...) - def to_s - items = map(&:to_s).join(", ") - "LL(#{items})" - end - - # Same as +to_s+, but with inspected items. - def inspect - items = map(&:inspect).join(", ") - "LL(#{items})" - end - - # For each item in the list. - def each - current = self - while !current.empty? - yield(current.head) - current = current.tail - end - self - end - - # Make a list out of the given arguments. This method is - # polymorphic - def self.make(*args) - # return an EmptyLinkedList if there are no arguments - return empty if !args || args.empty? - - # build a LinkedList by starting at the tail and iterating - # through each argument - # inject takes an EmptyLinkedList to start - args.reverse.inject(empty) do |list, item| - list = cons(item, list) - list # return the newly created list for each item in the block - end - end - - # Cons a new head onto the tail list. - def self.cons(head, tail) - new(head, tail) - end - - # The standard empty list class for the given LinkedList class. - def self.empty - self::EMPTY - end - - protected - - def initialize(head, tail=EMPTY) - @head = head - @tail = tail - end - - # Represent an empty list, using the Null Object Pattern. - # - # When inheriting from the LinkedList class, you should implement - # a type specific Empty class as well. Make sure you set the class - # instance variable @parent to the associated list class (this - # allows conj, cons and make to work polymorphically). - class EmptyLinkedList < LinkedList - @parent = LinkedList - - def initialize - end - - def empty? - true - end - - def self.cons(head, tail) - @parent.cons(head, tail) - end - end - - EMPTY = EmptyLinkedList.new - end -end diff --git a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/loaders/makefile.rb b/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/loaders/makefile.rb deleted file mode 100644 index 46f4beaa..00000000 --- a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/loaders/makefile.rb +++ /dev/null @@ -1,54 +0,0 @@ -# frozen_string_literal: true -module Rake - - # Makefile loader to be used with the import file loader. Use this to - # import dependencies from make dependency tools: - # - # require 'rake/loaders/makefile' - # - # file ".depends.mf" => [SRC_LIST] do |t| - # sh "makedepend -f- -- #{CFLAGS} -- #{t.prerequisites} > #{t.name}" - # end - # - # import ".depends.mf" - # - # See {Importing Dependencies}[link:doc/rakefile_rdoc.html#label-Importing+Dependencies] - # for further details. - - class MakefileLoader - include Rake::DSL - - SPACE_MARK = "\0" # :nodoc: - - # Load the makefile dependencies in +fn+. - def load(fn) # :nodoc: - lines = File.read fn - lines.gsub!(/\\ /, SPACE_MARK) - lines.gsub!(/#[^\n]*\n/m, "") - lines.gsub!(/\\\n/, " ") - lines.each_line do |line| - process_line(line) - end - end - - private - - # Process one logical line of makefile data. - def process_line(line) # :nodoc: - file_tasks, args = line.split(":", 2) - return if args.nil? - dependents = args.split.map { |d| respace(d) } - file_tasks.scan(/\S+/) do |file_task| - file_task = respace(file_task) - file file_task => dependents - end - end - - def respace(str) # :nodoc: - str.tr SPACE_MARK, " " - end - end - - # Install the handler - Rake.application.add_loader("mf", MakefileLoader.new) -end diff --git a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/multi_task.rb b/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/multi_task.rb deleted file mode 100644 index 3ae363cb..00000000 --- a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/multi_task.rb +++ /dev/null @@ -1,14 +0,0 @@ -# frozen_string_literal: true -module Rake - - # Same as a regular task, but the immediate prerequisites are done in - # parallel using Ruby threads. - # - class MultiTask < Task - private - - def invoke_prerequisites(task_args, invocation_chain) # :nodoc: - invoke_prerequisites_concurrently(task_args, invocation_chain) - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/name_space.rb b/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/name_space.rb deleted file mode 100644 index 32f8139f..00000000 --- a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/name_space.rb +++ /dev/null @@ -1,38 +0,0 @@ -# frozen_string_literal: true -## -# The NameSpace class will lookup task names in the scope defined by a -# +namespace+ command. - -class Rake::NameSpace - - ## - # Create a namespace lookup object using the given task manager - # and the list of scopes. - - def initialize(task_manager, scope_list) - @task_manager = task_manager - @scope = scope_list.dup - end - - ## - # Lookup a task named +name+ in the namespace. - - def [](name) - @task_manager.lookup(name, @scope) - end - - ## - # The scope of the namespace (a LinkedList) - - def scope - @scope.dup - end - - ## - # Return the list of tasks defined in this and nested namespaces. - - def tasks - @task_manager.tasks_in_scope(@scope) - end - -end diff --git a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/packagetask.rb b/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/packagetask.rb deleted file mode 100644 index 1b014d1c..00000000 --- a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/packagetask.rb +++ /dev/null @@ -1,222 +0,0 @@ -# frozen_string_literal: true -# Define a package task library to aid in the definition of -# redistributable package files. - -require "rake" -require "rake/tasklib" - -module Rake - - # Create a packaging task that will package the project into - # distributable files (e.g zip archive or tar files). - # - # The PackageTask will create the following targets: - # - # +:package+ :: - # Create all the requested package files. - # - # +:clobber_package+ :: - # Delete all the package files. This target is automatically - # added to the main clobber target. - # - # +:repackage+ :: - # Rebuild the package files from scratch, even if they are not out - # of date. - # - # "package_dir/name-version.tgz" :: - # Create a gzipped tar package (if need_tar is true). - # - # "package_dir/name-version.tar.gz" :: - # Create a gzipped tar package (if need_tar_gz is true). - # - # "package_dir/name-version.tar.bz2" :: - # Create a bzip2'd tar package (if need_tar_bz2 is true). - # - # "package_dir/name-version.zip" :: - # Create a zip package archive (if need_zip is true). - # - # Example: - # - # Rake::PackageTask.new("rake", "1.2.3") do |p| - # p.need_tar = true - # p.package_files.include("lib/**/*.rb") - # end - # - class PackageTask < TaskLib - # Name of the package (from the GEM Spec). - attr_accessor :name - - # Version of the package (e.g. '1.3.2'). - attr_accessor :version - - # Directory used to store the package files (default is 'pkg'). - attr_accessor :package_dir - - # True if a gzipped tar file (tgz) should be produced (default is - # false). - attr_accessor :need_tar - - # True if a gzipped tar file (tar.gz) should be produced (default - # is false). - attr_accessor :need_tar_gz - - # True if a bzip2'd tar file (tar.bz2) should be produced (default - # is false). - attr_accessor :need_tar_bz2 - - # True if a xz'd tar file (tar.xz) should be produced (default is false) - attr_accessor :need_tar_xz - - # True if a zip file should be produced (default is false) - attr_accessor :need_zip - - # List of files to be included in the package. - attr_accessor :package_files - - # Tar command for gzipped or bzip2ed archives. The default is 'tar'. - attr_accessor :tar_command - - # Zip command for zipped archives. The default is 'zip'. - attr_accessor :zip_command - - # True if parent directory should be omitted (default is false) - attr_accessor :without_parent_dir - - # Create a Package Task with the given name and version. Use +:noversion+ - # as the version to build a package without a version or to provide a - # fully-versioned package name. - - def initialize(name=nil, version=nil) - init(name, version) - yield self if block_given? - define unless name.nil? - end - - # Initialization that bypasses the "yield self" and "define" step. - def init(name, version) - @name = name - @version = version - @package_files = Rake::FileList.new - @package_dir = "pkg" - @need_tar = false - @need_tar_gz = false - @need_tar_bz2 = false - @need_tar_xz = false - @need_zip = false - @tar_command = "tar" - @zip_command = "zip" - @without_parent_dir = false - end - - # Create the tasks defined by this task library. - def define - fail "Version required (or :noversion)" if @version.nil? - @version = nil if :noversion == @version - - desc "Build all the packages" - task :package - - desc "Force a rebuild of the package files" - task repackage: [:clobber_package, :package] - - desc "Remove package products" - task :clobber_package do - rm_r package_dir rescue nil - end - - task clobber: [:clobber_package] - - [ - [need_tar, tgz_file, "z"], - [need_tar_gz, tar_gz_file, "z"], - [need_tar_bz2, tar_bz2_file, "j"], - [need_tar_xz, tar_xz_file, "J"] - ].each do |need, file, flag| - if need - task package: ["#{package_dir}/#{file}"] - file "#{package_dir}/#{file}" => - [package_dir_path] + package_files do - chdir(working_dir) { sh @tar_command, "#{flag}cvf", file, target_dir } - mv "#{package_dir_path}/#{target_dir}", package_dir if without_parent_dir - end - end - end - - if need_zip - task package: ["#{package_dir}/#{zip_file}"] - file "#{package_dir}/#{zip_file}" => - [package_dir_path] + package_files do - chdir(working_dir) { sh @zip_command, "-r", zip_file, target_dir } - mv "#{package_dir_path}/#{zip_file}", package_dir if without_parent_dir - end - end - - directory package_dir_path => @package_files do - @package_files.each do |fn| - f = File.join(package_dir_path, fn) - fdir = File.dirname(f) - mkdir_p(fdir) unless File.exist?(fdir) - if File.directory?(fn) - mkdir_p(f) - else - rm_f f - safe_ln(fn, f) - end - end - end - self - end - - # The name of this package - - def package_name - @version ? "#{@name}-#{@version}" : @name - end - - # The directory this package will be built in - - def package_dir_path - "#{package_dir}/#{package_name}" - end - - # The package name with .tgz added - - def tgz_file - "#{package_name}.tgz" - end - - # The package name with .tar.gz added - - def tar_gz_file - "#{package_name}.tar.gz" - end - - # The package name with .tar.bz2 added - - def tar_bz2_file - "#{package_name}.tar.bz2" - end - - # The package name with .tar.xz added - - def tar_xz_file - "#{package_name}.tar.xz" - end - - # The package name with .zip added - - def zip_file - "#{package_name}.zip" - end - - def working_dir - without_parent_dir ? package_dir_path : package_dir - end - - # target directory relative to working_dir - def target_dir - without_parent_dir ? "." : package_name - end - end - -end diff --git a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/phony.rb b/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/phony.rb deleted file mode 100644 index 8caa5de1..00000000 --- a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/phony.rb +++ /dev/null @@ -1,16 +0,0 @@ -# frozen_string_literal: true -# Defines a :phony task that you can use as a dependency. This allows -# file-based tasks to use non-file-based tasks as prerequisites -# without forcing them to rebuild. -# -# See FileTask#out_of_date? and Task#timestamp for more info. - -require "rake" - -task :phony - -Rake::Task[:phony].tap do |task| - def task.timestamp # :nodoc: - Time.at 0 - end -end diff --git a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/private_reader.rb b/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/private_reader.rb deleted file mode 100644 index 2815ce64..00000000 --- a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/private_reader.rb +++ /dev/null @@ -1,21 +0,0 @@ -# frozen_string_literal: true -module Rake - - # Include PrivateReader to use +private_reader+. - module PrivateReader # :nodoc: all - - def self.included(base) - base.extend(ClassMethods) - end - - module ClassMethods - - # Declare a list of private accessors - def private_reader(*names) - attr_reader(*names) - private(*names) - end - end - - end -end diff --git a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/promise.rb b/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/promise.rb deleted file mode 100644 index f45af4f3..00000000 --- a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/promise.rb +++ /dev/null @@ -1,100 +0,0 @@ -# frozen_string_literal: true -module Rake - - # A Promise object represents a promise to do work (a chore) in the - # future. The promise is created with a block and a list of - # arguments for the block. Calling value will return the value of - # the promised chore. - # - # Used by ThreadPool. - # - class Promise # :nodoc: all - NOT_SET = Object.new.freeze # :nodoc: - - attr_accessor :recorder - - # Create a promise to do the chore specified by the block. - def initialize(args, &block) - @mutex = Mutex.new - @result = NOT_SET - @error = NOT_SET - @args = args - @block = block - end - - # Return the value of this promise. - # - # If the promised chore is not yet complete, then do the work - # synchronously. We will wait. - def value - unless complete? - stat :sleeping_on, item_id: object_id - @mutex.synchronize do - stat :has_lock_on, item_id: object_id - chore - stat :releasing_lock_on, item_id: object_id - end - end - error? ? raise(@error) : @result - end - - # If no one else is working this promise, go ahead and do the chore. - def work - stat :attempting_lock_on, item_id: object_id - if @mutex.try_lock - stat :has_lock_on, item_id: object_id - chore - stat :releasing_lock_on, item_id: object_id - @mutex.unlock - else - stat :bailed_on, item_id: object_id - end - end - - private - - # Perform the chore promised - def chore - if complete? - stat :found_completed, item_id: object_id - return - end - stat :will_execute, item_id: object_id - begin - @result = @block.call(*@args) - rescue Exception => e - @error = e - end - stat :did_execute, item_id: object_id - discard - end - - # Do we have a result for the promise - def result? - !@result.equal?(NOT_SET) - end - - # Did the promise throw an error - def error? - !@error.equal?(NOT_SET) - end - - # Are we done with the promise - def complete? - result? || error? - end - - # free up these items for the GC - def discard - @args = nil - @block = nil - end - - # Record execution statistics if there is a recorder - def stat(*args) - @recorder.call(*args) if @recorder - end - - end - -end diff --git a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/pseudo_status.rb b/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/pseudo_status.rb deleted file mode 100644 index 8b3c9894..00000000 --- a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/pseudo_status.rb +++ /dev/null @@ -1,30 +0,0 @@ -# frozen_string_literal: true -module Rake - - ## - # Exit status class for times the system just gives us a nil. - class PseudoStatus # :nodoc: all - attr_reader :exitstatus - - def initialize(code=0) - @exitstatus = code - end - - def to_i - @exitstatus << 8 - end - - def >>(n) - to_i >> n - end - - def stopped? - false - end - - def exited? - true - end - end - -end diff --git a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/rake_module.rb b/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/rake_module.rb deleted file mode 100644 index 03c29562..00000000 --- a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/rake_module.rb +++ /dev/null @@ -1,67 +0,0 @@ -# frozen_string_literal: true -require "rake/application" - -module Rake - - class << self - # Current Rake Application - def application - @application ||= Rake::Application.new - end - - # Set the current Rake application object. - def application=(app) - @application = app - end - - def suggested_thread_count # :nodoc: - @cpu_count ||= Rake::CpuCounter.count - @cpu_count + 4 - end - - # Return the original directory where the Rake application was started. - def original_dir - application.original_dir - end - - # Load a rakefile. - def load_rakefile(path) - load(path) - end - - # Add files to the rakelib list - def add_rakelib(*files) - application.options.rakelib ||= [] - application.options.rakelib.concat(files) - end - - # Make +block_application+ the default rake application inside a block so - # you can load rakefiles into a different application. - # - # This is useful when you want to run rake tasks inside a library without - # running rake in a sub-shell. - # - # Example: - # - # Dir.chdir 'other/directory' - # - # other_rake = Rake.with_application do |rake| - # rake.load_rakefile - # end - # - # puts other_rake.tasks - - def with_application(block_application = Rake::Application.new) - orig_application = Rake.application - - Rake.application = block_application - - yield block_application - - block_application - ensure - Rake.application = orig_application - end - end - -end diff --git a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/rake_test_loader.rb b/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/rake_test_loader.rb deleted file mode 100644 index 3ecee5d8..00000000 --- a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/rake_test_loader.rb +++ /dev/null @@ -1,27 +0,0 @@ -# frozen_string_literal: true - -require "rake/file_list" - -# Load the test files from the command line. -argv = ARGV.select do |argument| - case argument - when /^-/ then - argument - when /\*/ then - Rake::FileList[argument].to_a.each do |file| - require File.expand_path file - end - - false - else - path = File.expand_path argument - - abort "\nFile does not exist: #{path}\n\n" unless File.exist?(path) - - require path - - false - end -end - -ARGV.replace argv diff --git a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/rule_recursion_overflow_error.rb b/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/rule_recursion_overflow_error.rb deleted file mode 100644 index a51e7748..00000000 --- a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/rule_recursion_overflow_error.rb +++ /dev/null @@ -1,20 +0,0 @@ -# frozen_string_literal: true -module Rake - - # Error indicating a recursion overflow error in task selection. - class RuleRecursionOverflowError < StandardError - def initialize(*args) - super - @targets = [] - end - - def add_target(target) - @targets << target - end - - def message - super + ": [" + @targets.reverse.join(" => ") + "]" - end - end - -end diff --git a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/scope.rb b/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/scope.rb deleted file mode 100644 index fc1eb6c3..00000000 --- a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/scope.rb +++ /dev/null @@ -1,43 +0,0 @@ -# frozen_string_literal: true -module Rake - class Scope < LinkedList # :nodoc: all - - # Path for the scope. - def path - map(&:to_s).reverse.join(":") - end - - # Path for the scope + the named path. - def path_with_task_name(task_name) - "#{path}:#{task_name}" - end - - # Trim +n+ innermost scope levels from the scope. In no case will - # this trim beyond the toplevel scope. - def trim(n) - result = self - while n > 0 && !result.empty? - result = result.tail - n -= 1 - end - result - end - - # Scope lists always end with an EmptyScope object. See Null - # Object Pattern) - class EmptyScope < EmptyLinkedList - @parent = Scope - - def path - "" - end - - def path_with_task_name(task_name) - task_name - end - end - - # Singleton null object for an empty scope. - EMPTY = EmptyScope.new - end -end diff --git a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/task.rb b/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/task.rb deleted file mode 100644 index a8ed24dd..00000000 --- a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/task.rb +++ /dev/null @@ -1,434 +0,0 @@ -# frozen_string_literal: true -require "rake/invocation_exception_mixin" - -module Rake - - ## - # A Task is the basic unit of work in a Rakefile. Tasks have associated - # actions (possibly more than one) and a list of prerequisites. When - # invoked, a task will first ensure that all of its prerequisites have an - # opportunity to run and then it will execute its own actions. - # - # Tasks are not usually created directly using the new method, but rather - # use the +file+ and +task+ convenience methods. - # - class Task - # List of prerequisites for a task. - attr_reader :prerequisites - alias prereqs prerequisites - - # List of order only prerequisites for a task. - attr_reader :order_only_prerequisites - - # List of actions attached to a task. - attr_reader :actions - - # Application owning this task. - attr_accessor :application - - # Array of nested namespaces names used for task lookup by this task. - attr_reader :scope - - # File/Line locations of each of the task definitions for this - # task (only valid if the task was defined with the detect - # location option set). - attr_reader :locations - - # Has this task already been invoked? Already invoked tasks - # will be skipped unless you reenable them. - attr_reader :already_invoked - - # Return task name - def to_s - name - end - - def inspect # :nodoc: - "<#{self.class} #{name} => [#{prerequisites.join(', ')}]>" - end - - # List of sources for task. - attr_writer :sources - def sources - if defined?(@sources) - @sources - else - prerequisites - end - end - - # List of prerequisite tasks - def prerequisite_tasks - (prerequisites + order_only_prerequisites).map { |pre| lookup_prerequisite(pre) } - end - - def lookup_prerequisite(prerequisite_name) # :nodoc: - scoped_prerequisite_task = application[prerequisite_name, @scope] - if scoped_prerequisite_task == self - unscoped_prerequisite_task = application[prerequisite_name] - end - unscoped_prerequisite_task || scoped_prerequisite_task - end - private :lookup_prerequisite - - # List of all unique prerequisite tasks including prerequisite tasks' - # prerequisites. - # Includes self when cyclic dependencies are found. - def all_prerequisite_tasks - seen = {} - collect_prerequisites(seen) - seen.values - end - - def collect_prerequisites(seen) # :nodoc: - prerequisite_tasks.each do |pre| - next if seen[pre.name] - seen[pre.name] = pre - pre.collect_prerequisites(seen) - end - end - protected :collect_prerequisites - - # First source from a rule (nil if no sources) - def source - sources.first - end - - # Create a task named +task_name+ with no actions or prerequisites. Use - # +enhance+ to add actions and prerequisites. - def initialize(task_name, app) - @name = task_name.to_s - @prerequisites = [] - @actions = [] - @already_invoked = false - @comments = [] - @lock = Monitor.new - @application = app - @scope = app.current_scope - @arg_names = nil - @locations = [] - @invocation_exception = nil - @order_only_prerequisites = [] - end - - # Enhance a task with prerequisites or actions. Returns self. - def enhance(deps=nil, &block) - @prerequisites |= deps if deps - @actions << block if block_given? - self - end - - # Name of the task, including any namespace qualifiers. - def name - @name.to_s - end - - # Name of task with argument list description. - def name_with_args # :nodoc: - if arg_description - "#{name}#{arg_description}" - else - name - end - end - - # Argument description (nil if none). - def arg_description # :nodoc: - @arg_names ? "[#{arg_names.join(',')}]" : nil - end - - # Name of arguments for this task. - def arg_names - @arg_names || [] - end - - # Reenable the task, allowing its tasks to be executed if the task - # is invoked again. - def reenable - @already_invoked = false - @invocation_exception = nil - end - - # Clear the existing prerequisites, actions, comments, and arguments of a rake task. - def clear - clear_prerequisites - clear_actions - clear_comments - clear_args - self - end - - # Clear the existing prerequisites of a rake task. - def clear_prerequisites - prerequisites.clear - self - end - - # Clear the existing actions on a rake task. - def clear_actions - actions.clear - self - end - - # Clear the existing comments on a rake task. - def clear_comments - @comments = [] - self - end - - # Clear the existing arguments on a rake task. - def clear_args - @arg_names = nil - self - end - - # Invoke the task if it is needed. Prerequisites are invoked first. - def invoke(*args) - task_args = TaskArguments.new(arg_names, args) - invoke_with_call_chain(task_args, InvocationChain::EMPTY) - end - - # Same as invoke, but explicitly pass a call chain to detect - # circular dependencies. - # - # If multiple tasks depend on this - # one in parallel, they will all fail if the first execution of - # this task fails. - def invoke_with_call_chain(task_args, invocation_chain) - new_chain = Rake::InvocationChain.append(self, invocation_chain) - @lock.synchronize do - begin - if application.options.trace - application.trace "** Invoke #{name} #{format_trace_flags}" - end - - if @already_invoked - if @invocation_exception - if application.options.trace - application.trace "** Previous invocation of #{name} failed #{format_trace_flags}" - end - raise @invocation_exception - else - return - end - end - - @already_invoked = true - - invoke_prerequisites(task_args, new_chain) - execute(task_args) if needed? - rescue Exception => ex - add_chain_to(ex, new_chain) - @invocation_exception = ex - raise ex - end - end - end - protected :invoke_with_call_chain - - def add_chain_to(exception, new_chain) # :nodoc: - exception.extend(InvocationExceptionMixin) unless - exception.respond_to?(:chain) - exception.chain = new_chain if exception.chain.nil? - end - private :add_chain_to - - # Invoke all the prerequisites of a task. - def invoke_prerequisites(task_args, invocation_chain) # :nodoc: - if application.options.always_multitask - invoke_prerequisites_concurrently(task_args, invocation_chain) - else - prerequisite_tasks.each { |p| - prereq_args = task_args.new_scope(p.arg_names) - p.invoke_with_call_chain(prereq_args, invocation_chain) - } - end - end - - # Invoke all the prerequisites of a task in parallel. - def invoke_prerequisites_concurrently(task_args, invocation_chain)# :nodoc: - futures = prerequisite_tasks.map do |p| - prereq_args = task_args.new_scope(p.arg_names) - application.thread_pool.future(p) do |r| - r.invoke_with_call_chain(prereq_args, invocation_chain) - end - end - # Iterate in reverse to improve performance related to thread waiting and switching - futures.reverse_each(&:value) - end - - # Format the trace flags for display. - def format_trace_flags - flags = [] - flags << "first_time" unless @already_invoked - flags << "not_needed" unless needed? - flags.empty? ? "" : "(" + flags.join(", ") + ")" - end - private :format_trace_flags - - # Execute the actions associated with this task. - def execute(args=nil) - args ||= EMPTY_TASK_ARGS - if application.options.dryrun - application.trace "** Execute (dry run) #{name}" - return - end - application.trace "** Execute #{name}" if application.options.trace - application.enhance_with_matching_rule(name) if @actions.empty? - if opts = Hash.try_convert(args) and !opts.empty? - @actions.each { |act| act.call(self, args, **opts) } - else - @actions.each { |act| act.call(self, args) } - end - end - - # Is this task needed? - def needed? - true - end - - # Timestamp for this task. Basic tasks return the current time for their - # time stamp. Other tasks can be more sophisticated. - def timestamp - Time.now - end - - # Add a description to the task. The description can consist of an option - # argument list (enclosed brackets) and an optional comment. - def add_description(description) - return unless description - comment = description.strip - add_comment(comment) if comment && !comment.empty? - end - - def comment=(comment) # :nodoc: - add_comment(comment) - end - - def add_comment(comment) # :nodoc: - return if comment.nil? - @comments << comment unless @comments.include?(comment) - end - private :add_comment - - # Full collection of comments. Multiple comments are separated by - # newlines. - def full_comment - transform_comments("\n") - end - - # First line (or sentence) of all comments. Multiple comments are - # separated by a "/". - def comment - transform_comments(" / ") { |c| first_sentence(c) } - end - - # Transform the list of comments as specified by the block and - # join with the separator. - def transform_comments(separator, &block) - if @comments.empty? - nil - else - block ||= lambda { |c| c } - @comments.map(&block).join(separator) - end - end - private :transform_comments - - # Get the first sentence in a string. The sentence is terminated - # by the first period, exclamation mark, or the end of the line. - # Decimal points do not count as periods. - def first_sentence(string) - string.split(/(?<=\w)(\.|!)[ \t]|(\.$|!)|\n/).first - end - private :first_sentence - - # Set the names of the arguments for this task. +args+ should be - # an array of symbols, one for each argument name. - def set_arg_names(args) - @arg_names = args.map(&:to_sym) - end - - # Return a string describing the internal state of a task. Useful for - # debugging. - def investigation - result = "------------------------------\n".dup - result << "Investigating #{name}\n" - result << "class: #{self.class}\n" - result << "task needed: #{needed?}\n" - result << "timestamp: #{timestamp}\n" - result << "pre-requisites: \n" - prereqs = prerequisite_tasks - prereqs.sort! { |a, b| a.timestamp <=> b.timestamp } - prereqs.each do |p| - result << "--#{p.name} (#{p.timestamp})\n" - end - latest_prereq = prerequisite_tasks.map(&:timestamp).max - result << "latest-prerequisite time: #{latest_prereq}\n" - result << "................................\n\n" - return result - end - - # Format dependencies parameter to pass to task. - def self.format_deps(deps) - deps = [deps] unless deps.respond_to?(:to_ary) - deps.map { |d| Rake.from_pathname(d).to_s } - end - - # Add order only dependencies. - def |(deps) - @order_only_prerequisites |= Task.format_deps(deps) - @prerequisites - self - end - - # ---------------------------------------------------------------- - # Rake Module Methods - # - class << self - - # Clear the task list. This cause rake to immediately forget all the - # tasks that have been assigned. (Normally used in the unit tests.) - def clear - Rake.application.clear - end - - # List of all defined tasks. - def tasks - Rake.application.tasks - end - - # Return a task with the given name. If the task is not currently - # known, try to synthesize one from the defined rules. If no rules are - # found, but an existing file matches the task name, assume it is a file - # task with no dependencies or actions. - def [](task_name) - Rake.application[task_name] - end - - # TRUE if the task name is already defined. - def task_defined?(task_name) - Rake.application.lookup(task_name) != nil - end - - # Define a task given +args+ and an option block. If a rule with the - # given name already exists, the prerequisites and actions are added to - # the existing task. Returns the defined task. - def define_task(*args, &block) - Rake.application.define_task(self, *args, &block) - end - - # Define a rule for synthesizing tasks. - def create_rule(*args, &block) - Rake.application.create_rule(*args, &block) - end - - # Apply the scope to the task name according to the rules for - # this kind of task. Generic tasks will accept the scope as - # part of the name. - def scope_name(scope, task_name) - scope.path_with_task_name(task_name) - end - - end # class << Rake::Task - end # class Rake::Task -end diff --git a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/task_argument_error.rb b/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/task_argument_error.rb deleted file mode 100644 index ef20076c..00000000 --- a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/task_argument_error.rb +++ /dev/null @@ -1,8 +0,0 @@ -# frozen_string_literal: true -module Rake - - # Error indicating an ill-formed task declaration. - class TaskArgumentError < ArgumentError - end - -end diff --git a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/task_arguments.rb b/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/task_arguments.rb deleted file mode 100644 index 0d3001af..00000000 --- a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/task_arguments.rb +++ /dev/null @@ -1,109 +0,0 @@ -# frozen_string_literal: true -module Rake - - ## - # TaskArguments manage the arguments passed to a task. - # - class TaskArguments - include Enumerable - - # Argument names - attr_reader :names - - # Create a TaskArgument object with a list of argument +names+ and a set - # of associated +values+. +parent+ is the parent argument object. - def initialize(names, values, parent=nil) - @names = names - @parent = parent - @hash = {} - @values = values - names.each_with_index { |name, i| - next if values[i].nil? || values[i] == "" - @hash[name.to_sym] = values[i] - } - end - - # Retrieve the complete array of sequential values - def to_a - @values.dup - end - - # Retrieve the list of values not associated with named arguments - def extras - @values[@names.length..-1] || [] - end - - # Create a new argument scope using the prerequisite argument - # names. - def new_scope(names) - values = names.map { |n| self[n] } - self.class.new(names, values + extras, self) - end - - # Find an argument value by name or index. - def [](index) - lookup(index.to_sym) - end - - # Specify a hash of default values for task arguments. Use the - # defaults only if there is no specific value for the given - # argument. - def with_defaults(defaults) - @hash = defaults.merge(@hash) - end - - # Enumerates the arguments and their values - def each(&block) - @hash.each(&block) - end - - # Extracts the argument values at +keys+ - def values_at(*keys) - keys.map { |k| lookup(k) } - end - - # Returns the value of the given argument via method_missing - def method_missing(sym, *args) - lookup(sym.to_sym) - end - - # Returns a Hash of arguments and their values - def to_hash - @hash.dup - end - - def to_s # :nodoc: - inspect - end - - def inspect # :nodoc: - inspection = @hash.map do |k,v| - "#{k.to_s}: #{v.to_s}" - end.join(", ") - - "#<#{self.class} #{inspection}>" - end - - # Returns true if +key+ is one of the arguments - def has_key?(key) - @hash.has_key?(key) - end - alias key? has_key? - - def fetch(*args, &block) - @hash.fetch(*args, &block) - end - - protected - - def lookup(name) # :nodoc: - if @hash.has_key?(name) - @hash[name] - elsif @parent - @parent.lookup(name) - end - end - end - - EMPTY_TASK_ARGS = TaskArguments.new([], []) # :nodoc: -end diff --git a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/task_manager.rb b/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/task_manager.rb deleted file mode 100644 index 0db5c241..00000000 --- a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/task_manager.rb +++ /dev/null @@ -1,331 +0,0 @@ -# frozen_string_literal: true -module Rake - - # The TaskManager module is a mixin for managing tasks. - module TaskManager - # Track the last comment made in the Rakefile. - attr_accessor :last_description - - def initialize # :nodoc: - super - @tasks = Hash.new - @rules = Array.new - @scope = Scope.make - @last_description = nil - end - - def create_rule(*args, &block) # :nodoc: - pattern, args, deps, order_only = resolve_args(args) - pattern = Regexp.new(Regexp.quote(pattern) + "$") if String === pattern - @rules << [pattern, args, deps, order_only, block] - end - - def define_task(task_class, *args, &block) # :nodoc: - task_name, arg_names, deps, order_only = resolve_args(args) - - original_scope = @scope - if String === task_name and - not task_class.ancestors.include? Rake::FileTask - task_name, *definition_scope = *(task_name.split(":").reverse) - @scope = Scope.make(*(definition_scope + @scope.to_a)) - end - - task_name = task_class.scope_name(@scope, task_name) - task = intern(task_class, task_name) - task.set_arg_names(arg_names) unless arg_names.empty? - if Rake::TaskManager.record_task_metadata - add_location(task) - task.add_description(get_description(task)) - end - task.enhance(Task.format_deps(deps), &block) - task | order_only unless order_only.nil? - task - ensure - @scope = original_scope - end - - # Lookup a task. Return an existing task if found, otherwise - # create a task of the current type. - def intern(task_class, task_name) - @tasks[task_name.to_s] ||= task_class.new(task_name, self) - end - - # Find a matching task for +task_name+. - def [](task_name, scopes=nil) - task_name = task_name.to_s - self.lookup(task_name, scopes) or - enhance_with_matching_rule(task_name) or - synthesize_file_task(task_name) or - fail generate_message_for_undefined_task(task_name) - end - - def generate_message_for_undefined_task(task_name) - message = "Don't know how to build task '#{task_name}' "\ - "(See the list of available tasks with `#{Rake.application.name} --tasks`)" - message + generate_did_you_mean_suggestions(task_name) - end - - def generate_did_you_mean_suggestions(task_name) - return "" unless defined?(::DidYouMean::SpellChecker) - - suggestions = ::DidYouMean::SpellChecker.new(dictionary: @tasks.keys).correct(task_name.to_s) - if ::DidYouMean.respond_to?(:formatter)# did_you_mean v1.2.0 or later - ::DidYouMean.formatter.message_for(suggestions) - elsif defined?(::DidYouMean::Formatter) # before did_you_mean v1.2.0 - ::DidYouMean::Formatter.new(suggestions).to_s - else - "" - end - end - - def synthesize_file_task(task_name) # :nodoc: - return nil unless File.exist?(task_name) - define_task(Rake::FileTask, task_name) - end - - # Resolve the arguments for a task/rule. Returns a tuple of - # [task_name, arg_name_list, prerequisites, order_only_prerequisites]. - def resolve_args(args) - if args.last.is_a?(Hash) - deps = args.pop - resolve_args_with_dependencies(args, deps) - else - resolve_args_without_dependencies(args) - end - end - - # Resolve task arguments for a task or rule when there are no - # dependencies declared. - # - # The patterns recognized by this argument resolving function are: - # - # task :t - # task :t, [:a] - # - def resolve_args_without_dependencies(args) - task_name = args.shift - if args.size == 1 && args.first.respond_to?(:to_ary) - arg_names = args.first.to_ary - else - arg_names = args - end - [task_name, arg_names, [], nil] - end - private :resolve_args_without_dependencies - - # Resolve task arguments for a task or rule when there are - # dependencies declared. - # - # The patterns recognized by this argument resolving function are: - # - # task :t, order_only: [:e] - # task :t => [:d] - # task :t => [:d], order_only: [:e] - # task :t, [a] => [:d] - # task :t, [a] => [:d], order_only: [:e] - # - def resolve_args_with_dependencies(args, hash) # :nodoc: - fail "Task Argument Error" if - hash.size != 1 && - (hash.size != 2 || !hash.key?(:order_only)) - order_only = hash.delete(:order_only) - key, value = hash.map { |k, v| [k, v] }.first - if args.empty? - task_name = key - arg_names = [] - deps = value || [] - else - task_name = args.shift - arg_names = key || args.shift|| [] - deps = value || [] - end - deps = [deps] unless deps.respond_to?(:to_ary) - [task_name, arg_names, deps, order_only] - end - private :resolve_args_with_dependencies - - # If a rule can be found that matches the task name, enhance the - # task with the prerequisites and actions from the rule. Set the - # source attribute of the task appropriately for the rule. Return - # the enhanced task or nil of no rule was found. - def enhance_with_matching_rule(task_name, level=0) - fail Rake::RuleRecursionOverflowError, - "Rule Recursion Too Deep" if level >= 16 - @rules.each do |pattern, args, extensions, order_only, block| - if pattern && pattern.match(task_name) - task = attempt_rule(task_name, pattern, args, extensions, block, level) - task | order_only unless order_only.nil? - return task if task - end - end - nil - rescue Rake::RuleRecursionOverflowError => ex - ex.add_target(task_name) - fail ex - end - - # List of all defined tasks in this application. - def tasks - @tasks.values.sort_by { |t| t.name } - end - - # List of all the tasks defined in the given scope (and its - # sub-scopes). - def tasks_in_scope(scope) - prefix = scope.path - tasks.select { |t| - /^#{prefix}:/ =~ t.name - } - end - - # Clear all tasks in this application. - def clear - @tasks.clear - @rules.clear - end - - # Lookup a task, using scope and the scope hints in the task name. - # This method performs straight lookups without trying to - # synthesize file tasks or rules. Special scope names (e.g. '^') - # are recognized. If no scope argument is supplied, use the - # current scope. Return nil if the task cannot be found. - def lookup(task_name, initial_scope=nil) - initial_scope ||= @scope - task_name = task_name.to_s - if task_name =~ /^rake:/ - scopes = Scope.make - task_name = task_name.sub(/^rake:/, "") - elsif task_name =~ /^(\^+)/ - scopes = initial_scope.trim($1.size) - task_name = task_name.sub(/^(\^+)/, "") - else - scopes = initial_scope - end - lookup_in_scope(task_name, scopes) - end - - # Lookup the task name - def lookup_in_scope(name, scope) - loop do - tn = scope.path_with_task_name(name) - task = @tasks[tn] - return task if task - break if scope.empty? - scope = scope.tail - end - nil - end - private :lookup_in_scope - - # Return the list of scope names currently active in the task - # manager. - def current_scope - @scope - end - - # Evaluate the block in a nested namespace named +name+. Create - # an anonymous namespace if +name+ is nil. - def in_namespace(name) - name ||= generate_name - @scope = Scope.new(name, @scope) - ns = NameSpace.new(self, @scope) - yield(ns) - ns - ensure - @scope = @scope.tail - end - - private - - # Add a location to the locations field of the given task. - def add_location(task) - loc = find_location - task.locations << loc if loc - task - end - - # Find the location that called into the dsl layer. - def find_location - locations = caller - i = 0 - while locations[i] - return locations[i + 1] if locations[i] =~ /rake\/dsl_definition.rb/ - i += 1 - end - nil - end - - # Generate an anonymous namespace name. - def generate_name - @seed ||= 0 - @seed += 1 - "_anon_#{@seed}" - end - - def trace_rule(level, message) # :nodoc: - options.trace_output.puts "#{" " * level}#{message}" if - Rake.application.options.trace_rules - end - - # Attempt to create a rule given the list of prerequisites. - def attempt_rule(task_name, task_pattern, args, extensions, block, level) - sources = make_sources(task_name, task_pattern, extensions) - prereqs = sources.map { |source| - trace_rule level, "Attempting Rule #{task_name} => #{source}" - if File.exist?(source) || Rake::Task.task_defined?(source) - trace_rule level, "(#{task_name} => #{source} ... EXIST)" - source - elsif parent = enhance_with_matching_rule(source, level + 1) - trace_rule level, "(#{task_name} => #{source} ... ENHANCE)" - parent.name - else - trace_rule level, "(#{task_name} => #{source} ... FAIL)" - return nil - end - } - task = FileTask.define_task(task_name, { args => prereqs }, &block) - task.sources = prereqs - task - end - - # Make a list of sources from the list of file name extensions / - # translation procs. - def make_sources(task_name, task_pattern, extensions) - result = extensions.map { |ext| - case ext - when /%/ - task_name.pathmap(ext) - when %r{/} - ext - when /^\./ - source = task_name.sub(task_pattern, ext) - source == ext ? task_name.ext(ext) : source - when String, Symbol - ext.to_s - when Proc, Method - if ext.arity == 1 - ext.call(task_name) - else - ext.call - end - else - fail "Don't know how to handle rule dependent: #{ext.inspect}" - end - } - result.flatten - end - - # Return the current description, clearing it in the process. - def get_description(task) - desc = @last_description - @last_description = nil - desc - end - - class << self - attr_accessor :record_task_metadata # :nodoc: - TaskManager.record_task_metadata = false - end - end - -end diff --git a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/tasklib.rb b/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/tasklib.rb deleted file mode 100644 index 5354b4f9..00000000 --- a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/tasklib.rb +++ /dev/null @@ -1,12 +0,0 @@ -# frozen_string_literal: true -require "rake" - -module Rake - - # Base class for Task Libraries. - class TaskLib - include Cloneable - include Rake::DSL - end - -end diff --git a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/testtask.rb b/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/testtask.rb deleted file mode 100644 index 56521d23..00000000 --- a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/testtask.rb +++ /dev/null @@ -1,189 +0,0 @@ -# frozen_string_literal: true -require "rake" -require "rake/tasklib" - -module Rake - - # Create a task that runs a set of tests. - # - # Example: - # require "rake/testtask" - # - # Rake::TestTask.new do |t| - # t.libs << "test" - # t.test_files = FileList['test/test*.rb'] - # t.verbose = true - # end - # - # If rake is invoked with a "TEST=filename" command line option, - # then the list of test files will be overridden to include only the - # filename specified on the command line. This provides an easy way - # to run just one test. - # - # If rake is invoked with a "TESTOPTS=options" command line option, - # then the given options are passed to the test process after a - # '--'. This allows Test::Unit options to be passed to the test - # suite. - # - # Examples: - # - # rake test # run tests normally - # rake test TEST=just_one_file.rb # run just one test file. - # rake test TESTOPTS="-v" # run in verbose mode - # rake test TESTOPTS="--runner=fox" # use the fox test runner - # - class TestTask < TaskLib - - # Name of test task. (default is :test) - attr_accessor :name - - # List of directories added to $LOAD_PATH before running the - # tests. (default is 'lib') - attr_accessor :libs - - # True if verbose test output desired. (default is false) - attr_accessor :verbose - - # Test options passed to the test suite. An explicit - # TESTOPTS=opts on the command line will override this. (default - # is NONE) - attr_accessor :options - - # Request that the tests be run with the warning flag set. - # E.g. warning=true implies "ruby -w" used to run the tests. - # (default is true) - attr_accessor :warning - - # Glob pattern to match test files. (default is 'test/test*.rb') - attr_accessor :pattern - - # Style of test loader to use. Options are: - # - # * :rake -- Rake provided test loading script (default). - # * :testrb -- Ruby provided test loading script. - # * :direct -- Load tests using command line loader. - # - attr_accessor :loader - - # Array of command line options to pass to ruby when running test loader. - attr_accessor :ruby_opts - - # Description of the test task. (default is 'Run tests') - attr_accessor :description - - # Task prerequisites. - attr_accessor :deps - - # Explicitly define the list of test files to be included in a - # test. +list+ is expected to be an array of file names (a - # FileList is acceptable). If both +pattern+ and +test_files+ are - # used, then the list of test files is the union of the two. - def test_files=(list) - @test_files = list - end - - # Create a testing task. - def initialize(name=:test) - @name = name - @libs = ["lib"] - @pattern = nil - @options = nil - @test_files = nil - @verbose = false - @warning = true - @loader = :rake - @ruby_opts = [] - @description = "Run tests" + (@name == :test ? "" : " for #{@name}") - @deps = [] - if @name.is_a?(Hash) - @deps = @name.values.first - @name = @name.keys.first - end - yield self if block_given? - @pattern = "test/test*.rb" if @pattern.nil? && @test_files.nil? - define - end - - # Create the tasks defined by this task lib. - def define - desc @description - task @name => Array(deps) do - FileUtilsExt.verbose(@verbose) do - puts "Use TESTOPTS=\"--verbose\" to pass --verbose" \ - ", etc. to runners." if ARGV.include? "--verbose" - args = - "#{ruby_opts_string} #{run_code} " + - "#{file_list_string} #{option_list}" - ruby args do |ok, status| - if !ok && status.respond_to?(:signaled?) && status.signaled? - raise SignalException.new(status.termsig) - elsif !ok - status = "Command failed with status (#{status.exitstatus})" - details = ": [ruby #{args}]" - message = - if Rake.application.options.trace or @verbose - status + details - else - status - end - - fail message - end - end - end - end - self - end - - def option_list # :nodoc: - (ENV["TESTOPTS"] || - ENV["TESTOPT"] || - ENV["TEST_OPTS"] || - ENV["TEST_OPT"] || - @options || - "") - end - - def ruby_opts_string # :nodoc: - opts = @ruby_opts.dup - opts.unshift("-I\"#{lib_path}\"") unless @libs.empty? - opts.unshift("-w") if @warning - opts.join(" ") - end - - def lib_path # :nodoc: - @libs.join(File::PATH_SEPARATOR) - end - - def file_list_string # :nodoc: - file_list.map { |fn| "\"#{fn}\"" }.join(" ") - end - - def file_list # :nodoc: - if ENV["TEST"] - FileList[ENV["TEST"]] - else - result = [] - result += @test_files.to_a if @test_files - result += FileList[@pattern].to_a if @pattern - result - end - end - - def ruby_version # :nodoc: - RUBY_VERSION - end - - def run_code # :nodoc: - case @loader - when :direct - "-e \"ARGV.each{|f| require f}\"" - when :testrb - "-S testrb" - when :rake - "#{__dir__}/rake_test_loader.rb" - end - end - - end -end diff --git a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/thread_history_display.rb b/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/thread_history_display.rb deleted file mode 100644 index 412ea37b..00000000 --- a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/thread_history_display.rb +++ /dev/null @@ -1,49 +0,0 @@ -# frozen_string_literal: true -require "rake/private_reader" - -module Rake - - class ThreadHistoryDisplay # :nodoc: all - include Rake::PrivateReader - - private_reader :stats, :items, :threads - - def initialize(stats) - @stats = stats - @items = { _seq_: 1 } - @threads = { _seq_: "A" } - end - - def show - puts "Job History:" - stats.each do |stat| - stat[:data] ||= {} - rename(stat, :thread, threads) - rename(stat[:data], :item_id, items) - rename(stat[:data], :new_thread, threads) - rename(stat[:data], :deleted_thread, threads) - printf("%8d %2s %-20s %s\n", - (stat[:time] * 1_000_000).round, - stat[:thread], - stat[:event], - stat[:data].map do |k, v| "#{k}:#{v}" end.join(" ")) - end - end - - private - - def rename(hash, key, renames) - if hash && hash[key] - original = hash[key] - value = renames[original] - unless value - value = renames[:_seq_] - renames[:_seq_] = renames[:_seq_].succ - renames[original] = value - end - hash[key] = value - end - end - end - -end diff --git a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/thread_pool.rb b/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/thread_pool.rb deleted file mode 100644 index 76aa3b74..00000000 --- a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/thread_pool.rb +++ /dev/null @@ -1,163 +0,0 @@ -# frozen_string_literal: true - -require "rake/promise" -require "set" - -module Rake - - class ThreadPool # :nodoc: all - - # Creates a ThreadPool object. The +thread_count+ parameter is the size - # of the pool. - def initialize(thread_count) - @max_active_threads = [thread_count, 0].max - @threads = Set.new - @threads_mon = Monitor.new - @queue = Queue.new - @join_cond = @threads_mon.new_cond - - @history_start_time = nil - @history = [] - @history_mon = Monitor.new - @total_threads_in_play = 0 - end - - # Creates a future executed by the +ThreadPool+. - # - # The args are passed to the block when executing (similarly to - # Thread#new) The return value is an object representing - # a future which has been created and added to the queue in the - # pool. Sending #value to the object will sleep the - # current thread until the future is finished and will return the - # result (or raise an exception thrown from the future) - def future(*args, &block) - promise = Promise.new(args, &block) - promise.recorder = lambda { |*stats| stat(*stats) } - - @queue.enq promise - stat :queued, item_id: promise.object_id - start_thread - promise - end - - # Waits until the queue of futures is empty and all threads have exited. - def join - @threads_mon.synchronize do - begin - stat :joining - @join_cond.wait unless @threads.empty? - stat :joined - rescue Exception => e - stat :joined - $stderr.puts e - $stderr.print "Queue contains #{@queue.size} items. " + - "Thread pool contains #{@threads.count} threads\n" - $stderr.print "Current Thread #{Thread.current} status = " + - "#{Thread.current.status}\n" - $stderr.puts e.backtrace.join("\n") - @threads.each do |t| - $stderr.print "Thread #{t} status = #{t.status}\n" - $stderr.puts t.backtrace.join("\n") - end - raise e - end - end - end - - # Enable the gathering of history events. - def gather_history #:nodoc: - @history_start_time = Time.now if @history_start_time.nil? - end - - # Return a array of history events for the thread pool. - # - # History gathering must be enabled to be able to see the events - # (see #gather_history). Best to call this when the job is - # complete (i.e. after ThreadPool#join is called). - def history # :nodoc: - @history_mon.synchronize { @history.dup }. - sort_by { |i| i[:time] }. - each { |i| i[:time] -= @history_start_time } - end - - # Return a hash of always collected statistics for the thread pool. - def statistics # :nodoc: - { - total_threads_in_play: @total_threads_in_play, - max_active_threads: @max_active_threads, - } - end - - private - - # processes one item on the queue. Returns true if there was an - # item to process, false if there was no item - def process_queue_item #:nodoc: - return false if @queue.empty? - - # Even though we just asked if the queue was empty, it - # still could have had an item which by this statement - # is now gone. For this reason we pass true to Queue#deq - # because we will sleep indefinitely if it is empty. - promise = @queue.deq(true) - stat :dequeued, item_id: promise.object_id - promise.work - return true - - rescue ThreadError # this means the queue is empty - false - end - - def safe_thread_count - @threads_mon.synchronize do - @threads.count - end - end - - def start_thread # :nodoc: - @threads_mon.synchronize do - next unless @threads.count < @max_active_threads - - t = Thread.new do - begin - while safe_thread_count <= @max_active_threads - break unless process_queue_item - end - ensure - @threads_mon.synchronize do - @threads.delete Thread.current - stat :ended, thread_count: @threads.count - @join_cond.broadcast if @threads.empty? - end - end - end - - @threads << t - stat( - :spawned, - new_thread: t.object_id, - thread_count: @threads.count) - @total_threads_in_play = @threads.count if - @threads.count > @total_threads_in_play - end - end - - def stat(event, data=nil) # :nodoc: - return if @history_start_time.nil? - info = { - event: event, - data: data, - time: Time.now, - thread: Thread.current.object_id, - } - @history_mon.synchronize { @history << info } - end - - # for testing only - - def __queue__ # :nodoc: - @queue - end - end - -end diff --git a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/trace_output.rb b/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/trace_output.rb deleted file mode 100644 index d713a092..00000000 --- a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/trace_output.rb +++ /dev/null @@ -1,23 +0,0 @@ -# frozen_string_literal: true -module Rake - module TraceOutput # :nodoc: all - - # Write trace output to output stream +out+. - # - # The write is done as a single IO call (to print) to lessen the - # chance that the trace output is interrupted by other tasks also - # producing output. - def trace_on(out, *strings) - sep = $\ || "\n" - if strings.empty? - output = sep - else - output = strings.map { |s| - next if s.nil? - s.end_with?(sep) ? s : s + sep - }.join - end - out.print(output) - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/version.rb b/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/version.rb deleted file mode 100644 index 9808db09..00000000 --- a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/version.rb +++ /dev/null @@ -1,10 +0,0 @@ -# frozen_string_literal: true -module Rake - VERSION = "13.1.0" - - module Version # :nodoc: all - MAJOR, MINOR, BUILD, *OTHER = Rake::VERSION.split "." - - NUMBERS = [MAJOR, MINOR, BUILD, *OTHER] - end -end diff --git a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/win32.rb b/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/win32.rb deleted file mode 100644 index 6e620318..00000000 --- a/bundle/ruby/3.2.0/gems/rake-13.1.0/lib/rake/win32.rb +++ /dev/null @@ -1,51 +0,0 @@ -# frozen_string_literal: true -require "rbconfig" - -module Rake - # Win 32 interface methods for Rake. Windows specific functionality - # will be placed here to collect that knowledge in one spot. - module Win32 # :nodoc: all - - # Error indicating a problem in locating the home directory on a - # Win32 system. - class Win32HomeError < RuntimeError - end - - class << self - # True if running on a windows system. - def windows? - RbConfig::CONFIG["host_os"] =~ %r!(msdos|mswin|djgpp|mingw|[Ww]indows)! - end - - # The standard directory containing system wide rake files on - # Win 32 systems. Try the following environment variables (in - # order): - # - # * HOME - # * HOMEDRIVE + HOMEPATH - # * APPDATA - # * USERPROFILE - # - # If the above are not defined, the return nil. - def win32_system_dir #:nodoc: - win32_shared_path = ENV["HOME"] - if win32_shared_path.nil? && ENV["HOMEDRIVE"] && ENV["HOMEPATH"] - win32_shared_path = ENV["HOMEDRIVE"] + ENV["HOMEPATH"] - end - - win32_shared_path ||= ENV["APPDATA"] - win32_shared_path ||= ENV["USERPROFILE"] - raise Win32HomeError, - "Unable to determine home path environment variable." if - win32_shared_path.nil? or win32_shared_path.empty? - normalize(File.join(win32_shared_path, "Rake")) - end - - # Normalize a win32 path so that the slashes are all forward slashes. - def normalize(path) - path.gsub(/\\/, "/") - end - - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rake-13.1.0/rake.gemspec b/bundle/ruby/3.2.0/gems/rake-13.1.0/rake.gemspec deleted file mode 100644 index b3e8a8ee..00000000 --- a/bundle/ruby/3.2.0/gems/rake-13.1.0/rake.gemspec +++ /dev/null @@ -1,101 +0,0 @@ -# frozen_string_literal: true - -require_relative "lib/rake/version" - -Gem::Specification.new do |s| - s.name = "rake" - s.version = Rake::VERSION - s.authors = ["Hiroshi SHIBATA", "Eric Hodel", "Jim Weirich"] - s.email = ["hsbt@ruby-lang.org", "drbrain@segment7.net", ""] - - s.summary = "Rake is a Make-like program implemented in Ruby" - s.description = <<~DESCRIPTION - Rake is a Make-like program implemented in Ruby. Tasks and dependencies are - specified in standard Ruby syntax. - Rake has the following features: - * Rakefiles (rake's version of Makefiles) are completely defined in standard Ruby syntax. - No XML files to edit. No quirky Makefile syntax to worry about (is that a tab or a space?) - * Users can specify tasks with prerequisites. - * Rake supports rule patterns to synthesize implicit tasks. - * Flexible FileLists that act like arrays but know about manipulating file names and paths. - * Supports parallel execution of tasks. - DESCRIPTION - s.homepage = "https://github.com/ruby/rake" - s.licenses = ["MIT"] - - s.metadata = { - "bug_tracker_uri" => "https://github.com/ruby/rake/issues", - "changelog_uri" => "https://github.com/ruby/rake/blob/v#{s.version}/History.rdoc", - "documentation_uri" => "https://ruby.github.io/rake", - "source_code_uri" => "https://github.com/ruby/rake/tree/v#{s.version}" - } - - s.files = [ - "History.rdoc", - "MIT-LICENSE", - "README.rdoc", - "doc/command_line_usage.rdoc", - "doc/example/Rakefile1", - "doc/example/Rakefile2", - "doc/example/a.c", - "doc/example/b.c", - "doc/example/main.c", - "doc/glossary.rdoc", - "doc/jamis.rb", - "doc/proto_rake.rdoc", - "doc/rake.1", - "doc/rakefile.rdoc", - "doc/rational.rdoc", - "exe/rake", - "lib/rake.rb", - "lib/rake/application.rb", - "lib/rake/backtrace.rb", - "lib/rake/clean.rb", - "lib/rake/cloneable.rb", - "lib/rake/cpu_counter.rb", - "lib/rake/default_loader.rb", - "lib/rake/dsl_definition.rb", - "lib/rake/early_time.rb", - "lib/rake/ext/core.rb", - "lib/rake/ext/string.rb", - "lib/rake/file_creation_task.rb", - "lib/rake/file_list.rb", - "lib/rake/file_task.rb", - "lib/rake/file_utils.rb", - "lib/rake/file_utils_ext.rb", - "lib/rake/invocation_chain.rb", - "lib/rake/invocation_exception_mixin.rb", - "lib/rake/late_time.rb", - "lib/rake/linked_list.rb", - "lib/rake/loaders/makefile.rb", - "lib/rake/multi_task.rb", - "lib/rake/name_space.rb", - "lib/rake/packagetask.rb", - "lib/rake/phony.rb", - "lib/rake/private_reader.rb", - "lib/rake/promise.rb", - "lib/rake/pseudo_status.rb", - "lib/rake/rake_module.rb", - "lib/rake/rake_test_loader.rb", - "lib/rake/rule_recursion_overflow_error.rb", - "lib/rake/scope.rb", - "lib/rake/task.rb", - "lib/rake/task_argument_error.rb", - "lib/rake/task_arguments.rb", - "lib/rake/task_manager.rb", - "lib/rake/tasklib.rb", - "lib/rake/testtask.rb", - "lib/rake/thread_history_display.rb", - "lib/rake/thread_pool.rb", - "lib/rake/trace_output.rb", - "lib/rake/version.rb", - "lib/rake/win32.rb", - "rake.gemspec" - ] - s.bindir = "exe" - s.executables = s.files.grep(%r{^exe/}) { |f| File.basename(f) } - s.require_paths = ["lib"] - - s.required_ruby_version = Gem::Requirement.new(">= 2.3") - s.rdoc_options = ["--main", "README.rdoc"] -end diff --git a/bundle/ruby/3.2.0/gems/rb-readline-0.5.5/CHANGES b/bundle/ruby/3.2.0/gems/rb-readline-0.5.5/CHANGES deleted file mode 100644 index df4c82af..00000000 --- a/bundle/ruby/3.2.0/gems/rb-readline-0.5.5/CHANGES +++ /dev/null @@ -1,94 +0,0 @@ -=== 0.5.1 / 2014-01-08 - -* Bugfixes: - * Fix double require issues. Fixes #93, #95 [yui-knk] - * Use Fiddle to remove deprecation warning of DL. Fixes #90, #87 [Olipro] - -* Internal: - * Bundler-friendly repository (gemspec and Gemfile) to ease usage - and development. - -=== 0.5.0 / 2013-04-28 - -* Enhancements: - * Port GNU Readline-5.2 (patches 003-010) - -* Bugfixes: - * Fix cursor position when scrolling through history - * _rl_adjust_point: improve performance - * Display issue scrolling past long lines. Fixes #69 - * Exception when scolling through long lines. Fixes #73 - * Correctly align directory name completion results - * Disable Vi-mode. Fixes #51 - * Close the Readline init file after use - * Be explicit about source file encoding - * Unload Readline before loading rb-readline - * Removed unused variable warnings under 1.9.3-dev - -* Internal: - * dos2unix all files - * README is RDoc - * Consistently name test classes - * Don't use String#each_char in the tests - * Re-indented to the Ruby standard of two spaces - * Previously released as 0.5.0.pre.1 (2013-02-24) - -=== 0.4.2 / 2011-11-01 - -* Bugfixes: - * Use encoding for Ruby 1.9.x to solve non-ascii input. GH-58 [phasis68] - -=== 0.4.1 / 2011-07-29 - -* Bugfixes: - * Fix crash with double tab and an empty line buffer. GH-26 [phasis68] - * Accessing rl_line_buffer before initialization. GH-27 [phasis68] - * Fix hanging bug when completer finds a quote char. [Spakman] - * Filename completion on paths with directory components. GH-35 [Spakman] - * Attempted completion function now returns correct array. GH-34 [Spakman] - * Ensure @rl_filname_dequoting_function is used if defined. [Spakman] - * Remove deprecations with recent versions of RubyGems. [luislavena] - -=== 0.4.0 / 2011-01-10 - -* Enhancements: - * Provides convenience gem for 3rd parties. - * Provides access to readline line_buffer (to support Bond). - * Initial support for gemification of the library. - * Reduce keyboard input delay to kill sluggishness. - -=== 0.3.0 / 2010-12-27 - -* Enhancements: - * Yield procesor to other threads on Windows. [jduck] - -* Bugfixes: - * Fix 1.8 and 1.9 code compatibility issues. [jduck] - * Changes on Encoding detection. [jduck] - * Handle ^L properly. [jduck] - * Instance variable/typos cleanup. [jduck] - -=== 0.2.2 / 2010-10-19 - -* Enhancements: - * Implemented missing _rl_input_available. [Spakman] - * Made code look more Ruby than C. [Spakman] - -* Bugfixes: - * Fix bugs in the reverse search. Closes GH-14. [Spakman] - * Do not eval inputrc defitions. Closes GH-17 - -=== 0.2.1 / 2010-08-22 - -* Bugfixes: - * Use stdcall as default calling convention under Ruby 1.9 [GH-15] - * Fix TERM under Windows - -=== 0.2.0 - -* Bugfixes: - * Accept 'cygwin' as valid terminal [rogerdpack] - * Accept 'dumb' as valid terminal. Closes GH-7 - * Fix crash when performing reverse look search. Closes GH-6 - -=== 0.1.2 / 2009-05-18 diff --git a/bundle/ruby/3.2.0/gems/rb-readline-0.5.5/LICENSE b/bundle/ruby/3.2.0/gems/rb-readline-0.5.5/LICENSE deleted file mode 100644 index fe5606c0..00000000 --- a/bundle/ruby/3.2.0/gems/rb-readline-0.5.5/LICENSE +++ /dev/null @@ -1,25 +0,0 @@ -Copyright (c) 2009, Park Heesob -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. -* Redistributions in binary form must reproduce the above copyright notice - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. -* Neither the name of Park Heesob nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/bundle/ruby/3.2.0/gems/rb-readline-0.5.5/README.md b/bundle/ruby/3.2.0/gems/rb-readline-0.5.5/README.md deleted file mode 100644 index a63a1ee8..00000000 --- a/bundle/ruby/3.2.0/gems/rb-readline-0.5.5/README.md +++ /dev/null @@ -1,81 +0,0 @@ -# Description - -The readline library provides a pure Ruby implementation of the GNU -readline C library, as well as the Readline extension that ships as part -of the standard library. - -## Installation - - gem install rb-readline - -Or in a `Gemfile`: - - gem 'rb-readline' - -## Synopsis - -```ruby -require 'readline' - -loop do - line = Readline::readline('> ') - break if line.nil? || line == 'quit' - Readline::HISTORY.push(line) - puts "You typed: #{line}" -end -``` - -## Compatibility - -rb-readline should work on all Unix-like systems and Windows. It is regularly -used with MRI 1.8/1.9 and Rubinius. JRuby is not supported and there are no -plans to support it in the future - it comes bundled with a Java implementation -of Readline. - -## Motivation - -First, building the GNU readline library on MS Windows with Visual C++ is -almost impossible. However, certain libraries depend on readline. By providing -a pure Ruby version we eliminate the entire compiler compatibility issue. - -Second, even on distributions of Windows built with MinGW (that include -the readline library for Windows), the behavior was sometimes erratic and -would break. - -Third, even on certain Unix distributions the GNU readline library is not -guaranteed to be installed. Providing a pure Ruby readline eliminates the -need to install a C library first. It's also one less link in the dependency -chain, meaning we don't need to worry about possible changes in the underlying -C library affecting our interface. - -Fourth, by making the interface pure Ruby, we increase the likelihood of -receiving patches, feature requests, documentation updates, etc from the -community at large, since not everyone knows C. - -Lastly, the Readline interface that ships as part of the standard library is -weak, and only provides a very limited subset of the actual GNU readline -library. By providing a pure Ruby implementation we allow 3rd party library -authors to write their own interface as they see fit. - -## Tutorial - -For an excellent tutorial on how to use Readline in practice, please see -Joseph Pecoraro's examples at http://bogojoker.com/readline/. - -You can also take a look at Ruby 1.9 stdlib Readline documentation located -at http://rubydoc.info/stdlib/readline/1.9.2/frames - -## Alternatives - -See Rawline for a library that began life in pure Ruby and provides an -interface that's probably more comfortable to Ruby programmer. It has certain -features that Readline does not. In addition, it provides a Readline -compatibility mode. - -## Authors - -* Park Heesob (C translation, code donated as part of bounty) -* Daniel Berger (Documentation and testing) -* Luis Lavena -* Mark Somerville (Maintainer) -* Connor Atherton (Maintainer) diff --git a/bundle/ruby/3.2.0/gems/rb-readline-0.5.5/Rakefile b/bundle/ruby/3.2.0/gems/rb-readline-0.5.5/Rakefile deleted file mode 100644 index 3796a9c0..00000000 --- a/bundle/ruby/3.2.0/gems/rb-readline-0.5.5/Rakefile +++ /dev/null @@ -1,25 +0,0 @@ -require 'rubygems/package_task' -require 'rake/testtask' -require 'bundler/gem_tasks' - -spec = Gem::Specification.load "rb-readline.gemspec" - -Gem::PackageTask.new(spec) do |pkg| -end - -Rake::TestTask.new do |t| - t.libs << "test" - - t.warning = true - t.verbose = true -end - -desc "Install the gem locally" -task :install => :gem do - Dir.chdir(File.dirname(__FILE__)) do - sh %{gem install --local pkg/#{spec.name}-#{spec.version}.gem} - end -end - -desc "The default is to test everything." -task :default => :test diff --git a/bundle/ruby/3.2.0/gems/rb-readline-0.5.5/bench/_rl_adjust_point.rb b/bundle/ruby/3.2.0/gems/rb-readline-0.5.5/bench/_rl_adjust_point.rb deleted file mode 100644 index f1bb74b3..00000000 --- a/bundle/ruby/3.2.0/gems/rb-readline-0.5.5/bench/_rl_adjust_point.rb +++ /dev/null @@ -1,26 +0,0 @@ -$LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../lib/" -require 'rbreadline' -require 'benchmark' - -N = 100_000 - -Benchmark.bmbm do |x| - x.report do - N.times { RbReadline._rl_adjust_point("a", 0) } - end - x.report do - N.times { RbReadline._rl_adjust_point("a", 1) } - end - x.report do - N.times { RbReadline._rl_adjust_point("aaaaaaaaaaaaaaaaaaaaa", 0) } - end - x.report do - N.times { RbReadline._rl_adjust_point("aaaaaaaaaaaaaaaaaaaaa", 40) } - end - x.report do - N.times { RbReadline._rl_adjust_point("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", 0) } - end - x.report do - N.times { RbReadline._rl_adjust_point("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", 40) } - end -end diff --git a/bundle/ruby/3.2.0/gems/rb-readline-0.5.5/examples/example_readline.rb b/bundle/ruby/3.2.0/gems/rb-readline-0.5.5/examples/example_readline.rb deleted file mode 100644 index cf910b3b..00000000 --- a/bundle/ruby/3.2.0/gems/rb-readline-0.5.5/examples/example_readline.rb +++ /dev/null @@ -1,8 +0,0 @@ -require 'readline' - -loop do - line = Readline::readline('> ') - Readline::HISTORY.push(line) - puts "You typed: #{line}" - break if line == 'quit' -end diff --git a/bundle/ruby/3.2.0/gems/rb-readline-0.5.5/examples/example_readline_with_completion.rb b/bundle/ruby/3.2.0/gems/rb-readline-0.5.5/examples/example_readline_with_completion.rb deleted file mode 100644 index 0f645c85..00000000 --- a/bundle/ruby/3.2.0/gems/rb-readline-0.5.5/examples/example_readline_with_completion.rb +++ /dev/null @@ -1,18 +0,0 @@ -require 'readline' - -list = [ - 'search', 'download', 'open', - 'help', 'history', 'quit', - 'url', 'next', 'clear', - 'prev', 'past', -].sort - -comp = proc{ |s| list.grep( /^#{Regexp.escape(s)}/) } - -Readline.completion_append_character = " " -Readline.completion_proc = comp - -while line = Readline.readline('> ', true) - p line - break if line == 'quit' -end diff --git a/bundle/ruby/3.2.0/gems/rb-readline-0.5.5/examples/tinyirb.rb b/bundle/ruby/3.2.0/gems/rb-readline-0.5.5/examples/tinyirb.rb deleted file mode 100644 index 939f4b3d..00000000 --- a/bundle/ruby/3.2.0/gems/rb-readline-0.5.5/examples/tinyirb.rb +++ /dev/null @@ -1,11 +0,0 @@ -require 'readline.rb' - -loop do - line = Readline::readline('> ') - Readline::HISTORY.push(line) - puts "You typed: #{line}" - - if line =~ /exit|quit/ then - exit - end -end diff --git a/bundle/ruby/3.2.0/gems/rb-readline-0.5.5/lib/rb-readline.rb b/bundle/ruby/3.2.0/gems/rb-readline-0.5.5/lib/rb-readline.rb deleted file mode 100644 index 3c4d7409..00000000 --- a/bundle/ruby/3.2.0/gems/rb-readline-0.5.5/lib/rb-readline.rb +++ /dev/null @@ -1,18 +0,0 @@ -# encoding: US-ASCII - -# Stub file to conform gem name (rb-readline) -# It forces require of bundled readline instead of any already existing -# in your Ruby installation. It will avoid any possible warning caused -# by double require. -# Remove any Readline module that has been defined so far. This is primarily to -# catch cases where GNU Readline has already been required. Unfortunately, it -# is not without problems - any calls to methods like Readline.completion_proc -# will need to be re-made. -if (defined? Readline) && (! defined? RbReadline) - if $DEBUG - STDERR.puts "Removing old Readline module - redefined by rb-readline." - end - Object.send(:remove_const, :Readline) - require File.join(File.dirname(__FILE__), 'readline') -end - diff --git a/bundle/ruby/3.2.0/gems/rb-readline-0.5.5/lib/rbreadline.rb b/bundle/ruby/3.2.0/gems/rb-readline-0.5.5/lib/rbreadline.rb deleted file mode 100644 index e27e80b3..00000000 --- a/bundle/ruby/3.2.0/gems/rb-readline-0.5.5/lib/rbreadline.rb +++ /dev/null @@ -1,8920 +0,0 @@ -# encoding: US-ASCII -# -# rbreadline.rb -- a general facility for reading lines of input -# with emacs style editing and completion. - -# -# Inspired by GNU Readline, translation to Ruby -# Copyright (C) 2009 by Park Heesob phasis@gmail.com -# - -require "rbreadline/version" - -class Integer - def ord; self; end -end - -module RbReadline - require 'etc' - - RL_LIBRARY_VERSION = "5.2" - RL_READLINE_VERSION = 0x0502 - - EOF = "\xFF" - ESC = "\C-[" - PAGE = "\C-L" - SPACE = "\x20" - RETURN = "\C-M" - ABORT_CHAR = "\C-G" - TAB = "\t" - RUBOUT = "\x7f" - NEWLINE = "\n" - - DEFAULT_BUFFER_SIZE = 256 - DEFAULT_MAX_KILLS = 10 - - MB_FIND_NONZERO = 1 - MB_FIND_ANY = 0 - MB_LEN_MAX = 4 - - DEFAULT_INPUTRC = "~/.inputrc" - SYS_INPUTRC = "/etc/inputrc" - - UpCase = 1 - DownCase = 2 - CapCase = 3 - - # Possible history errors passed to hist_error. - EVENT_NOT_FOUND = 0 - BAD_WORD_SPEC = 1 - SUBST_FAILED = 2 - BAD_MODIFIER = 3 - NO_PREV_SUBST = 4 - - # Possible definitions for history starting point specification. - ANCHORED_SEARCH = 1 - NON_ANCHORED_SEARCH = 0 - - # Possible definitions for what style of writing the history file we want. - HISTORY_APPEND = 0 - HISTORY_OVERWRITE = 1 - - # Input error; can be returned by (*rl_getc_function) if readline is reading - # a top-level command (RL_ISSTATE (RL_STATE_READCMD)). - READERR = 0xFE.chr - - # Definitions available for use by readline clients. - RL_PROMPT_START_IGNORE = 1.chr - RL_PROMPT_END_IGNORE = 2.chr - - # Possible values for do_replace argument to rl_filename_quoting_function, - # called by rl_complete_internal. - NO_MATCH = 0 - SINGLE_MATCH = 1 - MULT_MATCH = 2 - - # Callback data for reading numeric arguments - NUM_SAWMINUS = 0x01 - NUM_SAWDIGITS = 0x02 - NUM_READONE = 0x04 - - # A context for reading key sequences longer than a single character when - # using the callback interface. - KSEQ_DISPATCHED = 0x01 - KSEQ_SUBSEQ = 0x02 - KSEQ_RECURSIVE = 0x04 - - # Possible state values for rl_readline_state - RL_STATE_NONE = 0x000000 # no state before first call - - RL_STATE_INITIALIZING = 0x000001 # initializing - RL_STATE_INITIALIZED = 0x000002 # initialization done - RL_STATE_TERMPREPPED = 0x000004 # terminal is prepped - RL_STATE_READCMD = 0x000008 # reading a command key - RL_STATE_METANEXT = 0x000010 # reading input after ESC - RL_STATE_DISPATCHING = 0x000020 # dispatching to a command - RL_STATE_MOREINPUT = 0x000040 # reading more input in a command function - RL_STATE_ISEARCH = 0x000080 # doing incremental search - RL_STATE_NSEARCH = 0x000100 # doing non-inc search - RL_STATE_SEARCH = 0x000200 # doing a history search - RL_STATE_NUMERICARG = 0x000400 # reading numeric argument - RL_STATE_MACROINPUT = 0x000800 # getting input from a macro - RL_STATE_MACRODEF = 0x001000 # defining keyboard macro - RL_STATE_OVERWRITE = 0x002000 # overwrite mode - RL_STATE_COMPLETING = 0x004000 # doing completion - RL_STATE_SIGHANDLER = 0x008000 # in readline sighandler - RL_STATE_UNDOING = 0x010000 # doing an undo - RL_STATE_INPUTPENDING = 0x020000 # rl_execute_next called - RL_STATE_TTYCSAVED = 0x040000 # tty special chars saved - RL_STATE_CALLBACK = 0x080000 # using the callback interface - RL_STATE_VIMOTION = 0x100000 # reading vi motion arg - RL_STATE_MULTIKEY = 0x200000 # reading multiple-key command - RL_STATE_VICMDONCE = 0x400000 # entered vi command mode at least once - - RL_STATE_DONE = 0x800000 # done accepted line - - NO_BELL = 0 - AUDIBLE_BELL = 1 - VISIBLE_BELL = 2 - # The actions that undo knows how to undo. Notice that UNDO_DELETE means - # to insert some text, and UNDO_INSERT means to delete some text. I.e., - # the code tells undo what to undo, not how to undo it. - UNDO_DELETE, UNDO_INSERT, UNDO_BEGIN, UNDO_END = 0,1,2,3 - - # Definitions used when searching the line for characters. - # NOTE: it is necessary that opposite directions are inverses - FTO = 1 # forward to - BTO = -1 # backward to - FFIND = 2 # forward find - BFIND = -2 # backward find - - # Possible values for the found_quote flags word used by the completion - # functions. It says what kind of (shell-like) quoting we found anywhere - # in the line. - RL_QF_SINGLE_QUOTE = 0x01 - RL_QF_DOUBLE_QUOTE = 0x02 - RL_QF_BACKSLASH = 0x04 - RL_QF_OTHER_QUOTE = 0x08 - - KEYMAP_SIZE = 257 - ANYOTHERKEY = KEYMAP_SIZE-1 - - @hConsoleHandle = nil - @MessageBeep = nil - - RL_IM_INSERT = 1 - RL_IM_OVERWRITE = 0 - RL_IM_DEFAULT = RL_IM_INSERT - @no_mode = -1 - @vi_mode = 0 - @emacs_mode = 1 - ISFUNC = 0 - ISKMAP = 1 - ISMACR = 2 - - HISTORY_WORD_DELIMITERS = " \t\n;&()|<>" - HISTORY_QUOTE_CHARACTERS = "\"'`" - - RL_SEARCH_ISEARCH = 0x01 # incremental search - RL_SEARCH_NSEARCH = 0x02 # non-incremental search - RL_SEARCH_CSEARCH = 0x04 # intra-line char search - - # search flags - SF_REVERSE = 0x01 - SF_FOUND = 0x02 - SF_FAILED = 0x04 - - @slashify_in_quotes = "\\`\"$" - - @sigint_proc = nil - @sigint_blocked = false - - @rl_prep_term_function = :rl_prep_terminal - @rl_deprep_term_function = :rl_deprep_terminal - - @_rl_history_saved_point = -1 - - @rl_max_kills = DEFAULT_MAX_KILLS - @rl_kill_ring = nil - @rl_kill_index = 0 - @rl_kill_ring_length = 0 - - @pending_bytes = '' - @stored_count = 0 - - @_rl_isearch_terminators = nil - @_rl_iscxt = nil - @last_isearch_string = nil - @last_isearch_string_len = 0 - @default_isearch_terminators = "\033\012" - @_rl_history_preserve_point = false - @terminal_prepped = false - @otio = nil - - @msg_saved_prompt = false - - @_rl_nscxt = nil - @noninc_search_string = nil - @noninc_history_pos = 0 - @prev_line_found = nil - - @_rl_tty_chars = Struct.new(:t_eol,:t_eol2,:t_erase,:t_werase,:t_kill,:t_reprint,:t_intr,:t_eof, - :t_quit,:t_susp,:t_dsusp,:t_start,:t_stop,:t_lnext,:t_flush,:t_status).new - @_rl_last_tty_chars = nil - - @_keyboard_input_timeout = 0.001 - - # Variables exported by this file. - # The character that represents the start of a history expansion - # request. This is usually `!'. - @history_expansion_char = "!" - - # The character that invokes word substitution if found at the start of - # a line. This is usually `^'. - @history_subst_char = "^" - - # During tokenization, if this character is seen as the first character - # of a word, then it, and all subsequent characters upto a newline are - # ignored. For a Bourne shell, this should be '#'. Bash special cases - # the interactive comment character to not be a comment delimiter. - @history_comment_char = 0.chr - - # The list of characters which inhibit the expansion of text if found - # immediately following history_expansion_char. - @history_no_expand_chars = " \t\n\r=" - - # If set to a non-zero value, single quotes inhibit history expansion. - # The default is 0. - @history_quotes_inhibit_expansion = 0 - - # Used to split words by history_tokenize_internal. - @history_word_delimiters = HISTORY_WORD_DELIMITERS - - # If set, this points to a function that is called to verify that a - # particular history expansion should be performed. - @history_inhibit_expansion_function = nil - - @rl_event_hook = nil - # The visible cursor position. If you print some text, adjust this. - # NOTE: _rl_last_c_pos is used as a buffer index when not in a locale - # supporting multibyte characters, and an absolute cursor position when - # in such a locale. This is an artifact of the donated multibyte support. - # Care must be taken when modifying its value. - @_rl_last_c_pos = 0 - @_rl_last_v_pos = 0 - - @cpos_adjusted = false - @cpos_buffer_position = 0 - - # Number of lines currently on screen minus 1. - @_rl_vis_botlin = 0 - - # Variables used only in this file. - # The last left edge of text that was displayed. This is used when - # doing horizontal scrolling. It shifts in thirds of a screenwidth. - @last_lmargin = 0 - - # The line display buffers. One is the line currently displayed on - # the screen. The other is the line about to be displayed. - @visible_line = nil - @invisible_line = nil - - # A buffer for `modeline' messages. - @msg_buf = 0.chr * 128 - - # Non-zero forces the redisplay even if we thought it was unnecessary. - @forced_display = false - - # Default and initial buffer size. Can grow. - @line_size = 1024 - - # Variables to keep track of the expanded prompt string, which may - # include invisible characters. - - @local_prompt = nil - @local_prompt_prefix = nil - @local_prompt_len = 0 - @prompt_visible_length = 0 - @prompt_prefix_length = 0 - - # The number of invisible characters in the line currently being - # displayed on the screen. - @visible_wrap_offset = 0 - - # The number of invisible characters in the prompt string. Static so it - # can be shared between rl_redisplay and update_line - @wrap_offset = 0 - - @prompt_last_invisible = 0 - - # The length (buffer offset) of the first line of the last (possibly - # multi-line) buffer displayed on the screen. - @visible_first_line_len = 0 - - # Number of invisible characters on the first physical line of the prompt. - # Only valid when the number of physical characters in the prompt exceeds - # (or is equal to) _rl_screenwidth. - @prompt_invis_chars_first_line = 0 - - @prompt_last_screen_line = 0 - - @prompt_physical_chars = 0 - - # Variables to save and restore prompt and display information. - - # These are getting numerous enough that it's time to create a struct. - - @saved_local_prompt = nil - @saved_local_prefix = nil - @saved_last_invisible = 0 - @saved_visible_length = 0 - @saved_prefix_length = 0 - @saved_local_length = 0 - @saved_invis_chars_first_line = 0 - @saved_physical_chars = 0 - - @inv_lbreaks = nil - @vis_lbreaks = nil - @_rl_wrapped_line = nil - - @term_buffer = nil - @term_string_buffer = nil - - @tcap_initialized = false - - # While we are editing the history, this is the saved - # version of the original line. - @_rl_saved_line_for_history = nil - - # An array of HIST_ENTRY. This is where we store the history. - @the_history = nil - @history_base = 1 - - # Non-zero means that we have enforced a limit on the amount of - # history that we save. - @history_stifled = false - - # If HISTORY_STIFLED is non-zero, then this is the maximum number of - # entries to remember. - @history_max_entries = 0 - @max_input_history = 0 # backwards compatibility - - # The current location of the interactive history pointer. Just makes - # life easier for outside callers. - @history_offset = 0 - - # The number of strings currently stored in the history list. - @history_length = 0 - - @_rl_vi_last_command = 'i' # default `.' puts you in insert mode - - # Non-zero means enter insertion mode. - @_rl_vi_doing_insert = 0 - - # Command keys which do movement for xxx_to commands. - @vi_motion = " hl^$0ftFT;,%wbeWBE|" - - # Keymap used for vi replace characters. Created dynamically since - # rarely used. - @vi_replace_map = nil - - # The number of characters inserted in the last replace operation. - @vi_replace_count = 0 - - # If non-zero, we have text inserted after a c[motion] command that put - # us implicitly into insert mode. Some people want this text to be - # attached to the command so that it is `redoable' with `.'. - @vi_continued_command = false - @vi_insert_buffer = nil - @vi_insert_buffer_size = 0 - - @_rl_vi_last_repeat = 1 - @_rl_vi_last_arg_sign = 1 - @_rl_vi_last_motion = 0 - @_rl_vi_last_search_char = 0 - @_rl_vi_last_replacement = 0 - - @_rl_vi_last_key_before_insert = 0 - - @vi_redoing = 0 - - # Text modification commands. These are the `redoable' commands. - @vi_textmod = "_*\\AaIiCcDdPpYyRrSsXx~" - - # Arrays for the saved marks. - @vi_mark_chars = Array.new(26,-1) - - @emacs_standard_keymap = { - "\C-@" => :rl_set_mark , - "\C-a" => :rl_beg_of_line , - "\C-b" => :rl_backward_char , - "\C-d" => :rl_delete , - "\C-e" => :rl_end_of_line , - "\C-f" => :rl_forward_char , - "\C-g" => :rl_abort , - "\C-h" => :rl_rubout , - "\C-i" => :rl_complete , - "\C-j" => :rl_newline , - "\C-k" => :rl_kill_line , - "\C-l" => :rl_clear_screen , - "\C-m" => :rl_newline , - "\C-n" => :rl_get_next_history , - "\C-p" => :rl_get_previous_history , - "\C-q" => :rl_quoted_insert , - "\C-r" => :rl_reverse_search_history , - "\C-s" => :rl_forward_search_history , - "\C-t" => :rl_transpose_chars , - "\C-u" => :rl_unix_line_discard , - "\C-v" => :rl_quoted_insert , - "\C-w" => :rl_unix_word_rubout , - "\C-y" => :rl_yank , - "\C-]" => :rl_char_search , - "\C-_" => :rl_undo_command , - "\x7F" => :rl_rubout , - "\e\C-g" => :rl_abort , - "\e\C-h" => :rl_backward_kill_word , - "\e\C-i" => :rl_tab_insert , - "\e\C-j" => :rl_vi_editing_mode , - "\e\C-m" => :rl_vi_editing_mode , - "\e\C-r" => :rl_revert_line , - "\e\C-y" => :rl_yank_nth_arg , - "\e\C-[" => :rl_complete , - "\e\C-]" => :rl_backward_char_search , - "\e " => :rl_set_mark , - "\e#" => :rl_insert_comment , - "\e&" => :rl_tilde_expand , - "\e*" => :rl_insert_completions , - "\e-" => :rl_digit_argument , - "\e." => :rl_yank_last_arg , - "\e0" => :rl_digit_argument , - "\e1" => :rl_digit_argument , - "\e2" => :rl_digit_argument , - "\e3" => :rl_digit_argument , - "\e4" => :rl_digit_argument , - "\e5" => :rl_digit_argument , - "\e6" => :rl_digit_argument , - "\e7" => :rl_digit_argument , - "\e8" => :rl_digit_argument , - "\e9" => :rl_digit_argument , - "\e<" => :rl_beginning_of_history , - "\e=" => :rl_possible_completions , - "\e>" => :rl_end_of_history , - "\e?" => :rl_possible_completions , - "\eB" => :rl_backward_word , - "\eC" => :rl_capitalize_word , - "\eD" => :rl_kill_word , - "\eF" => :rl_forward_word , - "\eL" => :rl_downcase_word , - "\eN" => :rl_noninc_forward_search , - "\eP" => :rl_noninc_reverse_search , - "\eR" => :rl_revert_line , - "\eT" => :rl_transpose_words , - "\eU" => :rl_upcase_word , - "\eY" => :rl_yank_pop , - "\e\\" => :rl_delete_horizontal_space , - "\e_" => :rl_yank_last_arg , - "\eb" => :rl_backward_word , - "\ec" => :rl_capitalize_word , - "\ed" => :rl_kill_word , - "\ef" => :rl_forward_word , - "\el" => :rl_downcase_word , - "\en" => :rl_noninc_forward_search , - "\ep" => :rl_noninc_reverse_search , - "\er" => :rl_revert_line , - "\et" => :rl_transpose_words , - "\eu" => :rl_upcase_word , - "\ey" => :rl_yank_pop , - "\e~" => :rl_tilde_expand , - "\377" => :rl_backward_kill_word , - "\e\x7F" => :rl_backward_kill_word, - - "\C-x\C-g" => :rl_abort , - "\C-x\C-r" => :rl_re_read_init_file , - "\C-x\C-u" => :rl_undo_command , - "\C-x\C-x" => :rl_exchange_point_and_mark , - "\C-x(" => :rl_start_kbd_macro , - "\C-x)" => :rl_end_kbd_macro , - "\C-xE" => :rl_call_last_kbd_macro , - "\C-xe" => :rl_call_last_kbd_macro , - "\C-x\x7F" => :rl_backward_kill_line - } - - @vi_movement_keymap = { - "\C-d" => :rl_vi_eof_maybe , - "\C-e" => :rl_emacs_editing_mode , - "\C-g" => :rl_abort , - "\C-h" => :rl_backward_char , - "\C-j" => :rl_newline , - "\C-k" => :rl_kill_line , - "\C-l" => :rl_clear_screen , - "\C-m" => :rl_newline , - "\C-n" => :rl_get_next_history , - "\C-p" => :rl_get_previous_history , - "\C-q" => :rl_quoted_insert , - "\C-r" => :rl_reverse_search_history , - "\C-s" => :rl_forward_search_history , - "\C-t" => :rl_transpose_chars , - "\C-u" => :rl_unix_line_discard , - "\C-v" => :rl_quoted_insert , - "\C-w" => :rl_unix_word_rubout , - "\C-y" => :rl_yank , - "\C-_" => :rl_vi_undo , - " " => :rl_forward_char , - "#" => :rl_insert_comment , - "$" => :rl_end_of_line , - "%" => :rl_vi_match , - "&" => :rl_vi_tilde_expand , - "*" => :rl_vi_complete , - "+" => :rl_get_next_history , - "," => :rl_vi_char_search , - "-" => :rl_get_previous_history , - "." => :rl_vi_redo , - "/" => :rl_vi_search , - "0" => :rl_beg_of_line , - "1" => :rl_vi_arg_digit , - "2" => :rl_vi_arg_digit , - "3" => :rl_vi_arg_digit , - "4" => :rl_vi_arg_digit , - "5" => :rl_vi_arg_digit , - "6" => :rl_vi_arg_digit , - "7" => :rl_vi_arg_digit , - "8" => :rl_vi_arg_digit , - "9" => :rl_vi_arg_digit , - "" => :rl_vi_char_search , - "=" => :rl_vi_complete , - "?" => :rl_vi_search , - "A" => :rl_vi_append_eol , - "B" => :rl_vi_prev_word , - "C" => :rl_vi_change_to , - "D" => :rl_vi_delete_to , - "E" => :rl_vi_end_word , - "F" => :rl_vi_char_search , - "G" => :rl_vi_fetch_history , - "I" => :rl_vi_insert_beg , - "N" => :rl_vi_search_again , - "P" => :rl_vi_put , - "R" => :rl_vi_replace , - "S" => :rl_vi_subst , - "T" => :rl_vi_char_search , - "U" => :rl_revert_line , - "W" => :rl_vi_next_word , - "X" => :rl_vi_rubout , - "Y" => :rl_vi_yank_to , - "\\" => :rl_vi_complete , - "^" => :rl_vi_first_print , - "_" => :rl_vi_yank_arg , - "`" => :rl_vi_goto_mark , - "a" => :rl_vi_append_mode , - "b" => :rl_vi_prev_word , - "c" => :rl_vi_change_to , - "d" => :rl_vi_delete_to , - "e" => :rl_vi_end_word , - "f" => :rl_vi_char_search , - "h" => :rl_backward_char , - "i" => :rl_vi_insertion_mode , - "j" => :rl_get_next_history , - "k" => :rl_get_previous_history , - "l" => :rl_forward_char , - "m" => :rl_vi_set_mark , - "n" => :rl_vi_search_again , - "p" => :rl_vi_put , - "r" => :rl_vi_change_char , - "s" => :rl_vi_subst , - "t" => :rl_vi_char_search , - "u" => :rl_vi_undo , - "w" => :rl_vi_next_word , - "x" => :rl_vi_delete , - "y" => :rl_vi_yank_to , - "|" => :rl_vi_column , - "~" => :rl_vi_change_case - } - - @vi_insertion_keymap = { - "\C-a" => :rl_insert , - "\C-b" => :rl_insert , - "\C-c" => :rl_insert , - "\C-d" => :rl_vi_eof_maybe , - "\C-e" => :rl_insert , - "\C-f" => :rl_insert , - "\C-g" => :rl_insert , - "\C-h" => :rl_rubout , - "\C-i" => :rl_complete , - "\C-j" => :rl_newline , - "\C-k" => :rl_insert , - "\C-l" => :rl_insert , - "\C-m" => :rl_newline , - "\C-n" => :rl_insert , - "\C-o" => :rl_insert , - "\C-p" => :rl_insert , - "\C-q" => :rl_insert , - "\C-r" => :rl_reverse_search_history , - "\C-s" => :rl_forward_search_history , - "\C-t" => :rl_transpose_chars , - "\C-u" => :rl_unix_line_discard , - "\C-v" => :rl_quoted_insert , - "\C-w" => :rl_unix_word_rubout , - "\C-x" => :rl_insert , - "\C-y" => :rl_yank , - "\C-z" => :rl_insert , - "\C-[" => :rl_vi_movement_mode , - "\C-\\" => :rl_insert , - "\C-]" => :rl_insert , - "\C-^" => :rl_insert , - "\C-_" => :rl_vi_undo , - "\x7F" => :rl_rubout - } - - @rl_library_version = RL_LIBRARY_VERSION - - @rl_readline_version = RL_READLINE_VERSION - - @rl_readline_name = "other" - - @rl_getc_function = :rl_getc - - # Non-zero tells rl_delete_text and rl_insert_text to not add to - # the undo list. - @_rl_doing_an_undo = false - - # How many unclosed undo groups we currently have. - @_rl_undo_group_level = 0 - - # The current undo list for THE_LINE. - @rl_undo_list = nil - - # Application-specific redisplay function. - @rl_redisplay_function = :rl_redisplay - - # Global variables declared here. - # What YOU turn on when you have handled all redisplay yourself. - @rl_display_fixed = false - - @_rl_suppress_redisplay = 0 - @_rl_want_redisplay = false - - # The stuff that gets printed out before the actual text of the line. - # This is usually pointing to rl_prompt. - @rl_display_prompt = nil - - # True if this is `real' readline as opposed to some stub substitute. - @rl_gnu_readline_p = true - - for i in 32 .. 255 - @emacs_standard_keymap[i.chr] = :rl_insert unless @emacs_standard_keymap[i.chr] - @vi_insertion_keymap[i.chr] = :rl_insert unless @vi_insertion_keymap[i.chr] - end - # A pointer to the keymap that is currently in use. - # By default, it is the standard emacs keymap. - @_rl_keymap = @emacs_standard_keymap - - - # The current style of editing. - @rl_editing_mode = @emacs_mode - - # The current insert mode: input (the default) or overwrite - @rl_insert_mode = RL_IM_DEFAULT - - # Non-zero if we called this function from _rl_dispatch(). It's present - # so functions can find out whether they were called from a key binding - # or directly from an application. - @rl_dispatching = false - - # Non-zero if the previous command was a kill command. - @_rl_last_command_was_kill = false - - # The current value of the numeric argument specified by the user. - @rl_numeric_arg = 1 - - # Non-zero if an argument was typed. - @rl_explicit_arg = false - - # Temporary value used while generating the argument. - @rl_arg_sign = 1 - - # Non-zero means we have been called at least once before. - @rl_initialized = false - - # Flags word encapsulating the current readline state. - @rl_readline_state = RL_STATE_NONE - - # The current offset in the current input line. - @rl_point = 0 - - # Mark in the current input line. - @rl_mark = 0 - - # Length of the current input line. - @rl_end = 0 - - # Make this non-zero to return the current input_line. - @rl_done = false - - # The last function executed by readline. - @rl_last_func = nil - - # Top level environment for readline_internal (). - @readline_top_level = nil - - # The streams we interact with. - @_rl_in_stream = nil - @_rl_out_stream = nil - - # The names of the streams that we do input and output to. - @rl_instream = nil - @rl_outstream = nil - - @pop_index = 0 - @push_index = 0 - @ibuffer = 0.chr * 512 - @ibuffer_len = @ibuffer.length - 1 - - - # Non-zero means echo characters as they are read. Defaults to no echo - # set to 1 if there is a controlling terminal, we can get its attributes, - # and the attributes include `echo'. Look at rltty.c:prepare_terminal_settings - # for the code that sets it. - @readline_echoing_p = false - - # Current prompt. - @rl_prompt = nil - @rl_visible_prompt_length = 0 - - # Set to non-zero by calling application if it has already printed rl_prompt - # and does not want readline to do it the first time. - @rl_already_prompted = false - - # The number of characters read in order to type this complete command. - @rl_key_sequence_length = 0 - - # If non-zero, then this is the address of a function to call just - # before readline_internal_setup () prints the first prompt. - @rl_startup_hook = nil - - # If non-zero, this is the address of a function to call just before - # readline_internal_setup () returns and readline_internal starts - # reading input characters. - @rl_pre_input_hook = nil - - # The character that can generate an EOF. Really read from - # the terminal driver... just defaulted here. - @_rl_eof_char = "\cD" - - # Non-zero makes this the next keystroke to read. - @rl_pending_input = 0 - - # Pointer to a useful terminal name. - @rl_terminal_name = nil - - # Non-zero means to always use horizontal scrolling in line display. - @_rl_horizontal_scroll_mode = false - - # Non-zero means to display an asterisk at the starts of history lines - # which have been modified. - @_rl_mark_modified_lines = false - - # The style of `bell' notification preferred. This can be set to NO_BELL, - # AUDIBLE_BELL, or VISIBLE_BELL. - @_rl_bell_preference = AUDIBLE_BELL - - # String inserted into the line by rl_insert_comment (). - @_rl_comment_begin = nil - - # Keymap holding the function currently being executed. - @rl_executing_keymap = nil - - # Keymap we're currently using to dispatch. - @_rl_dispatching_keymap = nil - - # Non-zero means to erase entire line, including prompt, on empty input lines. - @rl_erase_empty_line = false - - # Non-zero means to read only this many characters rather than up to a - # character bound to accept-line. - @rl_num_chars_to_read = 0 - - # Line buffer and maintenence. - @rl_line_buffer = "" - - # Key sequence `contexts' - @_rl_kscxt = nil - - # Non-zero means do not parse any lines other than comments and - # parser directives. - @_rl_parsing_conditionalized_out = false - - # Non-zero means to convert characters with the meta bit set to - # escape-prefixed characters so we can indirect through - # emacs_meta_keymap or vi_escape_keymap. - @_rl_convert_meta_chars_to_ascii = true - - # Non-zero means to output characters with the meta bit set directly - # rather than as a meta-prefixed escape sequence. - @_rl_output_meta_chars = false - - # Non-zero means to look at the termios special characters and bind - # them to equivalent readline functions at startup. - @_rl_bind_stty_chars = true - - @rl_completion_display_matches_hook = nil - - XOK = 1 - - @_rl_term_clreol = nil - @_rl_term_clrpag = nil - @_rl_term_cr = nil - @_rl_term_backspace = nil - @_rl_term_goto = nil - @_rl_term_pc = nil - - # "An application program can assume that the terminal can do character - # insertion if *any one of* the capabilities `IC', `im', `ic' or `ip' is - # provided.". But we can't do anything if only `ip' is provided, so... - # - # Currently rb-readline can't tgoto(). Setting this to false means that - # insert_some_chars doesn't get called and some other method is used. - @_rl_terminal_can_insert = false - - # How to insert characters. - @_rl_term_im = nil - @_rl_term_ei = nil - @_rl_term_ic = nil - @_rl_term_ip = nil - @_rl_term_IC = nil - - # How to delete characters. - @_rl_term_dc = nil - @_rl_term_DC = nil - - @_rl_term_forward_char = nil - - # How to go up a line. - @_rl_term_up = nil - - # A visible bell; char if the terminal can be made to flash the screen. - @_rl_visible_bell = nil - - # Non-zero means the terminal can auto-wrap lines. - @_rl_term_autowrap = true - - # Non-zero means that this terminal has a meta key. - @term_has_meta = 0 - - # The sequences to write to turn on and off the meta key, if this - # terminal has one. - @_rl_term_mm = nil - @_rl_term_mo = nil - - # The key sequences output by the arrow keys, if this terminal has any. - @_rl_term_ku = nil - @_rl_term_kd = nil - @_rl_term_kr = nil - @_rl_term_kl = nil - - # How to initialize and reset the arrow keys, if this terminal has any. - @_rl_term_ks = nil - @_rl_term_ke = nil - - # The key sequences sent by the Home and End keys, if any. - @_rl_term_kh = nil - @_rl_term_kH = nil - @_rl_term_at7 = nil - - # Delete key - @_rl_term_kD = nil - - # Insert key - @_rl_term_kI = nil - - # Cursor control - @_rl_term_vs = nil # very visible - @_rl_term_ve = nil # normal - - # Variables that hold the screen dimensions, used by the display code. - @_rl_screenwidth = @_rl_screenheight = @_rl_screenchars = 0 - - # Non-zero means the user wants to enable the keypad. - @_rl_enable_keypad = false - - # Non-zero means the user wants to enable a meta key. - @_rl_enable_meta = true - - # **************************************************************** - # - # Completion matching, from readline's point of view. - # - # **************************************************************** - - # Variables known only to the readline library. - - # If non-zero, non-unique completions always show the list of matches. - @_rl_complete_show_all = false - - # If non-zero, non-unique completions show the list of matches, unless it - # is not possible to do partial completion and modify the line. - @_rl_complete_show_unmodified = false - - # If non-zero, completed directory names have a slash appended. - @_rl_complete_mark_directories = true - - # If non-zero, the symlinked directory completion behavior introduced in - # readline-4.2a is disabled, and symlinks that point to directories have - # a slash appended (subject to the value of _rl_complete_mark_directories). - # This is user-settable via the mark-symlinked-directories variable. - @_rl_complete_mark_symlink_dirs = false - - # If non-zero, completions are printed horizontally in alphabetical order, - # like `ls -x'. - @_rl_print_completions_horizontally = false - - @_rl_completion_case_fold = false - - # If non-zero, don't match hidden files (filenames beginning with a `.' on - # Unix) when doing filename completion. - @_rl_match_hidden_files = true - - # Global variables available to applications using readline. - - # Non-zero means add an additional character to each filename displayed - # during listing completion iff rl_filename_completion_desired which helps - # to indicate the type of file being listed. - @rl_visible_stats = false - - # If non-zero, then this is the address of a function to call when - # completing on a directory name. The function is called with - # the address of a string (the current directory name) as an arg. - @rl_directory_completion_hook = nil - - @rl_directory_rewrite_hook = nil - - # Non-zero means readline completion functions perform tilde expansion. - @rl_complete_with_tilde_expansion = false - - # Pointer to the generator function for completion_matches (). - # NULL means to use rl_filename_completion_function (), the default filename - # completer. - @rl_completion_entry_function = nil - - # Pointer to alternative function to create matches. - # Function is called with TEXT, START, and END. - # START and END are indices in RL_LINE_BUFFER saying what the boundaries - # of TEXT are. - # If this function exists and returns NULL then call the value of - # rl_completion_entry_function to try to match, otherwise use the - # array of strings returned. - @rl_attempted_completion_function = nil - - # Non-zero means to suppress normal filename completion after the - # user-specified completion function has been called. - @rl_attempted_completion_over = false - - # Set to a character indicating the type of completion being performed - # by rl_complete_internal, available for use by application completion - # functions. - @rl_completion_type = 0 - - # Up to this many items will be displayed in response to a - # possible-completions call. After that, we ask the user if - # she is sure she wants to see them all. A negative value means - # don't ask. - @rl_completion_query_items = 100 - - @_rl_page_completions = 1 - - # The basic list of characters that signal a break between words for the - # completer routine. The contents of this variable is what breaks words - # in the shell, i.e. " \t\n\"\\'`@$><=" - @rl_basic_word_break_characters = " \t\n\"\\'`@$><=|&{(" # }) - - # List of basic quoting characters. - @rl_basic_quote_characters = "\"'" - - # The list of characters that signal a break between words for - # rl_complete_internal. The default list is the contents of - # rl_basic_word_break_characters. - @rl_completer_word_break_characters = nil - - # Hook function to allow an application to set the completion word - # break characters before readline breaks up the line. Allows - # position-dependent word break characters. - @rl_completion_word_break_hook = nil - - # List of characters which can be used to quote a substring of the line. - # Completion occurs on the entire substring, and within the substring - # rl_completer_word_break_characters are treated as any other character, - # unless they also appear within this list. - @rl_completer_quote_characters = nil - - # List of characters that should be quoted in filenames by the completer. - @rl_filename_quote_characters = nil - - # List of characters that are word break characters, but should be left - # in TEXT when it is passed to the completion function. The shell uses - # this to help determine what kind of completing to do. - @rl_special_prefixes = nil - - # If non-zero, then disallow duplicates in the matches. - @rl_ignore_completion_duplicates = true - - # Non-zero means that the results of the matches are to be treated - # as filenames. This is ALWAYS zero on entry, and can only be changed - # within a completion entry finder function. - @rl_filename_completion_desired = false - - # Non-zero means that the results of the matches are to be quoted using - # double quotes (or an application-specific quoting mechanism) if the - # filename contains any characters in rl_filename_quote_chars. This is - # ALWAYS non-zero on entry, and can only be changed within a completion - # entry finder function. - @rl_filename_quoting_desired = true - - # This function, if defined, is called by the completer when real - # filename completion is done, after all the matching names have been - # generated. It is passed a (char**) known as matches in the code below. - # It consists of a NULL-terminated array of pointers to potential - # matching strings. The 1st element (matches[0]) is the maximal - # substring that is common to all matches. This function can re-arrange - # the list of matches as required, but all elements of the array must be - # free()'d if they are deleted. The main intent of this function is - # to implement FIGNORE a la SunOS csh. - @rl_ignore_some_completions_function = nil - - # Set to a function to quote a filename in an application-specific fashion. - # Called with the text to quote, the type of match found (single or multiple) - # and a pointer to the quoting character to be used, which the function can - # reset if desired. - #rl_filename_quoting_function = rl_quote_filename - - # Function to call to remove quoting characters from a filename. Called - # before completion is attempted, so the embedded quotes do not interfere - # with matching names in the file system. Readline doesn't do anything - # with this it's set only by applications. - @rl_filename_dequoting_function = nil - - # Function to call to decide whether or not a word break character is - # quoted. If a character is quoted, it does not break words for the - # completer. - @rl_char_is_quoted_p = nil - - # If non-zero, the completion functions don't append anything except a - # possible closing quote. This is set to 0 by rl_complete_internal and - # may be changed by an application-specific completion function. - @rl_completion_suppress_append = false - - # Character appended to completed words when at the end of the line. The - # default is a space. - @rl_completion_append_character = ' ' - - # If non-zero, the completion functions don't append any closing quote. - # This is set to 0 by rl_complete_internal and may be changed by an - # application-specific completion function. - @rl_completion_suppress_quote = false - - # Set to any quote character readline thinks it finds before any application - # completion function is called. - @rl_completion_quote_character = 0 - - # Set to a non-zero value if readline found quoting anywhere in the word to - # be completed set before any application completion function is called. - @rl_completion_found_quote = false - - # If non-zero, a slash will be appended to completed filenames that are - # symbolic links to directory names, subject to the value of the - # mark-directories variable (which is user-settable). This exists so - # that application completion functions can override the user's preference - # (set via the mark-symlinked-directories variable) if appropriate. - # It's set to the value of _rl_complete_mark_symlink_dirs in - # rl_complete_internal before any application-specific completion - # function is called, so without that function doing anything, the user's - # preferences are honored. - @rl_completion_mark_symlink_dirs = false - - # If non-zero, inhibit completion (temporarily). - @rl_inhibit_completion = false - - # Variables local to this file. - - # Local variable states what happened during the last completion attempt. - @completion_changed_buffer = nil - - # Non-zero means treat 0200 bit in terminal input as Meta bit. - @_rl_meta_flag = false - - # Stack of previous values of parsing_conditionalized_out. - @if_stack = [] - @if_stack_depth = 0 - - - # The last key bindings file read. - @last_readline_init_file = nil - - # The file we're currently reading key bindings from. - @current_readline_init_file = nil - @current_readline_init_include_level = 0 - @current_readline_init_lineno = 0 - - ENV["HOME"] ||= "#{ENV["HOMEDRIVE"]}#{ENV["HOMEPATH"]}" - if !File.directory? ENV["HOME"] - raise RuntimeError.new("HOME environment variable (or HOMEDRIVE and HOMEPATH) must be set and point to a directory") - end - - @directory = nil - @filename = nil - @dirname = nil - @users_dirname = nil - @filename_len = 0 - - attr_accessor :rl_attempted_completion_function,:rl_deprep_term_function, - :rl_event_hook,:rl_attempted_completion_over,:rl_basic_quote_characters, - :rl_basic_word_break_characters,:rl_completer_quote_characters, - :rl_completer_word_break_characters,:rl_completion_append_character, - :rl_filename_quote_characters,:rl_instream,:rl_library_version,:rl_outstream, - :rl_readline_name,:history_length,:history_base,:rl_point - - module_function - - # Okay, now we write the entry_function for filename completion. In the - # general case. Note that completion in the shell is a little different - # because of all the pathnames that must be followed when looking up the - # completion for a command. - def rl_filename_completion_function(text, state) - # If we don't have any state, then do some initialization. - if (state == 0) - # If we were interrupted before closing the directory or reading - #all of its contents, close it. - if(@directory) - @directory.close - @directory = nil - end - - text.delete!(0.chr) - if text.length == 0 - @dirname = "." - @filename = "" - elsif text.rindex(File::SEPARATOR) == text.length-1 - @dirname = text - @filename = "" - else - @dirname, @filename = File.split(text) - - # This preserves the "./" when the user types "./dirname". - if @dirname == "." && text[0,2] == ".#{File::SEPARATOR}" - @dirname += File::SEPARATOR - end - end - - # We aren't done yet. We also support the "~user" syntax. - - # Save the version of the directory that the user typed. - @users_dirname = @dirname.dup - - if (@dirname[0,1] == '~') - @dirname = File.expand_path(@dirname) - end - - # The directory completion hook should perform any necessary - # dequoting. - if (@rl_directory_completion_hook && send(rl_directory_completion_hook,@dirname)) - @users_dirname = @dirname.dup - elsif (@rl_completion_found_quote && @rl_filename_dequoting_function) - # delete single and double quotes - temp = send(@rl_filename_dequoting_function, @users_dirname, @rl_completion_quote_character) - @users_dirname = temp - @dirname = @users_dirname.dup - end - - begin - @directory = Dir.new(@dirname) - rescue Errno::ENOENT, Errno::ENOTDIR, Errno::EACCES - end - - # Now dequote a non-null filename. - if (@filename && @filename.length>0 && @rl_completion_found_quote && @rl_filename_dequoting_function) - # delete single and double quotes - temp = send(@rl_filename_dequoting_function, @filename, @rl_completion_quote_character) - @filename = temp - end - - @filename_len = @filename.length - @rl_filename_completion_desired = true - end - - # At this point we should entertain the possibility of hacking wildcarded - # filenames, like /usr/man/man/te. If the directory name - # contains globbing characters, then build an array of directories, and - # then map over that list while completing. - # *** UNIMPLEMENTED *** - - # Now that we have some state, we can read the directory. - entry = nil - while(@directory && (entry = @directory.read)) - d_name = entry - # Special case for no filename. If the user has disabled the - # `match-hidden-files' variable, skip filenames beginning with `.'. - #All other entries except "." and ".." match. - if (@filename_len == 0) - next if (!@_rl_match_hidden_files && d_name[0,1] == '.') - break if (d_name != '.' && d_name != '..') - else - # Otherwise, if these match up to the length of filename, then - # it is a match. - - if (@_rl_completion_case_fold) - break if d_name =~ /^#{Regexp.escape(@filename)}/i - else - break if d_name =~ /^#{Regexp.escape(@filename)}/ - end - end - end - - if entry.nil? - if @directory - @directory.close - @directory = nil - end - @dirname = nil - @filename = nil - @users_dirname = nil - - return nil - else - if (@dirname != '.') - if (@rl_complete_with_tilde_expansion && @users_dirname[0,1] == "~") - temp = @dirname - if(temp[-1,1] != File::SEPARATOR) - temp += File::SEPARATOR - end - else - temp = @users_dirname - if(temp[-1,1] != File::SEPARATOR) - temp += File::SEPARATOR - end - end - temp += entry - else - temp = entry.dup - end - return (temp) - end - end - - # A completion function for usernames. - # TEXT contains a partial username preceded by a random - # character (usually `~'). - def rl_username_completion_function(text, state) - return nil if RUBY_PLATFORM =~ /mswin|mingw/ - - if (state == 0) - first_char = text[0,1] - first_char_loc = (first_char == '~' ? 1 : 0) - - username = text[first_char_loc..-1] - namelen = username.length - Etc.setpwent() - end - - while (entry = Etc.getpwent()) - # Null usernames should result in all users as possible completions. - break if (namelen == 0 || entry.name =~ /^#{username}/ ) - end - - if entry.nil? - Etc.endpwent() - return nil - else - value = text.dup - value[first_char_loc..-1] = entry.name - - if (first_char == '~') - @rl_filename_completion_desired = true - end - - return (value) - end - end - - #************************************************************* - # - # Application-callable completion match generator functions - # - #************************************************************* - - # Return an array of (char *) which is a list of completions for TEXT. - # If there are no completions, return a NULL pointer. - # The first entry in the returned array is the substitution for TEXT. - # The remaining entries are the possible completions. - # The array is terminated with a NULL pointer. - # - # ENTRY_FUNCTION is a function of two args, and returns a (char *). - # The first argument is TEXT. - # The second is a state argument it should be zero on the first call, and - # non-zero on subsequent calls. It returns a NULL pointer to the caller - # when there are no more matches. - # - def rl_completion_matches(text, entry_function) - matches = 0 - match_list = [] - match_list[1] = nil - while (string = send(entry_function, text, matches)) - match_list[matches+=1] = string - match_list[matches+1] = nil - end - - # If there were any matches, then look through them finding out the - # lowest common denominator. That then becomes match_list[0]. - if (matches!=0) - compute_lcd_of_matches(match_list, matches, text) - else # There were no matches. - match_list = nil - end - return (match_list) - end - - def _rl_to_lower(char) - char.nil? ? nil : char.chr.downcase - end - - # Find the common prefix of the list of matches, and put it into - # matches[0]. - def compute_lcd_of_matches(match_list, matches, text) - # If only one match, just use that. Otherwise, compare each - # member of the list with the next, finding out where they - # stop matching. - if (matches == 1) - match_list[0] = match_list[1] - match_list[1] = nil - return 1 - end - - i = 1 - low = 100000 - while(i 1) - si += v - 1 - end - else - break if (c1 != c2) - end - si += 1 - end - else - si = 0 - while((c1 = match_list[i][si]) && - (c2 = match_list[i + 1][si])) - if !@rl_byte_oriented - if(!_rl_compare_chars(match_list[i],si,match_list[i+1],si)) - break - elsif ((v = _rl_get_char_len(match_list[i][si..-1])) > 1) - si += v - 1 - end - else - break if (c1 != c2) - end - si += 1 - end - end - - if (low > si) - low = si - end - i += 1 - end - - # If there were multiple matches, but none matched up to even the - # first character, and the user typed something, use that as the - # value of matches[0]. - if (low == 0 && text && text.length>0 ) - match_list[0] = text.dup - else - # XXX - this might need changes in the presence of multibyte chars - - # If we are ignoring case, try to preserve the case of the string - # the user typed in the face of multiple matches differing in case. - if (@_rl_completion_case_fold) - - # We're making an assumption here: - # IF we're completing filenames AND - # the application has defined a filename dequoting function AND - # we found a quote character AND - # the application has requested filename quoting - # THEN - # we assume that TEXT was dequoted before checking against - # the file system and needs to be dequoted here before we - # check against the list of matches - # FI - if (@rl_filename_completion_desired && - @rl_filename_dequoting_function && - @rl_completion_found_quote && - @rl_filename_quoting_desired) - - dtext = send(@rl_filename_dequoting_function,text, @rl_completion_quote_character) - text = dtext - end - - # sort the list to get consistent answers. - match_list = [match_list[0]] + match_list[1..-1].sort - - si = text.length - if (si <= low) - for i in 1 .. matches - if match_list[i][0,si] == text - match_list[0] = match_list[i][0,low] - break - end - # no casematch, use first entry - if (i > matches) - match_list[0] = match_list[1][0,low] - end - end - else - # otherwise, just use the text the user typed. - match_list[0] = text[0,low] - end - else - match_list[0] = match_list[1][0,low] - end - end - - return matches - end - - - # This is a NOOP until the rest of Vi-mode is working. - def rl_vi_editing_mode(count, key) - 0 - end - - # Switching from one mode to the other really just involves - # switching keymaps. - def rl_vi_insertion_mode(count, key) - @_rl_keymap = @vi_insertion_keymap - @_rl_vi_last_key_before_insert = key - 0 - end - - def rl_emacs_editing_mode(count, key) - @rl_editing_mode = @emacs_mode - _rl_set_insert_mode(RL_IM_INSERT, 1) # emacs mode default is insert mode - @_rl_keymap = @emacs_standard_keymap - 0 - end - - # Function for the rest of the library to use to set insert/overwrite mode. - def _rl_set_insert_mode(im, force) - @rl_insert_mode = im - end - - # Toggle overwrite mode. A positive explicit argument selects overwrite - # mode. A negative or zero explicit argument selects insert mode. - def rl_overwrite_mode(count, key) - if (!@rl_explicit_arg) - _rl_set_insert_mode(@rl_insert_mode ^ 1, 0) - elsif (count > 0) - _rl_set_insert_mode(RL_IM_OVERWRITE, 0) - else - _rl_set_insert_mode(RL_IM_INSERT, 0) - end - 0 - end - - - # A function for simple tilde expansion. - def rl_tilde_expand(ignore, key) - _end = @rl_point - start = _end - 1 - - if (@rl_point == @rl_end && @rl_line_buffer[@rl_point,1] == '~' ) - homedir = File.expand_path("~") - _rl_replace_text(homedir, start, _end) - return (0) - elsif (@rl_line_buffer[start,1] != '~') - while(!whitespace(@rl_line_buffer[start,1]) && start >= 0) - start -= 1 - end - start+=1 - end - - _end = start - begin - _end+=1 - end while(!whitespace(@rl_line_buffer[_end,1]) && _end < @rl_end) - - if (whitespace(@rl_line_buffer[_end,1]) || _end >= @rl_end) - _end-=1 - end - - # If the first character of the current word is a tilde, perform - #tilde expansion and insert the result. If not a tilde, do - # nothing. - if (@rl_line_buffer[start,1] == '~') - - len = _end - start + 1 - temp = @rl_line_buffer[start,len] - homedir = File.expand_path(temp) - temp = nil - - _rl_replace_text(homedir, start, _end) - end - 0 - end - - # Clean up the terminal and readline state after catching a signal, before - # resending it to the calling application. - def rl_cleanup_after_signal() - _rl_clean_up_for_exit() - if (@rl_deprep_term_function) - send(@rl_deprep_term_function) - end - rl_clear_pending_input() - rl_clear_signals() - end - - def _rl_clean_up_for_exit() - if @readline_echoing_p - _rl_move_vert(@_rl_vis_botlin) - @_rl_vis_botlin = 0 - @rl_outstream.flush - rl_restart_output(1, 0) - end - end - - # Move the cursor from _rl_last_c_pos to NEW, which are buffer indices. - # (Well, when we don't have multibyte characters, _rl_last_c_pos is a - # buffer index.) - # DATA is the contents of the screen line of interest; i.e., where - # the movement is being done. - def _rl_move_cursor_relative(new, data, start=0) - woff = w_offset(@_rl_last_v_pos, @wrap_offset) - cpos = @_rl_last_c_pos - - if !@rl_byte_oriented - dpos = _rl_col_width(data, start, start+new) - - # Use NEW when comparing against the last invisible character in the - # prompt string, since they're both buffer indices and DPOS is a desired - # display position. - if (new > @prompt_last_invisible) # XXX - don't use woff here - dpos -= woff - # Since this will be assigned to _rl_last_c_pos at the end (more - # precisely, _rl_last_c_pos == dpos when this function returns), - # let the caller know. - @cpos_adjusted = true - end - else - dpos = new - end - # If we don't have to do anything, then return. - if (cpos == dpos) - return - end - - if @hConsoleHandle - csbi = Fiddle::Pointer.malloc(24) - @GetConsoleScreenBufferInfo.Call(@hConsoleHandle,csbi) - x,y = csbi[4,4].unpack('SS') - x = dpos - @SetConsoleCursorPosition.Call(@hConsoleHandle,y*65536+x) - @_rl_last_c_pos = dpos - return - end - - # It may be faster to output a CR, and then move forwards instead - # of moving backwards. - # i == current physical cursor position. - if !@rl_byte_oriented - i = @_rl_last_c_pos - else - i = @_rl_last_c_pos - woff - end - - if (dpos == 0 || cr_faster(dpos, @_rl_last_c_pos) || - (@_rl_term_autowrap && i == @_rl_screenwidth)) - @rl_outstream.write(@_rl_term_cr) - cpos = @_rl_last_c_pos = 0 - end - - if (cpos < dpos) - # Move the cursor forward. We do it by printing the command - # to move the cursor forward if there is one, else print that - # portion of the output buffer again. Which is cheaper? - - # The above comment is left here for posterity. It is faster - # to print one character (non-control) than to print a control - # sequence telling the terminal to move forward one character. - # That kind of control is for people who don't know what the - # data is underneath the cursor. - - # However, we need a handle on where the current display position is - # in the buffer for the immediately preceding comment to be true. - # In multibyte locales, we don't currently have that info available. - # Without it, we don't know where the data we have to display begins - # in the buffer and we have to go back to the beginning of the screen - # line. In this case, we can use the terminal sequence to move forward - # if it's available. - if !@rl_byte_oriented - if (@_rl_term_forward_char) - @rl_outstream.write(@_rl_term_forward_char * (dpos-cpos)) - else - @rl_outstream.write(@_rl_term_cr) - @rl_outstream.write(data[start,new]) - end - else - @rl_outstream.write(data[start+cpos,new-cpos]) - end - elsif (cpos > dpos) - _rl_backspace(cpos - dpos) - end - @_rl_last_c_pos = dpos - end - - - # PWP: move the cursor up or down. - def _rl_move_vert(to) - if (@_rl_last_v_pos == to || to > @_rl_screenheight) - return - end - - if ((delta = to - @_rl_last_v_pos) > 0) - @rl_outstream.write("\n"*delta) - @rl_outstream.write("\r") - @_rl_last_c_pos = 0 - else - if(@_rl_term_up) - @rl_outstream.write(@_rl_term_up*(-delta)) - end - end - @_rl_last_v_pos = to # Now TO is here - end - - def rl_setstate(x) - (@rl_readline_state |= (x)) - end - - def rl_unsetstate(x) - (@rl_readline_state &= ~(x)) - end - - def rl_isstate(x) - (@rl_readline_state & (x))!=0 - end - - # Clear any pending input pushed with rl_execute_next() - def rl_clear_pending_input() - @rl_pending_input = 0 - rl_unsetstate(RL_STATE_INPUTPENDING) - 0 - end - - def rl_restart_output(count, key) - 0 - end - - def rl_clear_signals() - if Signal.list['WINCH'] - trap "WINCH",@def_proc - end - end - - def rl_set_signals() - if Signal.list['WINCH'] - @def_proc = trap "WINCH",Proc.new{rl_sigwinch_handler(0)} - end - end - - # Current implementation: - # \001 (^A) start non-visible characters - # \002 (^B) end non-visible characters - # all characters except \001 and \002 (following a \001) are copied to - # the returned string all characters except those between \001 and - # \002 are assumed to be `visible'. - def expand_prompt(pmt) - # Short-circuit if we can. - if (@rl_byte_oriented && pmt[RL_PROMPT_START_IGNORE].nil?) - r = pmt.dup - lp = r.length - lip = 0 - niflp = 0 - vlp = lp - return [r,lp,lip,niflp,vlp] - end - - l = pmt.length - ret = '' - invfl = 0 # invisible chars in first line of prompt - invflset = 0 # we only want to set invfl once - - igstart = 0 - rl = 0 - ignoring = false - last = ninvis = physchars = 0 - for pi in 0 ... pmt.length - # This code strips the invisible character string markers - #RL_PROMPT_START_IGNORE and RL_PROMPT_END_IGNORE - if (!ignoring && pmt[pi,1] == RL_PROMPT_START_IGNORE) # XXX - check ignoring? - ignoring = true - igstart = pi - next - elsif (ignoring && pmt[pi,1] == RL_PROMPT_END_IGNORE) - ignoring = false - if (pi != (igstart + 1)) - last = ret.length - 1 - end - next - else - if !@rl_byte_oriented - pind = pi - ind = _rl_find_next_mbchar(pmt, pind, 1, MB_FIND_NONZERO) - l = ind - pind - while (l>0) - l-=1 - ret << pmt[pi] - pi += 1 - end - if (!ignoring) - rl += ind - pind - physchars += _rl_col_width(pmt, pind, ind) - else - ninvis += ind - pind - end - pi-=1 # compensate for later increment - else - ret << pmt[pi] - if (!ignoring) - rl+=1 # visible length byte counter - physchars+=1 - else - ninvis+=1 # invisible chars byte counter - end - - if (invflset == 0 && rl >= @_rl_screenwidth) - invfl = ninvis - invflset = 1 - end - end - end - end - - if (rl < @_rl_screenwidth) - invfl = ninvis - end - lp = rl - lip = last - niflp = invfl - vlp = physchars - return [ret,lp,lip,niflp,vlp] - end - - - #* - #* Expand the prompt string into the various display components, if - #* necessary. - #* - #* local_prompt = expanded last line of string in rl_display_prompt - #* (portion after the final newline) - #* local_prompt_prefix = portion before last newline of rl_display_prompt, - #* expanded via expand_prompt - #* prompt_visible_length = number of visible characters in local_prompt - #* prompt_prefix_length = number of visible characters in local_prompt_prefix - #* - #* This function is called once per call to readline(). It may also be - #* called arbitrarily to expand the primary prompt. - #* - #* The return value is the number of visible characters on the last line - #* of the (possibly multi-line) prompt. - #* - def rl_expand_prompt(prompt) - @local_prompt = @local_prompt_prefix = nil - @local_prompt_len = 0 - @prompt_last_invisible = @prompt_invis_chars_first_line = 0 - @prompt_visible_length = @prompt_physical_chars = 0 - - if (prompt.nil? || prompt == '') - return (0) - end - - pi = prompt.rindex("\n") - if pi.nil? - # The prompt is only one logical line, though it might wrap. - @local_prompt,@prompt_visible_length,@prompt_last_invisible,@prompt_invis_chars_first_line,@prompt_physical_chars = expand_prompt(prompt) - @local_prompt_prefix = nil - @local_prompt_len = @local_prompt ? @local_prompt.length : 0 - return (@prompt_visible_length) - else - # The prompt spans multiple lines. - pi += 1 if prompt.length!=pi+1 - t = pi - @local_prompt,@prompt_visible_length,@prompt_last_invisible,@prompt_invis_chars_first_line,@prompt_physical_chars = expand_prompt(prompt[pi..-1]) - c = prompt[t] - prompt[t] = 0.chr - # The portion of the prompt string up to and including the - #final newline is now null-terminated. - @local_prompt_prefix,@prompt_prefix_length,_,_, = expand_prompt(prompt) - prompt[t] = c - @local_prompt_len = @local_prompt ? @local_prompt.length : 0 - return (@prompt_prefix_length) - end - end - - # Set up the prompt and expand it. Called from readline() and - # rl_callback_handler_install (). - def rl_set_prompt(prompt) - @rl_prompt = prompt ? prompt.dup : nil - @rl_display_prompt = @rl_prompt ? @rl_prompt : "" - @rl_visible_prompt_length = rl_expand_prompt(@rl_prompt) - 0 - end - - def get_term_capabilities(buffer) - hash = {} - `infocmp -C`.split(':').select{|x| x =~ /(.*)=(.*)/ and hash[$1]=$2.gsub("\\r", "\r").gsub('\\E',"\e").gsub(/\^(.)/){($1[0].ord ^ ((?a..?z).include?($1[0]) ? 0x60 : 0x40)).chr}} - @_rl_term_at7 = hash["@7"] - @_rl_term_DC = hash["DC"] - @_rl_term_IC = hash["IC"] - @_rl_term_clreol = hash["ce"] - @_rl_term_clrpag = hash["cl"] - @_rl_term_cr = hash["cr"] - @_rl_term_dc = hash["dc"] - @_rl_term_ei = hash["ei"] - @_rl_term_ic = hash["ic"] - @_rl_term_im = hash["im"] - @_rl_term_kD = hash["kD"] - @_rl_term_kH = hash["kH"] - @_rl_term_kI = hash["kI"] - @_rl_term_kd = hash["kd"] - @_rl_term_ke = hash["ke"] - @_rl_term_kh = hash["kh"] - @_rl_term_kl = hash["kl"] - @_rl_term_kr = hash["kr"] - @_rl_term_ks = hash["ks"] - @_rl_term_ku = hash["ku"] - @_rl_term_backspace = hash["le"] - @_rl_term_mm = hash["mm"] - @_rl_term_mo = hash["mo"] - @_rl_term_forward_char = hash["nd"] - @_rl_term_pc = hash["pc"] - @_rl_term_up = hash["up"] - @_rl_visible_bell = hash["vb"] - @_rl_term_vs = hash["vs"] - @_rl_term_ve = hash["ve"] - @tcap_initialized = true - end - - # Set the environment variables LINES and COLUMNS to lines and cols, - # respectively. - def sh_set_lines_and_columns(lines, cols) - ENV["LINES"] = lines.to_s - ENV["COLUMNS"] = cols.to_s - end - - # Get readline's idea of the screen size. TTY is a file descriptor open - # to the terminal. If IGNORE_ENV is true, we do not pay attention to the - # values of $LINES and $COLUMNS. The tests for TERM_STRING_BUFFER being - # non-null serve to check whether or not we have initialized termcap. - def _rl_get_screen_size(tty, ignore_env) - - if @hConsoleHandle - csbi = Fiddle::Pointer.malloc(24) - @GetConsoleScreenBufferInfo.Call(@hConsoleHandle,csbi) - wc,wr = csbi[0,4].unpack('SS') - # wr,wc, = `mode con`.scan(/\d+\n/).map{|x| x.to_i} - @_rl_screenwidth = wc - @_rl_screenheight = wr - else - wr, wc = 0 - retry_if_interrupted do - wr, wc = `stty size`.split(' ').map { |x| x.to_i } - end - @_rl_screenwidth = wc - @_rl_screenheight = wr - if ignore_env==0 && ENV['LINES'] - @_rl_screenheight = ENV['LINES'].to_i - end - if ignore_env==0 && ENV['COLUMNS'] - @_rl_screenwidth = ENV['COLUMNS'].to_i - end - end - - # If all else fails, default to 80x24 terminal. - if @_rl_screenwidth.nil? || @_rl_screenwidth <= 1 - @_rl_screenwidth = 80 - end - if @_rl_screenheight.nil? || @_rl_screenheight <= 0 - @_rl_screenheight = 24 - end - # If we're being compiled as part of bash, set the environment - # variables $LINES and $COLUMNS to new values. Otherwise, just - # do a pair of putenv () or setenv () calls. - sh_set_lines_and_columns(@_rl_screenheight, @_rl_screenwidth) - - if !@_rl_term_autowrap - @_rl_screenwidth-=1 - end - @_rl_screenchars = @_rl_screenwidth * @_rl_screenheight - end - - def tgetflag(name) - `infocmp -C -r`.scan(/\w{2}/).include?(name) - end - - # Return the function (or macro) definition which would be invoked via - # KEYSEQ if executed in MAP. If MAP is NULL, then the current keymap is - # used. TYPE, if non-NULL, is a pointer to an int which will receive the - # type of the object pointed to. One of ISFUNC (function), ISKMAP (keymap), - # or ISMACR (macro). - def rl_function_of_keyseq(keyseq, map, type) - map ||= @_rl_keymap - map[keyseq] - end - - # Bind the key sequence represented by the string KEYSEQ to - # the arbitrary pointer DATA. TYPE says what kind of data is - # pointed to by DATA, right now this can be a function (ISFUNC), - # a macro (ISMACR), or a keymap (ISKMAP). This makes new keymaps - # as necessary. The initial place to do bindings is in MAP. - def rl_generic_bind(type, keyseq, data, map) - map[keyseq] = data - 0 - end - - # Bind the key sequence represented by the string KEYSEQ to - # FUNCTION. This makes new keymaps as necessary. The initial - # place to do bindings is in MAP. - def rl_bind_keyseq_in_map(keyseq, function, map) - rl_generic_bind(ISFUNC, keyseq, function, map) - end - - - # Bind key sequence KEYSEQ to DEFAULT_FUNC if KEYSEQ is unbound. Right - # now, this is always used to attempt to bind the arrow keys, hence the - # check for rl_vi_movement_mode. - def rl_bind_keyseq_if_unbound_in_map(keyseq, default_func, kmap) - if (keyseq) - func = rl_function_of_keyseq(keyseq, kmap, nil) - if (func.nil? || func == :rl_vi_movement_mode) - return (rl_bind_keyseq_in_map(keyseq, default_func, kmap)) - else - return 1 - end - end - 0 - end - - def rl_bind_keyseq_if_unbound(keyseq, default_func) - rl_bind_keyseq_if_unbound_in_map(keyseq, default_func, @_rl_keymap) - end - - # Bind the arrow key sequences from the termcap description in MAP. - def bind_termcap_arrow_keys(map) - xkeymap = @_rl_keymap - @_rl_keymap = map - - rl_bind_keyseq_if_unbound(@_rl_term_ku, :rl_get_previous_history) - rl_bind_keyseq_if_unbound(@_rl_term_kd, :rl_get_next_history) - rl_bind_keyseq_if_unbound(@_rl_term_kr, :rl_forward_char) - rl_bind_keyseq_if_unbound(@_rl_term_kl, :rl_backward_char) - - rl_bind_keyseq_if_unbound(@_rl_term_kh, :rl_beg_of_line) # Home - rl_bind_keyseq_if_unbound(@_rl_term_at7, :rl_end_of_line) # End - - rl_bind_keyseq_if_unbound(@_rl_term_kD, :rl_delete) - rl_bind_keyseq_if_unbound(@_rl_term_kI, :rl_overwrite_mode) - - @_rl_keymap = xkeymap - end - - def _rl_init_terminal_io(terminal_name) - term = terminal_name ? terminal_name : ENV["TERM"] - @_rl_term_clrpag = @_rl_term_cr = @_rl_term_clreol = nil - tty = @rl_instream ? @rl_instream.fileno : 0 - - if no_terminal? - term = "dumb" - @_rl_bind_stty_chars = false - end - - @term_string_buffer ||= 0.chr * 2032 - - @term_buffer ||= 0.chr * 4080 - - buffer = @term_string_buffer - - tgetent_ret = (term != "dumb") ? 1 : -1 - - if (tgetent_ret <= 0) - buffer = @term_buffer = @term_string_buffer = nil - - @_rl_term_autowrap = false # used by _rl_get_screen_size - - # Allow calling application to set default height and width, using - #rl_set_screen_size - if (@_rl_screenwidth <= 0 || @_rl_screenheight <= 0) - _rl_get_screen_size(tty, 0) - end - - # Defaults. - if (@_rl_screenwidth <= 0 || @_rl_screenheight <= 0) - @_rl_screenwidth = 79 - @_rl_screenheight = 24 - end - - # Everything below here is used by the redisplay code (tputs). - @_rl_screenchars = @_rl_screenwidth * @_rl_screenheight - @_rl_term_cr = "\r" - @_rl_term_im = @_rl_term_ei = @_rl_term_ic = @_rl_term_IC = nil - @_rl_term_up = @_rl_term_dc = @_rl_term_DC = @_rl_visible_bell = nil - @_rl_term_ku = @_rl_term_kd = @_rl_term_kl = @_rl_term_kr = nil - @_rl_term_kh = @_rl_term_kH = @_rl_term_kI = @_rl_term_kD = nil - @_rl_term_ks = @_rl_term_ke = @_rl_term_at7 = nil - @_rl_term_mm = @_rl_term_mo = nil - @_rl_term_ve = @_rl_term_vs = nil - @_rl_term_forward_char = nil - @_rl_terminal_can_insert = @term_has_meta = false - - # Reasonable defaults for tgoto(). Readline currently only uses - # tgoto if _rl_term_IC or _rl_term_DC is defined, but just in case we - # change that later... - @_rl_term_backspace = "\b" - - return 0 - end - - get_term_capabilities(buffer) - - @_rl_term_cr ||= "\r" - @_rl_term_autowrap = !!(tgetflag("am") && tgetflag("xn")) - - # Allow calling application to set default height and width, using - # rl_set_screen_size - if (@_rl_screenwidth <= 0 || @_rl_screenheight <= 0) - _rl_get_screen_size(tty, 0) - end - - # Check to see if this terminal has a meta key and clear the capability - # variables if there is none. - @term_has_meta = !!(tgetflag("km") || tgetflag("MT")) - if !@term_has_meta - @_rl_term_mm = @_rl_term_mo = nil - end - - # Attempt to find and bind the arrow keys. Do not override already - # bound keys in an overzealous attempt, however. - - bind_termcap_arrow_keys(@emacs_standard_keymap) - - bind_termcap_arrow_keys(@vi_movement_keymap) - bind_termcap_arrow_keys(@vi_insertion_keymap) - - return 0 - end - - # New public way to set the system default editing chars to their readline - # equivalents. - def rl_tty_set_default_bindings(kmap) - h = {} - retry_if_interrupted do - h = Hash[*`stty -a`.scan(/(\w+) = ([^;]+);/).flatten] - end - h.each {|k,v| v.gsub!(/\^(.)/){($1[0].ord ^ ((?a..?z).include?($1[0]) ? 0x60 : 0x40)).chr}} - kmap[h['erase']] = :rl_rubout - kmap[h['kill']] = :rl_unix_line_discard - kmap[h['werase']] = :rl_unix_word_rubout - kmap[h['lnext']] = :rl_quoted_insert - end - - # If this system allows us to look at the values of the regular - # input editing characters, then bind them to their readline - # equivalents, iff the characters are not bound to keymaps. - def readline_default_bindings() - if @_rl_bind_stty_chars - rl_tty_set_default_bindings(@_rl_keymap) - end - end - - def _rl_init_eightbit() - - end - - - # Do key bindings from a file. If FILENAME is NULL it defaults - # to the first non-null filename from this list: - # 1. the filename used for the previous call - # 2. the value of the shell variable `INPUTRC' - # 3. ~/.inputrc - # 4. /etc/inputrc - # If the file existed and could be opened and read, 0 is returned, - # otherwise errno is returned. - def rl_read_init_file(filename) - # Default the filename. - filename ||= @last_readline_init_file - filename ||= ENV["INPUTRC"] - if (filename.nil? || filename == '') - filename = DEFAULT_INPUTRC - # Try to read DEFAULT_INPUTRC; fall back to SYS_INPUTRC on failure - if (_rl_read_init_file(filename, 0) == 0) - return 0 - end - filename = SYS_INPUTRC - end - - if RUBY_PLATFORM =~ /mswin|mingw/ - return 0 if (_rl_read_init_file(filename, 0) == 0) - filename = "~/_inputrc" - end - return (_rl_read_init_file(filename, 0)) - end - - def _rl_read_init_file(filename, include_level) - @current_readline_init_file = filename - @current_readline_init_include_level = include_level - - openname = File.expand_path(filename) - begin - buffer = nil - File.open(openname) do |file| - buffer = file.read - end - rescue - return -1 - end - - if (include_level == 0 && filename != @last_readline_init_file) - @last_readline_init_file = filename.dup - end - - @currently_reading_init_file = true - - # Loop over the lines in the file. Lines that start with `#' are - # comments; all other lines are commands for readline initialization. - @current_readline_init_lineno = 1 - - buffer.each_line do |line| - line.strip! - next if line =~ /^#/ - next if line == '' - rl_parse_and_bind(line) - end - - return 0 - end - - # Push _rl_parsing_conditionalized_out, and set parser state based - # on ARGS. - def parser_if(args) - # Push parser state. - @if_stack << @_rl_parsing_conditionalized_out - - # If parsing is turned off, then nothing can turn it back on except - # for finding the matching endif. In that case, return right now. - if @_rl_parsing_conditionalized_out - return 0 - end - - args.downcase! - # Handle "$if term=foo" and "$if mode=emacs" constructs. If this - # isn't term=foo, or mode=emacs, then check to see if the first - # word in ARGS is the same as the value stored in rl_readline_name. - if (@rl_terminal_name && args =~ /^term=/) - # Terminals like "aaa-60" are equivalent to "aaa". - tname = @rl_terminal_name.downcase.gsub(/-.*$/,'') - - # Test the `long' and `short' forms of the terminal name so that - #if someone has a `sun-cmd' and does not want to have bindings - #that will be executed if the terminal is a `sun', they can put - #`$if term=sun-cmd' into their .inputrc. - @_rl_parsing_conditionalized_out = (args[5..-1] != tname && args[5..-1] != @rl_terminal_name.downcase) - elsif args =~ /^mode=/ - if args[5..-1] == "emacs" - mode = @emacs_mode - elsif args[5..-1] == "vi" - mode = @vi_mode - else - mode = @no_mode - end - @_rl_parsing_conditionalized_out = (mode != @rl_editing_mode) - # Check to see if the first word in ARGS is the same as the - # value stored in rl_readline_name. - elsif (args == @rl_readline_name) - @_rl_parsing_conditionalized_out = false - else - @_rl_parsing_conditionalized_out = true - end - return 0 - end - - # Invert the current parser state if there is anything on the stack. - def parser_else(args) - if @if_stack.empty? - #_rl_init_file_error ("$else found without matching $if") - return 0 - end - - # Check the previous (n) levels of the stack to make sure that - # we haven't previously turned off parsing. - return 0 if @if_stack.detect {|x| x } - - # Invert the state of parsing if at top level. - @_rl_parsing_conditionalized_out = !@_rl_parsing_conditionalized_out - return 0 - end - - # Terminate a conditional, popping the value of - # _rl_parsing_conditionalized_out from the stack. - def parser_endif(args) - if (@if_stack.length>0) - @_rl_parsing_conditionalized_out = @if_stack.pop - else - #_rl_init_file_error ("$endif without matching $if") - end - 0 - end - - def parser_include(args) - return 0 if (@_rl_parsing_conditionalized_out) - - old_init_file = @current_readline_init_file - old_line_number = @current_readline_init_lineno - old_include_level = @current_readline_init_include_level - - r = _rl_read_init_file(args, old_include_level + 1) - - @current_readline_init_file = old_init_file - @current_readline_init_lineno = old_line_number - @current_readline_init_include_level = old_include_level - - return r - end - - # Handle a parser directive. STATEMENT is the line of the directive - # without any leading `$'. - def handle_parser_directive(statement) - - directive,args = statement.split(' ') - - case directive.downcase - when "if" - parser_if(args) - return 0 - when "endif" - parser_endif(args) - return 0 - when "else" - parser_else(args) - return 0 - when "include" - parser_include(args) - return 0 - end - - #_rl_init_file_error("unknown parser directive") - return 1 - end - - - def rl_variable_bind(name,value) - case name - when "bind-tty-special-chars" - @_rl_bind_stty_chars = value.nil? || value=='1' || value == 'on' - when "blink-matching-paren" - @rl_blink_matching_paren = value.nil? || value=='1' || value == 'on' - when "byte-oriented" - @rl_byte_oriented = value.nil? || value=='1' || value == 'on' - when "completion-ignore-case" - @_rl_completion_case_fold = value.nil? || value=='1' || value == 'on' - when "convert-meta" - @_rl_convert_meta_chars_to_ascii = value.nil? || value=='1' || value == 'on' - when "disable-completion" - @rl_inhibit_completion = value.nil? || value=='1' || value == 'on' - when "enable-keypad" - @_rl_enable_keypad = value.nil? || value=='1' || value == 'on' - when "expand-tilde" - @rl_complete_with_tilde_expansion = value.nil? || value=='1' || value == 'on' - when "history-preserve-point" - @_rl_history_preserve_point = value.nil? || value=='1' || value == 'on' - when "horizontal-scroll-mode" - @_rl_horizontal_scroll_mode = value.nil? || value=='1' || value == 'on' - when "input-meta" - @_rl_meta_flag = value.nil? || value=='1' || value == 'on' - when "mark-directories" - @_rl_complete_mark_directories = value.nil? || value=='1' || value == 'on' - when "mark-modified-lines" - @_rl_mark_modified_lines = value.nil? || value=='1' || value == 'on' - when "mark-symlinked-directories" - @_rl_complete_mark_symlink_dirs = value.nil? || value=='1' || value == 'on' - when "match-hidden-files" - @_rl_match_hidden_files = value.nil? || value=='1' || value == 'on' - when "meta-flag" - @_rl_meta_flag = value.nil? || value=='1' || value == 'on' - when "output-meta" - @_rl_output_meta_chars = value.nil? || value=='1' || value == 'on' - when "page-completions" - @_rl_page_completions = value.nil? || value=='1' || value == 'on' - when "prefer-visible-bell" - @_rl_prefer_visible_bell = value.nil? || value=='1' || value == 'on' - when "print-completions-horizontally" - @_rl_print_completions_horizontally = value.nil? || value=='1' || value == 'on' - when "show-all-if-ambiguous" - @_rl_complete_show_all = value.nil? || value=='1' || value == 'on' - when "show-all-if-unmodified" - @_rl_complete_show_unmodified = value.nil? || value=='1' || value == 'on' - when "visible-stats" - @rl_visible_stats = value.nil? || value=='1' || value == 'on' - when "bell-style" - case value - when "none","off" - @_rl_bell_preference = NO_BELL - when "audible", "on" - @_rl_bell_preference = AUDIBLE_BELL - when "visible" - @_rl_bell_preference = VISIBLE_BELL - else - @_rl_bell_preference = AUDIBLE_BELL - end - when "comment-begin" - @_rl_comment_begin = value.dup - when "completion-query-items" - @rl_completion_query_items = value.to_i - when "editing-mode" - case value - when "vi" - # This is a NOOP until the rest of Vi-mode is working. - when "emacs" - @_rl_keymap = @emacs_standard_keymap - @rl_editing_mode = @emacs_mode - end - when "isearch-terminators" - @_rl_isearch_terminators = instance_eval(value) - when "keymap" - case value - when "emacs","emacs-standard","emacs-meta","emacs-ctlx" - @_rl_keymap = @emacs_standard_keymap - when "vi","vi-move","vi-command" - # This is a NOOP until the rest of Vi-mode is working. - when "vi-insert" - # This is a NOOP until the rest of Vi-mode is working. - end - end - end - - def rl_named_function(name) - case name - when "accept-line" - return :rl_newline - when "arrow-key-prefix" - return :rl_arrow_keys - when "backward-delete-char" - return :rl_rubout - when "character-search" - return :rl_char_search - when "character-search-backward" - return :rl_backward_char_search - when "copy-region-as-kill" - return :rl_copy_region_to_kill - when "delete-char" - return :rl_delete - when "delete-char-or-list" - return :rl_delete_or_show_completions - when "forward-backward-delete-char" - return :rl_rubout_or_delete - when "kill-whole-line" - return :rl_kill_full_line - when "next-history" - return :rl_get_next_history - when "non-incremental-forward-search-history" - return :rl_noninc_forward_search - when "non-incremental-reverse-search-history" - return :rl_noninc_reverse_search - when "non-incremental-forward-search-history-again" - return :rl_noninc_forward_search_again - when "non-incremental-reverse-search-history-again" - return :rl_noninc_reverse_search_again - when "redraw-current-line" - return :rl_refresh_line - when "previous-history" - return :rl_get_previous_history - when "self-insert" - return :rl_insert - when "undo" - return :rl_undo_command - when "beginning-of-line" - return :rl_beg_of_line - else - if name =~ /^[-a-z]+$/ - method = ('rl_' + name.gsub('-', '_')).to_sym - return method if respond_to?(method) - end - end - nil - end - - def rl_translate_keyseq(seq) - require 'strscan' - - ss = StringScanner.new(seq) - new_seq = '' - - until ss.eos? - char = ss.getch - next new_seq << char unless char == '\\' - - char = ss.getch - new_seq << case char - when 'a' - "\007" - when 'b' - "\b" - when 'd' - RUBOUT - when 'e' - ESC - when 'f' - "\f" - when 'n' - NEWLINE - when 'r' - RETURN - when 't' - TAB - when 'v' - 0x0B - when '\\' - '\\' - when 'x' - ss.scan(/\d\d/).to_i(16).chr - when '0'..'7' - ss.pos -= 1 - ss.scan(/\d\d\d/).to_i(8).chr - else - char - end - end - - new_seq - end - - # Bind KEY to FUNCTION. Returns non-zero if KEY is out of range. - def rl_bind_key(key, function) - @_rl_keymap[rl_translate_keyseq(key)] = function - @rl_binding_keymap = @_rl_keymap - 0 - end - - # Read the binding command from STRING and perform it. - # A key binding command looks like: Keyname: function-name\0, - # a variable binding command looks like: set variable value. - # A new-style keybinding looks like "\C-x\C-x": exchange-point-and-mark. - def rl_parse_and_bind(string) - - # If this is a parser directive, act on it. - if (string[0,1] == "$") - handle_parser_directive(string[1..-1]) - return 0 - end - - # If we aren't supposed to be parsing right now, then we're done. - return 0 if @_rl_parsing_conditionalized_out - - if string =~ /^set/i - _,var,value = string.downcase.split(' ') - rl_variable_bind(var, value) - return 0 - end - - if string =~ /"(.*)"\s*:\s*(.*)$/ - key, funname = $1, $2 - func = rl_named_function(funname) - rl_bind_key(key, func) if func - end - - 0 - end - - - def _rl_enable_meta_key() - if(@term_has_meta && @_rl_term_mm) - @_rl_out_stream.write(@_rl_term_mm) - end - end - - def rl_set_keymap_from_edit_mode() - if (@rl_editing_mode == @emacs_mode) - @_rl_keymap = @emacs_standard_keymap - elsif (@rl_editing_mode == @vi_mode) - @_rl_keymap = @vi_insertion_keymap - end - end - - def rl_get_keymap_name_from_edit_mode() - if (@rl_editing_mode == @emacs_mode) - "emacs" - elsif (@rl_editing_mode == @vi_mode) - "vi" - else - "none" - end - end - - # Bind some common arrow key sequences in MAP. - def bind_arrow_keys_internal(map) - xkeymap = @_rl_keymap - @_rl_keymap = map - - if RUBY_PLATFORM =~ /mswin|mingw/ - rl_bind_keyseq_if_unbound("\340H", :rl_get_previous_history) # Up - rl_bind_keyseq_if_unbound("\340P", :rl_get_next_history) # Down - rl_bind_keyseq_if_unbound("\340M", :rl_forward_char) # Right - rl_bind_keyseq_if_unbound("\340K", :rl_backward_char) # Left - rl_bind_keyseq_if_unbound("\340G", :rl_beg_of_line) # Home - rl_bind_keyseq_if_unbound("\340O", :rl_end_of_line) # End - rl_bind_keyseq_if_unbound("\340s", :rl_backward_word) # Ctrl-Left - rl_bind_keyseq_if_unbound("\340t", :rl_forward_word) # Ctrl-Right - rl_bind_keyseq_if_unbound("\340S", :rl_delete) # Delete - rl_bind_keyseq_if_unbound("\340R", :rl_overwrite_mode) # Insert - else - rl_bind_keyseq_if_unbound("\033[A", :rl_get_previous_history) - rl_bind_keyseq_if_unbound("\033[B", :rl_get_next_history) - rl_bind_keyseq_if_unbound("\033[C", :rl_forward_char) - rl_bind_keyseq_if_unbound("\033[D", :rl_backward_char) - rl_bind_keyseq_if_unbound("\033[H", :rl_beg_of_line) - rl_bind_keyseq_if_unbound("\033[F", :rl_end_of_line) - - rl_bind_keyseq_if_unbound("\033OA", :rl_get_previous_history) - rl_bind_keyseq_if_unbound("\033OB", :rl_get_next_history) - rl_bind_keyseq_if_unbound("\033OC", :rl_forward_char) - rl_bind_keyseq_if_unbound("\033OD", :rl_backward_char) - rl_bind_keyseq_if_unbound("\033OH", :rl_beg_of_line) - rl_bind_keyseq_if_unbound("\033OF", :rl_end_of_line) - end - - @_rl_keymap = xkeymap - end - - # Try and bind the common arrow key prefixes after giving termcap and - # the inputrc file a chance to bind them and create `real' keymaps - # for the arrow key prefix. - def bind_arrow_keys() - bind_arrow_keys_internal(@emacs_standard_keymap) - bind_arrow_keys_internal(@vi_movement_keymap) - bind_arrow_keys_internal(@vi_insertion_keymap) - end - - # Initialize the entire state of the world. - def readline_initialize_everything() - # Set up input and output if they are not already set up. - @rl_instream ||= $stdin - - @rl_outstream ||= $stdout - - # Bind _rl_in_stream and _rl_out_stream immediately. These values - # may change, but they may also be used before readline_internal () - # is called. - @_rl_in_stream = @rl_instream - @_rl_out_stream = @rl_outstream - - # Allocate data structures. - @rl_line_buffer = "" - - # Initialize the terminal interface. - @rl_terminal_name ||= ENV["TERM"] - _rl_init_terminal_io(@rl_terminal_name) - - # Bind tty characters to readline functions. - readline_default_bindings() - - # Decide whether we should automatically go into eight-bit mode. - _rl_init_eightbit() - - # Read in the init file. - rl_read_init_file(nil) - - # XXX - if (@_rl_horizontal_scroll_mode && @_rl_term_autowrap) - @_rl_screenwidth -= 1 - @_rl_screenchars -= @_rl_screenheight - end - - # Override the effect of any `set keymap' assignments in the - # inputrc file. - rl_set_keymap_from_edit_mode() - - # Try to bind a common arrow key prefix, if not already bound. - bind_arrow_keys() - - # Enable the meta key, if this terminal has one. - if @_rl_enable_meta - _rl_enable_meta_key() - end - - # If the completion parser's default word break characters haven't - # been set yet, then do so now. - @rl_completer_word_break_characters ||= @rl_basic_word_break_characters - end - - def _rl_init_line_state() - @rl_point = @rl_end = @rl_mark = 0 - @rl_line_buffer = "" - end - - # Set the history pointer back to the last entry in the history. - def _rl_start_using_history() - using_history() - @_rl_saved_line_for_history = nil - end - - - def cr_faster(new, cur) - (new + 1) < (cur - new) - end - - #* _rl_last_c_pos is an absolute cursor position in multibyte locales and a - # buffer index in others. This macro is used when deciding whether the - # current cursor position is in the middle of a prompt string containing - # invisible characters. - def prompt_ending_index() - if !@rl_byte_oriented - @prompt_physical_chars - else - (@prompt_last_invisible+1) - end - end - - # Initialize the VISIBLE_LINE and INVISIBLE_LINE arrays, and their associated - # arrays of line break markers. MINSIZE is the minimum size of VISIBLE_LINE - # and INVISIBLE_LINE; if it is greater than LINE_SIZE, LINE_SIZE is - # increased. If the lines have already been allocated, this ensures that - # they can hold at least MINSIZE characters. - def init_line_structures(minsize) - if @invisible_line.nil? # initialize it - if (@line_size < minsize) - @line_size = minsize - end - @visible_line = 0.chr * @line_size - @invisible_line = 0.chr * @line_size # 1.chr - elsif (@line_size < minsize) # ensure it can hold MINSIZE chars - @line_size *= 2 - if (@line_size < minsize) - @line_size = minsize - end - @visible_line << 0.chr * (@line_size - @visible_line.length) - @invisible_line << 1.chr * (@line_size - @invisible_line.length) - end - @visible_line[minsize,@line_size-minsize] = 0.chr * (@line_size-minsize) - @invisible_line[minsize,@line_size-minsize] = 1.chr * (@line_size-minsize) - - if @vis_lbreaks.nil? - @inv_lbreaks = [] - @vis_lbreaks = [] - @_rl_wrapped_line = [] - @inv_lbreaks[0] = @vis_lbreaks[0] = 0 - end - end - - # Return the history entry at the current position, as determined by - # history_offset. If there is no entry there, return a NULL pointer. - def current_history() - return ((@history_offset == @history_length) || @the_history.nil?) ? nil : @the_history[@history_offset] - end - - def meta_char(c) - c > "\x7f" && c <= "\xff" - end - - def ctrl_char(c) - c < "\x20" - end - - def isprint(c) - c >= "\x20" && c < "\x7f" - end - - def whitespace(c) - (c == ' ' || c == "\t") - end - - def w_offset(line, offset) - ((line) == 0 ? offset : 0) - end - - def vis_llen(l) - ((l) > @_rl_vis_botlin ? 0 : (@vis_lbreaks[l+1] - @vis_lbreaks[l])) - end - - def inv_llen(l) - (@inv_lbreaks[l+1] - @inv_lbreaks[l]) - end - - def vis_chars(line) - @visible_line[@vis_lbreaks[line] .. -1] - end - - def vis_pos(line) - @vis_lbreaks[line] || 0 - end - - def vis_line(line) - ((line) > @_rl_vis_botlin) ? "" : vis_chars(line) - end - - def inv_line(line) - @invisible_line[@inv_lbreaks[line] .. -1] - end - - def m_offset(margin, offset) - ((margin) == 0 ? offset : 0) - end - - - # PWP: update_line() is based on finding the middle difference of each - # line on the screen; vis: - # - # /old first difference - # /beginning of line | /old last same /old EOL - # v v v v - # old: eddie> Oh, my little gruntle-buggy is to me, as lurgid as - # new: eddie> Oh, my little buggy says to me, as lurgid as - # ^ ^ ^ ^ - # \beginning of line | \new last same \new end of line - # \new first difference - # - # All are character pointers for the sake of speed. Special cases for - # no differences, as well as for end of line additions must be handled. - # - # Could be made even smarter, but this works well enough - def update_line(old, ostart, new, current_line, omax, nmax, inv_botlin) - # If we're at the right edge of a terminal that supports xn, we're - # ready to wrap around, so do so. This fixes problems with knowing - # the exact cursor position and cut-and-paste with certain terminal - # emulators. In this calculation, TEMP is the physical screen - # position of the cursor. - if @encoding == 'X' - old.force_encoding('ASCII-8BIT') - new.force_encoding('ASCII-8BIT') - end - - if !@rl_byte_oriented - temp = @_rl_last_c_pos - else - temp = @_rl_last_c_pos - w_offset(@_rl_last_v_pos, @visible_wrap_offset) - end - if (temp == @_rl_screenwidth && @_rl_term_autowrap && !@_rl_horizontal_scroll_mode && - @_rl_last_v_pos == current_line - 1) - - if (!@rl_byte_oriented) - # This fixes only double-column characters, but if the wrapped - # character comsumes more than three columns, spaces will be - # inserted in the string buffer. - if (@_rl_wrapped_line[current_line] > 0) - _rl_clear_to_eol(@_rl_wrapped_line[current_line]) - end - - if new[0,1] != 0.chr - case @encoding - when 'E' - wc = new.scan(/./me)[0] - ret = wc.length - tempwidth = wc.length - when 'S' - wc = new.scan(/./ms)[0] - ret = wc.length - tempwidth = wc.length - when 'U' - wc = new.scan(/./mu)[0] - ret = wc.length - tempwidth = wc.unpack('U').first >= 0x1000 ? 2 : 1 - when 'X' - wc = new[0..-1].force_encoding(@encoding_name)[0] - ret = wc.bytesize - tempwidth = wc.ord >= 0x1000 ? 2 : 1 - else - ret = 1 - tempwidth = 1 - end - else - tempwidth = 0 - end - - if (tempwidth > 0) - bytes = ret - @rl_outstream.write(new[0,bytes]) - @_rl_last_c_pos = tempwidth - @_rl_last_v_pos+=1 - - if old[ostart,1] != 0.chr - case @encoding - when 'E' - wc = old[ostart..-1].scan(/./me)[0] - ret = wc.length - when 'S' - wc = old[ostart..-1].scan(/./ms)[0] - ret = wc.length - when 'U' - wc = old[ostart..-1].scan(/./mu)[0] - ret = wc.length - when 'X' - wc = old[ostart..-1].force_encoding(@encoding_name)[0] - ret = wc.bytesize - end - else - ret = 0 - end - if (ret != 0 && bytes != 0) - if ret != bytes - len = old[ostart..-1].index(0.chr,ret) - old[ostart+bytes,len-ret] = old[ostart+ret,len-ret] - end - old[ostart,bytes] = new[0,bytes] - end - else - @rl_outstream.write(' ') - @_rl_last_c_pos = 1 - @_rl_last_v_pos+=1 - if (old[ostart,1] != 0.chr && new[0,1] != 0.chr) - old[ostart,1] = new[0,1] - end - end - - else - if (new[0,1] != 0.chr) - @rl_outstream.write(new[0,1]) - else - @rl_outstream.write(' ') - end - @_rl_last_c_pos = 1 - @_rl_last_v_pos+=1 - if (old[ostart,1] != 0.chr && new[0,1] != 0.chr) - old[ostart,1] = new[0,1] - end - end - end - - # Find first difference. - if (!@rl_byte_oriented) - # See if the old line is a subset of the new line, so that the - # only change is adding characters. - temp = (omax < nmax) ? omax : nmax - if old[ostart,temp]==new[0,temp] - ofd = temp - nfd = temp - else - if (omax == nmax && new[0,omax]==old[ostart,omax]) - ofd = omax - nfd = nmax - else - new_offset = 0 - old_offset = ostart - ofd = 0 - nfd = 0 - while(ofd < omax && old[ostart+ofd,1] != 0.chr && - _rl_compare_chars(old, old_offset, new, new_offset)) - - old_offset = _rl_find_next_mbchar(old, old_offset, 1, MB_FIND_ANY) - new_offset = _rl_find_next_mbchar(new, new_offset, 1, MB_FIND_ANY) - ofd = old_offset - ostart - nfd = new_offset - end - end - end - else - ofd = 0 - nfd = 0 - while(ofd < omax && old[ostart+ofd,1] != 0.chr && old[ostart+ofd,1] == new[nfd,1]) - ofd += 1 - nfd += 1 - end - end - - - # Move to the end of the screen line. ND and OD are used to keep track - # of the distance between ne and new and oe and old, respectively, to - # move a subtraction out of each loop. - oe = old.index(0.chr,ostart+ofd) - ostart - if oe.nil? || oe>omax - oe = omax - end - - ne = new.index(0.chr,nfd) - if ne.nil? || ne>omax - ne = nmax - end - - # If no difference, continue to next line. - if (ofd == oe && nfd == ne) - return - end - - - wsatend = true # flag for trailing whitespace - - if (!@rl_byte_oriented) - - ols = _rl_find_prev_mbchar(old, ostart+oe, MB_FIND_ANY) - ostart - nls = _rl_find_prev_mbchar(new, ne, MB_FIND_ANY) - while ((ols > ofd) && (nls > nfd)) - - if (!_rl_compare_chars(old, ostart+ols, new, nls)) - break - end - if (old[ostart+ols,1] == " ") - wsatend = false - end - - ols = _rl_find_prev_mbchar(old, ols+ostart, MB_FIND_ANY) - ostart - nls = _rl_find_prev_mbchar(new, nls, MB_FIND_ANY) - end - else - ols = oe - 1 # find last same - nls = ne - 1 - while ((ols > ofd) && (nls > nfd) && old[ostart+ols,1] == new[nls,1]) - if (old[ostart+ols,1] != " ") - wsatend = false - end - ols-=1 - nls-=1 - end - end - - if (wsatend) - ols = oe - nls = ne - elsif (!_rl_compare_chars(old, ostart+ols, new, nls)) - if (old[ostart+ols,1] != 0.chr) # don't step past the NUL - if !@rl_byte_oriented - ols = _rl_find_next_mbchar(old, ostart+ols, 1, MB_FIND_ANY) - ostart - else - ols+=1 - end - end - if (new[nls,1] != 0.chr ) - if !@rl_byte_oriented - nls = _rl_find_next_mbchar(new, nls, 1, MB_FIND_ANY) - else - nls+=1 - end - end - end - - # count of invisible characters in the current invisible line. - current_invis_chars = w_offset(current_line, @wrap_offset) - if (@_rl_last_v_pos != current_line) - _rl_move_vert(current_line) - if (@rl_byte_oriented && current_line == 0 && @visible_wrap_offset!=0) - @_rl_last_c_pos += @visible_wrap_offset - end - end - - # If this is the first line and there are invisible characters in the - # prompt string, and the prompt string has not changed, and the current - # cursor position is before the last invisible character in the prompt, - # and the index of the character to move to is past the end of the prompt - # string, then redraw the entire prompt string. We can only do this - # reliably if the terminal supports a `cr' capability. - - # This is not an efficiency hack -- there is a problem with redrawing - # portions of the prompt string if they contain terminal escape - # sequences (like drawing the `unbold' sequence without a corresponding - # `bold') that manifests itself on certain terminals. - - lendiff = @local_prompt_len - - if (current_line == 0 && !@_rl_horizontal_scroll_mode && - @_rl_term_cr && lendiff > @prompt_visible_length && @_rl_last_c_pos > 0 && - ofd >= lendiff && @_rl_last_c_pos < prompt_ending_index()) - @rl_outstream.write(@_rl_term_cr) - _rl_output_some_chars(@local_prompt,0,lendiff) - if !@rl_byte_oriented - # We take wrap_offset into account here so we can pass correct - # information to _rl_move_cursor_relative. - @_rl_last_c_pos = _rl_col_width(@local_prompt, 0, lendiff) - @wrap_offset - @cpos_adjusted = true - else - @_rl_last_c_pos = lendiff - end - end - - o_cpos = @_rl_last_c_pos - - # When this function returns, _rl_last_c_pos is correct, and an absolute - # cursor postion in multibyte mode, but a buffer index when not in a - # multibyte locale. - _rl_move_cursor_relative(ofd, old, ostart) - - # We need to indicate that the cursor position is correct in the presence - # of invisible characters in the prompt string. Let's see if setting this - # when we make sure we're at the end of the drawn prompt string works. - if (current_line == 0 && !@rl_byte_oriented && - (@_rl_last_c_pos > 0 || o_cpos > 0) && - @_rl_last_c_pos == @prompt_physical_chars) - @cpos_adjusted = true - end - - # if (len (new) > len (old)) - # lendiff == difference in buffer - # col_lendiff == difference on screen - # When not using multibyte characters, these are equal - lendiff = (nls - nfd) - (ols - ofd) - if !@rl_byte_oriented - col_lendiff = _rl_col_width(new, nfd, nls) - _rl_col_width(old, ostart+ofd, ostart+ols) - else - col_lendiff = lendiff - end - - # If we are changing the number of invisible characters in a line, and - # the spot of first difference is before the end of the invisible chars, - # lendiff needs to be adjusted. - if (current_line == 0 && !@_rl_horizontal_scroll_mode && - current_invis_chars != @visible_wrap_offset) - if !@rl_byte_oriented - lendiff += @visible_wrap_offset - current_invis_chars - col_lendiff += @visible_wrap_offset - current_invis_chars - else - lendiff += @visible_wrap_offset - current_invis_chars - col_lendiff = lendiff - end - end - - # Insert (diff (len (old), len (new)) ch. - temp = ne - nfd - if !@rl_byte_oriented - col_temp = _rl_col_width(new,nfd,ne) - else - col_temp = temp - end - if (col_lendiff > 0) # XXX - was lendiff - - # Non-zero if we're increasing the number of lines. - gl = current_line >= @_rl_vis_botlin && inv_botlin > @_rl_vis_botlin - - # If col_lendiff is > 0, implying that the new string takes up more - # screen real estate than the old, but lendiff is < 0, meaning that it - # takes fewer bytes, we need to just output the characters starting from - # the first difference. These will overwrite what is on the display, so - # there's no reason to do a smart update. This can really only happen in - # a multibyte environment. - if lendiff < 0 - _rl_output_some_chars(new, nfd, temp) - @_rl_last_c_pos += _rl_col_width(new, nfd, nfd+temp) - - # If nfd begins before any invisible characters in the prompt, adjust - # _rl_last_c_pos to account for wrap_offset and set cpos_adjusted to - # let the caller know. - if current_line == 0 && @wrap_offset && nfd <= @prompt_last_invisible - @_rl_last_c_pos -= @wrap_offset - @cpos_adjusted = true - end - return - # Sometimes it is cheaper to print the characters rather than - # use the terminal's capabilities. If we're growing the number - # of lines, make sure we actually cause the new line to wrap - # around on auto-wrapping terminals. - elsif (@_rl_terminal_can_insert && ((2 * col_temp) >= col_lendiff || @_rl_term_IC) && (!@_rl_term_autowrap || !gl)) - - # If lendiff > prompt_visible_length and _rl_last_c_pos == 0 and - # _rl_horizontal_scroll_mode == 1, inserting the characters with - # _rl_term_IC or _rl_term_ic will screw up the screen because of the - # invisible characters. We need to just draw them. - if (old[ostart+ols,1] != 0.chr && (!@_rl_horizontal_scroll_mode || @_rl_last_c_pos > 0 || - lendiff <= @prompt_visible_length || current_invis_chars==0)) - - insert_some_chars(new[nfd..-1], lendiff, col_lendiff) - @_rl_last_c_pos += col_lendiff - elsif ((@rl_byte_oriented) && old[ostart+ols,1] == 0.chr && lendiff > 0) - # At the end of a line the characters do not have to - # be "inserted". They can just be placed on the screen. - # However, this screws up the rest of this block, which - # assumes you've done the insert because you can. - _rl_output_some_chars(new,nfd, lendiff) - @_rl_last_c_pos += col_lendiff - else - _rl_output_some_chars(new,nfd, temp) - @_rl_last_c_pos += col_temp - # If nfd begins before any invisible characters in the prompt, adjust - # _rl_last_c_pos to account for wrap_offset and set cpos_adjusted to - # let the caller know. - if current_line == 0 && @wrap_offset && nfd <= @prompt_last_invisible - @_rl_last_c_pos -= @wrap_offset - @cpos_adjusted = true - end - return - end - # Copy (new) chars to screen from first diff to last match. - temp = nls - nfd - if ((temp - lendiff) > 0) - _rl_output_some_chars(new,(nfd + lendiff),temp - lendiff) - # XXX -- this bears closer inspection. Fixes a redisplay bug - # reported against bash-3.0-alpha by Andreas Schwab involving - # multibyte characters and prompt strings with invisible - # characters, but was previously disabled. - @_rl_last_c_pos += _rl_col_width(new,nfd+lendiff, nfd+lendiff+temp-col_lendiff) - end - else - # cannot insert chars, write to EOL - _rl_output_some_chars(new,nfd, temp) - @_rl_last_c_pos += col_temp - # If we're in a multibyte locale and were before the last invisible - # char in the current line (which implies we just output some invisible - # characters) we need to adjust _rl_last_c_pos, since it represents - # a physical character position. - end - else # Delete characters from line. - # If possible and inexpensive to use terminal deletion, then do so. - if (@_rl_term_dc && (2 * col_temp) >= -col_lendiff) - - # If all we're doing is erasing the invisible characters in the - # prompt string, don't bother. It screws up the assumptions - # about what's on the screen. - if (@_rl_horizontal_scroll_mode && @_rl_last_c_pos == 0 && - -lendiff == @visible_wrap_offset) - col_lendiff = 0 - end - - if (col_lendiff!=0) - delete_chars(-col_lendiff) # delete (diff) characters - end - - # Copy (new) chars to screen from first diff to last match - temp = nls - nfd - if (temp > 0) - # If nfd begins at the prompt, or before the invisible characters in - # the prompt, we need to adjust _rl_last_c_pos in a multibyte locale - # to account for the wrap offset and set cpos_adjusted accordingly. - _rl_output_some_chars(new,nfd, temp) - if !@rl_byte_oriented - @_rl_last_c_pos += _rl_col_width(new,nfd,nfd+temp) - if current_line == 0 && @wrap_offset && nfd <= @prompt_last_invisible - @_rl_last_c_pos -= @wrap_offset - @cpos_adjusted = true - end - else - @_rl_last_c_pos += temp - end - end - - # Otherwise, print over the existing material. - else - if (temp > 0) - # If nfd begins at the prompt, or before the invisible characters in - # the prompt, we need to adjust _rl_last_c_pos in a multibyte locale - # to account for the wrap offset and set cpos_adjusted accordingly. - _rl_output_some_chars(new,nfd, temp) - @_rl_last_c_pos += col_temp # XXX - if !@rl_byte_oriented - if current_line == 0 && @wrap_offset && nfd <= @prompt_last_invisible - @_rl_last_c_pos -= @wrap_offset - @cpos_adjusted = true - end - end - end - - lendiff = (oe) - (ne) - if !@rl_byte_oriented - col_lendiff = _rl_col_width(old, ostart, ostart+oe) - _rl_col_width(new, 0, ne) - else - col_lendiff = lendiff - end - - if (col_lendiff!=0) - if (@_rl_term_autowrap && current_line < inv_botlin) - space_to_eol(col_lendiff) - else - _rl_clear_to_eol(col_lendiff) - end - end - end - end - end - - # Basic redisplay algorithm. - def rl_redisplay() - return if !@readline_echoing_p - - _rl_wrapped_multicolumn = 0 - - @rl_display_prompt ||= "" - - if (@invisible_line.nil? || @vis_lbreaks.nil?) - init_line_structures(0) - rl_on_new_line() - end - - # Draw the line into the buffer. - @cpos_buffer_position = -1 - - line = @invisible_line - out = inv_botlin = 0 - - # Mark the line as modified or not. We only do this for history - # lines. - modmark = 0 - if (@_rl_mark_modified_lines && current_history() && @rl_undo_list) - line[out,1] = '*' - out += 1 - line[out,1] = 0.chr - modmark = 1 - end - - # If someone thought that the redisplay was handled, but the currently - # visible line has a different modification state than the one about - # to become visible, then correct the caller's misconception. - if (@visible_line[0,1] != @invisible_line[0,1]) - @rl_display_fixed = false - end - - # If the prompt to be displayed is the `primary' readline prompt (the - # one passed to readline()), use the values we have already expanded. - # If not, use what's already in rl_display_prompt. WRAP_OFFSET is the - # number of non-visible characters in the prompt string. - if (@rl_display_prompt == @rl_prompt || @local_prompt) - - if (@local_prompt_prefix && @forced_display) - _rl_output_some_chars(@local_prompt_prefix,0,@local_prompt_prefix.length) - end - if (@local_prompt_len > 0) - - temp = @local_prompt_len + out + 2 - if (temp >= @line_size) - @line_size = (temp + 1024) - (temp % 1024) - if @visible_line.length >= @line_size - @visible_line = @visible_line[0,@line_size] - else - @visible_line += 0.chr * (@line_size-@visible_line.length) - end - - if @invisible_line.length >= @line_size - @invisible_line = @invisible_line[0,@line_size] - else - @invisible_line += 0.chr * (@line_size-@invisible_line.length) - end - if @encoding=='X' - @visible_line.force_encoding('ASCII-8BIT') - @invisible_line.force_encoding('ASCII-8BIT') - end - line = @invisible_line - end - line[out,@local_prompt_len] = @local_prompt - out += @local_prompt_len - end - line[out,1] = 0.chr - @wrap_offset = @local_prompt_len - @prompt_visible_length - else - prompt_this_line = @rl_display_prompt.rindex("\n") - if prompt_this_line.nil? - prompt_this_line = 0 - else - prompt_this_line+=1 - - pmtlen = prompt_this_line # temp var - if (@forced_display) - _rl_output_some_chars(@rl_display_prompt,0,pmtlen) - # Make sure we are at column zero even after a newline, - #regardless of the state of terminal output processing. - if (pmtlen < 2 || @rl_display_prompt[prompt_this_line-2,1] != "\r") - cr() - end - end - end - - @prompt_physical_chars = pmtlen = @rl_display_prompt.length - prompt_this_line - temp = pmtlen + out + 2 - if (temp >= @line_size) - @line_size = (temp + 1024) - (temp % 1024) - if @visible_line.length >= @line_size - @visible_line = @visible_line[0,@line_size] - else - @visible_line += 0.chr * (@line_size-@visible_line.length) - end - - if @invisible_line.length >= @line_size - @invisible_line = @invisible_line[0,@line_size] - else - @invisible_line += 0.chr * (@line_size-@invisible_line.length) - end - if @encoding=='X' - @visible_line.force_encoding('ASCII-8BIT') - @invisible_line.force_encoding('ASCII-8BIT') - end - - line = @invisible_line - end - line[out,pmtlen] = @rl_display_prompt[prompt_this_line,pmtlen] - out += pmtlen - line[out,1] = 0.chr - @wrap_offset = @prompt_invis_chars_first_line = 0 - end - # inv_lbreaks[i] is where line i starts in the buffer. - @inv_lbreaks[newlines = 0] = 0 - lpos = @prompt_physical_chars + modmark - - @_rl_wrapped_line = Array.new(@visible_line.length,0) - num = 0 - - # prompt_invis_chars_first_line is the number of invisible characters in - # the first physical line of the prompt. - # wrap_offset - prompt_invis_chars_first_line is the number of invis - # chars on the second line. - - # what if lpos is already >= _rl_screenwidth before we start drawing the - # contents of the command line? - while (lpos >= @_rl_screenwidth) - # fix from Darin Johnson for prompt string with - # invisible characters that is longer than the screen width. The - # prompt_invis_chars_first_line variable could be made into an array - # saying how many invisible characters there are per line, but that's - # probably too much work for the benefit gained. How many people have - # prompts that exceed two physical lines? - # Additional logic fix from Edward Catmur - if (!@rl_byte_oriented) - n0 = num - temp = @local_prompt_len - while (num < temp) - z = _rl_col_width(@local_prompt, n0, num) - if (z > @_rl_screenwidth) - num = _rl_find_prev_mbchar(@local_prompt, num, MB_FIND_ANY) - break - elsif (z == @_rl_screenwidth) - break - end - num+=1 - end - temp = num - else - temp = ((newlines + 1) * @_rl_screenwidth) - end - - # Now account for invisible characters in the current line. - temp += (@local_prompt_prefix.nil? ? ((newlines == 0) ? @prompt_invis_chars_first_line : - ((newlines == 1) ? @wrap_offset : 0)) : - ((newlines == 0) ? @wrap_offset : 0)) - - @inv_lbreaks[newlines+=1] = temp - if !@rl_byte_oriented - lpos -= _rl_col_width(@local_prompt, n0, num) - else - lpos -= @_rl_screenwidth - end - end - @prompt_last_screen_line = newlines - - # Draw the rest of the line (after the prompt) into invisible_line, keeping - # track of where the cursor is (cpos_buffer_position), the number of the line containing - # the cursor (lb_linenum), the last line number (inv_botlin). - # It maintains an array of line breaks for display (inv_lbreaks). - # This handles expanding tabs for display and displaying meta characters. - lb_linenum = 0 - _in = 0 - if !@rl_byte_oriented && @rl_end>0 - case @encoding - when 'E' - wc = @rl_line_buffer[0,@rl_end].scan(/./me)[0] - wc_bytes = wc ? wc.length : 1 - when 'S' - wc = @rl_line_buffer[0,@rl_end].scan(/./ms)[0] - wc_bytes = wc ? wc.length : 1 - when 'U' - wc = @rl_line_buffer[0,@rl_end].scan(/./mu)[0] - wc_bytes = wc ? wc.length : 1 - when 'X' - wc = @rl_line_buffer[0,@rl_end].force_encoding(@encoding_name)[0] - wc_bytes = wc ? wc.bytesize : 1 - end - else - wc_bytes = 1 - end - - while(_in < @rl_end) - - c = @rl_line_buffer[_in,1] - if(c == 0.chr) - @rl_end = _in - break - end - if (!@rl_byte_oriented) - case @encoding - when 'U' - wc_width = wc && wc.unpack('U').first >= 0x1000 ? 2 : 1 - when 'X' - wc_width = wc && wc.ord > 0x1000 ? 2 : 1 - else - wc_width = wc ? wc.length : 1 - end - end - if (out + 8 >= @line_size) # XXX - 8 for \t - @line_size *= 2 - if @visible_line.length>=@line_size - @visible_line = @visible_line[0,@line_size] - else - @visible_line += 0.chr * (@line_size-@visible_line.length) - end - if @invisible_line.length>=@line_size - @invisible_line = @invisible_line[0,@line_size] - else - @invisible_line += 0.chr * (@line_size-@invisible_line.length) - end - line = @invisible_line - end - - if (_in == @rl_point) - @cpos_buffer_position = out - lb_linenum = newlines - end - if (false && meta_char(c)) - if (!@_rl_output_meta_chars && false) - line[out,4] = "\\%03o" % c.ord - - if (lpos + 4 >= @_rl_screenwidth) - temp = @_rl_screenwidth - lpos - @inv_lbreaks[newlines+=1] = out + temp - lpos = 4 - temp - else - lpos += 4 - end - out += 4 - else - line[out,1] = c - out += 1 - lpos+=1 - if (lpos >= @_rl_screenwidth) - @inv_lbreaks[newlines+=1] = out - @_rl_wrapped_line[newlines] = _rl_wrapped_multicolumn - lpos = 0 - end - end - - elsif (c == "\t") - - newout = out + 8 - lpos % 8 - temp = newout - out - if (lpos + temp >= @_rl_screenwidth) - temp2 = @_rl_screenwidth - lpos - @inv_lbreaks[newlines+=1] = out + temp2 - lpos = temp - temp2 - while (out < newout) - line[out,1] = ' ' - out += 1 - end - - else - - while (out < newout) - line[out,1] = ' ' - out += 1 - end - lpos += temp - end - - elsif (c == "\n" && !@_rl_horizontal_scroll_mode && @_rl_term_up) - line[out,1] = 0.chr # XXX - sentinel - out += 1 - @inv_lbreaks[newlines+=1] = out - lpos = 0 - elsif (ctrl_char(c) || c == RUBOUT) - line[out,1] = '^' - out += 1 - lpos+=1 - if (lpos >= @_rl_screenwidth) - @inv_lbreaks[newlines+=1] = out - @_rl_wrapped_line[newlines] = _rl_wrapped_multicolumn - lpos = 0 - end - # NOTE: c[0].ord works identically on both 1.8 and 1.9 - line[out,1] = ctrl_char(c) ? (c[0].ord|0x40).chr.upcase : '?' - out += 1 - lpos+=1 - if (lpos >= @_rl_screenwidth) - @inv_lbreaks[newlines+=1] = out - @_rl_wrapped_line[newlines] = _rl_wrapped_multicolumn - lpos = 0 - end - else - - if (!@rl_byte_oriented) - _rl_wrapped_multicolumn = 0 - if (@_rl_screenwidth < lpos + wc_width) - for i in lpos ... @_rl_screenwidth - # The space will be removed in update_line() - line[out,1] = ' ' - out += 1 - _rl_wrapped_multicolumn+=1 - lpos+=1 - if (lpos >= @_rl_screenwidth) - @inv_lbreaks[newlines+=1] = out - @_rl_wrapped_line[newlines] = _rl_wrapped_multicolumn - lpos = 0 - end - end - end - if (_in == @rl_point) - @cpos_buffer_position = out - lb_linenum = newlines - end - line[out,wc_bytes] = @rl_line_buffer[_in,wc_bytes] - out += wc_bytes - for i in 0 ... wc_width - lpos+=1 - if (lpos >= @_rl_screenwidth) - @inv_lbreaks[newlines+=1] = out - @_rl_wrapped_line[newlines] = _rl_wrapped_multicolumn - lpos = 0 - end - end - else - line[out,1] = c - out += 1 - lpos+=1 - if (lpos >= @_rl_screenwidth) - @inv_lbreaks[newlines+=1] = out - @_rl_wrapped_line[newlines] = _rl_wrapped_multicolumn - lpos = 0 - end - end - - end - - if (!@rl_byte_oriented) - _in += wc_bytes - case @encoding - when 'E' - wc = @rl_line_buffer[_in,@rl_end - _in].scan(/./me)[0] - wc_bytes = wc ? wc.length : 1 - when 'S' - wc = @rl_line_buffer[_in,@rl_end - _in].scan(/./ms)[0] - wc_bytes = wc ? wc.length : 1 - when 'U' - wc = @rl_line_buffer[_in,@rl_end - _in].scan(/./mu)[0] - wc_bytes = wc ? wc.length : 1 - when 'X' - wc = @rl_line_buffer[_in,@rl_end - _in].force_encoding(@encoding_name)[0] - wc_bytes = wc ? wc.bytesize : 1 - end - - else - _in+=1 - end - end - - line[out,1] = 0.chr - - if (@cpos_buffer_position < 0) - @cpos_buffer_position = out - lb_linenum = newlines - end - - inv_botlin = newlines - @inv_lbreaks[newlines+1] = out - cursor_linenum = lb_linenum - - # CPOS_BUFFER_POSITION == position in buffer where cursor should be placed. - # CURSOR_LINENUM == line number where the cursor should be placed. - - # PWP: now is when things get a bit hairy. The visible and invisible - # line buffers are really multiple lines, which would wrap every - # (screenwidth - 1) characters. Go through each in turn, finding - # the changed region and updating it. The line order is top to bottom. - - # If we can move the cursor up and down, then use multiple lines, - # otherwise, let long lines display in a single terminal line, and - # horizontally scroll it. - - if (!@_rl_horizontal_scroll_mode && @_rl_term_up) - if (!@rl_display_fixed || @forced_display) - @forced_display = false - # If we have more than a screenful of material to display, then - # only display a screenful. We should display the last screen, - # not the first. - if (out >= @_rl_screenchars) - if (!@rl_byte_oriented) - out = _rl_find_prev_mbchar(line, @_rl_screenchars, MB_FIND_ANY) - else - out = @_rl_screenchars - 1 - end - end - - # The first line is at character position 0 in the buffer. The - # second and subsequent lines start at inv_lbreaks[N], offset by - # OFFSET (which has already been calculated above). - - # For each line in the buffer, do the updating display. - linenum = 0 - while linenum <= inv_botlin - # This can lead us astray if we execute a program that changes - #the locale from a non-multibyte to a multibyte one. - o_cpos = @_rl_last_c_pos - @cpos_adjusted = false - update_line(@visible_line,vis_pos(linenum), inv_line(linenum), linenum, - vis_llen(linenum), inv_llen(linenum), inv_botlin) - - if (linenum == 0 && !@rl_byte_oriented && - !@cpos_adjusted && - @_rl_last_c_pos != o_cpos && - @_rl_last_c_pos > @wrap_offset && - o_cpos < @prompt_last_invisible) - @_rl_last_c_pos -= @wrap_offset - end - - # If this is the line with the prompt, we might need to - # compensate for invisible characters in the new line. Do - # this only if there is not more than one new line (which - # implies that we completely overwrite the old visible line) - # and the new line is shorter than the old. Make sure we are - # at the end of the new line before clearing. - if (linenum == 0 && - inv_botlin == 0 && @_rl_last_c_pos == out && - (@wrap_offset > @visible_wrap_offset) && - (@_rl_last_c_pos < @visible_first_line_len)) - if !@rl_byte_oriented - nleft = @_rl_screenwidth - @_rl_last_c_pos - else - nleft = @_rl_screenwidth + @wrap_offset - @_rl_last_c_pos - end - if (nleft!=0) - _rl_clear_to_eol(nleft) - end - end - - # Since the new first line is now visible, save its length. - if (linenum == 0) - @visible_first_line_len = (inv_botlin > 0) ? @inv_lbreaks[1] : out - @wrap_offset - end - - linenum += 1 - end - - # We may have deleted some lines. If so, clear the left over - # blank ones at the bottom out. - if (@_rl_vis_botlin > inv_botlin) - while(linenum <= @_rl_vis_botlin) - tt = vis_chars(linenum) - _rl_move_vert(linenum) - _rl_move_cursor_relative(0, tt) - _rl_clear_to_eol((linenum == @_rl_vis_botlin) ? tt.length : @_rl_screenwidth) - linenum += 1 - end - end - @_rl_vis_botlin = inv_botlin - - # CHANGED_SCREEN_LINE is set to 1 if we have moved to a - # different screen line during this redisplay. - changed_screen_line = @_rl_last_v_pos != cursor_linenum - if (changed_screen_line) - _rl_move_vert(cursor_linenum) - # If we moved up to the line with the prompt using _rl_term_up, - # the physical cursor position on the screen stays the same, - # but the buffer position needs to be adjusted to account - # for invisible characters. - if (@rl_byte_oriented && cursor_linenum == 0 && @wrap_offset!=0) - @_rl_last_c_pos += @wrap_offset - end - end - # We have to reprint the prompt if it contains invisible - # characters, since it's not generally OK to just reprint - # the characters from the current cursor position. But we - # only need to reprint it if the cursor is before the last - # invisible character in the prompt string. - nleft = @prompt_visible_length + @wrap_offset - if (cursor_linenum == 0 && @wrap_offset > 0 && @_rl_last_c_pos > 0 && - @_rl_last_c_pos < prompt_ending_index() && @local_prompt) - if (@_rl_term_cr) - @rl_outstream.write(@_rl_term_cr) - end - _rl_output_some_chars(@local_prompt,0,nleft) - if !@rl_byte_oriented - @_rl_last_c_pos = _rl_col_width(@local_prompt, 0, nleft) - @wrap_offset - else - @_rl_last_c_pos = nleft - end - end - - # Where on that line? And where does that line start - # in the buffer? - pos = @inv_lbreaks[cursor_linenum] - # nleft == number of characters in the line buffer between the - # start of the line and the desired cursor position. - nleft = @cpos_buffer_position - pos - - # NLEFT is now a number of characters in a buffer. When in a - # multibyte locale, however, _rl_last_c_pos is an absolute cursor - # position that doesn't take invisible characters in the prompt - # into account. We use a fudge factor to compensate. - - # Since _rl_backspace() doesn't know about invisible characters in the - # prompt, and there's no good way to tell it, we compensate for - # those characters here and call _rl_backspace() directly. - - if (@wrap_offset!=0 && cursor_linenum == 0 && nleft < @_rl_last_c_pos) - # TX == new physical cursor position in multibyte locale. - if !@rl_byte_oriented - tx = _rl_col_width(@visible_line, pos, pos+nleft) - @visible_wrap_offset - else - tx = nleft - end - if tx >= 0 && @_rl_last_c_pos > tx - _rl_backspace(@_rl_last_c_pos - tx) # XXX - @_rl_last_c_pos = tx - end - end - # We need to note that in a multibyte locale we are dealing with - # _rl_last_c_pos as an absolute cursor position, but moving to a - # point specified by a buffer position (NLEFT) that doesn't take - # invisible characters into account. - if !@rl_byte_oriented - _rl_move_cursor_relative(nleft, @invisible_line,pos) - elsif (nleft != @_rl_last_c_pos) - _rl_move_cursor_relative(nleft, @invisible_line,pos) - end - end - - else # Do horizontal scrolling. - - # Always at top line. - @_rl_last_v_pos = 0 - - # Compute where in the buffer the displayed line should start. This - # will be LMARGIN. - - # The number of characters that will be displayed before the cursor. - ndisp = @cpos_buffer_position - @wrap_offset - nleft = @prompt_visible_length + @wrap_offset - # Where the new cursor position will be on the screen. This can be - # longer than SCREENWIDTH; if it is, lmargin will be adjusted. - phys_c_pos = @cpos_buffer_position - (@last_lmargin!=0 ? @last_lmargin : @wrap_offset) - t = @_rl_screenwidth / 3 - - # If the number of characters had already exceeded the screenwidth, - #last_lmargin will be > 0. - - # If the number of characters to be displayed is more than the screen - # width, compute the starting offset so that the cursor is about - # two-thirds of the way across the screen. - if (phys_c_pos > @_rl_screenwidth - 2) - lmargin = @cpos_buffer_position - (2 * t) - if (lmargin < 0) - lmargin = 0 - end - # If the left margin would be in the middle of a prompt with - # invisible characters, don't display the prompt at all. - if (@wrap_offset!=0 && lmargin > 0 && lmargin < nleft) - lmargin = nleft - end - elsif (ndisp < @_rl_screenwidth - 2) # XXX - was -1 - lmargin = 0 - elsif (phys_c_pos < 1) - # If we are moving back towards the beginning of the line and - # the last margin is no longer correct, compute a new one. - lmargin = ((@cpos_buffer_position - 1) / t) * t # XXX - if (@wrap_offset!=0 && lmargin > 0 && lmargin < nleft) - lmargin = nleft - end - else - lmargin = @last_lmargin - end - - # If the first character on the screen isn't the first character - #in the display line, indicate this with a special character. - if (lmargin > 0) - line[lmargin,1] = '<' - end - - # If SCREENWIDTH characters starting at LMARGIN do not encompass - # the whole line, indicate that with a special character at the - # right edge of the screen. If LMARGIN is 0, we need to take the - # wrap offset into account. - t = lmargin + m_offset(lmargin, @wrap_offset) + @_rl_screenwidth - if (t < out) - line[t - 1,1] = '>' - end - if (!@rl_display_fixed || @forced_display || lmargin != @last_lmargin) - - @forced_display = false - update_line(@visible_line,@last_lmargin,@invisible_line[lmargin..-1], - 0, - @_rl_screenwidth + @visible_wrap_offset, - @_rl_screenwidth + (lmargin ? 0 : @wrap_offset), - 0) - # If the visible new line is shorter than the old, but the number - # of invisible characters is greater, and we are at the end of - # the new line, we need to clear to eol. - t = @_rl_last_c_pos - m_offset(lmargin, @wrap_offset) - if ((m_offset(lmargin, @wrap_offset) > @visible_wrap_offset) && - (@_rl_last_c_pos == out) && - t < @visible_first_line_len) - - nleft = @_rl_screenwidth - t - _rl_clear_to_eol(nleft) - end - @visible_first_line_len = out - lmargin - m_offset(lmargin, @wrap_offset) - if (@visible_first_line_len > @_rl_screenwidth) - @visible_first_line_len = @_rl_screenwidth - end - _rl_move_cursor_relative(@cpos_buffer_position - lmargin, @invisible_line ,lmargin) - @last_lmargin = lmargin - end - end - @rl_outstream.flush - - # Swap visible and non-visible lines. - @visible_line,@invisible_line = @invisible_line,@visible_line - @vis_lbreaks,@inv_lbreaks = @inv_lbreaks,@vis_lbreaks - - @rl_display_fixed = false - # If we are displaying on a single line, and last_lmargin is > 0, we - # are not displaying any invisible characters, so set visible_wrap_offset - # to 0. - if (@_rl_horizontal_scroll_mode && @last_lmargin!=0) - @visible_wrap_offset = 0 - else - @visible_wrap_offset = @wrap_offset - end - end - - def rl_line_buffer - @rl_line_buffer.tr(0.chr, '') - end - - # Tell the update routines that we have moved onto a new (empty) line. - def rl_on_new_line() - if (@visible_line) - @visible_line[0,1] = 0.chr - end - @_rl_last_c_pos = @_rl_last_v_pos = 0 - @_rl_vis_botlin = @last_lmargin = 0 - if (@vis_lbreaks) - @vis_lbreaks[0] = @vis_lbreaks[1] = 0 - end - @visible_wrap_offset = 0 - 0 - end - - def rl_reset_line_state() - rl_on_new_line() - - @rl_display_prompt = @rl_prompt ? @rl_prompt : "" - @forced_display = true - 0 - end - - def _rl_vi_initialize_line - rl_unsetstate(RL_STATE_VICMDONCE) - end - - # Initialize readline (and terminal if not already). - def rl_initialize() - # If we have never been called before, initialize the - # terminal and data structures. - if (!@rl_initialized) - rl_setstate(RL_STATE_INITIALIZING) - readline_initialize_everything() - rl_unsetstate(RL_STATE_INITIALIZING) - @rl_initialized = true - rl_setstate(RL_STATE_INITIALIZED) - end - - # Initalize the current line information. - _rl_init_line_state() - - # We aren't done yet. We haven't even gotten started yet! - @rl_done = false - rl_unsetstate(RL_STATE_DONE) - - # Tell the history routines what is going on. - _rl_start_using_history() - - # Make the display buffer match the state of the line. - rl_reset_line_state() - - # No such function typed yet. - @rl_last_func = nil - - # Parsing of key-bindings begins in an enabled state. - @_rl_parsing_conditionalized_out = 0 - - if (@rl_editing_mode == @vi_mode) - _rl_vi_initialize_line() - end - # Each line starts in insert mode (the default). - _rl_set_insert_mode(RL_IM_DEFAULT, 1) - - return 0 - end - - def _rl_strip_prompt(pmt) - return expand_prompt(pmt).first - end - - def _rl_col_width(string,start,_end) - return 0 if _end <= start - - # Find the first occurance of 0.chr, which marks the end of the string. - # Because newlines are also in the string as 0.chrs (they are tracked - # seperately), we need to ignore any 0.chrs that lie before _end. - index = string[_end...string.length].index(0.chr) - - str = index ? string[0,index+_end] : string - width = 0 - - case @encoding - when 'N' - return (_end - start) - when 'U' - str[start ... _end].scan(/./mu).each {|s| width += s.unpack('U').first >= 0x1000 ? 2 : 1 } - when 'S' - str[start ... _end].scan(/./ms).each {|s| width += s.length } - when 'E' - str[start ... _end].scan(/./me).each {|s| width += s.length } - when 'X' - str[start ... _end].force_encoding(@encoding_name).codepoints.each {|s| width += s > 0x1000 ? 2 : 1 } - end - width - end - - # Write COUNT characters from STRING to the output stream. - def _rl_output_some_chars(string,start,count) - case @encoding - when 'X' - @_rl_out_stream.write(string[start, count].force_encoding(@encoding_name)) - else - @_rl_out_stream.write(string[start, count]) - end - end - - # Tell the update routines that we have moved onto a new line with the - # prompt already displayed. Code originally from the version of readline - # distributed with CLISP. rl_expand_prompt must have already been called - # (explicitly or implicitly). This still doesn't work exactly right. - def rl_on_new_line_with_prompt() - # Initialize visible_line and invisible_line to ensure that they can hold - # the already-displayed prompt. - prompt_size = @rl_prompt.length + 1 - init_line_structures(prompt_size) - - # Make sure the line structures hold the already-displayed prompt for - # redisplay. - lprompt = @local_prompt ? @local_prompt : @rl_prompt - @visible_line[0,lprompt.length] = lprompt - @invisible_line[0,lprompt.length] = lprompt - - # If the prompt contains newlines, take the last tail. - prompt_last_line = rl_prompt.rindex("\n") - if prompt_last_line.nil? - prompt_last_line = @rl_prompt - else - prompt_last_line = @rl_prompt[prompt_last_line..-1] - end - l = prompt_last_line.length - if !@rl_byte_oriented - @_rl_last_c_pos = _rl_col_width(prompt_last_line, 0, l) - else - @_rl_last_c_pos = l - end - - # Dissect prompt_last_line into screen lines. Note that here we have - # to use the real screenwidth. Readline's notion of screenwidth might be - # one less, see terminal.c. - real_screenwidth = @_rl_screenwidth + (@_rl_term_autowrap ? 0 : 1) - @_rl_last_v_pos = l / real_screenwidth - # If the prompt length is a multiple of real_screenwidth, we don't know - # whether the cursor is at the end of the last line, or already at the - # beginning of the next line. Output a newline just to be safe. - if (l > 0 && (l % real_screenwidth) == 0) - _rl_output_some_chars("\n",0,1) - end - @last_lmargin = 0 - - newlines = 0 - i = 0 - while (i <= l) - @_rl_vis_botlin = newlines - @vis_lbreaks[newlines] = i - newlines += 1 - i += real_screenwidth - end - @vis_lbreaks[newlines] = l - @visible_wrap_offset = 0 - - @rl_display_prompt = @rl_prompt # XXX - make sure it's set - - return 0 - end - - def readline_internal_setup() - @_rl_in_stream = @rl_instream - @_rl_out_stream = @rl_outstream - - if (@rl_startup_hook) - send(@rl_startup_hook) - end - - # If we're not echoing, we still want to at least print a prompt, because - # rl_redisplay will not do it for us. If the calling application has a - # custom redisplay function, though, let that function handle it. - if (!@readline_echoing_p && @rl_redisplay_function == :rl_redisplay) - if (@rl_prompt && !@rl_already_prompted) - nprompt = _rl_strip_prompt(@rl_prompt) - @_rl_out_stream.write(nprompt) - @_rl_out_stream.flush - end - else - if (@rl_prompt && @rl_already_prompted) - rl_on_new_line_with_prompt() - else - rl_on_new_line() - end - send(@rl_redisplay_function) - end - - if (@rl_editing_mode == @vi_mode) - rl_vi_insertion_mode(1, 'i') - end - if (@rl_pre_input_hook) - send(@rl_pre_input_hook) - end - end - - # Create a default argument. - def _rl_reset_argument() - @rl_numeric_arg = @rl_arg_sign = 1 - @rl_explicit_arg = false - @_rl_argcxt = 0 - end - - # Ring the terminal bell. - def rl_ding() - if @MessageBeep - @MessageBeep.Call(0) - elsif @readline_echoing_p - if @_rl_bell_preference == VISIBLE_BELL - if (@_rl_visible_bell) - @_rl_out_stream.write(@_rl_visible_bell.chr) - else - $stderr.write("\007") - $stderr.flush - end - elsif @_rl_bell_preference == AUDIBLE_BELL - $stderr.write("\007") - $stderr.flush - end - return 0 - end - return -1 - end - - def _rl_search_getchar(cxt) - # Read a key and decide how to proceed. - rl_setstate(RL_STATE_MOREINPUT) - c = cxt.lastc = rl_read_key() - rl_unsetstate(RL_STATE_MOREINPUT) - if !@rl_byte_oriented - cxt.mb = "" - c = cxt.lastc = _rl_read_mbstring(cxt.lastc, cxt.mb, MB_LEN_MAX) - end - c - end - - def endsrch_char(c) - ((ctrl_char(c) || meta_char(c) || (c) == RUBOUT) && ((c) != "\C-G")) - end - - def _rl_input_available - IO.select([ $stdin ], nil, [ $stdin ], @_keyboard_input_timeout) - end - - # Process just-read character C according to isearch context CXT. Return - # -1 if the caller should just free the context and return, 0 if we should - # break out of the loop, and 1 if we should continue to read characters. - def _rl_isearch_dispatch(cxt, c) - f = nil - - if c.is_a?(Integer) && c < 0 - cxt.sflags |= SF_FAILED - cxt.history_pos = cxt.last_found_line - return -1 - end - - # Translate the keys we do something with to opcodes. - if (c && @_rl_keymap[c]) - f = @_rl_keymap[c] - if (f == :rl_reverse_search_history) - cxt.lastc = (cxt.sflags & SF_REVERSE)!=0 ? -1 : -2 - elsif (f == :rl_forward_search_history) - cxt.lastc = (cxt.sflags & SF_REVERSE)!=0 ? -2 : -1 - elsif (f == :rl_rubout) - cxt.lastc = -3 - elsif (c == "\C-G") - cxt.lastc = -4 - elsif (c == "\C-W") # XXX - cxt.lastc = -5 - elsif (c == "\C-Y") # XXX - cxt.lastc = -6 - end - end - - # The characters in isearch_terminators (set from the user-settable - # variable isearch-terminators) are used to terminate the search but - # not subsequently execute the character as a command. The default - # value is "\033\012" (ESC and C-J). - if (cxt.lastc.class == String && cxt.search_terminators.include?(cxt.lastc)) - # ESC still terminates the search, but if there is pending - #input or if input arrives within 0.1 seconds (on systems - #with select(2)) it is used as a prefix character - #with rl_execute_next. WATCH OUT FOR THIS! This is intended - #to allow the arrow keys to be used like ^F and ^B are used - #to terminate the search and execute the movement command. - #XXX - since _rl_input_available depends on the application- - #settable keyboard timeout value, this could alternatively - #use _rl_input_queued(100000) - if (cxt.lastc == ESC && _rl_input_available()) - rl_execute_next(ESC) - end - return (0) - end - - if !@rl_byte_oriented - if (cxt.lastc.class == String && (cxt.mb.length == 1) && endsrch_char(cxt.lastc)) - # This sets rl_pending_input to c; it will be picked up the next - # time rl_read_key is called. - rl_execute_next(cxt.lastc) - return (0) - end - elsif (cxt.lastc.class == String && endsrch_char(cxt.lastc)) - # This sets rl_pending_input to LASTC; it will be picked up the next - # time rl_read_key is called. - rl_execute_next(cxt.lastc) - return (0) - end - - # Now dispatch on the character. `Opcodes' affect the search string or - # state. Other characters are added to the string. - case (cxt.lastc) - - # search again - when -1 - if (cxt.search_string_index == 0) - if (@last_isearch_string) - cxt.search_string_size = 64 + @last_isearch_string_len - cxt.search_string = @last_isearch_string.dup - cxt.search_string_index = @last_isearch_string_len - rl_display_search(cxt.search_string, (cxt.sflags & SF_REVERSE)!=0, -1) - else - return (1) - end - elsif (cxt.sflags & SF_REVERSE)!=0 - cxt.sline_index-=1 - elsif (cxt.sline_index != cxt.sline_len) - cxt.sline_index+=1 - else - rl_ding() - end - - # switch directions - when -2 - cxt.direction = -cxt.direction - if (cxt.direction < 0) - cxt.sflags |= SF_REVERSE - else - cxt.sflags &= ~SF_REVERSE - end - # delete character from search string. - when -3 # C-H, DEL - # This is tricky. To do this right, we need to keep a - # stack of search positions for the current search, with - # sentinels marking the beginning and end. But this will - # do until we have a real isearch-undo. - if (cxt.search_string_index == 0) - rl_ding() - else - cxt.search_string_index -= 1 - cxt.search_string.chop! - end - when -4 # C-G, abort - rl_replace_line(cxt.lines[cxt.save_line], false) - @rl_point = cxt.save_point - @rl_mark = cxt.save_mark - rl_restore_prompt() - rl_clear_message() - return -1 - when -5 # C-W - # skip over portion of line we already matched and yank word - wstart = @rl_point + cxt.search_string_index - if (wstart >= @rl_end) - rl_ding() - else - # if not in a word, move to one. - cval = _rl_char_value(@rl_line_buffer, wstart) - if (!_rl_walphabetic(cval)) - rl_ding() - else - if !@rl_byte_oriented - n = _rl_find_next_mbchar(@rl_line_buffer, wstart, 1, MB_FIND_NONZERO) - else - n = wstart+1 - end - while (n < @rl_end) - cval = _rl_char_value(@rl_line_buffer, n) - break if !_rl_walphabetic(cval) - if !@rl_byte_oriented - n = _rl_find_next_mbchar(@rl_line_buffer, n, 1, MB_FIND_NONZERO) - else - n = n+1 - end - end - wlen = n - wstart + 1 - if (cxt.search_string_index + wlen + 1 >= cxt.search_string_size) - cxt.search_string_size += wlen + 1 - end - cxt.search_string[cxt.search_string_index..-1] = @rl_line_buffer[wstart,wlen] - cxt.search_string_index += wlen - end - end - - when -6 # C-Y - # skip over portion of line we already matched and yank rest - wstart = @rl_point + cxt.search_string_index - if (wstart >= @rl_end) - rl_ding() - else - n = @rl_end - wstart + 1 - if (cxt.search_string_index + n + 1 >= cxt.search_string_size) - cxt.search_string_size += n + 1 - end - cxt.search_string[cxt.search_string_index..-1] = @rl_line_buffer[wstart,n] - end - - # Add character to search string and continue search. - else - if (cxt.search_string_index + 2 >= cxt.search_string_size) - cxt.search_string_size += 128 - end - if !@rl_byte_oriented - for j in 0 ... cxt.mb.length - cxt.search_string << cxt.mb[j,1] - cxt.search_string_index += 1 - end - else - cxt.search_string << c - cxt.search_string_index += 1 - end - end - - while (cxt.sflags &= ~(SF_FOUND|SF_FAILED))!=0 - limit = cxt.sline_len - cxt.search_string_index + 1 - # Search the current line. - while ((cxt.sflags & SF_REVERSE)!=0 ? (cxt.sline_index >= 0) : (cxt.sline_index < limit)) - - if (cxt.search_string[0,cxt.search_string_index] == cxt.sline[cxt.sline_index,cxt.search_string_index]) - cxt.sflags |= SF_FOUND - break - else - cxt.sline_index += cxt.direction - end - end - break if (cxt.sflags & SF_FOUND)!=0 - - # Move to the next line, but skip new copies of the line - # we just found and lines shorter than the string we're - # searching for. - begin - # Move to the next line. - cxt.history_pos += cxt.direction - - # At limit for direction? - if ((cxt.sflags & SF_REVERSE)!=0 ? (cxt.history_pos < 0) : (cxt.history_pos == cxt.hlen)) - cxt.sflags |= SF_FAILED - break - end - - # We will need these later. - cxt.sline = cxt.lines[cxt.history_pos] - cxt.sline_len = cxt.sline.length - end while ((cxt.prev_line_found && cxt.prev_line_found == cxt.lines[cxt.history_pos]) || - (cxt.search_string_index > cxt.sline_len)) - - break if (cxt.sflags & SF_FAILED)!=0 - - # Now set up the line for searching... - cxt.sline_index = (cxt.sflags & SF_REVERSE)!=0 ? cxt.sline_len - cxt.search_string_index : 0 - end - - if (cxt.sflags & SF_FAILED)!=0 - # We cannot find the search string. Ding the bell. - rl_ding() - cxt.history_pos = cxt.last_found_line - return 1 - end - - # We have found the search string. Just display it. But don't - # actually move there in the history list until the user accepts - # the location. - if (cxt.sflags & SF_FOUND)!=0 - cxt.prev_line_found = cxt.lines[cxt.history_pos] - rl_replace_line(cxt.lines[cxt.history_pos], false) - @rl_point = cxt.sline_index - cxt.last_found_line = cxt.history_pos - rl_display_search(cxt.search_string, (cxt.sflags & SF_REVERSE)!=0, (cxt.history_pos == cxt.save_line) ? -1 : cxt.history_pos) - end - 1 - end - - # How to clear things from the "echo-area". - def rl_clear_message() - @rl_display_prompt = @rl_prompt - if (@msg_saved_prompt) - rl_restore_prompt() - @msg_saved_prompt = nil - end - send(@rl_redisplay_function) - 0 - end - - def _rl_isearch_fini(cxt) - # First put back the original state. - @rl_line_buffer = cxt.lines[cxt.save_line].dup - rl_restore_prompt() - - # Save the search string for possible later use. - @last_isearch_string = cxt.search_string - @last_isearch_string_len = cxt.search_string_index - cxt.search_string = nil - - if (cxt.last_found_line < cxt.save_line) - rl_get_previous_history(cxt.save_line - cxt.last_found_line, 0) - else - rl_get_next_history(cxt.last_found_line - cxt.save_line, 0) - end - - # If the string was not found, put point at the end of the last matching - # line. If last_found_line == orig_line, we didn't find any matching - # history lines at all, so put point back in its original position. - if (cxt.sline_index < 0) - - if (cxt.last_found_line == cxt.save_line) - cxt.sline_index = cxt.save_point - else - cxt.sline_index = @rl_line_buffer.delete(0.chr).length - end - @rl_mark = cxt.save_mark - end - - @rl_point = cxt.sline_index - # Don't worry about where to put the mark here; rl_get_previous_history - # and rl_get_next_history take care of it. - rl_clear_message() - end - - - def _rl_isearch_cleanup(cxt, r) - if (r >= 0) - _rl_isearch_fini(cxt) - end - @_rl_iscxt = nil - - rl_unsetstate(RL_STATE_ISEARCH) - - r != 0 - end - - # Do the command associated with KEY in MAP. - # If the associated command is really a keymap, then read - # another key, and dispatch into that map. - def _rl_dispatch(key, map) - @_rl_dispatching_keymap = map - return _rl_dispatch_subseq(key, map, false) - end - - - def _rl_dispatch_subseq(key, map, got_subseq) - func = map[key] - if (func) - @rl_executing_keymap = map - - @rl_dispatching = true - rl_setstate(RL_STATE_DISPATCHING) - send(map[key],@rl_numeric_arg * @rl_arg_sign, key) - rl_unsetstate(RL_STATE_DISPATCHING) - @rl_dispatching = false - if (@rl_pending_input == 0 && map[key] != :rl_digit_argument) - @rl_last_func = map[key] - end - else - if(map.keys.detect{|x| x =~ /^#{Regexp.escape(key)}/}) - key += _rl_subseq_getchar(key) - return _rl_dispatch_subseq(key,map,got_subseq) - elsif(key.length>1 && key[1].ord < 0x7f) - _rl_abort_internal() - return -1 - else - @rl_dispatching = true - rl_setstate(RL_STATE_DISPATCHING) - send(:rl_insert,@rl_numeric_arg * @rl_arg_sign, key) - rl_unsetstate(RL_STATE_DISPATCHING) - @rl_dispatching = false - end - end - 0 - end - - # Add KEY to the buffer of characters to be read. Returns 1 if the - # character was stuffed correctly; 0 otherwise. - def rl_stuff_char(key) - return 0 if (ibuffer_space() == 0) - - if (key == EOF) - key = NEWLINE - @rl_pending_input = EOF - rl_setstate(RL_STATE_INPUTPENDING) - end - @ibuffer[@push_index] = key - @push_index += 1 - if (@push_index >= @ibuffer_len) - @push_index = 0 - end - - return 1 - end - - begin - # Cygwin will look like Windows, but we want to treat it like a Posix OS: - raise LoadError, "Cygwin is a Posix OS." if RUBY_PLATFORM =~ /\bcygwin\b/i - raise LoadError, "Not Windows" if RUBY_PLATFORM !~ /mswin|mingw/ - - if RUBY_VERSION < '1.9.1' - require 'Win32API' - else - require 'fiddle' - class Win32API - DLL = {} - TYPEMAP = {"0" => Fiddle::TYPE_VOID, "S" => Fiddle::TYPE_VOIDP, "I" => Fiddle::TYPE_LONG} - CALL_TYPE_TO_ABI = {:stdcall => 1, :cdecl => 1, nil => 1} #Taken from Fiddle::Importer - - def initialize(dllname, func, import, export = "0", calltype = :stdcall) - @proto = import.join.tr("VPpNnLlIi", "0SSI").chomp('0').split('') - handle = DLL[dllname] ||= Fiddle.dlopen(dllname) - @func = Fiddle::Function.new(handle[func], TYPEMAP.values_at(*@proto), CALL_TYPE_TO_ABI[calltype]) - end - - def call(*args) - args.each_with_index do |x, i| - args[i], = [x == 0 ? nil : x].pack("p").unpack("l!*") if @proto[i] == "S" && !x.is_a?(Fiddle::Pointer) - args[i], = [x].pack("I").unpack("i") if @proto[i] == "I" - end - @func.call(*args).to_i || 0 - end - - alias Call call - end - end - - STD_OUTPUT_HANDLE = -11 - STD_INPUT_HANDLE = -10 - KEY_EVENT = 1 - VK_SHIFT = 0x10 - VK_MENU = 0x12 - VK_LMENU = 0xA4 - VK_RMENU = 0xA5 - - LEFT_CTRL_PRESSED = 0x0008 - RIGHT_CTRL_PRESSED = 0x0004 - LEFT_ALT_PRESSED = 0x0002 - RIGHT_ALT_PRESSED = 0x0001 - - @getch = Win32API.new("msvcrt", "_getch", [], 'I') - @kbhit = Win32API.new("msvcrt", "_kbhit", [], 'I') - @GetStdHandle = Win32API.new("kernel32","GetStdHandle",['L'],'L') - @SetConsoleCursorPosition = Win32API.new("kernel32","SetConsoleCursorPosition",['L','L'],'L') - @GetConsoleScreenBufferInfo = Win32API.new("kernel32","GetConsoleScreenBufferInfo",['L','P'],'L') - @FillConsoleOutputCharacter = Win32API.new("kernel32","FillConsoleOutputCharacter",['L','L','L','L','P'],'L') - @ReadConsoleInput = Win32API.new( "kernel32", "ReadConsoleInput", ['L', 'P', 'L', 'P'], 'L' ) - @MessageBeep = Win32API.new("user32","MessageBeep",['L'],'L') - @GetKeyboardState = Win32API.new("user32","GetKeyboardState",['P'],'L') - @GetKeyState = Win32API.new("user32","GetKeyState",['L'],'L') - @hConsoleHandle = @GetStdHandle.Call(STD_OUTPUT_HANDLE) - @hConsoleInput = @GetStdHandle.Call(STD_INPUT_HANDLE) - @pending_count = 0 - @pending_key = nil - - begin - case `chcp`.scan(/\d+$/).first.to_i - when 936,949,950,51932,51936,50225 - @encoding = "E" - when 932,50220,50221,20222 - @encoding = "S" - when 65001 - @encoding = "U" - else - @encoding = "N" - end - rescue - @encoding = "N" - end - - def rl_getc(stream) - while (@kbhit.Call == 0) - # If there is no input, yield the processor for other threads - sleep(@_keyboard_input_timeout) - end - c = @getch.Call - alt = (@GetKeyState.call(VK_LMENU) & 0x80) != 0 - if c==0 || c==0xE0 - while (@kbhit.Call == 0) - # If there is no input, yield the processor for other threads - sleep(@_keyboard_input_timeout) - end - r = c.chr + @getch.Call.chr - else - r = c.chr - end - r = "\e"+r if alt - r - end - - def rl_gather_tyi() - chars_avail = @kbhit.Call - return 0 if(chars_avail<=0) - k = send(@rl_getc_function,@rl_instream) - rl_stuff_char(k) - return 1 - end - - rescue LoadError # If we're not on Windows try... - - if ENV["LANG"] =~ /\.UTF-8/ - @encoding = "U" - elsif ENV["LANG"] =~ /\.EUC/ - @encoding = "E" - elsif ENV["LANG"] =~ /\.SHIFT/ - @encoding = "S" - else - @encoding = "N" - end - - def rl_getc(stream) - begin - c = stream.read(1) - rescue Errno::EINTR - c = rl_getc(stream) - end - return c ? c : EOF - end - - def rl_gather_tyi() - result = select([@rl_instream],nil,nil,0.1) - return 0 if result.nil? - k = send(@rl_getc_function,@rl_instream) - rl_stuff_char(k) - return 1 - end - end - - if (Object.const_defined?('Encoding') and Encoding.respond_to?('default_external')) - @encoding = "X" # ruby 1.9.x or greater - @encoding_name = Encoding.default_external - end - - @rl_byte_oriented = @encoding == "N" - - # Read a key, including pending input. - def rl_read_key() - @rl_key_sequence_length+=1 - - if (@rl_pending_input!=0) - c = @rl_pending_input - rl_clear_pending_input() - else - # If the user has an event function, then call it periodically. - if (@rl_event_hook) - while (@rl_event_hook && (c=rl_get_char()).nil?) - - send(@rl_event_hook) - if (@rl_done) # XXX - experimental - return ("\n") - end - if (rl_gather_tyi() < 0) # XXX - EIO - @rl_done = true - return ("\n") - end - end - - else - - if (c=rl_get_char()).nil? - c = send(@rl_getc_function,@rl_instream) - end - end - end - - return (c) - end - - - # Return the amount of space available in the buffer for stuffing - # characters. - def ibuffer_space() - if (@pop_index > @push_index) - return (@pop_index - @push_index - 1) - else - return (@ibuffer_len - (@push_index - @pop_index)) - end - end - - # Get a key from the buffer of characters to be read. - # Return the key in KEY. - # Result is KEY if there was a key, or 0 if there wasn't. - def rl_get_char() - if (@push_index == @pop_index) - return nil - end - key = @ibuffer[@pop_index] - @pop_index += 1 - - if (@pop_index >= @ibuffer_len) - @pop_index = 0 - end - - return key - end - - # Stuff KEY into the *front* of the input buffer. - # Returns non-zero if successful, zero if there is - # no space left in the buffer. - def _rl_unget_char(key) - if (ibuffer_space()!=0) - @pop_index-=1 - if (@pop_index < 0) - @pop_index = @ibuffer_len - 1 - end - @ibuffer[@pop_index] = key - return (1) - end - return (0) - end - - def _rl_subseq_getchar(key) - if (key == ESC) - rl_setstate(RL_STATE_METANEXT) - end - rl_setstate(RL_STATE_MOREINPUT) - k = rl_read_key() - rl_unsetstate(RL_STATE_MOREINPUT) - if (key == ESC) - rl_unsetstate(RL_STATE_METANEXT) - end - - return k - end - - # Clear to the end of the line. COUNT is the minimum - # number of character spaces to clear, - def _rl_clear_to_eol(count) - if (@_rl_term_clreol) - @rl_outstream.write(@_rl_term_clreol) - elsif (count!=0) - space_to_eol(count) - end - end - - # Clear to the end of the line using spaces. COUNT is the minimum - # number of character spaces to clear, - def space_to_eol(count) - if @hConsoleHandle - csbi = Fiddle::Pointer.malloc(24) - @GetConsoleScreenBufferInfo.Call(@hConsoleHandle,csbi) - cursor_pos = csbi[4,4].unpack('L').first - written = Fiddle::Pointer.malloc(4) - @FillConsoleOutputCharacter.Call(@hConsoleHandle,0x20,count,cursor_pos,written) - else - @rl_outstream.write(' ' * count) - end - @_rl_last_c_pos += count - end - - def _rl_clear_screen() - if (@_rl_term_clrpag) - @rl_outstream.write(@_rl_term_clrpag) - else - rl_crlf() - end - end - - # Move the cursor back. - def _rl_backspace(count) - if (@_rl_term_backspace) - @_rl_out_stream.write(@_rl_term_backspace * count) - else - @_rl_out_stream.write("\b"*count) - end - 0 - end - - # Move to the start of the next line. - def rl_crlf() - if (@_rl_term_cr) - @_rl_out_stream.write(@_rl_term_cr) - end - @_rl_out_stream.write("\n") - return 0 - end - - # Move to the start of the current line. - def cr() - if (@_rl_term_cr) - @_rl_out_stream.write(@_rl_term_cr) - @_rl_last_c_pos = 0 - end - end - - def _rl_erase_entire_line() - cr() - _rl_clear_to_eol(0) - cr() - @rl_outstream.flush - end - - def _rl_internal_char_cleanup() - # In vi mode, when you exit insert mode, the cursor moves back - # over the previous character. We explicitly check for that here. - if (@rl_editing_mode == @vi_mode && @_rl_keymap == @vi_movement_keymap) - rl_vi_check() - end - - if (@rl_num_chars_to_read!=0 && @rl_end >= @rl_num_chars_to_read) - send(@rl_redisplay_function) - @_rl_want_redisplay = false - rl_newline(1, "\n") - end - - if (!@rl_done) - send(@rl_redisplay_function) - @_rl_want_redisplay = false - end - - # If the application writer has told us to erase the entire line if - # the only character typed was something bound to rl_newline, do so. - if (@rl_erase_empty_line && @rl_done && @rl_last_func == :rl_newline && - @rl_point == 0 && @rl_end == 0) - _rl_erase_entire_line() - end - end - - def readline_internal_charloop() - lastc = -1 - eof_found = false - - while (!@rl_done) - lk = @_rl_last_command_was_kill - - # send(rl_redisplay_function) - # @_rl_want_redisplay = false - - if (@rl_pending_input == 0) - # Then initialize the argument and number of keys read. - _rl_reset_argument() - @rl_key_sequence_length = 0 - end - - rl_setstate(RL_STATE_READCMD) - c = rl_read_key() - rl_unsetstate(RL_STATE_READCMD) - # look at input.c:rl_getc() for the circumstances under which this will - #be returned; punt immediately on read error without converting it to - #a newline. - if (c == READERR) - eof_found = true - break - end - - # EOF typed to a non-blank line is a . - if (c == EOF && @rl_end!=0) - c = NEWLINE - end - - # The character _rl_eof_char typed to blank line, and not as the - #previous character is interpreted as EOF. - if (((c == @_rl_eof_char && lastc != c) || c == EOF) && @rl_end==0) - eof_found = true - break - end - lastc = c - if _rl_dispatch(c, @_rl_keymap)== -1 - next - end - - # If there was no change in _rl_last_command_was_kill, then no kill - #has taken place. Note that if input is pending we are reading - #a prefix command, so nothing has changed yet. - if (@rl_pending_input == 0 && lk == @_rl_last_command_was_kill) - @_rl_last_command_was_kill = false - end - _rl_internal_char_cleanup() - end - - eof_found - end - - # How to abort things. - def _rl_abort_internal() - rl_ding() - rl_clear_message() - _rl_reset_argument() - rl_clear_pending_input() - - rl_unsetstate(RL_STATE_MACRODEF) - - @rl_last_func = nil - #throw :readline_top_level - send(@rl_redisplay_function) - @_rl_want_redisplay = false - 0 - end - - def rl_abort(count, key) - _rl_abort_internal() - end - - def rl_vi_check() - if (@rl_point!=0 && @rl_point == @rl_end) - @rl_point-=1 - end - 0 - end - - def readline_internal_teardown(eof) - # Restore the original of this history line, iff the line that we - # are editing was originally in the history, AND the line has changed. - entry = current_history() - - if (entry && @rl_undo_list) - temp = @rl_line_buffer.delete(0.chr).dup - rl_revert_line(1, 0) - entry = replace_history_entry(where_history(), @rl_line_buffer, nil) - entry = nil - - @rl_line_buffer = temp+0.chr - temp = nil - end - - # At any rate, it is highly likely that this line has an undo list. Get - # rid of it now. - if (@rl_undo_list) - rl_free_undo_list() - end - # Restore normal cursor, if available. - _rl_set_insert_mode(RL_IM_INSERT, 0) - - (eof ? nil : @rl_line_buffer.delete(0.chr)) - end - - # Read a line of input from the global rl_instream, doing output on - # the global rl_outstream. - # If rl_prompt is non-null, then that is our prompt. - def readline_internal() - readline_internal_setup() - eof = readline_internal_charloop() - readline_internal_teardown(eof) - end - - # Read a line of input. Prompt with PROMPT. An empty PROMPT means - # none. A return value of NULL means that EOF was encountered. - def readline(prompt) - # If we are at EOF return a NULL string. - if (@rl_pending_input == EOF) - rl_clear_pending_input() - return nil - end - - rl_set_prompt(prompt) - - rl_initialize() - @readline_echoing_p = true - if (@rl_prep_term_function) - send(@rl_prep_term_function,@_rl_meta_flag) - end - rl_set_signals() - - value = readline_internal() - if(@rl_deprep_term_function) - send(@rl_deprep_term_function) - end - - rl_clear_signals() - - value - end - - # Increase the size of RL_LINE_BUFFER until it has enough space to hold - # LEN characters. - def rl_extend_line_buffer(len) - while (len >= @rl_line_buffer.length) - @rl_line_buffer << 0.chr * DEFAULT_BUFFER_SIZE - end - @the_line = @rl_line_buffer - end - - # Insert a string of text into the line at point. This is the only - # way that you should do insertion. _rl_insert_char () calls this - # function. Returns the number of characters inserted. - def rl_insert_text(string) - string.delete!(0.chr) - l = string.length - return 0 if (l == 0) - - if (@rl_end + l >= @rl_line_buffer.length) - rl_extend_line_buffer(@rl_end + l) - end - @rl_line_buffer[@rl_point,0] = string - - # Remember how to undo this if we aren't undoing something. - if (!@_rl_doing_an_undo) - # If possible and desirable, concatenate the undos. - if ((l == 1) && - @rl_undo_list && - (@rl_undo_list.what == UNDO_INSERT) && - (@rl_undo_list.end == @rl_point) && - (@rl_undo_list.end - @rl_undo_list.start < 20)) - @rl_undo_list.end+=1 - else - rl_add_undo(UNDO_INSERT, @rl_point, @rl_point + l, nil) - end - end - @rl_point += l - @rl_end += l - if @rl_line_buffer.length <= @rl_end - @rl_line_buffer << 0.chr * (@rl_end - @rl_line_buffer.length + 1) - else - @rl_line_buffer[@rl_end] = "\0" - end - l - end - - def alloc_undo_entry(what, start, _end, text) - temp = Struct.new(:what,:start,:end,:text,:next).new - temp.what = what - temp.start = start - temp.end = _end - temp.text = text - temp.next = nil - temp - end - - #* Remember how to undo something. Concatenate some undos if that - # seems right. - def rl_add_undo(what, start, _end, text) - temp = alloc_undo_entry(what, start, _end, text) - temp.next = @rl_undo_list - @rl_undo_list = temp - end - - - # Delete the string between FROM and TO. FROM is inclusive, TO is not. - # Returns the number of characters deleted. - def rl_delete_text(from, to) - - # Fix it if the caller is confused. - if (from > to) - from,to = to,from - end - - # fix boundaries - if (to > @rl_end) - to = @rl_end - if (from > to) - from = to - end - end - if (from < 0) - from = 0 - end - text = rl_copy_text(from, to) - diff = to - from - @rl_line_buffer[from...to] = '' - @rl_line_buffer << 0.chr * diff - # Remember how to undo this delete. - if (!@_rl_doing_an_undo) - rl_add_undo(UNDO_DELETE, from, to, text) - else - text = nil - end - @rl_end -= diff - @rl_line_buffer[@rl_end,1] = 0.chr - return (diff) - end - - def rl_copy_text(from, to) - return @rl_line_buffer[from...to] - end - - # Fix up point so that it is within the line boundaries after killing - # text. If FIX_MARK_TOO is non-zero, the mark is forced within line - # boundaries also. - - def __rl_fix_point(x) - if (x > @rl_end) - @rl_end - elsif (x < 0) - 0 - else - x - end - end - - def _rl_fix_point(fix_mark_too) - @rl_point = __rl_fix_point(@rl_point) - if (fix_mark_too) - @rl_mark = __rl_fix_point(@rl_mark) - end - end - - # Begin a group. Subsequent undos are undone as an atomic operation. - def rl_begin_undo_group() - rl_add_undo(UNDO_BEGIN, 0, 0, nil) - @_rl_undo_group_level+=1 - 0 - end - - # End an undo group started with rl_begin_undo_group (). - def rl_end_undo_group() - rl_add_undo(UNDO_END, 0, 0, nil) - @_rl_undo_group_level-=1 - 0 - end - - def rl_free_undo_list() - replace_history_data(-1, @rl_undo_list, nil) - @rl_undo_list = nil - end - - # Replace the contents of the line buffer between START and END with - # TEXT. The operation is undoable. To replace the entire line in an - # undoable mode, use _rl_replace_text(text, 0, rl_end) - def _rl_replace_text(text, start, _end) - rl_begin_undo_group() - rl_delete_text(start, _end + 1) - @rl_point = start - n = rl_insert_text(text) - rl_end_undo_group() - n - end - - # Replace the current line buffer contents with TEXT. If CLEAR_UNDO is - # non-zero, we free the current undo list. - def rl_replace_line(text, clear_undo) - len = text.delete(0.chr).length - @rl_line_buffer = text.dup + 0.chr - @rl_end = len - if (clear_undo) - rl_free_undo_list() - end - _rl_fix_point(true) - end - - - # Replace the DATA in the specified history entries, replacing OLD with - # NEW. WHICH says which one(s) to replace: WHICH == -1 means to replace - # all of the history entries where entry->data == OLD; WHICH == -2 means - # to replace the `newest' history entry where entry->data == OLD; and - # WHICH >= 0 means to replace that particular history entry's data, as - # long as it matches OLD. - def replace_history_data(which,old, new) - new = new.dup if new - if (which < -2 || which >= @history_length || @history_length == 0 || @the_history.nil?) - return - end - if (which >= 0) - entry = @the_history[which] - if (entry && entry.data == old) - entry.data = new - end - return - end - - last = -1 - for i in 0 ... @history_length - entry = @the_history[i] - if entry.nil? - next - end - if (entry.data == old) - last = i - if (which == -1) - entry.data = new - end - end - end - if (which == -2 && last >= 0) - entry = @the_history[last] - entry.data = new # XXX - we don't check entry->old - end - end - - # Move forward COUNT bytes. - def rl_forward_byte(count, key) - if (count < 0) - return (rl_backward_byte(-count, key)) - end - if (count > 0) - _end = @rl_point + count - lend = @rl_end > 0 ? @rl_end - ((@rl_editing_mode == @vi_mode)?1:0) : @rl_end - if (_end > lend) - @rl_point = lend - rl_ding() - else - @rl_point = _end - end - end - - if (@rl_end < 0) - @rl_end = 0 - end - return 0 - end - - # Move forward COUNT characters. - def rl_forward_char(count, key) - if @rl_byte_oriented - return (rl_forward_byte(count, key)) - end - if (count < 0) - return (rl_backward_char(-count, key)) - end - if (count > 0) - point = _rl_find_next_mbchar(@rl_line_buffer, @rl_point, count, MB_FIND_NONZERO) - if (@rl_end <= point && @rl_editing_mode == @vi_mode) - point = _rl_find_prev_mbchar(@rl_line_buffer, @rl_end, MB_FIND_NONZERO) - end - if (@rl_point == point) - rl_ding() - end - @rl_point = point - if (@rl_end < 0) - @rl_end = 0 - end - end - 0 - end - - # Backwards compatibility. - def rl_forward(count, key) - rl_forward_char(count, key) - end - - # Move backward COUNT bytes. - def rl_backward_byte(count, key) - if (count < 0) - return (rl_forward_byte(-count, key)) - end - if (count > 0) - if (@rl_point < count) - @rl_point = 0 - rl_ding() - else - @rl_point -= count - end - end - - if (@rl_point < 0) - @rl_point = 0 - end - 0 - end - - # Move backward COUNT characters. - def rl_backward_char(count, key) - if @rl_byte_oriented - return (rl_backward_byte(count, key)) - end - if (count < 0) - return (rl_forward_char(-count, key)) - end - - if (count > 0) - point = @rl_point - while (count > 0 && point > 0) - point = _rl_find_prev_mbchar(@rl_line_buffer, point, MB_FIND_NONZERO) - count-=1 - end - if (count > 0) - @rl_point = 0 - rl_ding() - else - @rl_point = point - end - end - 0 - end - - # Backwards compatibility. - def rl_backward(count, key) - rl_backward_char(count, key) - end - - # Move to the beginning of the line. - def rl_beg_of_line(count, key) - @rl_point = 0 - 0 - end - - # Move to the end of the line. - def rl_end_of_line(count, key) - @rl_point = @rl_end - 0 - end - - def _rl_char_value(buf,ind) - buf[ind,1] - end - - @_rl_allow_pathname_alphabetic_chars = false - @pathname_alphabetic_chars = '/-_=~.#$' - - def rl_alphabetic(c) - if c =~ /\w/ - return true - end - - return !!(@_rl_allow_pathname_alphabetic_chars && - @pathname_alphabetic_chars[c]) - end - - def _rl_walphabetic(c) - rl_alphabetic(c) - end - - # Move forward a word. We do what Emacs does. Handles multibyte chars. - def rl_forward_word(count, key) - if (count < 0) - return (rl_backward_word(-count, key)) - end - - while (count>0) - return 0 if (@rl_point == @rl_end) - - # If we are not in a word, move forward until we are in one. - # Then, move forward until we hit a non-alphabetic character. - c = _rl_char_value(@rl_line_buffer, @rl_point) - - if (!_rl_walphabetic(c)) - if !@rl_byte_oriented - @rl_point = _rl_find_next_mbchar(@rl_line_buffer, @rl_point, 1, MB_FIND_NONZERO) - else - @rl_point += 1 - end - while (@rl_point < @rl_end) - c = _rl_char_value(@rl_line_buffer, @rl_point) - if (_rl_walphabetic(c)) - break - end - if !@rl_byte_oriented - @rl_point = _rl_find_next_mbchar(@rl_line_buffer, @rl_point, 1, MB_FIND_NONZERO) - else - @rl_point += 1 - end - end - end - - return 0 if (@rl_point == @rl_end) - - if !@rl_byte_oriented - @rl_point = _rl_find_next_mbchar(@rl_line_buffer, @rl_point, 1, MB_FIND_NONZERO) - else - @rl_point += 1 - end - while (@rl_point < @rl_end) - c = _rl_char_value(@rl_line_buffer, @rl_point) - if (!_rl_walphabetic(c)) - break - end - if !@rl_byte_oriented - @rl_point = _rl_find_next_mbchar(@rl_line_buffer, @rl_point, 1, MB_FIND_NONZERO) - else - @rl_point += 1 - end - end - count -= 1 - end - 0 - end - - # Move backward a word. We do what Emacs does. Handles multibyte chars. - def rl_backward_word(count, key) - if (count < 0) - return (rl_forward_word(-count, key)) - end - while (count>0) - return 0 if (@rl_point == 0) - - # Like rl_forward_word (), except that we look at the characters - # just before point. - _p = !@rl_byte_oriented ? _rl_find_prev_mbchar(@rl_line_buffer, @rl_point, MB_FIND_NONZERO):(@rl_point-1) - c = _rl_char_value(@rl_line_buffer, _p) - if (!_rl_walphabetic(c)) - @rl_point = _p - while (@rl_point > 0) - _p = !@rl_byte_oriented ? _rl_find_prev_mbchar(@rl_line_buffer, @rl_point, MB_FIND_NONZERO):(@rl_point-1) - c = _rl_char_value(@rl_line_buffer, _p) - if (_rl_walphabetic(c)) - break - end - @rl_point = _p - end - end - while (@rl_point>0) - _p = !@rl_byte_oriented ? _rl_find_prev_mbchar(@rl_line_buffer, @rl_point, MB_FIND_NONZERO):(@rl_point-1) - c = _rl_char_value(@rl_line_buffer, _p) - if (!_rl_walphabetic(c)) - break - else - @rl_point = _p - end - end - count -= 1 - end - 0 - end - - # return the `current display line' of the cursor -- the number of lines to - # move up to get to the first screen line of the current readline line. - def _rl_current_display_line() - # Find out whether or not there might be invisible characters in the - # editing buffer. - if (@rl_display_prompt == @rl_prompt) - nleft = @_rl_last_c_pos - @_rl_screenwidth - @rl_visible_prompt_length - else - nleft = @_rl_last_c_pos - @_rl_screenwidth - end - - if (nleft > 0) - ret = 1 + nleft / @_rl_screenwidth - else - ret = 0 - end - - ret - end - - # Actually update the display, period. - def rl_forced_update_display() - if (@visible_line) - @visible_line.gsub!(/[^\x00]/,0.chr) - end - rl_on_new_line() - @forced_display=true if !@forced_display - send(@rl_redisplay_function) - 0 - end - - - # Clear the current line. Numeric argument to C-l does this. - def rl_refresh_line(ignore1, ignore2) - curr_line = _rl_current_display_line() - - _rl_move_vert(curr_line) - _rl_move_cursor_relative(0, @rl_line_buffer) # XXX is this right - - _rl_clear_to_eol(0) # arg of 0 means to not use spaces - - rl_forced_update_display() - @rl_display_fixed = true - - 0 - end - - # C-l typed to a line without quoting clears the screen, and then reprints - # the prompt and the current input line. Given a numeric arg, redraw only - # the current line. - def rl_clear_screen(count, key) - if (@rl_explicit_arg) - rl_refresh_line(count, key) - return 0 - end - - _rl_clear_screen() # calls termcap function to clear screen - rl_forced_update_display() - @rl_display_fixed = true - 0 - end - - # Restore the _rl_saved_line_for_history if there is one. - def rl_maybe_unsave_line() - if (@_rl_saved_line_for_history) - # Can't call with `1' because rl_undo_list might point to an undo - # list from a history entry, as in rl_replace_from_history() below. - rl_replace_line(@_rl_saved_line_for_history.line, false) - @rl_undo_list = @_rl_saved_line_for_history.data - @_rl_saved_line_for_history = nil - @rl_point = @rl_end # rl_replace_line sets rl_end - else - rl_ding() - end - 0 - end - - # Save the current line in _rl_saved_line_for_history. - def rl_maybe_save_line() - if @_rl_saved_line_for_history.nil? - @_rl_saved_line_for_history = Struct.new(:line,:timestamp,:data).new - @_rl_saved_line_for_history.line = @rl_line_buffer.dup - @_rl_saved_line_for_history.timestamp = nil - @_rl_saved_line_for_history.data = @rl_undo_list - end - 0 - end - - # Returns the magic number which says what history element we are - # looking at now. In this implementation, it returns history_offset. - def where_history() - @history_offset - end - - # Make the history entry at WHICH have LINE and DATA. This returns - # the old entry so you can dispose of the data. In the case of an - # invalid WHICH, a NULL pointer is returned. - def replace_history_entry (which, line, data) - if (which < 0 || which >= @history_length) - return nil - end - temp = Struct.new(:line,:timestamp,:data).new - old_value = @the_history[which] - temp.line = line.delete(0.chr) - temp.data = data - temp.timestamp = old_value.timestamp.dup - @the_history[which] = temp - old_value - end - - # Perhaps put back the current line if it has changed. - def rl_maybe_replace_line() - temp = current_history() - # If the current line has changed, save the changes. - if (temp && temp.data != @rl_undo_list) - temp = replace_history_entry(where_history(), @rl_line_buffer, @rl_undo_list) - end - 0 - end - - # Back up history_offset to the previous history entry, and return - # a pointer to that entry. If there is no previous entry then return - # a NULL pointer. - def previous_history() - @history_offset!=0 ? @the_history[@history_offset-=1] : nil - end - - # Move history_offset forward to the next history entry, and return - # a pointer to that entry. If there is no next entry then return a - # NULL pointer. - def next_history() - (@history_offset == @history_length) ? nil : @the_history[@history_offset+=1] - end - - # Get the previous item out of our interactive history, making it the current - # line. If there is no previous history, just ding. - def rl_get_previous_history(count, key) - if (count < 0) - return (rl_get_next_history(-count, key)) - end - if (count == 0) - return 0 - end - # either not saved by rl_newline or at end of line, so set appropriately. - if (@_rl_history_saved_point == -1 && (@rl_point!=0 || @rl_end!=0)) - @_rl_history_saved_point = (@rl_point == @rl_end) ? -1 : @rl_point - end - - # If we don't have a line saved, then save this one. - rl_maybe_save_line() - - # If the current line has changed, save the changes. - rl_maybe_replace_line() - - temp = old_temp = nil - while (count>0) - temp = previous_history() - if temp.nil? - break - end - old_temp = temp - count -= 1 - end - - # If there was a large argument, and we moved back to the start of the - # history, that is not an error. So use the last value found. - if (temp.nil? && old_temp) - temp = old_temp - end - - if temp.nil? - rl_ding() - else - rl_replace_from_history(temp, 0) - _rl_history_set_point() - end - - 0 - end - - def _rl_history_set_point () - @rl_point = (@_rl_history_preserve_point && @_rl_history_saved_point != -1) ? - @_rl_history_saved_point : @rl_end - if (@rl_point > @rl_end) - @rl_point = @rl_end - end - if (@rl_editing_mode == @vi_mode && @_rl_keymap != @vi_insertion_keymap) - @rl_point = 0 - end - if (@rl_editing_mode == @emacs_mode) - @rl_mark = (@rl_point == @rl_end ? 0 : @rl_end) - end - end - - # Move down to the next history line. - def rl_get_next_history(count, key) - if (count < 0) - return (rl_get_previous_history(-count, key)) - end - if (count == 0) - return 0 - end - rl_maybe_replace_line() - - # either not saved by rl_newline or at end of line, so set appropriately. - if (@_rl_history_saved_point == -1 && (@rl_point!=0 || @rl_end!=0)) - @_rl_history_saved_point = (@rl_point == @rl_end) ? -1 : @rl_point - end - temp = nil - while (count>0) - temp = next_history() - if temp.nil? - break - end - count -= 1 - end - - if temp.nil? - rl_maybe_unsave_line() - else - rl_replace_from_history(temp, 0) - _rl_history_set_point() - end - 0 - end - - def rl_arrow_keys(count, c) - rl_setstate(RL_STATE_MOREINPUT) - ch = rl_read_key() - rl_unsetstate(RL_STATE_MOREINPUT) - - case (ch.upcase) - when 'A' - rl_get_previous_history(count, ch) - when 'B' - rl_get_next_history(count, ch) - when 'C' - rl_forward_byte(count, ch) - when 'D' - rl_backward_byte(count, ch) - else - rl_ding() - end - 0 - end - - def _rl_any_typein() - return (@push_index != @pop_index) - end - - def _rl_insert_typein(c) - string = c - - while ((key = rl_get_char()) && @_rl_keymap[key] == :rl_insert) - string << key - end - if (key) - _rl_unget_char(key) - end - rl_insert_text(string) - end - - # Insert the character C at the current location, moving point forward. - # If C introduces a multibyte sequence, we read the whole sequence and - # then insert the multibyte char into the line buffer. - def _rl_insert_char(count, c) - return 0 if (count <= 0) - - incoming = '' - - if @rl_byte_oriented - incoming << c - incoming_length = 1 - else - @pending_bytes << c - if _rl_get_char_len(@pending_bytes) == -2 - return 1 - else - incoming = @pending_bytes - @pending_bytes = '' - incoming_length = incoming.length - end - end - - if(count>1) - string = incoming * count - rl_insert_text(string) - string = nil - return 0 - end - - if @rl_byte_oriented - # We are inserting a single character. - #If there is pending input, then make a string of all of the - #pending characters that are bound to rl_insert, and insert - #them all. - if (_rl_any_typein()) - _rl_insert_typein(c) - else - rl_insert_text(c) - end - else - rl_insert_text(incoming) - end - - return 0 - end - - # Overwrite the character at point (or next COUNT characters) with C. - # If C introduces a multibyte character sequence, read the entire sequence - # before starting the overwrite loop. - def _rl_overwrite_char(count, c) - - # Read an entire multibyte character sequence to insert COUNT times. - if (count > 0 && !@rl_byte_oriented) - mbkey = '' - _rl_read_mbstring(c, mbkey, MB_LEN_MAX) - end - rl_begin_undo_group() - - count.times do - if !@rl_byte_oriented - rl_insert_text(mbkey) - else - _rl_insert_char(1, c) - end - if (@rl_point < @rl_end) - rl_delete(1, c) - end - end - - rl_end_undo_group() - - return 0 - end - - def rl_insert(count, c) - ((@rl_insert_mode == RL_IM_INSERT) ? _rl_insert_char(count, c) : - _rl_overwrite_char(count, c)) - end - - - # Insert the next typed character verbatim. - def _rl_insert_next(count) - rl_setstate(RL_STATE_MOREINPUT) - c = rl_read_key() - rl_unsetstate(RL_STATE_MOREINPUT) - - if c.is_a?(Integer) && c < 0 - return -1 - end - - _rl_insert_char(count, c) - end - - def rl_quoted_insert(count, key) - _rl_insert_next(count) - end - - # Insert a tab character. - def rl_tab_insert(count, key) - _rl_insert_char(count, "\t") - end - - def _rl_vi_save_insert(up) - if (up.nil? || up.what != UNDO_INSERT) - if (@vi_insert_buffer_size >= 1) - @vi_insert_buffer[0] = 0.chr - end - return - end - start = up.start - _end = up.end - len = _end - start + 1 - @vi_insert_buffer = @rl_line_buffer[start,len-1] - end - - def _rl_vi_done_inserting() - if (@_rl_vi_doing_insert) - - # The `C', `s', and `S' commands set this. - rl_end_undo_group() - # Now, the text between rl_undo_list->next->start and - # rl_undo_list->next->end is what was inserted while in insert - # mode. It gets copied to VI_INSERT_BUFFER because it depends - # on absolute indices into the line which may change (though they - # probably will not). - @_rl_vi_doing_insert = 0 - _rl_vi_save_insert(@rl_undo_list.next) - @vi_continued_command = 1 - else - if ((@_rl_vi_last_key_before_insert == 'i' || @_rl_vi_last_key_before_insert == 'a') && @rl_undo_list) - _rl_vi_save_insert(@rl_undo_list) - - # XXX - Other keys probably need to be checked. - elsif (@_rl_vi_last_key_before_insert == 'C') - rl_end_undo_group() - end - while (@_rl_undo_group_level > 0) - rl_end_undo_group() - end - @vi_continued_command = 0 - end - end - - # Is the command C a VI mode text modification command? - def _rl_vi_textmod_command(c) - return @vi_textmod[c] - end - - def _rl_vi_reset_last() - @_rl_vi_last_command = 'i' - @_rl_vi_last_repeat = 1 - @_rl_vi_last_arg_sign = 1 - @_rl_vi_last_motion = 0 - end - - def _rl_update_final() - full_lines = false - # If the cursor is the only thing on an otherwise-blank last line, - # compensate so we don't print an extra CRLF. - if (@_rl_vis_botlin && @_rl_last_c_pos == 0 && - @visible_line[@vis_lbreaks[@_rl_vis_botlin],1] == 0.chr ) - @_rl_vis_botlin-=1 - full_lines = true - end - _rl_move_vert(@_rl_vis_botlin) - # If we've wrapped lines, remove the final xterm line-wrap flag. - if (full_lines && @_rl_term_autowrap && (vis_llen(@_rl_vis_botlin) == @_rl_screenwidth)) - last_line = @visible_line[@vis_lbreaks[@_rl_vis_botlin]..-1] - @cpos_buffer_position = -1 # don't know where we are in buffer - _rl_move_cursor_relative(@_rl_screenwidth - 1, last_line) # XXX - _rl_clear_to_eol(0) - @rl_outstream.write(last_line[@_rl_screenwidth - 1,1]) - end - @_rl_vis_botlin = 0 - rl_crlf() - @rl_outstream.flush - @rl_display_fixed = true if !@rl_display_fixed - end - - - # What to do when a NEWLINE is pressed. We accept the whole line. - # KEY is the key that invoked this command. I guess it could have - # meaning in the future. - def rl_newline(count, key) - @rl_done = true - - if (@_rl_history_preserve_point) - @_rl_history_saved_point = (@rl_point == @rl_end) ? 1 : @rl_point - end - rl_setstate(RL_STATE_DONE) - - if (@rl_editing_mode == @vi_mode) - _rl_vi_done_inserting() - if (_rl_vi_textmod_command(@_rl_vi_last_command).nil?) # XXX - _rl_vi_reset_last() - end - end - # If we've been asked to erase empty lines, suppress the final update, - # since _rl_update_final calls rl_crlf(). - if (@rl_erase_empty_line && @rl_point == 0 && @rl_end == 0) - return 0 - end - if @readline_echoing_p - _rl_update_final() - end - 0 - end - - # What to do for some uppercase characters, like meta characters, - # and some characters appearing in emacs_ctlx_keymap. This function - # is just a stub, you bind keys to it and the code in _rl_dispatch () - # is special cased. - def rl_do_lowercase_version(ignore1, ignore2) - 0 - end - - def rl_character_len(c, pos) - if (meta_char(c)) - return ((!@_rl_output_meta_chars) ? 4 : 1) - end - if (c == "\t") - return (((pos | 7) + 1) - pos) - end - if (ctrl_char(c) || c == RUBOUT) - return (2) - end - - return ((isprint(c)) ? 1 : 2) - end - - # This is different from what vi does, so the code's not shared. Emacs - # rubout in overwrite mode has one oddity: it replaces a control - # character that's displayed as two characters (^X) with two spaces. - def _rl_overwrite_rubout(count, key) - if (@rl_point == 0) - rl_ding() - return 1 - end - - opoint = @rl_point - - # L == number of spaces to insert - l = 0 - count.times do - rl_backward_char(1, key) - l += rl_character_len(@rl_line_buffer[@rl_point,1], @rl_point) # not exactly right - end - - rl_begin_undo_group() - - if (count > 1 || @rl_explicit_arg) - rl_kill_text(opoint, @rl_point) - else - rl_delete_text(opoint, @rl_point) - end - # Emacs puts point at the beginning of the sequence of spaces. - if (@rl_point < @rl_end) - opoint = @rl_point - _rl_insert_char(l, ' ') - @rl_point = opoint - end - - rl_end_undo_group() - - 0 - end - - # Rubout the character behind point. - def rl_rubout(count, key) - if (count < 0) - return (rl_delete(-count, key)) - end - if (@rl_point==0) - rl_ding() - return -1 - end - - if (@rl_insert_mode == RL_IM_OVERWRITE) - return (_rl_overwrite_rubout(count, key)) - end - _rl_rubout_char(count, key) - end - - - # Quick redisplay hack when erasing characters at the end of the line. - def _rl_erase_at_end_of_line(l) - _rl_backspace(l) - @rl_outstream.write(' '*l) - _rl_backspace(l) - @_rl_last_c_pos -= l - @visible_line[@_rl_last_c_pos,l] = 0.chr * l - @rl_display_fixed = true if !@rl_display_fixed - end - - def _rl_rubout_char(count, key) - # Duplicated code because this is called from other parts of the library. - if (count < 0) - return (rl_delete(-count, key)) - end - if (@rl_point == 0) - rl_ding() - return -1 - end - - orig_point = @rl_point - if (count > 1 || @rl_explicit_arg) - rl_backward_char(count, key) - rl_kill_text(orig_point, @rl_point) - elsif (@rl_byte_oriented) - c = @rl_line_buffer[@rl_point-=1,1] - rl_delete_text(@rl_point, orig_point) - # The erase-at-end-of-line hack is of questionable merit now. - if (@rl_point == @rl_end && isprint(c) && @_rl_last_c_pos!=0) - l = rl_character_len(c, @rl_point) - _rl_erase_at_end_of_line(l) - end - else - @rl_point = _rl_find_prev_mbchar(@rl_line_buffer, @rl_point, MB_FIND_NONZERO) - rl_delete_text(@rl_point, orig_point) - end - - 0 - end - - # Delete the character under the cursor. Given a numeric argument, - # kill that many characters instead. - def rl_delete(count, key) - if (count < 0) - return (_rl_rubout_char(-count, key)) - end - if (@rl_point == @rl_end) - rl_ding() - return -1 - end - - if (count > 1 || @rl_explicit_arg) - xpoint = @rl_point - rl_forward_byte(count, key) - - rl_kill_text(xpoint, @rl_point) - @rl_point = xpoint - else - if !@rl_byte_oriented - xpoint =_rl_find_next_mbchar(@rl_line_buffer, @rl_point, 1, MB_FIND_NONZERO) - else - xpoint = @rl_point + 1 - end - - rl_delete_text(@rl_point, xpoint) - end - 0 - end - - # Add TEXT to the kill ring, allocating a new kill ring slot as necessary. - # This uses TEXT directly, so the caller must not free it. If APPEND is - # non-zero, and the last command was a kill, the text is appended to the - # current kill ring slot, otherwise prepended. - def _rl_copy_to_kill_ring(text, append) - # First, find the slot to work with. - if (!@_rl_last_command_was_kill) - # Get a new slot. - if @rl_kill_ring.nil? - # If we don't have any defined, then make one. - @rl_kill_ring_length = 1 - @rl_kill_ring = Array.new(@rl_kill_ring_length+1) - @rl_kill_ring[slot = 0] = nil - else - # We have to add a new slot on the end, unless we have - # exceeded the max limit for remembering kills. - slot = @rl_kill_ring_length - if (slot == @rl_max_kills) - @rl_kill_ring[0,slot] = @rl_kill_ring[1,slot] - else - slot = @rl_kill_ring_length += 1 - end - @rl_kill_ring[slot-=1] = nil - end - else - slot = @rl_kill_ring_length - 1 - end - - # If the last command was a kill, prepend or append. - if (@_rl_last_command_was_kill && @rl_editing_mode != @vi_mode) - old = @rl_kill_ring[slot] - - if (append) - new = old + text - else - new = text + old - end - old = nil - text = nil - @rl_kill_ring[slot] = new - else - @rl_kill_ring[slot] = text - end - - @rl_kill_index = slot - 0 - end - - # The way to kill something. This appends or prepends to the last - # kill, if the last command was a kill command. if FROM is less - # than TO, then the text is appended, otherwise prepended. If the - # last command was not a kill command, then a new slot is made for - # this kill. - def rl_kill_text(from, to) - # Is there anything to kill? - if (from == to) - @_rl_last_command_was_kill = true if !@_rl_last_command_was_kill - return 0 - end - text = rl_copy_text(from, to) - - # Delete the copied text from the line. - rl_delete_text(from, to) - _rl_copy_to_kill_ring(text, from < to) - @_rl_last_command_was_kill = true if !@_rl_last_command_was_kill - 0 - end - - # This does what C-w does in Unix. We can't prevent people from - # using behaviour that they expect. - def rl_unix_word_rubout(count, key) - if (@rl_point == 0) - rl_ding() - else - orig_point = @rl_point - if (count <= 0) - count = 1 - end - - while (count>0) - while (@rl_point>0 && whitespace(@rl_line_buffer[@rl_point - 1,1])) - @rl_point-=1 - end - - while (@rl_point>0 && !whitespace(@rl_line_buffer[@rl_point - 1,1])) - @rl_point-=1 - end - count -= 1 - end - - rl_kill_text(orig_point, @rl_point) - if (@rl_editing_mode == @emacs_mode) - @rl_mark = @rl_point - end - end - 0 - end - - # This deletes one filename component in a Unix pathname. That is, it - # deletes backward to directory separator (`/') or whitespace. - def rl_unix_filename_rubout(count, key) - if (@rl_point == 0) - rl_ding() - else - orig_point = @rl_point - if (count <= 0) - count = 1 - end - - while (count>0) - - c = @rl_line_buffer[@rl_point - 1,1] - while (@rl_point>0 && (whitespace(c) || c == '/')) - @rl_point-=1 - c = @rl_line_buffer[@rl_point - 1,1] - end - - while (@rl_point>0 && !whitespace(c) && c != '/') - @rl_point-=1 - c = @rl_line_buffer[@rl_point - 1,1] - end - count -= 1 - end - - rl_kill_text(orig_point, @rl_point) - if (@rl_editing_mode == @emacs_mode) - @rl_mark = @rl_point - end - end - 0 - end - - # Delete the character under the cursor, unless the insertion - # point is at the end of the line, in which case the character - # behind the cursor is deleted. COUNT is obeyed and may be used - # to delete forward or backward that many characters. - def rl_rubout_or_delete(count, key) - if (@rl_end != 0 && @rl_point == @rl_end) - return (_rl_rubout_char(count, key)) - else - return (rl_delete(count, key)) - end - end - - # Delete all spaces and tabs around point. - def rl_delete_horizontal_space(count, ignore) - start = @rl_point - - while (@rl_point!=0 && whitespace(@rl_line_buffer[@rl_point - 1])) - @rl_point-=1 - end - start = @rl_point - while (@rl_point < @rl_end && whitespace(@rl_line_buffer[@rl_point])) - @rl_point+=1 - end - if (start != @rl_point) - rl_delete_text(start, @rl_point) - @rl_point = start - end - if (@rl_point < 0) - @rl_point = 0 - end - 0 - end - - # List the possible completions. See description of rl_complete (). - def rl_possible_completions(ignore, invoking_key) - rl_complete_internal('?') - end - - # Like the tcsh editing function delete-char-or-list. The eof character - # is caught before this is invoked, so this really does the same thing as - # delete-char-or-list-or-eof, as long as it's bound to the eof character. - def rl_delete_or_show_completions(count, key) - if (@rl_end != 0 && @rl_point == @rl_end) - return (rl_possible_completions(count, key)) - else - return (rl_delete(count, key)) - end - end - - # Turn the current line into a comment in shell history. - # A K*rn shell style function. - def rl_insert_comment(count, key) - rl_beg_of_line(1, key) - @rl_comment_text = @_rl_comment_begin ? @_rl_comment_begin : '#' - - if (!@rl_explicit_arg) - rl_insert_text(@rl_comment_text) - else - @rl_comment_len = @rl_comment_text.length - if @rl_comment_text[0,@rl_comment_len] == @rl_line_buffer[0,@rl_comment_len] - rl_delete_text(@rl_point, @rl_point + @rl_comment_len) - else - rl_insert_text(@rl_comment_text) - end - end - - send(@rl_redisplay_function) - rl_newline(1, "\n") - 0 - end - - def alloc_history_entry(string, ts) - temp = Struct.new(:line,:data,:timestamp).new - temp.line = string ? string.encode('UTF-8', invalid: :replace, undef: :replace, replace: '').delete(0.chr) : string - temp.data = nil - temp.timestamp = ts - - return temp - end - - def hist_inittime() - t = Time.now.to_i - ts = "X%u" % t - ret = ts.dup - ret[0,1] = @history_comment_char - - ret - end - - # Place STRING at the end of the history list. The data field - # is set to NULL. - def add_history(string) - if (@history_stifled && (@history_length == @history_max_entries)) - # If the history is stifled, and history_length is zero, - # and it equals history_max_entries, we don't save items. - return if (@history_length == 0) - @the_history.shift - else - if @the_history.nil? - @the_history = [] - @history_length = 1 - else - @history_length+=1 - end - end - - temp = alloc_history_entry(string, hist_inittime()) - @the_history[@history_length] = nil - @the_history[@history_length - 1] = temp - end - - def using_history() - @history_offset = @history_length - end - - # Set default values for readline word completion. These are the variables - # that application completion functions can change or inspect. - def set_completion_defaults(what_to_do) - # Only the completion entry function can change these. - @rl_filename_completion_desired = false - @rl_filename_quoting_desired = true - @rl_completion_type = what_to_do - @rl_completion_suppress_append = @rl_completion_suppress_quote = false - - # The completion entry function may optionally change this. - @rl_completion_mark_symlink_dirs = @_rl_complete_mark_symlink_dirs - end - - def _rl_find_completion_word() - _end = @rl_point - found_quote = 0 - delimiter = 0.chr - quote_char = 0.chr - - brkchars = nil - if @rl_completion_word_break_hook - brkchars = send(@rl_completion_word_break_hook) - end - if brkchars.nil? - brkchars = @rl_completer_word_break_characters - end - if (@rl_completer_quote_characters) - # We have a list of characters which can be used in pairs to - # quote substrings for the completer. Try to find the start - # of an unclosed quoted substring. - # FOUND_QUOTE is set so we know what kind of quotes we found. - scan = 0 - pass_next = false - while scan < _end - if !@rl_byte_oriented - scan = _rl_find_next_mbchar(@rl_line_buffer, scan, 1, MB_FIND_ANY) - else - scan += 1 - end - - if (pass_next) - pass_next = false - next - end - - # Shell-like semantics for single quotes -- don't allow backslash - # to quote anything in single quotes, especially not the closing - # quote. If you don't like this, take out the check on the value - # of quote_char. - if (quote_char != "'" && @rl_line_buffer[scan,1] == "\\") - pass_next = true - found_quote |= RL_QF_BACKSLASH - next - end - - if (quote_char != 0.chr) - # Ignore everything until the matching close quote char. - if (@rl_line_buffer[scan,1] == quote_char) - # Found matching close. Abandon this substring. - quote_char = 0.chr - @rl_point = _end - end - - elsif (@rl_completer_quote_characters.include?(@rl_line_buffer[scan,1])) - - # Found start of a quoted substring. - quote_char = @rl_line_buffer[scan,1] - @rl_point = scan + 1 - # Shell-like quoting conventions. - if (quote_char == "'") - found_quote |= RL_QF_SINGLE_QUOTE - elsif (quote_char == '"') - found_quote |= RL_QF_DOUBLE_QUOTE - else - found_quote |= RL_QF_OTHER_QUOTE - end - end - end - end - - if (@rl_point == _end && quote_char == 0.chr) - - # We didn't find an unclosed quoted substring upon which to do - # completion, so use the word break characters to find the - # substring on which to complete. - - - while (@rl_point = !@rl_byte_oriented ? - _rl_find_prev_mbchar(@rl_line_buffer, @rl_point, MB_FIND_ANY):(@rl_point-1))>0 - - scan = @rl_line_buffer[@rl_point,1] - if !brkchars.include?(scan) - next - end - # Call the application-specific function to tell us whether - # this word break character is quoted and should be skipped. - if (@rl_char_is_quoted_p && found_quote!=0 && - send(@rl_char_is_quoted_p,@rl_line_buffer, @rl_point)) - next - end - - # Convoluted code, but it avoids an n^2 algorithm with calls - # to char_is_quoted. - break - end - end - - # If we are at an unquoted word break, then advance past it. - scan = @rl_line_buffer[@rl_point,1] - - # If there is an application-specific function to say whether or not - # a character is quoted and we found a quote character, let that - # function decide whether or not a character is a word break, even - # if it is found in rl_completer_word_break_characters. Don't bother - # if we're at the end of the line, though. - if (scan != 0.chr) - if (@rl_char_is_quoted_p) - isbrk = (found_quote == 0 || - !send(@rl_char_is_quoted_p,@rl_line_buffer, @rl_point)) && - brkchars.include?(scan) - else - isbrk = brkchars.include?(scan) - end - - if (isbrk) - # If the character that caused the word break was a quoting - # character, then remember it as the delimiter. - if (@rl_basic_quote_characters && - @rl_basic_quote_characters.include?(scan) && - (_end - @rl_point) > 1) - delimiter = scan - end - - # If the character isn't needed to determine something special - # about what kind of completion to perform, then advance past it. - if (@rl_special_prefixes.nil? || !@rl_special_prefixes.include?(scan) ) - @rl_point+=1 - end - end - end - - return [quote_char,found_quote!=0,delimiter] - end - - def gen_completion_matches(text, start, _end, our_func, found_quote, quote_char) - @rl_completion_found_quote = found_quote - @rl_completion_quote_character = quote_char - - # If the user wants to TRY to complete, but then wants to give - # up and use the default completion function, they set the - # variable rl_attempted_completion_function. - if (@rl_attempted_completion_function) - matches = Readline.send(@rl_attempted_completion_function,text, start, _end) - if (matches || @rl_attempted_completion_over) - @rl_attempted_completion_over = false - return (matches) - end - end - # XXX -- filename dequoting moved into rl_filename_completion_function - - matches = rl_completion_matches(text, our_func) - matches - end - - # Filter out duplicates in MATCHES. This frees up the strings in - # MATCHES. - def remove_duplicate_matches(matches) - # Sort the items. - # Sort the array without matches[0], since we need it to - # stay in place no matter what. - if matches.length>0 - matches[1..-2] = matches[1..-2].sort.uniq - end - matches - end - - def postprocess_matches(matchesp, matching_filenames) - matches = matchesp - - return 0 if matches.nil? - - # It seems to me that in all the cases we handle we would like - # to ignore duplicate possiblilities. Scan for the text to - # insert being identical to the other completions. - if (@rl_ignore_completion_duplicates) - remove_duplicate_matches(matches) - end - - # If we are matching filenames, then here is our chance to - # do clever processing by re-examining the list. Call the - # ignore function with the array as a parameter. It can - # munge the array, deleting matches as it desires. - if (@rl_ignore_some_completions_function && matching_filenames) - nmatch = matches.length - send(@rl_ignore_some_completions_function,matches) - if (matches.nil? || matches[0].nil?) - matches = nil - return 0 - else - # If we removed some matches, recompute the common prefix. - i = matches.length - if (i > 1 && i < nmatch) - t = matches[0] - compute_lcd_of_matches(matches, i - 1, t) - end - end - end - - matchesp = matches - 1 - end - - def insert_all_matches(matches, point, qc) - rl_begin_undo_group() - # remove any opening quote character; make_quoted_replacement will add - # it back. - if (qc && qc.length>0 && point>0 && @rl_line_buffer[point - 1,1] == qc) - point-=1 - end - rl_delete_text(point, @rl_point) - @rl_point = point - if (matches[1]) - i = 1 - while(matches[i]) - rp = make_quoted_replacement(matches[i], SINGLE_MATCH, qc) - rl_insert_text(rp) - rl_insert_text(" ") - if (rp != matches[i]) - rp = nil - end - i += 1 - end - else - rp = make_quoted_replacement(matches[0], SINGLE_MATCH, qc) - rl_insert_text(rp) - rl_insert_text(" ") - if (rp != matches[0]) - rp = nil - end - end - rl_end_undo_group() - end - - def make_quoted_replacement(match, mtype, qc) - # If we are doing completion on quoted substrings, and any matches - # contain any of the completer_word_break_characters, then auto- - # matically prepend the substring with a quote character (just pick - # the first one from the list of such) if it does not already begin - # with a quote string. FIXME: Need to remove any such automatically - # inserted quote character when it no longer is necessary, such as - # if we change the string we are completing on and the new set of - # matches don't require a quoted substring. - replacement = match - - should_quote = match && @rl_completer_quote_characters && - @rl_filename_completion_desired && - @rl_filename_quoting_desired - - if (should_quote) - should_quote = should_quote && (qc.nil? || qc == 0.chr || - (@rl_completer_quote_characters && - @rl_completer_quote_characters.include?(qc))) - end - - if (should_quote) - - # If there is a single match, see if we need to quote it. - # This also checks whether the common prefix of several - # matches needs to be quoted. - should_quote = @rl_filename_quote_characters ? - !!match[@rl_filename_quote_characters] : - false - - do_replace = should_quote ? mtype : NO_MATCH - # Quote the replacement, since we found an embedded - # word break character in a potential match. - if (do_replace != NO_MATCH && @rl_filename_quoting_function) - replacement = send(@rl_filename_quoting_function,match, do_replace, qc) - end - end - replacement - end - - - def insert_match(match, start, mtype, qc) - oqc = qc - replacement = make_quoted_replacement(match, mtype, qc) - - # Now insert the match. - if (replacement) - # Don't double an opening quote character. - if (qc && qc.length>0 && start!=0 && @rl_line_buffer[start - 1,1] == qc && - replacement[0,1] == qc) - start-=1 - # If make_quoted_replacement changed the quoting character, remove - # the opening quote and insert the (fully-quoted) replacement. - elsif (qc && (qc != oqc) && start!=0 && @rl_line_buffer[start - 1,1] == oqc && - replacement[0,1] != oqc) - start-=1 - end - _rl_replace_text(replacement, start, @rl_point - 1) - if (replacement != match) - replacement = nil - end - end - end - - # Return the portion of PATHNAME that should be output when listing - # possible completions. If we are hacking filename completion, we - # are only interested in the basename, the portion following the - # final slash. Otherwise, we return what we were passed. Since - # printing empty strings is not very informative, if we're doing - # filename completion, and the basename is the empty string, we look - # for the previous slash and return the portion following that. If - # there's no previous slash, we just return what we were passed. - def printable_part(pathname) - if (!@rl_filename_completion_desired) # don't need to do anything - return (pathname) - end - - temp = pathname.rindex('/') - return pathname if temp.nil? - File.basename(pathname) - end - - def fnprint(to_print) - printed_len = 0 - - case @encoding - when 'E' - arr = to_print.scan(/./me) - when 'S' - arr = to_print.scan(/./ms) - when 'U' - arr = to_print.scan(/./mu) - when 'X' - arr = to_print.dup.force_encoding(@encoding_name).chars - else - arr = to_print.scan(/./m) - end - - arr.each do |s| - if(ctrl_char(s)) - @rl_outstream.write('^'+(s[0].ord|0x40).chr.upcase) - printed_len += 2 - elsif s == RUBOUT - @rl_outstream.write('^?') - printed_len += 2 - else - @rl_outstream.write(s) - if @encoding=='U' - printed_len += s.unpack('U').first >= 0x1000 ? 2 : 1 - elsif @encoding=='X' - printed_len += s.ord >= 0x1000 ? 2 : 1 - else - printed_len += s.length - end - end - - end - - printed_len - end - - def _rl_internal_pager(lines) - @rl_outstream.write("--More--") - @rl_outstream.flush - i = get_y_or_n(1) - _rl_erase_entire_line() - if (i == 0) - return -1 - elsif (i == 2) - return (lines - 1) - else - return 0 - end - end - - def path_isdir(filename) - return File.directory?(filename) - end - - # Return the character which best describes FILENAME. - # `@' for symbolic links - # `/' for directories - # `*' for executables - # `=' for sockets - # `|' for FIFOs - # `%' for character special devices - # `#' for block special devices - def stat_char(filename) - return nil if !File.exists?(filename) - - return '/' if File.directory?(filename) - return '%' if File.chardev?(filename) - return '#' if File.blockdev?(filename) - return '@' if File.symlink?(filename) - return '=' if File.socket?(filename) - return '|' if File.pipe?(filename) - return '*' if File.executable?(filename) - nil - end - - - # Output TO_PRINT to rl_outstream. If VISIBLE_STATS is defined and we - # are using it, check for and output a single character for `special' - # filenames. Return the number of characters we output. - def print_filename(to_print, full_pathname) - printed_len = fnprint(to_print) - - if (@rl_filename_completion_desired && (@rl_visible_stats || @_rl_complete_mark_directories)) - - # If to_print != full_pathname, to_print is the basename of the - # path passed. In this case, we try to expand the directory - # name before checking for the stat character. - if (to_print != full_pathname) - - if full_pathname.nil? || full_pathname.length==0 - dn = '/' - else - dn = File.dirname(full_pathname) - end - s = File.expand_path(dn) - if (@rl_directory_completion_hook) - send(@rl_directory_completion_hook,s) - end - - slen = s.length - new_full_pathname = s.dup - if (s[-1,1] == '/' ) - slen-=1 - else - new_full_pathname[slen,1] = '/' - end - new_full_pathname[slen .. -1] = '/' + to_print - - if (@rl_visible_stats) - extension_char = stat_char(new_full_pathname) - else - if (path_isdir(new_full_pathname)) - extension_char = '/' - end - end - - new_full_pathname = nil - - else - - s = File.expand_path(full_pathname) - if (@rl_visible_stats) - extension_char = stat_char(s) - else - if (path_isdir(s)) - extension_char = '/' - end - end - end - s = nil - if (extension_char) - @rl_outstream.write(extension_char) - printed_len+=1 - end - end - - printed_len - end - - # The user must press "y" or "n". Non-zero return means "y" pressed. - def get_y_or_n(for_pager) - while(true) - - rl_setstate(RL_STATE_MOREINPUT) - c = rl_read_key() - rl_unsetstate(RL_STATE_MOREINPUT) - - if (c == 'y' || c == 'Y' || c == ' ') - return (1) - end - if (c == 'n' || c == 'N' || c == RUBOUT) - return (0) - end - if (c == ABORT_CHAR || (c.is_a?(Integer) && c < 0)) - _rl_abort_internal() - end - if (for_pager && (c == NEWLINE || c == RETURN)) - return (2) - end - if (for_pager && (c == 'q' || c == 'Q')) - return (0) - end - rl_ding() - end - end - - # Compute width of STRING when displayed on screen by print_filename - def fnwidth(string) - left = string.length + 1 - width = pos = 0 - while (string[pos] && string[pos,1] != 0.chr) - if (ctrl_char(string[0,1]) || string[0,1] == RUBOUT) - width += 2 - pos+=1 - else - case @encoding - when 'E' - wc = string[pos,left-pos].scan(/./me)[0] - bytes = wc.length - tempwidth = wc.length - when 'S' - wc = string[pos,left-pos].scan(/./ms)[0] - bytes = wc.length - tempwidth = wc.length - when 'U' - wc = string[pos,left-pos].scan(/./mu)[0] - bytes = wc.length - tempwidth = wc.unpack('U').first >= 0x1000 ? 2 : 1 - when 'X' - wc = string[pos,left-pos].force_encoding(@encoding_name)[0] - bytes = wc.bytesize - tempwidth = wc.ord >= 0x1000 ? 2 : 1 - else - wc = string[pos,left-pos].scan(/./m)[0] - bytes = wc.length - tempwidth = wc.length - end - clen = bytes - pos += clen - w = tempwidth - width += (w >= 0) ? w : 1 - end - end - width - end - - # Display MATCHES, a list of matching filenames in argv format. This - # handles the simple case -- a single match -- first. If there is more - # than one match, we compute the number of strings in the list and the - # length of the longest string, which will be needed by the display - # function. If the application wants to handle displaying the list of - # matches itself, it sets RL_COMPLETION_DISPLAY_MATCHES_HOOK to the - # address of a function, and we just call it. If we're handling the - # display ourselves, we just call rl_display_match_list. We also check - # that the list of matches doesn't exceed the user-settable threshold, - # and ask the user if he wants to see the list if there are more matches - # than RL_COMPLETION_QUERY_ITEMS. - def display_matches(matches) - # Move to the last visible line of a possibly-multiple-line command. - _rl_move_vert(@_rl_vis_botlin) - - # Handle simple case first. What if there is only one answer? - if matches[1].nil? - temp = printable_part(matches[0]) - rl_crlf() - print_filename(temp, matches[0]) - rl_crlf() - rl_forced_update_display() - @rl_display_fixed = true - return - end - - # There is more than one answer. Find out how many there are, - # and find the maximum printed length of a single entry. - max = 0 - i = 1 - while(matches[i]) - temp = printable_part(matches[i]) - len = fnwidth(temp) - - if (len > max) - max = len - end - i += 1 - end - len = i - 1 - - # If the caller has defined a display hook, then call that now. - if (@rl_completion_display_matches_hook) - send(@rl_completion_display_matches_hook,matches, len, max) - return - end - - # If there are many items, then ask the user if she really wants to - # see them all. - if (@rl_completion_query_items > 0 && len >= @rl_completion_query_items) - - rl_crlf() - @rl_outstream.write("Display all #{len} possibilities? (y or n)") - @rl_outstream.flush - if (get_y_or_n(false)==0) - rl_crlf() - - rl_forced_update_display() - @rl_display_fixed = true - - return - end - end - - rl_display_match_list(matches, len, max) - - rl_forced_update_display() - @rl_display_fixed = true - end - - # Complete the word at or before point. - # WHAT_TO_DO says what to do with the completion. - # `?' means list the possible completions. - # TAB means do standard completion. - # `*' means insert all of the possible completions. - # `!' means to do standard completion, and list all possible completions if - # there is more than one. - # `@' means to do standard completion, and list all possible completions if - # there is more than one and partial completion is not possible. - def rl_complete_internal(what_to_do) - rl_setstate(RL_STATE_COMPLETING) - set_completion_defaults(what_to_do) - - saved_line_buffer = @rl_line_buffer ? @rl_line_buffer.delete(0.chr) : nil - our_func = @rl_completion_entry_function ? - @rl_completion_entry_function : :rl_filename_completion_function - # We now look backwards for the start of a filename/variable word. - _end = @rl_point - found_quote = false - delimiter = 0.chr - quote_char = 0.chr - - if (@rl_point!=0) - # This (possibly) changes rl_point. If it returns a non-zero char, - # we know we have an open quote. - quote_char,found_quote,delimiter = _rl_find_completion_word() - end - - start = @rl_point - @rl_point = _end - - text = rl_copy_text(start, _end) - matches = gen_completion_matches(text, start, _end, our_func, found_quote, quote_char) - # nontrivial_lcd is set if the common prefix adds something to the word - # being completed. - nontrivial_lcd = !!(matches && text != matches[0]) - text = nil - if matches.nil? - rl_ding() - saved_line_buffer = nil - @completion_changed_buffer = false - rl_unsetstate(RL_STATE_COMPLETING) - return 0 - end - - # If we are matching filenames, the attempted completion function will - # have set rl_filename_completion_desired to a non-zero value. The basic - # rl_filename_completion_function does this. - i = @rl_filename_completion_desired - if (postprocess_matches(matches, i) == 0) - rl_ding() - saved_line_buffer = nil - @completion_changed_buffer = false - rl_unsetstate(RL_STATE_COMPLETING) - return 0 - end - - case (what_to_do) - - when TAB,'!','@' - # Insert the first match with proper quoting. - if (matches[0]) - insert_match(matches[0], start, matches[1] ? MULT_MATCH : SINGLE_MATCH, quote_char) - end - # If there are more matches, ring the bell to indicate. - # If we are in vi mode, Posix.2 says to not ring the bell. - # If the `show-all-if-ambiguous' variable is set, display - # all the matches immediately. Otherwise, if this was the - # only match, and we are hacking files, check the file to - # see if it was a directory. If so, and the `mark-directories' - # variable is set, add a '/' to the name. If not, and we - # are at the end of the line, then add a space. - if (matches[1]) - if (what_to_do == '!') - display_matches(matches) - elsif (what_to_do == '@') - if (!nontrivial_lcd) - display_matches(matches) - end - elsif (@rl_editing_mode != @vi_mode) - rl_ding() # There are other matches remaining. - end - else - append_to_match(matches[0], delimiter, quote_char, nontrivial_lcd) - end - when '*' - insert_all_matches(matches, start, quote_char) - when '?' - display_matches(matches) - else - $stderr.write("\r\nreadline: bad value #{what_to_do} for what_to_do in rl_complete\n") - rl_ding() - saved_line_buffer = nil - rl_unsetstate(RL_STATE_COMPLETING) - return 1 - end - - matches = nil - - # Check to see if the line has changed through all of this manipulation. - if (saved_line_buffer) - @completion_changed_buffer = @rl_line_buffer.delete(0.chr) != saved_line_buffer - saved_line_buffer = nil - end - - rl_unsetstate(RL_STATE_COMPLETING) - 0 - end - - # Complete the word at or before point. You have supplied the function - # that does the initial simple matching selection algorithm (see - # rl_completion_matches ()). The default is to do filename completion. - def rl_complete(ignore, invoking_key) - if (@rl_inhibit_completion) - return (_rl_insert_char(ignore, invoking_key)) - elsif (@rl_last_func == :rl_complete && !@completion_changed_buffer) - return (rl_complete_internal('?')) - elsif (@_rl_complete_show_all) - return (rl_complete_internal('!')) - elsif (@_rl_complete_show_unmodified) - return (rl_complete_internal('@')) - else - return (rl_complete_internal(TAB)) - end - end - - # Return the history entry which is logically at OFFSET in the history array. - # OFFSET is relative to history_base. - def history_get(offset) - local_index = offset - @history_base - return (local_index >= @history_length || local_index < 0 || @the_history.nil?) ? - nil : @the_history[local_index] - end - - def rl_replace_from_history(entry, flags) - # Can't call with `1' because rl_undo_list might point to an undo list - # from a history entry, just like we're setting up here. - rl_replace_line(entry.line, false) - @rl_undo_list = entry.data - @rl_point = @rl_end - @rl_mark = 0 - - if (@rl_editing_mode == @vi_mode) - @rl_point = 0 - @rl_mark = @rl_end - end - end - - # Remove history element WHICH from the history. The removed - # element is returned to you so you can free the line, data, - # and containing structure. - def remove_history(which) - if (which < 0 || which >= @history_length || @history_length == 0 || @the_history.nil?) - return nil - end - return_value = @the_history[which] - @the_history.delete_at(which) - @history_length-=1 - return_value - end - - def block_sigint() - return if @sigint_blocked - @sigint_proc = Signal.trap("INT", "IGNORE") - @sigint_blocked = true - end - - def release_sigint() - return if !@sigint_blocked - Signal.trap("INT", @sigint_proc) - @sigint_blocked = false - end - - def retry_if_interrupted(&block) - tries = 0 - begin - yield block - rescue Errno::EINTR - tries += 1 - retry if tries <= 10 - end - end - - def save_tty_chars() - @_rl_last_tty_chars = @_rl_tty_chars - h = {} - retry_if_interrupted do - h = Hash[*`stty -a`.scan(/(\w+) = ([^;]+);/).flatten] - end - h.each {|k,v| v.gsub!(/\^(.)/){($1[0].ord ^ ((?a..?z).include?($1[0]) ? 0x60 : 0x40)).chr}} - @_rl_tty_chars.t_erase = h['erase'] - @_rl_tty_chars.t_kill = h['kill'] - @_rl_tty_chars.t_intr = h['intr'] - @_rl_tty_chars.t_quit = h['quit'] - @_rl_tty_chars.t_start = h['start'] - @_rl_tty_chars.t_stop = h['stop'] - @_rl_tty_chars.t_eof = h['eof'] - @_rl_tty_chars.t_eol = "\n" - @_rl_tty_chars.t_eol2 = h['eol2'] - @_rl_tty_chars.t_susp = h['susp'] - @_rl_tty_chars.t_dsusp = h['dsusp'] - @_rl_tty_chars.t_reprint = h['rprnt'] - @_rl_tty_chars.t_flush = h['flush'] - @_rl_tty_chars.t_werase = h['werase'] - @_rl_tty_chars.t_lnext = h['lnext'] - @_rl_tty_chars.t_status = -1 - retry_if_interrupted do - @otio = `stty -g` - end - end - - def _rl_bind_tty_special_chars(kmap) - kmap[@_rl_tty_chars.t_erase] = :rl_rubout - kmap[@_rl_tty_chars.t_kill] = :rl_unix_line_discard - kmap[@_rl_tty_chars.t_werase] = :rl_unix_word_rubout - kmap[@_rl_tty_chars.t_lnext] = :rl_quoted_insert - end - - def prepare_terminal_settings(meta_flag) - retry_if_interrupted do - @readline_echoing_p = (`stty -a`.scan(/-*echo\b/).first == 'echo') - end - - # First, the basic settings to put us into character-at-a-time, no-echo - # input mode. - setting = " -echo -icrnl cbreak" - - # If this terminal doesn't care how the 8th bit is used, then we can - # use it for the meta-key. If only one of even or odd parity is - # specified, then the terminal is using parity, and we cannot. - retry_if_interrupted do - if (`stty -a`.scan(/-parenb\b/).first == '-parenb') - setting << " pass8" - end - end - - setting << " -ixoff" - - rl_bind_key(@_rl_tty_chars.t_start, :rl_restart_output) unless @_rl_tty_chars.t_start.nil? - @_rl_eof_char = @_rl_tty_chars.t_eof - - #setting << " -isig" - - retry_if_interrupted do - `stty #{setting}` - end - end - - def _rl_control_keypad(on) - if on && @_rl_term_ks - @_rl_out_stream.write(@_rl_term_ks) - elsif !on && @_rl_term_ke - @_rl_out_stream.write(@_rl_term_ke) - end - end - - # Rebind all of the tty special chars that readline worries about back - # to self-insert. Call this before saving the current terminal special - # chars with save_tty_chars(). This only works on POSIX termios or termio - # systems. - def rl_tty_unset_default_bindings(kmap) - # Don't bother before we've saved the tty special chars at least once. - return if (!rl_isstate(RL_STATE_TTYCSAVED)) - - kmap[@_rl_tty_chars.t_erase] = :rl_insert - kmap[@_rl_tty_chars.t_kill] = :rl_insert - kmap[@_rl_tty_chars.t_lnext] = :rl_insert - kmap[@_rl_tty_chars.t_werase] = :rl_insert - end - - def rl_prep_terminal(meta_flag) - if no_terminal? - @readline_echoing_p = true - return - end - - return if (@terminal_prepped) - - # Try to keep this function from being INTerrupted. - block_sigint() - - if (@_rl_bind_stty_chars) - # If editing in vi mode, make sure we restore the bindings in the - # insertion keymap no matter what keymap we ended up in. - if (@rl_editing_mode == @vi_mode) - rl_tty_unset_default_bindings(@vi_insertion_keymap) - else - rl_tty_unset_default_bindings(@_rl_keymap) - end - end - - save_tty_chars() - - rl_setstate(RL_STATE_TTYCSAVED) - if (@_rl_bind_stty_chars) - - # If editing in vi mode, make sure we set the bindings in the - # insertion keymap no matter what keymap we ended up in. - if (@rl_editing_mode == @vi_mode) - _rl_bind_tty_special_chars(@vi_insertion_keymap) - else - _rl_bind_tty_special_chars(@_rl_keymap) - end - end - - prepare_terminal_settings(meta_flag) - - if (@_rl_enable_keypad) - _rl_control_keypad(true) - end - @rl_outstream.flush - @terminal_prepped = true - rl_setstate(RL_STATE_TERMPREPPED) - - release_sigint() - end - - # Restore the terminal's normal settings and modes. - def rl_deprep_terminal() - return if ENV["TERM"].nil? - return if (!@terminal_prepped) - - # Try to keep this function from being interrupted. - block_sigint() - - if (@_rl_enable_keypad) - _rl_control_keypad(false) - end - - @rl_outstream.flush - - # restore terminal setting - retry_if_interrupted do - `stty #{@otio}` - end - - @terminal_prepped = false - rl_unsetstate(RL_STATE_TERMPREPPED) - - release_sigint() - end - - # Set the mark at POSITION. - def _rl_set_mark_at_pos(position) - return -1 if (position > @rl_end) - @rl_mark = position - 0 - end - - # A bindable command to set the mark. - def rl_set_mark(count, key) - _rl_set_mark_at_pos(@rl_explicit_arg ? count : @rl_point) - end - - # Kill from here to the end of the line. If DIRECTION is negative, kill - # back to the line start instead. - def rl_kill_line (direction, ignore) - if (direction < 0) - return (rl_backward_kill_line(1, ignore)) - else - orig_point = @rl_point - rl_end_of_line(1, ignore) - if (orig_point != @rl_point) - rl_kill_text(orig_point, @rl_point) - end - @rl_point = orig_point - if (@rl_editing_mode == @emacs_mode) - @rl_mark = @rl_point - end - end - 0 - end - - # Kill backwards to the start of the line. If DIRECTION is negative, kill - # forwards to the line end instead. - def rl_backward_kill_line(direction, ignore) - if (direction < 0) - return (rl_kill_line(1, ignore)) - else - if (@rl_point==0) - rl_ding() - else - orig_point = @rl_point - rl_beg_of_line(1, ignore) - if (@rl_point != orig_point) - rl_kill_text(orig_point, @rl_point) - end - if (@rl_editing_mode == @emacs_mode) - @rl_mark = @rl_point - end - end - end - 0 - end - - # Kill the whole line, no matter where point is. - def rl_kill_full_line(count, ignore) - rl_begin_undo_group() - @rl_point = 0 - rl_kill_text(@rl_point, @rl_end) - @rl_mark = 0 - rl_end_undo_group() - 0 - end - - # Search backwards through the history looking for a string which is typed - # interactively. Start with the current line. - def rl_reverse_search_history(sign, key) - rl_search_history(-sign, key) - end - - # Search forwards through the history looking for a string which is typed - # interactively. Start with the current line. - def rl_forward_search_history(sign, key) - rl_search_history(sign, key) - end - - # Search through the history looking for an interactively typed string. - # This is analogous to i-search. We start the search in the current line. - # DIRECTION is which direction to search; >= 0 means forward, < 0 means - # backwards. - def rl_search_history(direction, invoking_key) - rl_setstate(RL_STATE_ISEARCH) - cxt = _rl_isearch_init(direction) - - rl_display_search(cxt.search_string, (cxt.sflags & SF_REVERSE)!=0, -1) - - # If we are using the callback interface, all we do is set up here and - # return. The key is that we leave RL_STATE_ISEARCH set. - if (rl_isstate(RL_STATE_CALLBACK)) - return (0) - end - - r = -1 - while(true) - _rl_search_getchar(cxt) - # We might want to handle EOF here (c == 0) - r = _rl_isearch_dispatch(cxt, cxt.lastc) - break if (r <= 0) - end - - # The searching is over. The user may have found the string that she - # was looking for, or else she may have exited a failing search. If - # LINE_INDEX is -1, then that shows that the string searched for was - # not found. We use this to determine where to place rl_point. - _rl_isearch_cleanup(cxt, r) - end - - def _rl_scxt_alloc(type, flags) - cxt = Struct.new(:type,:sflags,:search_string,:search_string_index,:search_string_size,:lines,:allocated_line, - :hlen,:hindex,:save_point,:save_mark,:save_line,:last_found_line,:prev_line_found,:save_undo_list,:history_pos, - :direction,:lastc,:sline,:sline_len,:sline_index,:search_terminators,:mb).new - - cxt.type = type - cxt.sflags = flags - - cxt.search_string = nil - cxt.search_string_size = cxt.search_string_index = 0 - - cxt.lines = nil - cxt.allocated_line = nil - cxt.hlen = cxt.hindex = 0 - - cxt.save_point = @rl_point - cxt.save_mark = @rl_mark - cxt.save_line = where_history() - cxt.last_found_line = cxt.save_line - cxt.prev_line_found = nil - - cxt.save_undo_list = nil - - cxt.history_pos = 0 - cxt.direction = 0 - - cxt.lastc = 0 - - cxt.sline = nil - cxt.sline_len = cxt.sline_index = 0 - - cxt.search_terminators = nil - - cxt - end - - def history_list() - @the_history - end - - def _rl_isearch_init(direction) - cxt = _rl_scxt_alloc(RL_SEARCH_ISEARCH, 0) - if (direction < 0) - cxt.sflags |= SF_REVERSE - end - - cxt.search_terminators = @_rl_isearch_terminators ? @_rl_isearch_terminators : - @default_isearch_terminators - - # Create an arrary of pointers to the lines that we want to search. - hlist = history_list() - rl_maybe_replace_line() - i = 0 - if (hlist) - i += 1 while(hlist[i]) - end - - # Allocate space for this many lines, +1 for the current input line, - # and remember those lines. - cxt.hlen = i - cxt.lines = [] - for i in 0 ... cxt.hlen - cxt.lines[i] = hlist[i].line - end - - if (@_rl_saved_line_for_history) - cxt.lines[i] = @_rl_saved_line_for_history.line.dup - else - # Keep track of this so we can free it. - cxt.allocated_line = @rl_line_buffer.dup - cxt.lines << cxt.allocated_line - end - - cxt.hlen+=1 - - # The line where we start the search. - cxt.history_pos = cxt.save_line - - rl_save_prompt() - - # Initialize search parameters. - cxt.search_string_size = 128 - cxt.search_string_index = 0 - cxt.search_string = "" - - # Normalize DIRECTION into 1 or -1. - cxt.direction = (direction >= 0) ? 1 : -1 - - cxt.sline = @rl_line_buffer - cxt.sline_len = cxt.sline.delete(0.chr).length - cxt.sline_index = @rl_point - - @_rl_iscxt = cxt # save globally - cxt - end - - def rl_save_prompt() - @saved_local_prompt = @local_prompt - @saved_local_prefix = @local_prompt_prefix - @saved_prefix_length = @prompt_prefix_length - @saved_local_length = @local_prompt_len - @saved_last_invisible = @prompt_last_invisible - @saved_visible_length = @prompt_visible_length - @saved_invis_chars_first_line = @prompt_invis_chars_first_line - @saved_physical_chars = @prompt_physical_chars - - @local_prompt = @local_prompt_prefix = nil - @local_prompt_len = 0 - @prompt_last_invisible = @prompt_visible_length = @prompt_prefix_length = 0 - @prompt_invis_chars_first_line = @prompt_physical_chars = 0 - end - - def rl_restore_prompt() - @local_prompt = nil - @local_prompt_prefix = nil - - @local_prompt = @saved_local_prompt - @local_prompt_prefix = @saved_local_prefix - @local_prompt_len = @saved_local_length - @prompt_prefix_length = @saved_prefix_length - @prompt_last_invisible = @saved_last_invisible - @prompt_visible_length = @saved_visible_length - @prompt_invis_chars_first_line = @saved_invis_chars_first_line - @prompt_physical_chars = @saved_physical_chars - - # can test saved_local_prompt to see if prompt info has been saved. - @saved_local_prompt = @saved_local_prefix = nil - @saved_local_length = 0 - @saved_last_invisible = @saved_visible_length = @saved_prefix_length = 0 - @saved_invis_chars_first_line = @saved_physical_chars = 0 - end - - def rl_message(msg_buf) - @rl_display_prompt = msg_buf - if @saved_local_prompt.nil? - rl_save_prompt() - @msg_saved_prompt = true - end - @local_prompt,@prompt_visible_length,@prompt_last_invisible,@prompt_invis_chars_first_line,@prompt_physical_chars = - expand_prompt(msg_buf) - @local_prompt_prefix = nil - @local_prompt_len = @local_prompt ? @local_prompt.length : 0 - send(@rl_redisplay_function) - 0 - end - - # Display the current state of the search in the echo-area. - # SEARCH_STRING contains the string that is being searched for, - # DIRECTION is zero for forward, or non-zero for reverse, - # WHERE is the history list number of the current line. If it is - # -1, then this line is the starting one. - def rl_display_search(search_string, reverse_p, where) - message = '(' - if (reverse_p) - message << "reverse-" - end - message << "i-search)`" - - if (search_string) - message << search_string - end - message << "': " - - rl_message(message) - message = nil - send(@rl_redisplay_function) - end - - # Transpose the characters at point. If point is at the end of the line, - # then transpose the characters before point. - def rl_transpose_chars(count, key) - return 0 if (count == 0) - - if (@rl_point==0 || @rl_end < 2) - rl_ding() - return -1 - end - - rl_begin_undo_group() - - if (@rl_point == @rl_end) - if !@rl_byte_oriented - @rl_point = _rl_find_prev_mbchar(@rl_line_buffer, @rl_point, MB_FIND_NONZERO) - else - @rl_point -= 1 - end - count = 1 - end - - prev_point = @rl_point - if !@rl_byte_oriented - @rl_point = _rl_find_prev_mbchar(@rl_line_buffer, @rl_point, MB_FIND_NONZERO) - else - @rl_point -= 1 - end - - char_length = prev_point - @rl_point - dummy = @rl_line_buffer[@rl_point,char_length] - - rl_delete_text(@rl_point, @rl_point + char_length) - - @rl_point += count - _rl_fix_point(0) - rl_insert_text(dummy) - rl_end_undo_group() - dummy = nil - 0 - end - - # Here is C-u doing what Unix does. You don't *have* to use these - # key-bindings. We have a choice of killing the entire line, or - # killing from where we are to the start of the line. We choose the - # latter, because if you are a Unix weenie, then you haven't backspaced - # into the line at all, and if you aren't, then you know what you are - # doing. - def rl_unix_line_discard(count, key) - if (@rl_point == 0) - rl_ding() - else - rl_kill_text(@rl_point, 0) - @rl_point = 0 - if (@rl_editing_mode == @emacs_mode) - @rl_mark = @rl_point - end - end - 0 - end - - # Yank back the last killed text. This ignores arguments. - def rl_yank(count, ignore) - if @rl_kill_ring.nil? - _rl_abort_internal() - return -1 - end - _rl_set_mark_at_pos(@rl_point) - rl_insert_text(@rl_kill_ring[@rl_kill_index]) - 0 - end - - # If the last command was yank, or yank_pop, and the text just - # before point is identical to the current kill item, then - # delete that text from the line, rotate the index down, and - # yank back some other text. - def rl_yank_pop(count, key) - if (((@rl_last_func != :rl_yank_pop) && (@rl_last_func != :rl_yank)) || - @rl_kill_ring.nil?) - _rl_abort_internal() - return -1 - end - - l = @rl_kill_ring[@rl_kill_index].length - n = @rl_point - l - if (n >= 0 && @rl_line_buffer[n,l] == @rl_kill_ring[@rl_kill_index][0,l]) - rl_delete_text(n, @rl_point) - @rl_point = n - @rl_kill_index-=1 - if (@rl_kill_index < 0) - @rl_kill_index = @rl_kill_ring_length - 1 - end - rl_yank(1, 0) - return 0 - else - _rl_abort_internal() - return -1 - end - end - - # Yank the COUNTh argument from the previous history line, skipping - # HISTORY_SKIP lines before looking for the `previous line'. - def rl_yank_nth_arg_internal(count, ignore, history_skip) - pos = where_history() - if (history_skip>0) - history_skip.times { previous_history() } - end - entry = previous_history() - history_set_pos(pos) - if entry.nil? - rl_ding() - return -1 - end - - arg = history_arg_extract(count, count, entry.line) - if (arg.nil? || arg=='') - rl_ding() - arg = nil - return -1 - end - - rl_begin_undo_group() - - _rl_set_mark_at_pos(@rl_point) - - # Vi mode always inserts a space before yanking the argument, and it - # inserts it right *after* rl_point. - if (@rl_editing_mode == @vi_mode) - rl_vi_append_mode(1, ignore) - rl_insert_text(" ") - end - - rl_insert_text(arg) - arg = nil - rl_end_undo_group() - return 0 - end - - # Yank the COUNTth argument from the previous history line. - def rl_yank_nth_arg(count, ignore) - rl_yank_nth_arg_internal(count, ignore, 0) - end - - # Yank the last argument from the previous history line. This `knows' - # how rl_yank_nth_arg treats a count of `$'. With an argument, this - # behaves the same as rl_yank_nth_arg. - @history_skip = 0 - @explicit_arg_p = false - @count_passed = 1 - @direction = 1 - @undo_needed = false - - def rl_yank_last_arg(count, key) - if (@rl_last_func != :rl_yank_last_arg) - @history_skip = 0 - @explicit_arg_p = @rl_explicit_arg - @count_passed = count - @direction = 1 - else - if (@undo_needed) - rl_do_undo() - end - if (count < 1) - @direction = -@direction - end - @history_skip += @direction - if (@history_skip < 0) - @history_skip = 0 - end - end - - if (@explicit_arg_p) - retval = rl_yank_nth_arg_internal(@count_passed, key, @history_skip) - else - retval = rl_yank_nth_arg_internal('$', key, @history_skip) - end - @undo_needed = retval == 0 - retval - end - - def history_arg_extract(first, last, string) - if first != "$" || last != "$" - fail "RbReadline.history_arg_extract called with currently unsupported args." - end - - # Find the last index of an unescaped quote character. - last_unescaped_quote_char = -1 - RbReadline::HISTORY_QUOTE_CHARACTERS.each_char do |quote_char| - quote_char = Regexp.escape(quote_char) - if index = string =~ /(?:\\.|[^#{quote_char}\\])#{quote_char} *$/ - last_unescaped_quote_char = index if index > last_unescaped_quote_char - end - end - last_unescaped_quote_char += 1 # Because of the regex used above. - - # Find the last index of an unescaped word delimiter. - delimiters = RbReadline::HISTORY_WORD_DELIMITERS.chars.to_a.map { |d| Regexp.escape(d) } - unless last_unescaped_delimiter = string =~ /(?:\\.|[^#{delimiters.join}])+? *$/ - last_unescaped_delimiter = 0 - end - - if last_unescaped_quote_char >= last_unescaped_delimiter - quoted_arg = _extract_last_quote(string, string[last_unescaped_quote_char,1]) - end - quoted_arg or string[last_unescaped_delimiter...string.length] - end - - def _extract_last_quote(string, quote_char) - quote_char = Regexp.escape(quote_char) - string =~ /(#{quote_char}(?:\\.|[^#{quote_char}])+?#{quote_char}) *$/ - $1 - end - - def _rl_char_search_internal(count, dir, smbchar, len) - pos = @rl_point - inc = (dir < 0) ? -1 : 1 - while (count!=0) - if ((dir < 0 && pos <= 0) || (dir > 0 && pos >= @rl_end)) - rl_ding() - return -1 - end - pos = (inc > 0) ? _rl_find_next_mbchar(@rl_line_buffer, pos, 1, MB_FIND_ANY) : - _rl_find_prev_mbchar(@rl_line_buffer, pos, MB_FIND_ANY) - begin - if (_rl_is_mbchar_matched(@rl_line_buffer, pos, @rl_end, smbchar, len)!=0) - count-=1 - if (dir < 0) - @rl_point = (dir == BTO) ? pos+1 : pos - else - @rl_point = (dir == FTO) ? pos-1 : pos - end - break - end - prepos = pos - end while ((dir < 0) ? (pos = _rl_find_prev_mbchar(@rl_line_buffer, pos, MB_FIND_ANY)) != prepos : - (pos = _rl_find_next_mbchar(@rl_line_buffer, pos, 1, MB_FIND_ANY)) != prepos) - end - 0 - end - - def _rl_char_search(count, fdir, bdir) - mbchar = '' - mb_len = _rl_read_mbchar(mbchar, MB_LEN_MAX) - - if (mbchar.is_a?(Integer) && c < 0) || mbchar == 0.chr - return -1 - end - - if (count < 0) - return (_rl_char_search_internal(-count, bdir, mbchar, mb_len)) - else - return (_rl_char_search_internal(count, fdir, mbchar, mb_len)) - end - end - - def rl_char_search(count, key) - _rl_char_search(count, FFIND, BFIND) - end - - # Undo the next thing in the list. Return 0 if there - # is nothing to undo, or non-zero if there was. - def trans(i) - ((i) == -1 ? @rl_point : ((i) == -2 ? @rl_end : (i))) - end - - def rl_do_undo() - start = _end = waiting_for_begin = 0 - begin - return 0 if @rl_undo_list.nil? - - @_rl_doing_an_undo = true - rl_setstate(RL_STATE_UNDOING) - - # To better support vi-mode, a start or end value of -1 means - # rl_point, and a value of -2 means rl_end. - if (@rl_undo_list.what == UNDO_DELETE || @rl_undo_list.what == UNDO_INSERT) - start = trans(@rl_undo_list.start) - _end = trans(@rl_undo_list.end) - end - - case (@rl_undo_list.what) - # Undoing deletes means inserting some text. - when UNDO_DELETE - @rl_point = start - rl_insert_text(@rl_undo_list.text) - @rl_undo_list.text = nil - - # Undoing inserts means deleting some text. - when UNDO_INSERT - rl_delete_text(start, _end) - @rl_point = start - # Undoing an END means undoing everything 'til we get to a BEGIN. - when UNDO_END - waiting_for_begin+=1 - # Undoing a BEGIN means that we are done with this group. - when UNDO_BEGIN - if (waiting_for_begin!=0) - waiting_for_begin-=1 - else - rl_ding() - end - end - - @_rl_doing_an_undo = false - rl_unsetstate(RL_STATE_UNDOING) - - release = @rl_undo_list - @rl_undo_list = @rl_undo_list.next - replace_history_data(-1, release, @rl_undo_list) - release = nil - end while (waiting_for_begin!=0) - - 1 - end - - - - # Do some undoing of things that were done. - def rl_undo_command(count, key) - if (count < 0) - return 0 # Nothing to do. - end - while (count>0) - if (rl_do_undo()) - count-=1 - else - rl_ding() - break - end - end - 0 - end - - # Delete the word at point, saving the text in the kill ring. - def rl_kill_word(count, key) - if (count < 0) - return (rl_backward_kill_word(-count, key)) - else - orig_point = @rl_point - rl_forward_word(count, key) - - if (@rl_point != orig_point) - rl_kill_text(orig_point, @rl_point) - end - - @rl_point = orig_point - if (@rl_editing_mode == @emacs_mode) - @rl_mark = @rl_point - end - end - 0 - end - - # Rubout the word before point, placing it on the kill ring. - def rl_backward_kill_word(count, ignore) - if (count < 0) - return (rl_kill_word(-count, ignore)) - else - orig_point = @rl_point - rl_backward_word(count, ignore) - if (@rl_point != orig_point) - rl_kill_text(orig_point, @rl_point) - end - if (@rl_editing_mode == @emacs_mode) - @rl_mark = @rl_point - end - end - 0 - end - - # Revert the current line to its previous state. - def rl_revert_line(count, key) - if @rl_undo_list.nil? - rl_ding() - else - while (@rl_undo_list) - rl_do_undo() - end - if (@rl_editing_mode == @vi_mode) - @rl_point = @rl_mark = 0 # rl_end should be set correctly - end - end - 0 - end - - def rl_backward_char_search (count, key) - _rl_char_search(count, BFIND, FFIND) - end - - def rl_insert_completions(ignore, invoking_key) - rl_complete_internal('*') - end - - def _rl_arg_init() - rl_save_prompt() - @_rl_argcxt = 0 - rl_setstate(RL_STATE_NUMERICARG) - end - - def _rl_arg_getchar() - rl_message("(arg: #{@rl_arg_sign * @rl_numeric_arg}) ") - rl_setstate(RL_STATE_MOREINPUT) - c = rl_read_key() - rl_unsetstate(RL_STATE_MOREINPUT) - c - end - - # Process C as part of the current numeric argument. Return -1 if the - # argument should be aborted, 0 if we should not read any more chars, and - # 1 if we should continue to read chars. - def _rl_arg_dispatch(cxt, c) - key = c - - # If we see a key bound to `universal-argument' after seeing digits, - # it ends the argument but is otherwise ignored. - if (@_rl_keymap[c] == :rl_universal_argument) - if ((cxt & NUM_SAWDIGITS) == 0) - @rl_numeric_arg *= 4 - return 1 - elsif (rl_isstate(RL_STATE_CALLBACK)) - @_rl_argcxt |= NUM_READONE - return 0 # XXX - else - rl_setstate(RL_STATE_MOREINPUT) - key = rl_read_key() - rl_unsetstate(RL_STATE_MOREINPUT) - rl_restore_prompt() - rl_clear_message() - rl_unsetstate(RL_STATE_NUMERICARG) - if key.is_a?(Integer) && key < 0 - return -1 - end - return (_rl_dispatch(key, @_rl_keymap)) - end - end - - #c = (c[0].ord & ~0x80).chr - r = c[1,1] - if (r>='0' && r<='9') - r = r.to_i - @rl_numeric_arg = @rl_explicit_arg ? (@rl_numeric_arg * 10) + r : r - @rl_explicit_arg = 1 - @_rl_argcxt |= NUM_SAWDIGITS - elsif (c == '-' && !@rl_explicit_arg) - @rl_numeric_arg = 1 - @_rl_argcxt |= NUM_SAWMINUS - @rl_arg_sign = -1 - else - # Make M-- command equivalent to M--1 command. - if ((@_rl_argcxt & NUM_SAWMINUS)!=0 && @rl_numeric_arg == 1 && !@rl_explicit_arg) - @rl_explicit_arg = 1 - end - rl_restore_prompt() - rl_clear_message() - rl_unsetstate(RL_STATE_NUMERICARG) - - r = _rl_dispatch(key, @_rl_keymap) - if (rl_isstate(RL_STATE_CALLBACK)) - # At worst, this will cause an extra redisplay. Otherwise, - # we have to wait until the next character comes in. - if (!@rl_done) - send(@rl_redisplay_function) - end - r = 0 - end - return r - end - 1 - end - - def _rl_arg_overflow() - if (@rl_numeric_arg > 1000000) - @_rl_argcxt = 0 - @rl_explicit_arg = @rl_numeric_arg = 0 - rl_ding() - rl_restore_prompt() - rl_clear_message() - rl_unsetstate(RL_STATE_NUMERICARG) - return 1 - end - 0 - end - - # Handle C-u style numeric args, as well as M--, and M-digits. - def rl_digit_loop() - while (true) - return 1 if _rl_arg_overflow()!=0 - c = _rl_arg_getchar() - if (c >= "\xFE") - _rl_abort_internal() - return -1 - end - r = _rl_arg_dispatch(@_rl_argcxt, c) - break if (r <= 0 || !rl_isstate(RL_STATE_NUMERICARG)) - end - - return r - end - - # Start a numeric argument with initial value KEY - def rl_digit_argument(ignore, key) - _rl_arg_init() - if (rl_isstate(RL_STATE_CALLBACK)) - _rl_arg_dispatch(@_rl_argcxt, key) - rl_message("(arg: #{@rl_arg_sign * @rl_numeric_arg}) ") - return 0 - else - rl_execute_next(key) - return (rl_digit_loop()) - end - end - - # Make C be the next command to be executed. - def rl_execute_next(c) - @rl_pending_input = c - rl_setstate(RL_STATE_INPUTPENDING) - 0 - end - - # Meta-< goes to the start of the history. - def rl_beginning_of_history(count, key) - rl_get_previous_history(1 + where_history(), key) - end - - # Meta-> goes to the end of the history. (The current line). - def rl_end_of_history(count, key) - rl_maybe_replace_line() - using_history() - rl_maybe_unsave_line() - 0 - end - - # Uppercase the word at point. - def rl_upcase_word(count, key) - rl_change_case(count, UpCase) - end - - # Lowercase the word at point. - def rl_downcase_word(count, key) - rl_change_case(count, DownCase) - end - - # Upcase the first letter, downcase the rest. - def rl_capitalize_word(count, key) - rl_change_case(count, CapCase) - end - - # Save an undo entry for the text from START to END. - def rl_modifying(start, _end) - if (start > _end) - start,_end = _end,start - end - - if (start != _end) - temp = rl_copy_text(start, _end) - rl_begin_undo_group() - rl_add_undo(UNDO_DELETE, start, _end, temp) - rl_add_undo(UNDO_INSERT, start, _end, nil) - rl_end_undo_group() - end - 0 - end - - # The meaty function. - # Change the case of COUNT words, performing OP on them. - # OP is one of UpCase, DownCase, or CapCase. - # If a negative argument is given, leave point where it started, - # otherwise, leave it where it moves to. - def rl_change_case(count, op) - start = @rl_point - rl_forward_word(count, 0) - _end = @rl_point - - if (op != UpCase && op != DownCase && op != CapCase) - rl_ding() - return -1 - end - - if (count < 0) - start,_end = _end,start - end - - # We are going to modify some text, so let's prepare to undo it. - rl_modifying(start, _end) - - inword = false - while (start < _end) - c = _rl_char_value(@rl_line_buffer, start) - # This assumes that the upper and lower case versions are the same width. - if !@rl_byte_oriented - _next = _rl_find_next_mbchar(@rl_line_buffer, start, 1, MB_FIND_NONZERO) - else - _next = start + 1 - end - - if (!_rl_walphabetic(c)) - inword = false - start = _next - next - end - - if (op == CapCase) - nop = inword ? DownCase : UpCase - inword = true - else - nop = op - end - if (isascii(c)) - nc = (nop == UpCase) ? c.upcase : c.downcase - @rl_line_buffer[start] = nc - end - - start = _next - end - - @rl_point = _end - 0 - end - - def isascii(c) - int_val = c[0].to_i # 1.8 + 1.9 compat. - return (int_val < 128 && int_val > 0) - end - - # Search non-interactively through the history list. DIR < 0 means to - # search backwards through the history of previous commands; otherwise - # the search is for commands subsequent to the current position in the - # history list. PCHAR is the character to use for prompting when reading - # the search string; if not specified (0), it defaults to `:'. - def noninc_search(dir, pchar) - cxt = _rl_nsearch_init(dir, pchar) - if (rl_isstate(RL_STATE_CALLBACK)) - return (0) - end - # Read the search string. - r = 0 - while (true) - c = _rl_search_getchar(cxt) - if (c == 0.chr) - break - end - r = _rl_nsearch_dispatch(cxt, c) - if (r < 0) - return 1 - elsif (r == 0) - break - end - end - - r = _rl_nsearch_dosearch(cxt) - (r >= 0) ? _rl_nsearch_cleanup(cxt, r) : (r != 1) - end - - # Search forward through the history list for a string. If the vi-mode - # code calls this, KEY will be `?'. - def rl_noninc_forward_search(count, key) - noninc_search(1, (key == '?') ? '?' : nil) - end - - # Reverse search the history list for a string. If the vi-mode code - # calls this, KEY will be `/'. - def rl_noninc_reverse_search(count, key) - noninc_search(-1, (key == '/') ? '/' : nil) - end - - # Make the data from the history entry ENTRY be the contents of the - # current line. This doesn't do anything with rl_point; the caller - # must set it. - def make_history_line_current(entry) - _rl_replace_text(entry.line, 0, @rl_end) - _rl_fix_point(1) - if (@rl_editing_mode == @vi_mode) - # POSIX.2 says that the `U' command doesn't affect the copy of any - # command lines to the edit line. We're going to implement that by - # making the undo list start after the matching line is copied to the - # current editing buffer. - rl_free_undo_list() - end - if (@_rl_saved_line_for_history) - @_rl_saved_line_for_history = nil - end - end - - # Make the current history item be the one at POS, an absolute index. - # Returns zero if POS is out of range, else non-zero. - def history_set_pos(pos) - if (pos > @history_length || pos < 0 || @the_history.nil?) - return (0) - end - @history_offset = pos - 1 - end - - # Do an anchored search for string through the history in DIRECTION. - def history_search_prefix (string, direction) - history_search_internal(string, direction, ANCHORED_SEARCH) - end - - # Search for STRING in the history list. DIR is < 0 for searching - # backwards. POS is an absolute index into the history list at - # which point to begin searching. - def history_search_pos(string, dir, pos) - old = where_history() - history_set_pos(pos) - if (history_search(string, dir) == -1) - history_set_pos(old) - return (-1) - end - ret = where_history() - history_set_pos(old) - ret - end - - # Search the history list for STRING starting at absolute history position - # POS. If STRING begins with `^', the search must match STRING at the - # beginning of a history line, otherwise a full substring match is performed - # for STRING. DIR < 0 means to search backwards through the history list, - # DIR >= 0 means to search forward. - def noninc_search_from_pos(string, pos, dir) - return 1 if (pos < 0) - - old = where_history() - return -1 if (history_set_pos(pos) == 0) - - rl_setstate(RL_STATE_SEARCH) - if (string[0,1] == '^') - ret = history_search_prefix(string + 1, dir) - else - ret = history_search(string, dir) - end - rl_unsetstate(RL_STATE_SEARCH) - - if (ret != -1) - ret = where_history() - end - history_set_pos(old) - ret - end - - # Search for a line in the history containing STRING. If DIR is < 0, the - # search is backwards through previous entries, else through subsequent - # entries. Returns 1 if the search was successful, 0 otherwise. - def noninc_dosearch(string, dir) - if (string.nil? || string == '' || @noninc_history_pos < 0) - rl_ding() - return 0 - end - - pos = noninc_search_from_pos(string, @noninc_history_pos + dir, dir) - if (pos == -1) - # Search failed, current history position unchanged. - rl_maybe_unsave_line() - rl_clear_message() - @rl_point = 0 - rl_ding() - return 0 - end - - @noninc_history_pos = pos - - oldpos = where_history() - history_set_pos(@noninc_history_pos) - entry = current_history() - if (@rl_editing_mode != @vi_mode) - history_set_pos(oldpos) - end - make_history_line_current(entry) - @rl_point = 0 - @rl_mark = @rl_end - rl_clear_message() - 1 - end - - def _rl_make_prompt_for_search(pchar) - rl_save_prompt() - - # We've saved the prompt, and can do anything with the various prompt - # strings we need before they're restored. We want the unexpanded - # portion of the prompt string after any final newline. - _p = @rl_prompt ? @rl_prompt.rindex("\n") : nil - if _p.nil? - len = (@rl_prompt && @rl_prompt.length>0 ) ? @rl_prompt.length : 0 - if (len>0) - pmt = @rl_prompt.dup - else - pmt = '' - end - pmt << pchar - else - _p+=1 - pmt = @rl_prompt[_p..-1] - pmt << pchar - end - - # will be overwritten by expand_prompt, called from rl_message - @prompt_physical_chars = @saved_physical_chars + 1 - pmt - end - - def _rl_nsearch_init(dir, pchar) - cxt = _rl_scxt_alloc(RL_SEARCH_NSEARCH, 0) - if (dir < 0) - cxt.sflags |= SF_REVERSE # not strictly needed - end - cxt.direction = dir - cxt.history_pos = cxt.save_line - rl_maybe_save_line() - # Clear the undo list, since reading the search string should create its - # own undo list, and the whole list will end up being freed when we - # finish reading the search string. - @rl_undo_list = nil - - # Use the line buffer to read the search string. - @rl_line_buffer[0,1] = 0.chr - @rl_end = @rl_point = 0 - - _p = _rl_make_prompt_for_search(pchar ? pchar : ':') - rl_message(_p) - _p = nil - - rl_setstate(RL_STATE_NSEARCH) - @_rl_nscxt = cxt - cxt - end - - def _rl_nsearch_cleanup(cxt, r) - cxt = nil - @_rl_nscxt = nil - rl_unsetstate(RL_STATE_NSEARCH) - r != 1 - end - - def _rl_nsearch_abort(cxt) - rl_maybe_unsave_line() - rl_clear_message() - @rl_point = cxt.save_point - @rl_mark = cxt.save_mark - rl_restore_prompt() - rl_unsetstate(RL_STATE_NSEARCH) - end - - # Process just-read character C according to search context CXT. Return -1 - # if the caller should abort the search, 0 if we should break out of the - # loop, and 1 if we should continue to read characters. - def _rl_nsearch_dispatch(cxt, c) - case (c) - when "\C-W" - rl_unix_word_rubout(1, c) - when "\C-U" - rl_unix_line_discard(1, c) - when RETURN,NEWLINE - return 0 - when "\C-H",RUBOUT - if (@rl_point == 0) - _rl_nsearch_abort(cxt) - return -1 - end - _rl_rubout_char(1, c) - when "\C-C","\C-G" - rl_ding() - _rl_nsearch_abort(cxt) - return -1 - else - if !@rl_byte_oriented - rl_insert_text(cxt.mb) - else - _rl_insert_char(1, c) - end - end - - send(@rl_redisplay_function) - 1 - end - - # Perform one search according to CXT, using NONINC_SEARCH_STRING. Return - # -1 if the search should be aborted, any other value means to clean up - # using _rl_nsearch_cleanup (). Returns 1 if the search was successful, - # 0 otherwise. - def _rl_nsearch_dosearch(cxt) - @rl_mark = cxt.save_mark - - # If rl_point == 0, we want to re-use the previous search string and - # start from the saved history position. If there's no previous search - # string, punt. - if (@rl_point == 0) - if @noninc_search_string.nil? - rl_ding() - rl_restore_prompt() - rl_unsetstate(RL_STATE_NSEARCH) - return -1 - end - else - # We want to start the search from the current history position. - @noninc_history_pos = cxt.save_line - @noninc_search_string = @rl_line_buffer.dup - - # If we don't want the subsequent undo list generated by the search - #matching a history line to include the contents of the search string, - #we need to clear rl_line_buffer here. For now, we just clear the - #undo list generated by reading the search string. (If the search - #fails, the old undo list will be restored by rl_maybe_unsave_line.) - rl_free_undo_list() - end - - rl_restore_prompt() - noninc_dosearch(@noninc_search_string, cxt.direction) - end - - # Transpose the words at point. If point is at the end of the line, - # transpose the two words before point. - def rl_transpose_words(count, key) - orig_point = @rl_point - - return if (count==0) - - # Find the two words. - rl_forward_word(count, key) - w2_end = @rl_point - rl_backward_word(1, key) - w2_beg = @rl_point - rl_backward_word(count, key) - w1_beg = @rl_point - rl_forward_word(1, key) - w1_end = @rl_point - - # Do some check to make sure that there really are two words. - if ((w1_beg == w2_beg) || (w2_beg < w1_end)) - rl_ding() - @rl_point = orig_point - return -1 - end - - # Get the text of the words. - word1 = rl_copy_text(w1_beg, w1_end) - word2 = rl_copy_text(w2_beg, w2_end) - - # We are about to do many insertions and deletions. Remember them - # as one operation. - rl_begin_undo_group() - - # Do the stuff at word2 first, so that we don't have to worry - # about word1 moving. - @rl_point = w2_beg - rl_delete_text(w2_beg, w2_end) - rl_insert_text(word1) - - @rl_point = w1_beg - rl_delete_text(w1_beg, w1_end) - rl_insert_text(word2) - - # This is exactly correct since the text before this point has not - # changed in length. - @rl_point = w2_end - - # I think that does it. - rl_end_undo_group() - word1 = nil - word2 = nil - - 0 - end - - # Re-read the current keybindings file. - def rl_re_read_init_file(count, ignore) - r = rl_read_init_file(nil) - rl_set_keymap_from_edit_mode() - r - end - - # Exchange the position of mark and point. - def rl_exchange_point_and_mark(count, key) - if (@rl_mark > @rl_end) - @rl_mark = -1 - end - if (@rl_mark == -1) - rl_ding() - return -1 - else - @rl_point, @rl_mark = @rl_mark, @rl_point - end - 0 - end - - # A convenience function for displaying a list of strings in - # columnar format on readline's output stream. MATCHES is the list - # of strings, in argv format, LEN is the number of strings in MATCHES, - # and MAX is the length of the longest string in MATCHES. - def rl_display_match_list(matches, len, max) - # How many items of MAX length can we fit in the screen window? - max += 2 - limit = @_rl_screenwidth / max - if (limit != 1 && (limit * max == @_rl_screenwidth)) - limit-=1 - end - # Avoid a possible floating exception. If max > _rl_screenwidth, - # limit will be 0 and a divide-by-zero fault will result. - if (limit == 0) - limit = 1 - end - # How many iterations of the printing loop? - count = (len + (limit - 1)) / limit - - # Watch out for special case. If LEN is less than LIMIT, then - # just do the inner printing loop. - # 0 < len <= limit implies count = 1. - - # Sort the items if they are not already sorted. - if (!@rl_ignore_completion_duplicates) - matches[1,len] = matches[1,len].sort - end - rl_crlf() - - lines = 0 - if (!@_rl_print_completions_horizontally) - # Print the sorted items, up-and-down alphabetically, like ls. - for i in 1 .. count - l = i - for j in 0 ... limit - if (l > len || matches[l].nil?) - break - else - temp = printable_part(matches[l]) - printed_len = print_filename(temp, matches[l]) - - if (j + 1 < limit) - @rl_outstream.write(' '*(max - printed_len)) - end - end - l += count - end - rl_crlf() - lines+=1 - if (@_rl_page_completions && lines >= (@_rl_screenheight - 1) && i < count) - lines = _rl_internal_pager(lines) - return if (lines < 0) - end - end - else - # Print the sorted items, across alphabetically, like ls -x. - i = 1 - while(matches[i]) - temp = printable_part(matches[i]) - printed_len = print_filename(temp, matches[i]) - # Have we reached the end of this line? - if (matches[i+1]) - if ((limit > 1) && (i % limit) == 0) - rl_crlf() - lines+=1 - if (@_rl_page_completions && lines >= @_rl_screenheight - 1) - lines = _rl_internal_pager(lines) - return if (lines < 0) - end - else - @rl_outstream.write(' '*(max - printed_len)) - end - end - i += 1 - end - rl_crlf() - end - end - - # Append any necessary closing quote and a separator character to the - # just-inserted match. If the user has specified that directories - # should be marked by a trailing `/', append one of those instead. The - # default trailing character is a space. Returns the number of characters - # appended. If NONTRIVIAL_MATCH is set, we test for a symlink (if the OS - # has them) and don't add a suffix for a symlink to a directory. A - # nontrivial match is one that actually adds to the word being completed. - # The variable rl_completion_mark_symlink_dirs controls this behavior - # (it's initially set to the what the user has chosen, indicated by the - # value of _rl_complete_mark_symlink_dirs, but may be modified by an - # application's completion function). - def append_to_match(text, delimiter, quote_char, nontrivial_match) - temp_string = 0.chr * 4 - temp_string_index = 0 - if (quote_char && @rl_point>0 && !@rl_completion_suppress_quote && - @rl_line_buffer[@rl_point - 1,1] != quote_char) - temp_string[temp_string_index] = quote_char - temp_string_index += 1 - end - if (delimiter != 0.chr) - temp_string[temp_string_index] = delimiter - temp_string_index += 1 - elsif (!@rl_completion_suppress_append && @rl_completion_append_character) - temp_string[temp_string_index] = @rl_completion_append_character - temp_string_index += 1 - end - temp_string[temp_string_index] = 0.chr - temp_string_index += 1 - - if (@rl_filename_completion_desired) - filename = File.expand_path(text) - return temp_string_index unless File.exists? filename - - s = (nontrivial_match && !@rl_completion_mark_symlink_dirs) ? - File.lstat(filename) : File.stat(filename) - if s.directory? - if @_rl_complete_mark_directories - # This is clumsy. Avoid putting in a double slash if point - # is at the end of the line and the previous character is a - # slash. - if (@rl_point>0 && @rl_line_buffer[@rl_point,1] == 0.chr && @rl_line_buffer[@rl_point - 1,1] == '/' ) - - elsif (@rl_line_buffer[@rl_point,1] != '/') - rl_insert_text('/') - end - end - # Don't add anything if the filename is a symlink and resolves to a - # directory. - elsif s.symlink? && File.stat(filename).directory? - - else - if (@rl_point == @rl_end && temp_string_index>0) - rl_insert_text(temp_string) - end - end - filename = nil - else - if (@rl_point == @rl_end && temp_string_index>0) - rl_insert_text(temp_string) - end - end - temp_string_index - end - - # Stifle the history list, remembering only MAX number of lines. - def stifle_history(max) - max = 0 if (max < 0) - - if (@history_length > max) - @the_history.slice!(0,(@history_length - max)) - @history_length = max - end - - @history_stifled = true - @max_input_history = @history_max_entries = max - end - - # Stop stifling the history. This returns the previous maximum - # number of history entries. The value is positive if the history - # was stifled, negative if it wasn't. - def unstifle_history() - if (@history_stifled) - @history_stifled = false - return (@history_max_entries) - else - return (-@history_max_entries) - end - end - - def history_is_stifled() - return (@history_stifled) - end - - def clear_history() - @the_history = nil - @history_offset = @history_length = 0 - end - - # Insert COUNT characters from STRING to the output stream at column COL. - def insert_some_chars(string, count, col) - if @hConsoleHandle - _rl_output_some_chars(string,0,count) - else - # DEBUGGING - if (@rl_byte_oriented) - if (count != col) - $stderr.write("readline: debug: insert_some_chars: count (#{count}) != col (#{col})\n"); - end - end - # If IC is defined, then we do not have to "enter" insert mode. - #if (@_rl_term_IC) - # buffer = tgoto(@_rl_term_IC, 0, col) - # @_rl_out_stream.write(buffer) - # _rl_output_some_chars(string,0,count) - #else - # If we have to turn on insert-mode, then do so. - if (@_rl_term_im) - @_rl_out_stream.write(@_rl_term_im) - end - # If there is a special command for inserting characters, then - # use that first to open up the space. - if (@_rl_term_ic) - @_rl_out_stream.write(@_rl_term_ic * count) - end - - # Print the text. - _rl_output_some_chars(string,0, count) - - # If there is a string to turn off insert mode, we had best use - # it now. - if (@_rl_term_ei) - @_rl_out_stream.write(@_rl_term_ei) - end - #end - end - end - - # Delete COUNT characters from the display line. - def delete_chars(count) - return if (count > @_rl_screenwidth) # XXX - - if @hConsoleHandle.nil? - #if (@_rl_term_DC) - # buffer = tgoto(_rl_term_DC, count, count); - # @_rl_out_stream.write(buffer * count) - #else - if (@_rl_term_dc) - @_rl_out_stream.write(@_rl_term_dc * count) - end - #end - end - end - - # adjust pointed byte and find mbstate of the point of string. - # adjusted point will be point <= adjusted_point, and returns - # differences of the byte(adjusted_point - point). - # if point is invalied (point < 0 || more than string length), - # it returns -1 - def _rl_adjust_point(string, point) - - length = string.length - return -1 if (point < 0) - return -1 if (length < point) - - pos = 0 - - case @encoding - when 'E' - x = string.scan(/./me) - i, len = 0, x.length - while (pos < point && i < len) - pos += x[i].length - i += 1 - end - when 'S' - x = string.scan(/./ms) - i, len = 0, x.length - while (pos < point && i < len) - pos += x[i].length - i += 1 - end - when 'U' - x = string.scan(/./mu) - i, len = 0, x.length - while (pos < point && i < len) - pos += x[i].length - i += 1 - end - when 'X' - enc = string.encoding - str = string.force_encoding(@encoding_name) - len = str.length - if point <= length / 2 - # count byte size from head - i = 0 - while (pos < point && i < len) - pos += str[i].bytesize - i += 1 - end - else - # count byte size from tail - pos = str.bytesize - i = len - 1 - while (pos > point && i >= 0) - pos -= str[i].bytesize - i -= 1 - end - pos += str[i + 1].bytesize if pos < point - end - string.force_encoding(enc) - else - pos = point - end - pos - point - end - - # Find next `count' characters started byte point of the specified seed. - # If flags is MB_FIND_NONZERO, we look for non-zero-width multibyte - # characters. - def _rl_find_next_mbchar(string, seed, count, flags) - if @encoding == 'N' - return (seed + count) - end - seed = 0 if seed < 0 - return seed if count <= 0 - - point = seed + _rl_adjust_point(string,seed) - if (seed < point) - count -= 1 - end - - str = (flags == MB_FIND_NONZERO) ? string.sub(/\x00+$/,'') : string - - case @encoding - when 'E' - point += str[point..-1].scan(/./me)[0,count].to_s.length - when 'S' - point += str[point..-1].scan(/./ms)[0,count].to_s.length - when 'U' - point += str[point..-1].scan(/./mu)[0,count].to_s.length - when 'X' - point += str[point..-1].force_encoding(@encoding_name)[0,count].bytesize - else - point += count - point = str.length if point >= str.length - end - point - end - - # Find previous character started byte point of the specified seed. - # Returned point will be point <= seed. If flags is MB_FIND_NONZERO, - # we look for non-zero-width multibyte characters. - def _rl_find_prev_mbchar(string, seed, flags) - if @encoding == 'N' - return ((seed == 0) ? seed : seed - 1) - end - - length = string.length - if seed < 0 - return 0 - elsif length < seed - return length - end - - case @encoding - when 'E' - string[0,seed].scan(/./me)[0..-2].to_s.length - when 'S' - string[0,seed].scan(/./ms)[0..-2].to_s.length - when 'U' - string[0,seed].scan(/./mu)[0..-2].to_s.length - when 'X' - string[0,seed].force_encoding(@encoding_name)[0..-2].bytesize - end - end - - # compare the specified two characters. If the characters matched, - # return true. Otherwise return false. - def _rl_compare_chars(buf1, pos1, buf2, pos2) - return false if buf1[pos1].nil? || buf2[pos2].nil? - case @encoding - when 'E' - buf1[pos1..-1].scan(/./me)[0] == buf2[pos2..-1].scan(/./me)[0] - when 'S' - buf1[pos1..-1].scan(/./ms)[0] == buf2[pos2..-1].scan(/./ms)[0] - when 'U' - buf1[pos1..-1].scan(/./mu)[0] == buf2[pos2..-1].scan(/./mu)[0] - when 'X' - buf1[pos1..-1].force_encoding(@encoding_name)[0] == buf2[pos2..-1].force_encoding(@encoding_name)[0] - else - buf1[pos1] == buf2[pos2] - end - end - - # return the number of bytes parsed from the multibyte sequence starting - # at src, if a non-L'\0' wide character was recognized. It returns 0, - # if a L'\0' wide character was recognized. It returns (size_t)(-1), - # if an invalid multibyte sequence was encountered. It returns (size_t)(-2) - # if it couldn't parse a complete multibyte character. - def _rl_get_char_len(src) - return 0 if src[0,1] == 0.chr || src.length==0 - case @encoding - when 'E' - len = src.scan(/./me)[0].to_s.length - when 'S' - len = src.scan(/./ms)[0].to_s.length - when 'U' - len = src.scan(/./mu)[0].to_s.length - when 'X' - src = src.dup.force_encoding(@encoding_name) - len = src.valid_encoding? ? src[0].bytesize : 0 - else - len = 1 - end - len==0 ? -2 : len - end - - # read multibyte char - def _rl_read_mbchar(mbchar, size) - mb_len = 0 - while (mb_len < size) - rl_setstate(RL_STATE_MOREINPUT) - c = rl_read_key() - rl_unsetstate(RL_STATE_MOREINPUT) - - break if c.is_a?(Integer) && c < 0 - - mbchar << c - mb_len += 1 - case @encoding - when 'E' - break unless mbchar.scan(/./me).empty? - when 'S' - break unless mbchar.scan(/./ms).empty? - when 'U' - break unless mbchar.scan(/./mu).empty? - when 'X' - break if mbchar.dup.force_encoding(@encoding_name).valid_encoding? - end - end - mb_len - end - - # Read a multibyte-character string whose first character is FIRST into - # the buffer MB of length MLEN. Returns the last character read, which - # may be FIRST. Used by the search functions, among others. Very similar - # to _rl_read_mbchar. - def _rl_read_mbstring(first, mb, mlen) - c = first - (0...mlen).each do - mb << c - if _rl_get_char_len(mb) == -2 - # Read more for multibyte character - rl_setstate(RL_STATE_MOREINPUT) - c = rl_read_key() - break if c.is_a?(Integer) && c < 0 - rl_unsetstate(RL_STATE_MOREINPUT) - else - break - end - end - c - end - - def _rl_is_mbchar_matched(string, seed, _end, mbchar, length) - return 0 if ((_end - seed) < length) - - for i in 0 ... length - if (string[seed + i] != mbchar[i]) - return 0 - end - end - 1 - end - - # Redraw the last line of a multi-line prompt that may possibly contain - # terminal escape sequences. Called with the cursor at column 0 of the - # line to draw the prompt on. - def redraw_prompt(t) - oldp = @rl_display_prompt - rl_save_prompt() - - @rl_display_prompt = t - @local_prompt,@prompt_visible_length,@prompt_last_invisible,@prompt_invis_chars_first_line,@prompt_physical_chars = - expand_prompt(t) - @local_prompt_prefix = nil - @local_prompt_len = @local_prompt ? @local_prompt.length : 0 - - rl_forced_update_display() - - @rl_display_prompt = oldp - rl_restore_prompt() - end - - # Redisplay the current line after a SIGWINCH is received. - def _rl_redisplay_after_sigwinch() - # Clear the current line and put the cursor at column 0. Make sure - # the right thing happens if we have wrapped to a new screen line. - if @_rl_term_cr - @rl_outstream.write(@_rl_term_cr) - @_rl_last_c_pos = 0 - if @_rl_term_clreol - @rl_outstream.write(@_rl_term_clreol) - else - space_to_eol(@_rl_screenwidth) - @rl_outstream.write(@_rl_term_cr) - end - - if @_rl_last_v_pos > 0 - _rl_move_vert(0) - end - else - rl_crlf() - end - - # Redraw only the last line of a multi-line prompt. - t = @rl_display_prompt.index("\n") - if t - redraw_prompt(@rl_display_prompt[(t+1)..-1]) - else - rl_forced_update_display() - end - end - - def rl_resize_terminal() - if @readline_echoing_p - _rl_get_screen_size(@rl_instream.fileno, 1) - if @rl_redisplay_function != :rl_redisplay - rl_forced_update_display() - else - _rl_redisplay_after_sigwinch() - end - end - end - - def rl_sigwinch_handler(sig) - rl_setstate(RL_STATE_SIGHANDLER) - rl_resize_terminal() - rl_unsetstate(RL_STATE_SIGHANDLER) - end - - - - module_function :rl_attempted_completion_function,:rl_deprep_term_function, - :rl_event_hook,:rl_attempted_completion_over,:rl_basic_quote_characters, - :rl_basic_word_break_characters,:rl_completer_quote_characters, - :rl_completer_word_break_characters,:rl_completion_append_character, - :rl_filename_quote_characters,:rl_instream,:rl_library_version,:rl_outstream, - :rl_readline_name, - :rl_attempted_completion_function=,:rl_deprep_term_function=, - :rl_event_hook=,:rl_attempted_completion_over=,:rl_basic_quote_characters=, - :rl_basic_word_break_characters=,:rl_completer_quote_characters=, - :rl_completer_word_break_characters=,:rl_completion_append_character=, - :rl_filename_quote_characters=,:rl_instream=,:rl_library_version=,:rl_outstream=, - :rl_readline_name=,:history_length,:history_base,:rl_point - - def no_terminal? - term = ENV["TERM"] - term.nil? || (term == 'dumb') || (RUBY_PLATFORM =~ /mswin|mingw/) - end - private :no_terminal? - -end diff --git a/bundle/ruby/3.2.0/gems/rb-readline-0.5.5/lib/rbreadline/version.rb b/bundle/ruby/3.2.0/gems/rb-readline-0.5.5/lib/rbreadline/version.rb deleted file mode 100644 index 2b1f1095..00000000 --- a/bundle/ruby/3.2.0/gems/rb-readline-0.5.5/lib/rbreadline/version.rb +++ /dev/null @@ -1,3 +0,0 @@ -module RbReadline - RB_READLINE_VERSION = "0.5.5" -end diff --git a/bundle/ruby/3.2.0/gems/rb-readline-0.5.5/lib/readline.rb b/bundle/ruby/3.2.0/gems/rb-readline-0.5.5/lib/readline.rb deleted file mode 100644 index 121255a5..00000000 --- a/bundle/ruby/3.2.0/gems/rb-readline-0.5.5/lib/readline.rb +++ /dev/null @@ -1,539 +0,0 @@ -# encoding: US-ASCII -# -# readline.rb -- GNU Readline module -# Copyright (C) 1997-2001 Shugo Maeda -# -# Ruby translation by Park Heesob phasis@gmail.com - -module Readline - - require 'rbreadline' - include RbReadline - - @completion_proc = nil - @completion_case_fold = false - - # Begins an interactive terminal process using +prompt+ as the command - # prompt that users see when they type commands. The method returns the - # line entered whenever a carriage return is encountered. - # - # If an +add_history+ argument is provided, commands entered by users are - # stored in a history buffer that can be recalled for later use. - # - # Note that this method depends on $stdin and $stdout both being open. - # Because this is meant as an interactive console interface, they should - # generally not be redirected. - # - # If you would like to add non-visible characters to the the prompt (for - # example to add colors) you must prepend the character \001 (^A) before - # each sequence of non-visible characters and add the character \002 (^B) - # after, otherwise line wrapping may not work properly. - # - # Example: - # - # loop{ Readline.readline('> ') } - # - def readline(prompt = "", add_history = nil) - if $stdin.closed? - raise IOError, "stdin closed" - end - - RbReadline.rl_instream = $stdin - RbReadline.rl_outstream = $stdout - - begin - buff = RbReadline.readline(prompt) - rescue Exception => e - buff = nil - RbReadline.rl_cleanup_after_signal() - RbReadline.rl_deprep_terminal() - raise e - end - - if add_history && buff - RbReadline.add_history(buff) - end - - return buff ? buff.dup : nil - end - - # Sets the input stream (an IO object) for readline interaction. The - # default is $stdin. - # - def self.input=(input) - RbReadline.rl_instream = input - end - - # Sets the output stream (an IO object) for readline interaction. The - # default is $stdout. - # - def self.output=(output) - RbReadline.rl_outstream = output - end - - # Returns current line buffer - # - def self.line_buffer - RbReadline.rl_line_buffer - end - - # Sets the auto-completion procedure (i.e. tab auto-complete). - # - # The +proc+ argument is typically a Proc object. It must respond to - # .call, take a single String argument and return an Array of - # candidates for completion. - # - # Example: - # - # list = ['search', 'next', 'clear'] - # Readline.completion_proc = proc{ |s| list.grep( /^#{Regexp.escape(s)}/) } - # - def self.completion_proc=(proc) - unless proc.respond_to? :call - raise ArgumentError,"argument must respond to `call'" - end - @completion_proc = proc - end - - # Returns the current auto-completion procedure. - # - def self.completion_proc() - @completion_proc - end - - # Sets whether or not the completion proc should ignore case sensitivity. - # The default is false, i.e. completion procs are case sensitive. - # - def self.completion_case_fold=(bool) - @completion_case_fold = bool - end - - # Returns whether or not the completion proc is case sensitive. The - # default is false, i.e. completion procs are case sensitive. - # - def self.completion_case_fold() - @completion_case_fold - end - - # Returns nil if no matches are found or an array of strings: - # - # [0] is the replacement for text - # [1..n] the possible matches - # [n+1] nil - # - # The possible matches should not include [0]. - # - # If this method sets RbReadline.rl_attempted_completion_over to true, - # then the default completion function will not be called when this - # function returns nil. - def self.readline_attempted_completion_function(text,start,_end) - proc = @completion_proc - return nil if proc.nil? - - RbReadline.rl_attempted_completion_over = true - - case_fold = @completion_case_fold - ary = proc.call(text) - if ary.class != Array - ary = Array(ary) - else - ary.compact! - end - - matches = ary.length - return nil if (matches == 0) - result = Array.new(matches+2) - for i in 0 ... matches - result[i+1] = ary[i].dup - end - result[matches+1] = nil - - if(matches==1) - result[0] = result[1].dup - result[1] = nil - else - i = 1 - low = 100000 - - while (i < matches) - if (case_fold) - si = 0 - while ((c1 = result[i][si,1].downcase) && - (c2 = result[i + 1][si,1].downcase)) - break if (c1 != c2) - si += 1 - end - else - si = 0 - while ((c1 = result[i][si,1]) && - (c2 = result[i + 1][si,1])) - break if (c1 != c2) - si += 1 - end - end - if (low > si) - low = si - end - i+=1 - end - result[0] = result[1][0,low] - end - - result - end - - # Sets vi editing mode. - # - def self.vi_editing_mode() - RbReadline.rl_vi_editing_mode(1,0) - nil - end - - # Sets emacs editing mode - # - def self.emacs_editing_mode() - RbReadline.rl_emacs_editing_mode(1,0) - nil - end - - # Sets the character that is automatically appended after the - # Readline.completion_proc method is called. - # - # If +char+ is nil or empty, then a null character is used. - # - def self.completion_append_character=(char) - if char.nil? - RbReadline.rl_completion_append_character = ?\0 - elsif char.length==0 - RbReadline.rl_completion_append_character = ?\0 - else - RbReadline.rl_completion_append_character = char[0].chr - end - end - - # Returns the character that is automatically appended after the - # Readline.completion_proc method is called. - # - def self.completion_append_character() - if RbReadline.rl_completion_append_character == ?\0 - return nil - end - return RbReadline.rl_completion_append_character - end - - # Sets the character string that signal a break between words for the - # completion proc. - # - def self.basic_word_break_characters=(str) - RbReadline.rl_basic_word_break_characters = str.dup - end - - # Returns the character string that signal a break between words for the - # completion proc. The default is " \t\n\"\\'`@$><=|&{(". - # - def self.basic_word_break_characters() - if RbReadline.rl_basic_word_break_characters.nil? - nil - else - RbReadline.rl_basic_word_break_characters.dup - end - end - - # Sets the character string that signal the start or end of a word for - # the completion proc. - # - def self.completer_word_break_characters=(str) - RbReadline.rl_completer_word_break_characters = str.dup - end - - # Returns the character string that signal the start or end of a word for - # the completion proc. - # - def self.completer_word_break_characters() - if RbReadline.rl_completer_word_break_characters.nil? - nil - else - RbReadline.rl_completer_word_break_characters.dup - end - end - - # Sets the list of quote characters that can cause a word break. - # - def self.basic_quote_characters=(str) - RbReadline.rl_basic_quote_characters = str.dup - end - - # Returns the list of quote characters that can cause a word break. - # The default is "'\"" (single and double quote characters). - # - def self.basic_quote_characters() - if RbReadline.rl_basic_quote_characters.nil? - nil - else - RbReadline.rl_basic_quote_characters.dup - end - end - - # Sets the list of characters that can be used to quote a substring of - # the line, i.e. a group of characters within quotes. - # - def self.completer_quote_characters=(str) - RbReadline.rl_completer_quote_characters = str.dup - end - - # Returns the list of characters that can be used to quote a substring - # of the line, i.e. a group of characters inside quotes. - # - def self.completer_quote_characters() - if RbReadline.rl_completer_quote_characters.nil? - nil - else - RbReadline.rl_completer_quote_characters.dup - end - end - - # Sets the character string of one or more characters that indicate quotes - # for the filename completion of user input. - # - def self.filename_quote_characters=(str) - RbReadline.rl_filename_quote_characters = str.dup - end - - # Returns the character string used to indicate quotes for the filename - # completion of user input. - # - def self.filename_quote_characters() - if RbReadline.rl_filename_quote_characters.nil? - nil - else - RbReadline.rl_filename_quote_characters.dup - end - end - - # Returns the current offset in the current input line. - # - def self.point() - RbReadline.rl_point - end - - # Temporarily disable warnings and call a block - # - def self.silence_warnings(&block) - warn_level = $VERBOSE - $VERBOSE = nil - result = block.call - $VERBOSE = warn_level - result - end - - # The History class encapsulates a history of all commands entered by - # users at the prompt, providing an interface for inspection and retrieval - # of all commands. - class History - extend Enumerable - - # The History class, stringified in all caps. - #-- - # Why? - # - def self.to_s - "HISTORY" - end - - # Returns the command that was entered at the specified +index+ - # in the history buffer. - # - # Raises an IndexError if the entry is nil. - # - def self.[](index) - if index < 0 - index += RbReadline.history_length - end - entry = RbReadline.history_get(RbReadline.history_base+index) - if entry.nil? - raise IndexError,"invalid index" - end - entry.line.dup - end - - # Sets the command +str+ at the given index in the history buffer. - # - # You can only replace an existing entry. Attempting to create a new - # entry will result in an IndexError. - # - def self.[]=(index,str) - if index<0 - index += RbReadline.history_length - end - entry = RbReadline.replace_history_entry(index,str,nil) - if entry.nil? - raise IndexError,"invalid index" - end - str - end - - # Synonym for Readline.add_history. - # - def self.<<(str) - RbReadline.add_history(str) - end - - # Pushes a list of +args+ onto the history buffer. - # - def self.push(*args) - args.each do |str| - RbReadline.add_history(str) - end - end - - # Internal function that removes the item at +index+ from the history - # buffer, performing necessary duplication in the process. - #-- - # TODO: mark private? - # - def self.rb_remove_history(index) - entry = RbReadline.remove_history(index) - if (entry) - val = entry.line.dup - entry = nil - return val - end - nil - end - - # Removes and returns the last element from the history buffer. - # - def self.pop() - if RbReadline.history_length>0 - rb_remove_history(RbReadline.history_length-1) - else - nil - end - end - - # Removes and returns the first element from the history buffer. - # - def self.shift() - if RbReadline.history_length>0 - rb_remove_history(0) - else - nil - end - end - - # Iterates over each entry in the history buffer. - # - def self.each() - for i in 0 ... RbReadline.history_length - entry = RbReadline.history_get(RbReadline.history_base + i) - break if entry.nil? - yield entry.line.dup - end - self - end - - # Returns the length of the history buffer. - # - def self.length() - RbReadline.history_length - end - - # Synonym for Readline.length. - # - def self.size() - RbReadline.history_length - end - - # Returns a bolean value indicating whether or not the history buffer - # is empty. - # - def self.empty?() - RbReadline.history_length == 0 - end - - # Deletes an entry from the histoyr buffer at the specified +index+. - # - def self.delete_at(index) - if index < 0 - i += RbReadline.history_length - end - if index < 0 || index > RbReadline.history_length - 1 - raise IndexError, "invalid index" - end - rb_remove_history(index) - end - - end - - silence_warnings { HISTORY = History } - - # The Fcomp class provided to encapsulate typical filename completion - # procedure. You will not typically use this directly, but will instead - # use the Readline::FILENAME_COMPLETION_PROC. - # - class Fcomp - def self.call(str) - matches = RbReadline.rl_completion_matches(str, :rl_filename_completion_function) - if (matches) - result = [] - i = 0 - while(matches[i]) - result << matches[i].dup - matches[i] = nil - i += 1 - end - matches = nil - if (result.length >= 2) - result.shift - end - else - result = nil - end - return result - end - end - - silence_warnings { FILENAME_COMPLETION_PROC = Fcomp } - - # The Ucomp class provided to encapsulate typical filename completion - # procedure. You will not typically use this directly, but will instead - # use the Readline::USERNAME_COMPLETION_PROC. - # - # Note that this feature currently only works on Unix systems since it - # ultimately uses the Etc module to iterate over a list of users. - # - class Ucomp - def self.call(str) - matches = RbReadline.rl_completion_matches(str, :rl_username_completion_function) - if (matches) - result = [] - i = 0 - while(matches[i]) - result << matches[i].dup - matches[i] = nil - i += 1 - end - matches = nil - if (result.length >= 2) - result.shift - end - else - result = nil - end - return result - end - end - - silence_warnings { USERNAME_COMPLETION_PROC = Ucomp } - - RbReadline.rl_readline_name = "Ruby" - - RbReadline.using_history() - - silence_warnings { VERSION = RbReadline.rl_library_version } - - module_function :readline - - RbReadline.rl_attempted_completion_function = :readline_attempted_completion_function - -end diff --git a/bundle/ruby/3.2.0/gems/rb-readline-0.5.5/rb-readline.gemspec b/bundle/ruby/3.2.0/gems/rb-readline-0.5.5/rb-readline.gemspec deleted file mode 100644 index fd036a54..00000000 --- a/bundle/ruby/3.2.0/gems/rb-readline-0.5.5/rb-readline.gemspec +++ /dev/null @@ -1,51 +0,0 @@ -# encoding: UTF-8 - -libdir = File.join(File.dirname(__FILE__), 'lib') -$LOAD_PATH.unshift(libdir) unless $LOAD_PATH.include?(libdir) - -require "rbreadline/version" - -spec = Gem::Specification.new do |s| - # basic information - s.name = "rb-readline" - s.version = RbReadline::RB_READLINE_VERSION - s.platform = Gem::Platform::RUBY - - # description and details - s.summary = 'Pure-Ruby Readline Implementation' - s.description = "The readline library provides a pure Ruby implementation of the GNU readline C library, as well as the Readline extension that ships as part of the standard library." - - # project information - s.homepage = 'http://github.com/ConnorAtherton/rb-readline' - s.licenses = ['BSD'] - - # author and contributors - s.authors = ['Park Heesob', 'Daniel Berger', 'Luis Lavena', 'Connor Atherton'] - s.email = ['phasis@gmail.com', 'djberg96@gmail.com', 'luislavena@gmail.com', 'c.liam.atherton@gmail.com'] - - # requirements - s.required_ruby_version = ">= 1.8.6" - s.required_rubygems_version = ">= 1.3.5" - - # development dependencies - s.add_development_dependency 'rake' - s.add_development_dependency "minitest", "~> 5.2" - - # components, files and paths - s.files = Dir[ - "{bench,examples,lib,test}/**/*.rb", - "README.md", - "LICENSE", - "CHANGES", - "Rakefile", - "rb-readline.gemspec", - "setup.rb" - ] - - s.require_path = 'lib' - - # documentation - s.rdoc_options << '--main' << 'README.md' << '--title' << 'Rb-Readline - Documentation' - - s.extra_rdoc_files = %w(README.md LICENSE CHANGES) -end diff --git a/bundle/ruby/3.2.0/gems/rb-readline-0.5.5/setup.rb b/bundle/ruby/3.2.0/gems/rb-readline-0.5.5/setup.rb deleted file mode 100644 index 4f1e1986..00000000 --- a/bundle/ruby/3.2.0/gems/rb-readline-0.5.5/setup.rb +++ /dev/null @@ -1,1585 +0,0 @@ -# -# setup.rb -# -# Copyright (c) 2000-2005 Minero Aoki -# -# This program is free software. -# You can distribute/modify this program under the terms of -# the GNU LGPL, Lesser General Public License version 2.1. -# - -unless Enumerable.method_defined?(:map) # Ruby 1.4.6 - module Enumerable - alias map collect - end -end - -unless File.respond_to?(:read) # Ruby 1.6 - def File.read(fname) - open(fname) {|f| - return f.read - } - end -end - -unless Errno.const_defined?(:ENOTEMPTY) # Windows? - module Errno - class ENOTEMPTY - # We do not raise this exception, implementation is not needed. - end - end -end - -def File.binread(fname) - open(fname, 'rb') {|f| - return f.read - } -end - -# for corrupted Windows' stat(2) -def File.dir?(path) - File.directory?((path[-1,1] == '/') ? path : path + '/') -end - - -class ConfigTable - - include Enumerable - - def initialize(rbconfig) - @rbconfig = rbconfig - @items = [] - @table = {} - # options - @install_prefix = nil - @config_opt = nil - @verbose = true - @no_harm = false - end - - attr_accessor :install_prefix - attr_accessor :config_opt - - attr_writer :verbose - - def verbose? - @verbose - end - - attr_writer :no_harm - - def no_harm? - @no_harm - end - - def [](key) - lookup(key).resolve(self) - end - - def []=(key, val) - lookup(key).set val - end - - def names - @items.map {|i| i.name } - end - - def each(&block) - @items.each(&block) - end - - def key?(name) - @table.key?(name) - end - - def lookup(name) - @table[name] or setup_rb_error "no such config item: #{name}" - end - - def add(item) - @items.push item - @table[item.name] = item - end - - def remove(name) - item = lookup(name) - @items.delete_if {|i| i.name == name } - @table.delete_if {|name, i| i.name == name } - item - end - - def load_script(path, inst = nil) - if File.file?(path) - MetaConfigEnvironment.new(self, inst).instance_eval File.read(path), path - end - end - - def savefile - '.config' - end - - def load_savefile - begin - File.foreach(savefile()) do |line| - k, v = *line.split(/=/, 2) - self[k] = v.strip - end - rescue Errno::ENOENT - setup_rb_error $!.message + "\n#{File.basename($0)} config first" - end - end - - def save - @items.each {|i| i.value } - File.open(savefile(), 'w') {|f| - @items.each do |i| - f.printf "%s=%s\n", i.name, i.value if i.value? and i.value - end - } - end - - def load_standard_entries - standard_entries(@rbconfig).each do |ent| - add ent - end - end - - def standard_entries(rbconfig) - c = rbconfig - - rubypath = File.join(c['bindir'], c['ruby_install_name'] + c['EXEEXT']) - - major = c['MAJOR'].to_i - minor = c['MINOR'].to_i - teeny = c['TEENY'].to_i - version = "#{major}.#{minor}" - - # ruby ver. >= 1.4.4? - newpath_p = ((major >= 2) or - ((major == 1) and - ((minor >= 5) or - ((minor == 4) and (teeny >= 4))))) - - if c['rubylibdir'] - # V > 1.6.3 - libruby = "#{c['prefix']}/lib/ruby" - librubyver = c['rubylibdir'] - librubyverarch = c['archdir'] - siteruby = c['sitedir'] - siterubyver = c['sitelibdir'] - siterubyverarch = c['sitearchdir'] - elsif newpath_p - # 1.4.4 <= V <= 1.6.3 - libruby = "#{c['prefix']}/lib/ruby" - librubyver = "#{c['prefix']}/lib/ruby/#{version}" - librubyverarch = "#{c['prefix']}/lib/ruby/#{version}/#{c['arch']}" - siteruby = c['sitedir'] - siterubyver = "$siteruby/#{version}" - siterubyverarch = "$siterubyver/#{c['arch']}" - else - # V < 1.4.4 - libruby = "#{c['prefix']}/lib/ruby" - librubyver = "#{c['prefix']}/lib/ruby/#{version}" - librubyverarch = "#{c['prefix']}/lib/ruby/#{version}/#{c['arch']}" - siteruby = "#{c['prefix']}/lib/ruby/#{version}/site_ruby" - siterubyver = siteruby - siterubyverarch = "$siterubyver/#{c['arch']}" - end - parameterize = lambda {|path| - path.sub(/\A#{Regexp.quote(c['prefix'])}/, '$prefix') - } - - if arg = c['configure_args'].split.detect {|arg| /--with-make-prog=/ =~ arg } - makeprog = arg.sub(/'/, '').split(/=/, 2)[1] - else - makeprog = 'make' - end - - [ - ExecItem.new('installdirs', 'std/site/home', - 'std: install under libruby; site: install under site_ruby; home: install under $HOME')\ - {|val, table| - case val - when 'std' - table['rbdir'] = '$librubyver' - table['sodir'] = '$librubyverarch' - when 'site' - table['rbdir'] = '$siterubyver' - table['sodir'] = '$siterubyverarch' - when 'home' - setup_rb_error '$HOME was not set' unless ENV['HOME'] - table['prefix'] = ENV['HOME'] - table['rbdir'] = '$libdir/ruby' - table['sodir'] = '$libdir/ruby' - end - }, - PathItem.new('prefix', 'path', c['prefix'], - 'path prefix of target environment'), - PathItem.new('bindir', 'path', parameterize.call(c['bindir']), - 'the directory for commands'), - PathItem.new('libdir', 'path', parameterize.call(c['libdir']), - 'the directory for libraries'), - PathItem.new('datadir', 'path', parameterize.call(c['datadir']), - 'the directory for shared data'), - PathItem.new('mandir', 'path', parameterize.call(c['mandir']), - 'the directory for man pages'), - PathItem.new('sysconfdir', 'path', parameterize.call(c['sysconfdir']), - 'the directory for system configuration files'), - PathItem.new('localstatedir', 'path', parameterize.call(c['localstatedir']), - 'the directory for local state data'), - PathItem.new('libruby', 'path', libruby, - 'the directory for ruby libraries'), - PathItem.new('librubyver', 'path', librubyver, - 'the directory for standard ruby libraries'), - PathItem.new('librubyverarch', 'path', librubyverarch, - 'the directory for standard ruby extensions'), - PathItem.new('siteruby', 'path', siteruby, - 'the directory for version-independent aux ruby libraries'), - PathItem.new('siterubyver', 'path', siterubyver, - 'the directory for aux ruby libraries'), - PathItem.new('siterubyverarch', 'path', siterubyverarch, - 'the directory for aux ruby binaries'), - PathItem.new('rbdir', 'path', '$siterubyver', - 'the directory for ruby scripts'), - PathItem.new('sodir', 'path', '$siterubyverarch', - 'the directory for ruby extentions'), - PathItem.new('rubypath', 'path', rubypath, - 'the path to set to #! line'), - ProgramItem.new('rubyprog', 'name', rubypath, - 'the ruby program using for installation'), - ProgramItem.new('makeprog', 'name', makeprog, - 'the make program to compile ruby extentions'), - SelectItem.new('shebang', 'all/ruby/never', 'ruby', - 'shebang line (#!) editing mode'), - BoolItem.new('without-ext', 'yes/no', 'no', - 'does not compile/install ruby extentions') - ] - end - private :standard_entries - - def load_multipackage_entries - multipackage_entries().each do |ent| - add ent - end - end - - def multipackage_entries - [ - PackageSelectionItem.new('with', 'name,name...', '', 'ALL', - 'package names that you want to install'), - PackageSelectionItem.new('without', 'name,name...', '', 'NONE', - 'package names that you do not want to install') - ] - end - private :multipackage_entries - - ALIASES = { - 'std-ruby' => 'librubyver', - 'stdruby' => 'librubyver', - 'rubylibdir' => 'librubyver', - 'archdir' => 'librubyverarch', - 'site-ruby-common' => 'siteruby', # For backward compatibility - 'site-ruby' => 'siterubyver', # For backward compatibility - 'bin-dir' => 'bindir', - 'bin-dir' => 'bindir', - 'rb-dir' => 'rbdir', - 'so-dir' => 'sodir', - 'data-dir' => 'datadir', - 'ruby-path' => 'rubypath', - 'ruby-prog' => 'rubyprog', - 'ruby' => 'rubyprog', - 'make-prog' => 'makeprog', - 'make' => 'makeprog' - } - - def fixup - ALIASES.each do |ali, name| - @table[ali] = @table[name] - end - @items.freeze - @table.freeze - @options_re = /\A--(#{@table.keys.join('|')})(?:=(.*))?\z/ - end - - def parse_opt(opt) - m = @options_re.match(opt) or setup_rb_error "config: unknown option #{opt}" - m.to_a[1,2] - end - - def dllext - @rbconfig['DLEXT'] - end - - def value_config?(name) - lookup(name).value? - end - - class Item - def initialize(name, template, default, desc) - @name = name.freeze - @template = template - @value = default - @default = default - @description = desc - end - - attr_reader :name - attr_reader :description - - attr_accessor :default - alias help_default default - - def help_opt - "--#{@name}=#{@template}" - end - - def value? - true - end - - def value - @value - end - - def resolve(table) - @value.gsub(%r<\$([^/]+)>) { table[$1] } - end - - def set(val) - @value = check(val) - end - - private - - def check(val) - setup_rb_error "config: --#{name} requires argument" unless val - val - end - end - - class BoolItem < Item - def config_type - 'bool' - end - - def help_opt - "--#{@name}" - end - - private - - def check(val) - return 'yes' unless val - case val - when /\Ay(es)?\z/i, /\At(rue)?\z/i then 'yes' - when /\An(o)?\z/i, /\Af(alse)\z/i then 'no' - else - setup_rb_error "config: --#{@name} accepts only yes/no for argument" - end - end - end - - class PathItem < Item - def config_type - 'path' - end - - private - - def check(path) - setup_rb_error "config: --#{@name} requires argument" unless path - path[0,1] == '$' ? path : File.expand_path(path) - end - end - - class ProgramItem < Item - def config_type - 'program' - end - end - - class SelectItem < Item - def initialize(name, selection, default, desc) - super - @ok = selection.split('/') - end - - def config_type - 'select' - end - - private - - def check(val) - unless @ok.include?(val.strip) - setup_rb_error "config: use --#{@name}=#{@template} (#{val})" - end - val.strip - end - end - - class ExecItem < Item - def initialize(name, selection, desc, &block) - super name, selection, nil, desc - @ok = selection.split('/') - @action = block - end - - def config_type - 'exec' - end - - def value? - false - end - - def resolve(table) - setup_rb_error "$#{name()} wrongly used as option value" - end - - undef set - - def evaluate(val, table) - v = val.strip.downcase - unless @ok.include?(v) - setup_rb_error "invalid option --#{@name}=#{val} (use #{@template})" - end - @action.call v, table - end - end - - class PackageSelectionItem < Item - def initialize(name, template, default, help_default, desc) - super name, template, default, desc - @help_default = help_default - end - - attr_reader :help_default - - def config_type - 'package' - end - - private - - def check(val) - unless File.dir?("packages/#{val}") - setup_rb_error "config: no such package: #{val}" - end - val - end - end - - class MetaConfigEnvironment - def initialize(config, installer) - @config = config - @installer = installer - end - - def config_names - @config.names - end - - def config?(name) - @config.key?(name) - end - - def bool_config?(name) - @config.lookup(name).config_type == 'bool' - end - - def path_config?(name) - @config.lookup(name).config_type == 'path' - end - - def value_config?(name) - @config.lookup(name).config_type != 'exec' - end - - def add_config(item) - @config.add item - end - - def add_bool_config(name, default, desc) - @config.add BoolItem.new(name, 'yes/no', default ? 'yes' : 'no', desc) - end - - def add_path_config(name, default, desc) - @config.add PathItem.new(name, 'path', default, desc) - end - - def set_config_default(name, default) - @config.lookup(name).default = default - end - - def remove_config(name) - @config.remove(name) - end - - # For only multipackage - def packages - raise '[setup.rb fatal] multi-package metaconfig API packages() called for single-package; contact application package vendor' unless @installer - @installer.packages - end - - # For only multipackage - def declare_packages(list) - raise '[setup.rb fatal] multi-package metaconfig API declare_packages() called for single-package; contact application package vendor' unless @installer - @installer.packages = list - end - end - -end # class ConfigTable - - -# This module requires: #verbose?, #no_harm? -module FileOperations - - def mkdir_p(dirname, prefix = nil) - dirname = prefix + File.expand_path(dirname) if prefix - $stderr.puts "mkdir -p #{dirname}" if verbose? - return if no_harm? - - # Does not check '/', it's too abnormal. - dirs = File.expand_path(dirname).split(%r<(?=/)>) - if /\A[a-z]:\z/i =~ dirs[0] - disk = dirs.shift - dirs[0] = disk + dirs[0] - end - dirs.each_index do |idx| - path = dirs[0..idx].join('') - Dir.mkdir path unless File.dir?(path) - end - end - - def rm_f(path) - $stderr.puts "rm -f #{path}" if verbose? - return if no_harm? - force_remove_file path - end - - def rm_rf(path) - $stderr.puts "rm -rf #{path}" if verbose? - return if no_harm? - remove_tree path - end - - def remove_tree(path) - if File.symlink?(path) - remove_file path - elsif File.dir?(path) - remove_tree0 path - else - force_remove_file path - end - end - - def remove_tree0(path) - Dir.foreach(path) do |ent| - next if ent == '.' - next if ent == '..' - entpath = "#{path}/#{ent}" - if File.symlink?(entpath) - remove_file entpath - elsif File.dir?(entpath) - remove_tree0 entpath - else - force_remove_file entpath - end - end - begin - Dir.rmdir path - rescue Errno::ENOTEMPTY - # directory may not be empty - end - end - - def move_file(src, dest) - force_remove_file dest - begin - File.rename src, dest - rescue - File.open(dest, 'wb') {|f| - f.write File.binread(src) - } - File.chmod File.stat(src).mode, dest - File.unlink src - end - end - - def force_remove_file(path) - begin - remove_file path - rescue - end - end - - def remove_file(path) - File.chmod 0777, path - File.unlink path - end - - def install(from, dest, mode, prefix = nil) - $stderr.puts "install #{from} #{dest}" if verbose? - return if no_harm? - - realdest = prefix ? prefix + File.expand_path(dest) : dest - realdest = File.join(realdest, File.basename(from)) if File.dir?(realdest) - str = File.binread(from) - if diff?(str, realdest) - verbose_off { - rm_f realdest if File.exist?(realdest) - } - File.open(realdest, 'wb') {|f| - f.write str - } - File.chmod mode, realdest - - File.open("#{objdir_root()}/InstalledFiles", 'a') {|f| - if prefix - f.puts realdest.sub(prefix, '') - else - f.puts realdest - end - } - end - end - - def diff?(new_content, path) - return true unless File.exist?(path) - new_content != File.binread(path) - end - - def command(*args) - $stderr.puts args.join(' ') if verbose? - system(*args) or raise RuntimeError, - "system(#{args.map{|a| a.inspect }.join(' ')}) failed" - end - - def ruby(*args) - command config('rubyprog'), *args - end - - def make(task = nil) - command(*[config('makeprog'), task].compact) - end - - def extdir?(dir) - File.exist?("#{dir}/MANIFEST") or File.exist?("#{dir}/extconf.rb") - end - - def files_of(dir) - Dir.open(dir) {|d| - return d.select {|ent| File.file?("#{dir}/#{ent}") } - } - end - - DIR_REJECT = %w( . .. CVS SCCS RCS CVS.adm .svn ) - - def directories_of(dir) - Dir.open(dir) {|d| - return d.select {|ent| File.dir?("#{dir}/#{ent}") } - DIR_REJECT - } - end - -end - - -# This module requires: #srcdir_root, #objdir_root, #relpath -module HookScriptAPI - - def get_config(key) - @config[key] - end - - alias config get_config - - # obsolete: use metaconfig to change configuration - def set_config(key, val) - @config[key] = val - end - - # - # srcdir/objdir (works only in the package directory) - # - - def curr_srcdir - "#{srcdir_root()}/#{relpath()}" - end - - def curr_objdir - "#{objdir_root()}/#{relpath()}" - end - - def srcfile(path) - "#{curr_srcdir()}/#{path}" - end - - def srcexist?(path) - File.exist?(srcfile(path)) - end - - def srcdirectory?(path) - File.dir?(srcfile(path)) - end - - def srcfile?(path) - File.file?(srcfile(path)) - end - - def srcentries(path = '.') - Dir.open("#{curr_srcdir()}/#{path}") {|d| - return d.to_a - %w(. ..) - } - end - - def srcfiles(path = '.') - srcentries(path).select {|fname| - File.file?(File.join(curr_srcdir(), path, fname)) - } - end - - def srcdirectories(path = '.') - srcentries(path).select {|fname| - File.dir?(File.join(curr_srcdir(), path, fname)) - } - end - -end - - -class ToplevelInstaller - - Version = '3.4.1' - Copyright = 'Copyright (c) 2000-2005 Minero Aoki' - - TASKS = [ - [ 'all', 'do config, setup, then install' ], - [ 'config', 'saves your configurations' ], - [ 'show', 'shows current configuration' ], - [ 'setup', 'compiles ruby extentions and others' ], - [ 'install', 'installs files' ], - [ 'test', 'run all tests in test/' ], - [ 'clean', "does `make clean' for each extention" ], - [ 'distclean',"does `make distclean' for each extention" ] - ] - - def ToplevelInstaller.invoke - config = ConfigTable.new(load_rbconfig()) - config.load_standard_entries - config.load_multipackage_entries if multipackage? - config.fixup - klass = (multipackage?() ? ToplevelInstallerMulti : ToplevelInstaller) - klass.new(File.dirname($0), config).invoke - end - - def ToplevelInstaller.multipackage? - File.dir?(File.dirname($0) + '/packages') - end - - def ToplevelInstaller.load_rbconfig - if arg = ARGV.detect {|arg| /\A--rbconfig=/ =~ arg } - ARGV.delete(arg) - load File.expand_path(arg.split(/=/, 2)[1]) - $".push 'rbconfig.rb' - else - require 'rbconfig' - end - ::RbConfig::CONFIG - end - - def initialize(ardir_root, config) - @ardir = File.expand_path(ardir_root) - @config = config - # cache - @valid_task_re = nil - end - - def config(key) - @config[key] - end - - def inspect - "#<#{self.class} #{__id__()}>" - end - - def invoke - run_metaconfigs - case task = parsearg_global() - when nil, 'all' - parsearg_config - init_installers - exec_config - exec_setup - exec_install - else - case task - when 'config', 'test' - ; - when 'clean', 'distclean' - @config.load_savefile if File.exist?(@config.savefile) - else - @config.load_savefile - end - __send__ "parsearg_#{task}" - init_installers - __send__ "exec_#{task}" - end - end - - def run_metaconfigs - @config.load_script "#{@ardir}/metaconfig" - end - - def init_installers - @installer = Installer.new(@config, @ardir, File.expand_path('.')) - end - - # - # Hook Script API bases - # - - def srcdir_root - @ardir - end - - def objdir_root - '.' - end - - def relpath - '.' - end - - # - # Option Parsing - # - - def parsearg_global - while arg = ARGV.shift - case arg - when /\A\w+\z/ - setup_rb_error "invalid task: #{arg}" unless valid_task?(arg) - return arg - when '-q', '--quiet' - @config.verbose = false - when '--verbose' - @config.verbose = true - when '--help' - print_usage $stdout - exit 0 - when '--version' - puts "#{File.basename($0)} version #{Version}" - exit 0 - when '--copyright' - puts Copyright - exit 0 - else - setup_rb_error "unknown global option '#{arg}'" - end - end - nil - end - - def valid_task?(t) - valid_task_re() =~ t - end - - def valid_task_re - @valid_task_re ||= /\A(?:#{TASKS.map {|task,desc| task }.join('|')})\z/ - end - - def parsearg_no_options - unless ARGV.empty? - task = caller(0).first.slice(%r<`parsearg_(\w+)'>, 1) - setup_rb_error "#{task}: unknown options: #{ARGV.join(' ')}" - end - end - - alias parsearg_show parsearg_no_options - alias parsearg_setup parsearg_no_options - alias parsearg_test parsearg_no_options - alias parsearg_clean parsearg_no_options - alias parsearg_distclean parsearg_no_options - - def parsearg_config - evalopt = [] - set = [] - @config.config_opt = [] - while i = ARGV.shift - if /\A--?\z/ =~ i - @config.config_opt = ARGV.dup - break - end - name, value = *@config.parse_opt(i) - if @config.value_config?(name) - @config[name] = value - else - evalopt.push [name, value] - end - set.push name - end - evalopt.each do |name, value| - @config.lookup(name).evaluate value, @config - end - # Check if configuration is valid - set.each do |n| - @config[n] if @config.value_config?(n) - end - end - - def parsearg_install - @config.no_harm = false - @config.install_prefix = '' - while a = ARGV.shift - case a - when '--no-harm' - @config.no_harm = true - when /\A--prefix=/ - path = a.split(/=/, 2)[1] - path = File.expand_path(path) unless path[0,1] == '/' - @config.install_prefix = path - else - setup_rb_error "install: unknown option #{a}" - end - end - end - - def print_usage(out) - out.puts 'Typical Installation Procedure:' - out.puts " $ ruby #{File.basename $0} config" - out.puts " $ ruby #{File.basename $0} setup" - out.puts " # ruby #{File.basename $0} install (may require root privilege)" - out.puts - out.puts 'Detailed Usage:' - out.puts " ruby #{File.basename $0} " - out.puts " ruby #{File.basename $0} [] []" - - fmt = " %-24s %s\n" - out.puts - out.puts 'Global options:' - out.printf fmt, '-q,--quiet', 'suppress message outputs' - out.printf fmt, ' --verbose', 'output messages verbosely' - out.printf fmt, ' --help', 'print this message' - out.printf fmt, ' --version', 'print version and quit' - out.printf fmt, ' --copyright', 'print copyright and quit' - out.puts - out.puts 'Tasks:' - TASKS.each do |name, desc| - out.printf fmt, name, desc - end - - fmt = " %-24s %s [%s]\n" - out.puts - out.puts 'Options for CONFIG or ALL:' - @config.each do |item| - out.printf fmt, item.help_opt, item.description, item.help_default - end - out.printf fmt, '--rbconfig=path', 'rbconfig.rb to load',"running ruby's" - out.puts - out.puts 'Options for INSTALL:' - out.printf fmt, '--no-harm', 'only display what to do if given', 'off' - out.printf fmt, '--prefix=path', 'install path prefix', '' - out.puts - end - - # - # Task Handlers - # - - def exec_config - @installer.exec_config - @config.save # must be final - end - - def exec_setup - @installer.exec_setup - end - - def exec_install - @installer.exec_install - end - - def exec_test - @installer.exec_test - end - - def exec_show - @config.each do |i| - printf "%-20s %s\n", i.name, i.value if i.value? - end - end - - def exec_clean - @installer.exec_clean - end - - def exec_distclean - @installer.exec_distclean - end - -end # class ToplevelInstaller - - -class ToplevelInstallerMulti < ToplevelInstaller - - include FileOperations - - def initialize(ardir_root, config) - super - @packages = directories_of("#{@ardir}/packages") - raise 'no package exists' if @packages.empty? - @root_installer = Installer.new(@config, @ardir, File.expand_path('.')) - end - - def run_metaconfigs - @config.load_script "#{@ardir}/metaconfig", self - @packages.each do |name| - @config.load_script "#{@ardir}/packages/#{name}/metaconfig" - end - end - - attr_reader :packages - - def packages=(list) - raise 'package list is empty' if list.empty? - list.each do |name| - raise "directory packages/#{name} does not exist"\ - unless File.dir?("#{@ardir}/packages/#{name}") - end - @packages = list - end - - def init_installers - @installers = {} - @packages.each do |pack| - @installers[pack] = Installer.new(@config, - "#{@ardir}/packages/#{pack}", - "packages/#{pack}") - end - with = extract_selection(config('with')) - without = extract_selection(config('without')) - @selected = @installers.keys.select {|name| - (with.empty? or with.include?(name)) \ - and not without.include?(name) - } - end - - def extract_selection(list) - a = list.split(/,/) - a.each do |name| - setup_rb_error "no such package: #{name}" unless @installers.key?(name) - end - a - end - - def print_usage(f) - super - f.puts 'Inluded packages:' - f.puts ' ' + @packages.sort.join(' ') - f.puts - end - - # - # Task Handlers - # - - def exec_config - run_hook 'pre-config' - each_selected_installers {|inst| inst.exec_config } - run_hook 'post-config' - @config.save # must be final - end - - def exec_setup - run_hook 'pre-setup' - each_selected_installers {|inst| inst.exec_setup } - run_hook 'post-setup' - end - - def exec_install - run_hook 'pre-install' - each_selected_installers {|inst| inst.exec_install } - run_hook 'post-install' - end - - def exec_test - run_hook 'pre-test' - each_selected_installers {|inst| inst.exec_test } - run_hook 'post-test' - end - - def exec_clean - rm_f @config.savefile - run_hook 'pre-clean' - each_selected_installers {|inst| inst.exec_clean } - run_hook 'post-clean' - end - - def exec_distclean - rm_f @config.savefile - run_hook 'pre-distclean' - each_selected_installers {|inst| inst.exec_distclean } - run_hook 'post-distclean' - end - - # - # lib - # - - def each_selected_installers - Dir.mkdir 'packages' unless File.dir?('packages') - @selected.each do |pack| - $stderr.puts "Processing the package `#{pack}' ..." if verbose? - Dir.mkdir "packages/#{pack}" unless File.dir?("packages/#{pack}") - Dir.chdir "packages/#{pack}" - yield @installers[pack] - Dir.chdir '../..' - end - end - - def run_hook(id) - @root_installer.run_hook id - end - - # module FileOperations requires this - def verbose? - @config.verbose? - end - - # module FileOperations requires this - def no_harm? - @config.no_harm? - end - -end # class ToplevelInstallerMulti - - -class Installer - - FILETYPES = %w( bin lib ext data conf man ) - - include FileOperations - include HookScriptAPI - - def initialize(config, srcroot, objroot) - @config = config - @srcdir = File.expand_path(srcroot) - @objdir = File.expand_path(objroot) - @currdir = '.' - end - - def inspect - "#<#{self.class} #{File.basename(@srcdir)}>" - end - - def noop(rel) - end - - # - # Hook Script API base methods - # - - def srcdir_root - @srcdir - end - - def objdir_root - @objdir - end - - def relpath - @currdir - end - - # - # Config Access - # - - # module FileOperations requires this - def verbose? - @config.verbose? - end - - # module FileOperations requires this - def no_harm? - @config.no_harm? - end - - def verbose_off - begin - save, @config.verbose = @config.verbose?, false - yield - ensure - @config.verbose = save - end - end - - # - # TASK config - # - - def exec_config - exec_task_traverse 'config' - end - - alias config_dir_bin noop - alias config_dir_lib noop - - def config_dir_ext(rel) - extconf if extdir?(curr_srcdir()) - end - - alias config_dir_data noop - alias config_dir_conf noop - alias config_dir_man noop - - def extconf - ruby "#{curr_srcdir()}/extconf.rb", *@config.config_opt - end - - # - # TASK setup - # - - def exec_setup - exec_task_traverse 'setup' - end - - def setup_dir_bin(rel) - files_of(curr_srcdir()).each do |fname| - update_shebang_line "#{curr_srcdir()}/#{fname}" - end - end - - alias setup_dir_lib noop - - def setup_dir_ext(rel) - make if extdir?(curr_srcdir()) - end - - alias setup_dir_data noop - alias setup_dir_conf noop - alias setup_dir_man noop - - def update_shebang_line(path) - return if no_harm? - return if config('shebang') == 'never' - old = Shebang.load(path) - if old - $stderr.puts "warning: #{path}: Shebang line includes too many args. It is not portable and your program may not work." if old.args.size > 1 - new = new_shebang(old) - return if new.to_s == old.to_s - else - return unless config('shebang') == 'all' - new = Shebang.new(config('rubypath')) - end - $stderr.puts "updating shebang: #{File.basename(path)}" if verbose? - open_atomic_writer(path) {|output| - File.open(path, 'rb') {|f| - f.gets if old # discard - output.puts new.to_s - output.print f.read - } - } - end - - def new_shebang(old) - if /\Aruby/ =~ File.basename(old.cmd) - Shebang.new(config('rubypath'), old.args) - elsif File.basename(old.cmd) == 'env' and old.args.first == 'ruby' - Shebang.new(config('rubypath'), old.args[1..-1]) - else - return old unless config('shebang') == 'all' - Shebang.new(config('rubypath')) - end - end - - def open_atomic_writer(path, &block) - tmpfile = File.basename(path) + '.tmp' - begin - File.open(tmpfile, 'wb', &block) - File.rename tmpfile, File.basename(path) - ensure - File.unlink tmpfile if File.exist?(tmpfile) - end - end - - class Shebang - def Shebang.load(path) - line = nil - File.open(path) {|f| - line = f.gets - } - return nil unless /\A#!/ =~ line - parse(line) - end - - def Shebang.parse(line) - cmd, *args = *line.strip.sub(/\A\#!/, '').split(' ') - new(cmd, args) - end - - def initialize(cmd, args = []) - @cmd = cmd - @args = args - end - - attr_reader :cmd - attr_reader :args - - def to_s - "#! #{@cmd}" + (@args.empty? ? '' : " #{@args.join(' ')}") - end - end - - # - # TASK install - # - - def exec_install - rm_f 'InstalledFiles' - exec_task_traverse 'install' - end - - def install_dir_bin(rel) - install_files targetfiles(), "#{config('bindir')}/#{rel}", 0755 - end - - def install_dir_lib(rel) - install_files libfiles(), "#{config('rbdir')}/#{rel}", 0644 - end - - def install_dir_ext(rel) - return unless extdir?(curr_srcdir()) - install_files rubyextentions('.'), - "#{config('sodir')}/#{File.dirname(rel)}", - 0555 - end - - def install_dir_data(rel) - install_files targetfiles(), "#{config('datadir')}/#{rel}", 0644 - end - - def install_dir_conf(rel) - # FIXME: should not remove current config files - # (rename previous file to .old/.org) - install_files targetfiles(), "#{config('sysconfdir')}/#{rel}", 0644 - end - - def install_dir_man(rel) - install_files targetfiles(), "#{config('mandir')}/#{rel}", 0644 - end - - def install_files(list, dest, mode) - mkdir_p dest, @config.install_prefix - list.each do |fname| - install fname, dest, mode, @config.install_prefix - end - end - - def libfiles - glob_reject(%w(*.y *.output), targetfiles()) - end - - def rubyextentions(dir) - ents = glob_select("*.#{@config.dllext}", targetfiles()) - if ents.empty? - setup_rb_error "no ruby extention exists: 'ruby #{$0} setup' first" - end - ents - end - - def targetfiles - mapdir(existfiles() - hookfiles()) - end - - def mapdir(ents) - ents.map {|ent| - if File.exist?(ent) - then ent # objdir - else "#{curr_srcdir()}/#{ent}" # srcdir - end - } - end - - # picked up many entries from cvs-1.11.1/src/ignore.c - JUNK_FILES = %w( - core RCSLOG tags TAGS .make.state - .nse_depinfo #* .#* cvslog.* ,* .del-* *.olb - *~ *.old *.bak *.BAK *.orig *.rej _$* *$ - - *.org *.in .* - ) - - def existfiles - glob_reject(JUNK_FILES, (files_of(curr_srcdir()) | files_of('.'))) - end - - def hookfiles - %w( pre-%s post-%s pre-%s.rb post-%s.rb ).map {|fmt| - %w( config setup install clean ).map {|t| sprintf(fmt, t) } - }.flatten - end - - def glob_select(pat, ents) - re = globs2re([pat]) - ents.select {|ent| re =~ ent } - end - - def glob_reject(pats, ents) - re = globs2re(pats) - ents.reject {|ent| re =~ ent } - end - - GLOB2REGEX = { - '.' => '\.', - '$' => '\$', - '#' => '\#', - '*' => '.*' - } - - def globs2re(pats) - /\A(?:#{ - pats.map {|pat| pat.gsub(/[\.\$\#\*]/) {|ch| GLOB2REGEX[ch] } }.join('|') - })\z/ - end - - # - # TASK test - # - - TESTDIR = 'test' - - def exec_test - unless File.directory?('test') - $stderr.puts 'no test in this package' if verbose? - return - end - $stderr.puts 'Running tests...' if verbose? - begin - require 'test/unit' - rescue LoadError - setup_rb_error 'test/unit cannot loaded. You need Ruby 1.8 or later to invoke this task.' - end - runner = Test::Unit::AutoRunner.new(true) - runner.to_run << TESTDIR - runner.run - end - - # - # TASK clean - # - - def exec_clean - exec_task_traverse 'clean' - rm_f @config.savefile - rm_f 'InstalledFiles' - end - - alias clean_dir_bin noop - alias clean_dir_lib noop - alias clean_dir_data noop - alias clean_dir_conf noop - alias clean_dir_man noop - - def clean_dir_ext(rel) - return unless extdir?(curr_srcdir()) - make 'clean' if File.file?('Makefile') - end - - # - # TASK distclean - # - - def exec_distclean - exec_task_traverse 'distclean' - rm_f @config.savefile - rm_f 'InstalledFiles' - end - - alias distclean_dir_bin noop - alias distclean_dir_lib noop - - def distclean_dir_ext(rel) - return unless extdir?(curr_srcdir()) - make 'distclean' if File.file?('Makefile') - end - - alias distclean_dir_data noop - alias distclean_dir_conf noop - alias distclean_dir_man noop - - # - # Traversing - # - - def exec_task_traverse(task) - run_hook "pre-#{task}" - FILETYPES.each do |type| - if type == 'ext' and config('without-ext') == 'yes' - $stderr.puts 'skipping ext/* by user option' if verbose? - next - end - traverse task, type, "#{task}_dir_#{type}" - end - run_hook "post-#{task}" - end - - def traverse(task, rel, mid) - dive_into(rel) { - run_hook "pre-#{task}" - __send__ mid, rel.sub(%r[\A.*?(?:/|\z)], '') - directories_of(curr_srcdir()).each do |d| - traverse task, "#{rel}/#{d}", mid - end - run_hook "post-#{task}" - } - end - - def dive_into(rel) - return unless File.dir?("#{@srcdir}/#{rel}") - - dir = File.basename(rel) - Dir.mkdir dir unless File.dir?(dir) - prevdir = Dir.pwd - Dir.chdir dir - $stderr.puts '---> ' + rel if verbose? - @currdir = rel - yield - Dir.chdir prevdir - $stderr.puts '<--- ' + rel if verbose? - @currdir = File.dirname(rel) - end - - def run_hook(id) - path = [ "#{curr_srcdir()}/#{id}", - "#{curr_srcdir()}/#{id}.rb" ].detect {|cand| File.file?(cand) } - return unless path - begin - instance_eval File.read(path), path, 1 - rescue - raise if $DEBUG - setup_rb_error "hook #{path} failed:\n" + $!.message - end - end - -end # class Installer - - -class SetupError < StandardError; end - -def setup_rb_error(msg) - raise SetupError, msg -end - -if $0 == __FILE__ - begin - ToplevelInstaller.invoke - rescue SetupError - raise if $DEBUG - $stderr.puts $!.message - $stderr.puts "Try 'ruby #{$0} --help' for detailed usage." - exit 1 - end -end diff --git a/bundle/ruby/3.2.0/gems/rb-readline-0.5.5/test/support/filesystem_completion_helper.rb b/bundle/ruby/3.2.0/gems/rb-readline-0.5.5/test/support/filesystem_completion_helper.rb deleted file mode 100644 index 7dd7e136..00000000 --- a/bundle/ruby/3.2.0/gems/rb-readline-0.5.5/test/support/filesystem_completion_helper.rb +++ /dev/null @@ -1,53 +0,0 @@ -require "fileutils" - -module FilesystemCompletionHelper - SEP = File::SEPARATOR - COMP_TEST_DIR = "comp_test#{SEP}" - SUB_DIR = "#{COMP_TEST_DIR}a_sub_dir#{SEP}" - SUB_SUB_DIR = "#{SUB_DIR}another_sub_dir#{SEP}" - DIR_WITH_SPACES = "#{COMP_TEST_DIR}dir with spaces#{SEP}" - SUB_DIR_WITH_SPACES = "#{DIR_WITH_SPACES}sub dir with spaces#{SEP}" - - # This creates: - # - # comp_test/ - # abc - # aaa - # a_sub_dir/ - # abc - # aaa - # another_sub_dir/ - # aaa - # dir with spaces/ - # filename with spaces - # sub dir with spaces/ - # another filename with spaces - def setup_filesystem_for_completion - FileUtils.mkdir_p("#{SUB_SUB_DIR}") - FileUtils.mkdir_p("#{SUB_DIR_WITH_SPACES}") - @comp_test_dir = Dir.new COMP_TEST_DIR - @sub_dir = Dir.new SUB_DIR - @sub_sub_dir = Dir.new SUB_SUB_DIR - @dir_with_spaces = Dir.new DIR_WITH_SPACES - @sub_dir_with_spaces = Dir.new SUB_DIR_WITH_SPACES - - FileUtils.touch("#{@comp_test_dir.path}abc") - FileUtils.touch("#{@comp_test_dir.path}aaa") - FileUtils.touch("#{@sub_dir.path}abc") - FileUtils.touch("#{@sub_dir.path}aaa") - FileUtils.touch("#{@sub_sub_dir.path}aaa") - FileUtils.touch("#{@dir_with_spaces.path}filename with spaces") - FileUtils.touch("#{@sub_dir_with_spaces.path}another filename with spaces") - - # The previous Dir.new calls seem to cache the dir entries on Windows. - @comp_test_dir = Dir.new COMP_TEST_DIR - @sub_dir = Dir.new SUB_DIR - @sub_sub_dir = Dir.new SUB_SUB_DIR - @sub_dir_with_spaces = Dir.new SUB_DIR_WITH_SPACES - @dir_with_spaces = Dir.new DIR_WITH_SPACES - end - - def teardown_filesystem_after_completion - FileUtils.rm_r(COMP_TEST_DIR) - end -end diff --git a/bundle/ruby/3.2.0/gems/rb-readline-0.5.5/test/test_completion.rb b/bundle/ruby/3.2.0/gems/rb-readline-0.5.5/test/test_completion.rb deleted file mode 100644 index 69707b3d..00000000 --- a/bundle/ruby/3.2.0/gems/rb-readline-0.5.5/test/test_completion.rb +++ /dev/null @@ -1,100 +0,0 @@ -require "minitest/autorun" -require "readline" - -require 'timeout' -require "support/filesystem_completion_helper" - -class TestCompletion < Minitest::Test - include RbReadline - include FilesystemCompletionHelper - - def filename_quoting_function(filename, mtype, quote_char) - quoted_filename = filename.dup - @rl_filename_quote_characters.split("").each do |c| - quoted_filename.gsub!(c, "\\#{c}") - end - quoted_filename - end - - def filename_dequoting_function(filename, quote_char = "\\") - filename.delete quote_char - end - - def setup - @rl_completion_word_break_hook, @rl_char_is_quoted_p = nil - @rl_basic_quote_characters, @rl_special_prefixes = nil - @rl_completer_word_break_characters = Readline.basic_word_break_characters - @rl_completer_quote_characters = "\\" - @rl_completion_quote_character = "\\" - @rl_filename_quote_characters = " " - @rl_byte_oriented = true - @rl_filename_quoting_desired = true - @rl_filename_completion_desired = true - @rl_complete_with_tilde_expansion = true - @_rl_match_hidden_files = false - @rl_completion_found_quote = false - @_rl_completion_case_fold = false - @directory = nil - - @rl_filename_quoting_function = :filename_quoting_function - @rl_filename_dequoting_function = :filename_dequoting_function - @rl_directory_completion_hook = nil - - setup_filesystem_for_completion - end - - def teardown - teardown_filesystem_after_completion - end - - def set_line_buffer(text) - @rl_line_buffer = text - @rl_point = @rl_line_buffer.size - @rl_line_buffer << 0.chr - end - - def test__find_completion_word_doesnt_hang_on_completer_quote_character - set_line_buffer "#{@dir_with_spaces.path}filename\\ w" - - Timeout::timeout(3) do - assert_equal([ "\000", true, "\000" ], _rl_find_completion_word) - end - end - - def test__find_completion_word_without_quote_characters - set_line_buffer "#{@comp_test_dir.path}a" - assert_equal([ "\000", false, "\000" ], _rl_find_completion_word) - end - - def test_make_quoted_replacement_calls_filename_quoting_function - assert_equal "dir/with\\ space", make_quoted_replacement("dir/with space", RbReadline::SINGLE_MATCH, 0.chr) - end - - def test_rl_filname_completion_function_calls_dequoting_function - @rl_completion_found_quote = true - dir = filename_quoting_function(@dir_with_spaces.path, nil, 0.chr) - - # rl_filename_completion_function is called with an increasing state in - # order to iterate through directory entries. - - entries = [ "#{@dir_with_spaces.path}sub dir with spaces", "#{@dir_with_spaces.path}filename with spaces" ] - - assert entries.include?(rl_filename_completion_function(dir, 0)) - assert entries.include?(rl_filename_completion_function(dir, 1)) - assert_nil rl_filename_completion_function(dir, 2) - ensure - @rl_completion_found_quote = false - end - - def test_completing_path_starting_dot_slash - assert_equal "./#{COMP_TEST_DIR.chop}", rl_filename_completion_function("./#{COMP_TEST_DIR.chop}", 0) - end - - def test_completing_non_existant_directory - assert_nil rl_filename_completion_function("/this/dir/does/not/exist", 0) - end - - def test_completing_a_file_as_a_directory - assert_nil rl_filename_completion_function("#{File.expand_path(__FILE__)}/", 0) - end -end diff --git a/bundle/ruby/3.2.0/gems/rb-readline-0.5.5/test/test_filename_completion_proc.rb b/bundle/ruby/3.2.0/gems/rb-readline-0.5.5/test/test_filename_completion_proc.rb deleted file mode 100644 index 7f358439..00000000 --- a/bundle/ruby/3.2.0/gems/rb-readline-0.5.5/test/test_filename_completion_proc.rb +++ /dev/null @@ -1,88 +0,0 @@ -require 'minitest/autorun' -require 'readline' - -require 'fileutils' -require "rbconfig" -require "support/filesystem_completion_helper" - -class TestFilenameCompletionProc < Minitest::Test - include FilesystemCompletionHelper - - def setup - FileUtils.mkdir_p("#{SUB_SUB_DIR}") - FileUtils.mkdir_p("#{SUB_DIR_WITH_SPACES}") - @comp_test_dir = Dir.new COMP_TEST_DIR - @sub_dir = Dir.new SUB_DIR - @sub_sub_dir = Dir.new SUB_SUB_DIR - @dir_with_spaces = Dir.new DIR_WITH_SPACES - @sub_dir_with_spaces = Dir.new SUB_DIR_WITH_SPACES - - FileUtils.touch("#{@comp_test_dir.path}abc") - FileUtils.touch("#{@comp_test_dir.path}aaa") - FileUtils.touch("#{@sub_dir.path}abc") - FileUtils.touch("#{@sub_dir.path}aaa") - FileUtils.touch("#{@sub_sub_dir.path}aaa") - FileUtils.touch("#{@dir_with_spaces.path}filename with spaces") - FileUtils.touch("#{@sub_dir_with_spaces.path}another filename with spaces") - - # The previous Dir.new calls seem to cache the dir entries on Windows. - @comp_test_dir = Dir.new COMP_TEST_DIR - @sub_dir = Dir.new SUB_DIR - @sub_sub_dir = Dir.new SUB_SUB_DIR - @dir_with_spaces = Dir.new DIR_WITH_SPACES - @sub_dir_with_spaces = Dir.new SUB_DIR_WITH_SPACES - setup_filesystem_for_completion - end - - def teardown - teardown_filesystem_after_completion - end - - def test_listing_files_in_cwd - Dir.chdir(COMP_TEST_DIR) do - entries = Dir.entries(".").select { |e| e[0,1] == "a" } - assert_equal entries, Readline::FILENAME_COMPLETION_PROC.call("a") - end - end - - def test_list_files_in_sub_directories - entries = @sub_dir.entries.select { |e| e[0,1] == "a" } - entries.map! { |e| "#{@sub_dir.path}#{e}" } - assert_equal entries, Readline::FILENAME_COMPLETION_PROC.call("#{@sub_dir.path}a") - - entries = @sub_sub_dir.entries - %w( . .. ) - entries.map! { |e| "#{@sub_sub_dir.path}#{e}" } - assert_equal entries, Readline::FILENAME_COMPLETION_PROC.call("#{@sub_sub_dir.path}") - end - - def test_list_files_and_directories_with_spaces - entries = @comp_test_dir.entries.select { |e| e[0,1] == "d" } - entries.map! { |e| @comp_test_dir.path + e } - assert_equal entries, Readline::FILENAME_COMPLETION_PROC.call("#{@comp_test_dir.path}d") - - entries = @dir_with_spaces.entries - %w( . .. ) - entries.map! { |e| @dir_with_spaces.path + e } - assert_equal entries, Readline::FILENAME_COMPLETION_PROC.call("#{@dir_with_spaces.path}") - end - - def test_list_files_in_current_directory - assert_equal((Dir.entries(".") - %w( . .. )).sort, Readline::FILENAME_COMPLETION_PROC.call("").sort) - end - - def test_listing_files_with_no_read_access - FileUtils.mkdir("test_no_access") - FileUtils.touch("test_no_access/123") - - skip "chmod is noop in Windows" if windows? - - FileUtils.chmod(0333, "test_no_access") - assert_nil Readline::FILENAME_COMPLETION_PROC.call("test_no_access/") - ensure - FileUtils.chmod(0775, "test_no_access") - FileUtils.rm_r("test_no_access") - end - - def windows? - RbConfig::CONFIG["host_os"] =~ /mingw|mswin/ - end -end diff --git a/bundle/ruby/3.2.0/gems/rb-readline-0.5.5/test/test_history.rb b/bundle/ruby/3.2.0/gems/rb-readline-0.5.5/test/test_history.rb deleted file mode 100644 index 50a446d7..00000000 --- a/bundle/ruby/3.2.0/gems/rb-readline-0.5.5/test/test_history.rb +++ /dev/null @@ -1,29 +0,0 @@ -require "minitest/autorun" -require "readline" - -class TestHistory < Minitest::Test - - # RbReadline::HISTORY_WORD_DELIMITERS.inspect - # => " \t\n;&()|<>" - # RbReadline::HISTORY_QUOTE_CHARACTERS = "\"'`" - # => "\"'`" - def test_history_arg_extract - assert_raises(RuntimeError) { RbReadline.history_arg_extract("!", "$", "one two three") } - assert_raises(RuntimeError) { RbReadline.history_arg_extract("$", "!", "one two three") } - - assert_equal "one", RbReadline.history_arg_extract("$", "$", "one") - assert_equal "three", RbReadline.history_arg_extract("$", "$", "one two three") - assert_equal "two\\ three", RbReadline.history_arg_extract("$", "$", "one two\\ three") - assert_equal "three", RbReadline.history_arg_extract("$", "$", "one two;three") - assert_equal "two\\;three", RbReadline.history_arg_extract("$", "$", "one two\\;three") - - assert_equal "'two three'", RbReadline.history_arg_extract("$", "$", "one 'two three'") - assert_equal "`two three`", RbReadline.history_arg_extract("$", "$", "one `two three`") - assert_equal "three\\'", RbReadline.history_arg_extract("$", "$", "one \\'two three\\'") - assert_equal "`one`", RbReadline.history_arg_extract("$", "$", "`one`") - - assert_equal "three'", RbReadline.history_arg_extract("$", "$", "one two three'") - assert_equal "three", RbReadline.history_arg_extract("$", "$", "one two' three") - assert_equal "'two three '", RbReadline.history_arg_extract("$", "$", "one 'two three '") - end -end diff --git a/bundle/ruby/3.2.0/gems/rb-readline-0.5.5/test/test_rbreadline.rb b/bundle/ruby/3.2.0/gems/rb-readline-0.5.5/test/test_rbreadline.rb deleted file mode 100644 index af8c413e..00000000 --- a/bundle/ruby/3.2.0/gems/rb-readline-0.5.5/test/test_rbreadline.rb +++ /dev/null @@ -1,23 +0,0 @@ -require 'minitest/autorun' -require 'rbreadline' - -class TestRbReadline < Minitest::Test - def test_versions - assert_equal('5.2', RbReadline::RL_LIBRARY_VERSION) - assert_equal(0x0502, RbReadline::RL_READLINE_VERSION) - end - - def test_rl_adjust_point - encoding_name = RbReadline.instance_variable_get(:@encoding_name) - RbReadline.instance_variable_set(:@encoding_name, Encoding.find('UTF-8')) - - assert_equal(0, RbReadline._rl_adjust_point("a".force_encoding('ASCII-8BIT'), 0)) - assert_equal(0, RbReadline._rl_adjust_point("a".force_encoding('ASCII-8BIT'), 1)) - assert_equal(0, RbReadline._rl_adjust_point(("a" * 40).force_encoding('ASCII-8BIT'), 0)) - assert_equal(0, RbReadline._rl_adjust_point(("a" * 40).force_encoding('ASCII-8BIT'), 40)) - assert_equal(2, RbReadline._rl_adjust_point(("\u3042" * 10).force_encoding('ASCII-8BIT'), 1)) - assert_equal(1, RbReadline._rl_adjust_point(("\u3042" * 15).force_encoding('ASCII-8BIT'), 38)) - ensure - RbReadline.instance_variable_set(:@encoding_name, encoding_name) - end if defined?(Encoding) -end diff --git a/bundle/ruby/3.2.0/gems/rb-readline-0.5.5/test/test_readline.rb b/bundle/ruby/3.2.0/gems/rb-readline-0.5.5/test/test_readline.rb deleted file mode 100644 index e9006c2e..00000000 --- a/bundle/ruby/3.2.0/gems/rb-readline-0.5.5/test/test_readline.rb +++ /dev/null @@ -1,221 +0,0 @@ -require 'minitest/autorun' -require 'readline' - -class TestReadline < Minitest::Test - def setup - @proc = proc{ |s| ['alpha', 'beta'].grep( /^#{Regexp.escape(s)}/) } - end - - def test_version - assert_equal('5.2', Readline::VERSION) - end - - def test_readline_basic - assert_respond_to(Readline, :readline) - end - - def test_readline_with_default_parameters_does_not_error - thread = Thread.new { Readline.readline } - sleep 0.1 - assert thread.alive? - ensure - thread.kill - end - - def test_input_basic - assert_respond_to(Readline, :input=) - end - - def test_input - Readline.input = $stdin - assert_equal $stdin, RbReadline.rl_instream - end - - def test_output_basic - assert_respond_to(Readline, :output=) - end - - def test_output - Readline.output = $stdout - assert_equal $stdout, RbReadline.rl_outstream - end - - def test_completion_proc_get_basic - assert_respond_to(Readline, :completion_proc) - end - - def test_completion_proc_set_basic - assert_respond_to(Readline, :completion_proc=) - end - - def test_completion_proc - Readline.completion_proc = @proc - assert_equal @proc, Readline.completion_proc - end - - def test_completion_case_fold_get_basic - assert_respond_to(Readline, :completion_case_fold) - end - - def test_completion_case_fold_default - assert_equal(false, Readline.completion_case_fold) # default - end - - def test_completion_case_fold_set_basic - assert_respond_to(Readline, :completion_case_fold=) - end - - def test_completion_case_fold_changed - Readline.completion_case_fold = false - refute Readline.completion_case_fold - end - - def test_completion_proc_expected_errors - assert_raises(ArgumentError) { Readline.completion_proc = 1 } - assert_raises(ArgumentError) { Readline.completion_proc = 'a' } - end - - def test_vi_editing_mode_basic - assert_respond_to(Readline, :vi_editing_mode) - end - - def test_emacs_editing_mode_basic - assert_respond_to(Readline, :emacs_editing_mode) - end - - def test_completion_append_character_get_basic - assert_respond_to(Readline, :completion_append_character) - end - - def test_completion_append_character_get - assert_equal(' ', Readline.completion_append_character) # default - end - - def test_completion_append_character_set_basic - assert_respond_to(Readline, :completion_append_character=) - end - - def test_completion_append_character_set - assert_equal " ", Readline.completion_append_character - end - - def test_completion_append_character - orig_char = Readline.completion_append_character - begin - [ - [ "x", "x" ], - [ "xyx", "x" ], - [ " ", " " ], - [ "\t", "\t" ], - [ "", nil ], - ].each do |data, expected| - Readline.completion_append_character = data - assert_equal(expected, Readline.completion_append_character, - "failed case: [#{data.inspect}, #{expected.inspect}]") - end - ensure - Readline.completion_append_character = orig_char - end - end - - def test_basic_word_break_characters_get_basic - assert_respond_to(Readline, :basic_word_break_characters) - end - - def test_basic_word_break_characters_get - assert_equal(" \t\n\"\\'`@$><=|&{(", Readline.basic_word_break_characters) - end - - def test_basic_word_break_characters_set_basic - assert_respond_to(Readline, :basic_word_break_characters=) - end - - def test_basic_word_break_characters_set - chars = " \t\n\"\\'`@$><=|&{(" - Readline.basic_word_break_characters = chars - assert_equal chars, Readline.basic_word_break_characters - end - - def test_basic_quote_characters_get_basic - assert_respond_to(Readline, :basic_quote_characters) - end - - def test_basic_quote_characters_get - assert_equal "\"'", Readline.basic_quote_characters - end - - def test_basic_quote_characters_set_basic - assert_respond_to(Readline, :basic_quote_characters=) - end - - def test_basic_quote_characters_set - chars = "\"'" - Readline.basic_quote_characters = chars - assert_equal chars, Readline.basic_quote_characters - end - - def test_some_character_methods - expecteds = [ " ", " .,|\t", "" ] - [ - :basic_word_break_characters, - :completer_word_break_characters, - :basic_quote_characters, - :completer_quote_characters, - :filename_quote_characters, - ].each do |method| - begin - saved = Readline.send(method) - expecteds.each do |e| - Readline.send("#{method}=".to_sym, e) - assert_equal(e, Readline.send(method), - "failed case #{e.inspect} for method #{method}") - end - ensure - Readline.send("#{method}=".to_sym, saved) if saved - end - end - end - - def test_attempted_comp_func_returns_nil_when_no_completion_proc_set - assert_equal nil, Readline.readline_attempted_completion_function("12", 0, 1) - end - - def test_attempted_comp_func_case_folding - Readline.completion_proc = Proc.new do |word| - %w( 123456 123abc abc123 ).grep(/^#{word}/i) - end - - Readline.completion_case_fold = true - - assert_equal [ "123", "123456", "123abc", nil ], Readline.readline_attempted_completion_function("123", 0, 3) - - assert_equal [ "123abc", nil, nil ], Readline.readline_attempted_completion_function("123A", 0, 3) - - ensure - Readline.completion_case_fold = false - Readline.module_eval do - @completion_proc = nil - end - end - - def test_attempted_comp_func_removes_replacement_from_possible_matches - Readline.completion_proc = Proc.new do |word| - %w( 123456 123abc abc123 ).grep(/^#{word}/) - end - - assert_equal [ "123", "123456", "123abc", nil ], Readline.readline_attempted_completion_function("12", 0, 1) - - assert_equal [ "123", "123456", "123abc", nil ], Readline.readline_attempted_completion_function("123", 0, 2) - - assert_equal [ "123456", nil, nil ], Readline.readline_attempted_completion_function("1234", 0, 3) - - ensure - Readline.module_eval do - @completion_proc = nil - end - end - - def teardown - @proc = nil - end -end diff --git a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet.rb b/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet.rb deleted file mode 100644 index 3ed2a456..00000000 --- a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet.rb +++ /dev/null @@ -1,67 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -require 'rchardet/version' -require 'rchardet/charsetprober' -require 'rchardet/mbcharsetprober' - -require 'rchardet/big5freq' -require 'rchardet/big5prober' -require 'rchardet/chardistribution' -require 'rchardet/charsetgroupprober' - -require 'rchardet/codingstatemachine' -require 'rchardet/constants' -require 'rchardet/escprober' -require 'rchardet/escsm' -require 'rchardet/eucjpprober' -require 'rchardet/euckrfreq' -require 'rchardet/euckrprober' -require 'rchardet/euctwfreq' -require 'rchardet/euctwprober' -require 'rchardet/gb18030freq' -require 'rchardet/gb18030prober' -require 'rchardet/hebrewprober' -require 'rchardet/jisfreq' -require 'rchardet/jpcntx' -require 'rchardet/langbulgarianmodel' -require 'rchardet/langcyrillicmodel' -require 'rchardet/langgreekmodel' -require 'rchardet/langhebrewmodel' -require 'rchardet/langhungarianmodel' -require 'rchardet/langthaimodel' -require 'rchardet/latin1prober' - -require 'rchardet/mbcsgroupprober' -require 'rchardet/mbcssm' -require 'rchardet/sbcharsetprober' -require 'rchardet/sbcsgroupprober' -require 'rchardet/sjisprober' -require 'rchardet/universaldetector' -require 'rchardet/utf8prober' - -module CharDet - def CharDet.detect(aBuf) - aBuf = aBuf.dup.force_encoding(Encoding::BINARY) - - u = UniversalDetector.new - u.reset - u.feed(aBuf) - u.close - u.result - end -end diff --git a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/big5freq.rb b/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/big5freq.rb deleted file mode 100644 index a83c7b69..00000000 --- a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/big5freq.rb +++ /dev/null @@ -1,927 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Jeff Hodges - port to Ruby -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -# Big5 frequency table -# by Taiwan's Mandarin Promotion Council -# -# -# 128 --> 0.42261 -# 256 --> 0.57851 -# 512 --> 0.74851 -# 1024 --> 0.89384 -# 2048 --> 0.97583 -# -# Ideal Distribution Ratio = 0.74851/(1-0.74851) =2.98 -# Random Distribution Ration = 512/(5401-512)=0.105 -# -# Typical Distribution Ratio about 25% of Ideal one, still much higher than RDR - -module CharDet -BIG5_TYPICAL_DISTRIBUTION_RATIO = 0.75 - -#Char to FreqOrder table -BIG5_TABLE_SIZE = 5376 - -Big5CharToFreqOrder = [ - 1,1801,1506, 255,1431, 198, 9, 82, 6,5008, 177, 202,3681,1256,2821, 110, # 16 -3814, 33,3274, 261, 76, 44,2114, 16,2946,2187,1176, 659,3971, 26,3451,2653, # 32 -1198,3972,3350,4202, 410,2215, 302, 590, 361,1964, 8, 204, 58,4510,5009,1932, # 48 - 63,5010,5011, 317,1614, 75, 222, 159,4203,2417,1480,5012,3555,3091, 224,2822, # 64 -3682, 3, 10,3973,1471, 29,2787,1135,2866,1940, 873, 130,3275,1123, 312,5013, # 80 -4511,2052, 507, 252, 682,5014, 142,1915, 124, 206,2947, 34,3556,3204, 64, 604, # 96 -5015,2501,1977,1978, 155,1991, 645, 641,1606,5016,3452, 337, 72, 406,5017, 80, # 112 - 630, 238,3205,1509, 263, 939,1092,2654, 756,1440,1094,3453, 449, 69,2987, 591, # 128 - 179,2096, 471, 115,2035,1844, 60, 50,2988, 134, 806,1869, 734,2036,3454, 180, # 144 - 995,1607, 156, 537,2907, 688,5018, 319,1305, 779,2145, 514,2379, 298,4512, 359, # 160 -2502, 90,2716,1338, 663, 11, 906,1099,2553, 20,2441, 182, 532,1716,5019, 732, # 176 -1376,4204,1311,1420,3206, 25,2317,1056, 113, 399, 382,1950, 242,3455,2474, 529, # 192 -3276, 475,1447,3683,5020, 117, 21, 656, 810,1297,2300,2334,3557,5021, 126,4205, # 208 - 706, 456, 150, 613,4513, 71,1118,2037,4206, 145,3092, 85, 835, 486,2115,1246, # 224 -1426, 428, 727,1285,1015, 800, 106, 623, 303,1281,5022,2128,2359, 347,3815, 221, # 240 -3558,3135,5023,1956,1153,4207, 83, 296,1199,3093, 192, 624, 93,5024, 822,1898, # 256 -2823,3136, 795,2065, 991,1554,1542,1592, 27, 43,2867, 859, 139,1456, 860,4514, # 272 - 437, 712,3974, 164,2397,3137, 695, 211,3037,2097, 195,3975,1608,3559,3560,3684, # 288 -3976, 234, 811,2989,2098,3977,2233,1441,3561,1615,2380, 668,2077,1638, 305, 228, # 304 -1664,4515, 467, 415,5025, 262,2099,1593, 239, 108, 300, 200,1033, 512,1247,2078, # 320 -5026,5027,2176,3207,3685,2682, 593, 845,1062,3277, 88,1723,2038,3978,1951, 212, # 336 - 266, 152, 149, 468,1899,4208,4516, 77, 187,5028,3038, 37, 5,2990,5029,3979, # 352 -5030,5031, 39,2524,4517,2908,3208,2079, 55, 148, 74,4518, 545, 483,1474,1029, # 368 -1665, 217,1870,1531,3138,1104,2655,4209, 24, 172,3562, 900,3980,3563,3564,4519, # 384 - 32,1408,2824,1312, 329, 487,2360,2251,2717, 784,2683, 4,3039,3351,1427,1789, # 400 - 188, 109, 499,5032,3686,1717,1790, 888,1217,3040,4520,5033,3565,5034,3352,1520, # 416 -3687,3981, 196,1034, 775,5035,5036, 929,1816, 249, 439, 38,5037,1063,5038, 794, # 432 -3982,1435,2301, 46, 178,3278,2066,5039,2381,5040, 214,1709,4521, 804, 35, 707, # 448 - 324,3688,1601,2554, 140, 459,4210,5041,5042,1365, 839, 272, 978,2262,2580,3456, # 464 -2129,1363,3689,1423, 697, 100,3094, 48, 70,1231, 495,3139,2196,5043,1294,5044, # 480 -2080, 462, 586,1042,3279, 853, 256, 988, 185,2382,3457,1698, 434,1084,5045,3458, # 496 - 314,2625,2788,4522,2335,2336, 569,2285, 637,1817,2525, 757,1162,1879,1616,3459, # 512 - 287,1577,2116, 768,4523,1671,2868,3566,2526,1321,3816, 909,2418,5046,4211, 933, # 528 -3817,4212,2053,2361,1222,4524, 765,2419,1322, 786,4525,5047,1920,1462,1677,2909, # 544 -1699,5048,4526,1424,2442,3140,3690,2600,3353,1775,1941,3460,3983,4213, 309,1369, # 560 -1130,2825, 364,2234,1653,1299,3984,3567,3985,3986,2656, 525,1085,3041, 902,2001, # 576 -1475, 964,4527, 421,1845,1415,1057,2286, 940,1364,3141, 376,4528,4529,1381, 7, # 592 -2527, 983,2383, 336,1710,2684,1846, 321,3461, 559,1131,3042,2752,1809,1132,1313, # 608 - 265,1481,1858,5049, 352,1203,2826,3280, 167,1089, 420,2827, 776, 792,1724,3568, # 624 -4214,2443,3281,5050,4215,5051, 446, 229, 333,2753, 901,3818,1200,1557,4530,2657, # 640 -1921, 395,2754,2685,3819,4216,1836, 125, 916,3209,2626,4531,5052,5053,3820,5054, # 656 -5055,5056,4532,3142,3691,1133,2555,1757,3462,1510,2318,1409,3569,5057,2146, 438, # 672 -2601,2910,2384,3354,1068, 958,3043, 461, 311,2869,2686,4217,1916,3210,4218,1979, # 688 - 383, 750,2755,2627,4219, 274, 539, 385,1278,1442,5058,1154,1965, 384, 561, 210, # 704 - 98,1295,2556,3570,5059,1711,2420,1482,3463,3987,2911,1257, 129,5060,3821, 642, # 720 - 523,2789,2790,2658,5061, 141,2235,1333, 68, 176, 441, 876, 907,4220, 603,2602, # 736 - 710, 171,3464, 404, 549, 18,3143,2398,1410,3692,1666,5062,3571,4533,2912,4534, # 752 -5063,2991, 368,5064, 146, 366, 99, 871,3693,1543, 748, 807,1586,1185, 22,2263, # 768 - 379,3822,3211,5065,3212, 505,1942,2628,1992,1382,2319,5066, 380,2362, 218, 702, # 784 -1818,1248,3465,3044,3572,3355,3282,5067,2992,3694, 930,3283,3823,5068, 59,5069, # 800 - 585, 601,4221, 497,3466,1112,1314,4535,1802,5070,1223,1472,2177,5071, 749,1837, # 816 - 690,1900,3824,1773,3988,1476, 429,1043,1791,2236,2117, 917,4222, 447,1086,1629, # 832 -5072, 556,5073,5074,2021,1654, 844,1090, 105, 550, 966,1758,2828,1008,1783, 686, # 848 -1095,5075,2287, 793,1602,5076,3573,2603,4536,4223,2948,2302,4537,3825, 980,2503, # 864 - 544, 353, 527,4538, 908,2687,2913,5077, 381,2629,1943,1348,5078,1341,1252, 560, # 880 -3095,5079,3467,2870,5080,2054, 973, 886,2081, 143,4539,5081,5082, 157,3989, 496, # 896 -4224, 57, 840, 540,2039,4540,4541,3468,2118,1445, 970,2264,1748,1966,2082,4225, # 912 -3144,1234,1776,3284,2829,3695, 773,1206,2130,1066,2040,1326,3990,1738,1725,4226, # 928 - 279,3145, 51,1544,2604, 423,1578,2131,2067, 173,4542,1880,5083,5084,1583, 264, # 944 - 610,3696,4543,2444, 280, 154,5085,5086,5087,1739, 338,1282,3096, 693,2871,1411, # 960 -1074,3826,2445,5088,4544,5089,5090,1240, 952,2399,5091,2914,1538,2688, 685,1483, # 976 -4227,2475,1436, 953,4228,2055,4545, 671,2400, 79,4229,2446,3285, 608, 567,2689, # 992 -3469,4230,4231,1691, 393,1261,1792,2401,5092,4546,5093,5094,5095,5096,1383,1672, # 1008 -3827,3213,1464, 522,1119, 661,1150, 216, 675,4547,3991,1432,3574, 609,4548,2690, # 1024 -2402,5097,5098,5099,4232,3045, 0,5100,2476, 315, 231,2447, 301,3356,4549,2385, # 1040 -5101, 233,4233,3697,1819,4550,4551,5102, 96,1777,1315,2083,5103, 257,5104,1810, # 1056 -3698,2718,1139,1820,4234,2022,1124,2164,2791,1778,2659,5105,3097, 363,1655,3214, # 1072 -5106,2993,5107,5108,5109,3992,1567,3993, 718, 103,3215, 849,1443, 341,3357,2949, # 1088 -1484,5110,1712, 127, 67, 339,4235,2403, 679,1412, 821,5111,5112, 834, 738, 351, # 1104 -2994,2147, 846, 235,1497,1881, 418,1993,3828,2719, 186,1100,2148,2756,3575,1545, # 1120 -1355,2950,2872,1377, 583,3994,4236,2581,2995,5113,1298,3699,1078,2557,3700,2363, # 1136 - 78,3829,3830, 267,1289,2100,2002,1594,4237, 348, 369,1274,2197,2178,1838,4552, # 1152 -1821,2830,3701,2757,2288,2003,4553,2951,2758, 144,3358, 882,4554,3995,2759,3470, # 1168 -4555,2915,5114,4238,1726, 320,5115,3996,3046, 788,2996,5116,2831,1774,1327,2873, # 1184 -3997,2832,5117,1306,4556,2004,1700,3831,3576,2364,2660, 787,2023, 506, 824,3702, # 1200 - 534, 323,4557,1044,3359,2024,1901, 946,3471,5118,1779,1500,1678,5119,1882,4558, # 1216 - 165, 243,4559,3703,2528, 123, 683,4239, 764,4560, 36,3998,1793, 589,2916, 816, # 1232 - 626,1667,3047,2237,1639,1555,1622,3832,3999,5120,4000,2874,1370,1228,1933, 891, # 1248 -2084,2917, 304,4240,5121, 292,2997,2720,3577, 691,2101,4241,1115,4561, 118, 662, # 1264 -5122, 611,1156, 854,2386,1316,2875, 2, 386, 515,2918,5123,5124,3286, 868,2238, # 1280 -1486, 855,2661, 785,2216,3048,5125,1040,3216,3578,5126,3146, 448,5127,1525,5128, # 1296 -2165,4562,5129,3833,5130,4242,2833,3579,3147, 503, 818,4001,3148,1568, 814, 676, # 1312 -1444, 306,1749,5131,3834,1416,1030, 197,1428, 805,2834,1501,4563,5132,5133,5134, # 1328 -1994,5135,4564,5136,5137,2198, 13,2792,3704,2998,3149,1229,1917,5138,3835,2132, # 1344 -5139,4243,4565,2404,3580,5140,2217,1511,1727,1120,5141,5142, 646,3836,2448, 307, # 1360 -5143,5144,1595,3217,5145,5146,5147,3705,1113,1356,4002,1465,2529,2530,5148, 519, # 1376 -5149, 128,2133, 92,2289,1980,5150,4003,1512, 342,3150,2199,5151,2793,2218,1981, # 1392 -3360,4244, 290,1656,1317, 789, 827,2365,5152,3837,4566, 562, 581,4004,5153, 401, # 1408 -4567,2252, 94,4568,5154,1399,2794,5155,1463,2025,4569,3218,1944,5156, 828,1105, # 1424 -4245,1262,1394,5157,4246, 605,4570,5158,1784,2876,5159,2835, 819,2102, 578,2200, # 1440 -2952,5160,1502, 436,3287,4247,3288,2836,4005,2919,3472,3473,5161,2721,2320,5162, # 1456 -5163,2337,2068, 23,4571, 193, 826,3838,2103, 699,1630,4248,3098, 390,1794,1064, # 1472 -3581,5164,1579,3099,3100,1400,5165,4249,1839,1640,2877,5166,4572,4573, 137,4250, # 1488 - 598,3101,1967, 780, 104, 974,2953,5167, 278, 899, 253, 402, 572, 504, 493,1339, # 1504 -5168,4006,1275,4574,2582,2558,5169,3706,3049,3102,2253, 565,1334,2722, 863, 41, # 1520 -5170,5171,4575,5172,1657,2338, 19, 463,2760,4251, 606,5173,2999,3289,1087,2085, # 1536 -1323,2662,3000,5174,1631,1623,1750,4252,2691,5175,2878, 791,2723,2663,2339, 232, # 1552 -2421,5176,3001,1498,5177,2664,2630, 755,1366,3707,3290,3151,2026,1609, 119,1918, # 1568 -3474, 862,1026,4253,5178,4007,3839,4576,4008,4577,2265,1952,2477,5179,1125, 817, # 1584 -4254,4255,4009,1513,1766,2041,1487,4256,3050,3291,2837,3840,3152,5180,5181,1507, # 1600 -5182,2692, 733, 40,1632,1106,2879, 345,4257, 841,2531, 230,4578,3002,1847,3292, # 1616 -3475,5183,1263, 986,3476,5184, 735, 879, 254,1137, 857, 622,1300,1180,1388,1562, # 1632 -4010,4011,2954, 967,2761,2665,1349, 592,2134,1692,3361,3003,1995,4258,1679,4012, # 1648 -1902,2188,5185, 739,3708,2724,1296,1290,5186,4259,2201,2202,1922,1563,2605,2559, # 1664 -1871,2762,3004,5187, 435,5188, 343,1108, 596, 17,1751,4579,2239,3477,3709,5189, # 1680 -4580, 294,3582,2955,1693, 477, 979, 281,2042,3583, 643,2043,3710,2631,2795,2266, # 1696 -1031,2340,2135,2303,3584,4581, 367,1249,2560,5190,3585,5191,4582,1283,3362,2005, # 1712 - 240,1762,3363,4583,4584, 836,1069,3153, 474,5192,2149,2532, 268,3586,5193,3219, # 1728 -1521,1284,5194,1658,1546,4260,5195,3587,3588,5196,4261,3364,2693,1685,4262, 961, # 1744 -1673,2632, 190,2006,2203,3841,4585,4586,5197, 570,2504,3711,1490,5198,4587,2633, # 1760 -3293,1957,4588, 584,1514, 396,1045,1945,5199,4589,1968,2449,5200,5201,4590,4013, # 1776 - 619,5202,3154,3294, 215,2007,2796,2561,3220,4591,3221,4592, 763,4263,3842,4593, # 1792 -5203,5204,1958,1767,2956,3365,3712,1174, 452,1477,4594,3366,3155,5205,2838,1253, # 1808 -2387,2189,1091,2290,4264, 492,5206, 638,1169,1825,2136,1752,4014, 648, 926,1021, # 1824 -1324,4595, 520,4596, 997, 847,1007, 892,4597,3843,2267,1872,3713,2405,1785,4598, # 1840 -1953,2957,3103,3222,1728,4265,2044,3714,4599,2008,1701,3156,1551, 30,2268,4266, # 1856 -5207,2027,4600,3589,5208, 501,5209,4267, 594,3478,2166,1822,3590,3479,3591,3223, # 1872 - 829,2839,4268,5210,1680,3157,1225,4269,5211,3295,4601,4270,3158,2341,5212,4602, # 1888 -4271,5213,4015,4016,5214,1848,2388,2606,3367,5215,4603, 374,4017, 652,4272,4273, # 1904 - 375,1140, 798,5216,5217,5218,2366,4604,2269, 546,1659, 138,3051,2450,4605,5219, # 1920 -2254, 612,1849, 910, 796,3844,1740,1371, 825,3845,3846,5220,2920,2562,5221, 692, # 1936 - 444,3052,2634, 801,4606,4274,5222,1491, 244,1053,3053,4275,4276, 340,5223,4018, # 1952 -1041,3005, 293,1168, 87,1357,5224,1539, 959,5225,2240, 721, 694,4277,3847, 219, # 1968 -1478, 644,1417,3368,2666,1413,1401,1335,1389,4019,5226,5227,3006,2367,3159,1826, # 1984 - 730,1515, 184,2840, 66,4607,5228,1660,2958, 246,3369, 378,1457, 226,3480, 975, # 2000 -4020,2959,1264,3592, 674, 696,5229, 163,5230,1141,2422,2167, 713,3593,3370,4608, # 2016 -4021,5231,5232,1186, 15,5233,1079,1070,5234,1522,3224,3594, 276,1050,2725, 758, # 2032 -1126, 653,2960,3296,5235,2342, 889,3595,4022,3104,3007, 903,1250,4609,4023,3481, # 2048 -3596,1342,1681,1718, 766,3297, 286, 89,2961,3715,5236,1713,5237,2607,3371,3008, # 2064 -5238,2962,2219,3225,2880,5239,4610,2505,2533, 181, 387,1075,4024, 731,2190,3372, # 2080 -5240,3298, 310, 313,3482,2304, 770,4278, 54,3054, 189,4611,3105,3848,4025,5241, # 2096 -1230,1617,1850, 355,3597,4279,4612,3373, 111,4280,3716,1350,3160,3483,3055,4281, # 2112 -2150,3299,3598,5242,2797,4026,4027,3009, 722,2009,5243,1071, 247,1207,2343,2478, # 2128 -1378,4613,2010, 864,1437,1214,4614, 373,3849,1142,2220, 667,4615, 442,2763,2563, # 2144 -3850,4028,1969,4282,3300,1840, 837, 170,1107, 934,1336,1883,5244,5245,2119,4283, # 2160 -2841, 743,1569,5246,4616,4284, 582,2389,1418,3484,5247,1803,5248, 357,1395,1729, # 2176 -3717,3301,2423,1564,2241,5249,3106,3851,1633,4617,1114,2086,4285,1532,5250, 482, # 2192 -2451,4618,5251,5252,1492, 833,1466,5253,2726,3599,1641,2842,5254,1526,1272,3718, # 2208 -4286,1686,1795, 416,2564,1903,1954,1804,5255,3852,2798,3853,1159,2321,5256,2881, # 2224 -4619,1610,1584,3056,2424,2764, 443,3302,1163,3161,5257,5258,4029,5259,4287,2506, # 2240 -3057,4620,4030,3162,2104,1647,3600,2011,1873,4288,5260,4289, 431,3485,5261, 250, # 2256 - 97, 81,4290,5262,1648,1851,1558, 160, 848,5263, 866, 740,1694,5264,2204,2843, # 2272 -3226,4291,4621,3719,1687, 950,2479, 426, 469,3227,3720,3721,4031,5265,5266,1188, # 2288 - 424,1996, 861,3601,4292,3854,2205,2694, 168,1235,3602,4293,5267,2087,1674,4622, # 2304 -3374,3303, 220,2565,1009,5268,3855, 670,3010, 332,1208, 717,5269,5270,3603,2452, # 2320 -4032,3375,5271, 513,5272,1209,2882,3376,3163,4623,1080,5273,5274,5275,5276,2534, # 2336 -3722,3604, 815,1587,4033,4034,5277,3605,3486,3856,1254,4624,1328,3058,1390,4035, # 2352 -1741,4036,3857,4037,5278, 236,3858,2453,3304,5279,5280,3723,3859,1273,3860,4625, # 2368 -5281, 308,5282,4626, 245,4627,1852,2480,1307,2583, 430, 715,2137,2454,5283, 270, # 2384 - 199,2883,4038,5284,3606,2727,1753, 761,1754, 725,1661,1841,4628,3487,3724,5285, # 2400 -5286, 587, 14,3305, 227,2608, 326, 480,2270, 943,2765,3607, 291, 650,1884,5287, # 2416 -1702,1226, 102,1547, 62,3488, 904,4629,3489,1164,4294,5288,5289,1224,1548,2766, # 2432 - 391, 498,1493,5290,1386,1419,5291,2056,1177,4630, 813, 880,1081,2368, 566,1145, # 2448 -4631,2291,1001,1035,2566,2609,2242, 394,1286,5292,5293,2069,5294, 86,1494,1730, # 2464 -4039, 491,1588, 745, 897,2963, 843,3377,4040,2767,2884,3306,1768, 998,2221,2070, # 2480 - 397,1827,1195,1970,3725,3011,3378, 284,5295,3861,2507,2138,2120,1904,5296,4041, # 2496 -2151,4042,4295,1036,3490,1905, 114,2567,4296, 209,1527,5297,5298,2964,2844,2635, # 2512 -2390,2728,3164, 812,2568,5299,3307,5300,1559, 737,1885,3726,1210, 885, 28,2695, # 2528 -3608,3862,5301,4297,1004,1780,4632,5302, 346,1982,2222,2696,4633,3863,1742, 797, # 2544 -1642,4043,1934,1072,1384,2152, 896,4044,3308,3727,3228,2885,3609,5303,2569,1959, # 2560 -4634,2455,1786,5304,5305,5306,4045,4298,1005,1308,3728,4299,2729,4635,4636,1528, # 2576 -2610, 161,1178,4300,1983, 987,4637,1101,4301, 631,4046,1157,3229,2425,1343,1241, # 2592 -1016,2243,2570, 372, 877,2344,2508,1160, 555,1935, 911,4047,5307, 466,1170, 169, # 2608 -1051,2921,2697,3729,2481,3012,1182,2012,2571,1251,2636,5308, 992,2345,3491,1540, # 2624 -2730,1201,2071,2406,1997,2482,5309,4638, 528,1923,2191,1503,1874,1570,2369,3379, # 2640 -3309,5310, 557,1073,5311,1828,3492,2088,2271,3165,3059,3107, 767,3108,2799,4639, # 2656 -1006,4302,4640,2346,1267,2179,3730,3230, 778,4048,3231,2731,1597,2667,5312,4641, # 2672 -5313,3493,5314,5315,5316,3310,2698,1433,3311, 131, 95,1504,4049, 723,4303,3166, # 2688 -1842,3610,2768,2192,4050,2028,2105,3731,5317,3013,4051,1218,5318,3380,3232,4052, # 2704 -4304,2584, 248,1634,3864, 912,5319,2845,3732,3060,3865, 654, 53,5320,3014,5321, # 2720 -1688,4642, 777,3494,1032,4053,1425,5322, 191, 820,2121,2846, 971,4643, 931,3233, # 2736 - 135, 664, 783,3866,1998, 772,2922,1936,4054,3867,4644,2923,3234, 282,2732, 640, # 2752 -1372,3495,1127, 922, 325,3381,5323,5324, 711,2045,5325,5326,4055,2223,2800,1937, # 2768 -4056,3382,2224,2255,3868,2305,5327,4645,3869,1258,3312,4057,3235,2139,2965,4058, # 2784 -4059,5328,2225, 258,3236,4646, 101,1227,5329,3313,1755,5330,1391,3314,5331,2924, # 2800 -2057, 893,5332,5333,5334,1402,4305,2347,5335,5336,3237,3611,5337,5338, 878,1325, # 2816 -1781,2801,4647, 259,1385,2585, 744,1183,2272,4648,5339,4060,2509,5340, 684,1024, # 2832 -4306,5341, 472,3612,3496,1165,3315,4061,4062, 322,2153, 881, 455,1695,1152,1340, # 2848 - 660, 554,2154,4649,1058,4650,4307, 830,1065,3383,4063,4651,1924,5342,1703,1919, # 2864 -5343, 932,2273, 122,5344,4652, 947, 677,5345,3870,2637, 297,1906,1925,2274,4653, # 2880 -2322,3316,5346,5347,4308,5348,4309, 84,4310, 112, 989,5349, 547,1059,4064, 701, # 2896 -3613,1019,5350,4311,5351,3497, 942, 639, 457,2306,2456, 993,2966, 407, 851, 494, # 2912 -4654,3384, 927,5352,1237,5353,2426,3385, 573,4312, 680, 921,2925,1279,1875, 285, # 2928 - 790,1448,1984, 719,2168,5354,5355,4655,4065,4066,1649,5356,1541, 563,5357,1077, # 2944 -5358,3386,3061,3498, 511,3015,4067,4068,3733,4069,1268,2572,3387,3238,4656,4657, # 2960 -5359, 535,1048,1276,1189,2926,2029,3167,1438,1373,2847,2967,1134,2013,5360,4313, # 2976 -1238,2586,3109,1259,5361, 700,5362,2968,3168,3734,4314,5363,4315,1146,1876,1907, # 2992 -4658,2611,4070, 781,2427, 132,1589, 203, 147, 273,2802,2407, 898,1787,2155,4071, # 3008 -4072,5364,3871,2803,5365,5366,4659,4660,5367,3239,5368,1635,3872, 965,5369,1805, # 3024 -2699,1516,3614,1121,1082,1329,3317,4073,1449,3873, 65,1128,2848,2927,2769,1590, # 3040 -3874,5370,5371, 12,2668, 45, 976,2587,3169,4661, 517,2535,1013,1037,3240,5372, # 3056 -3875,2849,5373,3876,5374,3499,5375,2612, 614,1999,2323,3877,3110,2733,2638,5376, # 3072 -2588,4316, 599,1269,5377,1811,3735,5378,2700,3111, 759,1060, 489,1806,3388,3318, # 3088 -1358,5379,5380,2391,1387,1215,2639,2256, 490,5381,5382,4317,1759,2392,2348,5383, # 3104 -4662,3878,1908,4074,2640,1807,3241,4663,3500,3319,2770,2349, 874,5384,5385,3501, # 3120 -3736,1859, 91,2928,3737,3062,3879,4664,5386,3170,4075,2669,5387,3502,1202,1403, # 3136 -3880,2969,2536,1517,2510,4665,3503,2511,5388,4666,5389,2701,1886,1495,1731,4076, # 3152 -2370,4667,5390,2030,5391,5392,4077,2702,1216, 237,2589,4318,2324,4078,3881,4668, # 3168 -4669,2703,3615,3504, 445,4670,5393,5394,5395,5396,2771, 61,4079,3738,1823,4080, # 3184 -5397, 687,2046, 935, 925, 405,2670, 703,1096,1860,2734,4671,4081,1877,1367,2704, # 3200 -3389, 918,2106,1782,2483, 334,3320,1611,1093,4672, 564,3171,3505,3739,3390, 945, # 3216 -2641,2058,4673,5398,1926, 872,4319,5399,3506,2705,3112, 349,4320,3740,4082,4674, # 3232 -3882,4321,3741,2156,4083,4675,4676,4322,4677,2408,2047, 782,4084, 400, 251,4323, # 3248 -1624,5400,5401, 277,3742, 299,1265, 476,1191,3883,2122,4324,4325,1109, 205,5402, # 3264 -2590,1000,2157,3616,1861,5403,5404,5405,4678,5406,4679,2573, 107,2484,2158,4085, # 3280 -3507,3172,5407,1533, 541,1301, 158, 753,4326,2886,3617,5408,1696, 370,1088,4327, # 3296 -4680,3618, 579, 327, 440, 162,2244, 269,1938,1374,3508, 968,3063, 56,1396,3113, # 3312 -2107,3321,3391,5409,1927,2159,4681,3016,5410,3619,5411,5412,3743,4682,2485,5413, # 3328 -2804,5414,1650,4683,5415,2613,5416,5417,4086,2671,3392,1149,3393,4087,3884,4088, # 3344 -5418,1076, 49,5419, 951,3242,3322,3323, 450,2850, 920,5420,1812,2805,2371,4328, # 3360 -1909,1138,2372,3885,3509,5421,3243,4684,1910,1147,1518,2428,4685,3886,5422,4686, # 3376 -2393,2614, 260,1796,3244,5423,5424,3887,3324, 708,5425,3620,1704,5426,3621,1351, # 3392 -1618,3394,3017,1887, 944,4329,3395,4330,3064,3396,4331,5427,3744, 422, 413,1714, # 3408 -3325, 500,2059,2350,4332,2486,5428,1344,1911, 954,5429,1668,5430,5431,4089,2409, # 3424 -4333,3622,3888,4334,5432,2307,1318,2512,3114, 133,3115,2887,4687, 629, 31,2851, # 3440 -2706,3889,4688, 850, 949,4689,4090,2970,1732,2089,4335,1496,1853,5433,4091, 620, # 3456 -3245, 981,1242,3745,3397,1619,3746,1643,3326,2140,2457,1971,1719,3510,2169,5434, # 3472 -3246,5435,5436,3398,1829,5437,1277,4690,1565,2048,5438,1636,3623,3116,5439, 869, # 3488 -2852, 655,3890,3891,3117,4092,3018,3892,1310,3624,4691,5440,5441,5442,1733, 558, # 3504 -4692,3747, 335,1549,3065,1756,4336,3748,1946,3511,1830,1291,1192, 470,2735,2108, # 3520 -2806, 913,1054,4093,5443,1027,5444,3066,4094,4693, 982,2672,3399,3173,3512,3247, # 3536 -3248,1947,2807,5445, 571,4694,5446,1831,5447,3625,2591,1523,2429,5448,2090, 984, # 3552 -4695,3749,1960,5449,3750, 852, 923,2808,3513,3751, 969,1519, 999,2049,2325,1705, # 3568 -5450,3118, 615,1662, 151, 597,4095,2410,2326,1049, 275,4696,3752,4337, 568,3753, # 3584 -3626,2487,4338,3754,5451,2430,2275, 409,3249,5452,1566,2888,3514,1002, 769,2853, # 3600 - 194,2091,3174,3755,2226,3327,4339, 628,1505,5453,5454,1763,2180,3019,4096, 521, # 3616 -1161,2592,1788,2206,2411,4697,4097,1625,4340,4341, 412, 42,3119, 464,5455,2642, # 3632 -4698,3400,1760,1571,2889,3515,2537,1219,2207,3893,2643,2141,2373,4699,4700,3328, # 3648 -1651,3401,3627,5456,5457,3628,2488,3516,5458,3756,5459,5460,2276,2092, 460,5461, # 3664 -4701,5462,3020, 962, 588,3629, 289,3250,2644,1116, 52,5463,3067,1797,5464,5465, # 3680 -5466,1467,5467,1598,1143,3757,4342,1985,1734,1067,4702,1280,3402, 465,4703,1572, # 3696 - 510,5468,1928,2245,1813,1644,3630,5469,4704,3758,5470,5471,2673,1573,1534,5472, # 3712 -5473, 536,1808,1761,3517,3894,3175,2645,5474,5475,5476,4705,3518,2929,1912,2809, # 3728 -5477,3329,1122, 377,3251,5478, 360,5479,5480,4343,1529, 551,5481,2060,3759,1769, # 3744 -2431,5482,2930,4344,3330,3120,2327,2109,2031,4706,1404, 136,1468,1479, 672,1171, # 3760 -3252,2308, 271,3176,5483,2772,5484,2050, 678,2736, 865,1948,4707,5485,2014,4098, # 3776 -2971,5486,2737,2227,1397,3068,3760,4708,4709,1735,2931,3403,3631,5487,3895, 509, # 3792 -2854,2458,2890,3896,5488,5489,3177,3178,4710,4345,2538,4711,2309,1166,1010, 552, # 3808 - 681,1888,5490,5491,2972,2973,4099,1287,1596,1862,3179, 358, 453, 736, 175, 478, # 3824 -1117, 905,1167,1097,5492,1854,1530,5493,1706,5494,2181,3519,2292,3761,3520,3632, # 3840 -4346,2093,4347,5495,3404,1193,2489,4348,1458,2193,2208,1863,1889,1421,3331,2932, # 3856 -3069,2182,3521, 595,2123,5496,4100,5497,5498,4349,1707,2646, 223,3762,1359, 751, # 3872 -3121, 183,3522,5499,2810,3021, 419,2374, 633, 704,3897,2394, 241,5500,5501,5502, # 3888 - 838,3022,3763,2277,2773,2459,3898,1939,2051,4101,1309,3122,2246,1181,5503,1136, # 3904 -2209,3899,2375,1446,4350,2310,4712,5504,5505,4351,1055,2615, 484,3764,5506,4102, # 3920 - 625,4352,2278,3405,1499,4353,4103,5507,4104,4354,3253,2279,2280,3523,5508,5509, # 3936 -2774, 808,2616,3765,3406,4105,4355,3123,2539, 526,3407,3900,4356, 955,5510,1620, # 3952 -4357,2647,2432,5511,1429,3766,1669,1832, 994, 928,5512,3633,1260,5513,5514,5515, # 3968 -1949,2293, 741,2933,1626,4358,2738,2460, 867,1184, 362,3408,1392,5516,5517,4106, # 3984 -4359,1770,1736,3254,2934,4713,4714,1929,2707,1459,1158,5518,3070,3409,2891,1292, # 4000 -1930,2513,2855,3767,1986,1187,2072,2015,2617,4360,5519,2574,2514,2170,3768,2490, # 4016 -3332,5520,3769,4715,5521,5522, 666,1003,3023,1022,3634,4361,5523,4716,1814,2257, # 4032 - 574,3901,1603, 295,1535, 705,3902,4362, 283, 858, 417,5524,5525,3255,4717,4718, # 4048 -3071,1220,1890,1046,2281,2461,4107,1393,1599, 689,2575, 388,4363,5526,2491, 802, # 4064 -5527,2811,3903,2061,1405,2258,5528,4719,3904,2110,1052,1345,3256,1585,5529, 809, # 4080 -5530,5531,5532, 575,2739,3524, 956,1552,1469,1144,2328,5533,2329,1560,2462,3635, # 4096 -3257,4108, 616,2210,4364,3180,2183,2294,5534,1833,5535,3525,4720,5536,1319,3770, # 4112 -3771,1211,3636,1023,3258,1293,2812,5537,5538,5539,3905, 607,2311,3906, 762,2892, # 4128 -1439,4365,1360,4721,1485,3072,5540,4722,1038,4366,1450,2062,2648,4367,1379,4723, # 4144 -2593,5541,5542,4368,1352,1414,2330,2935,1172,5543,5544,3907,3908,4724,1798,1451, # 4160 -5545,5546,5547,5548,2936,4109,4110,2492,2351, 411,4111,4112,3637,3333,3124,4725, # 4176 -1561,2674,1452,4113,1375,5549,5550, 47,2974, 316,5551,1406,1591,2937,3181,5552, # 4192 -1025,2142,3125,3182, 354,2740, 884,2228,4369,2412, 508,3772, 726,3638, 996,2433, # 4208 -3639, 729,5553, 392,2194,1453,4114,4726,3773,5554,5555,2463,3640,2618,1675,2813, # 4224 - 919,2352,2975,2353,1270,4727,4115, 73,5556,5557, 647,5558,3259,2856,2259,1550, # 4240 -1346,3024,5559,1332, 883,3526,5560,5561,5562,5563,3334,2775,5564,1212, 831,1347, # 4256 -4370,4728,2331,3909,1864,3073, 720,3910,4729,4730,3911,5565,4371,5566,5567,4731, # 4272 -5568,5569,1799,4732,3774,2619,4733,3641,1645,2376,4734,5570,2938, 669,2211,2675, # 4288 -2434,5571,2893,5572,5573,1028,3260,5574,4372,2413,5575,2260,1353,5576,5577,4735, # 4304 -3183, 518,5578,4116,5579,4373,1961,5580,2143,4374,5581,5582,3025,2354,2355,3912, # 4320 - 516,1834,1454,4117,2708,4375,4736,2229,2620,1972,1129,3642,5583,2776,5584,2976, # 4336 -1422, 577,1470,3026,1524,3410,5585,5586, 432,4376,3074,3527,5587,2594,1455,2515, # 4352 -2230,1973,1175,5588,1020,2741,4118,3528,4737,5589,2742,5590,1743,1361,3075,3529, # 4368 -2649,4119,4377,4738,2295, 895, 924,4378,2171, 331,2247,3076, 166,1627,3077,1098, # 4384 -5591,1232,2894,2231,3411,4739, 657, 403,1196,2377, 542,3775,3412,1600,4379,3530, # 4400 -5592,4740,2777,3261, 576, 530,1362,4741,4742,2540,2676,3776,4120,5593, 842,3913, # 4416 -5594,2814,2032,1014,4121, 213,2709,3413, 665, 621,4380,5595,3777,2939,2435,5596, # 4432 -2436,3335,3643,3414,4743,4381,2541,4382,4744,3644,1682,4383,3531,1380,5597, 724, # 4448 -2282, 600,1670,5598,1337,1233,4745,3126,2248,5599,1621,4746,5600, 651,4384,5601, # 4464 -1612,4385,2621,5602,2857,5603,2743,2312,3078,5604, 716,2464,3079, 174,1255,2710, # 4480 -4122,3645, 548,1320,1398, 728,4123,1574,5605,1891,1197,3080,4124,5606,3081,3082, # 4496 -3778,3646,3779, 747,5607, 635,4386,4747,5608,5609,5610,4387,5611,5612,4748,5613, # 4512 -3415,4749,2437, 451,5614,3780,2542,2073,4388,2744,4389,4125,5615,1764,4750,5616, # 4528 -4390, 350,4751,2283,2395,2493,5617,4391,4126,2249,1434,4127, 488,4752, 458,4392, # 4544 -4128,3781, 771,1330,2396,3914,2576,3184,2160,2414,1553,2677,3185,4393,5618,2494, # 4560 -2895,2622,1720,2711,4394,3416,4753,5619,2543,4395,5620,3262,4396,2778,5621,2016, # 4576 -2745,5622,1155,1017,3782,3915,5623,3336,2313, 201,1865,4397,1430,5624,4129,5625, # 4592 -5626,5627,5628,5629,4398,1604,5630, 414,1866, 371,2595,4754,4755,3532,2017,3127, # 4608 -4756,1708, 960,4399, 887, 389,2172,1536,1663,1721,5631,2232,4130,2356,2940,1580, # 4624 -5632,5633,1744,4757,2544,4758,4759,5634,4760,5635,2074,5636,4761,3647,3417,2896, # 4640 -4400,5637,4401,2650,3418,2815, 673,2712,2465, 709,3533,4131,3648,4402,5638,1148, # 4656 - 502, 634,5639,5640,1204,4762,3649,1575,4763,2623,3783,5641,3784,3128, 948,3263, # 4672 - 121,1745,3916,1110,5642,4403,3083,2516,3027,4132,3785,1151,1771,3917,1488,4133, # 4688 -1987,5643,2438,3534,5644,5645,2094,5646,4404,3918,1213,1407,2816, 531,2746,2545, # 4704 -3264,1011,1537,4764,2779,4405,3129,1061,5647,3786,3787,1867,2897,5648,2018, 120, # 4720 -4406,4407,2063,3650,3265,2314,3919,2678,3419,1955,4765,4134,5649,3535,1047,2713, # 4736 -1266,5650,1368,4766,2858, 649,3420,3920,2546,2747,1102,2859,2679,5651,5652,2000, # 4752 -5653,1111,3651,2977,5654,2495,3921,3652,2817,1855,3421,3788,5655,5656,3422,2415, # 4768 -2898,3337,3266,3653,5657,2577,5658,3654,2818,4135,1460, 856,5659,3655,5660,2899, # 4784 -2978,5661,2900,3922,5662,4408, 632,2517, 875,3923,1697,3924,2296,5663,5664,4767, # 4800 -3028,1239, 580,4768,4409,5665, 914, 936,2075,1190,4136,1039,2124,5666,5667,5668, # 4816 -5669,3423,1473,5670,1354,4410,3925,4769,2173,3084,4137, 915,3338,4411,4412,3339, # 4832 -1605,1835,5671,2748, 398,3656,4413,3926,4138, 328,1913,2860,4139,3927,1331,4414, # 4848 -3029, 937,4415,5672,3657,4140,4141,3424,2161,4770,3425, 524, 742, 538,3085,1012, # 4864 -5673,5674,3928,2466,5675, 658,1103, 225,3929,5676,5677,4771,5678,4772,5679,3267, # 4880 -1243,5680,4142, 963,2250,4773,5681,2714,3658,3186,5682,5683,2596,2332,5684,4774, # 4896 -5685,5686,5687,3536, 957,3426,2547,2033,1931,2941,2467, 870,2019,3659,1746,2780, # 4912 -2781,2439,2468,5688,3930,5689,3789,3130,3790,3537,3427,3791,5690,1179,3086,5691, # 4928 -3187,2378,4416,3792,2548,3188,3131,2749,4143,5692,3428,1556,2549,2297, 977,2901, # 4944 -2034,4144,1205,3429,5693,1765,3430,3189,2125,1271, 714,1689,4775,3538,5694,2333, # 4960 -3931, 533,4417,3660,2184, 617,5695,2469,3340,3539,2315,5696,5697,3190,5698,5699, # 4976 -3932,1988, 618, 427,2651,3540,3431,5700,5701,1244,1690,5702,2819,4418,4776,5703, # 4992 -3541,4777,5704,2284,1576, 473,3661,4419,3432, 972,5705,3662,5706,3087,5707,5708, # 5008 -4778,4779,5709,3793,4145,4146,5710, 153,4780, 356,5711,1892,2902,4420,2144, 408, # 5024 - 803,2357,5712,3933,5713,4421,1646,2578,2518,4781,4782,3934,5714,3935,4422,5715, # 5040 -2416,3433, 752,5716,5717,1962,3341,2979,5718, 746,3030,2470,4783,4423,3794, 698, # 5056 -4784,1893,4424,3663,2550,4785,3664,3936,5719,3191,3434,5720,1824,1302,4147,2715, # 5072 -3937,1974,4425,5721,4426,3192, 823,1303,1288,1236,2861,3542,4148,3435, 774,3938, # 5088 -5722,1581,4786,1304,2862,3939,4787,5723,2440,2162,1083,3268,4427,4149,4428, 344, # 5104 -1173, 288,2316, 454,1683,5724,5725,1461,4788,4150,2597,5726,5727,4789, 985, 894, # 5120 -5728,3436,3193,5729,1914,2942,3795,1989,5730,2111,1975,5731,4151,5732,2579,1194, # 5136 - 425,5733,4790,3194,1245,3796,4429,5734,5735,2863,5736, 636,4791,1856,3940, 760, # 5152 -1800,5737,4430,2212,1508,4792,4152,1894,1684,2298,5738,5739,4793,4431,4432,2213, # 5168 - 479,5740,5741, 832,5742,4153,2496,5743,2980,2497,3797, 990,3132, 627,1815,2652, # 5184 -4433,1582,4434,2126,2112,3543,4794,5744, 799,4435,3195,5745,4795,2113,1737,3031, # 5200 -1018, 543, 754,4436,3342,1676,4796,4797,4154,4798,1489,5746,3544,5747,2624,2903, # 5216 -4155,5748,5749,2981,5750,5751,5752,5753,3196,4799,4800,2185,1722,5754,3269,3270, # 5232 -1843,3665,1715, 481, 365,1976,1857,5755,5756,1963,2498,4801,5757,2127,3666,3271, # 5248 - 433,1895,2064,2076,5758, 602,2750,5759,5760,5761,5762,5763,3032,1628,3437,5764, # 5264 -3197,4802,4156,2904,4803,2519,5765,2551,2782,5766,5767,5768,3343,4804,2905,5769, # 5280 -4805,5770,2864,4806,4807,1221,2982,4157,2520,5771,5772,5773,1868,1990,5774,5775, # 5296 -5776,1896,5777,5778,4808,1897,4158, 318,5779,2095,4159,4437,5780,5781, 485,5782, # 5312 - 938,3941, 553,2680, 116,5783,3942,3667,5784,3545,2681,2783,3438,3344,2820,5785, # 5328 -3668,2943,4160,1747,2944,2983,5786,5787, 207,5788,4809,5789,4810,2521,5790,3033, # 5344 - 890,3669,3943,5791,1878,3798,3439,5792,2186,2358,3440,1652,5793,5794,5795, 941, # 5360 -2299, 208,3546,4161,2020, 330,4438,3944,2906,2499,3799,4439,4811,5796,5797,5798, # 5376 #last 512 -#Everything below is of no interest for detection purpose -2522,1613,4812,5799,3345,3945,2523,5800,4162,5801,1637,4163,2471,4813,3946,5802, # 5392 -2500,3034,3800,5803,5804,2195,4814,5805,2163,5806,5807,5808,5809,5810,5811,5812, # 5408 -5813,5814,5815,5816,5817,5818,5819,5820,5821,5822,5823,5824,5825,5826,5827,5828, # 5424 -5829,5830,5831,5832,5833,5834,5835,5836,5837,5838,5839,5840,5841,5842,5843,5844, # 5440 -5845,5846,5847,5848,5849,5850,5851,5852,5853,5854,5855,5856,5857,5858,5859,5860, # 5456 -5861,5862,5863,5864,5865,5866,5867,5868,5869,5870,5871,5872,5873,5874,5875,5876, # 5472 -5877,5878,5879,5880,5881,5882,5883,5884,5885,5886,5887,5888,5889,5890,5891,5892, # 5488 -5893,5894,5895,5896,5897,5898,5899,5900,5901,5902,5903,5904,5905,5906,5907,5908, # 5504 -5909,5910,5911,5912,5913,5914,5915,5916,5917,5918,5919,5920,5921,5922,5923,5924, # 5520 -5925,5926,5927,5928,5929,5930,5931,5932,5933,5934,5935,5936,5937,5938,5939,5940, # 5536 -5941,5942,5943,5944,5945,5946,5947,5948,5949,5950,5951,5952,5953,5954,5955,5956, # 5552 -5957,5958,5959,5960,5961,5962,5963,5964,5965,5966,5967,5968,5969,5970,5971,5972, # 5568 -5973,5974,5975,5976,5977,5978,5979,5980,5981,5982,5983,5984,5985,5986,5987,5988, # 5584 -5989,5990,5991,5992,5993,5994,5995,5996,5997,5998,5999,6000,6001,6002,6003,6004, # 5600 -6005,6006,6007,6008,6009,6010,6011,6012,6013,6014,6015,6016,6017,6018,6019,6020, # 5616 -6021,6022,6023,6024,6025,6026,6027,6028,6029,6030,6031,6032,6033,6034,6035,6036, # 5632 -6037,6038,6039,6040,6041,6042,6043,6044,6045,6046,6047,6048,6049,6050,6051,6052, # 5648 -6053,6054,6055,6056,6057,6058,6059,6060,6061,6062,6063,6064,6065,6066,6067,6068, # 5664 -6069,6070,6071,6072,6073,6074,6075,6076,6077,6078,6079,6080,6081,6082,6083,6084, # 5680 -6085,6086,6087,6088,6089,6090,6091,6092,6093,6094,6095,6096,6097,6098,6099,6100, # 5696 -6101,6102,6103,6104,6105,6106,6107,6108,6109,6110,6111,6112,6113,6114,6115,6116, # 5712 -6117,6118,6119,6120,6121,6122,6123,6124,6125,6126,6127,6128,6129,6130,6131,6132, # 5728 -6133,6134,6135,6136,6137,6138,6139,6140,6141,6142,6143,6144,6145,6146,6147,6148, # 5744 -6149,6150,6151,6152,6153,6154,6155,6156,6157,6158,6159,6160,6161,6162,6163,6164, # 5760 -6165,6166,6167,6168,6169,6170,6171,6172,6173,6174,6175,6176,6177,6178,6179,6180, # 5776 -6181,6182,6183,6184,6185,6186,6187,6188,6189,6190,6191,6192,6193,6194,6195,6196, # 5792 -6197,6198,6199,6200,6201,6202,6203,6204,6205,6206,6207,6208,6209,6210,6211,6212, # 5808 -6213,6214,6215,6216,6217,6218,6219,6220,6221,6222,6223,3670,6224,6225,6226,6227, # 5824 -6228,6229,6230,6231,6232,6233,6234,6235,6236,6237,6238,6239,6240,6241,6242,6243, # 5840 -6244,6245,6246,6247,6248,6249,6250,6251,6252,6253,6254,6255,6256,6257,6258,6259, # 5856 -6260,6261,6262,6263,6264,6265,6266,6267,6268,6269,6270,6271,6272,6273,6274,6275, # 5872 -6276,6277,6278,6279,6280,6281,6282,6283,6284,6285,4815,6286,6287,6288,6289,6290, # 5888 -6291,6292,4816,6293,6294,6295,6296,6297,6298,6299,6300,6301,6302,6303,6304,6305, # 5904 -6306,6307,6308,6309,6310,6311,4817,4818,6312,6313,6314,6315,6316,6317,6318,4819, # 5920 -6319,6320,6321,6322,6323,6324,6325,6326,6327,6328,6329,6330,6331,6332,6333,6334, # 5936 -6335,6336,6337,4820,6338,6339,6340,6341,6342,6343,6344,6345,6346,6347,6348,6349, # 5952 -6350,6351,6352,6353,6354,6355,6356,6357,6358,6359,6360,6361,6362,6363,6364,6365, # 5968 -6366,6367,6368,6369,6370,6371,6372,6373,6374,6375,6376,6377,6378,6379,6380,6381, # 5984 -6382,6383,6384,6385,6386,6387,6388,6389,6390,6391,6392,6393,6394,6395,6396,6397, # 6000 -6398,6399,6400,6401,6402,6403,6404,6405,6406,6407,6408,6409,6410,3441,6411,6412, # 6016 -6413,6414,6415,6416,6417,6418,6419,6420,6421,6422,6423,6424,6425,4440,6426,6427, # 6032 -6428,6429,6430,6431,6432,6433,6434,6435,6436,6437,6438,6439,6440,6441,6442,6443, # 6048 -6444,6445,6446,6447,6448,6449,6450,6451,6452,6453,6454,4821,6455,6456,6457,6458, # 6064 -6459,6460,6461,6462,6463,6464,6465,6466,6467,6468,6469,6470,6471,6472,6473,6474, # 6080 -6475,6476,6477,3947,3948,6478,6479,6480,6481,3272,4441,6482,6483,6484,6485,4442, # 6096 -6486,6487,6488,6489,6490,6491,6492,6493,6494,6495,6496,4822,6497,6498,6499,6500, # 6112 -6501,6502,6503,6504,6505,6506,6507,6508,6509,6510,6511,6512,6513,6514,6515,6516, # 6128 -6517,6518,6519,6520,6521,6522,6523,6524,6525,6526,6527,6528,6529,6530,6531,6532, # 6144 -6533,6534,6535,6536,6537,6538,6539,6540,6541,6542,6543,6544,6545,6546,6547,6548, # 6160 -6549,6550,6551,6552,6553,6554,6555,6556,2784,6557,4823,6558,6559,6560,6561,6562, # 6176 -6563,6564,6565,6566,6567,6568,6569,3949,6570,6571,6572,4824,6573,6574,6575,6576, # 6192 -6577,6578,6579,6580,6581,6582,6583,4825,6584,6585,6586,3950,2785,6587,6588,6589, # 6208 -6590,6591,6592,6593,6594,6595,6596,6597,6598,6599,6600,6601,6602,6603,6604,6605, # 6224 -6606,6607,6608,6609,6610,6611,6612,4826,6613,6614,6615,4827,6616,6617,6618,6619, # 6240 -6620,6621,6622,6623,6624,6625,4164,6626,6627,6628,6629,6630,6631,6632,6633,6634, # 6256 -3547,6635,4828,6636,6637,6638,6639,6640,6641,6642,3951,2984,6643,6644,6645,6646, # 6272 -6647,6648,6649,4165,6650,4829,6651,6652,4830,6653,6654,6655,6656,6657,6658,6659, # 6288 -6660,6661,6662,4831,6663,6664,6665,6666,6667,6668,6669,6670,6671,4166,6672,4832, # 6304 -3952,6673,6674,6675,6676,4833,6677,6678,6679,4167,6680,6681,6682,3198,6683,6684, # 6320 -6685,6686,6687,6688,6689,6690,6691,6692,6693,6694,6695,6696,6697,4834,6698,6699, # 6336 -6700,6701,6702,6703,6704,6705,6706,6707,6708,6709,6710,6711,6712,6713,6714,6715, # 6352 -6716,6717,6718,6719,6720,6721,6722,6723,6724,6725,6726,6727,6728,6729,6730,6731, # 6368 -6732,6733,6734,4443,6735,6736,6737,6738,6739,6740,6741,6742,6743,6744,6745,4444, # 6384 -6746,6747,6748,6749,6750,6751,6752,6753,6754,6755,6756,6757,6758,6759,6760,6761, # 6400 -6762,6763,6764,6765,6766,6767,6768,6769,6770,6771,6772,6773,6774,6775,6776,6777, # 6416 -6778,6779,6780,6781,4168,6782,6783,3442,6784,6785,6786,6787,6788,6789,6790,6791, # 6432 -4169,6792,6793,6794,6795,6796,6797,6798,6799,6800,6801,6802,6803,6804,6805,6806, # 6448 -6807,6808,6809,6810,6811,4835,6812,6813,6814,4445,6815,6816,4446,6817,6818,6819, # 6464 -6820,6821,6822,6823,6824,6825,6826,6827,6828,6829,6830,6831,6832,6833,6834,6835, # 6480 -3548,6836,6837,6838,6839,6840,6841,6842,6843,6844,6845,6846,4836,6847,6848,6849, # 6496 -6850,6851,6852,6853,6854,3953,6855,6856,6857,6858,6859,6860,6861,6862,6863,6864, # 6512 -6865,6866,6867,6868,6869,6870,6871,6872,6873,6874,6875,6876,6877,3199,6878,6879, # 6528 -6880,6881,6882,4447,6883,6884,6885,6886,6887,6888,6889,6890,6891,6892,6893,6894, # 6544 -6895,6896,6897,6898,6899,6900,6901,6902,6903,6904,4170,6905,6906,6907,6908,6909, # 6560 -6910,6911,6912,6913,6914,6915,6916,6917,6918,6919,6920,6921,6922,6923,6924,6925, # 6576 -6926,6927,4837,6928,6929,6930,6931,6932,6933,6934,6935,6936,3346,6937,6938,4838, # 6592 -6939,6940,6941,4448,6942,6943,6944,6945,6946,4449,6947,6948,6949,6950,6951,6952, # 6608 -6953,6954,6955,6956,6957,6958,6959,6960,6961,6962,6963,6964,6965,6966,6967,6968, # 6624 -6969,6970,6971,6972,6973,6974,6975,6976,6977,6978,6979,6980,6981,6982,6983,6984, # 6640 -6985,6986,6987,6988,6989,6990,6991,6992,6993,6994,3671,6995,6996,6997,6998,4839, # 6656 -6999,7000,7001,7002,3549,7003,7004,7005,7006,7007,7008,7009,7010,7011,7012,7013, # 6672 -7014,7015,7016,7017,7018,7019,7020,7021,7022,7023,7024,7025,7026,7027,7028,7029, # 6688 -7030,4840,7031,7032,7033,7034,7035,7036,7037,7038,4841,7039,7040,7041,7042,7043, # 6704 -7044,7045,7046,7047,7048,7049,7050,7051,7052,7053,7054,7055,7056,7057,7058,7059, # 6720 -7060,7061,7062,7063,7064,7065,7066,7067,7068,7069,7070,2985,7071,7072,7073,7074, # 6736 -7075,7076,7077,7078,7079,7080,4842,7081,7082,7083,7084,7085,7086,7087,7088,7089, # 6752 -7090,7091,7092,7093,7094,7095,7096,7097,7098,7099,7100,7101,7102,7103,7104,7105, # 6768 -7106,7107,7108,7109,7110,7111,7112,7113,7114,7115,7116,7117,7118,4450,7119,7120, # 6784 -7121,7122,7123,7124,7125,7126,7127,7128,7129,7130,7131,7132,7133,7134,7135,7136, # 6800 -7137,7138,7139,7140,7141,7142,7143,4843,7144,7145,7146,7147,7148,7149,7150,7151, # 6816 -7152,7153,7154,7155,7156,7157,7158,7159,7160,7161,7162,7163,7164,7165,7166,7167, # 6832 -7168,7169,7170,7171,7172,7173,7174,7175,7176,7177,7178,7179,7180,7181,7182,7183, # 6848 -7184,7185,7186,7187,7188,4171,4172,7189,7190,7191,7192,7193,7194,7195,7196,7197, # 6864 -7198,7199,7200,7201,7202,7203,7204,7205,7206,7207,7208,7209,7210,7211,7212,7213, # 6880 -7214,7215,7216,7217,7218,7219,7220,7221,7222,7223,7224,7225,7226,7227,7228,7229, # 6896 -7230,7231,7232,7233,7234,7235,7236,7237,7238,7239,7240,7241,7242,7243,7244,7245, # 6912 -7246,7247,7248,7249,7250,7251,7252,7253,7254,7255,7256,7257,7258,7259,7260,7261, # 6928 -7262,7263,7264,7265,7266,7267,7268,7269,7270,7271,7272,7273,7274,7275,7276,7277, # 6944 -7278,7279,7280,7281,7282,7283,7284,7285,7286,7287,7288,7289,7290,7291,7292,7293, # 6960 -7294,7295,7296,4844,7297,7298,7299,7300,7301,7302,7303,7304,7305,7306,7307,7308, # 6976 -7309,7310,7311,7312,7313,7314,7315,7316,4451,7317,7318,7319,7320,7321,7322,7323, # 6992 -7324,7325,7326,7327,7328,7329,7330,7331,7332,7333,7334,7335,7336,7337,7338,7339, # 7008 -7340,7341,7342,7343,7344,7345,7346,7347,7348,7349,7350,7351,7352,7353,4173,7354, # 7024 -7355,4845,7356,7357,7358,7359,7360,7361,7362,7363,7364,7365,7366,7367,7368,7369, # 7040 -7370,7371,7372,7373,7374,7375,7376,7377,7378,7379,7380,7381,7382,7383,7384,7385, # 7056 -7386,7387,7388,4846,7389,7390,7391,7392,7393,7394,7395,7396,7397,7398,7399,7400, # 7072 -7401,7402,7403,7404,7405,3672,7406,7407,7408,7409,7410,7411,7412,7413,7414,7415, # 7088 -7416,7417,7418,7419,7420,7421,7422,7423,7424,7425,7426,7427,7428,7429,7430,7431, # 7104 -7432,7433,7434,7435,7436,7437,7438,7439,7440,7441,7442,7443,7444,7445,7446,7447, # 7120 -7448,7449,7450,7451,7452,7453,4452,7454,3200,7455,7456,7457,7458,7459,7460,7461, # 7136 -7462,7463,7464,7465,7466,7467,7468,7469,7470,7471,7472,7473,7474,4847,7475,7476, # 7152 -7477,3133,7478,7479,7480,7481,7482,7483,7484,7485,7486,7487,7488,7489,7490,7491, # 7168 -7492,7493,7494,7495,7496,7497,7498,7499,7500,7501,7502,3347,7503,7504,7505,7506, # 7184 -7507,7508,7509,7510,7511,7512,7513,7514,7515,7516,7517,7518,7519,7520,7521,4848, # 7200 -7522,7523,7524,7525,7526,7527,7528,7529,7530,7531,7532,7533,7534,7535,7536,7537, # 7216 -7538,7539,7540,7541,7542,7543,7544,7545,7546,7547,7548,7549,3801,4849,7550,7551, # 7232 -7552,7553,7554,7555,7556,7557,7558,7559,7560,7561,7562,7563,7564,7565,7566,7567, # 7248 -7568,7569,3035,7570,7571,7572,7573,7574,7575,7576,7577,7578,7579,7580,7581,7582, # 7264 -7583,7584,7585,7586,7587,7588,7589,7590,7591,7592,7593,7594,7595,7596,7597,7598, # 7280 -7599,7600,7601,7602,7603,7604,7605,7606,7607,7608,7609,7610,7611,7612,7613,7614, # 7296 -7615,7616,4850,7617,7618,3802,7619,7620,7621,7622,7623,7624,7625,7626,7627,7628, # 7312 -7629,7630,7631,7632,4851,7633,7634,7635,7636,7637,7638,7639,7640,7641,7642,7643, # 7328 -7644,7645,7646,7647,7648,7649,7650,7651,7652,7653,7654,7655,7656,7657,7658,7659, # 7344 -7660,7661,7662,7663,7664,7665,7666,7667,7668,7669,7670,4453,7671,7672,7673,7674, # 7360 -7675,7676,7677,7678,7679,7680,7681,7682,7683,7684,7685,7686,7687,7688,7689,7690, # 7376 -7691,7692,7693,7694,7695,7696,7697,3443,7698,7699,7700,7701,7702,4454,7703,7704, # 7392 -7705,7706,7707,7708,7709,7710,7711,7712,7713,2472,7714,7715,7716,7717,7718,7719, # 7408 -7720,7721,7722,7723,7724,7725,7726,7727,7728,7729,7730,7731,3954,7732,7733,7734, # 7424 -7735,7736,7737,7738,7739,7740,7741,7742,7743,7744,7745,7746,7747,7748,7749,7750, # 7440 -3134,7751,7752,4852,7753,7754,7755,4853,7756,7757,7758,7759,7760,4174,7761,7762, # 7456 -7763,7764,7765,7766,7767,7768,7769,7770,7771,7772,7773,7774,7775,7776,7777,7778, # 7472 -7779,7780,7781,7782,7783,7784,7785,7786,7787,7788,7789,7790,7791,7792,7793,7794, # 7488 -7795,7796,7797,7798,7799,7800,7801,7802,7803,7804,7805,4854,7806,7807,7808,7809, # 7504 -7810,7811,7812,7813,7814,7815,7816,7817,7818,7819,7820,7821,7822,7823,7824,7825, # 7520 -4855,7826,7827,7828,7829,7830,7831,7832,7833,7834,7835,7836,7837,7838,7839,7840, # 7536 -7841,7842,7843,7844,7845,7846,7847,3955,7848,7849,7850,7851,7852,7853,7854,7855, # 7552 -7856,7857,7858,7859,7860,3444,7861,7862,7863,7864,7865,7866,7867,7868,7869,7870, # 7568 -7871,7872,7873,7874,7875,7876,7877,7878,7879,7880,7881,7882,7883,7884,7885,7886, # 7584 -7887,7888,7889,7890,7891,4175,7892,7893,7894,7895,7896,4856,4857,7897,7898,7899, # 7600 -7900,2598,7901,7902,7903,7904,7905,7906,7907,7908,4455,7909,7910,7911,7912,7913, # 7616 -7914,3201,7915,7916,7917,7918,7919,7920,7921,4858,7922,7923,7924,7925,7926,7927, # 7632 -7928,7929,7930,7931,7932,7933,7934,7935,7936,7937,7938,7939,7940,7941,7942,7943, # 7648 -7944,7945,7946,7947,7948,7949,7950,7951,7952,7953,7954,7955,7956,7957,7958,7959, # 7664 -7960,7961,7962,7963,7964,7965,7966,7967,7968,7969,7970,7971,7972,7973,7974,7975, # 7680 -7976,7977,7978,7979,7980,7981,4859,7982,7983,7984,7985,7986,7987,7988,7989,7990, # 7696 -7991,7992,7993,7994,7995,7996,4860,7997,7998,7999,8000,8001,8002,8003,8004,8005, # 7712 -8006,8007,8008,8009,8010,8011,8012,8013,8014,8015,8016,4176,8017,8018,8019,8020, # 7728 -8021,8022,8023,4861,8024,8025,8026,8027,8028,8029,8030,8031,8032,8033,8034,8035, # 7744 -8036,4862,4456,8037,8038,8039,8040,4863,8041,8042,8043,8044,8045,8046,8047,8048, # 7760 -8049,8050,8051,8052,8053,8054,8055,8056,8057,8058,8059,8060,8061,8062,8063,8064, # 7776 -8065,8066,8067,8068,8069,8070,8071,8072,8073,8074,8075,8076,8077,8078,8079,8080, # 7792 -8081,8082,8083,8084,8085,8086,8087,8088,8089,8090,8091,8092,8093,8094,8095,8096, # 7808 -8097,8098,8099,4864,4177,8100,8101,8102,8103,8104,8105,8106,8107,8108,8109,8110, # 7824 -8111,8112,8113,8114,8115,8116,8117,8118,8119,8120,4178,8121,8122,8123,8124,8125, # 7840 -8126,8127,8128,8129,8130,8131,8132,8133,8134,8135,8136,8137,8138,8139,8140,8141, # 7856 -8142,8143,8144,8145,4865,4866,8146,8147,8148,8149,8150,8151,8152,8153,8154,8155, # 7872 -8156,8157,8158,8159,8160,8161,8162,8163,8164,8165,4179,8166,8167,8168,8169,8170, # 7888 -8171,8172,8173,8174,8175,8176,8177,8178,8179,8180,8181,4457,8182,8183,8184,8185, # 7904 -8186,8187,8188,8189,8190,8191,8192,8193,8194,8195,8196,8197,8198,8199,8200,8201, # 7920 -8202,8203,8204,8205,8206,8207,8208,8209,8210,8211,8212,8213,8214,8215,8216,8217, # 7936 -8218,8219,8220,8221,8222,8223,8224,8225,8226,8227,8228,8229,8230,8231,8232,8233, # 7952 -8234,8235,8236,8237,8238,8239,8240,8241,8242,8243,8244,8245,8246,8247,8248,8249, # 7968 -8250,8251,8252,8253,8254,8255,8256,3445,8257,8258,8259,8260,8261,8262,4458,8263, # 7984 -8264,8265,8266,8267,8268,8269,8270,8271,8272,4459,8273,8274,8275,8276,3550,8277, # 8000 -8278,8279,8280,8281,8282,8283,8284,8285,8286,8287,8288,8289,4460,8290,8291,8292, # 8016 -8293,8294,8295,8296,8297,8298,8299,8300,8301,8302,8303,8304,8305,8306,8307,4867, # 8032 -8308,8309,8310,8311,8312,3551,8313,8314,8315,8316,8317,8318,8319,8320,8321,8322, # 8048 -8323,8324,8325,8326,4868,8327,8328,8329,8330,8331,8332,8333,8334,8335,8336,8337, # 8064 -8338,8339,8340,8341,8342,8343,8344,8345,8346,8347,8348,8349,8350,8351,8352,8353, # 8080 -8354,8355,8356,8357,8358,8359,8360,8361,8362,8363,4869,4461,8364,8365,8366,8367, # 8096 -8368,8369,8370,4870,8371,8372,8373,8374,8375,8376,8377,8378,8379,8380,8381,8382, # 8112 -8383,8384,8385,8386,8387,8388,8389,8390,8391,8392,8393,8394,8395,8396,8397,8398, # 8128 -8399,8400,8401,8402,8403,8404,8405,8406,8407,8408,8409,8410,4871,8411,8412,8413, # 8144 -8414,8415,8416,8417,8418,8419,8420,8421,8422,4462,8423,8424,8425,8426,8427,8428, # 8160 -8429,8430,8431,8432,8433,2986,8434,8435,8436,8437,8438,8439,8440,8441,8442,8443, # 8176 -8444,8445,8446,8447,8448,8449,8450,8451,8452,8453,8454,8455,8456,8457,8458,8459, # 8192 -8460,8461,8462,8463,8464,8465,8466,8467,8468,8469,8470,8471,8472,8473,8474,8475, # 8208 -8476,8477,8478,4180,8479,8480,8481,8482,8483,8484,8485,8486,8487,8488,8489,8490, # 8224 -8491,8492,8493,8494,8495,8496,8497,8498,8499,8500,8501,8502,8503,8504,8505,8506, # 8240 -8507,8508,8509,8510,8511,8512,8513,8514,8515,8516,8517,8518,8519,8520,8521,8522, # 8256 -8523,8524,8525,8526,8527,8528,8529,8530,8531,8532,8533,8534,8535,8536,8537,8538, # 8272 -8539,8540,8541,8542,8543,8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,8554, # 8288 -8555,8556,8557,8558,8559,8560,8561,8562,8563,8564,4872,8565,8566,8567,8568,8569, # 8304 -8570,8571,8572,8573,4873,8574,8575,8576,8577,8578,8579,8580,8581,8582,8583,8584, # 8320 -8585,8586,8587,8588,8589,8590,8591,8592,8593,8594,8595,8596,8597,8598,8599,8600, # 8336 -8601,8602,8603,8604,8605,3803,8606,8607,8608,8609,8610,8611,8612,8613,4874,3804, # 8352 -8614,8615,8616,8617,8618,8619,8620,8621,3956,8622,8623,8624,8625,8626,8627,8628, # 8368 -8629,8630,8631,8632,8633,8634,8635,8636,8637,8638,2865,8639,8640,8641,8642,8643, # 8384 -8644,8645,8646,8647,8648,8649,8650,8651,8652,8653,8654,8655,8656,4463,8657,8658, # 8400 -8659,4875,4876,8660,8661,8662,8663,8664,8665,8666,8667,8668,8669,8670,8671,8672, # 8416 -8673,8674,8675,8676,8677,8678,8679,8680,8681,4464,8682,8683,8684,8685,8686,8687, # 8432 -8688,8689,8690,8691,8692,8693,8694,8695,8696,8697,8698,8699,8700,8701,8702,8703, # 8448 -8704,8705,8706,8707,8708,8709,2261,8710,8711,8712,8713,8714,8715,8716,8717,8718, # 8464 -8719,8720,8721,8722,8723,8724,8725,8726,8727,8728,8729,8730,8731,8732,8733,4181, # 8480 -8734,8735,8736,8737,8738,8739,8740,8741,8742,8743,8744,8745,8746,8747,8748,8749, # 8496 -8750,8751,8752,8753,8754,8755,8756,8757,8758,8759,8760,8761,8762,8763,4877,8764, # 8512 -8765,8766,8767,8768,8769,8770,8771,8772,8773,8774,8775,8776,8777,8778,8779,8780, # 8528 -8781,8782,8783,8784,8785,8786,8787,8788,4878,8789,4879,8790,8791,8792,4880,8793, # 8544 -8794,8795,8796,8797,8798,8799,8800,8801,4881,8802,8803,8804,8805,8806,8807,8808, # 8560 -8809,8810,8811,8812,8813,8814,8815,3957,8816,8817,8818,8819,8820,8821,8822,8823, # 8576 -8824,8825,8826,8827,8828,8829,8830,8831,8832,8833,8834,8835,8836,8837,8838,8839, # 8592 -8840,8841,8842,8843,8844,8845,8846,8847,4882,8848,8849,8850,8851,8852,8853,8854, # 8608 -8855,8856,8857,8858,8859,8860,8861,8862,8863,8864,8865,8866,8867,8868,8869,8870, # 8624 -8871,8872,8873,8874,8875,8876,8877,8878,8879,8880,8881,8882,8883,8884,3202,8885, # 8640 -8886,8887,8888,8889,8890,8891,8892,8893,8894,8895,8896,8897,8898,8899,8900,8901, # 8656 -8902,8903,8904,8905,8906,8907,8908,8909,8910,8911,8912,8913,8914,8915,8916,8917, # 8672 -8918,8919,8920,8921,8922,8923,8924,4465,8925,8926,8927,8928,8929,8930,8931,8932, # 8688 -4883,8933,8934,8935,8936,8937,8938,8939,8940,8941,8942,8943,2214,8944,8945,8946, # 8704 -8947,8948,8949,8950,8951,8952,8953,8954,8955,8956,8957,8958,8959,8960,8961,8962, # 8720 -8963,8964,8965,4884,8966,8967,8968,8969,8970,8971,8972,8973,8974,8975,8976,8977, # 8736 -8978,8979,8980,8981,8982,8983,8984,8985,8986,8987,8988,8989,8990,8991,8992,4885, # 8752 -8993,8994,8995,8996,8997,8998,8999,9000,9001,9002,9003,9004,9005,9006,9007,9008, # 8768 -9009,9010,9011,9012,9013,9014,9015,9016,9017,9018,9019,9020,9021,4182,9022,9023, # 8784 -9024,9025,9026,9027,9028,9029,9030,9031,9032,9033,9034,9035,9036,9037,9038,9039, # 8800 -9040,9041,9042,9043,9044,9045,9046,9047,9048,9049,9050,9051,9052,9053,9054,9055, # 8816 -9056,9057,9058,9059,9060,9061,9062,9063,4886,9064,9065,9066,9067,9068,9069,4887, # 8832 -9070,9071,9072,9073,9074,9075,9076,9077,9078,9079,9080,9081,9082,9083,9084,9085, # 8848 -9086,9087,9088,9089,9090,9091,9092,9093,9094,9095,9096,9097,9098,9099,9100,9101, # 8864 -9102,9103,9104,9105,9106,9107,9108,9109,9110,9111,9112,9113,9114,9115,9116,9117, # 8880 -9118,9119,9120,9121,9122,9123,9124,9125,9126,9127,9128,9129,9130,9131,9132,9133, # 8896 -9134,9135,9136,9137,9138,9139,9140,9141,3958,9142,9143,9144,9145,9146,9147,9148, # 8912 -9149,9150,9151,4888,9152,9153,9154,9155,9156,9157,9158,9159,9160,9161,9162,9163, # 8928 -9164,9165,9166,9167,9168,9169,9170,9171,9172,9173,9174,9175,4889,9176,9177,9178, # 8944 -9179,9180,9181,9182,9183,9184,9185,9186,9187,9188,9189,9190,9191,9192,9193,9194, # 8960 -9195,9196,9197,9198,9199,9200,9201,9202,9203,4890,9204,9205,9206,9207,9208,9209, # 8976 -9210,9211,9212,9213,9214,9215,9216,9217,9218,9219,9220,9221,9222,4466,9223,9224, # 8992 -9225,9226,9227,9228,9229,9230,9231,9232,9233,9234,9235,9236,9237,9238,9239,9240, # 9008 -9241,9242,9243,9244,9245,4891,9246,9247,9248,9249,9250,9251,9252,9253,9254,9255, # 9024 -9256,9257,4892,9258,9259,9260,9261,4893,4894,9262,9263,9264,9265,9266,9267,9268, # 9040 -9269,9270,9271,9272,9273,4467,9274,9275,9276,9277,9278,9279,9280,9281,9282,9283, # 9056 -9284,9285,3673,9286,9287,9288,9289,9290,9291,9292,9293,9294,9295,9296,9297,9298, # 9072 -9299,9300,9301,9302,9303,9304,9305,9306,9307,9308,9309,9310,9311,9312,9313,9314, # 9088 -9315,9316,9317,9318,9319,9320,9321,9322,4895,9323,9324,9325,9326,9327,9328,9329, # 9104 -9330,9331,9332,9333,9334,9335,9336,9337,9338,9339,9340,9341,9342,9343,9344,9345, # 9120 -9346,9347,4468,9348,9349,9350,9351,9352,9353,9354,9355,9356,9357,9358,9359,9360, # 9136 -9361,9362,9363,9364,9365,9366,9367,9368,9369,9370,9371,9372,9373,4896,9374,4469, # 9152 -9375,9376,9377,9378,9379,4897,9380,9381,9382,9383,9384,9385,9386,9387,9388,9389, # 9168 -9390,9391,9392,9393,9394,9395,9396,9397,9398,9399,9400,9401,9402,9403,9404,9405, # 9184 -9406,4470,9407,2751,9408,9409,3674,3552,9410,9411,9412,9413,9414,9415,9416,9417, # 9200 -9418,9419,9420,9421,4898,9422,9423,9424,9425,9426,9427,9428,9429,3959,9430,9431, # 9216 -9432,9433,9434,9435,9436,4471,9437,9438,9439,9440,9441,9442,9443,9444,9445,9446, # 9232 -9447,9448,9449,9450,3348,9451,9452,9453,9454,9455,9456,9457,9458,9459,9460,9461, # 9248 -9462,9463,9464,9465,9466,9467,9468,9469,9470,9471,9472,4899,9473,9474,9475,9476, # 9264 -9477,4900,9478,9479,9480,9481,9482,9483,9484,9485,9486,9487,9488,3349,9489,9490, # 9280 -9491,9492,9493,9494,9495,9496,9497,9498,9499,9500,9501,9502,9503,9504,9505,9506, # 9296 -9507,9508,9509,9510,9511,9512,9513,9514,9515,9516,9517,9518,9519,9520,4901,9521, # 9312 -9522,9523,9524,9525,9526,4902,9527,9528,9529,9530,9531,9532,9533,9534,9535,9536, # 9328 -9537,9538,9539,9540,9541,9542,9543,9544,9545,9546,9547,9548,9549,9550,9551,9552, # 9344 -9553,9554,9555,9556,9557,9558,9559,9560,9561,9562,9563,9564,9565,9566,9567,9568, # 9360 -9569,9570,9571,9572,9573,9574,9575,9576,9577,9578,9579,9580,9581,9582,9583,9584, # 9376 -3805,9585,9586,9587,9588,9589,9590,9591,9592,9593,9594,9595,9596,9597,9598,9599, # 9392 -9600,9601,9602,4903,9603,9604,9605,9606,9607,4904,9608,9609,9610,9611,9612,9613, # 9408 -9614,4905,9615,9616,9617,9618,9619,9620,9621,9622,9623,9624,9625,9626,9627,9628, # 9424 -9629,9630,9631,9632,4906,9633,9634,9635,9636,9637,9638,9639,9640,9641,9642,9643, # 9440 -4907,9644,9645,9646,9647,9648,9649,9650,9651,9652,9653,9654,9655,9656,9657,9658, # 9456 -9659,9660,9661,9662,9663,9664,9665,9666,9667,9668,9669,9670,9671,9672,4183,9673, # 9472 -9674,9675,9676,9677,4908,9678,9679,9680,9681,4909,9682,9683,9684,9685,9686,9687, # 9488 -9688,9689,9690,4910,9691,9692,9693,3675,9694,9695,9696,2945,9697,9698,9699,9700, # 9504 -9701,9702,9703,9704,9705,4911,9706,9707,9708,9709,9710,9711,9712,9713,9714,9715, # 9520 -9716,9717,9718,9719,9720,9721,9722,9723,9724,9725,9726,9727,9728,9729,9730,9731, # 9536 -9732,9733,9734,9735,4912,9736,9737,9738,9739,9740,4913,9741,9742,9743,9744,9745, # 9552 -9746,9747,9748,9749,9750,9751,9752,9753,9754,9755,9756,9757,9758,4914,9759,9760, # 9568 -9761,9762,9763,9764,9765,9766,9767,9768,9769,9770,9771,9772,9773,9774,9775,9776, # 9584 -9777,9778,9779,9780,9781,9782,4915,9783,9784,9785,9786,9787,9788,9789,9790,9791, # 9600 -9792,9793,4916,9794,9795,9796,9797,9798,9799,9800,9801,9802,9803,9804,9805,9806, # 9616 -9807,9808,9809,9810,9811,9812,9813,9814,9815,9816,9817,9818,9819,9820,9821,9822, # 9632 -9823,9824,9825,9826,9827,9828,9829,9830,9831,9832,9833,9834,9835,9836,9837,9838, # 9648 -9839,9840,9841,9842,9843,9844,9845,9846,9847,9848,9849,9850,9851,9852,9853,9854, # 9664 -9855,9856,9857,9858,9859,9860,9861,9862,9863,9864,9865,9866,9867,9868,4917,9869, # 9680 -9870,9871,9872,9873,9874,9875,9876,9877,9878,9879,9880,9881,9882,9883,9884,9885, # 9696 -9886,9887,9888,9889,9890,9891,9892,4472,9893,9894,9895,9896,9897,3806,9898,9899, # 9712 -9900,9901,9902,9903,9904,9905,9906,9907,9908,9909,9910,9911,9912,9913,9914,4918, # 9728 -9915,9916,9917,4919,9918,9919,9920,9921,4184,9922,9923,9924,9925,9926,9927,9928, # 9744 -9929,9930,9931,9932,9933,9934,9935,9936,9937,9938,9939,9940,9941,9942,9943,9944, # 9760 -9945,9946,4920,9947,9948,9949,9950,9951,9952,9953,9954,9955,4185,9956,9957,9958, # 9776 -9959,9960,9961,9962,9963,9964,9965,4921,9966,9967,9968,4473,9969,9970,9971,9972, # 9792 -9973,9974,9975,9976,9977,4474,9978,9979,9980,9981,9982,9983,9984,9985,9986,9987, # 9808 -9988,9989,9990,9991,9992,9993,9994,9995,9996,9997,9998,9999,10000,10001,10002,10003, # 9824 -10004,10005,10006,10007,10008,10009,10010,10011,10012,10013,10014,10015,10016,10017,10018,10019, # 9840 -10020,10021,4922,10022,4923,10023,10024,10025,10026,10027,10028,10029,10030,10031,10032,10033, # 9856 -10034,10035,10036,10037,10038,10039,10040,10041,10042,10043,10044,10045,10046,10047,10048,4924, # 9872 -10049,10050,10051,10052,10053,10054,10055,10056,10057,10058,10059,10060,10061,10062,10063,10064, # 9888 -10065,10066,10067,10068,10069,10070,10071,10072,10073,10074,10075,10076,10077,10078,10079,10080, # 9904 -10081,10082,10083,10084,10085,10086,10087,4475,10088,10089,10090,10091,10092,10093,10094,10095, # 9920 -10096,10097,4476,10098,10099,10100,10101,10102,10103,10104,10105,10106,10107,10108,10109,10110, # 9936 -10111,2174,10112,10113,10114,10115,10116,10117,10118,10119,10120,10121,10122,10123,10124,10125, # 9952 -10126,10127,10128,10129,10130,10131,10132,10133,10134,10135,10136,10137,10138,10139,10140,3807, # 9968 -4186,4925,10141,10142,10143,10144,10145,10146,10147,4477,4187,10148,10149,10150,10151,10152, # 9984 -10153,4188,10154,10155,10156,10157,10158,10159,10160,10161,4926,10162,10163,10164,10165,10166, #10000 -10167,10168,10169,10170,10171,10172,10173,10174,10175,10176,10177,10178,10179,10180,10181,10182, #10016 -10183,10184,10185,10186,10187,10188,10189,10190,10191,10192,3203,10193,10194,10195,10196,10197, #10032 -10198,10199,10200,4478,10201,10202,10203,10204,4479,10205,10206,10207,10208,10209,10210,10211, #10048 -10212,10213,10214,10215,10216,10217,10218,10219,10220,10221,10222,10223,10224,10225,10226,10227, #10064 -10228,10229,10230,10231,10232,10233,10234,4927,10235,10236,10237,10238,10239,10240,10241,10242, #10080 -10243,10244,10245,10246,10247,10248,10249,10250,10251,10252,10253,10254,10255,10256,10257,10258, #10096 -10259,10260,10261,10262,10263,10264,10265,10266,10267,10268,10269,10270,10271,10272,10273,4480, #10112 -4928,4929,10274,10275,10276,10277,10278,10279,10280,10281,10282,10283,10284,10285,10286,10287, #10128 -10288,10289,10290,10291,10292,10293,10294,10295,10296,10297,10298,10299,10300,10301,10302,10303, #10144 -10304,10305,10306,10307,10308,10309,10310,10311,10312,10313,10314,10315,10316,10317,10318,10319, #10160 -10320,10321,10322,10323,10324,10325,10326,10327,10328,10329,10330,10331,10332,10333,10334,4930, #10176 -10335,10336,10337,10338,10339,10340,10341,10342,4931,10343,10344,10345,10346,10347,10348,10349, #10192 -10350,10351,10352,10353,10354,10355,3088,10356,2786,10357,10358,10359,10360,4189,10361,10362, #10208 -10363,10364,10365,10366,10367,10368,10369,10370,10371,10372,10373,10374,10375,4932,10376,10377, #10224 -10378,10379,10380,10381,10382,10383,10384,10385,10386,10387,10388,10389,10390,10391,10392,4933, #10240 -10393,10394,10395,4934,10396,10397,10398,10399,10400,10401,10402,10403,10404,10405,10406,10407, #10256 -10408,10409,10410,10411,10412,3446,10413,10414,10415,10416,10417,10418,10419,10420,10421,10422, #10272 -10423,4935,10424,10425,10426,10427,10428,10429,10430,4936,10431,10432,10433,10434,10435,10436, #10288 -10437,10438,10439,10440,10441,10442,10443,4937,10444,10445,10446,10447,4481,10448,10449,10450, #10304 -10451,10452,10453,10454,10455,10456,10457,10458,10459,10460,10461,10462,10463,10464,10465,10466, #10320 -10467,10468,10469,10470,10471,10472,10473,10474,10475,10476,10477,10478,10479,10480,10481,10482, #10336 -10483,10484,10485,10486,10487,10488,10489,10490,10491,10492,10493,10494,10495,10496,10497,10498, #10352 -10499,10500,10501,10502,10503,10504,10505,4938,10506,10507,10508,10509,10510,2552,10511,10512, #10368 -10513,10514,10515,10516,3447,10517,10518,10519,10520,10521,10522,10523,10524,10525,10526,10527, #10384 -10528,10529,10530,10531,10532,10533,10534,10535,10536,10537,10538,10539,10540,10541,10542,10543, #10400 -4482,10544,4939,10545,10546,10547,10548,10549,10550,10551,10552,10553,10554,10555,10556,10557, #10416 -10558,10559,10560,10561,10562,10563,10564,10565,10566,10567,3676,4483,10568,10569,10570,10571, #10432 -10572,3448,10573,10574,10575,10576,10577,10578,10579,10580,10581,10582,10583,10584,10585,10586, #10448 -10587,10588,10589,10590,10591,10592,10593,10594,10595,10596,10597,10598,10599,10600,10601,10602, #10464 -10603,10604,10605,10606,10607,10608,10609,10610,10611,10612,10613,10614,10615,10616,10617,10618, #10480 -10619,10620,10621,10622,10623,10624,10625,10626,10627,4484,10628,10629,10630,10631,10632,4940, #10496 -10633,10634,10635,10636,10637,10638,10639,10640,10641,10642,10643,10644,10645,10646,10647,10648, #10512 -10649,10650,10651,10652,10653,10654,10655,10656,4941,10657,10658,10659,2599,10660,10661,10662, #10528 -10663,10664,10665,10666,3089,10667,10668,10669,10670,10671,10672,10673,10674,10675,10676,10677, #10544 -10678,10679,10680,4942,10681,10682,10683,10684,10685,10686,10687,10688,10689,10690,10691,10692, #10560 -10693,10694,10695,10696,10697,4485,10698,10699,10700,10701,10702,10703,10704,4943,10705,3677, #10576 -10706,10707,10708,10709,10710,10711,10712,4944,10713,10714,10715,10716,10717,10718,10719,10720, #10592 -10721,10722,10723,10724,10725,10726,10727,10728,4945,10729,10730,10731,10732,10733,10734,10735, #10608 -10736,10737,10738,10739,10740,10741,10742,10743,10744,10745,10746,10747,10748,10749,10750,10751, #10624 -10752,10753,10754,10755,10756,10757,10758,10759,10760,10761,4946,10762,10763,10764,10765,10766, #10640 -10767,4947,4948,10768,10769,10770,10771,10772,10773,10774,10775,10776,10777,10778,10779,10780, #10656 -10781,10782,10783,10784,10785,10786,10787,10788,10789,10790,10791,10792,10793,10794,10795,10796, #10672 -10797,10798,10799,10800,10801,10802,10803,10804,10805,10806,10807,10808,10809,10810,10811,10812, #10688 -10813,10814,10815,10816,10817,10818,10819,10820,10821,10822,10823,10824,10825,10826,10827,10828, #10704 -10829,10830,10831,10832,10833,10834,10835,10836,10837,10838,10839,10840,10841,10842,10843,10844, #10720 -10845,10846,10847,10848,10849,10850,10851,10852,10853,10854,10855,10856,10857,10858,10859,10860, #10736 -10861,10862,10863,10864,10865,10866,10867,10868,10869,10870,10871,10872,10873,10874,10875,10876, #10752 -10877,10878,4486,10879,10880,10881,10882,10883,10884,10885,4949,10886,10887,10888,10889,10890, #10768 -10891,10892,10893,10894,10895,10896,10897,10898,10899,10900,10901,10902,10903,10904,10905,10906, #10784 -10907,10908,10909,10910,10911,10912,10913,10914,10915,10916,10917,10918,10919,4487,10920,10921, #10800 -10922,10923,10924,10925,10926,10927,10928,10929,10930,10931,10932,4950,10933,10934,10935,10936, #10816 -10937,10938,10939,10940,10941,10942,10943,10944,10945,10946,10947,10948,10949,4488,10950,10951, #10832 -10952,10953,10954,10955,10956,10957,10958,10959,4190,10960,10961,10962,10963,10964,10965,10966, #10848 -10967,10968,10969,10970,10971,10972,10973,10974,10975,10976,10977,10978,10979,10980,10981,10982, #10864 -10983,10984,10985,10986,10987,10988,10989,10990,10991,10992,10993,10994,10995,10996,10997,10998, #10880 -10999,11000,11001,11002,11003,11004,11005,11006,3960,11007,11008,11009,11010,11011,11012,11013, #10896 -11014,11015,11016,11017,11018,11019,11020,11021,11022,11023,11024,11025,11026,11027,11028,11029, #10912 -11030,11031,11032,4951,11033,11034,11035,11036,11037,11038,11039,11040,11041,11042,11043,11044, #10928 -11045,11046,11047,4489,11048,11049,11050,11051,4952,11052,11053,11054,11055,11056,11057,11058, #10944 -4953,11059,11060,11061,11062,11063,11064,11065,11066,11067,11068,11069,11070,11071,4954,11072, #10960 -11073,11074,11075,11076,11077,11078,11079,11080,11081,11082,11083,11084,11085,11086,11087,11088, #10976 -11089,11090,11091,11092,11093,11094,11095,11096,11097,11098,11099,11100,11101,11102,11103,11104, #10992 -11105,11106,11107,11108,11109,11110,11111,11112,11113,11114,11115,3808,11116,11117,11118,11119, #11008 -11120,11121,11122,11123,11124,11125,11126,11127,11128,11129,11130,11131,11132,11133,11134,4955, #11024 -11135,11136,11137,11138,11139,11140,11141,11142,11143,11144,11145,11146,11147,11148,11149,11150, #11040 -11151,11152,11153,11154,11155,11156,11157,11158,11159,11160,11161,4956,11162,11163,11164,11165, #11056 -11166,11167,11168,11169,11170,11171,11172,11173,11174,11175,11176,11177,11178,11179,11180,4957, #11072 -11181,11182,11183,11184,11185,11186,4958,11187,11188,11189,11190,11191,11192,11193,11194,11195, #11088 -11196,11197,11198,11199,11200,3678,11201,11202,11203,11204,11205,11206,4191,11207,11208,11209, #11104 -11210,11211,11212,11213,11214,11215,11216,11217,11218,11219,11220,11221,11222,11223,11224,11225, #11120 -11226,11227,11228,11229,11230,11231,11232,11233,11234,11235,11236,11237,11238,11239,11240,11241, #11136 -11242,11243,11244,11245,11246,11247,11248,11249,11250,11251,4959,11252,11253,11254,11255,11256, #11152 -11257,11258,11259,11260,11261,11262,11263,11264,11265,11266,11267,11268,11269,11270,11271,11272, #11168 -11273,11274,11275,11276,11277,11278,11279,11280,11281,11282,11283,11284,11285,11286,11287,11288, #11184 -11289,11290,11291,11292,11293,11294,11295,11296,11297,11298,11299,11300,11301,11302,11303,11304, #11200 -11305,11306,11307,11308,11309,11310,11311,11312,11313,11314,3679,11315,11316,11317,11318,4490, #11216 -11319,11320,11321,11322,11323,11324,11325,11326,11327,11328,11329,11330,11331,11332,11333,11334, #11232 -11335,11336,11337,11338,11339,11340,11341,11342,11343,11344,11345,11346,11347,4960,11348,11349, #11248 -11350,11351,11352,11353,11354,11355,11356,11357,11358,11359,11360,11361,11362,11363,11364,11365, #11264 -11366,11367,11368,11369,11370,11371,11372,11373,11374,11375,11376,11377,3961,4961,11378,11379, #11280 -11380,11381,11382,11383,11384,11385,11386,11387,11388,11389,11390,11391,11392,11393,11394,11395, #11296 -11396,11397,4192,11398,11399,11400,11401,11402,11403,11404,11405,11406,11407,11408,11409,11410, #11312 -11411,4962,11412,11413,11414,11415,11416,11417,11418,11419,11420,11421,11422,11423,11424,11425, #11328 -11426,11427,11428,11429,11430,11431,11432,11433,11434,11435,11436,11437,11438,11439,11440,11441, #11344 -11442,11443,11444,11445,11446,11447,11448,11449,11450,11451,11452,11453,11454,11455,11456,11457, #11360 -11458,11459,11460,11461,11462,11463,11464,11465,11466,11467,11468,11469,4963,11470,11471,4491, #11376 -11472,11473,11474,11475,4964,11476,11477,11478,11479,11480,11481,11482,11483,11484,11485,11486, #11392 -11487,11488,11489,11490,11491,11492,4965,11493,11494,11495,11496,11497,11498,11499,11500,11501, #11408 -11502,11503,11504,11505,11506,11507,11508,11509,11510,11511,11512,11513,11514,11515,11516,11517, #11424 -11518,11519,11520,11521,11522,11523,11524,11525,11526,11527,11528,11529,3962,11530,11531,11532, #11440 -11533,11534,11535,11536,11537,11538,11539,11540,11541,11542,11543,11544,11545,11546,11547,11548, #11456 -11549,11550,11551,11552,11553,11554,11555,11556,11557,11558,11559,11560,11561,11562,11563,11564, #11472 -4193,4194,11565,11566,11567,11568,11569,11570,11571,11572,11573,11574,11575,11576,11577,11578, #11488 -11579,11580,11581,11582,11583,11584,11585,11586,11587,11588,11589,11590,11591,4966,4195,11592, #11504 -11593,11594,11595,11596,11597,11598,11599,11600,11601,11602,11603,11604,3090,11605,11606,11607, #11520 -11608,11609,11610,4967,11611,11612,11613,11614,11615,11616,11617,11618,11619,11620,11621,11622, #11536 -11623,11624,11625,11626,11627,11628,11629,11630,11631,11632,11633,11634,11635,11636,11637,11638, #11552 -11639,11640,11641,11642,11643,11644,11645,11646,11647,11648,11649,11650,11651,11652,11653,11654, #11568 -11655,11656,11657,11658,11659,11660,11661,11662,11663,11664,11665,11666,11667,11668,11669,11670, #11584 -11671,11672,11673,11674,4968,11675,11676,11677,11678,11679,11680,11681,11682,11683,11684,11685, #11600 -11686,11687,11688,11689,11690,11691,11692,11693,3809,11694,11695,11696,11697,11698,11699,11700, #11616 -11701,11702,11703,11704,11705,11706,11707,11708,11709,11710,11711,11712,11713,11714,11715,11716, #11632 -11717,11718,3553,11719,11720,11721,11722,11723,11724,11725,11726,11727,11728,11729,11730,4969, #11648 -11731,11732,11733,11734,11735,11736,11737,11738,11739,11740,4492,11741,11742,11743,11744,11745, #11664 -11746,11747,11748,11749,11750,11751,11752,4970,11753,11754,11755,11756,11757,11758,11759,11760, #11680 -11761,11762,11763,11764,11765,11766,11767,11768,11769,11770,11771,11772,11773,11774,11775,11776, #11696 -11777,11778,11779,11780,11781,11782,11783,11784,11785,11786,11787,11788,11789,11790,4971,11791, #11712 -11792,11793,11794,11795,11796,11797,4972,11798,11799,11800,11801,11802,11803,11804,11805,11806, #11728 -11807,11808,11809,11810,4973,11811,11812,11813,11814,11815,11816,11817,11818,11819,11820,11821, #11744 -11822,11823,11824,11825,11826,11827,11828,11829,11830,11831,11832,11833,11834,3680,3810,11835, #11760 -11836,4974,11837,11838,11839,11840,11841,11842,11843,11844,11845,11846,11847,11848,11849,11850, #11776 -11851,11852,11853,11854,11855,11856,11857,11858,11859,11860,11861,11862,11863,11864,11865,11866, #11792 -11867,11868,11869,11870,11871,11872,11873,11874,11875,11876,11877,11878,11879,11880,11881,11882, #11808 -11883,11884,4493,11885,11886,11887,11888,11889,11890,11891,11892,11893,11894,11895,11896,11897, #11824 -11898,11899,11900,11901,11902,11903,11904,11905,11906,11907,11908,11909,11910,11911,11912,11913, #11840 -11914,11915,4975,11916,11917,11918,11919,11920,11921,11922,11923,11924,11925,11926,11927,11928, #11856 -11929,11930,11931,11932,11933,11934,11935,11936,11937,11938,11939,11940,11941,11942,11943,11944, #11872 -11945,11946,11947,11948,11949,4976,11950,11951,11952,11953,11954,11955,11956,11957,11958,11959, #11888 -11960,11961,11962,11963,11964,11965,11966,11967,11968,11969,11970,11971,11972,11973,11974,11975, #11904 -11976,11977,11978,11979,11980,11981,11982,11983,11984,11985,11986,11987,4196,11988,11989,11990, #11920 -11991,11992,4977,11993,11994,11995,11996,11997,11998,11999,12000,12001,12002,12003,12004,12005, #11936 -12006,12007,12008,12009,12010,12011,12012,12013,12014,12015,12016,12017,12018,12019,12020,12021, #11952 -12022,12023,12024,12025,12026,12027,12028,12029,12030,12031,12032,12033,12034,12035,12036,12037, #11968 -12038,12039,12040,12041,12042,12043,12044,12045,12046,12047,12048,12049,12050,12051,12052,12053, #11984 -12054,12055,12056,12057,12058,12059,12060,12061,4978,12062,12063,12064,12065,12066,12067,12068, #12000 -12069,12070,12071,12072,12073,12074,12075,12076,12077,12078,12079,12080,12081,12082,12083,12084, #12016 -12085,12086,12087,12088,12089,12090,12091,12092,12093,12094,12095,12096,12097,12098,12099,12100, #12032 -12101,12102,12103,12104,12105,12106,12107,12108,12109,12110,12111,12112,12113,12114,12115,12116, #12048 -12117,12118,12119,12120,12121,12122,12123,4979,12124,12125,12126,12127,12128,4197,12129,12130, #12064 -12131,12132,12133,12134,12135,12136,12137,12138,12139,12140,12141,12142,12143,12144,12145,12146, #12080 -12147,12148,12149,12150,12151,12152,12153,12154,4980,12155,12156,12157,12158,12159,12160,4494, #12096 -12161,12162,12163,12164,3811,12165,12166,12167,12168,12169,4495,12170,12171,4496,12172,12173, #12112 -12174,12175,12176,3812,12177,12178,12179,12180,12181,12182,12183,12184,12185,12186,12187,12188, #12128 -12189,12190,12191,12192,12193,12194,12195,12196,12197,12198,12199,12200,12201,12202,12203,12204, #12144 -12205,12206,12207,12208,12209,12210,12211,12212,12213,12214,12215,12216,12217,12218,12219,12220, #12160 -12221,4981,12222,12223,12224,12225,12226,12227,12228,12229,12230,12231,12232,12233,12234,12235, #12176 -4982,12236,12237,12238,12239,12240,12241,12242,12243,12244,12245,4983,12246,12247,12248,12249, #12192 -4984,12250,12251,12252,12253,12254,12255,12256,12257,12258,12259,12260,12261,12262,12263,12264, #12208 -4985,12265,4497,12266,12267,12268,12269,12270,12271,12272,12273,12274,12275,12276,12277,12278, #12224 -12279,12280,12281,12282,12283,12284,12285,12286,12287,4986,12288,12289,12290,12291,12292,12293, #12240 -12294,12295,12296,2473,12297,12298,12299,12300,12301,12302,12303,12304,12305,12306,12307,12308, #12256 -12309,12310,12311,12312,12313,12314,12315,12316,12317,12318,12319,3963,12320,12321,12322,12323, #12272 -12324,12325,12326,12327,12328,12329,12330,12331,12332,4987,12333,12334,12335,12336,12337,12338, #12288 -12339,12340,12341,12342,12343,12344,12345,12346,12347,12348,12349,12350,12351,12352,12353,12354, #12304 -12355,12356,12357,12358,12359,3964,12360,12361,12362,12363,12364,12365,12366,12367,12368,12369, #12320 -12370,3965,12371,12372,12373,12374,12375,12376,12377,12378,12379,12380,12381,12382,12383,12384, #12336 -12385,12386,12387,12388,12389,12390,12391,12392,12393,12394,12395,12396,12397,12398,12399,12400, #12352 -12401,12402,12403,12404,12405,12406,12407,12408,4988,12409,12410,12411,12412,12413,12414,12415, #12368 -12416,12417,12418,12419,12420,12421,12422,12423,12424,12425,12426,12427,12428,12429,12430,12431, #12384 -12432,12433,12434,12435,12436,12437,12438,3554,12439,12440,12441,12442,12443,12444,12445,12446, #12400 -12447,12448,12449,12450,12451,12452,12453,12454,12455,12456,12457,12458,12459,12460,12461,12462, #12416 -12463,12464,4989,12465,12466,12467,12468,12469,12470,12471,12472,12473,12474,12475,12476,12477, #12432 -12478,12479,12480,4990,12481,12482,12483,12484,12485,12486,12487,12488,12489,4498,12490,12491, #12448 -12492,12493,12494,12495,12496,12497,12498,12499,12500,12501,12502,12503,12504,12505,12506,12507, #12464 -12508,12509,12510,12511,12512,12513,12514,12515,12516,12517,12518,12519,12520,12521,12522,12523, #12480 -12524,12525,12526,12527,12528,12529,12530,12531,12532,12533,12534,12535,12536,12537,12538,12539, #12496 -12540,12541,12542,12543,12544,12545,12546,12547,12548,12549,12550,12551,4991,12552,12553,12554, #12512 -12555,12556,12557,12558,12559,12560,12561,12562,12563,12564,12565,12566,12567,12568,12569,12570, #12528 -12571,12572,12573,12574,12575,12576,12577,12578,3036,12579,12580,12581,12582,12583,3966,12584, #12544 -12585,12586,12587,12588,12589,12590,12591,12592,12593,12594,12595,12596,12597,12598,12599,12600, #12560 -12601,12602,12603,12604,12605,12606,12607,12608,12609,12610,12611,12612,12613,12614,12615,12616, #12576 -12617,12618,12619,12620,12621,12622,12623,12624,12625,12626,12627,12628,12629,12630,12631,12632, #12592 -12633,12634,12635,12636,12637,12638,12639,12640,12641,12642,12643,12644,12645,12646,4499,12647, #12608 -12648,12649,12650,12651,12652,12653,12654,12655,12656,12657,12658,12659,12660,12661,12662,12663, #12624 -12664,12665,12666,12667,12668,12669,12670,12671,12672,12673,12674,12675,12676,12677,12678,12679, #12640 -12680,12681,12682,12683,12684,12685,12686,12687,12688,12689,12690,12691,12692,12693,12694,12695, #12656 -12696,12697,12698,4992,12699,12700,12701,12702,12703,12704,12705,12706,12707,12708,12709,12710, #12672 -12711,12712,12713,12714,12715,12716,12717,12718,12719,12720,12721,12722,12723,12724,12725,12726, #12688 -12727,12728,12729,12730,12731,12732,12733,12734,12735,12736,12737,12738,12739,12740,12741,12742, #12704 -12743,12744,12745,12746,12747,12748,12749,12750,12751,12752,12753,12754,12755,12756,12757,12758, #12720 -12759,12760,12761,12762,12763,12764,12765,12766,12767,12768,12769,12770,12771,12772,12773,12774, #12736 -12775,12776,12777,12778,4993,2175,12779,12780,12781,12782,12783,12784,12785,12786,4500,12787, #12752 -12788,12789,12790,12791,12792,12793,12794,12795,12796,12797,12798,12799,12800,12801,12802,12803, #12768 -12804,12805,12806,12807,12808,12809,12810,12811,12812,12813,12814,12815,12816,12817,12818,12819, #12784 -12820,12821,12822,12823,12824,12825,12826,4198,3967,12827,12828,12829,12830,12831,12832,12833, #12800 -12834,12835,12836,12837,12838,12839,12840,12841,12842,12843,12844,12845,12846,12847,12848,12849, #12816 -12850,12851,12852,12853,12854,12855,12856,12857,12858,12859,12860,12861,4199,12862,12863,12864, #12832 -12865,12866,12867,12868,12869,12870,12871,12872,12873,12874,12875,12876,12877,12878,12879,12880, #12848 -12881,12882,12883,12884,12885,12886,12887,4501,12888,12889,12890,12891,12892,12893,12894,12895, #12864 -12896,12897,12898,12899,12900,12901,12902,12903,12904,12905,12906,12907,12908,12909,12910,12911, #12880 -12912,4994,12913,12914,12915,12916,12917,12918,12919,12920,12921,12922,12923,12924,12925,12926, #12896 -12927,12928,12929,12930,12931,12932,12933,12934,12935,12936,12937,12938,12939,12940,12941,12942, #12912 -12943,12944,12945,12946,12947,12948,12949,12950,12951,12952,12953,12954,12955,12956,1772,12957, #12928 -12958,12959,12960,12961,12962,12963,12964,12965,12966,12967,12968,12969,12970,12971,12972,12973, #12944 -12974,12975,12976,12977,12978,12979,12980,12981,12982,12983,12984,12985,12986,12987,12988,12989, #12960 -12990,12991,12992,12993,12994,12995,12996,12997,4502,12998,4503,12999,13000,13001,13002,13003, #12976 -4504,13004,13005,13006,13007,13008,13009,13010,13011,13012,13013,13014,13015,13016,13017,13018, #12992 -13019,13020,13021,13022,13023,13024,13025,13026,13027,13028,13029,3449,13030,13031,13032,13033, #13008 -13034,13035,13036,13037,13038,13039,13040,13041,13042,13043,13044,13045,13046,13047,13048,13049, #13024 -13050,13051,13052,13053,13054,13055,13056,13057,13058,13059,13060,13061,13062,13063,13064,13065, #13040 -13066,13067,13068,13069,13070,13071,13072,13073,13074,13075,13076,13077,13078,13079,13080,13081, #13056 -13082,13083,13084,13085,13086,13087,13088,13089,13090,13091,13092,13093,13094,13095,13096,13097, #13072 -13098,13099,13100,13101,13102,13103,13104,13105,13106,13107,13108,13109,13110,13111,13112,13113, #13088 -13114,13115,13116,13117,13118,3968,13119,4995,13120,13121,13122,13123,13124,13125,13126,13127, #13104 -4505,13128,13129,13130,13131,13132,13133,13134,4996,4506,13135,13136,13137,13138,13139,4997, #13120 -13140,13141,13142,13143,13144,13145,13146,13147,13148,13149,13150,13151,13152,13153,13154,13155, #13136 -13156,13157,13158,13159,4998,13160,13161,13162,13163,13164,13165,13166,13167,13168,13169,13170, #13152 -13171,13172,13173,13174,13175,13176,4999,13177,13178,13179,13180,13181,13182,13183,13184,13185, #13168 -13186,13187,13188,13189,13190,13191,13192,13193,13194,13195,13196,13197,13198,13199,13200,13201, #13184 -13202,13203,13204,13205,13206,5000,13207,13208,13209,13210,13211,13212,13213,13214,13215,13216, #13200 -13217,13218,13219,13220,13221,13222,13223,13224,13225,13226,13227,4200,5001,13228,13229,13230, #13216 -13231,13232,13233,13234,13235,13236,13237,13238,13239,13240,3969,13241,13242,13243,13244,3970, #13232 -13245,13246,13247,13248,13249,13250,13251,13252,13253,13254,13255,13256,13257,13258,13259,13260, #13248 -13261,13262,13263,13264,13265,13266,13267,13268,3450,13269,13270,13271,13272,13273,13274,13275, #13264 -13276,5002,13277,13278,13279,13280,13281,13282,13283,13284,13285,13286,13287,13288,13289,13290, #13280 -13291,13292,13293,13294,13295,13296,13297,13298,13299,13300,13301,13302,3813,13303,13304,13305, #13296 -13306,13307,13308,13309,13310,13311,13312,13313,13314,13315,13316,13317,13318,13319,13320,13321, #13312 -13322,13323,13324,13325,13326,13327,13328,4507,13329,13330,13331,13332,13333,13334,13335,13336, #13328 -13337,13338,13339,13340,13341,5003,13342,13343,13344,13345,13346,13347,13348,13349,13350,13351, #13344 -13352,13353,13354,13355,13356,13357,13358,13359,13360,13361,13362,13363,13364,13365,13366,13367, #13360 -5004,13368,13369,13370,13371,13372,13373,13374,13375,13376,13377,13378,13379,13380,13381,13382, #13376 -13383,13384,13385,13386,13387,13388,13389,13390,13391,13392,13393,13394,13395,13396,13397,13398, #13392 -13399,13400,13401,13402,13403,13404,13405,13406,13407,13408,13409,13410,13411,13412,13413,13414, #13408 -13415,13416,13417,13418,13419,13420,13421,13422,13423,13424,13425,13426,13427,13428,13429,13430, #13424 -13431,13432,4508,13433,13434,13435,4201,13436,13437,13438,13439,13440,13441,13442,13443,13444, #13440 -13445,13446,13447,13448,13449,13450,13451,13452,13453,13454,13455,13456,13457,5005,13458,13459, #13456 -13460,13461,13462,13463,13464,13465,13466,13467,13468,13469,13470,4509,13471,13472,13473,13474, #13472 -13475,13476,13477,13478,13479,13480,13481,13482,13483,13484,13485,13486,13487,13488,13489,13490, #13488 -13491,13492,13493,13494,13495,13496,13497,13498,13499,13500,13501,13502,13503,13504,13505,13506, #13504 -13507,13508,13509,13510,13511,13512,13513,13514,13515,13516,13517,13518,13519,13520,13521,13522, #13520 -13523,13524,13525,13526,13527,13528,13529,13530,13531,13532,13533,13534,13535,13536,13537,13538, #13536 -13539,13540,13541,13542,13543,13544,13545,13546,13547,13548,13549,13550,13551,13552,13553,13554, #13552 -13555,13556,13557,13558,13559,13560,13561,13562,13563,13564,13565,13566,13567,13568,13569,13570, #13568 -13571,13572,13573,13574,13575,13576,13577,13578,13579,13580,13581,13582,13583,13584,13585,13586, #13584 -13587,13588,13589,13590,13591,13592,13593,13594,13595,13596,13597,13598,13599,13600,13601,13602, #13600 -13603,13604,13605,13606,13607,13608,13609,13610,13611,13612,13613,13614,13615,13616,13617,13618, #13616 -13619,13620,13621,13622,13623,13624,13625,13626,13627,13628,13629,13630,13631,13632,13633,13634, #13632 -13635,13636,13637,13638,13639,13640,13641,13642,5006,13643,13644,13645,13646,13647,13648,13649, #13648 -13650,13651,5007,13652,13653,13654,13655,13656,13657,13658,13659,13660,13661,13662,13663,13664, #13664 -13665,13666,13667,13668,13669,13670,13671,13672,13673,13674,13675,13676,13677,13678,13679,13680, #13680 -13681,13682,13683,13684,13685,13686,13687,13688,13689,13690,13691,13692,13693,13694,13695,13696, #13696 -13697,13698,13699,13700,13701,13702,13703,13704,13705,13706,13707,13708,13709,13710,13711,13712, #13712 -13713,13714,13715,13716,13717,13718,13719,13720,13721,13722,13723,13724,13725,13726,13727,13728, #13728 -13729,13730,13731,13732,13733,13734,13735,13736,13737,13738,13739,13740,13741,13742,13743,13744, #13744 -13745,13746,13747,13748,13749,13750,13751,13752,13753,13754,13755,13756,13757,13758,13759,13760, #13760 -13761,13762,13763,13764,13765,13766,13767,13768,13769,13770,13771,13772,13773,13774,3273,13775, #13776 -13776,13777,13778,13779,13780,13781,13782,13783,13784,13785,13786,13787,13788,13789,13790,13791, #13792 -13792,13793,13794,13795,13796,13797,13798,13799,13800,13801,13802,13803,13804,13805,13806,13807, #13808 -13808,13809,13810,13811,13812,13813,13814,13815,13816,13817,13818,13819,13820,13821,13822,13823, #13824 -13824,13825,13826,13827,13828,13829,13830,13831,13832,13833,13834,13835,13836,13837,13838,13839, #13840 -13840,13841,13842,13843,13844,13845,13846,13847,13848,13849,13850,13851,13852,13853,13854,13855, #13856 -13856,13857,13858,13859,13860,13861,13862,13863,13864,13865,13866,13867,13868,13869,13870,13871, #13872 -13872,13873,13874,13875,13876,13877,13878,13879,13880,13881,13882,13883,13884,13885,13886,13887, #13888 -13888,13889,13890,13891,13892,13893,13894,13895,13896,13897,13898,13899,13900,13901,13902,13903, #13904 -13904,13905,13906,13907,13908,13909,13910,13911,13912,13913,13914,13915,13916,13917,13918,13919, #13920 -13920,13921,13922,13923,13924,13925,13926,13927,13928,13929,13930,13931,13932,13933,13934,13935, #13936 -13936,13937,13938,13939,13940,13941,13942,13943,13944,13945,13946,13947,13948,13949,13950,13951, #13952 -13952,13953,13954,13955,13956,13957,13958,13959,13960,13961,13962,13963,13964,13965,13966,13967, #13968 -13968,13969,13970,13971,13972 #13973 -].freeze -end diff --git a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/big5prober.rb b/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/big5prober.rb deleted file mode 100644 index bfce068d..00000000 --- a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/big5prober.rb +++ /dev/null @@ -1,42 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Jeff Hodges - port to Ruby -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -module CharDet - class Big5Prober < MultiByteCharSetProber - def initialize - super - @codingSM = CodingStateMachine.new(Big5SMModel) - @distributionAnalyzer = Big5DistributionAnalysis.new() - reset() - end - - def get_charset_name - return "Big5" - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/chardistribution.rb b/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/chardistribution.rb deleted file mode 100644 index 72398859..00000000 --- a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/chardistribution.rb +++ /dev/null @@ -1,250 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Jeff Hodges -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -module CharDet - ENOUGH_DATA_THRESHOLD = 1024 - SURE_YES = 0.99 - SURE_NO = 0.01 - - class CharDistributionAnalysis - def initialize - @charToFreqOrder = nil # Mapping table to get frequency order from char order (get from GetOrder()) - @tableSize = nil # Size of above table - @typicalDistributionRatio = nil # This is a constant value which varies from language to language, used in calculating confidence. See http://www.mozilla.org/projects/intl/UniversalCharsetDetection.html for further detail. - reset() - end - - def reset - # # """reset analyser, clear any state""" - @done = false # If this flag is set to constants.True, detection is done and conclusion has been made - @totalChars = 0 # Total characters encountered - @freqChars = 0 # The number of characters whose frequency order is less than 512 - end - - def feed(aStr, aCharLen) - # # """feed a character with known length""" - if aCharLen == 2 - # we only care about 2-bytes character in our distribution analysis - order = get_order(aStr) - else - order = -1 - end - if order >= 0 - @totalChars += 1 - # order is valid - if order < @tableSize - if 512 > @charToFreqOrder[order] - @freqChars += 1 - end - end - end - end - - def get_confidence - # """return confidence based on existing data""" - # if we didn't receive any character in our consideration range, return negative answer - if @totalChars <= 0 - return SURE_NO - end - - if @totalChars != @freqChars - r = @freqChars / ((@totalChars - @freqChars) * @typicalDistributionRatio) - if r < SURE_YES - return r - end - end - - # normalize confidence (we don't want to be 100% sure) - return SURE_YES - end - - def got_enough_data - # It is not necessary to receive all data to draw conclusion. For charset detection, - # certain amount of data is enough - return @totalChars > ENOUGH_DATA_THRESHOLD - end - - def get_order(aStr) - # We do not handle characters based on the original encoding string, but - # convert this encoding string to a number, here called order. - # This allows multiple encodings of a language to share one frequency table. - return -1 - end - end - - class EUCTWDistributionAnalysis < CharDistributionAnalysis - def initialize - super() - @charToFreqOrder = EUCTWCharToFreqOrder - @tableSize = EUCTW_TABLE_SIZE - @typicalDistributionRatio = EUCTW_TYPICAL_DISTRIBUTION_RATIO - end - - def get_order(aStr) - # for euc-TW encoding, we are interested - # first byte range: 0xc4 -- 0xfe - # second byte range: 0xa1 -- 0xfe - # no validation needed here. State machine has done that - if aStr[0, 1] >= "\xC4" - bytes = aStr.bytes.to_a - return 94 * (bytes[0] - 0xC4) + bytes[1] - 0xA1 - else - return -1 - end - end - - def get_confidence - if @freqChars <= MINIMUM_DATA_THRESHOLD - return SURE_NO - end - - super - end - end - - class EUCKRDistributionAnalysis < CharDistributionAnalysis - def initialize - super() - @charToFreqOrder = EUCKRCharToFreqOrder - @tableSize = EUCKR_TABLE_SIZE - @typicalDistributionRatio = EUCKR_TYPICAL_DISTRIBUTION_RATIO - end - - def get_order(aStr) - # for euc-KR encoding, we are interested - # first byte range: 0xb0 -- 0xfe - # second byte range: 0xa1 -- 0xfe - # no validation needed here. State machine has done that - if aStr[0, 1] >= "\xB0" - bytes = aStr.bytes.to_a - return 94 * (bytes[0] - 0xB0) + bytes[1] - 0xA1 - else - return -1 - end - end - end - - class GB18030DistributionAnalysis < CharDistributionAnalysis - def initialize - super() - @charToFreqOrder = GB18030CharToFreqOrder - @tableSize = GB18030_TABLE_SIZE - @typicalDistributionRatio = GB18030_TYPICAL_DISTRIBUTION_RATIO - end - - def get_order(aStr) - # for GB18030 encoding, we are interested - # first byte range: 0xb0 -- 0xfe - # second byte range: 0xa1 -- 0xfe - # no validation needed here. State machine has done that - if (aStr[0, 1] >= "\xB0") and (aStr[1, 1] >= "\xA1") - bytes = aStr.bytes.to_a - return 94 * (bytes[0] - 0xB0) + bytes[1] - 0xA1 - else - return -1 - end - end - end - - class Big5DistributionAnalysis < CharDistributionAnalysis - def initialize - super - @charToFreqOrder = Big5CharToFreqOrder - @tableSize = BIG5_TABLE_SIZE - @typicalDistributionRatio = BIG5_TYPICAL_DISTRIBUTION_RATIO - end - - def get_order(aStr) - # for big5 encoding, we are interested - # first byte range: 0xa4 -- 0xfe - # second byte range: 0x40 -- 0x7e , 0xa1 -- 0xfe - # no validation needed here. State machine has done that - if aStr[0, 1] >= "\xA4" - bytes = aStr.bytes.to_a - if aStr[1, 1] >= "\xA1" - return 157 * (bytes[0] - 0xA4) + bytes[1] - 0xA1 + 63 - else - return 157 * (bytes[0] - 0xA4) + bytes[1] - 0x40 - end - else - return -1 - end - end - end - - class SJISDistributionAnalysis < CharDistributionAnalysis - def initialize - super() - @charToFreqOrder = JISCharToFreqOrder - @tableSize = JIS_TABLE_SIZE - @typicalDistributionRatio = JIS_TYPICAL_DISTRIBUTION_RATIO - end - - def get_order(aStr) - # for sjis encoding, we are interested - # first byte range: 0x81 -- 0x9f , 0xe0 -- 0xfe - # second byte range: 0x40 -- 0x7e, 0x81 -- oxfe - # no validation needed here. State machine has done that - bytes = aStr.bytes.to_a - if (aStr[0, 1] >= "\x81") and (aStr[0, 1] <= "\x9F") - order = 188 * (bytes[0] - 0x81) - elsif (aStr[0, 1] >= "\xE0") and (aStr[0, 1] <= "\xEF") - order = 188 * (bytes[0] - 0xE0 + 31) - else - return -1 - end - order = order + bytes[1] - 0x40 - if aStr[1, 1] > "\x7F" - order =- 1 - end - return order - end - end - - class EUCJPDistributionAnalysis < CharDistributionAnalysis - def initialize - super() - @charToFreqOrder = JISCharToFreqOrder - @tableSize = JIS_TABLE_SIZE - @typicalDistributionRatio = JIS_TYPICAL_DISTRIBUTION_RATIO - end - - def get_order(aStr) - # for euc-JP encoding, we are interested - # first byte range: 0xa0 -- 0xfe - # second byte range: 0xa1 -- 0xfe - # no validation needed here. State machine has done that - if aStr[0, 1] >= "\xA0" - bytes = aStr.bytes.to_a - return 94 * (bytes[0] - 0xA1) + bytes[1] - 0xa1 - else - return -1 - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/charsetgroupprober.rb b/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/charsetgroupprober.rb deleted file mode 100644 index 1fb8f876..00000000 --- a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/charsetgroupprober.rb +++ /dev/null @@ -1,110 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Jeff Hodges - port to Ruby -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -module CharDet - class CharSetGroupProber < CharSetProber - attr_accessor :probers - def initialize - super - @activeNum = 0 - @probers = [] - @bestGuessProber = nil - end - - def reset - super - @activeNum = 0 - - for prober in @probers - if prober - prober.reset() - prober.active = true - @activeNum += 1 - end - end - @bestGuessProber = nil - end - - def get_charset_name - if !@bestGuessProber - get_confidence() - if !@bestGuessProber - return nil - end - end - return @bestGuessProber.get_charset_name() - end - - def feed(aBuf) - for prober in @probers - next unless prober - next unless prober.active - st = prober.feed(aBuf) - next unless st - if st == EFoundIt - @bestGuessProber = prober - return get_state() - elsif st == ENotMe - prober.active = false - @activeNum -= 1 - if @activeNum <= 0 - @state = ENotMe - return get_state() - end - end - end - return get_state() - end - - def get_confidence() - st = get_state() - if st == EFoundIt - return 0.99 - elsif st == ENotMe - return 0.01 - end - bestConf = 0.0 - @bestGuessProber = nil - for prober in @probers - next unless prober - unless prober.active - $stderr << "#{prober.get_charset_name()} not active\n" if $debug - next - end - cf = prober.get_confidence() - $stderr << "#{prober.get_charset_name} confidence = #{cf}\n" if $debug - if bestConf < cf - bestConf = cf - @bestGuessProber = prober - end - end - return 0.0 unless @bestGuessProber - return bestConf - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/charsetprober.rb b/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/charsetprober.rb deleted file mode 100644 index 1d2c6ae2..00000000 --- a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/charsetprober.rb +++ /dev/null @@ -1,70 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Universal charset detector code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 2001 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Jeff Hodges - port to Ruby -# Mark Pilgrim - port to Python -# Shy Shalom - original C code -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -module CharDet - class CharSetProber - attr_accessor :active - def initialize - end - - def reset - @state = EDetecting - end - - def get_charset_name - return nil - end - - def feed(aBuf) - end - - def get_state - return @state - end - - def get_confidence - return 0.0 - end - - def filter_high_bit_only(aBuf) - newBuf = aBuf.gsub(/([\x00-\x7F])+/, ' ') - return newBuf - end - - def filter_without_english_letters(aBuf) - newBuf = aBuf.gsub(/([A-Za-z])+/,' ') - return newBuf - end - - def filter_with_english_letters(aBuf) - # TODO - return aBuf - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/codingstatemachine.rb b/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/codingstatemachine.rb deleted file mode 100644 index 2218641c..00000000 --- a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/codingstatemachine.rb +++ /dev/null @@ -1,67 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is mozilla.org code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Jeff Hodges - port to Ruby -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -module CharDet - class CodingStateMachine - attr_accessor :active - - def initialize(sm) - @model = sm - @currentBytePos = 0 - @currentCharLen = 0 - reset() - end - - def reset - @currentState = EStart - end - - def next_state(c) - # for each byte we get its class - # if it is first byte, we also get byte length - b = c.bytes.first - byteCls = @model['classTable'][b] - if @currentState == EStart - @currentBytePos = 0 - @currentCharLen = @model['charLenTable'][byteCls] - end - # from byte's class and stateTable, we get its next state - @currentState = @model['stateTable'][@currentState * @model['classFactor'] + byteCls] - @currentBytePos += 1 - return @currentState - end - - def get_current_charlen - return @currentCharLen - end - - def get_coding_state_machine - return @model['name'] - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/constants.rb b/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/constants.rb deleted file mode 100644 index 156b4af7..00000000 --- a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/constants.rb +++ /dev/null @@ -1,42 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Universal charset detector code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 2001 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Jeff Hodges - port to Ruby -# Mark Pilgrim - port to Python -# Shy Shalom - original C code -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -module CharDet - $debug = false - - EDetecting = 0 - EFoundIt = 1 - ENotMe = 2 - - EStart = 0 - EError = 1 - EItsMe = 2 - - SHORTCUT_THRESHOLD = 0.95 -end diff --git a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/escprober.rb b/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/escprober.rb deleted file mode 100644 index aad310cb..00000000 --- a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/escprober.rb +++ /dev/null @@ -1,90 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is mozilla.org code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Jeff Hodges - port to Ruby -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -module CharDet - class EscCharSetProber < CharSetProber - def initialize - super() - @codingSM = [ - CodingStateMachine.new(HZSMModel), - CodingStateMachine.new(ISO2022CNSMModel), - CodingStateMachine.new(ISO2022JPSMModel), - CodingStateMachine.new(ISO2022KRSMModel) - ] - reset() - end - - def reset - super() - for codingSM in @codingSM - next if !codingSM - codingSM.active = true - codingSM.reset() - end - @activeSM = @codingSM.length - @detectedCharset = nil - end - - def get_charset_name - return @detectedCharset - end - - def get_confidence - if @detectedCharset - return 0.99 - else - return 0.00 - end - end - - def feed(aBuf) - aBuf.each_byte do |b| - c = b.chr - for codingSM in @codingSM - next unless codingSM - next unless codingSM.active - codingState = codingSM.next_state(c) - if codingState == EError - codingSM.active = false - @activeSM -= 1 - if @activeSM <= 0 - @state = ENotMe - return get_state() - end - elsif codingState == EItsMe - @state = EFoundIt - @detectedCharset = codingSM.get_coding_state_machine() - return get_state() - end - end - end - - return get_state() - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/escsm.rb b/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/escsm.rb deleted file mode 100644 index ece01780..00000000 --- a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/escsm.rb +++ /dev/null @@ -1,245 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is mozilla.org code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Jeff Hodges - port to Ruby -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -module CharDet - HZ_cls = [ - 1,0,0,0,0,0,0,0, # 00 - 07 - 0,0,0,0,0,0,0,0, # 08 - 0f - 0,0,0,0,0,0,0,0, # 10 - 17 - 0,0,0,1,0,0,0,0, # 18 - 1f - 0,0,0,0,0,0,0,0, # 20 - 27 - 0,0,0,0,0,0,0,0, # 28 - 2f - 0,0,0,0,0,0,0,0, # 30 - 37 - 0,0,0,0,0,0,0,0, # 38 - 3f - 0,0,0,0,0,0,0,0, # 40 - 47 - 0,0,0,0,0,0,0,0, # 48 - 4f - 0,0,0,0,0,0,0,0, # 50 - 57 - 0,0,0,0,0,0,0,0, # 58 - 5f - 0,0,0,0,0,0,0,0, # 60 - 67 - 0,0,0,0,0,0,0,0, # 68 - 6f - 0,0,0,0,0,0,0,0, # 70 - 77 - 0,0,0,4,0,5,2,0, # 78 - 7f - 1,1,1,1,1,1,1,1, # 80 - 87 - 1,1,1,1,1,1,1,1, # 88 - 8f - 1,1,1,1,1,1,1,1, # 90 - 97 - 1,1,1,1,1,1,1,1, # 98 - 9f - 1,1,1,1,1,1,1,1, # a0 - a7 - 1,1,1,1,1,1,1,1, # a8 - af - 1,1,1,1,1,1,1,1, # b0 - b7 - 1,1,1,1,1,1,1,1, # b8 - bf - 1,1,1,1,1,1,1,1, # c0 - c7 - 1,1,1,1,1,1,1,1, # c8 - cf - 1,1,1,1,1,1,1,1, # d0 - d7 - 1,1,1,1,1,1,1,1, # d8 - df - 1,1,1,1,1,1,1,1, # e0 - e7 - 1,1,1,1,1,1,1,1, # e8 - ef - 1,1,1,1,1,1,1,1, # f0 - f7 - 1,1,1,1,1,1,1,1, # f8 - ff - ].freeze - - HZ_st = [ - EStart,EError, 3,EStart,EStart,EStart,EError,EError,# 00-07 - EError,EError,EError,EError,EItsMe,EItsMe,EItsMe,EItsMe,# 08-0f - EItsMe,EItsMe,EError,EError,EStart,EStart, 4,EError,# 10-17 - 5,EError, 6,EError, 5, 5, 4,EError,# 18-1f - 4,EError, 4, 4, 4,EError, 4,EError,# 20-27 - 4,EItsMe,EStart,EStart,EStart,EStart,EStart,EStart,# 28-2f - ].freeze - - HZCharLenTable = [0, 0, 0, 0, 0, 0].freeze - - HZSMModel = {'classTable' => HZ_cls, - 'classFactor' => 6, - 'stateTable' => HZ_st, - 'charLenTable' => HZCharLenTable, - 'name' => "HZ-GB-2312" - }.freeze - -ISO2022CN_cls = [ -2,0,0,0,0,0,0,0, # 00 - 07 -0,0,0,0,0,0,0,0, # 08 - 0f -0,0,0,0,0,0,0,0, # 10 - 17 -0,0,0,1,0,0,0,0, # 18 - 1f -0,0,0,0,0,0,0,0, # 20 - 27 -0,3,0,0,0,0,0,0, # 28 - 2f -0,0,0,0,0,0,0,0, # 30 - 37 -0,0,0,0,0,0,0,0, # 38 - 3f -0,0,0,4,0,0,0,0, # 40 - 47 -0,0,0,0,0,0,0,0, # 48 - 4f -0,0,0,0,0,0,0,0, # 50 - 57 -0,0,0,0,0,0,0,0, # 58 - 5f -0,0,0,0,0,0,0,0, # 60 - 67 -0,0,0,0,0,0,0,0, # 68 - 6f -0,0,0,0,0,0,0,0, # 70 - 77 -0,0,0,0,0,0,0,0, # 78 - 7f -2,2,2,2,2,2,2,2, # 80 - 87 -2,2,2,2,2,2,2,2, # 88 - 8f -2,2,2,2,2,2,2,2, # 90 - 97 -2,2,2,2,2,2,2,2, # 98 - 9f -2,2,2,2,2,2,2,2, # a0 - a7 -2,2,2,2,2,2,2,2, # a8 - af -2,2,2,2,2,2,2,2, # b0 - b7 -2,2,2,2,2,2,2,2, # b8 - bf -2,2,2,2,2,2,2,2, # c0 - c7 -2,2,2,2,2,2,2,2, # c8 - cf -2,2,2,2,2,2,2,2, # d0 - d7 -2,2,2,2,2,2,2,2, # d8 - df -2,2,2,2,2,2,2,2, # e0 - e7 -2,2,2,2,2,2,2,2, # e8 - ef -2,2,2,2,2,2,2,2, # f0 - f7 -2,2,2,2,2,2,2,2, # f8 - ff -].freeze - -ISO2022CN_st = [ -EStart, 3,EError,EStart,EStart,EStart,EStart,EStart,# 00-07 -EStart,EError,EError,EError,EError,EError,EError,EError,# 08-0f -EError,EError,EItsMe,EItsMe,EItsMe,EItsMe,EItsMe,EItsMe,# 10-17 -EItsMe,EItsMe,EItsMe,EError,EError,EError, 4,EError,# 18-1f -EError,EError,EError,EItsMe,EError,EError,EError,EError,# 20-27 - 5, 6,EError,EError,EError,EError,EError,EError,# 28-2f -EError,EError,EError,EItsMe,EError,EError,EError,EError,# 30-37 -EError,EError,EError,EError,EError,EItsMe,EError,EStart,# 38-3f -].freeze - -ISO2022CNCharLenTable = [0, 0, 0, 0, 0, 0, 0, 0, 0].freeze - -ISO2022CNSMModel = {'classTable' => ISO2022CN_cls, - 'classFactor' => 9, - 'stateTable' => ISO2022CN_st, - 'charLenTable' => ISO2022CNCharLenTable, - 'name' => "ISO-2022-CN" - }.freeze - -ISO2022JP_cls = [ -2,0,0,0,0,0,0,0, # 00 - 07 -0,0,0,0,0,0,2,2, # 08 - 0f -0,0,0,0,0,0,0,0, # 10 - 17 -0,0,0,1,0,0,0,0, # 18 - 1f -0,0,0,0,7,0,0,0, # 20 - 27 -3,0,0,0,0,0,0,0, # 28 - 2f -0,0,0,0,0,0,0,0, # 30 - 37 -0,0,0,0,0,0,0,0, # 38 - 3f -6,0,4,0,8,0,0,0, # 40 - 47 -0,9,5,0,0,0,0,0, # 48 - 4f -0,0,0,0,0,0,0,0, # 50 - 57 -0,0,0,0,0,0,0,0, # 58 - 5f -0,0,0,0,0,0,0,0, # 60 - 67 -0,0,0,0,0,0,0,0, # 68 - 6f -0,0,0,0,0,0,0,0, # 70 - 77 -0,0,0,0,0,0,0,0, # 78 - 7f -2,2,2,2,2,2,2,2, # 80 - 87 -2,2,2,2,2,2,2,2, # 88 - 8f -2,2,2,2,2,2,2,2, # 90 - 97 -2,2,2,2,2,2,2,2, # 98 - 9f -2,2,2,2,2,2,2,2, # a0 - a7 -2,2,2,2,2,2,2,2, # a8 - af -2,2,2,2,2,2,2,2, # b0 - b7 -2,2,2,2,2,2,2,2, # b8 - bf -2,2,2,2,2,2,2,2, # c0 - c7 -2,2,2,2,2,2,2,2, # c8 - cf -2,2,2,2,2,2,2,2, # d0 - d7 -2,2,2,2,2,2,2,2, # d8 - df -2,2,2,2,2,2,2,2, # e0 - e7 -2,2,2,2,2,2,2,2, # e8 - ef -2,2,2,2,2,2,2,2, # f0 - f7 -2,2,2,2,2,2,2,2, # f8 - ff -].freeze - -ISO2022JP_st = [ -EStart, 3,EError,EStart,EStart,EStart,EStart,EStart,# 00-07 -EStart,EStart,EError,EError,EError,EError,EError,EError,# 08-0f -EError,EError,EError,EError,EItsMe,EItsMe,EItsMe,EItsMe,# 10-17 -EItsMe,EItsMe,EItsMe,EItsMe,EItsMe,EItsMe,EError,EError,# 18-1f -EError, 5,EError,EError,EError, 4,EError,EError,# 20-27 -EError,EError,EError, 6,EItsMe,EError,EItsMe,EError,# 28-2f -EError,EError,EError,EError,EError,EError,EItsMe,EItsMe,# 30-37 -EError,EError,EError,EItsMe,EError,EError,EError,EError,# 38-3f -EError,EError,EError,EError,EItsMe,EError,EStart,EStart,# 40-47 -].freeze - -ISO2022JPCharLenTable = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0].freeze - -ISO2022JPSMModel = {'classTable' => ISO2022JP_cls, - 'classFactor' => 10, - 'stateTable' => ISO2022JP_st, - 'charLenTable' => ISO2022JPCharLenTable, - 'name' => "ISO-2022-JP" - }.freeze - -ISO2022KR_cls = [ -2,0,0,0,0,0,0,0, # 00 - 07 -0,0,0,0,0,0,0,0, # 08 - 0f -0,0,0,0,0,0,0,0, # 10 - 17 -0,0,0,1,0,0,0,0, # 18 - 1f -0,0,0,0,3,0,0,0, # 20 - 27 -0,4,0,0,0,0,0,0, # 28 - 2f -0,0,0,0,0,0,0,0, # 30 - 37 -0,0,0,0,0,0,0,0, # 38 - 3f -0,0,0,5,0,0,0,0, # 40 - 47 -0,0,0,0,0,0,0,0, # 48 - 4f -0,0,0,0,0,0,0,0, # 50 - 57 -0,0,0,0,0,0,0,0, # 58 - 5f -0,0,0,0,0,0,0,0, # 60 - 67 -0,0,0,0,0,0,0,0, # 68 - 6f -0,0,0,0,0,0,0,0, # 70 - 77 -0,0,0,0,0,0,0,0, # 78 - 7f -2,2,2,2,2,2,2,2, # 80 - 87 -2,2,2,2,2,2,2,2, # 88 - 8f -2,2,2,2,2,2,2,2, # 90 - 97 -2,2,2,2,2,2,2,2, # 98 - 9f -2,2,2,2,2,2,2,2, # a0 - a7 -2,2,2,2,2,2,2,2, # a8 - af -2,2,2,2,2,2,2,2, # b0 - b7 -2,2,2,2,2,2,2,2, # b8 - bf -2,2,2,2,2,2,2,2, # c0 - c7 -2,2,2,2,2,2,2,2, # c8 - cf -2,2,2,2,2,2,2,2, # d0 - d7 -2,2,2,2,2,2,2,2, # d8 - df -2,2,2,2,2,2,2,2, # e0 - e7 -2,2,2,2,2,2,2,2, # e8 - ef -2,2,2,2,2,2,2,2, # f0 - f7 -2,2,2,2,2,2,2,2, # f8 - ff -].freeze - -ISO2022KR_st = [ -EStart, 3,EError,EStart,EStart,EStart,EError,EError,# 00-07 -EError,EError,EError,EError,EItsMe,EItsMe,EItsMe,EItsMe,# 08-0f -EItsMe,EItsMe,EError,EError,EError, 4,EError,EError,# 10-17 -EError,EError,EError,EError, 5,EError,EError,EError,# 18-1f -EError,EError,EError,EItsMe,EStart,EStart,EStart,EStart,# 20-27 -].freeze - -ISO2022KRCharLenTable = [0, 0, 0, 0, 0, 0].freeze - -ISO2022KRSMModel = {'classTable' => ISO2022KR_cls, - 'classFactor' => 6, - 'stateTable' => ISO2022KR_st, - 'charLenTable' => ISO2022KRCharLenTable, - 'name' => "ISO-2022-KR" - }.freeze -end diff --git a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/eucjpprober.rb b/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/eucjpprober.rb deleted file mode 100644 index f9d17e68..00000000 --- a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/eucjpprober.rb +++ /dev/null @@ -1,88 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is mozilla.org code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Jeff Hodges - port to Ruby -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -module CharDet - class EUCJPProber < MultiByteCharSetProber - def initialize - super() - @codingSM = CodingStateMachine.new(EUCJPSMModel) - @distributionAnalyzer = EUCJPDistributionAnalysis.new() - @contextAnalyzer = EUCJPContextAnalysis.new() - reset - end - - def reset - super() - @contextAnalyzer.reset() - end - - def get_charset_name - return "EUC-JP" - end - - def feed(aBuf) - aLen = aBuf.length - for i in (0...aLen) - codingState = @codingSM.next_state(aBuf[i, 1]) - if codingState == EError - $stderr << "#{get_charset_name} prober hit error at byte #{i}\n" if $debug - @state = ENotMe - break - elsif codingState == EItsMe - @state = EFoundIt - break - elsif codingState == EStart - charLen = @codingSM.get_current_charlen() - if i == 0 - @lastChar[1] = aBuf[0, 1] - @contextAnalyzer.feed(@lastChar, charLen) - @distributionAnalyzer.feed(@lastChar, charLen) - else - @contextAnalyzer.feed(aBuf[i-1, 2], charLen) - @distributionAnalyzer.feed(aBuf[i-1, 2], charLen) - end - end - end - - @lastChar[0] = aBuf[aLen-1, 1] - - if get_state() == EDetecting - if @contextAnalyzer.got_enough_data() and (get_confidence() > SHORTCUT_THRESHOLD) - @state = EFoundIt - end - end - - return get_state() - end - - def get_confidence - l = [@contextAnalyzer.get_confidence,@distributionAnalyzer.get_confidence] - return l.max - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/euckrfreq.rb b/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/euckrfreq.rb deleted file mode 100644 index c8c932e7..00000000 --- a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/euckrfreq.rb +++ /dev/null @@ -1,597 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Jeff Hodges - port to Ruby -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -# Sampling from about 20M text materials include literature and computer technology - -# 128 --> 0.79 -# 256 --> 0.92 -# 512 --> 0.986 -# 1024 --> 0.99944 -# 2048 --> 0.99999 -# -# Idea Distribution Ratio = 0.98653 / (1-0.98653) = 73.24 -# Random Distribution Ration = 512 / (2350-512) = 0.279. -# -# Typical Distribution Ratio -module CharDet -EUCKR_TYPICAL_DISTRIBUTION_RATIO = 6.0 - -EUCKR_TABLE_SIZE = 2352 - -# Char to FreqOrder table , -EUCKRCharToFreqOrder = [ - 13, 130, 120,1396, 481,1719,1720, 328, 609, 212,1721, 707, 400, 299,1722, 87, -1397,1723, 104, 536,1117,1203,1724,1267, 685,1268, 508,1725,1726,1727,1728,1398, -1399,1729,1730,1731, 141, 621, 326,1057, 368,1732, 267, 488, 20,1733,1269,1734, - 945,1400,1735, 47, 904,1270,1736,1737, 773, 248,1738, 409, 313, 786, 429,1739, - 116, 987, 813,1401, 683, 75,1204, 145,1740,1741,1742,1743, 16, 847, 667, 622, - 708,1744,1745,1746, 966, 787, 304, 129,1747, 60, 820, 123, 676,1748,1749,1750, -1751, 617,1752, 626,1753,1754,1755,1756, 653,1757,1758,1759,1760,1761,1762, 856, - 344,1763,1764,1765,1766, 89, 401, 418, 806, 905, 848,1767,1768,1769, 946,1205, - 709,1770,1118,1771, 241,1772,1773,1774,1271,1775, 569,1776, 999,1777,1778,1779, -1780, 337, 751,1058, 28, 628, 254,1781, 177, 906, 270, 349, 891,1079,1782, 19, -1783, 379,1784, 315,1785, 629, 754,1402, 559,1786, 636, 203,1206,1787, 710, 567, -1788, 935, 814,1789,1790,1207, 766, 528,1791,1792,1208,1793,1794,1795,1796,1797, -1403,1798,1799, 533,1059,1404,1405,1156,1406, 936, 884,1080,1800, 351,1801,1802, -1803,1804,1805, 801,1806,1807,1808,1119,1809,1157, 714, 474,1407,1810, 298, 899, - 885,1811,1120, 802,1158,1812, 892,1813,1814,1408, 659,1815,1816,1121,1817,1818, -1819,1820,1821,1822, 319,1823, 594, 545,1824, 815, 937,1209,1825,1826, 573,1409, -1022,1827,1210,1828,1829,1830,1831,1832,1833, 556, 722, 807,1122,1060,1834, 697, -1835, 900, 557, 715,1836,1410, 540,1411, 752,1159, 294, 597,1211, 976, 803, 770, -1412,1837,1838, 39, 794,1413, 358,1839, 371, 925,1840, 453, 661, 788, 531, 723, - 544,1023,1081, 869, 91,1841, 392, 430, 790, 602,1414, 677,1082, 457,1415,1416, -1842,1843, 475, 327,1024,1417, 795, 121,1844, 733, 403,1418,1845,1846,1847, 300, - 119, 711,1212, 627,1848,1272, 207,1849,1850, 796,1213, 382,1851, 519,1852,1083, - 893,1853,1854,1855, 367, 809, 487, 671,1856, 663,1857,1858, 956, 471, 306, 857, -1859,1860,1160,1084,1861,1862,1863,1864,1865,1061,1866,1867,1868,1869,1870,1871, - 282, 96, 574,1872, 502,1085,1873,1214,1874, 907,1875,1876, 827, 977,1419,1420, -1421, 268,1877,1422,1878,1879,1880, 308,1881, 2, 537,1882,1883,1215,1884,1885, - 127, 791,1886,1273,1423,1887, 34, 336, 404, 643,1888, 571, 654, 894, 840,1889, - 0, 886,1274, 122, 575, 260, 908, 938,1890,1275, 410, 316,1891,1892, 100,1893, -1894,1123, 48,1161,1124,1025,1895, 633, 901,1276,1896,1897, 115, 816,1898, 317, -1899, 694,1900, 909, 734,1424, 572, 866,1425, 691, 85, 524,1010, 543, 394, 841, -1901,1902,1903,1026,1904,1905,1906,1907,1908,1909, 30, 451, 651, 988, 310,1910, -1911,1426, 810,1216, 93,1912,1913,1277,1217,1914, 858, 759, 45, 58, 181, 610, - 269,1915,1916, 131,1062, 551, 443,1000, 821,1427, 957, 895,1086,1917,1918, 375, -1919, 359,1920, 687,1921, 822,1922, 293,1923,1924, 40, 662, 118, 692, 29, 939, - 887, 640, 482, 174,1925, 69,1162, 728,1428, 910,1926,1278,1218,1279, 386, 870, - 217, 854,1163, 823,1927,1928,1929,1930, 834,1931, 78,1932, 859,1933,1063,1934, -1935,1936,1937, 438,1164, 208, 595,1938,1939,1940,1941,1219,1125,1942, 280, 888, -1429,1430,1220,1431,1943,1944,1945,1946,1947,1280, 150, 510,1432,1948,1949,1950, -1951,1952,1953,1954,1011,1087,1955,1433,1043,1956, 881,1957, 614, 958,1064,1065, -1221,1958, 638,1001, 860, 967, 896,1434, 989, 492, 553,1281,1165,1959,1282,1002, -1283,1222,1960,1961,1962,1963, 36, 383, 228, 753, 247, 454,1964, 876, 678,1965, -1966,1284, 126, 464, 490, 835, 136, 672, 529, 940,1088,1435, 473,1967,1968, 467, - 50, 390, 227, 587, 279, 378, 598, 792, 968, 240, 151, 160, 849, 882,1126,1285, - 639,1044, 133, 140, 288, 360, 811, 563,1027, 561, 142, 523,1969,1970,1971, 7, - 103, 296, 439, 407, 506, 634, 990,1972,1973,1974,1975, 645,1976,1977,1978,1979, -1980,1981, 236,1982,1436,1983,1984,1089, 192, 828, 618, 518,1166, 333,1127,1985, - 818,1223,1986,1987,1988,1989,1990,1991,1992,1993, 342,1128,1286, 746, 842,1994, -1995, 560, 223,1287, 98, 8, 189, 650, 978,1288,1996,1437,1997, 17, 345, 250, - 423, 277, 234, 512, 226, 97, 289, 42, 167,1998, 201,1999,2000, 843, 836, 824, - 532, 338, 783,1090, 182, 576, 436,1438,1439, 527, 500,2001, 947, 889,2002,2003, -2004,2005, 262, 600, 314, 447,2006, 547,2007, 693, 738,1129,2008, 71,1440, 745, - 619, 688,2009, 829,2010,2011, 147,2012, 33, 948,2013,2014, 74, 224,2015, 61, - 191, 918, 399, 637,2016,1028,1130, 257, 902,2017,2018,2019,2020,2021,2022,2023, -2024,2025,2026, 837,2027,2028,2029,2030, 179, 874, 591, 52, 724, 246,2031,2032, -2033,2034,1167, 969,2035,1289, 630, 605, 911,1091,1168,2036,2037,2038,1441, 912, -2039, 623,2040,2041, 253,1169,1290,2042,1442, 146, 620, 611, 577, 433,2043,1224, - 719,1170, 959, 440, 437, 534, 84, 388, 480,1131, 159, 220, 198, 679,2044,1012, - 819,1066,1443, 113,1225, 194, 318,1003,1029,2045,2046,2047,2048,1067,2049,2050, -2051,2052,2053, 59, 913, 112,2054, 632,2055, 455, 144, 739,1291,2056, 273, 681, - 499,2057, 448,2058,2059, 760,2060,2061, 970, 384, 169, 245,1132,2062,2063, 414, -1444,2064,2065, 41, 235,2066, 157, 252, 877, 568, 919, 789, 580,2067, 725,2068, -2069,1292,2070,2071,1445,2072,1446,2073,2074, 55, 588, 66,1447, 271,1092,2075, -1226,2076, 960,1013, 372,2077,2078,2079,2080,2081,1293,2082,2083,2084,2085, 850, -2086,2087,2088,2089,2090, 186,2091,1068, 180,2092,2093,2094, 109,1227, 522, 606, -2095, 867,1448,1093, 991,1171, 926, 353,1133,2096, 581,2097,2098,2099,1294,1449, -1450,2100, 596,1172,1014,1228,2101,1451,1295,1173,1229,2102,2103,1296,1134,1452, - 949,1135,2104,2105,1094,1453,1454,1455,2106,1095,2107,2108,2109,2110,2111,2112, -2113,2114,2115,2116,2117, 804,2118,2119,1230,1231, 805,1456, 405,1136,2120,2121, -2122,2123,2124, 720, 701,1297, 992,1457, 927,1004,2125,2126,2127,2128,2129,2130, - 22, 417,2131, 303,2132, 385,2133, 971, 520, 513,2134,1174, 73,1096, 231, 274, - 962,1458, 673,2135,1459,2136, 152,1137,2137,2138,2139,2140,1005,1138,1460,1139, -2141,2142,2143,2144, 11, 374, 844,2145, 154,1232, 46,1461,2146, 838, 830, 721, -1233, 106,2147, 90, 428, 462, 578, 566,1175, 352,2148,2149, 538,1234, 124,1298, -2150,1462, 761, 565,2151, 686,2152, 649,2153, 72, 173,2154, 460, 415,2155,1463, -2156,1235, 305,2157,2158,2159,2160,2161,2162, 579,2163,2164,2165,2166,2167, 747, -2168,2169,2170,2171,1464, 669,2172,2173,2174,2175,2176,1465,2177, 23, 530, 285, -2178, 335, 729,2179, 397,2180,2181,2182,1030,2183,2184, 698,2185,2186, 325,2187, -2188, 369,2189, 799,1097,1015, 348,2190,1069, 680,2191, 851,1466,2192,2193, 10, -2194, 613, 424,2195, 979, 108, 449, 589, 27, 172, 81,1031, 80, 774, 281, 350, -1032, 525, 301, 582,1176,2196, 674,1045,2197,2198,1467, 730, 762,2199,2200,2201, -2202,1468,2203, 993,2204,2205, 266,1070, 963,1140,2206,2207,2208, 664,1098, 972, -2209,2210,2211,1177,1469,1470, 871,2212,2213,2214,2215,2216,1471,2217,2218,2219, -2220,2221,2222,2223,2224,2225,2226,2227,1472,1236,2228,2229,2230,2231,2232,2233, -2234,2235,1299,2236,2237, 200,2238, 477, 373,2239,2240, 731, 825, 777,2241,2242, -2243, 521, 486, 548,2244,2245,2246,1473,1300, 53, 549, 137, 875, 76, 158,2247, -1301,1474, 469, 396,1016, 278, 712,2248, 321, 442, 503, 767, 744, 941,1237,1178, -1475,2249, 82, 178,1141,1179, 973,2250,1302,2251, 297,2252,2253, 570,2254,2255, -2256, 18, 450, 206,2257, 290, 292,1142,2258, 511, 162, 99, 346, 164, 735,2259, -1476,1477, 4, 554, 343, 798,1099,2260,1100,2261, 43, 171,1303, 139, 215,2262, -2263, 717, 775,2264,1033, 322, 216,2265, 831,2266, 149,2267,1304,2268,2269, 702, -1238, 135, 845, 347, 309,2270, 484,2271, 878, 655, 238,1006,1478,2272, 67,2273, - 295,2274,2275, 461,2276, 478, 942, 412,2277,1034,2278,2279,2280, 265,2281, 541, -2282,2283,2284,2285,2286, 70, 852,1071,2287,2288,2289,2290, 21, 56, 509, 117, - 432,2291,2292, 331, 980, 552,1101, 148, 284, 105, 393,1180,1239, 755,2293, 187, -2294,1046,1479,2295, 340,2296, 63,1047, 230,2297,2298,1305, 763,1306, 101, 800, - 808, 494,2299,2300,2301, 903,2302, 37,1072, 14, 5,2303, 79, 675,2304, 312, -2305,2306,2307,2308,2309,1480, 6,1307,2310,2311,2312, 1, 470, 35, 24, 229, -2313, 695, 210, 86, 778, 15, 784, 592, 779, 32, 77, 855, 964,2314, 259,2315, - 501, 380,2316,2317, 83, 981, 153, 689,1308,1481,1482,1483,2318,2319, 716,1484, -2320,2321,2322,2323,2324,2325,1485,2326,2327, 128, 57, 68, 261,1048, 211, 170, -1240, 31,2328, 51, 435, 742,2329,2330,2331, 635,2332, 264, 456,2333,2334,2335, - 425,2336,1486, 143, 507, 263, 943,2337, 363, 920,1487, 256,1488,1102, 243, 601, -1489,2338,2339,2340,2341,2342,2343,2344, 861,2345,2346,2347,2348,2349,2350, 395, -2351,1490,1491, 62, 535, 166, 225,2352,2353, 668, 419,1241, 138, 604, 928,2354, -1181,2355,1492,1493,2356,2357,2358,1143,2359, 696,2360, 387, 307,1309, 682, 476, -2361,2362, 332, 12, 222, 156,2363, 232,2364, 641, 276, 656, 517,1494,1495,1035, - 416, 736,1496,2365,1017, 586,2366,2367,2368,1497,2369, 242,2370,2371,2372,1498, -2373, 965, 713,2374,2375,2376,2377, 740, 982,1499, 944,1500,1007,2378,2379,1310, -1501,2380,2381,2382, 785, 329,2383,2384,1502,2385,2386,2387, 932,2388,1503,2389, -2390,2391,2392,1242,2393,2394,2395,2396,2397, 994, 950,2398,2399,2400,2401,1504, -1311,2402,2403,2404,2405,1049, 749,2406,2407, 853, 718,1144,1312,2408,1182,1505, -2409,2410, 255, 516, 479, 564, 550, 214,1506,1507,1313, 413, 239, 444, 339,1145, -1036,1508,1509,1314,1037,1510,1315,2411,1511,2412,2413,2414, 176, 703, 497, 624, - 593, 921, 302,2415, 341, 165,1103,1512,2416,1513,2417,2418,2419, 376,2420, 700, -2421,2422,2423, 258, 768,1316,2424,1183,2425, 995, 608,2426,2427,2428,2429, 221, -2430,2431,2432,2433,2434,2435,2436,2437, 195, 323, 726, 188, 897, 983,1317, 377, - 644,1050, 879,2438, 452,2439,2440,2441,2442,2443,2444, 914,2445,2446,2447,2448, - 915, 489,2449,1514,1184,2450,2451, 515, 64, 427, 495,2452, 583,2453, 483, 485, -1038, 562, 213,1515, 748, 666,2454,2455,2456,2457, 334,2458, 780, 996,1008, 705, -1243,2459,2460,2461,2462,2463, 114,2464, 493,1146, 366, 163,1516, 961,1104,2465, - 291,2466,1318,1105,2467,1517, 365,2468, 355, 951,1244,2469,1319,2470, 631,2471, -2472, 218,1320, 364, 320, 756,1518,1519,1321,1520,1322,2473,2474,2475,2476, 997, -2477,2478,2479,2480, 665,1185,2481, 916,1521,2482,2483,2484, 584, 684,2485,2486, - 797,2487,1051,1186,2488,2489,2490,1522,2491,2492, 370,2493,1039,1187, 65,2494, - 434, 205, 463,1188,2495, 125, 812, 391, 402, 826, 699, 286, 398, 155, 781, 771, - 585,2496, 590, 505,1073,2497, 599, 244, 219, 917,1018, 952, 646,1523,2498,1323, -2499,2500, 49, 984, 354, 741,2501, 625,2502,1324,2503,1019, 190, 357, 757, 491, - 95, 782, 868,2504,2505,2506,2507,2508,2509, 134,1524,1074, 422,1525, 898,2510, - 161,2511,2512,2513,2514, 769,2515,1526,2516,2517, 411,1325,2518, 472,1527,2519, -2520,2521,2522,2523,2524, 985,2525,2526,2527,2528,2529,2530, 764,2531,1245,2532, -2533, 25, 204, 311,2534, 496,2535,1052,2536,2537,2538,2539,2540,2541,2542, 199, - 704, 504, 468, 758, 657,1528, 196, 44, 839,1246, 272, 750,2543, 765, 862,2544, -2545,1326,2546, 132, 615, 933,2547, 732,2548,2549,2550,1189,1529,2551, 283,1247, -1053, 607, 929,2552,2553,2554, 930, 183, 872, 616,1040,1147,2555,1148,1020, 441, - 249,1075,2556,2557,2558, 466, 743,2559,2560,2561, 92, 514, 426, 420, 526,2562, -2563,2564,2565,2566,2567,2568, 185,2569,2570,2571,2572, 776,1530, 658,2573, 362, -2574, 361, 922,1076, 793,2575,2576,2577,2578,2579,2580,1531, 251,2581,2582,2583, -2584,1532, 54, 612, 237,1327,2585,2586, 275, 408, 647, 111,2587,1533,1106, 465, - 3, 458, 9, 38,2588, 107, 110, 890, 209, 26, 737, 498,2589,1534,2590, 431, - 202, 88,1535, 356, 287,1107, 660,1149,2591, 381,1536, 986,1150, 445,1248,1151, - 974,2592,2593, 846,2594, 446, 953, 184,1249,1250, 727,2595, 923, 193, 883,2596, -2597,2598, 102, 324, 539, 817,2599, 421,1041,2600, 832,2601, 94, 175, 197, 406, -2602, 459,2603,2604,2605,2606,2607, 330, 555,2608,2609,2610, 706,1108, 389,2611, -2612,2613,2614, 233,2615, 833, 558, 931, 954,1251,2616,2617,1537, 546,2618,2619, -1009,2620,2621,2622,1538, 690,1328,2623, 955,2624,1539,2625,2626, 772,2627,2628, -2629,2630,2631, 924, 648, 863, 603,2632,2633, 934,1540, 864, 865,2634, 642,1042, - 670,1190,2635,2636,2637,2638, 168,2639, 652, 873, 542,1054,1541,2640,2641,2642, # 512, 256 -#Everything below is of no interest for detection purpose -2643,2644,2645,2646,2647,2648,2649,2650,2651,2652,2653,2654,2655,2656,2657,2658, -2659,2660,2661,2662,2663,2664,2665,2666,2667,2668,2669,2670,2671,2672,2673,2674, -2675,2676,2677,2678,2679,2680,2681,2682,2683,2684,2685,2686,2687,2688,2689,2690, -2691,2692,2693,2694,2695,2696,2697,2698,2699,1542, 880,2700,2701,2702,2703,2704, -2705,2706,2707,2708,2709,2710,2711,2712,2713,2714,2715,2716,2717,2718,2719,2720, -2721,2722,2723,2724,2725,1543,2726,2727,2728,2729,2730,2731,2732,1544,2733,2734, -2735,2736,2737,2738,2739,2740,2741,2742,2743,2744,2745,2746,2747,2748,2749,2750, -2751,2752,2753,2754,1545,2755,2756,2757,2758,2759,2760,2761,2762,2763,2764,2765, -2766,1546,2767,1547,2768,2769,2770,2771,2772,2773,2774,2775,2776,2777,2778,2779, -2780,2781,2782,2783,2784,2785,2786,1548,2787,2788,2789,1109,2790,2791,2792,2793, -2794,2795,2796,2797,2798,2799,2800,2801,2802,2803,2804,2805,2806,2807,2808,2809, -2810,2811,2812,1329,2813,2814,2815,2816,2817,2818,2819,2820,2821,2822,2823,2824, -2825,2826,2827,2828,2829,2830,2831,2832,2833,2834,2835,2836,2837,2838,2839,2840, -2841,2842,2843,2844,2845,2846,2847,2848,2849,2850,2851,2852,2853,2854,2855,2856, -1549,2857,2858,2859,2860,1550,2861,2862,1551,2863,2864,2865,2866,2867,2868,2869, -2870,2871,2872,2873,2874,1110,1330,2875,2876,2877,2878,2879,2880,2881,2882,2883, -2884,2885,2886,2887,2888,2889,2890,2891,2892,2893,2894,2895,2896,2897,2898,2899, -2900,2901,2902,2903,2904,2905,2906,2907,2908,2909,2910,2911,2912,2913,2914,2915, -2916,2917,2918,2919,2920,2921,2922,2923,2924,2925,2926,2927,2928,2929,2930,1331, -2931,2932,2933,2934,2935,2936,2937,2938,2939,2940,2941,2942,2943,1552,2944,2945, -2946,2947,2948,2949,2950,2951,2952,2953,2954,2955,2956,2957,2958,2959,2960,2961, -2962,2963,2964,1252,2965,2966,2967,2968,2969,2970,2971,2972,2973,2974,2975,2976, -2977,2978,2979,2980,2981,2982,2983,2984,2985,2986,2987,2988,2989,2990,2991,2992, -2993,2994,2995,2996,2997,2998,2999,3000,3001,3002,3003,3004,3005,3006,3007,3008, -3009,3010,3011,3012,1553,3013,3014,3015,3016,3017,1554,3018,1332,3019,3020,3021, -3022,3023,3024,3025,3026,3027,3028,3029,3030,3031,3032,3033,3034,3035,3036,3037, -3038,3039,3040,3041,3042,3043,3044,3045,3046,3047,3048,3049,3050,1555,3051,3052, -3053,1556,1557,3054,3055,3056,3057,3058,3059,3060,3061,3062,3063,3064,3065,3066, -3067,1558,3068,3069,3070,3071,3072,3073,3074,3075,3076,1559,3077,3078,3079,3080, -3081,3082,3083,1253,3084,3085,3086,3087,3088,3089,3090,3091,3092,3093,3094,3095, -3096,3097,3098,3099,3100,3101,3102,3103,3104,3105,3106,3107,3108,1152,3109,3110, -3111,3112,3113,1560,3114,3115,3116,3117,1111,3118,3119,3120,3121,3122,3123,3124, -3125,3126,3127,3128,3129,3130,3131,3132,3133,3134,3135,3136,3137,3138,3139,3140, -3141,3142,3143,3144,3145,3146,3147,3148,3149,3150,3151,3152,3153,3154,3155,3156, -3157,3158,3159,3160,3161,3162,3163,3164,3165,3166,3167,3168,3169,3170,3171,3172, -3173,3174,3175,3176,1333,3177,3178,3179,3180,3181,3182,3183,3184,3185,3186,3187, -3188,3189,1561,3190,3191,1334,3192,3193,3194,3195,3196,3197,3198,3199,3200,3201, -3202,3203,3204,3205,3206,3207,3208,3209,3210,3211,3212,3213,3214,3215,3216,3217, -3218,3219,3220,3221,3222,3223,3224,3225,3226,3227,3228,3229,3230,3231,3232,3233, -3234,1562,3235,3236,3237,3238,3239,3240,3241,3242,3243,3244,3245,3246,3247,3248, -3249,3250,3251,3252,3253,3254,3255,3256,3257,3258,3259,3260,3261,3262,3263,3264, -3265,3266,3267,3268,3269,3270,3271,3272,3273,3274,3275,3276,3277,1563,3278,3279, -3280,3281,3282,3283,3284,3285,3286,3287,3288,3289,3290,3291,3292,3293,3294,3295, -3296,3297,3298,3299,3300,3301,3302,3303,3304,3305,3306,3307,3308,3309,3310,3311, -3312,3313,3314,3315,3316,3317,3318,3319,3320,3321,3322,3323,3324,3325,3326,3327, -3328,3329,3330,3331,3332,3333,3334,3335,3336,3337,3338,3339,3340,3341,3342,3343, -3344,3345,3346,3347,3348,3349,3350,3351,3352,3353,3354,3355,3356,3357,3358,3359, -3360,3361,3362,3363,3364,1335,3365,3366,3367,3368,3369,3370,3371,3372,3373,3374, -3375,3376,3377,3378,3379,3380,3381,3382,3383,3384,3385,3386,3387,1336,3388,3389, -3390,3391,3392,3393,3394,3395,3396,3397,3398,3399,3400,3401,3402,3403,3404,3405, -3406,3407,3408,3409,3410,3411,3412,3413,3414,1337,3415,3416,3417,3418,3419,1338, -3420,3421,3422,1564,1565,3423,3424,3425,3426,3427,3428,3429,3430,3431,1254,3432, -3433,3434,1339,3435,3436,3437,3438,3439,1566,3440,3441,3442,3443,3444,3445,3446, -3447,3448,3449,3450,3451,3452,3453,3454,1255,3455,3456,3457,3458,3459,1567,1191, -3460,1568,1569,3461,3462,3463,1570,3464,3465,3466,3467,3468,1571,3469,3470,3471, -3472,3473,1572,3474,3475,3476,3477,3478,3479,3480,3481,3482,3483,3484,3485,3486, -1340,3487,3488,3489,3490,3491,3492,1021,3493,3494,3495,3496,3497,3498,1573,3499, -1341,3500,3501,3502,3503,3504,3505,3506,3507,3508,3509,3510,3511,1342,3512,3513, -3514,3515,3516,1574,1343,3517,3518,3519,1575,3520,1576,3521,3522,3523,3524,3525, -3526,3527,3528,3529,3530,3531,3532,3533,3534,3535,3536,3537,3538,3539,3540,3541, -3542,3543,3544,3545,3546,3547,3548,3549,3550,3551,3552,3553,3554,3555,3556,3557, -3558,3559,3560,3561,3562,3563,3564,3565,3566,3567,3568,3569,3570,3571,3572,3573, -3574,3575,3576,3577,3578,3579,3580,1577,3581,3582,1578,3583,3584,3585,3586,3587, -3588,3589,3590,3591,3592,3593,3594,3595,3596,3597,3598,3599,3600,3601,3602,3603, -3604,1579,3605,3606,3607,3608,3609,3610,3611,3612,3613,3614,3615,3616,3617,3618, -3619,3620,3621,3622,3623,3624,3625,3626,3627,3628,3629,1580,3630,3631,1581,3632, -3633,3634,3635,3636,3637,3638,3639,3640,3641,3642,3643,3644,3645,3646,3647,3648, -3649,3650,3651,3652,3653,3654,3655,3656,1582,3657,3658,3659,3660,3661,3662,3663, -3664,3665,3666,3667,3668,3669,3670,3671,3672,3673,3674,3675,3676,3677,3678,3679, -3680,3681,3682,3683,3684,3685,3686,3687,3688,3689,3690,3691,3692,3693,3694,3695, -3696,3697,3698,3699,3700,1192,3701,3702,3703,3704,1256,3705,3706,3707,3708,1583, -1257,3709,3710,3711,3712,3713,3714,3715,3716,1584,3717,3718,3719,3720,3721,3722, -3723,3724,3725,3726,3727,3728,3729,3730,3731,3732,3733,3734,3735,3736,3737,3738, -3739,3740,3741,3742,3743,3744,3745,1344,3746,3747,3748,3749,3750,3751,3752,3753, -3754,3755,3756,1585,3757,3758,3759,3760,3761,3762,3763,3764,3765,3766,1586,3767, -3768,3769,3770,3771,3772,3773,3774,3775,3776,3777,3778,1345,3779,3780,3781,3782, -3783,3784,3785,3786,3787,3788,3789,3790,3791,3792,3793,3794,3795,1346,1587,3796, -3797,1588,3798,3799,3800,3801,3802,3803,3804,3805,3806,1347,3807,3808,3809,3810, -3811,1589,3812,3813,3814,3815,3816,3817,3818,3819,3820,3821,1590,3822,3823,1591, -1348,3824,3825,3826,3827,3828,3829,3830,1592,3831,3832,1593,3833,3834,3835,3836, -3837,3838,3839,3840,3841,3842,3843,3844,1349,3845,3846,3847,3848,3849,3850,3851, -3852,3853,3854,3855,3856,3857,3858,1594,3859,3860,3861,3862,3863,3864,3865,3866, -3867,3868,3869,1595,3870,3871,3872,3873,1596,3874,3875,3876,3877,3878,3879,3880, -3881,3882,3883,3884,3885,3886,1597,3887,3888,3889,3890,3891,3892,3893,3894,3895, -1598,3896,3897,3898,1599,1600,3899,1350,3900,1351,3901,3902,1352,3903,3904,3905, -3906,3907,3908,3909,3910,3911,3912,3913,3914,3915,3916,3917,3918,3919,3920,3921, -3922,3923,3924,1258,3925,3926,3927,3928,3929,3930,3931,1193,3932,1601,3933,3934, -3935,3936,3937,3938,3939,3940,3941,3942,3943,1602,3944,3945,3946,3947,3948,1603, -3949,3950,3951,3952,3953,3954,3955,3956,3957,3958,3959,3960,3961,3962,3963,3964, -3965,1604,3966,3967,3968,3969,3970,3971,3972,3973,3974,3975,3976,3977,1353,3978, -3979,3980,3981,3982,3983,3984,3985,3986,3987,3988,3989,3990,3991,1354,3992,3993, -3994,3995,3996,3997,3998,3999,4000,4001,4002,4003,4004,4005,4006,4007,4008,4009, -4010,4011,4012,4013,4014,4015,4016,4017,4018,4019,4020,4021,4022,4023,1355,4024, -4025,4026,4027,4028,4029,4030,4031,4032,4033,4034,4035,4036,4037,4038,4039,4040, -1605,4041,4042,4043,4044,4045,4046,4047,4048,4049,4050,4051,4052,4053,4054,4055, -4056,4057,4058,4059,4060,1606,4061,4062,4063,4064,1607,4065,4066,4067,4068,4069, -4070,4071,4072,4073,4074,4075,4076,1194,4077,4078,1608,4079,4080,4081,4082,4083, -4084,4085,4086,4087,1609,4088,4089,4090,4091,4092,4093,4094,4095,4096,4097,4098, -4099,4100,4101,4102,4103,4104,4105,4106,4107,4108,1259,4109,4110,4111,4112,4113, -4114,4115,4116,4117,4118,4119,4120,4121,4122,4123,4124,1195,4125,4126,4127,1610, -4128,4129,4130,4131,4132,4133,4134,4135,4136,4137,1356,4138,4139,4140,4141,4142, -4143,4144,1611,4145,4146,4147,4148,4149,4150,4151,4152,4153,4154,4155,4156,4157, -4158,4159,4160,4161,4162,4163,4164,4165,4166,4167,4168,4169,4170,4171,4172,4173, -4174,4175,4176,4177,4178,4179,4180,4181,4182,4183,4184,4185,4186,4187,4188,4189, -4190,4191,4192,4193,4194,4195,4196,4197,4198,4199,4200,4201,4202,4203,4204,4205, -4206,4207,4208,4209,4210,4211,4212,4213,4214,4215,4216,4217,4218,4219,1612,4220, -4221,4222,4223,4224,4225,4226,4227,1357,4228,1613,4229,4230,4231,4232,4233,4234, -4235,4236,4237,4238,4239,4240,4241,4242,4243,1614,4244,4245,4246,4247,4248,4249, -4250,4251,4252,4253,4254,4255,4256,4257,4258,4259,4260,4261,4262,4263,4264,4265, -4266,4267,4268,4269,4270,1196,1358,4271,4272,4273,4274,4275,4276,4277,4278,4279, -4280,4281,4282,4283,4284,4285,4286,4287,1615,4288,4289,4290,4291,4292,4293,4294, -4295,4296,4297,4298,4299,4300,4301,4302,4303,4304,4305,4306,4307,4308,4309,4310, -4311,4312,4313,4314,4315,4316,4317,4318,4319,4320,4321,4322,4323,4324,4325,4326, -4327,4328,4329,4330,4331,4332,4333,4334,1616,4335,4336,4337,4338,4339,4340,4341, -4342,4343,4344,4345,4346,4347,4348,4349,4350,4351,4352,4353,4354,4355,4356,4357, -4358,4359,4360,1617,4361,4362,4363,4364,4365,1618,4366,4367,4368,4369,4370,4371, -4372,4373,4374,4375,4376,4377,4378,4379,4380,4381,4382,4383,4384,4385,4386,4387, -4388,4389,4390,4391,4392,4393,4394,4395,4396,4397,4398,4399,4400,4401,4402,4403, -4404,4405,4406,4407,4408,4409,4410,4411,4412,4413,4414,4415,4416,1619,4417,4418, -4419,4420,4421,4422,4423,4424,4425,1112,4426,4427,4428,4429,4430,1620,4431,4432, -4433,4434,4435,4436,4437,4438,4439,4440,4441,4442,1260,1261,4443,4444,4445,4446, -4447,4448,4449,4450,4451,4452,4453,4454,4455,1359,4456,4457,4458,4459,4460,4461, -4462,4463,4464,4465,1621,4466,4467,4468,4469,4470,4471,4472,4473,4474,4475,4476, -4477,4478,4479,4480,4481,4482,4483,4484,4485,4486,4487,4488,4489,1055,4490,4491, -4492,4493,4494,4495,4496,4497,4498,4499,4500,4501,4502,4503,4504,4505,4506,4507, -4508,4509,4510,4511,4512,4513,4514,4515,4516,4517,4518,1622,4519,4520,4521,1623, -4522,4523,4524,4525,4526,4527,4528,4529,4530,4531,4532,4533,4534,4535,1360,4536, -4537,4538,4539,4540,4541,4542,4543, 975,4544,4545,4546,4547,4548,4549,4550,4551, -4552,4553,4554,4555,4556,4557,4558,4559,4560,4561,4562,4563,4564,4565,4566,4567, -4568,4569,4570,4571,1624,4572,4573,4574,4575,4576,1625,4577,4578,4579,4580,4581, -4582,4583,4584,1626,4585,4586,4587,4588,4589,4590,4591,4592,4593,4594,4595,1627, -4596,4597,4598,4599,4600,4601,4602,4603,4604,4605,4606,4607,4608,4609,4610,4611, -4612,4613,4614,4615,1628,4616,4617,4618,4619,4620,4621,4622,4623,4624,4625,4626, -4627,4628,4629,4630,4631,4632,4633,4634,4635,4636,4637,4638,4639,4640,4641,4642, -4643,4644,4645,4646,4647,4648,4649,1361,4650,4651,4652,4653,4654,4655,4656,4657, -4658,4659,4660,4661,1362,4662,4663,4664,4665,4666,4667,4668,4669,4670,4671,4672, -4673,4674,4675,4676,4677,4678,4679,4680,4681,4682,1629,4683,4684,4685,4686,4687, -1630,4688,4689,4690,4691,1153,4692,4693,4694,1113,4695,4696,4697,4698,4699,4700, -4701,4702,4703,4704,4705,4706,4707,4708,4709,4710,4711,1197,4712,4713,4714,4715, -4716,4717,4718,4719,4720,4721,4722,4723,4724,4725,4726,4727,4728,4729,4730,4731, -4732,4733,4734,4735,1631,4736,1632,4737,4738,4739,4740,4741,4742,4743,4744,1633, -4745,4746,4747,4748,4749,1262,4750,4751,4752,4753,4754,1363,4755,4756,4757,4758, -4759,4760,4761,4762,4763,4764,4765,4766,4767,4768,1634,4769,4770,4771,4772,4773, -4774,4775,4776,4777,4778,1635,4779,4780,4781,4782,4783,4784,4785,4786,4787,4788, -4789,1636,4790,4791,4792,4793,4794,4795,4796,4797,4798,4799,4800,4801,4802,4803, -4804,4805,4806,1637,4807,4808,4809,1638,4810,4811,4812,4813,4814,4815,4816,4817, -4818,1639,4819,4820,4821,4822,4823,4824,4825,4826,4827,4828,4829,4830,4831,4832, -4833,1077,4834,4835,4836,4837,4838,4839,4840,4841,4842,4843,4844,4845,4846,4847, -4848,4849,4850,4851,4852,4853,4854,4855,4856,4857,4858,4859,4860,4861,4862,4863, -4864,4865,4866,4867,4868,4869,4870,4871,4872,4873,4874,4875,4876,4877,4878,4879, -4880,4881,4882,4883,1640,4884,4885,1641,4886,4887,4888,4889,4890,4891,4892,4893, -4894,4895,4896,4897,4898,4899,4900,4901,4902,4903,4904,4905,4906,4907,4908,4909, -4910,4911,1642,4912,4913,4914,1364,4915,4916,4917,4918,4919,4920,4921,4922,4923, -4924,4925,4926,4927,4928,4929,4930,4931,1643,4932,4933,4934,4935,4936,4937,4938, -4939,4940,4941,4942,4943,4944,4945,4946,4947,4948,4949,4950,4951,4952,4953,4954, -4955,4956,4957,4958,4959,4960,4961,4962,4963,4964,4965,4966,4967,4968,4969,4970, -4971,4972,4973,4974,4975,4976,4977,4978,4979,4980,1644,4981,4982,4983,4984,1645, -4985,4986,1646,4987,4988,4989,4990,4991,4992,4993,4994,4995,4996,4997,4998,4999, -5000,5001,5002,5003,5004,5005,1647,5006,1648,5007,5008,5009,5010,5011,5012,1078, -5013,5014,5015,5016,5017,5018,5019,5020,5021,5022,5023,5024,5025,5026,5027,5028, -1365,5029,5030,5031,5032,5033,5034,5035,5036,5037,5038,5039,1649,5040,5041,5042, -5043,5044,5045,1366,5046,5047,5048,5049,5050,5051,5052,5053,5054,5055,1650,5056, -5057,5058,5059,5060,5061,5062,5063,5064,5065,5066,5067,5068,5069,5070,5071,5072, -5073,5074,5075,5076,5077,1651,5078,5079,5080,5081,5082,5083,5084,5085,5086,5087, -5088,5089,5090,5091,5092,5093,5094,5095,5096,5097,5098,5099,5100,5101,5102,5103, -5104,5105,5106,5107,5108,5109,5110,1652,5111,5112,5113,5114,5115,5116,5117,5118, -1367,5119,5120,5121,5122,5123,5124,5125,5126,5127,5128,5129,1653,5130,5131,5132, -5133,5134,5135,5136,5137,5138,5139,5140,5141,5142,5143,5144,5145,5146,5147,5148, -5149,1368,5150,1654,5151,1369,5152,5153,5154,5155,5156,5157,5158,5159,5160,5161, -5162,5163,5164,5165,5166,5167,5168,5169,5170,5171,5172,5173,5174,5175,5176,5177, -5178,1370,5179,5180,5181,5182,5183,5184,5185,5186,5187,5188,5189,5190,5191,5192, -5193,5194,5195,5196,5197,5198,1655,5199,5200,5201,5202,1656,5203,5204,5205,5206, -1371,5207,1372,5208,5209,5210,5211,1373,5212,5213,1374,5214,5215,5216,5217,5218, -5219,5220,5221,5222,5223,5224,5225,5226,5227,5228,5229,5230,5231,5232,5233,5234, -5235,5236,5237,5238,5239,5240,5241,5242,5243,5244,5245,5246,5247,1657,5248,5249, -5250,5251,1658,1263,5252,5253,5254,5255,5256,1375,5257,5258,5259,5260,5261,5262, -5263,5264,5265,5266,5267,5268,5269,5270,5271,5272,5273,5274,5275,5276,5277,5278, -5279,5280,5281,5282,5283,1659,5284,5285,5286,5287,5288,5289,5290,5291,5292,5293, -5294,5295,5296,5297,5298,5299,5300,1660,5301,5302,5303,5304,5305,5306,5307,5308, -5309,5310,5311,5312,5313,5314,5315,5316,5317,5318,5319,5320,5321,1376,5322,5323, -5324,5325,5326,5327,5328,5329,5330,5331,5332,5333,1198,5334,5335,5336,5337,5338, -5339,5340,5341,5342,5343,1661,5344,5345,5346,5347,5348,5349,5350,5351,5352,5353, -5354,5355,5356,5357,5358,5359,5360,5361,5362,5363,5364,5365,5366,5367,5368,5369, -5370,5371,5372,5373,5374,5375,5376,5377,5378,5379,5380,5381,5382,5383,5384,5385, -5386,5387,5388,5389,5390,5391,5392,5393,5394,5395,5396,5397,5398,1264,5399,5400, -5401,5402,5403,5404,5405,5406,5407,5408,5409,5410,5411,5412,1662,5413,5414,5415, -5416,1663,5417,5418,5419,5420,5421,5422,5423,5424,5425,5426,5427,5428,5429,5430, -5431,5432,5433,5434,5435,5436,5437,5438,1664,5439,5440,5441,5442,5443,5444,5445, -5446,5447,5448,5449,5450,5451,5452,5453,5454,5455,5456,5457,5458,5459,5460,5461, -5462,5463,5464,5465,5466,5467,5468,5469,5470,5471,5472,5473,5474,5475,5476,5477, -5478,1154,5479,5480,5481,5482,5483,5484,5485,1665,5486,5487,5488,5489,5490,5491, -5492,5493,5494,5495,5496,5497,5498,5499,5500,5501,5502,5503,5504,5505,5506,5507, -5508,5509,5510,5511,5512,5513,5514,5515,5516,5517,5518,5519,5520,5521,5522,5523, -5524,5525,5526,5527,5528,5529,5530,5531,5532,5533,5534,5535,5536,5537,5538,5539, -5540,5541,5542,5543,5544,5545,5546,5547,5548,1377,5549,5550,5551,5552,5553,5554, -5555,5556,5557,5558,5559,5560,5561,5562,5563,5564,5565,5566,5567,5568,5569,5570, -1114,5571,5572,5573,5574,5575,5576,5577,5578,5579,5580,5581,5582,5583,5584,5585, -5586,5587,5588,5589,5590,5591,5592,1378,5593,5594,5595,5596,5597,5598,5599,5600, -5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,5613,5614,1379,5615, -5616,5617,5618,5619,5620,5621,5622,5623,5624,5625,5626,5627,5628,5629,5630,5631, -5632,5633,5634,1380,5635,5636,5637,5638,5639,5640,5641,5642,5643,5644,5645,5646, -5647,5648,5649,1381,1056,5650,5651,5652,5653,5654,5655,5656,5657,5658,5659,5660, -1666,5661,5662,5663,5664,5665,5666,5667,5668,1667,5669,1668,5670,5671,5672,5673, -5674,5675,5676,5677,5678,1155,5679,5680,5681,5682,5683,5684,5685,5686,5687,5688, -5689,5690,5691,5692,5693,5694,5695,5696,5697,5698,1669,5699,5700,5701,5702,5703, -5704,5705,1670,5706,5707,5708,5709,5710,1671,5711,5712,5713,5714,1382,5715,5716, -5717,5718,5719,5720,5721,5722,5723,5724,5725,1672,5726,5727,1673,1674,5728,5729, -5730,5731,5732,5733,5734,5735,5736,1675,5737,5738,5739,5740,5741,5742,5743,5744, -1676,5745,5746,5747,5748,5749,5750,5751,1383,5752,5753,5754,5755,5756,5757,5758, -5759,5760,5761,5762,5763,5764,5765,5766,5767,5768,1677,5769,5770,5771,5772,5773, -1678,5774,5775,5776, 998,5777,5778,5779,5780,5781,5782,5783,5784,5785,1384,5786, -5787,5788,5789,5790,5791,5792,5793,5794,5795,5796,5797,5798,5799,5800,1679,5801, -5802,5803,1115,1116,5804,5805,5806,5807,5808,5809,5810,5811,5812,5813,5814,5815, -5816,5817,5818,5819,5820,5821,5822,5823,5824,5825,5826,5827,5828,5829,5830,5831, -5832,5833,5834,5835,5836,5837,5838,5839,5840,5841,5842,5843,5844,5845,5846,5847, -5848,5849,5850,5851,5852,5853,5854,5855,1680,5856,5857,5858,5859,5860,5861,5862, -5863,5864,1681,5865,5866,5867,1682,5868,5869,5870,5871,5872,5873,5874,5875,5876, -5877,5878,5879,1683,5880,1684,5881,5882,5883,5884,1685,5885,5886,5887,5888,5889, -5890,5891,5892,5893,5894,5895,5896,5897,5898,5899,5900,5901,5902,5903,5904,5905, -5906,5907,1686,5908,5909,5910,5911,5912,5913,5914,5915,5916,5917,5918,5919,5920, -5921,5922,5923,5924,5925,5926,5927,5928,5929,5930,5931,5932,5933,5934,5935,1687, -5936,5937,5938,5939,5940,5941,5942,5943,5944,5945,5946,5947,5948,5949,5950,5951, -5952,1688,1689,5953,1199,5954,5955,5956,5957,5958,5959,5960,5961,1690,5962,5963, -5964,5965,5966,5967,5968,5969,5970,5971,5972,5973,5974,5975,5976,5977,5978,5979, -5980,5981,1385,5982,1386,5983,5984,5985,5986,5987,5988,5989,5990,5991,5992,5993, -5994,5995,5996,5997,5998,5999,6000,6001,6002,6003,6004,6005,6006,6007,6008,6009, -6010,6011,6012,6013,6014,6015,6016,6017,6018,6019,6020,6021,6022,6023,6024,6025, -6026,6027,1265,6028,6029,1691,6030,6031,6032,6033,6034,6035,6036,6037,6038,6039, -6040,6041,6042,6043,6044,6045,6046,6047,6048,6049,6050,6051,6052,6053,6054,6055, -6056,6057,6058,6059,6060,6061,6062,6063,6064,6065,6066,6067,6068,6069,6070,6071, -6072,6073,6074,6075,6076,6077,6078,6079,6080,6081,6082,6083,6084,1692,6085,6086, -6087,6088,6089,6090,6091,6092,6093,6094,6095,6096,6097,6098,6099,6100,6101,6102, -6103,6104,6105,6106,6107,6108,6109,6110,6111,6112,6113,6114,6115,6116,6117,6118, -6119,6120,6121,6122,6123,6124,6125,6126,6127,6128,6129,6130,6131,1693,6132,6133, -6134,6135,6136,1694,6137,6138,6139,6140,6141,1695,6142,6143,6144,6145,6146,6147, -6148,6149,6150,6151,6152,6153,6154,6155,6156,6157,6158,6159,6160,6161,6162,6163, -6164,6165,6166,6167,6168,6169,6170,6171,6172,6173,6174,6175,6176,6177,6178,6179, -6180,6181,6182,6183,6184,6185,1696,6186,6187,6188,6189,6190,6191,6192,6193,6194, -6195,6196,6197,6198,6199,6200,6201,6202,6203,6204,6205,6206,6207,6208,6209,6210, -6211,6212,6213,6214,6215,6216,6217,6218,6219,1697,6220,6221,6222,6223,6224,6225, -6226,6227,6228,6229,6230,6231,6232,6233,6234,6235,6236,6237,6238,6239,6240,6241, -6242,6243,6244,6245,6246,6247,6248,6249,6250,6251,6252,6253,1698,6254,6255,6256, -6257,6258,6259,6260,6261,6262,6263,1200,6264,6265,6266,6267,6268,6269,6270,6271, #1024 -6272,6273,6274,6275,6276,6277,6278,6279,6280,6281,6282,6283,6284,6285,6286,6287, -6288,6289,6290,6291,6292,6293,6294,6295,6296,6297,6298,6299,6300,6301,6302,1699, -6303,6304,1700,6305,6306,6307,6308,6309,6310,6311,6312,6313,6314,6315,6316,6317, -6318,6319,6320,6321,6322,6323,6324,6325,6326,6327,6328,6329,6330,6331,6332,6333, -6334,6335,6336,6337,6338,6339,1701,6340,6341,6342,6343,6344,1387,6345,6346,6347, -6348,6349,6350,6351,6352,6353,6354,6355,6356,6357,6358,6359,6360,6361,6362,6363, -6364,6365,6366,6367,6368,6369,6370,6371,6372,6373,6374,6375,6376,6377,6378,6379, -6380,6381,6382,6383,6384,6385,6386,6387,6388,6389,6390,6391,6392,6393,6394,6395, -6396,6397,6398,6399,6400,6401,6402,6403,6404,6405,6406,6407,6408,6409,6410,6411, -6412,6413,1702,6414,6415,6416,6417,6418,6419,6420,6421,6422,1703,6423,6424,6425, -6426,6427,6428,6429,6430,6431,6432,6433,6434,6435,6436,6437,6438,1704,6439,6440, -6441,6442,6443,6444,6445,6446,6447,6448,6449,6450,6451,6452,6453,6454,6455,6456, -6457,6458,6459,6460,6461,6462,6463,6464,6465,6466,6467,6468,6469,6470,6471,6472, -6473,6474,6475,6476,6477,6478,6479,6480,6481,6482,6483,6484,6485,6486,6487,6488, -6489,6490,6491,6492,6493,6494,6495,6496,6497,6498,6499,6500,6501,6502,6503,1266, -6504,6505,6506,6507,6508,6509,6510,6511,6512,6513,6514,6515,6516,6517,6518,6519, -6520,6521,6522,6523,6524,6525,6526,6527,6528,6529,6530,6531,6532,6533,6534,6535, -6536,6537,6538,6539,6540,6541,6542,6543,6544,6545,6546,6547,6548,6549,6550,6551, -1705,1706,6552,6553,6554,6555,6556,6557,6558,6559,6560,6561,6562,6563,6564,6565, -6566,6567,6568,6569,6570,6571,6572,6573,6574,6575,6576,6577,6578,6579,6580,6581, -6582,6583,6584,6585,6586,6587,6588,6589,6590,6591,6592,6593,6594,6595,6596,6597, -6598,6599,6600,6601,6602,6603,6604,6605,6606,6607,6608,6609,6610,6611,6612,6613, -6614,6615,6616,6617,6618,6619,6620,6621,6622,6623,6624,6625,6626,6627,6628,6629, -6630,6631,6632,6633,6634,6635,6636,6637,1388,6638,6639,6640,6641,6642,6643,6644, -1707,6645,6646,6647,6648,6649,6650,6651,6652,6653,6654,6655,6656,6657,6658,6659, -6660,6661,6662,6663,1708,6664,6665,6666,6667,6668,6669,6670,6671,6672,6673,6674, -1201,6675,6676,6677,6678,6679,6680,6681,6682,6683,6684,6685,6686,6687,6688,6689, -6690,6691,6692,6693,6694,6695,6696,6697,6698,6699,6700,6701,6702,6703,6704,6705, -6706,6707,6708,6709,6710,6711,6712,6713,6714,6715,6716,6717,6718,6719,6720,6721, -6722,6723,6724,6725,1389,6726,6727,6728,6729,6730,6731,6732,6733,6734,6735,6736, -1390,1709,6737,6738,6739,6740,6741,6742,1710,6743,6744,6745,6746,1391,6747,6748, -6749,6750,6751,6752,6753,6754,6755,6756,6757,1392,6758,6759,6760,6761,6762,6763, -6764,6765,6766,6767,6768,6769,6770,6771,6772,6773,6774,6775,6776,6777,6778,6779, -6780,1202,6781,6782,6783,6784,6785,6786,6787,6788,6789,6790,6791,6792,6793,6794, -6795,6796,6797,6798,6799,6800,6801,6802,6803,6804,6805,6806,6807,6808,6809,1711, -6810,6811,6812,6813,6814,6815,6816,6817,6818,6819,6820,6821,6822,6823,6824,6825, -6826,6827,6828,6829,6830,6831,6832,6833,6834,6835,6836,1393,6837,6838,6839,6840, -6841,6842,6843,6844,6845,6846,6847,6848,6849,6850,6851,6852,6853,6854,6855,6856, -6857,6858,6859,6860,6861,6862,6863,6864,6865,6866,6867,6868,6869,6870,6871,6872, -6873,6874,6875,6876,6877,6878,6879,6880,6881,6882,6883,6884,6885,6886,6887,6888, -6889,6890,6891,6892,6893,6894,6895,6896,6897,6898,6899,6900,6901,6902,1712,6903, -6904,6905,6906,6907,6908,6909,6910,1713,6911,6912,6913,6914,6915,6916,6917,6918, -6919,6920,6921,6922,6923,6924,6925,6926,6927,6928,6929,6930,6931,6932,6933,6934, -6935,6936,6937,6938,6939,6940,6941,6942,6943,6944,6945,6946,6947,6948,6949,6950, -6951,6952,6953,6954,6955,6956,6957,6958,6959,6960,6961,6962,6963,6964,6965,6966, -6967,6968,6969,6970,6971,6972,6973,6974,1714,6975,6976,6977,6978,6979,6980,6981, -6982,6983,6984,6985,6986,6987,6988,1394,6989,6990,6991,6992,6993,6994,6995,6996, -6997,6998,6999,7000,1715,7001,7002,7003,7004,7005,7006,7007,7008,7009,7010,7011, -7012,7013,7014,7015,7016,7017,7018,7019,7020,7021,7022,7023,7024,7025,7026,7027, -7028,1716,7029,7030,7031,7032,7033,7034,7035,7036,7037,7038,7039,7040,7041,7042, -7043,7044,7045,7046,7047,7048,7049,7050,7051,7052,7053,7054,7055,7056,7057,7058, -7059,7060,7061,7062,7063,7064,7065,7066,7067,7068,7069,7070,7071,7072,7073,7074, -7075,7076,7077,7078,7079,7080,7081,7082,7083,7084,7085,7086,7087,7088,7089,7090, -7091,7092,7093,7094,7095,7096,7097,7098,7099,7100,7101,7102,7103,7104,7105,7106, -7107,7108,7109,7110,7111,7112,7113,7114,7115,7116,7117,7118,7119,7120,7121,7122, -7123,7124,7125,7126,7127,7128,7129,7130,7131,7132,7133,7134,7135,7136,7137,7138, -7139,7140,7141,7142,7143,7144,7145,7146,7147,7148,7149,7150,7151,7152,7153,7154, -7155,7156,7157,7158,7159,7160,7161,7162,7163,7164,7165,7166,7167,7168,7169,7170, -7171,7172,7173,7174,7175,7176,7177,7178,7179,7180,7181,7182,7183,7184,7185,7186, -7187,7188,7189,7190,7191,7192,7193,7194,7195,7196,7197,7198,7199,7200,7201,7202, -7203,7204,7205,7206,7207,1395,7208,7209,7210,7211,7212,7213,1717,7214,7215,7216, -7217,7218,7219,7220,7221,7222,7223,7224,7225,7226,7227,7228,7229,7230,7231,7232, -7233,7234,7235,7236,7237,7238,7239,7240,7241,7242,7243,7244,7245,7246,7247,7248, -7249,7250,7251,7252,7253,7254,7255,7256,7257,7258,7259,7260,7261,7262,7263,7264, -7265,7266,7267,7268,7269,7270,7271,7272,7273,7274,7275,7276,7277,7278,7279,7280, -7281,7282,7283,7284,7285,7286,7287,7288,7289,7290,7291,7292,7293,7294,7295,7296, -7297,7298,7299,7300,7301,7302,7303,7304,7305,7306,7307,7308,7309,7310,7311,7312, -7313,1718,7314,7315,7316,7317,7318,7319,7320,7321,7322,7323,7324,7325,7326,7327, -7328,7329,7330,7331,7332,7333,7334,7335,7336,7337,7338,7339,7340,7341,7342,7343, -7344,7345,7346,7347,7348,7349,7350,7351,7352,7353,7354,7355,7356,7357,7358,7359, -7360,7361,7362,7363,7364,7365,7366,7367,7368,7369,7370,7371,7372,7373,7374,7375, -7376,7377,7378,7379,7380,7381,7382,7383,7384,7385,7386,7387,7388,7389,7390,7391, -7392,7393,7394,7395,7396,7397,7398,7399,7400,7401,7402,7403,7404,7405,7406,7407, -7408,7409,7410,7411,7412,7413,7414,7415,7416,7417,7418,7419,7420,7421,7422,7423, -7424,7425,7426,7427,7428,7429,7430,7431,7432,7433,7434,7435,7436,7437,7438,7439, -7440,7441,7442,7443,7444,7445,7446,7447,7448,7449,7450,7451,7452,7453,7454,7455, -7456,7457,7458,7459,7460,7461,7462,7463,7464,7465,7466,7467,7468,7469,7470,7471, -7472,7473,7474,7475,7476,7477,7478,7479,7480,7481,7482,7483,7484,7485,7486,7487, -7488,7489,7490,7491,7492,7493,7494,7495,7496,7497,7498,7499,7500,7501,7502,7503, -7504,7505,7506,7507,7508,7509,7510,7511,7512,7513,7514,7515,7516,7517,7518,7519, -7520,7521,7522,7523,7524,7525,7526,7527,7528,7529,7530,7531,7532,7533,7534,7535, -7536,7537,7538,7539,7540,7541,7542,7543,7544,7545,7546,7547,7548,7549,7550,7551, -7552,7553,7554,7555,7556,7557,7558,7559,7560,7561,7562,7563,7564,7565,7566,7567, -7568,7569,7570,7571,7572,7573,7574,7575,7576,7577,7578,7579,7580,7581,7582,7583, -7584,7585,7586,7587,7588,7589,7590,7591,7592,7593,7594,7595,7596,7597,7598,7599, -7600,7601,7602,7603,7604,7605,7606,7607,7608,7609,7610,7611,7612,7613,7614,7615, -7616,7617,7618,7619,7620,7621,7622,7623,7624,7625,7626,7627,7628,7629,7630,7631, -7632,7633,7634,7635,7636,7637,7638,7639,7640,7641,7642,7643,7644,7645,7646,7647, -7648,7649,7650,7651,7652,7653,7654,7655,7656,7657,7658,7659,7660,7661,7662,7663, -7664,7665,7666,7667,7668,7669,7670,7671,7672,7673,7674,7675,7676,7677,7678,7679, -7680,7681,7682,7683,7684,7685,7686,7687,7688,7689,7690,7691,7692,7693,7694,7695, -7696,7697,7698,7699,7700,7701,7702,7703,7704,7705,7706,7707,7708,7709,7710,7711, -7712,7713,7714,7715,7716,7717,7718,7719,7720,7721,7722,7723,7724,7725,7726,7727, -7728,7729,7730,7731,7732,7733,7734,7735,7736,7737,7738,7739,7740,7741,7742,7743, -7744,7745,7746,7747,7748,7749,7750,7751,7752,7753,7754,7755,7756,7757,7758,7759, -7760,7761,7762,7763,7764,7765,7766,7767,7768,7769,7770,7771,7772,7773,7774,7775, -7776,7777,7778,7779,7780,7781,7782,7783,7784,7785,7786,7787,7788,7789,7790,7791, -7792,7793,7794,7795,7796,7797,7798,7799,7800,7801,7802,7803,7804,7805,7806,7807, -7808,7809,7810,7811,7812,7813,7814,7815,7816,7817,7818,7819,7820,7821,7822,7823, -7824,7825,7826,7827,7828,7829,7830,7831,7832,7833,7834,7835,7836,7837,7838,7839, -7840,7841,7842,7843,7844,7845,7846,7847,7848,7849,7850,7851,7852,7853,7854,7855, -7856,7857,7858,7859,7860,7861,7862,7863,7864,7865,7866,7867,7868,7869,7870,7871, -7872,7873,7874,7875,7876,7877,7878,7879,7880,7881,7882,7883,7884,7885,7886,7887, -7888,7889,7890,7891,7892,7893,7894,7895,7896,7897,7898,7899,7900,7901,7902,7903, -7904,7905,7906,7907,7908,7909,7910,7911,7912,7913,7914,7915,7916,7917,7918,7919, -7920,7921,7922,7923,7924,7925,7926,7927,7928,7929,7930,7931,7932,7933,7934,7935, -7936,7937,7938,7939,7940,7941,7942,7943,7944,7945,7946,7947,7948,7949,7950,7951, -7952,7953,7954,7955,7956,7957,7958,7959,7960,7961,7962,7963,7964,7965,7966,7967, -7968,7969,7970,7971,7972,7973,7974,7975,7976,7977,7978,7979,7980,7981,7982,7983, -7984,7985,7986,7987,7988,7989,7990,7991,7992,7993,7994,7995,7996,7997,7998,7999, -8000,8001,8002,8003,8004,8005,8006,8007,8008,8009,8010,8011,8012,8013,8014,8015, -8016,8017,8018,8019,8020,8021,8022,8023,8024,8025,8026,8027,8028,8029,8030,8031, -8032,8033,8034,8035,8036,8037,8038,8039,8040,8041,8042,8043,8044,8045,8046,8047, -8048,8049,8050,8051,8052,8053,8054,8055,8056,8057,8058,8059,8060,8061,8062,8063, -8064,8065,8066,8067,8068,8069,8070,8071,8072,8073,8074,8075,8076,8077,8078,8079, -8080,8081,8082,8083,8084,8085,8086,8087,8088,8089,8090,8091,8092,8093,8094,8095, -8096,8097,8098,8099,8100,8101,8102,8103,8104,8105,8106,8107,8108,8109,8110,8111, -8112,8113,8114,8115,8116,8117,8118,8119,8120,8121,8122,8123,8124,8125,8126,8127, -8128,8129,8130,8131,8132,8133,8134,8135,8136,8137,8138,8139,8140,8141,8142,8143, -8144,8145,8146,8147,8148,8149,8150,8151,8152,8153,8154,8155,8156,8157,8158,8159, -8160,8161,8162,8163,8164,8165,8166,8167,8168,8169,8170,8171,8172,8173,8174,8175, -8176,8177,8178,8179,8180,8181,8182,8183,8184,8185,8186,8187,8188,8189,8190,8191, -8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8203,8204,8205,8206,8207, -8208,8209,8210,8211,8212,8213,8214,8215,8216,8217,8218,8219,8220,8221,8222,8223, -8224,8225,8226,8227,8228,8229,8230,8231,8232,8233,8234,8235,8236,8237,8238,8239, -8240,8241,8242,8243,8244,8245,8246,8247,8248,8249,8250,8251,8252,8253,8254,8255, -8256,8257,8258,8259,8260,8261,8262,8263,8264,8265,8266,8267,8268,8269,8270,8271, -8272,8273,8274,8275,8276,8277,8278,8279,8280,8281,8282,8283,8284,8285,8286,8287, -8288,8289,8290,8291,8292,8293,8294,8295,8296,8297,8298,8299,8300,8301,8302,8303, -8304,8305,8306,8307,8308,8309,8310,8311,8312,8313,8314,8315,8316,8317,8318,8319, -8320,8321,8322,8323,8324,8325,8326,8327,8328,8329,8330,8331,8332,8333,8334,8335, -8336,8337,8338,8339,8340,8341,8342,8343,8344,8345,8346,8347,8348,8349,8350,8351, -8352,8353,8354,8355,8356,8357,8358,8359,8360,8361,8362,8363,8364,8365,8366,8367, -8368,8369,8370,8371,8372,8373,8374,8375,8376,8377,8378,8379,8380,8381,8382,8383, -8384,8385,8386,8387,8388,8389,8390,8391,8392,8393,8394,8395,8396,8397,8398,8399, -8400,8401,8402,8403,8404,8405,8406,8407,8408,8409,8410,8411,8412,8413,8414,8415, -8416,8417,8418,8419,8420,8421,8422,8423,8424,8425,8426,8427,8428,8429,8430,8431, -8432,8433,8434,8435,8436,8437,8438,8439,8440,8441,8442,8443,8444,8445,8446,8447, -8448,8449,8450,8451,8452,8453,8454,8455,8456,8457,8458,8459,8460,8461,8462,8463, -8464,8465,8466,8467,8468,8469,8470,8471,8472,8473,8474,8475,8476,8477,8478,8479, -8480,8481,8482,8483,8484,8485,8486,8487,8488,8489,8490,8491,8492,8493,8494,8495, -8496,8497,8498,8499,8500,8501,8502,8503,8504,8505,8506,8507,8508,8509,8510,8511, -8512,8513,8514,8515,8516,8517,8518,8519,8520,8521,8522,8523,8524,8525,8526,8527, -8528,8529,8530,8531,8532,8533,8534,8535,8536,8537,8538,8539,8540,8541,8542,8543, -8544,8545,8546,8547,8548,8549,8550,8551,8552,8553,8554,8555,8556,8557,8558,8559, -8560,8561,8562,8563,8564,8565,8566,8567,8568,8569,8570,8571,8572,8573,8574,8575, -8576,8577,8578,8579,8580,8581,8582,8583,8584,8585,8586,8587,8588,8589,8590,8591, -8592,8593,8594,8595,8596,8597,8598,8599,8600,8601,8602,8603,8604,8605,8606,8607, -8608,8609,8610,8611,8612,8613,8614,8615,8616,8617,8618,8619,8620,8621,8622,8623, -8624,8625,8626,8627,8628,8629,8630,8631,8632,8633,8634,8635,8636,8637,8638,8639, -8640,8641,8642,8643,8644,8645,8646,8647,8648,8649,8650,8651,8652,8653,8654,8655, -8656,8657,8658,8659,8660,8661,8662,8663,8664,8665,8666,8667,8668,8669,8670,8671, -8672,8673,8674,8675,8676,8677,8678,8679,8680,8681,8682,8683,8684,8685,8686,8687, -8688,8689,8690,8691,8692,8693,8694,8695,8696,8697,8698,8699,8700,8701,8702,8703, -8704,8705,8706,8707,8708,8709,8710,8711,8712,8713,8714,8715,8716,8717,8718,8719, -8720,8721,8722,8723,8724,8725,8726,8727,8728,8729,8730,8731,8732,8733,8734,8735, -8736,8737,8738,8739,8740,8741 -].freeze -end diff --git a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/euckrprober.rb b/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/euckrprober.rb deleted file mode 100644 index 2acb5bd0..00000000 --- a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/euckrprober.rb +++ /dev/null @@ -1,42 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is mozilla.org code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Jeff Hodges - port to Ruby -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -module CharDet - class EUCKRProber < MultiByteCharSetProber - def initialize - super() - @codingSM = CodingStateMachine.new(EUCKRSMModel) - @distributionAnalyzer = EUCKRDistributionAnalysis.new() - reset() - end - - def get_charset_name - return "EUC-KR" - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/euctwfreq.rb b/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/euctwfreq.rb deleted file mode 100644 index 755f9858..00000000 --- a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/euctwfreq.rb +++ /dev/null @@ -1,431 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Jeff Hodges - port to Ruby -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -# EUCTW frequency table -# Converted from big5 work -# by Taiwan's Mandarin Promotion Council -# - -# 128 --> 0.42261 -# 256 --> 0.57851 -# 512 --> 0.74851 -# 1024 --> 0.89384 -# 2048 --> 0.97583 -# -# Idea Distribution Ratio = 0.74851/(1-0.74851) =2.98 -# Random Distribution Ration = 512/(5401-512)=0.105 -# -# Typical Distribution Ratio about 25% of Ideal one, still much higher than RDR - -module CharDet - -EUCTW_TYPICAL_DISTRIBUTION_RATIO = 0.75 - -# Char to FreqOrder table , -EUCTW_TABLE_SIZE = 8102 - -EUCTWCharToFreqOrder = [ - 1,1800,1506, 255,1431, 198, 9, 82, 6,7310, 177, 202,3615,1256,2808, 110, # 2742 -3735, 33,3241, 261, 76, 44,2113, 16,2931,2184,1176, 659,3868, 26,3404,2643, # 2758 -1198,3869,3313,4060, 410,2211, 302, 590, 361,1963, 8, 204, 58,4296,7311,1931, # 2774 - 63,7312,7313, 317,1614, 75, 222, 159,4061,2412,1480,7314,3500,3068, 224,2809, # 2790 -3616, 3, 10,3870,1471, 29,2774,1135,2852,1939, 873, 130,3242,1123, 312,7315, # 2806 -4297,2051, 507, 252, 682,7316, 142,1914, 124, 206,2932, 34,3501,3173, 64, 604, # 2822 -7317,2494,1976,1977, 155,1990, 645, 641,1606,7318,3405, 337, 72, 406,7319, 80, # 2838 - 630, 238,3174,1509, 263, 939,1092,2644, 756,1440,1094,3406, 449, 69,2969, 591, # 2854 - 179,2095, 471, 115,2034,1843, 60, 50,2970, 134, 806,1868, 734,2035,3407, 180, # 2870 - 995,1607, 156, 537,2893, 688,7320, 319,1305, 779,2144, 514,2374, 298,4298, 359, # 2886 -2495, 90,2707,1338, 663, 11, 906,1099,2545, 20,2436, 182, 532,1716,7321, 732, # 2902 -1376,4062,1311,1420,3175, 25,2312,1056, 113, 399, 382,1949, 242,3408,2467, 529, # 2918 -3243, 475,1447,3617,7322, 117, 21, 656, 810,1297,2295,2329,3502,7323, 126,4063, # 2934 - 706, 456, 150, 613,4299, 71,1118,2036,4064, 145,3069, 85, 835, 486,2114,1246, # 2950 -1426, 428, 727,1285,1015, 800, 106, 623, 303,1281,7324,2127,2354, 347,3736, 221, # 2966 -3503,3110,7325,1955,1153,4065, 83, 296,1199,3070, 192, 624, 93,7326, 822,1897, # 2982 -2810,3111, 795,2064, 991,1554,1542,1592, 27, 43,2853, 859, 139,1456, 860,4300, # 2998 - 437, 712,3871, 164,2392,3112, 695, 211,3017,2096, 195,3872,1608,3504,3505,3618, # 3014 -3873, 234, 811,2971,2097,3874,2229,1441,3506,1615,2375, 668,2076,1638, 305, 228, # 3030 -1664,4301, 467, 415,7327, 262,2098,1593, 239, 108, 300, 200,1033, 512,1247,2077, # 3046 -7328,7329,2173,3176,3619,2673, 593, 845,1062,3244, 88,1723,2037,3875,1950, 212, # 3062 - 266, 152, 149, 468,1898,4066,4302, 77, 187,7330,3018, 37, 5,2972,7331,3876, # 3078 -7332,7333, 39,2517,4303,2894,3177,2078, 55, 148, 74,4304, 545, 483,1474,1029, # 3094 -1665, 217,1869,1531,3113,1104,2645,4067, 24, 172,3507, 900,3877,3508,3509,4305, # 3110 - 32,1408,2811,1312, 329, 487,2355,2247,2708, 784,2674, 4,3019,3314,1427,1788, # 3126 - 188, 109, 499,7334,3620,1717,1789, 888,1217,3020,4306,7335,3510,7336,3315,1520, # 3142 -3621,3878, 196,1034, 775,7337,7338, 929,1815, 249, 439, 38,7339,1063,7340, 794, # 3158 -3879,1435,2296, 46, 178,3245,2065,7341,2376,7342, 214,1709,4307, 804, 35, 707, # 3174 - 324,3622,1601,2546, 140, 459,4068,7343,7344,1365, 839, 272, 978,2257,2572,3409, # 3190 -2128,1363,3623,1423, 697, 100,3071, 48, 70,1231, 495,3114,2193,7345,1294,7346, # 3206 -2079, 462, 586,1042,3246, 853, 256, 988, 185,2377,3410,1698, 434,1084,7347,3411, # 3222 - 314,2615,2775,4308,2330,2331, 569,2280, 637,1816,2518, 757,1162,1878,1616,3412, # 3238 - 287,1577,2115, 768,4309,1671,2854,3511,2519,1321,3737, 909,2413,7348,4069, 933, # 3254 -3738,7349,2052,2356,1222,4310, 765,2414,1322, 786,4311,7350,1919,1462,1677,2895, # 3270 -1699,7351,4312,1424,2437,3115,3624,2590,3316,1774,1940,3413,3880,4070, 309,1369, # 3286 -1130,2812, 364,2230,1653,1299,3881,3512,3882,3883,2646, 525,1085,3021, 902,2000, # 3302 -1475, 964,4313, 421,1844,1415,1057,2281, 940,1364,3116, 376,4314,4315,1381, 7, # 3318 -2520, 983,2378, 336,1710,2675,1845, 321,3414, 559,1131,3022,2742,1808,1132,1313, # 3334 - 265,1481,1857,7352, 352,1203,2813,3247, 167,1089, 420,2814, 776, 792,1724,3513, # 3350 -4071,2438,3248,7353,4072,7354, 446, 229, 333,2743, 901,3739,1200,1557,4316,2647, # 3366 -1920, 395,2744,2676,3740,4073,1835, 125, 916,3178,2616,4317,7355,7356,3741,7357, # 3382 -7358,7359,4318,3117,3625,1133,2547,1757,3415,1510,2313,1409,3514,7360,2145, 438, # 3398 -2591,2896,2379,3317,1068, 958,3023, 461, 311,2855,2677,4074,1915,3179,4075,1978, # 3414 - 383, 750,2745,2617,4076, 274, 539, 385,1278,1442,7361,1154,1964, 384, 561, 210, # 3430 - 98,1295,2548,3515,7362,1711,2415,1482,3416,3884,2897,1257, 129,7363,3742, 642, # 3446 - 523,2776,2777,2648,7364, 141,2231,1333, 68, 176, 441, 876, 907,4077, 603,2592, # 3462 - 710, 171,3417, 404, 549, 18,3118,2393,1410,3626,1666,7365,3516,4319,2898,4320, # 3478 -7366,2973, 368,7367, 146, 366, 99, 871,3627,1543, 748, 807,1586,1185, 22,2258, # 3494 - 379,3743,3180,7368,3181, 505,1941,2618,1991,1382,2314,7369, 380,2357, 218, 702, # 3510 -1817,1248,3418,3024,3517,3318,3249,7370,2974,3628, 930,3250,3744,7371, 59,7372, # 3526 - 585, 601,4078, 497,3419,1112,1314,4321,1801,7373,1223,1472,2174,7374, 749,1836, # 3542 - 690,1899,3745,1772,3885,1476, 429,1043,1790,2232,2116, 917,4079, 447,1086,1629, # 3558 -7375, 556,7376,7377,2020,1654, 844,1090, 105, 550, 966,1758,2815,1008,1782, 686, # 3574 -1095,7378,2282, 793,1602,7379,3518,2593,4322,4080,2933,2297,4323,3746, 980,2496, # 3590 - 544, 353, 527,4324, 908,2678,2899,7380, 381,2619,1942,1348,7381,1341,1252, 560, # 3606 -3072,7382,3420,2856,7383,2053, 973, 886,2080, 143,4325,7384,7385, 157,3886, 496, # 3622 -4081, 57, 840, 540,2038,4326,4327,3421,2117,1445, 970,2259,1748,1965,2081,4082, # 3638 -3119,1234,1775,3251,2816,3629, 773,1206,2129,1066,2039,1326,3887,1738,1725,4083, # 3654 - 279,3120, 51,1544,2594, 423,1578,2130,2066, 173,4328,1879,7386,7387,1583, 264, # 3670 - 610,3630,4329,2439, 280, 154,7388,7389,7390,1739, 338,1282,3073, 693,2857,1411, # 3686 -1074,3747,2440,7391,4330,7392,7393,1240, 952,2394,7394,2900,1538,2679, 685,1483, # 3702 -4084,2468,1436, 953,4085,2054,4331, 671,2395, 79,4086,2441,3252, 608, 567,2680, # 3718 -3422,4087,4088,1691, 393,1261,1791,2396,7395,4332,7396,7397,7398,7399,1383,1672, # 3734 -3748,3182,1464, 522,1119, 661,1150, 216, 675,4333,3888,1432,3519, 609,4334,2681, # 3750 -2397,7400,7401,7402,4089,3025, 0,7403,2469, 315, 231,2442, 301,3319,4335,2380, # 3766 -7404, 233,4090,3631,1818,4336,4337,7405, 96,1776,1315,2082,7406, 257,7407,1809, # 3782 -3632,2709,1139,1819,4091,2021,1124,2163,2778,1777,2649,7408,3074, 363,1655,3183, # 3798 -7409,2975,7410,7411,7412,3889,1567,3890, 718, 103,3184, 849,1443, 341,3320,2934, # 3814 -1484,7413,1712, 127, 67, 339,4092,2398, 679,1412, 821,7414,7415, 834, 738, 351, # 3830 -2976,2146, 846, 235,1497,1880, 418,1992,3749,2710, 186,1100,2147,2746,3520,1545, # 3846 -1355,2935,2858,1377, 583,3891,4093,2573,2977,7416,1298,3633,1078,2549,3634,2358, # 3862 - 78,3750,3751, 267,1289,2099,2001,1594,4094, 348, 369,1274,2194,2175,1837,4338, # 3878 -1820,2817,3635,2747,2283,2002,4339,2936,2748, 144,3321, 882,4340,3892,2749,3423, # 3894 -4341,2901,7417,4095,1726, 320,7418,3893,3026, 788,2978,7419,2818,1773,1327,2859, # 3910 -3894,2819,7420,1306,4342,2003,1700,3752,3521,2359,2650, 787,2022, 506, 824,3636, # 3926 - 534, 323,4343,1044,3322,2023,1900, 946,3424,7421,1778,1500,1678,7422,1881,4344, # 3942 - 165, 243,4345,3637,2521, 123, 683,4096, 764,4346, 36,3895,1792, 589,2902, 816, # 3958 - 626,1667,3027,2233,1639,1555,1622,3753,3896,7423,3897,2860,1370,1228,1932, 891, # 3974 -2083,2903, 304,4097,7424, 292,2979,2711,3522, 691,2100,4098,1115,4347, 118, 662, # 3990 -7425, 611,1156, 854,2381,1316,2861, 2, 386, 515,2904,7426,7427,3253, 868,2234, # 4006 -1486, 855,2651, 785,2212,3028,7428,1040,3185,3523,7429,3121, 448,7430,1525,7431, # 4022 -2164,4348,7432,3754,7433,4099,2820,3524,3122, 503, 818,3898,3123,1568, 814, 676, # 4038 -1444, 306,1749,7434,3755,1416,1030, 197,1428, 805,2821,1501,4349,7435,7436,7437, # 4054 -1993,7438,4350,7439,7440,2195, 13,2779,3638,2980,3124,1229,1916,7441,3756,2131, # 4070 -7442,4100,4351,2399,3525,7443,2213,1511,1727,1120,7444,7445, 646,3757,2443, 307, # 4086 -7446,7447,1595,3186,7448,7449,7450,3639,1113,1356,3899,1465,2522,2523,7451, 519, # 4102 -7452, 128,2132, 92,2284,1979,7453,3900,1512, 342,3125,2196,7454,2780,2214,1980, # 4118 -3323,7455, 290,1656,1317, 789, 827,2360,7456,3758,4352, 562, 581,3901,7457, 401, # 4134 -4353,2248, 94,4354,1399,2781,7458,1463,2024,4355,3187,1943,7459, 828,1105,4101, # 4150 -1262,1394,7460,4102, 605,4356,7461,1783,2862,7462,2822, 819,2101, 578,2197,2937, # 4166 -7463,1502, 436,3254,4103,3255,2823,3902,2905,3425,3426,7464,2712,2315,7465,7466, # 4182 -2332,2067, 23,4357, 193, 826,3759,2102, 699,1630,4104,3075, 390,1793,1064,3526, # 4198 -7467,1579,3076,3077,1400,7468,4105,1838,1640,2863,7469,4358,4359, 137,4106, 598, # 4214 -3078,1966, 780, 104, 974,2938,7470, 278, 899, 253, 402, 572, 504, 493,1339,7471, # 4230 -3903,1275,4360,2574,2550,7472,3640,3029,3079,2249, 565,1334,2713, 863, 41,7473, # 4246 -7474,4361,7475,1657,2333, 19, 463,2750,4107, 606,7476,2981,3256,1087,2084,1323, # 4262 -2652,2982,7477,1631,1623,1750,4108,2682,7478,2864, 791,2714,2653,2334, 232,2416, # 4278 -7479,2983,1498,7480,2654,2620, 755,1366,3641,3257,3126,2025,1609, 119,1917,3427, # 4294 - 862,1026,4109,7481,3904,3760,4362,3905,4363,2260,1951,2470,7482,1125, 817,4110, # 4310 -4111,3906,1513,1766,2040,1487,4112,3030,3258,2824,3761,3127,7483,7484,1507,7485, # 4326 -2683, 733, 40,1632,1106,2865, 345,4113, 841,2524, 230,4364,2984,1846,3259,3428, # 4342 -7486,1263, 986,3429,7487, 735, 879, 254,1137, 857, 622,1300,1180,1388,1562,3907, # 4358 -3908,2939, 967,2751,2655,1349, 592,2133,1692,3324,2985,1994,4114,1679,3909,1901, # 4374 -2185,7488, 739,3642,2715,1296,1290,7489,4115,2198,2199,1921,1563,2595,2551,1870, # 4390 -2752,2986,7490, 435,7491, 343,1108, 596, 17,1751,4365,2235,3430,3643,7492,4366, # 4406 - 294,3527,2940,1693, 477, 979, 281,2041,3528, 643,2042,3644,2621,2782,2261,1031, # 4422 -2335,2134,2298,3529,4367, 367,1249,2552,7493,3530,7494,4368,1283,3325,2004, 240, # 4438 -1762,3326,4369,4370, 836,1069,3128, 474,7495,2148,2525, 268,3531,7496,3188,1521, # 4454 -1284,7497,1658,1546,4116,7498,3532,3533,7499,4117,3327,2684,1685,4118, 961,1673, # 4470 -2622, 190,2005,2200,3762,4371,4372,7500, 570,2497,3645,1490,7501,4373,2623,3260, # 4486 -1956,4374, 584,1514, 396,1045,1944,7502,4375,1967,2444,7503,7504,4376,3910, 619, # 4502 -7505,3129,3261, 215,2006,2783,2553,3189,4377,3190,4378, 763,4119,3763,4379,7506, # 4518 -7507,1957,1767,2941,3328,3646,1174, 452,1477,4380,3329,3130,7508,2825,1253,2382, # 4534 -2186,1091,2285,4120, 492,7509, 638,1169,1824,2135,1752,3911, 648, 926,1021,1324, # 4550 -4381, 520,4382, 997, 847,1007, 892,4383,3764,2262,1871,3647,7510,2400,1784,4384, # 4566 -1952,2942,3080,3191,1728,4121,2043,3648,4385,2007,1701,3131,1551, 30,2263,4122, # 4582 -7511,2026,4386,3534,7512, 501,7513,4123, 594,3431,2165,1821,3535,3432,3536,3192, # 4598 - 829,2826,4124,7514,1680,3132,1225,4125,7515,3262,4387,4126,3133,2336,7516,4388, # 4614 -4127,7517,3912,3913,7518,1847,2383,2596,3330,7519,4389, 374,3914, 652,4128,4129, # 4630 - 375,1140, 798,7520,7521,7522,2361,4390,2264, 546,1659, 138,3031,2445,4391,7523, # 4646 -2250, 612,1848, 910, 796,3765,1740,1371, 825,3766,3767,7524,2906,2554,7525, 692, # 4662 - 444,3032,2624, 801,4392,4130,7526,1491, 244,1053,3033,4131,4132, 340,7527,3915, # 4678 -1041,2987, 293,1168, 87,1357,7528,1539, 959,7529,2236, 721, 694,4133,3768, 219, # 4694 -1478, 644,1417,3331,2656,1413,1401,1335,1389,3916,7530,7531,2988,2362,3134,1825, # 4710 - 730,1515, 184,2827, 66,4393,7532,1660,2943, 246,3332, 378,1457, 226,3433, 975, # 4726 -3917,2944,1264,3537, 674, 696,7533, 163,7534,1141,2417,2166, 713,3538,3333,4394, # 4742 -3918,7535,7536,1186, 15,7537,1079,1070,7538,1522,3193,3539, 276,1050,2716, 758, # 4758 -1126, 653,2945,3263,7539,2337, 889,3540,3919,3081,2989, 903,1250,4395,3920,3434, # 4774 -3541,1342,1681,1718, 766,3264, 286, 89,2946,3649,7540,1713,7541,2597,3334,2990, # 4790 -7542,2947,2215,3194,2866,7543,4396,2498,2526, 181, 387,1075,3921, 731,2187,3335, # 4806 -7544,3265, 310, 313,3435,2299, 770,4134, 54,3034, 189,4397,3082,3769,3922,7545, # 4822 -1230,1617,1849, 355,3542,4135,4398,3336, 111,4136,3650,1350,3135,3436,3035,4137, # 4838 -2149,3266,3543,7546,2784,3923,3924,2991, 722,2008,7547,1071, 247,1207,2338,2471, # 4854 -1378,4399,2009, 864,1437,1214,4400, 373,3770,1142,2216, 667,4401, 442,2753,2555, # 4870 -3771,3925,1968,4138,3267,1839, 837, 170,1107, 934,1336,1882,7548,7549,2118,4139, # 4886 -2828, 743,1569,7550,4402,4140, 582,2384,1418,3437,7551,1802,7552, 357,1395,1729, # 4902 -3651,3268,2418,1564,2237,7553,3083,3772,1633,4403,1114,2085,4141,1532,7554, 482, # 4918 -2446,4404,7555,7556,1492, 833,1466,7557,2717,3544,1641,2829,7558,1526,1272,3652, # 4934 -4142,1686,1794, 416,2556,1902,1953,1803,7559,3773,2785,3774,1159,2316,7560,2867, # 4950 -4405,1610,1584,3036,2419,2754, 443,3269,1163,3136,7561,7562,3926,7563,4143,2499, # 4966 -3037,4406,3927,3137,2103,1647,3545,2010,1872,4144,7564,4145, 431,3438,7565, 250, # 4982 - 97, 81,4146,7566,1648,1850,1558, 160, 848,7567, 866, 740,1694,7568,2201,2830, # 4998 -3195,4147,4407,3653,1687, 950,2472, 426, 469,3196,3654,3655,3928,7569,7570,1188, # 5014 - 424,1995, 861,3546,4148,3775,2202,2685, 168,1235,3547,4149,7571,2086,1674,4408, # 5030 -3337,3270, 220,2557,1009,7572,3776, 670,2992, 332,1208, 717,7573,7574,3548,2447, # 5046 -3929,3338,7575, 513,7576,1209,2868,3339,3138,4409,1080,7577,7578,7579,7580,2527, # 5062 -3656,3549, 815,1587,3930,3931,7581,3550,3439,3777,1254,4410,1328,3038,1390,3932, # 5078 -1741,3933,3778,3934,7582, 236,3779,2448,3271,7583,7584,3657,3780,1273,3781,4411, # 5094 -7585, 308,7586,4412, 245,4413,1851,2473,1307,2575, 430, 715,2136,2449,7587, 270, # 5110 - 199,2869,3935,7588,3551,2718,1753, 761,1754, 725,1661,1840,4414,3440,3658,7589, # 5126 -7590, 587, 14,3272, 227,2598, 326, 480,2265, 943,2755,3552, 291, 650,1883,7591, # 5142 -1702,1226, 102,1547, 62,3441, 904,4415,3442,1164,4150,7592,7593,1224,1548,2756, # 5158 - 391, 498,1493,7594,1386,1419,7595,2055,1177,4416, 813, 880,1081,2363, 566,1145, # 5174 -4417,2286,1001,1035,2558,2599,2238, 394,1286,7596,7597,2068,7598, 86,1494,1730, # 5190 -3936, 491,1588, 745, 897,2948, 843,3340,3937,2757,2870,3273,1768, 998,2217,2069, # 5206 - 397,1826,1195,1969,3659,2993,3341, 284,7599,3782,2500,2137,2119,1903,7600,3938, # 5222 -2150,3939,4151,1036,3443,1904, 114,2559,4152, 209,1527,7601,7602,2949,2831,2625, # 5238 -2385,2719,3139, 812,2560,7603,3274,7604,1559, 737,1884,3660,1210, 885, 28,2686, # 5254 -3553,3783,7605,4153,1004,1779,4418,7606, 346,1981,2218,2687,4419,3784,1742, 797, # 5270 -1642,3940,1933,1072,1384,2151, 896,3941,3275,3661,3197,2871,3554,7607,2561,1958, # 5286 -4420,2450,1785,7608,7609,7610,3942,4154,1005,1308,3662,4155,2720,4421,4422,1528, # 5302 -2600, 161,1178,4156,1982, 987,4423,1101,4157, 631,3943,1157,3198,2420,1343,1241, # 5318 -1016,2239,2562, 372, 877,2339,2501,1160, 555,1934, 911,3944,7611, 466,1170, 169, # 5334 -1051,2907,2688,3663,2474,2994,1182,2011,2563,1251,2626,7612, 992,2340,3444,1540, # 5350 -2721,1201,2070,2401,1996,2475,7613,4424, 528,1922,2188,1503,1873,1570,2364,3342, # 5366 -3276,7614, 557,1073,7615,1827,3445,2087,2266,3140,3039,3084, 767,3085,2786,4425, # 5382 -1006,4158,4426,2341,1267,2176,3664,3199, 778,3945,3200,2722,1597,2657,7616,4427, # 5398 -7617,3446,7618,7619,7620,3277,2689,1433,3278, 131, 95,1504,3946, 723,4159,3141, # 5414 -1841,3555,2758,2189,3947,2027,2104,3665,7621,2995,3948,1218,7622,3343,3201,3949, # 5430 -4160,2576, 248,1634,3785, 912,7623,2832,3666,3040,3786, 654, 53,7624,2996,7625, # 5446 -1688,4428, 777,3447,1032,3950,1425,7626, 191, 820,2120,2833, 971,4429, 931,3202, # 5462 - 135, 664, 783,3787,1997, 772,2908,1935,3951,3788,4430,2909,3203, 282,2723, 640, # 5478 -1372,3448,1127, 922, 325,3344,7627,7628, 711,2044,7629,7630,3952,2219,2787,1936, # 5494 -3953,3345,2220,2251,3789,2300,7631,4431,3790,1258,3279,3954,3204,2138,2950,3955, # 5510 -3956,7632,2221, 258,3205,4432, 101,1227,7633,3280,1755,7634,1391,3281,7635,2910, # 5526 -2056, 893,7636,7637,7638,1402,4161,2342,7639,7640,3206,3556,7641,7642, 878,1325, # 5542 -1780,2788,4433, 259,1385,2577, 744,1183,2267,4434,7643,3957,2502,7644, 684,1024, # 5558 -4162,7645, 472,3557,3449,1165,3282,3958,3959, 322,2152, 881, 455,1695,1152,1340, # 5574 - 660, 554,2153,4435,1058,4436,4163, 830,1065,3346,3960,4437,1923,7646,1703,1918, # 5590 -7647, 932,2268, 122,7648,4438, 947, 677,7649,3791,2627, 297,1905,1924,2269,4439, # 5606 -2317,3283,7650,7651,4164,7652,4165, 84,4166, 112, 989,7653, 547,1059,3961, 701, # 5622 -3558,1019,7654,4167,7655,3450, 942, 639, 457,2301,2451, 993,2951, 407, 851, 494, # 5638 -4440,3347, 927,7656,1237,7657,2421,3348, 573,4168, 680, 921,2911,1279,1874, 285, # 5654 - 790,1448,1983, 719,2167,7658,7659,4441,3962,3963,1649,7660,1541, 563,7661,1077, # 5670 -7662,3349,3041,3451, 511,2997,3964,3965,3667,3966,1268,2564,3350,3207,4442,4443, # 5686 -7663, 535,1048,1276,1189,2912,2028,3142,1438,1373,2834,2952,1134,2012,7664,4169, # 5702 -1238,2578,3086,1259,7665, 700,7666,2953,3143,3668,4170,7667,4171,1146,1875,1906, # 5718 -4444,2601,3967, 781,2422, 132,1589, 203, 147, 273,2789,2402, 898,1786,2154,3968, # 5734 -3969,7668,3792,2790,7669,7670,4445,4446,7671,3208,7672,1635,3793, 965,7673,1804, # 5750 -2690,1516,3559,1121,1082,1329,3284,3970,1449,3794, 65,1128,2835,2913,2759,1590, # 5766 -3795,7674,7675, 12,2658, 45, 976,2579,3144,4447, 517,2528,1013,1037,3209,7676, # 5782 -3796,2836,7677,3797,7678,3452,7679,2602, 614,1998,2318,3798,3087,2724,2628,7680, # 5798 -2580,4172, 599,1269,7681,1810,3669,7682,2691,3088, 759,1060, 489,1805,3351,3285, # 5814 -1358,7683,7684,2386,1387,1215,2629,2252, 490,7685,7686,4173,1759,2387,2343,7687, # 5830 -4448,3799,1907,3971,2630,1806,3210,4449,3453,3286,2760,2344, 874,7688,7689,3454, # 5846 -3670,1858, 91,2914,3671,3042,3800,4450,7690,3145,3972,2659,7691,3455,1202,1403, # 5862 -3801,2954,2529,1517,2503,4451,3456,2504,7692,4452,7693,2692,1885,1495,1731,3973, # 5878 -2365,4453,7694,2029,7695,7696,3974,2693,1216, 237,2581,4174,2319,3975,3802,4454, # 5894 -4455,2694,3560,3457, 445,4456,7697,7698,7699,7700,2761, 61,3976,3672,1822,3977, # 5910 -7701, 687,2045, 935, 925, 405,2660, 703,1096,1859,2725,4457,3978,1876,1367,2695, # 5926 -3352, 918,2105,1781,2476, 334,3287,1611,1093,4458, 564,3146,3458,3673,3353, 945, # 5942 -2631,2057,4459,7702,1925, 872,4175,7703,3459,2696,3089, 349,4176,3674,3979,4460, # 5958 -3803,4177,3675,2155,3980,4461,4462,4178,4463,2403,2046, 782,3981, 400, 251,4179, # 5974 -1624,7704,7705, 277,3676, 299,1265, 476,1191,3804,2121,4180,4181,1109, 205,7706, # 5990 -2582,1000,2156,3561,1860,7707,7708,7709,4464,7710,4465,2565, 107,2477,2157,3982, # 6006 -3460,3147,7711,1533, 541,1301, 158, 753,4182,2872,3562,7712,1696, 370,1088,4183, # 6022 -4466,3563, 579, 327, 440, 162,2240, 269,1937,1374,3461, 968,3043, 56,1396,3090, # 6038 -2106,3288,3354,7713,1926,2158,4467,2998,7714,3564,7715,7716,3677,4468,2478,7717, # 6054 -2791,7718,1650,4469,7719,2603,7720,7721,3983,2661,3355,1149,3356,3984,3805,3985, # 6070 -7722,1076, 49,7723, 951,3211,3289,3290, 450,2837, 920,7724,1811,2792,2366,4184, # 6086 -1908,1138,2367,3806,3462,7725,3212,4470,1909,1147,1518,2423,4471,3807,7726,4472, # 6102 -2388,2604, 260,1795,3213,7727,7728,3808,3291, 708,7729,3565,1704,7730,3566,1351, # 6118 -1618,3357,2999,1886, 944,4185,3358,4186,3044,3359,4187,7731,3678, 422, 413,1714, # 6134 -3292, 500,2058,2345,4188,2479,7732,1344,1910, 954,7733,1668,7734,7735,3986,2404, # 6150 -4189,3567,3809,4190,7736,2302,1318,2505,3091, 133,3092,2873,4473, 629, 31,2838, # 6166 -2697,3810,4474, 850, 949,4475,3987,2955,1732,2088,4191,1496,1852,7737,3988, 620, # 6182 -3214, 981,1242,3679,3360,1619,3680,1643,3293,2139,2452,1970,1719,3463,2168,7738, # 6198 -3215,7739,7740,3361,1828,7741,1277,4476,1565,2047,7742,1636,3568,3093,7743, 869, # 6214 -2839, 655,3811,3812,3094,3989,3000,3813,1310,3569,4477,7744,7745,7746,1733, 558, # 6230 -4478,3681, 335,1549,3045,1756,4192,3682,1945,3464,1829,1291,1192, 470,2726,2107, # 6246 -2793, 913,1054,3990,7747,1027,7748,3046,3991,4479, 982,2662,3362,3148,3465,3216, # 6262 -3217,1946,2794,7749, 571,4480,7750,1830,7751,3570,2583,1523,2424,7752,2089, 984, # 6278 -4481,3683,1959,7753,3684, 852, 923,2795,3466,3685, 969,1519, 999,2048,2320,1705, # 6294 -7754,3095, 615,1662, 151, 597,3992,2405,2321,1049, 275,4482,3686,4193, 568,3687, # 6310 -3571,2480,4194,3688,7755,2425,2270, 409,3218,7756,1566,2874,3467,1002, 769,2840, # 6326 - 194,2090,3149,3689,2222,3294,4195, 628,1505,7757,7758,1763,2177,3001,3993, 521, # 6342 -1161,2584,1787,2203,2406,4483,3994,1625,4196,4197, 412, 42,3096, 464,7759,2632, # 6358 -4484,3363,1760,1571,2875,3468,2530,1219,2204,3814,2633,2140,2368,4485,4486,3295, # 6374 -1651,3364,3572,7760,7761,3573,2481,3469,7762,3690,7763,7764,2271,2091, 460,7765, # 6390 -4487,7766,3002, 962, 588,3574, 289,3219,2634,1116, 52,7767,3047,1796,7768,7769, # 6406 -7770,1467,7771,1598,1143,3691,4198,1984,1734,1067,4488,1280,3365, 465,4489,1572, # 6422 - 510,7772,1927,2241,1812,1644,3575,7773,4490,3692,7774,7775,2663,1573,1534,7776, # 6438 -7777,4199, 536,1807,1761,3470,3815,3150,2635,7778,7779,7780,4491,3471,2915,1911, # 6454 -2796,7781,3296,1122, 377,3220,7782, 360,7783,7784,4200,1529, 551,7785,2059,3693, # 6470 -1769,2426,7786,2916,4201,3297,3097,2322,2108,2030,4492,1404, 136,1468,1479, 672, # 6486 -1171,3221,2303, 271,3151,7787,2762,7788,2049, 678,2727, 865,1947,4493,7789,2013, # 6502 -3995,2956,7790,2728,2223,1397,3048,3694,4494,4495,1735,2917,3366,3576,7791,3816, # 6518 - 509,2841,2453,2876,3817,7792,7793,3152,3153,4496,4202,2531,4497,2304,1166,1010, # 6534 - 552, 681,1887,7794,7795,2957,2958,3996,1287,1596,1861,3154, 358, 453, 736, 175, # 6550 - 478,1117, 905,1167,1097,7796,1853,1530,7797,1706,7798,2178,3472,2287,3695,3473, # 6566 -3577,4203,2092,4204,7799,3367,1193,2482,4205,1458,2190,2205,1862,1888,1421,3298, # 6582 -2918,3049,2179,3474, 595,2122,7800,3997,7801,7802,4206,1707,2636, 223,3696,1359, # 6598 - 751,3098, 183,3475,7803,2797,3003, 419,2369, 633, 704,3818,2389, 241,7804,7805, # 6614 -7806, 838,3004,3697,2272,2763,2454,3819,1938,2050,3998,1309,3099,2242,1181,7807, # 6630 -1136,2206,3820,2370,1446,4207,2305,4498,7808,7809,4208,1055,2605, 484,3698,7810, # 6646 -3999, 625,4209,2273,3368,1499,4210,4000,7811,4001,4211,3222,2274,2275,3476,7812, # 6662 -7813,2764, 808,2606,3699,3369,4002,4212,3100,2532, 526,3370,3821,4213, 955,7814, # 6678 -1620,4214,2637,2427,7815,1429,3700,1669,1831, 994, 928,7816,3578,1260,7817,7818, # 6694 -7819,1948,2288, 741,2919,1626,4215,2729,2455, 867,1184, 362,3371,1392,7820,7821, # 6710 -4003,4216,1770,1736,3223,2920,4499,4500,1928,2698,1459,1158,7822,3050,3372,2877, # 6726 -1292,1929,2506,2842,3701,1985,1187,2071,2014,2607,4217,7823,2566,2507,2169,3702, # 6742 -2483,3299,7824,3703,4501,7825,7826, 666,1003,3005,1022,3579,4218,7827,4502,1813, # 6758 -2253, 574,3822,1603, 295,1535, 705,3823,4219, 283, 858, 417,7828,7829,3224,4503, # 6774 -4504,3051,1220,1889,1046,2276,2456,4004,1393,1599, 689,2567, 388,4220,7830,2484, # 6790 - 802,7831,2798,3824,2060,1405,2254,7832,4505,3825,2109,1052,1345,3225,1585,7833, # 6806 - 809,7834,7835,7836, 575,2730,3477, 956,1552,1469,1144,2323,7837,2324,1560,2457, # 6822 -3580,3226,4005, 616,2207,3155,2180,2289,7838,1832,7839,3478,4506,7840,1319,3704, # 6838 -3705,1211,3581,1023,3227,1293,2799,7841,7842,7843,3826, 607,2306,3827, 762,2878, # 6854 -1439,4221,1360,7844,1485,3052,7845,4507,1038,4222,1450,2061,2638,4223,1379,4508, # 6870 -2585,7846,7847,4224,1352,1414,2325,2921,1172,7848,7849,3828,3829,7850,1797,1451, # 6886 -7851,7852,7853,7854,2922,4006,4007,2485,2346, 411,4008,4009,3582,3300,3101,4509, # 6902 -1561,2664,1452,4010,1375,7855,7856, 47,2959, 316,7857,1406,1591,2923,3156,7858, # 6918 -1025,2141,3102,3157, 354,2731, 884,2224,4225,2407, 508,3706, 726,3583, 996,2428, # 6934 -3584, 729,7859, 392,2191,1453,4011,4510,3707,7860,7861,2458,3585,2608,1675,2800, # 6950 - 919,2347,2960,2348,1270,4511,4012, 73,7862,7863, 647,7864,3228,2843,2255,1550, # 6966 -1346,3006,7865,1332, 883,3479,7866,7867,7868,7869,3301,2765,7870,1212, 831,1347, # 6982 -4226,4512,2326,3830,1863,3053, 720,3831,4513,4514,3832,7871,4227,7872,7873,4515, # 6998 -7874,7875,1798,4516,3708,2609,4517,3586,1645,2371,7876,7877,2924, 669,2208,2665, # 7014 -2429,7878,2879,7879,7880,1028,3229,7881,4228,2408,7882,2256,1353,7883,7884,4518, # 7030 -3158, 518,7885,4013,7886,4229,1960,7887,2142,4230,7888,7889,3007,2349,2350,3833, # 7046 - 516,1833,1454,4014,2699,4231,4519,2225,2610,1971,1129,3587,7890,2766,7891,2961, # 7062 -1422, 577,1470,3008,1524,3373,7892,7893, 432,4232,3054,3480,7894,2586,1455,2508, # 7078 -2226,1972,1175,7895,1020,2732,4015,3481,4520,7896,2733,7897,1743,1361,3055,3482, # 7094 -2639,4016,4233,4521,2290, 895, 924,4234,2170, 331,2243,3056, 166,1627,3057,1098, # 7110 -7898,1232,2880,2227,3374,4522, 657, 403,1196,2372, 542,3709,3375,1600,4235,3483, # 7126 -7899,4523,2767,3230, 576, 530,1362,7900,4524,2533,2666,3710,4017,7901, 842,3834, # 7142 -7902,2801,2031,1014,4018, 213,2700,3376, 665, 621,4236,7903,3711,2925,2430,7904, # 7158 -2431,3302,3588,3377,7905,4237,2534,4238,4525,3589,1682,4239,3484,1380,7906, 724, # 7174 -2277, 600,1670,7907,1337,1233,4526,3103,2244,7908,1621,4527,7909, 651,4240,7910, # 7190 -1612,4241,2611,7911,2844,7912,2734,2307,3058,7913, 716,2459,3059, 174,1255,2701, # 7206 -4019,3590, 548,1320,1398, 728,4020,1574,7914,1890,1197,3060,4021,7915,3061,3062, # 7222 -3712,3591,3713, 747,7916, 635,4242,4528,7917,7918,7919,4243,7920,7921,4529,7922, # 7238 -3378,4530,2432, 451,7923,3714,2535,2072,4244,2735,4245,4022,7924,1764,4531,7925, # 7254 -4246, 350,7926,2278,2390,2486,7927,4247,4023,2245,1434,4024, 488,4532, 458,4248, # 7270 -4025,3715, 771,1330,2391,3835,2568,3159,2159,2409,1553,2667,3160,4249,7928,2487, # 7286 -2881,2612,1720,2702,4250,3379,4533,7929,2536,4251,7930,3231,4252,2768,7931,2015, # 7302 -2736,7932,1155,1017,3716,3836,7933,3303,2308, 201,1864,4253,1430,7934,4026,7935, # 7318 -7936,7937,7938,7939,4254,1604,7940, 414,1865, 371,2587,4534,4535,3485,2016,3104, # 7334 -4536,1708, 960,4255, 887, 389,2171,1536,1663,1721,7941,2228,4027,2351,2926,1580, # 7350 -7942,7943,7944,1744,7945,2537,4537,4538,7946,4539,7947,2073,7948,7949,3592,3380, # 7366 -2882,4256,7950,4257,2640,3381,2802, 673,2703,2460, 709,3486,4028,3593,4258,7951, # 7382 -1148, 502, 634,7952,7953,1204,4540,3594,1575,4541,2613,3717,7954,3718,3105, 948, # 7398 -3232, 121,1745,3837,1110,7955,4259,3063,2509,3009,4029,3719,1151,1771,3838,1488, # 7414 -4030,1986,7956,2433,3487,7957,7958,2093,7959,4260,3839,1213,1407,2803, 531,2737, # 7430 -2538,3233,1011,1537,7960,2769,4261,3106,1061,7961,3720,3721,1866,2883,7962,2017, # 7446 - 120,4262,4263,2062,3595,3234,2309,3840,2668,3382,1954,4542,7963,7964,3488,1047, # 7462 -2704,1266,7965,1368,4543,2845, 649,3383,3841,2539,2738,1102,2846,2669,7966,7967, # 7478 -1999,7968,1111,3596,2962,7969,2488,3842,3597,2804,1854,3384,3722,7970,7971,3385, # 7494 -2410,2884,3304,3235,3598,7972,2569,7973,3599,2805,4031,1460, 856,7974,3600,7975, # 7510 -2885,2963,7976,2886,3843,7977,4264, 632,2510, 875,3844,1697,3845,2291,7978,7979, # 7526 -4544,3010,1239, 580,4545,4265,7980, 914, 936,2074,1190,4032,1039,2123,7981,7982, # 7542 -7983,3386,1473,7984,1354,4266,3846,7985,2172,3064,4033, 915,3305,4267,4268,3306, # 7558 -1605,1834,7986,2739, 398,3601,4269,3847,4034, 328,1912,2847,4035,3848,1331,4270, # 7574 -3011, 937,4271,7987,3602,4036,4037,3387,2160,4546,3388, 524, 742, 538,3065,1012, # 7590 -7988,7989,3849,2461,7990, 658,1103, 225,3850,7991,7992,4547,7993,4548,7994,3236, # 7606 -1243,7995,4038, 963,2246,4549,7996,2705,3603,3161,7997,7998,2588,2327,7999,4550, # 7622 -8000,8001,8002,3489,3307, 957,3389,2540,2032,1930,2927,2462, 870,2018,3604,1746, # 7638 -2770,2771,2434,2463,8003,3851,8004,3723,3107,3724,3490,3390,3725,8005,1179,3066, # 7654 -8006,3162,2373,4272,3726,2541,3163,3108,2740,4039,8007,3391,1556,2542,2292, 977, # 7670 -2887,2033,4040,1205,3392,8008,1765,3393,3164,2124,1271,1689, 714,4551,3491,8009, # 7686 -2328,3852, 533,4273,3605,2181, 617,8010,2464,3308,3492,2310,8011,8012,3165,8013, # 7702 -8014,3853,1987, 618, 427,2641,3493,3394,8015,8016,1244,1690,8017,2806,4274,4552, # 7718 -8018,3494,8019,8020,2279,1576, 473,3606,4275,3395, 972,8021,3607,8022,3067,8023, # 7734 -8024,4553,4554,8025,3727,4041,4042,8026, 153,4555, 356,8027,1891,2888,4276,2143, # 7750 - 408, 803,2352,8028,3854,8029,4277,1646,2570,2511,4556,4557,3855,8030,3856,4278, # 7766 -8031,2411,3396, 752,8032,8033,1961,2964,8034, 746,3012,2465,8035,4279,3728, 698, # 7782 -4558,1892,4280,3608,2543,4559,3609,3857,8036,3166,3397,8037,1823,1302,4043,2706, # 7798 -3858,1973,4281,8038,4282,3167, 823,1303,1288,1236,2848,3495,4044,3398, 774,3859, # 7814 -8039,1581,4560,1304,2849,3860,4561,8040,2435,2161,1083,3237,4283,4045,4284, 344, # 7830 -1173, 288,2311, 454,1683,8041,8042,1461,4562,4046,2589,8043,8044,4563, 985, 894, # 7846 -8045,3399,3168,8046,1913,2928,3729,1988,8047,2110,1974,8048,4047,8049,2571,1194, # 7862 - 425,8050,4564,3169,1245,3730,4285,8051,8052,2850,8053, 636,4565,1855,3861, 760, # 7878 -1799,8054,4286,2209,1508,4566,4048,1893,1684,2293,8055,8056,8057,4287,4288,2210, # 7894 - 479,8058,8059, 832,8060,4049,2489,8061,2965,2490,3731, 990,3109, 627,1814,2642, # 7910 -4289,1582,4290,2125,2111,3496,4567,8062, 799,4291,3170,8063,4568,2112,1737,3013, # 7926 -1018, 543, 754,4292,3309,1676,4569,4570,4050,8064,1489,8065,3497,8066,2614,2889, # 7942 -4051,8067,8068,2966,8069,8070,8071,8072,3171,4571,4572,2182,1722,8073,3238,3239, # 7958 -1842,3610,1715, 481, 365,1975,1856,8074,8075,1962,2491,4573,8076,2126,3611,3240, # 7974 - 433,1894,2063,2075,8077, 602,2741,8078,8079,8080,8081,8082,3014,1628,3400,8083, # 7990 -3172,4574,4052,2890,4575,2512,8084,2544,2772,8085,8086,8087,3310,4576,2891,8088, # 8006 -4577,8089,2851,4578,4579,1221,2967,4053,2513,8090,8091,8092,1867,1989,8093,8094, # 8022 -8095,1895,8096,8097,4580,1896,4054, 318,8098,2094,4055,4293,8099,8100, 485,8101, # 8038 - 938,3862, 553,2670, 116,8102,3863,3612,8103,3498,2671,2773,3401,3311,2807,8104, # 8054 -3613,2929,4056,1747,2930,2968,8105,8106, 207,8107,8108,2672,4581,2514,8109,3015, # 8070 - 890,3614,3864,8110,1877,3732,3402,8111,2183,2353,3403,1652,8112,8113,8114, 941, # 8086 -2294, 208,3499,4057,2019, 330,4294,3865,2892,2492,3733,4295,8115,8116,8117,8118, # 8102 -#Everything below is of no interest for detection purpose -2515,1613,4582,8119,3312,3866,2516,8120,4058,8121,1637,4059,2466,4583,3867,8122, # 8118 -2493,3016,3734,8123,8124,2192,8125,8126,2162,8127,8128,8129,8130,8131,8132,8133, # 8134 -8134,8135,8136,8137,8138,8139,8140,8141,8142,8143,8144,8145,8146,8147,8148,8149, # 8150 -8150,8151,8152,8153,8154,8155,8156,8157,8158,8159,8160,8161,8162,8163,8164,8165, # 8166 -8166,8167,8168,8169,8170,8171,8172,8173,8174,8175,8176,8177,8178,8179,8180,8181, # 8182 -8182,8183,8184,8185,8186,8187,8188,8189,8190,8191,8192,8193,8194,8195,8196,8197, # 8198 -8198,8199,8200,8201,8202,8203,8204,8205,8206,8207,8208,8209,8210,8211,8212,8213, # 8214 -8214,8215,8216,8217,8218,8219,8220,8221,8222,8223,8224,8225,8226,8227,8228,8229, # 8230 -8230,8231,8232,8233,8234,8235,8236,8237,8238,8239,8240,8241,8242,8243,8244,8245, # 8246 -8246,8247,8248,8249,8250,8251,8252,8253,8254,8255,8256,8257,8258,8259,8260,8261, # 8262 -8262,8263,8264,8265,8266,8267,8268,8269,8270,8271,8272,8273,8274,8275,8276,8277, # 8278 -8278,8279,8280,8281,8282,8283,8284,8285,8286,8287,8288,8289,8290,8291,8292,8293, # 8294 -8294,8295,8296,8297,8298,8299,8300,8301,8302,8303,8304,8305,8306,8307,8308,8309, # 8310 -8310,8311,8312,8313,8314,8315,8316,8317,8318,8319,8320,8321,8322,8323,8324,8325, # 8326 -8326,8327,8328,8329,8330,8331,8332,8333,8334,8335,8336,8337,8338,8339,8340,8341, # 8342 -8342,8343,8344,8345,8346,8347,8348,8349,8350,8351,8352,8353,8354,8355,8356,8357, # 8358 -8358,8359,8360,8361,8362,8363,8364,8365,8366,8367,8368,8369,8370,8371,8372,8373, # 8374 -8374,8375,8376,8377,8378,8379,8380,8381,8382,8383,8384,8385,8386,8387,8388,8389, # 8390 -8390,8391,8392,8393,8394,8395,8396,8397,8398,8399,8400,8401,8402,8403,8404,8405, # 8406 -8406,8407,8408,8409,8410,8411,8412,8413,8414,8415,8416,8417,8418,8419,8420,8421, # 8422 -8422,8423,8424,8425,8426,8427,8428,8429,8430,8431,8432,8433,8434,8435,8436,8437, # 8438 -8438,8439,8440,8441,8442,8443,8444,8445,8446,8447,8448,8449,8450,8451,8452,8453, # 8454 -8454,8455,8456,8457,8458,8459,8460,8461,8462,8463,8464,8465,8466,8467,8468,8469, # 8470 -8470,8471,8472,8473,8474,8475,8476,8477,8478,8479,8480,8481,8482,8483,8484,8485, # 8486 -8486,8487,8488,8489,8490,8491,8492,8493,8494,8495,8496,8497,8498,8499,8500,8501, # 8502 -8502,8503,8504,8505,8506,8507,8508,8509,8510,8511,8512,8513,8514,8515,8516,8517, # 8518 -8518,8519,8520,8521,8522,8523,8524,8525,8526,8527,8528,8529,8530,8531,8532,8533, # 8534 -8534,8535,8536,8537,8538,8539,8540,8541,8542,8543,8544,8545,8546,8547,8548,8549, # 8550 -8550,8551,8552,8553,8554,8555,8556,8557,8558,8559,8560,8561,8562,8563,8564,8565, # 8566 -8566,8567,8568,8569,8570,8571,8572,8573,8574,8575,8576,8577,8578,8579,8580,8581, # 8582 -8582,8583,8584,8585,8586,8587,8588,8589,8590,8591,8592,8593,8594,8595,8596,8597, # 8598 -8598,8599,8600,8601,8602,8603,8604,8605,8606,8607,8608,8609,8610,8611,8612,8613, # 8614 -8614,8615,8616,8617,8618,8619,8620,8621,8622,8623,8624,8625,8626,8627,8628,8629, # 8630 -8630,8631,8632,8633,8634,8635,8636,8637,8638,8639,8640,8641,8642,8643,8644,8645, # 8646 -8646,8647,8648,8649,8650,8651,8652,8653,8654,8655,8656,8657,8658,8659,8660,8661, # 8662 -8662,8663,8664,8665,8666,8667,8668,8669,8670,8671,8672,8673,8674,8675,8676,8677, # 8678 -8678,8679,8680,8681,8682,8683,8684,8685,8686,8687,8688,8689,8690,8691,8692,8693, # 8694 -8694,8695,8696,8697,8698,8699,8700,8701,8702,8703,8704,8705,8706,8707,8708,8709, # 8710 -8710,8711,8712,8713,8714,8715,8716,8717,8718,8719,8720,8721,8722,8723,8724,8725, # 8726 -8726,8727,8728,8729,8730,8731,8732,8733,8734,8735,8736,8737,8738,8739,8740,8741 # 8742 -].freeze -end diff --git a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/euctwprober.rb b/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/euctwprober.rb deleted file mode 100644 index 73269e17..00000000 --- a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/euctwprober.rb +++ /dev/null @@ -1,42 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is mozilla.org code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Jeff Hodges - port to Ruby -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -module CharDet - class EUCTWProber < MultiByteCharSetProber - def initialize - super() - @codingSM = CodingStateMachine.new(EUCTWSMModel) - @distributionAnalyzer = EUCTWDistributionAnalysis.new() - reset() - end - - def get_charset_name - return "EUC-TW" - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/gb18030freq.rb b/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/gb18030freq.rb deleted file mode 100644 index 9b8be06c..00000000 --- a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/gb18030freq.rb +++ /dev/null @@ -1,474 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Jeff Hodges - port to Ruby -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -# GB18030 most frequently used character table -# -# Char to FreqOrder table , from hz6763 - -# 512 --> 0.79 -- 0.79 -# 1024 --> 0.92 -- 0.13 -# 2048 --> 0.98 -- 0.06 -# 6768 --> 1.00 -- 0.02 -# -# Ideal Distribution Ratio = 0.79135/(1-0.79135) = 3.79 -# Random Distribution Ration = 512 / (3755 - 512) = 0.157 -# -# Typical Distribution Ratio about 25% of Ideal one, still much higher that RDR - -module CharDet -GB18030_TYPICAL_DISTRIBUTION_RATIO = 0.9 - -GB18030_TABLE_SIZE = 3760 - -GB18030CharToFreqOrder = [ -1671, 749,1443,2364,3924,3807,2330,3921,1704,3463,2691,1511,1515, 572,3191,2205, -2361, 224,2558, 479,1711, 963,3162, 440,4060,1905,2966,2947,3580,2647,3961,3842, -2204, 869,4207, 970,2678,5626,2944,2956,1479,4048, 514,3595, 588,1346,2820,3409, - 249,4088,1746,1873,2047,1774, 581,1813, 358,1174,3590,1014,1561,4844,2245, 670, -1636,3112, 889,1286, 953, 556,2327,3060,1290,3141, 613, 185,3477,1367, 850,3820, -1715,2428,2642,2303,2732,3041,2562,2648,3566,3946,1349, 388,3098,2091,1360,3585, - 152,1687,1539, 738,1559, 59,1232,2925,2267,1388,1249,1741,1679,2960, 151,1566, -1125,1352,4271, 924,4296, 385,3166,4459, 310,1245,2850, 70,3285,2729,3534,3575, -2398,3298,3466,1960,2265, 217,3647, 864,1909,2084,4401,2773,1010,3269,5152, 853, -3051,3121,1244,4251,1895, 364,1499,1540,2313,1180,3655,2268, 562, 715,2417,3061, - 544, 336,3768,2380,1752,4075, 950, 280,2425,4382, 183,2759,3272, 333,4297,2155, -1688,2356,1444,1039,4540, 736,1177,3349,2443,2368,2144,2225, 565, 196,1482,3406, - 927,1335,4147, 692, 878,1311,1653,3911,3622,1378,4200,1840,2969,3149,2126,1816, -2534,1546,2393,2760, 737,2494, 13, 447, 245,2747, 38,2765,2129,2589,1079, 606, - 360, 471,3755,2890, 404, 848, 699,1785,1236, 370,2221,1023,3746,2074,2026,2023, -2388,1581,2119, 812,1141,3091,2536,1519, 804,2053, 406,1596,1090, 784, 548,4414, -1806,2264,2936,1100, 343,4114,5096, 622,3358, 743,3668,1510,1626,5020,3567,2513, -3195,4115,5627,2489,2991, 24,2065,2697,1087,2719, 48,1634, 315, 68, 985,2052, - 198,2239,1347,1107,1439, 597,2366,2172, 871,3307, 919,2487,2790,1867, 236,2570, -1413,3794, 906,3365,3381,1701,1982,1818,1524,2924,1205, 616,2586,2072,2004, 575, - 253,3099, 32,1365,1182, 197,1714,2454,1201, 554,3388,3224,2748, 756,2587, 250, -2567,1507,1517,3529,1922,2761,2337,3416,1961,1677,2452,2238,3153, 615, 911,1506, -1474,2495,1265,1906,2749,3756,3280,2161, 898,2714,1759,3450,2243,2444, 563, 26, -3286,2266,3769,3344,2707,3677, 611,1402, 531,1028,2871,4548,1375, 261,2948, 835, -1190,4134, 353, 840,2684,1900,3082,1435,2109,1207,1674, 329,1872,2781,4055,2686, -2104, 608,3318,2423,2957,2768,1108,3739,3512,3271,3985,2203,1771,3520,1418,2054, -1681,1153, 225,1627,2929, 162,2050,2511,3687,1954, 124,1859,2431,1684,3032,2894, - 585,4805,3969,2869,2704,2088,2032,2095,3656,2635,4362,2209, 256, 518,2042,2105, -3777,3657, 643,2298,1148,1779, 190, 989,3544, 414, 11,2135,2063,2979,1471, 403, -3678, 126, 770,1563, 671,2499,3216,2877, 600,1179, 307,2805,4937,1268,1297,2694, - 252,4032,1448,1494,1331,1394, 127,2256, 222,1647,1035,1481,3056,1915,1048, 873, -3651, 210, 33,1608,2516, 200,1520, 415, 102, 0,3389,1287, 817, 91,3299,2940, - 836,1814, 549,2197,1396,1669,2987,3582,2297,2848,4528,1070, 687, 20,1819, 121, -1552,1364,1461,1968,2617,3540,2824,2083, 177, 948,4938,2291, 110,4549,2066, 648, -3359,1755,2110,2114,4642,4845,1693,3937,3308,1257,1869,2123, 208,1804,3159,2992, -2531,2549,3361,2418,1350,2347,2800,2568,1291,2036,2680, 72, 842,1990, 212,1233, -1154,1586, 75,2027,3410,4900,1823,1337,2710,2676, 728,2810,1522,3026,4995, 157, - 755,1050,4022, 710, 785,1936,2194,2085,1406,2777,2400, 150,1250,4049,1206, 807, -1910, 534, 529,3309,1721,1660, 274, 39,2827, 661,2670,1578, 925,3248,3815,1094, -4278,4901,4252, 41,1150,3747,2572,2227,4501,3658,4902,3813,3357,3617,2884,2258, - 887, 538,4187,3199,1294,2439,3042,2329,2343,2497,1255, 107, 543,1527, 521,3478, -3568, 194,5062, 15, 961,3870,1241,1192,2664, 66,5215,3260,2111,1295,1127,2152, -3805,4135, 901,1164,1976, 398,1278, 530,1460, 748, 904,1054,1966,1426, 53,2909, - 509, 523,2279,1534, 536,1019, 239,1685, 460,2353, 673,1065,2401,3600,4298,2272, -1272,2363, 284,1753,3679,4064,1695, 81, 815,2677,2757,2731,1386, 859, 500,4221, -2190,2566, 757,1006,2519,2068,1166,1455, 337,2654,3203,1863,1682,1914,3025,1252, -1409,1366, 847, 714,2834,2038,3209, 964,2970,1901, 885,2553,1078,1756,3049, 301, -1572,3326, 688,2130,1996,2429,1805,1648,2930,3421,2750,3652,3088, 262,1158,1254, - 389,1641,1812, 526,1719, 923,2073,1073,1902, 468, 489,4625,1140, 857,2375,3070, -3319,2863, 380, 116,1328,2693,1161,2244, 273,1212,1884,2769,3011,1775,1142, 461, -3066,1200,2147,2212, 790, 702,2695,4222,1601,1058, 434,2338,5153,3640, 67,2360, -4099,2502, 618,3472,1329, 416,1132, 830,2782,1807,2653,3211,3510,1662, 192,2124, - 296,3979,1739,1611,3684, 23, 118, 324, 446,1239,1225, 293,2520,3814,3795,2535, -3116, 17,1074, 467,2692,2201, 387,2922, 45,1326,3055,1645,3659,2817, 958, 243, -1903,2320,1339,2825,1784,3289, 356, 576, 865,2315,2381,3377,3916,1088,3122,1713, -1655, 935, 628,4689,1034,1327, 441, 800, 720, 894,1979,2183,1528,5289,2702,1071, -4046,3572,2399,1571,3281, 79, 761,1103, 327, 134, 758,1899,1371,1615, 879, 442, - 215,2605,2579, 173,2048,2485,1057,2975,3317,1097,2253,3801,4263,1403,1650,2946, - 814,4968,3487,1548,2644,1567,1285, 2, 295,2636, 97, 946,3576, 832, 141,4257, -3273, 760,3821,3521,3156,2607, 949,1024,1733,1516,1803,1920,2125,2283,2665,3180, -1501,2064,3560,2171,1592, 803,3518,1416, 732,3897,4258,1363,1362,2458, 119,1427, - 602,1525,2608,1605,1639,3175, 694,3064, 10, 465, 76,2000,4846,4208, 444,3781, -1619,3353,2206,1273,3796, 740,2483, 320,1723,2377,3660,2619,1359,1137,1762,1724, -2345,2842,1850,1862, 912, 821,1866, 612,2625,1735,2573,3369,1093, 844, 89, 937, - 930,1424,3564,2413,2972,1004,3046,3019,2011, 711,3171,1452,4178, 428, 801,1943, - 432, 445,2811, 206,4136,1472, 730, 349, 73, 397,2802,2547, 998,1637,1167, 789, - 396,3217, 154,1218, 716,1120,1780,2819,4826,1931,3334,3762,2139,1215,2627, 552, -3664,3628,3232,1405,2383,3111,1356,2652,3577,3320,3101,1703, 640,1045,1370,1246, -4996, 371,1575,2436,1621,2210, 984,4033,1734,2638, 16,4529, 663,2755,3255,1451, -3917,2257,1253,1955,2234,1263,2951, 214,1229, 617, 485, 359,1831,1969, 473,2310, - 750,2058, 165, 80,2864,2419, 361,4344,2416,2479,1134, 796,3726,1266,2943, 860, -2715, 938, 390,2734,1313,1384, 248, 202, 877,1064,2854, 522,3907, 279,1602, 297, -2357, 395,3740, 137,2075, 944,4089,2584,1267,3802, 62,1533,2285, 178, 176, 780, -2440, 201,3707, 590, 478,1560,4354,2117,1075, 30, 74,4643,4004,1635,1441,2745, - 776,2596, 238,1077,1692,1912,2844, 605, 499,1742,3947, 241,3053, 980,1749, 936, -2640,4511,2582, 515,1543,2162,5322,2892,2993, 890,2148,1924, 665,1827,3581,1032, - 968,3163, 339,1044,1896, 270, 583,1791,1720,4367,1194,3488,3669, 43,2523,1657, - 163,2167, 290,1209,1622,3378, 550, 634,2508,2510, 695,2634,2384,2512,1476,1414, - 220,1469,2341,2138,2852,3183,2900,4939,2865,3502,1211,3680, 854,3227,1299,2976, -3172, 186,2998,1459, 443,1067,3251,1495, 321,1932,3054, 909, 753,1410,1828, 436, -2441,1119,1587,3164,2186,1258, 227, 231,1425,1890,3200,3942, 247, 959, 725,5254, -2741, 577,2158,2079, 929, 120, 174, 838,2813, 591,1115, 417,2024, 40,3240,1536, -1037, 291,4151,2354, 632,1298,2406,2500,3535,1825,1846,3451, 205,1171, 345,4238, - 18,1163, 811, 685,2208,1217, 425,1312,1508,1175,4308,2552,1033, 587,1381,3059, -2984,3482, 340,1316,4023,3972, 792,3176, 519, 777,4690, 918, 933,4130,2981,3741, - 90,3360,2911,2200,5184,4550, 609,3079,2030, 272,3379,2736, 363,3881,1130,1447, - 286, 779, 357,1169,3350,3137,1630,1220,2687,2391, 747,1277,3688,2618,2682,2601, -1156,3196,5290,4034,3102,1689,3596,3128, 874, 219,2783, 798, 508,1843,2461, 269, -1658,1776,1392,1913,2983,3287,2866,2159,2372, 829,4076, 46,4253,2873,1889,1894, - 915,1834,1631,2181,2318, 298, 664,2818,3555,2735, 954,3228,3117, 527,3511,2173, - 681,2712,3033,2247,2346,3467,1652, 155,2164,3382, 113,1994, 450, 899, 494, 994, -1237,2958,1875,2336,1926,3727, 545,1577,1550, 633,3473, 204,1305,3072,2410,1956, -2471, 707,2134, 841,2195,2196,2663,3843,1026,4940, 990,3252,4997, 368,1092, 437, -3212,3258,1933,1829, 675,2977,2893, 412, 943,3723,4644,3294,3283,2230,2373,5154, -2389,2241,2661,2323,1404,2524, 593, 787, 677,3008,1275,2059, 438,2709,2609,2240, -2269,2246,1446, 36,1568,1373,3892,1574,2301,1456,3962, 693,2276,5216,2035,1143, -2720,1919,1797,1811,2763,4137,2597,1830,1699,1488,1198,2090, 424,1694, 312,3634, -3390,4179,3335,2252,1214, 561,1059,3243,2295,2561, 975,5155,2321,2751,3772, 472, -1537,3282,3398,1047,2077,2348,2878,1323,3340,3076, 690,2906, 51, 369, 170,3541, -1060,2187,2688,3670,2541,1083,1683, 928,3918, 459, 109,4427, 599,3744,4286, 143, -2101,2730,2490, 82,1588,3036,2121, 281,1860, 477,4035,1238,2812,3020,2716,3312, -1530,2188,2055,1317, 843, 636,1808,1173,3495, 649, 181,1002, 147,3641,1159,2414, -3750,2289,2795, 813,3123,2610,1136,4368, 5,3391,4541,2174, 420, 429,1728, 754, -1228,2115,2219, 347,2223,2733, 735,1518,3003,2355,3134,1764,3948,3329,1888,2424, -1001,1234,1972,3321,3363,1672,1021,1450,1584, 226, 765, 655,2526,3404,3244,2302, -3665, 731, 594,2184, 319,1576, 621, 658,2656,4299,2099,3864,1279,2071,2598,2739, - 795,3086,3699,3908,1707,2352,2402,1382,3136,2475,1465,4847,3496,3865,1085,3004, -2591,1084, 213,2287,1963,3565,2250, 822, 793,4574,3187,1772,1789,3050, 595,1484, -1959,2770,1080,2650, 456, 422,2996, 940,3322,4328,4345,3092,2742, 965,2784, 739, -4124, 952,1358,2498,2949,2565, 332,2698,2378, 660,2260,2473,4194,3856,2919, 535, -1260,2651,1208,1428,1300,1949,1303,2942, 433,2455,2450,1251,1946, 614,1269, 641, -1306,1810,2737,3078,2912, 564,2365,1419,1415,1497,4460,2367,2185,1379,3005,1307, -3218,2175,1897,3063, 682,1157,4040,4005,1712,1160,1941,1399, 394, 402,2952,1573, -1151,2986,2404, 862, 299,2033,1489,3006, 346, 171,2886,3401,1726,2932, 168,2533, - 47,2507,1030,3735,1145,3370,1395,1318,1579,3609,4560,2857,4116,1457,2529,1965, - 504,1036,2690,2988,2405, 745,5871, 849,2397,2056,3081, 863,2359,3857,2096, 99, -1397,1769,2300,4428,1643,3455,1978,1757,3718,1440, 35,4879,3742,1296,4228,2280, - 160,5063,1599,2013, 166, 520,3479,1646,3345,3012, 490,1937,1545,1264,2182,2505, -1096,1188,1369,1436,2421,1667,2792,2460,1270,2122, 727,3167,2143, 806,1706,1012, -1800,3037, 960,2218,1882, 805, 139,2456,1139,1521, 851,1052,3093,3089, 342,2039, - 744,5097,1468,1502,1585,2087, 223, 939, 326,2140,2577, 892,2481,1623,4077, 982, -3708, 135,2131, 87,2503,3114,2326,1106, 876,1616, 547,2997,2831,2093,3441,4530, -4314, 9,3256,4229,4148, 659,1462,1986,1710,2046,2913,2231,4090,4880,5255,3392, -3274,1368,3689,4645,1477, 705,3384,3635,1068,1529,2941,1458,3782,1509, 100,1656, -2548, 718,2339, 408,1590,2780,3548,1838,4117,3719,1345,3530, 717,3442,2778,3220, -2898,1892,4590,3614,3371,2043,1998,1224,3483, 891, 635, 584,2559,3355, 733,1766, -1729,1172,3789,1891,2307, 781,2982,2271,1957,1580,5773,2633,2005,4195,3097,1535, -3213,1189,1934,5693,3262, 586,3118,1324,1598, 517,1564,2217,1868,1893,4445,3728, -2703,3139,1526,1787,1992,3882,2875,1549,1199,1056,2224,1904,2711,5098,4287, 338, -1993,3129,3489,2689,1809,2815,1997, 957,1855,3898,2550,3275,3057,1105,1319, 627, -1505,1911,1883,3526, 698,3629,3456,1833,1431, 746, 77,1261,2017,2296,1977,1885, - 125,1334,1600, 525,1798,1109,2222,1470,1945, 559,2236,1186,3443,2476,1929,1411, -2411,3135,1777,3372,2621,1841,1613,3229, 668,1430,1839,2643,2916, 195,1989,2671, -2358,1387, 629,3205,2293,5256,4439, 123,1310, 888,1879,4300,3021,3605,1003,1162, -3192,2910,2010, 140,2395,2859, 55,1082,2012,2901, 662, 419,2081,1438, 680,2774, -4654,3912,1620,1731,1625,5035,4065,2328, 512,1344, 802,5443,2163,2311,2537, 524, -3399, 98,1155,2103,1918,2606,3925,2816,1393,2465,1504,3773,2177,3963,1478,4346, - 180,1113,4655,3461,2028,1698, 833,2696,1235,1322,1594,4408,3623,3013,3225,2040, -3022, 541,2881, 607,3632,2029,1665,1219, 639,1385,1686,1099,2803,3231,1938,3188, -2858, 427, 676,2772,1168,2025, 454,3253,2486,3556, 230,1950, 580, 791,1991,1280, -1086,1974,2034, 630, 257,3338,2788,4903,1017, 86,4790, 966,2789,1995,1696,1131, - 259,3095,4188,1308, 179,1463,5257, 289,4107,1248, 42,3413,1725,2288, 896,1947, - 774,4474,4254, 604,3430,4264, 392,2514,2588, 452, 237,1408,3018, 988,4531,1970, -3034,3310, 540,2370,1562,1288,2990, 502,4765,1147, 4,1853,2708, 207, 294,2814, -4078,2902,2509, 684, 34,3105,3532,2551, 644, 709,2801,2344, 573,1727,3573,3557, -2021,1081,3100,4315,2100,3681, 199,2263,1837,2385, 146,3484,1195,2776,3949, 997, -1939,3973,1008,1091,1202,1962,1847,1149,4209,5444,1076, 493, 117,5400,2521, 972, -1490,2934,1796,4542,2374,1512,2933,2657, 413,2888,1135,2762,2314,2156,1355,2369, - 766,2007,2527,2170,3124,2491,2593,2632,4757,2437, 234,3125,3591,1898,1750,1376, -1942,3468,3138, 570,2127,2145,3276,4131, 962, 132,1445,4196, 19, 941,3624,3480, -3366,1973,1374,4461,3431,2629, 283,2415,2275, 808,2887,3620,2112,2563,1353,3610, - 955,1089,3103,1053, 96, 88,4097, 823,3808,1583, 399, 292,4091,3313, 421,1128, - 642,4006, 903,2539,1877,2082, 596, 29,4066,1790, 722,2157, 130, 995,1569, 769, -1485, 464, 513,2213, 288,1923,1101,2453,4316, 133, 486,2445, 50, 625, 487,2207, - 57, 423, 481,2962, 159,3729,1558, 491, 303, 482, 501, 240,2837, 112,3648,2392, -1783, 362, 8,3433,3422, 610,2793,3277,1390,1284,1654, 21,3823, 734, 367, 623, - 193, 287, 374,1009,1483, 816, 476, 313,2255,2340,1262,2150,2899,1146,2581, 782, -2116,1659,2018,1880, 255,3586,3314,1110,2867,2137,2564, 986,2767,5185,2006, 650, - 158, 926, 762, 881,3157,2717,2362,3587, 306,3690,3245,1542,3077,2427,1691,2478, -2118,2985,3490,2438, 539,2305, 983, 129,1754, 355,4201,2386, 827,2923, 104,1773, -2838,2771, 411,2905,3919, 376, 767, 122,1114, 828,2422,1817,3506, 266,3460,1007, -1609,4998, 945,2612,4429,2274, 726,1247,1964,2914,2199,2070,4002,4108, 657,3323, -1422, 579, 455,2764,4737,1222,2895,1670, 824,1223,1487,2525, 558, 861,3080, 598, -2659,2515,1967, 752,2583,2376,2214,4180, 977, 704,2464,4999,2622,4109,1210,2961, - 819,1541, 142,2284, 44, 418, 457,1126,3730,4347,4626,1644,1876,3671,1864, 302, -1063,5694, 624, 723,1984,3745,1314,1676,2488,1610,1449,3558,3569,2166,2098, 409, -1011,2325,3704,2306, 818,1732,1383,1824,1844,3757, 999,2705,3497,1216,1423,2683, -2426,2954,2501,2726,2229,1475,2554,5064,1971,1794,1666,2014,1343, 783, 724, 191, -2434,1354,2220,5065,1763,2752,2472,4152, 131, 175,2885,3434, 92,1466,4920,2616, -3871,3872,3866, 128,1551,1632, 669,1854,3682,4691,4125,1230, 188,2973,3290,1302, -1213, 560,3266, 917, 763,3909,3249,1760, 868,1958, 764,1782,2097, 145,2277,3774, -4462, 64,1491,3062, 971,2132,3606,2442, 221,1226,1617, 218, 323,1185,3207,3147, - 571, 619,1473,1005,1744,2281, 449,1887,2396,3685, 275, 375,3816,1743,3844,3731, - 845,1983,2350,4210,1377, 773, 967,3499,3052,3743,2725,4007,1697,1022,3943,1464, -3264,2855,2722,1952,1029,2839,2467, 84,4383,2215, 820,1391,2015,2448,3672, 377, -1948,2168, 797,2545,3536,2578,2645, 94,2874,1678, 405,1259,3071, 771, 546,1315, - 470,1243,3083, 895,2468, 981, 969,2037, 846,4181, 653,1276,2928, 14,2594, 557, -3007,2474, 156, 902,1338,1740,2574, 537,2518, 973,2282,2216,2433,1928, 138,2903, -1293,2631,1612, 646,3457, 839,2935, 111, 496,2191,2847, 589,3186, 149,3994,2060, -4031,2641,4067,3145,1870, 37,3597,2136,1025,2051,3009,3383,3549,1121,1016,3261, -1301, 251,2446,2599,2153, 872,3246, 637, 334,3705, 831, 884, 921,3065,3140,4092, -2198,1944, 246,2964, 108,2045,1152,1921,2308,1031, 203,3173,4170,1907,3890, 810, -1401,2003,1690, 506, 647,1242,2828,1761,1649,3208,2249,1589,3709,2931,5156,1708, - 498, 666,2613, 834,3817,1231, 184,2851,1124, 883,3197,2261,3710,1765,1553,2658, -1178,2639,2351, 93,1193, 942,2538,2141,4402, 235,1821, 870,1591,2192,1709,1871, -3341,1618,4126,2595,2334, 603, 651, 69, 701, 268,2662,3411,2555,1380,1606, 503, - 448, 254,2371,2646, 574,1187,2309,1770, 322,2235,1292,1801, 305, 566,1133, 229, -2067,2057, 706, 167, 483,2002,2672,3295,1820,3561,3067, 316, 378,2746,3452,1112, - 136,1981, 507,1651,2917,1117, 285,4591, 182,2580,3522,1304, 335,3303,1835,2504, -1795,1792,2248, 674,1018,2106,2449,1857,2292,2845, 976,3047,1781,2600,2727,1389, -1281, 52,3152, 153, 265,3950, 672,3485,3951,4463, 430,1183, 365, 278,2169, 27, -1407,1336,2304, 209,1340,1730,2202,1852,2403,2883, 979,1737,1062, 631,2829,2542, -3876,2592, 825,2086,2226,3048,3625, 352,1417,3724, 542, 991, 431,1351,3938,1861, -2294, 826,1361,2927,3142,3503,1738, 463,2462,2723, 582,1916,1595,2808, 400,3845, -3891,2868,3621,2254, 58,2492,1123, 910,2160,2614,1372,1603,1196,1072,3385,1700, -3267,1980, 696, 480,2430, 920, 799,1570,2920,1951,2041,4047,2540,1321,4223,2469, -3562,2228,1271,2602, 401,2833,3351,2575,5157, 907,2312,1256, 410, 263,3507,1582, - 996, 678,1849,2316,1480, 908,3545,2237, 703,2322, 667,1826,2849,1531,2604,2999, -2407,3146,2151,2630,1786,3711, 469,3542, 497,3899,2409, 858, 837,4446,3393,1274, - 786, 620,1845,2001,3311, 484, 308,3367,1204,1815,3691,2332,1532,2557,1842,2020, -2724,1927,2333,4440, 567, 22,1673,2728,4475,1987,1858,1144,1597, 101,1832,3601, - 12, 974,3783,4391, 951,1412, 1,3720, 453,4608,4041, 528,1041,1027,3230,2628, -1129, 875,1051,3291,1203,2262,1069,2860,2799,2149,2615,3278, 144,1758,3040, 31, - 475,1680, 366,2685,3184, 311,1642,4008,2466,5036,1593,1493,2809, 216,1420,1668, - 233, 304,2128,3284, 232,1429,1768,1040,2008,3407,2740,2967,2543, 242,2133, 778, -1565,2022,2620, 505,2189,2756,1098,2273, 372,1614, 708, 553,2846,2094,2278, 169, -3626,2835,4161, 228,2674,3165, 809,1454,1309, 466,1705,1095, 900,3423, 880,2667, -3751,5258,2317,3109,2571,4317,2766,1503,1342, 866,4447,1118, 63,2076, 314,1881, -1348,1061, 172, 978,3515,1747, 532, 511,3970, 6, 601, 905,2699,3300,1751, 276, -1467,3725,2668, 65,4239,2544,2779,2556,1604, 578,2451,1802, 992,2331,2624,1320, -3446, 713,1513,1013, 103,2786,2447,1661, 886,1702, 916, 654,3574,2031,1556, 751, -2178,2821,2179,1498,1538,2176, 271, 914,2251,2080,1325, 638,1953,2937,3877,2432, -2754, 95,3265,1716, 260,1227,4083, 775, 106,1357,3254, 426,1607, 555,2480, 772, -1985, 244,2546, 474, 495,1046,2611,1851,2061, 71,2089,1675,2590, 742,3758,2843, -3222,1433, 267,2180,2576,2826,2233,2092,3913,2435, 956,1745,3075, 856,2113,1116, - 451, 3,1988,2896,1398, 993,2463,1878,2049,1341,2718,2721,2870,2108, 712,2904, -4363,2753,2324, 277,2872,2349,2649, 384, 987, 435, 691,3000, 922, 164,3939, 652, -1500,1184,4153,2482,3373,2165,4848,2335,3775,3508,3154,2806,2830,1554,2102,1664, -2530,1434,2408, 893,1547,2623,3447,2832,2242,2532,3169,2856,3223,2078, 49,3770, -3469, 462, 318, 656,2259,3250,3069, 679,1629,2758, 344,1138,1104,3120,1836,1283, -3115,2154,1437,4448, 934, 759,1999, 794,2862,1038, 533,2560,1722,2342, 855,2626, -1197,1663,4476,3127, 85,4240,2528, 25,1111,1181,3673, 407,3470,4561,2679,2713, - 768,1925,2841,3986,1544,1165, 932, 373,1240,2146,1930,2673, 721,4766, 354,4333, - 391,2963, 187, 61,3364,1442,1102, 330,1940,1767, 341,3809,4118, 393,2496,2062, -2211, 105, 331, 300, 439, 913,1332, 626, 379,3304,1557, 328, 689,3952, 309,1555, - 931, 317,2517,3027, 325, 569, 686,2107,3084, 60,1042,1333,2794, 264,3177,4014, -1628, 258,3712, 7,4464,1176,1043,1778, 683, 114,1975, 78,1492, 383,1886, 510, - 386, 645,5291,2891,2069,3305,4138,3867,2939,2603,2493,1935,1066,1848,3588,1015, -1282,1289,4609, 697,1453,3044,2666,3611,1856,2412, 54, 719,1330, 568,3778,2459, -1748, 788, 492, 551,1191,1000, 488,3394,3763, 282,1799, 348,2016,1523,3155,2390, -1049, 382,2019,1788,1170, 729,2968,3523, 897,3926,2785,2938,3292, 350,2319,3238, -1718,1717,2655,3453,3143,4465, 161,2889,2980,2009,1421, 56,1908,1640,2387,2232, -1917,1874,2477,4921, 148, 83,3438, 592,4245,2882,1822,1055, 741, 115,1496,1624, - 381,1638,4592,1020, 516,3214, 458, 947,4575,1432, 211,1514,2926,1865,2142, 189, - 852,1221,1400,1486, 882,2299,4036, 351, 28,1122, 700,6479,6480,6481,6482,6483, # last 512 -#Everything below is of no interest for detection purpose -5508,6484,3900,3414,3974,4441,4024,3537,4037,5628,5099,3633,6485,3148,6486,3636, -5509,3257,5510,5973,5445,5872,4941,4403,3174,4627,5873,6276,2286,4230,5446,5874, -5122,6102,6103,4162,5447,5123,5323,4849,6277,3980,3851,5066,4246,5774,5067,6278, -3001,2807,5695,3346,5775,5974,5158,5448,6487,5975,5976,5776,3598,6279,5696,4806, -4211,4154,6280,6488,6489,6490,6281,4212,5037,3374,4171,6491,4562,4807,4722,4827, -5977,6104,4532,4079,5159,5324,5160,4404,3858,5359,5875,3975,4288,4610,3486,4512, -5325,3893,5360,6282,6283,5560,2522,4231,5978,5186,5449,2569,3878,6284,5401,3578, -4415,6285,4656,5124,5979,2506,4247,4449,3219,3417,4334,4969,4329,6492,4576,4828, -4172,4416,4829,5402,6286,3927,3852,5361,4369,4830,4477,4867,5876,4173,6493,6105, -4657,6287,6106,5877,5450,6494,4155,4868,5451,3700,5629,4384,6288,6289,5878,3189, -4881,6107,6290,6495,4513,6496,4692,4515,4723,5100,3356,6497,6291,3810,4080,5561, -3570,4430,5980,6498,4355,5697,6499,4724,6108,6109,3764,4050,5038,5879,4093,3226, -6292,5068,5217,4693,3342,5630,3504,4831,4377,4466,4309,5698,4431,5777,6293,5778, -4272,3706,6110,5326,3752,4676,5327,4273,5403,4767,5631,6500,5699,5880,3475,5039, -6294,5562,5125,4348,4301,4482,4068,5126,4593,5700,3380,3462,5981,5563,3824,5404, -4970,5511,3825,4738,6295,6501,5452,4516,6111,5881,5564,6502,6296,5982,6503,4213, -4163,3454,6504,6112,4009,4450,6113,4658,6297,6114,3035,6505,6115,3995,4904,4739, -4563,4942,4110,5040,3661,3928,5362,3674,6506,5292,3612,4791,5565,4149,5983,5328, -5259,5021,4725,4577,4564,4517,4364,6298,5405,4578,5260,4594,4156,4157,5453,3592, -3491,6507,5127,5512,4709,4922,5984,5701,4726,4289,6508,4015,6116,5128,4628,3424, -4241,5779,6299,4905,6509,6510,5454,5702,5780,6300,4365,4923,3971,6511,5161,3270, -3158,5985,4100, 867,5129,5703,6117,5363,3695,3301,5513,4467,6118,6512,5455,4232, -4242,4629,6513,3959,4478,6514,5514,5329,5986,4850,5162,5566,3846,4694,6119,5456, -4869,5781,3779,6301,5704,5987,5515,4710,6302,5882,6120,4392,5364,5705,6515,6121, -6516,6517,3736,5988,5457,5989,4695,2457,5883,4551,5782,6303,6304,6305,5130,4971, -6122,5163,6123,4870,3263,5365,3150,4871,6518,6306,5783,5069,5706,3513,3498,4409, -5330,5632,5366,5458,5459,3991,5990,4502,3324,5991,5784,3696,4518,5633,4119,6519, -4630,5634,4417,5707,4832,5992,3418,6124,5993,5567,4768,5218,6520,4595,3458,5367, -6125,5635,6126,4202,6521,4740,4924,6307,3981,4069,4385,6308,3883,2675,4051,3834, -4302,4483,5568,5994,4972,4101,5368,6309,5164,5884,3922,6127,6522,6523,5261,5460, -5187,4164,5219,3538,5516,4111,3524,5995,6310,6311,5369,3181,3386,2484,5188,3464, -5569,3627,5708,6524,5406,5165,4677,4492,6312,4872,4851,5885,4468,5996,6313,5709, -5710,6128,2470,5886,6314,5293,4882,5785,3325,5461,5101,6129,5711,5786,6525,4906, -6526,6527,4418,5887,5712,4808,2907,3701,5713,5888,6528,3765,5636,5331,6529,6530, -3593,5889,3637,4943,3692,5714,5787,4925,6315,6130,5462,4405,6131,6132,6316,5262, -6531,6532,5715,3859,5716,5070,4696,5102,3929,5788,3987,4792,5997,6533,6534,3920, -4809,5000,5998,6535,2974,5370,6317,5189,5263,5717,3826,6536,3953,5001,4883,3190, -5463,5890,4973,5999,4741,6133,6134,3607,5570,6000,4711,3362,3630,4552,5041,6318, -6001,2950,2953,5637,4646,5371,4944,6002,2044,4120,3429,6319,6537,5103,4833,6538, -6539,4884,4647,3884,6003,6004,4758,3835,5220,5789,4565,5407,6540,6135,5294,4697, -4852,6320,6321,3206,4907,6541,6322,4945,6542,6136,6543,6323,6005,4631,3519,6544, -5891,6545,5464,3784,5221,6546,5571,4659,6547,6324,6137,5190,6548,3853,6549,4016, -4834,3954,6138,5332,3827,4017,3210,3546,4469,5408,5718,3505,4648,5790,5131,5638, -5791,5465,4727,4318,6325,6326,5792,4553,4010,4698,3439,4974,3638,4335,3085,6006, -5104,5042,5166,5892,5572,6327,4356,4519,5222,5573,5333,5793,5043,6550,5639,5071, -4503,6328,6139,6551,6140,3914,3901,5372,6007,5640,4728,4793,3976,3836,4885,6552, -4127,6553,4451,4102,5002,6554,3686,5105,6555,5191,5072,5295,4611,5794,5296,6556, -5893,5264,5894,4975,5466,5265,4699,4976,4370,4056,3492,5044,4886,6557,5795,4432, -4769,4357,5467,3940,4660,4290,6141,4484,4770,4661,3992,6329,4025,4662,5022,4632, -4835,4070,5297,4663,4596,5574,5132,5409,5895,6142,4504,5192,4664,5796,5896,3885, -5575,5797,5023,4810,5798,3732,5223,4712,5298,4084,5334,5468,6143,4052,4053,4336, -4977,4794,6558,5335,4908,5576,5224,4233,5024,4128,5469,5225,4873,6008,5045,4729, -4742,4633,3675,4597,6559,5897,5133,5577,5003,5641,5719,6330,6560,3017,2382,3854, -4406,4811,6331,4393,3964,4946,6561,2420,3722,6562,4926,4378,3247,1736,4442,6332, -5134,6333,5226,3996,2918,5470,4319,4003,4598,4743,4744,4485,3785,3902,5167,5004, -5373,4394,5898,6144,4874,1793,3997,6334,4085,4214,5106,5642,4909,5799,6009,4419, -4189,3330,5899,4165,4420,5299,5720,5227,3347,6145,4081,6335,2876,3930,6146,3293, -3786,3910,3998,5900,5300,5578,2840,6563,5901,5579,6147,3531,5374,6564,6565,5580, -4759,5375,6566,6148,3559,5643,6336,6010,5517,6337,6338,5721,5902,3873,6011,6339, -6567,5518,3868,3649,5722,6568,4771,4947,6569,6149,4812,6570,2853,5471,6340,6341, -5644,4795,6342,6012,5723,6343,5724,6013,4349,6344,3160,6150,5193,4599,4514,4493, -5168,4320,6345,4927,3666,4745,5169,5903,5005,4928,6346,5725,6014,4730,4203,5046, -4948,3395,5170,6015,4150,6016,5726,5519,6347,5047,3550,6151,6348,4197,4310,5904, -6571,5581,2965,6152,4978,3960,4291,5135,6572,5301,5727,4129,4026,5905,4853,5728, -5472,6153,6349,4533,2700,4505,5336,4678,3583,5073,2994,4486,3043,4554,5520,6350, -6017,5800,4487,6351,3931,4103,5376,6352,4011,4321,4311,4190,5136,6018,3988,3233, -4350,5906,5645,4198,6573,5107,3432,4191,3435,5582,6574,4139,5410,6353,5411,3944, -5583,5074,3198,6575,6354,4358,6576,5302,4600,5584,5194,5412,6577,6578,5585,5413, -5303,4248,5414,3879,4433,6579,4479,5025,4854,5415,6355,4760,4772,3683,2978,4700, -3797,4452,3965,3932,3721,4910,5801,6580,5195,3551,5907,3221,3471,3029,6019,3999, -5908,5909,5266,5267,3444,3023,3828,3170,4796,5646,4979,4259,6356,5647,5337,3694, -6357,5648,5338,4520,4322,5802,3031,3759,4071,6020,5586,4836,4386,5048,6581,3571, -4679,4174,4949,6154,4813,3787,3402,3822,3958,3215,3552,5268,4387,3933,4950,4359, -6021,5910,5075,3579,6358,4234,4566,5521,6359,3613,5049,6022,5911,3375,3702,3178, -4911,5339,4521,6582,6583,4395,3087,3811,5377,6023,6360,6155,4027,5171,5649,4421, -4249,2804,6584,2270,6585,4000,4235,3045,6156,5137,5729,4140,4312,3886,6361,4330, -6157,4215,6158,3500,3676,4929,4331,3713,4930,5912,4265,3776,3368,5587,4470,4855, -3038,4980,3631,6159,6160,4132,4680,6161,6362,3923,4379,5588,4255,6586,4121,6587, -6363,4649,6364,3288,4773,4774,6162,6024,6365,3543,6588,4274,3107,3737,5050,5803, -4797,4522,5589,5051,5730,3714,4887,5378,4001,4523,6163,5026,5522,4701,4175,2791, -3760,6589,5473,4224,4133,3847,4814,4815,4775,3259,5416,6590,2738,6164,6025,5304, -3733,5076,5650,4816,5590,6591,6165,6592,3934,5269,6593,3396,5340,6594,5804,3445, -3602,4042,4488,5731,5732,3525,5591,4601,5196,6166,6026,5172,3642,4612,3202,4506, -4798,6366,3818,5108,4303,5138,5139,4776,3332,4304,2915,3415,4434,5077,5109,4856, -2879,5305,4817,6595,5913,3104,3144,3903,4634,5341,3133,5110,5651,5805,6167,4057, -5592,2945,4371,5593,6596,3474,4182,6367,6597,6168,4507,4279,6598,2822,6599,4777, -4713,5594,3829,6169,3887,5417,6170,3653,5474,6368,4216,2971,5228,3790,4579,6369, -5733,6600,6601,4951,4746,4555,6602,5418,5475,6027,3400,4665,5806,6171,4799,6028, -5052,6172,3343,4800,4747,5006,6370,4556,4217,5476,4396,5229,5379,5477,3839,5914, -5652,5807,4714,3068,4635,5808,6173,5342,4192,5078,5419,5523,5734,6174,4557,6175, -4602,6371,6176,6603,5809,6372,5735,4260,3869,5111,5230,6029,5112,6177,3126,4681, -5524,5915,2706,3563,4748,3130,6178,4018,5525,6604,6605,5478,4012,4837,6606,4534, -4193,5810,4857,3615,5479,6030,4082,3697,3539,4086,5270,3662,4508,4931,5916,4912, -5811,5027,3888,6607,4397,3527,3302,3798,2775,2921,2637,3966,4122,4388,4028,4054, -1633,4858,5079,3024,5007,3982,3412,5736,6608,3426,3236,5595,3030,6179,3427,3336, -3279,3110,6373,3874,3039,5080,5917,5140,4489,3119,6374,5812,3405,4494,6031,4666, -4141,6180,4166,6032,5813,4981,6609,5081,4422,4982,4112,3915,5653,3296,3983,6375, -4266,4410,5654,6610,6181,3436,5082,6611,5380,6033,3819,5596,4535,5231,5306,5113, -6612,4952,5918,4275,3113,6613,6376,6182,6183,5814,3073,4731,4838,5008,3831,6614, -4888,3090,3848,4280,5526,5232,3014,5655,5009,5737,5420,5527,6615,5815,5343,5173, -5381,4818,6616,3151,4953,6617,5738,2796,3204,4360,2989,4281,5739,5174,5421,5197, -3132,5141,3849,5142,5528,5083,3799,3904,4839,5480,2880,4495,3448,6377,6184,5271, -5919,3771,3193,6034,6035,5920,5010,6036,5597,6037,6378,6038,3106,5422,6618,5423, -5424,4142,6619,4889,5084,4890,4313,5740,6620,3437,5175,5307,5816,4199,5198,5529, -5817,5199,5656,4913,5028,5344,3850,6185,2955,5272,5011,5818,4567,4580,5029,5921, -3616,5233,6621,6622,6186,4176,6039,6379,6380,3352,5200,5273,2908,5598,5234,3837, -5308,6623,6624,5819,4496,4323,5309,5201,6625,6626,4983,3194,3838,4167,5530,5922, -5274,6381,6382,3860,3861,5599,3333,4292,4509,6383,3553,5481,5820,5531,4778,6187, -3955,3956,4324,4389,4218,3945,4325,3397,2681,5923,4779,5085,4019,5482,4891,5382, -5383,6040,4682,3425,5275,4094,6627,5310,3015,5483,5657,4398,5924,3168,4819,6628, -5925,6629,5532,4932,4613,6041,6630,4636,6384,4780,4204,5658,4423,5821,3989,4683, -5822,6385,4954,6631,5345,6188,5425,5012,5384,3894,6386,4490,4104,6632,5741,5053, -6633,5823,5926,5659,5660,5927,6634,5235,5742,5824,4840,4933,4820,6387,4859,5928, -4955,6388,4143,3584,5825,5346,5013,6635,5661,6389,5014,5484,5743,4337,5176,5662, -6390,2836,6391,3268,6392,6636,6042,5236,6637,4158,6638,5744,5663,4471,5347,3663, -4123,5143,4293,3895,6639,6640,5311,5929,5826,3800,6189,6393,6190,5664,5348,3554, -3594,4749,4603,6641,5385,4801,6043,5827,4183,6642,5312,5426,4761,6394,5665,6191, -4715,2669,6643,6644,5533,3185,5427,5086,5930,5931,5386,6192,6044,6645,4781,4013, -5745,4282,4435,5534,4390,4267,6045,5746,4984,6046,2743,6193,3501,4087,5485,5932, -5428,4184,4095,5747,4061,5054,3058,3862,5933,5600,6646,5144,3618,6395,3131,5055, -5313,6396,4650,4956,3855,6194,3896,5202,4985,4029,4225,6195,6647,5828,5486,5829, -3589,3002,6648,6397,4782,5276,6649,6196,6650,4105,3803,4043,5237,5830,6398,4096, -3643,6399,3528,6651,4453,3315,4637,6652,3984,6197,5535,3182,3339,6653,3096,2660, -6400,6654,3449,5934,4250,4236,6047,6401,5831,6655,5487,3753,4062,5832,6198,6199, -6656,3766,6657,3403,4667,6048,6658,4338,2897,5833,3880,2797,3780,4326,6659,5748, -5015,6660,5387,4351,5601,4411,6661,3654,4424,5935,4339,4072,5277,4568,5536,6402, -6662,5238,6663,5349,5203,6200,5204,6201,5145,4536,5016,5056,4762,5834,4399,4957, -6202,6403,5666,5749,6664,4340,6665,5936,5177,5667,6666,6667,3459,4668,6404,6668, -6669,4543,6203,6670,4276,6405,4480,5537,6671,4614,5205,5668,6672,3348,2193,4763, -6406,6204,5937,5602,4177,5669,3419,6673,4020,6205,4443,4569,5388,3715,3639,6407, -6049,4058,6206,6674,5938,4544,6050,4185,4294,4841,4651,4615,5488,6207,6408,6051, -5178,3241,3509,5835,6208,4958,5836,4341,5489,5278,6209,2823,5538,5350,5206,5429, -6675,4638,4875,4073,3516,4684,4914,4860,5939,5603,5389,6052,5057,3237,5490,3791, -6676,6409,6677,4821,4915,4106,5351,5058,4243,5539,4244,5604,4842,4916,5239,3028, -3716,5837,5114,5605,5390,5940,5430,6210,4332,6678,5540,4732,3667,3840,6053,4305, -3408,5670,5541,6410,2744,5240,5750,6679,3234,5606,6680,5607,5671,3608,4283,4159, -4400,5352,4783,6681,6411,6682,4491,4802,6211,6412,5941,6413,6414,5542,5751,6683, -4669,3734,5942,6684,6415,5943,5059,3328,4670,4144,4268,6685,6686,6687,6688,4372, -3603,6689,5944,5491,4373,3440,6416,5543,4784,4822,5608,3792,4616,5838,5672,3514, -5391,6417,4892,6690,4639,6691,6054,5673,5839,6055,6692,6056,5392,6212,4038,5544, -5674,4497,6057,6693,5840,4284,5675,4021,4545,5609,6418,4454,6419,6213,4113,4472, -5314,3738,5087,5279,4074,5610,4959,4063,3179,4750,6058,6420,6214,3476,4498,4716, -5431,4960,4685,6215,5241,6694,6421,6216,6695,5841,5945,6422,3748,5946,5179,3905, -5752,5545,5947,4374,6217,4455,6423,4412,6218,4803,5353,6696,3832,5280,6219,4327, -4702,6220,6221,6059,4652,5432,6424,3749,4751,6425,5753,4986,5393,4917,5948,5030, -5754,4861,4733,6426,4703,6697,6222,4671,5949,4546,4961,5180,6223,5031,3316,5281, -6698,4862,4295,4934,5207,3644,6427,5842,5950,6428,6429,4570,5843,5282,6430,6224, -5088,3239,6060,6699,5844,5755,6061,6431,2701,5546,6432,5115,5676,4039,3993,3327, -4752,4425,5315,6433,3941,6434,5677,4617,4604,3074,4581,6225,5433,6435,6226,6062, -4823,5756,5116,6227,3717,5678,4717,5845,6436,5679,5846,6063,5847,6064,3977,3354, -6437,3863,5117,6228,5547,5394,4499,4524,6229,4605,6230,4306,4500,6700,5951,6065, -3693,5952,5089,4366,4918,6701,6231,5548,6232,6702,6438,4704,5434,6703,6704,5953, -4168,6705,5680,3420,6706,5242,4407,6066,3812,5757,5090,5954,4672,4525,3481,5681, -4618,5395,5354,5316,5955,6439,4962,6707,4526,6440,3465,4673,6067,6441,5682,6708, -5435,5492,5758,5683,4619,4571,4674,4804,4893,4686,5493,4753,6233,6068,4269,6442, -6234,5032,4705,5146,5243,5208,5848,6235,6443,4963,5033,4640,4226,6236,5849,3387, -6444,6445,4436,4437,5850,4843,5494,4785,4894,6709,4361,6710,5091,5956,3331,6237, -4987,5549,6069,6711,4342,3517,4473,5317,6070,6712,6071,4706,6446,5017,5355,6713, -6714,4988,5436,6447,4734,5759,6715,4735,4547,4456,4754,6448,5851,6449,6450,3547, -5852,5318,6451,6452,5092,4205,6716,6238,4620,4219,5611,6239,6072,4481,5760,5957, -5958,4059,6240,6453,4227,4537,6241,5761,4030,4186,5244,5209,3761,4457,4876,3337, -5495,5181,6242,5959,5319,5612,5684,5853,3493,5854,6073,4169,5613,5147,4895,6074, -5210,6717,5182,6718,3830,6243,2798,3841,6075,6244,5855,5614,3604,4606,5496,5685, -5118,5356,6719,6454,5960,5357,5961,6720,4145,3935,4621,5119,5962,4261,6721,6455, -4786,5963,4375,4582,6245,6246,6247,6076,5437,4877,5856,3376,4380,6248,4160,6722, -5148,6456,5211,6457,6723,4718,6458,6724,6249,5358,4044,3297,6459,6250,5857,5615, -5497,5245,6460,5498,6725,6251,6252,5550,3793,5499,2959,5396,6461,6462,4572,5093, -5500,5964,3806,4146,6463,4426,5762,5858,6077,6253,4755,3967,4220,5965,6254,4989, -5501,6464,4352,6726,6078,4764,2290,5246,3906,5438,5283,3767,4964,2861,5763,5094, -6255,6256,4622,5616,5859,5860,4707,6727,4285,4708,4824,5617,6257,5551,4787,5212, -4965,4935,4687,6465,6728,6466,5686,6079,3494,4413,2995,5247,5966,5618,6729,5967, -5764,5765,5687,5502,6730,6731,6080,5397,6467,4990,6258,6732,4538,5060,5619,6733, -4719,5688,5439,5018,5149,5284,5503,6734,6081,4607,6259,5120,3645,5861,4583,6260, -4584,4675,5620,4098,5440,6261,4863,2379,3306,4585,5552,5689,4586,5285,6735,4864, -6736,5286,6082,6737,4623,3010,4788,4381,4558,5621,4587,4896,3698,3161,5248,4353, -4045,6262,3754,5183,4588,6738,6263,6739,6740,5622,3936,6741,6468,6742,6264,5095, -6469,4991,5968,6743,4992,6744,6083,4897,6745,4256,5766,4307,3108,3968,4444,5287, -3889,4343,6084,4510,6085,4559,6086,4898,5969,6746,5623,5061,4919,5249,5250,5504, -5441,6265,5320,4878,3242,5862,5251,3428,6087,6747,4237,5624,5442,6266,5553,4539, -6748,2585,3533,5398,4262,6088,5150,4736,4438,6089,6267,5505,4966,6749,6268,6750, -6269,5288,5554,3650,6090,6091,4624,6092,5690,6751,5863,4270,5691,4277,5555,5864, -6752,5692,4720,4865,6470,5151,4688,4825,6753,3094,6754,6471,3235,4653,6755,5213, -5399,6756,3201,4589,5865,4967,6472,5866,6473,5019,3016,6757,5321,4756,3957,4573, -6093,4993,5767,4721,6474,6758,5625,6759,4458,6475,6270,6760,5556,4994,5214,5252, -6271,3875,5768,6094,5034,5506,4376,5769,6761,2120,6476,5253,5770,6762,5771,5970, -3990,5971,5557,5558,5772,6477,6095,2787,4641,5972,5121,6096,6097,6272,6763,3703, -5867,5507,6273,4206,6274,4789,6098,6764,3619,3646,3833,3804,2394,3788,4936,3978, -4866,4899,6099,6100,5559,6478,6765,3599,5868,6101,5869,5870,6275,6766,4527,6767 -].freeze -end diff --git a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/gb18030prober.rb b/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/gb18030prober.rb deleted file mode 100644 index 897e939f..00000000 --- a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/gb18030prober.rb +++ /dev/null @@ -1,42 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is mozilla.org code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Jeff Hodges - port to Ruby -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -module CharDet - class GB18030Prober < MultiByteCharSetProber - def initialize - super - @codingSM = CodingStateMachine.new(GB18030SMModel) - @distributionAnalyzer = GB18030DistributionAnalysis.new() - reset() - end - - def get_charset_name - return "GB18030" - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/hebrewprober.rb b/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/hebrewprober.rb deleted file mode 100644 index e0c7e4cb..00000000 --- a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/hebrewprober.rb +++ /dev/null @@ -1,289 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Universal charset detector code. -# -# The Initial Developer of the Original Code is -# Shy Shalom -# Portions created by the Initial Developer are Copyright (C) 2005 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Jeff Hodges - port to Ruby -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -# This prober doesn't actually recognize a language or a charset. -# It is a helper prober for the use of the Hebrew model probers - -### General ideas of the Hebrew charset recognition ### -# -# Four main charsets exist in Hebrew: -# "ISO-8859-8" - Visual Hebrew -# "windows-1255" - Logical Hebrew -# "ISO-8859-8-I" - Logical Hebrew -# "x-mac-hebrew" - ?? Logical Hebrew ?? -# -# Both "ISO" charsets use a completely identical set of code points, whereas -# "windows-1255" and "x-mac-hebrew" are two different proper supersets of -# these code points. windows-1255 defines additional characters in the range -# 0x80-0x9F as some misc punctuation marks as well as some Hebrew-specific -# diacritics and additional 'Yiddish' ligature letters in the range 0xc0-0xd6. -# x-mac-hebrew defines similar additional code points but with a different -# mapping. -# -# As far as an average Hebrew text with no diacritics is concerned, all four -# charsets are identical with respect to code points. Meaning that for the -# main Hebrew alphabet, all four map the same values to all 27 Hebrew letters -# (including final letters). -# -# The dominant difference between these charsets is their directionality. -# "Visual" directionality means that the text is ordered as if the renderer is -# not aware of a BIDI rendering algorithm. The renderer sees the text and -# draws it from left to right. The text itself when ordered naturally is read -# backwards. A buffer of Visual Hebrew generally looks like so: -# "[last word of first line spelled backwards] [whole line ordered backwards -# and spelled backwards] [first word of first line spelled backwards] -# [end of line] [last word of second line] ... etc' " -# adding punctuation marks, numbers and English text to visual text is -# naturally also "visual" and from left to right. -# -# "Logical" directionality means the text is ordered "naturally" according to -# the order it is read. It is the responsibility of the renderer to display -# the text from right to left. A BIDI algorithm is used to place general -# punctuation marks, numbers and English text in the text. -# -# Texts in x-mac-hebrew are almost impossible to find on the Internet. From -# what little evidence I could find, it seems that its general directionality -# is Logical. -# -# To sum up all of the above, the Hebrew probing mechanism knows about two -# charsets: -# Visual Hebrew - "ISO-8859-8" - backwards text - Words and sentences are -# backwards while line order is natural. For charset recognition purposes -# the line order is unimportant (In fact, for this implementation, even -# word order is unimportant). -# Logical Hebrew - "windows-1255" - normal, naturally ordered text. -# -# "ISO-8859-8-I" is a subset of windows-1255 and doesn't need to be -# specifically identified. -# "x-mac-hebrew" is also identified as windows-1255. A text in x-mac-hebrew -# that contain special punctuation marks or diacritics is displayed with -# some unconverted characters showing as question marks. This problem might -# be corrected using another model prober for x-mac-hebrew. Due to the fact -# that x-mac-hebrew texts are so rare, writing another model prober isn't -# worth the effort and performance hit. -# -#### The Prober #### -# -# The prober is divided between two SBCharSetProbers and a HebrewProber, -# all of which are managed, created, fed data, inquired and deleted by the -# SBCSGroupProber. The two SBCharSetProbers identify that the text is in -# fact some kind of Hebrew, Logical or Visual. The final decision about which -# one is it is made by the HebrewProber by combining final-letter scores -# with the scores of the two SBCharSetProbers to produce a final answer. -# -# The SBCSGroupProber is responsible for stripping the original text of HTML -# tags, English characters, numbers, low-ASCII punctuation characters, spaces -# and new lines. It reduces any sequence of such characters to a single space. -# The buffer fed to each prober in the SBCS group prober is pure text in -# high-ASCII. -# The two SBCharSetProbers (model probers) share the same language model: -# Win1255Model. -# The first SBCharSetProber uses the model normally as any other -# SBCharSetProber does, to recognize windows-1255, upon which this model was -# built. The second SBCharSetProber is told to make the pair-of-letter -# lookup in the language model backwards. This in practice exactly simulates -# a visual Hebrew model using the windows-1255 logical Hebrew model. -# -# The HebrewProber is not using any language model. All it does is look for -# final-letter evidence suggesting the text is either logical Hebrew or visual -# Hebrew. Disjointed from the model probers, the results of the HebrewProber -# alone are meaningless. HebrewProber always returns 0.00 as confidence -# since it never identifies a charset by itself. Instead, the pointer to the -# HebrewProber is passed to the model probers as a helper "Name Prober". -# When the Group prober receives a positive identification from any prober, -# it asks for the name of the charset identified. If the prober queried is a -# Hebrew model prober, the model prober forwards the call to the -# HebrewProber to make the final decision. In the HebrewProber, the -# decision is made according to the final-letters scores maintained and Both -# model probers scores. The answer is returned in the form of the name of the -# charset identified, either "windows-1255" or "ISO-8859-8". - -# windows-1255 / ISO-8859-8 code points of interest -module CharDet - FINAL_KAF = "\xea" - NORMAL_KAF = "\xeb" - FINAL_MEM = "\xed" - NORMAL_MEM = "\xee" - FINAL_NUN = "\xef" - NORMAL_NUN = "\xf0" - FINAL_PE = "\xf3" - NORMAL_PE = "\xf4" - FINAL_TSADI = "\xf5" - NORMAL_TSADI = "\xf6" - - # Minimum Visual vs Logical final letter score difference. - # If the difference is below this, don't rely solely on the final letter score distance. - MIN_FINAL_CHAR_DISTANCE = 5 - - # Minimum Visual vs Logical model score difference. - # If the difference is below this, don't rely at all on the model score distance. - MIN_MODEL_DISTANCE = 0.01 - - VISUAL_HEBREW_NAME = "ISO-8859-8" - LOGICAL_HEBREW_NAME = "windows-1255" - - class HebrewProber < CharSetProber - def initialize - super() - @logicalProber = nil - @visualProber = nil - reset() - end - - def reset - @finalCharLogicalScore = 0 - @finalCharVisualScore = 0 - # The two last characters seen in the previous buffer, - # mPrev and mBeforePrev are initialized to space in order to simulate a word - # delimiter at the beginning of the data - @prev = ' ' - @beforePrev = ' ' - # These probers are owned by the group prober. - end - - def set_model_probers(logicalProber, visualProber) - @logicalProber = logicalProber - @visualProber = visualProber - end - - def is_final(c) - return [FINAL_KAF, FINAL_MEM, FINAL_NUN, FINAL_PE, FINAL_TSADI].include?(c) - end - - def is_non_final(c) - # The normal Tsadi is not a good Non-Final letter due to words like - # 'lechotet' (to chat) containing an apostrophe after the tsadi. This - # apostrophe is converted to a space in FilterWithoutEnglishLetters causing - # the Non-Final tsadi to appear at an end of a word even though this is not - # the case in the original text. - # The letters Pe and Kaf rarely display a related behavior of not being a - # good Non-Final letter. Words like 'Pop', 'Winamp' and 'Mubarak' for - # example legally end with a Non-Final Pe or Kaf. However, the benefit of - # these letters as Non-Final letters outweighs the damage since these words - # are quite rare. - return [NORMAL_KAF, NORMAL_MEM, NORMAL_NUN, NORMAL_PE].include?(c) - end - - def feed(aBuf) - # Final letter analysis for logical-visual decision. - # Look for evidence that the received buffer is either logical Hebrew or - # visual Hebrew. - # The following cases are checked: - # 1) A word longer than 1 letter, ending with a final letter. This is an - # indication that the text is laid out "naturally" since the final letter - # really appears at the end. +1 for logical score. - # 2) A word longer than 1 letter, ending with a Non-Final letter. In normal - # Hebrew, words ending with Kaf, Mem, Nun, Pe or Tsadi, should not end with - # the Non-Final form of that letter. Exceptions to this rule are mentioned - # above in isNonFinal(). This is an indication that the text is laid out - # backwards. +1 for visual score - # 3) A word longer than 1 letter, starting with a final letter. Final letters - # should not appear at the beginning of a word. This is an indication that - # the text is laid out backwards. +1 for visual score. - # - # The visual score and logical score are accumulated throughout the text and - # are finally checked against each other in GetCharSetName(). - # No checking for final letters in the middle of words is done since that case - # is not an indication for either Logical or Visual text. - # - # We automatically filter out all 7-bit characters (replace them with spaces) - # so the word boundary detection works properly. [MAP] - - if get_state() == ENotMe - # Both model probers say it's not them. No reason to continue. - return ENotMe - end - - aBuf = filter_high_bit_only(aBuf) - - for cur in aBuf.split(' ') - if cur == ' ' - # We stand on a space - a word just ended - if @beforePrev != ' ' - # next-to-last char was not a space so self._mPrev is not a 1 letter word - if is_final(@prev) - # case (1) [-2:not space][-1:final letter][cur:space] - @finalCharLogicalScore += 1 - elsif is_non_final(@prev) - # case (2) [-2:not space][-1:Non-Final letter][cur:space] - @finalCharVisualScore += 1 - end - end - else - # Not standing on a space - if (@beforePrev == ' ') and (is_final(@prev)) and (cur != ' ') - # case (3) [-2:space][-1:final letter][cur:not space] - @finalCharVisualScore += 1 - end - end - @beforePrev = @prev - @prev = cur - end - - # Forever detecting, till the end or until both model probers return eNotMe (handled above) - return EDetecting - end - - def get_charset_name - # Make the decision: is it Logical or Visual? - # If the final letter score distance is dominant enough, rely on it. - finalsub = @finalCharLogicalScore - @finalCharVisualScore - if finalsub >= MIN_FINAL_CHAR_DISTANCE - return LOGICAL_HEBREW_NAME - end - if finalsub <= -MIN_FINAL_CHAR_DISTANCE - return VISUAL_HEBREW_NAME - end - - # It's not dominant enough, try to rely on the model scores instead. - modelsub = @logicalProber.get_confidence() - @visualProber.get_confidence() - if modelsub > MIN_MODEL_DISTANCE - return LOGICAL_HEBREW_NAME - end - if modelsub < -MIN_MODEL_DISTANCE - return VISUAL_HEBREW_NAME - end - - # Still no good, back to final letter distance, maybe it'll save the day. - if finalsub < 0.0 - return VISUAL_HEBREW_NAME - end - - # (finalsub > 0 - Logical) or (don't know what to do) default to Logical. - return LOGICAL_HEBREW_NAME - end - - def get_state - # Remain active as long as any of the model probers are active. - if (@logicalProber.get_state() == ENotMe) and (@visualProber.get_state() == ENotMe) - return ENotMe - end - return EDetecting - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/jisfreq.rb b/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/jisfreq.rb deleted file mode 100644 index 84f00604..00000000 --- a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/jisfreq.rb +++ /dev/null @@ -1,571 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Jeff Hodges - port to Ruby -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -# Sampling from about 20M text materials include literature and computer technology -# -# Japanese frequency table, applied to both S-JIS and EUC-JP -# They are sorted in order. - -# 128 --> 0.77094 -# 256 --> 0.85710 -# 512 --> 0.92635 -# 1024 --> 0.97130 -# 2048 --> 0.99431 -# -# Ideal Distribution Ratio = 0.92635 / (1-0.92635) = 12.58 -# Random Distribution Ration = 512 / (2965+62+83+86-512) = 0.191 -# -# Typical Distribution Ratio, 25% of IDR - -module CharDet -JIS_TYPICAL_DISTRIBUTION_RATIO = 3.0 - -# Char to FreqOrder table , -JIS_TABLE_SIZE = 4368 - -JISCharToFreqOrder = [ - 40, 1, 6, 182, 152, 180, 295,2127, 285, 381,3295,4304,3068,4606,3165,3510, # 16 -3511,1822,2785,4607,1193,2226,5070,4608, 171,2996,1247, 18, 179,5071, 856,1661, # 32 -1262,5072, 619, 127,3431,3512,3230,1899,1700, 232, 228,1294,1298, 284, 283,2041, # 48 -2042,1061,1062, 48, 49, 44, 45, 433, 434,1040,1041, 996, 787,2997,1255,4305, # 64 -2108,4609,1684,1648,5073,5074,5075,5076,5077,5078,3687,5079,4610,5080,3927,3928, # 80 -5081,3296,3432, 290,2285,1471,2187,5082,2580,2825,1303,2140,1739,1445,2691,3375, # 96 -1691,3297,4306,4307,4611, 452,3376,1182,2713,3688,3069,4308,5083,5084,5085,5086, # 112 -5087,5088,5089,5090,5091,5092,5093,5094,5095,5096,5097,5098,5099,5100,5101,5102, # 128 -5103,5104,5105,5106,5107,5108,5109,5110,5111,5112,4097,5113,5114,5115,5116,5117, # 144 -5118,5119,5120,5121,5122,5123,5124,5125,5126,5127,5128,5129,5130,5131,5132,5133, # 160 -5134,5135,5136,5137,5138,5139,5140,5141,5142,5143,5144,5145,5146,5147,5148,5149, # 176 -5150,5151,5152,4612,5153,5154,5155,5156,5157,5158,5159,5160,5161,5162,5163,5164, # 192 -5165,5166,5167,5168,5169,5170,5171,5172,5173,5174,5175,1472, 598, 618, 820,1205, # 208 -1309,1412,1858,1307,1692,5176,5177,5178,5179,5180,5181,5182,1142,1452,1234,1172, # 224 -1875,2043,2149,1793,1382,2973, 925,2404,1067,1241, 960,1377,2935,1491, 919,1217, # 240 -1865,2030,1406,1499,2749,4098,5183,5184,5185,5186,5187,5188,2561,4099,3117,1804, # 256 -2049,3689,4309,3513,1663,5189,3166,3118,3298,1587,1561,3433,5190,3119,1625,2998, # 272 -3299,4613,1766,3690,2786,4614,5191,5192,5193,5194,2161, 26,3377, 2,3929, 20, # 288 -3691, 47,4100, 50, 17, 16, 35, 268, 27, 243, 42, 155, 24, 154, 29, 184, # 304 - 4, 91, 14, 92, 53, 396, 33, 289, 9, 37, 64, 620, 21, 39, 321, 5, # 320 - 12, 11, 52, 13, 3, 208, 138, 0, 7, 60, 526, 141, 151,1069, 181, 275, # 336 -1591, 83, 132,1475, 126, 331, 829, 15, 69, 160, 59, 22, 157, 55,1079, 312, # 352 - 109, 38, 23, 25, 10, 19, 79,5195, 61, 382,1124, 8, 30,5196,5197,5198, # 368 -5199,5200,5201,5202,5203,5204,5205,5206, 89, 62, 74, 34,2416, 112, 139, 196, # 384 - 271, 149, 84, 607, 131, 765, 46, 88, 153, 683, 76, 874, 101, 258, 57, 80, # 400 - 32, 364, 121,1508, 169,1547, 68, 235, 145,2999, 41, 360,3027, 70, 63, 31, # 416 - 43, 259, 262,1383, 99, 533, 194, 66, 93, 846, 217, 192, 56, 106, 58, 565, # 432 - 280, 272, 311, 256, 146, 82, 308, 71, 100, 128, 214, 655, 110, 261, 104,1140, # 448 - 54, 51, 36, 87, 67,3070, 185,2618,2936,2020, 28,1066,2390,2059,5207,5208, # 464 -5209,5210,5211,5212,5213,5214,5215,5216,4615,5217,5218,5219,5220,5221,5222,5223, # 480 -5224,5225,5226,5227,5228,5229,5230,5231,5232,5233,5234,5235,5236,3514,5237,5238, # 496 -5239,5240,5241,5242,5243,5244,2297,2031,4616,4310,3692,5245,3071,5246,3598,5247, # 512 -4617,3231,3515,5248,4101,4311,4618,3808,4312,4102,5249,4103,4104,3599,5250,5251, # 528 -5252,5253,5254,5255,5256,5257,5258,5259,5260,5261,5262,5263,5264,5265,5266,5267, # 544 -5268,5269,5270,5271,5272,5273,5274,5275,5276,5277,5278,5279,5280,5281,5282,5283, # 560 -5284,5285,5286,5287,5288,5289,5290,5291,5292,5293,5294,5295,5296,5297,5298,5299, # 576 -5300,5301,5302,5303,5304,5305,5306,5307,5308,5309,5310,5311,5312,5313,5314,5315, # 592 -5316,5317,5318,5319,5320,5321,5322,5323,5324,5325,5326,5327,5328,5329,5330,5331, # 608 -5332,5333,5334,5335,5336,5337,5338,5339,5340,5341,5342,5343,5344,5345,5346,5347, # 624 -5348,5349,5350,5351,5352,5353,5354,5355,5356,5357,5358,5359,5360,5361,5362,5363, # 640 -5364,5365,5366,5367,5368,5369,5370,5371,5372,5373,5374,5375,5376,5377,5378,5379, # 656 -5380,5381, 363, 642,2787,2878,2788,2789,2316,3232,2317,3434,2011, 165,1942,3930, # 672 -3931,3932,3933,5382,4619,5383,4620,5384,5385,5386,5387,5388,5389,5390,5391,5392, # 688 -5393,5394,5395,5396,5397,5398,5399,5400,5401,5402,5403,5404,5405,5406,5407,5408, # 704 -5409,5410,5411,5412,5413,5414,5415,5416,5417,5418,5419,5420,5421,5422,5423,5424, # 720 -5425,5426,5427,5428,5429,5430,5431,5432,5433,5434,5435,5436,5437,5438,5439,5440, # 736 -5441,5442,5443,5444,5445,5446,5447,5448,5449,5450,5451,5452,5453,5454,5455,5456, # 752 -5457,5458,5459,5460,5461,5462,5463,5464,5465,5466,5467,5468,5469,5470,5471,5472, # 768 -5473,5474,5475,5476,5477,5478,5479,5480,5481,5482,5483,5484,5485,5486,5487,5488, # 784 -5489,5490,5491,5492,5493,5494,5495,5496,5497,5498,5499,5500,5501,5502,5503,5504, # 800 -5505,5506,5507,5508,5509,5510,5511,5512,5513,5514,5515,5516,5517,5518,5519,5520, # 816 -5521,5522,5523,5524,5525,5526,5527,5528,5529,5530,5531,5532,5533,5534,5535,5536, # 832 -5537,5538,5539,5540,5541,5542,5543,5544,5545,5546,5547,5548,5549,5550,5551,5552, # 848 -5553,5554,5555,5556,5557,5558,5559,5560,5561,5562,5563,5564,5565,5566,5567,5568, # 864 -5569,5570,5571,5572,5573,5574,5575,5576,5577,5578,5579,5580,5581,5582,5583,5584, # 880 -5585,5586,5587,5588,5589,5590,5591,5592,5593,5594,5595,5596,5597,5598,5599,5600, # 896 -5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,5613,5614,5615,5616, # 912 -5617,5618,5619,5620,5621,5622,5623,5624,5625,5626,5627,5628,5629,5630,5631,5632, # 928 -5633,5634,5635,5636,5637,5638,5639,5640,5641,5642,5643,5644,5645,5646,5647,5648, # 944 -5649,5650,5651,5652,5653,5654,5655,5656,5657,5658,5659,5660,5661,5662,5663,5664, # 960 -5665,5666,5667,5668,5669,5670,5671,5672,5673,5674,5675,5676,5677,5678,5679,5680, # 976 -5681,5682,5683,5684,5685,5686,5687,5688,5689,5690,5691,5692,5693,5694,5695,5696, # 992 -5697,5698,5699,5700,5701,5702,5703,5704,5705,5706,5707,5708,5709,5710,5711,5712, # 1008 -5713,5714,5715,5716,5717,5718,5719,5720,5721,5722,5723,5724,5725,5726,5727,5728, # 1024 -5729,5730,5731,5732,5733,5734,5735,5736,5737,5738,5739,5740,5741,5742,5743,5744, # 1040 -5745,5746,5747,5748,5749,5750,5751,5752,5753,5754,5755,5756,5757,5758,5759,5760, # 1056 -5761,5762,5763,5764,5765,5766,5767,5768,5769,5770,5771,5772,5773,5774,5775,5776, # 1072 -5777,5778,5779,5780,5781,5782,5783,5784,5785,5786,5787,5788,5789,5790,5791,5792, # 1088 -5793,5794,5795,5796,5797,5798,5799,5800,5801,5802,5803,5804,5805,5806,5807,5808, # 1104 -5809,5810,5811,5812,5813,5814,5815,5816,5817,5818,5819,5820,5821,5822,5823,5824, # 1120 -5825,5826,5827,5828,5829,5830,5831,5832,5833,5834,5835,5836,5837,5838,5839,5840, # 1136 -5841,5842,5843,5844,5845,5846,5847,5848,5849,5850,5851,5852,5853,5854,5855,5856, # 1152 -5857,5858,5859,5860,5861,5862,5863,5864,5865,5866,5867,5868,5869,5870,5871,5872, # 1168 -5873,5874,5875,5876,5877,5878,5879,5880,5881,5882,5883,5884,5885,5886,5887,5888, # 1184 -5889,5890,5891,5892,5893,5894,5895,5896,5897,5898,5899,5900,5901,5902,5903,5904, # 1200 -5905,5906,5907,5908,5909,5910,5911,5912,5913,5914,5915,5916,5917,5918,5919,5920, # 1216 -5921,5922,5923,5924,5925,5926,5927,5928,5929,5930,5931,5932,5933,5934,5935,5936, # 1232 -5937,5938,5939,5940,5941,5942,5943,5944,5945,5946,5947,5948,5949,5950,5951,5952, # 1248 -5953,5954,5955,5956,5957,5958,5959,5960,5961,5962,5963,5964,5965,5966,5967,5968, # 1264 -5969,5970,5971,5972,5973,5974,5975,5976,5977,5978,5979,5980,5981,5982,5983,5984, # 1280 -5985,5986,5987,5988,5989,5990,5991,5992,5993,5994,5995,5996,5997,5998,5999,6000, # 1296 -6001,6002,6003,6004,6005,6006,6007,6008,6009,6010,6011,6012,6013,6014,6015,6016, # 1312 -6017,6018,6019,6020,6021,6022,6023,6024,6025,6026,6027,6028,6029,6030,6031,6032, # 1328 -6033,6034,6035,6036,6037,6038,6039,6040,6041,6042,6043,6044,6045,6046,6047,6048, # 1344 -6049,6050,6051,6052,6053,6054,6055,6056,6057,6058,6059,6060,6061,6062,6063,6064, # 1360 -6065,6066,6067,6068,6069,6070,6071,6072,6073,6074,6075,6076,6077,6078,6079,6080, # 1376 -6081,6082,6083,6084,6085,6086,6087,6088,6089,6090,6091,6092,6093,6094,6095,6096, # 1392 -6097,6098,6099,6100,6101,6102,6103,6104,6105,6106,6107,6108,6109,6110,6111,6112, # 1408 -6113,6114,2044,2060,4621, 997,1235, 473,1186,4622, 920,3378,6115,6116, 379,1108, # 1424 -4313,2657,2735,3934,6117,3809, 636,3233, 573,1026,3693,3435,2974,3300,2298,4105, # 1440 - 854,2937,2463, 393,2581,2417, 539, 752,1280,2750,2480, 140,1161, 440, 708,1569, # 1456 - 665,2497,1746,1291,1523,3000, 164,1603, 847,1331, 537,1997, 486, 508,1693,2418, # 1472 -1970,2227, 878,1220, 299,1030, 969, 652,2751, 624,1137,3301,2619, 65,3302,2045, # 1488 -1761,1859,3120,1930,3694,3516, 663,1767, 852, 835,3695, 269, 767,2826,2339,1305, # 1504 - 896,1150, 770,1616,6118, 506,1502,2075,1012,2519, 775,2520,2975,2340,2938,4314, # 1520 -3028,2086,1224,1943,2286,6119,3072,4315,2240,1273,1987,3935,1557, 175, 597, 985, # 1536 -3517,2419,2521,1416,3029, 585, 938,1931,1007,1052,1932,1685,6120,3379,4316,4623, # 1552 - 804, 599,3121,1333,2128,2539,1159,1554,2032,3810, 687,2033,2904, 952, 675,1467, # 1568 -3436,6121,2241,1096,1786,2440,1543,1924, 980,1813,2228, 781,2692,1879, 728,1918, # 1584 -3696,4624, 548,1950,4625,1809,1088,1356,3303,2522,1944, 502, 972, 373, 513,2827, # 1600 - 586,2377,2391,1003,1976,1631,6122,2464,1084, 648,1776,4626,2141, 324, 962,2012, # 1616 -2177,2076,1384, 742,2178,1448,1173,1810, 222, 102, 301, 445, 125,2420, 662,2498, # 1632 - 277, 200,1476,1165,1068, 224,2562,1378,1446, 450,1880, 659, 791, 582,4627,2939, # 1648 -3936,1516,1274, 555,2099,3697,1020,1389,1526,3380,1762,1723,1787,2229, 412,2114, # 1664 -1900,2392,3518, 512,2597, 427,1925,2341,3122,1653,1686,2465,2499, 697, 330, 273, # 1680 - 380,2162, 951, 832, 780, 991,1301,3073, 965,2270,3519, 668,2523,2636,1286, 535, # 1696 -1407, 518, 671, 957,2658,2378, 267, 611,2197,3030,6123, 248,2299, 967,1799,2356, # 1712 - 850,1418,3437,1876,1256,1480,2828,1718,6124,6125,1755,1664,2405,6126,4628,2879, # 1728 -2829, 499,2179, 676,4629, 557,2329,2214,2090, 325,3234, 464, 811,3001, 992,2342, # 1744 -2481,1232,1469, 303,2242, 466,1070,2163, 603,1777,2091,4630,2752,4631,2714, 322, # 1760 -2659,1964,1768, 481,2188,1463,2330,2857,3600,2092,3031,2421,4632,2318,2070,1849, # 1776 -2598,4633,1302,2254,1668,1701,2422,3811,2905,3032,3123,2046,4106,1763,1694,4634, # 1792 -1604, 943,1724,1454, 917, 868,2215,1169,2940, 552,1145,1800,1228,1823,1955, 316, # 1808 -1080,2510, 361,1807,2830,4107,2660,3381,1346,1423,1134,4108,6127, 541,1263,1229, # 1824 -1148,2540, 545, 465,1833,2880,3438,1901,3074,2482, 816,3937, 713,1788,2500, 122, # 1840 -1575, 195,1451,2501,1111,6128, 859, 374,1225,2243,2483,4317, 390,1033,3439,3075, # 1856 -2524,1687, 266, 793,1440,2599, 946, 779, 802, 507, 897,1081, 528,2189,1292, 711, # 1872 -1866,1725,1167,1640, 753, 398,2661,1053, 246, 348,4318, 137,1024,3440,1600,2077, # 1888 -2129, 825,4319, 698, 238, 521, 187,2300,1157,2423,1641,1605,1464,1610,1097,2541, # 1904 -1260,1436, 759,2255,1814,2150, 705,3235, 409,2563,3304, 561,3033,2005,2564, 726, # 1920 -1956,2343,3698,4109, 949,3812,3813,3520,1669, 653,1379,2525, 881,2198, 632,2256, # 1936 -1027, 778,1074, 733,1957, 514,1481,2466, 554,2180, 702,3938,1606,1017,1398,6129, # 1952 -1380,3521, 921, 993,1313, 594, 449,1489,1617,1166, 768,1426,1360, 495,1794,3601, # 1968 -1177,3602,1170,4320,2344, 476, 425,3167,4635,3168,1424, 401,2662,1171,3382,1998, # 1984 -1089,4110, 477,3169, 474,6130,1909, 596,2831,1842, 494, 693,1051,1028,1207,3076, # 2000 - 606,2115, 727,2790,1473,1115, 743,3522, 630, 805,1532,4321,2021, 366,1057, 838, # 2016 - 684,1114,2142,4322,2050,1492,1892,1808,2271,3814,2424,1971,1447,1373,3305,1090, # 2032 -1536,3939,3523,3306,1455,2199, 336, 369,2331,1035, 584,2393, 902, 718,2600,6131, # 2048 -2753, 463,2151,1149,1611,2467, 715,1308,3124,1268, 343,1413,3236,1517,1347,2663, # 2064 -2093,3940,2022,1131,1553,2100,2941,1427,3441,2942,1323,2484,6132,1980, 872,2368, # 2080 -2441,2943, 320,2369,2116,1082, 679,1933,3941,2791,3815, 625,1143,2023, 422,2200, # 2096 -3816,6133, 730,1695, 356,2257,1626,2301,2858,2637,1627,1778, 937, 883,2906,2693, # 2112 -3002,1769,1086, 400,1063,1325,3307,2792,4111,3077, 456,2345,1046, 747,6134,1524, # 2128 - 884,1094,3383,1474,2164,1059, 974,1688,2181,2258,1047, 345,1665,1187, 358, 875, # 2144 -3170, 305, 660,3524,2190,1334,1135,3171,1540,1649,2542,1527, 927, 968,2793, 885, # 2160 -1972,1850, 482, 500,2638,1218,1109,1085,2543,1654,2034, 876, 78,2287,1482,1277, # 2176 - 861,1675,1083,1779, 724,2754, 454, 397,1132,1612,2332, 893, 672,1237, 257,2259, # 2192 -2370, 135,3384, 337,2244, 547, 352, 340, 709,2485,1400, 788,1138,2511, 540, 772, # 2208 -1682,2260,2272,2544,2013,1843,1902,4636,1999,1562,2288,4637,2201,1403,1533, 407, # 2224 - 576,3308,1254,2071, 978,3385, 170, 136,1201,3125,2664,3172,2394, 213, 912, 873, # 2240 -3603,1713,2202, 699,3604,3699, 813,3442, 493, 531,1054, 468,2907,1483, 304, 281, # 2256 -4112,1726,1252,2094, 339,2319,2130,2639, 756,1563,2944, 748, 571,2976,1588,2425, # 2272 -2715,1851,1460,2426,1528,1392,1973,3237, 288,3309, 685,3386, 296, 892,2716,2216, # 2288 -1570,2245, 722,1747,2217, 905,3238,1103,6135,1893,1441,1965, 251,1805,2371,3700, # 2304 -2601,1919,1078, 75,2182,1509,1592,1270,2640,4638,2152,6136,3310,3817, 524, 706, # 2320 -1075, 292,3818,1756,2602, 317, 98,3173,3605,3525,1844,2218,3819,2502, 814, 567, # 2336 - 385,2908,1534,6137, 534,1642,3239, 797,6138,1670,1529, 953,4323, 188,1071, 538, # 2352 - 178, 729,3240,2109,1226,1374,2000,2357,2977, 731,2468,1116,2014,2051,6139,1261, # 2368 -1593, 803,2859,2736,3443, 556, 682, 823,1541,6140,1369,2289,1706,2794, 845, 462, # 2384 -2603,2665,1361, 387, 162,2358,1740, 739,1770,1720,1304,1401,3241,1049, 627,1571, # 2400 -2427,3526,1877,3942,1852,1500, 431,1910,1503, 677, 297,2795, 286,1433,1038,1198, # 2416 -2290,1133,1596,4113,4639,2469,1510,1484,3943,6141,2442, 108, 712,4640,2372, 866, # 2432 -3701,2755,3242,1348, 834,1945,1408,3527,2395,3243,1811, 824, 994,1179,2110,1548, # 2448 -1453, 790,3003, 690,4324,4325,2832,2909,3820,1860,3821, 225,1748, 310, 346,1780, # 2464 -2470, 821,1993,2717,2796, 828, 877,3528,2860,2471,1702,2165,2910,2486,1789, 453, # 2480 - 359,2291,1676, 73,1164,1461,1127,3311, 421, 604, 314,1037, 589, 116,2487, 737, # 2496 - 837,1180, 111, 244, 735,6142,2261,1861,1362, 986, 523, 418, 581,2666,3822, 103, # 2512 - 855, 503,1414,1867,2488,1091, 657,1597, 979, 605,1316,4641,1021,2443,2078,2001, # 2528 -1209, 96, 587,2166,1032, 260,1072,2153, 173, 94, 226,3244, 819,2006,4642,4114, # 2544 -2203, 231,1744, 782, 97,2667, 786,3387, 887, 391, 442,2219,4326,1425,6143,2694, # 2560 - 633,1544,1202, 483,2015, 592,2052,1958,2472,1655, 419, 129,4327,3444,3312,1714, # 2576 -1257,3078,4328,1518,1098, 865,1310,1019,1885,1512,1734, 469,2444, 148, 773, 436, # 2592 -1815,1868,1128,1055,4329,1245,2756,3445,2154,1934,1039,4643, 579,1238, 932,2320, # 2608 - 353, 205, 801, 115,2428, 944,2321,1881, 399,2565,1211, 678, 766,3944, 335,2101, # 2624 -1459,1781,1402,3945,2737,2131,1010, 844, 981,1326,1013, 550,1816,1545,2620,1335, # 2640 -1008, 371,2881, 936,1419,1613,3529,1456,1395,2273,1834,2604,1317,2738,2503, 416, # 2656 -1643,4330, 806,1126, 229, 591,3946,1314,1981,1576,1837,1666, 347,1790, 977,3313, # 2672 - 764,2861,1853, 688,2429,1920,1462, 77, 595, 415,2002,3034, 798,1192,4115,6144, # 2688 -2978,4331,3035,2695,2582,2072,2566, 430,2430,1727, 842,1396,3947,3702, 613, 377, # 2704 - 278, 236,1417,3388,3314,3174, 757,1869, 107,3530,6145,1194, 623,2262, 207,1253, # 2720 -2167,3446,3948, 492,1117,1935, 536,1838,2757,1246,4332, 696,2095,2406,1393,1572, # 2736 -3175,1782, 583, 190, 253,1390,2230, 830,3126,3389, 934,3245,1703,1749,2979,1870, # 2752 -2545,1656,2204, 869,2346,4116,3176,1817, 496,1764,4644, 942,1504, 404,1903,1122, # 2768 -1580,3606,2945,1022, 515, 372,1735, 955,2431,3036,6146,2797,1110,2302,2798, 617, # 2784 -6147, 441, 762,1771,3447,3607,3608,1904, 840,3037, 86, 939,1385, 572,1370,2445, # 2800 -1336, 114,3703, 898, 294, 203,3315, 703,1583,2274, 429, 961,4333,1854,1951,3390, # 2816 -2373,3704,4334,1318,1381, 966,1911,2322,1006,1155, 309, 989, 458,2718,1795,1372, # 2832 -1203, 252,1689,1363,3177, 517,1936, 168,1490, 562, 193,3823,1042,4117,1835, 551, # 2848 - 470,4645, 395, 489,3448,1871,1465,2583,2641, 417,1493, 279,1295, 511,1236,1119, # 2864 - 72,1231,1982,1812,3004, 871,1564, 984,3449,1667,2696,2096,4646,2347,2833,1673, # 2880 -3609, 695,3246,2668, 807,1183,4647, 890, 388,2333,1801,1457,2911,1765,1477,1031, # 2896 -3316,3317,1278,3391,2799,2292,2526, 163,3450,4335,2669,1404,1802,6148,2323,2407, # 2912 -1584,1728,1494,1824,1269, 298, 909,3318,1034,1632, 375, 776,1683,2061, 291, 210, # 2928 -1123, 809,1249,1002,2642,3038, 206,1011,2132, 144, 975, 882,1565, 342, 667, 754, # 2944 -1442,2143,1299,2303,2062, 447, 626,2205,1221,2739,2912,1144,1214,2206,2584, 760, # 2960 -1715, 614, 950,1281,2670,2621, 810, 577,1287,2546,4648, 242,2168, 250,2643, 691, # 2976 - 123,2644, 647, 313,1029, 689,1357,2946,1650, 216, 771,1339,1306, 808,2063, 549, # 2992 - 913,1371,2913,2914,6149,1466,1092,1174,1196,1311,2605,2396,1783,1796,3079, 406, # 3008 -2671,2117,3949,4649, 487,1825,2220,6150,2915, 448,2348,1073,6151,2397,1707, 130, # 3024 - 900,1598, 329, 176,1959,2527,1620,6152,2275,4336,3319,1983,2191,3705,3610,2155, # 3040 -3706,1912,1513,1614,6153,1988, 646, 392,2304,1589,3320,3039,1826,1239,1352,1340, # 3056 -2916, 505,2567,1709,1437,2408,2547, 906,6154,2672, 384,1458,1594,1100,1329, 710, # 3072 - 423,3531,2064,2231,2622,1989,2673,1087,1882, 333, 841,3005,1296,2882,2379, 580, # 3088 -1937,1827,1293,2585, 601, 574, 249,1772,4118,2079,1120, 645, 901,1176,1690, 795, # 3104 -2207, 478,1434, 516,1190,1530, 761,2080, 930,1264, 355, 435,1552, 644,1791, 987, # 3120 - 220,1364,1163,1121,1538, 306,2169,1327,1222, 546,2645, 218, 241, 610,1704,3321, # 3136 -1984,1839,1966,2528, 451,6155,2586,3707,2568, 907,3178, 254,2947, 186,1845,4650, # 3152 - 745, 432,1757, 428,1633, 888,2246,2221,2489,3611,2118,1258,1265, 956,3127,1784, # 3168 -4337,2490, 319, 510, 119, 457,3612, 274,2035,2007,4651,1409,3128, 970,2758, 590, # 3184 -2800, 661,2247,4652,2008,3950,1420,1549,3080,3322,3951,1651,1375,2111, 485,2491, # 3200 -1429,1156,6156,2548,2183,1495, 831,1840,2529,2446, 501,1657, 307,1894,3247,1341, # 3216 - 666, 899,2156,1539,2549,1559, 886, 349,2208,3081,2305,1736,3824,2170,2759,1014, # 3232 -1913,1386, 542,1397,2948, 490, 368, 716, 362, 159, 282,2569,1129,1658,1288,1750, # 3248 -2674, 276, 649,2016, 751,1496, 658,1818,1284,1862,2209,2087,2512,3451, 622,2834, # 3264 - 376, 117,1060,2053,1208,1721,1101,1443, 247,1250,3179,1792,3952,2760,2398,3953, # 3280 -6157,2144,3708, 446,2432,1151,2570,3452,2447,2761,2835,1210,2448,3082, 424,2222, # 3296 -1251,2449,2119,2836, 504,1581,4338, 602, 817, 857,3825,2349,2306, 357,3826,1470, # 3312 -1883,2883, 255, 958, 929,2917,3248, 302,4653,1050,1271,1751,2307,1952,1430,2697, # 3328 -2719,2359, 354,3180, 777, 158,2036,4339,1659,4340,4654,2308,2949,2248,1146,2232, # 3344 -3532,2720,1696,2623,3827,6158,3129,1550,2698,1485,1297,1428, 637, 931,2721,2145, # 3360 - 914,2550,2587, 81,2450, 612, 827,2646,1242,4655,1118,2884, 472,1855,3181,3533, # 3376 -3534, 569,1353,2699,1244,1758,2588,4119,2009,2762,2171,3709,1312,1531,6159,1152, # 3392 -1938, 134,1830, 471,3710,2276,1112,1535,3323,3453,3535, 982,1337,2950, 488, 826, # 3408 - 674,1058,1628,4120,2017, 522,2399, 211, 568,1367,3454, 350, 293,1872,1139,3249, # 3424 -1399,1946,3006,1300,2360,3324, 588, 736,6160,2606, 744, 669,3536,3828,6161,1358, # 3440 - 199, 723, 848, 933, 851,1939,1505,1514,1338,1618,1831,4656,1634,3613, 443,2740, # 3456 -3829, 717,1947, 491,1914,6162,2551,1542,4121,1025,6163,1099,1223, 198,3040,2722, # 3472 - 370, 410,1905,2589, 998,1248,3182,2380, 519,1449,4122,1710, 947, 928,1153,4341, # 3488 -2277, 344,2624,1511, 615, 105, 161,1212,1076,1960,3130,2054,1926,1175,1906,2473, # 3504 - 414,1873,2801,6164,2309, 315,1319,3325, 318,2018,2146,2157, 963, 631, 223,4342, # 3520 -4343,2675, 479,3711,1197,2625,3712,2676,2361,6165,4344,4123,6166,2451,3183,1886, # 3536 -2184,1674,1330,1711,1635,1506, 799, 219,3250,3083,3954,1677,3713,3326,2081,3614, # 3552 -1652,2073,4657,1147,3041,1752, 643,1961, 147,1974,3955,6167,1716,2037, 918,3007, # 3568 -1994, 120,1537, 118, 609,3184,4345, 740,3455,1219, 332,1615,3830,6168,1621,2980, # 3584 -1582, 783, 212, 553,2350,3714,1349,2433,2082,4124, 889,6169,2310,1275,1410, 973, # 3600 - 166,1320,3456,1797,1215,3185,2885,1846,2590,2763,4658, 629, 822,3008, 763, 940, # 3616 -1990,2862, 439,2409,1566,1240,1622, 926,1282,1907,2764, 654,2210,1607, 327,1130, # 3632 -3956,1678,1623,6170,2434,2192, 686, 608,3831,3715, 903,3957,3042,6171,2741,1522, # 3648 -1915,1105,1555,2552,1359, 323,3251,4346,3457, 738,1354,2553,2311,2334,1828,2003, # 3664 -3832,1753,2351,1227,6172,1887,4125,1478,6173,2410,1874,1712,1847, 520,1204,2607, # 3680 - 264,4659, 836,2677,2102, 600,4660,3833,2278,3084,6174,4347,3615,1342, 640, 532, # 3696 - 543,2608,1888,2400,2591,1009,4348,1497, 341,1737,3616,2723,1394, 529,3252,1321, # 3712 - 983,4661,1515,2120, 971,2592, 924, 287,1662,3186,4349,2700,4350,1519, 908,1948, # 3728 -2452, 156, 796,1629,1486,2223,2055, 694,4126,1259,1036,3392,1213,2249,2742,1889, # 3744 -1230,3958,1015, 910, 408, 559,3617,4662, 746, 725, 935,4663,3959,3009,1289, 563, # 3760 - 867,4664,3960,1567,2981,2038,2626, 988,2263,2381,4351, 143,2374, 704,1895,6175, # 3776 -1188,3716,2088, 673,3085,2362,4352, 484,1608,1921,2765,2918, 215, 904,3618,3537, # 3792 - 894, 509, 976,3043,2701,3961,4353,2837,2982, 498,6176,6177,1102,3538,1332,3393, # 3808 -1487,1636,1637, 233, 245,3962, 383, 650, 995,3044, 460,1520,1206,2352, 749,3327, # 3824 - 530, 700, 389,1438,1560,1773,3963,2264, 719,2951,2724,3834, 870,1832,1644,1000, # 3840 - 839,2474,3717, 197,1630,3394, 365,2886,3964,1285,2133, 734, 922, 818,1106, 732, # 3856 - 480,2083,1774,3458, 923,2279,1350, 221,3086, 85,2233,2234,3835,1585,3010,2147, # 3872 -1387,1705,2382,1619,2475, 133, 239,2802,1991,1016,2084,2383, 411,2838,1113, 651, # 3888 -1985,1160,3328, 990,1863,3087,1048,1276,2647, 265,2627,1599,3253,2056, 150, 638, # 3904 -2019, 656, 853, 326,1479, 680,1439,4354,1001,1759, 413,3459,3395,2492,1431, 459, # 3920 -4355,1125,3329,2265,1953,1450,2065,2863, 849, 351,2678,3131,3254,3255,1104,1577, # 3936 - 227,1351,1645,2453,2193,1421,2887, 812,2121, 634, 95,2435, 201,2312,4665,1646, # 3952 -1671,2743,1601,2554,2702,2648,2280,1315,1366,2089,3132,1573,3718,3965,1729,1189, # 3968 - 328,2679,1077,1940,1136, 558,1283, 964,1195, 621,2074,1199,1743,3460,3619,1896, # 3984 -1916,1890,3836,2952,1154,2112,1064, 862, 378,3011,2066,2113,2803,1568,2839,6178, # 4000 -3088,2919,1941,1660,2004,1992,2194, 142, 707,1590,1708,1624,1922,1023,1836,1233, # 4016 -1004,2313, 789, 741,3620,6179,1609,2411,1200,4127,3719,3720,4666,2057,3721, 593, # 4032 -2840, 367,2920,1878,6180,3461,1521, 628,1168, 692,2211,2649, 300, 720,2067,2571, # 4048 -2953,3396, 959,2504,3966,3539,3462,1977, 701,6181, 954,1043, 800, 681, 183,3722, # 4064 -1803,1730,3540,4128,2103, 815,2314, 174, 467, 230,2454,1093,2134, 755,3541,3397, # 4080 -1141,1162,6182,1738,2039, 270,3256,2513,1005,1647,2185,3837, 858,1679,1897,1719, # 4096 -2954,2324,1806, 402, 670, 167,4129,1498,2158,2104, 750,6183, 915, 189,1680,1551, # 4112 - 455,4356,1501,2455, 405,1095,2955, 338,1586,1266,1819, 570, 641,1324, 237,1556, # 4128 -2650,1388,3723,6184,1368,2384,1343,1978,3089,2436, 879,3724, 792,1191, 758,3012, # 4144 -1411,2135,1322,4357, 240,4667,1848,3725,1574,6185, 420,3045,1546,1391, 714,4358, # 4160 -1967, 941,1864, 863, 664, 426, 560,1731,2680,1785,2864,1949,2363, 403,3330,1415, # 4176 -1279,2136,1697,2335, 204, 721,2097,3838, 90,6186,2085,2505, 191,3967, 124,2148, # 4192 -1376,1798,1178,1107,1898,1405, 860,4359,1243,1272,2375,2983,1558,2456,1638, 113, # 4208 -3621, 578,1923,2609, 880, 386,4130, 784,2186,2266,1422,2956,2172,1722, 497, 263, # 4224 -2514,1267,2412,2610, 177,2703,3542, 774,1927,1344, 616,1432,1595,1018, 172,4360, # 4240 -2325, 911,4361, 438,1468,3622, 794,3968,2024,2173,1681,1829,2957, 945, 895,3090, # 4256 - 575,2212,2476, 475,2401,2681, 785,2744,1745,2293,2555,1975,3133,2865, 394,4668, # 4272 -3839, 635,4131, 639, 202,1507,2195,2766,1345,1435,2572,3726,1908,1184,1181,2457, # 4288 -3727,3134,4362, 843,2611, 437, 916,4669, 234, 769,1884,3046,3047,3623, 833,6187, # 4304 -1639,2250,2402,1355,1185,2010,2047, 999, 525,1732,1290,1488,2612, 948,1578,3728, # 4320 -2413,2477,1216,2725,2159, 334,3840,1328,3624,2921,1525,4132, 564,1056, 891,4363, # 4336 -1444,1698,2385,2251,3729,1365,2281,2235,1717,6188, 864,3841,2515, 444, 527,2767, # 4352 -2922,3625, 544, 461,6189, 566, 209,2437,3398,2098,1065,2068,3331,3626,3257,2137, # 4368 #last 512 -#Everything below is of no interest for detection purpose -2138,2122,3730,2888,1995,1820,1044,6190,6191,6192,6193,6194,6195,6196,6197,6198, # 4384 -6199,6200,6201,6202,6203,6204,6205,4670,6206,6207,6208,6209,6210,6211,6212,6213, # 4400 -6214,6215,6216,6217,6218,6219,6220,6221,6222,6223,6224,6225,6226,6227,6228,6229, # 4416 -6230,6231,6232,6233,6234,6235,6236,6237,3187,6238,6239,3969,6240,6241,6242,6243, # 4432 -6244,4671,6245,6246,4672,6247,6248,4133,6249,6250,4364,6251,2923,2556,2613,4673, # 4448 -4365,3970,6252,6253,6254,6255,4674,6256,6257,6258,2768,2353,4366,4675,4676,3188, # 4464 -4367,3463,6259,4134,4677,4678,6260,2267,6261,3842,3332,4368,3543,6262,6263,6264, # 4480 -3013,1954,1928,4135,4679,6265,6266,2478,3091,6267,4680,4369,6268,6269,1699,6270, # 4496 -3544,4136,4681,6271,4137,6272,4370,2804,6273,6274,2593,3971,3972,4682,6275,2236, # 4512 -4683,6276,6277,4684,6278,6279,4138,3973,4685,6280,6281,3258,6282,6283,6284,6285, # 4528 -3974,4686,2841,3975,6286,6287,3545,6288,6289,4139,4687,4140,6290,4141,6291,4142, # 4544 -6292,6293,3333,6294,6295,6296,4371,6297,3399,6298,6299,4372,3976,6300,6301,6302, # 4560 -4373,6303,6304,3843,3731,6305,4688,4374,6306,6307,3259,2294,6308,3732,2530,4143, # 4576 -6309,4689,6310,6311,6312,3048,6313,6314,4690,3733,2237,6315,6316,2282,3334,6317, # 4592 -6318,3844,6319,6320,4691,6321,3400,4692,6322,4693,6323,3049,6324,4375,6325,3977, # 4608 -6326,6327,6328,3546,6329,4694,3335,6330,4695,4696,6331,6332,6333,6334,4376,3978, # 4624 -6335,4697,3979,4144,6336,3980,4698,6337,6338,6339,6340,6341,4699,4700,4701,6342, # 4640 -6343,4702,6344,6345,4703,6346,6347,4704,6348,4705,4706,3135,6349,4707,6350,4708, # 4656 -6351,4377,6352,4709,3734,4145,6353,2506,4710,3189,6354,3050,4711,3981,6355,3547, # 4672 -3014,4146,4378,3735,2651,3845,3260,3136,2224,1986,6356,3401,6357,4712,2594,3627, # 4688 -3137,2573,3736,3982,4713,3628,4714,4715,2682,3629,4716,6358,3630,4379,3631,6359, # 4704 -6360,6361,3983,6362,6363,6364,6365,4147,3846,4717,6366,6367,3737,2842,6368,4718, # 4720 -2628,6369,3261,6370,2386,6371,6372,3738,3984,4719,3464,4720,3402,6373,2924,3336, # 4736 -4148,2866,6374,2805,3262,4380,2704,2069,2531,3138,2806,2984,6375,2769,6376,4721, # 4752 -4722,3403,6377,6378,3548,6379,6380,2705,3092,1979,4149,2629,3337,2889,6381,3338, # 4768 -4150,2557,3339,4381,6382,3190,3263,3739,6383,4151,4723,4152,2558,2574,3404,3191, # 4784 -6384,6385,4153,6386,4724,4382,6387,6388,4383,6389,6390,4154,6391,4725,3985,6392, # 4800 -3847,4155,6393,6394,6395,6396,6397,3465,6398,4384,6399,6400,6401,6402,6403,6404, # 4816 -4156,6405,6406,6407,6408,2123,6409,6410,2326,3192,4726,6411,6412,6413,6414,4385, # 4832 -4157,6415,6416,4158,6417,3093,3848,6418,3986,6419,6420,3849,6421,6422,6423,4159, # 4848 -6424,6425,4160,6426,3740,6427,6428,6429,6430,3987,6431,4727,6432,2238,6433,6434, # 4864 -4386,3988,6435,6436,3632,6437,6438,2843,6439,6440,6441,6442,3633,6443,2958,6444, # 4880 -6445,3466,6446,2364,4387,3850,6447,4388,2959,3340,6448,3851,6449,4728,6450,6451, # 4896 -3264,4729,6452,3193,6453,4389,4390,2706,3341,4730,6454,3139,6455,3194,6456,3051, # 4912 -2124,3852,1602,4391,4161,3853,1158,3854,4162,3989,4392,3990,4731,4732,4393,2040, # 4928 -4163,4394,3265,6457,2807,3467,3855,6458,6459,6460,3991,3468,4733,4734,6461,3140, # 4944 -2960,6462,4735,6463,6464,6465,6466,4736,4737,4738,4739,6467,6468,4164,2403,3856, # 4960 -6469,6470,2770,2844,6471,4740,6472,6473,6474,6475,6476,6477,6478,3195,6479,4741, # 4976 -4395,6480,2867,6481,4742,2808,6482,2493,4165,6483,6484,6485,6486,2295,4743,6487, # 4992 -6488,6489,3634,6490,6491,6492,6493,6494,6495,6496,2985,4744,6497,6498,4745,6499, # 5008 -6500,2925,3141,4166,6501,6502,4746,6503,6504,4747,6505,6506,6507,2890,6508,6509, # 5024 -6510,6511,6512,6513,6514,6515,6516,6517,6518,6519,3469,4167,6520,6521,6522,4748, # 5040 -4396,3741,4397,4749,4398,3342,2125,4750,6523,4751,4752,4753,3052,6524,2961,4168, # 5056 -6525,4754,6526,4755,4399,2926,4169,6527,3857,6528,4400,4170,6529,4171,6530,6531, # 5072 -2595,6532,6533,6534,6535,3635,6536,6537,6538,6539,6540,6541,6542,4756,6543,6544, # 5088 -6545,6546,6547,6548,4401,6549,6550,6551,6552,4402,3405,4757,4403,6553,6554,6555, # 5104 -4172,3742,6556,6557,6558,3992,3636,6559,6560,3053,2726,6561,3549,4173,3054,4404, # 5120 -6562,6563,3993,4405,3266,3550,2809,4406,6564,6565,6566,4758,4759,6567,3743,6568, # 5136 -4760,3744,4761,3470,6569,6570,6571,4407,6572,3745,4174,6573,4175,2810,4176,3196, # 5152 -4762,6574,4177,6575,6576,2494,2891,3551,6577,6578,3471,6579,4408,6580,3015,3197, # 5168 -6581,3343,2532,3994,3858,6582,3094,3406,4409,6583,2892,4178,4763,4410,3016,4411, # 5184 -6584,3995,3142,3017,2683,6585,4179,6586,6587,4764,4412,6588,6589,4413,6590,2986, # 5200 -6591,2962,3552,6592,2963,3472,6593,6594,4180,4765,6595,6596,2225,3267,4414,6597, # 5216 -3407,3637,4766,6598,6599,3198,6600,4415,6601,3859,3199,6602,3473,4767,2811,4416, # 5232 -1856,3268,3200,2575,3996,3997,3201,4417,6603,3095,2927,6604,3143,6605,2268,6606, # 5248 -3998,3860,3096,2771,6607,6608,3638,2495,4768,6609,3861,6610,3269,2745,4769,4181, # 5264 -3553,6611,2845,3270,6612,6613,6614,3862,6615,6616,4770,4771,6617,3474,3999,4418, # 5280 -4419,6618,3639,3344,6619,4772,4182,6620,2126,6621,6622,6623,4420,4773,6624,3018, # 5296 -6625,4774,3554,6626,4183,2025,3746,6627,4184,2707,6628,4421,4422,3097,1775,4185, # 5312 -3555,6629,6630,2868,6631,6632,4423,6633,6634,4424,2414,2533,2928,6635,4186,2387, # 5328 -6636,4775,6637,4187,6638,1891,4425,3202,3203,6639,6640,4776,6641,3345,6642,6643, # 5344 -3640,6644,3475,3346,3641,4000,6645,3144,6646,3098,2812,4188,3642,3204,6647,3863, # 5360 -3476,6648,3864,6649,4426,4001,6650,6651,6652,2576,6653,4189,4777,6654,6655,6656, # 5376 -2846,6657,3477,3205,4002,6658,4003,6659,3347,2252,6660,6661,6662,4778,6663,6664, # 5392 -6665,6666,6667,6668,6669,4779,4780,2048,6670,3478,3099,6671,3556,3747,4004,6672, # 5408 -6673,6674,3145,4005,3748,6675,6676,6677,6678,6679,3408,6680,6681,6682,6683,3206, # 5424 -3207,6684,6685,4781,4427,6686,4782,4783,4784,6687,6688,6689,4190,6690,6691,3479, # 5440 -6692,2746,6693,4428,6694,6695,6696,6697,6698,6699,4785,6700,6701,3208,2727,6702, # 5456 -3146,6703,6704,3409,2196,6705,4429,6706,6707,6708,2534,1996,6709,6710,6711,2747, # 5472 -6712,6713,6714,4786,3643,6715,4430,4431,6716,3557,6717,4432,4433,6718,6719,6720, # 5488 -6721,3749,6722,4006,4787,6723,6724,3644,4788,4434,6725,6726,4789,2772,6727,6728, # 5504 -6729,6730,6731,2708,3865,2813,4435,6732,6733,4790,4791,3480,6734,6735,6736,6737, # 5520 -4436,3348,6738,3410,4007,6739,6740,4008,6741,6742,4792,3411,4191,6743,6744,6745, # 5536 -6746,6747,3866,6748,3750,6749,6750,6751,6752,6753,6754,6755,3867,6756,4009,6757, # 5552 -4793,4794,6758,2814,2987,6759,6760,6761,4437,6762,6763,6764,6765,3645,6766,6767, # 5568 -3481,4192,6768,3751,6769,6770,2174,6771,3868,3752,6772,6773,6774,4193,4795,4438, # 5584 -3558,4796,4439,6775,4797,6776,6777,4798,6778,4799,3559,4800,6779,6780,6781,3482, # 5600 -6782,2893,6783,6784,4194,4801,4010,6785,6786,4440,6787,4011,6788,6789,6790,6791, # 5616 -6792,6793,4802,6794,6795,6796,4012,6797,6798,6799,6800,3349,4803,3483,6801,4804, # 5632 -4195,6802,4013,6803,6804,4196,6805,4014,4015,6806,2847,3271,2848,6807,3484,6808, # 5648 -6809,6810,4441,6811,4442,4197,4443,3272,4805,6812,3412,4016,1579,6813,6814,4017, # 5664 -6815,3869,6816,2964,6817,4806,6818,6819,4018,3646,6820,6821,4807,4019,4020,6822, # 5680 -6823,3560,6824,6825,4021,4444,6826,4198,6827,6828,4445,6829,6830,4199,4808,6831, # 5696 -6832,6833,3870,3019,2458,6834,3753,3413,3350,6835,4809,3871,4810,3561,4446,6836, # 5712 -6837,4447,4811,4812,6838,2459,4448,6839,4449,6840,6841,4022,3872,6842,4813,4814, # 5728 -6843,6844,4815,4200,4201,4202,6845,4023,6846,6847,4450,3562,3873,6848,6849,4816, # 5744 -4817,6850,4451,4818,2139,6851,3563,6852,6853,3351,6854,6855,3352,4024,2709,3414, # 5760 -4203,4452,6856,4204,6857,6858,3874,3875,6859,6860,4819,6861,6862,6863,6864,4453, # 5776 -3647,6865,6866,4820,6867,6868,6869,6870,4454,6871,2869,6872,6873,4821,6874,3754, # 5792 -6875,4822,4205,6876,6877,6878,3648,4206,4455,6879,4823,6880,4824,3876,6881,3055, # 5808 -4207,6882,3415,6883,6884,6885,4208,4209,6886,4210,3353,6887,3354,3564,3209,3485, # 5824 -2652,6888,2728,6889,3210,3755,6890,4025,4456,6891,4825,6892,6893,6894,6895,4211, # 5840 -6896,6897,6898,4826,6899,6900,4212,6901,4827,6902,2773,3565,6903,4828,6904,6905, # 5856 -6906,6907,3649,3650,6908,2849,3566,6909,3567,3100,6910,6911,6912,6913,6914,6915, # 5872 -4026,6916,3355,4829,3056,4457,3756,6917,3651,6918,4213,3652,2870,6919,4458,6920, # 5888 -2438,6921,6922,3757,2774,4830,6923,3356,4831,4832,6924,4833,4459,3653,2507,6925, # 5904 -4834,2535,6926,6927,3273,4027,3147,6928,3568,6929,6930,6931,4460,6932,3877,4461, # 5920 -2729,3654,6933,6934,6935,6936,2175,4835,2630,4214,4028,4462,4836,4215,6937,3148, # 5936 -4216,4463,4837,4838,4217,6938,6939,2850,4839,6940,4464,6941,6942,6943,4840,6944, # 5952 -4218,3274,4465,6945,6946,2710,6947,4841,4466,6948,6949,2894,6950,6951,4842,6952, # 5968 -4219,3057,2871,6953,6954,6955,6956,4467,6957,2711,6958,6959,6960,3275,3101,4843, # 5984 -6961,3357,3569,6962,4844,6963,6964,4468,4845,3570,6965,3102,4846,3758,6966,4847, # 6000 -3878,4848,4849,4029,6967,2929,3879,4850,4851,6968,6969,1733,6970,4220,6971,6972, # 6016 -6973,6974,6975,6976,4852,6977,6978,6979,6980,6981,6982,3759,6983,6984,6985,3486, # 6032 -3487,6986,3488,3416,6987,6988,6989,6990,6991,6992,6993,6994,6995,6996,6997,4853, # 6048 -6998,6999,4030,7000,7001,3211,7002,7003,4221,7004,7005,3571,4031,7006,3572,7007, # 6064 -2614,4854,2577,7008,7009,2965,3655,3656,4855,2775,3489,3880,4222,4856,3881,4032, # 6080 -3882,3657,2730,3490,4857,7010,3149,7011,4469,4858,2496,3491,4859,2283,7012,7013, # 6096 -7014,2365,4860,4470,7015,7016,3760,7017,7018,4223,1917,7019,7020,7021,4471,7022, # 6112 -2776,4472,7023,7024,7025,7026,4033,7027,3573,4224,4861,4034,4862,7028,7029,1929, # 6128 -3883,4035,7030,4473,3058,7031,2536,3761,3884,7032,4036,7033,2966,2895,1968,4474, # 6144 -3276,4225,3417,3492,4226,2105,7034,7035,1754,2596,3762,4227,4863,4475,3763,4864, # 6160 -3764,2615,2777,3103,3765,3658,3418,4865,2296,3766,2815,7036,7037,7038,3574,2872, # 6176 -3277,4476,7039,4037,4477,7040,7041,4038,7042,7043,7044,7045,7046,7047,2537,7048, # 6192 -7049,7050,7051,7052,7053,7054,4478,7055,7056,3767,3659,4228,3575,7057,7058,4229, # 6208 -7059,7060,7061,3660,7062,3212,7063,3885,4039,2460,7064,7065,7066,7067,7068,7069, # 6224 -7070,7071,7072,7073,7074,4866,3768,4867,7075,7076,7077,7078,4868,3358,3278,2653, # 6240 -7079,7080,4479,3886,7081,7082,4869,7083,7084,7085,7086,7087,7088,2538,7089,7090, # 6256 -7091,4040,3150,3769,4870,4041,2896,3359,4230,2930,7092,3279,7093,2967,4480,3213, # 6272 -4481,3661,7094,7095,7096,7097,7098,7099,7100,7101,7102,2461,3770,7103,7104,4231, # 6288 -3151,7105,7106,7107,4042,3662,7108,7109,4871,3663,4872,4043,3059,7110,7111,7112, # 6304 -3493,2988,7113,4873,7114,7115,7116,3771,4874,7117,7118,4232,4875,7119,3576,2336, # 6320 -4876,7120,4233,3419,4044,4877,4878,4482,4483,4879,4484,4234,7121,3772,4880,1045, # 6336 -3280,3664,4881,4882,7122,7123,7124,7125,4883,7126,2778,7127,4485,4486,7128,4884, # 6352 -3214,3887,7129,7130,3215,7131,4885,4045,7132,7133,4046,7134,7135,7136,7137,7138, # 6368 -7139,7140,7141,7142,7143,4235,7144,4886,7145,7146,7147,4887,7148,7149,7150,4487, # 6384 -4047,4488,7151,7152,4888,4048,2989,3888,7153,3665,7154,4049,7155,7156,7157,7158, # 6400 -7159,7160,2931,4889,4890,4489,7161,2631,3889,4236,2779,7162,7163,4891,7164,3060, # 6416 -7165,1672,4892,7166,4893,4237,3281,4894,7167,7168,3666,7169,3494,7170,7171,4050, # 6432 -7172,7173,3104,3360,3420,4490,4051,2684,4052,7174,4053,7175,7176,7177,2253,4054, # 6448 -7178,7179,4895,7180,3152,3890,3153,4491,3216,7181,7182,7183,2968,4238,4492,4055, # 6464 -7184,2990,7185,2479,7186,7187,4493,7188,7189,7190,7191,7192,4896,7193,4897,2969, # 6480 -4494,4898,7194,3495,7195,7196,4899,4495,7197,3105,2731,7198,4900,7199,7200,7201, # 6496 -4056,7202,3361,7203,7204,4496,4901,4902,7205,4497,7206,7207,2315,4903,7208,4904, # 6512 -7209,4905,2851,7210,7211,3577,7212,3578,4906,7213,4057,3667,4907,7214,4058,2354, # 6528 -3891,2376,3217,3773,7215,7216,7217,7218,7219,4498,7220,4908,3282,2685,7221,3496, # 6544 -4909,2632,3154,4910,7222,2337,7223,4911,7224,7225,7226,4912,4913,3283,4239,4499, # 6560 -7227,2816,7228,7229,7230,7231,7232,7233,7234,4914,4500,4501,7235,7236,7237,2686, # 6576 -7238,4915,7239,2897,4502,7240,4503,7241,2516,7242,4504,3362,3218,7243,7244,7245, # 6592 -4916,7246,7247,4505,3363,7248,7249,7250,7251,3774,4506,7252,7253,4917,7254,7255, # 6608 -3284,2991,4918,4919,3219,3892,4920,3106,3497,4921,7256,7257,7258,4922,7259,4923, # 6624 -3364,4507,4508,4059,7260,4240,3498,7261,7262,4924,7263,2992,3893,4060,3220,7264, # 6640 -7265,7266,7267,7268,7269,4509,3775,7270,2817,7271,4061,4925,4510,3776,7272,4241, # 6656 -4511,3285,7273,7274,3499,7275,7276,7277,4062,4512,4926,7278,3107,3894,7279,7280, # 6672 -4927,7281,4513,7282,7283,3668,7284,7285,4242,4514,4243,7286,2058,4515,4928,4929, # 6688 -4516,7287,3286,4244,7288,4517,7289,7290,7291,3669,7292,7293,4930,4931,4932,2355, # 6704 -4933,7294,2633,4518,7295,4245,7296,7297,4519,7298,7299,4520,4521,4934,7300,4246, # 6720 -4522,7301,7302,7303,3579,7304,4247,4935,7305,4936,7306,7307,7308,7309,3777,7310, # 6736 -4523,7311,7312,7313,4248,3580,7314,4524,3778,4249,7315,3581,7316,3287,7317,3221, # 6752 -7318,4937,7319,7320,7321,7322,7323,7324,4938,4939,7325,4525,7326,7327,7328,4063, # 6768 -7329,7330,4940,7331,7332,4941,7333,4526,7334,3500,2780,1741,4942,2026,1742,7335, # 6784 -7336,3582,4527,2388,7337,7338,7339,4528,7340,4250,4943,7341,7342,7343,4944,7344, # 6800 -7345,7346,3020,7347,4945,7348,7349,7350,7351,3895,7352,3896,4064,3897,7353,7354, # 6816 -7355,4251,7356,7357,3898,7358,3779,7359,3780,3288,7360,7361,4529,7362,4946,4530, # 6832 -2027,7363,3899,4531,4947,3222,3583,7364,4948,7365,7366,7367,7368,4949,3501,4950, # 6848 -3781,4951,4532,7369,2517,4952,4252,4953,3155,7370,4954,4955,4253,2518,4533,7371, # 6864 -7372,2712,4254,7373,7374,7375,3670,4956,3671,7376,2389,3502,4065,7377,2338,7378, # 6880 -7379,7380,7381,3061,7382,4957,7383,7384,7385,7386,4958,4534,7387,7388,2993,7389, # 6896 -3062,7390,4959,7391,7392,7393,4960,3108,4961,7394,4535,7395,4962,3421,4536,7396, # 6912 -4963,7397,4964,1857,7398,4965,7399,7400,2176,3584,4966,7401,7402,3422,4537,3900, # 6928 -3585,7403,3782,7404,2852,7405,7406,7407,4538,3783,2654,3423,4967,4539,7408,3784, # 6944 -3586,2853,4540,4541,7409,3901,7410,3902,7411,7412,3785,3109,2327,3903,7413,7414, # 6960 -2970,4066,2932,7415,7416,7417,3904,3672,3424,7418,4542,4543,4544,7419,4968,7420, # 6976 -7421,4255,7422,7423,7424,7425,7426,4067,7427,3673,3365,4545,7428,3110,2559,3674, # 6992 -7429,7430,3156,7431,7432,3503,7433,3425,4546,7434,3063,2873,7435,3223,4969,4547, # 7008 -4548,2898,4256,4068,7436,4069,3587,3786,2933,3787,4257,4970,4971,3788,7437,4972, # 7024 -3064,7438,4549,7439,7440,7441,7442,7443,4973,3905,7444,2874,7445,7446,7447,7448, # 7040 -3021,7449,4550,3906,3588,4974,7450,7451,3789,3675,7452,2578,7453,4070,7454,7455, # 7056 -7456,4258,3676,7457,4975,7458,4976,4259,3790,3504,2634,4977,3677,4551,4260,7459, # 7072 -7460,7461,7462,3907,4261,4978,7463,7464,7465,7466,4979,4980,7467,7468,2213,4262, # 7088 -7469,7470,7471,3678,4981,7472,2439,7473,4263,3224,3289,7474,3908,2415,4982,7475, # 7104 -4264,7476,4983,2655,7477,7478,2732,4552,2854,2875,7479,7480,4265,7481,4553,4984, # 7120 -7482,7483,4266,7484,3679,3366,3680,2818,2781,2782,3367,3589,4554,3065,7485,4071, # 7136 -2899,7486,7487,3157,2462,4072,4555,4073,4985,4986,3111,4267,2687,3368,4556,4074, # 7152 -3791,4268,7488,3909,2783,7489,2656,1962,3158,4557,4987,1963,3159,3160,7490,3112, # 7168 -4988,4989,3022,4990,4991,3792,2855,7491,7492,2971,4558,7493,7494,4992,7495,7496, # 7184 -7497,7498,4993,7499,3426,4559,4994,7500,3681,4560,4269,4270,3910,7501,4075,4995, # 7200 -4271,7502,7503,4076,7504,4996,7505,3225,4997,4272,4077,2819,3023,7506,7507,2733, # 7216 -4561,7508,4562,7509,3369,3793,7510,3590,2508,7511,7512,4273,3113,2994,2616,7513, # 7232 -7514,7515,7516,7517,7518,2820,3911,4078,2748,7519,7520,4563,4998,7521,7522,7523, # 7248 -7524,4999,4274,7525,4564,3682,2239,4079,4565,7526,7527,7528,7529,5000,7530,7531, # 7264 -5001,4275,3794,7532,7533,7534,3066,5002,4566,3161,7535,7536,4080,7537,3162,7538, # 7280 -7539,4567,7540,7541,7542,7543,7544,7545,5003,7546,4568,7547,7548,7549,7550,7551, # 7296 -7552,7553,7554,7555,7556,5004,7557,7558,7559,5005,7560,3795,7561,4569,7562,7563, # 7312 -7564,2821,3796,4276,4277,4081,7565,2876,7566,5006,7567,7568,2900,7569,3797,3912, # 7328 -7570,7571,7572,4278,7573,7574,7575,5007,7576,7577,5008,7578,7579,4279,2934,7580, # 7344 -7581,5009,7582,4570,7583,4280,7584,7585,7586,4571,4572,3913,7587,4573,3505,7588, # 7360 -5010,7589,7590,7591,7592,3798,4574,7593,7594,5011,7595,4281,7596,7597,7598,4282, # 7376 -5012,7599,7600,5013,3163,7601,5014,7602,3914,7603,7604,2734,4575,4576,4577,7605, # 7392 -7606,7607,7608,7609,3506,5015,4578,7610,4082,7611,2822,2901,2579,3683,3024,4579, # 7408 -3507,7612,4580,7613,3226,3799,5016,7614,7615,7616,7617,7618,7619,7620,2995,3290, # 7424 -7621,4083,7622,5017,7623,7624,7625,7626,7627,4581,3915,7628,3291,7629,5018,7630, # 7440 -7631,7632,7633,4084,7634,7635,3427,3800,7636,7637,4582,7638,5019,4583,5020,7639, # 7456 -3916,7640,3801,5021,4584,4283,7641,7642,3428,3591,2269,7643,2617,7644,4585,3592, # 7472 -7645,4586,2902,7646,7647,3227,5022,7648,4587,7649,4284,7650,7651,7652,4588,2284, # 7488 -7653,5023,7654,7655,7656,4589,5024,3802,7657,7658,5025,3508,4590,7659,7660,7661, # 7504 -1969,5026,7662,7663,3684,1821,2688,7664,2028,2509,4285,7665,2823,1841,7666,2689, # 7520 -3114,7667,3917,4085,2160,5027,5028,2972,7668,5029,7669,7670,7671,3593,4086,7672, # 7536 -4591,4087,5030,3803,7673,7674,7675,7676,7677,7678,7679,4286,2366,4592,4593,3067, # 7552 -2328,7680,7681,4594,3594,3918,2029,4287,7682,5031,3919,3370,4288,4595,2856,7683, # 7568 -3509,7684,7685,5032,5033,7686,7687,3804,2784,7688,7689,7690,7691,3371,7692,7693, # 7584 -2877,5034,7694,7695,3920,4289,4088,7696,7697,7698,5035,7699,5036,4290,5037,5038, # 7600 -5039,7700,7701,7702,5040,5041,3228,7703,1760,7704,5042,3229,4596,2106,4089,7705, # 7616 -4597,2824,5043,2107,3372,7706,4291,4090,5044,7707,4091,7708,5045,3025,3805,4598, # 7632 -4292,4293,4294,3373,7709,4599,7710,5046,7711,7712,5047,5048,3806,7713,7714,7715, # 7648 -5049,7716,7717,7718,7719,4600,5050,7720,7721,7722,5051,7723,4295,3429,7724,7725, # 7664 -7726,7727,3921,7728,3292,5052,4092,7729,7730,7731,7732,7733,7734,7735,5053,5054, # 7680 -7736,7737,7738,7739,3922,3685,7740,7741,7742,7743,2635,5055,7744,5056,4601,7745, # 7696 -7746,2560,7747,7748,7749,7750,3923,7751,7752,7753,7754,7755,4296,2903,7756,7757, # 7712 -7758,7759,7760,3924,7761,5057,4297,7762,7763,5058,4298,7764,4093,7765,7766,5059, # 7728 -3925,7767,7768,7769,7770,7771,7772,7773,7774,7775,7776,3595,7777,4299,5060,4094, # 7744 -7778,3293,5061,7779,7780,4300,7781,7782,4602,7783,3596,7784,7785,3430,2367,7786, # 7760 -3164,5062,5063,4301,7787,7788,4095,5064,5065,7789,3374,3115,7790,7791,7792,7793, # 7776 -7794,7795,7796,3597,4603,7797,7798,3686,3116,3807,5066,7799,7800,5067,7801,7802, # 7792 -4604,4302,5068,4303,4096,7803,7804,3294,7805,7806,5069,4605,2690,7807,3026,7808, # 7808 -7809,7810,7811,7812,7813,7814,7815,7816,7817,7818,7819,7820,7821,7822,7823,7824, # 7824 -7825,7826,7827,7828,7829,7830,7831,7832,7833,7834,7835,7836,7837,7838,7839,7840, # 7840 -7841,7842,7843,7844,7845,7846,7847,7848,7849,7850,7851,7852,7853,7854,7855,7856, # 7856 -7857,7858,7859,7860,7861,7862,7863,7864,7865,7866,7867,7868,7869,7870,7871,7872, # 7872 -7873,7874,7875,7876,7877,7878,7879,7880,7881,7882,7883,7884,7885,7886,7887,7888, # 7888 -7889,7890,7891,7892,7893,7894,7895,7896,7897,7898,7899,7900,7901,7902,7903,7904, # 7904 -7905,7906,7907,7908,7909,7910,7911,7912,7913,7914,7915,7916,7917,7918,7919,7920, # 7920 -7921,7922,7923,7924,3926,7925,7926,7927,7928,7929,7930,7931,7932,7933,7934,7935, # 7936 -7936,7937,7938,7939,7940,7941,7942,7943,7944,7945,7946,7947,7948,7949,7950,7951, # 7952 -7952,7953,7954,7955,7956,7957,7958,7959,7960,7961,7962,7963,7964,7965,7966,7967, # 7968 -7968,7969,7970,7971,7972,7973,7974,7975,7976,7977,7978,7979,7980,7981,7982,7983, # 7984 -7984,7985,7986,7987,7988,7989,7990,7991,7992,7993,7994,7995,7996,7997,7998,7999, # 8000 -8000,8001,8002,8003,8004,8005,8006,8007,8008,8009,8010,8011,8012,8013,8014,8015, # 8016 -8016,8017,8018,8019,8020,8021,8022,8023,8024,8025,8026,8027,8028,8029,8030,8031, # 8032 -8032,8033,8034,8035,8036,8037,8038,8039,8040,8041,8042,8043,8044,8045,8046,8047, # 8048 -8048,8049,8050,8051,8052,8053,8054,8055,8056,8057,8058,8059,8060,8061,8062,8063, # 8064 -8064,8065,8066,8067,8068,8069,8070,8071,8072,8073,8074,8075,8076,8077,8078,8079, # 8080 -8080,8081,8082,8083,8084,8085,8086,8087,8088,8089,8090,8091,8092,8093,8094,8095, # 8096 -8096,8097,8098,8099,8100,8101,8102,8103,8104,8105,8106,8107,8108,8109,8110,8111, # 8112 -8112,8113,8114,8115,8116,8117,8118,8119,8120,8121,8122,8123,8124,8125,8126,8127, # 8128 -8128,8129,8130,8131,8132,8133,8134,8135,8136,8137,8138,8139,8140,8141,8142,8143, # 8144 -8144,8145,8146,8147,8148,8149,8150,8151,8152,8153,8154,8155,8156,8157,8158,8159, # 8160 -8160,8161,8162,8163,8164,8165,8166,8167,8168,8169,8170,8171,8172,8173,8174,8175, # 8176 -8176,8177,8178,8179,8180,8181,8182,8183,8184,8185,8186,8187,8188,8189,8190,8191, # 8192 -8192,8193,8194,8195,8196,8197,8198,8199,8200,8201,8202,8203,8204,8205,8206,8207, # 8208 -8208,8209,8210,8211,8212,8213,8214,8215,8216,8217,8218,8219,8220,8221,8222,8223, # 8224 -8224,8225,8226,8227,8228,8229,8230,8231,8232,8233,8234,8235,8236,8237,8238,8239, # 8240 -8240,8241,8242,8243,8244,8245,8246,8247,8248,8249,8250,8251,8252,8253,8254,8255, # 8256 -8256,8257,8258,8259,8260,8261,8262,8263,8264,8265,8266,8267,8268,8269,8270,8271 # 8272 -].freeze -end diff --git a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/jpcntx.rb b/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/jpcntx.rb deleted file mode 100644 index 0db12b03..00000000 --- a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/jpcntx.rb +++ /dev/null @@ -1,229 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Jeff Hodges - port to Ruby -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -module CharDet - NUM_OF_CATEGORY = 6 - DONT_KNOW = -1 - ENOUGH_REL_THRESHOLD = 100 - MAX_REL_THRESHOLD = 1000 - - # This is hiragana 2-char sequence table, the number in each cell represents its frequency category - JP2_CHAR_CONTEXT = [ - [0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1].freeze, - [2,4,0,4,0,3,0,4,0,3,4,4,4,2,4,3,3,4,3,2,3,3,4,2,3,3,3,2,4,1,4,3,3,1,5,4,3,4,3,4,3,5,3,0,3,5,4,2,0,3,1,0,3,3,0,3,3,0,1,1,0,4,3,0,3,3,0,4,0,2,0,3,5,5,5,5,4,0,4,1,0,3,4].freeze, - [0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2].freeze, - [0,4,0,5,0,5,0,4,0,4,5,4,4,3,5,3,5,1,5,3,4,3,4,4,3,4,3,3,4,3,5,4,4,3,5,5,3,5,5,5,3,5,5,3,4,5,5,3,1,3,2,0,3,4,0,4,2,0,4,2,1,5,3,2,3,5,0,4,0,2,0,5,4,4,5,4,5,0,4,0,0,4,4].freeze, - [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0].freeze, - [0,3,0,4,0,3,0,3,0,4,5,4,3,3,3,3,4,3,5,4,4,3,5,4,4,3,4,3,4,4,4,4,5,3,4,4,3,4,5,5,4,5,5,1,4,5,4,3,0,3,3,1,3,3,0,4,4,0,3,3,1,5,3,3,3,5,0,4,0,3,0,4,4,3,4,3,3,0,4,1,1,3,4].freeze, - [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0].freeze, - [0,4,0,3,0,3,0,4,0,3,4,4,3,2,2,1,2,1,3,1,3,3,3,3,3,4,3,1,3,3,5,3,3,0,4,3,0,5,4,3,3,5,4,4,3,4,4,5,0,1,2,0,1,2,0,2,2,0,1,0,0,5,2,2,1,4,0,3,0,1,0,4,4,3,5,4,3,0,2,1,0,4,3].freeze, - [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0].freeze, - [0,3,0,5,0,4,0,2,1,4,4,2,4,1,4,2,4,2,4,3,3,3,4,3,3,3,3,1,4,2,3,3,3,1,4,4,1,1,1,4,3,3,2,0,2,4,3,2,0,3,3,0,3,1,1,0,0,0,3,3,0,4,2,2,3,4,0,4,0,3,0,4,4,5,3,4,4,0,3,0,0,1,4].freeze, - [1,4,0,4,0,4,0,4,0,3,5,4,4,3,4,3,5,4,3,3,4,3,5,4,4,4,4,3,4,2,4,3,3,1,5,4,3,2,4,5,4,5,5,4,4,5,4,4,0,3,2,2,3,3,0,4,3,1,3,2,1,4,3,3,4,5,0,3,0,2,0,4,5,5,4,5,4,0,4,0,0,5,4].freeze, - [0,5,0,5,0,4,0,3,0,4,4,3,4,3,3,3,4,0,4,4,4,3,4,3,4,3,3,1,4,2,4,3,4,0,5,4,1,4,5,4,4,5,3,2,4,3,4,3,2,4,1,3,3,3,2,3,2,0,4,3,3,4,3,3,3,4,0,4,0,3,0,4,5,4,4,4,3,0,4,1,0,1,3].freeze, - [0,3,1,4,0,3,0,2,0,3,4,4,3,1,4,2,3,3,4,3,4,3,4,3,4,4,3,2,3,1,5,4,4,1,4,4,3,5,4,4,3,5,5,4,3,4,4,3,1,2,3,1,2,2,0,3,2,0,3,1,0,5,3,3,3,4,3,3,3,3,4,4,4,4,5,4,2,0,3,3,2,4,3].freeze, - [0,2,0,3,0,1,0,1,0,0,3,2,0,0,2,0,1,0,2,1,3,3,3,1,2,3,1,0,1,0,4,2,1,1,3,3,0,4,3,3,1,4,3,3,0,3,3,2,0,0,0,0,1,0,0,2,0,0,0,0,0,4,1,0,2,3,2,2,2,1,3,3,3,4,4,3,2,0,3,1,0,3,3].freeze, - [0,4,0,4,0,3,0,3,0,4,4,4,3,3,3,3,3,3,4,3,4,2,4,3,4,3,3,2,4,3,4,5,4,1,4,5,3,5,4,5,3,5,4,0,3,5,5,3,1,3,3,2,2,3,0,3,4,1,3,3,2,4,3,3,3,4,0,4,0,3,0,4,5,4,4,5,3,0,4,1,0,3,4].freeze, - [0,2,0,3,0,3,0,0,0,2,2,2,1,0,1,0,0,0,3,0,3,0,3,0,1,3,1,0,3,1,3,3,3,1,3,3,3,0,1,3,1,3,4,0,0,3,1,1,0,3,2,0,0,0,0,1,3,0,1,0,0,3,3,2,0,3,0,0,0,0,0,3,4,3,4,3,3,0,3,0,0,2,3].freeze, - [2,3,0,3,0,2,0,1,0,3,3,4,3,1,3,1,1,1,3,1,4,3,4,3,3,3,0,0,3,1,5,4,3,1,4,3,2,5,5,4,4,4,4,3,3,4,4,4,0,2,1,1,3,2,0,1,2,0,0,1,0,4,1,3,3,3,0,3,0,1,0,4,4,4,5,5,3,0,2,0,0,4,4].freeze, - [0,2,0,1,0,3,1,3,0,2,3,3,3,0,3,1,0,0,3,0,3,2,3,1,3,2,1,1,0,0,4,2,1,0,2,3,1,4,3,2,0,4,4,3,1,3,1,3,0,1,0,0,1,0,0,0,1,0,0,0,0,4,1,1,1,2,0,3,0,0,0,3,4,2,4,3,2,0,1,0,0,3,3].freeze, - [0,1,0,4,0,5,0,4,0,2,4,4,2,3,3,2,3,3,5,3,3,3,4,3,4,2,3,0,4,3,3,3,4,1,4,3,2,1,5,5,3,4,5,1,3,5,4,2,0,3,3,0,1,3,0,4,2,0,1,3,1,4,3,3,3,3,0,3,0,1,0,3,4,4,4,5,5,0,3,0,1,4,5].freeze, - [0,2,0,3,0,3,0,0,0,2,3,1,3,0,4,0,1,1,3,0,3,4,3,2,3,1,0,3,3,2,3,1,3,0,2,3,0,2,1,4,1,2,2,0,0,3,3,0,0,2,0,0,0,1,0,0,0,0,2,2,0,3,2,1,3,3,0,2,0,2,0,0,3,3,1,2,4,0,3,0,2,2,3].freeze, - [2,4,0,5,0,4,0,4,0,2,4,4,4,3,4,3,3,3,1,2,4,3,4,3,4,4,5,0,3,3,3,3,2,0,4,3,1,4,3,4,1,4,4,3,3,4,4,3,1,2,3,0,4,2,0,4,1,0,3,3,0,4,3,3,3,4,0,4,0,2,0,3,5,3,4,5,2,0,3,0,0,4,5].freeze, - [0,3,0,4,0,1,0,1,0,1,3,2,2,1,3,0,3,0,2,0,2,0,3,0,2,0,0,0,1,0,1,1,0,0,3,1,0,0,0,4,0,3,1,0,2,1,3,0,0,0,0,0,0,3,0,0,0,0,0,0,0,4,2,2,3,1,0,3,0,0,0,1,4,4,4,3,0,0,4,0,0,1,4].freeze, - [1,4,1,5,0,3,0,3,0,4,5,4,4,3,5,3,3,4,4,3,4,1,3,3,3,3,2,1,4,1,5,4,3,1,4,4,3,5,4,4,3,5,4,3,3,4,4,4,0,3,3,1,2,3,0,3,1,0,3,3,0,5,4,4,4,4,4,4,3,3,5,4,4,3,3,5,4,0,3,2,0,4,4].freeze, - [0,2,0,3,0,1,0,0,0,1,3,3,3,2,4,1,3,0,3,1,3,0,2,2,1,1,0,0,2,0,4,3,1,0,4,3,0,4,4,4,1,4,3,1,1,3,3,1,0,2,0,0,1,3,0,0,0,0,2,0,0,4,3,2,4,3,5,4,3,3,3,4,3,3,4,3,3,0,2,1,0,3,3].freeze, - [0,2,0,4,0,3,0,2,0,2,5,5,3,4,4,4,4,1,4,3,3,0,4,3,4,3,1,3,3,2,4,3,0,3,4,3,0,3,4,4,2,4,4,0,4,5,3,3,2,2,1,1,1,2,0,1,5,0,3,3,2,4,3,3,3,4,0,3,0,2,0,4,4,3,5,5,0,0,3,0,2,3,3].freeze, - [0,3,0,4,0,3,0,1,0,3,4,3,3,1,3,3,3,0,3,1,3,0,4,3,3,1,1,0,3,0,3,3,0,0,4,4,0,1,5,4,3,3,5,0,3,3,4,3,0,2,0,1,1,1,0,1,3,0,1,2,1,3,3,2,3,3,0,3,0,1,0,1,3,3,4,4,1,0,1,2,2,1,3].freeze, - [0,1,0,4,0,4,0,3,0,1,3,3,3,2,3,1,1,0,3,0,3,3,4,3,2,4,2,0,1,0,4,3,2,0,4,3,0,5,3,3,2,4,4,4,3,3,3,4,0,1,3,0,0,1,0,0,1,0,0,0,0,4,2,3,3,3,0,3,0,0,0,4,4,4,5,3,2,0,3,3,0,3,5].freeze, - [0,2,0,3,0,0,0,3,0,1,3,0,2,0,0,0,1,0,3,1,1,3,3,0,0,3,0,0,3,0,2,3,1,0,3,1,0,3,3,2,0,4,2,2,0,2,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,2,1,2,0,1,0,1,0,0,0,1,3,1,2,0,0,0,1,0,0,1,4].freeze, - [0,3,0,3,0,5,0,1,0,2,4,3,1,3,3,2,1,1,5,2,1,0,5,1,2,0,0,0,3,3,2,2,3,2,4,3,0,0,3,3,1,3,3,0,2,5,3,4,0,3,3,0,1,2,0,2,2,0,3,2,0,2,2,3,3,3,0,2,0,1,0,3,4,4,2,5,4,0,3,0,0,3,5].freeze, - [0,3,0,3,0,3,0,1,0,3,3,3,3,0,3,0,2,0,2,1,1,0,2,0,1,0,0,0,2,1,0,0,1,0,3,2,0,0,3,3,1,2,3,1,0,3,3,0,0,1,0,0,0,0,0,2,0,0,0,0,0,2,3,1,2,3,0,3,0,1,0,3,2,1,0,4,3,0,1,1,0,3,3].freeze, - [0,4,0,5,0,3,0,3,0,4,5,5,4,3,5,3,4,3,5,3,3,2,5,3,4,4,4,3,4,3,4,5,5,3,4,4,3,4,4,5,4,4,4,3,4,5,5,4,2,3,4,2,3,4,0,3,3,1,4,3,2,4,3,3,5,5,0,3,0,3,0,5,5,5,5,4,4,0,4,0,1,4,4].freeze, - [0,4,0,4,0,3,0,3,0,3,5,4,4,2,3,2,5,1,3,2,5,1,4,2,3,2,3,3,4,3,3,3,3,2,5,4,1,3,3,5,3,4,4,0,4,4,3,1,1,3,1,0,2,3,0,2,3,0,3,0,0,4,3,1,3,4,0,3,0,2,0,4,4,4,3,4,5,0,4,0,0,3,4].freeze, - [0,3,0,3,0,3,1,2,0,3,4,4,3,3,3,0,2,2,4,3,3,1,3,3,3,1,1,0,3,1,4,3,2,3,4,4,2,4,4,4,3,4,4,3,2,4,4,3,1,3,3,1,3,3,0,4,1,0,2,2,1,4,3,2,3,3,5,4,3,3,5,4,4,3,3,0,4,0,3,2,2,4,4].freeze, - [0,2,0,1,0,0,0,0,0,1,2,1,3,0,0,0,0,0,2,0,1,2,1,0,0,1,0,0,0,0,3,0,0,1,0,1,1,3,1,0,0,0,1,1,0,1,1,0,0,0,0,0,2,0,0,0,0,0,0,0,0,1,1,2,2,0,3,4,0,0,0,1,1,0,0,1,0,0,0,0,0,1,1].freeze, - [0,1,0,0,0,1,0,0,0,0,4,0,4,1,4,0,3,0,4,0,3,0,4,0,3,0,3,0,4,1,5,1,4,0,0,3,0,5,0,5,2,0,1,0,0,0,2,1,4,0,1,3,0,0,3,0,0,3,1,1,4,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0].freeze, - [1,4,0,5,0,3,0,2,0,3,5,4,4,3,4,3,5,3,4,3,3,0,4,3,3,3,3,3,3,2,4,4,3,1,3,4,4,5,4,4,3,4,4,1,3,5,4,3,3,3,1,2,2,3,3,1,3,1,3,3,3,5,3,3,4,5,0,3,0,3,0,3,4,3,4,4,3,0,3,0,2,4,3].freeze, - [0,1,0,4,0,0,0,0,0,1,4,0,4,1,4,2,4,0,3,0,1,0,1,0,0,0,0,0,2,0,3,1,1,1,0,3,0,0,0,1,2,1,0,0,1,1,1,1,0,1,0,0,0,1,0,0,3,0,0,0,0,3,2,0,2,2,0,1,0,0,0,2,3,2,3,3,0,0,0,0,2,1,0].freeze, - [0,5,1,5,0,3,0,3,0,5,4,4,5,1,5,3,3,0,4,3,4,3,5,3,4,3,3,2,4,3,4,3,3,0,3,3,1,4,4,3,4,4,4,3,4,5,5,3,2,3,1,1,3,3,1,3,1,1,3,3,2,4,5,3,3,5,0,4,0,3,0,4,4,3,5,3,3,0,3,4,0,4,3].freeze, - [0,5,0,5,0,3,0,2,0,4,4,3,5,2,4,3,3,3,4,4,4,3,5,3,5,3,3,1,4,0,4,3,3,0,3,3,0,4,4,4,4,5,4,3,3,5,5,3,2,3,1,2,3,2,0,1,0,0,3,2,2,4,4,3,1,5,0,4,0,3,0,4,3,1,3,2,1,0,3,3,0,3,3].freeze, - [0,4,0,5,0,5,0,4,0,4,5,5,5,3,4,3,3,2,5,4,4,3,5,3,5,3,4,0,4,3,4,4,3,2,4,4,3,4,5,4,4,5,5,0,3,5,5,4,1,3,3,2,3,3,1,3,1,0,4,3,1,4,4,3,4,5,0,4,0,2,0,4,3,4,4,3,3,0,4,0,0,5,5].freeze, - [0,4,0,4,0,5,0,1,1,3,3,4,4,3,4,1,3,0,5,1,3,0,3,1,3,1,1,0,3,0,3,3,4,0,4,3,0,4,4,4,3,4,4,0,3,5,4,1,0,3,0,0,2,3,0,3,1,0,3,1,0,3,2,1,3,5,0,3,0,1,0,3,2,3,3,4,4,0,2,2,0,4,4].freeze, - [2,4,0,5,0,4,0,3,0,4,5,5,4,3,5,3,5,3,5,3,5,2,5,3,4,3,3,4,3,4,5,3,2,1,5,4,3,2,3,4,5,3,4,1,2,5,4,3,0,3,3,0,3,2,0,2,3,0,4,1,0,3,4,3,3,5,0,3,0,1,0,4,5,5,5,4,3,0,4,2,0,3,5].freeze, - [0,5,0,4,0,4,0,2,0,5,4,3,4,3,4,3,3,3,4,3,4,2,5,3,5,3,4,1,4,3,4,4,4,0,3,5,0,4,4,4,4,5,3,1,3,4,5,3,3,3,3,3,3,3,0,2,2,0,3,3,2,4,3,3,3,5,3,4,1,3,3,5,3,2,0,0,0,0,4,3,1,3,3].freeze, - [0,1,0,3,0,3,0,1,0,1,3,3,3,2,3,3,3,0,3,0,0,0,3,1,3,0,0,0,2,2,2,3,0,0,3,2,0,1,2,4,1,3,3,0,0,3,3,3,0,1,0,0,2,1,0,0,3,0,3,1,0,3,0,0,1,3,0,2,0,1,0,3,3,1,3,3,0,0,1,1,0,3,3].freeze, - [0,2,0,3,0,2,1,4,0,2,2,3,1,1,3,1,1,0,2,0,3,1,2,3,1,3,0,0,1,0,4,3,2,3,3,3,1,4,2,3,3,3,3,1,0,3,1,4,0,1,1,0,1,2,0,1,1,0,1,1,0,3,1,3,2,2,0,1,0,0,0,2,3,3,3,1,0,0,0,0,0,2,3].freeze, - [0,5,0,4,0,5,0,2,0,4,5,5,3,3,4,3,3,1,5,4,4,2,4,4,4,3,4,2,4,3,5,5,4,3,3,4,3,3,5,5,4,5,5,1,3,4,5,3,1,4,3,1,3,3,0,3,3,1,4,3,1,4,5,3,3,5,0,4,0,3,0,5,3,3,1,4,3,0,4,0,1,5,3].freeze, - [0,5,0,5,0,4,0,2,0,4,4,3,4,3,3,3,3,3,5,4,4,4,4,4,4,5,3,3,5,2,4,4,4,3,4,4,3,3,4,4,5,5,3,3,4,3,4,3,3,4,3,3,3,3,1,2,2,1,4,3,3,5,4,4,3,4,0,4,0,3,0,4,4,4,4,4,1,0,4,2,0,2,4].freeze, - [0,4,0,4,0,3,0,1,0,3,5,2,3,0,3,0,2,1,4,2,3,3,4,1,4,3,3,2,4,1,3,3,3,0,3,3,0,0,3,3,3,5,3,3,3,3,3,2,0,2,0,0,2,0,0,2,0,0,1,0,0,3,1,2,2,3,0,3,0,2,0,4,4,3,3,4,1,0,3,0,0,2,4].freeze, - [0,0,0,4,0,0,0,0,0,0,1,0,1,0,2,0,0,0,0,0,1,0,2,0,1,0,0,0,0,0,3,1,3,0,3,2,0,0,0,1,0,3,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,4,0,2,0,0,0,0,0,0,2].freeze, - [0,2,1,3,0,2,0,2,0,3,3,3,3,1,3,1,3,3,3,3,3,3,4,2,2,1,2,1,4,0,4,3,1,3,3,3,2,4,3,5,4,3,3,3,3,3,3,3,0,1,3,0,2,0,0,1,0,0,1,0,0,4,2,0,2,3,0,3,3,0,3,3,4,2,3,1,4,0,1,2,0,2,3].freeze, - [0,3,0,3,0,1,0,3,0,2,3,3,3,0,3,1,2,0,3,3,2,3,3,2,3,2,3,1,3,0,4,3,2,0,3,3,1,4,3,3,2,3,4,3,1,3,3,1,1,0,1,1,0,1,0,1,0,1,0,0,0,4,1,1,0,3,0,3,1,0,2,3,3,3,3,3,1,0,0,2,0,3,3].freeze, - [0,0,0,0,0,0,0,0,0,0,3,0,2,0,3,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,3,0,3,0,3,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,2,0,2,3,0,0,0,0,0,0,0,0,3].freeze, - [0,2,0,3,1,3,0,3,0,2,3,3,3,1,3,1,3,1,3,1,3,3,3,1,3,0,2,3,1,1,4,3,3,2,3,3,1,2,2,4,1,3,3,0,1,4,2,3,0,1,3,0,3,0,0,1,3,0,2,0,0,3,3,2,1,3,0,3,0,2,0,3,4,4,4,3,1,0,3,0,0,3,3].freeze, - [0,2,0,1,0,2,0,0,0,1,3,2,2,1,3,0,1,1,3,0,3,2,3,1,2,0,2,0,1,1,3,3,3,0,3,3,1,1,2,3,2,3,3,1,2,3,2,0,0,1,0,0,0,0,0,0,3,0,1,0,0,2,1,2,1,3,0,3,0,0,0,3,4,4,4,3,2,0,2,0,0,2,4].freeze, - [0,0,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,2,2,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,3,1,0,0,0,0,0,0,0,3].freeze, - [0,3,0,3,0,2,0,3,0,3,3,3,2,3,2,2,2,0,3,1,3,3,3,2,3,3,0,0,3,0,3,2,2,0,2,3,1,4,3,4,3,3,2,3,1,5,4,4,0,3,1,2,1,3,0,3,1,1,2,0,2,3,1,3,1,3,0,3,0,1,0,3,3,4,4,2,1,0,2,1,0,2,4].freeze, - [0,1,0,3,0,1,0,2,0,1,4,2,5,1,4,0,2,0,2,1,3,1,4,0,2,1,0,0,2,1,4,1,1,0,3,3,0,5,1,3,2,3,3,1,0,3,2,3,0,1,0,0,0,0,0,0,1,0,0,0,0,4,0,1,0,3,0,2,0,1,0,3,3,3,4,3,3,0,0,0,0,2,3].freeze, - [0,0,0,1,0,0,0,0,0,0,2,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,1,0,0,1,0,0,0,0,0,3].freeze, - [0,1,0,3,0,4,0,3,0,2,4,3,1,0,3,2,2,1,3,1,2,2,3,1,1,1,2,1,3,0,1,2,0,1,3,2,1,3,0,5,5,1,0,0,1,3,2,1,0,3,0,0,1,0,0,0,0,0,3,4,0,1,1,1,3,2,0,2,0,1,0,2,3,3,1,2,3,0,1,0,1,0,4].freeze, - [0,0,0,1,0,3,0,3,0,2,2,1,0,0,4,0,3,0,3,1,3,0,3,0,3,0,1,0,3,0,3,1,3,0,3,3,0,0,1,2,1,1,1,0,1,2,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,2,2,1,2,0,0,2,0,0,0,0,2,3,3,3,3,0,0,0,0,1,4].freeze, - [0,0,0,3,0,3,0,0,0,0,3,1,1,0,3,0,1,0,2,0,1,0,0,0,0,0,0,0,1,0,3,0,2,0,2,3,0,0,2,2,3,1,2,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,2,0,0,0,0,2,3].freeze, - [2,4,0,5,0,5,0,4,0,3,4,3,3,3,4,3,3,3,4,3,4,4,5,4,5,5,5,2,3,0,5,5,4,1,5,4,3,1,5,4,3,4,4,3,3,4,3,3,0,3,2,0,2,3,0,3,0,0,3,3,0,5,3,2,3,3,0,3,0,3,0,3,4,5,4,5,3,0,4,3,0,3,4].freeze, - [0,3,0,3,0,3,0,3,0,3,3,4,3,2,3,2,3,0,4,3,3,3,3,3,3,3,3,0,3,2,4,3,3,1,3,4,3,4,4,4,3,4,4,3,2,4,4,1,0,2,0,0,1,1,0,2,0,0,3,1,0,5,3,2,1,3,0,3,0,1,2,4,3,2,4,3,3,0,3,2,0,4,4].freeze, - [0,3,0,3,0,1,0,0,0,1,4,3,3,2,3,1,3,1,4,2,3,2,4,2,3,4,3,0,2,2,3,3,3,0,3,3,3,0,3,4,1,3,3,0,3,4,3,3,0,1,1,0,1,0,0,0,4,0,3,0,0,3,1,2,1,3,0,4,0,1,0,4,3,3,4,3,3,0,2,0,0,3,3].freeze, - [0,3,0,4,0,1,0,3,0,3,4,3,3,0,3,3,3,1,3,1,3,3,4,3,3,3,0,0,3,1,5,3,3,1,3,3,2,5,4,3,3,4,5,3,2,5,3,4,0,1,0,0,0,0,0,2,0,0,1,1,0,4,2,2,1,3,0,3,0,2,0,4,4,3,5,3,2,0,1,1,0,3,4].freeze, - [0,5,0,4,0,5,0,2,0,4,4,3,3,2,3,3,3,1,4,3,4,1,5,3,4,3,4,0,4,2,4,3,4,1,5,4,0,4,4,4,4,5,4,1,3,5,4,2,1,4,1,1,3,2,0,3,1,0,3,2,1,4,3,3,3,4,0,4,0,3,0,4,4,4,3,3,3,0,4,2,0,3,4].freeze, - [1,4,0,4,0,3,0,1,0,3,3,3,1,1,3,3,2,2,3,3,1,0,3,2,2,1,2,0,3,1,2,1,2,0,3,2,0,2,2,3,3,4,3,0,3,3,1,2,0,1,1,3,1,2,0,0,3,0,1,1,0,3,2,2,3,3,0,3,0,0,0,2,3,3,4,3,3,0,1,0,0,1,4].freeze, - [0,4,0,4,0,4,0,0,0,3,4,4,3,1,4,2,3,2,3,3,3,1,4,3,4,0,3,0,4,2,3,3,2,2,5,4,2,1,3,4,3,4,3,1,3,3,4,2,0,2,1,0,3,3,0,0,2,0,3,1,0,4,4,3,4,3,0,4,0,1,0,2,4,4,4,4,4,0,3,2,0,3,3].freeze, - [0,0,0,1,0,4,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,3,2,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,2].freeze, - [0,2,0,3,0,4,0,4,0,1,3,3,3,0,4,0,2,1,2,1,1,1,2,0,3,1,1,0,1,0,3,1,0,0,3,3,2,0,1,1,0,0,0,0,0,1,0,2,0,2,2,0,3,1,0,0,1,0,1,1,0,1,2,0,3,0,0,0,0,1,0,0,3,3,4,3,1,0,1,0,3,0,2].freeze, - [0,0,0,3,0,5,0,0,0,0,1,0,2,0,3,1,0,1,3,0,0,0,2,0,0,0,1,0,0,0,1,1,0,0,4,0,0,0,2,3,0,1,4,1,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,1,0,0,0,0,0,0,0,2,0,0,3,0,0,0,0,0,3].freeze, - [0,2,0,5,0,5,0,1,0,2,4,3,3,2,5,1,3,2,3,3,3,0,4,1,2,0,3,0,4,0,2,2,1,1,5,3,0,0,1,4,2,3,2,0,3,3,3,2,0,2,4,1,1,2,0,1,1,0,3,1,0,1,3,1,2,3,0,2,0,0,0,1,3,5,4,4,4,0,3,0,0,1,3].freeze, - [0,4,0,5,0,4,0,4,0,4,5,4,3,3,4,3,3,3,4,3,4,4,5,3,4,5,4,2,4,2,3,4,3,1,4,4,1,3,5,4,4,5,5,4,4,5,5,5,2,3,3,1,4,3,1,3,3,0,3,3,1,4,3,4,4,4,0,3,0,4,0,3,3,4,4,5,0,0,4,3,0,4,5].freeze, - [0,4,0,4,0,3,0,3,0,3,4,4,4,3,3,2,4,3,4,3,4,3,5,3,4,3,2,1,4,2,4,4,3,1,3,4,2,4,5,5,3,4,5,4,1,5,4,3,0,3,2,2,3,2,1,3,1,0,3,3,3,5,3,3,3,5,4,4,2,3,3,4,3,3,3,2,1,0,3,2,1,4,3].freeze, - [0,4,0,5,0,4,0,3,0,3,5,5,3,2,4,3,4,0,5,4,4,1,4,4,4,3,3,3,4,3,5,5,2,3,3,4,1,2,5,5,3,5,5,2,3,5,5,4,0,3,2,0,3,3,1,1,5,1,4,1,0,4,3,2,3,5,0,4,0,3,0,5,4,3,4,3,0,0,4,1,0,4,4].freeze, - [1,3,0,4,0,2,0,2,0,2,5,5,3,3,3,3,3,0,4,2,3,4,4,4,3,4,0,0,3,4,5,4,3,3,3,3,2,5,5,4,5,5,5,4,3,5,5,5,1,3,1,0,1,0,0,3,2,0,4,2,0,5,2,3,2,4,1,3,0,3,0,4,5,4,5,4,3,0,4,2,0,5,4].freeze, - [0,3,0,4,0,5,0,3,0,3,4,4,3,2,3,2,3,3,3,3,3,2,4,3,3,2,2,0,3,3,3,3,3,1,3,3,3,0,4,4,3,4,4,1,1,4,4,2,0,3,1,0,1,1,0,4,1,0,2,3,1,3,3,1,3,4,0,3,0,1,0,3,1,3,0,0,1,0,2,0,0,4,4].freeze, - [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0].freeze, - [0,3,0,3,0,2,0,3,0,1,5,4,3,3,3,1,4,2,1,2,3,4,4,2,4,4,5,0,3,1,4,3,4,0,4,3,3,3,2,3,2,5,3,4,3,2,2,3,0,0,3,0,2,1,0,1,2,0,0,0,0,2,1,1,3,1,0,2,0,4,0,3,4,4,4,5,2,0,2,0,0,1,3].freeze, - [0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,1,0,0,1,1,0,0,0,4,2,1,1,0,1,0,3,2,0,0,3,1,1,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,0,1,0,0,0,2,0,0,0,1,4,0,4,2,1,0,0,0,0,0,1].freeze, - [0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,3,1,0,0,0,2,0,2,1,0,0,1,2,1,0,1,1,0,0,3,0,0,0,0,0,0,0,0,0,0,0,1,3,1,0,0,0,0,0,1,0,0,2,1,0,0,0,0,0,0,0,0,2].freeze, - [0,4,0,4,0,4,0,3,0,4,4,3,4,2,4,3,2,0,4,4,4,3,5,3,5,3,3,2,4,2,4,3,4,3,1,4,0,2,3,4,4,4,3,3,3,4,4,4,3,4,1,3,4,3,2,1,2,1,3,3,3,4,4,3,3,5,0,4,0,3,0,4,3,3,3,2,1,0,3,0,0,3,3].freeze, - [0,4,0,3,0,3,0,3,0,3,5,5,3,3,3,3,4,3,4,3,3,3,4,4,4,3,3,3,3,4,3,5,3,3,1,3,2,4,5,5,5,5,4,3,4,5,5,3,2,2,3,3,3,3,2,3,3,1,2,3,2,4,3,3,3,4,0,4,0,2,0,4,3,2,2,1,2,0,3,0,0,4,1].freeze, - ].freeze - - class JapaneseContextAnalysis - def initialize - reset() - end - - def reset - @totalRel = 0 # total sequence received - @relSample = [0] * NUM_OF_CATEGORY # category counters, each interger counts sequence in its category - @needToSkipCharNum = 0 # if last byte in current buffer is not the last byte of a character, we need to know how many bytes to skip in next buffer - @lastCharOrder = -1 # The order of previous char - @done = false # If this flag is set to constants.True, detection is done and conclusion has been made - end - - def feed(aBuf, aLen) - return if @done - - # The buffer we got is byte oriented, and a character may span in more than one - # buffers. In case the last one or two byte in last buffer is not complete, we - # record how many byte needed to complete that character and skip these bytes here. - # We can choose to record those bytes as well and analyse the character once it - # is complete, but since a character will not make much difference, by simply skipping - # this character will simply our logic and improve performance. - i = @needToSkipCharNum - while i < aLen - order, charLen = get_order(aBuf[i, 2]) - i += charLen - if i > aLen - @needToSkipCharNum = i - aLen - @lastCharOrder = -1 - else - if (order != -1) and (@lastCharOrder != -1) - @totalRel += 1 - if @totalRel > MAX_REL_THRESHOLD - @done = true - break - end - @relSample[JP2_CHAR_CONTEXT[@lastCharOrder][order]] += 1 - end - @lastCharOrder = order - end - end - end - - def got_enough_data - return @totalRel > ENOUGH_REL_THRESHOLD - end - - def get_confidence - # This is just one way to calculate confidence. It works well for me. - if @totalRel > MINIMUM_DATA_THRESHOLD - return (@totalRel - @relSample[0]) / @totalRel - else - return DONT_KNOW - end - end - - def get_order(aStr) - return -1, 1 - end - end - - class SJISContextAnalysis < JapaneseContextAnalysis - def get_order(aStr) - return -1, 1 if aStr.nil? || aStr.empty? - # find out current char's byte length - first = aStr[0, 1] - if ((first >= "\x81") and (first <= "\x9F")) or ((first >= "\xE0") and (first <= "\xFC")) - charLen = 2 - else - charLen = 1 - end - # return its order if it is hiragana - if aStr.length > 1 - second = aStr[1, 1] - if (first == "\202") and (second >= "\x9F") and (second <= "\xF1") - return aStr[1].ord - 0x9F, charLen - end - end - - return -1, charLen - end - end - - class EUCJPContextAnalysis < JapaneseContextAnalysis - def get_order(aStr) - return -1, 1 unless aStr - # find out current char's byte length - first = aStr[0, 1] - if (first == "\x8E") or ((first >= "\xA1") and (first <= "\xFE")) - charLen = 2 - elsif first == "\x8F" - charLen = 3 - else - charLen = 1 - end - - # return its order if it is hiragana - if aStr.length > 1 - second = aStr[1, 1] - if (first == "\xA4") and (second >= "\xA1") and (second <= "\xF3") - return aStr[1].ord - 0xA1, charLen - end - end - - return -1, charLen - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/langbulgarianmodel.rb b/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/langbulgarianmodel.rb deleted file mode 100644 index f437fa3e..00000000 --- a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/langbulgarianmodel.rb +++ /dev/null @@ -1,229 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Jeff Hodges - port to Ruby -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -# 255: Control characters that usually does not exist in any text -# 254: Carriage/Return -# 253: symbol (punctuation) that does not belong to word -# 252: 0 - 9 - -# Character Mapping Table: -# this table is modified base on win1251BulgarianCharToOrderMap, so -# only number <64 is sure valid - -module CharDet -Latin5_BulgarianCharToOrderMap = [ -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 -253, 77, 90, 99,100, 72,109,107,101, 79,185, 81,102, 76, 94, 82, # 40 -110,186,108, 91, 74,119, 84, 96,111,187,115,253,253,253,253,253, # 50 -253, 65, 69, 70, 66, 63, 68,112,103, 92,194,104, 95, 86, 87, 71, # 60 -116,195, 85, 93, 97,113,196,197,198,199,200,253,253,253,253,253, # 70 -194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209, # 80 -210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225, # 90 - 81,226,227,228,229,230,105,231,232,233,234,235,236, 45,237,238, # a0 - 31, 32, 35, 43, 37, 44, 55, 47, 40, 59, 33, 46, 38, 36, 41, 30, # b0 - 39, 28, 34, 51, 48, 49, 53, 50, 54, 57, 61,239, 67,240, 60, 56, # c0 - 1, 18, 9, 20, 11, 3, 23, 15, 2, 26, 12, 10, 14, 6, 4, 13, # d0 - 7, 8, 5, 19, 29, 25, 22, 21, 27, 24, 17, 75, 52,241, 42, 16, # e0 - 62,242,243,244, 58,245, 98,246,247,248,249,250,251, 91,252,253, # f0 -].freeze - -win1251BulgarianCharToOrderMap = [ -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 -253, 77, 90, 99,100, 72,109,107,101, 79,185, 81,102, 76, 94, 82, # 40 -110,186,108, 91, 74,119, 84, 96,111,187,115,253,253,253,253,253, # 50 -253, 65, 69, 70, 66, 63, 68,112,103, 92,194,104, 95, 86, 87, 71, # 60 -116,195, 85, 93, 97,113,196,197,198,199,200,253,253,253,253,253, # 70 -206,207,208,209,210,211,212,213,120,214,215,216,217,218,219,220, # 80 -221, 78, 64, 83,121, 98,117,105,222,223,224,225,226,227,228,229, # 90 - 88,230,231,232,233,122, 89,106,234,235,236,237,238, 45,239,240, # a0 - 73, 80,118,114,241,242,243,244,245, 62, 58,246,247,248,249,250, # b0 - 31, 32, 35, 43, 37, 44, 55, 47, 40, 59, 33, 46, 38, 36, 41, 30, # c0 - 39, 28, 34, 51, 48, 49, 53, 50, 54, 57, 61,251, 67,252, 60, 56, # d0 - 1, 18, 9, 20, 11, 3, 23, 15, 2, 26, 12, 10, 14, 6, 4, 13, # e0 - 7, 8, 5, 19, 29, 25, 22, 21, 27, 24, 17, 75, 52,253, 42, 16, # f0 -].freeze - -# Model Table: -# total sequences: 100% -# first 512 sequences: 96.9392% -# first 1024 sequences:3.0618% -# rest sequences: 0.2992% -# negative sequences: 0.0020% -BulgarianLangModel = [ -0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,2,3,3,3,3,3, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,3,3,3,2,2,3,2,2,1,2,2, -3,1,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,0,3,3,3,3,3,3,3,3,3,3,0,3,0,1, -0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,3,3,3,3,3,3,3,3,0,3,1,0, -0,1,0,0,0,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,1,3,2,3,3,3,3,3,3,3,3,0,3,0,0, -0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,1,3,2,3,3,3,3,3,3,3,3,0,3,0,0, -0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,3,2,3,2,2,1,3,3,3,3,2,2,2,1,1,2,0,1,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,3,3,2,3,2,2,3,3,1,1,2,3,3,2,3,3,3,3,2,1,2,0,2,0,3,0,0, -0,0,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,3,3,1,3,3,3,3,3,2,3,2,3,3,3,3,3,2,3,3,1,3,0,3,0,2,0,0, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,3,3,3,1,3,3,2,3,3,3,1,3,3,2,3,2,2,2,0,0,2,0,2,0,2,0,0, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,3,3,3,3,0,3,3,3,2,2,3,3,3,1,2,2,3,2,1,1,2,0,2,0,0,0,0, -1,0,0,0,0,0,0,0,0,0,2,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,3,3,2,3,3,1,2,3,2,2,2,3,3,3,3,3,2,2,3,1,2,0,2,1,2,0,0, -0,0,0,0,0,0,0,0,0,0,3,0,0,1,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,1,3,3,3,3,3,2,3,3,3,2,3,3,2,3,2,2,2,3,1,2,0,1,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,3,3,3,3,3,3,1,1,1,2,2,1,3,1,3,2,2,3,0,0,1,0,1,0,1,0,0, -0,0,0,1,0,0,0,0,1,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,2,2,3,2,2,3,1,2,1,1,1,2,3,1,3,1,2,2,0,1,1,1,1,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,1,3,2,2,3,3,1,2,3,1,1,3,3,3,3,1,2,2,1,1,1,0,2,0,2,0,1, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,2,2,3,3,3,2,2,1,1,2,0,2,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, -3,0,1,2,1,3,3,2,3,3,3,3,3,2,3,2,1,0,3,1,2,1,2,1,2,3,2,1,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,1,1,2,3,3,3,3,3,3,3,3,3,3,3,3,0,0,3,1,3,3,2,3,3,2,2,2,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,3,3,3,3,0,3,3,3,3,3,2,1,1,2,1,3,3,0,3,1,1,1,1,3,2,0,1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, -3,3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,1,1,3,1,3,3,2,3,2,2,2,3,0,2,0,0, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,2,3,3,2,2,3,2,1,1,1,1,1,3,1,3,1,1,0,0,0,1,0,0,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,2,3,2,0,3,2,0,3,0,2,0,0,2,1,3,1,0,0,1,0,0,0,1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,2,1,1,1,1,2,1,1,2,1,1,1,2,2,1,2,1,1,1,0,1,1,0,1,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,2,1,3,1,1,2,1,3,2,1,1,0,1,2,3,2,1,1,1,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,3,3,3,3,2,2,1,0,1,0,0,1,0,0,0,2,1,0,3,0,0,1,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,2,3,2,3,3,1,3,2,1,1,1,2,1,1,2,1,3,0,1,0,0,0,1,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,1,1,2,2,3,3,2,3,2,2,2,3,1,2,2,1,1,2,1,1,2,2,0,1,1,0,1,0,2,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,2,1,3,1,0,2,2,1,3,2,1,0,0,2,0,2,0,1,0,0,0,0,0,0,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,3,1,2,0,2,3,1,2,3,2,0,1,3,1,2,1,1,1,0,0,1,0,0,2,2,2,3, -2,2,2,2,1,2,1,1,2,2,1,1,2,0,1,1,1,0,0,1,1,0,0,1,1,0,0,0,1,1,0,1, -3,3,3,3,3,2,1,2,2,1,2,0,2,0,1,0,1,2,1,2,1,1,0,0,0,1,0,1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1, -3,3,2,3,3,1,1,3,1,0,3,2,1,0,0,0,1,2,0,2,0,1,0,0,0,1,0,1,2,1,2,2, -1,1,1,1,1,1,1,2,2,2,1,1,1,1,1,1,1,0,1,2,1,1,1,0,0,0,0,0,1,1,0,0, -3,1,0,1,0,2,3,2,2,2,3,2,2,2,2,2,1,0,2,1,2,1,1,1,0,1,2,1,2,2,2,1, -1,1,2,2,2,2,1,2,1,1,0,1,2,1,2,2,2,1,1,1,0,1,1,1,1,2,0,1,0,0,0,0, -2,3,2,3,3,0,0,2,1,0,2,1,0,0,0,0,2,3,0,2,0,0,0,0,0,1,0,0,2,0,1,2, -2,1,2,1,2,2,1,1,1,2,1,1,1,0,1,2,2,1,1,1,1,1,0,1,1,1,0,0,1,2,0,0, -3,3,2,2,3,0,2,3,1,1,2,0,0,0,1,0,0,2,0,2,0,0,0,1,0,1,0,1,2,0,2,2, -1,1,1,1,2,1,0,1,2,2,2,1,1,1,1,1,1,1,0,1,1,1,0,0,0,0,0,0,1,1,0,0, -2,3,2,3,3,0,0,3,0,1,1,0,1,0,0,0,2,2,1,2,0,0,0,0,0,0,0,0,2,0,1,2, -2,2,1,1,1,1,1,2,2,2,1,0,2,0,1,0,1,0,0,1,0,1,0,0,1,0,0,0,0,1,0,0, -3,3,3,3,2,2,2,2,2,0,2,1,1,1,1,2,1,2,1,1,0,2,0,1,0,1,0,0,2,0,1,2, -1,1,1,1,1,1,1,2,2,1,1,0,2,0,1,0,2,0,0,1,1,1,0,0,2,0,0,0,1,1,0,0, -2,3,3,3,3,1,0,0,0,0,0,0,0,0,0,0,2,0,0,1,1,0,0,0,0,0,0,1,2,0,1,2, -2,2,2,1,1,2,1,1,2,2,2,1,2,0,1,1,1,1,1,1,0,1,1,1,1,0,0,1,1,1,0,0, -2,3,3,3,3,0,2,2,0,2,1,0,0,0,1,1,1,2,0,2,0,0,0,3,0,0,0,0,2,0,2,2, -1,1,1,2,1,2,1,1,2,2,2,1,2,0,1,1,1,0,1,1,1,1,0,2,1,0,0,0,1,1,0,0, -2,3,3,3,3,0,2,1,0,0,2,0,0,0,0,0,1,2,0,2,0,0,0,0,0,0,0,0,2,0,1,2, -1,1,1,2,1,1,1,1,2,2,2,0,1,0,1,1,1,0,0,1,1,1,0,0,1,0,0,0,0,1,0,0, -3,3,2,2,3,0,1,0,1,0,0,0,0,0,0,0,1,1,0,3,0,0,0,0,0,0,0,0,1,0,2,2, -1,1,1,1,1,2,1,1,2,2,1,2,2,1,0,1,1,1,1,1,0,1,0,0,1,0,0,0,1,1,0,0, -3,1,0,1,0,2,2,2,2,3,2,1,1,1,2,3,0,0,1,0,2,1,1,0,1,1,1,1,2,1,1,1, -1,2,2,1,2,1,2,2,1,1,0,1,2,1,2,2,1,1,1,0,0,1,1,1,2,1,0,1,0,0,0,0, -2,1,0,1,0,3,1,2,2,2,2,1,2,2,1,1,1,0,2,1,2,2,1,1,2,1,1,0,2,1,1,1, -1,2,2,2,2,2,2,2,1,2,0,1,1,0,2,1,1,1,1,1,0,0,1,1,1,1,0,1,0,0,0,0, -2,1,1,1,1,2,2,2,2,1,2,2,2,1,2,2,1,1,2,1,2,3,2,2,1,1,1,1,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,2,2,3,2,0,1,2,0,1,2,1,1,0,1,0,1,2,1,2,0,0,0,1,1,0,0,0,1,0,0,2, -1,1,0,0,1,1,0,1,1,1,1,0,2,0,1,1,1,0,0,1,1,0,0,0,0,1,0,0,0,1,0,0, -2,0,0,0,0,1,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,0,1,1,1,1,1,2,1,1,1, -1,2,2,2,2,1,1,2,1,2,1,1,1,0,2,1,2,1,1,1,0,2,1,1,1,1,0,1,0,0,0,0, -3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0, -1,1,0,1,0,1,1,1,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,2,2,3,2,0,0,0,0,1,0,0,0,0,0,0,1,1,0,2,0,0,0,0,0,0,0,0,1,0,1,2, -1,1,1,1,1,1,0,0,2,2,2,2,2,0,1,1,0,1,1,1,1,1,0,0,1,0,0,0,1,1,0,1, -2,3,1,2,1,0,1,1,0,2,2,2,0,0,1,0,0,1,1,1,1,0,0,0,0,0,0,0,1,0,1,2, -1,1,1,1,2,1,1,1,1,1,1,1,1,0,1,1,0,1,0,1,0,1,0,0,1,0,0,0,0,1,0,0, -2,2,2,2,2,0,0,2,0,0,2,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,2,0,2,2, -1,1,1,1,1,0,0,1,2,1,1,0,1,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0, -1,2,2,2,2,0,0,2,0,1,1,0,0,0,1,0,0,2,0,2,0,0,0,0,0,0,0,0,0,0,1,1, -0,0,0,1,1,1,1,1,1,1,1,1,1,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0, -1,2,2,3,2,0,0,1,0,0,1,0,0,0,0,0,0,1,0,2,0,0,0,1,0,0,0,0,0,0,0,2, -1,1,0,0,1,0,0,0,1,1,0,0,1,0,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0, -2,1,2,2,2,1,2,1,2,2,1,1,2,1,1,1,0,1,1,1,1,2,0,1,0,1,1,1,1,0,1,1, -1,1,2,1,1,1,1,1,1,0,0,1,2,1,1,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0, -1,0,0,1,3,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,2,2,2,1,0,0,1,0,2,0,0,0,0,0,1,1,1,0,1,0,0,0,0,0,0,0,0,2,0,0,1, -0,2,0,1,0,0,1,1,2,0,1,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0, -1,2,2,2,2,0,1,1,0,2,1,0,1,1,1,0,0,1,0,2,0,1,0,0,0,0,0,0,0,0,0,1, -0,1,0,0,1,0,0,0,1,1,0,0,1,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0, -2,2,2,2,2,0,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1, -0,1,0,1,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0, -2,0,1,0,0,1,2,1,1,1,1,1,1,2,2,1,0,0,1,0,1,0,0,0,0,1,1,1,1,0,0,0, -1,1,2,1,1,1,1,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,2,1,2,1,0,0,1,0,0,0,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0,1, -0,0,0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,0,0,1,2,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0, -0,1,1,0,1,1,1,0,0,1,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0, -1,0,1,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,1,0,2,0,0,2,0,1,0,0,1,0,0,1, -1,1,0,0,1,1,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0, -1,1,1,1,1,1,1,2,0,0,0,0,0,0,2,1,0,1,1,0,0,1,1,1,0,1,0,0,0,0,0,0, -2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,0,1,1,1,1,1,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -].freeze - -Latin5BulgarianModel = { - 'charToOrderMap' => Latin5_BulgarianCharToOrderMap, - 'precedenceMatrix' => BulgarianLangModel, - 'mTypicalPositiveRatio' => 0.969392, - 'keepEnglishLetter' => false, - 'charsetName' => "ISO-8859-5" -}.freeze - -Win1251BulgarianModel = { - 'charToOrderMap' => win1251BulgarianCharToOrderMap, - 'precedenceMatrix' => BulgarianLangModel, - 'mTypicalPositiveRatio' => 0.969392, - 'keepEnglishLetter' => false, - 'charsetName' => "windows-1251" -}.freeze -end diff --git a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/langcyrillicmodel.rb b/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/langcyrillicmodel.rb deleted file mode 100644 index 1e175478..00000000 --- a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/langcyrillicmodel.rb +++ /dev/null @@ -1,330 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Jeff Hodges - port to Ruby -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -module CharDet -# KOI8-R language model -# Character Mapping Table: -KOI8R_CharToOrderMap = [ -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 -253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, # 40 -155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, # 50 -253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, # 60 - 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, # 70 -191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206, # 80 -207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222, # 90 -223,224,225, 68,226,227,228,229,230,231,232,233,234,235,236,237, # a0 -238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253, # b0 - 27, 3, 21, 28, 13, 2, 39, 19, 26, 4, 23, 11, 8, 12, 5, 1, # c0 - 15, 16, 9, 7, 6, 14, 24, 10, 17, 18, 20, 25, 30, 29, 22, 54, # d0 - 59, 37, 44, 58, 41, 48, 53, 46, 55, 42, 60, 36, 49, 38, 31, 34, # e0 - 35, 43, 45, 32, 40, 52, 56, 33, 61, 62, 51, 57, 47, 63, 50, 70, # f0 -].freeze - -win1251_CharToOrderMap = [ -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 -253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, # 40 -155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, # 50 -253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, # 60 - 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, # 70 -191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206, -207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222, -223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238, -239,240,241,242,243,244,245,246, 68,247,248,249,250,251,252,253, - 37, 44, 33, 46, 41, 48, 56, 51, 42, 60, 36, 49, 38, 31, 34, 35, - 45, 32, 40, 52, 53, 55, 58, 50, 57, 63, 70, 62, 61, 47, 59, 43, - 3, 21, 10, 19, 13, 2, 24, 20, 4, 23, 11, 8, 12, 5, 1, 15, - 9, 7, 6, 14, 39, 26, 28, 22, 25, 29, 54, 18, 17, 30, 27, 16, -].freeze - -latin5_CharToOrderMap = [ -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 -253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, # 40 -155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, # 50 -253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, # 60 - 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, # 70 -191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206, -207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222, -223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238, - 37, 44, 33, 46, 41, 48, 56, 51, 42, 60, 36, 49, 38, 31, 34, 35, - 45, 32, 40, 52, 53, 55, 58, 50, 57, 63, 70, 62, 61, 47, 59, 43, - 3, 21, 10, 19, 13, 2, 24, 20, 4, 23, 11, 8, 12, 5, 1, 15, - 9, 7, 6, 14, 39, 26, 28, 22, 25, 29, 54, 18, 17, 30, 27, 16, -239, 68,240,241,242,243,244,245,246,247,248,249,250,251,252,255, -].freeze - -macCyrillic_CharToOrderMap = [ -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 -253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, # 40 -155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, # 50 -253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, # 60 - 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, # 70 - 37, 44, 33, 46, 41, 48, 56, 51, 42, 60, 36, 49, 38, 31, 34, 35, - 45, 32, 40, 52, 53, 55, 58, 50, 57, 63, 70, 62, 61, 47, 59, 43, -191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206, -207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222, -223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238, -239,240,241,242,243,244,245,246,247,248,249,250,251,252, 68, 16, - 3, 21, 10, 19, 13, 2, 24, 20, 4, 23, 11, 8, 12, 5, 1, 15, - 9, 7, 6, 14, 39, 26, 28, 22, 25, 29, 54, 18, 17, 30, 27,255, -].freeze - -IBM855_CharToOrderMap = [ -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 -253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, # 40 -155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, # 50 -253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, # 60 - 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, # 70 -191,192,193,194, 68,195,196,197,198,199,200,201,202,203,204,205, -206,207,208,209,210,211,212,213,214,215,216,217, 27, 59, 54, 70, - 3, 37, 21, 44, 28, 58, 13, 41, 2, 48, 39, 53, 19, 46,218,219, -220,221,222,223,224, 26, 55, 4, 42,225,226,227,228, 23, 60,229, -230,231,232,233,234,235, 11, 36,236,237,238,239,240,241,242,243, - 8, 49, 12, 38, 5, 31, 1, 34, 15,244,245,246,247, 35, 16,248, - 43, 9, 45, 7, 32, 6, 40, 14, 52, 24, 56, 10, 33, 17, 61,249, -250, 18, 62, 20, 51, 25, 57, 30, 47, 29, 63, 22, 50,251,252,255, -].freeze - -IBM866_CharToOrderMap = [ -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 -253,142,143,144,145,146,147,148,149,150,151,152, 74,153, 75,154, # 40 -155,156,157,158,159,160,161,162,163,164,165,253,253,253,253,253, # 50 -253, 71,172, 66,173, 65,174, 76,175, 64,176,177, 77, 72,178, 69, # 60 - 67,179, 78, 73,180,181, 79,182,183,184,185,253,253,253,253,253, # 70 - 37, 44, 33, 46, 41, 48, 56, 51, 42, 60, 36, 49, 38, 31, 34, 35, - 45, 32, 40, 52, 53, 55, 58, 50, 57, 63, 70, 62, 61, 47, 59, 43, - 3, 21, 10, 19, 13, 2, 24, 20, 4, 23, 11, 8, 12, 5, 1, 15, -191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206, -207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222, -223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238, - 9, 7, 6, 14, 39, 26, 28, 22, 25, 29, 54, 18, 17, 30, 27, 16, -239, 68,240,241,242,243,244,245,246,247,248,249,250,251,252,255, -].freeze - -# Model Table: -# total sequences: 100% -# first 512 sequences: 97.6601% -# first 1024 sequences: 2.3389% -# rest sequences: 0.1237% -# negative sequences: 0.0009% -RussianLangModel = [ -0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,1,3,3,3,3,1,3,3,3,2,3,2,3,3, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,0,3,2,2,2,2,2,0,0,2, -3,3,3,2,3,3,3,3,3,3,3,3,3,3,2,3,3,0,0,3,3,3,3,3,3,3,3,3,2,3,2,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,2,2,3,3,3,3,3,3,3,3,3,2,3,3,0,0,3,3,3,3,3,3,3,3,2,3,3,1,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,0,0,3,3,3,3,3,3,3,3,3,3,3,2,1, -0,0,0,0,0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,0,0,3,3,3,3,3,3,3,3,3,3,3,2,1, -0,0,0,0,0,1,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,2,2,2,3,1,3,3,1,3,3,3,3,2,2,3,0,2,2,2,3,3,2,1,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,2,3,3,3,3,3,2,2,3,2,3,3,3,2,1,2,2,0,1,2,2,2,2,2,2,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,3,0,2,2,3,3,2,1,2,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,2,3,3,1,2,3,2,2,3,2,3,3,3,3,2,2,3,0,3,2,2,3,1,1,1,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,2,3,3,3,3,2,2,2,0,3,3,3,2,2,2,2,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,2,3,2,3,3,3,3,3,3,2,3,2,2,0,1,3,2,1,2,2,1,0, -0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,3,2,1,1,3,0,1,1,1,1,2,1,1,0,2,2,2,1,2,0,1,0, -0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,2,3,3,2,2,2,2,1,3,2,3,2,3,2,1,2,2,0,1,1,2,1,2,1,2,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,3,3,3,2,2,2,2,0,2,2,2,2,3,1,1,0, -0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, -3,2,3,2,2,3,3,3,3,3,3,3,3,3,1,3,2,0,0,3,3,3,3,2,3,3,3,3,2,3,2,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,3,3,3,3,3,2,2,3,3,0,2,1,0,3,2,3,2,3,0,0,1,2,0,0,1,0,1,2,1,1,0, -0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,0,3,0,2,3,3,3,3,2,3,3,3,3,1,2,2,0,0,2,3,2,2,2,3,2,3,2,2,3,0,0, -0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,2,3,0,2,3,2,3,0,1,2,3,3,2,0,2,3,0,0,2,3,2,2,0,1,3,1,3,2,2,1,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,1,3,0,2,3,3,3,3,3,3,3,3,2,1,3,2,0,0,2,2,3,3,3,2,3,3,0,2,2,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,2,2,3,3,2,2,2,3,3,0,0,1,1,1,1,1,2,0,0,1,1,1,1,0,1,0, -0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,2,2,3,3,3,3,3,3,3,0,3,2,3,3,2,3,2,0,2,1,0,1,1,0,1,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,2,3,3,3,2,2,2,2,3,1,3,2,3,1,1,2,1,0,2,2,2,2,1,3,1,0, -0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, -2,2,3,3,3,3,3,1,2,2,1,3,1,0,3,0,0,3,0,0,0,1,1,0,1,2,1,0,0,0,0,0, -0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,2,2,1,1,3,3,3,2,2,1,2,2,3,1,1,2,0,0,2,2,1,3,0,0,2,1,1,2,1,1,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,2,3,3,3,3,1,2,2,2,1,2,1,3,3,1,1,2,1,2,1,2,2,0,2,0,0,1,1,0,1,0, -0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,3,3,3,3,3,2,1,3,2,2,3,2,0,3,2,0,3,0,1,0,1,1,0,0,1,1,1,1,0,1,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,2,3,3,3,2,2,2,3,3,1,2,1,2,1,0,1,0,1,1,0,1,0,0,2,1,1,1,0,1,0, -0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, -3,1,1,2,1,2,3,3,2,2,1,2,2,3,0,2,1,0,0,2,2,3,2,1,2,2,2,2,2,3,1,0, -0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,1,1,0,1,1,2,2,1,1,3,0,0,1,3,1,1,1,0,0,0,1,0,1,1,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,1,3,3,3,2,0,0,0,2,1,0,1,0,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,0,1,0,0,2,3,2,2,2,1,2,2,2,1,2,1,0,0,1,1,1,0,2,0,1,1,1,0,0,1,1, -1,0,0,0,0,0,1,2,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0, -2,3,3,3,3,0,0,0,0,1,0,0,0,0,3,0,1,2,1,0,0,0,0,0,0,0,1,1,0,0,1,1, -1,0,1,0,1,2,0,0,1,1,2,1,0,1,1,1,1,0,1,1,1,1,0,1,0,0,1,0,0,1,1,0, -2,2,3,2,2,2,3,1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,0,1,0,1,1,1,0,2,1, -1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,0,1,0,1,1,0,1,1,1,0,1,1,0, -3,3,3,2,2,2,2,3,2,2,1,1,2,2,2,2,1,1,3,1,2,1,2,0,0,1,1,0,1,0,2,1, -1,1,1,1,1,2,1,0,1,1,1,1,0,1,0,0,1,1,0,0,1,0,1,0,0,1,0,0,0,1,1,0, -2,0,0,1,0,3,2,2,2,2,1,2,1,2,1,2,0,0,0,2,1,2,2,1,1,2,2,0,1,1,0,2, -1,1,1,1,1,0,1,1,1,2,1,1,1,2,1,0,1,2,1,1,1,1,0,1,1,1,0,0,1,0,0,1, -1,3,2,2,2,1,1,1,2,3,0,0,0,0,2,0,2,2,1,0,0,0,0,0,0,1,0,0,0,0,1,1, -1,0,1,1,0,1,0,1,1,0,1,1,0,2,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,1,1,0, -2,3,2,3,2,1,2,2,2,2,1,0,0,0,2,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0,2,1, -1,1,2,1,0,2,0,0,1,0,1,0,0,1,0,0,1,1,0,1,1,0,0,0,0,0,1,0,0,0,0,0, -3,0,0,1,0,2,2,2,3,2,2,2,2,2,2,2,0,0,0,2,1,2,1,1,1,2,2,0,0,0,1,2, -1,1,1,1,1,0,1,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0,0,1, -2,3,2,3,3,2,0,1,1,1,0,0,1,0,2,0,1,1,3,1,0,0,0,0,0,0,0,1,0,0,2,1, -1,1,1,1,1,1,1,0,1,0,1,1,1,1,0,1,1,1,0,0,1,1,0,1,0,0,0,0,0,0,1,0, -2,3,3,3,3,1,2,2,2,2,0,1,1,0,2,1,1,1,2,1,0,1,1,0,0,1,0,1,0,0,2,0, -0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,3,3,3,2,0,0,1,1,2,2,1,0,0,2,0,1,1,3,0,0,1,0,0,0,0,0,1,0,1,2,1, -1,1,2,0,1,1,1,0,1,0,1,1,0,1,0,1,1,1,1,0,1,0,0,0,0,0,0,1,0,1,1,0, -1,3,2,3,2,1,0,0,2,2,2,0,1,0,2,0,1,1,1,0,1,0,0,0,3,0,1,1,0,0,2,1, -1,1,1,0,1,1,0,0,0,0,1,1,0,1,0,0,2,1,1,0,1,0,0,0,1,0,1,0,0,1,1,0, -3,1,2,1,1,2,2,2,2,2,2,1,2,2,1,1,0,0,0,2,2,2,0,0,0,1,2,1,0,1,0,1, -2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,2,1,1,1,0,1,0,1,1,0,1,1,1,0,0,1, -3,0,0,0,0,2,0,1,1,1,1,1,1,1,0,1,0,0,0,1,1,1,0,1,0,1,1,0,0,1,0,1, -1,1,0,0,1,0,0,0,1,0,1,1,0,0,1,0,1,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1, -1,3,3,2,2,0,0,0,2,2,0,0,0,1,2,0,1,1,2,0,0,0,0,0,0,0,0,1,0,0,2,1, -0,1,1,0,0,1,1,0,0,0,1,1,0,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,1,0, -2,3,2,3,2,0,0,0,0,1,1,0,0,0,2,0,2,0,2,0,0,0,0,0,1,0,0,1,0,0,1,1, -1,1,2,0,1,2,1,0,1,1,2,1,1,1,1,1,2,1,1,0,1,0,0,1,1,1,1,1,0,1,1,0, -1,3,2,2,2,1,0,0,2,2,1,0,1,2,2,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,1,1, -0,0,1,1,0,1,1,0,0,1,1,0,1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0, -1,0,0,1,0,2,3,1,2,2,2,2,2,2,1,1,0,0,0,1,0,1,0,2,1,1,1,0,0,0,0,1, -1,1,0,1,1,0,1,1,1,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0, -2,0,2,0,0,1,0,3,2,1,2,1,2,2,0,1,0,0,0,2,1,0,0,2,1,1,1,1,0,2,0,2, -2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,0,1,1,1,1,0,0,0,1,1,1,1,0,1,0,0,1, -1,2,2,2,2,1,0,0,1,0,0,0,0,0,2,0,1,1,1,1,0,0,0,0,1,0,1,2,0,0,2,0, -1,0,1,1,1,2,1,0,1,0,1,1,0,0,1,0,1,1,1,0,1,0,0,0,1,0,0,1,0,1,1,0, -2,1,2,2,2,0,3,0,1,1,0,0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -0,0,0,1,1,1,0,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0, -1,2,2,3,2,2,0,0,1,1,2,0,1,2,1,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,1, -0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0,0,1,1,0, -2,2,1,1,2,1,2,2,2,2,2,1,2,2,0,1,0,0,0,1,2,2,2,1,2,1,1,1,1,1,2,1, -1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,0,1,1,1,0,0,0,0,1,1,1,0,1,1,0,0,1, -1,2,2,2,2,0,1,0,2,2,0,0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,0, -0,0,1,0,0,1,0,0,0,0,1,0,1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0, -0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,2,2,2,2,0,0,0,2,2,2,0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1, -0,1,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,2,2,2,2,0,0,0,0,1,0,0,1,1,2,0,0,0,0,1,0,1,0,0,1,0,0,2,0,0,0,1, -0,0,1,0,0,1,0,0,0,1,1,0,0,0,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0, -1,2,2,2,1,1,2,0,2,1,1,1,1,0,2,2,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,1, -0,0,1,0,1,1,0,0,0,0,1,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0, -1,0,2,1,2,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0, -0,0,1,0,1,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0, -1,0,0,0,0,2,0,1,2,1,0,1,1,1,0,1,0,0,0,1,0,1,0,0,1,0,1,0,0,0,0,1, -0,0,0,0,0,1,0,0,1,1,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1, -2,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -1,0,0,0,1,0,0,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0, -2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -1,1,1,0,1,0,1,0,0,1,1,1,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,1,0,0,0,0, -1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -1,1,0,1,1,0,1,0,1,0,0,0,0,1,1,0,1,1,0,0,0,0,0,1,0,1,1,0,1,0,0,0, -0,1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0, -].freeze - -Koi8rModel = { - 'charToOrderMap' => KOI8R_CharToOrderMap, - 'precedenceMatrix' => RussianLangModel, - 'mTypicalPositiveRatio' => 0.976601, - 'keepEnglishLetter' => false, - 'charsetName' => "KOI8-R" -}.freeze - -Win1251CyrillicModel = { - 'charToOrderMap' => win1251_CharToOrderMap, - 'precedenceMatrix' => RussianLangModel, - 'mTypicalPositiveRatio' => 0.976601, - 'keepEnglishLetter' => false, - 'charsetName' => "windows-1251" -}.freeze - -Latin5CyrillicModel = { - 'charToOrderMap' => latin5_CharToOrderMap, - 'precedenceMatrix' => RussianLangModel, - 'mTypicalPositiveRatio' => 0.976601, - 'keepEnglishLetter' => false, - 'charsetName' => "ISO-8859-5" -}.freeze - -MacCyrillicModel = { - 'charToOrderMap' => macCyrillic_CharToOrderMap, - 'precedenceMatrix' => RussianLangModel, - 'mTypicalPositiveRatio' => 0.976601, - 'keepEnglishLetter' => false, - 'charsetName' => "MacCyrillic" -}.freeze - -Ibm866Model = { - 'charToOrderMap' => IBM866_CharToOrderMap, - 'precedenceMatrix' => RussianLangModel, - 'mTypicalPositiveRatio' => 0.976601, - 'keepEnglishLetter' => false, - 'charsetName' => "IBM866" -}.freeze - -Ibm855Model = { - 'charToOrderMap' => IBM855_CharToOrderMap, - 'precedenceMatrix' => RussianLangModel, - 'mTypicalPositiveRatio' => 0.976601, - 'keepEnglishLetter' => false, - 'charsetName' => "IBM855" -}.freeze -end diff --git a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/langgreekmodel.rb b/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/langgreekmodel.rb deleted file mode 100644 index 1e6286bf..00000000 --- a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/langgreekmodel.rb +++ /dev/null @@ -1,227 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Jeff Hodges - port to Ruby -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - - -module CharDet - # 255: Control characters that usually does not exist in any text - # 254: Carriage/Return - # 253: symbol (punctuation) that does not belong to word - # 252: 0 - 9 - - # Character Mapping Table: - Latin7_CharToOrderMap = [ - 255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 - 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 - 253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 - 252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 - 253, 82,100,104, 94, 98,101,116,102,111,187,117, 92, 88,113, 85, # 40 - 79,118,105, 83, 67,114,119, 95, 99,109,188,253,253,253,253,253, # 50 - 253, 72, 70, 80, 81, 60, 96, 93, 89, 68,120, 97, 77, 86, 69, 55, # 60 - 78,115, 65, 66, 58, 76,106,103, 87,107,112,253,253,253,253,253, # 70 - 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 80 - 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 90 - 253,233, 90,253,253,253,253,253,253,253,253,253,253, 74,253,253, # a0 - 253,253,253,253,247,248, 61, 36, 46, 71, 73,253, 54,253,108,123, # b0 - 110, 31, 51, 43, 41, 34, 91, 40, 52, 47, 44, 53, 38, 49, 59, 39, # c0 - 35, 48,250, 37, 33, 45, 56, 50, 84, 57,120,121, 17, 18, 22, 15, # d0 - 124, 1, 29, 20, 21, 3, 32, 13, 25, 5, 11, 16, 10, 6, 30, 4, # e0 - 9, 8, 14, 7, 2, 12, 28, 23, 42, 24, 64, 75, 19, 26, 27,253, # f0 - ].freeze - - Win1253_CharToOrderMap = [ - 255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 - 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 - 253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 - 252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 - 253, 82,100,104, 94, 98,101,116,102,111,187,117, 92, 88,113, 85, # 40 - 79,118,105, 83, 67,114,119, 95, 99,109,188,253,253,253,253,253, # 50 - 253, 72, 70, 80, 81, 60, 96, 93, 89, 68,120, 97, 77, 86, 69, 55, # 60 - 78,115, 65, 66, 58, 76,106,103, 87,107,112,253,253,253,253,253, # 70 - 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 80 - 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 90 - 253,233, 61,253,253,253,253,253,253,253,253,253,253, 74,253,253, # a0 - 253,253,253,253,247,253,253, 36, 46, 71, 73,253, 54,253,108,123, # b0 - 110, 31, 51, 43, 41, 34, 91, 40, 52, 47, 44, 53, 38, 49, 59, 39, # c0 - 35, 48,250, 37, 33, 45, 56, 50, 84, 57,120,121, 17, 18, 22, 15, # d0 - 124, 1, 29, 20, 21, 3, 32, 13, 25, 5, 11, 16, 10, 6, 30, 4, # e0 - 9, 8, 14, 7, 2, 12, 28, 23, 42, 24, 64, 75, 19, 26, 27,253, # f0 - ].freeze - - # Model Table: - # total sequences: 100% - # first 512 sequences: 98.2851% - # first 1024 sequences:1.7001% - # rest sequences: 0.0359% - # negative sequences: 0.0148% - GreekLangModel = [ - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,3,2,2,3,3,3,3,3,3,3,3,1,3,3,3,0,2,2,3,3,0,3,0,3,2,0,3,3,3,0, - 3,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,3,3,3,3,3,0,3,3,0,3,2,3,3,0,3,2,3,3,3,0,0,3,0,3,0,3,3,2,0,0,0, - 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0, - 0,2,3,2,2,3,3,3,3,3,3,3,3,0,3,3,3,3,0,2,3,3,0,3,3,3,3,2,3,3,3,0, - 2,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,0,2,1,3,3,3,3,2,3,3,2,3,3,2,0, - 0,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,3,3,3,3,0,3,3,3,3,3,3,0,3,3,0,3,3,3,3,3,3,3,3,3,3,0,3,2,3,3,0, - 2,0,1,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, - 0,3,3,3,3,3,2,3,0,0,0,0,3,3,0,3,1,3,3,3,0,3,3,0,3,3,3,3,0,0,0,0, - 2,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,3,3,3,3,3,0,3,0,3,3,3,3,3,0,3,2,2,2,3,0,2,3,3,3,3,3,2,3,3,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,3,3,3,3,3,3,2,2,2,3,3,3,3,0,3,1,3,3,3,3,2,3,3,3,3,3,3,3,2,2,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,3,3,3,3,3,2,0,3,0,0,0,3,3,2,3,3,3,3,3,0,0,3,2,3,0,2,3,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,3,0,3,3,3,3,0,0,3,3,0,2,3,0,3,0,3,3,3,0,0,3,0,3,0,2,2,3,3,0,0, - 0,0,1,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,3,3,3,3,3,2,0,3,2,3,3,3,3,0,3,3,3,3,3,0,3,3,2,3,2,3,3,2,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,3,3,2,3,2,3,3,3,3,3,3,0,2,3,2,3,2,2,2,3,2,3,3,2,3,0,2,2,2,3,0, - 2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,3,0,0,0,3,3,3,2,3,3,0,0,3,0,3,0,0,0,3,2,0,3,0,3,0,0,2,0,2,0, - 0,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,3,3,3,3,0,3,3,3,3,3,3,0,3,3,0,3,0,0,0,3,3,0,3,3,3,0,0,1,2,3,0, - 3,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,3,3,3,3,3,2,0,0,3,2,2,3,3,0,3,3,3,3,3,2,1,3,0,3,2,3,3,2,1,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,3,3,0,2,3,3,3,3,3,3,0,0,3,0,3,0,0,0,3,3,0,3,2,3,0,0,3,3,3,0, - 3,0,0,0,2,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,3,3,3,3,0,3,3,3,3,3,3,0,0,3,0,3,0,0,0,3,2,0,3,2,3,0,0,3,2,3,0, - 2,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,3,1,2,2,3,3,3,3,3,3,0,2,3,0,3,0,0,0,3,3,0,3,0,2,0,0,2,3,1,0, - 2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,3,0,3,3,3,3,0,3,0,3,3,2,3,0,3,3,3,3,3,3,0,3,3,3,0,2,3,0,0,3,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,3,0,3,3,3,0,0,3,0,0,0,3,3,0,3,0,2,3,3,0,0,3,0,3,0,3,3,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,3,0,0,0,3,3,3,3,3,3,0,0,3,0,2,0,0,0,3,3,0,3,0,3,0,0,2,0,2,0, - 0,0,0,0,1,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,3,3,3,3,3,3,0,3,0,2,0,3,2,0,3,2,3,2,3,0,0,3,2,3,2,3,3,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,3,0,0,2,3,3,3,3,3,0,0,0,3,0,2,1,0,0,3,2,2,2,0,3,0,0,2,2,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,3,0,3,3,3,2,0,3,0,3,0,3,3,0,2,1,2,3,3,0,0,3,0,3,0,3,3,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,2,3,3,3,0,3,3,3,3,3,3,0,2,3,0,3,0,0,0,2,1,0,2,2,3,0,0,2,2,2,0, - 0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,3,0,0,2,3,3,3,2,3,0,0,1,3,0,2,0,0,0,0,3,0,1,0,2,0,0,1,1,1,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,3,3,3,3,3,1,0,3,0,0,0,3,2,0,3,2,3,3,3,0,0,3,0,3,2,2,2,1,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,3,0,3,3,3,0,0,3,0,0,0,0,2,0,2,3,3,2,2,2,2,3,0,2,0,2,2,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,3,3,3,3,2,0,0,0,0,0,0,2,3,0,2,0,2,3,2,0,0,3,0,3,0,3,1,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,3,2,3,3,2,2,3,0,2,0,3,0,0,0,2,0,0,0,0,1,2,0,2,0,2,0, - 0,2,0,2,0,2,2,0,0,1,0,2,2,2,0,2,2,2,0,2,2,2,0,0,2,0,0,1,0,0,0,0, - 0,2,0,3,3,2,0,0,0,0,0,0,1,3,0,2,0,2,2,2,0,0,2,0,3,0,0,2,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,3,0,2,3,2,0,2,2,0,2,0,2,2,0,2,0,2,2,2,0,0,0,0,0,0,2,3,0,0,0,2, - 0,1,2,0,0,0,0,2,2,0,0,0,2,1,0,2,2,0,0,0,0,0,0,1,0,2,0,0,0,0,0,0, - 0,0,2,1,0,2,3,2,2,3,2,3,2,0,0,3,3,3,0,0,3,2,0,0,0,1,1,0,2,0,2,2, - 0,2,0,2,0,2,2,0,0,2,0,2,2,2,0,2,2,2,2,0,0,2,0,0,0,2,0,1,0,0,0,0, - 0,3,0,3,3,2,2,0,3,0,0,0,2,2,0,2,2,2,1,2,0,0,1,2,2,0,0,3,0,0,0,2, - 0,1,2,0,0,0,1,2,0,0,0,0,0,0,0,2,2,0,1,0,0,2,0,0,0,2,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,2,3,3,2,2,0,0,0,2,0,2,3,3,0,2,0,0,0,0,0,0,2,2,2,0,2,2,0,2,0,2, - 0,2,2,0,0,2,2,2,2,1,0,0,2,2,0,2,0,0,2,0,0,0,0,0,0,2,0,0,0,0,0,0, - 0,2,0,3,2,3,0,0,0,3,0,0,2,2,0,2,0,2,2,2,0,0,2,0,0,0,0,0,0,0,0,2, - 0,0,2,2,0,0,2,2,2,0,0,0,0,0,0,2,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,2,0,0,3,2,0,2,2,2,2,2,0,0,0,2,0,0,0,0,2,0,1,0,0,2,0,1,0,0,0, - 0,2,2,2,0,2,2,0,1,2,0,2,2,2,0,2,2,2,2,1,2,2,0,0,2,0,0,0,0,0,0,0, - 0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, - 0,2,0,2,0,2,2,0,0,0,0,1,2,1,0,0,2,2,0,0,2,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,3,2,3,0,0,2,0,0,0,2,2,0,2,0,0,0,1,0,0,2,0,2,0,2,2,0,0,0,0, - 0,0,2,0,0,0,0,2,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0, - 0,2,2,3,2,2,0,0,0,0,0,0,1,3,0,2,0,2,2,0,0,0,1,0,2,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,2,0,2,0,3,2,0,2,0,0,0,0,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, - 0,0,2,0,0,0,0,1,1,0,0,2,1,2,0,2,2,0,1,0,0,1,0,0,0,2,0,0,0,0,0,0, - 0,3,0,2,2,2,0,0,2,0,0,0,2,0,0,0,2,3,0,2,0,0,0,0,0,0,2,2,0,0,0,2, - 0,1,2,0,0,0,1,2,2,1,0,0,0,2,0,0,2,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,2,1,2,0,2,2,0,2,0,0,2,0,0,0,0,1,2,1,0,2,1,0,0,0,0,0,0,0,0,0,0, - 0,0,2,0,0,0,3,1,2,2,0,2,0,0,0,0,2,0,0,0,2,0,0,3,0,0,0,0,2,2,2,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,2,1,0,2,0,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,1,0,0,0,0,0,0,2, - 0,2,2,0,0,2,2,2,2,2,0,1,2,0,0,0,2,2,0,1,0,2,0,0,2,2,0,0,0,0,0,0, - 0,0,0,0,1,0,0,0,0,0,0,0,3,0,0,2,0,0,0,0,0,0,0,0,2,0,2,0,0,0,0,2, - 0,1,2,0,0,0,0,2,2,1,0,1,0,1,0,2,2,2,1,0,0,0,0,0,0,1,0,0,0,0,0,0, - 0,2,0,1,2,0,0,0,0,0,0,0,0,0,0,2,0,0,2,2,0,0,0,0,1,0,0,0,0,0,0,2, - 0,2,2,0,0,0,0,2,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,2,0,0,0, - 0,2,2,2,2,0,0,0,3,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,2,0,0,0,0,0,0,1, - 0,0,2,0,0,0,0,1,2,0,0,0,0,0,0,2,2,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0, - 0,2,0,2,2,2,0,0,2,0,0,0,0,0,0,0,2,2,2,0,0,0,2,0,0,0,0,0,0,0,0,2, - 0,0,1,0,0,0,0,2,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0, - 0,3,0,2,0,0,0,0,0,0,0,0,2,0,0,0,0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,2, - 0,0,2,0,0,0,0,2,2,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,2,0,2,2,1,0,0,0,0,0,0,2,0,0,2,0,2,2,2,0,0,0,0,0,0,2,0,0,0,0,2, - 0,0,2,0,0,2,0,2,2,0,0,0,0,2,0,2,0,0,0,0,0,2,0,0,0,2,0,0,0,0,0,0, - 0,0,3,0,0,0,2,2,0,2,2,0,0,0,0,0,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,2,0,0,0,0,0, - 0,2,2,2,2,2,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1, - 0,0,0,0,0,0,0,2,1,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,2,2,0,0,0,0,0,2,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, - 0,2,0,0,0,2,0,0,0,0,0,1,0,0,0,0,2,2,0,0,0,1,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,2,0,0,0, - 0,2,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,2,0,2,0,0,0, - 0,0,0,0,0,0,0,0,2,1,0,0,0,0,0,0,2,0,0,0,1,2,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - ].freeze - - Latin7GreekModel = { - 'charToOrderMap' => Latin7_CharToOrderMap, - 'precedenceMatrix' => GreekLangModel, - 'mTypicalPositiveRatio' => 0.982851, - 'keepEnglishLetter' => false, - 'charsetName' => "ISO-8859-7" - }.freeze - - Win1253GreekModel = { - 'charToOrderMap' => Win1253_CharToOrderMap, - 'precedenceMatrix' => GreekLangModel, - 'mTypicalPositiveRatio' => 0.982851, - 'keepEnglishLetter' => false, - 'charsetName' => "windows-1253" - }.freeze -end diff --git a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/langhebrewmodel.rb b/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/langhebrewmodel.rb deleted file mode 100644 index 6ae49b17..00000000 --- a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/langhebrewmodel.rb +++ /dev/null @@ -1,202 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Universal charset detector code. -# -# The Initial Developer of the Original Code is -# Simon Montagu -# Portions created by the Initial Developer are Copyright (C) 2005 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Jeff Hodges - port to Ruby -# Mark Pilgrim - port to Python -# Shy Shalom - original C code -# Shoshannah Forbes - original C code (?) -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -module CharDet -# 255: Control characters that usually does not exist in any text -# 254: Carriage/Return -# 253: symbol (punctuation) that does not belong to word -# 252: 0 - 9 - -# Windows-1255 language model -# Character Mapping Table: -Win1255_CharToOrderMap = [ -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 -253, 69, 91, 79, 80, 92, 89, 97, 90, 68,111,112, 82, 73, 95, 85, # 40 - 78,121, 86, 71, 67,102,107, 84,114,103,115,253,253,253,253,253, # 50 -253, 50, 74, 60, 61, 42, 76, 70, 64, 53,105, 93, 56, 65, 54, 49, # 60 - 66,110, 51, 43, 44, 63, 81, 77, 98, 75,108,253,253,253,253,253, # 70 -124,202,203,204,205, 40, 58,206,207,208,209,210,211,212,213,214, -215, 83, 52, 47, 46, 72, 32, 94,216,113,217,109,218,219,220,221, - 34,116,222,118,100,223,224,117,119,104,125,225,226, 87, 99,227, -106,122,123,228, 55,229,230,101,231,232,120,233, 48, 39, 57,234, - 30, 59, 41, 88, 33, 37, 36, 31, 29, 35,235, 62, 28,236,126,237, -238, 38, 45,239,240,241,242,243,127,244,245,246,247,248,249,250, - 9, 8, 20, 16, 3, 2, 24, 14, 22, 1, 25, 15, 4, 11, 6, 23, - 12, 19, 13, 26, 18, 27, 21, 17, 7, 10, 5,251,252,128, 96,253, -].freeze - -# Model Table: -# total sequences: 100% -# first 512 sequences: 98.4004% -# first 1024 sequences: 1.5981% -# rest sequences: 0.087% -# negative sequences: 0.0015% -HebrewLangModel = [ -0,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,2,3,2,1,2,0,1,0,0, -3,0,3,1,0,0,1,3,2,0,1,1,2,0,2,2,2,1,1,1,1,2,1,1,1,2,0,0,2,2,0,1, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2, -1,2,1,2,1,2,0,0,2,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2, -1,2,1,3,1,1,0,0,2,0,0,0,1,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,0,1,2,2,1,3, -1,2,1,1,2,2,0,0,2,2,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,1,0,1,1,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,3,2, -1,2,1,2,2,2,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,3,2,2,3,2,2,2,1,2,2,2,2, -1,2,1,1,2,2,0,1,2,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,0,2,2,2,2,2, -0,2,0,2,2,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,0,2,2,2, -0,2,1,2,2,2,0,0,2,1,0,0,0,0,1,0,1,0,0,0,0,0,0,2,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,1,2,3,2,2,2, -1,2,1,2,2,2,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,1,0, -3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,1,0,2,0,2, -0,2,1,2,2,2,0,0,1,2,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,2,0,0,1,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,3,2,2,3,2,1,2,1,1,1, -0,1,1,1,1,1,3,0,1,0,0,0,0,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, -3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,0,0,1,0,0,1,0,0,0,0, -0,0,1,0,0,0,0,0,2,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2, -0,2,0,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,3,2,3,3,3,2,1,2,3,3,2,3,3,3,3,2,3,2,1,2,0,2,1,2, -0,2,0,2,2,2,0,0,1,2,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0, -3,3,3,3,3,3,3,3,3,2,3,3,3,1,2,2,3,3,2,3,2,3,2,2,3,1,2,2,0,2,2,2, -0,2,1,2,2,2,0,0,1,2,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,1,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,2,2,2,3,3,3,3,1,3,2,2,2, -0,2,0,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,2,3,2,2,2,1,2,2,0,2,2,2,2, -0,2,0,2,2,2,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,1,3,2,3,3,2,3,3,2,2,1,2,2,2,2,2,2, -0,2,1,2,1,2,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,2,3,2,3,3,2,3,3,3,3,2,3,2,3,3,3,3,3,2,2,2,2,2,2,2,1, -0,2,0,1,2,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,3,2,1,2,3,3,3,3,3,3,3,2,3,2,3,2,1,2,3,0,2,1,2,2, -0,2,1,1,2,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,2,0, -3,3,3,3,3,3,3,3,3,2,3,3,3,3,2,1,3,1,2,2,2,1,2,3,3,1,2,1,2,2,2,2, -0,1,1,1,1,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,0,2,3,3,3,1,3,3,3,1,2,2,2,2,1,1,2,2,2,2,2,2, -0,2,0,1,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,2,3,3,3,2,2,3,3,3,2,1,2,3,2,3,2,2,2,2,1,2,1,1,1,2,2, -0,2,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, -3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,1,0,0,0,0,0, -1,0,1,0,0,0,0,0,2,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,2,3,3,2,3,1,2,2,2,2,3,2,3,1,1,2,2,1,2,2,1,1,0,2,2,2,2, -0,1,0,1,2,2,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0, -3,0,0,1,1,0,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,2,0, -0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,0,1,0,1,0,1,1,0,1,1,0,0,0,1,1,0,1,1,1,0,0,0,0,0,0,1,0,0,0,0,0, -0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,0,0,0,1,1,0,1,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, -3,2,2,1,2,2,2,2,2,2,2,1,2,2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,0,3,3,3, -0,3,0,2,2,2,2,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, -2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,2,2,2,1,1,1,2,0,1, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,0,2,2,0,0,0,0,0,0, -0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,3,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,0,2,1,0, -0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, -0,3,1,1,2,2,2,2,2,1,2,2,2,1,1,2,2,2,2,2,2,2,1,2,2,1,0,1,1,1,1,0, -0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,2,1,1,1,1,2,1,1,2,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0, -0,0,2,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,1,0,0, -2,1,1,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,1,2,1,2,1,1,1,1,0,0,0,0, -0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,2,1,2,2,2,2,2,2,2,2,2,2,1,2,1,2,1,1,2,1,1,1,2,1,2,1,2,0,1,0,1, -0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,3,1,2,2,2,1,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,2,1,2,1,1,0,1,0,1, -0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,1,2,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2, -0,2,0,1,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, -3,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,1,1,1,1,1,1,1,0,1,1,0,1,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,2,0,1,1,1,0,1,0,0,0,1,1,0,1,1,0,0,0,0,0,1,1,0,0, -0,1,1,1,2,1,2,2,2,0,2,0,2,0,1,1,2,1,1,1,1,2,1,0,1,1,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,0,1,0,0,0,0,0,1,0,1,2,2,0,1,0,0,1,1,2,2,1,2,0,2,0,0,0,1,2,0,1, -2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,2,0,2,1,2,0,2,0,0,1,1,1,1,1,1,0,1,0,0,0,1,0,0,1, -2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,1,0,0,0,0,0,1,0,2,1,1,0,1,0,0,1,1,1,2,2,0,0,1,0,0,0,1,0,0,1, -1,1,2,1,0,1,1,1,0,1,0,1,1,1,1,0,0,0,1,0,1,0,0,0,0,0,0,0,0,2,2,1, -0,2,0,1,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,1,0,0,1,0,1,1,1,1,0,0,0,0,0,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,1,1,1,1,1,1,1,1,2,1,0,1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,1,1,0,1,1,0,1,0,0,0,1,1,0,1, -2,0,1,0,1,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,1,0,1,1,1,0,1,0,0,1,1,2,1,1,2,0,1,0,0,0,1,1,0,1, -1,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,1,0,1,1,2,0,1,0,0,0,0,2,1,1,2,0,2,0,0,0,1,1,0,1, -1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,1,0,2,1,1,0,1,0,0,2,2,1,2,1,1,0,1,0,0,0,1,1,0,1, -2,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,1,2,2,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0,1,0,1, -1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,1,2,2,0,0,0,0,2,1,1,1,0,2,1,1,0,0,0,2,1,0,1, -1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,1,0,1,1,2,0,1,0,0,1,1,0,2,1,1,0,1,0,0,0,1,1,0,1, -2,2,1,1,1,0,1,1,0,1,1,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,1,0,2,1,1,0,1,0,0,1,1,0,1,2,1,0,2,0,0,0,1,1,0,1, -2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0, -0,1,0,0,2,0,2,1,1,0,1,0,1,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,0,0,1,0,0,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,1,0,1,1,2,0,1,0,0,1,1,1,0,1,0,0,1,0,0,0,1,0,0,1, -1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,0,0,0,0,0,0,0,1,0,1,1,0,0,1,0,0,2,1,1,1,1,1,0,1,0,0,0,0,1,0,1, -0,1,1,1,2,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,1,2,1,0,0,0,0,0,1,1,1,1,1,0,1,0,0,0,1,1,0,0, -].freeze - -Win1255HebrewModel = { - 'charToOrderMap' => Win1255_CharToOrderMap, - 'precedenceMatrix' => HebrewLangModel, - 'mTypicalPositiveRatio' => 0.984004, - 'keepEnglishLetter' => false, - 'charsetName' => "windows-1255" -}.freeze -end diff --git a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/langhungarianmodel.rb b/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/langhungarianmodel.rb deleted file mode 100644 index 11be1425..00000000 --- a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/langhungarianmodel.rb +++ /dev/null @@ -1,226 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Jeff Hodges - port to Ruby -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -module CharDet -# 255: Control characters that usually does not exist in any text -# 254: Carriage/Return -# 253: symbol (punctuation) that does not belong to word -# 252: 0 - 9 - -# Character Mapping Table: -Latin2_HungarianCharToOrderMap = [ -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 -253, 28, 40, 54, 45, 32, 50, 49, 38, 39, 53, 36, 41, 34, 35, 47, - 46, 71, 43, 33, 37, 57, 48, 64, 68, 55, 52,253,253,253,253,253, -253, 2, 18, 26, 17, 1, 27, 12, 20, 9, 22, 7, 6, 13, 4, 8, - 23, 67, 10, 5, 3, 21, 19, 65, 62, 16, 11,253,253,253,253,253, -159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174, -175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190, -191,192,193,194,195,196,197, 75,198,199,200,201,202,203,204,205, - 79,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220, -221, 51, 81,222, 78,223,224,225,226, 44,227,228,229, 61,230,231, -232,233,234, 58,235, 66, 59,236,237,238, 60, 69, 63,239,240,241, - 82, 14, 74,242, 70, 80,243, 72,244, 15, 83, 77, 84, 30, 76, 85, -245,246,247, 25, 73, 42, 24,248,249,250, 31, 56, 29,251,252,253, -].freeze - -Win1250HungarianCharToOrderMap = [ -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 -253, 28, 40, 54, 45, 32, 50, 49, 38, 39, 53, 36, 41, 34, 35, 47, - 46, 72, 43, 33, 37, 57, 48, 64, 68, 55, 52,253,253,253,253,253, -253, 2, 18, 26, 17, 1, 27, 12, 20, 9, 22, 7, 6, 13, 4, 8, - 23, 67, 10, 5, 3, 21, 19, 65, 62, 16, 11,253,253,253,253,253, -161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176, -177,178,179,180, 78,181, 69,182,183,184,185,186,187,188,189,190, -191,192,193,194,195,196,197, 76,198,199,200,201,202,203,204,205, - 81,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220, -221, 51, 83,222, 80,223,224,225,226, 44,227,228,229, 61,230,231, -232,233,234, 58,235, 66, 59,236,237,238, 60, 70, 63,239,240,241, - 84, 14, 75,242, 71, 82,243, 73,244, 15, 85, 79, 86, 30, 77, 87, -245,246,247, 25, 74, 42, 24,248,249,250, 31, 56, 29,251,252,253, -].freeze - -# Model Table: -# total sequences: 100% -# first 512 sequences: 94.7368% -# first 1024 sequences:5.2623% -# rest sequences: 0.8894% -# negative sequences: 0.0009% -HungarianLangModel = [ -0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, -3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,2,2,3,3,1,1,2,2,2,2,2,1,2, -3,2,2,3,3,3,3,3,2,3,3,3,3,3,3,1,2,3,3,3,3,2,3,3,1,1,3,3,0,1,1,1, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0, -3,2,1,3,3,3,3,3,2,3,3,3,3,3,1,1,2,3,3,3,3,3,3,3,1,1,3,2,0,1,1,1, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,3,3,3,1,1,2,3,3,3,1,3,3,3,3,3,1,3,3,2,2,0,3,2,3, -0,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0, -3,3,3,3,3,3,2,3,3,3,2,3,3,2,3,3,3,3,3,2,3,3,2,2,3,2,3,2,0,3,2,2, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0, -3,3,3,3,3,3,2,3,3,3,3,3,2,3,3,3,1,2,3,2,2,3,1,2,3,3,2,2,0,3,3,3, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,3,2,3,3,3,3,2,3,3,3,3,0,2,3,2, -0,0,0,1,1,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,3,3,3,1,1,1,3,3,2,1,3,2,2,3,2,1,3,2,2,1,0,3,3,1, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -3,2,2,3,3,3,3,3,1,2,3,3,3,3,1,2,1,3,3,3,3,2,2,3,1,1,3,2,0,1,1,1, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,2,1,3,3,3,3,3,2,2,1,3,3,3,0,1,1,2, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,2,3,3,3,2,0,3,2,3, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,1,0, -3,3,3,3,3,3,2,3,3,3,2,3,2,3,3,3,1,3,2,2,2,3,1,1,3,3,1,1,0,3,3,2, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,2,3,3,3,2,3,2,3,3,3,2,3,3,3,3,3,1,2,3,2,2,0,2,2,2, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -3,3,3,2,2,2,3,1,3,3,2,2,1,3,3,3,1,1,3,1,2,3,2,3,2,2,2,1,0,2,2,2, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0, -3,1,1,3,3,3,3,3,1,2,3,3,3,3,1,2,1,3,3,3,2,2,3,2,1,0,3,2,0,1,1,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,1,1,3,3,3,3,3,1,2,3,3,3,3,1,1,0,3,3,3,3,0,2,3,0,0,2,1,0,1,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,2,2,3,3,2,2,2,2,3,3,0,1,2,3,2,3,2,2,3,2,1,2,0,2,2,2, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0, -3,3,3,3,3,3,1,2,3,3,3,2,1,2,3,3,2,2,2,3,2,3,3,1,3,3,1,1,0,2,3,2, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -3,3,3,1,2,2,2,2,3,3,3,1,1,1,3,3,1,1,3,1,1,3,2,1,2,3,1,1,0,2,2,2, -0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -3,3,3,2,1,2,1,1,3,3,1,1,1,1,3,3,1,1,2,2,1,2,1,1,2,2,1,1,0,2,2,1, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -3,3,3,1,1,2,1,1,3,3,1,0,1,1,3,3,2,0,1,1,2,3,1,0,2,2,1,0,0,1,3,2, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -3,2,1,3,3,3,3,3,1,2,3,2,3,3,2,1,1,3,2,3,2,1,2,2,0,1,2,1,0,0,1,1, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0, -3,3,3,3,2,2,2,2,3,1,2,2,1,1,3,3,0,3,2,1,2,3,2,1,3,3,1,1,0,2,1,3, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -3,3,3,2,2,2,3,2,3,3,3,2,1,1,3,3,1,1,1,2,2,3,2,3,2,2,2,1,0,2,2,1, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -1,0,0,3,3,3,3,3,0,0,3,3,2,3,0,0,0,2,3,3,1,0,1,2,0,0,1,1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,1,2,3,3,3,3,3,1,2,3,3,2,2,1,1,0,3,3,2,2,1,2,2,1,0,2,2,0,1,1,1, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,2,2,1,3,1,2,3,3,2,2,1,1,2,2,1,1,1,1,3,2,1,1,1,1,2,1,0,1,2,1, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0, -2,3,3,1,1,1,1,1,3,3,3,0,1,1,3,3,1,1,1,1,1,2,2,0,3,1,1,2,0,2,1,1, -0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0, -3,1,0,1,2,1,2,2,0,1,2,3,1,2,0,0,0,2,1,1,1,1,1,2,0,0,1,1,0,0,0,0, -1,2,1,2,2,2,1,2,1,2,0,2,0,2,2,1,1,2,1,1,2,1,1,1,0,1,0,0,0,1,1,0, -1,1,1,2,3,2,3,3,0,1,2,2,3,1,0,1,0,2,1,2,2,0,1,1,0,0,1,1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,0,0,3,3,2,2,1,0,0,3,2,3,2,0,0,0,1,1,3,0,0,1,1,0,0,2,1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,1,1,2,2,3,3,1,0,1,3,2,3,1,1,1,0,1,1,1,1,1,3,1,0,0,2,2,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,1,1,1,2,2,2,1,0,1,2,3,3,2,0,0,0,2,1,1,1,2,1,1,1,0,1,1,1,0,0,0, -1,2,2,2,2,2,1,1,1,2,0,2,1,1,1,1,1,2,1,1,1,1,1,1,0,1,1,1,0,0,1,1, -3,2,2,1,0,0,1,1,2,2,0,3,0,1,2,1,1,0,0,1,1,1,0,1,1,1,1,0,2,1,1,1, -2,2,1,1,1,2,1,2,1,1,1,1,1,1,1,2,1,1,1,2,3,1,1,1,1,1,1,1,1,1,0,1, -2,3,3,0,1,0,0,0,3,3,1,0,0,1,2,2,1,0,0,0,0,2,0,0,1,1,1,0,2,1,1,1, -2,1,1,1,1,1,1,2,1,1,0,1,1,0,1,1,1,0,1,2,1,1,0,1,1,1,1,1,1,1,0,1, -2,3,3,0,1,0,0,0,2,2,0,0,0,0,1,2,2,0,0,0,0,1,0,0,1,1,0,0,2,0,1,0, -2,1,1,1,1,2,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,2,0,1,1,1,1,1,0,1, -3,2,2,0,1,0,1,0,2,3,2,0,0,1,2,2,1,0,0,1,1,1,0,0,2,1,0,1,2,2,1,1, -2,1,1,1,1,1,1,2,1,1,1,1,1,1,0,2,1,0,1,1,0,1,1,1,0,1,1,2,1,1,0,1, -2,2,2,0,0,1,0,0,2,2,1,1,0,0,2,1,1,0,0,0,1,2,0,0,2,1,0,0,2,1,1,1, -2,1,1,1,1,2,1,2,1,1,1,2,2,1,1,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,0,1, -1,2,3,0,0,0,1,0,3,2,1,0,0,1,2,1,1,0,0,0,0,2,1,0,1,1,0,0,2,1,2,1, -1,1,0,0,0,1,0,1,1,1,1,1,2,0,0,1,0,0,0,2,0,0,1,1,1,1,1,1,1,1,0,1, -3,0,0,2,1,2,2,1,0,0,2,1,2,2,0,0,0,2,1,1,1,0,1,1,0,0,1,1,2,0,0,0, -1,2,1,2,2,1,1,2,1,2,0,1,1,1,1,1,1,1,1,1,2,1,1,0,0,1,1,1,1,0,0,1, -1,3,2,0,0,0,1,0,2,2,2,0,0,0,2,2,1,0,0,0,0,3,1,1,1,1,0,0,2,1,1,1, -2,1,0,1,1,1,0,1,1,1,1,1,1,1,0,2,1,0,0,1,0,1,1,0,1,1,1,1,1,1,0,1, -2,3,2,0,0,0,1,0,2,2,0,0,0,0,2,1,1,0,0,0,0,2,1,0,1,1,0,0,2,1,1,0, -2,1,1,1,1,2,1,2,1,2,0,1,1,1,0,2,1,1,1,2,1,1,1,1,0,1,1,1,1,1,0,1, -3,1,1,2,2,2,3,2,1,1,2,2,1,1,0,1,0,2,2,1,1,1,1,1,0,0,1,1,0,1,1,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,2,2,0,0,0,0,0,2,2,0,0,0,0,2,2,1,0,0,0,1,1,0,0,1,2,0,0,2,1,1,1, -2,2,1,1,1,2,1,2,1,1,0,1,1,1,1,2,1,1,1,2,1,1,1,1,0,1,2,1,1,1,0,1, -1,0,0,1,2,3,2,1,0,0,2,0,1,1,0,0,0,1,1,1,1,0,1,1,0,0,1,0,0,0,0,0, -1,2,1,2,1,2,1,1,1,2,0,2,1,1,1,0,1,2,0,0,1,1,1,0,0,0,0,0,0,0,0,0, -2,3,2,0,0,0,0,0,1,1,2,1,0,0,1,1,1,0,0,0,0,2,0,0,1,1,0,0,2,1,1,1, -2,1,1,1,1,1,1,2,1,0,1,1,1,1,0,2,1,1,1,1,1,1,0,1,0,1,1,1,1,1,0,1, -1,2,2,0,1,1,1,0,2,2,2,0,0,0,3,2,1,0,0,0,1,1,0,0,1,1,0,1,1,1,0,0, -1,1,0,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,2,1,1,1,0,0,1,1,1,0,1,0,1, -2,1,0,2,1,1,2,2,1,1,2,1,1,1,0,0,0,1,1,0,1,1,1,1,0,0,1,1,1,0,0,0, -1,2,2,2,2,2,1,1,1,2,0,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,0,0,1,0, -1,2,3,0,0,0,1,0,2,2,0,0,0,0,2,2,0,0,0,0,0,1,0,0,1,0,0,0,2,0,1,0, -2,1,1,1,1,1,0,2,0,0,0,1,2,1,1,1,1,0,1,2,0,1,0,1,0,1,1,1,0,1,0,1, -2,2,2,0,0,0,1,0,2,1,2,0,0,0,1,1,2,0,0,0,0,1,0,0,1,1,0,0,2,1,0,1, -2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,0,1,1,1,1,1,0,1, -1,2,2,0,0,0,1,0,2,2,2,0,0,0,1,1,0,0,0,0,0,1,1,0,2,0,0,1,1,1,0,1, -1,0,1,1,1,1,1,1,0,1,1,1,1,0,0,1,0,0,1,1,0,1,0,1,1,1,1,1,0,0,0,1, -1,0,0,1,0,1,2,1,0,0,1,1,1,2,0,0,0,1,1,0,1,0,1,1,0,0,1,0,0,0,0,0, -0,2,1,2,1,1,1,1,1,2,0,2,0,1,1,0,1,2,1,0,1,1,1,0,0,0,0,0,0,1,0,0, -2,1,1,0,1,2,0,0,1,1,1,0,0,0,1,1,0,0,0,0,0,1,0,0,1,0,0,0,2,1,0,1, -2,2,1,1,1,1,1,2,1,1,0,1,1,1,1,2,1,1,1,2,1,1,0,1,0,1,1,1,1,1,0,1, -1,2,2,0,0,0,0,0,1,1,0,0,0,0,2,1,0,0,0,0,0,2,0,0,2,2,0,0,2,0,0,1, -2,1,1,1,1,1,1,1,0,1,1,0,1,1,0,1,0,0,0,1,1,1,1,0,0,1,1,1,1,0,0,1, -1,1,2,0,0,3,1,0,2,1,1,1,0,0,1,1,1,0,0,0,1,1,0,0,0,1,0,0,1,0,1,0, -1,2,1,0,1,1,1,2,1,1,0,1,1,1,1,1,0,0,0,1,1,1,1,1,0,1,0,0,0,1,0,0, -2,1,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,0,0,0,0,2,0,0,0, -2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,1,1,0,0,1,1,1,1,1,0,1, -2,1,1,1,2,1,1,1,0,1,1,2,1,0,0,0,0,1,1,1,1,0,1,0,0,0,0,1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,1,0,1,1,1,1,1,0,0,1,1,2,1,0,0,0,1,1,0,0,0,1,1,0,0,1,0,1,0,0,0, -1,2,1,1,1,1,1,1,1,1,0,1,0,1,1,1,1,1,1,0,1,1,1,0,0,0,0,0,0,1,0,0, -2,0,0,0,1,1,1,1,0,0,1,1,0,0,0,0,0,1,1,1,2,0,0,1,0,0,1,0,1,0,0,0, -0,1,1,1,1,1,1,1,1,2,0,1,1,1,1,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0, -1,0,0,1,1,1,1,1,0,0,2,1,0,1,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0, -0,1,1,1,1,1,1,0,1,1,0,1,0,1,1,0,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0, -1,0,0,1,1,1,0,0,0,0,1,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, -0,1,1,1,1,1,0,0,1,1,0,1,0,1,0,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0, -0,0,0,1,0,0,0,0,0,0,1,1,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,1,1,1,0,1,0,0,1,1,0,1,0,1,1,0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0, -2,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,0,0,1,0,0,1,0,1,0,1,1,1,0,0,1,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,0,0,1,1,1,1,0,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0, -0,1,1,1,1,1,1,0,1,1,0,1,0,1,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0, -].freeze - -Latin2HungarianModel = { - 'charToOrderMap' => Latin2_HungarianCharToOrderMap, - 'precedenceMatrix' => HungarianLangModel, - 'mTypicalPositiveRatio' => 0.947368, - 'keepEnglishLetter' => true, - 'charsetName' => "ISO-8859-2" -}.freeze - -Win1250HungarianModel = { - 'charToOrderMap' => Win1250HungarianCharToOrderMap, - 'precedenceMatrix' => HungarianLangModel, - 'mTypicalPositiveRatio' => 0.947368, - 'keepEnglishLetter' => true, - 'charsetName' => "windows-1250" -}.freeze -end diff --git a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/langthaimodel.rb b/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/langthaimodel.rb deleted file mode 100644 index 0cefc369..00000000 --- a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/langthaimodel.rb +++ /dev/null @@ -1,201 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Communicator client code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Jeff Hodges - port to Ruby -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -module CharDet -# 255: Control characters that usually does not exist in any text -# 254: Carriage/Return -# 253: symbol (punctuation) that does not belong to word -# 252: 0 - 9 - -# The following result for thai was collected from a limited sample (1M). - -# Character Mapping Table: -TIS620CharToOrderMap = [ -255,255,255,255,255,255,255,255,255,255,254,255,255,254,255,255, # 00 -255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, # 10 -253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253, # 20 -252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253, # 30 -253,182,106,107,100,183,184,185,101, 94,186,187,108,109,110,111, # 40 -188,189,190, 89, 95,112,113,191,192,193,194,253,253,253,253,253, # 50 -253, 64, 72, 73,114, 74,115,116,102, 81,201,117, 90,103, 78, 82, # 60 - 96,202, 91, 79, 84,104,105, 97, 98, 92,203,253,253,253,253,253, # 70 -209,210,211,212,213, 88,214,215,216,217,218,219,220,118,221,222, -223,224, 99, 85, 83,225,226,227,228,229,230,231,232,233,234,235, -236, 5, 30,237, 24,238, 75, 8, 26, 52, 34, 51,119, 47, 58, 57, - 49, 53, 55, 43, 20, 19, 44, 14, 48, 3, 17, 25, 39, 62, 31, 54, - 45, 9, 16, 2, 61, 15,239, 12, 42, 46, 18, 21, 76, 4, 66, 63, - 22, 10, 1, 36, 23, 13, 40, 27, 32, 35, 86,240,241,242,243,244, - 11, 28, 41, 29, 33,245, 50, 37, 6, 7, 67, 77, 38, 93,246,247, - 68, 56, 59, 65, 69, 60, 70, 80, 71, 87,248,249,250,251,252,253, -].freeze - -# Model Table: -# total sequences: 100% -# first 512 sequences: 92.6386% -# first 1024 sequences:7.3177% -# rest sequences: 1.0230% -# negative sequences: 0.0436% -ThaiLangModel = [ -0,1,3,3,3,3,0,0,3,3,0,3,3,0,3,3,3,3,3,3,3,3,0,0,3,3,3,0,3,3,3,3, -0,3,3,0,0,0,1,3,0,3,3,2,3,3,0,1,2,3,3,3,3,0,2,0,2,0,0,3,2,1,2,2, -3,0,3,3,2,3,0,0,3,3,0,3,3,0,3,3,3,3,3,3,3,3,3,0,3,2,3,0,2,2,2,3, -0,2,3,0,0,0,0,1,0,1,2,3,1,1,3,2,2,0,1,1,0,0,1,0,0,0,0,0,0,0,1,1, -3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,3,3,2,3,2,3,3,2,2,2, -3,1,2,3,0,3,3,2,2,1,2,3,3,1,2,0,1,3,0,1,0,0,1,0,0,0,0,0,0,0,1,1, -3,3,2,2,3,3,3,3,1,2,3,3,3,3,3,2,2,2,2,3,3,2,2,3,3,2,2,3,2,3,2,2, -3,3,1,2,3,1,2,2,3,3,1,0,2,1,0,0,3,1,2,1,0,0,1,0,0,0,0,0,0,1,0,1, -3,3,3,3,3,3,2,2,3,3,3,3,2,3,2,2,3,3,2,2,3,2,2,2,2,1,1,3,1,2,1,1, -3,2,1,0,2,1,0,1,0,1,1,0,1,1,0,0,1,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0, -3,3,3,2,3,2,3,3,2,2,3,2,3,3,2,3,1,1,2,3,2,2,2,3,2,2,2,2,2,1,2,1, -2,2,1,1,3,3,2,1,0,1,2,2,0,1,3,0,0,0,1,1,0,0,0,0,0,2,3,0,0,2,1,1, -3,3,2,3,3,2,0,0,3,3,0,3,3,0,2,2,3,1,2,2,1,1,1,0,2,2,2,0,2,2,1,1, -0,2,1,0,2,0,0,2,0,1,0,0,1,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,0, -3,3,2,3,3,2,0,0,3,3,0,2,3,0,2,1,2,2,2,2,1,2,0,0,2,2,2,0,2,2,1,1, -0,2,1,0,2,0,0,2,0,1,1,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0, -3,3,2,3,2,3,2,0,2,2,1,3,2,1,3,2,1,2,3,2,2,3,0,2,3,2,2,1,2,2,2,2, -1,2,2,0,0,0,0,2,0,1,2,0,1,1,1,0,1,0,3,1,1,0,0,0,0,0,0,0,0,0,1,0, -3,3,2,3,3,2,3,2,2,2,3,2,2,3,2,2,1,2,3,2,2,3,1,3,2,2,2,3,2,2,2,3, -3,2,1,3,0,1,1,1,0,2,1,1,1,1,1,0,1,0,1,1,0,0,0,0,0,0,0,0,0,2,0,0, -1,0,0,3,0,3,3,3,3,3,0,0,3,0,2,2,3,3,3,3,3,0,0,0,1,1,3,0,0,0,0,2, -0,0,1,0,0,0,0,0,0,0,2,3,0,0,0,3,0,2,0,0,0,0,0,3,0,0,0,0,0,0,0,0, -2,0,3,3,3,3,0,0,2,3,0,0,3,0,3,3,2,3,3,3,3,3,0,0,3,3,3,0,0,0,3,3, -0,0,3,0,0,0,0,2,0,0,2,1,1,3,0,0,1,0,0,2,3,0,1,0,0,0,0,0,0,0,1,0, -3,3,3,3,2,3,3,3,3,3,3,3,1,2,1,3,3,2,2,1,2,2,2,3,1,1,2,0,2,1,2,1, -2,2,1,0,0,0,1,1,0,1,0,1,1,0,0,0,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0, -3,0,2,1,2,3,3,3,0,2,0,2,2,0,2,1,3,2,2,1,2,1,0,0,2,2,1,0,2,1,2,2, -0,1,1,0,0,0,0,1,0,1,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,2,1,3,3,1,1,3,0,2,3,1,1,3,2,1,1,2,0,2,2,3,2,1,1,1,1,1,2, -3,0,0,1,3,1,2,1,2,0,3,0,0,0,1,0,3,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0, -3,3,1,1,3,2,3,3,3,1,3,2,1,3,2,1,3,2,2,2,2,1,3,3,1,2,1,3,1,2,3,0, -2,1,1,3,2,2,2,1,2,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2, -3,3,2,3,2,3,3,2,3,2,3,2,3,3,2,1,0,3,2,2,2,1,2,2,2,1,2,2,1,2,1,1, -2,2,2,3,0,1,3,1,1,1,1,0,1,1,0,2,1,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,2,3,2,2,1,1,3,2,3,2,3,2,0,3,2,2,1,2,0,2,2,2,1,2,2,2,2,1, -3,2,1,2,2,1,0,2,0,1,0,0,1,1,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,1, -3,3,3,3,3,2,3,1,2,3,3,2,2,3,0,1,1,2,0,3,3,2,2,3,0,1,1,3,0,0,0,0, -3,1,0,3,3,0,2,0,2,1,0,0,3,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,2,3,2,3,3,0,1,3,1,1,2,1,2,1,1,3,1,1,0,2,3,1,1,1,1,1,1,1,1, -3,1,1,2,2,2,2,1,1,1,0,0,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -3,2,2,1,1,2,1,3,3,2,3,2,2,3,2,2,3,1,2,2,1,2,0,3,2,1,2,2,2,2,2,1, -3,2,1,2,2,2,1,1,1,1,0,0,1,1,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,3,3,3,3,1,3,3,0,2,1,0,3,2,0,0,3,1,0,1,1,0,1,0,0,0,0,0,1, -1,0,0,1,0,3,2,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,0,2,2,2,3,0,0,1,3,0,3,2,0,3,2,2,3,3,3,3,3,1,0,2,2,2,0,2,2,1,2, -0,2,3,0,0,0,0,1,0,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1, -3,0,2,3,1,3,3,2,3,3,0,3,3,0,3,2,2,3,2,3,3,3,0,0,2,2,3,0,1,1,1,3, -0,0,3,0,0,0,2,2,0,1,3,0,1,2,2,2,3,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1, -3,2,3,3,2,0,3,3,2,2,3,1,3,2,1,3,2,0,1,2,2,0,2,3,2,1,0,3,0,0,0,0, -3,0,0,2,3,1,3,0,0,3,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,1,3,2,2,2,1,2,0,1,3,1,1,3,1,3,0,0,2,1,1,1,1,2,1,1,1,0,2,1,0,1, -1,2,0,0,0,3,1,1,0,0,0,0,1,0,1,0,0,1,0,1,0,0,0,0,0,3,1,0,0,0,1,0, -3,3,3,3,2,2,2,2,2,1,3,1,1,1,2,0,1,1,2,1,2,1,3,2,0,0,3,1,1,1,1,1, -3,1,0,2,3,0,0,0,3,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,2,3,0,3,3,0,2,0,0,0,0,0,0,0,3,0,0,1,0,0,0,0,0,0,0,0,0,0,0, -0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,2,3,1,3,0,0,1,2,0,0,2,0,3,3,2,3,3,3,2,3,0,0,2,2,2,0,0,0,2,2, -0,0,1,0,0,0,0,3,0,0,0,0,2,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, -0,0,0,3,0,2,0,0,0,0,0,0,0,0,0,0,1,2,3,1,3,3,0,0,1,0,3,0,0,0,0,0, -0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,1,2,3,1,2,3,1,0,3,0,2,2,1,0,2,1,1,2,0,1,0,0,1,1,1,1,0,1,0,0, -1,0,0,0,0,1,1,0,3,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,3,3,2,1,0,1,1,1,3,1,2,2,2,2,2,2,1,1,1,1,0,3,1,0,1,3,1,1,1,1, -1,1,0,2,0,1,3,1,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,2,0,1, -3,0,2,2,1,3,3,2,3,3,0,1,1,0,2,2,1,2,1,3,3,1,0,0,3,2,0,0,0,0,2,1, -0,1,0,0,0,0,1,2,0,1,1,3,1,1,2,2,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0, -0,0,3,0,0,1,0,0,0,3,0,0,3,0,3,1,0,1,1,1,3,2,0,0,0,3,0,0,0,0,2,0, -0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,2,0,0,0,0,0,0,0,0,0, -3,3,1,3,2,1,3,3,1,2,2,0,1,2,1,0,1,2,0,0,0,0,0,3,0,0,0,3,0,0,0,0, -3,0,0,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,0,1,2,0,3,3,3,2,2,0,1,1,0,1,3,0,0,0,2,2,0,0,0,0,3,1,0,1,0,0,0, -0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,0,2,3,1,2,0,0,2,1,0,3,1,0,1,2,0,1,1,1,1,3,0,0,3,1,1,0,2,2,1,1, -0,2,0,0,0,0,0,1,0,1,0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,0,0,3,1,2,0,0,2,2,0,1,2,0,1,0,1,3,1,2,1,0,0,0,2,0,3,0,0,0,1,0, -0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,0,1,1,2,2,0,0,0,2,0,2,1,0,1,1,0,1,1,1,2,1,0,0,1,1,1,0,2,1,1,1, -0,1,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1, -0,0,0,2,0,1,3,1,1,1,1,0,0,0,0,3,2,0,1,0,0,0,1,2,0,0,0,1,0,0,0,0, -0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,3,3,3,3,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,0,2,3,2,2,0,0,0,1,0,0,0,0,2,3,2,1,2,2,3,0,0,0,2,3,1,0,0,0,1,1, -0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,1,0,1,0,0,0,0,0,0,0,0,0, -3,3,2,2,0,1,0,0,0,0,2,0,2,0,1,0,0,0,1,1,0,0,0,2,1,0,1,0,1,1,0,0, -0,1,0,2,0,0,1,0,3,0,1,0,0,0,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,1,0,0,1,0,0,0,0,0,1,1,2,0,0,0,0,1,0,0,1,3,1,0,0,0,0,1,1,0,0, -0,1,0,0,0,0,3,0,0,0,0,0,0,3,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0, -3,3,1,1,1,1,2,3,0,0,2,1,1,1,1,1,0,2,1,1,0,0,0,2,1,0,1,2,1,1,0,1, -2,1,0,3,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,3,1,0,0,0,0,0,0,0,3,0,0,0,3,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1, -0,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,3,2,0,0,0,0,0,0,1,2,1,0,1,1,0,2,0,0,1,0,0,2,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,2,0,0,0,1,3,0,1,0,0,0,2,0,0,0,0,0,0,0,1,2,0,0,0,0,0, -3,3,0,0,1,1,2,0,0,1,2,1,0,1,1,1,0,1,1,0,0,2,1,1,0,1,0,0,1,1,1,0, -0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,2,2,1,0,0,0,0,1,0,0,0,0,3,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0, -2,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,3,0,0,1,1,0,0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -1,1,0,1,2,0,1,2,0,0,1,1,0,2,0,1,0,0,1,0,0,0,0,1,0,0,0,2,0,0,0,0, -1,0,0,1,0,1,1,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,1,0,0,0,0,0,0,0,1,1,0,1,1,0,2,1,3,0,0,0,0,1,1,0,0,0,0,0,0,0,3, -1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,0,1,0,1,0,0,2,0,0,2,0,0,1,1,2,0,0,1,1,0,0,0,1,0,0,0,1,1,0,0,0, -1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0, -1,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,1,1,0,0,0, -2,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,0,0,0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,3,0,0,0, -2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,1,0,0,0,0, -1,0,0,0,0,0,0,0,0,1,0,0,0,0,2,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,1,1,0,0,2,1,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -].freeze - -TIS620ThaiModel = { - 'charToOrderMap' => TIS620CharToOrderMap, - 'precedenceMatrix' => ThaiLangModel, - 'mTypicalPositiveRatio' => 0.926386, - 'keepEnglishLetter' => false, - 'charsetName' => "TIS-620" -}.freeze -end diff --git a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/latin1prober.rb b/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/latin1prober.rb deleted file mode 100644 index 56d8e45b..00000000 --- a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/latin1prober.rb +++ /dev/null @@ -1,147 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Universal charset detector code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 2001 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Jeff Hodges - port to Ruby -# Mark Pilgrim - port to Python -# Shy Shalom - original C code -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -module CharDet - FREQ_CAT_NUM = 4 - - UDF = 0 # undefined - OTH = 1 # other - ASC = 2 # ascii capital letter - ASS = 3 # ascii small letter - ACV = 4 # accent capital vowel - ACO = 5 # accent capital other - ASV = 6 # accent small vowel - ASO = 7 # accent small other - CLASS_NUM = 8 # total classes - - Latin1_CharToClass = [ - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 00 - 07 - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 08 - 0F - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 10 - 17 - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 18 - 1F - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 20 - 27 - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 28 - 2F - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 30 - 37 - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 38 - 3F - OTH, ASC, ASC, ASC, ASC, ASC, ASC, ASC, # 40 - 47 - ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC, # 48 - 4F - ASC, ASC, ASC, ASC, ASC, ASC, ASC, ASC, # 50 - 57 - ASC, ASC, ASC, OTH, OTH, OTH, OTH, OTH, # 58 - 5F - OTH, ASS, ASS, ASS, ASS, ASS, ASS, ASS, # 60 - 67 - ASS, ASS, ASS, ASS, ASS, ASS, ASS, ASS, # 68 - 6F - ASS, ASS, ASS, ASS, ASS, ASS, ASS, ASS, # 70 - 77 - ASS, ASS, ASS, OTH, OTH, OTH, OTH, OTH, # 78 - 7F - OTH, UDF, OTH, ASO, OTH, OTH, OTH, OTH, # 80 - 87 - OTH, OTH, ACO, OTH, ACO, UDF, ACO, UDF, # 88 - 8F - UDF, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # 90 - 97 - OTH, OTH, ASO, OTH, ASO, UDF, ASO, ACO, # 98 - 9F - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # A0 - A7 - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # A8 - AF - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # B0 - B7 - OTH, OTH, OTH, OTH, OTH, OTH, OTH, OTH, # B8 - BF - ACV, ACV, ACV, ACV, ACV, ACV, ACO, ACO, # C0 - C7 - ACV, ACV, ACV, ACV, ACV, ACV, ACV, ACV, # C8 - CF - ACO, ACO, ACV, ACV, ACV, ACV, ACV, OTH, # D0 - D7 - ACV, ACV, ACV, ACV, ACV, ACO, ACO, ACO, # D8 - DF - ASV, ASV, ASV, ASV, ASV, ASV, ASO, ASO, # E0 - E7 - ASV, ASV, ASV, ASV, ASV, ASV, ASV, ASV, # E8 - EF - ASO, ASO, ASV, ASV, ASV, ASV, ASV, OTH, # F0 - F7 - ASV, ASV, ASV, ASV, ASV, ASO, ASO, ASO, # F8 - FF - ].freeze - - # 0 : illegal - # 1 : very unlikely - # 2 : normal - # 3 : very likely - Latin1ClassModel = [ - # UDF OTH ASC ASS ACV ACO ASV ASO - 0, 0, 0, 0, 0, 0, 0, 0, # UDF - 0, 3, 3, 3, 3, 3, 3, 3, # OTH - 0, 3, 3, 3, 3, 3, 3, 3, # ASC - 0, 3, 3, 3, 1, 1, 3, 3, # ASS - 0, 3, 3, 3, 1, 2, 1, 2, # ACV - 0, 3, 3, 3, 3, 3, 3, 3, # ACO - 0, 3, 1, 3, 1, 1, 1, 3, # ASV - 0, 3, 1, 3, 1, 1, 3, 3, # ASO - ].freeze - - class Latin1Prober < CharSetProber - def initialize - super - reset() - end - - def reset - @lastCharClass = OTH - @freqCounter = [0] * FREQ_CAT_NUM - super - end - - def get_charset_name - return "windows-1252" - end - - def feed(aBuf) - aBuf = filter_with_english_letters(aBuf) - aBuf.each_byte do |b| - c = b.chr - charClass = Latin1_CharToClass[c.bytes.first] - freq = Latin1ClassModel[(@lastCharClass * CLASS_NUM) + charClass] - if freq == 0 - @state = ENotMe - break - end - @freqCounter[freq] += 1 - @lastCharClass = charClass - end - - return get_state() - end - - def get_confidence - if get_state() == ENotMe - return 0.01 - end - - total = @freqCounter.inject{|a,b| a+b} - if total < 0.01 - confidence = 0.0 - else - confidence = (@freqCounter[3] / total) - (@freqCounter[1] * 20.0 / total) - end - if confidence < 0.0 - confidence = 0.0 - end - # lower the confidence of latin1 so that other more accurate detector - # can take priority. - confidence = confidence * 0.5 - return confidence - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/mbcharsetprober.rb b/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/mbcharsetprober.rb deleted file mode 100644 index 60de6404..00000000 --- a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/mbcharsetprober.rb +++ /dev/null @@ -1,89 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Universal charset detector code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 2001 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Jeff Hodges - port to Ruby -# Mark Pilgrim - port to Python -# Shy Shalom - original C code -# Proofpoint, Inc. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -module CharDet - class MultiByteCharSetProber < CharSetProber - def initialize - super - @distributionAnalyzer = nil - @codingSM = nil - @lastChar = "\x00\x00" - end - - def reset - super - if @codingSM - @codingSM.reset() - end - if @distributionAnalyzer - @distributionAnalyzer.reset() - end - @lastChar = "\x00\x00" - end - - def get_charset_name - end - - def feed(aBuf) - aLen = aBuf.length - for i in (0...aLen) - codingState = @codingSM.next_state(aBuf[i, 1]) - if codingState == EError - $stderr << "#{get_charset_name} prober hit error at byte #{i}\n" if $debug - @state = ENotMe - break - elsif codingState == EItsMe - @state = EFoundIt - break - elsif codingState == EStart - charLen = @codingSM.get_current_charlen() - if i == 0 - @lastChar[1] = aBuf[0, 1] - @distributionAnalyzer.feed(@lastChar, charLen) - else - @distributionAnalyzer.feed(aBuf[i-1, 2], charLen) - end - end - end - @lastChar[0] = aBuf[aLen-1, 1] - - if get_state() == EDetecting - if @distributionAnalyzer.got_enough_data() and (get_confidence() > SHORTCUT_THRESHOLD) - @state = EFoundIt - end - end - return get_state() - end - - def get_confidence - return @distributionAnalyzer.get_confidence() - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/mbcsgroupprober.rb b/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/mbcsgroupprober.rb deleted file mode 100644 index 8346faa9..00000000 --- a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/mbcsgroupprober.rb +++ /dev/null @@ -1,47 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Universal charset detector code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 2001 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Jeff Hodges - port to Ruby -# Mark Pilgrim - port to Python -# Shy Shalom - original C code -# Proofpoint, Inc. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -module CharDet - class MBCSGroupProber < CharSetGroupProber - def initialize - super - @probers = [ - UTF8Prober.new, - SJISProber.new, - EUCJPProber.new, - GB18030Prober.new, - EUCKRProber.new, - Big5Prober.new, - EUCTWProber.new - ] - reset() - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/mbcssm.rb b/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/mbcssm.rb deleted file mode 100644 index b9e8a92a..00000000 --- a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/mbcssm.rb +++ /dev/null @@ -1,542 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is mozilla.org code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Jeff Hodges - port to Ruby -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -module CharDet - # BIG5 - - BIG5_cls = [ - 1,1,1,1,1,1,1,1, # 00 - 07 #allow 0x00 as legal value - 1,1,1,1,1,1,0,0, # 08 - 0f - 1,1,1,1,1,1,1,1, # 10 - 17 - 1,1,1,0,1,1,1,1, # 18 - 1f - 1,1,1,1,1,1,1,1, # 20 - 27 - 1,1,1,1,1,1,1,1, # 28 - 2f - 1,1,1,1,1,1,1,1, # 30 - 37 - 1,1,1,1,1,1,1,1, # 38 - 3f - 2,2,2,2,2,2,2,2, # 40 - 47 - 2,2,2,2,2,2,2,2, # 48 - 4f - 2,2,2,2,2,2,2,2, # 50 - 57 - 2,2,2,2,2,2,2,2, # 58 - 5f - 2,2,2,2,2,2,2,2, # 60 - 67 - 2,2,2,2,2,2,2,2, # 68 - 6f - 2,2,2,2,2,2,2,2, # 70 - 77 - 2,2,2,2,2,2,2,1, # 78 - 7f - 4,4,4,4,4,4,4,4, # 80 - 87 - 4,4,4,4,4,4,4,4, # 88 - 8f - 4,4,4,4,4,4,4,4, # 90 - 97 - 4,4,4,4,4,4,4,4, # 98 - 9f - 4,3,3,3,3,3,3,3, # a0 - a7 - 3,3,3,3,3,3,3,3, # a8 - af - 3,3,3,3,3,3,3,3, # b0 - b7 - 3,3,3,3,3,3,3,3, # b8 - bf - 3,3,3,3,3,3,3,3, # c0 - c7 - 3,3,3,3,3,3,3,3, # c8 - cf - 3,3,3,3,3,3,3,3, # d0 - d7 - 3,3,3,3,3,3,3,3, # d8 - df - 3,3,3,3,3,3,3,3, # e0 - e7 - 3,3,3,3,3,3,3,3, # e8 - ef - 3,3,3,3,3,3,3,3, # f0 - f7 - 3,3,3,3,3,3,3,0 # f8 - ff - ].freeze - - BIG5_st = [ - EError,EStart,EStart, 3,EError,EError,EError,EError,#00-07 - EError,EError,EItsMe,EItsMe,EItsMe,EItsMe,EItsMe,EError,#08-0f - EError,EStart,EStart,EStart,EStart,EStart,EStart,EStart #10-17 - ].freeze - - Big5CharLenTable = [0, 1, 1, 2, 0].freeze - - Big5SMModel = {'classTable' => BIG5_cls, - 'classFactor' => 5, - 'stateTable' => BIG5_st, - 'charLenTable' => Big5CharLenTable, - 'name' => 'Big5' - }.freeze - - # EUC-JP - - EUCJP_cls = [ - 4,4,4,4,4,4,4,4, # 00 - 07 - 4,4,4,4,4,4,5,5, # 08 - 0f - 4,4,4,4,4,4,4,4, # 10 - 17 - 4,4,4,5,4,4,4,4, # 18 - 1f - 4,4,4,4,4,4,4,4, # 20 - 27 - 4,4,4,4,4,4,4,4, # 28 - 2f - 4,4,4,4,4,4,4,4, # 30 - 37 - 4,4,4,4,4,4,4,4, # 38 - 3f - 4,4,4,4,4,4,4,4, # 40 - 47 - 4,4,4,4,4,4,4,4, # 48 - 4f - 4,4,4,4,4,4,4,4, # 50 - 57 - 4,4,4,4,4,4,4,4, # 58 - 5f - 4,4,4,4,4,4,4,4, # 60 - 67 - 4,4,4,4,4,4,4,4, # 68 - 6f - 4,4,4,4,4,4,4,4, # 70 - 77 - 4,4,4,4,4,4,4,4, # 78 - 7f - 5,5,5,5,5,5,5,5, # 80 - 87 - 5,5,5,5,5,5,1,3, # 88 - 8f - 5,5,5,5,5,5,5,5, # 90 - 97 - 5,5,5,5,5,5,5,5, # 98 - 9f - 5,2,2,2,2,2,2,2, # a0 - a7 - 2,2,2,2,2,2,2,2, # a8 - af - 2,2,2,2,2,2,2,2, # b0 - b7 - 2,2,2,2,2,2,2,2, # b8 - bf - 2,2,2,2,2,2,2,2, # c0 - c7 - 2,2,2,2,2,2,2,2, # c8 - cf - 2,2,2,2,2,2,2,2, # d0 - d7 - 2,2,2,2,2,2,2,2, # d8 - df - 0,0,0,0,0,0,0,0, # e0 - e7 - 0,0,0,0,0,0,0,0, # e8 - ef - 0,0,0,0,0,0,0,0, # f0 - f7 - 0,0,0,0,0,0,0,5 # f8 - ff - ].freeze - - EUCJP_st = [ - 3, 4, 3, 5,EStart,EError,EError,EError,#00-07 - EError,EError,EError,EError,EItsMe,EItsMe,EItsMe,EItsMe,#08-0f - EItsMe,EItsMe,EStart,EError,EStart,EError,EError,EError,#10-17 - EError,EError,EStart,EError,EError,EError, 3,EError,#18-1f - 3,EError,EError,EError,EStart,EStart,EStart,EStart #20-27 - ].freeze - - EUCJPCharLenTable = [2, 2, 2, 3, 1, 0].freeze - - EUCJPSMModel = {'classTable' => EUCJP_cls, - 'classFactor' => 6, - 'stateTable' => EUCJP_st, - 'charLenTable' => EUCJPCharLenTable, - 'name' => 'EUC-JP' - }.freeze - - # EUC-KR - - EUCKR_cls = [ - 1,1,1,1,1,1,1,1, # 00 - 07 - 1,1,1,1,1,1,0,0, # 08 - 0f - 1,1,1,1,1,1,1,1, # 10 - 17 - 1,1,1,0,1,1,1,1, # 18 - 1f - 1,1,1,1,1,1,1,1, # 20 - 27 - 1,1,1,1,1,1,1,1, # 28 - 2f - 1,1,1,1,1,1,1,1, # 30 - 37 - 1,1,1,1,1,1,1,1, # 38 - 3f - 1,1,1,1,1,1,1,1, # 40 - 47 - 1,1,1,1,1,1,1,1, # 48 - 4f - 1,1,1,1,1,1,1,1, # 50 - 57 - 1,1,1,1,1,1,1,1, # 58 - 5f - 1,1,1,1,1,1,1,1, # 60 - 67 - 1,1,1,1,1,1,1,1, # 68 - 6f - 1,1,1,1,1,1,1,1, # 70 - 77 - 1,1,1,1,1,1,1,1, # 78 - 7f - 0,0,0,0,0,0,0,0, # 80 - 87 - 0,0,0,0,0,0,0,0, # 88 - 8f - 0,0,0,0,0,0,0,0, # 90 - 97 - 0,0,0,0,0,0,0,0, # 98 - 9f - 0,2,2,2,2,2,2,2, # a0 - a7 - 2,2,2,2,2,3,3,3, # a8 - af - 2,2,2,2,2,2,2,2, # b0 - b7 - 2,2,2,2,2,2,2,2, # b8 - bf - 2,2,2,2,2,2,2,2, # c0 - c7 - 2,3,2,2,2,2,2,2, # c8 - cf - 2,2,2,2,2,2,2,2, # d0 - d7 - 2,2,2,2,2,2,2,2, # d8 - df - 2,2,2,2,2,2,2,2, # e0 - e7 - 2,2,2,2,2,2,2,2, # e8 - ef - 2,2,2,2,2,2,2,2, # f0 - f7 - 2,2,2,2,2,2,2,0 # f8 - ff - ].freeze - - EUCKR_st = [ - EError,EStart, 3,EError,EError,EError,EError,EError,#00-07 - EItsMe,EItsMe,EItsMe,EItsMe,EError,EError,EStart,EStart#08-0f - ].freeze - - EUCKRCharLenTable = [0, 1, 2, 0].freeze - - EUCKRSMModel = {'classTable' => EUCKR_cls, - 'classFactor' => 4, - 'stateTable' => EUCKR_st, - 'charLenTable' => EUCKRCharLenTable, - 'name' => 'EUC-KR' - }.freeze - - # EUC-TW - - EUCTW_cls = [ - 2,2,2,2,2,2,2,2, # 00 - 07 - 2,2,2,2,2,2,0,0, # 08 - 0f - 2,2,2,2,2,2,2,2, # 10 - 17 - 2,2,2,0,2,2,2,2, # 18 - 1f - 2,2,2,2,2,2,2,2, # 20 - 27 - 2,2,2,2,2,2,2,2, # 28 - 2f - 2,2,2,2,2,2,2,2, # 30 - 37 - 2,2,2,2,2,2,2,2, # 38 - 3f - 2,2,2,2,2,2,2,2, # 40 - 47 - 2,2,2,2,2,2,2,2, # 48 - 4f - 2,2,2,2,2,2,2,2, # 50 - 57 - 2,2,2,2,2,2,2,2, # 58 - 5f - 2,2,2,2,2,2,2,2, # 60 - 67 - 2,2,2,2,2,2,2,2, # 68 - 6f - 2,2,2,2,2,2,2,2, # 70 - 77 - 2,2,2,2,2,2,2,2, # 78 - 7f - 0,0,0,0,0,0,0,0, # 80 - 87 - 0,0,0,0,0,0,6,0, # 88 - 8f - 0,0,0,0,0,0,0,0, # 90 - 97 - 0,0,0,0,0,0,0,0, # 98 - 9f - 0,3,4,4,4,4,4,4, # a0 - a7 - 5,5,1,1,1,1,1,1, # a8 - af - 1,1,1,1,1,1,1,1, # b0 - b7 - 1,1,1,1,1,1,1,1, # b8 - bf - 1,1,3,1,3,3,3,3, # c0 - c7 - 3,3,3,3,3,3,3,3, # c8 - cf - 3,3,3,3,3,3,3,3, # d0 - d7 - 3,3,3,3,3,3,3,3, # d8 - df - 3,3,3,3,3,3,3,3, # e0 - e7 - 3,3,3,3,3,3,3,3, # e8 - ef - 3,3,3,3,3,3,3,3, # f0 - f7 - 3,3,3,3,3,3,3,0 # f8 - ff - ].freeze - - EUCTW_st = [ - EError,EError,EStart, 3, 3, 3, 4,EError,#00-07 - EError,EError,EError,EError,EError,EError,EItsMe,EItsMe,#08-0f - EItsMe,EItsMe,EItsMe,EItsMe,EItsMe,EError,EStart,EError,#10-17 - EStart,EStart,EStart,EError,EError,EError,EError,EError,#18-1f - 5,EError,EError,EError,EStart,EError,EStart,EStart,#20-27 - EStart,EError,EStart,EStart,EStart,EStart,EStart,EStart #28-2f - ].freeze - - EUCTWCharLenTable = [0, 0, 1, 2, 2, 2, 3].freeze - - EUCTWSMModel = {'classTable' => EUCTW_cls, - 'classFactor' => 7, - 'stateTable' => EUCTW_st, - 'charLenTable' => EUCTWCharLenTable, - 'name' => 'x-euc-tw' - }.freeze - - # GB18030 - - GB18030_cls = [ - 1,1,1,1,1,1,1,1, # 00 - 07 - 1,1,1,1,1,1,0,0, # 08 - 0f - 1,1,1,1,1,1,1,1, # 10 - 17 - 1,1,1,0,1,1,1,1, # 18 - 1f - 1,1,1,1,1,1,1,1, # 20 - 27 - 1,1,1,1,1,1,1,1, # 28 - 2f - 3,3,3,3,3,3,3,3, # 30 - 37 - 3,3,1,1,1,1,1,1, # 38 - 3f - 2,2,2,2,2,2,2,2, # 40 - 47 - 2,2,2,2,2,2,2,2, # 48 - 4f - 2,2,2,2,2,2,2,2, # 50 - 57 - 2,2,2,2,2,2,2,2, # 58 - 5f - 2,2,2,2,2,2,2,2, # 60 - 67 - 2,2,2,2,2,2,2,2, # 68 - 6f - 2,2,2,2,2,2,2,2, # 70 - 77 - 2,2,2,2,2,2,2,4, # 78 - 7f - 5,6,6,6,6,6,6,6, # 80 - 87 - 6,6,6,6,6,6,6,6, # 88 - 8f - 6,6,6,6,6,6,6,6, # 90 - 97 - 6,6,6,6,6,6,6,6, # 98 - 9f - 6,6,6,6,6,6,6,6, # a0 - a7 - 6,6,6,6,6,6,6,6, # a8 - af - 6,6,6,6,6,6,6,6, # b0 - b7 - 6,6,6,6,6,6,6,6, # b8 - bf - 6,6,6,6,6,6,6,6, # c0 - c7 - 6,6,6,6,6,6,6,6, # c8 - cf - 6,6,6,6,6,6,6,6, # d0 - d7 - 6,6,6,6,6,6,6,6, # d8 - df - 6,6,6,6,6,6,6,6, # e0 - e7 - 6,6,6,6,6,6,6,6, # e8 - ef - 6,6,6,6,6,6,6,6, # f0 - f7 - 6,6,6,6,6,6,6,0 # f8 - ff - ].freeze - - GB18030_st = [ - EError,EStart,EStart,EStart,EStart,EStart, 3,EError,#00-07 - EError,EError,EError,EError,EError,EError,EItsMe,EItsMe,#08-0f - EItsMe,EItsMe,EItsMe,EItsMe,EItsMe,EError,EError,EStart,#10-17 - 4,EError,EStart,EStart,EError,EError,EError,EError,#18-1f - EError,EError, 5,EError,EError,EError,EItsMe,EError,#20-27 - EError,EError,EStart,EStart,EStart,EStart,EStart,EStart#28-2f - ].freeze - - # To be accurate, the length of class 6 can be either 2 or 4. - # But it is not necessary to discriminate between the two since - # it is used for frequency analysis only, and we are validing - # each code range there as well. So it is safe to set it to be - # 2 here. - GB18030CharLenTable = [0, 1, 1, 1, 1, 1, 2].freeze - - GB18030SMModel = {'classTable' => GB18030_cls, - 'classFactor' => 7, - 'stateTable' => GB18030_st, - 'charLenTable' => GB18030CharLenTable, - 'name' => 'GB18030' - }.freeze - - # Shift_JIS - - SJIS_cls = [ - 1,1,1,1,1,1,1,1, # 00 - 07 - 1,1,1,1,1,1,0,0, # 08 - 0f - 1,1,1,1,1,1,1,1, # 10 - 17 - 1,1,1,0,1,1,1,1, # 18 - 1f - 1,1,1,1,1,1,1,1, # 20 - 27 - 1,1,1,1,1,1,1,1, # 28 - 2f - 1,1,1,1,1,1,1,1, # 30 - 37 - 1,1,1,1,1,1,1,1, # 38 - 3f - 2,2,2,2,2,2,2,2, # 40 - 47 - 2,2,2,2,2,2,2,2, # 48 - 4f - 2,2,2,2,2,2,2,2, # 50 - 57 - 2,2,2,2,2,2,2,2, # 58 - 5f - 2,2,2,2,2,2,2,2, # 60 - 67 - 2,2,2,2,2,2,2,2, # 68 - 6f - 2,2,2,2,2,2,2,2, # 70 - 77 - 2,2,2,2,2,2,2,1, # 78 - 7f - 3,3,3,3,3,3,3,3, # 80 - 87 - 3,3,3,3,3,3,3,3, # 88 - 8f - 3,3,3,3,3,3,3,3, # 90 - 97 - 3,3,3,3,3,3,3,3, # 98 - 9f - #0xa0 is illegal in sjis encoding, but some pages does - #contain such byte. We need to be more error forgiven. - 2,2,2,2,2,2,2,2, # a0 - a7 - 2,2,2,2,2,2,2,2, # a8 - af - 2,2,2,2,2,2,2,2, # b0 - b7 - 2,2,2,2,2,2,2,2, # b8 - bf - 2,2,2,2,2,2,2,2, # c0 - c7 - 2,2,2,2,2,2,2,2, # c8 - cf - 2,2,2,2,2,2,2,2, # d0 - d7 - 2,2,2,2,2,2,2,2, # d8 - df - 3,3,3,3,3,3,3,3, # e0 - e7 - 3,3,3,3,3,4,4,4, # e8 - ef - 4,4,4,4,4,4,4,4, # f0 - f7 - 4,4,4,4,4,0,0,0 # f8 - ff - ].freeze - - SJIS_st = [ - EError,EStart,EStart, 3,EError,EError,EError,EError,#00-07 - EError,EError,EError,EError,EItsMe,EItsMe,EItsMe,EItsMe,#08-0f - EItsMe,EItsMe,EError,EError,EStart,EStart,EStart,EStart#10-17 - ].freeze - - SJISCharLenTable = [0, 1, 1, 2, 0, 0].freeze - - SJISSMModel = {'classTable' => SJIS_cls, - 'classFactor' => 6, - 'stateTable' => SJIS_st, - 'charLenTable' => SJISCharLenTable, - 'name' => 'Shift_JIS' - }.freeze - - # UCS2-BE - - UCS2BE_cls = [ - 0,0,0,0,0,0,0,0, # 00 - 07 - 0,0,1,0,0,2,0,0, # 08 - 0f - 0,0,0,0,0,0,0,0, # 10 - 17 - 0,0,0,3,0,0,0,0, # 18 - 1f - 0,0,0,0,0,0,0,0, # 20 - 27 - 0,3,3,3,3,3,0,0, # 28 - 2f - 0,0,0,0,0,0,0,0, # 30 - 37 - 0,0,0,0,0,0,0,0, # 38 - 3f - 0,0,0,0,0,0,0,0, # 40 - 47 - 0,0,0,0,0,0,0,0, # 48 - 4f - 0,0,0,0,0,0,0,0, # 50 - 57 - 0,0,0,0,0,0,0,0, # 58 - 5f - 0,0,0,0,0,0,0,0, # 60 - 67 - 0,0,0,0,0,0,0,0, # 68 - 6f - 0,0,0,0,0,0,0,0, # 70 - 77 - 0,0,0,0,0,0,0,0, # 78 - 7f - 0,0,0,0,0,0,0,0, # 80 - 87 - 0,0,0,0,0,0,0,0, # 88 - 8f - 0,0,0,0,0,0,0,0, # 90 - 97 - 0,0,0,0,0,0,0,0, # 98 - 9f - 0,0,0,0,0,0,0,0, # a0 - a7 - 0,0,0,0,0,0,0,0, # a8 - af - 0,0,0,0,0,0,0,0, # b0 - b7 - 0,0,0,0,0,0,0,0, # b8 - bf - 0,0,0,0,0,0,0,0, # c0 - c7 - 0,0,0,0,0,0,0,0, # c8 - cf - 0,0,0,0,0,0,0,0, # d0 - d7 - 0,0,0,0,0,0,0,0, # d8 - df - 0,0,0,0,0,0,0,0, # e0 - e7 - 0,0,0,0,0,0,0,0, # e8 - ef - 0,0,0,0,0,0,0,0, # f0 - f7 - 0,0,0,0,0,0,4,5 # f8 - ff - ].freeze - - UCS2BE_st = [ - 5, 7, 7,EError, 4, 3,EError,EError,#00-07 - EError,EError,EError,EError,EItsMe,EItsMe,EItsMe,EItsMe,#08-0f - EItsMe,EItsMe, 6, 6, 6, 6,EError,EError,#10-17 - 6, 6, 6, 6, 6,EItsMe, 6, 6,#18-1f - 6, 6, 6, 6, 5, 7, 7,EError,#20-27 - 5, 8, 6, 6,EError, 6, 6, 6,#28-2f - 6, 6, 6, 6,EError,EError,EStart,EStart#30-37 - ].freeze - - UCS2BECharLenTable = [2, 2, 2, 0, 2, 2].freeze - - UCS2BESMModel = {'classTable' => UCS2BE_cls, - 'classFactor' => 6, - 'stateTable' => UCS2BE_st, - 'charLenTable' => UCS2BECharLenTable, - 'name' => 'UTF-16BE' - }.freeze - - # UCS2-LE - - UCS2LE_cls = [ - 0,0,0,0,0,0,0,0, # 00 - 07 - 0,0,1,0,0,2,0,0, # 08 - 0f - 0,0,0,0,0,0,0,0, # 10 - 17 - 0,0,0,3,0,0,0,0, # 18 - 1f - 0,0,0,0,0,0,0,0, # 20 - 27 - 0,3,3,3,3,3,0,0, # 28 - 2f - 0,0,0,0,0,0,0,0, # 30 - 37 - 0,0,0,0,0,0,0,0, # 38 - 3f - 0,0,0,0,0,0,0,0, # 40 - 47 - 0,0,0,0,0,0,0,0, # 48 - 4f - 0,0,0,0,0,0,0,0, # 50 - 57 - 0,0,0,0,0,0,0,0, # 58 - 5f - 0,0,0,0,0,0,0,0, # 60 - 67 - 0,0,0,0,0,0,0,0, # 68 - 6f - 0,0,0,0,0,0,0,0, # 70 - 77 - 0,0,0,0,0,0,0,0, # 78 - 7f - 0,0,0,0,0,0,0,0, # 80 - 87 - 0,0,0,0,0,0,0,0, # 88 - 8f - 0,0,0,0,0,0,0,0, # 90 - 97 - 0,0,0,0,0,0,0,0, # 98 - 9f - 0,0,0,0,0,0,0,0, # a0 - a7 - 0,0,0,0,0,0,0,0, # a8 - af - 0,0,0,0,0,0,0,0, # b0 - b7 - 0,0,0,0,0,0,0,0, # b8 - bf - 0,0,0,0,0,0,0,0, # c0 - c7 - 0,0,0,0,0,0,0,0, # c8 - cf - 0,0,0,0,0,0,0,0, # d0 - d7 - 0,0,0,0,0,0,0,0, # d8 - df - 0,0,0,0,0,0,0,0, # e0 - e7 - 0,0,0,0,0,0,0,0, # e8 - ef - 0,0,0,0,0,0,0,0, # f0 - f7 - 0,0,0,0,0,0,4,5 # f8 - ff - ].freeze - - UCS2LE_st = [ - 6, 6, 7, 6, 4, 3,EError,EError,#00-07 - EError,EError,EError,EError,EItsMe,EItsMe,EItsMe,EItsMe,#08-0f - EItsMe,EItsMe, 5, 5, 5,EError,EItsMe,EError,#10-17 - 5, 5, 5,EError, 5,EError, 6, 6,#18-1f - 7, 6, 8, 8, 5, 5, 5,EError,#20-27 - 5, 5, 5,EError,EError,EError, 5, 5,#28-2f - 5, 5, 5,EError, 5,EError,EStart,EStart#30-37 - ].freeze - - UCS2LECharLenTable = [2, 2, 2, 2, 2, 2].freeze - - UCS2LESMModel = {'classTable' => UCS2LE_cls, - 'classFactor' => 6, - 'stateTable' => UCS2LE_st, - 'charLenTable' => UCS2LECharLenTable, - 'name' => 'UTF-16LE' - }.freeze - - # UTF-8 - - UTF8_cls = [ - 1,1,1,1,1,1,1,1, # 00 - 07 #allow 0x00 as a legal value - 1,1,1,1,1,1,0,0, # 08 - 0f - 1,1,1,1,1,1,1,1, # 10 - 17 - 1,1,1,0,1,1,1,1, # 18 - 1f - 1,1,1,1,1,1,1,1, # 20 - 27 - 1,1,1,1,1,1,1,1, # 28 - 2f - 1,1,1,1,1,1,1,1, # 30 - 37 - 1,1,1,1,1,1,1,1, # 38 - 3f - 1,1,1,1,1,1,1,1, # 40 - 47 - 1,1,1,1,1,1,1,1, # 48 - 4f - 1,1,1,1,1,1,1,1, # 50 - 57 - 1,1,1,1,1,1,1,1, # 58 - 5f - 1,1,1,1,1,1,1,1, # 60 - 67 - 1,1,1,1,1,1,1,1, # 68 - 6f - 1,1,1,1,1,1,1,1, # 70 - 77 - 1,1,1,1,1,1,1,1, # 78 - 7f - 2,2,2,2,3,3,3,3, # 80 - 87 - 4,4,4,4,4,4,4,4, # 88 - 8f - 4,4,4,4,4,4,4,4, # 90 - 97 - 4,4,4,4,4,4,4,4, # 98 - 9f - 5,5,5,5,5,5,5,5, # a0 - a7 - 5,5,5,5,5,5,5,5, # a8 - af - 5,5,5,5,5,5,5,5, # b0 - b7 - 5,5,5,5,5,5,5,5, # b8 - bf - 0,0,6,6,6,6,6,6, # c0 - c7 - 6,6,6,6,6,6,6,6, # c8 - cf - 6,6,6,6,6,6,6,6, # d0 - d7 - 6,6,6,6,6,6,6,6, # d8 - df - 7,8,8,8,8,8,8,8, # e0 - e7 - 8,8,8,8,8,9,8,8, # e8 - ef - 10,11,11,11,11,11,11,11, # f0 - f7 - 12,13,13,13,14,15,0,0 # f8 - ff - ].freeze - - UTF8_st = [ - EError,EStart,EError,EError,EError,EError, 12, 10,#00-07 - 9, 11, 8, 7, 6, 5, 4, 3,#08-0f - EError,EError,EError,EError,EError,EError,EError,EError,#10-17 - EError,EError,EError,EError,EError,EError,EError,EError,#18-1f - EItsMe,EItsMe,EItsMe,EItsMe,EItsMe,EItsMe,EItsMe,EItsMe,#20-27 - EItsMe,EItsMe,EItsMe,EItsMe,EItsMe,EItsMe,EItsMe,EItsMe,#28-2f - EError,EError, 5, 5, 5, 5,EError,EError,#30-37 - EError,EError,EError,EError,EError,EError,EError,EError,#38-3f - EError,EError,EError, 5, 5, 5,EError,EError,#40-47 - EError,EError,EError,EError,EError,EError,EError,EError,#48-4f - EError,EError, 7, 7, 7, 7,EError,EError,#50-57 - EError,EError,EError,EError,EError,EError,EError,EError,#58-5f - EError,EError,EError,EError, 7, 7,EError,EError,#60-67 - EError,EError,EError,EError,EError,EError,EError,EError,#68-6f - EError,EError, 9, 9, 9, 9,EError,EError,#70-77 - EError,EError,EError,EError,EError,EError,EError,EError,#78-7f - EError,EError,EError,EError,EError, 9,EError,EError,#80-87 - EError,EError,EError,EError,EError,EError,EError,EError,#88-8f - EError,EError, 12, 12, 12, 12,EError,EError,#90-97 - EError,EError,EError,EError,EError,EError,EError,EError,#98-9f - EError,EError,EError,EError,EError, 12,EError,EError,#a0-a7 - EError,EError,EError,EError,EError,EError,EError,EError,#a8-af - EError,EError, 12, 12, 12,EError,EError,EError,#b0-b7 - EError,EError,EError,EError,EError,EError,EError,EError,#b8-bf - EError,EError,EStart,EStart,EStart,EStart,EError,EError,#c0-c7 - EError,EError,EError,EError,EError,EError,EError,EError#c8-cf - ].freeze - - UTF8CharLenTable = [0, 1, 0, 0, 0, 0, 2, 3, 3, 3, 4, 4, 5, 5, 6, 6].freeze - - UTF8SMModel = {'classTable' => UTF8_cls, - 'classFactor' => 16, - 'stateTable' => UTF8_st, - 'charLenTable' => UTF8CharLenTable, - 'name' => 'UTF-8' - }.freeze -end diff --git a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/sbcharsetprober.rb b/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/sbcharsetprober.rb deleted file mode 100644 index 973fcc83..00000000 --- a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/sbcharsetprober.rb +++ /dev/null @@ -1,122 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Universal charset detector code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 2001 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Jeff Hodges - port to Ruby -# Mark Pilgrim - port to Python -# Shy Shalom - original C code -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -module CharDet - SAMPLE_SIZE = 64 - SB_ENOUGH_REL_THRESHOLD = 1024 - POSITIVE_SHORTCUT_THRESHOLD = 0.95 - NEGATIVE_SHORTCUT_THRESHOLD = 0.05 - SYMBOL_CAT_ORDER = 250 - NUMBER_OF_SEQ_CAT = 4 - POSITIVE_CAT = NUMBER_OF_SEQ_CAT - 1 - #NEGATIVE_CAT = 0 - - class SingleByteCharSetProber < CharSetProber - def initialize(model, reversed=false, nameProber=nil) - super() - @model = model - @reversed = reversed # TRUE if we need to reverse every pair in the model lookup - @nameProber = nameProber # Optional auxiliary prober for name decision - reset() - end - - def reset - super() - @lastOrder = 255 # char order of last character - @seqCounters = [0] * NUMBER_OF_SEQ_CAT - @totalSeqs = 0 - @totalChar = 0 - @freqChar = 0 # characters that fall in our sampling range - end - - def get_charset_name - if @nameProber - return @nameProber.get_charset_name() - else - return @model['charsetName'] - end - end - - def feed(aBuf) - if !@model['keepEnglishLetter'] - aBuf = filter_without_english_letters(aBuf) - end - aLen = aBuf.length - if aLen == 0 - return get_state() - end - aBuf.each_byte do |b| - c = b.chr - order = @model['charToOrderMap'][c.bytes.first] - if order < SYMBOL_CAT_ORDER - @totalChar += 1 - end - if order < SAMPLE_SIZE - @freqChar += 1 - if @lastOrder < SAMPLE_SIZE - @totalSeqs += 1 - if !@reversed - @seqCounters[@model['precedenceMatrix'][(@lastOrder * SAMPLE_SIZE) + order]] += 1 - else # reverse the order of the letters in the lookup - @seqCounters[@model['precedenceMatrix'][(order * SAMPLE_SIZE) + @lastOrder]] += 1 - end - end - end - @lastOrder = order - end - - if get_state() == EDetecting - if @totalSeqs > SB_ENOUGH_REL_THRESHOLD - cf = get_confidence() - if cf > POSITIVE_SHORTCUT_THRESHOLD - $stderr << "#{@model['charsetName']} confidence = #{cf}, we have a winner\n" if $debug - @state = EFoundIt - elsif cf < NEGATIVE_SHORTCUT_THRESHOLD - $stderr << "#{@model['charsetName']} confidence = #{cf}, below negative shortcut threshold #{NEGATIVE_SHORTCUT_THRESHOLD}\n" if $debug - @state = ENotMe - end - end - end - - return get_state() - end - - def get_confidence - r = 0.01 - if @totalSeqs > 0 - r = (1.0 * @seqCounters[POSITIVE_CAT]) / @totalSeqs / @model['mTypicalPositiveRatio'] - r = r * @freqChar / @totalChar - if r >= 1.0 - r = 0.99 - end - end - return r - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/sbcsgroupprober.rb b/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/sbcsgroupprober.rb deleted file mode 100644 index 5999c6ff..00000000 --- a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/sbcsgroupprober.rb +++ /dev/null @@ -1,58 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Universal charset detector code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 2001 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Jeff Hodges - port to Ruby -# Mark Pilgrim - port to Python -# Shy Shalom - original C code -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -module CharDet - class SBCSGroupProber < CharSetGroupProber - def initialize - super - @probers = [ - SingleByteCharSetProber.new(Win1251CyrillicModel), - SingleByteCharSetProber.new(Koi8rModel), - SingleByteCharSetProber.new(Latin5CyrillicModel), - SingleByteCharSetProber.new(MacCyrillicModel), - SingleByteCharSetProber.new(Ibm866Model), - SingleByteCharSetProber.new(Ibm855Model), - SingleByteCharSetProber.new(Latin7GreekModel), - SingleByteCharSetProber.new(Win1253GreekModel), - SingleByteCharSetProber.new(Latin5BulgarianModel), - SingleByteCharSetProber.new(Win1251BulgarianModel), - SingleByteCharSetProber.new(Latin2HungarianModel), - SingleByteCharSetProber.new(Win1250HungarianModel), - SingleByteCharSetProber.new(TIS620ThaiModel), - ] - hebrewProber = HebrewProber.new() - logicalHebrewProber = SingleByteCharSetProber.new(Win1255HebrewModel, false, hebrewProber) - visualHebrewProber = SingleByteCharSetProber.new(Win1255HebrewModel, true, hebrewProber) - hebrewProber.set_model_probers(logicalHebrewProber, visualHebrewProber) - @probers += [hebrewProber, logicalHebrewProber, visualHebrewProber] - - reset() - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/sjisprober.rb b/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/sjisprober.rb deleted file mode 100644 index 3bdee6d8..00000000 --- a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/sjisprober.rb +++ /dev/null @@ -1,88 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is mozilla.org code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Jeff Hodges - port to Ruby -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -module CharDet - class SJISProber < MultiByteCharSetProber - def initialize - super() - @codingSM = CodingStateMachine.new(SJISSMModel) - @distributionAnalyzer = SJISDistributionAnalysis.new() - @contextAnalyzer = SJISContextAnalysis.new() - reset() - end - - def reset - super() - @contextAnalyzer.reset() - end - - def get_charset_name - return "SHIFT_JIS" - end - - def feed(aBuf) - aLen = aBuf.length - for i in (0...aLen) - codingState = @codingSM.next_state(aBuf[i,1]) - if codingState == EError - $stderr << "#{get_charset_name} prober hit error at byte #{i}\n" if $debug - @state = ENotMe - break - elsif codingState == EItsMe - @state = EFoundIt - break - elsif codingState == EStart - charLen = @codingSM.get_current_charlen() - if i == 0 - @lastChar[1] = aBuf[0, 1] - @contextAnalyzer.feed(@lastChar[2-charLen, 1], charLen) - @distributionAnalyzer.feed(@lastChar, charLen) - else - @contextAnalyzer.feed(aBuf[i+1-charLen, 2], charLen) - @distributionAnalyzer.feed(aBuf[i-1, 2], charLen) - end - end - end - - @lastChar[0] = aBuf[aLen-1, 1] - - if get_state() == EDetecting - if @contextAnalyzer.got_enough_data() and (get_confidence() > SHORTCUT_THRESHOLD) - @state = EFoundIt - end - end - - return get_state() - end - - def get_confidence - l = [@contextAnalyzer.get_confidence(), @distributionAnalyzer.get_confidence()] - return l.max - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/universaldetector.rb b/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/universaldetector.rb deleted file mode 100644 index cb2a2925..00000000 --- a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/universaldetector.rb +++ /dev/null @@ -1,179 +0,0 @@ -# encoding: US-ASCII -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is Mozilla Universal charset detector code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 2001 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Jeff Hodges - port to Ruby -# Mark Pilgrim - port to Python -# Shy Shalom - original C code -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -module CharDet - MINIMUM_DATA_THRESHOLD = 4 - MINIMUM_THRESHOLD = 0.20 - EPureAscii = 0 - EEscAscii = 1 - EHighbyte = 2 - - class UniversalDetector - attr_reader :done, :result - - def initialize - @highBitDetector = /[\x80-\xFF]/n - @escDetector = /(\033|\~\{)/n - @escCharSetProber = nil - @charSetProbers = [] - reset() - end - - def reset - @result = {'encoding' => nil, 'confidence' => 0.0} - @done = false - @start = true - @gotData = false - @inputState = EPureAscii - @lastChar = '' - if @escCharSetProber - @escCharSetProber.reset() - end - for prober in @charSetProbers - prober.reset() - end - end - - def feed(aBuf) - return if @done - - aLen = aBuf.length - return if aLen == 0 - - if !@gotData - # If the data starts with BOM, we know it is UTF - if aBuf[0, 3] == "\xEF\xBB\xBF" - # EF BB BF UTF-8 with BOM - @result = {'encoding' => "UTF-8", 'confidence' => 1.0} - elsif aBuf[0, 4] == "\xFF\xFE\x00\x00" - # FF FE 00 00 UTF-32, little-endian BOM - @result = {'encoding' => "UTF-32LE", 'confidence' => 1.0} - elsif aBuf[0, 4] == "\x00\x00\xFE\xFF" - # 00 00 FE FF UTF-32, big-endian BOM - @result = {'encoding' => "UTF-32BE", 'confidence' => 1.0} - elsif aBuf[0, 4] == "\xFE\xFF\x00\x00" - # FE FF 00 00 UCS-4, unusual octet order BOM (3412) - @result = {'encoding' => "X-ISO-10646-UCS-4-3412", 'confidence' => 1.0} - elsif aBuf[0, 4] == "\x00\x00\xFF\xFE" - # 00 00 FF FE UCS-4, unusual octet order BOM (2143) - @result = {'encoding' => "X-ISO-10646-UCS-4-2143", 'confidence' => 1.0} - elsif aBuf[0, 2] == "\xFF\xFE" - # FF FE UTF-16, little endian BOM - @result = {'encoding' => "UTF-16LE", 'confidence' => 1.0} - elsif aBuf[0, 2] == "\xFE\xFF" - # FE FF UTF-16, big endian BOM - @result = {'encoding' => "UTF-16BE", 'confidence' => 1.0} - elsif aBuf[0, 3] == "\x2B\x2F\x76" && ["\x38", "\x39", "\x2B", "\x2F"].include?(aBuf[3, 1]) - # NOTE: Ruby only includes "dummy" support for UTF-7. - # A Ruby UTF-7 string can't have methods called on it, nor can it be converted to anything else, but "BINARY"/"ASCII-8BIT". - # Still, this doesn't make detection useless, as UTF-7 encodings exist in the wild, and the scenario may need to be handled. - # 2B 2F 76 38 UTF-7 - # 2B 2F 76 39 UTF-7 - # 2B 2F 76 2B UTF-7 - # 2B 2F 76 2F UTF-7 - # 2B 2F 76 38 2D UTF-7 with no following character (empty string) - @result = {'encoding' => "UTF-7", 'confidence' => 0.99} - end - end - - @gotData = true - if @result['encoding'] and (@result['confidence'] > 0.0) - @done = true - return - end - if @inputState == EPureAscii - if @highBitDetector =~ (aBuf) - @inputState = EHighbyte - elsif (@inputState == EPureAscii) and @escDetector =~ (@lastChar + aBuf) - @inputState = EEscAscii - end - end - - @lastChar = aBuf[-1, 1] - if @inputState == EEscAscii - if !@escCharSetProber - @escCharSetProber = EscCharSetProber.new() - end - if @escCharSetProber.feed(aBuf) == EFoundIt - @result = {'encoding' => @escCharSetProber.get_charset_name(), - 'confidence' => @escCharSetProber.get_confidence() - } - @done = true - end - elsif @inputState == EHighbyte - if @charSetProbers.nil? || @charSetProbers.empty? - @charSetProbers = [MBCSGroupProber.new(), SBCSGroupProber.new(), Latin1Prober.new()] - end - for prober in @charSetProbers - if prober.feed(aBuf) == EFoundIt - @result = {'encoding' => prober.get_charset_name(), - 'confidence' => prober.get_confidence()} - @done = true - break - end - end - end - - end - - def close - return if @done - if !@gotData - $stderr << "no data received!\n" if $debug - return - end - @done = true - - if @inputState == EPureAscii - @result = {'encoding' => 'ascii', 'confidence' => 1.0} - return @result - end - - if @inputState == EHighbyte - confidences = {} - @charSetProbers.each{ |prober| confidences[prober] = prober.get_confidence } - maxProber = @charSetProbers.max{ |a,b| confidences[a] <=> confidences[b] } - if maxProber and maxProber.get_confidence > MINIMUM_THRESHOLD - @result = {'encoding' => maxProber.get_charset_name(), - 'confidence' => maxProber.get_confidence()} - return @result - end - end - - if $debug - $stderr << "no probers hit minimum threshhold\n" if $debug - for prober in @charSetProbers[0].probers - next if !prober - $stderr << "#{prober.get_charset_name} confidence = #{prober.get_confidence}\n" if $debug - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/utf8prober.rb b/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/utf8prober.rb deleted file mode 100644 index 71af2764..00000000 --- a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/utf8prober.rb +++ /dev/null @@ -1,87 +0,0 @@ -######################## BEGIN LICENSE BLOCK ######################## -# The Original Code is mozilla.org code. -# -# The Initial Developer of the Original Code is -# Netscape Communications Corporation. -# Portions created by the Initial Developer are Copyright (C) 1998 -# the Initial Developer. All Rights Reserved. -# -# Contributor(s): -# Jeff Hodges - port to Ruby -# Mark Pilgrim - port to Python -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA -# 02110-1301 USA -######################### END LICENSE BLOCK ######################### - -module CharDet - ONE_CHAR_PROB = 0.5 - - class UTF8Prober < CharSetProber - def initialize - super() - @codingSM = CodingStateMachine.new(UTF8SMModel) - reset() - end - - def reset - super() - @codingSM.reset() - @numOfMBChar = 0 - end - - def get_charset_name - return "utf-8" - end - - def feed(aBuf) - aBuf.each_byte do |b| - c = b.chr - codingState = @codingSM.next_state(c) - if codingState == EError - @state = ENotMe - break - elsif codingState == EItsMe - @state = EFoundIt - break - elsif codingState == EStart - if @codingSM.get_current_charlen() >= 2 - @numOfMBChar += 1 - end - end - end - - if get_state() == EDetecting - if get_confidence() > SHORTCUT_THRESHOLD - @state = EFoundIt - end - end - - return get_state() - end - - def get_confidence - unlike = 0.99 - if @numOfMBChar < 6 - for i in (0...@numOfMBChar) - unlike = unlike * ONE_CHAR_PROB - end - return 1.0 - unlike - else - return unlike - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/version.rb b/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/version.rb deleted file mode 100644 index f053eab4..00000000 --- a/bundle/ruby/3.2.0/gems/rchardet-1.8.0/lib/rchardet/version.rb +++ /dev/null @@ -1,3 +0,0 @@ -module CharDet - VERSION = "1.8.0" -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/Gemfile b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/Gemfile deleted file mode 100644 index ade3eb1d..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/Gemfile +++ /dev/null @@ -1,15 +0,0 @@ -source 'https://rubygems.org' - -gemspec - -group :development, :test do - gem 'leto', '~> 2.1' - gem 'rake', '~> 13.1' - gem 'regexp_property_values', '~> 1.5' - gem 'rspec', '~> 3.10' - if RUBY_VERSION.to_f >= 2.7 - gem 'benchmark-ips', '~> 2.1' - gem 'gouteur', '~> 1.1' - gem 'rubocop', '~> 1.59' - end -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/LICENSE b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/LICENSE deleted file mode 100644 index d881b02b..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2010, 2012-2024, Ammar Ali - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/Rakefile b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/Rakefile deleted file mode 100644 index 3d47cf06..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/Rakefile +++ /dev/null @@ -1,23 +0,0 @@ -require 'bundler' -require 'rubygems' -require 'rubygems/package_task' -require 'rake' -require 'rake/testtask' -require 'rspec/core/rake_task' - -Dir['tasks/**/*.rake'].each { |file| load(file) } - -Bundler::GemHelper.install_tasks - -RSpec::Core::RakeTask.new(:spec) - -task :default => [:'test:full'] - -namespace :test do - task full: [:'ragel:rb', :spec] -end - -# Add ragel task as a prerequisite for building the gem to ensure that the -# latest scanner code is generated and included in the build. -desc "Runs ragel:rb before building the gem" -task :build => ['ragel:rb'] diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser.rb deleted file mode 100644 index 4e68b047..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser.rb +++ /dev/null @@ -1,6 +0,0 @@ -require 'regexp_parser/version' -require 'regexp_parser/token' -require 'regexp_parser/scanner' -require 'regexp_parser/syntax' -require 'regexp_parser/lexer' -require 'regexp_parser/parser' diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/error.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/error.rb deleted file mode 100644 index 5753b9cd..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/error.rb +++ /dev/null @@ -1,4 +0,0 @@ -class Regexp::Parser - # base class for all gem-specific errors - class Error < StandardError; end -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression.rb deleted file mode 100644 index a383ea39..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression.rb +++ /dev/null @@ -1,37 +0,0 @@ -require 'regexp_parser/error' - -require 'regexp_parser/expression/shared' -require 'regexp_parser/expression/base' -require 'regexp_parser/expression/quantifier' -require 'regexp_parser/expression/subexpression' -require 'regexp_parser/expression/sequence' -require 'regexp_parser/expression/sequence_operation' - -require 'regexp_parser/expression/classes/alternation' -require 'regexp_parser/expression/classes/anchor' -require 'regexp_parser/expression/classes/backreference' -require 'regexp_parser/expression/classes/character_set' -require 'regexp_parser/expression/classes/character_set/intersection' -require 'regexp_parser/expression/classes/character_set/range' -require 'regexp_parser/expression/classes/character_type' -require 'regexp_parser/expression/classes/conditional' -require 'regexp_parser/expression/classes/escape_sequence' -require 'regexp_parser/expression/classes/free_space' -require 'regexp_parser/expression/classes/group' -require 'regexp_parser/expression/classes/keep' -require 'regexp_parser/expression/classes/literal' -require 'regexp_parser/expression/classes/posix_class' -require 'regexp_parser/expression/classes/root' -require 'regexp_parser/expression/classes/unicode_property' - -require 'regexp_parser/expression/methods/construct' -require 'regexp_parser/expression/methods/human_name' -require 'regexp_parser/expression/methods/match' -require 'regexp_parser/expression/methods/match_length' -require 'regexp_parser/expression/methods/negative' -require 'regexp_parser/expression/methods/options' -require 'regexp_parser/expression/methods/parts' -require 'regexp_parser/expression/methods/printing' -require 'regexp_parser/expression/methods/strfregexp' -require 'regexp_parser/expression/methods/tests' -require 'regexp_parser/expression/methods/traverse' diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/base.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/base.rb deleted file mode 100644 index ed80ed49..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/base.rb +++ /dev/null @@ -1,76 +0,0 @@ -module Regexp::Expression - class Base - include Regexp::Expression::Shared - - def initialize(token, options = {}) - init_from_token_and_options(token, options) - end - - def to_re(format = :full) - if set_level > 0 - warn "Calling #to_re on character set members is deprecated - "\ - "their behavior might not be equivalent outside of the set." - end - ::Regexp.new(to_s(format)) - end - - def quantify(*args) - self.quantifier = Quantifier.new(*args) - end - - def unquantified_clone - clone.tap { |exp| exp.quantifier = nil } - end - - # Deprecated. Prefer `#repetitions` which has a more uniform interface. - def quantity - return [nil,nil] unless quantified? - [quantifier.min, quantifier.max] - end - - def repetitions - @repetitions ||= - if quantified? - min = quantifier.min - max = quantifier.max < 0 ? Float::INFINITY : quantifier.max - range = min..max - # fix Range#minmax on old Rubies - https://bugs.ruby-lang.org/issues/15807 - if RUBY_VERSION.to_f < 2.7 - range.define_singleton_method(:minmax) { [min, max] } - end - range - else - 1..1 - end - end - - def greedy? - quantified? and quantifier.greedy? - end - - def reluctant? - quantified? and quantifier.reluctant? - end - alias :lazy? :reluctant? - - def possessive? - quantified? and quantifier.possessive? - end - - def to_h - { - type: type, - token: token, - text: to_s(:base), - starts_at: ts, - length: full_length, - level: level, - set_level: set_level, - conditional_level: conditional_level, - options: options, - quantifier: quantified? ? quantifier.to_h : nil, - } - end - alias :attributes :to_h - end -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/classes/alternation.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/classes/alternation.rb deleted file mode 100644 index b6332576..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/classes/alternation.rb +++ /dev/null @@ -1,10 +0,0 @@ -module Regexp::Expression - # A sequence of expressions, used by Alternation as one of its alternatives. - class Alternative < Regexp::Expression::Sequence; end - - class Alternation < Regexp::Expression::SequenceOperation - OPERAND = Alternative - - alias :alternatives :expressions - end -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/classes/anchor.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/classes/anchor.rb deleted file mode 100644 index 31355d33..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/classes/anchor.rb +++ /dev/null @@ -1,24 +0,0 @@ -module Regexp::Expression - module Anchor - class Base < Regexp::Expression::Base; end - - class BeginningOfLine < Anchor::Base; end - class EndOfLine < Anchor::Base; end - - class BeginningOfString < Anchor::Base; end - class EndOfString < Anchor::Base; end - - class EndOfStringOrBeforeEndOfLine < Anchor::Base; end - - class WordBoundary < Anchor::Base; end - class NonWordBoundary < Anchor::Base; end - - class MatchStart < Anchor::Base; end - - BOL = BeginningOfLine - EOL = EndOfLine - BOS = BeginningOfString - EOS = EndOfString - EOSobEOL = EndOfStringOrBeforeEndOfLine - end -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/classes/backreference.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/classes/backreference.rb deleted file mode 100644 index c05fd9ef..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/classes/backreference.rb +++ /dev/null @@ -1,75 +0,0 @@ -module Regexp::Expression - module Backreference - class Base < Regexp::Expression::Base - attr_accessor :referenced_expression - - def initialize_copy(orig) - exp_id = [self.class, self.starts_at] - - # prevent infinite recursion for recursive subexp calls - copied = @@copied ||= {} - self.referenced_expression = - if copied[exp_id] - orig.referenced_expression - else - copied[exp_id] = true - orig.referenced_expression.dup - end - copied.clear - - super - end - end - - class Number < Backreference::Base - attr_reader :number - alias reference number - - def initialize(token, options = {}) - @number = token.text[/-?\d+/].to_i - super - end - end - - class Name < Backreference::Base - attr_reader :name - alias reference name - - def initialize(token, options = {}) - @name = token.text[3..-2] - super - end - end - - class NumberRelative < Backreference::Number - attr_accessor :effective_number - alias reference effective_number - end - - class NumberCall < Backreference::Number; end - class NameCall < Backreference::Name; end - class NumberCallRelative < Backreference::NumberRelative; end - - class NumberRecursionLevel < Backreference::NumberRelative - attr_reader :recursion_level - - def initialize(token, options = {}) - super - @number, @recursion_level = token.text[3..-2].split(/(?=[+-])/).map(&:to_i) - end - end - - class NameRecursionLevel < Backreference::Name - attr_reader :recursion_level - - def initialize(token, options = {}) - super - @name, recursion_level = token.text[3..-2].split(/(?=[+-])/) - @recursion_level = recursion_level.to_i - end - end - end - - # alias for symmetry between token symbol and Expression class name - Backref = Backreference -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/classes/character_set.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/classes/character_set.rb deleted file mode 100644 index b9528971..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/classes/character_set.rb +++ /dev/null @@ -1,23 +0,0 @@ -module Regexp::Expression - class CharacterSet < Regexp::Expression::Subexpression - attr_accessor :closed, :negative - alias :closed? :closed - - def initialize(token, options = {}) - self.negative = false - self.closed = false - super - end - - def negate - self.negative = true - end - - def close - self.closed = true - end - end - - # alias for symmetry between token symbol and Expression class name - Set = CharacterSet -end # module Regexp::Expression diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/classes/character_set/intersection.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/classes/character_set/intersection.rb deleted file mode 100644 index bc119df8..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/classes/character_set/intersection.rb +++ /dev/null @@ -1,9 +0,0 @@ -module Regexp::Expression - class CharacterSet < Regexp::Expression::Subexpression - class IntersectedSequence < Regexp::Expression::Sequence; end - - class Intersection < Regexp::Expression::SequenceOperation - OPERAND = IntersectedSequence - end - end -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/classes/character_set/range.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/classes/character_set/range.rb deleted file mode 100644 index e277b82c..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/classes/character_set/range.rb +++ /dev/null @@ -1,19 +0,0 @@ -module Regexp::Expression - class CharacterSet < Regexp::Expression::Subexpression - class Range < Regexp::Expression::Subexpression - def ts - (head = expressions.first) ? head.ts : @ts - end - - def <<(exp) - complete? and raise Regexp::Parser::Error, - "Can't add more than 2 expressions to a Range" - super - end - - def complete? - count == 2 - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/classes/character_type.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/classes/character_type.rb deleted file mode 100644 index 5463c610..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/classes/character_type.rb +++ /dev/null @@ -1,17 +0,0 @@ -module Regexp::Expression - module CharacterType - class Base < Regexp::Expression::Base; end - - class Any < CharacterType::Base; end - class Digit < CharacterType::Base; end - class NonDigit < CharacterType::Base; end - class Hex < CharacterType::Base; end - class NonHex < CharacterType::Base; end - class Word < CharacterType::Base; end - class NonWord < CharacterType::Base; end - class Space < CharacterType::Base; end - class NonSpace < CharacterType::Base; end - class Linebreak < CharacterType::Base; end - class ExtendedGrapheme < CharacterType::Base; end - end -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/classes/conditional.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/classes/conditional.rb deleted file mode 100644 index 1023e17d..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/classes/conditional.rb +++ /dev/null @@ -1,64 +0,0 @@ -module Regexp::Expression - module Conditional - class TooManyBranches < Regexp::Parser::Error - def initialize - super('The conditional expression has more than 2 branches') - end - end - - class Condition < Regexp::Expression::Base - attr_accessor :referenced_expression - - # Name or number of the referenced capturing group that determines state. - # Returns a String if reference is by name, Integer if by number. - def reference - ref = text.tr("'<>()", "") - ref =~ /\D/ ? ref : Integer(ref) - end - - def initialize_copy(orig) - self.referenced_expression = orig.referenced_expression.dup - super - end - end - - class Branch < Regexp::Expression::Sequence; end - - class Expression < Regexp::Expression::Subexpression - attr_accessor :referenced_expression - - def <<(exp) - expressions.last << exp - end - - def add_sequence(active_opts = {}, params = { ts: 0 }) - raise TooManyBranches.new if branches.length == 2 - params = params.merge({ conditional_level: conditional_level + 1 }) - Branch.add_to(self, params, active_opts) - end - alias :branch :add_sequence - - def condition=(exp) - expressions.delete(condition) - expressions.unshift(exp) - end - - def condition - find { |subexp| subexp.is_a?(Condition) } - end - - def branches - select { |subexp| subexp.is_a?(Sequence) } - end - - def reference - condition.reference - end - - def initialize_copy(orig) - self.referenced_expression = orig.referenced_expression.dup - super - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/classes/escape_sequence.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/classes/escape_sequence.rb deleted file mode 100644 index c6c51a8c..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/classes/escape_sequence.rb +++ /dev/null @@ -1,102 +0,0 @@ -module Regexp::Expression - module EscapeSequence - class Base < Regexp::Expression::Base - def codepoint - char.ord - end - - if ''.respond_to?(:undump) - def char - %("#{text}").undump - end - else - # poor man's unescape without using eval - require 'yaml' - def char - YAML.load(%Q(---\n"#{text}"\n)) - end - end - end - - class Literal < EscapeSequence::Base - def char - text[1..-1] - end - end - - class AsciiEscape < EscapeSequence::Base; end - class Backspace < EscapeSequence::Base; end - class Bell < EscapeSequence::Base; end - class FormFeed < EscapeSequence::Base; end - class Newline < EscapeSequence::Base; end - class Return < EscapeSequence::Base; end - class Tab < EscapeSequence::Base; end - class VerticalTab < EscapeSequence::Base; end - - class Hex < EscapeSequence::Base; end - class Codepoint < EscapeSequence::Base; end - - class CodepointList < EscapeSequence::Base - def char - raise NoMethodError, 'CodepointList responds only to #chars' - end - - def codepoint - raise NoMethodError, 'CodepointList responds only to #codepoints' - end - - def chars - codepoints.map { |cp| cp.chr('utf-8') } - end - - def codepoints - text.scan(/\h+/).map(&:hex) - end - end - - class Octal < EscapeSequence::Base - def char - text[1..-1].to_i(8).chr('utf-8') - end - end - - class AbstractMetaControlSequence < EscapeSequence::Base - def char - codepoint.chr('utf-8') - end - - private - - def control_sequence_to_s(control_sequence) - five_lsb = control_sequence.unpack('B*').first[-5..-1] - ["000#{five_lsb}"].pack('B*') - end - - def meta_char_to_codepoint(meta_char) - byte_value = meta_char.ord - byte_value < 128 ? byte_value + 128 : byte_value - end - end - - class Control < AbstractMetaControlSequence - def codepoint - control_sequence_to_s(text).ord - end - end - - class Meta < AbstractMetaControlSequence - def codepoint - meta_char_to_codepoint(text[-1]) - end - end - - class MetaControl < AbstractMetaControlSequence - def codepoint - meta_char_to_codepoint(control_sequence_to_s(text)) - end - end - end - - # alias for symmetry between Token::* and Expression::* - Escape = EscapeSequence -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/classes/free_space.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/classes/free_space.rb deleted file mode 100644 index 12040d8b..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/classes/free_space.rb +++ /dev/null @@ -1,17 +0,0 @@ -module Regexp::Expression - class FreeSpace < Regexp::Expression::Base - def quantify(*_args) - raise Regexp::Parser::Error, 'Can not quantify a free space object' - end - end - - class Comment < Regexp::Expression::FreeSpace - end - - class WhiteSpace < Regexp::Expression::FreeSpace - def merge(exp) - warn("#{self.class}##{__method__} is deprecated and will be removed in v3.0.0.") - text << exp.text - end - end -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/classes/group.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/classes/group.rb deleted file mode 100644 index 9570e73a..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/classes/group.rb +++ /dev/null @@ -1,73 +0,0 @@ -module Regexp::Expression - module Group - class Base < Regexp::Expression::Subexpression - end - - class Passive < Group::Base - attr_writer :implicit - - def initialize(*) - @implicit = false - super - end - - def implicit? - @implicit - end - end - - class Absence < Group::Base; end - class Atomic < Group::Base; end - # TODO: should split off OptionsSwitch in v3.0.0. Maybe even make it no - # longer inherit from Group because it is effectively a terminal expression. - class Options < Group::Base - attr_accessor :option_changes - - def initialize_copy(orig) - self.option_changes = orig.option_changes.dup - super - end - - def quantify(*args) - if token == :options_switch - raise Regexp::Parser::Error, 'Can not quantify an option switch' - else - super - end - end - end - - class Capture < Group::Base - attr_accessor :number, :number_at_level - alias identifier number - end - - class Named < Group::Capture - attr_reader :name - alias identifier name - - def initialize(token, options = {}) - @name = token.text[3..-2] - super - end - - def initialize_copy(orig) - @name = orig.name.dup - super - end - end - - class Comment < Group::Base - end - end - - module Assertion - class Base < Regexp::Expression::Group::Base; end - - class Lookahead < Assertion::Base; end - class NegativeLookahead < Assertion::Base; end - - class Lookbehind < Assertion::Base; end - class NegativeLookbehind < Assertion::Base; end - end -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/classes/keep.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/classes/keep.rb deleted file mode 100644 index bfbe522a..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/classes/keep.rb +++ /dev/null @@ -1,7 +0,0 @@ -module Regexp::Expression - module Keep - # TOOD: in regexp_parser v3.0.0 this should possibly be a Subexpression - # that contains all expressions to its left. - class Mark < Regexp::Expression::Base; end - end -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/classes/literal.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/classes/literal.rb deleted file mode 100644 index e9879cc8..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/classes/literal.rb +++ /dev/null @@ -1,3 +0,0 @@ -module Regexp::Expression - class Literal < Regexp::Expression::Base; end -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/classes/posix_class.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/classes/posix_class.rb deleted file mode 100644 index 7c4ac9ed..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/classes/posix_class.rb +++ /dev/null @@ -1,11 +0,0 @@ -module Regexp::Expression - class PosixClass < Regexp::Expression::Base - def name - text[/\w+/] - end - end - - # alias for symmetry between token symbol and Expression class name - Posixclass = PosixClass - Nonposixclass = PosixClass -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/classes/root.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/classes/root.rb deleted file mode 100644 index 741e9f5b..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/classes/root.rb +++ /dev/null @@ -1,9 +0,0 @@ -module Regexp::Expression - class Root < Regexp::Expression::Subexpression - def self.build(options = {}) - warn "`#{self.class}.build(options)` is deprecated and will raise in "\ - "regexp_parser v3.0.0. Please use `.construct(options: options)`." - construct(options: options) - end - end -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/classes/unicode_property.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/classes/unicode_property.rb deleted file mode 100644 index fe90b553..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/classes/unicode_property.rb +++ /dev/null @@ -1,119 +0,0 @@ -module Regexp::Expression - module UnicodeProperty - class Base < Regexp::Expression::Base - def name - text[/\A\\[pP]\{([^}]+)\}\z/, 1] - end - - def shortcut - Regexp::Scanner.short_prop_map.key(token.to_s) - end - end - - class Alnum < Base; end - class Alpha < Base; end - class Ascii < Base; end - class Blank < Base; end - class Cntrl < Base; end - class Digit < Base; end - class Graph < Base; end - class Lower < Base; end - class Print < Base; end - class Punct < Base; end - class Space < Base; end - class Upper < Base; end - class Word < Base; end - class Xdigit < Base; end - class XPosixPunct < Base; end - - class Newline < Base; end - - class Any < Base; end - class Assigned < Base; end - - module Letter - class Base < UnicodeProperty::Base; end - - class Any < Letter::Base; end - class Cased < Letter::Base; end - class Uppercase < Letter::Base; end - class Lowercase < Letter::Base; end - class Titlecase < Letter::Base; end - class Modifier < Letter::Base; end - class Other < Letter::Base; end - end - - module Mark - class Base < UnicodeProperty::Base; end - - class Any < Mark::Base; end - class Combining < Mark::Base; end - class Nonspacing < Mark::Base; end - class Spacing < Mark::Base; end - class Enclosing < Mark::Base; end - end - - module Number - class Base < UnicodeProperty::Base; end - - class Any < Number::Base; end - class Decimal < Number::Base; end - class Letter < Number::Base; end - class Other < Number::Base; end - end - - module Punctuation - class Base < UnicodeProperty::Base; end - - class Any < Punctuation::Base; end - class Connector < Punctuation::Base; end - class Dash < Punctuation::Base; end - class Open < Punctuation::Base; end - class Close < Punctuation::Base; end - class Initial < Punctuation::Base; end - class Final < Punctuation::Base; end - class Other < Punctuation::Base; end - end - - module Separator - class Base < UnicodeProperty::Base; end - - class Any < Separator::Base; end - class Space < Separator::Base; end - class Line < Separator::Base; end - class Paragraph < Separator::Base; end - end - - module Symbol - class Base < UnicodeProperty::Base; end - - class Any < Symbol::Base; end - class Math < Symbol::Base; end - class Currency < Symbol::Base; end - class Modifier < Symbol::Base; end - class Other < Symbol::Base; end - end - - module Codepoint - class Base < UnicodeProperty::Base; end - - class Any < Codepoint::Base; end - class Control < Codepoint::Base; end - class Format < Codepoint::Base; end - class Surrogate < Codepoint::Base; end - class PrivateUse < Codepoint::Base; end - class Unassigned < Codepoint::Base; end - end - - class Age < UnicodeProperty::Base; end - class Block < UnicodeProperty::Base; end - class Derived < UnicodeProperty::Base; end - class Emoji < UnicodeProperty::Base; end - class Enumerated < UnicodeProperty::Base; end - class Script < UnicodeProperty::Base; end - end - - # alias for symmetry between token symbol and Expression class name - Property = UnicodeProperty - Nonproperty = UnicodeProperty -end # module Regexp::Expression diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/methods/construct.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/methods/construct.rb deleted file mode 100644 index 6c4c607a..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/methods/construct.rb +++ /dev/null @@ -1,41 +0,0 @@ -module Regexp::Expression - module Shared - module ClassMethods - # Convenience method to init a valid Expression without a Regexp::Token - def construct(params = {}) - attrs = construct_defaults.merge(params) - options = attrs.delete(:options) - token_args = Regexp::TOKEN_KEYS.map { |k| attrs.delete(k) } - token = Regexp::Token.new(*token_args) - raise ArgumentError, "unsupported attribute(s): #{attrs}" if attrs.any? - - new(token, options) - end - - def construct_defaults - if self == Root - { type: :expression, token: :root, ts: 0 } - elsif self < Sequence - { type: :expression, token: :sequence } - else - { type: token_class::Type } - end.merge(level: 0, set_level: 0, conditional_level: 0, text: '') - end - - def token_class - if self == Root || self < Sequence - nil # no token class because these objects are Parser-generated - # TODO: synch exp class, token class & type names for this in v3.0.0 - elsif self == CharacterType::Any - Regexp::Syntax::Token::Meta - else - Regexp::Syntax::Token.const_get(name.split('::')[2]) - end - end - end - - def token_class - self.class.token_class - end - end -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/methods/human_name.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/methods/human_name.rb deleted file mode 100644 index 75f6f56d..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/methods/human_name.rb +++ /dev/null @@ -1,43 +0,0 @@ -module Regexp::Expression - module Shared - # default implementation, e.g. "atomic group", "hex escape", "word type", .. - def human_name - [token, type].compact.join(' ').tr('_', ' ') - end - end - - Alternation.class_eval { def human_name; 'alternation' end } - Alternative.class_eval { def human_name; 'alternative' end } - Anchor::BOL.class_eval { def human_name; 'beginning of line' end } - Anchor::BOS.class_eval { def human_name; 'beginning of string' end } - Anchor::EOL.class_eval { def human_name; 'end of line' end } - Anchor::EOS.class_eval { def human_name; 'end of string' end } - Anchor::EOSobEOL.class_eval { def human_name; 'newline-ready end of string' end } - Anchor::MatchStart.class_eval { def human_name; 'match start' end } - Anchor::NonWordBoundary.class_eval { def human_name; 'no word boundary' end } - Anchor::WordBoundary.class_eval { def human_name; 'word boundary' end } - Assertion::Lookahead.class_eval { def human_name; 'lookahead' end } - Assertion::Lookbehind.class_eval { def human_name; 'lookbehind' end } - Assertion::NegativeLookahead.class_eval { def human_name; 'negative lookahead' end } - Assertion::NegativeLookbehind.class_eval { def human_name; 'negative lookbehind' end } - Backreference::Name.class_eval { def human_name; 'backreference by name' end } - Backreference::NameCall.class_eval { def human_name; 'subexpression call by name' end } - Backreference::Number.class_eval { def human_name; 'backreference' end } - Backreference::NumberRelative.class_eval { def human_name; 'relative backreference' end } - Backreference::NumberCall.class_eval { def human_name; 'subexpression call' end } - Backreference::NumberCallRelative.class_eval { def human_name; 'relative subexpression call' end } - CharacterSet::IntersectedSequence.class_eval { def human_name; 'intersected sequence' end } - CharacterSet::Intersection.class_eval { def human_name; 'intersection' end } - CharacterSet::Range.class_eval { def human_name; 'character range' end } - CharacterType::Any.class_eval { def human_name; 'match-all' end } - Comment.class_eval { def human_name; 'comment' end } - Conditional::Branch.class_eval { def human_name; 'conditional branch' end } - Conditional::Condition.class_eval { def human_name; 'condition' end } - Conditional::Expression.class_eval { def human_name; 'conditional' end } - Group::Capture.class_eval { def human_name; "capture group #{number}" end } - Group::Named.class_eval { def human_name; 'named capture group' end } - Keep::Mark.class_eval { def human_name; 'keep-mark lookbehind' end } - Literal.class_eval { def human_name; 'literal' end } - Root.class_eval { def human_name; 'root' end } - WhiteSpace.class_eval { def human_name; 'free space' end } -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/methods/match.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/methods/match.rb deleted file mode 100644 index 076e7956..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/methods/match.rb +++ /dev/null @@ -1,13 +0,0 @@ -module Regexp::Expression - class Base - def match?(string) - !!match(string) - end - alias :matches? :match? - - def match(string, offset = 0) - Regexp.new(to_s).match(string, offset) - end - alias :=~ :match - end -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/methods/match_length.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/methods/match_length.rb deleted file mode 100644 index a30b644d..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/methods/match_length.rb +++ /dev/null @@ -1,176 +0,0 @@ -class Regexp::MatchLength - include Enumerable - - def self.of(obj) - exp = obj.is_a?(Regexp::Expression::Base) ? obj : Regexp::Parser.parse(obj) - exp.match_length - end - - def initialize(exp, opts = {}) - self.exp_class = exp.class - self.min_rep = exp.repetitions.min - self.max_rep = exp.repetitions.max - if (base = opts[:base]) - self.base_min = base - self.base_max = base - self.reify = ->{ '.' * base } - else - self.base_min = opts.fetch(:base_min) - self.base_max = opts.fetch(:base_max) - self.reify = opts.fetch(:reify) - end - end - - def each(opts = {}) - return enum_for(__method__, opts) unless block_given? - limit = opts[:limit] || 1000 - yielded = 0 - (min..max).each do |num| - next unless include?(num) - yield(num) - break if (yielded += 1) >= limit - end - end - - def endless_each - return enum_for(__method__) unless block_given? - (min..max).each { |num| yield(num) if include?(num) } - end - - def include?(length) - test_regexp.match?('X' * length) - end - - def fixed? - min == max - end - - def min - min_rep * base_min - end - - def max - max_rep * base_max - end - - def minmax - [min, max] - end - - def inspect - type = exp_class.name.sub('Regexp::Expression::', '') - "#<#{self.class}<#{type}> min=#{min} max=#{max}>" - end - - def to_re - /(?:#{reify.call}){#{min_rep},#{max_rep unless max_rep == Float::INFINITY}}/ - end - - private - - attr_accessor :base_min, :base_max, :min_rep, :max_rep, :exp_class, :reify - - if Regexp.method_defined?(:match?) # ruby >= 2.4 - def test_regexp - @test_regexp ||= /^#{to_re}$/ - end - else - def test_regexp - @test_regexp ||= /^#{to_re}$/.tap { |r| def r.match?(s); !!match(s) end } - end - end -end - -module Regexp::Expression - MatchLength = Regexp::MatchLength - - [ - CharacterSet, - CharacterSet::Intersection, - CharacterSet::IntersectedSequence, - CharacterSet::Range, - CharacterType::Base, - EscapeSequence::Base, - PosixClass, - UnicodeProperty::Base, - ].each do |klass| - klass.class_eval <<-RUBY, __FILE__, __LINE__ + 1 - def match_length - MatchLength.new(self, base: 1) - end - RUBY - end - - class Literal - def match_length - MatchLength.new(self, base: text.length) - end - end - - class Subexpression - def match_length - MatchLength.new(self, - base_min: map { |exp| exp.match_length.min }.inject(0, :+), - base_max: map { |exp| exp.match_length.max }.inject(0, :+), - reify: ->{ map { |exp| exp.match_length.to_re }.join }) - end - - def inner_match_length - dummy = Regexp::Expression::Root.construct - dummy.expressions = expressions.map(&:clone) - dummy.quantifier = quantifier && quantifier.clone - dummy.match_length - end - end - - [ - Alternation, - Conditional::Expression, - ].each do |klass| - klass.class_eval <<-RUBY, __FILE__, __LINE__ + 1 - def match_length - MatchLength.new(self, - base_min: map { |exp| exp.match_length.min }.min, - base_max: map { |exp| exp.match_length.max }.max, - reify: ->{ map { |exp| exp.match_length.to_re }.join('|') }) - end - RUBY - end - - [ - Anchor::Base, - Assertion::Base, - Conditional::Condition, - FreeSpace, - Keep::Mark, - ].each do |klass| - klass.class_eval <<-RUBY, __FILE__, __LINE__ + 1 - def match_length - MatchLength.new(self, base: 0) - end - RUBY - end - - class Backreference::Base - def match_length - if referenced_expression.nil? - raise ArgumentError, 'Missing referenced_expression - not parsed?' - end - referenced_expression.unquantified_clone.match_length - end - end - - class EscapeSequence::CodepointList - def match_length - MatchLength.new(self, base: codepoints.count) - end - end - - # Special case. Absence group can match 0.. chars, irrespective of content. - # TODO: in theory, they *can* exclude match lengths with `.`: `(?~.{3})` - class Group::Absence - def match_length - MatchLength.new(self, base_min: 0, base_max: Float::INFINITY, reify: ->{ '.*' }) - end - end -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/methods/negative.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/methods/negative.rb deleted file mode 100644 index d77655a5..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/methods/negative.rb +++ /dev/null @@ -1,20 +0,0 @@ -module Regexp::Expression - module Shared - def negative? - false - end - - # not an alias so as to respect overrides of #negative? - def negated? - negative? - end - end - - Anchor::NonWordBoundary.class_eval { def negative?; true end } - Assertion::NegativeLookahead.class_eval { def negative?; true end } - Assertion::NegativeLookbehind.class_eval { def negative?; true end } - CharacterSet.class_eval { def negative?; negative end } - CharacterType::Base.class_eval { def negative?; token.to_s.start_with?('non') end } - PosixClass.class_eval { def negative?; type == :nonposixclass end } - UnicodeProperty::Base.class_eval { def negative?; type == :nonproperty end } -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/methods/options.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/methods/options.rb deleted file mode 100644 index 3ac9e21b..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/methods/options.rb +++ /dev/null @@ -1,35 +0,0 @@ -module Regexp::Expression - class Base - def multiline? - options[:m] == true - end - alias :m? :multiline? - - def case_insensitive? - options[:i] == true - end - alias :i? :case_insensitive? - alias :ignore_case? :case_insensitive? - - def free_spacing? - options[:x] == true - end - alias :x? :free_spacing? - alias :extended? :free_spacing? - - def default_classes? - options[:d] == true - end - alias :d? :default_classes? - - def ascii_classes? - options[:a] == true - end - alias :a? :ascii_classes? - - def unicode_classes? - options[:u] == true - end - alias :u? :unicode_classes? - end -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/methods/parts.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/methods/parts.rb deleted file mode 100644 index c6827256..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/methods/parts.rb +++ /dev/null @@ -1,23 +0,0 @@ -module Regexp::Expression - module Shared - # default implementation - def parts - [text.dup] - end - - private - - def intersperse(expressions, separator) - expressions.flat_map { |exp| [exp, separator] }.slice(0...-1) - end - end - - CharacterSet.class_eval { def parts; ["#{text}#{'^' if negated?}", *expressions, ']'] end } - CharacterSet::Range.class_eval { def parts; intersperse(expressions, text.dup) end } - Conditional::Expression.class_eval { def parts; [text.dup, condition, *intersperse(branches, '|'), ')'] end } - Group::Base.class_eval { def parts; [text.dup, *expressions, ')'] end } - Group::Passive.class_eval { def parts; implicit? ? expressions : super end } - Group::Comment.class_eval { def parts; [text.dup] end } - Subexpression.class_eval { def parts; expressions end } - SequenceOperation.class_eval { def parts; intersperse(expressions, text.dup) end } -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/methods/printing.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/methods/printing.rb deleted file mode 100644 index bf60e209..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/methods/printing.rb +++ /dev/null @@ -1,26 +0,0 @@ -module Regexp::Expression - module Shared - def inspect - [ - "#<#{self.class}", - pretty_print_instance_variables.map { |v| " #{v}=#{instance_variable_get(v).inspect}" }, - ">" - ].join - end - - # Make pretty-print work despite #inspect implementation. - def pretty_print(q) - q.pp_object(self) - end - - # Called by pretty_print (ruby/pp) and #inspect. - def pretty_print_instance_variables - [ - (:@text unless text.to_s.empty?), - (:@quantifier if quantified?), - (:@options unless options.empty?), - (:@expressions unless terminal?), - ].compact - end - end -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/methods/strfregexp.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/methods/strfregexp.rb deleted file mode 100644 index 433f0ef2..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/methods/strfregexp.rb +++ /dev/null @@ -1,114 +0,0 @@ -module Regexp::Expression - class Base - - # %l Level (depth) of the expression. Returns 'root' for the root - # expression, returns zero or higher for all others. - # - # %> Indentation at expression's level. - # - # %x Index of the expression at its depth. Available when using - # the sprintf_tree method only. - # - # %s Start offset within the whole expression. - # %e End offset within the whole expression. - # %S Length of expression. - # - # %o Coded offset and length, same as '@%s+%S' - # - # %y Type of expression. - # %k Token of expression. - # %i ID, same as '%y:%k' - # %c Class name - # - # %q Quantifier info, as {m[,M]} - # %Q Quantifier text - # - # %z Quantifier min - # %Z Quantifier max - # - # %t Base text of the expression (excludes quantifier, if any) - # %~t Full text if the expression is terminal, otherwise %i - # %T Full text of the expression (includes quantifier, if any) - # - # %b Basic info, same as '%o %i' - # %m Most info, same as '%b %q' - # %a All info, same as '%m %t' - # - def strfregexp(format = '%a', indent_offset = 0, index = nil) - have_index = index ? true : false - - part = {} - - print_level = nesting_level > 0 ? nesting_level - 1 : nil - - # Order is important! Fields that use other fields in their - # definition must appear before the fields they use. - part_keys = %w[a m b o i l x s e S y k c q Q z Z t ~t T >] - part.keys.each {|k| part[k] = ""} - - part['>'] = print_level ? (' ' * (print_level + indent_offset)) : '' - - part['l'] = print_level ? "#{'%d' % print_level}" : 'root' - part['x'] = "#{'%d' % index}" if have_index - - part['s'] = starts_at - part['S'] = full_length - part['e'] = starts_at + full_length - part['o'] = coded_offset - - part['k'] = token - part['y'] = type - part['i'] = '%y:%k' - part['c'] = self.class.name - - if quantified? - if quantifier.max == -1 - part['q'] = "{#{quantifier.min}, or-more}" - else - part['q'] = "{#{quantifier.min}, #{quantifier.max}}" - end - - part['Q'] = quantifier.text - part['z'] = quantifier.min - part['Z'] = quantifier.max - else - part['q'] = '{1}' - part['Q'] = '' - part['z'] = '1' - part['Z'] = '1' - end - - part['t'] = to_s(:base) - part['~t'] = terminal? ? to_s : "#{type}:#{token}" - part['T'] = to_s(:full) - - part['b'] = '%o %i' - part['m'] = '%b %q' - part['a'] = '%m %t' - - out = format.dup - - part_keys.each do |k| - out.gsub!(/%#{k}/, part[k].to_s) - end - - out - end - - alias :strfre :strfregexp - end - - class Subexpression < Regexp::Expression::Base - def strfregexp_tree(format = '%a', include_self = true, separator = "\n") - output = include_self ? [self.strfregexp(format)] : [] - - output += flat_map do |exp, index| - exp.strfregexp(format, (include_self ? 1 : 0), index) - end - - output.join(separator) - end - - alias :strfre_tree :strfregexp_tree - end -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/methods/tests.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/methods/tests.rb deleted file mode 100644 index 2d058f4e..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/methods/tests.rb +++ /dev/null @@ -1,143 +0,0 @@ -module Regexp::Expression - module Shared - - # Test if this expression has the given test_type, which can be either - # a symbol or an array of symbols to check against the expression's type. - # - # # is it a :group expression - # exp.type? :group - # - # # is it a :set, or :meta - # exp.type? [:set, :meta] - # - def type?(test_type) - test_types = Array(test_type).map(&:to_sym) - test_types.include?(:*) || test_types.include?(type) - end - - # Test if this expression has the given test_token, and optionally a given - # test_type. - # - # # Any expressions - # exp.is? :* # always returns true - # - # # is it a :capture - # exp.is? :capture - # - # # is it a :character and a :set - # exp.is? :character, :set - # - # # is it a :meta :dot - # exp.is? :dot, :meta - # - # # is it a :meta or :escape :dot - # exp.is? :dot, [:meta, :escape] - # - def is?(test_token, test_type = nil) - return true if test_token === :* - token == test_token and (test_type ? type?(test_type) : true) - end - - # Test if this expression matches an entry in the given scope spec. - # - # A scope spec can be one of: - # - # . An array: Interpreted as a set of tokens, tested for inclusion - # of the expression's token. - # - # . A hash: Where the key is interpreted as the expression type - # and the value is either a symbol or an array. In this - # case, when the scope is a hash, one_of? calls itself to - # evaluate the key's value. - # - # . A symbol: matches the expression's token or type, depending on - # the level of the call. If one_of? is called directly with - # a symbol then it will always be checked against the - # type of the expression. If it's being called for a value - # from a hash, it will be checked against the token of the - # expression. - # - # # any expression - # exp.one_of?(:*) # always true - # - # # like exp.type?(:group) - # exp.one_of?(:group) - # - # # any expression of type meta - # exp.one_of?(:meta => :*) - # - # # meta dots and alternations - # exp.one_of?(:meta => [:dot, :alternation]) - # - # # meta dots and any set tokens - # exp.one_of?({meta: [:dot], set: :*}) - # - def one_of?(scope, top = true) - case scope - when Array - scope.include?(:*) || scope.include?(token) - - when Hash - if scope.has_key?(:*) - test_type = scope.has_key?(type) ? type : :* - one_of?(scope[test_type], false) - else - scope.has_key?(type) && one_of?(scope[type], false) - end - - when Symbol - scope.equal?(:*) || (top ? type?(scope) : is?(scope)) - - else - raise ArgumentError, - "Array, Hash, or Symbol expected, #{scope.class.name} given" - end - end - - # Deep-compare two expressions for equality. - # - # When changing the conditions, please make sure to update - # #pretty_print_instance_variables so that it includes all relevant values. - def ==(other) - self.class == other.class && - text == other.text && - quantifier == other.quantifier && - options == other.options && - (terminal? || expressions == other.expressions) - end - alias :=== :== - alias :eql? :== - - def optional? - quantified? && quantifier.min == 0 - end - - def quantified? - !quantifier.nil? - end - end - - Shared.class_eval { def terminal?; self.class.terminal? end } - Shared::ClassMethods.class_eval { def terminal?; true end } - Subexpression.instance_eval { def terminal?; false end } - - Shared.class_eval { def capturing?; self.class.capturing? end } - Shared::ClassMethods.class_eval { def capturing?; false end } - Group::Capture.instance_eval { def capturing?; true end } - - Shared.class_eval { def comment?; self.class.comment? end } - Shared::ClassMethods.class_eval { def comment?; false end } - Comment.instance_eval { def comment?; true end } - Group::Comment.instance_eval { def comment?; true end } - - Shared.class_eval { def decorative?; self.class.decorative? end } - Shared::ClassMethods.class_eval { def decorative?; false end } - FreeSpace.instance_eval { def decorative?; true end } - Group::Comment.instance_eval { def decorative?; true end } - - Shared.class_eval { def referential?; self.class.referential? end } - Shared::ClassMethods.class_eval { def referential?; false end } - Backreference::Base.instance_eval { def referential?; true end } - Conditional::Condition.instance_eval { def referential?; true end } - Conditional::Expression.instance_eval { def referential?; true end } -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/methods/traverse.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/methods/traverse.rb deleted file mode 100644 index 34a10f40..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/methods/traverse.rb +++ /dev/null @@ -1,80 +0,0 @@ -module Regexp::Expression - class Subexpression < Regexp::Expression::Base - - # Traverses the expression, passing each recursive child to the - # given block. - # If the block takes two arguments, the indices of the children within - # their parents are also passed to it. - def each_expression(include_self = false, &block) - return enum_for(__method__, include_self) unless block - - if block.arity == 1 - block.call(self) if include_self - each_expression_without_index(&block) - else - block.call(self, 0) if include_self - each_expression_with_index(&block) - end - end - - # Traverses the subexpression (depth-first, pre-order) and calls the given - # block for each expression with three arguments; the traversal event, - # the expression, and the index of the expression within its parent. - # - # The event argument is passed as follows: - # - # - For subexpressions, :enter upon entering the subexpression, and - # :exit upon exiting it. - # - # - For terminal expressions, :visit is called once. - # - # Returns self. - def traverse(include_self = false, &block) - return enum_for(__method__, include_self) unless block_given? - - block.call(:enter, self, 0) if include_self - - each_with_index do |exp, index| - if exp.terminal? - block.call(:visit, exp, index) - else - block.call(:enter, exp, index) - exp.traverse(&block) - block.call(:exit, exp, index) - end - end - - block.call(:exit, self, 0) if include_self - - self - end - alias :walk :traverse - - # Returns a new array with the results of calling the given block once - # for every expression. If a block is not given, returns an array with - # each expression and its level index as an array. - def flat_map(include_self = false, &block) - case block && block.arity - when nil then each_expression(include_self).to_a - when 2 then each_expression(include_self).map(&block) - else each_expression(include_self).map { |exp| block.call(exp) } - end - end - - protected - - def each_expression_with_index(&block) - each_with_index do |exp, index| - block.call(exp, index) - exp.each_expression_with_index(&block) unless exp.terminal? - end - end - - def each_expression_without_index(&block) - each do |exp| - block.call(exp) - exp.each_expression_without_index(&block) unless exp.terminal? - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/quantifier.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/quantifier.rb deleted file mode 100644 index 714fc978..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/quantifier.rb +++ /dev/null @@ -1,84 +0,0 @@ -module Regexp::Expression - # TODO: in v3.0.0, maybe put Shared back into Base, and inherit from Base and - # call super in #initialize, but raise in #quantifier= and #quantify, - # or introduce an Expression::Quantifiable intermediate class. - # Or actually allow chaining as a more concise but tricky solution than PR#69. - class Quantifier - include Regexp::Expression::Shared - - MODES = %i[greedy possessive reluctant] - - def initialize(*args) - deprecated_old_init(*args) and return if args.count == 4 || args.count == 5 - - init_from_token_and_options(*args) - # TODO: remove in v3.0.0, stop removing parts of #token (?) - self.token = token.to_s.sub(/_(greedy|possessive|reluctant)/, '').to_sym - end - - def to_h - { - token: token, - text: text, - mode: mode, - min: min, - max: max, - } - end - - MODES.each do |mode| - class_eval <<-RUBY, __FILE__, __LINE__ + 1 - def #{mode}? - mode.equal?(:#{mode}) - end - RUBY - end - alias :lazy? :reluctant? - - def min - derived_data[:min] - end - - def max - derived_data[:max] - end - - def mode - derived_data[:mode] - end - - private - - def deprecated_old_init(token, text, _min, _max, _mode = :greedy) - warn "Calling `Expression::Base#quantify` or `#{self.class}.new` with 4+ arguments "\ - "is deprecated.\nIt will no longer be supported in regexp_parser v3.0.0.\n"\ - "Please pass a Regexp::Token instead, e.g. replace `token, text, min, max, mode` "\ - "with `::Regexp::Token.new(:quantifier, token, text)`. min, max, and mode "\ - "will be derived automatically.\n"\ - "Or do `exp.quantifier = #{self.class}.construct(token: token, text: str)`.\n"\ - "This is consistent with how Expression::Base instances are created. " - @token = token - @text = text - end - - def derived_data - @derived_data ||= begin - min, max = - case text[0] - when '?'; [0, 1] - when '*'; [0, -1] - when '+'; [1, -1] - else - int_min = text[/\{(\d*)/, 1] - int_max = text[/,?(\d*)\}/, 1] - [int_min.to_i, (int_max.empty? ? -1 : int_max.to_i)] - end - - mod = text[/.([?+])/, 1] - mode = (mod == '?' && :reluctant) || (mod == '+' && :possessive) || :greedy - - { min: min, max: max, mode: mode } - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/sequence.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/sequence.rb deleted file mode 100644 index 42ebb359..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/sequence.rb +++ /dev/null @@ -1,31 +0,0 @@ -module Regexp::Expression - # A sequence of expressions. Differs from a Subexpressions by how it handles - # quantifiers, as it applies them to its last element instead of itself as - # a whole subexpression. - # - # Used as the base class for the Alternation alternatives, Conditional - # branches, and CharacterSet::Intersection intersected sequences. - class Sequence < Regexp::Expression::Subexpression - class << self - def add_to(exp, params = {}, active_opts = {}) - sequence = construct( - level: exp.level, - set_level: exp.set_level, - conditional_level: params[:conditional_level] || exp.conditional_level, - ts: params[:ts], - ) - sequence.options = active_opts - exp.expressions << sequence - sequence - end - end - - def ts - (head = expressions.first) ? head.ts : @ts - end - - def quantify(token, *args) - extract_quantifier_target(token.text).quantify(token, *args) - end - end -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/sequence_operation.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/sequence_operation.rb deleted file mode 100644 index 8856f1a8..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/sequence_operation.rb +++ /dev/null @@ -1,20 +0,0 @@ -module Regexp::Expression - # abstract class - class SequenceOperation < Regexp::Expression::Subexpression - alias :sequences :expressions - alias :operands :expressions - alias :operator :text - - def ts - (head = expressions.first) ? head.ts : @ts - end - - def <<(exp) - expressions.last << exp - end - - def add_sequence(active_opts = {}, params = { ts: 0 }) - self.class::OPERAND.add_to(self, params, active_opts) - end - end -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/shared.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/shared.rb deleted file mode 100644 index d8d827a7..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/shared.rb +++ /dev/null @@ -1,111 +0,0 @@ -module Regexp::Expression - module Shared - module ClassMethods; end # filled in ./methods/*.rb - - def self.included(mod) - mod.class_eval do - extend Shared::ClassMethods - - attr_accessor :type, :token, :text, :ts, :te, - :level, :set_level, :conditional_level, - :options, :parent, - :custom_to_s_handling, :pre_quantifier_decorations - - attr_reader :nesting_level, :quantifier - end - end - - def init_from_token_and_options(token, options = {}) - self.type = token.type - self.token = token.token - self.text = token.text - self.ts = token.ts - self.te = token.te - self.level = token.level - self.set_level = token.set_level - self.conditional_level = token.conditional_level - self.nesting_level = 0 - self.options = options || {} - end - private :init_from_token_and_options - - def initialize_copy(orig) - self.text = orig.text.dup if orig.text - self.options = orig.options.dup if orig.options - self.quantifier = orig.quantifier.clone if orig.quantifier - self.parent = nil # updated by Subexpression#initialize_copy - if orig.pre_quantifier_decorations - self.pre_quantifier_decorations = orig.pre_quantifier_decorations.map(&:dup) - end - super - end - - def starts_at - ts - end - - def ends_at(include_quantifier = true) - ts + (include_quantifier ? full_length : base_length) - end - - def base_length - to_s(:base).length - end - - def full_length - to_s(:original).length - end - - # #to_s reproduces the original source, as an unparser would. - # - # It takes an optional format argument. - # - # Example: - # - # lit = Regexp::Parser.parse(/a +/x)[0] - # - # lit.to_s # => 'a+' # default; with quantifier - # lit.to_s(:full) # => 'a+' # default; with quantifier - # lit.to_s(:base) # => 'a' # without quantifier - # lit.to_s(:original) # => 'a +' # with quantifier AND intermittent decorations - # - def to_s(format = :full) - base = parts.each_with_object(''.dup) do |part, buff| - if part.instance_of?(String) - buff << part - elsif !part.custom_to_s_handling - buff << part.to_s(:original) - end - end - "#{base}#{pre_quantifier_decoration(format)}#{quantifier_affix(format)}" - end - alias :to_str :to_s - - def pre_quantifier_decoration(expression_format = :original) - pre_quantifier_decorations.to_a.join if expression_format == :original - end - - def quantifier_affix(expression_format = :full) - quantifier.to_s if quantified? && expression_format != :base - end - - def offset - [starts_at, full_length] - end - - def coded_offset - '@%d+%d' % offset - end - - def nesting_level=(lvl) - @nesting_level = lvl - quantifier && quantifier.nesting_level = lvl - terminal? || each { |subexp| subexp.nesting_level = lvl + 1 } - end - - def quantifier=(qtf) - @quantifier = qtf - @repetitions = nil # clear memoized value - end - end -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/subexpression.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/subexpression.rb deleted file mode 100644 index eb7d9665..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/expression/subexpression.rb +++ /dev/null @@ -1,67 +0,0 @@ -module Regexp::Expression - class Subexpression < Regexp::Expression::Base - include Enumerable - - attr_accessor :expressions - - def initialize(token, options = {}) - self.expressions = [] - super - end - - # Override base method to clone the expressions as well. - def initialize_copy(orig) - self.expressions = orig.expressions.map do |exp| - exp.clone.tap { |copy| copy.parent = self } - end - super - end - - def <<(exp) - exp.parent = self - expressions << exp - end - - %w[[] at each empty? fetch index join last length values_at].each do |method| - class_eval <<-RUBY, __FILE__, __LINE__ + 1 - def #{method}(*args, &block) - expressions.#{method}(*args, &block) - end - RUBY - end - - def dig(*indices) - exp = self - indices.each { |idx| exp = exp.nil? || exp.terminal? ? nil : exp[idx] } - exp - end - - def te - ts + base_length - end - - def to_h - attributes.merge( - text: to_s(:base), - expressions: expressions.map(&:to_h) - ) - end - - def extract_quantifier_target(quantifier_description) - pre_quantifier_decorations = [] - target = expressions.reverse.find do |exp| - if exp.decorative? - exp.custom_to_s_handling = true - pre_quantifier_decorations << exp.text - next - end - exp - end - target or raise Regexp::Parser::ParserError, - "No valid target found for '#{quantifier_description}' quantifier" - - target.pre_quantifier_decorations = pre_quantifier_decorations - target - end - end -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/lexer.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/lexer.rb deleted file mode 100644 index 3f371dd0..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/lexer.rb +++ /dev/null @@ -1,169 +0,0 @@ -# A very thin wrapper around the scanner that breaks quantified literal runs, -# collects emitted tokens into an array, calculates their nesting depth, and -# normalizes tokens for the parser, and checks if they are implemented by the -# given syntax flavor. -class Regexp::Lexer - - OPENING_TOKENS = %i[ - capture passive lookahead nlookahead lookbehind nlookbehind - atomic options options_switch named absence open - ].freeze - - CLOSING_TOKENS = %i[close].freeze - - CONDITION_TOKENS = %i[condition condition_close].freeze - - def self.lex(input, syntax = nil, options: nil, collect_tokens: true, &block) - new.lex(input, syntax, options: options, collect_tokens: collect_tokens, &block) - end - - def lex(input, syntax = nil, options: nil, collect_tokens: true, &block) - syntax = syntax ? Regexp::Syntax.for(syntax) : Regexp::Syntax::CURRENT - - self.block = block - self.collect_tokens = collect_tokens - self.tokens = [] - self.prev_token = nil - self.preprev_token = nil - self.nesting = 0 - self.set_nesting = 0 - self.conditional_nesting = 0 - self.shift = 0 - - Regexp::Scanner.scan(input, options: options, collect_tokens: false) do |type, token, text, ts, te| - type, token = *syntax.normalize(type, token) - syntax.check! type, token - - ascend(type, token) - - if (last = prev_token) && - type == :quantifier && - ( - (last.type == :literal && (parts = break_literal(last))) || - (last.token == :codepoint_list && (parts = break_codepoint_list(last))) - ) - emit(parts[0]) - last = parts[1] - end - - current = Regexp::Token.new(type, token, text, ts + shift, te + shift, - nesting, set_nesting, conditional_nesting) - - if type == :conditional && CONDITION_TOKENS.include?(token) - current = merge_condition(current, last) - elsif last - last.next = current - current.previous = last - emit(last) - end - - self.preprev_token = last - self.prev_token = current - - descend(type, token) - end - - emit(prev_token) if prev_token - - collect_tokens ? tokens : nil - end - - def emit(token) - if block - # TODO: in v3.0.0, remove `collect_tokens:` kwarg and only collect w/o block - res = block.call(token) - tokens << res if collect_tokens - else - tokens << token - end - end - - class << self - alias :scan :lex - end - - private - - attr_accessor :block, - :collect_tokens, :tokens, :prev_token, :preprev_token, - :nesting, :set_nesting, :conditional_nesting, :shift - - def ascend(type, token) - return unless CLOSING_TOKENS.include?(token) - - case type - when :group, :assertion - self.nesting = nesting - 1 - when :set - self.set_nesting = set_nesting - 1 - when :conditional - self.conditional_nesting = conditional_nesting - 1 - else - raise "unhandled nesting type #{type}" - end - end - - def descend(type, token) - return unless OPENING_TOKENS.include?(token) - - case type - when :group, :assertion - self.nesting = nesting + 1 - when :set - self.set_nesting = set_nesting + 1 - when :conditional - self.conditional_nesting = conditional_nesting + 1 - else - raise "unhandled nesting type #{type}" - end - end - - # called by scan to break a literal run that is longer than one character - # into two separate tokens when it is followed by a quantifier - def break_literal(token) - lead, last, _ = token.text.partition(/.\z/mu) - return if lead.empty? - - token_1 = Regexp::Token.new(:literal, :literal, lead, - token.ts, (token.te - last.length), - nesting, set_nesting, conditional_nesting) - token_2 = Regexp::Token.new(:literal, :literal, last, - (token.ts + lead.length), token.te, - nesting, set_nesting, conditional_nesting) - - token_1.previous = preprev_token - token_1.next = token_2 - token_2.previous = token_1 # .next will be set by #lex - [token_1, token_2] - end - - # if a codepoint list is followed by a quantifier, that quantifier applies - # to the last codepoint, e.g. /\u{61 62 63}{3}/ =~ 'abccc' - # c.f. #break_literal. - def break_codepoint_list(token) - lead, _, tail = token.text.rpartition(' ') - return if lead.empty? - - token_1 = Regexp::Token.new(:escape, :codepoint_list, lead + '}', - token.ts, (token.te - tail.length), - nesting, set_nesting, conditional_nesting) - token_2 = Regexp::Token.new(:escape, :codepoint_list, '\u{' + tail, - (token.ts + lead.length + 1), (token.te + 3), - nesting, set_nesting, conditional_nesting) - - self.shift = shift + 3 # one space less, but extra \, u, {, and } - - token_1.previous = preprev_token - token_1.next = token_2 - token_2.previous = token_1 # .next will be set by #lex - [token_1, token_2] - end - - def merge_condition(current, last) - token = Regexp::Token.new(:conditional, :condition, last.text + current.text, - last.ts, current.te, nesting, set_nesting, conditional_nesting) - token.previous = preprev_token # .next will be set by #lex - token - end - -end # module Regexp::Lexer diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/parser.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/parser.rb deleted file mode 100644 index 91154f50..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/parser.rb +++ /dev/null @@ -1,596 +0,0 @@ -require 'regexp_parser/error' -require 'regexp_parser/expression' - -class Regexp::Parser - include Regexp::Expression - - class ParserError < Regexp::Parser::Error; end - - class UnknownTokenTypeError < ParserError - def initialize(type, token) - super "Unknown token type #{type} #{token.inspect}" - end - end - - class UnknownTokenError < ParserError - def initialize(type, token) - super "Unknown #{type} token #{token.token}" - end - end - - def self.parse(input, syntax = nil, options: nil, &block) - new.parse(input, syntax, options: options, &block) - end - - def parse(input, syntax = nil, options: nil, &block) - root = Root.construct(options: extract_options(input, options)) - - self.root = root - self.node = root - self.nesting = [root] - - self.options_stack = [root.options] - self.switching_options = false - self.conditional_nesting = [] - - self.captured_group_counts = Hash.new(0) - - Regexp::Lexer.scan(input, syntax, options: options, collect_tokens: false) do |token| - parse_token(token) - end - - # Trigger recursive setting of #nesting_level, which reflects how deep - # a node is in the tree. Do this at the end to account for tree rewrites. - root.nesting_level = 0 - assign_referenced_expressions - - if block_given? - block.call(root) - else - root - end - end - - private - - attr_accessor :root, :node, :nesting, - :options_stack, :switching_options, :conditional_nesting, - :captured_group_counts - - def extract_options(input, options) - if options && !input.is_a?(String) - raise ArgumentError, 'options cannot be supplied unless parsing a String' - end - - options = input.options if input.is_a?(::Regexp) - - return {} unless options - - enabled_options = {} - enabled_options[:i] = true if options & ::Regexp::IGNORECASE != 0 - enabled_options[:m] = true if options & ::Regexp::MULTILINE != 0 - enabled_options[:x] = true if options & ::Regexp::EXTENDED != 0 - enabled_options - end - - def parse_token(token) - case token.type - when :anchor; anchor(token) - when :assertion, :group; group(token) - when :backref; backref(token) - when :conditional; conditional(token) - when :escape; escape(token) - when :free_space; free_space(token) - when :keep; keep(token) - when :literal; literal(token) - when :meta; meta(token) - when :posixclass, :nonposixclass; posixclass(token) - when :property, :nonproperty; property(token) - when :quantifier; quantifier(token) - when :set; set(token) - when :type; type(token) - else - raise UnknownTokenTypeError.new(token.type, token) - end - - close_completed_character_set_range - end - - def anchor(token) - case token.token - when :bol; node << Anchor::BeginningOfLine.new(token, active_opts) - when :bos; node << Anchor::BOS.new(token, active_opts) - when :eol; node << Anchor::EndOfLine.new(token, active_opts) - when :eos; node << Anchor::EOS.new(token, active_opts) - when :eos_ob_eol; node << Anchor::EOSobEOL.new(token, active_opts) - when :match_start; node << Anchor::MatchStart.new(token, active_opts) - when :nonword_boundary; node << Anchor::NonWordBoundary.new(token, active_opts) - when :word_boundary; node << Anchor::WordBoundary.new(token, active_opts) - else - raise UnknownTokenError.new('Anchor', token) - end - end - - def group(token) - case token.token - when :options, :options_switch - options_group(token) - when :close - close_group - when :comment - node << Group::Comment.new(token, active_opts) - else - open_group(token) - end - end - - MOD_FLAGS = %w[i m x].map(&:to_sym) - ENC_FLAGS = %w[a d u].map(&:to_sym) - - def options_group(token) - positive, negative = token.text.split('-', 2) - negative ||= '' - self.switching_options = token.token.equal?(:options_switch) - - opt_changes = {} - new_active_opts = active_opts.dup - - MOD_FLAGS.each do |flag| - if positive.include?(flag.to_s) - opt_changes[flag] = new_active_opts[flag] = true - end - if negative.include?(flag.to_s) - opt_changes[flag] = false - new_active_opts.delete(flag) - end - end - - if (enc_flag = positive.reverse[/[adu]/]) - enc_flag = enc_flag.to_sym - (ENC_FLAGS - [enc_flag]).each do |other| - opt_changes[other] = false if new_active_opts[other] - new_active_opts.delete(other) - end - opt_changes[enc_flag] = new_active_opts[enc_flag] = true - end - - options_stack << new_active_opts - - options_group = Group::Options.new(token, active_opts) - options_group.option_changes = opt_changes - - nest(options_group) - end - - def open_group(token) - group_class = - case token.token - when :absence; Group::Absence - when :atomic; Group::Atomic - when :capture; Group::Capture - when :named; Group::Named - when :passive; Group::Passive - - when :lookahead; Assertion::Lookahead - when :lookbehind; Assertion::Lookbehind - when :nlookahead; Assertion::NegativeLookahead - when :nlookbehind; Assertion::NegativeLookbehind - - else - raise UnknownTokenError.new('Group type open', token) - end - - group = group_class.new(token, active_opts) - - if group.capturing? - group.number = total_captured_group_count + 1 - group.number_at_level = captured_group_count_at_level + 1 - count_captured_group - end - - # Push the active options to the stack again. This way we can simply pop the - # stack for any group we close, no matter if it had its own options or not. - options_stack << active_opts - - nest(group) - end - - def total_captured_group_count - captured_group_counts.values.reduce(0, :+) - end - - def captured_group_count_at_level - captured_group_counts[node] - end - - def count_captured_group - captured_group_counts[node] += 1 - end - - def close_group - options_stack.pop unless switching_options - self.switching_options = false - decrease_nesting - end - - def decrease_nesting - while nesting.last.is_a?(SequenceOperation) - nesting.pop - self.node = nesting.last - end - nesting.pop - yield(node) if block_given? - self.node = nesting.last - self.node = node.last if node.last.is_a?(SequenceOperation) - end - - def backref(token) - case token.token - when :name_ref - node << Backreference::Name.new(token, active_opts) - when :name_recursion_ref - node << Backreference::NameRecursionLevel.new(token, active_opts) - when :name_call - node << Backreference::NameCall.new(token, active_opts) - when :number, :number_ref # TODO: split in v3.0.0 - node << Backreference::Number.new(token, active_opts) - when :number_recursion_ref - node << Backreference::NumberRecursionLevel.new(token, active_opts).tap do |exp| - # TODO: should split off new token number_recursion_rel_ref and new - # class NumberRelativeRecursionLevel in v3.0.0 to get rid of this - if exp.text =~ /[<'][+-]/ - assign_effective_number(exp) - else - exp.effective_number = exp.number - end - end - when :number_call - node << Backreference::NumberCall.new(token, active_opts) - when :number_rel_ref - node << Backreference::NumberRelative.new(token, active_opts).tap do |exp| - assign_effective_number(exp) - end - when :number_rel_call - node << Backreference::NumberCallRelative.new(token, active_opts).tap do |exp| - assign_effective_number(exp) - end - else - raise UnknownTokenError.new('Backreference', token) - end - end - - def assign_effective_number(exp) - exp.effective_number = - exp.number + total_captured_group_count + (exp.number < 0 ? 1 : 0) - exp.effective_number > 0 || - raise(ParserError, "Invalid reference: #{exp.reference}") - end - - def conditional(token) - case token.token - when :open - nest_conditional(Conditional::Expression.new(token, active_opts)) - when :condition - conditional_nesting.last.condition = Conditional::Condition.new(token, active_opts) - conditional_nesting.last.add_sequence(active_opts, { ts: token.te }) - when :separator - conditional_nesting.last.add_sequence(active_opts, { ts: token.te }) - self.node = conditional_nesting.last.branches.last - when :close - conditional_nesting.pop - decrease_nesting - - self.node = - if conditional_nesting.empty? - nesting.last - else - conditional_nesting.last - end - else - raise UnknownTokenError.new('Conditional', token) - end - end - - def nest_conditional(exp) - conditional_nesting.push(exp) - nest(exp) - end - - def nest(exp) - nesting.push(exp) - node << exp - self.node = exp - end - - def escape(token) - case token.token - - when :backspace; node << EscapeSequence::Backspace.new(token, active_opts) - - when :escape; node << EscapeSequence::AsciiEscape.new(token, active_opts) - when :bell; node << EscapeSequence::Bell.new(token, active_opts) - when :form_feed; node << EscapeSequence::FormFeed.new(token, active_opts) - when :newline; node << EscapeSequence::Newline.new(token, active_opts) - when :carriage; node << EscapeSequence::Return.new(token, active_opts) - when :tab; node << EscapeSequence::Tab.new(token, active_opts) - when :vertical_tab; node << EscapeSequence::VerticalTab.new(token, active_opts) - - when :codepoint; node << EscapeSequence::Codepoint.new(token, active_opts) - when :codepoint_list; node << EscapeSequence::CodepointList.new(token, active_opts) - when :hex; node << EscapeSequence::Hex.new(token, active_opts) - when :octal; node << EscapeSequence::Octal.new(token, active_opts) - - when :control - if token.text =~ /\A(?:\\C-\\M|\\c\\M)/ - # TODO: emit :meta_control_sequence token in v3.0.0 - node << EscapeSequence::MetaControl.new(token, active_opts) - else - node << EscapeSequence::Control.new(token, active_opts) - end - - when :meta_sequence - if token.text =~ /\A\\M-\\[Cc]/ - # TODO: emit :meta_control_sequence token in v3.0.0: - node << EscapeSequence::MetaControl.new(token, active_opts) - else - node << EscapeSequence::Meta.new(token, active_opts) - end - - else - # treating everything else as a literal - # TODO: maybe split this up a bit more in v3.0.0? - # E.g. escaped quantifiers or set meta chars are not the same - # as stuff that would be a literal even without the backslash. - # Right now, they all end up here. - node << EscapeSequence::Literal.new(token, active_opts) - end - end - - def free_space(token) - case token.token - when :comment - node << Comment.new(token, active_opts) - when :whitespace - node << WhiteSpace.new(token, active_opts) - else - raise UnknownTokenError.new('FreeSpace', token) - end - end - - def keep(token) - node << Keep::Mark.new(token, active_opts) - end - - def literal(token) - node << Literal.new(token, active_opts) - end - - def meta(token) - case token.token - when :dot - node << CharacterType::Any.new(token, active_opts) - when :alternation - sequence_operation(Alternation, token) - else - raise UnknownTokenError.new('Meta', token) - end - end - - def sequence_operation(klass, token) - unless node.instance_of?(klass) - operator = klass.new(token, active_opts) - sequence = operator.add_sequence(active_opts, { ts: token.ts }) - sequence.expressions = node.expressions - node.expressions = [] - nest(operator) - end - node.add_sequence(active_opts, { ts: token.te }) - end - - def posixclass(token) - node << PosixClass.new(token, active_opts) - end - - UP = Regexp::Expression::Property - UPTokens = Regexp::Syntax::Token::Property - - def property(token) - case token.token - when :alnum; node << UP::Alnum.new(token, active_opts) - when :alpha; node << UP::Alpha.new(token, active_opts) - when :ascii; node << UP::Ascii.new(token, active_opts) - when :blank; node << UP::Blank.new(token, active_opts) - when :cntrl; node << UP::Cntrl.new(token, active_opts) - when :digit; node << UP::Digit.new(token, active_opts) - when :graph; node << UP::Graph.new(token, active_opts) - when :lower; node << UP::Lower.new(token, active_opts) - when :print; node << UP::Print.new(token, active_opts) - when :punct; node << UP::Punct.new(token, active_opts) - when :space; node << UP::Space.new(token, active_opts) - when :upper; node << UP::Upper.new(token, active_opts) - when :word; node << UP::Word.new(token, active_opts) - when :xdigit; node << UP::Xdigit.new(token, active_opts) - when :xposixpunct; node << UP::XPosixPunct.new(token, active_opts) - - # only in Oniguruma (old rubies) - when :newline; node << UP::Newline.new(token, active_opts) - - when :any; node << UP::Any.new(token, active_opts) - when :assigned; node << UP::Assigned.new(token, active_opts) - - when :letter; node << UP::Letter::Any.new(token, active_opts) - when :cased_letter; node << UP::Letter::Cased.new(token, active_opts) - when :uppercase_letter; node << UP::Letter::Uppercase.new(token, active_opts) - when :lowercase_letter; node << UP::Letter::Lowercase.new(token, active_opts) - when :titlecase_letter; node << UP::Letter::Titlecase.new(token, active_opts) - when :modifier_letter; node << UP::Letter::Modifier.new(token, active_opts) - when :other_letter; node << UP::Letter::Other.new(token, active_opts) - - when :mark; node << UP::Mark::Any.new(token, active_opts) - when :combining_mark; node << UP::Mark::Combining.new(token, active_opts) - when :nonspacing_mark; node << UP::Mark::Nonspacing.new(token, active_opts) - when :spacing_mark; node << UP::Mark::Spacing.new(token, active_opts) - when :enclosing_mark; node << UP::Mark::Enclosing.new(token, active_opts) - - when :number; node << UP::Number::Any.new(token, active_opts) - when :decimal_number; node << UP::Number::Decimal.new(token, active_opts) - when :letter_number; node << UP::Number::Letter.new(token, active_opts) - when :other_number; node << UP::Number::Other.new(token, active_opts) - - when :punctuation; node << UP::Punctuation::Any.new(token, active_opts) - when :connector_punctuation; node << UP::Punctuation::Connector.new(token, active_opts) - when :dash_punctuation; node << UP::Punctuation::Dash.new(token, active_opts) - when :open_punctuation; node << UP::Punctuation::Open.new(token, active_opts) - when :close_punctuation; node << UP::Punctuation::Close.new(token, active_opts) - when :initial_punctuation; node << UP::Punctuation::Initial.new(token, active_opts) - when :final_punctuation; node << UP::Punctuation::Final.new(token, active_opts) - when :other_punctuation; node << UP::Punctuation::Other.new(token, active_opts) - - when :separator; node << UP::Separator::Any.new(token, active_opts) - when :space_separator; node << UP::Separator::Space.new(token, active_opts) - when :line_separator; node << UP::Separator::Line.new(token, active_opts) - when :paragraph_separator; node << UP::Separator::Paragraph.new(token, active_opts) - - when :symbol; node << UP::Symbol::Any.new(token, active_opts) - when :math_symbol; node << UP::Symbol::Math.new(token, active_opts) - when :currency_symbol; node << UP::Symbol::Currency.new(token, active_opts) - when :modifier_symbol; node << UP::Symbol::Modifier.new(token, active_opts) - when :other_symbol; node << UP::Symbol::Other.new(token, active_opts) - - when :other; node << UP::Codepoint::Any.new(token, active_opts) - when :control; node << UP::Codepoint::Control.new(token, active_opts) - when :format; node << UP::Codepoint::Format.new(token, active_opts) - when :surrogate; node << UP::Codepoint::Surrogate.new(token, active_opts) - when :private_use; node << UP::Codepoint::PrivateUse.new(token, active_opts) - when :unassigned; node << UP::Codepoint::Unassigned.new(token, active_opts) - - when *UPTokens::Age; node << UP::Age.new(token, active_opts) - when *UPTokens::Derived; node << UP::Derived.new(token, active_opts) - when *UPTokens::Emoji; node << UP::Emoji.new(token, active_opts) - when *UPTokens::Enumerated; node << UP::Enumerated.new(token, active_opts) - when *UPTokens::Script; node << UP::Script.new(token, active_opts) - when *UPTokens::UnicodeBlock; node << UP::Block.new(token, active_opts) - - else - raise UnknownTokenError.new('UnicodeProperty', token) - end - end - - def quantifier(token) - target_node = node.extract_quantifier_target(token.text) - - # in case of chained quantifiers, wrap target in an implicit passive group - # description of the problem: https://github.com/ammar/regexp_parser/issues/3 - # rationale for this solution: https://github.com/ammar/regexp_parser/pull/69 - if target_node.quantified? - new_group = Group::Passive.construct( - token: :passive, - ts: target_node.ts, - level: target_node.level, - set_level: target_node.set_level, - conditional_level: target_node.conditional_level, - options: active_opts, - ) - new_group.implicit = true - new_group << target_node - increase_group_level(target_node) - node.expressions[node.expressions.index(target_node)] = new_group - target_node = new_group - end - - unless token.token =~ /\A(?:zero_or_one|zero_or_more|one_or_more|interval) - (?:_greedy|_reluctant|_possessive)?\z/x - raise UnknownTokenError.new('Quantifier', token) - end - - target_node.quantify(token, active_opts) - end - - def increase_group_level(exp) - exp.level += 1 - exp.quantifier.level += 1 if exp.quantifier - exp.terminal? || exp.each { |subexp| increase_group_level(subexp) } - end - - def set(token) - case token.token - when :open; open_set(token) - when :close; close_set - when :negate; negate_set - when :range; range(token) - when :intersection; intersection(token) - else - raise UnknownTokenError.new('CharacterSet', token) - end - end - - def open_set(token) - # TODO: this and Quantifier are the only cases where Expression#token - # does not match the scanner/lexer output. Fix in v3.0.0. - token.token = :character - nest(CharacterSet.new(token, active_opts)) - end - - def negate_set - node.negate - end - - def close_set - decrease_nesting(&:close) - end - - def range(token) - exp = CharacterSet::Range.new(token, active_opts) - scope = node.last.instance_of?(CharacterSet::IntersectedSequence) ? node.last : node - exp << scope.expressions.pop - nest(exp) - end - - def intersection(token) - sequence_operation(CharacterSet::Intersection, token) - end - - def type(token) - case token.token - when :digit; node << CharacterType::Digit.new(token, active_opts) - when :hex; node << CharacterType::Hex.new(token, active_opts) - when :linebreak; node << CharacterType::Linebreak.new(token, active_opts) - when :nondigit; node << CharacterType::NonDigit.new(token, active_opts) - when :nonhex; node << CharacterType::NonHex.new(token, active_opts) - when :nonspace; node << CharacterType::NonSpace.new(token, active_opts) - when :nonword; node << CharacterType::NonWord.new(token, active_opts) - when :space; node << CharacterType::Space.new(token, active_opts) - when :word; node << CharacterType::Word.new(token, active_opts) - when :xgrapheme; node << CharacterType::ExtendedGrapheme.new(token, active_opts) - else - raise UnknownTokenError.new('CharacterType', token) - end - end - - def close_completed_character_set_range - decrease_nesting if node.instance_of?(CharacterSet::Range) && node.complete? - end - - def active_opts - options_stack.last - end - - # Assigns referenced expressions to refering expressions, e.g. if there is - # an instance of Backreference::Number, its #referenced_expression is set to - # the instance of Group::Capture that it refers to via its number. - def assign_referenced_expressions - # find all referencable and refering expressions - targets = { 0 => root } - referrers = [] - root.each_expression do |exp| - exp.is_a?(Group::Capture) && targets[exp.identifier] = exp - referrers << exp if exp.referential? - end - # assign reference expression to refering expressions - # (in a second iteration because there might be forward references) - referrers.each do |exp| - exp.referenced_expression = targets[exp.reference] || - raise(ParserError, "Invalid reference #{exp.reference} at pos #{exp.ts}") - end - end -end # module Regexp::Parser diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/scanner.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/scanner.rb deleted file mode 100644 index dd42d6f6..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/scanner.rb +++ /dev/null @@ -1,2514 +0,0 @@ -# -*- warn-indent:false; -*- -# -# THIS IS A GENERATED FILE, DO NOT EDIT DIRECTLY -# -# This file was generated from scanner.rl -# by running `bundle exec rake ragel:rb` - - -require 'regexp_parser/scanner/errors/scanner_error' -require 'regexp_parser/scanner/errors/premature_end_error' -require 'regexp_parser/scanner/errors/validation_error' - -class Regexp::Scanner - # Scans the given regular expression text, or Regexp object and collects the - # emitted token into an array that gets returned at the end. If a block is - # given, it gets called for each emitted token. - # - # This method may raise errors if a syntax error is encountered. - # -------------------------------------------------------------------------- - def self.scan(input_object, options: nil, collect_tokens: true, &block) - new.scan(input_object, options: options, collect_tokens: collect_tokens, &block) - end - - def scan(input_object, options: nil, collect_tokens: true, &block) - self.collect_tokens = collect_tokens - self.literal_run = nil - stack = [] - - input = input_object.is_a?(Regexp) ? input_object.source : input_object - self.free_spacing = free_spacing?(input_object, options) - self.spacing_stack = [{:free_spacing => free_spacing, :depth => 0}] - - data = input.unpack("c*") - eof = data.length - - self.tokens = [] - self.block = block - - self.set_depth = 0 - self.group_depth = 0 - self.conditional_stack = [] - self.char_pos = 0 - -class << self - attr_accessor :_re_scanner_trans_keys - private :_re_scanner_trans_keys, :_re_scanner_trans_keys= -end -self._re_scanner_trans_keys = [ -0,0,-128,-65,-128,-65, --128,-65,41,41,39, -57,39,39,33,62, -62,62,39,60,39,57, -39,39,48,57,39, -57,48,57,39,57, -33,62,62,62,48,57, -43,62,48,57,48, -62,39,60,39,57, -39,39,48,57,39,57, -48,57,39,57,33, -62,62,62,48,57, -43,62,48,57,48,62, -48,57,48,125,44, -125,123,123,9,122, -9,125,9,122,-128,-65, --128,-65,38,38,58, -93,58,93,-128,-65, --128,-65,45,45,92,92, -92,92,45,45,92, -92,92,92,48,123, -48,102,48,102,48,102, -48,102,9,125,9, -125,9,125,9,125, -9,125,9,125,48,123, -39,39,41,41,41, -57,62,62,-128,127, --62,-12,1,127,1,127, -9,32,33,126,10, -10,63,63,33,126, -33,126,62,62,43,63, -43,63,43,63,65, -122,44,57,68,119, -80,112,-62,125,-128,-65, --128,-65,-128,-65,38, -38,38,93,58,58, -48,120,48,55,48,55, --62,125,-128,-65,-128, --65,-128,-65,48,55, -48,55,48,57,77,77, -45,45,0,0,67, -99,45,45,0,0, -92,92,48,102,39,60, -39,57,48,57,41, -57,33,62,0 -] - -class << self - attr_accessor :_re_scanner_key_spans - private :_re_scanner_key_spans, :_re_scanner_key_spans= -end -self._re_scanner_key_spans = [ -0,64,64,64,1,19,1,30, -1,22,19,1,10,19,10,19, -30,1,10,20,10,15,22,19, -1,10,19,10,19,30,1,10, -20,10,15,10,78,82,1,114, -117,114,64,64,1,36,36,64, -64,1,1,1,1,1,1,76, -55,55,55,55,117,117,117,117, -117,117,76,1,1,17,1,256, -51,127,127,24,94,1,1,94, -94,1,21,21,21,58,14,52, -33,188,64,64,64,1,56,1, -73,8,8,188,64,64,64,8, -8,10,1,1,0,33,1,0, -1,55,22,19,10,17,30 -] - -class << self - attr_accessor :_re_scanner_index_offsets - private :_re_scanner_index_offsets, :_re_scanner_index_offsets= -end -self._re_scanner_index_offsets = [ -0,0,65,130,195,197,217,219, -250,252,275,295,297,308,328,339, -359,390,392,403,424,435,451,474, -494,496,507,527,538,558,589,591, -602,623,634,650,661,740,823,825, -940,1058,1173,1238,1303,1305,1342,1379, -1444,1509,1511,1513,1515,1517,1519,1521, -1598,1654,1710,1766,1822,1940,2058,2176, -2294,2412,2530,2607,2609,2611,2629,2631, -2888,2940,3068,3196,3221,3316,3318,3320, -3415,3510,3512,3534,3556,3578,3637,3652, -3705,3739,3928,3993,4058,4123,4125,4182, -4184,4258,4267,4276,4465,4530,4595,4660, -4669,4678,4689,4691,4693,4694,4728,4730, -4731,4733,4789,4812,4832,4843,4861 -] - -class << self - attr_accessor :_re_scanner_indicies - private :_re_scanner_indicies, :_re_scanner_indicies= -end -self._re_scanner_indicies = [ -1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1, -0,2,2,2,2,2,2,2, -2,2,2,2,2,2,2,2, -2,2,2,2,2,2,2,2, -2,2,2,2,2,2,2,2, -2,2,2,2,2,2,2,2, -2,2,2,2,2,2,2,2, -2,2,2,2,2,2,2,2, -2,2,2,2,2,2,2,2, -2,0,3,3,3,3,3,3, -3,3,3,3,3,3,3,3, -3,3,3,3,3,3,3,3, -3,3,3,3,3,3,3,3, -3,3,3,3,3,3,3,3, -3,3,3,3,3,3,3,3, -3,3,3,3,3,3,3,3, -3,3,3,3,3,3,3,3, -3,3,0,6,5,8,7,7, -7,7,7,4,7,7,4,4, -4,4,4,4,4,4,4,4, -7,8,7,10,9,9,9,9, -9,9,9,9,9,9,9,4, -9,9,4,4,4,4,4,4, -4,4,4,4,9,9,9,11, -8,9,8,9,13,12,12,12, -12,12,12,12,12,12,12,12, -12,12,12,12,12,12,12,12, -12,14,12,16,15,15,15,15, -15,17,15,15,18,18,18,18, -18,18,18,18,18,18,15,16, -15,18,18,18,18,18,18,18, -18,18,18,12,16,12,12,12, -19,12,19,12,12,18,18,18, -18,18,18,18,18,18,18,12, -20,20,20,20,20,20,20,20, -20,20,12,16,12,12,12,12, -12,12,12,12,20,20,20,20, -20,20,20,20,20,20,12,12, -21,21,21,21,21,21,21,21, -21,21,21,22,21,21,23,23, -23,23,23,23,23,23,23,23, -21,21,21,21,16,21,16,21, -23,23,23,23,23,23,23,23, -23,23,12,24,12,24,12,12, -23,23,23,23,23,23,23,23, -23,23,12,12,12,12,16,12, -25,25,25,25,25,25,25,25, -25,25,12,25,25,25,25,25, -25,25,25,25,25,12,12,12, -12,16,12,26,12,12,12,12, -12,12,12,12,12,12,12,12, -12,12,12,12,12,12,12,12, -27,12,29,28,28,28,28,28, -30,28,28,31,31,31,31,31, -31,31,31,31,31,28,29,28, -31,31,31,31,31,31,31,31, -31,31,12,29,12,12,12,32, -12,32,12,12,31,31,31,31, -31,31,31,31,31,31,12,33, -33,33,33,33,33,33,33,33, -33,12,29,12,12,12,12,12, -12,12,12,33,33,33,33,33, -33,33,33,33,33,12,12,34, -34,34,34,34,34,34,34,34, -34,34,35,34,34,36,36,36, -36,36,36,36,36,36,36,34, -34,34,34,29,34,29,34,36, -36,36,36,36,36,36,36,36, -36,12,37,12,37,12,12,36, -36,36,36,36,36,36,36,36, -36,12,12,12,12,29,12,38, -38,38,38,38,38,38,38,38, -38,12,38,38,38,38,38,38, -38,38,38,38,12,12,12,12, -29,12,40,40,40,40,40,40, -40,40,40,40,39,40,40,40, -40,40,40,40,40,40,40,39, -39,39,39,39,39,39,39,39, -39,39,39,39,39,39,39,39, -39,39,39,39,39,39,39,39, -39,39,39,39,39,39,39,39, -39,39,39,39,39,39,39,39, -39,39,39,39,39,39,39,39, -39,39,39,39,39,39,39,39, -39,39,39,39,39,39,39,39, -39,39,41,39,40,39,39,39, -42,42,42,42,42,42,42,42, -42,42,39,39,39,39,39,39, -39,39,39,39,39,39,39,39, -39,39,39,39,39,39,39,39, -39,39,39,39,39,39,39,39, -39,39,39,39,39,39,39,39, -39,39,39,39,39,39,39,39, -39,39,39,39,39,39,39,39, -39,39,39,39,39,39,39,39, -39,39,39,39,39,41,39,43, -44,45,45,45,45,45,44,44, -44,44,44,44,44,44,44,44, -44,44,44,44,44,44,44,44, -45,44,44,44,44,44,44,44, -44,44,44,44,44,45,45,44, -45,45,45,45,45,45,45,45, -45,45,44,44,44,45,44,44, -44,45,45,45,45,45,45,45, -45,45,45,45,45,45,45,45, -45,45,45,45,45,45,45,45, -45,45,45,44,44,44,46,45, -44,45,45,45,45,45,45,45, -45,45,45,45,45,45,45,45, -45,45,45,45,45,45,45,45, -45,45,45,44,45,45,45,45, -45,44,44,44,44,44,44,44, -44,44,44,44,44,44,44,44, -44,44,44,45,44,44,44,44, -44,44,44,44,44,44,44,44, -45,45,44,45,45,45,45,45, -45,45,45,45,45,44,44,44, -45,44,44,44,45,45,45,45, -45,45,45,45,45,45,45,45, -45,45,45,45,45,45,45,45, -45,45,45,45,45,45,44,44, -44,44,45,44,45,45,45,45, -45,45,45,45,45,45,45,45, -45,45,45,45,45,45,45,45, -45,45,45,45,45,45,44,44, -47,44,45,45,45,45,45,44, -44,44,44,44,44,44,44,44, -44,44,44,44,44,44,44,44, -44,45,44,44,44,44,44,44, -44,44,44,44,44,44,45,45, -44,45,45,45,45,45,45,45, -45,45,45,44,44,44,45,44, -44,44,45,45,45,45,45,45, -45,45,45,45,45,45,45,45, -45,45,45,45,45,45,45,45, -45,45,45,45,44,44,44,44, -45,44,45,45,45,45,45,45, -45,45,45,45,45,45,45,45, -45,45,45,45,45,45,45,45, -45,45,45,45,44,49,49,49, -49,49,49,49,49,49,49,49, -49,49,49,49,49,49,49,49, -49,49,49,49,49,49,49,49, -49,49,49,49,49,49,49,49, -49,49,49,49,49,49,49,49, -49,49,49,49,49,49,49,49, -49,49,49,49,49,49,49,49, -49,49,49,49,49,48,50,50, -50,50,50,50,50,50,50,50, -50,50,50,50,50,50,50,50, -50,50,50,50,50,50,50,50, -50,50,50,50,50,50,50,50, -50,50,50,50,50,50,50,50, -50,50,50,50,50,50,50,50, -50,50,50,50,50,50,50,50, -50,50,50,50,50,50,48,52, -51,55,54,54,54,54,54,54, -54,54,54,54,54,54,54,54, -54,54,54,54,54,54,54,54, -54,54,54,54,54,54,54,54, -54,54,56,54,56,54,55,54, -54,54,54,54,54,54,54,54, -54,54,54,54,54,54,54,54, -54,54,54,54,54,54,54,54, -54,54,54,54,54,54,54,56, -54,57,54,59,59,59,59,59, -59,59,59,59,59,59,59,59, -59,59,59,59,59,59,59,59, -59,59,59,59,59,59,59,59, -59,59,59,59,59,59,59,59, -59,59,59,59,59,59,59,59, -59,59,59,59,59,59,59,59, -59,59,59,59,59,59,59,59, -59,59,59,58,60,60,60,60, -60,60,60,60,60,60,60,60, -60,60,60,60,60,60,60,60, -60,60,60,60,60,60,60,60, -60,60,60,60,60,60,60,60, -60,60,60,60,60,60,60,60, -60,60,60,60,60,60,60,60, -60,60,60,60,60,60,60,60, -60,60,60,60,58,61,44,63, -62,65,62,66,44,68,67,70, -67,71,71,71,71,71,71,71, -71,71,71,44,44,44,44,44, -44,44,71,71,71,71,71,71, -44,44,44,44,44,44,44,44, -44,44,44,44,44,44,44,44, -44,44,44,44,44,44,44,44, -44,44,71,71,71,71,71,71, -44,44,44,44,44,44,44,44, -44,44,44,44,44,44,44,44, -44,44,44,44,72,44,73,73, -73,73,73,73,73,73,73,73, -44,44,44,44,44,44,44,73, -73,73,73,73,73,44,44,44, -44,44,44,44,44,44,44,44, -44,44,44,44,44,44,44,44, -44,44,44,44,44,44,44,73, -73,73,73,73,73,44,74,74, -74,74,74,74,74,74,74,74, -44,44,44,44,44,44,44,74, -74,74,74,74,74,44,44,44, -44,44,44,44,44,44,44,44, -44,44,44,44,44,44,44,44, -44,44,44,44,44,44,44,74, -74,74,74,74,74,44,75,75, -75,75,75,75,75,75,75,75, -44,44,44,44,44,44,44,75, -75,75,75,75,75,44,44,44, -44,44,44,44,44,44,44,44, -44,44,44,44,44,44,44,44, -44,44,44,44,44,44,44,75, -75,75,75,75,75,44,76,76, -76,76,76,76,76,76,76,76, -44,44,44,44,44,44,44,76, -76,76,76,76,76,44,44,44, -44,44,44,44,44,44,44,44, -44,44,44,44,44,44,44,44, -44,44,44,44,44,44,44,76, -76,76,76,76,76,44,72,72, -72,72,72,44,44,44,44,44, -44,44,44,44,44,44,44,44, -44,44,44,44,44,72,44,44, -44,44,44,44,44,44,44,44, -44,44,44,44,44,77,77,77, -77,77,77,77,77,77,77,44, -44,44,44,44,44,44,77,77, -77,77,77,77,44,44,44,44, -44,44,44,44,44,44,44,44, -44,44,44,44,44,44,44,44, -44,44,44,44,44,44,77,77, -77,77,77,77,44,44,44,44, -44,44,44,44,44,44,44,44, -44,44,44,44,44,44,44,44, -44,44,75,44,72,72,72,72, -72,44,44,44,44,44,44,44, -44,44,44,44,44,44,44,44, -44,44,44,72,44,44,44,44, -44,44,44,44,44,44,44,44, -44,44,44,78,78,78,78,78, -78,78,78,78,78,44,44,44, -44,44,44,44,78,78,78,78, -78,78,44,44,44,44,44,44, -44,44,44,44,44,44,44,44, -44,44,44,44,44,44,44,44, -44,44,44,44,78,78,78,78, -78,78,44,44,44,44,44,44, -44,44,44,44,44,44,44,44, -44,44,44,44,44,44,44,44, -75,44,72,72,72,72,72,44, -44,44,44,44,44,44,44,44, -44,44,44,44,44,44,44,44, -44,72,44,44,44,44,44,44, -44,44,44,44,44,44,44,44, -44,79,79,79,79,79,79,79, -79,79,79,44,44,44,44,44, -44,44,79,79,79,79,79,79, -44,44,44,44,44,44,44,44, -44,44,44,44,44,44,44,44, -44,44,44,44,44,44,44,44, -44,44,79,79,79,79,79,79, -44,44,44,44,44,44,44,44, -44,44,44,44,44,44,44,44, -44,44,44,44,44,44,75,44, -72,72,72,72,72,44,44,44, -44,44,44,44,44,44,44,44, -44,44,44,44,44,44,44,72, -44,44,44,44,44,44,44,44, -44,44,44,44,44,44,44,80, -80,80,80,80,80,80,80,80, -80,44,44,44,44,44,44,44, -80,80,80,80,80,80,44,44, -44,44,44,44,44,44,44,44, -44,44,44,44,44,44,44,44, -44,44,44,44,44,44,44,44, -80,80,80,80,80,80,44,44, -44,44,44,44,44,44,44,44, -44,44,44,44,44,44,44,44, -44,44,44,44,75,44,72,72, -72,72,72,44,44,44,44,44, -44,44,44,44,44,44,44,44, -44,44,44,44,44,72,44,44, -44,44,44,44,44,44,44,44, -44,44,44,44,44,81,81,81, -81,81,81,81,81,81,81,44, -44,44,44,44,44,44,81,81, -81,81,81,81,44,44,44,44, -44,44,44,44,44,44,44,44, -44,44,44,44,44,44,44,44, -44,44,44,44,44,44,81,81, -81,81,81,81,44,44,44,44, -44,44,44,44,44,44,44,44, -44,44,44,44,44,44,44,44, -44,44,75,44,72,72,72,72, -72,44,44,44,44,44,44,44, -44,44,44,44,44,44,44,44, -44,44,44,72,44,44,44,44, -44,44,44,44,44,44,44,44, -44,44,44,44,44,44,44,44, -44,44,44,44,44,44,44,44, -44,44,44,44,44,44,44,44, -44,44,44,44,44,44,44,44, -44,44,44,44,44,44,44,44, -44,44,44,44,44,44,44,44, -44,44,44,44,44,44,44,44, -44,44,44,44,44,44,44,44, -44,44,44,44,44,44,44,44, -44,44,44,44,44,44,44,44, -75,44,83,83,83,83,83,83, -83,83,83,83,82,82,82,82, -82,82,82,83,83,83,83,83, -83,82,82,82,82,82,82,82, -82,82,82,82,82,82,82,82, -82,82,82,82,82,82,82,82, -82,82,82,83,83,83,83,83, -83,82,82,82,82,82,82,82, -82,82,82,82,82,82,82,82, -82,82,82,82,82,44,82,86, -85,87,84,87,84,84,84,84, -84,84,88,88,88,88,88,88, -88,88,88,88,84,86,89,44, -44,44,44,44,44,44,44,44, -44,44,44,44,44,44,44,44, -44,44,44,44,44,44,44,44, -44,44,44,44,44,44,44,44, -44,44,44,44,44,44,44,44, -44,44,44,44,44,44,44,44, -44,44,44,44,44,44,44,44, -44,44,44,44,44,44,44,44, -44,2,2,2,2,2,2,2, -2,2,2,2,2,2,2,2, -2,2,2,2,2,2,2,2, -2,2,2,2,2,2,2,3, -3,3,3,3,3,3,3,3, -3,3,3,3,3,3,3,90, -90,90,90,90,44,44,44,44, -44,44,44,44,44,44,44,44, -91,91,91,91,91,91,91,91, -92,92,92,92,92,91,91,91, -91,91,91,91,91,91,91,91, -91,91,91,91,91,91,91,93, -94,94,95,96,94,94,94,97, -98,99,100,94,94,101,94,94, -94,94,94,94,94,94,94,94, -94,94,94,94,94,94,102,94, -94,94,94,94,94,94,94,94, -94,94,94,94,94,94,94,94, -94,94,94,94,94,94,94,94, -94,94,103,104,105,106,94,94, -94,94,94,94,94,94,94,94, -94,94,94,94,94,94,94,94, -94,94,94,94,94,94,94,94, -94,94,107,108,105,94,91,94, -2,2,2,2,2,2,2,2, -2,2,2,2,2,2,2,2, -2,2,2,2,2,2,2,2, -2,2,2,2,2,2,3,3, -3,3,3,3,3,3,3,3, -3,3,3,3,3,3,90,90, -90,90,90,109,91,91,91,91, -91,91,91,91,91,91,91,91, -91,91,91,91,91,91,91,91, -91,91,91,91,91,91,91,91, -91,91,91,109,109,109,109,109, -109,109,109,109,109,109,109,109, -109,109,109,109,109,109,109,109, -109,109,109,109,109,109,109,109, -109,109,109,109,109,109,109,109, -109,109,109,109,109,109,109,109, -109,109,109,109,109,109,109,109, -109,109,109,109,109,109,109,109, -109,109,109,109,109,109,109,109, -109,109,109,109,109,109,109,109, -109,109,109,109,109,109,109,109, -109,109,109,109,109,109,109,109, -109,109,91,109,91,91,91,91, -91,91,91,91,92,92,92,92, -92,91,91,91,91,91,91,91, -91,91,91,91,91,91,91,91, -91,91,91,93,110,110,110,110, -110,110,110,110,110,110,110,110, -110,110,110,110,110,110,110,110, -110,110,110,110,110,110,110,110, -110,110,110,110,110,110,110,110, -110,110,110,110,110,110,110,110, -110,110,110,110,110,110,110,110, -110,110,110,110,110,110,110,110, -110,110,110,110,110,110,110,110, -110,110,110,110,110,110,110,110, -110,110,110,110,110,110,110,110, -110,110,110,110,110,110,110,110, -110,110,91,110,93,93,93,93, -93,110,110,110,110,110,110,110, -110,110,110,110,110,110,110,110, -110,110,110,93,110,94,94,109, -109,94,94,94,109,109,109,109, -94,94,109,94,94,94,94,94, -94,94,94,94,94,94,94,94, -94,94,94,109,94,94,94,94, -94,94,94,94,94,94,94,94, -94,94,94,94,94,94,94,94, -94,94,94,94,94,94,94,109, -109,109,109,94,94,94,94,94, -94,94,94,94,94,94,94,94, -94,94,94,94,94,94,94,94, -94,94,94,94,94,94,94,109, -109,109,94,109,112,95,114,113, -10,116,5,116,116,116,117,118, -115,116,116,116,116,116,116,116, -116,116,116,116,116,116,116,116, -116,8,116,119,10,8,116,116, -116,116,116,116,116,116,116,116, -116,116,116,116,116,116,116,116, -116,116,116,116,116,116,116,116, -116,116,116,116,116,116,116,116, -116,116,116,116,116,116,116,116, -116,116,116,116,116,116,116,116, -116,116,116,116,116,116,116,116, -116,116,116,116,116,8,116,115, -116,115,116,116,116,115,115,115, -116,116,116,116,116,116,116,116, -116,116,116,116,116,116,116,116, -120,116,115,115,115,116,116,116, -116,116,116,116,116,116,116,116, -116,116,116,116,116,116,116,116, -116,116,116,116,116,116,116,116, -116,116,116,116,116,116,116,116, -116,116,116,116,116,116,116,116, -116,116,116,116,116,116,116,116, -116,116,116,116,116,116,116,116, -116,116,116,116,115,116,8,9, -123,122,122,122,122,122,122,122, -122,122,122,122,122,122,122,122, -122,122,122,122,123,122,125,124, -124,124,124,124,124,124,124,124, -124,124,124,124,124,124,124,124, -124,124,125,124,127,126,126,126, -126,126,126,126,126,126,126,126, -126,126,126,126,126,126,126,126, -127,126,129,129,128,128,128,128, -129,128,128,128,130,128,128,128, -128,128,128,128,128,128,128,128, -128,128,128,129,128,128,128,128, -128,128,128,129,128,128,128,128, -131,128,128,128,132,128,128,128, -128,128,128,128,128,128,128,128, -128,128,128,129,128,134,133,133, -133,42,42,42,42,42,42,42, -42,42,42,133,135,44,44,44, -135,44,44,44,44,44,44,44, -44,44,135,135,44,44,44,135, -135,44,44,44,44,44,44,44, -44,44,44,44,135,44,44,44, -135,44,44,44,44,44,44,44, -44,44,44,135,44,44,44,135, -44,136,44,44,44,44,44,44, -44,44,44,44,44,44,44,44, -44,44,44,44,44,44,44,44, -44,44,44,44,44,44,44,44, -44,136,44,137,137,137,137,137, -137,137,137,137,137,137,137,137, -137,137,137,137,137,137,137,137, -137,137,137,137,137,137,137,137, -137,138,138,138,138,138,138,138, -138,138,138,138,138,138,138,138, -138,139,139,139,139,139,49,49, -49,49,49,49,49,49,49,49, -49,49,49,49,49,49,49,49, -49,49,49,49,49,49,49,49, -49,49,49,49,49,49,49,49, -49,49,49,49,49,49,49,49, -49,49,49,49,49,140,49,141, -49,140,140,140,140,49,142,140, -49,49,49,49,49,49,49,49, -49,49,49,49,49,49,49,49, -140,49,49,49,49,49,49,49, -49,49,49,49,49,49,49,49, -49,49,49,49,49,49,49,49, -49,49,49,49,143,144,145,146, -49,49,49,49,49,49,49,49, -49,49,49,49,49,49,49,49, -49,49,49,49,49,49,49,49, -49,49,49,49,140,140,140,49, -49,49,49,49,49,49,49,49, -49,49,49,49,49,49,49,49, -49,49,49,49,49,49,49,49, -49,49,49,49,49,49,49,49, -49,49,49,49,49,49,49,49, -49,49,49,49,49,49,49,49, -49,49,49,49,49,49,49,49, -49,49,49,49,49,49,49,49, -147,50,50,50,50,50,50,50, -50,50,50,50,50,50,50,50, -50,50,50,50,50,50,50,50, -50,50,50,50,50,50,50,50, -50,50,50,50,50,50,50,50, -50,50,50,50,50,50,50,50, -50,50,50,50,50,50,50,50, -50,50,50,50,50,50,50,50, -50,147,148,148,148,148,148,148, -148,148,148,148,148,148,148,148, -148,148,148,148,148,148,148,148, -148,148,148,148,148,148,148,148, -148,148,148,148,148,148,148,148, -148,148,148,148,148,148,148,148, -148,148,148,148,148,148,148,148, -148,148,148,148,148,148,148,148, -148,148,147,149,147,151,150,150, -150,150,150,150,150,150,150,150, -150,150,150,150,150,150,150,150, -150,150,150,150,150,150,150,150, -150,150,150,150,150,150,150,150, -150,150,150,150,150,150,150,150, -150,150,150,150,150,150,150,150, -150,150,150,150,152,150,54,154, -156,156,156,156,156,156,156,156, -155,155,155,155,155,155,155,155, -155,155,155,157,157,155,155,155, -157,155,155,155,155,157,155,155, -157,155,155,157,155,155,155,157, -155,155,155,157,157,157,155,155, -155,157,157,157,157,157,157,155, -157,155,155,155,155,155,157,155, -157,155,157,157,157,157,157,157, -157,155,159,159,159,159,159,159, -159,159,158,160,160,160,160,160, -160,160,160,158,161,161,161,161, -161,161,161,161,161,161,161,161, -161,161,161,161,161,161,161,161, -161,161,161,161,161,161,161,161, -161,161,162,162,162,162,162,162, -162,162,162,162,162,162,162,162, -162,162,163,163,163,163,163,59, -59,59,59,59,59,59,59,59, -59,59,59,59,59,59,59,59, -59,59,59,59,59,59,59,59, -59,59,59,59,59,59,59,59, -59,59,59,59,59,59,59,59, -59,59,59,59,59,59,164,59, -59,59,164,164,164,164,59,59, -164,59,165,166,166,166,166,166, -166,166,167,167,59,59,59,59, -59,164,59,44,44,168,169,59, -59,44,169,59,59,44,59,170, -59,59,171,59,169,169,59,59, -59,169,169,59,44,164,164,164, -164,59,59,172,172,61,169,172, -172,59,169,59,59,59,59,59, -172,59,171,59,172,169,172,173, -172,169,174,59,44,164,164,164, -59,59,59,59,59,59,59,59, -59,59,59,59,59,59,59,59, -59,59,59,59,59,59,59,59, -59,59,59,59,59,59,59,59, -59,59,59,59,59,59,59,59, -59,59,59,59,59,59,59,59, -59,59,59,59,59,59,59,59, -59,59,59,59,59,59,59,59, -59,175,60,60,60,60,60,60, -60,60,60,60,60,60,60,60, -60,60,60,60,60,60,60,60, -60,60,60,60,60,60,60,60, -60,60,60,60,60,60,60,60, -60,60,60,60,60,60,60,60, -60,60,60,60,60,60,60,60, -60,60,60,60,60,60,60,60, -60,60,175,176,176,176,176,176, -176,176,176,176,176,176,176,176, -176,176,176,176,176,176,176,176, -176,176,176,176,176,176,176,176, -176,176,176,176,176,176,176,176, -176,176,176,176,176,176,176,176, -176,176,176,176,176,176,176,176, -176,176,176,176,176,176,176,176, -176,176,176,175,178,178,178,178, -178,178,178,178,177,180,180,180, -180,180,180,180,180,179,182,182, -182,182,182,182,182,182,182,182, -181,184,62,186,185,62,188,67, -67,67,67,67,67,67,67,67, -67,67,67,67,67,67,67,67, -67,67,67,67,67,67,67,67, -67,67,67,67,67,67,189,67, -191,190,67,70,67,193,193,193, -193,193,193,193,193,193,193,192, -192,192,192,192,192,192,193,193, -193,193,193,193,192,192,192,192, -192,192,192,192,192,192,192,192, -192,192,192,192,192,192,192,192, -192,192,192,192,192,192,193,193, -193,193,193,193,192,195,194,194, -194,194,194,196,194,194,197,197, -197,197,197,197,197,197,197,197, -194,194,198,194,86,85,85,85, -85,85,199,85,85,199,199,199, -199,199,199,199,199,199,199,85, -88,88,88,88,88,88,88,88, -88,88,199,87,199,199,199,199, -199,199,88,88,88,88,88,88, -88,88,88,88,199,199,89,89, -89,89,89,89,89,89,89,89, -89,199,89,89,199,199,199,199, -199,199,199,199,199,199,89,89, -89,89,86,89,0 -] - -class << self - attr_accessor :_re_scanner_trans_targs - private :_re_scanner_trans_targs, :_re_scanner_trans_targs= -end -self._re_scanner_trans_targs = [ -71,72,1,2,71,4,71,6, -71,8,71,81,71,10,16,11, -71,12,13,14,15,17,18,19, -20,21,23,29,24,71,25,26, -27,28,30,31,32,33,34,71, -36,71,37,39,0,40,41,88, -89,89,42,89,89,89,45,46, -89,89,99,99,47,50,99,106, -99,108,53,99,109,99,111,56, -59,57,58,99,60,61,62,63, -64,65,99,113,114,67,68,114, -69,70,3,73,74,75,76,77, -71,78,71,82,83,71,84,71, -85,71,71,86,71,71,71,71, -71,71,79,71,80,5,71,7, -71,71,71,71,71,71,71,71, -71,71,71,9,22,71,35,87, -38,90,91,92,89,93,94,95, -89,89,89,89,43,89,89,44, -89,89,89,96,97,96,96,98, -96,100,101,102,99,103,103,105, -49,99,52,99,99,55,66,99, -48,99,104,99,99,99,99,99, -107,99,51,99,110,112,99,54, -99,99,114,115,116,117,118,114 -] - -class << self - attr_accessor :_re_scanner_trans_actions - private :_re_scanner_trans_actions, :_re_scanner_trans_actions= -end -self._re_scanner_trans_actions = [ -1,2,0,0,3,0,4,0, -5,0,6,7,8,0,0,0, -9,0,0,0,0,0,0,0, -0,0,0,0,0,10,0,0, -0,0,0,0,0,0,0,11, -0,12,0,0,0,0,0,14, -15,16,0,17,18,19,0,0, -20,21,22,23,0,0,25,0, -26,0,0,27,0,28,0,0, -0,0,0,29,0,0,0,0, -0,0,30,0,31,0,0,32, -0,0,0,0,0,0,0,0, -35,36,37,0,0,38,0,39, -40,41,42,40,43,44,45,46, -47,48,49,50,0,0,51,0, -52,53,54,55,56,57,58,59, -60,61,62,0,0,63,0,65, -0,0,40,40,66,0,40,67, -68,69,70,71,0,72,73,0, -74,75,76,77,0,78,79,0, -80,0,40,40,81,82,83,0, -0,84,0,85,86,0,0,87, -0,88,0,89,90,91,92,93, -40,94,0,95,40,0,96,0, -97,98,99,40,40,40,40,100 -] - -class << self - attr_accessor :_re_scanner_to_state_actions - private :_re_scanner_to_state_actions, :_re_scanner_to_state_actions= -end -self._re_scanner_to_state_actions = [ -0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,33, -0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,64, -64,64,0,0,0,0,0,0, -64,0,0,64,0,0,0,0, -0,0,0,0,0,0,0,0, -0,0,64,0,0,0,0 -] - -class << self - attr_accessor :_re_scanner_from_state_actions - private :_re_scanner_from_state_actions, :_re_scanner_from_state_actions= -end -self._re_scanner_from_state_actions = [ -0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,34, -0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,34, -34,34,0,0,0,0,0,0, -34,0,0,34,0,0,0,0, -0,0,0,0,0,0,0,0, -0,0,34,0,0,0,0 -] - -class << self - attr_accessor :_re_scanner_eof_actions - private :_re_scanner_eof_actions, :_re_scanner_eof_actions= -end -self._re_scanner_eof_actions = [ -0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0, -0,0,0,0,0,0,13,13, -13,13,0,0,0,0,0,0, -0,24,24,0,24,24,0,24, -24,24,24,24,24,24,24,24, -24,24,24,0,0,0,0,0, -0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0, -0,24,0,0,0,0,0,0, -0,0,0,24,0,0,0,0, -0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0 -] - -class << self - attr_accessor :_re_scanner_eof_trans - private :_re_scanner_eof_trans, :_re_scanner_eof_trans= -end -self._re_scanner_eof_trans = [ -0,1,1,1,5,5,5,5, -1,13,13,13,13,13,13,13, -13,13,13,13,13,13,13,13, -13,13,13,13,13,13,13,13, -13,13,13,40,40,40,0,0, -0,0,49,49,52,54,54,59, -59,0,0,65,0,0,70,0, -0,0,0,0,0,0,0,0, -0,0,0,85,85,85,85,0, -110,110,111,111,110,112,114,116, -116,122,123,125,127,129,134,0, -0,0,148,148,148,148,151,154, -0,159,159,0,176,176,176,178, -180,182,184,184,184,188,188,188, -188,193,0,200,200,200,200 -] - -class << self - attr_accessor :re_scanner_start -end -self.re_scanner_start = 71; -class << self - attr_accessor :re_scanner_first_final -end -self.re_scanner_first_final = 71; -class << self - attr_accessor :re_scanner_error -end -self.re_scanner_error = 0; - -class << self - attr_accessor :re_scanner_en_char_type -end -self.re_scanner_en_char_type = 87; -class << self - attr_accessor :re_scanner_en_unicode_property -end -self.re_scanner_en_unicode_property = 88; -class << self - attr_accessor :re_scanner_en_character_set -end -self.re_scanner_en_character_set = 89; -class << self - attr_accessor :re_scanner_en_set_escape_sequence -end -self.re_scanner_en_set_escape_sequence = 96; -class << self - attr_accessor :re_scanner_en_escape_sequence -end -self.re_scanner_en_escape_sequence = 99; -class << self - attr_accessor :re_scanner_en_conditional_expression -end -self.re_scanner_en_conditional_expression = 114; -class << self - attr_accessor :re_scanner_en_main -end -self.re_scanner_en_main = 71; - -begin - p ||= 0 - pe ||= data.length - cs = re_scanner_start - top = 0 - ts = nil - te = nil - act = 0 -end - -begin - testEof = false - _slen, _trans, _keys, _inds, _acts, _nacts = nil - _goto_level = 0 - _resume = 10 - _eof_trans = 15 - _again = 20 - _test_eof = 30 - _out = 40 - while true - if _goto_level <= 0 - if p == pe - _goto_level = _test_eof - next - end - if cs == 0 - _goto_level = _out - next - end - end - if _goto_level <= _resume - case _re_scanner_from_state_actions[cs] - when 34 then - begin -ts = p - end - end - _keys = cs << 1 - _inds = _re_scanner_index_offsets[cs] - _slen = _re_scanner_key_spans[cs] - _wide = data[p].ord - _trans = if ( _slen > 0 && - _re_scanner_trans_keys[_keys] <= _wide && - _wide <= _re_scanner_trans_keys[_keys + 1] - ) then - _re_scanner_indicies[ _inds + _wide - _re_scanner_trans_keys[_keys] ] - else - _re_scanner_indicies[ _inds + _slen ] - end - end - if _goto_level <= _eof_trans - cs = _re_scanner_trans_targs[_trans] - if _re_scanner_trans_actions[_trans] != 0 - case _re_scanner_trans_actions[_trans] - when 36 then - begin - self.group_depth = group_depth + 1 end - when 40 then - begin -te = p+1 - end - when 65 then - begin -te = p+1 - begin - case text = copy(data, ts-1,te) - when '\d'; emit(:type, :digit, text) - when '\D'; emit(:type, :nondigit, text) - when '\h'; emit(:type, :hex, text) - when '\H'; emit(:type, :nonhex, text) - when '\s'; emit(:type, :space, text) - when '\S'; emit(:type, :nonspace, text) - when '\w'; emit(:type, :word, text) - when '\W'; emit(:type, :nonword, text) - when '\R'; emit(:type, :linebreak, text) - when '\X'; emit(:type, :xgrapheme, text) - end - begin - top -= 1 - cs = stack[top] - _goto_level = _again - next - end - - end - end - when 14 then - begin -te = p+1 - begin - text = copy(data, ts-1,te) - type = (text[1] == 'P') ^ (text[3] == '^') ? :nonproperty : :property - - name = text[3..-2].gsub(/[\^\s_\-]/, '').downcase - - token = self.class.short_prop_map[name] || self.class.long_prop_map[name] - raise ValidationError.for(:property, name) unless token - - self.emit(type, token.to_sym, text) - - begin - top -= 1 - cs = stack[top] - _goto_level = _again - next - end - - end - end - when 18 then - begin -te = p+1 - begin # special case, emits two tokens - emit(:literal, :literal, '-') - emit(:set, :intersection, '&&') - end - end - when 70 then - begin -te = p+1 - begin - if prev_token[1] == :open - emit(:set, :negate, '^') - else - emit(:literal, :literal, '^') - end - end - end - when 72 then - begin -te = p+1 - begin - emit(:set, :intersection, '&&') - end - end - when 68 then - begin -te = p+1 - begin - begin - stack[top] = cs - top+= 1 - cs = 96 - _goto_level = _again - next - end - - end - end - when 66 then - begin -te = p+1 - begin - emit(:literal, :literal, copy(data, ts, te)) - end - end - when 16 then - begin -te = p+1 - begin - text = copy(data, ts, te) - emit(:literal, :literal, text) - end - end - when 73 then - begin -te = p -p = p - 1; begin - # ranges cant start with the opening bracket, a subset, or - # intersection/negation/range operators - if prev_token[0] == :set - emit(:literal, :literal, '-') - else - emit(:set, :range, '-') - end - end - end - when 76 then - begin -te = p -p = p - 1; begin - emit(:set, :open, '[') - begin - stack[top] = cs - top+= 1 - cs = 89 - _goto_level = _again - next - end - - end - end - when 71 then - begin -te = p -p = p - 1; begin - text = copy(data, ts, te) - emit(:literal, :literal, text) - end - end - when 17 then - begin - begin p = ((te))-1; end - begin - # ranges cant start with the opening bracket, a subset, or - # intersection/negation/range operators - if prev_token[0] == :set - emit(:literal, :literal, '-') - else - emit(:set, :range, '-') - end - end - end - when 20 then - begin - begin p = ((te))-1; end - begin - emit(:set, :open, '[') - begin - stack[top] = cs - top+= 1 - cs = 89 - _goto_level = _again - next - end - - end - end - when 15 then - begin - begin p = ((te))-1; end - begin - text = copy(data, ts, te) - emit(:literal, :literal, text) - end - end - when 80 then - begin -te = p+1 - begin - emit(:escape, :octal, copy(data, ts-1,te)) - begin - top -= 1 - cs = stack[top] - _goto_level = _again - next - end - - end - end - when 78 then - begin -te = p+1 - begin - p = p - 1; - cs = 89; - begin - stack[top] = cs - top+= 1 - cs = 99 - _goto_level = _again - next - end - - end - end - when 77 then - begin -te = p+1 - begin - emit(:escape, :literal, copy(data, ts-1,te)) - begin - top -= 1 - cs = stack[top] - _goto_level = _again - next - end - - end - end - when 79 then - begin -te = p -p = p - 1; begin - emit(:escape, :octal, copy(data, ts-1,te)) - begin - top -= 1 - cs = stack[top] - _goto_level = _again - next - end - - end - end - when 90 then - begin -te = p+1 - begin - emit(:escape, :octal, copy(data, ts-1,te)) - begin - top -= 1 - cs = stack[top] - _goto_level = _again - next - end - - end - end - when 92 then - begin -te = p+1 - begin # special case, emits two tokens - text = copy(data, ts-1,te) - emit(:escape, :literal, text[0,2]) - emit(:literal, :literal, text[2]) - begin - top -= 1 - cs = stack[top] - _goto_level = _again - next - end - - end - end - when 81 then - begin -te = p+1 - begin - case text = copy(data, ts-1,te) - when '\.'; emit(:escape, :dot, text) - when '\|'; emit(:escape, :alternation, text) - when '\^'; emit(:escape, :bol, text) - when '\$'; emit(:escape, :eol, text) - when '\?'; emit(:escape, :zero_or_one, text) - when '\*'; emit(:escape, :zero_or_more, text) - when '\+'; emit(:escape, :one_or_more, text) - when '\('; emit(:escape, :group_open, text) - when '\)'; emit(:escape, :group_close, text) - when '\{'; emit(:escape, :interval_open, text) - when '\}'; emit(:escape, :interval_close, text) - when '\['; emit(:escape, :set_open, text) - when '\]'; emit(:escape, :set_close, text) - when "\\\\"; - emit(:escape, :backslash, text) - end - begin - top -= 1 - cs = stack[top] - _goto_level = _again - next - end - - end - end - when 86 then - begin -te = p+1 - begin - # \b is emitted as backspace only when inside a character set, otherwise - # it is a word boundary anchor. A syntax might "normalize" it if needed. - case text = copy(data, ts-1,te) - when '\a'; emit(:escape, :bell, text) - when '\b'; emit(:escape, :backspace, text) - when '\e'; emit(:escape, :escape, text) - when '\f'; emit(:escape, :form_feed, text) - when '\n'; emit(:escape, :newline, text) - when '\r'; emit(:escape, :carriage, text) - when '\t'; emit(:escape, :tab, text) - when '\v'; emit(:escape, :vertical_tab, text) - end - begin - top -= 1 - cs = stack[top] - _goto_level = _again - next - end - - end - end - when 29 then - begin -te = p+1 - begin - text = copy(data, ts-1,te) - if text[2] == '{' - emit(:escape, :codepoint_list, text) - else - emit(:escape, :codepoint, text) - end - begin - top -= 1 - cs = stack[top] - _goto_level = _again - next - end - - end - end - when 98 then - begin -te = p+1 - begin - emit(:escape, :hex, copy(data, ts-1,te)) - begin - top -= 1 - cs = stack[top] - _goto_level = _again - next - end - - end - end - when 25 then - begin -te = p+1 - begin - emit_meta_control_sequence(data, ts, te, :control) - begin - top -= 1 - cs = stack[top] - _goto_level = _again - next - end - - end - end - when 27 then - begin -te = p+1 - begin - emit_meta_control_sequence(data, ts, te, :meta_sequence) - begin - top -= 1 - cs = stack[top] - _goto_level = _again - next - end - - end - end - when 84 then - begin -te = p+1 - begin - p = p - 1; - cs = ((in_set? ? 89 : 71)); - begin - stack[top] = cs - top+= 1 - cs = 87 - _goto_level = _again - next - end - - end - end - when 85 then - begin -te = p+1 - begin - p = p - 1; - cs = ((in_set? ? 89 : 71)); - begin - stack[top] = cs - top+= 1 - cs = 88 - _goto_level = _again - next - end - - end - end - when 23 then - begin -te = p+1 - begin - emit(:escape, :literal, copy(data, ts-1,te)) - begin - top -= 1 - cs = stack[top] - _goto_level = _again - next - end - - end - end - when 91 then - begin -te = p -p = p - 1; begin - text = copy(data, ts-1,te) - emit(:backref, :number, text) - begin - top -= 1 - cs = stack[top] - _goto_level = _again - next - end - - end - end - when 89 then - begin -te = p -p = p - 1; begin - emit(:escape, :octal, copy(data, ts-1,te)) - begin - top -= 1 - cs = stack[top] - _goto_level = _again - next - end - - end - end - when 97 then - begin -te = p -p = p - 1; begin - emit(:escape, :hex, copy(data, ts-1,te)) - begin - top -= 1 - cs = stack[top] - _goto_level = _again - next - end - - end - end - when 94 then - begin -te = p -p = p - 1; begin - emit_meta_control_sequence(data, ts, te, :control) - begin - top -= 1 - cs = stack[top] - _goto_level = _again - next - end - - end - end - when 96 then - begin -te = p -p = p - 1; begin - emit_meta_control_sequence(data, ts, te, :meta_sequence) - begin - top -= 1 - cs = stack[top] - _goto_level = _again - next - end - - end - end - when 87 then - begin -te = p -p = p - 1; begin - emit(:escape, :literal, copy(data, ts-1,te)) - begin - top -= 1 - cs = stack[top] - _goto_level = _again - next - end - - end - end - when 22 then - begin - begin p = ((te))-1; end - begin - emit(:escape, :literal, copy(data, ts-1,te)) - begin - top -= 1 - cs = stack[top] - _goto_level = _again - next - end - - end - end - when 88 then - begin - case act - when 17 then - begin begin p = ((te))-1; end - - text = copy(data, ts-1,te) - emit(:backref, :number, text) - begin - top -= 1 - cs = stack[top] - _goto_level = _again - next - end - - end - when 18 then - begin begin p = ((te))-1; end - - emit(:escape, :octal, copy(data, ts-1,te)) - begin - top -= 1 - cs = stack[top] - _goto_level = _again - next - end - - end -end - end - when 32 then - begin -te = p+1 - begin - text = copy(data, ts, te-1) - text =~ /[^0]/ or raise ValidationError.for(:backref, 'condition', 'invalid ref ID') - emit(:conditional, :condition, text) - emit(:conditional, :condition_close, ')') - end - end - when 99 then - begin -te = p+1 - begin - p = p - 1; - begin - stack[top] = cs - top+= 1 - cs = 71 - _goto_level = _again - next - end - - end - end - when 100 then - begin -te = p -p = p - 1; begin - p = p - 1; - begin - stack[top] = cs - top+= 1 - cs = 71 - _goto_level = _again - next - end - - end - end - when 31 then - begin - begin p = ((te))-1; end - begin - p = p - 1; - begin - stack[top] = cs - top+= 1 - cs = 71 - _goto_level = _again - next - end - - end - end - when 38 then - begin -te = p+1 - begin - emit(:meta, :dot, copy(data, ts, te)) - end - end - when 43 then - begin -te = p+1 - begin - if conditional_stack.last == group_depth - emit(:conditional, :separator, copy(data, ts, te)) - else - emit(:meta, :alternation, copy(data, ts, te)) - end - end - end - when 42 then - begin -te = p+1 - begin - emit(:anchor, :bol, copy(data, ts, te)) - end - end - when 35 then - begin -te = p+1 - begin - emit(:anchor, :eol, copy(data, ts, te)) - end - end - when 62 then - begin -te = p+1 - begin - emit(:keep, :mark, copy(data, ts, te)) - end - end - when 61 then - begin -te = p+1 - begin - case text = copy(data, ts, te) - when '\A'; emit(:anchor, :bos, text) - when '\z'; emit(:anchor, :eos, text) - when '\Z'; emit(:anchor, :eos_ob_eol, text) - when '\b'; emit(:anchor, :word_boundary, text) - when '\B'; emit(:anchor, :nonword_boundary, text) - when '\G'; emit(:anchor, :match_start, text) - end - end - end - when 41 then - begin -te = p+1 - begin - append_literal(data, ts, te) - end - end - when 51 then - begin -te = p+1 - begin - text = copy(data, ts, te) - - conditional_stack << group_depth - - emit(:conditional, :open, text[0..-2]) - emit(:conditional, :condition_open, '(') - begin - stack[top] = cs - top+= 1 - cs = 114 - _goto_level = _again - next - end - - end - end - when 52 then - begin -te = p+1 - begin - text = copy(data, ts, te) - if text[2..-1] =~ /([^\-mixdau:]|^$)|-.*([dau])/ - raise ValidationError.for(:group_option, $1 || "-#{$2}", text) - end - emit_options(text) - end - end - when 6 then - begin -te = p+1 - begin - case text = copy(data, ts, te) - when '(?='; emit(:assertion, :lookahead, text) - when '(?!'; emit(:assertion, :nlookahead, text) - when '(?<='; emit(:assertion, :lookbehind, text) - when '(?'; emit(:group, :atomic, text) - when '(?~'; emit(:group, :absence, text) - - when /^\(\?(?:<>|'')/ - raise ValidationError.for(:group, 'named group', 'name is empty') - - when /^\(\?<[^>]+>/ - emit(:group, :named_ab, text) - - when /^\(\?'[^']+'/ - emit(:group, :named_sq, text) - - end - end - end - when 10 then - begin -te = p+1 - begin - case text = copy(data, ts, te) - when /^\\k(.)[^0-9\-][^+\-]*['>]$/ - emit(:backref, $1 == '<' ? :name_ref_ab : :name_ref_sq, text) - when /^\\k(.)0*[1-9]\d*['>]$/ - emit(:backref, $1 == '<' ? :number_ref_ab : :number_ref_sq, text) - when /^\\k(.)-0*[1-9]\d*['>]$/ - emit(:backref, $1 == '<' ? :number_rel_ref_ab : :number_rel_ref_sq, text) - when /^\\k(.)[^0-9\-].*[+\-]\d+['>]$/ - emit(:backref, $1 == '<' ? :name_recursion_ref_ab : :name_recursion_ref_sq, text) - when /^\\k(.)-?0*[1-9]\d*[+\-]\d+['>]$/ - emit(:backref, $1 == '<' ? :number_recursion_ref_ab : :number_recursion_ref_sq, text) - else - raise ValidationError.for(:backref, 'backreference', 'invalid ref ID') - end - end - end - when 9 then - begin -te = p+1 - begin - case text = copy(data, ts, te) - when /^\\g(.)[^0-9+\-].*['>]$/ - emit(:backref, $1 == '<' ? :name_call_ab : :name_call_sq, text) - when /^\\g(.)(?:0|0*[1-9]\d*)['>]$/ - emit(:backref, $1 == '<' ? :number_call_ab : :number_call_sq, text) - when /^\\g(.)[+-]0*[1-9]\d*/ - emit(:backref, $1 == '<' ? :number_rel_call_ab : :number_rel_call_sq, text) - else - raise ValidationError.for(:backref, 'subexpression call', 'invalid ref ID') - end - end - end - when 59 then - begin -te = p+1 - begin - case text = copy(data, ts, te) - when '?' ; emit(:quantifier, :zero_or_one, text) - when '??'; emit(:quantifier, :zero_or_one_reluctant, text) - when '?+'; emit(:quantifier, :zero_or_one_possessive, text) - end - end - end - when 55 then - begin -te = p+1 - begin - case text = copy(data, ts, te) - when '*' ; emit(:quantifier, :zero_or_more, text) - when '*?'; emit(:quantifier, :zero_or_more_reluctant, text) - when '*+'; emit(:quantifier, :zero_or_more_possessive, text) - end - end - end - when 57 then - begin -te = p+1 - begin - case text = copy(data, ts, te) - when '+' ; emit(:quantifier, :one_or_more, text) - when '+?'; emit(:quantifier, :one_or_more_reluctant, text) - when '++'; emit(:quantifier, :one_or_more_possessive, text) - end - end - end - when 12 then - begin -te = p+1 - begin - emit(:quantifier, :interval, copy(data, ts, te)) - end - end - when 47 then - begin -te = p+1 - begin - if free_spacing - emit(:free_space, :comment, copy(data, ts, te)) - else - # consume only the pound sign (#) and backtrack to do regular scanning - append_literal(data, ts, ts + 1) - begin p = (( ts + 1))-1; end - - end - end - end - when 50 then - begin -te = p -p = p - 1; begin - text = copy(data, ts, te) - if text[2..-1] =~ /([^\-mixdau:]|^$)|-.*([dau])/ - raise ValidationError.for(:group_option, $1 || "-#{$2}", text) - end - emit_options(text) - end - end - when 53 then - begin -te = p -p = p - 1; begin - case text = copy(data, ts, te) - when '(?='; emit(:assertion, :lookahead, text) - when '(?!'; emit(:assertion, :nlookahead, text) - when '(?<='; emit(:assertion, :lookbehind, text) - when '(?= 0 - if spacing_stack.length > 1 && - spacing_stack.last[:depth] == group_depth + 1 - spacing_stack.pop - self.free_spacing = spacing_stack.last[:free_spacing] - end - - emit(:group, :close, ')') - else - raise ValidationError.for(:group, 'group', 'unmatched close parenthesis') - end - end - end - when 39 then - begin - self.set_depth = set_depth + 1 end - begin -te = p+1 - begin - emit(:set, :open, copy(data, ts, te)) - begin - stack[top] = cs - top+= 1 - cs = 89 - _goto_level = _again - next - end - - end - end - when 69 then - begin - self.set_depth = set_depth - 1 end - begin -te = p+1 - begin - emit(:set, :close, copy(data, ts, te)) - if in_set? - begin - top -= 1 - cs = stack[top] - _goto_level = _again - next - end - - else - begin - cs = 71 - _goto_level = _again - next - end - - end - end - end - when 74 then - begin - self.set_depth = set_depth - 1 end - begin -te = p+1 - begin # special case, emits two tokens - emit(:literal, :literal, '-') - emit(:set, :close, ']') - if in_set? - begin - top -= 1 - cs = stack[top] - _goto_level = _again - next - end - - else - begin - cs = 71 - _goto_level = _again - next - end - - end - end - end - when 21 then - begin - self.set_depth = set_depth - 1 end - begin -te = p+1 - begin - text = copy(data, ts, te) - - type = :posixclass - class_name = text[2..-3] - if class_name[0] == '^' - class_name = class_name[1..-1] - type = :nonposixclass - end - - unless self.class.posix_classes.include?(class_name) - raise ValidationError.for(:posix_class, text) - end - - emit(type, class_name.to_sym, text) - end - end - when 67 then - begin -te = p+1 - end - begin - self.set_depth = set_depth + 1 end - when 83 then - begin -te = p+1 - end - begin -act = 17; end - when 82 then - begin -te = p+1 - end - begin -act = 18; end - when 49 then - begin -te = p+1 - end - begin -act = 42; end - when 7 then - begin -te = p+1 - end - begin -act = 43; end - when 2 then - begin -te = p+1 - end - begin -act = 57; end - end - end - end - if _goto_level <= _again - case _re_scanner_to_state_actions[cs] - when 64 then - begin -ts = nil; end - when 33 then - begin -ts = nil; end - begin -act = 0 - end - end - - if cs == 0 - _goto_level = _out - next - end - p += 1 - if p != pe - _goto_level = _resume - next - end - end - if _goto_level <= _test_eof - if p == eof - if _re_scanner_eof_trans[cs] > 0 - _trans = _re_scanner_eof_trans[cs] - 1; - _goto_level = _eof_trans - next; - end - case _re_scanner_eof_actions[cs] - when 13 then - begin - - raise PrematureEndError.new('unicode property') - end - when 24 then - begin - - text = copy(data, ts ? ts-1 : 0,-1) - raise PrematureEndError.new(text) - end - end - end - - end - if _goto_level <= _out - break - end -end - end - - # to avoid "warning: assigned but unused variable - testEof" - testEof = testEof - - if cs == re_scanner_error - text = copy(data, ts ? ts-1 : 0,-1) - raise ScannerError.new("Scan error at '#{text}'") - end - - raise PrematureEndError.new("(missing group closing paranthesis) "+ - "[#{group_depth}]") if in_group? - raise PrematureEndError.new("(missing set closing bracket) "+ - "[#{set_depth}]") if in_set? - - # when the entire expression is a literal run - emit_literal if literal_run - - tokens - end - - # lazy-load property maps when first needed - def self.short_prop_map - @short_prop_map ||= parse_prop_map('short') - end - - def self.long_prop_map - @long_prop_map ||= parse_prop_map('long') - end - - def self.parse_prop_map(name) - File.read("#{__dir__}/scanner/properties/#{name}.csv").scan(/(.+),(.+)/).to_h - end - - def self.posix_classes - %w[alnum alpha ascii blank cntrl digit graph - lower print punct space upper word xdigit] - end - - # Emits an array with the details of the scanned pattern - def emit(type, token, text) - #puts "EMIT: type: #{type}, token: #{token}, text: #{text}, ts: #{ts}, te: #{te}" - - emit_literal if literal_run - - # Ragel runs with byte-based indices (ts, te). These are of little value to - # end-users, so we keep track of char-based indices and emit those instead. - ts_char_pos = char_pos - te_char_pos = char_pos + text.length - - tok = [type, token, text, ts_char_pos, te_char_pos] - - self.prev_token = tok - - self.char_pos = te_char_pos - - if block - block.call type, token, text, ts_char_pos, te_char_pos - # TODO: in v3.0.0,remove `collect_tokens:` kwarg and only collect if no block given - tokens << tok if collect_tokens - elsif collect_tokens - tokens << tok - end - end - - attr_accessor :literal_run # only public for #||= to work on ruby <= 2.5 - - private - - attr_accessor :block, - :collect_tokens, :tokens, :prev_token, - :free_spacing, :spacing_stack, - :group_depth, :set_depth, :conditional_stack, - :char_pos - - def free_spacing?(input_object, options) - if options && !input_object.is_a?(String) - raise ArgumentError, 'options cannot be supplied unless scanning a String' - end - - options = input_object.options if input_object.is_a?(::Regexp) - - return false unless options - - options & Regexp::EXTENDED != 0 - end - - def in_group? - group_depth > 0 - end - - def in_set? - set_depth > 0 - end - - # Copy from ts to te from data as text - def copy(data, ts, te) - data[ts...te].pack('c*').force_encoding('utf-8') - end - - # Appends one or more characters to the literal buffer, to be emitted later - # by a call to emit_literal. - def append_literal(data, ts, te) - (self.literal_run ||= []) << copy(data, ts, te) - end - - # Emits the literal run collected by calls to the append_literal method. - def emit_literal - text = literal_run.join - self.literal_run = nil - emit(:literal, :literal, text) - end - - def emit_options(text) - token = nil - - # Ruby allows things like '(?-xxxx)' or '(?xx-xx--xx-:abc)'. - text =~ /\(\?([mixdau]*)(-(?:[mix]*))*(:)?/ - positive, negative, group_local = $1,$2,$3 - - if positive.include?('x') - self.free_spacing = true - end - - # If the x appears in both, treat it like ruby does, the second cancels - # the first. - if negative && negative.include?('x') - self.free_spacing = false - end - - if group_local - spacing_stack << {:free_spacing => free_spacing, :depth => group_depth} - token = :options - else - # switch for parent group level - spacing_stack.last[:free_spacing] = free_spacing - token = :options_switch - end - - emit(:group, token, text) - end - - def emit_meta_control_sequence(data, ts, te, token) - if data.last < 0x00 || data.last > 0x7F - raise ValidationError.for(:sequence, 'escape', token.to_s) - end - emit(:escape, token, copy(data, ts-1,te)) - end -end # module Regexp::Scanner diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/scanner/char_type.rl b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/scanner/char_type.rl deleted file mode 100644 index 67de5063..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/scanner/char_type.rl +++ /dev/null @@ -1,28 +0,0 @@ -%%{ - machine re_char_type; - - single_codepoint_char_type = [dDhHsSwW]; - multi_codepoint_char_type = [RX]; - - char_type_char = single_codepoint_char_type | multi_codepoint_char_type; - - # Char types scanner - # -------------------------------------------------------------------------- - char_type := |* - char_type_char { - case text = copy(data, ts-1, te) - when '\d'; emit(:type, :digit, text) - when '\D'; emit(:type, :nondigit, text) - when '\h'; emit(:type, :hex, text) - when '\H'; emit(:type, :nonhex, text) - when '\s'; emit(:type, :space, text) - when '\S'; emit(:type, :nonspace, text) - when '\w'; emit(:type, :word, text) - when '\W'; emit(:type, :nonword, text) - when '\R'; emit(:type, :linebreak, text) - when '\X'; emit(:type, :xgrapheme, text) - end - fret; - }; - *|; -}%% diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/scanner/errors/premature_end_error.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/scanner/errors/premature_end_error.rb deleted file mode 100644 index 9aefabfa..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/scanner/errors/premature_end_error.rb +++ /dev/null @@ -1,8 +0,0 @@ -class Regexp::Scanner - # Unexpected end of pattern - class PrematureEndError < ScannerError - def initialize(where = '') - super "Premature end of pattern at #{where}" - end - end -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/scanner/errors/scanner_error.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/scanner/errors/scanner_error.rb deleted file mode 100644 index 99c4cc11..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/scanner/errors/scanner_error.rb +++ /dev/null @@ -1,6 +0,0 @@ -require 'regexp_parser/error' - -class Regexp::Scanner - # General scanner error (catch all) - class ScannerError < Regexp::Parser::Error; end -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/scanner/errors/validation_error.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/scanner/errors/validation_error.rb deleted file mode 100644 index 9fe0ace8..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/scanner/errors/validation_error.rb +++ /dev/null @@ -1,63 +0,0 @@ -class Regexp::Scanner - # Base for all scanner validation errors - class ValidationError < ScannerError - # Centralizes and unifies the handling of validation related errors. - def self.for(type, problem, reason = nil) - types.fetch(type).new(problem, reason) - end - - def self.types - @types ||= { - backref: InvalidBackrefError, - group: InvalidGroupError, - group_option: InvalidGroupOption, - posix_class: UnknownPosixClassError, - property: UnknownUnicodePropertyError, - sequence: InvalidSequenceError, - } - end - end - - # Invalid sequence format. Used for escape sequences, mainly. - class InvalidSequenceError < ValidationError - def initialize(what = 'sequence', where = '') - super "Invalid #{what} at #{where}" - end - end - - # Invalid group. Used for named groups. - class InvalidGroupError < ValidationError - def initialize(what, reason) - super "Invalid #{what}, #{reason}." - end - end - - # Invalid groupOption. Used for inline options. - # TODO: should become InvalidGroupOptionError in v3.0.0 for consistency - class InvalidGroupOption < ValidationError - def initialize(option, text) - super "Invalid group option #{option} in #{text}" - end - end - - # Invalid back reference. Used for name a number refs/calls. - class InvalidBackrefError < ValidationError - def initialize(what, reason) - super "Invalid back reference #{what}, #{reason}" - end - end - - # The property name was not recognized by the scanner. - class UnknownUnicodePropertyError < ValidationError - def initialize(name, _) - super "Unknown unicode character property name #{name}" - end - end - - # The POSIX class name was not recognized by the scanner. - class UnknownPosixClassError < ValidationError - def initialize(text, _) - super "Unknown POSIX class #{text}" - end - end -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/scanner/property.rl b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/scanner/property.rl deleted file mode 100644 index 61040ce3..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/scanner/property.rl +++ /dev/null @@ -1,30 +0,0 @@ -%%{ - machine re_property; - - property_char = [pP]; - - property_sequence = property_char . '{' . '^'? (alnum|space|[_\-\.=])+ '}'; - - action premature_property_end { - raise PrematureEndError.new('unicode property') - } - - # Unicode properties scanner - # -------------------------------------------------------------------------- - unicode_property := |* - - property_sequence < eof(premature_property_end) { - text = copy(data, ts-1, te) - type = (text[1] == 'P') ^ (text[3] == '^') ? :nonproperty : :property - - name = text[3..-2].gsub(/[\^\s_\-]/, '').downcase - - token = self.class.short_prop_map[name] || self.class.long_prop_map[name] - raise ValidationError.for(:property, name) unless token - - self.emit(type, token.to_sym, text) - - fret; - }; - *|; -}%% diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/scanner/scanner.rl b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/scanner/scanner.rl deleted file mode 100644 index e5bce69f..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/scanner/scanner.rl +++ /dev/null @@ -1,828 +0,0 @@ -%%{ - machine re_scanner; - include re_char_type "char_type.rl"; - include re_property "property.rl"; - - utf8_2_byte = (0xc2..0xdf 0x80..0xbf); - utf8_3_byte = (0xe0..0xef 0x80..0xbf 0x80..0xbf); - utf8_4_byte = (0xf0..0xf4 0x80..0xbf 0x80..0xbf 0x80..0xbf); - utf8_multibyte = utf8_2_byte | utf8_3_byte | utf8_4_byte; - - dot = '.'; - backslash = '\\'; - alternation = '|'; - beginning_of_line = '^'; - end_of_line = '$'; - - range_open = '{'; - range_close = '}'; - curlies = range_open | range_close; - - group_open = '('; - group_close = ')'; - parentheses = group_open | group_close; - - set_open = '['; - set_close = ']'; - brackets = set_open | set_close; - - comment = ('#' . [^\n]* . '\n'?); - - class_posix = ('[:' . '^'? . [^\[\]]* . ':]'); - - line_anchor = beginning_of_line | end_of_line; - anchor_char = [AbBzZG]; - - escaped_ascii = [abefnrtv]; - octal_sequence = [0-7]{1,3}; - - hex_sequence = 'x' . xdigit{1,2}; - hex_sequence_err = 'x' . [^0-9a-fA-F{]; - - codepoint_single = 'u' . xdigit{4}; - codepoint_list = 'u{' . xdigit{1,6} . (space . xdigit{1,6})* . '}'; - codepoint_sequence = codepoint_single | codepoint_list; - - control_sequence = ('c' | 'C-') . (backslash . 'M-')? . backslash? . any; - - meta_sequence = 'M-' . (backslash . ('c' | 'C-'))? . backslash? . any; - - sequence_char = [CMcux]; - - zero_or_one = '?' | '??' | '?+'; - zero_or_more = '*' | '*?' | '*+'; - one_or_more = '+' | '+?' | '++'; - - quantifier_greedy = '?' | '*' | '+'; - - quantity_exact = (digit+); - quantity_minimum = (digit+) . ','; - quantity_maximum = ',' . (digit+); - quantity_range = (digit+) . ',' . (digit+); - quantifier_interval = range_open . ( quantity_exact | quantity_minimum | - quantity_maximum | quantity_range ) . range_close; - - conditional = '(?('; - - group_comment = '?#' . [^)]* . group_close; - - group_atomic = '?>'; - group_passive = '?:'; - group_absence = '?~'; - - assertion_lookahead = '?='; - assertion_nlookahead = '?!'; - assertion_lookbehind = '?<='; - assertion_nlookbehind = '?~]+ . ':'? ) ?; - - group_name_id_ab = ([^!0-9\->] | utf8_multibyte) . ([^>] | utf8_multibyte)*; - group_name_id_sq = ([^0-9\-'] | utf8_multibyte) . ([^'] | utf8_multibyte)*; - group_number = '-'? . [0-9]+; - group_level = [+\-] . [0-9]+; - - group_name = ('<' . group_name_id_ab? . '>') | - ("'" . group_name_id_sq? . "'"); - group_lookup = group_name | group_number; - - group_named = ('?' . group_name ); - - group_ref_body = (('<' . (group_name_id_ab? | group_number) . group_level? '>') | - ("'" . (group_name_id_sq? | group_number) . group_level? "'")); - - group_ref = 'k' . group_ref_body; - group_call = 'g' . group_ref_body; - - group_type = group_atomic | group_passive | group_absence | group_named; - - keep_mark = 'K'; - - assertion_type = assertion_lookahead | assertion_nlookahead | - assertion_lookbehind | assertion_nlookbehind; - - # characters that 'break' a literal - meta_char = dot | backslash | alternation | - curlies | parentheses | brackets | - line_anchor | quantifier_greedy; - - literal_delimiters = ']' | '}'; - - ascii_print = ((0x20..0x7e) - meta_char - '#'); - ascii_nonprint = (0x01..0x1f | 0x7f); - - non_literal_escape = char_type_char | anchor_char | escaped_ascii | - keep_mark | sequence_char; - - # escapes that also work within a character set - set_escape = backslash | brackets | escaped_ascii | - octal_sequence | property_char | - sequence_char | single_codepoint_char_type; - - - # EOF error, used where it can be detected - action premature_end_error { - text = copy(data, ts ? ts-1 : 0, -1) - raise PrematureEndError.new(text) - } - - # Invalid sequence error, used from sequences, like escapes and sets - action invalid_sequence_error { - text = copy(data, ts ? ts-1 : 0, -1) - raise ValidationError.for(:sequence, 'sequence', text) - } - - # group (nesting) and set open/close actions - action group_opened { self.group_depth = group_depth + 1 } - action group_closed { self.group_depth = group_depth - 1 } - action set_opened { self.set_depth = set_depth + 1 } - action set_closed { self.set_depth = set_depth - 1 } - - # Character set scanner, continues consuming characters until it meets the - # closing bracket of the set. - # -------------------------------------------------------------------------- - character_set := |* - set_close > (set_meta, 2) @set_closed { - emit(:set, :close, copy(data, ts, te)) - if in_set? - fret; - else - fgoto main; - end - }; - - '-]' @set_closed { # special case, emits two tokens - emit(:literal, :literal, '-') - emit(:set, :close, ']') - if in_set? - fret; - else - fgoto main; - end - }; - - '-&&' { # special case, emits two tokens - emit(:literal, :literal, '-') - emit(:set, :intersection, '&&') - }; - - '^' { - if prev_token[1] == :open - emit(:set, :negate, '^') - else - emit(:literal, :literal, '^') - end - }; - - '-' { - # ranges cant start with the opening bracket, a subset, or - # intersection/negation/range operators - if prev_token[0] == :set - emit(:literal, :literal, '-') - else - emit(:set, :range, '-') - end - }; - - # Unlike ranges, intersections can start or end at set boundaries, whereupon - # they match nothing: r = /[a&&]/; [r =~ ?a, r =~ ?&] # => [nil, nil] - '&&' { - emit(:set, :intersection, '&&') - }; - - backslash { - fcall set_escape_sequence; - }; - - set_open >(open_bracket, 1) >set_opened { - emit(:set, :open, '[') - fcall character_set; - }; - - class_posix >(open_bracket, 1) @set_closed @eof(premature_end_error) { - text = copy(data, ts, te) - - type = :posixclass - class_name = text[2..-3] - if class_name[0] == '^' - class_name = class_name[1..-1] - type = :nonposixclass - end - - unless self.class.posix_classes.include?(class_name) - raise ValidationError.for(:posix_class, text) - end - - emit(type, class_name.to_sym, text) - }; - - meta_char > (set_meta, 1) { - emit(:literal, :literal, copy(data, ts, te)) - }; - - any | ascii_nonprint | utf8_multibyte { - text = copy(data, ts, te) - emit(:literal, :literal, text) - }; - *|; - - # set escapes scanner - # -------------------------------------------------------------------------- - set_escape_sequence := |* - # Special case: in sets, octal sequences have higher priority than backrefs - octal_sequence { - emit(:escape, :octal, copy(data, ts-1, te)) - fret; - }; - - # Scan all other escapes that work in sets with the generic escape scanner - set_escape > (escaped_set_alpha, 2) { - fhold; - fnext character_set; - fcall escape_sequence; - }; - - # Treat all remaining escapes - those not supported in sets - as literal. - # (This currently includes \^, \-, \&, \:, although these could potentially - # be meta chars when not escaped, depending on their position in the set.) - any > (escaped_set_alpha, 1) { - emit(:escape, :literal, copy(data, ts-1, te)) - fret; - }; - *|; - - - # escape sequence scanner - # -------------------------------------------------------------------------- - escape_sequence := |* - [1-9] { - text = copy(data, ts-1, te) - emit(:backref, :number, text) - fret; - }; - - octal_sequence { - emit(:escape, :octal, copy(data, ts-1, te)) - fret; - }; - - [8-9] . [0-9] { # special case, emits two tokens - text = copy(data, ts-1, te) - emit(:escape, :literal, text[0, 2]) - emit(:literal, :literal, text[2]) - fret; - }; - - meta_char { - case text = copy(data, ts-1, te) - when '\.'; emit(:escape, :dot, text) - when '\|'; emit(:escape, :alternation, text) - when '\^'; emit(:escape, :bol, text) - when '\$'; emit(:escape, :eol, text) - when '\?'; emit(:escape, :zero_or_one, text) - when '\*'; emit(:escape, :zero_or_more, text) - when '\+'; emit(:escape, :one_or_more, text) - when '\('; emit(:escape, :group_open, text) - when '\)'; emit(:escape, :group_close, text) - when '\{'; emit(:escape, :interval_open, text) - when '\}'; emit(:escape, :interval_close, text) - when '\['; emit(:escape, :set_open, text) - when '\]'; emit(:escape, :set_close, text) - when "\\\\"; - emit(:escape, :backslash, text) - end - fret; - }; - - escaped_ascii > (escaped_alpha, 7) { - # \b is emitted as backspace only when inside a character set, otherwise - # it is a word boundary anchor. A syntax might "normalize" it if needed. - case text = copy(data, ts-1, te) - when '\a'; emit(:escape, :bell, text) - when '\b'; emit(:escape, :backspace, text) - when '\e'; emit(:escape, :escape, text) - when '\f'; emit(:escape, :form_feed, text) - when '\n'; emit(:escape, :newline, text) - when '\r'; emit(:escape, :carriage, text) - when '\t'; emit(:escape, :tab, text) - when '\v'; emit(:escape, :vertical_tab, text) - end - fret; - }; - - codepoint_sequence > (escaped_alpha, 6) $eof(premature_end_error) { - text = copy(data, ts-1, te) - if text[2] == '{' - emit(:escape, :codepoint_list, text) - else - emit(:escape, :codepoint, text) - end - fret; - }; - - hex_sequence > (escaped_alpha, 5) @eof(premature_end_error) { - emit(:escape, :hex, copy(data, ts-1, te)) - fret; - }; - - hex_sequence_err @invalid_sequence_error { - fret; - }; - - control_sequence >(escaped_alpha, 4) $eof(premature_end_error) { - emit_meta_control_sequence(data, ts, te, :control) - fret; - }; - - meta_sequence >(backslashed, 3) $eof(premature_end_error) { - emit_meta_control_sequence(data, ts, te, :meta_sequence) - fret; - }; - - char_type_char > (escaped_alpha, 2) { - fhold; - fnext *(in_set? ? fentry(character_set) : fentry(main)); - fcall char_type; - }; - - property_char > (escaped_alpha, 2) { - fhold; - fnext *(in_set? ? fentry(character_set) : fentry(main)); - fcall unicode_property; - }; - - (any -- non_literal_escape) | utf8_multibyte > (escaped_alpha, 1) { - emit(:escape, :literal, copy(data, ts-1, te)) - fret; - }; - *|; - - - # conditional expressions scanner - # -------------------------------------------------------------------------- - conditional_expression := |* - group_lookup . ')' { - text = copy(data, ts, te-1) - text =~ /[^0]/ or raise ValidationError.for(:backref, 'condition', 'invalid ref ID') - emit(:conditional, :condition, text) - emit(:conditional, :condition_close, ')') - }; - - any { - fhold; - fcall main; - }; - *|; - - - # Main scanner - # -------------------------------------------------------------------------- - main := |* - - # Meta characters - # ------------------------------------------------------------------------ - dot { - emit(:meta, :dot, copy(data, ts, te)) - }; - - alternation { - if conditional_stack.last == group_depth - emit(:conditional, :separator, copy(data, ts, te)) - else - emit(:meta, :alternation, copy(data, ts, te)) - end - }; - - # Anchors - # ------------------------------------------------------------------------ - beginning_of_line { - emit(:anchor, :bol, copy(data, ts, te)) - }; - - end_of_line { - emit(:anchor, :eol, copy(data, ts, te)) - }; - - backslash . keep_mark > (backslashed, 4) { - emit(:keep, :mark, copy(data, ts, te)) - }; - - backslash . anchor_char > (backslashed, 3) { - case text = copy(data, ts, te) - when '\A'; emit(:anchor, :bos, text) - when '\z'; emit(:anchor, :eos, text) - when '\Z'; emit(:anchor, :eos_ob_eol, text) - when '\b'; emit(:anchor, :word_boundary, text) - when '\B'; emit(:anchor, :nonword_boundary, text) - when '\G'; emit(:anchor, :match_start, text) - end - }; - - literal_delimiters { - append_literal(data, ts, te) - }; - - # Character sets - # ------------------------------------------------------------------------ - set_open >set_opened { - emit(:set, :open, copy(data, ts, te)) - fcall character_set; - }; - - - # Conditional expression - # (?(condition)Y|N) conditional expression - # ------------------------------------------------------------------------ - conditional { - text = copy(data, ts, te) - - conditional_stack << group_depth - - emit(:conditional, :open, text[0..-2]) - emit(:conditional, :condition_open, '(') - fcall conditional_expression; - }; - - - # (?#...) comments: parsed as a single expression, without introducing a - # new nesting level. Comments may not include parentheses, escaped or not. - # special case for close to get the correct closing count. - # ------------------------------------------------------------------------ - (group_open . group_comment) @group_closed { - emit(:group, :comment, copy(data, ts, te)) - }; - - # Expression options: - # (?imxdau-imx) option on/off - # i: ignore case - # m: multi-line (dot(.) match newline) - # x: extended form - # d: default class rules (1.9 compatible) - # a: ASCII class rules (\s, \w, etc.) - # u: Unicode class rules (\s, \w, etc.) - # - # (?imxdau-imx:subexp) option on/off for subexp - # ------------------------------------------------------------------------ - (group_open . group_options) >group_opened { - text = copy(data, ts, te) - if text[2..-1] =~ /([^\-mixdau:]|^$)|-.*([dau])/ - raise ValidationError.for(:group_option, $1 || "-#{$2}", text) - end - emit_options(text) - }; - - # Assertions - # (?=subexp) look-ahead - # (?!subexp) negative look-ahead - # (?<=subexp) look-behind - # (?group_opened { - case text = copy(data, ts, te) - when '(?='; emit(:assertion, :lookahead, text) - when '(?!'; emit(:assertion, :nlookahead, text) - when '(?<='; emit(:assertion, :lookbehind, text) - when '(?subexp) atomic group, don't backtrack in subexp. - # (?~subexp) absence group, matches anything that is not subexp - # (?subexp) named group - # (?'name'subexp) named group (single quoted version) - # (subexp) captured group - # ------------------------------------------------------------------------ - (group_open . group_type) >group_opened { - case text = copy(data, ts, te) - when '(?:'; emit(:group, :passive, text) - when '(?>'; emit(:group, :atomic, text) - when '(?~'; emit(:group, :absence, text) - - when /^\(\?(?:<>|'')/ - raise ValidationError.for(:group, 'named group', 'name is empty') - - when /^\(\?<[^>]+>/ - emit(:group, :named_ab, text) - - when /^\(\?'[^']+'/ - emit(:group, :named_sq, text) - - end - }; - - group_open @group_opened { - text = copy(data, ts, te) - emit(:group, :capture, text) - }; - - group_close @group_closed { - if conditional_stack.last == group_depth + 1 - conditional_stack.pop - emit(:conditional, :close, ')') - elsif group_depth >= 0 - if spacing_stack.length > 1 && - spacing_stack.last[:depth] == group_depth + 1 - spacing_stack.pop - self.free_spacing = spacing_stack.last[:free_spacing] - end - - emit(:group, :close, ')') - else - raise ValidationError.for(:group, 'group', 'unmatched close parenthesis') - end - }; - - - # Group backreference, named and numbered - # ------------------------------------------------------------------------ - backslash . (group_ref) > (backslashed, 4) { - case text = copy(data, ts, te) - when /^\\k(.)[^0-9\-][^+\-]*['>]$/ - emit(:backref, $1 == '<' ? :name_ref_ab : :name_ref_sq, text) - when /^\\k(.)0*[1-9]\d*['>]$/ - emit(:backref, $1 == '<' ? :number_ref_ab : :number_ref_sq, text) - when /^\\k(.)-0*[1-9]\d*['>]$/ - emit(:backref, $1 == '<' ? :number_rel_ref_ab : :number_rel_ref_sq, text) - when /^\\k(.)[^0-9\-].*[+\-]\d+['>]$/ - emit(:backref, $1 == '<' ? :name_recursion_ref_ab : :name_recursion_ref_sq, text) - when /^\\k(.)-?0*[1-9]\d*[+\-]\d+['>]$/ - emit(:backref, $1 == '<' ? :number_recursion_ref_ab : :number_recursion_ref_sq, text) - else - raise ValidationError.for(:backref, 'backreference', 'invalid ref ID') - end - }; - - # Group call, named and numbered - # ------------------------------------------------------------------------ - backslash . (group_call) > (backslashed, 4) { - case text = copy(data, ts, te) - when /^\\g(.)[^0-9+\-].*['>]$/ - emit(:backref, $1 == '<' ? :name_call_ab : :name_call_sq, text) - when /^\\g(.)(?:0|0*[1-9]\d*)['>]$/ - emit(:backref, $1 == '<' ? :number_call_ab : :number_call_sq, text) - when /^\\g(.)[+-]0*[1-9]\d*/ - emit(:backref, $1 == '<' ? :number_rel_call_ab : :number_rel_call_sq, text) - else - raise ValidationError.for(:backref, 'subexpression call', 'invalid ref ID') - end - }; - - - # Quantifiers - # ------------------------------------------------------------------------ - zero_or_one { - case text = copy(data, ts, te) - when '?' ; emit(:quantifier, :zero_or_one, text) - when '??'; emit(:quantifier, :zero_or_one_reluctant, text) - when '?+'; emit(:quantifier, :zero_or_one_possessive, text) - end - }; - - zero_or_more { - case text = copy(data, ts, te) - when '*' ; emit(:quantifier, :zero_or_more, text) - when '*?'; emit(:quantifier, :zero_or_more_reluctant, text) - when '*+'; emit(:quantifier, :zero_or_more_possessive, text) - end - }; - - one_or_more { - case text = copy(data, ts, te) - when '+' ; emit(:quantifier, :one_or_more, text) - when '+?'; emit(:quantifier, :one_or_more_reluctant, text) - when '++'; emit(:quantifier, :one_or_more_possessive, text) - end - }; - - quantifier_interval { - emit(:quantifier, :interval, copy(data, ts, te)) - }; - - # Catch unmatched curly braces as literals - range_open { - append_literal(data, ts, te) - }; - - # Escaped sequences - # ------------------------------------------------------------------------ - backslash > (backslashed, 1) { - fcall escape_sequence; - }; - - comment { - if free_spacing - emit(:free_space, :comment, copy(data, ts, te)) - else - # consume only the pound sign (#) and backtrack to do regular scanning - append_literal(data, ts, ts + 1) - fexec ts + 1; - end - }; - - space+ { - if free_spacing - emit(:free_space, :whitespace, copy(data, ts, te)) - else - append_literal(data, ts, te) - end - }; - - # Literal: any run of ASCII (pritable or non-printable), and/or UTF-8, - # except meta characters. - # ------------------------------------------------------------------------ - (ascii_print -- space)+ | ascii_nonprint+ | utf8_multibyte+ { - append_literal(data, ts, te) - }; - - *|; -}%% - -require 'regexp_parser/scanner/errors/scanner_error' -require 'regexp_parser/scanner/errors/premature_end_error' -require 'regexp_parser/scanner/errors/validation_error' - -class Regexp::Scanner - # Scans the given regular expression text, or Regexp object and collects the - # emitted token into an array that gets returned at the end. If a block is - # given, it gets called for each emitted token. - # - # This method may raise errors if a syntax error is encountered. - # -------------------------------------------------------------------------- - def self.scan(input_object, options: nil, collect_tokens: true, &block) - new.scan(input_object, options: options, collect_tokens: collect_tokens, &block) - end - - def scan(input_object, options: nil, collect_tokens: true, &block) - self.collect_tokens = collect_tokens - self.literal_run = nil - stack = [] - - input = input_object.is_a?(Regexp) ? input_object.source : input_object - self.free_spacing = free_spacing?(input_object, options) - self.spacing_stack = [{:free_spacing => free_spacing, :depth => 0}] - - data = input.unpack("c*") - eof = data.length - - self.tokens = [] - self.block = block - - self.set_depth = 0 - self.group_depth = 0 - self.conditional_stack = [] - self.char_pos = 0 - - %% write data; - %% write init; - %% write exec; - - # to avoid "warning: assigned but unused variable - testEof" - testEof = testEof - - if cs == re_scanner_error - text = copy(data, ts ? ts-1 : 0, -1) - raise ScannerError.new("Scan error at '#{text}'") - end - - raise PrematureEndError.new("(missing group closing paranthesis) "+ - "[#{group_depth}]") if in_group? - raise PrematureEndError.new("(missing set closing bracket) "+ - "[#{set_depth}]") if in_set? - - # when the entire expression is a literal run - emit_literal if literal_run - - tokens - end - - # lazy-load property maps when first needed - def self.short_prop_map - @short_prop_map ||= parse_prop_map('short') - end - - def self.long_prop_map - @long_prop_map ||= parse_prop_map('long') - end - - def self.parse_prop_map(name) - File.read("#{__dir__}/scanner/properties/#{name}.csv").scan(/(.+),(.+)/).to_h - end - - def self.posix_classes - %w[alnum alpha ascii blank cntrl digit graph - lower print punct space upper word xdigit] - end - - # Emits an array with the details of the scanned pattern - def emit(type, token, text) - #puts "EMIT: type: #{type}, token: #{token}, text: #{text}, ts: #{ts}, te: #{te}" - - emit_literal if literal_run - - # Ragel runs with byte-based indices (ts, te). These are of little value to - # end-users, so we keep track of char-based indices and emit those instead. - ts_char_pos = char_pos - te_char_pos = char_pos + text.length - - tok = [type, token, text, ts_char_pos, te_char_pos] - - self.prev_token = tok - - self.char_pos = te_char_pos - - if block - block.call type, token, text, ts_char_pos, te_char_pos - # TODO: in v3.0.0, remove `collect_tokens:` kwarg and only collect if no block given - tokens << tok if collect_tokens - elsif collect_tokens - tokens << tok - end - end - - attr_accessor :literal_run # only public for #||= to work on ruby <= 2.5 - - private - - attr_accessor :block, - :collect_tokens, :tokens, :prev_token, - :free_spacing, :spacing_stack, - :group_depth, :set_depth, :conditional_stack, - :char_pos - - def free_spacing?(input_object, options) - if options && !input_object.is_a?(String) - raise ArgumentError, 'options cannot be supplied unless scanning a String' - end - - options = input_object.options if input_object.is_a?(::Regexp) - - return false unless options - - options & Regexp::EXTENDED != 0 - end - - def in_group? - group_depth > 0 - end - - def in_set? - set_depth > 0 - end - - # Copy from ts to te from data as text - def copy(data, ts, te) - data[ts...te].pack('c*').force_encoding('utf-8') - end - - # Appends one or more characters to the literal buffer, to be emitted later - # by a call to emit_literal. - def append_literal(data, ts, te) - (self.literal_run ||= []) << copy(data, ts, te) - end - - # Emits the literal run collected by calls to the append_literal method. - def emit_literal - text = literal_run.join - self.literal_run = nil - emit(:literal, :literal, text) - end - - def emit_options(text) - token = nil - - # Ruby allows things like '(?-xxxx)' or '(?xx-xx--xx-:abc)'. - text =~ /\(\?([mixdau]*)(-(?:[mix]*))*(:)?/ - positive, negative, group_local = $1, $2, $3 - - if positive.include?('x') - self.free_spacing = true - end - - # If the x appears in both, treat it like ruby does, the second cancels - # the first. - if negative && negative.include?('x') - self.free_spacing = false - end - - if group_local - spacing_stack << {:free_spacing => free_spacing, :depth => group_depth} - token = :options - else - # switch for parent group level - spacing_stack.last[:free_spacing] = free_spacing - token = :options_switch - end - - emit(:group, token, text) - end - - def emit_meta_control_sequence(data, ts, te, token) - if data.last < 0x00 || data.last > 0x7F - raise ValidationError.for(:sequence, 'escape', token.to_s) - end - emit(:escape, token, copy(data, ts-1, te)) - end -end # module Regexp::Scanner diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax.rb deleted file mode 100644 index e7ebd10b..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax.rb +++ /dev/null @@ -1,11 +0,0 @@ -require 'regexp_parser/error' - -module Regexp::Syntax - class SyntaxError < Regexp::Parser::Error; end -end - -require_relative 'syntax/token' -require_relative 'syntax/base' -require_relative 'syntax/any' -require_relative 'syntax/version_lookup' -require_relative 'syntax/versions' diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/any.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/any.rb deleted file mode 100644 index f2038149..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/any.rb +++ /dev/null @@ -1,10 +0,0 @@ -module Regexp::Syntax - # A syntax that always returns true, passing all tokens as implemented. This - # is useful during development, testing, and should be useful for some types - # of transformations as well. - class Any < Base - implements :*, [:*] - - def self.implements?(_type, _token) true end - end -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/base.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/base.rb deleted file mode 100644 index 81b65937..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/base.rb +++ /dev/null @@ -1,120 +0,0 @@ -module Regexp::Syntax - class NotImplementedError < Regexp::Syntax::SyntaxError - def initialize(syntax, type, token) - super "#{syntax} does not implement: [#{type}:#{token}]" - end - end - - # A lookup map of supported types and tokens in a given syntax - class Base - include Regexp::Syntax::Token - - class << self - attr_accessor :features - - # automatically inherit features through the syntax class hierarchy - def inherited(subclass) - super - subclass.features = features.to_h.map { |k, v| [k, v.dup] }.to_h - end - - def implements(type, tokens) - (features[type] ||= []).concat(tokens) - added_features[type] = tokens - end - - def excludes(type, tokens) - tokens.each { |tok| features[type].delete(tok) } - removed_features[type] = tokens - end - - def implements?(type, token) - implementations(type).include?(token) - end - alias :check? :implements? - - def implementations(type) - features[type] || [] - end - - def implements!(type, token) - raise NotImplementedError.new(self, type, token) unless - implements?(type, token) - end - alias :check! :implements! - - def added_features - @added_features ||= {} - end - - def removed_features - @removed_features ||= {} - end - - def normalize(type, token) - case type - when :group - normalize_group(type, token) - when :backref - normalize_backref(type, token) - else - [type, token] - end - end - - def normalize_group(type, token) - case token - when :named_ab, :named_sq - %i[group named] - else - [type, token] - end - end - - def normalize_backref(type, token) - case token - when :name_ref_ab, :name_ref_sq - %i[backref name_ref] - when :name_call_ab, :name_call_sq - %i[backref name_call] - when :name_recursion_ref_ab, :name_recursion_ref_sq - %i[backref name_recursion_ref] - when :number_ref_ab, :number_ref_sq - %i[backref number_ref] - when :number_call_ab, :number_call_sq - %i[backref number_call] - when :number_rel_ref_ab, :number_rel_ref_sq - %i[backref number_rel_ref] - when :number_rel_call_ab, :number_rel_call_sq - %i[backref number_rel_call] - when :number_recursion_ref_ab, :number_recursion_ref_sq - %i[backref number_recursion_ref] - else - [type, token] - end - end - end - - # TODO: drop this backwards compatibility code in v3.0.0, do `private :new` - def initialize - warn 'Using instances of Regexp::Parser::Syntax is deprecated ' \ - "and will no longer be supported in v3.0.0." - end - - def method_missing(name, *args) - if self.class.respond_to?(name) - warn 'Using instances of Regexp::Parser::Syntax is deprecated ' \ - "and will no longer be supported in v3.0.0. Please call "\ - "methods on the class directly, e.g.: #{self.class}.#{name}" - self.class.send(name, *args) - else - super - end - end - - def respond_to_missing?(name, include_private = false) - self.class.respond_to?(name) || super - end - # end of backwards compatibility code - end -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/token.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/token.rb deleted file mode 100644 index fd6389a3..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/token.rb +++ /dev/null @@ -1,45 +0,0 @@ -# Define the base module and the simplest of tokens. -module Regexp::Syntax - module Token - Map = {} - - module Literal - All = %i[literal] - Type = :literal - end - - module FreeSpace - All = %i[comment whitespace] - Type = :free_space - end - - Map[FreeSpace::Type] = FreeSpace::All - Map[Literal::Type] = Literal::All - end -end - - -# Load all the token files, they will populate the Map constant. -require 'regexp_parser/syntax/token/anchor' -require 'regexp_parser/syntax/token/assertion' -require 'regexp_parser/syntax/token/backreference' -require 'regexp_parser/syntax/token/posix_class' -require 'regexp_parser/syntax/token/character_set' -require 'regexp_parser/syntax/token/character_type' -require 'regexp_parser/syntax/token/conditional' -require 'regexp_parser/syntax/token/escape' -require 'regexp_parser/syntax/token/group' -require 'regexp_parser/syntax/token/keep' -require 'regexp_parser/syntax/token/meta' -require 'regexp_parser/syntax/token/quantifier' -require 'regexp_parser/syntax/token/unicode_property' - - -# After loading all the tokens the map is full. Extract all tokens and types -# into the All and Types constants. -module Regexp::Syntax - module Token - All = Map.values.flatten.uniq.sort.freeze - Types = Map.keys.freeze - end -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/token/anchor.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/token/anchor.rb deleted file mode 100644 index fc7834b8..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/token/anchor.rb +++ /dev/null @@ -1,15 +0,0 @@ -module Regexp::Syntax - module Token - module Anchor - Basic = %i[bol eol] - Extended = Basic + %i[word_boundary nonword_boundary] - String = %i[bos eos eos_ob_eol] - MatchStart = %i[match_start] - - All = Extended + String + MatchStart - Type = :anchor - end - - Map[Anchor::Type] = Anchor::All - end -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/token/assertion.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/token/assertion.rb deleted file mode 100644 index 3d0bfa01..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/token/assertion.rb +++ /dev/null @@ -1,13 +0,0 @@ -module Regexp::Syntax - module Token - module Assertion - Lookahead = %i[lookahead nlookahead] - Lookbehind = %i[lookbehind nlookbehind] - - All = Lookahead + Lookbehind - Type = :assertion - end - - Map[Assertion::Type] = Assertion::All - end -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/token/backreference.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/token/backreference.rb deleted file mode 100644 index ffc17fef..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/token/backreference.rb +++ /dev/null @@ -1,33 +0,0 @@ -module Regexp::Syntax - module Token - module Backreference - Plain = %i[number] - NumberRef = %i[number_ref number_rel_ref] - Number = Plain + NumberRef - Name = %i[name_ref] - - RecursionLevel = %i[name_recursion_ref number_recursion_ref] - - V1_8_6 = Plain - - V1_9_1 = Name + NumberRef + RecursionLevel - - All = V1_8_6 + V1_9_1 - Type = :backref - end - - # Type is the same as Backreference so keeping it here, for now. - module SubexpressionCall - Name = %i[name_call] - Number = %i[number_call number_rel_call] - - All = Name + Number - end - - Map[Backreference::Type] = Backreference::All + - SubexpressionCall::All - - # alias for symmetry between token symbol and Expression class name - Backref = Backreference - end -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/token/character_set.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/token/character_set.rb deleted file mode 100644 index 33edd9f9..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/token/character_set.rb +++ /dev/null @@ -1,16 +0,0 @@ -module Regexp::Syntax - module Token - module CharacterSet - Basic = %i[open close negate range] - Extended = Basic + %i[intersection] - - All = Extended - Type = :set - end - - Map[CharacterSet::Type] = CharacterSet::All - - # alias for symmetry between token symbol and Token module name - Set = CharacterSet - end -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/token/character_type.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/token/character_type.rb deleted file mode 100644 index 4cae0b91..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/token/character_type.rb +++ /dev/null @@ -1,16 +0,0 @@ -module Regexp::Syntax - module Token - module CharacterType - Basic = [] - Extended = %i[digit nondigit space nonspace word nonword] - Hex = %i[hex nonhex] - - Clustered = %i[linebreak xgrapheme] - - All = Basic + Extended + Hex + Clustered - Type = :type - end - - Map[CharacterType::Type] = CharacterType::All - end -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/token/conditional.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/token/conditional.rb deleted file mode 100644 index 3b8f798c..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/token/conditional.rb +++ /dev/null @@ -1,16 +0,0 @@ -module Regexp::Syntax - module Token - module Conditional - Delimiters = %i[open close] - - Condition = %i[condition_open condition condition_close] - Separator = %i[separator] - - All = Conditional::Delimiters + Conditional::Condition + Conditional::Separator - - Type = :conditional - end - - Map[Conditional::Type] = Conditional::All - end -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/token/escape.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/token/escape.rb deleted file mode 100644 index 8e73998d..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/token/escape.rb +++ /dev/null @@ -1,33 +0,0 @@ -module Regexp::Syntax - module Token - module Escape - Basic = %i[backslash literal] - - Control = %i[control meta_sequence] - - ASCII = %i[bell backspace escape form_feed newline carriage - tab vertical_tab] - - Unicode = %i[codepoint codepoint_list] - - Meta = %i[dot alternation - zero_or_one zero_or_more one_or_more - bol eol - group_open group_close - interval_open interval_close - set_open set_close] - - Hex = %i[hex] - - Octal = %i[octal] - - All = Basic + Control + ASCII + Unicode + Meta + Hex + Octal - Type = :escape - end - - Map[Escape::Type] = Escape::All - - # alias for symmetry between Token::* and Expression::* - EscapeSequence = Escape - end -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/token/group.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/token/group.rb deleted file mode 100644 index 5c65617e..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/token/group.rb +++ /dev/null @@ -1,23 +0,0 @@ -module Regexp::Syntax - module Token - module Group - Basic = %i[capture close] - Extended = Basic + %i[options options_switch] - - Named = %i[named] - Atomic = %i[atomic] - Passive = %i[passive] - Comment = %i[comment] - - V1_8_6 = Group::Extended + Group::Named + Group::Atomic + - Group::Passive + Group::Comment - - V2_4_1 = %i[absence] - - All = V1_8_6 + V2_4_1 - Type = :group - end - - Map[Group::Type] = Group::All - end -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/token/keep.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/token/keep.rb deleted file mode 100644 index 9e4ea090..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/token/keep.rb +++ /dev/null @@ -1,12 +0,0 @@ -module Regexp::Syntax - module Token - module Keep - Mark = %i[mark] - - All = Mark - Type = :keep - end - - Map[Keep::Type] = Keep::All - end -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/token/meta.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/token/meta.rb deleted file mode 100644 index f6b20cc7..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/token/meta.rb +++ /dev/null @@ -1,20 +0,0 @@ -module Regexp::Syntax - module Token - module Meta - Basic = %i[dot] - Alternation = %i[alternation] - Extended = Basic + Alternation - - All = Extended - Type = :meta - end - - Map[Meta::Type] = Meta::All - - # alias for symmetry between Token::* and Expression::* - module Alternation - All = Meta::Alternation - Type = Meta::Type - end - end -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/token/posix_class.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/token/posix_class.rb deleted file mode 100644 index 5fecdeca..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/token/posix_class.rb +++ /dev/null @@ -1,17 +0,0 @@ -module Regexp::Syntax - module Token - module PosixClass - Standard = %i[alnum alpha blank cntrl digit graph - lower print punct space upper xdigit] - - Extensions = %i[ascii word] - - All = Standard + Extensions - Type = :posixclass - NonType = :nonposixclass - end - - Map[PosixClass::Type] = PosixClass::All - Map[PosixClass::NonType] = PosixClass::All - end -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/token/quantifier.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/token/quantifier.rb deleted file mode 100644 index 3dabe357..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/token/quantifier.rb +++ /dev/null @@ -1,35 +0,0 @@ -module Regexp::Syntax - module Token - module Quantifier - Greedy = %i[ - zero_or_one - zero_or_more - one_or_more - ] - - Reluctant = %i[ - zero_or_one_reluctant - zero_or_more_reluctant - one_or_more_reluctant - ] - - Possessive = %i[ - zero_or_one_possessive - zero_or_more_possessive - one_or_more_possessive - ] - - Interval = %i[interval] - IntervalReluctant = %i[interval_reluctant] - IntervalPossessive = %i[interval_possessive] - - IntervalAll = Interval + IntervalReluctant + IntervalPossessive - - V1_8_6 = Greedy + Reluctant + Interval + IntervalReluctant - All = Greedy + Reluctant + Possessive + IntervalAll - Type = :quantifier - end - - Map[Quantifier::Type] = Quantifier::All - end -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/token/unicode_property.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/token/unicode_property.rb deleted file mode 100644 index 57da9ab5..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/token/unicode_property.rb +++ /dev/null @@ -1,751 +0,0 @@ -module Regexp::Syntax - module Token - module UnicodeProperty - all = proc { |name| constants.grep(/#{name}/).flat_map(&method(:const_get)) } - - CharType_V1_9_0 = %i[alnum alpha ascii blank cntrl digit graph - lower print punct space upper word xdigit] - - CharType_V2_5_0 = %i[xposixpunct] - - POSIX = %i[any assigned newline] - - module Category - Letter = %i[letter uppercase_letter lowercase_letter - titlecase_letter modifier_letter other_letter] - - Mark = %i[mark nonspacing_mark spacing_mark - enclosing_mark] - - Number = %i[number decimal_number letter_number - other_number] - - Punctuation = %i[punctuation connector_punctuation dash_punctuation - open_punctuation close_punctuation initial_punctuation - final_punctuation other_punctuation] - - Symbol = %i[symbol math_symbol currency_symbol - modifier_symbol other_symbol] - - Separator = %i[separator space_separator line_separator - paragraph_separator] - - Codepoint = %i[other control format - surrogate private_use unassigned] - - All = Letter + Mark + Number + Punctuation + - Symbol + Separator + Codepoint - end - - Age_V1_9_3 = %i[age=1.1 age=2.0 age=2.1 age=3.0 age=3.1 - age=3.2 age=4.0 age=4.1 age=5.0 age=5.1 - age=5.2 age=6.0] - - Age_V2_0_0 = %i[age=6.1] - - Age_V2_2_0 = %i[age=6.2 age=6.3 age=7.0] - - Age_V2_3_0 = %i[age=8.0] - - Age_V2_4_0 = %i[age=9.0] - - Age_V2_5_0 = %i[age=10.0] - - Age_V2_6_0 = %i[age=11.0] - - Age_V2_6_2 = %i[age=12.0] - - Age_V2_6_3 = %i[age=12.1] - - Age_V3_1_0 = %i[age=13.0] - - Age_V3_2_0 = %i[age=14.0 age=15.0] - - Age = all[:Age_V] - - Derived_V1_9_0 = %i[ - ascii_hex_digit - alphabetic - cased - changes_when_casefolded - changes_when_casemapped - changes_when_lowercased - changes_when_titlecased - changes_when_uppercased - case_ignorable - bidi_control - dash - deprecated - default_ignorable_code_point - diacritic - extender - grapheme_base - grapheme_extend - grapheme_link - hex_digit - hyphen - id_continue - ideographic - id_start - ids_binary_operator - ids_trinary_operator - join_control - logical_order_exception - lowercase - math - noncharacter_code_point - other_alphabetic - other_default_ignorable_code_point - other_grapheme_extend - other_id_continue - other_id_start - other_lowercase - other_math - other_uppercase - pattern_syntax - pattern_white_space - quotation_mark - radical - sentence_terminal - soft_dotted - terminal_punctuation - unified_ideograph - uppercase - variation_selector - white_space - xid_start - xid_continue - ] - - Derived_V2_0_0 = %i[ - cased_letter - combining_mark - ] - - Derived_V2_4_0 = %i[ - prepended_concatenation_mark - ] - - Derived_V2_5_0 = %i[ - regional_indicator - ] - - Derived = all[:Derived_V] - - Script_V1_9_0 = %i[ - arabic - imperial_aramaic - armenian - avestan - balinese - bamum - bengali - bopomofo - braille - buginese - buhid - canadian_aboriginal - carian - cham - cherokee - coptic - cypriot - cyrillic - devanagari - deseret - egyptian_hieroglyphs - ethiopic - georgian - glagolitic - gothic - greek - gujarati - gurmukhi - hangul - han - hanunoo - hebrew - hiragana - old_italic - javanese - kayah_li - katakana - kharoshthi - khmer - kannada - kaithi - tai_tham - lao - latin - lepcha - limbu - linear_b - lisu - lycian - lydian - malayalam - mongolian - meetei_mayek - myanmar - nko - ogham - ol_chiki - old_turkic - oriya - osmanya - phags_pa - inscriptional_pahlavi - phoenician - inscriptional_parthian - rejang - runic - samaritan - old_south_arabian - saurashtra - shavian - sinhala - sundanese - syloti_nagri - syriac - tagbanwa - tai_le - new_tai_lue - tamil - tai_viet - telugu - tifinagh - tagalog - thaana - thai - tibetan - ugaritic - vai - old_persian - cuneiform - yi - inherited - common - unknown - ] - - Script_V1_9_3 = %i[ - brahmi - batak - mandaic - ] - - Script_V2_0_0 = %i[ - chakma - meroitic_cursive - meroitic_hieroglyphs - miao - sharada - sora_sompeng - takri - ] - - Script_V2_2_0 = %i[ - caucasian_albanian - bassa_vah - duployan - elbasan - grantha - pahawh_hmong - khojki - linear_a - mahajani - manichaean - mende_kikakui - modi - mro - old_north_arabian - nabataean - palmyrene - pau_cin_hau - old_permic - psalter_pahlavi - siddham - khudawadi - tirhuta - warang_citi - ] - - Script_V2_3_0 = %i[ - ahom - anatolian_hieroglyphs - hatran - multani - old_hungarian - signwriting - ] - - Script_V2_4_0 = %i[ - adlam - bhaiksuki - marchen - newa - osage - tangut - ] - - Script_V2_5_0 = %i[ - masaram_gondi - nushu - soyombo - zanabazar_square - ] - - Script_V2_6_0 = %i[ - dogra - gunjala_gondi - hanifi_rohingya - makasar - medefaidrin - old_sogdian - sogdian - ] - - Script_V2_6_2 = %i[ - elymaic - nandinagari - nyiakeng_puachue_hmong - wancho - ] - - Script_V3_1_0 = %i[ - chorasmian - dives_akuru - khitan_small_script - yezidi - ] - - Script_V3_2_0 = %i[ - cypro_minoan - kawi - nag_mundari - old_uyghur - tangsa - toto - vithkuqi - ] - - Script = all[:Script_V] - - UnicodeBlock_V1_9_0 = %i[ - in_alphabetic_presentation_forms - in_arabic - in_armenian - in_arrows - in_basic_latin - in_bengali - in_block_elements - in_bopomofo_extended - in_bopomofo - in_box_drawing - in_braille_patterns - in_buhid - in_cjk_compatibility_forms - in_cjk_compatibility_ideographs - in_cjk_compatibility - in_cjk_radicals_supplement - in_cjk_symbols_and_punctuation - in_cjk_unified_ideographs_extension_a - in_cjk_unified_ideographs - in_cherokee - in_combining_diacritical_marks_for_symbols - in_combining_diacritical_marks - in_combining_half_marks - in_control_pictures - in_currency_symbols - in_cyrillic_supplement - in_cyrillic - in_devanagari - in_dingbats - in_enclosed_alphanumerics - in_enclosed_cjk_letters_and_months - in_ethiopic - in_general_punctuation - in_geometric_shapes - in_georgian - in_greek_extended - in_greek_and_coptic - in_gujarati - in_gurmukhi - in_halfwidth_and_fullwidth_forms - in_hangul_compatibility_jamo - in_hangul_jamo - in_hangul_syllables - in_hanunoo - in_hebrew - in_high_private_use_surrogates - in_high_surrogates - in_hiragana - in_ipa_extensions - in_ideographic_description_characters - in_kanbun - in_kangxi_radicals - in_kannada - in_katakana_phonetic_extensions - in_katakana - in_khmer_symbols - in_khmer - in_lao - in_latin_extended_additional - in_letterlike_symbols - in_limbu - in_low_surrogates - in_malayalam - in_mathematical_operators - in_miscellaneous_symbols_and_arrows - in_miscellaneous_symbols - in_miscellaneous_technical - in_mongolian - in_myanmar - in_number_forms - in_ogham - in_optical_character_recognition - in_oriya - in_phonetic_extensions - in_private_use_area - in_runic - in_sinhala - in_small_form_variants - in_spacing_modifier_letters - in_specials - in_superscripts_and_subscripts - in_supplemental_mathematical_operators - in_syriac - in_tagalog - in_tagbanwa - in_tai_le - in_tamil - in_telugu - in_thaana - in_thai - in_tibetan - in_unified_canadian_aboriginal_syllabics - in_variation_selectors - in_yi_radicals - in_yi_syllables - in_yijing_hexagram_symbols - ] - - UnicodeBlock_V2_0_0 = %i[ - in_aegean_numbers - in_alchemical_symbols - in_ancient_greek_musical_notation - in_ancient_greek_numbers - in_ancient_symbols - in_arabic_extended_a - in_arabic_mathematical_alphabetic_symbols - in_arabic_presentation_forms_a - in_arabic_presentation_forms_b - in_arabic_supplement - in_avestan - in_balinese - in_bamum - in_bamum_supplement - in_batak - in_brahmi - in_buginese - in_byzantine_musical_symbols - in_cjk_compatibility_ideographs_supplement - in_cjk_strokes - in_cjk_unified_ideographs_extension_b - in_cjk_unified_ideographs_extension_c - in_cjk_unified_ideographs_extension_d - in_carian - in_chakma - in_cham - in_combining_diacritical_marks_supplement - in_common_indic_number_forms - in_coptic - in_counting_rod_numerals - in_cuneiform - in_cuneiform_numbers_and_punctuation - in_cypriot_syllabary - in_cyrillic_extended_a - in_cyrillic_extended_b - in_deseret - in_devanagari_extended - in_domino_tiles - in_egyptian_hieroglyphs - in_emoticons - in_enclosed_alphanumeric_supplement - in_enclosed_ideographic_supplement - in_ethiopic_extended - in_ethiopic_extended_a - in_ethiopic_supplement - in_georgian_supplement - in_glagolitic - in_gothic - in_hangul_jamo_extended_a - in_hangul_jamo_extended_b - in_imperial_aramaic - in_inscriptional_pahlavi - in_inscriptional_parthian - in_javanese - in_kaithi - in_kana_supplement - in_kayah_li - in_kharoshthi - in_latin_1_supplement - in_latin_extended_a - in_latin_extended_b - in_latin_extended_c - in_latin_extended_d - in_lepcha - in_linear_b_ideograms - in_linear_b_syllabary - in_lisu - in_lycian - in_lydian - in_mahjong_tiles - in_mandaic - in_mathematical_alphanumeric_symbols - in_meetei_mayek - in_meetei_mayek_extensions - in_meroitic_cursive - in_meroitic_hieroglyphs - in_miao - in_miscellaneous_mathematical_symbols_a - in_miscellaneous_mathematical_symbols_b - in_miscellaneous_symbols_and_pictographs - in_modifier_tone_letters - in_musical_symbols - in_myanmar_extended_a - in_nko - in_new_tai_lue - in_no_block - in_ol_chiki - in_old_italic - in_old_persian - in_old_south_arabian - in_old_turkic - in_osmanya - in_phags_pa - in_phaistos_disc - in_phoenician - in_phonetic_extensions_supplement - in_playing_cards - in_rejang - in_rumi_numeral_symbols - in_samaritan - in_saurashtra - in_sharada - in_shavian - in_sora_sompeng - in_sundanese - in_sundanese_supplement - in_supplemental_arrows_a - in_supplemental_arrows_b - in_supplemental_punctuation - in_supplementary_private_use_area_a - in_supplementary_private_use_area_b - in_syloti_nagri - in_tags - in_tai_tham - in_tai_viet - in_tai_xuan_jing_symbols - in_takri - in_tifinagh - in_transport_and_map_symbols - in_ugaritic - in_unified_canadian_aboriginal_syllabics_extended - in_vai - in_variation_selectors_supplement - in_vedic_extensions - in_vertical_forms - ] - - UnicodeBlock_V2_2_0 = %i[ - in_bassa_vah - in_caucasian_albanian - in_combining_diacritical_marks_extended - in_coptic_epact_numbers - in_duployan - in_elbasan - in_geometric_shapes_extended - in_grantha - in_khojki - in_khudawadi - in_latin_extended_e - in_linear_a - in_mahajani - in_manichaean - in_mende_kikakui - in_modi - in_mro - in_myanmar_extended_b - in_nabataean - in_old_north_arabian - in_old_permic - in_ornamental_dingbats - in_pahawh_hmong - in_palmyrene - in_pau_cin_hau - in_psalter_pahlavi - in_shorthand_format_controls - in_siddham - in_sinhala_archaic_numbers - in_supplemental_arrows_c - in_tirhuta - in_warang_citi - ] - - UnicodeBlock_V2_3_0 = %i[ - in_ahom - in_anatolian_hieroglyphs - in_cjk_unified_ideographs_extension_e - in_cherokee_supplement - in_early_dynastic_cuneiform - in_hatran - in_multani - in_old_hungarian - in_supplemental_symbols_and_pictographs - in_sutton_signwriting - ] - - UnicodeBlock_V2_4_0 = %i[ - in_adlam - in_bhaiksuki - in_cyrillic_extended_c - in_glagolitic_supplement - in_ideographic_symbols_and_punctuation - in_marchen - in_mongolian_supplement - in_newa - in_osage - in_tangut - in_tangut_components - ] - - UnicodeBlock_V2_5_0 = %i[ - in_cjk_unified_ideographs_extension_f - in_kana_extended_a - in_masaram_gondi - in_nushu - in_soyombo - in_syriac_supplement - in_zanabazar_square - ] - - UnicodeBlock_V2_6_0 = %i[ - in_chess_symbols - in_dogra - in_georgian_extended - in_gunjala_gondi - in_hanifi_rohingya - in_indic_siyaq_numbers - in_makasar - in_mayan_numerals - in_medefaidrin - in_old_sogdian - in_sogdian - ] - - UnicodeBlock_V2_6_2 = %i[ - in_egyptian_hieroglyph_format_controls - in_elymaic - in_nandinagari - in_nyiakeng_puachue_hmong - in_ottoman_siyaq_numbers - in_small_kana_extension - in_symbols_and_pictographs_extended_a - in_tamil_supplement - in_wancho - ] - - UnicodeBlock_V3_1_0 = %i[ - in_chorasmian - in_cjk_unified_ideographs_extension_g - in_dives_akuru - in_khitan_small_script - in_lisu_supplement - in_symbols_for_legacy_computing - in_tangut_supplement - in_yezidi - ] - - UnicodeBlock_V3_2_0 = %i[ - in_arabic_extended_b - in_arabic_extended_c - in_cjk_unified_ideographs_extension_h - in_cypro_minoan - in_cyrillic_extended_d - in_devanagari_extended_a - in_ethiopic_extended_b - in_kaktovik_numerals - in_kana_extended_b - in_kawi - in_latin_extended_f - in_latin_extended_g - in_nag_mundari - in_old_uyghur - in_tangsa - in_toto - in_unified_canadian_aboriginal_syllabics_extended_a - in_vithkuqi - in_znamenny_musical_notation - ] - - UnicodeBlock = all[:UnicodeBlock_V] - - Emoji_V2_5_0 = %i[ - emoji - emoji_component - emoji_modifier - emoji_modifier_base - emoji_presentation - ] - - Emoji_V2_6_0 = %i[ - extended_pictographic - ] - - Enumerated_V2_4_0 = %i[ - grapheme_cluster_break=control - grapheme_cluster_break=cr - grapheme_cluster_break=extend - grapheme_cluster_break=l - grapheme_cluster_break=lf - grapheme_cluster_break=lv - grapheme_cluster_break=lvt - grapheme_cluster_break=prepend - grapheme_cluster_break=regional_indicator - grapheme_cluster_break=spacingmark - grapheme_cluster_break=t - grapheme_cluster_break=v - grapheme_cluster_break=zwj - ] - - Enumerated = all[:Enumerated_V] - - Emoji = all[:Emoji_V] - - V1_9_0 = Category::All + POSIX + all[:V1_9_0] - V1_9_3 = all[:V1_9_3] - V2_0_0 = all[:V2_0_0] - V2_2_0 = all[:V2_2_0] - V2_3_0 = all[:V2_3_0] - V2_4_0 = all[:V2_4_0] - V2_5_0 = all[:V2_5_0] - V2_6_0 = all[:V2_6_0] - V2_6_2 = all[:V2_6_2] - V2_6_3 = all[:V2_6_3] - V3_1_0 = all[:V3_1_0] - V3_2_0 = all[:V3_2_0] - - All = all[/^V\d+_\d+_\d+$/] - - Type = :property - NonType = :nonproperty - end - - Map[UnicodeProperty::Type] = UnicodeProperty::All - Map[UnicodeProperty::NonType] = UnicodeProperty::All - - # alias for symmetry between token symbol and Token module name - Property = UnicodeProperty - end -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/token/virtual.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/token/virtual.rb deleted file mode 100644 index 33ca5e3a..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/token/virtual.rb +++ /dev/null @@ -1,11 +0,0 @@ -module Regexp::Syntax - module Token - module Virtual - Root = %i[root] - Sequence = %i[sequence] - - All = %i[root sequence] - Type = :expression - end - end -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/version_lookup.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/version_lookup.rb deleted file mode 100644 index 8015acd9..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/version_lookup.rb +++ /dev/null @@ -1,65 +0,0 @@ -module Regexp::Syntax - VERSION_FORMAT = '\Aruby/\d+\.\d+(\.\d+)?\z' - VERSION_REGEXP = /#{VERSION_FORMAT}/ - VERSION_CONST_REGEXP = /\AV\d+_\d+(?:_\d+)?\z/ - - class InvalidVersionNameError < Regexp::Syntax::SyntaxError - def initialize(name) - super "Invalid version name '#{name}'. Expected format is '#{VERSION_FORMAT}'" - end - end - - class UnknownSyntaxNameError < Regexp::Syntax::SyntaxError - def initialize(name) - super "Unknown syntax name '#{name}'." - end - end - - module_function - - # Returns the syntax specification class for the given syntax - # version name. The special names 'any' and '*' return Syntax::Any. - def for(name) - (@alias_map ||= {})[name] ||= version_class(name) - end - - def new(name) - warn 'Regexp::Syntax.new is deprecated in favor of Regexp::Syntax.for. '\ - 'It does not return distinct instances and will be removed in v3.0.0.' - self.for(name) - end - - def supported?(name) - name =~ VERSION_REGEXP && comparable(name) >= comparable('1.8.6') - end - - def version_class(version) - return Regexp::Syntax::Any if ['*', 'any'].include?(version.to_s) - - version =~ VERSION_REGEXP || raise(InvalidVersionNameError, version) - version_const_name = "V#{version.to_s.scan(/\d+/).join('_')}" - const_get(version_const_name) || raise(UnknownSyntaxNameError, version) - end - - def const_missing(const_name) - if const_name =~ VERSION_CONST_REGEXP - return fallback_version_class(const_name) - end - super - end - - def fallback_version_class(version) - sorted = (specified_versions + [version]).sort_by { |ver| comparable(ver) } - index = sorted.index(version) - index > 0 && const_get(sorted[index - 1]) - end - - def specified_versions - constants.select { |const_name| const_name =~ VERSION_CONST_REGEXP } - end - - def comparable(name) - # add .99 to treat versions without a patch value as latest patch version - Gem::Version.new((name.to_s.scan(/\d+/) << 99).join('.')) - end -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/versions.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/versions.rb deleted file mode 100644 index 3ee37e7d..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/versions.rb +++ /dev/null @@ -1,8 +0,0 @@ -# Ruby 1.x is no longer a supported runtime, -# but its regex features are still recognized. -# -# Aliases for the latest patch version are provided as 'ruby/n.n', -# e.g. 'ruby/1.9' refers to Ruby v1.9.3. -Dir[File.expand_path('../versions/*.rb', __FILE__)].sort.each { |f| require f } - -Regexp::Syntax::CURRENT = Regexp::Syntax.for("ruby/#{RUBY_VERSION}") diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/versions/1.8.6.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/versions/1.8.6.rb deleted file mode 100644 index 9a7876c5..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/versions/1.8.6.rb +++ /dev/null @@ -1,14 +0,0 @@ -class Regexp::Syntax::V1_8_6 < Regexp::Syntax::Base - implements :anchor, Anchor::All - implements :assertion, Assertion::Lookahead - implements :backref, Backreference::V1_8_6 - implements :escape, Escape::Basic + Escape::ASCII + Escape::Meta + Escape::Control - implements :free_space, FreeSpace::All - implements :group, Group::V1_8_6 - implements :literal, Literal::All - implements :meta, Meta::Extended - implements :posixclass, PosixClass::Standard - implements :quantifier, Quantifier::V1_8_6 - implements :set, CharacterSet::All - implements :type, CharacterType::Extended -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/versions/1.9.1.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/versions/1.9.1.rb deleted file mode 100644 index 58e6f861..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/versions/1.9.1.rb +++ /dev/null @@ -1,11 +0,0 @@ -class Regexp::Syntax::V1_9_1 < Regexp::Syntax::V1_8_6 - implements :assertion, Assertion::Lookbehind - implements :backref, Backreference::V1_9_1 + SubexpressionCall::All - implements :escape, Escape::Unicode + Escape::Hex + Escape::Octal - implements :posixclass, PosixClass::Extensions - implements :nonposixclass, PosixClass::All - implements :property, UnicodeProperty::V1_9_0 - implements :nonproperty, UnicodeProperty::V1_9_0 - implements :quantifier, Quantifier::Possessive + Quantifier::IntervalPossessive - implements :type, CharacterType::Hex -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/versions/1.9.3.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/versions/1.9.3.rb deleted file mode 100644 index ca306204..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/versions/1.9.3.rb +++ /dev/null @@ -1,4 +0,0 @@ -class Regexp::Syntax::V1_9_3 < Regexp::Syntax::V1_9_1 - implements :property, UnicodeProperty::V1_9_3 - implements :nonproperty, UnicodeProperty::V1_9_3 -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/versions/2.0.0.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/versions/2.0.0.rb deleted file mode 100644 index 37206458..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/versions/2.0.0.rb +++ /dev/null @@ -1,10 +0,0 @@ -class Regexp::Syntax::V2_0_0 < Regexp::Syntax::V1_9_3 - implements :keep, Keep::All - implements :conditional, Conditional::All - implements :property, UnicodeProperty::V2_0_0 - implements :nonproperty, UnicodeProperty::V2_0_0 - implements :type, CharacterType::Clustered - - excludes :property, %i[newline] - excludes :nonproperty, %i[newline] -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/versions/2.2.0.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/versions/2.2.0.rb deleted file mode 100644 index bd7d23d9..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/versions/2.2.0.rb +++ /dev/null @@ -1,4 +0,0 @@ -class Regexp::Syntax::V2_2_0 < Regexp::Syntax::V2_0_0 - implements :property, UnicodeProperty::V2_2_0 - implements :nonproperty, UnicodeProperty::V2_2_0 -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/versions/2.3.0.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/versions/2.3.0.rb deleted file mode 100644 index c1278c5c..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/versions/2.3.0.rb +++ /dev/null @@ -1,4 +0,0 @@ -class Regexp::Syntax::V2_3_0 < Regexp::Syntax::V2_2_0 - implements :property, UnicodeProperty::V2_3_0 - implements :nonproperty, UnicodeProperty::V2_3_0 -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/versions/2.4.0.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/versions/2.4.0.rb deleted file mode 100644 index b51a56cf..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/versions/2.4.0.rb +++ /dev/null @@ -1,4 +0,0 @@ -class Regexp::Syntax::V2_4_0 < Regexp::Syntax::V2_3_0 - implements :property, UnicodeProperty::V2_4_0 - implements :nonproperty, UnicodeProperty::V2_4_0 -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/versions/2.4.1.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/versions/2.4.1.rb deleted file mode 100644 index 159a1df3..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/versions/2.4.1.rb +++ /dev/null @@ -1,3 +0,0 @@ -class Regexp::Syntax::V2_4_1 < Regexp::Syntax::V2_4_0 - implements :group, Group::V2_4_1 -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/versions/2.5.0.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/versions/2.5.0.rb deleted file mode 100644 index 30225f17..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/versions/2.5.0.rb +++ /dev/null @@ -1,4 +0,0 @@ -class Regexp::Syntax::V2_5_0 < Regexp::Syntax::V2_4_1 - implements :property, UnicodeProperty::V2_5_0 - implements :nonproperty, UnicodeProperty::V2_5_0 -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/versions/2.6.0.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/versions/2.6.0.rb deleted file mode 100644 index 075b6319..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/versions/2.6.0.rb +++ /dev/null @@ -1,4 +0,0 @@ -class Regexp::Syntax::V2_6_0 < Regexp::Syntax::V2_5_0 - implements :property, UnicodeProperty::V2_6_0 - implements :nonproperty, UnicodeProperty::V2_6_0 -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/versions/2.6.2.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/versions/2.6.2.rb deleted file mode 100644 index 9845b5a1..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/versions/2.6.2.rb +++ /dev/null @@ -1,4 +0,0 @@ -class Regexp::Syntax::V2_6_2 < Regexp::Syntax::V2_6_0 - implements :property, UnicodeProperty::V2_6_2 - implements :nonproperty, UnicodeProperty::V2_6_2 -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/versions/2.6.3.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/versions/2.6.3.rb deleted file mode 100644 index 3c6525fb..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/versions/2.6.3.rb +++ /dev/null @@ -1,4 +0,0 @@ -class Regexp::Syntax::V2_6_3 < Regexp::Syntax::V2_6_2 - implements :property, UnicodeProperty::V2_6_3 - implements :nonproperty, UnicodeProperty::V2_6_3 -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/versions/3.1.0.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/versions/3.1.0.rb deleted file mode 100644 index a2a55cb1..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/versions/3.1.0.rb +++ /dev/null @@ -1,4 +0,0 @@ -class Regexp::Syntax::V3_1_0 < Regexp::Syntax::V2_6_3 - implements :property, UnicodeProperty::V3_1_0 - implements :nonproperty, UnicodeProperty::V3_1_0 -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/versions/3.2.0.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/versions/3.2.0.rb deleted file mode 100644 index 1a0659de..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/syntax/versions/3.2.0.rb +++ /dev/null @@ -1,4 +0,0 @@ -class Regexp::Syntax::V3_2_0 < Regexp::Syntax::V3_1_0 - implements :property, UnicodeProperty::V3_2_0 - implements :nonproperty, UnicodeProperty::V3_2_0 -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/token.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/token.rb deleted file mode 100644 index 6c0e9152..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/token.rb +++ /dev/null @@ -1,24 +0,0 @@ -class Regexp - TOKEN_KEYS = %i[ - type - token - text - ts - te - level - set_level - conditional_level - ].freeze - - Token = Struct.new(*TOKEN_KEYS) do - attr_accessor :previous, :next - - def offset - [ts, te] - end - - def length - te - ts - end - end -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/version.rb b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/version.rb deleted file mode 100644 index 4b58ebdf..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/lib/regexp_parser/version.rb +++ /dev/null @@ -1,5 +0,0 @@ -class Regexp - class Parser - VERSION = '2.9.0' - end -end diff --git a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/regexp_parser.gemspec b/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/regexp_parser.gemspec deleted file mode 100644 index daba4264..00000000 --- a/bundle/ruby/3.2.0/gems/regexp_parser-2.9.0/regexp_parser.gemspec +++ /dev/null @@ -1,32 +0,0 @@ -$:.unshift File.join(File.dirname(__FILE__), 'lib') - -require 'regexp_parser/version' - -Gem::Specification.new do |spec| - spec.name = 'regexp_parser' - spec.version = ::Regexp::Parser::VERSION - - spec.summary = "Scanner, lexer, parser for ruby's regular expressions" - spec.description = 'A library for tokenizing, lexing, and parsing Ruby regular expressions.' - spec.homepage = 'https://github.com/ammar/regexp_parser' - - spec.metadata['bug_tracker_uri'] = "#{spec.homepage}/issues" - spec.metadata['changelog_uri'] = "#{spec.homepage}/blob/master/CHANGELOG.md" - spec.metadata['homepage_uri'] = spec.homepage - spec.metadata['source_code_uri'] = spec.homepage - spec.metadata['wiki_uri'] = "#{spec.homepage}/wiki" - - spec.authors = ['Ammar Ali', 'Janosch Müller'] - spec.email = ['ammarabuali@gmail.com', 'janosch84@gmail.com'] - - spec.license = 'MIT' - - spec.require_paths = ['lib'] - - spec.files = Dir.glob('lib/**/*.{csv,rb,rl}') + - %w[Gemfile Rakefile LICENSE regexp_parser.gemspec] - - spec.platform = Gem::Platform::RUBY - - spec.required_ruby_version = '>= 2.0.0' -end diff --git a/bundle/ruby/3.2.0/gems/rexml-3.2.6/LICENSE.txt b/bundle/ruby/3.2.0/gems/rexml-3.2.6/LICENSE.txt deleted file mode 100644 index a009caef..00000000 --- a/bundle/ruby/3.2.0/gems/rexml-3.2.6/LICENSE.txt +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (C) 1993-2013 Yukihiro Matsumoto. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: -1. Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright -notice, this list of conditions and the following disclaimer in the -documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -SUCH DAMAGE. diff --git a/bundle/ruby/3.2.0/gems/rexml-3.2.6/NEWS.md b/bundle/ruby/3.2.0/gems/rexml-3.2.6/NEWS.md deleted file mode 100644 index 271c303b..00000000 --- a/bundle/ruby/3.2.0/gems/rexml-3.2.6/NEWS.md +++ /dev/null @@ -1,276 +0,0 @@ -# News - -## 3.2.6 - 2023-07-27 {#version-3-2-6} - -### Improvements - - * Required Ruby 2.5 or later explicitly. - [GH-69][gh-69] - [Patch by Ivo Anjo] - - * Added documentation for maintenance cycle. - [GH-71][gh-71] - [Patch by Ivo Anjo] - - * Added tutorial. - [GH-77][gh-77] - [GH-78][gh-78] - [Patch by Burdette Lamar] - - * Improved performance and memory usage. - [GH-94][gh-94] - [Patch by fatkodima] - - * `REXML::Parsers::XPathParser#abbreviate`: Added support for - function arguments. - [GH-95][gh-95] - [Reported by pulver] - - * `REXML::Parsers::XPathParser#abbreviate`: Added support for string - literal that contains double-quote. - [GH-96][gh-96] - [Patch by pulver] - - * `REXML::Parsers::XPathParser#abbreviate`: Added missing `/` to - `:descendant_or_self/:self/:parent`. - [GH-97][gh-97] - [Reported by pulver] - - * `REXML::Parsers::XPathParser#abbreviate`: Added support for more patterns. - [GH-97][gh-97] - [Reported by pulver] - -### Fixes - - * Fixed a typo in NEWS. - [GH-72][gh-72] - [Patch by Spencer Goodman] - - * Fixed a typo in NEWS. - [GH-75][gh-75] - [Patch by Andrew Bromwich] - - * Fixed documents. - [GH-87][gh-87] - [Patch by Alexander Ilyin] - - * Fixed a bug that `Attriute` convert `'` and `'` even when - `attribute_quote: :quote` is used. - [GH-92][gh-92] - [Reported by Edouard Brière] - - * Fixed links in tutorial. - [GH-99][gh-99] - [Patch by gemmaro] - - -### Thanks - - * Ivo Anjo - - * Spencer Goodman - - * Andrew Bromwich - - * Burdette Lamar - - * Alexander Ilyin - - * Edouard Brière - - * fatkodima - - * pulver - - * gemmaro - -[gh-69]:https://github.com/ruby/rexml/issues/69 -[gh-71]:https://github.com/ruby/rexml/issues/71 -[gh-72]:https://github.com/ruby/rexml/issues/72 -[gh-75]:https://github.com/ruby/rexml/issues/75 -[gh-77]:https://github.com/ruby/rexml/issues/77 -[gh-87]:https://github.com/ruby/rexml/issues/87 -[gh-92]:https://github.com/ruby/rexml/issues/92 -[gh-94]:https://github.com/ruby/rexml/issues/94 -[gh-95]:https://github.com/ruby/rexml/issues/95 -[gh-96]:https://github.com/ruby/rexml/issues/96 -[gh-97]:https://github.com/ruby/rexml/issues/97 -[gh-98]:https://github.com/ruby/rexml/issues/98 -[gh-99]:https://github.com/ruby/rexml/issues/99 - -## 3.2.5 - 2021-04-05 {#version-3-2-5} - -### Improvements - - * Add more validations to XPath parser. - - * `require "rexml/document"` by default. - [GitHub#36][Patch by Koichi ITO] - - * Don't add `#dclone` method to core classes globally. - [GitHub#37][Patch by Akira Matsuda] - - * Add more documentations. - [Patch by Burdette Lamar] - - * Added `REXML::Elements#parent`. - [GitHub#52][Patch by Burdette Lamar] - -### Fixes - - * Fixed a bug that `REXML::DocType#clone` doesn't copy external ID - information. - - * Fixed round-trip vulnerability bugs. - See also: https://www.ruby-lang.org/en/news/2021/04/05/xml-round-trip-vulnerability-in-rexml-cve-2021-28965/ - [HackerOne#1104077][CVE-2021-28965][Reported by Juho Nurminen] - -### Thanks - - * Koichi ITO - - * Akira Matsuda - - * Burdette Lamar - - * Juho Nurminen - -## 3.2.4 - 2020-01-31 {#version-3-2-4} - -### Improvements - - * Don't use `taint` with Ruby 2.7 or later. - [GitHub#21][Patch by Jeremy Evans] - -### Fixes - - * Fixed a `elsif` typo. - [GitHub#22][Patch by Nobuyoshi Nakada] - -### Thanks - - * Jeremy Evans - - * Nobuyoshi Nakada - -## 3.2.3 - 2019-10-12 {#version-3-2-3} - -### Fixes - - * Fixed a bug that `REXML::XMLDecl#close` doesn't copy `@writethis`. - [GitHub#20][Patch by hirura] - -### Thanks - - * hirura - -## 3.2.2 - 2019-06-03 {#version-3-2-2} - -### Fixes - - * xpath: Fixed a bug for equality and relational expressions. - [GitHub#17][Reported by Mirko Budszuhn] - - * xpath: Fixed `boolean()` implementation. - - * xpath: Fixed `local_name()` with nonexistent node. - - * xpath: Fixed `number()` implementation with node set. - [GitHub#18][Reported by Mirko Budszuhn] - -### Thanks - - * Mirko Budszuhn - -## 3.2.1 - 2019-05-04 {#version-3-2-1} - -### Improvements - - * Improved error message. - [GitHub#12][Patch by FUJI Goro] - - * Improved error message. - [GitHub#16][Patch by ujihisa] - - * Improved documentation markup. - [GitHub#14][Patch by Alyssa Ross] - -### Fixes - - * Fixed a bug that `nil` variable value raises an unexpected exception. - [GitHub#13][Patch by Alyssa Ross] - -### Thanks - - * FUJI Goro - - * Alyssa Ross - - * ujihisa - -## 3.2.0 - 2019-01-01 {#version-3-2-0} - -### Fixes - - * Fixed a bug that no namespace attribute isn't matched with prefix. - - [ruby-list:50731][Reported by Yasuhiro KIMURA] - - * Fixed a bug that the default namespace is applied to attribute names. - - NOTE: It's a backward incompatible change. If your program has any - problem with this change, please report it. We may revert this fix. - - * `REXML::Attribute#prefix` returns `""` for no namespace attribute. - - * `REXML::Attribute#namespace` returns `""` for no namespace attribute. - -### Thanks - - * Yasuhiro KIMURA - -## 3.1.9 - 2018-12-20 {#version-3-1-9} - -### Improvements - - * Improved backward compatibility. - - Restored `REXML::Parsers::BaseParser::UNQME_STR` because it's used - by kramdown. - -## 3.1.8 - 2018-12-20 {#version-3-1-8} - -### Improvements - - * Added support for customizing quote character in prologue. - [GitHub#8][Bug #9367][Reported by Takashi Oguma] - - * You can use `"` as quote character by specifying `:quote` to - `REXML::Document#context[:prologue_quote]`. - - * You can use `'` as quote character by specifying `:apostrophe` - to `REXML::Document#context[:prologue_quote]`. - - * Added processing instruction target check. The target must not nil. - [GitHub#7][Reported by Ariel Zelivansky] - - * Added name check for element and attribute. - [GitHub#7][Reported by Ariel Zelivansky] - - * Stopped to use `Exception`. - [GitHub#9][Patch by Jean Boussier] - -### Fixes - - * Fixed a bug that `REXML::Text#clone` escapes value twice. - [ruby-dev:50626][Bug #15058][Reported by Ryosuke Nanba] - -### Thanks - - * Takashi Oguma - - * Ariel Zelivansky - - * Jean Boussier - - * Ryosuke Nanba diff --git a/bundle/ruby/3.2.0/gems/rexml-3.2.6/README.md b/bundle/ruby/3.2.0/gems/rexml-3.2.6/README.md deleted file mode 100644 index e8ab5082..00000000 --- a/bundle/ruby/3.2.0/gems/rexml-3.2.6/README.md +++ /dev/null @@ -1,57 +0,0 @@ -# REXML - -REXML was inspired by the Electric XML library for Java, which features an easy-to-use API, small size, and speed. Hopefully, REXML, designed with the same philosophy, has these same features. I've tried to keep the API as intuitive as possible, and have followed the Ruby methodology for method naming and code flow, rather than mirroring the Java API. - -REXML supports both tree and stream document parsing. Stream parsing is faster (about 1.5 times as fast). However, with stream parsing, you don't get access to features such as XPath. - -## API - -See the [API documentation](https://ruby.github.io/rexml/). - -## Usage - -We'll start with parsing an XML document - -```ruby -require "rexml/document" -file = File.new( "mydoc.xml" ) -doc = REXML::Document.new file -``` - -Line 3 creates a new document and parses the supplied file. You can also do the following - -```ruby -require "rexml/document" -include REXML # so that we don't have to prefix everything with REXML::... -string = < - Text, text, text - -EOF -doc = Document.new string -``` - -So parsing a string is just as easy as parsing a file. - -## Support - -REXML support follows the same maintenance cycle as Ruby releases, as shown on . - -If you are running on an end-of-life Ruby, do not expect modern REXML releases to be compatible with it; in fact, it's recommended that you DO NOT use this gem, and instead use the REXML version that came bundled with your end-of-life Ruby version. - -The `required_ruby_version` on the gemspec is kept updated on a [best-effort basis](https://github.com/ruby/rexml/pull/70) by the community. -Up to version 3.2.5, this information was not set. That version [is known broken with at least Ruby < 2.3](https://github.com/ruby/rexml/issues/69). - -## Development - -After checking out the repo, run `rake test` to run the tests. - -To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org). - -## Contributing - -Bug reports and pull requests are welcome on GitHub at https://github.com/ruby/rexml. - -## License - -The gem is available as open source under the terms of the [BSD-2-Clause](LICENSE.txt). diff --git a/bundle/ruby/3.2.0/gems/rexml-3.2.6/doc/rexml/context.rdoc b/bundle/ruby/3.2.0/gems/rexml-3.2.6/doc/rexml/context.rdoc deleted file mode 100644 index 7ef01f7b..00000000 --- a/bundle/ruby/3.2.0/gems/rexml-3.2.6/doc/rexml/context.rdoc +++ /dev/null @@ -1,143 +0,0 @@ -== Element Context - -Notes: -- All code on this page presupposes that the following has been executed: - - require 'rexml/document' - -- For convenience, examples on this page use +REXML::Document.new+, not +REXML::Element.new+. - This is completely valid, because REXML::Document is a subclass of REXML::Element. - -The context for an element is a hash of processing directives -that influence the way \XML is read, stored, and written. -The context entries are: - -- +:respect_whitespace+: controls treatment of whitespace. -- +:compress_whitespace+: determines whether whitespace is compressed. -- +:ignore_whitespace_nodes+: determines whether whitespace-only nodes are to be ignored. -- +:raw+: controls treatment of special characters and entities. - -The default context for a new element is {}. -You can set the context at element-creation time: - - d = REXML::Document.new('', {compress_whitespace: :all, raw: :all}) - d.context # => {:compress_whitespace=>:all, :raw=>:all} - -You can reset the entire context by assigning a new hash: - - d.context = {ignore_whitespace_nodes: :all} - d.context # => {:ignore_whitespace_nodes=>:all} - -Or you can create or modify an individual entry: - - d.context[:raw] = :all - d.context # => {:ignore_whitespace_nodes=>:all, :raw=>:all} - -=== +:respect_whitespace+ - -Affects: +REXML::Element.new+, +REXML::Element.text=+. - -By default, all parsed whitespace is respected (that is, stored whitespace not compressed): - - xml_string = 'a b c d e f' - d = REXML::Document.new(xml_string) - d.to_s # => "a b c d e f" - -Use +:respect_whitespace+ with an array of element names -to specify the elements that _are_ to have their whitespace respected; -other elements' whitespace, and whitespace between elements, will be compressed. - -In this example: +foo+ and +baz+ will have their whitespace respected; -+bar+ and the space between elements will have their whitespace compressed: - - d = REXML::Document.new(xml_string, {respect_whitespace: ['foo', 'baz']}) - d.to_s # => "a b c d e f" - bar = d.root[2] # => ... - bar.text = 'X Y' - d.to_s # => "a b X Y e f" - -=== +:compress_whitespace+ - -Affects: +REXML::Element.new+, +REXML::Element.text=+. - -Use compress_whitespace: :all -to compress whitespace both within and between elements: - - xml_string = 'a b c d e f' - d = REXML::Document.new(xml_string, {compress_whitespace: :all}) - d.to_s # => "a b c d e f" - -Use +:compress_whitespace+ with an array of element names -to compress whitespace in those elements, -but not in other elements nor between elements. - -In this example, +foo+ and +baz+ will have their whitespace compressed; -+bar+ and the space between elements will not: - - d = REXML::Document.new(xml_string, {compress_whitespace: ['foo', 'baz']}) - d.to_s # => "a b c d e f" - foo = d.root[0] # => ... - foo.text= 'X Y' - d.to_s # => "X Y c d e f" - -=== +:ignore_whitespace_nodes+ - -Affects: +REXML::Element.new+. - -Use ignore_whitespace_nodes: :all to omit all whitespace-only elements. - -In this example, +bar+ has a text node, while nodes +foo+ and +baz+ do not: - - xml_string = ' BAR ' - d = REXML::Document.new(xml_string, {ignore_whitespace_nodes: :all}) - d.to_s # => " FOO BAZ " - root = d.root # => ... - foo = root[0] # => - bar = root[1] # => ... - baz = root[2] # => - foo.first.class # => NilClass - bar.first.class # => REXML::Text - baz.first.class # => NilClass - -Use +:ignore_whitespace_nodes+ with an array of element names -to specify the elements that are to have whitespace nodes ignored. - -In this example, +bar+ and +baz+ have text nodes, while node +foo+ does not. - - xml_string = ' BAR ' - d = REXML::Document.new(xml_string, {ignore_whitespace_nodes: ['foo']}) - d.to_s # => " BAR " - root = d.root # => ... - foo = root[0] # => - bar = root[1] # => ... - baz = root[2] # => ... - foo.first.class # => NilClass - bar.first.class # => REXML::Text - baz.first.class # => REXML::Text - -=== +:raw+ - -Affects: +Element.text=+, +Element.add_text+, +Text.to_s+. - -Parsing of +a+ elements is not affected by +raw+: - - xml_string = '0 < 11 > 0' - d = REXML::Document.new(xml_string, {:raw => ['a']}) - d.root.to_s # => "0 < 11 > 0" - a, b = *d.root.elements - a.to_s # => "0 < 1" - b.to_s # => "1 > 0" - -But Element#text= is affected: - - a.text = '0 < 1' - b.text = '1 > 0' - a.to_s # => "0 < 1" - b.to_s # => "1 &gt; 0" - -As is Element.add_text: - - a.add_text(' so 1 > 0') - b.add_text(' so 0 < 1') - a.to_s # => "0 < 1 so 1 > 0" - b.to_s # => "1 &gt; 0 so 0 &lt; 1" diff --git a/bundle/ruby/3.2.0/gems/rexml-3.2.6/doc/rexml/tasks/rdoc/child.rdoc b/bundle/ruby/3.2.0/gems/rexml-3.2.6/doc/rexml/tasks/rdoc/child.rdoc deleted file mode 100644 index 89536381..00000000 --- a/bundle/ruby/3.2.0/gems/rexml-3.2.6/doc/rexml/tasks/rdoc/child.rdoc +++ /dev/null @@ -1,87 +0,0 @@ -== Class Child - -Class Child includes module Node; -see {Tasks for Node}[node_rdoc.html]. - -:include: ../tocs/child_toc.rdoc - -=== Relationships - -==== Task: Set the Parent - -Use method {Child#parent=}[../../../../REXML/Parent.html#method-i-parent-3D] -to set the parent: - - e0 = REXML::Element.new('foo') - e1 = REXML::Element.new('bar') - e1.parent # => nil - e1.parent = e0 - e1.parent # => - -==== Task: Insert Previous Sibling - -Use method {Child#previous_sibling=}[../../../../REXML/Parent.html#method-i-previous_sibling-3D] -to insert a previous sibling: - - xml_string = '' - d = REXML::Document.new(xml_string) - d.root.to_a # => [, ] - c = d.root[1] # => - b = REXML::Element.new('b') - c.previous_sibling = b - d.root.to_a # => [, , ] - -==== Task: Insert Next Sibling - -Use method {Child#next_sibling=}[../../../../REXML/Parent.html#method-i-next-sibling-3D] -to insert a previous sibling: - - xml_string = '' - d = REXML::Document.new(xml_string) - d.root.to_a # => [, ] - a = d.root[0] # => - b = REXML::Element.new('b') - a.next_sibling = b - d.root.to_a # => [, , ] - -=== Removal or Replacement - -==== Task: Remove Child from Parent - -Use method {Child#remove}[../../../../REXML/Parent.html#method-i-remove] -to remove a child from its parent; returns the removed child: - - xml_string = '' - d = REXML::Document.new(xml_string) - d.root.to_a # => [, , ] - b = d.root[1] # => - b.remove # => - d.root.to_a # => [, ] - -==== Task: Replace Child - -Use method {Child#replace_with}[../../../../REXML/Parent.html#method-i-replace] -to replace a child; -returns the replaced child: - - xml_string = '' - d = REXML::Document.new(xml_string) - d.root.to_a # => [, , ] - b = d.root[1] # => - d = REXML::Element.new('d') - b.replace_with(d) # => - d.root.to_a # => [, , ] - -=== Document - -==== Task: Get the Document - -Use method {Child#document}[../../../../REXML/Parent.html#method-i-document] -to get the document for the child: - - xml_string = '' - d = REXML::Document.new(xml_string) - d.root.to_a # => [, , ] - b = d.root[1] # => - b.document == d # => true - REXML::Child.new.document # => nil diff --git a/bundle/ruby/3.2.0/gems/rexml-3.2.6/doc/rexml/tasks/rdoc/document.rdoc b/bundle/ruby/3.2.0/gems/rexml-3.2.6/doc/rexml/tasks/rdoc/document.rdoc deleted file mode 100644 index 96d03351..00000000 --- a/bundle/ruby/3.2.0/gems/rexml-3.2.6/doc/rexml/tasks/rdoc/document.rdoc +++ /dev/null @@ -1,276 +0,0 @@ -== Class Document - -Class Document has methods from its superclasses and included modules; -see: - -- {Tasks for Element}[element_rdoc.html]. -- {Tasks for Parent}[parent_rdoc.html]. -- {Tasks for Child}[child_rdoc.html]. -- {Tasks for Node}[node_rdoc.html]. -- {Module Enumerable}[https://docs.ruby-lang.org/en/master/Enumerable.html]. - -:include: ../tocs/document_toc.rdoc - -=== New Document - -==== Task: Create an Empty Document - -Use method {Document::new}[../../../../REXML/Document.html#method-c-new] -to create an empty document. - - d = REXML::Document.new - -==== Task: Parse a \String into a New Document - -Use method {Document::new}[../../../../REXML/Document.html#method-c-new] -to parse an XML string into a new document: - - xml_string = 'textmore' - d = REXML::Document.new(xml_string) - d.root # => ... - -==== Task: Parse an \IO Stream into a New Document - -Use method {Document::new}[../../../../REXML/Document.html#method-c-new] -to parse an XML \IO stream into a new document: - - xml_string = 'textmore' - File.write('t.xml', xml_string) - d = File.open('t.xml', 'r') do |file| - REXML::Document.new(file) - end - d.root # => ... - -==== Task: Create a Document from an Existing Document - -Use method {Document::new}[../../../../REXML/Document.html#method-c-new] -to create a document from an existing document. -The context and attributes are copied to the new document, -but not the children: - - xml_string = 'textmore' - d = REXML::Document.new(xml_string) - d.children # => [ ... ] - d.context = {raw: :all, compress_whitespace: :all} - d.add_attributes({'bar' => 0, 'baz' => 1}) - d1 = REXML::Document.new(d) - d1.context # => {:raw=>:all, :compress_whitespace=>:all} - d1.attributes # => {"bar"=>bar='0', "baz"=>baz='1'} - d1.children # => [] - -==== Task: Clone a Document - -Use method {Document#clone}[../../../../REXML/Document.html#method-i-clone] -to clone a document. -The context and attributes are copied to the new document, -but not the children: - - xml_string = 'textmore' - d = REXML::Document.new(xml_string) - d.children # => [ ... ] - d.context = {raw: :all, compress_whitespace: :all} - d.add_attributes({'bar' => 0, 'baz' => 1}) - d1 = d.clone # => < bar='0' baz='1'/> - d1.context # => {:raw=>:all, :compress_whitespace=>:all} - d1.attributes # => {"bar"=>bar='0', "baz"=>baz='1'} - d1.children # => [] - -=== Document Type - -==== Task: Get the Document Type - -Use method {Document#doctype}[../../../../REXML/Document.html#method-i-doctype] -to get the document type: - - d = REXML::Document.new('') - d.doctype.class # => REXML::DocType - d = REXML::Document.new('') - d.doctype.class # => nil - -==== Task: Set the Document Type - -Use method {document#add}[../../../../REXML/Document.html#method-i-add] -to add or replace the document type: - - d = REXML::Document.new('') - d.doctype.class # => nil - d.add(REXML::DocType.new('foo')) - d.doctype.class # => REXML::DocType - -=== XML Declaration - -==== Task: Get the XML Declaration - -Use method {document#xml_decl}[../../../../REXML/Document.html#method-i-xml_decl] -to get the XML declaration: - - d = REXML::Document.new('') - d.xml_decl.class # => REXML::XMLDecl - d.xml_decl # => - d = REXML::Document.new('') - d.xml_decl.class # => REXML::XMLDecl - d.xml_decl # => - -==== Task: Set the XML Declaration - -Use method {document#add}[../../../../REXML/Document.html#method-i-add] -to replace the XML declaration: - - d = REXML::Document.new('') - d.add(REXML::XMLDecl.new) - -=== Children - -==== Task: Add an Element Child - -Use method -{document#add_element}[../../../../REXML/Document.html#method-i-add_element] -to add an element to the document: - - d = REXML::Document.new('') - d.add_element(REXML::Element.new('root')) - d.children # => [] - -==== Task: Add a Non-Element Child - -Use method -{document#add}[../../../../REXML/Document.html#method-i-add] -to add a non-element to the document: - - xml_string = 'textmore' - d = REXML::Document.new(xml_string) - d.add(REXML::Text.new('foo')) - d.children # => [ ... , "foo"] - -=== Writing - -==== Task: Write to $stdout - -Use method -{document#write}[../../../../REXML/Document.html#method-i-write] -to write the document to $stdout: - - xml_string = 'textmore' - d = REXML::Document.new(xml_string) - d.write - -Output: - - textmore - -==== Task: Write to IO Stream - -Use method -{document#write}[../../../../REXML/Document.html#method-i-write] -to write the document to $stdout: - - xml_string = 'textmore' - d = REXML::Document.new(xml_string) - File.open('t.xml', 'w') do |file| - d.write(file) - end - p File.read('t.xml') - -Output: - - "textmore" - -==== Task: Write with No Indentation - -Use method -{document#write}[../../../../REXML/Document.html#method-i-write] -to write the document with no indentation: - - xml_string = '' - d = REXML::Document.new(xml_string) - d.write({indent: 0}) - -Output: - - - - - - - - - -==== Task: Write with Specified Indentation - -Use method -{document#write}[../../../../REXML/Document.html#method-i-write] -to write the document with a specified indentation: - - xml_string = '' - d = REXML::Document.new(xml_string) - d.write({indent: 2}) - -Output: - - - - - - - - - -=== Querying - -==== Task: Get the Document - -Use method -{document#document}[../../../../REXML/Document.html#method-i-document] -to get the document (+self+); overrides Element#document: - - xml_string = '' - d = REXML::Document.new(xml_string) - d.document == d # => true - -==== Task: Get the Encoding - -Use method -{document#document}[../../../../REXML/Document.html#method-i-document] -to get the document (+self+); overrides Element#document: - - xml_string = '' - d = REXML::Document.new(xml_string) - d.encoding # => "UTF-8" - -==== Task: Get the Node Type - -Use method -{document#node_type}[../../../../REXML/Document.html#method-i-node_type] -to get the node type (+:document+); overrides Element#node_type: - - xml_string = '' - d = REXML::Document.new(xml_string) - d.node_type # => :document - -==== Task: Get the Root Element - -Use method -{document#root}[../../../../REXML/Document.html#method-i-root] -to get the root element: - - xml_string = '' - d = REXML::Document.new(xml_string) - d.root # => ... - -==== Task: Determine Whether Stand-Alone - -Use method -{document#stand_alone?}[../../../../REXML/Document.html#method-i-stand_alone-3F] -to get the stand-alone value: - - d = REXML::Document.new('') - d.stand_alone? # => "yes" - -==== Task: Get the Version - -Use method -{document#version}[../../../../REXML/Document.html#method-i-version] -to get the version: - - d = REXML::Document.new('') - d.version # => "2.0" diff --git a/bundle/ruby/3.2.0/gems/rexml-3.2.6/doc/rexml/tasks/rdoc/element.rdoc b/bundle/ruby/3.2.0/gems/rexml-3.2.6/doc/rexml/tasks/rdoc/element.rdoc deleted file mode 100644 index 4b3609b0..00000000 --- a/bundle/ruby/3.2.0/gems/rexml-3.2.6/doc/rexml/tasks/rdoc/element.rdoc +++ /dev/null @@ -1,602 +0,0 @@ -== Class Element - -Class Element has methods from its superclasses and included modules; -see: - -- {Tasks for Parent}[parent_rdoc.html]. -- {Tasks for Child}[child_rdoc.html]. -- {Tasks for Node}[node_rdoc.html]. -- {Module Enumerable}[https://docs.ruby-lang.org/en/master/Enumerable.html]. - -:include: ../tocs/element_toc.rdoc - -=== New Element - -==== Task: Create a Default Element - -Use method -{Element::new}[../../../../REXML/Element.html#method-c-new] -with no arguments to create a default element: - - e = REXML::Element.new - e.name # => "UNDEFINED" - e.parent # => nil - e.context # => nil - -==== Task: Create a Named Element - -Use method -{Element::new}[../../../../REXML/Element.html#method-c-new] -with a string name argument -to create a named element: - - e = REXML::Element.new('foo') - e.name # => "foo" - e.parent # => nil - e.context # => nil - -==== Task: Create an Element with Name and Parent - -Use method -{Element::new}[../../../../REXML/Element.html#method-c-new] -with name and parent arguments -to create an element with name and parent: - - p = REXML::Parent.new - e = REXML::Element.new('foo', p) - e.name # => "foo" - e.parent # => #]> - e.context # => nil - -==== Task: Create an Element with Name, Parent, and Context - -Use method -{Element::new}[../../../../REXML/Element.html#method-c-new] -with name, parent, and context arguments -to create an element with name, parent, and context: - - p = REXML::Parent.new - e = REXML::Element.new('foo', p, {compress_whitespace: :all}) - e.name # => "foo" - e.parent # => #]> - e.context # => {:compress_whitespace=>:all} - -==== Task: Create a Shallow Clone - -Use method -{Element#clone}[../../../../REXML/Element.html#method-i-clone] -to create a shallow clone of an element, -copying only the name, attributes, and context: - - e0 = REXML::Element.new('foo', nil, {compress_whitespace: :all}) - e0.add_attribute(REXML::Attribute.new('bar', 'baz')) - e0.context = {compress_whitespace: :all} - e1 = e0.clone # => - e1.name # => "foo" - e1.context # => {:compress_whitespace=>:all} - -=== Attributes - -==== Task: Create and Add an Attribute - -Use method -{Element#add_attribute}[../../../../REXML/Element.html#method-i-add_attribute] -to create and add an attribute: - - e = REXML::Element.new - e.add_attribute('attr', 'value') # => "value" - e['attr'] # => "value" - e.add_attribute('attr', 'VALUE') # => "VALUE" - e['attr'] # => "VALUE" - -==== Task: Add an Existing Attribute - -Use method -{Element#add_attribute}[../../../../REXML/Element.html#method-i-add_attribute] -to add an existing attribute: - - e = REXML::Element.new - a = REXML::Attribute.new('attr', 'value') - e.add_attribute(a) - e['attr'] # => "value" - a = REXML::Attribute.new('attr', 'VALUE') - e.add_attribute(a) - e['attr'] # => "VALUE" - -==== Task: Add Multiple Attributes from a Hash - -Use method -{Element#add_attributes}[../../../../REXML/Element.html#method-i-add_attributes] -to add multiple attributes from a hash: - - e = REXML::Element.new - h = {'foo' => 0, 'bar' => 1} - e.add_attributes(h) - e['foo'] # => "0" - e['bar'] # => "1" - -==== Task: Add Multiple Attributes from an Array - -Use method -{Element#add_attributes}[../../../../REXML/Element.html#method-i-add_attributes] -to add multiple attributes from an array: - - e = REXML::Element.new - a = [['foo', 0], ['bar', 1]] - e.add_attributes(a) - e['foo'] # => "0" - e['bar'] # => "1" - -==== Task: Retrieve the Value for an Attribute Name - -Use method -{Element#[]}[../../../../REXML/Element.html#method-i-5B-5D] -to retrieve the value for an attribute name: - - e = REXML::Element.new - e.add_attribute('attr', 'value') # => "value" - e['attr'] # => "value" - -==== Task: Retrieve the Attribute Value for a Name and Namespace - -Use method -{Element#attribute}[../../../../REXML/Element.html#method-i-attribute] -to retrieve the value for an attribute name: - - xml_string = "" - d = REXML::Document.new(xml_string) - e = d.root - e.attribute("x") # => x='x' - e.attribute("x", "a") # => a:x='a:x' - -==== Task: Delete an Attribute - -Use method -{Element#delete_attribute}[../../../../REXML/Element.html#method-i-delete_attribute] -to remove an attribute: - - e = REXML::Element.new('foo') - e.add_attribute('bar', 'baz') - e.delete_attribute('bar') - e.delete_attribute('bar') - e['bar'] # => nil - -==== Task: Determine Whether the Element Has Attributes - -Use method -{Element#has_attributes?}[../../../../REXML/Element.html#method-i-has_attributes-3F] -to determine whether the element has attributes: - - e = REXML::Element.new('foo') - e.has_attributes? # => false - e.add_attribute('bar', 'baz') - e.has_attributes? # => true - -=== Children - -Element Children - -==== Task: Create and Add an Element - -Use method -{Element#add_element}[../../../../REXML/Element.html#method-i-add_element] -to create a new element and add it to this element: - - e0 = REXML::Element.new('foo') - e0.add_element('bar') - e0.children # => [] - -==== Task: Add an Existing Element - -Use method -{Element#add_element}[../../../../REXML/Element.html#method-i-add_element] -to add an element to this element: - - e0 = REXML::Element.new('foo') - e1 = REXML::Element.new('bar') - e0.add_element(e1) - e0.children # => [] - -==== Task: Create and Add an Element with Attributes - -Use method -{Element#add_element}[../../../../REXML/Element.html#method-i-add_element] -to create a new element with attributes, and add it to this element: - - e0 = REXML::Element.new('foo') - e0.add_element('bar', {'name' => 'value'}) - e0.children # => [] - -==== Task: Add an Existing Element with Added Attributes - -Use method -{Element#add_element}[../../../../REXML/Element.html#method-i-add_element] -to add an element to this element: - - e0 = REXML::Element.new('foo') - e1 = REXML::Element.new('bar') - e0.add_element(e1, {'name' => 'value'}) - e0.children # => [] - -==== Task: Delete a Specified Element - -Use method -{Element#delete_element}[../../../../REXML/Element.html#method-i-delete_element] -to remove a specified element from this element: - - e0 = REXML::Element.new('foo') - e1 = REXML::Element.new('bar') - e0.add_element(e1) - e0.children # => [] - e0.delete_element(e1) - e0.children # => [] - -==== Task: Delete an Element by Index - -Use method -{Element#delete_element}[../../../../REXML/Element.html#method-i-delete_element] -to remove an element from this element by index: - - e0 = REXML::Element.new('foo') - e1 = REXML::Element.new('bar') - e0.add_element(e1) - e0.children # => [] - e0.delete_element(1) - e0.children # => [] - -==== Task: Delete an Element by XPath - -Use method -{Element#delete_element}[../../../../REXML/Element.html#method-i-delete_element] -to remove an element from this element by XPath: - - e0 = REXML::Element.new('foo') - e1 = REXML::Element.new('bar') - e0.add_element(e1) - e0.children # => [] - e0.delete_element('//bar/') - e0.children # => [] - -==== Task: Determine Whether Element Children - -Use method -{Element#has_elements?}[../../../../REXML/Element.html#method-i-has_elements-3F] -to determine whether the element has element children: - - e0 = REXML::Element.new('foo') - e0.has_elements? # => false - e0.add_element(REXML::Element.new('bar')) - e0.has_elements? # => true - -==== Task: Get Element Descendants by XPath - -Use method -{Element#get_elements}[../../../../REXML/Element.html#method-i-get_elements] -to fetch all element descendant children by XPath: - - xml_string = <<-EOT - - - - - - EOT - d = REXML::Document.new(xml_string) - d.root.get_elements('//a') # => [ ... , ] - -==== Task: Get Next Element Sibling - -Use method -{Element#next_element}[../../../../REXML/Element.html#method-i-next_element] -to retrieve the next element sibling: - - d = REXML::Document.new 'text' - d.root.elements['b'].next_element #-> - d.root.elements['c'].next_element #-> nil - -==== Task: Get Previous Element Sibling - -Use method -{Element#previous_element}[../../../../REXML/Element.html#method-i-previous_element] -to retrieve the previous element sibling: - - d = REXML::Document.new 'text' - d.root.elements['c'].previous_element #-> - d.root.elements['b'].previous_element #-> nil - -Text Children - -==== Task: Add a Text Node - -Use method -{Element#add_text}[../../../../REXML/Element.html#method-i-add_text] -to add a text node to the element: - - d = REXML::Document.new('foobar') - e = d.root - e.add_text(REXML::Text.new('baz')) - e.to_a # => ["foo", , "bar", "baz"] - e.add_text(REXML::Text.new('baz')) - e.to_a # => ["foo", , "bar", "baz", "baz"] - -==== Task: Replace the First Text Node - -Use method -{Element#text=}[../../../../REXML/Element.html#method-i-text-3D] -to replace the first text node in the element: - - d = REXML::Document.new('textmore') - e = d.root - e.to_a # => [, "text", , "more", ] - e.text = 'oops' - e.to_a # => [, "oops", , "more", ] - -==== Task: Remove the First Text Node - -Use method -{Element#text=}[../../../../REXML/Element.html#method-i-text-3D] -to remove the first text node in the element: - - d = REXML::Document.new('textmore') - e = d.root - e.to_a # => [, "text", , "more", ] - e.text = nil - e.to_a # => [, , "more", ] - -==== Task: Retrieve the First Text Node - -Use method -{Element#get_text}[../../../../REXML/Element.html#method-i-get_text] -to retrieve the first text node in the element: - - d = REXML::Document.new('textmore') - e = d.root - e.to_a # => [, "text", , "more", ] - e.get_text # => "text" - -==== Task: Retrieve a Specific Text Node - -Use method -{Element#get_text}[../../../../REXML/Element.html#method-i-get_text] -to retrieve the first text node in a specified element: - - d = REXML::Document.new "some text this is bold! more text" - e = d.root - e.get_text('//root') # => "some text " - e.get_text('//b') # => "this is bold!" - -==== Task: Determine Whether the Element has Text Nodes - -Use method -{Element#has_text?}[../../../../REXML/Element.html#method-i-has_text-3F] -to determine whether the element has text: - - e = REXML::Element.new('foo') - e.has_text? # => false - e.add_text('bar') - e.has_text? # => true - -Other Children - -==== Task: Get the Child at a Given Index - -Use method -{Element#[]}[../../../../REXML/Element.html#method-i-5B-5D] -to retrieve the child at a given index: - - d = REXML::Document.new '>textmore' - e = d.root - e[0] # => - e[1] # => "text" - e[2] # => - -==== Task: Get All CDATA Children - -Use method -{Element#cdatas}[../../../../REXML/Element.html#method-i-cdatas] -to retrieve all CDATA children: - - xml_string = <<-EOT - - - - - EOT - d = REXML::Document.new(xml_string) - d.root.cdatas # => ["foo", "bar"] - -==== Task: Get All Comment Children - -Use method -{Element#comments}[../../../../REXML/Element.html#method-i-comments] -to retrieve all comment children: - - xml_string = <<-EOT - - - - - EOT - d = REXML::Document.new(xml_string) - d.root.comments.map {|comment| comment.to_s } # => ["foo", "bar"] - -==== Task: Get All Processing Instruction Children - -Use method -{Element#instructions}[../../../../REXML/Element.html#method-i-instructions] -to retrieve all processing instruction children: - - xml_string = <<-EOT - - - - - EOT - d = REXML::Document.new(xml_string) - instructions = d.root.instructions.map {|instruction| instruction.to_s } - instructions # => ["", ""] - -==== Task: Get All Text Children - -Use method -{Element#texts}[../../../../REXML/Element.html#method-i-texts] -to retrieve all text children: - - xml_string = 'textmore' - d = REXML::Document.new(xml_string) - d.root.texts # => ["text", "more"] - -=== Namespaces - -==== Task: Add a Namespace - -Use method -{Element#add_namespace}[../../../../REXML/Element.html#method-i-add_namespace] -to add a namespace to the element: - - e = REXML::Element.new('foo') - e.add_namespace('bar') - e.namespaces # => {"xmlns"=>"bar"} - -==== Task: Delete the Default Namespace - -Use method -{Element#delete_namespace}[../../../../REXML/Element.html#method-i-delete_namespace] -to remove the default namespace from the element: - - d = REXML::Document.new "" - d.to_s # => "" - d.root.delete_namespace # => - d.to_s # => "" - -==== Task: Delete a Specific Namespace - -Use method -{Element#delete_namespace}[../../../../REXML/Element.html#method-i-delete_namespace] -to remove a specific namespace from the element: - - d = REXML::Document.new "" - d.to_s # => "" - d.root.delete_namespace # => - d.to_s # => "" - d.root.delete_namespace('foo') - d.to_s # => "" - -==== Task: Get a Namespace URI - -Use method -{Element#namespace}[../../../../REXML/Element.html#method-i-namespace] -to retrieve a specific namespace URI for the element: - - xml_string = <<-EOT - - - - - - - EOT - d = REXML::Document.new(xml_string) - b = d.elements['//b'] - b.namespace # => "1" - b.namespace('y') # => "2" - -==== Task: Retrieve Namespaces - -Use method -{Element#namespaces}[../../../../REXML/Element.html#method-i-namespaces] -to retrieve all namespaces for the element: - - xml_string = '' - d = REXML::Document.new(xml_string) - d.root.attributes.namespaces # => {"xmlns"=>"foo", "x"=>"bar", "y"=>"twee"} - -==== Task: Retrieve Namespace Prefixes - -Use method -{Element#prefixes}[../../../../REXML/Element.html#method-i-prefixes] -to retrieve all prefixes (namespace names) for the element: - - xml_string = <<-EOT - - - - - - - EOT - d = REXML::Document.new(xml_string, {compress_whitespace: :all}) - d.elements['//a'].prefixes # => ["x", "y"] - d.elements['//b'].prefixes # => ["x", "y"] - d.elements['//c'].prefixes # => ["x", "y", "z"] - -=== Iteration - -==== Task: Iterate Over Elements - -Use method -{Element#each_element}[../../../../REXML/Element.html#method-i-each_element] -to iterate over element children: - - d = REXML::Document.new 'bbd' - d.root.each_element {|e| p e } - -Output: - - ... - ... - ... - - -==== Task: Iterate Over Elements Having a Specified Attribute - -Use method -{Element#each_element_with_attribute}[../../../../REXML/Element.html#method-i-each_element_with_attribute] -to iterate over element children that have a specified attribute: - - d = REXML::Document.new '' - a = d.root - a.each_element_with_attribute('id') {|e| p e } - -Output: - - - - - -==== Task: Iterate Over Elements Having a Specified Attribute and Value - -Use method -{Element#each_element_with_attribute}[../../../../REXML/Element.html#method-i-each_element_with_attribute] -to iterate over element children that have a specified attribute and value: - - d = REXML::Document.new '' - a = d.root - a.each_element_with_attribute('id', '1') {|e| p e } - -Output: - - - - -==== Task: Iterate Over Elements Having Specified Text - -Use method -{Element#each_element_with_text}[../../../../REXML/Element.html#method-i-each_element_with_text] -to iterate over element children that have specified text: - - -=== Context - -#whitespace -#ignore_whitespace_nodes -#raw - -=== Other Getters - -#document -#root -#root_node -#node_type -#xpath -#inspect diff --git a/bundle/ruby/3.2.0/gems/rexml-3.2.6/doc/rexml/tasks/rdoc/node.rdoc b/bundle/ruby/3.2.0/gems/rexml-3.2.6/doc/rexml/tasks/rdoc/node.rdoc deleted file mode 100644 index d5d2e12a..00000000 --- a/bundle/ruby/3.2.0/gems/rexml-3.2.6/doc/rexml/tasks/rdoc/node.rdoc +++ /dev/null @@ -1,97 +0,0 @@ -== Module Node - -:include: ../tocs/node_toc.rdoc - -=== Siblings - -==== Task: Find Previous Sibling - -Use method -{Node.previous_sibling_node}[../../../../REXML/Node.html#method-i-previous_sibling] -to retrieve the previous sibling: - - d = REXML::Document.new('') - b = d.root[1] # => - b.previous_sibling_node # => - -==== Task: Find Next Sibling - -Use method -{Node.next_sibling_node}[../../../../REXML/Node.html#method-i-next_sibling] -to retrieve the next sibling: - - d = REXML::Document.new('') - b = d.root[1] # => - b.next_sibling_node # => - -=== Position - -==== Task: Find Own Index Among Siblings - -Use method -{Node.index_in_parent}[../../../../REXML/Node.html#method-i-index_in_parent] -to retrieve the 1-based index of this node among its siblings: - - d = REXML::Document.new('') - b = d.root[1] # => - b.index_in_parent # => 2 - -=== Recursive Traversal - -==== Task: Traverse Each Recursively - -Use method -{Node.each_recursive}[../../../../REXML/Node.html#method-i-each_recursive] -to traverse a tree of nodes recursively: - - xml_string = '' - d = REXML::Document.new(xml_string) - d.root.each_recursive {|node| p node } - -Output: - - ... - ... - - ... - - -=== Recursive Search - -==== Task: Traverse Each Recursively - -Use method -{Node.find_first_recursive}[../../../../REXML/Node.html#method-i-find_first_recursive] -to search a tree of nodes recursively: - - xml_string = '' - d = REXML::Document.new(xml_string) - d.root.find_first_recursive {|node| node.name == 'c' } # => - -=== Representation - -==== Task: Represent a String - -Use method {Node.to_s}[../../../../REXML/Node.html#method-i-to_s] -to represent the node as a string: - - xml_string = '' - d = REXML::Document.new(xml_string) - d.root.to_s # => "" - -=== Parent? - -==== Task: Determine Whether the Node is a Parent - -Use method {Node.parent?}[../../../../REXML/Node.html#method-i-parent-3F] -to determine whether the node is a parent; -class Text derives from Node: - - d = REXML::Document.new('textmore') - t = d.root[1] # => "text" - t.parent? # => false - -Class Parent also derives from Node, but overrides this method: - - p = REXML::Parent.new - p.parent? # => true diff --git a/bundle/ruby/3.2.0/gems/rexml-3.2.6/doc/rexml/tasks/rdoc/parent.rdoc b/bundle/ruby/3.2.0/gems/rexml-3.2.6/doc/rexml/tasks/rdoc/parent.rdoc deleted file mode 100644 index 54f1dbe3..00000000 --- a/bundle/ruby/3.2.0/gems/rexml-3.2.6/doc/rexml/tasks/rdoc/parent.rdoc +++ /dev/null @@ -1,267 +0,0 @@ -== Class Parent - -Class Parent has methods from its superclasses and included modules; -see: - -- {Tasks for Child}[child_rdoc.html]. -- {Tasks for Node}[node_rdoc.html]. -- {Module Enumerable}[https://docs.ruby-lang.org/en/master/Enumerable.html]. - -:include: ../tocs/parent_toc.rdoc - -=== Queries - -==== Task: Get the Count of Children - -Use method {Parent#size}[../../../../REXML/Parent.html#method-i-size] -(or its alias +length+) to get the count of the parent's children: - - p = REXML::Parent.new - p.size # => 0 - xml_string = '' - d = REXML::Document.new(xml_string) - d.root.size # => 3 - -==== Task: Get the Child at a Given Index - -Use method {Parent#[]}[../../../../REXML/Parent.html#method-i-5B-5D] -to get the child at a given index: - - xml_string = '' - d = REXML::Document.new(xml_string) - d.root[1] # => - d.root[-1] # => - d.root[50] # => nil - -==== Task: Get the Index of a Given Child - -Use method {Parent#index}[../../../../REXML/Parent.html#method-i-index] -to get the index (0-based offset) of a child: - - d = REXML::Document.new('') - root = d.root - e0 = REXML::Element.new('foo') - e1 = REXML::Element.new('bar') - root.add(e0) # => - root.add(e1) # => - root.add(e0) # => - root.add(e1) # => - root.index(e0) # => 0 - root.index(e1) # => 1 - -==== Task: Get the Children - -Use method {Parent#children}[../../../../REXML/Parent.html#method-i-children] -(or its alias +to_a+) to get the parent's children: - - xml_string = '' - d = REXML::Document.new(xml_string) - d.root.children # => [, , ] - -==== Task: Determine Whether the Node is a Parent - -Use method {Parent#parent?}[../../../../REXML/Parent.html#method-i-parent-3F] -to determine whether the node is a parent; -class Text derives from Node: - - d = REXML::Document.new('textmore') - t = d.root[1] # => "text" - t.parent? # => false - -Class Parent also derives from Node, but overrides this method: - - p = REXML::Parent.new - p.parent? # => true - -=== Additions - -==== Task: Add a Child at the Beginning - -Use method {Parent#unshift}[../../../../REXML/Parent.html#method-i-unshift] -to add a child as at the beginning of the children: - - xml_string = '' - d = REXML::Document.new(xml_string) - d.root.children # => [, , ] - d.root.unshift REXML::Element.new('d') - d.root.children # => [, , , ] - -==== Task: Add a Child at the End - -Use method {Parent#<<}[../../../../REXML/Parent.html#method-i-3C-3C] -(or an alias +push+ or +add+) to add a child as at the end of the children: - - xml_string = '' - d = REXML::Document.new(xml_string) - d.root.children # => [, , ] - d.root << REXML::Element.new('d') - d.root.children # => [, , , ] - -==== Task: Replace a Child with Another Child - -Use method {Parent#replace}[../../../../REXML/Parent.html#method-i-replace] - - xml_string = '' - d = REXML::Document.new(xml_string) - d.root.children # => [, , ] - b = d.root[1] # => - d.replace_child(b, REXML::Element.new('d')) - d.root.children # => [, ] - -==== Task: Replace Multiple Children with Another Child - -Use method {Parent#[]=}[../../../../REXML/Parent.html#method-i-parent-5B-5D-3D] -to replace multiple consecutive children with another child: - - xml_string = '' - d = REXML::Document.new(xml_string) - d.root.children # => [, , , ] - d.root[1, 2] = REXML::Element.new('x') - d.root.children # => [, , ] - d.root[1, 5] = REXML::Element.new('x') - d.root.children # => [, ] # BUG? - -==== Task: Insert Child Before a Given Child - -Use method {Parent#insert_before}[../../../../REXML/Parent.html#method-i-insert_before] -to insert a child immediately before a given child: - - xml_string = '' - d = REXML::Document.new(xml_string) - d.root.children # => [, , ] - b = d.root[1] # => - x = REXML::Element.new('x') - d.root.insert_before(b, x) - d.root.children # => [, , , ] - -==== Task: Insert Child After a Given Child - -Use method {Parent#insert_after}[../../../../REXML/Parent.html#method-i-insert_after] -to insert a child immediately after a given child: - - xml_string = '' - d = REXML::Document.new(xml_string) - d.root.children # => [, , ] - b = d.root[1] # => - x = REXML::Element.new('x') - d.root.insert_after(b, x) - d.root.children # => [, , , ] - -=== Deletions - -==== Task: Remove a Given Child - -Use method {Parent#delete}[../../../../REXML/Parent.html#method-i-delete] -to remove all occurrences of a given child: - - d = REXML::Document.new('') - a = REXML::Element.new('a') - b = REXML::Element.new('b') - d.root.add(a) - d.root.add(b) - d.root.add(a) - d.root.add(b) - d.root.children # => [, , , ] - d.root.delete(b) - d.root.children # => [, ] - -==== Task: Remove the Child at a Specified Offset - -Use method {Parent#delete_at}[../../../../REXML/Parent.html#method-i-delete_at] -to remove the child at a specified offset: - - d = REXML::Document.new('') - a = REXML::Element.new('a') - b = REXML::Element.new('b') - d.root.add(a) - d.root.add(b) - d.root.add(a) - d.root.add(b) - d.root.children # => [, , , ] - d.root.delete_at(2) - d.root.children # => [, , ] - -==== Task: Remove Children That Meet Specified Criteria - -Use method {Parent#delete_if}[../../../../REXML/Parent.html#method-i-delete_if] -to remove children that meet criteria specified in the given block: - - d = REXML::Document.new('') - d.root.add(REXML::Element.new('x')) - d.root.add(REXML::Element.new('xx')) - d.root.add(REXML::Element.new('xxx')) - d.root.add(REXML::Element.new('xxxx')) - d.root.children # => [, , , ] - d.root.delete_if {|child| child.name.size.odd? } - d.root.children # => [, ] - -=== Iterations - -==== Task: Iterate Over Children - -Use method {Parent#each_child}[../../../../REXML/Parent.html#method-i-each_child] -(or its alias +each+) to iterate over all children: - - xml_string = '' - d = REXML::Document.new(xml_string) - d.root.children # => [, , ] - d.root.each_child {|child| p child } - -Output: - - - - - -==== Task: Iterate Over Child Indexes - -Use method {Parent#each_index}[../../../../REXML/Parent.html#method-i-each_index] -to iterate over all child indexes: - - xml_string = '' - d = REXML::Document.new(xml_string) - d.root.children # => [, , ] - d.root.each_index {|child| p child } - -Output: - - 0 - 1 - 2 - -=== Clones - -==== Task: Clone Deeply - -Use method {Parent#deep_clone}[../../../../REXML/Parent.html#method-i-deep_clone] -to clone deeply; that is, to clone every nested node that is a Parent object: - - xml_string = <<-EOT - - - - Everyday Italian - Giada De Laurentiis - 2005 - 30.00 - - - Harry Potter - J K. Rowling - 2005 - 29.99 - - - Learning XML - Erik T. Ray - 2003 - 39.95 - - - EOT - d = REXML::Document.new(xml_string) - root = d.root - shallow = root.clone - deep = root.deep_clone - shallow.to_s.size # => 12 - deep.to_s.size # => 590 diff --git a/bundle/ruby/3.2.0/gems/rexml-3.2.6/doc/rexml/tasks/tocs/child_toc.rdoc b/bundle/ruby/3.2.0/gems/rexml-3.2.6/doc/rexml/tasks/tocs/child_toc.rdoc deleted file mode 100644 index a2083a09..00000000 --- a/bundle/ruby/3.2.0/gems/rexml-3.2.6/doc/rexml/tasks/tocs/child_toc.rdoc +++ /dev/null @@ -1,12 +0,0 @@ -Tasks on this page: - -- {Relationships}[#label-Relationships] - - {Task: Set the Parent}[#label-Task-3A+Set+the+Parent] - - {Task: Insert Previous Sibling}[#label-Task-3A+Insert+Previous+Sibling] - - {Task: Insert Next Sibling}[#label-Task-3A+Insert+Next+Sibling] -- {Removal or Replacement}[#label-Removal+or+Replacement] - - {Task: Remove Child from Parent}[#label-Task-3A+Remove+Child+from+Parent] - - {Task: Replace Child}[#label-Task-3A+Replace+Child] -- {Document}[#label-Document] - - {Task: Get the Document}[#label-Task-3A+Get+the+Document] - diff --git a/bundle/ruby/3.2.0/gems/rexml-3.2.6/doc/rexml/tasks/tocs/document_toc.rdoc b/bundle/ruby/3.2.0/gems/rexml-3.2.6/doc/rexml/tasks/tocs/document_toc.rdoc deleted file mode 100644 index 5db055ff..00000000 --- a/bundle/ruby/3.2.0/gems/rexml-3.2.6/doc/rexml/tasks/tocs/document_toc.rdoc +++ /dev/null @@ -1,30 +0,0 @@ -Tasks on this page: - -- {New Document}[#label-New+Document] - - {Task: Create an Empty Document}[#label-Task-3A+Create+an+Empty+Document] - - {Task: Parse a String into a New Document}[#label-Task-3A+Parse+a+String+into+a+New+Document] - - {Task: Parse an IO Stream into a New Document}[#label-Task-3A+Parse+an+IO+Stream+into+a+New+Document] - - {Task: Create a Document from an Existing Document}[#label-Task-3A+Create+a+Document+from+an+Existing+Document] - - {Task: Clone a Document}[#label-Task-3A+Clone+a+Document] -- {Document Type}[#label-Document+Type] - - {Task: Get the Document Type}[#label-Task-3A+Get+the+Document+Type] - - {Task: Set the Document Type}[#label-Task-3A+Set+the+Document+Type] -- {XML Declaration}[#label-XML+Declaration] - - {Task: Get the XML Declaration}[#label-Task-3A+Get+the+XML+Declaration] - - {Task: Set the XML Declaration}[#label-Task-3A+Set+the+XML+Declaration] -- {Children}[#label-Children] - - {Task: Add an Element Child}[#label-Task-3A+Add+an+Element+Child] - - {Task: Add a Non-Element Child}[#label-Task-3A+Add+a+Non-Element+Child] -- {Writing}[#label-Writing] - - {Task: Write to $stdout}[#label-Task-3A+Write+to+-24stdout] - - {Task: Write to IO Stream}[#label-Task-3A+Write+to+IO+Stream] - - {Task: Write with No Indentation}[#label-Task-3A+Write+with+No+Indentation] - - {Task: Write with Specified Indentation}[#label-Task-3A+Write+with+Specified+Indentation] -- {Querying}[#label-Querying] - - {Task: Get the Document}[#label-Task-3A+Get+the+Document] - - {Task: Get the Encoding}[#label-Task-3A+Get+the+Encoding] - - {Task: Get the Node Type}[#label-Task-3A+Get+the+Node+Type] - - {Task: Get the Root Element}[#label-Task-3A+Get+the+Root+Element] - - {Task: Determine Whether Stand-Alone}[#label-Task-3A+Determine+Whether+Stand-Alone] - - {Task: Get the Version}[#label-Task-3A+Get+the+Version] - diff --git a/bundle/ruby/3.2.0/gems/rexml-3.2.6/doc/rexml/tasks/tocs/element_toc.rdoc b/bundle/ruby/3.2.0/gems/rexml-3.2.6/doc/rexml/tasks/tocs/element_toc.rdoc deleted file mode 100644 index 60a504a5..00000000 --- a/bundle/ruby/3.2.0/gems/rexml-3.2.6/doc/rexml/tasks/tocs/element_toc.rdoc +++ /dev/null @@ -1,55 +0,0 @@ -Tasks on this page: - -- {New Element}[#label-New+Element] - - {Task: Create a Default Element}[#label-Task-3A+Create+a+Default+Element] - - {Task: Create a Named Element}[#label-Task-3A+Create+a+Named+Element] - - {Task: Create an Element with Name and Parent}[#label-Task-3A+Create+an+Element+with+Name+and+Parent] - - {Task: Create an Element with Name, Parent, and Context}[#label-Task-3A+Create+an+Element+with+Name-2C+Parent-2C+and+Context] - - {Task: Create a Shallow Clone}[#label-Task-3A+Create+a+Shallow+Clone] -- {Attributes}[#label-Attributes] - - {Task: Create and Add an Attribute}[#label-Task-3A+Create+and+Add+an+Attribute] - - {Task: Add an Existing Attribute}[#label-Task-3A+Add+an+Existing+Attribute] - - {Task: Add Multiple Attributes from a Hash}[#label-Task-3A+Add+Multiple+Attributes+from+a+Hash] - - {Task: Add Multiple Attributes from an Array}[#label-Task-3A+Add+Multiple+Attributes+from+an+Array] - - {Task: Retrieve the Value for an Attribute Name}[#label-Task-3A+Retrieve+the+Value+for+an+Attribute+Name] - - {Task: Retrieve the Attribute Value for a Name and Namespace}[#label-Task-3A+Retrieve+the+Attribute+Value+for+a+Name+and+Namespace] - - {Task: Delete an Attribute}[#label-Task-3A+Delete+an+Attribute] - - {Task: Determine Whether the Element Has Attributes}[#label-Task-3A+Determine+Whether+the+Element+Has+Attributes] -- {Children}[#label-Children] - - {Task: Create and Add an Element}[#label-Task-3A+Create+and+Add+an+Element] - - {Task: Add an Existing Element}[#label-Task-3A+Add+an+Existing+Element] - - {Task: Create and Add an Element with Attributes}[#label-Task-3A+Create+and+Add+an+Element+with+Attributes] - - {Task: Add an Existing Element with Added Attributes}[#label-Task-3A+Add+an+Existing+Element+with+Added+Attributes] - - {Task: Delete a Specified Element}[#label-Task-3A+Delete+a+Specified+Element] - - {Task: Delete an Element by Index}[#label-Task-3A+Delete+an+Element+by+Index] - - {Task: Delete an Element by XPath}[#label-Task-3A+Delete+an+Element+by+XPath] - - {Task: Determine Whether Element Children}[#label-Task-3A+Determine+Whether+Element+Children] - - {Task: Get Element Descendants by XPath}[#label-Task-3A+Get+Element+Descendants+by+XPath] - - {Task: Get Next Element Sibling}[#label-Task-3A+Get+Next+Element+Sibling] - - {Task: Get Previous Element Sibling}[#label-Task-3A+Get+Previous+Element+Sibling] - - {Task: Add a Text Node}[#label-Task-3A+Add+a+Text+Node] - - {Task: Replace the First Text Node}[#label-Task-3A+Replace+the+First+Text+Node] - - {Task: Remove the First Text Node}[#label-Task-3A+Remove+the+First+Text+Node] - - {Task: Retrieve the First Text Node}[#label-Task-3A+Retrieve+the+First+Text+Node] - - {Task: Retrieve a Specific Text Node}[#label-Task-3A+Retrieve+a+Specific+Text+Node] - - {Task: Determine Whether the Element has Text Nodes}[#label-Task-3A+Determine+Whether+the+Element+has+Text+Nodes] - - {Task: Get the Child at a Given Index}[#label-Task-3A+Get+the+Child+at+a+Given+Index] - - {Task: Get All CDATA Children}[#label-Task-3A+Get+All+CDATA+Children] - - {Task: Get All Comment Children}[#label-Task-3A+Get+All+Comment+Children] - - {Task: Get All Processing Instruction Children}[#label-Task-3A+Get+All+Processing+Instruction+Children] - - {Task: Get All Text Children}[#label-Task-3A+Get+All+Text+Children] -- {Namespaces}[#label-Namespaces] - - {Task: Add a Namespace}[#label-Task-3A+Add+a+Namespace] - - {Task: Delete the Default Namespace}[#label-Task-3A+Delete+the+Default+Namespace] - - {Task: Delete a Specific Namespace}[#label-Task-3A+Delete+a+Specific+Namespace] - - {Task: Get a Namespace URI}[#label-Task-3A+Get+a+Namespace+URI] - - {Task: Retrieve Namespaces}[#label-Task-3A+Retrieve+Namespaces] - - {Task: Retrieve Namespace Prefixes}[#label-Task-3A+Retrieve+Namespace+Prefixes] -- {Iteration}[#label-Iteration] - - {Task: Iterate Over Elements}[#label-Task-3A+Iterate+Over+Elements] - - {Task: Iterate Over Elements Having a Specified Attribute}[#label-Task-3A+Iterate+Over+Elements+Having+a+Specified+Attribute] - - {Task: Iterate Over Elements Having a Specified Attribute and Value}[#label-Task-3A+Iterate+Over+Elements+Having+a+Specified+Attribute+and+Value] - - {Task: Iterate Over Elements Having Specified Text}[#label-Task-3A+Iterate+Over+Elements+Having+Specified+Text] -- {Context}[#label-Context] -- {Other Getters}[#label-Other+Getters] - diff --git a/bundle/ruby/3.2.0/gems/rexml-3.2.6/doc/rexml/tasks/tocs/master_toc.rdoc b/bundle/ruby/3.2.0/gems/rexml-3.2.6/doc/rexml/tasks/tocs/master_toc.rdoc deleted file mode 100644 index 0214f6b2..00000000 --- a/bundle/ruby/3.2.0/gems/rexml-3.2.6/doc/rexml/tasks/tocs/master_toc.rdoc +++ /dev/null @@ -1,135 +0,0 @@ -== Tasks - -=== {Child}[../../tasks/rdoc/child_rdoc.html] -- {Relationships}[../../tasks/rdoc/child_rdoc.html#label-Relationships] - - {Task: Set the Parent}[../../tasks/rdoc/child_rdoc.html#label-Task-3A+Set+the+Parent] - - {Task: Insert Previous Sibling}[../../tasks/rdoc/child_rdoc.html#label-Task-3A+Insert+Previous+Sibling] - - {Task: Insert Next Sibling}[../../tasks/rdoc/child_rdoc.html#label-Task-3A+Insert+Next+Sibling] -- {Removal or Replacement}[../../tasks/rdoc/child_rdoc.html#label-Removal+or+Replacement] - - {Task: Remove Child from Parent}[../../tasks/rdoc/child_rdoc.html#label-Task-3A+Remove+Child+from+Parent] - - {Task: Replace Child}[../../tasks/rdoc/child_rdoc.html#label-Task-3A+Replace+Child] -- {Document}[../../tasks/rdoc/child_rdoc.html#label-Document] - - {Task: Get the Document}[../../tasks/rdoc/child_rdoc.html#label-Task-3A+Get+the+Document] - -=== {Document}[../../tasks/rdoc/document_rdoc.html] -- {New Document}[../../tasks/rdoc/document_rdoc.html#label-New+Document] - - {Task: Create an Empty Document}[../../tasks/rdoc/document_rdoc.html#label-Task-3A+Create+an+Empty+Document] - - {Task: Parse a String into a New Document}[../../tasks/rdoc/document_rdoc.html#label-Task-3A+Parse+a+String+into+a+New+Document] - - {Task: Parse an IO Stream into a New Document}[../../tasks/rdoc/document_rdoc.html#label-Task-3A+Parse+an+IO+Stream+into+a+New+Document] - - {Task: Create a Document from an Existing Document}[../../tasks/rdoc/document_rdoc.html#label-Task-3A+Create+a+Document+from+an+Existing+Document] - - {Task: Clone a Document}[../../tasks/rdoc/document_rdoc.html#label-Task-3A+Clone+a+Document] -- {Document Type}[../../tasks/rdoc/document_rdoc.html#label-Document+Type] - - {Task: Get the Document Type}[../../tasks/rdoc/document_rdoc.html#label-Task-3A+Get+the+Document+Type] - - {Task: Set the Document Type}[../../tasks/rdoc/document_rdoc.html#label-Task-3A+Set+the+Document+Type] -- {XML Declaration}[../../tasks/rdoc/document_rdoc.html#label-XML+Declaration] - - {Task: Get the XML Declaration}[../../tasks/rdoc/document_rdoc.html#label-Task-3A+Get+the+XML+Declaration] - - {Task: Set the XML Declaration}[../../tasks/rdoc/document_rdoc.html#label-Task-3A+Set+the+XML+Declaration] -- {Children}[../../tasks/rdoc/document_rdoc.html#label-Children] - - {Task: Add an Element Child}[../../tasks/rdoc/document_rdoc.html#label-Task-3A+Add+an+Element+Child] - - {Task: Add a Non-Element Child}[../../tasks/rdoc/document_rdoc.html#label-Task-3A+Add+a+Non-Element+Child] -- {Writing}[../../tasks/rdoc/document_rdoc.html#label-Writing] - - {Task: Write to $stdout}[../../tasks/rdoc/document_rdoc.html#label-Task-3A+Write+to+-24stdout] - - {Task: Write to IO Stream}[../../tasks/rdoc/document_rdoc.html#label-Task-3A+Write+to+IO+Stream] - - {Task: Write with No Indentation}[../../tasks/rdoc/document_rdoc.html#label-Task-3A+Write+with+No+Indentation] - - {Task: Write with Specified Indentation}[../../tasks/rdoc/document_rdoc.html#label-Task-3A+Write+with+Specified+Indentation] -- {Querying}[../../tasks/rdoc/document_rdoc.html#label-Querying] - - {Task: Get the Document}[../../tasks/rdoc/document_rdoc.html#label-Task-3A+Get+the+Document] - - {Task: Get the Encoding}[../../tasks/rdoc/document_rdoc.html#label-Task-3A+Get+the+Encoding] - - {Task: Get the Node Type}[../../tasks/rdoc/document_rdoc.html#label-Task-3A+Get+the+Node+Type] - - {Task: Get the Root Element}[../../tasks/rdoc/document_rdoc.html#label-Task-3A+Get+the+Root+Element] - - {Task: Determine Whether Stand-Alone}[../../tasks/rdoc/document_rdoc.html#label-Task-3A+Determine+Whether+Stand-Alone] - - {Task: Get the Version}[../../tasks/rdoc/document_rdoc.html#label-Task-3A+Get+the+Version] - -=== {Element}[../../tasks/rdoc/element_rdoc.html] -- {New Element}[../../tasks/rdoc/element_rdoc.html#label-New+Element] - - {Task: Create a Default Element}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Create+a+Default+Element] - - {Task: Create a Named Element}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Create+a+Named+Element] - - {Task: Create an Element with Name and Parent}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Create+an+Element+with+Name+and+Parent] - - {Task: Create an Element with Name, Parent, and Context}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Create+an+Element+with+Name-2C+Parent-2C+and+Context] - - {Task: Create a Shallow Clone}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Create+a+Shallow+Clone] -- {Attributes}[../../tasks/rdoc/element_rdoc.html#label-Attributes] - - {Task: Create and Add an Attribute}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Create+and+Add+an+Attribute] - - {Task: Add an Existing Attribute}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Add+an+Existing+Attribute] - - {Task: Add Multiple Attributes from a Hash}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Add+Multiple+Attributes+from+a+Hash] - - {Task: Add Multiple Attributes from an Array}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Add+Multiple+Attributes+from+an+Array] - - {Task: Retrieve the Value for an Attribute Name}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Retrieve+the+Value+for+an+Attribute+Name] - - {Task: Retrieve the Attribute Value for a Name and Namespace}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Retrieve+the+Attribute+Value+for+a+Name+and+Namespace] - - {Task: Delete an Attribute}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Delete+an+Attribute] - - {Task: Determine Whether the Element Has Attributes}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Determine+Whether+the+Element+Has+Attributes] -- {Children}[../../tasks/rdoc/element_rdoc.html#label-Children] - - {Task: Create and Add an Element}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Create+and+Add+an+Element] - - {Task: Add an Existing Element}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Add+an+Existing+Element] - - {Task: Create and Add an Element with Attributes}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Create+and+Add+an+Element+with+Attributes] - - {Task: Add an Existing Element with Added Attributes}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Add+an+Existing+Element+with+Added+Attributes] - - {Task: Delete a Specified Element}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Delete+a+Specified+Element] - - {Task: Delete an Element by Index}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Delete+an+Element+by+Index] - - {Task: Delete an Element by XPath}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Delete+an+Element+by+XPath] - - {Task: Determine Whether Element Children}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Determine+Whether+Element+Children] - - {Task: Get Element Descendants by XPath}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Get+Element+Descendants+by+XPath] - - {Task: Get Next Element Sibling}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Get+Next+Element+Sibling] - - {Task: Get Previous Element Sibling}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Get+Previous+Element+Sibling] - - {Task: Add a Text Node}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Add+a+Text+Node] - - {Task: Replace the First Text Node}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Replace+the+First+Text+Node] - - {Task: Remove the First Text Node}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Remove+the+First+Text+Node] - - {Task: Retrieve the First Text Node}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Retrieve+the+First+Text+Node] - - {Task: Retrieve a Specific Text Node}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Retrieve+a+Specific+Text+Node] - - {Task: Determine Whether the Element has Text Nodes}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Determine+Whether+the+Element+has+Text+Nodes] - - {Task: Get the Child at a Given Index}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Get+the+Child+at+a+Given+Index] - - {Task: Get All CDATA Children}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Get+All+CDATA+Children] - - {Task: Get All Comment Children}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Get+All+Comment+Children] - - {Task: Get All Processing Instruction Children}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Get+All+Processing+Instruction+Children] - - {Task: Get All Text Children}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Get+All+Text+Children] -- {Namespaces}[../../tasks/rdoc/element_rdoc.html#label-Namespaces] - - {Task: Add a Namespace}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Add+a+Namespace] - - {Task: Delete the Default Namespace}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Delete+the+Default+Namespace] - - {Task: Delete a Specific Namespace}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Delete+a+Specific+Namespace] - - {Task: Get a Namespace URI}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Get+a+Namespace+URI] - - {Task: Retrieve Namespaces}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Retrieve+Namespaces] - - {Task: Retrieve Namespace Prefixes}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Retrieve+Namespace+Prefixes] -- {Iteration}[../../tasks/rdoc/element_rdoc.html#label-Iteration] - - {Task: Iterate Over Elements}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Iterate+Over+Elements] - - {Task: Iterate Over Elements Having a Specified Attribute}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Iterate+Over+Elements+Having+a+Specified+Attribute] - - {Task: Iterate Over Elements Having a Specified Attribute and Value}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Iterate+Over+Elements+Having+a+Specified+Attribute+and+Value] - - {Task: Iterate Over Elements Having Specified Text}[../../tasks/rdoc/element_rdoc.html#label-Task-3A+Iterate+Over+Elements+Having+Specified+Text] -- {Context}[../../tasks/rdoc/element_rdoc.html#label-Context] -- {Other Getters}[../../tasks/rdoc/element_rdoc.html#label-Other+Getters] - -=== {Node}[../../tasks/rdoc/node_rdoc.html] -- {Siblings}[../../tasks/rdoc/node_rdoc.html#label-Siblings] - - {Task: Find Previous Sibling}[../../tasks/rdoc/node_rdoc.html#label-Task-3A+Find+Previous+Sibling] - - {Task: Find Next Sibling}[../../tasks/rdoc/node_rdoc.html#label-Task-3A+Find+Next+Sibling] -- {Position}[../../tasks/rdoc/node_rdoc.html#label-Position] - - {Task: Find Own Index Among Siblings}[../../tasks/rdoc/node_rdoc.html#label-Task-3A+Find+Own+Index+Among+Siblings] -- {Recursive Traversal}[../../tasks/rdoc/node_rdoc.html#label-Recursive+Traversal] - - {Task: Traverse Each Recursively}[../../tasks/rdoc/node_rdoc.html#label-Task-3A+Traverse+Each+Recursively] -- {Recursive Search}[../../tasks/rdoc/node_rdoc.html#label-Recursive+Search] - - {Task: Traverse Each Recursively}[../../tasks/rdoc/node_rdoc.html#label-Task-3A+Traverse+Each+Recursively] -- {Representation}[../../tasks/rdoc/node_rdoc.html#label-Representation] - - {Task: Represent a String}[../../tasks/rdoc/node_rdoc.html#label-Task-3A+Represent+a+String] -- {Parent?}[../../tasks/rdoc/node_rdoc.html#label-Parent-3F] - - {Task: Determine Whether the Node is a Parent}[../../tasks/rdoc/node_rdoc.html#label-Task-3A+Determine+Whether+the+Node+is+a+Parent] - -=== {Parent}[../../tasks/rdoc/parent_rdoc.html] -- {Queries}[../../tasks/rdoc/parent_rdoc.html#label-Queries] - - {Task: Get the Count of Children}[../../tasks/rdoc/parent_rdoc.html#label-Task-3A+Get+the+Count+of+Children] - - {Task: Get the Child at a Given Index}[../../tasks/rdoc/parent_rdoc.html#label-Task-3A+Get+the+Child+at+a+Given+Index] - - {Task: Get the Index of a Given Child}[../../tasks/rdoc/parent_rdoc.html#label-Task-3A+Get+the+Index+of+a+Given+Child] - - {Task: Get the Children}[../../tasks/rdoc/parent_rdoc.html#label-Task-3A+Get+the+Children] - - {Task: Determine Whether the Node is a Parent}[../../tasks/rdoc/parent_rdoc.html#label-Task-3A+Determine+Whether+the+Node+is+a+Parent] -- {Additions}[../../tasks/rdoc/parent_rdoc.html#label-Additions] - - {Task: Add a Child at the Beginning}[../../tasks/rdoc/parent_rdoc.html#label-Task-3A+Add+a+Child+at+the+Beginning] - - {Task: Add a Child at the End}[../../tasks/rdoc/parent_rdoc.html#label-Task-3A+Add+a+Child+at+the+End] - - {Task: Replace a Child with Another Child}[../../tasks/rdoc/parent_rdoc.html#label-Task-3A+Replace+a+Child+with+Another+Child] - - {Task: Replace Multiple Children with Another Child}[../../tasks/rdoc/parent_rdoc.html#label-Task-3A+Replace+Multiple+Children+with+Another+Child] - - {Task: Insert Child Before a Given Child}[../../tasks/rdoc/parent_rdoc.html#label-Task-3A+Insert+Child+Before+a+Given+Child] - - {Task: Insert Child After a Given Child}[../../tasks/rdoc/parent_rdoc.html#label-Task-3A+Insert+Child+After+a+Given+Child] -- {Deletions}[../../tasks/rdoc/parent_rdoc.html#label-Deletions] - - {Task: Remove a Given Child}[../../tasks/rdoc/parent_rdoc.html#label-Task-3A+Remove+a+Given+Child] - - {Task: Remove the Child at a Specified Offset}[../../tasks/rdoc/parent_rdoc.html#label-Task-3A+Remove+the+Child+at+a+Specified+Offset] - - {Task: Remove Children That Meet Specified Criteria}[../../tasks/rdoc/parent_rdoc.html#label-Task-3A+Remove+Children+That+Meet+Specified+Criteria] -- {Iterations}[../../tasks/rdoc/parent_rdoc.html#label-Iterations] - - {Task: Iterate Over Children}[../../tasks/rdoc/parent_rdoc.html#label-Task-3A+Iterate+Over+Children] - - {Task: Iterate Over Child Indexes}[../../tasks/rdoc/parent_rdoc.html#label-Task-3A+Iterate+Over+Child+Indexes] -- {Clones}[../../tasks/rdoc/parent_rdoc.html#label-Clones] - - {Task: Clone Deeply}[../../tasks/rdoc/parent_rdoc.html#label-Task-3A+Clone+Deeply] - diff --git a/bundle/ruby/3.2.0/gems/rexml-3.2.6/doc/rexml/tasks/tocs/node_toc.rdoc b/bundle/ruby/3.2.0/gems/rexml-3.2.6/doc/rexml/tasks/tocs/node_toc.rdoc deleted file mode 100644 index d9114faf..00000000 --- a/bundle/ruby/3.2.0/gems/rexml-3.2.6/doc/rexml/tasks/tocs/node_toc.rdoc +++ /dev/null @@ -1,16 +0,0 @@ -Tasks on this page: - -- {Siblings}[#label-Siblings] - - {Task: Find Previous Sibling}[#label-Task-3A+Find+Previous+Sibling] - - {Task: Find Next Sibling}[#label-Task-3A+Find+Next+Sibling] -- {Position}[#label-Position] - - {Task: Find Own Index Among Siblings}[#label-Task-3A+Find+Own+Index+Among+Siblings] -- {Recursive Traversal}[#label-Recursive+Traversal] - - {Task: Traverse Each Recursively}[#label-Task-3A+Traverse+Each+Recursively] -- {Recursive Search}[#label-Recursive+Search] - - {Task: Traverse Each Recursively}[#label-Task-3A+Traverse+Each+Recursively] -- {Representation}[#label-Representation] - - {Task: Represent a String}[#label-Task-3A+Represent+a+String] -- {Parent?}[#label-Parent-3F] - - {Task: Determine Whether the Node is a Parent}[#label-Task-3A+Determine+Whether+the+Node+is+a+Parent] - diff --git a/bundle/ruby/3.2.0/gems/rexml-3.2.6/doc/rexml/tasks/tocs/parent_toc.rdoc b/bundle/ruby/3.2.0/gems/rexml-3.2.6/doc/rexml/tasks/tocs/parent_toc.rdoc deleted file mode 100644 index 68fc0b70..00000000 --- a/bundle/ruby/3.2.0/gems/rexml-3.2.6/doc/rexml/tasks/tocs/parent_toc.rdoc +++ /dev/null @@ -1,25 +0,0 @@ -Tasks on this page: - -- {Queries}[#label-Queries] - - {Task: Get the Count of Children}[#label-Task-3A+Get+the+Count+of+Children] - - {Task: Get the Child at a Given Index}[#label-Task-3A+Get+the+Child+at+a+Given+Index] - - {Task: Get the Index of a Given Child}[#label-Task-3A+Get+the+Index+of+a+Given+Child] - - {Task: Get the Children}[#label-Task-3A+Get+the+Children] - - {Task: Determine Whether the Node is a Parent}[#label-Task-3A+Determine+Whether+the+Node+is+a+Parent] -- {Additions}[#label-Additions] - - {Task: Add a Child at the Beginning}[#label-Task-3A+Add+a+Child+at+the+Beginning] - - {Task: Add a Child at the End}[#label-Task-3A+Add+a+Child+at+the+End] - - {Task: Replace a Child with Another Child}[#label-Task-3A+Replace+a+Child+with+Another+Child] - - {Task: Replace Multiple Children with Another Child}[#label-Task-3A+Replace+Multiple+Children+with+Another+Child] - - {Task: Insert Child Before a Given Child}[#label-Task-3A+Insert+Child+Before+a+Given+Child] - - {Task: Insert Child After a Given Child}[#label-Task-3A+Insert+Child+After+a+Given+Child] -- {Deletions}[#label-Deletions] - - {Task: Remove a Given Child}[#label-Task-3A+Remove+a+Given+Child] - - {Task: Remove the Child at a Specified Offset}[#label-Task-3A+Remove+the+Child+at+a+Specified+Offset] - - {Task: Remove Children That Meet Specified Criteria}[#label-Task-3A+Remove+Children+That+Meet+Specified+Criteria] -- {Iterations}[#label-Iterations] - - {Task: Iterate Over Children}[#label-Task-3A+Iterate+Over+Children] - - {Task: Iterate Over Child Indexes}[#label-Task-3A+Iterate+Over+Child+Indexes] -- {Clones}[#label-Clones] - - {Task: Clone Deeply}[#label-Task-3A+Clone+Deeply] - diff --git a/bundle/ruby/3.2.0/gems/rexml-3.2.6/doc/rexml/tutorial.rdoc b/bundle/ruby/3.2.0/gems/rexml-3.2.6/doc/rexml/tutorial.rdoc deleted file mode 100644 index c85a70d0..00000000 --- a/bundle/ruby/3.2.0/gems/rexml-3.2.6/doc/rexml/tutorial.rdoc +++ /dev/null @@ -1,1358 +0,0 @@ -= \REXML Tutorial - -== Why \REXML? - -- Ruby's \REXML library is part of the Ruby distribution, - so using it requires no gem installations. -- \REXML is fully maintained. -- \REXML is mature, having been in use for long years. - -== To Include, or Not to Include? - -REXML is a module. -To use it, you must require it: - - require 'rexml' # => true - -If you do not also include it, you must fully qualify references to REXML: - - REXML::Document # => REXML::Document - -If you also include the module, you may optionally omit REXML::: - - include REXML - Document # => REXML::Document - REXML::Document # => REXML::Document - -== Preliminaries - -All examples here assume that the following code has been executed: - - require 'rexml' - include REXML - -The source XML for many examples here is from file -{books.xml}[https://www.w3schools.com/xml/books.xml] at w3schools.com. -You may find it convenient to open that page in a new tab -(Ctrl-click in some browsers). - -Note that your browser may display the XML with modified whitespace -and without the XML declaration, which in this case is: - - - -For convenience, we capture the XML into a string variable: - - require 'open-uri' - source_string = URI.open('https://www.w3schools.com/xml/books.xml').read - -And into a file: - - File.write('source_file.xml', source_string) - -Throughout these examples, variable +doc+ will hold only the document -derived from these sources: - - doc = Document.new(source_string) - -== Parsing \XML \Source - -=== Parsing a Document - -Use method REXML::Document::new to parse XML source. - -The source may be a string: - - doc = Document.new(source_string) - -Or an \IO stream: - - doc = File.open('source_file.xml', 'r') do |io| - Document.new(io) - end - -Method URI.open returns a StringIO object, -so the source can be from a web page: - - require 'open-uri' - io = URI.open("https://www.w3schools.com/xml/books.xml") - io.class # => StringIO - doc = Document.new(io) - -For any of these sources, the returned object is an REXML::Document: - - doc # => ... - doc.class # => REXML::Document - -Note: 'UNDEFINED' is the "name" displayed for a document, -even though doc.name returns an empty string "". - -A parsed document may produce \REXML objects of many classes, -but the two that are likely to be of greatest interest are -REXML::Document and REXML::Element. -These two classes are covered in great detail in this tutorial. - -=== Context (Parsing Options) - -The context for parsing a document is a hash that influences -the way the XML is read and stored. - -The context entries are: - -- +:respect_whitespace+: controls treatment of whitespace. -- +:compress_whitespace+: determines whether whitespace is compressed. -- +:ignore_whitespace_nodes+: determines whether whitespace-only nodes are to be ignored. -- +:raw+: controls treatment of special characters and entities. - -See {Element Context}[../context_rdoc.html]. - -== Exploring the Document - -An REXML::Document object represents an XML document. - -The object inherits from its ancestor classes: - -- REXML::Child (includes module REXML::Node) - - REXML::Parent (includes module {Enumerable}[rdoc-ref:Enumerable]). - - REXML::Element (includes module REXML::Namespace). - - REXML::Document - -This section covers only those properties and methods that are unique to a document -(that is, not inherited or included). - -=== Document Properties - -A document has several properties (other than its children); - -- Document type. -- Node type. -- Name. -- Document. -- XPath - -[Document Type] - - A document may have a document type: - - my_xml = '' - my_doc = Document.new(my_xml) - doc_type = my_doc.doctype - doc_type.class # => REXML::DocType - doc_type.to_s # => "" - -[Node Type] - - A document also has a node type (always +:document+): - - doc.node_type # => :document - -[Name] - - A document has a name (always an empty string): - - doc.name # => "" - -[Document] - - \Method REXML::Document#document returns +self+: - - doc.document == doc # => true - - An object of a different class (\REXML::Element or \REXML::Child) - may have a document, which is the document to which the object belongs; - if so, that document will be an \REXML::Document object. - - doc.root.document.class # => REXML::Document - -[XPath] - - \method REXML::Element#xpath returns the string xpath to the element, - relative to its most distant ancestor: - - doc.root.class # => REXML::Element - doc.root.xpath # => "/bookstore" - doc.root.texts.first # => "\n\n" - doc.root.texts.first.xpath # => "/bookstore/text()" - - If there is no ancestor, returns the expanded name of the element: - - Element.new('foo').xpath # => "foo" - -=== Document Children - -A document may have children of these types: - -- XML declaration. -- Root element. -- Text. -- Processing instructions. -- Comments. -- CDATA. - -[XML Declaration] - - A document may an XML declaration, which is stored as an REXML::XMLDecl object: - - doc.xml_decl # => - doc.xml_decl.class # => REXML::XMLDecl - - Document.new('').xml_decl # => - - my_xml = '"' - my_doc = Document.new(my_xml) - xml_decl = my_doc.xml_decl - xml_decl.to_s # => "" - - The version, encoding, and stand-alone values may be retrieved separately: - - my_doc.version # => "1.0" - my_doc.encoding # => "UTF-8" - my_doc.stand_alone? # => "yes" - -[Root Element] - - A document may have a single element child, called the _root_ _element_, - which is stored as an REXML::Element object; - it may be retrieved with method +root+: - - doc.root # => ... - doc.root.class # => REXML::Element - - Document.new('').root # => nil - -[Text] - - A document may have text passages, each of which is stored - as an REXML::Text object: - - doc.texts.each {|t| p [t.class, t] } - - Output: - - [REXML::Text, "\n"] - -[Processing Instructions] - - A document may have processing instructions, which are stored - as REXML::Instruction objects: - - - - Output: - - [REXML::Instruction, ] - [REXML::Instruction, ] - -[Comments] - - A document may have comments, which are stored - as REXML::Comment objects: - - my_xml = <<-EOT - - - EOT - my_doc = Document.new(my_xml) - my_doc.comments.each {|c| p [c.class, c] } - - Output: - - [REXML::Comment, # ... , @string="foo">] - [REXML::Comment, # ... , @string="bar">] - -[CDATA] - - A document may have CDATA entries, which are stored - as REXML::CData objects: - - my_xml = <<-EOT - - - EOT - my_doc = Document.new(my_xml) - my_doc.cdatas.each {|cd| p [cd.class, cd] } - - Output: - - [REXML::CData, "foo"] - [REXML::CData, "bar"] - -The payload of a document is a tree of nodes, descending from the root element: - - doc.root.children.each do |child| - p [child, child.class] - end - -Output: - - [REXML::Text, "\n\n"] - [REXML::Element, ... ] - [REXML::Text, "\n\n"] - [REXML::Element, ... ] - [REXML::Text, "\n\n"] - [REXML::Element, ... ] - [REXML::Text, "\n\n"] - [REXML::Element, ... ] - [REXML::Text, "\n\n"] - -== Exploring an Element - -An REXML::Element object represents an XML element. - -The object inherits from its ancestor classes: - -- REXML::Child (includes module REXML::Node) - - REXML::Parent (includes module {Enumerable}[rdoc-ref:Enumerable]). - - REXML::Element (includes module REXML::Namespace). - -This section covers methods: - -- Defined in REXML::Element itself. -- Inherited from REXML::Parent and REXML::Child. -- Included from REXML::Node. - -=== Inside the Element - -[Brief String Representation] - - Use method REXML::Element#inspect to retrieve a brief string representation. - - doc.root.inspect # => " ... " - - The ellipsis (...) indicates that the element has children. - When there are no children, the ellipsis is omitted: - - Element.new('foo').inspect # => "" - - If the element has attributes, those are also included: - - doc.root.elements.first.inspect # => " ... " - -[Extended String Representation] - - Use inherited method REXML::Child.bytes to retrieve an extended - string representation. - - doc.root.bytes # => "\n\n\n Everyday Italian\n Giada De Laurentiis\n 2005\n 30.00\n\n\n\n Harry Potter\n J K. Rowling\n 2005\n 29.99\n\n\n\n XQuery Kick Start\n James McGovern\n Per Bothner\n Kurt Cagle\n James Linn\n Vaidyanathan Nagarajan\n 2003\n 49.99\n\n\n\n Learning XML\n Erik T. Ray\n 2003\n 39.95\n\n\n" - -[Node Type] - - Use method REXML::Element#node_type to retrieve the node type (always +:element+): - - doc.root.node_type # => :element - -[Raw Mode] - - Use method REXML::Element#raw to retrieve whether (+true+ or +nil+) - raw mode is set. - - doc.root.raw # => nil - -[Context] - - Use method REXML::Element#context to retrieve the context hash - (see {Element Context}[../context_rdoc.html]): - - doc.root.context # => {} - -=== Relationships - -An element may have: - -- Ancestors. -- Siblings. -- Children. - -==== Ancestors - -[Containing Document] - - Use method REXML::Element#document to retrieve the containing document, if any: - - ele = doc.root.elements.first # => ... - ele.document # => ... - ele = Element.new('foo') # => - ele.document # => nil - -[Root Element] - - Use method REXML::Element#root to retrieve the root element: - - ele = doc.root.elements.first # => ... - ele.root # => ... - ele = Element.new('foo') # => - ele.root # => - -[Root Node] - - Use method REXML::Element#root_node to retrieve the most distant ancestor, - which is the containing document, if any, otherwise the root element: - - ele = doc.root.elements.first # => ... - ele.root_node # => ... - ele = Element.new('foo') # => - ele.root_node # => - -[Parent] - - Use inherited method REXML::Child#parent to retrieve the parent - - ele = doc.root # => ... - ele.parent # => ... - ele = doc.root.elements.first # => ... - ele.parent # => ... - - Use included method REXML::Node#index_in_parent to retrieve the index - of the element among all of its parents children (not just the element children). - Note that while the index for doc.root.elements[n] is 1-based, - the returned index is 0-based. - - doc.root.children # => - # ["\n\n", - # ... , - # "\n\n", - # ... , - # "\n\n", - # ... , - # "\n\n", - # ... , - # "\n\n"] - ele = doc.root.elements[1] # => ... - ele.index_in_parent # => 2 - ele = doc.root.elements[2] # => ... - ele.index_in_parent# => 4 - -==== Siblings - -[Next Element] - - Use method REXML::Element#next_element to retrieve the first following - sibling that is itself an element (+nil+ if there is none): - - ele = doc.root.elements[1] - while ele do - p [ele.class, ele] - ele = ele.next_element - end - p ele - - Output: - - [REXML::Element, ... ] - [REXML::Element, ... ] - [REXML::Element, ... ] - [REXML::Element, ... ] - -[Previous Element] - - Use method REXML::Element#previous_element to retrieve the first preceding - sibling that is itself an element (+nil+ if there is none): - - ele = doc.root.elements[4] - while ele do - p [ele.class, ele] - ele = ele.previous_element - end - p ele - - Output: - - [REXML::Element, ... ] - [REXML::Element, ... ] - [REXML::Element, ... ] - [REXML::Element, ... ] - -[Next Node] - - Use included method REXML::Node.next_sibling_node - (or its alias next_sibling) to retrieve the first following node - regardless of its class: - - node = doc.root.children[0] - while node do - p [node.class, node] - node = node.next_sibling - end - p node - - Output: - - [REXML::Text, "\n\n"] - [REXML::Element, ... ] - [REXML::Text, "\n\n"] - [REXML::Element, ... ] - [REXML::Text, "\n\n"] - [REXML::Element, ... ] - [REXML::Text, "\n\n"] - [REXML::Element, ... ] - [REXML::Text, "\n\n"] - -[Previous Node] - - Use included method REXML::Node.previous_sibling_node - (or its alias previous_sibling) to retrieve the first preceding node - regardless of its class: - - node = doc.root.children[-1] - while node do - p [node.class, node] - node = node.previous_sibling - end - p node - - Output: - - [REXML::Text, "\n\n"] - [REXML::Element, ... ] - [REXML::Text, "\n\n"] - [REXML::Element, ... ] - [REXML::Text, "\n\n"] - [REXML::Element, ... ] - [REXML::Text, "\n\n"] - [REXML::Element, ... ] - [REXML::Text, "\n\n"] - -==== Children - -[Child Count] - - Use inherited method REXML::Parent.size to retrieve the count - of nodes (of all types) in the element: - - doc.root.size # => 9 - -[Child Nodes] - - Use inherited method REXML::Parent.children to retrieve an array - of the child nodes (of all types): - - doc.root.children # => - # ["\n\n", - # ... , - # "\n\n", - # ... , - # "\n\n", - # ... , - # "\n\n", - # ... , - # "\n\n"] - -[Child at Index] - - Use method REXML::Element#[] to retrieve the child at a given numerical index, - or +nil+ if there is no such child: - - doc.root[0] # => "\n\n" - doc.root[1] # => ... - doc.root[7] # => ... - doc.root[8] # => "\n\n" - - doc.root[-1] # => "\n\n" - doc.root[-2] # => ... - - doc.root[50] # => nil - -[Index of Child] - - Use method REXML::Parent#index to retrieve the zero-based child index - of the given object, or #size - 1 if there is no such child: - - ele = doc.root # => ... - ele.index(ele[0]) # => 0 - ele.index(ele[1]) # => 1 - ele.index(ele[7]) # => 7 - ele.index(ele[8]) # => 8 - - ele.index(ele[-1]) # => 8 - ele.index(ele[-2]) # => 7 - - ele.index(ele[50]) # => 8 - -[Element Children] - - Use method REXML::Element#has_elements? to retrieve whether the element - has element children: - - doc.root.has_elements? # => true - REXML::Element.new('foo').has_elements? # => false - - Use method REXML::Element#elements to retrieve the REXML::Elements object - containing the element children: - - eles = doc.root.elements - eles # => # ... > - eles.size # => 4 - eles.each {|e| p [e.class], e } - - Output: - - [ ... , - ... , - ... , - ... - ] - -Note that while in this example, all the element children of the root element are -elements of the same name, 'book', that is not true of all documents; -a root element (or any other element) may have any mixture of child elements. - -[CDATA Children] - - Use method REXML::Element#cdatas to retrieve a frozen array of CDATA children: - - my_xml = <<-EOT - - - - - EOT - my_doc = REXML::Document.new(my_xml) - cdatas my_doc.root.cdatas - cdatas.frozen? # => true - cdatas.map {|cd| cd.class } # => [REXML::CData, REXML::CData] - -[Comment Children] - - Use method REXML::Element#comments to retrieve a frozen array of comment children: - - my_xml = <<-EOT - - - - - EOT - my_doc = REXML::Document.new(my_xml) - comments = my_doc.root.comments - comments.frozen? # => true - comments.map {|c| c.class } # => [REXML::Comment, REXML::Comment] - comments.map {|c| c.to_s } # => ["foo", "bar"] - -[Processing Instruction Children] - - Use method REXML::Element#instructions to retrieve a frozen array - of processing instruction children: - - my_xml = <<-EOT - - - - - EOT - my_doc = REXML::Document.new(my_xml) - instrs = my_doc.root.instructions - instrs.frozen? # => true - instrs.map {|i| i.class } # => [REXML::Instruction, REXML::Instruction] - instrs.map {|i| i.to_s } # => ["", ""] - -[Text Children] - - Use method REXML::Element#has_text? to retrieve whether the element - has text children: - - doc.root.has_text? # => true - REXML::Element.new('foo').has_text? # => false - - Use method REXML::Element#texts to retrieve a frozen array of text children: - - my_xml = 'textmore' - my_doc = REXML::Document.new(my_xml) - texts = my_doc.root.texts - texts.frozen? # => true - texts.map {|t| t.class } # => [REXML::Text, REXML::Text] - texts.map {|t| t.to_s } # => ["text", "more"] - -[Parenthood] - - Use inherited method REXML::Parent.parent? to retrieve whether the element is a parent; - always returns +true+; only REXML::Child#parent returns +false+. - - doc.root.parent? # => true - -=== Element Attributes - -Use method REXML::Element#has_attributes? to return whether the element -has attributes: - - ele = doc.root # => ... - ele.has_attributes? # => false - ele = ele.elements.first # => ... - ele.has_attributes? # => true - -Use method REXML::Element#attributes to return the hash -containing the attributes for the element. -Each hash key is a string attribute name; -each hash value is an REXML::Attribute object. - - ele = doc.root # => ... - attrs = ele.attributes # => {} - - ele = ele.elements.first # => ... - attrs = ele.attributes # => {"category"=>category='cooking'} - attrs.size # => 1 - attr_name = attrs.keys.first # => "category" - attr_name.class # => String - attr_value = attrs.values.first # => category='cooking' - attr_value.class # => REXML::Attribute - -Use method REXML::Element#[] to retrieve the string value for a given attribute, -which may be given as either a string or a symbol: - - ele = doc.root.elements.first # => ... - attr_value = ele['category'] # => "cooking" - attr_value.class # => String - ele['nosuch'] # => nil - -Use method REXML::Element#attribute to retrieve the value of a named attribute: - - my_xml = "" - my_doc = REXML::Document.new(my_xml) - my_doc.root.attribute("x") # => x='x' - my_doc.root.attribute("x", "a") # => a:x='a:x' - -== Whitespace - -Use method REXML::Element#ignore_whitespace_nodes to determine whether -whitespace nodes were ignored when the XML was parsed; -returns +true+ if so, +nil+ otherwise. - -Use method REXML::Element#whitespace to determine whether whitespace -is respected for the element; returns +true+ if so, +false+ otherwise. - -== Namespaces - -Use method REXML::Element#namespace to retrieve the string namespace URI -for the element, which may derive from one of its ancestors: - - xml_string = <<-EOT - - - - - - - EOT - d = Document.new(xml_string) - b = d.elements['//b'] - b.namespace # => "1" - b.namespace('y') # => "2" - b.namespace('nosuch') # => nil - -Use method REXML::Element#namespaces to retrieve a hash of all defined namespaces -in the element and its ancestors: - - xml_string = <<-EOT - - - - - - - EOT - d = Document.new(xml_string) - d.elements['//a'].namespaces # => {"x"=>"1", "y"=>"2"} - d.elements['//b'].namespaces # => {"x"=>"1", "y"=>"2"} - d.elements['//c'].namespaces # => {"x"=>"1", "y"=>"2", "z"=>"3"} - -Use method REXML::Element#prefixes to retrieve an array of the string prefixes (names) -of all defined namespaces in the element and its ancestors: - - xml_string = <<-EOT - - - - - - - EOT - d = Document.new(xml_string, {compress_whitespace: :all}) - d.elements['//a'].prefixes # => ["x", "y"] - d.elements['//b'].prefixes # => ["x", "y"] - d.elements['//c'].prefixes # => ["x", "y", "z"] - -== Traversing - -You can use certain methods to traverse children of the element. -Each child that meets given criteria is yielded to the given block. - -[Traverse All Children] - - Use inherited method REXML::Parent#each (or its alias #each_child) to traverse - all children of the element: - - doc.root.each {|child| p [child.class, child] } - - Output: - - [REXML::Text, "\n\n"] - [REXML::Element, ... ] - [REXML::Text, "\n\n"] - [REXML::Element, ... ] - [REXML::Text, "\n\n"] - [REXML::Element, ... ] - [REXML::Text, "\n\n"] - [REXML::Element, ... ] - [REXML::Text, "\n\n"] - -[Traverse Element Children] - - Use method REXML::Element#each_element to traverse only the element children - of the element: - - doc.root.each_element {|e| p [e.class, e] } - - Output: - - [REXML::Element, ... ] - [REXML::Element, ... ] - [REXML::Element, ... ] - [REXML::Element, ... ] - -[Traverse Element Children with Attribute] - - Use method REXML::Element#each_element_with_attribute with the single argument - +attr_name+ to traverse each element child that has the given attribute: - - my_doc = Document.new '' - my_doc.root.each_element_with_attribute('id') {|e| p [e.class, e] } - - Output: - - [REXML::Element, ] - [REXML::Element, ] - [REXML::Element, ] - - Use the same method with a second argument +value+ to traverse - each element child element that has the given attribute and value: - - my_doc.root.each_element_with_attribute('id', '1') {|e| p [e.class, e] } - - Output: - - [REXML::Element, ] - [REXML::Element, ] - - Use the same method with a third argument +max+ to traverse - no more than the given number of element children: - - my_doc.root.each_element_with_attribute('id', '1', 1) {|e| p [e.class, e] } - - Output: - - [REXML::Element, ] - - Use the same method with a fourth argument +xpath+ to traverse - only those element children that match the given xpath: - - my_doc.root.each_element_with_attribute('id', '1', 2, '//d') {|e| p [e.class, e] } - - Output: - - [REXML::Element, ] - -[Traverse Element Children with Text] - - Use method REXML::Element#each_element_with_text with no arguments - to traverse those element children that have text: - - my_doc = Document.new 'bbd' - my_doc.root.each_element_with_text {|e| p [e.class, e] } - - Output: - - [REXML::Element, ... ] - [REXML::Element, ... ] - [REXML::Element, ... ] - - Use the same method with the single argument +text+ to traverse - those element children that have exactly that text: - - my_doc.root.each_element_with_text('b') {|e| p [e.class, e] } - - Output: - - [REXML::Element, ... ] - [REXML::Element, ... ] - - Use the same method with additional second argument +max+ to traverse - no more than the given number of element children: - - my_doc.root.each_element_with_text('b', 1) {|e| p [e.class, e] } - - Output: - - [REXML::Element, ... ] - - Use the same method with additional third argument +xpath+ to traverse - only those element children that also match the given xpath: - - my_doc.root.each_element_with_text('b', 2, '//c') {|e| p [e.class, e] } - - Output: - - [REXML::Element, ... ] - -[Traverse Element Children's Indexes] - - Use inherited method REXML::Parent#each_index to traverse all children's indexes - (not just those of element children): - - doc.root.each_index {|i| print i } - - Output: - - 012345678 - -[Traverse Children Recursively] - - Use included method REXML::Node#each_recursive to traverse all children recursively: - - doc.root.each_recursive {|child| p [child.class, child] } - - Output: - - [REXML::Element, ... ] - [REXML::Element, ... </>] - [REXML::Element, <author> ... </>] - [REXML::Element, <year> ... </>] - [REXML::Element, <price> ... </>] - [REXML::Element, <book category='children'> ... </>] - [REXML::Element, <title lang='en'> ... </>] - [REXML::Element, <author> ... </>] - [REXML::Element, <year> ... </>] - [REXML::Element, <price> ... </>] - [REXML::Element, <book category='web'> ... </>] - [REXML::Element, <title lang='en'> ... </>] - [REXML::Element, <author> ... </>] - [REXML::Element, <author> ... </>] - [REXML::Element, <author> ... </>] - [REXML::Element, <author> ... </>] - [REXML::Element, <author> ... </>] - [REXML::Element, <year> ... </>] - [REXML::Element, <price> ... </>] - [REXML::Element, <book category='web' cover='paperback'> ... </>] - [REXML::Element, <title lang='en'> ... </>] - [REXML::Element, <author> ... </>] - [REXML::Element, <year> ... </>] - [REXML::Element, <price> ... </>] - -== Searching - -You can use certain methods to search among the descendants of an element. - -Use method REXML::Element#get_elements to retrieve all element children of the element -that match the given +xpath+: - - xml_string = <<-EOT - <root> - <a level='1'> - <a level='2'/> - </a> - </root> - EOT - d = Document.new(xml_string) - d.root.get_elements('//a') # => [<a level='1'> ... </>, <a level='2'/>] - -Use method REXML::Element#get_text with no argument to retrieve the first text node -in the first child: - - my_doc = Document.new "<p>some text <b>this is bold!</b> more text</p>" - text_node = my_doc.root.get_text - text_node.class # => REXML::Text - text_node.to_s # => "some text " - -Use the same method with argument +xpath+ to retrieve the first text node -in the first child that matches the xpath: - - my_doc.root.get_text(1) # => "this is bold!" - -Use method REXML::Element#text with no argument to retrieve the text -from the first text node in the first child: - - my_doc = Document.new "<p>some text <b>this is bold!</b> more text</p>" - text_node = my_doc.root.text - text_node.class # => String - text_node # => "some text " - -Use the same method with argument +xpath+ to retrieve the text from the first text node -in the first child that matches the xpath: - - my_doc.root.text(1) # => "this is bold!" - -Use included method REXML::Node#find_first_recursive -to retrieve the first descendant element -for which the given block returns a truthy value, or +nil+ if none: - - doc.root.find_first_recursive do |ele| - ele.name == 'price' - end # => <price> ... </> - doc.root.find_first_recursive do |ele| - ele.name == 'nosuch' - end # => nil - -== Editing - -=== Editing a Document - -[Creating a Document] - - Create a new document with method REXML::Document::new: - - doc = Document.new(source_string) - empty_doc = REXML::Document.new - -[Adding to the Document] - - Add an XML declaration with method REXML::Document#add - and an argument of type REXML::XMLDecl: - - my_doc = Document.new - my_doc.xml_decl.to_s # => "" - my_doc.add(XMLDecl.new('2.0')) - my_doc.xml_decl.to_s # => "<?xml version='2.0'?>" - - Add a document type with method REXML::Document#add - and an argument of type REXML::DocType: - - my_doc = Document.new - my_doc.doctype.to_s # => "" - my_doc.add(DocType.new('foo')) - my_doc.doctype.to_s # => "<!DOCTYPE foo>" - - Add a node of any other REXML type with method REXML::Document#add and an argument - that is not of type REXML::XMLDecl or REXML::DocType: - - my_doc = Document.new - my_doc.add(Element.new('foo')) - my_doc.to_s # => "<foo/>" - - Add an existing element as the root element with method REXML::Document#add_element: - - ele = Element.new('foo') - my_doc = Document.new - my_doc.add_element(ele) - my_doc.root # => <foo/> - - Create and add an element as the root element with method REXML::Document#add_element: - - my_doc = Document.new - my_doc.add_element('foo') - my_doc.root # => <foo/> - -=== Editing an Element - -==== Creating an Element - -Create a new element with method REXML::Element::new: - - ele = Element.new('foo') # => <foo/> - -==== Setting Element Properties - -Set the context for an element with method REXML::Element#context= -(see {Element Context}[../context_rdoc.html]): - - ele.context # => nil - ele.context = {ignore_whitespace_nodes: :all} - ele.context # => {:ignore_whitespace_nodes=>:all} - -Set the parent for an element with inherited method REXML::Child#parent= - - ele.parent # => nil - ele.parent = Element.new('bar') - ele.parent # => <bar/> - -Set the text for an element with method REXML::Element#text=: - - ele.text # => nil - ele.text = 'bar' - ele.text # => "bar" - -==== Adding to an Element - -Add a node as the last child with inherited method REXML::Parent#add (or its alias #push): - - ele = Element.new('foo') # => <foo/> - ele.push(Text.new('bar')) - ele.push(Element.new('baz')) - ele.children # => ["bar", <baz/>] - -Add a node as the first child with inherited method REXML::Parent#unshift: - - ele = Element.new('foo') # => <foo/> - ele.unshift(Element.new('bar')) - ele.unshift(Text.new('baz')) - ele.children # => ["bar", <baz/>] - -Add an element as the last child with method REXML::Element#add_element: - - ele = Element.new('foo') # => <foo/> - ele.add_element('bar') - ele.add_element(Element.new('baz')) - ele.children # => [<bar/>, <baz/>] - -Add a text node as the last child with method REXML::Element#add_text: - - ele = Element.new('foo') # => <foo/> - ele.add_text('bar') - ele.add_text(Text.new('baz')) - ele.children # => ["bar", "baz"] - -Insert a node before a given node with method REXML::Parent#insert_before: - - ele = Element.new('foo') # => <foo/> - ele.add_text('bar') - ele.add_text(Text.new('baz')) - ele.children # => ["bar", "baz"] - target = ele[1] # => "baz" - ele.insert_before(target, Text.new('bat')) - ele.children # => ["bar", "bat", "baz"] - -Insert a node after a given node with method REXML::Parent#insert_after: - - ele = Element.new('foo') # => <foo/> - ele.add_text('bar') - ele.add_text(Text.new('baz')) - ele.children # => ["bar", "baz"] - target = ele[0] # => "bar" - ele.insert_after(target, Text.new('bat')) - ele.children # => ["bar", "bat", "baz"] - -Add an attribute with method REXML::Element#add_attribute: - - ele = Element.new('foo') # => <foo/> - ele.add_attribute('bar', 'baz') - ele.add_attribute(Attribute.new('bat', 'bam')) - ele.attributes # => {"bar"=>bar='baz', "bat"=>bat='bam'} - -Add multiple attributes with method REXML::Element#add_attributes: - - ele = Element.new('foo') # => <foo/> - ele.add_attributes({'bar' => 'baz', 'bat' => 'bam'}) - ele.add_attributes([['ban', 'bap'], ['bah', 'bad']]) - ele.attributes # => {"bar"=>bar='baz', "bat"=>bat='bam', "ban"=>ban='bap', "bah"=>bah='bad'} - -Add a namespace with method REXML::Element#add_namespace: - - ele = Element.new('foo') # => <foo/> - ele.add_namespace('bar') - ele.add_namespace('baz', 'bat') - ele.namespaces # => {"xmlns"=>"bar", "baz"=>"bat"} - -==== Deleting from an Element - -Delete a specific child object with inherited method REXML::Parent#delete: - - ele = Element.new('foo') # => <foo/> - ele.add_element('bar') - ele.add_text('baz') - ele.children # => [<bar/>, "baz"] - target = ele[1] # => "baz" - ele.delete(target) # => "baz" - ele.children # => [<bar/>] - target = ele[0] # => <baz/> - ele.delete(target) # => <baz/> - ele.children # => [] - -Delete a child at a specific index with inherited method REXML::Parent#delete_at: - - ele = Element.new('foo') # => <foo/> - ele.add_element('bar') - ele.add_text('baz') - ele.children # => [<bar/>, "baz"] - ele.delete_at(1) - ele.children # => [<bar/>] - ele.delete_at(0) - ele.children # => [] - -Delete all children meeting a specified criterion with inherited method -REXML::Parent#delete_if: - - ele = Element.new('foo') # => <foo/> - ele.add_element('bar') - ele.add_text('baz') - ele.add_element('bat') - ele.add_text('bam') - ele.children # => [<bar/>, "baz", <bat/>, "bam"] - ele.delete_if {|child| child.instance_of?(Text) } - ele.children # => [<bar/>, <bat/>] - -Delete an element at a specific 1-based index with method REXML::Element#delete_element: - - ele = Element.new('foo') # => <foo/> - ele.add_element('bar') - ele.add_text('baz') - ele.add_element('bat') - ele.add_text('bam') - ele.children # => [<bar/>, "baz", <bat/>, "bam"] - ele.delete_element(2) # => <bat/> - ele.children # => [<bar/>, "baz", "bam"] - ele.delete_element(1) # => <bar/> - ele.children # => ["baz", "bam"] - -Delete a specific element with the same method: - - ele = Element.new('foo') # => <foo/> - ele.add_element('bar') - ele.add_text('baz') - ele.add_element('bat') - ele.add_text('bam') - ele.children # => [<bar/>, "baz", <bat/>, "bam"] - target = ele.elements[2] # => <bat/> - ele.delete_element(target) # => <bat/> - ele.children # => [<bar/>, "baz", "bam"] - -Delete an element matching an xpath using the same method: - - ele = Element.new('foo') # => <foo/> - ele.add_element('bar') - ele.add_text('baz') - ele.add_element('bat') - ele.add_text('bam') - ele.children # => [<bar/>, "baz", <bat/>, "bam"] - ele.delete_element('./bat') # => <bat/> - ele.children # => [<bar/>, "baz", "bam"] - ele.delete_element('./bar') # => <bar/> - ele.children # => ["baz", "bam"] - -Delete an attribute by name with method REXML::Element#delete_attribute: - - ele = Element.new('foo') # => <foo/> - ele.add_attributes({'bar' => 'baz', 'bam' => 'bat'}) - ele.attributes # => {"bar"=>bar='baz', "bam"=>bam='bat'} - ele.delete_attribute('bam') - ele.attributes # => {"bar"=>bar='baz'} - -Delete a namespace with method REXML::Element#delete_namespace: - - ele = Element.new('foo') # => <foo/> - ele.add_namespace('bar') - ele.add_namespace('baz', 'bat') - ele.namespaces # => {"xmlns"=>"bar", "baz"=>"bat"} - ele.delete_namespace('xmlns') - ele.namespaces # => {} # => {"baz"=>"bat"} - ele.delete_namespace('baz') - ele.namespaces # => {} # => {} - -Remove an element from its parent with inherited method REXML::Child#remove: - - ele = Element.new('foo') # => <foo/> - parent = Element.new('bar') # => <bar/> - parent.add_element(ele) # => <foo/> - parent.children.size # => 1 - ele.remove # => <foo/> - parent.children.size # => 0 - -==== Replacing Nodes - -Replace the node at a given 0-based index with inherited method REXML::Parent#[]=: - - ele = Element.new('foo') # => <foo/> - ele.add_element('bar') - ele.add_text('baz') - ele.add_element('bat') - ele.add_text('bam') - ele.children # => [<bar/>, "baz", <bat/>, "bam"] - ele[2] = Text.new('bad') # => "bad" - ele.children # => [<bar/>, "baz", "bad", "bam"] - -Replace a given node with another node with inherited method REXML::Parent#replace_child: - - ele = Element.new('foo') # => <foo/> - ele.add_element('bar') - ele.add_text('baz') - ele.add_element('bat') - ele.add_text('bam') - ele.children # => [<bar/>, "baz", <bat/>, "bam"] - target = ele[2] # => <bat/> - ele.replace_child(target, Text.new('bah')) - ele.children # => [<bar/>, "baz", "bah", "bam"] - -Replace +self+ with a given node with inherited method REXML::Child#replace_with: - - ele = Element.new('foo') # => <foo/> - ele.add_element('bar') - ele.add_text('baz') - ele.add_element('bat') - ele.add_text('bam') - ele.children # => [<bar/>, "baz", <bat/>, "bam"] - target = ele[2] # => <bat/> - target.replace_with(Text.new('bah')) - ele.children # => [<bar/>, "baz", "bah", "bam"] - -=== Cloning - -Create a shallow clone of an element with method REXML::Element#clone. -The clone contains the name and attributes, but not the parent or children: - - ele = Element.new('foo') - ele.add_attributes({'bar' => 0, 'baz' => 1}) - ele.clone # => <foo bar='0' baz='1'/> - -Create a shallow clone of a document with method REXML::Document#clone. -The XML declaration is copied; the document type and root element are not cloned: - - my_xml = '<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE foo><root/>' - my_doc = Document.new(my_xml) - clone_doc = my_doc.clone - - my_doc.xml_decl # => <?xml ... ?> - clone_doc.xml_decl # => <?xml ... ?> - - my_doc.doctype.to_s # => "<?xml version='1.0' encoding='UTF-8'?>" - clone_doc.doctype.to_s # => "" - - my_doc.root # => <root/> - clone_doc.root # => nil - -Create a deep clone of an element with inherited method REXML::Parent#deep_clone. -All nodes and attributes are copied: - - doc.to_s.size # => 825 - clone = doc.deep_clone - clone.to_s.size # => 825 - -== Writing the Document - -Write a document to an \IO stream (defaults to <tt>$stdout</tt>) -with method REXML::Document#write: - - doc.write - -Output: - - <?xml version='1.0' encoding='UTF-8'?> - <bookstore> - - <book category='cooking'> - <title lang='en'>Everyday Italian - Giada De Laurentiis - 2005 - 30.00 - - - - Harry Potter - J K. Rowling - 2005 - 29.99 - - - - XQuery Kick Start - James McGovern - Per Bothner - Kurt Cagle - James Linn - Vaidyanathan Nagarajan - 2003 - 49.99 - - - - Learning XML - Erik T. Ray - 2003 - 39.95 - - - diff --git a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml.rb b/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml.rb deleted file mode 100644 index eee246e4..00000000 --- a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml.rb +++ /dev/null @@ -1,3 +0,0 @@ -# frozen_string_literal: true - -require_relative "rexml/document" diff --git a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/attlistdecl.rb b/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/attlistdecl.rb deleted file mode 100644 index 44a91d66..00000000 --- a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/attlistdecl.rb +++ /dev/null @@ -1,63 +0,0 @@ -# frozen_string_literal: false -#vim:ts=2 sw=2 noexpandtab: -require_relative 'child' -require_relative 'source' - -module REXML - # This class needs: - # * Documentation - # * Work! Not all types of attlists are intelligently parsed, so we just - # spew back out what we get in. This works, but it would be better if - # we formatted the output ourselves. - # - # AttlistDecls provide *just* enough support to allow namespace - # declarations. If you need some sort of generalized support, or have an - # interesting idea about how to map the hideous, terrible design of DTD - # AttlistDecls onto an intuitive Ruby interface, let me know. I'm desperate - # for anything to make DTDs more palateable. - class AttlistDecl < Child - include Enumerable - - # What is this? Got me. - attr_reader :element_name - - # Create an AttlistDecl, pulling the information from a Source. Notice - # that this isn't very convenient; to create an AttlistDecl, you basically - # have to format it yourself, and then have the initializer parse it. - # Sorry, but for the foreseeable future, DTD support in REXML is pretty - # weak on convenience. Have I mentioned how much I hate DTDs? - def initialize(source) - super() - if (source.kind_of? Array) - @element_name, @pairs, @contents = *source - end - end - - # Access the attlist attribute/value pairs. - # value = attlist_decl[ attribute_name ] - def [](key) - @pairs[key] - end - - # Whether an attlist declaration includes the given attribute definition - # if attlist_decl.include? "xmlns:foobar" - def include?(key) - @pairs.keys.include? key - end - - # Iterate over the key/value pairs: - # attlist_decl.each { |attribute_name, attribute_value| ... } - def each(&block) - @pairs.each(&block) - end - - # Write out exactly what we got in. - def write out, indent=-1 - out << @contents - end - - def node_type - :attlistdecl - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/attribute.rb b/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/attribute.rb deleted file mode 100644 index 11893a95..00000000 --- a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/attribute.rb +++ /dev/null @@ -1,210 +0,0 @@ -# frozen_string_literal: true -require_relative "namespace" -require_relative 'text' - -module REXML - # Defines an Element Attribute; IE, a attribute=value pair, as in: - # . Attributes can be in their own - # namespaces. General users of REXML will not interact with the - # Attribute class much. - class Attribute - include Node - include Namespace - - # The element to which this attribute belongs - attr_reader :element - PATTERN = /\s*(#{NAME_STR})\s*=\s*(["'])(.*?)\2/um - - NEEDS_A_SECOND_CHECK = /(<|&((#{Entity::NAME});|(#0*((?:\d+)|(?:x[a-fA-F0-9]+)));)?)/um - - # Constructor. - # FIXME: The parser doesn't catch illegal characters in attributes - # - # first:: - # Either: an Attribute, which this new attribute will become a - # clone of; or a String, which is the name of this attribute - # second:: - # If +first+ is an Attribute, then this may be an Element, or nil. - # If nil, then the Element parent of this attribute is the parent - # of the +first+ Attribute. If the first argument is a String, - # then this must also be a String, and is the content of the attribute. - # If this is the content, it must be fully normalized (contain no - # illegal characters). - # parent:: - # Ignored unless +first+ is a String; otherwise, may be the Element - # parent of this attribute, or nil. - # - # - # Attribute.new( attribute_to_clone ) - # Attribute.new( attribute_to_clone, parent_element ) - # Attribute.new( "attr", "attr_value" ) - # Attribute.new( "attr", "attr_value", parent_element ) - def initialize( first, second=nil, parent=nil ) - @normalized = @unnormalized = @element = nil - if first.kind_of? Attribute - self.name = first.expanded_name - @unnormalized = first.value - if second.kind_of? Element - @element = second - else - @element = first.element - end - elsif first.kind_of? String - @element = parent - self.name = first - @normalized = second.to_s - else - raise "illegal argument #{first.class.name} to Attribute constructor" - end - end - - # Returns the namespace of the attribute. - # - # e = Element.new( "elns:myelement" ) - # e.add_attribute( "nsa:a", "aval" ) - # e.add_attribute( "b", "bval" ) - # e.attributes.get_attribute( "a" ).prefix # -> "nsa" - # e.attributes.get_attribute( "b" ).prefix # -> "" - # a = Attribute.new( "x", "y" ) - # a.prefix # -> "" - def prefix - super - end - - # Returns the namespace URL, if defined, or nil otherwise - # - # e = Element.new("el") - # e.add_namespace("ns", "http://url") - # e.add_attribute("ns:a", "b") - # e.add_attribute("nsx:a", "c") - # e.attribute("ns:a").namespace # => "http://url" - # e.attribute("nsx:a").namespace # => nil - # - # This method always returns "" for no namespace attribute. Because - # the default namespace doesn't apply to attribute names. - # - # From https://www.w3.org/TR/xml-names/#uniqAttrs - # - # > the default namespace does not apply to attribute names - # - # e = REXML::Element.new("el") - # e.add_namespace("", "http://example.com/") - # e.namespace # => "http://example.com/" - # e.add_attribute("a", "b") - # e.attribute("a").namespace # => "" - def namespace arg=nil - arg = prefix if arg.nil? - if arg == "" - "" - else - @element.namespace(arg) - end - end - - # Returns true if other is an Attribute and has the same name and value, - # false otherwise. - def ==( other ) - other.kind_of?(Attribute) and other.name==name and other.value==value - end - - # Creates (and returns) a hash from both the name and value - def hash - name.hash + value.hash - end - - # Returns this attribute out as XML source, expanding the name - # - # a = Attribute.new( "x", "y" ) - # a.to_string # -> "x='y'" - # b = Attribute.new( "ns:x", "y" ) - # b.to_string # -> "ns:x='y'" - def to_string - value = to_s - if @element and @element.context and @element.context[:attribute_quote] == :quote - value = value.gsub('"', '"') if value.include?('"') - %Q^#@expanded_name="#{value}"^ - else - value = value.gsub("'", ''') if value.include?("'") - "#@expanded_name='#{value}'" - end - end - - def doctype - if @element - doc = @element.document - doc.doctype if doc - end - end - - # Returns the attribute value, with entities replaced - def to_s - return @normalized if @normalized - - @normalized = Text::normalize( @unnormalized, doctype ) - @normalized - end - - # Returns the UNNORMALIZED value of this attribute. That is, entities - # have been expanded to their values - def value - return @unnormalized if @unnormalized - @unnormalized = Text::unnormalize( @normalized, doctype ) - @unnormalized - end - - # The normalized value of this attribute. That is, the attribute with - # entities intact. - def normalized=(new_normalized) - @normalized = new_normalized - @unnormalized = nil - end - - # Returns a copy of this attribute - def clone - Attribute.new self - end - - # Sets the element of which this object is an attribute. Normally, this - # is not directly called. - # - # Returns this attribute - def element=( element ) - @element = element - - if @normalized - Text.check( @normalized, NEEDS_A_SECOND_CHECK, doctype ) - end - - self - end - - # Removes this Attribute from the tree, and returns true if successful - # - # This method is usually not called directly. - def remove - @element.attributes.delete self.name unless @element.nil? - end - - # Writes this attribute (EG, puts 'key="value"' to the output) - def write( output, indent=-1 ) - output << to_string - end - - def node_type - :attribute - end - - def inspect - rv = +"" - write( rv ) - rv - end - - def xpath - path = @element.xpath - path += "/@#{self.expanded_name}" - return path - end - end -end -#vim:ts=2 sw=2 noexpandtab: diff --git a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/cdata.rb b/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/cdata.rb deleted file mode 100644 index 997f5a08..00000000 --- a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/cdata.rb +++ /dev/null @@ -1,68 +0,0 @@ -# frozen_string_literal: false -require_relative "text" - -module REXML - class CData < Text - START = '' - ILLEGAL = /(\]\]>)/ - - # Constructor. CData is data between - # - # _Examples_ - # CData.new( source ) - # CData.new( "Here is some CDATA" ) - # CData.new( "Some unprocessed data", respect_whitespace_TF, parent_element ) - def initialize( first, whitespace=true, parent=nil ) - super( first, whitespace, parent, false, true, ILLEGAL ) - end - - # Make a copy of this object - # - # _Examples_ - # c = CData.new( "Some text" ) - # d = c.clone - # d.to_s # -> "Some text" - def clone - CData.new self - end - - # Returns the content of this CData object - # - # _Examples_ - # c = CData.new( "Some text" ) - # c.to_s # -> "Some text" - def to_s - @string - end - - def value - @string - end - - # == DEPRECATED - # See the rexml/formatters package - # - # Generates XML output of this object - # - # output:: - # Where to write the string. Defaults to $stdout - # indent:: - # The amount to indent this node by - # transitive:: - # Ignored - # ie_hack:: - # Ignored - # - # _Examples_ - # c = CData.new( " Some text " ) - # c.write( $stdout ) #-> - def write( output=$stdout, indent=-1, transitive=false, ie_hack=false ) - Kernel.warn( "#{self.class.name}.write is deprecated", uplevel: 1) - indent( output, indent ) - output << START - output << @string - output << STOP - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/child.rb b/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/child.rb deleted file mode 100644 index cc6e9a47..00000000 --- a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/child.rb +++ /dev/null @@ -1,97 +0,0 @@ -# frozen_string_literal: false -require_relative "node" - -module REXML - ## - # A Child object is something contained by a parent, and this class - # contains methods to support that. Most user code will not use this - # class directly. - class Child - include Node - attr_reader :parent # The Parent of this object - - # Constructor. Any inheritors of this class should call super to make - # sure this method is called. - # parent:: - # if supplied, the parent of this child will be set to the - # supplied value, and self will be added to the parent - def initialize( parent = nil ) - @parent = nil - # Declare @parent, but don't define it. The next line sets the - # parent. - parent.add( self ) if parent - end - - # Replaces this object with another object. Basically, calls - # Parent.replace_child - # - # Returns:: self - def replace_with( child ) - @parent.replace_child( self, child ) - self - end - - # Removes this child from the parent. - # - # Returns:: self - def remove - unless @parent.nil? - @parent.delete self - end - self - end - - # Sets the parent of this child to the supplied argument. - # - # other:: - # Must be a Parent object. If this object is the same object as the - # existing parent of this child, no action is taken. Otherwise, this - # child is removed from the current parent (if one exists), and is added - # to the new parent. - # Returns:: The parent added - def parent=( other ) - return @parent if @parent == other - @parent.delete self if defined? @parent and @parent - @parent = other - end - - alias :next_sibling :next_sibling_node - alias :previous_sibling :previous_sibling_node - - # Sets the next sibling of this child. This can be used to insert a child - # after some other child. - # a = Element.new("a") - # b = a.add_element("b") - # c = Element.new("c") - # b.next_sibling = c - # # => - def next_sibling=( other ) - parent.insert_after self, other - end - - # Sets the previous sibling of this child. This can be used to insert a - # child before some other child. - # a = Element.new("a") - # b = a.add_element("b") - # c = Element.new("c") - # b.previous_sibling = c - # # => - def previous_sibling=(other) - parent.insert_before self, other - end - - # Returns:: the document this child belongs to, or nil if this child - # belongs to no document - def document - return parent.document unless parent.nil? - nil - end - - # This doesn't yet handle encodings - def bytes - document.encoding - - to_s - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/comment.rb b/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/comment.rb deleted file mode 100644 index 52c58b46..00000000 --- a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/comment.rb +++ /dev/null @@ -1,80 +0,0 @@ -# frozen_string_literal: false -require_relative "child" - -module REXML - ## - # Represents an XML comment; that is, text between \ - class Comment < Child - include Comparable - START = "" - - # The content text - - attr_accessor :string - - ## - # Constructor. The first argument can be one of three types: - # @param first If String, the contents of this comment are set to the - # argument. If Comment, the argument is duplicated. If - # Source, the argument is scanned for a comment. - # @param second If the first argument is a Source, this argument - # should be nil, not supplied, or a Parent to be set as the parent - # of this object - def initialize( first, second = nil ) - super(second) - if first.kind_of? String - @string = first - elsif first.kind_of? Comment - @string = first.string - end - end - - def clone - Comment.new self - end - - # == DEPRECATED - # See REXML::Formatters - # - # output:: - # Where to write the string - # indent:: - # An integer. If -1, no indenting will be used; otherwise, the - # indentation will be this number of spaces, and children will be - # indented an additional amount. - # transitive:: - # Ignored by this class. The contents of comments are never modified. - # ie_hack:: - # Needed for conformity to the child API, but not used by this class. - def write( output, indent=-1, transitive=false, ie_hack=false ) - Kernel.warn("Comment.write is deprecated. See REXML::Formatters", uplevel: 1) - indent( output, indent ) - output << START - output << @string - output << STOP - end - - alias :to_s :string - - ## - # Compares this Comment to another; the contents of the comment are used - # in the comparison. - def <=>(other) - other.to_s <=> @string - end - - ## - # Compares this Comment to another; the contents of the comment are used - # in the comparison. - def ==( other ) - other.kind_of? Comment and - (other <=> self) == 0 - end - - def node_type - :comment - end - end -end -#vim:ts=2 sw=2 noexpandtab: diff --git a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/doctype.rb b/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/doctype.rb deleted file mode 100644 index f3590484..00000000 --- a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/doctype.rb +++ /dev/null @@ -1,311 +0,0 @@ -# frozen_string_literal: false -require_relative "parent" -require_relative "parseexception" -require_relative "namespace" -require_relative 'entity' -require_relative 'attlistdecl' -require_relative 'xmltokens' - -module REXML - class ReferenceWriter - def initialize(id_type, - public_id_literal, - system_literal, - context=nil) - @id_type = id_type - @public_id_literal = public_id_literal - @system_literal = system_literal - if context and context[:prologue_quote] == :apostrophe - @default_quote = "'" - else - @default_quote = "\"" - end - end - - def write(output) - output << " #{@id_type}" - if @public_id_literal - if @public_id_literal.include?("'") - quote = "\"" - else - quote = @default_quote - end - output << " #{quote}#{@public_id_literal}#{quote}" - end - if @system_literal - if @system_literal.include?("'") - quote = "\"" - elsif @system_literal.include?("\"") - quote = "'" - else - quote = @default_quote - end - output << " #{quote}#{@system_literal}#{quote}" - end - end - end - - # Represents an XML DOCTYPE declaration; that is, the contents of . DOCTYPES can be used to declare the DTD of a document, as well as - # being used to declare entities used in the document. - class DocType < Parent - include XMLTokens - START = "" - SYSTEM = "SYSTEM" - PUBLIC = "PUBLIC" - DEFAULT_ENTITIES = { - 'gt'=>EntityConst::GT, - 'lt'=>EntityConst::LT, - 'quot'=>EntityConst::QUOT, - "apos"=>EntityConst::APOS - } - - # name is the name of the doctype - # external_id is the referenced DTD, if given - attr_reader :name, :external_id, :entities, :namespaces - - # Constructor - # - # dt = DocType.new( 'foo', '-//I/Hate/External/IDs' ) - # # - # dt = DocType.new( doctype_to_clone ) - # # Incomplete. Shallow clone of doctype - # - # +Note+ that the constructor: - # - # Doctype.new( Source.new( "" ) ) - # - # is _deprecated_. Do not use it. It will probably disappear. - def initialize( first, parent=nil ) - @entities = DEFAULT_ENTITIES - @long_name = @uri = nil - if first.kind_of? String - super() - @name = first - @external_id = parent - elsif first.kind_of? DocType - super( parent ) - @name = first.name - @external_id = first.external_id - @long_name = first.instance_variable_get(:@long_name) - @uri = first.instance_variable_get(:@uri) - elsif first.kind_of? Array - super( parent ) - @name = first[0] - @external_id = first[1] - @long_name = first[2] - @uri = first[3] - elsif first.kind_of? Source - super( parent ) - parser = Parsers::BaseParser.new( first ) - event = parser.pull - if event[0] == :start_doctype - @name, @external_id, @long_name, @uri, = event[1..-1] - end - else - super() - end - end - - def node_type - :doctype - end - - def attributes_of element - rv = [] - each do |child| - child.each do |key,val| - rv << Attribute.new(key,val) - end if child.kind_of? AttlistDecl and child.element_name == element - end - rv - end - - def attribute_of element, attribute - att_decl = find do |child| - child.kind_of? AttlistDecl and - child.element_name == element and - child.include? attribute - end - return nil unless att_decl - att_decl[attribute] - end - - def clone - DocType.new self - end - - # output:: - # Where to write the string - # indent:: - # An integer. If -1, no indentation will be used; otherwise, the - # indentation will be this number of spaces, and children will be - # indented an additional amount. - # transitive:: - # Ignored - # ie_hack:: - # Ignored - def write( output, indent=0, transitive=false, ie_hack=false ) - f = REXML::Formatters::Default.new - indent( output, indent ) - output << START - output << ' ' - output << @name - if @external_id - reference_writer = ReferenceWriter.new(@external_id, - @long_name, - @uri, - context) - reference_writer.write(output) - end - unless @children.empty? - output << ' [' - @children.each { |child| - output << "\n" - f.write( child, output ) - } - output << "\n]" - end - output << STOP - end - - def context - if @parent - @parent.context - else - nil - end - end - - def entity( name ) - @entities[name].unnormalized if @entities[name] - end - - def add child - super(child) - @entities = DEFAULT_ENTITIES.clone if @entities == DEFAULT_ENTITIES - @entities[ child.name ] = child if child.kind_of? Entity - end - - # This method retrieves the public identifier identifying the document's - # DTD. - # - # Method contributed by Henrik Martensson - def public - case @external_id - when "SYSTEM" - nil - when "PUBLIC" - @long_name - end - end - - # This method retrieves the system identifier identifying the document's DTD - # - # Method contributed by Henrik Martensson - def system - case @external_id - when "SYSTEM" - @long_name - when "PUBLIC" - @uri.kind_of?(String) ? @uri : nil - end - end - - # This method returns a list of notations that have been declared in the - # _internal_ DTD subset. Notations in the external DTD subset are not - # listed. - # - # Method contributed by Henrik Martensson - def notations - children().select {|node| node.kind_of?(REXML::NotationDecl)} - end - - # Retrieves a named notation. Only notations declared in the internal - # DTD subset can be retrieved. - # - # Method contributed by Henrik Martensson - def notation(name) - notations.find { |notation_decl| - notation_decl.name == name - } - end - end - - # We don't really handle any of these since we're not a validating - # parser, so we can be pretty dumb about them. All we need to be able - # to do is spew them back out on a write() - - # This is an abstract class. You never use this directly; it serves as a - # parent class for the specific declarations. - class Declaration < Child - def initialize src - super() - @string = src - end - - def to_s - @string+'>' - end - - # == DEPRECATED - # See REXML::Formatters - # - def write( output, indent ) - output << to_s - end - end - - public - class ElementDecl < Declaration - def initialize( src ) - super - end - end - - class ExternalEntity < Child - def initialize( src ) - super() - @entity = src - end - def to_s - @entity - end - def write( output, indent ) - output << @entity - end - end - - class NotationDecl < Child - attr_accessor :public, :system - def initialize name, middle, pub, sys - super(nil) - @name = name - @middle = middle - @public = pub - @system = sys - end - - def to_s - context = nil - context = parent.context if parent - notation = "" - notation - end - - def write( output, indent=-1 ) - output << to_s - end - - # This method retrieves the name of the notation. - # - # Method contributed by Henrik Martensson - def name - @name - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/document.rb b/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/document.rb deleted file mode 100644 index b1caa020..00000000 --- a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/document.rb +++ /dev/null @@ -1,451 +0,0 @@ -# frozen_string_literal: false -require_relative "security" -require_relative "element" -require_relative "xmldecl" -require_relative "source" -require_relative "comment" -require_relative "doctype" -require_relative "instruction" -require_relative "rexml" -require_relative "parseexception" -require_relative "output" -require_relative "parsers/baseparser" -require_relative "parsers/streamparser" -require_relative "parsers/treeparser" - -module REXML - # Represents an XML document. - # - # A document may have: - # - # - A single child that may be accessed via method #root. - # - An XML declaration. - # - A document type. - # - Processing instructions. - # - # == In a Hurry? - # - # If you're somewhat familiar with XML - # and have a particular task in mind, - # you may want to see the - # {tasks pages}[../doc/rexml/tasks/tocs/master_toc_rdoc.html], - # and in particular, the - # {tasks page for documents}[../doc/rexml/tasks/tocs/document_toc_rdoc.html]. - # - class Document < Element - # A convenient default XML declaration. Use: - # - # mydoc << XMLDecl.default - # - DECLARATION = XMLDecl.default - - # :call-seq: - # new(string = nil, context = {}) -> new_document - # new(io_stream = nil, context = {}) -> new_document - # new(document = nil, context = {}) -> new_document - # - # Returns a new \REXML::Document object. - # - # When no arguments are given, - # returns an empty document: - # - # d = REXML::Document.new - # d.to_s # => "" - # - # When argument +string+ is given, it must be a string - # containing a valid XML document: - # - # xml_string = 'FooBar' - # d = REXML::Document.new(xml_string) - # d.to_s # => "FooBar" - # - # When argument +io_stream+ is given, it must be an \IO object - # that is opened for reading, and when read must return a valid XML document: - # - # File.write('t.xml', xml_string) - # d = File.open('t.xml', 'r') do |io| - # REXML::Document.new(io) - # end - # d.to_s # => "FooBar" - # - # When argument +document+ is given, it must be an existing - # document object, whose context and attributes (but not children) - # are cloned into the new document: - # - # d = REXML::Document.new(xml_string) - # d.children # => [ ... ] - # d.context = {raw: :all, compress_whitespace: :all} - # d.add_attributes({'bar' => 0, 'baz' => 1}) - # d1 = REXML::Document.new(d) - # d1.children # => [] - # d1.context # => {:raw=>:all, :compress_whitespace=>:all} - # d1.attributes # => {"bar"=>bar='0', "baz"=>baz='1'} - # - # When argument +context+ is given, it must be a hash - # containing context entries for the document; - # see {Element Context}[../doc/rexml/context_rdoc.html]: - # - # context = {raw: :all, compress_whitespace: :all} - # d = REXML::Document.new(xml_string, context) - # d.context # => {:raw=>:all, :compress_whitespace=>:all} - # - def initialize( source = nil, context = {} ) - @entity_expansion_count = 0 - super() - @context = context - return if source.nil? - if source.kind_of? Document - @context = source.context - super source - else - build( source ) - end - end - - # :call-seq: - # node_type -> :document - # - # Returns the symbol +:document+. - # - def node_type - :document - end - - # :call-seq: - # clone -> new_document - # - # Returns the new document resulting from executing - # Document.new(self). See Document.new. - # - def clone - Document.new self - end - - # :call-seq: - # expanded_name -> empty_string - # - # Returns an empty string. - # - def expanded_name - '' - #d = doc_type - #d ? d.name : "UNDEFINED" - end - alias :name :expanded_name - - # :call-seq: - # add(xml_decl) -> self - # add(doc_type) -> self - # add(object) -> self - # - # Adds an object to the document; returns +self+. - # - # When argument +xml_decl+ is given, - # it must be an REXML::XMLDecl object, - # which becomes the XML declaration for the document, - # replacing the previous XML declaration if any: - # - # d = REXML::Document.new - # d.xml_decl.to_s # => "" - # d.add(REXML::XMLDecl.new('2.0')) - # d.xml_decl.to_s # => "" - # - # When argument +doc_type+ is given, - # it must be an REXML::DocType object, - # which becomes the document type for the document, - # replacing the previous document type, if any: - # - # d = REXML::Document.new - # d.doctype.to_s # => "" - # d.add(REXML::DocType.new('foo')) - # d.doctype.to_s # => "" - # - # When argument +object+ (not an REXML::XMLDecl or REXML::DocType object) - # is given it is added as the last child: - # - # d = REXML::Document.new - # d.add(REXML::Element.new('foo')) - # d.to_s # => "" - # - def add( child ) - if child.kind_of? XMLDecl - if @children[0].kind_of? XMLDecl - @children[0] = child - else - @children.unshift child - end - child.parent = self - elsif child.kind_of? DocType - # Find first Element or DocType node and insert the decl right - # before it. If there is no such node, just insert the child at the - # end. If there is a child and it is an DocType, then replace it. - insert_before_index = @children.find_index { |x| - x.kind_of?(Element) || x.kind_of?(DocType) - } - if insert_before_index # Not null = not end of list - if @children[ insert_before_index ].kind_of? DocType - @children[ insert_before_index ] = child - else - @children[ insert_before_index-1, 0 ] = child - end - else # Insert at end of list - @children << child - end - child.parent = self - else - rv = super - raise "attempted adding second root element to document" if @elements.size > 1 - rv - end - end - alias :<< :add - - # :call-seq: - # add_element(name_or_element = nil, attributes = nil) -> new_element - # - # Adds an element to the document by calling REXML::Element.add_element: - # - # REXML::Element.add_element(name_or_element, attributes) - def add_element(arg=nil, arg2=nil) - rv = super - raise "attempted adding second root element to document" if @elements.size > 1 - rv - end - - # :call-seq: - # root -> root_element or nil - # - # Returns the root element of the document, if it exists, otherwise +nil+: - # - # d = REXML::Document.new('') - # d.root # => - # d = REXML::Document.new('') - # d.root # => nil - # - def root - elements[1] - #self - #@children.find { |item| item.kind_of? Element } - end - - # :call-seq: - # doctype -> doc_type or nil - # - # Returns the DocType object for the document, if it exists, otherwise +nil+: - # - # d = REXML::Document.new('') - # d.doctype.class # => REXML::DocType - # d = REXML::Document.new('') - # d.doctype.class # => nil - # - def doctype - @children.find { |item| item.kind_of? DocType } - end - - # :call-seq: - # xml_decl -> xml_decl - # - # Returns the XMLDecl object for the document, if it exists, - # otherwise the default XMLDecl object: - # - # d = REXML::Document.new('') - # d.xml_decl.class # => REXML::XMLDecl - # d.xml_decl.to_s # => "" - # d = REXML::Document.new('') - # d.xml_decl.class # => REXML::XMLDecl - # d.xml_decl.to_s # => "" - # - def xml_decl - rv = @children[0] - return rv if rv.kind_of? XMLDecl - @children.unshift(XMLDecl.default)[0] - end - - # :call-seq: - # version -> version_string - # - # Returns the XMLDecl version of this document as a string, - # if it has been set, otherwise the default version: - # - # d = REXML::Document.new('') - # d.version # => "2.0" - # d = REXML::Document.new('') - # d.version # => "1.0" - # - def version - xml_decl().version - end - - # :call-seq: - # encoding -> encoding_string - # - # Returns the XMLDecl encoding of the document, - # if it has been set, otherwise the default encoding: - # - # d = REXML::Document.new('') - # d.encoding # => "UTF-16" - # d = REXML::Document.new('') - # d.encoding # => "UTF-8" - # - def encoding - xml_decl().encoding - end - - # :call-seq: - # stand_alone? - # - # Returns the XMLDecl standalone value of the document as a string, - # if it has been set, otherwise the default standalone value: - # - # d = REXML::Document.new('') - # d.stand_alone? # => "yes" - # d = REXML::Document.new('') - # d.stand_alone? # => nil - # - def stand_alone? - xml_decl().stand_alone? - end - - # :call-seq: - # doc.write(output=$stdout, indent=-1, transtive=false, ie_hack=false, encoding=nil) - # doc.write(options={:output => $stdout, :indent => -1, :transtive => false, :ie_hack => false, :encoding => nil}) - # - # Write the XML tree out, optionally with indent. This writes out the - # entire XML document, including XML declarations, doctype declarations, - # and processing instructions (if any are given). - # - # A controversial point is whether Document should always write the XML - # declaration () whether or not one is given by the - # user (or source document). REXML does not write one if one was not - # specified, because it adds unnecessary bandwidth to applications such - # as XML-RPC. - # - # Accept Nth argument style and options Hash style as argument. - # The recommended style is options Hash style for one or more - # arguments case. - # - # _Examples_ - # Document.new("").write - # - # output = "" - # Document.new("").write(output) - # - # output = "" - # Document.new("").write(:output => output, :indent => 2) - # - # See also the classes in the rexml/formatters package for the proper way - # to change the default formatting of XML output. - # - # _Examples_ - # - # output = "" - # tr = Transitive.new - # tr.write(Document.new(""), output) - # - # output:: - # output an object which supports '<< string'; this is where the - # document will be written. - # indent:: - # An integer. If -1, no indenting will be used; otherwise, the - # indentation will be twice this number of spaces, and children will be - # indented an additional amount. For a value of 3, every item will be - # indented 3 more levels, or 6 more spaces (2 * 3). Defaults to -1 - # transitive:: - # If transitive is true and indent is >= 0, then the output will be - # pretty-printed in such a way that the added whitespace does not affect - # the absolute *value* of the document -- that is, it leaves the value - # and number of Text nodes in the document unchanged. - # ie_hack:: - # This hack inserts a space before the /> on empty tags to address - # a limitation of Internet Explorer. Defaults to false - # encoding:: - # Encoding name as String. Change output encoding to specified encoding - # instead of encoding in XML declaration. - # Defaults to nil. It means encoding in XML declaration is used. - def write(*arguments) - if arguments.size == 1 and arguments[0].class == Hash - options = arguments[0] - - output = options[:output] - indent = options[:indent] - transitive = options[:transitive] - ie_hack = options[:ie_hack] - encoding = options[:encoding] - else - output, indent, transitive, ie_hack, encoding, = *arguments - end - - output ||= $stdout - indent ||= -1 - transitive = false if transitive.nil? - ie_hack = false if ie_hack.nil? - encoding ||= xml_decl.encoding - - if encoding != 'UTF-8' && !output.kind_of?(Output) - output = Output.new( output, encoding ) - end - formatter = if indent > -1 - if transitive - require_relative "formatters/transitive" - REXML::Formatters::Transitive.new( indent, ie_hack ) - else - REXML::Formatters::Pretty.new( indent, ie_hack ) - end - else - REXML::Formatters::Default.new( ie_hack ) - end - formatter.write( self, output ) - end - - - def Document::parse_stream( source, listener ) - Parsers::StreamParser.new( source, listener ).parse - end - - # Set the entity expansion limit. By default the limit is set to 10000. - # - # Deprecated. Use REXML::Security.entity_expansion_limit= instead. - def Document::entity_expansion_limit=( val ) - Security.entity_expansion_limit = val - end - - # Get the entity expansion limit. By default the limit is set to 10000. - # - # Deprecated. Use REXML::Security.entity_expansion_limit= instead. - def Document::entity_expansion_limit - return Security.entity_expansion_limit - end - - # Set the entity expansion limit. By default the limit is set to 10240. - # - # Deprecated. Use REXML::Security.entity_expansion_text_limit= instead. - def Document::entity_expansion_text_limit=( val ) - Security.entity_expansion_text_limit = val - end - - # Get the entity expansion limit. By default the limit is set to 10240. - # - # Deprecated. Use REXML::Security.entity_expansion_text_limit instead. - def Document::entity_expansion_text_limit - return Security.entity_expansion_text_limit - end - - attr_reader :entity_expansion_count - - def record_entity_expansion - @entity_expansion_count += 1 - if @entity_expansion_count > Security.entity_expansion_limit - raise "number of entity expansions exceeded, processing aborted." - end - end - - def document - self - end - - private - def build( source ) - Parsers::TreeParser.new( source, self ).parse - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/dtd/attlistdecl.rb b/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/dtd/attlistdecl.rb deleted file mode 100644 index 1326cb21..00000000 --- a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/dtd/attlistdecl.rb +++ /dev/null @@ -1,11 +0,0 @@ -# frozen_string_literal: false -require_relative "../child" -module REXML - module DTD - class AttlistDecl < Child - START = ")/um - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/dtd/dtd.rb b/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/dtd/dtd.rb deleted file mode 100644 index 8b0f2d75..00000000 --- a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/dtd/dtd.rb +++ /dev/null @@ -1,47 +0,0 @@ -# frozen_string_literal: false -require_relative "elementdecl" -require_relative "entitydecl" -require_relative "../comment" -require_relative "notationdecl" -require_relative "attlistdecl" -require_relative "../parent" - -module REXML - module DTD - class Parser - def Parser.parse( input ) - case input - when String - parse_helper input - when File - parse_helper input.read - end - end - - # Takes a String and parses it out - def Parser.parse_helper( input ) - contents = Parent.new - while input.size > 0 - case input - when ElementDecl.PATTERN_RE - match = $& - contents << ElementDecl.new( match ) - when AttlistDecl.PATTERN_RE - matchdata = $~ - contents << AttlistDecl.new( matchdata ) - when EntityDecl.PATTERN_RE - matchdata = $~ - contents << EntityDecl.new( matchdata ) - when Comment.PATTERN_RE - matchdata = $~ - contents << Comment.new( matchdata ) - when NotationDecl.PATTERN_RE - matchdata = $~ - contents << NotationDecl.new( matchdata ) - end - end - contents - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/dtd/elementdecl.rb b/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/dtd/elementdecl.rb deleted file mode 100644 index 20ed0232..00000000 --- a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/dtd/elementdecl.rb +++ /dev/null @@ -1,18 +0,0 @@ -# frozen_string_literal: false -require_relative "../child" -module REXML - module DTD - class ElementDecl < Child - START = "/um - PATTERN_RE = /^\s*#{START}\s+((?:[:\w][-\.\w]*:)?[-!\*\.\w]*)(.*?)>/ - #\s*((((["']).*?\5)|[^\/'">]*)*?)(\/)?>/um, true) - - def initialize match - @name = match[1] - @rest = match[2] - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/dtd/entitydecl.rb b/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/dtd/entitydecl.rb deleted file mode 100644 index 312df655..00000000 --- a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/dtd/entitydecl.rb +++ /dev/null @@ -1,57 +0,0 @@ -# frozen_string_literal: false -require_relative "../child" -module REXML - module DTD - class EntityDecl < Child - START = "/um - SYSTEM = /^\s*#{START}\s+(?:%\s+)?(\w+)\s+SYSTEM\s+((["']).*?\3)(?:\s+NDATA\s+\w+)?\s*>/um - PLAIN = /^\s*#{START}\s+(\w+)\s+((["']).*?\3)\s*>/um - PERCENT = /^\s*#{START}\s+%\s+(\w+)\s+((["']).*?\3)\s*>/um - # - # - def initialize src - super() - md = nil - if src.match( PUBLIC ) - md = src.match( PUBLIC, true ) - @middle = "PUBLIC" - @content = "#{md[2]} #{md[4]}" - elsif src.match( SYSTEM ) - md = src.match( SYSTEM, true ) - @middle = "SYSTEM" - @content = md[2] - elsif src.match( PLAIN ) - md = src.match( PLAIN, true ) - @middle = "" - @content = md[2] - elsif src.match( PERCENT ) - md = src.match( PERCENT, true ) - @middle = "" - @content = md[2] - end - raise ParseException.new("failed Entity match", src) if md.nil? - @name = md[1] - end - - def to_s - rv = " 0 - rv << @content - rv - end - - def write( output, indent ) - indent( output, indent ) - output << to_s - end - - def EntityDecl.parse_source source, listener - md = source.match( PATTERN_RE, true ) - thing = md[0].squeeze(" \t\n\r") - listener.send inspect.downcase, thing - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/dtd/notationdecl.rb b/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/dtd/notationdecl.rb deleted file mode 100644 index 04a9b08a..00000000 --- a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/dtd/notationdecl.rb +++ /dev/null @@ -1,40 +0,0 @@ -# frozen_string_literal: false -require_relative "../child" -module REXML - module DTD - class NotationDecl < Child - START = "/um - SYSTEM = /^\s*#{START}\s+(\w[\w-]*)\s+(SYSTEM)\s+((["']).*?\4)\s*>/um - def initialize src - super() - if src.match( PUBLIC ) - md = src.match( PUBLIC, true ) - elsif src.match( SYSTEM ) - md = src.match( SYSTEM, true ) - else - raise ParseException.new( "error parsing notation: no matching pattern", src ) - end - @name = md[1] - @middle = md[2] - @rest = md[3] - end - - def to_s - "" - end - - def write( output, indent ) - indent( output, indent ) - output << to_s - end - - def NotationDecl.parse_source source, listener - md = source.match( PATTERN_RE, true ) - thing = md[0].squeeze(" \t\n\r") - listener.send inspect.downcase, thing - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/element.rb b/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/element.rb deleted file mode 100644 index bf913a82..00000000 --- a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/element.rb +++ /dev/null @@ -1,2599 +0,0 @@ -# frozen_string_literal: false -require_relative "parent" -require_relative "namespace" -require_relative "attribute" -require_relative "cdata" -require_relative "xpath" -require_relative "parseexception" - -module REXML - # An implementation note about namespaces: - # As we parse, when we find namespaces we put them in a hash and assign - # them a unique ID. We then convert the namespace prefix for the node - # to the unique ID. This makes namespace lookup much faster for the - # cost of extra memory use. We save the namespace prefix for the - # context node and convert it back when we write it. - @@namespaces = {} - - # An \REXML::Element object represents an XML element. - # - # An element: - # - # - Has a name (string). - # - May have a parent (another element). - # - Has zero or more children - # (other elements, text, CDATA, processing instructions, and comments). - # - Has zero or more siblings - # (other elements, text, CDATA, processing instructions, and comments). - # - Has zero or more named attributes. - # - # == In a Hurry? - # - # If you're somewhat familiar with XML - # and have a particular task in mind, - # you may want to see the - # {tasks pages}[../doc/rexml/tasks/tocs/master_toc_rdoc.html], - # and in particular, the - # {tasks page for elements}[../doc/rexml/tasks/tocs/element_toc_rdoc.html]. - # - # === Name - # - # An element has a name, which is initially set when the element is created: - # - # e = REXML::Element.new('foo') - # e.name # => "foo" - # - # The name may be changed: - # - # e.name = 'bar' - # e.name # => "bar" - # - # - # === \Parent - # - # An element may have a parent. - # - # Its parent may be assigned explicitly when the element is created: - # - # e0 = REXML::Element.new('foo') - # e1 = REXML::Element.new('bar', e0) - # e1.parent # => ... - # - # Note: the representation of an element always shows the element's name. - # If the element has children, the representation indicates that - # by including an ellipsis (...). - # - # The parent may be assigned explicitly at any time: - # - # e2 = REXML::Element.new('baz') - # e1.parent = e2 - # e1.parent # => - # - # When an element is added as a child, its parent is set automatically: - # - # e1.add_element(e0) - # e0.parent # => ... - # - # For an element that has no parent, method +parent+ returns +nil+. - # - # === Children - # - # An element has zero or more children. - # The children are an ordered collection - # of all objects whose parent is the element itself. - # - # The children may include any combination of elements, text, comments, - # processing instructions, and CDATA. - # (This example keeps things clean by controlling whitespace - # via a +context+ setting.) - # - # xml_string = <<-EOT - # - # - # text 0 - # - # - # - # - # text 1 - # - # - # - # - # EOT - # context = {ignore_whitespace_nodes: :all, compress_whitespace: :all} - # d = REXML::Document.new(xml_string, context) - # root = d.root - # root.children.size # => 10 - # root.each {|child| p "#{child.class}: #{child}" } - # - # Output: - # - # "REXML::Element: " - # "REXML::Text: \n text 0\n " - # "REXML::Comment: comment 0" - # "REXML::Instruction: " - # "REXML::CData: cdata 0" - # "REXML::Element: " - # "REXML::Text: \n text 1\n " - # "REXML::Comment: comment 1" - # "REXML::Instruction: " - # "REXML::CData: cdata 1" - # - # A child may be added using inherited methods - # Parent#insert_before or Parent#insert_after: - # - # xml_string = '' - # d = REXML::Document.new(xml_string) - # root = d.root - # c = d.root[1] # => - # root.insert_before(c, REXML::Element.new('b')) - # root.to_a # => [, , , ] - # - # A child may be replaced using Parent#replace_child: - # - # root.replace_child(c, REXML::Element.new('x')) - # root.to_a # => [, , , ] - # - # A child may be removed using Parent#delete: - # - # x = root[2] # => - # root.delete(x) - # root.to_a # => [, , ] - # - # === Siblings - # - # An element has zero or more siblings, - # which are the other children of the element's parent. - # - # In the example above, element +ele_1+ is between a CDATA sibling - # and a text sibling: - # - # ele_1 = root[5] # => - # ele_1.previous_sibling # => "cdata 0" - # ele_1.next_sibling # => "\n text 1\n " - # - # === \Attributes - # - # An element has zero or more named attributes. - # - # A new element has no attributes: - # - # e = REXML::Element.new('foo') - # e.attributes # => {} - # - # Attributes may be added: - # - # e.add_attribute('bar', 'baz') - # e.add_attribute('bat', 'bam') - # e.attributes.size # => 2 - # e['bar'] # => "baz" - # e['bat'] # => "bam" - # - # An existing attribute may be modified: - # - # e.add_attribute('bar', 'bad') - # e.attributes.size # => 2 - # e['bar'] # => "bad" - # - # An existing attribute may be deleted: - # - # e.delete_attribute('bar') - # e.attributes.size # => 1 - # e['bar'] # => nil - # - # == What's Here - # - # To begin with, what's elsewhere? - # - # \Class \REXML::Element inherits from its ancestor classes: - # - # - REXML::Child - # - REXML::Parent - # - # \REXML::Element itself and its ancestors also include modules: - # - # - {Enumerable}[https://docs.ruby-lang.org/en/master/Enumerable.html] - # - REXML::Namespace - # - REXML::Node - # - REXML::XMLTokens - # - # === Methods for Creating an \Element - # - # ::new:: Returns a new empty element. - # #clone:: Returns a clone of another element. - # - # === Methods for Attributes - # - # {[attribute_name]}[#method-i-5B-5D]:: Returns an attribute value. - # #add_attribute:: Adds a new attribute. - # #add_attributes:: Adds multiple new attributes. - # #attribute:: Returns the attribute value for a given name and optional namespace. - # #delete_attribute:: Removes an attribute. - # - # === Methods for Children - # - # {[index]}[#method-i-5B-5D]:: Returns the child at the given offset. - # #add_element:: Adds an element as the last child. - # #delete_element:: Deletes a child element. - # #each_element:: Calls the given block with each child element. - # #each_element_with_attribute:: Calls the given block with each child element - # that meets given criteria, - # which can include the attribute name. - # #each_element_with_text:: Calls the given block with each child element - # that meets given criteria, - # which can include text. - # #get_elements:: Returns an array of element children that match a given xpath. - # - # === Methods for \Text Children - # - # #add_text:: Adds a text node to the element. - # #get_text:: Returns a text node that meets specified criteria. - # #text:: Returns the text string from the first node that meets specified criteria. - # #texts:: Returns an array of the text children of the element. - # #text=:: Adds, removes, or replaces the first text child of the element - # - # === Methods for Other Children - # - # #cdatas:: Returns an array of the cdata children of the element. - # #comments:: Returns an array of the comment children of the element. - # #instructions:: Returns an array of the instruction children of the element. - # - # === Methods for Namespaces - # - # #add_namespace:: Adds a namespace to the element. - # #delete_namespace:: Removes a namespace from the element. - # #namespace:: Returns the string namespace URI for the element. - # #namespaces:: Returns a hash of all defined namespaces in the element. - # #prefixes:: Returns an array of the string prefixes (names) - # of all defined namespaces in the element - # - # === Methods for Querying - # - # #document:: Returns the document, if any, that the element belongs to. - # #root:: Returns the most distant element (not document) ancestor of the element. - # #root_node:: Returns the most distant ancestor of the element. - # #xpath:: Returns the string xpath to the element - # relative to the most distant parent - # #has_attributes?:: Returns whether the element has attributes. - # #has_elements?:: Returns whether the element has elements. - # #has_text?:: Returns whether the element has text. - # #next_element:: Returns the next sibling that is an element. - # #previous_element:: Returns the previous sibling that is an element. - # #raw:: Returns whether raw mode is set for the element. - # #whitespace:: Returns whether whitespace is respected for the element. - # #ignore_whitespace_nodes:: Returns whether whitespace nodes - # are to be ignored for the element. - # #node_type:: Returns symbol :element. - # - # === One More Method - # - # #inspect:: Returns a string representation of the element. - # - # === Accessors - # - # #elements:: Returns the REXML::Elements object for the element. - # #attributes:: Returns the REXML::Attributes object for the element. - # #context:: Returns or sets the context hash for the element. - # - class Element < Parent - include Namespace - - UNDEFINED = "UNDEFINED"; # The default name - - # Mechanisms for accessing attributes and child elements of this - # element. - attr_reader :attributes, :elements - # The context holds information about the processing environment, such as - # whitespace handling. - attr_accessor :context - - # :call-seq: - # Element.new(name = 'UNDEFINED', parent = nil, context = nil) -> new_element - # Element.new(element, parent = nil, context = nil) -> new_element - # - # Returns a new \REXML::Element object. - # - # When no arguments are given, - # returns an element with name 'UNDEFINED': - # - # e = REXML::Element.new # => - # e.class # => REXML::Element - # e.name # => "UNDEFINED" - # - # When only argument +name+ is given, - # returns an element of the given name: - # - # REXML::Element.new('foo') # => - # - # When only argument +element+ is given, it must be an \REXML::Element object; - # returns a shallow copy of the given element: - # - # e0 = REXML::Element.new('foo') - # e1 = REXML::Element.new(e0) # => - # - # When argument +parent+ is also given, it must be an REXML::Parent object: - # - # e = REXML::Element.new('foo', REXML::Parent.new) - # e.parent # => #]> - # - # When argument +context+ is also given, it must be a hash - # representing the context for the element; - # see {Element Context}[../doc/rexml/context_rdoc.html]: - # - # e = REXML::Element.new('foo', nil, {raw: :all}) - # e.context # => {:raw=>:all} - # - def initialize( arg = UNDEFINED, parent=nil, context=nil ) - super(parent) - - @elements = Elements.new(self) - @attributes = Attributes.new(self) - @context = context - - if arg.kind_of? String - self.name = arg - elsif arg.kind_of? Element - self.name = arg.expanded_name - arg.attributes.each_attribute{ |attribute| - @attributes << Attribute.new( attribute ) - } - @context = arg.context - end - end - - # :call-seq: - # inspect -> string - # - # Returns a string representation of the element. - # - # For an element with no attributes and no children, shows the element name: - # - # REXML::Element.new.inspect # => "" - # - # Shows attributes, if any: - # - # e = REXML::Element.new('foo') - # e.add_attributes({'bar' => 0, 'baz' => 1}) - # e.inspect # => "" - # - # Shows an ellipsis (...), if there are child elements: - # - # e.add_element(REXML::Element.new('bar')) - # e.add_element(REXML::Element.new('baz')) - # e.inspect # => " ... " - # - def inspect - rv = "<#@expanded_name" - - @attributes.each_attribute do |attr| - rv << " " - attr.write( rv, 0 ) - end - - if children.size > 0 - rv << "> ... " - else - rv << "/>" - end - end - - # :call-seq: - # clone -> new_element - # - # Returns a shallow copy of the element, containing the name and attributes, - # but not the parent or children: - # - # e = REXML::Element.new('foo') - # e.add_attributes({'bar' => 0, 'baz' => 1}) - # e.clone # => - # - def clone - self.class.new self - end - - # :call-seq: - # root_node -> document or element - # - # Returns the most distant ancestor of +self+. - # - # When the element is part of a document, - # returns the root node of the document. - # Note that the root node is different from the document element; - # in this example +a+ is document element and the root node is its parent: - # - # d = REXML::Document.new('') - # top_element = d.first # => ... - # child = top_element.first # => ... - # d.root_node == d # => true - # top_element.root_node == d # => true - # child.root_node == d # => true - # - # When the element is not part of a document, but does have ancestor elements, - # returns the most distant ancestor element: - # - # e0 = REXML::Element.new('foo') - # e1 = REXML::Element.new('bar') - # e1.parent = e0 - # e2 = REXML::Element.new('baz') - # e2.parent = e1 - # e2.root_node == e0 # => true - # - # When the element has no ancestor elements, - # returns +self+: - # - # e = REXML::Element.new('foo') - # e.root_node == e # => true - # - # Related: #root, #document. - # - def root_node - parent.nil? ? self : parent.root_node - end - - # :call-seq: - # root -> element - # - # Returns the most distant _element_ (not document) ancestor of the element: - # - # d = REXML::Document.new('') - # top_element = d.first - # child = top_element.first - # top_element.root == top_element # => true - # child.root == top_element # => true - # - # For a document, returns the topmost element: - # - # d.root == top_element # => true - # - # Related: #root_node, #document. - # - def root - return elements[1] if self.kind_of? Document - return self if parent.kind_of? Document or parent.nil? - return parent.root - end - - # :call-seq: - # document -> document or nil - # - # If the element is part of a document, returns that document: - # - # d = REXML::Document.new('') - # top_element = d.first - # child = top_element.first - # top_element.document == d # => true - # child.document == d # => true - # - # If the element is not part of a document, returns +nil+: - # - # REXML::Element.new.document # => nil - # - # For a document, returns +self+: - # - # d.document == d # => true - # - # Related: #root, #root_node. - # - def document - rt = root - rt.parent if rt - end - - # :call-seq: - # whitespace - # - # Returns +true+ if whitespace is respected for this element, - # +false+ otherwise. - # - # See {Element Context}[../doc/rexml/context_rdoc.html]. - # - # The evaluation is tested against the element's +expanded_name+, - # and so is namespace-sensitive. - def whitespace - @whitespace = nil - if @context - if @context[:respect_whitespace] - @whitespace = (@context[:respect_whitespace] == :all or - @context[:respect_whitespace].include? expanded_name) - end - @whitespace = false if (@context[:compress_whitespace] and - (@context[:compress_whitespace] == :all or - @context[:compress_whitespace].include? expanded_name) - ) - end - @whitespace = true unless @whitespace == false - @whitespace - end - - # :call-seq: - # ignore_whitespace_nodes - # - # Returns +true+ if whitespace nodes are ignored for the element. - # - # See {Element Context}[../doc/rexml/context_rdoc.html]. - # - def ignore_whitespace_nodes - @ignore_whitespace_nodes = false - if @context - if @context[:ignore_whitespace_nodes] - @ignore_whitespace_nodes = - (@context[:ignore_whitespace_nodes] == :all or - @context[:ignore_whitespace_nodes].include? expanded_name) - end - end - end - - # :call-seq: - # raw - # - # Returns +true+ if raw mode is set for the element. - # - # See {Element Context}[../doc/rexml/context_rdoc.html]. - # - # The evaluation is tested against +expanded_name+, and so is namespace - # sensitive. - def raw - @raw = (@context and @context[:raw] and - (@context[:raw] == :all or - @context[:raw].include? expanded_name)) - @raw - end - - #once :whitespace, :raw, :ignore_whitespace_nodes - - ################################################# - # Namespaces # - ################################################# - - # :call-seq: - # prefixes -> array_of_namespace_prefixes - # - # Returns an array of the string prefixes (names) of all defined namespaces - # in the element and its ancestors: - # - # xml_string = <<-EOT - # - # - # - # - # - # - # EOT - # d = REXML::Document.new(xml_string, {compress_whitespace: :all}) - # d.elements['//a'].prefixes # => ["x", "y"] - # d.elements['//b'].prefixes # => ["x", "y"] - # d.elements['//c'].prefixes # => ["x", "y", "z"] - # - def prefixes - prefixes = [] - prefixes = parent.prefixes if parent - prefixes |= attributes.prefixes - return prefixes - end - - # :call-seq: - # namespaces -> array_of_namespace_names - # - # Returns a hash of all defined namespaces - # in the element and its ancestors: - # - # xml_string = <<-EOT - # - # - # - # - # - # - # EOT - # d = REXML::Document.new(xml_string) - # d.elements['//a'].namespaces # => {"x"=>"1", "y"=>"2"} - # d.elements['//b'].namespaces # => {"x"=>"1", "y"=>"2"} - # d.elements['//c'].namespaces # => {"x"=>"1", "y"=>"2", "z"=>"3"} - # - def namespaces - namespaces = {} - namespaces = parent.namespaces if parent - namespaces = namespaces.merge( attributes.namespaces ) - return namespaces - end - - # :call-seq: - # namespace(prefix = nil) -> string_uri or nil - # - # Returns the string namespace URI for the element, - # possibly deriving from one of its ancestors. - # - # xml_string = <<-EOT - # - # - # - # - # - # - # EOT - # d = REXML::Document.new(xml_string) - # b = d.elements['//b'] - # b.namespace # => "1" - # b.namespace('y') # => "2" - # b.namespace('nosuch') # => nil - # - def namespace(prefix=nil) - if prefix.nil? - prefix = prefix() - end - if prefix == '' - prefix = "xmlns" - else - prefix = "xmlns:#{prefix}" unless prefix[0,5] == 'xmlns' - end - ns = attributes[ prefix ] - ns = parent.namespace(prefix) if ns.nil? and parent - ns = '' if ns.nil? and prefix == 'xmlns' - return ns - end - - # :call-seq: - # add_namespace(prefix, uri = nil) -> self - # - # Adds a namespace to the element; returns +self+. - # - # With the single argument +prefix+, - # adds a namespace using the given +prefix+ and the namespace URI: - # - # e = REXML::Element.new('foo') - # e.add_namespace('bar') - # e.namespaces # => {"xmlns"=>"bar"} - # - # With both arguments +prefix+ and +uri+ given, - # adds a namespace using both arguments: - # - # e.add_namespace('baz', 'bat') - # e.namespaces # => {"xmlns"=>"bar", "baz"=>"bat"} - # - def add_namespace( prefix, uri=nil ) - unless uri - @attributes["xmlns"] = prefix - else - prefix = "xmlns:#{prefix}" unless prefix =~ /^xmlns:/ - @attributes[ prefix ] = uri - end - self - end - - # :call-seq: - # delete_namespace(namespace = 'xmlns') -> self - # - # Removes a namespace from the element. - # - # With no argument, removes the default namespace: - # - # d = REXML::Document.new "" - # d.to_s # => "" - # d.root.delete_namespace # => - # d.to_s # => "" - # - # With argument +namespace+, removes the specified namespace: - # - # d.root.delete_namespace('foo') - # d.to_s # => "" - # - # Does nothing if no such namespace is found: - # - # d.root.delete_namespace('nosuch') - # d.to_s # => "" - # - def delete_namespace namespace="xmlns" - namespace = "xmlns:#{namespace}" unless namespace == 'xmlns' - attribute = attributes.get_attribute(namespace) - attribute.remove unless attribute.nil? - self - end - - ################################################# - # Elements # - ################################################# - - # :call-seq: - # add_element(name, attributes = nil) -> new_element - # add_element(element, attributes = nil) -> element - # - # Adds a child element, optionally setting attributes - # on the added element; returns the added element. - # - # With string argument +name+, creates a new element with that name - # and adds the new element as a child: - # - # e0 = REXML::Element.new('foo') - # e0.add_element('bar') - # e0[0] # => - # - # - # With argument +name+ and hash argument +attributes+, - # sets attributes on the new element: - # - # e0.add_element('baz', {'bat' => '0', 'bam' => '1'}) - # e0[1] # => - # - # With element argument +element+, adds that element as a child: - # - # e0 = REXML::Element.new('foo') - # e1 = REXML::Element.new('bar') - # e0.add_element(e1) - # e0[0] # => - # - # With argument +element+ and hash argument +attributes+, - # sets attributes on the added element: - # - # e0.add_element(e1, {'bat' => '0', 'bam' => '1'}) - # e0[1] # => - # - def add_element element, attrs=nil - raise "First argument must be either an element name, or an Element object" if element.nil? - el = @elements.add(element) - attrs.each do |key, value| - el.attributes[key]=value - end if attrs.kind_of? Hash - el - end - - # :call-seq: - # delete_element(index) -> removed_element or nil - # delete_element(element) -> removed_element or nil - # delete_element(xpath) -> removed_element or nil - # - # Deletes a child element. - # - # When 1-based integer argument +index+ is given, - # removes and returns the child element at that offset if it exists; - # indexing does not include text nodes; - # returns +nil+ if the element does not exist: - # - # d = REXML::Document.new 'text' - # a = d.root # => ... - # a.delete_element(1) # => - # a.delete_element(1) # => - # a.delete_element(1) # => nil - # - # When element argument +element+ is given, - # removes and returns that child element if it exists, - # otherwise returns +nil+: - # - # d = REXML::Document.new 'text' - # a = d.root # => ... - # c = a[2] # => - # a.delete_element(c) # => - # a.delete_element(c) # => nil - # - # When xpath argument +xpath+ is given, - # removes and returns the element at xpath if it exists, - # otherwise returns +nil+: - # - # d = REXML::Document.new 'text' - # a = d.root # => ... - # a.delete_element('//c') # => - # a.delete_element('//c') # => nil - # - def delete_element element - @elements.delete element - end - - # :call-seq: - # has_elements? - # - # Returns +true+ if the element has one or more element children, - # +false+ otherwise: - # - # d = REXML::Document.new 'text' - # a = d.root # => ... - # a.has_elements? # => true - # b = a[0] # => - # b.has_elements? # => false - # - def has_elements? - !@elements.empty? - end - - # :call-seq: - # each_element_with_attribute(attr_name, value = nil, max = 0, xpath = nil) {|e| ... } - # - # Calls the given block with each child element that meets given criteria. - # - # When only string argument +attr_name+ is given, - # calls the block with each child element that has that attribute: - # - # d = REXML::Document.new '' - # a = d.root - # a.each_element_with_attribute('id') {|e| p e } - # - # Output: - # - # - # - # - # - # With argument +attr_name+ and string argument +value+ given, - # calls the block with each child element that has that attribute - # with that value: - # - # a.each_element_with_attribute('id', '1') {|e| p e } - # - # Output: - # - # - # - # - # With arguments +attr_name+, +value+, and integer argument +max+ given, - # calls the block with at most +max+ child elements: - # - # a.each_element_with_attribute('id', '1', 1) {|e| p e } - # - # Output: - # - # - # - # With all arguments given, including +xpath+, - # calls the block with only those child elements - # that meet the first three criteria, - # and also match the given +xpath+: - # - # a.each_element_with_attribute('id', '1', 2, '//d') {|e| p e } - # - # Output: - # - # - # - def each_element_with_attribute( key, value=nil, max=0, name=nil, &block ) # :yields: Element - each_with_something( proc {|child| - if value.nil? - child.attributes[key] != nil - else - child.attributes[key]==value - end - }, max, name, &block ) - end - - # :call-seq: - # each_element_with_text(text = nil, max = 0, xpath = nil) {|e| ... } - # - # Calls the given block with each child element that meets given criteria. - # - # With no arguments, calls the block with each child element that has text: - # - # d = REXML::Document.new 'bbd' - # a = d.root - # a.each_element_with_text {|e| p e } - # - # Output: - # - # ... - # ... - # ... - # - # With the single string argument +text+, - # calls the block with each element that has exactly that text: - # - # a.each_element_with_text('b') {|e| p e } - # - # Output: - # - # ... - # ... - # - # With argument +text+ and integer argument +max+, - # calls the block with at most +max+ elements: - # - # a.each_element_with_text('b', 1) {|e| p e } - # - # Output: - # - # ... - # - # With all arguments given, including +xpath+, - # calls the block with only those child elements - # that meet the first two criteria, - # and also match the given +xpath+: - # - # a.each_element_with_text('b', 2, '//c') {|e| p e } - # - # Output: - # - # ... - # - def each_element_with_text( text=nil, max=0, name=nil, &block ) # :yields: Element - each_with_something( proc {|child| - if text.nil? - child.has_text? - else - child.text == text - end - }, max, name, &block ) - end - - # :call-seq: - # each_element {|e| ... } - # - # Calls the given block with each child element: - # - # d = REXML::Document.new 'bbd' - # a = d.root - # a.each_element {|e| p e } - # - # Output: - # - # ... - # ... - # ... - # - # - def each_element( xpath=nil, &block ) # :yields: Element - @elements.each( xpath, &block ) - end - - # :call-seq: - # get_elements(xpath) - # - # Returns an array of the elements that match the given +xpath+: - # - # xml_string = <<-EOT - # - # - # - # - # - # EOT - # d = REXML::Document.new(xml_string) - # d.root.get_elements('//a') # => [ ... , ] - # - def get_elements( xpath ) - @elements.to_a( xpath ) - end - - # :call-seq: - # next_element - # - # Returns the next sibling that is an element if it exists, - # +niL+ otherwise: - # - # d = REXML::Document.new 'text' - # d.root.elements['b'].next_element #-> - # d.root.elements['c'].next_element #-> nil - # - def next_element - element = next_sibling - element = element.next_sibling until element.nil? or element.kind_of? Element - return element - end - - # :call-seq: - # previous_element - # - # Returns the previous sibling that is an element if it exists, - # +niL+ otherwise: - # - # d = REXML::Document.new 'text' - # d.root.elements['c'].previous_element #-> - # d.root.elements['b'].previous_element #-> nil - # - def previous_element - element = previous_sibling - element = element.previous_sibling until element.nil? or element.kind_of? Element - return element - end - - - ################################################# - # Text # - ################################################# - - # :call-seq: - # has_text? -> true or false - # - # Returns +true+ if the element has one or more text noded, - # +false+ otherwise: - # - # d = REXML::Document.new 'text' - # a = d.root - # a.has_text? # => true - # b = a[0] - # b.has_text? # => false - # - def has_text? - not text().nil? - end - - # :call-seq: - # text(xpath = nil) -> text_string or nil - # - # Returns the text string from the first text node child - # in a specified element, if it exists, +nil+ otherwise. - # - # With no argument, returns the text from the first text node in +self+: - # - # d = REXML::Document.new "

    some text this is bold! more text

    " - # d.root.text.class # => String - # d.root.text # => "some text " - # - # With argument +xpath+, returns text from the first text node - # in the element that matches +xpath+: - # - # d.root.text(1) # => "this is bold!" - # - # Note that an element may have multiple text nodes, - # possibly separated by other non-text children, as above. - # Even so, the returned value is the string text from the first such node. - # - # Note also that the text note is retrieved by method get_text, - # and so is always normalized text. - # - def text( path = nil ) - rv = get_text(path) - return rv.value unless rv.nil? - nil - end - - # :call-seq: - # get_text(xpath = nil) -> text_node or nil - # - # Returns the first text node child in a specified element, if it exists, - # +nil+ otherwise. - # - # With no argument, returns the first text node from +self+: - # - # d = REXML::Document.new "

    some text this is bold! more text

    " - # d.root.get_text.class # => REXML::Text - # d.root.get_text # => "some text " - # - # With argument +xpath+, returns the first text node from the element - # that matches +xpath+: - # - # d.root.get_text(1) # => "this is bold!" - # - def get_text path = nil - rv = nil - if path - element = @elements[ path ] - rv = element.get_text unless element.nil? - else - rv = @children.find { |node| node.kind_of? Text } - end - return rv - end - - # :call-seq: - # text = string -> string - # text = nil -> nil - # - # Adds, replaces, or removes the first text node child in the element. - # - # With string argument +string+, - # creates a new \REXML::Text node containing that string, - # honoring the current settings for whitespace and row, - # then places the node as the first text child in the element; - # returns +string+. - # - # If the element has no text child, the text node is added: - # - # d = REXML::Document.new '' - # d.root.text = 'foo' #-> 'foo' - # - # If the element has a text child, it is replaced: - # - # d.root.text = 'bar' #-> 'bar' - # - # With argument +nil+, removes the first text child: - # - # d.root.text = nil #-> '' - # - def text=( text ) - if text.kind_of? String - text = Text.new( text, whitespace(), nil, raw() ) - elsif !text.nil? and !text.kind_of? Text - text = Text.new( text.to_s, whitespace(), nil, raw() ) - end - old_text = get_text - if text.nil? - old_text.remove unless old_text.nil? - else - if old_text.nil? - self << text - else - old_text.replace_with( text ) - end - end - return self - end - - # :call-seq: - # add_text(string) -> nil - # add_text(text_node) -> self - # - # Adds text to the element. - # - # When string argument +string+ is given, returns +nil+. - # - # If the element has no child text node, - # creates a \REXML::Text object using the string, - # honoring the current settings for whitespace and raw, - # then adds that node to the element: - # - # d = REXML::Document.new('') - # a = d.root - # a.add_text('foo') - # a.to_a # => [, "foo"] - # - # If the element has child text nodes, - # appends the string to the _last_ text node: - # - # d = REXML::Document.new('foobar') - # a = d.root - # a.add_text('baz') - # a.to_a # => ["foo", , "barbaz"] - # a.add_text('baz') - # a.to_a # => ["foo", , "barbazbaz"] - # - # When text node argument +text_node+ is given, - # appends the node as the last text node in the element; - # returns +self+: - # - # d = REXML::Document.new('foobar') - # a = d.root - # a.add_text(REXML::Text.new('baz')) - # a.to_a # => ["foo", , "bar", "baz"] - # a.add_text(REXML::Text.new('baz')) - # a.to_a # => ["foo", , "bar", "baz", "baz"] - # - def add_text( text ) - if text.kind_of? String - if @children[-1].kind_of? Text - @children[-1] << text - return - end - text = Text.new( text, whitespace(), nil, raw() ) - end - self << text unless text.nil? - return self - end - - # :call-seq: - # node_type -> :element - # - # Returns symbol :element: - # - # d = REXML::Document.new('') - # a = d.root # => - # a.node_type # => :element - # - def node_type - :element - end - - # :call-seq: - # xpath -> string_xpath - # - # Returns the string xpath to the element - # relative to the most distant parent: - # - # d = REXML::Document.new('') - # a = d.root # => ... - # b = a[0] # => ... - # c = b[0] # => - # d.xpath # => "" - # a.xpath # => "/a" - # b.xpath # => "/a/b" - # c.xpath # => "/a/b/c" - # - # If there is no parent, returns the expanded name of the element: - # - # e = REXML::Element.new('foo') - # e.xpath # => "foo" - # - def xpath - path_elements = [] - cur = self - path_elements << __to_xpath_helper( self ) - while cur.parent - cur = cur.parent - path_elements << __to_xpath_helper( cur ) - end - return path_elements.reverse.join( "/" ) - end - - ################################################# - # Attributes # - ################################################# - - # :call-seq: - # [index] -> object - # [attr_name] -> attr_value - # [attr_sym] -> attr_value - # - # With integer argument +index+ given, - # returns the child at offset +index+, or +nil+ if none: - # - # d = REXML::Document.new '>textmore
    ' - # root = d.root - # (0..root.size).each do |index| - # node = root[index] - # p "#{index}: #{node} (#{node.class})" - # end - # - # Output: - # - # "0: (REXML::Element)" - # "1: text (REXML::Text)" - # "2: (REXML::Element)" - # "3: more (REXML::Text)" - # "4: (REXML::Element)" - # "5: (NilClass)" - # - # With string argument +attr_name+ given, - # returns the string value for the given attribute name if it exists, - # otherwise +nil+: - # - # d = REXML::Document.new('') - # root = d.root - # root['attr'] # => "value" - # root['nosuch'] # => nil - # - # With symbol argument +attr_sym+ given, - # returns [attr_sym.to_s]: - # - # root[:attr] # => "value" - # root[:nosuch] # => nil - # - def [](name_or_index) - case name_or_index - when String - attributes[name_or_index] - when Symbol - attributes[name_or_index.to_s] - else - super - end - end - - - # :call-seq: - # attribute(name, namespace = nil) - # - # Returns the string value for the given attribute name. - # - # With only argument +name+ given, - # returns the value of the named attribute if it exists, otherwise +nil+: - # - # xml_string = <<-EOT - # - # - # - # - #
    - # EOT - # d = REXML::Document.new(xml_string) - # root = d.root - # a = root[1] # => - # a.attribute('attr') # => attr='value' - # a.attribute('nope') # => nil - # - # With arguments +name+ and +namespace+ given, - # returns the value of the named attribute if it exists, otherwise +nil+: - # - # xml_string = "" - # document = REXML::Document.new(xml_string) - # document.root.attribute("x") # => x='x' - # document.root.attribute("x", "a") # => a:x='a:x' - # - def attribute( name, namespace=nil ) - prefix = nil - if namespaces.respond_to? :key - prefix = namespaces.key(namespace) if namespace - else - prefix = namespaces.index(namespace) if namespace - end - prefix = nil if prefix == 'xmlns' - - ret_val = - attributes.get_attribute( "#{prefix ? prefix + ':' : ''}#{name}" ) - - return ret_val unless ret_val.nil? - return nil if prefix.nil? - - # now check that prefix'es namespace is not the same as the - # default namespace - return nil unless ( namespaces[ prefix ] == namespaces[ 'xmlns' ] ) - - attributes.get_attribute( name ) - - end - - # :call-seq: - # has_attributes? -> true or false - # - # Returns +true+ if the element has attributes, +false+ otherwise: - # - # d = REXML::Document.new('') - # a, b = *d.root - # a.has_attributes? # => true - # b.has_attributes? # => false - # - def has_attributes? - return !@attributes.empty? - end - - # :call-seq: - # add_attribute(name, value) -> value - # add_attribute(attribute) -> attribute - # - # Adds an attribute to this element, overwriting any existing attribute - # by the same name. - # - # With string argument +name+ and object +value+ are given, - # adds the attribute created with that name and value: - # - # e = REXML::Element.new - # e.add_attribute('attr', 'value') # => "value" - # e['attr'] # => "value" - # e.add_attribute('attr', 'VALUE') # => "VALUE" - # e['attr'] # => "VALUE" - # - # With only attribute object +attribute+ given, - # adds the given attribute: - # - # a = REXML::Attribute.new('attr', 'value') - # e.add_attribute(a) # => attr='value' - # e['attr'] # => "value" - # a = REXML::Attribute.new('attr', 'VALUE') - # e.add_attribute(a) # => attr='VALUE' - # e['attr'] # => "VALUE" - # - def add_attribute( key, value=nil ) - if key.kind_of? Attribute - @attributes << key - else - @attributes[key] = value - end - end - - # :call-seq: - # add_attributes(hash) -> hash - # add_attributes(array) - # - # Adds zero or more attributes to the element; - # returns the argument. - # - # If hash argument +hash+ is given, - # each key must be a string; - # adds each attribute created with the key/value pair: - # - # e = REXML::Element.new - # h = {'foo' => 'bar', 'baz' => 'bat'} - # e.add_attributes(h) - # - # If argument +array+ is given, - # each array member must be a 2-element array [name, value]; - # each name must be a string: - # - # e = REXML::Element.new - # a = [['foo' => 'bar'], ['baz' => 'bat']] - # e.add_attributes(a) - # - def add_attributes hash - if hash.kind_of? Hash - hash.each_pair {|key, value| @attributes[key] = value } - elsif hash.kind_of? Array - hash.each { |value| @attributes[ value[0] ] = value[1] } - end - end - - # :call-seq: - # delete_attribute(name) -> removed_attribute or nil - # - # Removes a named attribute if it exists; - # returns the removed attribute if found, otherwise +nil+: - # - # e = REXML::Element.new('foo') - # e.add_attribute('bar', 'baz') - # e.delete_attribute('bar') # => - # e.delete_attribute('bar') # => nil - # - def delete_attribute(key) - attr = @attributes.get_attribute(key) - attr.remove unless attr.nil? - end - - ################################################# - # Other Utilities # - ################################################# - - # :call-seq: - # cdatas -> array_of_cdata_children - # - # Returns a frozen array of the REXML::CData children of the element: - # - # xml_string = <<-EOT - # - # - # - # - # EOT - # d = REXML::Document.new(xml_string) - # cds = d.root.cdatas # => ["foo", "bar"] - # cds.frozen? # => true - # cds.map {|cd| cd.class } # => [REXML::CData, REXML::CData] - # - def cdatas - find_all { |child| child.kind_of? CData }.freeze - end - - # :call-seq: - # comments -> array_of_comment_children - # - # Returns a frozen array of the REXML::Comment children of the element: - # - # xml_string = <<-EOT - # - # - # - # - # EOT - # d = REXML::Document.new(xml_string) - # cs = d.root.comments - # cs.frozen? # => true - # cs.map {|c| c.class } # => [REXML::Comment, REXML::Comment] - # cs.map {|c| c.to_s } # => ["foo", "bar"] - # - def comments - find_all { |child| child.kind_of? Comment }.freeze - end - - # :call-seq: - # instructions -> array_of_instruction_children - # - # Returns a frozen array of the REXML::Instruction children of the element: - # - # xml_string = <<-EOT - # - # - # - # - # EOT - # d = REXML::Document.new(xml_string) - # is = d.root.instructions - # is.frozen? # => true - # is.map {|i| i.class } # => [REXML::Instruction, REXML::Instruction] - # is.map {|i| i.to_s } # => ["", ""] - # - def instructions - find_all { |child| child.kind_of? Instruction }.freeze - end - - # :call-seq: - # texts -> array_of_text_children - # - # Returns a frozen array of the REXML::Text children of the element: - # - # xml_string = 'textmore' - # d = REXML::Document.new(xml_string) - # ts = d.root.texts - # ts.frozen? # => true - # ts.map {|t| t.class } # => [REXML::Text, REXML::Text] - # ts.map {|t| t.to_s } # => ["text", "more"] - # - def texts - find_all { |child| child.kind_of? Text }.freeze - end - - # == DEPRECATED - # See REXML::Formatters - # - # Writes out this element, and recursively, all children. - # output:: - # output an object which supports '<< string'; this is where the - # document will be written. - # indent:: - # An integer. If -1, no indenting will be used; otherwise, the - # indentation will be this number of spaces, and children will be - # indented an additional amount. Defaults to -1 - # transitive:: - # If transitive is true and indent is >= 0, then the output will be - # pretty-printed in such a way that the added whitespace does not affect - # the parse tree of the document - # ie_hack:: - # This hack inserts a space before the /> on empty tags to address - # a limitation of Internet Explorer. Defaults to false - # - # out = '' - # doc.write( out ) #-> doc is written to the string 'out' - # doc.write( $stdout ) #-> doc written to the console - def write(output=$stdout, indent=-1, transitive=false, ie_hack=false) - Kernel.warn("#{self.class.name}.write is deprecated. See REXML::Formatters", uplevel: 1) - formatter = if indent > -1 - if transitive - require_relative "formatters/transitive" - REXML::Formatters::Transitive.new( indent, ie_hack ) - else - REXML::Formatters::Pretty.new( indent, ie_hack ) - end - else - REXML::Formatters::Default.new( ie_hack ) - end - formatter.write( self, output ) - end - - - private - def __to_xpath_helper node - rv = node.expanded_name.clone - if node.parent - results = node.parent.find_all {|n| - n.kind_of?(REXML::Element) and n.expanded_name == node.expanded_name - } - if results.length > 1 - idx = results.index( node ) - rv << "[#{idx+1}]" - end - end - rv - end - - # A private helper method - def each_with_something( test, max=0, name=nil ) - num = 0 - @elements.each( name ){ |child| - yield child if test.call(child) and num += 1 - return if max>0 and num == max - } - end - end - - ######################################################################## - # ELEMENTS # - ######################################################################## - - # A class which provides filtering of children for Elements, and - # XPath search support. You are expected to only encounter this class as - # the element.elements object. Therefore, you are - # _not_ expected to instantiate this yourself. - # - # xml_string = <<-EOT - # - # - # - # Everyday Italian - # Giada De Laurentiis - # 2005 - # 30.00 - # - # - # Harry Potter - # J K. Rowling - # 2005 - # 29.99 - # - # - # XQuery Kick Start - # James McGovern - # Per Bothner - # Kurt Cagle - # James Linn - # Vaidyanathan Nagarajan - # 2003 - # 49.99 - # - # - # Learning XML - # Erik T. Ray - # 2003 - # 39.95 - # - # - # EOT - # d = REXML::Document.new(xml_string) - # elements = d.root.elements - # elements # => # ... > - # - class Elements - include Enumerable - # :call-seq: - # new(parent) -> new_elements_object - # - # Returns a new \Elements object with the given +parent+. - # Does _not_ assign parent.elements = self: - # - # d = REXML::Document.new(xml_string) - # eles = REXML::Elements.new(d.root) - # eles # => # ... > - # eles == d.root.elements # => false - # - def initialize parent - @element = parent - end - - # :call-seq: - # parent - # - # Returns the parent element cited in creating the \Elements object. - # This element is also the default starting point for searching - # in the \Elements object. - # - # d = REXML::Document.new(xml_string) - # elements = REXML::Elements.new(d.root) - # elements.parent == d.root # => true - # - def parent - @element - end - - # :call-seq: - # elements[index] -> element or nil - # elements[xpath] -> element or nil - # elements[n, name] -> element or nil - # - # Returns the first \Element object selected by the arguments, - # if any found, or +nil+ if none found. - # - # Notes: - # - The +index+ is 1-based, not 0-based, so that: - # - The first element has index 1 - # - The _nth_ element has index +n+. - # - The selection ignores non-\Element nodes. - # - # When the single argument +index+ is given, - # returns the element given by the index, if any; otherwise, +nil+: - # - # d = REXML::Document.new(xml_string) - # eles = d.root.elements - # eles # => # ... > - # eles[1] # => ... - # eles.size # => 4 - # eles[4] # => ... - # eles[5] # => nil - # - # The node at this index is not an \Element, and so is not returned: - # - # eles = d.root.first.first # => ... </> - # eles.to_a # => ["Everyday Italian"] - # eles[1] # => nil - # - # When the single argument +xpath+ is given, - # returns the first element found via that +xpath+, if any; otherwise, +nil+: - # - # eles = d.root.elements # => #<REXML::Elements @element=<bookstore> ... </>> - # eles['/bookstore'] # => <bookstore> ... </> - # eles['//book'] # => <book category='cooking'> ... </> - # eles['//book [@category="children"]'] # => <book category='children'> ... </> - # eles['/nosuch'] # => nil - # eles['//nosuch'] # => nil - # eles['//book [@category="nosuch"]'] # => nil - # eles['.'] # => <bookstore> ... </> - # eles['..'].class # => REXML::Document - # - # With arguments +n+ and +name+ given, - # returns the _nth_ found element that has the given +name+, - # or +nil+ if there is no such _nth_ element: - # - # eles = d.root.elements # => #<REXML::Elements @element=<bookstore> ... </>> - # eles[1, 'book'] # => <book category='cooking'> ... </> - # eles[4, 'book'] # => <book category='web' cover='paperback'> ... </> - # eles[5, 'book'] # => nil - # - def []( index, name=nil) - if index.kind_of? Integer - raise "index (#{index}) must be >= 1" if index < 1 - name = literalize(name) if name - num = 0 - @element.find { |child| - child.kind_of? Element and - (name.nil? ? true : child.has_name?( name )) and - (num += 1) == index - } - else - return XPath::first( @element, index ) - #{ |element| - # return element if element.kind_of? Element - #} - #return nil - end - end - - # :call-seq: - # elements[] = index, replacement_element -> replacement_element or nil - # - # Replaces or adds an element. - # - # When <tt>eles[index]</tt> exists, replaces it with +replacement_element+ - # and returns +replacement_element+: - # - # d = REXML::Document.new(xml_string) - # eles = d.root.elements # => #<REXML::Elements @element=<bookstore> ... </>> - # eles[1] # => <book category='cooking'> ... </> - # eles[1] = REXML::Element.new('foo') - # eles[1] # => <foo/> - # - # Does nothing (or raises an exception) - # if +replacement_element+ is not an \Element: - # eles[2] # => <book category='web' cover='paperback'> ... </> - # eles[2] = REXML::Text.new('bar') - # eles[2] # => <book category='web' cover='paperback'> ... </> - # - # When <tt>eles[index]</tt> does not exist, - # adds +replacement_element+ to the element and returns - # - # d = REXML::Document.new(xml_string) - # eles = d.root.elements # => #<REXML::Elements @element=<bookstore> ... </>> - # eles.size # => 4 - # eles[50] = REXML::Element.new('foo') # => <foo/> - # eles.size # => 5 - # eles[5] # => <foo/> - # - # Does nothing (or raises an exception) - # if +replacement_element+ is not an \Element: - # - # eles[50] = REXML::Text.new('bar') # => "bar" - # eles.size # => 5 - # - def []=( index, element ) - previous = self[index] - if previous.nil? - @element.add element - else - previous.replace_with element - end - return previous - end - - # :call-seq: - # empty? -> true or false - # - # Returns +true+ if there are no children, +false+ otherwise. - # - # d = REXML::Document.new('') - # d.elements.empty? # => true - # d = REXML::Document.new(xml_string) - # d.elements.empty? # => false - # - def empty? - @element.find{ |child| child.kind_of? Element}.nil? - end - - # :call-seq: - # index(element) - # - # Returns the 1-based index of the given +element+, if found; - # otherwise, returns -1: - # - # d = REXML::Document.new(xml_string) - # elements = d.root.elements - # ele_1, ele_2, ele_3, ele_4 = *elements - # elements.index(ele_4) # => 4 - # elements.delete(ele_3) - # elements.index(ele_4) # => 3 - # elements.index(ele_3) # => -1 - # - def index element - rv = 0 - found = @element.find do |child| - child.kind_of? Element and - (rv += 1) and - child == element - end - return rv if found == element - return -1 - end - - # :call-seq: - # delete(index) -> removed_element or nil - # delete(element) -> removed_element or nil - # delete(xpath) -> removed_element or nil - # - # Removes an element; returns the removed element, or +nil+ if none removed. - # - # With integer argument +index+ given, - # removes the child element at that offset: - # - # d = REXML::Document.new(xml_string) - # elements = d.root.elements - # elements.size # => 4 - # elements[2] # => <book category='children'> ... </> - # elements.delete(2) # => <book category='children'> ... </> - # elements.size # => 3 - # elements[2] # => <book category='web'> ... </> - # elements.delete(50) # => nil - # - # With element argument +element+ given, - # removes that child element: - # - # d = REXML::Document.new(xml_string) - # elements = d.root.elements - # ele_1, ele_2, ele_3, ele_4 = *elements - # elements.size # => 4 - # elements[2] # => <book category='children'> ... </> - # elements.delete(ele_2) # => <book category='children'> ... </> - # elements.size # => 3 - # elements[2] # => <book category='web'> ... </> - # elements.delete(ele_2) # => nil - # - # With string argument +xpath+ given, - # removes the first element found via that xpath: - # - # d = REXML::Document.new(xml_string) - # elements = d.root.elements - # elements.delete('//book') # => <book category='cooking'> ... </> - # elements.delete('//book [@category="children"]') # => <book category='children'> ... </> - # elements.delete('//nosuch') # => nil - # - def delete element - if element.kind_of? Element - @element.delete element - else - el = self[element] - el.remove if el - end - end - - # :call-seq: - # delete_all(xpath) - # - # Removes all elements found via the given +xpath+; - # returns the array of removed elements, if any, else +nil+. - # - # d = REXML::Document.new(xml_string) - # elements = d.root.elements - # elements.size # => 4 - # deleted_elements = elements.delete_all('//book [@category="web"]') - # deleted_elements.size # => 2 - # elements.size # => 2 - # deleted_elements = elements.delete_all('//book') - # deleted_elements.size # => 2 - # elements.size # => 0 - # elements.delete_all('//book') # => [] - # - def delete_all( xpath ) - rv = [] - XPath::each( @element, xpath) {|element| - rv << element if element.kind_of? Element - } - rv.each do |element| - @element.delete element - element.remove - end - return rv - end - - # :call-seq: - # add -> new_element - # add(name) -> new_element - # add(element) -> element - # - # Adds an element; returns the element added. - # - # With no argument, creates and adds a new element. - # The new element has: - # - # - No name. - # - \Parent from the \Elements object. - # - Context from the that parent. - # - # Example: - # - # d = REXML::Document.new(xml_string) - # elements = d.root.elements - # parent = elements.parent # => <bookstore> ... </> - # parent.context = {raw: :all} - # elements.size # => 4 - # new_element = elements.add # => </> - # elements.size # => 5 - # new_element.name # => nil - # new_element.parent # => <bookstore> ... </> - # new_element.context # => {:raw=>:all} - # - # With string argument +name+, creates and adds a new element. - # The new element has: - # - # - Name +name+. - # - \Parent from the \Elements object. - # - Context from the that parent. - # - # Example: - # - # d = REXML::Document.new(xml_string) - # elements = d.root.elements - # parent = elements.parent # => <bookstore> ... </> - # parent.context = {raw: :all} - # elements.size # => 4 - # new_element = elements.add('foo') # => <foo/> - # elements.size # => 5 - # new_element.name # => "foo" - # new_element.parent # => <bookstore> ... </> - # new_element.context # => {:raw=>:all} - # - # With argument +element+, - # creates and adds a clone of the given +element+. - # The new element has name, parent, and context from the given +element+. - # - # d = REXML::Document.new(xml_string) - # elements = d.root.elements - # elements.size # => 4 - # e0 = REXML::Element.new('foo') - # e1 = REXML::Element.new('bar', e0, {raw: :all}) - # element = elements.add(e1) # => <bar/> - # elements.size # => 5 - # element.name # => "bar" - # element.parent # => <bookstore> ... </> - # element.context # => {:raw=>:all} - # - def add element=nil - if element.nil? - Element.new("", self, @element.context) - elsif not element.kind_of?(Element) - Element.new(element, self, @element.context) - else - @element << element - element.context = @element.context - element - end - end - - alias :<< :add - - # :call-seq: - # each(xpath = nil) {|element| ... } -> self - # - # Iterates over the elements. - # - # With no argument, calls the block with each element: - # - # d = REXML::Document.new(xml_string) - # elements = d.root.elements - # elements.each {|element| p element } - # - # Output: - # - # <book category='cooking'> ... </> - # <book category='children'> ... </> - # <book category='web'> ... </> - # <book category='web' cover='paperback'> ... </> - # - # With argument +xpath+, calls the block with each element - # that matches the given +xpath+: - # - # elements.each('//book [@category="web"]') {|element| p element } - # - # Output: - # - # <book category='web'> ... </> - # <book category='web' cover='paperback'> ... </> - # - def each( xpath=nil ) - XPath::each( @element, xpath ) {|e| yield e if e.kind_of? Element } - end - - # :call-seq: - # collect(xpath = nil) {|element| ... } -> array - # - # Iterates over the elements; returns the array of block return values. - # - # With no argument, iterates over all elements: - # - # d = REXML::Document.new(xml_string) - # elements = d.root.elements - # elements.collect {|element| element.size } # => [9, 9, 17, 9] - # - # With argument +xpath+, iterates over elements that match - # the given +xpath+: - # - # xpath = '//book [@category="web"]' - # elements.collect(xpath) {|element| element.size } # => [17, 9] - # - def collect( xpath=nil ) - collection = [] - XPath::each( @element, xpath ) {|e| - collection << yield(e) if e.kind_of?(Element) - } - collection - end - - # :call-seq: - # inject(xpath = nil, initial = nil) -> object - # - # Calls the block with elements; returns the last block return value. - # - # With no argument, iterates over the elements, calling the block - # <tt>elements.size - 1</tt> times. - # - # - The first call passes the first and second elements. - # - The second call passes the first block return value and the third element. - # - The third call passes the second block return value and the fourth element. - # - And so on. - # - # In this example, the block returns the passed element, - # which is then the object argument to the next call: - # - # d = REXML::Document.new(xml_string) - # elements = d.root.elements - # elements.inject do |object, element| - # p [elements.index(object), elements.index(element)] - # element - # end - # - # Output: - # - # [1, 2] - # [2, 3] - # [3, 4] - # - # With the single argument +xpath+, calls the block only with - # elements matching that xpath: - # - # elements.inject('//book [@category="web"]') do |object, element| - # p [elements.index(object), elements.index(element)] - # element - # end - # - # Output: - # - # [3, 4] - # - # With argument +xpath+ given as +nil+ - # and argument +initial+ also given, - # calls the block once for each element. - # - # - The first call passes the +initial+ and the first element. - # - The second call passes the first block return value and the second element. - # - The third call passes the second block return value and the third element. - # - And so on. - # - # In this example, the first object index is <tt>-1</tt> - # - # elements.inject(nil, 'Initial') do |object, element| - # p [elements.index(object), elements.index(element)] - # element - # end - # - # Output: - # - # [-1, 1] - # [1, 2] - # [2, 3] - # [3, 4] - # - # In this form the passed object can be used as an accumulator: - # - # elements.inject(nil, 0) do |total, element| - # total += element.size - # end # => 44 - # - # With both arguments +xpath+ and +initial+ are given, - # calls the block only with elements matching that xpath: - # - # elements.inject('//book [@category="web"]', 0) do |total, element| - # total += element.size - # end # => 26 - # - def inject( xpath=nil, initial=nil ) - first = true - XPath::each( @element, xpath ) {|e| - if (e.kind_of? Element) - if (first and initial == nil) - initial = e - first = false - else - initial = yield( initial, e ) if e.kind_of? Element - end - end - } - initial - end - - # :call-seq: - # size -> integer - # - # Returns the count of \Element children: - # - # d = REXML::Document.new '<a>sean<b/>elliott<b/>russell<b/></a>' - # d.root.elements.size # => 3 # Three elements. - # d.root.size # => 6 # Three elements plus three text nodes.. - # - def size - count = 0 - @element.each {|child| count+=1 if child.kind_of? Element } - count - end - - # :call-seq: - # to_a(xpath = nil) -> array_of_elements - # - # Returns an array of element children (not including non-element children). - # - # With no argument, returns an array of all element children: - # - # d = REXML::Document.new '<a>sean<b/>elliott<c/></a>' - # elements = d.root.elements - # elements.to_a # => [<b/>, <c/>] # Omits non-element children. - # children = d.root.children - # children # => ["sean", <b/>, "elliott", <c/>] # Includes non-element children. - # - # With argument +xpath+, returns an array of element children - # that match the xpath: - # - # elements.to_a('//c') # => [<c/>] - # - def to_a( xpath=nil ) - rv = XPath.match( @element, xpath ) - return rv.find_all{|e| e.kind_of? Element} if xpath - rv - end - - private - # Private helper class. Removes quotes from quoted strings - def literalize name - name = name[1..-2] if name[0] == ?' or name[0] == ?" #' - name - end - end - - ######################################################################## - # ATTRIBUTES # - ######################################################################## - - # A class that defines the set of Attributes of an Element and provides - # operations for accessing elements in that set. - class Attributes < Hash - - # :call-seq: - # new(element) - # - # Creates and returns a new \REXML::Attributes object. - # The element given by argument +element+ is stored, - # but its own attributes are not modified: - # - # ele = REXML::Element.new('foo') - # attrs = REXML::Attributes.new(ele) - # attrs.object_id == ele.attributes.object_id # => false - # - # Other instance methods in class \REXML::Attributes may refer to: - # - # - +element.document+. - # - +element.prefix+. - # - +element.expanded_name+. - # - def initialize element - @element = element - end - - # :call-seq: - # [name] -> attribute_value or nil - # - # Returns the value for the attribute given by +name+, - # if it exists; otherwise +nil+. - # The value returned is the unnormalized attribute value, - # with entities expanded: - # - # xml_string = <<-EOT - # <root xmlns:foo="http://foo" xmlns:bar="http://bar"> - # <ele foo:att='1' bar:att='2' att='<'/> - # </root> - # EOT - # d = REXML::Document.new(xml_string) - # ele = d.elements['//ele'] # => <a foo:att='1' bar:att='2' att='<'/> - # ele.attributes['att'] # => "<" - # ele.attributes['bar:att'] # => "2" - # ele.attributes['nosuch'] # => nil - # - # Related: get_attribute (returns an \Attribute object). - # - def [](name) - attr = get_attribute(name) - return attr.value unless attr.nil? - return nil - end - - # :call-seq: - # to_a -> array_of_attribute_objects - # - # Returns an array of \REXML::Attribute objects representing - # the attributes: - # - # xml_string = <<-EOT - # <root xmlns:foo="http://foo" xmlns:bar="http://bar"> - # <ele foo:att='1' bar:att='2' att='<'/> - # </root> - # EOT - # d = REXML::Document.new(xml_string) - # ele = d.root.elements['//ele'] # => <a foo:att='1' bar:att='2' att='<'/> - # attrs = ele.attributes.to_a # => [foo:att='1', bar:att='2', att='<'] - # attrs.first.class # => REXML::Attribute - # - def to_a - enum_for(:each_attribute).to_a - end - - # :call-seq: - # length - # - # Returns the count of attributes: - # - # xml_string = <<-EOT - # <root xmlns:foo="http://foo" xmlns:bar="http://bar"> - # <ele foo:att='1' bar:att='2' att='<'/> - # </root> - # EOT - # d = REXML::Document.new(xml_string) - # ele = d.root.elements['//ele'] # => <a foo:att='1' bar:att='2' att='<'/> - # ele.attributes.length # => 3 - # - def length - c = 0 - each_attribute { c+=1 } - c - end - alias :size :length - - # :call-seq: - # each_attribute {|attr| ... } - # - # Calls the given block with each \REXML::Attribute object: - # - # xml_string = <<-EOT - # <root xmlns:foo="http://foo" xmlns:bar="http://bar"> - # <ele foo:att='1' bar:att='2' att='<'/> - # </root> - # EOT - # d = REXML::Document.new(xml_string) - # ele = d.root.elements['//ele'] # => <a foo:att='1' bar:att='2' att='<'/> - # ele.attributes.each_attribute do |attr| - # p [attr.class, attr] - # end - # - # Output: - # - # [REXML::Attribute, foo:att='1'] - # [REXML::Attribute, bar:att='2'] - # [REXML::Attribute, att='<'] - # - def each_attribute # :yields: attribute - return to_enum(__method__) unless block_given? - each_value do |val| - if val.kind_of? Attribute - yield val - else - val.each_value { |atr| yield atr } - end - end - end - - # :call-seq: - # each {|expanded_name, value| ... } - # - # Calls the given block with each expanded-name/value pair: - # - # xml_string = <<-EOT - # <root xmlns:foo="http://foo" xmlns:bar="http://bar"> - # <ele foo:att='1' bar:att='2' att='<'/> - # </root> - # EOT - # d = REXML::Document.new(xml_string) - # ele = d.root.elements['//ele'] # => <a foo:att='1' bar:att='2' att='<'/> - # ele.attributes.each do |expanded_name, value| - # p [expanded_name, value] - # end - # - # Output: - # - # ["foo:att", "1"] - # ["bar:att", "2"] - # ["att", "<"] - # - def each - return to_enum(__method__) unless block_given? - each_attribute do |attr| - yield [attr.expanded_name, attr.value] - end - end - - # :call-seq: - # get_attribute(name) -> attribute_object or nil - # - # Returns the \REXML::Attribute object for the given +name+: - # - # xml_string = <<-EOT - # <root xmlns:foo="http://foo" xmlns:bar="http://bar"> - # <ele foo:att='1' bar:att='2' att='<'/> - # </root> - # EOT - # d = REXML::Document.new(xml_string) - # ele = d.root.elements['//ele'] # => <a foo:att='1' bar:att='2' att='<'/> - # attrs = ele.attributes - # attrs.get_attribute('foo:att') # => foo:att='1' - # attrs.get_attribute('foo:att').class # => REXML::Attribute - # attrs.get_attribute('bar:att') # => bar:att='2' - # attrs.get_attribute('att') # => att='<' - # attrs.get_attribute('nosuch') # => nil - # - def get_attribute( name ) - attr = fetch( name, nil ) - if attr.nil? - return nil if name.nil? - # Look for prefix - name =~ Namespace::NAMESPLIT - prefix, n = $1, $2 - if prefix - attr = fetch( n, nil ) - # check prefix - if attr == nil - elsif attr.kind_of? Attribute - return attr if prefix == attr.prefix - else - attr = attr[ prefix ] - return attr - end - end - element_document = @element.document - if element_document and element_document.doctype - expn = @element.expanded_name - expn = element_document.doctype.name if expn.size == 0 - attr_val = element_document.doctype.attribute_of(expn, name) - return Attribute.new( name, attr_val ) if attr_val - end - return nil - end - if attr.kind_of? Hash - attr = attr[ @element.prefix ] - end - return attr - end - - # :call-seq: - # [name] = value -> value - # - # When +value+ is non-+nil+, - # assigns that to the attribute for the given +name+, - # overwriting the previous value if it exists: - # - # xml_string = <<-EOT - # <root xmlns:foo="http://foo" xmlns:bar="http://bar"> - # <ele foo:att='1' bar:att='2' att='<'/> - # </root> - # EOT - # d = REXML::Document.new(xml_string) - # ele = d.root.elements['//ele'] # => <a foo:att='1' bar:att='2' att='<'/> - # attrs = ele.attributes - # attrs['foo:att'] = '2' # => "2" - # attrs['baz:att'] = '3' # => "3" - # - # When +value+ is +nil+, deletes the attribute if it exists: - # - # attrs['baz:att'] = nil - # attrs.include?('baz:att') # => false - # - def []=( name, value ) - if value.nil? # Delete the named attribute - attr = get_attribute(name) - delete attr - return - end - - unless value.kind_of? Attribute - if @element.document and @element.document.doctype - value = Text::normalize( value, @element.document.doctype ) - else - value = Text::normalize( value, nil ) - end - value = Attribute.new(name, value) - end - value.element = @element - old_attr = fetch(value.name, nil) - if old_attr.nil? - store(value.name, value) - elsif old_attr.kind_of? Hash - old_attr[value.prefix] = value - elsif old_attr.prefix != value.prefix - # Check for conflicting namespaces - if value.prefix != "xmlns" and old_attr.prefix != "xmlns" - old_namespace = old_attr.namespace - new_namespace = value.namespace - if old_namespace == new_namespace - raise ParseException.new( - "Namespace conflict in adding attribute \"#{value.name}\": "+ - "Prefix \"#{old_attr.prefix}\" = \"#{old_namespace}\" and "+ - "prefix \"#{value.prefix}\" = \"#{new_namespace}\"") - end - end - store value.name, {old_attr.prefix => old_attr, - value.prefix => value} - else - store value.name, value - end - return @element - end - - # :call-seq: - # prefixes -> array_of_prefix_strings - # - # Returns an array of prefix strings in the attributes. - # The array does not include the default - # namespace declaration, if one exists. - # - # xml_string = '<a xmlns="foo" xmlns:x="bar" xmlns:y="twee" z="glorp"/>' - # d = REXML::Document.new(xml_string) - # d.root.attributes.prefixes # => ["x", "y"] - # - def prefixes - ns = [] - each_attribute do |attribute| - ns << attribute.name if attribute.prefix == 'xmlns' - end - if @element.document and @element.document.doctype - expn = @element.expanded_name - expn = @element.document.doctype.name if expn.size == 0 - @element.document.doctype.attributes_of(expn).each { - |attribute| - ns << attribute.name if attribute.prefix == 'xmlns' - } - end - ns - end - - # :call-seq: - # namespaces - # - # Returns a hash of name/value pairs for the namespaces: - # - # xml_string = '<a xmlns="foo" xmlns:x="bar" xmlns:y="twee" z="glorp"/>' - # d = REXML::Document.new(xml_string) - # d.root.attributes.namespaces # => {"xmlns"=>"foo", "x"=>"bar", "y"=>"twee"} - # - def namespaces - namespaces = {} - each_attribute do |attribute| - namespaces[attribute.name] = attribute.value if attribute.prefix == 'xmlns' or attribute.name == 'xmlns' - end - if @element.document and @element.document.doctype - expn = @element.expanded_name - expn = @element.document.doctype.name if expn.size == 0 - @element.document.doctype.attributes_of(expn).each { - |attribute| - namespaces[attribute.name] = attribute.value if attribute.prefix == 'xmlns' or attribute.name == 'xmlns' - } - end - namespaces - end - - # :call-seq: - # delete(name) -> element - # delete(attribute) -> element - # - # Removes a specified attribute if it exists; - # returns the attributes' element. - # - # When string argument +name+ is given, - # removes the attribute of that name if it exists: - # - # xml_string = <<-EOT - # <root xmlns:foo="http://foo" xmlns:bar="http://bar"> - # <ele foo:att='1' bar:att='2' att='<'/> - # </root> - # EOT - # d = REXML::Document.new(xml_string) - # ele = d.root.elements['//ele'] # => <a foo:att='1' bar:att='2' att='<'/> - # attrs = ele.attributes - # attrs.delete('foo:att') # => <ele bar:att='2' att='<'/> - # attrs.delete('foo:att') # => <ele bar:att='2' att='<'/> - # - # When attribute argument +attribute+ is given, - # removes that attribute if it exists: - # - # attr = REXML::Attribute.new('bar:att', '2') - # attrs.delete(attr) # => <ele att='<'/> # => <ele att='<'/> - # attrs.delete(attr) # => <ele att='<'/> # => <ele/> - # - def delete( attribute ) - name = nil - prefix = nil - if attribute.kind_of? Attribute - name = attribute.name - prefix = attribute.prefix - else - attribute =~ Namespace::NAMESPLIT - prefix, name = $1, $2 - prefix = '' unless prefix - end - old = fetch(name, nil) - if old.kind_of? Hash # the supplied attribute is one of many - old.delete(prefix) - if old.size == 1 - repl = nil - old.each_value{|v| repl = v} - store name, repl - end - elsif old.nil? - return @element - else # the supplied attribute is a top-level one - super(name) - end - @element - end - - # :call-seq: - # add(attribute) -> attribute - # - # Adds attribute +attribute+, replacing the previous - # attribute of the same name if it exists; - # returns +attribute+: - # - # xml_string = <<-EOT - # <root xmlns:foo="http://foo" xmlns:bar="http://bar"> - # <ele foo:att='1' bar:att='2' att='<'/> - # </root> - # EOT - # d = REXML::Document.new(xml_string) - # ele = d.root.elements['//ele'] # => <a foo:att='1' bar:att='2' att='<'/> - # attrs = ele.attributes - # attrs # => {"att"=>{"foo"=>foo:att='1', "bar"=>bar:att='2', ""=>att='<'}} - # attrs.add(REXML::Attribute.new('foo:att', '2')) # => foo:att='2' - # attrs.add(REXML::Attribute.new('baz', '3')) # => baz='3' - # attrs.include?('baz') # => true - # - def add( attribute ) - self[attribute.name] = attribute - end - - alias :<< :add - - # :call-seq: - # delete_all(name) -> array_of_removed_attributes - # - # Removes all attributes matching the given +name+; - # returns an array of the removed attributes: - # - # xml_string = <<-EOT - # <root xmlns:foo="http://foo" xmlns:bar="http://bar"> - # <ele foo:att='1' bar:att='2' att='<'/> - # </root> - # EOT - # d = REXML::Document.new(xml_string) - # ele = d.root.elements['//ele'] # => <a foo:att='1' bar:att='2' att='<'/> - # attrs = ele.attributes - # attrs.delete_all('att') # => [att='<'] - # - def delete_all( name ) - rv = [] - each_attribute { |attribute| - rv << attribute if attribute.expanded_name == name - } - rv.each{ |attr| attr.remove } - return rv - end - - # :call-seq: - # get_attribute_ns(namespace, name) - # - # Returns the \REXML::Attribute object among the attributes - # that matches the given +namespace+ and +name+: - # - # xml_string = <<-EOT - # <root xmlns:foo="http://foo" xmlns:bar="http://bar"> - # <ele foo:att='1' bar:att='2' att='<'/> - # </root> - # EOT - # d = REXML::Document.new(xml_string) - # ele = d.root.elements['//ele'] # => <a foo:att='1' bar:att='2' att='<'/> - # attrs = ele.attributes - # attrs.get_attribute_ns('http://foo', 'att') # => foo:att='1' - # attrs.get_attribute_ns('http://foo', 'nosuch') # => nil - # - def get_attribute_ns(namespace, name) - result = nil - each_attribute() { |attribute| - if name == attribute.name && - namespace == attribute.namespace() && - ( !namespace.empty? || !attribute.fully_expanded_name.index(':') ) - # foo will match xmlns:foo, but only if foo isn't also an attribute - result = attribute if !result or !namespace.empty? or - !attribute.fully_expanded_name.index(':') - end - } - result - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/encoding.rb b/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/encoding.rb deleted file mode 100644 index da2d70d6..00000000 --- a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/encoding.rb +++ /dev/null @@ -1,51 +0,0 @@ -# coding: US-ASCII -# frozen_string_literal: false -module REXML - module Encoding - # ID ---> Encoding name - attr_reader :encoding - def encoding=(encoding) - encoding = encoding.name if encoding.is_a?(Encoding) - if encoding.is_a?(String) - original_encoding = encoding - encoding = find_encoding(encoding) - unless encoding - raise ArgumentError, "Bad encoding name #{original_encoding}" - end - end - return false if defined?(@encoding) and encoding == @encoding - if encoding - @encoding = encoding.upcase - else - @encoding = 'UTF-8' - end - true - end - - def encode(string) - string.encode(@encoding) - end - - def decode(string) - string.encode(::Encoding::UTF_8, @encoding) - end - - private - def find_encoding(name) - case name - when /\Ashift-jis\z/i - return "SHIFT_JIS" - when /\ACP-(\d+)\z/ - name = "CP#{$1}" - when /\AUTF-8\z/i - return name - end - begin - ::Encoding::Converter.search_convpath(name, 'UTF-8') - rescue ::Encoding::ConverterNotFoundError - return nil - end - name - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/entity.rb b/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/entity.rb deleted file mode 100644 index 573db691..00000000 --- a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/entity.rb +++ /dev/null @@ -1,181 +0,0 @@ -# frozen_string_literal: false -require_relative 'child' -require_relative 'source' -require_relative 'xmltokens' - -module REXML - class Entity < Child - include XMLTokens - PUBIDCHAR = "\x20\x0D\x0Aa-zA-Z0-9\\-()+,./:=?;!*@$_%#" - SYSTEMLITERAL = %Q{((?:"[^"]*")|(?:'[^']*'))} - PUBIDLITERAL = %Q{("[#{PUBIDCHAR}']*"|'[#{PUBIDCHAR}]*')} - EXTERNALID = "(?:(?:(SYSTEM)\\s+#{SYSTEMLITERAL})|(?:(PUBLIC)\\s+#{PUBIDLITERAL}\\s+#{SYSTEMLITERAL}))" - NDATADECL = "\\s+NDATA\\s+#{NAME}" - PEREFERENCE = "%#{NAME};" - ENTITYVALUE = %Q{((?:"(?:[^%&"]|#{PEREFERENCE}|#{REFERENCE})*")|(?:'([^%&']|#{PEREFERENCE}|#{REFERENCE})*'))} - PEDEF = "(?:#{ENTITYVALUE}|#{EXTERNALID})" - ENTITYDEF = "(?:#{ENTITYVALUE}|(?:#{EXTERNALID}(#{NDATADECL})?))" - PEDECL = "<!ENTITY\\s+(%)\\s+#{NAME}\\s+#{PEDEF}\\s*>" - GEDECL = "<!ENTITY\\s+#{NAME}\\s+#{ENTITYDEF}\\s*>" - ENTITYDECL = /\s*(?:#{GEDECL})|(?:#{PEDECL})/um - - attr_reader :name, :external, :ref, :ndata, :pubid - - # Create a new entity. Simple entities can be constructed by passing a - # name, value to the constructor; this creates a generic, plain entity - # reference. For anything more complicated, you have to pass a Source to - # the constructor with the entity definition, or use the accessor methods. - # +WARNING+: There is no validation of entity state except when the entity - # is read from a stream. If you start poking around with the accessors, - # you can easily create a non-conformant Entity. - # - # e = Entity.new( 'amp', '&' ) - def initialize stream, value=nil, parent=nil, reference=false - super(parent) - @ndata = @pubid = @value = @external = nil - if stream.kind_of? Array - @name = stream[1] - if stream[-1] == '%' - @reference = true - stream.pop - else - @reference = false - end - if stream[2] =~ /SYSTEM|PUBLIC/ - @external = stream[2] - if @external == 'SYSTEM' - @ref = stream[3] - @ndata = stream[4] if stream.size == 5 - else - @pubid = stream[3] - @ref = stream[4] - end - else - @value = stream[2] - end - else - @reference = reference - @external = nil - @name = stream - @value = value - end - end - - # Evaluates whether the given string matches an entity definition, - # returning true if so, and false otherwise. - def Entity::matches? string - (ENTITYDECL =~ string) == 0 - end - - # Evaluates to the unnormalized value of this entity; that is, replacing - # all entities -- both %ent; and &ent; entities. This differs from - # +value()+ in that +value+ only replaces %ent; entities. - def unnormalized - document.record_entity_expansion unless document.nil? - v = value() - return nil if v.nil? - @unnormalized = Text::unnormalize(v, parent) - @unnormalized - end - - #once :unnormalized - - # Returns the value of this entity unprocessed -- raw. This is the - # normalized value; that is, with all %ent; and &ent; entities intact - def normalized - @value - end - - # Write out a fully formed, correct entity definition (assuming the Entity - # object itself is valid.) - # - # out:: - # An object implementing <TT><<</TT> to which the entity will be - # output - # indent:: - # *DEPRECATED* and ignored - def write out, indent=-1 - out << '<!ENTITY ' - out << '% ' if @reference - out << @name - out << ' ' - if @external - out << @external << ' ' - if @pubid - q = @pubid.include?('"')?"'":'"' - out << q << @pubid << q << ' ' - end - q = @ref.include?('"')?"'":'"' - out << q << @ref << q - out << ' NDATA ' << @ndata if @ndata - else - q = @value.include?('"')?"'":'"' - out << q << @value << q - end - out << '>' - end - - # Returns this entity as a string. See write(). - def to_s - rv = '' - write rv - rv - end - - PEREFERENCE_RE = /#{PEREFERENCE}/um - # Returns the value of this entity. At the moment, only internal entities - # are processed. If the value contains internal references (IE, - # %blah;), those are replaced with their values. IE, if the doctype - # contains: - # <!ENTITY % foo "bar"> - # <!ENTITY yada "nanoo %foo; nanoo> - # then: - # doctype.entity('yada').value #-> "nanoo bar nanoo" - def value - @resolved_value ||= resolve_value - end - - def parent=(other) - @resolved_value = nil - super - end - - private - def resolve_value - return nil if @value.nil? - return @value unless @value.match?(PEREFERENCE_RE) - - matches = @value.scan(PEREFERENCE_RE) - rv = @value.clone - if @parent - sum = 0 - matches.each do |entity_reference| - entity_value = @parent.entity( entity_reference[0] ) - if sum + entity_value.bytesize > Security.entity_expansion_text_limit - raise "entity expansion has grown too large" - else - sum += entity_value.bytesize - end - rv.gsub!( /%#{entity_reference.join};/um, entity_value ) - end - end - rv - end - end - - # This is a set of entity constants -- the ones defined in the XML - # specification. These are +gt+, +lt+, +amp+, +quot+ and +apos+. - # CAUTION: these entities does not have parent and document - module EntityConst - # +>+ - GT = Entity.new( 'gt', '>' ) - # +<+ - LT = Entity.new( 'lt', '<' ) - # +&+ - AMP = Entity.new( 'amp', '&' ) - # +"+ - QUOT = Entity.new( 'quot', '"' ) - # +'+ - APOS = Entity.new( 'apos', "'" ) - end -end diff --git a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/formatters/default.rb b/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/formatters/default.rb deleted file mode 100644 index 811b2ff3..00000000 --- a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/formatters/default.rb +++ /dev/null @@ -1,116 +0,0 @@ -# frozen_string_literal: false - -module REXML - module Formatters - class Default - # Prints out the XML document with no formatting -- except if ie_hack is - # set. - # - # ie_hack:: - # If set to true, then inserts whitespace before the close of an empty - # tag, so that IE's bad XML parser doesn't choke. - def initialize( ie_hack=false ) - @ie_hack = ie_hack - end - - # Writes the node to some output. - # - # node:: - # The node to write - # output:: - # A class implementing <TT><<</TT>. Pass in an Output object to - # change the output encoding. - def write( node, output ) - case node - - when Document - if node.xml_decl.encoding != 'UTF-8' && !output.kind_of?(Output) - output = Output.new( output, node.xml_decl.encoding ) - end - write_document( node, output ) - - when Element - write_element( node, output ) - - when Declaration, ElementDecl, NotationDecl, ExternalEntity, Entity, - Attribute, AttlistDecl - node.write( output,-1 ) - - when Instruction - write_instruction( node, output ) - - when DocType, XMLDecl - node.write( output ) - - when Comment - write_comment( node, output ) - - when CData - write_cdata( node, output ) - - when Text - write_text( node, output ) - - else - raise Exception.new("XML FORMATTING ERROR") - - end - end - - protected - def write_document( node, output ) - node.children.each { |child| write( child, output ) } - end - - def write_element( node, output ) - output << "<#{node.expanded_name}" - - node.attributes.to_a.map { |a| - Hash === a ? a.values : a - }.flatten.sort_by {|attr| attr.name}.each do |attr| - output << " " - attr.write( output ) - end unless node.attributes.empty? - - if node.children.empty? - output << " " if @ie_hack - output << "/" - else - output << ">" - node.children.each { |child| - write( child, output ) - } - output << "</#{node.expanded_name}" - end - output << ">" - end - - def write_text( node, output ) - output << node.to_s() - end - - def write_comment( node, output ) - output << Comment::START - output << node.to_s - output << Comment::STOP - end - - def write_cdata( node, output ) - output << CData::START - output << node.to_s - output << CData::STOP - end - - def write_instruction( node, output ) - output << Instruction::START - output << node.target - content = node.content - if content - output << ' ' - output << content - end - output << Instruction::STOP - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/formatters/pretty.rb b/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/formatters/pretty.rb deleted file mode 100644 index a1198b7a..00000000 --- a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/formatters/pretty.rb +++ /dev/null @@ -1,142 +0,0 @@ -# frozen_string_literal: true -require_relative 'default' - -module REXML - module Formatters - # Pretty-prints an XML document. This destroys whitespace in text nodes - # and will insert carriage returns and indentations. - # - # TODO: Add an option to print attributes on new lines - class Pretty < Default - - # If compact is set to true, then the formatter will attempt to use as - # little space as possible - attr_accessor :compact - # The width of a page. Used for formatting text - attr_accessor :width - - # Create a new pretty printer. - # - # output:: - # An object implementing '<<(String)', to which the output will be written. - # indentation:: - # An integer greater than 0. The indentation of each level will be - # this number of spaces. If this is < 1, the behavior of this object - # is undefined. Defaults to 2. - # ie_hack:: - # If true, the printer will insert whitespace before closing empty - # tags, thereby allowing Internet Explorer's XML parser to - # function. Defaults to false. - def initialize( indentation=2, ie_hack=false ) - @indentation = indentation - @level = 0 - @ie_hack = ie_hack - @width = 80 - @compact = false - end - - protected - def write_element(node, output) - output << ' '*@level - output << "<#{node.expanded_name}" - - node.attributes.each_attribute do |attr| - output << " " - attr.write( output ) - end unless node.attributes.empty? - - if node.children.empty? - if @ie_hack - output << " " - end - output << "/" - else - output << ">" - # If compact and all children are text, and if the formatted output - # is less than the specified width, then try to print everything on - # one line - skip = false - if compact - if node.children.inject(true) {|s,c| s & c.kind_of?(Text)} - string = +"" - old_level = @level - @level = 0 - node.children.each { |child| write( child, string ) } - @level = old_level - if string.length < @width - output << string - skip = true - end - end - end - unless skip - output << "\n" - @level += @indentation - node.children.each { |child| - next if child.kind_of?(Text) and child.to_s.strip.length == 0 - write( child, output ) - output << "\n" - } - @level -= @indentation - output << ' '*@level - end - output << "</#{node.expanded_name}" - end - output << ">" - end - - def write_text( node, output ) - s = node.to_s() - s.gsub!(/\s/,' ') - s.squeeze!(" ") - s = wrap(s, @width - @level) - s = indent_text(s, @level, " ", true) - output << (' '*@level + s) - end - - def write_comment( node, output) - output << ' ' * @level - super - end - - def write_cdata( node, output) - output << ' ' * @level - super - end - - def write_document( node, output ) - # Ok, this is a bit odd. All XML documents have an XML declaration, - # but it may not write itself if the user didn't specifically add it, - # either through the API or in the input document. If it doesn't write - # itself, then we don't need a carriage return... which makes this - # logic more complex. - node.children.each { |child| - next if child == node.children[-1] and child.instance_of?(Text) - unless child == node.children[0] or child.instance_of?(Text) or - (child == node.children[1] and !node.children[0].writethis) - output << "\n" - end - write( child, output ) - } - end - - private - def indent_text(string, level=1, style="\t", indentfirstline=true) - return string if level < 0 - string.gsub(/\n/, "\n#{style*level}") - end - - def wrap(string, width) - parts = [] - while string.length > width and place = string.rindex(' ', width) - parts << string[0...place] - string = string[place+1..-1] - end - parts << string - parts.join("\n") - end - - end - end -end - diff --git a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/formatters/transitive.rb b/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/formatters/transitive.rb deleted file mode 100644 index 5ff51e10..00000000 --- a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/formatters/transitive.rb +++ /dev/null @@ -1,58 +0,0 @@ -# frozen_string_literal: false -require_relative 'pretty' - -module REXML - module Formatters - # The Transitive formatter writes an XML document that parses to an - # identical document as the source document. This means that no extra - # whitespace nodes are inserted, and whitespace within text nodes is - # preserved. Within these constraints, the document is pretty-printed, - # with whitespace inserted into the metadata to introduce formatting. - # - # Note that this is only useful if the original XML is not already - # formatted. Since this formatter does not alter whitespace nodes, the - # results of formatting already formatted XML will be odd. - class Transitive < Default - def initialize( indentation=2, ie_hack=false ) - @indentation = indentation - @level = 0 - @ie_hack = ie_hack - end - - protected - def write_element( node, output ) - output << "<#{node.expanded_name}" - - node.attributes.each_attribute do |attr| - output << " " - attr.write( output ) - end unless node.attributes.empty? - - output << "\n" - output << ' '*@level - if node.children.empty? - output << " " if @ie_hack - output << "/" - else - output << ">" - # If compact and all children are text, and if the formatted output - # is less than the specified width, then try to print everything on - # one line - @level += @indentation - node.children.each { |child| - write( child, output ) - } - @level -= @indentation - output << "</#{node.expanded_name}" - output << "\n" - output << ' '*@level - end - output << ">" - end - - def write_text( node, output ) - output << node.to_s() - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/functions.rb b/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/functions.rb deleted file mode 100644 index 77926bf2..00000000 --- a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/functions.rb +++ /dev/null @@ -1,447 +0,0 @@ -# frozen_string_literal: false -module REXML - # If you add a method, keep in mind two things: - # (1) the first argument will always be a list of nodes from which to - # filter. In the case of context methods (such as position), the function - # should return an array with a value for each child in the array. - # (2) all method calls from XML will have "-" replaced with "_". - # Therefore, in XML, "local-name()" is identical (and actually becomes) - # "local_name()" - module Functions - @@available_functions = {} - @@context = nil - @@namespace_context = {} - @@variables = {} - - INTERNAL_METHODS = [ - :namespace_context, - :namespace_context=, - :variables, - :variables=, - :context=, - :get_namespace, - :send, - ] - class << self - def singleton_method_added(name) - unless INTERNAL_METHODS.include?(name) - @@available_functions[name] = true - end - end - end - - def Functions::namespace_context=(x) ; @@namespace_context=x ; end - def Functions::variables=(x) ; @@variables=x ; end - def Functions::namespace_context ; @@namespace_context ; end - def Functions::variables ; @@variables ; end - - def Functions::context=(value); @@context = value; end - - def Functions::text( ) - if @@context[:node].node_type == :element - return @@context[:node].find_all{|n| n.node_type == :text}.collect{|n| n.value} - elsif @@context[:node].node_type == :text - return @@context[:node].value - else - return false - end - end - - # Returns the last node of the given list of nodes. - def Functions::last( ) - @@context[:size] - end - - def Functions::position( ) - @@context[:index] - end - - # Returns the size of the given list of nodes. - def Functions::count( node_set ) - node_set.size - end - - # Since REXML is non-validating, this method is not implemented as it - # requires a DTD - def Functions::id( object ) - end - - def Functions::local_name(node_set=nil) - get_namespace(node_set) do |node| - return node.local_name - end - "" - end - - def Functions::namespace_uri( node_set=nil ) - get_namespace( node_set ) {|node| node.namespace} - end - - def Functions::name( node_set=nil ) - get_namespace( node_set ) do |node| - node.expanded_name - end - end - - # Helper method. - def Functions::get_namespace( node_set = nil ) - if node_set == nil - yield @@context[:node] if @@context[:node].respond_to?(:namespace) - else - if node_set.respond_to? :each - result = [] - node_set.each do |node| - result << yield(node) if node.respond_to?(:namespace) - end - result - elsif node_set.respond_to? :namespace - yield node_set - end - end - end - - # A node-set is converted to a string by returning the string-value of the - # node in the node-set that is first in document order. If the node-set is - # empty, an empty string is returned. - # - # A number is converted to a string as follows - # - # NaN is converted to the string NaN - # - # positive zero is converted to the string 0 - # - # negative zero is converted to the string 0 - # - # positive infinity is converted to the string Infinity - # - # negative infinity is converted to the string -Infinity - # - # if the number is an integer, the number is represented in decimal form - # as a Number with no decimal point and no leading zeros, preceded by a - # minus sign (-) if the number is negative - # - # otherwise, the number is represented in decimal form as a Number - # including a decimal point with at least one digit before the decimal - # point and at least one digit after the decimal point, preceded by a - # minus sign (-) if the number is negative; there must be no leading zeros - # before the decimal point apart possibly from the one required digit - # immediately before the decimal point; beyond the one required digit - # after the decimal point there must be as many, but only as many, more - # digits as are needed to uniquely distinguish the number from all other - # IEEE 754 numeric values. - # - # The boolean false value is converted to the string false. The boolean - # true value is converted to the string true. - # - # An object of a type other than the four basic types is converted to a - # string in a way that is dependent on that type. - def Functions::string( object=@@context[:node] ) - if object.respond_to?(:node_type) - case object.node_type - when :attribute - object.value - when :element - string_value(object) - when :document - string_value(object.root) - when :processing_instruction - object.content - else - object.to_s - end - else - case object - when Array - string(object[0]) - when Float - if object.nan? - "NaN" - else - integer = object.to_i - if object == integer - "%d" % integer - else - object.to_s - end - end - else - object.to_s - end - end - end - - # A node-set is converted to a string by - # returning the concatenation of the string-value - # of each of the children of the node in the - # node-set that is first in document order. - # If the node-set is empty, an empty string is returned. - def Functions::string_value( o ) - rv = "" - o.children.each { |e| - if e.node_type == :text - rv << e.to_s - elsif e.node_type == :element - rv << string_value( e ) - end - } - rv - end - - def Functions::concat( *objects ) - concatenated = "" - objects.each do |object| - concatenated << string(object) - end - concatenated - end - - # Fixed by Mike Stok - def Functions::starts_with( string, test ) - string(string).index(string(test)) == 0 - end - - # Fixed by Mike Stok - def Functions::contains( string, test ) - string(string).include?(string(test)) - end - - # Kouhei fixed this - def Functions::substring_before( string, test ) - ruby_string = string(string) - ruby_index = ruby_string.index(string(test)) - if ruby_index.nil? - "" - else - ruby_string[ 0...ruby_index ] - end - end - - # Kouhei fixed this too - def Functions::substring_after( string, test ) - ruby_string = string(string) - return $1 if ruby_string =~ /#{test}(.*)/ - "" - end - - # Take equal portions of Mike Stok and Sean Russell; mix - # vigorously, and pour into a tall, chilled glass. Serves 10,000. - def Functions::substring( string, start, length=nil ) - ruby_string = string(string) - ruby_length = if length.nil? - ruby_string.length.to_f - else - number(length) - end - ruby_start = number(start) - - # Handle the special cases - return '' if ( - ruby_length.nan? or - ruby_start.nan? or - ruby_start.infinite? - ) - - infinite_length = ruby_length.infinite? == 1 - ruby_length = ruby_string.length if infinite_length - - # Now, get the bounds. The XPath bounds are 1..length; the ruby bounds - # are 0..length. Therefore, we have to offset the bounds by one. - ruby_start = round(ruby_start) - 1 - ruby_length = round(ruby_length) - - if ruby_start < 0 - ruby_length += ruby_start unless infinite_length - ruby_start = 0 - end - return '' if ruby_length <= 0 - ruby_string[ruby_start,ruby_length] - end - - # UNTESTED - def Functions::string_length( string ) - string(string).length - end - - # UNTESTED - def Functions::normalize_space( string=nil ) - string = string(@@context[:node]) if string.nil? - if string.kind_of? Array - string.collect{|x| string.to_s.strip.gsub(/\s+/um, ' ') if string} - else - string.to_s.strip.gsub(/\s+/um, ' ') - end - end - - # This is entirely Mike Stok's beast - def Functions::translate( string, tr1, tr2 ) - from = string(tr1) - to = string(tr2) - - # the map is our translation table. - # - # if a character occurs more than once in the - # from string then we ignore the second & - # subsequent mappings - # - # if a character maps to nil then we delete it - # in the output. This happens if the from - # string is longer than the to string - # - # there's nothing about - or ^ being special in - # http://www.w3.org/TR/xpath#function-translate - # so we don't build ranges or negated classes - - map = Hash.new - 0.upto(from.length - 1) { |pos| - from_char = from[pos] - unless map.has_key? from_char - map[from_char] = - if pos < to.length - to[pos] - else - nil - end - end - } - - if ''.respond_to? :chars - string(string).chars.collect { |c| - if map.has_key? c then map[c] else c end - }.compact.join - else - string(string).unpack('U*').collect { |c| - if map.has_key? c then map[c] else c end - }.compact.pack('U*') - end - end - - def Functions::boolean(object=@@context[:node]) - case object - when true, false - object - when Float - return false if object.zero? - return false if object.nan? - true - when Numeric - not object.zero? - when String - not object.empty? - when Array - not object.empty? - else - object ? true : false - end - end - - # UNTESTED - def Functions::not( object ) - not boolean( object ) - end - - # UNTESTED - def Functions::true( ) - true - end - - # UNTESTED - def Functions::false( ) - false - end - - # UNTESTED - def Functions::lang( language ) - lang = false - node = @@context[:node] - attr = nil - until node.nil? - if node.node_type == :element - attr = node.attributes["xml:lang"] - unless attr.nil? - lang = compare_language(string(language), attr) - break - else - end - end - node = node.parent - end - lang - end - - def Functions::compare_language lang1, lang2 - lang2.downcase.index(lang1.downcase) == 0 - end - - # a string that consists of optional whitespace followed by an optional - # minus sign followed by a Number followed by whitespace is converted to - # the IEEE 754 number that is nearest (according to the IEEE 754 - # round-to-nearest rule) to the mathematical value represented by the - # string; any other string is converted to NaN - # - # boolean true is converted to 1; boolean false is converted to 0 - # - # a node-set is first converted to a string as if by a call to the string - # function and then converted in the same way as a string argument - # - # an object of a type other than the four basic types is converted to a - # number in a way that is dependent on that type - def Functions::number(object=@@context[:node]) - case object - when true - Float(1) - when false - Float(0) - when Array - number(string(object)) - when Numeric - object.to_f - else - str = string(object) - case str.strip - when /\A\s*(-?(?:\d+(?:\.\d*)?|\.\d+))\s*\z/ - $1.to_f - else - Float::NAN - end - end - end - - def Functions::sum( nodes ) - nodes = [nodes] unless nodes.kind_of? Array - nodes.inject(0) { |r,n| r + number(string(n)) } - end - - def Functions::floor( number ) - number(number).floor - end - - def Functions::ceiling( number ) - number(number).ceil - end - - def Functions::round( number ) - number = number(number) - begin - neg = number.negative? - number = number.abs.round - neg ? -number : number - rescue FloatDomainError - number - end - end - - def Functions::processing_instruction( node ) - node.node_type == :processing_instruction - end - - def Functions::send(name, *args) - if @@available_functions[name.to_sym] - super - else - # TODO: Maybe, this is not XPath spec behavior. - # This behavior must be reconsidered. - XPath.match(@@context[:node], name.to_s) - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/instruction.rb b/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/instruction.rb deleted file mode 100644 index 318741f0..00000000 --- a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/instruction.rb +++ /dev/null @@ -1,79 +0,0 @@ -# frozen_string_literal: false - -require_relative "child" -require_relative "source" - -module REXML - # Represents an XML Instruction; IE, <? ... ?> - # TODO: Add parent arg (3rd arg) to constructor - class Instruction < Child - START = "<?" - STOP = "?>" - - # target is the "name" of the Instruction; IE, the "tag" in <?tag ...?> - # content is everything else. - attr_accessor :target, :content - - # Constructs a new Instruction - # @param target can be one of a number of things. If String, then - # the target of this instruction is set to this. If an Instruction, - # then the Instruction is shallowly cloned (target and content are - # copied). - # @param content Must be either a String, or a Parent. Can only - # be a Parent if the target argument is a Source. Otherwise, this - # String is set as the content of this instruction. - def initialize(target, content=nil) - case target - when String - super() - @target = target - @content = content - when Instruction - super(content) - @target = target.target - @content = target.content - else - message = - "processing instruction target must be String or REXML::Instruction: " - message << "<#{target.inspect}>" - raise ArgumentError, message - end - @content.strip! if @content - end - - def clone - Instruction.new self - end - - # == DEPRECATED - # See the rexml/formatters package - # - def write writer, indent=-1, transitive=false, ie_hack=false - Kernel.warn( "#{self.class.name}.write is deprecated", uplevel: 1) - indent(writer, indent) - writer << START - writer << @target - if @content - writer << ' ' - writer << @content - end - writer << STOP - end - - # @return true if other is an Instruction, and the content and target - # of the other matches the target and content of this object. - def ==( other ) - other.kind_of? Instruction and - other.target == @target and - other.content == @content - end - - def node_type - :processing_instruction - end - - def inspect - "<?p-i #{target} ...?>" - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/light/node.rb b/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/light/node.rb deleted file mode 100644 index 3dab885b..00000000 --- a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/light/node.rb +++ /dev/null @@ -1,188 +0,0 @@ -# frozen_string_literal: false -require_relative '../xmltokens' - -module REXML - module Light - # Represents a tagged XML element. Elements are characterized by - # having children, attributes, and names, and can themselves be - # children. - class Node - NAMESPLIT = /^(?:(#{XMLTokens::NCNAME_STR}):)?(#{XMLTokens::NCNAME_STR})/u - PARENTS = [ :element, :document, :doctype ] - # Create a new element. - def initialize node=nil - @node = node - if node.kind_of? String - node = [ :text, node ] - elsif node.nil? - node = [ :document, nil, nil ] - elsif node[0] == :start_element - node[0] = :element - elsif node[0] == :start_doctype - node[0] = :doctype - elsif node[0] == :start_document - node[0] = :document - end - end - - def size - if PARENTS.include? @node[0] - @node[-1].size - else - 0 - end - end - - def each - size.times { |x| yield( at(x+4) ) } - end - - def name - at(2) - end - - def name=( name_str, ns=nil ) - pfx = '' - pfx = "#{prefix(ns)}:" if ns - _old_put(2, "#{pfx}#{name_str}") - end - - def parent=( node ) - _old_put(1,node) - end - - def local_name - namesplit - @name - end - - def local_name=( name_str ) - _old_put( 1, "#@prefix:#{name_str}" ) - end - - def prefix( namespace=nil ) - prefix_of( self, namespace ) - end - - def namespace( prefix=prefix() ) - namespace_of( self, prefix ) - end - - def namespace=( namespace ) - @prefix = prefix( namespace ) - pfx = '' - pfx = "#@prefix:" if @prefix.size > 0 - _old_put(1, "#{pfx}#@name") - end - - def []( reference, ns=nil ) - if reference.kind_of? String - pfx = '' - pfx = "#{prefix(ns)}:" if ns - at(3)["#{pfx}#{reference}"] - elsif reference.kind_of? Range - _old_get( Range.new(4+reference.begin, reference.end, reference.exclude_end?) ) - else - _old_get( 4+reference ) - end - end - - def =~( path ) - XPath.match( self, path ) - end - - # Doesn't handle namespaces yet - def []=( reference, ns, value=nil ) - if reference.kind_of? String - value = ns unless value - at( 3 )[reference] = value - elsif reference.kind_of? Range - _old_put( Range.new(3+reference.begin, reference.end, reference.exclude_end?), ns ) - else - if value - _old_put( 4+reference, ns, value ) - else - _old_put( 4+reference, ns ) - end - end - end - - # Append a child to this element, optionally under a provided namespace. - # The namespace argument is ignored if the element argument is an Element - # object. Otherwise, the element argument is a string, the namespace (if - # provided) is the namespace the element is created in. - def << element - if node_type() == :text - at(-1) << element - else - newnode = Node.new( element ) - newnode.parent = self - self.push( newnode ) - end - at(-1) - end - - def node_type - _old_get(0) - end - - def text=( foo ) - replace = at(4).kind_of?(String)? 1 : 0 - self._old_put(4,replace, normalizefoo) - end - - def root - context = self - context = context.at(1) while context.at(1) - end - - def has_name?( name, namespace = '' ) - at(3) == name and namespace() == namespace - end - - def children - self - end - - def parent - at(1) - end - - def to_s - - end - - private - - def namesplit - return if @name.defined? - at(2) =~ NAMESPLIT - @prefix = '' || $1 - @name = $2 - end - - def namespace_of( node, prefix=nil ) - if not prefix - name = at(2) - name =~ NAMESPLIT - prefix = $1 - end - to_find = 'xmlns' - to_find = "xmlns:#{prefix}" if not prefix.nil? - ns = at(3)[ to_find ] - ns ? ns : namespace_of( @node[0], prefix ) - end - - def prefix_of( node, namespace=nil ) - if not namespace - name = node.name - name =~ NAMESPLIT - $1 - else - ns = at(3).find { |k,v| v == namespace } - ns ? ns : prefix_of( node.parent, namespace ) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/namespace.rb b/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/namespace.rb deleted file mode 100644 index 2e67252a..00000000 --- a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/namespace.rb +++ /dev/null @@ -1,63 +0,0 @@ -# frozen_string_literal: true - -require_relative 'xmltokens' - -module REXML - # Adds named attributes to an object. - module Namespace - # The name of the object, valid if set - attr_reader :name, :expanded_name - # The expanded name of the object, valid if name is set - attr_accessor :prefix - include XMLTokens - NAME_WITHOUT_NAMESPACE = /\A#{NCNAME_STR}\z/ - NAMESPLIT = /^(?:(#{NCNAME_STR}):)?(#{NCNAME_STR})/u - - # Sets the name and the expanded name - def name=( name ) - @expanded_name = name - if name.match?(NAME_WITHOUT_NAMESPACE) - @prefix = "" - @namespace = "" - @name = name - elsif name =~ NAMESPLIT - if $1 - @prefix = $1 - else - @prefix = "" - @namespace = "" - end - @name = $2 - elsif name == "" - @prefix = nil - @namespace = nil - @name = nil - else - message = "name must be \#{PREFIX}:\#{LOCAL_NAME} or \#{LOCAL_NAME}: " - message += "<#{name.inspect}>" - raise ArgumentError, message - end - end - - # Compares names optionally WITH namespaces - def has_name?( other, ns=nil ) - if ns - return (namespace() == ns and name() == other) - elsif other.include? ":" - return fully_expanded_name == other - else - return name == other - end - end - - alias :local_name :name - - # Fully expand the name, even if the prefix wasn't specified in the - # source file. - def fully_expanded_name - ns = prefix - return "#{ns}:#@name" if ns.size > 0 - return @name - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/node.rb b/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/node.rb deleted file mode 100644 index 081caba6..00000000 --- a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/node.rb +++ /dev/null @@ -1,76 +0,0 @@ -# frozen_string_literal: false -require_relative "parseexception" -require_relative "formatters/pretty" -require_relative "formatters/default" - -module REXML - # Represents a node in the tree. Nodes are never encountered except as - # superclasses of other objects. Nodes have siblings. - module Node - # @return the next sibling (nil if unset) - def next_sibling_node - return nil if @parent.nil? - @parent[ @parent.index(self) + 1 ] - end - - # @return the previous sibling (nil if unset) - def previous_sibling_node - return nil if @parent.nil? - ind = @parent.index(self) - return nil if ind == 0 - @parent[ ind - 1 ] - end - - # indent:: - # *DEPRECATED* This parameter is now ignored. See the formatters in the - # REXML::Formatters package for changing the output style. - def to_s indent=nil - unless indent.nil? - Kernel.warn( "#{self.class.name}.to_s(indent) parameter is deprecated", uplevel: 1) - f = REXML::Formatters::Pretty.new( indent ) - f.write( self, rv = "" ) - else - f = REXML::Formatters::Default.new - f.write( self, rv = "" ) - end - return rv - end - - def indent to, ind - if @parent and @parent.context and not @parent.context[:indentstyle].nil? then - indentstyle = @parent.context[:indentstyle] - else - indentstyle = ' ' - end - to << indentstyle*ind unless ind<1 - end - - def parent? - false; - end - - - # Visit all subnodes of +self+ recursively - def each_recursive(&block) # :yields: node - self.elements.each {|node| - block.call(node) - node.each_recursive(&block) - } - end - - # Find (and return) first subnode (recursively) for which the block - # evaluates to true. Returns +nil+ if none was found. - def find_first_recursive(&block) # :yields: node - each_recursive {|node| - return node if block.call(node) - } - return nil - end - - # Returns the position that +self+ holds in its parent's array, indexed - # from 1. - def index_in_parent - parent.index(self)+1 - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/output.rb b/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/output.rb deleted file mode 100644 index 88a5fb37..00000000 --- a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/output.rb +++ /dev/null @@ -1,30 +0,0 @@ -# frozen_string_literal: false -require_relative 'encoding' - -module REXML - class Output - include Encoding - - attr_reader :encoding - - def initialize real_IO, encd="iso-8859-1" - @output = real_IO - self.encoding = encd - - @to_utf = encoding != 'UTF-8' - - if encoding == "UTF-16" - @output << "\ufeff".encode("UTF-16BE") - self.encoding = "UTF-16BE" - end - end - - def <<( content ) - @output << (@to_utf ? self.encode(content) : content) - end - - def to_s - "Output[#{encoding}]" - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/parent.rb b/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/parent.rb deleted file mode 100644 index 6a53b37a..00000000 --- a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/parent.rb +++ /dev/null @@ -1,166 +0,0 @@ -# frozen_string_literal: false -require_relative "child" - -module REXML - # A parent has children, and has methods for accessing them. The Parent - # class is never encountered except as the superclass for some other - # object. - class Parent < Child - include Enumerable - - # Constructor - # @param parent if supplied, will be set as the parent of this object - def initialize parent=nil - super(parent) - @children = [] - end - - def add( object ) - object.parent = self - @children << object - object - end - - alias :push :add - alias :<< :push - - def unshift( object ) - object.parent = self - @children.unshift object - end - - def delete( object ) - found = false - @children.delete_if {|c| c.equal?(object) and found = true } - object.parent = nil if found - found ? object : nil - end - - def each(&block) - @children.each(&block) - end - - def delete_if( &block ) - @children.delete_if(&block) - end - - def delete_at( index ) - @children.delete_at index - end - - def each_index( &block ) - @children.each_index(&block) - end - - # Fetches a child at a given index - # @param index the Integer index of the child to fetch - def []( index ) - @children[index] - end - - alias :each_child :each - - - - # Set an index entry. See Array.[]= - # @param index the index of the element to set - # @param opt either the object to set, or an Integer length - # @param child if opt is an Integer, this is the child to set - # @return the parent (self) - def []=( *args ) - args[-1].parent = self - @children[*args[0..-2]] = args[-1] - end - - # Inserts an child before another child - # @param child1 this is either an xpath or an Element. If an Element, - # child2 will be inserted before child1 in the child list of the parent. - # If an xpath, child2 will be inserted before the first child to match - # the xpath. - # @param child2 the child to insert - # @return the parent (self) - def insert_before( child1, child2 ) - if child1.kind_of? String - child1 = XPath.first( self, child1 ) - child1.parent.insert_before child1, child2 - else - ind = index(child1) - child2.parent.delete(child2) if child2.parent - @children[ind,0] = child2 - child2.parent = self - end - self - end - - # Inserts an child after another child - # @param child1 this is either an xpath or an Element. If an Element, - # child2 will be inserted after child1 in the child list of the parent. - # If an xpath, child2 will be inserted after the first child to match - # the xpath. - # @param child2 the child to insert - # @return the parent (self) - def insert_after( child1, child2 ) - if child1.kind_of? String - child1 = XPath.first( self, child1 ) - child1.parent.insert_after child1, child2 - else - ind = index(child1)+1 - child2.parent.delete(child2) if child2.parent - @children[ind,0] = child2 - child2.parent = self - end - self - end - - def to_a - @children.dup - end - - # Fetches the index of a given child - # @param child the child to get the index of - # @return the index of the child, or nil if the object is not a child - # of this parent. - def index( child ) - count = -1 - @children.find { |i| count += 1 ; i.hash == child.hash } - count - end - - # @return the number of children of this parent - def size - @children.size - end - - alias :length :size - - # Replaces one child with another, making sure the nodelist is correct - # @param to_replace the child to replace (must be a Child) - # @param replacement the child to insert into the nodelist (must be a - # Child) - def replace_child( to_replace, replacement ) - @children.map! {|c| c.equal?( to_replace ) ? replacement : c } - to_replace.parent = nil - replacement.parent = self - end - - # Deeply clones this object. This creates a complete duplicate of this - # Parent, including all descendants. - def deep_clone - cl = clone() - each do |child| - if child.kind_of? Parent - cl << child.deep_clone - else - cl << child.clone - end - end - cl - end - - alias :children :to_a - - def parent? - true - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/parseexception.rb b/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/parseexception.rb deleted file mode 100644 index 7b16cd1a..00000000 --- a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/parseexception.rb +++ /dev/null @@ -1,52 +0,0 @@ -# frozen_string_literal: false -module REXML - class ParseException < RuntimeError - attr_accessor :source, :parser, :continued_exception - - def initialize( message, source=nil, parser=nil, exception=nil ) - super(message) - @source = source - @parser = parser - @continued_exception = exception - end - - def to_s - # Quote the original exception, if there was one - if @continued_exception - err = @continued_exception.inspect - err << "\n" - err << @continued_exception.backtrace.join("\n") - err << "\n...\n" - else - err = "" - end - - # Get the stack trace and error message - err << super - - # Add contextual information - if @source - err << "\nLine: #{line}\n" - err << "Position: #{position}\n" - err << "Last 80 unconsumed characters:\n" - err << @source.buffer[0..80].force_encoding("ASCII-8BIT").gsub(/\n/, ' ') - end - - err - end - - def position - @source.current_line[0] if @source and defined? @source.current_line and - @source.current_line - end - - def line - @source.current_line[2] if @source and defined? @source.current_line and - @source.current_line - end - - def context - @source.current_line - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/parsers/baseparser.rb b/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/parsers/baseparser.rb deleted file mode 100644 index 305b1207..00000000 --- a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/parsers/baseparser.rb +++ /dev/null @@ -1,694 +0,0 @@ -# frozen_string_literal: false -require_relative '../parseexception' -require_relative '../undefinednamespaceexception' -require_relative '../source' -require 'set' -require "strscan" - -module REXML - module Parsers - # = Using the Pull Parser - # <em>This API is experimental, and subject to change.</em> - # parser = PullParser.new( "<a>text<b att='val'/>txet</a>" ) - # while parser.has_next? - # res = parser.next - # puts res[1]['att'] if res.start_tag? and res[0] == 'b' - # end - # See the PullEvent class for information on the content of the results. - # The data is identical to the arguments passed for the various events to - # the StreamListener API. - # - # Notice that: - # parser = PullParser.new( "<a>BAD DOCUMENT" ) - # while parser.has_next? - # res = parser.next - # raise res[1] if res.error? - # end - # - # Nat Price gave me some good ideas for the API. - class BaseParser - LETTER = '[:alpha:]' - DIGIT = '[:digit:]' - - COMBININGCHAR = '' # TODO - EXTENDER = '' # TODO - - NCNAME_STR= "[#{LETTER}_][-[:alnum:]._#{COMBININGCHAR}#{EXTENDER}]*" - QNAME_STR= "(?:(#{NCNAME_STR}):)?(#{NCNAME_STR})" - QNAME = /(#{QNAME_STR})/ - - # Just for backward compatibility. For example, kramdown uses this. - # It's not used in REXML. - UNAME_STR= "(?:#{NCNAME_STR}:)?#{NCNAME_STR}" - - NAMECHAR = '[\-\w\.:]' - NAME = "([\\w:]#{NAMECHAR}*)" - NMTOKEN = "(?:#{NAMECHAR})+" - NMTOKENS = "#{NMTOKEN}(\\s+#{NMTOKEN})*" - REFERENCE = "&(?:#{NAME};|#\\d+;|#x[0-9a-fA-F]+;)" - REFERENCE_RE = /#{REFERENCE}/ - - DOCTYPE_START = /\A\s*<!DOCTYPE\s/um - DOCTYPE_END = /\A\s*\]\s*>/um - ATTRIBUTE_PATTERN = /\s*(#{QNAME_STR})\s*=\s*(["'])(.*?)\4/um - COMMENT_START = /\A<!--/u - COMMENT_PATTERN = /<!--(.*?)-->/um - CDATA_START = /\A<!\[CDATA\[/u - CDATA_END = /\A\s*\]\s*>/um - CDATA_PATTERN = /<!\[CDATA\[(.*?)\]\]>/um - XMLDECL_START = /\A<\?xml\s/u; - XMLDECL_PATTERN = /<\?xml\s+(.*?)\?>/um - INSTRUCTION_START = /\A<\?/u - INSTRUCTION_PATTERN = /<\?#{NAME}(\s+.*?)?\?>/um - TAG_MATCH = /\A<((?>#{QNAME_STR}))/um - CLOSE_MATCH = /\A\s*<\/(#{QNAME_STR})\s*>/um - - VERSION = /\bversion\s*=\s*["'](.*?)['"]/um - ENCODING = /\bencoding\s*=\s*["'](.*?)['"]/um - STANDALONE = /\bstandalone\s*=\s*["'](.*?)['"]/um - - ENTITY_START = /\A\s*<!ENTITY/ - ELEMENTDECL_START = /\A\s*<!ELEMENT/um - ELEMENTDECL_PATTERN = /\A\s*(<!ELEMENT.*?)>/um - SYSTEMENTITY = /\A\s*(%.*?;)\s*$/um - ENUMERATION = "\\(\\s*#{NMTOKEN}(?:\\s*\\|\\s*#{NMTOKEN})*\\s*\\)" - NOTATIONTYPE = "NOTATION\\s+\\(\\s*#{NAME}(?:\\s*\\|\\s*#{NAME})*\\s*\\)" - ENUMERATEDTYPE = "(?:(?:#{NOTATIONTYPE})|(?:#{ENUMERATION}))" - ATTTYPE = "(CDATA|ID|IDREF|IDREFS|ENTITY|ENTITIES|NMTOKEN|NMTOKENS|#{ENUMERATEDTYPE})" - ATTVALUE = "(?:\"((?:[^<&\"]|#{REFERENCE})*)\")|(?:'((?:[^<&']|#{REFERENCE})*)')" - DEFAULTDECL = "(#REQUIRED|#IMPLIED|(?:(#FIXED\\s+)?#{ATTVALUE}))" - ATTDEF = "\\s+#{NAME}\\s+#{ATTTYPE}\\s+#{DEFAULTDECL}" - ATTDEF_RE = /#{ATTDEF}/ - ATTLISTDECL_START = /\A\s*<!ATTLIST/um - ATTLISTDECL_PATTERN = /\A\s*<!ATTLIST\s+#{NAME}(?:#{ATTDEF})*\s*>/um - - TEXT_PATTERN = /\A([^<]*)/um - - # Entity constants - PUBIDCHAR = "\x20\x0D\x0Aa-zA-Z0-9\\-()+,./:=?;!*@$_%#" - SYSTEMLITERAL = %Q{((?:"[^"]*")|(?:'[^']*'))} - PUBIDLITERAL = %Q{("[#{PUBIDCHAR}']*"|'[#{PUBIDCHAR}]*')} - EXTERNALID = "(?:(?:(SYSTEM)\\s+#{SYSTEMLITERAL})|(?:(PUBLIC)\\s+#{PUBIDLITERAL}\\s+#{SYSTEMLITERAL}))" - NDATADECL = "\\s+NDATA\\s+#{NAME}" - PEREFERENCE = "%#{NAME};" - ENTITYVALUE = %Q{((?:"(?:[^%&"]|#{PEREFERENCE}|#{REFERENCE})*")|(?:'([^%&']|#{PEREFERENCE}|#{REFERENCE})*'))} - PEDEF = "(?:#{ENTITYVALUE}|#{EXTERNALID})" - ENTITYDEF = "(?:#{ENTITYVALUE}|(?:#{EXTERNALID}(#{NDATADECL})?))" - PEDECL = "<!ENTITY\\s+(%)\\s+#{NAME}\\s+#{PEDEF}\\s*>" - GEDECL = "<!ENTITY\\s+#{NAME}\\s+#{ENTITYDEF}\\s*>" - ENTITYDECL = /\s*(?:#{GEDECL})|(?:#{PEDECL})/um - - NOTATIONDECL_START = /\A\s*<!NOTATION/um - EXTERNAL_ID_PUBLIC = /\A\s*PUBLIC\s+#{PUBIDLITERAL}\s+#{SYSTEMLITERAL}\s*/um - EXTERNAL_ID_SYSTEM = /\A\s*SYSTEM\s+#{SYSTEMLITERAL}\s*/um - PUBLIC_ID = /\A\s*PUBLIC\s+#{PUBIDLITERAL}\s*/um - - EREFERENCE = /&(?!#{NAME};)/ - - DEFAULT_ENTITIES = { - 'gt' => [/>/, '>', '>', />/], - 'lt' => [/</, '<', '<', /</], - 'quot' => [/"/, '"', '"', /"/], - "apos" => [/'/, "'", "'", /'/] - } - - def initialize( source ) - self.stream = source - @listeners = [] - end - - def add_listener( listener ) - @listeners << listener - end - - attr_reader :source - - def stream=( source ) - @source = SourceFactory.create_from( source ) - @closed = nil - @document_status = nil - @tags = [] - @stack = [] - @entities = [] - @nsstack = [] - end - - def position - if @source.respond_to? :position - @source.position - else - # FIXME - 0 - end - end - - # Returns true if there are no more events - def empty? - return (@source.empty? and @stack.empty?) - end - - # Returns true if there are more events. Synonymous with !empty? - def has_next? - return !(@source.empty? and @stack.empty?) - end - - # Push an event back on the head of the stream. This method - # has (theoretically) infinite depth. - def unshift token - @stack.unshift(token) - end - - # Peek at the +depth+ event in the stack. The first element on the stack - # is at depth 0. If +depth+ is -1, will parse to the end of the input - # stream and return the last event, which is always :end_document. - # Be aware that this causes the stream to be parsed up to the +depth+ - # event, so you can effectively pre-parse the entire document (pull the - # entire thing into memory) using this method. - def peek depth=0 - raise %Q[Illegal argument "#{depth}"] if depth < -1 - temp = [] - if depth == -1 - temp.push(pull()) until empty? - else - while @stack.size+temp.size < depth+1 - temp.push(pull()) - end - end - @stack += temp if temp.size > 0 - @stack[depth] - end - - # Returns the next event. This is a +PullEvent+ object. - def pull - pull_event.tap do |event| - @listeners.each do |listener| - listener.receive event - end - end - end - - def pull_event - if @closed - x, @closed = @closed, nil - return [ :end_element, x ] - end - return [ :end_document ] if empty? - return @stack.shift if @stack.size > 0 - #STDERR.puts @source.encoding - #STDERR.puts "BUFFER = #{@source.buffer.inspect}" - if @document_status == nil - word = @source.match( /\A((?:\s+)|(?:<[^>]*>))/um ) - word = word[1] unless word.nil? - #STDERR.puts "WORD = #{word.inspect}" - case word - when COMMENT_START - return [ :comment, @source.match( COMMENT_PATTERN, true )[1] ] - when XMLDECL_START - #STDERR.puts "XMLDECL" - results = @source.match( XMLDECL_PATTERN, true )[1] - version = VERSION.match( results ) - version = version[1] unless version.nil? - encoding = ENCODING.match(results) - encoding = encoding[1] unless encoding.nil? - if need_source_encoding_update?(encoding) - @source.encoding = encoding - end - if encoding.nil? and /\AUTF-16(?:BE|LE)\z/i =~ @source.encoding - encoding = "UTF-16" - end - standalone = STANDALONE.match(results) - standalone = standalone[1] unless standalone.nil? - return [ :xmldecl, version, encoding, standalone ] - when INSTRUCTION_START - return process_instruction - when DOCTYPE_START - base_error_message = "Malformed DOCTYPE" - @source.match(DOCTYPE_START, true) - @nsstack.unshift(curr_ns=Set.new) - name = parse_name(base_error_message) - if @source.match(/\A\s*\[/um, true) - id = [nil, nil, nil] - @document_status = :in_doctype - elsif @source.match(/\A\s*>/um, true) - id = [nil, nil, nil] - @document_status = :after_doctype - else - id = parse_id(base_error_message, - accept_external_id: true, - accept_public_id: false) - if id[0] == "SYSTEM" - # For backward compatibility - id[1], id[2] = id[2], nil - end - if @source.match(/\A\s*\[/um, true) - @document_status = :in_doctype - elsif @source.match(/\A\s*>/um, true) - @document_status = :after_doctype - else - message = "#{base_error_message}: garbage after external ID" - raise REXML::ParseException.new(message, @source) - end - end - args = [:start_doctype, name, *id] - if @document_status == :after_doctype - @source.match(/\A\s*/um, true) - @stack << [ :end_doctype ] - end - return args - when /\A\s+/ - else - @document_status = :after_doctype - if @source.encoding == "UTF-8" - @source.buffer.force_encoding(::Encoding::UTF_8) - end - end - end - if @document_status == :in_doctype - md = @source.match(/\A\s*(.*?>)/um) - case md[1] - when SYSTEMENTITY - match = @source.match( SYSTEMENTITY, true )[1] - return [ :externalentity, match ] - - when ELEMENTDECL_START - return [ :elementdecl, @source.match( ELEMENTDECL_PATTERN, true )[1] ] - - when ENTITY_START - match = @source.match( ENTITYDECL, true ).to_a.compact - match[0] = :entitydecl - ref = false - if match[1] == '%' - ref = true - match.delete_at 1 - end - # Now we have to sort out what kind of entity reference this is - if match[2] == 'SYSTEM' - # External reference - match[3] = match[3][1..-2] # PUBID - match.delete_at(4) if match.size > 4 # Chop out NDATA decl - # match is [ :entity, name, SYSTEM, pubid(, ndata)? ] - elsif match[2] == 'PUBLIC' - # External reference - match[3] = match[3][1..-2] # PUBID - match[4] = match[4][1..-2] # HREF - match.delete_at(5) if match.size > 5 # Chop out NDATA decl - # match is [ :entity, name, PUBLIC, pubid, href(, ndata)? ] - else - match[2] = match[2][1..-2] - match.pop if match.size == 4 - # match is [ :entity, name, value ] - end - match << '%' if ref - return match - when ATTLISTDECL_START - md = @source.match( ATTLISTDECL_PATTERN, true ) - raise REXML::ParseException.new( "Bad ATTLIST declaration!", @source ) if md.nil? - element = md[1] - contents = md[0] - - pairs = {} - values = md[0].scan( ATTDEF_RE ) - values.each do |attdef| - unless attdef[3] == "#IMPLIED" - attdef.compact! - val = attdef[3] - val = attdef[4] if val == "#FIXED " - pairs[attdef[0]] = val - if attdef[0] =~ /^xmlns:(.*)/ - @nsstack[0] << $1 - end - end - end - return [ :attlistdecl, element, pairs, contents ] - when NOTATIONDECL_START - base_error_message = "Malformed notation declaration" - unless @source.match(/\A\s*<!NOTATION\s+/um, true) - if @source.match(/\A\s*<!NOTATION\s*>/um) - message = "#{base_error_message}: name is missing" - else - message = "#{base_error_message}: invalid declaration name" - end - raise REXML::ParseException.new(message, @source) - end - name = parse_name(base_error_message) - id = parse_id(base_error_message, - accept_external_id: true, - accept_public_id: true) - unless @source.match(/\A\s*>/um, true) - message = "#{base_error_message}: garbage before end >" - raise REXML::ParseException.new(message, @source) - end - return [:notationdecl, name, *id] - when DOCTYPE_END - @document_status = :after_doctype - @source.match( DOCTYPE_END, true ) - return [ :end_doctype ] - end - end - if @document_status == :after_doctype - @source.match(/\A\s*/um, true) - end - begin - @source.read if @source.buffer.size<2 - if @source.buffer[0] == ?< - if @source.buffer[1] == ?/ - @nsstack.shift - last_tag = @tags.pop - md = @source.match( CLOSE_MATCH, true ) - if md and !last_tag - message = "Unexpected top-level end tag (got '#{md[1]}')" - raise REXML::ParseException.new(message, @source) - end - if md.nil? or last_tag != md[1] - message = "Missing end tag for '#{last_tag}'" - message << " (got '#{md[1]}')" if md - raise REXML::ParseException.new(message, @source) - end - return [ :end_element, last_tag ] - elsif @source.buffer[1] == ?! - md = @source.match(/\A(\s*[^>]*>)/um) - #STDERR.puts "SOURCE BUFFER = #{source.buffer}, #{source.buffer.size}" - raise REXML::ParseException.new("Malformed node", @source) unless md - if md[0][2] == ?- - md = @source.match( COMMENT_PATTERN, true ) - - case md[1] - when /--/, /-\z/ - raise REXML::ParseException.new("Malformed comment", @source) - end - - return [ :comment, md[1] ] if md - else - md = @source.match( CDATA_PATTERN, true ) - return [ :cdata, md[1] ] if md - end - raise REXML::ParseException.new( "Declarations can only occur "+ - "in the doctype declaration.", @source) - elsif @source.buffer[1] == ?? - return process_instruction - else - # Get the next tag - md = @source.match(TAG_MATCH, true) - unless md - raise REXML::ParseException.new("malformed XML: missing tag start", @source) - end - @document_status = :in_element - prefixes = Set.new - prefixes << md[2] if md[2] - @nsstack.unshift(curr_ns=Set.new) - attributes, closed = parse_attributes(prefixes, curr_ns) - # Verify that all of the prefixes have been defined - for prefix in prefixes - unless @nsstack.find{|k| k.member?(prefix)} - raise UndefinedNamespaceException.new(prefix,@source,self) - end - end - - if closed - @closed = md[1] - @nsstack.shift - else - @tags.push( md[1] ) - end - return [ :start_element, md[1], attributes ] - end - else - md = @source.match( TEXT_PATTERN, true ) - if md[0].length == 0 - @source.match( /(\s+)/, true ) - end - #STDERR.puts "GOT #{md[1].inspect}" unless md[0].length == 0 - #return [ :text, "" ] if md[0].length == 0 - # unnormalized = Text::unnormalize( md[1], self ) - # return PullEvent.new( :text, md[1], unnormalized ) - return [ :text, md[1] ] - end - rescue REXML::UndefinedNamespaceException - raise - rescue REXML::ParseException - raise - rescue => error - raise REXML::ParseException.new( "Exception parsing", - @source, self, (error ? error : $!) ) - end - return [ :dummy ] - end - private :pull_event - - def entity( reference, entities ) - value = nil - value = entities[ reference ] if entities - if not value - value = DEFAULT_ENTITIES[ reference ] - value = value[2] if value - end - unnormalize( value, entities ) if value - end - - # Escapes all possible entities - def normalize( input, entities=nil, entity_filter=nil ) - copy = input.clone - # Doing it like this rather than in a loop improves the speed - copy.gsub!( EREFERENCE, '&' ) - entities.each do |key, value| - copy.gsub!( value, "&#{key};" ) unless entity_filter and - entity_filter.include?(entity) - end if entities - copy.gsub!( EREFERENCE, '&' ) - DEFAULT_ENTITIES.each do |key, value| - copy.gsub!( value[3], value[1] ) - end - copy - end - - # Unescapes all possible entities - def unnormalize( string, entities=nil, filter=nil ) - rv = string.clone - rv.gsub!( /\r\n?/, "\n" ) - matches = rv.scan( REFERENCE_RE ) - return rv if matches.size == 0 - rv.gsub!( /�*((?:\d+)|(?:x[a-fA-F0-9]+));/ ) { - m=$1 - m = "0#{m}" if m[0] == ?x - [Integer(m)].pack('U*') - } - matches.collect!{|x|x[0]}.compact! - if matches.size > 0 - matches.each do |entity_reference| - unless filter and filter.include?(entity_reference) - entity_value = entity( entity_reference, entities ) - if entity_value - re = /&#{entity_reference};/ - rv.gsub!( re, entity_value ) - else - er = DEFAULT_ENTITIES[entity_reference] - rv.gsub!( er[0], er[2] ) if er - end - end - end - rv.gsub!( /&/, '&' ) - end - rv - end - - private - def need_source_encoding_update?(xml_declaration_encoding) - return false if xml_declaration_encoding.nil? - return false if /\AUTF-16\z/i =~ xml_declaration_encoding - true - end - - def parse_name(base_error_message) - md = @source.match(/\A\s*#{NAME}/um, true) - unless md - if @source.match(/\A\s*\S/um) - message = "#{base_error_message}: invalid name" - else - message = "#{base_error_message}: name is missing" - end - raise REXML::ParseException.new(message, @source) - end - md[1] - end - - def parse_id(base_error_message, - accept_external_id:, - accept_public_id:) - if accept_external_id and (md = @source.match(EXTERNAL_ID_PUBLIC, true)) - pubid = system = nil - pubid_literal = md[1] - pubid = pubid_literal[1..-2] if pubid_literal # Remove quote - system_literal = md[2] - system = system_literal[1..-2] if system_literal # Remove quote - ["PUBLIC", pubid, system] - elsif accept_public_id and (md = @source.match(PUBLIC_ID, true)) - pubid = system = nil - pubid_literal = md[1] - pubid = pubid_literal[1..-2] if pubid_literal # Remove quote - ["PUBLIC", pubid, nil] - elsif accept_external_id and (md = @source.match(EXTERNAL_ID_SYSTEM, true)) - system = nil - system_literal = md[1] - system = system_literal[1..-2] if system_literal # Remove quote - ["SYSTEM", nil, system] - else - details = parse_id_invalid_details(accept_external_id: accept_external_id, - accept_public_id: accept_public_id) - message = "#{base_error_message}: #{details}" - raise REXML::ParseException.new(message, @source) - end - end - - def parse_id_invalid_details(accept_external_id:, - accept_public_id:) - public = /\A\s*PUBLIC/um - system = /\A\s*SYSTEM/um - if (accept_external_id or accept_public_id) and @source.match(/#{public}/um) - if @source.match(/#{public}(?:\s+[^'"]|\s*[\[>])/um) - return "public ID literal is missing" - end - unless @source.match(/#{public}\s+#{PUBIDLITERAL}/um) - return "invalid public ID literal" - end - if accept_public_id - if @source.match(/#{public}\s+#{PUBIDLITERAL}\s+[^'"]/um) - return "system ID literal is missing" - end - unless @source.match(/#{public}\s+#{PUBIDLITERAL}\s+#{SYSTEMLITERAL}/um) - return "invalid system literal" - end - "garbage after system literal" - else - "garbage after public ID literal" - end - elsif accept_external_id and @source.match(/#{system}/um) - if @source.match(/#{system}(?:\s+[^'"]|\s*[\[>])/um) - return "system literal is missing" - end - unless @source.match(/#{system}\s+#{SYSTEMLITERAL}/um) - return "invalid system literal" - end - "garbage after system literal" - else - unless @source.match(/\A\s*(?:PUBLIC|SYSTEM)\s/um) - return "invalid ID type" - end - "ID type is missing" - end - end - - def process_instruction - match_data = @source.match(INSTRUCTION_PATTERN, true) - unless match_data - message = "Invalid processing instruction node" - raise REXML::ParseException.new(message, @source) - end - [:processing_instruction, match_data[1], match_data[2]] - end - - def parse_attributes(prefixes, curr_ns) - attributes = {} - closed = false - match_data = @source.match(/^(.*?)(\/)?>/um, true) - if match_data.nil? - message = "Start tag isn't ended" - raise REXML::ParseException.new(message, @source) - end - - raw_attributes = match_data[1] - closed = !match_data[2].nil? - return attributes, closed if raw_attributes.nil? - return attributes, closed if raw_attributes.empty? - - scanner = StringScanner.new(raw_attributes) - until scanner.eos? - if scanner.scan(/\s+/) - break if scanner.eos? - end - - pos = scanner.pos - loop do - break if scanner.scan(ATTRIBUTE_PATTERN) - unless scanner.scan(QNAME) - message = "Invalid attribute name: <#{scanner.rest}>" - raise REXML::ParseException.new(message, @source) - end - name = scanner[0] - unless scanner.scan(/\s*=\s*/um) - message = "Missing attribute equal: <#{name}>" - raise REXML::ParseException.new(message, @source) - end - quote = scanner.scan(/['"]/) - unless quote - message = "Missing attribute value start quote: <#{name}>" - raise REXML::ParseException.new(message, @source) - end - unless scanner.scan(/.*#{Regexp.escape(quote)}/um) - match_data = @source.match(/^(.*?)(\/)?>/um, true) - if match_data - scanner << "/" if closed - scanner << ">" - scanner << match_data[1] - scanner.pos = pos - closed = !match_data[2].nil? - next - end - message = - "Missing attribute value end quote: <#{name}>: <#{quote}>" - raise REXML::ParseException.new(message, @source) - end - end - name = scanner[1] - prefix = scanner[2] - local_part = scanner[3] - # quote = scanner[4] - value = scanner[5] - if prefix == "xmlns" - if local_part == "xml" - if value != "http://www.w3.org/XML/1998/namespace" - msg = "The 'xml' prefix must not be bound to any other namespace "+ - "(http://www.w3.org/TR/REC-xml-names/#ns-decl)" - raise REXML::ParseException.new( msg, @source, self ) - end - elsif local_part == "xmlns" - msg = "The 'xmlns' prefix must not be declared "+ - "(http://www.w3.org/TR/REC-xml-names/#ns-decl)" - raise REXML::ParseException.new( msg, @source, self) - end - curr_ns << local_part - elsif prefix - prefixes << prefix unless prefix == "xml" - end - - if attributes.has_key?(name) - msg = "Duplicate attribute #{name.inspect}" - raise REXML::ParseException.new(msg, @source, self) - end - - attributes[name] = value - end - return attributes, closed - end - end - end -end - -=begin - case event[0] - when :start_element - when :text - when :end_element - when :processing_instruction - when :cdata - when :comment - when :xmldecl - when :start_doctype - when :end_doctype - when :externalentity - when :elementdecl - when :entity - when :attlistdecl - when :notationdecl - when :end_doctype - end -=end diff --git a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/parsers/lightparser.rb b/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/parsers/lightparser.rb deleted file mode 100644 index bdc08276..00000000 --- a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/parsers/lightparser.rb +++ /dev/null @@ -1,59 +0,0 @@ -# frozen_string_literal: false -require_relative 'streamparser' -require_relative 'baseparser' -require_relative '../light/node' - -module REXML - module Parsers - class LightParser - def initialize stream - @stream = stream - @parser = REXML::Parsers::BaseParser.new( stream ) - end - - def add_listener( listener ) - @parser.add_listener( listener ) - end - - def rewind - @stream.rewind - @parser.stream = @stream - end - - def parse - root = context = [ :document ] - while true - event = @parser.pull - case event[0] - when :end_document - break - when :start_element, :start_doctype - new_node = event - context << new_node - new_node[1,0] = [context] - context = new_node - when :end_element, :end_doctype - context = context[1] - else - new_node = event - context << new_node - new_node[1,0] = [context] - end - end - root - end - end - - # An element is an array. The array contains: - # 0 The parent element - # 1 The tag name - # 2 A hash of attributes - # 3..-1 The child elements - # An element is an array of size > 3 - # Text is a String - # PIs are [ :processing_instruction, target, data ] - # Comments are [ :comment, data ] - # DocTypes are DocType structs - # The root is an array with XMLDecls, Text, DocType, Array, Text - end -end diff --git a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/parsers/pullparser.rb b/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/parsers/pullparser.rb deleted file mode 100644 index f8b232a2..00000000 --- a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/parsers/pullparser.rb +++ /dev/null @@ -1,197 +0,0 @@ -# frozen_string_literal: false -require 'forwardable' - -require_relative '../parseexception' -require_relative 'baseparser' -require_relative '../xmltokens' - -module REXML - module Parsers - # = Using the Pull Parser - # <em>This API is experimental, and subject to change.</em> - # parser = PullParser.new( "<a>text<b att='val'/>txet</a>" ) - # while parser.has_next? - # res = parser.next - # puts res[1]['att'] if res.start_tag? and res[0] == 'b' - # end - # See the PullEvent class for information on the content of the results. - # The data is identical to the arguments passed for the various events to - # the StreamListener API. - # - # Notice that: - # parser = PullParser.new( "<a>BAD DOCUMENT" ) - # while parser.has_next? - # res = parser.next - # raise res[1] if res.error? - # end - # - # Nat Price gave me some good ideas for the API. - class PullParser - include XMLTokens - extend Forwardable - - def_delegators( :@parser, :has_next? ) - def_delegators( :@parser, :entity ) - def_delegators( :@parser, :empty? ) - def_delegators( :@parser, :source ) - - def initialize stream - @entities = {} - @listeners = nil - @parser = BaseParser.new( stream ) - @my_stack = [] - end - - def add_listener( listener ) - @listeners = [] unless @listeners - @listeners << listener - end - - def each - while has_next? - yield self.pull - end - end - - def peek depth=0 - if @my_stack.length <= depth - (depth - @my_stack.length + 1).times { - e = PullEvent.new(@parser.pull) - @my_stack.push(e) - } - end - @my_stack[depth] - end - - def pull - return @my_stack.shift if @my_stack.length > 0 - - event = @parser.pull - case event[0] - when :entitydecl - @entities[ event[1] ] = - event[2] unless event[2] =~ /PUBLIC|SYSTEM/ - when :text - unnormalized = @parser.unnormalize( event[1], @entities ) - event << unnormalized - end - PullEvent.new( event ) - end - - def unshift token - @my_stack.unshift token - end - end - - # A parsing event. The contents of the event are accessed as an +Array?, - # and the type is given either by the ...? methods, or by accessing the - # +type+ accessor. The contents of this object vary from event to event, - # but are identical to the arguments passed to +StreamListener+s for each - # event. - class PullEvent - # The type of this event. Will be one of :tag_start, :tag_end, :text, - # :processing_instruction, :comment, :doctype, :attlistdecl, :entitydecl, - # :notationdecl, :entity, :cdata, :xmldecl, or :error. - def initialize(arg) - @contents = arg - end - - def []( start, endd=nil) - if start.kind_of? Range - @contents.slice( start.begin+1 .. start.end ) - elsif start.kind_of? Numeric - if endd.nil? - @contents.slice( start+1 ) - else - @contents.slice( start+1, endd ) - end - else - raise "Illegal argument #{start.inspect} (#{start.class})" - end - end - - def event_type - @contents[0] - end - - # Content: [ String tag_name, Hash attributes ] - def start_element? - @contents[0] == :start_element - end - - # Content: [ String tag_name ] - def end_element? - @contents[0] == :end_element - end - - # Content: [ String raw_text, String unnormalized_text ] - def text? - @contents[0] == :text - end - - # Content: [ String text ] - def instruction? - @contents[0] == :processing_instruction - end - - # Content: [ String text ] - def comment? - @contents[0] == :comment - end - - # Content: [ String name, String pub_sys, String long_name, String uri ] - def doctype? - @contents[0] == :start_doctype - end - - # Content: [ String text ] - def attlistdecl? - @contents[0] == :attlistdecl - end - - # Content: [ String text ] - def elementdecl? - @contents[0] == :elementdecl - end - - # Due to the wonders of DTDs, an entity declaration can be just about - # anything. There's no way to normalize it; you'll have to interpret the - # content yourself. However, the following is true: - # - # * If the entity declaration is an internal entity: - # [ String name, String value ] - # Content: [ String text ] - def entitydecl? - @contents[0] == :entitydecl - end - - # Content: [ String text ] - def notationdecl? - @contents[0] == :notationdecl - end - - # Content: [ String text ] - def entity? - @contents[0] == :entity - end - - # Content: [ String text ] - def cdata? - @contents[0] == :cdata - end - - # Content: [ String version, String encoding, String standalone ] - def xmldecl? - @contents[0] == :xmldecl - end - - def error? - @contents[0] == :error - end - - def inspect - @contents[0].to_s + ": " + @contents[1..-1].inspect - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/parsers/sax2parser.rb b/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/parsers/sax2parser.rb deleted file mode 100644 index 6a24ce22..00000000 --- a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/parsers/sax2parser.rb +++ /dev/null @@ -1,273 +0,0 @@ -# frozen_string_literal: false -require_relative 'baseparser' -require_relative '../parseexception' -require_relative '../namespace' -require_relative '../text' - -module REXML - module Parsers - # SAX2Parser - class SAX2Parser - def initialize source - @parser = BaseParser.new(source) - @listeners = [] - @procs = [] - @namespace_stack = [] - @has_listeners = false - @tag_stack = [] - @entities = {} - end - - def source - @parser.source - end - - def add_listener( listener ) - @parser.add_listener( listener ) - end - - # Listen arguments: - # - # Symbol, Array, Block - # Listen to Symbol events on Array elements - # Symbol, Block - # Listen to Symbol events - # Array, Listener - # Listen to all events on Array elements - # Array, Block - # Listen to :start_element events on Array elements - # Listener - # Listen to All events - # - # Symbol can be one of: :start_element, :end_element, - # :start_prefix_mapping, :end_prefix_mapping, :characters, - # :processing_instruction, :doctype, :attlistdecl, :elementdecl, - # :entitydecl, :notationdecl, :cdata, :xmldecl, :comment - # - # There is an additional symbol that can be listened for: :progress. - # This will be called for every event generated, passing in the current - # stream position. - # - # Array contains regular expressions or strings which will be matched - # against fully qualified element names. - # - # Listener must implement the methods in SAX2Listener - # - # Block will be passed the same arguments as a SAX2Listener method would - # be, where the method name is the same as the matched Symbol. - # See the SAX2Listener for more information. - def listen( *args, &blok ) - if args[0].kind_of? Symbol - if args.size == 2 - args[1].each { |match| @procs << [args[0], match, blok] } - else - add( [args[0], nil, blok] ) - end - elsif args[0].kind_of? Array - if args.size == 2 - args[0].each { |match| add( [nil, match, args[1]] ) } - else - args[0].each { |match| add( [ :start_element, match, blok ] ) } - end - else - add([nil, nil, args[0]]) - end - end - - def deafen( listener=nil, &blok ) - if listener - @listeners.delete_if {|item| item[-1] == listener } - @has_listeners = false if @listeners.size == 0 - else - @procs.delete_if {|item| item[-1] == blok } - end - end - - def parse - @procs.each { |sym,match,block| block.call if sym == :start_document } - @listeners.each { |sym,match,block| - block.start_document if sym == :start_document or sym.nil? - } - context = [] - while true - event = @parser.pull - case event[0] - when :end_document - handle( :end_document ) - break - when :start_doctype - handle( :doctype, *event[1..-1]) - when :end_doctype - context = context[1] - when :start_element - @tag_stack.push(event[1]) - # find the observers for namespaces - procs = get_procs( :start_prefix_mapping, event[1] ) - listeners = get_listeners( :start_prefix_mapping, event[1] ) - if procs or listeners - # break out the namespace declarations - # The attributes live in event[2] - event[2].each {|n, v| event[2][n] = @parser.normalize(v)} - nsdecl = event[2].find_all { |n, value| n =~ /^xmlns(:|$)/ } - nsdecl.collect! { |n, value| [ n[6..-1], value ] } - @namespace_stack.push({}) - nsdecl.each do |n,v| - @namespace_stack[-1][n] = v - # notify observers of namespaces - procs.each { |ob| ob.call( n, v ) } if procs - listeners.each { |ob| ob.start_prefix_mapping(n, v) } if listeners - end - end - event[1] =~ Namespace::NAMESPLIT - prefix = $1 - local = $2 - uri = get_namespace(prefix) - # find the observers for start_element - procs = get_procs( :start_element, event[1] ) - listeners = get_listeners( :start_element, event[1] ) - # notify observers - procs.each { |ob| ob.call( uri, local, event[1], event[2] ) } if procs - listeners.each { |ob| - ob.start_element( uri, local, event[1], event[2] ) - } if listeners - when :end_element - @tag_stack.pop - event[1] =~ Namespace::NAMESPLIT - prefix = $1 - local = $2 - uri = get_namespace(prefix) - # find the observers for start_element - procs = get_procs( :end_element, event[1] ) - listeners = get_listeners( :end_element, event[1] ) - # notify observers - procs.each { |ob| ob.call( uri, local, event[1] ) } if procs - listeners.each { |ob| - ob.end_element( uri, local, event[1] ) - } if listeners - - namespace_mapping = @namespace_stack.pop - # find the observers for namespaces - procs = get_procs( :end_prefix_mapping, event[1] ) - listeners = get_listeners( :end_prefix_mapping, event[1] ) - if procs or listeners - namespace_mapping.each do |ns_prefix, ns_uri| - # notify observers of namespaces - procs.each { |ob| ob.call( ns_prefix ) } if procs - listeners.each { |ob| ob.end_prefix_mapping(ns_prefix) } if listeners - end - end - when :text - #normalized = @parser.normalize( event[1] ) - #handle( :characters, normalized ) - copy = event[1].clone - - esub = proc { |match| - if @entities.has_key?($1) - @entities[$1].gsub(Text::REFERENCE, &esub) - else - match - end - } - - copy.gsub!( Text::REFERENCE, &esub ) - copy.gsub!( Text::NUMERICENTITY ) {|m| - m=$1 - m = "0#{m}" if m[0] == ?x - [Integer(m)].pack('U*') - } - handle( :characters, copy ) - when :entitydecl - handle_entitydecl( event ) - when :processing_instruction, :comment, :attlistdecl, - :elementdecl, :cdata, :notationdecl, :xmldecl - handle( *event ) - end - handle( :progress, @parser.position ) - end - end - - private - def handle( symbol, *arguments ) - tag = @tag_stack[-1] - procs = get_procs( symbol, tag ) - listeners = get_listeners( symbol, tag ) - # notify observers - procs.each { |ob| ob.call( *arguments ) } if procs - listeners.each { |l| - l.send( symbol.to_s, *arguments ) - } if listeners - end - - def handle_entitydecl( event ) - @entities[ event[1] ] = event[2] if event.size == 3 - parameter_reference_p = false - case event[2] - when "SYSTEM" - if event.size == 5 - if event.last == "%" - parameter_reference_p = true - else - event[4, 0] = "NDATA" - end - end - when "PUBLIC" - if event.size == 6 - if event.last == "%" - parameter_reference_p = true - else - event[5, 0] = "NDATA" - end - end - else - parameter_reference_p = (event.size == 4) - end - event[1, 0] = event.pop if parameter_reference_p - handle( event[0], event[1..-1] ) - end - - # The following methods are duplicates, but it is faster than using - # a helper - def get_procs( symbol, name ) - return nil if @procs.size == 0 - @procs.find_all do |sym, match, block| - ( - (sym.nil? or symbol == sym) and - ((name.nil? and match.nil?) or match.nil? or ( - (name == match) or - (match.kind_of? Regexp and name =~ match) - ) - ) - ) - end.collect{|x| x[-1]} - end - def get_listeners( symbol, name ) - return nil if @listeners.size == 0 - @listeners.find_all do |sym, match, block| - ( - (sym.nil? or symbol == sym) and - ((name.nil? and match.nil?) or match.nil? or ( - (name == match) or - (match.kind_of? Regexp and name =~ match) - ) - ) - ) - end.collect{|x| x[-1]} - end - - def add( pair ) - if pair[-1].respond_to? :call - @procs << pair unless @procs.include? pair - else - @listeners << pair unless @listeners.include? pair - @has_listeners = true - end - end - - def get_namespace( prefix ) - uris = (@namespace_stack.find_all { |ns| not ns[prefix].nil? }) || - (@namespace_stack.find { |ns| not ns[nil].nil? }) - uris[-1][prefix] unless uris.nil? or 0 == uris.size - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/parsers/streamparser.rb b/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/parsers/streamparser.rb deleted file mode 100644 index 9e0eb0b3..00000000 --- a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/parsers/streamparser.rb +++ /dev/null @@ -1,61 +0,0 @@ -# frozen_string_literal: false -require_relative "baseparser" - -module REXML - module Parsers - class StreamParser - def initialize source, listener - @listener = listener - @parser = BaseParser.new( source ) - @tag_stack = [] - end - - def add_listener( listener ) - @parser.add_listener( listener ) - end - - def parse - # entity string - while true - event = @parser.pull - case event[0] - when :end_document - unless @tag_stack.empty? - tag_path = "/" + @tag_stack.join("/") - raise ParseException.new("Missing end tag for '#{tag_path}'", - @parser.source) - end - return - when :start_element - @tag_stack << event[1] - attrs = event[2].each do |n, v| - event[2][n] = @parser.unnormalize( v ) - end - @listener.tag_start( event[1], attrs ) - when :end_element - @listener.tag_end( event[1] ) - @tag_stack.pop - when :text - normalized = @parser.unnormalize( event[1] ) - @listener.text( normalized ) - when :processing_instruction - @listener.instruction( *event[1,2] ) - when :start_doctype - @listener.doctype( *event[1..-1] ) - when :end_doctype - # FIXME: remove this condition for milestone:3.2 - @listener.doctype_end if @listener.respond_to? :doctype_end - when :comment, :attlistdecl, :cdata, :xmldecl, :elementdecl - @listener.send( event[0].to_s, *event[1..-1] ) - when :entitydecl, :notationdecl - @listener.send( event[0].to_s, event[1..-1] ) - when :externalentity - entity_reference = event[1] - content = entity_reference.gsub(/\A%|;\z/, "") - @listener.entity(content) - end - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/parsers/treeparser.rb b/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/parsers/treeparser.rb deleted file mode 100644 index bf9a4254..00000000 --- a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/parsers/treeparser.rb +++ /dev/null @@ -1,101 +0,0 @@ -# frozen_string_literal: false -require_relative '../validation/validationexception' -require_relative '../undefinednamespaceexception' - -module REXML - module Parsers - class TreeParser - def initialize( source, build_context = Document.new ) - @build_context = build_context - @parser = Parsers::BaseParser.new( source ) - end - - def add_listener( listener ) - @parser.add_listener( listener ) - end - - def parse - tag_stack = [] - in_doctype = false - entities = nil - begin - while true - event = @parser.pull - #STDERR.puts "TREEPARSER GOT #{event.inspect}" - case event[0] - when :end_document - unless tag_stack.empty? - raise ParseException.new("No close tag for #{@build_context.xpath}", - @parser.source, @parser) - end - return - when :start_element - tag_stack.push(event[1]) - el = @build_context = @build_context.add_element( event[1] ) - event[2].each do |key, value| - el.attributes[key]=Attribute.new(key,value,self) - end - when :end_element - tag_stack.pop - @build_context = @build_context.parent - when :text - if not in_doctype - if @build_context[-1].instance_of? Text - @build_context[-1] << event[1] - else - @build_context.add( - Text.new(event[1], @build_context.whitespace, nil, true) - ) unless ( - @build_context.ignore_whitespace_nodes and - event[1].strip.size==0 - ) - end - end - when :comment - c = Comment.new( event[1] ) - @build_context.add( c ) - when :cdata - c = CData.new( event[1] ) - @build_context.add( c ) - when :processing_instruction - @build_context.add( Instruction.new( event[1], event[2] ) ) - when :end_doctype - in_doctype = false - entities.each { |k,v| entities[k] = @build_context.entities[k].value } - @build_context = @build_context.parent - when :start_doctype - doctype = DocType.new( event[1..-1], @build_context ) - @build_context = doctype - entities = {} - in_doctype = true - when :attlistdecl - n = AttlistDecl.new( event[1..-1] ) - @build_context.add( n ) - when :externalentity - n = ExternalEntity.new( event[1] ) - @build_context.add( n ) - when :elementdecl - n = ElementDecl.new( event[1] ) - @build_context.add(n) - when :entitydecl - entities[ event[1] ] = event[2] unless event[2] =~ /PUBLIC|SYSTEM/ - @build_context.add(Entity.new(event)) - when :notationdecl - n = NotationDecl.new( *event[1..-1] ) - @build_context.add( n ) - when :xmldecl - x = XMLDecl.new( event[1], event[2], event[3] ) - @build_context.add( x ) - end - end - rescue REXML::Validation::ValidationException - raise - rescue REXML::ParseException - raise - rescue - raise ParseException.new( $!.message, @parser.source, @parser, $! ) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/parsers/ultralightparser.rb b/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/parsers/ultralightparser.rb deleted file mode 100644 index e0029f43..00000000 --- a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/parsers/ultralightparser.rb +++ /dev/null @@ -1,57 +0,0 @@ -# frozen_string_literal: false -require_relative 'streamparser' -require_relative 'baseparser' - -module REXML - module Parsers - class UltraLightParser - def initialize stream - @stream = stream - @parser = REXML::Parsers::BaseParser.new( stream ) - end - - def add_listener( listener ) - @parser.add_listener( listener ) - end - - def rewind - @stream.rewind - @parser.stream = @stream - end - - def parse - root = context = [] - while true - event = @parser.pull - case event[0] - when :end_document - break - when :end_doctype - context = context[1] - when :start_element, :start_doctype - context << event - event[1,0] = [context] - context = event - when :end_element - context = context[1] - else - context << event - end - end - root - end - end - - # An element is an array. The array contains: - # 0 The parent element - # 1 The tag name - # 2 A hash of attributes - # 3..-1 The child elements - # An element is an array of size > 3 - # Text is a String - # PIs are [ :processing_instruction, target, data ] - # Comments are [ :comment, data ] - # DocTypes are DocType structs - # The root is an array with XMLDecls, Text, DocType, Array, Text - end -end diff --git a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/parsers/xpathparser.rb b/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/parsers/xpathparser.rb deleted file mode 100644 index bd3b6856..00000000 --- a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/parsers/xpathparser.rb +++ /dev/null @@ -1,739 +0,0 @@ -# frozen_string_literal: false - -require_relative '../namespace' -require_relative '../xmltokens' - -module REXML - module Parsers - # You don't want to use this class. Really. Use XPath, which is a wrapper - # for this class. Believe me. You don't want to poke around in here. - # There is strange, dark magic at work in this code. Beware. Go back! Go - # back while you still can! - class XPathParser - include XMLTokens - LITERAL = /^'([^']*)'|^"([^"]*)"/u - - def namespaces=( namespaces ) - Functions::namespace_context = namespaces - @namespaces = namespaces - end - - def parse path - path = path.dup - path.gsub!(/([\(\[])\s+/, '\1') # Strip ignorable spaces - path.gsub!( /\s+([\]\)])/, '\1') - parsed = [] - rest = OrExpr(path, parsed) - if rest - unless rest.strip.empty? - raise ParseException.new("Garbage component exists at the end: " + - "<#{rest}>: <#{path}>") - end - end - parsed - end - - def predicate path - parsed = [] - Predicate( "[#{path}]", parsed ) - parsed - end - - def abbreviate(path_or_parsed) - if path_or_parsed.kind_of?(String) - parsed = parse(path_or_parsed) - else - parsed = path_or_parsed - end - components = [] - component = nil - while parsed.size > 0 - op = parsed.shift - case op - when :node - component << "node()" - when :attribute - component = "@" - components << component - when :child - component = "" - components << component - when :descendant_or_self - next_op = parsed[0] - if next_op == :node - parsed.shift - component = "" - components << component - else - component = "descendant-or-self::" - components << component - end - when :self - next_op = parsed[0] - if next_op == :node - parsed.shift - components << "." - else - component = "self::" - components << component - end - when :parent - next_op = parsed[0] - if next_op == :node - parsed.shift - components << ".." - else - component = "parent::" - components << component - end - when :any - component << "*" - when :text - component << "text()" - when :following, :following_sibling, - :ancestor, :ancestor_or_self, :descendant, - :namespace, :preceding, :preceding_sibling - component = op.to_s.tr("_", "-") << "::" - components << component - when :qname - prefix = parsed.shift - name = parsed.shift - component << prefix+":" if prefix.size > 0 - component << name - when :predicate - component << '[' - component << predicate_to_path(parsed.shift) {|x| abbreviate(x)} - component << ']' - when :document - components << "" - when :function - component << parsed.shift - component << "( " - component << predicate_to_path(parsed.shift[0]) {|x| abbreviate(x)} - component << " )" - when :literal - component << quote_literal(parsed.shift) - else - component << "UNKNOWN(" - component << op.inspect - component << ")" - end - end - case components - when [""] - "/" - when ["", ""] - "//" - else - components.join("/") - end - end - - def expand(path_or_parsed) - if path_or_parsed.kind_of?(String) - parsed = parse(path_or_parsed) - else - parsed = path_or_parsed - end - path = "" - document = false - while parsed.size > 0 - op = parsed.shift - case op - when :node - path << "node()" - when :attribute, :child, :following, :following_sibling, - :ancestor, :ancestor_or_self, :descendant, :descendant_or_self, - :namespace, :preceding, :preceding_sibling, :self, :parent - path << "/" unless path.size == 0 - path << op.to_s.tr("_", "-") - path << "::" - when :any - path << "*" - when :qname - prefix = parsed.shift - name = parsed.shift - path << prefix+":" if prefix.size > 0 - path << name - when :predicate - path << '[' - path << predicate_to_path( parsed.shift ) { |x| expand(x) } - path << ']' - when :document - document = true - else - path << "UNKNOWN(" - path << op.inspect - path << ")" - end - end - path = "/"+path if document - path - end - - def predicate_to_path(parsed, &block) - path = "" - case parsed[0] - when :and, :or, :mult, :plus, :minus, :neq, :eq, :lt, :gt, :lteq, :gteq, :div, :mod, :union - op = parsed.shift - case op - when :eq - op = "=" - when :lt - op = "<" - when :gt - op = ">" - when :lteq - op = "<=" - when :gteq - op = ">=" - when :neq - op = "!=" - when :union - op = "|" - end - left = predicate_to_path( parsed.shift, &block ) - right = predicate_to_path( parsed.shift, &block ) - path << left - path << " " - path << op.to_s - path << " " - path << right - when :function - parsed.shift - name = parsed.shift - path << name - path << "(" - parsed.shift.each_with_index do |argument, i| - path << ", " if i > 0 - path << predicate_to_path(argument, &block) - end - path << ")" - when :literal - parsed.shift - path << quote_literal(parsed.shift) - else - path << yield( parsed ) - end - return path.squeeze(" ") - end - # For backward compatibility - alias_method :preciate_to_string, :predicate_to_path - - private - def quote_literal( literal ) - case literal - when String - # XPath 1.0 does not support escape characters. - # Assumes literal does not contain both single and double quotes. - if literal.include?("'") - "\"#{literal}\"" - else - "'#{literal}'" - end - else - literal.inspect - end - end - - #LocationPath - # | RelativeLocationPath - # | '/' RelativeLocationPath? - # | '//' RelativeLocationPath - def LocationPath path, parsed - path = path.lstrip - if path[0] == ?/ - parsed << :document - if path[1] == ?/ - parsed << :descendant_or_self - parsed << :node - path = path[2..-1] - else - path = path[1..-1] - end - end - return RelativeLocationPath( path, parsed ) if path.size > 0 - end - - #RelativeLocationPath - # | Step - # | (AXIS_NAME '::' | '@' | '') AxisSpecifier - # NodeTest - # Predicate - # | '.' | '..' AbbreviatedStep - # | RelativeLocationPath '/' Step - # | RelativeLocationPath '//' Step - AXIS = /^(ancestor|ancestor-or-self|attribute|child|descendant|descendant-or-self|following|following-sibling|namespace|parent|preceding|preceding-sibling|self)::/ - def RelativeLocationPath path, parsed - loop do - original_path = path - path = path.lstrip - - return original_path if path.empty? - - # (axis or @ or <child::>) nodetest predicate > - # OR > / Step - # (. or ..) > - if path[0] == ?. - if path[1] == ?. - parsed << :parent - parsed << :node - path = path[2..-1] - else - parsed << :self - parsed << :node - path = path[1..-1] - end - else - path_before_axis_specifier = path - parsed_not_abberviated = [] - if path[0] == ?@ - parsed_not_abberviated << :attribute - path = path[1..-1] - # Goto Nodetest - elsif path =~ AXIS - parsed_not_abberviated << $1.tr('-','_').intern - path = $' - # Goto Nodetest - else - parsed_not_abberviated << :child - end - - path_before_node_test = path - path = NodeTest(path, parsed_not_abberviated) - if path == path_before_node_test - return path_before_axis_specifier - end - path = Predicate(path, parsed_not_abberviated) - - parsed.concat(parsed_not_abberviated) - end - - original_path = path - path = path.lstrip - return original_path if path.empty? - - return original_path if path[0] != ?/ - - if path[1] == ?/ - parsed << :descendant_or_self - parsed << :node - path = path[2..-1] - else - path = path[1..-1] - end - end - end - - # Returns a 1-1 map of the nodeset - # The contents of the resulting array are either: - # true/false, if a positive match - # String, if a name match - #NodeTest - # | ('*' | NCNAME ':' '*' | QNAME) NameTest - # | '*' ':' NCNAME NameTest since XPath 2.0 - # | NODE_TYPE '(' ')' NodeType - # | PI '(' LITERAL ')' PI - # | '[' expr ']' Predicate - PREFIX_WILDCARD = /^\*:(#{NCNAME_STR})/u - LOCAL_NAME_WILDCARD = /^(#{NCNAME_STR}):\*/u - QNAME = Namespace::NAMESPLIT - NODE_TYPE = /^(comment|text|node)\(\s*\)/m - PI = /^processing-instruction\(/ - def NodeTest path, parsed - original_path = path - path = path.lstrip - case path - when PREFIX_WILDCARD - prefix = nil - name = $1 - path = $' - parsed << :qname - parsed << prefix - parsed << name - when /^\*/ - path = $' - parsed << :any - when NODE_TYPE - type = $1 - path = $' - parsed << type.tr('-', '_').intern - when PI - path = $' - literal = nil - if path =~ /^\s*\)/ - path = $' - else - path =~ LITERAL - literal = $1 - path = $' - raise ParseException.new("Missing ')' after processing instruction") if path[0] != ?) - path = path[1..-1] - end - parsed << :processing_instruction - parsed << (literal || '') - when LOCAL_NAME_WILDCARD - prefix = $1 - path = $' - parsed << :namespace - parsed << prefix - when QNAME - prefix = $1 - name = $2 - path = $' - prefix = "" unless prefix - parsed << :qname - parsed << prefix - parsed << name - else - path = original_path - end - return path - end - - # Filters the supplied nodeset on the predicate(s) - def Predicate path, parsed - original_path = path - path = path.lstrip - return original_path unless path[0] == ?[ - predicates = [] - while path[0] == ?[ - path, expr = get_group(path) - predicates << expr[1..-2] if expr - end - predicates.each{ |pred| - preds = [] - parsed << :predicate - parsed << preds - OrExpr(pred, preds) - } - path - end - - # The following return arrays of true/false, a 1-1 mapping of the - # supplied nodeset, except for axe(), which returns a filtered - # nodeset - - #| OrExpr S 'or' S AndExpr - #| AndExpr - def OrExpr path, parsed - n = [] - rest = AndExpr( path, n ) - if rest != path - while rest =~ /^\s*( or )/ - n = [ :or, n, [] ] - rest = AndExpr( $', n[-1] ) - end - end - if parsed.size == 0 and n.size != 0 - parsed.replace(n) - elsif n.size > 0 - parsed << n - end - rest - end - - #| AndExpr S 'and' S EqualityExpr - #| EqualityExpr - def AndExpr path, parsed - n = [] - rest = EqualityExpr( path, n ) - if rest != path - while rest =~ /^\s*( and )/ - n = [ :and, n, [] ] - rest = EqualityExpr( $', n[-1] ) - end - end - if parsed.size == 0 and n.size != 0 - parsed.replace(n) - elsif n.size > 0 - parsed << n - end - rest - end - - #| EqualityExpr ('=' | '!=') RelationalExpr - #| RelationalExpr - def EqualityExpr path, parsed - n = [] - rest = RelationalExpr( path, n ) - if rest != path - while rest =~ /^\s*(!?=)\s*/ - if $1[0] == ?! - n = [ :neq, n, [] ] - else - n = [ :eq, n, [] ] - end - rest = RelationalExpr( $', n[-1] ) - end - end - if parsed.size == 0 and n.size != 0 - parsed.replace(n) - elsif n.size > 0 - parsed << n - end - rest - end - - #| RelationalExpr ('<' | '>' | '<=' | '>=') AdditiveExpr - #| AdditiveExpr - def RelationalExpr path, parsed - n = [] - rest = AdditiveExpr( path, n ) - if rest != path - while rest =~ /^\s*([<>]=?)\s*/ - if $1[0] == ?< - sym = "lt" - else - sym = "gt" - end - sym << "eq" if $1[-1] == ?= - n = [ sym.intern, n, [] ] - rest = AdditiveExpr( $', n[-1] ) - end - end - if parsed.size == 0 and n.size != 0 - parsed.replace(n) - elsif n.size > 0 - parsed << n - end - rest - end - - #| AdditiveExpr ('+' | '-') MultiplicativeExpr - #| MultiplicativeExpr - def AdditiveExpr path, parsed - n = [] - rest = MultiplicativeExpr( path, n ) - if rest != path - while rest =~ /^\s*(\+|-)\s*/ - if $1[0] == ?+ - n = [ :plus, n, [] ] - else - n = [ :minus, n, [] ] - end - rest = MultiplicativeExpr( $', n[-1] ) - end - end - if parsed.size == 0 and n.size != 0 - parsed.replace(n) - elsif n.size > 0 - parsed << n - end - rest - end - - #| MultiplicativeExpr ('*' | S ('div' | 'mod') S) UnaryExpr - #| UnaryExpr - def MultiplicativeExpr path, parsed - n = [] - rest = UnaryExpr( path, n ) - if rest != path - while rest =~ /^\s*(\*| div | mod )\s*/ - if $1[0] == ?* - n = [ :mult, n, [] ] - elsif $1.include?( "div" ) - n = [ :div, n, [] ] - else - n = [ :mod, n, [] ] - end - rest = UnaryExpr( $', n[-1] ) - end - end - if parsed.size == 0 and n.size != 0 - parsed.replace(n) - elsif n.size > 0 - parsed << n - end - rest - end - - #| '-' UnaryExpr - #| UnionExpr - def UnaryExpr path, parsed - path =~ /^(\-*)/ - path = $' - if $1 and (($1.size % 2) != 0) - mult = -1 - else - mult = 1 - end - parsed << :neg if mult < 0 - - n = [] - path = UnionExpr( path, n ) - parsed.concat( n ) - path - end - - #| UnionExpr '|' PathExpr - #| PathExpr - def UnionExpr path, parsed - n = [] - rest = PathExpr( path, n ) - if rest != path - while rest =~ /^\s*(\|)\s*/ - n = [ :union, n, [] ] - rest = PathExpr( $', n[-1] ) - end - end - if parsed.size == 0 and n.size != 0 - parsed.replace( n ) - elsif n.size > 0 - parsed << n - end - rest - end - - #| LocationPath - #| FilterExpr ('/' | '//') RelativeLocationPath - def PathExpr path, parsed - path = path.lstrip - n = [] - rest = FilterExpr( path, n ) - if rest != path - if rest and rest[0] == ?/ - rest = RelativeLocationPath(rest, n) - parsed.concat(n) - return rest - end - end - rest = LocationPath(rest, n) if rest =~ /\A[\/\.\@\[\w*]/ - parsed.concat(n) - return rest - end - - #| FilterExpr Predicate - #| PrimaryExpr - def FilterExpr path, parsed - n = [] - path_before_primary_expr = path - path = PrimaryExpr(path, n) - return path_before_primary_expr if path == path_before_primary_expr - path = Predicate(path, n) - parsed.concat(n) - path - end - - #| VARIABLE_REFERENCE - #| '(' expr ')' - #| LITERAL - #| NUMBER - #| FunctionCall - VARIABLE_REFERENCE = /^\$(#{NAME_STR})/u - NUMBER = /^(\d*\.?\d+)/ - NT = /^comment|text|processing-instruction|node$/ - def PrimaryExpr path, parsed - case path - when VARIABLE_REFERENCE - varname = $1 - path = $' - parsed << :variable - parsed << varname - #arry << @variables[ varname ] - when /^(\w[-\w]*)(?:\()/ - fname = $1 - tmp = $' - return path if fname =~ NT - path = tmp - parsed << :function - parsed << fname - path = FunctionCall(path, parsed) - when NUMBER - varname = $1.nil? ? $2 : $1 - path = $' - parsed << :literal - parsed << (varname.include?('.') ? varname.to_f : varname.to_i) - when LITERAL - varname = $1.nil? ? $2 : $1 - path = $' - parsed << :literal - parsed << varname - when /^\(/ #/ - path, contents = get_group(path) - contents = contents[1..-2] - n = [] - OrExpr( contents, n ) - parsed.concat(n) - end - path - end - - #| FUNCTION_NAME '(' ( expr ( ',' expr )* )? ')' - def FunctionCall rest, parsed - path, arguments = parse_args(rest) - argset = [] - for argument in arguments - args = [] - OrExpr( argument, args ) - argset << args - end - parsed << argset - path - end - - # get_group( '[foo]bar' ) -> ['bar', '[foo]'] - def get_group string - ind = 0 - depth = 0 - st = string[0,1] - en = (st == "(" ? ")" : "]") - begin - case string[ind,1] - when st - depth += 1 - when en - depth -= 1 - end - ind += 1 - end while depth > 0 and ind < string.length - return nil unless depth==0 - [string[ind..-1], string[0..ind-1]] - end - - def parse_args( string ) - arguments = [] - ind = 0 - inquot = false - inapos = false - depth = 1 - begin - case string[ind] - when ?" - inquot = !inquot unless inapos - when ?' - inapos = !inapos unless inquot - else - unless inquot or inapos - case string[ind] - when ?( - depth += 1 - if depth == 1 - string = string[1..-1] - ind -= 1 - end - when ?) - depth -= 1 - if depth == 0 - s = string[0,ind].strip - arguments << s unless s == "" - string = string[ind+1..-1] - end - when ?, - if depth == 1 - s = string[0,ind].strip - arguments << s unless s == "" - string = string[ind+1..-1] - ind = -1 - end - end - end - end - ind += 1 - end while depth > 0 and ind < string.length - return nil unless depth==0 - [string,arguments] - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/quickpath.rb b/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/quickpath.rb deleted file mode 100644 index a0466b25..00000000 --- a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/quickpath.rb +++ /dev/null @@ -1,266 +0,0 @@ -# frozen_string_literal: false -require_relative 'functions' -require_relative 'xmltokens' - -module REXML - class QuickPath - include Functions - include XMLTokens - - # A base Hash object to be used when initializing a - # default empty namespaces set. - EMPTY_HASH = {} - - def QuickPath::first element, path, namespaces=EMPTY_HASH - match(element, path, namespaces)[0] - end - - def QuickPath::each element, path, namespaces=EMPTY_HASH, &block - path = "*" unless path - match(element, path, namespaces).each( &block ) - end - - def QuickPath::match element, path, namespaces=EMPTY_HASH - raise "nil is not a valid xpath" unless path - results = nil - Functions::namespace_context = namespaces - case path - when /^\/([^\/]|$)/u - # match on root - path = path[1..-1] - return [element.root.parent] if path == '' - results = filter([element.root], path) - when /^[-\w]*::/u - results = filter([element], path) - when /^\*/u - results = filter(element.to_a, path) - when /^[\[!\w:]/u - # match on child - children = element.to_a - results = filter(children, path) - else - results = filter([element], path) - end - return results - end - - # Given an array of nodes it filters the array based on the path. The - # result is that when this method returns, the array will contain elements - # which match the path - def QuickPath::filter elements, path - return elements if path.nil? or path == '' or elements.size == 0 - case path - when /^\/\//u # Descendant - return axe( elements, "descendant-or-self", $' ) - when /^\/?\b(\w[-\w]*)\b::/u # Axe - return axe( elements, $1, $' ) - when /^\/(?=\b([:!\w][-\.\w]*:)?[-!\*\.\w]*\b([^:(]|$)|\*)/u # Child - rest = $' - results = [] - elements.each do |element| - results |= filter( element.to_a, rest ) - end - return results - when /^\/?(\w[-\w]*)\(/u # / Function - return function( elements, $1, $' ) - when Namespace::NAMESPLIT # Element name - name = $2 - ns = $1 - rest = $' - elements.delete_if do |element| - !(element.kind_of? Element and - (element.expanded_name == name or - (element.name == name and - element.namespace == Functions.namespace_context[ns]))) - end - return filter( elements, rest ) - when /^\/\[/u - matches = [] - elements.each do |element| - matches |= predicate( element.to_a, path[1..-1] ) if element.kind_of? Element - end - return matches - when /^\[/u # Predicate - return predicate( elements, path ) - when /^\/?\.\.\./u # Ancestor - return axe( elements, "ancestor", $' ) - when /^\/?\.\./u # Parent - return filter( elements.collect{|e|e.parent}, $' ) - when /^\/?\./u # Self - return filter( elements, $' ) - when /^\*/u # Any - results = [] - elements.each do |element| - results |= filter( [element], $' ) if element.kind_of? Element - #if element.kind_of? Element - # children = element.to_a - # children.delete_if { |child| !child.kind_of?(Element) } - # results |= filter( children, $' ) - #end - end - return results - end - return [] - end - - def QuickPath::axe( elements, axe_name, rest ) - matches = [] - matches = filter( elements.dup, rest ) if axe_name =~ /-or-self$/u - case axe_name - when /^descendant/u - elements.each do |element| - matches |= filter( element.to_a, "descendant-or-self::#{rest}" ) if element.kind_of? Element - end - when /^ancestor/u - elements.each do |element| - while element.parent - matches << element.parent - element = element.parent - end - end - matches = filter( matches, rest ) - when "self" - matches = filter( elements, rest ) - when "child" - elements.each do |element| - matches |= filter( element.to_a, rest ) if element.kind_of? Element - end - when "attribute" - elements.each do |element| - matches << element.attributes[ rest ] if element.kind_of? Element - end - when "parent" - matches = filter(elements.collect{|element| element.parent}.uniq, rest) - when "following-sibling" - matches = filter(elements.collect{|element| element.next_sibling}.uniq, - rest) - when "previous-sibling" - matches = filter(elements.collect{|element| - element.previous_sibling}.uniq, rest ) - end - return matches.uniq - end - - OPERAND_ = '((?=(?:(?!and|or).)*[^\s<>=])[^\s<>=]+)' - # A predicate filters a node-set with respect to an axis to produce a - # new node-set. For each node in the node-set to be filtered, the - # PredicateExpr is evaluated with that node as the context node, with - # the number of nodes in the node-set as the context size, and with the - # proximity position of the node in the node-set with respect to the - # axis as the context position; if PredicateExpr evaluates to true for - # that node, the node is included in the new node-set; otherwise, it is - # not included. - # - # A PredicateExpr is evaluated by evaluating the Expr and converting - # the result to a boolean. If the result is a number, the result will - # be converted to true if the number is equal to the context position - # and will be converted to false otherwise; if the result is not a - # number, then the result will be converted as if by a call to the - # boolean function. Thus a location path para[3] is equivalent to - # para[position()=3]. - def QuickPath::predicate( elements, path ) - ind = 1 - bcount = 1 - while bcount > 0 - bcount += 1 if path[ind] == ?[ - bcount -= 1 if path[ind] == ?] - ind += 1 - end - ind -= 1 - predicate = path[1..ind-1] - rest = path[ind+1..-1] - - # have to change 'a [=<>] b [=<>] c' into 'a [=<>] b and b [=<>] c' - # - predicate.gsub!( - /#{OPERAND_}\s*([<>=])\s*#{OPERAND_}\s*([<>=])\s*#{OPERAND_}/u, - '\1 \2 \3 and \3 \4 \5' ) - # Let's do some Ruby trickery to avoid some work: - predicate.gsub!( /&/u, "&&" ) - predicate.gsub!( /=/u, "==" ) - predicate.gsub!( /@(\w[-\w.]*)/u, 'attribute("\1")' ) - predicate.gsub!( /\bmod\b/u, "%" ) - predicate.gsub!( /\b(\w[-\w.]*\()/u ) { - fname = $1 - fname.gsub( /-/u, "_" ) - } - - Functions.pair = [ 0, elements.size ] - results = [] - elements.each do |element| - Functions.pair[0] += 1 - Functions.node = element - res = eval( predicate ) - case res - when true - results << element - when Integer - results << element if Functions.pair[0] == res - when String - results << element - end - end - return filter( results, rest ) - end - - def QuickPath::attribute( name ) - return Functions.node.attributes[name] if Functions.node.kind_of? Element - end - - def QuickPath::name() - return Functions.node.name if Functions.node.kind_of? Element - end - - def QuickPath::method_missing( id, *args ) - begin - Functions.send( id.id2name, *args ) - rescue Exception - raise "METHOD: #{id.id2name}(#{args.join ', '})\n#{$!.message}" - end - end - - def QuickPath::function( elements, fname, rest ) - args = parse_args( elements, rest ) - Functions.pair = [0, elements.size] - results = [] - elements.each do |element| - Functions.pair[0] += 1 - Functions.node = element - res = Functions.send( fname, *args ) - case res - when true - results << element - when Integer - results << element if Functions.pair[0] == res - end - end - return results - end - - def QuickPath::parse_args( element, string ) - # /.*?(?:\)|,)/ - arguments = [] - buffer = "" - while string and string != "" - c = string[0] - string.sub!(/^./u, "") - case c - when ?, - # if depth = 1, then we start a new argument - arguments << evaluate( buffer ) - #arguments << evaluate( string[0..count] ) - when ?( - # start a new method call - function( element, buffer, string ) - buffer = "" - when ?) - # close the method call and return arguments - return arguments - else - buffer << c - end - end - "" - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/rexml.rb b/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/rexml.rb deleted file mode 100644 index 0d18559a..00000000 --- a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/rexml.rb +++ /dev/null @@ -1,39 +0,0 @@ -# -*- coding: utf-8 -*- -# frozen_string_literal: false -# -# \Module \REXML provides classes and methods for parsing, -# editing, and generating XML. -# -# == Implementation -# -# \REXML: -# - Is pure Ruby. -# - Provides tree, stream, SAX2, pull, and lightweight APIs. -# - Conforms to {XML version 1.0}[https://www.w3.org/TR/REC-xml/]. -# - Fully implements {XPath version 1.0}[http://www.w3c.org/tr/xpath]. -# - Is {non-validating}[https://www.w3.org/TR/xml/]. -# - Passes 100% of the non-validating {Oasis tests}[http://www.oasis-open.org/committees/xml-conformance/xml-test-suite.shtml]. -# -# == In a Hurry? -# -# If you're somewhat familiar with XML -# and have a particular task in mind, -# you may want to see {the tasks pages}[doc/rexml/tasks/tocs/master_toc_rdoc.html]. -# -# == API -# -# Among the most important classes for using \REXML are: -# - REXML::Document. -# - REXML::Element. -# -# There's also an {REXML tutorial}[doc/rexml/tutorial_rdoc.html]. -# -module REXML - COPYRIGHT = "Copyright © 2001-2008 Sean Russell <ser@germane-software.com>" - DATE = "2008/019" - VERSION = "3.2.6" - REVISION = "" - - Copyright = COPYRIGHT - Version = VERSION -end diff --git a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/sax2listener.rb b/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/sax2listener.rb deleted file mode 100644 index 5afdc808..00000000 --- a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/sax2listener.rb +++ /dev/null @@ -1,98 +0,0 @@ -# frozen_string_literal: false -module REXML - # A template for stream parser listeners. - # Note that the declarations (attlistdecl, elementdecl, etc) are trivially - # processed; REXML doesn't yet handle doctype entity declarations, so you - # have to parse them out yourself. - # === Missing methods from SAX2 - # ignorable_whitespace - # === Methods extending SAX2 - # +WARNING+ - # These methods are certainly going to change, until DTDs are fully - # supported. Be aware of this. - # start_document - # end_document - # doctype - # elementdecl - # attlistdecl - # entitydecl - # notationdecl - # cdata - # xmldecl - # comment - module SAX2Listener - def start_document - end - def end_document - end - def start_prefix_mapping prefix, uri - end - def end_prefix_mapping prefix - end - def start_element uri, localname, qname, attributes - end - def end_element uri, localname, qname - end - def characters text - end - def processing_instruction target, data - end - # Handles a doctype declaration. Any attributes of the doctype which are - # not supplied will be nil. # EG, <!DOCTYPE me PUBLIC "foo" "bar"> - # @p name the name of the doctype; EG, "me" - # @p pub_sys "PUBLIC", "SYSTEM", or nil. EG, "PUBLIC" - # @p long_name the supplied long name, or nil. EG, "foo" - # @p uri the uri of the doctype, or nil. EG, "bar" - def doctype name, pub_sys, long_name, uri - end - # If a doctype includes an ATTLIST declaration, it will cause this - # method to be called. The content is the declaration itself, unparsed. - # EG, <!ATTLIST el attr CDATA #REQUIRED> will come to this method as "el - # attr CDATA #REQUIRED". This is the same for all of the .*decl - # methods. - def attlistdecl(element, pairs, contents) - end - # <!ELEMENT ...> - def elementdecl content - end - # <!ENTITY ...> - # The argument passed to this method is an array of the entity - # declaration. It can be in a number of formats, but in general it - # returns (example, result): - # <!ENTITY % YN '"Yes"'> - # ["%", "YN", "\"Yes\""] - # <!ENTITY % YN 'Yes'> - # ["%", "YN", "Yes"] - # <!ENTITY WhatHeSaid "He said %YN;"> - # ["WhatHeSaid", "He said %YN;"] - # <!ENTITY open-hatch SYSTEM "http://www.textuality.com/boilerplate/OpenHatch.xml"> - # ["open-hatch", "SYSTEM", "http://www.textuality.com/boilerplate/OpenHatch.xml"] - # <!ENTITY open-hatch PUBLIC "-//Textuality//TEXT Standard open-hatch boilerplate//EN" "http://www.textuality.com/boilerplate/OpenHatch.xml"> - # ["open-hatch", "PUBLIC", "-//Textuality//TEXT Standard open-hatch boilerplate//EN", "http://www.textuality.com/boilerplate/OpenHatch.xml"] - # <!ENTITY hatch-pic SYSTEM "../grafix/OpenHatch.gif" NDATA gif> - # ["hatch-pic", "SYSTEM", "../grafix/OpenHatch.gif", "NDATA", "gif"] - def entitydecl declaration - end - # <!NOTATION ...> - def notationdecl name, public_or_system, public_id, system_id - end - # Called when <![CDATA[ ... ]]> is encountered in a document. - # @p content "..." - def cdata content - end - # Called when an XML PI is encountered in the document. - # EG: <?xml version="1.0" encoding="utf"?> - # @p version the version attribute value. EG, "1.0" - # @p encoding the encoding attribute value, or nil. EG, "utf" - # @p standalone the standalone attribute value, or nil. EG, nil - # @p spaced the declaration is followed by a line break - def xmldecl version, encoding, standalone - end - # Called when a comment is encountered. - # @p comment The content of the comment - def comment comment - end - def progress position - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/security.rb b/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/security.rb deleted file mode 100644 index 99b74607..00000000 --- a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/security.rb +++ /dev/null @@ -1,28 +0,0 @@ -# frozen_string_literal: false -module REXML - module Security - @@entity_expansion_limit = 10_000 - - # Set the entity expansion limit. By default the limit is set to 10000. - def self.entity_expansion_limit=( val ) - @@entity_expansion_limit = val - end - - # Get the entity expansion limit. By default the limit is set to 10000. - def self.entity_expansion_limit - return @@entity_expansion_limit - end - - @@entity_expansion_text_limit = 10_240 - - # Set the entity expansion limit. By default the limit is set to 10240. - def self.entity_expansion_text_limit=( val ) - @@entity_expansion_text_limit = val - end - - # Get the entity expansion limit. By default the limit is set to 10240. - def self.entity_expansion_text_limit - return @@entity_expansion_text_limit - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/source.rb b/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/source.rb deleted file mode 100644 index 90b370b9..00000000 --- a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/source.rb +++ /dev/null @@ -1,298 +0,0 @@ -# coding: US-ASCII -# frozen_string_literal: false -require_relative 'encoding' - -module REXML - # Generates Source-s. USE THIS CLASS. - class SourceFactory - # Generates a Source object - # @param arg Either a String, or an IO - # @return a Source, or nil if a bad argument was given - def SourceFactory::create_from(arg) - if arg.respond_to? :read and - arg.respond_to? :readline and - arg.respond_to? :nil? and - arg.respond_to? :eof? - IOSource.new(arg) - elsif arg.respond_to? :to_str - require 'stringio' - IOSource.new(StringIO.new(arg)) - elsif arg.kind_of? Source - arg - else - raise "#{arg.class} is not a valid input stream. It must walk \n"+ - "like either a String, an IO, or a Source." - end - end - end - - # A Source can be searched for patterns, and wraps buffers and other - # objects and provides consumption of text - class Source - include Encoding - # The current buffer (what we're going to read next) - attr_reader :buffer - # The line number of the last consumed text - attr_reader :line - attr_reader :encoding - - # Constructor - # @param arg must be a String, and should be a valid XML document - # @param encoding if non-null, sets the encoding of the source to this - # value, overriding all encoding detection - def initialize(arg, encoding=nil) - @orig = @buffer = arg - if encoding - self.encoding = encoding - else - detect_encoding - end - @line = 0 - end - - - # Inherited from Encoding - # Overridden to support optimized en/decoding - def encoding=(enc) - return unless super - encoding_updated - end - - # Scans the source for a given pattern. Note, that this is not your - # usual scan() method. For one thing, the pattern argument has some - # requirements; for another, the source can be consumed. You can easily - # confuse this method. Originally, the patterns were easier - # to construct and this method more robust, because this method - # generated search regexps on the fly; however, this was - # computationally expensive and slowed down the entire REXML package - # considerably, since this is by far the most commonly called method. - # @param pattern must be a Regexp, and must be in the form of - # /^\s*(#{your pattern, with no groups})(.*)/. The first group - # will be returned; the second group is used if the consume flag is - # set. - # @param consume if true, the pattern returned will be consumed, leaving - # everything after it in the Source. - # @return the pattern, if found, or nil if the Source is empty or the - # pattern is not found. - def scan(pattern, cons=false) - return nil if @buffer.nil? - rv = @buffer.scan(pattern) - @buffer = $' if cons and rv.size>0 - rv - end - - def read - end - - def consume( pattern ) - @buffer = $' if pattern.match( @buffer ) - end - - def match_to( char, pattern ) - return pattern.match(@buffer) - end - - def match_to_consume( char, pattern ) - md = pattern.match(@buffer) - @buffer = $' - return md - end - - def match(pattern, cons=false) - md = pattern.match(@buffer) - @buffer = $' if cons and md - return md - end - - # @return true if the Source is exhausted - def empty? - @buffer == "" - end - - def position - @orig.index( @buffer ) - end - - # @return the current line in the source - def current_line - lines = @orig.split - res = lines.grep @buffer[0..30] - res = res[-1] if res.kind_of? Array - lines.index( res ) if res - end - - private - def detect_encoding - buffer_encoding = @buffer.encoding - detected_encoding = "UTF-8" - begin - @buffer.force_encoding("ASCII-8BIT") - if @buffer[0, 2] == "\xfe\xff" - @buffer[0, 2] = "" - detected_encoding = "UTF-16BE" - elsif @buffer[0, 2] == "\xff\xfe" - @buffer[0, 2] = "" - detected_encoding = "UTF-16LE" - elsif @buffer[0, 3] == "\xef\xbb\xbf" - @buffer[0, 3] = "" - detected_encoding = "UTF-8" - end - ensure - @buffer.force_encoding(buffer_encoding) - end - self.encoding = detected_encoding - end - - def encoding_updated - if @encoding != 'UTF-8' - @buffer = decode(@buffer) - @to_utf = true - else - @to_utf = false - @buffer.force_encoding ::Encoding::UTF_8 - end - end - end - - # A Source that wraps an IO. See the Source class for method - # documentation - class IOSource < Source - #attr_reader :block_size - - # block_size has been deprecated - def initialize(arg, block_size=500, encoding=nil) - @er_source = @source = arg - @to_utf = false - @pending_buffer = nil - - if encoding - super("", encoding) - else - super(@source.read(3) || "") - end - - if !@to_utf and - @buffer.respond_to?(:force_encoding) and - @source.respond_to?(:external_encoding) and - @source.external_encoding != ::Encoding::UTF_8 - @force_utf8 = true - else - @force_utf8 = false - end - end - - def scan(pattern, cons=false) - rv = super - # You'll notice that this next section is very similar to the same - # section in match(), but just a liiittle different. This is - # because it is a touch faster to do it this way with scan() - # than the way match() does it; enough faster to warrant duplicating - # some code - if rv.size == 0 - until @buffer =~ pattern or @source.nil? - begin - @buffer << readline - rescue Iconv::IllegalSequence - raise - rescue - @source = nil - end - end - rv = super - end - rv.taint if RUBY_VERSION < '2.7' - rv - end - - def read - begin - @buffer << readline - rescue Exception, NameError - @source = nil - end - end - - def consume( pattern ) - match( pattern, true ) - end - - def match( pattern, cons=false ) - rv = pattern.match(@buffer) - @buffer = $' if cons and rv - while !rv and @source - begin - @buffer << readline - rv = pattern.match(@buffer) - @buffer = $' if cons and rv - rescue - @source = nil - end - end - rv.taint if RUBY_VERSION < '2.7' - rv - end - - def empty? - super and ( @source.nil? || @source.eof? ) - end - - def position - @er_source.pos rescue 0 - end - - # @return the current line in the source - def current_line - begin - pos = @er_source.pos # The byte position in the source - lineno = @er_source.lineno # The XML < position in the source - @er_source.rewind - line = 0 # The \r\n position in the source - begin - while @er_source.pos < pos - @er_source.readline - line += 1 - end - rescue - end - @er_source.seek(pos) - rescue IOError - pos = -1 - line = -1 - end - [pos, lineno, line] - end - - private - def readline - str = @source.readline(@line_break) - if @pending_buffer - if str.nil? - str = @pending_buffer - else - str = @pending_buffer + str - end - @pending_buffer = nil - end - return nil if str.nil? - - if @to_utf - decode(str) - else - str.force_encoding(::Encoding::UTF_8) if @force_utf8 - str - end - end - - def encoding_updated - case @encoding - when "UTF-16BE", "UTF-16LE" - @source.binmode - @source.set_encoding(@encoding, @encoding) - end - @line_break = encode(">") - @pending_buffer, @buffer = @buffer, "" - @pending_buffer.force_encoding(@encoding) - super - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/streamlistener.rb b/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/streamlistener.rb deleted file mode 100644 index 30c89451..00000000 --- a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/streamlistener.rb +++ /dev/null @@ -1,93 +0,0 @@ -# frozen_string_literal: false -module REXML - # A template for stream parser listeners. - # Note that the declarations (attlistdecl, elementdecl, etc) are trivially - # processed; REXML doesn't yet handle doctype entity declarations, so you - # have to parse them out yourself. - module StreamListener - # Called when a tag is encountered. - # @p name the tag name - # @p attrs an array of arrays of attribute/value pairs, suitable for - # use with assoc or rassoc. IE, <tag attr1="value1" attr2="value2"> - # will result in - # tag_start( "tag", # [["attr1","value1"],["attr2","value2"]]) - def tag_start name, attrs - end - # Called when the end tag is reached. In the case of <tag/>, tag_end - # will be called immediately after tag_start - # @p the name of the tag - def tag_end name - end - # Called when text is encountered in the document - # @p text the text content. - def text text - end - # Called when an instruction is encountered. EG: <?xsl sheet='foo'?> - # @p name the instruction name; in the example, "xsl" - # @p instruction the rest of the instruction. In the example, - # "sheet='foo'" - def instruction name, instruction - end - # Called when a comment is encountered. - # @p comment The content of the comment - def comment comment - end - # Handles a doctype declaration. Any attributes of the doctype which are - # not supplied will be nil. # EG, <!DOCTYPE me PUBLIC "foo" "bar"> - # @p name the name of the doctype; EG, "me" - # @p pub_sys "PUBLIC", "SYSTEM", or nil. EG, "PUBLIC" - # @p long_name the supplied long name, or nil. EG, "foo" - # @p uri the uri of the doctype, or nil. EG, "bar" - def doctype name, pub_sys, long_name, uri - end - # Called when the doctype is done - def doctype_end - end - # If a doctype includes an ATTLIST declaration, it will cause this - # method to be called. The content is the declaration itself, unparsed. - # EG, <!ATTLIST el attr CDATA #REQUIRED> will come to this method as "el - # attr CDATA #REQUIRED". This is the same for all of the .*decl - # methods. - def attlistdecl element_name, attributes, raw_content - end - # <!ELEMENT ...> - def elementdecl content - end - # <!ENTITY ...> - # The argument passed to this method is an array of the entity - # declaration. It can be in a number of formats, but in general it - # returns (example, result): - # <!ENTITY % YN '"Yes"'> - # ["YN", "\"Yes\"", "%"] - # <!ENTITY % YN 'Yes'> - # ["YN", "Yes", "%"] - # <!ENTITY WhatHeSaid "He said %YN;"> - # ["WhatHeSaid", "He said %YN;"] - # <!ENTITY open-hatch SYSTEM "http://www.textuality.com/boilerplate/OpenHatch.xml"> - # ["open-hatch", "SYSTEM", "http://www.textuality.com/boilerplate/OpenHatch.xml"] - # <!ENTITY open-hatch PUBLIC "-//Textuality//TEXT Standard open-hatch boilerplate//EN" "http://www.textuality.com/boilerplate/OpenHatch.xml"> - # ["open-hatch", "PUBLIC", "-//Textuality//TEXT Standard open-hatch boilerplate//EN", "http://www.textuality.com/boilerplate/OpenHatch.xml"] - # <!ENTITY hatch-pic SYSTEM "../grafix/OpenHatch.gif" NDATA gif> - # ["hatch-pic", "SYSTEM", "../grafix/OpenHatch.gif", "gif"] - def entitydecl content - end - # <!NOTATION ...> - def notationdecl content - end - # Called when %foo; is encountered in a doctype declaration. - # @p content "foo" - def entity content - end - # Called when <![CDATA[ ... ]]> is encountered in a document. - # @p content "..." - def cdata content - end - # Called when an XML PI is encountered in the document. - # EG: <?xml version="1.0" encoding="utf"?> - # @p version the version attribute value. EG, "1.0" - # @p encoding the encoding attribute value, or nil. EG, "utf" - # @p standalone the standalone attribute value, or nil. EG, nil - def xmldecl version, encoding, standalone - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/text.rb b/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/text.rb deleted file mode 100644 index b47bad3b..00000000 --- a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/text.rb +++ /dev/null @@ -1,426 +0,0 @@ -# frozen_string_literal: true -require_relative 'security' -require_relative 'entity' -require_relative 'doctype' -require_relative 'child' -require_relative 'doctype' -require_relative 'parseexception' - -module REXML - # Represents text nodes in an XML document - class Text < Child - include Comparable - # The order in which the substitutions occur - SPECIALS = [ /&(?!#?[\w-]+;)/u, /</u, />/u, /"/u, /'/u, /\r/u ] - SUBSTITUTES = ['&', '<', '>', '"', ''', ' '] - # Characters which are substituted in written strings - SLAICEPS = [ '<', '>', '"', "'", '&' ] - SETUTITSBUS = [ /</u, />/u, /"/u, /'/u, /&/u ] - - # If +raw+ is true, then REXML leaves the value alone - attr_accessor :raw - - NEEDS_A_SECOND_CHECK = /(<|&((#{Entity::NAME});|(#0*((?:\d+)|(?:x[a-fA-F0-9]+)));)?)/um - NUMERICENTITY = /�*((?:\d+)|(?:x[a-fA-F0-9]+));/ - VALID_CHAR = [ - 0x9, 0xA, 0xD, - (0x20..0xD7FF), - (0xE000..0xFFFD), - (0x10000..0x10FFFF) - ] - - if String.method_defined? :encode - VALID_XML_CHARS = Regexp.new('^['+ - VALID_CHAR.map { |item| - case item - when Integer - [item].pack('U').force_encoding('utf-8') - when Range - [item.first, '-'.ord, item.last].pack('UUU').force_encoding('utf-8') - end - }.join + - ']*$') - else - VALID_XML_CHARS = /^( - [\x09\x0A\x0D\x20-\x7E] # ASCII - | [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte - | \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs - | [\xE1-\xEC\xEE][\x80-\xBF]{2} # straight 3-byte - | \xEF[\x80-\xBE]{2} # - | \xEF\xBF[\x80-\xBD] # excluding U+fffe and U+ffff - | \xED[\x80-\x9F][\x80-\xBF] # excluding surrogates - | \xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3 - | [\xF1-\xF3][\x80-\xBF]{3} # planes 4-15 - | \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16 - )*$/nx; - end - - # Constructor - # +arg+ if a String, the content is set to the String. If a Text, - # the object is shallowly cloned. - # - # +respect_whitespace+ (boolean, false) if true, whitespace is - # respected - # - # +parent+ (nil) if this is a Parent object, the parent - # will be set to this. - # - # +raw+ (nil) This argument can be given three values. - # If true, then the value of used to construct this object is expected to - # contain no unescaped XML markup, and REXML will not change the text. If - # this value is false, the string may contain any characters, and REXML will - # escape any and all defined entities whose values are contained in the - # text. If this value is nil (the default), then the raw value of the - # parent will be used as the raw value for this node. If there is no raw - # value for the parent, and no value is supplied, the default is false. - # Use this field if you have entities defined for some text, and you don't - # want REXML to escape that text in output. - # Text.new( "<&", false, nil, false ) #-> "<&" - # Text.new( "<&", false, nil, false ) #-> "&lt;&amp;" - # Text.new( "<&", false, nil, true ) #-> Parse exception - # Text.new( "<&", false, nil, true ) #-> "<&" - # # Assume that the entity "s" is defined to be "sean" - # # and that the entity "r" is defined to be "russell" - # Text.new( "sean russell" ) #-> "&s; &r;" - # Text.new( "sean russell", false, nil, true ) #-> "sean russell" - # - # +entity_filter+ (nil) This can be an array of entities to match in the - # supplied text. This argument is only useful if +raw+ is set to false. - # Text.new( "sean russell", false, nil, false, ["s"] ) #-> "&s; russell" - # Text.new( "sean russell", false, nil, true, ["s"] ) #-> "sean russell" - # In the last example, the +entity_filter+ argument is ignored. - # - # +illegal+ INTERNAL USE ONLY - def initialize(arg, respect_whitespace=false, parent=nil, raw=nil, - entity_filter=nil, illegal=NEEDS_A_SECOND_CHECK ) - - @raw = false - @parent = nil - @entity_filter = nil - - if parent - super( parent ) - @raw = parent.raw - end - - if arg.kind_of? String - @string = arg.dup - elsif arg.kind_of? Text - @string = arg.instance_variable_get(:@string).dup - @raw = arg.raw - @entity_filter = arg.instance_variable_get(:@entity_filter) - else - raise "Illegal argument of type #{arg.type} for Text constructor (#{arg})" - end - - @string.squeeze!(" \n\t") unless respect_whitespace - @string.gsub!(/\r\n?/, "\n") - @raw = raw unless raw.nil? - @entity_filter = entity_filter if entity_filter - clear_cache - - Text.check(@string, illegal, doctype) if @raw - end - - def parent= parent - super(parent) - Text.check(@string, NEEDS_A_SECOND_CHECK, doctype) if @raw and @parent - end - - # check for illegal characters - def Text.check string, pattern, doctype - - # illegal anywhere - if !string.match?(VALID_XML_CHARS) - if String.method_defined? :encode - string.chars.each do |c| - case c.ord - when *VALID_CHAR - else - raise "Illegal character #{c.inspect} in raw string #{string.inspect}" - end - end - else - string.scan(/[\x00-\x7F]|[\x80-\xBF][\xC0-\xF0]*|[\xC0-\xF0]/n) do |c| - case c.unpack('U') - when *VALID_CHAR - else - raise "Illegal character #{c.inspect} in raw string #{string.inspect}" - end - end - end - end - - # context sensitive - string.scan(pattern) do - if $1[-1] != ?; - raise "Illegal character #{$1.inspect} in raw string #{string.inspect}" - elsif $1[0] == ?& - if $5 and $5[0] == ?# - case ($5[1] == ?x ? $5[2..-1].to_i(16) : $5[1..-1].to_i) - when *VALID_CHAR - else - raise "Illegal character #{$1.inspect} in raw string #{string.inspect}" - end - # FIXME: below can't work but this needs API change. - # elsif @parent and $3 and !SUBSTITUTES.include?($1) - # if !doctype or !doctype.entities.has_key?($3) - # raise "Undeclared entity '#{$1}' in raw string \"#{string}\"" - # end - end - end - end - end - - def node_type - :text - end - - def empty? - @string.size==0 - end - - - def clone - return Text.new(self, true) - end - - - # Appends text to this text node. The text is appended in the +raw+ mode - # of this text node. - # - # +returns+ the text itself to enable method chain like - # 'text << "XXX" << "YYY"'. - def <<( to_append ) - @string << to_append.gsub( /\r\n?/, "\n" ) - clear_cache - self - end - - - # +other+ a String or a Text - # +returns+ the result of (to_s <=> arg.to_s) - def <=>( other ) - to_s() <=> other.to_s - end - - def doctype - if @parent - doc = @parent.document - doc.doctype if doc - end - end - - REFERENCE = /#{Entity::REFERENCE}/ - # Returns the string value of this text node. This string is always - # escaped, meaning that it is a valid XML text node string, and all - # entities that can be escaped, have been inserted. This method respects - # the entity filter set in the constructor. - # - # # Assume that the entity "s" is defined to be "sean", and that the - # # entity "r" is defined to be "russell" - # t = Text.new( "< & sean russell", false, nil, false, ['s'] ) - # t.to_s #-> "< & &s; russell" - # t = Text.new( "< & &s; russell", false, nil, false ) - # t.to_s #-> "< & &s; russell" - # u = Text.new( "sean russell", false, nil, true ) - # u.to_s #-> "sean russell" - def to_s - return @string if @raw - @normalized ||= Text::normalize( @string, doctype, @entity_filter ) - end - - def inspect - @string.inspect - end - - # Returns the string value of this text. This is the text without - # entities, as it might be used programmatically, or printed to the - # console. This ignores the 'raw' attribute setting, and any - # entity_filter. - # - # # Assume that the entity "s" is defined to be "sean", and that the - # # entity "r" is defined to be "russell" - # t = Text.new( "< & sean russell", false, nil, false, ['s'] ) - # t.value #-> "< & sean russell" - # t = Text.new( "< & &s; russell", false, nil, false ) - # t.value #-> "< & sean russell" - # u = Text.new( "sean russell", false, nil, true ) - # u.value #-> "sean russell" - def value - @unnormalized ||= Text::unnormalize( @string, doctype ) - end - - # Sets the contents of this text node. This expects the text to be - # unnormalized. It returns self. - # - # e = Element.new( "a" ) - # e.add_text( "foo" ) # <a>foo</a> - # e[0].value = "bar" # <a>bar</a> - # e[0].value = "<a>" # <a><a></a> - def value=( val ) - @string = val.gsub( /\r\n?/, "\n" ) - clear_cache - @raw = false - end - - def wrap(string, width, addnewline=false) - # Recursively wrap string at width. - return string if string.length <= width - place = string.rindex(' ', width) # Position in string with last ' ' before cutoff - if addnewline then - return "\n" + string[0,place] + "\n" + wrap(string[place+1..-1], width) - else - return string[0,place] + "\n" + wrap(string[place+1..-1], width) - end - end - - def indent_text(string, level=1, style="\t", indentfirstline=true) - return string if level < 0 - new_string = '' - string.each_line { |line| - indent_string = style * level - new_line = (indent_string + line).sub(/[\s]+$/,'') - new_string << new_line - } - new_string.strip! unless indentfirstline - return new_string - end - - # == DEPRECATED - # See REXML::Formatters - # - def write( writer, indent=-1, transitive=false, ie_hack=false ) - Kernel.warn("#{self.class.name}.write is deprecated. See REXML::Formatters", uplevel: 1) - formatter = if indent > -1 - REXML::Formatters::Pretty.new( indent ) - else - REXML::Formatters::Default.new - end - formatter.write( self, writer ) - end - - # FIXME - # This probably won't work properly - def xpath - path = @parent.xpath - path += "/text()" - return path - end - - # Writes out text, substituting special characters beforehand. - # +out+ A String, IO, or any other object supporting <<( String ) - # +input+ the text to substitute and the write out - # - # z=utf8.unpack("U*") - # ascOut="" - # z.each{|r| - # if r < 0x100 - # ascOut.concat(r.chr) - # else - # ascOut.concat(sprintf("&#x%x;", r)) - # end - # } - # puts ascOut - def write_with_substitution out, input - copy = input.clone - # Doing it like this rather than in a loop improves the speed - copy.gsub!( SPECIALS[0], SUBSTITUTES[0] ) - copy.gsub!( SPECIALS[1], SUBSTITUTES[1] ) - copy.gsub!( SPECIALS[2], SUBSTITUTES[2] ) - copy.gsub!( SPECIALS[3], SUBSTITUTES[3] ) - copy.gsub!( SPECIALS[4], SUBSTITUTES[4] ) - copy.gsub!( SPECIALS[5], SUBSTITUTES[5] ) - out << copy - end - - private - def clear_cache - @normalized = nil - @unnormalized = nil - end - - # Reads text, substituting entities - def Text::read_with_substitution( input, illegal=nil ) - copy = input.clone - - if copy =~ illegal - raise ParseException.new( "malformed text: Illegal character #$& in \"#{copy}\"" ) - end if illegal - - copy.gsub!( /\r\n?/, "\n" ) - if copy.include? ?& - copy.gsub!( SETUTITSBUS[0], SLAICEPS[0] ) - copy.gsub!( SETUTITSBUS[1], SLAICEPS[1] ) - copy.gsub!( SETUTITSBUS[2], SLAICEPS[2] ) - copy.gsub!( SETUTITSBUS[3], SLAICEPS[3] ) - copy.gsub!( SETUTITSBUS[4], SLAICEPS[4] ) - copy.gsub!( /�*((?:\d+)|(?:x[a-f0-9]+));/ ) { - m=$1 - #m='0' if m=='' - m = "0#{m}" if m[0] == ?x - [Integer(m)].pack('U*') - } - end - copy - end - - EREFERENCE = /&(?!#{Entity::NAME};)/ - # Escapes all possible entities - def Text::normalize( input, doctype=nil, entity_filter=nil ) - copy = input.to_s - # Doing it like this rather than in a loop improves the speed - #copy = copy.gsub( EREFERENCE, '&' ) - copy = copy.gsub( "&", "&" ) if copy.include?("&") - if doctype - # Replace all ampersands that aren't part of an entity - doctype.entities.each_value do |entity| - copy = copy.gsub( entity.value, - "&#{entity.name};" ) if entity.value and - not( entity_filter and entity_filter.include?(entity.name) ) - end - else - # Replace all ampersands that aren't part of an entity - DocType::DEFAULT_ENTITIES.each_value do |entity| - if copy.include?(entity.value) - copy = copy.gsub(entity.value, "&#{entity.name};" ) - end - end - end - copy - end - - # Unescapes all possible entities - def Text::unnormalize( string, doctype=nil, filter=nil, illegal=nil ) - sum = 0 - string.gsub( /\r\n?/, "\n" ).gsub( REFERENCE ) { - s = Text.expand($&, doctype, filter) - if sum + s.bytesize > Security.entity_expansion_text_limit - raise "entity expansion has grown too large" - else - sum += s.bytesize - end - s - } - end - - def Text.expand(ref, doctype, filter) - if ref[1] == ?# - if ref[2] == ?x - [ref[3...-1].to_i(16)].pack('U*') - else - [ref[2...-1].to_i].pack('U*') - end - elsif ref == '&' - '&' - elsif filter and filter.include?( ref[1...-1] ) - ref - elsif doctype - doctype.entity( ref[1...-1] ) or ref - else - entity_value = DocType::DEFAULT_ENTITIES[ ref[1...-1] ] - entity_value ? entity_value.value : ref - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/undefinednamespaceexception.rb b/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/undefinednamespaceexception.rb deleted file mode 100644 index 492a0981..00000000 --- a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/undefinednamespaceexception.rb +++ /dev/null @@ -1,9 +0,0 @@ -# frozen_string_literal: false -require_relative 'parseexception' -module REXML - class UndefinedNamespaceException < ParseException - def initialize( prefix, source, parser ) - super( "Undefined prefix #{prefix} found" ) - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/validation/relaxng.rb b/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/validation/relaxng.rb deleted file mode 100644 index f29a2c05..00000000 --- a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/validation/relaxng.rb +++ /dev/null @@ -1,539 +0,0 @@ -# frozen_string_literal: false -require_relative "validation" -require_relative "../parsers/baseparser" - -module REXML - module Validation - # Implemented: - # * empty - # * element - # * attribute - # * text - # * optional - # * choice - # * oneOrMore - # * zeroOrMore - # * group - # * value - # * interleave - # * mixed - # * ref - # * grammar - # * start - # * define - # - # Not implemented: - # * data - # * param - # * include - # * externalRef - # * notAllowed - # * anyName - # * nsName - # * except - # * name - class RelaxNG - include Validator - - INFINITY = 1.0 / 0.0 - EMPTY = Event.new( nil ) - TEXT = [:start_element, "text"] - attr_accessor :current - attr_accessor :count - attr_reader :references - - # FIXME: Namespaces - def initialize source - parser = REXML::Parsers::BaseParser.new( source ) - - @count = 0 - @references = {} - @root = @current = Sequence.new(self) - @root.previous = true - states = [ @current ] - begin - event = parser.pull - case event[0] - when :start_element - case event[1] - when "empty" - when "element", "attribute", "text", "value" - states[-1] << event - when "optional" - states << Optional.new( self ) - states[-2] << states[-1] - when "choice" - states << Choice.new( self ) - states[-2] << states[-1] - when "oneOrMore" - states << OneOrMore.new( self ) - states[-2] << states[-1] - when "zeroOrMore" - states << ZeroOrMore.new( self ) - states[-2] << states[-1] - when "group" - states << Sequence.new( self ) - states[-2] << states[-1] - when "interleave" - states << Interleave.new( self ) - states[-2] << states[-1] - when "mixed" - states << Interleave.new( self ) - states[-2] << states[-1] - states[-1] << TEXT - when "define" - states << [ event[2]["name"] ] - when "ref" - states[-1] << Ref.new( event[2]["name"] ) - when "anyName" - states << AnyName.new( self ) - states[-2] << states[-1] - when "nsName" - when "except" - when "name" - when "data" - when "param" - when "include" - when "grammar" - when "start" - when "externalRef" - when "notAllowed" - end - when :end_element - case event[1] - when "element", "attribute" - states[-1] << event - when "zeroOrMore", "oneOrMore", "choice", "optional", - "interleave", "group", "mixed" - states.pop - when "define" - ref = states.pop - @references[ ref.shift ] = ref - #when "empty" - end - when :end_document - states[-1] << event - when :text - states[-1] << event - end - end while event[0] != :end_document - end - - def receive event - validate( event ) - end - end - - class State - def initialize( context ) - @previous = [] - @events = [] - @current = 0 - @count = context.count += 1 - @references = context.references - @value = false - end - - def reset - return if @current == 0 - @current = 0 - @events.each {|s| s.reset if s.kind_of? State } - end - - def previous=( previous ) - @previous << previous - end - - def next( event ) - #print "In next with #{event.inspect}. " - #p @previous - return @previous.pop.next( event ) if @events[@current].nil? - expand_ref_in( @events, @current ) if @events[@current].class == Ref - if ( @events[@current].kind_of? State ) - @current += 1 - @events[@current-1].previous = self - return @events[@current-1].next( event ) - end - if ( @events[@current].matches?(event) ) - @current += 1 - if @events[@current].nil? - return @previous.pop - elsif @events[@current].kind_of? State - @current += 1 - @events[@current-1].previous = self - return @events[@current-1] - else - return self - end - else - return nil - end - end - - def to_s - # Abbreviated: - self.class.name =~ /(?:::)(\w)\w+$/ - # Full: - #self.class.name =~ /(?:::)(\w+)$/ - "#$1.#@count" - end - - def inspect - "< #{to_s} #{@events.collect{|e| - pre = e == @events[@current] ? '#' : '' - pre + e.inspect unless self == e - }.join(', ')} >" - end - - def expected - return [@events[@current]] - end - - def <<( event ) - add_event_to_arry( @events, event ) - end - - - protected - def expand_ref_in( arry, ind ) - new_events = [] - @references[ arry[ind].to_s ].each{ |evt| - add_event_to_arry(new_events,evt) - } - arry[ind,1] = new_events - end - - def add_event_to_arry( arry, evt ) - evt = generate_event( evt ) - if evt.kind_of? String - arry[-1].event_arg = evt if arry[-1].kind_of? Event and @value - @value = false - else - arry << evt - end - end - - def generate_event( event ) - return event if event.kind_of? State or event.class == Ref - evt = nil - arg = nil - case event[0] - when :start_element - case event[1] - when "element" - evt = :start_element - arg = event[2]["name"] - when "attribute" - evt = :start_attribute - arg = event[2]["name"] - when "text" - evt = :text - when "value" - evt = :text - @value = true - end - when :text - return event[1] - when :end_document - return Event.new( event[0] ) - else # then :end_element - case event[1] - when "element" - evt = :end_element - when "attribute" - evt = :end_attribute - end - end - return Event.new( evt, arg ) - end - end - - - class Sequence < State - def matches?(event) - @events[@current].matches?( event ) - end - end - - - class Optional < State - def next( event ) - if @current == 0 - rv = super - return rv if rv - @prior = @previous.pop - return @prior.next( event ) - end - super - end - - def matches?(event) - @events[@current].matches?(event) || - (@current == 0 and @previous[-1].matches?(event)) - end - - def expected - return [ @prior.expected, @events[0] ].flatten if @current == 0 - return [@events[@current]] - end - end - - - class ZeroOrMore < Optional - def next( event ) - expand_ref_in( @events, @current ) if @events[@current].class == Ref - if ( @events[@current].matches?(event) ) - @current += 1 - if @events[@current].nil? - @current = 0 - return self - elsif @events[@current].kind_of? State - @current += 1 - @events[@current-1].previous = self - return @events[@current-1] - else - return self - end - else - @prior = @previous.pop - return @prior.next( event ) if @current == 0 - return nil - end - end - - def expected - return [ @prior.expected, @events[0] ].flatten if @current == 0 - return [@events[@current]] - end - end - - - class OneOrMore < State - def initialize context - super - @ord = 0 - end - - def reset - super - @ord = 0 - end - - def next( event ) - expand_ref_in( @events, @current ) if @events[@current].class == Ref - if ( @events[@current].matches?(event) ) - @current += 1 - @ord += 1 - if @events[@current].nil? - @current = 0 - return self - elsif @events[@current].kind_of? State - @current += 1 - @events[@current-1].previous = self - return @events[@current-1] - else - return self - end - else - return @previous.pop.next( event ) if @current == 0 and @ord > 0 - return nil - end - end - - def matches?( event ) - @events[@current].matches?(event) || - (@current == 0 and @ord > 0 and @previous[-1].matches?(event)) - end - - def expected - if @current == 0 and @ord > 0 - return [@previous[-1].expected, @events[0]].flatten - else - return [@events[@current]] - end - end - end - - - class Choice < State - def initialize context - super - @choices = [] - end - - def reset - super - @events = [] - @choices.each { |c| c.each { |s| s.reset if s.kind_of? State } } - end - - def <<( event ) - add_event_to_arry( @choices, event ) - end - - def next( event ) - # Make the choice if we haven't - if @events.size == 0 - c = 0 ; max = @choices.size - while c < max - if @choices[c][0].class == Ref - expand_ref_in( @choices[c], 0 ) - @choices += @choices[c] - @choices.delete( @choices[c] ) - max -= 1 - else - c += 1 - end - end - @events = @choices.find { |evt| evt[0].matches? event } - # Remove the references - # Find the events - end - unless @events - @events = [] - return nil - end - super - end - - def matches?( event ) - return @events[@current].matches?( event ) if @events.size > 0 - !@choices.find{|evt| evt[0].matches?(event)}.nil? - end - - def expected - return [@events[@current]] if @events.size > 0 - return @choices.collect do |x| - if x[0].kind_of? State - x[0].expected - else - x[0] - end - end.flatten - end - - def inspect - "< #{to_s} #{@choices.collect{|e| e.collect{|f|f.to_s}.join(', ')}.join(' or ')} >" - end - - protected - def add_event_to_arry( arry, evt ) - if evt.kind_of? State or evt.class == Ref - arry << [evt] - elsif evt[0] == :text - if arry[-1] and - arry[-1][-1].kind_of?( Event ) and - arry[-1][-1].event_type == :text and @value - - arry[-1][-1].event_arg = evt[1] - @value = false - end - else - arry << [] if evt[0] == :start_element - arry[-1] << generate_event( evt ) - end - end - end - - - class Interleave < Choice - def initialize context - super - @choice = 0 - end - - def reset - @choice = 0 - end - - def next_current( event ) - # Expand references - c = 0 ; max = @choices.size - while c < max - if @choices[c][0].class == Ref - expand_ref_in( @choices[c], 0 ) - @choices += @choices[c] - @choices.delete( @choices[c] ) - max -= 1 - else - c += 1 - end - end - @events = @choices[@choice..-1].find { |evt| evt[0].matches? event } - @current = 0 - if @events - # reorder the choices - old = @choices[@choice] - idx = @choices.index( @events ) - @choices[@choice] = @events - @choices[idx] = old - @choice += 1 - end - - @events = [] unless @events - end - - - def next( event ) - # Find the next series - next_current(event) unless @events[@current] - return nil unless @events[@current] - - expand_ref_in( @events, @current ) if @events[@current].class == Ref - if ( @events[@current].kind_of? State ) - @current += 1 - @events[@current-1].previous = self - return @events[@current-1].next( event ) - end - return @previous.pop.next( event ) if @events[@current].nil? - if ( @events[@current].matches?(event) ) - @current += 1 - if @events[@current].nil? - return self unless @choices[@choice].nil? - return @previous.pop - elsif @events[@current].kind_of? State - @current += 1 - @events[@current-1].previous = self - return @events[@current-1] - else - return self - end - else - return nil - end - end - - def matches?( event ) - return @events[@current].matches?( event ) if @events[@current] - !@choices[@choice..-1].find{|evt| evt[0].matches?(event)}.nil? - end - - def expected - return [@events[@current]] if @events[@current] - return @choices[@choice..-1].collect do |x| - if x[0].kind_of? State - x[0].expected - else - x[0] - end - end.flatten - end - - def inspect - "< #{to_s} #{@choices.collect{|e| e.collect{|f|f.to_s}.join(', ')}.join(' and ')} >" - end - end - - class Ref - def initialize value - @value = value - end - def to_s - @value - end - def inspect - "{#{to_s}}" - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/validation/validation.rb b/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/validation/validation.rb deleted file mode 100644 index 0ad6ada4..00000000 --- a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/validation/validation.rb +++ /dev/null @@ -1,144 +0,0 @@ -# frozen_string_literal: false -require_relative 'validationexception' - -module REXML - module Validation - module Validator - NILEVENT = [ nil ] - def reset - @current = @root - @root.reset - @root.previous = true - @attr_stack = [] - self - end - def dump - puts @root.inspect - end - def validate( event ) - @attr_stack = [] unless defined? @attr_stack - match = @current.next(event) - raise ValidationException.new( "Validation error. Expected: "+ - @current.expected.join( " or " )+" from #{@current.inspect} "+ - " but got #{Event.new( event[0], event[1] ).inspect}" ) unless match - @current = match - - # Check for attributes - case event[0] - when :start_element - @attr_stack << event[2] - begin - sattr = [:start_attribute, nil] - eattr = [:end_attribute] - text = [:text, nil] - k, = event[2].find { |key,value| - sattr[1] = key - m = @current.next( sattr ) - if m - # If the state has text children... - if m.matches?( eattr ) - @current = m - else - text[1] = value - m = m.next( text ) - text[1] = nil - return false unless m - @current = m if m - end - m = @current.next( eattr ) - if m - @current = m - true - else - false - end - else - false - end - } - event[2].delete(k) if k - end while k - when :end_element - attrs = @attr_stack.pop - raise ValidationException.new( "Validation error. Illegal "+ - " attributes: #{attrs.inspect}") if attrs.length > 0 - end - end - end - - class Event - def initialize(event_type, event_arg=nil ) - @event_type = event_type - @event_arg = event_arg - end - - attr_reader :event_type - attr_accessor :event_arg - - def done? - @done - end - - def single? - return (@event_type != :start_element and @event_type != :start_attribute) - end - - def matches?( event ) - return false unless event[0] == @event_type - case event[0] - when nil - return true - when :start_element - return true if event[1] == @event_arg - when :end_element - return true - when :start_attribute - return true if event[1] == @event_arg - when :end_attribute - return true - when :end_document - return true - when :text - return (@event_arg.nil? or @event_arg == event[1]) -=begin - when :processing_instruction - false - when :xmldecl - false - when :start_doctype - false - when :end_doctype - false - when :externalentity - false - when :elementdecl - false - when :entity - false - when :attlistdecl - false - when :notationdecl - false - when :end_doctype - false -=end - else - false - end - end - - def ==( other ) - return false unless other.kind_of? Event - @event_type == other.event_type and @event_arg == other.event_arg - end - - def to_s - inspect - end - - def inspect - "#{@event_type.inspect}( #@event_arg )" - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/validation/validationexception.rb b/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/validation/validationexception.rb deleted file mode 100644 index 78cd63fd..00000000 --- a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/validation/validationexception.rb +++ /dev/null @@ -1,10 +0,0 @@ -# frozen_string_literal: false -module REXML - module Validation - class ValidationException < RuntimeError - def initialize msg - super - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/xmldecl.rb b/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/xmldecl.rb deleted file mode 100644 index d19407ce..00000000 --- a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/xmldecl.rb +++ /dev/null @@ -1,130 +0,0 @@ -# frozen_string_literal: false - -require_relative 'encoding' -require_relative 'source' - -module REXML - # NEEDS DOCUMENTATION - class XMLDecl < Child - include Encoding - - DEFAULT_VERSION = "1.0" - DEFAULT_ENCODING = "UTF-8" - DEFAULT_STANDALONE = "no" - START = "<?xml" - STOP = "?>" - - attr_accessor :version, :standalone - attr_reader :writeencoding, :writethis - - def initialize(version=DEFAULT_VERSION, encoding=nil, standalone=nil) - @writethis = true - @writeencoding = !encoding.nil? - if version.kind_of? XMLDecl - super() - @version = version.version - self.encoding = version.encoding - @writeencoding = version.writeencoding - @standalone = version.standalone - @writethis = version.writethis - else - super() - @version = version - self.encoding = encoding - @standalone = standalone - end - @version = DEFAULT_VERSION if @version.nil? - end - - def clone - XMLDecl.new(self) - end - - # indent:: - # Ignored. There must be no whitespace before an XML declaration - # transitive:: - # Ignored - # ie_hack:: - # Ignored - def write(writer, indent=-1, transitive=false, ie_hack=false) - return nil unless @writethis or writer.kind_of? Output - writer << START - writer << " #{content encoding}" - writer << STOP - end - - def ==( other ) - other.kind_of?(XMLDecl) and - other.version == @version and - other.encoding == self.encoding and - other.standalone == @standalone - end - - def xmldecl version, encoding, standalone - @version = version - self.encoding = encoding - @standalone = standalone - end - - def node_type - :xmldecl - end - - alias :stand_alone? :standalone - alias :old_enc= :encoding= - - def encoding=( enc ) - if enc.nil? - self.old_enc = "UTF-8" - @writeencoding = false - else - self.old_enc = enc - @writeencoding = true - end - self.dowrite - end - - # Only use this if you do not want the XML declaration to be written; - # this object is ignored by the XML writer. Otherwise, instantiate your - # own XMLDecl and add it to the document. - # - # Note that XML 1.1 documents *must* include an XML declaration - def XMLDecl.default - rv = XMLDecl.new( "1.0" ) - rv.nowrite - rv - end - - def nowrite - @writethis = false - end - - def dowrite - @writethis = true - end - - def inspect - "#{START} ... #{STOP}" - end - - private - def content(enc) - context = nil - context = parent.context if parent - if context and context[:prologue_quote] == :quote - quote = "\"" - else - quote = "'" - end - - rv = "version=#{quote}#{@version}#{quote}" - if @writeencoding or enc !~ /\Autf-8\z/i - rv << " encoding=#{quote}#{enc}#{quote}" - end - if @standalone - rv << " standalone=#{quote}#{@standalone}#{quote}" - end - rv - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/xmltokens.rb b/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/xmltokens.rb deleted file mode 100644 index 392b47b1..00000000 --- a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/xmltokens.rb +++ /dev/null @@ -1,85 +0,0 @@ -# frozen_string_literal: false -module REXML - # Defines a number of tokens used for parsing XML. Not for general - # consumption. - module XMLTokens - # From http://www.w3.org/TR/REC-xml/#sec-common-syn - # - # [4] NameStartChar ::= - # ":" | - # [A-Z] | - # "_" | - # [a-z] | - # [#xC0-#xD6] | - # [#xD8-#xF6] | - # [#xF8-#x2FF] | - # [#x370-#x37D] | - # [#x37F-#x1FFF] | - # [#x200C-#x200D] | - # [#x2070-#x218F] | - # [#x2C00-#x2FEF] | - # [#x3001-#xD7FF] | - # [#xF900-#xFDCF] | - # [#xFDF0-#xFFFD] | - # [#x10000-#xEFFFF] - name_start_chars = [ - ":", - "A-Z", - "_", - "a-z", - "\\u00C0-\\u00D6", - "\\u00D8-\\u00F6", - "\\u00F8-\\u02FF", - "\\u0370-\\u037D", - "\\u037F-\\u1FFF", - "\\u200C-\\u200D", - "\\u2070-\\u218F", - "\\u2C00-\\u2FEF", - "\\u3001-\\uD7FF", - "\\uF900-\\uFDCF", - "\\uFDF0-\\uFFFD", - "\\u{10000}-\\u{EFFFF}", - ] - # From http://www.w3.org/TR/REC-xml/#sec-common-syn - # - # [4a] NameChar ::= - # NameStartChar | - # "-" | - # "." | - # [0-9] | - # #xB7 | - # [#x0300-#x036F] | - # [#x203F-#x2040] - name_chars = name_start_chars + [ - "\\-", - "\\.", - "0-9", - "\\u00B7", - "\\u0300-\\u036F", - "\\u203F-\\u2040", - ] - NAME_START_CHAR = "[#{name_start_chars.join('')}]" - NAME_CHAR = "[#{name_chars.join('')}]" - NAMECHAR = NAME_CHAR # deprecated. Use NAME_CHAR instead. - - # From http://www.w3.org/TR/xml-names11/#NT-NCName - # - # [6] NCNameStartChar ::= NameStartChar - ':' - ncname_start_chars = name_start_chars - [":"] - # From http://www.w3.org/TR/xml-names11/#NT-NCName - # - # [5] NCNameChar ::= NameChar - ':' - ncname_chars = name_chars - [":"] - NCNAME_STR = "[#{ncname_start_chars.join('')}][#{ncname_chars.join('')}]*" - NAME_STR = "(?:#{NCNAME_STR}:)?#{NCNAME_STR}" - - NAME = "(#{NAME_START_CHAR}#{NAME_CHAR}*)" - NMTOKEN = "(?:#{NAME_CHAR})+" - NMTOKENS = "#{NMTOKEN}(\\s+#{NMTOKEN})*" - REFERENCE = "(?:&#{NAME};|&#\\d+;|&#x[0-9a-fA-F]+;)" - - #REFERENCE = "(?:#{ENTITYREF}|#{CHARREF})" - #ENTITYREF = "&#{NAME};" - #CHARREF = "&#\\d+;|&#x[0-9a-fA-F]+;" - end -end diff --git a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/xpath.rb b/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/xpath.rb deleted file mode 100644 index a0921bd8..00000000 --- a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/xpath.rb +++ /dev/null @@ -1,81 +0,0 @@ -# frozen_string_literal: false -require_relative 'functions' -require_relative 'xpath_parser' - -module REXML - # Wrapper class. Use this class to access the XPath functions. - class XPath - include Functions - # A base Hash object, supposing to be used when initializing a - # default empty namespaces set, but is currently unused. - # TODO: either set the namespaces=EMPTY_HASH, or deprecate this. - EMPTY_HASH = {} - - # Finds and returns the first node that matches the supplied xpath. - # element:: - # The context element - # path:: - # The xpath to search for. If not supplied or nil, returns the first - # node matching '*'. - # namespaces:: - # If supplied, a Hash which defines a namespace mapping. - # variables:: - # If supplied, a Hash which maps $variables in the query - # to values. This can be used to avoid XPath injection attacks - # or to automatically handle escaping string values. - # - # XPath.first( node ) - # XPath.first( doc, "//b"} ) - # XPath.first( node, "a/x:b", { "x"=>"http://doofus" } ) - # XPath.first( node, '/book/publisher/text()=$publisher', {}, {"publisher"=>"O'Reilly"}) - def XPath::first(element, path=nil, namespaces=nil, variables={}, options={}) - raise "The namespaces argument, if supplied, must be a hash object." unless namespaces.nil? or namespaces.kind_of?(Hash) - raise "The variables argument, if supplied, must be a hash object." unless variables.kind_of?(Hash) - parser = XPathParser.new(**options) - parser.namespaces = namespaces - parser.variables = variables - path = "*" unless path - element = [element] unless element.kind_of? Array - parser.parse(path, element).flatten[0] - end - - # Iterates over nodes that match the given path, calling the supplied - # block with the match. - # element:: - # The context element - # path:: - # The xpath to search for. If not supplied or nil, defaults to '*' - # namespaces:: - # If supplied, a Hash which defines a namespace mapping - # variables:: - # If supplied, a Hash which maps $variables in the query - # to values. This can be used to avoid XPath injection attacks - # or to automatically handle escaping string values. - # - # XPath.each( node ) { |el| ... } - # XPath.each( node, '/*[@attr='v']' ) { |el| ... } - # XPath.each( node, 'ancestor::x' ) { |el| ... } - # XPath.each( node, '/book/publisher/text()=$publisher', {}, {"publisher"=>"O'Reilly"}) \ - # {|el| ... } - def XPath::each(element, path=nil, namespaces=nil, variables={}, options={}, &block) - raise "The namespaces argument, if supplied, must be a hash object." unless namespaces.nil? or namespaces.kind_of?(Hash) - raise "The variables argument, if supplied, must be a hash object." unless variables.kind_of?(Hash) - parser = XPathParser.new(**options) - parser.namespaces = namespaces - parser.variables = variables - path = "*" unless path - element = [element] unless element.kind_of? Array - parser.parse(path, element).each( &block ) - end - - # Returns an array of nodes matching a given XPath. - def XPath::match(element, path=nil, namespaces=nil, variables={}, options={}) - parser = XPathParser.new(**options) - parser.namespaces = namespaces - parser.variables = variables - path = "*" unless path - element = [element] unless element.kind_of? Array - parser.parse(path,element) - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/xpath_parser.rb b/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/xpath_parser.rb deleted file mode 100644 index d8b88e7a..00000000 --- a/bundle/ruby/3.2.0/gems/rexml-3.2.6/lib/rexml/xpath_parser.rb +++ /dev/null @@ -1,974 +0,0 @@ -# frozen_string_literal: false - -require "pp" - -require_relative 'namespace' -require_relative 'xmltokens' -require_relative 'attribute' -require_relative 'parsers/xpathparser' - -module REXML - module DClonable - refine Object do - # provides a unified +clone+ operation, for REXML::XPathParser - # to use across multiple Object types - def dclone - clone - end - end - refine Symbol do - # provides a unified +clone+ operation, for REXML::XPathParser - # to use across multiple Object types - def dclone ; self ; end - end - refine Integer do - # provides a unified +clone+ operation, for REXML::XPathParser - # to use across multiple Object types - def dclone ; self ; end - end - refine Float do - # provides a unified +clone+ operation, for REXML::XPathParser - # to use across multiple Object types - def dclone ; self ; end - end - refine Array do - # provides a unified +clone+ operation, for REXML::XPathParser - # to use across multiple Object+ types - def dclone - klone = self.clone - klone.clear - self.each{|v| klone << v.dclone} - klone - end - end - end -end - -using REXML::DClonable - -module REXML - # You don't want to use this class. Really. Use XPath, which is a wrapper - # for this class. Believe me. You don't want to poke around in here. - # There is strange, dark magic at work in this code. Beware. Go back! Go - # back while you still can! - class XPathParser - include XMLTokens - LITERAL = /^'([^']*)'|^"([^"]*)"/u - - DEBUG = (ENV["REXML_XPATH_PARSER_DEBUG"] == "true") - - def initialize(strict: false) - @debug = DEBUG - @parser = REXML::Parsers::XPathParser.new - @namespaces = nil - @variables = {} - @nest = 0 - @strict = strict - end - - def namespaces=( namespaces={} ) - Functions::namespace_context = namespaces - @namespaces = namespaces - end - - def variables=( vars={} ) - Functions::variables = vars - @variables = vars - end - - def parse path, nodeset - path_stack = @parser.parse( path ) - match( path_stack, nodeset ) - end - - def get_first path, nodeset - path_stack = @parser.parse( path ) - first( path_stack, nodeset ) - end - - def predicate path, nodeset - path_stack = @parser.parse( path ) - match( path_stack, nodeset ) - end - - def []=( variable_name, value ) - @variables[ variable_name ] = value - end - - - # Performs a depth-first (document order) XPath search, and returns the - # first match. This is the fastest, lightest way to return a single result. - # - # FIXME: This method is incomplete! - def first( path_stack, node ) - return nil if path.size == 0 - - case path[0] - when :document - # do nothing - return first( path[1..-1], node ) - when :child - for c in node.children - r = first( path[1..-1], c ) - return r if r - end - when :qname - name = path[2] - if node.name == name - return node if path.size == 3 - return first( path[3..-1], node ) - else - return nil - end - when :descendant_or_self - r = first( path[1..-1], node ) - return r if r - for c in node.children - r = first( path, c ) - return r if r - end - when :node - return first( path[1..-1], node ) - when :any - return first( path[1..-1], node ) - end - return nil - end - - - def match(path_stack, nodeset) - nodeset = nodeset.collect.with_index do |node, i| - position = i + 1 - XPathNode.new(node, position: position) - end - result = expr(path_stack, nodeset) - case result - when Array # nodeset - unnode(result) - else - [result] - end - end - - private - def strict? - @strict - end - - # Returns a String namespace for a node, given a prefix - # The rules are: - # - # 1. Use the supplied namespace mapping first. - # 2. If no mapping was supplied, use the context node to look up the namespace - def get_namespace( node, prefix ) - if @namespaces - return @namespaces[prefix] || '' - else - return node.namespace( prefix ) if node.node_type == :element - return '' - end - end - - - # Expr takes a stack of path elements and a set of nodes (either a Parent - # or an Array and returns an Array of matching nodes - def expr( path_stack, nodeset, context=nil ) - enter(:expr, path_stack, nodeset) if @debug - return nodeset if path_stack.length == 0 || nodeset.length == 0 - while path_stack.length > 0 - trace(:while, path_stack, nodeset) if @debug - if nodeset.length == 0 - path_stack.clear - return [] - end - op = path_stack.shift - case op - when :document - first_raw_node = nodeset.first.raw_node - nodeset = [XPathNode.new(first_raw_node.root_node, position: 1)] - when :self - nodeset = step(path_stack) do - [nodeset] - end - when :child - nodeset = step(path_stack) do - child(nodeset) - end - when :literal - trace(:literal, path_stack, nodeset) if @debug - return path_stack.shift - when :attribute - nodeset = step(path_stack, any_type: :attribute) do - nodesets = [] - nodeset.each do |node| - raw_node = node.raw_node - next unless raw_node.node_type == :element - attributes = raw_node.attributes - next if attributes.empty? - nodesets << attributes.each_attribute.collect.with_index do |attribute, i| - XPathNode.new(attribute, position: i + 1) - end - end - nodesets - end - when :namespace - pre_defined_namespaces = { - "xml" => "http://www.w3.org/XML/1998/namespace", - } - nodeset = step(path_stack, any_type: :namespace) do - nodesets = [] - nodeset.each do |node| - raw_node = node.raw_node - case raw_node.node_type - when :element - if @namespaces - nodesets << pre_defined_namespaces.merge(@namespaces) - else - nodesets << pre_defined_namespaces.merge(raw_node.namespaces) - end - when :attribute - if @namespaces - nodesets << pre_defined_namespaces.merge(@namespaces) - else - nodesets << pre_defined_namespaces.merge(raw_node.element.namespaces) - end - end - end - nodesets - end - when :parent - nodeset = step(path_stack) do - nodesets = [] - nodeset.each do |node| - raw_node = node.raw_node - if raw_node.node_type == :attribute - parent = raw_node.element - else - parent = raw_node.parent - end - nodesets << [XPathNode.new(parent, position: 1)] if parent - end - nodesets - end - when :ancestor - nodeset = step(path_stack) do - nodesets = [] - # new_nodes = {} - nodeset.each do |node| - raw_node = node.raw_node - new_nodeset = [] - while raw_node.parent - raw_node = raw_node.parent - # next if new_nodes.key?(node) - new_nodeset << XPathNode.new(raw_node, - position: new_nodeset.size + 1) - # new_nodes[node] = true - end - nodesets << new_nodeset unless new_nodeset.empty? - end - nodesets - end - when :ancestor_or_self - nodeset = step(path_stack) do - nodesets = [] - # new_nodes = {} - nodeset.each do |node| - raw_node = node.raw_node - next unless raw_node.node_type == :element - new_nodeset = [XPathNode.new(raw_node, position: 1)] - # new_nodes[node] = true - while raw_node.parent - raw_node = raw_node.parent - # next if new_nodes.key?(node) - new_nodeset << XPathNode.new(raw_node, - position: new_nodeset.size + 1) - # new_nodes[node] = true - end - nodesets << new_nodeset unless new_nodeset.empty? - end - nodesets - end - when :descendant_or_self - nodeset = step(path_stack) do - descendant(nodeset, true) - end - when :descendant - nodeset = step(path_stack) do - descendant(nodeset, false) - end - when :following_sibling - nodeset = step(path_stack) do - nodesets = [] - nodeset.each do |node| - raw_node = node.raw_node - next unless raw_node.respond_to?(:parent) - next if raw_node.parent.nil? - all_siblings = raw_node.parent.children - current_index = all_siblings.index(raw_node) - following_siblings = all_siblings[(current_index + 1)..-1] - next if following_siblings.empty? - nodesets << following_siblings.collect.with_index do |sibling, i| - XPathNode.new(sibling, position: i + 1) - end - end - nodesets - end - when :preceding_sibling - nodeset = step(path_stack, order: :reverse) do - nodesets = [] - nodeset.each do |node| - raw_node = node.raw_node - next unless raw_node.respond_to?(:parent) - next if raw_node.parent.nil? - all_siblings = raw_node.parent.children - current_index = all_siblings.index(raw_node) - preceding_siblings = all_siblings[0, current_index].reverse - next if preceding_siblings.empty? - nodesets << preceding_siblings.collect.with_index do |sibling, i| - XPathNode.new(sibling, position: i + 1) - end - end - nodesets - end - when :preceding - nodeset = step(path_stack, order: :reverse) do - unnode(nodeset) do |node| - preceding(node) - end - end - when :following - nodeset = step(path_stack) do - unnode(nodeset) do |node| - following(node) - end - end - when :variable - var_name = path_stack.shift - return [@variables[var_name]] - - when :eq, :neq, :lt, :lteq, :gt, :gteq - left = expr( path_stack.shift, nodeset.dup, context ) - right = expr( path_stack.shift, nodeset.dup, context ) - res = equality_relational_compare( left, op, right ) - trace(op, left, right, res) if @debug - return res - - when :or - left = expr(path_stack.shift, nodeset.dup, context) - return true if Functions.boolean(left) - right = expr(path_stack.shift, nodeset.dup, context) - return Functions.boolean(right) - - when :and - left = expr(path_stack.shift, nodeset.dup, context) - return false unless Functions.boolean(left) - right = expr(path_stack.shift, nodeset.dup, context) - return Functions.boolean(right) - - when :div, :mod, :mult, :plus, :minus - left = expr(path_stack.shift, nodeset, context) - right = expr(path_stack.shift, nodeset, context) - left = unnode(left) if left.is_a?(Array) - right = unnode(right) if right.is_a?(Array) - left = Functions::number(left) - right = Functions::number(right) - case op - when :div - return left / right - when :mod - return left % right - when :mult - return left * right - when :plus - return left + right - when :minus - return left - right - else - raise "[BUG] Unexpected operator: <#{op.inspect}>" - end - when :union - left = expr( path_stack.shift, nodeset, context ) - right = expr( path_stack.shift, nodeset, context ) - left = unnode(left) if left.is_a?(Array) - right = unnode(right) if right.is_a?(Array) - return (left | right) - when :neg - res = expr( path_stack, nodeset, context ) - res = unnode(res) if res.is_a?(Array) - return -Functions.number(res) - when :not - when :function - func_name = path_stack.shift.tr('-','_') - arguments = path_stack.shift - - if nodeset.size != 1 - message = "[BUG] Node set size must be 1 for function call: " - message += "<#{func_name}>: <#{nodeset.inspect}>: " - message += "<#{arguments.inspect}>" - raise message - end - - node = nodeset.first - if context - target_context = context - else - target_context = {:size => nodeset.size} - if node.is_a?(XPathNode) - target_context[:node] = node.raw_node - target_context[:index] = node.position - else - target_context[:node] = node - target_context[:index] = 1 - end - end - args = arguments.dclone.collect do |arg| - result = expr(arg, nodeset, target_context) - result = unnode(result) if result.is_a?(Array) - result - end - Functions.context = target_context - return Functions.send(func_name, *args) - - else - raise "[BUG] Unexpected path: <#{op.inspect}>: <#{path_stack.inspect}>" - end - end # while - return nodeset - ensure - leave(:expr, path_stack, nodeset) if @debug - end - - def step(path_stack, any_type: :element, order: :forward) - nodesets = yield - begin - enter(:step, path_stack, nodesets) if @debug - nodesets = node_test(path_stack, nodesets, any_type: any_type) - while path_stack[0] == :predicate - path_stack.shift # :predicate - predicate_expression = path_stack.shift.dclone - nodesets = evaluate_predicate(predicate_expression, nodesets) - end - if nodesets.size == 1 - ordered_nodeset = nodesets[0] - else - raw_nodes = [] - nodesets.each do |nodeset| - nodeset.each do |node| - if node.respond_to?(:raw_node) - raw_nodes << node.raw_node - else - raw_nodes << node - end - end - end - ordered_nodeset = sort(raw_nodes, order) - end - new_nodeset = [] - ordered_nodeset.each do |node| - # TODO: Remove duplicated - new_nodeset << XPathNode.new(node, position: new_nodeset.size + 1) - end - new_nodeset - ensure - leave(:step, path_stack, new_nodeset) if @debug - end - end - - def node_test(path_stack, nodesets, any_type: :element) - enter(:node_test, path_stack, nodesets) if @debug - operator = path_stack.shift - case operator - when :qname - prefix = path_stack.shift - name = path_stack.shift - new_nodesets = nodesets.collect do |nodeset| - filter_nodeset(nodeset) do |node| - raw_node = node.raw_node - case raw_node.node_type - when :element - if prefix.nil? - raw_node.name == name - elsif prefix.empty? - if strict? - raw_node.name == name and raw_node.namespace == "" - else - # FIXME: This DOUBLES the time XPath searches take - ns = get_namespace(raw_node, prefix) - raw_node.name == name and raw_node.namespace == ns - end - else - # FIXME: This DOUBLES the time XPath searches take - ns = get_namespace(raw_node, prefix) - raw_node.name == name and raw_node.namespace == ns - end - when :attribute - if prefix.nil? - raw_node.name == name - elsif prefix.empty? - raw_node.name == name and raw_node.namespace == "" - else - # FIXME: This DOUBLES the time XPath searches take - ns = get_namespace(raw_node.element, prefix) - raw_node.name == name and raw_node.namespace == ns - end - else - false - end - end - end - when :namespace - prefix = path_stack.shift - new_nodesets = nodesets.collect do |nodeset| - filter_nodeset(nodeset) do |node| - raw_node = node.raw_node - case raw_node.node_type - when :element - namespaces = @namespaces || raw_node.namespaces - raw_node.namespace == namespaces[prefix] - when :attribute - namespaces = @namespaces || raw_node.element.namespaces - raw_node.namespace == namespaces[prefix] - else - false - end - end - end - when :any - new_nodesets = nodesets.collect do |nodeset| - filter_nodeset(nodeset) do |node| - raw_node = node.raw_node - raw_node.node_type == any_type - end - end - when :comment - new_nodesets = nodesets.collect do |nodeset| - filter_nodeset(nodeset) do |node| - raw_node = node.raw_node - raw_node.node_type == :comment - end - end - when :text - new_nodesets = nodesets.collect do |nodeset| - filter_nodeset(nodeset) do |node| - raw_node = node.raw_node - raw_node.node_type == :text - end - end - when :processing_instruction - target = path_stack.shift - new_nodesets = nodesets.collect do |nodeset| - filter_nodeset(nodeset) do |node| - raw_node = node.raw_node - (raw_node.node_type == :processing_instruction) and - (target.empty? or (raw_node.target == target)) - end - end - when :node - new_nodesets = nodesets.collect do |nodeset| - filter_nodeset(nodeset) do |node| - true - end - end - else - message = "[BUG] Unexpected node test: " + - "<#{operator.inspect}>: <#{path_stack.inspect}>" - raise message - end - new_nodesets - ensure - leave(:node_test, path_stack, new_nodesets) if @debug - end - - def filter_nodeset(nodeset) - new_nodeset = [] - nodeset.each do |node| - next unless yield(node) - new_nodeset << XPathNode.new(node, position: new_nodeset.size + 1) - end - new_nodeset - end - - def evaluate_predicate(expression, nodesets) - enter(:predicate, expression, nodesets) if @debug - new_nodesets = nodesets.collect do |nodeset| - new_nodeset = [] - subcontext = { :size => nodeset.size } - nodeset.each_with_index do |node, index| - if node.is_a?(XPathNode) - subcontext[:node] = node.raw_node - subcontext[:index] = node.position - else - subcontext[:node] = node - subcontext[:index] = index + 1 - end - result = expr(expression.dclone, [node], subcontext) - trace(:predicate_evaluate, expression, node, subcontext, result) if @debug - result = result[0] if result.kind_of? Array and result.length == 1 - if result.kind_of? Numeric - if result == node.position - new_nodeset << XPathNode.new(node, position: new_nodeset.size + 1) - end - elsif result.instance_of? Array - if result.size > 0 and result.inject(false) {|k,s| s or k} - if result.size > 0 - new_nodeset << XPathNode.new(node, position: new_nodeset.size + 1) - end - end - else - if result - new_nodeset << XPathNode.new(node, position: new_nodeset.size + 1) - end - end - end - new_nodeset - end - new_nodesets - ensure - leave(:predicate, new_nodesets) if @debug - end - - def trace(*args) - indent = " " * @nest - PP.pp(args, "").each_line do |line| - puts("#{indent}#{line}") - end - end - - def enter(tag, *args) - trace(:enter, tag, *args) - @nest += 1 - end - - def leave(tag, *args) - @nest -= 1 - trace(:leave, tag, *args) - end - - # Reorders an array of nodes so that they are in document order - # It tries to do this efficiently. - # - # FIXME: I need to get rid of this, but the issue is that most of the XPath - # interpreter functions as a filter, which means that we lose context going - # in and out of function calls. If I knew what the index of the nodes was, - # I wouldn't have to do this. Maybe add a document IDX for each node? - # Problems with mutable documents. Or, rewrite everything. - def sort(array_of_nodes, order) - new_arry = [] - array_of_nodes.each { |node| - node_idx = [] - np = node.node_type == :attribute ? node.element : node - while np.parent and np.parent.node_type == :element - node_idx << np.parent.index( np ) - np = np.parent - end - new_arry << [ node_idx.reverse, node ] - } - ordered = new_arry.sort_by do |index, node| - if order == :forward - index - else - -index - end - end - ordered.collect do |_index, node| - node - end - end - - def descendant(nodeset, include_self) - nodesets = [] - nodeset.each do |node| - new_nodeset = [] - new_nodes = {} - descendant_recursive(node.raw_node, new_nodeset, new_nodes, include_self) - nodesets << new_nodeset unless new_nodeset.empty? - end - nodesets - end - - def descendant_recursive(raw_node, new_nodeset, new_nodes, include_self) - if include_self - return if new_nodes.key?(raw_node) - new_nodeset << XPathNode.new(raw_node, position: new_nodeset.size + 1) - new_nodes[raw_node] = true - end - - node_type = raw_node.node_type - if node_type == :element or node_type == :document - raw_node.children.each do |child| - descendant_recursive(child, new_nodeset, new_nodes, true) - end - end - end - - # Builds a nodeset of all of the preceding nodes of the supplied node, - # in reverse document order - # preceding:: includes every element in the document that precedes this node, - # except for ancestors - def preceding(node) - ancestors = [] - parent = node.parent - while parent - ancestors << parent - parent = parent.parent - end - - precedings = [] - preceding_node = preceding_node_of(node) - while preceding_node - if ancestors.include?(preceding_node) - ancestors.delete(preceding_node) - else - precedings << XPathNode.new(preceding_node, - position: precedings.size + 1) - end - preceding_node = preceding_node_of(preceding_node) - end - precedings - end - - def preceding_node_of( node ) - psn = node.previous_sibling_node - if psn.nil? - if node.parent.nil? or node.parent.class == Document - return nil - end - return node.parent - #psn = preceding_node_of( node.parent ) - end - while psn and psn.kind_of? Element and psn.children.size > 0 - psn = psn.children[-1] - end - psn - end - - def following(node) - followings = [] - following_node = next_sibling_node(node) - while following_node - followings << XPathNode.new(following_node, - position: followings.size + 1) - following_node = following_node_of(following_node) - end - followings - end - - def following_node_of( node ) - if node.kind_of? Element and node.children.size > 0 - return node.children[0] - end - return next_sibling_node(node) - end - - def next_sibling_node(node) - psn = node.next_sibling_node - while psn.nil? - if node.parent.nil? or node.parent.class == Document - return nil - end - node = node.parent - psn = node.next_sibling_node - end - return psn - end - - def child(nodeset) - nodesets = [] - nodeset.each do |node| - raw_node = node.raw_node - node_type = raw_node.node_type - # trace(:child, node_type, node) - case node_type - when :element - nodesets << raw_node.children.collect.with_index do |child_node, i| - XPathNode.new(child_node, position: i + 1) - end - when :document - new_nodeset = [] - raw_node.children.each do |child| - case child - when XMLDecl, Text - # Ignore - else - new_nodeset << XPathNode.new(child, position: new_nodeset.size + 1) - end - end - nodesets << new_nodeset unless new_nodeset.empty? - end - end - nodesets - end - - def norm b - case b - when true, false - return b - when 'true', 'false' - return Functions::boolean( b ) - when /^\d+(\.\d+)?$/, Numeric - return Functions::number( b ) - else - return Functions::string( b ) - end - end - - def equality_relational_compare(set1, op, set2) - set1 = unnode(set1) if set1.is_a?(Array) - set2 = unnode(set2) if set2.is_a?(Array) - - if set1.kind_of? Array and set2.kind_of? Array - # If both objects to be compared are node-sets, then the - # comparison will be true if and only if there is a node in the - # first node-set and a node in the second node-set such that the - # result of performing the comparison on the string-values of - # the two nodes is true. - set1.product(set2).any? do |node1, node2| - node_string1 = Functions.string(node1) - node_string2 = Functions.string(node2) - compare(node_string1, op, node_string2) - end - elsif set1.kind_of? Array or set2.kind_of? Array - # If one is nodeset and other is number, compare number to each item - # in nodeset s.t. number op number(string(item)) - # If one is nodeset and other is string, compare string to each item - # in nodeset s.t. string op string(item) - # If one is nodeset and other is boolean, compare boolean to each item - # in nodeset s.t. boolean op boolean(item) - if set1.kind_of? Array - a = set1 - b = set2 - else - a = set2 - b = set1 - end - - case b - when true, false - each_unnode(a).any? do |unnoded| - compare(Functions.boolean(unnoded), op, b) - end - when Numeric - each_unnode(a).any? do |unnoded| - compare(Functions.number(unnoded), op, b) - end - when /\A\d+(\.\d+)?\z/ - b = Functions.number(b) - each_unnode(a).any? do |unnoded| - compare(Functions.number(unnoded), op, b) - end - else - b = Functions::string(b) - each_unnode(a).any? do |unnoded| - compare(Functions::string(unnoded), op, b) - end - end - else - # If neither is nodeset, - # If op is = or != - # If either boolean, convert to boolean - # If either number, convert to number - # Else, convert to string - # Else - # Convert both to numbers and compare - compare(set1, op, set2) - end - end - - def value_type(value) - case value - when true, false - :boolean - when Numeric - :number - when String - :string - else - raise "[BUG] Unexpected value type: <#{value.inspect}>" - end - end - - def normalize_compare_values(a, operator, b) - a_type = value_type(a) - b_type = value_type(b) - case operator - when :eq, :neq - if a_type == :boolean or b_type == :boolean - a = Functions.boolean(a) unless a_type == :boolean - b = Functions.boolean(b) unless b_type == :boolean - elsif a_type == :number or b_type == :number - a = Functions.number(a) unless a_type == :number - b = Functions.number(b) unless b_type == :number - else - a = Functions.string(a) unless a_type == :string - b = Functions.string(b) unless b_type == :string - end - when :lt, :lteq, :gt, :gteq - a = Functions.number(a) unless a_type == :number - b = Functions.number(b) unless b_type == :number - else - message = "[BUG] Unexpected compare operator: " + - "<#{operator.inspect}>: <#{a.inspect}>: <#{b.inspect}>" - raise message - end - [a, b] - end - - def compare(a, operator, b) - a, b = normalize_compare_values(a, operator, b) - case operator - when :eq - a == b - when :neq - a != b - when :lt - a < b - when :lteq - a <= b - when :gt - a > b - when :gteq - a >= b - else - message = "[BUG] Unexpected compare operator: " + - "<#{operator.inspect}>: <#{a.inspect}>: <#{b.inspect}>" - raise message - end - end - - def each_unnode(nodeset) - return to_enum(__method__, nodeset) unless block_given? - nodeset.each do |node| - if node.is_a?(XPathNode) - unnoded = node.raw_node - else - unnoded = node - end - yield(unnoded) - end - end - - def unnode(nodeset) - each_unnode(nodeset).collect do |unnoded| - unnoded = yield(unnoded) if block_given? - unnoded - end - end - end - - # @private - class XPathNode - attr_reader :raw_node, :context - def initialize(node, context=nil) - if node.is_a?(XPathNode) - @raw_node = node.raw_node - else - @raw_node = node - end - @context = context || {} - end - - def position - @context[:position] - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/LICENSE.txt b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/LICENSE.txt deleted file mode 100644 index aee79d6c..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/LICENSE.txt +++ /dev/null @@ -1,20 +0,0 @@ -Copyright (c) 2012-24 Bozhidar Batsov - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/README.md b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/README.md deleted file mode 100644 index 73057340..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/README.md +++ /dev/null @@ -1,252 +0,0 @@ -<p align="center"> - <img src="https://raw.githubusercontent.com/rubocop/rubocop/master/logo/rubo-logo-horizontal-white.png" alt="RuboCop Logo"/> -</p> - ----------- -[![Ruby Style Guide](https://img.shields.io/badge/code_style-rubocop-brightgreen.svg)](https://github.com/rubocop/rubocop) -[![Gem Version](https://badge.fury.io/rb/rubocop.svg)](https://badge.fury.io/rb/rubocop) -[![CircleCI Status](https://circleci.com/gh/rubocop/rubocop/tree/master.svg?style=svg)](https://circleci.com/gh/rubocop/rubocop/tree/master) -[![Actions Status](https://github.com/rubocop/rubocop/workflows/CI/badge.svg?branch=master)](https://github.com/rubocop/rubocop/actions?query=workflow%3ACI) -[![Test Coverage](https://api.codeclimate.com/v1/badges/d2d67f728e88ea84ac69/test_coverage)](https://codeclimate.com/github/rubocop/rubocop/test_coverage) -[![Maintainability](https://api.codeclimate.com/v1/badges/d2d67f728e88ea84ac69/maintainability)](https://codeclimate.com/github/rubocop/rubocop/maintainability) -[![Discord](https://img.shields.io/badge/chat-on%20discord-7289da.svg?sanitize=true)](https://discord.gg/wJjWvGRDmm) - -> Role models are important. <br/> -> -- Officer Alex J. Murphy / RoboCop - -**RuboCop** is a Ruby static code analyzer (a.k.a. `linter`) and code formatter. Out of the box it -will enforce many of the guidelines outlined in the community [Ruby Style -Guide](https://rubystyle.guide). Apart from reporting the problems discovered in your code, -RuboCop can also automatically fix many of them for you. - -RuboCop is extremely flexible and most aspects of its behavior can be tweaked via various -[configuration options](https://github.com/rubocop/rubocop/blob/master/config/default.yml). - ----------- -[![Patreon](https://img.shields.io/badge/patreon-donate-orange.svg)](https://www.patreon.com/bbatsov) -[![OpenCollective](https://opencollective.com/rubocop/backers/badge.svg)](#open-collective-backers) -[![OpenCollective](https://opencollective.com/rubocop/sponsors/badge.svg)](#open-collective-sponsors) -[![Tidelift](https://tidelift.com/badges/package/rubygems/rubocop)](https://tidelift.com/subscription/pkg/rubygems-rubocop?utm_source=rubygems-rubocop&utm_medium=referral&utm_campaign=readme) - -Working on RuboCop is often fun, but it also requires a great deal of time and energy. - -**Please consider [financially supporting its ongoing development](#funding).** - -## Installation - -**RuboCop**'s installation is pretty standard: - -```sh -$ gem install rubocop -``` - -If you'd rather install RuboCop using `bundler`, add a line for it in your `Gemfile` (but set the `require` option to `false`, as it is a standalone tool): - -```rb -gem 'rubocop', require: false -``` - -RuboCop is stable between minor versions, both in terms of API and cop configuration. -We aim to ease the maintenance of RuboCop extensions and the upgrades between RuboCop -releases. All big changes are reserved for major releases. -To prevent an unwanted RuboCop update you might want to use a conservative version lock -in your `Gemfile`: - -```rb -gem 'rubocop', '~> 1.61', require: false -``` - -See [our versioning policy](https://docs.rubocop.org/rubocop/versioning.html) for further details. - -## Quickstart - -Just type `rubocop` in a Ruby project's folder and watch the magic happen. - -``` -$ cd my/cool/ruby/project -$ rubocop -``` - -You can also use this magic in your favorite editor with RuboCop's [built-in LSP server](https://docs.rubocop.org/rubocop/usage/lsp.html). - -## Documentation - -You can read a lot more about RuboCop in its [official docs](https://docs.rubocop.org). - -## Compatibility - -RuboCop officially supports the following runtime Ruby implementations: - -* MRI 2.7+ -* JRuby 9.4+ - -Targets Ruby 2.0+ code analysis. - -See the [compatibility documentation](https://docs.rubocop.org/rubocop/compatibility.html) for further details. - -## Readme Badge - -If you use RuboCop in your project, you can include one of these badges in your readme to let people know that your code is written following the community Ruby Style Guide. - -[![Ruby Style Guide](https://img.shields.io/badge/code_style-rubocop-brightgreen.svg)](https://github.com/rubocop/rubocop) - -[![Ruby Style Guide](https://img.shields.io/badge/code_style-community-brightgreen.svg)](https://rubystyle.guide) - - -Here are the Markdown snippets for the two badges: - -``` markdown -[![Ruby Style Guide](https://img.shields.io/badge/code_style-rubocop-brightgreen.svg)](https://github.com/rubocop/rubocop) - -[![Ruby Style Guide](https://img.shields.io/badge/code_style-community-brightgreen.svg)](https://rubystyle.guide) -``` - -## Team - -Here's a list of RuboCop's core developers: - -* [Bozhidar Batsov](https://github.com/bbatsov) (author & head maintainer) -* [Jonas Arvidsson](https://github.com/jonas054) -* [Yuji Nakayama](https://github.com/yujinakayama) (retired) -* [Evgeni Dzhelyov](https://github.com/edzhelyov) (retired) -* [Ted Johansson](https://github.com/drenmi) -* [Masataka Kuwabara](https://github.com/pocke) -* [Koichi Ito](https://github.com/koic) -* [Maxim Krizhanovski](https://github.com/darhazer) -* [Benjamin Quorning](https://github.com/bquorning) -* [Marc-André Lafortune](https://github.com/marcandre) -* [Daniel Vandersluis](https://github.com/dvandersluis) - -See the [team page](https://docs.rubocop.org/rubocop/about/team.html) for more details. - -## Logo - -RuboCop's logo was created by [Dimiter Petrov](https://www.chadomoto.com/). You can find the logo in various -formats [here](https://github.com/rubocop/rubocop/tree/master/logo). - -The logo is licensed under a -[Creative Commons Attribution-NonCommercial 4.0 International License](https://creativecommons.org/licenses/by-nc/4.0/deed.en_GB). - -## Contributors - -Here's a [list](https://github.com/rubocop/rubocop/graphs/contributors) of -all the people who have contributed to the development of RuboCop. - -I'm extremely grateful to each and every one of them! - -If you'd like to contribute to RuboCop, please take the time to go -through our short -[contribution guidelines](CONTRIBUTING.md). - -Converting more of the Ruby Style Guide into RuboCop cops is our top -priority right now. Writing a new cop is a great way to dive into RuboCop! - -Of course, bug reports and suggestions for improvements are always -welcome. GitHub pull requests are even better! :-) - -## Funding - -While RuboCop is free software and will always be, the project would benefit immensely from some funding. -Raising a monthly budget of a couple of thousand dollars would make it possible to pay people to work on -certain complex features, fund other development related stuff (e.g. hardware, conference trips) and so on. -Raising a monthly budget of over $5000 would open the possibility of someone working full-time on the project -which would speed up the pace of development significantly. - -We welcome both individual and corporate sponsors! We also offer a -wide array of funding channels to account for your preferences -(although -currently [Open Collective](https://opencollective.com/rubocop) is our -preferred funding platform). - -**If you're working in a company that's making significant use of RuboCop we'd appreciate it if you suggest to your company -to become a RuboCop sponsor.** - -You can support the development of RuboCop via -[GitHub Sponsors](https://github.com/sponsors/bbatsov), -[Patreon](https://www.patreon.com/bbatsov), -[PayPal](https://paypal.me/bbatsov), -[Open Collective](https://opencollective.com/rubocop) -and [Tidelift](https://tidelift.com/subscription/pkg/rubygems-rubocop?utm_source=rubygems-rubocop&utm_medium=referral&utm_campaign=readme) -. - -**Note:** If doing a sponsorship in the form of donation is problematic for your company from an accounting standpoint, we'd recommend -the use of Tidelift, where you can get a support-like subscription instead. - -### Open Collective Backers - -Support us with a monthly donation and help us continue our activities. [[Become a backer](https://opencollective.com/rubocop#backer)] - -<a href="https://opencollective.com/rubocop/backer/0/website" target="_blank"><img src="https://opencollective.com/rubocop/backer/0/avatar.svg"></a> -<a href="https://opencollective.com/rubocop/backer/1/website" target="_blank"><img src="https://opencollective.com/rubocop/backer/1/avatar.svg"></a> -<a href="https://opencollective.com/rubocop/backer/2/website" target="_blank"><img src="https://opencollective.com/rubocop/backer/2/avatar.svg"></a> -<a href="https://opencollective.com/rubocop/backer/3/website" target="_blank"><img src="https://opencollective.com/rubocop/backer/3/avatar.svg"></a> -<a href="https://opencollective.com/rubocop/backer/4/website" target="_blank"><img src="https://opencollective.com/rubocop/backer/4/avatar.svg"></a> -<a href="https://opencollective.com/rubocop/backer/5/website" target="_blank"><img src="https://opencollective.com/rubocop/backer/5/avatar.svg"></a> -<a href="https://opencollective.com/rubocop/backer/6/website" target="_blank"><img src="https://opencollective.com/rubocop/backer/6/avatar.svg"></a> -<a href="https://opencollective.com/rubocop/backer/7/website" target="_blank"><img src="https://opencollective.com/rubocop/backer/7/avatar.svg"></a> -<a href="https://opencollective.com/rubocop/backer/8/website" target="_blank"><img src="https://opencollective.com/rubocop/backer/8/avatar.svg"></a> -<a href="https://opencollective.com/rubocop/backer/9/website" target="_blank"><img src="https://opencollective.com/rubocop/backer/9/avatar.svg"></a> -<a href="https://opencollective.com/rubocop/backer/10/website" target="_blank"><img src="https://opencollective.com/rubocop/backer/10/avatar.svg"></a> -<a href="https://opencollective.com/rubocop/backer/11/website" target="_blank"><img src="https://opencollective.com/rubocop/backer/11/avatar.svg"></a> -<a href="https://opencollective.com/rubocop/backer/12/website" target="_blank"><img src="https://opencollective.com/rubocop/backer/12/avatar.svg"></a> -<a href="https://opencollective.com/rubocop/backer/13/website" target="_blank"><img src="https://opencollective.com/rubocop/backer/13/avatar.svg"></a> -<a href="https://opencollective.com/rubocop/backer/14/website" target="_blank"><img src="https://opencollective.com/rubocop/backer/14/avatar.svg"></a> -<a href="https://opencollective.com/rubocop/backer/15/website" target="_blank"><img src="https://opencollective.com/rubocop/backer/15/avatar.svg"></a> -<a href="https://opencollective.com/rubocop/backer/16/website" target="_blank"><img src="https://opencollective.com/rubocop/backer/16/avatar.svg"></a> -<a href="https://opencollective.com/rubocop/backer/17/website" target="_blank"><img src="https://opencollective.com/rubocop/backer/17/avatar.svg"></a> -<a href="https://opencollective.com/rubocop/backer/18/website" target="_blank"><img src="https://opencollective.com/rubocop/backer/18/avatar.svg"></a> -<a href="https://opencollective.com/rubocop/backer/19/website" target="_blank"><img src="https://opencollective.com/rubocop/backer/19/avatar.svg"></a> -<a href="https://opencollective.com/rubocop/backer/20/website" target="_blank"><img src="https://opencollective.com/rubocop/backer/20/avatar.svg"></a> -<a href="https://opencollective.com/rubocop/backer/21/website" target="_blank"><img src="https://opencollective.com/rubocop/backer/21/avatar.svg"></a> -<a href="https://opencollective.com/rubocop/backer/22/website" target="_blank"><img src="https://opencollective.com/rubocop/backer/22/avatar.svg"></a> -<a href="https://opencollective.com/rubocop/backer/23/website" target="_blank"><img src="https://opencollective.com/rubocop/backer/23/avatar.svg"></a> -<a href="https://opencollective.com/rubocop/backer/24/website" target="_blank"><img src="https://opencollective.com/rubocop/backer/24/avatar.svg"></a> -<a href="https://opencollective.com/rubocop/backer/25/website" target="_blank"><img src="https://opencollective.com/rubocop/backer/25/avatar.svg"></a> -<a href="https://opencollective.com/rubocop/backer/26/website" target="_blank"><img src="https://opencollective.com/rubocop/backer/26/avatar.svg"></a> -<a href="https://opencollective.com/rubocop/backer/27/website" target="_blank"><img src="https://opencollective.com/rubocop/backer/27/avatar.svg"></a> -<a href="https://opencollective.com/rubocop/backer/28/website" target="_blank"><img src="https://opencollective.com/rubocop/backer/28/avatar.svg"></a> -<a href="https://opencollective.com/rubocop/backer/29/website" target="_blank"><img src="https://opencollective.com/rubocop/backer/29/avatar.svg"></a> - -### Open Collective Sponsors - -Become a sponsor and get your logo on our README on GitHub with a link to your site. [[Become a sponsor](https://opencollective.com/rubocop#sponsor)] - -<a href="https://opencollective.com/rubocop/sponsor/0/website" target="_blank"><img src="https://opencollective.com/rubocop/sponsor/0/avatar.svg"></a> -<a href="https://opencollective.com/rubocop/sponsor/1/website" target="_blank"><img src="https://opencollective.com/rubocop/sponsor/1/avatar.svg"></a> -<a href="https://opencollective.com/rubocop/sponsor/2/website" target="_blank"><img src="https://opencollective.com/rubocop/sponsor/2/avatar.svg"></a> -<a href="https://opencollective.com/rubocop/sponsor/3/website" target="_blank"><img src="https://opencollective.com/rubocop/sponsor/3/avatar.svg"></a> -<a href="https://opencollective.com/rubocop/sponsor/4/website" target="_blank"><img src="https://opencollective.com/rubocop/sponsor/4/avatar.svg"></a> -<a href="https://opencollective.com/rubocop/sponsor/5/website" target="_blank"><img src="https://opencollective.com/rubocop/sponsor/5/avatar.svg"></a> -<a href="https://opencollective.com/rubocop/sponsor/6/website" target="_blank"><img src="https://opencollective.com/rubocop/sponsor/6/avatar.svg"></a> -<a href="https://opencollective.com/rubocop/sponsor/7/website" target="_blank"><img src="https://opencollective.com/rubocop/sponsor/7/avatar.svg"></a> -<a href="https://opencollective.com/rubocop/sponsor/8/website" target="_blank"><img src="https://opencollective.com/rubocop/sponsor/8/avatar.svg"></a> -<a href="https://opencollective.com/rubocop/sponsor/9/website" target="_blank"><img src="https://opencollective.com/rubocop/sponsor/9/avatar.svg"></a> -<a href="https://opencollective.com/rubocop/sponsor/10/website" target="_blank"><img src="https://opencollective.com/rubocop/sponsor/10/avatar.svg"></a> -<a href="https://opencollective.com/rubocop/sponsor/11/website" target="_blank"><img src="https://opencollective.com/rubocop/sponsor/11/avatar.svg"></a> -<a href="https://opencollective.com/rubocop/sponsor/12/website" target="_blank"><img src="https://opencollective.com/rubocop/sponsor/12/avatar.svg"></a> -<a href="https://opencollective.com/rubocop/sponsor/13/website" target="_blank"><img src="https://opencollective.com/rubocop/sponsor/13/avatar.svg"></a> -<a href="https://opencollective.com/rubocop/sponsor/14/website" target="_blank"><img src="https://opencollective.com/rubocop/sponsor/14/avatar.svg"></a> -<a href="https://opencollective.com/rubocop/sponsor/15/website" target="_blank"><img src="https://opencollective.com/rubocop/sponsor/15/avatar.svg"></a> -<a href="https://opencollective.com/rubocop/sponsor/16/website" target="_blank"><img src="https://opencollective.com/rubocop/sponsor/16/avatar.svg"></a> -<a href="https://opencollective.com/rubocop/sponsor/17/website" target="_blank"><img src="https://opencollective.com/rubocop/sponsor/17/avatar.svg"></a> -<a href="https://opencollective.com/rubocop/sponsor/18/website" target="_blank"><img src="https://opencollective.com/rubocop/sponsor/18/avatar.svg"></a> -<a href="https://opencollective.com/rubocop/sponsor/19/website" target="_blank"><img src="https://opencollective.com/rubocop/sponsor/19/avatar.svg"></a> -<a href="https://opencollective.com/rubocop/sponsor/20/website" target="_blank"><img src="https://opencollective.com/rubocop/sponsor/20/avatar.svg"></a> -<a href="https://opencollective.com/rubocop/sponsor/21/website" target="_blank"><img src="https://opencollective.com/rubocop/sponsor/21/avatar.svg"></a> -<a href="https://opencollective.com/rubocop/sponsor/22/website" target="_blank"><img src="https://opencollective.com/rubocop/sponsor/22/avatar.svg"></a> -<a href="https://opencollective.com/rubocop/sponsor/23/website" target="_blank"><img src="https://opencollective.com/rubocop/sponsor/23/avatar.svg"></a> -<a href="https://opencollective.com/rubocop/sponsor/24/website" target="_blank"><img src="https://opencollective.com/rubocop/sponsor/24/avatar.svg"></a> -<a href="https://opencollective.com/rubocop/sponsor/25/website" target="_blank"><img src="https://opencollective.com/rubocop/sponsor/25/avatar.svg"></a> -<a href="https://opencollective.com/rubocop/sponsor/26/website" target="_blank"><img src="https://opencollective.com/rubocop/sponsor/26/avatar.svg"></a> -<a href="https://opencollective.com/rubocop/sponsor/27/website" target="_blank"><img src="https://opencollective.com/rubocop/sponsor/27/avatar.svg"></a> -<a href="https://opencollective.com/rubocop/sponsor/28/website" target="_blank"><img src="https://opencollective.com/rubocop/sponsor/28/avatar.svg"></a> -<a href="https://opencollective.com/rubocop/sponsor/29/website" target="_blank"><img src="https://opencollective.com/rubocop/sponsor/29/avatar.svg"></a> - -## Changelog - -RuboCop's changelog is available [here](CHANGELOG.md). - -## Copyright - -Copyright (c) 2012-2024 Bozhidar Batsov. See [LICENSE.txt](LICENSE.txt) for -further details. diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/assets/logo.png b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/assets/logo.png deleted file mode 100644 index c091ad7f495a97a9631ed51d470df3a52a2aabb6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5390 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 RmWz)}B{?<O(tBos{|AIKpb!86 diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/assets/output.css.erb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/assets/output.css.erb deleted file mode 100644 index 71e12cc2..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/assets/output.css.erb +++ /dev/null @@ -1,159 +0,0 @@ -* { - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -body, html { - font-size: 62.5%; -} -body { - background-color: #ecedf0; - font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; - margin: 0; -} -code { - font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; - font-size: 85%; -} -#header { - background: #f9f9f9; - color: #333; - border-bottom: 3px solid #ccc; - height: 50px; - padding: 0; -} -#header .logo { - float: left; - margin: 5px 12px 7px 20px; - width: 38px; - height: 38px; -} -#header .title { - display: inline-block; - float: left; - height: 50px; - font-size: 2.4rem; - letter-spacing: normal; - line-height: 50px; - margin: 0; -} - -.information, #offenses { - width: 100%; - padding: 20px; - color: #333; -} -#offenses { - padding: 0 20px; -} - -.information .infobox { - border-left: 3px solid; - border-radius: 4px; - background-color: #fff; - -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); - padding: 15px; - border-color: #0088cc; - font-size: 1.4rem; -} -.information .infobox .info-title { - font-size: 1.8rem; - line-height: 2.2rem; - margin: 0 0 0.5em; -} -.information .offenses-list li { - line-height: 1.8rem -} -.information .offenses-list { - padding-left: 20px; - margin-bottom: 0; -} - -#offenses .offense-box { - border-radius: 4px; - margin-bottom: 20px; - background-color: #fff; - -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); -} -.fixed .box-title { - position: fixed; - top: 0; - z-index: 10; - width: 100%; -} -.box-title-placeholder { - display: none; -} -.fixed .box-title-placeholder { - display: block; -} -#offenses .offense-box .box-title h3, #offenses .offense-box .box-title-placeholder h3 { - color: #33353f; - background-color: #f6f6f6; - font-size: 2rem; - line-height: 2rem; - display: block; - padding: 15px; - border-radius: 5px; - margin: 0; -} -#offenses .offense-box .offense-reports { - padding: 0 15px; -} -#offenses .offense-box .offense-reports .report { - border-bottom: 1px dotted #ddd; - padding: 15px 0px; - position: relative; - font-size: 1.3rem; -} -#offenses .offense-box .offense-reports .report:last-child { - border-bottom: none; -} -#offenses .offense-box .offense-reports .report pre code { - display: block; - background: #000; - color: #fff; - padding: 10px 15px; - border-radius: 5px; - line-height: 1.6rem; -} -#offenses .offense-box .offense-reports .report .location { - font-weight: bold; -} -#offenses .offense-box .offense-reports .report .message code { - padding: 0.3em; - background-color: rgba(0,0,0,0.07); - border-radius: 3px; -} -.severity { - text-transform: capitalize; - font-weight: bold; -} -.highlight { - padding: 2px; - border-radius: 2px; - font-weight: bold; -} -<%- SEVERITY_COLORS.each do |severity, color| %> -.severity.<%= severity %> { - color: <%= color %>; -} -.highlight.<%= severity %> { - background-color: <%= color.fade_out(0.4) %>; - border: 1px solid <%= color.fade_out(0.6) %>; -} -<%- end %> -footer { - margin-bottom: 20px; - margin-right: 20px; - font-size: 1.3rem; - color: #777; - text-align: right; -} -.extra-code { - color: #ED9C28 -} - diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/assets/output.html.erb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/assets/output.html.erb deleted file mode 100644 index 02d0c783..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/assets/output.html.erb +++ /dev/null @@ -1,102 +0,0 @@ -<!DOCTYPE html> -<html> - <head> - <meta charset='UTF-8' /> - <title>RuboCop Inspection Report - - - - - - -
    - <% files.each do |file| %> - <% if file.offenses.any? %> -
    -

     

    -

    <%= relative_path(file.path) %> - <%= pluralize(file.offenses.count, 'offense') %>

    -
    - <% file.offenses.each do |offense| %> -
    -
    - Line #<%= offense.location.line %> – - <%= offense.severity %>: - <%= decorated_message(offense) %> -
    - <% unless offense.location.source_line.strip.empty? %> -
    <%= highlighted_source_line(offense) %>
    - <% end %> -
    - <% end %> -
    -
    - <% end %> - <% end %> -
    -
    - Generated by RuboCop - <%= RuboCop::Version::STRING %> -
    - - diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/config/default.yml b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/config/default.yml deleted file mode 100644 index 26237364..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/config/default.yml +++ /dev/null @@ -1,5695 +0,0 @@ -# Common configuration. - -AllCops: - RubyInterpreters: - - ruby - - macruby - - rake - - jruby - - rbx - # Include common Ruby source files. - Include: - - '**/*.rb' - - '**/*.arb' - - '**/*.axlsx' - - '**/*.builder' - - '**/*.fcgi' - - '**/*.gemfile' - - '**/*.gemspec' - - '**/*.god' - - '**/*.jb' - - '**/*.jbuilder' - - '**/*.mspec' - - '**/*.opal' - - '**/*.pluginspec' - - '**/*.podspec' - - '**/*.rabl' - - '**/*.rake' - - '**/*.rbuild' - - '**/*.rbw' - - '**/*.rbx' - - '**/*.ru' - - '**/*.ruby' - - '**/*.schema' - - '**/*.spec' - - '**/*.thor' - - '**/*.watchr' - - '**/.irbrc' - - '**/.pryrc' - - '**/.simplecov' - - '**/buildfile' - - '**/Appraisals' - - '**/Berksfile' - - '**/Brewfile' - - '**/Buildfile' - - '**/Capfile' - - '**/Cheffile' - - '**/Dangerfile' - - '**/Deliverfile' - - '**/Fastfile' - - '**/*Fastfile' - - '**/Gemfile' - - '**/Guardfile' - - '**/Jarfile' - - '**/Mavenfile' - - '**/Podfile' - - '**/Puppetfile' - - '**/Rakefile' - - '**/rakefile' - - '**/Schemafile' - - '**/Snapfile' - - '**/Steepfile' - - '**/Thorfile' - - '**/Vagabondfile' - - '**/Vagrantfile' - Exclude: - - 'node_modules/**/*' - - 'tmp/**/*' - - 'vendor/**/*' - - '.git/**/*' - # Default formatter will be used if no `-f/--format` option is given. - DefaultFormatter: progress - # Cop names are displayed in offense messages by default. Change behavior - # by overriding DisplayCopNames, or by giving the `--no-display-cop-names` - # option. - DisplayCopNames: true - # Style guide URLs are not displayed in offense messages by default. Change - # behavior by overriding `DisplayStyleGuide`, or by giving the - # `-S/--display-style-guide` option. - DisplayStyleGuide: false - # When specifying style guide URLs, any paths and/or fragments will be - # evaluated relative to the base URL. - StyleGuideBaseURL: https://rubystyle.guide - # Documentation URLs will be constructed using the base URL. - DocumentationBaseURL: https://docs.rubocop.org/rubocop - # Extra details are not displayed in offense messages by default. Change - # behavior by overriding ExtraDetails, or by giving the - # `-E/--extra-details` option. - ExtraDetails: false - # Additional cops that do not reference a style guide rule may be enabled by - # default. Change behavior by overriding `StyleGuideCopsOnly`, or by giving - # the `--only-guide-cops` option. - StyleGuideCopsOnly: false - # All cops except the ones configured `Enabled: false` in this file are enabled by default. - # Change this behavior by overriding either `DisabledByDefault` or `EnabledByDefault`. - # When `DisabledByDefault` is `true`, all cops in the default configuration - # are disabled, and only cops in user configuration are enabled. This makes - # cops opt-in instead of opt-out. Note that when `DisabledByDefault` is `true`, - # cops in user configuration will be enabled even if they don't set the - # Enabled parameter. - # When `EnabledByDefault` is `true`, all cops, even those configured `Enabled: false` - # in this file are enabled by default. Cops can still be disabled in user configuration. - # Note that it is invalid to set both EnabledByDefault and DisabledByDefault - # to true in the same configuration. - EnabledByDefault: false - DisabledByDefault: false - # New cops introduced between major versions are set to a special pending status - # and are not enabled by default with warning message. - # Change this behavior by overriding either `NewCops: enable` or `NewCops: disable`. - # When `NewCops` is `enable`, pending cops are enabled in bulk. Can be overridden by - # the `--enable-pending-cops` command-line option. - # When `NewCops` is `disable`, pending cops are disabled in bulk. Can be overridden by - # the `--disable-pending-cops` command-line option. - NewCops: pending - # Enables the result cache if `true`. Can be overridden by the `--cache` command - # line option. - UseCache: true - # Threshold for how many files can be stored in the result cache before some - # of the files are automatically removed. - MaxFilesInCache: 20000 - # The cache will be stored in "rubocop_cache" under this directory. If - # CacheRootDirectory is ~ (nil), which it is by default, the root will be - # taken from the environment variable `$XDG_CACHE_HOME` if it is set, or if - # `$XDG_CACHE_HOME` is not set, it will be `$HOME/.cache/`. - # The CacheRootDirectory can be overwritten by passing the `--cache-root` command - # line option or by setting `$RUBOCOP_CACHE_ROOT` environment variable. - CacheRootDirectory: ~ - # It is possible for a malicious user to know the location of RuboCop's cache - # directory by looking at CacheRootDirectory, and create a symlink in its - # place that could cause RuboCop to overwrite unintended files, or read - # malicious input. If you are certain that your cache location is secure from - # this kind of attack, and wish to use a symlinked cache location, set this - # value to "true". - AllowSymlinksInCacheRootDirectory: false - # What MRI version of the Ruby interpreter is the inspected code intended to - # run on? (If there is more than one, set this to the lowest version.) - # If a value is specified for TargetRubyVersion then it is used. Acceptable - # values are specified as a float (i.e. 3.0); the teeny version of Ruby - # should not be included. If the project specifies a Ruby version in the - # .tool-versions or .ruby-version files, Gemfile or gems.rb file, RuboCop will - # try to determine the desired version of Ruby by inspecting the - # .tool-versions file first, then .ruby-version, followed by the Gemfile.lock - # or gems.locked file. (Although the Ruby version is specified in the Gemfile - # or gems.rb file, RuboCop reads the final value from the lock file.) If the - # Ruby version is still unresolved, RuboCop will use the oldest officially - # supported Ruby version (currently Ruby 2.7). - TargetRubyVersion: ~ - # Determines if a notification for extension libraries should be shown when - # rubocop is run. Keys are the name of the extension, and values are an array - # of gems in the Gemfile that the extension is suggested for, if not already - # included. - SuggestExtensions: - rubocop-rails: [rails] - rubocop-rspec: [rspec, rspec-rails] - rubocop-minitest: [minitest] - rubocop-sequel: [sequel] - rubocop-rake: [rake] - rubocop-graphql: [graphql] - rubocop-capybara: [capybara] - rubocop-factory_bot: [factory_bot, factory_bot_rails] - # Enable/Disable checking the methods extended by Active Support. - ActiveSupportExtensionsEnabled: false - -#################### Bundler ############################### - -Bundler/DuplicatedGem: - Description: 'Checks for duplicate gem entries in Gemfile.' - Enabled: true - Severity: warning - VersionAdded: '0.46' - VersionChanged: '1.40' - Include: - - '**/*.gemfile' - - '**/Gemfile' - - '**/gems.rb' - -Bundler/DuplicatedGroup: - Description: 'Checks for duplicate group entries in Gemfile.' - Enabled: true - Severity: warning - VersionAdded: '1.56' - Include: - - '**/*.gemfile' - - '**/Gemfile' - - '**/gems.rb' - -Bundler/GemComment: - Description: 'Add a comment describing each gem.' - Enabled: false - VersionAdded: '0.59' - VersionChanged: '0.85' - Include: - - '**/*.gemfile' - - '**/Gemfile' - - '**/gems.rb' - IgnoredGems: [] - OnlyFor: [] - -Bundler/GemFilename: - Description: 'Enforces the filename for managing gems.' - Enabled: true - VersionAdded: '1.20' - EnforcedStyle: 'Gemfile' - SupportedStyles: - - 'Gemfile' - - 'gems.rb' - Include: - - '**/Gemfile' - - '**/gems.rb' - - '**/Gemfile.lock' - - '**/gems.locked' - -Bundler/GemVersion: - Description: 'Requires or forbids specifying gem versions.' - Enabled: false - VersionAdded: '1.14' - EnforcedStyle: 'required' - SupportedStyles: - - 'required' - - 'forbidden' - Include: - - '**/*.gemfile' - - '**/Gemfile' - - '**/gems.rb' - AllowedGems: [] - -Bundler/InsecureProtocolSource: - Description: >- - The source `:gemcutter`, `:rubygems` and `:rubyforge` are deprecated - because HTTP requests are insecure. Please change your source to - 'https://rubygems.org' if possible, or 'http://rubygems.org' if not. - Enabled: true - Severity: warning - VersionAdded: '0.50' - VersionChanged: '1.40' - AllowHttpProtocol: true - Include: - - '**/*.gemfile' - - '**/Gemfile' - - '**/gems.rb' - -Bundler/OrderedGems: - Description: >- - Gems within groups in the Gemfile should be alphabetically sorted. - Enabled: true - VersionAdded: '0.46' - VersionChanged: '0.47' - TreatCommentsAsGroupSeparators: true - # By default, "-" and "_" are ignored for order purposes. - # This can be overridden by setting this parameter to true. - ConsiderPunctuation: false - Include: - - '**/*.gemfile' - - '**/Gemfile' - - '**/gems.rb' - -#################### Gemspec ############################### - -Gemspec/DependencyVersion: - Description: 'Requires or forbids specifying gem dependency versions.' - Enabled: false - VersionAdded: '1.29' - EnforcedStyle: 'required' - SupportedStyles: - - 'required' - - 'forbidden' - Include: - - '**/*.gemspec' - AllowedGems: [] - -Gemspec/DeprecatedAttributeAssignment: - Description: Checks that deprecated attribute assignments are not set in a gemspec file. - Enabled: pending - Severity: warning - VersionAdded: '1.30' - VersionChanged: '1.40' - Include: - - '**/*.gemspec' - -Gemspec/DevelopmentDependencies: - Description: Checks that development dependencies are specified in Gemfile rather than gemspec. - Enabled: pending - VersionAdded: '1.44' - EnforcedStyle: Gemfile - SupportedStyles: - - Gemfile - - gems.rb - - gemspec - AllowedGems: [] - Include: - - '**/*.gemspec' - - '**/Gemfile' - - '**/gems.rb' - -Gemspec/DuplicatedAssignment: - Description: 'An attribute assignment method calls should be listed only once in a gemspec.' - Enabled: true - Severity: warning - VersionAdded: '0.52' - VersionChanged: '1.40' - Include: - - '**/*.gemspec' - -Gemspec/OrderedDependencies: - Description: >- - Dependencies in the gemspec should be alphabetically sorted. - Enabled: true - VersionAdded: '0.51' - TreatCommentsAsGroupSeparators: true - # By default, "-" and "_" are ignored for order purposes. - # This can be overridden by setting this parameter to true. - ConsiderPunctuation: false - Include: - - '**/*.gemspec' - -Gemspec/RequireMFA: - Description: 'Checks that the gemspec has metadata to require Multi-Factor Authentication from RubyGems.' - Enabled: pending - Severity: warning - VersionAdded: '1.23' - VersionChanged: '1.40' - Reference: - - https://guides.rubygems.org/mfa-requirement-opt-in/ - Include: - - '**/*.gemspec' - -Gemspec/RequiredRubyVersion: - Description: 'Checks that `required_ruby_version` of gemspec is specified and equal to `TargetRubyVersion` of .rubocop.yml.' - Enabled: true - Severity: warning - VersionAdded: '0.52' - VersionChanged: '1.40' - Include: - - '**/*.gemspec' - -Gemspec/RubyVersionGlobalsUsage: - Description: Checks usage of RUBY_VERSION in gemspec. - StyleGuide: '#no-ruby-version-in-the-gemspec' - Enabled: true - Severity: warning - VersionAdded: '0.72' - VersionChanged: '1.40' - Include: - - '**/*.gemspec' - -#################### Layout ########################### - -Layout/AccessModifierIndentation: - Description: Check indentation of private/protected visibility modifiers. - StyleGuide: '#indent-public-private-protected' - Enabled: true - VersionAdded: '0.49' - EnforcedStyle: indent - SupportedStyles: - - outdent - - indent - # By default the indentation width from `Layout/IndentationWidth` is used, - # but it can be overridden by setting this parameter. - IndentationWidth: ~ - -Layout/ArgumentAlignment: - Description: >- - Align the arguments of a method call if they span more - than one line. - StyleGuide: '#no-double-indent' - Enabled: true - VersionAdded: '0.68' - VersionChanged: '0.77' - # Alignment of arguments in multi-line method calls. - # - # The `with_first_argument` style aligns the following lines along the same - # column as the first parameter. - # - # method_call(a, - # b) - # - # The `with_fixed_indentation` style aligns the following lines with one - # level of indentation relative to the start of the line with the method call. - # - # method_call(a, - # b) - EnforcedStyle: with_first_argument - SupportedStyles: - - with_first_argument - - with_fixed_indentation - # By default the indentation width from `Layout/IndentationWidth` is used, - # but it can be overridden by setting this parameter. - IndentationWidth: ~ - -Layout/ArrayAlignment: - Description: >- - Align the elements of an array literal if they span more than - one line. - StyleGuide: '#no-double-indent' - Enabled: true - VersionAdded: '0.49' - VersionChanged: '0.77' - # Alignment of elements of a multi-line array. - # - # The `with_first_parameter` style aligns the following lines along the same - # column as the first element. - # - # array = [1, 2, 3, - # 4, 5, 6] - # - # The `with_fixed_indentation` style aligns the following lines with one - # level of indentation relative to the start of the line with start of array. - # - # array = [1, 2, 3, - # 4, 5, 6] - EnforcedStyle: with_first_element - SupportedStyles: - - with_first_element - - with_fixed_indentation - # By default the indentation width from `Layout/IndentationWidth` is used, - # but it can be overridden by setting this parameter. - IndentationWidth: ~ - -Layout/AssignmentIndentation: - Description: >- - Checks the indentation of the first line of the - right-hand-side of a multi-line assignment. - Enabled: true - VersionAdded: '0.49' - VersionChanged: '1.45' - # By default the indentation width from `Layout/IndentationWidth` is used, - # but it can be overridden by setting this parameter. - IndentationWidth: ~ - -Layout/BeginEndAlignment: - Description: 'Align ends corresponding to begins correctly.' - Enabled: true - VersionAdded: '0.91' - # The value `start_of_line` means that `end` should be aligned the start of the line - # where the `begin` keyword is. - # The value `begin` means that `end` should be aligned with the `begin` keyword. - EnforcedStyleAlignWith: start_of_line - SupportedStylesAlignWith: - - start_of_line - - begin - Severity: warning - -Layout/BlockAlignment: - Description: 'Align block ends correctly.' - Enabled: true - VersionAdded: '0.53' - # The value `start_of_block` means that the `end` should be aligned with line - # where the `do` keyword appears. - # The value `start_of_line` means it should be aligned with the whole - # expression's starting line. - # The value `either` means both are allowed. - EnforcedStyleAlignWith: either - SupportedStylesAlignWith: - - either - - start_of_block - - start_of_line - -Layout/BlockEndNewline: - Description: 'Put end statement of multiline block on its own line.' - Enabled: true - VersionAdded: '0.49' - -Layout/CaseIndentation: - Description: 'Indentation of when in a case/(when|in)/[else/]end.' - StyleGuide: '#indent-when-to-case' - Enabled: true - VersionAdded: '0.49' - VersionChanged: '1.16' - EnforcedStyle: case - SupportedStyles: - - case - - end - IndentOneStep: false - # By default the indentation width from `Layout/IndentationWidth` is used, - # but it can be overridden by setting this parameter. - # This only matters if `IndentOneStep` is `true`. - IndentationWidth: ~ - -Layout/ClassStructure: - Description: 'Enforces a configured order of definitions within a class body.' - StyleGuide: '#consistent-classes' - Enabled: false - SafeAutoCorrect: false - VersionAdded: '0.52' - VersionChanged: '1.53' - Categories: - module_inclusion: - - include - - prepend - - extend - ExpectedOrder: - - module_inclusion - - constants - - public_class_methods - - initializer - - public_methods - - protected_methods - - private_methods - -Layout/ClosingHeredocIndentation: - Description: 'Checks the indentation of here document closings.' - Enabled: true - VersionAdded: '0.57' - -Layout/ClosingParenthesisIndentation: - Description: 'Checks the indentation of hanging closing parentheses.' - Enabled: true - VersionAdded: '0.49' - -Layout/CommentIndentation: - Description: 'Indentation of comments.' - Enabled: true - # When true, allows comments to have extra indentation if that aligns them - # with a comment on the preceding line. - AllowForAlignment: false - VersionAdded: '0.49' - VersionChanged: '1.24' - -Layout/ConditionPosition: - Description: >- - Checks for condition placed in a confusing position relative to - the keyword. - StyleGuide: '#same-line-condition' - Enabled: true - VersionAdded: '0.53' - VersionChanged: '0.83' - -Layout/DefEndAlignment: - Description: 'Align ends corresponding to defs correctly.' - Enabled: true - VersionAdded: '0.53' - # The value `def` means that `end` should be aligned with the def keyword. - # The value `start_of_line` means that `end` should be aligned with method - # calls like `private`, `public`, etc, if present in front of the `def` - # keyword on the same line. - EnforcedStyleAlignWith: start_of_line - SupportedStylesAlignWith: - - start_of_line - - def - Severity: warning - -Layout/DotPosition: - Description: 'Checks the position of the dot in multi-line method calls.' - StyleGuide: '#consistent-multi-line-chains' - Enabled: true - VersionAdded: '0.49' - EnforcedStyle: leading - SupportedStyles: - - leading - - trailing - -Layout/ElseAlignment: - Description: 'Align elses and elsifs correctly.' - Enabled: true - VersionAdded: '0.49' - -Layout/EmptyComment: - Description: 'Checks empty comment.' - Enabled: true - AutoCorrect: contextual - VersionAdded: '0.53' - VersionChanged: '1.61' - AllowBorderComment: true - AllowMarginComment: true - -Layout/EmptyLineAfterGuardClause: - Description: 'Add empty line after guard clause.' - Enabled: true - VersionAdded: '0.56' - VersionChanged: '0.59' - -Layout/EmptyLineAfterMagicComment: - Description: 'Add an empty line after magic comments to separate them from code.' - StyleGuide: '#separate-magic-comments-from-code' - Enabled: true - VersionAdded: '0.49' - -Layout/EmptyLineAfterMultilineCondition: - Description: 'Enforces empty line after multiline condition.' - # This is disabled, because this style is not very common in practice. - Enabled: false - VersionAdded: '0.90' - Reference: - - https://github.com/airbnb/ruby#multiline-if-newline - -Layout/EmptyLineBetweenDefs: - Description: 'Use empty lines between class/module/method defs.' - StyleGuide: '#empty-lines-between-methods' - Enabled: true - VersionAdded: '0.49' - VersionChanged: '1.23' - EmptyLineBetweenMethodDefs: true - EmptyLineBetweenClassDefs: true - EmptyLineBetweenModuleDefs: true - # `DefLikeMacros` takes the name of any macro that you want to treat like a def. - DefLikeMacros: [] - # `AllowAdjacentOneLineDefs` means that single line method definitions don't - # need an empty line between them. `true` by default. - AllowAdjacentOneLineDefs: true - # Can be array to specify minimum and maximum number of empty lines, e.g. [1, 2] - NumberOfEmptyLines: 1 - -Layout/EmptyLines: - Description: "Don't use several empty lines in a row." - StyleGuide: '#two-or-more-empty-lines' - Enabled: true - VersionAdded: '0.49' - -Layout/EmptyLinesAroundAccessModifier: - Description: "Keep blank lines around access modifiers." - StyleGuide: '#empty-lines-around-access-modifier' - Enabled: true - VersionAdded: '0.49' - EnforcedStyle: around - SupportedStyles: - - around - - only_before - Reference: - # A reference to `EnforcedStyle: only_before`. - - https://edgeguides.rubyonrails.org/contributing_to_ruby_on_rails.html#follow-the-coding-conventions - -Layout/EmptyLinesAroundArguments: - Description: "Keeps track of empty lines around method arguments." - Enabled: true - VersionAdded: '0.52' - -Layout/EmptyLinesAroundAttributeAccessor: - Description: "Keep blank lines around attribute accessors." - StyleGuide: '#empty-lines-around-attribute-accessor' - Enabled: true - VersionAdded: '0.83' - VersionChanged: '0.84' - AllowAliasSyntax: true - AllowedMethods: - - alias_method - - public - - protected - - private - -Layout/EmptyLinesAroundBeginBody: - Description: "Keeps track of empty lines around begin-end bodies." - StyleGuide: '#empty-lines-around-bodies' - Enabled: true - VersionAdded: '0.49' - -Layout/EmptyLinesAroundBlockBody: - Description: "Keeps track of empty lines around block bodies." - StyleGuide: '#empty-lines-around-bodies' - Enabled: true - VersionAdded: '0.49' - EnforcedStyle: no_empty_lines - SupportedStyles: - - empty_lines - - no_empty_lines - -Layout/EmptyLinesAroundClassBody: - Description: "Keeps track of empty lines around class bodies." - StyleGuide: '#empty-lines-around-bodies' - Enabled: true - VersionAdded: '0.49' - VersionChanged: '0.53' - EnforcedStyle: no_empty_lines - SupportedStyles: - - empty_lines - - empty_lines_except_namespace - - empty_lines_special - - no_empty_lines - - beginning_only - - ending_only - -Layout/EmptyLinesAroundExceptionHandlingKeywords: - Description: "Keeps track of empty lines around exception handling keywords." - StyleGuide: '#empty-lines-around-bodies' - Enabled: true - VersionAdded: '0.49' - -Layout/EmptyLinesAroundMethodBody: - Description: "Keeps track of empty lines around method bodies." - StyleGuide: '#empty-lines-around-bodies' - Enabled: true - VersionAdded: '0.49' - -Layout/EmptyLinesAroundModuleBody: - Description: "Keeps track of empty lines around module bodies." - StyleGuide: '#empty-lines-around-bodies' - Enabled: true - VersionAdded: '0.49' - EnforcedStyle: no_empty_lines - SupportedStyles: - - empty_lines - - empty_lines_except_namespace - - empty_lines_special - - no_empty_lines - -Layout/EndAlignment: - Description: 'Align ends correctly.' - Enabled: true - VersionAdded: '0.53' - # The value `keyword` means that `end` should be aligned with the matching - # keyword (`if`, `while`, etc.). - # The value `variable` means that in assignments, `end` should be aligned - # with the start of the variable on the left hand side of `=`. In all other - # situations, `end` should still be aligned with the keyword. - # The value `start_of_line` means that `end` should be aligned with the start - # of the line which the matching keyword appears on. - EnforcedStyleAlignWith: keyword - SupportedStylesAlignWith: - - keyword - - variable - - start_of_line - Severity: warning - -Layout/EndOfLine: - Description: 'Use Unix-style line endings.' - StyleGuide: '#crlf' - Enabled: true - VersionAdded: '0.49' - # The `native` style means that CR+LF (Carriage Return + Line Feed) is - # enforced on Windows, and LF is enforced on other platforms. The other styles - # mean LF and CR+LF, respectively. - EnforcedStyle: native - SupportedStyles: - - native - - lf - - crlf - -Layout/ExtraSpacing: - Description: 'Do not use unnecessary spacing.' - Enabled: true - VersionAdded: '0.49' - # When true, allows most uses of extra spacing if the intent is to align - # things with the previous or next line, not counting empty lines or comment - # lines. - AllowForAlignment: true - # When true, allows things like 'obj.meth(arg) # comment', - # rather than insisting on 'obj.meth(arg) # comment'. - # If done for alignment, either this OR AllowForAlignment will allow it. - AllowBeforeTrailingComments: false - # When true, forces the alignment of `=` in assignments on consecutive lines. - ForceEqualSignAlignment: false - -Layout/FirstArgumentIndentation: - Description: 'Checks the indentation of the first argument in a method call.' - Enabled: true - VersionAdded: '0.68' - VersionChanged: '0.77' - EnforcedStyle: special_for_inner_method_call_in_parentheses - SupportedStyles: - # The first parameter should always be indented one step more than the - # preceding line. - - consistent - # The first parameter should always be indented one level relative to the - # parent that is receiving the parameter - - consistent_relative_to_receiver - # The first parameter should normally be indented one step more than the - # preceding line, but if it's a parameter for a method call that is itself - # a parameter in a method call, then the inner parameter should be indented - # relative to the inner method. - - special_for_inner_method_call - # Same as `special_for_inner_method_call` except that the special rule only - # applies if the outer method call encloses its arguments in parentheses. - - special_for_inner_method_call_in_parentheses - # By default the indentation width from `Layout/IndentationWidth` is used, - # but it can be overridden by setting this parameter. - IndentationWidth: ~ - -Layout/FirstArrayElementIndentation: - Description: >- - Checks the indentation of the first element in an array - literal. - Enabled: true - VersionAdded: '0.68' - VersionChanged: '0.77' - # The value `special_inside_parentheses` means that array literals with - # brackets that have their opening bracket on the same line as a surrounding - # opening round parenthesis, shall have their first element indented relative - # to the first position inside the parenthesis. - # - # The value `consistent` means that the indentation of the first element shall - # always be relative to the first position of the line where the opening - # bracket is. - # - # The value `align_brackets` means that the indentation of the first element - # shall always be relative to the position of the opening bracket. - EnforcedStyle: special_inside_parentheses - SupportedStyles: - - special_inside_parentheses - - consistent - - align_brackets - # By default the indentation width from `Layout/IndentationWidth` is used, - # but it can be overridden by setting this parameter. - IndentationWidth: ~ - -Layout/FirstArrayElementLineBreak: - Description: >- - Checks for a line break before the first element in a - multi-line array. - Enabled: false - VersionAdded: '0.49' - AllowMultilineFinalElement: false - -Layout/FirstHashElementIndentation: - Description: 'Checks the indentation of the first key in a hash literal.' - Enabled: true - VersionAdded: '0.68' - VersionChanged: '0.77' - # The value `special_inside_parentheses` means that hash literals with braces - # that have their opening brace on the same line as a surrounding opening - # round parenthesis, shall have their first key indented relative to the - # first position inside the parenthesis. - # - # The value `consistent` means that the indentation of the first key shall - # always be relative to the first position of the line where the opening - # brace is. - # - # The value `align_braces` means that the indentation of the first key shall - # always be relative to the position of the opening brace. - EnforcedStyle: special_inside_parentheses - SupportedStyles: - - special_inside_parentheses - - consistent - - align_braces - # By default the indentation width from `Layout/IndentationWidth` is used, - # but it can be overridden by setting this parameter. - IndentationWidth: ~ - -Layout/FirstHashElementLineBreak: - Description: >- - Checks for a line break before the first element in a - multi-line hash. - Enabled: false - VersionAdded: '0.49' - AllowMultilineFinalElement: false - -Layout/FirstMethodArgumentLineBreak: - Description: >- - Checks for a line break before the first argument in a - multi-line method call. - Enabled: false - VersionAdded: '0.49' - AllowMultilineFinalElement: false - -Layout/FirstMethodParameterLineBreak: - Description: >- - Checks for a line break before the first parameter in a - multi-line method parameter definition. - Enabled: false - VersionAdded: '0.49' - AllowMultilineFinalElement: false - -Layout/FirstParameterIndentation: - Description: >- - Checks the indentation of the first parameter in a - method definition. - Enabled: true - VersionAdded: '0.49' - VersionChanged: '0.77' - EnforcedStyle: consistent - SupportedStyles: - - consistent - - align_parentheses - # By default the indentation width from `Layout/IndentationWidth` is used, - # but it can be overridden by setting this parameter. - IndentationWidth: ~ - -Layout/HashAlignment: - Description: >- - Align the elements of a hash literal if they span more than - one line. - Enabled: true - AllowMultipleStyles: true - VersionAdded: '0.49' - VersionChanged: '1.16' - # Alignment of entries using hash rocket as separator. Valid values are: - # - # key - left alignment of keys - # 'a' => 2 - # 'bb' => 3 - # separator - alignment of hash rockets, keys are right aligned - # 'a' => 2 - # 'bb' => 3 - # table - left alignment of keys, hash rockets, and values - # 'a' => 2 - # 'bb' => 3 - EnforcedHashRocketStyle: key - SupportedHashRocketStyles: - - key - - separator - - table - # Alignment of entries using colon as separator. Valid values are: - # - # key - left alignment of keys - # a: 0 - # bb: 1 - # separator - alignment of colons, keys are right aligned - # a: 0 - # bb: 1 - # table - left alignment of keys and values - # a: 0 - # bb: 1 - EnforcedColonStyle: key - SupportedColonStyles: - - key - - separator - - table - # Select whether hashes that are the last argument in a method call should be - # inspected? Valid values are: - # - # always_inspect - Inspect both implicit and explicit hashes. - # Registers an offense for: - # function(a: 1, - # b: 2) - # Registers an offense for: - # function({a: 1, - # b: 2}) - # always_ignore - Ignore both implicit and explicit hashes. - # Accepts: - # function(a: 1, - # b: 2) - # Accepts: - # function({a: 1, - # b: 2}) - # ignore_implicit - Ignore only implicit hashes. - # Accepts: - # function(a: 1, - # b: 2) - # Registers an offense for: - # function({a: 1, - # b: 2}) - # ignore_explicit - Ignore only explicit hashes. - # Accepts: - # function({a: 1, - # b: 2}) - # Registers an offense for: - # function(a: 1, - # b: 2) - EnforcedLastArgumentHashStyle: always_inspect - SupportedLastArgumentHashStyles: - - always_inspect - - always_ignore - - ignore_implicit - - ignore_explicit - -Layout/HeredocArgumentClosingParenthesis: - Description: >- - Checks for the placement of the closing parenthesis in a - method call that passes a HEREDOC string as an argument. - Enabled: false - StyleGuide: '#heredoc-argument-closing-parentheses' - VersionAdded: '0.68' - -Layout/HeredocIndentation: - Description: 'Checks the indentation of the here document bodies.' - StyleGuide: '#squiggly-heredocs' - Enabled: true - VersionAdded: '0.49' - VersionChanged: '0.85' - -Layout/IndentationConsistency: - Description: 'Keep indentation straight.' - StyleGuide: '#spaces-indentation' - Enabled: true - VersionAdded: '0.49' - # The difference between `indented` and `normal` is that the `indented_internal_methods` - # style prescribes that in classes and modules the `protected` and `private` - # modifier keywords shall be indented the same as public methods and that - # protected and private members shall be indented one step more than the - # modifiers. Other than that, both styles mean that entities on the same - # logical depth shall have the same indentation. - EnforcedStyle: normal - SupportedStyles: - - normal - - indented_internal_methods - Reference: - # A reference to `EnforcedStyle: indented_internal_methods`. - - https://edgeguides.rubyonrails.org/contributing_to_ruby_on_rails.html#follow-the-coding-conventions - -Layout/IndentationStyle: - Description: 'Consistent indentation either with tabs only or spaces only.' - StyleGuide: '#spaces-indentation' - Enabled: true - VersionAdded: '0.49' - VersionChanged: '0.82' - # By default the indentation width from `Layout/IndentationWidth` is used, - # but it can be overridden by setting this parameter. - # It is used during autocorrection to determine how many spaces should - # replace each tab. - IndentationWidth: ~ - EnforcedStyle: spaces - SupportedStyles: - - spaces - - tabs - -Layout/IndentationWidth: - Description: 'Use 2 spaces for indentation.' - StyleGuide: '#spaces-indentation' - Enabled: true - VersionAdded: '0.49' - # Number of spaces for each indentation level. - Width: 2 - AllowedPatterns: [] - -Layout/InitialIndentation: - Description: >- - Checks the indentation of the first non-blank non-comment line in a file. - Enabled: true - VersionAdded: '0.49' - -Layout/LeadingCommentSpace: - Description: 'Comments should start with a space.' - StyleGuide: '#hash-space' - Enabled: true - VersionAdded: '0.49' - VersionChanged: '0.73' - AllowDoxygenCommentStyle: false - AllowGemfileRubyComment: false - -Layout/LeadingEmptyLines: - Description: Check for unnecessary blank lines at the beginning of a file. - Enabled: true - VersionAdded: '0.57' - VersionChanged: '0.77' - -Layout/LineContinuationLeadingSpace: - Description: >- - Use trailing spaces instead of leading spaces in strings - broken over multiple lines (by a backslash). - Enabled: pending - VersionAdded: '1.31' - VersionChanged: '1.45' - EnforcedStyle: trailing - SupportedStyles: - - leading - - trailing - -Layout/LineContinuationSpacing: - Description: 'Checks the spacing in front of backslash in line continuations.' - Enabled: pending - VersionAdded: '1.31' - EnforcedStyle: space - SupportedStyles: - - space - - no_space - -Layout/LineEndStringConcatenationIndentation: - Description: >- - Checks the indentation of the next line after a line that - ends with a string literal and a backslash. - Enabled: pending - VersionAdded: '1.18' - EnforcedStyle: aligned - SupportedStyles: - - aligned - - indented - # By default the indentation width from `Layout/IndentationWidth` is used, - # but it can be overridden by setting this parameter. - IndentationWidth: ~ - -Layout/LineLength: - Description: 'Checks that line length does not exceed the configured limit.' - StyleGuide: '#max-line-length' - Enabled: true - VersionAdded: '0.25' - VersionChanged: '1.4' - Max: 120 - # To make it possible to copy or click on URIs in the code, we allow lines - # containing a URI to be longer than Max. - AllowHeredoc: true - AllowURI: true - URISchemes: - - http - - https - # The IgnoreCopDirectives option causes the LineLength rule to ignore cop - # directives like '# rubocop: enable ...' when calculating a line's length. - IgnoreCopDirectives: true - # The AllowedPatterns option is a list of !ruby/regexp and/or string - # elements. Strings will be converted to Regexp objects. A line that matches - # any regular expression listed in this option will be ignored by LineLength. - AllowedPatterns: [] - -Layout/MultilineArrayBraceLayout: - Description: >- - Checks that the closing brace in an array literal is - either on the same line as the last array element, or - a new line. - Enabled: true - VersionAdded: '0.49' - EnforcedStyle: symmetrical - SupportedStyles: - # symmetrical: closing brace is positioned in same way as opening brace - # new_line: closing brace is always on a new line - # same_line: closing brace is always on the same line as last element - - symmetrical - - new_line - - same_line - -Layout/MultilineArrayLineBreaks: - Description: >- - Checks that each item in a multi-line array literal - starts on a separate line. - Enabled: false - VersionAdded: '0.67' - AllowMultilineFinalElement: false - -Layout/MultilineAssignmentLayout: - Description: 'Check for a newline after the assignment operator in multi-line assignments.' - StyleGuide: '#indent-conditional-assignment' - Enabled: false - VersionAdded: '0.49' - # The types of assignments which are subject to this rule. - SupportedTypes: - - block - - case - - class - - if - - kwbegin - - module - EnforcedStyle: new_line - SupportedStyles: - # Ensures that the assignment operator and the rhs are on the same line for - # the set of supported types. - - same_line - # Ensures that the assignment operator and the rhs are on separate lines - # for the set of supported types. - - new_line - -Layout/MultilineBlockLayout: - Description: 'Ensures newlines after multiline block do statements.' - Enabled: true - VersionAdded: '0.49' - -Layout/MultilineHashBraceLayout: - Description: >- - Checks that the closing brace in a hash literal is - either on the same line as the last hash element, or - a new line. - Enabled: true - VersionAdded: '0.49' - EnforcedStyle: symmetrical - SupportedStyles: - # symmetrical: closing brace is positioned in same way as opening brace - # new_line: closing brace is always on a new line - # same_line: closing brace is always on same line as last element - - symmetrical - - new_line - - same_line - -Layout/MultilineHashKeyLineBreaks: - Description: >- - Checks that each item in a multi-line hash literal - starts on a separate line. - Enabled: false - VersionAdded: '0.67' - AllowMultilineFinalElement: false - -Layout/MultilineMethodArgumentLineBreaks: - Description: >- - Checks that each argument in a multi-line method call - starts on a separate line. - Enabled: false - VersionAdded: '0.67' - AllowMultilineFinalElement: false - -Layout/MultilineMethodCallBraceLayout: - Description: >- - Checks that the closing brace in a method call is - either on the same line as the last method argument, or - a new line. - Enabled: true - VersionAdded: '0.49' - EnforcedStyle: symmetrical - SupportedStyles: - # symmetrical: closing brace is positioned in same way as opening brace - # new_line: closing brace is always on a new line - # same_line: closing brace is always on the same line as last argument - - symmetrical - - new_line - - same_line - -Layout/MultilineMethodCallIndentation: - Description: >- - Checks indentation of method calls with the dot operator - that span more than one line. - Enabled: true - VersionAdded: '0.49' - EnforcedStyle: aligned - SupportedStyles: - - aligned - - indented - - indented_relative_to_receiver - # By default the indentation width from `Layout/IndentationWidth` is used, - # but it can be overridden by setting this parameter. - IndentationWidth: ~ - -Layout/MultilineMethodDefinitionBraceLayout: - Description: >- - Checks that the closing brace in a method definition is - either on the same line as the last method parameter, or - a new line. - Enabled: true - VersionAdded: '0.49' - EnforcedStyle: symmetrical - SupportedStyles: - # symmetrical: closing brace is positioned in same way as opening brace - # new_line: closing brace is always on a new line - # same_line: closing brace is always on the same line as last parameter - - symmetrical - - new_line - - same_line - -Layout/MultilineMethodParameterLineBreaks: - Description: >- - Checks that each parameter in a multi-line method definition - starts on a separate line. - Enabled: false - VersionAdded: '1.32' - AllowMultilineFinalElement: false - -Layout/MultilineOperationIndentation: - Description: >- - Checks indentation of binary operations that span more than - one line. - Enabled: true - VersionAdded: '0.49' - EnforcedStyle: aligned - SupportedStyles: - - aligned - - indented - # By default the indentation width from `Layout/IndentationWidth` is used, - # but it can be overridden by setting this parameter. - IndentationWidth: ~ - -Layout/ParameterAlignment: - Description: >- - Align the parameters of a method definition if they span more - than one line. - StyleGuide: '#no-double-indent' - Enabled: true - VersionAdded: '0.49' - VersionChanged: '0.77' - # Alignment of parameters in multi-line method calls. - # - # The `with_first_parameter` style aligns the following lines along the same - # column as the first parameter. - # - # def method_foo(a, - # b) - # - # The `with_fixed_indentation` style aligns the following lines with one - # level of indentation relative to the start of the line with the method call. - # - # def method_foo(a, - # b) - EnforcedStyle: with_first_parameter - SupportedStyles: - - with_first_parameter - - with_fixed_indentation - # By default the indentation width from `Layout/IndentationWidth` is used, - # but it can be overridden by setting this parameter. - IndentationWidth: ~ - -Layout/RedundantLineBreak: - Description: >- - Do not break up an expression into multiple lines when it fits - on a single line. - Enabled: false - InspectBlocks: false - VersionAdded: '1.13' - -Layout/RescueEnsureAlignment: - Description: 'Align rescues and ensures correctly.' - Enabled: true - VersionAdded: '0.49' - -Layout/SingleLineBlockChain: - Description: 'Put method call on a separate line if chained to a single line block.' - Enabled: false - VersionAdded: '1.14' - -Layout/SpaceAfterColon: - Description: 'Use spaces after colons.' - StyleGuide: '#spaces-operators' - Enabled: true - VersionAdded: '0.49' - -Layout/SpaceAfterComma: - Description: 'Use spaces after commas.' - StyleGuide: '#spaces-operators' - Enabled: true - VersionAdded: '0.49' - -Layout/SpaceAfterMethodName: - Description: >- - Do not put a space between a method name and the opening - parenthesis in a method definition. - StyleGuide: '#parens-no-spaces' - Enabled: true - VersionAdded: '0.49' - -Layout/SpaceAfterNot: - Description: Tracks redundant space after the ! operator. - StyleGuide: '#no-space-bang' - Enabled: true - VersionAdded: '0.49' - -Layout/SpaceAfterSemicolon: - Description: 'Use spaces after semicolons.' - StyleGuide: '#spaces-operators' - Enabled: true - VersionAdded: '0.49' - -Layout/SpaceAroundBlockParameters: - Description: 'Checks the spacing inside and after block parameters pipes.' - Enabled: true - VersionAdded: '0.49' - EnforcedStyleInsidePipes: no_space - SupportedStylesInsidePipes: - - space - - no_space - -Layout/SpaceAroundEqualsInParameterDefault: - Description: >- - Checks that the equals signs in parameter default assignments - have or don't have surrounding space depending on - configuration. - StyleGuide: '#spaces-around-equals' - Enabled: true - VersionAdded: '0.49' - EnforcedStyle: space - SupportedStyles: - - space - - no_space - -Layout/SpaceAroundKeyword: - Description: 'Use a space around keywords if appropriate.' - Enabled: true - VersionAdded: '0.49' - -Layout/SpaceAroundMethodCallOperator: - Description: 'Checks method call operators to not have spaces around them.' - Enabled: true - VersionAdded: '0.82' - -Layout/SpaceAroundOperators: - Description: 'Use a single space around operators.' - StyleGuide: '#spaces-operators' - Enabled: true - VersionAdded: '0.49' - # When `true`, allows most uses of extra spacing if the intent is to align - # with an operator on the previous or next line, not counting empty lines - # or comment lines. - AllowForAlignment: true - EnforcedStyleForExponentOperator: no_space - SupportedStylesForExponentOperator: - - space - - no_space - EnforcedStyleForRationalLiterals: no_space - SupportedStylesForRationalLiterals: - - space - - no_space - -Layout/SpaceBeforeBlockBraces: - Description: >- - Checks that the left block brace has or doesn't have space - before it. - Enabled: true - VersionAdded: '0.49' - EnforcedStyle: space - SupportedStyles: - - space - - no_space - EnforcedStyleForEmptyBraces: space - SupportedStylesForEmptyBraces: - - space - - no_space - VersionChanged: '0.52' - -Layout/SpaceBeforeBrackets: - Description: 'Checks for receiver with a space before the opening brackets.' - StyleGuide: '#space-in-brackets-access' - Enabled: pending - VersionAdded: '1.7' - -Layout/SpaceBeforeComma: - Description: 'No spaces before commas.' - Enabled: true - VersionAdded: '0.49' - -Layout/SpaceBeforeComment: - Description: >- - Checks for missing space between code and a comment on the - same line. - Enabled: true - VersionAdded: '0.49' - -Layout/SpaceBeforeFirstArg: - Description: >- - Checks that exactly one space is used between a method name - and the first argument for method calls without parentheses. - Enabled: true - VersionAdded: '0.49' - # When `true`, allows most uses of extra spacing if the intent is to align - # things with the previous or next line, not counting empty lines or comment - # lines. - AllowForAlignment: true - -Layout/SpaceBeforeSemicolon: - Description: 'No spaces before semicolons.' - Enabled: true - VersionAdded: '0.49' - -Layout/SpaceInLambdaLiteral: - Description: 'Checks for spaces in lambda literals.' - Enabled: true - VersionAdded: '0.49' - EnforcedStyle: require_no_space - SupportedStyles: - - require_no_space - - require_space - -Layout/SpaceInsideArrayLiteralBrackets: - Description: 'Checks the spacing inside array literal brackets.' - Enabled: true - VersionAdded: '0.52' - EnforcedStyle: no_space - SupportedStyles: - - space - - no_space - # 'compact' normally requires a space inside the brackets, with the exception - # that successive left brackets or right brackets are collapsed together - - compact - EnforcedStyleForEmptyBrackets: no_space - SupportedStylesForEmptyBrackets: - - space - - no_space - -Layout/SpaceInsideArrayPercentLiteral: - Description: 'No unnecessary additional spaces between elements in %i/%w literals.' - Enabled: true - VersionAdded: '0.49' - -Layout/SpaceInsideBlockBraces: - Description: >- - Checks that block braces have or don't have surrounding space. - For blocks taking parameters, checks that the left brace has - or doesn't have trailing space. - Enabled: true - VersionAdded: '0.49' - EnforcedStyle: space - SupportedStyles: - - space - - no_space - EnforcedStyleForEmptyBraces: no_space - SupportedStylesForEmptyBraces: - - space - - no_space - # Space between `{` and `|`. Overrides `EnforcedStyle` if there is a conflict. - SpaceBeforeBlockParameters: true - -Layout/SpaceInsideHashLiteralBraces: - Description: "Use spaces inside hash literal braces - or don't." - StyleGuide: '#spaces-braces' - Enabled: true - VersionAdded: '0.49' - EnforcedStyle: space - SupportedStyles: - - space - - no_space - # 'compact' normally requires a space inside hash braces, with the exception - # that successive left braces or right braces are collapsed together - - compact - EnforcedStyleForEmptyBraces: no_space - SupportedStylesForEmptyBraces: - - space - - no_space - - -Layout/SpaceInsideParens: - Description: 'No spaces after ( or before ).' - StyleGuide: '#spaces-braces' - Enabled: true - VersionAdded: '0.49' - VersionChanged: '1.22' - EnforcedStyle: no_space - SupportedStyles: - - space - - compact - - no_space - -Layout/SpaceInsidePercentLiteralDelimiters: - Description: 'No unnecessary spaces inside delimiters of %i/%w/%x literals.' - Enabled: true - VersionAdded: '0.49' - -Layout/SpaceInsideRangeLiteral: - Description: 'No spaces inside range literals.' - StyleGuide: '#no-space-inside-range-literals' - Enabled: true - VersionAdded: '0.49' - -Layout/SpaceInsideReferenceBrackets: - Description: 'Checks the spacing inside referential brackets.' - Enabled: true - VersionAdded: '0.52' - VersionChanged: '0.53' - EnforcedStyle: no_space - SupportedStyles: - - space - - no_space - EnforcedStyleForEmptyBrackets: no_space - SupportedStylesForEmptyBrackets: - - space - - no_space - -Layout/SpaceInsideStringInterpolation: - Description: 'Checks for padding/surrounding spaces inside string interpolation.' - StyleGuide: '#string-interpolation' - Enabled: true - VersionAdded: '0.49' - EnforcedStyle: no_space - SupportedStyles: - - space - - no_space - -Layout/TrailingEmptyLines: - Description: 'Checks trailing blank lines and final newline.' - StyleGuide: '#newline-eof' - Enabled: true - VersionAdded: '0.49' - VersionChanged: '0.77' - EnforcedStyle: final_newline - SupportedStyles: - - final_newline - - final_blank_line - -Layout/TrailingWhitespace: - Description: 'Avoid trailing whitespace.' - StyleGuide: '#no-trailing-whitespace' - Enabled: true - VersionAdded: '0.49' - VersionChanged: '1.0' - AllowInHeredoc: false - -#################### Lint ################################## -### Warnings - -Lint/AmbiguousAssignment: - Description: 'Checks for mistyped shorthand assignments.' - Enabled: pending - VersionAdded: '1.7' - -Lint/AmbiguousBlockAssociation: - Description: >- - Checks for ambiguous block association with method when param passed without - parentheses. - Enabled: true - VersionAdded: '0.48' - VersionChanged: '1.13' - AllowedMethods: [] - AllowedPatterns: [] - -Lint/AmbiguousOperator: - Description: >- - Checks for ambiguous operators in the first argument of a - method invocation without parentheses. - StyleGuide: '#method-invocation-parens' - Enabled: true - VersionAdded: '0.17' - VersionChanged: '0.83' - -Lint/AmbiguousOperatorPrecedence: - Description: >- - Checks for expressions containing multiple binary operations with - ambiguous precedence. - Enabled: pending - VersionAdded: '1.21' - -Lint/AmbiguousRange: - Description: Checks for ranges with ambiguous boundaries. - Enabled: pending - VersionAdded: '1.19' - SafeAutoCorrect: false - RequireParenthesesForMethodChains: false - -Lint/AmbiguousRegexpLiteral: - Description: >- - Checks for ambiguous regexp literals in the first argument of - a method invocation without parentheses. - Enabled: true - VersionAdded: '0.17' - VersionChanged: '0.83' - -Lint/AssignmentInCondition: - Description: "Don't use assignment in conditions." - StyleGuide: '#safe-assignment-in-condition' - Enabled: true - SafeAutoCorrect: false - VersionAdded: '0.9' - VersionChanged: '1.45' - AllowSafeAssignment: true - -Lint/BigDecimalNew: - Description: '`BigDecimal.new()` is deprecated. Use `BigDecimal()` instead.' - Enabled: true - VersionAdded: '0.53' - -Lint/BinaryOperatorWithIdenticalOperands: - Description: 'Checks for places where binary operator has identical operands.' - Enabled: true - Safe: false - VersionAdded: '0.89' - VersionChanged: '1.7' - -Lint/BooleanSymbol: - Description: 'Check for `:true` and `:false` symbols.' - Enabled: true - SafeAutoCorrect: false - VersionAdded: '0.50' - VersionChanged: '1.22' - -Lint/CircularArgumentReference: - Description: "Default values in optional keyword arguments and optional ordinal arguments should not refer back to the name of the argument." - Enabled: true - VersionAdded: '0.33' - -Lint/ConstantDefinitionInBlock: - Description: 'Do not define constants within a block.' - StyleGuide: '#no-constant-definition-in-block' - Enabled: true - VersionAdded: '0.91' - VersionChanged: '1.3' - # `enums` for Typed Enums via T::Enum in Sorbet. - # https://sorbet.org/docs/tenum - AllowedMethods: - - enums - -Lint/ConstantOverwrittenInRescue: - Description: 'Checks for overwriting an exception with an exception result by use `rescue =>`.' - Enabled: pending - VersionAdded: '1.31' - -Lint/ConstantResolution: - Description: 'Check that constants are fully qualified with `::`.' - Enabled: false - VersionAdded: '0.86' - # Restrict this cop to only looking at certain names - Only: [] - # Restrict this cop from only looking at certain names - Ignore: [] - -Lint/Debugger: - Description: 'Check for debugger calls.' - Enabled: true - VersionAdded: '0.14' - VersionChanged: '1.46' - DebuggerMethods: - # Groups are available so that a specific group can be disabled in - # a user's configuration, but are otherwise not significant. - Kernel: - - binding.irb - - Kernel.binding.irb - Byebug: - - byebug - - remote_byebug - - Kernel.byebug - - Kernel.remote_byebug - Capybara: - - save_and_open_page - - save_and_open_screenshot - debug.rb: - - binding.b - - binding.break - - Kernel.binding.b - - Kernel.binding.break - Pry: - - binding.pry - - binding.remote_pry - - binding.pry_remote - - Kernel.binding.pry - - Kernel.binding.remote_pry - - Kernel.binding.pry_remote - - Pry.rescue - - pry - Rails: - - debugger - - Kernel.debugger - RubyJard: - - jard - WebConsole: - - binding.console - -Lint/DeprecatedClassMethods: - Description: 'Check for deprecated class method calls.' - Enabled: true - VersionAdded: '0.19' - -Lint/DeprecatedConstants: - Description: 'Checks for deprecated constants.' - Enabled: pending - VersionAdded: '1.8' - VersionChanged: '1.40' - # You can configure deprecated constants. - # If there is an alternative method, you can set alternative value as `Alternative`. - # And you can set the deprecated version as `DeprecatedVersion`. - # These options can be omitted if they are not needed. - # - # DeprecatedConstants: - # 'DEPRECATED_CONSTANT': - # Alternative: 'alternative_value' - # DeprecatedVersion: 'deprecated_version' - # - DeprecatedConstants: - 'NIL': - Alternative: 'nil' - DeprecatedVersion: '2.4' - 'TRUE': - Alternative: 'true' - DeprecatedVersion: '2.4' - 'FALSE': - Alternative: 'false' - DeprecatedVersion: '2.4' - 'Net::HTTPServerException': - Alternative: 'Net::HTTPClientException' - DeprecatedVersion: '2.6' - 'Random::DEFAULT': - Alternative: 'Random.new' - DeprecatedVersion: '3.0' - 'Struct::Group': - Alternative: 'Etc::Group' - DeprecatedVersion: '3.0' - 'Struct::Passwd': - Alternative: 'Etc::Passwd' - DeprecatedVersion: '3.0' - -Lint/DeprecatedOpenSSLConstant: - Description: "Don't use algorithm constants for `OpenSSL::Cipher` and `OpenSSL::Digest`." - Enabled: true - VersionAdded: '0.84' - -Lint/DisjunctiveAssignmentInConstructor: - Description: 'In constructor, plain assignment is preferred over disjunctive.' - Enabled: true - Safe: false - VersionAdded: '0.62' - VersionChanged: '0.88' - -Lint/DuplicateBranch: - Description: Checks that there are no repeated bodies within `if/unless`, `case-when` and `rescue` constructs. - Enabled: pending - VersionAdded: '1.3' - VersionChanged: '1.7' - IgnoreLiteralBranches: false - IgnoreConstantBranches: false - -Lint/DuplicateCaseCondition: - Description: 'Do not repeat values in case conditionals.' - Enabled: true - VersionAdded: '0.45' - -Lint/DuplicateElsifCondition: - Description: 'Do not repeat conditions used in if `elsif`.' - Enabled: true - VersionAdded: '0.88' - -Lint/DuplicateHashKey: - Description: 'Check for duplicate keys in hash literals.' - Enabled: true - VersionAdded: '0.34' - VersionChanged: '0.77' - -Lint/DuplicateMagicComment: - Description: 'Check for duplicated magic comments.' - Enabled: pending - VersionAdded: '1.37' - -Lint/DuplicateMatchPattern: - Description: 'Do not repeat patterns in `in` keywords.' - Enabled: pending - VersionAdded: '1.50' - -Lint/DuplicateMethods: - Description: 'Check for duplicate method definitions.' - Enabled: true - VersionAdded: '0.29' - -Lint/DuplicateRegexpCharacterClassElement: - Description: 'Checks for duplicate elements in Regexp character classes.' - Enabled: pending - VersionAdded: '1.1' - -Lint/DuplicateRequire: - Description: 'Check for duplicate `require`s and `require_relative`s.' - Enabled: true - SafeAutoCorrect: false - VersionAdded: '0.90' - VersionChanged: '1.28' - -Lint/DuplicateRescueException: - Description: 'Checks that there are no repeated exceptions used in `rescue` expressions.' - Enabled: true - VersionAdded: '0.89' - -Lint/EachWithObjectArgument: - Description: 'Check for immutable argument given to each_with_object.' - Enabled: true - VersionAdded: '0.31' - -Lint/ElseLayout: - Description: 'Check for odd code arrangement in an else block.' - Enabled: true - VersionAdded: '0.17' - VersionChanged: '1.2' - -Lint/EmptyBlock: - Description: 'Checks for blocks without a body.' - Enabled: pending - VersionAdded: '1.1' - VersionChanged: '1.15' - AllowComments: true - AllowEmptyLambdas: true - -Lint/EmptyClass: - Description: 'Checks for classes and metaclasses without a body.' - Enabled: pending - VersionAdded: '1.3' - AllowComments: false - -Lint/EmptyConditionalBody: - Description: 'Checks for the presence of `if`, `elsif` and `unless` branches without a body.' - Enabled: true - AutoCorrect: contextual - SafeAutoCorrect: false - AllowComments: true - VersionAdded: '0.89' - VersionChanged: '1.61' - -Lint/EmptyEnsure: - Description: 'Checks for empty ensure block.' - Enabled: true - AutoCorrect: contextual - VersionAdded: '0.10' - VersionChanged: '1.61' - -Lint/EmptyExpression: - Description: 'Checks for empty expressions.' - Enabled: true - VersionAdded: '0.45' - -Lint/EmptyFile: - Description: 'Enforces that Ruby source files are not empty.' - Enabled: true - AllowComments: true - VersionAdded: '0.90' - -Lint/EmptyInPattern: - Description: 'Checks for the presence of `in` pattern branches without a body.' - Enabled: pending - AllowComments: true - VersionAdded: '1.16' - -Lint/EmptyInterpolation: - Description: 'Checks for empty string interpolation.' - Enabled: true - AutoCorrect: contextual - VersionAdded: '0.20' - VersionChanged: '1.61' - -Lint/EmptyWhen: - Description: 'Checks for `when` branches with empty bodies.' - Enabled: true - AllowComments: true - VersionAdded: '0.45' - VersionChanged: '0.83' - -Lint/EnsureReturn: - Description: 'Do not use return in an ensure block.' - StyleGuide: '#no-return-ensure' - Enabled: true - VersionAdded: '0.9' - VersionChanged: '0.83' - -Lint/ErbNewArguments: - Description: 'Use `:trim_mode` and `:eoutvar` keyword arguments to `ERB.new`.' - Enabled: true - VersionAdded: '0.56' - -Lint/FlipFlop: - Description: 'Checks for flip-flops.' - StyleGuide: '#no-flip-flops' - Enabled: true - VersionAdded: '0.16' - -Lint/FloatComparison: - Description: 'Checks for the presence of precise comparison of floating point numbers.' - StyleGuide: '#float-comparison' - Enabled: true - VersionAdded: '0.89' - -Lint/FloatOutOfRange: - Description: >- - Catches floating-point literals too large or small for Ruby to - represent. - Enabled: true - VersionAdded: '0.36' - -Lint/FormatParameterMismatch: - Description: 'The number of parameters to format/sprint must match the fields.' - Enabled: true - VersionAdded: '0.33' - -Lint/HashCompareByIdentity: - Description: 'Prefer using `Hash#compare_by_identity` than using `object_id` for keys.' - StyleGuide: '#identity-comparison' - Enabled: true - Safe: false - VersionAdded: '0.93' - -Lint/HeredocMethodCallPosition: - Description: >- - Checks for the ordering of a method call where - the receiver of the call is a HEREDOC. - Enabled: false - StyleGuide: '#heredoc-method-calls' - VersionAdded: '0.68' - -Lint/IdentityComparison: - Description: 'Prefer `equal?` over `==` when comparing `object_id`.' - Enabled: true - StyleGuide: '#identity-comparison' - VersionAdded: '0.91' - -Lint/ImplicitStringConcatenation: - Description: >- - Checks for adjacent string literals on the same line, which - could better be represented as a single string literal. - Enabled: true - VersionAdded: '0.36' - -Lint/IncompatibleIoSelectWithFiberScheduler: - Description: 'Checks for `IO.select` that is incompatible with Fiber Scheduler.' - Enabled: pending - SafeAutoCorrect: false - VersionAdded: '1.21' - VersionChanged: '1.24' - -Lint/IneffectiveAccessModifier: - Description: >- - Checks for attempts to use `private` or `protected` to set - the visibility of a class method, which does not work. - Enabled: true - VersionAdded: '0.36' - -Lint/InheritException: - Description: 'Avoid inheriting from the `Exception` class.' - Enabled: true - SafeAutoCorrect: false - VersionAdded: '0.41' - VersionChanged: '1.26' - # The default base class in favour of `Exception`. - EnforcedStyle: standard_error - SupportedStyles: - - standard_error - - runtime_error - -Lint/InterpolationCheck: - Description: 'Checks for interpolation in a single quoted string.' - Enabled: true - SafeAutoCorrect: false - VersionAdded: '0.50' - VersionChanged: '1.40' - -Lint/ItWithoutArgumentsInBlock: - Description: 'Checks uses of `it` calls without arguments in block.' - Reference: 'https://bugs.ruby-lang.org/issues/18980' - Enabled: pending - VersionAdded: '1.59' - -Lint/LambdaWithoutLiteralBlock: - Description: 'Checks uses of lambda without a literal block.' - Enabled: pending - VersionAdded: '1.8' - -Lint/LiteralAsCondition: - Description: 'Checks of literals used in conditions.' - Enabled: true - VersionAdded: '0.51' - -Lint/LiteralAssignmentInCondition: - Description: 'Checks for literal assignments in the conditions.' - Enabled: pending - VersionAdded: '1.58' - -Lint/LiteralInInterpolation: - Description: 'Checks for literals used in interpolation.' - Enabled: true - VersionAdded: '0.19' - VersionChanged: '0.32' - -Lint/Loop: - Description: >- - Use Kernel#loop with break rather than begin/end/until or - begin/end/while for post-loop tests. - StyleGuide: '#loop-with-break' - Enabled: true - VersionAdded: '0.9' - VersionChanged: '1.3' - Safe: false - -Lint/MissingCopEnableDirective: - Description: 'Checks for a `# rubocop:enable` after `# rubocop:disable`.' - Enabled: true - VersionAdded: '0.52' - # Maximum number of consecutive lines the cop can be disabled for. - # 0 allows only single-line disables - # 1 would mean the maximum allowed is the following: - # # rubocop:disable SomeCop - # a = 1 - # # rubocop:enable SomeCop - # .inf for any size - MaximumRangeSize: .inf - -Lint/MissingSuper: - Description: >- - Checks for the presence of constructors and lifecycle callbacks - without calls to `super`. - Enabled: true - AllowedParentClasses: [] - VersionAdded: '0.89' - VersionChanged: '1.4' - -Lint/MixedCaseRange: - Description: 'Checks for mixed-case character ranges since they include likely unintended characters.' - Enabled: pending - SafeAutoCorrect: false - VersionAdded: '1.53' - -Lint/MixedRegexpCaptureTypes: - Description: 'Do not mix named captures and numbered captures in a Regexp literal.' - Enabled: true - VersionAdded: '0.85' - -Lint/MultipleComparison: - Description: "Use `&&` operator to compare multiple values." - Enabled: true - VersionAdded: '0.47' - VersionChanged: '1.1' - -Lint/NestedMethodDefinition: - Description: 'Do not use nested method definitions.' - StyleGuide: '#no-nested-methods' - Enabled: true - AllowedMethods: [] - AllowedPatterns: [] - VersionAdded: '0.32' - -Lint/NestedPercentLiteral: - Description: 'Checks for nested percent literals.' - Enabled: true - VersionAdded: '0.52' - -Lint/NextWithoutAccumulator: - Description: >- - Do not omit the accumulator when calling `next` - in a `reduce`/`inject` block. - Enabled: true - VersionAdded: '0.36' - -Lint/NoReturnInBeginEndBlocks: - Description: 'Do not `return` inside `begin..end` blocks in assignment contexts.' - Enabled: pending - VersionAdded: '1.2' - -Lint/NonAtomicFileOperation: - Description: Checks for non-atomic file operations. - StyleGuide: '#atomic-file-operations' - Enabled: pending - VersionAdded: '1.31' - SafeAutoCorrect: false - -Lint/NonDeterministicRequireOrder: - Description: 'Always sort arrays returned by Dir.glob when requiring files.' - Enabled: true - VersionAdded: '0.78' - Safe: false - -Lint/NonLocalExitFromIterator: - Description: 'Do not use return in iterator to cause non-local exit.' - Enabled: true - VersionAdded: '0.30' - -Lint/NumberConversion: - Description: 'Checks unsafe usage of number conversion methods.' - Enabled: false - VersionAdded: '0.53' - VersionChanged: '1.1' - SafeAutoCorrect: false - AllowedMethods: [] - AllowedPatterns: [] - IgnoredClasses: - - Time - - DateTime - -Lint/NumberedParameterAssignment: - Description: 'Checks for uses of numbered parameter assignment.' - Enabled: pending - VersionAdded: '1.9' - -Lint/OrAssignmentToConstant: - Description: 'Checks unintended or-assignment to constant.' - Enabled: pending - Safe: false - VersionAdded: '1.9' - -Lint/OrderedMagicComments: - Description: 'Checks the proper ordering of magic comments and whether a magic comment is not placed before a shebang.' - Enabled: true - SafeAutoCorrect: false - VersionAdded: '0.53' - VersionChanged: '1.37' - -Lint/OutOfRangeRegexpRef: - Description: 'Checks for out of range reference for Regexp because it always returns nil.' - Enabled: true - Safe: false - VersionAdded: '0.89' - -Lint/ParenthesesAsGroupedExpression: - Description: >- - Checks for method calls with a space before the opening - parenthesis. - StyleGuide: '#parens-no-spaces' - Enabled: true - VersionAdded: '0.12' - VersionChanged: '0.83' - -Lint/PercentStringArray: - Description: >- - Checks for unwanted commas and quotes in %w/%W literals. - Enabled: true - Safe: false - VersionAdded: '0.41' - -Lint/PercentSymbolArray: - Description: >- - Checks for unwanted commas and colons in %i/%I literals. - Enabled: true - VersionAdded: '0.41' - -Lint/RaiseException: - Description: Checks for `raise` or `fail` statements which are raising `Exception` class. - StyleGuide: '#raise-exception' - Enabled: true - Safe: false - VersionAdded: '0.81' - VersionChanged: '0.86' - AllowedImplicitNamespaces: - - 'Gem' - -Lint/RandOne: - Description: >- - Checks for `rand(1)` calls. Such calls always return `0` - and most likely a mistake. - Enabled: true - VersionAdded: '0.36' - -Lint/RedundantCopDisableDirective: - Description: >- - Checks for rubocop:disable comments that can be removed. - Note: this cop is not disabled when disabling all cops. - It must be explicitly disabled. - Enabled: true - VersionAdded: '0.76' - -Lint/RedundantCopEnableDirective: - Description: Checks for rubocop:enable comments that can be removed. - Enabled: true - VersionAdded: '0.76' - -Lint/RedundantDirGlobSort: - Description: 'Checks for redundant `sort` method to `Dir.glob` and `Dir[]`.' - Enabled: pending - VersionAdded: '1.8' - VersionChanged: '1.26' - SafeAutoCorrect: false - -Lint/RedundantRegexpQuantifiers: - Description: 'Checks for redundant quantifiers in Regexps.' - Enabled: pending - VersionAdded: '1.53' - -Lint/RedundantRequireStatement: - Description: 'Checks for unnecessary `require` statement.' - Enabled: true - SafeAutoCorrect: false - VersionAdded: '0.76' - VersionChanged: '1.57' - -Lint/RedundantSafeNavigation: - Description: 'Checks for redundant safe navigation calls.' - Enabled: true - VersionAdded: '0.93' - AllowedMethods: - - instance_of? - - kind_of? - - is_a? - - eql? - - respond_to? - - equal? - Safe: false - -Lint/RedundantSplatExpansion: - Description: 'Checks for splat unnecessarily being called on literals.' - Enabled: true - VersionAdded: '0.76' - VersionChanged: '1.7' - AllowPercentLiteralArrayArgument: true - -Lint/RedundantStringCoercion: - Description: 'Checks for Object#to_s usage in string interpolation.' - StyleGuide: '#no-to-s' - Enabled: true - VersionAdded: '0.19' - VersionChanged: '0.77' - -Lint/RedundantWithIndex: - Description: 'Checks for redundant `with_index`.' - Enabled: true - VersionAdded: '0.50' - -Lint/RedundantWithObject: - Description: 'Checks for redundant `with_object`.' - Enabled: true - VersionAdded: '0.51' - -Lint/RefinementImportMethods: - Description: 'Use `Refinement#import_methods` when using `include` or `prepend` in `refine` block.' - Enabled: pending - SafeAutoCorrect: false - VersionAdded: '1.27' - -Lint/RegexpAsCondition: - Description: >- - Do not use regexp literal as a condition. - The regexp literal matches `$_` implicitly. - Enabled: true - VersionAdded: '0.51' - VersionChanged: '0.86' - -Lint/RequireParentheses: - Description: >- - Use parentheses in the method call to avoid confusion - about precedence. - Enabled: true - VersionAdded: '0.18' - -Lint/RequireRangeParentheses: - Description: 'Checks that a range literal is enclosed in parentheses when the end of the range is at a line break.' - Enabled: pending - VersionAdded: '1.32' - -Lint/RequireRelativeSelfPath: - Description: 'Checks for uses a file requiring itself with `require_relative`.' - Enabled: pending - VersionAdded: '1.22' - -Lint/RescueException: - Description: 'Avoid rescuing the Exception class.' - StyleGuide: '#no-blind-rescues' - Enabled: true - VersionAdded: '0.9' - VersionChanged: '0.27' - -Lint/RescueType: - Description: 'Avoid rescuing from non constants that could result in a `TypeError`.' - Enabled: true - VersionAdded: '0.49' - -Lint/ReturnInVoidContext: - Description: 'Checks for return in void context.' - Enabled: true - VersionAdded: '0.50' - -Lint/SafeNavigationChain: - Description: 'Do not chain ordinary method call after safe navigation operator.' - Enabled: true - VersionAdded: '0.47' - VersionChanged: '0.77' - AllowedMethods: - - present? - - blank? - - presence - - try - - try! - - in? - -Lint/SafeNavigationConsistency: - Description: >- - Check to make sure that if safe navigation is used for a method - call in an `&&` or `||` condition that safe navigation is used - for all method calls on that same object. - Enabled: true - VersionAdded: '0.55' - VersionChanged: '0.77' - AllowedMethods: - - present? - - blank? - - presence - - try - - try! - -Lint/SafeNavigationWithEmpty: - Description: 'Avoid `foo&.empty?` in conditionals.' - Enabled: true - VersionAdded: '0.62' - VersionChanged: '0.87' - -Lint/ScriptPermission: - Description: 'Grant script file execute permission.' - Enabled: true - VersionAdded: '0.49' - VersionChanged: '0.50' - -Lint/SelfAssignment: - Description: 'Checks for self-assignments.' - Enabled: true - VersionAdded: '0.89' - -Lint/SendWithMixinArgument: - Description: 'Checks for `send` method when using mixin.' - Enabled: true - VersionAdded: '0.75' - -Lint/ShadowedArgument: - Description: 'Avoid reassigning arguments before they were used.' - Enabled: true - VersionAdded: '0.52' - IgnoreImplicitReferences: false - - -Lint/ShadowedException: - Description: >- - Avoid rescuing a higher level exception - before a lower level exception. - Enabled: true - VersionAdded: '0.41' - -Lint/ShadowingOuterLocalVariable: - Description: >- - Do not use the same name as outer local variable - for block arguments or block local variables. - Enabled: true - VersionAdded: '0.9' - -Lint/StructNewOverride: - Description: 'Disallow overriding the `Struct` built-in methods via `Struct.new`.' - Enabled: true - VersionAdded: '0.81' - -Lint/SuppressedException: - Description: "Don't suppress exceptions." - StyleGuide: '#dont-hide-exceptions' - Enabled: true - AllowComments: true - AllowNil: true - VersionAdded: '0.9' - VersionChanged: '1.12' - -Lint/SymbolConversion: - Description: 'Checks for unnecessary symbol conversions.' - Enabled: pending - VersionAdded: '1.9' - VersionChanged: '1.16' - EnforcedStyle: strict - SupportedStyles: - - strict - - consistent - -Lint/Syntax: - Description: 'Checks for syntax errors.' - Enabled: true - VersionAdded: '0.9' - -Lint/ToEnumArguments: - Description: 'Ensures that `to_enum`/`enum_for`, called for the current method, has correct arguments.' - Enabled: pending - VersionAdded: '1.1' - -Lint/ToJSON: - Description: 'Ensure #to_json includes an optional argument.' - Enabled: true - VersionAdded: '0.66' - -Lint/TopLevelReturnWithArgument: - Description: 'Detects top level return statements with argument.' - Enabled: true - VersionAdded: '0.89' - # These codes are `eval`-ed in method and their return values may be used. - Exclude: - - '**/*.jb' - -Lint/TrailingCommaInAttributeDeclaration: - Description: 'Checks for trailing commas in attribute declarations.' - Enabled: true - AutoCorrect: contextual - VersionAdded: '0.90' - VersionChanged: '1.61' - -Lint/TripleQuotes: - Description: 'Checks for useless triple quote constructs.' - Enabled: pending - VersionAdded: '1.9' - -Lint/UnderscorePrefixedVariableName: - Description: 'Do not use prefix `_` for a variable that is used.' - Enabled: true - VersionAdded: '0.21' - AllowKeywordBlockArguments: false - -Lint/UnexpectedBlockArity: - Description: 'Looks for blocks that have fewer arguments that the calling method expects.' - Enabled: pending - Safe: false - VersionAdded: '1.5' - Methods: - chunk_while: 2 - each_with_index: 2 - each_with_object: 2 - inject: 2 - max: 2 - min: 2 - minmax: 2 - reduce: 2 - slice_when: 2 - sort: 2 - -Lint/UnifiedInteger: - Description: 'Use Integer instead of Fixnum or Bignum.' - Enabled: true - VersionAdded: '0.43' - -Lint/UnmodifiedReduceAccumulator: - Description: Checks for `reduce` or `inject` blocks that do not update the accumulator each iteration. - Enabled: pending - VersionAdded: '1.1' - VersionChanged: '1.5' - -Lint/UnreachableCode: - Description: 'Unreachable code.' - Enabled: true - VersionAdded: '0.9' - -Lint/UnreachableLoop: - Description: 'Checks for loops that will have at most one iteration.' - Enabled: true - VersionAdded: '0.89' - VersionChanged: '1.7' - AllowedPatterns: - # RSpec uses `times` in its message expectations - # eg. `exactly(2).times` - - !ruby/regexp /(exactly|at_least|at_most)\(\d+\)\.times/ - -Lint/UnusedBlockArgument: - Description: 'Checks for unused block arguments.' - StyleGuide: '#underscore-unused-vars' - Enabled: true - AutoCorrect: contextual - VersionAdded: '0.21' - VersionChanged: '1.61' - IgnoreEmptyBlocks: true - AllowUnusedKeywordArguments: false - -Lint/UnusedMethodArgument: - Description: 'Checks for unused method arguments.' - StyleGuide: '#underscore-unused-vars' - Enabled: true - AutoCorrect: contextual - VersionAdded: '0.21' - VersionChanged: '1.61' - AllowUnusedKeywordArguments: false - IgnoreEmptyMethods: true - IgnoreNotImplementedMethods: true - -Lint/UriEscapeUnescape: - Description: >- - `URI.escape` method is obsolete and should not be used. Instead, use - `CGI.escape`, `URI.encode_www_form` or `URI.encode_www_form_component` - depending on your specific use case. - Also `URI.unescape` method is obsolete and should not be used. Instead, use - `CGI.unescape`, `URI.decode_www_form` or `URI.decode_www_form_component` - depending on your specific use case. - Enabled: true - VersionAdded: '0.50' - -Lint/UriRegexp: - Description: 'Use `URI::DEFAULT_PARSER.make_regexp` instead of `URI.regexp`.' - Enabled: true - VersionAdded: '0.50' - -Lint/UselessAccessModifier: - Description: 'Checks for useless access modifiers.' - Enabled: true - AutoCorrect: contextual - VersionAdded: '0.20' - VersionChanged: '1.61' - ContextCreatingMethods: [] - MethodCreatingMethods: [] - -Lint/UselessAssignment: - Description: 'Checks for useless assignment to a local variable.' - StyleGuide: '#underscore-unused-vars' - Enabled: true - AutoCorrect: contextual - VersionAdded: '0.11' - VersionChanged: '1.61' - SafeAutoCorrect: false - -Lint/UselessElseWithoutRescue: - Description: 'Checks for useless `else` in `begin..end` without `rescue`.' - Enabled: true - VersionAdded: '0.17' - VersionChanged: '1.31' - -Lint/UselessMethodDefinition: - Description: 'Checks for useless method definitions.' - Enabled: true - AutoCorrect: contextual - VersionAdded: '0.90' - VersionChanged: '1.61' - Safe: false - -Lint/UselessRescue: - Description: 'Checks for useless `rescue`s.' - Enabled: pending - VersionAdded: '1.43' - -Lint/UselessRuby2Keywords: - Description: 'Finds unnecessary uses of `ruby2_keywords`.' - Enabled: pending - VersionAdded: '1.23' - -Lint/UselessSetterCall: - Description: 'Checks for useless setter call to a local variable.' - Enabled: true - Safe: false - VersionAdded: '0.13' - VersionChanged: '1.2' - -Lint/UselessTimes: - Description: 'Checks for useless `Integer#times` calls.' - Enabled: true - Safe: false - AutoCorrect: contextual - VersionAdded: '0.91' - VersionChanged: '1.61' - -Lint/Void: - Description: 'Possible use of operator/literal/variable in void context.' - Enabled: true - AutoCorrect: contextual - VersionAdded: '0.9' - VersionChanged: '1.61' - CheckForMethodsWithNoSideEffects: false - -#################### Metrics ############################### - -Metrics/AbcSize: - Description: >- - A calculated magnitude based on number of assignments, - branches, and conditions. - Reference: - - http://c2.com/cgi/wiki?AbcMetric - - https://en.wikipedia.org/wiki/ABC_Software_Metric - Enabled: true - VersionAdded: '0.27' - VersionChanged: '1.5' - # The ABC size is a calculated magnitude, so this number can be an Integer or - # a Float. - AllowedMethods: [] - AllowedPatterns: [] - CountRepeatedAttributes: true - Max: 17 - -Metrics/BlockLength: - Description: 'Avoid long blocks with many lines.' - Enabled: true - VersionAdded: '0.44' - VersionChanged: '1.5' - CountComments: false # count full line comments? - Max: 25 - CountAsOne: [] - AllowedMethods: - # By default, exclude the `#refine` method, as it tends to have larger - # associated blocks. - - refine - AllowedPatterns: [] - Exclude: - - '**/*.gemspec' - -Metrics/BlockNesting: - Description: 'Avoid excessive block nesting.' - StyleGuide: '#three-is-the-number-thou-shalt-count' - Enabled: true - VersionAdded: '0.25' - VersionChanged: '0.47' - CountBlocks: false - Max: 3 - -Metrics/ClassLength: - Description: 'Avoid classes longer than 100 lines of code.' - Enabled: true - VersionAdded: '0.25' - VersionChanged: '0.87' - CountComments: false # count full line comments? - Max: 100 - CountAsOne: [] - -Metrics/CollectionLiteralLength: - Description: 'Checks for `Array` or `Hash` literals with many entries.' - Enabled: pending - VersionAdded: '1.47' - LengthThreshold: 250 - -# Avoid complex methods. -Metrics/CyclomaticComplexity: - Description: >- - A complexity metric that is strongly correlated to the number - of test cases needed to validate a method. - Enabled: true - VersionAdded: '0.25' - VersionChanged: '0.81' - AllowedMethods: [] - AllowedPatterns: [] - Max: 7 - -Metrics/MethodLength: - Description: 'Avoid methods longer than 10 lines of code.' - StyleGuide: '#short-methods' - Enabled: true - VersionAdded: '0.25' - VersionChanged: '1.5' - CountComments: false # count full line comments? - Max: 10 - CountAsOne: [] - AllowedMethods: [] - AllowedPatterns: [] - -Metrics/ModuleLength: - Description: 'Avoid modules longer than 100 lines of code.' - Enabled: true - VersionAdded: '0.31' - VersionChanged: '0.87' - CountComments: false # count full line comments? - Max: 100 - CountAsOne: [] - -Metrics/ParameterLists: - Description: 'Avoid parameter lists longer than three or four parameters.' - StyleGuide: '#too-many-params' - Enabled: true - VersionAdded: '0.25' - VersionChanged: '1.5' - Max: 5 - CountKeywordArgs: true - MaxOptionalParameters: 3 - -Metrics/PerceivedComplexity: - Description: >- - A complexity metric geared towards measuring complexity for a - human reader. - Enabled: true - VersionAdded: '0.25' - VersionChanged: '0.81' - AllowedMethods: [] - AllowedPatterns: [] - Max: 8 - -################## Migration ############################# - -Migration/DepartmentName: - Description: >- - Check that cop names in rubocop:disable (etc) comments are - given with department name. - Enabled: true - VersionAdded: '0.75' - -#################### Naming ############################## - -Naming/AccessorMethodName: - Description: Check the naming of accessor methods for get_/set_. - StyleGuide: '#accessor_mutator_method_names' - Enabled: true - VersionAdded: '0.50' - -Naming/AsciiIdentifiers: - Description: 'Use only ascii symbols in identifiers and constants.' - StyleGuide: '#english-identifiers' - Enabled: true - VersionAdded: '0.50' - VersionChanged: '0.87' - AsciiConstants: true - -Naming/BinaryOperatorParameterName: - Description: 'When defining binary operators, name the argument other.' - StyleGuide: '#other-arg' - Enabled: true - VersionAdded: '0.50' - VersionChanged: '1.2' - -Naming/BlockForwarding: - Description: 'Use anonymous block forwarding.' - StyleGuide: '#block-forwarding' - Enabled: pending - VersionAdded: '1.24' - EnforcedStyle: anonymous - SupportedStyles: - - anonymous - - explicit - BlockForwardingName: block - -Naming/BlockParameterName: - Description: >- - Checks for block parameter names that contain capital letters, - end in numbers, or do not meet a minimal length. - Enabled: true - VersionAdded: '0.53' - VersionChanged: '0.77' - # Parameter names may be equal to or greater than this value - MinNameLength: 1 - AllowNamesEndingInNumbers: true - # Allowed names that will not register an offense - AllowedNames: [] - # Forbidden names that will register an offense - ForbiddenNames: [] - -Naming/ClassAndModuleCamelCase: - Description: 'Use CamelCase for classes and modules.' - StyleGuide: '#camelcase-classes' - Enabled: true - VersionAdded: '0.50' - VersionChanged: '0.85' - # Allowed class/module names can be specified here. - # These can be full or part of the name. - AllowedNames: - - module_parent - -Naming/ConstantName: - Description: 'Constants should use SCREAMING_SNAKE_CASE.' - StyleGuide: '#screaming-snake-case' - Enabled: true - VersionAdded: '0.50' - -Naming/FileName: - Description: 'Use snake_case for source file names.' - StyleGuide: '#snake-case-files' - Enabled: true - VersionAdded: '0.50' - VersionChanged: '1.23' - # Camel case file names listed in `AllCops:Include` and all file names listed - # in `AllCops:Exclude` are excluded by default. Add extra excludes here. - Exclude: [] - # When `true`, requires that each source file should define a class or module - # with a name which matches the file name (converted to ... case). - # It further expects it to be nested inside modules which match the names - # of subdirectories in its path. - ExpectMatchingDefinition: false - # When `false`, changes the behavior of ExpectMatchingDefinition to match only - # whether each source file's class or module name matches the file name -- - # not whether the nested module hierarchy matches the subdirectory path. - CheckDefinitionPathHierarchy: true - # paths that are considered root directories, for example "lib" in most ruby projects - # or "app/models" in rails projects - CheckDefinitionPathHierarchyRoots: - - lib - - spec - - test - - src - # If non-`nil`, expect all source file names to match the following regex. - # Only the file name itself is matched, not the entire file path. - # Use anchors as necessary if you want to match the entire name rather than - # just a part of it. - Regex: ~ - # With `IgnoreExecutableScripts` set to `true`, this cop does not - # report offending filenames for executable scripts (i.e. source - # files with a shebang in the first line). - IgnoreExecutableScripts: true - AllowedAcronyms: - - CLI - - DSL - - ACL - - API - - ASCII - - CPU - - CSS - - DNS - - EOF - - GUID - - HTML - - HTTP - - HTTPS - - ID - - IP - - JSON - - LHS - - QPS - - RAM - - RHS - - RPC - - SLA - - SMTP - - SQL - - SSH - - TCP - - TLS - - TTL - - UDP - - UI - - UID - - UUID - - URI - - URL - - UTF8 - - VM - - XML - - XMPP - - XSRF - - XSS - -Naming/HeredocDelimiterCase: - Description: 'Use configured case for heredoc delimiters.' - StyleGuide: '#heredoc-delimiters' - Enabled: true - VersionAdded: '0.50' - VersionChanged: '1.2' - EnforcedStyle: uppercase - SupportedStyles: - - lowercase - - uppercase - -Naming/HeredocDelimiterNaming: - Description: 'Use descriptive heredoc delimiters.' - StyleGuide: '#heredoc-delimiters' - Enabled: true - VersionAdded: '0.50' - ForbiddenDelimiters: - - !ruby/regexp '/(^|\s)(EO[A-Z]{1}|END)(\s|$)/i' - -Naming/InclusiveLanguage: - Description: 'Recommend the use of inclusive language instead of problematic terms.' - Enabled: false - VersionAdded: '1.18' - VersionChanged: '1.49' - CheckIdentifiers: true - CheckConstants: true - CheckVariables: true - CheckStrings: false - CheckSymbols: true - CheckComments: true - CheckFilepaths: true - FlaggedTerms: - whitelist: - Regex: !ruby/regexp '/white[-_\s]?list/' - Suggestions: - - allowlist - - permit - blacklist: - Regex: !ruby/regexp '/black[-_\s]?list/' - Suggestions: - - denylist - - block - slave: - WholeWord: true - Suggestions: ['replica', 'secondary', 'follower'] - -Naming/MemoizedInstanceVariableName: - Description: >- - Memoized method name should match memo instance variable name. - Enabled: true - VersionAdded: '0.53' - VersionChanged: '1.2' - EnforcedStyleForLeadingUnderscores: disallowed - SupportedStylesForLeadingUnderscores: - - disallowed - - required - - optional - Safe: false - -Naming/MethodName: - Description: 'Use the configured style when naming methods.' - StyleGuide: '#snake-case-symbols-methods-vars' - Enabled: true - VersionAdded: '0.50' - EnforcedStyle: snake_case - SupportedStyles: - - snake_case - - camelCase - # Method names matching patterns are always allowed. - # - # AllowedPatterns: - # - '\A\s*onSelectionBulkChange\s*' - # - '\A\s*onSelectionCleared\s*' - # - AllowedPatterns: [] - -Naming/MethodParameterName: - Description: >- - Checks for method parameter names that contain capital letters, - end in numbers, or do not meet a minimal length. - Enabled: true - VersionAdded: '0.53' - VersionChanged: '0.77' - # Parameter names may be equal to or greater than this value - MinNameLength: 3 - AllowNamesEndingInNumbers: true - # Allowed names that will not register an offense - AllowedNames: - - as - - at - - by - - cc - - db - - id - - if - - in - - io - - ip - - of - - 'on' - - os - - pp - - to - # Forbidden names that will register an offense - ForbiddenNames: [] - -Naming/PredicateName: - Description: 'Check the names of predicate methods.' - StyleGuide: '#bool-methods-qmark' - Enabled: true - VersionAdded: '0.50' - VersionChanged: '0.77' - # Predicate name prefixes. - NamePrefix: - - is_ - - has_ - - have_ - # Predicate name prefixes that should be removed. - ForbiddenPrefixes: - - is_ - - has_ - - have_ - # Predicate names which, despite having a forbidden prefix, or no `?`, - # should still be accepted - AllowedMethods: - - is_a? - # Method definition macros for dynamically generated methods. - MethodDefinitionMacros: - - define_method - - define_singleton_method - # Exclude Rspec specs because there is a strong convention to write spec - # helpers in the form of `have_something` or `be_something`. - Exclude: - - 'spec/**/*' - -Naming/RescuedExceptionsVariableName: - Description: 'Use consistent rescued exceptions variables naming.' - Enabled: true - VersionAdded: '0.67' - VersionChanged: '0.68' - PreferredName: e - -Naming/VariableName: - Description: 'Use the configured style when naming variables.' - StyleGuide: '#snake-case-symbols-methods-vars' - Enabled: true - VersionAdded: '0.50' - VersionChanged: '1.8' - EnforcedStyle: snake_case - SupportedStyles: - - snake_case - - camelCase - AllowedIdentifiers: [] - AllowedPatterns: [] - -Naming/VariableNumber: - Description: 'Use the configured style when numbering symbols, methods and variables.' - StyleGuide: '#snake-case-symbols-methods-vars-with-numbers' - Enabled: true - VersionAdded: '0.50' - VersionChanged: '1.4' - EnforcedStyle: normalcase - SupportedStyles: - - snake_case - - normalcase - - non_integer - CheckMethodNames: true - CheckSymbols: true - AllowedIdentifiers: - - capture3 # Open3.capture3 - - iso8601 # Time#iso8601 - - rfc1123_date # CGI.rfc1123_date - - rfc822 # Time#rfc822 - - rfc2822 # Time#rfc2822 - - rfc3339 # DateTime.rfc3339 - - x86_64 # Allowed by default as an underscore separated CPU architecture name - AllowedPatterns: [] - -#################### Security ############################## - -Security/CompoundHash: - Description: 'When overwriting Object#hash to combine values, prefer delegating to Array#hash over writing a custom implementation.' - Enabled: pending - Safe: false - VersionAdded: '1.28' - VersionChanged: '1.51' - -Security/Eval: - Description: 'The use of eval represents a serious security risk.' - Enabled: true - VersionAdded: '0.47' - -Security/IoMethods: - Description: >- - Checks for the first argument to `IO.read`, `IO.binread`, `IO.write`, `IO.binwrite`, - `IO.foreach`, and `IO.readlines`. - Enabled: pending - Safe: false - VersionAdded: '1.22' - -Security/JSONLoad: - Description: >- - Prefer usage of `JSON.parse` over `JSON.load` due to potential - security issues. See reference for more information. - Reference: 'https://ruby-doc.org/stdlib-2.7.0/libdoc/json/rdoc/JSON.html#method-i-load' - Enabled: true - VersionAdded: '0.43' - VersionChanged: '1.22' - # Autocorrect here will change to a method that may cause crashes depending - # on the value of the argument. - SafeAutoCorrect: false - -Security/MarshalLoad: - Description: >- - Avoid using of `Marshal.load` or `Marshal.restore` due to potential - security issues. See reference for more information. - Reference: 'https://ruby-doc.org/core-2.7.0/Marshal.html#module-Marshal-label-Security+considerations' - Enabled: true - VersionAdded: '0.47' - -Security/Open: - Description: 'The use of `Kernel#open` and `URI.open` represent a serious security risk.' - Enabled: true - VersionAdded: '0.53' - VersionChanged: '1.0' - Safe: false - -Security/YAMLLoad: - Description: >- - Prefer usage of `YAML.safe_load` over `YAML.load` due to potential - security issues. See reference for more information. - Reference: 'https://ruby-doc.org/stdlib-2.7.0/libdoc/yaml/rdoc/YAML.html#module-YAML-label-Security' - Enabled: true - VersionAdded: '0.47' - SafeAutoCorrect: false - -#################### Style ############################### - -Style/AccessModifierDeclarations: - Description: 'Checks style of how access modifiers are used.' - Enabled: true - VersionAdded: '0.57' - VersionChanged: '0.81' - EnforcedStyle: group - SupportedStyles: - - inline - - group - AllowModifiersOnSymbols: true - SafeAutoCorrect: false - -Style/AccessorGrouping: - Description: 'Checks for grouping of accessors in `class` and `module` bodies.' - Enabled: true - VersionAdded: '0.87' - EnforcedStyle: grouped - SupportedStyles: - # separated: each accessor goes in a separate statement. - # grouped: accessors are grouped into a single statement. - - separated - - grouped - -Style/Alias: - Description: 'Use alias instead of alias_method.' - StyleGuide: '#alias-method-lexically' - Enabled: true - VersionAdded: '0.9' - VersionChanged: '0.36' - EnforcedStyle: prefer_alias - SupportedStyles: - - prefer_alias - - prefer_alias_method - -Style/AndOr: - Description: 'Use &&/|| instead of and/or.' - StyleGuide: '#no-and-or-or' - Enabled: true - SafeAutoCorrect: false - VersionAdded: '0.9' - VersionChanged: '1.21' - # Whether `and` and `or` are banned only in conditionals (conditionals) - # or completely (always). - EnforcedStyle: conditionals - SupportedStyles: - - always - - conditionals - -Style/ArgumentsForwarding: - Description: 'Use arguments forwarding.' - StyleGuide: '#arguments-forwarding' - Enabled: pending - AllowOnlyRestArgument: true - UseAnonymousForwarding: true - RedundantRestArgumentNames: - - args - - arguments - RedundantKeywordRestArgumentNames: - - kwargs - - options - - opts - RedundantBlockArgumentNames: - - blk - - block - - proc - VersionAdded: '1.1' - VersionChanged: '1.58' - -Style/ArrayCoercion: - Description: >- - Use Array() instead of explicit Array check or [*var], when dealing - with a variable you want to treat as an Array, but you're not certain it's an array. - StyleGuide: '#array-coercion' - Safe: false - Enabled: false - VersionAdded: '0.88' - -Style/ArrayFirstLast: - Description: 'Use `arr.first` and `arr.last` instead of `arr[0]` and `arr[-1]`.' - Reference: '#first-and-last' - Enabled: false - VersionAdded: '1.58' - Safe: false - -Style/ArrayIntersect: - Description: 'Use `array1.intersect?(array2)` instead of `(array1 & array2).any?`.' - Enabled: 'pending' - Safe: false - VersionAdded: '1.40' - -Style/ArrayJoin: - Description: 'Use Array#join instead of Array#*.' - StyleGuide: '#array-join' - Enabled: true - VersionAdded: '0.20' - VersionChanged: '0.31' - -Style/AsciiComments: - Description: 'Use only ascii symbols in comments.' - StyleGuide: '#english-comments' - Enabled: false - VersionAdded: '0.9' - VersionChanged: '1.21' - AllowedChars: - - © - -Style/Attr: - Description: 'Checks for uses of Module#attr.' - StyleGuide: '#attr' - Enabled: true - VersionAdded: '0.9' - VersionChanged: '0.12' - -Style/AutoResourceCleanup: - Description: 'Suggests the usage of an auto resource cleanup version of a method (if available).' - Enabled: false - VersionAdded: '0.30' - -Style/BarePercentLiterals: - Description: 'Checks if usage of %() or %Q() matches configuration.' - StyleGuide: '#percent-q-shorthand' - Enabled: true - VersionAdded: '0.25' - EnforcedStyle: bare_percent - SupportedStyles: - - percent_q - - bare_percent - -Style/BeginBlock: - Description: 'Avoid the use of BEGIN blocks.' - StyleGuide: '#no-BEGIN-blocks' - Enabled: true - VersionAdded: '0.9' - -Style/BisectedAttrAccessor: - Description: >- - Checks for places where `attr_reader` and `attr_writer` - for the same method can be combined into single `attr_accessor`. - Enabled: true - VersionAdded: '0.87' - -Style/BlockComments: - Description: 'Do not use block comments.' - StyleGuide: '#no-block-comments' - Enabled: true - VersionAdded: '0.9' - VersionChanged: '0.23' - -Style/BlockDelimiters: - Description: >- - Avoid using {...} for multi-line blocks (multiline chaining is - always ugly). - Prefer {...} over do...end for single-line blocks. - StyleGuide: '#single-line-blocks' - Enabled: true - VersionAdded: '0.30' - VersionChanged: '0.35' - EnforcedStyle: line_count_based - SupportedStyles: - # The `line_count_based` style enforces braces around single line blocks and - # do..end around multi-line blocks. - - line_count_based - # The `semantic` style enforces braces around functional blocks, where the - # primary purpose of the block is to return a value and do..end for - # multi-line procedural blocks, where the primary purpose of the block is - # its side-effects. Single-line procedural blocks may only use do-end, - # unless AllowBracesOnProceduralOneLiners has a truthy value (see below). - # - # This looks at the usage of a block's method to determine its type (e.g. is - # the result of a `map` assigned to a variable or passed to another - # method) but exceptions are permitted in the `ProceduralMethods`, - # `FunctionalMethods` and `AllowedMethods` sections below. - - semantic - # The `braces_for_chaining` style enforces braces around single line blocks - # and do..end around multi-line blocks, except for multi-line blocks whose - # return value is being chained with another method (in which case braces - # are enforced). - - braces_for_chaining - # The `always_braces` style always enforces braces. - - always_braces - ProceduralMethods: - # Methods that are known to be procedural in nature but look functional from - # their usage, e.g. - # - # time = Benchmark.realtime do - # foo.bar - # end - # - # Here, the return value of the block is discarded but the return value of - # `Benchmark.realtime` is used. - - benchmark - - bm - - bmbm - - create - - each_with_object - - measure - - new - - realtime - - tap - - with_object - FunctionalMethods: - # Methods that are known to be functional in nature but look procedural from - # their usage, e.g. - # - # let(:foo) { Foo.new } - # - # Here, the return value of `Foo.new` is used to define a `foo` helper but - # doesn't appear to be used from the return value of `let`. - - let - - let! - - subject - - watch - AllowedMethods: - # Methods that can be either procedural or functional and cannot be - # categorised from their usage alone, e.g. - # - # foo = lambda do |x| - # puts "Hello, #{x}" - # end - # - # foo = lambda do |x| - # x * 100 - # end - # - # Here, it is impossible to tell from the return value of `lambda` whether - # the inner block's return value is significant. - - lambda - - proc - - it - AllowedPatterns: [] - # The AllowBracesOnProceduralOneLiners option is ignored unless the - # EnforcedStyle is set to `semantic`. If so: - # - # If AllowBracesOnProceduralOneLiners is unspecified, or set to any - # falsey value, then semantic purity is maintained, so one-line - # procedural blocks must use do-end, not braces. - # - # # bad - # collection.each { |element| puts element } - # - # # good - # collection.each do |element| puts element end - # - # If AllowBracesOnProceduralOneLiners is set to any truthy value, - # then one-line procedural blocks may use either style. - # - # # good - # collection.each { |element| puts element } - # - # # also good - # collection.each do |element| puts element end - AllowBracesOnProceduralOneLiners: false - # The BracesRequiredMethods overrides all other configurations except - # AllowedMethods. It can be used to enforce that all blocks for specific - # methods use braces. For example, you can use this to enforce Sorbet - # signatures use braces even when the rest of your codebase enforces - # the `line_count_based` style. - BracesRequiredMethods: [] - -Style/CaseEquality: - Description: 'Avoid explicit use of the case equality operator(===).' - StyleGuide: '#no-case-equality' - Enabled: true - VersionAdded: '0.9' - VersionChanged: '0.89' - # If `AllowOnConstant` option is enabled, the cop will ignore violations when the receiver of - # the case equality operator is a constant. - # - # # bad - # /string/ === "string" - # - # # good - # String === "string" - AllowOnConstant: false - # If `AllowOnSelfClass` option is enabled, the cop will ignore violations when the receiver of - # the case equality operator is `self.class`. - # - # # bad - # some_class === object - # - # # good - # self.class === object - AllowOnSelfClass: false - -Style/CaseLikeIf: - Description: 'Identifies places where `if-elsif` constructions can be replaced with `case-when`.' - StyleGuide: '#case-vs-if-else' - Enabled: true - Safe: false - VersionAdded: '0.88' - VersionChanged: '1.48' - # `MinBranchesCount` defines the number of branches `if` needs to have to trigger this cop. - MinBranchesCount: 3 - -Style/CharacterLiteral: - Description: 'Checks for uses of character literals.' - StyleGuide: '#no-character-literals' - Enabled: true - VersionAdded: '0.9' - -Style/ClassAndModuleChildren: - Description: 'Checks style of children classes and modules.' - StyleGuide: '#namespace-definition' - # Moving from compact to nested children requires knowledge of whether the - # outer parent is a module or a class. Moving from nested to compact requires - # verification that the outer parent is defined elsewhere. RuboCop does not - # have the knowledge to perform either operation safely and thus requires - # manual oversight. - SafeAutoCorrect: false - Enabled: true - VersionAdded: '0.19' - # - # Basically there are two different styles: - # - # `nested` - have each child on a separate line - # class Foo - # class Bar - # end - # end - # - # `compact` - combine definitions as much as possible - # class Foo::Bar - # end - # - # The compact style is only forced, for classes or modules with one child. - EnforcedStyle: nested - SupportedStyles: - - nested - - compact - -Style/ClassCheck: - Description: 'Enforces consistent use of `Object#is_a?` or `Object#kind_of?`.' - StyleGuide: '#is-a-vs-kind-of' - Enabled: true - VersionAdded: '0.24' - EnforcedStyle: is_a? - SupportedStyles: - - is_a? - - kind_of? - -Style/ClassEqualityComparison: - Description: 'Enforces the use of `Object#instance_of?` instead of class comparison for equality.' - StyleGuide: '#instance-of-vs-class-comparison' - Enabled: true - SafeAutoCorrect: false - VersionAdded: '0.93' - VersionChanged: '1.57' - AllowedMethods: - - == - - equal? - - eql? - AllowedPatterns: [] - -Style/ClassMethods: - Description: 'Use self when defining module/class methods.' - StyleGuide: '#def-self-class-methods' - Enabled: true - VersionAdded: '0.9' - VersionChanged: '0.20' - -Style/ClassMethodsDefinitions: - Description: 'Enforces using `def self.method_name` or `class << self` to define class methods.' - StyleGuide: '#def-self-class-methods' - Enabled: false - VersionAdded: '0.89' - EnforcedStyle: def_self - SupportedStyles: - - def_self - - self_class - -Style/ClassVars: - Description: 'Avoid the use of class variables.' - StyleGuide: '#no-class-vars' - Enabled: true - VersionAdded: '0.13' - -Style/CollectionCompact: - Description: 'Use `{Array,Hash}#{compact,compact!}` instead of custom logic to reject nils.' - Enabled: pending - Safe: false - VersionAdded: '1.2' - VersionChanged: '1.3' - AllowedReceivers: [] - -# Align with the style guide. -Style/CollectionMethods: - Description: 'Preferred collection methods.' - StyleGuide: '#map-find-select-reduce-include-size' - Enabled: false - VersionAdded: '0.9' - VersionChanged: '1.7' - Safe: false - # Mapping from undesired method to desired method - # e.g. to use `detect` over `find`: - # - # Style/CollectionMethods: - # PreferredMethods: - # find: detect - PreferredMethods: - collect: 'map' - collect!: 'map!' - collect_concat: 'flat_map' - inject: 'reduce' - detect: 'find' - find_all: 'select' - member?: 'include?' - # Methods in this array accept a final symbol as an implicit block - # eg. `inject(:+)` - MethodsAcceptingSymbol: - - inject - - reduce - -Style/ColonMethodCall: - Description: 'Do not use :: for method call.' - StyleGuide: '#double-colons' - Enabled: true - VersionAdded: '0.9' - -Style/ColonMethodDefinition: - Description: 'Do not use :: for defining class methods.' - StyleGuide: '#colon-method-definition' - Enabled: true - VersionAdded: '0.52' - -Style/CombinableLoops: - Description: >- - Checks for places where multiple consecutive loops over the same data - can be combined into a single loop. - Enabled: true - Safe: false - VersionAdded: '0.90' - -Style/CommandLiteral: - Description: 'Use `` or %x around command literals.' - StyleGuide: '#percent-x' - Enabled: true - VersionAdded: '0.30' - EnforcedStyle: backticks - # backticks: Always use backticks. - # percent_x: Always use `%x`. - # mixed: Use backticks on single-line commands, and `%x` on multi-line commands. - SupportedStyles: - - backticks - - percent_x - - mixed - # If `false`, the cop will always recommend using `%x` if one or more backticks - # are found in the command string. - AllowInnerBackticks: false - -# Checks formatting of special comments -Style/CommentAnnotation: - Description: >- - Checks formatting of special comments - (TODO, FIXME, OPTIMIZE, HACK, REVIEW, NOTE). - StyleGuide: '#annotate-keywords' - Enabled: true - VersionAdded: '0.10' - VersionChanged: '1.20' - Keywords: - - TODO - - FIXME - - OPTIMIZE - - HACK - - REVIEW - - NOTE - RequireColon: true - -Style/CommentedKeyword: - Description: 'Do not place comments on the same line as certain keywords.' - Enabled: true - SafeAutoCorrect: false - VersionAdded: '0.51' - VersionChanged: '1.19' - -Style/ComparableClamp: - Description: 'Enforces the use of `Comparable#clamp` instead of comparison by minimum and maximum.' - Enabled: pending - VersionAdded: '1.44' - -Style/ConcatArrayLiterals: - Description: 'Enforces the use of `Array#push(item)` instead of `Array#concat([item])` to avoid redundant array literals.' - Enabled: pending - Safe: false - VersionAdded: '1.41' - -Style/ConditionalAssignment: - Description: >- - Use the return value of `if` and `case` statements for - assignment to a variable and variable comparison instead - of assigning that variable inside of each branch. - Enabled: true - VersionAdded: '0.36' - VersionChanged: '0.47' - EnforcedStyle: assign_to_condition - SupportedStyles: - - assign_to_condition - - assign_inside_condition - # When configured to `assign_to_condition`, `SingleLineConditionsOnly` - # will only register an offense when all branches of a condition are - # a single line. - # When configured to `assign_inside_condition`, `SingleLineConditionsOnly` - # will only register an offense for assignment to a condition that has - # at least one multiline branch. - SingleLineConditionsOnly: true - IncludeTernaryExpressions: true - -Style/ConstantVisibility: - Description: >- - Check that class- and module constants have - visibility declarations. - Enabled: false - VersionAdded: '0.66' - VersionChanged: '1.10' - IgnoreModules: false - -# Checks that you have put a copyright in a comment before any code. -# -# You can override the default Notice in your .rubocop.yml file. -# -# In order to use autocorrect, you must supply a value for the -# `AutocorrectNotice` key that matches the regexp Notice. A blank -# `AutocorrectNotice` will cause an error during autocorrect. -# -# Autocorrect will add a copyright notice in a comment at the top -# of the file immediately after any shebang or encoding comments. -# -# Example rubocop.yml: -# -# Style/Copyright: -# Enabled: true -# Notice: 'Copyright (\(c\) )?2015 Yahoo! Inc' -# AutocorrectNotice: '# Copyright (c) 2015 Yahoo! Inc.' -# -Style/Copyright: - Description: 'Include a copyright notice in each file before any code.' - Enabled: false - VersionAdded: '0.30' - Notice: '^Copyright (\(c\) )?2[0-9]{3} .+' - AutocorrectNotice: '' - -Style/DataInheritance: - Description: 'Checks for inheritance from Data.define.' - StyleGuide: '#no-extend-data-define' - Enabled: pending - SafeAutoCorrect: false - VersionAdded: '1.49' - VersionChanged: '1.51' - -Style/DateTime: - Description: 'Use Time over DateTime.' - StyleGuide: '#date-time' - Enabled: false - VersionAdded: '0.51' - VersionChanged: '0.92' - SafeAutoCorrect: false - AllowCoercion: false - -Style/DefWithParentheses: - Description: 'Use def with parentheses when there are arguments.' - StyleGuide: '#method-parens' - Enabled: true - VersionAdded: '0.9' - VersionChanged: '0.12' - -Style/Dir: - Description: >- - Use the `__dir__` method to retrieve the canonicalized - absolute path to the current file. - Enabled: true - VersionAdded: '0.50' - -Style/DirEmpty: - Description: >- - Prefer to use `Dir.empty?('path/to/dir')` when checking if a directory is empty. - Enabled: pending - VersionAdded: '1.48' - -Style/DisableCopsWithinSourceCodeDirective: - Description: >- - Forbids disabling/enabling cops within source code. - Enabled: false - VersionAdded: '0.82' - VersionChanged: '1.9' - AllowedCops: [] - -Style/DocumentDynamicEvalDefinition: - Description: >- - When using `class_eval` (or other `eval`) with string interpolation, - add a comment block showing its appearance if interpolated. - StyleGuide: '#eval-comment-docs' - Enabled: pending - VersionAdded: '1.1' - VersionChanged: '1.3' - -Style/Documentation: - Description: 'Document classes and non-namespace modules.' - Enabled: true - VersionAdded: '0.9' - AllowedConstants: [] - Exclude: - - 'spec/**/*' - - 'test/**/*' - -Style/DocumentationMethod: - Description: 'Checks for missing documentation comment for public methods.' - Enabled: false - VersionAdded: '0.43' - Exclude: - - 'spec/**/*' - - 'test/**/*' - RequireForNonPublicMethods: false - -Style/DoubleCopDisableDirective: - Description: 'Checks for double rubocop:disable comments on a single line.' - Enabled: true - VersionAdded: '0.73' - -Style/DoubleNegation: - Description: 'Checks for uses of double negation (!!).' - StyleGuide: '#no-bang-bang' - Enabled: true - VersionAdded: '0.19' - VersionChanged: '1.2' - EnforcedStyle: allowed_in_returns - SafeAutoCorrect: false - SupportedStyles: - - allowed_in_returns - - forbidden - -Style/EachForSimpleLoop: - Description: >- - Use `Integer#times` for a simple loop which iterates a fixed - number of times. - Enabled: true - VersionAdded: '0.41' - -Style/EachWithObject: - Description: 'Prefer `each_with_object` over `inject` or `reduce`.' - Enabled: true - VersionAdded: '0.22' - VersionChanged: '0.42' - -Style/EmptyBlockParameter: - Description: 'Omit pipes for empty block parameters.' - Enabled: true - VersionAdded: '0.52' - -Style/EmptyCaseCondition: - Description: 'Avoid empty condition in case statements.' - Enabled: true - VersionAdded: '0.40' - -Style/EmptyElse: - Description: 'Avoid empty else-clauses.' - Enabled: true - AutoCorrect: contextual - VersionAdded: '0.28' - VersionChanged: '1.61' - EnforcedStyle: both - # empty - warn only on empty `else` - # nil - warn on `else` with nil in it - # both - warn on empty `else` and `else` with `nil` in it - SupportedStyles: - - empty - - nil - - both - AllowComments: false - -Style/EmptyHeredoc: - Description: 'Checks for using empty heredoc to reduce redundancy.' - Enabled: pending - AutoCorrect: contextual - VersionAdded: '1.32' - VersionChanged: '1.61' - -Style/EmptyLambdaParameter: - Description: 'Omit parens for empty lambda parameters.' - Enabled: true - VersionAdded: '0.52' - -Style/EmptyLiteral: - Description: 'Prefer literals to Array.new/Hash.new/String.new.' - StyleGuide: '#literal-array-hash' - Enabled: true - VersionAdded: '0.9' - VersionChanged: '0.12' - -Style/EmptyMethod: - Description: 'Checks the formatting of empty method definitions.' - StyleGuide: '#no-single-line-methods' - Enabled: true - AutoCorrect: contextual - VersionAdded: '0.46' - VersionChanged: '1.61' - EnforcedStyle: compact - SupportedStyles: - - compact - - expanded - -Style/Encoding: - Description: 'Use UTF-8 as the source file encoding.' - StyleGuide: '#utf-8' - Enabled: true - VersionAdded: '0.9' - VersionChanged: '0.50' - -Style/EndBlock: - Description: 'Avoid the use of END blocks.' - StyleGuide: '#no-END-blocks' - Enabled: true - VersionAdded: '0.9' - VersionChanged: '0.81' - -Style/EndlessMethod: - Description: 'Avoid the use of multi-lined endless method definitions.' - StyleGuide: '#endless-methods' - Enabled: pending - VersionAdded: '1.8' - EnforcedStyle: allow_single_line - SupportedStyles: - - allow_single_line - - allow_always - - disallow - -Style/EnvHome: - Description: "Checks for consistent usage of `ENV['HOME']`." - Enabled: pending - Safe: false - VersionAdded: '1.29' - -Style/EvalWithLocation: - Description: 'Pass `__FILE__` and `__LINE__` to `eval` method, as they are used by backtraces.' - Enabled: true - VersionAdded: '0.52' - -Style/EvenOdd: - Description: 'Favor the use of `Integer#even?` && `Integer#odd?`.' - StyleGuide: '#predicate-methods' - Enabled: true - VersionAdded: '0.12' - VersionChanged: '0.29' - -Style/ExactRegexpMatch: - Description: 'Checks for exact regexp match inside Regexp literals.' - Enabled: pending - VersionAdded: '1.51' - -Style/ExpandPathArguments: - Description: "Use `expand_path(__dir__)` instead of `expand_path('..', __FILE__)`." - Enabled: true - VersionAdded: '0.53' - -Style/ExplicitBlockArgument: - Description: >- - Consider using explicit block argument to avoid writing block literal - that just passes its arguments to another block. - StyleGuide: '#block-argument' - Enabled: true - VersionAdded: '0.89' - VersionChanged: '1.8' - -Style/ExponentialNotation: - Description: 'When using exponential notation, favor a mantissa between 1 (inclusive) and 10 (exclusive).' - StyleGuide: '#exponential-notation' - Enabled: true - VersionAdded: '0.82' - EnforcedStyle: scientific - SupportedStyles: - - scientific - - engineering - - integral - -Style/FetchEnvVar: - Description: >- - Suggests `ENV.fetch` for the replacement of `ENV[]`. - Reference: - - https://rubystyle.guide/#hash-fetch-defaults - Enabled: pending - VersionAdded: '1.28' - # Environment variables to be excluded from the inspection. - AllowedVars: [] - -Style/FileEmpty: - Description: >- - Prefer to use `File.empty?('path/to/file')` when checking if a file is empty. - Enabled: pending - Safe: false - VersionAdded: '1.48' - -Style/FileRead: - Description: 'Favor `File.(bin)read` convenience methods.' - StyleGuide: '#file-read' - Enabled: pending - VersionAdded: '1.24' - -Style/FileWrite: - Description: 'Favor `File.(bin)write` convenience methods.' - StyleGuide: '#file-write' - Enabled: pending - VersionAdded: '1.24' - -Style/FloatDivision: - Description: 'For performing float division, coerce one side only.' - StyleGuide: '#float-division' - Reference: 'https://blog.rubystyle.guide/ruby/2019/06/21/float-division.html' - Enabled: true - VersionAdded: '0.72' - VersionChanged: '1.9' - Safe: false - EnforcedStyle: single_coerce - SupportedStyles: - - left_coerce - - right_coerce - - single_coerce - - fdiv - -Style/For: - Description: 'Checks use of for or each in multiline loops.' - StyleGuide: '#no-for-loops' - Enabled: true - SafeAutoCorrect: false - VersionAdded: '0.13' - VersionChanged: '1.26' - EnforcedStyle: each - SupportedStyles: - - each - - for - -Style/FormatString: - Description: 'Enforce the use of Kernel#sprintf, Kernel#format or String#%.' - StyleGuide: '#sprintf' - Enabled: true - VersionAdded: '0.19' - VersionChanged: '0.49' - EnforcedStyle: format - SupportedStyles: - - format - - sprintf - - percent - -Style/FormatStringToken: - Description: 'Use a consistent style for format string tokens.' - Enabled: true - EnforcedStyle: annotated - SupportedStyles: - # Prefer tokens which contain a sprintf like type annotation like - # `%s`, `%d`, `%f` - - annotated - # Prefer simple looking "template" style tokens like `%{name}`, `%{age}` - - template - - unannotated - # `MaxUnannotatedPlaceholdersAllowed` defines the number of `unannotated` - # style token in a format string to be allowed when enforced style is not - # `unannotated`. - MaxUnannotatedPlaceholdersAllowed: 1 - VersionAdded: '0.49' - VersionChanged: '1.0' - AllowedMethods: [] - AllowedPatterns: [] - -Style/FrozenStringLiteralComment: - Description: >- - Add the frozen_string_literal comment to the top of files - to help transition to frozen string literals by default. - Enabled: true - VersionAdded: '0.36' - VersionChanged: '0.79' - EnforcedStyle: always - SupportedStyles: - # `always` will always add the frozen string literal comment to a file - # regardless of the Ruby version or if `freeze` or `<<` are called on a - # string literal. It is possible that this will create errors. - - always - # `always_true` will add the frozen string literal comment to a file, - # similarly to the `always` style, but will also change any disabled - # comments (e.g. `# frozen_string_literal: false`) to be enabled. - - always_true - # `never` will enforce that the frozen string literal comment does not - # exist in a file. - - never - SafeAutoCorrect: false - -Style/GlobalStdStream: - Description: 'Enforces the use of `$stdout/$stderr/$stdin` instead of `STDOUT/STDERR/STDIN`.' - StyleGuide: '#global-stdout' - Enabled: true - VersionAdded: '0.89' - SafeAutoCorrect: false - -Style/GlobalVars: - Description: 'Do not introduce global variables.' - StyleGuide: '#instance-vars' - Reference: 'https://www.zenspider.com/ruby/quickref.html' - Enabled: true - VersionAdded: '0.13' - # Built-in global variables are allowed by default. - AllowedVariables: [] - -Style/GuardClause: - Description: 'Check for conditionals that can be replaced with guard clauses.' - StyleGuide: '#no-nested-conditionals' - Enabled: true - VersionAdded: '0.20' - VersionChanged: '1.31' - # `MinBodyLength` defines the number of lines of the a body of an `if` or `unless` - # needs to have to trigger this cop - MinBodyLength: 1 - AllowConsecutiveConditionals: false - -Style/HashAsLastArrayItem: - Description: >- - Checks for presence or absence of braces around hash literal as a last - array item depending on configuration. - StyleGuide: '#hash-literal-as-last-array-item' - Enabled: true - VersionAdded: '0.88' - EnforcedStyle: braces - SupportedStyles: - - braces - - no_braces - -Style/HashConversion: - Description: 'Avoid Hash[] in favor of ary.to_h or literal hashes.' - StyleGuide: '#avoid-hash-constructor' - Enabled: pending - SafeAutoCorrect: false - VersionAdded: '1.10' - VersionChanged: '1.55' - AllowSplatArgument: true - -Style/HashEachMethods: - Description: 'Use Hash#each_key and Hash#each_value.' - StyleGuide: '#hash-each' - Enabled: true - Safe: false - VersionAdded: '0.80' - VersionChanged: '1.16' - AllowedReceivers: - - Thread.current - -Style/HashExcept: - Description: >- - Checks for usages of `Hash#reject`, `Hash#select`, and `Hash#filter` methods - that can be replaced with `Hash#except` method. - Enabled: pending - Safe: false - VersionAdded: '1.7' - VersionChanged: '1.39' - -Style/HashLikeCase: - Description: >- - Checks for places where `case-when` represents a simple 1:1 - mapping and can be replaced with a hash lookup. - Enabled: true - VersionAdded: '0.88' - # `MinBranchesCount` defines the number of branches `case` needs to have - # to trigger this cop - MinBranchesCount: 3 - -Style/HashSyntax: - Description: >- - Prefer Ruby 1.9 hash syntax { a: 1, b: 2 } over 1.8 syntax - { :a => 1, :b => 2 }. - StyleGuide: '#hash-literals' - Enabled: true - VersionAdded: '0.9' - VersionChanged: '1.24' - EnforcedStyle: ruby19 - SupportedStyles: - # checks for 1.9 syntax (e.g. {a: 1}) for all symbol keys - - ruby19 - # checks for hash rocket syntax for all hashes - - hash_rockets - # forbids mixed key syntaxes (e.g. {a: 1, :b => 2}) - - no_mixed_keys - # enforces both ruby19 and no_mixed_keys styles - - ruby19_no_mixed_keys - # Force hashes that have a hash value omission - EnforcedShorthandSyntax: always - SupportedShorthandSyntax: - # forces use of the 3.1 syntax (e.g. {foo:}) when the hash key and value are the same. - - always - # forces use of explicit hash literal value. - - never - # accepts both shorthand and explicit use of hash literal value. - - either - # forces use of the 3.1 syntax only if all values can be omitted in the hash. - - consistent - # Force hashes that have a symbol value to use hash rockets - UseHashRocketsWithSymbolValues: false - # Do not suggest { a?: 1 } over { :a? => 1 } in ruby19 style - PreferHashRocketsForNonAlnumEndingSymbols: false - -Style/HashTransformKeys: - Description: 'Prefer `transform_keys` over `each_with_object`, `map`, or `to_h`.' - Enabled: true - VersionAdded: '0.80' - VersionChanged: '0.90' - Safe: false - -Style/HashTransformValues: - Description: 'Prefer `transform_values` over `each_with_object`, `map`, or `to_h`.' - Enabled: true - VersionAdded: '0.80' - VersionChanged: '0.90' - Safe: false - -Style/IdenticalConditionalBranches: - Description: >- - Checks that conditional statements do not have an identical - line at the end of each branch, which can validly be moved - out of the conditional. - Enabled: true - SafeAutoCorrect: false - VersionAdded: '0.36' - VersionChanged: '1.19' - -Style/IfInsideElse: - Description: 'Finds if nodes inside else, which can be converted to elsif.' - Enabled: true - AllowIfModifier: false - VersionAdded: '0.36' - VersionChanged: '1.3' - -Style/IfUnlessModifier: - Description: >- - Favor modifier if/unless usage when you have a - single-line body. - StyleGuide: '#if-as-a-modifier' - Enabled: true - VersionAdded: '0.9' - VersionChanged: '0.30' - -Style/IfUnlessModifierOfIfUnless: - Description: >- - Avoid modifier if/unless usage on conditionals. - Enabled: true - VersionAdded: '0.39' - VersionChanged: '0.87' - -Style/IfWithBooleanLiteralBranches: - Description: 'Checks for redundant `if` with boolean literal branches.' - Enabled: pending - VersionAdded: '1.9' - SafeAutoCorrect: false - AllowedMethods: - - nonzero? - -Style/IfWithSemicolon: - Description: 'Do not use if x; .... Use the ternary operator instead.' - StyleGuide: '#no-semicolon-ifs' - Enabled: true - VersionAdded: '0.9' - VersionChanged: '0.83' - -Style/ImplicitRuntimeError: - Description: >- - Use `raise` or `fail` with an explicit exception class and - message, rather than just a message. - Enabled: false - VersionAdded: '0.41' - -Style/InPatternThen: - Description: 'Checks for `in;` uses in `case` expressions.' - StyleGuide: '#no-in-pattern-semicolons' - Enabled: pending - VersionAdded: '1.16' - -Style/InfiniteLoop: - Description: >- - Use Kernel#loop for infinite loops. - This cop is unsafe if the body may raise a `StopIteration` exception. - Safe: false - StyleGuide: '#infinite-loop' - Enabled: true - VersionAdded: '0.26' - VersionChanged: '0.61' - -Style/InlineComment: - Description: 'Avoid trailing inline comments.' - Enabled: false - VersionAdded: '0.23' - -Style/InverseMethods: - Description: >- - Use the inverse method instead of `!.method` - if an inverse method is defined. - Enabled: true - Safe: false - VersionAdded: '0.48' - # `InverseMethods` are methods that can be inverted by a not (`not` or `!`) - # The relationship of inverse methods only needs to be defined in one direction. - # Keys and values both need to be defined as symbols. - InverseMethods: - :any?: :none? - :even?: :odd? - :==: :!= - :=~: :!~ - :<: :>= - :>: :<= - # `InverseBlocks` are methods that are inverted by inverting the return - # of the block that is passed to the method - InverseBlocks: - :select: :reject - :select!: :reject! - -Style/InvertibleUnlessCondition: - Description: 'Favor `if` with inverted condition over `unless`.' - Enabled: false - Safe: false - VersionAdded: '1.44' - VersionChanged: '1.50' - # `InverseMethods` are methods that can be inverted in a `unless` condition. - # The relationship of inverse methods needs to be defined in both directions. - # Keys and values both need to be defined as symbols. - InverseMethods: - :!=: :== - :>: :<= - :<=: :> - :<: :>= - :>=: :< - :!~: :=~ - :zero?: :nonzero? - :nonzero?: :zero? - :any?: :none? - :none?: :any? - :even?: :odd? - :odd?: :even? - -Style/IpAddresses: - Description: "Don't include literal IP addresses in code." - Enabled: false - VersionAdded: '0.58' - VersionChanged: '0.91' - # Allow addresses to be permitted - AllowedAddresses: - - "::" - # :: is a valid IPv6 address, but could potentially be legitimately in code - Exclude: - - '**/*.gemfile' - - '**/Gemfile' - - '**/gems.rb' - - '**/*.gemspec' - -Style/KeywordParametersOrder: - Description: 'Enforces that optional keyword parameters are placed at the end of the parameters list.' - StyleGuide: '#keyword-parameters-order' - Enabled: true - VersionAdded: '0.90' - VersionChanged: '1.7' - -Style/Lambda: - Description: 'Use the new lambda literal syntax for single-line blocks.' - StyleGuide: '#lambda-multi-line' - Enabled: true - VersionAdded: '0.9' - VersionChanged: '0.40' - EnforcedStyle: line_count_dependent - SupportedStyles: - - line_count_dependent - - lambda - - literal - -Style/LambdaCall: - Description: 'Use lambda.call(...) instead of lambda.(...).' - StyleGuide: '#proc-call' - Enabled: true - VersionAdded: '0.13' - VersionChanged: '0.14' - EnforcedStyle: call - SupportedStyles: - - call - - braces - -Style/LineEndConcatenation: - Description: >- - Use \ instead of + or << to concatenate two string literals at - line end. - Enabled: true - SafeAutoCorrect: false - VersionAdded: '0.18' - VersionChanged: '0.64' - -Style/MagicCommentFormat: - Description: 'Use a consistent style for magic comments.' - Enabled: pending - VersionAdded: '1.35' - EnforcedStyle: snake_case - SupportedStyles: - # `snake` will enforce the magic comment is written - # in snake case (words separated by underscores). - # Eg: froze_string_literal: true - - snake_case - # `kebab` will enforce the magic comment is written - # in kebab case (words separated by hyphens). - # Eg: froze-string-literal: true - - kebab_case - DirectiveCapitalization: lowercase - ValueCapitalization: ~ - SupportedCapitalizations: - - lowercase - - uppercase - -Style/MapCompactWithConditionalBlock: - Description: 'Prefer `select` or `reject` over `map { ... }.compact`.' - Enabled: pending - VersionAdded: '1.30' - -Style/MapToHash: - Description: 'Prefer `to_h` with a block over `map.to_h`.' - Enabled: pending - VersionAdded: '1.24' - Safe: false - -Style/MapToSet: - Description: 'Prefer `to_set` with a block over `map.to_set`.' - Enabled: pending - Safe: false - VersionAdded: '1.42' - -Style/MethodCallWithArgsParentheses: - Description: 'Use parentheses for method calls with arguments.' - StyleGuide: '#method-invocation-parens' - Enabled: false - VersionAdded: '0.47' - VersionChanged: '1.7' - IgnoreMacros: true - AllowedMethods: [] - AllowedPatterns: [] - IncludedMacros: [] - AllowParenthesesInMultilineCall: false - AllowParenthesesInChaining: false - AllowParenthesesInCamelCaseMethod: false - AllowParenthesesInStringInterpolation: false - EnforcedStyle: require_parentheses - SupportedStyles: - - require_parentheses - - omit_parentheses - -Style/MethodCallWithoutArgsParentheses: - Description: 'Do not use parentheses for method calls with no arguments.' - StyleGuide: '#method-invocation-parens' - Enabled: true - AllowedMethods: [] - AllowedPatterns: [] - VersionAdded: '0.47' - VersionChanged: '0.55' - -Style/MethodCalledOnDoEndBlock: - Description: 'Avoid chaining a method call on a do...end block.' - StyleGuide: '#single-line-blocks' - Enabled: false - VersionAdded: '0.14' - -Style/MethodDefParentheses: - Description: >- - Checks if the method definitions have or don't have - parentheses. - StyleGuide: '#method-parens' - Enabled: true - VersionAdded: '0.16' - VersionChanged: '1.7' - EnforcedStyle: require_parentheses - SupportedStyles: - - require_parentheses - - require_no_parentheses - - require_no_parentheses_except_multiline - -Style/MinMax: - Description: >- - Use `Enumerable#minmax` instead of `Enumerable#min` - and `Enumerable#max` in conjunction. - Enabled: true - VersionAdded: '0.50' - -Style/MinMaxComparison: - Description: 'Enforces the use of `max` or `min` instead of comparison for greater or less.' - Enabled: pending - Safe: false - VersionAdded: '1.42' - -Style/MissingElse: - Description: >- - Require if/case expressions to have an else branches. - If enabled, it is recommended that - Style/UnlessElse and Style/EmptyElse be enabled. - This will conflict with Style/EmptyElse if - Style/EmptyElse is configured to style "both". - Enabled: false - VersionAdded: '0.30' - VersionChanged: '0.38' - EnforcedStyle: both - SupportedStyles: - # if - warn when an if expression is missing an else branch - # case - warn when a case expression is missing an else branch - # both - warn when an if or case expression is missing an else branch - - if - - case - - both - -Style/MissingRespondToMissing: - Description: >- - Checks if `method_missing` is implemented - without implementing `respond_to_missing`. - StyleGuide: '#no-method-missing' - Enabled: true - VersionAdded: '0.56' - -Style/MixinGrouping: - Description: 'Checks for grouping of mixins in `class` and `module` bodies.' - StyleGuide: '#mixin-grouping' - Enabled: true - VersionAdded: '0.48' - VersionChanged: '0.49' - EnforcedStyle: separated - SupportedStyles: - # separated: each mixed in module goes in a separate statement. - # grouped: mixed in modules are grouped into a single statement. - - separated - - grouped - -Style/MixinUsage: - Description: 'Checks that `include`, `extend` and `prepend` exists at the top level.' - Enabled: true - VersionAdded: '0.51' - -Style/ModuleFunction: - Description: 'Checks for usage of `extend self` in modules.' - StyleGuide: '#module-function' - Enabled: true - VersionAdded: '0.11' - VersionChanged: '0.65' - EnforcedStyle: module_function - SupportedStyles: - - module_function - - extend_self - - forbidden - Autocorrect: false - SafeAutoCorrect: false - -Style/MultilineBlockChain: - Description: 'Avoid multi-line chains of blocks.' - StyleGuide: '#single-line-blocks' - Enabled: true - VersionAdded: '0.13' - -Style/MultilineIfModifier: - Description: 'Only use if/unless modifiers on single line statements.' - StyleGuide: '#no-multiline-if-modifiers' - Enabled: true - VersionAdded: '0.45' - -Style/MultilineIfThen: - Description: 'Do not use then for multi-line if/unless.' - StyleGuide: '#no-then' - Enabled: true - VersionAdded: '0.9' - VersionChanged: '0.26' - -Style/MultilineInPatternThen: - Description: 'Do not use `then` for multi-line `in` statement.' - StyleGuide: '#no-then' - Enabled: pending - VersionAdded: '1.16' - -Style/MultilineMemoization: - Description: 'Wrap multiline memoizations in a `begin` and `end` block.' - Enabled: true - VersionAdded: '0.44' - VersionChanged: '0.48' - EnforcedStyle: keyword - SupportedStyles: - - keyword - - braces - -Style/MultilineMethodSignature: - Description: 'Avoid multi-line method signatures.' - Enabled: false - VersionAdded: '0.59' - VersionChanged: '1.7' - -Style/MultilineTernaryOperator: - Description: >- - Avoid multi-line ?: (the ternary operator); - use if/unless instead. - StyleGuide: '#no-multiline-ternary' - Enabled: true - VersionAdded: '0.9' - VersionChanged: '0.86' - -Style/MultilineWhenThen: - Description: 'Do not use then for multi-line when statement.' - StyleGuide: '#no-then' - Enabled: true - VersionAdded: '0.73' - -Style/MultipleComparison: - Description: >- - Avoid comparing a variable with multiple items in a conditional, - use Array#include? instead. - Enabled: true - VersionAdded: '0.49' - VersionChanged: '1.1' - AllowMethodComparison: true - ComparisonsThreshold: 2 - -Style/MutableConstant: - Description: 'Do not assign mutable objects to constants.' - Enabled: true - VersionAdded: '0.34' - VersionChanged: '1.8' - SafeAutoCorrect: false - EnforcedStyle: literals - SupportedStyles: - # literals: freeze literals assigned to constants - # strict: freeze all constants - # Strict mode is considered an experimental feature. It has not been updated - # with an exhaustive list of all methods that will produce frozen objects so - # there is a decent chance of getting some false positives. Luckily, there is - # no harm in freezing an already frozen object. - - literals - - strict - -Style/NegatedIf: - Description: >- - Favor unless over if for negative conditions - (or control flow or). - StyleGuide: '#unless-for-negatives' - Enabled: true - VersionAdded: '0.20' - VersionChanged: '0.48' - EnforcedStyle: both - SupportedStyles: - # both: prefix and postfix negated `if` should both use `unless` - # prefix: only use `unless` for negated `if` statements positioned before the body of the statement - # postfix: only use `unless` for negated `if` statements positioned after the body of the statement - - both - - prefix - - postfix - -Style/NegatedIfElseCondition: - Description: >- - Checks for uses of `if-else` and ternary operators with a negated condition - which can be simplified by inverting condition and swapping branches. - Enabled: pending - VersionAdded: '1.2' - -Style/NegatedUnless: - Description: 'Favor if over unless for negative conditions.' - StyleGuide: '#if-for-negatives' - Enabled: true - VersionAdded: '0.69' - EnforcedStyle: both - SupportedStyles: - # both: prefix and postfix negated `unless` should both use `if` - # prefix: only use `if` for negated `unless` statements positioned before the body of the statement - # postfix: only use `if` for negated `unless` statements positioned after the body of the statement - - both - - prefix - - postfix - -Style/NegatedWhile: - Description: 'Favor until over while for negative conditions.' - StyleGuide: '#until-for-negatives' - Enabled: true - VersionAdded: '0.20' - -Style/NestedFileDirname: - Description: 'Checks for nested `File.dirname`.' - Enabled: pending - VersionAdded: '1.26' - -Style/NestedModifier: - Description: 'Avoid using nested modifiers.' - StyleGuide: '#no-nested-modifiers' - Enabled: true - VersionAdded: '0.35' - -Style/NestedParenthesizedCalls: - Description: >- - Parenthesize method calls which are nested inside the - argument list of another parenthesized method call. - Enabled: true - VersionAdded: '0.36' - VersionChanged: '0.77' - AllowedMethods: - - be - - be_a - - be_an - - be_between - - be_falsey - - be_kind_of - - be_instance_of - - be_truthy - - be_within - - eq - - eql - - end_with - - include - - match - - raise_error - - respond_to - - start_with - -Style/NestedTernaryOperator: - Description: 'Use one expression per branch in a ternary operator.' - StyleGuide: '#no-nested-ternary' - Enabled: true - VersionAdded: '0.9' - VersionChanged: '0.86' - -Style/Next: - Description: 'Use `next` to skip iteration instead of a condition at the end.' - StyleGuide: '#no-nested-conditionals' - Enabled: true - VersionAdded: '0.22' - VersionChanged: '0.35' - # With `always` all conditions at the end of an iteration needs to be - # replaced by next - with `skip_modifier_ifs` the modifier if like this one - # are ignored: [1, 2].each { |a| return 'yes' if a == 1 } - EnforcedStyle: skip_modifier_ifs - # `MinBodyLength` defines the number of lines of the a body of an `if` or `unless` - # needs to have to trigger this cop - MinBodyLength: 3 - SupportedStyles: - - skip_modifier_ifs - - always - -Style/NilComparison: - Description: 'Prefer x.nil? to x == nil.' - StyleGuide: '#predicate-methods' - Enabled: true - VersionAdded: '0.12' - VersionChanged: '0.59' - EnforcedStyle: predicate - SupportedStyles: - - predicate - - comparison - -Style/NilLambda: - Description: 'Prefer `-> {}` to `-> { nil }`.' - Enabled: pending - VersionAdded: '1.3' - VersionChanged: '1.15' - -Style/NonNilCheck: - Description: 'Checks for redundant nil checks.' - StyleGuide: '#no-non-nil-checks' - Enabled: true - VersionAdded: '0.20' - VersionChanged: '0.22' - # With `IncludeSemanticChanges` set to `true`, this cop reports offenses for - # `!x.nil?` and autocorrects that and `x != nil` to solely `x`, which is - # **usually** OK, but might change behavior. - # - # With `IncludeSemanticChanges` set to `false`, this cop does not report - # offenses for `!x.nil?` and does no changes that might change behavior. - IncludeSemanticChanges: false - -Style/Not: - Description: 'Use ! instead of not.' - StyleGuide: '#bang-not-not' - Enabled: true - VersionAdded: '0.9' - VersionChanged: '0.20' - -Style/NumberedParameters: - Description: 'Restrict the usage of numbered parameters.' - Enabled: pending - VersionAdded: '1.22' - EnforcedStyle: allow_single_line - SupportedStyles: - - allow_single_line - - disallow - -Style/NumberedParametersLimit: - Description: 'Avoid excessive numbered params in a single block.' - Enabled: pending - VersionAdded: '1.22' - Max: 1 - -Style/NumericLiteralPrefix: - Description: 'Use smallcase prefixes for numeric literals.' - StyleGuide: '#numeric-literal-prefixes' - Enabled: true - VersionAdded: '0.41' - EnforcedOctalStyle: zero_with_o - SupportedOctalStyles: - - zero_with_o - - zero_only - -Style/NumericLiterals: - Description: >- - Add underscores to large numeric literals to improve their - readability. - StyleGuide: '#underscores-in-numerics' - Enabled: true - VersionAdded: '0.9' - VersionChanged: '0.48' - MinDigits: 5 - Strict: false - # You can specify allowed numbers. (e.g. port number 3000, 8080, and etc) - AllowedNumbers: [] - AllowedPatterns: [] - -Style/NumericPredicate: - Description: >- - Checks for the use of predicate- or comparison methods for - numeric comparisons. - StyleGuide: '#predicate-methods' - # This will change to a new method call which isn't guaranteed to be on the - # object. Switching these methods has to be done with knowledge of the types - # of the variables which rubocop doesn't have. - Safe: false - Enabled: true - VersionAdded: '0.42' - VersionChanged: '0.59' - EnforcedStyle: predicate - SupportedStyles: - - predicate - - comparison - AllowedMethods: [] - AllowedPatterns: [] - # Exclude RSpec specs because assertions like `expect(1).to be > 0` cause - # false positives. - Exclude: - - 'spec/**/*' - -Style/ObjectThen: - Description: 'Enforces the use of consistent method names `Object#yield_self` or `Object#then`.' - StyleGuide: '#object-yield-self-vs-object-then' - Enabled: pending - VersionAdded: '1.28' - # Use `Object#yield_self` or `Object#then`? - # Prefer `Object#yield_self` to `Object#then` (yield_self) - # Prefer `Object#then` to `Object#yield_self` (then) - EnforcedStyle: 'then' - SupportedStyles: - - then - - yield_self - -Style/OneLineConditional: - Description: >- - Favor the ternary operator (?:) or multi-line constructs over - single-line if/then/else/end constructs. - StyleGuide: '#ternary-operator' - Enabled: true - AlwaysCorrectToMultiline: false - VersionAdded: '0.9' - VersionChanged: '0.90' - -Style/OpenStructUse: - Description: >- - Avoid using OpenStruct. As of Ruby 3.0, use is officially discouraged due to performance, - version compatibility, and potential security issues. - Reference: - - https://docs.ruby-lang.org/en/3.0.0/OpenStruct.html#class-OpenStruct-label-Caveats - - Enabled: pending - Safe: false - VersionAdded: '1.23' - VersionChanged: '1.51' - -Style/OperatorMethodCall: - Description: 'Checks for redundant dot before operator method call.' - StyleGuide: '#operator-method-call' - Enabled: pending - VersionAdded: '1.37' - -Style/OptionHash: - Description: "Don't use option hashes when you can use keyword arguments." - StyleGuide: '#keyword-arguments-vs-option-hashes' - Enabled: false - VersionAdded: '0.33' - VersionChanged: '0.34' - # A list of parameter names that will be flagged by this cop. - SuspiciousParamNames: - - options - - opts - - args - - params - - parameters - Allowlist: [] - -Style/OptionalArguments: - Description: >- - Checks for optional arguments that do not appear at the end - of the argument list. - StyleGuide: '#optional-arguments' - Enabled: true - Safe: false - VersionAdded: '0.33' - VersionChanged: '0.83' - -Style/OptionalBooleanParameter: - Description: 'Use keyword arguments when defining method with boolean argument.' - StyleGuide: '#boolean-keyword-arguments' - Enabled: true - Safe: false - VersionAdded: '0.89' - AllowedMethods: - - respond_to_missing? - -Style/OrAssignment: - Description: 'Recommend usage of double pipe equals (||=) where applicable.' - StyleGuide: '#double-pipe-for-uninit' - Enabled: true - VersionAdded: '0.50' - -Style/ParallelAssignment: - Description: >- - Check for simple usages of parallel assignment. - It will only warn when the number of variables - matches on both sides of the assignment. - StyleGuide: '#parallel-assignment' - Enabled: true - VersionAdded: '0.32' - -Style/ParenthesesAroundCondition: - Description: >- - Don't use parentheses around the condition of an - if/unless/while. - StyleGuide: '#no-parens-around-condition' - Enabled: true - VersionAdded: '0.9' - VersionChanged: '0.56' - AllowSafeAssignment: true - AllowInMultilineConditions: false - -Style/PercentLiteralDelimiters: - Description: 'Use `%`-literal delimiters consistently.' - StyleGuide: '#percent-literal-braces' - Enabled: true - VersionAdded: '0.19' - # Specify the default preferred delimiter for all types with the 'default' key - # Override individual delimiters (even with default specified) by specifying - # an individual key - PreferredDelimiters: - default: () - '%i': '[]' - '%I': '[]' - '%r': '{}' - '%w': '[]' - '%W': '[]' - VersionChanged: '0.48' - -Style/PercentQLiterals: - Description: 'Checks if uses of %Q/%q match the configured preference.' - Enabled: true - VersionAdded: '0.25' - EnforcedStyle: lower_case_q - SupportedStyles: - - lower_case_q # Use `%q` when possible, `%Q` when necessary - - upper_case_q # Always use `%Q` - -Style/PerlBackrefs: - Description: 'Avoid Perl-style regex back references.' - StyleGuide: '#no-perl-regexp-last-matchers' - Enabled: true - VersionAdded: '0.13' - -Style/PreferredHashMethods: - Description: 'Checks use of `has_key?` and `has_value?` Hash methods.' - StyleGuide: '#hash-key' - Enabled: true - Safe: false - VersionAdded: '0.41' - VersionChanged: '0.70' - EnforcedStyle: short - SupportedStyles: - - short - - verbose - -Style/Proc: - Description: 'Use proc instead of Proc.new.' - StyleGuide: '#proc' - Enabled: true - VersionAdded: '0.9' - VersionChanged: '0.18' - -Style/QuotedSymbols: - Description: 'Use a consistent style for quoted symbols.' - Enabled: pending - VersionAdded: '1.16' - EnforcedStyle: same_as_string_literals - SupportedStyles: - - same_as_string_literals - - single_quotes - - double_quotes - -Style/RaiseArgs: - Description: 'Checks the arguments passed to raise/fail.' - StyleGuide: '#exception-class-messages' - Enabled: true - Safe: false - VersionAdded: '0.14' - VersionChanged: '1.61' - EnforcedStyle: exploded - SupportedStyles: - - compact # raise Exception.new(msg) - - exploded # raise Exception, msg - AllowedCompactTypes: [] - -Style/RandomWithOffset: - Description: >- - Prefer to use ranges when generating random numbers instead of - integers with offsets. - StyleGuide: '#random-numbers' - Enabled: true - VersionAdded: '0.52' - -Style/RedundantArgument: - Description: 'Check for a redundant argument passed to certain methods.' - Enabled: pending - Safe: false - VersionAdded: '1.4' - VersionChanged: '1.55' - Methods: - # Array#join - join: '' - # Array#sum - sum: 0 - # Kernel.#exit - exit: true - # Kernel.#exit! - exit!: false - # String#split - split: ' ' - # String#chomp - chomp: "\n" - # String#chomp! - chomp!: "\n" - -Style/RedundantArrayConstructor: - Description: 'Checks for the instantiation of array using redundant `Array` constructor.' - Enabled: pending - VersionAdded: '1.52' - -Style/RedundantAssignment: - Description: 'Checks for redundant assignment before returning.' - Enabled: true - VersionAdded: '0.87' - -Style/RedundantBegin: - Description: "Don't use begin blocks when they are not needed." - StyleGuide: '#begin-implicit' - Enabled: true - VersionAdded: '0.10' - VersionChanged: '0.21' - -Style/RedundantCapitalW: - Description: 'Checks for %W when interpolation is not needed.' - Enabled: true - VersionAdded: '0.76' - -Style/RedundantCondition: - Description: 'Checks for unnecessary conditional expressions.' - Enabled: true - VersionAdded: '0.76' - -Style/RedundantConditional: - Description: "Don't return true/false from a conditional." - Enabled: true - VersionAdded: '0.50' - -Style/RedundantConstantBase: - Description: Avoid redundant `::` prefix on constant. - Enabled: pending - VersionAdded: '1.40' - -Style/RedundantCurrentDirectoryInPath: - Description: 'Checks for uses a redundant current directory in path.' - Enabled: pending - VersionAdded: '1.53' - -Style/RedundantDoubleSplatHashBraces: - Description: 'Checks for redundant uses of double splat hash braces.' - Enabled: pending - VersionAdded: '1.41' - -Style/RedundantEach: - Description: 'Checks for redundant `each`.' - Enabled: pending - Safe: false - VersionAdded: '1.38' - -Style/RedundantException: - Description: "Checks for an obsolete RuntimeException argument in raise/fail." - StyleGuide: '#no-explicit-runtimeerror' - Enabled: true - VersionAdded: '0.14' - VersionChanged: '0.29' - -Style/RedundantFetchBlock: - Description: >- - Use `fetch(key, value)` instead of `fetch(key) { value }` - when value has Numeric, Rational, Complex, Symbol or String type, `false`, `true`, `nil` or is a constant. - Reference: 'https://github.com/fastruby/fast-ruby#hashfetch-with-argument-vs-hashfetch--block-code' - Enabled: true - Safe: false - # If enabled, this cop will autocorrect usages of - # `fetch` being called with block returning a constant. - # This can be dangerous since constants will not be defined at that moment. - SafeForConstants: false - VersionAdded: '0.86' - -Style/RedundantFileExtensionInRequire: - Description: >- - Checks for the presence of superfluous `.rb` extension in - the filename provided to `require` and `require_relative`. - StyleGuide: '#no-explicit-rb-to-require' - Enabled: true - VersionAdded: '0.88' - -Style/RedundantFilterChain: - Description: >- - Identifies usages of `any?`, `empty?`, `none?` or `one?` predicate methods chained to - `select`/`filter`/`find_all` and change them to use predicate method instead. - Enabled: pending - SafeAutoCorrect: false - VersionAdded: '1.52' - VersionChanged: '1.57' - -Style/RedundantFreeze: - Description: "Checks usages of Object#freeze on immutable objects." - Enabled: true - VersionAdded: '0.34' - VersionChanged: '0.66' - -Style/RedundantHeredocDelimiterQuotes: - Description: 'Checks for redundant heredoc delimiter quotes.' - Enabled: pending - VersionAdded: '1.45' - -Style/RedundantInitialize: - Description: 'Checks for redundant `initialize` methods.' - Enabled: pending - AutoCorrect: contextual - Safe: false - AllowComments: true - VersionAdded: '1.27' - VersionChanged: '1.61' - -Style/RedundantInterpolation: - Description: 'Checks for strings that are just an interpolated expression.' - Enabled: true - SafeAutoCorrect: false - VersionAdded: '0.76' - VersionChanged: '1.30' - -Style/RedundantLineContinuation: - Description: 'Check for redundant line continuation.' - Enabled: pending - VersionAdded: '1.49' - -Style/RedundantParentheses: - Description: "Checks for parentheses that seem not to serve any purpose." - Enabled: true - VersionAdded: '0.36' - -Style/RedundantPercentQ: - Description: 'Checks for %q/%Q when single quotes or double quotes would do.' - StyleGuide: '#percent-q' - Enabled: true - VersionAdded: '0.76' - -Style/RedundantRegexpArgument: - Description: 'Identifies places where argument can be replaced from a deterministic regexp to a string.' - Enabled: pending - VersionAdded: '1.53' - -Style/RedundantRegexpCharacterClass: - Description: 'Checks for unnecessary single-element Regexp character classes.' - Enabled: true - VersionAdded: '0.85' - -Style/RedundantRegexpConstructor: - Description: 'Checks for the instantiation of regexp using redundant `Regexp.new` or `Regexp.compile`.' - Enabled: pending - VersionAdded: '1.52' - -Style/RedundantRegexpEscape: - Description: 'Checks for redundant escapes in Regexps.' - Enabled: true - VersionAdded: '0.85' - -Style/RedundantReturn: - Description: "Don't use return where it's not required." - StyleGuide: '#no-explicit-return' - Enabled: true - VersionAdded: '0.10' - VersionChanged: '0.14' - # When `true` allows code like `return x, y`. - AllowMultipleReturnValues: false - -Style/RedundantSelf: - Description: "Don't use self where it's not needed." - StyleGuide: '#no-self-unless-required' - Enabled: true - VersionAdded: '0.10' - VersionChanged: '0.13' - -Style/RedundantSelfAssignment: - Description: 'Checks for places where redundant assignments are made for in place modification methods.' - Enabled: true - Safe: false - VersionAdded: '0.90' - -Style/RedundantSelfAssignmentBranch: - Description: 'Checks for places where conditional branch makes redundant self-assignment.' - Enabled: pending - VersionAdded: '1.19' - -Style/RedundantSort: - Description: >- - Use `min` instead of `sort.first`, - `max_by` instead of `sort_by...last`, etc. - Enabled: true - VersionAdded: '0.76' - VersionChanged: '1.22' - Safe: false - -Style/RedundantSortBy: - Description: 'Use `sort` instead of `sort_by { |x| x }`.' - Enabled: true - VersionAdded: '0.36' - -Style/RedundantStringEscape: - Description: 'Checks for redundant escapes in string literals.' - Enabled: pending - VersionAdded: '1.37' - -Style/RegexpLiteral: - Description: 'Use / or %r around regular expressions.' - StyleGuide: '#percent-r' - Enabled: true - VersionAdded: '0.9' - VersionChanged: '0.30' - EnforcedStyle: slashes - # slashes: Always use slashes. - # percent_r: Always use `%r`. - # mixed: Use slashes on single-line regexes, and `%r` on multi-line regexes. - SupportedStyles: - - slashes - - percent_r - - mixed - # If `false`, the cop will always recommend using `%r` if one or more slashes - # are found in the regexp string. - AllowInnerSlashes: false - -Style/RequireOrder: - Description: Sort `require` and `require_relative` in alphabetical order. - Enabled: false - SafeAutoCorrect: false - VersionAdded: '1.40' - -Style/RescueModifier: - Description: 'Avoid using rescue in its modifier form.' - StyleGuide: '#no-rescue-modifiers' - Enabled: true - VersionAdded: '0.9' - VersionChanged: '0.34' - -Style/RescueStandardError: - Description: 'Avoid rescuing without specifying an error class.' - Enabled: true - VersionAdded: '0.52' - EnforcedStyle: explicit - # implicit: Do not include the error class, `rescue` - # explicit: Require an error class `rescue StandardError` - SupportedStyles: - - implicit - - explicit - -Style/ReturnNil: - Description: 'Use return instead of return nil.' - Enabled: false - EnforcedStyle: return - SupportedStyles: - - return - - return_nil - VersionAdded: '0.50' - -Style/ReturnNilInPredicateMethodDefinition: - Description: 'Checks if uses of `return` or `return nil` in predicate method definition.' - StyleGuide: '#bool-methods-qmark' - Enabled: pending - SafeAutoCorrect: false - AllowedMethods: [] - AllowedPatterns: [] - VersionAdded: '1.53' - -Style/SafeNavigation: - Description: >- - Transforms usages of a method call safeguarded by - a check for the existence of the object to - safe navigation (`&.`). - Autocorrection is unsafe as it assumes the object will - be `nil` or truthy, but never `false`. - Enabled: true - VersionAdded: '0.43' - VersionChanged: '1.27' - # Safe navigation may cause a statement to start returning `nil` in addition - # to whatever it used to return. - ConvertCodeThatCanStartToReturnNil: false - AllowedMethods: - - present? - - blank? - - presence - - try - - try! - SafeAutoCorrect: false - # Maximum length of method chains for register an offense. - MaxChainLength: 2 - -Style/Sample: - Description: >- - Use `sample` instead of `shuffle.first`, - `shuffle.last`, and `shuffle[Integer]`. - Reference: 'https://github.com/fastruby/fast-ruby#arrayshufflefirst-vs-arraysample-code' - Enabled: true - VersionAdded: '0.30' - -Style/SelectByRegexp: - Description: 'Prefer grep/grep_v to select/reject with a regexp match.' - Enabled: pending - SafeAutoCorrect: false - VersionAdded: '1.22' - -Style/SelfAssignment: - Description: >- - Checks for places where self-assignment shorthand should have - been used. - StyleGuide: '#self-assignment' - Enabled: true - VersionAdded: '0.19' - VersionChanged: '0.29' - -Style/Semicolon: - Description: "Don't use semicolons to terminate expressions." - StyleGuide: '#no-semicolon' - Enabled: true - VersionAdded: '0.9' - VersionChanged: '0.19' - # Allow `;` to separate several expressions on the same line. - AllowAsExpressionSeparator: false - -Style/Send: - Description: 'Prefer `Object#__send__` or `Object#public_send` to `send`, as `send` may overlap with existing methods.' - StyleGuide: '#prefer-public-send' - Enabled: false - VersionAdded: '0.33' - -Style/SignalException: - Description: 'Checks for proper usage of fail and raise.' - StyleGuide: '#prefer-raise-over-fail' - Enabled: true - VersionAdded: '0.11' - VersionChanged: '0.37' - EnforcedStyle: only_raise - SupportedStyles: - - only_raise - - only_fail - - semantic - -Style/SingleArgumentDig: - Description: 'Avoid using single argument dig method.' - Enabled: true - VersionAdded: '0.89' - Safe: false - -Style/SingleLineBlockParams: - Description: 'Enforces the names of some block params.' - Enabled: false - VersionAdded: '0.16' - VersionChanged: '1.6' - Methods: - - reduce: - - acc - - elem - - inject: - - acc - - elem - -Style/SingleLineDoEndBlock: - Description: 'Checks for single-line `do`...`end` blocks.' - StyleGuide: '#single-line-do-end-block' - Enabled: pending - VersionAdded: '1.57' - -Style/SingleLineMethods: - Description: 'Avoid single-line methods.' - StyleGuide: '#no-single-line-methods' - Enabled: true - VersionAdded: '0.9' - VersionChanged: '1.8' - AllowIfMethodIsEmpty: true - -Style/SlicingWithRange: - Description: 'Checks array slicing is done with redundant, endless, and beginless ranges when suitable.' - StyleGuide: '#slicing-with-ranges' - Enabled: true - VersionAdded: '0.83' - Safe: false - -Style/SoleNestedConditional: - Description: >- - Finds sole nested conditional nodes - which can be merged into outer conditional node. - Enabled: true - VersionAdded: '0.89' - VersionChanged: '1.5' - AllowModifier: false - -Style/SpecialGlobalVars: - Description: 'Avoid Perl-style global variables.' - StyleGuide: '#no-cryptic-perlisms' - Enabled: true - VersionAdded: '0.13' - VersionChanged: '0.36' - SafeAutoCorrect: false - RequireEnglish: true - EnforcedStyle: use_english_names - SupportedStyles: - - use_perl_names - - use_english_names - - use_builtin_english_names - -Style/StabbyLambdaParentheses: - Description: 'Check for the usage of parentheses around stabby lambda arguments.' - StyleGuide: '#stabby-lambda-with-args' - Enabled: true - VersionAdded: '0.35' - EnforcedStyle: require_parentheses - SupportedStyles: - - require_parentheses - - require_no_parentheses - -Style/StaticClass: - Description: 'Prefer modules to classes with only class methods.' - StyleGuide: '#modules-vs-classes' - Enabled: false - Safe: false - VersionAdded: '1.3' - -Style/StderrPuts: - Description: 'Use `warn` instead of `$stderr.puts`.' - StyleGuide: '#warn' - Enabled: true - VersionAdded: '0.51' - -Style/StringChars: - Description: 'Checks for uses of `String#split` with empty string or regexp literal argument.' - StyleGuide: '#string-chars' - Enabled: pending - Safe: false - VersionAdded: '1.12' - -Style/StringConcatenation: - Description: 'Checks for places where string concatenation can be replaced with string interpolation.' - StyleGuide: '#string-interpolation' - Enabled: true - Safe: false - VersionAdded: '0.89' - VersionChanged: '1.18' - Mode: aggressive - -Style/StringHashKeys: - Description: 'Prefer symbols instead of strings as hash keys.' - StyleGuide: '#symbols-as-keys' - Enabled: false - VersionAdded: '0.52' - VersionChanged: '0.75' - Safe: false - -Style/StringLiterals: - Description: 'Checks if uses of quotes match the configured preference.' - StyleGuide: '#consistent-string-literals' - Enabled: true - VersionAdded: '0.9' - VersionChanged: '0.36' - EnforcedStyle: single_quotes - SupportedStyles: - - single_quotes - - double_quotes - # If `true`, strings which span multiple lines using `\` for continuation must - # use the same type of quotes on each line. - ConsistentQuotesInMultiline: false - -Style/StringLiteralsInInterpolation: - Description: >- - Checks if uses of quotes inside expressions in interpolated - strings match the configured preference. - Enabled: true - VersionAdded: '0.27' - EnforcedStyle: single_quotes - SupportedStyles: - - single_quotes - - double_quotes - -Style/StringMethods: - Description: 'Checks if configured preferred methods are used over non-preferred.' - Enabled: false - VersionAdded: '0.34' - VersionChanged: '0.34' - # Mapping from undesired method to desired_method - # e.g. to use `to_sym` over `intern`: - # - # StringMethods: - # PreferredMethods: - # intern: to_sym - PreferredMethods: - intern: to_sym - -Style/Strip: - Description: 'Use `strip` instead of `lstrip.rstrip`.' - Enabled: true - VersionAdded: '0.36' - -Style/StructInheritance: - Description: 'Checks for inheritance from Struct.new.' - StyleGuide: '#no-extend-struct-new' - Enabled: true - SafeAutoCorrect: false - VersionAdded: '0.29' - VersionChanged: '1.20' - -Style/SuperWithArgsParentheses: - Description: 'Use parentheses for `super` with arguments.' - StyleGuide: '#super-with-args' - Enabled: pending - VersionAdded: '1.58' - -Style/SwapValues: - Description: 'Enforces the use of shorthand-style swapping of 2 variables.' - StyleGuide: '#values-swapping' - Enabled: pending - VersionAdded: '1.1' - SafeAutoCorrect: false - -Style/SymbolArray: - Description: 'Use %i or %I for arrays of symbols.' - StyleGuide: '#percent-i' - Enabled: true - VersionAdded: '0.9' - VersionChanged: '0.49' - EnforcedStyle: percent - MinSize: 2 - SupportedStyles: - - percent - - brackets - -Style/SymbolLiteral: - Description: 'Use plain symbols instead of string symbols when possible.' - Enabled: true - VersionAdded: '0.30' - -Style/SymbolProc: - Description: 'Use symbols as procs instead of blocks when possible.' - Enabled: true - Safe: false - VersionAdded: '0.26' - VersionChanged: '1.40' - AllowMethodsWithArguments: false - # A list of method names to be always allowed by the check. - # The names should be fairly unique, otherwise you'll end up ignoring lots of code. - AllowedMethods: - - define_method - AllowedPatterns: [] - AllowComments: false - -Style/TernaryParentheses: - Description: 'Checks for use of parentheses around ternary conditions.' - Enabled: true - VersionAdded: '0.42' - VersionChanged: '0.46' - EnforcedStyle: require_no_parentheses - SupportedStyles: - - require_parentheses - - require_no_parentheses - - require_parentheses_when_complex - AllowSafeAssignment: true - -Style/TopLevelMethodDefinition: - Description: 'Looks for top-level method definitions.' - StyleGuide: '#top-level-methods' - Enabled: false - VersionAdded: '1.15' - -Style/TrailingBodyOnClass: - Description: 'Class body goes below class statement.' - Enabled: true - VersionAdded: '0.53' - -Style/TrailingBodyOnMethodDefinition: - Description: 'Method body goes below definition.' - Enabled: true - VersionAdded: '0.52' - -Style/TrailingBodyOnModule: - Description: 'Module body goes below module statement.' - Enabled: true - VersionAdded: '0.53' - -Style/TrailingCommaInArguments: - Description: 'Checks for trailing comma in argument lists.' - StyleGuide: '#no-trailing-params-comma' - Enabled: true - VersionAdded: '0.36' - # If `comma`, the cop requires a comma after the last argument, but only for - # parenthesized method calls where each argument is on its own line. - # If `consistent_comma`, the cop requires a comma after the last argument, - # for all parenthesized method calls with arguments. - EnforcedStyleForMultiline: no_comma - SupportedStylesForMultiline: - - comma - - consistent_comma - - no_comma - -Style/TrailingCommaInArrayLiteral: - Description: 'Checks for trailing comma in array literals.' - StyleGuide: '#no-trailing-array-commas' - Enabled: true - VersionAdded: '0.53' - # If `comma`, the cop requires a comma after the last item in an array, - # but only when each item is on its own line. - # If `consistent_comma`, the cop requires a comma after the last item of all - # non-empty, multiline array literals. - EnforcedStyleForMultiline: no_comma - SupportedStylesForMultiline: - - comma - - consistent_comma - - no_comma - -Style/TrailingCommaInBlockArgs: - Description: 'Checks for useless trailing commas in block arguments.' - Enabled: false - Safe: false - VersionAdded: '0.81' - -Style/TrailingCommaInHashLiteral: - Description: 'Checks for trailing comma in hash literals.' - Enabled: true - # If `comma`, the cop requires a comma after the last item in a hash, - # but only when each item is on its own line. - # If `consistent_comma`, the cop requires a comma after the last item of all - # non-empty, multiline hash literals. - EnforcedStyleForMultiline: no_comma - SupportedStylesForMultiline: - - comma - - consistent_comma - - no_comma - VersionAdded: '0.53' - -Style/TrailingMethodEndStatement: - Description: 'Checks for trailing end statement on line of method body.' - Enabled: true - VersionAdded: '0.52' - -Style/TrailingUnderscoreVariable: - Description: >- - Checks for the usage of unneeded trailing underscores at the - end of parallel variable assignment. - AllowNamedUnderscoreVariables: true - Enabled: true - VersionAdded: '0.31' - VersionChanged: '0.35' - -# `TrivialAccessors` requires exact name matches and doesn't allow -# predicated methods by default. -Style/TrivialAccessors: - Description: 'Prefer attr_* methods to trivial readers/writers.' - StyleGuide: '#attr_family' - Enabled: true - VersionAdded: '0.9' - VersionChanged: '1.15' - # When set to `false` the cop will suggest the use of accessor methods - # in situations like: - # - # def name - # @other_name - # end - # - # This way you can uncover "hidden" attributes in your code. - ExactNameMatch: true - AllowPredicates: true - # Allows trivial writers that don't end in an equal sign. e.g. - # - # def on_exception(action) - # @on_exception=action - # end - # on_exception :restart - # - # Commonly used in DSLs - AllowDSLWriters: true - IgnoreClassMethods: false - AllowedMethods: - - to_ary - - to_a - - to_c - - to_enum - - to_h - - to_hash - - to_i - - to_int - - to_io - - to_open - - to_path - - to_proc - - to_r - - to_regexp - - to_str - - to_s - - to_sym - -Style/UnlessElse: - Description: >- - Do not use unless with else. Rewrite these with the positive - case first. - StyleGuide: '#no-else-with-unless' - Enabled: true - VersionAdded: '0.9' - -Style/UnlessLogicalOperators: - Description: >- - Checks for use of logical operators in an unless condition. - Enabled: false - VersionAdded: '1.11' - EnforcedStyle: forbid_mixed_logical_operators - SupportedStyles: - - forbid_mixed_logical_operators - - forbid_logical_operators - -Style/UnpackFirst: - Description: >- - Checks for accessing the first element of `String#unpack` - instead of using `unpack1`. - Enabled: true - VersionAdded: '0.54' - -Style/VariableInterpolation: - Description: >- - Don't interpolate global, instance and class variables - directly in strings. - StyleGuide: '#curlies-interpolate' - Enabled: true - VersionAdded: '0.9' - VersionChanged: '0.20' - -Style/WhenThen: - Description: 'Use when x then ... for one-line cases.' - StyleGuide: '#no-when-semicolons' - Enabled: true - VersionAdded: '0.9' - -Style/WhileUntilDo: - Description: 'Checks for redundant do after while or until.' - StyleGuide: '#no-multiline-while-do' - Enabled: true - VersionAdded: '0.9' - -Style/WhileUntilModifier: - Description: >- - Favor modifier while/until usage when you have a - single-line body. - StyleGuide: '#while-as-a-modifier' - Enabled: true - VersionAdded: '0.9' - VersionChanged: '0.30' - -Style/WordArray: - Description: 'Use %w or %W for arrays of words.' - StyleGuide: '#percent-w' - Enabled: true - VersionAdded: '0.9' - VersionChanged: '1.19' - EnforcedStyle: percent - SupportedStyles: - # percent style: %w(word1 word2) - - percent - # bracket style: ['word1', 'word2'] - - brackets - # The `MinSize` option causes the `WordArray` rule to be ignored for arrays - # smaller than a certain size. The rule is only applied to arrays - # whose element count is greater than or equal to `MinSize`. - MinSize: 2 - # The regular expression `WordRegex` decides what is considered a word. - WordRegex: !ruby/regexp '/\A(?:\p{Word}|\p{Word}-\p{Word}|\n|\t)+\z/' - -Style/YAMLFileRead: - Description: 'Checks for the use of `YAML.load`, `YAML.safe_load`, and `YAML.parse` with `File.read` argument.' - Enabled: pending - VersionAdded: '1.53' - -Style/YodaCondition: - Description: 'Forbid or enforce yoda conditions.' - Reference: 'https://en.wikipedia.org/wiki/Yoda_conditions' - Enabled: true - EnforcedStyle: forbid_for_all_comparison_operators - SupportedStyles: - # check all comparison operators - - forbid_for_all_comparison_operators - # check only equality operators: `!=` and `==` - - forbid_for_equality_operators_only - # enforce yoda for all comparison operators - - require_for_all_comparison_operators - # enforce yoda only for equality operators: `!=` and `==` - - require_for_equality_operators_only - Safe: false - VersionAdded: '0.49' - VersionChanged: '0.75' - -Style/YodaExpression: - Description: 'Forbid the use of yoda expressions.' - Enabled: false - Safe: false - VersionAdded: '1.42' - VersionChanged: '1.43' - SupportedOperators: - - '*' - - '+' - - '&' - - '|' - - '^' - -Style/ZeroLengthPredicate: - Description: 'Use #empty? when testing for objects of length 0.' - Enabled: true - Safe: false - VersionAdded: '0.37' - VersionChanged: '0.39' diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/config/obsoletion.yml b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/config/obsoletion.yml deleted file mode 100644 index 7f1e1615..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/config/obsoletion.yml +++ /dev/null @@ -1,238 +0,0 @@ -# Configuration of obsolete/deprecated cops used by `ConfigObsoletion` - -# Cops that were renamed -renamed: - Layout/AlignArguments: Layout/ArgumentAlignment - Layout/AlignArray: Layout/ArrayAlignment - Layout/AlignHash: Layout/HashAlignment - Layout/AlignParameters: Layout/ParameterAlignment - Layout/IndentArray: Layout/FirstArrayElementIndentation - Layout/IndentAssignment: Layout/AssignmentIndentation - Layout/IndentFirstArgument: Layout/FirstArgumentIndentation - Layout/IndentFirstArrayElement: Layout/FirstArrayElementIndentation - Layout/IndentFirstHashElement: Layout/FirstHashElementIndentation - Layout/IndentFirstParameter: Layout/FirstParameterIndentation - Layout/IndentHash: Layout/FirstHashElementIndentation - Layout/IndentHeredoc: Layout/HeredocIndentation - Layout/LeadingBlankLines: Layout/LeadingEmptyLines - Layout/Tab: Layout/IndentationStyle - Layout/TrailingBlankLines: Layout/TrailingEmptyLines - Lint/BlockAlignment: Layout/BlockAlignment - Lint/DefEndAlignment: Layout/DefEndAlignment - Lint/DuplicatedKey: Lint/DuplicateHashKey - Lint/EndAlignment: Layout/EndAlignment - Lint/EndInMethod: Style/EndBlock - Lint/Eval: Security/Eval - Lint/HandleExceptions: Lint/SuppressedException - Lint/MultipleCompare: Lint/MultipleComparison - Lint/StringConversionInInterpolation: Lint/RedundantStringCoercion - Lint/UnneededCopDisableDirective: Lint/RedundantCopDisableDirective - Lint/UnneededCopEnableDirective: Lint/RedundantCopEnableDirective - Lint/UnneededRequireStatement: Lint/RedundantRequireStatement - Lint/UnneededSplatExpansion: Lint/RedundantSplatExpansion - Metrics/LineLength: Layout/LineLength - Naming/UncommunicativeBlockParamName: Naming/BlockParameterName - Naming/UncommunicativeMethodParamName: Naming/MethodParameterName - Style/AccessorMethodName: Naming/AccessorMethodName - Style/AsciiIdentifiers: Naming/AsciiIdentifiers - Style/ClassAndModuleCamelCase: Naming/ClassAndModuleCamelCase - Style/ConstantName: Naming/ConstantName - Style/DeprecatedHashMethods: Style/PreferredHashMethods - Style/FileName: Naming/FileName - Style/FlipFlop: Lint/FlipFlop - Style/MethodCallParentheses: Style/MethodCallWithoutArgsParentheses - Style/MethodName: Naming/MethodName - Style/OpMethod: Naming/BinaryOperatorParameterName - Style/PredicateName: Naming/PredicateName - Style/SingleSpaceBeforeFirstArg: Layout/SpaceBeforeFirstArg - Style/UnneededCapitalW: Style/RedundantCapitalW - Style/UnneededCondition: Style/RedundantCondition - Style/UnneededInterpolation: Style/RedundantInterpolation - Style/UnneededPercentQ: Style/RedundantPercentQ - Style/UnneededSort: Style/RedundantSort - Style/VariableName: Naming/VariableName - Style/VariableNumber: Naming/VariableNumber - -# Cops that were removed -removed: - Gemspec/DateAssignment: - alternatives: Gemspec/DeprecatedAttributeAssignment - Layout/SpaceAfterControlKeyword: - alternatives: Layout/SpaceAroundKeyword - Layout/SpaceBeforeModifierKeyword: - alternatives: Layout/SpaceAroundKeyword - Lint/InvalidCharacterLiteral: - reason: it was never being actually triggered - Lint/RescueWithoutErrorClass: - alternatives: Style/RescueStandardError - Lint/SpaceBeforeFirstArg: - reason: > - it was a duplicate of `Layout/SpaceBeforeFirstArg`. Please use - `Layout/SpaceBeforeFirstArg` instead - Lint/UselessComparison: - reason: > - it has been superseded by - `Lint/BinaryOperatorWithIdenticalOperands`. Please use - `Lint/BinaryOperatorWithIdenticalOperands` instead - Style/BracesAroundHashParameters: true - Style/MethodMissingSuper: - reason: > - it has been superseded by `Lint/MissingSuper`. Please use - `Lint/MissingSuper` instead - Style/SpaceAfterControlKeyword: - alternatives: Layout/SpaceAroundKeyword - Style/SpaceBeforeModifierKeyword: - alternatives: Layout/SpaceAroundKeyword - Style/TrailingComma: - alternatives: - - Style/TrailingCommaInArguments - - Style/TrailingCommaInArrayLiteral - - Style/TrailingCommaInHashLiteral - Style/TrailingCommaInLiteral: - alternatives: - - Style/TrailingCommaInArrayLiteral - - Style/TrailingCommaInHashLiteral - -# Cops split into multiple other cops -split: - Style/MethodMissing: - alternatives: - - Style/MethodMissingSuper - - Style/MissingRespondToMissing - -# Cops that were extracted into a different gem -extracted: - Performance/*: rubocop-performance - Rails/*: rubocop-rails - -# Cop parameters that have been changed -# Can be treated as a warning instead of a failure with `severity: warning` -changed_parameters: - - cops: - - Layout/SpaceAroundOperators - - Style/SpaceAroundOperators - parameters: MultiSpaceAllowedForOperators - reason: > - If your intention was to allow extra spaces for alignment, please - use `AllowForAlignment: true` instead. - - cops: Style/Encoding - parameters: - - EnforcedStyle - - SupportedStyles - - AutoCorrectEncodingComment - reason: '`Style/Encoding` no longer supports styles. The "never" behavior is always assumed.' - - cops: Style/IfUnlessModifier - parameters: MaxLineLength - reason: > - `Style/IfUnlessModifier: MaxLineLength` has been removed. - Use `Layout/LineLength: Max` instead - - cops: Style/WhileUntilModifier - parameters: MaxLineLength - reason: > - `Style/WhileUntilModifier: MaxLineLength` has been removed. - Use `Layout/LineLength: Max` instead - - cops: AllCops - parameters: RunRailsCops - reason: |- - Use the following configuration instead: - Rails: - Enabled: true - - cops: Layout/CaseIndentation - parameters: IndentWhenRelativeTo - alternative: EnforcedStyle - - cops: - - Lint/BlockAlignment - - Layout/BlockAlignment - - Lint/EndAlignment - - Layout/EndAlignment - - Lint/DefEndAlignment - - Layout/DefEndAlignment - parameters: AlignWith - alternative: EnforcedStyleAlignWith - - cops: Rails/UniqBeforePluck - parameters: EnforcedMode - alternative: EnforcedStyle - - cops: Style/MethodCallWithArgsParentheses - parameters: IgnoredMethodPatterns - alternative: AllowedPatterns - - cops: - - Performance/Count - - Performance/Detect - parameters: SafeMode - reason: "`SafeMode` has been removed. Use `SafeAutoCorrect` instead." - - cops: Bundler/GemComment - parameters: Whitelist - alternative: IgnoredGems - - cops: - - Lint/SafeNavigationChain - - Lint/SafeNavigationConsistency - - Style/NestedParenthesizedCalls - - Style/SafeNavigation - - Style/TrivialAccessors - parameters: Whitelist - alternative: AllowedMethods - - cops: Style/IpAddresses - parameters: Whitelist - alternative: AllowedAddresses - - cops: Naming/HeredocDelimiterNaming - parameters: Blacklist - alternative: ForbiddenDelimiters - - cops: Naming/PredicateName - parameters: NamePrefixBlacklist - alternative: ForbiddenPrefixes - - cops: Naming/PredicateName - parameters: NameWhitelist - alternative: AllowedMethods - - cops: - - Metrics/BlockLength - - Metrics/MethodLength - parameters: ExcludedMethods - alternatives: - - AllowedMethods - - AllowedPatterns - severity: warning - - cops: Lint/Debugger - parameters: DebuggerReceivers - reason: "`DebuggerReceivers` is no longer necessary, method receivers should be specified in `DebuggerMethods` instead." - severity: warning - - cops: - - Layout/IndentationWidth - - Layout/LineLength - - Lint/UnreachableLoop - - Naming/MethodName - - Style/MethodCallWithArgsParentheses - parameters: IgnoredPatterns - alternative: AllowedPatterns - severity: warning - - cops: - - Lint/AmbiguousBlockAssociation - - Lint/NumberConversion - - Metrics/AbcSize - - Metrics/BlockLength - - Metrics/CyclomaticComplexity - - Metrics/MethodLength - - Metrics/PerceivedComplexity - - Style/BlockDelimiters - - Style/ClassEqualityComparison - - Style/FormatStringToken - - Style/MethodCallWithArgsParentheses - - Style/MethodCallWithoutArgsParentheses - - Style/NumericPredicate - - Style/SymbolLiteral - parameters: IgnoredMethods - alternatives: - - AllowedMethods - - AllowedPatterns - severity: warning - - cops: Style/ArgumentsForwarding - parameters: AllowOnlyRestArgument - reason: "`AllowOnlyRestArgument` has no effect with TargetRubyVersion >= 3.2." - severity: warning - minimum_ruby_version: 3.2 - -# Enforced styles that have been removed or replaced -changed_enforced_styles: - - cops: Layout/IndentationConsistency - parameters: EnforcedStyle - value: rails - alternative: indented_internal_methods diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/exe/rubocop b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/exe/rubocop deleted file mode 100755 index bedc8712..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/exe/rubocop +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env ruby -# frozen_string_literal: true - -$LOAD_PATH.unshift("#{__dir__}/../lib") - -require 'rubocop/server' -server_cli = RuboCop::Server::CLI.new -exit_status = server_cli.run -exit exit_status if server_cli.exit? - -if RuboCop::Server.running? - exit_status = RuboCop::Server::ClientCommand::Exec.new.run -else - require 'benchmark' - require 'rubocop' - - cli = RuboCop::CLI.new - - time = Benchmark.realtime { exit_status = cli.run } - - puts "Finished in #{time} seconds" if cli.options[:debug] || cli.options[:display_time] -end -exit exit_status diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop.rb deleted file mode 100644 index b5f498d7..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop.rb +++ /dev/null @@ -1,771 +0,0 @@ -# frozen_string_literal: true - -require 'English' -before_us = $LOADED_FEATURES.dup -require 'rainbow' - -require 'forwardable' -require 'regexp_parser' -require 'set' -require 'unicode/display_width' - -# we have to require RuboCop's version, before rubocop-ast's -require_relative 'rubocop/version' -require 'rubocop-ast' - -require_relative 'rubocop/ast_aliases' -require_relative 'rubocop/ext/comment' -require_relative 'rubocop/ext/range' -require_relative 'rubocop/ext/regexp_node' -require_relative 'rubocop/ext/regexp_parser' - -require_relative 'rubocop/core_ext/string' -require_relative 'rubocop/ext/processed_source' - -require_relative 'rubocop/error' -require_relative 'rubocop/file_finder' -require_relative 'rubocop/file_patterns' -require_relative 'rubocop/name_similarity' -require_relative 'rubocop/path_util' -require_relative 'rubocop/platform' -require_relative 'rubocop/string_interpreter' -require_relative 'rubocop/util' -require_relative 'rubocop/warning' - -# rubocop:disable Style/RequireOrder - -require_relative 'rubocop/cop/util' -require_relative 'rubocop/cop/offense' -require_relative 'rubocop/cop/message_annotator' -require_relative 'rubocop/cop/ignored_node' -require_relative 'rubocop/cop/autocorrect_logic' -require_relative 'rubocop/cop/exclude_limit' -require_relative 'rubocop/cop/badge' -require_relative 'rubocop/cop/registry' -require_relative 'rubocop/cop/base' -require_relative 'rubocop/cop/cop' -require_relative 'rubocop/cop/commissioner' -require_relative 'rubocop/cop/documentation' -require_relative 'rubocop/cop/corrector' -require_relative 'rubocop/cop/force' -require_relative 'rubocop/cop/severity' -require_relative 'rubocop/cop/generator' -require_relative 'rubocop/cop/generator/configuration_injector' -require_relative 'rubocop/cop/generator/require_file_injector' -require_relative 'rubocop/magic_comment' - -require_relative 'rubocop/cop/variable_force' -require_relative 'rubocop/cop/variable_force/branch' -require_relative 'rubocop/cop/variable_force/branchable' -require_relative 'rubocop/cop/variable_force/variable' -require_relative 'rubocop/cop/variable_force/assignment' -require_relative 'rubocop/cop/variable_force/reference' -require_relative 'rubocop/cop/variable_force/scope' -require_relative 'rubocop/cop/variable_force/variable_table' - -require_relative 'rubocop/cop/mixin/array_min_size' -require_relative 'rubocop/cop/mixin/array_syntax' -require_relative 'rubocop/cop/mixin/alignment' -require_relative 'rubocop/cop/mixin/allowed_identifiers' -require_relative 'rubocop/cop/mixin/allowed_methods' -require_relative 'rubocop/cop/mixin/allowed_pattern' -require_relative 'rubocop/cop/mixin/allowed_receivers' -require_relative 'rubocop/cop/mixin/auto_corrector' # rubocop:todo Naming/InclusiveLanguage -require_relative 'rubocop/cop/mixin/check_assignment' -require_relative 'rubocop/cop/mixin/check_line_breakable' -require_relative 'rubocop/cop/mixin/configurable_max' -require_relative 'rubocop/cop/mixin/code_length' # relies on configurable_max -require_relative 'rubocop/cop/mixin/configurable_enforced_style' -require_relative 'rubocop/cop/mixin/configurable_formatting' -require_relative 'rubocop/cop/mixin/configurable_naming' -require_relative 'rubocop/cop/mixin/configurable_numbering' -require_relative 'rubocop/cop/mixin/documentation_comment' -require_relative 'rubocop/cop/mixin/duplication' -require_relative 'rubocop/cop/mixin/range_help' -require_relative 'rubocop/cop/mixin/annotation_comment' # relies on range -require_relative 'rubocop/cop/mixin/empty_lines_around_body' # relies on range -require_relative 'rubocop/cop/mixin/empty_parameter' -require_relative 'rubocop/cop/mixin/end_keyword_alignment' -require_relative 'rubocop/cop/mixin/enforce_superclass' -require_relative 'rubocop/cop/mixin/first_element_line_break' -require_relative 'rubocop/cop/mixin/frozen_string_literal' -require_relative 'rubocop/cop/mixin/gem_declaration' -require_relative 'rubocop/cop/mixin/gemspec_help' -require_relative 'rubocop/cop/mixin/hash_alignment_styles' -require_relative 'rubocop/cop/mixin/hash_transform_method' -require_relative 'rubocop/cop/mixin/integer_node' -require_relative 'rubocop/cop/mixin/interpolation' -require_relative 'rubocop/cop/mixin/line_length_help' -require_relative 'rubocop/cop/mixin/match_range' -require_relative 'rubocop/cop/metrics/utils/repeated_csend_discount' -require_relative 'rubocop/cop/metrics/utils/repeated_attribute_discount' -require_relative 'rubocop/cop/mixin/hash_shorthand_syntax' -require_relative 'rubocop/cop/mixin/method_complexity' -require_relative 'rubocop/cop/mixin/method_preference' -require_relative 'rubocop/cop/mixin/min_body_length' -require_relative 'rubocop/cop/mixin/min_branches_count' -require_relative 'rubocop/cop/mixin/multiline_element_indentation' -require_relative 'rubocop/cop/mixin/multiline_element_line_breaks' -require_relative 'rubocop/cop/mixin/multiline_expression_indentation' -require_relative 'rubocop/cop/mixin/multiline_literal_brace_layout' -require_relative 'rubocop/cop/mixin/negative_conditional' -require_relative 'rubocop/cop/mixin/heredoc' -require_relative 'rubocop/cop/mixin/nil_methods' -require_relative 'rubocop/cop/mixin/on_normal_if_unless' -require_relative 'rubocop/cop/mixin/ordered_gem_node' -require_relative 'rubocop/cop/mixin/parentheses' -require_relative 'rubocop/cop/mixin/percent_array' -require_relative 'rubocop/cop/mixin/percent_literal' -require_relative 'rubocop/cop/mixin/preceding_following_alignment' -require_relative 'rubocop/cop/mixin/preferred_delimiters' -require_relative 'rubocop/cop/mixin/rational_literal' -require_relative 'rubocop/cop/mixin/require_library' -require_relative 'rubocop/cop/mixin/rescue_node' -require_relative 'rubocop/cop/mixin/safe_assignment' -require_relative 'rubocop/cop/mixin/space_after_punctuation' -require_relative 'rubocop/cop/mixin/space_before_punctuation' -require_relative 'rubocop/cop/mixin/surrounding_space' -require_relative 'rubocop/cop/mixin/statement_modifier' -require_relative 'rubocop/cop/mixin/string_help' -require_relative 'rubocop/cop/mixin/string_literals_help' -require_relative 'rubocop/cop/mixin/symbol_help' -require_relative 'rubocop/cop/mixin/target_ruby_version' -require_relative 'rubocop/cop/mixin/trailing_body' -require_relative 'rubocop/cop/mixin/trailing_comma' -require_relative 'rubocop/cop/mixin/uncommunicative_name' -require_relative 'rubocop/cop/mixin/unused_argument' -require_relative 'rubocop/cop/mixin/visibility_help' -require_relative 'rubocop/cop/mixin/comments_help' # relies on visibility_help -require_relative 'rubocop/cop/mixin/def_node' # relies on visibility_help - -require_relative 'rubocop/cop/utils/format_string' -require_relative 'rubocop/cop/utils/regexp_ranges' - -require_relative 'rubocop/cop/migration/department_name' - -require_relative 'rubocop/cop/correctors/alignment_corrector' -require_relative 'rubocop/cop/correctors/condition_corrector' -require_relative 'rubocop/cop/correctors/each_to_for_corrector' -require_relative 'rubocop/cop/correctors/empty_line_corrector' -require_relative 'rubocop/cop/correctors/for_to_each_corrector' -require_relative 'rubocop/cop/correctors/if_then_corrector' -require_relative 'rubocop/cop/correctors/lambda_literal_to_method_corrector' -require_relative 'rubocop/cop/correctors/line_break_corrector' -require_relative 'rubocop/cop/correctors/multiline_literal_brace_corrector' -require_relative 'rubocop/cop/correctors/ordered_gem_corrector' -require_relative 'rubocop/cop/correctors/parentheses_corrector' -require_relative 'rubocop/cop/correctors/percent_literal_corrector' -require_relative 'rubocop/cop/correctors/punctuation_corrector' -require_relative 'rubocop/cop/correctors/require_library_corrector' -require_relative 'rubocop/cop/correctors/space_corrector' -require_relative 'rubocop/cop/correctors/string_literal_corrector' -require_relative 'rubocop/cop/correctors/unused_arg_corrector' - -require_relative 'rubocop/cop/bundler/duplicated_gem' -require_relative 'rubocop/cop/bundler/duplicated_group' -require_relative 'rubocop/cop/bundler/gem_comment' -require_relative 'rubocop/cop/bundler/gem_filename' -require_relative 'rubocop/cop/bundler/gem_version' -require_relative 'rubocop/cop/bundler/insecure_protocol_source' -require_relative 'rubocop/cop/bundler/ordered_gems' - -require_relative 'rubocop/cop/gemspec/dependency_version' -require_relative 'rubocop/cop/gemspec/deprecated_attribute_assignment' -require_relative 'rubocop/cop/gemspec/development_dependencies' -require_relative 'rubocop/cop/gemspec/duplicated_assignment' -require_relative 'rubocop/cop/gemspec/ordered_dependencies' -require_relative 'rubocop/cop/gemspec/require_mfa' -require_relative 'rubocop/cop/gemspec/required_ruby_version' -require_relative 'rubocop/cop/gemspec/ruby_version_globals_usage' - -require_relative 'rubocop/cop/layout/access_modifier_indentation' -require_relative 'rubocop/cop/layout/argument_alignment' -require_relative 'rubocop/cop/layout/array_alignment' -require_relative 'rubocop/cop/layout/assignment_indentation' -require_relative 'rubocop/cop/layout/begin_end_alignment' -require_relative 'rubocop/cop/layout/block_alignment' -require_relative 'rubocop/cop/layout/block_end_newline' -require_relative 'rubocop/cop/layout/case_indentation' -require_relative 'rubocop/cop/layout/class_structure' -require_relative 'rubocop/cop/layout/closing_heredoc_indentation' -require_relative 'rubocop/cop/layout/closing_parenthesis_indentation' -require_relative 'rubocop/cop/layout/comment_indentation' -require_relative 'rubocop/cop/layout/condition_position' -require_relative 'rubocop/cop/layout/def_end_alignment' -require_relative 'rubocop/cop/layout/dot_position' -require_relative 'rubocop/cop/layout/else_alignment' -require_relative 'rubocop/cop/layout/empty_comment' -require_relative 'rubocop/cop/layout/empty_line_after_guard_clause' -require_relative 'rubocop/cop/layout/empty_line_after_magic_comment' -require_relative 'rubocop/cop/layout/empty_line_after_multiline_condition' -require_relative 'rubocop/cop/layout/empty_line_between_defs' -require_relative 'rubocop/cop/layout/empty_lines_around_access_modifier' -require_relative 'rubocop/cop/layout/empty_lines_around_arguments' -require_relative 'rubocop/cop/layout/empty_lines_around_attribute_accessor' -require_relative 'rubocop/cop/layout/empty_lines_around_begin_body' -require_relative 'rubocop/cop/layout/empty_lines_around_block_body' -require_relative 'rubocop/cop/layout/empty_lines_around_class_body' -require_relative 'rubocop/cop/layout/empty_lines_around_exception_handling_keywords' -require_relative 'rubocop/cop/layout/empty_lines_around_method_body' -require_relative 'rubocop/cop/layout/empty_lines_around_module_body' -require_relative 'rubocop/cop/layout/empty_lines' -require_relative 'rubocop/cop/layout/end_alignment' -require_relative 'rubocop/cop/layout/end_of_line' -require_relative 'rubocop/cop/layout/extra_spacing' -require_relative 'rubocop/cop/layout/first_argument_indentation' -require_relative 'rubocop/cop/layout/first_array_element_indentation' -require_relative 'rubocop/cop/layout/first_array_element_line_break' -require_relative 'rubocop/cop/layout/first_hash_element_indentation' -require_relative 'rubocop/cop/layout/first_hash_element_line_break' -require_relative 'rubocop/cop/layout/first_method_argument_line_break' -require_relative 'rubocop/cop/layout/first_method_parameter_line_break' -require_relative 'rubocop/cop/layout/first_parameter_indentation' -require_relative 'rubocop/cop/layout/hash_alignment' -require_relative 'rubocop/cop/layout/heredoc_argument_closing_parenthesis' -require_relative 'rubocop/cop/layout/heredoc_indentation' -require_relative 'rubocop/cop/layout/indentation_consistency' -require_relative 'rubocop/cop/layout/indentation_style' -require_relative 'rubocop/cop/layout/indentation_width' -require_relative 'rubocop/cop/layout/initial_indentation' -require_relative 'rubocop/cop/layout/leading_comment_space' -require_relative 'rubocop/cop/layout/leading_empty_lines' -require_relative 'rubocop/cop/layout/line_continuation_leading_space' -require_relative 'rubocop/cop/layout/line_continuation_spacing' -require_relative 'rubocop/cop/layout/line_end_string_concatenation_indentation' -require_relative 'rubocop/cop/layout/line_length' -require_relative 'rubocop/cop/layout/multiline_array_brace_layout' -require_relative 'rubocop/cop/layout/multiline_array_line_breaks' -require_relative 'rubocop/cop/layout/multiline_assignment_layout' -require_relative 'rubocop/cop/layout/multiline_block_layout' -require_relative 'rubocop/cop/layout/multiline_hash_brace_layout' -require_relative 'rubocop/cop/layout/multiline_hash_key_line_breaks' -require_relative 'rubocop/cop/layout/multiline_method_argument_line_breaks' -require_relative 'rubocop/cop/layout/multiline_method_call_brace_layout' -require_relative 'rubocop/cop/layout/multiline_method_call_indentation' -require_relative 'rubocop/cop/layout/multiline_method_definition_brace_layout' -require_relative 'rubocop/cop/layout/multiline_method_parameter_line_breaks' -require_relative 'rubocop/cop/layout/multiline_operation_indentation' -require_relative 'rubocop/cop/layout/parameter_alignment' -require_relative 'rubocop/cop/layout/redundant_line_break' -require_relative 'rubocop/cop/layout/rescue_ensure_alignment' -require_relative 'rubocop/cop/layout/single_line_block_chain' -require_relative 'rubocop/cop/layout/space_after_colon' -require_relative 'rubocop/cop/layout/space_after_comma' -require_relative 'rubocop/cop/layout/space_after_method_name' -require_relative 'rubocop/cop/layout/space_after_not' -require_relative 'rubocop/cop/layout/space_after_semicolon' -require_relative 'rubocop/cop/layout/space_around_block_parameters' -require_relative 'rubocop/cop/layout/space_around_equals_in_parameter_default' -require_relative 'rubocop/cop/layout/space_around_keyword' -require_relative 'rubocop/cop/layout/space_around_method_call_operator' -require_relative 'rubocop/cop/layout/space_around_operators' -require_relative 'rubocop/cop/layout/space_before_block_braces' -require_relative 'rubocop/cop/layout/space_before_brackets' -require_relative 'rubocop/cop/layout/space_before_comma' -require_relative 'rubocop/cop/layout/space_before_comment' -require_relative 'rubocop/cop/layout/space_before_first_arg' -require_relative 'rubocop/cop/layout/space_before_semicolon' -require_relative 'rubocop/cop/layout/space_in_lambda_literal' -require_relative 'rubocop/cop/layout/space_inside_array_percent_literal' -require_relative 'rubocop/cop/layout/space_inside_array_literal_brackets' -require_relative 'rubocop/cop/layout/space_inside_block_braces' -require_relative 'rubocop/cop/layout/space_inside_hash_literal_braces' -require_relative 'rubocop/cop/layout/space_inside_parens' -require_relative 'rubocop/cop/layout/space_inside_percent_literal_delimiters' -require_relative 'rubocop/cop/layout/space_inside_range_literal' -require_relative 'rubocop/cop/layout/space_inside_reference_brackets' -require_relative 'rubocop/cop/layout/space_inside_string_interpolation' -require_relative 'rubocop/cop/layout/trailing_empty_lines' -require_relative 'rubocop/cop/layout/trailing_whitespace' - -require_relative 'rubocop/cop/lint/ambiguous_assignment' -require_relative 'rubocop/cop/lint/ambiguous_block_association' -require_relative 'rubocop/cop/lint/ambiguous_operator' -require_relative 'rubocop/cop/lint/ambiguous_operator_precedence' -require_relative 'rubocop/cop/lint/ambiguous_range' -require_relative 'rubocop/cop/lint/ambiguous_regexp_literal' -require_relative 'rubocop/cop/lint/assignment_in_condition' -require_relative 'rubocop/cop/lint/big_decimal_new' -require_relative 'rubocop/cop/lint/binary_operator_with_identical_operands' -require_relative 'rubocop/cop/lint/boolean_symbol' -require_relative 'rubocop/cop/lint/circular_argument_reference' -require_relative 'rubocop/cop/lint/constant_definition_in_block' -require_relative 'rubocop/cop/lint/constant_overwritten_in_rescue' -require_relative 'rubocop/cop/lint/constant_resolution' -require_relative 'rubocop/cop/lint/debugger' -require_relative 'rubocop/cop/lint/deprecated_class_methods' -require_relative 'rubocop/cop/lint/deprecated_constants' -require_relative 'rubocop/cop/lint/deprecated_open_ssl_constant' -require_relative 'rubocop/cop/lint/disjunctive_assignment_in_constructor' -require_relative 'rubocop/cop/lint/duplicate_branch' -require_relative 'rubocop/cop/lint/duplicate_case_condition' -require_relative 'rubocop/cop/lint/duplicate_elsif_condition' -require_relative 'rubocop/cop/lint/duplicate_hash_key' -require_relative 'rubocop/cop/lint/duplicate_magic_comment' -require_relative 'rubocop/cop/lint/duplicate_match_pattern' -require_relative 'rubocop/cop/lint/duplicate_methods' -require_relative 'rubocop/cop/lint/duplicate_regexp_character_class_element' -require_relative 'rubocop/cop/lint/duplicate_require' -require_relative 'rubocop/cop/lint/duplicate_rescue_exception' -require_relative 'rubocop/cop/lint/each_with_object_argument' -require_relative 'rubocop/cop/lint/else_layout' -require_relative 'rubocop/cop/lint/empty_block' -require_relative 'rubocop/cop/lint/empty_class' -require_relative 'rubocop/cop/lint/empty_conditional_body' -require_relative 'rubocop/cop/lint/empty_ensure' -require_relative 'rubocop/cop/lint/empty_expression' -require_relative 'rubocop/cop/lint/empty_file' -require_relative 'rubocop/cop/lint/empty_in_pattern' -require_relative 'rubocop/cop/lint/empty_interpolation' -require_relative 'rubocop/cop/lint/empty_when' -require_relative 'rubocop/cop/lint/ensure_return' -require_relative 'rubocop/cop/lint/erb_new_arguments' -require_relative 'rubocop/cop/lint/flip_flop' -require_relative 'rubocop/cop/lint/float_comparison' -require_relative 'rubocop/cop/lint/float_out_of_range' -require_relative 'rubocop/cop/lint/format_parameter_mismatch' -require_relative 'rubocop/cop/lint/hash_compare_by_identity' -require_relative 'rubocop/cop/lint/heredoc_method_call_position' -require_relative 'rubocop/cop/lint/identity_comparison' -require_relative 'rubocop/cop/lint/implicit_string_concatenation' -require_relative 'rubocop/cop/lint/incompatible_io_select_with_fiber_scheduler' -require_relative 'rubocop/cop/lint/ineffective_access_modifier' -require_relative 'rubocop/cop/lint/inherit_exception' -require_relative 'rubocop/cop/lint/interpolation_check' -require_relative 'rubocop/cop/lint/it_without_arguments_in_block' -require_relative 'rubocop/cop/lint/lambda_without_literal_block' -require_relative 'rubocop/cop/lint/literal_as_condition' -require_relative 'rubocop/cop/lint/literal_assignment_in_condition' -require_relative 'rubocop/cop/lint/literal_in_interpolation' -require_relative 'rubocop/cop/lint/loop' -require_relative 'rubocop/cop/lint/missing_cop_enable_directive' -require_relative 'rubocop/cop/lint/missing_super' -require_relative 'rubocop/cop/lint/mixed_case_range' -require_relative 'rubocop/cop/lint/mixed_regexp_capture_types' -require_relative 'rubocop/cop/lint/multiple_comparison' -require_relative 'rubocop/cop/lint/nested_method_definition' -require_relative 'rubocop/cop/lint/nested_percent_literal' -require_relative 'rubocop/cop/lint/next_without_accumulator' -require_relative 'rubocop/cop/lint/no_return_in_begin_end_blocks' -require_relative 'rubocop/cop/lint/non_atomic_file_operation' -require_relative 'rubocop/cop/lint/non_deterministic_require_order' -require_relative 'rubocop/cop/lint/non_local_exit_from_iterator' -require_relative 'rubocop/cop/lint/number_conversion' -require_relative 'rubocop/cop/lint/numbered_parameter_assignment' -require_relative 'rubocop/cop/lint/or_assignment_to_constant' -require_relative 'rubocop/cop/lint/ordered_magic_comments' -require_relative 'rubocop/cop/lint/out_of_range_regexp_ref' -require_relative 'rubocop/cop/lint/parentheses_as_grouped_expression' -require_relative 'rubocop/cop/lint/percent_string_array' -require_relative 'rubocop/cop/lint/percent_symbol_array' -require_relative 'rubocop/cop/lint/raise_exception' -require_relative 'rubocop/cop/lint/rand_one' -require_relative 'rubocop/cop/lint/redundant_cop_disable_directive' -require_relative 'rubocop/cop/lint/redundant_cop_enable_directive' -require_relative 'rubocop/cop/lint/redundant_dir_glob_sort' -require_relative 'rubocop/cop/lint/redundant_regexp_quantifiers' -require_relative 'rubocop/cop/lint/redundant_require_statement' -require_relative 'rubocop/cop/lint/redundant_safe_navigation' -require_relative 'rubocop/cop/lint/redundant_splat_expansion' -require_relative 'rubocop/cop/lint/redundant_string_coercion' -require_relative 'rubocop/cop/lint/redundant_with_index' -require_relative 'rubocop/cop/lint/redundant_with_object' -require_relative 'rubocop/cop/lint/refinement_import_methods' -require_relative 'rubocop/cop/lint/regexp_as_condition' -require_relative 'rubocop/cop/lint/require_parentheses' -require_relative 'rubocop/cop/lint/require_range_parentheses' -require_relative 'rubocop/cop/lint/require_relative_self_path' -require_relative 'rubocop/cop/lint/rescue_exception' -require_relative 'rubocop/cop/lint/rescue_type' -require_relative 'rubocop/cop/lint/return_in_void_context' -require_relative 'rubocop/cop/lint/safe_navigation_consistency' -require_relative 'rubocop/cop/lint/safe_navigation_chain' -require_relative 'rubocop/cop/lint/safe_navigation_with_empty' -require_relative 'rubocop/cop/lint/script_permission' -require_relative 'rubocop/cop/lint/self_assignment' -require_relative 'rubocop/cop/lint/send_with_mixin_argument' -require_relative 'rubocop/cop/lint/shadowed_argument' -require_relative 'rubocop/cop/lint/shadowed_exception' -require_relative 'rubocop/cop/lint/shadowing_outer_local_variable' -require_relative 'rubocop/cop/lint/struct_new_override' -require_relative 'rubocop/cop/lint/suppressed_exception' -require_relative 'rubocop/cop/lint/symbol_conversion' -require_relative 'rubocop/cop/lint/syntax' -require_relative 'rubocop/cop/lint/to_enum_arguments' -require_relative 'rubocop/cop/lint/to_json' -require_relative 'rubocop/cop/lint/top_level_return_with_argument' -require_relative 'rubocop/cop/lint/trailing_comma_in_attribute_declaration' -require_relative 'rubocop/cop/lint/triple_quotes' -require_relative 'rubocop/cop/lint/underscore_prefixed_variable_name' -require_relative 'rubocop/cop/lint/unexpected_block_arity' -require_relative 'rubocop/cop/lint/unified_integer' -require_relative 'rubocop/cop/lint/unmodified_reduce_accumulator' -require_relative 'rubocop/cop/lint/unreachable_code' -require_relative 'rubocop/cop/lint/unreachable_loop' -require_relative 'rubocop/cop/lint/unused_block_argument' -require_relative 'rubocop/cop/lint/unused_method_argument' -require_relative 'rubocop/cop/lint/uri_escape_unescape' -require_relative 'rubocop/cop/lint/uri_regexp' -require_relative 'rubocop/cop/lint/useless_access_modifier' -require_relative 'rubocop/cop/lint/useless_assignment' -require_relative 'rubocop/cop/lint/useless_else_without_rescue' -require_relative 'rubocop/cop/lint/useless_method_definition' -require_relative 'rubocop/cop/lint/useless_rescue' -require_relative 'rubocop/cop/lint/useless_ruby2_keywords' -require_relative 'rubocop/cop/lint/useless_setter_call' -require_relative 'rubocop/cop/lint/useless_times' -require_relative 'rubocop/cop/lint/void' - -require_relative 'rubocop/cop/metrics/utils/iterating_block' -require_relative 'rubocop/cop/metrics/cyclomatic_complexity' -# relies on cyclomatic_complexity -require_relative 'rubocop/cop/metrics/utils/abc_size_calculator' -require_relative 'rubocop/cop/metrics/utils/code_length_calculator' -require_relative 'rubocop/cop/metrics/abc_size' -require_relative 'rubocop/cop/metrics/block_length' -require_relative 'rubocop/cop/metrics/block_nesting' -require_relative 'rubocop/cop/metrics/class_length' -require_relative 'rubocop/cop/metrics/collection_literal_length' -require_relative 'rubocop/cop/metrics/method_length' -require_relative 'rubocop/cop/metrics/module_length' -require_relative 'rubocop/cop/metrics/parameter_lists' -require_relative 'rubocop/cop/metrics/perceived_complexity' - -require_relative 'rubocop/cop/naming/accessor_method_name' -require_relative 'rubocop/cop/naming/ascii_identifiers' -require_relative 'rubocop/cop/naming/block_forwarding' -require_relative 'rubocop/cop/naming/block_parameter_name' -require_relative 'rubocop/cop/naming/class_and_module_camel_case' -require_relative 'rubocop/cop/naming/constant_name' -require_relative 'rubocop/cop/naming/file_name' -require_relative 'rubocop/cop/naming/heredoc_delimiter_case' -require_relative 'rubocop/cop/naming/heredoc_delimiter_naming' -require_relative 'rubocop/cop/naming/inclusive_language' -require_relative 'rubocop/cop/naming/memoized_instance_variable_name' -require_relative 'rubocop/cop/naming/method_name' -require_relative 'rubocop/cop/naming/method_parameter_name' -require_relative 'rubocop/cop/naming/binary_operator_parameter_name' -require_relative 'rubocop/cop/naming/predicate_name' -require_relative 'rubocop/cop/naming/rescued_exceptions_variable_name' -require_relative 'rubocop/cop/naming/variable_name' -require_relative 'rubocop/cop/naming/variable_number' - -require_relative 'rubocop/cop/style/access_modifier_declarations' -require_relative 'rubocop/cop/style/accessor_grouping' -require_relative 'rubocop/cop/style/alias' -require_relative 'rubocop/cop/style/and_or' -require_relative 'rubocop/cop/style/arguments_forwarding' -require_relative 'rubocop/cop/style/array_coercion' -require_relative 'rubocop/cop/style/array_first_last' -require_relative 'rubocop/cop/style/array_intersect' -require_relative 'rubocop/cop/style/array_join' -require_relative 'rubocop/cop/style/ascii_comments' -require_relative 'rubocop/cop/style/attr' -require_relative 'rubocop/cop/style/auto_resource_cleanup' -require_relative 'rubocop/cop/style/bare_percent_literals' -require_relative 'rubocop/cop/style/begin_block' -require_relative 'rubocop/cop/style/bisected_attr_accessor' -require_relative 'rubocop/cop/style/block_comments' -require_relative 'rubocop/cop/style/block_delimiters' -require_relative 'rubocop/cop/style/case_equality' -require_relative 'rubocop/cop/style/case_like_if' -require_relative 'rubocop/cop/style/character_literal' -require_relative 'rubocop/cop/style/class_and_module_children' -require_relative 'rubocop/cop/style/class_check' -require_relative 'rubocop/cop/style/class_equality_comparison' -require_relative 'rubocop/cop/style/class_methods' -require_relative 'rubocop/cop/style/class_methods_definitions' -require_relative 'rubocop/cop/style/class_vars' -require_relative 'rubocop/cop/style/collection_compact' -require_relative 'rubocop/cop/style/collection_methods' -require_relative 'rubocop/cop/style/colon_method_call' -require_relative 'rubocop/cop/style/colon_method_definition' -require_relative 'rubocop/cop/style/combinable_loops' -require_relative 'rubocop/cop/style/command_literal' -require_relative 'rubocop/cop/style/comment_annotation' -require_relative 'rubocop/cop/style/commented_keyword' -require_relative 'rubocop/cop/style/comparable_clamp' -require_relative 'rubocop/cop/style/concat_array_literals' -require_relative 'rubocop/cop/style/conditional_assignment' -require_relative 'rubocop/cop/style/constant_visibility' -require_relative 'rubocop/cop/style/copyright' -require_relative 'rubocop/cop/style/data_inheritance' -require_relative 'rubocop/cop/style/date_time' -require_relative 'rubocop/cop/style/def_with_parentheses' -require_relative 'rubocop/cop/style/dir' -require_relative 'rubocop/cop/style/dir_empty' -require_relative 'rubocop/cop/style/disable_cops_within_source_code_directive' -require_relative 'rubocop/cop/style/documentation_method' -require_relative 'rubocop/cop/style/documentation' -require_relative 'rubocop/cop/style/document_dynamic_eval_definition' -require_relative 'rubocop/cop/style/double_cop_disable_directive' -require_relative 'rubocop/cop/style/double_negation' -require_relative 'rubocop/cop/style/each_for_simple_loop' -require_relative 'rubocop/cop/style/each_with_object' -require_relative 'rubocop/cop/style/empty_block_parameter' -require_relative 'rubocop/cop/style/empty_case_condition' -require_relative 'rubocop/cop/style/empty_else' -require_relative 'rubocop/cop/style/empty_heredoc' -require_relative 'rubocop/cop/style/empty_lambda_parameter' -require_relative 'rubocop/cop/style/empty_literal' -require_relative 'rubocop/cop/style/empty_method' -require_relative 'rubocop/cop/style/endless_method' -require_relative 'rubocop/cop/style/encoding' -require_relative 'rubocop/cop/style/end_block' -require_relative 'rubocop/cop/style/env_home' -require_relative 'rubocop/cop/style/eval_with_location' -require_relative 'rubocop/cop/style/even_odd' -require_relative 'rubocop/cop/style/exact_regexp_match' -require_relative 'rubocop/cop/style/expand_path_arguments' -require_relative 'rubocop/cop/style/explicit_block_argument' -require_relative 'rubocop/cop/style/exponential_notation' -require_relative 'rubocop/cop/style/fetch_env_var' -require_relative 'rubocop/cop/style/file_empty' -require_relative 'rubocop/cop/style/file_read' -require_relative 'rubocop/cop/style/file_write' -require_relative 'rubocop/cop/style/float_division' -require_relative 'rubocop/cop/style/for' -require_relative 'rubocop/cop/style/format_string' -require_relative 'rubocop/cop/style/format_string_token' -require_relative 'rubocop/cop/style/frozen_string_literal_comment' -require_relative 'rubocop/cop/style/global_std_stream' -require_relative 'rubocop/cop/style/global_vars' -require_relative 'rubocop/cop/style/guard_clause' -require_relative 'rubocop/cop/style/hash_as_last_array_item' -require_relative 'rubocop/cop/style/hash_conversion' -require_relative 'rubocop/cop/style/hash_each_methods' -require_relative 'rubocop/cop/style/hash_except' -require_relative 'rubocop/cop/style/hash_like_case' -require_relative 'rubocop/cop/style/hash_syntax' -require_relative 'rubocop/cop/style/hash_transform_keys' -require_relative 'rubocop/cop/style/hash_transform_values' -require_relative 'rubocop/cop/style/identical_conditional_branches' -require_relative 'rubocop/cop/style/if_inside_else' -require_relative 'rubocop/cop/style/if_unless_modifier' -require_relative 'rubocop/cop/style/if_unless_modifier_of_if_unless' -require_relative 'rubocop/cop/style/if_with_boolean_literal_branches' -require_relative 'rubocop/cop/style/if_with_semicolon' -require_relative 'rubocop/cop/style/implicit_runtime_error' -require_relative 'rubocop/cop/style/in_pattern_then' -require_relative 'rubocop/cop/style/infinite_loop' -require_relative 'rubocop/cop/style/inverse_methods' -require_relative 'rubocop/cop/style/inline_comment' -require_relative 'rubocop/cop/style/invertible_unless_condition' -require_relative 'rubocop/cop/style/ip_addresses' -require_relative 'rubocop/cop/style/keyword_parameters_order' -require_relative 'rubocop/cop/style/lambda' -require_relative 'rubocop/cop/style/lambda_call' -require_relative 'rubocop/cop/style/line_end_concatenation' -require_relative 'rubocop/cop/style/magic_comment_format' -require_relative 'rubocop/cop/style/map_to_hash' -require_relative 'rubocop/cop/style/map_to_set' -require_relative 'rubocop/cop/style/method_call_without_args_parentheses' -require_relative 'rubocop/cop/style/method_call_with_args_parentheses' -require_relative 'rubocop/cop/style/min_max_comparison' -require_relative 'rubocop/cop/style/multiline_in_pattern_then' -require_relative 'rubocop/cop/style/numbered_parameters' -require_relative 'rubocop/cop/style/open_struct_use' -require_relative 'rubocop/cop/style/operator_method_call' -require_relative 'rubocop/cop/style/redundant_array_constructor' -require_relative 'rubocop/cop/style/redundant_assignment' -require_relative 'rubocop/cop/style/redundant_constant_base' -require_relative 'rubocop/cop/style/redundant_current_directory_in_path' -require_relative 'rubocop/cop/style/redundant_double_splat_hash_braces' -require_relative 'rubocop/cop/style/redundant_each' -require_relative 'rubocop/cop/style/redundant_fetch_block' -require_relative 'rubocop/cop/style/redundant_file_extension_in_require' -require_relative 'rubocop/cop/style/redundant_filter_chain' -require_relative 'rubocop/cop/style/redundant_heredoc_delimiter_quotes' -require_relative 'rubocop/cop/style/redundant_initialize' -require_relative 'rubocop/cop/style/redundant_line_continuation' -require_relative 'rubocop/cop/style/redundant_regexp_argument' -require_relative 'rubocop/cop/style/redundant_regexp_constructor' -require_relative 'rubocop/cop/style/redundant_self_assignment' -require_relative 'rubocop/cop/style/redundant_self_assignment_branch' -require_relative 'rubocop/cop/style/require_order' -require_relative 'rubocop/cop/style/single_line_do_end_block' -require_relative 'rubocop/cop/style/sole_nested_conditional' -require_relative 'rubocop/cop/style/static_class' -require_relative 'rubocop/cop/style/map_compact_with_conditional_block' -require_relative 'rubocop/cop/style/method_called_on_do_end_block' -require_relative 'rubocop/cop/style/method_def_parentheses' -require_relative 'rubocop/cop/style/min_max' -require_relative 'rubocop/cop/style/missing_else' -require_relative 'rubocop/cop/style/missing_respond_to_missing' -require_relative 'rubocop/cop/style/mixin_grouping' -require_relative 'rubocop/cop/style/mixin_usage' -require_relative 'rubocop/cop/style/module_function' -require_relative 'rubocop/cop/style/multiline_block_chain' -require_relative 'rubocop/cop/style/multiline_if_then' -require_relative 'rubocop/cop/style/multiline_if_modifier' -require_relative 'rubocop/cop/style/multiline_method_signature' -require_relative 'rubocop/cop/style/multiline_memoization' -require_relative 'rubocop/cop/style/multiline_ternary_operator' -require_relative 'rubocop/cop/style/multiline_when_then' -require_relative 'rubocop/cop/style/multiple_comparison' -require_relative 'rubocop/cop/style/mutable_constant' -require_relative 'rubocop/cop/style/negated_if' -require_relative 'rubocop/cop/style/negated_if_else_condition' -require_relative 'rubocop/cop/style/negated_unless' -require_relative 'rubocop/cop/style/negated_while' -require_relative 'rubocop/cop/style/nested_file_dirname' -require_relative 'rubocop/cop/style/nested_modifier' -require_relative 'rubocop/cop/style/nested_parenthesized_calls' -require_relative 'rubocop/cop/style/nested_ternary_operator' -require_relative 'rubocop/cop/style/next' -require_relative 'rubocop/cop/style/nil_comparison' -require_relative 'rubocop/cop/style/nil_lambda' -require_relative 'rubocop/cop/style/non_nil_check' -require_relative 'rubocop/cop/style/not' -require_relative 'rubocop/cop/style/numbered_parameters_limit' -require_relative 'rubocop/cop/style/numeric_literals' -require_relative 'rubocop/cop/style/numeric_literal_prefix' -require_relative 'rubocop/cop/style/numeric_predicate' -require_relative 'rubocop/cop/style/object_then' -require_relative 'rubocop/cop/style/one_line_conditional' -require_relative 'rubocop/cop/style/or_assignment' -require_relative 'rubocop/cop/style/option_hash' -require_relative 'rubocop/cop/style/optional_arguments' -require_relative 'rubocop/cop/style/optional_boolean_parameter' -require_relative 'rubocop/cop/style/parallel_assignment' -require_relative 'rubocop/cop/style/parentheses_around_condition' -require_relative 'rubocop/cop/style/percent_literal_delimiters' -require_relative 'rubocop/cop/style/percent_q_literals' -require_relative 'rubocop/cop/style/perl_backrefs' -require_relative 'rubocop/cop/style/preferred_hash_methods' -require_relative 'rubocop/cop/style/proc' -require_relative 'rubocop/cop/style/quoted_symbols' -require_relative 'rubocop/cop/style/raise_args' -require_relative 'rubocop/cop/style/random_with_offset' -require_relative 'rubocop/cop/style/redundant_argument' -require_relative 'rubocop/cop/style/redundant_begin' -require_relative 'rubocop/cop/style/redundant_capital_w' -require_relative 'rubocop/cop/style/redundant_condition' -require_relative 'rubocop/cop/style/redundant_conditional' -require_relative 'rubocop/cop/style/redundant_exception' -require_relative 'rubocop/cop/style/redundant_freeze' -require_relative 'rubocop/cop/style/redundant_interpolation' -require_relative 'rubocop/cop/style/redundant_parentheses' -require_relative 'rubocop/cop/style/redundant_percent_q' -require_relative 'rubocop/cop/style/redundant_regexp_character_class' -require_relative 'rubocop/cop/style/redundant_regexp_escape' -require_relative 'rubocop/cop/style/redundant_return' -require_relative 'rubocop/cop/style/redundant_self' -require_relative 'rubocop/cop/style/redundant_sort' -require_relative 'rubocop/cop/style/redundant_sort_by' -require_relative 'rubocop/cop/style/redundant_string_escape' -require_relative 'rubocop/cop/style/regexp_literal' -require_relative 'rubocop/cop/style/rescue_modifier' -require_relative 'rubocop/cop/style/rescue_standard_error' -require_relative 'rubocop/cop/style/return_nil' -require_relative 'rubocop/cop/style/return_nil_in_predicate_method_definition' -require_relative 'rubocop/cop/style/safe_navigation' -require_relative 'rubocop/cop/style/sample' -require_relative 'rubocop/cop/style/select_by_regexp' -require_relative 'rubocop/cop/style/self_assignment' -require_relative 'rubocop/cop/style/semicolon' -require_relative 'rubocop/cop/style/send' -require_relative 'rubocop/cop/style/signal_exception' -require_relative 'rubocop/cop/style/single_argument_dig' -require_relative 'rubocop/cop/style/single_line_block_params' -require_relative 'rubocop/cop/style/single_line_methods' -require_relative 'rubocop/cop/style/slicing_with_range' -require_relative 'rubocop/cop/style/special_global_vars' -require_relative 'rubocop/cop/style/stabby_lambda_parentheses' -require_relative 'rubocop/cop/style/stderr_puts' -require_relative 'rubocop/cop/style/string_chars' -require_relative 'rubocop/cop/style/string_concatenation' -require_relative 'rubocop/cop/style/string_hash_keys' -require_relative 'rubocop/cop/style/string_literals' -require_relative 'rubocop/cop/style/string_literals_in_interpolation' -require_relative 'rubocop/cop/style/string_methods' -require_relative 'rubocop/cop/style/strip' -require_relative 'rubocop/cop/style/struct_inheritance' -require_relative 'rubocop/cop/style/super_with_args_parentheses' -require_relative 'rubocop/cop/style/swap_values' -require_relative 'rubocop/cop/style/symbol_array' -require_relative 'rubocop/cop/style/symbol_literal' -require_relative 'rubocop/cop/style/symbol_proc' -require_relative 'rubocop/cop/style/ternary_parentheses' -require_relative 'rubocop/cop/style/top_level_method_definition' -require_relative 'rubocop/cop/style/trailing_body_on_class' -require_relative 'rubocop/cop/style/trailing_body_on_method_definition' -require_relative 'rubocop/cop/style/trailing_body_on_module' -require_relative 'rubocop/cop/style/trailing_comma_in_arguments' -require_relative 'rubocop/cop/style/trailing_comma_in_array_literal' -require_relative 'rubocop/cop/style/trailing_comma_in_block_args' -require_relative 'rubocop/cop/style/trailing_comma_in_hash_literal' -require_relative 'rubocop/cop/style/trailing_method_end_statement' -require_relative 'rubocop/cop/style/trailing_underscore_variable' -require_relative 'rubocop/cop/style/trivial_accessors' -require_relative 'rubocop/cop/style/unless_else' -require_relative 'rubocop/cop/style/unless_logical_operators' -require_relative 'rubocop/cop/style/unpack_first' -require_relative 'rubocop/cop/style/variable_interpolation' -require_relative 'rubocop/cop/style/when_then' -require_relative 'rubocop/cop/style/while_until_do' -require_relative 'rubocop/cop/style/while_until_modifier' -require_relative 'rubocop/cop/style/word_array' -require_relative 'rubocop/cop/style/yaml_file_read' -require_relative 'rubocop/cop/style/yoda_condition' -require_relative 'rubocop/cop/style/yoda_expression' -require_relative 'rubocop/cop/style/zero_length_predicate' - -require_relative 'rubocop/cop/security/compound_hash' -require_relative 'rubocop/cop/security/eval' -require_relative 'rubocop/cop/security/io_methods' -require_relative 'rubocop/cop/security/json_load' -require_relative 'rubocop/cop/security/marshal_load' -require_relative 'rubocop/cop/security/open' -require_relative 'rubocop/cop/security/yaml_load' - -require_relative 'rubocop/cop/team' -require_relative 'rubocop/formatter' - -require_relative 'rubocop/cached_data' -require_relative 'rubocop/config' -require_relative 'rubocop/config_loader_resolver' -require_relative 'rubocop/config_loader' -require_relative 'rubocop/config_obsoletion/rule' -require_relative 'rubocop/config_obsoletion/cop_rule' -require_relative 'rubocop/config_obsoletion/parameter_rule' -require_relative 'rubocop/config_obsoletion/changed_enforced_styles' -require_relative 'rubocop/config_obsoletion/changed_parameter' -require_relative 'rubocop/config_obsoletion/extracted_cop' -require_relative 'rubocop/config_obsoletion/removed_cop' -require_relative 'rubocop/config_obsoletion/renamed_cop' -require_relative 'rubocop/config_obsoletion/split_cop' -require_relative 'rubocop/config_obsoletion' -require_relative 'rubocop/config_store' -require_relative 'rubocop/config_validator' -require_relative 'rubocop/feature_loader' -require_relative 'rubocop/lockfile' -require_relative 'rubocop/target_finder' -require_relative 'rubocop/directive_comment' -require_relative 'rubocop/comment_config' -require_relative 'rubocop/result_cache' -require_relative 'rubocop/runner' -require_relative 'rubocop/cli' -require_relative 'rubocop/cli/command' -require_relative 'rubocop/cli/environment' -require_relative 'rubocop/cli/command/base' -require_relative 'rubocop/cli/command/auto_generate_config' -require_relative 'rubocop/cli/command/execute_runner' -require_relative 'rubocop/cli/command/init_dotfile' -require_relative 'rubocop/cli/command/lsp' -require_relative 'rubocop/cli/command/show_cops' -require_relative 'rubocop/cli/command/show_docs_url' -require_relative 'rubocop/cli/command/suggest_extensions' -require_relative 'rubocop/cli/command/version' -require_relative 'rubocop/config_regeneration' -require_relative 'rubocop/options' -require_relative 'rubocop/remote_config' -require_relative 'rubocop/target_ruby' -require_relative 'rubocop/yaml_duplication_checker' - -# rubocop:enable Style/RequireOrder - -unless File.exist?("#{__dir__}/../rubocop.gemspec") # Check if we are a gem - RuboCop::ResultCache.rubocop_required_features = $LOADED_FEATURES - before_us -end -RuboCop::AST.rubocop_loaded if RuboCop::AST.respond_to?(:rubocop_loaded) diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/arguments_env.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/arguments_env.rb deleted file mode 100644 index 39b8a412..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/arguments_env.rb +++ /dev/null @@ -1,17 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - # This is a class that reads optional command line arguments to rubocop from environment variable. - # @api private - class ArgumentsEnv - def self.read_as_arguments - if (arguments = ENV.fetch('RUBOCOP_OPTS', '')).empty? - [] - else - require 'shellwords' - - Shellwords.split(arguments) - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/arguments_file.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/arguments_file.rb deleted file mode 100644 index bf90a137..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/arguments_file.rb +++ /dev/null @@ -1,17 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - # This is a class that reads optional command line arguments to rubocop from .rubocop file. - # @api private - class ArgumentsFile - def self.read_as_arguments - if File.exist?('.rubocop') && !File.directory?('.rubocop') - require 'shellwords' - - File.read('.rubocop').shellsplit - else - [] - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/ast_aliases.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/ast_aliases.rb deleted file mode 100644 index e0f0cd3d..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/ast_aliases.rb +++ /dev/null @@ -1,8 +0,0 @@ -# frozen_string_literal: true - -# These aliases are for compatibility. -module RuboCop - NodePattern = AST::NodePattern - ProcessedSource = AST::ProcessedSource - Token = AST::Token -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cache_config.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cache_config.rb deleted file mode 100644 index 504a32e8..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cache_config.rb +++ /dev/null @@ -1,29 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - # This class represents the cache config of the caching RuboCop runs. - # @api private - class CacheConfig - def self.root_dir - root = ENV.fetch('RUBOCOP_CACHE_ROOT', nil) - root ||= yield - root ||= if ENV.key?('XDG_CACHE_HOME') - # Include user ID in the path to make sure the user has write - # access. - File.join(ENV.fetch('XDG_CACHE_HOME'), Process.uid.to_s) - else - # On FreeBSD, the /home path is a symbolic link to /usr/home - # and the $HOME environment variable returns the /home path. - # - # As $HOME is a built-in environment variable, FreeBSD users - # always get a warning message. - # - # To avoid raising warn log messages on FreeBSD, we retrieve - # the real path of the home folder. - File.join(File.realpath(Dir.home), '.cache') - end - - File.join(root, 'rubocop_cache') - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cached_data.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cached_data.rb deleted file mode 100644 index 16d9ecaa..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cached_data.rb +++ /dev/null @@ -1,58 +0,0 @@ -# frozen_string_literal: true - -require 'json' - -module RuboCop - # Converts RuboCop objects to and from the serialization format JSON. - # @api private - class CachedData - def initialize(filename) - @filename = filename - end - - def from_json(text) - deserialize_offenses(JSON.parse(text)) - end - - def to_json(offenses) - JSON.dump(offenses.map { |o| serialize_offense(o) }) - end - - private - - def serialize_offense(offense) - status = :uncorrected if %i[corrected corrected_with_todo].include?(offense.status) - { - # Calling #to_s here ensures that the serialization works when using - # other json serializers such as Oj. Some of these gems do not call - # #to_s implicitly. - severity: offense.severity.to_s, - location: { - begin_pos: offense.location.begin_pos, - end_pos: offense.location.end_pos - }, - message: message(offense), - cop_name: offense.cop_name, - status: status || offense.status - } - end - - def message(offense) - # JSON.dump will fail if the offense message contains text which is not - # valid UTF-8 - offense.message.dup.force_encoding(::Encoding::UTF_8).scrub - end - - # Restore an offense object loaded from a JSON file. - def deserialize_offenses(offenses) - source_buffer = Parser::Source::Buffer.new(@filename) - source_buffer.source = File.read(@filename, encoding: Encoding::UTF_8) - offenses.map! do |o| - location = Parser::Source::Range.new(source_buffer, - o['location']['begin_pos'], - o['location']['end_pos']) - Cop::Offense.new(o['severity'], location, o['message'], o['cop_name'], o['status'].to_sym) - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cli.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cli.rb deleted file mode 100644 index 18b818bf..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cli.rb +++ /dev/null @@ -1,208 +0,0 @@ -# frozen_string_literal: true - -require 'fileutils' - -module RuboCop - # The CLI is a class responsible of handling all the command line interface - # logic. - class CLI - STATUS_SUCCESS = 0 - STATUS_OFFENSES = 1 - STATUS_ERROR = 2 - STATUS_INTERRUPTED = Signal.list['INT'] + 128 - DEFAULT_PARALLEL_OPTIONS = %i[ - color config debug display_style_guide display_time display_only_fail_level_offenses - display_only_failed editor_mode except extra_details fail_level fix_layout format - ignore_disable_comments lint only only_guide_cops require safe - autocorrect safe_autocorrect autocorrect_all - ].freeze - - class Finished < StandardError; end - - attr_reader :options, :config_store - - def initialize - @options = {} - @config_store = ConfigStore.new - end - - # @api public - # - # Entry point for the application logic. Here we - # do the command line arguments processing and inspect - # the target files. - # - # @param args [Array] command line arguments - # @return [Integer] UNIX exit code - # - # rubocop:disable Metrics/MethodLength, Metrics/AbcSize - def run(args = ARGV) - @options, paths = Options.new.parse(args) - @env = Environment.new(@options, @config_store, paths) - - profile_if_needed do - if @options[:init] - run_command(:init) - else - act_on_options - validate_options_vs_config - parallel_by_default! - apply_default_formatter - execute_runners - end - end - rescue ConfigNotFoundError, IncorrectCopNameError, OptionArgumentError => e - warn e.message - STATUS_ERROR - rescue RuboCop::Error => e - warn Rainbow("Error: #{e.message}").red - STATUS_ERROR - rescue Finished - STATUS_SUCCESS - rescue OptionParser::InvalidOption => e - warn e.message - warn 'For usage information, use --help' - STATUS_ERROR - rescue StandardError, SyntaxError, LoadError => e - warn e.message - warn e.backtrace - STATUS_ERROR - end - # rubocop:enable Metrics/MethodLength, Metrics/AbcSize - - private - - # rubocop:disable Metrics/MethodLength, Metrics/AbcSize - def profile_if_needed - return yield unless @options[:profile] - - return STATUS_ERROR unless require_gem('stackprof') - - with_memory = @options[:memory] - if with_memory - return STATUS_ERROR unless require_gem('memory_profiler') - - MemoryProfiler.start - end - - tmp_dir = File.join(ConfigFinder.project_root, 'tmp') - FileUtils.mkdir_p(tmp_dir) - cpu_profile_file = File.join(tmp_dir, 'rubocop-stackprof.dump') - status = nil - - StackProf.run(out: cpu_profile_file) do - status = yield - end - puts "Profile report generated at #{cpu_profile_file}" - - if with_memory - puts 'Building memory report...' - report = MemoryProfiler.stop - memory_profile_file = File.join(tmp_dir, 'rubocop-memory_profiler.txt') - report.pretty_print(to_file: memory_profile_file, scale_bytes: true) - puts "Memory report generated at #{memory_profile_file}" - end - status - end - # rubocop:enable Metrics/MethodLength, Metrics/AbcSize - - def require_gem(name) - require name - true - rescue LoadError - warn("You don't have #{name} installed. Add it to your Gemfile and run `bundle install`") - false - end - - def run_command(name) - @env.run(name) - end - - def execute_runners - if @options[:auto_gen_config] - run_command(:auto_gen_config) - else - run_command(:execute_runner).tap { suggest_extensions } - end - end - - def suggest_extensions - run_command(:suggest_extensions) - end - - def validate_options_vs_config - return unless @options[:parallel] && !@config_store.for_pwd.for_all_cops['UseCache'] - - raise OptionArgumentError, '-P/--parallel uses caching to speed up execution, so combining ' \ - 'with AllCops: UseCache: false is not allowed.' - end - - def parallel_by_default! - # See https://github.com/rubocop/rubocop/pull/4537 for JRuby and Windows constraints. - return if RUBY_ENGINE != 'ruby' || RuboCop::Platform.windows? - - if (@options.keys - DEFAULT_PARALLEL_OPTIONS).empty? && - @config_store.for_pwd.for_all_cops['UseCache'] != false - puts 'Use parallel by default.' if @options[:debug] - - @options[:parallel] = true - end - end - - def act_on_options - set_options_to_config_loader - handle_editor_mode - - @config_store.options_config = @options[:config] if @options[:config] - @config_store.force_default_config! if @options[:force_default_config] - - handle_exiting_options - - if @options[:color] - # color output explicitly forced on - Rainbow.enabled = true - elsif @options[:color] == false - # color output explicitly forced off - Rainbow.enabled = false - end - end - - def set_options_to_config_loader - ConfigLoader.debug = @options[:debug] - ConfigLoader.disable_pending_cops = @options[:disable_pending_cops] - ConfigLoader.enable_pending_cops = @options[:enable_pending_cops] - ConfigLoader.ignore_parent_exclusion = @options[:ignore_parent_exclusion] - ConfigLoader.ignore_unrecognized_cops = @options[:ignore_unrecognized_cops] - end - - def handle_editor_mode - RuboCop::LSP.enable if @options[:editor_mode] - end - - # rubocop:disable Metrics/CyclomaticComplexity - def handle_exiting_options - return unless Options::EXITING_OPTIONS.any? { |o| @options.key? o } - - run_command(:version) if @options[:version] || @options[:verbose_version] - run_command(:show_cops) if @options[:show_cops] - run_command(:show_docs_url) if @options[:show_docs_url] - run_command(:lsp) if @options[:lsp] - raise Finished - end - # rubocop:enable Metrics/CyclomaticComplexity - - def apply_default_formatter - # This must be done after the options have already been processed, - # because they can affect how ConfigStore behaves - @options[:formatters] ||= begin - if @options[:auto_gen_config] - formatter = 'autogenconf' - else - cfg = @config_store.for_pwd.for_all_cops - formatter = cfg['DefaultFormatter'] || 'progress' - end - [[formatter, @options[:output_path]]] - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cli/command.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cli/command.rb deleted file mode 100644 index 775e929a..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cli/command.rb +++ /dev/null @@ -1,22 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - class CLI - # Home of subcommands in the CLI. - # @api private - module Command - class << self - # Find the command with a given name and run it in an environment. - def run(env, name) - class_for(name).new(env).run - end - - private - - def class_for(name) - Base.by_command_name(name) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cli/command/auto_generate_config.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cli/command/auto_generate_config.rb deleted file mode 100644 index 91066ed1..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cli/command/auto_generate_config.rb +++ /dev/null @@ -1,159 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - class CLI - module Command - # Generate a configuration file acting as a TODO list. - # @api private - class AutoGenerateConfig < Base - self.command_name = :auto_gen_config - - AUTO_GENERATED_FILE = '.rubocop_todo.yml' - YAML_OPTIONAL_DOC_START = /\A---(\s+#|\s*\z)/.freeze - PLACEHOLDER = '###rubocop:inherit_here' - - PHASE_1 = 'Phase 1 of 2: run Layout/LineLength cop' - PHASE_2 = 'Phase 2 of 2: run all cops' - - PHASE_1_OVERRIDDEN = '(skipped because the default Layout/LineLength:Max is overridden)' - PHASE_1_DISABLED = '(skipped because Layout/LineLength is disabled)' - PHASE_1_SKIPPED = '(skipped because a list of cops is passed to the `--only` flag)' - - def run - add_formatter - reset_config_and_auto_gen_file - line_length_contents = maybe_run_line_length_cop - run_all_cops(line_length_contents) - end - - private - - def maybe_run_line_length_cop - if !line_length_enabled?(@config_store.for_pwd) - skip_line_length_cop(PHASE_1_DISABLED) - elsif !same_max_line_length?(@config_store.for_pwd, ConfigLoader.default_configuration) - skip_line_length_cop(PHASE_1_OVERRIDDEN) - elsif options_has_only_flag? - skip_line_length_cop(PHASE_1_SKIPPED) - else - run_line_length_cop - end - end - - def skip_line_length_cop(reason) - puts Rainbow("#{PHASE_1} #{reason}").yellow - '' - end - - def line_length_enabled?(config) - line_length_cop(config)['Enabled'] - end - - def same_max_line_length?(config1, config2) - max_line_length(config1) == max_line_length(config2) - end - - def max_line_length(config) - line_length_cop(config)['Max'] - end - - def line_length_cop(config) - config.for_cop('Layout/LineLength') - end - - def options_has_only_flag? - @options[:only] - end - - # Do an initial run with only Layout/LineLength so that cops that - # depend on Layout/LineLength:Max get the correct value for that - # parameter. - def run_line_length_cop - puts Rainbow(PHASE_1).yellow - @options[:only] = ['Layout/LineLength'] - execute_runner - @options.delete(:only) - @config_store = ConfigStore.new - @config_store.options_config = @options[:config] if @options[:config] - # Save the todo configuration of the LineLength cop. - File.read(AUTO_GENERATED_FILE).lines.drop_while { |line| line.start_with?('#') }.join - end - - def run_all_cops(line_length_contents) - puts Rainbow(PHASE_2).yellow - result = execute_runner - # This run was made with the current maximum length allowed, so append - # the saved setting for LineLength. - File.open(AUTO_GENERATED_FILE, 'a') { |f| f.write(line_length_contents) } - result - end - - def reset_config_and_auto_gen_file - @config_store = ConfigStore.new - @config_store.options_config = @options[:config] if @options[:config] - File.open(AUTO_GENERATED_FILE, 'w') {} # create or truncate if exists - add_inheritance_from_auto_generated_file(@options[:config]) - end - - def add_formatter - @options[:formatters] << [Formatter::DisabledConfigFormatter, AUTO_GENERATED_FILE] - end - - def execute_runner - Environment.new(@options, @config_store, @paths).run(:execute_runner) - end - - def add_inheritance_from_auto_generated_file(config_file) - file_string = " #{relative_path_to_todo_from_options_config}" - - config_file ||= ConfigFinder::DOTFILE - - if File.exist?(config_file) - files = Array(ConfigLoader.load_yaml_configuration(config_file)['inherit_from']) - - return if files.include?(relative_path_to_todo_from_options_config) - - files.unshift(relative_path_to_todo_from_options_config) - file_string = "\n - #{files.join("\n - ")}" if files.size > 1 - rubocop_yml_contents = existing_configuration(config_file) - end - - write_config_file(config_file, file_string, rubocop_yml_contents) - - puts "Added inheritance from `#{relative_path_to_todo_from_options_config}` " \ - "in `#{ConfigFinder::DOTFILE}`." - end - - def existing_configuration(config_file) - File.read(config_file, encoding: Encoding::UTF_8) - .sub(/^inherit_from: *[^\n]+/, PLACEHOLDER) - .sub(/^inherit_from: *(\n *- *[^\n]+)+/, PLACEHOLDER) - end - - def write_config_file(file_name, file_string, rubocop_yml_contents) - lines = /\S/.match?(rubocop_yml_contents) ? rubocop_yml_contents.split("\n", -1) : [] - unless rubocop_yml_contents&.include?(PLACEHOLDER) - doc_start_index = lines.index { |line| YAML_OPTIONAL_DOC_START.match?(line) } || -1 - lines.insert(doc_start_index + 1, PLACEHOLDER) - end - File.write(file_name, lines.join("\n") - .sub(/#{PLACEHOLDER}\n*/o, "inherit_from:#{file_string}\n\n") - .sub(/\n\n+\Z/, "\n")) - end - - def relative_path_to_todo_from_options_config - return AUTO_GENERATED_FILE if !@options[:config] || options_config_in_root? - - base = Pathname.new('.') - config_dir = Pathname.new(File.dirname(@options[:config])) - - "#{base.relative_path_from(config_dir)}/#{AUTO_GENERATED_FILE}" - end - - def options_config_in_root? - File.dirname(@options[:config]) == '.' - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cli/command/base.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cli/command/base.rb deleted file mode 100644 index f35798a4..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cli/command/base.rb +++ /dev/null @@ -1,35 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - class CLI - module Command - # A subcommand in the CLI. - # @api private - class Base - attr_reader :env - - @subclasses = [] - - class << self - attr_accessor :command_name - - def inherited(subclass) - super - @subclasses << subclass - end - - def by_command_name(name) - @subclasses.detect { |s| s.command_name == name } - end - end - - def initialize(env) - @env = env - @options = env.options - @config_store = env.config_store - @paths = env.paths - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cli/command/execute_runner.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cli/command/execute_runner.rb deleted file mode 100644 index a1eaac1f..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cli/command/execute_runner.rb +++ /dev/null @@ -1,105 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - class CLI - module Command - # Run all the selected cops and report the result. - # @api private - class ExecuteRunner < Base - include Formatter::TextUtil - - # Combination of short and long formatter names. - INTEGRATION_FORMATTERS = %w[h html j json ju junit].freeze - - self.command_name = :execute_runner - - def run - execute_runner(@paths) - end - - private - - def execute_runner(paths) - runner = Runner.new(@options, @config_store) - - all_pass_or_excluded = with_redirect do - all_passed = runner.run(paths) - display_summary(runner) - all_passed || @options[:auto_gen_config] - end - - maybe_print_corrected_source - - if runner.aborting? - STATUS_INTERRUPTED - elsif all_pass_or_excluded && runner.errors.empty? - STATUS_SUCCESS - else - STATUS_OFFENSES - end - end - - def with_redirect - if @options[:stderr] - orig_stdout = $stdout - begin - $stdout = $stderr - yield - ensure - $stdout = orig_stdout - end - else - yield - end - end - - def display_summary(runner) - display_warning_summary(runner.warnings) - display_error_summary(runner.errors) - end - - def display_warning_summary(warnings) - return if warnings.empty? - - warn Rainbow("\n#{pluralize(warnings.size, 'warning')}:").yellow - - warnings.each { |warning| warn warning } - end - - def display_error_summary(errors) - return if errors.empty? - - warn Rainbow("\n#{pluralize(errors.size, 'error')} occurred:").red - - errors.each { |error| warn error } - - warn <<~WARNING - Errors are usually caused by RuboCop bugs. - Please, report your problems to RuboCop's issue tracker. - #{bug_tracker_uri} - Mention the following information in the issue report: - #{RuboCop::Version.version(debug: true)} - WARNING - end - - def bug_tracker_uri - return unless Gem.loaded_specs.key?('rubocop') - - "#{Gem.loaded_specs['rubocop'].metadata['bug_tracker_uri']}\n" - end - - def maybe_print_corrected_source - # Integration tools (like RubyMine) expect to have only the JSON result - # when specifying JSON format. Similar HTML and JUnit are targeted as well. - # See: https://github.com/rubocop/rubocop/issues/8673 - return if INTEGRATION_FORMATTERS.include?(@options[:format]) - - return unless @options[:stdin] && @options[:autocorrect] - - (@options[:stderr] ? $stderr : $stdout).puts '=' * 20 - print @options[:stdin] - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cli/command/init_dotfile.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cli/command/init_dotfile.rb deleted file mode 100644 index dab89307..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cli/command/init_dotfile.rb +++ /dev/null @@ -1,44 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - class CLI - module Command - # Generate a .rubocop.yml file in the current directory. - # @api private - class InitDotfile < Base - DOTFILE = ConfigFinder::DOTFILE - - self.command_name = :init - - def run - path = File.expand_path(DOTFILE) - - if File.exist?(DOTFILE) - warn Rainbow("#{DOTFILE} already exists at #{path}").red - - STATUS_ERROR - else - description = <<~DESC - # The behavior of RuboCop can be controlled via the .rubocop.yml - # configuration file. It makes it possible to enable/disable - # certain cops (checks) and to alter their behavior if they accept - # any parameters. The file can be placed either in your home - # directory or in some project directory. - # - # RuboCop will start looking for the configuration file in the directory - # where the inspected file is and continue its way up to the root directory. - # - # See https://docs.rubocop.org/rubocop/configuration - DESC - - File.write(DOTFILE, description) - - puts "Writing new #{DOTFILE} to #{path}" - - STATUS_SUCCESS - end - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cli/command/lsp.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cli/command/lsp.rb deleted file mode 100644 index c4eb1710..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cli/command/lsp.rb +++ /dev/null @@ -1,19 +0,0 @@ -# frozen_string_literal: true - -require_relative '../../lsp/server' - -module RuboCop - class CLI - module Command - # Start Language Server Protocol of RuboCop. - # @api private - class LSP < Base - self.command_name = :lsp - - def run - RuboCop::LSP::Server.new(@config_store).start - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cli/command/show_cops.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cli/command/show_cops.rb deleted file mode 100644 index 71ff2b0f..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cli/command/show_cops.rb +++ /dev/null @@ -1,74 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - class CLI - module Command - # Shows the given cops, or all cops by default, and their configurations - # for the current directory. - # @api private - class ShowCops < Base - self.command_name = :show_cops - - def initialize(env) - super - - # Load the configs so the require()s are done for custom cops - @config = @config_store.for(Dir.pwd) - end - - def run - print_available_cops - end - - private - - def print_available_cops - registry = Cop::Registry.global - show_all = @options[:show_cops].empty? - - puts "# Available cops (#{registry.length}) + config for #{Dir.pwd}: " if show_all - - registry.departments.sort!.each do |department| - print_cops_of_department(registry, department, show_all) - end - end - - def print_cops_of_department(registry, department, show_all) - selected_cops = if show_all - cops_of_department(registry, department) - else - selected_cops_of_department(registry, department) - end - - puts "# Department '#{department}' (#{selected_cops.length}):" if show_all - - print_cop_details(selected_cops) - end - - def print_cop_details(cops) - cops.each do |cop| - puts '# Supports --autocorrect' if cop.support_autocorrect? - puts "#{cop.cop_name}:" - puts config_lines(cop) - puts - end - end - - def selected_cops_of_department(cops, department) - cops_of_department(cops, department).select do |cop| - @options[:show_cops].include?(cop.cop_name) - end - end - - def cops_of_department(cops, department) - cops.with_department(department).sort! - end - - def config_lines(cop) - cnf = @config.for_cop(cop) - cnf.to_yaml.lines.to_a.drop(1).map { |line| " #{line}" } - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cli/command/show_docs_url.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cli/command/show_docs_url.rb deleted file mode 100644 index b286ab73..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cli/command/show_docs_url.rb +++ /dev/null @@ -1,48 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - class CLI - module Command - # Prints out url to documentation of provided cops - # or documentation base url by default. - # @api private - class ShowDocsUrl < Base - self.command_name = :show_docs_url - - def initialize(env) - super - - @config = @config_store.for(Dir.pwd) - end - - def run - print_documentation_url - end - - private - - def print_documentation_url - puts Cop::Documentation.default_base_url if cops_array.empty? - - cops_array.each do |cop_name| - cop = registry_hash[cop_name] - - next if cop.empty? - - puts Cop::Documentation.url_for(cop.first, @config) - end - - puts - end - - def cops_array - @cops_array ||= @options[:show_docs_url] - end - - def registry_hash - @registry_hash ||= Cop::Registry.global.to_h - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cli/command/suggest_extensions.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cli/command/suggest_extensions.rb deleted file mode 100644 index a818b6e1..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cli/command/suggest_extensions.rb +++ /dev/null @@ -1,126 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - class CLI - module Command - # Suggest RuboCop extensions to install based on Gemfile dependencies. - # Only primary dependencies are evaluated, so if a dependency depends on a - # gem with an extension, it is not suggested. However, if an extension is - # a transitive dependency, it will not be suggested. - # @api private - class SuggestExtensions < Base - # Combination of short and long formatter names. - INCLUDED_FORMATTERS = %w[p progress fu fuubar pa pacman].freeze - - self.command_name = :suggest_extensions - - def run - return if skip? || extensions.none? - - print_install_suggestions if not_installed_extensions.any? - print_load_suggestions if installed_and_not_loaded_extensions.any? - - print_opt_out_instruction - - puts if @options[:display_time] - end - - private - - def skip? - # Disable outputting the notification: - # 1. On CI - # 2. When given RuboCop options that it doesn't make sense for - # 3. For all formatters except specified in `INCLUDED_FORMATTERS'` - ENV.fetch('CI', nil) || - @options[:only] || @options[:debug] || @options[:list_target_files] || - @options[:out] || @options[:stdin] || - !INCLUDED_FORMATTERS.include?(current_formatter) - end - - def print_install_suggestions - puts - puts 'Tip: Based on detected gems, the following ' \ - 'RuboCop extension libraries might be helpful:' - - not_installed_extensions.sort.each do |extension| - puts " * #{extension} (https://rubygems.org/gems/#{extension})" - end - end - - def print_load_suggestions - puts - puts 'The following RuboCop extension libraries are installed but not loaded in config:' - - installed_and_not_loaded_extensions.sort.each do |extension| - puts " * #{extension}" - end - end - - def print_opt_out_instruction - puts - puts 'You can opt out of this message by adding the following to your config ' \ - '(see https://docs.rubocop.org/rubocop/extensions.html#extension-suggestions ' \ - 'for more options):' - puts ' AllCops:' - puts ' SuggestExtensions: false' - end - - def current_formatter - @options[:format] || @config_store.for_pwd.for_all_cops['DefaultFormatter'] || 'p' - end - - def all_extensions - return [] unless lockfile.dependencies.any? - - extensions = @config_store.for_pwd.for_all_cops['SuggestExtensions'] - case extensions - when true - extensions = ConfigLoader.default_configuration.for_all_cops['SuggestExtensions'] - when false, nil - extensions = {} - end - - extensions.select { |_, v| (Array(v) & dependent_gems).any? }.keys - end - - def extensions - not_installed_extensions + installed_and_not_loaded_extensions - end - - def installed_extensions - all_extensions & installed_gems - end - - def not_installed_extensions - all_extensions - installed_gems - end - - def loaded_extensions - @config_store.for_pwd.loaded_features.to_a - end - - def installed_and_not_loaded_extensions - installed_extensions - loaded_extensions - end - - def lockfile - @lockfile ||= Lockfile.new - end - - def dependent_gems - lockfile.dependencies.map(&:name) - end - - def installed_gems - lockfile.gems.map(&:name) - end - - def puts(*args) - output = (@options[:stderr] ? $stderr : $stdout) - output.puts(*args) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cli/command/version.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cli/command/version.rb deleted file mode 100644 index d097a31a..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cli/command/version.rb +++ /dev/null @@ -1,18 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - class CLI - module Command - # Display version. - # @api private - class Version < Base - self.command_name = :version - - def run - puts RuboCop::Version.version(debug: false) if @options[:version] - puts RuboCop::Version.version(debug: true, env: env) if @options[:verbose_version] - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cli/environment.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cli/environment.rb deleted file mode 100644 index 70276eb9..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cli/environment.rb +++ /dev/null @@ -1,22 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - class CLI - # Execution environment for a CLI command. - # @api private - class Environment - attr_reader :options, :config_store, :paths - - def initialize(options, config_store, paths) - @options = options - @config_store = config_store - @paths = paths - end - - # Run a command in this environment. - def run(name) - Command.run(self, name) - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/comment_config.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/comment_config.rb deleted file mode 100644 index 3cab1bf1..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/comment_config.rb +++ /dev/null @@ -1,216 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - # This class parses the special `rubocop:disable` comments in a source - # and provides a way to check if each cop is enabled at arbitrary line. - class CommentConfig - extend Forwardable - - CONFIG_DISABLED_LINE_RANGE_MIN = -Float::INFINITY - - # This class provides an API compatible with RuboCop::DirectiveComment - # to be used for cops that are disabled in the config file - class ConfigDisabledCopDirectiveComment - include RuboCop::Ext::Comment - - attr_reader :text, :loc, :line_number - - Loc = Struct.new(:expression) - Expression = Struct.new(:line) - - def initialize(cop_name) - @text = "# rubocop:disable #{cop_name}" - @line_number = CONFIG_DISABLED_LINE_RANGE_MIN - @loc = Loc.new(Expression.new(CONFIG_DISABLED_LINE_RANGE_MIN)) - end - end - - CopAnalysis = Struct.new(:line_ranges, :start_line_number) - - attr_reader :processed_source - - def_delegators :@processed_source, :config, :registry - - def initialize(processed_source) - @processed_source = processed_source - @no_directives = !processed_source.raw_source.include?('rubocop') - end - - def cop_enabled_at_line?(cop, line_number) - cop = cop.cop_name if cop.respond_to?(:cop_name) - disabled_line_ranges = cop_disabled_line_ranges[cop] - return true unless disabled_line_ranges - - disabled_line_ranges.none? { |range| range.include?(line_number) } - end - - def cop_opted_in?(cop) - opt_in_cops.include?(cop.cop_name) - end - - def cop_disabled_line_ranges - @cop_disabled_line_ranges ||= analyze - end - - def extra_enabled_comments - disable_count = Hash.new(0) - registry.disabled(config).each do |cop| - disable_count[cop.cop_name] += 1 - end - extra_enabled_comments_with_names(extras: Hash.new { |h, k| h[k] = [] }, names: disable_count) - end - - def comment_only_line?(line_number) - non_comment_token_line_numbers.none?(line_number) - end - - private - - def extra_enabled_comments_with_names(extras:, names:) - each_directive do |directive| - next unless comment_only_line?(directive.line_number) - - if directive.enabled_all? - handle_enable_all(directive, names, extras) - else - handle_switch(directive, names, extras) - end - end - - extras - end - - def opt_in_cops - @opt_in_cops ||= begin - cops = Set.new - each_directive do |directive| - next unless directive.enabled? - next if directive.all_cops? - - cops.merge(directive.cop_names) - end - cops - end - end - - def analyze # rubocop:todo Metrics/AbcSize - return {} if @no_directives - - analyses = Hash.new { |hash, key| hash[key] = CopAnalysis.new([], nil) } - inject_disabled_cops_directives(analyses) - - each_directive do |directive| - directive.cop_names.each do |cop_name| - cop_name = qualified_cop_name(cop_name) - analyses[cop_name] = analyze_cop(analyses[cop_name], directive) - end - end - - analyses.each_with_object({}) do |element, hash| - cop_name, analysis = *element - hash[cop_name] = cop_line_ranges(analysis) - end - end - - def inject_disabled_cops_directives(analyses) - registry.disabled(config).each do |cop| - analyses[cop.cop_name] = analyze_cop( - analyses[cop.cop_name], - DirectiveComment.new(ConfigDisabledCopDirectiveComment.new(cop.cop_name)) - ) - end - end - - def analyze_cop(analysis, directive) - # Disabling cops after comments like `#=SomeDslDirective` does not related to single line - if !comment_only_line?(directive.line_number) || directive.single_line? - analyze_single_line(analysis, directive) - elsif directive.disabled? - analyze_disabled(analysis, directive) - else - analyze_rest(analysis, directive) - end - end - - def analyze_single_line(analysis, directive) - return analysis unless directive.disabled? - - line = directive.line_number - start_line = analysis.start_line_number - - CopAnalysis.new(analysis.line_ranges + [(line..line)], start_line) - end - - def analyze_disabled(analysis, directive) - line = directive.line_number - start_line = analysis.start_line_number - - # Cop already disabled on this line, so we end the current disabled - # range before we start a new range. - return CopAnalysis.new(analysis.line_ranges + [start_line..line], line) if start_line - - CopAnalysis.new(analysis.line_ranges, line) - end - - def analyze_rest(analysis, directive) - line = directive.line_number - start_line = analysis.start_line_number - - return CopAnalysis.new(analysis.line_ranges + [start_line..line], nil) if start_line - - CopAnalysis.new(analysis.line_ranges, nil) - end - - def cop_line_ranges(analysis) - return analysis.line_ranges unless analysis.start_line_number - - analysis.line_ranges + [(analysis.start_line_number..Float::INFINITY)] - end - - def each_directive - return if @no_directives - - processed_source.comments.each do |comment| - directive = DirectiveComment.new(comment) - yield directive if directive.cop_names - end - end - - def qualified_cop_name(cop_name) - Cop::Registry.qualified_cop_name(cop_name.strip, processed_source.file_path) - end - - def non_comment_token_line_numbers - @non_comment_token_line_numbers ||= begin - non_comment_tokens = processed_source.tokens.reject(&:comment?) - non_comment_tokens.map(&:line).uniq - end - end - - def handle_enable_all(directive, names, extras) - enabled_cops = 0 - names.each do |name, counter| - next unless counter.positive? - - names[name] -= 1 - enabled_cops += 1 - end - - extras[directive.comment] << 'all' if enabled_cops.zero? - end - - # Collect cops that have been disabled or enabled by name in a directive comment - # so that `Lint/RedundantCopEnableDirective` can register offenses correctly. - def handle_switch(directive, names, extras) - directive.cop_names.each do |name| - if directive.disabled? - names[name] += 1 - elsif (names[name]).positive? - names[name] -= 1 - else - extras[directive.comment] << name - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/config.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/config.rb deleted file mode 100644 index 76625303..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/config.rb +++ /dev/null @@ -1,328 +0,0 @@ -# frozen_string_literal: true - -# FIXME: Moving Rails department code to RuboCop Rails will remove -# the following rubocop:disable comment. -# rubocop:disable Metrics/ClassLength -module RuboCop - # This class represents the configuration of the RuboCop application - # and all its cops. A Config is associated with a YAML configuration - # file from which it was read. Several different Configs can be used - # during a run of the rubocop program, if files in several - # directories are inspected. - class Config - include PathUtil - include FileFinder - extend Forwardable - - CopConfig = Struct.new(:name, :metadata) - - DEFAULT_RAILS_VERSION = 5.0 - attr_reader :loaded_path - - def self.create(hash, path, check: true) - config = new(hash, path) - config.check if check - - config - end - - # rubocop:disable Metrics/AbcSize - def initialize(hash = RuboCop::ConfigLoader.default_configuration, loaded_path = nil) - @loaded_path = loaded_path - @for_cop = Hash.new do |h, cop| - cop_name = cop.respond_to?(:cop_name) ? cop.cop_name : cop - qualified_cop_name = Cop::Registry.qualified_cop_name(cop_name, loaded_path) - cop_options = self[qualified_cop_name].dup || {} - cop_options['Enabled'] = enable_cop?(qualified_cop_name, cop_options) - h[cop] = h[cop_name] = cop_options - end - @hash = hash - @validator = ConfigValidator.new(self) - - @badge_config_cache = {}.compare_by_identity - @clusivity_config_exists_cache = {} - end - # rubocop:enable Metrics/AbcSize - - def loaded_features - @loaded_features ||= ConfigLoader.loaded_features - end - - def check - deprecation_check { |deprecation_message| warn("#{loaded_path} - #{deprecation_message}") } - @validator.validate - make_excludes_absolute - self - end - - def validate_after_resolution - @validator.validate_after_resolution - self - end - - def_delegators :@hash, :[], :[]=, :delete, :dig, :each, :key?, :keys, :each_key, - :fetch, :map, :merge, :replace, :to_h, :to_hash, :transform_values - def_delegators :@validator, :validate, :target_ruby_version - - def to_s - @to_s ||= @hash.to_s - end - - def signature - @signature ||= Digest::SHA1.hexdigest(to_s) - end - - # True if this is a config file that is shipped with RuboCop - def internal? - base_config_path = File.expand_path(File.join(ConfigLoader::RUBOCOP_HOME, 'config')) - File.expand_path(loaded_path).start_with?(base_config_path) - end - - def make_excludes_absolute - each_key do |key| - @validator.validate_section_presence(key) - next unless self[key]['Exclude'] - - self[key]['Exclude'].map! do |exclude_elem| - if exclude_elem.is_a?(String) && !absolute?(exclude_elem) - File.expand_path(File.join(base_dir_for_path_parameters, exclude_elem)) - else - exclude_elem - end - end - end - end - - def add_excludes_from_higher_level(highest_config) - return unless highest_config.for_all_cops['Exclude'] - - excludes = for_all_cops['Exclude'] ||= [] - highest_config.for_all_cops['Exclude'].each do |path| - unless path.is_a?(Regexp) || absolute?(path) - path = File.join(File.dirname(highest_config.loaded_path), path) - end - excludes << path unless excludes.include?(path) - end - end - - def deprecation_check - %w[Exclude Include].each do |key| - plural = "#{key}s" - next unless for_all_cops[plural] - - for_all_cops[key] = for_all_cops[plural] # Stay backwards compatible. - for_all_cops.delete(plural) - yield "AllCops/#{plural} was renamed to AllCops/#{key}" - end - end - - # @return [Config] for the given cop / cop name. - # Note: the 'Enabled' attribute is calculated according to the department's - # and 'AllCops' configuration; other attributes are not inherited. - def for_cop(cop) - @for_cop[cop] - end - - # @return [Config] for the given cop merged with that of its department (if any) - # Note: the 'Enabled' attribute is same as that returned by `for_cop` - def for_badge(badge) - @badge_config_cache[badge] ||= begin - department_config = self[badge.department_name] - cop_config = for_cop(badge.to_s) - if department_config - department_config.merge(cop_config) - else - cop_config - end - end - end - - # @return [Boolean] whether config for this badge has 'Include' or 'Exclude' keys - # @api private - def clusivity_config_for_badge?(badge) - exists = @clusivity_config_exists_cache[badge.to_s] - return exists unless exists.nil? - - cop_config = for_badge(badge) - @clusivity_config_exists_cache[badge.to_s] = cop_config['Include'] || cop_config['Exclude'] - end - - # @return [Config] for the given department name. - # Note: the 'Enabled' attribute will be present only if specified - # at the department's level - def for_department(department_name) - @for_department ||= Hash.new { |h, dept| h[dept] = self[dept] || {} } - @for_department[department_name.to_s] - end - - def for_all_cops - @for_all_cops ||= self['AllCops'] || {} - end - - def disabled_new_cops? - for_all_cops['NewCops'] == 'disable' - end - - def enabled_new_cops? - for_all_cops['NewCops'] == 'enable' - end - - def active_support_extensions_enabled? - for_all_cops['ActiveSupportExtensionsEnabled'] - end - - def file_to_include?(file) - relative_file_path = path_relative_to_config(file) - - # Optimization to quickly decide if the given file is hidden (on the top - # level) and cannot be matched by any pattern. - is_hidden = relative_file_path.start_with?('.') && !relative_file_path.start_with?('..') - return false if is_hidden && !possibly_include_hidden? - - absolute_file_path = File.expand_path(file) - - patterns_to_include.any? do |pattern| - if block_given? - yield pattern, relative_file_path, absolute_file_path - else - match_path?(pattern, relative_file_path) || match_path?(pattern, absolute_file_path) - end - end - end - - def allowed_camel_case_file?(file) - # Gemspecs are allowed to have dashes because that fits with bundler best - # practices in the case when the gem is nested under a namespace (e.g., - # `bundler-console` conveys `Bundler::Console`). - return true if File.extname(file) == '.gemspec' - - file_to_include?(file) do |pattern, relative_path, absolute_path| - /[A-Z]/.match?(pattern.to_s) && - (match_path?(pattern, relative_path) || match_path?(pattern, absolute_path)) - end - end - - # Returns true if there's a chance that an Include pattern matches hidden - # files, false if that's definitely not possible. - def possibly_include_hidden? - return @possibly_include_hidden if defined?(@possibly_include_hidden) - - @possibly_include_hidden = patterns_to_include.any? do |s| - s.is_a?(Regexp) || s.start_with?('.') || s.include?('/.') - end - end - - def file_to_exclude?(file) - file = File.expand_path(file) - patterns_to_exclude.any? { |pattern| match_path?(pattern, file) } - end - - def patterns_to_include - for_all_cops['Include'] || [] - end - - def patterns_to_exclude - for_all_cops['Exclude'] || [] - end - - def path_relative_to_config(path) - relative_path(path, base_dir_for_path_parameters) - end - - # Paths specified in configuration files starting with .rubocop are - # relative to the directory where that file is. Paths in other config files - # are relative to the current directory. This is so that paths in - # config/default.yml, for example, are not relative to RuboCop's config - # directory since that wouldn't work. - def base_dir_for_path_parameters - @base_dir_for_path_parameters ||= - if loaded_path && File.basename(loaded_path).start_with?('.rubocop') && - loaded_path != File.join(Dir.home, ConfigLoader::DOTFILE) - File.expand_path(File.dirname(loaded_path)) - else - Dir.pwd - end - end - - def target_rails_version - @target_rails_version ||= - if for_all_cops['TargetRailsVersion'] - for_all_cops['TargetRailsVersion'].to_f - elsif target_rails_version_from_bundler_lock_file - target_rails_version_from_bundler_lock_file - else - DEFAULT_RAILS_VERSION - end - end - - def smart_loaded_path - PathUtil.smart_path(@loaded_path) - end - - def bundler_lock_file_path - return nil unless loaded_path - - base_path = base_dir_for_path_parameters - ['Gemfile.lock', 'gems.locked'].each do |file_name| - path = find_file_upwards(file_name, base_path) - return path if path - end - nil - end - - def pending_cops - keys.each_with_object([]) do |qualified_cop_name, pending_cops| - department = department_of(qualified_cop_name) - next if department && department['Enabled'] == false - - cop_metadata = self[qualified_cop_name] - next unless cop_metadata['Enabled'] == 'pending' - - pending_cops << CopConfig.new(qualified_cop_name, cop_metadata) - end - end - - def inspect # :nodoc: - "#<#{self.class.name}:#{object_id} @loaded_path=#{loaded_path}>" - end - - private - - def target_rails_version_from_bundler_lock_file - @target_rails_version_from_bundler_lock_file ||= read_rails_version_from_bundler_lock_file - end - - def read_rails_version_from_bundler_lock_file - lock_file_path = bundler_lock_file_path - return nil unless lock_file_path - - File.foreach(lock_file_path) do |line| - # If Rails (or one of its frameworks) is in Gemfile.lock or gems.lock, there should be - # a line like: - # railties (X.X.X) - result = line.match(/^\s+railties\s+\((\d+\.\d+)/) - return result.captures.first.to_f if result - end - end - - def enable_cop?(qualified_cop_name, cop_options) - # If the cop is explicitly enabled or `Lint/Syntax`, the other checks can be skipped. - return true if cop_options['Enabled'] == true || qualified_cop_name == 'Lint/Syntax' - - department = department_of(qualified_cop_name) - cop_enabled = cop_options.fetch('Enabled') { !for_all_cops['DisabledByDefault'] } - return true if cop_enabled == 'override_department' - return false if department && department['Enabled'] == false - - cop_enabled - end - - def department_of(qualified_cop_name) - *cop_department, _ = qualified_cop_name.split('/') - return nil if cop_department.empty? - - self[cop_department.join('/')] - end - end -end -# rubocop:enable Metrics/ClassLength diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/config_finder.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/config_finder.rb deleted file mode 100644 index 96a9df2d..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/config_finder.rb +++ /dev/null @@ -1,78 +0,0 @@ -# frozen_string_literal: true - -require_relative 'file_finder' - -module RuboCop - # This class has methods related to finding configuration path. - # @api private - class ConfigFinder - DOTFILE = '.rubocop.yml' - XDG_CONFIG = 'config.yml' - RUBOCOP_HOME = File.realpath(File.join(File.dirname(__FILE__), '..', '..')) - DEFAULT_FILE = File.join(RUBOCOP_HOME, 'config', 'default.yml') - - class << self - include FileFinder - - attr_writer :project_root - - def find_config_path(target_dir) - find_project_dotfile(target_dir) || find_project_root_dot_config || - find_user_dotfile || find_user_xdg_config || DEFAULT_FILE - end - - # Returns the path RuboCop inferred as the root of the project. No file - # searches will go past this directory. - def project_root - @project_root ||= find_project_root - end - - private - - def find_project_root - pwd = Dir.pwd - gems_file = find_last_file_upwards('Gemfile', pwd) || find_last_file_upwards('gems.rb', pwd) - return unless gems_file - - File.dirname(gems_file) - end - - def find_project_dotfile(target_dir) - find_file_upwards(DOTFILE, target_dir, project_root) - end - - def find_project_root_dot_config - return unless project_root - - dotfile = File.join(project_root, '.config', DOTFILE) - return dotfile if File.exist?(dotfile) - - xdg_config = File.join(project_root, '.config', 'rubocop', XDG_CONFIG) - xdg_config if File.exist?(xdg_config) - end - - def find_user_dotfile - return unless ENV.key?('HOME') - - file = File.join(Dir.home, DOTFILE) - - file if File.exist?(file) - end - - def find_user_xdg_config - xdg_config_home = expand_path(ENV.fetch('XDG_CONFIG_HOME', '~/.config')) - xdg_config = File.join(xdg_config_home, 'rubocop', XDG_CONFIG) - - xdg_config if File.exist?(xdg_config) - end - - def expand_path(path) - File.expand_path(path) - rescue ArgumentError - # Could happen because HOME or ID could not be determined. Fall back on - # using the path literally in that case. - path - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/config_loader.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/config_loader.rb deleted file mode 100644 index b7c6eee5..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/config_loader.rb +++ /dev/null @@ -1,258 +0,0 @@ -# frozen_string_literal: true - -require 'erb' -require 'yaml' -require_relative 'config_finder' - -module RuboCop - # Raised when a RuboCop configuration file is not found. - class ConfigNotFoundError < Error - end - - # This class represents the configuration of the RuboCop application - # and all its cops. A Config is associated with a YAML configuration - # file from which it was read. Several different Configs can be used - # during a run of the rubocop program, if files in several - # directories are inspected. - class ConfigLoader - DOTFILE = ConfigFinder::DOTFILE - RUBOCOP_HOME = File.realpath(File.join(File.dirname(__FILE__), '..', '..')) - DEFAULT_FILE = File.join(RUBOCOP_HOME, 'config', 'default.yml') - - class << self - include FileFinder - - PENDING_BANNER = <<~BANNER - The following cops were added to RuboCop, but are not configured. Please set Enabled to either `true` or `false` in your `.rubocop.yml` file. - - Please also note that you can opt-in to new cops by default by adding this to your config: - AllCops: - NewCops: enable - BANNER - - attr_accessor :debug, :ignore_parent_exclusion, :disable_pending_cops, :enable_pending_cops, - :ignore_unrecognized_cops - attr_writer :default_configuration - attr_reader :loaded_features - - alias debug? debug - alias ignore_parent_exclusion? ignore_parent_exclusion - - def clear_options - @debug = nil - @loaded_features = Set.new - FileFinder.root_level = nil - end - - def load_file(file, check: true) - path = file_path(file) - - hash = load_yaml_configuration(path) - - loaded_features = resolver.resolve_requires(path, hash) - add_loaded_features(loaded_features) - - resolver.override_department_setting_for_cops({}, hash) - resolver.resolve_inheritance_from_gems(hash) - resolver.resolve_inheritance(path, hash, file, debug?) - hash.delete('inherit_from') - - # Adding missing namespaces only after resolving requires & inheritance, - # since both can introduce new cops that need to be considered here. - add_missing_namespaces(path, hash) - - Config.create(hash, path, check: check) - end - - def load_yaml_configuration(absolute_path) - file_contents = read_file(absolute_path) - yaml_code = Dir.chdir(File.dirname(absolute_path)) { ERB.new(file_contents).result } - check_duplication(yaml_code, absolute_path) - hash = yaml_safe_load(yaml_code, absolute_path) || {} - - puts "configuration from #{absolute_path}" if debug? - - raise(TypeError, "Malformed configuration in #{absolute_path}") unless hash.is_a?(Hash) - - hash - end - - def add_missing_namespaces(path, hash) - # Using `hash.each_key` will cause the - # `can't add a new key into hash during iteration` error - hash_keys = hash.keys - hash_keys.each do |key| - q = Cop::Registry.qualified_cop_name(key, path) - next if q == key - - hash[q] = hash.delete(key) - end - end - - # Return a recursive merge of two hashes. That is, a normal hash merge, - # with the addition that any value that is a hash, and occurs in both - # arguments, will also be merged. And so on. - def merge(base_hash, derived_hash) - resolver.merge(base_hash, derived_hash) - end - - # Returns the path of .rubocop.yml searching upwards in the - # directory structure starting at the given directory where the - # inspected file is. If no .rubocop.yml is found there, the - # user's home directory is checked. If there's no .rubocop.yml - # there either, the path to the default file is returned. - def configuration_file_for(target_dir) - ConfigFinder.find_config_path(target_dir) - end - - def configuration_from_file(config_file, check: true) - return default_configuration if config_file == DEFAULT_FILE - - config = load_file(config_file, check: check) - config.validate_after_resolution if check - - if ignore_parent_exclusion? - print 'Ignoring AllCops/Exclude from parent folders' if debug? - else - add_excludes_from_files(config, config_file) - end - - merge_with_default(config, config_file).tap do |merged_config| - unless possible_new_cops?(merged_config) - pending_cops = pending_cops_only_qualified(merged_config.pending_cops) - warn_on_pending_cops(pending_cops) unless pending_cops.empty? - end - end - end - - def pending_cops_only_qualified(pending_cops) - pending_cops.select { |cop| Cop::Registry.qualified_cop?(cop.name) } - end - - def possible_new_cops?(config) - disable_pending_cops || enable_pending_cops || - config.disabled_new_cops? || config.enabled_new_cops? - end - - def add_excludes_from_files(config, config_file) - exclusion_file = find_last_file_upwards(DOTFILE, config_file, ConfigFinder.project_root) - - return unless exclusion_file - return if PathUtil.relative_path(exclusion_file) == PathUtil.relative_path(config_file) - - print 'AllCops/Exclude ' if debug? - config.add_excludes_from_higher_level(load_file(exclusion_file)) - end - - def default_configuration - @default_configuration ||= begin - print 'Default ' if debug? - load_file(DEFAULT_FILE) - end - end - - # @api private - def inject_defaults!(project_root) - path = File.join(project_root, 'config', 'default.yml') - config = load_file(path) - new_config = ConfigLoader.merge_with_default(config, path) - puts "configuration from #{path}" if debug? - @default_configuration = new_config - end - - # Returns the path RuboCop inferred as the root of the project. No file - # searches will go past this directory. - # @deprecated Use `RuboCop::ConfigFinder.project_root` instead. - def project_root - warn Rainbow(<<~WARNING).yellow - `RuboCop::ConfigLoader.project_root` is deprecated and will be removed in RuboCop 2.0. \ - Use `RuboCop::ConfigFinder.project_root` instead. - WARNING - - ConfigFinder.project_root - end - - def warn_on_pending_cops(pending_cops) - warn Rainbow(PENDING_BANNER).yellow - - pending_cops.each { |cop| warn_pending_cop cop } - - warn Rainbow('For more information: https://docs.rubocop.org/rubocop/versioning.html').yellow - end - - def warn_pending_cop(cop) - version = cop.metadata['VersionAdded'] || 'N/A' - - warn Rainbow("#{cop.name}: # new in #{version}").yellow - warn Rainbow(' Enabled: true').yellow - end - - # Merges the given configuration with the default one. - def merge_with_default(config, config_file, unset_nil: true) - resolver.merge_with_default(config, config_file, unset_nil: unset_nil) - end - - # @api private - # Used to add features that were required inside a config or from - # the CLI using `--require`. - def add_loaded_features(loaded_features) - @loaded_features.merge(Array(loaded_features)) - end - - private - - def file_path(file) - File.absolute_path(file.is_a?(RemoteConfig) ? file.file : file) - end - - def resolver - @resolver ||= ConfigLoaderResolver.new - end - - def check_duplication(yaml_code, absolute_path) - smart_path = PathUtil.smart_path(absolute_path) - YAMLDuplicationChecker.check(yaml_code, absolute_path) do |key1, key2| - value = key1.value - # .start_line is only available since ruby 2.5 / psych 3.0 - message = if key1.respond_to? :start_line - line1 = key1.start_line + 1 - line2 = key2.start_line + 1 - "#{smart_path}:#{line1}: " \ - "`#{value}` is concealed by line #{line2}" - else - "#{smart_path}: `#{value}` is concealed by duplicate" - end - warn Rainbow(message).yellow - end - end - - # Read the specified file, or exit with a friendly, concise message on - # stderr. Care is taken to use the standard OS exit code for a "file not - # found" error. - def read_file(absolute_path) - File.read(absolute_path, encoding: Encoding::UTF_8) - rescue Errno::ENOENT - raise ConfigNotFoundError, "Configuration file not found: #{absolute_path}" - end - - def yaml_safe_load(yaml_code, filename) - yaml_safe_load!(yaml_code, filename) - rescue ::StandardError - if defined?(::SafeYAML) - raise 'SafeYAML is unmaintained, no longer needed and should be removed' - end - - raise - end - - def yaml_safe_load!(yaml_code, filename) - YAML.safe_load( - yaml_code, permitted_classes: [Regexp, Symbol], aliases: true, filename: filename - ) - end - end - - # Initializing class ivars - clear_options - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/config_loader_resolver.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/config_loader_resolver.rb deleted file mode 100644 index 5e433c3d..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/config_loader_resolver.rb +++ /dev/null @@ -1,281 +0,0 @@ -# frozen_string_literal: true - -require 'pathname' -require 'yaml' - -module RuboCop - # A help class for ConfigLoader that handles configuration resolution. - # @api private - class ConfigLoaderResolver - def resolve_requires(path, hash) - config_dir = File.dirname(path) - hash.delete('require').tap do |loaded_features| - Array(loaded_features).each do |feature| - FeatureLoader.load(config_directory_path: config_dir, feature: feature) - end - end - end - - def resolve_inheritance(path, hash, file, debug) # rubocop:disable Metrics/MethodLength, Metrics/AbcSize - inherited_files = Array(hash['inherit_from']) - base_configs(path, inherited_files, file) - .each_with_index.reverse_each do |base_config, index| - override_department_setting_for_cops(base_config, hash) - override_enabled_for_disabled_departments(base_config, hash) - - base_config.each do |k, v| - next unless v.is_a?(Hash) - - if hash.key?(k) - v = merge(v, hash[k], - cop_name: k, file: file, debug: debug, - inherited_file: inherited_files[index], - inherit_mode: determine_inherit_mode(hash, k)) - end - hash[k] = v - fix_include_paths(base_config.loaded_path, hash, path, k, v) if v.key?('Include') - end - end - end - - # When one .rubocop.yml file inherits from another .rubocop.yml file, the Include paths in the - # base configuration are relative to the directory where the base configuration file is. For the - # derived configuration, we need to make those paths relative to where the derived configuration - # file is. - def fix_include_paths(base_config_path, hash, path, key, value) - return unless File.basename(base_config_path).start_with?('.rubocop') - - base_dir = File.dirname(base_config_path) - derived_dir = File.dirname(path) - hash[key]['Include'] = value['Include'].map do |include_path| - PathUtil.relative_path(File.join(base_dir, include_path), derived_dir) - end - end - - def resolve_inheritance_from_gems(hash) - gems = hash.delete('inherit_gem') - (gems || {}).each_pair do |gem_name, config_path| - if gem_name == 'rubocop' - raise ArgumentError, "can't inherit configuration from the rubocop gem" - end - - hash['inherit_from'] = Array(hash['inherit_from']) - Array(config_path).reverse_each do |path| - # Put gem configuration first so local configuration overrides it. - hash['inherit_from'].unshift gem_config_path(gem_name, path) - end - end - end - - # Merges the given configuration with the default one. If - # AllCops:DisabledByDefault is true, it changes the Enabled params so that - # only cops from user configuration are enabled. If - # AllCops:EnabledByDefault is true, it changes the Enabled params so that - # only cops explicitly disabled in user configuration are disabled. - def merge_with_default(config, config_file, unset_nil:) - default_configuration = ConfigLoader.default_configuration - - disabled_by_default = config.for_all_cops['DisabledByDefault'] - enabled_by_default = config.for_all_cops['EnabledByDefault'] - - if disabled_by_default || enabled_by_default - default_configuration = transform(default_configuration) do |params| - params.merge('Enabled' => !disabled_by_default) - end - end - - config = handle_disabled_by_default(config, default_configuration) if disabled_by_default - override_enabled_for_disabled_departments(default_configuration, config) - - opts = { inherit_mode: config['inherit_mode'] || {}, unset_nil: unset_nil } - Config.new(merge(default_configuration, config, **opts), config_file) - end - - # Return a recursive merge of two hashes. That is, a normal hash merge, - # with the addition that any value that is a hash, and occurs in both - # arguments, will also be merged. And so on. - # - # rubocop:disable Metrics/AbcSize - def merge(base_hash, derived_hash, **opts) - result = base_hash.merge(derived_hash) - keys_appearing_in_both = base_hash.keys & derived_hash.keys - keys_appearing_in_both.each do |key| - if opts[:unset_nil] && derived_hash[key].nil? - result.delete(key) - elsif merge_hashes?(base_hash, derived_hash, key) - result[key] = merge(base_hash[key], derived_hash[key], **opts) - elsif should_union?(derived_hash, base_hash, opts[:inherit_mode], key) - result[key] = base_hash[key] | derived_hash[key] - elsif opts[:debug] - warn_on_duplicate_setting(base_hash, derived_hash, key, **opts) - end - end - result - end - # rubocop:enable Metrics/AbcSize - - # An `Enabled: true` setting in user configuration for a cop overrides an - # `Enabled: false` setting for its department. - def override_department_setting_for_cops(base_hash, derived_hash) - derived_hash.each_key do |key| - next unless key =~ %r{(.*)/.*} - - department = Regexp.last_match(1) - next unless disabled?(derived_hash, department) || disabled?(base_hash, department) - - # The `override_department` setting for the `Enabled` parameter is an - # internal setting that's not documented in the manual. It will cause a - # cop to be enabled later, when logic surrounding enabled/disabled it - # run, even though its department is disabled. - derived_hash[key]['Enabled'] = 'override_department' if derived_hash[key]['Enabled'] - end - end - - # If a cop was previously explicitly enabled, but then superseded by the - # department being disabled, disable it. - def override_enabled_for_disabled_departments(base_hash, derived_hash) - cops_to_disable = derived_hash.each_key.with_object([]) do |key, cops| - next unless disabled?(derived_hash, key) - - cops.concat(base_hash.keys.grep(Regexp.new("^#{key}/"))) - end - - cops_to_disable.each do |cop_name| - next unless base_hash.dig(cop_name, 'Enabled') == true - - derived_hash.replace(merge({ cop_name => { 'Enabled' => false } }, derived_hash)) - end - end - - private - - def disabled?(hash, department) - hash[department].is_a?(Hash) && hash[department]['Enabled'] == false - end - - def duplicate_setting?(base_hash, derived_hash, key, inherited_file) - return false if inherited_file.nil? # Not inheritance resolving merge - return false if inherited_file.start_with?('..') # Legitimate override - return false if base_hash[key] == derived_hash[key] # Same value - return false if remote_file?(inherited_file) # Can't change - - Gem.path.none? { |dir| inherited_file.start_with?(dir) } # Can change? - end - - def warn_on_duplicate_setting(base_hash, derived_hash, key, **opts) - return unless duplicate_setting?(base_hash, derived_hash, key, opts[:inherited_file]) - - inherit_mode = opts[:inherit_mode]['merge'] || opts[:inherit_mode]['override'] - return if base_hash[key].is_a?(Array) && inherit_mode && inherit_mode.include?(key) - - puts "#{PathUtil.smart_path(opts[:file])}: " \ - "#{opts[:cop_name]}:#{key} overrides " \ - "the same parameter in #{opts[:inherited_file]}" - end - - def determine_inherit_mode(hash, key) - cop_cfg = hash[key] - local_inherit = cop_cfg['inherit_mode'] if cop_cfg.is_a?(Hash) - local_inherit || hash['inherit_mode'] || {} - end - - def should_union?(derived_hash, base_hash, root_mode, key) - return false unless base_hash[key].is_a?(Array) - - derived_mode = derived_hash['inherit_mode'] - return false if should_override?(derived_mode, key) - return true if should_merge?(derived_mode, key) - - base_mode = base_hash['inherit_mode'] - return false if should_override?(base_mode, key) - return true if should_merge?(base_mode, key) - - should_merge?(root_mode, key) - end - - def should_merge?(mode, key) - mode && mode['merge'] && mode['merge'].include?(key) - end - - def should_override?(mode, key) - mode && mode['override'] && mode['override'].include?(key) - end - - def merge_hashes?(base_hash, derived_hash, key) - base_hash[key].is_a?(Hash) && derived_hash[key].is_a?(Hash) - end - - def base_configs(path, inherit_from, file) - inherit_froms = Array(inherit_from).compact.flat_map do |f| - PathUtil.glob?(f) ? Dir.glob(f) : f - end - - configs = inherit_froms.map do |f| - ConfigLoader.load_file(inherited_file(path, f, file)) - end - - configs.compact - end - - def inherited_file(path, inherit_from, file) - if remote_file?(inherit_from) - # A remote configuration, e.g. `inherit_from: http://example.com/rubocop.yml`. - RemoteConfig.new(inherit_from, File.dirname(path)) - elsif Pathname.new(inherit_from).absolute? - # An absolute path to a config, e.g. `inherit_from: /Users/me/rubocop.yml`. - # The path may come from `inherit_gem` option, where a gem name is expanded - # to an absolute path to that gem. - print 'Inheriting ' if ConfigLoader.debug? - inherit_from - elsif file.is_a?(RemoteConfig) - # A path relative to a URL, e.g. `inherit_from: configs/default.yml` - # in a config included with `inherit_from: http://example.com/rubocop.yml` - file.inherit_from_remote(inherit_from, path) - else - # A local relative path, e.g. `inherit_from: default.yml` - print 'Inheriting ' if ConfigLoader.debug? - File.expand_path(inherit_from, File.dirname(path)) - end - end - - def remote_file?(uri) - regex = URI::DEFAULT_PARSER.make_regexp(%w[http https]) - /\A#{regex}\z/.match?(uri) - end - - def handle_disabled_by_default(config, new_default_configuration) - department_config = config.to_hash.reject { |cop| cop.include?('/') } - department_config.each do |dept, dept_params| - next unless dept_params['Enabled'] - - new_default_configuration.each do |cop, params| - next unless cop.start_with?("#{dept}/") - - # Retain original default configuration for cops in the department. - params['Enabled'] = ConfigLoader.default_configuration[cop]['Enabled'] - end - end - - transform(config) do |params| - { 'Enabled' => true }.merge(params) # Set true if not set. - end - end - - def transform(config, &block) - config.transform_values(&block) - end - - def gem_config_path(gem_name, relative_config_path) - if defined?(Bundler) - gem = Bundler.load.specs[gem_name].first - gem_path = gem.full_gem_path if gem - end - - gem_path ||= Gem::Specification.find_by_name(gem_name).gem_dir - - File.join(gem_path, relative_config_path) - rescue Gem::LoadError => e - raise Gem::LoadError, "Unable to find gem #{gem_name}; is the gem installed? #{e}" - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/config_obsoletion.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/config_obsoletion.rb deleted file mode 100644 index c8e97b99..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/config_obsoletion.rb +++ /dev/null @@ -1,111 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - # This class handles obsolete configuration. - # @api private - class ConfigObsoletion - DEFAULT_RULES_FILE = File.join(ConfigLoader::RUBOCOP_HOME, 'config', 'obsoletion.yml') - COP_RULE_CLASSES = { - 'renamed' => RenamedCop, - 'removed' => RemovedCop, - 'split' => SplitCop, - 'extracted' => ExtractedCop - }.freeze - PARAMETER_RULE_CLASSES = { - 'changed_parameters' => ChangedParameter, - 'changed_enforced_styles' => ChangedEnforcedStyles - }.freeze - LOAD_RULES_CACHE = {} # rubocop:disable Style/MutableConstant - private_constant :LOAD_RULES_CACHE - - attr_reader :rules, :warnings - - class << self - attr_accessor :files - - def legacy_cop_names - # Used by DepartmentName#qualified_legacy_cop_name - new(Config.new).rules.select(&:cop_rule?).map(&:old_name) - end - end - - # Can be extended by extension libraries to add their own obsoletions - self.files = [DEFAULT_RULES_FILE] - - def initialize(config) - @config = config - @rules = load_rules - @warnings = [] - end - - def reject_obsolete! - messages = obsoletions.flatten.compact - return if messages.empty? - - raise ValidationError, messages.join("\n") - end - - private - - # Default rules for obsoletions are in config/obsoletion.yml - # Additional rules files can be added with `RuboCop::ConfigObsoletion.files << filename` - def load_rules # rubocop:disable Metrics/AbcSize - rules = LOAD_RULES_CACHE[self.class.files] ||= - self.class.files.each_with_object({}) do |filename, hash| - hash.merge!(YAML.safe_load(File.read(filename))) do |_key, first, second| - case first - when Hash - first.merge(second) - when Array - first.concat(second) - end - end - end - - cop_rules = rules.slice(*COP_RULE_CLASSES.keys) - parameter_rules = rules.slice(*PARAMETER_RULE_CLASSES.keys) - - load_cop_rules(cop_rules).concat(load_parameter_rules(parameter_rules)) - end - - # Cop rules are keyed by the name of the original cop - def load_cop_rules(rules) - rules.flat_map do |rule_type, data| - data.filter_map do |cop_name, configuration| - next unless configuration # allow configurations to be disabled with `CopName: ~` - - COP_RULE_CLASSES[rule_type].new(@config, cop_name, configuration) - end - end - end - - # Parameter rules may apply to multiple cops and multiple parameters - # and are given as an array. Each combination is turned into a separate - # rule object. - def load_parameter_rules(rules) - rules.flat_map do |rule_type, data| - data.flat_map do |configuration| - cops = Array(configuration['cops']) - parameters = Array(configuration['parameters']) - - cops.product(parameters).map do |cop, parameter| - PARAMETER_RULE_CLASSES[rule_type].new(@config, cop, parameter, configuration) - end - end - end - end - - def obsoletions - rules.map do |rule| - next unless rule.violated? - - if rule.warning? - @warnings.push(rule.message) - next - end - - rule.message - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/config_obsoletion/changed_enforced_styles.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/config_obsoletion/changed_enforced_styles.rb deleted file mode 100644 index 89e88990..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/config_obsoletion/changed_enforced_styles.rb +++ /dev/null @@ -1,33 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - class ConfigObsoletion - # Encapsulation of a ConfigObsoletion rule for changing a parameter - # @api private - class ChangedEnforcedStyles < ParameterRule - BASE_MESSAGE = 'obsolete `%s: %s` (for `%s`) found in %s' - - def violated? - super && config[cop][parameter] == value - end - - def message - base = format(BASE_MESSAGE, - parameter: parameter, value: value, cop: cop, path: smart_loaded_path) - - if alternative - "#{base}\n`#{parameter}: #{value}` has been renamed to " \ - "`#{parameter}: #{alternative.chomp}`." - else - "#{base}\n#{reason.chomp}" - end - end - - private - - def value - metadata['value'] - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/config_obsoletion/changed_parameter.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/config_obsoletion/changed_parameter.rb deleted file mode 100644 index 49905717..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/config_obsoletion/changed_parameter.rb +++ /dev/null @@ -1,26 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - class ConfigObsoletion - # Encapsulation of a ConfigObsoletion rule for changing a parameter - # @api private - class ChangedParameter < ParameterRule - BASE_MESSAGE = 'obsolete parameter `%s` (for `%s`) found in %s' - - def message - base = format(BASE_MESSAGE, parameter: parameter, cop: cop, path: smart_loaded_path) - - if alternative - "#{base}\n`#{parameter}` has been renamed to `#{alternative.chomp}`." - elsif alternatives - "#{base}\n`#{parameter}` has been renamed to #{to_sentence(alternatives.map do |item| - "`#{item}`" - end, - connector: 'and/or')}." - else - "#{base}\n#{reason.chomp}" - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/config_obsoletion/cop_rule.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/config_obsoletion/cop_rule.rb deleted file mode 100644 index 28c65d66..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/config_obsoletion/cop_rule.rb +++ /dev/null @@ -1,33 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - class ConfigObsoletion - # Base class for ConfigObsoletion rules relating to cops - # @api private - class CopRule < Rule - attr_reader :old_name - - def initialize(config, old_name) - super(config) - @old_name = old_name - end - - def cop_rule? - true - end - - def message - rule_message + "\n(obsolete configuration found in #{smart_loaded_path}, please update it)" - end - - # Cop rules currently can only be failures, not warnings - def warning? - false - end - - def violated? - config.key?(old_name) || config.key?(Cop::Badge.parse(old_name).cop_name) - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/config_obsoletion/extracted_cop.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/config_obsoletion/extracted_cop.rb deleted file mode 100644 index b744ef60..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/config_obsoletion/extracted_cop.rb +++ /dev/null @@ -1,46 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - class ConfigObsoletion - # Encapsulation of a ConfigObsoletion rule for splitting a cop's - # functionality into multiple new cops. - # @api private - class ExtractedCop < CopRule - attr_reader :gem, :department - - def initialize(config, old_name, gem) - super(config, old_name) - @department, * = old_name.rpartition('/') - @gem = gem - end - - def violated? - return false if feature_loaded? - - affected_cops.any? - end - - def rule_message - msg = '%s been extracted to the `%s` gem.' - format(msg, - name: affected_cops.size > 1 ? "`#{department}` cops have" : "`#{old_name}` has", - gem: gem) - end - - private - - def affected_cops - return old_name unless old_name.end_with?('*') - - # Handle whole departments (expressed as `Department/*`) - config.keys.select do |key| - key == department || key.start_with?("#{department}/") - end - end - - def feature_loaded? - config.loaded_features.include?(gem) - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/config_obsoletion/parameter_rule.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/config_obsoletion/parameter_rule.rb deleted file mode 100644 index 8df4655b..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/config_obsoletion/parameter_rule.rb +++ /dev/null @@ -1,56 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - class ConfigObsoletion - # Base class for ConfigObsoletion rules relating to parameters - # @api private - class ParameterRule < Rule - attr_reader :cop, :parameter, :metadata - - def initialize(config, cop, parameter, metadata) - super(config) - @cop = cop - @parameter = parameter - @metadata = metadata - end - - def parameter_rule? - true - end - - def violated? - applies_to_current_ruby_version? && config[cop]&.key?(parameter) - end - - def warning? - severity == 'warning' - end - - private - - def applies_to_current_ruby_version? - minimum_ruby_version = metadata['minimum_ruby_version'] - - return true unless minimum_ruby_version - - config.target_ruby_version >= minimum_ruby_version - end - - def alternative - metadata['alternative'] - end - - def alternatives - metadata['alternatives'] - end - - def reason - metadata['reason'] - end - - def severity - metadata['severity'] - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/config_obsoletion/removed_cop.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/config_obsoletion/removed_cop.rb deleted file mode 100644 index 03fa8fed..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/config_obsoletion/removed_cop.rb +++ /dev/null @@ -1,41 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - class ConfigObsoletion - # Encapsulation of a ConfigObsoletion rule for removing - # a previously defined cop. - # @api private - class RemovedCop < CopRule - attr_reader :old_name, :metadata - - BASE_MESSAGE = 'The `%s` cop has been removed' - - def initialize(config, old_name, metadata) - super(config, old_name) - @metadata = metadata.is_a?(Hash) ? metadata : {} - end - - def rule_message - base = format(BASE_MESSAGE, old_name: old_name) - - if reason - "#{base} since #{reason.chomp}." - elsif alternatives - "#{base}. Please use #{to_sentence(alternatives, connector: 'and/or')} instead." - else - "#{base}." - end - end - - private - - def reason - metadata['reason'] - end - - def alternatives - Array(metadata['alternatives']).map { |name| "`#{name}`" } - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/config_obsoletion/renamed_cop.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/config_obsoletion/renamed_cop.rb deleted file mode 100644 index 386fcaaa..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/config_obsoletion/renamed_cop.rb +++ /dev/null @@ -1,34 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - class ConfigObsoletion - # Encapsulation of a ConfigObsoletion rule for renaming - # a cop or moving it to a new department. - # @api private - class RenamedCop < CopRule - attr_reader :new_name - - def initialize(config, old_name, new_name) - super(config, old_name) - @new_name = new_name - end - - def rule_message - "The `#{old_name}` cop has been #{verb} to `#{new_name}`." - end - - private - - def moved? - old_badge = Cop::Badge.parse(old_name) - new_badge = Cop::Badge.parse(new_name) - - old_badge.department != new_badge.department && old_badge.cop_name == new_badge.cop_name - end - - def verb - moved? ? 'moved' : 'renamed' - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/config_obsoletion/rule.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/config_obsoletion/rule.rb deleted file mode 100644 index 2ee3637f..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/config_obsoletion/rule.rb +++ /dev/null @@ -1,41 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - class ConfigObsoletion - # Abstract base class for ConfigObsoletion rules - # @api private - class Rule - def initialize(config) - @config = config - end - - # Does this rule relate to cops? - def cop_rule? - false - end - - # Does this rule relate to parameters? - def parameter_rule? - false - end - - def violated? - raise NotImplementedError - end - - private - - attr_reader :config - - def to_sentence(collection, connector: 'and') - return collection.first if collection.size == 1 - - [collection[0..-2].join(', '), collection[-1]].join(" #{connector} ") - end - - def smart_loaded_path - PathUtil.smart_path(config.loaded_path) - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/config_obsoletion/split_cop.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/config_obsoletion/split_cop.rb deleted file mode 100644 index 92aaa0fa..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/config_obsoletion/split_cop.rb +++ /dev/null @@ -1,27 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - class ConfigObsoletion - # Encapsulation of a ConfigObsoletion rule for splitting a cop's - # functionality into multiple new cops. - # @api private - class SplitCop < CopRule - attr_reader :metadata - - def initialize(config, old_name, metadata) - super(config, old_name) - @metadata = metadata - end - - def rule_message - "The `#{old_name}` cop has been split into #{to_sentence(alternatives)}." - end - - private - - def alternatives - Array(metadata['alternatives']).map { |name| "`#{name}`" } - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/config_regeneration.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/config_regeneration.rb deleted file mode 100644 index a4889b68..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/config_regeneration.rb +++ /dev/null @@ -1,33 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - # This class handles collecting the options for regenerating a TODO file. - # @api private - class ConfigRegeneration - AUTO_GENERATED_FILE = RuboCop::CLI::Command::AutoGenerateConfig::AUTO_GENERATED_FILE - COMMAND_REGEX = /(?<=`rubocop )(.*?)(?=`)/.freeze - DEFAULT_OPTIONS = { auto_gen_config: true }.freeze - - # Get options from the comment in the TODO file, and parse them as options - def options - # If there's no existing TODO file, generate one - return DEFAULT_OPTIONS unless todo_exists? - - match = generation_command.match(COMMAND_REGEX) - return DEFAULT_OPTIONS unless match - - options = match[1].split - Options.new.parse(options).first - end - - private - - def todo_exists? - File.exist?(AUTO_GENERATED_FILE) && !File.empty?(AUTO_GENERATED_FILE) - end - - def generation_command - File.foreach(AUTO_GENERATED_FILE).take(2).last - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/config_store.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/config_store.rb deleted file mode 100644 index 69314438..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/config_store.rb +++ /dev/null @@ -1,72 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - # Handles caching of configurations and association of inspected - # ruby files to configurations. - class ConfigStore - attr_reader :validated - alias validated? validated - - def initialize - # @options_config stores a config that is specified in the command line. - # This takes precedence over configs located in any directories - @options_config = nil - - # @path_cache maps directories to configuration paths. We search - # for .rubocop.yml only if we haven't already found it for the - # given directory. - @path_cache = {} - - # @object_cache maps configuration file paths to - # configuration objects so we only need to load them once. - @object_cache = {} - - # By default the config is validated before it can be used. - @validated = true - end - - def options_config=(options_config) - loaded_config = ConfigLoader.load_file(options_config) - @options_config = ConfigLoader.merge_with_default(loaded_config, options_config) - end - - def force_default_config! - @options_config = ConfigLoader.default_configuration - end - - def unvalidated - @validated = false - self - end - - def for_file(file) - for_dir(File.dirname(file)) - end - - def for_pwd - for_dir(Dir.pwd) - end - - # If type (file/dir) is known beforehand, - # prefer using #for_file or #for_dir for improved performance - def for(file_or_dir) - dir = if File.directory?(file_or_dir) - file_or_dir - else - File.dirname(file_or_dir) - end - for_dir(dir) - end - - def for_dir(dir) - return @options_config if @options_config - - @path_cache[dir] ||= ConfigLoader.configuration_file_for(dir) - path = @path_cache[dir] - @object_cache[path] ||= begin - print "For #{dir}: " if ConfigLoader.debug? - ConfigLoader.configuration_from_file(path, check: validated?) - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/config_validator.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/config_validator.rb deleted file mode 100644 index a2d8e95c..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/config_validator.rb +++ /dev/null @@ -1,279 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - # Handles validation of configuration, for example cop names, parameter - # names, and Ruby versions. - class ConfigValidator - extend Forwardable - - # @api private - COMMON_PARAMS = %w[Exclude Include Severity inherit_mode AutoCorrect StyleGuide Details].freeze - # @api private - INTERNAL_PARAMS = %w[Description StyleGuide - VersionAdded VersionChanged VersionRemoved - Reference Safe SafeAutoCorrect].freeze - # @api private - NEW_COPS_VALUES = %w[pending disable enable].freeze - - # @api private - CONFIG_CHECK_KEYS = %w[Enabled Safe SafeAutoCorrect AutoCorrect].to_set.freeze - CONFIG_CHECK_DEPARTMENTS = %w[pending override_department].freeze - CONFIG_CHECK_AUTOCORRECTS = %w[always contextual disabled].freeze - private_constant :CONFIG_CHECK_KEYS, :CONFIG_CHECK_DEPARTMENTS - - def_delegators :@config, :smart_loaded_path, :for_all_cops - - def initialize(config) - @config = config - @config_obsoletion = ConfigObsoletion.new(config) - @target_ruby = TargetRuby.new(config) - end - - def validate - check_cop_config_value(@config) - reject_conflicting_safe_settings - - # Don't validate RuboCop's own files further. Avoids infinite recursion. - return if @config.internal? - - valid_cop_names, invalid_cop_names = @config.keys.partition do |key| - ConfigLoader.default_configuration.key?(key) - end - - check_obsoletions - - alert_about_unrecognized_cops(invalid_cop_names) - validate_new_cops_parameter - validate_parameter_names(valid_cop_names) - validate_enforced_styles(valid_cop_names) - validate_syntax_cop - reject_mutually_exclusive_defaults - end - - # Validations that should only be run after all config resolving has - # taken place: - # * The target ruby version is only checked once the entire inheritance - # chain has been loaded so that only the final value is validated, and - # any obsolete but overridden values are ignored. - def validate_after_resolution - check_target_ruby - end - - def target_ruby_version - target_ruby.version - end - - def validate_section_presence(name) - return unless @config.key?(name) && @config[name].nil? - - raise ValidationError, "empty section #{name} found in #{smart_loaded_path}" - end - - private - - attr_reader :target_ruby - - def check_obsoletions - @config_obsoletion.reject_obsolete! - return unless @config_obsoletion.warnings.any? - - warn Rainbow("Warning: #{@config_obsoletion.warnings.join("\n")}").yellow - end - - def check_target_ruby - return if target_ruby.supported? - - source = target_ruby.source - last_version = target_ruby.rubocop_version_with_support - - msg = if last_version - "RuboCop found unsupported Ruby version #{target_ruby_version} " \ - "in #{source}. #{target_ruby_version}-compatible " \ - "analysis was dropped after version #{last_version}." - else - 'RuboCop found unknown Ruby version ' \ - "#{target_ruby_version.inspect} in #{source}." - end - - msg += "\nSupported versions: #{TargetRuby.supported_versions.join(', ')}" - - raise ValidationError, msg - end - - def alert_about_unrecognized_cops(invalid_cop_names) - unknown_cops = list_unknown_cops(invalid_cop_names) - - return if unknown_cops.empty? - - if ConfigLoader.ignore_unrecognized_cops - warn Rainbow('The following cops or departments are not ' \ - 'recognized and will be ignored:').yellow - warn unknown_cops.join("\n") - - return - end - - raise ValidationError, unknown_cops.join("\n") - end - - def list_unknown_cops(invalid_cop_names) - unknown_cops = [] - invalid_cop_names.each do |name| - # There could be a custom cop with this name. If so, don't warn - next if Cop::Registry.global.contains_cop_matching?([name]) - - # Special case for inherit_mode, which is a directive that we keep in - # the configuration (even though it's not a cop), because it's easier - # to do so than to pass the value around to various methods. - next if name == 'inherit_mode' - - message = <<~MESSAGE.rstrip - unrecognized cop or department #{name} found in #{smart_loaded_path} - #{suggestion(name)} - MESSAGE - - unknown_cops << message - end - - unknown_cops - end - - def suggestion(name) - registry = Cop::Registry.global - departments = registry.departments.map(&:to_s) - suggestions = NameSimilarity.find_similar_names(name, departments + registry.map(&:cop_name)) - if suggestions.any? - "Did you mean `#{suggestions.join('`, `')}`?" - else - # Department names can contain slashes, e.g. Chef/Correctness, but there's no support for - # the concept of higher level departments in RuboCop. It's a flat structure. So if the user - # tries to configure a "top level department", we hint that it's the bottom level - # departments that should be configured. - suggestions = departments.select { |department| department.start_with?("#{name}/") } - "#{name} is not a department. Use `#{suggestions.join('`, `')}`." if suggestions.any? - end - end - - def validate_syntax_cop - syntax_config = @config['Lint/Syntax'] - default_config = ConfigLoader.default_configuration['Lint/Syntax'] - - return unless syntax_config && default_config.merge(syntax_config) != default_config - - raise ValidationError, - "configuration for Lint/Syntax cop found in #{smart_loaded_path}\n" \ - 'It\'s not possible to disable this cop.' - end - - def validate_new_cops_parameter - new_cop_parameter = @config.for_all_cops['NewCops'] - return if new_cop_parameter.nil? || NEW_COPS_VALUES.include?(new_cop_parameter) - - message = "invalid #{new_cop_parameter} for `NewCops` found in" \ - "#{smart_loaded_path}\n" \ - "Valid choices are: #{NEW_COPS_VALUES.join(', ')}" - - raise ValidationError, message - end - - def validate_parameter_names(valid_cop_names) - valid_cop_names.each do |name| - validate_section_presence(name) - each_invalid_parameter(name) do |param, supported_params| - warn Rainbow(<<~MESSAGE).yellow - Warning: #{name} does not support #{param} parameter. - - Supported parameters are: - - - #{supported_params.join("\n - ")} - MESSAGE - end - end - end - - def each_invalid_parameter(cop_name) - default_config = ConfigLoader.default_configuration[cop_name] - - @config[cop_name].each_key do |param| - next if COMMON_PARAMS.include?(param) || default_config.key?(param) - - supported_params = default_config.keys - INTERNAL_PARAMS - - yield param, supported_params - end - end - - def validate_enforced_styles(valid_cop_names) # rubocop:todo Metrics/AbcSize - valid_cop_names.each do |name| - styles = @config[name].select { |key, _| key.start_with?('Enforced') } - - styles.each do |style_name, style| - supported_key = RuboCop::Cop::Util.to_supported_styles(style_name) - valid = ConfigLoader.default_configuration[name][supported_key] - - next unless valid - next if valid.include?(style) - next if validate_support_and_has_list(name, style, valid) - - msg = "invalid #{style_name} '#{style}' for #{name} found in " \ - "#{smart_loaded_path}\n" \ - "Valid choices are: #{valid.join(', ')}" - raise ValidationError, msg - end - end - end - - def validate_support_and_has_list(name, formats, valid) - ConfigLoader.default_configuration[name]['AllowMultipleStyles'] && - formats.is_a?(Array) && - formats.all? { |format| valid.include?(format) } - end - - def reject_mutually_exclusive_defaults - disabled_by_default = for_all_cops['DisabledByDefault'] - enabled_by_default = for_all_cops['EnabledByDefault'] - return unless disabled_by_default && enabled_by_default - - msg = 'Cops cannot be both enabled by default and disabled by default' - raise ValidationError, msg - end - - def reject_conflicting_safe_settings - @config.each do |name, cop_config| - next unless cop_config.is_a?(Hash) - next unless cop_config['Safe'] == false && cop_config['SafeAutoCorrect'] == true - - msg = 'Unsafe cops cannot have a safe autocorrection ' \ - "(section #{name} in #{smart_loaded_path})" - raise ValidationError, msg - end - end - - # rubocop:disable Metrics/PerceivedComplexity, Metrics/CyclomaticComplexity - def check_cop_config_value(hash, parent = nil) - hash.each do |key, value| - check_cop_config_value(value, key) if value.is_a?(Hash) - - next unless CONFIG_CHECK_KEYS.include?(key) && value.is_a?(String) - - if key == 'Enabled' && !CONFIG_CHECK_DEPARTMENTS.include?(value) - supposed_values = 'a boolean' - elsif key == 'AutoCorrect' && !CONFIG_CHECK_AUTOCORRECTS.include?(value) - supposed_values = '`always`, `contextual`, `disabled`, or a boolean' - else - next - end - - raise ValidationError, param_error_message(parent, key, value, supposed_values) - end - end - # rubocop:enable Metrics/PerceivedComplexity, Metrics/CyclomaticComplexity - - # FIXME: Handling colors in exception messages like this is ugly. - def param_error_message(parent, key, value, supposed_values) - "#{Rainbow('').reset}" \ - "Property #{Rainbow(key).yellow} of #{Rainbow(parent).yellow} cop " \ - "is supposed to be #{supposed_values} and #{Rainbow(value).yellow} is not." - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/autocorrect_logic.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/autocorrect_logic.rb deleted file mode 100644 index 6afab6b3..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/autocorrect_logic.rb +++ /dev/null @@ -1,134 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - # This module encapsulates the logic for autocorrect behavior for a cop. - module AutocorrectLogic - def autocorrect? - autocorrect_requested? && correctable? && autocorrect_enabled? - end - - def autocorrect_with_disable_uncorrectable? - autocorrect_requested? && disable_uncorrectable? && autocorrect_enabled? - end - - def autocorrect_requested? - @options.fetch(:autocorrect, false) - end - - def correctable? - self.class.support_autocorrect? || disable_uncorrectable? - end - - def disable_uncorrectable? - @options[:disable_uncorrectable] == true - end - - def safe_autocorrect? - cop_config.fetch('Safe', true) && cop_config.fetch('SafeAutoCorrect', true) - end - - def autocorrect_enabled? - # allow turning off autocorrect on a cop by cop basis - return true unless cop_config - - # `false` is the same as `disabled` for backward compatibility. - return false if ['disabled', false].include?(cop_config['AutoCorrect']) - - # When LSP is enabled, it is considered as editing source code, - # and autocorrection with `AutoCorrect: contextual` will not be performed. - return false if contextual_autocorrect? && LSP.enabled? - - # :safe_autocorrect is a derived option based on several command-line - # arguments - see RuboCop::Options#add_autocorrection_options - return safe_autocorrect? if @options.fetch(:safe_autocorrect, false) - - true - end - - private - - def disable_offense(offense_range) - range = surrounding_heredoc(offense_range) || surrounding_percent_array(offense_range) - - if range - disable_offense_before_and_after(range_by_lines(range)) - else - disable_offense_with_eol_or_surround_comment(offense_range) - end - end - - def disable_offense_with_eol_or_surround_comment(range) - eol_comment = " # rubocop:todo #{cop_name}" - needed_line_length = (range.source_line + eol_comment).length - - if needed_line_length <= max_line_length - disable_offense_at_end_of_line(range_of_first_line(range), eol_comment) - else - disable_offense_before_and_after(range_by_lines(range)) - end - end - - def surrounding_heredoc(offense_range) - # The empty offense range is an edge case that can be reached from the Lint/Syntax cop. - return nil if offense_range.empty? - - heredoc_nodes = processed_source.ast.each_descendant.select do |node| - node.respond_to?(:heredoc?) && node.heredoc? - end - heredoc_nodes.map { |node| node.source_range.join(node.loc.heredoc_end) } - .find { |range| range.contains?(offense_range) } - end - - def surrounding_percent_array(offense_range) - return nil if offense_range.empty? - - percent_array = processed_source.ast.each_descendant.select do |node| - node.array_type? && node.percent_literal? - end - - percent_array.map(&:source_range).find do |range| - offense_range.begin_pos > range.begin_pos && range.overlaps?(offense_range) - end - end - - def range_of_first_line(range) - begin_of_first_line = range.begin_pos - range.column - end_of_first_line = begin_of_first_line + range.source_line.length - - Parser::Source::Range.new(range.source_buffer, begin_of_first_line, end_of_first_line) - end - - # Expand the given range to include all of any lines it covers. Does not - # include newline at end of the last line. - def range_by_lines(range) - begin_of_first_line = range.begin_pos - range.column - - last_line = range.source_buffer.source_line(range.last_line) - last_line_offset = last_line.length - range.last_column - end_of_last_line = range.end_pos + last_line_offset - - Parser::Source::Range.new(range.source_buffer, begin_of_first_line, end_of_last_line) - end - - def max_line_length - config.for_cop('Layout/LineLength')['Max'] || 120 - end - - def disable_offense_at_end_of_line(range, eol_comment) - Corrector.new(range).insert_after(range, eol_comment) - end - - def disable_offense_before_and_after(range_by_lines) - range_with_newline = range_by_lines.resize(range_by_lines.size + 1) - leading_whitespace = range_by_lines.source_line[/^\s*/] - - Corrector.new(range_by_lines).wrap( - range_with_newline, - "#{leading_whitespace}# rubocop:todo #{cop_name}\n", - "#{leading_whitespace}# rubocop:enable #{cop_name}\n" - ) - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/badge.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/badge.rb deleted file mode 100644 index 3eab9272..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/badge.rb +++ /dev/null @@ -1,68 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - # Identifier of all cops containing a department and cop name. - # - # All cops are identified by their badge. For example, the badge for - # `RuboCop::Cop::Layout::IndentationStyle` is `Layout/IndentationStyle`. - # Badges can be parsed as either `Department/CopName` or just `CopName` to - # allow for badge references in source files that omit the department for - # RuboCop to infer. - class Badge - attr_reader :department, :department_name, :cop_name - - def self.for(class_name) - parts = class_name.split('::') - name_deep_enough = parts.length >= 4 - new(name_deep_enough ? parts[2..] : parts.last(2)) - end - - @parse_cache = {} - - def self.parse(identifier) - @parse_cache[identifier] ||= new(identifier.split('/').map! { |i| camel_case(i) }) - end - - def self.camel_case(name_part) - return 'RSpec' if name_part == 'rspec' - return name_part unless name_part.match?(/^[a-z]|_[a-z]/) - - name_part.gsub(/^[a-z]|_[a-z]/) { |match| match[-1, 1].upcase } - end - - def initialize(class_name_parts) - department_parts = class_name_parts[0...-1] - @department = (department_parts.join('/').to_sym unless department_parts.empty?) - @department_name = @department&.to_s - @cop_name = class_name_parts.last - end - - def ==(other) - hash == other.hash - end - alias eql? == - - def hash - # Do hashing manually to reduce Array allocations. - department.hash ^ cop_name.hash # rubocop:disable Security/CompoundHash - end - - def match?(other) - cop_name == other.cop_name && (!qualified? || department == other.department) - end - - def to_s - @to_s ||= qualified? ? "#{department}/#{cop_name}" : cop_name - end - - def qualified? - !department.nil? - end - - def with_department(department) - self.class.new([department.to_s.split('/'), cop_name].flatten) - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/base.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/base.rb deleted file mode 100644 index 0b99eddd..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/base.rb +++ /dev/null @@ -1,497 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - # A scaffold for concrete cops. - # - # The Cop::Base class is meant to be extended. - # - # Cops track offenses and can autocorrect them on the fly. - # - # A commissioner object is responsible for traversing the AST and invoking - # the specific callbacks on each cop. - # - # First the callback `on_new_investigation` is called; - # if a cop needs to do its own processing of the AST or depends on - # something else. - # - # Then callbacks like `on_def`, `on_send` (see AST::Traversal) are called - # with their respective nodes. - # - # Finally the callback `on_investigation_end` is called. - # - # Within these callbacks, cops are meant to call `add_offense` or - # `add_global_offense`. Use the `processed_source` method to - # get the currently processed source being investigated. - # - # In case of invalid syntax / unparsable content, - # the callback `on_other_file` is called instead of all the other - # `on_...` callbacks. - # - # Private methods are not meant for custom cops consumption, - # nor are any instance variables. - # - class Base # rubocop:disable Metrics/ClassLength - extend RuboCop::AST::Sexp - extend NodePattern::Macros - extend ExcludeLimit - include RuboCop::AST::Sexp - include Util - include IgnoredNode - include AutocorrectLogic - - attr_reader :config, :processed_source - - # Reports of an investigation. - # Immutable - # Consider creation API private - InvestigationReport = Struct.new(:cop, :processed_source, :offenses, :corrector) - - # List of methods names to restrict calls for `on_send` / `on_csend` - RESTRICT_ON_SEND = Set[].freeze # rubocop:disable InternalAffairs/UselessRestrictOnSend - - # List of cops that should not try to autocorrect at the same - # time as this cop - # - # @return [Array] - # - # @api public - def self.autocorrect_incompatible_with - [] - end - - # Cops (other than builtin) are encouraged to implement this - # @return [String, nil] - # - # @api public - def self.documentation_url - Documentation.url_for(self) if builtin? - end - - def self.inherited(subclass) - super - Registry.global.enlist(subclass) - end - - # Call for abstract Cop classes - def self.exclude_from_registry - Registry.global.dismiss(self) - end - - # Returns if class supports autocorrect. - # It is recommended to extend AutoCorrector instead of overriding - def self.support_autocorrect? - false - end - - ### Naming - - def self.badge - @badge ||= Badge.for(name) - end - - def self.cop_name - badge.to_s - end - - def self.department - badge.department - end - - def self.lint? - department == :Lint - end - - # Returns true if the cop name or the cop namespace matches any of the - # given names. - def self.match?(given_names) - return false unless given_names - - given_names.include?(cop_name) || given_names.include?(badge.department_name) - end - - # Override and return the Force class(es) you need to join - def self.joining_forces; end - - ### Persistence - - # Override if your cop should be called repeatedly for multiple investigations - # Between calls to `on_new_investigation` and `on_investigation_end`, - # the result of `processed_source` will remain constant. - # You should invalidate any caches that depend on the current `processed_source` - # in the `on_new_investigation` callback. - # If your cop does autocorrections, be aware that your instance may be called - # multiple times with the same `processed_source.path` but different content. - def self.support_multiple_source? - false - end - - def initialize(config = nil, options = nil) - @config = config || Config.new - @options = options || { debug: false } - reset_investigation - end - - # Called before all on_... have been called - # When refining this method, always call `super` - def on_new_investigation - # Typically do nothing here - end - - # Called after all on_... have been called - # When refining this method, always call `super` - def on_investigation_end - # Typically do nothing here - end - - # Called instead of all on_... callbacks for unrecognized files / syntax errors - # When refining this method, always call `super` - def on_other_file - # Typically do nothing here - end - - # Gets called if no message is specified when calling `add_offense` or - # `add_global_offense` - # Cops are discouraged to override this; instead pass your message directly - def message(_range = nil) - self.class::MSG - end - - # Adds an offense that has no particular location. - # No correction can be applied to global offenses - def add_global_offense(message = nil, severity: nil) - severity = find_severity(nil, severity) - message = find_message(nil, message) - current_offenses << Offense.new(severity, Offense::NO_LOCATION, message, name, :unsupported) - end - - # Adds an offense on the specified range (or node with an expression) - # Unless that offense is disabled for this range, a corrector will be yielded - # to provide the cop the opportunity to autocorrect the offense. - # If message is not specified, the method `message` will be called. - def add_offense(node_or_range, message: nil, severity: nil, &block) - range = range_from_node_or_range(node_or_range) - return unless current_offense_locations.add?(range) - - range_to_pass = callback_argument(range) - - severity = find_severity(range_to_pass, severity) - message = find_message(range_to_pass, message) - - status, corrector = enabled_line?(range.line) ? correct(range, &block) : :disabled - - # Since this range may be generated from Ruby code embedded in some - # template file, we convert it to location info in the original file. - range = range_for_original(range) - - current_offenses << Offense.new(severity, range, message, name, status, corrector) - end - - # This method should be overridden when a cop's behavior depends - # on state that lives outside of these locations: - # - # (1) the file under inspection - # (2) the cop's source code - # (3) the config (eg a .rubocop.yml file) - # - # For example, some cops may want to look at other parts of - # the codebase being inspected to find violations. A cop may - # use the presence or absence of file `foo.rb` to determine - # whether a certain violation exists in `bar.rb`. - # - # Overriding this method allows the cop to indicate to RuboCop's - # ResultCache system when those external dependencies change, - # ie when the ResultCache should be invalidated. - def external_dependency_checksum - nil - end - - def cop_name - @cop_name ||= self.class.cop_name - end - - alias name cop_name - - ### Configuration Helpers - - def cop_config - # Use department configuration as basis, but let individual cop - # configuration override. - @cop_config ||= @config.for_badge(self.class.badge) - end - - def config_to_allow_offenses - Formatter::DisabledConfigFormatter.config_to_allow_offenses[cop_name] ||= {} - end - - def config_to_allow_offenses=(hash) - Formatter::DisabledConfigFormatter.config_to_allow_offenses[cop_name] = hash - end - - def target_ruby_version - @config.target_ruby_version - end - - def target_rails_version - @config.target_rails_version - end - - def active_support_extensions_enabled? - @config.active_support_extensions_enabled? - end - - def relevant_file?(file) - return true unless @config.clusivity_config_for_badge?(self.class.badge) - - file == RuboCop::AST::ProcessedSource::STRING_SOURCE_NAME || - (file_name_matches_any?(file, 'Include', true) && - !file_name_matches_any?(file, 'Exclude', false)) - end - - def excluded_file?(file) - !relevant_file?(file) - end - - # There should be very limited reasons for a Cop to do it's own parsing - def parse(source, path = nil) - ProcessedSource.new(source, target_ruby_version, path) - end - - # @api private - # Called between investigations - def ready - return self if self.class.support_multiple_source? - - self.class.new(@config, @options) - end - - ### Reserved for Cop::Cop - - # @deprecated Make potential errors with previous API more obvious - def offenses - raise 'The offenses are not directly available; ' \ - 'they are returned as the result of the investigation' - end - - ### Reserved for Commissioner - - # rubocop:disable Layout/ClassStructure - # @api private - def callbacks_needed - self.class.callbacks_needed - end - - # @api private - def self.callbacks_needed - @callbacks_needed ||= public_instance_methods.select do |m| - m.start_with?(/on_|after_/) && - !Base.method_defined?(m) # exclude standard "callbacks" like 'on_begin_investigation' - end - end - # rubocop:enable Layout/ClassStructure - - # Called before any investigation - # @api private - def begin_investigation(processed_source, offset: 0, original: processed_source) - @current_offenses = nil - @current_offense_locations = nil - @currently_disabled_lines = nil - @processed_source = processed_source - @current_corrector = nil - - # We need to keep track of the original source and offset, - # because `processed_source` here may be an embedded code in it. - @current_offset = offset - @current_original = original - end - - # @api private - def always_autocorrect? - # `true` is the same as `'always'` for backward compatibility. - ['always', true].include?(cop_config.fetch('AutoCorrect', 'always')) - end - - # @api private - def contextual_autocorrect? - cop_config.fetch('AutoCorrect', 'always') == 'contextual' - end - - def inspect # :nodoc: - "#<#{self.class.name}:#{object_id} @config=#{@config} @options=#{@options}>" - end - - private - - ### Reserved for Cop::Cop - - def callback_argument(range) - range - end - - def apply_correction(corrector) - current_corrector&.merge!(corrector) if corrector - end - - ### Reserved for Commissioner: - - def current_offense_locations - @current_offense_locations ||= Set.new - end - - def currently_disabled_lines - @currently_disabled_lines ||= Set.new - end - - def current_corrector - @current_corrector ||= Corrector.new(@processed_source) if @processed_source.valid_syntax? - end - - def current_offenses - @current_offenses ||= [] - end - - private_class_method def self.restrict_on_send - @restrict_on_send ||= self::RESTRICT_ON_SEND.to_a.freeze - end - - EMPTY_OFFENSES = [].freeze - private_constant :EMPTY_OFFENSES - # Called to complete an investigation - def complete_investigation - InvestigationReport.new( - self, processed_source, @current_offenses || EMPTY_OFFENSES, @current_corrector - ) - ensure - reset_investigation - end - - ### Actually private methods - - # rubocop:disable Layout/ClassStructure - def self.builtin? - return false unless (m = instance_methods(false).first) # any custom method will do - - path, _line = instance_method(m).source_location - path.start_with?(__dir__) - end - private_class_method :builtin? - # rubocop:enable Layout/ClassStructure - - def reset_investigation - @currently_disabled_lines = @current_offenses = @processed_source = @current_corrector = nil - end - - # @return [Symbol, Corrector] offense status - def correct(range) - if block_given? - corrector = Corrector.new(self) - yield corrector - if corrector.empty? - corrector = nil - elsif !self.class.support_autocorrect? - raise "The Cop #{name} must `extend AutoCorrector` to be able to autocorrect" - end - end - - [use_corrector(range, corrector), corrector] - end - - # @return [Symbol] offense status - def use_corrector(range, corrector) - if autocorrect? - attempt_correction(range, corrector) - elsif corrector && (always_autocorrect? || (contextual_autocorrect? && !LSP.enabled?)) - :uncorrected - else - :unsupported - end - end - - # @return [Symbol] offense status - def attempt_correction(range, corrector) - if corrector - status = :corrected - elsif disable_uncorrectable? - corrector = disable_uncorrectable(range) - status = :corrected_with_todo - else - return :unsupported - end - - apply_correction(corrector) - status - end - - def disable_uncorrectable(range) - line = range.line - return unless currently_disabled_lines.add?(line) - - disable_offense(range) - end - - def range_from_node_or_range(node_or_range) - if node_or_range.respond_to?(:loc) - node_or_range.source_range - elsif node_or_range.is_a?(::Parser::Source::Range) - node_or_range - else - extra = ' (call `add_global_offense`)' if node_or_range.nil? - raise "Expected a Source::Range, got #{node_or_range.inspect}#{extra}" - end - end - - def find_message(range, message) - annotate(message || message(range)) - end - - def annotate(message) - RuboCop::Cop::MessageAnnotator.new( - config, cop_name, cop_config, @options - ).annotate(message) - end - - def file_name_matches_any?(file, parameter, default_result) - patterns = cop_config[parameter] - return default_result unless patterns - - patterns = FilePatterns.from(patterns) - patterns.match?(config.path_relative_to_config(file)) || patterns.match?(file) - end - - def enabled_line?(line_number) - return true if @options[:ignore_disable_comments] || !@processed_source - - @processed_source.comment_config.cop_enabled_at_line?(self, line_number) - end - - def find_severity(_range, severity) - custom_severity || severity || default_severity - end - - def default_severity - self.class.lint? ? :warning : :convention - end - - def custom_severity - severity = cop_config['Severity'] - return unless severity - - if Severity::NAMES.include?(severity.to_sym) - severity.to_sym - else - message = "Warning: Invalid severity '#{severity}'. " \ - "Valid severities are #{Severity::NAMES.join(', ')}." - warn(Rainbow(message).red) - end - end - - def range_for_original(range) - ::Parser::Source::Range.new( - @current_original.buffer, - range.begin_pos + @current_offset, - range.end_pos + @current_offset - ) - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/bundler/duplicated_gem.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/bundler/duplicated_gem.rb deleted file mode 100644 index 2efa8d4a..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/bundler/duplicated_gem.rb +++ /dev/null @@ -1,94 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - module Bundler - # A Gem's requirements should be listed only once in a Gemfile. - # - # @example - # # bad - # gem 'rubocop' - # gem 'rubocop' - # - # # bad - # group :development do - # gem 'rubocop' - # end - # - # group :test do - # gem 'rubocop' - # end - # - # # good - # group :development, :test do - # gem 'rubocop' - # end - # - # # good - # gem 'rubocop', groups: [:development, :test] - # - # # good - conditional declaration - # if Dir.exist?(local) - # gem 'rubocop', path: local - # elsif ENV['RUBOCOP_VERSION'] == 'master' - # gem 'rubocop', git: 'https://github.com/rubocop/rubocop.git' - # else - # gem 'rubocop', '~> 0.90.0' - # end - # - class DuplicatedGem < Base - include RangeHelp - - MSG = 'Gem `%s` requirements already given on line ' \ - '%d of the Gemfile.' - - def on_new_investigation - return if processed_source.blank? - - duplicated_gem_nodes.each do |nodes| - nodes[1..].each do |node| - register_offense(node, node.first_argument.to_a.first, nodes.first.first_line) - end - end - end - - private - - # @!method gem_declarations(node) - def_node_search :gem_declarations, '(send nil? :gem str ...)' - - def duplicated_gem_nodes - gem_declarations(processed_source.ast) - .group_by(&:first_argument) - .values - .select { |nodes| nodes.size > 1 && !conditional_declaration?(nodes) } - end - - def conditional_declaration?(nodes) - parent = nodes[0].each_ancestor.find { |ancestor| !ancestor.begin_type? } - return false unless parent&.if_type? || parent&.when_type? - - root_conditional_node = parent.if_type? ? parent : parent.parent - nodes.all? { |node| within_conditional?(node, root_conditional_node) } - end - - def within_conditional?(node, conditional_node) - conditional_node.branches.any? do |branch| - branch == node || branch.child_nodes.include?(node) - end - end - - def register_offense(node, gem_name, line_of_first_occurrence) - line_range = node.loc.column...node.loc.last_column - offense_location = source_range(processed_source.buffer, node.first_line, line_range) - message = format( - MSG, - gem_name: gem_name, - line_of_first_occurrence: line_of_first_occurrence - ) - add_offense(offense_location, message: message) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/bundler/duplicated_group.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/bundler/duplicated_group.rb deleted file mode 100644 index a2ffe8eb..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/bundler/duplicated_group.rb +++ /dev/null @@ -1,127 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - module Bundler - # A Gem group, or a set of groups, should be listed only once in a Gemfile. - # - # For example, if the values of `source`, `git`, `platforms`, or `path` - # surrounding `group` are different, no offense will be registered: - # - # [source,ruby] - # ----- - # platforms :ruby do - # group :default do - # gem 'openssl' - # end - # end - # - # platforms :jruby do - # group :default do - # gem 'jruby-openssl' - # end - # end - # ----- - # - # @example - # # bad - # group :development do - # gem 'rubocop' - # end - # - # group :development do - # gem 'rubocop-rails' - # end - # - # # bad (same set of groups declared twice) - # group :development, :test do - # gem 'rubocop' - # end - # - # group :test, :development do - # gem 'rspec' - # end - # - # # good - # group :development do - # gem 'rubocop' - # end - # - # group :development, :test do - # gem 'rspec' - # end - # - # # good - # gem 'rubocop', groups: [:development, :test] - # gem 'rspec', groups: [:development, :test] - # - class DuplicatedGroup < Base - include RangeHelp - - MSG = 'Gem group `%s` already defined on line ' \ - '%d of the Gemfile.' - SOURCE_BLOCK_NAMES = %i[source git platforms path].freeze - - # @!method group_declarations(node) - def_node_search :group_declarations, '(send nil? :group ...)' - - def on_new_investigation - return if processed_source.blank? - - duplicated_group_nodes.each do |nodes| - nodes[1..].each do |node| - group_name = node.arguments.map(&:source).join(', ') - - register_offense(node, group_name, nodes.first.first_line) - end - end - end - - private - - def duplicated_group_nodes - group_declarations = group_declarations(processed_source.ast) - group_keys = group_declarations.group_by do |node| - source_key = find_source_key(node) - group_attributes = group_attributes(node).sort.join - - "#{source_key}#{group_attributes}" - end - - group_keys.values.select { |nodes| nodes.size > 1 } - end - - def register_offense(node, group_name, line_of_first_occurrence) - line_range = node.loc.column...node.loc.last_column - offense_location = source_range(processed_source.buffer, node.first_line, line_range) - message = format( - MSG, - group_name: group_name, - line_of_first_occurrence: line_of_first_occurrence - ) - add_offense(offense_location, message: message) - end - - def find_source_key(node) - source_block = node.each_ancestor(:block).find do |block_node| - SOURCE_BLOCK_NAMES.include?(block_node.method_name) - end - - return unless source_block - - "#{source_block.method_name}#{source_block.send_node.first_argument&.source}" - end - - def group_attributes(node) - node.arguments.map do |argument| - if argument.hash_type? - argument.pairs.map(&:source).sort.join(', ') - else - argument.respond_to?(:value) ? argument.value.to_s : argument.source - end - end - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/bundler/gem_comment.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/bundler/gem_comment.rb deleted file mode 100644 index f14e60d7..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/bundler/gem_comment.rb +++ /dev/null @@ -1,171 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - module Bundler - # Each gem in the Gemfile should have a comment explaining - # its purpose in the project, or the reason for its version - # or source. - # - # The optional "OnlyFor" configuration array - # can be used to only register offenses when the gems - # use certain options or have version specifiers. - # - # When "version_specifiers" is included, a comment - # will be enforced if the gem has any version specifier. - # - # When "restrictive_version_specifiers" is included, a comment - # will be enforced if the gem has a version specifier that - # holds back the version of the gem. - # - # For any other value in the array, a comment will be enforced for - # a gem if an option by the same name is present. - # A useful use case is to enforce a comment when using - # options that change the source of a gem: - # - # - `bitbucket` - # - `gist` - # - `git` - # - `github` - # - `source` - # - # For a full list of options supported by bundler, - # see https://bundler.io/man/gemfile.5.html - # . - # - # @example OnlyFor: [] (default) - # # bad - # - # gem 'foo' - # - # # good - # - # # Helpers for the foo things. - # gem 'foo' - # - # @example OnlyFor: ['version_specifiers'] - # # bad - # - # gem 'foo', '< 2.1' - # - # # good - # - # # Version 2.1 introduces breaking change baz - # gem 'foo', '< 2.1' - # - # @example OnlyFor: ['restrictive_version_specifiers'] - # # bad - # - # gem 'foo', '< 2.1' - # - # # good - # - # gem 'foo', '>= 1.0' - # - # # Version 2.1 introduces breaking change baz - # gem 'foo', '< 2.1' - # - # @example OnlyFor: ['version_specifiers', 'github'] - # # bad - # - # gem 'foo', github: 'some_account/some_fork_of_foo' - # - # gem 'bar', '< 2.1' - # - # # good - # - # # Using this fork because baz - # gem 'foo', github: 'some_account/some_fork_of_foo' - # - # # Version 2.1 introduces breaking change baz - # gem 'bar', '< 2.1' - # - class GemComment < Base - include DefNode - include GemDeclaration - - MSG = 'Missing gem description comment.' - CHECKED_OPTIONS_CONFIG = 'OnlyFor' - VERSION_SPECIFIERS_OPTION = 'version_specifiers' - RESTRICTIVE_VERSION_SPECIFIERS_OPTION = 'restrictive_version_specifiers' - RESTRICTIVE_VERSION_PATTERN = /\A\s*(?:<|~>|\d|=)/.freeze - RESTRICT_ON_SEND = %i[gem].freeze - - def on_send(node) - return unless gem_declaration?(node) - return if ignored_gem?(node) - return if commented_any_descendant?(node) - return if cop_config[CHECKED_OPTIONS_CONFIG].any? && !checked_options_present?(node) - - add_offense(node) - end - - private - - def commented_any_descendant?(node) - commented?(node) || node.each_descendant.any? { |n| commented?(n) } - end - - def commented?(node) - preceding_lines = preceding_lines(node) - preceding_comment?(node, preceding_lines.last) - end - - # The args node1 & node2 may represent a RuboCop::AST::Node - # or a Parser::Source::Comment. Both respond to #loc. - def precede?(node1, node2) - node2.loc.line - node1.loc.line <= 1 - end - - def preceding_lines(node) - processed_source.ast_with_comments[node].select do |line| - line.loc.line <= node.loc.line - end - end - - def preceding_comment?(node1, node2) - node1 && node2 && precede?(node2, node1) && comment_line?(node2.source) - end - - def ignored_gem?(node) - ignored_gems = Array(cop_config['IgnoredGems']) - ignored_gems.include?(node.first_argument.value) - end - - def checked_options_present?(node) - (cop_config[CHECKED_OPTIONS_CONFIG].include?(VERSION_SPECIFIERS_OPTION) && - version_specified_gem?(node)) || - (cop_config[CHECKED_OPTIONS_CONFIG].include?(RESTRICTIVE_VERSION_SPECIFIERS_OPTION) && - restrictive_version_specified_gem?(node)) || - contains_checked_options?(node) - end - - # Besides the gem name, all other *positional* arguments to `gem` are version specifiers, - # as long as it has one we know there's at least one version specifier. - def version_specified_gem?(node) - # arguments[0] is the gem name - node.arguments[1]&.str_type? - end - - # Version specifications that restrict all updates going forward. This excludes versions - # like ">= 1.0" or "!= 2.0.3". - def restrictive_version_specified_gem?(node) - return false unless version_specified_gem?(node) - - node.arguments[1..] - .any? { |arg| arg&.str_type? && RESTRICTIVE_VERSION_PATTERN.match?(arg.value) } - end - - def contains_checked_options?(node) - (Array(cop_config[CHECKED_OPTIONS_CONFIG]) & gem_options(node).map(&:to_s)).any? - end - - def gem_options(node) - return [] unless node.last_argument&.type == :hash - - node.last_argument.keys.map(&:value) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/bundler/gem_filename.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/bundler/gem_filename.rb deleted file mode 100644 index bcb0dfc6..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/bundler/gem_filename.rb +++ /dev/null @@ -1,103 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - module Bundler - # Verifies that a project contains Gemfile or gems.rb file and correct - # associated lock file based on the configuration. - # - # @example EnforcedStyle: Gemfile (default) - # # bad - # Project contains gems.rb and gems.locked files - # - # # bad - # Project contains Gemfile and gems.locked file - # - # # good - # Project contains Gemfile and Gemfile.lock - # - # @example EnforcedStyle: gems.rb - # # bad - # Project contains Gemfile and Gemfile.lock files - # - # # bad - # Project contains gems.rb and Gemfile.lock file - # - # # good - # Project contains gems.rb and gems.locked files - class GemFilename < Base - include ConfigurableEnforcedStyle - include RangeHelp - - MSG_GEMFILE_REQUIRED = '`gems.rb` file was found but `Gemfile` is required ' \ - '(file path: %s).' - MSG_GEMS_RB_REQUIRED = '`Gemfile` was found but `gems.rb` file is required ' \ - '(file path: %s).' - MSG_GEMFILE_MISMATCHED = 'Expected a `Gemfile.lock` with `Gemfile` but found ' \ - '`gems.locked` file (file path: %s).' - MSG_GEMS_RB_MISMATCHED = 'Expected a `gems.locked` file with `gems.rb` but found ' \ - '`Gemfile.lock` (file path: %s).' - GEMFILE_FILES = %w[Gemfile Gemfile.lock].freeze - GEMS_RB_FILES = %w[gems.rb gems.locked].freeze - - def on_new_investigation - file_path = processed_source.file_path - basename = File.basename(file_path) - return if expected_gemfile?(basename) - - register_offense(file_path, basename) - end - - private - - def register_offense(file_path, basename) - register_gemfile_offense(file_path, basename) if gemfile_offense?(basename) - register_gems_rb_offense(file_path, basename) if gems_rb_offense?(basename) - end - - def register_gemfile_offense(file_path, basename) - message = case basename - when 'gems.rb' - MSG_GEMFILE_REQUIRED - when 'gems.locked' - MSG_GEMFILE_MISMATCHED - end - - add_global_offense(format(message, file_path: file_path)) - end - - def register_gems_rb_offense(file_path, basename) - message = case basename - when 'Gemfile' - MSG_GEMS_RB_REQUIRED - when 'Gemfile.lock' - MSG_GEMS_RB_MISMATCHED - end - - add_global_offense(format(message, file_path: file_path)) - end - - def gemfile_offense?(basename) - gemfile_required? && GEMS_RB_FILES.include?(basename) - end - - def gems_rb_offense?(basename) - gems_rb_required? && GEMFILE_FILES.include?(basename) - end - - def expected_gemfile?(basename) - (gemfile_required? && GEMFILE_FILES.include?(basename)) || - (gems_rb_required? && GEMS_RB_FILES.include?(basename)) - end - - def gemfile_required? - style == :Gemfile - end - - def gems_rb_required? - style == :'gems.rb' - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/bundler/gem_version.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/bundler/gem_version.rb deleted file mode 100644 index d5992af8..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/bundler/gem_version.rb +++ /dev/null @@ -1,133 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - module Bundler - # Enforce that Gem version specifications or a commit reference (branch, - # ref, or tag) are either required or forbidden. - # - # @example EnforcedStyle: required (default) - # # bad - # gem 'rubocop' - # - # # good - # gem 'rubocop', '~> 1.12' - # - # # good - # gem 'rubocop', '>= 1.10.0' - # - # # good - # gem 'rubocop', '>= 1.5.0', '< 1.10.0' - # - # # good - # gem 'rubocop', branch: 'feature-branch' - # - # # good - # gem 'rubocop', ref: '74b5bfbb2c4b6fd6cdbbc7254bd7084b36e0c85b' - # - # # good - # gem 'rubocop', tag: 'v1.17.0' - # - # @example EnforcedStyle: forbidden - # # good - # gem 'rubocop' - # - # # bad - # gem 'rubocop', '~> 1.12' - # - # # bad - # gem 'rubocop', '>= 1.10.0' - # - # # bad - # gem 'rubocop', '>= 1.5.0', '< 1.10.0' - # - # # bad - # gem 'rubocop', branch: 'feature-branch' - # - # # bad - # gem 'rubocop', ref: '74b5bfbb2c4b6fd6cdbbc7254bd7084b36e0c85b' - # - # # bad - # gem 'rubocop', tag: 'v1.17.0' - # - class GemVersion < Base - include ConfigurableEnforcedStyle - include GemDeclaration - - REQUIRED_MSG = 'Gem version specification is required.' - FORBIDDEN_MSG = 'Gem version specification is forbidden.' - VERSION_SPECIFICATION_REGEX = /^\s*[~<>=]*\s*[0-9.]+/.freeze - - # @!method includes_version_specification?(node) - def_node_matcher :includes_version_specification?, <<~PATTERN - (send nil? :gem <(str #version_specification?) ...>) - PATTERN - - # @!method includes_commit_reference?(node) - def_node_matcher :includes_commit_reference?, <<~PATTERN - (send nil? :gem <(hash <(pair (sym {:branch :ref :tag}) (str _)) ...>) ...>) - PATTERN - - def on_send(node) - return unless gem_declaration?(node) - return if allowed_gem?(node) - - if offense?(node) - add_offense(node) - opposite_style_detected - else - correct_style_detected - end - end - - private - - def allowed_gem?(node) - allowed_gems.include?(node.first_argument.value) - end - - def allowed_gems - Array(cop_config['AllowedGems']) - end - - def message(range) - gem_specification = range.source - - if required_style? - format(REQUIRED_MSG, gem_specification: gem_specification) - elsif forbidden_style? - format(FORBIDDEN_MSG, gem_specification: gem_specification) - end - end - - def offense?(node) - required_offense?(node) || forbidden_offense?(node) - end - - def required_offense?(node) - return false unless required_style? - - !includes_version_specification?(node) && !includes_commit_reference?(node) - end - - def forbidden_offense?(node) - return false unless forbidden_style? - - includes_version_specification?(node) || includes_commit_reference?(node) - end - - def forbidden_style? - style == :forbidden - end - - def required_style? - style == :required - end - - def version_specification?(expression) - expression.match?(VERSION_SPECIFICATION_REGEX) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/bundler/insecure_protocol_source.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/bundler/insecure_protocol_source.rb deleted file mode 100644 index c7b24a87..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/bundler/insecure_protocol_source.rb +++ /dev/null @@ -1,86 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - module Bundler - # Passing symbol arguments to `source` (e.g. `source :rubygems`) is - # deprecated because they default to using HTTP requests. Instead, specify - # `'https://rubygems.org'` if possible, or `'http://rubygems.org'` if not. - # - # When autocorrecting, this cop will replace symbol arguments with - # `'https://rubygems.org'`. - # - # This cop will not replace existing sources that use `http://`. This may - # be necessary where HTTPS is not available. For example, where using an - # internal gem server via an intranet, or where HTTPS is prohibited. - # However, you should strongly prefer `https://` where possible, as it is - # more secure. - # - # If you don't allow `http://`, please set `false` to `AllowHttpProtocol`. - # This option is `true` by default for safe autocorrection. - # - # @example - # # bad - # source :gemcutter - # source :rubygems - # source :rubyforge - # - # # good - # source 'https://rubygems.org' # strongly recommended - # - # @example AllowHttpProtocol: true (default) - # - # # good - # source 'http://rubygems.org' # use only if HTTPS is unavailable - # - # @example AllowHttpProtocol: false - # - # # bad - # source 'http://rubygems.org' - # - class InsecureProtocolSource < Base - include RangeHelp - extend AutoCorrector - - MSG = 'The source `:%s` is deprecated because HTTP requests ' \ - 'are insecure. ' \ - "Please change your source to 'https://rubygems.org' " \ - "if possible, or 'http://rubygems.org' if not." - MSG_HTTP_PROTOCOL = 'Use `https://rubygems.org` instead of `http://rubygems.org`.' - - RESTRICT_ON_SEND = %i[source].freeze - - # @!method insecure_protocol_source?(node) - def_node_matcher :insecure_protocol_source?, <<~PATTERN - (send nil? :source - ${(sym :gemcutter) (sym :rubygems) (sym :rubyforge) (:str "http://rubygems.org")}) - PATTERN - - def on_send(node) - insecure_protocol_source?(node) do |source_node| - source = source_node.value - use_http_protocol = source == 'http://rubygems.org' - - return if allow_http_protocol? && use_http_protocol - - message = if use_http_protocol - MSG_HTTP_PROTOCOL - else - format(MSG, source: source) - end - - add_offense(source_node, message: message) do |corrector| - corrector.replace(source_node, "'https://rubygems.org'") - end - end - end - - private - - def allow_http_protocol? - cop_config.fetch('AllowHttpProtocol', true) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/bundler/ordered_gems.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/bundler/ordered_gems.rb deleted file mode 100644 index 305c8e5f..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/bundler/ordered_gems.rb +++ /dev/null @@ -1,70 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - module Bundler - # Gems should be alphabetically sorted within groups. - # - # @example - # # bad - # gem 'rubocop' - # gem 'rspec' - # - # # good - # gem 'rspec' - # gem 'rubocop' - # - # # good - # gem 'rubocop' - # - # gem 'rspec' - # - # @example TreatCommentsAsGroupSeparators: true (default) - # # good - # # For code quality - # gem 'rubocop' - # # For tests - # gem 'rspec' - # - # @example TreatCommentsAsGroupSeparators: false - # # bad - # # For code quality - # gem 'rubocop' - # # For tests - # gem 'rspec' - class OrderedGems < Base - extend AutoCorrector - include OrderedGemNode - - MSG = 'Gems should be sorted in an alphabetical order within their ' \ - 'section of the Gemfile. ' \ - 'Gem `%s` should appear before `%s`.' - - def on_new_investigation - return if processed_source.blank? - - gem_declarations(processed_source.ast) - .each_cons(2) do |previous, current| - next unless consecutive_lines(previous, current) - next unless case_insensitive_out_of_order?(gem_name(current), gem_name(previous)) - - register_offense(previous, current) - end - end - - private - - def previous_declaration(node) - declarations = gem_declarations(processed_source.ast) - node_index = declarations.map(&:location).find_index(node.location) - declarations.to_a[node_index - 1] - end - - # @!method gem_declarations(node) - def_node_search :gem_declarations, <<~PATTERN - (:send nil? :gem str ...) - PATTERN - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/commissioner.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/commissioner.rb deleted file mode 100644 index cd320842..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/commissioner.rb +++ /dev/null @@ -1,182 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - # Commissioner class is responsible for processing the AST and delegating - # work to the specified cops. - class Commissioner - include RuboCop::AST::Traversal - - RESTRICTED_CALLBACKS = %i[on_send on_csend after_send after_csend].freeze - private_constant :RESTRICTED_CALLBACKS - - # How a Commissioner returns the results of the investigation - # as a list of Cop::InvestigationReport and any errors caught - # during the investigation. - # Immutable - # Consider creation API private - InvestigationReport = Struct.new(:processed_source, :cop_reports, :errors) do - def cops - @cops ||= cop_reports.map(&:cop) - end - - def offenses_per_cop - @offenses_per_cop ||= cop_reports.map(&:offenses) - end - - def correctors - @correctors ||= cop_reports.map(&:corrector) - end - - def offenses - @offenses ||= offenses_per_cop.flatten(1) - end - - def merge(investigation) - InvestigationReport.new(processed_source, - cop_reports + investigation.cop_reports, - errors + investigation.errors) - end - end - - attr_reader :errors - - def initialize(cops, forces = [], options = {}) - @cops = cops - @forces = forces - @options = options - initialize_callbacks - - reset - end - - # Create methods like :on_send, :on_super, etc. They will be called - # during AST traversal and try to call corresponding methods on cops. - # A call to `super` is used - # to continue iterating over the children of a node. - # However, if we know that a certain node type (like `int`) never has - # child nodes, there is no reason to pay the cost of calling `super`. - Parser::Meta::NODE_TYPES.each do |node_type| - method_name = :"on_#{node_type}" - next unless method_defined?(method_name) - - # Hacky: Comment-out code as needed - r = '#' unless RESTRICTED_CALLBACKS.include?(method_name) # has Restricted? - c = '#' if NO_CHILD_NODES.include?(node_type) # has Children? - - class_eval(<<~RUBY, __FILE__, __LINE__ + 1) - def on_#{node_type}(node) # def on_send(node) - trigger_responding_cops(:on_#{node_type}, node) # trigger_responding_cops(:on_send, node) - #{r} trigger_restricted_cops(:on_#{node_type}, node) # trigger_restricted_cops(:on_send, node) - #{c} super(node) # super(node) - #{c} trigger_responding_cops(:after_#{node_type}, node) # trigger_responding_cops(:after_send, node) - #{c}#{r} trigger_restricted_cops(:after_#{node_type}, node) # trigger_restricted_cops(:after_send, node) - end # end - RUBY - end - - # @return [InvestigationReport] - def investigate(processed_source, offset: 0, original: processed_source) - reset - - begin_investigation(processed_source, offset: offset, original: original) - if processed_source.valid_syntax? - invoke(:on_new_investigation, @cops) - invoke_with_argument(:investigate, @forces, processed_source) - - walk(processed_source.ast) unless @cops.empty? - invoke(:on_investigation_end, @cops) - else - invoke(:on_other_file, @cops) - end - reports = @cops.map { |cop| cop.send(:complete_investigation) } - InvestigationReport.new(processed_source, reports, @errors) - end - - private - - def begin_investigation(processed_source, offset:, original:) - @cops.each do |cop| - cop.begin_investigation(processed_source, offset: offset, original: original) - end - end - - def trigger_responding_cops(callback, node) - @callbacks[callback]&.each do |cop| - with_cop_error_handling(cop, node) do - cop.public_send(callback, node) - end - end - end - - def reset - @errors = [] - end - - def initialize_callbacks - @callbacks = build_callbacks(@cops) - @restricted_map = restrict_callbacks(@callbacks) - end - - def build_callbacks(cops) - callbacks = {} - cops.each do |cop| - cop.callbacks_needed.each do |callback| - (callbacks[callback] ||= []) << cop - end - end - callbacks - end - - def restrict_callbacks(callbacks) - restricted = {} - RESTRICTED_CALLBACKS.each do |callback| - restricted[callback] = restricted_map(callbacks[callback]) - end - restricted - end - - def trigger_restricted_cops(event, node) - name = node.method_name - @restricted_map[event][name]&.each do |cop| - with_cop_error_handling(cop, node) do - cop.public_send(event, node) - end - end - end - - # NOTE: mutates `callbacks` in place - def restricted_map(callbacks) - map = {} - callbacks&.select! do |cop| - restrictions = cop.class.send :restrict_on_send - restrictions.each { |name| (map[name] ||= []) << cop } - restrictions.empty? - end - map - end - - def invoke(callback, cops) - cops.each { |cop| with_cop_error_handling(cop) { cop.send(callback) } } - end - - def invoke_with_argument(callback, cops, arg) - cops.each { |cop| with_cop_error_handling(cop) { cop.send(callback, arg) } } - end - - # Allow blind rescues here, since we're absorbing and packaging or - # re-raising exceptions that can be raised from within the individual - # cops' `#investigate` methods. - def with_cop_error_handling(cop, node = nil) - yield - rescue StandardError => e - raise e if @options[:raise_error] # For internal testing - - err = ErrorWithAnalyzedFileLocation.new(cause: e, node: node, cop: cop) - raise err if @options[:raise_cop_error] # From user-input option - - @errors << err - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/cop.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/cop.rb deleted file mode 100644 index 9ba432a5..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/cop.rb +++ /dev/null @@ -1,166 +0,0 @@ -# frozen_string_literal: true - -require 'uri' -require_relative 'legacy/corrections_proxy' - -module RuboCop - module Cop - # @deprecated Use Cop::Base instead - # Legacy scaffold for Cops. - # See https://docs.rubocop.org/rubocop/v1_upgrade_notes.html - class Cop < Base - attr_reader :offenses - - exclude_from_registry - - # @deprecated - Correction = Struct.new(:lambda, :node, :cop) do - def call(corrector) - lambda.call(corrector) - rescue StandardError => e - raise ErrorWithAnalyzedFileLocation.new(cause: e, node: node, cop: cop) - end - end - - def self.support_autocorrect? - method_defined?(:autocorrect) - end - - def self.joining_forces - return unless method_defined?(:join_force?) - - cop = new - Force.all.select { |force_class| cop.join_force?(force_class) } - end - - ### Deprecated registry access - - # @deprecated Use Registry.global - def self.registry - Registry.global - end - - # @deprecated Use Registry.all - def self.all - Registry.all - end - - # @deprecated Use Registry.qualified_cop_name - def self.qualified_cop_name(name, origin) - Registry.qualified_cop_name(name, origin) - end - - def add_offense(node_or_range, location: :expression, message: nil, severity: nil, &block) - @v0_argument = node_or_range - range = find_location(node_or_range, location) - - # Since this range may be generated from Ruby code embedded in some - # template file, we convert it to location info in the original file. - range = range_for_original(range) - - if block.nil? && !support_autocorrect? - super(range, message: message, severity: severity) - else - super(range, message: message, severity: severity) do |corrector| - emulate_v0_callsequence(corrector, &block) - end - end - end - - def find_location(node, loc) - # Location can be provided as a symbol, e.g.: `:keyword` - loc.is_a?(Symbol) ? node.loc.public_send(loc) : loc - end - - # @deprecated Use class method - def support_autocorrect? - # warn 'deprecated, use cop.class.support_autocorrect?' TODO - self.class.support_autocorrect? - end - - # @deprecated - def corrections - # warn 'Cop#corrections is deprecated' TODO - return [] unless @last_corrector - - Legacy::CorrectionsProxy.new(@last_corrector) - end - - # Called before all on_... have been called - def on_new_investigation - investigate(processed_source) if respond_to?(:investigate) - super - end - - # Called after all on_... have been called - def on_investigation_end - investigate_post_walk(processed_source) if respond_to?(:investigate_post_walk) - super - end - - # Called before any investigation - # @api private - def begin_investigation(processed_source, offset: 0, original: processed_source) - super - @offenses = current_offenses - @last_corrector = @current_corrector - - # We need to keep track of the original source and offset, - # because `processed_source` here may be an embedded code in it. - @current_offset = offset - @current_original = original - end - - private - - # Override Base - def callback_argument(_range) - @v0_argument - end - - def apply_correction(corrector) - suppress_clobbering { super } - end - - # Just for legacy - def emulate_v0_callsequence(corrector) - lambda = correction_lambda - yield corrector if block_given? - unless corrector.empty? - raise 'Your cop must inherit from Cop::Base and extend AutoCorrector' - end - - return unless lambda - - suppress_clobbering { lambda.call(corrector) } - end - - def correction_lambda - return unless support_autocorrect? - - dedupe_on_node(@v0_argument) { autocorrect(@v0_argument) } - end - - def dedupe_on_node(node) - @corrected_nodes ||= {}.compare_by_identity - yield unless @corrected_nodes.key?(node) - ensure - @corrected_nodes[node] = true - end - - def suppress_clobbering - yield - rescue ::Parser::ClobberingError - # ignore Clobbering errors - end - - def range_for_original(range) - ::Parser::Source::Range.new( - @current_original.buffer, - range.begin_pos + @current_offset, - range.end_pos + @current_offset - ) - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/corrector.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/corrector.rb deleted file mode 100644 index cb582882..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/corrector.rb +++ /dev/null @@ -1,138 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - # This class takes a source buffer and rewrite its source - # based on the different correction rules supplied. - # - # Important! - # The nodes modified by the corrections should be part of the - # AST of the source_buffer. - class Corrector < ::Parser::Source::TreeRewriter - NOOP_CONSUMER = ->(diagnostic) {} # noop - - # Duck typing for get to a ::Parser::Source::Buffer - def self.source_buffer(source) - source = source.processed_source if source.respond_to?(:processed_source) - source = source.buffer if source.respond_to?(:buffer) - source = source.source_buffer if source.respond_to?(:source_buffer) - - unless source.is_a? ::Parser::Source::Buffer - raise TypeError, 'Expected argument to lead to a Parser::Source::Buffer ' \ - "but got #{source.inspect}" - end - - source - end - - # @param source [Parser::Source::Buffer, or anything - # leading to one via `(processed_source.)buffer`] - # - # corrector = Corrector.new(cop) - def initialize(source) - source = self.class.source_buffer(source) - super( - source, - different_replacements: :raise, - swallowed_insertions: :raise, - crossing_deletions: :accept - ) - - # Don't print warnings to stderr if corrections conflict with each other - diagnostics.consumer = NOOP_CONSUMER - end - - alias rewrite process # Legacy - - # Removes `size` characters prior to the source range. - # - # @param [Parser::Source::Range, RuboCop::AST::Node] range or node - # @param [Integer] size - def remove_preceding(node_or_range, size) - range = to_range(node_or_range) - to_remove = range.with(begin_pos: range.begin_pos - size, end_pos: range.begin_pos) - remove(to_remove) - end - - # Removes `size` characters from the beginning of the given range. - # If `size` is greater than the size of `range`, the removed region can - # overrun the end of `range`. - # - # @param [Parser::Source::Range, RuboCop::AST::Node] range or node - # @param [Integer] size - def remove_leading(node_or_range, size) - range = to_range(node_or_range) - to_remove = range.with(end_pos: range.begin_pos + size) - remove(to_remove) - end - - # Removes `size` characters from the end of the given range. - # If `size` is greater than the size of `range`, the removed region can - # overrun the beginning of `range`. - # - # @param [Parser::Source::Range, RuboCop::AST::Node] range or node - # @param [Integer] size - def remove_trailing(node_or_range, size) - range = to_range(node_or_range) - to_remove = range.with(begin_pos: range.end_pos - size) - remove(to_remove) - end - - # Swaps sources at the given ranges. - # - # @param [Parser::Source::Range, RuboCop::AST::Node] node_or_range1 - # @param [Parser::Source::Range, RuboCop::AST::Node] node_or_range2 - def swap(node_or_range1, node_or_range2) - range1 = to_range(node_or_range1) - range2 = to_range(node_or_range2) - - if range1.end_pos == range2.begin_pos - insert_before(range1, range2.source) - remove(range2) - elsif range2.end_pos == range1.begin_pos - insert_before(range2, range1.source) - remove(range1) - else - replace(range1, range2.source) - replace(range2, range1.source) - end - end - - private - - # :nodoc: - def to_range(node_or_range) - range = case node_or_range - when ::RuboCop::AST::Node, ::Parser::Source::Comment - node_or_range.source_range - when ::Parser::Source::Range - node_or_range - else - raise TypeError, - 'Expected a Parser::Source::Range, Comment or ' \ - "RuboCop::AST::Node, got #{node_or_range.class}" - end - validate_buffer(range.source_buffer) - range - end - - def check_range_validity(node_or_range) - super(to_range(node_or_range)) - end - - def validate_buffer(buffer) - return if buffer == source_buffer - - unless buffer.is_a?(::Parser::Source::Buffer) - # actually this should be enforced by parser gem - raise 'Corrector expected range source buffer to be a ' \ - "Parser::Source::Buffer, but got #{buffer.class}" - end - raise "Correction target buffer #{buffer.object_id} " \ - "name:#{buffer.name.inspect} " \ - "is not current #{@source_buffer.object_id} " \ - "name:#{@source_buffer.name.inspect} under investigation" - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/correctors/alignment_corrector.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/correctors/alignment_corrector.rb deleted file mode 100644 index 55d66ada..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/correctors/alignment_corrector.rb +++ /dev/null @@ -1,136 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - # This class does autocorrection of nodes that should just be moved to - # the left or to the right, amount being determined by the instance - # variable column_delta. - class AlignmentCorrector - extend RangeHelp - extend Alignment - - class << self - attr_reader :processed_source - - def correct(corrector, processed_source, node, column_delta) - return unless node - - @processed_source = processed_source - expr = node.respond_to?(:loc) ? node.source_range : node - return if block_comment_within?(expr) - - taboo_ranges = inside_string_ranges(node) - - each_line(expr) do |line_begin_pos| - autocorrect_line(corrector, line_begin_pos, expr, column_delta, taboo_ranges) - end - end - - def align_end(corrector, processed_source, node, align_to) - @processed_source = processed_source - whitespace = whitespace_range(node) - return false unless whitespace.source.strip.empty? - - column = alignment_column(align_to) - corrector.replace(whitespace, ' ' * column) - end - - private - - def autocorrect_line(corrector, line_begin_pos, expr, column_delta, - taboo_ranges) - range = calculate_range(expr, line_begin_pos, column_delta) - # We must not change indentation of heredoc strings or inside other - # string literals - return if taboo_ranges.any? { |t| within?(range, t) } - - if column_delta.positive? && range.resize(1).source != "\n" - corrector.insert_before(range, ' ' * column_delta) - elsif /\A[ \t]+\z/.match?(range.source) - remove(range, corrector) - end - end - - def inside_string_ranges(node) - return [] unless node.is_a?(Parser::AST::Node) - - node.each_node(:str, :dstr, :xstr).filter_map { |n| inside_string_range(n) } - end - - def inside_string_range(node) - loc = node.location - - if node.heredoc? - loc.heredoc_body.join(loc.heredoc_end) - elsif delimited_string_literal?(node) - loc.begin.end.join(loc.end.begin) - end - end - - # Some special kinds of string literals are not composed of literal - # characters between two delimiters: - # - The source map of `?a` responds to :begin and :end but its end is - # nil. - # - The source map of `__FILE__` responds to neither :begin nor :end. - def delimited_string_literal?(node) - loc = node.location - - loc.respond_to?(:begin) && loc.begin && loc.respond_to?(:end) && loc.end - end - - def block_comment_within?(expr) - processed_source.comments.select(&:document?).any? do |c| - within?(c.source_range, expr) - end - end - - def calculate_range(expr, line_begin_pos, column_delta) - return range_between(line_begin_pos, line_begin_pos) if column_delta.positive? - - starts_with_space = expr.source_buffer.source[line_begin_pos].start_with?(' ') - - if starts_with_space - range_between(line_begin_pos, line_begin_pos + column_delta.abs) - else - range_between(line_begin_pos - column_delta.abs, line_begin_pos) - end - end - - def remove(range, corrector) - original_stderr = $stderr - $stderr = StringIO.new # Avoid error messages on console - corrector.remove(range) - rescue RuntimeError - range = range_between(range.begin_pos + 1, range.end_pos + 1) - retry if /^ +$/.match?(range.source) - ensure - $stderr = original_stderr - end - - def each_line(expr) - line_begin_pos = expr.begin_pos - expr.source.each_line do |line| - yield line_begin_pos - line_begin_pos += line.length - end - end - - def whitespace_range(node) - begin_pos = node.loc.end.begin_pos - - range_between(begin_pos - node.loc.end.column, begin_pos) - end - - def alignment_column(align_to) - if !align_to - 0 - elsif align_to.respond_to?(:loc) - align_to.source_range.column - else - align_to.column - end - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/correctors/condition_corrector.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/correctors/condition_corrector.rb deleted file mode 100644 index 10f9494b..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/correctors/condition_corrector.rb +++ /dev/null @@ -1,25 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - # This class does condition autocorrection - class ConditionCorrector - class << self - def correct_negative_condition(corrector, node) - condition = negated_condition(node) - - corrector.replace(node.loc.keyword, node.inverse_keyword) - corrector.replace(condition, condition.children.first.source) - end - - private - - def negated_condition(node) - condition = node.condition - condition = condition.children.first while condition.begin_type? - condition - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/correctors/each_to_for_corrector.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/correctors/each_to_for_corrector.rb deleted file mode 100644 index e464a558..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/correctors/each_to_for_corrector.rb +++ /dev/null @@ -1,47 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - # This class autocorrects `#each` enumeration to `for` iteration. - class EachToForCorrector - extend NodePattern::Macros - - CORRECTION_WITH_ARGUMENTS = 'for %s in %s do' - CORRECTION_WITHOUT_ARGUMENTS = 'for _ in %s do' - - def initialize(block_node) - @block_node = block_node - @collection_node = block_node.receiver - @argument_node = block_node.arguments - end - - def call(corrector) - corrector.replace(offending_range, correction) - end - - private - - attr_reader :block_node, :collection_node, :argument_node - - def correction - if block_node.arguments? - format(CORRECTION_WITH_ARGUMENTS, - collection: collection_node.source, - variables: argument_node.children.first.source) - else - format(CORRECTION_WITHOUT_ARGUMENTS, enumerable: collection_node.source) - end - end - - def offending_range - begin_range = block_node.source_range.begin - - if block_node.arguments? - begin_range.join(argument_node.source_range.end) - else - begin_range.join(block_node.loc.begin.end) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/correctors/empty_line_corrector.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/correctors/empty_line_corrector.rb deleted file mode 100644 index b230be17..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/correctors/empty_line_corrector.rb +++ /dev/null @@ -1,25 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - # This class does empty line autocorrection - class EmptyLineCorrector - class << self - def correct(corrector, node) - offense_style, range = node - - case offense_style - when :no_empty_lines - corrector.remove(range) - when :empty_lines - corrector.insert_before(range, "\n") - end - end - - def insert_before(corrector, node) - corrector.insert_before(node, "\n") - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/correctors/for_to_each_corrector.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/correctors/for_to_each_corrector.rb deleted file mode 100644 index 275aa126..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/correctors/for_to_each_corrector.rb +++ /dev/null @@ -1,66 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - # This class autocorrects `for` iteration to `#each` enumeration. - class ForToEachCorrector - extend NodePattern::Macros - - CORRECTION = '%s.each do |%s|' - - def initialize(for_node) - @for_node = for_node - @variable_node = for_node.variable - @collection_node = for_node.collection - end - - def call(corrector) - offending_range = for_node.source_range.begin.join(end_range) - - corrector.replace(offending_range, correction) - end - - private - - attr_reader :for_node, :variable_node, :collection_node - - def correction - format(CORRECTION, collection: collection_source, argument: variable_node.source) - end - - def collection_source - if requires_parentheses? - "(#{collection_node.source})" - else - collection_node.source - end - end - - def requires_parentheses? - return true if collection_node.send_type? && collection_node.operator_method? - - collection_node.range_type? || collection_node.or_type? || collection_node.and_type? - end - - def end_range - if for_node.do? - keyword_begin.end - else - collection_end.end - end - end - - def keyword_begin - for_node.loc.begin - end - - def collection_end - if collection_node.begin_type? - collection_node.loc.end - else - collection_node.source_range - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/correctors/if_then_corrector.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/correctors/if_then_corrector.rb deleted file mode 100644 index 54ada1e8..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/correctors/if_then_corrector.rb +++ /dev/null @@ -1,55 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - # This class autocorrects `if...then` structures to a multiline `if` statement - class IfThenCorrector - DEFAULT_INDENTATION_WIDTH = 2 - - def initialize(if_node, indentation: nil) - @if_node = if_node - @indentation = indentation || DEFAULT_INDENTATION_WIDTH - end - - def call(corrector) - corrector.replace(if_node, replacement) - end - - private - - attr_reader :if_node, :indentation - - def replacement(node = if_node, indentation = nil) - indentation = ' ' * node.source_range.column if indentation.nil? - if_branch_source = node.if_branch&.source || 'nil' - elsif_indentation = indentation if node.respond_to?(:elsif?) && node.elsif? - - if_branch = <<~RUBY - #{elsif_indentation}#{node.keyword} #{node.condition.source} - #{indentation}#{branch_body_indentation}#{if_branch_source} - RUBY - - else_branch = rewrite_else_branch(node.else_branch, indentation) - if_branch + else_branch - end - - def rewrite_else_branch(else_branch, indentation) - if else_branch.nil? - 'end' - elsif else_branch.if_type? && else_branch.elsif? - replacement(else_branch, indentation) - else - <<~RUBY.chomp - #{indentation}else - #{indentation}#{branch_body_indentation}#{else_branch.source} - #{indentation}end - RUBY - end - end - - def branch_body_indentation - @branch_body_indentation ||= (' ' * indentation).freeze - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb deleted file mode 100644 index 6d690736..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/correctors/lambda_literal_to_method_corrector.rb +++ /dev/null @@ -1,139 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - # This class autocorrects lambda literal to method notation. - class LambdaLiteralToMethodCorrector - def initialize(block_node) - @block_node = block_node - @method = block_node.send_node - @arguments = block_node.arguments - end - - def call(corrector) - # Check for unparenthesized args' preceding and trailing whitespaces. - remove_unparenthesized_whitespace(corrector) - - if block_node.block_type? - # Avoid correcting to `lambdado` by inserting whitespace - # if none exists before or after the lambda arguments. - insert_separating_space(corrector) - - remove_arguments(corrector) - end - - replace_selector(corrector) - - replace_delimiters(corrector) - - insert_arguments(corrector) - end - - private - - attr_reader :block_node, :method, :arguments - - def remove_unparenthesized_whitespace(corrector) - return if arguments.empty? || arguments.parenthesized_call? - - remove_leading_whitespace(corrector) - remove_trailing_whitespace(corrector) - end - - def insert_separating_space(corrector) - return unless needs_separating_space? - - corrector.insert_before(block_begin, ' ') - end - - def replace_selector(corrector) - corrector.replace(method, 'lambda') - end - - def remove_arguments(corrector) - return if arguments.empty_and_without_delimiters? - - corrector.remove(arguments) - end - - def insert_arguments(corrector) - return if arguments.empty? - - arg_str = " |#{lambda_arg_string}|" - corrector.insert_after(block_node.loc.begin, arg_str) - end - - def remove_leading_whitespace(corrector) - corrector.remove_preceding( - arguments, - arguments.source_range.begin_pos - - block_node.send_node.source_range.end_pos - ) - end - - def remove_trailing_whitespace(corrector) - size = block_begin.begin_pos - arguments.source_range.end_pos - 1 - corrector.remove_preceding(block_begin, size) if size.positive? - end - - def replace_delimiters(corrector) - return if block_node.braces? || !arg_to_unparenthesized_call? - - corrector.insert_after(block_begin, ' ') unless separating_space? - - corrector.replace(block_begin, '{') - corrector.replace(block_end, '}') - end - - def lambda_arg_string - arguments.children.map(&:source).join(', ') - end - - def needs_separating_space? - (block_begin.begin_pos == arguments_end_pos && - selector_end.end_pos == arguments_begin_pos) || - block_begin.begin_pos == selector_end.end_pos - end - - def arguments_end_pos - arguments.loc.end&.end_pos - end - - def arguments_begin_pos - arguments.loc.begin&.begin_pos - end - - def block_end - block_node.loc.end - end - - def block_begin - block_node.loc.begin - end - - def selector_end - method.loc.selector.end - end - - def arg_to_unparenthesized_call? - current_node = block_node - - parent = current_node.parent - - if parent&.pair_type? - current_node = parent.parent - parent = current_node.parent - end - - return false unless parent&.send_type? - return false if parent.parenthesized_call? - - current_node.sibling_index > 1 - end - - def separating_space? - block_begin.source_buffer.source[block_begin.begin_pos + 2].match?(/\s/) - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/correctors/line_break_corrector.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/correctors/line_break_corrector.rb deleted file mode 100644 index b5a14c7e..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/correctors/line_break_corrector.rb +++ /dev/null @@ -1,64 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - # This class handles autocorrection for code that needs to be moved - # to new lines. - class LineBreakCorrector - extend Alignment - extend TrailingBody - extend Util - - class << self - attr_reader :processed_source - - def correct_trailing_body(configured_width:, corrector:, node:, - processed_source:) - @processed_source = processed_source - range = first_part_of(node.to_a.last) - eol_comment = processed_source.comment_at_line(node.source_range.line) - - break_line_before(range: range, node: node, corrector: corrector, - configured_width: configured_width) - move_comment(eol_comment: eol_comment, node: node, corrector: corrector) - remove_semicolon(node, corrector) - end - - def break_line_before(range:, node:, corrector:, configured_width:, - indent_steps: 1) - corrector.insert_before( - range, - "\n#{' ' * (node.loc.keyword.column + (indent_steps * configured_width))}" - ) - end - - def move_comment(eol_comment:, node:, corrector:) - return unless eol_comment - - text = eol_comment.source - corrector.insert_before(node, "#{text}\n#{' ' * node.loc.keyword.column}") - corrector.remove(eol_comment) - end - - private - - def remove_semicolon(node, corrector) - return unless semicolon(node) - - corrector.remove(semicolon(node).pos) - end - - def semicolon(node) - @semicolon ||= {}.compare_by_identity - @semicolon[node] ||= processed_source.sorted_tokens.select(&:semicolon?).find do |token| - same_line?(token, node.body) && trailing_class_definition?(token, node.body) - end - end - - def trailing_class_definition?(token, body) - token.column < body.loc.column - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb deleted file mode 100644 index 97f841eb..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/correctors/multiline_literal_brace_corrector.rb +++ /dev/null @@ -1,113 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - # Autocorrection logic for the closing brace of a literal either - # on the same line as the last contained elements, or a new line. - class MultilineLiteralBraceCorrector - include MultilineLiteralBraceLayout - include RangeHelp - - def self.correct(corrector, node, processed_source) - new(corrector, node, processed_source).call - end - - def initialize(corrector, node, processed_source) - @corrector = corrector - @node = node - @processed_source = processed_source - end - - def call - if closing_brace_on_same_line?(node) - correct_same_line_brace(corrector) - else - # When a comment immediately before the closing brace gets in the - # way of an easy correction, the offense is reported but not auto- - # corrected. The user must handle the delicate decision of where to - # put the comment. - return if new_line_needed_before_closing_brace?(node) - - end_range = last_element_range_with_trailing_comma(node).end - - correct_next_line_brace(corrector, end_range) - correct_heredoc_argument_method_chain(corrector, end_range) - end - end - - private - - attr_reader :corrector, :node, :processed_source - - def correct_same_line_brace(corrector) - corrector.insert_before(node.loc.end, "\n") - end - - def correct_next_line_brace(corrector, end_range) - corrector.remove(range_with_surrounding_space(node.loc.end, side: :left)) - corrector.insert_before(end_range, content_if_comment_present(corrector, node)) - end - - def correct_heredoc_argument_method_chain(corrector, end_range) - return unless (parent = node.parent) - return unless use_heredoc_argument_method_chain?(parent) - - chained_method = range_between(parent.loc.dot.begin_pos, parent.source_range.end_pos) - - corrector.remove(chained_method) - corrector.insert_after(end_range, chained_method.source) - end - - def content_if_comment_present(corrector, node) - range = range_with_surrounding_space( - children(node).last.source_range, - side: :right - ).end.resize(1) - if range.source == '#' - select_content_to_be_inserted_after_last_element(corrector, node) - else - node.loc.end.source - end - end - - def use_heredoc_argument_method_chain?(parent) - return false unless node.respond_to?(:first_argument) - return false unless (first_argument = node.first_argument) - - parent.call_type? && first_argument.str_type? && first_argument.heredoc? - end - - def select_content_to_be_inserted_after_last_element(corrector, node) - range = range_between( - node.loc.end.begin_pos, - range_by_whole_lines(node.source_range).end.end_pos - ) - - remove_trailing_content_of_comment(corrector, range) - range.source - end - - def remove_trailing_content_of_comment(corrector, range) - corrector.remove(range) - end - - def last_element_range_with_trailing_comma(node) - trailing_comma_range = last_element_trailing_comma_range(node) - if trailing_comma_range - children(node).last.source_range.join(trailing_comma_range) - else - children(node).last.source_range - end - end - - def last_element_trailing_comma_range(node) - range = range_with_surrounding_space( - children(node).last.source_range, - side: :right - ).end.resize(1) - - range.source == ',' ? range : nil - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/correctors/ordered_gem_corrector.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/correctors/ordered_gem_corrector.rb deleted file mode 100644 index 35dde1d2..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/correctors/ordered_gem_corrector.rb +++ /dev/null @@ -1,38 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - # This autocorrects gem dependency order - class OrderedGemCorrector - class << self - include OrderedGemNode - include RangeHelp - - attr_reader :processed_source, :comments_as_separators - - def correct(processed_source, node, - previous_declaration, comments_as_separators) - @processed_source = processed_source - @comments_as_separators = comments_as_separators - - current_range = declaration_with_comment(node) - previous_range = declaration_with_comment(previous_declaration) - - ->(corrector) { corrector.swap(current_range, previous_range) } - end - - private - - def declaration_with_comment(node) - buffer = processed_source.buffer - begin_pos = range_by_whole_lines(get_source_range(node, comments_as_separators)).begin_pos - end_line = buffer.line_for_position(node.source_range.end_pos) - end_pos = range_by_whole_lines(buffer.line_range(end_line), - include_final_newline: true).end_pos - - range_between(begin_pos, end_pos) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/correctors/parentheses_corrector.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/correctors/parentheses_corrector.rb deleted file mode 100644 index 9533fe49..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/correctors/parentheses_corrector.rb +++ /dev/null @@ -1,86 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - # This autocorrects parentheses - class ParenthesesCorrector - class << self - include RangeHelp - - COMMA_REGEXP = /(?<=\))\s*,/.freeze - - def correct(corrector, node) - corrector.remove(node.loc.begin) - corrector.remove(node.loc.end) - handle_orphaned_comma(corrector, node) - - return unless ternary_condition?(node) && next_char_is_question_mark?(node) - - corrector.insert_after(node.loc.end, ' ') - end - - private - - def ternary_condition?(node) - node.parent&.if_type? && node.parent&.ternary? - end - - def next_char_is_question_mark?(node) - node.loc.last_column == node.parent.loc.question.column - end - - def only_closing_paren_before_comma?(node) - source_buffer = node.source_range.source_buffer - line_range = source_buffer.line_range(node.loc.end.line) - - line_range.source.start_with?(/\s*\)\s*,/) - end - - # If removing parentheses leaves a comma on its own line, remove all the whitespace - # preceding it to prevent a syntax error. - def handle_orphaned_comma(corrector, node) - return unless only_closing_paren_before_comma?(node) - - range = extend_range_for_heredoc(node, parens_range(node)) - corrector.remove(range) - - add_heredoc_comma(corrector, node) - end - - # Get a range for the closing parenthesis and all whitespace to the left of it - def parens_range(node) - range_with_surrounding_space( - range: node.loc.end, - buffer: node.source_range.source_buffer, - side: :left, - newlines: true, - whitespace: true, - continuations: true - ) - end - - # If the node contains a heredoc, remove the comma too - # It'll be added back in the right place later - def extend_range_for_heredoc(node, range) - return range unless heredoc?(node) - - comma_line = range_by_whole_lines(node.loc.end, buffer: node.source_range.source_buffer) - offset = comma_line.source.match(COMMA_REGEXP)[0]&.size || 0 - - range.adjust(end_pos: offset) - end - - # Add a comma back after the heredoc identifier - def add_heredoc_comma(corrector, node) - return unless heredoc?(node) - - corrector.insert_after(node.child_nodes.last, ',') - end - - def heredoc?(node) - node.child_nodes.last.loc.is_a?(Parser::Source::Map::Heredoc) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/correctors/percent_literal_corrector.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/correctors/percent_literal_corrector.rb deleted file mode 100644 index b6bb00b1..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/correctors/percent_literal_corrector.rb +++ /dev/null @@ -1,106 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - # This autocorrects percent literals - class PercentLiteralCorrector - include Util - - attr_reader :config, :preferred_delimiters - - def initialize(config, preferred_delimiters) - @config = config - @preferred_delimiters = preferred_delimiters - end - - def correct(corrector, node, char) - escape = escape_words?(node) - char = char.upcase if escape - delimiters = delimiters_for("%#{char}") - contents = new_contents(node, escape, delimiters) - wrap_contents(corrector, node, contents, char, delimiters) - end - - private - - def wrap_contents(corrector, node, contents, char, delimiters) - corrector.replace(node, "%#{char}#{delimiters[0]}#{contents}#{delimiters[1]}") - end - - def escape_words?(node) - node.children.any? { |w| needs_escaping?(w.children[0]) } - end - - def delimiters_for(type) - PreferredDelimiters.new(type, config, preferred_delimiters).delimiters - end - - def new_contents(node, escape, delimiters) - if node.multiline? - autocorrect_multiline_words(node, escape, delimiters) - else - autocorrect_words(node, escape, delimiters) - end - end - - def autocorrect_multiline_words(node, escape, delimiters) - contents = process_multiline_words(node, escape, delimiters) - contents << end_content(node.source) - contents.join - end - - def autocorrect_words(node, escape, delimiters) - node.children.map do |word_node| - fix_escaped_content(word_node, escape, delimiters) - end.join(' ') - end - - def process_multiline_words(node, escape, delimiters) - base_line_num = node.first_line - prev_line_num = base_line_num - node.children.map.with_index do |word_node, index| - line_breaks = line_breaks(word_node, node.source, prev_line_num, base_line_num, index) - prev_line_num = word_node.last_line - content = fix_escaped_content(word_node, escape, delimiters) - line_breaks + content - end - end - - def line_breaks(node, source, previous_line_num, base_line_num, node_index) - source_in_lines = source.split("\n") - if first_line?(node, previous_line_num) - node_index.zero? && node.first_line == base_line_num ? '' : ' ' - else - process_lines(node, previous_line_num, base_line_num, source_in_lines) - end - end - - def first_line?(node, previous_line_num) - node.first_line == previous_line_num - end - - def process_lines(node, previous_line_num, base_line_num, source_in_lines) - begin_line_num = previous_line_num - base_line_num + 1 - end_line_num = node.first_line - base_line_num + 1 - lines = source_in_lines[begin_line_num...end_line_num] - "\n#{lines.join("\n").split(node.source).first || ''}" - end - - def fix_escaped_content(word_node, escape, delimiters) - content = +word_node.children.first.to_s - content = escape_string(content) if escape - substitute_escaped_delimiters(content, delimiters) - content - end - - def substitute_escaped_delimiters(content, delimiters) - delimiters.each { |delim| content.gsub!(delim, "\\#{delim}") } - end - - def end_content(source) - result = /\A(\s*)\]/.match(source.split("\n").last) - "\n#{result[1]}" if result - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/correctors/punctuation_corrector.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/correctors/punctuation_corrector.rb deleted file mode 100644 index 0806d26b..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/correctors/punctuation_corrector.rb +++ /dev/null @@ -1,27 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - # This autocorrects punctuation - class PunctuationCorrector - class << self - def remove_space(corrector, space_before) - corrector.remove(space_before) - end - - def add_space(corrector, token) - corrector.replace(token.pos, "#{token.pos.source} ") - end - - def swap_comma(corrector, range) - return unless range - - case range.source - when ',' then corrector.remove(range) - else corrector.insert_after(range, ',') - end - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/correctors/require_library_corrector.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/correctors/require_library_corrector.rb deleted file mode 100644 index 8a8b7a83..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/correctors/require_library_corrector.rb +++ /dev/null @@ -1,23 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - # This class ensures a require statement is present for a standard library - # determined by the variable library_name - class RequireLibraryCorrector - extend RangeHelp - - class << self - def correct(corrector, node, library_name) - node = node.parent while node.parent? - node = node.children.first if node.begin_type? - corrector.insert_before(node, require_statement(library_name)) - end - - def require_statement(library_name) - "require '#{library_name}'\n" - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/correctors/space_corrector.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/correctors/space_corrector.rb deleted file mode 100644 index 81a612ce..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/correctors/space_corrector.rb +++ /dev/null @@ -1,46 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - # This autocorrects whitespace - class SpaceCorrector - extend SurroundingSpace - - class << self - attr_reader :processed_source - - def empty_corrections(processed_source, corrector, empty_config, - left_token, right_token) - @processed_source = processed_source - range = range_between(left_token.end_pos, right_token.begin_pos) - if offending_empty_space?(empty_config, left_token, right_token) - corrector.remove(range) - corrector.insert_after(left_token.pos, ' ') - elsif offending_empty_no_space?(empty_config, left_token, right_token) - corrector.remove(range) - end - end - - def remove_space(processed_source, corrector, left_token, right_token) - @processed_source = processed_source - if left_token.space_after? - range = side_space_range(range: left_token.pos, side: :right) - corrector.remove(range) - end - return unless right_token.space_before? - - range = side_space_range(range: right_token.pos, side: :left) - corrector.remove(range) - end - - def add_space(processed_source, corrector, left_token, right_token) - @processed_source = processed_source - corrector.insert_after(left_token.pos, ' ') unless left_token.space_after? - return if right_token.space_before? - - corrector.insert_before(right_token.pos, ' ') - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/correctors/string_literal_corrector.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/correctors/string_literal_corrector.rb deleted file mode 100644 index c310dc5d..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/correctors/string_literal_corrector.rb +++ /dev/null @@ -1,23 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - # This autocorrects string literals - class StringLiteralCorrector - extend Util - - class << self - def correct(corrector, node, style) - return if node.dstr_type? - - str = node.str_content - if style == :single_quotes - corrector.replace(node, to_string_literal(str)) - else - corrector.replace(node, str.inspect) - end - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/correctors/unused_arg_corrector.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/correctors/unused_arg_corrector.rb deleted file mode 100644 index dc341744..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/correctors/unused_arg_corrector.rb +++ /dev/null @@ -1,40 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - # This autocorrects unused arguments. - class UnusedArgCorrector - extend RangeHelp - - class << self - attr_reader :processed_source - - def correct(corrector, processed_source, node) - return if %i[kwarg kwoptarg].include?(node.type) - - @processed_source = processed_source - - if node.blockarg_type? - correct_for_blockarg_type(corrector, node) - else - variable_name = if node.optarg_type? - node.node_parts[0] - else - # Extract only a var name without splat (`*`) - node.source.gsub(/\A\*+/, '') - end - - corrector.replace(node.loc.name, "_#{variable_name}") - end - end - - def correct_for_blockarg_type(corrector, node) - range = range_with_surrounding_space(node.source_range, side: :left) - range = range_with_surrounding_comma(range, :left) - - corrector.remove(range) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/documentation.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/documentation.rb deleted file mode 100644 index 711b489f..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/documentation.rb +++ /dev/null @@ -1,39 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - # Helpers for builtin documentation - module Documentation - module_function - - # @api private - def department_to_basename(department) - "cops_#{department.to_s.downcase.tr('/', '_')}" - end - - # @api private - def url_for(cop_class, config = nil) - base = department_to_basename(cop_class.department) - fragment = cop_class.cop_name.downcase.gsub(/[^a-z]/, '') - base_url = base_url_for(cop_class, config) - - "#{base_url}/#{base}.html##{fragment}" - end - - # @api private - def base_url_for(cop_class, config) - return default_base_url unless config - - department_name = cop_class.department.to_s - - config.for_department(department_name)['DocumentationBaseURL'] || - config.for_all_cops['DocumentationBaseURL'] - end - - # @api private - def default_base_url - 'https://docs.rubocop.org/rubocop' - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/exclude_limit.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/exclude_limit.rb deleted file mode 100644 index 913019ea..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/exclude_limit.rb +++ /dev/null @@ -1,26 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - # Allows specified configuration options to have an exclude limit - # ie. a maximum value tracked that it can be used by `--auto-gen-config`. - module ExcludeLimit - # Sets up a configuration option to have an exclude limit tracked. - # The parameter name given is transformed into a method name (eg. `Max` - # becomes `self.max=` and `MinDigits` becomes `self.min_digits=`). - def exclude_limit(parameter_name, method_name: transform(parameter_name)) - define_method(:"#{method_name}=") do |value| - cfg = config_to_allow_offenses - cfg[:exclude_limit] ||= {} - current_max = cfg[:exclude_limit][parameter_name] - value = [current_max, value].max if current_max - cfg[:exclude_limit][parameter_name] = value - end - end - - private - - def transform(parameter_name) - parameter_name.gsub(/(?= 2.3.3.1', '< 3.0' - # end - # - # # good - # Gem::Specification.new do |spec| - # spec.add_development_dependency 'parser', '>= 2.3.3.1', '< 3.0' - # end - # - # @example EnforcedStyle: forbidden - # - # # bad - # Gem::Specification.new do |spec| - # spec.add_dependency 'parser', '>= 2.3.3.1', '< 3.0' - # end - # - # # bad - # Gem::Specification.new do |spec| - # spec.add_development_dependency 'parser', '>= 2.3.3.1', '< 3.0' - # end - # - # # good - # Gem::Specification.new do |spec| - # spec.add_dependency 'parser' - # end - # - # # good - # Gem::Specification.new do |spec| - # spec.add_development_dependency 'parser' - # end - # - class DependencyVersion < Base - include ConfigurableEnforcedStyle - include GemspecHelp - - REQUIRED_MSG = 'Dependency version specification is required.' - FORBIDDEN_MSG = 'Dependency version specification is forbidden.' - VERSION_SPECIFICATION_REGEX = /^\s*[~<>=]*\s*[0-9.]+/.freeze - - ADD_DEPENDENCY_METHODS = %i[ - add_dependency add_runtime_dependency add_development_dependency - ].freeze - RESTRICT_ON_SEND = ADD_DEPENDENCY_METHODS - - # @!method add_dependency_method_declaration?(node) - def_node_matcher :add_dependency_method_declaration?, <<~PATTERN - (send - (lvar #match_block_variable_name?) #add_dependency_method? ...) - PATTERN - - # @!method includes_version_specification?(node) - def_node_matcher :includes_version_specification?, <<~PATTERN - (send _ #add_dependency_method? <(str #version_specification?) ...>) - PATTERN - - # @!method includes_commit_reference?(node) - def_node_matcher :includes_commit_reference?, <<~PATTERN - (send _ #add_dependency_method? <(hash <(pair (sym {:branch :ref :tag}) (str _)) ...>) ...>) - PATTERN - - def on_send(node) - return unless add_dependency_method_declaration?(node) - return if allowed_gem?(node) - - if offense?(node) - add_offense(node) - opposite_style_detected - else - correct_style_detected - end - end - - private - - def allowed_gem?(node) - allowed_gems.include?(node.first_argument.str_content) - end - - def allowed_gems - Array(cop_config['AllowedGems']) - end - - def message(range) - gem_specification = range.source - - if required_style? - format(REQUIRED_MSG, gem_specification: gem_specification) - elsif forbidden_style? - format(FORBIDDEN_MSG, gem_specification: gem_specification) - end - end - - def match_block_variable_name?(receiver_name) - gem_specification(processed_source.ast) do |block_variable_name| - return block_variable_name == receiver_name - end - end - - def add_dependency_method?(method_name) - ADD_DEPENDENCY_METHODS.include?(method_name) - end - - def offense?(node) - required_offense?(node) || forbidden_offense?(node) - end - - def required_offense?(node) - return false unless required_style? - - !includes_version_specification?(node) && !includes_commit_reference?(node) - end - - def forbidden_offense?(node) - return false unless forbidden_style? - - includes_version_specification?(node) || includes_commit_reference?(node) - end - - def forbidden_style? - style == :forbidden - end - - def required_style? - style == :required - end - - def version_specification?(expression) - expression.match?(VERSION_SPECIFICATION_REGEX) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/gemspec/deprecated_attribute_assignment.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/gemspec/deprecated_attribute_assignment.rb deleted file mode 100644 index 7ab262e8..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/gemspec/deprecated_attribute_assignment.rb +++ /dev/null @@ -1,92 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - module Gemspec - # Checks that deprecated attributes are not set in a gemspec file. - # Removing deprecated attributes allows the user to receive smaller packed gems. - # - # @example - # - # # bad - # Gem::Specification.new do |spec| - # spec.name = 'your_cool_gem_name' - # spec.test_files = Dir.glob('test/**/*') - # end - # - # # bad - # Gem::Specification.new do |spec| - # spec.name = 'your_cool_gem_name' - # spec.test_files += Dir.glob('test/**/*') - # end - # - # # good - # Gem::Specification.new do |spec| - # spec.name = 'your_cool_gem_name' - # end - # - class DeprecatedAttributeAssignment < Base - include RangeHelp - extend AutoCorrector - - MSG = 'Do not set `%s` in gemspec.' - - # @!method gem_specification(node) - def_node_matcher :gem_specification, <<~PATTERN - (block - (send - (const - (const {cbase nil?} :Gem) :Specification) :new) - ...) - PATTERN - - def on_block(block_node) - return unless gem_specification(block_node) - - block_parameter = block_node.first_argument.source - - assignment = block_node.descendants.detect do |node| - use_deprecated_attributes?(node, block_parameter) - end - return unless assignment - - message = format_message_from - add_offense(assignment, message: message) do |corrector| - range = range_by_whole_lines(assignment.source_range, include_final_newline: true) - - corrector.remove(range) - end - end - - private - - def node_and_method_name(node, attribute) - if node.op_asgn_type? - lhs, _op, _rhs = *node - [lhs, attribute] - else - [node, :"#{attribute}="] - end - end - - def use_deprecated_attributes?(node, block_parameter) - %i[test_files date specification_version rubygems_version].each do |attribute| - node, method_name = node_and_method_name(node, attribute) - unless node.send_type? && node.receiver&.source == block_parameter && - node.method?(method_name) - next - end - - @attribute = attribute.to_s - return true - end - false - end - - def format_message_from - format(MSG, attribute: @attribute) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/gemspec/development_dependencies.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/gemspec/development_dependencies.rb deleted file mode 100644 index a6aaf85b..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/gemspec/development_dependencies.rb +++ /dev/null @@ -1,107 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - module Gemspec - # Enforce that development dependencies for a gem are specified in - # `Gemfile`, rather than in the `gemspec` using - # `add_development_dependency`. Alternatively, using `EnforcedStyle: - # gemspec`, enforce that all dependencies are specified in `gemspec`, - # rather than in `Gemfile`. - # - # @example EnforcedStyle: Gemfile (default) - # # Specify runtime dependencies in your gemspec, - # # but all other dependencies in your Gemfile. - # - # # bad - # # example.gemspec - # s.add_development_dependency "foo" - # - # # good - # # Gemfile - # gem "foo" - # - # # good - # # gems.rb - # gem "foo" - # - # # good (with AllowedGems: ["bar"]) - # # example.gemspec - # s.add_development_dependency "bar" - # - # @example EnforcedStyle: gems.rb - # # Specify runtime dependencies in your gemspec, - # # but all other dependencies in your Gemfile. - # # - # # Identical to `EnforcedStyle: Gemfile`, but with a different error message. - # # Rely on Bundler/GemFilename to enforce the use of `Gemfile` vs `gems.rb`. - # - # # bad - # # example.gemspec - # s.add_development_dependency "foo" - # - # # good - # # Gemfile - # gem "foo" - # - # # good - # # gems.rb - # gem "foo" - # - # # good (with AllowedGems: ["bar"]) - # # example.gemspec - # s.add_development_dependency "bar" - # - # @example EnforcedStyle: gemspec - # # Specify all dependencies in your gemspec. - # - # # bad - # # Gemfile - # gem "foo" - # - # # good - # # example.gemspec - # s.add_development_dependency "foo" - # - # # good (with AllowedGems: ["bar"]) - # # Gemfile - # gem "bar" - # - class DevelopmentDependencies < Base - include ConfigurableEnforcedStyle - - MSG = 'Specify development dependencies in %s.' - RESTRICT_ON_SEND = %i[add_development_dependency gem].freeze - - # @!method add_development_dependency?(node) - def_node_matcher :add_development_dependency?, <<~PATTERN - (send _ :add_development_dependency (str #forbidden_gem? ...) _? _?) - PATTERN - - # @!method gem?(node) - def_node_matcher :gem?, <<~PATTERN - (send _ :gem (str #forbidden_gem? ...)) - PATTERN - - def on_send(node) - case style - when :Gemfile, :'gems.rb' - add_offense(node) if add_development_dependency?(node) - when :gemspec - add_offense(node) if gem?(node) - end - end - - private - - def forbidden_gem?(gem_name) - !cop_config['AllowedGems'].include?(gem_name) - end - - def message(_range) - format(MSG, preferred: style) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/gemspec/duplicated_assignment.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/gemspec/duplicated_assignment.rb deleted file mode 100644 index a6118a13..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/gemspec/duplicated_assignment.rb +++ /dev/null @@ -1,89 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - module Gemspec - # An attribute assignment method calls should be listed only once - # in a gemspec. - # - # Assigning to an attribute with the same name using `spec.foo =` will be - # an unintended usage. On the other hand, duplication of methods such - # as `spec.requirements`, `spec.add_runtime_dependency`, and others are - # permitted because it is the intended use of appending values. - # - # @example - # # bad - # Gem::Specification.new do |spec| - # spec.name = 'rubocop' - # spec.name = 'rubocop2' - # end - # - # # good - # Gem::Specification.new do |spec| - # spec.name = 'rubocop' - # end - # - # # good - # Gem::Specification.new do |spec| - # spec.requirements << 'libmagick, v6.0' - # spec.requirements << 'A good graphics card' - # end - # - # # good - # Gem::Specification.new do |spec| - # spec.add_runtime_dependency('parallel', '~> 1.10') - # spec.add_runtime_dependency('parser', '>= 2.3.3.1', '< 3.0') - # end - class DuplicatedAssignment < Base - include RangeHelp - include GemspecHelp - - MSG = '`%s` method calls already given on line ' \ - '%d of the gemspec.' - - # @!method assignment_method_declarations(node) - def_node_search :assignment_method_declarations, <<~PATTERN - (send - (lvar #match_block_variable_name?) _ ...) - PATTERN - - def on_new_investigation - return if processed_source.blank? - - duplicated_assignment_method_nodes.each do |nodes| - nodes[1..].each do |node| - register_offense(node, node.method_name, nodes.first.first_line) - end - end - end - - private - - def match_block_variable_name?(receiver_name) - gem_specification(processed_source.ast) do |block_variable_name| - return block_variable_name == receiver_name - end - end - - def duplicated_assignment_method_nodes - assignment_method_declarations(processed_source.ast) - .select(&:assignment_method?) - .group_by(&:method_name) - .values - .select { |nodes| nodes.size > 1 } - end - - def register_offense(node, assignment, line_of_first_occurrence) - line_range = node.loc.column...node.loc.last_column - offense_location = source_range(processed_source.buffer, node.first_line, line_range) - message = format( - MSG, - assignment: assignment, - line_of_first_occurrence: line_of_first_occurrence - ) - add_offense(offense_location, message: message) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/gemspec/ordered_dependencies.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/gemspec/ordered_dependencies.rb deleted file mode 100644 index 0c9f43c9..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/gemspec/ordered_dependencies.rb +++ /dev/null @@ -1,101 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - module Gemspec - # Dependencies in the gemspec should be alphabetically sorted. - # - # @example - # # bad - # spec.add_dependency 'rubocop' - # spec.add_dependency 'rspec' - # - # # good - # spec.add_dependency 'rspec' - # spec.add_dependency 'rubocop' - # - # # good - # spec.add_dependency 'rubocop' - # - # spec.add_dependency 'rspec' - # - # # bad - # spec.add_development_dependency 'rubocop' - # spec.add_development_dependency 'rspec' - # - # # good - # spec.add_development_dependency 'rspec' - # spec.add_development_dependency 'rubocop' - # - # # good - # spec.add_development_dependency 'rubocop' - # - # spec.add_development_dependency 'rspec' - # - # # bad - # spec.add_runtime_dependency 'rubocop' - # spec.add_runtime_dependency 'rspec' - # - # # good - # spec.add_runtime_dependency 'rspec' - # spec.add_runtime_dependency 'rubocop' - # - # # good - # spec.add_runtime_dependency 'rubocop' - # - # spec.add_runtime_dependency 'rspec' - # - # @example TreatCommentsAsGroupSeparators: true (default) - # # good - # # For code quality - # spec.add_dependency 'rubocop' - # # For tests - # spec.add_dependency 'rspec' - # - # @example TreatCommentsAsGroupSeparators: false - # # bad - # # For code quality - # spec.add_dependency 'rubocop' - # # For tests - # spec.add_dependency 'rspec' - class OrderedDependencies < Base - extend AutoCorrector - include OrderedGemNode - - MSG = 'Dependencies should be sorted in an alphabetical order within ' \ - 'their section of the gemspec. ' \ - 'Dependency `%s` should appear before `%s`.' - - def on_new_investigation - return if processed_source.blank? - - dependency_declarations(processed_source.ast) - .each_cons(2) do |previous, current| - next unless consecutive_lines(previous, current) - next unless case_insensitive_out_of_order?(gem_name(current), gem_name(previous)) - next unless get_dependency_name(previous) == get_dependency_name(current) - - register_offense(previous, current) - end - end - - private - - def previous_declaration(node) - declarations = dependency_declarations(processed_source.ast) - node_index = declarations.find_index(node) - declarations.to_a[node_index - 1] - end - - def get_dependency_name(node) - node.method_name - end - - # @!method dependency_declarations(node) - def_node_search :dependency_declarations, <<~PATTERN - (send (lvar _) {:add_dependency :add_runtime_dependency :add_development_dependency} (str _) ...) - PATTERN - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/gemspec/require_mfa.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/gemspec/require_mfa.rb deleted file mode 100644 index b07fe7d2..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/gemspec/require_mfa.rb +++ /dev/null @@ -1,145 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - module Gemspec - # Requires a gemspec to have `rubygems_mfa_required` metadata set. - # - # This setting tells RubyGems that MFA (Multi-Factor Authentication) is - # required for accounts to be able perform privileged operations, such as - # (see RubyGems' documentation for the full list of privileged - # operations): - # - # * `gem push` - # * `gem yank` - # * `gem owner --add/remove` - # * adding or removing owners using gem ownership page - # - # This helps make your gem more secure, as users can be more - # confident that gem updates were pushed by maintainers. - # - # @example - # # bad - # Gem::Specification.new do |spec| - # # no `rubygems_mfa_required` metadata specified - # end - # - # # good - # Gem::Specification.new do |spec| - # spec.metadata = { - # 'rubygems_mfa_required' => 'true' - # } - # end - # - # # good - # Gem::Specification.new do |spec| - # spec.metadata['rubygems_mfa_required'] = 'true' - # end - # - # # bad - # Gem::Specification.new do |spec| - # spec.metadata = { - # 'rubygems_mfa_required' => 'false' - # } - # end - # - # # good - # Gem::Specification.new do |spec| - # spec.metadata = { - # 'rubygems_mfa_required' => 'true' - # } - # end - # - # # bad - # Gem::Specification.new do |spec| - # spec.metadata['rubygems_mfa_required'] = 'false' - # end - # - # # good - # Gem::Specification.new do |spec| - # spec.metadata['rubygems_mfa_required'] = 'true' - # end - # - class RequireMFA < Base - include GemspecHelp - extend AutoCorrector - - MSG = "`metadata['rubygems_mfa_required']` must be set to `'true'`." - - # @!method metadata(node) - def_node_matcher :metadata, <<~PATTERN - `{ - (send _ :metadata= $_) - (send (send _ :metadata) :[]= (str "rubygems_mfa_required") $_) - } - PATTERN - - # @!method rubygems_mfa_required(node) - def_node_search :rubygems_mfa_required, <<~PATTERN - (pair (str "rubygems_mfa_required") $_) - PATTERN - - # @!method true_string?(node) - def_node_matcher :true_string?, <<~PATTERN - (str "true") - PATTERN - - def on_block(node) # rubocop:disable Metrics/MethodLength, InternalAffairs/NumblockHandler - gem_specification(node) do |block_var| - metadata_value = metadata(node) - mfa_value = mfa_value(metadata_value) - - if mfa_value - unless true_string?(mfa_value) - add_offense(mfa_value) do |corrector| - change_value(corrector, mfa_value) - end - end - else - add_offense(node) do |corrector| - autocorrect(corrector, node, block_var, metadata_value) - end - end - end - end - - private - - def mfa_value(metadata_value) - return unless metadata_value - return metadata_value if metadata_value.str_type? - - rubygems_mfa_required(metadata_value).first - end - - def autocorrect(corrector, node, block_var, metadata) - if metadata - return unless metadata.hash_type? - - correct_metadata(corrector, metadata) - else - insert_mfa_required(corrector, node, block_var) - end - end - - def correct_metadata(corrector, metadata) - if metadata.pairs.any? - corrector.insert_after(metadata.pairs.last, ",\n'rubygems_mfa_required' => 'true'") - else - corrector.insert_before(metadata.loc.end, "'rubygems_mfa_required' => 'true'") - end - end - - def insert_mfa_required(corrector, node, block_var) - corrector.insert_before(node.loc.end, <<~RUBY) - #{block_var}.metadata['rubygems_mfa_required'] = 'true' - RUBY - end - - def change_value(corrector, value) - corrector.replace(value, "'true'") - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/gemspec/required_ruby_version.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/gemspec/required_ruby_version.rb deleted file mode 100644 index 2af88e77..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/gemspec/required_ruby_version.rb +++ /dev/null @@ -1,129 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - module Gemspec - # Checks that `required_ruby_version` in a gemspec file is set to a valid - # value (non-blank) and matches `TargetRubyVersion` as set in RuboCop's - # configuration for the gem. - # - # This ensures that RuboCop is using the same Ruby version as the gem. - # - # @example - # # When `TargetRubyVersion` of .rubocop.yml is `2.5`. - # - # # bad - # Gem::Specification.new do |spec| - # # no `required_ruby_version` specified - # end - # - # # bad - # Gem::Specification.new do |spec| - # spec.required_ruby_version = '>= 2.4.0' - # end - # - # # bad - # Gem::Specification.new do |spec| - # spec.required_ruby_version = '>= 2.6.0' - # end - # - # # bad - # Gem::Specification.new do |spec| - # spec.required_ruby_version = '' - # end - # - # # good - # Gem::Specification.new do |spec| - # spec.required_ruby_version = '>= 2.5.0' - # end - # - # # good - # Gem::Specification.new do |spec| - # spec.required_ruby_version = '>= 2.5' - # end - # - # # accepted but not recommended - # Gem::Specification.new do |spec| - # spec.required_ruby_version = ['>= 2.5.0', '< 2.7.0'] - # end - # - # # accepted but not recommended, since - # # Ruby does not really follow semantic versioning - # Gem::Specification.new do |spec| - # spec.required_ruby_version = '~> 2.5' - # end - class RequiredRubyVersion < Base - include RangeHelp - - RESTRICT_ON_SEND = %i[required_ruby_version=].freeze - NOT_EQUAL_MSG = '`required_ruby_version` and `TargetRubyVersion` ' \ - '(%s, which may be specified in ' \ - '.rubocop.yml) should be equal.' - MISSING_MSG = '`required_ruby_version` should be specified.' - - # @!method required_ruby_version?(node) - def_node_search :required_ruby_version?, <<~PATTERN - (send _ :required_ruby_version= _) - PATTERN - - # @!method defined_ruby_version(node) - def_node_matcher :defined_ruby_version, <<~PATTERN - { - $(str _) - $(array (str _) (str _)) - (send (const (const nil? :Gem) :Requirement) :new $str+) - } - PATTERN - - def on_new_investigation - add_global_offense(MISSING_MSG) unless required_ruby_version?(processed_source.ast) - end - - def on_send(node) - version_def = node.first_argument - return if dynamic_version?(version_def) - - ruby_version = extract_ruby_version(defined_ruby_version(version_def)) - return if ruby_version == target_ruby_version.to_s - - add_offense(version_def, message: not_equal_message(ruby_version, target_ruby_version)) - end - - private - - def dynamic_version?(node) - (node.send_type? && !node.receiver) || - node.variable? || - node.each_descendant(:send, *RuboCop::AST::Node::VARIABLES).any? - end - - def extract_ruby_version(required_ruby_version) - return unless required_ruby_version - - if required_ruby_version.is_a?(Array) - required_ruby_version = required_ruby_version.detect do |v| - /[>=]/.match?(v.str_content) - end - elsif required_ruby_version.array_type? - required_ruby_version = required_ruby_version.children.detect do |v| - /[>=]/.match?(v.str_content) - end - end - - return unless required_ruby_version - - required_ruby_version.str_content.scan(/\d/).first(2).join('.') - end - - def not_equal_message(required_ruby_version, target_ruby_version) - format( - NOT_EQUAL_MSG, - required_ruby_version: required_ruby_version, - gemspec_filename: File.basename(processed_source.file_path), - target_ruby_version: target_ruby_version - ) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb deleted file mode 100644 index 546cf913..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/gemspec/ruby_version_globals_usage.rb +++ /dev/null @@ -1,50 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - module Gemspec - # Checks that `RUBY_VERSION` constant is not used in gemspec. - # Using `RUBY_VERSION` is dangerous because value of the - # constant is determined by `rake release`. - # It's possible to have dependency based on ruby version used - # to execute `rake release` and not user's ruby version. - # - # @example - # - # # bad - # Gem::Specification.new do |spec| - # if RUBY_VERSION >= '3.0' - # spec.add_runtime_dependency 'gem_a' - # else - # spec.add_runtime_dependency 'gem_b' - # end - # end - # - # # good - # Gem::Specification.new do |spec| - # spec.add_runtime_dependency 'gem_a' - # end - # - class RubyVersionGlobalsUsage < Base - include GemspecHelp - - MSG = 'Do not use `RUBY_VERSION` in gemspec file.' - - # @!method ruby_version?(node) - def_node_matcher :ruby_version?, '(const {cbase nil?} :RUBY_VERSION)' - - def on_const(node) - return unless gem_spec_with_ruby_version?(node) - - add_offense(node) - end - - private - - def gem_spec_with_ruby_version?(node) - gem_specification(processed_source.ast) && ruby_version?(node) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/generator.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/generator.rb deleted file mode 100644 index 51116bf1..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/generator.rb +++ /dev/null @@ -1,217 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - # Source and spec generator for new cops - # - # This generator will take a cop name and generate a source file - # and spec file when given a valid qualified cop name. - # @api private - class Generator - SOURCE_TEMPLATE = <<~RUBY - # frozen_string_literal: true - - module RuboCop - module Cop - module %s - # TODO: Write cop description and example of bad / good code. For every - # `SupportedStyle` and unique configuration, there needs to be examples. - # Examples must have valid Ruby syntax. Do not use upticks. - # - # @safety - # Delete this section if the cop is not unsafe (`Safe: false` or - # `SafeAutoCorrect: false`), or use it to explain how the cop is - # unsafe. - # - # @example EnforcedStyle: bar (default) - # # Description of the `bar` style. - # - # # bad - # bad_bar_method - # - # # bad - # bad_bar_method(args) - # - # # good - # good_bar_method - # - # # good - # good_bar_method(args) - # - # @example EnforcedStyle: foo - # # Description of the `foo` style. - # - # # bad - # bad_foo_method - # - # # bad - # bad_foo_method(args) - # - # # good - # good_foo_method - # - # # good - # good_foo_method(args) - # - class %s < Base - # TODO: Implement the cop in here. - # - # In many cases, you can use a node matcher for matching node pattern. - # See https://github.com/rubocop/rubocop-ast/blob/master/lib/rubocop/ast/node_pattern.rb - # - # For example - MSG = 'Use `#good_method` instead of `#bad_method`.' - - # TODO: Don't call `on_send` unless the method name is in this list - # If you don't need `on_send` in the cop you created, remove it. - RESTRICT_ON_SEND = %%i[bad_method].freeze - - # @!method bad_method?(node) - def_node_matcher :bad_method?, <<~PATTERN - (send nil? :bad_method ...) - PATTERN - - def on_send(node) - return unless bad_method?(node) - - add_offense(node) - end - end - end - end - end - RUBY - - SPEC_TEMPLATE = <<~SPEC - # frozen_string_literal: true - - RSpec.describe RuboCop::Cop::%s::%s, :config do - let(:config) { RuboCop::Config.new } - - # TODO: Write test code - # - # For example - it 'registers an offense when using `#bad_method`' do - expect_offense(<<~RUBY) - bad_method - ^^^^^^^^^^ Use `#good_method` instead of `#bad_method`. - RUBY - end - - it 'does not register an offense when using `#good_method`' do - expect_no_offenses(<<~RUBY) - good_method - RUBY - end - end - SPEC - - CONFIGURATION_ADDED_MESSAGE = - '[modify] A configuration for the cop is added into ' \ - '%s.' - - def initialize(name, output: $stdout) - @badge = Badge.parse(name) - @output = output - return if badge.qualified? - - raise ArgumentError, 'Specify a cop name with Department/Name style' - end - - def write_source - write_unless_file_exists(source_path, generated_source) - end - - def write_spec - write_unless_file_exists(spec_path, generated_spec) - end - - def inject_require(root_file_path: 'lib/rubocop.rb') - RequireFileInjector.new(source_path: source_path, root_file_path: root_file_path).inject - end - - def inject_config(config_file_path: 'config/default.yml', - version_added: '<>') - injector = - ConfigurationInjector.new(configuration_file_path: config_file_path, - badge: badge, - version_added: version_added) - - injector.inject do # rubocop:disable Lint/UnexpectedBlockArity - output.puts(format(CONFIGURATION_ADDED_MESSAGE, - configuration_file_path: config_file_path)) - end - end - - def todo - <<~TODO - Do 4 steps: - 1. Modify the description of #{badge} in config/default.yml - 2. Implement your new cop in the generated file! - 3. Commit your new cop with a message such as - e.g. "Add new `#{badge}` cop" - 4. Run `bundle exec rake changelog:new` to generate a changelog entry - for your new cop. - TODO - end - - private - - attr_reader :badge, :output - - def write_unless_file_exists(path, contents) - if File.exist?(path) - warn "rake new_cop: #{path} already exists!" - exit! - end - - dir = File.dirname(path) - FileUtils.mkdir_p(dir) - - File.write(path, contents) - output.puts "[create] #{path}" - end - - def generated_source - generate(SOURCE_TEMPLATE) - end - - def generated_spec - generate(SPEC_TEMPLATE) - end - - def generate(template) - format(template, department: badge.department.to_s.gsub('/', '::'), - cop_name: badge.cop_name) - end - - def spec_path - File.join( - 'spec', - 'rubocop', - 'cop', - snake_case(badge.department.to_s), - "#{snake_case(badge.cop_name.to_s)}_spec.rb" - ) - end - - def source_path - File.join( - 'lib', - 'rubocop', - 'cop', - snake_case(badge.department.to_s), - "#{snake_case(badge.cop_name.to_s)}.rb" - ) - end - - def snake_case(camel_case_string) - camel_case_string - .gsub('RSpec', 'Rspec') - .gsub(%r{([^A-Z/])([A-Z]+)}, '\1_\2') - .gsub(%r{([A-Z])([A-Z][^A-Z\d/]+)}, '\1_\2') - .downcase - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/generator/configuration_injector.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/generator/configuration_injector.rb deleted file mode 100644 index 882fcb33..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/generator/configuration_injector.rb +++ /dev/null @@ -1,65 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - class Generator - # A class that injects a require directive into the root RuboCop file. - # It looks for other directives that require files in the same (cop) - # namespace and injects the provided one in alpha - class ConfigurationInjector - TEMPLATE = <<~YAML - %s: - Description: 'TODO: Write a description of the cop.' - Enabled: pending - VersionAdded: '%s' - YAML - - def initialize(configuration_file_path:, badge:, version_added: '<>') - @configuration_file_path = configuration_file_path - @badge = badge - @version_added = version_added - @output = output - end - - def inject - target_line = find_target_line - if target_line - configuration_entries.insert(target_line, "#{new_configuration_entry}\n") - else - configuration_entries.push("\n#{new_configuration_entry}") - end - - File.write(configuration_file_path, configuration_entries.join) - - yield if block_given? - end - - private - - attr_reader :configuration_file_path, :badge, :version_added, :output - - def configuration_entries - @configuration_entries ||= File.readlines(configuration_file_path) - end - - def new_configuration_entry - format(TEMPLATE, badge: badge, version_added: version_added) - end - - def find_target_line - configuration_entries.find.with_index do |line, index| - next unless cop_name_line?(line) - - return index if badge.to_s < line - end - - nil - end - - def cop_name_line?(yaml) - !/^[\s#]/.match?(yaml) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/generator/require_file_injector.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/generator/require_file_injector.rb deleted file mode 100644 index 2a097ef5..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/generator/require_file_injector.rb +++ /dev/null @@ -1,75 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - class Generator - # A class that injects a require directive into the root RuboCop file. - # It looks for other directives that require files in the same (cop) - # namespace and injects the provided one in alpha - class RequireFileInjector - REQUIRE_PATH = /require_relative ['"](.+)['"]/.freeze - - def initialize(source_path:, root_file_path:, output: $stdout) - @source_path = Pathname(source_path) - @root_file_path = Pathname(root_file_path) - @require_entries = File.readlines(root_file_path) - @output = output - end - - def inject - return if require_exists? || !target_line - - File.write(root_file_path, updated_directives) - require = injectable_require_directive.chomp - output.puts "[modify] #{root_file_path} - `#{require}` was injected." - end - - private - - attr_reader :require_entries, :root_file_path, :source_path, :output - - def require_exists? - require_entries.any?(injectable_require_directive) - end - - def updated_directives - require_entries.insert(target_line, injectable_require_directive).join - end - - def target_line - @target_line ||= begin - in_the_same_department = false - inject_parts = require_path_fragments(injectable_require_directive) - - require_entries.find.with_index do |entry, index| - current_entry_parts = require_path_fragments(entry) - - if inject_parts[0..-2] == current_entry_parts[0..-2] - in_the_same_department = true - - break index if inject_parts.last < current_entry_parts.last - elsif in_the_same_department - break index - end - end || require_entries.size - end - end - - def require_path_fragments(require_directive) - path = require_directive.match(REQUIRE_PATH) - - path ? path.captures.first.split('/') : [] - end - - def injectable_require_directive - "require_relative '#{require_path}'\n" - end - - def require_path - path = source_path.relative_path_from(root_file_path.dirname) - path.to_s.delete_suffix('.rb') - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/ignored_node.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/ignored_node.rb deleted file mode 100644 index 6be9265d..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/ignored_node.rb +++ /dev/null @@ -1,36 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - # Handles adding and checking ignored nodes. - module IgnoredNode - def ignore_node(node) - ignored_nodes << node - end - - def part_of_ignored_node?(node) - ignored_nodes.map(&:loc).any? do |ignored_loc| - next false if ignored_loc.expression.begin_pos > node.source_range.begin_pos - - ignored_end_pos = if ignored_loc.respond_to?(:heredoc_body) - ignored_loc.heredoc_end.end_pos - else - ignored_loc.expression.end_pos - end - ignored_end_pos >= node.source_range.end_pos - end - end - - def ignored_node?(node) - # Same object found in array? - ignored_nodes.any? { |n| n.equal?(node) } - end - - private - - def ignored_nodes - @ignored_nodes ||= [] - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs.rb deleted file mode 100644 index 6a2b399d..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs.rb +++ /dev/null @@ -1,33 +0,0 @@ -# frozen_string_literal: true - -require_relative 'internal_affairs/cop_description' -require_relative 'internal_affairs/create_empty_file' -require_relative 'internal_affairs/empty_line_between_expect_offense_and_correction' -require_relative 'internal_affairs/example_description' -require_relative 'internal_affairs/example_heredoc_delimiter' -require_relative 'internal_affairs/inherit_deprecated_cop_class' -require_relative 'internal_affairs/lambda_or_proc' -require_relative 'internal_affairs/location_expression' -require_relative 'internal_affairs/location_line_equality_comparison' -require_relative 'internal_affairs/method_name_end_with' -require_relative 'internal_affairs/method_name_equal' -require_relative 'internal_affairs/node_destructuring' -require_relative 'internal_affairs/node_first_or_last_argument' -require_relative 'internal_affairs/node_matcher_directive' -require_relative 'internal_affairs/node_type_predicate' -require_relative 'internal_affairs/numblock_handler' -require_relative 'internal_affairs/offense_location_keyword' -require_relative 'internal_affairs/processed_source_buffer_name' -require_relative 'internal_affairs/redundant_context_config_parameter' -require_relative 'internal_affairs/redundant_described_class_as_subject' -require_relative 'internal_affairs/redundant_expect_offense_arguments' -require_relative 'internal_affairs/redundant_let_rubocop_config_new' -require_relative 'internal_affairs/redundant_location_argument' -require_relative 'internal_affairs/redundant_message_argument' -require_relative 'internal_affairs/redundant_method_dispatch_node' -require_relative 'internal_affairs/redundant_source_range' -require_relative 'internal_affairs/single_line_comparison' -require_relative 'internal_affairs/style_detected_api_use' -require_relative 'internal_affairs/undefined_config' -require_relative 'internal_affairs/useless_message_assertion' -require_relative 'internal_affairs/useless_restrict_on_send' diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/cop_description.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/cop_description.rb deleted file mode 100644 index 769be81a..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/cop_description.rb +++ /dev/null @@ -1,122 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - module InternalAffairs - # Enforces the cop description to start with a word such as verb. - # - # @example - # # bad - # # This cop checks .... - # class SomeCop < Base - # .... - # end - # - # # bad - # # - # # Checks ... - # class SomeCop < Base - # ... - # end - # - # # good - # # Checks ... - # class SomeCop < Base - # ... - # end - # - class CopDescription < Base - extend AutoCorrector - - MSG_STARTS_WITH_WRONG_WORD = - 'Description should be started with %s instead of `This cop ...`.' - MSG_STARTS_WITH_EMPTY_COMMENT_LINE = - 'Description should not start with an empty comment line.' - - SPECIAL_WORDS = %w[is can could should will would must may].freeze - COP_DESC_OFFENSE_REGEX = - /^\s+# This cop (?#{SPECIAL_WORDS.join('|')})?\s*(?.+?) .*/.freeze - REPLACEMENT_REGEX = /^\s+# This cop (#{SPECIAL_WORDS.join('|')})?\s*(.+?) /.freeze - EMPTY_COMMENT_LINE_REGEX = /\A\s*#\s*\n\z/.freeze - - def on_class(node) - return unless (module_node = node.parent) && node.parent_class - - description_beginning = first_comment_line(module_node) - return unless description_beginning - - if description_beginning.match?(EMPTY_COMMENT_LINE_REGEX) - register_offense_for_empty_comment_line(module_node, description_beginning) - else - start_with_subject = description_beginning.match(COP_DESC_OFFENSE_REGEX) - return unless start_with_subject - - register_offense_for_wrong_word(module_node, description_beginning, start_with_subject) - end - end - - private - - def register_offense_for_empty_comment_line(module_node, description_beginning) - range = range(module_node, description_beginning) - add_offense(range, message: MSG_STARTS_WITH_EMPTY_COMMENT_LINE) do |corrector| - corrector.remove(range) - end - end - - def register_offense_for_wrong_word(module_node, description_beginning, start_with_subject) - suggestion = start_with_subject['word']&.capitalize - range = range(module_node, description_beginning) - suggestion_for_message = suggestion_for_message(suggestion, start_with_subject) - message = format(MSG_STARTS_WITH_WRONG_WORD, suggestion: suggestion_for_message) - - add_offense(range, message: message) do |corrector| - if suggestion && !start_with_subject['special'] - replace_with_suggestion(corrector, range, suggestion, description_beginning) - end - end - end - - def replace_with_suggestion(corrector, range, suggestion, description_beginning) - replacement = description_beginning.gsub(REPLACEMENT_REGEX, "#{suggestion} ") - corrector.replace(range, replacement) - end - - def range(node, comment_line) - source_buffer = node.source_range.source_buffer - - begin_pos = node.source_range.begin_pos - begin_pos += comment_index(node, comment_line) - end_pos = begin_pos + comment_body(comment_line).length - - Parser::Source::Range.new(source_buffer, begin_pos, end_pos) - end - - def suggestion_for_message(suggestion, match_data) - if suggestion && !match_data['special'] - "`#{suggestion}`" - else - 'a word such as verb' - end - end - - def first_comment_line(node) - node.source.lines.find { |line| comment_line?(line) } - end - - def comment_body(comment_line) - comment_line.gsub(/^\s*# /, '') - end - - def comment_index(node, comment_line) - body = comment_body(comment_line) - node.source.index(body) - end - - def relevant_file?(file) - file.match?(%r{/cop/.*\.rb\z}) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/create_empty_file.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/create_empty_file.rb deleted file mode 100644 index 44ed5b14..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/create_empty_file.rb +++ /dev/null @@ -1,37 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - module InternalAffairs - # Checks for uses of `create_file` with empty string second argument. - # - # @example - # - # # bad - # create_file(path, '') - # - # # good - # create_empty_file(path) - # - class CreateEmptyFile < Base - extend AutoCorrector - - MSG = 'Use `%s`.' - RESTRICT_ON_SEND = %i[create_file].freeze - - def on_send(node) - return if node.receiver - return unless (argument = node.arguments[1]) - return unless argument.str_type? && argument.value.empty? - - replacement = "create_empty_file(#{node.first_argument.source})" - message = format(MSG, replacement: replacement) - - add_offense(node, message: message) do |corrector| - corrector.replace(node, replacement) - end - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/empty_line_between_expect_offense_and_correction.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/empty_line_between_expect_offense_and_correction.rb deleted file mode 100644 index 9209ee8c..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/empty_line_between_expect_offense_and_correction.rb +++ /dev/null @@ -1,68 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - module InternalAffairs - # Checks whether `expect_offense` and correction expectation methods - # (i.e. `expect_correction` and `expect_no_corrections`) are separated by empty line. - # - # @example - # # bad - # it 'registers and corrects an offense' do - # expect_offense(<<~RUBY) - # bad_method - # ^^^^^^^^^^ Use `good_method`. - # RUBY - # expect_correction(<<~RUBY) - # good_method - # RUBY - # end - # - # # good - # it 'registers and corrects an offense' do - # expect_offense(<<~RUBY) - # bad_method - # ^^^^^^^^^^ Use `good_method`. - # RUBY - # - # expect_correction(<<~RUBY) - # good_method - # RUBY - # end - # - class EmptyLineBetweenExpectOffenseAndCorrection < Base - extend AutoCorrector - - MSG = 'Add empty line between `expect_offense` and `%s`.' - RESTRICT_ON_SEND = %i[expect_offense].freeze - CORRECTION_EXPECTATION_METHODS = %i[expect_correction expect_no_corrections].freeze - - def on_send(node) - return unless (next_sibling = node.right_sibling) && next_sibling.send_type? - - method_name = next_sibling.method_name - return unless CORRECTION_EXPECTATION_METHODS.include?(method_name) - - range = offense_range(node) - return unless range.last_line + 1 == next_sibling.loc.line - - add_offense(range, message: format(MSG, expect_correction: method_name)) do |corrector| - corrector.insert_after(range, "\n") - end - end - - private - - def offense_range(node) - first_argument = node.first_argument - - if first_argument.respond_to?(:heredoc?) && first_argument.heredoc? - first_argument.loc.heredoc_end - else - node - end - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/example_description.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/example_description.rb deleted file mode 100644 index c42c57d3..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/example_description.rb +++ /dev/null @@ -1,113 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - module InternalAffairs - # Checks that RSpec examples that use `expects_offense` - # or `expects_no_offenses` do not have conflicting - # descriptions. - # - # @example - # # bad - # it 'does not register an offense' do - # expect_offense('...') - # end - # - # it 'registers an offense' do - # expect_no_offenses('...') - # end - # - # # good - # it 'registers an offense' do - # expect_offense('...') - # end - # - # it 'does not register an offense' do - # expect_no_offenses('...') - # end - class ExampleDescription < Base - extend AutoCorrector - - MSG = 'Description does not match use of `%s`.' - - RESTRICT_ON_SEND = %i[ - expect_offense - expect_no_offenses - expect_correction - expect_no_corrections - ].to_set.freeze - - EXPECT_NO_OFFENSES_DESCRIPTION_MAPPING = { - /\A(adds|registers|reports|finds) (an? )?offense/ => 'does not register an offense', - /\A(flags|handles|works)\b/ => 'does not register' - }.freeze - - EXPECT_OFFENSE_DESCRIPTION_MAPPING = { - /\A(does not|doesn't) (register|find|flag|report)/ => 'registers', - /\A(does not|doesn't) add (a|an|any )?offense/ => 'registers an offense', - /\Aaccepts\b/ => 'registers' - }.freeze - - EXPECT_NO_CORRECTIONS_DESCRIPTION_MAPPING = { - /\A(auto[- ]?)?correct/ => 'does not correct' - }.freeze - - EXPECT_CORRECTION_DESCRIPTION_MAPPING = { - /\b(does not|doesn't) (auto[- ]?)?correct/ => 'autocorrects' - }.freeze - - EXAMPLE_DESCRIPTION_MAPPING = { - expect_no_offenses: EXPECT_NO_OFFENSES_DESCRIPTION_MAPPING, - expect_offense: EXPECT_OFFENSE_DESCRIPTION_MAPPING, - expect_no_corrections: EXPECT_NO_CORRECTIONS_DESCRIPTION_MAPPING, - expect_correction: EXPECT_CORRECTION_DESCRIPTION_MAPPING - }.freeze - - # @!method offense_example(node) - def_node_matcher :offense_example, <<~PATTERN - (block - (send _ {:it :specify} $...) - _args - `(send nil? %RESTRICT_ON_SEND ...) - ) - PATTERN - - def on_send(node) - parent = node.each_ancestor(:block).first - return unless parent && (current_description = offense_example(parent)&.first) - - method_name = node.method_name - message = format(MSG, method_name: method_name) - - description_map = EXAMPLE_DESCRIPTION_MAPPING[method_name] - check_description(current_description, description_map, message) - end - - private - - def check_description(current_description, description_map, message) - description_text = string_contents(current_description) - return unless (new_description = correct_description(description_text, description_map)) - - add_offense(current_description, message: message) do |corrector| - corrector.replace(current_description, "'#{new_description}'") - end - end - - def correct_description(current_description, description_map) - description_map.each do |incorrect_description_pattern, preferred_description| - if incorrect_description_pattern.match?(current_description) - return current_description.gsub(incorrect_description_pattern, preferred_description) - end - end - - nil - end - - def string_contents(node) - node.str_type? ? node.value : node.source - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/example_heredoc_delimiter.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/example_heredoc_delimiter.rb deleted file mode 100644 index 78832673..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/example_heredoc_delimiter.rb +++ /dev/null @@ -1,111 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - module InternalAffairs - # Use `RUBY` for heredoc delimiter of example Ruby code. - # - # Some editors may apply better syntax highlighting by using appropriate language names for - # the delimiter. - # - # @example - # # bad - # expect_offense(<<~CODE) - # example_ruby_code - # CODE - # - # # good - # expect_offense(<<~RUBY) - # example_ruby_code - # RUBY - class ExampleHeredocDelimiter < Base - extend AutoCorrector - - EXPECTED_HEREDOC_DELIMITER = 'RUBY' - - MSG = 'Use `RUBY` for heredoc delimiter of example Ruby code.' - - RESTRICT_ON_SEND = %i[ - expect_correction - expect_no_corrections - expect_no_offenses - expect_offense - ].freeze - - # @param node [RuboCop::AST::SendNode] - # @return [void] - def on_send(node) - heredoc_node = heredoc_node_from(node) - return unless heredoc_node - return if expected_heredoc_delimiter?(heredoc_node) - return if expected_heredoc_delimiter_in_body?(heredoc_node) - - add_offense(heredoc_node) do |corrector| - autocorrect(corrector, heredoc_node) - end - end - - private - - # @param corrector [RuboCop::Cop::Corrector] - # @param node [RuboCop::AST::StrNode] - # @return [void] - def autocorrect(corrector, node) - [ - heredoc_opening_delimiter_range_from(node), - heredoc_closing_delimiter_range_from(node) - ].each do |range| - corrector.replace(range, EXPECTED_HEREDOC_DELIMITER) - end - end - - # @param node [RuboCop::AST::StrNode] - # @return [Boolean] - def expected_heredoc_delimiter_in_body?(node) - node.location.heredoc_body.source.lines.any? do |line| - line.strip == EXPECTED_HEREDOC_DELIMITER - end - end - - # @param node [RuboCop::AST::StrNode] - # @return [Boolean] - def expected_heredoc_delimiter?(node) - heredoc_delimiter_string_from(node) == EXPECTED_HEREDOC_DELIMITER - end - - # @param node [RuboCop::AST::SendNode] - # @return [RuboCop::AST::StrNode, nil] - def heredoc_node_from(node) - return unless node.first_argument.respond_to?(:heredoc?) - return unless node.first_argument.heredoc? - - node.first_argument - end - - # @param node [RuboCop::AST::StrNode] - # @return [String] - def heredoc_delimiter_string_from(node) - node.source[Heredoc::OPENING_DELIMITER, 2] - end - - # @param node [RuboCop::AST::StrNode] - # @return [Parser::Source::Range] - def heredoc_opening_delimiter_range_from(node) - match_data = node.source.match(Heredoc::OPENING_DELIMITER) - node.source_range.begin.adjust( - begin_pos: match_data.begin(2), - end_pos: match_data.end(2) - ) - end - - # @param node [RuboCop::AST::StrNode] - # @return [Parser::Source::Range] - def heredoc_closing_delimiter_range_from(node) - node.location.heredoc_end.end.adjust( - begin_pos: -heredoc_delimiter_string_from(node).length - ) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/inherit_deprecated_cop_class.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/inherit_deprecated_cop_class.rb deleted file mode 100644 index f7389e79..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/inherit_deprecated_cop_class.rb +++ /dev/null @@ -1,34 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - module InternalAffairs - # `RuboCop::Cop::Cop` is deprecated and will be removed in RuboCop 2.0. - # Your custom cop class should inherit from `RuboCop::Cop::Base` instead of - # `RuboCop::Cop::Cop`. - # - # See "v1 Upgrade Notes" for more details: - # https://docs.rubocop.org/rubocop/v1_upgrade_notes.html - # - # @example - # # bad - # class Foo < Cop - # end - # - # # good - # class Foo < Base - # end - # - class InheritDeprecatedCopClass < Base - MSG = 'Use `Base` instead of `Cop`.' - - def on_class(node) - return unless (parent_class = node.parent_class) - return unless parent_class.children.last == :Cop - - add_offense(parent_class) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/lambda_or_proc.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/lambda_or_proc.rb deleted file mode 100644 index dfc4ff88..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/lambda_or_proc.rb +++ /dev/null @@ -1,46 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - module InternalAffairs - # Enforces the use of `node.lambda_or_proc?` instead of `node.lambda? || node.proc?`. - # - # @example - # # bad - # node.lambda? || node.proc? - # node.proc? || node.lambda? - # - # # good - # node.lambda_or_proc? - # - class LambdaOrProc < Base - extend AutoCorrector - - MSG = 'Use `%s`.' - - # @!method lambda_or_proc(node) - def_node_matcher :lambda_or_proc, <<~PATTERN - { - (or $(send _node :lambda?) $(send _node :proc?)) - (or $(send _node :proc?) $(send _node :lambda?)) - (or - (or _ $(send _node :lambda?)) $(send _node :proc?)) - (or - (or _ $(send _node :proc?)) $(send _node :lambda?)) - } - PATTERN - - def on_or(node) - return unless (lhs, rhs = lambda_or_proc(node)) - - offense = lhs.receiver.source_range.join(rhs.source_range.end) - prefer = "#{lhs.receiver.source}.lambda_or_proc?" - - add_offense(offense, message: format(MSG, prefer: prefer)) do |corrector| - corrector.replace(offense, prefer) - end - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/location_expression.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/location_expression.rb deleted file mode 100644 index ad3c64a8..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/location_expression.rb +++ /dev/null @@ -1,37 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - module InternalAffairs - # Enforces the use of `node.source_range` instead of `node.location.expression`. - # - # @example - # - # # bad - # node.location.expression - # node.loc.expression - # - # # good - # node.source_range - # - class LocationExpression < Base - extend AutoCorrector - - MSG = 'Use `source_range` instead.' - RESTRICT_ON_SEND = %i[loc location].freeze - - def on_send(node) - return unless (parent = node.parent) - return unless parent.send_type? && parent.method?(:expression) - return unless parent.receiver.receiver - - offense = node.loc.selector.join(parent.source_range.end) - - add_offense(offense) do |corrector| - corrector.replace(offense, 'source_range') - end - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/location_line_equality_comparison.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/location_line_equality_comparison.rb deleted file mode 100644 index ca0621e2..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/location_line_equality_comparison.rb +++ /dev/null @@ -1,62 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - module InternalAffairs - # Enforces the use of `same_line?` instead of location line comparison for equality. - # - # @example - # # bad - # node.loc.line == node.parent.loc.line - # - # # bad - # node.loc.first_line == node.parent.loc.first_line - # - # # good - # same_line?(node, node.parent) - # - class LocationLineEqualityComparison < Base - extend AutoCorrector - - MSG = 'Use `%s`.' - - # @!method line_send(node) - def_node_matcher :line_send, <<~PATTERN - { - (send (send _ {:loc :source_range}) {:line :first_line}) - (send _ :first_line) - } - PATTERN - - # @!method location_line_equality_comparison?(node) - def_node_matcher :location_line_equality_comparison?, <<~PATTERN - (send #line_send :== #line_send) - PATTERN - - def on_send(node) - return unless location_line_equality_comparison?(node) - - lhs, _op, rhs = *node - - lhs_receiver = extract_receiver(lhs) - rhs_receiver = extract_receiver(rhs) - preferred = "same_line?(#{lhs_receiver}, #{rhs_receiver})" - - add_offense(node, message: format(MSG, preferred: preferred)) do |corrector| - corrector.replace(node, preferred) - end - end - - private - - def extract_receiver(node) - receiver = node.receiver - if receiver.send_type? && (receiver.method?(:loc) || receiver.method?(:source_range)) - receiver = receiver.receiver - end - receiver.source - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/method_name_end_with.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/method_name_end_with.rb deleted file mode 100644 index 648f61ed..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/method_name_end_with.rb +++ /dev/null @@ -1,82 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - module InternalAffairs - # Checks potentially usage of method identifier predicates - # defined in rubocop-ast instead of `method_name.end_with?`. - # - # @example - # # bad - # node.method_name.to_s.end_with?('=') - # - # # good - # node.assignment_method? - # - # # bad - # node.method_name.to_s.end_with?('?') - # - # # good - # node.predicate_method? - # - # # bad - # node.method_name.to_s.end_with?('!') - # - # # good - # node.bang_method? - # - class MethodNameEndWith < Base - include RangeHelp - extend AutoCorrector - - MSG = 'Use `%s` instead of `%s`.' - RESTRICT_ON_SEND = %i[end_with?].freeze - SUGGEST_METHOD_FOR_SUFFIX = { - '=' => 'assignment_method?', - '!' => 'bang_method?', - '?' => 'predicate_method?' - }.freeze - - # @!method method_name_end_with?(node) - def_node_matcher :method_name_end_with?, <<~PATTERN - { - (call - (call - $(... :method_name) :to_s) :end_with? - $(str {"=" "?" "!"})) - (call - $(... :method_name) :end_with? - $(str {"=" "?" "!"})) - } - PATTERN - - def on_send(node) - method_name_end_with?(node) do |method_name_node, end_with_arg| - next unless method_name_node.receiver - - preferred_method = SUGGEST_METHOD_FOR_SUFFIX[end_with_arg.value] - range = range(method_name_node, node) - message = format(MSG, method_name: preferred_method, method_suffix: range.source) - - add_offense(range, message: message) do |corrector| - corrector.replace(range, preferred_method) - end - end - end - alias on_csend on_send - - private - - def range(method_name_node, node) - range = if method_name_node.call_type? - method_name_node.loc.selector - else - method_name_node.source_range - end - - range_between(range.begin_pos, node.source_range.end_pos) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/method_name_equal.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/method_name_equal.rb deleted file mode 100644 index ea3f56ec..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/method_name_equal.rb +++ /dev/null @@ -1,49 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - module InternalAffairs - # Checks that method names are checked using `method?` method. - # - # @example - # # bad - # node.method_name == :do_something - # - # # good - # node.method?(:do_something) - # - # # bad - # node.method_name != :do_something - # - # # good - # !node.method?(:do_something) - # - class MethodNameEqual < Base - extend AutoCorrector - - MSG = 'Use `%s` instead.' - RESTRICT_ON_SEND = %i[== !=].freeze - - # @!method method_name(node) - def_node_matcher :method_name, <<~PATTERN - (send - (send - (...) :method_name) {:== :!=} - $_) - PATTERN - - def on_send(node) - method_name(node) do |method_name_arg| - bang = node.method?(:!=) ? '!' : '' - prefer = "#{bang}#{node.receiver.receiver.source}.method?(#{method_name_arg.source})" - message = format(MSG, prefer: prefer) - - add_offense(node, message: message) do |corrector| - corrector.replace(node, prefer) - end - end - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/node_destructuring.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/node_destructuring.rb deleted file mode 100644 index 2e3bab9b..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/node_destructuring.rb +++ /dev/null @@ -1,44 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - module InternalAffairs - # Checks that node destructuring is using the node extensions. - # - # @example Using splat expansion - # - # # bad - # _receiver, method_name, _arguments = send_node.children - # - # # bad - # _receiver, method_name, _arguments = *send_node - # - # # good - # method_name = send_node.method_name - class NodeDestructuring < Base - MSG = 'Use the methods provided with the node extensions instead ' \ - 'of manually destructuring nodes.' - - # @!method node_variable?(node) - def_node_matcher :node_variable?, <<~PATTERN - {(lvar [#node_suffix? _]) (send nil? [#node_suffix? _])} - PATTERN - - # @!method node_destructuring?(node) - def_node_matcher :node_destructuring?, <<~PATTERN - {(masgn (mlhs ...) {(send #node_variable? :children) (array (splat #node_variable?))})} - PATTERN - - def on_masgn(node) - node_destructuring?(node) { add_offense(node) } - end - - private - - def node_suffix?(method_name) - method_name.to_s.end_with?('node') - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/node_first_or_last_argument.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/node_first_or_last_argument.rb deleted file mode 100644 index 63395afc..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/node_first_or_last_argument.rb +++ /dev/null @@ -1,53 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - module InternalAffairs - # Checks for the use of `node.arguments.first` or `node.arguments.last` and - # suggests the use of `node.first_argument` or `node.last_argument` instead. - # - # @example - # # bad - # node.arguments.first - # node.arguments[0] - # node.arguments.last - # node.arguments[-1] - # - # # good - # node.first_argument - # node.last_argument - # - class NodeFirstOrLastArgument < Base - extend AutoCorrector - include RangeHelp - - MSG = 'Use `#%s` instead of `#%s`.' - RESTRICT_ON_SEND = %i[arguments].freeze - - # @!method arguments_first_or_last?(node) - def_node_matcher :arguments_first_or_last?, <<~PATTERN - { - (send (send !nil? :arguments) ${:first :last}) - (send (send !nil? :arguments) :[] (int ${0 -1})) - } - PATTERN - - def on_send(node) - arguments_first_or_last?(node.parent) do |end_or_index| - range = range_between(node.loc.selector.begin_pos, node.parent.source_range.end_pos) - correct = case end_or_index - when :first, 0 then 'first_argument' - when :last, -1 then 'last_argument' - else raise "Unknown end_or_index: #{end_or_index}" - end - message = format(MSG, correct: correct, incorrect: range.source) - - add_offense(range, message: message) do |corrector| - corrector.replace(range, correct) - end - end - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/node_matcher_directive.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/node_matcher_directive.rb deleted file mode 100644 index 980b489b..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/node_matcher_directive.rb +++ /dev/null @@ -1,147 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - module InternalAffairs - # Checks that node matcher definitions are tagged with a YARD `@!method` - # directive so that editors are able to find the dynamically defined - # method. - # - # @example - # # bad - # def_node_matcher :foo?, <<~PATTERN - # ... - # PATTERN - # - # # good - # # @!method foo?(node) - # def_node_matcher :foo?, <<~PATTERN - # ... - # PATTERN - # - class NodeMatcherDirective < Base - extend AutoCorrector - include RangeHelp - - MSG = 'Precede `%s` with a `@!method` YARD directive.' - MSG_WRONG_NAME = '`@!method` YARD directive has invalid method name, ' \ - 'use `%s` instead of `%s`.' - MSG_TOO_MANY = 'Multiple `@!method` YARD directives found for this matcher.' - - RESTRICT_ON_SEND = %i[def_node_matcher def_node_search].to_set.freeze - REGEXP = /^\s*#\s*@!method\s+(?[a-z0-9_]+[?!]?)(?:\((?.*)\))?/.freeze - - # @!method pattern_matcher?(node) - def_node_matcher :pattern_matcher?, <<~PATTERN - (send _ %RESTRICT_ON_SEND {str sym} {str dstr}) - PATTERN - - def on_send(node) - return if node.arguments.none? - return unless valid_method_name?(node) - - actual_name = node.first_argument.value - directives = method_directives(node) - return too_many_directives(node) if directives.size > 1 - - directive = directives.first - return if directive_correct?(directive, actual_name) - - register_offense(node, directive, actual_name) - end - - private - - def valid_method_name?(node) - node.first_argument.str_type? || node.first_argument.sym_type? - end - - def method_directives(node) - comments = processed_source.ast_with_comments[node] - - comments.filter_map do |comment| - match = comment.text.match(REGEXP) - next unless match - - { node: comment, method_name: match[:method_name], args: match[:args] } - end - end - - def too_many_directives(node) - add_offense(node, message: MSG_TOO_MANY) - end - - def directive_correct?(directive, actual_name) - directive && directive[:method_name] == actual_name.to_s - end - - def register_offense(node, directive, actual_name) - message = formatted_message(directive, actual_name, node.method_name) - - add_offense(node, message: message) do |corrector| - if directive - correct_directive(corrector, directive, actual_name) - else - insert_directive(corrector, node, actual_name) - end - end - end - - def formatted_message(directive, actual_name, method_name) - if directive - format(MSG_WRONG_NAME, expected: actual_name, actual: directive[:method_name]) - else - format(MSG, method: method_name) - end - end - - def insert_directive(corrector, node, actual_name) - # If the pattern matcher uses arguments (`%1`, `%2`, etc.), include them in the directive - arguments = pattern_arguments(node.arguments[1].source) - - range = range_with_surrounding_space(node.source_range, side: :left, newlines: false) - indentation = range.source.match(/^\s*/)[0] - directive = "#{indentation}# @!method #{actual_name}(#{arguments.join(', ')})\n" - directive = "\n#{directive}" if add_newline?(node) - - corrector.insert_before(range, directive) - end - - def pattern_arguments(pattern) - arguments = %w[node] - max_pattern_var = pattern.scan(/(?<=%)\d+/).map(&:to_i).max - max_pattern_var&.times { |i| arguments << "arg#{i + 1}" } - arguments - end - - def add_newline?(node) - # Determine if a blank line should be inserted before the new directive - # in order to spread out pattern matchers - return false if node.sibling_index&.zero? - return false unless node.parent - - prev_sibling = node.parent.child_nodes[node.sibling_index - 1] - return false unless prev_sibling && pattern_matcher?(prev_sibling) - - node.loc.line == last_line(prev_sibling) + 1 - end - - def last_line(node) - if node.last_argument.heredoc? - node.last_argument.loc.heredoc_end.line - else - node.loc.last_line - end - end - - def correct_directive(corrector, directive, actual_name) - correct = "@!method #{actual_name}" - regexp = /@!method\s+#{Regexp.escape(directive[:method_name])}/ - - replacement = directive[:node].text.gsub(regexp, correct) - corrector.replace(directive[:node], replacement) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/node_type_predicate.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/node_type_predicate.rb deleted file mode 100644 index 04602762..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/node_type_predicate.rb +++ /dev/null @@ -1,41 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - module InternalAffairs - # Checks that node types are checked using the predicate helpers. - # - # @example - # - # # bad - # node.type == :send - # - # # good - # node.send_type? - # - class NodeTypePredicate < Base - extend AutoCorrector - - MSG = 'Use `#%s_type?` to check node type.' - RESTRICT_ON_SEND = %i[==].freeze - - # @!method node_type_check(node) - def_node_matcher :node_type_check, <<~PATTERN - (send (send $_ :type) :== (sym $_)) - PATTERN - - def on_send(node) - node_type_check(node) do |receiver, node_type| - return unless Parser::Meta::NODE_TYPES.include?(node_type) - - message = format(MSG, type: node_type) - add_offense(node, message: message) do |corrector| - range = node.source_range.with(begin_pos: receiver.source_range.end_pos + 1) - corrector.replace(range, "#{node_type}_type?") - end - end - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/numblock_handler.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/numblock_handler.rb deleted file mode 100644 index 4b884c81..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/numblock_handler.rb +++ /dev/null @@ -1,69 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - module InternalAffairs - # Checks for missing `numblock handlers. The blocks with numbered - # arguments introduced in Ruby 2.7 are parsed with a node type of - # `numblock` instead of block. Cops that define `block` handlers - # need to define `numblock` handlers or disable this cope for them. - # - # @example - # - # # bad - # class BlockRelatedCop < Base - # def on_block(node) - # end - # end - # - # # good - # class BlockRelatedCop < Base - # def on_block(node) - # end - # - # alias on_numblock on_block - # end - # - # class BlockRelatedCop < Base - # def on_block(node) - # end - # - # alias_method :on_numblock, :on_block - # end - # - # class BlockRelatedCop < Base - # def on_block(node) - # end - # - # def on_numblock(node) - # end - # end - class NumblockHandler < Base - MSG = 'Define on_numblock to handle blocks with numbered arguments.' - - def on_def(node) - return unless block_handler?(node) - return unless node.parent - - add_offense(node) unless numblock_handler?(node.parent) - end - - private - - # @!method block_handler?(node) - def_node_matcher :block_handler?, <<~PATTERN - (def :on_block (args (arg :node)) ...) - PATTERN - - # @!method numblock_handler?(node) - def_node_matcher :numblock_handler?, <<~PATTERN - { - `(def :on_numblock (args (arg :node)) ...) - `(alias (sym :on_numblock) (sym :on_block)) - `(send nil? :alias_method (sym :on_numblock) (sym :on_block)) - } - PATTERN - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb deleted file mode 100644 index 2abcff8f..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/offense_location_keyword.rb +++ /dev/null @@ -1,56 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - module InternalAffairs - # Checks for potential uses of the location keywords which can be used as - # shortcut arguments to `#add_offense`. - # - # @example - # - # # bad - # add_offense(node, location: node.loc.selector) - # - # # good - # add_offense(node, location: :selector) - class OffenseLocationKeyword < Base - extend AutoCorrector - - MSG = 'Use `:%s` as the location argument to `#add_offense`.' - RESTRICT_ON_SEND = %i[add_offense].freeze - - def on_send(node) - node_type_check(node) do |node_arg, kwargs| - find_offending_argument(node_arg, kwargs) do |location, keyword| - add_offense(location, message: format(MSG, keyword: keyword)) do |corrector| - (*, keyword) = offending_location_argument(location.parent) - - corrector.replace(location, ":#{keyword}") - end - end - end - end - - private - - # @!method node_type_check(node) - def_node_matcher :node_type_check, <<~PATTERN - (send nil? :add_offense $_node $hash) - PATTERN - - # @!method offending_location_argument(node) - def_node_matcher :offending_location_argument, <<~PATTERN - (pair (sym :location) $(send (send $_node :loc) $_keyword)) - PATTERN - - def find_offending_argument(searched_node, kwargs) - kwargs.pairs.each do |pair| - offending_location_argument(pair) do |location, node, keyword| - yield(location, keyword) if searched_node == node - end - end - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/processed_source_buffer_name.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/processed_source_buffer_name.rb deleted file mode 100644 index 96d1eee4..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/processed_source_buffer_name.rb +++ /dev/null @@ -1,42 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - module InternalAffairs - # Enforces the use of `processed_source.file_path` instead of `processed_source.buffer.name`. - # - # @example - # - # # bad - # processed_source.buffer.name - # - # # good - # processed_source.file_path - # - class ProcessedSourceBufferName < Base - extend AutoCorrector - - MSG = 'Use `file_path` instead.' - - RESTRICT_ON_SEND = %i[name].freeze - - # @!method processed_source_buffer_name?(node) - def_node_matcher :processed_source_buffer_name?, <<~PATTERN - (send - (send - {(lvar :processed_source) (send nil? :processed_source)} :buffer) :name) - PATTERN - - def on_send(node) - return unless processed_source_buffer_name?(node) - - offense_range = node.children.first.loc.selector.begin.join(node.source_range.end) - - add_offense(offense_range) do |corrector| - corrector.replace(offense_range, 'file_path') - end - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/redundant_context_config_parameter.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/redundant_context_config_parameter.rb deleted file mode 100644 index b31edc0b..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/redundant_context_config_parameter.rb +++ /dev/null @@ -1,46 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - module InternalAffairs - # Checks for redundant `:config` parameter in the `context` arguments. - # - # @example - # - # # bad - # context 'foo', :config do - # end - # - # # good - # context 'foo' do - # end - # - class RedundantContextConfigParameter < Base - include RangeHelp - extend AutoCorrector - - MSG = 'Remove the redundant `:config` parameter.' - RESTRICT_ON_SEND = %i[context].freeze - - def on_send(node) - arguments = node.arguments - config_node = arguments.detect { |argument| argument.source == ':config' } - return unless config_node - - add_offense(config_node) do |corrector| - dup_arguments = arguments.dup - dup_arguments.delete(config_node) - - corrector.replace(offense_range(arguments), dup_arguments.map(&:source).join(', ')) - end - end - - private - - def offense_range(arguments) - range_between(arguments.first.source_range.begin_pos, arguments.last.source_range.end_pos) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/redundant_described_class_as_subject.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/redundant_described_class_as_subject.rb deleted file mode 100644 index b9b6946f..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/redundant_described_class_as_subject.rb +++ /dev/null @@ -1,62 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - module InternalAffairs - # Checks for redundant `subject(:cop) { described_class.new }`. - # - # @example - # # bad - # RSpec.describe RuboCop::Cop::Department::Foo do - # subject(:cop) { described_class.new(config) } - # end - # - # # good - # RSpec.describe RuboCop::Cop::Department::Foo, :config do - # end - # - class RedundantDescribedClassAsSubject < Base - include RangeHelp - extend AutoCorrector - - MSG = 'Remove the redundant `subject`%s.' - - # @!method described_class_subject?(node) - def_node_matcher :described_class_subject?, <<~PATTERN - (block - (send nil? :subject - (sym :cop)) - (args) - (send - (send nil? :described_class) :new - $...)) - PATTERN - - def on_block(node) - return unless (described_class_arguments = described_class_subject?(node)) - return if described_class_arguments.count >= 2 - - describe = find_describe_method_node(node) - - unless (exist_config = describe.last_argument.source == ':config') - additional_message = ' and specify `:config` in `describe`' - end - - message = format(MSG, additional_message: additional_message) - - add_offense(node, message: message) do |corrector| - corrector.remove(range_by_whole_lines(node.source_range, include_final_newline: true)) - - corrector.insert_after(describe.last_argument, ', :config') unless exist_config - end - end - - private - - def find_describe_method_node(block_node) - block_node.ancestors.find { |node| node.block_type? && node.method?(:describe) }.send_node - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/redundant_expect_offense_arguments.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/redundant_expect_offense_arguments.rb deleted file mode 100644 index 4424cb07..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/redundant_expect_offense_arguments.rb +++ /dev/null @@ -1,34 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - module InternalAffairs - # Checks for redundant arguments of `RuboCop::RSpec::ExpectOffense`'s methods. - # - # @example - # - # # bad - # expect_no_offenses('code', keyword: keyword) - # - # # good - # expect_no_offenses('code') - # - class RedundantExpectOffenseArguments < Base - extend AutoCorrector - - MSG = 'Remove the redundant arguments.' - RESTRICT_ON_SEND = %i[expect_no_offenses].freeze - - def on_send(node) - return if node.arguments.one? || !node.arguments[1]&.hash_type? - - range = node.first_argument.source_range.end.join(node.last_argument.source_range.end) - - add_offense(range) do |corrector| - corrector.remove(range) - end - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/redundant_let_rubocop_config_new.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/redundant_let_rubocop_config_new.rb deleted file mode 100644 index 60ee490d..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/redundant_let_rubocop_config_new.rb +++ /dev/null @@ -1,73 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - module InternalAffairs - # Checks that `let` is `RuboCop::Config.new` with no arguments. - # - # @example - # # bad - # RSpec.describe RuboCop::Cop::Department::Foo, :config do - # let(:config) { RuboCop::Config.new } - # end - # - # # good - # RSpec.describe RuboCop::Cop::Department::Foo, :config do - # end - # - # RSpec.describe RuboCop::Cop::Department::Foo, :config do - # let(:config) { RuboCop::Config.new(argument) } - # end - # - class RedundantLetRuboCopConfigNew < Base - include RangeHelp - extend AutoCorrector - - MSG = 'Remove `let` that is `RuboCop::Config.new` with no arguments%s.' - - # @!method let_rubocop_config_new?(node) - def_node_matcher :let_rubocop_config_new?, <<~PATTERN - (block - (send nil? :let - (sym :config)) - (args) - { - (send - (const - (const nil? :RuboCop) :Config) :new) - (send - (const - (const nil? :RuboCop) :Config) :new - (hash (pair (send (send (send nil? :described_class) :badge) :to_s) - (send nil? :cop_config)))) - } - ) - PATTERN - - def on_block(node) - return unless let_rubocop_config_new?(node) - - describe = find_describe_method_node(node) - - unless (exist_config = describe.last_argument.source == ':config') - additional_message = ' and specify `:config` in `describe`' - end - - message = format(MSG, additional_message: additional_message) - - add_offense(node, message: message) do |corrector| - corrector.remove(range_by_whole_lines(node.source_range, include_final_newline: true)) - - corrector.insert_after(describe.last_argument, ', :config') unless exist_config - end - end - - private - - def find_describe_method_node(block_node) - block_node.ancestors.find { |node| node.block_type? && node.method?(:describe) }.send_node - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/redundant_location_argument.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/redundant_location_argument.rb deleted file mode 100644 index 1ea11496..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/redundant_location_argument.rb +++ /dev/null @@ -1,53 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - module InternalAffairs - # Checks for redundant `location` argument to `#add_offense`. `location` - # argument has a default value of `:expression` and this method will - # automatically use it. - # - # @example - # - # # bad - # add_offense(node, location: :expression) - # - # # good - # add_offense(node) - # add_offense(node, location: :selector) - # - class RedundantLocationArgument < Base - include RangeHelp - extend AutoCorrector - - MSG = 'Redundant location argument to `#add_offense`.' - RESTRICT_ON_SEND = %i[add_offense].freeze - - # @!method redundant_location_argument(node) - def_node_matcher :redundant_location_argument, <<~PATTERN - (send nil? :add_offense _ - (hash <$(pair (sym :location) (sym :expression)) ...>) - ) - PATTERN - - def on_send(node) - redundant_location_argument(node) do |argument| - add_offense(argument) do |corrector| - range = offending_range(argument) - - corrector.remove(range) - end - end - end - - private - - def offending_range(node) - with_space = range_with_surrounding_space(node.source_range) - - range_with_surrounding_comma(with_space, :left) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb deleted file mode 100644 index 9d4cc256..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/redundant_message_argument.rb +++ /dev/null @@ -1,76 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - module InternalAffairs - # Checks for redundant message arguments to `#add_offense`. This method - # will automatically use `#message` or `MSG` (in that order of priority) - # if they are defined. - # - # @example - # - # # bad - # add_offense(node, message: MSG) - # add_offense(node, message: message) - # add_offense(node, message: message(node)) - # - # # good - # add_offense(node) - # add_offense(node, message: CUSTOM_MSG) - # add_offense(node, message: message(other_node)) - # - class RedundantMessageArgument < Base - include RangeHelp - extend AutoCorrector - - MSG = 'Redundant message argument to `#add_offense`.' - RESTRICT_ON_SEND = %i[add_offense].freeze - - # @!method node_type_check(node) - def_node_matcher :node_type_check, <<~PATTERN - (send nil? :add_offense $_node $hash) - PATTERN - - # @!method redundant_message_argument(node) - def_node_matcher :redundant_message_argument, <<~PATTERN - (pair - (sym :message) - ${(const nil? :MSG) (send nil? :message) (send nil? :message _)}) - PATTERN - - # @!method message_method_call(node) - def_node_matcher :message_method_call, '(send nil? :message $_node)' - - def on_send(node) - node_type_check(node) do |node_arg, kwargs| - find_offending_argument(node_arg, kwargs) do |pair| - add_offense(pair) do |corrector| - range = offending_range(pair) - - corrector.remove(range) - end - end - end - end - - private - - def offending_range(node) - with_space = range_with_surrounding_space(node.source_range) - - range_with_surrounding_comma(with_space, :left) - end - - def find_offending_argument(searched_node, kwargs) - kwargs.pairs.each do |pair| - redundant_message_argument(pair) do |message_argument| - node = message_method_call(message_argument) - - yield pair if !node || node == searched_node - end - end - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/redundant_method_dispatch_node.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/redundant_method_dispatch_node.rb deleted file mode 100644 index edadd0c6..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/redundant_method_dispatch_node.rb +++ /dev/null @@ -1,56 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - module InternalAffairs - # Checks for redundant `send_node` method dispatch node. - # - # @example - # - # # bad - # node.send_node.method_name - # - # # good - # node.method_name - # - # # bad - # node.send_node.method?(:method_name) - # - # # good - # node.method?(:method_name) - # - # # bad - # node.send_node.receiver - # - # # good - # node.receiver - # - class RedundantMethodDispatchNode < Base - include RangeHelp - extend AutoCorrector - - MSG = 'Remove the redundant `send_node`.' - RESTRICT_ON_SEND = %i[method_name method? receiver].freeze - - # @!method dispatch_method(node) - def_node_matcher :dispatch_method, <<~PATTERN - { - (send $(send _ :send_node) {:method_name :receiver}) - (send $(send _ :send_node) :method? _) - } - PATTERN - - def on_send(node) - return unless (dispatch_node = dispatch_method(node)) - return unless (dot = dispatch_node.loc.dot) - - range = range_between(dot.begin_pos, dispatch_node.loc.selector.end_pos) - - add_offense(range) do |corrector| - corrector.remove(range) - end - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/redundant_source_range.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/redundant_source_range.rb deleted file mode 100644 index eb0d7b8a..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/redundant_source_range.rb +++ /dev/null @@ -1,66 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - module InternalAffairs - # Checks for redundant `source_range`. - # - # @example - # - # # bad - # node.source_range.source - # - # # good - # node.source - # - # # bad - # add_offense(node) { |corrector| corrector.replace(node.source_range, prefer) } - # add_offense(node) { |corrector| corrector.insert_before(node.source_range, prefer) } - # add_offense(node) { |corrector| corrector.insert_before_multi(node.source_range, prefer) } - # add_offense(node) { |corrector| corrector.insert_after(node.source_range, prefer) } - # add_offense(node) { |corrector| corrector.insert_after_multi(node.source_range, prefer) } - # add_offense(node) { |corrector| corrector.swap(node.source_range, before, after) } - # - # # good - # add_offense(node) { |corrector| corrector.replace(node, prefer) } - # add_offense(node) { |corrector| corrector.insert_before(node, prefer) } - # add_offense(node) { |corrector| corrector.insert_before_multi(node, prefer) } - # add_offense(node) { |corrector| corrector.insert_after(node, prefer) } - # add_offense(node) { |corrector| corrector.insert_after_multi(node, prefer) } - # add_offense(node) { |corrector| corrector.swap(node, before, after) } - # - class RedundantSourceRange < Base - extend AutoCorrector - - MSG = 'Remove the redundant `source_range`.' - RESTRICT_ON_SEND = %i[ - source - replace remove insert_before insert_before_multi insert_after insert_after_multi swap - ].freeze - - # @!method redundant_source_range(node) - def_node_matcher :redundant_source_range, <<~PATTERN - { - (send $(send _ :source_range) :source) - (send _ { - :replace :insert_before :insert_before_multi :insert_after :insert_after_multi - } $(send _ :source_range) _) - (send _ :remove $(send _ :source_range)) - (send _ :swap $(send _ :source_range) _ _) - } - PATTERN - - def on_send(node) - return unless (source_range = redundant_source_range(node)) - return if source_range.receiver.send_type? && source_range.receiver.method?(:buffer) - - selector = source_range.loc.selector - - add_offense(selector) do |corrector| - corrector.remove(source_range.loc.dot.join(selector)) - end - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/single_line_comparison.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/single_line_comparison.rb deleted file mode 100644 index 937f3982..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/single_line_comparison.rb +++ /dev/null @@ -1,62 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - module InternalAffairs - # Enforces the use of `node.single_line?` instead of - # comparing `first_line` and `last_line` for equality. - # - # @example - # # bad - # node.loc.first_line == node.loc.last_line - # - # # bad - # node.loc.last_line == node.loc.first_line - # - # # bad - # node.loc.line == node.loc.last_line - # - # # bad - # node.loc.last_line == node.loc.line - # - # # bad - # node.first_line == node.last_line - # - # # good - # node.single_line? - # - class SingleLineComparison < Base - extend AutoCorrector - - MSG = 'Use `%s`.' - RESTRICT_ON_SEND = %i[== !=].freeze - - # @!method single_line_comparison(node) - def_node_matcher :single_line_comparison, <<~PATTERN - { - (send (send $_receiver {:line :first_line}) {:== :!=} (send _receiver :last_line)) - (send (send $_receiver :last_line) {:== :!=} (send _receiver {:line :first_line})) - } - PATTERN - - def on_send(node) - return unless (receiver = single_line_comparison(node)) - - bang = node.method?(:!=) ? '!' : '' - preferred = "#{bang}#{extract_receiver(receiver)}.single_line?" - - add_offense(node, message: format(MSG, preferred: preferred)) do |corrector| - corrector.replace(node, preferred) - end - end - - private - - def extract_receiver(node) - node = node.receiver if node.send_type? && %i[loc source_range].include?(node.method_name) - node.source - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/style_detected_api_use.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/style_detected_api_use.rb deleted file mode 100644 index 98d3ed89..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/style_detected_api_use.rb +++ /dev/null @@ -1,148 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - module InternalAffairs - # Checks for correct use of the style_detected API provided by - # `ConfigurableEnforcedStyle`. If `correct_style_detected` is used - # then `opposite_style_detected`, `unexpected_style_detected`, - # `ambiguous_style_detected`, `conflicting_styles_detected`, - # `unrecognized_style_detected` or `no_acceptable_style!` should be - # used too, and vice versa. The `xxx_style_detected` methods - # should not be used as predicates either. - # - # @example - # - # # bad - # def on_send(node) - # return add_offense(node) if opposite_style_detected - # - # correct_style_detected - # end - # - # def on_send(node) - # if offense? - # add_offense(node) - # else - # correct_style_detected - # end - # end - # - # def on_send(node) - # return unless offense? - # - # add_offense(node) - # opposite_style_detected - # end - # - # # good - # def on_send(node) - # if offense? - # add_offense(node) - # opposite_style_detected - # else - # correct_style_detected - # end - # end - # - # def on_send(node) - # add_offense(node) if offense? - # end - # - class StyleDetectedApiUse < Base - include RangeHelp - - MSG_FOR_POSITIVE_WITHOUT_NEGATIVE = - '`correct_style_detected` method called without ' \ - 'calling a negative `*_style_detected` method.' - MSG_FOR_NEGATIVE_WITHOUT_POSITIVE = - 'negative `*_style_detected` methods called without ' \ - 'calling `correct_style_detected` method.' - MSG_FOR_CONDITIONAL_USE = '`*_style_detected` method called in conditional.' - RESTRICT_ON_SEND = %i[ - correct_style_detected opposite_style_detected - unexpected_style_detected ambiguous_style_detected - conflicting_styles_detected unrecognized_style_detected - no_acceptable_style! style_detected - ].freeze - - # @!method correct_style_detected_check(node) - def_node_matcher :correct_style_detected_check, <<~PATTERN - (send nil? :correct_style_detected) - PATTERN - - # @!method negative_style_detected_method_check(node) - def_node_matcher :negative_style_detected_method_check, <<~PATTERN - (send nil? /(?:opposite|unexpected|ambiguous|unrecognized)_style_detected|conflicting_styles_detected/ ...) - PATTERN - - # @!method no_acceptable_style_check(node) - def_node_matcher :no_acceptable_style_check, <<~PATTERN - (send nil? :no_acceptable_style!) - PATTERN - - # @!method style_detected_check(node) - def_node_matcher :style_detected_check, <<~PATTERN - (send nil? :style_detected ...) - PATTERN - - def on_new_investigation - @correct_style_detected_called = false - @negative_style_detected_methods_called = false - @style_detected_called = false - end - - def on_investigation_end - return if style_detected_called - return unless correct_style_detected_called ^ negative_style_detected_methods_called - - add_global_offense(MSG_FOR_POSITIVE_WITHOUT_NEGATIVE) if positive_without_negative? - add_global_offense(MSG_FOR_NEGATIVE_WITHOUT_POSITIVE) if negative_without_positive? - end - - def on_send(node) - if correct_style_detected_check(node) - @correct_style_detected_called = true - elsif negative_style_detected_method_check(node) || no_acceptable_style_check(node) - @negative_style_detected_methods_called = true - elsif style_detected_check(node) - @style_detected_called = true - end - end - - def on_if(node) - traverse_condition(node.condition) do |cond| - add_offense(cond, message: MSG_FOR_CONDITIONAL_USE) if style_detected_api_used?(cond) - end - end - - private - - attr_reader :correct_style_detected_called, - :negative_style_detected_methods_called, - :style_detected_called - - def positive_without_negative? - correct_style_detected_called && !negative_style_detected_methods_called - end - - def negative_without_positive? - negative_style_detected_methods_called && !correct_style_detected_called - end - - def style_detected_api_used?(node) - correct_style_detected_check(node) || - negative_style_detected_method_check(node) || - no_acceptable_style_check(node) || - style_detected_check(node) - end - - def traverse_condition(condition, &block) - yield condition if condition.send_type? - - condition.each_child_node { |child| traverse_condition(child, &block) } - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/undefined_config.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/undefined_config.rb deleted file mode 100644 index bb248c80..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/undefined_config.rb +++ /dev/null @@ -1,73 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - module InternalAffairs - # Looks for references to a cop configuration key that isn't defined in config/default.yml. - class UndefinedConfig < Base - ALLOWED_CONFIGURATIONS = %w[ - Safe SafeAutoCorrect AutoCorrect Severity StyleGuide Details Reference Include Exclude - ].freeze - RESTRICT_ON_SEND = %i[[] fetch].freeze - MSG = '`%s` is not defined in the configuration for `%s` ' \ - 'in `config/default.yml`.' - - # @!method cop_class_def(node) - def_node_search :cop_class_def, <<~PATTERN - (class _ - (const {nil? (const nil? :Cop) (const (const {cbase nil?} :RuboCop) :Cop)} - {:Base :Cop}) ...) - PATTERN - - # @!method cop_config_accessor?(node) - def_node_matcher :cop_config_accessor?, <<~PATTERN - (send (send nil? :cop_config) {:[] :fetch} ${str sym}...) - PATTERN - - def on_new_investigation - super - return unless processed_source.ast - - cop_class = cop_class_def(processed_source.ast).first - return unless (@cop_class_name = extract_cop_name(cop_class)) - - @config_for_cop = RuboCop::ConfigLoader.default_configuration.for_cop(@cop_class_name) - end - - def on_send(node) - return unless cop_class_name - return unless (config_name_node = cop_config_accessor?(node)) - return if always_allowed?(config_name_node) - return if configuration_key_defined?(config_name_node) - - message = format(MSG, name: config_name_node.value, cop: cop_class_name) - add_offense(config_name_node, message: message) - end - - private - - attr_reader :config_for_cop, :cop_class_name - - def extract_cop_name(class_node) - return unless class_node - - segments = [class_node].concat( - class_node.each_ancestor(:class, :module).take_while do |n| - n.identifier.short_name != :Cop - end - ) - - segments.reverse_each.map { |s| s.identifier.short_name }.join('/') - end - - def always_allowed?(node) - ALLOWED_CONFIGURATIONS.include?(node.value) - end - - def configuration_key_defined?(node) - config_for_cop.key?(node.value) - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb deleted file mode 100644 index c31a4b57..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/useless_message_assertion.rb +++ /dev/null @@ -1,54 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - module InternalAffairs - # Checks that cops are not tested using `described_class::MSG`. - # - # @example - # - # # bad - # expect(cop.messages).to eq([described_class::MSG]) - # - # # good - # expect(cop.messages).to eq(['Do not write bad code like that.']) - # - class UselessMessageAssertion < Base - MSG = 'Do not specify cop behavior using `described_class::MSG`.' - - # @!method described_class_msg(node) - def_node_search :described_class_msg, <<~PATTERN - (const (send nil? :described_class) :MSG) - PATTERN - - # @!method rspec_expectation_on_msg?(node) - def_node_matcher :rspec_expectation_on_msg?, <<~PATTERN - (send (send nil? :expect #contains_described_class_msg?) :to ...) - PATTERN - - def on_new_investigation - return if processed_source.blank? - - assertions_using_described_class_msg.each { |node| add_offense(node) } - end - - private - - def contains_described_class_msg?(node) - described_class_msg(node).any? - end - - def assertions_using_described_class_msg - described_class_msg(processed_source.ast).reject do |node| - node.ancestors.any? { |ancestor| rspec_expectation_on_msg?(ancestor) } - end - end - - # Only process spec files - def relevant_file?(file) - file.end_with?('_spec.rb') - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/useless_restrict_on_send.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/useless_restrict_on_send.rb deleted file mode 100644 index f7a32568..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/internal_affairs/useless_restrict_on_send.rb +++ /dev/null @@ -1,60 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - module InternalAffairs - # Check for useless `RESTRICT_ON_SEND`. - # - # @example - # # bad - # class FooCop - # RESTRICT_ON_SEND = %i[bad_method].freeze - # end - # - # # good - # class FooCop - # RESTRICT_ON_SEND = %i[bad_method].freeze - # def on_send(node) - # # ... - # end - # end - # - # # good - # class FooCop - # RESTRICT_ON_SEND = %i[bad_method].freeze - # def after_send(node) - # # ... - # end - # end - # - class UselessRestrictOnSend < Base - extend AutoCorrector - - MSG = 'Useless `RESTRICT_ON_SEND` is defined.' - - # @!method defined_send_callback?(node) - def_node_search :defined_send_callback?, <<~PATTERN - { - (def {:on_send :after_send} ...) - (alias (sym {:on_send :after_send}) _source ...) - (send nil? :alias_method {(sym {:on_send :after_send}) (str {"on_send" "after_send"})} _source ...) - } - PATTERN - - def on_casgn(node) - return if !restrict_on_send?(node) || defined_send_callback?(node.parent) - - add_offense(node) do |corrector| - corrector.remove(node) - end - end - - private - - def restrict_on_send?(node) - node.name == :RESTRICT_ON_SEND - end - end - end - end -end diff --git a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/access_modifier_indentation.rb b/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/access_modifier_indentation.rb deleted file mode 100644 index 82d887e0..00000000 --- a/bundle/ruby/3.2.0/gems/rubocop-1.61.0/lib/rubocop/cop/layout/access_modifier_indentation.rb +++ /dev/null @@ -1,100 +0,0 @@ -# frozen_string_literal: true - -module RuboCop - module Cop - module Layout - # Bare access modifiers (those not applying to specific methods) should be - # indented as deep as method definitions, or as deep as the class/module - # keyword, depending on configuration. - # - # @example EnforcedStyle: indent (default) - # # bad - # class Plumbus - # private - # def smooth; end - # end - # - # # good - # class Plumbus - # private - # def smooth; end - # end - # - # @example EnforcedStyle: outdent - # # bad - # class Plumbus - # private - # def smooth; end - # end - # - # # good - # class Plumbus - # private - # def smooth; end - # end - class AccessModifierIndentation < Base - include Alignment - include ConfigurableEnforcedStyle - include RangeHelp - extend AutoCorrector - - MSG = '%

    ahumEIvl&YO*@0#nnb=WGm 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≦+ypv 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 diff --git a/bundle/ruby/3.2.0/gems/racc-1.7.3/lib/racc/debugflags.rb b/bundle/ruby/3.2.0/gems/racc-1.7.3/lib/racc/debugflags.rb deleted file mode 100644 index ee34cf23..00000000 --- a/bundle/ruby/3.2.0/gems/racc-1.7.3/lib/racc/debugflags.rb +++ /dev/null @@ -1,60 +0,0 @@ -#-- -# -# -# -# Copyright (c) 1999-2006 Minero Aoki -# -# This program is free software. -# You can distribute/modify this program under the same terms of ruby. -# see the file "COPYING". -# -#++ - -module Racc - - class DebugFlags - def DebugFlags.parse_option_string(s) - parse = rule = token = state = la = prec = conf = false - s.split(//).each do |ch| - case ch - when 'p' then parse = true - when 'r' then rule = true - when 't' then token = true - when 's' then state = true - when 'l' then la = true - when 'c' then prec = true - when 'o' then conf = true - else - raise "unknown debug flag char: #{ch.inspect}" - end - end - new(parse, rule, token, state, la, prec, conf) - end - - def initialize(parse = false, rule = false, token = false, state = false, - la = false, prec = false, conf = false) - @parse = parse - @rule = rule - @token = token - @state = state - @la = la - @prec = prec - @any = (parse || rule || token || state || la || prec) - @status_logging = conf - end - - attr_reader :parse - attr_reader :rule - attr_reader :token - attr_reader :state - attr_reader :la - attr_reader :prec - - def any? - @any - end - - attr_reader :status_logging - end - -end diff --git a/bundle/ruby/3.2.0/gems/racc-1.7.3/lib/racc/exception.rb b/bundle/ruby/3.2.0/gems/racc-1.7.3/lib/racc/exception.rb deleted file mode 100644 index c11dc2e4..00000000 --- a/bundle/ruby/3.2.0/gems/racc-1.7.3/lib/racc/exception.rb +++ /dev/null @@ -1,16 +0,0 @@ -#-- -# -# -# -# Copyright (c) 1999-2006 Minero Aoki -# -# This program is free software. -# You can distribute/modify this program under the same terms of ruby. -# see the file "COPYING". -# -#++ - -module Racc - class Error < StandardError; end - class CompileError < Error; end -end diff --git a/bundle/ruby/3.2.0/gems/racc-1.7.3/lib/racc/grammar.rb b/bundle/ruby/3.2.0/gems/racc-1.7.3/lib/racc/grammar.rb deleted file mode 100644 index 7159862f..00000000 --- a/bundle/ruby/3.2.0/gems/racc-1.7.3/lib/racc/grammar.rb +++ /dev/null @@ -1,1114 +0,0 @@ -#-- -# -# -# -# Copyright (c) 1999-2006 Minero Aoki -# -# This program is free software. -# You can distribute/modify this program under the same terms of ruby. -# see the file "COPYING". -# -#++ - -require 'racc/compat' -require 'racc/iset' -require 'racc/sourcetext' -require 'racc/logfilegenerator' -require 'racc/exception' -require 'forwardable' - -module Racc - - class Grammar - - def initialize(debug_flags = DebugFlags.new) - @symboltable = SymbolTable.new - @debug_symbol = debug_flags.token - @rules = [] # :: [Rule] - @start = nil - @n_expected_srconflicts = nil - @prec_table = [] - @prec_table_closed = false - @closed = false - @states = nil - end - - attr_reader :start - attr_reader :symboltable - attr_accessor :n_expected_srconflicts - - def [](x) - @rules[x] - end - - def each_rule(&block) - @rules.each(&block) - end - - alias each each_rule - - def each_index(&block) - @rules.each_index(&block) - end - - def each_with_index(&block) - @rules.each_with_index(&block) - end - - def size - @rules.size - end - - def to_s - "" - end - - extend Forwardable - - def_delegator "@symboltable", :each, :each_symbol - def_delegator "@symboltable", :each_terminal - def_delegator "@symboltable", :each_nonterminal - - def intern(value, dummy = false) - @symboltable.intern(value, dummy) - end - - def symbols - @symboltable.symbols - end - - def nonterminal_base - @symboltable.nt_base - end - - def useless_nonterminal_exist? - n_useless_nonterminals() != 0 - end - - def n_useless_nonterminals - @n_useless_nonterminals ||= each_useless_nonterminal.count - end - - def each_useless_nonterminal - return to_enum __method__ unless block_given? - - @symboltable.each_nonterminal do |sym| - yield sym if sym.useless? - end - end - - def useless_rule_exist? - n_useless_rules() != 0 - end - - def n_useless_rules - @n_useless_rules ||= each_useless_rule.count - end - - def each_useless_rule - return to_enum __method__ unless block_given? - - each do |r| - yield r if r.useless? - end - end - - def nfa - (@states ||= States.new(self)).nfa - end - - def dfa - (@states ||= States.new(self)).dfa - end - - alias states dfa - - def state_transition_table - states().state_transition_table - end - - def parser_class - states = states() # cache - if $DEBUG - srcfilename = caller(1).first.slice(/\A(.*?):/, 1) - begin - write_log srcfilename + ".output" - rescue SystemCallError - end - report = lambda {|s| $stderr.puts "racc: #{srcfilename}: #{s}" } - if states.should_report_srconflict? - report["#{states.n_srconflicts} shift/reduce conflicts"] - end - if states.rrconflict_exist? - report["#{states.n_rrconflicts} reduce/reduce conflicts"] - end - g = states.grammar - if g.useless_nonterminal_exist? - report["#{g.n_useless_nonterminals} useless nonterminals"] - end - if g.useless_rule_exist? - report["#{g.n_useless_rules} useless rules"] - end - end - states.state_transition_table.parser_class - end - - def write_log(path) - File.open(path, 'w') {|f| - LogFileGenerator.new(states()).output f - } - end - - # - # Grammar Definition Interface - # - - def add(rule) - raise ArgumentError, "rule added after the Grammar closed" if @closed - @rules.push rule - end - - def added?(sym) - @rules.detect {|r| r.target == sym } - end - - def start_symbol=(s) - raise CompileError, "start symbol set twice'" if @start - @start = s - end - - def declare_precedence(assoc, syms) - raise CompileError, "precedence table defined twice" if @prec_table_closed - @prec_table.push [assoc, syms] - end - - def end_precedence_declaration(reverse) - @prec_table_closed = true - return if @prec_table.empty? - table = reverse ? @prec_table.reverse : @prec_table - table.each_with_index do |(assoc, syms), idx| - syms.each do |sym| - sym.assoc = assoc - sym.precedence = idx - end - end - end - - # - # Dynamic Generation Interface - # - - def Grammar.define(&block) - env = DefinitionEnv.new - env.instance_eval(&block) - env.grammar - end - - class DefinitionEnv - def initialize - @grammar = Grammar.new - @seqs = Hash.new(0) - @delayed = [] - end - - def grammar - flush_delayed - @grammar.each do |rule| - if rule.specified_prec - rule.specified_prec = @grammar.intern(rule.specified_prec) - end - end - @grammar.init - @grammar - end - - def precedence_table(&block) - env = PrecedenceDefinitionEnv.new(@grammar) - env.instance_eval(&block) - @grammar.end_precedence_declaration env.reverse - end - - def method_missing(mid, *args, &block) - unless mid.to_s[-1,1] == '=' - super # raises NoMethodError - end - target = @grammar.intern(mid.to_s.chop.intern) - unless args.size == 1 - raise ArgumentError, "too many arguments for #{mid} (#{args.size} for 1)" - end - _add target, args.first - end - - def _add(target, x) - case x - when Sym - @delayed.each do |rule| - rule.replace x, target if rule.target == x - end - @grammar.symboltable.delete x - else - x.each_rule do |r| - r.target = target - @grammar.add r - end - end - flush_delayed - end - - def _delayed_add(rule) - @delayed.push rule - end - - def _added?(sym) - @grammar.added?(sym) or @delayed.detect {|r| r.target == sym } - end - - def flush_delayed - return if @delayed.empty? - @delayed.each do |rule| - @grammar.add rule - end - @delayed.clear - end - - def seq(*list, &block) - Rule.new(nil, list.map {|x| _intern(x) }, UserAction.proc(block)) - end - - def null(&block) - seq(&block) - end - - def action(&block) - id = "@#{@seqs["action"] += 1}".intern - _delayed_add Rule.new(@grammar.intern(id), [], UserAction.proc(block)) - id - end - - alias _ action - - def option(sym, default = nil, &block) - _defmetasyntax("option", _intern(sym), block) {|target| - seq() { default } | seq(sym) - } - end - - def many(sym, &block) - _defmetasyntax("many", _intern(sym), block) {|target| - seq() { [] }\ - | seq(target, sym) {|list, x| list.push x; list } - } - end - - def many1(sym, &block) - _defmetasyntax("many1", _intern(sym), block) {|target| - seq(sym) {|x| [x] }\ - | seq(target, sym) {|list, x| list.push x; list } - } - end - - def separated_by(sep, sym, &block) - option(separated_by1(sep, sym), [], &block) - end - - def separated_by1(sep, sym, &block) - _defmetasyntax("separated_by1", _intern(sym), block) {|target| - seq(sym) {|x| [x] }\ - | seq(target, sep, sym) {|list, _, x| list.push x; list } - } - end - - def _intern(x) - case x - when Symbol, String - @grammar.intern(x) - when Racc::Sym - x - else - raise TypeError, "wrong type #{x.class} (expected Symbol/String/Racc::Sym)" - end - end - - private - - def _defmetasyntax(type, id, action, &block) - if action - idbase = "#{type}@#{id}-#{@seqs[type] += 1}" - target = _wrap(idbase, "#{idbase}-core", action) - _register("#{idbase}-core", &block) - else - target = _register("#{type}@#{id}", &block) - end - @grammar.intern(target) - end - - def _register(target_name) - target = target_name.intern - unless _added?(@grammar.intern(target)) - yield(target).each_rule do |rule| - rule.target = @grammar.intern(target) - _delayed_add rule - end - end - target - end - - def _wrap(target_name, sym, block) - target = target_name.intern - _delayed_add Rule.new(@grammar.intern(target), - [@grammar.intern(sym.intern)], - UserAction.proc(block)) - target - end - end - - class PrecedenceDefinitionEnv - def initialize(g) - @grammar = g - @prechigh_seen = false - @preclow_seen = false - @reverse = false - end - - attr_reader :reverse - - def higher - if @prechigh_seen - raise CompileError, "prechigh used twice" - end - @prechigh_seen = true - end - - def lower - if @preclow_seen - raise CompileError, "preclow used twice" - end - if @prechigh_seen - @reverse = true - end - @preclow_seen = true - end - - def left(*syms) - @grammar.declare_precedence :Left, syms.map {|s| @grammar.intern(s) } - end - - def right(*syms) - @grammar.declare_precedence :Right, syms.map {|s| @grammar.intern(s) } - end - - def nonassoc(*syms) - @grammar.declare_precedence :Nonassoc, syms.map {|s| @grammar.intern(s)} - end - end - - # - # Computation - # - - def init - return if @closed - @closed = true - @start ||= @rules.map {|r| r.target }.detect {|sym| not sym.dummy? } - raise CompileError, 'no rule in input' if @rules.empty? - add_start_rule - @rules.freeze - fix_ident - compute_hash - compute_heads - determine_terminals - compute_nullable_0 - @symboltable.fix - compute_locate - @symboltable.each_nonterminal {|t| compute_expand t } - compute_nullable - compute_useless - end - - private - - def add_start_rule - r = Rule.new(@symboltable.dummy, - [@start, @symboltable.anchor, @symboltable.anchor], - UserAction.empty) - r.ident = 0 - r.hash = 0 - r.precedence = nil - @rules.unshift r - end - - # Rule#ident - # LocationPointer#ident - def fix_ident - @rules.each_with_index do |rule, idx| - rule.ident = idx - end - end - - # Rule#hash - def compute_hash - hash = 4 # size of dummy rule - @rules.each do |rule| - rule.hash = hash - hash += (rule.size + 1) - end - end - - # Sym#heads - def compute_heads - @rules.each do |rule| - rule.target.heads.push rule.ptrs[0] - end - end - - # Sym#terminal? - def determine_terminals - @symboltable.each do |s| - s.term = s.heads.empty? - end - end - - # Sym#self_null? - def compute_nullable_0 - @symboltable.each do |s| - if s.terminal? - s.snull = false - else - s.snull = s.heads.any? {|loc| loc.reduce? } - end - end - end - - # Sym#locate - def compute_locate - @rules.each do |rule| - t = nil - rule.ptrs.each do |ptr| - unless ptr.reduce? - tok = ptr.dereference - tok.locate.push ptr - t = tok if tok.terminal? - end - end - rule.precedence = t - end - end - - # Sym#expand - def compute_expand(t) - puts "expand> #{t.to_s}" if @debug_symbol - t.expand = _compute_expand(t, ISet.new, []) - puts "expand< #{t.to_s}: #{t.expand.to_s}" if @debug_symbol - end - - def _compute_expand(t, set, lock) - if tmp = t.expand - set.update tmp - return set - end - tok = nil - set.update_a t.heads - t.heads.each do |ptr| - tok = ptr.dereference - if tok and tok.nonterminal? - unless lock[tok.ident] - lock[tok.ident] = true - _compute_expand tok, set, lock - end - end - end - set - end - - # Sym#nullable?, Rule#nullable? - def compute_nullable - @rules.each {|r| r.null = false } - @symboltable.each {|t| t.null = false } - r = @rules.dup - s = @symboltable.nonterminals - begin - rs = r.size - ss = s.size - check_rules_nullable r - check_symbols_nullable s - end until rs == r.size and ss == s.size - end - - def check_rules_nullable(rules) - rules.delete_if do |rule| - rule.null = true - rule.symbols.each do |t| - unless t.nullable? - rule.null = false - break - end - end - rule.nullable? - end - end - - def check_symbols_nullable(symbols) - symbols.delete_if do |sym| - sym.heads.each do |ptr| - if ptr.rule.nullable? - sym.null = true - break - end - end - sym.nullable? - end - end - - # Sym#useless?, Rule#useless? - # FIXME: what means "useless"? - def compute_useless - @symboltable.each_terminal {|sym| sym.useless = false } - @symboltable.each_nonterminal {|sym| sym.useless = true } - @rules.each {|rule| rule.useless = true } - r = @rules.dup - s = @symboltable.nonterminals - begin - rs = r.size - ss = s.size - check_rules_useless r - check_symbols_useless s - end until r.size == rs and s.size == ss - end - - def check_rules_useless(rules) - rules.delete_if do |rule| - rule.useless = false - rule.symbols.each do |sym| - if sym.useless? - rule.useless = true - break - end - end - not rule.useless? - end - end - - def check_symbols_useless(s) - s.delete_if do |t| - t.heads.each do |ptr| - unless ptr.rule.useless? - t.useless = false - break - end - end - not t.useless? - end - end - - end # class Grammar - - - class Rule - - def initialize(target, syms, act) - @target = target - @symbols = syms - @action = act - @alternatives = [] - - @ident = nil - @hash = nil - @ptrs = nil - @precedence = nil - @specified_prec = nil - @null = nil - @useless = nil - end - - attr_accessor :target - attr_reader :symbols - attr_reader :action - - def |(x) - @alternatives.push x.rule - self - end - - def rule - self - end - - def each_rule(&block) - yield self - @alternatives.each(&block) - end - - attr_accessor :ident - - attr_reader :hash - attr_reader :ptrs - - def hash=(n) - @hash = n - ptrs = [] - @symbols.each_with_index do |sym, idx| - ptrs.push LocationPointer.new(self, idx, sym) - end - ptrs.push LocationPointer.new(self, @symbols.size, nil) - @ptrs = ptrs - end - - def precedence - @specified_prec || @precedence - end - - def precedence=(sym) - @precedence ||= sym - end - - def prec(sym, &block) - @specified_prec = sym - if block - unless @action.empty? - raise CompileError, 'both of rule action block and prec block given' - end - @action = UserAction.proc(block) - end - self - end - - attr_accessor :specified_prec - - def nullable?() @null end - def null=(n) @null = n end - - def useless?() @useless end - def useless=(u) @useless = u end - - def inspect - "#" - end - - def ==(other) - other.kind_of?(Rule) and @ident == other.ident - end - - def [](idx) - @symbols[idx] - end - - def size - @symbols.size - end - - def empty? - @symbols.empty? - end - - def to_s - "#" - end - - def accept? - if tok = @symbols[-1] - tok.anchor? - else - false - end - end - - def each(&block) - @symbols.each(&block) - end - - def replace(src, dest) - @target = dest - @symbols = @symbols.map {|s| s == src ? dest : s } - end - - end # class Rule - - - class UserAction - - def UserAction.source_text(src) - new(src, nil) - end - - def UserAction.proc(pr = nil, &block) - if pr and block - raise ArgumentError, "both of argument and block given" - end - new(nil, pr || block) - end - - def UserAction.empty - new(nil, nil) - end - - private_class_method :new - - def initialize(src, proc) - @source = src - @proc = proc - end - - attr_reader :source - attr_reader :proc - - def source? - not @proc - end - - def proc? - not @source - end - - def empty? - not @proc and not @source - end - - def name - "{action type=#{@source || @proc || 'nil'}}" - end - - alias inspect name - - end - - - class OrMark - def initialize(lineno) - @lineno = lineno - end - - def name - '|' - end - - alias inspect name - - attr_reader :lineno - end - - - class Prec - def initialize(symbol, lineno) - @symbol = symbol - @lineno = lineno - end - - def name - "=#{@symbol}" - end - - alias inspect name - - attr_reader :symbol - attr_reader :lineno - end - - - # - # A set of rule and position in it's RHS. - # Note that the number of pointers is more than rule's RHS array, - # because pointer points right edge of the final symbol when reducing. - # - class LocationPointer - - def initialize(rule, i, sym) - @rule = rule - @index = i - @symbol = sym - @ident = @rule.hash + i - @reduce = sym.nil? - end - - attr_reader :rule - attr_reader :index - attr_reader :symbol - - alias dereference symbol - - attr_reader :ident - alias hash ident - attr_reader :reduce - alias reduce? reduce - - def to_s - sprintf('(%d,%d %s)', - @rule.ident, @index, (reduce?() ? '#' : @symbol.to_s)) - end - - alias inspect to_s - - def eql?(ot) - @hash == ot.hash - end - - alias == eql? - - def head? - @index == 0 - end - - def next - @rule.ptrs[@index + 1] or ptr_bug! - end - - alias increment next - - def before(len) - @rule.ptrs[@index - len] or ptr_bug! - end - - private - - def ptr_bug! - raise "racc: fatal: pointer not exist: self: #{to_s}" - end - - end # class LocationPointer - - - class SymbolTable - - include Enumerable - - def initialize - @symbols = [] # :: [Racc::Sym] - @cache = {} # :: {(String|Symbol) => Racc::Sym} - @dummy = intern(:$start, true) - @anchor = intern(false, true) # Symbol ID = 0 - @error = intern(:error, false) # Symbol ID = 1 - end - - attr_reader :dummy - attr_reader :anchor - attr_reader :error - - def [](id) - @symbols[id] - end - - def intern(val, dummy = false) - @cache[val] ||= - begin - sym = Sym.new(val, dummy) - @symbols.push sym - sym - end - end - - attr_reader :symbols - alias to_a symbols - - def delete(sym) - @symbols.delete sym - @cache.delete sym.value - end - - attr_reader :nt_base - - def nt_max - @symbols.size - end - - def each(&block) - @symbols.each(&block) - end - - def terminals(&block) - @symbols[0, @nt_base] - end - - def each_terminal(&block) - @terms.each(&block) - end - - def nonterminals - @symbols[@nt_base, @symbols.size - @nt_base] - end - - def each_nonterminal(&block) - @nterms.each(&block) - end - - def fix - terms, nterms = @symbols.partition {|s| s.terminal? } - @symbols = terms + nterms - @terms = terms - @nterms = nterms - @nt_base = terms.size - fix_ident - check_terminals - end - - private - - def fix_ident - @symbols.each_with_index do |t, i| - t.ident = i - end - end - - def check_terminals - return unless @symbols.any? {|s| s.should_terminal? } - @anchor.should_terminal - @error.should_terminal - each_terminal do |t| - t.should_terminal if t.string_symbol? - end - each do |s| - s.should_terminal if s.assoc - end - terminals().reject {|t| t.should_terminal? }.each do |t| - raise CompileError, "terminal #{t} not declared as terminal" - end - nonterminals().select {|n| n.should_terminal? }.each do |n| - raise CompileError, "symbol #{n} declared as terminal but is not terminal" - end - end - - end # class SymbolTable - - - # Stands terminal and nonterminal symbols. - class Sym - - def initialize(value, dummyp) - @ident = nil - @value = value - @dummyp = dummyp - - @term = nil - @nterm = nil - @should_terminal = false - @precedence = nil - case value - when Symbol - @to_s = value.to_s - @serialized = value.inspect - @string = false - when String - @to_s = value.inspect - @serialized = value.dump - @string = true - when false - @to_s = '$end' - @serialized = 'false' - @string = false - else - raise ArgumentError, "unknown symbol value: #{value.class}" - end - - @heads = [] - @locate = [] - @snull = nil - @null = nil - @expand = nil - @useless = nil - end - - class << self - def once_writer(nm) - nm = nm.id2name - module_eval(<<-EOS) - def #{nm}=(v) - raise 'racc: fatal: @#{nm} != nil' unless @#{nm}.nil? - @#{nm} = v - end - EOS - end - end - - once_writer :ident - attr_reader :ident - - alias hash ident - - attr_reader :value - - def dummy? - @dummyp - end - - def terminal? - @term - end - - def nonterminal? - @nterm - end - - def term=(t) - raise 'racc: fatal: term= called twice' unless @term.nil? - @term = t - @nterm = !t - end - - def should_terminal - @should_terminal = true - end - - def should_terminal? - @should_terminal - end - - def string_symbol? - @string - end - - def serialize - @serialized - end - - attr_writer :serialized - - attr_accessor :precedence - attr_accessor :assoc - - def to_s - @to_s.dup - end - - alias inspect to_s - - def |(x) - rule() | x.rule - end - - def rule - Rule.new(nil, [self], UserAction.empty) - end - - # - # cache - # - - attr_reader :heads - attr_reader :locate - - def self_null? - @snull - end - - once_writer :snull - - def nullable? - @null - end - - def null=(n) - @null = n - end - - attr_reader :expand - once_writer :expand - - def useless? - @useless - end - - def useless=(f) - @useless = f - end - - end # class Sym - -end # module Racc diff --git a/bundle/ruby/3.2.0/gems/racc-1.7.3/lib/racc/grammarfileparser.rb b/bundle/ruby/3.2.0/gems/racc-1.7.3/lib/racc/grammarfileparser.rb deleted file mode 100644 index c7d1207f..00000000 --- a/bundle/ruby/3.2.0/gems/racc-1.7.3/lib/racc/grammarfileparser.rb +++ /dev/null @@ -1,561 +0,0 @@ -#-- -# -# -# -# Copyright (c) 1999-2006 Minero Aoki -# -# This program is free software. -# You can distribute/modify this program under the same terms of ruby. -# see the file "COPYING". -# -#++ - -require 'racc' -require 'racc/compat' -require 'racc/grammar' -require 'racc/parserfilegenerator' -require 'racc/sourcetext' -require 'stringio' - -module Racc - - grammar = Grammar.define { - g = self - - g.class = seq(:CLASS, :cname, many(:param), :RULE, :rules, option(:END)) - - g.cname = seq(:rubyconst) {|name| - @result.params.classname = name - }\ - | seq(:rubyconst, "<", :rubyconst) {|c, _, s| - @result.params.classname = c - @result.params.superclass = s - } - - g.rubyconst = separated_by1(:colon2, :SYMBOL) {|syms| - syms.map {|s| s.to_s }.join('::') - } - - g.colon2 = seq(':', ':') - - g.param = seq(:CONV, many1(:convdef), :END) {|*| - #@grammar.end_convert_block # FIXME - }\ - | seq(:PRECHIGH, many1(:precdef), :PRECLOW) {|*| - @grammar.end_precedence_declaration true - }\ - | seq(:PRECLOW, many1(:precdef), :PRECHIGH) {|*| - @grammar.end_precedence_declaration false - }\ - | seq(:START, :symbol) {|_, sym| - @grammar.start_symbol = sym - }\ - | seq(:TOKEN, :symbols) {|_, syms| - syms.each do |s| - s.should_terminal - end - }\ - | seq(:OPTION, :options) {|_, syms| - syms.each do |opt| - case opt - when 'result_var' - @result.params.result_var = true - when 'no_result_var' - @result.params.result_var = false - when 'omit_action_call' - @result.params.omit_action_call = true - when 'no_omit_action_call' - @result.params.omit_action_call = false - else - raise CompileError, "unknown option: #{opt}" - end - end - }\ - | seq(:EXPECT, :DIGIT) {|_, num| - if @grammar.n_expected_srconflicts - raise CompileError, "`expect' seen twice" - end - @grammar.n_expected_srconflicts = num - } - - g.convdef = seq(:symbol, :STRING) {|sym, code| - sym.serialized = code - } - - g.precdef = seq(:LEFT, :symbols) {|_, syms| - @grammar.declare_precedence :Left, syms - }\ - | seq(:RIGHT, :symbols) {|_, syms| - @grammar.declare_precedence :Right, syms - }\ - | seq(:NONASSOC, :symbols) {|_, syms| - @grammar.declare_precedence :Nonassoc, syms - } - - g.symbols = seq(:symbol) {|sym| - [sym] - }\ - | seq(:symbols, :symbol) {|list, sym| - list.push sym - list - }\ - | seq(:symbols, "|") - - g.symbol = seq(:SYMBOL) {|sym| @grammar.intern(sym) }\ - | seq(:STRING) {|str| @grammar.intern(str) } - - g.options = many(:SYMBOL) {|syms| syms.map {|s| s.to_s } } - - g.rules = option(:rules_core) {|list| - add_rule_block list unless list.empty? - nil - } - - g.rules_core = seq(:symbol) {|sym| - [sym] - }\ - | seq(:rules_core, :rule_item) {|list, i| - list.push i - list - }\ - | seq(:rules_core, ';') {|list, *| - add_rule_block list unless list.empty? - list.clear - list - }\ - | seq(:rules_core, ':') {|list, *| - next_target = list.pop - add_rule_block list unless list.empty? - [next_target] - } - - g.rule_item = seq(:symbol)\ - | seq("|") {|*| - OrMark.new(@scanner.lineno) - }\ - | seq("=", :symbol) {|_, sym| - Prec.new(sym, @scanner.lineno) - }\ - | seq(:ACTION) {|src| - UserAction.source_text(src) - } - } - - GrammarFileParser = grammar.parser_class - - if grammar.states.srconflict_exist? - raise 'Racc boot script fatal: S/R conflict in build' - end - if grammar.states.rrconflict_exist? - raise 'Racc boot script fatal: R/R conflict in build' - end - - class GrammarFileParser # reopen - - class Result - def initialize(grammar) - @grammar = grammar - @params = ParserFileGenerator::Params.new - end - - attr_reader :grammar - attr_reader :params - end - - def GrammarFileParser.parse_file(filename) - parse(File.read(filename), filename, 1) - end - - def GrammarFileParser.parse(src, filename = '-', lineno = 1) - new().parse(src, filename, lineno) - end - - def initialize(debug_flags = DebugFlags.new) - @yydebug = debug_flags.parse - end - - def parse(src, filename = '-', lineno = 1) - @filename = filename - @lineno = lineno - @scanner = GrammarFileScanner.new(src, @filename) - @scanner.debug = @yydebug - @grammar = Grammar.new - @result = Result.new(@grammar) - @embedded_action_seq = 0 - yyparse @scanner, :yylex - parse_user_code - @result.grammar.init - @result - end - - private - - def next_token - @scanner.scan - end - - def on_error(tok, val, _values) - if val.respond_to?(:id2name) - v = val.id2name - elsif val.kind_of?(String) - v = val - else - v = val.inspect - end - raise CompileError, "#{location()}: unexpected token '#{v}'" - end - - def location - "#{@filename}:#{@lineno - 1 + @scanner.lineno}" - end - - def add_rule_block(list) - sprec = nil - target = list.shift - case target - when OrMark, UserAction, Prec - raise CompileError, "#{target.lineno}: unexpected symbol #{target.name}" - end - curr = [] - list.each do |i| - case i - when OrMark - add_rule target, curr, sprec - curr = [] - sprec = nil - when Prec - raise CompileError, "'=' used twice in one rule" if sprec - sprec = i.symbol - else - curr.push i - end - end - add_rule target, curr, sprec - end - - def add_rule(target, list, sprec) - if list.last.kind_of?(UserAction) - act = list.pop - else - act = UserAction.empty - end - list.map! {|s| s.kind_of?(UserAction) ? embedded_action(s) : s } - rule = Rule.new(target, list, act) - rule.specified_prec = sprec - @grammar.add rule - end - - def embedded_action(act) - sym = @grammar.intern("@#{@embedded_action_seq += 1}".intern, true) - @grammar.add Rule.new(sym, [], act) - sym - end - - # - # User Code Block - # - - def parse_user_code - line = @scanner.lineno - _, *blocks = *@scanner.epilogue.split(/^----/) - blocks.each do |block| - header, *body = block.lines.to_a - label0, paths = *header.sub(/\A-+/, '').split('=', 2) - label = canonical_label(label0) - (paths ? paths.strip.split(' ') : []).each do |path| - add_user_code label, SourceText.new(File.read(path), path, 1) - end - add_user_code label, SourceText.new(body.join(''), @filename, line + 1) - line += (1 + body.size) - end - end - - USER_CODE_LABELS = { - 'header' => :header, - 'prepare' => :header, # obsolete - 'inner' => :inner, - 'footer' => :footer, - 'driver' => :footer # obsolete - } - - def canonical_label(src) - label = src.to_s.strip.downcase.slice(/\w+/) - unless USER_CODE_LABELS.key?(label) - raise CompileError, "unknown user code type: #{label.inspect}" - end - label - end - - def add_user_code(label, src) - @result.params.public_send(USER_CODE_LABELS[label]).push src - end - - end - - - class GrammarFileScanner - - def initialize(str, filename = '-') - @lines = str.b.split(/\n|\r\n|\r/) - @filename = filename - @lineno = -1 - @line_head = true - @in_rule_blk = false - @in_conv_blk = false - @in_block = nil - @epilogue = '' - @debug = false - next_line - end - - attr_reader :epilogue - - def lineno - @lineno + 1 - end - - attr_accessor :debug - - def yylex(&block) - unless @debug - yylex0(&block) - else - yylex0 do |sym, tok| - $stderr.printf "%7d %-10s %s\n", lineno(), sym.inspect, tok.inspect - yield [sym, tok] - end - end - end - - private - - def yylex0 - begin - until @line.empty? - @line.sub!(/\A\s+/, '') - if /\A\#/ =~ @line - break - elsif /\A\/\*/ =~ @line - skip_comment - elsif s = reads(/\A[a-zA-Z_]\w*/) - yield [atom_symbol(s), s.intern] - elsif s = reads(/\A\d+/) - yield [:DIGIT, s.to_i] - elsif ch = reads(/\A./) - case ch - when '"', "'" - yield [:STRING, eval(scan_quoted(ch))] - when '{' - lineno = lineno() - yield [:ACTION, SourceText.new(scan_action(), @filename, lineno)] - else - if ch == '|' - @line_head = false - end - yield [ch, ch] - end - else - end - end - end while next_line() - yield nil - end - - def next_line - @lineno += 1 - @line = @lines[@lineno] - if not @line or /\A----/ =~ @line - @epilogue = @lines.join("\n") - @lines.clear - @line = nil - if @in_block - @lineno -= 1 - scan_error! sprintf('unterminated %s', @in_block) - end - false - else - @line.sub!(/(?:\n|\r\n|\r)\z/, '') - @line_head = true - true - end - end - - ReservedWord = { - 'right' => :RIGHT, - 'left' => :LEFT, - 'nonassoc' => :NONASSOC, - 'preclow' => :PRECLOW, - 'prechigh' => :PRECHIGH, - 'token' => :TOKEN, - 'convert' => :CONV, - 'options' => :OPTION, - 'start' => :START, - 'expect' => :EXPECT, - 'class' => :CLASS, - 'rule' => :RULE, - 'end' => :END - } - - def atom_symbol(token) - if token == 'end' - symbol = :END - @in_conv_blk = false - @in_rule_blk = false - else - if @line_head and not @in_conv_blk and not @in_rule_blk - symbol = ReservedWord[token] || :SYMBOL - else - symbol = :SYMBOL - end - case symbol - when :RULE then @in_rule_blk = true - when :CONV then @in_conv_blk = true - end - end - @line_head = false - symbol - end - - def skip_comment - @in_block = 'comment' - until m = /\*\//.match(@line) - next_line - end - @line = m.post_match - @in_block = nil - end - - $raccs_print_type = false - - def scan_action - buf = String.new - nest = 1 - pre = nil - @in_block = 'action' - begin - pre = nil - if s = reads(/\A\s+/) - # does not set 'pre' - buf << s - end - until @line.empty? - if s = reads(/\A[^'"`{}%#\/\$]+/) - buf << (pre = s) - next - end - case ch = read(1) - when '{' - nest += 1 - buf << (pre = ch) - when '}' - nest -= 1 - if nest == 0 - @in_block = nil - buf.sub!(/[ \t\f]+\z/, '') - return buf - end - buf << (pre = ch) - when '#' # comment - buf << ch << @line - break - when "'", '"', '`' - buf << (pre = scan_quoted(ch)) - when '%' - if literal_head? pre, @line - # % string, regexp, array - buf << ch - case ch = read(1) - when /[qQx]/n - buf << ch << (pre = scan_quoted(read(1), '%string')) - when /wW/n - buf << ch << (pre = scan_quoted(read(1), '%array')) - when /s/n - buf << ch << (pre = scan_quoted(read(1), '%symbol')) - when /r/n - buf << ch << (pre = scan_quoted(read(1), '%regexp')) - when /[a-zA-Z0-9= ]/n # does not include "_" - scan_error! "unknown type of % literal '%#{ch}'" - else - buf << (pre = scan_quoted(ch, '%string')) - end - else - # operator - buf << '||op->' if $raccs_print_type - buf << (pre = ch) - end - when '/' - if literal_head? pre, @line - # regexp - buf << (pre = scan_quoted(ch, 'regexp')) - else - # operator - buf << '||op->' if $raccs_print_type - buf << (pre = ch) - end - when '$' # gvar - buf << ch << (pre = read(1)) - else - raise 'racc: fatal: must not happen' - end - end - buf << "\n" - end while next_line() - raise 'racc: fatal: scan finished before parser finished' - end - - def literal_head?(pre, post) - (!pre || /[a-zA-Z_0-9]/n !~ pre[-1,1]) && - !post.empty? && /\A[\s\=]/n !~ post - end - - def read(len) - s = @line[0, len] - @line = @line[len .. -1] - s - end - - def reads(re) - m = re.match(@line) or return nil - @line = m.post_match - m[0] - end - - def scan_quoted(left, tag = 'string') - buf = left.dup - buf = "||#{tag}->" + buf if $raccs_print_type - re = get_quoted_re(left) - sv, @in_block = @in_block, tag - begin - if s = reads(re) - buf << s - break - else - buf << @line - end - end while next_line() - @in_block = sv - buf << "<-#{tag}||" if $raccs_print_type - buf - end - - LEFT_TO_RIGHT = { - '(' => ')', - '{' => '}', - '[' => ']', - '<' => '>' - } - - CACHE = {} - - def get_quoted_re(left) - term = Regexp.quote(LEFT_TO_RIGHT[left] || left) - CACHE[left] ||= /\A[^#{term}\\]*(?:\\.[^\\#{term}]*)*#{term}/ - end - - def scan_error!(msg) - raise CompileError, "#{lineno()}: #{msg}" - end - - end - -end # module Racc diff --git a/bundle/ruby/3.2.0/gems/racc-1.7.3/lib/racc/info.rb b/bundle/ruby/3.2.0/gems/racc-1.7.3/lib/racc/info.rb deleted file mode 100644 index c5bda51e..00000000 --- a/bundle/ruby/3.2.0/gems/racc-1.7.3/lib/racc/info.rb +++ /dev/null @@ -1,18 +0,0 @@ -# frozen_string_literal: true -#-- -# -# -# -# Copyright (c) 1999-2006 Minero Aoki -# -# This program is free software. -# You can distribute/modify this program under the same terms of ruby. -# see the file "COPYING". -# -#++ - -module Racc - VERSION = '1.7.3' - Version = VERSION - Copyright = 'Copyright (c) 1999-2006 Minero Aoki' -end diff --git a/bundle/ruby/3.2.0/gems/racc-1.7.3/lib/racc/iset.rb b/bundle/ruby/3.2.0/gems/racc-1.7.3/lib/racc/iset.rb deleted file mode 100644 index 339221d2..00000000 --- a/bundle/ruby/3.2.0/gems/racc-1.7.3/lib/racc/iset.rb +++ /dev/null @@ -1,92 +0,0 @@ -#-- -# -# -# -# Copyright (c) 1999-2006 Minero Aoki -# -# This program is free software. -# You can distribute/modify this program under the same terms of ruby. -# see the file "COPYING". -# -#++ - -module Racc - - # An "indexed" set. All items must respond to :ident. - class ISet - - def initialize(a = []) - @set = a - end - - attr_reader :set - - def add(i) - @set[i.ident] = i - end - - def [](key) - @set[key.ident] - end - - def []=(key, val) - @set[key.ident] = val - end - - alias include? [] - alias key? [] - - def update(other) - s = @set - o = other.set - o.each_index do |idx| - if t = o[idx] - s[idx] = t - end - end - end - - def update_a(a) - s = @set - a.each {|i| s[i.ident] = i } - end - - def delete(key) - i = @set[key.ident] - @set[key.ident] = nil - i - end - - def each(&block) - @set.compact.each(&block) - end - - def to_a - @set.compact - end - - def to_s - "[#{@set.compact.join(' ')}]" - end - - alias inspect to_s - - def size - @set.nitems - end - - def empty? - @set.nitems == 0 - end - - def clear - @set.clear - end - - def dup - ISet.new(@set.dup) - end - - end # class ISet - -end # module Racc diff --git a/bundle/ruby/3.2.0/gems/racc-1.7.3/lib/racc/logfilegenerator.rb b/bundle/ruby/3.2.0/gems/racc-1.7.3/lib/racc/logfilegenerator.rb deleted file mode 100644 index 2f5aa0c8..00000000 --- a/bundle/ruby/3.2.0/gems/racc-1.7.3/lib/racc/logfilegenerator.rb +++ /dev/null @@ -1,212 +0,0 @@ -#-- -# -# -# -# Copyright (c) 1999-2006 Minero Aoki -# -# This program is free software. -# You can distribute/modify this program under the same terms of ruby. -# see the file "COPYING". -# -#++ - -module Racc - - class LogFileGenerator - - def initialize(states, debug_flags = DebugFlags.new) - @states = states - @grammar = states.grammar - @debug_flags = debug_flags - end - - def output(out) - output_conflict out; out.puts - output_useless out; out.puts - output_rule out; out.puts - output_token out; out.puts - output_state out - end - - # - # Warnings - # - - def output_conflict(out) - @states.each do |state| - if state.srconf - out.printf "state %d contains %d shift/reduce conflicts\n", - state.stateid, state.srconf.size - end - if state.rrconf - out.printf "state %d contains %d reduce/reduce conflicts\n", - state.stateid, state.rrconf.size - end - end - end - - def output_useless(out) - @grammar.each do |rl| - if rl.useless? - out.printf "rule %d (%s) never reduced\n", - rl.ident, rl.target.to_s - end - end - @grammar.each_nonterminal do |t| - if t.useless? - out.printf "useless nonterminal %s\n", t.to_s - end - end - end - - # - # States - # - - def output_state(out) - out << "--------- State ---------\n" - - showall = @debug_flags.la || @debug_flags.state - @states.each do |state| - out << "\nstate #{state.ident}\n\n" - - (showall ? state.closure : state.core).each do |ptr| - pointer_out(out, ptr) if ptr.rule.ident != 0 or showall - end - out << "\n" - - action_out out, state - end - end - - def pointer_out(out, ptr) - buf = sprintf("%4d) %s :", ptr.rule.ident, ptr.rule.target.to_s) - ptr.rule.symbols.each_with_index do |tok, idx| - buf << ' _' if idx == ptr.index - buf << ' ' << tok.to_s - end - buf << ' _' if ptr.reduce? - out.puts buf - end - - def action_out(f, state) - sr = state.srconf && state.srconf.dup - rr = state.rrconf && state.rrconf.dup - acts = state.action - keys = acts.keys - keys.sort! {|a,b| a.ident <=> b.ident } - - [ Shift, Reduce, Error, Accept ].each do |klass| - keys.delete_if do |tok| - act = acts[tok] - if act.kind_of?(klass) - outact f, tok, act - if sr and c = sr.delete(tok) - outsrconf f, c - end - if rr and c = rr.delete(tok) - outrrconf f, c - end - - true - else - false - end - end - end - sr.each {|tok, c| outsrconf f, c } if sr - rr.each {|tok, c| outrrconf f, c } if rr - - act = state.defact - if not act.kind_of?(Error) or @debug_flags.any? - outact f, '$default', act - end - - f.puts - state.goto_table.each do |t, st| - if t.nonterminal? - f.printf " %-12s go to state %d\n", t.to_s, st.ident - end - end - end - - def outact(f, t, act) - case act - when Shift - f.printf " %-12s shift, and go to state %d\n", - t.to_s, act.goto_id - when Reduce - f.printf " %-12s reduce using rule %d (%s)\n", - t.to_s, act.ruleid, act.rule.target.to_s - when Accept - f.printf " %-12s accept\n", t.to_s - when Error - f.printf " %-12s error\n", t.to_s - else - raise "racc: fatal: wrong act for outact: act=#{act}(#{act.class})" - end - end - - def outsrconf(f, confs) - confs.each do |c| - r = c.reduce - f.printf " %-12s [reduce using rule %d (%s)]\n", - c.shift.to_s, r.ident, r.target.to_s - end - end - - def outrrconf(f, confs) - confs.each do |c| - r = c.low_prec - f.printf " %-12s [reduce using rule %d (%s)]\n", - c.token.to_s, r.ident, r.target.to_s - end - end - - # - # Rules - # - - def output_rule(out) - out.print "-------- Grammar --------\n\n" - @grammar.each do |rl| - if @debug_flags.any? or rl.ident != 0 - out.printf "rule %d %s: %s\n", - rl.ident, rl.target.to_s, rl.symbols.join(' ') - end - end - end - - # - # Tokens - # - - def output_token(out) - out.print "------- Symbols -------\n\n" - - out.print "**Nonterminals, with rules where they appear\n\n" - @grammar.each_nonterminal do |t| - tmp = <filename] [--output-file=filename] -# [-erubypath] [--executable=rubypath] -# [-v] [--verbose] -# [-Ofilename] [--log-file=filename] -# [-g] [--debug] -# [-E] [--embedded] -# [-l] [--no-line-convert] -# [-c] [--line-convert-all] -# [-a] [--no-omit-actions] -# [-C] [--check-only] -# [-S] [--output-status] -# [--version] [--copyright] [--help] grammarfile -# -# [+grammarfile+] -# Racc grammar file. Any extension is permitted. -# [-o+outfile+, --output-file=+outfile+] -# A filename for output. default is <+filename+>.tab.rb -# [-O+filename+, --log-file=+filename+] -# Place logging output in file +filename+. -# Default log file name is <+filename+>.output. -# [-e+rubypath+, --executable=+rubypath+] -# output executable file(mode 755). where +path+ is the Ruby interpreter. -# [-v, --verbose] -# verbose mode. create +filename+.output file, like yacc's y.output file. -# [-g, --debug] -# add debug code to parser class. To display debugging information, -# use this '-g' option and set @yydebug true in parser class. -# [-E, --embedded] -# Output parser which doesn't need runtime files (racc/parser.rb). -# [-F, --frozen] -# Output parser which declares frozen_string_literals: true -# [-C, --check-only] -# Check syntax of racc grammar file and quit. -# [-S, --output-status] -# Print messages time to time while compiling. -# [-l, --no-line-convert] -# turns off line number converting. -# [-c, --line-convert-all] -# Convert line number of actions, inner, header and footer. -# [-a, --no-omit-actions] -# Call all actions, even if an action is empty. -# [--version] -# print Racc version and quit. -# [--copyright] -# Print copyright and quit. -# [--help] -# Print usage and quit. -# -# == Generating Parser Using Racc -# -# To compile Racc grammar file, simply type: -# -# $ racc parse.y -# -# This creates Ruby script file "parse.tab.y". The -o option can change the output filename. -# -# == Writing A Racc Grammar File -# -# If you want your own parser, you have to write a grammar file. -# A grammar file contains the name of your parser class, grammar for the parser, -# user code, and anything else. -# When writing a grammar file, yacc's knowledge is helpful. -# If you have not used yacc before, Racc is not too difficult. -# -# Here's an example Racc grammar file. -# -# class Calcparser -# rule -# target: exp { print val[0] } -# -# exp: exp '+' exp -# | exp '*' exp -# | '(' exp ')' -# | NUMBER -# end -# -# Racc grammar files resemble yacc files. -# But (of course), this is Ruby code. -# yacc's $$ is the 'result', $0, $1... is -# an array called 'val', and $-1, $-2... is an array called '_values'. -# -# See the {Grammar File Reference}[rdoc-ref:lib/racc/rdoc/grammar.en.rdoc] for -# more information on grammar files. -# -# == Parser -# -# Then you must prepare the parse entry method. There are two types of -# parse methods in Racc, Racc::Parser#do_parse and Racc::Parser#yyparse -# -# Racc::Parser#do_parse is simple. -# -# It's yyparse() of yacc, and Racc::Parser#next_token is yylex(). -# This method must returns an array like [TOKENSYMBOL, ITS_VALUE]. -# EOF is [false, false]. -# (TOKENSYMBOL is a Ruby symbol (taken from String#intern) by default. -# If you want to change this, see the grammar reference. -# -# Racc::Parser#yyparse is little complicated, but useful. -# It does not use Racc::Parser#next_token, instead it gets tokens from any iterator. -# -# For example, yyparse(obj, :scan) causes -# calling +obj#scan+, and you can return tokens by yielding them from +obj#scan+. -# -# == Debugging -# -# When debugging, "-v" or/and the "-g" option is helpful. -# -# "-v" creates verbose log file (.output). -# "-g" creates a "Verbose Parser". -# Verbose Parser prints the internal status when parsing. -# But it's _not_ automatic. -# You must use -g option and set +@yydebug+ to +true+ in order to get output. -# -g option only creates the verbose parser. -# -# === Racc reported syntax error. -# -# Isn't there too many "end"? -# grammar of racc file is changed in v0.10. -# -# Racc does not use '%' mark, while yacc uses huge number of '%' marks.. -# -# === Racc reported "XXXX conflicts". -# -# Try "racc -v xxxx.y". -# It causes producing racc's internal log file, xxxx.output. -# -# === Generated parsers does not work correctly -# -# Try "racc -g xxxx.y". -# This command let racc generate "debugging parser". -# Then set @yydebug=true in your parser. -# It produces a working log of your parser. -# -# == Re-distributing Racc runtime -# -# A parser, which is created by Racc, requires the Racc runtime module; -# racc/parser.rb. -# -# Ruby 1.8.x comes with Racc runtime module, -# you need NOT distribute Racc runtime files. -# -# If you want to include the Racc runtime module with your parser. -# This can be done by using '-E' option: -# -# $ racc -E -omyparser.rb myparser.y -# -# This command creates myparser.rb which `includes' Racc runtime. -# Only you must do is to distribute your parser file (myparser.rb). -# -# Note: parser.rb is ruby license, but your parser is not. -# Your own parser is completely yours. -module Racc - - unless defined?(Racc_No_Extensions) - Racc_No_Extensions = false # :nodoc: - end - - class Parser - - Racc_Runtime_Version = ::Racc::VERSION - Racc_Runtime_Core_Version_R = ::Racc::VERSION - - begin - if Object.const_defined?(:RUBY_ENGINE) and RUBY_ENGINE == 'jruby' - require 'jruby' - require 'racc/cparse-jruby.jar' - com.headius.racc.Cparse.new.load(JRuby.runtime, false) - else - require 'racc/cparse' - end - - unless new.respond_to?(:_racc_do_parse_c, true) - raise LoadError, 'old cparse.so' - end - if Racc_No_Extensions - raise LoadError, 'selecting ruby version of racc runtime core' - end - - Racc_Main_Parsing_Routine = :_racc_do_parse_c # :nodoc: - Racc_YY_Parse_Method = :_racc_yyparse_c # :nodoc: - Racc_Runtime_Core_Version = Racc_Runtime_Core_Version_C # :nodoc: - Racc_Runtime_Type = 'c' # :nodoc: - rescue LoadError - Racc_Main_Parsing_Routine = :_racc_do_parse_rb - Racc_YY_Parse_Method = :_racc_yyparse_rb - Racc_Runtime_Core_Version = Racc_Runtime_Core_Version_R - Racc_Runtime_Type = 'ruby' - end - - def Parser.racc_runtime_type # :nodoc: - Racc_Runtime_Type - end - - def _racc_setup - @yydebug = false unless self.class::Racc_debug_parser - @yydebug = false unless defined?(@yydebug) - if @yydebug - @racc_debug_out = $stderr unless defined?(@racc_debug_out) - @racc_debug_out ||= $stderr - end - arg = self.class::Racc_arg - arg[13] = true if arg.size < 14 - arg - end - - def _racc_init_sysvars - @racc_state = [0] - @racc_tstack = [] - @racc_vstack = [] - - @racc_t = nil - @racc_val = nil - - @racc_read_next = true - - @racc_user_yyerror = false - @racc_error_status = 0 - end - - # The entry point of the parser. This method is used with #next_token. - # If Racc wants to get token (and its value), calls next_token. - # - # Example: - # def parse - # @q = [[1,1], - # [2,2], - # [3,3], - # [false, '$']] - # do_parse - # end - # - # def next_token - # @q.shift - # end - class_eval <<~RUBY, __FILE__, __LINE__ + 1 - def do_parse - #{Racc_Main_Parsing_Routine}(_racc_setup(), false) - end - RUBY - - # The method to fetch next token. - # If you use #do_parse method, you must implement #next_token. - # - # The format of return value is [TOKEN_SYMBOL, VALUE]. - # +token-symbol+ is represented by Ruby's symbol by default, e.g. :IDENT - # for 'IDENT'. ";" (String) for ';'. - # - # The final symbol (End of file) must be false. - def next_token - raise NotImplementedError, "#{self.class}\#next_token is not defined" - end - - def _racc_do_parse_rb(arg, in_debug) - action_table, action_check, action_default, action_pointer, - _, _, _, _, - _, _, token_table, * = arg - - _racc_init_sysvars - tok = act = i = nil - - catch(:racc_end_parse) { - while true - if i = action_pointer[@racc_state[-1]] - if @racc_read_next - if @racc_t != 0 # not EOF - tok, @racc_val = next_token() - unless tok # EOF - @racc_t = 0 - else - @racc_t = (token_table[tok] or 1) # error token - end - racc_read_token(@racc_t, tok, @racc_val) if @yydebug - @racc_read_next = false - end - end - i += @racc_t - unless i >= 0 and - act = action_table[i] and - action_check[i] == @racc_state[-1] - act = action_default[@racc_state[-1]] - end - else - act = action_default[@racc_state[-1]] - end - while act = _racc_evalact(act, arg) - ; - end - end - } - end - - # Another entry point for the parser. - # If you use this method, you must implement RECEIVER#METHOD_ID method. - # - # RECEIVER#METHOD_ID is a method to get next token. - # It must 'yield' the token, which format is [TOKEN-SYMBOL, VALUE]. - class_eval <<~RUBY, __FILE__, __LINE__ + 1 - def yyparse(recv, mid) - #{Racc_YY_Parse_Method}(recv, mid, _racc_setup(), false) - end - RUBY - - def _racc_yyparse_rb(recv, mid, arg, c_debug) - action_table, action_check, action_default, action_pointer, - _, _, _, _, - _, _, token_table, * = arg - - _racc_init_sysvars - - catch(:racc_end_parse) { - until i = action_pointer[@racc_state[-1]] - while act = _racc_evalact(action_default[@racc_state[-1]], arg) - ; - end - end - recv.__send__(mid) do |tok, val| - unless tok - @racc_t = 0 - else - @racc_t = (token_table[tok] or 1) # error token - end - @racc_val = val - @racc_read_next = false - - i += @racc_t - unless i >= 0 and - act = action_table[i] and - action_check[i] == @racc_state[-1] - act = action_default[@racc_state[-1]] - end - while act = _racc_evalact(act, arg) - ; - end - - while !(i = action_pointer[@racc_state[-1]]) || - ! @racc_read_next || - @racc_t == 0 # $ - unless i and i += @racc_t and - i >= 0 and - act = action_table[i] and - action_check[i] == @racc_state[-1] - act = action_default[@racc_state[-1]] - end - while act = _racc_evalact(act, arg) - ; - end - end - end - } - end - - ### - ### common - ### - - def _racc_evalact(act, arg) - action_table, action_check, _, action_pointer, - _, _, _, _, - _, _, _, shift_n, - reduce_n, * = arg - nerr = 0 # tmp - - if act > 0 and act < shift_n - # - # shift - # - if @racc_error_status > 0 - @racc_error_status -= 1 unless @racc_t <= 1 # error token or EOF - end - @racc_vstack.push @racc_val - @racc_state.push act - @racc_read_next = true - if @yydebug - @racc_tstack.push @racc_t - racc_shift @racc_t, @racc_tstack, @racc_vstack - end - - elsif act < 0 and act > -reduce_n - # - # reduce - # - code = catch(:racc_jump) { - @racc_state.push _racc_do_reduce(arg, act) - false - } - if code - case code - when 1 # yyerror - @racc_user_yyerror = true # user_yyerror - return -reduce_n - when 2 # yyaccept - return shift_n - else - raise '[Racc Bug] unknown jump code' - end - end - - elsif act == shift_n - # - # accept - # - racc_accept if @yydebug - throw :racc_end_parse, @racc_vstack[0] - - elsif act == -reduce_n - # - # error - # - case @racc_error_status - when 0 - unless arg[21] # user_yyerror - nerr += 1 - on_error @racc_t, @racc_val, @racc_vstack - end - when 3 - if @racc_t == 0 # is $ - # We're at EOF, and another error occurred immediately after - # attempting auto-recovery - throw :racc_end_parse, nil - end - @racc_read_next = true - end - @racc_user_yyerror = false - @racc_error_status = 3 - while true - if i = action_pointer[@racc_state[-1]] - i += 1 # error token - if i >= 0 and - (act = action_table[i]) and - action_check[i] == @racc_state[-1] - break - end - end - throw :racc_end_parse, nil if @racc_state.size <= 1 - @racc_state.pop - @racc_vstack.pop - if @yydebug - @racc_tstack.pop - racc_e_pop @racc_state, @racc_tstack, @racc_vstack - end - end - return act - - else - raise "[Racc Bug] unknown action #{act.inspect}" - end - - racc_next_state(@racc_state[-1], @racc_state) if @yydebug - - nil - end - - def _racc_do_reduce(arg, act) - _, _, _, _, - goto_table, goto_check, goto_default, goto_pointer, - nt_base, reduce_table, _, _, - _, use_result, * = arg - - state = @racc_state - vstack = @racc_vstack - tstack = @racc_tstack - - i = act * -3 - len = reduce_table[i] - reduce_to = reduce_table[i+1] - method_id = reduce_table[i+2] - void_array = [] - - tmp_t = tstack[-len, len] if @yydebug - tmp_v = vstack[-len, len] - tstack[-len, len] = void_array if @yydebug - vstack[-len, len] = void_array - state[-len, len] = void_array - - # tstack must be updated AFTER method call - if use_result - vstack.push __send__(method_id, tmp_v, vstack, tmp_v[0]) - else - vstack.push __send__(method_id, tmp_v, vstack) - end - tstack.push reduce_to - - racc_reduce(tmp_t, reduce_to, tstack, vstack) if @yydebug - - k1 = reduce_to - nt_base - if i = goto_pointer[k1] - i += state[-1] - if i >= 0 and (curstate = goto_table[i]) and goto_check[i] == k1 - return curstate - end - end - goto_default[k1] - end - - # This method is called when a parse error is found. - # - # ERROR_TOKEN_ID is an internal ID of token which caused error. - # You can get string representation of this ID by calling - # #token_to_str. - # - # ERROR_VALUE is a value of error token. - # - # value_stack is a stack of symbol values. - # DO NOT MODIFY this object. - # - # This method raises ParseError by default. - # - # If this method returns, parsers enter "error recovering mode". - def on_error(t, val, vstack) - raise ParseError, sprintf("parse error on value %s (%s)", - val.inspect, token_to_str(t) || '?') - end - - # Enter error recovering mode. - # This method does not call #on_error. - def yyerror - throw :racc_jump, 1 - end - - # Exit parser. - # Return value is +Symbol_Value_Stack[0]+. - def yyaccept - throw :racc_jump, 2 - end - - # Leave error recovering mode. - def yyerrok - @racc_error_status = 0 - end - - # For debugging output - def racc_read_token(t, tok, val) - @racc_debug_out.print 'read ' - @racc_debug_out.print tok.inspect, '(', racc_token2str(t), ') ' - @racc_debug_out.puts val.inspect - @racc_debug_out.puts - end - - def racc_shift(tok, tstack, vstack) - @racc_debug_out.puts "shift #{racc_token2str tok}" - racc_print_stacks tstack, vstack - @racc_debug_out.puts - end - - def racc_reduce(toks, sim, tstack, vstack) - out = @racc_debug_out - out.print 'reduce ' - if toks.empty? - out.print ' ' - else - toks.each {|t| out.print ' ', racc_token2str(t) } - end - out.puts " --> #{racc_token2str(sim)}" - racc_print_stacks tstack, vstack - @racc_debug_out.puts - end - - def racc_accept - @racc_debug_out.puts 'accept' - @racc_debug_out.puts - end - - def racc_e_pop(state, tstack, vstack) - @racc_debug_out.puts 'error recovering mode: pop token' - racc_print_states state - racc_print_stacks tstack, vstack - @racc_debug_out.puts - end - - def racc_next_state(curstate, state) - @racc_debug_out.puts "goto #{curstate}" - racc_print_states state - @racc_debug_out.puts - end - - def racc_print_stacks(t, v) - out = @racc_debug_out - out.print ' [' - t.each_index do |i| - out.print ' (', racc_token2str(t[i]), ' ', v[i].inspect, ')' - end - out.puts ' ]' - end - - def racc_print_states(s) - out = @racc_debug_out - out.print ' [' - s.each {|st| out.print ' ', st } - out.puts ' ]' - end - - def racc_token2str(tok) - self.class::Racc_token_to_s_table[tok] or - raise "[Racc Bug] can't convert token #{tok} to string" - end - - # Convert internal ID of token symbol to the string. - def token_to_str(t) - self.class::Racc_token_to_s_table[t] - end - - end - -end - -__end_of_file__ -end diff --git a/bundle/ruby/3.2.0/gems/racc-1.7.3/lib/racc/parser.rb b/bundle/ruby/3.2.0/gems/racc-1.7.3/lib/racc/parser.rb deleted file mode 100644 index c4c74fae..00000000 --- a/bundle/ruby/3.2.0/gems/racc-1.7.3/lib/racc/parser.rb +++ /dev/null @@ -1,634 +0,0 @@ -# frozen_string_literal: true -#-- -# Copyright (c) 1999-2006 Minero Aoki -# -# This program is free software. -# You can distribute/modify this program under the same terms of ruby. -# -# As a special exception, when this code is copied by Racc -# into a Racc output file, you may use that output file -# without restriction. -#++ - -require 'racc/info' - -unless defined?(NotImplementedError) - NotImplementedError = NotImplementError # :nodoc: -end - -module Racc - class ParseError < StandardError; end -end -unless defined?(::ParseError) - ParseError = Racc::ParseError # :nodoc: -end - -# Racc is a LALR(1) parser generator. -# It is written in Ruby itself, and generates Ruby programs. -# -# == Command-line Reference -# -# racc [-ofilename] [--output-file=filename] -# [-erubypath] [--executable=rubypath] -# [-v] [--verbose] -# [-Ofilename] [--log-file=filename] -# [-g] [--debug] -# [-E] [--embedded] -# [-l] [--no-line-convert] -# [-c] [--line-convert-all] -# [-a] [--no-omit-actions] -# [-C] [--check-only] -# [-S] [--output-status] -# [--version] [--copyright] [--help] grammarfile -# -# [+grammarfile+] -# Racc grammar file. Any extension is permitted. -# [-o+outfile+, --output-file=+outfile+] -# A filename for output. default is <+filename+>.tab.rb -# [-O+filename+, --log-file=+filename+] -# Place logging output in file +filename+. -# Default log file name is <+filename+>.output. -# [-e+rubypath+, --executable=+rubypath+] -# output executable file(mode 755). where +path+ is the Ruby interpreter. -# [-v, --verbose] -# verbose mode. create +filename+.output file, like yacc's y.output file. -# [-g, --debug] -# add debug code to parser class. To display debugging information, -# use this '-g' option and set @yydebug true in parser class. -# [-E, --embedded] -# Output parser which doesn't need runtime files (racc/parser.rb). -# [-F, --frozen] -# Output parser which declares frozen_string_literals: true -# [-C, --check-only] -# Check syntax of racc grammar file and quit. -# [-S, --output-status] -# Print messages time to time while compiling. -# [-l, --no-line-convert] -# turns off line number converting. -# [-c, --line-convert-all] -# Convert line number of actions, inner, header and footer. -# [-a, --no-omit-actions] -# Call all actions, even if an action is empty. -# [--version] -# print Racc version and quit. -# [--copyright] -# Print copyright and quit. -# [--help] -# Print usage and quit. -# -# == Generating Parser Using Racc -# -# To compile Racc grammar file, simply type: -# -# $ racc parse.y -# -# This creates Ruby script file "parse.tab.y". The -o option can change the output filename. -# -# == Writing A Racc Grammar File -# -# If you want your own parser, you have to write a grammar file. -# A grammar file contains the name of your parser class, grammar for the parser, -# user code, and anything else. -# When writing a grammar file, yacc's knowledge is helpful. -# If you have not used yacc before, Racc is not too difficult. -# -# Here's an example Racc grammar file. -# -# class Calcparser -# rule -# target: exp { print val[0] } -# -# exp: exp '+' exp -# | exp '*' exp -# | '(' exp ')' -# | NUMBER -# end -# -# Racc grammar files resemble yacc files. -# But (of course), this is Ruby code. -# yacc's $$ is the 'result', $0, $1... is -# an array called 'val', and $-1, $-2... is an array called '_values'. -# -# See the {Grammar File Reference}[rdoc-ref:lib/racc/rdoc/grammar.en.rdoc] for -# more information on grammar files. -# -# == Parser -# -# Then you must prepare the parse entry method. There are two types of -# parse methods in Racc, Racc::Parser#do_parse and Racc::Parser#yyparse -# -# Racc::Parser#do_parse is simple. -# -# It's yyparse() of yacc, and Racc::Parser#next_token is yylex(). -# This method must returns an array like [TOKENSYMBOL, ITS_VALUE]. -# EOF is [false, false]. -# (TOKENSYMBOL is a Ruby symbol (taken from String#intern) by default. -# If you want to change this, see the grammar reference. -# -# Racc::Parser#yyparse is little complicated, but useful. -# It does not use Racc::Parser#next_token, instead it gets tokens from any iterator. -# -# For example, yyparse(obj, :scan) causes -# calling +obj#scan+, and you can return tokens by yielding them from +obj#scan+. -# -# == Debugging -# -# When debugging, "-v" or/and the "-g" option is helpful. -# -# "-v" creates verbose log file (.output). -# "-g" creates a "Verbose Parser". -# Verbose Parser prints the internal status when parsing. -# But it's _not_ automatic. -# You must use -g option and set +@yydebug+ to +true+ in order to get output. -# -g option only creates the verbose parser. -# -# === Racc reported syntax error. -# -# Isn't there too many "end"? -# grammar of racc file is changed in v0.10. -# -# Racc does not use '%' mark, while yacc uses huge number of '%' marks.. -# -# === Racc reported "XXXX conflicts". -# -# Try "racc -v xxxx.y". -# It causes producing racc's internal log file, xxxx.output. -# -# === Generated parsers does not work correctly -# -# Try "racc -g xxxx.y". -# This command let racc generate "debugging parser". -# Then set @yydebug=true in your parser. -# It produces a working log of your parser. -# -# == Re-distributing Racc runtime -# -# A parser, which is created by Racc, requires the Racc runtime module; -# racc/parser.rb. -# -# Ruby 1.8.x comes with Racc runtime module, -# you need NOT distribute Racc runtime files. -# -# If you want to include the Racc runtime module with your parser. -# This can be done by using '-E' option: -# -# $ racc -E -omyparser.rb myparser.y -# -# This command creates myparser.rb which `includes' Racc runtime. -# Only you must do is to distribute your parser file (myparser.rb). -# -# Note: parser.rb is ruby license, but your parser is not. -# Your own parser is completely yours. -module Racc - - unless defined?(Racc_No_Extensions) - Racc_No_Extensions = false # :nodoc: - end - - class Parser - - Racc_Runtime_Version = ::Racc::VERSION - Racc_Runtime_Core_Version_R = ::Racc::VERSION - - begin - if Object.const_defined?(:RUBY_ENGINE) and RUBY_ENGINE == 'jruby' - require 'jruby' - require 'racc/cparse-jruby.jar' - com.headius.racc.Cparse.new.load(JRuby.runtime, false) - else - require 'racc/cparse' - end - - unless new.respond_to?(:_racc_do_parse_c, true) - raise LoadError, 'old cparse.so' - end - if Racc_No_Extensions - raise LoadError, 'selecting ruby version of racc runtime core' - end - - Racc_Main_Parsing_Routine = :_racc_do_parse_c # :nodoc: - Racc_YY_Parse_Method = :_racc_yyparse_c # :nodoc: - Racc_Runtime_Core_Version = Racc_Runtime_Core_Version_C # :nodoc: - Racc_Runtime_Type = 'c' # :nodoc: - rescue LoadError - Racc_Main_Parsing_Routine = :_racc_do_parse_rb - Racc_YY_Parse_Method = :_racc_yyparse_rb - Racc_Runtime_Core_Version = Racc_Runtime_Core_Version_R - Racc_Runtime_Type = 'ruby' - end - - def Parser.racc_runtime_type # :nodoc: - Racc_Runtime_Type - end - - def _racc_setup - @yydebug = false unless self.class::Racc_debug_parser - @yydebug = false unless defined?(@yydebug) - if @yydebug - @racc_debug_out = $stderr unless defined?(@racc_debug_out) - @racc_debug_out ||= $stderr - end - arg = self.class::Racc_arg - arg[13] = true if arg.size < 14 - arg - end - - def _racc_init_sysvars - @racc_state = [0] - @racc_tstack = [] - @racc_vstack = [] - - @racc_t = nil - @racc_val = nil - - @racc_read_next = true - - @racc_user_yyerror = false - @racc_error_status = 0 - end - - # The entry point of the parser. This method is used with #next_token. - # If Racc wants to get token (and its value), calls next_token. - # - # Example: - # def parse - # @q = [[1,1], - # [2,2], - # [3,3], - # [false, '$']] - # do_parse - # end - # - # def next_token - # @q.shift - # end - class_eval <<~RUBY, __FILE__, __LINE__ + 1 - def do_parse - #{Racc_Main_Parsing_Routine}(_racc_setup(), false) - end - RUBY - - # The method to fetch next token. - # If you use #do_parse method, you must implement #next_token. - # - # The format of return value is [TOKEN_SYMBOL, VALUE]. - # +token-symbol+ is represented by Ruby's symbol by default, e.g. :IDENT - # for 'IDENT'. ";" (String) for ';'. - # - # The final symbol (End of file) must be false. - def next_token - raise NotImplementedError, "#{self.class}\#next_token is not defined" - end - - def _racc_do_parse_rb(arg, in_debug) - action_table, action_check, action_default, action_pointer, - _, _, _, _, - _, _, token_table, * = arg - - _racc_init_sysvars - tok = act = i = nil - - catch(:racc_end_parse) { - while true - if i = action_pointer[@racc_state[-1]] - if @racc_read_next - if @racc_t != 0 # not EOF - tok, @racc_val = next_token() - unless tok # EOF - @racc_t = 0 - else - @racc_t = (token_table[tok] or 1) # error token - end - racc_read_token(@racc_t, tok, @racc_val) if @yydebug - @racc_read_next = false - end - end - i += @racc_t - unless i >= 0 and - act = action_table[i] and - action_check[i] == @racc_state[-1] - act = action_default[@racc_state[-1]] - end - else - act = action_default[@racc_state[-1]] - end - while act = _racc_evalact(act, arg) - ; - end - end - } - end - - # Another entry point for the parser. - # If you use this method, you must implement RECEIVER#METHOD_ID method. - # - # RECEIVER#METHOD_ID is a method to get next token. - # It must 'yield' the token, which format is [TOKEN-SYMBOL, VALUE]. - class_eval <<~RUBY, __FILE__, __LINE__ + 1 - def yyparse(recv, mid) - #{Racc_YY_Parse_Method}(recv, mid, _racc_setup(), false) - end - RUBY - - def _racc_yyparse_rb(recv, mid, arg, c_debug) - action_table, action_check, action_default, action_pointer, - _, _, _, _, - _, _, token_table, * = arg - - _racc_init_sysvars - - catch(:racc_end_parse) { - until i = action_pointer[@racc_state[-1]] - while act = _racc_evalact(action_default[@racc_state[-1]], arg) - ; - end - end - recv.__send__(mid) do |tok, val| - unless tok - @racc_t = 0 - else - @racc_t = (token_table[tok] or 1) # error token - end - @racc_val = val - @racc_read_next = false - - i += @racc_t - unless i >= 0 and - act = action_table[i] and - action_check[i] == @racc_state[-1] - act = action_default[@racc_state[-1]] - end - while act = _racc_evalact(act, arg) - ; - end - - while !(i = action_pointer[@racc_state[-1]]) || - ! @racc_read_next || - @racc_t == 0 # $ - unless i and i += @racc_t and - i >= 0 and - act = action_table[i] and - action_check[i] == @racc_state[-1] - act = action_default[@racc_state[-1]] - end - while act = _racc_evalact(act, arg) - ; - end - end - end - } - end - - ### - ### common - ### - - def _racc_evalact(act, arg) - action_table, action_check, _, action_pointer, - _, _, _, _, - _, _, _, shift_n, - reduce_n, * = arg - nerr = 0 # tmp - - if act > 0 and act < shift_n - # - # shift - # - if @racc_error_status > 0 - @racc_error_status -= 1 unless @racc_t <= 1 # error token or EOF - end - @racc_vstack.push @racc_val - @racc_state.push act - @racc_read_next = true - if @yydebug - @racc_tstack.push @racc_t - racc_shift @racc_t, @racc_tstack, @racc_vstack - end - - elsif act < 0 and act > -reduce_n - # - # reduce - # - code = catch(:racc_jump) { - @racc_state.push _racc_do_reduce(arg, act) - false - } - if code - case code - when 1 # yyerror - @racc_user_yyerror = true # user_yyerror - return -reduce_n - when 2 # yyaccept - return shift_n - else - raise '[Racc Bug] unknown jump code' - end - end - - elsif act == shift_n - # - # accept - # - racc_accept if @yydebug - throw :racc_end_parse, @racc_vstack[0] - - elsif act == -reduce_n - # - # error - # - case @racc_error_status - when 0 - unless arg[21] # user_yyerror - nerr += 1 - on_error @racc_t, @racc_val, @racc_vstack - end - when 3 - if @racc_t == 0 # is $ - # We're at EOF, and another error occurred immediately after - # attempting auto-recovery - throw :racc_end_parse, nil - end - @racc_read_next = true - end - @racc_user_yyerror = false - @racc_error_status = 3 - while true - if i = action_pointer[@racc_state[-1]] - i += 1 # error token - if i >= 0 and - (act = action_table[i]) and - action_check[i] == @racc_state[-1] - break - end - end - throw :racc_end_parse, nil if @racc_state.size <= 1 - @racc_state.pop - @racc_vstack.pop - if @yydebug - @racc_tstack.pop - racc_e_pop @racc_state, @racc_tstack, @racc_vstack - end - end - return act - - else - raise "[Racc Bug] unknown action #{act.inspect}" - end - - racc_next_state(@racc_state[-1], @racc_state) if @yydebug - - nil - end - - def _racc_do_reduce(arg, act) - _, _, _, _, - goto_table, goto_check, goto_default, goto_pointer, - nt_base, reduce_table, _, _, - _, use_result, * = arg - - state = @racc_state - vstack = @racc_vstack - tstack = @racc_tstack - - i = act * -3 - len = reduce_table[i] - reduce_to = reduce_table[i+1] - method_id = reduce_table[i+2] - void_array = [] - - tmp_t = tstack[-len, len] if @yydebug - tmp_v = vstack[-len, len] - tstack[-len, len] = void_array if @yydebug - vstack[-len, len] = void_array - state[-len, len] = void_array - - # tstack must be updated AFTER method call - if use_result - vstack.push __send__(method_id, tmp_v, vstack, tmp_v[0]) - else - vstack.push __send__(method_id, tmp_v, vstack) - end - tstack.push reduce_to - - racc_reduce(tmp_t, reduce_to, tstack, vstack) if @yydebug - - k1 = reduce_to - nt_base - if i = goto_pointer[k1] - i += state[-1] - if i >= 0 and (curstate = goto_table[i]) and goto_check[i] == k1 - return curstate - end - end - goto_default[k1] - end - - # This method is called when a parse error is found. - # - # ERROR_TOKEN_ID is an internal ID of token which caused error. - # You can get string representation of this ID by calling - # #token_to_str. - # - # ERROR_VALUE is a value of error token. - # - # value_stack is a stack of symbol values. - # DO NOT MODIFY this object. - # - # This method raises ParseError by default. - # - # If this method returns, parsers enter "error recovering mode". - def on_error(t, val, vstack) - raise ParseError, sprintf("parse error on value %s (%s)", - val.inspect, token_to_str(t) || '?') - end - - # Enter error recovering mode. - # This method does not call #on_error. - def yyerror - throw :racc_jump, 1 - end - - # Exit parser. - # Return value is +Symbol_Value_Stack[0]+. - def yyaccept - throw :racc_jump, 2 - end - - # Leave error recovering mode. - def yyerrok - @racc_error_status = 0 - end - - # For debugging output - def racc_read_token(t, tok, val) - @racc_debug_out.print 'read ' - @racc_debug_out.print tok.inspect, '(', racc_token2str(t), ') ' - @racc_debug_out.puts val.inspect - @racc_debug_out.puts - end - - def racc_shift(tok, tstack, vstack) - @racc_debug_out.puts "shift #{racc_token2str tok}" - racc_print_stacks tstack, vstack - @racc_debug_out.puts - end - - def racc_reduce(toks, sim, tstack, vstack) - out = @racc_debug_out - out.print 'reduce ' - if toks.empty? - out.print ' ' - else - toks.each {|t| out.print ' ', racc_token2str(t) } - end - out.puts " --> #{racc_token2str(sim)}" - racc_print_stacks tstack, vstack - @racc_debug_out.puts - end - - def racc_accept - @racc_debug_out.puts 'accept' - @racc_debug_out.puts - end - - def racc_e_pop(state, tstack, vstack) - @racc_debug_out.puts 'error recovering mode: pop token' - racc_print_states state - racc_print_stacks tstack, vstack - @racc_debug_out.puts - end - - def racc_next_state(curstate, state) - @racc_debug_out.puts "goto #{curstate}" - racc_print_states state - @racc_debug_out.puts - end - - def racc_print_stacks(t, v) - out = @racc_debug_out - out.print ' [' - t.each_index do |i| - out.print ' (', racc_token2str(t[i]), ' ', v[i].inspect, ')' - end - out.puts ' ]' - end - - def racc_print_states(s) - out = @racc_debug_out - out.print ' [' - s.each {|st| out.print ' ', st } - out.puts ' ]' - end - - def racc_token2str(tok) - self.class::Racc_token_to_s_table[tok] or - raise "[Racc Bug] can't convert token #{tok} to string" - end - - # Convert internal ID of token symbol to the string. - def token_to_str(t) - self.class::Racc_token_to_s_table[t] - end - - end - -end diff --git a/bundle/ruby/3.2.0/gems/racc-1.7.3/lib/racc/parserfilegenerator.rb b/bundle/ruby/3.2.0/gems/racc-1.7.3/lib/racc/parserfilegenerator.rb deleted file mode 100644 index e6ea53d1..00000000 --- a/bundle/ruby/3.2.0/gems/racc-1.7.3/lib/racc/parserfilegenerator.rb +++ /dev/null @@ -1,473 +0,0 @@ -#-- -# -# -# -# Copyright (c) 1999-2006 Minero Aoki -# -# This program is free software. -# You can distribute/modify this program under the same terms of ruby. -# see the file "COPYING". -# -#++ - -require 'racc/compat' -require 'racc/sourcetext' -require 'racc/parser-text' -require 'rbconfig' - -module Racc - - class ParserFileGenerator - - class Params - def self.bool_attr(name) - module_eval(<<-End) - def #{name}? - @#{name} - end - - def #{name}=(b) - @#{name} = b - end - End - end - - attr_accessor :filename - attr_accessor :classname - attr_accessor :superclass - bool_attr :omit_action_call - bool_attr :result_var - attr_accessor :header - attr_accessor :inner - attr_accessor :footer - - bool_attr :debug_parser - bool_attr :convert_line - bool_attr :convert_line_all - bool_attr :embed_runtime - bool_attr :frozen_strings - bool_attr :make_executable - attr_accessor :interpreter - - def initialize - # Parameters derived from parser - self.filename = nil - self.classname = nil - self.superclass = 'Racc::Parser' - self.omit_action_call = true - self.result_var = true - self.header = [] - self.inner = [] - self.footer = [] - - # Parameters derived from command line options - self.debug_parser = false - self.convert_line = true - self.convert_line_all = false - self.embed_runtime = false - self.frozen_strings = false - self.make_executable = false - self.interpreter = nil - end - end - - def initialize(states, params) - @states = states - @grammar = states.grammar - @params = params - end - - def generate_parser - string_io = StringIO.new - - init_line_conversion_system - @f = string_io - parser_file - - string_io.rewind - string_io.read - end - - def generate_parser_file(destpath) - init_line_conversion_system - File.open(destpath, 'w') {|f| - @f = f - parser_file - } - File.chmod 0755, destpath if @params.make_executable? - end - - private - - def parser_file - shebang @params.interpreter if @params.make_executable? - notice - line - if @params.embed_runtime? - embed_library runtime_source() - else - require 'racc/parser.rb' - end - header - parser_class(@params.classname, @params.superclass) { - inner - state_transition_table - } - footer - end - - c = ::RbConfig::CONFIG - RUBY_PATH = "#{c['bindir']}/#{c['ruby_install_name']}#{c['EXEEXT']}" - - def shebang(path) - line '#!' + (path == 'ruby' ? RUBY_PATH : path) - end - - def notice - line %q[# frozen_string_literal: true] if @params.frozen_strings? - line %q[#] - line %q[# DO NOT MODIFY!!!!] - line %Q[# This file is automatically generated by Racc #{Racc::Version}] - line %Q[# from Racc grammar file "#{@params.filename}".] - line %q[#] - end - - def runtime_source - SourceText.new(::Racc::PARSER_TEXT, 'racc/parser.rb', 1) - end - - def embed_library(src) - line %[###### #{src.filename} begin] - line %[unless $".find {|p| p.end_with?('/#{src.filename}')}] - line %[$".push "\#{__dir__}/#{src.filename}"] - put src, @params.convert_line? - line %[end] - line %[###### #{src.filename} end] - end - - def require(feature) - line "require '#{feature}'" - end - - def parser_class(classname, superclass) - mods = classname.split('::') - classid = mods.pop - mods.each do |mod| - indent; line "module #{mod}" - cref_push mod - end - indent; line "class #{classid} < #{superclass}" - cref_push classid - yield - cref_pop - indent; line "end \# class #{classid}" - mods.reverse_each do |mod| - cref_pop - indent; line "end \# module #{mod}" - end - end - - def header - @params.header.each do |src| - line - put src, @params.convert_line_all? - end - end - - def inner - @params.inner.each do |src| - line - put src, @params.convert_line? - end - end - - def footer - @params.footer.each do |src| - line - put src, @params.convert_line_all? - end - end - - # Low Level Routines - - def put(src, convert_line = false) - if convert_line - replace_location(src) { - @f.puts src.text - } - else - @f.puts src.text - end - end - - def line(str = '') - @f.puts str - end - - def init_line_conversion_system - @cref = [] - @used_separator = {} - end - - def cref_push(name) - @cref.push name - end - - def cref_pop - @cref.pop - end - - def indent - @f.print ' ' * @cref.size - end - - def toplevel? - @cref.empty? - end - - def replace_location(src) - sep = make_separator(src) - @f.print 'self.class.' if toplevel? - @f.puts "module_eval(<<'#{sep}', '#{src.filename}', #{src.lineno})" - yield - @f.puts sep - end - - def make_separator(src) - sep = unique_separator(src.filename) - sep *= 2 while src.text.index(sep) - sep - end - - def unique_separator(id) - sep = String.new "...end #{id}/module_eval..." - while @used_separator.key?(sep) - sep.concat sprintf('%02x', rand(255)) - end - @used_separator[sep] = true - sep - end - - # - # State Transition Table Serialization - # - - public - - def put_state_transition_table(f) - @f = f - state_transition_table - end - - private - - def state_transition_table - table = @states.state_transition_table - table.use_result_var = @params.result_var? - table.debug_parser = @params.debug_parser? - - line "##### State transition tables begin ###" - line - integer_list 'racc_action_table', table.action_table - line - integer_list 'racc_action_check', table.action_check - line - integer_list 'racc_action_pointer', table.action_pointer - line - integer_list 'racc_action_default', table.action_default - line - integer_list 'racc_goto_table', table.goto_table - line - integer_list 'racc_goto_check', table.goto_check - line - integer_list 'racc_goto_pointer', table.goto_pointer - line - integer_list 'racc_goto_default', table.goto_default - line - i_i_sym_list 'racc_reduce_table', table.reduce_table - line - line "racc_reduce_n = #{table.reduce_n}" - line - line "racc_shift_n = #{table.shift_n}" - line - sym_int_hash 'racc_token_table', table.token_table - line - line "racc_nt_base = #{table.nt_base}" - line - line "racc_use_result_var = #{table.use_result_var}" - line - @f.print(unindent_auto(<<-End)) - Racc_arg = [ - racc_action_table, - racc_action_check, - racc_action_default, - racc_action_pointer, - racc_goto_table, - racc_goto_check, - racc_goto_default, - racc_goto_pointer, - racc_nt_base, - racc_reduce_table, - racc_token_table, - racc_shift_n, - racc_reduce_n, - racc_use_result_var ] - End - line "Ractor.make_shareable(Racc_arg) if defined?(Ractor)" - line - string_list 'Racc_token_to_s_table', table.token_to_s_table - line "Ractor.make_shareable(Racc_token_to_s_table) if defined?(Ractor)" - line - line "Racc_debug_parser = #{table.debug_parser}" - line - line '##### State transition tables end #####' - actions - end - - def integer_list(name, table) - sep = '' - line "#{name} = [" - table.each_slice(10) do |ns| - @f.print sep; sep = ",\n" - @f.print ns.map {|n| sprintf('%6s', n ? n.to_s : 'nil') }.join(',') - end - line ' ]' - end - - def i_i_sym_list(name, table) - sep = '' - line "#{name} = [" - table.each_slice(3) do |len, target, mid| - @f.print sep; sep = ",\n" - @f.printf ' %d, %d, %s', len, target, mid.inspect - end - line " ]" - end - - def sym_int_hash(name, h) - sep = "\n" - @f.print "#{name} = {" - h.to_a.sort_by {|sym, i| i }.each do |sym, i| - @f.print sep; sep = ",\n" - @f.printf " %s => %d", sym.serialize, i - end - line " }" - end - - def string_list(name, list) - sep = " " - line "#{name} = [" - list.each do |s| - @f.print sep; sep = ",\n " - @f.print s.dump - end - line ' ]' - end - - def actions - @grammar.each do |rule| - unless rule.action.source? - raise "racc: fatal: cannot generate parser file when any action is a Proc" - end - end - - if @params.result_var? - decl = ', result' - retval = "\n result" - default_body = '' - else - decl = '' - retval = '' - default_body = 'val[0]' - end - @grammar.each do |rule| - line - if rule.action.empty? and @params.omit_action_call? - line "# reduce #{rule.ident} omitted" - else - src0 = rule.action.source || SourceText.new(default_body, __FILE__, 0) - if @params.convert_line? - src = remove_blank_lines(src0) - delim = make_delimiter(src.text) - @f.printf unindent_auto(<<-End), - module_eval(<<'%s', '%s', %d) - def _reduce_%d(val, _values%s) - %s%s - end - %s - End - delim, src.filename, src.lineno - 1, - rule.ident, decl, - src.text, retval, - delim - else - src = remove_blank_lines(src0) - @f.printf unindent_auto(<<-End), - def _reduce_%d(val, _values%s) - %s%s - end - End - rule.ident, decl, - src.text, retval - end - end - end - line - @f.printf unindent_auto(<<-'End'), decl - def _reduce_none(val, _values%s) - val[0] - end - End - line - end - - def remove_blank_lines(src) - body = src.text.dup - line = src.lineno - while body.slice!(/\A[ \t\f]*(?:\n|\r\n|\r)/) - line += 1 - end - SourceText.new(body, src.filename, line) - end - - def make_delimiter(body) - delim = '.,.,' - while body.index(delim) - delim *= 2 - end - delim - end - - def unindent_auto(str) - lines = str.lines.to_a - n = minimum_indent(lines) - lines.map {|line| detab(line).sub(indent_re(n), '').rstrip + "\n" }.join('') - end - - def minimum_indent(lines) - lines.map {|line| n_indent(line) }.min - end - - def n_indent(line) - line.slice(/\A\s+/).size - end - - RE_CACHE = {} - - def indent_re(n) - RE_CACHE[n] ||= /\A {#{n}}/ - end - - def detab(str, ts = 8) - add = 0 - len = nil - str.gsub(/\t/) { - len = ts - ($`.size + add) % ts - add += len - 1 - ' ' * len - } - end - - end - -end diff --git a/bundle/ruby/3.2.0/gems/racc-1.7.3/lib/racc/sourcetext.rb b/bundle/ruby/3.2.0/gems/racc-1.7.3/lib/racc/sourcetext.rb deleted file mode 100644 index de52dcae..00000000 --- a/bundle/ruby/3.2.0/gems/racc-1.7.3/lib/racc/sourcetext.rb +++ /dev/null @@ -1,35 +0,0 @@ -#-- -# -# -# -# Copyright (c) 1999-2006 Minero Aoki -# -# This program is free software. -# You can distribute/modify this program under the same terms of ruby. -# see the file "COPYING". -# -#++ - -module Racc - - class SourceText - def initialize(text, filename, lineno) - @text = text - @filename = filename - @lineno = lineno - end - - attr_reader :text - attr_reader :filename - attr_reader :lineno - - def to_s - "#" - end - - def location - "#{@filename}:#{@lineno}" - end - end - -end diff --git a/bundle/ruby/3.2.0/gems/racc-1.7.3/lib/racc/state.rb b/bundle/ruby/3.2.0/gems/racc-1.7.3/lib/racc/state.rb deleted file mode 100644 index f85809fb..00000000 --- a/bundle/ruby/3.2.0/gems/racc-1.7.3/lib/racc/state.rb +++ /dev/null @@ -1,972 +0,0 @@ -#-- -# -# -# -# Copyright (c) 1999-2006 Minero Aoki -# -# This program is free software. -# You can distribute/modify this program under the same terms of ruby. -# see the file "COPYING". -# -#++ - -require 'racc/iset' -require 'racc/statetransitiontable' -require 'racc/exception' -require 'forwardable' - -module Racc - - # A table of LALR states. - class States - - include Enumerable - - def initialize(grammar, debug_flags = DebugFlags.new) - @grammar = grammar - @symboltable = grammar.symboltable - @d_state = debug_flags.state - @d_la = debug_flags.la - @d_prec = debug_flags.prec - @states = [] - @statecache = {} - @actions = ActionTable.new(@grammar, self) - @nfa_computed = false - @dfa_computed = false - end - - attr_reader :grammar - attr_reader :actions - - def size - @states.size - end - - def inspect - '#' - end - - alias to_s inspect - - def [](i) - @states[i] - end - - def each_state(&block) - @states.each(&block) - end - - alias each each_state - - def each_index(&block) - @states.each_index(&block) - end - - extend Forwardable - - def_delegator "@actions", :shift_n - def_delegator "@actions", :reduce_n - def_delegator "@actions", :nt_base - - def should_report_srconflict? - srconflict_exist? and - (n_srconflicts() != @grammar.n_expected_srconflicts) - end - - def srconflict_exist? - n_srconflicts() != 0 - end - - def n_srconflicts - @n_srconflicts ||= inject(0) {|sum, st| sum + st.n_srconflicts } - end - - def rrconflict_exist? - n_rrconflicts() != 0 - end - - def n_rrconflicts - @n_rrconflicts ||= inject(0) {|sum, st| sum + st.n_rrconflicts } - end - - def state_transition_table - @state_transition_table ||= StateTransitionTable.generate(self.dfa) - end - - # - # NFA (Non-deterministic Finite Automaton) Computation - # - - public - - def nfa - return self if @nfa_computed - compute_nfa - @nfa_computed = true - self - end - - private - - def compute_nfa - @grammar.init - # add state 0 - core_to_state [ @grammar[0].ptrs[0] ] - # generate LALR states - cur = 0 - @gotos = [] - while cur < @states.size - generate_states @states[cur] # state is added here - cur += 1 - end - @actions.init - end - - def generate_states(state) - puts "dstate: #{state}" if @d_state - - table = {} - state.closure.each do |ptr| - if sym = ptr.dereference - addsym table, sym, ptr.next - end - end - table.each do |sym, core| - puts "dstate: sym=#{sym} ncore=#{core}" if @d_state - - dest = core_to_state(core.to_a) - state.goto_table[sym] = dest - id = sym.nonterminal?() ? @gotos.size : nil - g = Goto.new(id, sym, state, dest) - @gotos.push g if sym.nonterminal? - state.gotos[sym] = g - puts "dstate: #{state.ident} --#{sym}--> #{dest.ident}" if @d_state - - # check infinite recursion - if state.ident == dest.ident and state.closure.size == 1 - raise CompileError, - sprintf("Infinite recursion: state %d, with rule %d", - state.ident, state.ptrs[0].rule.ident) - end - end - end - - def addsym(table, sym, ptr) - unless s = table[sym] - table[sym] = s = ISet.new - end - s.add ptr - end - - def core_to_state(core) - # - # convert CORE to a State object. - # If matching state does not exist, create it and add to the table. - # - - k = fingerprint(core) - unless dest = @statecache[k] - # not registered yet - dest = State.new(@states.size, core) - @states.push dest - - @statecache[k] = dest - - puts "core_to_state: create state ID #{dest.ident}" if @d_state - else - if @d_state - puts "core_to_state: dest is cached ID #{dest.ident}" - puts "core_to_state: dest core #{dest.core.join(' ')}" - end - end - - dest - end - - def fingerprint(arr) - arr.map {|i| i.ident }.pack('L*') - end - - # - # DFA (Deterministic Finite Automaton) Generation - # - - public - - def dfa - return self if @dfa_computed - nfa - compute_dfa - @dfa_computed = true - self - end - - private - - def compute_dfa - la = lookahead() - @states.each do |state| - state.la = la - resolve state - end - set_accept - @states.each do |state| - pack state - end - check_useless - end - - def lookahead - # - # lookahead algorithm ver.3 -- from bison 1.26 - # - - gotos = @gotos - if @d_la - puts "\n--- goto ---" - gotos.each_with_index {|g, i| print i, ' '; p g } - end - - ### initialize_LA() - ### set_goto_map() - la_rules = [] - @states.each do |state| - state.check_la la_rules - end - - ### initialize_F() - f = create_tmap(gotos.size) - reads = [] - edge = [] - gotos.each do |goto| - goto.to_state.goto_table.each do |t, st| - if t.terminal? - f[goto.ident] |= (1 << t.ident) - elsif t.nullable? - edge.push goto.to_state.gotos[t].ident - end - end - if edge.empty? - reads.push nil - else - reads.push edge - edge = [] - end - end - digraph f, reads - if @d_la - puts "\n--- F1 (reads) ---" - print_tab gotos, reads, f - end - - ### build_relations() - ### compute_FOLLOWS - path = nil - edge = [] - lookback = Array.new(la_rules.size, nil) - includes = [] - gotos.each do |goto| - goto.symbol.heads.each do |ptr| - path = record_path(goto.from_state, ptr.rule) - lastgoto = path.last - st = lastgoto ? lastgoto.to_state : goto.from_state - if st.conflict? - addrel lookback, st.rruleid(ptr.rule), goto - end - path.reverse_each do |g| - break if g.symbol.terminal? - edge.push g.ident - break unless g.symbol.nullable? - end - end - if edge.empty? - includes.push nil - else - includes.push edge - edge = [] - end - end - includes = transpose(includes) - digraph f, includes - if @d_la - puts "\n--- F2 (includes) ---" - print_tab gotos, includes, f - end - - ### compute_lookaheads - la = create_tmap(la_rules.size) - lookback.each_with_index do |arr, i| - if arr - arr.each do |g| - la[i] |= f[g.ident] - end - end - end - if @d_la - puts "\n--- LA (lookback) ---" - print_tab la_rules, lookback, la - end - - la - end - - def create_tmap(size) - Array.new(size, 0) # use Integer as bitmap - end - - def addrel(tbl, i, item) - if a = tbl[i] - a.push item - else - tbl[i] = [item] - end - end - - def record_path(begst, rule) - st = begst - path = [] - rule.symbols.each do |t| - goto = st.gotos[t] - path.push goto - st = goto.to_state - end - path - end - - def transpose(rel) - new = Array.new(rel.size, nil) - rel.each_with_index do |arr, idx| - if arr - arr.each do |i| - addrel new, i, idx - end - end - end - new - end - - def digraph(map, relation) - n = relation.size - index = Array.new(n, nil) - vertices = [] - @infinity = n + 2 - - index.each_index do |i| - if not index[i] and relation[i] - traverse i, index, vertices, map, relation - end - end - end - - def traverse(i, index, vertices, map, relation) - vertices.push i - index[i] = height = vertices.size - - if rp = relation[i] - rp.each do |proci| - unless index[proci] - traverse proci, index, vertices, map, relation - end - if index[i] > index[proci] - # circulative recursion !!! - index[i] = index[proci] - end - map[i] |= map[proci] - end - end - - if index[i] == height - while true - proci = vertices.pop - index[proci] = @infinity - break if i == proci - - map[proci] |= map[i] - end - end - end - - # for debug - def print_atab(idx, tab) - tab.each_with_index do |i,ii| - printf '%-20s', idx[ii].inspect - p i - end - end - - def print_tab(idx, rel, tab) - tab.each_with_index do |bin,i| - print i, ' ', idx[i].inspect, ' << '; p rel[i] - print ' ' - each_t(@symboltable, bin) {|t| print ' ', t } - puts - end - end - - # for debug - def print_tab_i(idx, rel, tab, i) - bin = tab[i] - print i, ' ', idx[i].inspect, ' << '; p rel[i] - print ' ' - each_t(@symboltable, bin) {|t| print ' ', t } - end - - # for debug - def printb(i) - each_t(@symboltable, i) do |t| - print t, ' ' - end - puts - end - - def each_t(tbl, set) - 0.upto( set.size ) do |i| - (0..7).each do |ii| - if set[idx = i * 8 + ii] == 1 - yield tbl[idx] - end - end - end - end - - # - # resolve - # - - def resolve(state) - if state.conflict? - resolve_rr state, state.ritems - resolve_sr state, state.stokens - else - if state.rrules.empty? - # shift - state.stokens.each do |t| - state.action[t] = @actions.shift(state.goto_table[t]) - end - else - # reduce - state.defact = @actions.reduce(state.rrules[0]) - end - end - end - - def resolve_rr(state, r) - r.each do |item| - item.each_la(@symboltable) do |t| - act = state.action[t] - if act - unless act.kind_of?(Reduce) - raise "racc: fatal: #{act.class} in action table" - end - # Cannot resolve R/R conflict (on t). - # Reduce with upper rule as default. - state.rr_conflict act.rule, item.rule, t - else - # No conflict. - state.action[t] = @actions.reduce(item.rule) - end - end - end - end - - def resolve_sr(state, s) - s.each do |stok| - goto = state.goto_table[stok] - act = state.action[stok] - - unless act - # no conflict - state.action[stok] = @actions.shift(goto) - else - unless act.kind_of?(Reduce) - puts 'DEBUG -------------------------------' - p stok - p act - state.action.each do |k,v| - print k.inspect, ' ', v.inspect, "\n" - end - raise "racc: fatal: #{act.class} in action table" - end - - # conflict on stok - - rtok = act.rule.precedence - case do_resolve_sr(stok, rtok) - when :Reduce - # action is already set - - when :Shift - # overwrite - act.decref - state.action[stok] = @actions.shift(goto) - - when :Error - act.decref - state.action[stok] = @actions.error - - when :CantResolve - # shift as default - act.decref - state.action[stok] = @actions.shift(goto) - state.sr_conflict stok, act.rule - end - end - end - end - - ASSOC = { - :Left => :Reduce, - :Right => :Shift, - :Nonassoc => :Error - } - - def do_resolve_sr(stok, rtok) - puts "resolve_sr: s/r conflict: rtok=#{rtok}, stok=#{stok}" if @d_prec - - unless rtok and rtok.precedence - puts "resolve_sr: no prec for #{rtok}(R)" if @d_prec - return :CantResolve - end - rprec = rtok.precedence - - unless stok and stok.precedence - puts "resolve_sr: no prec for #{stok}(S)" if @d_prec - return :CantResolve - end - sprec = stok.precedence - - ret = if rprec == sprec - ASSOC[rtok.assoc] or - raise "racc: fatal: #{rtok}.assoc is not Left/Right/Nonassoc" - else - (rprec > sprec) ? (:Reduce) : (:Shift) - end - - puts "resolve_sr: resolved as #{ret.id2name}" if @d_prec - ret - end - - # - # complete - # - - def set_accept - anch = @symboltable.anchor - init_state = @states[0].goto_table[@grammar.start] - targ_state = init_state.action[anch].goto_state - acc_state = targ_state.action[anch].goto_state - - acc_state.action.clear - acc_state.goto_table.clear - acc_state.defact = @actions.accept - end - - def pack(state) - ### find most frequently used reduce rule - act = state.action - arr = Array.new(@grammar.size, 0) - act.each do |t, a| - arr[a.ruleid] += 1 if a.kind_of?(Reduce) - end - i = arr.max - s = (i > 0) ? arr.index(i) : nil - - ### set & delete default action - if s - r = @actions.reduce(s) - if not state.defact or state.defact == r - act.delete_if {|t, a| a == r } - state.defact = r - end - else - state.defact ||= @actions.error - end - end - - def check_useless - used = [] - @actions.each_reduce do |act| - if not act or act.refn == 0 - act.rule.useless = true - else - t = act.rule.target - used[t.ident] = t - end - end - @symboltable.nt_base.upto(@symboltable.nt_max - 1) do |n| - unless used[n] - @symboltable[n].useless = true - end - end - end - - end # class StateTable - - - # A LALR state. - class State - - def initialize(ident, core) - @ident = ident - @core = core - @goto_table = {} - @gotos = {} - @stokens = nil - @ritems = nil - @action = {} - @defact = nil - @rrconf = nil - @srconf = nil - - @closure = make_closure(@core) - end - - attr_reader :ident - alias stateid ident - alias hash ident - - attr_reader :core - attr_reader :closure - - attr_reader :goto_table - attr_reader :gotos - - attr_reader :stokens - attr_reader :ritems - attr_reader :rrules - - attr_reader :action - attr_accessor :defact # default action - - attr_reader :rrconf - attr_reader :srconf - - def inspect - "" - end - - alias to_s inspect - - def ==(oth) - @ident == oth.ident - end - - alias eql? == - - def make_closure(core) - set = ISet.new - core.each do |ptr| - set.add ptr - if t = ptr.dereference and t.nonterminal? - set.update_a t.expand - end - end - set.to_a - end - - def check_la(la_rules) - @conflict = false - s = [] - r = [] - @closure.each do |ptr| - if t = ptr.dereference - if t.terminal? - s[t.ident] = t - if t.ident == 1 # $error - @conflict = true - end - end - else - r.push ptr.rule - end - end - unless r.empty? - if not s.empty? or r.size > 1 - @conflict = true - end - end - s.compact! - @stokens = s - @rrules = r - - if @conflict - @la_rules_i = la_rules.size - @la_rules = r.map {|i| i.ident } - la_rules.concat r - else - @la_rules_i = @la_rules = nil - end - end - - def conflict? - @conflict - end - - def rruleid(rule) - if i = @la_rules.index(rule.ident) - @la_rules_i + i - else - puts '/// rruleid' - p self - p rule - p @rrules - p @la_rules_i - raise 'racc: fatal: cannot get reduce rule id' - end - end - - def la=(la) - return unless @conflict - i = @la_rules_i - @ritems = r = [] - @rrules.each do |rule| - r.push Item.new(rule, la[i]) - i += 1 - end - end - - def rr_conflict(high, low, ctok) - c = RRconflict.new(@ident, high, low, ctok) - - @rrconf ||= {} - if a = @rrconf[ctok] - a.push c - else - @rrconf[ctok] = [c] - end - end - - def sr_conflict(shift, reduce) - c = SRconflict.new(@ident, shift, reduce) - - @srconf ||= {} - if a = @srconf[shift] - a.push c - else - @srconf[shift] = [c] - end - end - - def n_srconflicts - @srconf ? @srconf.size : 0 - end - - def n_rrconflicts - @rrconf ? @rrconf.size : 0 - end - - end # class State - - - # - # Represents a transition on the grammar. - # "Real goto" means a transition by nonterminal, - # but this class treats also terminal's. - # If one is a terminal transition, .ident returns nil. - # - class Goto - def initialize(ident, sym, from, to) - @ident = ident - @symbol = sym - @from_state = from - @to_state = to - end - - attr_reader :ident - attr_reader :symbol - attr_reader :from_state - attr_reader :to_state - - def inspect - "(#{@from_state.ident}-#{@symbol}->#{@to_state.ident})" - end - end - - - # LALR item. A set of rule and its lookahead tokens. - class Item - def initialize(rule, la) - @rule = rule - @la = la - end - - attr_reader :rule - attr_reader :la - - def each_la(tbl) - la = @la - 0.upto(la.size - 1) do |i| - (0..7).each do |ii| - if la[idx = i * 8 + ii] == 1 - yield tbl[idx] - end - end - end - end - end - - - # The table of LALR actions. Actions are either of - # Shift, Reduce, Accept and Error. - class ActionTable - - def initialize(rt, st) - @grammar = rt - @statetable = st - - @reduce = [] - @shift = [] - @accept = nil - @error = nil - end - - def init - @grammar.each do |rule| - @reduce.push Reduce.new(rule) - end - @statetable.each do |state| - @shift.push Shift.new(state) - end - @accept = Accept.new - @error = Error.new - end - - def reduce_n - @reduce.size - end - - def reduce(i) - case i - when Rule then i = i.ident - when Integer then ; - else - raise "racc: fatal: wrong class #{i.class} for reduce" - end - - r = @reduce[i] or raise "racc: fatal: reduce action #{i.inspect} not exist" - r.incref - r - end - - def each_reduce(&block) - @reduce.each(&block) - end - - def shift_n - @shift.size - end - - def shift(i) - case i - when State then i = i.ident - when Integer then ; - else - raise "racc: fatal: wrong class #{i.class} for shift" - end - - @shift[i] or raise "racc: fatal: shift action #{i} does not exist" - end - - def each_shift(&block) - @shift.each(&block) - end - - attr_reader :accept - attr_reader :error - - end - - - class Shift - def initialize(goto) - @goto_state = goto - end - - attr_reader :goto_state - - def goto_id - @goto_state.ident - end - - def inspect - "" - end - end - - - class Reduce - def initialize(rule) - @rule = rule - @refn = 0 - end - - attr_reader :rule - attr_reader :refn - - def ruleid - @rule.ident - end - - def inspect - "" - end - - def incref - @refn += 1 - end - - def decref - @refn -= 1 - raise 'racc: fatal: act.refn < 0' if @refn < 0 - end - end - - class Accept - def inspect - "" - end - end - - class Error - def inspect - "" - end - end - - class SRconflict - def initialize(sid, shift, reduce) - @stateid = sid - @shift = shift - @reduce = reduce - end - - attr_reader :stateid - attr_reader :shift - attr_reader :reduce - - def to_s - sprintf('state %d: S/R conflict rule %d reduce and shift %s', - @stateid, @reduce.ruleid, @shift.to_s) - end - end - - class RRconflict - def initialize(sid, high, low, tok) - @stateid = sid - @high_prec = high - @low_prec = low - @token = tok - end - - attr_reader :stateid - attr_reader :high_prec - attr_reader :low_prec - attr_reader :token - - def to_s - sprintf('state %d: R/R conflict with rule %d and %d on %s', - @stateid, @high_prec.ident, @low_prec.ident, @token.to_s) - end - end - -end diff --git a/bundle/ruby/3.2.0/gems/racc-1.7.3/lib/racc/statetransitiontable.rb b/bundle/ruby/3.2.0/gems/racc-1.7.3/lib/racc/statetransitiontable.rb deleted file mode 100644 index d75fa165..00000000 --- a/bundle/ruby/3.2.0/gems/racc-1.7.3/lib/racc/statetransitiontable.rb +++ /dev/null @@ -1,311 +0,0 @@ -#-- -# -# -# -# Copyright (c) 1999-2006 Minero Aoki -# -# This program is free software. -# You can distribute/modify this program under the same terms of ruby. -# see the file "COPYING". -# -#++ - -require 'racc/parser' - -module Racc - - StateTransitionTable = Struct.new(:action_table, - :action_check, - :action_default, - :action_pointer, - :goto_table, - :goto_check, - :goto_default, - :goto_pointer, - :token_table, - :reduce_table, - :reduce_n, - :shift_n, - :nt_base, - :token_to_s_table, - :use_result_var, - :debug_parser) - class StateTransitionTable # reopen - def StateTransitionTable.generate(states) - StateTransitionTableGenerator.new(states).generate - end - - def initialize(states) - super() - @states = states - @grammar = states.grammar - self.use_result_var = true - self.debug_parser = true - end - - attr_reader :states - attr_reader :grammar - - def parser_class - ParserClassGenerator.new(@states).generate - end - - def token_value_table - h = {} - token_table().each do |sym, i| - h[sym.value] = i - end - h - end - end - - - class StateTransitionTableGenerator - - def initialize(states) - @states = states - @grammar = states.grammar - end - - def generate - t = StateTransitionTable.new(@states) - gen_action_tables t, @states - gen_goto_tables t, @grammar - t.token_table = token_table(@grammar) - t.reduce_table = reduce_table(@grammar) - t.reduce_n = @states.reduce_n - t.shift_n = @states.shift_n - t.nt_base = @grammar.nonterminal_base - t.token_to_s_table = @grammar.symbols.map {|sym| sym.to_s } - t - end - - def reduce_table(grammar) - t = [0, 0, :racc_error] - grammar.each_with_index do |rule, idx| - next if idx == 0 - t.push rule.size - t.push rule.target.ident - t.push(if rule.action.empty? # and @params.omit_action_call? - then :_reduce_none - else "_reduce_#{idx}".intern - end) - end - t - end - - def token_table(grammar) - h = {} - grammar.symboltable.terminals.each do |t| - h[t] = t.ident - end - h - end - - def gen_action_tables(t, states) - t.action_table = yytable = [] - t.action_check = yycheck = [] - t.action_default = yydefact = [] - t.action_pointer = yypact = [] - e1 = [] - e2 = [] - states.each do |state| - yydefact.push act2actid(state.defact) - if state.action.empty? - yypact.push nil - next - end - vector = [] - state.action.each do |tok, act| - vector[tok.ident] = act2actid(act) - end - addent e1, vector, state.ident, yypact - end - set_table e1, e2, yytable, yycheck, yypact - end - - def gen_goto_tables(t, grammar) - t.goto_table = yytable2 = [] - t.goto_check = yycheck2 = [] - t.goto_pointer = yypgoto = [] - t.goto_default = yydefgoto = [] - e1 = [] - e2 = [] - grammar.each_nonterminal do |tok| - tmp = [] - - # decide default - freq = Array.new(@states.size, 0) - @states.each do |state| - st = state.goto_table[tok] - if st - st = st.ident - freq[st] += 1 - end - tmp[state.ident] = st - end - max = freq.max - if max > 1 - default = freq.index(max) - tmp.map! {|i| default == i ? nil : i } - else - default = nil - end - yydefgoto.push default - - # delete default value - tmp.pop until tmp.last or tmp.empty? - if tmp.compact.empty? - # only default - yypgoto.push nil - next - end - - addent e1, tmp, (tok.ident - grammar.nonterminal_base), yypgoto - end - set_table e1, e2, yytable2, yycheck2, yypgoto - end - - def addent(all, arr, chkval, ptr) - max = arr.size - min = nil - arr.each_with_index do |item, idx| - if item - min ||= idx - end - end - ptr.push(-7777) # mark - arr = arr[min...max] - all.push [arr, chkval, mkmapexp(arr), min, ptr.size - 1] - end - - n = 2 ** 16 - begin - Regexp.compile("a{#{n}}") - RE_DUP_MAX = n - rescue RegexpError - n /= 2 - retry - end - - def mkmapexp(arr) - i = ii = 0 - as = arr.size - map = String.new - maxdup = RE_DUP_MAX - curr = nil - while i < as - ii = i + 1 - if arr[i] - ii += 1 while ii < as and arr[ii] - curr = '-' - else - ii += 1 while ii < as and not arr[ii] - curr = '.' - end - - offset = ii - i - if offset == 1 - map << curr - else - while offset > maxdup - map << "#{curr}{#{maxdup}}" - offset -= maxdup - end - map << "#{curr}{#{offset}}" if offset > 1 - end - i = ii - end - Regexp.compile(map, Regexp::NOENCODING) - end - - def set_table(entries, dummy, tbl, chk, ptr) - upper = 0 - map = '-' * 10240 - - # sort long to short - entries.sort_by!.with_index {|a,i| [-a[0].size, i] } - - entries.each do |arr, chkval, expr, min, ptri| - if upper + arr.size > map.size - map << '-' * (arr.size + 1024) - end - idx = map.index(expr) - ptr[ptri] = idx - min - arr.each_with_index do |item, i| - if item - i += idx - tbl[i] = item - chk[i] = chkval - map[i] = ?o - end - end - upper = idx + arr.size - end - end - - def act2actid(act) - case act - when Shift then act.goto_id - when Reduce then -act.ruleid - when Accept then @states.shift_n - when Error then @states.reduce_n * -1 - else - raise "racc: fatal: wrong act type #{act.class} in action table" - end - end - - end - - - class ParserClassGenerator - - def initialize(states) - @states = states - @grammar = states.grammar - end - - def generate - table = @states.state_transition_table - c = Class.new(::Racc::Parser) - c.const_set :Racc_arg, [table.action_table, - table.action_check, - table.action_default, - table.action_pointer, - table.goto_table, - table.goto_check, - table.goto_default, - table.goto_pointer, - table.nt_base, - table.reduce_table, - table.token_value_table, - table.shift_n, - table.reduce_n, - false] - c.const_set :Racc_token_to_s_table, table.token_to_s_table - c.const_set :Racc_debug_parser, true - define_actions c - c - end - - private - - def define_actions(c) - c.module_eval "def _reduce_none(vals, vstack) vals[0] end" - @grammar.each do |rule| - if rule.action.empty? - c.alias_method("_reduce_#{rule.ident}", :_reduce_none) - else - c.define_method("_racc_action_#{rule.ident}", &rule.action.proc) - c.module_eval(<<-End, __FILE__, __LINE__ + 1) - def _reduce_#{rule.ident}(vals, vstack) - _racc_action_#{rule.ident}(*vals) - end - End - end - end - end - - end - -end # module Racc diff --git a/bundle/ruby/3.2.0/gems/racc-1.7.3/lib/racc/static.rb b/bundle/ruby/3.2.0/gems/racc-1.7.3/lib/racc/static.rb deleted file mode 100644 index bebbeb5a..00000000 --- a/bundle/ruby/3.2.0/gems/racc-1.7.3/lib/racc/static.rb +++ /dev/null @@ -1,5 +0,0 @@ -require 'racc' -require 'racc/parser' -require 'racc/grammarfileparser' -require 'racc/parserfilegenerator' -require 'racc/logfilegenerator' diff --git a/bundle/ruby/3.2.0/gems/rainbow-3.1.1/Changelog.md b/bundle/ruby/3.2.0/gems/rainbow-3.1.1/Changelog.md deleted file mode 100644 index 8a678e1a..00000000 --- a/bundle/ruby/3.2.0/gems/rainbow-3.1.1/Changelog.md +++ /dev/null @@ -1,101 +0,0 @@ -# Rainbow changelog - -## 3.1.0 (2020-08-26) - -- added `cross_out` aka `strike` -- hexadecimal color names supported better, see #83 -- gemspec: list files using a Ruby expression, avoiding git - -## 3.0.0 (2017-11-29) - -* added String refinement -* added new `Rainbow.uncolor` method -* dropped MRI 1.9.3 compatibility -* dropped MRI 2.0 compatibility -* removed Rake dependency - -## 2.2.2 (2017-04-21) - -* added explicit rake dependency to fix installation issue - -## 2.2.1 (2016-12-28) - -* fixed gem installation (2.2.0 was a broken release) - -## 2.2.0 (2016-12-27) - -* improved Windows support -* added Ruby 2.4 support -* added `bold` alias method for `bright` - -## 2.1.0 (2016-01-24) - -* added X11 color support -* fixed `require` issue when rainbow is used as a dependency in another gem -* improved Windows support - -## 2.0.0 (2014-01-24) - -* disable string mixin by default - -## 1.99.2 (2014-01-24) - -* bring back ruby 1.8 support - -## 1.99.1 (2013-12-28) - -* drop support for ruby 1.8 -* `require "rainbow/string"` -> `require "rainbow/ext/string"` -* custom rainbow wrapper instances (with separate enabled/disabled state) -* shortcut methods for changing text color (`Rainbow("foo").red`) - -## 1.99.0 (2013-12-26) - -* preparation for dropping String monkey patching -* `require "rainbow/string"` if you want to use monkey patched String -* introduction of Rainbow() wrapper -* support for MRI 1.8.7, 1.9.2, 1.9.3, 2.0 and 2.1, JRuby and Rubinius -* deprecation of Sickill::Rainbow namespace (use Rainbow.enabled = true instead) - -## 1.1.4 (2012-4-28) - -* option for forcing coloring even when STDOUT is not a TTY (CLICOLOR_FORCE env var) -* fix for frozen strings - -## 1.1.3 (2011-12-6) - -* improved compatibility with MRI 1.8.7 -* fix for regression with regards to original string mutation - -## 1.1.2 (2011-11-13) - -* improved compatibility with MRI 1.9.3 - -## 1.1.1 (2011-2-7) - -* improved Windows support - -## 1.1 (2010-6-7) - -* option for enabling/disabling of escape code wrapping -* auto-disabling when STDOUT is not a TTY - -## 1.0.4 (2009-11-27) - -* support for 256 colors - -## 1.0.3 (2009-7-26) - -* rainbow methods don't mutate the original string object anymore - -## 1.0.2 (2009-5-15) - -* improved support for ruby 1.8.6 and 1.9.1 - -## 1.0.1 (2009-3-19) - -* Windows support - -## 1.0.0 (2008-7-21) - -* initial version diff --git a/bundle/ruby/3.2.0/gems/rainbow-3.1.1/LICENSE b/bundle/ruby/3.2.0/gems/rainbow-3.1.1/LICENSE deleted file mode 100644 index 1330bc62..00000000 --- a/bundle/ruby/3.2.0/gems/rainbow-3.1.1/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -Copyright (c) Marcin Kulik - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/bundle/ruby/3.2.0/gems/rainbow-3.1.1/README.markdown b/bundle/ruby/3.2.0/gems/rainbow-3.1.1/README.markdown deleted file mode 100644 index cbc0bf37..00000000 --- a/bundle/ruby/3.2.0/gems/rainbow-3.1.1/README.markdown +++ /dev/null @@ -1,227 +0,0 @@ -# Rainbow - -[![Gem Version](https://badge.fury.io/rb/rainbow.svg)](https://rubygems.org/gems/rainbow) -[![Build Status](https://travis-ci.org/sickill/rainbow.svg?branch=master)](https://travis-ci.org/sickill/rainbow) -[![Build status](https://ci.appveyor.com/api/projects/status/vq4acb2c38642s5q?svg=true)](https://ci.appveyor.com/project/sickill/rainbow) -[![Code Climate](https://codeclimate.com/github/sickill/rainbow.svg)](https://codeclimate.com/github/sickill/rainbow) -[![Coverage Status](https://coveralls.io/repos/sickill/rainbow/badge.svg)](https://coveralls.io/r/sickill/rainbow) - -Rainbow is a ruby gem for colorizing printed text on ANSI terminals. - -It provides a string presenter object, which adds several methods to your -strings for wrapping them in [ANSI escape -codes](http://en.wikipedia.org/wiki/ANSI_escape_code). These codes when printed -in a terminal change text attributes like text color, background color, -intensity etc. - -## Usage - -To make your string colored wrap it with `Rainbow()` presenter and call -`.color()` on it. - -### Example - -```ruby -require 'rainbow' - -puts Rainbow("this is red").red + " and " + Rainbow("this on yellow bg").bg(:yellow) + " and " + Rainbow("even bright underlined!").underline.bright - -# => "\e[31mthis is red\e[0m and \e[43mthis on yellow bg\e[0m and \e[4m\e[1meven bright underlined!\e[0m" -``` - -![Screenshot of the previous code in a terminal](https://user-images.githubusercontent.com/132/132943811-93747cc5-bdaf-43a2-a1a4-a1f18e805eba.png) - -Or, [watch this video example](https://asciinema.org/a/J928KpHoUQ0sl54ulOSOLE71E?rows=20&speed=2.5) - -### Rainbow presenter API - -Rainbow presenter adds the following methods to presented string: - -* `color(c)` (with `foreground`, and `fg` aliases) -* `background(c)` (with `bg` alias) -* `bright` -* `underline` -* `blink` -* `inverse` -* `hide` -* `faint` (not well supported by terminal emulators) -* `italic` (not well supported by terminal emulators) -* `cross_out`, `strike` - -Text color can also be changed by calling a method named by a color: - -* `black` -* `red` -* `green` -* `yellow` -* `blue` -* `magenta` -* `cyan` -* `white` -* `aqua` -* `silver` -* `aliceblue` -* `indianred` - -All of the methods return `self` (the presenter object) so you can chain method -calls: - -```ruby -Rainbow("hola!").blue.bright.underline -``` - -### Refinement - -If you want to use the Refinements version, you can: - -```ruby -require 'rainbow/refinement' -using Rainbow -puts "Hi!".green -``` - -Here's an IRB session example: - -``` ->> 'Hello, World!'.blue.bright.underline -NoMethodError: undefined method `blue' for "Hello, World!":String - (ripl):1:in `

    ^e(GY6oE}8r%6430F#al2EN6O^zLo_OA*DL}r zGS;7_3yGxCzZJ#JA|fnhd>_o*u$X2#-3B{q@T7%|zyBxI!!NaFz=>|?-*wRb_KMCP zBWQ?Vrv69xk)w!oHXN#9PO@p_QJZA>nU*gTP{LE1uS8l9j$_ z$X${woZE1X!=7o4e~3M55RYkXc17VZGW-YC!c>Z#kwnB`K zJd#QH6n;dy7F+Q#Z8)hkrK9Wg%1RYYiU(@?oaoGZZ>$_h3UP1qonPm-7|POL#tb>1 z=?t6IJI1@ar&4s}_!viTEy@;|UfIdQnSf=_1tCW$35dt109 z*!y#uGVC*B8_Ly6dBayb(1pg;e-0Og7Zgqn9-IqkZ!F)&cmm($mB|*+*7;fOU~R!; ztbuHH2&vua7mzYru9Ut#ncZRqQjhTsyijtbqp|?v17$#*J*p$v{}$ ze_b!;Q396Rb;u1Z1KdI}x7t&QL>g7|q3;J^G=hKgMAXV{2?_Cxpsi1$rFP?TyK69K zt1(pd0NcnOIV54PwcuUI=i18|dy>K%;5 z;=qZ^V{-T@ifHhJ77H?Xa+)JxDI8gqm$qFK@ni74up5%DE(el(-Ii0VxwP(XColL7 zdNdQS!}=-Ea0@&?rEdSwD$FB^;f%1A-6+jpbO2z+aGuh(f77WMN1iqvxtUXl`OSj-A$cKmjKT`r_5Pf>{6(L)f5v!&| zZlA5>Acl1M%1VJG=g0{emPb@c6w?ILXxI3&u{AvD3L)<9AUs9y04H{V_LNTb-0+9< zo9?Ra3X+zYc_3}m_kQ`U^W3-&(}6Xe{@`WfWC38Zv3rcZIGeu*+cD%+{Yt?_xI{9` zk)%*Fvus7g&z1;2A9W0`Po$Gu&w@N1j1(+=Z zu|m}O^)eYM3|hWeTzpzn(nW%Mc)dQ8al7Vg@Sl9f=HH^ZtX!;IT)waeRajF-Vx4AYju zMZ}WNT{lS*Z5Agp2$HzJflwXwSM>8kDTJ;{8|K&cUN6CCpIZMiyv*Dq-m55=t0t1n z!?_*uwF81EnlFy#_`m7NwPiV~RD-l<)|x7qfWPD&h9myz>)fN-;(w-A;gA(H0f`9z zl5q`-^MU^hNBa4BJ%cy>BI}bk`tN6D#B-|6`5X5H6up^)rEx2*5Z?N0yS8Q74|JdjlUGhSI9Cjh+nc5= zFTE7+qFf`nY(kY9nTtbI(|{2^ZraNaJxDs3^iqH$64ul$~_6}iLzi&uk0 zM6paGQUk@(UMsQSFz%TLJk{}5 zXr}G%YAnTm&U9gjrCm=y;yu&@xY)~YMg2Sb3bv`Ur9xq<^!3#-ejD`<(8^fEd+$`@ z%R2gP);Y+E?W%JIkZt2f0&hE>JDW5#o`XE4pR6`JKB<0p={ThSDHP@#rw4PF zjWGcKm$4j+G1%t2{?ODfGAE~ObH>qKRT}==3Q`6A9hlwn$|cV!Ss}wrMu?Rfg~U6W8mkqcm65u$XnD7V{xYA1$DK? z+R0KONuJkEMz}fo8lhoLNerRk+Hovo#UDBW2~>V)#3HdI`P@`y*ow@4D#Qhe)a&q6 z%nj_^ndN{P+WkilsTp{u8|<^^ZRgedBbOKXRhQ=Yez*4dZf;#$tr8)z${mg2z$Axa zvVo@LAW@9Z`+5*5I}zxm)`n{XQ!|9Fw^u8k5uZ*>nlV?U8Bhm|=|};WB3s38&)bc( zD*nvs{*z0pKb;F`(RIhot|4T<>Y6Z+@_%2A_}#o8+vfH*@AYoF5kYvJKom~MwZ`KH z@J2eDp(eA9i|keVt67oOA9Tfr=8W)it z;!V}Apr$bljWY7z!z})9m>16ab=BA&agQmyMu_z1D{HIlOmkJCLOnjbk+i!cEO->L z`gnouuR9f>FnD4@WP%?*bRa?rJ?v``kWj+V1pbKUd~LGAWa(`2({wr=&)hclWNV6R zJ@ef3x%d1;nt8CJheW7_c^7-8uJvQ<(Kldu<4WlYB#;WyCc;aR-VupaejAt14T4@l z3CvCx;kJ>yalIn7^^1q-e@LssX!*qTNrX`Z8yKVlq?CWP43+<#eO%cLzASd@RK1c#2)b1~?wRICX9;te@$-t^!En0bLvhi65a}Gek{p zS^%Dx^uhTf^#NL}c4r5Dp~R)fBO00LUe6C|0@Kw0iP5r7)h&+*J{L39@FlEIqo$Yr z-3IlzCmxkG*MCSwb_&`~l7|?g3BxR{KwpS0!;G!K{77-ZA7=Y)F1C^@OwcQSk#n6V zB=BkD`{E`rf+7)k0z3$%ZToV=hs+YNsPPc(R=)O$@l{}cy{&G_RtCN^dT^RcZ~Qg) zIULTP?5IR^wZGkPeEg7c?vCUU#J)C^+BPP4NT6fPf_I|fK_lVC)@b5F;~$p1M$Q+# zBBIQ8Vbh0nkTkf{36D4^$P2f95U%yQwfdwXZ8iGI6P1u7@gLd>dZJC%zT%s;rM=5E z>1Y>V8ym#@Z})6#CJm5VFTySvl$z7AJ!rdIbG@UBy!37Lk(DZ{#9Jh^Ab+DEpy7Yw z*k+ymcnz>Js1H`yuoM6j4aPP`?Q8Z`0oh+?iX8v4JN$moX}w=QF2kHDxjp;MKH)L( zN_i%$X~}`qzvZsk`?`j4z~|O;Pgqf)Wk!{(v3*uoU%1gz_i!I?r~3B8G`z8T-4D*h zcvmV#{4&CppOq+Oow-^<^47I9?i~D7MO^lcfImx_A}L`+leag z@+D?6gLC>zlo3_!tmTLO;kZS2NyYxRT3`bG0!tkKI_>#C^OK|gKfY^bpbihH0z?>~ zZmUGOI{Nm7eoQF_XtzMQlLOOP36evT>zhDs+37QJk*O*05D7cF-SbPj-<*Igw;+77 zP>yIq(%#1iR^7NO(Y$+?k)G6eYhV(veCh~+@jjxe-wS~mpqBSH6qF;2BO^zn=C4T6 z%fZ1ym2PV?@bk44muB2T2!o+Z=-lcL5QoFTLxnwM#zjMo_*mJTLZMKTUu|j~l zoSV+!oqqp&s z&#^1qXJZn}&G7|iKkTaF>4W?j+7r0O3a*!aahX=z{poW%RM{O9E+<1m+jaKSpFC1L z%TKOBT0?LZg$3as(e_3J=7>Q~=owM)Fw>%dM$*u}8aq%J=GdhdWqwykr%bAWsk}5- z7vZGA;AOKd5q>hk#CFl}q@t+_w~E3l@HS0k2Iw1w9#gO5#OB-hOP`s#p~#XEls`QY3W>49(7{$)E1+T0W3 z?YA&jePw)Dw|?$sfKE=D!@c{P*G zekgCD_*@-du9wUbeV--zjHSYk>K-t`i6&x-1T#2N7j?poklWWnWn@;ihPd+ta=~tN z0^gp2-cV^g^%AnVcsM$hjj<)FgmIztSp^O<~Lg|Y8GM6pme`KZr{nrkIwuw zr){-wb(25&G!O-!?h#r9`I=N&wVsw5q8mwkeLhGCkJ zemoX)CHX@|M)1`oIoKTlc!gQ+zU_^so^z_~->igQgwQ&lH?WH&s((KE#zmggvHj28 zL-66B(jS{>7a@Q%G2HcYxlWzz&2!jMrrg{UMNZV<9%)k`(HY(seoc@|R>g%C>IT0L zl4rKvjSaKr;25Hc8HW%gA54O0Hovn=JbE+1jX|Iu%QKrDz6V??<|3}h2wDkSjt5_4 zu!PrHbRSZF1OoYvVd79%nNRl9@5D}>P%#<1^H#~w9)hh zOfz;;GFDpp|DQKV$y2(?TWd8Wxv=h?^t+#1VxUe0tr#OBL5cI>7mmp59&%or`t934 z9Xw)1=~i39)kLtarTUB-&>r*-@Lkz-BwSj!cnA{lghb%vr?#cvI7}%PsjpaGC^03- zTR(lNPwm>Lg`|_UuL-O4jmsTOgC1z((o6JHqJLSL`)dhbNQ)Y4@cnr`iUh_&?}|D& zI9R}wOnqO6ro$M=Pn%|f?hJHw$-g4a_I4VEDPrS`=B?00(zV(fr=@0LXiiVNA+KwW z7;x(rlZFK?Y;OSBeU1h|2!Lu+Z@kq@Vv8K~%~4+by0wrv&mWVI15GUi46&Vo`qAY>w`-#O0Yf#pP4N|~qtZx;M3y~Gl$EiA`--}=X&v*I?M1+8FbXw-` z(zHW?1;3K^yK9;gX=XA$XS(;Pv4W0_Bm8lui;B4>v7qwM;$@C5cAxW_J1gn0?W5C< zArzZQ(`I2HmwEUYSFgVc{pZERcW#%`1;s063lTmCQ zwQ4vPIBsIXe6R6HmHz!i`FHE~TJ$Ro8Eb^u*?FY8Z(!fQEX!Y5^G>T!a)J_Rdv?r{67l%K{6oa~ zh>4y~WdPJxs=Gak$cg;DvbR7+!`6%J#;RvIS5s78!0M8b5#S|8VJ5R&ShTeAk|(RO zS`ocWkvn^?)Nd}_6rLtEz_eV>Z@3CxJNpE8EMhnV@!ktm*|(Bk-O3s=7JV@(UgVC+~Ek5si*1oDVQ(4x0P6(0;W`i&E}+z-PMyn-{M&${K7rz?w8~UnUvh0}>k~ zcv9gyD#&Pr38^8#$a=*4Z_sXb`9=@&omLCNsSl1WbNi2?zS0u-@5XNY5h0Wgn0TiI8?=AVeY%~`Ijo0uE%ZM zh!ZltCP@oV)y^mUc{{I5h)J$4rgsY57i%vIKU}S^y%5n>*Z0rvekWf!=$DW<0yz(; z2c3u<+39MSe+!-2HItYhYQ%anP&sS&IkiE3d=6rpxz)L`Dl8ERnv4fP4qpK|py^i!<&npeNO`QqKcRbk%on}|>t;p{SX(`lhBsG@C zM-?(Z9E}Gv{W_dzj0#FC5{H3kzqo;D++GeE*al2dnW{EBqbX$Mmxp4tgQ4;)8}y2v znezF+em2!gLhUI?{RsB+#jIiR4$rI<*BTwOIEwIhiiMwYhPXw-^6bX&JaMVMh%bF= zl=FNrk-eOVecFO=B;P24SZwNwtHhL7LW~y|BRXR2CFots;Czc-2U$5nRgA7NjoMd` z^khh2ky3EX*sp9j9k}ObxxR(Y@@1ZDK}!g=fiB66Yx;4=l90vXnF8KOk?|}P;5rC? zLkgF&* ziv3A{YU^!EeVB8Avu&u_+wLibk9)g&B6pn~DbBPNm;!&daYL+*`+~<`!&6W3Z7Aqw zz+7BssBDbChRD{P;D_99M;y`+Mc^|mvAXJw3^EDssTIUfMBWG0`cQ7(ITvKyvf;kL z)ff|>A#?klA)SKMh;fRQ*&{M}tp?8mY}|sTb@y)DU#?}r4{qN-F0zEA>vvOQNA~qr zh`$diIBqPiGi5FGwnq(TLQ$hC$aFy%1+3T@%SSPna8UMW&*`RhpA@(50Dnak^o2q#CbsATq7FIaZl<}&BORYuFpE@Am zv|b=}==+dO)a)U0&?&6vPYc%><)o_B`^5XqPY^9+ada6vSoxkR<1X3mXEmue@PF#Vyk$D8|@y3#OLSz@vbtZb%DZjOxiGwwR^sJLL7|2GT zUh!hn+BKtSko4%c&HAOo>V^xtkpZviO1%1O+PZzY(MCYqrL2jZXe6b7@*R1}n`nf9 zSXE;X#CMKAH3|HPc>#^c(Jcqopx=7(rf zkdZltIu0q#-D1||yOAU81&0xnlZ*ZJXs7T~%mPU!C5OgMd=L+{-_r8#p$}9o^e50$ zXQI#rbzd`_|I+GiMSfU2WOS)W1+pgsubD_89-(?&kh^}le*1h{9S2*QM$gBHte#hf z0YVJ_REeIoHJ3_pB7K};#?nxx* z#d3mxlMxQlS{hdLbHySHsBVVX*uVKD1$|wIhU-ce*0Xl0coqc|`5Pjc_KU`7ANS1c ze|BpGheeXLkReSE7~dwNq{QlGe$H!b^zXjm*$Ge~KOK@#2K5uZ_k&T2#*U1WzVDk; zsq9GP+9ZHff|~8qe}R^aGHrE0LTgwwQU*rm;z=g41xz(%OwY=Oiv^Yi2_18(Q?GtL-AQmLblKLs6+D zqgXPgnx8+UY6qvW)aO$=iuzyhWvZ&&46DJSAAhPS6)9!jPpqRcLUeFKd0o!o_V-*>Tx1Ty@S&+v|}VvhDPd!&95TAATjNi@fpsA zo!*$4ShP3HgsYi80xfQHpDQwEdk+JaQbtb=M*F47_O0OSMdooKsV^x1(q4$?AwtbfQq5CFR~?__@DjG_X*`B5O1q4%;W;6%h5n0ZuwbrE29Zuy6$gPdUtqdqxK zm&|#8b(3{<<4xl&{l%B@kVoUlIC?e8ct;l~F%W6qoWzcSIS`#05-mW{9BzN~07PG09E+&d;m(*aGYGRIT^30wtQ>^UwEeqgV=9Rg5q9S$`

    }_ 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 z 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�ZX!~k5Bo-~Vn{WACn*w`KEdrO$uz~Q06G*^I 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 diff --git a/bundle/ruby/3.2.0/cache/rubocop-ast-1.31.1.gem b/bundle/ruby/3.2.0/cache/rubocop-ast-1.31.1.gem deleted file mode 100644 index e7cf5b27eb2c0ed8192a5a9caabb718240894438..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57856 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 Dc16Fb diff --git a/bundle/ruby/3.2.0/cache/ruby-progressbar-1.13.0.gem b/bundle/ruby/3.2.0/cache/ruby-progressbar-1.13.0.gem deleted file mode 100644 index c50b94b26ef15bc4224ed99c434b2fcbd0b73456..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19456 zcmeIZQtW_g z_H5aDMr1@r%P)HW!p_Xq$kfQyh~B~*=%3XX|7xtPtU&*(|Ev9D&&tBg0mQ`0%E-vZ z&dS2b0mR6}!ph14M9BEhQs_Ug>*nHWUjX zNDu`DG*fEku$)&mOV~2pq9aQZCF?71^f|D~=yF+%#K)0C zc^SkQ!@>d_xCL&3w5|_g2ros{cF0dE%}OiapXPqg<�rWo}@bp?rc4W(^lGMHZr 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 Jf&YyK{vSxw8b<&C diff --git a/bundle/ruby/3.2.0/cache/sawyer-0.9.2.gem b/bundle/ruby/3.2.0/cache/sawyer-0.9.2.gem deleted file mode 100644 index 5213eb8baa7d1a0cd7a2097ed41b4afa92f9d2b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13312 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 diff --git a/bundle/ruby/3.2.0/cache/terminal-table-3.0.2.gem b/bundle/ruby/3.2.0/cache/terminal-table-3.0.2.gem deleted file mode 100644 index cab512cfd3234b91b787e4049644045b0840a99e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22016 zcmeFXW2`7awC}lX+qP}n#@V)Q+qP|-ZQHhO+vYp>&WHDMGs#UR^D^(ltfW)bS>4sE zs=NLxo!_!CaW*hEa5kVb^91(XFe-}K|% zdY$Xq-o({}U`s)W5j)=fbcdosM5Qm!FfrImRrbpH!3+C?T|l~e6_V}~Ij7M`A-B1A z^RAq8*198yf4EK`ZqDc+g|(22yMmP!T5{!8x$W}>+?8a5AMESFhmpdo{d>r!<+A%$ zIPn%DzR@ji9Q4vGKpv|J!{xvGrD)0pRg zRI8!~?iZD##UetHM5#c7nB!&DK|gAa0viFyGPB)sD6}n182dwHcMI=b7brt3G0m7S z<;YYX-en9oESnn@4we*3&^v=UKNK%fJ*j>-SYoBNTWj-fd%3sd2Q~6{0vI>|@w0AU z^SU|K+^`qb*}TS9eEM^XK?Kvj->r3&6S)mXvbQqjx_ zIZPqU5Rw#}%exO+6_*i4xDP)5x@1?=!iQqvgD8Q5-5GVzKqqQ}ZsU_Ui6|%+E$;|` z_z?Po#+VsJ&DWW_IAxirA;s7`11n7*LJE7MY5x{2l z^U!(~a_n=0T^(ZOW>&WUU;qD`SNH#l`+w^HmCvmmwxsKx z?}?tG^flZ#qhvxN%`^jXoP{Kw6R~tCNgVS$g-VijBrjQK#!V?j>@h(Wz5tN5J@gg~ zT_0&b=sH0diJKQb(2=zN7yW12)~DjK&hj>iN!;j*wa9Gv^hKq*YHg)%_v=Ns`Z6>* zjttjd^@|f8w!+!5&h^CsS!ydUX3YQg8il)E1;mKbyuD-_D=i5%N1S-&L?s zYM1~E4INRm{Q*2s)!AN(JtY26+1>NmAs8kocV!5XSv+8!y6qYx@IE$#tUm$jsx;v| zfgdB_iU2M26aezC;;$mzntxZI3`KDW$(3q-VXXJftwUOy4t0F+H~|%YHI~60e`8mE zS4KP?ziaJk>~?B?Tkkc(P}|AWhBa-fbt`< z9kwh{HG7)aT!Pt9dKx9KRvAe09GgbOp1xY+7k6UbaSu4PcjQxvOrn0#J&6zmJYCU^ zjToMJ%;LTh0g_Ne1m3_>}h^A}~z^^76S8s)A|6)CxLT!pfp2i_9?_4YdI z4=0|hxh`TOn73VR@n%H~w4{4Q*xOKFG3RNTG`!kOi)DulWv+xi+Pe?NG9SkhUy*UX z`m@xnTmbL49g$eO|BDRX8O)!0x&tWEzuIr?oV11Jw+y?sS~#d@6>&u8S50pzSp)fZ zFyuV4o3GaiFD|=|Yo|o^T)D613N@O9aN{NgG`bwwF!HkBIj|z;%*DaqC;d1z;#Z7r zJ$S+^s)Hn!iXp@xciqQ|31)cM^5iXOVw64C%p9bd3FBQU zLzxdFkig8JtT6#Lpkh_NO74z9NqB}fD*el>X#Et#7K3~;z@rdX4!W*XQ4c`Z0!&=3 zKZo~of=7qWt$+|yP6R-f*Mr`04vcamywt%OaY37}p~7~N)Nx~f2udYJs&r>t3naV2 zo^-O~J4wfWP|!#fP_=k?Js_&PDxbWgsKP4( z0m!8Hkt2PyC+aOv`=A{rGzvKEz;s4E1blc#CDDQh30eQ721UNvn3%r`3&9%|A8?}w z#g7vLgwf(*Kab(XIyjTjDN_`OCj%=yuRY|wc2z{RU%D)(n!4@v=@YKh-=9*YSu4}E zmM-3URyVxN<9u{qdKncb_>^4&gg~)4)~rompb{f@0v542f3PV%G;4m_mb9p8X!QbO zSkG!RWPz9-is@fG_FJo3UZy;M#Pn57gFntw`)lOEpBO=ssn`0FgaK(mY<`%YD0oxI zb=7B68Jxu|)s&^eTi;1sc@?_Zc_ACx&TRnaJ%)QX;K8Gf^L@Wcv z0op+E00+V8T157Ssrdk76(F@G0x#TD|MSLx3`oKlD zu?5*vF67VtQQ=>mVA0C|kv?7U-Ejcg9R9Fu=wYqy*%*DiL^dKwZyR&34QaNBNI2vo zPDh-wHh|UB1G=h~h3v%Z|0!=^gMU#ba;|W&nsf+?jQ6@)1BQ0>%PZ3Ws3KXy{y>wN zT1=^qn>hGU|1sC+L^soRvGG`zB~UZU+)w~-)_GuT3V^fG*Y=I(E@W(@$Xwv;2QjDb zwtlfEod3wy~5Q`DMz&Ssg7RcprzV zrI_3+Qvt%>SxWtMDs6$x23%u2hC3fssok~ zOND%qnD=L5O9|-iJnSpJ$K4|gcvp!&q_j4>aa!xuKL{x>fuAj8ixz7`oF35?9@3|J zJ#aNfO@-B3#ZnXY1XsY<((@Qge=<<(ONF_tD1YIOO07T82uExcbCnd-iYn;Ou0dqU zg|@s^cS0y-ewI$D>P<-0;;<=9Bu}>i9nElBsdOvKzT_ZfC_B(pSOA_A=pG#telGMh zPu+LGO_U(&PlM|L|B&wd^>5RSDsDCh*B99wLM9f=$^T2tVmt4-M3i3a2KhOL8kJ!L zZ;%Bv4-|q}eme9LkgPE%7SsW%JP2t}HfYj^M0_`gi~W8|5URUafNZL%ErS@h>)XBL zYh`x3=U$7Y8*(f4+o`4}o%6f2YB&2YPlAiqj8-Gp!zTtqBZ(sV0(5WOk1(6wMQtP1 zAg%=loFkL-BgY9KWN0?t=s#$CBl&`M(&aL%i@DC$SL$5q(!GML8v0jIDDGVV>z)j> z{u#LVY>~YHUQ?e}0$4|IBlBkfSLnOUmjk4X1ueGWnWQwJy8GBi0cAgG^9S+h8w-^& zlW=d8*vTKHP!yTS;!h=gAgwGm(;CFF{JWpyDTSZlh2eR#z~A zRmWjKHU_AGfI7J}(}3Z@TNby==3>Qj4wIwrpNR*uosmz1p-)7ZNiwZUpdY}Ca{>@J z_<`H)LK7oIYb0X+?^#_l&H&cU^T_05&*XjOV8CQEy!qXD%WtSu0rA?{h7=NMykRPA zG1_oufYd}C^L?GV;R~d!fZ+N#ah2YvF#fWFj(Fn>u~~y8%eeS|!=8_kWQVUKR74_d zfza(A%;jycsx9xj_%yy zD|bQbz^jA8#1$rY4!eVrsFt8C3~!y@2xIYCUtjAhwI3;)ejql<|Evl z+j={}Bj8{1O{T#=y|huCEzNq@J+;v~r$?t}U&@yV1vn=R*lcs$U(Df?>Uzk&TAdcS zc=~LwaPYEm`e&J*9?nRpKB`>0)X}DkRv3wn_UHEx9pUC7N#P(NlDXH6D8elbq9Kg? zcje<=iTn-SYTM!K^xfg2_y6wX9)HF2#R=wL1K)dvo%TL^(pvnswluqV{d}^`{yKed z>fe~xwtu?I^J&f6OgJ1o^T;J$eCez5s(j1Yo;j-tj|ZzuFpbISTn~h@pQbPm@EXoY z$K#)LMS!$>+$s*`KH4fupWAr}P)&1c6sO?!h&BVc)WpauLa}Vh^zmaUNG)11IXz;h zplJ3#>Z7V^sp5}_{-lmxdnUeY;vl=Q}wTdfoy&7`eAjZi4oWsy`&ykw^ zYL1RTRjo|`Pmh?-1R5W9FNGLApL?x9Z|7 ze1W}OI0RDf8YqC#9^8d@bGT+-(r(QqAls-#X5Wt^WCu+S=W8L2rRU3;i!RT<+R%D?r%z(UsLFY|FIM ze1+u!ZZxzNX<3@2R zM9*Wu0WRh*&to#uP#kQFXHT1^RVZY{=imDTzZQI2LCzEuvBtr%_mnpI2A`zRp($mgXw5vq5C-qaPqqK zp|Dtdm31Kkd4o;!@%SnxT}>8AU8DKp-K;2z!|z1VX5cCod<+;GMvG+2iEShVguTFTP{8^W!s+UE2p%V4_knqB zJ zP}cy*!jk?4R=;Q{;!G{52+eOT@8ebwJF;7Eyv#JD7)i$y2k^S(8rd4HKS1_#^)l12~F&uv#eIR}bksyyE6+7`Q~_Q;l&x1_BjmL(IR z?o4RbW*CO~?5A2lR#uzZh{O`JSPA)2t3taBjikk^%<>&8BLMPY^g1sQA{r{hqa_Gb z_+m&lpC&qCqf1PsdUbRK;uFjl{evlFqJ1oqB9UYX-BII%mUmGeR@q6;Z0j@JUq?b= z-_d;fXZOx=?_RW9o{ZboLs^PvUr5gq6B-`VjoFDHC*7FZ=nHr5!0oYuZipg&2^gwj z86E@^*iRGSW5{fAE9@*-h_XKD`^dB$1^S`vdVnfU-nSr|1qxk9>*#*M#Hu(j#3hXH zaN9zMU@O@E1V-*nt}g|IDhg|$!L5iAh?RLrej{hIF6HnMvk)Wi*!e6Pkv6bYNn7$v z_IogwQs2Aox%;+9nKzW^H^+8<^k$g2g-0P$8v8InSGK`s>id5 ze$Z&ZI5f*Lc>N5XXzf{yZz<>*;_(?gK{>a6WlkvETPS-Rv_e&`7Xuz0EQf5H!Gi0; z;S^_|M}5}#kxdnAV5KnT3MnBUY9xs5)-u8&09#75ZvWP&E9r_ z%Bpq6XA-NC38K0nxaqmGC4&i3*SVfa2JljP8`@hA1{vBLH9?AjARcan!z@@tafF^# zXf9?;K?Ob~Q-@15dz2%>=(3urir~W~M)io?Ed&q1!Z+yX zm>_)4Qny&Xvat^%i* z!Q2`tu(xl)ln}#9g%*J{fQTUF{lmx@8Y2eXom)jj(mi0+jYC2zTELPg3$(y5A=pQj zkLkNK^fDPYk8CrVglV6U^O_BdDD!873i3Wy(N-dIlqE%}4C}8^ESL{dLEb_Z2y33& z3yyzq`0kJ#JHsV$kmF6#C9c^WT^%fnZCD1>bO%6sCv z%7|ReRV7LcRPeY224o6|;F=c2vWp;l^IypcsX@o&qu6{Hj|!5bGWg9R(;m=5uR+9q z_PHRKiHT#ME^y1=lq8t##)|pQ!TgEtzBe|1Z<;cQOgpR^Ka@Yl%AdjYYFoVTVt`eD z7Md%-Ha%d+zWl?i7pSn>;8Lfvb> ze*^Y+X*=l+S%PbQJbjbs>v@;=KI-^I#D`pC@1@(TQ@ZFyX3+PbGy7Yo;Q3c%2H+|g z`hrmuseH!R$XN9EYn7uYTkBM(rx{|m77 zu@*9q8u8jqpZeOvpl+klUsl+x`7hhoj(^}>O0R#-+^x&cx7inV!@{kdpQ3;{t}2M* z7pbc*YQU}^ou4uy#l57{ z`>0Ys&|{Ve+`Dmyd>jUVn15=4RgA!Lpm4U{$9V-4pTh;mH{M`A`hco<@icX^Ja(Nl z7fuflVa!=y!?*V)l>i#T*r+axYV0e&_65au&!6+b1>8n)nuYi!#o|r2q~k}SBT@z{ z_PG0TsHSvmMWzDl3Dw@ODP?k)$F$$-{1<=XvHP1Ca^({1Fc&=7Bt^Fscud>364@g?58buWJ+U)Rn5r zR%)H9jZTHc4&uQH{!BUxxYA(Y6cnlnZZWfD3e^f-dB}8y5(JmWr~);4>H%J)G~vNh zH2H%_ld!zZ1uCIIlC^=lS+8AQanK)bmq1|5B^{Qdis2vF!&XYU>XVS9MMxVisn3-Y zP)v3!L7H&@{S}}r@syi^umM>%>{}N0ZindsMD~XwKGq%O#|~VuaNF+{aablkiNs^4 zpk__@byRx~*C-O7iNr?#-jDtYeqTa1OVT2vGWXAw7hp5s8(~12KV_4SI}L3gY*&dY zufHn1f+fz!fFgEM1YSXiX=5g>NM$aISVTXaT8s#WOFK}C&o>F#z`+2r!A`8A)iRpc zu!K^COsr_dL9U7xiHL9VSGDvzOJfVEVGGl%dfu5 zEsbHVykxXTlK4C$o$RDh4AZV+tzt4HQk}um`eGlV>wJ3@LyuO-YIgeKjE6=j^D0&n zf(iV!Uk}5dCp2}jSQocRQVREZ0C6T z$Q|RuYx5wnP+ze^;?phq0)feHd=Xmq6`d8fL-6)!C~EO?*|KEDRE|aK!1Ym^Gt?(a zCG#|)6`~`s6*2IkodbOVR~d{jnum10D6n+Xh~yIr;BU8>r;GjIbuZ=emvpuF#SG-prylSLKjV~)!-a0YdjY>-Cnau;s#Bk`* znXSs4Z-X!j&8n)m@H%w6_AFcnksk}8)3Q0?sgpQ{dDHw_z*h{|%mnh7JV|4Kzf`Cy zGs1fddns~Zo}4_jvd4f}jjE<+NT8{tkxY$y8s|r7ADaFTfjpgZVS&33%Sr*&><{%D zo2ahOt^IfHDqGS$zGYVH55L`U67Wwb&;|>`*LXnKhJIu(5gvDqjL(4=dJij>hBFpe zV30xLEO-ElN~nA_)xr;xfS(`03*iWYGyT+2%>y+9c0k=2<#^>^?_v+9UPc zoC*8RpPj7d+V=-P{7b*fn{AIvKO-CF^ItEwZ?>P`&G)Zj#hkYOzVooEK7b0$IFG37 zm%)`E-A)}OHxYwoO&wgWoB^IPMa(w9Hm@a6^NXSbi+&;KLO9H}<@tz6*lo5MDUFPA zZ8-WkLvVU3)w8g}%Iq8p!9yM`&q(ySZ4wa|9oYAXcf%zp-v+($6Qv@Yg8wlJTAMzh z(PP}i`A)KCWA_}E&^bDhD>qe@u#m85SF+XOlaQhES{jH}Z#95U*P8G-Y;@mwAmLnB zF_b)*Ib2KAbi(P98jNTb@WKSR0Qqe@@)RL65nT^fuXQcTBQ>b@ z6d~J^_V$P7at-EEUVZ|bcrDE8KY>CKbh^BY2e)6Lc2)y30a zH>=Cm7yjGWUp>UQ^>2-B^N6&igxRmkbNX4b><*_7aG_VpxT>HH=M1!t#v={uKeAXx zJ-2)>wJ4hcTC+_hr*rt>MzF=&rKj(Ayqof@B$h8|g| zLIXs{R}PW_9m|JZgdcjfy*?lCB7WbgKfU5lzauPJsrq33bW~K^07SHTqR1A_ANK$i zj3M@*hSgSPg=TMr+k!;$4Jai{w@|~Gda1S%{cf7S_}#!ib~Z)1y1!bjm%lmpew088 zVss-8rob`7u z`&VKm#P4`me>Z%Pi;azro93DYAZVYupx-uM&#jJRfi?-kqvBsOi61N_{GvFzN$2en ze*C;&y$F6M&we*XRx}rW{;lK7q->LE~j4Gc`QI9I2$Nxz+c?CEz3y;;~aD%)QeNAHcptJvls48LnmgMvL9IU2SZelTW*E`>^(Qm`ivfGZ0qGyb{%n`Qy!mRNVGiO3rL*6FMVli{4Q_JhLez%;0WO1{Z-+>V zN_f-VivwTi(*ttpHTm?L;QqWG_ruPTe7AEldiMMOgeL_0tbyoT6$(e9=nTS3VcN%4Y{cOV4EVNR$(*Y8%#kM zC@Mfg6_5b4armf|Y5jn1<4v!!q=1GvrAW&8C*T8s3^!zQ1-Q1W5_~wn?BG71iDj0@ z!w5+=a|&k_UG`i`AP0xzMvt6@dGEG#^+OAf8Q^4}TRs@pqei+K1t>5S5;TXyMv99n z3Y|x?3<+~gLe11C;%***~QUgvX;9Q8{>FhfF*1wi3ng7j)s(QotozL&mCyZs8*(W8=ct4iQ$Lfu#+9 z2r_$CBY^k^l|XtdXL)RGy^_m~g%%*QKuGw>{?yASy}wf#%wGOw};GRPi$GZI4N;DSHLUXyQj= zeAEb{(N|4@*!*eZX%jeVi&&Km$``1Lgmy?!yCV<^C^YpnMIsK|Dxn3;j>fd}s)hkD z_1dK^sV4fYZ!Hy0MqO0g7|DQADEd%|=U~@0*M^*!8$5jo7yyIyMN#A`(41%n;p}wL zh|L8eXv@5~0O(dv;0numZ*(e?f^Y!@V0g=t)+GImK@^9)7O`Ei2BM5!xVHrwk={p6$zyWZ8I91zMb}88R{|^}n(a5Xs z?fCr8eLV*cQuV0(iJY0noWK}cxF<#;I z;?DdGv4lCF`E{#Y4@J~}Vv-MpKDPfGN|IRzeGCT&uL%wxmtWdF>IF`&T8_Cev~zkV zjKgnvbF1t!T{ag+Y)7a4N zhR@EwS>zZ7a2nn)j>hNJBrd67g#5F~X@QFeK+rccv)@0CNRnL8Do(DrZ&rQS%@j^l zZ6q=^SR`ByfC&8$lfeALB+B*(*C%HJWMAJ;?)0{^H@Z&v`M5?7yv#5+Io$1A@@1kO zp)=w0R7TH_H#2VA@Dvlt>A^D!+t!+uN>6%Qrw;XpYI*%dBzBp)9swD8Cl<_IyyxRT z#jn4rI3?^gzZ!MFcGe|V{OqeMcK>ReCdj!i6J+iyqdV5g#M6Z6z&AIIF?NaJq~n5= zA8nS+Wu|)>^OfaxYXzGO_Bc3xyp%1}=;@;Ub>#Zya8h*?$|GVBvdpGuTuM{p$$w#}YxeF5 zxftQmb(YRJUy0?IYx?7XsQ#96+BO_Wk*s@SWIs3jo-cwac;7;$ zub@dmab1HAi>dXFS*qUcdrw&>6cc(3CbtRKv9eY=0#^3+T7|-%?uFF9$TS?KrGoUl zgZP9CxDT1A=Mj+O1*yk~@+Qjb9-;0uF3m3o1aIufY)UhckiI znlPNTN^z9B{EiL)i=1-K#RQ?h+}|!vAQVyp$N~?i732{5ZJIxO@4XNzLOv9h)CX;@ z*z%QE50_ENO~3P8bI_KD6ajNNfz_9=CdeuQFFl_`ci{7{s~K726t>D#yYb9Oj@cGf zJw|7B>o$%+gi|_zXtSh>NH@x?Bo=1Z_b6dXB8frGU)dbPZcSA!nTX_9ffa>RniUR& zOO%pbNV+Gh7)#ma{nffZ$=Kt#s-alPf`6w>w-j~8OO0cr1T_zjm)x!l;)r^=${15r zDfZCrYGn3i?J+9o-NlMtftUbM9$HjZ6`Rj<8I$GcuIm1@>9qxgC@t~&`5lAyxVLu) zf^Vs=izLxWd+LA%R#$7|SS9GagFtYr$?z;o2N1!$TpV|M8$#Z*|9smn$b$XO`hME| z`R%3nIn=bF9{;slx!rmAwM+SxPk)I_IWy&>*2jHadr=s#l|rBtg47bz#GiTdPO&Td zn!-!arAtftQrPg!>)|MUs&@au8~=4bco3TfNUi#P-q<$&dY$(C_n$MV^}eOj#s5&M z!4t_&YD+SfI)B=eFk&`o;&w710p6_=OP+61Fa;+!|N1e=wiD%9APGP8P0`vtJiA?Zpt-W!&A#tIJL;)!0 zdW0&E#0=g})y)MZI~P*fL!eHM@|p(QsxIqH2pN@N1=fDI8*Q8F@n}ec={DxTmliuc znT1FW-Xy!B%{T!SFB!&6!tMfVul!HFTD4lcP9mpT6-mpmKB;7AS5Y&T(>^^f`fFt+ zWFeO_W_@%+28Q?fLNZAa%{%?JH)ZD~ozB75%ZE~*Bn{-yo_#pZ4|q)Yy*iJdhWA`s z5~;ysvrGZFH^6r6mXpFr=7LL#a#k(S$+}vbGJ?)7^qc`tx!AE_{H3O#N@(qhY3w)N zh&aUkLVd+F`UTi*4x^3=x!pqv9w=j#@6>e>MEGl)D1$`s5cSf5bf-V#{ka&=gF#+| z=Ta2}$?~5f>YqC@W(2T#&B&WOVt*}T1Cea{F2amtaw7QW?Tr(C%-`m5{o3rp?zg~xA z`jaz$H#Ownel07Ptv|cBsK4lX*{|a`x_3Bsnc(YywYARIe-ZHKX8@|X-%@2(`U;-K zZ>gc#nVGKTm31D;q#9UL)HVKIgY|#hd2!kMLlZC7pCzigXz7EN`v*qo;C)AHcb|?&&zstM^30ny~^l_NNgWSpe=x{ z*3NxrWY%Z10QI+F`pm|)azYv|X9nw%_Rw+D{aKcDPn4ze4ga#|G|&h8rWTLK-eNi= z5jo7fnGB$d`gF{GKcjIFGT9L>|6Z6$TWXHpRNS^83jzWE8|B6gRElLG5Ne#@&z$!< z*xfm8v3GG6>thY zlDlaYwo^7NmJF=%OChaYQy@(k?ulHA6D`W1n##%Gqvn$<);3?66&y=NAmLL zWR-^9|9mb(w-P!8LagUa0i{u8RH3rzO(6hb3)B>D!<2}NFA|u-?ZOjK9gU&BE#DtU z-(@CbicI~Z9~@?C?=%TN^AEJ++MocSHk4Tx%1q40qEp(yJ0oi+R5ES0PY1#d)Gjg% zapV>cQCOTAf=0@}Vp>72UiOEL62ZaewOJ7jhFMV+Tk2?@`=TN+D zf?kAY2z$l{^wxHTKPns7CRI#M9|Lds5O)!p%PF38o$hpyOYyJR9EF#K1K{zHP=`6$ux#bb=NnFgO_mFduE&GkIgyX4eI3_6-(h`6w zJ8E5EI*D4*Ep(EQ(iJ+gN{B7BskKcuv3V!b()=t2lu^HB)7P+;{^*atR#sM*6_0r_ zovkl=cB4Po^rj=5PeUYE>U@ztzX8YDn!fTQ9vU=c=8iyNhM9w%1z{i;_}z@mTYctf z>s=&~!5PC1mQtED9(pNVv!u7w)wrWk(m&HIl$^YqbbPI5#t|j+0M>hy#d(-3oa2Rm znEoo5zO-Rq?-*;7=nb@IH#--X$*4NoUx|KpL#DcQxHe&q6m#+MgUL<63UM{e`1ORT zO-_FwdQ&Rt2xrw!^PN6sZp*Rduk?@a%rj#cTHcz1urN-N?(I zcJ7!{R~EC~A1jXkgumYY2(7UrCbn9sug8h$e8U9`ymHod0cJCCXD(C9%&%3ZMvbmK z_Ta1C$=6Ciz({-Id`+f7^JvpH~>&iGSHffl>e*T<9npsg_BH*k|- zi`X;vz_jvN6VU=$@B+nDgfiyS%M~@Zmu*5c0VraCi7cKDB{`!Jsu9KJ zHVxp%;L|+*CABEK%aQ-gBu448?JTETc4|Cg$sAZVaw&^ueRGS?x4CJ9f6Hru$0`pO zw*e0q=lUAEF-op?bvq79`dAnXm7-LcH&b#}(C#n`y?Q?z>M3j+{naYVc|?2?g~x7u z5@4e<^G0u$8kf%Lsgl8smz&&&KQkepuFP8z&1;90mzfJFbb^F|s1123}|XzgCVA-5atehC$820`9g5w@&M&H(H`$XXwcYwg*6+&yC1 zqg~Itx_1-hbDBr@Qnd89WKUIz1Ex&Y`ut^ftf0*I%k3Ona^=TM+S}ROA^#yU>gUVt zeLeW+ie1mQDj*(t@`rqUhoKy?7`y6o>s`y>^)DwM(wyB7GJZSlZ+INYQA2p&(cDc1iLB`J`(22xsMbOl z2al7dfD)WtfmnhOufDlD?Y`?DE8tt|0jvSr{RUy=DW9$sP7L#wS)m$801%yT=rbyM z)c*u)k#qk6*5(S_R20YF)51wqQG9>fzhp%Vj`S=@7qRcX8i3`|t^3)o`ZYenUp6L@n9e{#BMs z3d=zW2v6hFv#abDJf(>u%46T46bqoks%U@ho`C0@n>`Bjzof%b2`B&tLf!dwPMsph z=+l*>oX@L~K8fji%b&_S+Z*Fh^d}G1fyb8~U>CJO7>&nESL03QCvWRRV_O>p(SrZ# zpH}1jWK7vGDK<8Il{RDl`iE5iu2Iac2V;rgPCjS>MtA^yk9reGXit8X2#9nAzH}wT z=!!mBpQx#kuI^u!v2L7BgqbwTD$8`R%5V)Y^HV78TUlPS22xa~Lg)Mi(l`TYRAk%X z_ICpbuNE0{JEMr_V#dF3h-z?Sze9u@J^v%#)yJ}lrGq+~OQ(`q- zNK_yfH%k{4wPFMl_cqqZ)RH~CFikPHH1dcXLJ`!+8EWAA469f8T%ZsUj917{DL(5t z*9+oYLFSa2%#7h5SVg3_yL+jfs;gJriHo9- zrwrnK`9(?p4jlc3jsq=j2zk9nJm|TeQ5;jAnfpkYMW_9vRZezUVe!Wm#oBKs; zEZ~n@pVJ$)KJyzD*FQuWCguMqi+Z2upFR-peGeo3I%EHR!1_Alr#Te=J?6eI`nAI3 z|LE0A!vDr+!3Qz34&9^9qd3nN$M-LR;dOu)m|=ts^i9GD z^L0kqvK4o48&8Zlt0h?JK|Zxe#|nEj(uz5Y#?5z;xxrDV8FUvzk~vbZ zKqP+p0IV`V-S5uO6s3e3IO9lm5gJi#Yq`oFi^(e0spxRoHd``%Q5T#vd%P!iZivx# zqTz~GEKJs}2cM9O;~z?E2!Yimu4J&7Av{8G$0HY$SMgP0@CXq)kr?cFbmUmx!O}^x z(gVZ*Nu@B4SmrZ=2n6=fH)By?lT0Zuh~3huIegwNi{{8^)RVNY#Isx)uB(u>XXmJ@uY#Am@2 z2iHu{=oqt>L?qW4(omBI`suP>pnr5@`qFJaD53gvyc|Um$zEb4*qpC7B892|J2k*? za!KTYBq#ZL!hP5=nT2$a2@M=sSxyO{FM%cGG7m)f-9m#!nA{+!FFFT^F4Y!?=e-R$ z=9iejpS?H1h9EgqdgZ5Y5}cTuI<2lpMmkg>>V$9*AHVkSS!|@oSp*5Q9P5au=7WgB zGGMxTEt>420N!3NS@-Y5khSi>OkRQzQ^YjaA9b7u5|g@rux4M6O+i=ure9x`FLcgr z{Y!~Xa;147hV6iG0!kNNYalImN2N2}VjkGI!>>xm1@}h*9$+$ zz$prjmbI+vUjasBKaSZ4VDrXtac2q*%jj>YH2L8WMOgKil%on-T1SR)mZ53WCWf2G zlOy)q<0Plm@ELsVo;+W{$p|8OK5peaA6r|Ax z7_67g3~6$7e%iw4ew!=ywQiUz#Ii$aVQQK%Z~SEeAL$`hWjU%W2s6+;jxd@+V+kBJ z<}HQQ&QE^KnQ!Np-;O)V8tIFln^ncodlzRI?9% zj|UH28=40xhFv(J0#=9!3`+%EWIDve-{rKinw@0iITItK_VwtEsfvSLa-({KhMPQL zmX7Op8*B-u1V&XM$w-G%fkY^xjmXF;-;|*!im%cDR7_gQi(^9_m#SPKIN7nu*-cyQ zc2FB@Vz8PRB?I9c6^Ty;l5}gt5 zwGk&d7lL<-t6Fg^?kg2ZmN_T-4_e}XtB)B+_LJc8IUtzoGpOb`6<9u!SP-3(&;wvE z{6g5+TEAGaeoE1u?)XQ#nP>YnI7@3nntFhjQ>E*dEq=kn-ej_(#V3O%OcF4F54yavfQQ zxweC5badLBKcY-6X;E~rA`usqB;NK=3f3DNoEZ0p(!ye2zRCTkBS<2lh?DX7m2|6s zEbZ}&nI~xKlCe{55!=)@fw8QT-`O+zw0lLgbIgwHPbR@(R-nFR>m~{44ALA*Ae%v0By<-WA$le0uR8%t&BN>F?GQAb-2(-th9mIg(ND2N+gP2$Y%*2=i_EWpAN)V=iuNCncNNi?W>p^XX=$Z?#3|Ro~eiy$nvh|W9(4+`H09J@q@6|kvP1~ zl8lkb6bdzU?uwGeY6ap05*lOxmi;D6+pn3l*~c4cKGIGCij3fwCkn0>NTew8A_ zhXrUArY4)rgGF0mG1*GY|3^FL6%7a4#&JxdPKZ7vN)RDL?}q5CUPeix4`wjf=rwFa zZ()eeFiO<1qqh(-k|4XQjXrja7DEz35M?%dzKcEQyZFwYv)}h!<>tM4-uJoqKj*o6 z|NoyXn*0)@(#3!FhGz7O%n$25RoFV4{9vmYHayYMCBWptm5@}QT$Gt#uaOI@bXA+w z&mYLNV6#Y_UEq#Xikx5NvL9p4rzG~@<+Gzvk%qDHwL@@=RD4>2IJdrbkPc_qtz;H+ zp+{FD%7?f7P4cJ0v)oxAcXE=8^dMkzlX)7ukJS2aJ__14h`J-*bdEITFQq0965>R3 zQ#n0v7hcE?D&~*!ltH>OsLJt|vmN5bu9%9iCRn8BP6ATp$c`9orED zg(W)c)HliClb$442eq+Ksb05H0h)cH0|nN-V?ApFE0fl-1w+pndM&7GpU>S%BOF7F z2{5@ylDNwTu-MHt2?qB=L+|WA=970a3Ni7C_EZSSoeM38u*Vd<0@VOw30gRNLg_#Sp`^7umb45GJpT*RUq@75AmRh9ygci?6andZ|ZAoKZ$6WVUvcpMh_?A$t& zd$X?8djnO~Mvnh9RDU%GRkh^YAa%(L?}!$Bnoa8xs;fhTwQndYt!_zs^LgK>%*1um z-9s3IzC7BA{zZOV$V_eOIVW1-i;OzCUkqAj`qEXB!PkSDNr?wqGvNVJBhkB~j*w*Q zDeVq{r(D0r?F%`&29GpctMpTE#X8n3NL1{Nwl&{ly%?T(c9oU_!&Z{}zL|w2xlC_N zUy_Y8<}g-Z1|<0PzIYkjKn`MCgqQ)KjP4`W`f9|A2|7f&?&&1IHNANsn%xgb^FT03 zUqVEV1?;KfNu5_>dj-zHXwr*FlB)?4>v8wdN6)5S(sBujgVjDHwr&SK5O)l$N#VjR zO^9g+H^ehbppz%W=GNqRf8}Z4;K?g3^@-b1mVsgos+>Mj_|QG-UzPG@c;xNsH2sO|3lCzUFzT#DH`g#h~nix>$S+8HujR;G( zQ)7kqmMtpHhxw`5Tifq@WNX2bUfNZ<7BWOBwhshJ%-1XRj$5>jwq;~%WT0|0DyaE! zvT21|SrQnLI9@0DZR5j3-JnQ9p#Zo7?qNz|?<_uPGE&l*0S5I*!IQ*_?rnDHHCUI& z4L->P{}8L9zI~wpkJZKul6_LNFGVjIfTh-WJ-8gY#9cl%&%Rj_F z3t263`_OoplPotz18aHpUSUq9ZsM$aeCp{~`-nE42}$=($6{u;MM z)jZEe8>Yu&8eAPU?&+=>&$T8#{TSbuA3WPVqwf@>SnloQDk$!=?AVl>+6P~>Q|xA223X}kc^*-kW|eb}?jo922$WA{OB7Tfyz>y} ze;ZNl=U|zSOF|T${lo)QCz>bMGX0E`pPYG91HeFTf6ivBfoVleb-EIoWBtx8bYRB@ z(o~Ke7ayB%%~CcNHooqDjm6;aevKaZpfOg&?Xk*6&Ux4_r*7+FsZ}eD*)Cnpubp+_ z!VE~}na6HU-CrlQvRDuUTK7-w*2%3iSTPQu?14I$L?WSIm8}JFKHH&$B**&tl0wf11jv-n{b&-NNIkNAAA_&=O<3eR z>fC}hpKm8<3<)v^bY$Kn54>nET%vp=Ecf+Oj!Ks(RHxL92T9E1mruX_6!(9bW2D3B zwD&M#7(FNa?;>_Twl7vM{pDtvNx23rc|`vp@|GOaq_d%{?p}=lFL@-N74fye@_DoY z2^7Gw4FypzrCZ(~{A^TG8or&pVjCErrMV~+pflbO%@&v|%{i|(sgk!+^aP-=ZhKihptzZ|f6H+sG;wsE`uTXg>LsB`m#+W4g#?p7jTk~xDqB{Q0^YooEsBN!Z z*?5sylnhUXWGq+MDyS({R!vo%iCzHHN1W4<^na_q(qb5ADZpr`!51zZg>af3;f+LjjyekYF{4AEZ*-5$;sk1KI-;8SEDO%2SHT&_Yb>)Nk}@) z+b)xmdZ)9ME`0akGp9BboB)TeI(>v--d#QK!<%&RRjIiPj4=MUxe;46iLwVwJH%|P zvS`>unTEllUhwjpFj4;i_^FCcY_LV+dVuvvXW1fFi?5@rIPc|khb=-!mp9LFi-JY$#UG}K10L57>6w%1-bV_qKx zxL6&K_M$IJ!h-uqV_7Q#7C3$R3UtJ@eV2-Wr!Bm*f{hd9J{qqKK%zkpZ_9LZzg&;O z686YQZV}&i*|-$+X{h|Q$Ay z%6C1g*ZumjJV^sD3h3-JTU^|4o?D({pU|AnHs|okC@`w!{1NRq#pMS==#UAPoee|+ z@%rSCXk4flZ@y7ZiZ1V}my=~~bZ6ul_1K~a?ezb5Bmc=XzrX#iz;^|{EAaOf_yb-6 BJy!q# diff --git a/bundle/ruby/3.2.0/cache/tomlrb-2.0.3.gem b/bundle/ruby/3.2.0/cache/tomlrb-2.0.3.gem deleted file mode 100644 index b4f103f2d1f89a69c31bc6f92d04763b35965b8b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13312 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 diff --git a/bundle/ruby/3.2.0/cache/unicode-display_width-2.5.0.gem b/bundle/ruby/3.2.0/cache/unicode-display_width-2.5.0.gem deleted file mode 100644 index 7f3e24b445f5204307b7f9efa8fb77182d45753d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13312 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 G3j8;B(EY>! diff --git a/bundle/ruby/3.2.0/cache/uri-0.13.0.gem b/bundle/ruby/3.2.0/cache/uri-0.13.0.gem deleted file mode 100644 index 511d128ad7a2c918f7d74c136b3c75bbcccad4e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37888 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

    ;jm)LGaMSv_%%|Ko?;fW$$wOOHyCXFqR|6CpRe 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 Lz&{B5j}Z7bTRs#* diff --git a/bundle/ruby/3.2.0/cache/pry-0.14.2.gem b/bundle/ruby/3.2.0/cache/pry-0.14.2.gem deleted file mode 100644 index 7f06f5ffc7d5db7eaf7f75482a41a33580fdc241..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 154624 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 XKYHPR`VfDS`=!7y1%4^;UnuYosYZF> diff --git a/bundle/ruby/3.2.0/cache/public_suffix-5.0.4.gem b/bundle/ruby/3.2.0/cache/public_suffix-5.0.4.gem deleted file mode 100644 index 1e5c1f351b653070c2bc62edbceb3582068a4b2b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 102912 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 ZYVM2w*Q@joxPKV_`hf1KLAtZXxsn* diff --git a/bundle/ruby/3.2.0/cache/no_proxy_fix-0.1.2.gem b/bundle/ruby/3.2.0/cache/no_proxy_fix-0.1.2.gem deleted file mode 100644 index 72045c09094f9922b130ba174baaeaf325b48927..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9216 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 nSHx0F)0rqm(Kdm>VE>`82g%emIj6rq z$JW%v(8SQikj~r-;D1*z{0kNq7J&cU{)_+EGBL9=0Wh+#va+$WGqJM$dykQsg^eA6 zfZ=~vLjV1DU7cMFo&KfdZeeO_^WS&;hwJ}Y|9_p^f1BKY820A z#-;rh8^UjGpU_mAPvbGq3sP&LF18C`ri(-)>^cJiifbdLam*hm+?=h)Fb9#*W_J^K2wt<{4!0-ZOsYU<7^fe9t3`{J3zBUIx$gt^(GD11O_ zx#nE6K3X+J+*-bUVv-5YN>taPLCT1q+%Psft3{Iq%I~HXu6}S95LGR7p-z7Gh`N#t zCk3}x9x&2=%Q{+K9RB&e1(1qONw57$)211XP3qF#!buYE%31N|v^WQe*4<2v6yL{TbHkS$hHO}AfLu6j&_m_^ibNvdP z08|R=wFEm;RqBY-@k=a*(sXQPi`YG>SL39yI={}C{6nR82KKV?tTWeRU(Wj&k@P5! zR*ZH_ylH}7=scWLp1s3eMO;|(X7L9 z@VD1BclI>?FCTZ$Z?*~_JP-HxkHe1_BgXa)kLSNu&(r4n>ILGYkIBWw(CAX<*_|;d z2E8V9Nvm*#CmiP{TX<-u(rIlc9NLnBwHpSnE9!&_D+O+uQrqDrU1c zvOkCxPA5YPfF`=|%p)knH2rL#4AkwbO7cMz+RlKVvO>G+l4DNCnIg9%?|DB%yQ3?y zN}mFTenlnLnz5ta7628x3VEWkgU&}UnL+uJ%?H=0X0<5?BMd-P&h)@G-vkS1^(YRj^aLe`9FOFP zAOS^2nlQIbKx5$Q3wTWtBdKx@qnx{ia*ca z_+s%$K!CbWt{LdBKG5z0yYn;`3m_#JV3DG%P=beApQG0a+8{IHz!2(zQbD|0KutfYj6a*%)SDJJa!8D4R`#lsTXTqSO0S!7aVA8EE7MY}Q`2ufl z#cBE+P#(sB@VuSB=Z68i_yg5-l>gjOMm%)1iVYB=VP~h@IC-H7v9wFSOjxC9O%y6H zoI+Sys;GMj3ZD4c?|WgPxpx#G9M|zeFV|(&&yO{+UZX1g{sh^gz!CUvnz4#=d>YNy<}sI-D1%F2TBX`9?HcWjzf(8E#Oe8!m=@5t`-Nlo>h zws&?%`vB3lANBq|^rY&isgmlmI)k#R!C`a6jmO0CWYA%l#zIv;D;3q|G3xfUoLQtk zj*HoCN*44~M}R&OY3%20xJADi2Dh(_+}gvfImso}CEd3o?eP6Ni^?T79Zy+w$-l5| zDW1`A%FB%F5v{s;VLWd8s7|9@gF{5Sl+ z>bX?ImP}>X?0cjvJaB>L>2w$?QLd%3Ic8$Ucmqf)3p0#NP7b1xmU1lxDb>kkNHr_M7#eL3Q%Yn;TIHuRXX=?0jY;0+`Pec6~ z{vDi}>8rN0v9q(aud}ri>{xkLeIr);c>u_>WN7fkn4C#Df^nKe?TMGa!G4F?mOI*L z8g1&_Yv8&mzn{L~elfY=2INoetIllcd#!YJSgeHiUe(X#^G}_t8VX)I>Pfqmdxi50 ztNF%y>uYUoL>&8_xqc@9@{gE1Eab>=3%fBnjH3&sjVlcfwFE<&FIwB*`oF@1KwZYl;@lV^mgRAzM8x|!BF_qRjzLT z6JS?ogH>evD>u=xHt`*5iUIxEn%K_u^JftTw@$!k=V)j~+>W99{sFt}+&>^n`xs?u zg|~jy+FA8BO9|}|oxR+-EM)bm=&lWGrytwf>u^C-Ffdd@KD>xB*$oVtaB$z zUh8xV!h3Guk$7yEtInEh*xbYm&$YOFy)IZc<)=Q?`m$lbMFlr0yqzvUhQhDJ_CO_$ z7RcrfQ>Zz3cFL!z(nl1D&YR`hd-q&aibJ{W0PtSCOMlxsiNH59;=F*xIq-98@2=tD z*cQ86zV&7)0=K_p-TyvS9xfIc0yUp2@`m%NS!$?eqY?90m48Xq%tDyJH@P@F|z^b#CNZ|R&B6`_(})5L|W;JKn+W2#A(e1UXSAI>_J+wD~#Z-I2g4c)L@~()rwp$0ca0- zt{is#Xt1dk3z#rB?t1M!Iv<$@^X|E<6!S4_VT-<;G zRdV%X(FHmopx%7KO~5OR^tn`ufQz>oUA+OS+;Jgq;Q~6=+YqE5Y12R^lOY7Infz+x5#L5AeNgY*36|6abzO5Bl#+Ky-V(X~Z<`s4 z4{9;QgViVZ18&06wlmmeT61uji6YNo9R~8faTRc4}7=$-g^q?(!+xFPv_IUyGyX)Ot-{$;iq1L_1 z!Pn2M&7Z|_Y;yALct6|upK9RraPx8TSPH&&tqvRv><(NSpOrkfx;j7&jsv=oYW4NQ zJ3g41`{#9TdV&}6m)`eq@q9dc+@7+R9nKv5*g@m<+5{@~JUaD_=nfR?UEf~y)I{y% zv~lydm9G*uJJHmqnx2y1f+CAXnR<)$-rp+us$XG}M{? z2D?*!`CHqbME>$e{M0=;O??RRc)RV(W}DCLUwW50#dYx^h&)5KjnvRjpNz#429 zga&D5qsz>uB|jLQ(Js;y{H%V<0k3OHV{_*Q!*fU5d>^oweng=q6+@3N_ zkBB-(X;WYGAg_P-3uVo2ETnMX0onVwLi5Hx$D1-WU&R6tfdL~W@3&Zg>5xfJY45s~ zJP2Zffz*J|6@kTm2Z+fnLfRbuW^(=1a5Va^H$ldrT5WvTUgN*DvaQ;uE$BFd1;dpJ z-%ta1oN;N?ROPNdEtxhiW?#D;P*)Zo&YYhku3`!+RvK5Svu-zK`nAN6Wj3(`!~$2J zzV(U=cO}YOeVJg|vY2x#uT%aB>a?=F8VBaROmo|J6D@QB$6r&r*e}F4avT^6>G=j& zBvrYucZtngeWP6I*X8KBx2m%RFy-G^0oi>%*VXcGZ@vX$LtGV~9llK*jujA>Hd#9} zgvD0^)!M%IAizd+Ga?*Jv&22bq6Wc=FW@NbQn%eu_Xg}@vNoTJCKY>mTT$%P z`aK7mH}C;`T$p&`cKNK(%orCdD6B8Br>8}{UfTpf)a4}rXJ++TfnDL!3HX2mAyHoL zrQsw&*bBeB5h*m-AOQ8)IdJyrVT> z1WWc$$hkPH7Yf`i#T8bmPg7V`?AvHS{Oj;AW?UfZoq}&$sXulw2!ls#sa#Rks`%Rl zS5fUF|L^DT*us$9>w=Ai%lR1-1G$aFqoiZT0P=IpV4*L5y-mwc!w;hp9{!pdzh6ix zdj!31FaRLYJc|L9@f0|#7Xn-NrAuj=05x4C(!}jSVs~Sg`d8!BUjFxt*QO*S1op6+ z(yRnbepJo`O(BBn;|Ijp8_Ct12NxD1AozUGy{?cDN(@;d;pbOwzIrcsp`UUVgSXxe z(a;k{il+u>qKBU$V32}%PsRIPDVZpAb-0ZJ+OenpCH~!uCj|};w{a^^)ni#iI>8<$ z&=8f8Y!J0Q*BRi}8T>d8Q2yzQj(vFzGVmXn zGK(^BfxZr>E|C(uk=P?{v|8wKkyG=^p2yAx?PclyMoo&ZoIK0bliZ{Nkte{P`;-;j zc8L=*^%oH>3m`qs^&acv2n*H$*dfiX{<&cQFo5Kvq46$EjvndFucOro%N;LhrfLAi zv&l=)!%497oR~)%sf`~}%&9jF>DDl_EXMJE6Af%g`{{4pje(TVkvBjrhvq-3sOoSL z*>9lG`JM_Z)>^A0BcM0EnXAw(Y%_nUy_Cccmb6gnav*7{YGz*}Q1eOHa>xH#Cfm#H z-5jMA@Fvi%`g(A?h>YM>``duH0G;T?QK>F8cYH+S@0(I+veb(6lA0bZsDXxCXdb-W zM}m$Yv9}TDe@<>o6203KPz+vSv)6O?EAepvMsTL(t_|f>Pms|#yAM6Wd!n4bmB#q@ z>=Nv=l$cH>_6@Tl@NRn>=nyy&uMV;kidr5}($?tJ9W5SdCUNP1Y+x2{qpE5BDM7C^ zI_UEQ(6liHoELzKf;gnJ5GK$9W-yAEt)(mwQZc!Pf@LG?7&;{6ljPv$=Ppxb|HNWp zS;V$cIP!S4JQg5O-SC3I56J6vhdt&XLyMvVC=nJLB0!Hw&7|3HmFzFkHOH>twaBuk zl7Jnq%MWw|><^BFrsf2N1V#t^`6!2FyCXp}X~~7K6G#3e#xn=%z+Bh$U95)E*$Sr2 zit{{(cLTUZ6aA48ymj`B=$|huf=32X-!U1O$5eJe*r~WRrsuE;g?q{&@IrK(oX?hE zXPRGa+#O}POH=27!LT{3N0nuUpdbrGAX|%tTo*VF zLGKsxq6e~zu+F%M>KRgLURX)1nrJ)7Q_q+#UOgklVQ+!EOTIa#$(#^;Z_TsfBKJ&4 z{@3fTOuGyAYw$QJVgO3)W)u^)=e~V(w6W%)kcZDlKa9)t`oEor_!x8njIX1cpP?iw znx)^KD_Ex}pSr-AaAFb4-N%(r*d54kU?JE=#H2kgb|+w}UPAyPm`Z)zALtZ7X7rzx zF09D3#_1r%u(64fUVcY_Lq5hrV7o5fH}K+dYj2}Z+mBENDF5}hWf6KPZx`r2E(P$P z{Fx~E{LI-u-E5ia0+9*%Mucm^QG(XU*kC zx{rNYl_hw)2v(Q%kO8ai6Ch@A90qaq0VLzX6qkk(9IgjO`>-#gF0!B#f-1FInr3+Z zp#w4srHbNw;H9Op^a%~ZlM9gP> zxaB;JZ9J7G-#cp;9IzNy9QfnXrNpN1_eTkHURuWNZq`&{O6T4{c}z5aSeJ z=ip*QOUKd@_|VDWUbd+v{^&Y(9mrCox4^e)6ljn&n_{@kfs5ej1-;2F@e0O-c_6&L zQ*qh@%A>lOV1t1Mbt0^$r-TOef*CtyAq+$p_+q*2KBPAB;TX8Q4&=L;^z~z;IMWAf zv~7Z=qcUTTL`0V!5kAMQcl%OkS8$ET(YIwRHFp;Xd)Eft@rblwAnES2*W1&tsnZSk zd<3MRj2*H5BM%bP0*I0|#}W;}&bHNg6NBY3zb6oTu<2@tm6=ko0VE6khGqIDItpd_ znQ%-@RHBs{q%UcV;kxj4C@VM=GtnGXZ2_wpn|@v`N=3BFY2S#GW(M6#)B0WCJ=a-+ zWUyf`3zpNNeOPbNSeumHpzbVKV2VhqEa{5omnXga)kBW2&yggAd%M=?vr z$?%9_CG~*1k#2%1le2^dvIDE2EjEdrgAXBL_c{cyUS&zpwvHnA71kq;D}b^bcmkC% z6-ZKiq_YvsCq#1J%ylapHG@l1!y^5KiFr7eaz#wWp4-pNWZ`lAq?;@Nh%v<=5v4 z+L2d}&w78g(clcr1VpK^Jk@0G+F<-rRzZmJ6|l?J%N!Etm?wM=^^KNLo!=42N`7+c zWU4=fOvIOQgm``pV!PVcBN(2`1#7OKSXVvp=lwwD1;<4YkxVtAL~xT63m)%wz++z6 zf~(#)*jXwt-Z6O&D1}e6gm>&b(Hzn1HmE*?`mel$n;|g^c%p!axl~YDcIvI(5uNop zJ_D$);&_!f28<>>VqnamSJ)m^O`MBQNzkJGJ5gblo<&oXT5LT53!~_IludVptq-S2 zjP)S&o^la3^|8f>@u#67-IFrVq^3HTlsKEG(~0-eR276Q5W`(5gBn7lVhOZRqR!|Z zi<6BiFhoVcB@Gsd;IxAk!=`Cucm}yvK_(+IVL@1Ffen;&XjhJ1W$*L~S+VO$=dO3J!%*0`I&-s(tXwAny; zv`G8iG@>DsO6)ruV16?2GM5VJt@z^^?X2Gos4Q{1V~T374}#c3qD4}7WZ2imA|_E+ z^p<(Sg(&V!mvNalA*ALDrYA&Fy{=w6-`@dFP@-XrQB3;$WXYJno|iPh5CS(i@z!qu z@Ju9n>8vp8X-M3;<-|Bm2#|$Q?47uU>)44E5qBZm%NB@MiM;U?WMR(pl$*n3tnoOi zb=%TBDiAHjA2d&4(#<=$e?-I=fI2$tZo@+>6%i;nD3B;^lJvjo4N5j+QAm|j*%Eg} z0ViVL{WO$>XsX3Wu+(I-sWfd9qP0im(BV<;mc&7UIDjw2mJ~(Q%MW&!E$k!2rQ?$v z(tyFP=Y5BmX2*^Cv!S|L8FcxblDT++_qUH6=ktU8xvo}ri3El53Wo9M)k`?M(1@4_ zZpQB=@jupH%VZ$UF7gUJ4!^UUV>*KOKS$QRv*I#@?9;q7rFI+zI_{B!_U+k|6d;ln zV6K_&$vnq2Y>`x&1IeexMjH?9BbY}ixGJ?Ssa4Ovz(Gg|(z5H%g^L8^A1;*+uuw!T@wuitLR7(o?}j&frZnE%X@6@>LNsr!$@aoxB8gE`w5( zEkA^Jpn0*$u0rHH%SkzhM3K9CB63P&Fas zSpniyB^9R97N=ttt7Djrs~QP&N51N4n8-kdhYbJ-T8LdNP(n&Ye1{FhtB%+bQ2rKv z*>Do86f*ve*Fde!*;O%ai`;mAe*#d;B0n*p#FUd#ut!`@vXk*Hpk1#&rzj|rr6x3A zaSX6sp`@XjRAr{U@5j^)G8l&F?rB6r1&r){U^%iDTpAfVE+?yEwN|E3LE(O?1*Q2e z`UJn5wfjKHR-~t6VGOfiBxA$UI_}RHXI9hb>;K+SRN!ys?;JXx?*uUEG02C<2?yd( zOb|bU1a(5f3S9(}4h4Y4)d<{*z_8NR&1b7OHueUR7@uOiw|x)?WWhDiKpH{?=nK3W zfms4k2RQIq6PWUvE8T~qfr^l*2U&8oSjmSaY0%W3AXg;aa!66uCNG)j@P(ZCDCoW% ztc31$j!ex6Rf<*7WbZ*GoJSA^lI(_^XMD*IhTeu%2GbA5 zw#WAr_W1c808WXAVKc6V;XJQWgwK)NGK1s_$VHW5+SY3_AS>edJVJm?P$-61Q4XN6 z5os*|w4w(iPHfH;D3#g5l}9X}zgLqO+ftYUgFFTk#K6q@K{$^`krCkjGi zQPf$q9Zz`TNL>IptY2ugVL>lsP8Ak*mvSz}wGM0%1G`Obw5+cXXnOat_U$3bo?CMf zn{fd0`hs~NU7Zd2ojz1Fk$CPgy9do|x3xaI=m3Od)Bq&4o@?_(*W`jk^+jLjZI--#R+hY0eN!h!swG~g2Keioh)X=m00Pd`~KI2 zqok^-DH@}!3*m|~aYAC4hEpK2w`Gf(ECMHFI&%NW)VmJtfYDf$3?fKizZ>at*v` zx&LWGKVZz*v0F=^2~OJ(8T&(~s6DEXe9SwznrLSgN!li~rGy(!I7{h3C0@y53KFKi z8qE^@%zYZ^TO=%*82%TA`I)O-mugIfl<$_S^42vm2-4T{NL6ur-p z%W`C<5aiiK2OJx~Xg9l2XH}x!B2v-9l!WC?e2`2CS_~y(LN~#aLd$ZecS_FUKxxV= z?{YjqP)Z4#C}lM8)YpJl+P3fsYb6GHj1c%yV@I6ZDng}EZCE>19_goUNWColU&VA2 zOvbtm&MhA96;2LO9ZhM?ijd_cgxVVOMw^l~-GmdMe38K2ct~j7!U(84Wk{< zc@V4D7!VduGJ1UCoNhG7-EIY@O6e+jo@#>EQ=FoaE^Vq)fti0}%N{qom%yq*4#-p` z+O&ryQ>{~ZE;v@OIAws|qH9c;{`wXGB^)xPCTcubH+|O{Ad->_x<*lTmhR@GP|+&@MdWPg}m0uC*R%m zepHYUEdfE&-6Bm<4mjaaC4Pqcm{PDnBs>_ev$s22uMkDr&y@B4=Ryq!xXYGpMPOGc z`2l<99nuwV)7#$8?n3Yt>Nvqrpej025sTV7wq*q@bA9q>g)_C1?cQV6 z&;ZjDbo6kN<`N{fAYu*xm+4KsdPQA`1{BK;4U1rIZq|BHP96PLBC;TuaPCsIMxN2^ z6Eg+5+|Ould+={gPA~%LU~95UK$z!o*r5y&tCmAXKyg^B=4t~N*V2+qtOloR0Wv$+ z^B+kl($HMqhKa3Xs;PA>_stkwT3H+b&f8H(vD#onjN_JC=XFEo6$g=0HW1P40O^*p z-dT^LKVvSZB|;}Vo->3E*k3`W_YQgyCQWIx#c@;pqT_egA1be&z*c?#N@~9axIGL! z1Fy+hwdZ%SWcK^j=yMKQ=!5(1j;DrkwwS*4Pe$0YL#_?Xov7#wYypq`JOvfdoZsl2r3KrmBRms^ic_{(=%3A1P=VZf$sQ&AFpx09J_23)A078_nFgJ zvBjUbWClUAObpPmGY~Ck2Uq!7)kpligM&`9VS5XjoFZ{lB3PIZdXb{7El-t@Rl{=n zu#}9$@2&CCJCo90po%4Gt>*H?G2x;lhjQg-djqI~fffYYoRb*w%rjO-(zg#>l-4Gz3e?zu`*agM}7$ z!1C+sYU$_^s%Ayowb5j%RkK-EUzbl-n_HM2RYK;(_9&XtlAnAoM*+sh^KiTUf{Ev* zz$H$?K1UOF)I)Y6CQ6n7OXTw&T?InzGBvA&xj;EQTkol~k=IeMMvtOo{DgTn!10=U z9bE`avU%W*f||=U#Ozv&MiY?zreS%h=Z=v^xVf)fG`?s=b_uSt8skLjbrn+XMwWnis@5;`NwrDKq zk5Yzsc=5pIq?xVll*FXw(#&#zav?n_jRbKBmWWu!0IYk*rR+jO{So&94sY|^l12O1 zGuG(T6o`|#)RJjXB+0%GZxy545_9t7yzup**LM&NO|n)yJssEVaH&r%8j^-7fC^y* z1jDdk>8T34Qv+*U4`VUNrwNuusDVNdaN{R1;VZMa5i;sL zm`347@#BTx!{SbMERDQBNXVuG5_j!hw>d}G{CC6zfBozq2g5#K<_*^uHmt`3wbh*%u7=;+qZ)jT z6$m}sjFU}*GOC+)o%`-}UaR)+Po-;!C#U>yUj%b3nN3Ndag%ePc&H{VVmUQ3nWSPv z!Ufq7AzN0Rq(7%xkgyu6XtjeSz^f(4h^aoXIe(*X3=ia#m3&L-wz7`S&j+|A{#Os& z8~Eauk})K1mSEt!u2ng-v`GA~hvZHCl#%B-zx|JChazgquMRJ_T@UY9NsG5!m?DdQ z*!N&(3?r5}T>=`|u``n!mEb@?9ePkc@m|_+RJu#D6%D-jU0zQm2k>sEp0=l+wl=r! z&Of~h%Ua$VdtO~#U3J9B>D=0C>s;tMw}&r<6>CCOKvRm?v(dF#TTeq{<<_okkIyS} zYmMw+c2J3?7?2mZ?y4KzM2>-A0i7dOelmph9e-a}!ynFtQ|!yjs>_MUT!nf|WM)Nk zIgkrG8^1I*L`aLpxNVh&t9B`9w9&z#qNOTJ)#{qaob!_Y)dPGRcVp47uNRkrL`zJo zY&D`r6prWLEFWQkGatsBC+j)%KVC6GeAQvh7hdC{`AV-=Tp#;S<&2gQV`ce}T+nI+ z=IsE=DF1kzfiFq8)k|5a|H00x)Kf?N;cb&k_ssdIW9cxYX8YNlDzm(elGWBQ}i@Zm_D9W zp$id1Yr;!olfQ*o#yY-m0p58y-aU4J7Z#`ms_sYdzyYtESk$>4)8oEMa!mpghtf`z zDQ-T0&HO4zEwoWHS?Yn%HoJU(#k@=K?1?&$h zGhaIUw1S12Dt|KUAacI7D*^#fH)brQn9Jl@3ny6)hD5I0RRqatQ}rvHJv-+#CgBJQ zy0G3iAC!P01PJGsjE?w*^nHEm;E;Vbp!E?$srA~cSn@V(GIVEbSP;6bGm9&PG(wE- zG(cbn9$0!_$y1FSOWrn2P(f@O{IQ>>YYY@hS=ObOpZp3Ae8dm)Dsj?T7ykJmCn{jj zj3xkv2OB*v2m>b*-WyFt<5ctE8A&md{@1i107xtq3XpqKfwjJdFB35(LG}1$(BMHr zR28?fKsbX`zDOHY0(tzycf;VKq(!l(i2BGnjW>cA-naS4Z1_xjlvcwai zXn0;hn*A_(A_~Fsy?9FG>^WL&6H!PbMF`%UF#~Xr6i5KMmY7$)1q$4|MbjKwXx`h| zuwYgl&?zw|>2gIR)P)hhwh;zPRrKlry*cX1mg6QDr>(R*xW^(_`9A0Nd5RlozW{Xi ziS%cX8Odh8Xj4}&x${MSvrU3{;B;)D8$6Rv(pLHbS4tPZQ;#b^qUpC_FHc{2Q?Dk! ze}LU|eo)ab8^3=)5sUSs|L{&Fe-u3JpePo`E&flpyMrPaQt=U0IE6A@1nI1TkRr|a zT{3xri!|{;e~7f9{^s~<>ZLwBk`nrX#p&_!_rd**=m8N9rMwC0^}#ZcwDK?5`~gu? zeo9bC6LAKtQi%#@tXKio1DRR8b+uiskGe7@2_5I|}jVV;sME&m- zkq%TT9hbpt!2zOVkPjXmZ*UgMof@>j>a_tSaL@0$Aoi{3J(0&x32&m> z+!*|?DIuUkfvb;8xBKGcX{vwmuv^G><4>7ph>lo7D}>1Pr9Yj7N0)Q`&}(G@nwL}i z9#e5dv*>svca?utbpCb^{iKi(hSX z(_*|Sm-O?E14E@0nYMMiVM~643}(A`0(DLw&naaS#NGF?i@86)tLRU}@iM!NP=hOD zkQay2lcI1C=V#IC)=OWD-%J{^UYE!lnfir}jw#pI{x(*J?YL`D>)QI~2eBr|dA7q* ze)g#sFJ*Wj(-rqX%6>8B;#sNPUf4UQv6~!3a8lS!xp~5Erezfgv0hFNsr-08dFU|Q zE^v@xDa}m6bpkTGbLAhx-DWb{WHwgh)#2(STsB=}sM+%fXYaz6r6LcsUevh;ag4nY zb}M1xvo8iH=FEPxg3&PdluH0{mk5J@MIZn#SV!`!LlyZPaT}U?G(H&6muw;D3xdj< z=M|jws93`|j!4A4vx0Du-Mq!WS|^X;22?pTRE91^&237Rl#xDXY9ZH0SovQw-}#Dr za7P3cAb)XAl3kBS!|#!aCnKkmww@24iP^-s496@8GSw_r#SsefktZRzG7>rCjXt*> zCKw;#E>U!{ftNH3Z@GL#0Se(L7cs;vBN-avq&X2O9UXD&q*-Jd3ziI1g6GzyaprOh z#aTSp;`5<9mW1KEpHo&^PN}P6C3HJCqQt$db9CLAyHgH8f5gERG233popD_$Bb?^c z^bFgBG4g|xggYm&R^KyJI%bUpm&cMBA$UKYPNo4*)=T-;F19W%y?jZ(I6%}>dZJ0m6vzocY)y>c9mcURIT=bQ|69qm z_SM3k4)ktDPBH8yMIW;uA>pXUC1X5j4rG3SL|SwtA!NccWDL!hGd%ItgrfuwfS=Pl zU4mi<+X1C)c}&(YQaM?z@1oo+gw5lBT#u$j_kc4-VK^!sM~t(r96X**=ml6_n4B_D-2VF<@i}zkr`c$vv8oYq(BSVfp zxRZksW-K`wHs@I^9d+}Rw|@C*N1#SIeogF#Id^?$Jv|VGJ|?{#*L`2ku1ZHt6)vNY zn`92o>8htCA-$q%j%S}~+ zFOJv=lZs{;?nG=~Ce6xs43EVf8&8D(0FesbM-wWg4dsD$F2r6{h3dUP=GpOS0}-qp z_Wnu1zTr7aM-f4BZfM{ny)fA3J` zA94HutgsE`om!Df5Lj{~!&pN{qR!#&$E=7(X?70XP7F9~W1tE0S5gT9k(-%+W9KZ= zVxjyF6H*WI8rD}eJBGrF{?Dhiq)sihdic~=%``-nP=8I;CbItCVbSreTrI*dUZ)04 z!hsSx6t8c@E_FO~!wUw6l|-?ol1|O5hnBPVul=d2z~OT92oJ{Gq9G-WF;1oQvGlmI zjLlXUC9aI&!TVcd{NQzdbPlK=7}zW}rffjOVE{t1xMQ#{vaeS-E6!KC9)t;!)6lL1 zv+ABvg!RroA;M5xdyBYTRDuQ=t~0&NYh-oqTCc!DC)^t2pX!3}abd>WAD!zxz*LRh z$;p}Sk71}E&ZA^)%X=@{pU|1xBnyZ-2`l>b*Hu8lK%OV{yi-}60-q}Iz{M6P&;@J7 z@s^4kGC;_mYkxf5@F|F8B2TGvNm!dnY*gptD&*vvw^0P!6uSS)s|OGuKiM74YRhI8 zOsCU@jP*xR`I>eLoA$UR5^X;BzDAy*d0AJiZtB(w_?55Wzz?jpX;AT0Kk$ANSY5RPj-RBY_nywIV6k_|n4S zS?ZIU!1#WL4w{Awsb8sX!dT#f7KfF}5n!LSIi+8$9OmURL z&gJ+!S#<;iSSAdVHs3vd*oT!%&K)9?z)QRnxkF_6b|xj}ZIwBY^uib|VPER6?4V8M zGBKj91!=-b#11zQX0K=v<;)0saF!*+@aLdzO5MDsWB*lhkeLKPn-Cscg;@azdcRMubuntzWF`U1ujl*)OSyt zciH^ec|kv%sj@e1`Rk_F7MI^MnBPtJ_SPQvcMFx?Z4RD6R$ajYu4A*aPv`5!&d+QE zhnKsLi^pQnjeAY-P;gK1+Soj_CV8L`zJPk+GxQe%xxL%VYeiL#JHv-D)?U?6k$(KE zpPw_;F3!zu>;A!1YD-_+|ElPbHti~KJFqn0Yfueg{t|f+6hiyT3>P+?%@yAOHzMJHh;IUepwK=KHmiHb!OnHAY@Ub*b(YZ|DbiJEF`DS<<5rg^X=(bOB0SkdajAqKu{8k^qr44#x#gxQLrH87G@FknCTiNs#8V+6&x z?*`|#Q2!geY~u?x*Kda z-^1A7^T1n&LuSsJ)P_pcj3NfM3|pJVJDvc~|`&QCdWYEmxV zc)P`qX!)c!{&G;A9*LAPS(GQEGK_~0{l>05WBl0H4CVdvV~D)X-6=NEFrflA_m;5e zA&~=|0rY{Ap=dz?dL6@ID56u2#fr1hH#ctbgK3l)%Df?{U?ZQcyDyqJ> zg6suS_5R|u-0&qJRCGoy<5Z@SXdB*?F=W%iL@aqa^NT*zIq7Z;$}=SlY0^l&W!o-! zq@UK$Kth(wv`*>ht$s;*_PjJia65VN(@mI99p3t@-(F&1l`ZoAl$YN%l45^SvOo9G z#fnCnJ)9{!_w0Q}6~83*3SicgkYj2V#uRp&X?kukqbYWfm(xz*hv^9dhEbY5eoc$%>*C-wWZKSYlF|M+{$x>MfNpAYUBiGeB3;Zr2r?EhNBl@ zCS9pw!PDwgXKZ$folSyu@_X+qaQXy&t%gLo_=SA;w|0G&{Pl-<@E7_6c5rkALf^E| zhEdO5G0j&d7!mbTyq<#8@4jq(&+9#lC}hmG+dB8U%(`L=lj+cf0Vtorl=?@6V)0Jd z!n}Vh+iV?n^Cez-hK!6+8;$=VtAQO&_Wry{QX;0b@c1|n>zDX``BfYQ>iPG2<=+~t ztF`Ap_&pl_&3P*KULHiA*eD3HA#{`GzQpu4oXu(Z5TB(t&f4giwqZ^d2)s25Bz(E1 z+j`f(#ksw@`P%gBaBh69j6JP6BljoL3o+WBo2}nSo>e2!zVzYgYmSqDfrC#Sfu~O_ zp|XBXk)qiBn&FL(s|j9H%nJ`nE{e`&J=e{;d5w)`;<(21qz9jD)81LOb>`Xx93>y$ zsy&CZsST^0JqE4aW?}56tZV~~BaXrmJ6uB;Q|V2^i?Dn-(^=YcpxV6r5a%rG`*A%d zhZ_`Dm4T%!s7=kR>%Ggm9G{A#?7W_uOX!@)Jd!utoO}OE_GY)+QJREXjhsUw!&Saf zl&M(kVgEk4Umcmn4z>4MT9_mOai|a7PD$x?@$cjk?`g$GfwF-OqjvysXSC(EQO?7e zvuv!;dtye1feJ9W*GX4xInLZ=PWkZTiF1|Vv)BHsfQKwPbu~hBt`zT}T3EWYJGp24 zK`^8&cF;VFIY+E{p0cc`key%aBZq}!=_u+Dp@?rc$01V=yK}iVy%LA4t zlQS)Lx2_EN@=*Z!P8iC`rU!JAMt+ih;CaDOWT=E$T203yssDWvXWksNWwxwrOgR7j zW~*Ol>NA%!@H1b#(`S+e;8E*<2`1V|3%{9%M-Ed*l#FW$Q^I+6J4+hZZ?fJ`3b|lk z%vT)@@2f9NI{j~5O-;4!*zxbo^ELVRuVU_RD5k9P>@5Q0JqzJU3L8vu_mD=4n;syu zxVqLBVs4(&{vzyR9CkuoOJtoXOq6m+akoeV;YkA~MUJOXrBLuD#z4r%b?{-~G@>+$ z$ZZtg?to^m#V30mv$W&%beggc&#dQGk5ec9!>%`P8Lo@1Q`Q{4n4Au&TG;I_1PWu*g13gG{A@sx(6e0c5NcKr=2r$4W(uNtzQFRLpEdf2v-YtT%06|UX zC_@9SU28a#DQd>+X5csY<$~GfBy~Fm3u;x0E)BYHMN=F}qsOQx=RKzoZN135)jFgS zyDhr>mti^_RK2%MWrBKpXFW6m5V8ocYzyZn}Hij_*_(`!!Bd_{>Q1Tp{6%N3(2=_HaSIOQ}kD3#7rQ^qG#dWR56W(3if zs3_^Ak|YtM$wWytIV9>^sY~ORpjok_2tYwm4UqR~O#M-Xl1l7WQuy21j@x}%oIgHi z$3RI#bdvUEWUmlL8A^Pc62zcO+1fi>vebN*pR2uW|0mMmj z5RsA^H3jQ+whXtugcdawCk9Sd>*aLf7(w&3^^&I>BWW8d>Lq&WA517HsZb`JiNrSV z0t|JPP?3%=A@W6C;w}M56mG+Y8cX%_*vWj4keRB*yd2@tL6vOjz-|gofk;sSAKPVT0KEkH=Td<>`wa9pw9KK za>Z|HvjE@_{czaOUXdsJZ!}p+O@Lh!kG`C15hSlUpRd~KRy0sp^;m)U=mzx%%1!Jm z>pmfhbU70Ofx@#Z_fPYYYmZ~oDOhsEm5CF#1J+r>(m$(${e~`qVl;E{Mw<~pwT!N= zhvFD(6>y=hZbTM!n>Xr=LvXP&nNx?xu#zpsTpP|s*m=Il$)7_R1EzOnRgh$>8zV&T zf-Y?TETvkA^Z&%yIkjg3C2KUcZQHhO+qTiMZ5th@W81dbv2FW1edcN|=SS4DYp;51 z)wJ88S}p!@T5Q%Sh^5mtn7iqGd}@_CfYS@VqSNh3>Taj$y#vAsL_E-YASUoEKl zi)d)(-c$!v`+grh? zahp-~^57Fkmr)onDomMV)kg*o%3+=Wa@CH02484iUah_Ab-yDdGf7>sNz14I=7~p> zd&hLkpELBvI!kTmvB=r(0?i_$KZ8WNk=VJP5Om68`D=}yJLn77Pot0r*tn=7`gjpz zeB`$!s*Ak9mGZRqAqgXX-JY&mujYjcUI-WnK?Wo=zk=Y%K1Fga(6Jr(iH)hYfwEDd zXdh7qoF(7i3)RV=otCe+$38U9NR2_%CnADAw}o;O8HV~4?{WHCc+(*z3d2V$)*Q08 zwuz0H4f-EipK&K}wr2?t*A33_S@$*DC+Z}!VTZt9!Q<(pS$4pLQ(Aj`B?A)qu9I;Z|X?*$XG?@2}Deuf|~SX8QP(>?Mg=c*e!^T;Lfvs$vTpx*ajJ*NnHj<;huueLoM8E}cfZ0tcMJJMJ1xe-mVl z^ec%3ET^d4?kqYMctAVs`FXOVFrWSXFL!ONZ}{Y1g6zYHi%9+me`OV~A$3c8liG=a zBR*z4JfGJX|2yFLopO7Hw4Uh4($$nU9bjwk?r#1)0k~xz1(3xjVUFmMf<&@xPj$6F z?bq;CRgK2Kci@_&fJ8G$@k>q(t@}Y6+{fgo&+*B`r;IZrGML#4ypA8x=Ink{Xm*X>B z611&HVDC!DVzoq`uO;mKLJ_ErW;2#Hg0S)kU5yDFQQQYvIln=!e&y!Q4XdX|qr5AM zpwSNBxR41Gge!}wyCen&;Q;sL*6AjoPZ@N9C+C7>Nwp*`yZlbBFWg|^r&fm3oXL;j z@9iuy5;H_->~=tk;=^HQ;&;F>t59AwN^S96f>KY48r`R9h4Fx7dy=)M^N()%e7^_U zo3k3iJ(u@{Qj!g+?M5~WNiS-)`1Q~wf_zfmDmu?hB*~v#pA1i6)=euP48#XSBEmJk zMPB%2J<@gPM}fLKJ}OO*7eQYq@&|Ae4^A+Bz@PQNM7A^E&HE?4!U%V>QV+NJWRO3M z#mYI~SreCO27F3Nf~4-;E6Ey?NZk(FdkIuqK@D-G#ZNIDGq+rLhM~e>7bf+O7XMiq zK|yu72)epG_PDeSt3js!6sIP45AP5hdkQe~SED`-fR_(dKz7+@=g6Y+RTSrEdBZvW zhq4&#h5#|W4p8GzG>f?c(BSxe(AVqrt;plOBmbEqv@WImBPXdc(sA4)=xMZ8&Wqs* zHT&msH(oxgluTPf#SY~Zq_G-`PSpu3jHenlVe}+d5L(uAN+YgZ3szUG(<_R@C8|vi zNZ&Zpcb1B-0%6Djqj9*T19S6{QB+x+@elUly;M3{cxr3)9alqT*(+%sZECicwzM>S zQQ$XHfsBqR?=p_^fT**`^*KrhDX=}(;ta!C+32gK@(qUfQzok#IbJAr3uQ{Ke|HRyj}o zBqhgPhx_H7XcFl%oEc#2ITZx5>dF5kaLmkK3+A(SBJ(#h#bggl@l>c#Z%Erj@ir^T zFQhA@P1}nqqsNf-z~CmFI%lQWRLs>rn1$AQ_`b&&B8O}b!FadFU zESVCs9Z#3q;LvA}Yy3Pe6y0!Bso(zJw8k#!{y|~GDacr3Ru6v^s|Q0DCw9=eN^}J; zKzd?EjtV5l`s<4?<;RZU5)=l*V|!+-Iw#90sW7_~IIJStQb?@9zyO4WNlPn# z+;#l^(k#zLh7tlF>u07xCPv;^xZ_L;DySUX=t^edy?7VNWdCj3g-EvI6{Zf>((|^*Jze$h<8_7dn2wg`$ z$aNhNSeZ%biKA8u+*!#Wxj`Twfj_2bZ4m(rrA<^mksM0Zt|=o%0r8a%lGAd=LH0d) zyw%Vds(P$Upr7vZ$g~!Jyu~LF{qmF*=!@XtiqhOjkJ=aZMemTFX#5JghOmy4(joD; zN)v&efSu33+)8qgFSnGQKZNWqw zVIar}KMCVo-APV*7^09mIG5H}O0?-YJ27Eo91waYC76RUBs;oMH z%2VPc2EYG2dcysoz(&Nr%NUsV?G3ghi?gQipdI*Yl+@^#^$Ov~jW z!<{+*U?A9QNmzZ}9&5@F!pppk<)oUXSPRBi52trGBJ*ecj@x!J z%NE%q$=_<^(V+NV7>~LTaTdbPu8F=7dPni7dHEZrrfCcz?sjvdK?}_e2|DE2TH?Y* z9wz)4Pfp?1fFpU6^Myr(S}7sVnv->w&3J`kMZ2{_*bkHI!(?%H;J0;C7aM7B$nj5G zw(gvSu0J5{C5M;su<)*Y(1C1bz!&+tcge#SQbV5J@(ePkVPMg6Ux1^%`OsN=5?|IM zD1wVjx;$UnPZ!QBJ*71g{T-pbR&kR=63cTu&AfqqcJ0Qu)ne~?jbBrh;kuyIuL~$u zR`?8R<0TIShlTWsiFhI;4^2k}A@nApfXNPBC2d^$f~}r0&ru~fA@*yw(Z|eorVQ0B z$Y7@pZ8x)BRBJP!myJ^K_xoG`0TJL-f&_4S^0M?k_xt4QQ~}$lXtnbx<@cY>-(JDN zk`KFTFLORD3MW_;OJWP3jUpE>H%8HPrs28oQp8Lc93XU_*OUEslwLwk(n;DD0@!qE zUCaU#ydfIPa9JRVucYmnl$v4L)v?3OB|Z7LLdDy(|296ac(LQl9mC)9yZ=^9iV~og zgP5)MqJ6-m_#Pjt(a`&Lhm6v<(0P{2?Go&@I5H6cM&Wb2bVSVd;*Ft|^H!$$BcZw~ zLxEZ5?=qNuM}R5|GX@JZp9>E|j=rHK7fQC@x^p2M>3aib{FO9=KgrRdi5C8ZI1O@6 zZ=*}0$o7q2pDZPCU}kS3@Z>?_w9kR){^?%1o9nuM*ctuY_4w;FFgm4z*!9@B6d=;W zB@e(&xFtTfwElLqH+46qt^D^y);RLL1N@pk2>TN>-cx(a96mYRo5$mLwa8d6rP;1L zCEbkIx(h#flMea|*`SrD^>dX+!|ofjU_~p%AvBuCSl@$&_*CM*sqtStyHn}mHTT@f zGhVxYDQn`vy`89g8Bo`u-Sjt~X{f4E5Dus$KVV~9zTn&x+ za3jQkVRW#QgrP&HYHJ6MlZunU5LBX}a7WvYd+M!uJJUNl5!kiXwMb2tXmhj+Xg0H& zP1EnbP6ukq>JGxYU3wo&sXv?Q^{ z4^ILefz)y}ulyZ2)CMm&k0qZv?Z)qYMG=c2VdM~5;ZIwFZL$e2Ys zwSyo>CZIH+zdYa z3#iKYV_eUw-Qr+K21y(tq;bV{k^17JaA8G`^UoRd`*nbP4;Yj`neYo{$ntX zH(rG6?e5Y`krdb5s7cTA)Gi?~OA6l42qznH0ONj2aE&jdxF>4Eom`Gop*Bvmo+SkO zzd`0Vx;nM1%4>x{X)`Xxa_pmGlT#sy`Knze`{_dY^auBa+N2!};#mqS9kUN@uSS-M zW)yo@$h>CnZ3OCjwC3#&c<;krHqGAklXszs{jgONb5m-WpQE?&(ekVvFy>`LBm^^z z`KxzXCeytP3x*$p=OA%LSw$x%G9-n8iH|9WZ+>i|k6H%X8(Fg)Y9bRVG{G@CO^yu& z*9(*BR*k!)O|8*8N^mAXS%qjr&DkeG>M=0)lvzG`&3^O3hcG{;6ZM z+LC;6oVxD84`bNMP&u3`0VCqaSBd_ z)5%AHy+D1UY^mDRxkPVprxg#z^4_HsXum=GD#1W)s;La*HaP_46LYxJf-@+z$_W3W8o8?lAg1-Td zuaoEg?TUzdApiQNnw6P$!0qbjWD4Mx^8)Z0y=U25pcvj0e$F#JW1VdEB2gEb_2SBL zK<88Z_J+1g=FKlz6z$WFgPN6vy(}ymr8!`RcfB_mufglpRBY=tL`?Ok0BZE&bOdH` z#6^H+2bf^4P?fo2fOFzG(=SalfXZ7ZhV8_+nfcIg7NWovT3`qcx_{B%Bw9TKf%0Qz z5hR%{Q3uB{cc8zj=k-e%QEO%JF8y=lc2oCqj#Hz}C$DDb#N+$D(r>+!C+~ZyuI9s{88CI30YY@gB6!p7_9LQ za5Y4-_1%8Cr97QK0%IJM=wXcwgzTSNjcHdp+8+r=Z{eRrj|Ya92=ReXu8ua`fj+9U zxp>is#crPgQoki91OoFq69|HdsU?_uD_8gHu9>)&+e(%MOI5n|;+OST2IE0th{65~ zl=aHVkvscVYalO^RPjO+JTN^FswvOfM2( zZndigV(FSYpd?{3+nnj)4wT~k8C9SKfN!%0Pz*pXu;FBR68$chCe>zlH^u?G;<{aa z%0Z_9yUh-Quso$>WM&!xkcxLm(9&_xb6oAM5ZX8ka&VK|yJo#Ms}U<1%JF{IW1u`F zYRV%Gnb{P1>g-WZDYhYW<>29;oD)qF?5YWteW*)w*!-H@Q{}4V2XiRRNt1~xp2oxN z7*)sm#4$;wZ#N9xomEo?jr1^1I9V=hxsU)zRV4?4 zFd}5^2~_6ibuuDH0rq;JG*MT>S{iiN!wV?l0lb1!$6pv zDOEZt43tABRrm01L2h9V3?@r^*1@wMwU2GTGxsa}*{YQJYmz;mHZ)mRD*hKMuzr%_ zTxppvh+mAXt-fP?z9IKq!fvAOIVat>lc2F>B~JOpy&3v$!wSV}Fr-$vw=r%X$4?eb zQtirM&`iQuDZ7WOvp1U>epn4=BhjEuqip4kqXGnV(Xw-w-|T5dl4Z_@%^OnjHf+BW z5TtRRpq0OPwF}9Y#>rC?G=lRov_`YD{5lq)%KlnG2_0+sLKj)Pye_tq)IKR%(=R$L zlLfRH$W>?1f(G|E+axUZY|>USU|lGbT=!ey88Z|eZ{c1lYGMaNiD$w#!?y$x&e+UT zgLT?H2UYEqD@SnlQMb0WwsG8+sNAhz9LGq&@qkx~X@Npi+b$F=Nl#{Qo;Y#3+9G;) zJUmB0^$UbTAnW%mlfz4&Lo4MqC~!?M;RCzeDtPIhl2kD-dYZvG9uVhs!v@5HvE#C` zYwjy7gO6&mZjfxC5OeHMq4?*Pusz;LlSs$4(%?HLykJkSHJh^?n`sS05SGO!!jN1RaH4>oHcFcsd==4e0!ie z0MX~;n!a~p;he$r9I{x8;^7e<$@=Q1sN;^f%~=FN!7@E5%O6A%6lm53Z0YUfOQYOjiYQVHbw^DkX*sRvWHU_zJl)gPmbPRSFBoD;zLbMCMC7D-Z|+)pP^`gVY+ zA8kIs{hut(=Wqh>i2N2n!qnAEN`ueq)XG7#5BdZc-C7zg-UZI2d3=v0nT7^;Eui80 zG0Vq2Y{<&Cp*RqOVN{qty)qBiYym$oJN3L}ui(XsXKL71rV1^VBd=qKiE}nXbO7b_ zjC|TnJ=BFIlavZHb0S2{+cCu>lczH1%4KtPJ^uB+r!fO(N=NMh%NdjMk{5*EU{kW5 zQ4g8Q=d2?V%PaFm==EmfFN17)e6o{jg@3QrTjlJu+~*yMw8y9m zt4PMf3&#+s5gsG(fsctQG>O~MmLfQ|p=c>-NTUVS-sctiV!8;s663H%9$fB&xUPh4 z-NapA#_)MP3*429Ji+!B|_}acop9Y!s>|8qqiYg0ffA z0|^i1Ev^OQYk_(EJFNPP(2RJ+qBhL;s%!0+Cx;w~7ctXsnNiZ`203b^nj)0$S{Jz(uffeC=Jo<`cz1xS^U)?xzd4#Ku^*A^gdER6A@1Cj_Zfa$v zu!4+HhO0?czbNes0_){;aXY7YI2v+I8GWb*m_&bIM>)nXuls|<^S9VBs0@E}_4N(6 z<97kAt-bGL0KckxK^*^K=%G2g|9*_Oin_gCW0w9^iM76`ifoU#)zZE0<7TUJ&!HXfI| ztFv%{OIbKTchD>qM#wWQSRy1gij!CScka^ZtXE%#0z_)U~YYe#S8V;S-hCKMYdur$)RuVZdcM9!P|N3xp|o{J7=;g%?Y zgsW+RlHZXZ7lH=is1*7WH3Se4n4dI=kO%BhNn}XhG=ZScy~M%@1zw(oMtdYa6F}AR zxGEvc)Sy*rxBIW#iRQQby|R<`#*zlg?@at1hb?F4;xGk`zvr^5*9oxC{0P^-$2qU# z;rQH7RT^-UcugNCn{Kl*X5g*mn1@VdD|nF#V3z%INVN=7V$wo ze`Uuf&J4+TfkaBTnWgji@r8?H#i3v%LAj;`D?lk#}%LhM@e_0hHIo z>HVvFwohJ-LdeIh`$e{}T*fCoCY7a7o7+Ju1^%R002=JI}#F+#(i0t{vP3n3kKc)K1; zgGmqy@r#NvjC{*Fqi|SwEKYg6!zBjf`N0zCoe%t7kAcaTi+h|QK^L6Gb_X`ke6XGE zPDONVKRQqB1XLH;%@4zEqVNLmiFz=!sl2ExRlwZsGOr0aV~Tm%9y*<#C= zgAFr&4hi4hN6rPi_4H-u0X5}c0lPQvgv#xjDE>Dx-wknS4|UlIBUGT+X=tsuw0Gu+ z{A7L_N8F}xt~2_hLCP`g&uZbpigB$v0SYcuM?3|_HJx!+>JPh$LS6?_4{eFAqAhH&YV-8Ry{KK0N)(!IEnZI zyAzHbW(w_B{-K&F#6EN6YQ7-C2`8Kmcj-&1vCHl7v|X3kKu=;F6#X+SeD!VH2tpsf zYm%JpseXKJiRK}JA2Wc;bZ>|$y+eovVNXclhO;F9X|YY&>C30~3?E!-_<)EtQZ^1_ z>Q2{uif5r27(N49*nM?m;i>JWLSNU)=9c%*_Ag8GLoduwq4K7N2j4D$uWNB%131b4 z#RpEhpHEd+N)+jxb*5zzjfUo4-|^Aig$o-ESe z`Ha#rln6JJGkFa*xNj1dIO{BR+!fMeKd~mZra@#9?;jS9@!L-0cixy4Ac%RZ^ z2bafD)vG_!fNaHvDT;4gYFb{$3&)S+(?x_yaJpKBn`2qNkmIk==7f~L_Z_3Lp{zOU z-KtqOw@GKA*tW2d3IjUjDENNfn(=3LHPwD?VY`czo%OjPFM8aBx2)On(k40N&`c7u zVb<1f%1A{y#G+`2VFLZ$C7uJ6@TIp)nW)Xr6&hv34A=zu~MEfBSwC zN@#7*(G!WE3KH3n9|&sZ9|-n2f9@g=&SA3rC~qn^p$1(Rw{hQ7ow9SqkuK$b4nyWt zOfb2_sls*F#vI7N_c*Y|DJ;KZ)^jO$De_%3EC77EfhzZY%4^b|*Z)<=%jD=P>UV(L zJ>XA`+RY$hFykRO5*Z@lRx>N%?Z!Pdm}WW@GzhU~ye6ycPx>Ip8JS2PmB;@9lT9r~&_dwxRB=k5p zo_lBd2vH(2U6^JQJ_;vE5si^DH#d!pmI0--Pd&->f<4M= z40wMwD8bs0_m9IE8UO*Js6;!IG@5K0KajbF)cgF4}b(xX0e%oST%n z?oY`=_ncG6Eaa<=8n}qjiyo=hsz-9cH#UfG)NKY(tvq%cn=C06o%z~olL538Vsz& ziq!+kuSe}CzV($PNlsFd?9nt700&O;=5Y3t3IQ@$ou z2**9vA-X~hQ}_$Ae*>QU*@)2FcAA6VR|L3- z7~;!b0#UL*cZ3SuKw%XGsM`Awc9JzPef*3)oCGUTW}97Q*028Dz6tabGMmdFAqyLiuzxork26SsW#U`jQhhO1&bFuTus`i~L&uDMM z`x98OVS6+NulM^YYEhR7L8Oa=O1^ji$794^rFK!;nD2>t5?V&?}<1f;uW z?Q(-v02z-oD-2IM4XLqmp~~zlrgA5?b;<1MCl~3%Y`2*rel>+%WFRY$J9Vu&s#nH`%qU)p}V~HjlKxC2M zo2kk{)UgK!rESUMj0SztCBWk)l7p^xV5Tw!i5x0*8mV+e6l+-0R>*)|2PeBVRSnCy zWHU=HChSoV8GA$aBlFz@L8KHD95^}cc!|oG&8aQo?ePFMLZMtccp?C5ll)>aN|)Mq zrNUB@>%&0mIyvqCfuRg8)wkTwUpv(tbIo}M%f7M>&Lc$^7j4^;^L@4HhU z!+|;r=J{1wtAApl|MIPl#!J0p#n`76g9tyo&Tk;p00pi@1GeK34+WelO%%e&KwDREA5ox1?FnasV>qu(^I~kxi2ro<>q~ohmG7Nw$-g-iFejQ zxsxC(ukFSi&8MI*fT&E`t*ep&P2nGKfRI-@x$9r^ZLjsId;8?*m>uA=`L#K*`%~Pg z7pfs?g#u$$#kg&2M0Vwj0}@=rpwxPtv~o20>hKnRTxfduP4ay%#6{SpKo-)i6}`P7 z_EI>3jua$dI}3DYmZ&4~T@m9MioAd4aAEnF*bdF^Q7_#uNqbIRz1q>B9Ij5+skvxV zcClPRlvV+nv$6-O?@`WNm6_(qtZKoM5ogxg-U`X^8;j3;(dWbL9iS+AbJPmI9L`vE z?kfxcq^&$(&%AvzR{i^1{{VKKzAy(8xJ=$Us!j#j)9=2^%NrwxgQ#B__c7Zc4TegJ zh6pZ_@4oa1DoArReNWMKo*K}p^p@sq8bfr7K+Vso3>uDtQoRPt8KC1)Gp-FyU!yXhPFye^kOY{sl3R>vT z12^sc;PN*CC*jsCN$xP?5r%~?EPJQz^Zr!>GVj%<7hUw306Ba>`t)?O;$10*vR&7r;xgbi z5xH+*v$BxnY(*Ncm{1&XS}`?i<(xSp81p9g=ESewkMHcg}3)Y z95pd;bnYWL7s@3HL6~nmVEe7=t28yJ|S@Kl=0 zJy68jh&J}XXC1;5_UF8?<7QM_?!P5DmVp5iyG(x&uN&UTe)=!b0R^%cfcW8Au5g5; zoXNuh?d|_$up^tN4kY~rUPgGl<3c3y10L&e^W4a@JoCH1H)( z4a=+wbdM*=eu+5aT-siUZ3jBcEXvzZT40{ME;ofnUw}XXFX2n4l_alM z4Y!R&53Osf_DUE=#L_OBM;)8#Lvv_xUg)vIQpPhIcdu2!p~e^J;enEh2MNsTFi4@r zQWB`ccNRC=8Bk_Un?4?)y<2(p5N{4YAPaGI7XU6fmFe2dlHR%o|JbqBSaT!4tLvF3_OWhduN00a43QKmf+U1Q&P3RIz zvb|gMJ+@@@$1KwD6n8X4RHL_}LfsaSVoqImKAiJik8NATubY3O)liq6nMg7nT{*kH zklK+zfxa%&51Y?zTDF)m#9tSN!Dy?j=MivX(1&LFY)Tivj1#7R%uUaplTRGcnaKFt zjFgy)dJjVekJMJ)F|_;sKIK`wre9y1ngu`Ul75h8yxff1b^N1`ydR1FF2x)$vS?lC zR61m~Ee#qs+{h-j{~+pnMs`1q6z?CN*Qvw zh6-xsEb)Z7>S#=Av%h`G^1lS(015f5;c;!eJ7POmzM6`OAb^CG=auVrz-|g)tnCtj zIhep@{6_8cKHfgbXGeK((@;e?wMsf0aAq(+V}t%wtq;v& zG#;#;?m*7(^QH~AmkB99G!+7$lB0JJC{l9@5ZK`GHvPULg z-}LJ^a@JG*bPkn_RN%&!wV&AmQe%!i$~W$uY6!2~cm)#SD+OE3?bRxy+qGCFO@@N!ACQ5bb1kv0 zbz{S{DblxqxG3zj>d$plAlgzPP(_fuqh8D>mZrDNZn&%7wmJ;*=;0!4;qZG_3G~>> zBSBSf95}-`9uuV=Qme?*rgF1TeNpZ~JUL6wQc<061|Ypf5da}0viJ%q7;xpI++d^f zz7g$!D=4}-tSn??OFQ8f2%`>pLxA2&JZ%YZ+slPME}Sb=i0kbV;S99*%hN5(ifim7 zo5CR(<={_oaof0&{e|x_JBQOLvh&YXmg~wnV{0&OWo9kVIWE_r{yOp-^u!fzhcZUF zOj;7}qXeR1*Pk$9k)&*hr1%7VA9P9u=0)}kJzf-Dp_U8EP%L9HLy*i>=Wl=cX@2xQZtnXh1iJ|9}Nx|={&X|#TP4G7&{#M2uUxirF2}!75M3aXq z#KDC)Zm-0~gGgW6-IucgX*WOD=~sa(L+-8@Z_7?TF*H?}A3~52kG7w3R^a`%GKlc~ z3(j`IZhGNNu_j5INkJ!L(ph|CAi=5M6j+Pakn-PxnjHr5^1L2X?|w$9{20xquFRr3 z>;pPME=6Rn!AkdC>;lYcyeY5m$r1>1ad`f;=JVqif@DfQtkAQo#uTkZMek)aQw2oW zSd$I$9c^`N*s4Kh6u|Km<#>vfZ#i*HvVTj#n3q1LPx;U)G|#~UPUe=C20?R*nSey4 zp3PUy_X55`gvnkk17&LEzilRK&5!Lg1ITmG76Ni?g#h+ z^%L<}{CJFSQL^Of!W3q)VeyrV!LUzb+xPi(z#{F}4$8l~2mxDK`ts|5)wb6BtAO1< z-wBO=*EB?(G0;k)Cd+r_`J+eOwnhoRERn+5eW^bYW0ySBh##|13?}CXb@u-q)`@ty zx(cr3y9(Ut>5O)k@LbbWWz1}l%M0@OtEF$KU8V1BQ0IENTz06n`AFB2iobG;Q*HcH zY7u@;-+0%p0uiOt|_5po;k?xm)%fUEUc!{SX<>(5mAv1 z+1mO+CNKCWo_%AT1kBEV&h+$M^@TkECRbNw)r#b2un{~Fi z)sQZjPo{N{mwdAIF*LKzG(wJSvs%2M)AeW(D!!e{VjMcugx3-HqOE^@Dm|iFyV&t1 z(mLB0;#|#51Pt09;N;{)hwcY;IPjYC3!rho8~D3}RIr77HFOk;KT1&X9>A<<)EBO2 z_p}?|={d^y$|Cba__E{PWp65tmAC5!BW7T!noUf7;ousV!sX1j!0DW9&dX|Ts5N1e`q zEZ#pn-Pk5_H;vek_BUZC=$}c(a?q{gMD}qh)Biy0_JWTs)E+^c1skU0~#-?r?!lTZ-1K# zx(uqnUig4|V##ZuVjAg58X<#ZCMyH6)K8cgxi95`_4}GoY2T>n-0!3YZB+%N3 zsYDiYQO8*z6Q=7⁡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ȫ^-C&9cgbP`i_h`*EBqH)t1#(GCd7h@%Cpai_r zjuFo5v3Y z8OYcLbLp_24do*6)$?bsy^BSBPU`Gky&BAZvov4Lsu4j5^UQuLtR^RumD7LaaroU zLAu|=eS4#7J53ot#FK*;eFzA4oZ0y(?W8CuFtFrFt{Sz979oh$0T-!InbyY0x*0o& zbhb*V=w~mHHoV1daA|cuJ`H7V@5J2&XCG6J>a}gF->~2c7a(V;x1ZDtu~=B7NLMYo z_X?Uyi`H&kQzD^QXBQon^wRgKCD=*Qr$Nw*u1+Q?IueT{_iXM z^*2m-VugyYX%}lGVHr{>Pc9mzMyl7xoVtD>Ya_*Go4X`0>E_s3&SbAt`|%FMEJPdZ z(kg`WMorDrq^}%@k-9?4ru3N_jU}5Rr?RQc<5P%aBauffCD}TX1Wnb24^8>`?1hKA zuRB!aeQ(v;O?IlT)t>py_Sc?U(=*c-Uq-MB8@HY>M=K@c{6 z<=PhBs#ylXXRnXF$I-`EV6L=}>x_QU8YA&`YJ%b`ij{cm4a(ENKiJ9A>UxTE({MEb z3$}zO>&j<-Y4+tR%i>i^_}+3;aZmS)26Y}=C=O5WCn8dRz=j(VfoOSS?% zI9@0aNyD;eL+C0r8Qw_La$2~J^cp;^dPVzyPb#Dr@%Qw1P*Jd$1?oow+}{= z`$W2DB^KFzm!o&a4Q#I6-75?oD8`gnSuzLqtU^6Sgs2D#qJs)1mtHVpbI*mvgx7@l z8_8`h&6>SC{C)TZTmpY5ZT^-!zS&T6HVs)HKlH6XW(sdXQyS` ztsL|r_ZB`;yc~L@H(ZrM#_QJbBTY5oX+UAkFLN&BbF+1?t;qV*dn2(O;u$uEjziUo z1t|hwIX1f-lY|MhixuWMsZ)LQ4j<>NwObCgXgU6z-g!!N9gzRdnX{jbj+>z-MrlQc z@saDzBV4UWmqp=1hsWv zE7;ZvCV|@A31X@~wJ7@Lk9G;GL8r!g@yQ=(Z#O>mL@BTz4#)MIe(5qL(#*!x5|B6v zK4|r_h*LqK86)-i{Xzd*sV+_7tZvsu6P>-k=1P(?MXACf-(Ke%S5(^84Z-s7QVs&E zOIpp#;Z2FFU|c=ga=yJS3jtlPkybzcBf(t-1z77gra(#|6~iE<5&1^YU0ZUGSFM{p zAML&6LB;QIY*u;6rXC$0a{783qb_!%lVP#oq7l-z;$!wcyzm(BmOWR2ZI1Q@p{wrC zv2={Nx<8pY*7Ty3C?qCWz!r0Q;mjRSEKi!Mh5jwn?=CS85>|C}s**);^(JL+6mYOT zp@kYztZDa*3UF*C6*C+CZ$MY&Rbi*}?PtvoNk!5Z(Hyzb7br#w4R57g0!`?BTD0z+ ziE{E}p}jlgTFtS2mvtkO<}d;GL*?ND2}>i@6sQ5d7)6P36b`j!mEH>9Qybn6-h-ZB z-WT{fzx;ZH61{rc-R?b(2!DKky?42MTK&_%?7n{rEZTL>+piQl34{Ahp9$aRcuD;7 zBX;{D8mrjZyuZ^OXU=fJqSg>{>+^DU{J)#c{c+HrGRFHmEY!f{Pz{vXUo?$>hW~X0 zENy|7_U@jJ?(Dwijt+m13iuzT5&xI^4*)k0;4k_gH!s&e^&kKBOZ;!F{FnX*OcZFw z1E9g*3XB+;G3w`(6(l9O!>|!xBlBQajQz%vWLrM1SUtOkyj`$F2MXu^C^#l3zl7Wz zJdU}0xkWPPYiy2#${KY_MM#DHLJHXX%MU3Uvj!A0@f~=N55F|;T%V;x^w?lJrd!m; z3oy-ye++{e6XB3)?TpDohwDPv*Ji%sdOl-9eZMv0UF8gzrIqmV$;M>8t?^*Vh@%5N zlxiVtU>AK&5#12-06LGG(L&A2q*KZO1-*hRkSpTrFutkR_!ou#F4WxU{rY~?V`+RC z!Hm;{DIMn4nJ%xKRoCl!4P!qus~|+7I?OF!cZ^lf6+QPe`)ac={^ASGw#}u-K#>z= p_;t0oh#MiR&vxQ91U9VKmtqO}zX9++q5mN84+8%n@NbI1{{S>zD)ayV diff --git a/bundle/ruby/3.2.0/cache/parser-3.3.0.5.gem b/bundle/ruby/3.2.0/cache/parser-3.3.0.5.gem deleted file mode 100644 index ae80d72aa086e9507895dec972a45d15d4b03fa2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 954880 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